Name: series-workflowd4wvd Phase: Succeeded StartedAt: 2026-07-22 17:15:48 +0000 UTC FinishedAt: 2026-07-22 19:39:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[0] Phase: Succeeded StartedAt: 2026-07-22 17:15:48 +0000 UTC FinishedAt: 2026-07-22 17:53:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[0].run-triage Phase: Succeeded StartedAt: 2026-07-22 17:15:48 +0000 UTC FinishedAt: 2026-07-22 17:53:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e354f7d60f14a3eacd5ec7b607346a5612f655ec", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MICROSOFT_MANA", "MANA_INFINIBAND" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e354f7d60f14a3eacd5ec7b607346a5612f655ec", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MICROSOFT_MANA", "MANA_INFINIBAND" ], "series_id": "49feb0ee-d0b1-4dbb-8b35-593d07e85d2e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mana_ib_install_cq_cb", "mana_ib_remove_cq_cb", "mana_hwc_get_msg_index", "mana_hwc_handle_resp", "mana_hwc_rx_event_handler", "mana_hwc_create_channel", "mana_hwc_destroy_channel", "mana_hwc_send_request", "mana_gd_process_eqe", "mana_gd_destroy_cq" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE3OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01JQ1JPU09GVF9NQU5BJiMzNDssCiAgICAmIzM0O01BTkFfSU5GSU5JQkFORCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hbmFfaWJfaW5zdGFsbF9jcV9jYiYjMzQ7LAogICAgJiMzNDttYW5hX2liX3JlbW92ZV9jcV9jYiYjMzQ7LAogICAgJiMzNDttYW5hX2h3Y19nZXRfbXNnX2luZGV4JiMzNDssCiAgICAmIzM0O21hbmFfaHdjX2hhbmRsZV9yZXNwJiMzNDssCiAgICAmIzM0O21hbmFfaHdjX3J4X2V2ZW50X2hhbmRsZXImIzM0OywKICAgICYjMzQ7bWFuYV9od2NfY3JlYXRlX2NoYW5uZWwmIzM0OywKICAgICYjMzQ7bWFuYV9od2NfZGVzdHJveV9jaGFubmVsJiMzNDssCiAgICAmIzM0O21hbmFfaHdjX3NlbmRfcmVxdWVzdCYjMzQ7LAogICAgJiMzNDttYW5hX2dkX3Byb2Nlc3NfZXFlJiMzNDssCiAgICAmIzM0O21hbmFfZ2RfZGVzdHJveV9jcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciwgaW5jbHVkaW5nIGFkZGluZyBSQ1UgcHJvdGVjdGlvbiBmb3IgdGhlIENRIHRhYmxlLCBoYW5kbGluZyBIV0MgdGltZW91dHMsIGFuZCBhZGRpbmcgcmVmY291bnRzIGZvciBjYWxsZXIgY29udGV4dHMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBkcml2ZXIgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTc6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3YTdmNjczYzVhNDkwMDU0MDVkNTVmYzI1NDBmMjQyZDNiODljZDk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTc6NTI6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvY3EuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL2NxLmNcbmluZGV4IGYyNTQ3OTg5ZjQyMjkwLi4yYmY0YmUyMWNlZGU3OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL2NxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL2NxLmNcbkBAIC0xMzEsMTIgJiM0MzsxMzEsMjAgQEAgc3RhdGljIHZvaWQgbWFuYV9pYl9jcV9oYW5kbGVyKHZvaWQgKmN0eCwgc3RydWN0IGdkbWFfcXVldWUgKmdkbWFfY3EpXG4gaW50IG1hbmFfaWJfaW5zdGFsbF9jcV9jYihzdHJ1Y3QgbWFuYV9pYl9kZXYgKm1kZXYsIHN0cnVjdCBtYW5hX2liX2NxICpjcSlcbiB7XG4gXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IG1kZXZfdG9fZ2MobWRldik7XG4mIzQzO1x0c3RydWN0IGdkbWFfcXVldWUgX19yY3UgKipjcV90YWJsZTtcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlICpnZG1hX2NxO1xuIFxuLVx0aWYgKGNxLVx1MDAzZXF1ZXVlLmlkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMpXG4mIzQzO1x0LyogTm8gcmN1X3JlYWRfbG9jaygpOiBpbnN0YWxsL3JlbW92ZSBydW4gd2l0aGluIHRoZSBJQiBkZXZpY2VcbiYjNDM7XHQgKiBsaWZldGltZSwgd2hpY2ggbWFuYV9yZG1hX3JlbW92ZSgpIChpYl91bnJlZ2lzdGVyX2RldmljZSkgZHJhaW5zXG4mIzQzO1x0ICogYmVmb3JlIHRoZSBiYXNlIGNxX3RhYmxlIGNhbiBiZSBmcmVlZC4gIFNlZSBnZG1hX2NvbnRleHQ6OmNxX3RhYmxlXG4mIzQzO1x0ICogaW4gZ2RtYS5oIGZvciB3aHkgXCYjMzQ7dHJ1ZVwmIzM0OyBpcyBzb3VuZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjcV90YWJsZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2MtXHUwMDNlY3FfdGFibGUsIHRydWUpO1xuJiM0MztcdGlmICghY3FfdGFibGUgfHwgY3EtXHUwMDNlcXVldWUuaWQgXHUwMDNlPSBnYy1cdTAwM2VtYXhfbnVtX2NxcylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0LyogQ3JlYXRlIENRIHRhYmxlIGVudHJ5LCBzaGFyaW5nIGEgQ1EgYmV0d2VlbiBXUXMgaXMgbm90IHN1cHBvcnRlZCAqL1xuLVx0aWYgKGdjLVx1MDAzZWNxX3RhYmxlW2NxLVx1MDAzZXF1ZXVlLmlkXSlcbiYjNDM7XHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNxX3RhYmxlW2NxLVx1MDAzZXF1ZXVlLmlkXSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0aWYgKGNxLVx1MDAzZXF1ZXVlLmttZW0pXG4gXHRcdGdkbWFfY3EgPSBjcS1cdTAwM2VxdWV1ZS5rbWVtO1xuQEAgLTE0OSwyMyAmIzQzOzE1Nyw0OSBAQCBpbnQgbWFuYV9pYl9pbnN0YWxsX2NxX2NiKHN0cnVjdCBtYW5hX2liX2RldiAqbWRldiwgc3RydWN0IG1hbmFfaWJfY3EgKmNxKVxuIFx0Z2RtYV9jcS1cdTAwM2V0eXBlID0gR0RNQV9DUTtcbiBcdGdkbWFfY3EtXHUwMDNlY3EuY2FsbGJhY2sgPSBtYW5hX2liX2NxX2hhbmRsZXI7XG4gXHRnZG1hX2NxLVx1MDAzZWlkID0gY3EtXHUwMDNlcXVldWUuaWQ7XG4tXHRnYy1cdTAwM2VjcV90YWJsZVtjcS1cdTAwM2VxdWV1ZS5pZF0gPSBnZG1hX2NxO1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihjcV90YWJsZVtjcS1cdTAwM2VxdWV1ZS5pZF0sIGdkbWFfY3EpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHZvaWQgbWFuYV9pYl9yZW1vdmVfY3FfY2Ioc3RydWN0IG1hbmFfaWJfZGV2ICptZGV2LCBzdHJ1Y3QgbWFuYV9pYl9jcSAqY3EpXG4ge1xuIFx0c3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBtZGV2X3RvX2djKG1kZXYpO1xuJiM0MztcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqY3FfdGFibGU7XG4mIzQzO1x0c3RydWN0IGdkbWFfcXVldWUgKmdkbWFfY3E7XG4gXG4tXHRpZiAoY3EtXHUwMDNlcXVldWUuaWQgXHUwMDNlPSBnYy1cdTAwM2VtYXhfbnVtX2NxcyB8fCBjcS1cdTAwM2VxdWV1ZS5pZCA9PSBJTlZBTElEX1FVRVVFX0lEKVxuJiM0MztcdGlmIChjcS1cdTAwM2VxdWV1ZS5pZCA9PSBJTlZBTElEX1FVRVVFX0lEKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAoY3EtXHUwMDNlcXVldWUua21lbSlcbiBcdC8qIFRoZW4gaXQgd2lsbCBiZSBjbGVhbmVkIGFuZCByZW1vdmVkIGJ5IHRoZSBtYW5hICovXG4gXHRcdHJldHVybjtcbiBcbi1cdGtmcmVlKGdjLVx1MDAzZWNxX3RhYmxlW2NxLVx1MDAzZXF1ZXVlLmlkXSk7XG4tXHRnYy1cdTAwM2VjcV90YWJsZVtjcS1cdTAwM2VxdWV1ZS5pZF0gPSBOVUxMO1xuJiM0MztcdC8qIE5vIHJjdV9yZWFkX2xvY2soKTogbGlrZSBtYW5hX2liX2luc3RhbGxfY3FfY2IoKSwgdGhpcyBydW5zIHdpdGhpblxuJiM0MztcdCAqIHRoZSBJQiBkZXZpY2UgbGlmZXRpbWUgdGhhdCBtYW5hX3JkbWFfcmVtb3ZlKCkgZHJhaW5zIGJlZm9yZSB0aGVcbiYjNDM7XHQgKiBiYXNlIGNxX3RhYmxlIGNhbiBiZSBmcmVlZC4gIFNlZSBnZG1hX2NvbnRleHQ6OmNxX3RhYmxlIGluIGdkbWEuaC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjcV90YWJsZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2MtXHUwMDNlY3FfdGFibGUsIHRydWUpO1xuJiM0MztcdGlmICghY3FfdGFibGUgfHwgY3EtXHUwMDNlcXVldWUuaWQgXHUwMDNlPSBnYy1cdTAwM2VtYXhfbnVtX2NxcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHQvKiBSZW1vdmVycyBmb3IgYSBnaXZlbiBDUSBhcmUgc2VyaWFsaXplZCBieSB0aGUgSUIgY29yZSwgc28gdGhlIHNsb3RcbiYjNDM7XHQgKiBpcyByZWFkIGFuZCBjbGVhcmVkIHdpdGhvdXQgcmN1X3JlYWRfbG9jaygpIG9yIGF0b21pY2l0eTogYSBDUSBpc1xuJiM0MztcdCAqIG5ldmVyIHRvcm4gZG93biB3aGlsZSBhIGxpdmUgUVAgcmVmZXJlbmNlcyBpdCAoY3EtXHUwMDNldXNlY250KSwgbm9yXG4mIzQzO1x0ICogd2hpbGUgdGhlIFFQLWNyZWF0ZSB0aGF0IGluc3RhbGxlZCB0aGUgZW50cnkgaXMgc3RpbGwgcnVubmluZyAodGhhdFxuJiM0MztcdCAqIGNyZWF0ZSBob2xkcyBhIHJlZmVyZW5jZSBvbiB0aGUgQ1EgdW9iamVjdCBhY3Jvc3MgaXRzIGVycm9yIHBhdGgsXG4mIzQzO1x0ICogYmVmb3JlIHVzZWNudCBpcyB0YWtlbikuICBBbnkgZG91YmxlLXJlbW92ZSBpcyB0aGVyZWZvcmUgc2VxdWVudGlhbFxuJiM0MztcdCAqIC0tIHRoZSBsYXRlciBjYWxsZXIgc2VlcyB0aGUgTlVMTCBzdG9yZWQgYmVsb3cgYW5kIHJldHVybnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0Z2RtYV9jcSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3FfdGFibGVbY3EtXHUwMDNlcXVldWUuaWRdLCB0cnVlKTtcbiYjNDM7XHRpZiAoIWdkbWFfY3EpXG4mIzQzO1x0XHRyZXR1cm47ICAvKiBhbHJlYWR5IHJlbW92ZWQgYnkgYSBwcmlvciB0ZWFyZG93biBwYXRoICovXG4mIzQzO1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihjcV90YWJsZVtjcS1cdTAwM2VxdWV1ZS5pZF0sIE5VTEwpO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBpbi1mbGlnaHQgRVEgaGFuZGxlcnMgdGhhdCBtYXkgaGF2ZSBsb2FkZWQgdGhlIG9sZFxuJiM0MztcdCAqIHBvaW50ZXIgdmlhIHJjdV9kZXJlZmVyZW5jZSgpIHRvIGZpbmlzaCBiZWZvcmUgZnJlZWluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzeW5jaHJvbml6ZV9yY3UoKTtcbiYjNDM7XHRrZnJlZShnZG1hX2NxKTtcbiB9XG4gXG4gaW50IG1hbmFfaWJfYXJtX2NxKHN0cnVjdCBpYl9jcSAqaWJjcSwgZW51bSBpYl9jcV9ub3RpZnlfZmxhZ3MgZmxhZ3MpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1xuaW5kZXggYTM4ZDRiYjc0NjIxZjkuLjE3NzExZWUzN2M4YmUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXG5AQCAtMTYxLDYgJiM0MzsxNjEsOCBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfaW5pdF9yZWdpc3RlcnMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gYm9vbCBtYW5hX25lZWRfbG9nKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBpbnQgZXJyKVxuIHtcbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YztcbiYjNDM7XHRib29sIG5lZWRfbG9nID0gdHJ1ZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKGVyciAhPSAtRVRJTUVET1VUKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbkBAIC0xNjgsMTEgJiM0MzsxNzAsMTMgQEAgYm9vbCBtYW5hX25lZWRfbG9nKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBpbnQgZXJyKVxuIFx0aWYgKCFnYylcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiBcdGh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiBcdGlmIChod2MgXHUwMDI2XHUwMDI2IGh3Yy1cdTAwM2Vod2NfdGltZW91dCA9PSAwKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRuZWVkX2xvZyA9IGZhbHNlO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiBcbi1cdHJldHVybiB0cnVlO1xuJiM0MztcdHJldHVybiBuZWVkX2xvZztcbiB9XG4gXG4gc3RhdGljIGludCBtYW5hX2dkX3F1ZXJ5X21heF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5AQCAtMzY3LDkgJiM0MzszNzEsMjcgQEAgc3RhdGljIGludCBtYW5hX2dkX2RldGVjdF9kZXZpY2VzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIGludCBtYW5hX2dkX3NlbmRfcmVxdWVzdChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTMyIHJlcV9sZW4sIGNvbnN0IHZvaWQgKnJlcSxcbiBcdFx0XHQgdTMyIHJlc3BfbGVuLCB2b2lkICpyZXNwKVxuIHtcbi1cdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiYjNDM7XHRpZiAoIWh3Yykge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcdGh3Yy1cdTAwM2VhY3RpdmVfc2VuZGVycyYjNDM7JiM0Mzs7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBtYW5hX2h3Y19zZW5kX3JlcXVlc3QoaHdjLCByZXFfbGVuLCByZXEsIHJlc3BfbGVuLCByZXNwKTtcbiBcbi1cdHJldHVybiBtYW5hX2h3Y19zZW5kX3JlcXVlc3QoaHdjLCByZXFfbGVuLCByZXEsIHJlc3BfbGVuLCByZXNwKTtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGlmICgtLWh3Yy1cdTAwM2VhY3RpdmVfc2VuZGVycyA9PSAwKVxuJiM0MztcdFx0d2FrZV91cChcdTAwMjZnYy1cdTAwM2Vod2NfZHJhaW5fd2FpdHEpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gRVhQT1JUX1NZTUJPTF9OUyhtYW5hX2dkX3NlbmRfcmVxdWVzdCwgXCYjMzQ7TkVUX01BTkFcJiMzNDspO1xuIFxuQEAgLTYyMiw2ICYjNDM7NjQ0LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9zZXJ2X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbiBcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuIFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFnYykge1xuQEAgLTYzMSwxNCAmIzQzOzY1NCwxNyBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuIFx0aHdjID0gZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xuIFx0aWYgKCFod2MpIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiBcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7TUFOQSBzZXJ2aWNlOiBubyBIV0NcXG5cJiMzNDspO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiBcdC8qIEhXQyBpcyBub3QgcmVzcG9uZGluZyBpbiB0aGlzIGNhc2UsIHNvIGRvbiYjMzk7dCB3YWl0ICovXG4gXHRod2MtXHUwMDNlaHdjX3RpbWVvdXQgPSAwO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiBcbiBcdGRldl9pbmZvKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtNQU5BIHJlc2V0IGN5Y2xlIHN0YXJ0XFxuXCYjMzQ7KTtcbiBcbkBAIC03NjEsNiAmIzQzOzc4Nyw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2RfcHJvY2Vzc19lcWUoc3RydWN0IGdkbWFfcXVldWUgKmVxKVxuIFx0dW5pb24gZ2RtYV9lcWVfaW5mbyBlcWVfaW5mbztcbiBcdGVudW0gZ2RtYV9lcWVfdHlwZSB0eXBlO1xuIFx0c3RydWN0IGdkbWFfZXZlbnQgZXZlbnQ7XG4mIzQzO1x0c3RydWN0IGdkbWFfcXVldWUgX19yY3UgKipjcV90YWJsZTtcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlICpjcTtcbiBcdHN0cnVjdCBnZG1hX2VxZSAqZXFlO1xuIFx0dTMyIGNxX2lkO1xuQEAgLTc3MiwxMCAmIzQzOzc5OSwxMSBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3Byb2Nlc3NfZXFlKHN0cnVjdCBnZG1hX3F1ZXVlICplcSlcbiBcdHN3aXRjaCAodHlwZSkge1xuIFx0Y2FzZSBHRE1BX0VRRV9DT01QTEVUSU9OOlxuIFx0XHRjcV9pZCA9IGVxZS1cdTAwM2VkZXRhaWxzWzBdIFx1MDAyNiAweEZGRkZGRjtcbi1cdFx0aWYgKFdBUk5fT05fT05DRShjcV9pZCBcdTAwM2U9IGdjLVx1MDAzZW1heF9udW1fY3FzKSlcbiYjNDM7XHRcdGNxX3RhYmxlID0gcmN1X2RlcmVmZXJlbmNlKGdjLVx1MDAzZWNxX3RhYmxlKTtcbiYjNDM7XHRcdGlmIChXQVJOX09OX09OQ0UoY3FfaWQgXHUwMDNlPSBnYy1cdTAwM2VtYXhfbnVtX2NxcyB8fCAhY3FfdGFibGUpKVxuIFx0XHRcdGJyZWFrO1xuIFxuLVx0XHRjcSA9IGdjLVx1MDAzZWNxX3RhYmxlW2NxX2lkXTtcbiYjNDM7XHRcdGNxID0gcmN1X2RlcmVmZXJlbmNlKGNxX3RhYmxlW2NxX2lkXSk7XG4gXHRcdGlmIChXQVJOX09OX09OQ0UoIWNxIHx8IGNxLVx1MDAzZXR5cGUgIT0gR0RNQV9DUSB8fCBjcS1cdTAwM2VpZCAhPSBjcV9pZCkpXG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtMTA4MiwxNSAmIzQzOzExMTAsMjggQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9jcmVhdGVfY3EoY29uc3Qgc3RydWN0IGdkbWFfcXVldWVfc3BlYyAqc3BlYyxcbiBzdGF0aWMgdm9pZCBtYW5hX2dkX2Rlc3Ryb3lfY3Eoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBnZG1hX3F1ZXVlICpxdWV1ZSlcbiB7XG4mIzQzO1x0c3RydWN0IGdkbWFfcXVldWUgX19yY3UgKipjcV90YWJsZTtcbiBcdHUzMiBpZCA9IHF1ZXVlLVx1MDAzZWlkO1xuIFxuLVx0aWYgKGlkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMpXG4mIzQzO1x0LyogTm8gcmN1X3JlYWRfbG9jaygpIGhlcmU6IG1hbmFfZ2RfZGVzdHJveV9jcSgpIHJ1bnMgb25seSBvbiB0aGVcbiYjNDM7XHQgKiBDUS1kZXN0cm95L3RlYXJkb3duIHBhdGgsIHdoZXJlIHRoZSBiYXNlIGNxX3RhYmxlIGlzIHN0YWJsZS4gIFNlZVxuJiM0MztcdCAqIHRoZSBsaWZlY3ljbGUgbm90ZSBvbiBnZG1hX2NvbnRleHQ6OmNxX3RhYmxlIGluIGdkbWEuaCBmb3Igd2h5IHRoZVxuJiM0MztcdCAqIFwmIzM0O3RydWVcJiMzNDsgcHJlZGljYXRlIGlzIHNvdW5kLlxuJiM0MztcdCAqL1xuJiM0MztcdGNxX3RhYmxlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnYy1cdTAwM2VjcV90YWJsZSwgdHJ1ZSk7XG4mIzQzO1x0aWYgKCFjcV90YWJsZSB8fCBpZCBcdTAwM2U9IGdjLVx1MDAzZW1heF9udW1fY3FzKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoIWdjLVx1MDAzZWNxX3RhYmxlW2lkXSlcbiYjNDM7XHRpZiAoIXJjdV9hY2Nlc3NfcG9pbnRlcihjcV90YWJsZVtpZF0pKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRnYy1cdTAwM2VjcV90YWJsZVtpZF0gPSBOVUxMO1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihjcV90YWJsZVtpZF0sIE5VTEwpO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBpbi1mbGlnaHQgRVEgaGFuZGxlcnMgdGhhdCBtYXkgaGF2ZSBsb2FkZWQgdGhlIG9sZFxuJiM0MztcdCAqIHBvaW50ZXIgdmlhIHJjdV9kZXJlZmVyZW5jZSgpIHRvIGZpbmlzaCBiZWZvcmUgdGhlIGNhbGxlclxuJiM0MztcdCAqIGZyZWVzIHRoZSBDUSBtZW1vcnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4gfVxuIFxuIGludCBtYW5hX2dkX2NyZWF0ZV9od2NfcXVldWUoc3RydWN0IGdkbWFfZGV2ICpnZCxcbkBAIC0xMTg1LDYgJiM0MzsxMjI2LDE2IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9jcmVhdGVfZG1hX3JlZ2lvbihzdHJ1Y3QgZ2RtYV9kZXYgKmdkLFxuIFx0aWYgKCFNQU5BX1BBR0VfQUxJR05FRChnbWktXHUwMDNldmlydF9hZGRyKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0LyogTm8gUkNVIG5lZWRlZDogdGhpcyBydW5zIG9ubHkgb24gdGhlIGRhdGEtcGF0aCBxdWV1ZS1jcmVhdGlvblxuJiM0MztcdCAqIHBhdGggKG1hbmFfZ2RfY3JlYXRlX21hbmFfZXEvbWFuYV9nZF9jcmVhdGVfbWFuYV93cV9jcSwgY2FsbGVkXG4mIzQzO1x0ICogYnkgbWFuYV9lbiB1bmRlciBSVE5MIGFuZCBieSBtYW5hX2liIFJETUEgdmVyYnMsIG9yIGR1cmluZ1xuJiM0MztcdCAqIGluaXQpLiAgRXZlcnkgdGVhcmRvd24gcGF0aCDigJQgbWFuYV9nZF9yZW1vdmUsIG1hbmFfZ2Rfc3VzcGVuZCxcbiYjNDM7XHQgKiBhbmQgdGhlIEhXQyByZXNldC9zZXJ2aWNlIHBhdGggKHdoaWNoIGdvZXMgdGhyb3VnaFxuJiM0MztcdCAqIG1hbmFfZ2Rfc3VzcGVuZCkg4oCUIGRyYWlucyB0aG9zZSBjb25zdW1lcnMgdmlhIG1hbmFfcmRtYV9yZW1vdmUoKVxuJiM0MztcdCAqICYjNDM7IG1hbmFfcmVtb3ZlKCkgYmVmb3JlIG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbCgpIGNsZWFyc1xuJiM0MztcdCAqIGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YSwgc28gbm8gY29uY3VycmVudCBkZXN0cm95IGNhbiByYWNlIHdpdGhcbiYjNDM7XHQgKiB0aGlzIGRlcmVmZXJlbmNlLlxuJiM0MztcdCAqL1xuIFx0aHdjID0gZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xuIFx0cmVxX21zZ19zaXplID0gc3RydWN0X3NpemUocmVxLCBwYWdlX2FkZHJfbGlzdCwgbnVtX3BhZ2UpO1xuIFx0aWYgKHJlcV9tc2dfc2l6ZSBcdTAwM2UgaHdjLVx1MDAzZW1heF9yZXFfbXNnX3NpemUpXG5AQCAtMTM3NCw3ICYjNDM7MTQyNSwxNyBAQCBpbnQgbWFuYV9nZF92ZXJpZnlfdmZfdmVyc2lvbihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YztcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0LyogTm8gUkNVIG5lZWRlZDogdGhpcyBydW5zIG9ubHkgaW5zaWRlIG1hbmFfZ2Rfc2V0dXAsIG9uIHRoZVxuJiM0MztcdCAqIHByb2JlIGFuZCByZXN1bWUgcGF0aHMuICBUaGUgUENJL1BNIGNvcmUgaG9sZHMgZGV2aWNlX2xvY2tcbiYjNDM7XHQgKiBhY3Jvc3MgLnByb2JlLy5yZXN1bWUgYW5kIC5yZW1vdmUvLnN1c3BlbmQsIHNvIHNldHVwIGNhbm5vdFxuJiM0MztcdCAqIG92ZXJsYXAgdGVhcmRvd24gb2YgdGhlIHNhbWUgZGV2aWNlLiAgVGhlIEhXQyByZXNldC9zZXJ2aWNlXG4mIzQzO1x0ICogcGF0aCBpcyBhZGRpdGlvbmFsbHkgc2VyaWFsaXplZCBieSBHQ19JTl9TRVJWSUNFIGFuZCBydW5zXG4mIzQzO1x0ICogc3VzcGVuZCAoZGVzdHJveSkgdGhlbiByZXN1bWUgKHRoaXMpIHNlcXVlbnRpYWxseSBpbiBvbmUgd29ya1xuJiM0MztcdCAqIGl0ZW0uICBkcml2ZXJfZGF0YSB3YXMganVzdCBzZXQgYnkgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWxcbiYjNDM7XHQgKiBlYXJsaWVyIGluIHRoaXMgc2FtZSBzZXR1cCBjYWxsLCBzbyBpdCBpcyBsaXZlIGhlcmUuXG4mIzQzO1x0ICovXG4gXHRod2MgPSBnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGE7XG4mIzQzO1xuIFx0bWFuYV9nZF9pbml0X3JlcV9oZHIoXHUwMDI2cmVxLmhkciwgR0RNQV9WRVJJRllfVkZfRFJJVkVSX1ZFUlNJT04sXG4gXHRcdFx0ICAgICBzaXplb2YocmVxKSwgc2l6ZW9mKHJlc3ApKTtcbiBcbkBAIC0yMzY0LDYgJiM0MzsyNDI1LDcgQEAgc3RhdGljIGludCBtYW5hX2dkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFxuIFx0bXV0ZXhfaW5pdChcdTAwMjZnYy1cdTAwM2VlcV90ZXN0X2V2ZW50X211dGV4KTtcbiBcdG11dGV4X2luaXQoXHUwMDI2Z2MtXHUwMDNlZ2ljX211dGV4KTtcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZnYy1cdTAwM2Vod2NfbG9jayk7XG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgZ2MpO1xuIFx0Z2MtXHUwMDNlYmFyMF9wYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTtcbiBcdGdjLVx1MDAzZWJhcjBfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jXG5pbmRleCBlM2MyNGQ1MGRhZDA3Yy4uMDQ4MWQ0MDQ0MzQyNGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuY1xuQEAgLTQsMjcgJiM0Mzs0LDU1IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hbmEvZ2RtYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hbmEvbWFuYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hbmEvaHdfY2hhbm5lbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4gXG4mIzQzOy8qIEFjcXVpcmUgYSBmcmVlIG1lc3NhZ2Ugc2xvdCBmcm9tIHRoZSBpbmZsaWdodCBiaXRtYXAuICBSZXR1cm5zXG4mIzQzOyAqIC1FTk9ERVYgaWYgdGhlIGNoYW5uZWwgaXMgdG9ybiBkb3duLCBvciAtRVRJTUVET1VUIGlmIGEgcHJpb3IgSFdDXG4mIzQzOyAqIGNvbW1hbmQgaGFzIHRpbWVkIG91dCAocHJlc2VydmluZyB0aGUgZXJyb3IgY29kZSBjYWxsZXJzIGV4cGVjdCkuXG4mIzQzOyAqL1xuIHN0YXRpYyBpbnQgbWFuYV9od2NfZ2V0X21zZ19pbmRleChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiAqbXNnX2lkKVxuIHtcbiBcdHN0cnVjdCBnZG1hX3Jlc291cmNlICpyID0gXHUwMDI2aHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXM7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0dTMyIGluZGV4O1xuIFxuLVx0ZG93bihcdTAwMjZod2MtXHUwMDNlc2VtYSk7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ci1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZyLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdGlmICghaHdjLVx1MDAzZWNoYW5uZWxfdXAgfHwgaHdjLVx1MDAzZWh3Y190aW1lZF9vdXQpIHtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGh3Yy1cdTAwM2VjaGFubmVsX3VwID8gLUVUSU1FRE9VVCA6IC1FTk9ERVY7XG4mIzQzO1x0XHR9XG4gXG4tXHRpbmRleCA9IGZpbmRfZmlyc3RfemVyb19iaXQoaHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwLFxuLVx0XHRcdFx0ICAgIGh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLnNpemUpO1xuJiM0MztcdFx0aW5kZXggPSBmaW5kX2ZpcnN0X3plcm9fYml0KHItXHUwMDNlbWFwLCByLVx1MDAzZXNpemUpO1xuJiM0MztcdFx0aWYgKGluZGV4IFx1MDAzYyByLVx1MDAzZXNpemUpIHtcbiYjNDM7XHRcdFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHg7XG4mIzQzO1xuJiM0MztcdFx0XHRiaXRtYXBfc2V0KHItXHUwMDNlbWFwLCBpbmRleCwgMSk7XG4mIzQzO1x0XHRcdGN0eCA9IFx1MDAyNmh3Yy1cdTAwM2VjYWxsZXJfY3R4W2luZGV4XTtcbiYjNDM7XHRcdFx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2Y3R4LVx1MDAzZWNvbXBfZXZlbnQpO1xuJiM0MztcdFx0XHRyZWZjb3VudF9zZXQoXHUwMDI2Y3R4LVx1MDAzZXJlZmNudCwgMSk7XG4mIzQzO1x0XHRcdGN0eC1cdTAwM2Vtc2dfaWQgPSBpbmRleDtcbiYjNDM7XHRcdFx0Y3R4LVx1MDAzZWVycm9yID0gLUVJTlBST0dSRVNTO1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnItXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ci1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRiaXRtYXBfc2V0KGh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLm1hcCwgaW5kZXgsIDEpO1xuJiM0MztcdFx0d2FpdF9ldmVudChod2MtXHUwMDNlbXNnX3dhaXRxLFxuJiM0MztcdFx0XHQgICAhaHdjLVx1MDAzZWNoYW5uZWxfdXAgfHxcbiYjNDM7XHRcdFx0ICAgaHdjLVx1MDAzZWh3Y190aW1lZF9vdXQgfHxcbiYjNDM7XHRcdFx0ICAgIWJpdG1hcF9mdWxsKHItXHUwMDNlbWFwLCByLVx1MDAzZXNpemUpKTtcbiBcbi1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ci1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRpZiAoIWh3Yy1cdTAwM2VjaGFubmVsX3VwKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbi1cdCptc2dfaWQgPSBpbmRleDtcbiYjNDM7XHRcdGlmIChod2MtXHUwMDNlaHdjX3RpbWVkX291dClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO1x0fVxuIFxuJiM0MztcdCptc2dfaWQgPSBpbmRleDtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0zNCwxMCAmIzQzOzYyLDE3IEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX3B1dF9tc2dfaW5kZXgoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgbXNnX2lkKVxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnItXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0Yml0bWFwX2NsZWFyKGh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLm1hcCwgbXNnX2lkLCAxKTtcbiYjNDM7XHRiaXRtYXBfY2xlYXIoci1cdTAwM2VtYXAsIG1zZ19pZCwgMSk7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnItXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuLVx0dXAoXHUwMDI2aHdjLVx1MDAzZXNlbWEpO1xuJiM0MztcdHdha2VfdXAoXHUwMDI2aHdjLVx1MDAzZW1zZ193YWl0cSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGh3Y19jdHhfcHV0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyxcbiYjNDM7XHRcdFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN0eC1cdTAwM2VyZWZjbnQpKVxuJiM0MztcdFx0bWFuYV9od2NfcHV0X21zZ19pbmRleChod2MsIGN0eC1cdTAwM2Vtc2dfaWQpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1hbmFfaHdjX3ZlcmlmeV9yZXNwX21zZyhjb25zdCBzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmNhbGxlcl9jdHgsXG5AQCAtODMsNiAmIzQzOzExOCwxNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19oYW5kbGVfcmVzcChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXNwX2xlbixcbiBcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHQvKiBWYWxpZGF0ZSBtc2dfaWQgaXMgaW4gcmFuZ2UgYmVmb3JlIHVzaW5nIGl0IHRvIGluZGV4IGJpdG1hcFxuJiM0MztcdCAqIGFuZCBjYWxsZXJfY3R4IGFycmF5LiAgTWFsaWNpb3VzIGZpcm13YXJlIGNvdWxkIHNlbmRcbiYjNDM7XHQgKiBvdXQtb2YtcmFuZ2UgbXNnX2lkIGNhdXNpbmcgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG1zZ19pZCBcdTAwM2U9IGh3Yy1cdTAwM2VudW1faW5mbGlnaHRfbXNnKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O2h3Y19yeDogbXNnX2lkICV1IFx1MDAzZT0gbWF4ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRtc2dfaWQsIGh3Yy1cdTAwM2VudW1faW5mbGlnaHRfbXNnKTtcbiYjNDM7XHRcdG1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Yy1cdTAwM2VyeHEsIHJ4X3JlcSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICghdGVzdF9iaXQobXNnX2lkLCBod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5tYXApKSB7XG4gXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7aHdjX3J4OiBpbnZhbGlkIG1zZ19pZCA9ICV1XFxuXCYjMzQ7LCBtc2dfaWQpO1xuIFx0XHRtYW5hX2h3Y19wb3N0X3J4X3dxZShod2MtXHUwMDNlcnhxLCByeF9yZXEpO1xuQEAgLTkwLDIyICYjNDM7MTM2LDQ0IEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX2hhbmRsZV9yZXNwKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlc3BfbGVuLFxuIFx0fVxuIFxuIFx0Y3R4ID0gaHdjLVx1MDAzZWNhbGxlcl9jdHggJiM0MzsgbXNnX2lkO1xuLVx0ZXJyID0gbWFuYV9od2NfdmVyaWZ5X3Jlc3BfbXNnKGN0eCwgcmVzcF9tc2csIHJlc3BfbGVuKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gb3V0O1xuIFxuLVx0Y3R4LVx1MDAzZXN0YXR1c19jb2RlID0gcmVzcF9tc2ctXHUwMDNlc3RhdHVzO1xuJiM0MztcdC8qIFJlamVjdCByZXNwb25zZXMgbGFyZ2VyIHRoYW4gdGhlIFJYIERNQSBidWZmZXIg4oCUIHRoZSBTR0VcbiYjNDM7XHQgKiBsaW1pdHMgd2hhdCBoYXJkd2FyZSBjYW4gRE1BLCBzbyBhbiBvdmVyc2l6ZWQgcmVzcF9sZW5cbiYjNDM7XHQgKiBpbmRpY2F0ZXMgYSBmaXJtd2FyZSBidWcuICBGYWlsIHJhdGhlciB0aGFuIHNpbGVudGx5XG4mIzQzO1x0ICogdHJ1bmNhdGluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmVzcF9sZW4gXHUwMDNlIHJ4X3JlcS1cdTAwM2VidWZfbGVuKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0hXQyBSWDogcmVzcF9sZW4gJXUgXHUwMDNlIGJ1Zl9sZW4gJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHJlc3BfbGVuLCByeF9yZXEtXHUwMDNlYnVmX2xlbik7XG4mIzQzO1x0XHRyZXNwX2xlbiA9IDA7XG4mIzQzO1x0fVxuIFxuLVx0bWVtY3B5KGN0eC1cdTAwM2VvdXRwdXRfYnVmLCByZXNwX21zZywgcmVzcF9sZW4pO1xuLW91dDpcbi1cdGN0eC1cdTAwM2VlcnJvciA9IGVycjtcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBtYW5hX2h3Y192ZXJpZnlfcmVzcF9tc2coY3R4LCByZXNwX21zZywgcmVzcF9sZW4pO1xuIFxuLVx0LyogTXVzdCBwb3N0IHJ4IHdxZSBiZWZvcmUgY29tcGxldGUoKSwgb3RoZXJ3aXNlIHRoZSBuZXh0IHJ4IG1heVxuLVx0ICogaGl0IG5vX3dxZSBlcnJvci5cbiYjNDM7XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZW91dHB1dF9idWYpIHtcbiYjNDM7XHRcdGN0eC1cdTAwM2VzdGF0dXNfY29kZSA9IHJlc3BfbXNnLVx1MDAzZXN0YXR1cztcbiYjNDM7XHRcdG1lbWNweShjdHgtXHUwMDNlb3V0cHV0X2J1ZiwgcmVzcF9tc2csIHJlc3BfbGVuKTtcbiYjNDM7XHRcdGN0eC1cdTAwM2VlcnJvciA9IDA7XG4mIzQzO1x0fSBlbHNlIGlmIChjdHgtXHUwMDNlb3V0cHV0X2J1Zikge1xuJiM0MztcdFx0LyogT25seSBvdmVyd3JpdGUgZXJyb3IgaWYgdGhlIHNlbmRlciBoYXNuJiMzOTt0IHRpbWVkIG91dFxuJiM0MztcdFx0ICogb3IgYmVlbiBmb3JjZS1jb21wbGV0ZWQgYnkgZGVzdHJveS4gIFdoZW4gb3V0cHV0X2J1ZlxuJiM0MztcdFx0ICogaXMgTlVMTCwgYSB0ZXJtaW5hbCBlcnJvciAoLUVOT0RFViBvciB0aW1lb3V0KSBoYXNcbiYjNDM7XHRcdCAqIGFscmVhZHkgYmVlbiBzZXQg4oCUIHByZXNlcnZlIGl0IHNvIHRoZSBzZW5kZXIgZG9lc24mIzM5O3RcbiYjNDM7XHRcdCAqIHNlZSBhIHNwdXJpb3VzIHN1Y2Nlc3MuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGN0eC1cdTAwM2VlcnJvciA9IGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFBvc3QgUlggV1FFIGJlZm9yZSBjb21wbGV0aW5nIOKAlCB0aGUgbmV4dCByZXNwb25zZSBtYXkgYXJyaXZlXG4mIzQzO1x0ICogaW1tZWRpYXRlbHkgYW5kIG5lZWRzIGEgcG9zdGVkIGJ1ZmZlci5cbiBcdCAqL1xuIFx0bWFuYV9od2NfcG9zdF9yeF93cWUoaHdjLVx1MDAzZXJ4cSwgcnhfcmVxKTtcbi1cbiBcdGNvbXBsZXRlKFx1MDAyNmN0eC1cdTAwM2Vjb21wX2V2ZW50KTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdGh3Y19jdHhfcHV0KGh3YywgY3R4KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKHZvaWQgKmN0eCwgc3RydWN0IGdkbWFfcXVldWUgKnFfc2VsZixcbkBAIC0xNDYsNyAmIzQzOzIxNCwxMiBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIodm9pZCAqY3R4LCBzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcV9zZWxmLFxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRjYXNlIEhXQ19JTklUX0RBVEFfUVVFVUVfREVQVEg6XG4tXHRcdFx0aHdjLVx1MDAzZWh3Y19pbml0X3FfZGVwdGhfbWF4ID0gKHUxNil2YWw7XG4mIzQzO1x0XHRcdC8qIEhXQ19JTklUX0RBVEFfUVVFVUVfREVQVEggaXMgYSAyNC1iaXQgZmllbGQuICBLZWVwXG4mIzQzO1x0XHRcdCAqIHRoZSBmdWxsIGRldmljZS1yZXBvcnRlZCB2YWx1ZSBoZXJlOyBpdCBpcyBjbGFtcGVkXG4mIzQzO1x0XHRcdCAqIGFuZCB2YWxpZGF0ZWQgaW4gbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoKSByYXRoZXJcbiYjNDM7XHRcdFx0ICogdGhhbiBzaWxlbnRseSB0cnVuY2F0ZWQgdG8gdTE2LlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aHdjLVx1MDAzZWh3Y19pbml0X3FfZGVwdGhfbWF4ID0gdmFsO1xuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRjYXNlIEhXQ19JTklUX0RBVEFfTUFYX1JFUVVFU1Q6XG5AQCAtMjYxLDE5ICYjNDM7MzM0LDY5IEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX3J4X2V2ZW50X2hhbmRsZXIodm9pZCAqY3R4LCB1MzIgZ2RtYV9yeHFfaWQsXG4gXG4gXHRzZ2UgPSAoc3RydWN0IGdkbWFfc2dlICopKHdxZSAmIzQzOyA4ICYjNDM7IGRtYV9vb2ItXHUwMDNlaW5saW5lX29vYl9zaXplX2RpdjQgKiA0KTtcbiBcbi1cdC8qIFNlbGVjdCB0aGUgUlggd29yayByZXF1ZXN0IGZvciB2aXJ0dWFsIGFkZHJlc3MgYW5kIGZvciByZXBvc3RpbmcuICovXG4tXHRycV9iYXNlX2FkZHIgPSBod2NfcnhxLVx1MDAzZW1zZ19idWYtXHUwMDNlbWVtX2luZm8uZG1hX2hhbmRsZTtcbi1cdHJ4X3JlcV9pZHggPSAoc2dlLVx1MDAzZWFkZHJlc3MgLSBycV9iYXNlX2FkZHIpIC8gaHdjLVx1MDAzZW1heF9yZXFfbXNnX3NpemU7XG4mIzQzO1x0LyogaW5saW5lX29vYl9zaXplX2RpdjQgaXMgcmVhZCBmcm9tIHRoZSBXUUUgaW4gZGV2aWNlLWFjY2Vzc2libGUgUlFcbiYjNDM7XHQgKiBtZW1vcnksIHNvIGEgbWFsaWNpb3VzIGhvc3QgaW4gYSBDVk0gKG9yIGJ1Z2d5IGZpcm13YXJlKSBjb3VsZCBzZXRcbiYjNDM7XHQgKiBpdCB0byBwdXNoIHRoZSBTR0UgcGFzdCB0aGUgUlEgYnVmZmVyLiAgQm91bmRzLWNoZWNrIHRoZSBTR0UgaXRcbiYjNDM7XHQgKiBsb2NhdGVzIGJlZm9yZSBkZXJlZmVyZW5jaW5nIHNnZS1cdTAwM2VhZGRyZXNzIGJlbG93LiAgQSB2YWxpZGx5IHBvc3RlZFxuJiM0MztcdCAqIFdRRSBrZWVwcyB0aGUgU0dFIGluc2lkZSB0aGUgcmluZyAod29yc3QgY2FzZSBlbmRzIGV4YWN0bHkgYXQgdGhlXG4mIzQzO1x0ICogYnVmZmVyIGJvdW5kYXJ5KTsgcmVqZWN0IGFueXRoaW5nIHRoYXQgd291bGQgcmVhZCBwYXN0IGl0LiAgVGhlXG4mIzQzO1x0ICogc2xvdCBjYW5ub3QgYmUgdHJ1c3RlZCBoZXJlLCBzbyBsZWFrIHRoaXMgUlggV1FFIHJhdGhlciB0aGFuIHJlcG9zdFxuJiM0MztcdCAqIHRoZSB3cm9uZyBvbmUgLS0gYXMgaW4gdGhlIFNHRS1hZGRyZXNzIG1pc21hdGNoIHBhdGggYmVsb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCh1OCAqKShzZ2UgJiM0MzsgMSkgXHUwMDNlICh1OCAqKXJxLVx1MDAzZXF1ZXVlX21lbV9wdHIgJiM0MzsgcnEtXHUwMDNlcXVldWVfc2l6ZSkge1xuJiM0MztcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcJiMzNDtIV0MgUlg6IFNHRSBwYXN0IFJRIGJ1ZmZlciwgb29iX2RpdjQ9JXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGRtYV9vb2ItXHUwMDNlaW5saW5lX29vYl9zaXplX2RpdjQpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcbi1cdGlmIChyeF9yZXFfaWR4IFx1MDAzZT0gaHdjX3J4cS1cdTAwM2Vtc2dfYnVmLVx1MDAzZW51bV9yZXFzKSB7XG4tXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7SFdDIFJYOiB3cm9uZyByeF9yZXFfaWR4PSVsbHUsIG51bV9yZXFzPSV1XFxuXCYjMzQ7LFxuLVx0XHRcdHJ4X3JlcV9pZHgsIGh3Y19yeHEtXHUwMDNlbXNnX2J1Zi1cdTAwM2VudW1fcmVxcyk7XG4mIzQzO1x0LyogUmVjb3ZlciB0aGUgb3JpZ2luYXRpbmcgUlggc2xvdCBmcm9tIHRoZSBTR0UgYWRkcmVzcy4gIE9mIHRoZSB0aHJlZVxuJiM0MztcdCAqIHRlcm1zIGhlcmUgb25seSBzZ2UtXHUwMDNlYWRkcmVzcyBsaXZlcyBpbiBkZXZpY2UtYWNjZXNzaWJsZSBSUSBtZW1vcnk7XG4mIzQzO1x0ICogcnFfYmFzZV9hZGRyIGFuZCBtYXhfcmVzcF9tc2dfc2l6ZSBhcmUgZHJpdmVyLXByaXZhdGUgY29uc3RhbnRzLiAgQW5cbiYjNDM7XHQgKiBpbi1yYW5nZSBidXQgd3JvbmcvdW5hbGlnbmVkIFNHRSAoY29ycnVwdGVkIFdRRSwgb3IgYSBtYWxpY2lvdXMgaG9zdFxuJiM0MztcdCAqIGluIGEgQ1ZNKSB3b3VsZCBvdGhlcndpc2UgdHJ1bmNhdGUgb250byBhIG5laWdoYm91cmluZyBzbG90LCBsZXR0aW5nXG4mIzQzO1x0ICogdXMgcmVhZCBhIHN0YWxlIHJlc3BvbnNlIHRoYXQgY291bGQgY29tcGxldGUgdGhlIHdyb25nLCByZXVzZWRcbiYjNDM7XHQgKiBpbi1mbGlnaHQgcmVxdWVzdC4gIFJlcXVpcmUgdGhlIGluZGV4IHRvIGJlIGluIHJhbmdlIEFORCB0aGUgYWRkcmVzc1xuJiM0MztcdCAqIHRvIGV4YWN0bHkgbWF0Y2ggdGhlIHZhbHVlIHRoZSBkcml2ZXIgcG9zdGVkIGZvciB0aGF0IHNsb3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0cnFfYmFzZV9hZGRyID0gaHdjX3J4cS1cdTAwM2Vtc2dfYnVmLVx1MDAzZW1lbV9pbmZvLmRtYV9oYW5kbGU7XG4mIzQzO1x0cnhfcmVxX2lkeCA9IChzZ2UtXHUwMDNlYWRkcmVzcyAtIHJxX2Jhc2VfYWRkcikgLyBod2MtXHUwMDNlbWF4X3Jlc3BfbXNnX3NpemU7XG4mIzQzO1xuJiM0MztcdGlmIChyeF9yZXFfaWR4IFx1MDAzZT0gaHdjX3J4cS1cdTAwM2VxdWV1ZV9kZXB0aCkge1xuJiM0MztcdFx0LyogQ2Fubm90IHRydXN0IHdoaWNoIFdRRSB0aGlzIGlzLCBzbyB3ZSBjYW5ub3Qgc2FmZWx5IHJlcG9zdFxuJiM0MztcdFx0ICogaXQ7IGxlYWsgb25lIFJYIFdRRSBhbmQgYmFpbC4gIEFuIG91dC1vZi1yYW5nZSBpbmRleCBtZWFuc1xuJiM0MztcdFx0ICogYSBjb3JydXB0ZWQgU0dFIGZyb20gaGFyZHdhcmUgKG9yIGhvc3QgdGFtcGVyaW5nKSwgYW5cbiYjNDM7XHRcdCAqIHVucmVjb3ZlcmFibGUgZGV2aWNlIGVycm9yLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0hXQyBSWDogU0dFIGlkeCAlbGx1IG91dCBvZiByYW5nZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cnhfcmVxX2lkeCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdHJ4X3JlcSA9IFx1MDAyNmh3Y19yeHEtXHUwMDNlbXNnX2J1Zi1cdTAwM2VyZXFzW3J4X3JlcV9pZHhdO1xuJiM0MztcdGlmIChzZ2UtXHUwMDNlYWRkcmVzcyAhPSAodTY0KXJ4X3JlcS1cdTAwM2VidWZfc2dlX2FkZHIpIHtcbiYjNDM7XHRcdC8qIEluLXJhbmdlIGluZGV4IGJ1dCB0aGUgYWRkcmVzcyBkb2VzIG5vdCBtYXRjaCB3aGF0IHRoZVxuJiM0MztcdFx0ICogZHJpdmVyIHBvc3RlZCBmb3IgdGhhdCBzbG90OyB0aGUgc2FtZSB1bnJlY292ZXJhYmxlIGNhc2UsXG4mIzQzO1x0XHQgKiBzbyBsZWFrIHRoaXMgV1FFIHJhdGhlciB0aGFuIHJlcG9zdCB0aGUgd3Jvbmcgb25lLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0hXQyBSWDogaW52YWxpZCBTR0UgYWRkcmVzcyAlbGx4IChpZHg9JWxsdSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHNnZS1cdTAwM2VhZGRyZXNzLCByeF9yZXFfaWR4KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmVzcCA9IChzdHJ1Y3QgZ2RtYV9yZXNwX2hkciAqKXJ4X3JlcS1cdTAwM2VidWZfdmE7XG4gXG4mIzQzO1x0LyogVmFsaWRhdGUgcmVzcF9sZW4gY292ZXJzIHRoZSByZXNwb25zZSBoZWFkZXIgYmVmb3JlIHJlYWRpbmdcbiYjNDM7XHQgKiBod2NfbXNnX2lkLiAgQSBzaG9ydCByZXNwb25zZSBsZWF2ZXMgc3RhbGUgZGF0YSBmcm9tIHRoZVxuJiM0MztcdCAqIHByZXZpb3VzIGJ1ZmZlciBvY2N1cGFudCwgd2hpY2ggY291bGQgbWF0Y2ggYSBsaXZlIHNsb3QgYW5kXG4mIzQzO1x0ICogY29tcGxldGUgdGhlIHdyb25nIHJlcXVlc3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJ4X29vYi1cdTAwM2V0eF9vb2JfZGF0YV9zaXplIFx1MDAzYyBzaXplb2YoKnJlc3ApKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0hXQyBSWDogc2hvcnQgcmVzcF9sZW49JXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHJ4X29vYi1cdTAwM2V0eF9vb2JfZGF0YV9zaXplKTtcbiYjNDM7XHRcdG1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Y19yeHEsIHJ4X3JlcSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIFJlYWQgbXNnX2lkIG9uY2UgZnJvbSBETUEgYnVmZmVyIHRvIHByZXZlbnQgVE9DVE9VOlxuIFx0ICogRE1BIG1lbW9yeSBpcyBzaGFyZWQvdW5lbmNyeXB0ZWQgaW4gQ1ZNcyAtIGhvc3QgY2FuXG4gXHQgKiBtb2RpZnkgaXQgYmV0d2VlbiByZWFkcy5cbkBAIC0yODEsNiAmIzQzOzQwNCw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX3J4X2V2ZW50X2hhbmRsZXIodm9pZCAqY3R4LCB1MzIgZ2RtYV9yeHFfaWQsXG4gXHRtc2dfaWQgPSBSRUFEX09OQ0UocmVzcC1cdTAwM2VyZXNwb25zZS5od2NfbXNnX2lkKTtcbiBcdGlmIChtc2dfaWQgXHUwMDNlPSBod2MtXHUwMDNlbnVtX2luZmxpZ2h0X21zZykge1xuIFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0hXQyBSWDogd3JvbmcgbXNnX2lkPSV1XFxuXCYjMzQ7LCBtc2dfaWQpO1xuJiM0MztcdFx0bWFuYV9od2NfcG9zdF9yeF93cWUoaHdjX3J4cSwgcnhfcmVxKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuQEAgLTM4NCwxNCAmIzQzOzUwOCwyMCBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19jb21wX2V2ZW50KHZvaWQgKmN0eCwgc3RydWN0IGdkbWFfcXVldWUgKnFfc2VsZilcbiBcbiBzdGF0aWMgdm9pZCBtYW5hX2h3Y19kZXN0cm95X2NxKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBzdHJ1Y3QgaHdjX2NxICpod2NfY3EpXG4ge1xuLVx0a2ZyZWUoaHdjX2NxLVx1MDAzZWNvbXBfYnVmKTtcbi1cbiBcdGlmIChod2NfY3EtXHUwMDNlZ2RtYV9jcSlcbiBcdFx0bWFuYV9nZF9kZXN0cm95X3F1ZXVlKGdjLCBod2NfY3EtXHUwMDNlZ2RtYV9jcSk7XG4gXG4mIzQzO1x0LyogY29tcF9idWYgaXMgcmVhY2hlZCBvbmx5IGJ5IG1hbmFfaHdjX2NvbXBfZXZlbnQoKSwgd2hpY2ggdGhlXG4mIzQzO1x0ICogRVEgaGFuZGxlciBpbnZva2VzIHZpYSBjcV90YWJsZVtpZF0uICBUaGUgQ1EgZGVzdHJveSBhYm92ZVxuJiM0MztcdCAqIGFscmVhZHkgY2xlYXJlZCB0aGF0IHNsb3QgYW5kIHJhbiBzeW5jaHJvbml6ZV9yY3UoKSwgc28gbm9cbiYjNDM7XHQgKiBoYW5kbGVyIGNhbiByZWFjaCBjb21wX2J1ZiBvbmNlIGl0IHJldHVybnMuICBEZXN0cm95aW5nIHRoZSBFUVxuJiM0MztcdCAqIGhlcmUgYWRkaXRpb25hbGx5IHRlYXJzIGRvd24gdGhlIElSUSAoZGVmZW5zZSBpbiBkZXB0aCkgYmVmb3JlXG4mIzQzO1x0ICogY29tcF9idWYgYW5kIGh3Y19jcSBhcmUgZnJlZWQgYmVsb3cuXG4mIzQzO1x0ICovXG4gXHRpZiAoaHdjX2NxLVx1MDAzZWdkbWFfZXEpXG4gXHRcdG1hbmFfZ2RfZGVzdHJveV9xdWV1ZShnYywgaHdjX2NxLVx1MDAzZWdkbWFfZXEpO1xuIFxuJiM0MztcdGtmcmVlKGh3Y19jcS1cdTAwM2Vjb21wX2J1Zik7XG4gXHRrZnJlZShod2NfY3EpO1xuIH1cbiBcbkBAIC01NjAsNiAmIzQzOzY5MCw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfY3JlYXRlX3dxKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyxcbiBcdGh3Y193cS1cdTAwM2VnZG1hX3dxID0gcXVldWU7XG4gXHRod2Nfd3EtXHUwMDNlcXVldWVfZGVwdGggPSBxX2RlcHRoO1xuIFx0aHdjX3dxLVx1MDAzZWh3Y19jcSA9IGh3Y19jcTtcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZod2Nfd3EtXHUwMDNlbG9jayk7XG4gXG4gXHRlcnIgPSBtYW5hX2h3Y19hbGxvY19kbWFfYnVmKGh3YywgcV9kZXB0aCwgbWF4X21zZ19zaXplLFxuIFx0XHRcdFx0ICAgICBcdTAwMjZod2Nfd3EtXHUwMDNlbXNnX2J1Zik7XG5AQCAtNTc3LDcgJiM0Mzs3MDgsNyBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2NyZWF0ZV93cShzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgaW50IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKGNvbnN0IHN0cnVjdCBod2Nfd3EgKmh3Y190eHEsXG4mIzQzO3N0YXRpYyBpbnQgbWFuYV9od2NfcG9zdF90eF93cWUoc3RydWN0IGh3Y193cSAqaHdjX3R4cSxcbiBcdFx0XHRcdHN0cnVjdCBod2Nfd29ya19yZXF1ZXN0ICpyZXEsXG4gXHRcdFx0XHR1MzIgZGVzdF92aXJ0X3JxX2lkLCB1MzIgZGVzdF92aXJ0X3JjcV9pZCxcbiBcdFx0XHRcdGJvb2wgZGVzdF9wZilcbkBAIC02MTYsNyAmIzQzOzc0NywxMSBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKGNvbnN0IHN0cnVjdCBod2Nfd3EgKmh3Y190eHEsXG4gXHRyZXEtXHUwMDNld3FlX3JlcS5pbmxpbmVfb29iX2RhdGEgPSB0eF9vb2I7XG4gXHRyZXEtXHUwMDNld3FlX3JlcS5jbGllbnRfZGF0YV91bml0ID0gMDtcbiBcbiYjNDM7XHQvKiBTZXJpYWxpemUgV1FFIHBvc3Rpbmcg4oCUIG11bHRpcGxlIHNlbmRlcnMgbWF5IGNhbGwgY29uY3VycmVudGx5LiAqL1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZod2NfdHhxLVx1MDAzZWxvY2spO1xuIFx0ZXJyID0gbWFuYV9nZF9wb3N0X2FuZF9yaW5nKGh3Y190eHEtXHUwMDNlZ2RtYV93cSwgXHUwMDI2cmVxLVx1MDAzZXdxZV9yZXEsIE5VTEwpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmh3Y190eHEtXHUwMDNlbG9jayk7XG4mIzQzO1xuIFx0aWYgKGVycilcbiBcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBwb3N0IFdRRSBvbiBIV0MgU1E6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuIFx0cmV0dXJuIGVycjtcbkBAIC02MjcsNyAmIzQzOzc2Miw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfaW5pdF9pbmZsaWdodF9tc2coc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLFxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHRzZW1hX2luaXQoXHUwMDI2aHdjLVx1MDAzZXNlbWEsIG51bV9tc2cpO1xuJiM0MztcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2aHdjLVx1MDAzZW1zZ193YWl0cSk7XG4gXG4gXHRlcnIgPSBtYW5hX2dkX2FsbG9jX3Jlc19tYXAobnVtX21zZywgXHUwMDI2aHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMpO1xuIFx0aWYgKGVycilcbkBAIC02NTcsMjMgJiM0Mzs3OTIsNDAgQEAgc3RhdGljIGludCBtYW5hX2h3Y190ZXN0X2NoYW5uZWwoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCxcbiBcdGlmICghY3R4KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHFfZGVwdGg7ICYjNDM7JiM0MztpKVxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHFfZGVwdGg7ICYjNDM7JiM0MztpKSB7XG4mIzQzO1x0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZjdHhbaV0ubG9jayk7XG4gXHRcdGluaXRfY29tcGxldGlvbihcdTAwMjZjdHhbaV0uY29tcF9ldmVudCk7XG4mIzQzO1x0fVxuIFxuIFx0aHdjLVx1MDAzZWNhbGxlcl9jdHggPSBjdHg7XG4gXG4tXHRyZXR1cm4gbWFuYV9nZF90ZXN0X2VxKGdjLCBod2MtXHUwMDNlY3EtXHUwMDNlZ2RtYV9lcSk7XG4mIzQzO1x0LyogY2hhbm5lbF91cCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIHRlc3QgRVEgcmVxdWVzdCwgYmVjYXVzZVxuJiM0MztcdCAqIHRoZSByZXF1ZXN0IGdvZXMgdGhyb3VnaCBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KCkgd2hpY2hcbiYjNDM7XHQgKiBjaGVja3MgY2hhbm5lbF91cC4gIGNhbGxlcl9jdHggaXMgYWxsb2NhdGVkIGFib3ZlLCBzb1xuJiM0MztcdCAqIGNvbmN1cnJlbnQgYWNjZXNzIHRvIGEgTlVMTCBjYWxsZXJfY3R4IGlzIG5vdCBwb3NzaWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRod2MtXHUwMDNlY2hhbm5lbF91cCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdGVyciA9IG1hbmFfZ2RfdGVzdF9lcShnYywgaHdjLVx1MDAzZWNxLVx1MDAzZWdkbWFfZXEpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRod2MtXHUwMDNlY2hhbm5lbF91cCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgaW50IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MTYgKnFfZGVwdGgsXG4mIzQzO3N0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUzMiAqcV9kZXB0aCxcbiBcdFx0XHRcdCAgICAgIHUzMiAqbWF4X3JlcV9tc2dfc2l6ZSxcbiBcdFx0XHRcdCAgICAgIHUzMiAqbWF4X3Jlc3BfbXNnX3NpemUpXG4ge1xuJiM0MztcdC8qIE5vIFJDVSBuZWVkZWQ6IGNhbGxlZCBvbmx5IGZyb20gbWFuYV9od2NfY3JlYXRlX2NoYW5uZWxcbiYjNDM7XHQgKiBkdXJpbmcgaW5pdCwgYmVmb3JlIHRoZSBjaGFubmVsIGlzIHB1Ymxpc2hlZCB0byBzZW5kZXJzLlxuJiM0MztcdCAqL1xuIFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjID0gZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xuIFx0c3RydWN0IGdkbWFfcXVldWUgKnJxID0gaHdjLVx1MDAzZXJ4cS1cdTAwM2VnZG1hX3dxO1xuIFx0c3RydWN0IGdkbWFfcXVldWUgKnNxID0gaHdjLVx1MDAzZXR4cS1cdTAwM2VnZG1hX3dxO1xuIFx0c3RydWN0IGdkbWFfcXVldWUgKmVxID0gaHdjLVx1MDAzZWNxLVx1MDAzZWdkbWFfZXE7XG4gXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3EgPSBod2MtXHUwMDNlY3EtXHUwMDNlZ2RtYV9jcTtcbiYjNDM7XHRzdHJ1Y3QgZ2RtYV9xdWV1ZSBfX3JjdSAqKmNxX3RhYmxlO1xuIFx0aW50IGVycjtcbiBcbiBcdGluaXRfY29tcGxldGlvbihcdTAwMjZod2MtXHUwMDNlaHdjX2luaXRfZXFlX2NvbXApO1xuQEAgLTY4NywyNCAmIzQzOzgzOSw1MSBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MTYgKnFfZGVwdGgsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXHUwMDI2aHdjLVx1MDAzZWh3Y19pbml0X2VxZV9jb21wLCA2MCAqIEhaKSlcbi1cdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO1x0Lyogc2V0dXBfaHdjIGFjdGl2YXRlZCBNU1QgZW50cmllcyDigJQgaGFyZHdhcmUgY2FuIG5vdyBETUEgaW50b1xuJiM0MztcdCAqIG91ciBxdWV1ZSBidWZmZXJzLiAgSWYgYW55dGhpbmcgYmVsb3cgZmFpbHMsIHdlIG11c3QgdGVhclxuJiM0MztcdCAqIGRvd24gYmVmb3JlIHJldHVybmluZyBzbyB0aGUgY2FsbGVyIGRvZXNuJiMzOTt0IG5lZWQgdG8gdHJhY2tcbiYjNDM7XHQgKiB3aGV0aGVyIHNldHVwX2h3YyBzdWNjZWVkZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aHdjLVx1MDAzZXNldHVwX2FjdGl2ZSA9IHRydWU7XG4mIzQzO1xuJiM0MztcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmh3Yy1cdTAwM2Vod2NfaW5pdF9lcWVfY29tcCwgNjAgKiBIWikpIHtcbiYjNDM7XHRcdGVyciA9IC1FVElNRURPVVQ7XG4mIzQzO1x0XHRnb3RvIHRlYXJkb3duO1xuJiM0MztcdH1cbiBcbiBcdCpxX2RlcHRoID0gaHdjLVx1MDAzZWh3Y19pbml0X3FfZGVwdGhfbWF4O1xuIFx0Km1heF9yZXFfbXNnX3NpemUgPSBod2MtXHUwMDNlaHdjX2luaXRfbWF4X3JlcV9tc2dfc2l6ZTtcbiBcdCptYXhfcmVzcF9tc2dfc2l6ZSA9IGh3Yy1cdTAwM2Vod2NfaW5pdF9tYXhfcmVzcF9tc2dfc2l6ZTtcbiBcbiBcdC8qIEJvdGggd2VyZSBzZXQgaW4gbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKCkuICovXG4tXHRpZiAoV0FSTl9PTihjcS1cdTAwM2VpZCBcdTAwM2U9IGdjLVx1MDAzZW1heF9udW1fY3FzKSlcbi1cdFx0cmV0dXJuIC1FUFJPVE87XG4mIzQzO1x0aWYgKFdBUk5fT04oY3EtXHUwMDNlaWQgXHUwMDNlPSBnYy1cdTAwM2VtYXhfbnVtX2NxcykpIHtcbiYjNDM7XHRcdGVyciA9IC1FUFJPVE87XG4mIzQzO1x0XHRnb3RvIHRlYXJkb3duO1xuJiM0MztcdH1cbiBcbi1cdGdjLVx1MDAzZWNxX3RhYmxlID0gdmNhbGxvYyhnYy1cdTAwM2VtYXhfbnVtX2Nxcywgc2l6ZW9mKHN0cnVjdCBnZG1hX3F1ZXVlICopKTtcbi1cdGlmICghZ2MtXHUwMDNlY3FfdGFibGUpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdGNxX3RhYmxlID0gdmNhbGxvYyhnYy1cdTAwM2VtYXhfbnVtX2Nxcywgc2l6ZW9mKCpjcV90YWJsZSkpO1xuJiM0MztcdGlmICghY3FfdGFibGUpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIHRlYXJkb3duO1xuJiM0MztcdH1cbiBcbi1cdGdjLVx1MDAzZWNxX3RhYmxlW2NxLVx1MDAzZWlkXSA9IGNxO1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihjcV90YWJsZVtjcS1cdTAwM2VpZF0sIGNxKTtcbiYjNDM7XHQvKiBQdWJsaXNoIHRoZSBmdWxseS1pbml0aWFsaXNlZCB0YWJsZSBsYXN0OyBwYWlycyB3aXRoIHRoZVxuJiM0MztcdCAqIHJjdV9kZXJlZmVyZW5jZShnYy1cdTAwM2VjcV90YWJsZSkgaW4gbWFuYV9nZF9wcm9jZXNzX2VxZSgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihnYy1cdTAwM2VjcV90YWJsZSwgY3FfdGFibGUpO1xuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0Mzt0ZWFyZG93bjpcbiYjNDM7XHR7XG4mIzQzO1x0XHRpbnQgdGRfZXJyID0gbWFuYV9zbWNfdGVhcmRvd25faHdjKFx1MDAyNmdjLVx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCF0ZF9lcnIpXG4mIzQzO1x0XHRcdGh3Yy1cdTAwM2VzZXR1cF9hY3RpdmUgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gdGRfZXJyID8gdGRfZXJyIDogZXJyO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIGludCBtYW5hX2h3Y19pbml0X3F1ZXVlcyhzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLFxuQEAgLTcxMiw2ICYjNDM7ODkxLDEyIEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfaW5pdF9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCxcbiB7XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdC8qIENRIGRlcHRoIGlzIHFfZGVwdGggKiAyIChTUSAmIzQzOyBSUSkgcGFzc2VkIGFzIHUxNiB0byBjcmVhdGVfY3EuXG4mIzQzO1x0ICogQ2FwIHRvIHByZXZlbnQgdTE2IHRydW5jYXRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHFfZGVwdGggXHUwMDNlIFUxNl9NQVggLyAyKVxuJiM0MztcdFx0cV9kZXB0aCA9IFUxNl9NQVggLyAyO1xuJiM0MztcbiBcdGVyciA9IG1hbmFfaHdjX2luaXRfaW5mbGlnaHRfbXNnKGh3YywgcV9kZXB0aCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTcyOCwxNCAmIzQzOzkxMywxNCBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0ZXJyID0gbWFuYV9od2NfY3JlYXRlX3dxKGh3YywgR0RNQV9SUSwgcV9kZXB0aCwgbWF4X3JlcV9tc2dfc2l6ZSxcbiYjNDM7XHRlcnIgPSBtYW5hX2h3Y19jcmVhdGVfd3EoaHdjLCBHRE1BX1JRLCBxX2RlcHRoLCBtYXhfcmVzcF9tc2dfc2l6ZSxcbiBcdFx0XHRcdCBod2MtXHUwMDNlY3EsIFx1MDAyNmh3Yy1cdTAwM2VyeHEpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgSFdDIFJROiAlZFxcblwmIzM0OywgZXJyKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRlcnIgPSBtYW5hX2h3Y19jcmVhdGVfd3EoaHdjLCBHRE1BX1NRLCBxX2RlcHRoLCBtYXhfcmVzcF9tc2dfc2l6ZSxcbiYjNDM7XHRlcnIgPSBtYW5hX2h3Y19jcmVhdGVfd3EoaHdjLCBHRE1BX1NRLCBxX2RlcHRoLCBtYXhfcmVxX21zZ19zaXplLFxuIFx0XHRcdFx0IGh3Yy1cdTAwM2VjcSwgXHUwMDI2aHdjLVx1MDAzZXR4cSk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBIV0MgU1E6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuQEAgLTc0NCw2ICYjNDM7OTI5LDcgQEAgc3RhdGljIGludCBtYW5hX2h3Y19pbml0X3F1ZXVlcyhzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLFxuIFxuIFx0aHdjLVx1MDAzZW51bV9pbmZsaWdodF9tc2cgPSBxX2RlcHRoO1xuIFx0aHdjLVx1MDAzZW1heF9yZXFfbXNnX3NpemUgPSBtYXhfcmVxX21zZ19zaXplO1xuJiM0MztcdGh3Yy1cdTAwM2VtYXhfcmVzcF9tc2dfc2l6ZSA9IG1heF9yZXNwX21zZ19zaXplO1xuIFxuIFx0cmV0dXJuIDA7XG4gb3V0OlxuQEAgLTc1MSwxMiAmIzQzOzkzNyw2MiBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7LyogVGVhciBkb3duIGFsbCBIV0MgcXVldWVzIGFuZCBmcmVlIGFzc29jaWF0ZWQgcmVzb3VyY2VzLiAgVXNlZCBvblxuJiM0MzsgKiB0aGUgcmVpbml0LXdpdGgtaGlnaGVyLXF1ZXVlLWRlcHRoIHBhdGggYW5kIHJlaW5pdCBmYWxsYmFjay5cbiYjNDM7ICpcbiYjNDM7ICogUFJFQ09ORElUSU9OOiBtdXN0IGJlIGNhbGxlZCBvbmx5IGR1cmluZyBjaGFubmVsIGJyaW5nLXVwIGluXG4mIzQzOyAqIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKCksIGJlZm9yZSB0aGUgY2hhbm5lbCBpcyBwdWJsaXNoZWQgdG9cbiYjNDM7ICogc2VuZGVycy4gIFRoZXJlIHRoZSBzZXR1cCB0aHJlYWQgaXMgZWZmZWN0aXZlbHkgc2luZ2xlLXRocmVhZGVkXG4mIzQzOyAqIChzZXJpYWxpemVkIGFnYWluc3QgdGVhcmRvd24gYnkgdGhlIFBDSS9QTSBkZXZpY2VfbG9jayBvciwgb24gdGhlXG4mIzQzOyAqIHNlcnZpY2UgcGF0aCwgR0NfSU5fU0VSVklDRSwgd2l0aCB0aGUgZGF0YSBwYXRoIG5vdCB5ZXQgcHJvYmVkKSxcbiYjNDM7ICogY2hhbm5lbF91cCBpcyBzdGlsbCBmYWxzZSwgY2FsbGVyX2N0eCBpcyBub3QgeWV0IGFsbG9jYXRlZCwgYW5kXG4mIzQzOyAqIGFjdGl2ZV9zZW5kZXJzIGlzIDAg4oCUIHNvIG5vIGNvbmN1cnJlbnQgcmVxdWVzdC9yZXNwb25zZSB1c2VyIGNhblxuJiM0MzsgKiB0b3VjaCB0aGVzZSBxdWV1ZXMuICBUaGF0IGlzIHdoeSB0aGlzIHNraXBzIHRoZSBod2NfbG9jay1wcm90ZWN0ZWRcbiYjNDM7ICogZHJpdmVyX2RhdGEgY2xlYXIgJiM0MzsgYWN0aXZlX3NlbmRlcnMgZHJhaW4gdGhhdFxuJiM0MzsgKiBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoKSBuZWVkcyBmb3IgdGhlIHJ1bnRpbWUgdGVhcmRvd24gcmFjZTtcbiYjNDM7ICogb25seSB0aGUgQ1EtZmlyc3Qgb3JkZXJpbmcgYmVsb3cgKHRvIGZlbmNlIG9mZiBhIHBlbmRpbmcgaW50ZXJydXB0KVxuJiM0MzsgKiBpcyByZXF1aXJlZC4gIENhbGxpbmcgdGhpcyBvbiBhIGxpdmUsIHB1Ymxpc2hlZCBjaGFubmVsIHdvdWxkIGJlIGFcbiYjNDM7ICogdXNlLWFmdGVyLWZyZWUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBtYW5hX2h3Y19kZXN0cm95X3F1ZXVlcyhzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IGh3Yy1cdTAwM2VnZG1hX2Rldi1cdTAwM2VnZG1hX2NvbnRleHQ7XG4mIzQzO1xuJiM0MztcdC8qIERlc3Ryb3kgQ1EgZmlyc3QgdG8gZGVyZWdpc3RlciB0aGUgRVEgZnJvbSB0aGUgaW50ZXJydXB0XG4mIzQzO1x0ICogaGFuZGxlciBsaXN0IGJlZm9yZSBmcmVlaW5nIGNhbGxlcl9jdHgsIFRYUSwgb3IgUlhRIG1lbW9yeS5cbiYjNDM7XHQgKiBBIHBlbmRpbmcgaW50ZXJydXB0IGhhbmRsZXIgY291bGQgc3RpbGwgcmVhY2ggaGFuZGxlX3Jlc3AoKVxuJiM0MztcdCAqIHdoaWNoIGRlcmVmZXJlbmNlcyBjYWxsZXJfY3R4LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChod2MtXHUwMDNlY3EpIHtcbiYjNDM7XHRcdG1hbmFfaHdjX2Rlc3Ryb3lfY3EoZ2MsIGh3Yy1cdTAwM2VjcSk7XG4mIzQzO1x0XHRod2MtXHUwMDNlY3EgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a2ZyZWUoaHdjLVx1MDAzZWNhbGxlcl9jdHgpO1xuJiM0MztcdGh3Yy1cdTAwM2VjYWxsZXJfY3R4ID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKGh3Yy1cdTAwM2V0eHEpIHtcbiYjNDM7XHRcdG1hbmFfaHdjX2Rlc3Ryb3lfd3EoaHdjLCBod2MtXHUwMDNldHhxKTtcbiYjNDM7XHRcdGh3Yy1cdTAwM2V0eHEgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGh3Yy1cdTAwM2VyeHEpIHtcbiYjNDM7XHRcdG1hbmFfaHdjX2Rlc3Ryb3lfd3EoaHdjLCBod2MtXHUwMDNlcnhxKTtcbiYjNDM7XHRcdGh3Yy1cdTAwM2VyeHEgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWFuYV9nZF9mcmVlX3Jlc19tYXAoXHUwMDI2aHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMpO1xuJiM0MztcdGh3Yy1cdTAwM2VudW1faW5mbGlnaHRfbXNnID0gMDtcbiYjNDM7fVxuJiM0MztcbiBpbnQgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4ge1xuIFx0dTMyIG1heF9yZXFfbXNnX3NpemUsIG1heF9yZXNwX21zZ19zaXplO1xuIFx0c3RydWN0IGdkbWFfZGV2ICpnZCA9IFx1MDAyNmdjLVx1MDAzZWh3YztcbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3Yztcbi1cdHUxNiBxX2RlcHRoX21heDtcbiYjNDM7XHRzdHJ1Y3QgZ2RtYV9xdWV1ZSBfX3JjdSAqKm9sZF9jcV90YWJsZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdHUzMiBxX2RlcHRoX21heDtcbiBcdGludCBlcnI7XG4gXG4gXHRod2MgPSBremFsbG9jX29iaigqaHdjKTtcbkBAIC03NjQsMTAgJiM0MzsxMDAwLDExIEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRnZC1cdTAwM2VnZG1hX2NvbnRleHQgPSBnYztcbi1cdGdkLVx1MDAzZWRyaXZlcl9kYXRhID0gaHdjO1xuIFx0aHdjLVx1MDAzZWdkbWFfZGV2ID0gZ2Q7XG4gXHRod2MtXHUwMDNlZGV2ID0gZ2MtXHUwMDNlZGV2O1xuIFx0aHdjLVx1MDAzZWh3Y190aW1lb3V0ID0gSFdfQ0hBTk5FTF9XQUlUX1JFU09VUkNFX1RJTUVPVVRfTVM7XG4mIzQzO1x0aHdjLVx1MDAzZWFjdGl2ZV9zZW5kZXJzID0gMDtcbiYjNDM7XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmdjLVx1MDAzZWh3Y19kcmFpbl93YWl0cSk7XG4gXG4gXHQvKiBIV0MmIzM5O3MgaW5zdGFuY2UgbnVtYmVyIGlzIGFsd2F5cyAwLiAqL1xuIFx0Z2QtXHUwMDNlZGV2X2lkLmFzX3VpbnQzMiA9IDA7XG5AQCAtNzc2LDYgJiM0MzsxMDEzLDE1IEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiBcdGdkLVx1MDAzZXBkaWQgPSBJTlZBTElEX1BESUQ7XG4gXHRnZC1cdTAwM2Vkb29yYmVsbCA9IElOVkFMSURfRE9PUkJFTEw7XG4gXG4mIzQzO1x0LyogUHVibGlzaCBkcml2ZXJfZGF0YSBsYXN0LCB1bmRlciBod2NfbG9jazogdGhlIGxvY2sgb3JkZXJzIHRoZSBod2NcbiYjNDM7XHQgKiBpbml0aWFsaXNhdGlvbiBhYm92ZSBiZWZvcmUgdGhlIHBvaW50ZXIgYmVjb21lcyB2aXNpYmxlIGFuZFxuJiM0MztcdCAqIHNlcmlhbGlzZXMgdGhlIHB1Ymxpc2ggYWdhaW5zdCB0aGUgY29udHJvbC1wbGFuZSByZWFkZXJzIGluXG4mIzQzO1x0ICogbWFuYV9nZF9zZW5kX3JlcXVlc3QoKSwgbWFuYV9uZWVkX2xvZygpIGFuZCBtYW5hX3NlcnZfcmVzZXQoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YSA9IGh3YztcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4mIzQzO1xuIFx0LyogbWFuYV9od2NfaW5pdF9xdWV1ZXMoKSBvbmx5IGNyZWF0ZXMgdGhlIHJlcXVpcmVkIGRhdGEgc3RydWN0dXJlcyxcbiBcdCAqIGFuZCBkb2VzbiYjMzk7dCB0b3VjaCB0aGUgSFdDIGRldmljZS5cbiBcdCAqL1xuQEAgLTc5NCw4ICYjNDM7MTA0MCwxMzAgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiYjNDM7XHQvKiBUaGUgY2hhbm5lbCB3YXMgYm9vdHN0cmFwcGVkIGF0IGEgbWluaW1hbCBxdWV1ZSBkZXB0aC4gIElmIHRoZVxuJiM0MztcdCAqIGRldmljZSByZXBvcnRzIGEgaGlnaGVyIG1heGltdW0sIHRlYXIgZG93biBhbmQgcmVidWlsZCB3aXRoXG4mIzQzO1x0ICogdGhlIGxhcmdlciBkZXB0aCBzbyBtb3JlIEhXQyBjb21tYW5kcyBjYW4gYmUgaW4gZmxpZ2h0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChxX2RlcHRoX21heCBcdTAwM2UgSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEgpIHtcbiYjNDM7XHRcdC8qIHFfZGVwdGhfbWF4IG5vdyBjYXJyaWVzIHRoZSBmdWxsIGRldmljZS1yZXBvcnRlZCB2YWx1ZVxuJiM0MztcdFx0ICogKEhXQ19JTklUX0RBVEFfUVVFVUVfREVQVEggaXMgMjQtYml0KS4gIENsYW1wIGl0IHRvIHRoZVxuJiM0MztcdFx0ICogZGVwdGggdGhlIHJlc3Qgb2YgdGhlIGRyaXZlciBzdXBwb3J0cyDigJQgY3JlYXRlX2NxKCkgdGFrZXNcbiYjNDM7XHRcdCAqIHFfZGVwdGggKiAyIGFzIGEgdTE2IOKAlCBiZWZvcmUgdGhlIG92ZXJmbG93IGNoZWNrIGJlbG93LCBzb1xuJiM0MztcdFx0ICogYW4gb3Zlci1sYXJnZSBidXQgb3RoZXJ3aXNlLXZhbGlkIGRlcHRoIGlzIHJlZHVjZWQgdG8gdGhlXG4mIzQzO1x0XHQgKiBtYXhpbXVtIGluc3RlYWQgb2Ygd3JhcHBpbmcgb3IgYmVpbmcgcmVqZWN0ZWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChxX2RlcHRoX21heCBcdTAwM2UgVTE2X01BWCAvIDIpXG4mIzQzO1x0XHRcdHFfZGVwdGhfbWF4ID0gVTE2X01BWCAvIDI7XG4mIzQzO1xuJiM0MztcdFx0LyogU2FuaXR5LWNoZWNrIGRldmljZS1yZXBvcnRlZCB2YWx1ZXMgYmVmb3JlIHVzaW5nIHRoZW1cbiYjNDM7XHRcdCAqIHRvIHNpemUgRE1BIGFsbG9jYXRpb25zLiAgRW5mb3JjZSBwcm90b2NvbCBtaW5pbXVtc1xuJiM0MztcdFx0ICogZm9yIG1lc3NhZ2Ugc2l6ZXMgYW5kIGNoZWNrIHRoYXQgcV9kZXB0aCAqIG1heF9tc2dfc2l6ZVxuJiM0MztcdFx0ICogcGx1cyBhbGlnbm1lbnQgaGVhZHJvb20gZml0cyBpbiB1MzIgKGZvclxuJiM0MztcdFx0ICogbWFuYV9od2NfYWxsb2NfZG1hX2J1ZiYjMzk7cyBNQU5BX1BBR0VfQUxJR04pLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIW1heF9yZXFfbXNnX3NpemUgfHwgIW1heF9yZXNwX21zZ19zaXplIHx8XG4mIzQzO1x0XHQgICAgbWF4X3JlcV9tc2dfc2l6ZSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBnZG1hX3JlcV9oZHIpIHx8XG4mIzQzO1x0XHQgICAgbWF4X3Jlc3BfbXNnX3NpemUgXHUwMDNjIHNpemVvZihzdHJ1Y3QgZ2RtYV9yZXNwX2hkcikgfHxcbiYjNDM7XHRcdCAgICAodTY0KXFfZGVwdGhfbWF4ICogbWF4X3JlcV9tc2dfc2l6ZSBcdTAwM2VcbiYjNDM7XHRcdFx0VTMyX01BWCAtIE1BTkFfUEFHRV9TSVpFIHx8XG4mIzQzO1x0XHQgICAgKHU2NClxX2RlcHRoX21heCAqIG1heF9yZXNwX21zZ19zaXplIFx1MDAzZVxuJiM0MztcdFx0XHRVMzJfTUFYIC0gTUFOQV9QQUdFX1NJWkUpIHtcbiYjNDM7XHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFwmIzM0O0hXQzogaW52YWxpZCBkaW1zIHE9JXUgcmVxPSV1IHJlc3A9JXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0cV9kZXB0aF9tYXgsIG1heF9yZXFfbXNnX3NpemUsXG4mIzQzO1x0XHRcdFx0bWF4X3Jlc3BfbXNnX3NpemUpO1xuJiM0MztcdFx0XHRxX2RlcHRoX21heCA9IEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRIO1xuJiM0MztcdFx0XHRnb3RvIHNraXBfcmVpbml0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGVyciA9IG1hbmFfc21jX3RlYXJkb3duX2h3YyhcdTAwMjZnYy1cdTAwM2VzaG1fY2hhbm5lbCwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHQvKiBLZWVwIHVzaW5nIHRoZSBib290c3RyYXAtZGVwdGggY2hhbm5lbC4gKi9cbiYjNDM7XHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFwmIzM0O0ZhaWxlZCB0byB0ZWFyZG93biBIV0MgZm9yIHJlaW5pdDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ZXJyKTtcbiYjNDM7XHRcdFx0cV9kZXB0aF9tYXggPSBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSDtcbiYjNDM7XHRcdFx0Z290byBza2lwX3JlaW5pdDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRod2MtXHUwMDNlc2V0dXBfYWN0aXZlID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0LyogRGVzdHJveSBxdWV1ZXMgZmlyc3Qg4oCUIG1hbmFfZ2RfZGVzdHJveV9jcSBpbnNpZGVcbiYjNDM7XHRcdCAqIHVucHVibGlzaGVzIHRoZSBDUSBmcm9tIGNxX3RhYmxlIHZpYVxuJiM0MztcdFx0ICogcmN1X2Fzc2lnbl9wb2ludGVyKE5VTEwpICYjNDM7IHN5bmNocm9uaXplX3JjdS5cbiYjNDM7XHRcdCAqIE11c3QgaGFwcGVuIHdoaWxlIGNxX3RhYmxlIGlzIHN0aWxsIHZhbGlkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtYW5hX2h3Y19kZXN0cm95X3F1ZXVlcyhod2MpO1xuJiM0MztcbiYjNDM7XHRcdG9sZF9jcV90YWJsZSA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoZ2MtXHUwMDNlY3FfdGFibGUsIE5VTEwsIHRydWUpO1xuJiM0MztcdFx0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0XHR2ZnJlZShvbGRfY3FfdGFibGUpO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IG1hbmFfaHdjX2luaXRfcXVldWVzKGh3YywgcV9kZXB0aF9tYXgsXG4mIzQzO1x0XHRcdFx0XHQgICBtYXhfcmVxX21zZ19zaXplLFxuJiM0MztcdFx0XHRcdFx0ICAgbWF4X3Jlc3BfbXNnX3NpemUpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWluaXQgSFdDOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdFx0Z290byByZWluaXRfZmFsbGJhY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoZ2MsIFx1MDAyNnFfZGVwdGhfbWF4LFxuJiM0MztcdFx0XHRcdFx0XHQgXHUwMDI2bWF4X3JlcV9tc2dfc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdFx0IFx1MDAyNm1heF9yZXNwX21zZ19zaXplKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmUtZXN0YWJsaXNoIEhXQzogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ZXJyKTtcbiYjNDM7XHRcdFx0LyogZXN0YWJsaXNoX2NoYW5uZWwgZG9lcyBpbnRlcm5hbCB0ZWFyZG93biBvblxuJiM0MztcdFx0XHQgKiBmYWlsdXJlLiAgSWYgdGVhcmRvd24gc3VjY2VlZGVkIChzZXR1cF9hY3RpdmVcbiYjNDM7XHRcdFx0ICogY2xlYXJlZCksIE1TVCBlbnRyaWVzIGFyZSBpbnZhbGlkYXRlZCBhbmQgd2VcbiYjNDM7XHRcdFx0ICogY2FuIHRyeSB0aGUgYm9vdHN0cmFwIGZhbGxiYWNrLiAgSWYgdGVhcmRvd25cbiYjNDM7XHRcdFx0ICogYWxzbyBmYWlsZWQgKHNldHVwX2FjdGl2ZSBzdGlsbCBzZXQpLCBoYXJkd2FyZVxuJiM0MztcdFx0XHQgKiBtYXBwaW5ncyBtYXkgc3RpbGwgYmUgYWN0aXZlIOKAlCBza2lwIGZhbGxiYWNrLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKGh3Yy1cdTAwM2VzZXR1cF9hY3RpdmUpXG4mIzQzO1x0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdGdvdG8gcmVpbml0X2ZhbGxiYWNrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Z290byBza2lwX3JlaW5pdDtcbiYjNDM7XG4mIzQzO3JlaW5pdF9mYWxsYmFjazpcbiYjNDM7XHQvKiBSZXN0b3JlIGJvb3RzdHJhcC1kZXB0aCBjaGFubmVsIHNvIHRoZSBkZXZpY2UgcmVtYWlucyBmdW5jdGlvbmFsLlxuJiM0MztcdCAqIEZyZWUgY3FfdGFibGUgaWYgaXQgd2FzIGFsbG9jYXRlZCBieSBhIHBhcnRpYWxseSBzdWNjZXNzZnVsXG4mIzQzO1x0ICogZXN0YWJsaXNoIGF0dGVtcHQuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZGV2X3dhcm4oaHdjLVx1MDAzZWRldiwgXCYjMzQ7SFdDIHJlaW5pdCBmYWlsZWQsIGZhbGxpbmcgYmFjayB0byBib290c3RyYXAgZGVwdGhcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRtYW5hX2h3Y19kZXN0cm95X3F1ZXVlcyhod2MpO1xuJiM0MztcbiYjNDM7XHRvbGRfY3FfdGFibGUgPSByY3VfcmVwbGFjZV9wb2ludGVyKGdjLVx1MDAzZWNxX3RhYmxlLCBOVUxMLCB0cnVlKTtcbiYjNDM7XHRzeW5jaHJvbml6ZV9yY3UoKTtcbiYjNDM7XHR2ZnJlZShvbGRfY3FfdGFibGUpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBtYW5hX2h3Y19pbml0X3F1ZXVlcyhod2MsIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRILFxuJiM0MztcdFx0XHRcdCAgIEhXX0NIQU5ORUxfTUFYX1JFUVVFU1RfU0laRSxcbiYjNDM7XHRcdFx0XHQgICBIV19DSEFOTkVMX01BWF9SRVNQT05TRV9TSVpFKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZXN0b3JlIGJvb3RzdHJhcCBIV0M6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChnYywgXHUwMDI2cV9kZXB0aF9tYXgsIFx1MDAyNm1heF9yZXFfbXNnX3NpemUsXG4mIzQzO1x0XHRcdFx0XHQgXHUwMDI2bWF4X3Jlc3BfbXNnX3NpemUpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlLWVzdGFibGlzaCBib290c3RyYXAgSFdDOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ZXJyKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO3NraXBfcmVpbml0OlxuJiM0MztcbiYjNDM7XHQvKiBObyBSQ1UgbmVlZGVkOiBzdGlsbCBpbiBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbCwgdGhlXG4mIzQzO1x0ICogcG9pbnRlciBoYXMgbm90IGJlZW4gcHVibGlzaGVkIHRvIGNvbmN1cnJlbnQgc2VuZGVycyB5ZXQuXG4mIzQzO1x0ICovXG4gXHRlcnIgPSBtYW5hX2h3Y190ZXN0X2NoYW5uZWwoZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhLFxuLVx0XHRcdFx0ICAgIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRILFxuJiM0MztcdFx0XHRcdCAgICBod2MtXHUwMDNlbnVtX2luZmxpZ2h0X21zZyxcbiBcdFx0XHRcdCAgICBtYXhfcmVxX21zZ19zaXplLCBtYXhfcmVzcF9tc2dfc2l6ZSk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHRlc3QgSFdDOiAlZFxcblwmIzM0OywgZXJyKTtcbkBAIC04MTAsMjcgJiM0MzsxMTc4LDE5NSBAQCBpbnQgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4gXG4gdm9pZCBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4ge1xuJiM0MztcdC8qIFRoaXMgaXMgdGhlIG9ubHkgZGVzdHJveSBlbnRyeSBwb2ludC4gIGRyaXZlcl9kYXRhIGlzIHJlYWRcbiYjNDM7XHQgKiBwbGFpbmx5IGhlcmUgKHRlYXJkb3duIGlzIHNlcmlhbGlzZWQgYWdhaW5zdCBvdGhlciB0ZWFyZG93bik7XG4mIzQzO1x0ICogaXQgaXMgY2xlYXJlZCB1bmRlciBod2NfbG9jayBiZWxvdyBiZWZvcmUgaHdjIGlzIGZyZWVkLlxuJiM0MztcdCAqL1xuIFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjID0gZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xuJiM0MztcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqb2xkX2NxX3RhYmxlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRpZiAoIWh3YylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0LyogZ2MtXHUwMDNlbWF4X251bV9jcXMgaXMgc2V0IGluIG1hbmFfaHdjX2luaXRfZXZlbnRfaGFuZGxlcigpLiBJZiBpdCYjMzk7c1xuLVx0ICogbm9uLXplcm8sIHRoZSBIV0Mgd29ya2VkIGFuZCB3ZSBzaG91bGQgdGVhciBkb3duIHRoZSBIV0MgaGVyZS5cbiYjNDM7XHQvKiBQcmV2ZW50IG5ldyByZXF1ZXN0cyBmcm9tIHN0YXJ0aW5nIGFuZCB3YWtlIGFueVxuJiM0MztcdCAqIHRocmVhZHMgd2FpdGluZyBmb3IgYSBmcmVlIG1zZyBzbG90LiAgU2V0IGNoYW5uZWxfdXAgdW5kZXJcbiYjNDM7XHQgKiB0aGUgYml0bWFwIGxvY2sgc28gZ2V0X21zZ19pbmRleCgpIGNhbm5vdCBhY3F1aXJlIGEgc2xvdFxuJiM0MztcdCAqIGFuZCBpbmNyZW1lbnQgYWN0aXZlX3NlbmRlcnMgYWZ0ZXIgdGhpcyBwb2ludC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIElmIGNoYW5uZWxfdXAgaXMgYWxyZWFkeSBmYWxzZSAoZS5nLiBpbml0IGZhaWxlZCBiZWZvcmVcbiYjNDM7XHQgKiB0aGUgY2hhbm5lbCB3YXMgZXN0YWJsaXNoZWQpLCBza2lwIHRoZSBsb2NrIOKAlCBpdCBtYXkgbm90XG4mIzQzO1x0ICogaGF2ZSBiZWVuIGluaXRpYWxpemVkIHlldCwgYW5kIG5vIHNlbmRlcnMgY2FuIGJlIGFjdGl2ZS5cbiBcdCAqL1xuLVx0aWYgKGdjLVx1MDAzZW1heF9udW1fY3FzIFx1MDAzZSAwKSB7XG4tXHRcdG1hbmFfc21jX3RlYXJkb3duX2h3YyhcdTAwMjZnYy1cdTAwM2VzaG1fY2hhbm5lbCwgZmFsc2UpO1xuLVx0XHRnYy1cdTAwM2VtYXhfbnVtX2NxcyA9IDA7XG4mIzQzO1x0aWYgKGh3Yy1cdTAwM2VjaGFubmVsX3VwKSB7XG4mIzQzO1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRod2MtXHUwMDNlY2hhbm5lbF91cCA9IGZhbHNlO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHR3YWtlX3VwX2FsbChcdTAwMjZod2MtXHUwMDNlbXNnX3dhaXRxKTtcbiBcdH1cbiBcbiYjNDM7XHQvKiBDbGVhciB0aGUgcG9pbnRlciB1bmRlciBod2NfbG9jayBzbyBuZXcgY2FsbGVycyBpblxuJiM0MztcdCAqIG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCkgc2VlIE5VTEwgYW5kIHJldHVybiAtRU5PREVWLiAgVGhlIGxvY2tcbiYjNDM7XHQgKiBtYWtlcyB0aGUgcmVhZGVycyYjMzk7IFwmIzM0O2xvYWQgZHJpdmVyX2RhdGEgJiM0MzsgYWN0aXZlX3NlbmRlcnMmIzQzOyYjNDM7XCYjMzQ7XG4mIzQzO1x0ICogYXRvbWljIGFnYWluc3QgdGhpcyBzdG9yZSwgc28gb25jZSBpdCByZXR1cm5zIG5vIG5ldyBzZW5kZXIgY2FuXG4mIzQzO1x0ICogdGFrZSBhIHJlZmVyZW5jZTsgdGhlIGFjdGl2ZV9zZW5kZXJzIGRyYWluIGJlbG93IHdhaXRzIG91dCB0aG9zZVxuJiM0MztcdCAqIHRoYXQgYWxyZWFkeSBkaWQsIGJlZm9yZSB0aGVpciBod2MgaXMgZnJlZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGEgPSBOVUxMO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0LyogRm9yY2UtY29tcGxldGUgYW55IGluLWZsaWdodCBzZW5kZXJzIHNvIHRoZXkgb2JzZXJ2ZSAtRU5PREVWLFxuJiM0MztcdCAqIHJldHVybiwgYW5kIGRyb3AgdGhlaXIgcmVmZXJlbmNlcy4gIFRoaXMgcnVucyBiZWZvcmUgdGhlIEhXQ1xuJiM0MztcdCAqIGhhcmR3YXJlIHRlYXJkb3duIGJlbG93LCBzbyBhIGxpdmUgaW50ZXJydXB0IG1heSBzdGlsbCBkZWxpdmVyXG4mIzQzO1x0ICogYSByZWFsIHJlc3BvbnNlIHZpYSBoYW5kbGVfcmVzcCgpIGNvbmN1cnJlbnRseSDigJQgdGhhdCBpcyBzYWZlXG4mIzQzO1x0ICogYmVjYXVzZSB0aGUgcGVyLXNsb3QgcmVmY291bnQgbW9kZWwgdG9sZXJhdGVzIGEgY29uY3VycmVudFxuJiM0MztcdCAqIGNvbXBsZXRlKCkgYW5kIGJvdGggcGF0aHMgKGhhbmRsZV9yZXNwIGFuZCB0aGlzIGxvb3ApIGRyb3BcbiYjNDM7XHQgKiB0aGVpciByZWZzIHdpdGhvdXQgZG91YmxlLXJlbGVhc2luZyB0aGUgc2xvdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaHdjLVx1MDAzZWNhbGxlcl9jdHgpIHtcbiYjNDM7XHRcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xuJiM0MztcdFx0aW50IGk7XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaHdjLVx1MDAzZW51bV9pbmZsaWdodF9tc2c7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmICghdGVzdF9iaXQoaSwgaHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdGN0eCA9IFx1MDAyNmh3Yy1cdTAwM2VjYWxsZXJfY3R4W2ldO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogV2FrZSBzZW5kZXJzIGJsb2NrZWQgb24gd2FpdF9mb3JfY29tcGxldGlvbi5cbiYjNDM7XHRcdFx0ICogU2V0IGVycm9yIHVuZGVyIGxvY2sgdG8gYXZvaWQgcmFjaW5nIHdpdGhcbiYjNDM7XHRcdFx0ICogaGFuZGxlX3Jlc3AoKSB3aGljaCB3cml0ZXMgZXJyb3IgdW5kZXIgdGhlXG4mIzQzO1x0XHRcdCAqIHNhbWUgbG9jay4gIFRoZSBzZW5kZXIgTlVMTHMgb3V0cHV0X2J1ZlxuJiM0MztcdFx0XHQgKiBhZnRlciB3YWtpbmcg4oCUIGRvaW5nIGl0IGhlcmUgd291bGQgcmFjZVxuJiM0MztcdFx0XHQgKiB3aXRoIGEgc2VuZGVyIHRoYXQgaGFzbiYjMzk7dCBzZXQgb3V0cHV0X2J1ZiB5ZXQuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0XHRjdHgtXHUwMDNlZXJyb3IgPSAtRU5PREVWO1xuJiM0MztcdFx0XHRjb21wbGV0ZShcdTAwMjZjdHgtXHUwMDNlY29tcF9ldmVudCk7XG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3R4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIGFsbCBzZW5kZXIgdGhyZWFkcyB0byBmaW5pc2ggYW5kIGRyb3AgdGhlaXIgcmVmc1xuJiM0MztcdCAqIGJlZm9yZSB0b3VjaGluZyB0aGUgaGFyZHdhcmUgb3IgZnJlZWluZyBhbnl0aGluZy4gIERyYWluaW5nXG4mIzQzO1x0ICogaGVyZSAtLSBhaGVhZCBvZiB0aGUgdGVhcmRvd24vRkxSIGJsb2NrIGJlbG93IC0tIGd1YXJhbnRlZXMgbm9cbiYjNDM7XHQgKiBpbi1mbGlnaHQgc2VuZGVyIGlzIHN0aWxsIHJ1bm5pbmcgd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb25cbiYjNDM7XHQgKiBhbnkgcGF0aCwgaW5jbHVkaW5nIHRoZSBGTFItZmFpbHVyZSBlYXJseSByZXR1cm47IG90aGVyd2lzZSBhXG4mIzQzO1x0ICogc3RyYW5kZWQgc2VuZGVyIHdvdWxkIGRlcmVmZXJlbmNlIGdjLVx1MDAzZWh3Y19sb2NrIC9cbiYjNDM7XHQgKiBnYy1cdTAwM2Vod2NfZHJhaW5fd2FpdHEgYWZ0ZXIgdGhlIGNhbGxlciBmcmVlcyBnYy5cbiYjNDM7XHQgKiBBZnRlciB0aGlzLCBvbmx5IHNsb3RzIGhlbGQgYnkgdGltZWQtb3V0IHNlbmRlcnMgd2hvc2VcbiYjNDM7XHQgKiBoYW5kbGVfcmVzcCgpIG5ldmVyIHJhbiByZW1haW4gaW4gdGhlIGJpdG1hcC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIGFjdGl2ZV9zZW5kZXJzIGlzIG9ubHkgZXZlciBtb2RpZmllZCB1bmRlciBod2NfbG9jaywgYW5kIHRoZVxuJiM0MztcdCAqIGxhc3Qgc2VuZGVyJiMzOTtzIHdha2VfdXAoKSBydW5zIHVuZGVyIHRoYXQgbG9jayBiZWZvcmUgaXQgaXNcbiYjNDM7XHQgKiByZWxlYXNlZC4gIEV2YWx1YXRpbmcgdGhlIGNvbmRpdGlvbiB1bmRlciBod2NfbG9jayB0aGVyZWZvcmVcbiYjNDM7XHQgKiBndWFyYW50ZWVzIHRoYXQgb25jZSB3ZSBvYnNlcnZlIDAgdGhlIHdha2luZyBzZW5kZXIgaGFzXG4mIzQzO1x0ICogYWxyZWFkeSBkcm9wcGVkIHRoZSBsb2NrIC0tIGkuZS4gZmluaXNoZWQgdG91Y2hpbmcgZ2MgLS0gc28gaXRcbiYjNDM7XHQgKiBjYW5ub3QgcmFjZSB0aGUgY2FsbGVyIGZyZWVpbmcgZ2MgYWZ0ZXIgdGhpcyByZXR1cm5zLlxuJiM0MztcdCAqL1xuJiM0MztcdHNwaW5fbG9ja19pcnEoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2spO1xuJiM0MztcdHdhaXRfZXZlbnRfbG9ja19pcnEoZ2MtXHUwMDNlaHdjX2RyYWluX3dhaXRxLFxuJiM0MztcdFx0XHQgICAgaHdjLVx1MDAzZWFjdGl2ZV9zZW5kZXJzID09IDAsIGdjLVx1MDAzZWh3Y19sb2NrKTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBUZWFyIGRvd24gdGhlIEhXQyBpZiBzZXR1cF9od2MgcHJldmlvdXNseSBhY3RpdmF0ZWQgTVNUIGVudHJpZXMuXG4mIzQzO1x0ICogVGhpcyBpcyB0aGUgZGVmaW5pdGl2ZSBmbGFnIOKAlCB1bmxpa2UgbWF4X251bV9jcXMgd2hpY2ggZGVwZW5kc1xuJiM0MztcdCAqIG9uIHRoZSBpbml0IEVRRSBhcnJpdmluZy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZSByZXR1cm4gdmFsdWUgaXMgaW50ZW50aW9uYWxseSBub3QgY2hlY2tlZC4gIFRoaXMgaXMgdGhlXG4mIzQzO1x0ICogdGVybWluYWwgY2xlYW51cCBwYXRoIChkZXZpY2UgcmVtb3ZhbCwgc3VzcGVuZCwgb3IgaW5pdFxuJiM0MztcdCAqIGZhaWx1cmUpIOKAlCByZXNvdXJjZXMgbXVzdCBiZSBmcmVlZCByZWdhcmRsZXNzLiAgSWYgdGVhcmRvd25cbiYjNDM7XHQgKiBmYWlscywgaGFyZHdhcmUgbWF5IHN0aWxsIGhhdmUgYWN0aXZlIE1TVCBlbnRyaWVzLCBidXQ6XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiAgLSBJbnRlcnJ1cHRzOiBtYW5hX2h3Y19kZXN0cm95X2NxKCkgYmVsb3cgY2FsbHNcbiYjNDM7XHQgKiAgICBtYW5hX2dkX2RlcmVnaXN0ZXJfaXJxKCkgd2hpY2ggcmVtb3ZlcyB0aGUgSFdDIEVRIGZyb21cbiYjNDM7XHQgKiAgICB0aGUgaW50ZXJydXB0IGRpc3BhdGNoIGxpc3QgdmlhIGxpc3RfZGVsX3JjdSgpICYjNDM7XG4mIzQzO1x0ICogICAgc3luY2hyb25pemVfcmN1KCkuICBBZnRlciB0aGF0LCBubyBpbnRlcnJ1cHQgaGFuZGxlciBjYW5cbiYjNDM7XHQgKiAgICBpbnZva2UgaGFuZGxlX3Jlc3AoKSBvciBhY2Nlc3MgQ1EvUlEgYnVmZmVycyDigJQgZXZlbiBpZlxuJiM0MztcdCAqICAgIHRoZSBJUlEgaXMgc2hhcmVkIHdpdGggZGF0YSBwYXRoIHF1ZXVlcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqICAtIERNQTogbWFuYV9od2NfZGVzdHJveV93cSgpIGZyZWVzIERNQSBidWZmZXJzIHZpYVxuJiM0MztcdCAqICAgIGRtYV9mcmVlX2NvaGVyZW50KCkgd2hpY2ggdW5tYXBzIHRoZSBJT1ZBIGZyb20gdGhlXG4mIzQzO1x0ICogICAgSU9NTVUuICBBbnkgc3RhbGUgaGFyZHdhcmUgRE1BIHRvIHRoZSBvbGQgYWRkcmVzc1xuJiM0MztcdCAqICAgIGZhdWx0cyBhdCB0aGUgSU9NTVUsIG5vdCBpbiBrZXJuZWwgbWVtb3J5LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChod2MtXHUwMDNlc2V0dXBfYWN0aXZlKSB7XG4mIzQzO1x0XHRpbnQgdGRfZXJyID0gbWFuYV9zbWNfdGVhcmRvd25faHdjKFx1MDAyNmdjLVx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRkX2Vycikge1xuJiM0MztcdFx0XHRkZXZfZXJyKGdjLVx1MDAzZWRldiwgXCYjMzQ7SFdDIHRlYXJkb3duIGZhaWxlZDogJWQsIGlzc3VpbmcgRkxSXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHRkX2Vycik7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBPbiBzeXN0ZW1zIHdpdGhvdXQgSU9NTVUsIGZyZWVpbmcgRE1BIG1lbW9yeSB3aXRoXG4mIzQzO1x0XHRcdCAqIGFjdGl2ZSBoYXJkd2FyZSBNU1QgbWFwcGluZ3Mgcmlza3MgbWVtb3J5IGNvcnJ1cHRpb24uXG4mIzQzO1x0XHRcdCAqIElzc3VlIEZMUiB0byBmb3JjZS1yZXNldCB0aGUgZGV2aWNlIGFuZCBpbnZhbGlkYXRlXG4mIzQzO1x0XHRcdCAqIGFsbCBoYXJkd2FyZSBzdGF0ZSBpbmNsdWRpbmcgTVNUIGVudHJpZXMuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHR0ZF9lcnIgPSBwY2llX2Zscih0b19wY2lfZGV2KGdjLVx1MDAzZWRldikpO1xuJiM0MztcdFx0XHRpZiAodGRfZXJyKSB7XG4mIzQzO1x0XHRcdFx0LyogRGV2aWNlIHdlZGdlZDogdGVhcmRvd24gYW5kIEZMUlxuJiM0MztcdFx0XHRcdCAqIGJvdGggZmFpbGVkLCBzbyBoYXJkd2FyZSBtYXkgc3RpbGxcbiYjNDM7XHRcdFx0XHQgKiBETUEgaW50byBvdXIgcXVldWUgYnVmZmVycy4gIExlYWtcbiYjNDM7XHRcdFx0XHQgKiBhbGwgSFdDIERNQSBidWZmZXJzIC0tIGFuZCB0aGUgRVFcbiYjNDM7XHRcdFx0XHQgKiBJUlEgcmVnaXN0cmF0aW9uLCB3aG9zZSBzYWZlIHJlbW92YWxcbiYjNDM7XHRcdFx0XHQgKiBuZWVkcyB0aG9zZSBxdWV1ZXMgLS0gaW5zdGVhZCBvZlxuJiM0MztcdFx0XHRcdCAqIGZyZWVpbmcgbWVtb3J5IHRoZSBkZXZpY2UgY2FuIHN0aWxsXG4mIzQzO1x0XHRcdFx0ICogcmVhY2g7IHdpdGhvdXQgYW4gSU9NTVUgdGhlIGZyZWVkXG4mIzQzO1x0XHRcdFx0ICogcGFnZXMgY291bGQgYmUgcmV1c2VkIHVuZGVyIGxpdmVcbiYjNDM7XHRcdFx0XHQgKiBETUEuXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1xuJiM0MztcdFx0XHRcdGRldl93YXJuKGdjLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdCBcJiMzNDtMZWFrZWQgSFdDIERNQSBidWZmZXJzIChDUS9SUS9UWFEpIHRvIHByZXZlbnQgbWVtb3J5IGNvcnJ1cHRpb24uIERldmljZSBpcyBubyBsb25nZXIgdXNhYmxlLlxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0XHRcdC8qIERvIG5vdCBjYWxsIGRlc3Ryb3lfY3Evd3EgYmVsb3c7XG4mIzQzO1x0XHRcdFx0ICogdGhleSB3b3VsZCBkbWFfZnJlZV9jb2hlcmVudCgpLlxuJiM0MztcdFx0XHRcdCAqIExlYXZlIGh3Yy9jcS9yeHEvdHhxIGFsbG9jYXRlZC5cbiYjNDM7XHRcdFx0XHQgKi9cbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdGRldl9pbmZvKGdjLVx1MDAzZWRldiwgXCYjMzQ7RkxSIHN1Y2NlZWRlZCwgaGFyZHdhcmUgc3RhdGUgY2xlYXJlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aHdjLVx1MDAzZXNldHVwX2FjdGl2ZSA9IGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGVhciBkb3duIHRoZSBIV0MgQ1Egb2JqZWN0IGZpcnN0IOKAlCBtYW5hX2h3Y19kZXN0cm95X2NxKClcbiYjNDM7XHQgKiBib3RoIHVucHVibGlzaGVzIHRoZSBDUSBmcm9tIGNxX3RhYmxlICgmIzQzO3N5bmNocm9uaXplX3JjdSkgYW5kXG4mIzQzO1x0ICogZGVyZWdpc3RlcnMgdGhlIEhXQyBFUSBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciYjMzk7cyBSQ1UgbGlzdFxuJiM0MztcdCAqICh2aWEgbWFuYV9nZF9kZXJlZ2lzdGVyX2lycSAmIzQzOyBzeW5jaHJvbml6ZV9yY3UpLCBndWFyYW50ZWVpbmdcbiYjNDM7XHQgKiBubyBpbnRlcnJ1cHQgaGFuZGxlciBjYW4gYWNjZXNzIFJRL1RYUSBidWZmZXJzIGFmdGVyIHRoaXNcbiYjNDM7XHQgKiBwb2ludC4gIFRoZSBhY3RpdmVfc2VuZGVycyBkcmFpbiBhYm92ZSBlbnN1cmVzIG5vIHNlbmRlciBpc1xuJiM0MztcdCAqIGFjY2Vzc2luZyB0aGUgQ1EgdmlhIHR4cS1cdTAwM2Vod2NfY3Egd2hlbiBpdCBpcyBkZXN0cm95ZWQuICBUaGVuXG4mIzQzO1x0ICogZGVzdHJveSBUWFEgYW5kIFJRIHNhZmVseS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaHdjLVx1MDAzZWNxKVxuJiM0MztcdFx0bWFuYV9od2NfZGVzdHJveV9jcShod2MtXHUwMDNlZ2RtYV9kZXYtXHUwMDNlZ2RtYV9jb250ZXh0LCBod2MtXHUwMDNlY3EpO1xuJiM0MztcbiBcdGlmIChod2MtXHUwMDNldHhxKVxuIFx0XHRtYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLVx1MDAzZXR4cSk7XG4gXG4gXHRpZiAoaHdjLVx1MDAzZXJ4cSlcbiBcdFx0bWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy1cdTAwM2VyeHEpO1xuIFxuLVx0aWYgKGh3Yy1cdTAwM2VjcSlcbi1cdFx0bWFuYV9od2NfZGVzdHJveV9jcShod2MtXHUwMDNlZ2RtYV9kZXYtXHUwMDNlZ2RtYV9jb250ZXh0LCBod2MtXHUwMDNlY3EpO1xuJiM0MztcdC8qIFJlbGVhc2UgYW55IHNsb3RzIHN0aWxsIGhlbGQg4oCUIHRoZXNlIGJlbG9uZyB0byB0aW1lZC1vdXRcbiYjNDM7XHQgKiBzZW5kZXJzIHdoZXJlIGhhbmRsZV9yZXNwKCkgbmV2ZXIgcmFuIChyZWZjb3VudCA9IDEgd2l0aFxuJiM0MztcdCAqIGhhbmRsZV9yZXNwJiMzOTtzIHJlZiBzdGlsbCBvdXRzdGFuZGluZykuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGh3Yy1cdTAwM2VjYWxsZXJfY3R4KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDtcbiYjNDM7XHRcdGludCBpO1xuJiM0MztcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGh3Yy1cdTAwM2VudW1faW5mbGlnaHRfbXNnOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAoIXRlc3RfYml0KGksIGh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLm1hcCkpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRjdHggPSBcdTAwMjZod2MtXHUwMDNlY2FsbGVyX2N0eFtpXTtcbiYjNDM7XHRcdFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbiBcdGtmcmVlKGh3Yy1cdTAwM2VjYWxsZXJfY3R4KTtcbiBcdGh3Yy1cdTAwM2VjYWxsZXJfY3R4ID0gTlVMTDtcbkBAIC04NDUsMTEgJiM0MzsxMzgxLDExIEBAIHZvaWQgbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIFx0aHdjLVx1MDAzZWh3Y190aW1lb3V0ID0gMDtcbiBcbiBcdGtmcmVlKGh3Yyk7XG4tXHRnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGEgPSBOVUxMO1xuIFx0Z2MtXHUwMDNlaHdjLmdkbWFfY29udGV4dCA9IE5VTEw7XG4gXG4tXHR2ZnJlZShnYy1cdTAwM2VjcV90YWJsZSk7XG4tXHRnYy1cdTAwM2VjcV90YWJsZSA9IE5VTEw7XG4mIzQzO1x0b2xkX2NxX3RhYmxlID0gcmN1X3JlcGxhY2VfcG9pbnRlcihnYy1cdTAwM2VjcV90YWJsZSwgTlVMTCwgdHJ1ZSk7XG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0dmZyZWUob2xkX2NxX3RhYmxlKTtcbiB9XG4gXG4gaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLFxuQEAgLTg2MCwxMyAmIzQzOzEzOTYsMTcgQEAgaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLFxuIFx0c3RydWN0IGh3Y193cSAqdHhxID0gaHdjLVx1MDAzZXR4cTtcbiBcdHN0cnVjdCBnZG1hX3JlcV9oZHIgKnJlcV9tc2c7XG4gXHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0dTMyIGRlc3RfdnJjcSA9IDA7XG4gXHR1MzIgZGVzdF92cnEgPSAwO1xuIFx0dTMyIGNvbW1hbmQ7XG4mIzQzO1x0dTMyIHN0YXR1cztcbiBcdHUxNiBtc2dfaWQ7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bWFuYV9od2NfZ2V0X21zZ19pbmRleChod2MsIFx1MDAyNm1zZ19pZCk7XG4mIzQzO1x0ZXJyID0gbWFuYV9od2NfZ2V0X21zZ19pbmRleChod2MsIFx1MDAyNm1zZ19pZCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4gXG4gXHR0eF93ciA9IFx1MDAyNnR4cS1cdTAwM2Vtc2dfYnVmLVx1MDAzZXJlcXNbbXNnX2lkXTtcbiBcbkBAIC04NzgsOCAmIzQzOzE0MTgsMTEgQEAgaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLFxuIFx0fVxuIFxuIFx0Y3R4ID0gaHdjLVx1MDAzZWNhbGxlcl9jdHggJiM0MzsgbXNnX2lkO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0Y3R4LVx1MDAzZW91dHB1dF9idWYgPSByZXNwO1xuIFx0Y3R4LVx1MDAzZW91dHB1dF9idWZsZW4gPSByZXNwX2xlbjtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4gXHRyZXFfbXNnID0gKHN0cnVjdCBnZG1hX3JlcV9oZHIgKil0eF93ci1cdTAwM2VidWZfdmE7XG4gXHRpZiAocmVxKVxuQEAgLTg5NSw4ICYjNDM7MTQzOCwxNCBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sXG4gXHRcdGRlc3RfdnJjcSA9IGh3Yy1cdTAwM2VwZl9kZXN0X3ZyY3FfaWQ7XG4gXHR9XG4gXG4mIzQzO1x0LyogVGFrZSBoYW5kbGVfcmVzcCYjMzk7cyByZWYgYmVmb3JlIHBvc3Rpbmcg4oCUIGhhcmR3YXJlIGNhbiByZXNwb25kXG4mIzQzO1x0ICogaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGRvb3JiZWxsIHJpbmcuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmVmY291bnRfaW5jKFx1MDAyNmN0eC1cdTAwM2VyZWZjbnQpO1xuJiM0MztcbiBcdGVyciA9IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKHR4cSwgdHhfd3IsIGRlc3RfdnJxLCBkZXN0X3ZyY3EsIGZhbHNlKTtcbiBcdGlmIChlcnIpIHtcbiYjNDM7XHRcdHJlZmNvdW50X2RlYyhcdTAwMjZjdHgtXHUwMDNlcmVmY250KTtcbiBcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcJiMzNDtIV0M6IEZhaWxlZCB0byBwb3N0IHNlbmQgV1FFOiAlZFxcblwmIzM0OywgZXJyKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG5AQCAtOTA3LDMxICYjNDM7MTQ1Niw4NiBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sXG4gXHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcJiMzNDtDb21tYW5kIDB4JXggdGltZWQgb3V0OiAldSBtc1xcblwmIzM0OyxcbiBcdFx0XHRcdGNvbW1hbmQsIGh3Yy1cdTAwM2Vod2NfdGltZW91dCk7XG4gXG4tXHRcdC8qIFJlZHVjZSBmdXJ0aGVyIHdhaXRpbmcgaWYgSFdDIG5vIHJlc3BvbnNlICovXG4mIzQzO1x0XHQvKiBOVUxMIG91dCBvdXRwdXRfYnVmIHNvIGEgbGF0ZSBoYW5kbGVfcmVzcCgpIHdvbiYjMzk7dCB3cml0ZVxuJiM0MztcdFx0ICogaW50byB0aGUgY2FsbGVyJiMzOTtzIGJ1ZmZlciBhZnRlciB0aGUgc2VuZGVyIHJldHVybnMsIHRoZW5cbiYjNDM7XHRcdCAqIGNoZWNrIHdoZXRoZXIgaGFuZGxlX3Jlc3AoKSBhbHJlYWR5IGRlbGl2ZXJlZCBhIHZhbGlkXG4mIzQzO1x0XHQgKiByZXNwb25zZSBiZXR3ZWVuIHRoZSB0aW1lb3V0IGZpcmluZyBhbmQgdGhpcyBsb2NrXG4mIzQzO1x0XHQgKiBhY3F1aXNpdGlvbiDigJQgY3R4LVx1MDAzZWVycm9yICE9IC1FSU5QUk9HUkVTUyBtZWFucyBpdCByYW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRjdHgtXHUwMDNlb3V0cHV0X2J1ZiA9IE5VTEw7XG4mIzQzO1x0XHRlcnIgPSBjdHgtXHUwMDNlZXJyb3I7XG4mIzQzO1x0XHRzdGF0dXMgPSBjdHgtXHUwMDNlc3RhdHVzX2NvZGU7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGVyciAhPSAtRUlOUFJPR1JFU1MpIHtcbiYjNDM7XHRcdFx0LyogaGFuZGxlX3Jlc3AoKSBkZWxpdmVyZWQgYSB2YWxpZCByZXNwb25zZSBqdXN0IGFmdGVyXG4mIzQzO1x0XHRcdCAqIHRoZSB0aW1lb3V0IGZpcmVkLiAgVGhlIGhhcmR3YXJlIGlzIGFsaXZlLCBzbyB1c2VcbiYjNDM7XHRcdFx0ICogdGhlIHJlc3BvbnNlIGFuZCBsZWF2ZSB0aGUgY2hhbm5lbCB1c2FibGU7IGRvIG5vdFxuJiM0MztcdFx0XHQgKiBsYXRjaCBod2NfdGltZWRfb3V0IG9yIGRlZ3JhZGUgaHdjX3RpbWVvdXQgZm9yIHdoYXRcbiYjNDM7XHRcdFx0ICogdHVybmVkIG91dCB0byBiZSBhIHRyYW5zaWVudCByYWNlLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuJiM0MztcdFx0XHRnb3RvIGNoZWNrX3N0YXR1cztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBHZW51aW5lIHRpbWVvdXQ6IG5vIHJlc3BvbnNlIGFycml2ZWQuICBSZWR1Y2UgZnVydGhlclxuJiM0MztcdFx0ICogd2FpdGluZywgYW5kIG1hcmsgdGhlIGNoYW5uZWwgdGltZWQgb3V0IHVuZGVyIHRoZSBiaXRtYXBcbiYjNDM7XHRcdCAqIGxvY2sgc28gZ2V0X21zZ19pbmRleCgpIGNhbm5vdCBhY3F1aXJlIG5ldyBzbG90cyBhZnRlciB0aGlzLlxuJiM0MztcdFx0ICovXG4gXHRcdGlmIChod2MtXHUwMDNlaHdjX3RpbWVvdXQgXHUwMDNlIDEpXG4gXHRcdFx0aHdjLVx1MDAzZWh3Y190aW1lb3V0ID0gMTtcbiBcbiYjNDM7XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdGh3Yy1cdTAwM2Vod2NfdGltZWRfb3V0ID0gdHJ1ZTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0d2FrZV91cF9hbGwoXHUwMDI2aHdjLVx1MDAzZW1zZ193YWl0cSk7XG4mIzQzO1xuIFx0XHRlcnIgPSAtRVRJTUVET1VUO1xuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdGh3Y19jdHhfcHV0KGh3YywgY3R4KTtcbiYjNDM7XHRcdGdvdG8gZG9uZTtcbiBcdH1cbiBcbi1cdGlmIChjdHgtXHUwMDNlZXJyb3IpIHtcbi1cdFx0ZXJyID0gY3R4LVx1MDAzZWVycm9yO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbiYjNDM7XHQvKiBOVUxMIG91dHB1dF9idWYgc28gYSBsYXRlIGhhbmRsZV9yZXNwKCkgd29uJiMzOTt0IG1lbWNweSBpbnRvXG4mIzQzO1x0ICogdGhlIGNhbGxlciYjMzk7cyBidWZmZXIgYWZ0ZXIgdGhlIHNlbmRlciBleGl0cy4gIFJlYWQgZXJyb3IgYW5kXG4mIzQzO1x0ICogc3RhdHVzX2NvZGUgdW5kZXIgdGhlIHNhbWUgbG9jayDigJQgYWZ0ZXIgaHdjX2N0eF9wdXQgdGhlIHNsb3RcbiYjNDM7XHQgKiBtYXkgYmUgcmV1c2VkIGFuZCB0aGVzZSBmaWVsZHMgb3ZlcndyaXR0ZW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Y3R4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRjdHgtXHUwMDNlb3V0cHV0X2J1ZiA9IE5VTEw7XG4mIzQzO1x0ZXJyID0gY3R4LVx1MDAzZWVycm9yO1xuJiM0MztcdHN0YXR1cyA9IGN0eC1cdTAwM2VzdGF0dXNfY29kZTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuJiM0MztcbiYjNDM7Y2hlY2tfc3RhdHVzOlxuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGRvbmU7XG4gXG4tXHRpZiAoY3R4LVx1MDAzZXN0YXR1c19jb2RlIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlc3RhdHVzX2NvZGUgIT0gR0RNQV9TVEFUVVNfTU9SRV9FTlRSSUVTKSB7XG4tXHRcdGlmIChjdHgtXHUwMDNlc3RhdHVzX2NvZGUgPT0gR0RNQV9TVEFUVVNfQ01EX1VOU1VQUE9SVEVEKSB7XG4mIzQzO1x0aWYgKHN0YXR1cyBcdTAwMjZcdTAwMjYgc3RhdHVzICE9IEdETUFfU1RBVFVTX01PUkVfRU5UUklFUykge1xuJiM0MztcdFx0aWYgKHN0YXR1cyA9PSBHRE1BX1NUQVRVU19DTURfVU5TVVBQT1JURUQpIHtcbiBcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbi1cdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdFx0Z290byBkb25lO1xuIFx0XHR9XG4mIzQzO1xuIFx0XHRpZiAoY29tbWFuZCAhPSBNQU5BX1FVRVJZX1BIWV9TVEFUKVxuIFx0XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7Q29tbWFuZCAweCV4IGZhaWxlZCB3aXRoIHN0YXR1czogMHgleFxcblwmIzM0Oyxcbi1cdFx0XHRcdGNvbW1hbmQsIGN0eC1cdTAwM2VzdGF0dXNfY29kZSk7XG4mIzQzO1x0XHRcdFx0Y29tbWFuZCwgc3RhdHVzKTtcbiBcdFx0ZXJyID0gLUVQUk9UTztcbi1cdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRnb3RvIGRvbmU7XG4gXHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IDA7XG4mIzQzO1x0Z290byBkb25lO1xuIG91dDpcbi1cdG1hbmFfaHdjX3B1dF9tc2dfaW5kZXgoaHdjLCBtc2dfaWQpO1xuJiM0MztcdC8qIFByZS1wb3N0IGVycm9yIHBhdGhzOiBubyBXUUUgd2FzIHN1Ym1pdHRlZCBzbyBoYW5kbGVfcmVzcCgpXG4mIzQzO1x0ICogY2Fubm90IHJhY2UgaGVyZS4gIHJlZmNvdW50IGlzIDEgKG5vIHNlY29uZCByZWYgdGFrZW4pLlxuJiM0MztcdCAqL1xuJiM0MztcdGN0eCA9IGh3Yy1cdTAwM2VjYWxsZXJfY3R4ICYjNDM7IG1zZ19pZDtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdGN0eC1cdTAwM2VvdXRwdXRfYnVmID0gTlVMTDtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuJiM0Mztkb25lOlxuIFx0cmV0dXJuIGVycjtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXG5pbmRleCBhOGMzMjliZGJhY2Y4My4uNTUwODc0NjU5MGU3Y2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xuQEAgLTI2NDgsNiAmIzQzOzI2NDgsNyBAQCBzdGF0aWMgaW50IG1hbmFfY3JlYXRlX3R4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbiBcdHN0cnVjdCBtYW5hX29ial9zcGVjIGNxX3NwZWM7XG4gXHRzdHJ1Y3QgZ2RtYV9xdWV1ZV9zcGVjIHNwZWM7XG4gXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYztcbiYjNDM7XHRzdHJ1Y3QgZ2RtYV9xdWV1ZSBfX3JjdSAqKmNxX3RhYmxlO1xuIFx0c3RydWN0IG1hbmFfdHhxICp0eHE7XG4gXHRzdHJ1Y3QgbWFuYV9jcSAqY3E7XG4gXHR1MzIgdHhxX3NpemU7XG5AQCAtMjc1MywxMiAmIzQzOzI3NTQsMTggQEAgc3RhdGljIGludCBtYW5hX2NyZWF0ZV90eHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4gXG4gXHRcdGNxLVx1MDAzZWdkbWFfaWQgPSBjcS1cdTAwM2VnZG1hX2NxLVx1MDAzZWlkO1xuIFxuLVx0XHRpZiAoV0FSTl9PTihjcS1cdTAwM2VnZG1hX2lkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMpKSB7XG4mIzQzO1x0XHQvKiBObyByY3VfcmVhZF9sb2NrKCk6IG1hbmFfY3JlYXRlX3R4cSBydW5zIHVuZGVyIFJUTkwgZHVyaW5nXG4mIzQzO1x0XHQgKiBuZXRkZXYgYnJpbmctdXAsIGluc2lkZSB0aGUgbmV0ZGV2IGxpZmV0aW1lIHRoYXRcbiYjNDM7XHRcdCAqIG1hbmFfcmVtb3ZlKCkgZHJhaW5zIGJlZm9yZSB0aGUgYmFzZSBjcV90YWJsZSBjYW4gYmUgZnJlZWQuXG4mIzQzO1x0XHQgKiBTZWUgZ2RtYV9jb250ZXh0OjpjcV90YWJsZSBpbiBnZG1hLmggZm9yIHdoeSBcJiMzNDt0cnVlXCYjMzQ7IGlzIHNvdW5kLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRjcV90YWJsZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2MtXHUwMDNlY3FfdGFibGUsIHRydWUpO1xuJiM0MztcdFx0aWYgKFdBUk5fT04oIWNxX3RhYmxlIHx8IGNxLVx1MDAzZWdkbWFfaWQgXHUwMDNlPSBnYy1cdTAwM2VtYXhfbnVtX2NxcykpIHtcbiBcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG4tXHRcdGdjLVx1MDAzZWNxX3RhYmxlW2NxLVx1MDAzZWdkbWFfaWRdID0gY3EtXHUwMDNlZ2RtYV9jcTtcbiYjNDM7XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihjcV90YWJsZVtjcS1cdTAwM2VnZG1hX2lkXSwgY3EtXHUwMDNlZ2RtYV9jcSk7XG4gXG4gXHRcdG1hbmFfY3JlYXRlX3R4cV9kZWJ1Z2ZzKGFwYywgaSk7XG4gXG5AQCAtMjk4Niw2ICYjNDM7Mjk5Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWFuYV9yeHEgKm1hbmFfY3JlYXRlX3J4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlX3NwZWMgc3BlYztcbiBcdHN0cnVjdCBtYW5hX2NxICpjcSA9IE5VTEw7XG4gXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYztcbiYjNDM7XHRzdHJ1Y3QgZ2RtYV9xdWV1ZSBfX3JjdSAqKmNxX3RhYmxlO1xuIFx0dTMyIGNxX3NpemUsIHJxX3NpemU7XG4gXHRzdHJ1Y3QgbWFuYV9yeHEgKnJ4cTtcbiBcdGludCBlcnI7XG5AQCAtMzA3NSwxMiAmIzQzOzMwODMsMTggQEAgc3RhdGljIHN0cnVjdCBtYW5hX3J4cSAqbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoV0FSTl9PTihjcS1cdTAwM2VnZG1hX2lkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMpKSB7XG4mIzQzO1x0LyogTm8gcmN1X3JlYWRfbG9jaygpOiBtYW5hX2NyZWF0ZV9yeHEgcnVucyB1bmRlciBSVE5MIGR1cmluZyBuZXRkZXZcbiYjNDM7XHQgKiBicmluZy11cCwgaW5zaWRlIHRoZSBuZXRkZXYgbGlmZXRpbWUgdGhhdCBtYW5hX3JlbW92ZSgpIGRyYWluc1xuJiM0MztcdCAqIGJlZm9yZSB0aGUgYmFzZSBjcV90YWJsZSBjYW4gYmUgZnJlZWQuICBTZWUgZ2RtYV9jb250ZXh0OjpjcV90YWJsZVxuJiM0MztcdCAqIGluIGdkbWEuaCBmb3Igd2h5IFwmIzM0O3RydWVcJiMzNDsgaXMgc291bmQuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3FfdGFibGUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGdjLVx1MDAzZWNxX3RhYmxlLCB0cnVlKTtcbiYjNDM7XHRpZiAoV0FSTl9PTighY3FfdGFibGUgfHwgY3EtXHUwMDNlZ2RtYV9pZCBcdTAwM2U9IGdjLVx1MDAzZW1heF9udW1fY3FzKSkge1xuIFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGdjLVx1MDAzZWNxX3RhYmxlW2NxLVx1MDAzZWdkbWFfaWRdID0gY3EtXHUwMDNlZ2RtYV9jcTtcbiYjNDM7XHRyY3VfYXNzaWduX3BvaW50ZXIoY3FfdGFibGVbY3EtXHUwMDNlZ2RtYV9pZF0sIGNxLVx1MDAzZWdkbWFfY3EpO1xuIFxuIFx0bmV0aWZfbmFwaV9hZGRfd2VpZ2h0X2xvY2tlZChuZGV2LCBcdTAwMjZjcS1cdTAwM2VuYXBpLCBtYW5hX3BvbGwsIDEpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oIGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcbmluZGV4IDg1MjljZWYwZDdjNDUyLi5hNGVhYzZmN2MzNjYwOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuQEAgLTQyOCw5ICYjNDM7NDI4LDM0IEBAIHN0cnVjdCBnZG1hX2NvbnRleHQge1xuIFx0LyogTDIgTVRVICovXG4gXHR1MTYgYWRhcHRlcl9tdHU7XG4gXG4tXHQvKiBUaGlzIG1hcHMgYSBDUSBpbmRleCB0byB0aGUgcXVldWUgc3RydWN0dXJlLiAqL1xuJiM0MztcdC8qIFNpemUgb2YgY3FfdGFibGUsIGkuZS4gdGhlIGxhcmdlc3QgdmFsaWQgQ1EgaW5kZXggJiM0MzsgMS4gIFNldCBvbmNlXG4mIzQzO1x0ICogd2hlbiBjcV90YWJsZSBpcyBhbGxvY2F0ZWQgYW5kIHRyZWF0ZWQgYXMgaW1tdXRhYmxlIGZvciB0aGVcbiYjNDM7XHQgKiB0YWJsZSYjMzk7cyBsaWZldGltZSAoYSBib3VuZCBvbmx5KSAtLSBpdCBpcyBuZXZlciByZXNldCBvbiB0ZWFyZG93bi5cbiYjNDM7XHQgKiBjcV90YWJsZSA9PSBOVUxMIGlzIHRoZSBzb2xlIFwmIzM0O3RhYmxlIHRvcm4gZG93blwmIzM0OyBzaWduYWwsIHNvIGV2ZXJ5XG4mIzQzO1x0ICogY3FfdGFibGVbaWRdIGFjY2VzcyBtdXN0IGd1YXJkIHdpdGggYm90aCAhY3FfdGFibGUgKGdvbmUpIGFuZFxuJiM0MztcdCAqIGlkIFx1MDAzZT0gbWF4X251bV9jcXMgKG91dCBvZiBib3VuZHMpLlxuJiM0MztcdCAqL1xuIFx0dW5zaWduZWQgaW50XHRcdG1heF9udW1fY3FzO1xuLVx0c3RydWN0IGdkbWFfcXVldWVcdCoqY3FfdGFibGU7XG4mIzQzO1x0LyogQm90aCB0aGUgYmFzZSBwb2ludGVyIGFuZCBlYWNoIGVudHJ5IGFyZSBSQ1UtbWFuYWdlZC4gIFRoZSBmYXN0XG4mIzQzO1x0ICogcGF0aCAobWFuYV9nZF9wcm9jZXNzX2VxZSkgcmVhZHMgdGhlIGJhc2UgdmlhIHJjdV9kZXJlZmVyZW5jZSgpXG4mIzQzO1x0ICogdW5kZXIgcmN1X3JlYWRfbG9jaygpLCBzbyB0aGUgdGFibGUgaXMgZnJlZWQgd2l0aFxuJiM0MztcdCAqIHJjdV9hc3NpZ25fcG9pbnRlcihOVUxMKSAmIzQzOyBzeW5jaHJvbml6ZV9yY3UoKSBhbmQgYW4gaW4tZmxpZ2h0XG4mIzQzO1x0ICogcmVhZGVyIGNhbiBuZXZlciBvYnNlcnZlIGZyZWVkIG1lbW9yeS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZSBzbG93IHBhdGhzIC0tIG1hbmFfZ2RfZGVzdHJveV9jcSgpIGFuZCB0aGUgQ1EgaW5zdGFsbC9yZW1vdmVcbiYjNDM7XHQgKiBjYWxsZXJzIChtYW5hX2NyZWF0ZV90eHEvX3J4cSwgbWFuYV9pYl9pbnN0YWxsL3JlbW92ZV9jcV9jYikgLS1cbiYjNDM7XHQgKiBpbnN0ZWFkIHJlYWQgdGhlIGJhc2Ugd2l0aCByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGNxX3RhYmxlLFxuJiM0MztcdCAqIHRydWUpLiAgVGhlIGJhcmUgXCYjMzQ7dHJ1ZVwmIzM0OyBpcyBqdXN0aWZpZWQgYnkgdGVhcmRvd24gb3JkZXJpbmcsIG5vdCBieVxuJiM0MztcdCAqIGEgbG9jazogdGhlIGJhc2UgdGFibGUgaXMgcmVwbGFjZWQmIzQzO2ZyZWVkIG9ubHkgYnlcbiYjNDM7XHQgKiBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoKSAoYW5kIHRoZSBjcmVhdGUtdGltZSByZWluaXQpLCBhbmQgZXZlcnlcbiYjNDM7XHQgKiB0ZWFyZG93biBwYXRoIGZpcnN0IHJ1bnMgbWFuYV9yZW1vdmUoKSAmIzQzOyBtYW5hX3JkbWFfcmVtb3ZlKCksIHdoaWNoXG4mIzQzO1x0ICogc3luY2hyb25vdXNseSBkcmFpbiB0aGUgbmV0ZGV2IGFuZCB0aGUgSUIgZGV2aWNlXG4mIzQzO1x0ICogKHVucmVnaXN0ZXJfbmV0ZGV2aWNlIC8gaWJfdW5yZWdpc3Rlcl9kZXZpY2UpIHRoYXQgYm91bmQgYWxsXG4mIzQzO1x0ICogaW5zdGFsbC9yZW1vdmUgY2FsbGVyczsgdGhlIHJlaW5pdCBjYXNlIHJ1bnMgYmVmb3JlIGVpdGhlclxuJiM0MztcdCAqIGNvbnN1bWVyIGlzIHByb2JlZC4gIFNvIG5vIHNsb3ctcGF0aCBjYWxsZXIgY2FuIHJ1biB3aGlsZSB0aGUgYmFzZVxuJiM0MztcdCAqIHRhYmxlIGlzIGJlaW5nIGZyZWVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHN0cnVjdCBnZG1hX3F1ZXVlXHRfX3JjdSAqIF9fcmN1ICpjcV90YWJsZTtcbiBcbiBcdC8qIFByb3RlY3QgZXFfdGVzdF9ldmVudCBhbmQgdGVzdF9ldmVudF9lcV9pZCAgKi9cbiBcdHN0cnVjdCBtdXRleFx0XHRlcV90ZXN0X2V2ZW50X211dGV4O1xuQEAgLTQ1Niw2ICYjNDM7NDgxLDIxIEBAIHN0cnVjdCBnZG1hX2NvbnRleHQge1xuIFx0LyogSGFyZHdhcmUgY29tbXVuaWNhdGlvbiBjaGFubmVsIChIV0MpICovXG4gXHRzdHJ1Y3QgZ2RtYV9kZXZcdFx0aHdjO1xuIFxuJiM0MztcdC8qIGRlc3Ryb3lfY2hhbm5lbCgpIHdhaXRzIGhlcmUgZm9yIGFsbCBIV0Mgc2VuZGVycyB0byBleGl0LlxuJiM0MztcdCAqIExpdmVzIG9uIGdjIChub3QgaHdjKSBzbyB3YWtlX3VwKCkgYWZ0ZXIgdGhlIGxhc3Qgc2VuZGVyJiMzOTtzXG4mIzQzO1x0ICogYXRvbWljX2RlYyBkb2VzbiYjMzk7dCBkZXJlZmVyZW5jZSBmcmVlZCBod2MgbWVtb3J5LlxuJiM0MztcdCAqL1xuJiM0MztcdHdhaXRfcXVldWVfaGVhZF90XHRod2NfZHJhaW5fd2FpdHE7XG4mIzQzO1xuJiM0MztcdC8qIFNlcmlhbGl6ZXMgaHdjLmRyaXZlcl9kYXRhICh0aGUgaHdfY2hhbm5lbF9jb250ZXh0IHBvaW50ZXIpXG4mIzQzO1x0ICogYmV0d2VlbiB0aGUgY29udHJvbC1wbGFuZSByZWFkZXJzIGluIG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCksXG4mIzQzO1x0ICogbWFuYV9uZWVkX2xvZygpIGFuZCBtYW5hX3NlcnZfcmVzZXQoKSBhbmQgdGhlIHB1Ymxpc2gvY2xlYXIgaW5cbiYjNDM7XHQgKiBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbCgpL21hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbCgpLiAgQWxsIHVzZXJzXG4mIzQzO1x0ICogYXJlIGNvbnRyb2wtcGxhbmUgKEhXQyBjb21tYW5kcyBzbGVlcDsgcmVzZXQgcnVucyBvbiBhIHdvcmtxdWV1ZSksXG4mIzQzO1x0ICogc28gYSBwbGFpbiBzcGlubG9jayAtLSBub3QgUkNVIC0tIGlzIHN1ZmZpY2llbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3BpbmxvY2tfdFx0XHRod2NfbG9jaztcbiYjNDM7XG4gXHQvKiBBenVyZSBuZXR3b3JrIGFkYXB0ZXIgKi9cbiBcdHN0cnVjdCBnZG1hX2Rldlx0XHRtYW5hO1xuIFxuQEAgLTY2OCw2ICYjNDM7NzA4LDkgQEAgZW51bSB7XG4gLyogRHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgaW50ZXJydXB0IG1vZGVyYXRpb24gLSBESU0gKi9cbiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0lOVEVSUlVQVF9NT0RFUkFUSU9OIEJJVCgyOClcbiBcbiYjNDM7LyogRHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgcXVldWUgZGVwdGggZm9yIEhXQyAqL1xuJiM0MzsjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0hXQ19RVUVVRV9ERVBUSCBCSVQoMjkpXG4mIzQzO1xuICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdTMSBcXFxuIFx0KEdETUFfRFJWX0NBUF9GTEFHXzFfRVFfU0hBUklOR19NVUxUSV9WUE9SVCB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9OQVBJX1dLRE9ORV9GSVggfCBcXFxuQEAgLTY4Myw2ICYjNDM7NzI2LDcgQEAgZW51bSB7XG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9QUk9CRV9SRUNPVkVSWSB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9IQU5ETEVfU1RBTExfU1FfUkVDT1ZFUlkgfCBcXFxuIFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfSFdDX1RJTUVPVVRfUkVDT1ZFUlkgfCBcXFxuJiM0MztcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0RZTl9IV0NfUVVFVUVfREVQVEggfCBcXFxuIFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfRVFfTVNJX1VOU0hBUkVfTVVMVElfVlBPUlQgfCBcXFxuIFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0lOVEVSUlVQVF9NT0RFUkFUSU9OKVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvaHdfY2hhbm5lbC5oIGIvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmhcbmluZGV4IDE2ZmViMzk2MTZjMWJlLi5lZWM1ZDNhYTIzZTFkNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21hbmEvaHdfY2hhbm5lbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYW5hL2h3X2NoYW5uZWwuaFxuQEAgLTE2NCw2ICYjNDM7MTY0LDkgQEAgc3RydWN0IGh3Y193cSB7XG4gXHR1MTYgcXVldWVfZGVwdGg7XG4gXG4gXHRzdHJ1Y3QgaHdjX2NxICpod2NfY3E7XG4mIzQzO1xuJiM0MztcdC8qIFNlcmlhbGl6ZXMgY29uY3VycmVudCBtYW5hX2dkX3Bvc3RfYW5kX3JpbmcoKSBjYWxscy4gKi9cbiYjNDM7XHRzcGlubG9ja190IGxvY2s7XG4gfTtcbiBcbiBzdHJ1Y3QgaHdjX2NhbGxlcl9jdHgge1xuQEAgLTE3Myw2ICYjNDM7MTc2LDE3IEBAIHN0cnVjdCBod2NfY2FsbGVyX2N0eCB7XG4gXG4gXHR1MzIgZXJyb3I7IC8qIExpbnV4IGVycm9yIGNvZGUgKi9cbiBcdHUzMiBzdGF0dXNfY29kZTtcbiYjNDM7XG4mIzQzO1x0LyogUHJvdGVjdHMgb3V0cHV0X2J1ZiBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzIGZyb21cbiYjNDM7XHQgKiBoYW5kbGVfcmVzcCgpIChDUSBpbnRlcnJ1cHQpIGFuZCB0aGUgc2VuZGVyIHRpbWVvdXQgcGF0aC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGlubG9ja190IGxvY2s7XG4mIzQzO1xuJiM0MztcdC8qIFRyYWNrcyBzZW5kZXIgJiM0MzsgaGFuZGxlX3Jlc3Agb3duZXJzaGlwLiAgVGhlIGxhc3QgcHV0XG4mIzQzO1x0ICogKHJlZmNvdW50IHJlYWNoZXMgMCkgcmVsZWFzZXMgdGhlIGJpdG1hcCBzbG90LlxuJiM0MztcdCAqL1xuJiM0MztcdHJlZmNvdW50X3QgcmVmY250O1xuJiM0MztcdHUxNiBtc2dfaWQ7XG4gfTtcbiBcbiBzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0IHtcbkBAIC0xODEsOCAmIzQzOzE5NSw5IEBAIHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQge1xuIFxuIFx0dTE2IG51bV9pbmZsaWdodF9tc2c7XG4gXHR1MzIgbWF4X3JlcV9tc2dfc2l6ZTtcbiYjNDM7XHR1MzIgbWF4X3Jlc3BfbXNnX3NpemU7XG4gXG4tXHR1MTYgaHdjX2luaXRfcV9kZXB0aF9tYXg7XG4mIzQzO1x0dTMyIGh3Y19pbml0X3FfZGVwdGhfbWF4O1xuIFx0dTMyIGh3Y19pbml0X21heF9yZXFfbXNnX3NpemU7XG4gXHR1MzIgaHdjX2luaXRfbWF4X3Jlc3BfbXNnX3NpemU7XG4gXG5AQCAtMTkyLDEzICYjNDM7MjA3LDM4IEBAIHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQge1xuIFx0c3RydWN0IGh3Y193cSAqdHhxO1xuIFx0c3RydWN0IGh3Y19jcSAqY3E7XG4gXG4tXHRzdHJ1Y3Qgc2VtYXBob3JlIHNlbWE7XG4gXHRzdHJ1Y3QgZ2RtYV9yZXNvdXJjZSBpbmZsaWdodF9tc2dfcmVzO1xuJiM0MztcdC8qIFdhaXRxdWV1ZSBmb3Igc2VuZGVycyBibG9ja2VkIG9uIGEgZnVsbCBpbmZsaWdodCBiaXRtYXAuICovXG4mIzQzO1x0d2FpdF9xdWV1ZV9oZWFkX3QgbXNnX3dhaXRxO1xuIFxuIFx0dTMyIHBmX2Rlc3RfdnJxX2lkO1xuIFx0dTMyIHBmX2Rlc3RfdnJjcV9pZDtcbiBcdHUzMiBod2NfdGltZW91dDtcbiBcbiYjNDM7XHQvKiBTZXQgYWZ0ZXIgY2hhbm5lbCBpcyBmdWxseSBlc3RhYmxpc2hlZDsgY2xlYXJlZCBvbiB0ZWFyZG93biB0b1xuJiM0MztcdCAqIGFib3J0IHdhaXRlcnMgaW4gbWFuYV9od2NfZ2V0X21zZ19pbmRleCgpIGFuZCByZWplY3QgbmV3IHNlbmRzLlxuJiM0MztcdCAqL1xuJiM0MztcdGJvb2wgY2hhbm5lbF91cDtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IG9uIGZpcnN0IEhXQyB0aW1lb3V0LiAgQ2F1c2VzIGdldF9tc2dfaW5kZXgoKSB0byByZXR1cm5cbiYjNDM7XHQgKiAtRVRJTUVET1VUIGluc3RlYWQgb2Ygd2FpdGluZywgZHJhaW5pbmcgYWxsIHF1ZXVlZCBzZW5kZXJzLlxuJiM0MztcdCAqL1xuJiM0MztcdGJvb2wgaHdjX3RpbWVkX291dDtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IGFmdGVyIG1hbmFfc21jX3NldHVwX2h3YygpIHN1Y2NlZWRzIChoYXJkd2FyZSBoYXMgYWN0aXZlXG4mIzQzO1x0ICogTVNUIGVudHJpZXMpLiAgT24gcmVjb3ZlcmFibGUgcGF0aHMgKGVzdGFibGlzaF9jaGFubmVsKVxuJiM0MztcdCAqIGNsZWFyZWQgb25seSBhZnRlciBzdWNjZXNzZnVsIHRlYXJkb3duIHNvIGEgcmV0cnkgcmVtYWluc1xuJiM0MztcdCAqIHBvc3NpYmxlLiAgT24gdGhlIHRlcm1pbmFsIGRlc3Ryb3lfY2hhbm5lbCBwYXRoLCBjbGVhcmVkXG4mIzQzO1x0ICogdW5jb25kaXRpb25hbGx5IHNpbmNlIGh3YyBpcyBhYm91dCB0byBiZSBmcmVlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRib29sIHNldHVwX2FjdGl2ZTtcbiYjNDM7XG4mIzQzO1x0LyogQ291bnQgb2YgaW4tZmxpZ2h0IG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCkgY2FsbGVycy4gIFByb3RlY3RlZFxuJiM0MztcdCAqIGJ5IGdjLVx1MDAzZWh3Y19sb2NrOyB0aGUgbGFzdCBzZW5kZXIgdG8gZHJvcCBpdCB0byB6ZXJvIHdha2VzXG4mIzQzO1x0ICogZ2MtXHUwMDNlaHdjX2RyYWluX3dhaXRxIGZvciB0aGUgbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKCkgZHJhaW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0dW5zaWduZWQgaW50IGFjdGl2ZV9zZW5kZXJzO1xuJiM0MztcbiBcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY2FsbGVyX2N0eDtcbiB9O1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE3OjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNSUNST1NPRlRfTUFOQSYjMzQ7LAogICAgJiMzNDtNQU5BX0lORklOSUJBTkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYW5hX2liX2luc3RhbGxfY3FfY2ImIzM0OywKICAgICYjMzQ7bWFuYV9pYl9yZW1vdmVfY3FfY2ImIzM0OywKICAgICYjMzQ7bWFuYV9od2NfZ2V0X21zZ19pbmRleCYjMzQ7LAogICAgJiMzNDttYW5hX2h3Y19oYW5kbGVfcmVzcCYjMzQ7LAogICAgJiMzNDttYW5hX2h3Y19yeF9ldmVudF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O21hbmFfaHdjX2NyZWF0ZV9jaGFubmVsJiMzNDssCiAgICAmIzM0O21hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbCYjMzQ7LAogICAgJiMzNDttYW5hX2h3Y19zZW5kX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bWFuYV9nZF9wcm9jZXNzX2VxZSYjMzQ7LAogICAgJiMzNDttYW5hX2dkX2Rlc3Ryb3lfY3EmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIsIGluY2x1ZGluZyBhZGRpbmcgUkNVIHByb3RlY3Rpb24gZm9yIHRoZSBDUSB0YWJsZSwgaGFuZGxpbmcgSFdDIHRpbWVvdXRzLCBhbmQgYWRkaW5nIHJlZmNvdW50cyBmb3IgY2FsbGVyIGNvbnRleHRzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBsb2dpYyBvZiB0aGUgZHJpdmVyIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YTdmNjczYzVhNDkwMDU0MDVkNTVmYzI1NDBmMjQyZDNiODljZDk2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjIgMTc6NTI6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9jcS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvY3EuYwppbmRleCBmMjU0Nzk4OWY0MjI5MC4uMmJmNGJlMjFjZWRlNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL2NxLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvY3EuYwpAQCAtMTMxLDEyICYjNDM7MTMxLDIwIEBAIHN0YXRpYyB2b2lkIG1hbmFfaWJfY3FfaGFuZGxlcih2b2lkICpjdHgsIHN0cnVjdCBnZG1hX3F1ZXVlICpnZG1hX2NxKQogaW50IG1hbmFfaWJfaW5zdGFsbF9jcV9jYihzdHJ1Y3QgbWFuYV9pYl9kZXYgKm1kZXYsIHN0cnVjdCBtYW5hX2liX2NxICpjcSkKIHsKIAlzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IG1kZXZfdG9fZ2MobWRldik7CiYjNDM7CXN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqY3FfdGFibGU7CiAJc3RydWN0IGdkbWFfcXVldWUgKmdkbWFfY3E7CiAKLQlpZiAoY3EtJmd0O3F1ZXVlLmlkICZndDs9IGdjLSZndDttYXhfbnVtX2NxcykKJiM0MzsJLyogTm8gcmN1X3JlYWRfbG9jaygpOiBpbnN0YWxsL3JlbW92ZSBydW4gd2l0aGluIHRoZSBJQiBkZXZpY2UKJiM0MzsJICogbGlmZXRpbWUsIHdoaWNoIG1hbmFfcmRtYV9yZW1vdmUoKSAoaWJfdW5yZWdpc3Rlcl9kZXZpY2UpIGRyYWlucwomIzQzOwkgKiBiZWZvcmUgdGhlIGJhc2UgY3FfdGFibGUgY2FuIGJlIGZyZWVkLiAgU2VlIGdkbWFfY29udGV4dDo6Y3FfdGFibGUKJiM0MzsJICogaW4gZ2RtYS5oIGZvciB3aHkgJiMzNDt0cnVlJiMzNDsgaXMgc291bmQuCiYjNDM7CSAqLwomIzQzOwljcV90YWJsZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2MtJmd0O2NxX3RhYmxlLCB0cnVlKTsKJiM0MzsJaWYgKCFjcV90YWJsZSB8fCBjcS0mZ3Q7cXVldWUuaWQgJmd0Oz0gZ2MtJmd0O21heF9udW1fY3FzKQogCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAkvKiBDcmVhdGUgQ1EgdGFibGUgZW50cnksIHNoYXJpbmcgYSBDUSBiZXR3ZWVuIFdRcyBpcyBub3Qgc3VwcG9ydGVkICovCi0JaWYgKGdjLSZndDtjcV90YWJsZVtjcS0mZ3Q7cXVldWUuaWRdKQomIzQzOwlpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNxX3RhYmxlW2NxLSZndDtxdWV1ZS5pZF0pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoY3EtJmd0O3F1ZXVlLmttZW0pCiAJCWdkbWFfY3EgPSBjcS0mZ3Q7cXVldWUua21lbTsKQEAgLTE0OSwyMyAmIzQzOzE1Nyw0OSBAQCBpbnQgbWFuYV9pYl9pbnN0YWxsX2NxX2NiKHN0cnVjdCBtYW5hX2liX2RldiAqbWRldiwgc3RydWN0IG1hbmFfaWJfY3EgKmNxKQogCWdkbWFfY3EtJmd0O3R5cGUgPSBHRE1BX0NROwogCWdkbWFfY3EtJmd0O2NxLmNhbGxiYWNrID0gbWFuYV9pYl9jcV9oYW5kbGVyOwogCWdkbWFfY3EtJmd0O2lkID0gY3EtJmd0O3F1ZXVlLmlkOwotCWdjLSZndDtjcV90YWJsZVtjcS0mZ3Q7cXVldWUuaWRdID0gZ2RtYV9jcTsKJiM0MzsJcmN1X2Fzc2lnbl9wb2ludGVyKGNxX3RhYmxlW2NxLSZndDtxdWV1ZS5pZF0sIGdkbWFfY3EpOwogCXJldHVybiAwOwogfQogCiB2b2lkIG1hbmFfaWJfcmVtb3ZlX2NxX2NiKHN0cnVjdCBtYW5hX2liX2RldiAqbWRldiwgc3RydWN0IG1hbmFfaWJfY3EgKmNxKQogewogCXN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gbWRldl90b19nYyhtZGV2KTsKJiM0MzsJc3RydWN0IGdkbWFfcXVldWUgX19yY3UgKipjcV90YWJsZTsKJiM0MzsJc3RydWN0IGdkbWFfcXVldWUgKmdkbWFfY3E7CiAKLQlpZiAoY3EtJmd0O3F1ZXVlLmlkICZndDs9IGdjLSZndDttYXhfbnVtX2NxcyB8fCBjcS0mZ3Q7cXVldWUuaWQgPT0gSU5WQUxJRF9RVUVVRV9JRCkKJiM0MzsJaWYgKGNxLSZndDtxdWV1ZS5pZCA9PSBJTlZBTElEX1FVRVVFX0lEKQogCQlyZXR1cm47CiAKIAlpZiAoY3EtJmd0O3F1ZXVlLmttZW0pCiAJLyogVGhlbiBpdCB3aWxsIGJlIGNsZWFuZWQgYW5kIHJlbW92ZWQgYnkgdGhlIG1hbmEgKi8KIAkJcmV0dXJuOwogCi0Ja2ZyZWUoZ2MtJmd0O2NxX3RhYmxlW2NxLSZndDtxdWV1ZS5pZF0pOwotCWdjLSZndDtjcV90YWJsZVtjcS0mZ3Q7cXVldWUuaWRdID0gTlVMTDsKJiM0MzsJLyogTm8gcmN1X3JlYWRfbG9jaygpOiBsaWtlIG1hbmFfaWJfaW5zdGFsbF9jcV9jYigpLCB0aGlzIHJ1bnMgd2l0aGluCiYjNDM7CSAqIHRoZSBJQiBkZXZpY2UgbGlmZXRpbWUgdGhhdCBtYW5hX3JkbWFfcmVtb3ZlKCkgZHJhaW5zIGJlZm9yZSB0aGUKJiM0MzsJICogYmFzZSBjcV90YWJsZSBjYW4gYmUgZnJlZWQuICBTZWUgZ2RtYV9jb250ZXh0OjpjcV90YWJsZSBpbiBnZG1hLmguCiYjNDM7CSAqLwomIzQzOwljcV90YWJsZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2MtJmd0O2NxX3RhYmxlLCB0cnVlKTsKJiM0MzsJaWYgKCFjcV90YWJsZSB8fCBjcS0mZ3Q7cXVldWUuaWQgJmd0Oz0gZ2MtJmd0O21heF9udW1fY3FzKQomIzQzOwkJcmV0dXJuOwomIzQzOwkvKiBSZW1vdmVycyBmb3IgYSBnaXZlbiBDUSBhcmUgc2VyaWFsaXplZCBieSB0aGUgSUIgY29yZSwgc28gdGhlIHNsb3QKJiM0MzsJICogaXMgcmVhZCBhbmQgY2xlYXJlZCB3aXRob3V0IHJjdV9yZWFkX2xvY2soKSBvciBhdG9taWNpdHk6IGEgQ1EgaXMKJiM0MzsJICogbmV2ZXIgdG9ybiBkb3duIHdoaWxlIGEgbGl2ZSBRUCByZWZlcmVuY2VzIGl0IChjcS0mZ3Q7dXNlY250KSwgbm9yCiYjNDM7CSAqIHdoaWxlIHRoZSBRUC1jcmVhdGUgdGhhdCBpbnN0YWxsZWQgdGhlIGVudHJ5IGlzIHN0aWxsIHJ1bm5pbmcgKHRoYXQKJiM0MzsJICogY3JlYXRlIGhvbGRzIGEgcmVmZXJlbmNlIG9uIHRoZSBDUSB1b2JqZWN0IGFjcm9zcyBpdHMgZXJyb3IgcGF0aCwKJiM0MzsJICogYmVmb3JlIHVzZWNudCBpcyB0YWtlbikuICBBbnkgZG91YmxlLXJlbW92ZSBpcyB0aGVyZWZvcmUgc2VxdWVudGlhbAomIzQzOwkgKiAtLSB0aGUgbGF0ZXIgY2FsbGVyIHNlZXMgdGhlIE5VTEwgc3RvcmVkIGJlbG93IGFuZCByZXR1cm5zLgomIzQzOwkgKi8KJiM0MzsJZ2RtYV9jcSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3FfdGFibGVbY3EtJmd0O3F1ZXVlLmlkXSwgdHJ1ZSk7CiYjNDM7CWlmICghZ2RtYV9jcSkKJiM0MzsJCXJldHVybjsgIC8qIGFscmVhZHkgcmVtb3ZlZCBieSBhIHByaW9yIHRlYXJkb3duIHBhdGggKi8KJiM0MzsKJiM0MzsJcmN1X2Fzc2lnbl9wb2ludGVyKGNxX3RhYmxlW2NxLSZndDtxdWV1ZS5pZF0sIE5VTEwpOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBpbi1mbGlnaHQgRVEgaGFuZGxlcnMgdGhhdCBtYXkgaGF2ZSBsb2FkZWQgdGhlIG9sZAomIzQzOwkgKiBwb2ludGVyIHZpYSByY3VfZGVyZWZlcmVuY2UoKSB0byBmaW5pc2ggYmVmb3JlIGZyZWVpbmcuCiYjNDM7CSAqLwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0MzsJa2ZyZWUoZ2RtYV9jcSk7CiB9CiAKIGludCBtYW5hX2liX2FybV9jcShzdHJ1Y3QgaWJfY3EgKmliY3EsIGVudW0gaWJfY3Ffbm90aWZ5X2ZsYWdzIGZsYWdzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYwppbmRleCBhMzhkNGJiNzQ2MjFmOS4uMTc3MTFlZTM3YzhiZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jCkBAIC0xNjEsNiAmIzQzOzE2MSw4IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9pbml0X3JlZ2lzdGVycyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKIGJvb2wgbWFuYV9uZWVkX2xvZyhzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgaW50IGVycikKIHsKIAlzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7CiYjNDM7CWJvb2wgbmVlZF9sb2cgPSB0cnVlOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGVyciAhPSAtRVRJTUVET1VUKQogCQlyZXR1cm4gdHJ1ZTsKQEAgLTE2OCwxMSAmIzQzOzE3MCwxMyBAQCBib29sIG1hbmFfbmVlZF9sb2coc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIGludCBlcnIpCiAJaWYgKCFnYykKIAkJcmV0dXJuIHRydWU7CiAKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtnYy0mZ3Q7aHdjX2xvY2ssIGZsYWdzKTsKIAlod2MgPSBnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhOwogCWlmIChod2MgJmFtcDsmYW1wOyBod2MtJmd0O2h3Y190aW1lb3V0ID09IDApCi0JCXJldHVybiBmYWxzZTsKJiM0MzsJCW5lZWRfbG9nID0gZmFsc2U7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtnYy0mZ3Q7aHdjX2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiB0cnVlOwomIzQzOwlyZXR1cm4gbmVlZF9sb2c7CiB9CiAKIHN0YXRpYyBpbnQgbWFuYV9nZF9xdWVyeV9tYXhfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpAQCAtMzY3LDkgJiM0MzszNzEsMjcgQEAgc3RhdGljIGludCBtYW5hX2dkX2RldGVjdF9kZXZpY2VzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogaW50IG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MzIgcmVxX2xlbiwgY29uc3Qgdm9pZCAqcmVxLAogCQkJIHUzMiByZXNwX2xlbiwgdm9pZCAqcmVzcCkKIHsKLQlzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MgPSBnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhOwomIzQzOwlzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Z2MtJmd0O2h3Y19sb2NrLCBmbGFncyk7CiYjNDM7CWh3YyA9IGdjLSZndDtod2MuZHJpdmVyX2RhdGE7CiYjNDM7CWlmICghaHdjKSB7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z2MtJmd0O2h3Y19sb2NrLCBmbGFncyk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwlod2MtJmd0O2FjdGl2ZV9zZW5kZXJzJiM0MzsmIzQzOzsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2djLSZndDtod2NfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwllcnIgPSBtYW5hX2h3Y19zZW5kX3JlcXVlc3QoaHdjLCByZXFfbGVuLCByZXEsIHJlc3BfbGVuLCByZXNwKTsKIAotCXJldHVybiBtYW5hX2h3Y19zZW5kX3JlcXVlc3QoaHdjLCByZXFfbGVuLCByZXEsIHJlc3BfbGVuLCByZXNwKTsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtnYy0mZ3Q7aHdjX2xvY2ssIGZsYWdzKTsKJiM0MzsJaWYgKC0taHdjLSZndDthY3RpdmVfc2VuZGVycyA9PSAwKQomIzQzOwkJd2FrZV91cCgmYW1wO2djLSZndDtod2NfZHJhaW5fd2FpdHEpOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z2MtJmd0O2h3Y19sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX05TKG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0LCAmIzM0O05FVF9NQU5BJiMzNDspOwogCkBAIC02MjIsNiAmIzQzOzY0NCw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAogCWlmICghZ2MpIHsKQEAgLTYzMSwxNCAmIzQzOzY1NCwxNyBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJCXJldHVybjsKIAl9CiAKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtnYy0mZ3Q7aHdjX2xvY2ssIGZsYWdzKTsKIAlod2MgPSBnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhOwogCWlmICghaHdjKSB7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z2MtJmd0O2h3Y19sb2NrLCBmbGFncyk7CiAJCWRldl9lcnIoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7TUFOQSBzZXJ2aWNlOiBubyBIV0NcbiYjMzQ7KTsKIAkJZ290byBvdXQ7CiAJfQogCiAJLyogSFdDIGlzIG5vdCByZXNwb25kaW5nIGluIHRoaXMgY2FzZSwgc28gZG9uJiMzOTt0IHdhaXQgKi8KIAlod2MtJmd0O2h3Y190aW1lb3V0ID0gMDsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2djLSZndDtod2NfbG9jaywgZmxhZ3MpOwogCiAJZGV2X2luZm8oJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7TUFOQSByZXNldCBjeWNsZSBzdGFydFxuJiMzNDspOwogCkBAIC03NjEsNiAmIzQzOzc4Nyw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2RfcHJvY2Vzc19lcWUoc3RydWN0IGdkbWFfcXVldWUgKmVxKQogCXVuaW9uIGdkbWFfZXFlX2luZm8gZXFlX2luZm87CiAJZW51bSBnZG1hX2VxZV90eXBlIHR5cGU7CiAJc3RydWN0IGdkbWFfZXZlbnQgZXZlbnQ7CiYjNDM7CXN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqY3FfdGFibGU7CiAJc3RydWN0IGdkbWFfcXVldWUgKmNxOwogCXN0cnVjdCBnZG1hX2VxZSAqZXFlOwogCXUzMiBjcV9pZDsKQEAgLTc3MiwxMCAmIzQzOzc5OSwxMSBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3Byb2Nlc3NfZXFlKHN0cnVjdCBnZG1hX3F1ZXVlICplcSkKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIEdETUFfRVFFX0NPTVBMRVRJT046CiAJCWNxX2lkID0gZXFlLSZndDtkZXRhaWxzWzBdICZhbXA7IDB4RkZGRkZGOwotCQlpZiAoV0FSTl9PTl9PTkNFKGNxX2lkICZndDs9IGdjLSZndDttYXhfbnVtX2NxcykpCiYjNDM7CQljcV90YWJsZSA9IHJjdV9kZXJlZmVyZW5jZShnYy0mZ3Q7Y3FfdGFibGUpOwomIzQzOwkJaWYgKFdBUk5fT05fT05DRShjcV9pZCAmZ3Q7PSBnYy0mZ3Q7bWF4X251bV9jcXMgfHwgIWNxX3RhYmxlKSkKIAkJCWJyZWFrOwogCi0JCWNxID0gZ2MtJmd0O2NxX3RhYmxlW2NxX2lkXTsKJiM0MzsJCWNxID0gcmN1X2RlcmVmZXJlbmNlKGNxX3RhYmxlW2NxX2lkXSk7CiAJCWlmIChXQVJOX09OX09OQ0UoIWNxIHx8IGNxLSZndDt0eXBlICE9IEdETUFfQ1EgfHwgY3EtJmd0O2lkICE9IGNxX2lkKSkKIAkJCWJyZWFrOwogCkBAIC0xMDgyLDE1ICYjNDM7MTExMCwyOCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX2NyZWF0ZV9jcShjb25zdCBzdHJ1Y3QgZ2RtYV9xdWV1ZV9zcGVjICpzcGVjLAogc3RhdGljIHZvaWQgbWFuYV9nZF9kZXN0cm95X2NxKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLAogCQkJICAgICAgIHN0cnVjdCBnZG1hX3F1ZXVlICpxdWV1ZSkKIHsKJiM0MzsJc3RydWN0IGdkbWFfcXVldWUgX19yY3UgKipjcV90YWJsZTsKIAl1MzIgaWQgPSBxdWV1ZS0mZ3Q7aWQ7CiAKLQlpZiAoaWQgJmd0Oz0gZ2MtJmd0O21heF9udW1fY3FzKQomIzQzOwkvKiBObyByY3VfcmVhZF9sb2NrKCkgaGVyZTogbWFuYV9nZF9kZXN0cm95X2NxKCkgcnVucyBvbmx5IG9uIHRoZQomIzQzOwkgKiBDUS1kZXN0cm95L3RlYXJkb3duIHBhdGgsIHdoZXJlIHRoZSBiYXNlIGNxX3RhYmxlIGlzIHN0YWJsZS4gIFNlZQomIzQzOwkgKiB0aGUgbGlmZWN5Y2xlIG5vdGUgb24gZ2RtYV9jb250ZXh0OjpjcV90YWJsZSBpbiBnZG1hLmggZm9yIHdoeSB0aGUKJiM0MzsJICogJiMzNDt0cnVlJiMzNDsgcHJlZGljYXRlIGlzIHNvdW5kLgomIzQzOwkgKi8KJiM0MzsJY3FfdGFibGUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGdjLSZndDtjcV90YWJsZSwgdHJ1ZSk7CiYjNDM7CWlmICghY3FfdGFibGUgfHwgaWQgJmd0Oz0gZ2MtJmd0O21heF9udW1fY3FzKQogCQlyZXR1cm47CiAKLQlpZiAoIWdjLSZndDtjcV90YWJsZVtpZF0pCiYjNDM7CWlmICghcmN1X2FjY2Vzc19wb2ludGVyKGNxX3RhYmxlW2lkXSkpCiAJCXJldHVybjsKIAotCWdjLSZndDtjcV90YWJsZVtpZF0gPSBOVUxMOwomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIoY3FfdGFibGVbaWRdLCBOVUxMKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgaW4tZmxpZ2h0IEVRIGhhbmRsZXJzIHRoYXQgbWF5IGhhdmUgbG9hZGVkIHRoZSBvbGQKJiM0MzsJICogcG9pbnRlciB2aWEgcmN1X2RlcmVmZXJlbmNlKCkgdG8gZmluaXNoIGJlZm9yZSB0aGUgY2FsbGVyCiYjNDM7CSAqIGZyZWVzIHRoZSBDUSBtZW1vcnkuCiYjNDM7CSAqLwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKIH0KIAogaW50IG1hbmFfZ2RfY3JlYXRlX2h3Y19xdWV1ZShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLApAQCAtMTE4NSw2ICYjNDM7MTIyNiwxNiBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfY3JlYXRlX2RtYV9yZWdpb24oc3RydWN0IGdkbWFfZGV2ICpnZCwKIAlpZiAoIU1BTkFfUEFHRV9BTElHTkVEKGdtaS0mZ3Q7dmlydF9hZGRyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJLyogTm8gUkNVIG5lZWRlZDogdGhpcyBydW5zIG9ubHkgb24gdGhlIGRhdGEtcGF0aCBxdWV1ZS1jcmVhdGlvbgomIzQzOwkgKiBwYXRoIChtYW5hX2dkX2NyZWF0ZV9tYW5hX2VxL21hbmFfZ2RfY3JlYXRlX21hbmFfd3FfY3EsIGNhbGxlZAomIzQzOwkgKiBieSBtYW5hX2VuIHVuZGVyIFJUTkwgYW5kIGJ5IG1hbmFfaWIgUkRNQSB2ZXJicywgb3IgZHVyaW5nCiYjNDM7CSAqIGluaXQpLiAgRXZlcnkgdGVhcmRvd24gcGF0aCDigJQgbWFuYV9nZF9yZW1vdmUsIG1hbmFfZ2Rfc3VzcGVuZCwKJiM0MzsJICogYW5kIHRoZSBIV0MgcmVzZXQvc2VydmljZSBwYXRoICh3aGljaCBnb2VzIHRocm91Z2gKJiM0MzsJICogbWFuYV9nZF9zdXNwZW5kKSDigJQgZHJhaW5zIHRob3NlIGNvbnN1bWVycyB2aWEgbWFuYV9yZG1hX3JlbW92ZSgpCiYjNDM7CSAqICYjNDM7IG1hbmFfcmVtb3ZlKCkgYmVmb3JlIG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbCgpIGNsZWFycwomIzQzOwkgKiBnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhLCBzbyBubyBjb25jdXJyZW50IGRlc3Ryb3kgY2FuIHJhY2Ugd2l0aAomIzQzOwkgKiB0aGlzIGRlcmVmZXJlbmNlLgomIzQzOwkgKi8KIAlod2MgPSBnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhOwogCXJlcV9tc2dfc2l6ZSA9IHN0cnVjdF9zaXplKHJlcSwgcGFnZV9hZGRyX2xpc3QsIG51bV9wYWdlKTsKIAlpZiAocmVxX21zZ19zaXplICZndDsgaHdjLSZndDttYXhfcmVxX21zZ19zaXplKQpAQCAtMTM3NCw3ICYjNDM7MTQyNSwxNyBAQCBpbnQgbWFuYV9nZF92ZXJpZnlfdmZfdmVyc2lvbihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7CiAJaW50IGVycjsKIAomIzQzOwkvKiBObyBSQ1UgbmVlZGVkOiB0aGlzIHJ1bnMgb25seSBpbnNpZGUgbWFuYV9nZF9zZXR1cCwgb24gdGhlCiYjNDM7CSAqIHByb2JlIGFuZCByZXN1bWUgcGF0aHMuICBUaGUgUENJL1BNIGNvcmUgaG9sZHMgZGV2aWNlX2xvY2sKJiM0MzsJICogYWNyb3NzIC5wcm9iZS8ucmVzdW1lIGFuZCAucmVtb3ZlLy5zdXNwZW5kLCBzbyBzZXR1cCBjYW5ub3QKJiM0MzsJICogb3ZlcmxhcCB0ZWFyZG93biBvZiB0aGUgc2FtZSBkZXZpY2UuICBUaGUgSFdDIHJlc2V0L3NlcnZpY2UKJiM0MzsJICogcGF0aCBpcyBhZGRpdGlvbmFsbHkgc2VyaWFsaXplZCBieSBHQ19JTl9TRVJWSUNFIGFuZCBydW5zCiYjNDM7CSAqIHN1c3BlbmQgKGRlc3Ryb3kpIHRoZW4gcmVzdW1lICh0aGlzKSBzZXF1ZW50aWFsbHkgaW4gb25lIHdvcmsKJiM0MzsJICogaXRlbS4gIGRyaXZlcl9kYXRhIHdhcyBqdXN0IHNldCBieSBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbAomIzQzOwkgKiBlYXJsaWVyIGluIHRoaXMgc2FtZSBzZXR1cCBjYWxsLCBzbyBpdCBpcyBsaXZlIGhlcmUuCiYjNDM7CSAqLwogCWh3YyA9IGdjLSZndDtod2MuZHJpdmVyX2RhdGE7CiYjNDM7CiAJbWFuYV9nZF9pbml0X3JlcV9oZHIoJmFtcDtyZXEuaGRyLCBHRE1BX1ZFUklGWV9WRl9EUklWRVJfVkVSU0lPTiwKIAkJCSAgICAgc2l6ZW9mKHJlcSksIHNpemVvZihyZXNwKSk7CiAKQEAgLTIzNjQsNiAmIzQzOzI0MjUsNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAKIAltdXRleF9pbml0KCZhbXA7Z2MtJmd0O2VxX3Rlc3RfZXZlbnRfbXV0ZXgpOwogCW11dGV4X2luaXQoJmFtcDtnYy0mZ3Q7Z2ljX211dGV4KTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDtnYy0mZ3Q7aHdjX2xvY2spOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBnYyk7CiAJZ2MtJmd0O2JhcjBfcGEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CiAJZ2MtJmd0O2JhcjBfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmMKaW5kZXggZTNjMjRkNTBkYWQwN2MuLjA0ODFkNDA0NDM0MjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jCkBAIC00LDI3ICYjNDM7NCw1NSBAQAogI2luY2x1ZGUgJmx0O25ldC9tYW5hL2dkbWEuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbWFuYS9tYW5hLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L21hbmEvaHdfY2hhbm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC92bWFsbG9jLmgmZ3Q7CiAKJiM0MzsvKiBBY3F1aXJlIGEgZnJlZSBtZXNzYWdlIHNsb3QgZnJvbSB0aGUgaW5mbGlnaHQgYml0bWFwLiAgUmV0dXJucwomIzQzOyAqIC1FTk9ERVYgaWYgdGhlIGNoYW5uZWwgaXMgdG9ybiBkb3duLCBvciAtRVRJTUVET1VUIGlmIGEgcHJpb3IgSFdDCiYjNDM7ICogY29tbWFuZCBoYXMgdGltZWQgb3V0IChwcmVzZXJ2aW5nIHRoZSBlcnJvciBjb2RlIGNhbGxlcnMgZXhwZWN0KS4KJiM0MzsgKi8KIHN0YXRpYyBpbnQgbWFuYV9od2NfZ2V0X21zZ19pbmRleChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiAqbXNnX2lkKQogewogCXN0cnVjdCBnZG1hX3Jlc291cmNlICpyID0gJmFtcDtod2MtJmd0O2luZmxpZ2h0X21zZ19yZXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgaW5kZXg7CiAKLQlkb3duKCZhbXA7aHdjLSZndDtzZW1hKTsKJiM0MzsJZm9yICg7OykgewomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtyLSZndDtsb2NrLCBmbGFncyk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ItJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCWlmICghaHdjLSZndDtjaGFubmVsX3VwIHx8IGh3Yy0mZ3Q7aHdjX3RpbWVkX291dCkgewomIzQzOwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtyLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQkJcmV0dXJuIGh3Yy0mZ3Q7Y2hhbm5lbF91cCA/IC1FVElNRURPVVQgOiAtRU5PREVWOwomIzQzOwkJfQogCi0JaW5kZXggPSBmaW5kX2ZpcnN0X3plcm9fYml0KGh3Yy0mZ3Q7aW5mbGlnaHRfbXNnX3Jlcy5tYXAsCi0JCQkJICAgIGh3Yy0mZ3Q7aW5mbGlnaHRfbXNnX3Jlcy5zaXplKTsKJiM0MzsJCWluZGV4ID0gZmluZF9maXJzdF96ZXJvX2JpdChyLSZndDttYXAsIHItJmd0O3NpemUpOwomIzQzOwkJaWYgKGluZGV4ICZsdDsgci0mZ3Q7c2l6ZSkgewomIzQzOwkJCXN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4OwomIzQzOwomIzQzOwkJCWJpdG1hcF9zZXQoci0mZ3Q7bWFwLCBpbmRleCwgMSk7CiYjNDM7CQkJY3R4ID0gJmFtcDtod2MtJmd0O2NhbGxlcl9jdHhbaW5kZXhdOwomIzQzOwkJCXJlaW5pdF9jb21wbGV0aW9uKCZhbXA7Y3R4LSZndDtjb21wX2V2ZW50KTsKJiM0MzsJCQlyZWZjb3VudF9zZXQoJmFtcDtjdHgtJmd0O3JlZmNudCwgMSk7CiYjNDM7CQkJY3R4LSZndDttc2dfaWQgPSBpbmRleDsKJiM0MzsJCQljdHgtJmd0O2Vycm9yID0gLUVJTlBST0dSRVNTOwomIzQzOwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtyLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ci0mZ3Q7bG9jaywgZmxhZ3MpOwogCi0JYml0bWFwX3NldChod2MtJmd0O2luZmxpZ2h0X21zZ19yZXMubWFwLCBpbmRleCwgMSk7CiYjNDM7CQl3YWl0X2V2ZW50KGh3Yy0mZ3Q7bXNnX3dhaXRxLAomIzQzOwkJCSAgICFod2MtJmd0O2NoYW5uZWxfdXAgfHwKJiM0MzsJCQkgICBod2MtJmd0O2h3Y190aW1lZF9vdXQgfHwKJiM0MzsJCQkgICAhYml0bWFwX2Z1bGwoci0mZ3Q7bWFwLCByLSZndDtzaXplKSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ci0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJaWYgKCFod2MtJmd0O2NoYW5uZWxfdXApCiYjNDM7CQkJcmV0dXJuIC1FTk9ERVY7CiAKLQkqbXNnX2lkID0gaW5kZXg7CiYjNDM7CQlpZiAoaHdjLSZndDtod2NfdGltZWRfb3V0KQomIzQzOwkJCXJldHVybiAtRVRJTUVET1VUOwomIzQzOwl9CiAKJiM0MzsJKm1zZ19pZCA9IGluZGV4OwogCXJldHVybiAwOwogfQogCkBAIC0zNCwxMCAmIzQzOzYyLDE3IEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX3B1dF9tc2dfaW5kZXgoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgbXNnX2lkKQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ItJmd0O2xvY2ssIGZsYWdzKTsKLQliaXRtYXBfY2xlYXIoaHdjLSZndDtpbmZsaWdodF9tc2dfcmVzLm1hcCwgbXNnX2lkLCAxKTsKJiM0MzsJYml0bWFwX2NsZWFyKHItJmd0O21hcCwgbXNnX2lkLCAxKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ci0mZ3Q7bG9jaywgZmxhZ3MpOwogCi0JdXAoJmFtcDtod2MtJmd0O3NlbWEpOwomIzQzOwl3YWtlX3VwKCZhbXA7aHdjLSZndDttc2dfd2FpdHEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBod2NfY3R4X3B1dChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsCiYjNDM7CQkJc3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7Y3R4LSZndDtyZWZjbnQpKQomIzQzOwkJbWFuYV9od2NfcHV0X21zZ19pbmRleChod2MsIGN0eC0mZ3Q7bXNnX2lkKTsKIH0KIAogc3RhdGljIGludCBtYW5hX2h3Y192ZXJpZnlfcmVzcF9tc2coY29uc3Qgc3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjYWxsZXJfY3R4LApAQCAtODMsNiAmIzQzOzExOCwxNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19oYW5kbGVfcmVzcChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXNwX2xlbiwKIAlzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDsKIAlpbnQgZXJyOwogCiYjNDM7CS8qIFZhbGlkYXRlIG1zZ19pZCBpcyBpbiByYW5nZSBiZWZvcmUgdXNpbmcgaXQgdG8gaW5kZXggYml0bWFwCiYjNDM7CSAqIGFuZCBjYWxsZXJfY3R4IGFycmF5LiAgTWFsaWNpb3VzIGZpcm13YXJlIGNvdWxkIHNlbmQKJiM0MzsJICogb3V0LW9mLXJhbmdlIG1zZ19pZCBjYXVzaW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzLgomIzQzOwkgKi8KJiM0MzsJaWYgKG1zZ19pZCAmZ3Q7PSBod2MtJmd0O251bV9pbmZsaWdodF9tc2cpIHsKJiM0MzsJCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7aHdjX3J4OiBtc2dfaWQgJXUgJmd0Oz0gbWF4ICV1XG4mIzM0OywKJiM0MzsJCQltc2dfaWQsIGh3Yy0mZ3Q7bnVtX2luZmxpZ2h0X21zZyk7CiYjNDM7CQltYW5hX2h3Y19wb3N0X3J4X3dxZShod2MtJmd0O3J4cSwgcnhfcmVxKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCWlmICghdGVzdF9iaXQobXNnX2lkLCBod2MtJmd0O2luZmxpZ2h0X21zZ19yZXMubWFwKSkgewogCQlkZXZfZXJyKGh3Yy0mZ3Q7ZGV2LCAmIzM0O2h3Y19yeDogaW52YWxpZCBtc2dfaWQgPSAldVxuJiMzNDssIG1zZ19pZCk7CiAJCW1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Yy0mZ3Q7cnhxLCByeF9yZXEpOwpAQCAtOTAsMjIgJiM0MzsxMzYsNDQgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfaGFuZGxlX3Jlc3Aoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVzcF9sZW4sCiAJfQogCiAJY3R4ID0gaHdjLSZndDtjYWxsZXJfY3R4ICYjNDM7IG1zZ19pZDsKLQllcnIgPSBtYW5hX2h3Y192ZXJpZnlfcmVzcF9tc2coY3R4LCByZXNwX21zZywgcmVzcF9sZW4pOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwogCi0JY3R4LSZndDtzdGF0dXNfY29kZSA9IHJlc3BfbXNnLSZndDtzdGF0dXM7CiYjNDM7CS8qIFJlamVjdCByZXNwb25zZXMgbGFyZ2VyIHRoYW4gdGhlIFJYIERNQSBidWZmZXIg4oCUIHRoZSBTR0UKJiM0MzsJICogbGltaXRzIHdoYXQgaGFyZHdhcmUgY2FuIERNQSwgc28gYW4gb3ZlcnNpemVkIHJlc3BfbGVuCiYjNDM7CSAqIGluZGljYXRlcyBhIGZpcm13YXJlIGJ1Zy4gIEZhaWwgcmF0aGVyIHRoYW4gc2lsZW50bHkKJiM0MzsJICogdHJ1bmNhdGluZy4KJiM0MzsJICovCiYjNDM7CWlmIChyZXNwX2xlbiAmZ3Q7IHJ4X3JlcS0mZ3Q7YnVmX2xlbikgewomIzQzOwkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtIV0MgUlg6IHJlc3BfbGVuICV1ICZndDsgYnVmX2xlbiAldVxuJiMzNDssCiYjNDM7CQkJcmVzcF9sZW4sIHJ4X3JlcS0mZ3Q7YnVmX2xlbik7CiYjNDM7CQlyZXNwX2xlbiA9IDA7CiYjNDM7CX0KIAotCW1lbWNweShjdHgtJmd0O291dHB1dF9idWYsIHJlc3BfbXNnLCByZXNwX2xlbik7Ci1vdXQ6Ci0JY3R4LSZndDtlcnJvciA9IGVycjsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7Y3R4LSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJZXJyID0gbWFuYV9od2NfdmVyaWZ5X3Jlc3BfbXNnKGN0eCwgcmVzcF9tc2csIHJlc3BfbGVuKTsKIAotCS8qIE11c3QgcG9zdCByeCB3cWUgYmVmb3JlIGNvbXBsZXRlKCksIG90aGVyd2lzZSB0aGUgbmV4dCByeCBtYXkKLQkgKiBoaXQgbm9fd3FlIGVycm9yLgomIzQzOwlpZiAoIWVyciAmYW1wOyZhbXA7IGN0eC0mZ3Q7b3V0cHV0X2J1ZikgewomIzQzOwkJY3R4LSZndDtzdGF0dXNfY29kZSA9IHJlc3BfbXNnLSZndDtzdGF0dXM7CiYjNDM7CQltZW1jcHkoY3R4LSZndDtvdXRwdXRfYnVmLCByZXNwX21zZywgcmVzcF9sZW4pOwomIzQzOwkJY3R4LSZndDtlcnJvciA9IDA7CiYjNDM7CX0gZWxzZSBpZiAoY3R4LSZndDtvdXRwdXRfYnVmKSB7CiYjNDM7CQkvKiBPbmx5IG92ZXJ3cml0ZSBlcnJvciBpZiB0aGUgc2VuZGVyIGhhc24mIzM5O3QgdGltZWQgb3V0CiYjNDM7CQkgKiBvciBiZWVuIGZvcmNlLWNvbXBsZXRlZCBieSBkZXN0cm95LiAgV2hlbiBvdXRwdXRfYnVmCiYjNDM7CQkgKiBpcyBOVUxMLCBhIHRlcm1pbmFsIGVycm9yICgtRU5PREVWIG9yIHRpbWVvdXQpIGhhcwomIzQzOwkJICogYWxyZWFkeSBiZWVuIHNldCDigJQgcHJlc2VydmUgaXQgc28gdGhlIHNlbmRlciBkb2VzbiYjMzk7dAomIzQzOwkJICogc2VlIGEgc3B1cmlvdXMgc3VjY2Vzcy4KJiM0MzsJCSAqLwomIzQzOwkJY3R4LSZndDtlcnJvciA9IGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBQb3N0IFJYIFdRRSBiZWZvcmUgY29tcGxldGluZyDigJQgdGhlIG5leHQgcmVzcG9uc2UgbWF5IGFycml2ZQomIzQzOwkgKiBpbW1lZGlhdGVseSBhbmQgbmVlZHMgYSBwb3N0ZWQgYnVmZmVyLgogCSAqLwogCW1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Yy0mZ3Q7cnhxLCByeF9yZXEpOwotCiAJY29tcGxldGUoJmFtcDtjdHgtJmd0O2NvbXBfZXZlbnQpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO2N0eC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CWh3Y19jdHhfcHV0KGh3YywgY3R4KTsKIH0KIAogc3RhdGljIHZvaWQgbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKHZvaWQgKmN0eCwgc3RydWN0IGdkbWFfcXVldWUgKnFfc2VsZiwKQEAgLTE0Niw3ICYjNDM7MjE0LDEyIEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX2luaXRfZXZlbnRfaGFuZGxlcih2b2lkICpjdHgsIHN0cnVjdCBnZG1hX3F1ZXVlICpxX3NlbGYsCiAJCQlicmVhazsKIAogCQljYXNlIEhXQ19JTklUX0RBVEFfUVVFVUVfREVQVEg6Ci0JCQlod2MtJmd0O2h3Y19pbml0X3FfZGVwdGhfbWF4ID0gKHUxNil2YWw7CiYjNDM7CQkJLyogSFdDX0lOSVRfREFUQV9RVUVVRV9ERVBUSCBpcyBhIDI0LWJpdCBmaWVsZC4gIEtlZXAKJiM0MzsJCQkgKiB0aGUgZnVsbCBkZXZpY2UtcmVwb3J0ZWQgdmFsdWUgaGVyZTsgaXQgaXMgY2xhbXBlZAomIzQzOwkJCSAqIGFuZCB2YWxpZGF0ZWQgaW4gbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoKSByYXRoZXIKJiM0MzsJCQkgKiB0aGFuIHNpbGVudGx5IHRydW5jYXRlZCB0byB1MTYuCiYjNDM7CQkJICovCiYjNDM7CQkJaHdjLSZndDtod2NfaW5pdF9xX2RlcHRoX21heCA9IHZhbDsKIAkJCWJyZWFrOwogCiAJCWNhc2UgSFdDX0lOSVRfREFUQV9NQVhfUkVRVUVTVDoKQEAgLTI2MSwxOSAmIzQzOzMzNCw2OSBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19yeF9ldmVudF9oYW5kbGVyKHZvaWQgKmN0eCwgdTMyIGdkbWFfcnhxX2lkLAogCiAJc2dlID0gKHN0cnVjdCBnZG1hX3NnZSAqKSh3cWUgJiM0MzsgOCAmIzQzOyBkbWFfb29iLSZndDtpbmxpbmVfb29iX3NpemVfZGl2NCAqIDQpOwogCi0JLyogU2VsZWN0IHRoZSBSWCB3b3JrIHJlcXVlc3QgZm9yIHZpcnR1YWwgYWRkcmVzcyBhbmQgZm9yIHJlcG9zdGluZy4gKi8KLQlycV9iYXNlX2FkZHIgPSBod2NfcnhxLSZndDttc2dfYnVmLSZndDttZW1faW5mby5kbWFfaGFuZGxlOwotCXJ4X3JlcV9pZHggPSAoc2dlLSZndDthZGRyZXNzIC0gcnFfYmFzZV9hZGRyKSAvIGh3Yy0mZ3Q7bWF4X3JlcV9tc2dfc2l6ZTsKJiM0MzsJLyogaW5saW5lX29vYl9zaXplX2RpdjQgaXMgcmVhZCBmcm9tIHRoZSBXUUUgaW4gZGV2aWNlLWFjY2Vzc2libGUgUlEKJiM0MzsJICogbWVtb3J5LCBzbyBhIG1hbGljaW91cyBob3N0IGluIGEgQ1ZNIChvciBidWdneSBmaXJtd2FyZSkgY291bGQgc2V0CiYjNDM7CSAqIGl0IHRvIHB1c2ggdGhlIFNHRSBwYXN0IHRoZSBSUSBidWZmZXIuICBCb3VuZHMtY2hlY2sgdGhlIFNHRSBpdAomIzQzOwkgKiBsb2NhdGVzIGJlZm9yZSBkZXJlZmVyZW5jaW5nIHNnZS0mZ3Q7YWRkcmVzcyBiZWxvdy4gIEEgdmFsaWRseSBwb3N0ZWQKJiM0MzsJICogV1FFIGtlZXBzIHRoZSBTR0UgaW5zaWRlIHRoZSByaW5nICh3b3JzdCBjYXNlIGVuZHMgZXhhY3RseSBhdCB0aGUKJiM0MzsJICogYnVmZmVyIGJvdW5kYXJ5KTsgcmVqZWN0IGFueXRoaW5nIHRoYXQgd291bGQgcmVhZCBwYXN0IGl0LiAgVGhlCiYjNDM7CSAqIHNsb3QgY2Fubm90IGJlIHRydXN0ZWQgaGVyZSwgc28gbGVhayB0aGlzIFJYIFdRRSByYXRoZXIgdGhhbiByZXBvc3QKJiM0MzsJICogdGhlIHdyb25nIG9uZSAtLSBhcyBpbiB0aGUgU0dFLWFkZHJlc3MgbWlzbWF0Y2ggcGF0aCBiZWxvdy4KJiM0MzsJICovCiYjNDM7CWlmICgodTggKikoc2dlICYjNDM7IDEpICZndDsgKHU4ICopcnEtJmd0O3F1ZXVlX21lbV9wdHIgJiM0MzsgcnEtJmd0O3F1ZXVlX3NpemUpIHsKJiM0MzsJCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7SFdDIFJYOiBTR0UgcGFzdCBSUSBidWZmZXIsIG9vYl9kaXY0PSV1XG4mIzM0OywKJiM0MzsJCQlkbWFfb29iLSZndDtpbmxpbmVfb29iX3NpemVfZGl2NCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KIAotCWlmIChyeF9yZXFfaWR4ICZndDs9IGh3Y19yeHEtJmd0O21zZ19idWYtJmd0O251bV9yZXFzKSB7Ci0JCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7SFdDIFJYOiB3cm9uZyByeF9yZXFfaWR4PSVsbHUsIG51bV9yZXFzPSV1XG4mIzM0OywKLQkJCXJ4X3JlcV9pZHgsIGh3Y19yeHEtJmd0O21zZ19idWYtJmd0O251bV9yZXFzKTsKJiM0MzsJLyogUmVjb3ZlciB0aGUgb3JpZ2luYXRpbmcgUlggc2xvdCBmcm9tIHRoZSBTR0UgYWRkcmVzcy4gIE9mIHRoZSB0aHJlZQomIzQzOwkgKiB0ZXJtcyBoZXJlIG9ubHkgc2dlLSZndDthZGRyZXNzIGxpdmVzIGluIGRldmljZS1hY2Nlc3NpYmxlIFJRIG1lbW9yeTsKJiM0MzsJICogcnFfYmFzZV9hZGRyIGFuZCBtYXhfcmVzcF9tc2dfc2l6ZSBhcmUgZHJpdmVyLXByaXZhdGUgY29uc3RhbnRzLiAgQW4KJiM0MzsJICogaW4tcmFuZ2UgYnV0IHdyb25nL3VuYWxpZ25lZCBTR0UgKGNvcnJ1cHRlZCBXUUUsIG9yIGEgbWFsaWNpb3VzIGhvc3QKJiM0MzsJICogaW4gYSBDVk0pIHdvdWxkIG90aGVyd2lzZSB0cnVuY2F0ZSBvbnRvIGEgbmVpZ2hib3VyaW5nIHNsb3QsIGxldHRpbmcKJiM0MzsJICogdXMgcmVhZCBhIHN0YWxlIHJlc3BvbnNlIHRoYXQgY291bGQgY29tcGxldGUgdGhlIHdyb25nLCByZXVzZWQKJiM0MzsJICogaW4tZmxpZ2h0IHJlcXVlc3QuICBSZXF1aXJlIHRoZSBpbmRleCB0byBiZSBpbiByYW5nZSBBTkQgdGhlIGFkZHJlc3MKJiM0MzsJICogdG8gZXhhY3RseSBtYXRjaCB0aGUgdmFsdWUgdGhlIGRyaXZlciBwb3N0ZWQgZm9yIHRoYXQgc2xvdC4KJiM0MzsJICovCiYjNDM7CXJxX2Jhc2VfYWRkciA9IGh3Y19yeHEtJmd0O21zZ19idWYtJmd0O21lbV9pbmZvLmRtYV9oYW5kbGU7CiYjNDM7CXJ4X3JlcV9pZHggPSAoc2dlLSZndDthZGRyZXNzIC0gcnFfYmFzZV9hZGRyKSAvIGh3Yy0mZ3Q7bWF4X3Jlc3BfbXNnX3NpemU7CiYjNDM7CiYjNDM7CWlmIChyeF9yZXFfaWR4ICZndDs9IGh3Y19yeHEtJmd0O3F1ZXVlX2RlcHRoKSB7CiYjNDM7CQkvKiBDYW5ub3QgdHJ1c3Qgd2hpY2ggV1FFIHRoaXMgaXMsIHNvIHdlIGNhbm5vdCBzYWZlbHkgcmVwb3N0CiYjNDM7CQkgKiBpdDsgbGVhayBvbmUgUlggV1FFIGFuZCBiYWlsLiAgQW4gb3V0LW9mLXJhbmdlIGluZGV4IG1lYW5zCiYjNDM7CQkgKiBhIGNvcnJ1cHRlZCBTR0UgZnJvbSBoYXJkd2FyZSAob3IgaG9zdCB0YW1wZXJpbmcpLCBhbgomIzQzOwkJICogdW5yZWNvdmVyYWJsZSBkZXZpY2UgZXJyb3IuCiYjNDM7CQkgKi8KJiM0MzsJCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7SFdDIFJYOiBTR0UgaWR4ICVsbHUgb3V0IG9mIHJhbmdlXG4mIzM0OywKJiM0MzsJCQlyeF9yZXFfaWR4KTsKIAkJcmV0dXJuOwogCX0KIAogCXJ4X3JlcSA9ICZhbXA7aHdjX3J4cS0mZ3Q7bXNnX2J1Zi0mZ3Q7cmVxc1tyeF9yZXFfaWR4XTsKJiM0MzsJaWYgKHNnZS0mZ3Q7YWRkcmVzcyAhPSAodTY0KXJ4X3JlcS0mZ3Q7YnVmX3NnZV9hZGRyKSB7CiYjNDM7CQkvKiBJbi1yYW5nZSBpbmRleCBidXQgdGhlIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggd2hhdCB0aGUKJiM0MzsJCSAqIGRyaXZlciBwb3N0ZWQgZm9yIHRoYXQgc2xvdDsgdGhlIHNhbWUgdW5yZWNvdmVyYWJsZSBjYXNlLAomIzQzOwkJICogc28gbGVhayB0aGlzIFdRRSByYXRoZXIgdGhhbiByZXBvc3QgdGhlIHdyb25nIG9uZS4KJiM0MzsJCSAqLwomIzQzOwkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtIV0MgUlg6IGludmFsaWQgU0dFIGFkZHJlc3MgJWxseCAoaWR4PSVsbHUpXG4mIzM0OywKJiM0MzsJCQlzZ2UtJmd0O2FkZHJlc3MsIHJ4X3JlcV9pZHgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJcmVzcCA9IChzdHJ1Y3QgZ2RtYV9yZXNwX2hkciAqKXJ4X3JlcS0mZ3Q7YnVmX3ZhOwogCiYjNDM7CS8qIFZhbGlkYXRlIHJlc3BfbGVuIGNvdmVycyB0aGUgcmVzcG9uc2UgaGVhZGVyIGJlZm9yZSByZWFkaW5nCiYjNDM7CSAqIGh3Y19tc2dfaWQuICBBIHNob3J0IHJlc3BvbnNlIGxlYXZlcyBzdGFsZSBkYXRhIGZyb20gdGhlCiYjNDM7CSAqIHByZXZpb3VzIGJ1ZmZlciBvY2N1cGFudCwgd2hpY2ggY291bGQgbWF0Y2ggYSBsaXZlIHNsb3QgYW5kCiYjNDM7CSAqIGNvbXBsZXRlIHRoZSB3cm9uZyByZXF1ZXN0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHJ4X29vYi0mZ3Q7dHhfb29iX2RhdGFfc2l6ZSAmbHQ7IHNpemVvZigqcmVzcCkpIHsKJiM0MzsJCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7SFdDIFJYOiBzaG9ydCByZXNwX2xlbj0ldVxuJiMzNDssCiYjNDM7CQkJcnhfb29iLSZndDt0eF9vb2JfZGF0YV9zaXplKTsKJiM0MzsJCW1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Y19yeHEsIHJ4X3JlcSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAkvKiBSZWFkIG1zZ19pZCBvbmNlIGZyb20gRE1BIGJ1ZmZlciB0byBwcmV2ZW50IFRPQ1RPVToKIAkgKiBETUEgbWVtb3J5IGlzIHNoYXJlZC91bmVuY3J5cHRlZCBpbiBDVk1zIC0gaG9zdCBjYW4KIAkgKiBtb2RpZnkgaXQgYmV0d2VlbiByZWFkcy4KQEAgLTI4MSw2ICYjNDM7NDA0LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfcnhfZXZlbnRfaGFuZGxlcih2b2lkICpjdHgsIHUzMiBnZG1hX3J4cV9pZCwKIAltc2dfaWQgPSBSRUFEX09OQ0UocmVzcC0mZ3Q7cmVzcG9uc2UuaHdjX21zZ19pZCk7CiAJaWYgKG1zZ19pZCAmZ3Q7PSBod2MtJmd0O251bV9pbmZsaWdodF9tc2cpIHsKIAkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtIV0MgUlg6IHdyb25nIG1zZ19pZD0ldVxuJiMzNDssIG1zZ19pZCk7CiYjNDM7CQltYW5hX2h3Y19wb3N0X3J4X3dxZShod2NfcnhxLCByeF9yZXEpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zODQsMTQgJiM0Mzs1MDgsMjAgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfY29tcF9ldmVudCh2b2lkICpjdHgsIHN0cnVjdCBnZG1hX3F1ZXVlICpxX3NlbGYpCiAKIHN0YXRpYyB2b2lkIG1hbmFfaHdjX2Rlc3Ryb3lfY3Eoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHN0cnVjdCBod2NfY3EgKmh3Y19jcSkKIHsKLQlrZnJlZShod2NfY3EtJmd0O2NvbXBfYnVmKTsKLQogCWlmIChod2NfY3EtJmd0O2dkbWFfY3EpCiAJCW1hbmFfZ2RfZGVzdHJveV9xdWV1ZShnYywgaHdjX2NxLSZndDtnZG1hX2NxKTsKIAomIzQzOwkvKiBjb21wX2J1ZiBpcyByZWFjaGVkIG9ubHkgYnkgbWFuYV9od2NfY29tcF9ldmVudCgpLCB3aGljaCB0aGUKJiM0MzsJICogRVEgaGFuZGxlciBpbnZva2VzIHZpYSBjcV90YWJsZVtpZF0uICBUaGUgQ1EgZGVzdHJveSBhYm92ZQomIzQzOwkgKiBhbHJlYWR5IGNsZWFyZWQgdGhhdCBzbG90IGFuZCByYW4gc3luY2hyb25pemVfcmN1KCksIHNvIG5vCiYjNDM7CSAqIGhhbmRsZXIgY2FuIHJlYWNoIGNvbXBfYnVmIG9uY2UgaXQgcmV0dXJucy4gIERlc3Ryb3lpbmcgdGhlIEVRCiYjNDM7CSAqIGhlcmUgYWRkaXRpb25hbGx5IHRlYXJzIGRvd24gdGhlIElSUSAoZGVmZW5zZSBpbiBkZXB0aCkgYmVmb3JlCiYjNDM7CSAqIGNvbXBfYnVmIGFuZCBod2NfY3EgYXJlIGZyZWVkIGJlbG93LgomIzQzOwkgKi8KIAlpZiAoaHdjX2NxLSZndDtnZG1hX2VxKQogCQltYW5hX2dkX2Rlc3Ryb3lfcXVldWUoZ2MsIGh3Y19jcS0mZ3Q7Z2RtYV9lcSk7CiAKJiM0MzsJa2ZyZWUoaHdjX2NxLSZndDtjb21wX2J1Zik7CiAJa2ZyZWUoaHdjX2NxKTsKIH0KIApAQCAtNTYwLDYgJiM0Mzs2OTAsNyBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2NyZWF0ZV93cShzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsCiAJaHdjX3dxLSZndDtnZG1hX3dxID0gcXVldWU7CiAJaHdjX3dxLSZndDtxdWV1ZV9kZXB0aCA9IHFfZGVwdGg7CiAJaHdjX3dxLSZndDtod2NfY3EgPSBod2NfY3E7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7aHdjX3dxLSZndDtsb2NrKTsKIAogCWVyciA9IG1hbmFfaHdjX2FsbG9jX2RtYV9idWYoaHdjLCBxX2RlcHRoLCBtYXhfbXNnX3NpemUsCiAJCQkJICAgICAmYW1wO2h3Y193cS0mZ3Q7bXNnX2J1Zik7CkBAIC01NzcsNyAmIzQzOzcwOCw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfY3JlYXRlX3dxKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKGNvbnN0IHN0cnVjdCBod2Nfd3EgKmh3Y190eHEsCiYjNDM7c3RhdGljIGludCBtYW5hX2h3Y19wb3N0X3R4X3dxZShzdHJ1Y3QgaHdjX3dxICpod2NfdHhxLAogCQkJCXN0cnVjdCBod2Nfd29ya19yZXF1ZXN0ICpyZXEsCiAJCQkJdTMyIGRlc3RfdmlydF9ycV9pZCwgdTMyIGRlc3RfdmlydF9yY3FfaWQsCiAJCQkJYm9vbCBkZXN0X3BmKQpAQCAtNjE2LDcgJiM0Mzs3NDcsMTEgQEAgc3RhdGljIGludCBtYW5hX2h3Y19wb3N0X3R4X3dxZShjb25zdCBzdHJ1Y3QgaHdjX3dxICpod2NfdHhxLAogCXJlcS0mZ3Q7d3FlX3JlcS5pbmxpbmVfb29iX2RhdGEgPSB0eF9vb2I7CiAJcmVxLSZndDt3cWVfcmVxLmNsaWVudF9kYXRhX3VuaXQgPSAwOwogCiYjNDM7CS8qIFNlcmlhbGl6ZSBXUUUgcG9zdGluZyDigJQgbXVsdGlwbGUgc2VuZGVycyBtYXkgY2FsbCBjb25jdXJyZW50bHkuICovCiYjNDM7CXNwaW5fbG9jaygmYW1wO2h3Y190eHEtJmd0O2xvY2spOwogCWVyciA9IG1hbmFfZ2RfcG9zdF9hbmRfcmluZyhod2NfdHhxLSZndDtnZG1hX3dxLCAmYW1wO3JlcS0mZ3Q7d3FlX3JlcSwgTlVMTCk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aHdjX3R4cS0mZ3Q7bG9jayk7CiYjNDM7CiAJaWYgKGVycikKIAkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIHBvc3QgV1FFIG9uIEhXQyBTUTogJWRcbiYjMzQ7LCBlcnIpOwogCXJldHVybiBlcnI7CkBAIC02MjcsNyAmIzQzOzc2Miw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfaW5pdF9pbmZsaWdodF9tc2coc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLAogewogCWludCBlcnI7CiAKLQlzZW1hX2luaXQoJmFtcDtod2MtJmd0O3NlbWEsIG51bV9tc2cpOwomIzQzOwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7aHdjLSZndDttc2dfd2FpdHEpOwogCiAJZXJyID0gbWFuYV9nZF9hbGxvY19yZXNfbWFwKG51bV9tc2csICZhbXA7aHdjLSZndDtpbmZsaWdodF9tc2dfcmVzKTsKIAlpZiAoZXJyKQpAQCAtNjU3LDIzICYjNDM7NzkyLDQwIEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfdGVzdF9jaGFubmVsKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsCiAJaWYgKCFjdHgpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IHFfZGVwdGg7ICYjNDM7JiM0MztpKQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcV9kZXB0aDsgJiM0MzsmIzQzO2kpIHsKJiM0MzsJCXNwaW5fbG9ja19pbml0KCZhbXA7Y3R4W2ldLmxvY2spOwogCQlpbml0X2NvbXBsZXRpb24oJmFtcDtjdHhbaV0uY29tcF9ldmVudCk7CiYjNDM7CX0KIAogCWh3Yy0mZ3Q7Y2FsbGVyX2N0eCA9IGN0eDsKIAotCXJldHVybiBtYW5hX2dkX3Rlc3RfZXEoZ2MsIGh3Yy0mZ3Q7Y3EtJmd0O2dkbWFfZXEpOwomIzQzOwkvKiBjaGFubmVsX3VwIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgdGVzdCBFUSByZXF1ZXN0LCBiZWNhdXNlCiYjNDM7CSAqIHRoZSByZXF1ZXN0IGdvZXMgdGhyb3VnaCBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KCkgd2hpY2gKJiM0MzsJICogY2hlY2tzIGNoYW5uZWxfdXAuICBjYWxsZXJfY3R4IGlzIGFsbG9jYXRlZCBhYm92ZSwgc28KJiM0MzsJICogY29uY3VycmVudCBhY2Nlc3MgdG8gYSBOVUxMIGNhbGxlcl9jdHggaXMgbm90IHBvc3NpYmxlLgomIzQzOwkgKi8KJiM0MzsJaHdjLSZndDtjaGFubmVsX3VwID0gdHJ1ZTsKJiM0MzsKJiM0MzsJZXJyID0gbWFuYV9nZF90ZXN0X2VxKGdjLCBod2MtJmd0O2NxLSZndDtnZG1hX2VxKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWh3Yy0mZ3Q7Y2hhbm5lbF91cCA9IGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MTYgKnFfZGVwdGgsCiYjNDM7c3RhdGljIGludCBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTMyICpxX2RlcHRoLAogCQkJCSAgICAgIHUzMiAqbWF4X3JlcV9tc2dfc2l6ZSwKIAkJCQkgICAgICB1MzIgKm1heF9yZXNwX21zZ19zaXplKQogewomIzQzOwkvKiBObyBSQ1UgbmVlZGVkOiBjYWxsZWQgb25seSBmcm9tIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsCiYjNDM7CSAqIGR1cmluZyBpbml0LCBiZWZvcmUgdGhlIGNoYW5uZWwgaXMgcHVibGlzaGVkIHRvIHNlbmRlcnMuCiYjNDM7CSAqLwogCXN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyA9IGdjLSZndDtod2MuZHJpdmVyX2RhdGE7CiAJc3RydWN0IGdkbWFfcXVldWUgKnJxID0gaHdjLSZndDtyeHEtJmd0O2dkbWFfd3E7CiAJc3RydWN0IGdkbWFfcXVldWUgKnNxID0gaHdjLSZndDt0eHEtJmd0O2dkbWFfd3E7CiAJc3RydWN0IGdkbWFfcXVldWUgKmVxID0gaHdjLSZndDtjcS0mZ3Q7Z2RtYV9lcTsKIAlzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3EgPSBod2MtJmd0O2NxLSZndDtnZG1hX2NxOwomIzQzOwlzdHJ1Y3QgZ2RtYV9xdWV1ZSBfX3JjdSAqKmNxX3RhYmxlOwogCWludCBlcnI7CiAKIAlpbml0X2NvbXBsZXRpb24oJmFtcDtod2MtJmd0O2h3Y19pbml0X2VxZV9jb21wKTsKQEAgLTY4NywyNCAmIzQzOzgzOSw1MSBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MTYgKnFfZGVwdGgsCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZhbXA7aHdjLSZndDtod2NfaW5pdF9lcWVfY29tcCwgNjAgKiBIWikpCi0JCXJldHVybiAtRVRJTUVET1VUOwomIzQzOwkvKiBzZXR1cF9od2MgYWN0aXZhdGVkIE1TVCBlbnRyaWVzIOKAlCBoYXJkd2FyZSBjYW4gbm93IERNQSBpbnRvCiYjNDM7CSAqIG91ciBxdWV1ZSBidWZmZXJzLiAgSWYgYW55dGhpbmcgYmVsb3cgZmFpbHMsIHdlIG11c3QgdGVhcgomIzQzOwkgKiBkb3duIGJlZm9yZSByZXR1cm5pbmcgc28gdGhlIGNhbGxlciBkb2VzbiYjMzk7dCBuZWVkIHRvIHRyYWNrCiYjNDM7CSAqIHdoZXRoZXIgc2V0dXBfaHdjIHN1Y2NlZWRlZC4KJiM0MzsJICovCiYjNDM7CWh3Yy0mZ3Q7c2V0dXBfYWN0aXZlID0gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmFtcDtod2MtJmd0O2h3Y19pbml0X2VxZV9jb21wLCA2MCAqIEhaKSkgewomIzQzOwkJZXJyID0gLUVUSU1FRE9VVDsKJiM0MzsJCWdvdG8gdGVhcmRvd247CiYjNDM7CX0KIAogCSpxX2RlcHRoID0gaHdjLSZndDtod2NfaW5pdF9xX2RlcHRoX21heDsKIAkqbWF4X3JlcV9tc2dfc2l6ZSA9IGh3Yy0mZ3Q7aHdjX2luaXRfbWF4X3JlcV9tc2dfc2l6ZTsKIAkqbWF4X3Jlc3BfbXNnX3NpemUgPSBod2MtJmd0O2h3Y19pbml0X21heF9yZXNwX21zZ19zaXplOwogCiAJLyogQm90aCB3ZXJlIHNldCBpbiBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIoKS4gKi8KLQlpZiAoV0FSTl9PTihjcS0mZ3Q7aWQgJmd0Oz0gZ2MtJmd0O21heF9udW1fY3FzKSkKLQkJcmV0dXJuIC1FUFJPVE87CiYjNDM7CWlmIChXQVJOX09OKGNxLSZndDtpZCAmZ3Q7PSBnYy0mZ3Q7bWF4X251bV9jcXMpKSB7CiYjNDM7CQllcnIgPSAtRVBST1RPOwomIzQzOwkJZ290byB0ZWFyZG93bjsKJiM0MzsJfQogCi0JZ2MtJmd0O2NxX3RhYmxlID0gdmNhbGxvYyhnYy0mZ3Q7bWF4X251bV9jcXMsIHNpemVvZihzdHJ1Y3QgZ2RtYV9xdWV1ZSAqKSk7Ci0JaWYgKCFnYy0mZ3Q7Y3FfdGFibGUpCi0JCXJldHVybiAtRU5PTUVNOwomIzQzOwljcV90YWJsZSA9IHZjYWxsb2MoZ2MtJmd0O21heF9udW1fY3FzLCBzaXplb2YoKmNxX3RhYmxlKSk7CiYjNDM7CWlmICghY3FfdGFibGUpIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIHRlYXJkb3duOwomIzQzOwl9CiAKLQlnYy0mZ3Q7Y3FfdGFibGVbY3EtJmd0O2lkXSA9IGNxOwomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIoY3FfdGFibGVbY3EtJmd0O2lkXSwgY3EpOwomIzQzOwkvKiBQdWJsaXNoIHRoZSBmdWxseS1pbml0aWFsaXNlZCB0YWJsZSBsYXN0OyBwYWlycyB3aXRoIHRoZQomIzQzOwkgKiByY3VfZGVyZWZlcmVuY2UoZ2MtJmd0O2NxX3RhYmxlKSBpbiBtYW5hX2dkX3Byb2Nlc3NfZXFlKCkuCiYjNDM7CSAqLwomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIoZ2MtJmd0O2NxX3RhYmxlLCBjcV90YWJsZSk7CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0Mzt0ZWFyZG93bjoKJiM0MzsJewomIzQzOwkJaW50IHRkX2VyciA9IG1hbmFfc21jX3RlYXJkb3duX2h3YygmYW1wO2djLSZndDtzaG1fY2hhbm5lbCwgZmFsc2UpOwomIzQzOwomIzQzOwkJaWYgKCF0ZF9lcnIpCiYjNDM7CQkJaHdjLSZndDtzZXR1cF9hY3RpdmUgPSBmYWxzZTsKJiM0MzsKJiM0MzsJCXJldHVybiB0ZF9lcnIgPyB0ZF9lcnIgOiBlcnI7CiYjNDM7CX0KIH0KIAogc3RhdGljIGludCBtYW5hX2h3Y19pbml0X3F1ZXVlcyhzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLApAQCAtNzEyLDYgJiM0Mzs4OTEsMTIgQEAgc3RhdGljIGludCBtYW5hX2h3Y19pbml0X3F1ZXVlcyhzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLAogewogCWludCBlcnI7CiAKJiM0MzsJLyogQ1EgZGVwdGggaXMgcV9kZXB0aCAqIDIgKFNRICYjNDM7IFJRKSBwYXNzZWQgYXMgdTE2IHRvIGNyZWF0ZV9jcS4KJiM0MzsJICogQ2FwIHRvIHByZXZlbnQgdTE2IHRydW5jYXRpb24uCiYjNDM7CSAqLwomIzQzOwlpZiAocV9kZXB0aCAmZ3Q7IFUxNl9NQVggLyAyKQomIzQzOwkJcV9kZXB0aCA9IFUxNl9NQVggLyAyOwomIzQzOwogCWVyciA9IG1hbmFfaHdjX2luaXRfaW5mbGlnaHRfbXNnKGh3YywgcV9kZXB0aCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTcyOCwxNCAmIzQzOzkxMywxNCBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsCiAJCWdvdG8gb3V0OwogCX0KIAotCWVyciA9IG1hbmFfaHdjX2NyZWF0ZV93cShod2MsIEdETUFfUlEsIHFfZGVwdGgsIG1heF9yZXFfbXNnX3NpemUsCiYjNDM7CWVyciA9IG1hbmFfaHdjX2NyZWF0ZV93cShod2MsIEdETUFfUlEsIHFfZGVwdGgsIG1heF9yZXNwX21zZ19zaXplLAogCQkJCSBod2MtJmd0O2NxLCAmYW1wO2h3Yy0mZ3Q7cnhxKTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBIV0MgUlE6ICVkXG4mIzM0OywgZXJyKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyID0gbWFuYV9od2NfY3JlYXRlX3dxKGh3YywgR0RNQV9TUSwgcV9kZXB0aCwgbWF4X3Jlc3BfbXNnX3NpemUsCiYjNDM7CWVyciA9IG1hbmFfaHdjX2NyZWF0ZV93cShod2MsIEdETUFfU1EsIHFfZGVwdGgsIG1heF9yZXFfbXNnX3NpemUsCiAJCQkJIGh3Yy0mZ3Q7Y3EsICZhbXA7aHdjLSZndDt0eHEpOwogCWlmIChlcnIpIHsKIAkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gY3JlYXRlIEhXQyBTUTogJWRcbiYjMzQ7LCBlcnIpOwpAQCAtNzQ0LDYgJiM0Mzs5MjksNyBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsCiAKIAlod2MtJmd0O251bV9pbmZsaWdodF9tc2cgPSBxX2RlcHRoOwogCWh3Yy0mZ3Q7bWF4X3JlcV9tc2dfc2l6ZSA9IG1heF9yZXFfbXNnX3NpemU7CiYjNDM7CWh3Yy0mZ3Q7bWF4X3Jlc3BfbXNnX3NpemUgPSBtYXhfcmVzcF9tc2dfc2l6ZTsKIAogCXJldHVybiAwOwogb3V0OgpAQCAtNzUxLDEyICYjNDM7OTM3LDYyIEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfaW5pdF9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCwKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7LyogVGVhciBkb3duIGFsbCBIV0MgcXVldWVzIGFuZCBmcmVlIGFzc29jaWF0ZWQgcmVzb3VyY2VzLiAgVXNlZCBvbgomIzQzOyAqIHRoZSByZWluaXQtd2l0aC1oaWdoZXItcXVldWUtZGVwdGggcGF0aCBhbmQgcmVpbml0IGZhbGxiYWNrLgomIzQzOyAqCiYjNDM7ICogUFJFQ09ORElUSU9OOiBtdXN0IGJlIGNhbGxlZCBvbmx5IGR1cmluZyBjaGFubmVsIGJyaW5nLXVwIGluCiYjNDM7ICogbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoKSwgYmVmb3JlIHRoZSBjaGFubmVsIGlzIHB1Ymxpc2hlZCB0bwomIzQzOyAqIHNlbmRlcnMuICBUaGVyZSB0aGUgc2V0dXAgdGhyZWFkIGlzIGVmZmVjdGl2ZWx5IHNpbmdsZS10aHJlYWRlZAomIzQzOyAqIChzZXJpYWxpemVkIGFnYWluc3QgdGVhcmRvd24gYnkgdGhlIFBDSS9QTSBkZXZpY2VfbG9jayBvciwgb24gdGhlCiYjNDM7ICogc2VydmljZSBwYXRoLCBHQ19JTl9TRVJWSUNFLCB3aXRoIHRoZSBkYXRhIHBhdGggbm90IHlldCBwcm9iZWQpLAomIzQzOyAqIGNoYW5uZWxfdXAgaXMgc3RpbGwgZmFsc2UsIGNhbGxlcl9jdHggaXMgbm90IHlldCBhbGxvY2F0ZWQsIGFuZAomIzQzOyAqIGFjdGl2ZV9zZW5kZXJzIGlzIDAg4oCUIHNvIG5vIGNvbmN1cnJlbnQgcmVxdWVzdC9yZXNwb25zZSB1c2VyIGNhbgomIzQzOyAqIHRvdWNoIHRoZXNlIHF1ZXVlcy4gIFRoYXQgaXMgd2h5IHRoaXMgc2tpcHMgdGhlIGh3Y19sb2NrLXByb3RlY3RlZAomIzQzOyAqIGRyaXZlcl9kYXRhIGNsZWFyICYjNDM7IGFjdGl2ZV9zZW5kZXJzIGRyYWluIHRoYXQKJiM0MzsgKiBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoKSBuZWVkcyBmb3IgdGhlIHJ1bnRpbWUgdGVhcmRvd24gcmFjZTsKJiM0MzsgKiBvbmx5IHRoZSBDUS1maXJzdCBvcmRlcmluZyBiZWxvdyAodG8gZmVuY2Ugb2ZmIGEgcGVuZGluZyBpbnRlcnJ1cHQpCiYjNDM7ICogaXMgcmVxdWlyZWQuICBDYWxsaW5nIHRoaXMgb24gYSBsaXZlLCBwdWJsaXNoZWQgY2hhbm5lbCB3b3VsZCBiZSBhCiYjNDM7ICogdXNlLWFmdGVyLWZyZWUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbWFuYV9od2NfZGVzdHJveV9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjKQomIzQzO3sKJiM0MzsJc3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBod2MtJmd0O2dkbWFfZGV2LSZndDtnZG1hX2NvbnRleHQ7CiYjNDM7CiYjNDM7CS8qIERlc3Ryb3kgQ1EgZmlyc3QgdG8gZGVyZWdpc3RlciB0aGUgRVEgZnJvbSB0aGUgaW50ZXJydXB0CiYjNDM7CSAqIGhhbmRsZXIgbGlzdCBiZWZvcmUgZnJlZWluZyBjYWxsZXJfY3R4LCBUWFEsIG9yIFJYUSBtZW1vcnkuCiYjNDM7CSAqIEEgcGVuZGluZyBpbnRlcnJ1cHQgaGFuZGxlciBjb3VsZCBzdGlsbCByZWFjaCBoYW5kbGVfcmVzcCgpCiYjNDM7CSAqIHdoaWNoIGRlcmVmZXJlbmNlcyBjYWxsZXJfY3R4LgomIzQzOwkgKi8KJiM0MzsJaWYgKGh3Yy0mZ3Q7Y3EpIHsKJiM0MzsJCW1hbmFfaHdjX2Rlc3Ryb3lfY3EoZ2MsIGh3Yy0mZ3Q7Y3EpOwomIzQzOwkJaHdjLSZndDtjcSA9IE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2ZyZWUoaHdjLSZndDtjYWxsZXJfY3R4KTsKJiM0MzsJaHdjLSZndDtjYWxsZXJfY3R4ID0gTlVMTDsKJiM0MzsKJiM0MzsJaWYgKGh3Yy0mZ3Q7dHhxKSB7CiYjNDM7CQltYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLSZndDt0eHEpOwomIzQzOwkJaHdjLSZndDt0eHEgPSBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChod2MtJmd0O3J4cSkgewomIzQzOwkJbWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy0mZ3Q7cnhxKTsKJiM0MzsJCWh3Yy0mZ3Q7cnhxID0gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwltYW5hX2dkX2ZyZWVfcmVzX21hcCgmYW1wO2h3Yy0mZ3Q7aW5mbGlnaHRfbXNnX3Jlcyk7CiYjNDM7CWh3Yy0mZ3Q7bnVtX2luZmxpZ2h0X21zZyA9IDA7CiYjNDM7fQomIzQzOwogaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKQogewogCXUzMiBtYXhfcmVxX21zZ19zaXplLCBtYXhfcmVzcF9tc2dfc2l6ZTsKIAlzdHJ1Y3QgZ2RtYV9kZXYgKmdkID0gJmFtcDtnYy0mZ3Q7aHdjOwogCXN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YzsKLQl1MTYgcV9kZXB0aF9tYXg7CiYjNDM7CXN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqb2xkX2NxX3RhYmxlOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwl1MzIgcV9kZXB0aF9tYXg7CiAJaW50IGVycjsKIAogCWh3YyA9IGt6YWxsb2Nfb2JqKCpod2MpOwpAQCAtNzY0LDEwICYjNDM7MTAwMCwxMSBAQCBpbnQgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZ2QtJmd0O2dkbWFfY29udGV4dCA9IGdjOwotCWdkLSZndDtkcml2ZXJfZGF0YSA9IGh3YzsKIAlod2MtJmd0O2dkbWFfZGV2ID0gZ2Q7CiAJaHdjLSZndDtkZXYgPSBnYy0mZ3Q7ZGV2OwogCWh3Yy0mZ3Q7aHdjX3RpbWVvdXQgPSBIV19DSEFOTkVMX1dBSVRfUkVTT1VSQ0VfVElNRU9VVF9NUzsKJiM0MzsJaHdjLSZndDthY3RpdmVfc2VuZGVycyA9IDA7CiYjNDM7CWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFtcDtnYy0mZ3Q7aHdjX2RyYWluX3dhaXRxKTsKIAogCS8qIEhXQyYjMzk7cyBpbnN0YW5jZSBudW1iZXIgaXMgYWx3YXlzIDAuICovCiAJZ2QtJmd0O2Rldl9pZC5hc191aW50MzIgPSAwOwpAQCAtNzc2LDYgJiM0MzsxMDEzLDE1IEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYykKIAlnZC0mZ3Q7cGRpZCA9IElOVkFMSURfUERJRDsKIAlnZC0mZ3Q7ZG9vcmJlbGwgPSBJTlZBTElEX0RPT1JCRUxMOwogCiYjNDM7CS8qIFB1Ymxpc2ggZHJpdmVyX2RhdGEgbGFzdCwgdW5kZXIgaHdjX2xvY2s6IHRoZSBsb2NrIG9yZGVycyB0aGUgaHdjCiYjNDM7CSAqIGluaXRpYWxpc2F0aW9uIGFib3ZlIGJlZm9yZSB0aGUgcG9pbnRlciBiZWNvbWVzIHZpc2libGUgYW5kCiYjNDM7CSAqIHNlcmlhbGlzZXMgdGhlIHB1Ymxpc2ggYWdhaW5zdCB0aGUgY29udHJvbC1wbGFuZSByZWFkZXJzIGluCiYjNDM7CSAqIG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCksIG1hbmFfbmVlZF9sb2coKSBhbmQgbWFuYV9zZXJ2X3Jlc2V0KCkuCiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2djLSZndDtod2NfbG9jaywgZmxhZ3MpOwomIzQzOwlnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhID0gaHdjOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z2MtJmd0O2h3Y19sb2NrLCBmbGFncyk7CiYjNDM7CiAJLyogbWFuYV9od2NfaW5pdF9xdWV1ZXMoKSBvbmx5IGNyZWF0ZXMgdGhlIHJlcXVpcmVkIGRhdGEgc3RydWN0dXJlcywKIAkgKiBhbmQgZG9lc24mIzM5O3QgdG91Y2ggdGhlIEhXQyBkZXZpY2UuCiAJICovCkBAIC03OTQsOCAmIzQzOzEwNDAsMTMwIEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYykKIAkJZ290byBvdXQ7CiAJfQogCiYjNDM7CS8qIFRoZSBjaGFubmVsIHdhcyBib290c3RyYXBwZWQgYXQgYSBtaW5pbWFsIHF1ZXVlIGRlcHRoLiAgSWYgdGhlCiYjNDM7CSAqIGRldmljZSByZXBvcnRzIGEgaGlnaGVyIG1heGltdW0sIHRlYXIgZG93biBhbmQgcmVidWlsZCB3aXRoCiYjNDM7CSAqIHRoZSBsYXJnZXIgZGVwdGggc28gbW9yZSBIV0MgY29tbWFuZHMgY2FuIGJlIGluIGZsaWdodC4KJiM0MzsJICovCiYjNDM7CWlmIChxX2RlcHRoX21heCAmZ3Q7IEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRIKSB7CiYjNDM7CQkvKiBxX2RlcHRoX21heCBub3cgY2FycmllcyB0aGUgZnVsbCBkZXZpY2UtcmVwb3J0ZWQgdmFsdWUKJiM0MzsJCSAqIChIV0NfSU5JVF9EQVRBX1FVRVVFX0RFUFRIIGlzIDI0LWJpdCkuICBDbGFtcCBpdCB0byB0aGUKJiM0MzsJCSAqIGRlcHRoIHRoZSByZXN0IG9mIHRoZSBkcml2ZXIgc3VwcG9ydHMg4oCUIGNyZWF0ZV9jcSgpIHRha2VzCiYjNDM7CQkgKiBxX2RlcHRoICogMiBhcyBhIHUxNiDigJQgYmVmb3JlIHRoZSBvdmVyZmxvdyBjaGVjayBiZWxvdywgc28KJiM0MzsJCSAqIGFuIG92ZXItbGFyZ2UgYnV0IG90aGVyd2lzZS12YWxpZCBkZXB0aCBpcyByZWR1Y2VkIHRvIHRoZQomIzQzOwkJICogbWF4aW11bSBpbnN0ZWFkIG9mIHdyYXBwaW5nIG9yIGJlaW5nIHJlamVjdGVkLgomIzQzOwkJICovCiYjNDM7CQlpZiAocV9kZXB0aF9tYXggJmd0OyBVMTZfTUFYIC8gMikKJiM0MzsJCQlxX2RlcHRoX21heCA9IFUxNl9NQVggLyAyOwomIzQzOwomIzQzOwkJLyogU2FuaXR5LWNoZWNrIGRldmljZS1yZXBvcnRlZCB2YWx1ZXMgYmVmb3JlIHVzaW5nIHRoZW0KJiM0MzsJCSAqIHRvIHNpemUgRE1BIGFsbG9jYXRpb25zLiAgRW5mb3JjZSBwcm90b2NvbCBtaW5pbXVtcwomIzQzOwkJICogZm9yIG1lc3NhZ2Ugc2l6ZXMgYW5kIGNoZWNrIHRoYXQgcV9kZXB0aCAqIG1heF9tc2dfc2l6ZQomIzQzOwkJICogcGx1cyBhbGlnbm1lbnQgaGVhZHJvb20gZml0cyBpbiB1MzIgKGZvcgomIzQzOwkJICogbWFuYV9od2NfYWxsb2NfZG1hX2J1ZiYjMzk7cyBNQU5BX1BBR0VfQUxJR04pLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIW1heF9yZXFfbXNnX3NpemUgfHwgIW1heF9yZXNwX21zZ19zaXplIHx8CiYjNDM7CQkgICAgbWF4X3JlcV9tc2dfc2l6ZSAmbHQ7IHNpemVvZihzdHJ1Y3QgZ2RtYV9yZXFfaGRyKSB8fAomIzQzOwkJICAgIG1heF9yZXNwX21zZ19zaXplICZsdDsgc2l6ZW9mKHN0cnVjdCBnZG1hX3Jlc3BfaGRyKSB8fAomIzQzOwkJICAgICh1NjQpcV9kZXB0aF9tYXggKiBtYXhfcmVxX21zZ19zaXplICZndDsKJiM0MzsJCQlVMzJfTUFYIC0gTUFOQV9QQUdFX1NJWkUgfHwKJiM0MzsJCSAgICAodTY0KXFfZGVwdGhfbWF4ICogbWF4X3Jlc3BfbXNnX3NpemUgJmd0OwomIzQzOwkJCVUzMl9NQVggLSBNQU5BX1BBR0VfU0laRSkgewomIzQzOwkJCWRldl9lcnIoaHdjLSZndDtkZXYsCiYjNDM7CQkJCSYjMzQ7SFdDOiBpbnZhbGlkIGRpbXMgcT0ldSByZXE9JXUgcmVzcD0ldVxuJiMzNDssCiYjNDM7CQkJCXFfZGVwdGhfbWF4LCBtYXhfcmVxX21zZ19zaXplLAomIzQzOwkJCQltYXhfcmVzcF9tc2dfc2l6ZSk7CiYjNDM7CQkJcV9kZXB0aF9tYXggPSBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSDsKJiM0MzsJCQlnb3RvIHNraXBfcmVpbml0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJZXJyID0gbWFuYV9zbWNfdGVhcmRvd25faHdjKCZhbXA7Z2MtJmd0O3NobV9jaGFubmVsLCBmYWxzZSk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJLyogS2VlcCB1c2luZyB0aGUgYm9vdHN0cmFwLWRlcHRoIGNoYW5uZWwuICovCiYjNDM7CQkJZGV2X2Vycihod2MtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDtGYWlsZWQgdG8gdGVhcmRvd24gSFdDIGZvciByZWluaXQ6ICVkXG4mIzM0OywKJiM0MzsJCQkJZXJyKTsKJiM0MzsJCQlxX2RlcHRoX21heCA9IEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRIOwomIzQzOwkJCWdvdG8gc2tpcF9yZWluaXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlod2MtJmd0O3NldHVwX2FjdGl2ZSA9IGZhbHNlOwomIzQzOwomIzQzOwkJLyogRGVzdHJveSBxdWV1ZXMgZmlyc3Qg4oCUIG1hbmFfZ2RfZGVzdHJveV9jcSBpbnNpZGUKJiM0MzsJCSAqIHVucHVibGlzaGVzIHRoZSBDUSBmcm9tIGNxX3RhYmxlIHZpYQomIzQzOwkJICogcmN1X2Fzc2lnbl9wb2ludGVyKE5VTEwpICYjNDM7IHN5bmNocm9uaXplX3JjdS4KJiM0MzsJCSAqIE11c3QgaGFwcGVuIHdoaWxlIGNxX3RhYmxlIGlzIHN0aWxsIHZhbGlkLgomIzQzOwkJICovCiYjNDM7CQltYW5hX2h3Y19kZXN0cm95X3F1ZXVlcyhod2MpOwomIzQzOwomIzQzOwkJb2xkX2NxX3RhYmxlID0gcmN1X3JlcGxhY2VfcG9pbnRlcihnYy0mZ3Q7Y3FfdGFibGUsIE5VTEwsIHRydWUpOwomIzQzOwkJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CQl2ZnJlZShvbGRfY3FfdGFibGUpOwomIzQzOwomIzQzOwkJZXJyID0gbWFuYV9od2NfaW5pdF9xdWV1ZXMoaHdjLCBxX2RlcHRoX21heCwKJiM0MzsJCQkJCSAgIG1heF9yZXFfbXNnX3NpemUsCiYjNDM7CQkJCQkgICBtYXhfcmVzcF9tc2dfc2l6ZSk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVpbml0IEhXQzogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwkJCWdvdG8gcmVpbml0X2ZhbGxiYWNrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZXJyID0gbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoZ2MsICZhbXA7cV9kZXB0aF9tYXgsCiYjNDM7CQkJCQkJICZhbXA7bWF4X3JlcV9tc2dfc2l6ZSwKJiM0MzsJCQkJCQkgJmFtcDttYXhfcmVzcF9tc2dfc2l6ZSk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmUtZXN0YWJsaXNoIEhXQzogJWRcbiYjMzQ7LAomIzQzOwkJCQllcnIpOwomIzQzOwkJCS8qIGVzdGFibGlzaF9jaGFubmVsIGRvZXMgaW50ZXJuYWwgdGVhcmRvd24gb24KJiM0MzsJCQkgKiBmYWlsdXJlLiAgSWYgdGVhcmRvd24gc3VjY2VlZGVkIChzZXR1cF9hY3RpdmUKJiM0MzsJCQkgKiBjbGVhcmVkKSwgTVNUIGVudHJpZXMgYXJlIGludmFsaWRhdGVkIGFuZCB3ZQomIzQzOwkJCSAqIGNhbiB0cnkgdGhlIGJvb3RzdHJhcCBmYWxsYmFjay4gIElmIHRlYXJkb3duCiYjNDM7CQkJICogYWxzbyBmYWlsZWQgKHNldHVwX2FjdGl2ZSBzdGlsbCBzZXQpLCBoYXJkd2FyZQomIzQzOwkJCSAqIG1hcHBpbmdzIG1heSBzdGlsbCBiZSBhY3RpdmUg4oCUIHNraXAgZmFsbGJhY2suCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKGh3Yy0mZ3Q7c2V0dXBfYWN0aXZlKQomIzQzOwkJCQlnb3RvIG91dDsKJiM0MzsJCQlnb3RvIHJlaW5pdF9mYWxsYmFjazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlnb3RvIHNraXBfcmVpbml0OwomIzQzOwomIzQzO3JlaW5pdF9mYWxsYmFjazoKJiM0MzsJLyogUmVzdG9yZSBib290c3RyYXAtZGVwdGggY2hhbm5lbCBzbyB0aGUgZGV2aWNlIHJlbWFpbnMgZnVuY3Rpb25hbC4KJiM0MzsJICogRnJlZSBjcV90YWJsZSBpZiBpdCB3YXMgYWxsb2NhdGVkIGJ5IGEgcGFydGlhbGx5IHN1Y2Nlc3NmdWwKJiM0MzsJICogZXN0YWJsaXNoIGF0dGVtcHQuCiYjNDM7CSAqLwomIzQzOwlkZXZfd2Fybihod2MtJmd0O2RldiwgJiMzNDtIV0MgcmVpbml0IGZhaWxlZCwgZmFsbGluZyBiYWNrIHRvIGJvb3RzdHJhcCBkZXB0aFxuJiMzNDspOwomIzQzOwomIzQzOwltYW5hX2h3Y19kZXN0cm95X3F1ZXVlcyhod2MpOwomIzQzOwomIzQzOwlvbGRfY3FfdGFibGUgPSByY3VfcmVwbGFjZV9wb2ludGVyKGdjLSZndDtjcV90YWJsZSwgTlVMTCwgdHJ1ZSk7CiYjNDM7CXN5bmNocm9uaXplX3JjdSgpOwomIzQzOwl2ZnJlZShvbGRfY3FfdGFibGUpOwomIzQzOwomIzQzOwllcnIgPSBtYW5hX2h3Y19pbml0X3F1ZXVlcyhod2MsIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRILAomIzQzOwkJCQkgICBIV19DSEFOTkVMX01BWF9SRVFVRVNUX1NJWkUsCiYjNDM7CQkJCSAgIEhXX0NIQU5ORUxfTUFYX1JFU1BPTlNFX1NJWkUpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlkZXZfZXJyKGh3Yy0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZXN0b3JlIGJvb3RzdHJhcCBIV0M6ICVkXG4mIzM0OywgZXJyKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKGdjLCAmYW1wO3FfZGVwdGhfbWF4LCAmYW1wO21heF9yZXFfbXNnX3NpemUsCiYjNDM7CQkJCQkgJmFtcDttYXhfcmVzcF9tc2dfc2l6ZSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlLWVzdGFibGlzaCBib290c3RyYXAgSFdDOiAlZFxuJiMzNDssCiYjNDM7CQkJZXJyKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7c2tpcF9yZWluaXQ6CiYjNDM7CiYjNDM7CS8qIE5vIFJDVSBuZWVkZWQ6IHN0aWxsIGluIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsLCB0aGUKJiM0MzsJICogcG9pbnRlciBoYXMgbm90IGJlZW4gcHVibGlzaGVkIHRvIGNvbmN1cnJlbnQgc2VuZGVycyB5ZXQuCiYjNDM7CSAqLwogCWVyciA9IG1hbmFfaHdjX3Rlc3RfY2hhbm5lbChnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhLAotCQkJCSAgICBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSCwKJiM0MzsJCQkJICAgIGh3Yy0mZ3Q7bnVtX2luZmxpZ2h0X21zZywKIAkJCQkgICAgbWF4X3JlcV9tc2dfc2l6ZSwgbWF4X3Jlc3BfbXNnX3NpemUpOwogCWlmIChlcnIpIHsKIAkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gdGVzdCBIV0M6ICVkXG4mIzM0OywgZXJyKTsKQEAgLTgxMCwyNyAmIzQzOzExNzgsMTk1IEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYykKIAogdm9pZCBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpCiB7CiYjNDM7CS8qIFRoaXMgaXMgdGhlIG9ubHkgZGVzdHJveSBlbnRyeSBwb2ludC4gIGRyaXZlcl9kYXRhIGlzIHJlYWQKJiM0MzsJICogcGxhaW5seSBoZXJlICh0ZWFyZG93biBpcyBzZXJpYWxpc2VkIGFnYWluc3Qgb3RoZXIgdGVhcmRvd24pOwomIzQzOwkgKiBpdCBpcyBjbGVhcmVkIHVuZGVyIGh3Y19sb2NrIGJlbG93IGJlZm9yZSBod2MgaXMgZnJlZWQuCiYjNDM7CSAqLwogCXN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyA9IGdjLSZndDtod2MuZHJpdmVyX2RhdGE7CiYjNDM7CXN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqb2xkX2NxX3RhYmxlOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFod2MpCiAJCXJldHVybjsKIAotCS8qIGdjLSZndDttYXhfbnVtX2NxcyBpcyBzZXQgaW4gbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKCkuIElmIGl0JiMzOTtzCi0JICogbm9uLXplcm8sIHRoZSBIV0Mgd29ya2VkIGFuZCB3ZSBzaG91bGQgdGVhciBkb3duIHRoZSBIV0MgaGVyZS4KJiM0MzsJLyogUHJldmVudCBuZXcgcmVxdWVzdHMgZnJvbSBzdGFydGluZyBhbmQgd2FrZSBhbnkKJiM0MzsJICogdGhyZWFkcyB3YWl0aW5nIGZvciBhIGZyZWUgbXNnIHNsb3QuICBTZXQgY2hhbm5lbF91cCB1bmRlcgomIzQzOwkgKiB0aGUgYml0bWFwIGxvY2sgc28gZ2V0X21zZ19pbmRleCgpIGNhbm5vdCBhY3F1aXJlIGEgc2xvdAomIzQzOwkgKiBhbmQgaW5jcmVtZW50IGFjdGl2ZV9zZW5kZXJzIGFmdGVyIHRoaXMgcG9pbnQuCiYjNDM7CSAqCiYjNDM7CSAqIElmIGNoYW5uZWxfdXAgaXMgYWxyZWFkeSBmYWxzZSAoZS5nLiBpbml0IGZhaWxlZCBiZWZvcmUKJiM0MzsJICogdGhlIGNoYW5uZWwgd2FzIGVzdGFibGlzaGVkKSwgc2tpcCB0aGUgbG9jayDigJQgaXQgbWF5IG5vdAomIzQzOwkgKiBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgeWV0LCBhbmQgbm8gc2VuZGVycyBjYW4gYmUgYWN0aXZlLgogCSAqLwotCWlmIChnYy0mZ3Q7bWF4X251bV9jcXMgJmd0OyAwKSB7Ci0JCW1hbmFfc21jX3RlYXJkb3duX2h3YygmYW1wO2djLSZndDtzaG1fY2hhbm5lbCwgZmFsc2UpOwotCQlnYy0mZ3Q7bWF4X251bV9jcXMgPSAwOwomIzQzOwlpZiAoaHdjLSZndDtjaGFubmVsX3VwKSB7CiYjNDM7CQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2h3Yy0mZ3Q7aW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7CiYjNDM7CQlod2MtJmd0O2NoYW5uZWxfdXAgPSBmYWxzZTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtod2MtJmd0O2luZmxpZ2h0X21zZ19yZXMubG9jaywgZmxhZ3MpOwomIzQzOwkJd2FrZV91cF9hbGwoJmFtcDtod2MtJmd0O21zZ193YWl0cSk7CiAJfQogCiYjNDM7CS8qIENsZWFyIHRoZSBwb2ludGVyIHVuZGVyIGh3Y19sb2NrIHNvIG5ldyBjYWxsZXJzIGluCiYjNDM7CSAqIG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCkgc2VlIE5VTEwgYW5kIHJldHVybiAtRU5PREVWLiAgVGhlIGxvY2sKJiM0MzsJICogbWFrZXMgdGhlIHJlYWRlcnMmIzM5OyAmIzM0O2xvYWQgZHJpdmVyX2RhdGEgJiM0MzsgYWN0aXZlX3NlbmRlcnMmIzQzOyYjNDM7JiMzNDsKJiM0MzsJICogYXRvbWljIGFnYWluc3QgdGhpcyBzdG9yZSwgc28gb25jZSBpdCByZXR1cm5zIG5vIG5ldyBzZW5kZXIgY2FuCiYjNDM7CSAqIHRha2UgYSByZWZlcmVuY2U7IHRoZSBhY3RpdmVfc2VuZGVycyBkcmFpbiBiZWxvdyB3YWl0cyBvdXQgdGhvc2UKJiM0MzsJICogdGhhdCBhbHJlYWR5IGRpZCwgYmVmb3JlIHRoZWlyIGh3YyBpcyBmcmVlZC4KJiM0MzsJICovCiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Z2MtJmd0O2h3Y19sb2NrLCBmbGFncyk7CiYjNDM7CWdjLSZndDtod2MuZHJpdmVyX2RhdGEgPSBOVUxMOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z2MtJmd0O2h3Y19sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CS8qIEZvcmNlLWNvbXBsZXRlIGFueSBpbi1mbGlnaHQgc2VuZGVycyBzbyB0aGV5IG9ic2VydmUgLUVOT0RFViwKJiM0MzsJICogcmV0dXJuLCBhbmQgZHJvcCB0aGVpciByZWZlcmVuY2VzLiAgVGhpcyBydW5zIGJlZm9yZSB0aGUgSFdDCiYjNDM7CSAqIGhhcmR3YXJlIHRlYXJkb3duIGJlbG93LCBzbyBhIGxpdmUgaW50ZXJydXB0IG1heSBzdGlsbCBkZWxpdmVyCiYjNDM7CSAqIGEgcmVhbCByZXNwb25zZSB2aWEgaGFuZGxlX3Jlc3AoKSBjb25jdXJyZW50bHkg4oCUIHRoYXQgaXMgc2FmZQomIzQzOwkgKiBiZWNhdXNlIHRoZSBwZXItc2xvdCByZWZjb3VudCBtb2RlbCB0b2xlcmF0ZXMgYSBjb25jdXJyZW50CiYjNDM7CSAqIGNvbXBsZXRlKCkgYW5kIGJvdGggcGF0aHMgKGhhbmRsZV9yZXNwIGFuZCB0aGlzIGxvb3ApIGRyb3AKJiM0MzsJICogdGhlaXIgcmVmcyB3aXRob3V0IGRvdWJsZS1yZWxlYXNpbmcgdGhlIHNsb3QuCiYjNDM7CSAqLwomIzQzOwlpZiAoaHdjLSZndDtjYWxsZXJfY3R4KSB7CiYjNDM7CQlzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDsKJiM0MzsJCWludCBpOwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IGh3Yy0mZ3Q7bnVtX2luZmxpZ2h0X21zZzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAoIXRlc3RfYml0KGksIGh3Yy0mZ3Q7aW5mbGlnaHRfbXNnX3Jlcy5tYXApKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQljdHggPSAmYW1wO2h3Yy0mZ3Q7Y2FsbGVyX2N0eFtpXTsKJiM0MzsKJiM0MzsJCQkvKiBXYWtlIHNlbmRlcnMgYmxvY2tlZCBvbiB3YWl0X2Zvcl9jb21wbGV0aW9uLgomIzQzOwkJCSAqIFNldCBlcnJvciB1bmRlciBsb2NrIHRvIGF2b2lkIHJhY2luZyB3aXRoCiYjNDM7CQkJICogaGFuZGxlX3Jlc3AoKSB3aGljaCB3cml0ZXMgZXJyb3IgdW5kZXIgdGhlCiYjNDM7CQkJICogc2FtZSBsb2NrLiAgVGhlIHNlbmRlciBOVUxMcyBvdXRwdXRfYnVmCiYjNDM7CQkJICogYWZ0ZXIgd2FraW5nIOKAlCBkb2luZyBpdCBoZXJlIHdvdWxkIHJhY2UKJiM0MzsJCQkgKiB3aXRoIGEgc2VuZGVyIHRoYXQgaGFzbiYjMzk7dCBzZXQgb3V0cHV0X2J1ZiB5ZXQuCiYjNDM7CQkJICovCiYjNDM7CQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtjdHgtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCQljdHgtJmd0O2Vycm9yID0gLUVOT0RFVjsKJiM0MzsJCQljb21wbGV0ZSgmYW1wO2N0eC0mZ3Q7Y29tcF9ldmVudCk7CiYjNDM7CQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2N0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGFsbCBzZW5kZXIgdGhyZWFkcyB0byBmaW5pc2ggYW5kIGRyb3AgdGhlaXIgcmVmcwomIzQzOwkgKiBiZWZvcmUgdG91Y2hpbmcgdGhlIGhhcmR3YXJlIG9yIGZyZWVpbmcgYW55dGhpbmcuICBEcmFpbmluZwomIzQzOwkgKiBoZXJlIC0tIGFoZWFkIG9mIHRoZSB0ZWFyZG93bi9GTFIgYmxvY2sgYmVsb3cgLS0gZ3VhcmFudGVlcyBubwomIzQzOwkgKiBpbi1mbGlnaHQgc2VuZGVyIGlzIHN0aWxsIHJ1bm5pbmcgd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb24KJiM0MzsJICogYW55IHBhdGgsIGluY2x1ZGluZyB0aGUgRkxSLWZhaWx1cmUgZWFybHkgcmV0dXJuOyBvdGhlcndpc2UgYQomIzQzOwkgKiBzdHJhbmRlZCBzZW5kZXIgd291bGQgZGVyZWZlcmVuY2UgZ2MtJmd0O2h3Y19sb2NrIC8KJiM0MzsJICogZ2MtJmd0O2h3Y19kcmFpbl93YWl0cSBhZnRlciB0aGUgY2FsbGVyIGZyZWVzIGdjLgomIzQzOwkgKiBBZnRlciB0aGlzLCBvbmx5IHNsb3RzIGhlbGQgYnkgdGltZWQtb3V0IHNlbmRlcnMgd2hvc2UKJiM0MzsJICogaGFuZGxlX3Jlc3AoKSBuZXZlciByYW4gcmVtYWluIGluIHRoZSBiaXRtYXAuCiYjNDM7CSAqCiYjNDM7CSAqIGFjdGl2ZV9zZW5kZXJzIGlzIG9ubHkgZXZlciBtb2RpZmllZCB1bmRlciBod2NfbG9jaywgYW5kIHRoZQomIzQzOwkgKiBsYXN0IHNlbmRlciYjMzk7cyB3YWtlX3VwKCkgcnVucyB1bmRlciB0aGF0IGxvY2sgYmVmb3JlIGl0IGlzCiYjNDM7CSAqIHJlbGVhc2VkLiAgRXZhbHVhdGluZyB0aGUgY29uZGl0aW9uIHVuZGVyIGh3Y19sb2NrIHRoZXJlZm9yZQomIzQzOwkgKiBndWFyYW50ZWVzIHRoYXQgb25jZSB3ZSBvYnNlcnZlIDAgdGhlIHdha2luZyBzZW5kZXIgaGFzCiYjNDM7CSAqIGFscmVhZHkgZHJvcHBlZCB0aGUgbG9jayAtLSBpLmUuIGZpbmlzaGVkIHRvdWNoaW5nIGdjIC0tIHNvIGl0CiYjNDM7CSAqIGNhbm5vdCByYWNlIHRoZSBjYWxsZXIgZnJlZWluZyBnYyBhZnRlciB0aGlzIHJldHVybnMuCiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2tfaXJxKCZhbXA7Z2MtJmd0O2h3Y19sb2NrKTsKJiM0MzsJd2FpdF9ldmVudF9sb2NrX2lycShnYy0mZ3Q7aHdjX2RyYWluX3dhaXRxLAomIzQzOwkJCSAgICBod2MtJmd0O2FjdGl2ZV9zZW5kZXJzID09IDAsIGdjLSZndDtod2NfbG9jayk7CiYjNDM7CXNwaW5fdW5sb2NrX2lycSgmYW1wO2djLSZndDtod2NfbG9jayk7CiYjNDM7CiYjNDM7CS8qIFRlYXIgZG93biB0aGUgSFdDIGlmIHNldHVwX2h3YyBwcmV2aW91c2x5IGFjdGl2YXRlZCBNU1QgZW50cmllcy4KJiM0MzsJICogVGhpcyBpcyB0aGUgZGVmaW5pdGl2ZSBmbGFnIOKAlCB1bmxpa2UgbWF4X251bV9jcXMgd2hpY2ggZGVwZW5kcwomIzQzOwkgKiBvbiB0aGUgaW5pdCBFUUUgYXJyaXZpbmcuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSByZXR1cm4gdmFsdWUgaXMgaW50ZW50aW9uYWxseSBub3QgY2hlY2tlZC4gIFRoaXMgaXMgdGhlCiYjNDM7CSAqIHRlcm1pbmFsIGNsZWFudXAgcGF0aCAoZGV2aWNlIHJlbW92YWwsIHN1c3BlbmQsIG9yIGluaXQKJiM0MzsJICogZmFpbHVyZSkg4oCUIHJlc291cmNlcyBtdXN0IGJlIGZyZWVkIHJlZ2FyZGxlc3MuICBJZiB0ZWFyZG93bgomIzQzOwkgKiBmYWlscywgaGFyZHdhcmUgbWF5IHN0aWxsIGhhdmUgYWN0aXZlIE1TVCBlbnRyaWVzLCBidXQ6CiYjNDM7CSAqCiYjNDM7CSAqICAtIEludGVycnVwdHM6IG1hbmFfaHdjX2Rlc3Ryb3lfY3EoKSBiZWxvdyBjYWxscwomIzQzOwkgKiAgICBtYW5hX2dkX2RlcmVnaXN0ZXJfaXJxKCkgd2hpY2ggcmVtb3ZlcyB0aGUgSFdDIEVRIGZyb20KJiM0MzsJICogICAgdGhlIGludGVycnVwdCBkaXNwYXRjaCBsaXN0IHZpYSBsaXN0X2RlbF9yY3UoKSAmIzQzOwomIzQzOwkgKiAgICBzeW5jaHJvbml6ZV9yY3UoKS4gIEFmdGVyIHRoYXQsIG5vIGludGVycnVwdCBoYW5kbGVyIGNhbgomIzQzOwkgKiAgICBpbnZva2UgaGFuZGxlX3Jlc3AoKSBvciBhY2Nlc3MgQ1EvUlEgYnVmZmVycyDigJQgZXZlbiBpZgomIzQzOwkgKiAgICB0aGUgSVJRIGlzIHNoYXJlZCB3aXRoIGRhdGEgcGF0aCBxdWV1ZXMuCiYjNDM7CSAqCiYjNDM7CSAqICAtIERNQTogbWFuYV9od2NfZGVzdHJveV93cSgpIGZyZWVzIERNQSBidWZmZXJzIHZpYQomIzQzOwkgKiAgICBkbWFfZnJlZV9jb2hlcmVudCgpIHdoaWNoIHVubWFwcyB0aGUgSU9WQSBmcm9tIHRoZQomIzQzOwkgKiAgICBJT01NVS4gIEFueSBzdGFsZSBoYXJkd2FyZSBETUEgdG8gdGhlIG9sZCBhZGRyZXNzCiYjNDM7CSAqICAgIGZhdWx0cyBhdCB0aGUgSU9NTVUsIG5vdCBpbiBrZXJuZWwgbWVtb3J5LgomIzQzOwkgKi8KJiM0MzsJaWYgKGh3Yy0mZ3Q7c2V0dXBfYWN0aXZlKSB7CiYjNDM7CQlpbnQgdGRfZXJyID0gbWFuYV9zbWNfdGVhcmRvd25faHdjKCZhbXA7Z2MtJmd0O3NobV9jaGFubmVsLCBmYWxzZSk7CiYjNDM7CiYjNDM7CQlpZiAodGRfZXJyKSB7CiYjNDM7CQkJZGV2X2VycihnYy0mZ3Q7ZGV2LCAmIzM0O0hXQyB0ZWFyZG93biBmYWlsZWQ6ICVkLCBpc3N1aW5nIEZMUlxuJiMzNDssCiYjNDM7CQkJCXRkX2Vycik7CiYjNDM7CiYjNDM7CQkJLyogT24gc3lzdGVtcyB3aXRob3V0IElPTU1VLCBmcmVlaW5nIERNQSBtZW1vcnkgd2l0aAomIzQzOwkJCSAqIGFjdGl2ZSBoYXJkd2FyZSBNU1QgbWFwcGluZ3Mgcmlza3MgbWVtb3J5IGNvcnJ1cHRpb24uCiYjNDM7CQkJICogSXNzdWUgRkxSIHRvIGZvcmNlLXJlc2V0IHRoZSBkZXZpY2UgYW5kIGludmFsaWRhdGUKJiM0MzsJCQkgKiBhbGwgaGFyZHdhcmUgc3RhdGUgaW5jbHVkaW5nIE1TVCBlbnRyaWVzLgomIzQzOwkJCSAqLwomIzQzOwkJCXRkX2VyciA9IHBjaWVfZmxyKHRvX3BjaV9kZXYoZ2MtJmd0O2RldikpOwomIzQzOwkJCWlmICh0ZF9lcnIpIHsKJiM0MzsJCQkJLyogRGV2aWNlIHdlZGdlZDogdGVhcmRvd24gYW5kIEZMUgomIzQzOwkJCQkgKiBib3RoIGZhaWxlZCwgc28gaGFyZHdhcmUgbWF5IHN0aWxsCiYjNDM7CQkJCSAqIERNQSBpbnRvIG91ciBxdWV1ZSBidWZmZXJzLiAgTGVhawomIzQzOwkJCQkgKiBhbGwgSFdDIERNQSBidWZmZXJzIC0tIGFuZCB0aGUgRVEKJiM0MzsJCQkJICogSVJRIHJlZ2lzdHJhdGlvbiwgd2hvc2Ugc2FmZSByZW1vdmFsCiYjNDM7CQkJCSAqIG5lZWRzIHRob3NlIHF1ZXVlcyAtLSBpbnN0ZWFkIG9mCiYjNDM7CQkJCSAqIGZyZWVpbmcgbWVtb3J5IHRoZSBkZXZpY2UgY2FuIHN0aWxsCiYjNDM7CQkJCSAqIHJlYWNoOyB3aXRob3V0IGFuIElPTU1VIHRoZSBmcmVlZAomIzQzOwkJCQkgKiBwYWdlcyBjb3VsZCBiZSByZXVzZWQgdW5kZXIgbGl2ZQomIzQzOwkJCQkgKiBETUEuCiYjNDM7CQkJCSAqLwomIzQzOwomIzQzOwkJCQlkZXZfd2FybihnYy0mZ3Q7ZGV2LAomIzQzOwkJCQkJICYjMzQ7TGVha2VkIEhXQyBETUEgYnVmZmVycyAoQ1EvUlEvVFhRKSB0byBwcmV2ZW50IG1lbW9yeSBjb3JydXB0aW9uLiBEZXZpY2UgaXMgbm8gbG9uZ2VyIHVzYWJsZS5cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJCQkJLyogRG8gbm90IGNhbGwgZGVzdHJveV9jcS93cSBiZWxvdzsKJiM0MzsJCQkJICogdGhleSB3b3VsZCBkbWFfZnJlZV9jb2hlcmVudCgpLgomIzQzOwkJCQkgKiBMZWF2ZSBod2MvY3EvcnhxL3R4cSBhbGxvY2F0ZWQuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCWRldl9pbmZvKGdjLSZndDtkZXYsICYjMzQ7RkxSIHN1Y2NlZWRlZCwgaGFyZHdhcmUgc3RhdGUgY2xlYXJlZFxuJiMzNDspOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaHdjLSZndDtzZXR1cF9hY3RpdmUgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUZWFyIGRvd24gdGhlIEhXQyBDUSBvYmplY3QgZmlyc3Qg4oCUIG1hbmFfaHdjX2Rlc3Ryb3lfY3EoKQomIzQzOwkgKiBib3RoIHVucHVibGlzaGVzIHRoZSBDUSBmcm9tIGNxX3RhYmxlICgmIzQzO3N5bmNocm9uaXplX3JjdSkgYW5kCiYjNDM7CSAqIGRlcmVnaXN0ZXJzIHRoZSBIV0MgRVEgZnJvbSB0aGUgaW50ZXJydXB0IGhhbmRsZXImIzM5O3MgUkNVIGxpc3QKJiM0MzsJICogKHZpYSBtYW5hX2dkX2RlcmVnaXN0ZXJfaXJxICYjNDM7IHN5bmNocm9uaXplX3JjdSksIGd1YXJhbnRlZWluZwomIzQzOwkgKiBubyBpbnRlcnJ1cHQgaGFuZGxlciBjYW4gYWNjZXNzIFJRL1RYUSBidWZmZXJzIGFmdGVyIHRoaXMKJiM0MzsJICogcG9pbnQuICBUaGUgYWN0aXZlX3NlbmRlcnMgZHJhaW4gYWJvdmUgZW5zdXJlcyBubyBzZW5kZXIgaXMKJiM0MzsJICogYWNjZXNzaW5nIHRoZSBDUSB2aWEgdHhxLSZndDtod2NfY3Egd2hlbiBpdCBpcyBkZXN0cm95ZWQuICBUaGVuCiYjNDM7CSAqIGRlc3Ryb3kgVFhRIGFuZCBSUSBzYWZlbHkuCiYjNDM7CSAqLwomIzQzOwlpZiAoaHdjLSZndDtjcSkKJiM0MzsJCW1hbmFfaHdjX2Rlc3Ryb3lfY3EoaHdjLSZndDtnZG1hX2Rldi0mZ3Q7Z2RtYV9jb250ZXh0LCBod2MtJmd0O2NxKTsKJiM0MzsKIAlpZiAoaHdjLSZndDt0eHEpCiAJCW1hbmFfaHdjX2Rlc3Ryb3lfd3EoaHdjLCBod2MtJmd0O3R4cSk7CiAKIAlpZiAoaHdjLSZndDtyeHEpCiAJCW1hbmFfaHdjX2Rlc3Ryb3lfd3EoaHdjLCBod2MtJmd0O3J4cSk7CiAKLQlpZiAoaHdjLSZndDtjcSkKLQkJbWFuYV9od2NfZGVzdHJveV9jcShod2MtJmd0O2dkbWFfZGV2LSZndDtnZG1hX2NvbnRleHQsIGh3Yy0mZ3Q7Y3EpOwomIzQzOwkvKiBSZWxlYXNlIGFueSBzbG90cyBzdGlsbCBoZWxkIOKAlCB0aGVzZSBiZWxvbmcgdG8gdGltZWQtb3V0CiYjNDM7CSAqIHNlbmRlcnMgd2hlcmUgaGFuZGxlX3Jlc3AoKSBuZXZlciByYW4gKHJlZmNvdW50ID0gMSB3aXRoCiYjNDM7CSAqIGhhbmRsZV9yZXNwJiMzOTtzIHJlZiBzdGlsbCBvdXRzdGFuZGluZykuCiYjNDM7CSAqLwomIzQzOwlpZiAoaHdjLSZndDtjYWxsZXJfY3R4KSB7CiYjNDM7CQlzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDsKJiM0MzsJCWludCBpOwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IGh3Yy0mZ3Q7bnVtX2luZmxpZ2h0X21zZzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAoIXRlc3RfYml0KGksIGh3Yy0mZ3Q7aW5mbGlnaHRfbXNnX3Jlcy5tYXApKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQljdHggPSAmYW1wO2h3Yy0mZ3Q7Y2FsbGVyX2N0eFtpXTsKJiM0MzsJCQlod2NfY3R4X3B1dChod2MsIGN0eCk7CiYjNDM7CQl9CiYjNDM7CX0KIAogCWtmcmVlKGh3Yy0mZ3Q7Y2FsbGVyX2N0eCk7CiAJaHdjLSZndDtjYWxsZXJfY3R4ID0gTlVMTDsKQEAgLTg0NSwxMSAmIzQzOzEzODEsMTEgQEAgdm9pZCBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpCiAJaHdjLSZndDtod2NfdGltZW91dCA9IDA7CiAKIAlrZnJlZShod2MpOwotCWdjLSZndDtod2MuZHJpdmVyX2RhdGEgPSBOVUxMOwogCWdjLSZndDtod2MuZ2RtYV9jb250ZXh0ID0gTlVMTDsKIAotCXZmcmVlKGdjLSZndDtjcV90YWJsZSk7Ci0JZ2MtJmd0O2NxX3RhYmxlID0gTlVMTDsKJiM0MzsJb2xkX2NxX3RhYmxlID0gcmN1X3JlcGxhY2VfcG9pbnRlcihnYy0mZ3Q7Y3FfdGFibGUsIE5VTEwsIHRydWUpOwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0MzsJdmZyZWUob2xkX2NxX3RhYmxlKTsKIH0KIAogaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLApAQCAtODYwLDEzICYjNDM7MTM5NiwxNyBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sCiAJc3RydWN0IGh3Y193cSAqdHhxID0gaHdjLSZndDt0eHE7CiAJc3RydWN0IGdkbWFfcmVxX2hkciAqcmVxX21zZzsKIAlzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgZGVzdF92cmNxID0gMDsKIAl1MzIgZGVzdF92cnEgPSAwOwogCXUzMiBjb21tYW5kOwomIzQzOwl1MzIgc3RhdHVzOwogCXUxNiBtc2dfaWQ7CiAJaW50IGVycjsKIAotCW1hbmFfaHdjX2dldF9tc2dfaW5kZXgoaHdjLCAmYW1wO21zZ19pZCk7CiYjNDM7CWVyciA9IG1hbmFfaHdjX2dldF9tc2dfaW5kZXgoaHdjLCAmYW1wO21zZ19pZCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwogCiAJdHhfd3IgPSAmYW1wO3R4cS0mZ3Q7bXNnX2J1Zi0mZ3Q7cmVxc1ttc2dfaWRdOwogCkBAIC04NzgsOCAmIzQzOzE0MTgsMTEgQEAgaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLAogCX0KIAogCWN0eCA9IGh3Yy0mZ3Q7Y2FsbGVyX2N0eCAmIzQzOyBtc2dfaWQ7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Y3R4LSZndDtsb2NrLCBmbGFncyk7CiAJY3R4LSZndDtvdXRwdXRfYnVmID0gcmVzcDsKIAljdHgtJmd0O291dHB1dF9idWZsZW4gPSByZXNwX2xlbjsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2N0eC0mZ3Q7bG9jaywgZmxhZ3MpOwogCiAJcmVxX21zZyA9IChzdHJ1Y3QgZ2RtYV9yZXFfaGRyICopdHhfd3ItJmd0O2J1Zl92YTsKIAlpZiAocmVxKQpAQCAtODk1LDggJiM0MzsxNDM4LDE0IEBAIGludCBtYW5hX2h3Y19zZW5kX3JlcXVlc3Qoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVxX2xlbiwKIAkJZGVzdF92cmNxID0gaHdjLSZndDtwZl9kZXN0X3ZyY3FfaWQ7CiAJfQogCiYjNDM7CS8qIFRha2UgaGFuZGxlX3Jlc3AmIzM5O3MgcmVmIGJlZm9yZSBwb3N0aW5nIOKAlCBoYXJkd2FyZSBjYW4gcmVzcG9uZAomIzQzOwkgKiBpbW1lZGlhdGVseSBhZnRlciB0aGUgZG9vcmJlbGwgcmluZy4KJiM0MzsJICovCiYjNDM7CXJlZmNvdW50X2luYygmYW1wO2N0eC0mZ3Q7cmVmY250KTsKJiM0MzsKIAllcnIgPSBtYW5hX2h3Y19wb3N0X3R4X3dxZSh0eHEsIHR4X3dyLCBkZXN0X3ZycSwgZGVzdF92cmNxLCBmYWxzZSk7CiAJaWYgKGVycikgewomIzQzOwkJcmVmY291bnRfZGVjKCZhbXA7Y3R4LSZndDtyZWZjbnQpOwogCQlkZXZfZXJyKGh3Yy0mZ3Q7ZGV2LCAmIzM0O0hXQzogRmFpbGVkIHRvIHBvc3Qgc2VuZCBXUUU6ICVkXG4mIzM0OywgZXJyKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtOTA3LDMxICYjNDM7MTQ1Niw4NiBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sCiAJCQlkZXZfZXJyKGh3Yy0mZ3Q7ZGV2LCAmIzM0O0NvbW1hbmQgMHgleCB0aW1lZCBvdXQ6ICV1IG1zXG4mIzM0OywKIAkJCQljb21tYW5kLCBod2MtJmd0O2h3Y190aW1lb3V0KTsKIAotCQkvKiBSZWR1Y2UgZnVydGhlciB3YWl0aW5nIGlmIEhXQyBubyByZXNwb25zZSAqLwomIzQzOwkJLyogTlVMTCBvdXQgb3V0cHV0X2J1ZiBzbyBhIGxhdGUgaGFuZGxlX3Jlc3AoKSB3b24mIzM5O3Qgd3JpdGUKJiM0MzsJCSAqIGludG8gdGhlIGNhbGxlciYjMzk7cyBidWZmZXIgYWZ0ZXIgdGhlIHNlbmRlciByZXR1cm5zLCB0aGVuCiYjNDM7CQkgKiBjaGVjayB3aGV0aGVyIGhhbmRsZV9yZXNwKCkgYWxyZWFkeSBkZWxpdmVyZWQgYSB2YWxpZAomIzQzOwkJICogcmVzcG9uc2UgYmV0d2VlbiB0aGUgdGltZW91dCBmaXJpbmcgYW5kIHRoaXMgbG9jawomIzQzOwkJICogYWNxdWlzaXRpb24g4oCUIGN0eC0mZ3Q7ZXJyb3IgIT0gLUVJTlBST0dSRVNTIG1lYW5zIGl0IHJhbi4KJiM0MzsJCSAqLwomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtjdHgtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCWN0eC0mZ3Q7b3V0cHV0X2J1ZiA9IE5VTEw7CiYjNDM7CQllcnIgPSBjdHgtJmd0O2Vycm9yOwomIzQzOwkJc3RhdHVzID0gY3R4LSZndDtzdGF0dXNfY29kZTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjdHgtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJCWlmIChlcnIgIT0gLUVJTlBST0dSRVNTKSB7CiYjNDM7CQkJLyogaGFuZGxlX3Jlc3AoKSBkZWxpdmVyZWQgYSB2YWxpZCByZXNwb25zZSBqdXN0IGFmdGVyCiYjNDM7CQkJICogdGhlIHRpbWVvdXQgZmlyZWQuICBUaGUgaGFyZHdhcmUgaXMgYWxpdmUsIHNvIHVzZQomIzQzOwkJCSAqIHRoZSByZXNwb25zZSBhbmQgbGVhdmUgdGhlIGNoYW5uZWwgdXNhYmxlOyBkbyBub3QKJiM0MzsJCQkgKiBsYXRjaCBod2NfdGltZWRfb3V0IG9yIGRlZ3JhZGUgaHdjX3RpbWVvdXQgZm9yIHdoYXQKJiM0MzsJCQkgKiB0dXJuZWQgb3V0IHRvIGJlIGEgdHJhbnNpZW50IHJhY2UuCiYjNDM7CQkJICovCiYjNDM7CQkJaHdjX2N0eF9wdXQoaHdjLCBjdHgpOwomIzQzOwkJCWdvdG8gY2hlY2tfc3RhdHVzOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogR2VudWluZSB0aW1lb3V0OiBubyByZXNwb25zZSBhcnJpdmVkLiAgUmVkdWNlIGZ1cnRoZXIKJiM0MzsJCSAqIHdhaXRpbmcsIGFuZCBtYXJrIHRoZSBjaGFubmVsIHRpbWVkIG91dCB1bmRlciB0aGUgYml0bWFwCiYjNDM7CQkgKiBsb2NrIHNvIGdldF9tc2dfaW5kZXgoKSBjYW5ub3QgYWNxdWlyZSBuZXcgc2xvdHMgYWZ0ZXIgdGhpcy4KJiM0MzsJCSAqLwogCQlpZiAoaHdjLSZndDtod2NfdGltZW91dCAmZ3Q7IDEpCiAJCQlod2MtJmd0O2h3Y190aW1lb3V0ID0gMTsKIAomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtod2MtJmd0O2luZmxpZ2h0X21zZ19yZXMubG9jaywgZmxhZ3MpOwomIzQzOwkJaHdjLSZndDtod2NfdGltZWRfb3V0ID0gdHJ1ZTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtod2MtJmd0O2luZmxpZ2h0X21zZ19yZXMubG9jaywgZmxhZ3MpOwomIzQzOwkJd2FrZV91cF9hbGwoJmFtcDtod2MtJmd0O21zZ193YWl0cSk7CiYjNDM7CiAJCWVyciA9IC1FVElNRURPVVQ7Ci0JCWdvdG8gb3V0OwomIzQzOwkJaHdjX2N0eF9wdXQoaHdjLCBjdHgpOwomIzQzOwkJZ290byBkb25lOwogCX0KIAotCWlmIChjdHgtJmd0O2Vycm9yKSB7Ci0JCWVyciA9IGN0eC0mZ3Q7ZXJyb3I7Ci0JCWdvdG8gb3V0OwotCX0KJiM0MzsJLyogTlVMTCBvdXRwdXRfYnVmIHNvIGEgbGF0ZSBoYW5kbGVfcmVzcCgpIHdvbiYjMzk7dCBtZW1jcHkgaW50bwomIzQzOwkgKiB0aGUgY2FsbGVyJiMzOTtzIGJ1ZmZlciBhZnRlciB0aGUgc2VuZGVyIGV4aXRzLiAgUmVhZCBlcnJvciBhbmQKJiM0MzsJICogc3RhdHVzX2NvZGUgdW5kZXIgdGhlIHNhbWUgbG9jayDigJQgYWZ0ZXIgaHdjX2N0eF9wdXQgdGhlIHNsb3QKJiM0MzsJICogbWF5IGJlIHJldXNlZCBhbmQgdGhlc2UgZmllbGRzIG92ZXJ3cml0dGVuLgomIzQzOwkgKi8KJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtjdHgtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJY3R4LSZndDtvdXRwdXRfYnVmID0gTlVMTDsKJiM0MzsJZXJyID0gY3R4LSZndDtlcnJvcjsKJiM0MzsJc3RhdHVzID0gY3R4LSZndDtzdGF0dXNfY29kZTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2N0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwlod2NfY3R4X3B1dChod2MsIGN0eCk7CiYjNDM7CiYjNDM7Y2hlY2tfc3RhdHVzOgomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBkb25lOwogCi0JaWYgKGN0eC0mZ3Q7c3RhdHVzX2NvZGUgJmFtcDsmYW1wOyBjdHgtJmd0O3N0YXR1c19jb2RlICE9IEdETUFfU1RBVFVTX01PUkVfRU5UUklFUykgewotCQlpZiAoY3R4LSZndDtzdGF0dXNfY29kZSA9PSBHRE1BX1NUQVRVU19DTURfVU5TVVBQT1JURUQpIHsKJiM0MzsJaWYgKHN0YXR1cyAmYW1wOyZhbXA7IHN0YXR1cyAhPSBHRE1BX1NUQVRVU19NT1JFX0VOVFJJRVMpIHsKJiM0MzsJCWlmIChzdGF0dXMgPT0gR0RNQV9TVEFUVVNfQ01EX1VOU1VQUE9SVEVEKSB7CiAJCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJCWdvdG8gb3V0OwomIzQzOwkJCWdvdG8gZG9uZTsKIAkJfQomIzQzOwogCQlpZiAoY29tbWFuZCAhPSBNQU5BX1FVRVJZX1BIWV9TVEFUKQogCQkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtDb21tYW5kIDB4JXggZmFpbGVkIHdpdGggc3RhdHVzOiAweCV4XG4mIzM0OywKLQkJCQljb21tYW5kLCBjdHgtJmd0O3N0YXR1c19jb2RlKTsKJiM0MzsJCQkJY29tbWFuZCwgc3RhdHVzKTsKIAkJZXJyID0gLUVQUk9UTzsKLQkJZ290byBvdXQ7CiYjNDM7CQlnb3RvIGRvbmU7CiAJfQomIzQzOwomIzQzOwllcnIgPSAwOwomIzQzOwlnb3RvIGRvbmU7CiBvdXQ6Ci0JbWFuYV9od2NfcHV0X21zZ19pbmRleChod2MsIG1zZ19pZCk7CiYjNDM7CS8qIFByZS1wb3N0IGVycm9yIHBhdGhzOiBubyBXUUUgd2FzIHN1Ym1pdHRlZCBzbyBoYW5kbGVfcmVzcCgpCiYjNDM7CSAqIGNhbm5vdCByYWNlIGhlcmUuICByZWZjb3VudCBpcyAxIChubyBzZWNvbmQgcmVmIHRha2VuKS4KJiM0MzsJICovCiYjNDM7CWN0eCA9IGh3Yy0mZ3Q7Y2FsbGVyX2N0eCAmIzQzOyBtc2dfaWQ7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Y3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CWN0eC0mZ3Q7b3V0cHV0X2J1ZiA9IE5VTEw7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjdHgtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJaHdjX2N0eF9wdXQoaHdjLCBjdHgpOwomIzQzO2RvbmU6CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYwppbmRleCBhOGMzMjliZGJhY2Y4My4uNTUwODc0NjU5MGU3Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMKQEAgLTI2NDgsNiAmIzQzOzI2NDgsNyBAQCBzdGF0aWMgaW50IG1hbmFfY3JlYXRlX3R4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywKIAlzdHJ1Y3QgbWFuYV9vYmpfc3BlYyBjcV9zcGVjOwogCXN0cnVjdCBnZG1hX3F1ZXVlX3NwZWMgc3BlYzsKIAlzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYzsKJiM0MzsJc3RydWN0IGdkbWFfcXVldWUgX19yY3UgKipjcV90YWJsZTsKIAlzdHJ1Y3QgbWFuYV90eHEgKnR4cTsKIAlzdHJ1Y3QgbWFuYV9jcSAqY3E7CiAJdTMyIHR4cV9zaXplOwpAQCAtMjc1MywxMiAmIzQzOzI3NTQsMTggQEAgc3RhdGljIGludCBtYW5hX2NyZWF0ZV90eHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsCiAKIAkJY3EtJmd0O2dkbWFfaWQgPSBjcS0mZ3Q7Z2RtYV9jcS0mZ3Q7aWQ7CiAKLQkJaWYgKFdBUk5fT04oY3EtJmd0O2dkbWFfaWQgJmd0Oz0gZ2MtJmd0O21heF9udW1fY3FzKSkgewomIzQzOwkJLyogTm8gcmN1X3JlYWRfbG9jaygpOiBtYW5hX2NyZWF0ZV90eHEgcnVucyB1bmRlciBSVE5MIGR1cmluZwomIzQzOwkJICogbmV0ZGV2IGJyaW5nLXVwLCBpbnNpZGUgdGhlIG5ldGRldiBsaWZldGltZSB0aGF0CiYjNDM7CQkgKiBtYW5hX3JlbW92ZSgpIGRyYWlucyBiZWZvcmUgdGhlIGJhc2UgY3FfdGFibGUgY2FuIGJlIGZyZWVkLgomIzQzOwkJICogU2VlIGdkbWFfY29udGV4dDo6Y3FfdGFibGUgaW4gZ2RtYS5oIGZvciB3aHkgJiMzNDt0cnVlJiMzNDsgaXMgc291bmQuCiYjNDM7CQkgKi8KJiM0MzsJCWNxX3RhYmxlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnYy0mZ3Q7Y3FfdGFibGUsIHRydWUpOwomIzQzOwkJaWYgKFdBUk5fT04oIWNxX3RhYmxlIHx8IGNxLSZndDtnZG1hX2lkICZndDs9IGdjLSZndDttYXhfbnVtX2NxcykpIHsKIAkJCWVyciA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCWdjLSZndDtjcV90YWJsZVtjcS0mZ3Q7Z2RtYV9pZF0gPSBjcS0mZ3Q7Z2RtYV9jcTsKJiM0MzsJCXJjdV9hc3NpZ25fcG9pbnRlcihjcV90YWJsZVtjcS0mZ3Q7Z2RtYV9pZF0sIGNxLSZndDtnZG1hX2NxKTsKIAogCQltYW5hX2NyZWF0ZV90eHFfZGVidWdmcyhhcGMsIGkpOwogCkBAIC0yOTg2LDYgJiM0MzsyOTkzLDcgQEAgc3RhdGljIHN0cnVjdCBtYW5hX3J4cSAqbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLAogCXN0cnVjdCBnZG1hX3F1ZXVlX3NwZWMgc3BlYzsKIAlzdHJ1Y3QgbWFuYV9jcSAqY3EgPSBOVUxMOwogCXN0cnVjdCBnZG1hX2NvbnRleHQgKmdjOwomIzQzOwlzdHJ1Y3QgZ2RtYV9xdWV1ZSBfX3JjdSAqKmNxX3RhYmxlOwogCXUzMiBjcV9zaXplLCBycV9zaXplOwogCXN0cnVjdCBtYW5hX3J4cSAqcnhxOwogCWludCBlcnI7CkBAIC0zMDc1LDEyICYjNDM7MzA4MywxOCBAQCBzdGF0aWMgc3RydWN0IG1hbmFfcnhxICptYW5hX2NyZWF0ZV9yeHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsCiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQlpZiAoV0FSTl9PTihjcS0mZ3Q7Z2RtYV9pZCAmZ3Q7PSBnYy0mZ3Q7bWF4X251bV9jcXMpKSB7CiYjNDM7CS8qIE5vIHJjdV9yZWFkX2xvY2soKTogbWFuYV9jcmVhdGVfcnhxIHJ1bnMgdW5kZXIgUlROTCBkdXJpbmcgbmV0ZGV2CiYjNDM7CSAqIGJyaW5nLXVwLCBpbnNpZGUgdGhlIG5ldGRldiBsaWZldGltZSB0aGF0IG1hbmFfcmVtb3ZlKCkgZHJhaW5zCiYjNDM7CSAqIGJlZm9yZSB0aGUgYmFzZSBjcV90YWJsZSBjYW4gYmUgZnJlZWQuICBTZWUgZ2RtYV9jb250ZXh0OjpjcV90YWJsZQomIzQzOwkgKiBpbiBnZG1hLmggZm9yIHdoeSAmIzM0O3RydWUmIzM0OyBpcyBzb3VuZC4KJiM0MzsJICovCiYjNDM7CWNxX3RhYmxlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnYy0mZ3Q7Y3FfdGFibGUsIHRydWUpOwomIzQzOwlpZiAoV0FSTl9PTighY3FfdGFibGUgfHwgY3EtJmd0O2dkbWFfaWQgJmd0Oz0gZ2MtJmd0O21heF9udW1fY3FzKSkgewogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAKLQlnYy0mZ3Q7Y3FfdGFibGVbY3EtJmd0O2dkbWFfaWRdID0gY3EtJmd0O2dkbWFfY3E7CiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihjcV90YWJsZVtjcS0mZ3Q7Z2RtYV9pZF0sIGNxLSZndDtnZG1hX2NxKTsKIAogCW5ldGlmX25hcGlfYWRkX3dlaWdodF9sb2NrZWQobmRldiwgJmFtcDtjcS0mZ3Q7bmFwaSwgbWFuYV9wb2xsLCAxKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmggYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaAppbmRleCA4NTI5Y2VmMGQ3YzQ1Mi4uYTRlYWM2ZjdjMzY2MDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oCkBAIC00MjgsOSAmIzQzOzQyOCwzNCBAQCBzdHJ1Y3QgZ2RtYV9jb250ZXh0IHsKIAkvKiBMMiBNVFUgKi8KIAl1MTYgYWRhcHRlcl9tdHU7CiAKLQkvKiBUaGlzIG1hcHMgYSBDUSBpbmRleCB0byB0aGUgcXVldWUgc3RydWN0dXJlLiAqLwomIzQzOwkvKiBTaXplIG9mIGNxX3RhYmxlLCBpLmUuIHRoZSBsYXJnZXN0IHZhbGlkIENRIGluZGV4ICYjNDM7IDEuICBTZXQgb25jZQomIzQzOwkgKiB3aGVuIGNxX3RhYmxlIGlzIGFsbG9jYXRlZCBhbmQgdHJlYXRlZCBhcyBpbW11dGFibGUgZm9yIHRoZQomIzQzOwkgKiB0YWJsZSYjMzk7cyBsaWZldGltZSAoYSBib3VuZCBvbmx5KSAtLSBpdCBpcyBuZXZlciByZXNldCBvbiB0ZWFyZG93bi4KJiM0MzsJICogY3FfdGFibGUgPT0gTlVMTCBpcyB0aGUgc29sZSAmIzM0O3RhYmxlIHRvcm4gZG93biYjMzQ7IHNpZ25hbCwgc28gZXZlcnkKJiM0MzsJICogY3FfdGFibGVbaWRdIGFjY2VzcyBtdXN0IGd1YXJkIHdpdGggYm90aCAhY3FfdGFibGUgKGdvbmUpIGFuZAomIzQzOwkgKiBpZCAmZ3Q7PSBtYXhfbnVtX2NxcyAob3V0IG9mIGJvdW5kcykuCiYjNDM7CSAqLwogCXVuc2lnbmVkIGludAkJbWF4X251bV9jcXM7Ci0Jc3RydWN0IGdkbWFfcXVldWUJKipjcV90YWJsZTsKJiM0MzsJLyogQm90aCB0aGUgYmFzZSBwb2ludGVyIGFuZCBlYWNoIGVudHJ5IGFyZSBSQ1UtbWFuYWdlZC4gIFRoZSBmYXN0CiYjNDM7CSAqIHBhdGggKG1hbmFfZ2RfcHJvY2Vzc19lcWUpIHJlYWRzIHRoZSBiYXNlIHZpYSByY3VfZGVyZWZlcmVuY2UoKQomIzQzOwkgKiB1bmRlciByY3VfcmVhZF9sb2NrKCksIHNvIHRoZSB0YWJsZSBpcyBmcmVlZCB3aXRoCiYjNDM7CSAqIHJjdV9hc3NpZ25fcG9pbnRlcihOVUxMKSAmIzQzOyBzeW5jaHJvbml6ZV9yY3UoKSBhbmQgYW4gaW4tZmxpZ2h0CiYjNDM7CSAqIHJlYWRlciBjYW4gbmV2ZXIgb2JzZXJ2ZSBmcmVlZCBtZW1vcnkuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBzbG93IHBhdGhzIC0tIG1hbmFfZ2RfZGVzdHJveV9jcSgpIGFuZCB0aGUgQ1EgaW5zdGFsbC9yZW1vdmUKJiM0MzsJICogY2FsbGVycyAobWFuYV9jcmVhdGVfdHhxL19yeHEsIG1hbmFfaWJfaW5zdGFsbC9yZW1vdmVfY3FfY2IpIC0tCiYjNDM7CSAqIGluc3RlYWQgcmVhZCB0aGUgYmFzZSB3aXRoIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3FfdGFibGUsCiYjNDM7CSAqIHRydWUpLiAgVGhlIGJhcmUgJiMzNDt0cnVlJiMzNDsgaXMganVzdGlmaWVkIGJ5IHRlYXJkb3duIG9yZGVyaW5nLCBub3QgYnkKJiM0MzsJICogYSBsb2NrOiB0aGUgYmFzZSB0YWJsZSBpcyByZXBsYWNlZCYjNDM7ZnJlZWQgb25seSBieQomIzQzOwkgKiBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoKSAoYW5kIHRoZSBjcmVhdGUtdGltZSByZWluaXQpLCBhbmQgZXZlcnkKJiM0MzsJICogdGVhcmRvd24gcGF0aCBmaXJzdCBydW5zIG1hbmFfcmVtb3ZlKCkgJiM0MzsgbWFuYV9yZG1hX3JlbW92ZSgpLCB3aGljaAomIzQzOwkgKiBzeW5jaHJvbm91c2x5IGRyYWluIHRoZSBuZXRkZXYgYW5kIHRoZSBJQiBkZXZpY2UKJiM0MzsJICogKHVucmVnaXN0ZXJfbmV0ZGV2aWNlIC8gaWJfdW5yZWdpc3Rlcl9kZXZpY2UpIHRoYXQgYm91bmQgYWxsCiYjNDM7CSAqIGluc3RhbGwvcmVtb3ZlIGNhbGxlcnM7IHRoZSByZWluaXQgY2FzZSBydW5zIGJlZm9yZSBlaXRoZXIKJiM0MzsJICogY29uc3VtZXIgaXMgcHJvYmVkLiAgU28gbm8gc2xvdy1wYXRoIGNhbGxlciBjYW4gcnVuIHdoaWxlIHRoZSBiYXNlCiYjNDM7CSAqIHRhYmxlIGlzIGJlaW5nIGZyZWVkLgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IGdkbWFfcXVldWUJX19yY3UgKiBfX3JjdSAqY3FfdGFibGU7CiAKIAkvKiBQcm90ZWN0IGVxX3Rlc3RfZXZlbnQgYW5kIHRlc3RfZXZlbnRfZXFfaWQgICovCiAJc3RydWN0IG11dGV4CQllcV90ZXN0X2V2ZW50X211dGV4OwpAQCAtNDU2LDYgJiM0Mzs0ODEsMjEgQEAgc3RydWN0IGdkbWFfY29udGV4dCB7CiAJLyogSGFyZHdhcmUgY29tbXVuaWNhdGlvbiBjaGFubmVsIChIV0MpICovCiAJc3RydWN0IGdkbWFfZGV2CQlod2M7CiAKJiM0MzsJLyogZGVzdHJveV9jaGFubmVsKCkgd2FpdHMgaGVyZSBmb3IgYWxsIEhXQyBzZW5kZXJzIHRvIGV4aXQuCiYjNDM7CSAqIExpdmVzIG9uIGdjIChub3QgaHdjKSBzbyB3YWtlX3VwKCkgYWZ0ZXIgdGhlIGxhc3Qgc2VuZGVyJiMzOTtzCiYjNDM7CSAqIGF0b21pY19kZWMgZG9lc24mIzM5O3QgZGVyZWZlcmVuY2UgZnJlZWQgaHdjIG1lbW9yeS4KJiM0MzsJICovCiYjNDM7CXdhaXRfcXVldWVfaGVhZF90CWh3Y19kcmFpbl93YWl0cTsKJiM0MzsKJiM0MzsJLyogU2VyaWFsaXplcyBod2MuZHJpdmVyX2RhdGEgKHRoZSBod19jaGFubmVsX2NvbnRleHQgcG9pbnRlcikKJiM0MzsJICogYmV0d2VlbiB0aGUgY29udHJvbC1wbGFuZSByZWFkZXJzIGluIG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCksCiYjNDM7CSAqIG1hbmFfbmVlZF9sb2coKSBhbmQgbWFuYV9zZXJ2X3Jlc2V0KCkgYW5kIHRoZSBwdWJsaXNoL2NsZWFyIGluCiYjNDM7CSAqIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKCkvbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKCkuICBBbGwgdXNlcnMKJiM0MzsJICogYXJlIGNvbnRyb2wtcGxhbmUgKEhXQyBjb21tYW5kcyBzbGVlcDsgcmVzZXQgcnVucyBvbiBhIHdvcmtxdWV1ZSksCiYjNDM7CSAqIHNvIGEgcGxhaW4gc3BpbmxvY2sgLS0gbm90IFJDVSAtLSBpcyBzdWZmaWNpZW50LgomIzQzOwkgKi8KJiM0MzsJc3BpbmxvY2tfdAkJaHdjX2xvY2s7CiYjNDM7CiAJLyogQXp1cmUgbmV0d29yayBhZGFwdGVyICovCiAJc3RydWN0IGdkbWFfZGV2CQltYW5hOwogCkBAIC02NjgsNiAmIzQzOzcwOCw5IEBAIGVudW0gewogLyogRHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgaW50ZXJydXB0IG1vZGVyYXRpb24gLSBESU0gKi8KICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04gQklUKDI4KQogCiYjNDM7LyogRHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgcXVldWUgZGVwdGggZm9yIEhXQyAqLwomIzQzOyNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSFdDX1FVRVVFX0RFUFRIIEJJVCgyOSkKJiM0MzsKICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdTMSBcCiAJKEdETUFfRFJWX0NBUF9GTEFHXzFfRVFfU0hBUklOR19NVUxUSV9WUE9SVCB8IFwKIAkgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9OQVBJX1dLRE9ORV9GSVggfCBcCkBAIC02ODMsNiAmIzQzOzcyNiw3IEBAIGVudW0gewogCSBHRE1BX0RSVl9DQVBfRkxBR18xX1BST0JFX1JFQ09WRVJZIHwgXAogCSBHRE1BX0RSVl9DQVBfRkxBR18xX0hBTkRMRV9TVEFMTF9TUV9SRUNPVkVSWSB8IFwKIAkgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9IV0NfVElNRU9VVF9SRUNPVkVSWSB8IFwKJiM0MzsJIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0hXQ19RVUVVRV9ERVBUSCB8IFwKIAkgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9FUV9NU0lfVU5TSEFSRV9NVUxUSV9WUE9SVCB8IFwKIAkgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04pCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvaHdfY2hhbm5lbC5oIGIvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmgKaW5kZXggMTZmZWIzOTYxNmMxYmUuLmVlYzVkM2FhMjNlMWQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYW5hL2h3X2NoYW5uZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYW5hL2h3X2NoYW5uZWwuaApAQCAtMTY0LDYgJiM0MzsxNjQsOSBAQCBzdHJ1Y3QgaHdjX3dxIHsKIAl1MTYgcXVldWVfZGVwdGg7CiAKIAlzdHJ1Y3QgaHdjX2NxICpod2NfY3E7CiYjNDM7CiYjNDM7CS8qIFNlcmlhbGl6ZXMgY29uY3VycmVudCBtYW5hX2dkX3Bvc3RfYW5kX3JpbmcoKSBjYWxscy4gKi8KJiM0MzsJc3BpbmxvY2tfdCBsb2NrOwogfTsKIAogc3RydWN0IGh3Y19jYWxsZXJfY3R4IHsKQEAgLTE3Myw2ICYjNDM7MTc2LDE3IEBAIHN0cnVjdCBod2NfY2FsbGVyX2N0eCB7CiAKIAl1MzIgZXJyb3I7IC8qIExpbnV4IGVycm9yIGNvZGUgKi8KIAl1MzIgc3RhdHVzX2NvZGU7CiYjNDM7CiYjNDM7CS8qIFByb3RlY3RzIG91dHB1dF9idWYgYWdhaW5zdCBjb25jdXJyZW50IGFjY2VzcyBmcm9tCiYjNDM7CSAqIGhhbmRsZV9yZXNwKCkgKENRIGludGVycnVwdCkgYW5kIHRoZSBzZW5kZXIgdGltZW91dCBwYXRoLgomIzQzOwkgKi8KJiM0MzsJc3BpbmxvY2tfdCBsb2NrOwomIzQzOwomIzQzOwkvKiBUcmFja3Mgc2VuZGVyICYjNDM7IGhhbmRsZV9yZXNwIG93bmVyc2hpcC4gIFRoZSBsYXN0IHB1dAomIzQzOwkgKiAocmVmY291bnQgcmVhY2hlcyAwKSByZWxlYXNlcyB0aGUgYml0bWFwIHNsb3QuCiYjNDM7CSAqLwomIzQzOwlyZWZjb3VudF90IHJlZmNudDsKJiM0MzsJdTE2IG1zZ19pZDsKIH07CiAKIHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgewpAQCAtMTgxLDggJiM0MzsxOTUsOSBAQCBzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0IHsKIAogCXUxNiBudW1faW5mbGlnaHRfbXNnOwogCXUzMiBtYXhfcmVxX21zZ19zaXplOwomIzQzOwl1MzIgbWF4X3Jlc3BfbXNnX3NpemU7CiAKLQl1MTYgaHdjX2luaXRfcV9kZXB0aF9tYXg7CiYjNDM7CXUzMiBod2NfaW5pdF9xX2RlcHRoX21heDsKIAl1MzIgaHdjX2luaXRfbWF4X3JlcV9tc2dfc2l6ZTsKIAl1MzIgaHdjX2luaXRfbWF4X3Jlc3BfbXNnX3NpemU7CiAKQEAgLTE5MiwxMyAmIzQzOzIwNywzOCBAQCBzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0IHsKIAlzdHJ1Y3QgaHdjX3dxICp0eHE7CiAJc3RydWN0IGh3Y19jcSAqY3E7CiAKLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbWE7CiAJc3RydWN0IGdkbWFfcmVzb3VyY2UgaW5mbGlnaHRfbXNnX3JlczsKJiM0MzsJLyogV2FpdHF1ZXVlIGZvciBzZW5kZXJzIGJsb2NrZWQgb24gYSBmdWxsIGluZmxpZ2h0IGJpdG1hcC4gKi8KJiM0MzsJd2FpdF9xdWV1ZV9oZWFkX3QgbXNnX3dhaXRxOwogCiAJdTMyIHBmX2Rlc3RfdnJxX2lkOwogCXUzMiBwZl9kZXN0X3ZyY3FfaWQ7CiAJdTMyIGh3Y190aW1lb3V0OwogCiYjNDM7CS8qIFNldCBhZnRlciBjaGFubmVsIGlzIGZ1bGx5IGVzdGFibGlzaGVkOyBjbGVhcmVkIG9uIHRlYXJkb3duIHRvCiYjNDM7CSAqIGFib3J0IHdhaXRlcnMgaW4gbWFuYV9od2NfZ2V0X21zZ19pbmRleCgpIGFuZCByZWplY3QgbmV3IHNlbmRzLgomIzQzOwkgKi8KJiM0MzsJYm9vbCBjaGFubmVsX3VwOwomIzQzOwomIzQzOwkvKiBTZXQgb24gZmlyc3QgSFdDIHRpbWVvdXQuICBDYXVzZXMgZ2V0X21zZ19pbmRleCgpIHRvIHJldHVybgomIzQzOwkgKiAtRVRJTUVET1VUIGluc3RlYWQgb2Ygd2FpdGluZywgZHJhaW5pbmcgYWxsIHF1ZXVlZCBzZW5kZXJzLgomIzQzOwkgKi8KJiM0MzsJYm9vbCBod2NfdGltZWRfb3V0OwomIzQzOwomIzQzOwkvKiBTZXQgYWZ0ZXIgbWFuYV9zbWNfc2V0dXBfaHdjKCkgc3VjY2VlZHMgKGhhcmR3YXJlIGhhcyBhY3RpdmUKJiM0MzsJICogTVNUIGVudHJpZXMpLiAgT24gcmVjb3ZlcmFibGUgcGF0aHMgKGVzdGFibGlzaF9jaGFubmVsKQomIzQzOwkgKiBjbGVhcmVkIG9ubHkgYWZ0ZXIgc3VjY2Vzc2Z1bCB0ZWFyZG93biBzbyBhIHJldHJ5IHJlbWFpbnMKJiM0MzsJICogcG9zc2libGUuICBPbiB0aGUgdGVybWluYWwgZGVzdHJveV9jaGFubmVsIHBhdGgsIGNsZWFyZWQKJiM0MzsJICogdW5jb25kaXRpb25hbGx5IHNpbmNlIGh3YyBpcyBhYm91dCB0byBiZSBmcmVlZC4KJiM0MzsJICovCiYjNDM7CWJvb2wgc2V0dXBfYWN0aXZlOwomIzQzOwomIzQzOwkvKiBDb3VudCBvZiBpbi1mbGlnaHQgbWFuYV9nZF9zZW5kX3JlcXVlc3QoKSBjYWxsZXJzLiAgUHJvdGVjdGVkCiYjNDM7CSAqIGJ5IGdjLSZndDtod2NfbG9jazsgdGhlIGxhc3Qgc2VuZGVyIHRvIGRyb3AgaXQgdG8gemVybyB3YWtlcwomIzQzOwkgKiBnYy0mZ3Q7aHdjX2RyYWluX3dhaXRxIGZvciB0aGUgbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKCkgZHJhaW4uCiYjNDM7CSAqLwomIzQzOwl1bnNpZ25lZCBpbnQgYWN0aXZlX3NlbmRlcnM7CiYjNDM7CiAJc3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjYWxsZXJfY3R4OwogfTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzE2MgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1BTkEgRHJpdmVyIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUgdGhhdCYjMzk7cyBtYWtpbmcgY2hhbmdlcyB0byB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciwgdGhlIE1BTkEgZHJpdmVyLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBkcml2ZXIgaXMgYmVpbmcgdG91Y2hlZDsgSSYjMzk7bSBzZWVpbmcgbW9kaWZpY2F0aW9ucyBpbiBgY3EuY2AsIGBnZG1hX21haW4uY2AsIGBod19jaGFubmVsLmNgLCBhbmQgYG1hbmFfZW4uY2AsIGFsb25nIHdpdGggc29tZSBoZWFkZXIgZmlsZSB1cGRhdGVzIGluIGBnZG1hLmhgIGFuZCBgaHdfY2hhbm5lbC5oYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhhdCBsaXN0IG9mIGZpbGVzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGEgc3Vic3RhbnRpYWwgZnVuY3Rpb25hbCBjaGFuZ2UuCgpMZXQmIzM5O3MgcXVpY2tseSBhc3Nlc3MgdGhlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHNjb3BlLiBBaCwgeWVzLCBJJiMzOTttIHNlZWluZyBSQ1UgcHJvdGVjdGlvbiBhZGRlZCBmb3IgYGNxX3RhYmxlYCwgY2hhbmdlcyB0byBzcGlubG9ja3MsIHRpbWVvdXQgaGFuZGxpbmcgaW1wcm92ZW1lbnRzLCByZWZjb3VudCBtYW5hZ2VtZW50IGZvciBgaHdjX2NhbGxlcl9jdHhgLCBhbmQgaGFuZGxpbmcgb2YgSFdDIHJlaW5pdGlhbGl6YXRpb24uIFRoYXQmIzM5O3MgYSBwcmV0dHkgc2lnbmlmaWNhbnQgbGF1bmRyeSBsaXN0LiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgbWlub3IgdHdlYWs7IHRoaXMgaXMgYSBmdW5kYW1lbnRhbCByZXdvcmsgb2Ygc29tZSBrZXkgc3luY2hyb25pemF0aW9uIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IGNvbXBvbmVudHMgd2l0aGluIHRoZSBNQU5BIGRyaXZlci4gVGhlc2UgdHlwZXMgb2YgY2hhbmdlcyBhbG1vc3QgYWx3YXlzIGludHJvZHVjZSB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUsIGhhcmQtdG8tZGVidWcgcmVncmVzc2lvbnMsIHNvIHRob3JvdWdoIHRlc3RpbmcgaXMgYWJzb2x1dGVseSBjcml0aWNhbC4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZHJpdmVyLiBJJiMzOTttIGdvaW5nIHRvIHNlYXJjaCB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3Igc29tZXRoaW5nIGxpa2UgYE1JQ1JPU09GVF9NQU5BYCBvciBhIHNpbWlsYXIgY29uZmlndXJhdGlvbiBzeW1ib2wgdG8gZmlndXJlIG91dCBob3cgdGhpcyBkcml2ZXIgaXMgZW5hYmxlZCBhbmQgaWYgYW55IG5ldyBvcHRpb25zIGhhdmUgYmVlbiBpbnRyb2R1Y2VkIHdpdGggdGhpcyBwYXRjaC4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBpcyB2aXRhbCB0byBwcm9wZXJseSBpbnRlZ3JhdGUgdGhpcyBwYXRjaCBzZXJpZXMsIG9yIHRvIGV2ZW4ganVzdCB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUlDUk9TT0ZUX01BTkEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvS2NvbmZpZz0yPWNvbmZpZyBNQU5BX0lORklOSUJBTkRcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBORVRERVZJQ0VTIFx1MDAyNlx1MDAyNiBFVEhFUk5FVCBcdTAwMjZcdTAwMjYgUENJIFx1MDAyNlx1MDAyNiBNSUNST1NPRlRfTUFOQVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvS2NvbmZpZy01LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnPTE2PWlmIE5FVF9WRU5ET1JfTUlDUk9TT0ZUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0xNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnOjE4OmNvbmZpZyBNSUNST1NPRlRfTUFOQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L01ha2VmaWxlLTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfTUlDUk9TT0ZUX01BTkEpICYjNDM7PSBtYW5hL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL01ha2VmaWxlLTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19NSUNST1NPRlRfTUFOQSkgJiM0Mzs9IG1hbmEub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGUtNi1tYW5hLW9ianMgOj0gZ2RtYV9tYWluLm8gc2htX2NoYW5uZWwubyBod19jaGFubmVsLm8gbWFuYV9lbi5vIG1hbmFfZXRodG9vbC5vIG1hbmFfYnBmLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDA5OAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDEwOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgdGhlIE1BTkEgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXMgdGhlIGBNSUNST1NPRlRfTUFOQWAgYW5kIGBNQU5BX0lORklOSUJBTkRgIGNvbmZpZ3MsIHRoZXkgd2lsbCBndWlkZSB1cyBvbiB3aGV0aGVyIHRoaXMgaXMgYnVpbHQgYXMgYSBtb2R1bGUgb3IgYnVpbHQgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGUgdGFyZ2V0IGZ1bmN0aW9ucyBhcmUgd2l0aGluIHRoZSBjb2RlLCBzbyBsZXQmIzM5O3MgbGlzdCB0aG9zZS4gVGhlIHBhdGNoIHRvdWNoZXMgYSBnb29kIGNodW5rIG9mIHRoZSBkcml2ZXIsIHNwZWNpZmljYWxseTogYG1hbmFfaWJfaW5zdGFsbF9jcV9jYmAsIGBtYW5hX2liX3JlbW92ZV9jcV9jYmAsIGBtYW5hX25lZWRfbG9nYCwgYG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0YCwgYG1hbmFfc2Vydl9yZXNldGAsIGBtYW5hX2dkX3Byb2Nlc3NfZXFlYCwgYG1hbmFfZ2RfZGVzdHJveV9jcWAsIGBtYW5hX2dkX2NyZWF0ZV9kbWFfcmVnaW9uYCwgYG1hbmFfZ2RfdmVyaWZ5X3ZmX3ZlcnNpb25gLCBgbWFuYV9nZF9wcm9iZWAsIGBtYW5hX2h3Y19nZXRfbXNnX2luZGV4YCwgYG1hbmFfaHdjX3B1dF9tc2dfaW5kZXhgLCBgaHdjX2N0eF9wdXRgLCBgbWFuYV9od2NfaGFuZGxlX3Jlc3BgLCBgbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyYCwgYG1hbmFfaHdjX3J4X2V2ZW50X2hhbmRsZXJgLCBgbWFuYV9od2NfZGVzdHJveV9jcWAsIGBtYW5hX2h3Y19jcmVhdGVfd3FgLCBgbWFuYV9od2NfcG9zdF90eF93cWVgLCBgbWFuYV9od2NfaW5pdF9pbmZsaWdodF9tc2dgLCBgbWFuYV9od2NfdGVzdF9jaGFubmVsYCwgYG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsYCwgYG1hbmFfaHdjX2luaXRfcXVldWVzYCwgYG1hbmFfaHdjX2Rlc3Ryb3lfcXVldWVzYCwgYG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsYCwgYG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbGAsIGBtYW5hX2h3Y19zZW5kX3JlcXVlc3RgLCBgbWFuYV9jcmVhdGVfdHhxYCwgYW5kIGBtYW5hX2NyZWF0ZV9yeHFgLiBUaGF0JiMzOTtzIGEgbG90LCBzbyBJJiMzOTtsbCBuZWVkIHRvIHByaW9yaXRpemUuCgpMZXQmIzM5O3MgcGljayBhIGZldyBwcm9taXNpbmcgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgYW5kIEkgc2hvdWxkIGZvY3VzIG9uIGVudHJ5IHBvaW50cyBmcm9tIHVzZXJzcGFjZSBvciB0aG9zZSB0aGF0IGhhbmRsZSBjb21wbGV4IGludGVyYWN0aW9uLiAgSSYjMzk7bGwgcGljazogYG1hbmFfaHdjX3NlbmRfcmVxdWVzdGAsIGBtYW5hX2h3Y19oYW5kbGVfcmVzcGAsIGBtYW5hX2h3Y19yeF9ldmVudF9oYW5kbGVyYCwgYG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsYCwgYG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbGAsIGBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbGAsIGBtYW5hX2h3Y190ZXN0X2NoYW5uZWxgLCBgbWFuYV9od2NfZ2V0X21zZ19pbmRleGAsIGBtYW5hX2h3Y19wdXRfbXNnX2luZGV4YCwgYG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0YCwgYG1hbmFfZ2RfcHJvY2Vzc19lcWVgLCBgbWFuYV9pYl9pbnN0YWxsX2NxX2NiYCwgYW5kIGBtYW5hX2liX3JlbW92ZV9jcV9jYmAuCgpOb3csIHRoZSBiaWcgcXVlc3Rpb246IElzIHRoaXMgZHJpdmVyIGV2ZW4gcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IE1BTkEgaXMgYSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyLCBzbyBpdCYjMzk7cyBhIFBDSSBkZXZpY2UuICBUeXBpY2FsbHksIEkmIzM5O2QgbG9vayBmb3Igc3l6a2FsbGVyIHN1cHBvcnQgdmlhIHZoY2kgb3IgYSBzaW1pbGFyIHBzZXVkby1kZXZpY2UgaWYgdGhlIGhhcmR3YXJlIGlzIGVtdWxhdGVkLiBTeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSBhIHNwZWNpZmljIE1BTkEgZW11bGF0b3IsIHNvIEkgd2FzIGNvbmNlcm5lZCBpdCB3b3VsZG4mIzM5O3QgYmUgcG9zc2libGUgYXQgZmlyc3QuCgpCdXQgd2FpdCwgUENJIGRyaXZlcnMgY2FuIGJlIGZ1enplZCB1c2luZyBgc3l6X3BjaV92cGNpYCBhbmQgc2ltaWxhci4gVGhlIHRleHQgc2F5cyB3ZSBtYXkgYmUgYWJsZSB0byByZWFjaCBldmVuIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBJJiMzOTttIHNlZWluZyAmIzM0O3N5ei1jbHVzdGVyJiMzNDsgYXMgdGhlIGF1dGhvciwgd2hpY2ggc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBzeXprYWxsZXIgaXMgYWN0aXZlbHkgd29ya2luZyBvbiBvciBoYXMgZm91bmQgc29tZXRoaW5nIHRvIGZ1enogaW4gdGhpcyBjb2RlISBTaW5jZSBpdCBpcyBhIHBhdGNoIGJlaW5nIHRlc3RlZCBieSBzeXprYWxsZXIgaXQgaXMgd29ydGggaXQuIFN5emthbGxlciBjYW4gZnV6eiBhbnkgUENJIGRyaXZlciBieSBiaW5kaW5nIGl0IHRvIHRoZSB2aGNpIG9yIHBjaSBwc2V1ZG8tZGV2aWNlIGFuZCBwcm92aWRpbmcgcmFuZG9tIE1NSU8vRE1BIHJlc3BvbnNlcy4KCk9rYXksIGxldCYjMzk7cyBjb25maXJtIHRoZSBjb25maWdzIGFnYWluLCBiZWNhdXNlIGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLiBZdXAsIGp1c3QgYE1JQ1JPU09GVF9NQU5BYCBhbmQgYE1BTkFfSU5GSU5JQkFORGAuCgpMZXQmIzM5O3MgcmVmaW5lIHRoZSBGb2N1c1N5bWJvbHMgdG8gdGhlIGltcG9ydGFudCBvbmVzOiBgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0YCwgYG1hbmFfaHdjX2hhbmRsZV9yZXNwYCwgYG1hbmFfaHdjX3J4X2V2ZW50X2hhbmRsZXJgLCBgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWxgLCBgbWFuYV9od2NfZGVzdHJveV9jaGFubmVsYCwgYG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsYCwgYG1hbmFfaHdjX2Rlc3Ryb3lfcXVldWVzYCwgYG1hbmFfZ2RfcHJvY2Vzc19lcWVgLCBgbWFuYV9pYl9pbnN0YWxsX2NxX2NiYCwgYG1hbmFfaWJfcmVtb3ZlX2NxX2NiYCwgYW5kIGBtYW5hX2h3Y19nZXRfbXNnX2luZGV4YC4KCkdvb2QuIE5vdywgSSBzaG91bGQgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNvbmZpZ3MgdGhhdCB3b3VsZCBpbmZsdWVuY2UgdGhlIGJ1aWxkIG9yIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSBtaXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE3OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQU5BJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWc6Mjpjb25maWcgTUFOQV9JTkZJTklCQU5EXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnPTI5Mz1jb25maWcgQ0hBUkdFUl9TQlNcbi0tXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnLTI5OS1cbmRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWc6MzAwOmNvbmZpZyBNQU5BR0VSX1NCU1xuZHJpdmVycy9wb3dlci9zdXBwbHkvS2NvbmZpZy0zMDEtXHR0cmlzdGF0ZSBcJiMzNDtTbWFydCBCYXR0ZXJ5IFN5c3RlbSBNYW5hZ2VyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzODUKCQkJCQkJCW91dHB1dDogMjE3CgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGVlcCBEaXZlIGludG8gTUFOQSBJbmZpbmliYW5kIEZ1bmN0aW9uYWxpdHkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4gVGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBpcyBjbGVhcmx5IGZvY3VzZWQgb24gdGhlIGBNSUNST1NPRlRfTUFOQWAgYW5kIGBNQU5BX0lORklOSUJBTkRgIHNldHVwcy4gSSBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZCBhcyB0aGUgZm91bmRhdGlvbiBmb3IgZXZlcnl0aGluZyB0aGF0JiMzOTtzIHRvIGNvbWUuCgpJJiMzOTttIHplcm9pbmcgaW4gb24gYSBjcml0aWNhbCBzdWJzZXQgb2YgZnVuY3Rpb25zLCBvciB3aGF0IHRoZXkmIzM5O3JlIGNhbGxpbmcgYEZvY3VzU3ltYm9sc2AuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIGZvciBoYW5kbGluZyBDb21wbGV0aW9uIFF1ZXVlcyAoQ1FzKSwgaGFyZHdhcmUgY29tbXVuaWNhdGlvbiwgYW5kIGdlbmVyYWwgZGF0YSBwcm9jZXNzaW5nIHdpdGhpbiB0aGlzIEluZmluaWJhbmQgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBicmVhayB0aGVtIGRvd24uCgoqICAgYG1hbmFfaWJfaW5zdGFsbF9jcV9jYmAgYW5kIGBtYW5hX2liX3JlbW92ZV9jcV9jYmA6IFRoZXNlIGNsZWFybHkgcmVsYXRlIHRvIHRoZSBpbnN0YWxsYXRpb24gYW5kIHJlbW92YWwgb2YgQ29tcGxldGlvbiBRdWV1ZSBjYWxsYmFja3MuIFRoaXMgc3VnZ2VzdHMgYSBzb3BoaXN0aWNhdGVkIGV2ZW50LWRyaXZlbiBtb2RlbCBmb3IgaGFuZGxpbmcgY29tcGxldGlvbnMsIHdoaWNoIGlzIHN0YW5kYXJkIGJ1dCBpbXBvcnRhbnQgdG8gdmVyaWZ5IHRoZSBudWFuY2VzIG9mLgoqICAgYG1hbmFfaHdjX2dldF9tc2dfaW5kZXhgLCBgbWFuYV9od2NfaGFuZGxlX3Jlc3BgLCBgbWFuYV9od2NfcnhfZXZlbnRfaGFuZGxlcmAsIGBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbGAsIGBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWxgLCBhbmQgYG1hbmFfaHdjX3NlbmRfcmVxdWVzdGA6IFRoZXNlIGNvbGxlY3RpdmVseSBwYWludCBhIHBpY3R1cmUgb2YgSGFyZHdhcmUgQ29tbXVuaWNhdGlvbiAoSFdDKSBtYW5hZ2VtZW50LiBXZSYjMzk7cmUgbG9va2luZyBhdCBtZXNzYWdlIGluZGV4aW5nLCByZXNwb25zZSBoYW5kbGluZywgZXZlbnQgcHJvY2Vzc2luZyAocGFydGljdWxhcmx5IG9uIHRoZSByZWNlaXZlIHNpZGUpLCBhbmQgdGhlIGNyZWF0aW9uLCBkZXN0cnVjdGlvbiwgYW5kIHRyYW5zbWlzc2lvbiBhc3BlY3RzIG9mIGNvbW11bmljYXRpb24gY2hhbm5lbHMuIEEgZ29vZCBsZXZlbCBvZiBhYnN0cmFjdGlvbiwgY3JpdGljYWwgdG8gcGVyZm9ybWFuY2UuCiogICBgbWFuYV9nZF9wcm9jZXNzX2VxZWAgYW5kIGBtYW5hX2dkX2Rlc3Ryb3lfY3FgOiBUaGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gZ2VuZXJpYyBkYXRhIChHRCkgcHJvY2Vzc2luZyBhbmQgZGVzdHJveWluZyBDUXMuIFRoaXMgaW1wbGllcyB0aGUgZXhpc3RlbmNlIG9mIGEgZ2VuZXJpYyBkYXRhIG1vZGVsIGZvciBkYXRhIHRyYW5zZmVyLCBzZXBhcmF0ZSBmcm9tIHRoZSBJbmZpbmliYW5kLXNwZWNpZmljIGFzcGVjdHMuCgpTbywgb3ZlcmFsbCwgYSB0aG9yb3VnaCBzZXQgb2YgY29uc2lkZXJhdGlvbnMgdGhhdCBpbmRpY2F0ZXMgYSB3ZWxsLXN0cnVjdHVyZWQgYXBwcm9hY2ggdG8gaGFuZGxpbmcgSW5maW5pYmFuZCBvcGVyYXRpb25zIHdpdGggdGhpcyBgTUFOQWAgaW1wbGVtZW50YXRpb24uCgpNeSBuZXh0IHN0ZXAgaXMgdG8gY2FsbCBzZXQtcmVzdWx0cy4gVGhpcyBpbmRpY2F0ZXMgdGhlIG5leHQgc3RlcHMgaW4gdGhpcyBldmFsdWF0aW9uLCBsaWtlbHkgZ2F0aGVyaW5nIGFsbCBhdmFpbGFibGUgZGF0YSBwb2ludHMgdG8gZXN0YWJsaXNoIGEgYmVuY2htYXJrIGZvciBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUlDUk9TT0ZUX01BTkEmIzM0OywKICAgICYjMzQ7TUFOQV9JTkZJTklCQU5EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFuYV9pYl9pbnN0YWxsX2NxX2NiJiMzNDssCiAgICAmIzM0O21hbmFfaWJfcmVtb3ZlX2NxX2NiJiMzNDssCiAgICAmIzM0O21hbmFfaHdjX2dldF9tc2dfaW5kZXgmIzM0OywKICAgICYjMzQ7bWFuYV9od2NfaGFuZGxlX3Jlc3AmIzM0OywKICAgICYjMzQ7bWFuYV9od2NfcnhfZXZlbnRfaGFuZGxlciYjMzQ7LAogICAgJiMzNDttYW5hX2h3Y19jcmVhdGVfY2hhbm5lbCYjMzQ7LAogICAgJiMzNDttYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwmIzM0OywKICAgICYjMzQ7bWFuYV9od2Nfc2VuZF9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O21hbmFfZ2RfcHJvY2Vzc19lcWUmIzM0OywKICAgICYjMzQ7bWFuYV9nZF9kZXN0cm95X2NxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLCBpbmNsdWRpbmcgYWRkaW5nIFJDVSBwcm90ZWN0aW9uIGZvciB0aGUgQ1EgdGFibGUsIGhhbmRsaW5nIEhXQyB0aW1lb3V0cywgYW5kIGFkZGluZyByZWZjb3VudHMgZm9yIGNhbGxlciBjb250ZXh0cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgbG9naWMgb2YgdGhlIGRyaXZlciBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUlDUk9TT0ZUX01BTkEmIzM0OywKICAgICYjMzQ7TUFOQV9JTkZJTklCQU5EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFuYV9pYl9pbnN0YWxsX2NxX2NiJiMzNDssCiAgICAmIzM0O21hbmFfaWJfcmVtb3ZlX2NxX2NiJiMzNDssCiAgICAmIzM0O21hbmFfaHdjX2dldF9tc2dfaW5kZXgmIzM0OywKICAgICYjMzQ7bWFuYV9od2NfaGFuZGxlX3Jlc3AmIzM0OywKICAgICYjMzQ7bWFuYV9od2NfcnhfZXZlbnRfaGFuZGxlciYjMzQ7LAogICAgJiMzNDttYW5hX2h3Y19jcmVhdGVfY2hhbm5lbCYjMzQ7LAogICAgJiMzNDttYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwmIzM0OywKICAgICYjMzQ7bWFuYV9od2Nfc2VuZF9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O21hbmFfZ2RfcHJvY2Vzc19lcWUmIzM0OywKICAgICYjMzQ7bWFuYV9nZF9kZXN0cm95X2NxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLCBpbmNsdWRpbmcgYWRkaW5nIFJDVSBwcm90ZWN0aW9uIGZvciB0aGUgQ1EgdGFibGUsIGhhbmRsaW5nIEhXQyB0aW1lb3V0cywgYW5kIGFkZGluZyByZWZjb3VudHMgZm9yIGNhbGxlciBjb250ZXh0cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgbG9naWMgb2YgdGhlIGRyaXZlciBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE3OjUyOjIwLjg5Nzg0NDU1NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDY0OTQ4MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1JQ1JPU09GVF9NQU5BXCIsXG4gICAgXCJNQU5BX0lORklOSUJBTkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYW5hX2liX2luc3RhbGxfY3FfY2JcIixcbiAgICBcIm1hbmFfaWJfcmVtb3ZlX2NxX2NiXCIsXG4gICAgXCJtYW5hX2h3Y19nZXRfbXNnX2luZGV4XCIsXG4gICAgXCJtYW5hX2h3Y19oYW5kbGVfcmVzcFwiLFxuICAgIFwibWFuYV9od2NfcnhfZXZlbnRfaGFuZGxlclwiLFxuICAgIFwibWFuYV9od2NfY3JlYXRlX2NoYW5uZWxcIixcbiAgICBcIm1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbFwiLFxuICAgIFwibWFuYV9od2Nfc2VuZF9yZXF1ZXN0XCIsXG4gICAgXCJtYW5hX2dkX3Byb2Nlc3NfZXFlXCIsXG4gICAgXCJtYW5hX2dkX2Rlc3Ryb3lfY3FcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciwgaW5jbHVkaW5nIGFkZGluZyBSQ1UgcHJvdGVjdGlvbiBmb3IgdGhlIENRIHRhYmxlLCBoYW5kbGluZyBIV0MgdGltZW91dHMsIGFuZCBhZGRpbmcgcmVmY291bnRzIGZvciBjYWxsZXIgY29udGV4dHMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBkcml2ZXIgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE3OjUyOjIwLjg5Nzg1Mjk1NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg3MzExMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2E3ZjY3M2M1YTQ5MDA1NDA1ZDU1ZmMyNTQwZjI0MmQzYjg5Y2Q5NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAyMiAxNzo1MjoxOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9jcS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvY3EuY1xcbmluZGV4IGYyNTQ3OTg5ZjQyMjkwLi4yYmY0YmUyMWNlZGU3OSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9jcS5jXFxuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvY3EuY1xcbkBAIC0xMzEsMTIgKzEzMSwyMCBAQCBzdGF0aWMgdm9pZCBtYW5hX2liX2NxX2hhbmRsZXIodm9pZCAqY3R4LCBzdHJ1Y3QgZ2RtYV9xdWV1ZSAqZ2RtYV9jcSlcXG4gaW50IG1hbmFfaWJfaW5zdGFsbF9jcV9jYihzdHJ1Y3QgbWFuYV9pYl9kZXYgKm1kZXYsIHN0cnVjdCBtYW5hX2liX2NxICpjcSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IG1kZXZfdG9fZ2MobWRldik7XFxuK1xcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqY3FfdGFibGU7XFxuIFxcdHN0cnVjdCBnZG1hX3F1ZXVlICpnZG1hX2NxO1xcbiBcXG4tXFx0aWYgKGNxLVxcdTAwM2VxdWV1ZS5pZCBcXHUwMDNlPSBnYy1cXHUwMDNlbWF4X251bV9jcXMpXFxuK1xcdC8qIE5vIHJjdV9yZWFkX2xvY2soKTogaW5zdGFsbC9yZW1vdmUgcnVuIHdpdGhpbiB0aGUgSUIgZGV2aWNlXFxuK1xcdCAqIGxpZmV0aW1lLCB3aGljaCBtYW5hX3JkbWFfcmVtb3ZlKCkgKGliX3VucmVnaXN0ZXJfZGV2aWNlKSBkcmFpbnNcXG4rXFx0ICogYmVmb3JlIHRoZSBiYXNlIGNxX3RhYmxlIGNhbiBiZSBmcmVlZC4gIFNlZSBnZG1hX2NvbnRleHQ6OmNxX3RhYmxlXFxuK1xcdCAqIGluIGdkbWEuaCBmb3Igd2h5IFxcXCJ0cnVlXFxcIiBpcyBzb3VuZC5cXG4rXFx0ICovXFxuK1xcdGNxX3RhYmxlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnYy1cXHUwMDNlY3FfdGFibGUsIHRydWUpO1xcbitcXHRpZiAoIWNxX3RhYmxlIHx8IGNxLVxcdTAwM2VxdWV1ZS5pZCBcXHUwMDNlPSBnYy1cXHUwMDNlbWF4X251bV9jcXMpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0LyogQ3JlYXRlIENRIHRhYmxlIGVudHJ5LCBzaGFyaW5nIGEgQ1EgYmV0d2VlbiBXUXMgaXMgbm90IHN1cHBvcnRlZCAqL1xcbi1cXHRpZiAoZ2MtXFx1MDAzZWNxX3RhYmxlW2NxLVxcdTAwM2VxdWV1ZS5pZF0pXFxuK1xcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoY3FfdGFibGVbY3EtXFx1MDAzZXF1ZXVlLmlkXSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRpZiAoY3EtXFx1MDAzZXF1ZXVlLmttZW0pXFxuIFxcdFxcdGdkbWFfY3EgPSBjcS1cXHUwMDNlcXVldWUua21lbTtcXG5AQCAtMTQ5LDIzICsxNTcsNDkgQEAgaW50IG1hbmFfaWJfaW5zdGFsbF9jcV9jYihzdHJ1Y3QgbWFuYV9pYl9kZXYgKm1kZXYsIHN0cnVjdCBtYW5hX2liX2NxICpjcSlcXG4gXFx0Z2RtYV9jcS1cXHUwMDNldHlwZSA9IEdETUFfQ1E7XFxuIFxcdGdkbWFfY3EtXFx1MDAzZWNxLmNhbGxiYWNrID0gbWFuYV9pYl9jcV9oYW5kbGVyO1xcbiBcXHRnZG1hX2NxLVxcdTAwM2VpZCA9IGNxLVxcdTAwM2VxdWV1ZS5pZDtcXG4tXFx0Z2MtXFx1MDAzZWNxX3RhYmxlW2NxLVxcdTAwM2VxdWV1ZS5pZF0gPSBnZG1hX2NxO1xcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIoY3FfdGFibGVbY3EtXFx1MDAzZXF1ZXVlLmlkXSwgZ2RtYV9jcSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiB2b2lkIG1hbmFfaWJfcmVtb3ZlX2NxX2NiKHN0cnVjdCBtYW5hX2liX2RldiAqbWRldiwgc3RydWN0IG1hbmFfaWJfY3EgKmNxKVxcbiB7XFxuIFxcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gbWRldl90b19nYyhtZGV2KTtcXG4rXFx0c3RydWN0IGdkbWFfcXVldWUgX19yY3UgKipjcV90YWJsZTtcXG4rXFx0c3RydWN0IGdkbWFfcXVldWUgKmdkbWFfY3E7XFxuIFxcbi1cXHRpZiAoY3EtXFx1MDAzZXF1ZXVlLmlkIFxcdTAwM2U9IGdjLVxcdTAwM2VtYXhfbnVtX2NxcyB8fCBjcS1cXHUwMDNlcXVldWUuaWQgPT0gSU5WQUxJRF9RVUVVRV9JRClcXG4rXFx0aWYgKGNxLVxcdTAwM2VxdWV1ZS5pZCA9PSBJTlZBTElEX1FVRVVFX0lEKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRpZiAoY3EtXFx1MDAzZXF1ZXVlLmttZW0pXFxuIFxcdC8qIFRoZW4gaXQgd2lsbCBiZSBjbGVhbmVkIGFuZCByZW1vdmVkIGJ5IHRoZSBtYW5hICovXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGtmcmVlKGdjLVxcdTAwM2VjcV90YWJsZVtjcS1cXHUwMDNlcXVldWUuaWRdKTtcXG4tXFx0Z2MtXFx1MDAzZWNxX3RhYmxlW2NxLVxcdTAwM2VxdWV1ZS5pZF0gPSBOVUxMO1xcbitcXHQvKiBObyByY3VfcmVhZF9sb2NrKCk6IGxpa2UgbWFuYV9pYl9pbnN0YWxsX2NxX2NiKCksIHRoaXMgcnVucyB3aXRoaW5cXG4rXFx0ICogdGhlIElCIGRldmljZSBsaWZldGltZSB0aGF0IG1hbmFfcmRtYV9yZW1vdmUoKSBkcmFpbnMgYmVmb3JlIHRoZVxcbitcXHQgKiBiYXNlIGNxX3RhYmxlIGNhbiBiZSBmcmVlZC4gIFNlZSBnZG1hX2NvbnRleHQ6OmNxX3RhYmxlIGluIGdkbWEuaC5cXG4rXFx0ICovXFxuK1xcdGNxX3RhYmxlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnYy1cXHUwMDNlY3FfdGFibGUsIHRydWUpO1xcbitcXHRpZiAoIWNxX3RhYmxlIHx8IGNxLVxcdTAwM2VxdWV1ZS5pZCBcXHUwMDNlPSBnYy1cXHUwMDNlbWF4X251bV9jcXMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0LyogUmVtb3ZlcnMgZm9yIGEgZ2l2ZW4gQ1EgYXJlIHNlcmlhbGl6ZWQgYnkgdGhlIElCIGNvcmUsIHNvIHRoZSBzbG90XFxuK1xcdCAqIGlzIHJlYWQgYW5kIGNsZWFyZWQgd2l0aG91dCByY3VfcmVhZF9sb2NrKCkgb3IgYXRvbWljaXR5OiBhIENRIGlzXFxuK1xcdCAqIG5ldmVyIHRvcm4gZG93biB3aGlsZSBhIGxpdmUgUVAgcmVmZXJlbmNlcyBpdCAoY3EtXFx1MDAzZXVzZWNudCksIG5vclxcbitcXHQgKiB3aGlsZSB0aGUgUVAtY3JlYXRlIHRoYXQgaW5zdGFsbGVkIHRoZSBlbnRyeSBpcyBzdGlsbCBydW5uaW5nICh0aGF0XFxuK1xcdCAqIGNyZWF0ZSBob2xkcyBhIHJlZmVyZW5jZSBvbiB0aGUgQ1EgdW9iamVjdCBhY3Jvc3MgaXRzIGVycm9yIHBhdGgsXFxuK1xcdCAqIGJlZm9yZSB1c2VjbnQgaXMgdGFrZW4pLiAgQW55IGRvdWJsZS1yZW1vdmUgaXMgdGhlcmVmb3JlIHNlcXVlbnRpYWxcXG4rXFx0ICogLS0gdGhlIGxhdGVyIGNhbGxlciBzZWVzIHRoZSBOVUxMIHN0b3JlZCBiZWxvdyBhbmQgcmV0dXJucy5cXG4rXFx0ICovXFxuK1xcdGdkbWFfY3EgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGNxX3RhYmxlW2NxLVxcdTAwM2VxdWV1ZS5pZF0sIHRydWUpO1xcbitcXHRpZiAoIWdkbWFfY3EpXFxuK1xcdFxcdHJldHVybjsgIC8qIGFscmVhZHkgcmVtb3ZlZCBieSBhIHByaW9yIHRlYXJkb3duIHBhdGggKi9cXG4rXFxuK1xcdHJjdV9hc3NpZ25fcG9pbnRlcihjcV90YWJsZVtjcS1cXHUwMDNlcXVldWUuaWRdLCBOVUxMKTtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGluLWZsaWdodCBFUSBoYW5kbGVycyB0aGF0IG1heSBoYXZlIGxvYWRlZCB0aGUgb2xkXFxuK1xcdCAqIHBvaW50ZXIgdmlhIHJjdV9kZXJlZmVyZW5jZSgpIHRvIGZpbmlzaCBiZWZvcmUgZnJlZWluZy5cXG4rXFx0ICovXFxuK1xcdHN5bmNocm9uaXplX3JjdSgpO1xcbitcXHRrZnJlZShnZG1hX2NxKTtcXG4gfVxcbiBcXG4gaW50IG1hbmFfaWJfYXJtX2NxKHN0cnVjdCBpYl9jcSAqaWJjcSwgZW51bSBpYl9jcV9ub3RpZnlfZmxhZ3MgZmxhZ3MpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcXG5pbmRleCBhMzhkNGJiNzQ2MjFmOS4uMTc3MTFlZTM3YzhiZTMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1xcbkBAIC0xNjEsNiArMTYxLDggQEAgc3RhdGljIGludCBtYW5hX2dkX2luaXRfcmVnaXN0ZXJzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBib29sIG1hbmFfbmVlZF9sb2coc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIGludCBlcnIpXFxuIHtcXG4gXFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xcbitcXHRib29sIG5lZWRfbG9nID0gdHJ1ZTtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuIFxcdGlmIChlcnIgIT0gLUVUSU1FRE9VVClcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuQEAgLTE2OCwxMSArMTcwLDEzIEBAIGJvb2wgbWFuYV9uZWVkX2xvZyhzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgaW50IGVycilcXG4gXFx0aWYgKCFnYylcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XFxuIFxcdGh3YyA9IGdjLVxcdTAwM2Vod2MuZHJpdmVyX2RhdGE7XFxuIFxcdGlmIChod2MgXFx1MDAyNlxcdTAwMjYgaHdjLVxcdTAwM2Vod2NfdGltZW91dCA9PSAwKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdG5lZWRfbG9nID0gZmFsc2U7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmdjLVxcdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xcbiBcXG4tXFx0cmV0dXJuIHRydWU7XFxuK1xcdHJldHVybiBuZWVkX2xvZztcXG4gfVxcbiBcXG4gc3RhdGljIGludCBtYW5hX2dkX3F1ZXJ5X21heF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuQEAgLTM2Nyw5ICszNzEsMjcgQEAgc3RhdGljIGludCBtYW5hX2dkX2RldGVjdF9kZXZpY2VzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBpbnQgbWFuYV9nZF9zZW5kX3JlcXVlc3Qoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUzMiByZXFfbGVuLCBjb25zdCB2b2lkICpyZXEsXFxuIFxcdFxcdFxcdCB1MzIgcmVzcF9sZW4sIHZvaWQgKnJlc3ApXFxuIHtcXG4tXFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjID0gZ2MtXFx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcXG4rXFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmdjLVxcdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xcbitcXHRod2MgPSBnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xcbitcXHRpZiAoIWh3Yykge1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdH1cXG4rXFx0aHdjLVxcdTAwM2VhY3RpdmVfc2VuZGVycysrO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdGVyciA9IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChod2MsIHJlcV9sZW4sIHJlcSwgcmVzcF9sZW4sIHJlc3ApO1xcbiBcXG4tXFx0cmV0dXJuIG1hbmFfaHdjX3NlbmRfcmVxdWVzdChod2MsIHJlcV9sZW4sIHJlcSwgcmVzcF9sZW4sIHJlc3ApO1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XFxuK1xcdGlmICgtLWh3Yy1cXHUwMDNlYWN0aXZlX3NlbmRlcnMgPT0gMClcXG4rXFx0XFx0d2FrZV91cChcXHUwMDI2Z2MtXFx1MDAzZWh3Y19kcmFpbl93YWl0cSk7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmdjLVxcdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX05TKG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0LCBcXFwiTkVUX01BTkFcXFwiKTtcXG4gXFxuQEAgLTYyMiw2ICs2NDQsNyBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuIFxcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmICghZ2MpIHtcXG5AQCAtNjMxLDE0ICs2NTQsMTcgQEAgc3RhdGljIHZvaWQgbWFuYV9zZXJ2X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcXG4gXFx0aHdjID0gZ2MtXFx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcXG4gXFx0aWYgKCFod2MpIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XFxuIFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIk1BTkEgc2VydmljZTogbm8gSFdDXFxcXG5cXFwiKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIEhXQyBpcyBub3QgcmVzcG9uZGluZyBpbiB0aGlzIGNhc2UsIHNvIGRvbid0IHdhaXQgKi9cXG4gXFx0aHdjLVxcdTAwM2Vod2NfdGltZW91dCA9IDA7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmdjLVxcdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xcbiBcXG4gXFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIk1BTkEgcmVzZXQgY3ljbGUgc3RhcnRcXFxcblxcXCIpO1xcbiBcXG5AQCAtNzYxLDYgKzc4Nyw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2RfcHJvY2Vzc19lcWUoc3RydWN0IGdkbWFfcXVldWUgKmVxKVxcbiBcXHR1bmlvbiBnZG1hX2VxZV9pbmZvIGVxZV9pbmZvO1xcbiBcXHRlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZTtcXG4gXFx0c3RydWN0IGdkbWFfZXZlbnQgZXZlbnQ7XFxuK1xcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqY3FfdGFibGU7XFxuIFxcdHN0cnVjdCBnZG1hX3F1ZXVlICpjcTtcXG4gXFx0c3RydWN0IGdkbWFfZXFlICplcWU7XFxuIFxcdHUzMiBjcV9pZDtcXG5AQCAtNzcyLDEwICs3OTksMTEgQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9wcm9jZXNzX2VxZShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqZXEpXFxuIFxcdHN3aXRjaCAodHlwZSkge1xcbiBcXHRjYXNlIEdETUFfRVFFX0NPTVBMRVRJT046XFxuIFxcdFxcdGNxX2lkID0gZXFlLVxcdTAwM2VkZXRhaWxzWzBdIFxcdTAwMjYgMHhGRkZGRkY7XFxuLVxcdFxcdGlmIChXQVJOX09OX09OQ0UoY3FfaWQgXFx1MDAzZT0gZ2MtXFx1MDAzZW1heF9udW1fY3FzKSlcXG4rXFx0XFx0Y3FfdGFibGUgPSByY3VfZGVyZWZlcmVuY2UoZ2MtXFx1MDAzZWNxX3RhYmxlKTtcXG4rXFx0XFx0aWYgKFdBUk5fT05fT05DRShjcV9pZCBcXHUwMDNlPSBnYy1cXHUwMDNlbWF4X251bV9jcXMgfHwgIWNxX3RhYmxlKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRcXHRjcSA9IGdjLVxcdTAwM2VjcV90YWJsZVtjcV9pZF07XFxuK1xcdFxcdGNxID0gcmN1X2RlcmVmZXJlbmNlKGNxX3RhYmxlW2NxX2lkXSk7XFxuIFxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWNxIHx8IGNxLVxcdTAwM2V0eXBlICE9IEdETUFfQ1EgfHwgY3EtXFx1MDAzZWlkICE9IGNxX2lkKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbkBAIC0xMDgyLDE1ICsxMTEwLDI4IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2RfY3JlYXRlX2NxKGNvbnN0IHN0cnVjdCBnZG1hX3F1ZXVlX3NwZWMgKnNwZWMsXFxuIHN0YXRpYyB2b2lkIG1hbmFfZ2RfZGVzdHJveV9jcShzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBnZG1hX3F1ZXVlICpxdWV1ZSlcXG4ge1xcbitcXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSBfX3JjdSAqKmNxX3RhYmxlO1xcbiBcXHR1MzIgaWQgPSBxdWV1ZS1cXHUwMDNlaWQ7XFxuIFxcbi1cXHRpZiAoaWQgXFx1MDAzZT0gZ2MtXFx1MDAzZW1heF9udW1fY3FzKVxcbitcXHQvKiBObyByY3VfcmVhZF9sb2NrKCkgaGVyZTogbWFuYV9nZF9kZXN0cm95X2NxKCkgcnVucyBvbmx5IG9uIHRoZVxcbitcXHQgKiBDUS1kZXN0cm95L3RlYXJkb3duIHBhdGgsIHdoZXJlIHRoZSBiYXNlIGNxX3RhYmxlIGlzIHN0YWJsZS4gIFNlZVxcbitcXHQgKiB0aGUgbGlmZWN5Y2xlIG5vdGUgb24gZ2RtYV9jb250ZXh0OjpjcV90YWJsZSBpbiBnZG1hLmggZm9yIHdoeSB0aGVcXG4rXFx0ICogXFxcInRydWVcXFwiIHByZWRpY2F0ZSBpcyBzb3VuZC5cXG4rXFx0ICovXFxuK1xcdGNxX3RhYmxlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnYy1cXHUwMDNlY3FfdGFibGUsIHRydWUpO1xcbitcXHRpZiAoIWNxX3RhYmxlIHx8IGlkIFxcdTAwM2U9IGdjLVxcdTAwM2VtYXhfbnVtX2NxcylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0aWYgKCFnYy1cXHUwMDNlY3FfdGFibGVbaWRdKVxcbitcXHRpZiAoIXJjdV9hY2Nlc3NfcG9pbnRlcihjcV90YWJsZVtpZF0pKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRnYy1cXHUwMDNlY3FfdGFibGVbaWRdID0gTlVMTDtcXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNxX3RhYmxlW2lkXSwgTlVMTCk7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBpbi1mbGlnaHQgRVEgaGFuZGxlcnMgdGhhdCBtYXkgaGF2ZSBsb2FkZWQgdGhlIG9sZFxcbitcXHQgKiBwb2ludGVyIHZpYSByY3VfZGVyZWZlcmVuY2UoKSB0byBmaW5pc2ggYmVmb3JlIHRoZSBjYWxsZXJcXG4rXFx0ICogZnJlZXMgdGhlIENRIG1lbW9yeS5cXG4rXFx0ICovXFxuK1xcdHN5bmNocm9uaXplX3JjdSgpO1xcbiB9XFxuIFxcbiBpbnQgbWFuYV9nZF9jcmVhdGVfaHdjX3F1ZXVlKHN0cnVjdCBnZG1hX2RldiAqZ2QsXFxuQEAgLTExODUsNiArMTIyNiwxNiBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfY3JlYXRlX2RtYV9yZWdpb24oc3RydWN0IGdkbWFfZGV2ICpnZCxcXG4gXFx0aWYgKCFNQU5BX1BBR0VfQUxJR05FRChnbWktXFx1MDAzZXZpcnRfYWRkcikpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0LyogTm8gUkNVIG5lZWRlZDogdGhpcyBydW5zIG9ubHkgb24gdGhlIGRhdGEtcGF0aCBxdWV1ZS1jcmVhdGlvblxcbitcXHQgKiBwYXRoIChtYW5hX2dkX2NyZWF0ZV9tYW5hX2VxL21hbmFfZ2RfY3JlYXRlX21hbmFfd3FfY3EsIGNhbGxlZFxcbitcXHQgKiBieSBtYW5hX2VuIHVuZGVyIFJUTkwgYW5kIGJ5IG1hbmFfaWIgUkRNQSB2ZXJicywgb3IgZHVyaW5nXFxuK1xcdCAqIGluaXQpLiAgRXZlcnkgdGVhcmRvd24gcGF0aCDigJQgbWFuYV9nZF9yZW1vdmUsIG1hbmFfZ2Rfc3VzcGVuZCxcXG4rXFx0ICogYW5kIHRoZSBIV0MgcmVzZXQvc2VydmljZSBwYXRoICh3aGljaCBnb2VzIHRocm91Z2hcXG4rXFx0ICogbWFuYV9nZF9zdXNwZW5kKSDigJQgZHJhaW5zIHRob3NlIGNvbnN1bWVycyB2aWEgbWFuYV9yZG1hX3JlbW92ZSgpXFxuK1xcdCAqICsgbWFuYV9yZW1vdmUoKSBiZWZvcmUgbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKCkgY2xlYXJzXFxuK1xcdCAqIGdjLVxcdTAwM2Vod2MuZHJpdmVyX2RhdGEsIHNvIG5vIGNvbmN1cnJlbnQgZGVzdHJveSBjYW4gcmFjZSB3aXRoXFxuK1xcdCAqIHRoaXMgZGVyZWZlcmVuY2UuXFxuK1xcdCAqL1xcbiBcXHRod2MgPSBnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xcbiBcXHRyZXFfbXNnX3NpemUgPSBzdHJ1Y3Rfc2l6ZShyZXEsIHBhZ2VfYWRkcl9saXN0LCBudW1fcGFnZSk7XFxuIFxcdGlmIChyZXFfbXNnX3NpemUgXFx1MDAzZSBod2MtXFx1MDAzZW1heF9yZXFfbXNnX3NpemUpXFxuQEAgLTEzNzQsNyArMTQyNSwxNyBAQCBpbnQgbWFuYV9nZF92ZXJpZnlfdmZfdmVyc2lvbihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0LyogTm8gUkNVIG5lZWRlZDogdGhpcyBydW5zIG9ubHkgaW5zaWRlIG1hbmFfZ2Rfc2V0dXAsIG9uIHRoZVxcbitcXHQgKiBwcm9iZSBhbmQgcmVzdW1lIHBhdGhzLiAgVGhlIFBDSS9QTSBjb3JlIGhvbGRzIGRldmljZV9sb2NrXFxuK1xcdCAqIGFjcm9zcyAucHJvYmUvLnJlc3VtZSBhbmQgLnJlbW92ZS8uc3VzcGVuZCwgc28gc2V0dXAgY2Fubm90XFxuK1xcdCAqIG92ZXJsYXAgdGVhcmRvd24gb2YgdGhlIHNhbWUgZGV2aWNlLiAgVGhlIEhXQyByZXNldC9zZXJ2aWNlXFxuK1xcdCAqIHBhdGggaXMgYWRkaXRpb25hbGx5IHNlcmlhbGl6ZWQgYnkgR0NfSU5fU0VSVklDRSBhbmQgcnVuc1xcbitcXHQgKiBzdXNwZW5kIChkZXN0cm95KSB0aGVuIHJlc3VtZSAodGhpcykgc2VxdWVudGlhbGx5IGluIG9uZSB3b3JrXFxuK1xcdCAqIGl0ZW0uICBkcml2ZXJfZGF0YSB3YXMganVzdCBzZXQgYnkgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWxcXG4rXFx0ICogZWFybGllciBpbiB0aGlzIHNhbWUgc2V0dXAgY2FsbCwgc28gaXQgaXMgbGl2ZSBoZXJlLlxcbitcXHQgKi9cXG4gXFx0aHdjID0gZ2MtXFx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcXG4rXFxuIFxcdG1hbmFfZ2RfaW5pdF9yZXFfaGRyKFxcdTAwMjZyZXEuaGRyLCBHRE1BX1ZFUklGWV9WRl9EUklWRVJfVkVSU0lPTixcXG4gXFx0XFx0XFx0ICAgICBzaXplb2YocmVxKSwgc2l6ZW9mKHJlc3ApKTtcXG4gXFxuQEAgLTIzNjQsNiArMjQyNSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNmdjLVxcdTAwM2VlcV90ZXN0X2V2ZW50X211dGV4KTtcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2Z2MtXFx1MDAzZWdpY19tdXRleCk7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2spO1xcbiBcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgZ2MpO1xcbiBcXHRnYy1cXHUwMDNlYmFyMF9wYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTtcXG4gXFx0Z2MtXFx1MDAzZWJhcjBfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuY1xcbmluZGV4IGUzYzI0ZDUwZGFkMDdjLi4wNDgxZDQwNDQzNDI0ZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmNcXG5AQCAtNCwyNyArNCw1NSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L21hbmEvZ2RtYS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L21hbmEvbWFuYS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L21hbmEvaHdfY2hhbm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC92bWFsbG9jLmhcXHUwMDNlXFxuIFxcbisvKiBBY3F1aXJlIGEgZnJlZSBtZXNzYWdlIHNsb3QgZnJvbSB0aGUgaW5mbGlnaHQgYml0bWFwLiAgUmV0dXJuc1xcbisgKiAtRU5PREVWIGlmIHRoZSBjaGFubmVsIGlzIHRvcm4gZG93biwgb3IgLUVUSU1FRE9VVCBpZiBhIHByaW9yIEhXQ1xcbisgKiBjb21tYW5kIGhhcyB0aW1lZCBvdXQgKHByZXNlcnZpbmcgdGhlIGVycm9yIGNvZGUgY2FsbGVycyBleHBlY3QpLlxcbisgKi9cXG4gc3RhdGljIGludCBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2ICptc2dfaWQpXFxuIHtcXG4gXFx0c3RydWN0IGdkbWFfcmVzb3VyY2UgKnIgPSBcXHUwMDI2aHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHR1MzIgaW5kZXg7XFxuIFxcbi1cXHRkb3duKFxcdTAwMjZod2MtXFx1MDAzZXNlbWEpO1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZyLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ci1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRpZiAoIWh3Yy1cXHUwMDNlY2hhbm5lbF91cCB8fCBod2MtXFx1MDAzZWh3Y190aW1lZF9vdXQpIHtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ci1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRyZXR1cm4gaHdjLVxcdTAwM2VjaGFubmVsX3VwID8gLUVUSU1FRE9VVCA6IC1FTk9ERVY7XFxuK1xcdFxcdH1cXG4gXFxuLVxcdGluZGV4ID0gZmluZF9maXJzdF96ZXJvX2JpdChod2MtXFx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwLFxcbi1cXHRcXHRcXHRcXHQgICAgaHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzLnNpemUpO1xcbitcXHRcXHRpbmRleCA9IGZpbmRfZmlyc3RfemVyb19iaXQoci1cXHUwMDNlbWFwLCByLVxcdTAwM2VzaXplKTtcXG4rXFx0XFx0aWYgKGluZGV4IFxcdTAwM2Mgci1cXHUwMDNlc2l6ZSkge1xcbitcXHRcXHRcXHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDtcXG4rXFxuK1xcdFxcdFxcdGJpdG1hcF9zZXQoci1cXHUwMDNlbWFwLCBpbmRleCwgMSk7XFxuK1xcdFxcdFxcdGN0eCA9IFxcdTAwMjZod2MtXFx1MDAzZWNhbGxlcl9jdHhbaW5kZXhdO1xcbitcXHRcXHRcXHRyZWluaXRfY29tcGxldGlvbihcXHUwMDI2Y3R4LVxcdTAwM2Vjb21wX2V2ZW50KTtcXG4rXFx0XFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZjdHgtXFx1MDAzZXJlZmNudCwgMSk7XFxuK1xcdFxcdFxcdGN0eC1cXHUwMDNlbXNnX2lkID0gaW5kZXg7XFxuK1xcdFxcdFxcdGN0eC1cXHUwMDNlZXJyb3IgPSAtRUlOUFJPR1JFU1M7XFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnItXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ci1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXG4tXFx0Yml0bWFwX3NldChod2MtXFx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwLCBpbmRleCwgMSk7XFxuK1xcdFxcdHdhaXRfZXZlbnQoaHdjLVxcdTAwM2Vtc2dfd2FpdHEsXFxuK1xcdFxcdFxcdCAgICFod2MtXFx1MDAzZWNoYW5uZWxfdXAgfHxcXG4rXFx0XFx0XFx0ICAgaHdjLVxcdTAwM2Vod2NfdGltZWRfb3V0IHx8XFxuK1xcdFxcdFxcdCAgICFiaXRtYXBfZnVsbChyLVxcdTAwM2VtYXAsIHItXFx1MDAzZXNpemUpKTtcXG4gXFxuLVxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnItXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0aWYgKCFod2MtXFx1MDAzZWNoYW5uZWxfdXApXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4tXFx0Km1zZ19pZCA9IGluZGV4O1xcbitcXHRcXHRpZiAoaHdjLVxcdTAwM2Vod2NfdGltZWRfb3V0KVxcbitcXHRcXHRcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rXFx0fVxcbiBcXG4rXFx0Km1zZ19pZCA9IGluZGV4O1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMzQsMTAgKzYyLDE3IEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX3B1dF9tc2dfaW5kZXgoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgbXNnX2lkKVxcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnItXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tXFx0Yml0bWFwX2NsZWFyKGh3Yy1cXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5tYXAsIG1zZ19pZCwgMSk7XFxuK1xcdGJpdG1hcF9jbGVhcihyLVxcdTAwM2VtYXAsIG1zZ19pZCwgMSk7XFxuIFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnItXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFxuLVxcdHVwKFxcdTAwMjZod2MtXFx1MDAzZXNlbWEpO1xcbitcXHR3YWtlX3VwKFxcdTAwMjZod2MtXFx1MDAzZW1zZ193YWl0cSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGh3Y19jdHhfcHV0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyxcXG4rXFx0XFx0XFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHgpXFxuK3tcXG4rXFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2Y3R4LVxcdTAwM2VyZWZjbnQpKVxcbitcXHRcXHRtYW5hX2h3Y19wdXRfbXNnX2luZGV4KGh3YywgY3R4LVxcdTAwM2Vtc2dfaWQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG1hbmFfaHdjX3ZlcmlmeV9yZXNwX21zZyhjb25zdCBzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmNhbGxlcl9jdHgsXFxuQEAgLTgzLDYgKzExOCwxNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19oYW5kbGVfcmVzcChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXNwX2xlbixcXG4gXFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHg7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHQvKiBWYWxpZGF0ZSBtc2dfaWQgaXMgaW4gcmFuZ2UgYmVmb3JlIHVzaW5nIGl0IHRvIGluZGV4IGJpdG1hcFxcbitcXHQgKiBhbmQgY2FsbGVyX2N0eCBhcnJheS4gIE1hbGljaW91cyBmaXJtd2FyZSBjb3VsZCBzZW5kXFxuK1xcdCAqIG91dC1vZi1yYW5nZSBtc2dfaWQgY2F1c2luZyBvdXQtb2YtYm91bmRzIGFjY2Vzcy5cXG4rXFx0ICovXFxuK1xcdGlmIChtc2dfaWQgXFx1MDAzZT0gaHdjLVxcdTAwM2VudW1faW5mbGlnaHRfbXNnKSB7XFxuK1xcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsIFxcXCJod2Nfcng6IG1zZ19pZCAldSBcXHUwMDNlPSBtYXggJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdG1zZ19pZCwgaHdjLVxcdTAwM2VudW1faW5mbGlnaHRfbXNnKTtcXG4rXFx0XFx0bWFuYV9od2NfcG9zdF9yeF93cWUoaHdjLVxcdTAwM2VyeHEsIHJ4X3JlcSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKCF0ZXN0X2JpdChtc2dfaWQsIGh3Yy1cXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5tYXApKSB7XFxuIFxcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsIFxcXCJod2Nfcng6IGludmFsaWQgbXNnX2lkID0gJXVcXFxcblxcXCIsIG1zZ19pZCk7XFxuIFxcdFxcdG1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Yy1cXHUwMDNlcnhxLCByeF9yZXEpO1xcbkBAIC05MCwyMiArMTM2LDQ0IEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX2hhbmRsZV9yZXNwKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlc3BfbGVuLFxcbiBcXHR9XFxuIFxcbiBcXHRjdHggPSBod2MtXFx1MDAzZWNhbGxlcl9jdHggKyBtc2dfaWQ7XFxuLVxcdGVyciA9IG1hbmFfaHdjX3ZlcmlmeV9yZXNwX21zZyhjdHgsIHJlc3BfbXNnLCByZXNwX2xlbik7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0Y3R4LVxcdTAwM2VzdGF0dXNfY29kZSA9IHJlc3BfbXNnLVxcdTAwM2VzdGF0dXM7XFxuK1xcdC8qIFJlamVjdCByZXNwb25zZXMgbGFyZ2VyIHRoYW4gdGhlIFJYIERNQSBidWZmZXIg4oCUIHRoZSBTR0VcXG4rXFx0ICogbGltaXRzIHdoYXQgaGFyZHdhcmUgY2FuIERNQSwgc28gYW4gb3ZlcnNpemVkIHJlc3BfbGVuXFxuK1xcdCAqIGluZGljYXRlcyBhIGZpcm13YXJlIGJ1Zy4gIEZhaWwgcmF0aGVyIHRoYW4gc2lsZW50bHlcXG4rXFx0ICogdHJ1bmNhdGluZy5cXG4rXFx0ICovXFxuK1xcdGlmIChyZXNwX2xlbiBcXHUwMDNlIHJ4X3JlcS1cXHUwMDNlYnVmX2xlbikge1xcbitcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiSFdDIFJYOiByZXNwX2xlbiAldSBcXHUwMDNlIGJ1Zl9sZW4gJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHJlc3BfbGVuLCByeF9yZXEtXFx1MDAzZWJ1Zl9sZW4pO1xcbitcXHRcXHRyZXNwX2xlbiA9IDA7XFxuK1xcdH1cXG4gXFxuLVxcdG1lbWNweShjdHgtXFx1MDAzZW91dHB1dF9idWYsIHJlc3BfbXNnLCByZXNwX2xlbik7XFxuLW91dDpcXG4tXFx0Y3R4LVxcdTAwM2VlcnJvciA9IGVycjtcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0ZXJyID0gbWFuYV9od2NfdmVyaWZ5X3Jlc3BfbXNnKGN0eCwgcmVzcF9tc2csIHJlc3BfbGVuKTtcXG4gXFxuLVxcdC8qIE11c3QgcG9zdCByeCB3cWUgYmVmb3JlIGNvbXBsZXRlKCksIG90aGVyd2lzZSB0aGUgbmV4dCByeCBtYXlcXG4tXFx0ICogaGl0IG5vX3dxZSBlcnJvci5cXG4rXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgY3R4LVxcdTAwM2VvdXRwdXRfYnVmKSB7XFxuK1xcdFxcdGN0eC1cXHUwMDNlc3RhdHVzX2NvZGUgPSByZXNwX21zZy1cXHUwMDNlc3RhdHVzO1xcbitcXHRcXHRtZW1jcHkoY3R4LVxcdTAwM2VvdXRwdXRfYnVmLCByZXNwX21zZywgcmVzcF9sZW4pO1xcbitcXHRcXHRjdHgtXFx1MDAzZWVycm9yID0gMDtcXG4rXFx0fSBlbHNlIGlmIChjdHgtXFx1MDAzZW91dHB1dF9idWYpIHtcXG4rXFx0XFx0LyogT25seSBvdmVyd3JpdGUgZXJyb3IgaWYgdGhlIHNlbmRlciBoYXNuJ3QgdGltZWQgb3V0XFxuK1xcdFxcdCAqIG9yIGJlZW4gZm9yY2UtY29tcGxldGVkIGJ5IGRlc3Ryb3kuICBXaGVuIG91dHB1dF9idWZcXG4rXFx0XFx0ICogaXMgTlVMTCwgYSB0ZXJtaW5hbCBlcnJvciAoLUVOT0RFViBvciB0aW1lb3V0KSBoYXNcXG4rXFx0XFx0ICogYWxyZWFkeSBiZWVuIHNldCDigJQgcHJlc2VydmUgaXQgc28gdGhlIHNlbmRlciBkb2Vzbid0XFxuK1xcdFxcdCAqIHNlZSBhIHNwdXJpb3VzIHN1Y2Nlc3MuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjdHgtXFx1MDAzZWVycm9yID0gZXJyO1xcbitcXHR9XFxuK1xcbitcXHQvKiBQb3N0IFJYIFdRRSBiZWZvcmUgY29tcGxldGluZyDigJQgdGhlIG5leHQgcmVzcG9uc2UgbWF5IGFycml2ZVxcbitcXHQgKiBpbW1lZGlhdGVseSBhbmQgbmVlZHMgYSBwb3N0ZWQgYnVmZmVyLlxcbiBcXHQgKi9cXG4gXFx0bWFuYV9od2NfcG9zdF9yeF93cWUoaHdjLVxcdTAwM2VyeHEsIHJ4X3JlcSk7XFxuLVxcbiBcXHRjb21wbGV0ZShcXHUwMDI2Y3R4LVxcdTAwM2Vjb21wX2V2ZW50KTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRod2NfY3R4X3B1dChod2MsIGN0eCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG1hbmFfaHdjX2luaXRfZXZlbnRfaGFuZGxlcih2b2lkICpjdHgsIHN0cnVjdCBnZG1hX3F1ZXVlICpxX3NlbGYsXFxuQEAgLTE0Niw3ICsyMTQsMTIgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKHZvaWQgKmN0eCwgc3RydWN0IGdkbWFfcXVldWUgKnFfc2VsZixcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRcXHRjYXNlIEhXQ19JTklUX0RBVEFfUVVFVUVfREVQVEg6XFxuLVxcdFxcdFxcdGh3Yy1cXHUwMDNlaHdjX2luaXRfcV9kZXB0aF9tYXggPSAodTE2KXZhbDtcXG4rXFx0XFx0XFx0LyogSFdDX0lOSVRfREFUQV9RVUVVRV9ERVBUSCBpcyBhIDI0LWJpdCBmaWVsZC4gIEtlZXBcXG4rXFx0XFx0XFx0ICogdGhlIGZ1bGwgZGV2aWNlLXJlcG9ydGVkIHZhbHVlIGhlcmU7IGl0IGlzIGNsYW1wZWRcXG4rXFx0XFx0XFx0ICogYW5kIHZhbGlkYXRlZCBpbiBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbCgpIHJhdGhlclxcbitcXHRcXHRcXHQgKiB0aGFuIHNpbGVudGx5IHRydW5jYXRlZCB0byB1MTYuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRod2MtXFx1MDAzZWh3Y19pbml0X3FfZGVwdGhfbWF4ID0gdmFsO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdGNhc2UgSFdDX0lOSVRfREFUQV9NQVhfUkVRVUVTVDpcXG5AQCAtMjYxLDE5ICszMzQsNjkgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfcnhfZXZlbnRfaGFuZGxlcih2b2lkICpjdHgsIHUzMiBnZG1hX3J4cV9pZCxcXG4gXFxuIFxcdHNnZSA9IChzdHJ1Y3QgZ2RtYV9zZ2UgKikod3FlICsgOCArIGRtYV9vb2ItXFx1MDAzZWlubGluZV9vb2Jfc2l6ZV9kaXY0ICogNCk7XFxuIFxcbi1cXHQvKiBTZWxlY3QgdGhlIFJYIHdvcmsgcmVxdWVzdCBmb3IgdmlydHVhbCBhZGRyZXNzIGFuZCBmb3IgcmVwb3N0aW5nLiAqL1xcbi1cXHRycV9iYXNlX2FkZHIgPSBod2NfcnhxLVxcdTAwM2Vtc2dfYnVmLVxcdTAwM2VtZW1faW5mby5kbWFfaGFuZGxlO1xcbi1cXHRyeF9yZXFfaWR4ID0gKHNnZS1cXHUwMDNlYWRkcmVzcyAtIHJxX2Jhc2VfYWRkcikgLyBod2MtXFx1MDAzZW1heF9yZXFfbXNnX3NpemU7XFxuK1xcdC8qIGlubGluZV9vb2Jfc2l6ZV9kaXY0IGlzIHJlYWQgZnJvbSB0aGUgV1FFIGluIGRldmljZS1hY2Nlc3NpYmxlIFJRXFxuK1xcdCAqIG1lbW9yeSwgc28gYSBtYWxpY2lvdXMgaG9zdCBpbiBhIENWTSAob3IgYnVnZ3kgZmlybXdhcmUpIGNvdWxkIHNldFxcbitcXHQgKiBpdCB0byBwdXNoIHRoZSBTR0UgcGFzdCB0aGUgUlEgYnVmZmVyLiAgQm91bmRzLWNoZWNrIHRoZSBTR0UgaXRcXG4rXFx0ICogbG9jYXRlcyBiZWZvcmUgZGVyZWZlcmVuY2luZyBzZ2UtXFx1MDAzZWFkZHJlc3MgYmVsb3cuICBBIHZhbGlkbHkgcG9zdGVkXFxuK1xcdCAqIFdRRSBrZWVwcyB0aGUgU0dFIGluc2lkZSB0aGUgcmluZyAod29yc3QgY2FzZSBlbmRzIGV4YWN0bHkgYXQgdGhlXFxuK1xcdCAqIGJ1ZmZlciBib3VuZGFyeSk7IHJlamVjdCBhbnl0aGluZyB0aGF0IHdvdWxkIHJlYWQgcGFzdCBpdC4gIFRoZVxcbitcXHQgKiBzbG90IGNhbm5vdCBiZSB0cnVzdGVkIGhlcmUsIHNvIGxlYWsgdGhpcyBSWCBXUUUgcmF0aGVyIHRoYW4gcmVwb3N0XFxuK1xcdCAqIHRoZSB3cm9uZyBvbmUgLS0gYXMgaW4gdGhlIFNHRS1hZGRyZXNzIG1pc21hdGNoIHBhdGggYmVsb3cuXFxuK1xcdCAqL1xcbitcXHRpZiAoKHU4ICopKHNnZSArIDEpIFxcdTAwM2UgKHU4ICopcnEtXFx1MDAzZXF1ZXVlX21lbV9wdHIgKyBycS1cXHUwMDNlcXVldWVfc2l6ZSkge1xcbitcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiSFdDIFJYOiBTR0UgcGFzdCBSUSBidWZmZXIsIG9vYl9kaXY0PSV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRkbWFfb29iLVxcdTAwM2VpbmxpbmVfb29iX3NpemVfZGl2NCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbiBcXG4tXFx0aWYgKHJ4X3JlcV9pZHggXFx1MDAzZT0gaHdjX3J4cS1cXHUwMDNlbXNnX2J1Zi1cXHUwMDNlbnVtX3JlcXMpIHtcXG4tXFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkhXQyBSWDogd3JvbmcgcnhfcmVxX2lkeD0lbGx1LCBudW1fcmVxcz0ldVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0cnhfcmVxX2lkeCwgaHdjX3J4cS1cXHUwMDNlbXNnX2J1Zi1cXHUwMDNlbnVtX3JlcXMpO1xcbitcXHQvKiBSZWNvdmVyIHRoZSBvcmlnaW5hdGluZyBSWCBzbG90IGZyb20gdGhlIFNHRSBhZGRyZXNzLiAgT2YgdGhlIHRocmVlXFxuK1xcdCAqIHRlcm1zIGhlcmUgb25seSBzZ2UtXFx1MDAzZWFkZHJlc3MgbGl2ZXMgaW4gZGV2aWNlLWFjY2Vzc2libGUgUlEgbWVtb3J5O1xcbitcXHQgKiBycV9iYXNlX2FkZHIgYW5kIG1heF9yZXNwX21zZ19zaXplIGFyZSBkcml2ZXItcHJpdmF0ZSBjb25zdGFudHMuICBBblxcbitcXHQgKiBpbi1yYW5nZSBidXQgd3JvbmcvdW5hbGlnbmVkIFNHRSAoY29ycnVwdGVkIFdRRSwgb3IgYSBtYWxpY2lvdXMgaG9zdFxcbitcXHQgKiBpbiBhIENWTSkgd291bGQgb3RoZXJ3aXNlIHRydW5jYXRlIG9udG8gYSBuZWlnaGJvdXJpbmcgc2xvdCwgbGV0dGluZ1xcbitcXHQgKiB1cyByZWFkIGEgc3RhbGUgcmVzcG9uc2UgdGhhdCBjb3VsZCBjb21wbGV0ZSB0aGUgd3JvbmcsIHJldXNlZFxcbitcXHQgKiBpbi1mbGlnaHQgcmVxdWVzdC4gIFJlcXVpcmUgdGhlIGluZGV4IHRvIGJlIGluIHJhbmdlIEFORCB0aGUgYWRkcmVzc1xcbitcXHQgKiB0byBleGFjdGx5IG1hdGNoIHRoZSB2YWx1ZSB0aGUgZHJpdmVyIHBvc3RlZCBmb3IgdGhhdCBzbG90LlxcbitcXHQgKi9cXG4rXFx0cnFfYmFzZV9hZGRyID0gaHdjX3J4cS1cXHUwMDNlbXNnX2J1Zi1cXHUwMDNlbWVtX2luZm8uZG1hX2hhbmRsZTtcXG4rXFx0cnhfcmVxX2lkeCA9IChzZ2UtXFx1MDAzZWFkZHJlc3MgLSBycV9iYXNlX2FkZHIpIC8gaHdjLVxcdTAwM2VtYXhfcmVzcF9tc2dfc2l6ZTtcXG4rXFxuK1xcdGlmIChyeF9yZXFfaWR4IFxcdTAwM2U9IGh3Y19yeHEtXFx1MDAzZXF1ZXVlX2RlcHRoKSB7XFxuK1xcdFxcdC8qIENhbm5vdCB0cnVzdCB3aGljaCBXUUUgdGhpcyBpcywgc28gd2UgY2Fubm90IHNhZmVseSByZXBvc3RcXG4rXFx0XFx0ICogaXQ7IGxlYWsgb25lIFJYIFdRRSBhbmQgYmFpbC4gIEFuIG91dC1vZi1yYW5nZSBpbmRleCBtZWFuc1xcbitcXHRcXHQgKiBhIGNvcnJ1cHRlZCBTR0UgZnJvbSBoYXJkd2FyZSAob3IgaG9zdCB0YW1wZXJpbmcpLCBhblxcbitcXHRcXHQgKiB1bnJlY292ZXJhYmxlIGRldmljZSBlcnJvci5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsIFxcXCJIV0MgUlg6IFNHRSBpZHggJWxsdSBvdXQgb2YgcmFuZ2VcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHJ4X3JlcV9pZHgpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdHJ4X3JlcSA9IFxcdTAwMjZod2NfcnhxLVxcdTAwM2Vtc2dfYnVmLVxcdTAwM2VyZXFzW3J4X3JlcV9pZHhdO1xcbitcXHRpZiAoc2dlLVxcdTAwM2VhZGRyZXNzICE9ICh1NjQpcnhfcmVxLVxcdTAwM2VidWZfc2dlX2FkZHIpIHtcXG4rXFx0XFx0LyogSW4tcmFuZ2UgaW5kZXggYnV0IHRoZSBhZGRyZXNzIGRvZXMgbm90IG1hdGNoIHdoYXQgdGhlXFxuK1xcdFxcdCAqIGRyaXZlciBwb3N0ZWQgZm9yIHRoYXQgc2xvdDsgdGhlIHNhbWUgdW5yZWNvdmVyYWJsZSBjYXNlLFxcbitcXHRcXHQgKiBzbyBsZWFrIHRoaXMgV1FFIHJhdGhlciB0aGFuIHJlcG9zdCB0aGUgd3Jvbmcgb25lLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkhXQyBSWDogaW52YWxpZCBTR0UgYWRkcmVzcyAlbGx4IChpZHg9JWxsdSlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHNnZS1cXHUwMDNlYWRkcmVzcywgcnhfcmVxX2lkeCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0cmVzcCA9IChzdHJ1Y3QgZ2RtYV9yZXNwX2hkciAqKXJ4X3JlcS1cXHUwMDNlYnVmX3ZhO1xcbiBcXG4rXFx0LyogVmFsaWRhdGUgcmVzcF9sZW4gY292ZXJzIHRoZSByZXNwb25zZSBoZWFkZXIgYmVmb3JlIHJlYWRpbmdcXG4rXFx0ICogaHdjX21zZ19pZC4gIEEgc2hvcnQgcmVzcG9uc2UgbGVhdmVzIHN0YWxlIGRhdGEgZnJvbSB0aGVcXG4rXFx0ICogcHJldmlvdXMgYnVmZmVyIG9jY3VwYW50LCB3aGljaCBjb3VsZCBtYXRjaCBhIGxpdmUgc2xvdCBhbmRcXG4rXFx0ICogY29tcGxldGUgdGhlIHdyb25nIHJlcXVlc3QuXFxuK1xcdCAqL1xcbitcXHRpZiAocnhfb29iLVxcdTAwM2V0eF9vb2JfZGF0YV9zaXplIFxcdTAwM2Mgc2l6ZW9mKCpyZXNwKSkge1xcbitcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiSFdDIFJYOiBzaG9ydCByZXNwX2xlbj0ldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cnhfb29iLVxcdTAwM2V0eF9vb2JfZGF0YV9zaXplKTtcXG4rXFx0XFx0bWFuYV9od2NfcG9zdF9yeF93cWUoaHdjX3J4cSwgcnhfcmVxKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHQvKiBSZWFkIG1zZ19pZCBvbmNlIGZyb20gRE1BIGJ1ZmZlciB0byBwcmV2ZW50IFRPQ1RPVTpcXG4gXFx0ICogRE1BIG1lbW9yeSBpcyBzaGFyZWQvdW5lbmNyeXB0ZWQgaW4gQ1ZNcyAtIGhvc3QgY2FuXFxuIFxcdCAqIG1vZGlmeSBpdCBiZXR3ZWVuIHJlYWRzLlxcbkBAIC0yODEsNiArNDA0LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfcnhfZXZlbnRfaGFuZGxlcih2b2lkICpjdHgsIHUzMiBnZG1hX3J4cV9pZCxcXG4gXFx0bXNnX2lkID0gUkVBRF9PTkNFKHJlc3AtXFx1MDAzZXJlc3BvbnNlLmh3Y19tc2dfaWQpO1xcbiBcXHRpZiAobXNnX2lkIFxcdTAwM2U9IGh3Yy1cXHUwMDNlbnVtX2luZmxpZ2h0X21zZykge1xcbiBcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiSFdDIFJYOiB3cm9uZyBtc2dfaWQ9JXVcXFxcblxcXCIsIG1zZ19pZCk7XFxuK1xcdFxcdG1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Y19yeHEsIHJ4X3JlcSk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG5AQCAtMzg0LDE0ICs1MDgsMjAgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfY29tcF9ldmVudCh2b2lkICpjdHgsIHN0cnVjdCBnZG1hX3F1ZXVlICpxX3NlbGYpXFxuIFxcbiBzdGF0aWMgdm9pZCBtYW5hX2h3Y19kZXN0cm95X2NxKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBzdHJ1Y3QgaHdjX2NxICpod2NfY3EpXFxuIHtcXG4tXFx0a2ZyZWUoaHdjX2NxLVxcdTAwM2Vjb21wX2J1Zik7XFxuLVxcbiBcXHRpZiAoaHdjX2NxLVxcdTAwM2VnZG1hX2NxKVxcbiBcXHRcXHRtYW5hX2dkX2Rlc3Ryb3lfcXVldWUoZ2MsIGh3Y19jcS1cXHUwMDNlZ2RtYV9jcSk7XFxuIFxcbitcXHQvKiBjb21wX2J1ZiBpcyByZWFjaGVkIG9ubHkgYnkgbWFuYV9od2NfY29tcF9ldmVudCgpLCB3aGljaCB0aGVcXG4rXFx0ICogRVEgaGFuZGxlciBpbnZva2VzIHZpYSBjcV90YWJsZVtpZF0uICBUaGUgQ1EgZGVzdHJveSBhYm92ZVxcbitcXHQgKiBhbHJlYWR5IGNsZWFyZWQgdGhhdCBzbG90IGFuZCByYW4gc3luY2hyb25pemVfcmN1KCksIHNvIG5vXFxuK1xcdCAqIGhhbmRsZXIgY2FuIHJlYWNoIGNvbXBfYnVmIG9uY2UgaXQgcmV0dXJucy4gIERlc3Ryb3lpbmcgdGhlIEVRXFxuK1xcdCAqIGhlcmUgYWRkaXRpb25hbGx5IHRlYXJzIGRvd24gdGhlIElSUSAoZGVmZW5zZSBpbiBkZXB0aCkgYmVmb3JlXFxuK1xcdCAqIGNvbXBfYnVmIGFuZCBod2NfY3EgYXJlIGZyZWVkIGJlbG93LlxcbitcXHQgKi9cXG4gXFx0aWYgKGh3Y19jcS1cXHUwMDNlZ2RtYV9lcSlcXG4gXFx0XFx0bWFuYV9nZF9kZXN0cm95X3F1ZXVlKGdjLCBod2NfY3EtXFx1MDAzZWdkbWFfZXEpO1xcbiBcXG4rXFx0a2ZyZWUoaHdjX2NxLVxcdTAwM2Vjb21wX2J1Zik7XFxuIFxcdGtmcmVlKGh3Y19jcSk7XFxuIH1cXG4gXFxuQEAgLTU2MCw2ICs2OTAsNyBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2NyZWF0ZV93cShzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsXFxuIFxcdGh3Y193cS1cXHUwMDNlZ2RtYV93cSA9IHF1ZXVlO1xcbiBcXHRod2Nfd3EtXFx1MDAzZXF1ZXVlX2RlcHRoID0gcV9kZXB0aDtcXG4gXFx0aHdjX3dxLVxcdTAwM2Vod2NfY3EgPSBod2NfY3E7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZod2Nfd3EtXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0ZXJyID0gbWFuYV9od2NfYWxsb2NfZG1hX2J1Zihod2MsIHFfZGVwdGgsIG1heF9tc2dfc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2aHdjX3dxLVxcdTAwM2Vtc2dfYnVmKTtcXG5AQCAtNTc3LDcgKzcwOCw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfY3JlYXRlX3dxKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBtYW5hX2h3Y19wb3N0X3R4X3dxZShjb25zdCBzdHJ1Y3QgaHdjX3dxICpod2NfdHhxLFxcbitzdGF0aWMgaW50IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKHN0cnVjdCBod2Nfd3EgKmh3Y190eHEsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBod2Nfd29ya19yZXF1ZXN0ICpyZXEsXFxuIFxcdFxcdFxcdFxcdHUzMiBkZXN0X3ZpcnRfcnFfaWQsIHUzMiBkZXN0X3ZpcnRfcmNxX2lkLFxcbiBcXHRcXHRcXHRcXHRib29sIGRlc3RfcGYpXFxuQEAgLTYxNiw3ICs3NDcsMTEgQEAgc3RhdGljIGludCBtYW5hX2h3Y19wb3N0X3R4X3dxZShjb25zdCBzdHJ1Y3QgaHdjX3dxICpod2NfdHhxLFxcbiBcXHRyZXEtXFx1MDAzZXdxZV9yZXEuaW5saW5lX29vYl9kYXRhID0gdHhfb29iO1xcbiBcXHRyZXEtXFx1MDAzZXdxZV9yZXEuY2xpZW50X2RhdGFfdW5pdCA9IDA7XFxuIFxcbitcXHQvKiBTZXJpYWxpemUgV1FFIHBvc3Rpbmcg4oCUIG11bHRpcGxlIHNlbmRlcnMgbWF5IGNhbGwgY29uY3VycmVudGx5LiAqL1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmh3Y190eHEtXFx1MDAzZWxvY2spO1xcbiBcXHRlcnIgPSBtYW5hX2dkX3Bvc3RfYW5kX3JpbmcoaHdjX3R4cS1cXHUwMDNlZ2RtYV93cSwgXFx1MDAyNnJlcS1cXHUwMDNld3FlX3JlcSwgTlVMTCk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZod2NfdHhxLVxcdTAwM2Vsb2NrKTtcXG4rXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHBvc3QgV1FFIG9uIEhXQyBTUTogJWRcXFxcblxcXCIsIGVycik7XFxuIFxcdHJldHVybiBlcnI7XFxuQEAgLTYyNyw3ICs3NjIsNyBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfaW5mbGlnaHRfbXNnKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyxcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0c2VtYV9pbml0KFxcdTAwMjZod2MtXFx1MDAzZXNlbWEsIG51bV9tc2cpO1xcbitcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZod2MtXFx1MDAzZW1zZ193YWl0cSk7XFxuIFxcbiBcXHRlcnIgPSBtYW5hX2dkX2FsbG9jX3Jlc19tYXAobnVtX21zZywgXFx1MDAyNmh3Yy1cXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcyk7XFxuIFxcdGlmIChlcnIpXFxuQEAgLTY1NywyMyArNzkyLDQwIEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfdGVzdF9jaGFubmVsKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXFxuIFxcdGlmICghY3R4KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBxX2RlcHRoOyArK2kpXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBxX2RlcHRoOyArK2kpIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmN0eFtpXS5sb2NrKTtcXG4gXFx0XFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZjdHhbaV0uY29tcF9ldmVudCk7XFxuK1xcdH1cXG4gXFxuIFxcdGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCA9IGN0eDtcXG4gXFxuLVxcdHJldHVybiBtYW5hX2dkX3Rlc3RfZXEoZ2MsIGh3Yy1cXHUwMDNlY3EtXFx1MDAzZWdkbWFfZXEpO1xcbitcXHQvKiBjaGFubmVsX3VwIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgdGVzdCBFUSByZXF1ZXN0LCBiZWNhdXNlXFxuK1xcdCAqIHRoZSByZXF1ZXN0IGdvZXMgdGhyb3VnaCBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KCkgd2hpY2hcXG4rXFx0ICogY2hlY2tzIGNoYW5uZWxfdXAuICBjYWxsZXJfY3R4IGlzIGFsbG9jYXRlZCBhYm92ZSwgc29cXG4rXFx0ICogY29uY3VycmVudCBhY2Nlc3MgdG8gYSBOVUxMIGNhbGxlcl9jdHggaXMgbm90IHBvc3NpYmxlLlxcbitcXHQgKi9cXG4rXFx0aHdjLVxcdTAwM2VjaGFubmVsX3VwID0gdHJ1ZTtcXG4rXFxuK1xcdGVyciA9IG1hbmFfZ2RfdGVzdF9lcShnYywgaHdjLVxcdTAwM2VjcS1cXHUwMDNlZ2RtYV9lcSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGh3Yy1cXHUwMDNlY2hhbm5lbF91cCA9IGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTE2ICpxX2RlcHRoLFxcbitzdGF0aWMgaW50IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MzIgKnFfZGVwdGgsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHUzMiAqbWF4X3JlcV9tc2dfc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgdTMyICptYXhfcmVzcF9tc2dfc2l6ZSlcXG4ge1xcbitcXHQvKiBObyBSQ1UgbmVlZGVkOiBjYWxsZWQgb25seSBmcm9tIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsXFxuK1xcdCAqIGR1cmluZyBpbml0LCBiZWZvcmUgdGhlIGNoYW5uZWwgaXMgcHVibGlzaGVkIHRvIHNlbmRlcnMuXFxuK1xcdCAqL1xcbiBcXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MgPSBnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xcbiBcXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcnEgPSBod2MtXFx1MDAzZXJ4cS1cXHUwMDNlZ2RtYV93cTtcXG4gXFx0c3RydWN0IGdkbWFfcXVldWUgKnNxID0gaHdjLVxcdTAwM2V0eHEtXFx1MDAzZWdkbWFfd3E7XFxuIFxcdHN0cnVjdCBnZG1hX3F1ZXVlICplcSA9IGh3Yy1cXHUwMDNlY3EtXFx1MDAzZWdkbWFfZXE7XFxuIFxcdHN0cnVjdCBnZG1hX3F1ZXVlICpjcSA9IGh3Yy1cXHUwMDNlY3EtXFx1MDAzZWdkbWFfY3E7XFxuK1xcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqY3FfdGFibGU7XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNmh3Yy1cXHUwMDNlaHdjX2luaXRfZXFlX2NvbXApO1xcbkBAIC02ODcsMjQgKzgzOSw1MSBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MTYgKnFfZGVwdGgsXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcXHUwMDI2aHdjLVxcdTAwM2Vod2NfaW5pdF9lcWVfY29tcCwgNjAgKiBIWikpXFxuLVxcdFxcdHJldHVybiAtRVRJTUVET1VUO1xcbitcXHQvKiBzZXR1cF9od2MgYWN0aXZhdGVkIE1TVCBlbnRyaWVzIOKAlCBoYXJkd2FyZSBjYW4gbm93IERNQSBpbnRvXFxuK1xcdCAqIG91ciBxdWV1ZSBidWZmZXJzLiAgSWYgYW55dGhpbmcgYmVsb3cgZmFpbHMsIHdlIG11c3QgdGVhclxcbitcXHQgKiBkb3duIGJlZm9yZSByZXR1cm5pbmcgc28gdGhlIGNhbGxlciBkb2Vzbid0IG5lZWQgdG8gdHJhY2tcXG4rXFx0ICogd2hldGhlciBzZXR1cF9od2Mgc3VjY2VlZGVkLlxcbitcXHQgKi9cXG4rXFx0aHdjLVxcdTAwM2VzZXR1cF9hY3RpdmUgPSB0cnVlO1xcbitcXG4rXFx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXFx1MDAyNmh3Yy1cXHUwMDNlaHdjX2luaXRfZXFlX2NvbXAsIDYwICogSFopKSB7XFxuK1xcdFxcdGVyciA9IC1FVElNRURPVVQ7XFxuK1xcdFxcdGdvdG8gdGVhcmRvd247XFxuK1xcdH1cXG4gXFxuIFxcdCpxX2RlcHRoID0gaHdjLVxcdTAwM2Vod2NfaW5pdF9xX2RlcHRoX21heDtcXG4gXFx0Km1heF9yZXFfbXNnX3NpemUgPSBod2MtXFx1MDAzZWh3Y19pbml0X21heF9yZXFfbXNnX3NpemU7XFxuIFxcdCptYXhfcmVzcF9tc2dfc2l6ZSA9IGh3Yy1cXHUwMDNlaHdjX2luaXRfbWF4X3Jlc3BfbXNnX3NpemU7XFxuIFxcbiBcXHQvKiBCb3RoIHdlcmUgc2V0IGluIG1hbmFfaHdjX2luaXRfZXZlbnRfaGFuZGxlcigpLiAqL1xcbi1cXHRpZiAoV0FSTl9PTihjcS1cXHUwMDNlaWQgXFx1MDAzZT0gZ2MtXFx1MDAzZW1heF9udW1fY3FzKSlcXG4tXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuK1xcdGlmIChXQVJOX09OKGNxLVxcdTAwM2VpZCBcXHUwMDNlPSBnYy1cXHUwMDNlbWF4X251bV9jcXMpKSB7XFxuK1xcdFxcdGVyciA9IC1FUFJPVE87XFxuK1xcdFxcdGdvdG8gdGVhcmRvd247XFxuK1xcdH1cXG4gXFxuLVxcdGdjLVxcdTAwM2VjcV90YWJsZSA9IHZjYWxsb2MoZ2MtXFx1MDAzZW1heF9udW1fY3FzLCBzaXplb2Yoc3RydWN0IGdkbWFfcXVldWUgKikpO1xcbi1cXHRpZiAoIWdjLVxcdTAwM2VjcV90YWJsZSlcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdGNxX3RhYmxlID0gdmNhbGxvYyhnYy1cXHUwMDNlbWF4X251bV9jcXMsIHNpemVvZigqY3FfdGFibGUpKTtcXG4rXFx0aWYgKCFjcV90YWJsZSkge1xcbitcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIHRlYXJkb3duO1xcbitcXHR9XFxuIFxcbi1cXHRnYy1cXHUwMDNlY3FfdGFibGVbY3EtXFx1MDAzZWlkXSA9IGNxO1xcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIoY3FfdGFibGVbY3EtXFx1MDAzZWlkXSwgY3EpO1xcbitcXHQvKiBQdWJsaXNoIHRoZSBmdWxseS1pbml0aWFsaXNlZCB0YWJsZSBsYXN0OyBwYWlycyB3aXRoIHRoZVxcbitcXHQgKiByY3VfZGVyZWZlcmVuY2UoZ2MtXFx1MDAzZWNxX3RhYmxlKSBpbiBtYW5hX2dkX3Byb2Nlc3NfZXFlKCkuXFxuK1xcdCAqL1xcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIoZ2MtXFx1MDAzZWNxX3RhYmxlLCBjcV90YWJsZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK3RlYXJkb3duOlxcbitcXHR7XFxuK1xcdFxcdGludCB0ZF9lcnIgPSBtYW5hX3NtY190ZWFyZG93bl9od2MoXFx1MDAyNmdjLVxcdTAwM2VzaG1fY2hhbm5lbCwgZmFsc2UpO1xcbitcXG4rXFx0XFx0aWYgKCF0ZF9lcnIpXFxuK1xcdFxcdFxcdGh3Yy1cXHUwMDNlc2V0dXBfYWN0aXZlID0gZmFsc2U7XFxuK1xcbitcXHRcXHRyZXR1cm4gdGRfZXJyID8gdGRfZXJyIDogZXJyO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbWFuYV9od2NfaW5pdF9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCxcXG5AQCAtNzEyLDYgKzg5MSwxMiBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXFxuIHtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdC8qIENRIGRlcHRoIGlzIHFfZGVwdGggKiAyIChTUSArIFJRKSBwYXNzZWQgYXMgdTE2IHRvIGNyZWF0ZV9jcS5cXG4rXFx0ICogQ2FwIHRvIHByZXZlbnQgdTE2IHRydW5jYXRpb24uXFxuK1xcdCAqL1xcbitcXHRpZiAocV9kZXB0aCBcXHUwMDNlIFUxNl9NQVggLyAyKVxcbitcXHRcXHRxX2RlcHRoID0gVTE2X01BWCAvIDI7XFxuK1xcbiBcXHRlcnIgPSBtYW5hX2h3Y19pbml0X2luZmxpZ2h0X21zZyhod2MsIHFfZGVwdGgpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbkBAIC03MjgsMTQgKzkxMywxNCBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBtYW5hX2h3Y19jcmVhdGVfd3EoaHdjLCBHRE1BX1JRLCBxX2RlcHRoLCBtYXhfcmVxX21zZ19zaXplLFxcbitcXHRlcnIgPSBtYW5hX2h3Y19jcmVhdGVfd3EoaHdjLCBHRE1BX1JRLCBxX2RlcHRoLCBtYXhfcmVzcF9tc2dfc2l6ZSxcXG4gXFx0XFx0XFx0XFx0IGh3Yy1cXHUwMDNlY3EsIFxcdTAwMjZod2MtXFx1MDAzZXJ4cSk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byBjcmVhdGUgSFdDIFJROiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdGVyciA9IG1hbmFfaHdjX2NyZWF0ZV93cShod2MsIEdETUFfU1EsIHFfZGVwdGgsIG1heF9yZXNwX21zZ19zaXplLFxcbitcXHRlcnIgPSBtYW5hX2h3Y19jcmVhdGVfd3EoaHdjLCBHRE1BX1NRLCBxX2RlcHRoLCBtYXhfcmVxX21zZ19zaXplLFxcbiBcXHRcXHRcXHRcXHQgaHdjLVxcdTAwM2VjcSwgXFx1MDAyNmh3Yy1cXHUwMDNldHhxKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIGNyZWF0ZSBIV0MgU1E6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbkBAIC03NDQsNiArOTI5LDcgQEAgc3RhdGljIGludCBtYW5hX2h3Y19pbml0X3F1ZXVlcyhzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLFxcbiBcXG4gXFx0aHdjLVxcdTAwM2VudW1faW5mbGlnaHRfbXNnID0gcV9kZXB0aDtcXG4gXFx0aHdjLVxcdTAwM2VtYXhfcmVxX21zZ19zaXplID0gbWF4X3JlcV9tc2dfc2l6ZTtcXG4rXFx0aHdjLVxcdTAwM2VtYXhfcmVzcF9tc2dfc2l6ZSA9IG1heF9yZXNwX21zZ19zaXplO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIG91dDpcXG5AQCAtNzUxLDEyICs5MzcsNjIgQEAgc3RhdGljIGludCBtYW5hX2h3Y19pbml0X3F1ZXVlcyhzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbisvKiBUZWFyIGRvd24gYWxsIEhXQyBxdWV1ZXMgYW5kIGZyZWUgYXNzb2NpYXRlZCByZXNvdXJjZXMuICBVc2VkIG9uXFxuKyAqIHRoZSByZWluaXQtd2l0aC1oaWdoZXItcXVldWUtZGVwdGggcGF0aCBhbmQgcmVpbml0IGZhbGxiYWNrLlxcbisgKlxcbisgKiBQUkVDT05ESVRJT046IG11c3QgYmUgY2FsbGVkIG9ubHkgZHVyaW5nIGNoYW5uZWwgYnJpbmctdXAgaW5cXG4rICogbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoKSwgYmVmb3JlIHRoZSBjaGFubmVsIGlzIHB1Ymxpc2hlZCB0b1xcbisgKiBzZW5kZXJzLiAgVGhlcmUgdGhlIHNldHVwIHRocmVhZCBpcyBlZmZlY3RpdmVseSBzaW5nbGUtdGhyZWFkZWRcXG4rICogKHNlcmlhbGl6ZWQgYWdhaW5zdCB0ZWFyZG93biBieSB0aGUgUENJL1BNIGRldmljZV9sb2NrIG9yLCBvbiB0aGVcXG4rICogc2VydmljZSBwYXRoLCBHQ19JTl9TRVJWSUNFLCB3aXRoIHRoZSBkYXRhIHBhdGggbm90IHlldCBwcm9iZWQpLFxcbisgKiBjaGFubmVsX3VwIGlzIHN0aWxsIGZhbHNlLCBjYWxsZXJfY3R4IGlzIG5vdCB5ZXQgYWxsb2NhdGVkLCBhbmRcXG4rICogYWN0aXZlX3NlbmRlcnMgaXMgMCDigJQgc28gbm8gY29uY3VycmVudCByZXF1ZXN0L3Jlc3BvbnNlIHVzZXIgY2FuXFxuKyAqIHRvdWNoIHRoZXNlIHF1ZXVlcy4gIFRoYXQgaXMgd2h5IHRoaXMgc2tpcHMgdGhlIGh3Y19sb2NrLXByb3RlY3RlZFxcbisgKiBkcml2ZXJfZGF0YSBjbGVhciArIGFjdGl2ZV9zZW5kZXJzIGRyYWluIHRoYXRcXG4rICogbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKCkgbmVlZHMgZm9yIHRoZSBydW50aW1lIHRlYXJkb3duIHJhY2U7XFxuKyAqIG9ubHkgdGhlIENRLWZpcnN0IG9yZGVyaW5nIGJlbG93ICh0byBmZW5jZSBvZmYgYSBwZW5kaW5nIGludGVycnVwdClcXG4rICogaXMgcmVxdWlyZWQuICBDYWxsaW5nIHRoaXMgb24gYSBsaXZlLCBwdWJsaXNoZWQgY2hhbm5lbCB3b3VsZCBiZSBhXFxuKyAqIHVzZS1hZnRlci1mcmVlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgbWFuYV9od2NfZGVzdHJveV9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjKVxcbit7XFxuK1xcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gaHdjLVxcdTAwM2VnZG1hX2Rldi1cXHUwMDNlZ2RtYV9jb250ZXh0O1xcbitcXG4rXFx0LyogRGVzdHJveSBDUSBmaXJzdCB0byBkZXJlZ2lzdGVyIHRoZSBFUSBmcm9tIHRoZSBpbnRlcnJ1cHRcXG4rXFx0ICogaGFuZGxlciBsaXN0IGJlZm9yZSBmcmVlaW5nIGNhbGxlcl9jdHgsIFRYUSwgb3IgUlhRIG1lbW9yeS5cXG4rXFx0ICogQSBwZW5kaW5nIGludGVycnVwdCBoYW5kbGVyIGNvdWxkIHN0aWxsIHJlYWNoIGhhbmRsZV9yZXNwKClcXG4rXFx0ICogd2hpY2ggZGVyZWZlcmVuY2VzIGNhbGxlcl9jdHguXFxuK1xcdCAqL1xcbitcXHRpZiAoaHdjLVxcdTAwM2VjcSkge1xcbitcXHRcXHRtYW5hX2h3Y19kZXN0cm95X2NxKGdjLCBod2MtXFx1MDAzZWNxKTtcXG4rXFx0XFx0aHdjLVxcdTAwM2VjcSA9IE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGtmcmVlKGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCk7XFxuK1xcdGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCA9IE5VTEw7XFxuK1xcbitcXHRpZiAoaHdjLVxcdTAwM2V0eHEpIHtcXG4rXFx0XFx0bWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy1cXHUwMDNldHhxKTtcXG4rXFx0XFx0aHdjLVxcdTAwM2V0eHEgPSBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaHdjLVxcdTAwM2VyeHEpIHtcXG4rXFx0XFx0bWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy1cXHUwMDNlcnhxKTtcXG4rXFx0XFx0aHdjLVxcdTAwM2VyeHEgPSBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRtYW5hX2dkX2ZyZWVfcmVzX21hcChcXHUwMDI2aHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzKTtcXG4rXFx0aHdjLVxcdTAwM2VudW1faW5mbGlnaHRfbXNnID0gMDtcXG4rfVxcbitcXG4gaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxcbiB7XFxuIFxcdHUzMiBtYXhfcmVxX21zZ19zaXplLCBtYXhfcmVzcF9tc2dfc2l6ZTtcXG4gXFx0c3RydWN0IGdkbWFfZGV2ICpnZCA9IFxcdTAwMjZnYy1cXHUwMDNlaHdjO1xcbiBcXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XFxuLVxcdHUxNiBxX2RlcHRoX21heDtcXG4rXFx0c3RydWN0IGdkbWFfcXVldWUgX19yY3UgKipvbGRfY3FfdGFibGU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHUzMiBxX2RlcHRoX21heDtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGh3YyA9IGt6YWxsb2Nfb2JqKCpod2MpO1xcbkBAIC03NjQsMTAgKzEwMDAsMTEgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdGdkLVxcdTAwM2VnZG1hX2NvbnRleHQgPSBnYztcXG4tXFx0Z2QtXFx1MDAzZWRyaXZlcl9kYXRhID0gaHdjO1xcbiBcXHRod2MtXFx1MDAzZWdkbWFfZGV2ID0gZ2Q7XFxuIFxcdGh3Yy1cXHUwMDNlZGV2ID0gZ2MtXFx1MDAzZWRldjtcXG4gXFx0aHdjLVxcdTAwM2Vod2NfdGltZW91dCA9IEhXX0NIQU5ORUxfV0FJVF9SRVNPVVJDRV9USU1FT1VUX01TO1xcbitcXHRod2MtXFx1MDAzZWFjdGl2ZV9zZW5kZXJzID0gMDtcXG4rXFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2Z2MtXFx1MDAzZWh3Y19kcmFpbl93YWl0cSk7XFxuIFxcbiBcXHQvKiBIV0MncyBpbnN0YW5jZSBudW1iZXIgaXMgYWx3YXlzIDAuICovXFxuIFxcdGdkLVxcdTAwM2VkZXZfaWQuYXNfdWludDMyID0gMDtcXG5AQCAtNzc2LDYgKzEwMTMsMTUgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxcbiBcXHRnZC1cXHUwMDNlcGRpZCA9IElOVkFMSURfUERJRDtcXG4gXFx0Z2QtXFx1MDAzZWRvb3JiZWxsID0gSU5WQUxJRF9ET09SQkVMTDtcXG4gXFxuK1xcdC8qIFB1Ymxpc2ggZHJpdmVyX2RhdGEgbGFzdCwgdW5kZXIgaHdjX2xvY2s6IHRoZSBsb2NrIG9yZGVycyB0aGUgaHdjXFxuK1xcdCAqIGluaXRpYWxpc2F0aW9uIGFib3ZlIGJlZm9yZSB0aGUgcG9pbnRlciBiZWNvbWVzIHZpc2libGUgYW5kXFxuK1xcdCAqIHNlcmlhbGlzZXMgdGhlIHB1Ymxpc2ggYWdhaW5zdCB0aGUgY29udHJvbC1wbGFuZSByZWFkZXJzIGluXFxuK1xcdCAqIG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCksIG1hbmFfbmVlZF9sb2coKSBhbmQgbWFuYV9zZXJ2X3Jlc2V0KCkuXFxuK1xcdCAqL1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XFxuK1xcdGdjLVxcdTAwM2Vod2MuZHJpdmVyX2RhdGEgPSBod2M7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmdjLVxcdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xcbitcXG4gXFx0LyogbWFuYV9od2NfaW5pdF9xdWV1ZXMoKSBvbmx5IGNyZWF0ZXMgdGhlIHJlcXVpcmVkIGRhdGEgc3RydWN0dXJlcyxcXG4gXFx0ICogYW5kIGRvZXNuJ3QgdG91Y2ggdGhlIEhXQyBkZXZpY2UuXFxuIFxcdCAqL1xcbkBAIC03OTQsOCArMTA0MCwxMzAgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4rXFx0LyogVGhlIGNoYW5uZWwgd2FzIGJvb3RzdHJhcHBlZCBhdCBhIG1pbmltYWwgcXVldWUgZGVwdGguICBJZiB0aGVcXG4rXFx0ICogZGV2aWNlIHJlcG9ydHMgYSBoaWdoZXIgbWF4aW11bSwgdGVhciBkb3duIGFuZCByZWJ1aWxkIHdpdGhcXG4rXFx0ICogdGhlIGxhcmdlciBkZXB0aCBzbyBtb3JlIEhXQyBjb21tYW5kcyBjYW4gYmUgaW4gZmxpZ2h0LlxcbitcXHQgKi9cXG4rXFx0aWYgKHFfZGVwdGhfbWF4IFxcdTAwM2UgSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEgpIHtcXG4rXFx0XFx0LyogcV9kZXB0aF9tYXggbm93IGNhcnJpZXMgdGhlIGZ1bGwgZGV2aWNlLXJlcG9ydGVkIHZhbHVlXFxuK1xcdFxcdCAqIChIV0NfSU5JVF9EQVRBX1FVRVVFX0RFUFRIIGlzIDI0LWJpdCkuICBDbGFtcCBpdCB0byB0aGVcXG4rXFx0XFx0ICogZGVwdGggdGhlIHJlc3Qgb2YgdGhlIGRyaXZlciBzdXBwb3J0cyDigJQgY3JlYXRlX2NxKCkgdGFrZXNcXG4rXFx0XFx0ICogcV9kZXB0aCAqIDIgYXMgYSB1MTYg4oCUIGJlZm9yZSB0aGUgb3ZlcmZsb3cgY2hlY2sgYmVsb3csIHNvXFxuK1xcdFxcdCAqIGFuIG92ZXItbGFyZ2UgYnV0IG90aGVyd2lzZS12YWxpZCBkZXB0aCBpcyByZWR1Y2VkIHRvIHRoZVxcbitcXHRcXHQgKiBtYXhpbXVtIGluc3RlYWQgb2Ygd3JhcHBpbmcgb3IgYmVpbmcgcmVqZWN0ZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocV9kZXB0aF9tYXggXFx1MDAzZSBVMTZfTUFYIC8gMilcXG4rXFx0XFx0XFx0cV9kZXB0aF9tYXggPSBVMTZfTUFYIC8gMjtcXG4rXFxuK1xcdFxcdC8qIFNhbml0eS1jaGVjayBkZXZpY2UtcmVwb3J0ZWQgdmFsdWVzIGJlZm9yZSB1c2luZyB0aGVtXFxuK1xcdFxcdCAqIHRvIHNpemUgRE1BIGFsbG9jYXRpb25zLiAgRW5mb3JjZSBwcm90b2NvbCBtaW5pbXVtc1xcbitcXHRcXHQgKiBmb3IgbWVzc2FnZSBzaXplcyBhbmQgY2hlY2sgdGhhdCBxX2RlcHRoICogbWF4X21zZ19zaXplXFxuK1xcdFxcdCAqIHBsdXMgYWxpZ25tZW50IGhlYWRyb29tIGZpdHMgaW4gdTMyIChmb3JcXG4rXFx0XFx0ICogbWFuYV9od2NfYWxsb2NfZG1hX2J1ZidzIE1BTkFfUEFHRV9BTElHTikuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoIW1heF9yZXFfbXNnX3NpemUgfHwgIW1heF9yZXNwX21zZ19zaXplIHx8XFxuK1xcdFxcdCAgICBtYXhfcmVxX21zZ19zaXplIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBnZG1hX3JlcV9oZHIpIHx8XFxuK1xcdFxcdCAgICBtYXhfcmVzcF9tc2dfc2l6ZSBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgZ2RtYV9yZXNwX2hkcikgfHxcXG4rXFx0XFx0ICAgICh1NjQpcV9kZXB0aF9tYXggKiBtYXhfcmVxX21zZ19zaXplIFxcdTAwM2VcXG4rXFx0XFx0XFx0VTMyX01BWCAtIE1BTkFfUEFHRV9TSVpFIHx8XFxuK1xcdFxcdCAgICAodTY0KXFfZGVwdGhfbWF4ICogbWF4X3Jlc3BfbXNnX3NpemUgXFx1MDAzZVxcbitcXHRcXHRcXHRVMzJfTUFYIC0gTUFOQV9QQUdFX1NJWkUpIHtcXG4rXFx0XFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFxcIkhXQzogaW52YWxpZCBkaW1zIHE9JXUgcmVxPSV1IHJlc3A9JXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdHFfZGVwdGhfbWF4LCBtYXhfcmVxX21zZ19zaXplLFxcbitcXHRcXHRcXHRcXHRtYXhfcmVzcF9tc2dfc2l6ZSk7XFxuK1xcdFxcdFxcdHFfZGVwdGhfbWF4ID0gSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEg7XFxuK1xcdFxcdFxcdGdvdG8gc2tpcF9yZWluaXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGVyciA9IG1hbmFfc21jX3RlYXJkb3duX2h3YyhcXHUwMDI2Z2MtXFx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0LyogS2VlcCB1c2luZyB0aGUgYm9vdHN0cmFwLWRlcHRoIGNoYW5uZWwuICovXFxuK1xcdFxcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcXCJGYWlsZWQgdG8gdGVhcmRvd24gSFdDIGZvciByZWluaXQ6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRlcnIpO1xcbitcXHRcXHRcXHRxX2RlcHRoX21heCA9IEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRIO1xcbitcXHRcXHRcXHRnb3RvIHNraXBfcmVpbml0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRod2MtXFx1MDAzZXNldHVwX2FjdGl2ZSA9IGZhbHNlO1xcbitcXG4rXFx0XFx0LyogRGVzdHJveSBxdWV1ZXMgZmlyc3Qg4oCUIG1hbmFfZ2RfZGVzdHJveV9jcSBpbnNpZGVcXG4rXFx0XFx0ICogdW5wdWJsaXNoZXMgdGhlIENRIGZyb20gY3FfdGFibGUgdmlhXFxuK1xcdFxcdCAqIHJjdV9hc3NpZ25fcG9pbnRlcihOVUxMKSArIHN5bmNocm9uaXplX3JjdS5cXG4rXFx0XFx0ICogTXVzdCBoYXBwZW4gd2hpbGUgY3FfdGFibGUgaXMgc3RpbGwgdmFsaWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRtYW5hX2h3Y19kZXN0cm95X3F1ZXVlcyhod2MpO1xcbitcXG4rXFx0XFx0b2xkX2NxX3RhYmxlID0gcmN1X3JlcGxhY2VfcG9pbnRlcihnYy1cXHUwMDNlY3FfdGFibGUsIE5VTEwsIHRydWUpO1xcbitcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4rXFx0XFx0dmZyZWUob2xkX2NxX3RhYmxlKTtcXG4rXFxuK1xcdFxcdGVyciA9IG1hbmFfaHdjX2luaXRfcXVldWVzKGh3YywgcV9kZXB0aF9tYXgsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIG1heF9yZXFfbXNnX3NpemUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIG1heF9yZXNwX21zZ19zaXplKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlaW5pdCBIV0M6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXHRcXHRcXHRnb3RvIHJlaW5pdF9mYWxsYmFjaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0ZXJyID0gbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoZ2MsIFxcdTAwMjZxX2RlcHRoX21heCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZtYXhfcmVxX21zZ19zaXplLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm1heF9yZXNwX21zZ19zaXplKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlLWVzdGFibGlzaCBIV0M6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRlcnIpO1xcbitcXHRcXHRcXHQvKiBlc3RhYmxpc2hfY2hhbm5lbCBkb2VzIGludGVybmFsIHRlYXJkb3duIG9uXFxuK1xcdFxcdFxcdCAqIGZhaWx1cmUuICBJZiB0ZWFyZG93biBzdWNjZWVkZWQgKHNldHVwX2FjdGl2ZVxcbitcXHRcXHRcXHQgKiBjbGVhcmVkKSwgTVNUIGVudHJpZXMgYXJlIGludmFsaWRhdGVkIGFuZCB3ZVxcbitcXHRcXHRcXHQgKiBjYW4gdHJ5IHRoZSBib290c3RyYXAgZmFsbGJhY2suICBJZiB0ZWFyZG93blxcbitcXHRcXHRcXHQgKiBhbHNvIGZhaWxlZCAoc2V0dXBfYWN0aXZlIHN0aWxsIHNldCksIGhhcmR3YXJlXFxuK1xcdFxcdFxcdCAqIG1hcHBpbmdzIG1heSBzdGlsbCBiZSBhY3RpdmUg4oCUIHNraXAgZmFsbGJhY2suXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoaHdjLVxcdTAwM2VzZXR1cF9hY3RpdmUpXFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHRnb3RvIHJlaW5pdF9mYWxsYmFjaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRnb3RvIHNraXBfcmVpbml0O1xcbitcXG4rcmVpbml0X2ZhbGxiYWNrOlxcbitcXHQvKiBSZXN0b3JlIGJvb3RzdHJhcC1kZXB0aCBjaGFubmVsIHNvIHRoZSBkZXZpY2UgcmVtYWlucyBmdW5jdGlvbmFsLlxcbitcXHQgKiBGcmVlIGNxX3RhYmxlIGlmIGl0IHdhcyBhbGxvY2F0ZWQgYnkgYSBwYXJ0aWFsbHkgc3VjY2Vzc2Z1bFxcbitcXHQgKiBlc3RhYmxpc2ggYXR0ZW1wdC5cXG4rXFx0ICovXFxuK1xcdGRldl93YXJuKGh3Yy1cXHUwMDNlZGV2LCBcXFwiSFdDIHJlaW5pdCBmYWlsZWQsIGZhbGxpbmcgYmFjayB0byBib290c3RyYXAgZGVwdGhcXFxcblxcXCIpO1xcbitcXG4rXFx0bWFuYV9od2NfZGVzdHJveV9xdWV1ZXMoaHdjKTtcXG4rXFxuK1xcdG9sZF9jcV90YWJsZSA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoZ2MtXFx1MDAzZWNxX3RhYmxlLCBOVUxMLCB0cnVlKTtcXG4rXFx0c3luY2hyb25pemVfcmN1KCk7XFxuK1xcdHZmcmVlKG9sZF9jcV90YWJsZSk7XFxuK1xcbitcXHRlcnIgPSBtYW5hX2h3Y19pbml0X3F1ZXVlcyhod2MsIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRILFxcbitcXHRcXHRcXHRcXHQgICBIV19DSEFOTkVMX01BWF9SRVFVRVNUX1NJWkUsXFxuK1xcdFxcdFxcdFxcdCAgIEhXX0NIQU5ORUxfTUFYX1JFU1BPTlNFX1NJWkUpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVzdG9yZSBib290c3RyYXAgSFdDOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKGdjLCBcXHUwMDI2cV9kZXB0aF9tYXgsIFxcdTAwMjZtYXhfcmVxX21zZ19zaXplLFxcbitcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm1heF9yZXNwX21zZ19zaXplKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlLWVzdGFibGlzaCBib290c3RyYXAgSFdDOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ZXJyKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK3NraXBfcmVpbml0OlxcbitcXG4rXFx0LyogTm8gUkNVIG5lZWRlZDogc3RpbGwgaW4gbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwsIHRoZVxcbitcXHQgKiBwb2ludGVyIGhhcyBub3QgYmVlbiBwdWJsaXNoZWQgdG8gY29uY3VycmVudCBzZW5kZXJzIHlldC5cXG4rXFx0ICovXFxuIFxcdGVyciA9IG1hbmFfaHdjX3Rlc3RfY2hhbm5lbChnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhLFxcbi1cXHRcXHRcXHRcXHQgICAgSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEgsXFxuK1xcdFxcdFxcdFxcdCAgICBod2MtXFx1MDAzZW51bV9pbmZsaWdodF9tc2csXFxuIFxcdFxcdFxcdFxcdCAgICBtYXhfcmVxX21zZ19zaXplLCBtYXhfcmVzcF9tc2dfc2l6ZSk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byB0ZXN0IEhXQzogJWRcXFxcblxcXCIsIGVycik7XFxuQEAgLTgxMCwyNyArMTE3OCwxOTUgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxcbiBcXG4gdm9pZCBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXFxuIHtcXG4rXFx0LyogVGhpcyBpcyB0aGUgb25seSBkZXN0cm95IGVudHJ5IHBvaW50LiAgZHJpdmVyX2RhdGEgaXMgcmVhZFxcbitcXHQgKiBwbGFpbmx5IGhlcmUgKHRlYXJkb3duIGlzIHNlcmlhbGlzZWQgYWdhaW5zdCBvdGhlciB0ZWFyZG93bik7XFxuK1xcdCAqIGl0IGlzIGNsZWFyZWQgdW5kZXIgaHdjX2xvY2sgYmVsb3cgYmVmb3JlIGh3YyBpcyBmcmVlZC5cXG4rXFx0ICovXFxuIFxcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyA9IGdjLVxcdTAwM2Vod2MuZHJpdmVyX2RhdGE7XFxuK1xcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqb2xkX2NxX3RhYmxlO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4gXFx0aWYgKCFod2MpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdC8qIGdjLVxcdTAwM2VtYXhfbnVtX2NxcyBpcyBzZXQgaW4gbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKCkuIElmIGl0J3NcXG4tXFx0ICogbm9uLXplcm8sIHRoZSBIV0Mgd29ya2VkIGFuZCB3ZSBzaG91bGQgdGVhciBkb3duIHRoZSBIV0MgaGVyZS5cXG4rXFx0LyogUHJldmVudCBuZXcgcmVxdWVzdHMgZnJvbSBzdGFydGluZyBhbmQgd2FrZSBhbnlcXG4rXFx0ICogdGhyZWFkcyB3YWl0aW5nIGZvciBhIGZyZWUgbXNnIHNsb3QuICBTZXQgY2hhbm5lbF91cCB1bmRlclxcbitcXHQgKiB0aGUgYml0bWFwIGxvY2sgc28gZ2V0X21zZ19pbmRleCgpIGNhbm5vdCBhY3F1aXJlIGEgc2xvdFxcbitcXHQgKiBhbmQgaW5jcmVtZW50IGFjdGl2ZV9zZW5kZXJzIGFmdGVyIHRoaXMgcG9pbnQuXFxuK1xcdCAqXFxuK1xcdCAqIElmIGNoYW5uZWxfdXAgaXMgYWxyZWFkeSBmYWxzZSAoZS5nLiBpbml0IGZhaWxlZCBiZWZvcmVcXG4rXFx0ICogdGhlIGNoYW5uZWwgd2FzIGVzdGFibGlzaGVkKSwgc2tpcCB0aGUgbG9jayDigJQgaXQgbWF5IG5vdFxcbitcXHQgKiBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgeWV0LCBhbmQgbm8gc2VuZGVycyBjYW4gYmUgYWN0aXZlLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGdjLVxcdTAwM2VtYXhfbnVtX2NxcyBcXHUwMDNlIDApIHtcXG4tXFx0XFx0bWFuYV9zbWNfdGVhcmRvd25faHdjKFxcdTAwMjZnYy1cXHUwMDNlc2htX2NoYW5uZWwsIGZhbHNlKTtcXG4tXFx0XFx0Z2MtXFx1MDAzZW1heF9udW1fY3FzID0gMDtcXG4rXFx0aWYgKGh3Yy1cXHUwMDNlY2hhbm5lbF91cCkge1xcbitcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0aHdjLVxcdTAwM2VjaGFubmVsX3VwID0gZmFsc2U7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmh3Yy1cXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7XFxuK1xcdFxcdHdha2VfdXBfYWxsKFxcdTAwMjZod2MtXFx1MDAzZW1zZ193YWl0cSk7XFxuIFxcdH1cXG4gXFxuK1xcdC8qIENsZWFyIHRoZSBwb2ludGVyIHVuZGVyIGh3Y19sb2NrIHNvIG5ldyBjYWxsZXJzIGluXFxuK1xcdCAqIG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCkgc2VlIE5VTEwgYW5kIHJldHVybiAtRU5PREVWLiAgVGhlIGxvY2tcXG4rXFx0ICogbWFrZXMgdGhlIHJlYWRlcnMnIFxcXCJsb2FkIGRyaXZlcl9kYXRhICsgYWN0aXZlX3NlbmRlcnMrK1xcXCJcXG4rXFx0ICogYXRvbWljIGFnYWluc3QgdGhpcyBzdG9yZSwgc28gb25jZSBpdCByZXR1cm5zIG5vIG5ldyBzZW5kZXIgY2FuXFxuK1xcdCAqIHRha2UgYSByZWZlcmVuY2U7IHRoZSBhY3RpdmVfc2VuZGVycyBkcmFpbiBiZWxvdyB3YWl0cyBvdXQgdGhvc2VcXG4rXFx0ICogdGhhdCBhbHJlYWR5IGRpZCwgYmVmb3JlIHRoZWlyIGh3YyBpcyBmcmVlZC5cXG4rXFx0ICovXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcXG4rXFx0Z2MtXFx1MDAzZWh3Yy5kcml2ZXJfZGF0YSA9IE5VTEw7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmdjLVxcdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0LyogRm9yY2UtY29tcGxldGUgYW55IGluLWZsaWdodCBzZW5kZXJzIHNvIHRoZXkgb2JzZXJ2ZSAtRU5PREVWLFxcbitcXHQgKiByZXR1cm4sIGFuZCBkcm9wIHRoZWlyIHJlZmVyZW5jZXMuICBUaGlzIHJ1bnMgYmVmb3JlIHRoZSBIV0NcXG4rXFx0ICogaGFyZHdhcmUgdGVhcmRvd24gYmVsb3csIHNvIGEgbGl2ZSBpbnRlcnJ1cHQgbWF5IHN0aWxsIGRlbGl2ZXJcXG4rXFx0ICogYSByZWFsIHJlc3BvbnNlIHZpYSBoYW5kbGVfcmVzcCgpIGNvbmN1cnJlbnRseSDigJQgdGhhdCBpcyBzYWZlXFxuK1xcdCAqIGJlY2F1c2UgdGhlIHBlci1zbG90IHJlZmNvdW50IG1vZGVsIHRvbGVyYXRlcyBhIGNvbmN1cnJlbnRcXG4rXFx0ICogY29tcGxldGUoKSBhbmQgYm90aCBwYXRocyAoaGFuZGxlX3Jlc3AgYW5kIHRoaXMgbG9vcCkgZHJvcFxcbitcXHQgKiB0aGVpciByZWZzIHdpdGhvdXQgZG91YmxlLXJlbGVhc2luZyB0aGUgc2xvdC5cXG4rXFx0ICovXFxuK1xcdGlmIChod2MtXFx1MDAzZWNhbGxlcl9jdHgpIHtcXG4rXFx0XFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHg7XFxuK1xcdFxcdGludCBpO1xcbitcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGh3Yy1cXHUwMDNlbnVtX2luZmxpZ2h0X21zZzsgaSsrKSB7XFxuK1xcdFxcdFxcdGlmICghdGVzdF9iaXQoaSwgaHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzLm1hcCkpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0Y3R4ID0gXFx1MDAyNmh3Yy1cXHUwMDNlY2FsbGVyX2N0eFtpXTtcXG4rXFxuK1xcdFxcdFxcdC8qIFdha2Ugc2VuZGVycyBibG9ja2VkIG9uIHdhaXRfZm9yX2NvbXBsZXRpb24uXFxuK1xcdFxcdFxcdCAqIFNldCBlcnJvciB1bmRlciBsb2NrIHRvIGF2b2lkIHJhY2luZyB3aXRoXFxuK1xcdFxcdFxcdCAqIGhhbmRsZV9yZXNwKCkgd2hpY2ggd3JpdGVzIGVycm9yIHVuZGVyIHRoZVxcbitcXHRcXHRcXHQgKiBzYW1lIGxvY2suICBUaGUgc2VuZGVyIE5VTExzIG91dHB1dF9idWZcXG4rXFx0XFx0XFx0ICogYWZ0ZXIgd2FraW5nIOKAlCBkb2luZyBpdCBoZXJlIHdvdWxkIHJhY2VcXG4rXFx0XFx0XFx0ICogd2l0aCBhIHNlbmRlciB0aGF0IGhhc24ndCBzZXQgb3V0cHV0X2J1ZiB5ZXQuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdFxcdGN0eC1cXHUwMDNlZXJyb3IgPSAtRU5PREVWO1xcbitcXHRcXHRcXHRjb21wbGV0ZShcXHUwMDI2Y3R4LVxcdTAwM2Vjb21wX2V2ZW50KTtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogV2FpdCBmb3IgYWxsIHNlbmRlciB0aHJlYWRzIHRvIGZpbmlzaCBhbmQgZHJvcCB0aGVpciByZWZzXFxuK1xcdCAqIGJlZm9yZSB0b3VjaGluZyB0aGUgaGFyZHdhcmUgb3IgZnJlZWluZyBhbnl0aGluZy4gIERyYWluaW5nXFxuK1xcdCAqIGhlcmUgLS0gYWhlYWQgb2YgdGhlIHRlYXJkb3duL0ZMUiBibG9jayBiZWxvdyAtLSBndWFyYW50ZWVzIG5vXFxuK1xcdCAqIGluLWZsaWdodCBzZW5kZXIgaXMgc3RpbGwgcnVubmluZyB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBvblxcbitcXHQgKiBhbnkgcGF0aCwgaW5jbHVkaW5nIHRoZSBGTFItZmFpbHVyZSBlYXJseSByZXR1cm47IG90aGVyd2lzZSBhXFxuK1xcdCAqIHN0cmFuZGVkIHNlbmRlciB3b3VsZCBkZXJlZmVyZW5jZSBnYy1cXHUwMDNlaHdjX2xvY2sgL1xcbitcXHQgKiBnYy1cXHUwMDNlaHdjX2RyYWluX3dhaXRxIGFmdGVyIHRoZSBjYWxsZXIgZnJlZXMgZ2MuXFxuK1xcdCAqIEFmdGVyIHRoaXMsIG9ubHkgc2xvdHMgaGVsZCBieSB0aW1lZC1vdXQgc2VuZGVycyB3aG9zZVxcbitcXHQgKiBoYW5kbGVfcmVzcCgpIG5ldmVyIHJhbiByZW1haW4gaW4gdGhlIGJpdG1hcC5cXG4rXFx0ICpcXG4rXFx0ICogYWN0aXZlX3NlbmRlcnMgaXMgb25seSBldmVyIG1vZGlmaWVkIHVuZGVyIGh3Y19sb2NrLCBhbmQgdGhlXFxuK1xcdCAqIGxhc3Qgc2VuZGVyJ3Mgd2FrZV91cCgpIHJ1bnMgdW5kZXIgdGhhdCBsb2NrIGJlZm9yZSBpdCBpc1xcbitcXHQgKiByZWxlYXNlZC4gIEV2YWx1YXRpbmcgdGhlIGNvbmRpdGlvbiB1bmRlciBod2NfbG9jayB0aGVyZWZvcmVcXG4rXFx0ICogZ3VhcmFudGVlcyB0aGF0IG9uY2Ugd2Ugb2JzZXJ2ZSAwIHRoZSB3YWtpbmcgc2VuZGVyIGhhc1xcbitcXHQgKiBhbHJlYWR5IGRyb3BwZWQgdGhlIGxvY2sgLS0gaS5lLiBmaW5pc2hlZCB0b3VjaGluZyBnYyAtLSBzbyBpdFxcbitcXHQgKiBjYW5ub3QgcmFjZSB0aGUgY2FsbGVyIGZyZWVpbmcgZ2MgYWZ0ZXIgdGhpcyByZXR1cm5zLlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrKTtcXG4rXFx0d2FpdF9ldmVudF9sb2NrX2lycShnYy1cXHUwMDNlaHdjX2RyYWluX3dhaXRxLFxcbitcXHRcXHRcXHQgICAgaHdjLVxcdTAwM2VhY3RpdmVfc2VuZGVycyA9PSAwLCBnYy1cXHUwMDNlaHdjX2xvY2spO1xcbitcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmdjLVxcdTAwM2Vod2NfbG9jayk7XFxuK1xcbitcXHQvKiBUZWFyIGRvd24gdGhlIEhXQyBpZiBzZXR1cF9od2MgcHJldmlvdXNseSBhY3RpdmF0ZWQgTVNUIGVudHJpZXMuXFxuK1xcdCAqIFRoaXMgaXMgdGhlIGRlZmluaXRpdmUgZmxhZyDigJQgdW5saWtlIG1heF9udW1fY3FzIHdoaWNoIGRlcGVuZHNcXG4rXFx0ICogb24gdGhlIGluaXQgRVFFIGFycml2aW5nLlxcbitcXHQgKlxcbitcXHQgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGludGVudGlvbmFsbHkgbm90IGNoZWNrZWQuICBUaGlzIGlzIHRoZVxcbitcXHQgKiB0ZXJtaW5hbCBjbGVhbnVwIHBhdGggKGRldmljZSByZW1vdmFsLCBzdXNwZW5kLCBvciBpbml0XFxuK1xcdCAqIGZhaWx1cmUpIOKAlCByZXNvdXJjZXMgbXVzdCBiZSBmcmVlZCByZWdhcmRsZXNzLiAgSWYgdGVhcmRvd25cXG4rXFx0ICogZmFpbHMsIGhhcmR3YXJlIG1heSBzdGlsbCBoYXZlIGFjdGl2ZSBNU1QgZW50cmllcywgYnV0OlxcbitcXHQgKlxcbitcXHQgKiAgLSBJbnRlcnJ1cHRzOiBtYW5hX2h3Y19kZXN0cm95X2NxKCkgYmVsb3cgY2FsbHNcXG4rXFx0ICogICAgbWFuYV9nZF9kZXJlZ2lzdGVyX2lycSgpIHdoaWNoIHJlbW92ZXMgdGhlIEhXQyBFUSBmcm9tXFxuK1xcdCAqICAgIHRoZSBpbnRlcnJ1cHQgZGlzcGF0Y2ggbGlzdCB2aWEgbGlzdF9kZWxfcmN1KCkgK1xcbitcXHQgKiAgICBzeW5jaHJvbml6ZV9yY3UoKS4gIEFmdGVyIHRoYXQsIG5vIGludGVycnVwdCBoYW5kbGVyIGNhblxcbitcXHQgKiAgICBpbnZva2UgaGFuZGxlX3Jlc3AoKSBvciBhY2Nlc3MgQ1EvUlEgYnVmZmVycyDigJQgZXZlbiBpZlxcbitcXHQgKiAgICB0aGUgSVJRIGlzIHNoYXJlZCB3aXRoIGRhdGEgcGF0aCBxdWV1ZXMuXFxuK1xcdCAqXFxuK1xcdCAqICAtIERNQTogbWFuYV9od2NfZGVzdHJveV93cSgpIGZyZWVzIERNQSBidWZmZXJzIHZpYVxcbitcXHQgKiAgICBkbWFfZnJlZV9jb2hlcmVudCgpIHdoaWNoIHVubWFwcyB0aGUgSU9WQSBmcm9tIHRoZVxcbitcXHQgKiAgICBJT01NVS4gIEFueSBzdGFsZSBoYXJkd2FyZSBETUEgdG8gdGhlIG9sZCBhZGRyZXNzXFxuK1xcdCAqICAgIGZhdWx0cyBhdCB0aGUgSU9NTVUsIG5vdCBpbiBrZXJuZWwgbWVtb3J5LlxcbitcXHQgKi9cXG4rXFx0aWYgKGh3Yy1cXHUwMDNlc2V0dXBfYWN0aXZlKSB7XFxuK1xcdFxcdGludCB0ZF9lcnIgPSBtYW5hX3NtY190ZWFyZG93bl9od2MoXFx1MDAyNmdjLVxcdTAwM2VzaG1fY2hhbm5lbCwgZmFsc2UpO1xcbitcXG4rXFx0XFx0aWYgKHRkX2Vycikge1xcbitcXHRcXHRcXHRkZXZfZXJyKGdjLVxcdTAwM2VkZXYsIFxcXCJIV0MgdGVhcmRvd24gZmFpbGVkOiAlZCwgaXNzdWluZyBGTFJcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdHRkX2Vycik7XFxuK1xcbitcXHRcXHRcXHQvKiBPbiBzeXN0ZW1zIHdpdGhvdXQgSU9NTVUsIGZyZWVpbmcgRE1BIG1lbW9yeSB3aXRoXFxuK1xcdFxcdFxcdCAqIGFjdGl2ZSBoYXJkd2FyZSBNU1QgbWFwcGluZ3Mgcmlza3MgbWVtb3J5IGNvcnJ1cHRpb24uXFxuK1xcdFxcdFxcdCAqIElzc3VlIEZMUiB0byBmb3JjZS1yZXNldCB0aGUgZGV2aWNlIGFuZCBpbnZhbGlkYXRlXFxuK1xcdFxcdFxcdCAqIGFsbCBoYXJkd2FyZSBzdGF0ZSBpbmNsdWRpbmcgTVNUIGVudHJpZXMuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHR0ZF9lcnIgPSBwY2llX2Zscih0b19wY2lfZGV2KGdjLVxcdTAwM2VkZXYpKTtcXG4rXFx0XFx0XFx0aWYgKHRkX2Vycikge1xcbitcXHRcXHRcXHRcXHQvKiBEZXZpY2Ugd2VkZ2VkOiB0ZWFyZG93biBhbmQgRkxSXFxuK1xcdFxcdFxcdFxcdCAqIGJvdGggZmFpbGVkLCBzbyBoYXJkd2FyZSBtYXkgc3RpbGxcXG4rXFx0XFx0XFx0XFx0ICogRE1BIGludG8gb3VyIHF1ZXVlIGJ1ZmZlcnMuICBMZWFrXFxuK1xcdFxcdFxcdFxcdCAqIGFsbCBIV0MgRE1BIGJ1ZmZlcnMgLS0gYW5kIHRoZSBFUVxcbitcXHRcXHRcXHRcXHQgKiBJUlEgcmVnaXN0cmF0aW9uLCB3aG9zZSBzYWZlIHJlbW92YWxcXG4rXFx0XFx0XFx0XFx0ICogbmVlZHMgdGhvc2UgcXVldWVzIC0tIGluc3RlYWQgb2ZcXG4rXFx0XFx0XFx0XFx0ICogZnJlZWluZyBtZW1vcnkgdGhlIGRldmljZSBjYW4gc3RpbGxcXG4rXFx0XFx0XFx0XFx0ICogcmVhY2g7IHdpdGhvdXQgYW4gSU9NTVUgdGhlIGZyZWVkXFxuK1xcdFxcdFxcdFxcdCAqIHBhZ2VzIGNvdWxkIGJlIHJldXNlZCB1bmRlciBsaXZlXFxuK1xcdFxcdFxcdFxcdCAqIERNQS5cXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcbitcXHRcXHRcXHRcXHRkZXZfd2FybihnYy1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgXFxcIkxlYWtlZCBIV0MgRE1BIGJ1ZmZlcnMgKENRL1JRL1RYUSkgdG8gcHJldmVudCBtZW1vcnkgY29ycnVwdGlvbi4gRGV2aWNlIGlzIG5vIGxvbmdlciB1c2FibGUuXFxcXG5cXFwiKTtcXG4rXFxuK1xcdFxcdFxcdFxcdC8qIERvIG5vdCBjYWxsIGRlc3Ryb3lfY3Evd3EgYmVsb3c7XFxuK1xcdFxcdFxcdFxcdCAqIHRoZXkgd291bGQgZG1hX2ZyZWVfY29oZXJlbnQoKS5cXG4rXFx0XFx0XFx0XFx0ICogTGVhdmUgaHdjL2NxL3J4cS90eHEgYWxsb2NhdGVkLlxcbitcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRkZXZfaW5mbyhnYy1cXHUwMDNlZGV2LCBcXFwiRkxSIHN1Y2NlZWRlZCwgaGFyZHdhcmUgc3RhdGUgY2xlYXJlZFxcXFxuXFxcIik7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGh3Yy1cXHUwMDNlc2V0dXBfYWN0aXZlID0gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRlYXIgZG93biB0aGUgSFdDIENRIG9iamVjdCBmaXJzdCDigJQgbWFuYV9od2NfZGVzdHJveV9jcSgpXFxuK1xcdCAqIGJvdGggdW5wdWJsaXNoZXMgdGhlIENRIGZyb20gY3FfdGFibGUgKCtzeW5jaHJvbml6ZV9yY3UpIGFuZFxcbitcXHQgKiBkZXJlZ2lzdGVycyB0aGUgSFdDIEVRIGZyb20gdGhlIGludGVycnVwdCBoYW5kbGVyJ3MgUkNVIGxpc3RcXG4rXFx0ICogKHZpYSBtYW5hX2dkX2RlcmVnaXN0ZXJfaXJxICsgc3luY2hyb25pemVfcmN1KSwgZ3VhcmFudGVlaW5nXFxuK1xcdCAqIG5vIGludGVycnVwdCBoYW5kbGVyIGNhbiBhY2Nlc3MgUlEvVFhRIGJ1ZmZlcnMgYWZ0ZXIgdGhpc1xcbitcXHQgKiBwb2ludC4gIFRoZSBhY3RpdmVfc2VuZGVycyBkcmFpbiBhYm92ZSBlbnN1cmVzIG5vIHNlbmRlciBpc1xcbitcXHQgKiBhY2Nlc3NpbmcgdGhlIENRIHZpYSB0eHEtXFx1MDAzZWh3Y19jcSB3aGVuIGl0IGlzIGRlc3Ryb3llZC4gIFRoZW5cXG4rXFx0ICogZGVzdHJveSBUWFEgYW5kIFJRIHNhZmVseS5cXG4rXFx0ICovXFxuK1xcdGlmIChod2MtXFx1MDAzZWNxKVxcbitcXHRcXHRtYW5hX2h3Y19kZXN0cm95X2NxKGh3Yy1cXHUwMDNlZ2RtYV9kZXYtXFx1MDAzZWdkbWFfY29udGV4dCwgaHdjLVxcdTAwM2VjcSk7XFxuK1xcbiBcXHRpZiAoaHdjLVxcdTAwM2V0eHEpXFxuIFxcdFxcdG1hbmFfaHdjX2Rlc3Ryb3lfd3EoaHdjLCBod2MtXFx1MDAzZXR4cSk7XFxuIFxcbiBcXHRpZiAoaHdjLVxcdTAwM2VyeHEpXFxuIFxcdFxcdG1hbmFfaHdjX2Rlc3Ryb3lfd3EoaHdjLCBod2MtXFx1MDAzZXJ4cSk7XFxuIFxcbi1cXHRpZiAoaHdjLVxcdTAwM2VjcSlcXG4tXFx0XFx0bWFuYV9od2NfZGVzdHJveV9jcShod2MtXFx1MDAzZWdkbWFfZGV2LVxcdTAwM2VnZG1hX2NvbnRleHQsIGh3Yy1cXHUwMDNlY3EpO1xcbitcXHQvKiBSZWxlYXNlIGFueSBzbG90cyBzdGlsbCBoZWxkIOKAlCB0aGVzZSBiZWxvbmcgdG8gdGltZWQtb3V0XFxuK1xcdCAqIHNlbmRlcnMgd2hlcmUgaGFuZGxlX3Jlc3AoKSBuZXZlciByYW4gKHJlZmNvdW50ID0gMSB3aXRoXFxuK1xcdCAqIGhhbmRsZV9yZXNwJ3MgcmVmIHN0aWxsIG91dHN0YW5kaW5nKS5cXG4rXFx0ICovXFxuK1xcdGlmIChod2MtXFx1MDAzZWNhbGxlcl9jdHgpIHtcXG4rXFx0XFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHg7XFxuK1xcdFxcdGludCBpO1xcbitcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGh3Yy1cXHUwMDNlbnVtX2luZmxpZ2h0X21zZzsgaSsrKSB7XFxuK1xcdFxcdFxcdGlmICghdGVzdF9iaXQoaSwgaHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzLm1hcCkpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0Y3R4ID0gXFx1MDAyNmh3Yy1cXHUwMDNlY2FsbGVyX2N0eFtpXTtcXG4rXFx0XFx0XFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFxuIFxcdGtmcmVlKGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCk7XFxuIFxcdGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCA9IE5VTEw7XFxuQEAgLTg0NSwxMSArMTM4MSwxMSBAQCB2b2lkIG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcXG4gXFx0aHdjLVxcdTAwM2Vod2NfdGltZW91dCA9IDA7XFxuIFxcbiBcXHRrZnJlZShod2MpO1xcbi1cXHRnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhID0gTlVMTDtcXG4gXFx0Z2MtXFx1MDAzZWh3Yy5nZG1hX2NvbnRleHQgPSBOVUxMO1xcbiBcXG4tXFx0dmZyZWUoZ2MtXFx1MDAzZWNxX3RhYmxlKTtcXG4tXFx0Z2MtXFx1MDAzZWNxX3RhYmxlID0gTlVMTDtcXG4rXFx0b2xkX2NxX3RhYmxlID0gcmN1X3JlcGxhY2VfcG9pbnRlcihnYy1cXHUwMDNlY3FfdGFibGUsIE5VTEwsIHRydWUpO1xcbitcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4rXFx0dmZyZWUob2xkX2NxX3RhYmxlKTtcXG4gfVxcbiBcXG4gaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLFxcbkBAIC04NjAsMTMgKzEzOTYsMTcgQEAgaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLFxcbiBcXHRzdHJ1Y3QgaHdjX3dxICp0eHEgPSBod2MtXFx1MDAzZXR4cTtcXG4gXFx0c3RydWN0IGdkbWFfcmVxX2hkciAqcmVxX21zZztcXG4gXFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHg7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdHUzMiBkZXN0X3ZyY3EgPSAwO1xcbiBcXHR1MzIgZGVzdF92cnEgPSAwO1xcbiBcXHR1MzIgY29tbWFuZDtcXG4rXFx0dTMyIHN0YXR1cztcXG4gXFx0dTE2IG1zZ19pZDtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdG1hbmFfaHdjX2dldF9tc2dfaW5kZXgoaHdjLCBcXHUwMDI2bXNnX2lkKTtcXG4rXFx0ZXJyID0gbWFuYV9od2NfZ2V0X21zZ19pbmRleChod2MsIFxcdTAwMjZtc2dfaWQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4gXFx0dHhfd3IgPSBcXHUwMDI2dHhxLVxcdTAwM2Vtc2dfYnVmLVxcdTAwM2VyZXFzW21zZ19pZF07XFxuIFxcbkBAIC04NzgsOCArMTQxOCwxMSBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sXFxuIFxcdH1cXG4gXFxuIFxcdGN0eCA9IGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCArIG1zZ19pZDtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFx0Y3R4LVxcdTAwM2VvdXRwdXRfYnVmID0gcmVzcDtcXG4gXFx0Y3R4LVxcdTAwM2VvdXRwdXRfYnVmbGVuID0gcmVzcF9sZW47XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmN0eC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXG4gXFx0cmVxX21zZyA9IChzdHJ1Y3QgZ2RtYV9yZXFfaGRyICopdHhfd3ItXFx1MDAzZWJ1Zl92YTtcXG4gXFx0aWYgKHJlcSlcXG5AQCAtODk1LDggKzE0MzgsMTQgQEAgaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLFxcbiBcXHRcXHRkZXN0X3ZyY3EgPSBod2MtXFx1MDAzZXBmX2Rlc3RfdnJjcV9pZDtcXG4gXFx0fVxcbiBcXG4rXFx0LyogVGFrZSBoYW5kbGVfcmVzcCdzIHJlZiBiZWZvcmUgcG9zdGluZyDigJQgaGFyZHdhcmUgY2FuIHJlc3BvbmRcXG4rXFx0ICogaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGRvb3JiZWxsIHJpbmcuXFxuK1xcdCAqL1xcbitcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmN0eC1cXHUwMDNlcmVmY250KTtcXG4rXFxuIFxcdGVyciA9IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKHR4cSwgdHhfd3IsIGRlc3RfdnJxLCBkZXN0X3ZyY3EsIGZhbHNlKTtcXG4gXFx0aWYgKGVycikge1xcbitcXHRcXHRyZWZjb3VudF9kZWMoXFx1MDAyNmN0eC1cXHUwMDNlcmVmY250KTtcXG4gXFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkhXQzogRmFpbGVkIHRvIHBvc3Qgc2VuZCBXUUU6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbkBAIC05MDcsMzEgKzE0NTYsODYgQEAgaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLFxcbiBcXHRcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiQ29tbWFuZCAweCV4IHRpbWVkIG91dDogJXUgbXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdGNvbW1hbmQsIGh3Yy1cXHUwMDNlaHdjX3RpbWVvdXQpO1xcbiBcXG4tXFx0XFx0LyogUmVkdWNlIGZ1cnRoZXIgd2FpdGluZyBpZiBIV0Mgbm8gcmVzcG9uc2UgKi9cXG4rXFx0XFx0LyogTlVMTCBvdXQgb3V0cHV0X2J1ZiBzbyBhIGxhdGUgaGFuZGxlX3Jlc3AoKSB3b24ndCB3cml0ZVxcbitcXHRcXHQgKiBpbnRvIHRoZSBjYWxsZXIncyBidWZmZXIgYWZ0ZXIgdGhlIHNlbmRlciByZXR1cm5zLCB0aGVuXFxuK1xcdFxcdCAqIGNoZWNrIHdoZXRoZXIgaGFuZGxlX3Jlc3AoKSBhbHJlYWR5IGRlbGl2ZXJlZCBhIHZhbGlkXFxuK1xcdFxcdCAqIHJlc3BvbnNlIGJldHdlZW4gdGhlIHRpbWVvdXQgZmlyaW5nIGFuZCB0aGlzIGxvY2tcXG4rXFx0XFx0ICogYWNxdWlzaXRpb24g4oCUIGN0eC1cXHUwMDNlZXJyb3IgIT0gLUVJTlBST0dSRVNTIG1lYW5zIGl0IHJhbi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0Y3R4LVxcdTAwM2VvdXRwdXRfYnVmID0gTlVMTDtcXG4rXFx0XFx0ZXJyID0gY3R4LVxcdTAwM2VlcnJvcjtcXG4rXFx0XFx0c3RhdHVzID0gY3R4LVxcdTAwM2VzdGF0dXNfY29kZTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbitcXHRcXHRpZiAoZXJyICE9IC1FSU5QUk9HUkVTUykge1xcbitcXHRcXHRcXHQvKiBoYW5kbGVfcmVzcCgpIGRlbGl2ZXJlZCBhIHZhbGlkIHJlc3BvbnNlIGp1c3QgYWZ0ZXJcXG4rXFx0XFx0XFx0ICogdGhlIHRpbWVvdXQgZmlyZWQuICBUaGUgaGFyZHdhcmUgaXMgYWxpdmUsIHNvIHVzZVxcbitcXHRcXHRcXHQgKiB0aGUgcmVzcG9uc2UgYW5kIGxlYXZlIHRoZSBjaGFubmVsIHVzYWJsZTsgZG8gbm90XFxuK1xcdFxcdFxcdCAqIGxhdGNoIGh3Y190aW1lZF9vdXQgb3IgZGVncmFkZSBod2NfdGltZW91dCBmb3Igd2hhdFxcbitcXHRcXHRcXHQgKiB0dXJuZWQgb3V0IHRvIGJlIGEgdHJhbnNpZW50IHJhY2UuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRod2NfY3R4X3B1dChod2MsIGN0eCk7XFxuK1xcdFxcdFxcdGdvdG8gY2hlY2tfc3RhdHVzO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiBHZW51aW5lIHRpbWVvdXQ6IG5vIHJlc3BvbnNlIGFycml2ZWQuICBSZWR1Y2UgZnVydGhlclxcbitcXHRcXHQgKiB3YWl0aW5nLCBhbmQgbWFyayB0aGUgY2hhbm5lbCB0aW1lZCBvdXQgdW5kZXIgdGhlIGJpdG1hcFxcbitcXHRcXHQgKiBsb2NrIHNvIGdldF9tc2dfaW5kZXgoKSBjYW5ub3QgYWNxdWlyZSBuZXcgc2xvdHMgYWZ0ZXIgdGhpcy5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdGlmIChod2MtXFx1MDAzZWh3Y190aW1lb3V0IFxcdTAwM2UgMSlcXG4gXFx0XFx0XFx0aHdjLVxcdTAwM2Vod2NfdGltZW91dCA9IDE7XFxuIFxcbitcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0aHdjLVxcdTAwM2Vod2NfdGltZWRfb3V0ID0gdHJ1ZTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0d2FrZV91cF9hbGwoXFx1MDAyNmh3Yy1cXHUwMDNlbXNnX3dhaXRxKTtcXG4rXFxuIFxcdFxcdGVyciA9IC1FVElNRURPVVQ7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRod2NfY3R4X3B1dChod2MsIGN0eCk7XFxuK1xcdFxcdGdvdG8gZG9uZTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGN0eC1cXHUwMDNlZXJyb3IpIHtcXG4tXFx0XFx0ZXJyID0gY3R4LVxcdTAwM2VlcnJvcjtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4rXFx0LyogTlVMTCBvdXRwdXRfYnVmIHNvIGEgbGF0ZSBoYW5kbGVfcmVzcCgpIHdvbid0IG1lbWNweSBpbnRvXFxuK1xcdCAqIHRoZSBjYWxsZXIncyBidWZmZXIgYWZ0ZXIgdGhlIHNlbmRlciBleGl0cy4gIFJlYWQgZXJyb3IgYW5kXFxuK1xcdCAqIHN0YXR1c19jb2RlIHVuZGVyIHRoZSBzYW1lIGxvY2sg4oCUIGFmdGVyIGh3Y19jdHhfcHV0IHRoZSBzbG90XFxuK1xcdCAqIG1heSBiZSByZXVzZWQgYW5kIHRoZXNlIGZpZWxkcyBvdmVyd3JpdHRlbi5cXG4rXFx0ICovXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0Y3R4LVxcdTAwM2VvdXRwdXRfYnVmID0gTlVMTDtcXG4rXFx0ZXJyID0gY3R4LVxcdTAwM2VlcnJvcjtcXG4rXFx0c3RhdHVzID0gY3R4LVxcdTAwM2VzdGF0dXNfY29kZTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdGh3Y19jdHhfcHV0KGh3YywgY3R4KTtcXG4rXFxuK2NoZWNrX3N0YXR1czpcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBkb25lO1xcbiBcXG4tXFx0aWYgKGN0eC1cXHUwMDNlc3RhdHVzX2NvZGUgXFx1MDAyNlxcdTAwMjYgY3R4LVxcdTAwM2VzdGF0dXNfY29kZSAhPSBHRE1BX1NUQVRVU19NT1JFX0VOVFJJRVMpIHtcXG4tXFx0XFx0aWYgKGN0eC1cXHUwMDNlc3RhdHVzX2NvZGUgPT0gR0RNQV9TVEFUVVNfQ01EX1VOU1VQUE9SVEVEKSB7XFxuK1xcdGlmIChzdGF0dXMgXFx1MDAyNlxcdTAwMjYgc3RhdHVzICE9IEdETUFfU1RBVFVTX01PUkVfRU5UUklFUykge1xcbitcXHRcXHRpZiAoc3RhdHVzID09IEdETUFfU1RBVFVTX0NNRF9VTlNVUFBPUlRFRCkge1xcbiBcXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4tXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdFxcdGdvdG8gZG9uZTtcXG4gXFx0XFx0fVxcbitcXG4gXFx0XFx0aWYgKGNvbW1hbmQgIT0gTUFOQV9RVUVSWV9QSFlfU1RBVClcXG4gXFx0XFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkNvbW1hbmQgMHgleCBmYWlsZWQgd2l0aCBzdGF0dXM6IDB4JXhcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdGNvbW1hbmQsIGN0eC1cXHUwMDNlc3RhdHVzX2NvZGUpO1xcbitcXHRcXHRcXHRcXHRjb21tYW5kLCBzdGF0dXMpO1xcbiBcXHRcXHRlcnIgPSAtRVBST1RPO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0Z290byBkb25lO1xcbiBcXHR9XFxuK1xcbitcXHRlcnIgPSAwO1xcbitcXHRnb3RvIGRvbmU7XFxuIG91dDpcXG4tXFx0bWFuYV9od2NfcHV0X21zZ19pbmRleChod2MsIG1zZ19pZCk7XFxuK1xcdC8qIFByZS1wb3N0IGVycm9yIHBhdGhzOiBubyBXUUUgd2FzIHN1Ym1pdHRlZCBzbyBoYW5kbGVfcmVzcCgpXFxuK1xcdCAqIGNhbm5vdCByYWNlIGhlcmUuICByZWZjb3VudCBpcyAxIChubyBzZWNvbmQgcmVmIHRha2VuKS5cXG4rXFx0ICovXFxuK1xcdGN0eCA9IGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCArIG1zZ19pZDtcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmN0eC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRjdHgtXFx1MDAzZW91dHB1dF9idWYgPSBOVUxMO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xcbitkb25lOlxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xcbmluZGV4IGE4YzMyOWJkYmFjZjgzLi41NTA4NzQ2NTkwZTdjZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcXG5AQCAtMjY0OCw2ICsyNjQ4LDcgQEAgc3RhdGljIGludCBtYW5hX2NyZWF0ZV90eHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXFxuIFxcdHN0cnVjdCBtYW5hX29ial9zcGVjIGNxX3NwZWM7XFxuIFxcdHN0cnVjdCBnZG1hX3F1ZXVlX3NwZWMgc3BlYztcXG4gXFx0c3RydWN0IGdkbWFfY29udGV4dCAqZ2M7XFxuK1xcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqY3FfdGFibGU7XFxuIFxcdHN0cnVjdCBtYW5hX3R4cSAqdHhxO1xcbiBcXHRzdHJ1Y3QgbWFuYV9jcSAqY3E7XFxuIFxcdHUzMiB0eHFfc2l6ZTtcXG5AQCAtMjc1MywxMiArMjc1NCwxOCBAQCBzdGF0aWMgaW50IG1hbmFfY3JlYXRlX3R4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcXG4gXFxuIFxcdFxcdGNxLVxcdTAwM2VnZG1hX2lkID0gY3EtXFx1MDAzZWdkbWFfY3EtXFx1MDAzZWlkO1xcbiBcXG4tXFx0XFx0aWYgKFdBUk5fT04oY3EtXFx1MDAzZWdkbWFfaWQgXFx1MDAzZT0gZ2MtXFx1MDAzZW1heF9udW1fY3FzKSkge1xcbitcXHRcXHQvKiBObyByY3VfcmVhZF9sb2NrKCk6IG1hbmFfY3JlYXRlX3R4cSBydW5zIHVuZGVyIFJUTkwgZHVyaW5nXFxuK1xcdFxcdCAqIG5ldGRldiBicmluZy11cCwgaW5zaWRlIHRoZSBuZXRkZXYgbGlmZXRpbWUgdGhhdFxcbitcXHRcXHQgKiBtYW5hX3JlbW92ZSgpIGRyYWlucyBiZWZvcmUgdGhlIGJhc2UgY3FfdGFibGUgY2FuIGJlIGZyZWVkLlxcbitcXHRcXHQgKiBTZWUgZ2RtYV9jb250ZXh0OjpjcV90YWJsZSBpbiBnZG1hLmggZm9yIHdoeSBcXFwidHJ1ZVxcXCIgaXMgc291bmQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjcV90YWJsZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2MtXFx1MDAzZWNxX3RhYmxlLCB0cnVlKTtcXG4rXFx0XFx0aWYgKFdBUk5fT04oIWNxX3RhYmxlIHx8IGNxLVxcdTAwM2VnZG1hX2lkIFxcdTAwM2U9IGdjLVxcdTAwM2VtYXhfbnVtX2NxcykpIHtcXG4gXFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGdjLVxcdTAwM2VjcV90YWJsZVtjcS1cXHUwMDNlZ2RtYV9pZF0gPSBjcS1cXHUwMDNlZ2RtYV9jcTtcXG4rXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNxX3RhYmxlW2NxLVxcdTAwM2VnZG1hX2lkXSwgY3EtXFx1MDAzZWdkbWFfY3EpO1xcbiBcXG4gXFx0XFx0bWFuYV9jcmVhdGVfdHhxX2RlYnVnZnMoYXBjLCBpKTtcXG4gXFxuQEAgLTI5ODYsNiArMjk5Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWFuYV9yeHEgKm1hbmFfY3JlYXRlX3J4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcXG4gXFx0c3RydWN0IGdkbWFfcXVldWVfc3BlYyBzcGVjO1xcbiBcXHRzdHJ1Y3QgbWFuYV9jcSAqY3EgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYztcXG4rXFx0c3RydWN0IGdkbWFfcXVldWUgX19yY3UgKipjcV90YWJsZTtcXG4gXFx0dTMyIGNxX3NpemUsIHJxX3NpemU7XFxuIFxcdHN0cnVjdCBtYW5hX3J4cSAqcnhxO1xcbiBcXHRpbnQgZXJyO1xcbkBAIC0zMDc1LDEyICszMDgzLDE4IEBAIHN0YXRpYyBzdHJ1Y3QgbWFuYV9yeHEgKm1hbmFfY3JlYXRlX3J4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRpZiAoV0FSTl9PTihjcS1cXHUwMDNlZ2RtYV9pZCBcXHUwMDNlPSBnYy1cXHUwMDNlbWF4X251bV9jcXMpKSB7XFxuK1xcdC8qIE5vIHJjdV9yZWFkX2xvY2soKTogbWFuYV9jcmVhdGVfcnhxIHJ1bnMgdW5kZXIgUlROTCBkdXJpbmcgbmV0ZGV2XFxuK1xcdCAqIGJyaW5nLXVwLCBpbnNpZGUgdGhlIG5ldGRldiBsaWZldGltZSB0aGF0IG1hbmFfcmVtb3ZlKCkgZHJhaW5zXFxuK1xcdCAqIGJlZm9yZSB0aGUgYmFzZSBjcV90YWJsZSBjYW4gYmUgZnJlZWQuICBTZWUgZ2RtYV9jb250ZXh0OjpjcV90YWJsZVxcbitcXHQgKiBpbiBnZG1hLmggZm9yIHdoeSBcXFwidHJ1ZVxcXCIgaXMgc291bmQuXFxuK1xcdCAqL1xcbitcXHRjcV90YWJsZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2MtXFx1MDAzZWNxX3RhYmxlLCB0cnVlKTtcXG4rXFx0aWYgKFdBUk5fT04oIWNxX3RhYmxlIHx8IGNxLVxcdTAwM2VnZG1hX2lkIFxcdTAwM2U9IGdjLVxcdTAwM2VtYXhfbnVtX2NxcykpIHtcXG4gXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdGdjLVxcdTAwM2VjcV90YWJsZVtjcS1cXHUwMDNlZ2RtYV9pZF0gPSBjcS1cXHUwMDNlZ2RtYV9jcTtcXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNxX3RhYmxlW2NxLVxcdTAwM2VnZG1hX2lkXSwgY3EtXFx1MDAzZWdkbWFfY3EpO1xcbiBcXG4gXFx0bmV0aWZfbmFwaV9hZGRfd2VpZ2h0X2xvY2tlZChuZGV2LCBcXHUwMDI2Y3EtXFx1MDAzZW5hcGksIG1hbmFfcG9sbCwgMSk7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaCBiL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXFxuaW5kZXggODUyOWNlZjBkN2M0NTIuLmE0ZWFjNmY3YzM2NjA5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcXG5AQCAtNDI4LDkgKzQyOCwzNCBAQCBzdHJ1Y3QgZ2RtYV9jb250ZXh0IHtcXG4gXFx0LyogTDIgTVRVICovXFxuIFxcdHUxNiBhZGFwdGVyX210dTtcXG4gXFxuLVxcdC8qIFRoaXMgbWFwcyBhIENRIGluZGV4IHRvIHRoZSBxdWV1ZSBzdHJ1Y3R1cmUuICovXFxuK1xcdC8qIFNpemUgb2YgY3FfdGFibGUsIGkuZS4gdGhlIGxhcmdlc3QgdmFsaWQgQ1EgaW5kZXggKyAxLiAgU2V0IG9uY2VcXG4rXFx0ICogd2hlbiBjcV90YWJsZSBpcyBhbGxvY2F0ZWQgYW5kIHRyZWF0ZWQgYXMgaW1tdXRhYmxlIGZvciB0aGVcXG4rXFx0ICogdGFibGUncyBsaWZldGltZSAoYSBib3VuZCBvbmx5KSAtLSBpdCBpcyBuZXZlciByZXNldCBvbiB0ZWFyZG93bi5cXG4rXFx0ICogY3FfdGFibGUgPT0gTlVMTCBpcyB0aGUgc29sZSBcXFwidGFibGUgdG9ybiBkb3duXFxcIiBzaWduYWwsIHNvIGV2ZXJ5XFxuK1xcdCAqIGNxX3RhYmxlW2lkXSBhY2Nlc3MgbXVzdCBndWFyZCB3aXRoIGJvdGggIWNxX3RhYmxlIChnb25lKSBhbmRcXG4rXFx0ICogaWQgXFx1MDAzZT0gbWF4X251bV9jcXMgKG91dCBvZiBib3VuZHMpLlxcbitcXHQgKi9cXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0bWF4X251bV9jcXM7XFxuLVxcdHN0cnVjdCBnZG1hX3F1ZXVlXFx0KipjcV90YWJsZTtcXG4rXFx0LyogQm90aCB0aGUgYmFzZSBwb2ludGVyIGFuZCBlYWNoIGVudHJ5IGFyZSBSQ1UtbWFuYWdlZC4gIFRoZSBmYXN0XFxuK1xcdCAqIHBhdGggKG1hbmFfZ2RfcHJvY2Vzc19lcWUpIHJlYWRzIHRoZSBiYXNlIHZpYSByY3VfZGVyZWZlcmVuY2UoKVxcbitcXHQgKiB1bmRlciByY3VfcmVhZF9sb2NrKCksIHNvIHRoZSB0YWJsZSBpcyBmcmVlZCB3aXRoXFxuK1xcdCAqIHJjdV9hc3NpZ25fcG9pbnRlcihOVUxMKSArIHN5bmNocm9uaXplX3JjdSgpIGFuZCBhbiBpbi1mbGlnaHRcXG4rXFx0ICogcmVhZGVyIGNhbiBuZXZlciBvYnNlcnZlIGZyZWVkIG1lbW9yeS5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIHNsb3cgcGF0aHMgLS0gbWFuYV9nZF9kZXN0cm95X2NxKCkgYW5kIHRoZSBDUSBpbnN0YWxsL3JlbW92ZVxcbitcXHQgKiBjYWxsZXJzIChtYW5hX2NyZWF0ZV90eHEvX3J4cSwgbWFuYV9pYl9pbnN0YWxsL3JlbW92ZV9jcV9jYikgLS1cXG4rXFx0ICogaW5zdGVhZCByZWFkIHRoZSBiYXNlIHdpdGggcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjcV90YWJsZSxcXG4rXFx0ICogdHJ1ZSkuICBUaGUgYmFyZSBcXFwidHJ1ZVxcXCIgaXMganVzdGlmaWVkIGJ5IHRlYXJkb3duIG9yZGVyaW5nLCBub3QgYnlcXG4rXFx0ICogYSBsb2NrOiB0aGUgYmFzZSB0YWJsZSBpcyByZXBsYWNlZCtmcmVlZCBvbmx5IGJ5XFxuK1xcdCAqIG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbCgpIChhbmQgdGhlIGNyZWF0ZS10aW1lIHJlaW5pdCksIGFuZCBldmVyeVxcbitcXHQgKiB0ZWFyZG93biBwYXRoIGZpcnN0IHJ1bnMgbWFuYV9yZW1vdmUoKSArIG1hbmFfcmRtYV9yZW1vdmUoKSwgd2hpY2hcXG4rXFx0ICogc3luY2hyb25vdXNseSBkcmFpbiB0aGUgbmV0ZGV2IGFuZCB0aGUgSUIgZGV2aWNlXFxuK1xcdCAqICh1bnJlZ2lzdGVyX25ldGRldmljZSAvIGliX3VucmVnaXN0ZXJfZGV2aWNlKSB0aGF0IGJvdW5kIGFsbFxcbitcXHQgKiBpbnN0YWxsL3JlbW92ZSBjYWxsZXJzOyB0aGUgcmVpbml0IGNhc2UgcnVucyBiZWZvcmUgZWl0aGVyXFxuK1xcdCAqIGNvbnN1bWVyIGlzIHByb2JlZC4gIFNvIG5vIHNsb3ctcGF0aCBjYWxsZXIgY2FuIHJ1biB3aGlsZSB0aGUgYmFzZVxcbitcXHQgKiB0YWJsZSBpcyBiZWluZyBmcmVlZC5cXG4rXFx0ICovXFxuK1xcdHN0cnVjdCBnZG1hX3F1ZXVlXFx0X19yY3UgKiBfX3JjdSAqY3FfdGFibGU7XFxuIFxcbiBcXHQvKiBQcm90ZWN0IGVxX3Rlc3RfZXZlbnQgYW5kIHRlc3RfZXZlbnRfZXFfaWQgICovXFxuIFxcdHN0cnVjdCBtdXRleFxcdFxcdGVxX3Rlc3RfZXZlbnRfbXV0ZXg7XFxuQEAgLTQ1Niw2ICs0ODEsMjEgQEAgc3RydWN0IGdkbWFfY29udGV4dCB7XFxuIFxcdC8qIEhhcmR3YXJlIGNvbW11bmljYXRpb24gY2hhbm5lbCAoSFdDKSAqL1xcbiBcXHRzdHJ1Y3QgZ2RtYV9kZXZcXHRcXHRod2M7XFxuIFxcbitcXHQvKiBkZXN0cm95X2NoYW5uZWwoKSB3YWl0cyBoZXJlIGZvciBhbGwgSFdDIHNlbmRlcnMgdG8gZXhpdC5cXG4rXFx0ICogTGl2ZXMgb24gZ2MgKG5vdCBod2MpIHNvIHdha2VfdXAoKSBhZnRlciB0aGUgbGFzdCBzZW5kZXInc1xcbitcXHQgKiBhdG9taWNfZGVjIGRvZXNuJ3QgZGVyZWZlcmVuY2UgZnJlZWQgaHdjIG1lbW9yeS5cXG4rXFx0ICovXFxuK1xcdHdhaXRfcXVldWVfaGVhZF90XFx0aHdjX2RyYWluX3dhaXRxO1xcbitcXG4rXFx0LyogU2VyaWFsaXplcyBod2MuZHJpdmVyX2RhdGEgKHRoZSBod19jaGFubmVsX2NvbnRleHQgcG9pbnRlcilcXG4rXFx0ICogYmV0d2VlbiB0aGUgY29udHJvbC1wbGFuZSByZWFkZXJzIGluIG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCksXFxuK1xcdCAqIG1hbmFfbmVlZF9sb2coKSBhbmQgbWFuYV9zZXJ2X3Jlc2V0KCkgYW5kIHRoZSBwdWJsaXNoL2NsZWFyIGluXFxuK1xcdCAqIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKCkvbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKCkuICBBbGwgdXNlcnNcXG4rXFx0ICogYXJlIGNvbnRyb2wtcGxhbmUgKEhXQyBjb21tYW5kcyBzbGVlcDsgcmVzZXQgcnVucyBvbiBhIHdvcmtxdWV1ZSksXFxuK1xcdCAqIHNvIGEgcGxhaW4gc3BpbmxvY2sgLS0gbm90IFJDVSAtLSBpcyBzdWZmaWNpZW50LlxcbitcXHQgKi9cXG4rXFx0c3BpbmxvY2tfdFxcdFxcdGh3Y19sb2NrO1xcbitcXG4gXFx0LyogQXp1cmUgbmV0d29yayBhZGFwdGVyICovXFxuIFxcdHN0cnVjdCBnZG1hX2RldlxcdFxcdG1hbmE7XFxuIFxcbkBAIC02NjgsNiArNzA4LDkgQEAgZW51bSB7XFxuIC8qIERyaXZlciBzdXBwb3J0cyBkeW5hbWljIGludGVycnVwdCBtb2RlcmF0aW9uIC0gRElNICovXFxuICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04gQklUKDI4KVxcbiBcXG4rLyogRHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgcXVldWUgZGVwdGggZm9yIEhXQyAqL1xcbisjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0hXQ19RVUVVRV9ERVBUSCBCSVQoMjkpXFxuK1xcbiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHUzEgXFxcXFxcbiBcXHQoR0RNQV9EUlZfQ0FQX0ZMQUdfMV9FUV9TSEFSSU5HX01VTFRJX1ZQT1JUIHwgXFxcXFxcbiBcXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9OQVBJX1dLRE9ORV9GSVggfCBcXFxcXFxuQEAgLTY4Myw2ICs3MjYsNyBAQCBlbnVtIHtcXG4gXFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfUFJPQkVfUkVDT1ZFUlkgfCBcXFxcXFxuIFxcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0hBTkRMRV9TVEFMTF9TUV9SRUNPVkVSWSB8IFxcXFxcXG4gXFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfSFdDX1RJTUVPVVRfUkVDT1ZFUlkgfCBcXFxcXFxuK1xcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0RZTl9IV0NfUVVFVUVfREVQVEggfCBcXFxcXFxuIFxcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0VRX01TSV9VTlNIQVJFX01VTFRJX1ZQT1JUIHwgXFxcXFxcbiBcXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04pXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYW5hL2h3X2NoYW5uZWwuaCBiL2luY2x1ZGUvbmV0L21hbmEvaHdfY2hhbm5lbC5oXFxuaW5kZXggMTZmZWIzOTYxNmMxYmUuLmVlYzVkM2FhMjNlMWQ1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L21hbmEvaHdfY2hhbm5lbC5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmhcXG5AQCAtMTY0LDYgKzE2NCw5IEBAIHN0cnVjdCBod2Nfd3Ege1xcbiBcXHR1MTYgcXVldWVfZGVwdGg7XFxuIFxcbiBcXHRzdHJ1Y3QgaHdjX2NxICpod2NfY3E7XFxuK1xcbitcXHQvKiBTZXJpYWxpemVzIGNvbmN1cnJlbnQgbWFuYV9nZF9wb3N0X2FuZF9yaW5nKCkgY2FsbHMuICovXFxuK1xcdHNwaW5sb2NrX3QgbG9jaztcXG4gfTtcXG4gXFxuIHN0cnVjdCBod2NfY2FsbGVyX2N0eCB7XFxuQEAgLTE3Myw2ICsxNzYsMTcgQEAgc3RydWN0IGh3Y19jYWxsZXJfY3R4IHtcXG4gXFxuIFxcdHUzMiBlcnJvcjsgLyogTGludXggZXJyb3IgY29kZSAqL1xcbiBcXHR1MzIgc3RhdHVzX2NvZGU7XFxuK1xcbitcXHQvKiBQcm90ZWN0cyBvdXRwdXRfYnVmIGFnYWluc3QgY29uY3VycmVudCBhY2Nlc3MgZnJvbVxcbitcXHQgKiBoYW5kbGVfcmVzcCgpIChDUSBpbnRlcnJ1cHQpIGFuZCB0aGUgc2VuZGVyIHRpbWVvdXQgcGF0aC5cXG4rXFx0ICovXFxuK1xcdHNwaW5sb2NrX3QgbG9jaztcXG4rXFxuK1xcdC8qIFRyYWNrcyBzZW5kZXIgKyBoYW5kbGVfcmVzcCBvd25lcnNoaXAuICBUaGUgbGFzdCBwdXRcXG4rXFx0ICogKHJlZmNvdW50IHJlYWNoZXMgMCkgcmVsZWFzZXMgdGhlIGJpdG1hcCBzbG90LlxcbitcXHQgKi9cXG4rXFx0cmVmY291bnRfdCByZWZjbnQ7XFxuK1xcdHUxNiBtc2dfaWQ7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0IHtcXG5AQCAtMTgxLDggKzE5NSw5IEBAIHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQge1xcbiBcXG4gXFx0dTE2IG51bV9pbmZsaWdodF9tc2c7XFxuIFxcdHUzMiBtYXhfcmVxX21zZ19zaXplO1xcbitcXHR1MzIgbWF4X3Jlc3BfbXNnX3NpemU7XFxuIFxcbi1cXHR1MTYgaHdjX2luaXRfcV9kZXB0aF9tYXg7XFxuK1xcdHUzMiBod2NfaW5pdF9xX2RlcHRoX21heDtcXG4gXFx0dTMyIGh3Y19pbml0X21heF9yZXFfbXNnX3NpemU7XFxuIFxcdHUzMiBod2NfaW5pdF9tYXhfcmVzcF9tc2dfc2l6ZTtcXG4gXFxuQEAgLTE5MiwxMyArMjA3LDM4IEBAIHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQge1xcbiBcXHRzdHJ1Y3QgaHdjX3dxICp0eHE7XFxuIFxcdHN0cnVjdCBod2NfY3EgKmNxO1xcbiBcXG4tXFx0c3RydWN0IHNlbWFwaG9yZSBzZW1hO1xcbiBcXHRzdHJ1Y3QgZ2RtYV9yZXNvdXJjZSBpbmZsaWdodF9tc2dfcmVzO1xcbitcXHQvKiBXYWl0cXVldWUgZm9yIHNlbmRlcnMgYmxvY2tlZCBvbiBhIGZ1bGwgaW5mbGlnaHQgYml0bWFwLiAqL1xcbitcXHR3YWl0X3F1ZXVlX2hlYWRfdCBtc2dfd2FpdHE7XFxuIFxcbiBcXHR1MzIgcGZfZGVzdF92cnFfaWQ7XFxuIFxcdHUzMiBwZl9kZXN0X3ZyY3FfaWQ7XFxuIFxcdHUzMiBod2NfdGltZW91dDtcXG4gXFxuK1xcdC8qIFNldCBhZnRlciBjaGFubmVsIGlzIGZ1bGx5IGVzdGFibGlzaGVkOyBjbGVhcmVkIG9uIHRlYXJkb3duIHRvXFxuK1xcdCAqIGFib3J0IHdhaXRlcnMgaW4gbWFuYV9od2NfZ2V0X21zZ19pbmRleCgpIGFuZCByZWplY3QgbmV3IHNlbmRzLlxcbitcXHQgKi9cXG4rXFx0Ym9vbCBjaGFubmVsX3VwO1xcbitcXG4rXFx0LyogU2V0IG9uIGZpcnN0IEhXQyB0aW1lb3V0LiAgQ2F1c2VzIGdldF9tc2dfaW5kZXgoKSB0byByZXR1cm5cXG4rXFx0ICogLUVUSU1FRE9VVCBpbnN0ZWFkIG9mIHdhaXRpbmcsIGRyYWluaW5nIGFsbCBxdWV1ZWQgc2VuZGVycy5cXG4rXFx0ICovXFxuK1xcdGJvb2wgaHdjX3RpbWVkX291dDtcXG4rXFxuK1xcdC8qIFNldCBhZnRlciBtYW5hX3NtY19zZXR1cF9od2MoKSBzdWNjZWVkcyAoaGFyZHdhcmUgaGFzIGFjdGl2ZVxcbitcXHQgKiBNU1QgZW50cmllcykuICBPbiByZWNvdmVyYWJsZSBwYXRocyAoZXN0YWJsaXNoX2NoYW5uZWwpXFxuK1xcdCAqIGNsZWFyZWQgb25seSBhZnRlciBzdWNjZXNzZnVsIHRlYXJkb3duIHNvIGEgcmV0cnkgcmVtYWluc1xcbitcXHQgKiBwb3NzaWJsZS4gIE9uIHRoZSB0ZXJtaW5hbCBkZXN0cm95X2NoYW5uZWwgcGF0aCwgY2xlYXJlZFxcbitcXHQgKiB1bmNvbmRpdGlvbmFsbHkgc2luY2UgaHdjIGlzIGFib3V0IHRvIGJlIGZyZWVkLlxcbitcXHQgKi9cXG4rXFx0Ym9vbCBzZXR1cF9hY3RpdmU7XFxuK1xcbitcXHQvKiBDb3VudCBvZiBpbi1mbGlnaHQgbWFuYV9nZF9zZW5kX3JlcXVlc3QoKSBjYWxsZXJzLiAgUHJvdGVjdGVkXFxuK1xcdCAqIGJ5IGdjLVxcdTAwM2Vod2NfbG9jazsgdGhlIGxhc3Qgc2VuZGVyIHRvIGRyb3AgaXQgdG8gemVybyB3YWtlc1xcbitcXHQgKiBnYy1cXHUwMDNlaHdjX2RyYWluX3dhaXRxIGZvciB0aGUgbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKCkgZHJhaW4uXFxuK1xcdCAqL1xcbitcXHR1bnNpZ25lZCBpbnQgYWN0aXZlX3NlbmRlcnM7XFxuK1xcbiBcXHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmNhbGxlcl9jdHg7XFxuIH07XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNzo1MjoyMS42ODcyOTAwMjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MDI3NTQ4NDAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNSUNST1NPRlRfTUFOQVwiLFxuICAgIFwiTUFOQV9JTkZJTklCQU5EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFuYV9pYl9pbnN0YWxsX2NxX2NiXCIsXG4gICAgXCJtYW5hX2liX3JlbW92ZV9jcV9jYlwiLFxuICAgIFwibWFuYV9od2NfZ2V0X21zZ19pbmRleFwiLFxuICAgIFwibWFuYV9od2NfaGFuZGxlX3Jlc3BcIixcbiAgICBcIm1hbmFfaHdjX3J4X2V2ZW50X2hhbmRsZXJcIixcbiAgICBcIm1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsXCIsXG4gICAgXCJtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWxcIixcbiAgICBcIm1hbmFfaHdjX3NlbmRfcmVxdWVzdFwiLFxuICAgIFwibWFuYV9nZF9wcm9jZXNzX2VxZVwiLFxuICAgIFwibWFuYV9nZF9kZXN0cm95X2NxXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIsIGluY2x1ZGluZyBhZGRpbmcgUkNVIHByb3RlY3Rpb24gZm9yIHRoZSBDUSB0YWJsZSwgaGFuZGxpbmcgSFdDIHRpbWVvdXRzLCBhbmQgYWRkaW5nIHJlZmNvdW50cyBmb3IgY2FsbGVyIGNvbnRleHRzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBsb2dpYyBvZiB0aGUgZHJpdmVyIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdhN2Y2NzNjNWE0OTAwNTQwNWQ1NWZjMjU0MGYyNDJkM2I4OWNkOTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyMiAxNzo1MjoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL2NxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9jcS5jXG5pbmRleCBmMjU0Nzk4OWY0MjI5MC4uMmJmNGJlMjFjZWRlNzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9jcS5jXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9jcS5jXG5AQCAtMTMxLDEyICsxMzEsMjAgQEAgc3RhdGljIHZvaWQgbWFuYV9pYl9jcV9oYW5kbGVyKHZvaWQgKmN0eCwgc3RydWN0IGdkbWFfcXVldWUgKmdkbWFfY3EpXG4gaW50IG1hbmFfaWJfaW5zdGFsbF9jcV9jYihzdHJ1Y3QgbWFuYV9pYl9kZXYgKm1kZXYsIHN0cnVjdCBtYW5hX2liX2NxICpjcSlcbiB7XG4gXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IG1kZXZfdG9fZ2MobWRldik7XG4rXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSBfX3JjdSAqKmNxX3RhYmxlO1xuIFx0c3RydWN0IGdkbWFfcXVldWUgKmdkbWFfY3E7XG4gXG4tXHRpZiAoY3EtXHUwMDNlcXVldWUuaWQgXHUwMDNlPSBnYy1cdTAwM2VtYXhfbnVtX2NxcylcbitcdC8qIE5vIHJjdV9yZWFkX2xvY2soKTogaW5zdGFsbC9yZW1vdmUgcnVuIHdpdGhpbiB0aGUgSUIgZGV2aWNlXG4rXHQgKiBsaWZldGltZSwgd2hpY2ggbWFuYV9yZG1hX3JlbW92ZSgpIChpYl91bnJlZ2lzdGVyX2RldmljZSkgZHJhaW5zXG4rXHQgKiBiZWZvcmUgdGhlIGJhc2UgY3FfdGFibGUgY2FuIGJlIGZyZWVkLiAgU2VlIGdkbWFfY29udGV4dDo6Y3FfdGFibGVcbitcdCAqIGluIGdkbWEuaCBmb3Igd2h5IFwidHJ1ZVwiIGlzIHNvdW5kLlxuK1x0ICovXG4rXHRjcV90YWJsZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2MtXHUwMDNlY3FfdGFibGUsIHRydWUpO1xuK1x0aWYgKCFjcV90YWJsZSB8fCBjcS1cdTAwM2VxdWV1ZS5pZCBcdTAwM2U9IGdjLVx1MDAzZW1heF9udW1fY3FzKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdC8qIENyZWF0ZSBDUSB0YWJsZSBlbnRyeSwgc2hhcmluZyBhIENRIGJldHdlZW4gV1FzIGlzIG5vdCBzdXBwb3J0ZWQgKi9cbi1cdGlmIChnYy1cdTAwM2VjcV90YWJsZVtjcS1cdTAwM2VxdWV1ZS5pZF0pXG4rXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNxX3RhYmxlW2NxLVx1MDAzZXF1ZXVlLmlkXSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0aWYgKGNxLVx1MDAzZXF1ZXVlLmttZW0pXG4gXHRcdGdkbWFfY3EgPSBjcS1cdTAwM2VxdWV1ZS5rbWVtO1xuQEAgLTE0OSwyMyArMTU3LDQ5IEBAIGludCBtYW5hX2liX2luc3RhbGxfY3FfY2Ioc3RydWN0IG1hbmFfaWJfZGV2ICptZGV2LCBzdHJ1Y3QgbWFuYV9pYl9jcSAqY3EpXG4gXHRnZG1hX2NxLVx1MDAzZXR5cGUgPSBHRE1BX0NRO1xuIFx0Z2RtYV9jcS1cdTAwM2VjcS5jYWxsYmFjayA9IG1hbmFfaWJfY3FfaGFuZGxlcjtcbiBcdGdkbWFfY3EtXHUwMDNlaWQgPSBjcS1cdTAwM2VxdWV1ZS5pZDtcbi1cdGdjLVx1MDAzZWNxX3RhYmxlW2NxLVx1MDAzZXF1ZXVlLmlkXSA9IGdkbWFfY3E7XG4rXHRyY3VfYXNzaWduX3BvaW50ZXIoY3FfdGFibGVbY3EtXHUwMDNlcXVldWUuaWRdLCBnZG1hX2NxKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiB2b2lkIG1hbmFfaWJfcmVtb3ZlX2NxX2NiKHN0cnVjdCBtYW5hX2liX2RldiAqbWRldiwgc3RydWN0IG1hbmFfaWJfY3EgKmNxKVxuIHtcbiBcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gbWRldl90b19nYyhtZGV2KTtcbitcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqY3FfdGFibGU7XG4rXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSAqZ2RtYV9jcTtcbiBcbi1cdGlmIChjcS1cdTAwM2VxdWV1ZS5pZCBcdTAwM2U9IGdjLVx1MDAzZW1heF9udW1fY3FzIHx8IGNxLVx1MDAzZXF1ZXVlLmlkID09IElOVkFMSURfUVVFVUVfSUQpXG4rXHRpZiAoY3EtXHUwMDNlcXVldWUuaWQgPT0gSU5WQUxJRF9RVUVVRV9JRClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKGNxLVx1MDAzZXF1ZXVlLmttZW0pXG4gXHQvKiBUaGVuIGl0IHdpbGwgYmUgY2xlYW5lZCBhbmQgcmVtb3ZlZCBieSB0aGUgbWFuYSAqL1xuIFx0XHRyZXR1cm47XG4gXG4tXHRrZnJlZShnYy1cdTAwM2VjcV90YWJsZVtjcS1cdTAwM2VxdWV1ZS5pZF0pO1xuLVx0Z2MtXHUwMDNlY3FfdGFibGVbY3EtXHUwMDNlcXVldWUuaWRdID0gTlVMTDtcbitcdC8qIE5vIHJjdV9yZWFkX2xvY2soKTogbGlrZSBtYW5hX2liX2luc3RhbGxfY3FfY2IoKSwgdGhpcyBydW5zIHdpdGhpblxuK1x0ICogdGhlIElCIGRldmljZSBsaWZldGltZSB0aGF0IG1hbmFfcmRtYV9yZW1vdmUoKSBkcmFpbnMgYmVmb3JlIHRoZVxuK1x0ICogYmFzZSBjcV90YWJsZSBjYW4gYmUgZnJlZWQuICBTZWUgZ2RtYV9jb250ZXh0OjpjcV90YWJsZSBpbiBnZG1hLmguXG4rXHQgKi9cbitcdGNxX3RhYmxlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnYy1cdTAwM2VjcV90YWJsZSwgdHJ1ZSk7XG4rXHRpZiAoIWNxX3RhYmxlIHx8IGNxLVx1MDAzZXF1ZXVlLmlkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMpXG4rXHRcdHJldHVybjtcbitcdC8qIFJlbW92ZXJzIGZvciBhIGdpdmVuIENRIGFyZSBzZXJpYWxpemVkIGJ5IHRoZSBJQiBjb3JlLCBzbyB0aGUgc2xvdFxuK1x0ICogaXMgcmVhZCBhbmQgY2xlYXJlZCB3aXRob3V0IHJjdV9yZWFkX2xvY2soKSBvciBhdG9taWNpdHk6IGEgQ1EgaXNcbitcdCAqIG5ldmVyIHRvcm4gZG93biB3aGlsZSBhIGxpdmUgUVAgcmVmZXJlbmNlcyBpdCAoY3EtXHUwMDNldXNlY250KSwgbm9yXG4rXHQgKiB3aGlsZSB0aGUgUVAtY3JlYXRlIHRoYXQgaW5zdGFsbGVkIHRoZSBlbnRyeSBpcyBzdGlsbCBydW5uaW5nICh0aGF0XG4rXHQgKiBjcmVhdGUgaG9sZHMgYSByZWZlcmVuY2Ugb24gdGhlIENRIHVvYmplY3QgYWNyb3NzIGl0cyBlcnJvciBwYXRoLFxuK1x0ICogYmVmb3JlIHVzZWNudCBpcyB0YWtlbikuICBBbnkgZG91YmxlLXJlbW92ZSBpcyB0aGVyZWZvcmUgc2VxdWVudGlhbFxuK1x0ICogLS0gdGhlIGxhdGVyIGNhbGxlciBzZWVzIHRoZSBOVUxMIHN0b3JlZCBiZWxvdyBhbmQgcmV0dXJucy5cbitcdCAqL1xuK1x0Z2RtYV9jcSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3FfdGFibGVbY3EtXHUwMDNlcXVldWUuaWRdLCB0cnVlKTtcbitcdGlmICghZ2RtYV9jcSlcbitcdFx0cmV0dXJuOyAgLyogYWxyZWFkeSByZW1vdmVkIGJ5IGEgcHJpb3IgdGVhcmRvd24gcGF0aCAqL1xuK1xuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKGNxX3RhYmxlW2NxLVx1MDAzZXF1ZXVlLmlkXSwgTlVMTCk7XG4rXG4rXHQvKiBXYWl0IGZvciBpbi1mbGlnaHQgRVEgaGFuZGxlcnMgdGhhdCBtYXkgaGF2ZSBsb2FkZWQgdGhlIG9sZFxuK1x0ICogcG9pbnRlciB2aWEgcmN1X2RlcmVmZXJlbmNlKCkgdG8gZmluaXNoIGJlZm9yZSBmcmVlaW5nLlxuK1x0ICovXG4rXHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdGtmcmVlKGdkbWFfY3EpO1xuIH1cbiBcbiBpbnQgbWFuYV9pYl9hcm1fY3Eoc3RydWN0IGliX2NxICppYmNxLCBlbnVtIGliX2NxX25vdGlmeV9mbGFncyBmbGFncylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXG5pbmRleCBhMzhkNGJiNzQ2MjFmOS4uMTc3MTFlZTM3YzhiZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcbkBAIC0xNjEsNiArMTYxLDggQEAgc3RhdGljIGludCBtYW5hX2dkX2luaXRfcmVnaXN0ZXJzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIGJvb2wgbWFuYV9uZWVkX2xvZyhzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgaW50IGVycilcbiB7XG4gXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XG4rXHRib29sIG5lZWRfbG9nID0gdHJ1ZTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRpZiAoZXJyICE9IC1FVElNRURPVVQpXG4gXHRcdHJldHVybiB0cnVlO1xuQEAgLTE2OCwxMSArMTcwLDEzIEBAIGJvb2wgbWFuYV9uZWVkX2xvZyhzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgaW50IGVycilcbiBcdGlmICghZ2MpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiBcdGh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiBcdGlmIChod2MgXHUwMDI2XHUwMDI2IGh3Yy1cdTAwM2Vod2NfdGltZW91dCA9PSAwKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdG5lZWRfbG9nID0gZmFsc2U7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4gXG4tXHRyZXR1cm4gdHJ1ZTtcbitcdHJldHVybiBuZWVkX2xvZztcbiB9XG4gXG4gc3RhdGljIGludCBtYW5hX2dkX3F1ZXJ5X21heF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5AQCAtMzY3LDkgKzM3MSwyNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfZGV0ZWN0X2RldmljZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gaW50IG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MzIgcmVxX2xlbiwgY29uc3Qgdm9pZCAqcmVxLFxuIFx0XHRcdCB1MzIgcmVzcF9sZW4sIHZvaWQgKnJlc3ApXG4ge1xuLVx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjID0gZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xuK1x0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdGludCBlcnI7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuK1x0aHdjID0gZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xuK1x0aWYgKCFod2MpIHtcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcdGh3Yy1cdTAwM2VhY3RpdmVfc2VuZGVycysrO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuK1xuK1x0ZXJyID0gbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KGh3YywgcmVxX2xlbiwgcmVxLCByZXNwX2xlbiwgcmVzcCk7XG4gXG4tXHRyZXR1cm4gbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KGh3YywgcmVxX2xlbiwgcmVxLCByZXNwX2xlbiwgcmVzcCk7XG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuK1x0aWYgKC0taHdjLVx1MDAzZWFjdGl2ZV9zZW5kZXJzID09IDApXG4rXHRcdHdha2VfdXAoXHUwMDI2Z2MtXHUwMDNlaHdjX2RyYWluX3dhaXRxKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbitcbitcdHJldHVybiBlcnI7XG4gfVxuIEVYUE9SVF9TWU1CT0xfTlMobWFuYV9nZF9zZW5kX3JlcXVlc3QsIFwiTkVUX01BTkFcIik7XG4gXG5AQCAtNjIyLDYgKzY0NCw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFnYykge1xuQEAgLTYzMSwxNCArNjU0LDE3IEBAIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiBcdGh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiBcdGlmICghaHdjKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiBcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCJNQU5BIHNlcnZpY2U6IG5vIEhXQ1xcblwiKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4gXHQvKiBIV0MgaXMgbm90IHJlc3BvbmRpbmcgaW4gdGhpcyBjYXNlLCBzbyBkb24ndCB3YWl0ICovXG4gXHRod2MtXHUwMDNlaHdjX3RpbWVvdXQgPSAwO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuIFxuIFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwiTUFOQSByZXNldCBjeWNsZSBzdGFydFxcblwiKTtcbiBcbkBAIC03NjEsNiArNzg3LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9wcm9jZXNzX2VxZShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqZXEpXG4gXHR1bmlvbiBnZG1hX2VxZV9pbmZvIGVxZV9pbmZvO1xuIFx0ZW51bSBnZG1hX2VxZV90eXBlIHR5cGU7XG4gXHRzdHJ1Y3QgZ2RtYV9ldmVudCBldmVudDtcbitcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqY3FfdGFibGU7XG4gXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3E7XG4gXHRzdHJ1Y3QgZ2RtYV9lcWUgKmVxZTtcbiBcdHUzMiBjcV9pZDtcbkBAIC03NzIsMTAgKzc5OSwxMSBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3Byb2Nlc3NfZXFlKHN0cnVjdCBnZG1hX3F1ZXVlICplcSlcbiBcdHN3aXRjaCAodHlwZSkge1xuIFx0Y2FzZSBHRE1BX0VRRV9DT01QTEVUSU9OOlxuIFx0XHRjcV9pZCA9IGVxZS1cdTAwM2VkZXRhaWxzWzBdIFx1MDAyNiAweEZGRkZGRjtcbi1cdFx0aWYgKFdBUk5fT05fT05DRShjcV9pZCBcdTAwM2U9IGdjLVx1MDAzZW1heF9udW1fY3FzKSlcbitcdFx0Y3FfdGFibGUgPSByY3VfZGVyZWZlcmVuY2UoZ2MtXHUwMDNlY3FfdGFibGUpO1xuK1x0XHRpZiAoV0FSTl9PTl9PTkNFKGNxX2lkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMgfHwgIWNxX3RhYmxlKSlcbiBcdFx0XHRicmVhaztcbiBcbi1cdFx0Y3EgPSBnYy1cdTAwM2VjcV90YWJsZVtjcV9pZF07XG4rXHRcdGNxID0gcmN1X2RlcmVmZXJlbmNlKGNxX3RhYmxlW2NxX2lkXSk7XG4gXHRcdGlmIChXQVJOX09OX09OQ0UoIWNxIHx8IGNxLVx1MDAzZXR5cGUgIT0gR0RNQV9DUSB8fCBjcS1cdTAwM2VpZCAhPSBjcV9pZCkpXG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtMTA4MiwxNSArMTExMCwyOCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX2NyZWF0ZV9jcShjb25zdCBzdHJ1Y3QgZ2RtYV9xdWV1ZV9zcGVjICpzcGVjLFxuIHN0YXRpYyB2b2lkIG1hbmFfZ2RfZGVzdHJveV9jcShzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyxcbiBcdFx0XHQgICAgICAgc3RydWN0IGdkbWFfcXVldWUgKnF1ZXVlKVxuIHtcbitcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqY3FfdGFibGU7XG4gXHR1MzIgaWQgPSBxdWV1ZS1cdTAwM2VpZDtcbiBcbi1cdGlmIChpZCBcdTAwM2U9IGdjLVx1MDAzZW1heF9udW1fY3FzKVxuK1x0LyogTm8gcmN1X3JlYWRfbG9jaygpIGhlcmU6IG1hbmFfZ2RfZGVzdHJveV9jcSgpIHJ1bnMgb25seSBvbiB0aGVcbitcdCAqIENRLWRlc3Ryb3kvdGVhcmRvd24gcGF0aCwgd2hlcmUgdGhlIGJhc2UgY3FfdGFibGUgaXMgc3RhYmxlLiAgU2VlXG4rXHQgKiB0aGUgbGlmZWN5Y2xlIG5vdGUgb24gZ2RtYV9jb250ZXh0OjpjcV90YWJsZSBpbiBnZG1hLmggZm9yIHdoeSB0aGVcbitcdCAqIFwidHJ1ZVwiIHByZWRpY2F0ZSBpcyBzb3VuZC5cbitcdCAqL1xuK1x0Y3FfdGFibGUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGdjLVx1MDAzZWNxX3RhYmxlLCB0cnVlKTtcbitcdGlmICghY3FfdGFibGUgfHwgaWQgXHUwMDNlPSBnYy1cdTAwM2VtYXhfbnVtX2NxcylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKCFnYy1cdTAwM2VjcV90YWJsZVtpZF0pXG4rXHRpZiAoIXJjdV9hY2Nlc3NfcG9pbnRlcihjcV90YWJsZVtpZF0pKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRnYy1cdTAwM2VjcV90YWJsZVtpZF0gPSBOVUxMO1xuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKGNxX3RhYmxlW2lkXSwgTlVMTCk7XG4rXG4rXHQvKiBXYWl0IGZvciBpbi1mbGlnaHQgRVEgaGFuZGxlcnMgdGhhdCBtYXkgaGF2ZSBsb2FkZWQgdGhlIG9sZFxuK1x0ICogcG9pbnRlciB2aWEgcmN1X2RlcmVmZXJlbmNlKCkgdG8gZmluaXNoIGJlZm9yZSB0aGUgY2FsbGVyXG4rXHQgKiBmcmVlcyB0aGUgQ1EgbWVtb3J5LlxuK1x0ICovXG4rXHRzeW5jaHJvbml6ZV9yY3UoKTtcbiB9XG4gXG4gaW50IG1hbmFfZ2RfY3JlYXRlX2h3Y19xdWV1ZShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLFxuQEAgLTExODUsNiArMTIyNiwxNiBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfY3JlYXRlX2RtYV9yZWdpb24oc3RydWN0IGdkbWFfZGV2ICpnZCxcbiBcdGlmICghTUFOQV9QQUdFX0FMSUdORUQoZ21pLVx1MDAzZXZpcnRfYWRkcikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0LyogTm8gUkNVIG5lZWRlZDogdGhpcyBydW5zIG9ubHkgb24gdGhlIGRhdGEtcGF0aCBxdWV1ZS1jcmVhdGlvblxuK1x0ICogcGF0aCAobWFuYV9nZF9jcmVhdGVfbWFuYV9lcS9tYW5hX2dkX2NyZWF0ZV9tYW5hX3dxX2NxLCBjYWxsZWRcbitcdCAqIGJ5IG1hbmFfZW4gdW5kZXIgUlROTCBhbmQgYnkgbWFuYV9pYiBSRE1BIHZlcmJzLCBvciBkdXJpbmdcbitcdCAqIGluaXQpLiAgRXZlcnkgdGVhcmRvd24gcGF0aCDigJQgbWFuYV9nZF9yZW1vdmUsIG1hbmFfZ2Rfc3VzcGVuZCxcbitcdCAqIGFuZCB0aGUgSFdDIHJlc2V0L3NlcnZpY2UgcGF0aCAod2hpY2ggZ29lcyB0aHJvdWdoXG4rXHQgKiBtYW5hX2dkX3N1c3BlbmQpIOKAlCBkcmFpbnMgdGhvc2UgY29uc3VtZXJzIHZpYSBtYW5hX3JkbWFfcmVtb3ZlKClcbitcdCAqICsgbWFuYV9yZW1vdmUoKSBiZWZvcmUgbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKCkgY2xlYXJzXG4rXHQgKiBnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGEsIHNvIG5vIGNvbmN1cnJlbnQgZGVzdHJveSBjYW4gcmFjZSB3aXRoXG4rXHQgKiB0aGlzIGRlcmVmZXJlbmNlLlxuK1x0ICovXG4gXHRod2MgPSBnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGE7XG4gXHRyZXFfbXNnX3NpemUgPSBzdHJ1Y3Rfc2l6ZShyZXEsIHBhZ2VfYWRkcl9saXN0LCBudW1fcGFnZSk7XG4gXHRpZiAocmVxX21zZ19zaXplIFx1MDAzZSBod2MtXHUwMDNlbWF4X3JlcV9tc2dfc2l6ZSlcbkBAIC0xMzc0LDcgKzE0MjUsMTcgQEAgaW50IG1hbmFfZ2RfdmVyaWZ5X3ZmX3ZlcnNpb24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XG4gXHRpbnQgZXJyO1xuIFxuK1x0LyogTm8gUkNVIG5lZWRlZDogdGhpcyBydW5zIG9ubHkgaW5zaWRlIG1hbmFfZ2Rfc2V0dXAsIG9uIHRoZVxuK1x0ICogcHJvYmUgYW5kIHJlc3VtZSBwYXRocy4gIFRoZSBQQ0kvUE0gY29yZSBob2xkcyBkZXZpY2VfbG9ja1xuK1x0ICogYWNyb3NzIC5wcm9iZS8ucmVzdW1lIGFuZCAucmVtb3ZlLy5zdXNwZW5kLCBzbyBzZXR1cCBjYW5ub3RcbitcdCAqIG92ZXJsYXAgdGVhcmRvd24gb2YgdGhlIHNhbWUgZGV2aWNlLiAgVGhlIEhXQyByZXNldC9zZXJ2aWNlXG4rXHQgKiBwYXRoIGlzIGFkZGl0aW9uYWxseSBzZXJpYWxpemVkIGJ5IEdDX0lOX1NFUlZJQ0UgYW5kIHJ1bnNcbitcdCAqIHN1c3BlbmQgKGRlc3Ryb3kpIHRoZW4gcmVzdW1lICh0aGlzKSBzZXF1ZW50aWFsbHkgaW4gb25lIHdvcmtcbitcdCAqIGl0ZW0uICBkcml2ZXJfZGF0YSB3YXMganVzdCBzZXQgYnkgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWxcbitcdCAqIGVhcmxpZXIgaW4gdGhpcyBzYW1lIHNldHVwIGNhbGwsIHNvIGl0IGlzIGxpdmUgaGVyZS5cbitcdCAqL1xuIFx0aHdjID0gZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xuK1xuIFx0bWFuYV9nZF9pbml0X3JlcV9oZHIoXHUwMDI2cmVxLmhkciwgR0RNQV9WRVJJRllfVkZfRFJJVkVSX1ZFUlNJT04sXG4gXHRcdFx0ICAgICBzaXplb2YocmVxKSwgc2l6ZW9mKHJlc3ApKTtcbiBcbkBAIC0yMzY0LDYgKzI0MjUsNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gXHRtdXRleF9pbml0KFx1MDAyNmdjLVx1MDAzZWVxX3Rlc3RfZXZlbnRfbXV0ZXgpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZnYy1cdTAwM2VnaWNfbXV0ZXgpO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2spO1xuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIGdjKTtcbiBcdGdjLVx1MDAzZWJhcjBfcGEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7XG4gXHRnYy1cdTAwM2ViYXIwX3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuY1xuaW5kZXggZTNjMjRkNTBkYWQwN2MuLjA0ODFkNDA0NDM0MjRmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmNcbkBAIC00LDI3ICs0LDU1IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hbmEvZ2RtYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hbmEvbWFuYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hbmEvaHdfY2hhbm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiBcbisvKiBBY3F1aXJlIGEgZnJlZSBtZXNzYWdlIHNsb3QgZnJvbSB0aGUgaW5mbGlnaHQgYml0bWFwLiAgUmV0dXJuc1xuKyAqIC1FTk9ERVYgaWYgdGhlIGNoYW5uZWwgaXMgdG9ybiBkb3duLCBvciAtRVRJTUVET1VUIGlmIGEgcHJpb3IgSFdDXG4rICogY29tbWFuZCBoYXMgdGltZWQgb3V0IChwcmVzZXJ2aW5nIHRoZSBlcnJvciBjb2RlIGNhbGxlcnMgZXhwZWN0KS5cbisgKi9cbiBzdGF0aWMgaW50IG1hbmFfaHdjX2dldF9tc2dfaW5kZXgoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgKm1zZ19pZClcbiB7XG4gXHRzdHJ1Y3QgZ2RtYV9yZXNvdXJjZSAqciA9IFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHUzMiBpbmRleDtcbiBcbi1cdGRvd24oXHUwMDI2aHdjLVx1MDAzZXNlbWEpO1xuK1x0Zm9yICg7Oykge1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZyLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbi1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnItXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRpZiAoIWh3Yy1cdTAwM2VjaGFubmVsX3VwIHx8IGh3Yy1cdTAwM2Vod2NfdGltZWRfb3V0KSB7XG4rXHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0XHRyZXR1cm4gaHdjLVx1MDAzZWNoYW5uZWxfdXAgPyAtRVRJTUVET1VUIDogLUVOT0RFVjtcbitcdFx0fVxuIFxuLVx0aW5kZXggPSBmaW5kX2ZpcnN0X3plcm9fYml0KGh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLm1hcCxcbi1cdFx0XHRcdCAgICBod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5zaXplKTtcbitcdFx0aW5kZXggPSBmaW5kX2ZpcnN0X3plcm9fYml0KHItXHUwMDNlbWFwLCByLVx1MDAzZXNpemUpO1xuK1x0XHRpZiAoaW5kZXggXHUwMDNjIHItXHUwMDNlc2l6ZSkge1xuK1x0XHRcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xuK1xuK1x0XHRcdGJpdG1hcF9zZXQoci1cdTAwM2VtYXAsIGluZGV4LCAxKTtcbitcdFx0XHRjdHggPSBcdTAwMjZod2MtXHUwMDNlY2FsbGVyX2N0eFtpbmRleF07XG4rXHRcdFx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2Y3R4LVx1MDAzZWNvbXBfZXZlbnQpO1xuK1x0XHRcdHJlZmNvdW50X3NldChcdTAwMjZjdHgtXHUwMDNlcmVmY250LCAxKTtcbitcdFx0XHRjdHgtXHUwMDNlbXNnX2lkID0gaW5kZXg7XG4rXHRcdFx0Y3R4LVx1MDAzZWVycm9yID0gLUVJTlBST0dSRVNTO1xuK1x0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ci1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbi1cdGJpdG1hcF9zZXQoaHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwLCBpbmRleCwgMSk7XG4rXHRcdHdhaXRfZXZlbnQoaHdjLVx1MDAzZW1zZ193YWl0cSxcbitcdFx0XHQgICAhaHdjLVx1MDAzZWNoYW5uZWxfdXAgfHxcbitcdFx0XHQgICBod2MtXHUwMDNlaHdjX3RpbWVkX291dCB8fFxuK1x0XHRcdCAgICFiaXRtYXBfZnVsbChyLVx1MDAzZW1hcCwgci1cdTAwM2VzaXplKSk7XG4gXG4tXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnItXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRpZiAoIWh3Yy1cdTAwM2VjaGFubmVsX3VwKVxuK1x0XHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0Km1zZ19pZCA9IGluZGV4O1xuK1x0XHRpZiAoaHdjLVx1MDAzZWh3Y190aW1lZF9vdXQpXG4rXHRcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4rXHR9XG4gXG4rXHQqbXNnX2lkID0gaW5kZXg7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMzQsMTAgKzYyLDE3IEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX3B1dF9tc2dfaW5kZXgoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgbXNnX2lkKVxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnItXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0Yml0bWFwX2NsZWFyKGh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLm1hcCwgbXNnX2lkLCAxKTtcbitcdGJpdG1hcF9jbGVhcihyLVx1MDAzZW1hcCwgbXNnX2lkLCAxKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ci1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHR1cChcdTAwMjZod2MtXHUwMDNlc2VtYSk7XG4rXHR3YWtlX3VwKFx1MDAyNmh3Yy1cdTAwM2Vtc2dfd2FpdHEpO1xuK31cbitcbitzdGF0aWMgdm9pZCBod2NfY3R4X3B1dChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsXG4rXHRcdFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHgpXG4re1xuK1x0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZjdHgtXHUwMDNlcmVmY250KSlcbitcdFx0bWFuYV9od2NfcHV0X21zZ19pbmRleChod2MsIGN0eC1cdTAwM2Vtc2dfaWQpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1hbmFfaHdjX3ZlcmlmeV9yZXNwX21zZyhjb25zdCBzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmNhbGxlcl9jdHgsXG5AQCAtODMsNiArMTE4LDE3IEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX2hhbmRsZV9yZXNwKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlc3BfbGVuLFxuIFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHg7XG4gXHRpbnQgZXJyO1xuIFxuK1x0LyogVmFsaWRhdGUgbXNnX2lkIGlzIGluIHJhbmdlIGJlZm9yZSB1c2luZyBpdCB0byBpbmRleCBiaXRtYXBcbitcdCAqIGFuZCBjYWxsZXJfY3R4IGFycmF5LiAgTWFsaWNpb3VzIGZpcm13YXJlIGNvdWxkIHNlbmRcbitcdCAqIG91dC1vZi1yYW5nZSBtc2dfaWQgY2F1c2luZyBvdXQtb2YtYm91bmRzIGFjY2Vzcy5cbitcdCAqL1xuK1x0aWYgKG1zZ19pZCBcdTAwM2U9IGh3Yy1cdTAwM2VudW1faW5mbGlnaHRfbXNnKSB7XG4rXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJod2Nfcng6IG1zZ19pZCAldSBcdTAwM2U9IG1heCAldVxcblwiLFxuK1x0XHRcdG1zZ19pZCwgaHdjLVx1MDAzZW51bV9pbmZsaWdodF9tc2cpO1xuK1x0XHRtYW5hX2h3Y19wb3N0X3J4X3dxZShod2MtXHUwMDNlcnhxLCByeF9yZXEpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRpZiAoIXRlc3RfYml0KG1zZ19pZCwgaHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwKSkge1xuIFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiaHdjX3J4OiBpbnZhbGlkIG1zZ19pZCA9ICV1XFxuXCIsIG1zZ19pZCk7XG4gXHRcdG1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Yy1cdTAwM2VyeHEsIHJ4X3JlcSk7XG5AQCAtOTAsMjIgKzEzNiw0NCBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19oYW5kbGVfcmVzcChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXNwX2xlbixcbiBcdH1cbiBcbiBcdGN0eCA9IGh3Yy1cdTAwM2VjYWxsZXJfY3R4ICsgbXNnX2lkO1xuLVx0ZXJyID0gbWFuYV9od2NfdmVyaWZ5X3Jlc3BfbXNnKGN0eCwgcmVzcF9tc2csIHJlc3BfbGVuKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gb3V0O1xuIFxuLVx0Y3R4LVx1MDAzZXN0YXR1c19jb2RlID0gcmVzcF9tc2ctXHUwMDNlc3RhdHVzO1xuK1x0LyogUmVqZWN0IHJlc3BvbnNlcyBsYXJnZXIgdGhhbiB0aGUgUlggRE1BIGJ1ZmZlciDigJQgdGhlIFNHRVxuK1x0ICogbGltaXRzIHdoYXQgaGFyZHdhcmUgY2FuIERNQSwgc28gYW4gb3ZlcnNpemVkIHJlc3BfbGVuXG4rXHQgKiBpbmRpY2F0ZXMgYSBmaXJtd2FyZSBidWcuICBGYWlsIHJhdGhlciB0aGFuIHNpbGVudGx5XG4rXHQgKiB0cnVuY2F0aW5nLlxuK1x0ICovXG4rXHRpZiAocmVzcF9sZW4gXHUwMDNlIHJ4X3JlcS1cdTAwM2VidWZfbGVuKSB7XG4rXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJIV0MgUlg6IHJlc3BfbGVuICV1IFx1MDAzZSBidWZfbGVuICV1XFxuXCIsXG4rXHRcdFx0cmVzcF9sZW4sIHJ4X3JlcS1cdTAwM2VidWZfbGVuKTtcbitcdFx0cmVzcF9sZW4gPSAwO1xuK1x0fVxuIFxuLVx0bWVtY3B5KGN0eC1cdTAwM2VvdXRwdXRfYnVmLCByZXNwX21zZywgcmVzcF9sZW4pO1xuLW91dDpcbi1cdGN0eC1cdTAwM2VlcnJvciA9IGVycjtcbitcdHNwaW5fbG9jayhcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4rXG4rXHRlcnIgPSBtYW5hX2h3Y192ZXJpZnlfcmVzcF9tc2coY3R4LCByZXNwX21zZywgcmVzcF9sZW4pO1xuIFxuLVx0LyogTXVzdCBwb3N0IHJ4IHdxZSBiZWZvcmUgY29tcGxldGUoKSwgb3RoZXJ3aXNlIHRoZSBuZXh0IHJ4IG1heVxuLVx0ICogaGl0IG5vX3dxZSBlcnJvci5cbitcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlb3V0cHV0X2J1Zikge1xuK1x0XHRjdHgtXHUwMDNlc3RhdHVzX2NvZGUgPSByZXNwX21zZy1cdTAwM2VzdGF0dXM7XG4rXHRcdG1lbWNweShjdHgtXHUwMDNlb3V0cHV0X2J1ZiwgcmVzcF9tc2csIHJlc3BfbGVuKTtcbitcdFx0Y3R4LVx1MDAzZWVycm9yID0gMDtcbitcdH0gZWxzZSBpZiAoY3R4LVx1MDAzZW91dHB1dF9idWYpIHtcbitcdFx0LyogT25seSBvdmVyd3JpdGUgZXJyb3IgaWYgdGhlIHNlbmRlciBoYXNuJ3QgdGltZWQgb3V0XG4rXHRcdCAqIG9yIGJlZW4gZm9yY2UtY29tcGxldGVkIGJ5IGRlc3Ryb3kuICBXaGVuIG91dHB1dF9idWZcbitcdFx0ICogaXMgTlVMTCwgYSB0ZXJtaW5hbCBlcnJvciAoLUVOT0RFViBvciB0aW1lb3V0KSBoYXNcbitcdFx0ICogYWxyZWFkeSBiZWVuIHNldCDigJQgcHJlc2VydmUgaXQgc28gdGhlIHNlbmRlciBkb2Vzbid0XG4rXHRcdCAqIHNlZSBhIHNwdXJpb3VzIHN1Y2Nlc3MuXG4rXHRcdCAqL1xuK1x0XHRjdHgtXHUwMDNlZXJyb3IgPSBlcnI7XG4rXHR9XG4rXG4rXHQvKiBQb3N0IFJYIFdRRSBiZWZvcmUgY29tcGxldGluZyDigJQgdGhlIG5leHQgcmVzcG9uc2UgbWF5IGFycml2ZVxuK1x0ICogaW1tZWRpYXRlbHkgYW5kIG5lZWRzIGEgcG9zdGVkIGJ1ZmZlci5cbiBcdCAqL1xuIFx0bWFuYV9od2NfcG9zdF9yeF93cWUoaHdjLVx1MDAzZXJ4cSwgcnhfcmVxKTtcbi1cbiBcdGNvbXBsZXRlKFx1MDAyNmN0eC1cdTAwM2Vjb21wX2V2ZW50KTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbitcbitcdGh3Y19jdHhfcHV0KGh3YywgY3R4KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKHZvaWQgKmN0eCwgc3RydWN0IGdkbWFfcXVldWUgKnFfc2VsZixcbkBAIC0xNDYsNyArMjE0LDEyIEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX2luaXRfZXZlbnRfaGFuZGxlcih2b2lkICpjdHgsIHN0cnVjdCBnZG1hX3F1ZXVlICpxX3NlbGYsXG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdGNhc2UgSFdDX0lOSVRfREFUQV9RVUVVRV9ERVBUSDpcbi1cdFx0XHRod2MtXHUwMDNlaHdjX2luaXRfcV9kZXB0aF9tYXggPSAodTE2KXZhbDtcbitcdFx0XHQvKiBIV0NfSU5JVF9EQVRBX1FVRVVFX0RFUFRIIGlzIGEgMjQtYml0IGZpZWxkLiAgS2VlcFxuK1x0XHRcdCAqIHRoZSBmdWxsIGRldmljZS1yZXBvcnRlZCB2YWx1ZSBoZXJlOyBpdCBpcyBjbGFtcGVkXG4rXHRcdFx0ICogYW5kIHZhbGlkYXRlZCBpbiBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbCgpIHJhdGhlclxuK1x0XHRcdCAqIHRoYW4gc2lsZW50bHkgdHJ1bmNhdGVkIHRvIHUxNi5cbitcdFx0XHQgKi9cbitcdFx0XHRod2MtXHUwMDNlaHdjX2luaXRfcV9kZXB0aF9tYXggPSB2YWw7XG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdGNhc2UgSFdDX0lOSVRfREFUQV9NQVhfUkVRVUVTVDpcbkBAIC0yNjEsMTkgKzMzNCw2OSBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19yeF9ldmVudF9oYW5kbGVyKHZvaWQgKmN0eCwgdTMyIGdkbWFfcnhxX2lkLFxuIFxuIFx0c2dlID0gKHN0cnVjdCBnZG1hX3NnZSAqKSh3cWUgKyA4ICsgZG1hX29vYi1cdTAwM2VpbmxpbmVfb29iX3NpemVfZGl2NCAqIDQpO1xuIFxuLVx0LyogU2VsZWN0IHRoZSBSWCB3b3JrIHJlcXVlc3QgZm9yIHZpcnR1YWwgYWRkcmVzcyBhbmQgZm9yIHJlcG9zdGluZy4gKi9cbi1cdHJxX2Jhc2VfYWRkciA9IGh3Y19yeHEtXHUwMDNlbXNnX2J1Zi1cdTAwM2VtZW1faW5mby5kbWFfaGFuZGxlO1xuLVx0cnhfcmVxX2lkeCA9IChzZ2UtXHUwMDNlYWRkcmVzcyAtIHJxX2Jhc2VfYWRkcikgLyBod2MtXHUwMDNlbWF4X3JlcV9tc2dfc2l6ZTtcbitcdC8qIGlubGluZV9vb2Jfc2l6ZV9kaXY0IGlzIHJlYWQgZnJvbSB0aGUgV1FFIGluIGRldmljZS1hY2Nlc3NpYmxlIFJRXG4rXHQgKiBtZW1vcnksIHNvIGEgbWFsaWNpb3VzIGhvc3QgaW4gYSBDVk0gKG9yIGJ1Z2d5IGZpcm13YXJlKSBjb3VsZCBzZXRcbitcdCAqIGl0IHRvIHB1c2ggdGhlIFNHRSBwYXN0IHRoZSBSUSBidWZmZXIuICBCb3VuZHMtY2hlY2sgdGhlIFNHRSBpdFxuK1x0ICogbG9jYXRlcyBiZWZvcmUgZGVyZWZlcmVuY2luZyBzZ2UtXHUwMDNlYWRkcmVzcyBiZWxvdy4gIEEgdmFsaWRseSBwb3N0ZWRcbitcdCAqIFdRRSBrZWVwcyB0aGUgU0dFIGluc2lkZSB0aGUgcmluZyAod29yc3QgY2FzZSBlbmRzIGV4YWN0bHkgYXQgdGhlXG4rXHQgKiBidWZmZXIgYm91bmRhcnkpOyByZWplY3QgYW55dGhpbmcgdGhhdCB3b3VsZCByZWFkIHBhc3QgaXQuICBUaGVcbitcdCAqIHNsb3QgY2Fubm90IGJlIHRydXN0ZWQgaGVyZSwgc28gbGVhayB0aGlzIFJYIFdRRSByYXRoZXIgdGhhbiByZXBvc3RcbitcdCAqIHRoZSB3cm9uZyBvbmUgLS0gYXMgaW4gdGhlIFNHRS1hZGRyZXNzIG1pc21hdGNoIHBhdGggYmVsb3cuXG4rXHQgKi9cbitcdGlmICgodTggKikoc2dlICsgMSkgXHUwMDNlICh1OCAqKXJxLVx1MDAzZXF1ZXVlX21lbV9wdHIgKyBycS1cdTAwM2VxdWV1ZV9zaXplKSB7XG4rXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJIV0MgUlg6IFNHRSBwYXN0IFJRIGJ1ZmZlciwgb29iX2RpdjQ9JXVcXG5cIixcbitcdFx0XHRkbWFfb29iLVx1MDAzZWlubGluZV9vb2Jfc2l6ZV9kaXY0KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFxuLVx0aWYgKHJ4X3JlcV9pZHggXHUwMDNlPSBod2NfcnhxLVx1MDAzZW1zZ19idWYtXHUwMDNlbnVtX3JlcXMpIHtcbi1cdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcIkhXQyBSWDogd3JvbmcgcnhfcmVxX2lkeD0lbGx1LCBudW1fcmVxcz0ldVxcblwiLFxuLVx0XHRcdHJ4X3JlcV9pZHgsIGh3Y19yeHEtXHUwMDNlbXNnX2J1Zi1cdTAwM2VudW1fcmVxcyk7XG4rXHQvKiBSZWNvdmVyIHRoZSBvcmlnaW5hdGluZyBSWCBzbG90IGZyb20gdGhlIFNHRSBhZGRyZXNzLiAgT2YgdGhlIHRocmVlXG4rXHQgKiB0ZXJtcyBoZXJlIG9ubHkgc2dlLVx1MDAzZWFkZHJlc3MgbGl2ZXMgaW4gZGV2aWNlLWFjY2Vzc2libGUgUlEgbWVtb3J5O1xuK1x0ICogcnFfYmFzZV9hZGRyIGFuZCBtYXhfcmVzcF9tc2dfc2l6ZSBhcmUgZHJpdmVyLXByaXZhdGUgY29uc3RhbnRzLiAgQW5cbitcdCAqIGluLXJhbmdlIGJ1dCB3cm9uZy91bmFsaWduZWQgU0dFIChjb3JydXB0ZWQgV1FFLCBvciBhIG1hbGljaW91cyBob3N0XG4rXHQgKiBpbiBhIENWTSkgd291bGQgb3RoZXJ3aXNlIHRydW5jYXRlIG9udG8gYSBuZWlnaGJvdXJpbmcgc2xvdCwgbGV0dGluZ1xuK1x0ICogdXMgcmVhZCBhIHN0YWxlIHJlc3BvbnNlIHRoYXQgY291bGQgY29tcGxldGUgdGhlIHdyb25nLCByZXVzZWRcbitcdCAqIGluLWZsaWdodCByZXF1ZXN0LiAgUmVxdWlyZSB0aGUgaW5kZXggdG8gYmUgaW4gcmFuZ2UgQU5EIHRoZSBhZGRyZXNzXG4rXHQgKiB0byBleGFjdGx5IG1hdGNoIHRoZSB2YWx1ZSB0aGUgZHJpdmVyIHBvc3RlZCBmb3IgdGhhdCBzbG90LlxuK1x0ICovXG4rXHRycV9iYXNlX2FkZHIgPSBod2NfcnhxLVx1MDAzZW1zZ19idWYtXHUwMDNlbWVtX2luZm8uZG1hX2hhbmRsZTtcbitcdHJ4X3JlcV9pZHggPSAoc2dlLVx1MDAzZWFkZHJlc3MgLSBycV9iYXNlX2FkZHIpIC8gaHdjLVx1MDAzZW1heF9yZXNwX21zZ19zaXplO1xuK1xuK1x0aWYgKHJ4X3JlcV9pZHggXHUwMDNlPSBod2NfcnhxLVx1MDAzZXF1ZXVlX2RlcHRoKSB7XG4rXHRcdC8qIENhbm5vdCB0cnVzdCB3aGljaCBXUUUgdGhpcyBpcywgc28gd2UgY2Fubm90IHNhZmVseSByZXBvc3RcbitcdFx0ICogaXQ7IGxlYWsgb25lIFJYIFdRRSBhbmQgYmFpbC4gIEFuIG91dC1vZi1yYW5nZSBpbmRleCBtZWFuc1xuK1x0XHQgKiBhIGNvcnJ1cHRlZCBTR0UgZnJvbSBoYXJkd2FyZSAob3IgaG9zdCB0YW1wZXJpbmcpLCBhblxuK1x0XHQgKiB1bnJlY292ZXJhYmxlIGRldmljZSBlcnJvci5cbitcdFx0ICovXG4rXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJIV0MgUlg6IFNHRSBpZHggJWxsdSBvdXQgb2YgcmFuZ2VcXG5cIixcbitcdFx0XHRyeF9yZXFfaWR4KTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0cnhfcmVxID0gXHUwMDI2aHdjX3J4cS1cdTAwM2Vtc2dfYnVmLVx1MDAzZXJlcXNbcnhfcmVxX2lkeF07XG4rXHRpZiAoc2dlLVx1MDAzZWFkZHJlc3MgIT0gKHU2NClyeF9yZXEtXHUwMDNlYnVmX3NnZV9hZGRyKSB7XG4rXHRcdC8qIEluLXJhbmdlIGluZGV4IGJ1dCB0aGUgYWRkcmVzcyBkb2VzIG5vdCBtYXRjaCB3aGF0IHRoZVxuK1x0XHQgKiBkcml2ZXIgcG9zdGVkIGZvciB0aGF0IHNsb3Q7IHRoZSBzYW1lIHVucmVjb3ZlcmFibGUgY2FzZSxcbitcdFx0ICogc28gbGVhayB0aGlzIFdRRSByYXRoZXIgdGhhbiByZXBvc3QgdGhlIHdyb25nIG9uZS5cbitcdFx0ICovXG4rXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJIV0MgUlg6IGludmFsaWQgU0dFIGFkZHJlc3MgJWxseCAoaWR4PSVsbHUpXFxuXCIsXG4rXHRcdFx0c2dlLVx1MDAzZWFkZHJlc3MsIHJ4X3JlcV9pZHgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRyZXNwID0gKHN0cnVjdCBnZG1hX3Jlc3BfaGRyICopcnhfcmVxLVx1MDAzZWJ1Zl92YTtcbiBcbitcdC8qIFZhbGlkYXRlIHJlc3BfbGVuIGNvdmVycyB0aGUgcmVzcG9uc2UgaGVhZGVyIGJlZm9yZSByZWFkaW5nXG4rXHQgKiBod2NfbXNnX2lkLiAgQSBzaG9ydCByZXNwb25zZSBsZWF2ZXMgc3RhbGUgZGF0YSBmcm9tIHRoZVxuK1x0ICogcHJldmlvdXMgYnVmZmVyIG9jY3VwYW50LCB3aGljaCBjb3VsZCBtYXRjaCBhIGxpdmUgc2xvdCBhbmRcbitcdCAqIGNvbXBsZXRlIHRoZSB3cm9uZyByZXF1ZXN0LlxuK1x0ICovXG4rXHRpZiAocnhfb29iLVx1MDAzZXR4X29vYl9kYXRhX3NpemUgXHUwMDNjIHNpemVvZigqcmVzcCkpIHtcbitcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcIkhXQyBSWDogc2hvcnQgcmVzcF9sZW49JXVcXG5cIixcbitcdFx0XHRyeF9vb2ItXHUwMDNldHhfb29iX2RhdGFfc2l6ZSk7XG4rXHRcdG1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Y19yeHEsIHJ4X3JlcSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdC8qIFJlYWQgbXNnX2lkIG9uY2UgZnJvbSBETUEgYnVmZmVyIHRvIHByZXZlbnQgVE9DVE9VOlxuIFx0ICogRE1BIG1lbW9yeSBpcyBzaGFyZWQvdW5lbmNyeXB0ZWQgaW4gQ1ZNcyAtIGhvc3QgY2FuXG4gXHQgKiBtb2RpZnkgaXQgYmV0d2VlbiByZWFkcy5cbkBAIC0yODEsNiArNDA0LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfcnhfZXZlbnRfaGFuZGxlcih2b2lkICpjdHgsIHUzMiBnZG1hX3J4cV9pZCxcbiBcdG1zZ19pZCA9IFJFQURfT05DRShyZXNwLVx1MDAzZXJlc3BvbnNlLmh3Y19tc2dfaWQpO1xuIFx0aWYgKG1zZ19pZCBcdTAwM2U9IGh3Yy1cdTAwM2VudW1faW5mbGlnaHRfbXNnKSB7XG4gXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJIV0MgUlg6IHdyb25nIG1zZ19pZD0ldVxcblwiLCBtc2dfaWQpO1xuK1x0XHRtYW5hX2h3Y19wb3N0X3J4X3dxZShod2NfcnhxLCByeF9yZXEpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtMzg0LDE0ICs1MDgsMjAgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfY29tcF9ldmVudCh2b2lkICpjdHgsIHN0cnVjdCBnZG1hX3F1ZXVlICpxX3NlbGYpXG4gXG4gc3RhdGljIHZvaWQgbWFuYV9od2NfZGVzdHJveV9jcShzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgc3RydWN0IGh3Y19jcSAqaHdjX2NxKVxuIHtcbi1cdGtmcmVlKGh3Y19jcS1cdTAwM2Vjb21wX2J1Zik7XG4tXG4gXHRpZiAoaHdjX2NxLVx1MDAzZWdkbWFfY3EpXG4gXHRcdG1hbmFfZ2RfZGVzdHJveV9xdWV1ZShnYywgaHdjX2NxLVx1MDAzZWdkbWFfY3EpO1xuIFxuK1x0LyogY29tcF9idWYgaXMgcmVhY2hlZCBvbmx5IGJ5IG1hbmFfaHdjX2NvbXBfZXZlbnQoKSwgd2hpY2ggdGhlXG4rXHQgKiBFUSBoYW5kbGVyIGludm9rZXMgdmlhIGNxX3RhYmxlW2lkXS4gIFRoZSBDUSBkZXN0cm95IGFib3ZlXG4rXHQgKiBhbHJlYWR5IGNsZWFyZWQgdGhhdCBzbG90IGFuZCByYW4gc3luY2hyb25pemVfcmN1KCksIHNvIG5vXG4rXHQgKiBoYW5kbGVyIGNhbiByZWFjaCBjb21wX2J1ZiBvbmNlIGl0IHJldHVybnMuICBEZXN0cm95aW5nIHRoZSBFUVxuK1x0ICogaGVyZSBhZGRpdGlvbmFsbHkgdGVhcnMgZG93biB0aGUgSVJRIChkZWZlbnNlIGluIGRlcHRoKSBiZWZvcmVcbitcdCAqIGNvbXBfYnVmIGFuZCBod2NfY3EgYXJlIGZyZWVkIGJlbG93LlxuK1x0ICovXG4gXHRpZiAoaHdjX2NxLVx1MDAzZWdkbWFfZXEpXG4gXHRcdG1hbmFfZ2RfZGVzdHJveV9xdWV1ZShnYywgaHdjX2NxLVx1MDAzZWdkbWFfZXEpO1xuIFxuK1x0a2ZyZWUoaHdjX2NxLVx1MDAzZWNvbXBfYnVmKTtcbiBcdGtmcmVlKGh3Y19jcSk7XG4gfVxuIFxuQEAgLTU2MCw2ICs2OTAsNyBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2NyZWF0ZV93cShzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsXG4gXHRod2Nfd3EtXHUwMDNlZ2RtYV93cSA9IHF1ZXVlO1xuIFx0aHdjX3dxLVx1MDAzZXF1ZXVlX2RlcHRoID0gcV9kZXB0aDtcbiBcdGh3Y193cS1cdTAwM2Vod2NfY3EgPSBod2NfY3E7XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZod2Nfd3EtXHUwMDNlbG9jayk7XG4gXG4gXHRlcnIgPSBtYW5hX2h3Y19hbGxvY19kbWFfYnVmKGh3YywgcV9kZXB0aCwgbWF4X21zZ19zaXplLFxuIFx0XHRcdFx0ICAgICBcdTAwMjZod2Nfd3EtXHUwMDNlbXNnX2J1Zik7XG5AQCAtNTc3LDcgKzcwOCw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfY3JlYXRlX3dxKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbWFuYV9od2NfcG9zdF90eF93cWUoY29uc3Qgc3RydWN0IGh3Y193cSAqaHdjX3R4cSxcbitzdGF0aWMgaW50IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKHN0cnVjdCBod2Nfd3EgKmh3Y190eHEsXG4gXHRcdFx0XHRzdHJ1Y3QgaHdjX3dvcmtfcmVxdWVzdCAqcmVxLFxuIFx0XHRcdFx0dTMyIGRlc3RfdmlydF9ycV9pZCwgdTMyIGRlc3RfdmlydF9yY3FfaWQsXG4gXHRcdFx0XHRib29sIGRlc3RfcGYpXG5AQCAtNjE2LDcgKzc0NywxMSBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKGNvbnN0IHN0cnVjdCBod2Nfd3EgKmh3Y190eHEsXG4gXHRyZXEtXHUwMDNld3FlX3JlcS5pbmxpbmVfb29iX2RhdGEgPSB0eF9vb2I7XG4gXHRyZXEtXHUwMDNld3FlX3JlcS5jbGllbnRfZGF0YV91bml0ID0gMDtcbiBcbitcdC8qIFNlcmlhbGl6ZSBXUUUgcG9zdGluZyDigJQgbXVsdGlwbGUgc2VuZGVycyBtYXkgY2FsbCBjb25jdXJyZW50bHkuICovXG4rXHRzcGluX2xvY2soXHUwMDI2aHdjX3R4cS1cdTAwM2Vsb2NrKTtcbiBcdGVyciA9IG1hbmFfZ2RfcG9zdF9hbmRfcmluZyhod2NfdHhxLVx1MDAzZWdkbWFfd3EsIFx1MDAyNnJlcS1cdTAwM2V3cWVfcmVxLCBOVUxMKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmh3Y190eHEtXHUwMDNlbG9jayk7XG4rXG4gXHRpZiAoZXJyKVxuIFx0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gcG9zdCBXUUUgb24gSFdDIFNROiAlZFxcblwiLCBlcnIpO1xuIFx0cmV0dXJuIGVycjtcbkBAIC02MjcsNyArNzYyLDcgQEAgc3RhdGljIGludCBtYW5hX2h3Y19pbml0X2luZmxpZ2h0X21zZyhzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsXG4ge1xuIFx0aW50IGVycjtcbiBcbi1cdHNlbWFfaW5pdChcdTAwMjZod2MtXHUwMDNlc2VtYSwgbnVtX21zZyk7XG4rXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmh3Yy1cdTAwM2Vtc2dfd2FpdHEpO1xuIFxuIFx0ZXJyID0gbWFuYV9nZF9hbGxvY19yZXNfbWFwKG51bV9tc2csIFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzKTtcbiBcdGlmIChlcnIpXG5AQCAtNjU3LDIzICs3OTIsNDAgQEAgc3RhdGljIGludCBtYW5hX2h3Y190ZXN0X2NoYW5uZWwoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCxcbiBcdGlmICghY3R4KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHFfZGVwdGg7ICsraSlcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHFfZGVwdGg7ICsraSkge1xuK1x0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZjdHhbaV0ubG9jayk7XG4gXHRcdGluaXRfY29tcGxldGlvbihcdTAwMjZjdHhbaV0uY29tcF9ldmVudCk7XG4rXHR9XG4gXG4gXHRod2MtXHUwMDNlY2FsbGVyX2N0eCA9IGN0eDtcbiBcbi1cdHJldHVybiBtYW5hX2dkX3Rlc3RfZXEoZ2MsIGh3Yy1cdTAwM2VjcS1cdTAwM2VnZG1hX2VxKTtcbitcdC8qIGNoYW5uZWxfdXAgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSB0ZXN0IEVRIHJlcXVlc3QsIGJlY2F1c2VcbitcdCAqIHRoZSByZXF1ZXN0IGdvZXMgdGhyb3VnaCBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KCkgd2hpY2hcbitcdCAqIGNoZWNrcyBjaGFubmVsX3VwLiAgY2FsbGVyX2N0eCBpcyBhbGxvY2F0ZWQgYWJvdmUsIHNvXG4rXHQgKiBjb25jdXJyZW50IGFjY2VzcyB0byBhIE5VTEwgY2FsbGVyX2N0eCBpcyBub3QgcG9zc2libGUuXG4rXHQgKi9cbitcdGh3Yy1cdTAwM2VjaGFubmVsX3VwID0gdHJ1ZTtcbitcbitcdGVyciA9IG1hbmFfZ2RfdGVzdF9lcShnYywgaHdjLVx1MDAzZWNxLVx1MDAzZWdkbWFfZXEpO1xuK1x0aWYgKGVycilcbitcdFx0aHdjLVx1MDAzZWNoYW5uZWxfdXAgPSBmYWxzZTtcbitcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUxNiAqcV9kZXB0aCxcbitzdGF0aWMgaW50IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MzIgKnFfZGVwdGgsXG4gXHRcdFx0XHQgICAgICB1MzIgKm1heF9yZXFfbXNnX3NpemUsXG4gXHRcdFx0XHQgICAgICB1MzIgKm1heF9yZXNwX21zZ19zaXplKVxuIHtcbitcdC8qIE5vIFJDVSBuZWVkZWQ6IGNhbGxlZCBvbmx5IGZyb20gbWFuYV9od2NfY3JlYXRlX2NoYW5uZWxcbitcdCAqIGR1cmluZyBpbml0LCBiZWZvcmUgdGhlIGNoYW5uZWwgaXMgcHVibGlzaGVkIHRvIHNlbmRlcnMuXG4rXHQgKi9cbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlICpycSA9IGh3Yy1cdTAwM2VyeHEtXHUwMDNlZ2RtYV93cTtcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlICpzcSA9IGh3Yy1cdTAwM2V0eHEtXHUwMDNlZ2RtYV93cTtcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlICplcSA9IGh3Yy1cdTAwM2VjcS1cdTAwM2VnZG1hX2VxO1xuIFx0c3RydWN0IGdkbWFfcXVldWUgKmNxID0gaHdjLVx1MDAzZWNxLVx1MDAzZWdkbWFfY3E7XG4rXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSBfX3JjdSAqKmNxX3RhYmxlO1xuIFx0aW50IGVycjtcbiBcbiBcdGluaXRfY29tcGxldGlvbihcdTAwMjZod2MtXHUwMDNlaHdjX2luaXRfZXFlX2NvbXApO1xuQEAgLTY4NywyNCArODM5LDUxIEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUxNiAqcV9kZXB0aCxcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcdTAwMjZod2MtXHUwMDNlaHdjX2luaXRfZXFlX2NvbXAsIDYwICogSFopKVxuLVx0XHRyZXR1cm4gLUVUSU1FRE9VVDtcbitcdC8qIHNldHVwX2h3YyBhY3RpdmF0ZWQgTVNUIGVudHJpZXMg4oCUIGhhcmR3YXJlIGNhbiBub3cgRE1BIGludG9cbitcdCAqIG91ciBxdWV1ZSBidWZmZXJzLiAgSWYgYW55dGhpbmcgYmVsb3cgZmFpbHMsIHdlIG11c3QgdGVhclxuK1x0ICogZG93biBiZWZvcmUgcmV0dXJuaW5nIHNvIHRoZSBjYWxsZXIgZG9lc24ndCBuZWVkIHRvIHRyYWNrXG4rXHQgKiB3aGV0aGVyIHNldHVwX2h3YyBzdWNjZWVkZWQuXG4rXHQgKi9cbitcdGh3Yy1cdTAwM2VzZXR1cF9hY3RpdmUgPSB0cnVlO1xuK1xuK1x0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXHUwMDI2aHdjLVx1MDAzZWh3Y19pbml0X2VxZV9jb21wLCA2MCAqIEhaKSkge1xuK1x0XHRlcnIgPSAtRVRJTUVET1VUO1xuK1x0XHRnb3RvIHRlYXJkb3duO1xuK1x0fVxuIFxuIFx0KnFfZGVwdGggPSBod2MtXHUwMDNlaHdjX2luaXRfcV9kZXB0aF9tYXg7XG4gXHQqbWF4X3JlcV9tc2dfc2l6ZSA9IGh3Yy1cdTAwM2Vod2NfaW5pdF9tYXhfcmVxX21zZ19zaXplO1xuIFx0Km1heF9yZXNwX21zZ19zaXplID0gaHdjLVx1MDAzZWh3Y19pbml0X21heF9yZXNwX21zZ19zaXplO1xuIFxuIFx0LyogQm90aCB3ZXJlIHNldCBpbiBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIoKS4gKi9cbi1cdGlmIChXQVJOX09OKGNxLVx1MDAzZWlkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMpKVxuLVx0XHRyZXR1cm4gLUVQUk9UTztcbitcdGlmIChXQVJOX09OKGNxLVx1MDAzZWlkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMpKSB7XG4rXHRcdGVyciA9IC1FUFJPVE87XG4rXHRcdGdvdG8gdGVhcmRvd247XG4rXHR9XG4gXG4tXHRnYy1cdTAwM2VjcV90YWJsZSA9IHZjYWxsb2MoZ2MtXHUwMDNlbWF4X251bV9jcXMsIHNpemVvZihzdHJ1Y3QgZ2RtYV9xdWV1ZSAqKSk7XG4tXHRpZiAoIWdjLVx1MDAzZWNxX3RhYmxlKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdGNxX3RhYmxlID0gdmNhbGxvYyhnYy1cdTAwM2VtYXhfbnVtX2Nxcywgc2l6ZW9mKCpjcV90YWJsZSkpO1xuK1x0aWYgKCFjcV90YWJsZSkge1xuK1x0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIHRlYXJkb3duO1xuK1x0fVxuIFxuLVx0Z2MtXHUwMDNlY3FfdGFibGVbY3EtXHUwMDNlaWRdID0gY3E7XG4rXHRyY3VfYXNzaWduX3BvaW50ZXIoY3FfdGFibGVbY3EtXHUwMDNlaWRdLCBjcSk7XG4rXHQvKiBQdWJsaXNoIHRoZSBmdWxseS1pbml0aWFsaXNlZCB0YWJsZSBsYXN0OyBwYWlycyB3aXRoIHRoZVxuK1x0ICogcmN1X2RlcmVmZXJlbmNlKGdjLVx1MDAzZWNxX3RhYmxlKSBpbiBtYW5hX2dkX3Byb2Nlc3NfZXFlKCkuXG4rXHQgKi9cbitcdHJjdV9hc3NpZ25fcG9pbnRlcihnYy1cdTAwM2VjcV90YWJsZSwgY3FfdGFibGUpO1xuIFxuIFx0cmV0dXJuIDA7XG4rXG4rdGVhcmRvd246XG4rXHR7XG4rXHRcdGludCB0ZF9lcnIgPSBtYW5hX3NtY190ZWFyZG93bl9od2MoXHUwMDI2Z2MtXHUwMDNlc2htX2NoYW5uZWwsIGZhbHNlKTtcbitcbitcdFx0aWYgKCF0ZF9lcnIpXG4rXHRcdFx0aHdjLVx1MDAzZXNldHVwX2FjdGl2ZSA9IGZhbHNlO1xuK1xuK1x0XHRyZXR1cm4gdGRfZXJyID8gdGRfZXJyIDogZXJyO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXG5AQCAtNzEyLDYgKzg5MSwxMiBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXG4ge1xuIFx0aW50IGVycjtcbiBcbitcdC8qIENRIGRlcHRoIGlzIHFfZGVwdGggKiAyIChTUSArIFJRKSBwYXNzZWQgYXMgdTE2IHRvIGNyZWF0ZV9jcS5cbitcdCAqIENhcCB0byBwcmV2ZW50IHUxNiB0cnVuY2F0aW9uLlxuK1x0ICovXG4rXHRpZiAocV9kZXB0aCBcdTAwM2UgVTE2X01BWCAvIDIpXG4rXHRcdHFfZGVwdGggPSBVMTZfTUFYIC8gMjtcbitcbiBcdGVyciA9IG1hbmFfaHdjX2luaXRfaW5mbGlnaHRfbXNnKGh3YywgcV9kZXB0aCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTcyOCwxNCArOTEzLDE0IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfaW5pdF9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRlcnIgPSBtYW5hX2h3Y19jcmVhdGVfd3EoaHdjLCBHRE1BX1JRLCBxX2RlcHRoLCBtYXhfcmVxX21zZ19zaXplLFxuK1x0ZXJyID0gbWFuYV9od2NfY3JlYXRlX3dxKGh3YywgR0RNQV9SUSwgcV9kZXB0aCwgbWF4X3Jlc3BfbXNnX3NpemUsXG4gXHRcdFx0XHQgaHdjLVx1MDAzZWNxLCBcdTAwMjZod2MtXHUwMDNlcnhxKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byBjcmVhdGUgSFdDIFJROiAlZFxcblwiLCBlcnIpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGVyciA9IG1hbmFfaHdjX2NyZWF0ZV93cShod2MsIEdETUFfU1EsIHFfZGVwdGgsIG1heF9yZXNwX21zZ19zaXplLFxuK1x0ZXJyID0gbWFuYV9od2NfY3JlYXRlX3dxKGh3YywgR0RNQV9TUSwgcV9kZXB0aCwgbWF4X3JlcV9tc2dfc2l6ZSxcbiBcdFx0XHRcdCBod2MtXHUwMDNlY3EsIFx1MDAyNmh3Yy1cdTAwM2V0eHEpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIGNyZWF0ZSBIV0MgU1E6ICVkXFxuXCIsIGVycik7XG5AQCAtNzQ0LDYgKzkyOSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfaW5pdF9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCxcbiBcbiBcdGh3Yy1cdTAwM2VudW1faW5mbGlnaHRfbXNnID0gcV9kZXB0aDtcbiBcdGh3Yy1cdTAwM2VtYXhfcmVxX21zZ19zaXplID0gbWF4X3JlcV9tc2dfc2l6ZTtcbitcdGh3Yy1cdTAwM2VtYXhfcmVzcF9tc2dfc2l6ZSA9IG1heF9yZXNwX21zZ19zaXplO1xuIFxuIFx0cmV0dXJuIDA7XG4gb3V0OlxuQEAgLTc1MSwxMiArOTM3LDYyIEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfaW5pdF9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuKy8qIFRlYXIgZG93biBhbGwgSFdDIHF1ZXVlcyBhbmQgZnJlZSBhc3NvY2lhdGVkIHJlc291cmNlcy4gIFVzZWQgb25cbisgKiB0aGUgcmVpbml0LXdpdGgtaGlnaGVyLXF1ZXVlLWRlcHRoIHBhdGggYW5kIHJlaW5pdCBmYWxsYmFjay5cbisgKlxuKyAqIFBSRUNPTkRJVElPTjogbXVzdCBiZSBjYWxsZWQgb25seSBkdXJpbmcgY2hhbm5lbCBicmluZy11cCBpblxuKyAqIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKCksIGJlZm9yZSB0aGUgY2hhbm5lbCBpcyBwdWJsaXNoZWQgdG9cbisgKiBzZW5kZXJzLiAgVGhlcmUgdGhlIHNldHVwIHRocmVhZCBpcyBlZmZlY3RpdmVseSBzaW5nbGUtdGhyZWFkZWRcbisgKiAoc2VyaWFsaXplZCBhZ2FpbnN0IHRlYXJkb3duIGJ5IHRoZSBQQ0kvUE0gZGV2aWNlX2xvY2sgb3IsIG9uIHRoZVxuKyAqIHNlcnZpY2UgcGF0aCwgR0NfSU5fU0VSVklDRSwgd2l0aCB0aGUgZGF0YSBwYXRoIG5vdCB5ZXQgcHJvYmVkKSxcbisgKiBjaGFubmVsX3VwIGlzIHN0aWxsIGZhbHNlLCBjYWxsZXJfY3R4IGlzIG5vdCB5ZXQgYWxsb2NhdGVkLCBhbmRcbisgKiBhY3RpdmVfc2VuZGVycyBpcyAwIOKAlCBzbyBubyBjb25jdXJyZW50IHJlcXVlc3QvcmVzcG9uc2UgdXNlciBjYW5cbisgKiB0b3VjaCB0aGVzZSBxdWV1ZXMuICBUaGF0IGlzIHdoeSB0aGlzIHNraXBzIHRoZSBod2NfbG9jay1wcm90ZWN0ZWRcbisgKiBkcml2ZXJfZGF0YSBjbGVhciArIGFjdGl2ZV9zZW5kZXJzIGRyYWluIHRoYXRcbisgKiBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoKSBuZWVkcyBmb3IgdGhlIHJ1bnRpbWUgdGVhcmRvd24gcmFjZTtcbisgKiBvbmx5IHRoZSBDUS1maXJzdCBvcmRlcmluZyBiZWxvdyAodG8gZmVuY2Ugb2ZmIGEgcGVuZGluZyBpbnRlcnJ1cHQpXG4rICogaXMgcmVxdWlyZWQuICBDYWxsaW5nIHRoaXMgb24gYSBsaXZlLCBwdWJsaXNoZWQgY2hhbm5lbCB3b3VsZCBiZSBhXG4rICogdXNlLWFmdGVyLWZyZWUuXG4rICovXG4rc3RhdGljIHZvaWQgbWFuYV9od2NfZGVzdHJveV9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjKVxuK3tcbitcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gaHdjLVx1MDAzZWdkbWFfZGV2LVx1MDAzZWdkbWFfY29udGV4dDtcbitcbitcdC8qIERlc3Ryb3kgQ1EgZmlyc3QgdG8gZGVyZWdpc3RlciB0aGUgRVEgZnJvbSB0aGUgaW50ZXJydXB0XG4rXHQgKiBoYW5kbGVyIGxpc3QgYmVmb3JlIGZyZWVpbmcgY2FsbGVyX2N0eCwgVFhRLCBvciBSWFEgbWVtb3J5LlxuK1x0ICogQSBwZW5kaW5nIGludGVycnVwdCBoYW5kbGVyIGNvdWxkIHN0aWxsIHJlYWNoIGhhbmRsZV9yZXNwKClcbitcdCAqIHdoaWNoIGRlcmVmZXJlbmNlcyBjYWxsZXJfY3R4LlxuK1x0ICovXG4rXHRpZiAoaHdjLVx1MDAzZWNxKSB7XG4rXHRcdG1hbmFfaHdjX2Rlc3Ryb3lfY3EoZ2MsIGh3Yy1cdTAwM2VjcSk7XG4rXHRcdGh3Yy1cdTAwM2VjcSA9IE5VTEw7XG4rXHR9XG4rXG4rXHRrZnJlZShod2MtXHUwMDNlY2FsbGVyX2N0eCk7XG4rXHRod2MtXHUwMDNlY2FsbGVyX2N0eCA9IE5VTEw7XG4rXG4rXHRpZiAoaHdjLVx1MDAzZXR4cSkge1xuK1x0XHRtYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLVx1MDAzZXR4cSk7XG4rXHRcdGh3Yy1cdTAwM2V0eHEgPSBOVUxMO1xuK1x0fVxuK1xuK1x0aWYgKGh3Yy1cdTAwM2VyeHEpIHtcbitcdFx0bWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy1cdTAwM2VyeHEpO1xuK1x0XHRod2MtXHUwMDNlcnhxID0gTlVMTDtcbitcdH1cbitcbitcdG1hbmFfZ2RfZnJlZV9yZXNfbWFwKFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzKTtcbitcdGh3Yy1cdTAwM2VudW1faW5mbGlnaHRfbXNnID0gMDtcbit9XG4rXG4gaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIHtcbiBcdHUzMiBtYXhfcmVxX21zZ19zaXplLCBtYXhfcmVzcF9tc2dfc2l6ZTtcbiBcdHN0cnVjdCBnZG1hX2RldiAqZ2QgPSBcdTAwMjZnYy1cdTAwM2Vod2M7XG4gXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XG4tXHR1MTYgcV9kZXB0aF9tYXg7XG4rXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSBfX3JjdSAqKm9sZF9jcV90YWJsZTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHR1MzIgcV9kZXB0aF9tYXg7XG4gXHRpbnQgZXJyO1xuIFxuIFx0aHdjID0ga3phbGxvY19vYmooKmh3Yyk7XG5AQCAtNzY0LDEwICsxMDAwLDExIEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRnZC1cdTAwM2VnZG1hX2NvbnRleHQgPSBnYztcbi1cdGdkLVx1MDAzZWRyaXZlcl9kYXRhID0gaHdjO1xuIFx0aHdjLVx1MDAzZWdkbWFfZGV2ID0gZ2Q7XG4gXHRod2MtXHUwMDNlZGV2ID0gZ2MtXHUwMDNlZGV2O1xuIFx0aHdjLVx1MDAzZWh3Y190aW1lb3V0ID0gSFdfQ0hBTk5FTF9XQUlUX1JFU09VUkNFX1RJTUVPVVRfTVM7XG4rXHRod2MtXHUwMDNlYWN0aXZlX3NlbmRlcnMgPSAwO1xuK1x0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZnYy1cdTAwM2Vod2NfZHJhaW5fd2FpdHEpO1xuIFxuIFx0LyogSFdDJ3MgaW5zdGFuY2UgbnVtYmVyIGlzIGFsd2F5cyAwLiAqL1xuIFx0Z2QtXHUwMDNlZGV2X2lkLmFzX3VpbnQzMiA9IDA7XG5AQCAtNzc2LDYgKzEwMTMsMTUgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIFx0Z2QtXHUwMDNlcGRpZCA9IElOVkFMSURfUERJRDtcbiBcdGdkLVx1MDAzZWRvb3JiZWxsID0gSU5WQUxJRF9ET09SQkVMTDtcbiBcbitcdC8qIFB1Ymxpc2ggZHJpdmVyX2RhdGEgbGFzdCwgdW5kZXIgaHdjX2xvY2s6IHRoZSBsb2NrIG9yZGVycyB0aGUgaHdjXG4rXHQgKiBpbml0aWFsaXNhdGlvbiBhYm92ZSBiZWZvcmUgdGhlIHBvaW50ZXIgYmVjb21lcyB2aXNpYmxlIGFuZFxuK1x0ICogc2VyaWFsaXNlcyB0aGUgcHVibGlzaCBhZ2FpbnN0IHRoZSBjb250cm9sLXBsYW5lIHJlYWRlcnMgaW5cbitcdCAqIG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCksIG1hbmFfbmVlZF9sb2coKSBhbmQgbWFuYV9zZXJ2X3Jlc2V0KCkuXG4rXHQgKi9cbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4rXHRnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGEgPSBod2M7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4rXG4gXHQvKiBtYW5hX2h3Y19pbml0X3F1ZXVlcygpIG9ubHkgY3JlYXRlcyB0aGUgcmVxdWlyZWQgZGF0YSBzdHJ1Y3R1cmVzLFxuIFx0ICogYW5kIGRvZXNuJ3QgdG91Y2ggdGhlIEhXQyBkZXZpY2UuXG4gXHQgKi9cbkBAIC03OTQsOCArMTA0MCwxMzAgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbitcdC8qIFRoZSBjaGFubmVsIHdhcyBib290c3RyYXBwZWQgYXQgYSBtaW5pbWFsIHF1ZXVlIGRlcHRoLiAgSWYgdGhlXG4rXHQgKiBkZXZpY2UgcmVwb3J0cyBhIGhpZ2hlciBtYXhpbXVtLCB0ZWFyIGRvd24gYW5kIHJlYnVpbGQgd2l0aFxuK1x0ICogdGhlIGxhcmdlciBkZXB0aCBzbyBtb3JlIEhXQyBjb21tYW5kcyBjYW4gYmUgaW4gZmxpZ2h0LlxuK1x0ICovXG4rXHRpZiAocV9kZXB0aF9tYXggXHUwMDNlIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRIKSB7XG4rXHRcdC8qIHFfZGVwdGhfbWF4IG5vdyBjYXJyaWVzIHRoZSBmdWxsIGRldmljZS1yZXBvcnRlZCB2YWx1ZVxuK1x0XHQgKiAoSFdDX0lOSVRfREFUQV9RVUVVRV9ERVBUSCBpcyAyNC1iaXQpLiAgQ2xhbXAgaXQgdG8gdGhlXG4rXHRcdCAqIGRlcHRoIHRoZSByZXN0IG9mIHRoZSBkcml2ZXIgc3VwcG9ydHMg4oCUIGNyZWF0ZV9jcSgpIHRha2VzXG4rXHRcdCAqIHFfZGVwdGggKiAyIGFzIGEgdTE2IOKAlCBiZWZvcmUgdGhlIG92ZXJmbG93IGNoZWNrIGJlbG93LCBzb1xuK1x0XHQgKiBhbiBvdmVyLWxhcmdlIGJ1dCBvdGhlcndpc2UtdmFsaWQgZGVwdGggaXMgcmVkdWNlZCB0byB0aGVcbitcdFx0ICogbWF4aW11bSBpbnN0ZWFkIG9mIHdyYXBwaW5nIG9yIGJlaW5nIHJlamVjdGVkLlxuK1x0XHQgKi9cbitcdFx0aWYgKHFfZGVwdGhfbWF4IFx1MDAzZSBVMTZfTUFYIC8gMilcbitcdFx0XHRxX2RlcHRoX21heCA9IFUxNl9NQVggLyAyO1xuK1xuK1x0XHQvKiBTYW5pdHktY2hlY2sgZGV2aWNlLXJlcG9ydGVkIHZhbHVlcyBiZWZvcmUgdXNpbmcgdGhlbVxuK1x0XHQgKiB0byBzaXplIERNQSBhbGxvY2F0aW9ucy4gIEVuZm9yY2UgcHJvdG9jb2wgbWluaW11bXNcbitcdFx0ICogZm9yIG1lc3NhZ2Ugc2l6ZXMgYW5kIGNoZWNrIHRoYXQgcV9kZXB0aCAqIG1heF9tc2dfc2l6ZVxuK1x0XHQgKiBwbHVzIGFsaWdubWVudCBoZWFkcm9vbSBmaXRzIGluIHUzMiAoZm9yXG4rXHRcdCAqIG1hbmFfaHdjX2FsbG9jX2RtYV9idWYncyBNQU5BX1BBR0VfQUxJR04pLlxuK1x0XHQgKi9cbitcdFx0aWYgKCFtYXhfcmVxX21zZ19zaXplIHx8ICFtYXhfcmVzcF9tc2dfc2l6ZSB8fFxuK1x0XHQgICAgbWF4X3JlcV9tc2dfc2l6ZSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBnZG1hX3JlcV9oZHIpIHx8XG4rXHRcdCAgICBtYXhfcmVzcF9tc2dfc2l6ZSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBnZG1hX3Jlc3BfaGRyKSB8fFxuK1x0XHQgICAgKHU2NClxX2RlcHRoX21heCAqIG1heF9yZXFfbXNnX3NpemUgXHUwMDNlXG4rXHRcdFx0VTMyX01BWCAtIE1BTkFfUEFHRV9TSVpFIHx8XG4rXHRcdCAgICAodTY0KXFfZGVwdGhfbWF4ICogbWF4X3Jlc3BfbXNnX3NpemUgXHUwMDNlXG4rXHRcdFx0VTMyX01BWCAtIE1BTkFfUEFHRV9TSVpFKSB7XG4rXHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XCJIV0M6IGludmFsaWQgZGltcyBxPSV1IHJlcT0ldSByZXNwPSV1XFxuXCIsXG4rXHRcdFx0XHRxX2RlcHRoX21heCwgbWF4X3JlcV9tc2dfc2l6ZSxcbitcdFx0XHRcdG1heF9yZXNwX21zZ19zaXplKTtcbitcdFx0XHRxX2RlcHRoX21heCA9IEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRIO1xuK1x0XHRcdGdvdG8gc2tpcF9yZWluaXQ7XG4rXHRcdH1cbitcbitcdFx0ZXJyID0gbWFuYV9zbWNfdGVhcmRvd25faHdjKFx1MDAyNmdjLVx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHQvKiBLZWVwIHVzaW5nIHRoZSBib290c3RyYXAtZGVwdGggY2hhbm5lbC4gKi9cbitcdFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcIkZhaWxlZCB0byB0ZWFyZG93biBIV0MgZm9yIHJlaW5pdDogJWRcXG5cIixcbitcdFx0XHRcdGVycik7XG4rXHRcdFx0cV9kZXB0aF9tYXggPSBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSDtcbitcdFx0XHRnb3RvIHNraXBfcmVpbml0O1xuK1x0XHR9XG4rXG4rXHRcdGh3Yy1cdTAwM2VzZXR1cF9hY3RpdmUgPSBmYWxzZTtcbitcbitcdFx0LyogRGVzdHJveSBxdWV1ZXMgZmlyc3Qg4oCUIG1hbmFfZ2RfZGVzdHJveV9jcSBpbnNpZGVcbitcdFx0ICogdW5wdWJsaXNoZXMgdGhlIENRIGZyb20gY3FfdGFibGUgdmlhXG4rXHRcdCAqIHJjdV9hc3NpZ25fcG9pbnRlcihOVUxMKSArIHN5bmNocm9uaXplX3JjdS5cbitcdFx0ICogTXVzdCBoYXBwZW4gd2hpbGUgY3FfdGFibGUgaXMgc3RpbGwgdmFsaWQuXG4rXHRcdCAqL1xuK1x0XHRtYW5hX2h3Y19kZXN0cm95X3F1ZXVlcyhod2MpO1xuK1xuK1x0XHRvbGRfY3FfdGFibGUgPSByY3VfcmVwbGFjZV9wb2ludGVyKGdjLVx1MDAzZWNxX3RhYmxlLCBOVUxMLCB0cnVlKTtcbitcdFx0c3luY2hyb25pemVfcmN1KCk7XG4rXHRcdHZmcmVlKG9sZF9jcV90YWJsZSk7XG4rXG4rXHRcdGVyciA9IG1hbmFfaHdjX2luaXRfcXVldWVzKGh3YywgcV9kZXB0aF9tYXgsXG4rXHRcdFx0XHRcdCAgIG1heF9yZXFfbXNnX3NpemUsXG4rXHRcdFx0XHRcdCAgIG1heF9yZXNwX21zZ19zaXplKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gcmVpbml0IEhXQzogJWRcXG5cIiwgZXJyKTtcbitcdFx0XHRnb3RvIHJlaW5pdF9mYWxsYmFjaztcbitcdFx0fVxuK1xuK1x0XHRlcnIgPSBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChnYywgXHUwMDI2cV9kZXB0aF9tYXgsXG4rXHRcdFx0XHRcdFx0IFx1MDAyNm1heF9yZXFfbXNnX3NpemUsXG4rXHRcdFx0XHRcdFx0IFx1MDAyNm1heF9yZXNwX21zZ19zaXplKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gcmUtZXN0YWJsaXNoIEhXQzogJWRcXG5cIixcbitcdFx0XHRcdGVycik7XG4rXHRcdFx0LyogZXN0YWJsaXNoX2NoYW5uZWwgZG9lcyBpbnRlcm5hbCB0ZWFyZG93biBvblxuK1x0XHRcdCAqIGZhaWx1cmUuICBJZiB0ZWFyZG93biBzdWNjZWVkZWQgKHNldHVwX2FjdGl2ZVxuK1x0XHRcdCAqIGNsZWFyZWQpLCBNU1QgZW50cmllcyBhcmUgaW52YWxpZGF0ZWQgYW5kIHdlXG4rXHRcdFx0ICogY2FuIHRyeSB0aGUgYm9vdHN0cmFwIGZhbGxiYWNrLiAgSWYgdGVhcmRvd25cbitcdFx0XHQgKiBhbHNvIGZhaWxlZCAoc2V0dXBfYWN0aXZlIHN0aWxsIHNldCksIGhhcmR3YXJlXG4rXHRcdFx0ICogbWFwcGluZ3MgbWF5IHN0aWxsIGJlIGFjdGl2ZSDigJQgc2tpcCBmYWxsYmFjay5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoaHdjLVx1MDAzZXNldHVwX2FjdGl2ZSlcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdGdvdG8gcmVpbml0X2ZhbGxiYWNrO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRnb3RvIHNraXBfcmVpbml0O1xuK1xuK3JlaW5pdF9mYWxsYmFjazpcbitcdC8qIFJlc3RvcmUgYm9vdHN0cmFwLWRlcHRoIGNoYW5uZWwgc28gdGhlIGRldmljZSByZW1haW5zIGZ1bmN0aW9uYWwuXG4rXHQgKiBGcmVlIGNxX3RhYmxlIGlmIGl0IHdhcyBhbGxvY2F0ZWQgYnkgYSBwYXJ0aWFsbHkgc3VjY2Vzc2Z1bFxuK1x0ICogZXN0YWJsaXNoIGF0dGVtcHQuXG4rXHQgKi9cbitcdGRldl93YXJuKGh3Yy1cdTAwM2VkZXYsIFwiSFdDIHJlaW5pdCBmYWlsZWQsIGZhbGxpbmcgYmFjayB0byBib290c3RyYXAgZGVwdGhcXG5cIik7XG4rXG4rXHRtYW5hX2h3Y19kZXN0cm95X3F1ZXVlcyhod2MpO1xuK1xuK1x0b2xkX2NxX3RhYmxlID0gcmN1X3JlcGxhY2VfcG9pbnRlcihnYy1cdTAwM2VjcV90YWJsZSwgTlVMTCwgdHJ1ZSk7XG4rXHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdHZmcmVlKG9sZF9jcV90YWJsZSk7XG4rXG4rXHRlcnIgPSBtYW5hX2h3Y19pbml0X3F1ZXVlcyhod2MsIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRILFxuK1x0XHRcdFx0ICAgSFdfQ0hBTk5FTF9NQVhfUkVRVUVTVF9TSVpFLFxuK1x0XHRcdFx0ICAgSFdfQ0hBTk5FTF9NQVhfUkVTUE9OU0VfU0laRSk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gcmVzdG9yZSBib290c3RyYXAgSFdDOiAlZFxcblwiLCBlcnIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGVyciA9IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKGdjLCBcdTAwMjZxX2RlcHRoX21heCwgXHUwMDI2bWF4X3JlcV9tc2dfc2l6ZSxcbitcdFx0XHRcdFx0IFx1MDAyNm1heF9yZXNwX21zZ19zaXplKTtcbitcdGlmIChlcnIpIHtcbitcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byByZS1lc3RhYmxpc2ggYm9vdHN0cmFwIEhXQzogJWRcXG5cIixcbitcdFx0XHRlcnIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitza2lwX3JlaW5pdDpcbitcbitcdC8qIE5vIFJDVSBuZWVkZWQ6IHN0aWxsIGluIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsLCB0aGVcbitcdCAqIHBvaW50ZXIgaGFzIG5vdCBiZWVuIHB1Ymxpc2hlZCB0byBjb25jdXJyZW50IHNlbmRlcnMgeWV0LlxuK1x0ICovXG4gXHRlcnIgPSBtYW5hX2h3Y190ZXN0X2NoYW5uZWwoZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhLFxuLVx0XHRcdFx0ICAgIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRILFxuK1x0XHRcdFx0ICAgIGh3Yy1cdTAwM2VudW1faW5mbGlnaHRfbXNnLFxuIFx0XHRcdFx0ICAgIG1heF9yZXFfbXNnX3NpemUsIG1heF9yZXNwX21zZ19zaXplKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byB0ZXN0IEhXQzogJWRcXG5cIiwgZXJyKTtcbkBAIC04MTAsMjcgKzExNzgsMTk1IEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiBcbiB2b2lkIG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiB7XG4rXHQvKiBUaGlzIGlzIHRoZSBvbmx5IGRlc3Ryb3kgZW50cnkgcG9pbnQuICBkcml2ZXJfZGF0YSBpcyByZWFkXG4rXHQgKiBwbGFpbmx5IGhlcmUgKHRlYXJkb3duIGlzIHNlcmlhbGlzZWQgYWdhaW5zdCBvdGhlciB0ZWFyZG93bik7XG4rXHQgKiBpdCBpcyBjbGVhcmVkIHVuZGVyIGh3Y19sb2NrIGJlbG93IGJlZm9yZSBod2MgaXMgZnJlZWQuXG4rXHQgKi9cbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbitcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqb2xkX2NxX3RhYmxlO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGlmICghaHdjKVxuIFx0XHRyZXR1cm47XG4gXG4tXHQvKiBnYy1cdTAwM2VtYXhfbnVtX2NxcyBpcyBzZXQgaW4gbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKCkuIElmIGl0J3Ncbi1cdCAqIG5vbi16ZXJvLCB0aGUgSFdDIHdvcmtlZCBhbmQgd2Ugc2hvdWxkIHRlYXIgZG93biB0aGUgSFdDIGhlcmUuXG4rXHQvKiBQcmV2ZW50IG5ldyByZXF1ZXN0cyBmcm9tIHN0YXJ0aW5nIGFuZCB3YWtlIGFueVxuK1x0ICogdGhyZWFkcyB3YWl0aW5nIGZvciBhIGZyZWUgbXNnIHNsb3QuICBTZXQgY2hhbm5lbF91cCB1bmRlclxuK1x0ICogdGhlIGJpdG1hcCBsb2NrIHNvIGdldF9tc2dfaW5kZXgoKSBjYW5ub3QgYWNxdWlyZSBhIHNsb3RcbitcdCAqIGFuZCBpbmNyZW1lbnQgYWN0aXZlX3NlbmRlcnMgYWZ0ZXIgdGhpcyBwb2ludC5cbitcdCAqXG4rXHQgKiBJZiBjaGFubmVsX3VwIGlzIGFscmVhZHkgZmFsc2UgKGUuZy4gaW5pdCBmYWlsZWQgYmVmb3JlXG4rXHQgKiB0aGUgY2hhbm5lbCB3YXMgZXN0YWJsaXNoZWQpLCBza2lwIHRoZSBsb2NrIOKAlCBpdCBtYXkgbm90XG4rXHQgKiBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgeWV0LCBhbmQgbm8gc2VuZGVycyBjYW4gYmUgYWN0aXZlLlxuIFx0ICovXG4tXHRpZiAoZ2MtXHUwMDNlbWF4X251bV9jcXMgXHUwMDNlIDApIHtcbi1cdFx0bWFuYV9zbWNfdGVhcmRvd25faHdjKFx1MDAyNmdjLVx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSk7XG4tXHRcdGdjLVx1MDAzZW1heF9udW1fY3FzID0gMDtcbitcdGlmIChod2MtXHUwMDNlY2hhbm5lbF91cCkge1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7XG4rXHRcdGh3Yy1cdTAwM2VjaGFubmVsX3VwID0gZmFsc2U7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubG9jaywgZmxhZ3MpO1xuK1x0XHR3YWtlX3VwX2FsbChcdTAwMjZod2MtXHUwMDNlbXNnX3dhaXRxKTtcbiBcdH1cbiBcbitcdC8qIENsZWFyIHRoZSBwb2ludGVyIHVuZGVyIGh3Y19sb2NrIHNvIG5ldyBjYWxsZXJzIGluXG4rXHQgKiBtYW5hX2dkX3NlbmRfcmVxdWVzdCgpIHNlZSBOVUxMIGFuZCByZXR1cm4gLUVOT0RFVi4gIFRoZSBsb2NrXG4rXHQgKiBtYWtlcyB0aGUgcmVhZGVycycgXCJsb2FkIGRyaXZlcl9kYXRhICsgYWN0aXZlX3NlbmRlcnMrK1wiXG4rXHQgKiBhdG9taWMgYWdhaW5zdCB0aGlzIHN0b3JlLCBzbyBvbmNlIGl0IHJldHVybnMgbm8gbmV3IHNlbmRlciBjYW5cbitcdCAqIHRha2UgYSByZWZlcmVuY2U7IHRoZSBhY3RpdmVfc2VuZGVycyBkcmFpbiBiZWxvdyB3YWl0cyBvdXQgdGhvc2VcbitcdCAqIHRoYXQgYWxyZWFkeSBkaWQsIGJlZm9yZSB0aGVpciBod2MgaXMgZnJlZWQuXG4rXHQgKi9cbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4rXHRnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGEgPSBOVUxMO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuK1xuK1x0LyogRm9yY2UtY29tcGxldGUgYW55IGluLWZsaWdodCBzZW5kZXJzIHNvIHRoZXkgb2JzZXJ2ZSAtRU5PREVWLFxuK1x0ICogcmV0dXJuLCBhbmQgZHJvcCB0aGVpciByZWZlcmVuY2VzLiAgVGhpcyBydW5zIGJlZm9yZSB0aGUgSFdDXG4rXHQgKiBoYXJkd2FyZSB0ZWFyZG93biBiZWxvdywgc28gYSBsaXZlIGludGVycnVwdCBtYXkgc3RpbGwgZGVsaXZlclxuK1x0ICogYSByZWFsIHJlc3BvbnNlIHZpYSBoYW5kbGVfcmVzcCgpIGNvbmN1cnJlbnRseSDigJQgdGhhdCBpcyBzYWZlXG4rXHQgKiBiZWNhdXNlIHRoZSBwZXItc2xvdCByZWZjb3VudCBtb2RlbCB0b2xlcmF0ZXMgYSBjb25jdXJyZW50XG4rXHQgKiBjb21wbGV0ZSgpIGFuZCBib3RoIHBhdGhzIChoYW5kbGVfcmVzcCBhbmQgdGhpcyBsb29wKSBkcm9wXG4rXHQgKiB0aGVpciByZWZzIHdpdGhvdXQgZG91YmxlLXJlbGVhc2luZyB0aGUgc2xvdC5cbitcdCAqL1xuK1x0aWYgKGh3Yy1cdTAwM2VjYWxsZXJfY3R4KSB7XG4rXHRcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xuK1x0XHRpbnQgaTtcbitcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaHdjLVx1MDAzZW51bV9pbmZsaWdodF9tc2c7IGkrKykge1xuK1x0XHRcdGlmICghdGVzdF9iaXQoaSwgaHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdGN0eCA9IFx1MDAyNmh3Yy1cdTAwM2VjYWxsZXJfY3R4W2ldO1xuK1xuK1x0XHRcdC8qIFdha2Ugc2VuZGVycyBibG9ja2VkIG9uIHdhaXRfZm9yX2NvbXBsZXRpb24uXG4rXHRcdFx0ICogU2V0IGVycm9yIHVuZGVyIGxvY2sgdG8gYXZvaWQgcmFjaW5nIHdpdGhcbitcdFx0XHQgKiBoYW5kbGVfcmVzcCgpIHdoaWNoIHdyaXRlcyBlcnJvciB1bmRlciB0aGVcbitcdFx0XHQgKiBzYW1lIGxvY2suICBUaGUgc2VuZGVyIE5VTExzIG91dHB1dF9idWZcbitcdFx0XHQgKiBhZnRlciB3YWtpbmcg4oCUIGRvaW5nIGl0IGhlcmUgd291bGQgcmFjZVxuK1x0XHRcdCAqIHdpdGggYSBzZW5kZXIgdGhhdCBoYXNuJ3Qgc2V0IG91dHB1dF9idWYgeWV0LlxuK1x0XHRcdCAqL1xuK1x0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdFx0Y3R4LVx1MDAzZWVycm9yID0gLUVOT0RFVjtcbitcdFx0XHRjb21wbGV0ZShcdTAwMjZjdHgtXHUwMDNlY29tcF9ldmVudCk7XG4rXHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiBXYWl0IGZvciBhbGwgc2VuZGVyIHRocmVhZHMgdG8gZmluaXNoIGFuZCBkcm9wIHRoZWlyIHJlZnNcbitcdCAqIGJlZm9yZSB0b3VjaGluZyB0aGUgaGFyZHdhcmUgb3IgZnJlZWluZyBhbnl0aGluZy4gIERyYWluaW5nXG4rXHQgKiBoZXJlIC0tIGFoZWFkIG9mIHRoZSB0ZWFyZG93bi9GTFIgYmxvY2sgYmVsb3cgLS0gZ3VhcmFudGVlcyBub1xuK1x0ICogaW4tZmxpZ2h0IHNlbmRlciBpcyBzdGlsbCBydW5uaW5nIHdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIG9uXG4rXHQgKiBhbnkgcGF0aCwgaW5jbHVkaW5nIHRoZSBGTFItZmFpbHVyZSBlYXJseSByZXR1cm47IG90aGVyd2lzZSBhXG4rXHQgKiBzdHJhbmRlZCBzZW5kZXIgd291bGQgZGVyZWZlcmVuY2UgZ2MtXHUwMDNlaHdjX2xvY2sgL1xuK1x0ICogZ2MtXHUwMDNlaHdjX2RyYWluX3dhaXRxIGFmdGVyIHRoZSBjYWxsZXIgZnJlZXMgZ2MuXG4rXHQgKiBBZnRlciB0aGlzLCBvbmx5IHNsb3RzIGhlbGQgYnkgdGltZWQtb3V0IHNlbmRlcnMgd2hvc2VcbitcdCAqIGhhbmRsZV9yZXNwKCkgbmV2ZXIgcmFuIHJlbWFpbiBpbiB0aGUgYml0bWFwLlxuK1x0ICpcbitcdCAqIGFjdGl2ZV9zZW5kZXJzIGlzIG9ubHkgZXZlciBtb2RpZmllZCB1bmRlciBod2NfbG9jaywgYW5kIHRoZVxuK1x0ICogbGFzdCBzZW5kZXIncyB3YWtlX3VwKCkgcnVucyB1bmRlciB0aGF0IGxvY2sgYmVmb3JlIGl0IGlzXG4rXHQgKiByZWxlYXNlZC4gIEV2YWx1YXRpbmcgdGhlIGNvbmRpdGlvbiB1bmRlciBod2NfbG9jayB0aGVyZWZvcmVcbitcdCAqIGd1YXJhbnRlZXMgdGhhdCBvbmNlIHdlIG9ic2VydmUgMCB0aGUgd2FraW5nIHNlbmRlciBoYXNcbitcdCAqIGFscmVhZHkgZHJvcHBlZCB0aGUgbG9jayAtLSBpLmUuIGZpbmlzaGVkIHRvdWNoaW5nIGdjIC0tIHNvIGl0XG4rXHQgKiBjYW5ub3QgcmFjZSB0aGUgY2FsbGVyIGZyZWVpbmcgZ2MgYWZ0ZXIgdGhpcyByZXR1cm5zLlxuK1x0ICovXG4rXHRzcGluX2xvY2tfaXJxKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrKTtcbitcdHdhaXRfZXZlbnRfbG9ja19pcnEoZ2MtXHUwMDNlaHdjX2RyYWluX3dhaXRxLFxuK1x0XHRcdCAgICBod2MtXHUwMDNlYWN0aXZlX3NlbmRlcnMgPT0gMCwgZ2MtXHUwMDNlaHdjX2xvY2spO1xuK1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrKTtcbitcbitcdC8qIFRlYXIgZG93biB0aGUgSFdDIGlmIHNldHVwX2h3YyBwcmV2aW91c2x5IGFjdGl2YXRlZCBNU1QgZW50cmllcy5cbitcdCAqIFRoaXMgaXMgdGhlIGRlZmluaXRpdmUgZmxhZyDigJQgdW5saWtlIG1heF9udW1fY3FzIHdoaWNoIGRlcGVuZHNcbitcdCAqIG9uIHRoZSBpbml0IEVRRSBhcnJpdmluZy5cbitcdCAqXG4rXHQgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGludGVudGlvbmFsbHkgbm90IGNoZWNrZWQuICBUaGlzIGlzIHRoZVxuK1x0ICogdGVybWluYWwgY2xlYW51cCBwYXRoIChkZXZpY2UgcmVtb3ZhbCwgc3VzcGVuZCwgb3IgaW5pdFxuK1x0ICogZmFpbHVyZSkg4oCUIHJlc291cmNlcyBtdXN0IGJlIGZyZWVkIHJlZ2FyZGxlc3MuICBJZiB0ZWFyZG93blxuK1x0ICogZmFpbHMsIGhhcmR3YXJlIG1heSBzdGlsbCBoYXZlIGFjdGl2ZSBNU1QgZW50cmllcywgYnV0OlxuK1x0ICpcbitcdCAqICAtIEludGVycnVwdHM6IG1hbmFfaHdjX2Rlc3Ryb3lfY3EoKSBiZWxvdyBjYWxsc1xuK1x0ICogICAgbWFuYV9nZF9kZXJlZ2lzdGVyX2lycSgpIHdoaWNoIHJlbW92ZXMgdGhlIEhXQyBFUSBmcm9tXG4rXHQgKiAgICB0aGUgaW50ZXJydXB0IGRpc3BhdGNoIGxpc3QgdmlhIGxpc3RfZGVsX3JjdSgpICtcbitcdCAqICAgIHN5bmNocm9uaXplX3JjdSgpLiAgQWZ0ZXIgdGhhdCwgbm8gaW50ZXJydXB0IGhhbmRsZXIgY2FuXG4rXHQgKiAgICBpbnZva2UgaGFuZGxlX3Jlc3AoKSBvciBhY2Nlc3MgQ1EvUlEgYnVmZmVycyDigJQgZXZlbiBpZlxuK1x0ICogICAgdGhlIElSUSBpcyBzaGFyZWQgd2l0aCBkYXRhIHBhdGggcXVldWVzLlxuK1x0ICpcbitcdCAqICAtIERNQTogbWFuYV9od2NfZGVzdHJveV93cSgpIGZyZWVzIERNQSBidWZmZXJzIHZpYVxuK1x0ICogICAgZG1hX2ZyZWVfY29oZXJlbnQoKSB3aGljaCB1bm1hcHMgdGhlIElPVkEgZnJvbSB0aGVcbitcdCAqICAgIElPTU1VLiAgQW55IHN0YWxlIGhhcmR3YXJlIERNQSB0byB0aGUgb2xkIGFkZHJlc3NcbitcdCAqICAgIGZhdWx0cyBhdCB0aGUgSU9NTVUsIG5vdCBpbiBrZXJuZWwgbWVtb3J5LlxuK1x0ICovXG4rXHRpZiAoaHdjLVx1MDAzZXNldHVwX2FjdGl2ZSkge1xuK1x0XHRpbnQgdGRfZXJyID0gbWFuYV9zbWNfdGVhcmRvd25faHdjKFx1MDAyNmdjLVx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSk7XG4rXG4rXHRcdGlmICh0ZF9lcnIpIHtcbitcdFx0XHRkZXZfZXJyKGdjLVx1MDAzZWRldiwgXCJIV0MgdGVhcmRvd24gZmFpbGVkOiAlZCwgaXNzdWluZyBGTFJcXG5cIixcbitcdFx0XHRcdHRkX2Vycik7XG4rXG4rXHRcdFx0LyogT24gc3lzdGVtcyB3aXRob3V0IElPTU1VLCBmcmVlaW5nIERNQSBtZW1vcnkgd2l0aFxuK1x0XHRcdCAqIGFjdGl2ZSBoYXJkd2FyZSBNU1QgbWFwcGluZ3Mgcmlza3MgbWVtb3J5IGNvcnJ1cHRpb24uXG4rXHRcdFx0ICogSXNzdWUgRkxSIHRvIGZvcmNlLXJlc2V0IHRoZSBkZXZpY2UgYW5kIGludmFsaWRhdGVcbitcdFx0XHQgKiBhbGwgaGFyZHdhcmUgc3RhdGUgaW5jbHVkaW5nIE1TVCBlbnRyaWVzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHRkX2VyciA9IHBjaWVfZmxyKHRvX3BjaV9kZXYoZ2MtXHUwMDNlZGV2KSk7XG4rXHRcdFx0aWYgKHRkX2Vycikge1xuK1x0XHRcdFx0LyogRGV2aWNlIHdlZGdlZDogdGVhcmRvd24gYW5kIEZMUlxuK1x0XHRcdFx0ICogYm90aCBmYWlsZWQsIHNvIGhhcmR3YXJlIG1heSBzdGlsbFxuK1x0XHRcdFx0ICogRE1BIGludG8gb3VyIHF1ZXVlIGJ1ZmZlcnMuICBMZWFrXG4rXHRcdFx0XHQgKiBhbGwgSFdDIERNQSBidWZmZXJzIC0tIGFuZCB0aGUgRVFcbitcdFx0XHRcdCAqIElSUSByZWdpc3RyYXRpb24sIHdob3NlIHNhZmUgcmVtb3ZhbFxuK1x0XHRcdFx0ICogbmVlZHMgdGhvc2UgcXVldWVzIC0tIGluc3RlYWQgb2ZcbitcdFx0XHRcdCAqIGZyZWVpbmcgbWVtb3J5IHRoZSBkZXZpY2UgY2FuIHN0aWxsXG4rXHRcdFx0XHQgKiByZWFjaDsgd2l0aG91dCBhbiBJT01NVSB0aGUgZnJlZWRcbitcdFx0XHRcdCAqIHBhZ2VzIGNvdWxkIGJlIHJldXNlZCB1bmRlciBsaXZlXG4rXHRcdFx0XHQgKiBETUEuXG4rXHRcdFx0XHQgKi9cbitcbitcdFx0XHRcdGRldl93YXJuKGdjLVx1MDAzZWRldixcbitcdFx0XHRcdFx0IFwiTGVha2VkIEhXQyBETUEgYnVmZmVycyAoQ1EvUlEvVFhRKSB0byBwcmV2ZW50IG1lbW9yeSBjb3JydXB0aW9uLiBEZXZpY2UgaXMgbm8gbG9uZ2VyIHVzYWJsZS5cXG5cIik7XG4rXG4rXHRcdFx0XHQvKiBEbyBub3QgY2FsbCBkZXN0cm95X2NxL3dxIGJlbG93O1xuK1x0XHRcdFx0ICogdGhleSB3b3VsZCBkbWFfZnJlZV9jb2hlcmVudCgpLlxuK1x0XHRcdFx0ICogTGVhdmUgaHdjL2NxL3J4cS90eHEgYWxsb2NhdGVkLlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0fVxuK1xuK1x0XHRcdGRldl9pbmZvKGdjLVx1MDAzZWRldiwgXCJGTFIgc3VjY2VlZGVkLCBoYXJkd2FyZSBzdGF0ZSBjbGVhcmVkXFxuXCIpO1xuK1x0XHR9XG4rXG4rXHRcdGh3Yy1cdTAwM2VzZXR1cF9hY3RpdmUgPSBmYWxzZTtcbitcdH1cbitcbitcdC8qIFRlYXIgZG93biB0aGUgSFdDIENRIG9iamVjdCBmaXJzdCDigJQgbWFuYV9od2NfZGVzdHJveV9jcSgpXG4rXHQgKiBib3RoIHVucHVibGlzaGVzIHRoZSBDUSBmcm9tIGNxX3RhYmxlICgrc3luY2hyb25pemVfcmN1KSBhbmRcbitcdCAqIGRlcmVnaXN0ZXJzIHRoZSBIV0MgRVEgZnJvbSB0aGUgaW50ZXJydXB0IGhhbmRsZXIncyBSQ1UgbGlzdFxuK1x0ICogKHZpYSBtYW5hX2dkX2RlcmVnaXN0ZXJfaXJxICsgc3luY2hyb25pemVfcmN1KSwgZ3VhcmFudGVlaW5nXG4rXHQgKiBubyBpbnRlcnJ1cHQgaGFuZGxlciBjYW4gYWNjZXNzIFJRL1RYUSBidWZmZXJzIGFmdGVyIHRoaXNcbitcdCAqIHBvaW50LiAgVGhlIGFjdGl2ZV9zZW5kZXJzIGRyYWluIGFib3ZlIGVuc3VyZXMgbm8gc2VuZGVyIGlzXG4rXHQgKiBhY2Nlc3NpbmcgdGhlIENRIHZpYSB0eHEtXHUwMDNlaHdjX2NxIHdoZW4gaXQgaXMgZGVzdHJveWVkLiAgVGhlblxuK1x0ICogZGVzdHJveSBUWFEgYW5kIFJRIHNhZmVseS5cbitcdCAqL1xuK1x0aWYgKGh3Yy1cdTAwM2VjcSlcbitcdFx0bWFuYV9od2NfZGVzdHJveV9jcShod2MtXHUwMDNlZ2RtYV9kZXYtXHUwMDNlZ2RtYV9jb250ZXh0LCBod2MtXHUwMDNlY3EpO1xuK1xuIFx0aWYgKGh3Yy1cdTAwM2V0eHEpXG4gXHRcdG1hbmFfaHdjX2Rlc3Ryb3lfd3EoaHdjLCBod2MtXHUwMDNldHhxKTtcbiBcbiBcdGlmIChod2MtXHUwMDNlcnhxKVxuIFx0XHRtYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLVx1MDAzZXJ4cSk7XG4gXG4tXHRpZiAoaHdjLVx1MDAzZWNxKVxuLVx0XHRtYW5hX2h3Y19kZXN0cm95X2NxKGh3Yy1cdTAwM2VnZG1hX2Rldi1cdTAwM2VnZG1hX2NvbnRleHQsIGh3Yy1cdTAwM2VjcSk7XG4rXHQvKiBSZWxlYXNlIGFueSBzbG90cyBzdGlsbCBoZWxkIOKAlCB0aGVzZSBiZWxvbmcgdG8gdGltZWQtb3V0XG4rXHQgKiBzZW5kZXJzIHdoZXJlIGhhbmRsZV9yZXNwKCkgbmV2ZXIgcmFuIChyZWZjb3VudCA9IDEgd2l0aFxuK1x0ICogaGFuZGxlX3Jlc3AncyByZWYgc3RpbGwgb3V0c3RhbmRpbmcpLlxuK1x0ICovXG4rXHRpZiAoaHdjLVx1MDAzZWNhbGxlcl9jdHgpIHtcbitcdFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHg7XG4rXHRcdGludCBpO1xuK1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBod2MtXHUwMDNlbnVtX2luZmxpZ2h0X21zZzsgaSsrKSB7XG4rXHRcdFx0aWYgKCF0ZXN0X2JpdChpLCBod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5tYXApKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0Y3R4ID0gXHUwMDI2aHdjLVx1MDAzZWNhbGxlcl9jdHhbaV07XG4rXHRcdFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuK1x0XHR9XG4rXHR9XG4gXG4gXHRrZnJlZShod2MtXHUwMDNlY2FsbGVyX2N0eCk7XG4gXHRod2MtXHUwMDNlY2FsbGVyX2N0eCA9IE5VTEw7XG5AQCAtODQ1LDExICsxMzgxLDExIEBAIHZvaWQgbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIFx0aHdjLVx1MDAzZWh3Y190aW1lb3V0ID0gMDtcbiBcbiBcdGtmcmVlKGh3Yyk7XG4tXHRnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGEgPSBOVUxMO1xuIFx0Z2MtXHUwMDNlaHdjLmdkbWFfY29udGV4dCA9IE5VTEw7XG4gXG4tXHR2ZnJlZShnYy1cdTAwM2VjcV90YWJsZSk7XG4tXHRnYy1cdTAwM2VjcV90YWJsZSA9IE5VTEw7XG4rXHRvbGRfY3FfdGFibGUgPSByY3VfcmVwbGFjZV9wb2ludGVyKGdjLVx1MDAzZWNxX3RhYmxlLCBOVUxMLCB0cnVlKTtcbitcdHN5bmNocm9uaXplX3JjdSgpO1xuK1x0dmZyZWUob2xkX2NxX3RhYmxlKTtcbiB9XG4gXG4gaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLFxuQEAgLTg2MCwxMyArMTM5NiwxNyBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sXG4gXHRzdHJ1Y3QgaHdjX3dxICp0eHEgPSBod2MtXHUwMDNldHhxO1xuIFx0c3RydWN0IGdkbWFfcmVxX2hkciAqcmVxX21zZztcbiBcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHUzMiBkZXN0X3ZyY3EgPSAwO1xuIFx0dTMyIGRlc3RfdnJxID0gMDtcbiBcdHUzMiBjb21tYW5kO1xuK1x0dTMyIHN0YXR1cztcbiBcdHUxNiBtc2dfaWQ7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bWFuYV9od2NfZ2V0X21zZ19pbmRleChod2MsIFx1MDAyNm1zZ19pZCk7XG4rXHRlcnIgPSBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KGh3YywgXHUwMDI2bXNnX2lkKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4gXG4gXHR0eF93ciA9IFx1MDAyNnR4cS1cdTAwM2Vtc2dfYnVmLVx1MDAzZXJlcXNbbXNnX2lkXTtcbiBcbkBAIC04NzgsOCArMTQxOCwxMSBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sXG4gXHR9XG4gXG4gXHRjdHggPSBod2MtXHUwMDNlY2FsbGVyX2N0eCArIG1zZ19pZDtcbitcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRjdHgtXHUwMDNlb3V0cHV0X2J1ZiA9IHJlc3A7XG4gXHRjdHgtXHUwMDNlb3V0cHV0X2J1ZmxlbiA9IHJlc3BfbGVuO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuIFx0cmVxX21zZyA9IChzdHJ1Y3QgZ2RtYV9yZXFfaGRyICopdHhfd3ItXHUwMDNlYnVmX3ZhO1xuIFx0aWYgKHJlcSlcbkBAIC04OTUsOCArMTQzOCwxNCBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sXG4gXHRcdGRlc3RfdnJjcSA9IGh3Yy1cdTAwM2VwZl9kZXN0X3ZyY3FfaWQ7XG4gXHR9XG4gXG4rXHQvKiBUYWtlIGhhbmRsZV9yZXNwJ3MgcmVmIGJlZm9yZSBwb3N0aW5nIOKAlCBoYXJkd2FyZSBjYW4gcmVzcG9uZFxuK1x0ICogaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGRvb3JiZWxsIHJpbmcuXG4rXHQgKi9cbitcdHJlZmNvdW50X2luYyhcdTAwMjZjdHgtXHUwMDNlcmVmY250KTtcbitcbiBcdGVyciA9IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKHR4cSwgdHhfd3IsIGRlc3RfdnJxLCBkZXN0X3ZyY3EsIGZhbHNlKTtcbiBcdGlmIChlcnIpIHtcbitcdFx0cmVmY291bnRfZGVjKFx1MDAyNmN0eC1cdTAwM2VyZWZjbnQpO1xuIFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiSFdDOiBGYWlsZWQgdG8gcG9zdCBzZW5kIFdRRTogJWRcXG5cIiwgZXJyKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG5AQCAtOTA3LDMxICsxNDU2LDg2IEBAIGludCBtYW5hX2h3Y19zZW5kX3JlcXVlc3Qoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVxX2xlbixcbiBcdFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiQ29tbWFuZCAweCV4IHRpbWVkIG91dDogJXUgbXNcXG5cIixcbiBcdFx0XHRcdGNvbW1hbmQsIGh3Yy1cdTAwM2Vod2NfdGltZW91dCk7XG4gXG4tXHRcdC8qIFJlZHVjZSBmdXJ0aGVyIHdhaXRpbmcgaWYgSFdDIG5vIHJlc3BvbnNlICovXG4rXHRcdC8qIE5VTEwgb3V0IG91dHB1dF9idWYgc28gYSBsYXRlIGhhbmRsZV9yZXNwKCkgd29uJ3Qgd3JpdGVcbitcdFx0ICogaW50byB0aGUgY2FsbGVyJ3MgYnVmZmVyIGFmdGVyIHRoZSBzZW5kZXIgcmV0dXJucywgdGhlblxuK1x0XHQgKiBjaGVjayB3aGV0aGVyIGhhbmRsZV9yZXNwKCkgYWxyZWFkeSBkZWxpdmVyZWQgYSB2YWxpZFxuK1x0XHQgKiByZXNwb25zZSBiZXR3ZWVuIHRoZSB0aW1lb3V0IGZpcmluZyBhbmQgdGhpcyBsb2NrXG4rXHRcdCAqIGFjcXVpc2l0aW9uIOKAlCBjdHgtXHUwMDNlZXJyb3IgIT0gLUVJTlBST0dSRVNTIG1lYW5zIGl0IHJhbi5cbitcdFx0ICovXG4rXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdGN0eC1cdTAwM2VvdXRwdXRfYnVmID0gTlVMTDtcbitcdFx0ZXJyID0gY3R4LVx1MDAzZWVycm9yO1xuK1x0XHRzdGF0dXMgPSBjdHgtXHUwMDNlc3RhdHVzX2NvZGU7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3R4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdFx0aWYgKGVyciAhPSAtRUlOUFJPR1JFU1MpIHtcbitcdFx0XHQvKiBoYW5kbGVfcmVzcCgpIGRlbGl2ZXJlZCBhIHZhbGlkIHJlc3BvbnNlIGp1c3QgYWZ0ZXJcbitcdFx0XHQgKiB0aGUgdGltZW91dCBmaXJlZC4gIFRoZSBoYXJkd2FyZSBpcyBhbGl2ZSwgc28gdXNlXG4rXHRcdFx0ICogdGhlIHJlc3BvbnNlIGFuZCBsZWF2ZSB0aGUgY2hhbm5lbCB1c2FibGU7IGRvIG5vdFxuK1x0XHRcdCAqIGxhdGNoIGh3Y190aW1lZF9vdXQgb3IgZGVncmFkZSBod2NfdGltZW91dCBmb3Igd2hhdFxuK1x0XHRcdCAqIHR1cm5lZCBvdXQgdG8gYmUgYSB0cmFuc2llbnQgcmFjZS5cbitcdFx0XHQgKi9cbitcdFx0XHRod2NfY3R4X3B1dChod2MsIGN0eCk7XG4rXHRcdFx0Z290byBjaGVja19zdGF0dXM7XG4rXHRcdH1cbitcbitcdFx0LyogR2VudWluZSB0aW1lb3V0OiBubyByZXNwb25zZSBhcnJpdmVkLiAgUmVkdWNlIGZ1cnRoZXJcbitcdFx0ICogd2FpdGluZywgYW5kIG1hcmsgdGhlIGNoYW5uZWwgdGltZWQgb3V0IHVuZGVyIHRoZSBiaXRtYXBcbitcdFx0ICogbG9jayBzbyBnZXRfbXNnX2luZGV4KCkgY2Fubm90IGFjcXVpcmUgbmV3IHNsb3RzIGFmdGVyIHRoaXMuXG4rXHRcdCAqL1xuIFx0XHRpZiAoaHdjLVx1MDAzZWh3Y190aW1lb3V0IFx1MDAzZSAxKVxuIFx0XHRcdGh3Yy1cdTAwM2Vod2NfdGltZW91dCA9IDE7XG4gXG4rXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcbitcdFx0aHdjLVx1MDAzZWh3Y190aW1lZF9vdXQgPSB0cnVlO1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcbitcdFx0d2FrZV91cF9hbGwoXHUwMDI2aHdjLVx1MDAzZW1zZ193YWl0cSk7XG4rXG4gXHRcdGVyciA9IC1FVElNRURPVVQ7XG4tXHRcdGdvdG8gb3V0O1xuK1x0XHRod2NfY3R4X3B1dChod2MsIGN0eCk7XG4rXHRcdGdvdG8gZG9uZTtcbiBcdH1cbiBcbi1cdGlmIChjdHgtXHUwMDNlZXJyb3IpIHtcbi1cdFx0ZXJyID0gY3R4LVx1MDAzZWVycm9yO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbitcdC8qIE5VTEwgb3V0cHV0X2J1ZiBzbyBhIGxhdGUgaGFuZGxlX3Jlc3AoKSB3b24ndCBtZW1jcHkgaW50b1xuK1x0ICogdGhlIGNhbGxlcidzIGJ1ZmZlciBhZnRlciB0aGUgc2VuZGVyIGV4aXRzLiAgUmVhZCBlcnJvciBhbmRcbitcdCAqIHN0YXR1c19jb2RlIHVuZGVyIHRoZSBzYW1lIGxvY2sg4oCUIGFmdGVyIGh3Y19jdHhfcHV0IHRoZSBzbG90XG4rXHQgKiBtYXkgYmUgcmV1c2VkIGFuZCB0aGVzZSBmaWVsZHMgb3ZlcndyaXR0ZW4uXG4rXHQgKi9cbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRjdHgtXHUwMDNlb3V0cHV0X2J1ZiA9IE5VTEw7XG4rXHRlcnIgPSBjdHgtXHUwMDNlZXJyb3I7XG4rXHRzdGF0dXMgPSBjdHgtXHUwMDNlc3RhdHVzX2NvZGU7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRod2NfY3R4X3B1dChod2MsIGN0eCk7XG4rXG4rY2hlY2tfc3RhdHVzOlxuK1x0aWYgKGVycilcbitcdFx0Z290byBkb25lO1xuIFxuLVx0aWYgKGN0eC1cdTAwM2VzdGF0dXNfY29kZSBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZXN0YXR1c19jb2RlICE9IEdETUFfU1RBVFVTX01PUkVfRU5UUklFUykge1xuLVx0XHRpZiAoY3R4LVx1MDAzZXN0YXR1c19jb2RlID09IEdETUFfU1RBVFVTX0NNRF9VTlNVUFBPUlRFRCkge1xuK1x0aWYgKHN0YXR1cyBcdTAwMjZcdTAwMjYgc3RhdHVzICE9IEdETUFfU1RBVFVTX01PUkVfRU5UUklFUykge1xuK1x0XHRpZiAoc3RhdHVzID09IEdETUFfU1RBVFVTX0NNRF9VTlNVUFBPUlRFRCkge1xuIFx0XHRcdGVyciA9IC1FT1BOT1RTVVBQO1xuLVx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdGdvdG8gZG9uZTtcbiBcdFx0fVxuK1xuIFx0XHRpZiAoY29tbWFuZCAhPSBNQU5BX1FVRVJZX1BIWV9TVEFUKVxuIFx0XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJDb21tYW5kIDB4JXggZmFpbGVkIHdpdGggc3RhdHVzOiAweCV4XFxuXCIsXG4tXHRcdFx0XHRjb21tYW5kLCBjdHgtXHUwMDNlc3RhdHVzX2NvZGUpO1xuK1x0XHRcdFx0Y29tbWFuZCwgc3RhdHVzKTtcbiBcdFx0ZXJyID0gLUVQUk9UTztcbi1cdFx0Z290byBvdXQ7XG4rXHRcdGdvdG8gZG9uZTtcbiBcdH1cbitcbitcdGVyciA9IDA7XG4rXHRnb3RvIGRvbmU7XG4gb3V0OlxuLVx0bWFuYV9od2NfcHV0X21zZ19pbmRleChod2MsIG1zZ19pZCk7XG4rXHQvKiBQcmUtcG9zdCBlcnJvciBwYXRoczogbm8gV1FFIHdhcyBzdWJtaXR0ZWQgc28gaGFuZGxlX3Jlc3AoKVxuK1x0ICogY2Fubm90IHJhY2UgaGVyZS4gIHJlZmNvdW50IGlzIDEgKG5vIHNlY29uZCByZWYgdGFrZW4pLlxuK1x0ICovXG4rXHRjdHggPSBod2MtXHUwMDNlY2FsbGVyX2N0eCArIG1zZ19pZDtcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRjdHgtXHUwMDNlb3V0cHV0X2J1ZiA9IE5VTEw7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRod2NfY3R4X3B1dChod2MsIGN0eCk7XG4rZG9uZTpcbiBcdHJldHVybiBlcnI7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xuaW5kZXggYThjMzI5YmRiYWNmODMuLjU1MDg3NDY1OTBlN2NkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbkBAIC0yNjQ4LDYgKzI2NDgsNyBAQCBzdGF0aWMgaW50IG1hbmFfY3JlYXRlX3R4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbiBcdHN0cnVjdCBtYW5hX29ial9zcGVjIGNxX3NwZWM7XG4gXHRzdHJ1Y3QgZ2RtYV9xdWV1ZV9zcGVjIHNwZWM7XG4gXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYztcbitcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqY3FfdGFibGU7XG4gXHRzdHJ1Y3QgbWFuYV90eHEgKnR4cTtcbiBcdHN0cnVjdCBtYW5hX2NxICpjcTtcbiBcdHUzMiB0eHFfc2l6ZTtcbkBAIC0yNzUzLDEyICsyNzU0LDE4IEBAIHN0YXRpYyBpbnQgbWFuYV9jcmVhdGVfdHhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuIFxuIFx0XHRjcS1cdTAwM2VnZG1hX2lkID0gY3EtXHUwMDNlZ2RtYV9jcS1cdTAwM2VpZDtcbiBcbi1cdFx0aWYgKFdBUk5fT04oY3EtXHUwMDNlZ2RtYV9pZCBcdTAwM2U9IGdjLVx1MDAzZW1heF9udW1fY3FzKSkge1xuK1x0XHQvKiBObyByY3VfcmVhZF9sb2NrKCk6IG1hbmFfY3JlYXRlX3R4cSBydW5zIHVuZGVyIFJUTkwgZHVyaW5nXG4rXHRcdCAqIG5ldGRldiBicmluZy11cCwgaW5zaWRlIHRoZSBuZXRkZXYgbGlmZXRpbWUgdGhhdFxuK1x0XHQgKiBtYW5hX3JlbW92ZSgpIGRyYWlucyBiZWZvcmUgdGhlIGJhc2UgY3FfdGFibGUgY2FuIGJlIGZyZWVkLlxuK1x0XHQgKiBTZWUgZ2RtYV9jb250ZXh0OjpjcV90YWJsZSBpbiBnZG1hLmggZm9yIHdoeSBcInRydWVcIiBpcyBzb3VuZC5cbitcdFx0ICovXG4rXHRcdGNxX3RhYmxlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnYy1cdTAwM2VjcV90YWJsZSwgdHJ1ZSk7XG4rXHRcdGlmIChXQVJOX09OKCFjcV90YWJsZSB8fCBjcS1cdTAwM2VnZG1hX2lkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMpKSB7XG4gXHRcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRnYy1cdTAwM2VjcV90YWJsZVtjcS1cdTAwM2VnZG1hX2lkXSA9IGNxLVx1MDAzZWdkbWFfY3E7XG4rXHRcdHJjdV9hc3NpZ25fcG9pbnRlcihjcV90YWJsZVtjcS1cdTAwM2VnZG1hX2lkXSwgY3EtXHUwMDNlZ2RtYV9jcSk7XG4gXG4gXHRcdG1hbmFfY3JlYXRlX3R4cV9kZWJ1Z2ZzKGFwYywgaSk7XG4gXG5AQCAtMjk4Niw2ICsyOTkzLDcgQEAgc3RhdGljIHN0cnVjdCBtYW5hX3J4cSAqbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuIFx0c3RydWN0IGdkbWFfcXVldWVfc3BlYyBzcGVjO1xuIFx0c3RydWN0IG1hbmFfY3EgKmNxID0gTlVMTDtcbiBcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjO1xuK1x0c3RydWN0IGdkbWFfcXVldWUgX19yY3UgKipjcV90YWJsZTtcbiBcdHUzMiBjcV9zaXplLCBycV9zaXplO1xuIFx0c3RydWN0IG1hbmFfcnhxICpyeHE7XG4gXHRpbnQgZXJyO1xuQEAgLTMwNzUsMTIgKzMwODMsMTggQEAgc3RhdGljIHN0cnVjdCBtYW5hX3J4cSAqbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoV0FSTl9PTihjcS1cdTAwM2VnZG1hX2lkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMpKSB7XG4rXHQvKiBObyByY3VfcmVhZF9sb2NrKCk6IG1hbmFfY3JlYXRlX3J4cSBydW5zIHVuZGVyIFJUTkwgZHVyaW5nIG5ldGRldlxuK1x0ICogYnJpbmctdXAsIGluc2lkZSB0aGUgbmV0ZGV2IGxpZmV0aW1lIHRoYXQgbWFuYV9yZW1vdmUoKSBkcmFpbnNcbitcdCAqIGJlZm9yZSB0aGUgYmFzZSBjcV90YWJsZSBjYW4gYmUgZnJlZWQuICBTZWUgZ2RtYV9jb250ZXh0OjpjcV90YWJsZVxuK1x0ICogaW4gZ2RtYS5oIGZvciB3aHkgXCJ0cnVlXCIgaXMgc291bmQuXG4rXHQgKi9cbitcdGNxX3RhYmxlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnYy1cdTAwM2VjcV90YWJsZSwgdHJ1ZSk7XG4rXHRpZiAoV0FSTl9PTighY3FfdGFibGUgfHwgY3EtXHUwMDNlZ2RtYV9pZCBcdTAwM2U9IGdjLVx1MDAzZW1heF9udW1fY3FzKSkge1xuIFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGdjLVx1MDAzZWNxX3RhYmxlW2NxLVx1MDAzZWdkbWFfaWRdID0gY3EtXHUwMDNlZ2RtYV9jcTtcbitcdHJjdV9hc3NpZ25fcG9pbnRlcihjcV90YWJsZVtjcS1cdTAwM2VnZG1hX2lkXSwgY3EtXHUwMDNlZ2RtYV9jcSk7XG4gXG4gXHRuZXRpZl9uYXBpX2FkZF93ZWlnaHRfbG9ja2VkKG5kZXYsIFx1MDAyNmNxLVx1MDAzZW5hcGksIG1hbmFfcG9sbCwgMSk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmggYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuaW5kZXggODUyOWNlZjBkN2M0NTIuLmE0ZWFjNmY3YzM2NjA5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcbisrKyBiL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXG5AQCAtNDI4LDkgKzQyOCwzNCBAQCBzdHJ1Y3QgZ2RtYV9jb250ZXh0IHtcbiBcdC8qIEwyIE1UVSAqL1xuIFx0dTE2IGFkYXB0ZXJfbXR1O1xuIFxuLVx0LyogVGhpcyBtYXBzIGEgQ1EgaW5kZXggdG8gdGhlIHF1ZXVlIHN0cnVjdHVyZS4gKi9cbitcdC8qIFNpemUgb2YgY3FfdGFibGUsIGkuZS4gdGhlIGxhcmdlc3QgdmFsaWQgQ1EgaW5kZXggKyAxLiAgU2V0IG9uY2VcbitcdCAqIHdoZW4gY3FfdGFibGUgaXMgYWxsb2NhdGVkIGFuZCB0cmVhdGVkIGFzIGltbXV0YWJsZSBmb3IgdGhlXG4rXHQgKiB0YWJsZSdzIGxpZmV0aW1lIChhIGJvdW5kIG9ubHkpIC0tIGl0IGlzIG5ldmVyIHJlc2V0IG9uIHRlYXJkb3duLlxuK1x0ICogY3FfdGFibGUgPT0gTlVMTCBpcyB0aGUgc29sZSBcInRhYmxlIHRvcm4gZG93blwiIHNpZ25hbCwgc28gZXZlcnlcbitcdCAqIGNxX3RhYmxlW2lkXSBhY2Nlc3MgbXVzdCBndWFyZCB3aXRoIGJvdGggIWNxX3RhYmxlIChnb25lKSBhbmRcbitcdCAqIGlkIFx1MDAzZT0gbWF4X251bV9jcXMgKG91dCBvZiBib3VuZHMpLlxuK1x0ICovXG4gXHR1bnNpZ25lZCBpbnRcdFx0bWF4X251bV9jcXM7XG4tXHRzdHJ1Y3QgZ2RtYV9xdWV1ZVx0KipjcV90YWJsZTtcbitcdC8qIEJvdGggdGhlIGJhc2UgcG9pbnRlciBhbmQgZWFjaCBlbnRyeSBhcmUgUkNVLW1hbmFnZWQuICBUaGUgZmFzdFxuK1x0ICogcGF0aCAobWFuYV9nZF9wcm9jZXNzX2VxZSkgcmVhZHMgdGhlIGJhc2UgdmlhIHJjdV9kZXJlZmVyZW5jZSgpXG4rXHQgKiB1bmRlciByY3VfcmVhZF9sb2NrKCksIHNvIHRoZSB0YWJsZSBpcyBmcmVlZCB3aXRoXG4rXHQgKiByY3VfYXNzaWduX3BvaW50ZXIoTlVMTCkgKyBzeW5jaHJvbml6ZV9yY3UoKSBhbmQgYW4gaW4tZmxpZ2h0XG4rXHQgKiByZWFkZXIgY2FuIG5ldmVyIG9ic2VydmUgZnJlZWQgbWVtb3J5LlxuK1x0ICpcbitcdCAqIFRoZSBzbG93IHBhdGhzIC0tIG1hbmFfZ2RfZGVzdHJveV9jcSgpIGFuZCB0aGUgQ1EgaW5zdGFsbC9yZW1vdmVcbitcdCAqIGNhbGxlcnMgKG1hbmFfY3JlYXRlX3R4cS9fcnhxLCBtYW5hX2liX2luc3RhbGwvcmVtb3ZlX2NxX2NiKSAtLVxuK1x0ICogaW5zdGVhZCByZWFkIHRoZSBiYXNlIHdpdGggcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjcV90YWJsZSxcbitcdCAqIHRydWUpLiAgVGhlIGJhcmUgXCJ0cnVlXCIgaXMganVzdGlmaWVkIGJ5IHRlYXJkb3duIG9yZGVyaW5nLCBub3QgYnlcbitcdCAqIGEgbG9jazogdGhlIGJhc2UgdGFibGUgaXMgcmVwbGFjZWQrZnJlZWQgb25seSBieVxuK1x0ICogbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKCkgKGFuZCB0aGUgY3JlYXRlLXRpbWUgcmVpbml0KSwgYW5kIGV2ZXJ5XG4rXHQgKiB0ZWFyZG93biBwYXRoIGZpcnN0IHJ1bnMgbWFuYV9yZW1vdmUoKSArIG1hbmFfcmRtYV9yZW1vdmUoKSwgd2hpY2hcbitcdCAqIHN5bmNocm9ub3VzbHkgZHJhaW4gdGhlIG5ldGRldiBhbmQgdGhlIElCIGRldmljZVxuK1x0ICogKHVucmVnaXN0ZXJfbmV0ZGV2aWNlIC8gaWJfdW5yZWdpc3Rlcl9kZXZpY2UpIHRoYXQgYm91bmQgYWxsXG4rXHQgKiBpbnN0YWxsL3JlbW92ZSBjYWxsZXJzOyB0aGUgcmVpbml0IGNhc2UgcnVucyBiZWZvcmUgZWl0aGVyXG4rXHQgKiBjb25zdW1lciBpcyBwcm9iZWQuICBTbyBubyBzbG93LXBhdGggY2FsbGVyIGNhbiBydW4gd2hpbGUgdGhlIGJhc2VcbitcdCAqIHRhYmxlIGlzIGJlaW5nIGZyZWVkLlxuK1x0ICovXG4rXHRzdHJ1Y3QgZ2RtYV9xdWV1ZVx0X19yY3UgKiBfX3JjdSAqY3FfdGFibGU7XG4gXG4gXHQvKiBQcm90ZWN0IGVxX3Rlc3RfZXZlbnQgYW5kIHRlc3RfZXZlbnRfZXFfaWQgICovXG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0ZXFfdGVzdF9ldmVudF9tdXRleDtcbkBAIC00NTYsNiArNDgxLDIxIEBAIHN0cnVjdCBnZG1hX2NvbnRleHQge1xuIFx0LyogSGFyZHdhcmUgY29tbXVuaWNhdGlvbiBjaGFubmVsIChIV0MpICovXG4gXHRzdHJ1Y3QgZ2RtYV9kZXZcdFx0aHdjO1xuIFxuK1x0LyogZGVzdHJveV9jaGFubmVsKCkgd2FpdHMgaGVyZSBmb3IgYWxsIEhXQyBzZW5kZXJzIHRvIGV4aXQuXG4rXHQgKiBMaXZlcyBvbiBnYyAobm90IGh3Yykgc28gd2FrZV91cCgpIGFmdGVyIHRoZSBsYXN0IHNlbmRlcidzXG4rXHQgKiBhdG9taWNfZGVjIGRvZXNuJ3QgZGVyZWZlcmVuY2UgZnJlZWQgaHdjIG1lbW9yeS5cbitcdCAqL1xuK1x0d2FpdF9xdWV1ZV9oZWFkX3RcdGh3Y19kcmFpbl93YWl0cTtcbitcbitcdC8qIFNlcmlhbGl6ZXMgaHdjLmRyaXZlcl9kYXRhICh0aGUgaHdfY2hhbm5lbF9jb250ZXh0IHBvaW50ZXIpXG4rXHQgKiBiZXR3ZWVuIHRoZSBjb250cm9sLXBsYW5lIHJlYWRlcnMgaW4gbWFuYV9nZF9zZW5kX3JlcXVlc3QoKSxcbitcdCAqIG1hbmFfbmVlZF9sb2coKSBhbmQgbWFuYV9zZXJ2X3Jlc2V0KCkgYW5kIHRoZSBwdWJsaXNoL2NsZWFyIGluXG4rXHQgKiBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbCgpL21hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbCgpLiAgQWxsIHVzZXJzXG4rXHQgKiBhcmUgY29udHJvbC1wbGFuZSAoSFdDIGNvbW1hbmRzIHNsZWVwOyByZXNldCBydW5zIG9uIGEgd29ya3F1ZXVlKSxcbitcdCAqIHNvIGEgcGxhaW4gc3BpbmxvY2sgLS0gbm90IFJDVSAtLSBpcyBzdWZmaWNpZW50LlxuK1x0ICovXG4rXHRzcGlubG9ja190XHRcdGh3Y19sb2NrO1xuK1xuIFx0LyogQXp1cmUgbmV0d29yayBhZGFwdGVyICovXG4gXHRzdHJ1Y3QgZ2RtYV9kZXZcdFx0bWFuYTtcbiBcbkBAIC02NjgsNiArNzA4LDkgQEAgZW51bSB7XG4gLyogRHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgaW50ZXJydXB0IG1vZGVyYXRpb24gLSBESU0gKi9cbiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0lOVEVSUlVQVF9NT0RFUkFUSU9OIEJJVCgyOClcbiBcbisvKiBEcml2ZXIgc3VwcG9ydHMgZHluYW1pYyBxdWV1ZSBkZXB0aCBmb3IgSFdDICovXG4rI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR18xX0RZTl9IV0NfUVVFVUVfREVQVEggQklUKDI5KVxuK1xuICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdTMSBcXFxuIFx0KEdETUFfRFJWX0NBUF9GTEFHXzFfRVFfU0hBUklOR19NVUxUSV9WUE9SVCB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9OQVBJX1dLRE9ORV9GSVggfCBcXFxuQEAgLTY4Myw2ICs3MjYsNyBAQCBlbnVtIHtcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX1BST0JFX1JFQ09WRVJZIHwgXFxcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0hBTkRMRV9TVEFMTF9TUV9SRUNPVkVSWSB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9IV0NfVElNRU9VVF9SRUNPVkVSWSB8IFxcXG4rXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSFdDX1FVRVVFX0RFUFRIIHwgXFxcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0VRX01TSV9VTlNIQVJFX01VTFRJX1ZQT1JUIHwgXFxcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0RZTl9JTlRFUlJVUFRfTU9ERVJBVElPTilcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYW5hL2h3X2NoYW5uZWwuaCBiL2luY2x1ZGUvbmV0L21hbmEvaHdfY2hhbm5lbC5oXG5pbmRleCAxNmZlYjM5NjE2YzFiZS4uZWVjNWQzYWEyM2UxZDUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tYW5hL2h3X2NoYW5uZWwuaFxuKysrIGIvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmhcbkBAIC0xNjQsNiArMTY0LDkgQEAgc3RydWN0IGh3Y193cSB7XG4gXHR1MTYgcXVldWVfZGVwdGg7XG4gXG4gXHRzdHJ1Y3QgaHdjX2NxICpod2NfY3E7XG4rXG4rXHQvKiBTZXJpYWxpemVzIGNvbmN1cnJlbnQgbWFuYV9nZF9wb3N0X2FuZF9yaW5nKCkgY2FsbHMuICovXG4rXHRzcGlubG9ja190IGxvY2s7XG4gfTtcbiBcbiBzdHJ1Y3QgaHdjX2NhbGxlcl9jdHgge1xuQEAgLTE3Myw2ICsxNzYsMTcgQEAgc3RydWN0IGh3Y19jYWxsZXJfY3R4IHtcbiBcbiBcdHUzMiBlcnJvcjsgLyogTGludXggZXJyb3IgY29kZSAqL1xuIFx0dTMyIHN0YXR1c19jb2RlO1xuK1xuK1x0LyogUHJvdGVjdHMgb3V0cHV0X2J1ZiBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzIGZyb21cbitcdCAqIGhhbmRsZV9yZXNwKCkgKENRIGludGVycnVwdCkgYW5kIHRoZSBzZW5kZXIgdGltZW91dCBwYXRoLlxuK1x0ICovXG4rXHRzcGlubG9ja190IGxvY2s7XG4rXG4rXHQvKiBUcmFja3Mgc2VuZGVyICsgaGFuZGxlX3Jlc3Agb3duZXJzaGlwLiAgVGhlIGxhc3QgcHV0XG4rXHQgKiAocmVmY291bnQgcmVhY2hlcyAwKSByZWxlYXNlcyB0aGUgYml0bWFwIHNsb3QuXG4rXHQgKi9cbitcdHJlZmNvdW50X3QgcmVmY250O1xuK1x0dTE2IG1zZ19pZDtcbiB9O1xuIFxuIHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQge1xuQEAgLTE4MSw4ICsxOTUsOSBAQCBzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0IHtcbiBcbiBcdHUxNiBudW1faW5mbGlnaHRfbXNnO1xuIFx0dTMyIG1heF9yZXFfbXNnX3NpemU7XG4rXHR1MzIgbWF4X3Jlc3BfbXNnX3NpemU7XG4gXG4tXHR1MTYgaHdjX2luaXRfcV9kZXB0aF9tYXg7XG4rXHR1MzIgaHdjX2luaXRfcV9kZXB0aF9tYXg7XG4gXHR1MzIgaHdjX2luaXRfbWF4X3JlcV9tc2dfc2l6ZTtcbiBcdHUzMiBod2NfaW5pdF9tYXhfcmVzcF9tc2dfc2l6ZTtcbiBcbkBAIC0xOTIsMTMgKzIwNywzOCBAQCBzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0IHtcbiBcdHN0cnVjdCBod2Nfd3EgKnR4cTtcbiBcdHN0cnVjdCBod2NfY3EgKmNxO1xuIFxuLVx0c3RydWN0IHNlbWFwaG9yZSBzZW1hO1xuIFx0c3RydWN0IGdkbWFfcmVzb3VyY2UgaW5mbGlnaHRfbXNnX3JlcztcbitcdC8qIFdhaXRxdWV1ZSBmb3Igc2VuZGVycyBibG9ja2VkIG9uIGEgZnVsbCBpbmZsaWdodCBiaXRtYXAuICovXG4rXHR3YWl0X3F1ZXVlX2hlYWRfdCBtc2dfd2FpdHE7XG4gXG4gXHR1MzIgcGZfZGVzdF92cnFfaWQ7XG4gXHR1MzIgcGZfZGVzdF92cmNxX2lkO1xuIFx0dTMyIGh3Y190aW1lb3V0O1xuIFxuK1x0LyogU2V0IGFmdGVyIGNoYW5uZWwgaXMgZnVsbHkgZXN0YWJsaXNoZWQ7IGNsZWFyZWQgb24gdGVhcmRvd24gdG9cbitcdCAqIGFib3J0IHdhaXRlcnMgaW4gbWFuYV9od2NfZ2V0X21zZ19pbmRleCgpIGFuZCByZWplY3QgbmV3IHNlbmRzLlxuK1x0ICovXG4rXHRib29sIGNoYW5uZWxfdXA7XG4rXG4rXHQvKiBTZXQgb24gZmlyc3QgSFdDIHRpbWVvdXQuICBDYXVzZXMgZ2V0X21zZ19pbmRleCgpIHRvIHJldHVyblxuK1x0ICogLUVUSU1FRE9VVCBpbnN0ZWFkIG9mIHdhaXRpbmcsIGRyYWluaW5nIGFsbCBxdWV1ZWQgc2VuZGVycy5cbitcdCAqL1xuK1x0Ym9vbCBod2NfdGltZWRfb3V0O1xuK1xuK1x0LyogU2V0IGFmdGVyIG1hbmFfc21jX3NldHVwX2h3YygpIHN1Y2NlZWRzIChoYXJkd2FyZSBoYXMgYWN0aXZlXG4rXHQgKiBNU1QgZW50cmllcykuICBPbiByZWNvdmVyYWJsZSBwYXRocyAoZXN0YWJsaXNoX2NoYW5uZWwpXG4rXHQgKiBjbGVhcmVkIG9ubHkgYWZ0ZXIgc3VjY2Vzc2Z1bCB0ZWFyZG93biBzbyBhIHJldHJ5IHJlbWFpbnNcbitcdCAqIHBvc3NpYmxlLiAgT24gdGhlIHRlcm1pbmFsIGRlc3Ryb3lfY2hhbm5lbCBwYXRoLCBjbGVhcmVkXG4rXHQgKiB1bmNvbmRpdGlvbmFsbHkgc2luY2UgaHdjIGlzIGFib3V0IHRvIGJlIGZyZWVkLlxuK1x0ICovXG4rXHRib29sIHNldHVwX2FjdGl2ZTtcbitcbitcdC8qIENvdW50IG9mIGluLWZsaWdodCBtYW5hX2dkX3NlbmRfcmVxdWVzdCgpIGNhbGxlcnMuICBQcm90ZWN0ZWRcbitcdCAqIGJ5IGdjLVx1MDAzZWh3Y19sb2NrOyB0aGUgbGFzdCBzZW5kZXIgdG8gZHJvcCBpdCB0byB6ZXJvIHdha2VzXG4rXHQgKiBnYy1cdTAwM2Vod2NfZHJhaW5fd2FpdHEgZm9yIHRoZSBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoKSBkcmFpbi5cbitcdCAqL1xuK1x0dW5zaWduZWQgaW50IGFjdGl2ZV9zZW5kZXJzO1xuK1xuIFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjYWxsZXJfY3R4O1xuIH07XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNzo1MjoyMS42ODcyOTI3NjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzQ5NDA1MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTUFOQSBEcml2ZXIgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUgdGhhdCdzIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyLCB0aGUgTUFOQSBkcml2ZXIuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGRyaXZlciBpcyBiZWluZyB0b3VjaGVkOyBJJ20gc2VlaW5nIG1vZGlmaWNhdGlvbnMgaW4gYGNxLmNgLCBgZ2RtYV9tYWluLmNgLCBgaHdfY2hhbm5lbC5jYCwgYW5kIGBtYW5hX2VuLmNgLCBhbG9uZyB3aXRoIHNvbWUgaGVhZGVyIGZpbGUgdXBkYXRlcyBpbiBgZ2RtYS5oYCBhbmQgYGh3X2NoYW5uZWwuaGAuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoYXQgbGlzdCBvZiBmaWxlcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSBhIHN1YnN0YW50aWFsIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5MZXQncyBxdWlja2x5IGFzc2VzcyB0aGUgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgc2NvcGUuIEFoLCB5ZXMsIEknbSBzZWVpbmcgUkNVIHByb3RlY3Rpb24gYWRkZWQgZm9yIGBjcV90YWJsZWAsIGNoYW5nZXMgdG8gc3BpbmxvY2tzLCB0aW1lb3V0IGhhbmRsaW5nIGltcHJvdmVtZW50cywgcmVmY291bnQgbWFuYWdlbWVudCBmb3IgYGh3Y19jYWxsZXJfY3R4YCwgYW5kIGhhbmRsaW5nIG9mIEhXQyByZWluaXRpYWxpemF0aW9uLiBUaGF0J3MgYSBwcmV0dHkgc2lnbmlmaWNhbnQgbGF1bmRyeSBsaXN0LiBUaGlzIGlzbid0IGp1c3QgYSBtaW5vciB0d2VhazsgdGhpcyBpcyBhIGZ1bmRhbWVudGFsIHJld29yayBvZiBzb21lIGtleSBzeW5jaHJvbml6YXRpb24gYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgY29tcG9uZW50cyB3aXRoaW4gdGhlIE1BTkEgZHJpdmVyLiBUaGVzZSB0eXBlcyBvZiBjaGFuZ2VzIGFsbW9zdCBhbHdheXMgaW50cm9kdWNlIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSwgaGFyZC10by1kZWJ1ZyByZWdyZXNzaW9ucywgc28gdGhvcm91Z2ggdGVzdGluZyBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRyaXZlci4gSSdtIGdvaW5nIHRvIHNlYXJjaCB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3Igc29tZXRoaW5nIGxpa2UgYE1JQ1JPU09GVF9NQU5BYCBvciBhIHNpbWlsYXIgY29uZmlndXJhdGlvbiBzeW1ib2wgdG8gZmlndXJlIG91dCBob3cgdGhpcyBkcml2ZXIgaXMgZW5hYmxlZCBhbmQgaWYgYW55IG5ldyBvcHRpb25zIGhhdmUgYmVlbiBpbnRyb2R1Y2VkIHdpdGggdGhpcyBwYXRjaC4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBpcyB2aXRhbCB0byBwcm9wZXJseSBpbnRlZ3JhdGUgdGhpcyBwYXRjaCBzZXJpZXMsIG9yIHRvIGV2ZW4ganVzdCB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTYyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTc6NTI6MjguMDM2NzAxMzE0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDQ0NDMwMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUlDUk9TT0ZUX01BTkFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvS2NvbmZpZz0yPWNvbmZpZyBNQU5BX0lORklOSUJBTkRcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBORVRERVZJQ0VTIFxcdTAwMjZcXHUwMDI2IEVUSEVSTkVUIFxcdTAwMjZcXHUwMDI2IFBDSSBcXHUwMDI2XFx1MDAyNiBNSUNST1NPRlRfTUFOQVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWctNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZz0xNj1pZiBORVRfVkVORE9SX01JQ1JPU09GVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTE3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnOjE4OmNvbmZpZyBNSUNST1NPRlRfTUFOQVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTE5LVxcdHRyaXN0YXRlIFxcXCJNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L01ha2VmaWxlLTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX01JQ1JPU09GVF9NQU5BKSArPSBtYW5hL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGUtNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19NSUNST1NPRlRfTUFOQSkgKz0gbWFuYS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGUtNi1tYW5hLW9ianMgOj0gZ2RtYV9tYWluLm8gc2htX2NoYW5uZWwubyBod19jaGFubmVsLm8gbWFuYV9lbi5vIG1hbmFfZXRodG9vbC5vIG1hbmFfYnBmLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTc6NTI6MzMuMDgxMTU0MDQ3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgyNTU2MDc2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgdGhlIE1BTkEgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gZnV6emluZy4gVGhlIGtleSBoZXJlIGlzIHRoZSBgTUlDUk9TT0ZUX01BTkFgIGFuZCBgTUFOQV9JTkZJTklCQU5EYCBjb25maWdzLCB0aGV5IHdpbGwgZ3VpZGUgdXMgb24gd2hldGhlciB0aGlzIGlzIGJ1aWx0IGFzIGEgbW9kdWxlIG9yIGJ1aWx0IGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhlIHRhcmdldCBmdW5jdGlvbnMgYXJlIHdpdGhpbiB0aGUgY29kZSwgc28gbGV0J3MgbGlzdCB0aG9zZS4gVGhlIHBhdGNoIHRvdWNoZXMgYSBnb29kIGNodW5rIG9mIHRoZSBkcml2ZXIsIHNwZWNpZmljYWxseTogYG1hbmFfaWJfaW5zdGFsbF9jcV9jYmAsIGBtYW5hX2liX3JlbW92ZV9jcV9jYmAsIGBtYW5hX25lZWRfbG9nYCwgYG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0YCwgYG1hbmFfc2Vydl9yZXNldGAsIGBtYW5hX2dkX3Byb2Nlc3NfZXFlYCwgYG1hbmFfZ2RfZGVzdHJveV9jcWAsIGBtYW5hX2dkX2NyZWF0ZV9kbWFfcmVnaW9uYCwgYG1hbmFfZ2RfdmVyaWZ5X3ZmX3ZlcnNpb25gLCBgbWFuYV9nZF9wcm9iZWAsIGBtYW5hX2h3Y19nZXRfbXNnX2luZGV4YCwgYG1hbmFfaHdjX3B1dF9tc2dfaW5kZXhgLCBgaHdjX2N0eF9wdXRgLCBgbWFuYV9od2NfaGFuZGxlX3Jlc3BgLCBgbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyYCwgYG1hbmFfaHdjX3J4X2V2ZW50X2hhbmRsZXJgLCBgbWFuYV9od2NfZGVzdHJveV9jcWAsIGBtYW5hX2h3Y19jcmVhdGVfd3FgLCBgbWFuYV9od2NfcG9zdF90eF93cWVgLCBgbWFuYV9od2NfaW5pdF9pbmZsaWdodF9tc2dgLCBgbWFuYV9od2NfdGVzdF9jaGFubmVsYCwgYG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsYCwgYG1hbmFfaHdjX2luaXRfcXVldWVzYCwgYG1hbmFfaHdjX2Rlc3Ryb3lfcXVldWVzYCwgYG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsYCwgYG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbGAsIGBtYW5hX2h3Y19zZW5kX3JlcXVlc3RgLCBgbWFuYV9jcmVhdGVfdHhxYCwgYW5kIGBtYW5hX2NyZWF0ZV9yeHFgLiBUaGF0J3MgYSBsb3QsIHNvIEknbGwgbmVlZCB0byBwcmlvcml0aXplLlxuXG5MZXQncyBwaWNrIGEgZmV3IHByb21pc2luZyBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCBhbmQgSSBzaG91bGQgZm9jdXMgb24gZW50cnkgcG9pbnRzIGZyb20gdXNlcnNwYWNlIG9yIHRob3NlIHRoYXQgaGFuZGxlIGNvbXBsZXggaW50ZXJhY3Rpb24uICBJJ2xsIHBpY2s6IGBtYW5hX2h3Y19zZW5kX3JlcXVlc3RgLCBgbWFuYV9od2NfaGFuZGxlX3Jlc3BgLCBgbWFuYV9od2NfcnhfZXZlbnRfaGFuZGxlcmAsIGBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbGAsIGBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWxgLCBgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWxgLCBgbWFuYV9od2NfdGVzdF9jaGFubmVsYCwgYG1hbmFfaHdjX2dldF9tc2dfaW5kZXhgLCBgbWFuYV9od2NfcHV0X21zZ19pbmRleGAsIGBtYW5hX2dkX3NlbmRfcmVxdWVzdGAsIGBtYW5hX2dkX3Byb2Nlc3NfZXFlYCwgYG1hbmFfaWJfaW5zdGFsbF9jcV9jYmAsIGFuZCBgbWFuYV9pYl9yZW1vdmVfY3FfY2JgLlxuXG5Ob3csIHRoZSBiaWcgcXVlc3Rpb246IElzIHRoaXMgZHJpdmVyIGV2ZW4gcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IE1BTkEgaXMgYSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyLCBzbyBpdCdzIGEgUENJIGRldmljZS4gIFR5cGljYWxseSwgSSdkIGxvb2sgZm9yIHN5emthbGxlciBzdXBwb3J0IHZpYSB2aGNpIG9yIGEgc2ltaWxhciBwc2V1ZG8tZGV2aWNlIGlmIHRoZSBoYXJkd2FyZSBpcyBlbXVsYXRlZC4gU3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhIHNwZWNpZmljIE1BTkEgZW11bGF0b3IsIHNvIEkgd2FzIGNvbmNlcm5lZCBpdCB3b3VsZG4ndCBiZSBwb3NzaWJsZSBhdCBmaXJzdC5cblxuQnV0IHdhaXQsIFBDSSBkcml2ZXJzIGNhbiBiZSBmdXp6ZWQgdXNpbmcgYHN5el9wY2lfdnBjaWAgYW5kIHNpbWlsYXIuIFRoZSB0ZXh0IHNheXMgd2UgbWF5IGJlIGFibGUgdG8gcmVhY2ggZXZlbiBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gSSdtIHNlZWluZyBcInN5ei1jbHVzdGVyXCIgYXMgdGhlIGF1dGhvciwgd2hpY2ggc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBzeXprYWxsZXIgaXMgYWN0aXZlbHkgd29ya2luZyBvbiBvciBoYXMgZm91bmQgc29tZXRoaW5nIHRvIGZ1enogaW4gdGhpcyBjb2RlISBTaW5jZSBpdCBpcyBhIHBhdGNoIGJlaW5nIHRlc3RlZCBieSBzeXprYWxsZXIgaXQgaXMgd29ydGggaXQuIFN5emthbGxlciBjYW4gZnV6eiBhbnkgUENJIGRyaXZlciBieSBiaW5kaW5nIGl0IHRvIHRoZSB2aGNpIG9yIHBjaSBwc2V1ZG8tZGV2aWNlIGFuZCBwcm92aWRpbmcgcmFuZG9tIE1NSU8vRE1BIHJlc3BvbnNlcy5cblxuT2theSwgbGV0J3MgY29uZmlybSB0aGUgY29uZmlncyBhZ2FpbiwgYmVjYXVzZSBpdCdzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLiBZdXAsIGp1c3QgYE1JQ1JPU09GVF9NQU5BYCBhbmQgYE1BTkFfSU5GSU5JQkFORGAuXG5cbkxldCdzIHJlZmluZSB0aGUgRm9jdXNTeW1ib2xzIHRvIHRoZSBpbXBvcnRhbnQgb25lczogYG1hbmFfaHdjX3NlbmRfcmVxdWVzdGAsIGBtYW5hX2h3Y19oYW5kbGVfcmVzcGAsIGBtYW5hX2h3Y19yeF9ldmVudF9oYW5kbGVyYCwgYG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsYCwgYG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbGAsIGBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbGAsIGBtYW5hX2h3Y19kZXN0cm95X3F1ZXVlc2AsIGBtYW5hX2dkX3Byb2Nlc3NfZXFlYCwgYG1hbmFfaWJfaW5zdGFsbF9jcV9jYmAsIGBtYW5hX2liX3JlbW92ZV9jcV9jYmAsIGFuZCBgbWFuYV9od2NfZ2V0X21zZ19pbmRleGAuXG5cbkdvb2QuIE5vdywgSSBzaG91bGQgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlncyB0aGF0IHdvdWxkIGluZmx1ZW5jZSB0aGUgYnVpbGQgb3IgZnVuY3Rpb25hbGl0eSBJJ20gbWlzc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwOTgsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE3OjUyOjUxLjMzNjc3OTY0NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTMyNDg5NDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQU5BXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9LY29uZmlnOjI6Y29uZmlnIE1BTkFfSU5GSU5JQkFORFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9wb3dlci9zdXBwbHkvS2NvbmZpZz0yOTM9Y29uZmlnIENIQVJHRVJfU0JTXFxuLS1cXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnLTI5OS1cXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnOjMwMDpjb25maWcgTUFOQUdFUl9TQlNcXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnLTMwMS1cXHR0cmlzdGF0ZSBcXFwiU21hcnQgQmF0dGVyeSBTeXN0ZW0gTWFuYWdlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTc6NTI6NTMuODY5Mjc3MDA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk2NDkyMDA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEZWVwIERpdmUgaW50byBNQU5BIEluZmluaWJhbmQgRnVuY3Rpb25hbGl0eSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSB3aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBUaGUgY29uZmlndXJhdGlvbiBjb250ZXh0IGlzIGNsZWFybHkgZm9jdXNlZCBvbiB0aGUgYE1JQ1JPU09GVF9NQU5BYCBhbmQgYE1BTkFfSU5GSU5JQkFORGAgc2V0dXBzLiBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kIGFzIHRoZSBmb3VuZGF0aW9uIGZvciBldmVyeXRoaW5nIHRoYXQncyB0byBjb21lLlxuXG5JJ20gemVyb2luZyBpbiBvbiBhIGNyaXRpY2FsIHN1YnNldCBvZiBmdW5jdGlvbnMsIG9yIHdoYXQgdGhleSdyZSBjYWxsaW5nIGBGb2N1c1N5bWJvbHNgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgaGFuZGxpbmcgQ29tcGxldGlvbiBRdWV1ZXMgKENRcyksIGhhcmR3YXJlIGNvbW11bmljYXRpb24sIGFuZCBnZW5lcmFsIGRhdGEgcHJvY2Vzc2luZyB3aXRoaW4gdGhpcyBJbmZpbmliYW5kIGltcGxlbWVudGF0aW9uLiBMZXQncyBicmVhayB0aGVtIGRvd24uXG5cbiogICBgbWFuYV9pYl9pbnN0YWxsX2NxX2NiYCBhbmQgYG1hbmFfaWJfcmVtb3ZlX2NxX2NiYDogVGhlc2UgY2xlYXJseSByZWxhdGUgdG8gdGhlIGluc3RhbGxhdGlvbiBhbmQgcmVtb3ZhbCBvZiBDb21wbGV0aW9uIFF1ZXVlIGNhbGxiYWNrcy4gVGhpcyBzdWdnZXN0cyBhIHNvcGhpc3RpY2F0ZWQgZXZlbnQtZHJpdmVuIG1vZGVsIGZvciBoYW5kbGluZyBjb21wbGV0aW9ucywgd2hpY2ggaXMgc3RhbmRhcmQgYnV0IGltcG9ydGFudCB0byB2ZXJpZnkgdGhlIG51YW5jZXMgb2YuXG4qICAgYG1hbmFfaHdjX2dldF9tc2dfaW5kZXhgLCBgbWFuYV9od2NfaGFuZGxlX3Jlc3BgLCBgbWFuYV9od2NfcnhfZXZlbnRfaGFuZGxlcmAsIGBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbGAsIGBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWxgLCBhbmQgYG1hbmFfaHdjX3NlbmRfcmVxdWVzdGA6IFRoZXNlIGNvbGxlY3RpdmVseSBwYWludCBhIHBpY3R1cmUgb2YgSGFyZHdhcmUgQ29tbXVuaWNhdGlvbiAoSFdDKSBtYW5hZ2VtZW50LiBXZSdyZSBsb29raW5nIGF0IG1lc3NhZ2UgaW5kZXhpbmcsIHJlc3BvbnNlIGhhbmRsaW5nLCBldmVudCBwcm9jZXNzaW5nIChwYXJ0aWN1bGFybHkgb24gdGhlIHJlY2VpdmUgc2lkZSksIGFuZCB0aGUgY3JlYXRpb24sIGRlc3RydWN0aW9uLCBhbmQgdHJhbnNtaXNzaW9uIGFzcGVjdHMgb2YgY29tbXVuaWNhdGlvbiBjaGFubmVscy4gQSBnb29kIGxldmVsIG9mIGFic3RyYWN0aW9uLCBjcml0aWNhbCB0byBwZXJmb3JtYW5jZS5cbiogICBgbWFuYV9nZF9wcm9jZXNzX2VxZWAgYW5kIGBtYW5hX2dkX2Rlc3Ryb3lfY3FgOiBUaGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gZ2VuZXJpYyBkYXRhIChHRCkgcHJvY2Vzc2luZyBhbmQgZGVzdHJveWluZyBDUXMuIFRoaXMgaW1wbGllcyB0aGUgZXhpc3RlbmNlIG9mIGEgZ2VuZXJpYyBkYXRhIG1vZGVsIGZvciBkYXRhIHRyYW5zZmVyLCBzZXBhcmF0ZSBmcm9tIHRoZSBJbmZpbmliYW5kLXNwZWNpZmljIGFzcGVjdHMuXG5cblNvLCBvdmVyYWxsLCBhIHRob3JvdWdoIHNldCBvZiBjb25zaWRlcmF0aW9ucyB0aGF0IGluZGljYXRlcyBhIHdlbGwtc3RydWN0dXJlZCBhcHByb2FjaCB0byBoYW5kbGluZyBJbmZpbmliYW5kIG9wZXJhdGlvbnMgd2l0aCB0aGlzIGBNQU5BYCBpbXBsZW1lbnRhdGlvbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGNhbGwgc2V0LXJlc3VsdHMuIFRoaXMgaW5kaWNhdGVzIHRoZSBuZXh0IHN0ZXBzIGluIHRoaXMgZXZhbHVhdGlvbiwgbGlrZWx5IGdhdGhlcmluZyBhbGwgYXZhaWxhYmxlIGRhdGEgcG9pbnRzIHRvIGVzdGFibGlzaCBhIGJlbmNobWFyayBmb3IgcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2Mzg1LCJPdXRwdXRUb2tlbnMiOjIxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNzo1MzowMS44MzQyMDEyMTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODU2NzQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUlDUk9TT0ZUX01BTkFcIixcbiAgICBcIk1BTkFfSU5GSU5JQkFORFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hbmFfaWJfaW5zdGFsbF9jcV9jYlwiLFxuICAgIFwibWFuYV9pYl9yZW1vdmVfY3FfY2JcIixcbiAgICBcIm1hbmFfaHdjX2dldF9tc2dfaW5kZXhcIixcbiAgICBcIm1hbmFfaHdjX2hhbmRsZV9yZXNwXCIsXG4gICAgXCJtYW5hX2h3Y19yeF9ldmVudF9oYW5kbGVyXCIsXG4gICAgXCJtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbFwiLFxuICAgIFwibWFuYV9od2NfZGVzdHJveV9jaGFubmVsXCIsXG4gICAgXCJtYW5hX2h3Y19zZW5kX3JlcXVlc3RcIixcbiAgICBcIm1hbmFfZ2RfcHJvY2Vzc19lcWVcIixcbiAgICBcIm1hbmFfZ2RfZGVzdHJveV9jcVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLCBpbmNsdWRpbmcgYWRkaW5nIFJDVSBwcm90ZWN0aW9uIGZvciB0aGUgQ1EgdGFibGUsIGhhbmRsaW5nIEhXQyB0aW1lb3V0cywgYW5kIGFkZGluZyByZWZjb3VudHMgZm9yIGNhbGxlciBjb250ZXh0cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgbG9naWMgb2YgdGhlIGRyaXZlciBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNSUNST1NPRlRfTUFOQVwiLFxuICAgIFwiTUFOQV9JTkZJTklCQU5EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFuYV9pYl9pbnN0YWxsX2NxX2NiXCIsXG4gICAgXCJtYW5hX2liX3JlbW92ZV9jcV9jYlwiLFxuICAgIFwibWFuYV9od2NfZ2V0X21zZ19pbmRleFwiLFxuICAgIFwibWFuYV9od2NfaGFuZGxlX3Jlc3BcIixcbiAgICBcIm1hbmFfaHdjX3J4X2V2ZW50X2hhbmRsZXJcIixcbiAgICBcIm1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsXCIsXG4gICAgXCJtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWxcIixcbiAgICBcIm1hbmFfaHdjX3NlbmRfcmVxdWVzdFwiLFxuICAgIFwibWFuYV9nZF9wcm9jZXNzX2VxZVwiLFxuICAgIFwibWFuYV9nZF9kZXN0cm95X2NxXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIsIGluY2x1ZGluZyBhZGRpbmcgUkNVIHByb3RlY3Rpb24gZm9yIHRoZSBDUSB0YWJsZSwgaGFuZGxpbmcgSFdDIHRpbWVvdXRzLCBhbmQgYWRkaW5nIHJlZmNvdW50cyBmb3IgY2FsbGVyIGNvbnRleHRzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBsb2dpYyBvZiB0aGUgZHJpdmVyIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4wvd[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-22 17:15:48 +0000 UTC FinishedAt: 2026-07-22 17:53:04 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e354f7d60f14a3eacd5ec7b607346a5612f655ec", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MICROSOFT_MANA", "MANA_INFINIBAND" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "e354f7d60f14a3eacd5ec7b607346a5612f655ec", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MICROSOFT_MANA", "MANA_INFINIBAND" ], "series_id": "49feb0ee-d0b1-4dbb-8b35-593d07e85d2e" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "mana_ib_install_cq_cb", "mana_ib_remove_cq_cb", "mana_hwc_get_msg_index", "mana_hwc_handle_resp", "mana_hwc_rx_event_handler", "mana_hwc_create_channel", "mana_hwc_destroy_channel", "mana_hwc_send_request", "mana_gd_process_eqe", "mana_gd_destroy_cq" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE3OjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01JQ1JPU09GVF9NQU5BJiMzNDssCiAgICAmIzM0O01BTkFfSU5GSU5JQkFORCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hbmFfaWJfaW5zdGFsbF9jcV9jYiYjMzQ7LAogICAgJiMzNDttYW5hX2liX3JlbW92ZV9jcV9jYiYjMzQ7LAogICAgJiMzNDttYW5hX2h3Y19nZXRfbXNnX2luZGV4JiMzNDssCiAgICAmIzM0O21hbmFfaHdjX2hhbmRsZV9yZXNwJiMzNDssCiAgICAmIzM0O21hbmFfaHdjX3J4X2V2ZW50X2hhbmRsZXImIzM0OywKICAgICYjMzQ7bWFuYV9od2NfY3JlYXRlX2NoYW5uZWwmIzM0OywKICAgICYjMzQ7bWFuYV9od2NfZGVzdHJveV9jaGFubmVsJiMzNDssCiAgICAmIzM0O21hbmFfaHdjX3NlbmRfcmVxdWVzdCYjMzQ7LAogICAgJiMzNDttYW5hX2dkX3Byb2Nlc3NfZXFlJiMzNDssCiAgICAmIzM0O21hbmFfZ2RfZGVzdHJveV9jcSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciwgaW5jbHVkaW5nIGFkZGluZyBSQ1UgcHJvdGVjdGlvbiBmb3IgdGhlIENRIHRhYmxlLCBoYW5kbGluZyBIV0MgdGltZW91dHMsIGFuZCBhZGRpbmcgcmVmY291bnRzIGZvciBjYWxsZXIgY29udGV4dHMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBkcml2ZXIgYW5kIHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTc6NTI8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA3YTdmNjczYzVhNDkwMDU0MDVkNTVmYzI1NDBmMjQyZDNiODljZDk2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMjIgMTc6NTI6MTkgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvY3EuYyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL2NxLmNcbmluZGV4IGYyNTQ3OTg5ZjQyMjkwLi4yYmY0YmUyMWNlZGU3OSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL2NxLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL2NxLmNcbkBAIC0xMzEsMTIgJiM0MzsxMzEsMjAgQEAgc3RhdGljIHZvaWQgbWFuYV9pYl9jcV9oYW5kbGVyKHZvaWQgKmN0eCwgc3RydWN0IGdkbWFfcXVldWUgKmdkbWFfY3EpXG4gaW50IG1hbmFfaWJfaW5zdGFsbF9jcV9jYihzdHJ1Y3QgbWFuYV9pYl9kZXYgKm1kZXYsIHN0cnVjdCBtYW5hX2liX2NxICpjcSlcbiB7XG4gXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IG1kZXZfdG9fZ2MobWRldik7XG4mIzQzO1x0c3RydWN0IGdkbWFfcXVldWUgX19yY3UgKipjcV90YWJsZTtcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlICpnZG1hX2NxO1xuIFxuLVx0aWYgKGNxLVx1MDAzZXF1ZXVlLmlkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMpXG4mIzQzO1x0LyogTm8gcmN1X3JlYWRfbG9jaygpOiBpbnN0YWxsL3JlbW92ZSBydW4gd2l0aGluIHRoZSBJQiBkZXZpY2VcbiYjNDM7XHQgKiBsaWZldGltZSwgd2hpY2ggbWFuYV9yZG1hX3JlbW92ZSgpIChpYl91bnJlZ2lzdGVyX2RldmljZSkgZHJhaW5zXG4mIzQzO1x0ICogYmVmb3JlIHRoZSBiYXNlIGNxX3RhYmxlIGNhbiBiZSBmcmVlZC4gIFNlZSBnZG1hX2NvbnRleHQ6OmNxX3RhYmxlXG4mIzQzO1x0ICogaW4gZ2RtYS5oIGZvciB3aHkgXCYjMzQ7dHJ1ZVwmIzM0OyBpcyBzb3VuZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjcV90YWJsZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2MtXHUwMDNlY3FfdGFibGUsIHRydWUpO1xuJiM0MztcdGlmICghY3FfdGFibGUgfHwgY3EtXHUwMDNlcXVldWUuaWQgXHUwMDNlPSBnYy1cdTAwM2VtYXhfbnVtX2NxcylcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1xuIFx0LyogQ3JlYXRlIENRIHRhYmxlIGVudHJ5LCBzaGFyaW5nIGEgQ1EgYmV0d2VlbiBXUXMgaXMgbm90IHN1cHBvcnRlZCAqL1xuLVx0aWYgKGdjLVx1MDAzZWNxX3RhYmxlW2NxLVx1MDAzZXF1ZXVlLmlkXSlcbiYjNDM7XHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNxX3RhYmxlW2NxLVx1MDAzZXF1ZXVlLmlkXSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0aWYgKGNxLVx1MDAzZXF1ZXVlLmttZW0pXG4gXHRcdGdkbWFfY3EgPSBjcS1cdTAwM2VxdWV1ZS5rbWVtO1xuQEAgLTE0OSwyMyAmIzQzOzE1Nyw0OSBAQCBpbnQgbWFuYV9pYl9pbnN0YWxsX2NxX2NiKHN0cnVjdCBtYW5hX2liX2RldiAqbWRldiwgc3RydWN0IG1hbmFfaWJfY3EgKmNxKVxuIFx0Z2RtYV9jcS1cdTAwM2V0eXBlID0gR0RNQV9DUTtcbiBcdGdkbWFfY3EtXHUwMDNlY3EuY2FsbGJhY2sgPSBtYW5hX2liX2NxX2hhbmRsZXI7XG4gXHRnZG1hX2NxLVx1MDAzZWlkID0gY3EtXHUwMDNlcXVldWUuaWQ7XG4tXHRnYy1cdTAwM2VjcV90YWJsZVtjcS1cdTAwM2VxdWV1ZS5pZF0gPSBnZG1hX2NxO1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihjcV90YWJsZVtjcS1cdTAwM2VxdWV1ZS5pZF0sIGdkbWFfY3EpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuIHZvaWQgbWFuYV9pYl9yZW1vdmVfY3FfY2Ioc3RydWN0IG1hbmFfaWJfZGV2ICptZGV2LCBzdHJ1Y3QgbWFuYV9pYl9jcSAqY3EpXG4ge1xuIFx0c3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBtZGV2X3RvX2djKG1kZXYpO1xuJiM0MztcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqY3FfdGFibGU7XG4mIzQzO1x0c3RydWN0IGdkbWFfcXVldWUgKmdkbWFfY3E7XG4gXG4tXHRpZiAoY3EtXHUwMDNlcXVldWUuaWQgXHUwMDNlPSBnYy1cdTAwM2VtYXhfbnVtX2NxcyB8fCBjcS1cdTAwM2VxdWV1ZS5pZCA9PSBJTlZBTElEX1FVRVVFX0lEKVxuJiM0MztcdGlmIChjcS1cdTAwM2VxdWV1ZS5pZCA9PSBJTlZBTElEX1FVRVVFX0lEKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAoY3EtXHUwMDNlcXVldWUua21lbSlcbiBcdC8qIFRoZW4gaXQgd2lsbCBiZSBjbGVhbmVkIGFuZCByZW1vdmVkIGJ5IHRoZSBtYW5hICovXG4gXHRcdHJldHVybjtcbiBcbi1cdGtmcmVlKGdjLVx1MDAzZWNxX3RhYmxlW2NxLVx1MDAzZXF1ZXVlLmlkXSk7XG4tXHRnYy1cdTAwM2VjcV90YWJsZVtjcS1cdTAwM2VxdWV1ZS5pZF0gPSBOVUxMO1xuJiM0MztcdC8qIE5vIHJjdV9yZWFkX2xvY2soKTogbGlrZSBtYW5hX2liX2luc3RhbGxfY3FfY2IoKSwgdGhpcyBydW5zIHdpdGhpblxuJiM0MztcdCAqIHRoZSBJQiBkZXZpY2UgbGlmZXRpbWUgdGhhdCBtYW5hX3JkbWFfcmVtb3ZlKCkgZHJhaW5zIGJlZm9yZSB0aGVcbiYjNDM7XHQgKiBiYXNlIGNxX3RhYmxlIGNhbiBiZSBmcmVlZC4gIFNlZSBnZG1hX2NvbnRleHQ6OmNxX3RhYmxlIGluIGdkbWEuaC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRjcV90YWJsZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2MtXHUwMDNlY3FfdGFibGUsIHRydWUpO1xuJiM0MztcdGlmICghY3FfdGFibGUgfHwgY3EtXHUwMDNlcXVldWUuaWQgXHUwMDNlPSBnYy1cdTAwM2VtYXhfbnVtX2NxcylcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHQvKiBSZW1vdmVycyBmb3IgYSBnaXZlbiBDUSBhcmUgc2VyaWFsaXplZCBieSB0aGUgSUIgY29yZSwgc28gdGhlIHNsb3RcbiYjNDM7XHQgKiBpcyByZWFkIGFuZCBjbGVhcmVkIHdpdGhvdXQgcmN1X3JlYWRfbG9jaygpIG9yIGF0b21pY2l0eTogYSBDUSBpc1xuJiM0MztcdCAqIG5ldmVyIHRvcm4gZG93biB3aGlsZSBhIGxpdmUgUVAgcmVmZXJlbmNlcyBpdCAoY3EtXHUwMDNldXNlY250KSwgbm9yXG4mIzQzO1x0ICogd2hpbGUgdGhlIFFQLWNyZWF0ZSB0aGF0IGluc3RhbGxlZCB0aGUgZW50cnkgaXMgc3RpbGwgcnVubmluZyAodGhhdFxuJiM0MztcdCAqIGNyZWF0ZSBob2xkcyBhIHJlZmVyZW5jZSBvbiB0aGUgQ1EgdW9iamVjdCBhY3Jvc3MgaXRzIGVycm9yIHBhdGgsXG4mIzQzO1x0ICogYmVmb3JlIHVzZWNudCBpcyB0YWtlbikuICBBbnkgZG91YmxlLXJlbW92ZSBpcyB0aGVyZWZvcmUgc2VxdWVudGlhbFxuJiM0MztcdCAqIC0tIHRoZSBsYXRlciBjYWxsZXIgc2VlcyB0aGUgTlVMTCBzdG9yZWQgYmVsb3cgYW5kIHJldHVybnMuXG4mIzQzO1x0ICovXG4mIzQzO1x0Z2RtYV9jcSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3FfdGFibGVbY3EtXHUwMDNlcXVldWUuaWRdLCB0cnVlKTtcbiYjNDM7XHRpZiAoIWdkbWFfY3EpXG4mIzQzO1x0XHRyZXR1cm47ICAvKiBhbHJlYWR5IHJlbW92ZWQgYnkgYSBwcmlvciB0ZWFyZG93biBwYXRoICovXG4mIzQzO1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihjcV90YWJsZVtjcS1cdTAwM2VxdWV1ZS5pZF0sIE5VTEwpO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBpbi1mbGlnaHQgRVEgaGFuZGxlcnMgdGhhdCBtYXkgaGF2ZSBsb2FkZWQgdGhlIG9sZFxuJiM0MztcdCAqIHBvaW50ZXIgdmlhIHJjdV9kZXJlZmVyZW5jZSgpIHRvIGZpbmlzaCBiZWZvcmUgZnJlZWluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzeW5jaHJvbml6ZV9yY3UoKTtcbiYjNDM7XHRrZnJlZShnZG1hX2NxKTtcbiB9XG4gXG4gaW50IG1hbmFfaWJfYXJtX2NxKHN0cnVjdCBpYl9jcSAqaWJjcSwgZW51bSBpYl9jcV9ub3RpZnlfZmxhZ3MgZmxhZ3MpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1xuaW5kZXggYTM4ZDRiYjc0NjIxZjkuLjE3NzExZWUzN2M4YmUzIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXG5AQCAtMTYxLDYgJiM0MzsxNjEsOCBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfaW5pdF9yZWdpc3RlcnMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gYm9vbCBtYW5hX25lZWRfbG9nKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBpbnQgZXJyKVxuIHtcbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YztcbiYjNDM7XHRib29sIG5lZWRfbG9nID0gdHJ1ZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0aWYgKGVyciAhPSAtRVRJTUVET1VUKVxuIFx0XHRyZXR1cm4gdHJ1ZTtcbkBAIC0xNjgsMTEgJiM0MzsxNzAsMTMgQEAgYm9vbCBtYW5hX25lZWRfbG9nKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBpbnQgZXJyKVxuIFx0aWYgKCFnYylcbiBcdFx0cmV0dXJuIHRydWU7XG4gXG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiBcdGh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiBcdGlmIChod2MgXHUwMDI2XHUwMDI2IGh3Yy1cdTAwM2Vod2NfdGltZW91dCA9PSAwKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0XHRuZWVkX2xvZyA9IGZhbHNlO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiBcbi1cdHJldHVybiB0cnVlO1xuJiM0MztcdHJldHVybiBuZWVkX2xvZztcbiB9XG4gXG4gc3RhdGljIGludCBtYW5hX2dkX3F1ZXJ5X21heF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5AQCAtMzY3LDkgJiM0MzszNzEsMjcgQEAgc3RhdGljIGludCBtYW5hX2dkX2RldGVjdF9kZXZpY2VzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIGludCBtYW5hX2dkX3NlbmRfcmVxdWVzdChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTMyIHJlcV9sZW4sIGNvbnN0IHZvaWQgKnJlcSxcbiBcdFx0XHQgdTMyIHJlc3BfbGVuLCB2b2lkICpyZXNwKVxuIHtcbi1cdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiYjNDM7XHRpZiAoIWh3Yykge1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcdGh3Yy1cdTAwM2VhY3RpdmVfc2VuZGVycyYjNDM7JiM0Mzs7XG4mIzQzO1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBtYW5hX2h3Y19zZW5kX3JlcXVlc3QoaHdjLCByZXFfbGVuLCByZXEsIHJlc3BfbGVuLCByZXNwKTtcbiBcbi1cdHJldHVybiBtYW5hX2h3Y19zZW5kX3JlcXVlc3QoaHdjLCByZXFfbGVuLCByZXEsIHJlc3BfbGVuLCByZXNwKTtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGlmICgtLWh3Yy1cdTAwM2VhY3RpdmVfc2VuZGVycyA9PSAwKVxuJiM0MztcdFx0d2FrZV91cChcdTAwMjZnYy1cdTAwM2Vod2NfZHJhaW5fd2FpdHEpO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiB9XG4gRVhQT1JUX1NZTUJPTF9OUyhtYW5hX2dkX3NlbmRfcmVxdWVzdCwgXCYjMzQ7TkVUX01BTkFcJiMzNDspO1xuIFxuQEAgLTYyMiw2ICYjNDM7NjQ0LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9zZXJ2X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIHtcbiBcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gcGNpX2dldF9kcnZkYXRhKHBkZXYpO1xuIFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFnYykge1xuQEAgLTYzMSwxNCAmIzQzOzY1NCwxNyBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuIFx0aHdjID0gZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xuIFx0aWYgKCFod2MpIHtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiBcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCYjMzQ7TUFOQSBzZXJ2aWNlOiBubyBIV0NcXG5cJiMzNDspO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiBcdC8qIEhXQyBpcyBub3QgcmVzcG9uZGluZyBpbiB0aGlzIGNhc2UsIHNvIGRvbiYjMzk7dCB3YWl0ICovXG4gXHRod2MtXHUwMDNlaHdjX3RpbWVvdXQgPSAwO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiBcbiBcdGRldl9pbmZvKFx1MDAyNnBkZXYtXHUwMDNlZGV2LCBcJiMzNDtNQU5BIHJlc2V0IGN5Y2xlIHN0YXJ0XFxuXCYjMzQ7KTtcbiBcbkBAIC03NjEsNiAmIzQzOzc4Nyw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2RfcHJvY2Vzc19lcWUoc3RydWN0IGdkbWFfcXVldWUgKmVxKVxuIFx0dW5pb24gZ2RtYV9lcWVfaW5mbyBlcWVfaW5mbztcbiBcdGVudW0gZ2RtYV9lcWVfdHlwZSB0eXBlO1xuIFx0c3RydWN0IGdkbWFfZXZlbnQgZXZlbnQ7XG4mIzQzO1x0c3RydWN0IGdkbWFfcXVldWUgX19yY3UgKipjcV90YWJsZTtcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlICpjcTtcbiBcdHN0cnVjdCBnZG1hX2VxZSAqZXFlO1xuIFx0dTMyIGNxX2lkO1xuQEAgLTc3MiwxMCAmIzQzOzc5OSwxMSBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3Byb2Nlc3NfZXFlKHN0cnVjdCBnZG1hX3F1ZXVlICplcSlcbiBcdHN3aXRjaCAodHlwZSkge1xuIFx0Y2FzZSBHRE1BX0VRRV9DT01QTEVUSU9OOlxuIFx0XHRjcV9pZCA9IGVxZS1cdTAwM2VkZXRhaWxzWzBdIFx1MDAyNiAweEZGRkZGRjtcbi1cdFx0aWYgKFdBUk5fT05fT05DRShjcV9pZCBcdTAwM2U9IGdjLVx1MDAzZW1heF9udW1fY3FzKSlcbiYjNDM7XHRcdGNxX3RhYmxlID0gcmN1X2RlcmVmZXJlbmNlKGdjLVx1MDAzZWNxX3RhYmxlKTtcbiYjNDM7XHRcdGlmIChXQVJOX09OX09OQ0UoY3FfaWQgXHUwMDNlPSBnYy1cdTAwM2VtYXhfbnVtX2NxcyB8fCAhY3FfdGFibGUpKVxuIFx0XHRcdGJyZWFrO1xuIFxuLVx0XHRjcSA9IGdjLVx1MDAzZWNxX3RhYmxlW2NxX2lkXTtcbiYjNDM7XHRcdGNxID0gcmN1X2RlcmVmZXJlbmNlKGNxX3RhYmxlW2NxX2lkXSk7XG4gXHRcdGlmIChXQVJOX09OX09OQ0UoIWNxIHx8IGNxLVx1MDAzZXR5cGUgIT0gR0RNQV9DUSB8fCBjcS1cdTAwM2VpZCAhPSBjcV9pZCkpXG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtMTA4MiwxNSAmIzQzOzExMTAsMjggQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9jcmVhdGVfY3EoY29uc3Qgc3RydWN0IGdkbWFfcXVldWVfc3BlYyAqc3BlYyxcbiBzdGF0aWMgdm9pZCBtYW5hX2dkX2Rlc3Ryb3lfY3Eoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsXG4gXHRcdFx0ICAgICAgIHN0cnVjdCBnZG1hX3F1ZXVlICpxdWV1ZSlcbiB7XG4mIzQzO1x0c3RydWN0IGdkbWFfcXVldWUgX19yY3UgKipjcV90YWJsZTtcbiBcdHUzMiBpZCA9IHF1ZXVlLVx1MDAzZWlkO1xuIFxuLVx0aWYgKGlkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMpXG4mIzQzO1x0LyogTm8gcmN1X3JlYWRfbG9jaygpIGhlcmU6IG1hbmFfZ2RfZGVzdHJveV9jcSgpIHJ1bnMgb25seSBvbiB0aGVcbiYjNDM7XHQgKiBDUS1kZXN0cm95L3RlYXJkb3duIHBhdGgsIHdoZXJlIHRoZSBiYXNlIGNxX3RhYmxlIGlzIHN0YWJsZS4gIFNlZVxuJiM0MztcdCAqIHRoZSBsaWZlY3ljbGUgbm90ZSBvbiBnZG1hX2NvbnRleHQ6OmNxX3RhYmxlIGluIGdkbWEuaCBmb3Igd2h5IHRoZVxuJiM0MztcdCAqIFwmIzM0O3RydWVcJiMzNDsgcHJlZGljYXRlIGlzIHNvdW5kLlxuJiM0MztcdCAqL1xuJiM0MztcdGNxX3RhYmxlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnYy1cdTAwM2VjcV90YWJsZSwgdHJ1ZSk7XG4mIzQzO1x0aWYgKCFjcV90YWJsZSB8fCBpZCBcdTAwM2U9IGdjLVx1MDAzZW1heF9udW1fY3FzKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRpZiAoIWdjLVx1MDAzZWNxX3RhYmxlW2lkXSlcbiYjNDM7XHRpZiAoIXJjdV9hY2Nlc3NfcG9pbnRlcihjcV90YWJsZVtpZF0pKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRnYy1cdTAwM2VjcV90YWJsZVtpZF0gPSBOVUxMO1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihjcV90YWJsZVtpZF0sIE5VTEwpO1xuJiM0MztcbiYjNDM7XHQvKiBXYWl0IGZvciBpbi1mbGlnaHQgRVEgaGFuZGxlcnMgdGhhdCBtYXkgaGF2ZSBsb2FkZWQgdGhlIG9sZFxuJiM0MztcdCAqIHBvaW50ZXIgdmlhIHJjdV9kZXJlZmVyZW5jZSgpIHRvIGZpbmlzaCBiZWZvcmUgdGhlIGNhbGxlclxuJiM0MztcdCAqIGZyZWVzIHRoZSBDUSBtZW1vcnkuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4gfVxuIFxuIGludCBtYW5hX2dkX2NyZWF0ZV9od2NfcXVldWUoc3RydWN0IGdkbWFfZGV2ICpnZCxcbkBAIC0xMTg1LDYgJiM0MzsxMjI2LDE2IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9jcmVhdGVfZG1hX3JlZ2lvbihzdHJ1Y3QgZ2RtYV9kZXYgKmdkLFxuIFx0aWYgKCFNQU5BX1BBR0VfQUxJR05FRChnbWktXHUwMDNldmlydF9hZGRyKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4mIzQzO1x0LyogTm8gUkNVIG5lZWRlZDogdGhpcyBydW5zIG9ubHkgb24gdGhlIGRhdGEtcGF0aCBxdWV1ZS1jcmVhdGlvblxuJiM0MztcdCAqIHBhdGggKG1hbmFfZ2RfY3JlYXRlX21hbmFfZXEvbWFuYV9nZF9jcmVhdGVfbWFuYV93cV9jcSwgY2FsbGVkXG4mIzQzO1x0ICogYnkgbWFuYV9lbiB1bmRlciBSVE5MIGFuZCBieSBtYW5hX2liIFJETUEgdmVyYnMsIG9yIGR1cmluZ1xuJiM0MztcdCAqIGluaXQpLiAgRXZlcnkgdGVhcmRvd24gcGF0aCDigJQgbWFuYV9nZF9yZW1vdmUsIG1hbmFfZ2Rfc3VzcGVuZCxcbiYjNDM7XHQgKiBhbmQgdGhlIEhXQyByZXNldC9zZXJ2aWNlIHBhdGggKHdoaWNoIGdvZXMgdGhyb3VnaFxuJiM0MztcdCAqIG1hbmFfZ2Rfc3VzcGVuZCkg4oCUIGRyYWlucyB0aG9zZSBjb25zdW1lcnMgdmlhIG1hbmFfcmRtYV9yZW1vdmUoKVxuJiM0MztcdCAqICYjNDM7IG1hbmFfcmVtb3ZlKCkgYmVmb3JlIG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbCgpIGNsZWFyc1xuJiM0MztcdCAqIGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YSwgc28gbm8gY29uY3VycmVudCBkZXN0cm95IGNhbiByYWNlIHdpdGhcbiYjNDM7XHQgKiB0aGlzIGRlcmVmZXJlbmNlLlxuJiM0MztcdCAqL1xuIFx0aHdjID0gZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xuIFx0cmVxX21zZ19zaXplID0gc3RydWN0X3NpemUocmVxLCBwYWdlX2FkZHJfbGlzdCwgbnVtX3BhZ2UpO1xuIFx0aWYgKHJlcV9tc2dfc2l6ZSBcdTAwM2UgaHdjLVx1MDAzZW1heF9yZXFfbXNnX3NpemUpXG5AQCAtMTM3NCw3ICYjNDM7MTQyNSwxNyBAQCBpbnQgbWFuYV9nZF92ZXJpZnlfdmZfdmVyc2lvbihzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YztcbiBcdGludCBlcnI7XG4gXG4mIzQzO1x0LyogTm8gUkNVIG5lZWRlZDogdGhpcyBydW5zIG9ubHkgaW5zaWRlIG1hbmFfZ2Rfc2V0dXAsIG9uIHRoZVxuJiM0MztcdCAqIHByb2JlIGFuZCByZXN1bWUgcGF0aHMuICBUaGUgUENJL1BNIGNvcmUgaG9sZHMgZGV2aWNlX2xvY2tcbiYjNDM7XHQgKiBhY3Jvc3MgLnByb2JlLy5yZXN1bWUgYW5kIC5yZW1vdmUvLnN1c3BlbmQsIHNvIHNldHVwIGNhbm5vdFxuJiM0MztcdCAqIG92ZXJsYXAgdGVhcmRvd24gb2YgdGhlIHNhbWUgZGV2aWNlLiAgVGhlIEhXQyByZXNldC9zZXJ2aWNlXG4mIzQzO1x0ICogcGF0aCBpcyBhZGRpdGlvbmFsbHkgc2VyaWFsaXplZCBieSBHQ19JTl9TRVJWSUNFIGFuZCBydW5zXG4mIzQzO1x0ICogc3VzcGVuZCAoZGVzdHJveSkgdGhlbiByZXN1bWUgKHRoaXMpIHNlcXVlbnRpYWxseSBpbiBvbmUgd29ya1xuJiM0MztcdCAqIGl0ZW0uICBkcml2ZXJfZGF0YSB3YXMganVzdCBzZXQgYnkgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWxcbiYjNDM7XHQgKiBlYXJsaWVyIGluIHRoaXMgc2FtZSBzZXR1cCBjYWxsLCBzbyBpdCBpcyBsaXZlIGhlcmUuXG4mIzQzO1x0ICovXG4gXHRod2MgPSBnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGE7XG4mIzQzO1xuIFx0bWFuYV9nZF9pbml0X3JlcV9oZHIoXHUwMDI2cmVxLmhkciwgR0RNQV9WRVJJRllfVkZfRFJJVkVSX1ZFUlNJT04sXG4gXHRcdFx0ICAgICBzaXplb2YocmVxKSwgc2l6ZW9mKHJlc3ApKTtcbiBcbkBAIC0yMzY0LDYgJiM0MzsyNDI1LDcgQEAgc3RhdGljIGludCBtYW5hX2dkX3Byb2JlKHN0cnVjdCBwY2lfZGV2ICpwZGV2LCBjb25zdCBzdHJ1Y3QgcGNpX2RldmljZV9pZCAqZW50KVxuIFxuIFx0bXV0ZXhfaW5pdChcdTAwMjZnYy1cdTAwM2VlcV90ZXN0X2V2ZW50X211dGV4KTtcbiBcdG11dGV4X2luaXQoXHUwMDI2Z2MtXHUwMDNlZ2ljX211dGV4KTtcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZnYy1cdTAwM2Vod2NfbG9jayk7XG4gXHRwY2lfc2V0X2RydmRhdGEocGRldiwgZ2MpO1xuIFx0Z2MtXHUwMDNlYmFyMF9wYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTtcbiBcdGdjLVx1MDAzZWJhcjBfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jXG5pbmRleCBlM2MyNGQ1MGRhZDA3Yy4uMDQ4MWQ0MDQ0MzQyNGYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuY1xuQEAgLTQsMjcgJiM0Mzs0LDU1IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hbmEvZ2RtYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hbmEvbWFuYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hbmEvaHdfY2hhbm5lbC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3BjaS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdm1hbGxvYy5oXHUwMDNlXG4gXG4mIzQzOy8qIEFjcXVpcmUgYSBmcmVlIG1lc3NhZ2Ugc2xvdCBmcm9tIHRoZSBpbmZsaWdodCBiaXRtYXAuICBSZXR1cm5zXG4mIzQzOyAqIC1FTk9ERVYgaWYgdGhlIGNoYW5uZWwgaXMgdG9ybiBkb3duLCBvciAtRVRJTUVET1VUIGlmIGEgcHJpb3IgSFdDXG4mIzQzOyAqIGNvbW1hbmQgaGFzIHRpbWVkIG91dCAocHJlc2VydmluZyB0aGUgZXJyb3IgY29kZSBjYWxsZXJzIGV4cGVjdCkuXG4mIzQzOyAqL1xuIHN0YXRpYyBpbnQgbWFuYV9od2NfZ2V0X21zZ19pbmRleChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiAqbXNnX2lkKVxuIHtcbiBcdHN0cnVjdCBnZG1hX3Jlc291cmNlICpyID0gXHUwMDI2aHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXM7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0dTMyIGluZGV4O1xuIFxuLVx0ZG93bihcdTAwMjZod2MtXHUwMDNlc2VtYSk7XG4mIzQzO1x0Zm9yICg7Oykge1xuJiM0MztcdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2ci1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZyLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdGlmICghaHdjLVx1MDAzZWNoYW5uZWxfdXAgfHwgaHdjLVx1MDAzZWh3Y190aW1lZF9vdXQpIHtcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdFx0cmV0dXJuIGh3Yy1cdTAwM2VjaGFubmVsX3VwID8gLUVUSU1FRE9VVCA6IC1FTk9ERVY7XG4mIzQzO1x0XHR9XG4gXG4tXHRpbmRleCA9IGZpbmRfZmlyc3RfemVyb19iaXQoaHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwLFxuLVx0XHRcdFx0ICAgIGh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLnNpemUpO1xuJiM0MztcdFx0aW5kZXggPSBmaW5kX2ZpcnN0X3plcm9fYml0KHItXHUwMDNlbWFwLCByLVx1MDAzZXNpemUpO1xuJiM0MztcdFx0aWYgKGluZGV4IFx1MDAzYyByLVx1MDAzZXNpemUpIHtcbiYjNDM7XHRcdFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHg7XG4mIzQzO1xuJiM0MztcdFx0XHRiaXRtYXBfc2V0KHItXHUwMDNlbWFwLCBpbmRleCwgMSk7XG4mIzQzO1x0XHRcdGN0eCA9IFx1MDAyNmh3Yy1cdTAwM2VjYWxsZXJfY3R4W2luZGV4XTtcbiYjNDM7XHRcdFx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2Y3R4LVx1MDAzZWNvbXBfZXZlbnQpO1xuJiM0MztcdFx0XHRyZWZjb3VudF9zZXQoXHUwMDI2Y3R4LVx1MDAzZXJlZmNudCwgMSk7XG4mIzQzO1x0XHRcdGN0eC1cdTAwM2Vtc2dfaWQgPSBpbmRleDtcbiYjNDM7XHRcdFx0Y3R4LVx1MDAzZWVycm9yID0gLUVJTlBST0dSRVNTO1xuJiM0MztcdFx0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnItXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ci1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRiaXRtYXBfc2V0KGh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLm1hcCwgaW5kZXgsIDEpO1xuJiM0MztcdFx0d2FpdF9ldmVudChod2MtXHUwMDNlbXNnX3dhaXRxLFxuJiM0MztcdFx0XHQgICAhaHdjLVx1MDAzZWNoYW5uZWxfdXAgfHxcbiYjNDM7XHRcdFx0ICAgaHdjLVx1MDAzZWh3Y190aW1lZF9vdXQgfHxcbiYjNDM7XHRcdFx0ICAgIWJpdG1hcF9mdWxsKHItXHUwMDNlbWFwLCByLVx1MDAzZXNpemUpKTtcbiBcbi1cdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ci1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRpZiAoIWh3Yy1cdTAwM2VjaGFubmVsX3VwKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiBcbi1cdCptc2dfaWQgPSBpbmRleDtcbiYjNDM7XHRcdGlmIChod2MtXHUwMDNlaHdjX3RpbWVkX291dClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO1x0fVxuIFxuJiM0MztcdCptc2dfaWQgPSBpbmRleDtcbiBcdHJldHVybiAwO1xuIH1cbiBcbkBAIC0zNCwxMCAmIzQzOzYyLDE3IEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX3B1dF9tc2dfaW5kZXgoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgbXNnX2lkKVxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnItXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0Yml0bWFwX2NsZWFyKGh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLm1hcCwgbXNnX2lkLCAxKTtcbiYjNDM7XHRiaXRtYXBfY2xlYXIoci1cdTAwM2VtYXAsIG1zZ19pZCwgMSk7XG4gXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnItXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuLVx0dXAoXHUwMDI2aHdjLVx1MDAzZXNlbWEpO1xuJiM0MztcdHdha2VfdXAoXHUwMDI2aHdjLVx1MDAzZW1zZ193YWl0cSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGh3Y19jdHhfcHV0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyxcbiYjNDM7XHRcdFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHgpXG4mIzQzO3tcbiYjNDM7XHRpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmN0eC1cdTAwM2VyZWZjbnQpKVxuJiM0MztcdFx0bWFuYV9od2NfcHV0X21zZ19pbmRleChod2MsIGN0eC1cdTAwM2Vtc2dfaWQpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1hbmFfaHdjX3ZlcmlmeV9yZXNwX21zZyhjb25zdCBzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmNhbGxlcl9jdHgsXG5AQCAtODMsNiAmIzQzOzExOCwxNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19oYW5kbGVfcmVzcChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXNwX2xlbixcbiBcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xuIFx0aW50IGVycjtcbiBcbiYjNDM7XHQvKiBWYWxpZGF0ZSBtc2dfaWQgaXMgaW4gcmFuZ2UgYmVmb3JlIHVzaW5nIGl0IHRvIGluZGV4IGJpdG1hcFxuJiM0MztcdCAqIGFuZCBjYWxsZXJfY3R4IGFycmF5LiAgTWFsaWNpb3VzIGZpcm13YXJlIGNvdWxkIHNlbmRcbiYjNDM7XHQgKiBvdXQtb2YtcmFuZ2UgbXNnX2lkIGNhdXNpbmcgb3V0LW9mLWJvdW5kcyBhY2Nlc3MuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKG1zZ19pZCBcdTAwM2U9IGh3Yy1cdTAwM2VudW1faW5mbGlnaHRfbXNnKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O2h3Y19yeDogbXNnX2lkICV1IFx1MDAzZT0gbWF4ICV1XFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRtc2dfaWQsIGh3Yy1cdTAwM2VudW1faW5mbGlnaHRfbXNnKTtcbiYjNDM7XHRcdG1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Yy1cdTAwM2VyeHEsIHJ4X3JlcSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmICghdGVzdF9iaXQobXNnX2lkLCBod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5tYXApKSB7XG4gXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7aHdjX3J4OiBpbnZhbGlkIG1zZ19pZCA9ICV1XFxuXCYjMzQ7LCBtc2dfaWQpO1xuIFx0XHRtYW5hX2h3Y19wb3N0X3J4X3dxZShod2MtXHUwMDNlcnhxLCByeF9yZXEpO1xuQEAgLTkwLDIyICYjNDM7MTM2LDQ0IEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX2hhbmRsZV9yZXNwKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlc3BfbGVuLFxuIFx0fVxuIFxuIFx0Y3R4ID0gaHdjLVx1MDAzZWNhbGxlcl9jdHggJiM0MzsgbXNnX2lkO1xuLVx0ZXJyID0gbWFuYV9od2NfdmVyaWZ5X3Jlc3BfbXNnKGN0eCwgcmVzcF9tc2csIHJlc3BfbGVuKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gb3V0O1xuIFxuLVx0Y3R4LVx1MDAzZXN0YXR1c19jb2RlID0gcmVzcF9tc2ctXHUwMDNlc3RhdHVzO1xuJiM0MztcdC8qIFJlamVjdCByZXNwb25zZXMgbGFyZ2VyIHRoYW4gdGhlIFJYIERNQSBidWZmZXIg4oCUIHRoZSBTR0VcbiYjNDM7XHQgKiBsaW1pdHMgd2hhdCBoYXJkd2FyZSBjYW4gRE1BLCBzbyBhbiBvdmVyc2l6ZWQgcmVzcF9sZW5cbiYjNDM7XHQgKiBpbmRpY2F0ZXMgYSBmaXJtd2FyZSBidWcuICBGYWlsIHJhdGhlciB0aGFuIHNpbGVudGx5XG4mIzQzO1x0ICogdHJ1bmNhdGluZy5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAocmVzcF9sZW4gXHUwMDNlIHJ4X3JlcS1cdTAwM2VidWZfbGVuKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0hXQyBSWDogcmVzcF9sZW4gJXUgXHUwMDNlIGJ1Zl9sZW4gJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHJlc3BfbGVuLCByeF9yZXEtXHUwMDNlYnVmX2xlbik7XG4mIzQzO1x0XHRyZXNwX2xlbiA9IDA7XG4mIzQzO1x0fVxuIFxuLVx0bWVtY3B5KGN0eC1cdTAwM2VvdXRwdXRfYnVmLCByZXNwX21zZywgcmVzcF9sZW4pO1xuLW91dDpcbi1cdGN0eC1cdTAwM2VlcnJvciA9IGVycjtcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2Y3R4LVx1MDAzZWxvY2spO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBtYW5hX2h3Y192ZXJpZnlfcmVzcF9tc2coY3R4LCByZXNwX21zZywgcmVzcF9sZW4pO1xuIFxuLVx0LyogTXVzdCBwb3N0IHJ4IHdxZSBiZWZvcmUgY29tcGxldGUoKSwgb3RoZXJ3aXNlIHRoZSBuZXh0IHJ4IG1heVxuLVx0ICogaGl0IG5vX3dxZSBlcnJvci5cbiYjNDM7XHRpZiAoIWVyciBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZW91dHB1dF9idWYpIHtcbiYjNDM7XHRcdGN0eC1cdTAwM2VzdGF0dXNfY29kZSA9IHJlc3BfbXNnLVx1MDAzZXN0YXR1cztcbiYjNDM7XHRcdG1lbWNweShjdHgtXHUwMDNlb3V0cHV0X2J1ZiwgcmVzcF9tc2csIHJlc3BfbGVuKTtcbiYjNDM7XHRcdGN0eC1cdTAwM2VlcnJvciA9IDA7XG4mIzQzO1x0fSBlbHNlIGlmIChjdHgtXHUwMDNlb3V0cHV0X2J1Zikge1xuJiM0MztcdFx0LyogT25seSBvdmVyd3JpdGUgZXJyb3IgaWYgdGhlIHNlbmRlciBoYXNuJiMzOTt0IHRpbWVkIG91dFxuJiM0MztcdFx0ICogb3IgYmVlbiBmb3JjZS1jb21wbGV0ZWQgYnkgZGVzdHJveS4gIFdoZW4gb3V0cHV0X2J1ZlxuJiM0MztcdFx0ICogaXMgTlVMTCwgYSB0ZXJtaW5hbCBlcnJvciAoLUVOT0RFViBvciB0aW1lb3V0KSBoYXNcbiYjNDM7XHRcdCAqIGFscmVhZHkgYmVlbiBzZXQg4oCUIHByZXNlcnZlIGl0IHNvIHRoZSBzZW5kZXIgZG9lc24mIzM5O3RcbiYjNDM7XHRcdCAqIHNlZSBhIHNwdXJpb3VzIHN1Y2Nlc3MuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGN0eC1cdTAwM2VlcnJvciA9IGVycjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFBvc3QgUlggV1FFIGJlZm9yZSBjb21wbGV0aW5nIOKAlCB0aGUgbmV4dCByZXNwb25zZSBtYXkgYXJyaXZlXG4mIzQzO1x0ICogaW1tZWRpYXRlbHkgYW5kIG5lZWRzIGEgcG9zdGVkIGJ1ZmZlci5cbiBcdCAqL1xuIFx0bWFuYV9od2NfcG9zdF9yeF93cWUoaHdjLVx1MDAzZXJ4cSwgcnhfcmVxKTtcbi1cbiBcdGNvbXBsZXRlKFx1MDAyNmN0eC1cdTAwM2Vjb21wX2V2ZW50KTtcbiYjNDM7XHRzcGluX3VubG9jayhcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4mIzQzO1xuJiM0MztcdGh3Y19jdHhfcHV0KGh3YywgY3R4KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKHZvaWQgKmN0eCwgc3RydWN0IGdkbWFfcXVldWUgKnFfc2VsZixcbkBAIC0xNDYsNyAmIzQzOzIxNCwxMiBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIodm9pZCAqY3R4LCBzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcV9zZWxmLFxuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRjYXNlIEhXQ19JTklUX0RBVEFfUVVFVUVfREVQVEg6XG4tXHRcdFx0aHdjLVx1MDAzZWh3Y19pbml0X3FfZGVwdGhfbWF4ID0gKHUxNil2YWw7XG4mIzQzO1x0XHRcdC8qIEhXQ19JTklUX0RBVEFfUVVFVUVfREVQVEggaXMgYSAyNC1iaXQgZmllbGQuICBLZWVwXG4mIzQzO1x0XHRcdCAqIHRoZSBmdWxsIGRldmljZS1yZXBvcnRlZCB2YWx1ZSBoZXJlOyBpdCBpcyBjbGFtcGVkXG4mIzQzO1x0XHRcdCAqIGFuZCB2YWxpZGF0ZWQgaW4gbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoKSByYXRoZXJcbiYjNDM7XHRcdFx0ICogdGhhbiBzaWxlbnRseSB0cnVuY2F0ZWQgdG8gdTE2LlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aHdjLVx1MDAzZWh3Y19pbml0X3FfZGVwdGhfbWF4ID0gdmFsO1xuIFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRjYXNlIEhXQ19JTklUX0RBVEFfTUFYX1JFUVVFU1Q6XG5AQCAtMjYxLDE5ICYjNDM7MzM0LDY5IEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX3J4X2V2ZW50X2hhbmRsZXIodm9pZCAqY3R4LCB1MzIgZ2RtYV9yeHFfaWQsXG4gXG4gXHRzZ2UgPSAoc3RydWN0IGdkbWFfc2dlICopKHdxZSAmIzQzOyA4ICYjNDM7IGRtYV9vb2ItXHUwMDNlaW5saW5lX29vYl9zaXplX2RpdjQgKiA0KTtcbiBcbi1cdC8qIFNlbGVjdCB0aGUgUlggd29yayByZXF1ZXN0IGZvciB2aXJ0dWFsIGFkZHJlc3MgYW5kIGZvciByZXBvc3RpbmcuICovXG4tXHRycV9iYXNlX2FkZHIgPSBod2NfcnhxLVx1MDAzZW1zZ19idWYtXHUwMDNlbWVtX2luZm8uZG1hX2hhbmRsZTtcbi1cdHJ4X3JlcV9pZHggPSAoc2dlLVx1MDAzZWFkZHJlc3MgLSBycV9iYXNlX2FkZHIpIC8gaHdjLVx1MDAzZW1heF9yZXFfbXNnX3NpemU7XG4mIzQzO1x0LyogaW5saW5lX29vYl9zaXplX2RpdjQgaXMgcmVhZCBmcm9tIHRoZSBXUUUgaW4gZGV2aWNlLWFjY2Vzc2libGUgUlFcbiYjNDM7XHQgKiBtZW1vcnksIHNvIGEgbWFsaWNpb3VzIGhvc3QgaW4gYSBDVk0gKG9yIGJ1Z2d5IGZpcm13YXJlKSBjb3VsZCBzZXRcbiYjNDM7XHQgKiBpdCB0byBwdXNoIHRoZSBTR0UgcGFzdCB0aGUgUlEgYnVmZmVyLiAgQm91bmRzLWNoZWNrIHRoZSBTR0UgaXRcbiYjNDM7XHQgKiBsb2NhdGVzIGJlZm9yZSBkZXJlZmVyZW5jaW5nIHNnZS1cdTAwM2VhZGRyZXNzIGJlbG93LiAgQSB2YWxpZGx5IHBvc3RlZFxuJiM0MztcdCAqIFdRRSBrZWVwcyB0aGUgU0dFIGluc2lkZSB0aGUgcmluZyAod29yc3QgY2FzZSBlbmRzIGV4YWN0bHkgYXQgdGhlXG4mIzQzO1x0ICogYnVmZmVyIGJvdW5kYXJ5KTsgcmVqZWN0IGFueXRoaW5nIHRoYXQgd291bGQgcmVhZCBwYXN0IGl0LiAgVGhlXG4mIzQzO1x0ICogc2xvdCBjYW5ub3QgYmUgdHJ1c3RlZCBoZXJlLCBzbyBsZWFrIHRoaXMgUlggV1FFIHJhdGhlciB0aGFuIHJlcG9zdFxuJiM0MztcdCAqIHRoZSB3cm9uZyBvbmUgLS0gYXMgaW4gdGhlIFNHRS1hZGRyZXNzIG1pc21hdGNoIHBhdGggYmVsb3cuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCh1OCAqKShzZ2UgJiM0MzsgMSkgXHUwMDNlICh1OCAqKXJxLVx1MDAzZXF1ZXVlX21lbV9wdHIgJiM0MzsgcnEtXHUwMDNlcXVldWVfc2l6ZSkge1xuJiM0MztcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcJiMzNDtIV0MgUlg6IFNHRSBwYXN0IFJRIGJ1ZmZlciwgb29iX2RpdjQ9JXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGRtYV9vb2ItXHUwMDNlaW5saW5lX29vYl9zaXplX2RpdjQpO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcbi1cdGlmIChyeF9yZXFfaWR4IFx1MDAzZT0gaHdjX3J4cS1cdTAwM2Vtc2dfYnVmLVx1MDAzZW51bV9yZXFzKSB7XG4tXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7SFdDIFJYOiB3cm9uZyByeF9yZXFfaWR4PSVsbHUsIG51bV9yZXFzPSV1XFxuXCYjMzQ7LFxuLVx0XHRcdHJ4X3JlcV9pZHgsIGh3Y19yeHEtXHUwMDNlbXNnX2J1Zi1cdTAwM2VudW1fcmVxcyk7XG4mIzQzO1x0LyogUmVjb3ZlciB0aGUgb3JpZ2luYXRpbmcgUlggc2xvdCBmcm9tIHRoZSBTR0UgYWRkcmVzcy4gIE9mIHRoZSB0aHJlZVxuJiM0MztcdCAqIHRlcm1zIGhlcmUgb25seSBzZ2UtXHUwMDNlYWRkcmVzcyBsaXZlcyBpbiBkZXZpY2UtYWNjZXNzaWJsZSBSUSBtZW1vcnk7XG4mIzQzO1x0ICogcnFfYmFzZV9hZGRyIGFuZCBtYXhfcmVzcF9tc2dfc2l6ZSBhcmUgZHJpdmVyLXByaXZhdGUgY29uc3RhbnRzLiAgQW5cbiYjNDM7XHQgKiBpbi1yYW5nZSBidXQgd3JvbmcvdW5hbGlnbmVkIFNHRSAoY29ycnVwdGVkIFdRRSwgb3IgYSBtYWxpY2lvdXMgaG9zdFxuJiM0MztcdCAqIGluIGEgQ1ZNKSB3b3VsZCBvdGhlcndpc2UgdHJ1bmNhdGUgb250byBhIG5laWdoYm91cmluZyBzbG90LCBsZXR0aW5nXG4mIzQzO1x0ICogdXMgcmVhZCBhIHN0YWxlIHJlc3BvbnNlIHRoYXQgY291bGQgY29tcGxldGUgdGhlIHdyb25nLCByZXVzZWRcbiYjNDM7XHQgKiBpbi1mbGlnaHQgcmVxdWVzdC4gIFJlcXVpcmUgdGhlIGluZGV4IHRvIGJlIGluIHJhbmdlIEFORCB0aGUgYWRkcmVzc1xuJiM0MztcdCAqIHRvIGV4YWN0bHkgbWF0Y2ggdGhlIHZhbHVlIHRoZSBkcml2ZXIgcG9zdGVkIGZvciB0aGF0IHNsb3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0cnFfYmFzZV9hZGRyID0gaHdjX3J4cS1cdTAwM2Vtc2dfYnVmLVx1MDAzZW1lbV9pbmZvLmRtYV9oYW5kbGU7XG4mIzQzO1x0cnhfcmVxX2lkeCA9IChzZ2UtXHUwMDNlYWRkcmVzcyAtIHJxX2Jhc2VfYWRkcikgLyBod2MtXHUwMDNlbWF4X3Jlc3BfbXNnX3NpemU7XG4mIzQzO1xuJiM0MztcdGlmIChyeF9yZXFfaWR4IFx1MDAzZT0gaHdjX3J4cS1cdTAwM2VxdWV1ZV9kZXB0aCkge1xuJiM0MztcdFx0LyogQ2Fubm90IHRydXN0IHdoaWNoIFdRRSB0aGlzIGlzLCBzbyB3ZSBjYW5ub3Qgc2FmZWx5IHJlcG9zdFxuJiM0MztcdFx0ICogaXQ7IGxlYWsgb25lIFJYIFdRRSBhbmQgYmFpbC4gIEFuIG91dC1vZi1yYW5nZSBpbmRleCBtZWFuc1xuJiM0MztcdFx0ICogYSBjb3JydXB0ZWQgU0dFIGZyb20gaGFyZHdhcmUgKG9yIGhvc3QgdGFtcGVyaW5nKSwgYW5cbiYjNDM7XHRcdCAqIHVucmVjb3ZlcmFibGUgZGV2aWNlIGVycm9yLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0hXQyBSWDogU0dFIGlkeCAlbGx1IG91dCBvZiByYW5nZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0cnhfcmVxX2lkeCk7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbiBcdHJ4X3JlcSA9IFx1MDAyNmh3Y19yeHEtXHUwMDNlbXNnX2J1Zi1cdTAwM2VyZXFzW3J4X3JlcV9pZHhdO1xuJiM0MztcdGlmIChzZ2UtXHUwMDNlYWRkcmVzcyAhPSAodTY0KXJ4X3JlcS1cdTAwM2VidWZfc2dlX2FkZHIpIHtcbiYjNDM7XHRcdC8qIEluLXJhbmdlIGluZGV4IGJ1dCB0aGUgYWRkcmVzcyBkb2VzIG5vdCBtYXRjaCB3aGF0IHRoZVxuJiM0MztcdFx0ICogZHJpdmVyIHBvc3RlZCBmb3IgdGhhdCBzbG90OyB0aGUgc2FtZSB1bnJlY292ZXJhYmxlIGNhc2UsXG4mIzQzO1x0XHQgKiBzbyBsZWFrIHRoaXMgV1FFIHJhdGhlciB0aGFuIHJlcG9zdCB0aGUgd3Jvbmcgb25lLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0hXQyBSWDogaW52YWxpZCBTR0UgYWRkcmVzcyAlbGx4IChpZHg9JWxsdSlcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHNnZS1cdTAwM2VhZGRyZXNzLCByeF9yZXFfaWR4KTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuIFx0cmVzcCA9IChzdHJ1Y3QgZ2RtYV9yZXNwX2hkciAqKXJ4X3JlcS1cdTAwM2VidWZfdmE7XG4gXG4mIzQzO1x0LyogVmFsaWRhdGUgcmVzcF9sZW4gY292ZXJzIHRoZSByZXNwb25zZSBoZWFkZXIgYmVmb3JlIHJlYWRpbmdcbiYjNDM7XHQgKiBod2NfbXNnX2lkLiAgQSBzaG9ydCByZXNwb25zZSBsZWF2ZXMgc3RhbGUgZGF0YSBmcm9tIHRoZVxuJiM0MztcdCAqIHByZXZpb3VzIGJ1ZmZlciBvY2N1cGFudCwgd2hpY2ggY291bGQgbWF0Y2ggYSBsaXZlIHNsb3QgYW5kXG4mIzQzO1x0ICogY29tcGxldGUgdGhlIHdyb25nIHJlcXVlc3QuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHJ4X29vYi1cdTAwM2V0eF9vb2JfZGF0YV9zaXplIFx1MDAzYyBzaXplb2YoKnJlc3ApKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0hXQyBSWDogc2hvcnQgcmVzcF9sZW49JXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdHJ4X29vYi1cdTAwM2V0eF9vb2JfZGF0YV9zaXplKTtcbiYjNDM7XHRcdG1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Y19yeHEsIHJ4X3JlcSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcbiBcdC8qIFJlYWQgbXNnX2lkIG9uY2UgZnJvbSBETUEgYnVmZmVyIHRvIHByZXZlbnQgVE9DVE9VOlxuIFx0ICogRE1BIG1lbW9yeSBpcyBzaGFyZWQvdW5lbmNyeXB0ZWQgaW4gQ1ZNcyAtIGhvc3QgY2FuXG4gXHQgKiBtb2RpZnkgaXQgYmV0d2VlbiByZWFkcy5cbkBAIC0yODEsNiAmIzQzOzQwNCw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX3J4X2V2ZW50X2hhbmRsZXIodm9pZCAqY3R4LCB1MzIgZ2RtYV9yeHFfaWQsXG4gXHRtc2dfaWQgPSBSRUFEX09OQ0UocmVzcC1cdTAwM2VyZXNwb25zZS5od2NfbXNnX2lkKTtcbiBcdGlmIChtc2dfaWQgXHUwMDNlPSBod2MtXHUwMDNlbnVtX2luZmxpZ2h0X21zZykge1xuIFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0hXQyBSWDogd3JvbmcgbXNnX2lkPSV1XFxuXCYjMzQ7LCBtc2dfaWQpO1xuJiM0MztcdFx0bWFuYV9od2NfcG9zdF9yeF93cWUoaHdjX3J4cSwgcnhfcmVxKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuQEAgLTM4NCwxNCAmIzQzOzUwOCwyMCBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19jb21wX2V2ZW50KHZvaWQgKmN0eCwgc3RydWN0IGdkbWFfcXVldWUgKnFfc2VsZilcbiBcbiBzdGF0aWMgdm9pZCBtYW5hX2h3Y19kZXN0cm95X2NxKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBzdHJ1Y3QgaHdjX2NxICpod2NfY3EpXG4ge1xuLVx0a2ZyZWUoaHdjX2NxLVx1MDAzZWNvbXBfYnVmKTtcbi1cbiBcdGlmIChod2NfY3EtXHUwMDNlZ2RtYV9jcSlcbiBcdFx0bWFuYV9nZF9kZXN0cm95X3F1ZXVlKGdjLCBod2NfY3EtXHUwMDNlZ2RtYV9jcSk7XG4gXG4mIzQzO1x0LyogY29tcF9idWYgaXMgcmVhY2hlZCBvbmx5IGJ5IG1hbmFfaHdjX2NvbXBfZXZlbnQoKSwgd2hpY2ggdGhlXG4mIzQzO1x0ICogRVEgaGFuZGxlciBpbnZva2VzIHZpYSBjcV90YWJsZVtpZF0uICBUaGUgQ1EgZGVzdHJveSBhYm92ZVxuJiM0MztcdCAqIGFscmVhZHkgY2xlYXJlZCB0aGF0IHNsb3QgYW5kIHJhbiBzeW5jaHJvbml6ZV9yY3UoKSwgc28gbm9cbiYjNDM7XHQgKiBoYW5kbGVyIGNhbiByZWFjaCBjb21wX2J1ZiBvbmNlIGl0IHJldHVybnMuICBEZXN0cm95aW5nIHRoZSBFUVxuJiM0MztcdCAqIGhlcmUgYWRkaXRpb25hbGx5IHRlYXJzIGRvd24gdGhlIElSUSAoZGVmZW5zZSBpbiBkZXB0aCkgYmVmb3JlXG4mIzQzO1x0ICogY29tcF9idWYgYW5kIGh3Y19jcSBhcmUgZnJlZWQgYmVsb3cuXG4mIzQzO1x0ICovXG4gXHRpZiAoaHdjX2NxLVx1MDAzZWdkbWFfZXEpXG4gXHRcdG1hbmFfZ2RfZGVzdHJveV9xdWV1ZShnYywgaHdjX2NxLVx1MDAzZWdkbWFfZXEpO1xuIFxuJiM0MztcdGtmcmVlKGh3Y19jcS1cdTAwM2Vjb21wX2J1Zik7XG4gXHRrZnJlZShod2NfY3EpO1xuIH1cbiBcbkBAIC01NjAsNiAmIzQzOzY5MCw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfY3JlYXRlX3dxKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyxcbiBcdGh3Y193cS1cdTAwM2VnZG1hX3dxID0gcXVldWU7XG4gXHRod2Nfd3EtXHUwMDNlcXVldWVfZGVwdGggPSBxX2RlcHRoO1xuIFx0aHdjX3dxLVx1MDAzZWh3Y19jcSA9IGh3Y19jcTtcbiYjNDM7XHRzcGluX2xvY2tfaW5pdChcdTAwMjZod2Nfd3EtXHUwMDNlbG9jayk7XG4gXG4gXHRlcnIgPSBtYW5hX2h3Y19hbGxvY19kbWFfYnVmKGh3YywgcV9kZXB0aCwgbWF4X21zZ19zaXplLFxuIFx0XHRcdFx0ICAgICBcdTAwMjZod2Nfd3EtXHUwMDNlbXNnX2J1Zik7XG5AQCAtNTc3LDcgJiM0Mzs3MDgsNyBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2NyZWF0ZV93cShzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgaW50IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKGNvbnN0IHN0cnVjdCBod2Nfd3EgKmh3Y190eHEsXG4mIzQzO3N0YXRpYyBpbnQgbWFuYV9od2NfcG9zdF90eF93cWUoc3RydWN0IGh3Y193cSAqaHdjX3R4cSxcbiBcdFx0XHRcdHN0cnVjdCBod2Nfd29ya19yZXF1ZXN0ICpyZXEsXG4gXHRcdFx0XHR1MzIgZGVzdF92aXJ0X3JxX2lkLCB1MzIgZGVzdF92aXJ0X3JjcV9pZCxcbiBcdFx0XHRcdGJvb2wgZGVzdF9wZilcbkBAIC02MTYsNyAmIzQzOzc0NywxMSBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKGNvbnN0IHN0cnVjdCBod2Nfd3EgKmh3Y190eHEsXG4gXHRyZXEtXHUwMDNld3FlX3JlcS5pbmxpbmVfb29iX2RhdGEgPSB0eF9vb2I7XG4gXHRyZXEtXHUwMDNld3FlX3JlcS5jbGllbnRfZGF0YV91bml0ID0gMDtcbiBcbiYjNDM7XHQvKiBTZXJpYWxpemUgV1FFIHBvc3Rpbmcg4oCUIG11bHRpcGxlIHNlbmRlcnMgbWF5IGNhbGwgY29uY3VycmVudGx5LiAqL1xuJiM0MztcdHNwaW5fbG9jayhcdTAwMjZod2NfdHhxLVx1MDAzZWxvY2spO1xuIFx0ZXJyID0gbWFuYV9nZF9wb3N0X2FuZF9yaW5nKGh3Y190eHEtXHUwMDNlZ2RtYV93cSwgXHUwMDI2cmVxLVx1MDAzZXdxZV9yZXEsIE5VTEwpO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmh3Y190eHEtXHUwMDNlbG9jayk7XG4mIzQzO1xuIFx0aWYgKGVycilcbiBcdFx0ZGV2X2VycihkZXYsIFwmIzM0O0ZhaWxlZCB0byBwb3N0IFdRRSBvbiBIV0MgU1E6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuIFx0cmV0dXJuIGVycjtcbkBAIC02MjcsNyAmIzQzOzc2Miw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfaW5pdF9pbmZsaWdodF9tc2coc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLFxuIHtcbiBcdGludCBlcnI7XG4gXG4tXHRzZW1hX2luaXQoXHUwMDI2aHdjLVx1MDAzZXNlbWEsIG51bV9tc2cpO1xuJiM0MztcdGluaXRfd2FpdHF1ZXVlX2hlYWQoXHUwMDI2aHdjLVx1MDAzZW1zZ193YWl0cSk7XG4gXG4gXHRlcnIgPSBtYW5hX2dkX2FsbG9jX3Jlc19tYXAobnVtX21zZywgXHUwMDI2aHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMpO1xuIFx0aWYgKGVycilcbkBAIC02NTcsMjMgJiM0Mzs3OTIsNDAgQEAgc3RhdGljIGludCBtYW5hX2h3Y190ZXN0X2NoYW5uZWwoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCxcbiBcdGlmICghY3R4KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHFfZGVwdGg7ICYjNDM7JiM0MztpKVxuJiM0MztcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHFfZGVwdGg7ICYjNDM7JiM0MztpKSB7XG4mIzQzO1x0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZjdHhbaV0ubG9jayk7XG4gXHRcdGluaXRfY29tcGxldGlvbihcdTAwMjZjdHhbaV0uY29tcF9ldmVudCk7XG4mIzQzO1x0fVxuIFxuIFx0aHdjLVx1MDAzZWNhbGxlcl9jdHggPSBjdHg7XG4gXG4tXHRyZXR1cm4gbWFuYV9nZF90ZXN0X2VxKGdjLCBod2MtXHUwMDNlY3EtXHUwMDNlZ2RtYV9lcSk7XG4mIzQzO1x0LyogY2hhbm5lbF91cCBtdXN0IGJlIHNldCBiZWZvcmUgdGhlIHRlc3QgRVEgcmVxdWVzdCwgYmVjYXVzZVxuJiM0MztcdCAqIHRoZSByZXF1ZXN0IGdvZXMgdGhyb3VnaCBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KCkgd2hpY2hcbiYjNDM7XHQgKiBjaGVja3MgY2hhbm5lbF91cC4gIGNhbGxlcl9jdHggaXMgYWxsb2NhdGVkIGFib3ZlLCBzb1xuJiM0MztcdCAqIGNvbmN1cnJlbnQgYWNjZXNzIHRvIGEgTlVMTCBjYWxsZXJfY3R4IGlzIG5vdCBwb3NzaWJsZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRod2MtXHUwMDNlY2hhbm5lbF91cCA9IHRydWU7XG4mIzQzO1xuJiM0MztcdGVyciA9IG1hbmFfZ2RfdGVzdF9lcShnYywgaHdjLVx1MDAzZWNxLVx1MDAzZWdkbWFfZXEpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRod2MtXHUwMDNlY2hhbm5lbF91cCA9IGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbi1zdGF0aWMgaW50IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MTYgKnFfZGVwdGgsXG4mIzQzO3N0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUzMiAqcV9kZXB0aCxcbiBcdFx0XHRcdCAgICAgIHUzMiAqbWF4X3JlcV9tc2dfc2l6ZSxcbiBcdFx0XHRcdCAgICAgIHUzMiAqbWF4X3Jlc3BfbXNnX3NpemUpXG4ge1xuJiM0MztcdC8qIE5vIFJDVSBuZWVkZWQ6IGNhbGxlZCBvbmx5IGZyb20gbWFuYV9od2NfY3JlYXRlX2NoYW5uZWxcbiYjNDM7XHQgKiBkdXJpbmcgaW5pdCwgYmVmb3JlIHRoZSBjaGFubmVsIGlzIHB1Ymxpc2hlZCB0byBzZW5kZXJzLlxuJiM0MztcdCAqL1xuIFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjID0gZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xuIFx0c3RydWN0IGdkbWFfcXVldWUgKnJxID0gaHdjLVx1MDAzZXJ4cS1cdTAwM2VnZG1hX3dxO1xuIFx0c3RydWN0IGdkbWFfcXVldWUgKnNxID0gaHdjLVx1MDAzZXR4cS1cdTAwM2VnZG1hX3dxO1xuIFx0c3RydWN0IGdkbWFfcXVldWUgKmVxID0gaHdjLVx1MDAzZWNxLVx1MDAzZWdkbWFfZXE7XG4gXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3EgPSBod2MtXHUwMDNlY3EtXHUwMDNlZ2RtYV9jcTtcbiYjNDM7XHRzdHJ1Y3QgZ2RtYV9xdWV1ZSBfX3JjdSAqKmNxX3RhYmxlO1xuIFx0aW50IGVycjtcbiBcbiBcdGluaXRfY29tcGxldGlvbihcdTAwMjZod2MtXHUwMDNlaHdjX2luaXRfZXFlX2NvbXApO1xuQEAgLTY4NywyNCAmIzQzOzgzOSw1MSBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MTYgKnFfZGVwdGgsXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXHUwMDI2aHdjLVx1MDAzZWh3Y19pbml0X2VxZV9jb21wLCA2MCAqIEhaKSlcbi1cdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO1x0Lyogc2V0dXBfaHdjIGFjdGl2YXRlZCBNU1QgZW50cmllcyDigJQgaGFyZHdhcmUgY2FuIG5vdyBETUEgaW50b1xuJiM0MztcdCAqIG91ciBxdWV1ZSBidWZmZXJzLiAgSWYgYW55dGhpbmcgYmVsb3cgZmFpbHMsIHdlIG11c3QgdGVhclxuJiM0MztcdCAqIGRvd24gYmVmb3JlIHJldHVybmluZyBzbyB0aGUgY2FsbGVyIGRvZXNuJiMzOTt0IG5lZWQgdG8gdHJhY2tcbiYjNDM7XHQgKiB3aGV0aGVyIHNldHVwX2h3YyBzdWNjZWVkZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aHdjLVx1MDAzZXNldHVwX2FjdGl2ZSA9IHRydWU7XG4mIzQzO1xuJiM0MztcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KFx1MDAyNmh3Yy1cdTAwM2Vod2NfaW5pdF9lcWVfY29tcCwgNjAgKiBIWikpIHtcbiYjNDM7XHRcdGVyciA9IC1FVElNRURPVVQ7XG4mIzQzO1x0XHRnb3RvIHRlYXJkb3duO1xuJiM0MztcdH1cbiBcbiBcdCpxX2RlcHRoID0gaHdjLVx1MDAzZWh3Y19pbml0X3FfZGVwdGhfbWF4O1xuIFx0Km1heF9yZXFfbXNnX3NpemUgPSBod2MtXHUwMDNlaHdjX2luaXRfbWF4X3JlcV9tc2dfc2l6ZTtcbiBcdCptYXhfcmVzcF9tc2dfc2l6ZSA9IGh3Yy1cdTAwM2Vod2NfaW5pdF9tYXhfcmVzcF9tc2dfc2l6ZTtcbiBcbiBcdC8qIEJvdGggd2VyZSBzZXQgaW4gbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKCkuICovXG4tXHRpZiAoV0FSTl9PTihjcS1cdTAwM2VpZCBcdTAwM2U9IGdjLVx1MDAzZW1heF9udW1fY3FzKSlcbi1cdFx0cmV0dXJuIC1FUFJPVE87XG4mIzQzO1x0aWYgKFdBUk5fT04oY3EtXHUwMDNlaWQgXHUwMDNlPSBnYy1cdTAwM2VtYXhfbnVtX2NxcykpIHtcbiYjNDM7XHRcdGVyciA9IC1FUFJPVE87XG4mIzQzO1x0XHRnb3RvIHRlYXJkb3duO1xuJiM0MztcdH1cbiBcbi1cdGdjLVx1MDAzZWNxX3RhYmxlID0gdmNhbGxvYyhnYy1cdTAwM2VtYXhfbnVtX2Nxcywgc2l6ZW9mKHN0cnVjdCBnZG1hX3F1ZXVlICopKTtcbi1cdGlmICghZ2MtXHUwMDNlY3FfdGFibGUpXG4tXHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdGNxX3RhYmxlID0gdmNhbGxvYyhnYy1cdTAwM2VtYXhfbnVtX2Nxcywgc2l6ZW9mKCpjcV90YWJsZSkpO1xuJiM0MztcdGlmICghY3FfdGFibGUpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9NRU07XG4mIzQzO1x0XHRnb3RvIHRlYXJkb3duO1xuJiM0MztcdH1cbiBcbi1cdGdjLVx1MDAzZWNxX3RhYmxlW2NxLVx1MDAzZWlkXSA9IGNxO1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihjcV90YWJsZVtjcS1cdTAwM2VpZF0sIGNxKTtcbiYjNDM7XHQvKiBQdWJsaXNoIHRoZSBmdWxseS1pbml0aWFsaXNlZCB0YWJsZSBsYXN0OyBwYWlycyB3aXRoIHRoZVxuJiM0MztcdCAqIHJjdV9kZXJlZmVyZW5jZShnYy1cdTAwM2VjcV90YWJsZSkgaW4gbWFuYV9nZF9wcm9jZXNzX2VxZSgpLlxuJiM0MztcdCAqL1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihnYy1cdTAwM2VjcV90YWJsZSwgY3FfdGFibGUpO1xuIFxuIFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0Mzt0ZWFyZG93bjpcbiYjNDM7XHR7XG4mIzQzO1x0XHRpbnQgdGRfZXJyID0gbWFuYV9zbWNfdGVhcmRvd25faHdjKFx1MDAyNmdjLVx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCF0ZF9lcnIpXG4mIzQzO1x0XHRcdGh3Yy1cdTAwM2VzZXR1cF9hY3RpdmUgPSBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0XHRyZXR1cm4gdGRfZXJyID8gdGRfZXJyIDogZXJyO1xuJiM0MztcdH1cbiB9XG4gXG4gc3RhdGljIGludCBtYW5hX2h3Y19pbml0X3F1ZXVlcyhzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLFxuQEAgLTcxMiw2ICYjNDM7ODkxLDEyIEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfaW5pdF9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCxcbiB7XG4gXHRpbnQgZXJyO1xuIFxuJiM0MztcdC8qIENRIGRlcHRoIGlzIHFfZGVwdGggKiAyIChTUSAmIzQzOyBSUSkgcGFzc2VkIGFzIHUxNiB0byBjcmVhdGVfY3EuXG4mIzQzO1x0ICogQ2FwIHRvIHByZXZlbnQgdTE2IHRydW5jYXRpb24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHFfZGVwdGggXHUwMDNlIFUxNl9NQVggLyAyKVxuJiM0MztcdFx0cV9kZXB0aCA9IFUxNl9NQVggLyAyO1xuJiM0MztcbiBcdGVyciA9IG1hbmFfaHdjX2luaXRfaW5mbGlnaHRfbXNnKGh3YywgcV9kZXB0aCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTcyOCwxNCAmIzQzOzkxMywxNCBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0ZXJyID0gbWFuYV9od2NfY3JlYXRlX3dxKGh3YywgR0RNQV9SUSwgcV9kZXB0aCwgbWF4X3JlcV9tc2dfc2l6ZSxcbiYjNDM7XHRlcnIgPSBtYW5hX2h3Y19jcmVhdGVfd3EoaHdjLCBHRE1BX1JRLCBxX2RlcHRoLCBtYXhfcmVzcF9tc2dfc2l6ZSxcbiBcdFx0XHRcdCBod2MtXHUwMDNlY3EsIFx1MDAyNmh3Yy1cdTAwM2VyeHEpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byBjcmVhdGUgSFdDIFJROiAlZFxcblwmIzM0OywgZXJyKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRlcnIgPSBtYW5hX2h3Y19jcmVhdGVfd3EoaHdjLCBHRE1BX1NRLCBxX2RlcHRoLCBtYXhfcmVzcF9tc2dfc2l6ZSxcbiYjNDM7XHRlcnIgPSBtYW5hX2h3Y19jcmVhdGVfd3EoaHdjLCBHRE1BX1NRLCBxX2RlcHRoLCBtYXhfcmVxX21zZ19zaXplLFxuIFx0XHRcdFx0IGh3Yy1cdTAwM2VjcSwgXHUwMDI2aHdjLVx1MDAzZXR4cSk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBIV0MgU1E6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuQEAgLTc0NCw2ICYjNDM7OTI5LDcgQEAgc3RhdGljIGludCBtYW5hX2h3Y19pbml0X3F1ZXVlcyhzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLFxuIFxuIFx0aHdjLVx1MDAzZW51bV9pbmZsaWdodF9tc2cgPSBxX2RlcHRoO1xuIFx0aHdjLVx1MDAzZW1heF9yZXFfbXNnX3NpemUgPSBtYXhfcmVxX21zZ19zaXplO1xuJiM0MztcdGh3Yy1cdTAwM2VtYXhfcmVzcF9tc2dfc2l6ZSA9IG1heF9yZXNwX21zZ19zaXplO1xuIFxuIFx0cmV0dXJuIDA7XG4gb3V0OlxuQEAgLTc1MSwxMiAmIzQzOzkzNyw2MiBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiYjNDM7LyogVGVhciBkb3duIGFsbCBIV0MgcXVldWVzIGFuZCBmcmVlIGFzc29jaWF0ZWQgcmVzb3VyY2VzLiAgVXNlZCBvblxuJiM0MzsgKiB0aGUgcmVpbml0LXdpdGgtaGlnaGVyLXF1ZXVlLWRlcHRoIHBhdGggYW5kIHJlaW5pdCBmYWxsYmFjay5cbiYjNDM7ICpcbiYjNDM7ICogUFJFQ09ORElUSU9OOiBtdXN0IGJlIGNhbGxlZCBvbmx5IGR1cmluZyBjaGFubmVsIGJyaW5nLXVwIGluXG4mIzQzOyAqIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKCksIGJlZm9yZSB0aGUgY2hhbm5lbCBpcyBwdWJsaXNoZWQgdG9cbiYjNDM7ICogc2VuZGVycy4gIFRoZXJlIHRoZSBzZXR1cCB0aHJlYWQgaXMgZWZmZWN0aXZlbHkgc2luZ2xlLXRocmVhZGVkXG4mIzQzOyAqIChzZXJpYWxpemVkIGFnYWluc3QgdGVhcmRvd24gYnkgdGhlIFBDSS9QTSBkZXZpY2VfbG9jayBvciwgb24gdGhlXG4mIzQzOyAqIHNlcnZpY2UgcGF0aCwgR0NfSU5fU0VSVklDRSwgd2l0aCB0aGUgZGF0YSBwYXRoIG5vdCB5ZXQgcHJvYmVkKSxcbiYjNDM7ICogY2hhbm5lbF91cCBpcyBzdGlsbCBmYWxzZSwgY2FsbGVyX2N0eCBpcyBub3QgeWV0IGFsbG9jYXRlZCwgYW5kXG4mIzQzOyAqIGFjdGl2ZV9zZW5kZXJzIGlzIDAg4oCUIHNvIG5vIGNvbmN1cnJlbnQgcmVxdWVzdC9yZXNwb25zZSB1c2VyIGNhblxuJiM0MzsgKiB0b3VjaCB0aGVzZSBxdWV1ZXMuICBUaGF0IGlzIHdoeSB0aGlzIHNraXBzIHRoZSBod2NfbG9jay1wcm90ZWN0ZWRcbiYjNDM7ICogZHJpdmVyX2RhdGEgY2xlYXIgJiM0MzsgYWN0aXZlX3NlbmRlcnMgZHJhaW4gdGhhdFxuJiM0MzsgKiBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoKSBuZWVkcyBmb3IgdGhlIHJ1bnRpbWUgdGVhcmRvd24gcmFjZTtcbiYjNDM7ICogb25seSB0aGUgQ1EtZmlyc3Qgb3JkZXJpbmcgYmVsb3cgKHRvIGZlbmNlIG9mZiBhIHBlbmRpbmcgaW50ZXJydXB0KVxuJiM0MzsgKiBpcyByZXF1aXJlZC4gIENhbGxpbmcgdGhpcyBvbiBhIGxpdmUsIHB1Ymxpc2hlZCBjaGFubmVsIHdvdWxkIGJlIGFcbiYjNDM7ICogdXNlLWFmdGVyLWZyZWUuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBtYW5hX2h3Y19kZXN0cm95X3F1ZXVlcyhzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IGh3Yy1cdTAwM2VnZG1hX2Rldi1cdTAwM2VnZG1hX2NvbnRleHQ7XG4mIzQzO1xuJiM0MztcdC8qIERlc3Ryb3kgQ1EgZmlyc3QgdG8gZGVyZWdpc3RlciB0aGUgRVEgZnJvbSB0aGUgaW50ZXJydXB0XG4mIzQzO1x0ICogaGFuZGxlciBsaXN0IGJlZm9yZSBmcmVlaW5nIGNhbGxlcl9jdHgsIFRYUSwgb3IgUlhRIG1lbW9yeS5cbiYjNDM7XHQgKiBBIHBlbmRpbmcgaW50ZXJydXB0IGhhbmRsZXIgY291bGQgc3RpbGwgcmVhY2ggaGFuZGxlX3Jlc3AoKVxuJiM0MztcdCAqIHdoaWNoIGRlcmVmZXJlbmNlcyBjYWxsZXJfY3R4LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChod2MtXHUwMDNlY3EpIHtcbiYjNDM7XHRcdG1hbmFfaHdjX2Rlc3Ryb3lfY3EoZ2MsIGh3Yy1cdTAwM2VjcSk7XG4mIzQzO1x0XHRod2MtXHUwMDNlY3EgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0a2ZyZWUoaHdjLVx1MDAzZWNhbGxlcl9jdHgpO1xuJiM0MztcdGh3Yy1cdTAwM2VjYWxsZXJfY3R4ID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKGh3Yy1cdTAwM2V0eHEpIHtcbiYjNDM7XHRcdG1hbmFfaHdjX2Rlc3Ryb3lfd3EoaHdjLCBod2MtXHUwMDNldHhxKTtcbiYjNDM7XHRcdGh3Yy1cdTAwM2V0eHEgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKGh3Yy1cdTAwM2VyeHEpIHtcbiYjNDM7XHRcdG1hbmFfaHdjX2Rlc3Ryb3lfd3EoaHdjLCBod2MtXHUwMDNlcnhxKTtcbiYjNDM7XHRcdGh3Yy1cdTAwM2VyeHEgPSBOVUxMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bWFuYV9nZF9mcmVlX3Jlc19tYXAoXHUwMDI2aHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMpO1xuJiM0MztcdGh3Yy1cdTAwM2VudW1faW5mbGlnaHRfbXNnID0gMDtcbiYjNDM7fVxuJiM0MztcbiBpbnQgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4ge1xuIFx0dTMyIG1heF9yZXFfbXNnX3NpemUsIG1heF9yZXNwX21zZ19zaXplO1xuIFx0c3RydWN0IGdkbWFfZGV2ICpnZCA9IFx1MDAyNmdjLVx1MDAzZWh3YztcbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3Yztcbi1cdHUxNiBxX2RlcHRoX21heDtcbiYjNDM7XHRzdHJ1Y3QgZ2RtYV9xdWV1ZSBfX3JjdSAqKm9sZF9jcV90YWJsZTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0MztcdHUzMiBxX2RlcHRoX21heDtcbiBcdGludCBlcnI7XG4gXG4gXHRod2MgPSBremFsbG9jX29iaigqaHdjKTtcbkBAIC03NjQsMTAgJiM0MzsxMDAwLDExIEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRnZC1cdTAwM2VnZG1hX2NvbnRleHQgPSBnYztcbi1cdGdkLVx1MDAzZWRyaXZlcl9kYXRhID0gaHdjO1xuIFx0aHdjLVx1MDAzZWdkbWFfZGV2ID0gZ2Q7XG4gXHRod2MtXHUwMDNlZGV2ID0gZ2MtXHUwMDNlZGV2O1xuIFx0aHdjLVx1MDAzZWh3Y190aW1lb3V0ID0gSFdfQ0hBTk5FTF9XQUlUX1JFU09VUkNFX1RJTUVPVVRfTVM7XG4mIzQzO1x0aHdjLVx1MDAzZWFjdGl2ZV9zZW5kZXJzID0gMDtcbiYjNDM7XHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmdjLVx1MDAzZWh3Y19kcmFpbl93YWl0cSk7XG4gXG4gXHQvKiBIV0MmIzM5O3MgaW5zdGFuY2UgbnVtYmVyIGlzIGFsd2F5cyAwLiAqL1xuIFx0Z2QtXHUwMDNlZGV2X2lkLmFzX3VpbnQzMiA9IDA7XG5AQCAtNzc2LDYgJiM0MzsxMDEzLDE1IEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiBcdGdkLVx1MDAzZXBkaWQgPSBJTlZBTElEX1BESUQ7XG4gXHRnZC1cdTAwM2Vkb29yYmVsbCA9IElOVkFMSURfRE9PUkJFTEw7XG4gXG4mIzQzO1x0LyogUHVibGlzaCBkcml2ZXJfZGF0YSBsYXN0LCB1bmRlciBod2NfbG9jazogdGhlIGxvY2sgb3JkZXJzIHRoZSBod2NcbiYjNDM7XHQgKiBpbml0aWFsaXNhdGlvbiBhYm92ZSBiZWZvcmUgdGhlIHBvaW50ZXIgYmVjb21lcyB2aXNpYmxlIGFuZFxuJiM0MztcdCAqIHNlcmlhbGlzZXMgdGhlIHB1Ymxpc2ggYWdhaW5zdCB0aGUgY29udHJvbC1wbGFuZSByZWFkZXJzIGluXG4mIzQzO1x0ICogbWFuYV9nZF9zZW5kX3JlcXVlc3QoKSwgbWFuYV9uZWVkX2xvZygpIGFuZCBtYW5hX3NlcnZfcmVzZXQoKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuJiM0MztcdGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YSA9IGh3YztcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4mIzQzO1xuIFx0LyogbWFuYV9od2NfaW5pdF9xdWV1ZXMoKSBvbmx5IGNyZWF0ZXMgdGhlIHJlcXVpcmVkIGRhdGEgc3RydWN0dXJlcyxcbiBcdCAqIGFuZCBkb2VzbiYjMzk7dCB0b3VjaCB0aGUgSFdDIGRldmljZS5cbiBcdCAqL1xuQEAgLTc5NCw4ICYjNDM7MTA0MCwxMzAgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiYjNDM7XHQvKiBUaGUgY2hhbm5lbCB3YXMgYm9vdHN0cmFwcGVkIGF0IGEgbWluaW1hbCBxdWV1ZSBkZXB0aC4gIElmIHRoZVxuJiM0MztcdCAqIGRldmljZSByZXBvcnRzIGEgaGlnaGVyIG1heGltdW0sIHRlYXIgZG93biBhbmQgcmVidWlsZCB3aXRoXG4mIzQzO1x0ICogdGhlIGxhcmdlciBkZXB0aCBzbyBtb3JlIEhXQyBjb21tYW5kcyBjYW4gYmUgaW4gZmxpZ2h0LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChxX2RlcHRoX21heCBcdTAwM2UgSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEgpIHtcbiYjNDM7XHRcdC8qIHFfZGVwdGhfbWF4IG5vdyBjYXJyaWVzIHRoZSBmdWxsIGRldmljZS1yZXBvcnRlZCB2YWx1ZVxuJiM0MztcdFx0ICogKEhXQ19JTklUX0RBVEFfUVVFVUVfREVQVEggaXMgMjQtYml0KS4gIENsYW1wIGl0IHRvIHRoZVxuJiM0MztcdFx0ICogZGVwdGggdGhlIHJlc3Qgb2YgdGhlIGRyaXZlciBzdXBwb3J0cyDigJQgY3JlYXRlX2NxKCkgdGFrZXNcbiYjNDM7XHRcdCAqIHFfZGVwdGggKiAyIGFzIGEgdTE2IOKAlCBiZWZvcmUgdGhlIG92ZXJmbG93IGNoZWNrIGJlbG93LCBzb1xuJiM0MztcdFx0ICogYW4gb3Zlci1sYXJnZSBidXQgb3RoZXJ3aXNlLXZhbGlkIGRlcHRoIGlzIHJlZHVjZWQgdG8gdGhlXG4mIzQzO1x0XHQgKiBtYXhpbXVtIGluc3RlYWQgb2Ygd3JhcHBpbmcgb3IgYmVpbmcgcmVqZWN0ZWQuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdGlmIChxX2RlcHRoX21heCBcdTAwM2UgVTE2X01BWCAvIDIpXG4mIzQzO1x0XHRcdHFfZGVwdGhfbWF4ID0gVTE2X01BWCAvIDI7XG4mIzQzO1xuJiM0MztcdFx0LyogU2FuaXR5LWNoZWNrIGRldmljZS1yZXBvcnRlZCB2YWx1ZXMgYmVmb3JlIHVzaW5nIHRoZW1cbiYjNDM7XHRcdCAqIHRvIHNpemUgRE1BIGFsbG9jYXRpb25zLiAgRW5mb3JjZSBwcm90b2NvbCBtaW5pbXVtc1xuJiM0MztcdFx0ICogZm9yIG1lc3NhZ2Ugc2l6ZXMgYW5kIGNoZWNrIHRoYXQgcV9kZXB0aCAqIG1heF9tc2dfc2l6ZVxuJiM0MztcdFx0ICogcGx1cyBhbGlnbm1lbnQgaGVhZHJvb20gZml0cyBpbiB1MzIgKGZvclxuJiM0MztcdFx0ICogbWFuYV9od2NfYWxsb2NfZG1hX2J1ZiYjMzk7cyBNQU5BX1BBR0VfQUxJR04pLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIW1heF9yZXFfbXNnX3NpemUgfHwgIW1heF9yZXNwX21zZ19zaXplIHx8XG4mIzQzO1x0XHQgICAgbWF4X3JlcV9tc2dfc2l6ZSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBnZG1hX3JlcV9oZHIpIHx8XG4mIzQzO1x0XHQgICAgbWF4X3Jlc3BfbXNnX3NpemUgXHUwMDNjIHNpemVvZihzdHJ1Y3QgZ2RtYV9yZXNwX2hkcikgfHxcbiYjNDM7XHRcdCAgICAodTY0KXFfZGVwdGhfbWF4ICogbWF4X3JlcV9tc2dfc2l6ZSBcdTAwM2VcbiYjNDM7XHRcdFx0VTMyX01BWCAtIE1BTkFfUEFHRV9TSVpFIHx8XG4mIzQzO1x0XHQgICAgKHU2NClxX2RlcHRoX21heCAqIG1heF9yZXNwX21zZ19zaXplIFx1MDAzZVxuJiM0MztcdFx0XHRVMzJfTUFYIC0gTUFOQV9QQUdFX1NJWkUpIHtcbiYjNDM7XHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFwmIzM0O0hXQzogaW52YWxpZCBkaW1zIHE9JXUgcmVxPSV1IHJlc3A9JXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0cV9kZXB0aF9tYXgsIG1heF9yZXFfbXNnX3NpemUsXG4mIzQzO1x0XHRcdFx0bWF4X3Jlc3BfbXNnX3NpemUpO1xuJiM0MztcdFx0XHRxX2RlcHRoX21heCA9IEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRIO1xuJiM0MztcdFx0XHRnb3RvIHNraXBfcmVpbml0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGVyciA9IG1hbmFfc21jX3RlYXJkb3duX2h3YyhcdTAwMjZnYy1cdTAwM2VzaG1fY2hhbm5lbCwgZmFsc2UpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHQvKiBLZWVwIHVzaW5nIHRoZSBib290c3RyYXAtZGVwdGggY2hhbm5lbC4gKi9cbiYjNDM7XHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFwmIzM0O0ZhaWxlZCB0byB0ZWFyZG93biBIV0MgZm9yIHJlaW5pdDogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ZXJyKTtcbiYjNDM7XHRcdFx0cV9kZXB0aF9tYXggPSBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSDtcbiYjNDM7XHRcdFx0Z290byBza2lwX3JlaW5pdDtcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRod2MtXHUwMDNlc2V0dXBfYWN0aXZlID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0LyogRGVzdHJveSBxdWV1ZXMgZmlyc3Qg4oCUIG1hbmFfZ2RfZGVzdHJveV9jcSBpbnNpZGVcbiYjNDM7XHRcdCAqIHVucHVibGlzaGVzIHRoZSBDUSBmcm9tIGNxX3RhYmxlIHZpYVxuJiM0MztcdFx0ICogcmN1X2Fzc2lnbl9wb2ludGVyKE5VTEwpICYjNDM7IHN5bmNocm9uaXplX3JjdS5cbiYjNDM7XHRcdCAqIE11c3QgaGFwcGVuIHdoaWxlIGNxX3RhYmxlIGlzIHN0aWxsIHZhbGlkLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRtYW5hX2h3Y19kZXN0cm95X3F1ZXVlcyhod2MpO1xuJiM0MztcbiYjNDM7XHRcdG9sZF9jcV90YWJsZSA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoZ2MtXHUwMDNlY3FfdGFibGUsIE5VTEwsIHRydWUpO1xuJiM0MztcdFx0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0XHR2ZnJlZShvbGRfY3FfdGFibGUpO1xuJiM0MztcbiYjNDM7XHRcdGVyciA9IG1hbmFfaHdjX2luaXRfcXVldWVzKGh3YywgcV9kZXB0aF9tYXgsXG4mIzQzO1x0XHRcdFx0XHQgICBtYXhfcmVxX21zZ19zaXplLFxuJiM0MztcdFx0XHRcdFx0ICAgbWF4X3Jlc3BfbXNnX3NpemUpO1xuJiM0MztcdFx0aWYgKGVycikge1xuJiM0MztcdFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZWluaXQgSFdDOiAlZFxcblwmIzM0OywgZXJyKTtcbiYjNDM7XHRcdFx0Z290byByZWluaXRfZmFsbGJhY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0ZXJyID0gbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoZ2MsIFx1MDAyNnFfZGVwdGhfbWF4LFxuJiM0MztcdFx0XHRcdFx0XHQgXHUwMDI2bWF4X3JlcV9tc2dfc2l6ZSxcbiYjNDM7XHRcdFx0XHRcdFx0IFx1MDAyNm1heF9yZXNwX21zZ19zaXplKTtcbiYjNDM7XHRcdGlmIChlcnIpIHtcbiYjNDM7XHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcJiMzNDtGYWlsZWQgdG8gcmUtZXN0YWJsaXNoIEhXQzogJWRcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0ZXJyKTtcbiYjNDM7XHRcdFx0LyogZXN0YWJsaXNoX2NoYW5uZWwgZG9lcyBpbnRlcm5hbCB0ZWFyZG93biBvblxuJiM0MztcdFx0XHQgKiBmYWlsdXJlLiAgSWYgdGVhcmRvd24gc3VjY2VlZGVkIChzZXR1cF9hY3RpdmVcbiYjNDM7XHRcdFx0ICogY2xlYXJlZCksIE1TVCBlbnRyaWVzIGFyZSBpbnZhbGlkYXRlZCBhbmQgd2VcbiYjNDM7XHRcdFx0ICogY2FuIHRyeSB0aGUgYm9vdHN0cmFwIGZhbGxiYWNrLiAgSWYgdGVhcmRvd25cbiYjNDM7XHRcdFx0ICogYWxzbyBmYWlsZWQgKHNldHVwX2FjdGl2ZSBzdGlsbCBzZXQpLCBoYXJkd2FyZVxuJiM0MztcdFx0XHQgKiBtYXBwaW5ncyBtYXkgc3RpbGwgYmUgYWN0aXZlIOKAlCBza2lwIGZhbGxiYWNrLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aWYgKGh3Yy1cdTAwM2VzZXR1cF9hY3RpdmUpXG4mIzQzO1x0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdGdvdG8gcmVpbml0X2ZhbGxiYWNrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0Z290byBza2lwX3JlaW5pdDtcbiYjNDM7XG4mIzQzO3JlaW5pdF9mYWxsYmFjazpcbiYjNDM7XHQvKiBSZXN0b3JlIGJvb3RzdHJhcC1kZXB0aCBjaGFubmVsIHNvIHRoZSBkZXZpY2UgcmVtYWlucyBmdW5jdGlvbmFsLlxuJiM0MztcdCAqIEZyZWUgY3FfdGFibGUgaWYgaXQgd2FzIGFsbG9jYXRlZCBieSBhIHBhcnRpYWxseSBzdWNjZXNzZnVsXG4mIzQzO1x0ICogZXN0YWJsaXNoIGF0dGVtcHQuXG4mIzQzO1x0ICovXG4mIzQzO1x0ZGV2X3dhcm4oaHdjLVx1MDAzZWRldiwgXCYjMzQ7SFdDIHJlaW5pdCBmYWlsZWQsIGZhbGxpbmcgYmFjayB0byBib290c3RyYXAgZGVwdGhcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHRtYW5hX2h3Y19kZXN0cm95X3F1ZXVlcyhod2MpO1xuJiM0MztcbiYjNDM7XHRvbGRfY3FfdGFibGUgPSByY3VfcmVwbGFjZV9wb2ludGVyKGdjLVx1MDAzZWNxX3RhYmxlLCBOVUxMLCB0cnVlKTtcbiYjNDM7XHRzeW5jaHJvbml6ZV9yY3UoKTtcbiYjNDM7XHR2ZnJlZShvbGRfY3FfdGFibGUpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBtYW5hX2h3Y19pbml0X3F1ZXVlcyhod2MsIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRILFxuJiM0MztcdFx0XHRcdCAgIEhXX0NIQU5ORUxfTUFYX1JFUVVFU1RfU0laRSxcbiYjNDM7XHRcdFx0XHQgICBIV19DSEFOTkVMX01BWF9SRVNQT05TRV9TSVpFKTtcbiYjNDM7XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwmIzM0O0ZhaWxlZCB0byByZXN0b3JlIGJvb3RzdHJhcCBIV0M6ICVkXFxuXCYjMzQ7LCBlcnIpO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRlcnIgPSBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChnYywgXHUwMDI2cV9kZXB0aF9tYXgsIFx1MDAyNm1heF9yZXFfbXNnX3NpemUsXG4mIzQzO1x0XHRcdFx0XHQgXHUwMDI2bWF4X3Jlc3BfbXNnX3NpemUpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHJlLWVzdGFibGlzaCBib290c3RyYXAgSFdDOiAlZFxcblwmIzM0OyxcbiYjNDM7XHRcdFx0ZXJyKTtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO3NraXBfcmVpbml0OlxuJiM0MztcbiYjNDM7XHQvKiBObyBSQ1UgbmVlZGVkOiBzdGlsbCBpbiBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbCwgdGhlXG4mIzQzO1x0ICogcG9pbnRlciBoYXMgbm90IGJlZW4gcHVibGlzaGVkIHRvIGNvbmN1cnJlbnQgc2VuZGVycyB5ZXQuXG4mIzQzO1x0ICovXG4gXHRlcnIgPSBtYW5hX2h3Y190ZXN0X2NoYW5uZWwoZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhLFxuLVx0XHRcdFx0ICAgIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRILFxuJiM0MztcdFx0XHRcdCAgICBod2MtXHUwMDNlbnVtX2luZmxpZ2h0X21zZyxcbiBcdFx0XHRcdCAgICBtYXhfcmVxX21zZ19zaXplLCBtYXhfcmVzcF9tc2dfc2l6ZSk7XG4gXHRpZiAoZXJyKSB7XG4gXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7RmFpbGVkIHRvIHRlc3QgSFdDOiAlZFxcblwmIzM0OywgZXJyKTtcbkBAIC04MTAsMjcgJiM0MzsxMTc4LDE5NSBAQCBpbnQgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4gXG4gdm9pZCBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXG4ge1xuJiM0MztcdC8qIFRoaXMgaXMgdGhlIG9ubHkgZGVzdHJveSBlbnRyeSBwb2ludC4gIGRyaXZlcl9kYXRhIGlzIHJlYWRcbiYjNDM7XHQgKiBwbGFpbmx5IGhlcmUgKHRlYXJkb3duIGlzIHNlcmlhbGlzZWQgYWdhaW5zdCBvdGhlciB0ZWFyZG93bik7XG4mIzQzO1x0ICogaXQgaXMgY2xlYXJlZCB1bmRlciBod2NfbG9jayBiZWxvdyBiZWZvcmUgaHdjIGlzIGZyZWVkLlxuJiM0MztcdCAqL1xuIFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjID0gZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xuJiM0MztcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqb2xkX2NxX3RhYmxlO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRpZiAoIWh3YylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0LyogZ2MtXHUwMDNlbWF4X251bV9jcXMgaXMgc2V0IGluIG1hbmFfaHdjX2luaXRfZXZlbnRfaGFuZGxlcigpLiBJZiBpdCYjMzk7c1xuLVx0ICogbm9uLXplcm8sIHRoZSBIV0Mgd29ya2VkIGFuZCB3ZSBzaG91bGQgdGVhciBkb3duIHRoZSBIV0MgaGVyZS5cbiYjNDM7XHQvKiBQcmV2ZW50IG5ldyByZXF1ZXN0cyBmcm9tIHN0YXJ0aW5nIGFuZCB3YWtlIGFueVxuJiM0MztcdCAqIHRocmVhZHMgd2FpdGluZyBmb3IgYSBmcmVlIG1zZyBzbG90LiAgU2V0IGNoYW5uZWxfdXAgdW5kZXJcbiYjNDM7XHQgKiB0aGUgYml0bWFwIGxvY2sgc28gZ2V0X21zZ19pbmRleCgpIGNhbm5vdCBhY3F1aXJlIGEgc2xvdFxuJiM0MztcdCAqIGFuZCBpbmNyZW1lbnQgYWN0aXZlX3NlbmRlcnMgYWZ0ZXIgdGhpcyBwb2ludC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIElmIGNoYW5uZWxfdXAgaXMgYWxyZWFkeSBmYWxzZSAoZS5nLiBpbml0IGZhaWxlZCBiZWZvcmVcbiYjNDM7XHQgKiB0aGUgY2hhbm5lbCB3YXMgZXN0YWJsaXNoZWQpLCBza2lwIHRoZSBsb2NrIOKAlCBpdCBtYXkgbm90XG4mIzQzO1x0ICogaGF2ZSBiZWVuIGluaXRpYWxpemVkIHlldCwgYW5kIG5vIHNlbmRlcnMgY2FuIGJlIGFjdGl2ZS5cbiBcdCAqL1xuLVx0aWYgKGdjLVx1MDAzZW1heF9udW1fY3FzIFx1MDAzZSAwKSB7XG4tXHRcdG1hbmFfc21jX3RlYXJkb3duX2h3YyhcdTAwMjZnYy1cdTAwM2VzaG1fY2hhbm5lbCwgZmFsc2UpO1xuLVx0XHRnYy1cdTAwM2VtYXhfbnVtX2NxcyA9IDA7XG4mIzQzO1x0aWYgKGh3Yy1cdTAwM2VjaGFubmVsX3VwKSB7XG4mIzQzO1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRod2MtXHUwMDNlY2hhbm5lbF91cCA9IGZhbHNlO1xuJiM0MztcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7XG4mIzQzO1x0XHR3YWtlX3VwX2FsbChcdTAwMjZod2MtXHUwMDNlbXNnX3dhaXRxKTtcbiBcdH1cbiBcbiYjNDM7XHQvKiBDbGVhciB0aGUgcG9pbnRlciB1bmRlciBod2NfbG9jayBzbyBuZXcgY2FsbGVycyBpblxuJiM0MztcdCAqIG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCkgc2VlIE5VTEwgYW5kIHJldHVybiAtRU5PREVWLiAgVGhlIGxvY2tcbiYjNDM7XHQgKiBtYWtlcyB0aGUgcmVhZGVycyYjMzk7IFwmIzM0O2xvYWQgZHJpdmVyX2RhdGEgJiM0MzsgYWN0aXZlX3NlbmRlcnMmIzQzOyYjNDM7XCYjMzQ7XG4mIzQzO1x0ICogYXRvbWljIGFnYWluc3QgdGhpcyBzdG9yZSwgc28gb25jZSBpdCByZXR1cm5zIG5vIG5ldyBzZW5kZXIgY2FuXG4mIzQzO1x0ICogdGFrZSBhIHJlZmVyZW5jZTsgdGhlIGFjdGl2ZV9zZW5kZXJzIGRyYWluIGJlbG93IHdhaXRzIG91dCB0aG9zZVxuJiM0MztcdCAqIHRoYXQgYWxyZWFkeSBkaWQsIGJlZm9yZSB0aGVpciBod2MgaXMgZnJlZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiYjNDM7XHRnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGEgPSBOVUxMO1xuJiM0MztcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiYjNDM7XG4mIzQzO1x0LyogRm9yY2UtY29tcGxldGUgYW55IGluLWZsaWdodCBzZW5kZXJzIHNvIHRoZXkgb2JzZXJ2ZSAtRU5PREVWLFxuJiM0MztcdCAqIHJldHVybiwgYW5kIGRyb3AgdGhlaXIgcmVmZXJlbmNlcy4gIFRoaXMgcnVucyBiZWZvcmUgdGhlIEhXQ1xuJiM0MztcdCAqIGhhcmR3YXJlIHRlYXJkb3duIGJlbG93LCBzbyBhIGxpdmUgaW50ZXJydXB0IG1heSBzdGlsbCBkZWxpdmVyXG4mIzQzO1x0ICogYSByZWFsIHJlc3BvbnNlIHZpYSBoYW5kbGVfcmVzcCgpIGNvbmN1cnJlbnRseSDigJQgdGhhdCBpcyBzYWZlXG4mIzQzO1x0ICogYmVjYXVzZSB0aGUgcGVyLXNsb3QgcmVmY291bnQgbW9kZWwgdG9sZXJhdGVzIGEgY29uY3VycmVudFxuJiM0MztcdCAqIGNvbXBsZXRlKCkgYW5kIGJvdGggcGF0aHMgKGhhbmRsZV9yZXNwIGFuZCB0aGlzIGxvb3ApIGRyb3BcbiYjNDM7XHQgKiB0aGVpciByZWZzIHdpdGhvdXQgZG91YmxlLXJlbGVhc2luZyB0aGUgc2xvdC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaHdjLVx1MDAzZWNhbGxlcl9jdHgpIHtcbiYjNDM7XHRcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xuJiM0MztcdFx0aW50IGk7XG4mIzQzO1xuJiM0MztcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaHdjLVx1MDAzZW51bV9pbmZsaWdodF9tc2c7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRcdGlmICghdGVzdF9iaXQoaSwgaHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHRcdGN0eCA9IFx1MDAyNmh3Yy1cdTAwM2VjYWxsZXJfY3R4W2ldO1xuJiM0MztcbiYjNDM7XHRcdFx0LyogV2FrZSBzZW5kZXJzIGJsb2NrZWQgb24gd2FpdF9mb3JfY29tcGxldGlvbi5cbiYjNDM7XHRcdFx0ICogU2V0IGVycm9yIHVuZGVyIGxvY2sgdG8gYXZvaWQgcmFjaW5nIHdpdGhcbiYjNDM7XHRcdFx0ICogaGFuZGxlX3Jlc3AoKSB3aGljaCB3cml0ZXMgZXJyb3IgdW5kZXIgdGhlXG4mIzQzO1x0XHRcdCAqIHNhbWUgbG9jay4gIFRoZSBzZW5kZXIgTlVMTHMgb3V0cHV0X2J1ZlxuJiM0MztcdFx0XHQgKiBhZnRlciB3YWtpbmcg4oCUIGRvaW5nIGl0IGhlcmUgd291bGQgcmFjZVxuJiM0MztcdFx0XHQgKiB3aXRoIGEgc2VuZGVyIHRoYXQgaGFzbiYjMzk7dCBzZXQgb3V0cHV0X2J1ZiB5ZXQuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0XHRjdHgtXHUwMDNlZXJyb3IgPSAtRU5PREVWO1xuJiM0MztcdFx0XHRjb21wbGV0ZShcdTAwMjZjdHgtXHUwMDNlY29tcF9ldmVudCk7XG4mIzQzO1x0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3R4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFdhaXQgZm9yIGFsbCBzZW5kZXIgdGhyZWFkcyB0byBmaW5pc2ggYW5kIGRyb3AgdGhlaXIgcmVmc1xuJiM0MztcdCAqIGJlZm9yZSB0b3VjaGluZyB0aGUgaGFyZHdhcmUgb3IgZnJlZWluZyBhbnl0aGluZy4gIERyYWluaW5nXG4mIzQzO1x0ICogaGVyZSAtLSBhaGVhZCBvZiB0aGUgdGVhcmRvd24vRkxSIGJsb2NrIGJlbG93IC0tIGd1YXJhbnRlZXMgbm9cbiYjNDM7XHQgKiBpbi1mbGlnaHQgc2VuZGVyIGlzIHN0aWxsIHJ1bm5pbmcgd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb25cbiYjNDM7XHQgKiBhbnkgcGF0aCwgaW5jbHVkaW5nIHRoZSBGTFItZmFpbHVyZSBlYXJseSByZXR1cm47IG90aGVyd2lzZSBhXG4mIzQzO1x0ICogc3RyYW5kZWQgc2VuZGVyIHdvdWxkIGRlcmVmZXJlbmNlIGdjLVx1MDAzZWh3Y19sb2NrIC9cbiYjNDM7XHQgKiBnYy1cdTAwM2Vod2NfZHJhaW5fd2FpdHEgYWZ0ZXIgdGhlIGNhbGxlciBmcmVlcyBnYy5cbiYjNDM7XHQgKiBBZnRlciB0aGlzLCBvbmx5IHNsb3RzIGhlbGQgYnkgdGltZWQtb3V0IHNlbmRlcnMgd2hvc2VcbiYjNDM7XHQgKiBoYW5kbGVfcmVzcCgpIG5ldmVyIHJhbiByZW1haW4gaW4gdGhlIGJpdG1hcC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIGFjdGl2ZV9zZW5kZXJzIGlzIG9ubHkgZXZlciBtb2RpZmllZCB1bmRlciBod2NfbG9jaywgYW5kIHRoZVxuJiM0MztcdCAqIGxhc3Qgc2VuZGVyJiMzOTtzIHdha2VfdXAoKSBydW5zIHVuZGVyIHRoYXQgbG9jayBiZWZvcmUgaXQgaXNcbiYjNDM7XHQgKiByZWxlYXNlZC4gIEV2YWx1YXRpbmcgdGhlIGNvbmRpdGlvbiB1bmRlciBod2NfbG9jayB0aGVyZWZvcmVcbiYjNDM7XHQgKiBndWFyYW50ZWVzIHRoYXQgb25jZSB3ZSBvYnNlcnZlIDAgdGhlIHdha2luZyBzZW5kZXIgaGFzXG4mIzQzO1x0ICogYWxyZWFkeSBkcm9wcGVkIHRoZSBsb2NrIC0tIGkuZS4gZmluaXNoZWQgdG91Y2hpbmcgZ2MgLS0gc28gaXRcbiYjNDM7XHQgKiBjYW5ub3QgcmFjZSB0aGUgY2FsbGVyIGZyZWVpbmcgZ2MgYWZ0ZXIgdGhpcyByZXR1cm5zLlxuJiM0MztcdCAqL1xuJiM0MztcdHNwaW5fbG9ja19pcnEoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2spO1xuJiM0MztcdHdhaXRfZXZlbnRfbG9ja19pcnEoZ2MtXHUwMDNlaHdjX2RyYWluX3dhaXRxLFxuJiM0MztcdFx0XHQgICAgaHdjLVx1MDAzZWFjdGl2ZV9zZW5kZXJzID09IDAsIGdjLVx1MDAzZWh3Y19sb2NrKTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnEoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBUZWFyIGRvd24gdGhlIEhXQyBpZiBzZXR1cF9od2MgcHJldmlvdXNseSBhY3RpdmF0ZWQgTVNUIGVudHJpZXMuXG4mIzQzO1x0ICogVGhpcyBpcyB0aGUgZGVmaW5pdGl2ZSBmbGFnIOKAlCB1bmxpa2UgbWF4X251bV9jcXMgd2hpY2ggZGVwZW5kc1xuJiM0MztcdCAqIG9uIHRoZSBpbml0IEVRRSBhcnJpdmluZy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZSByZXR1cm4gdmFsdWUgaXMgaW50ZW50aW9uYWxseSBub3QgY2hlY2tlZC4gIFRoaXMgaXMgdGhlXG4mIzQzO1x0ICogdGVybWluYWwgY2xlYW51cCBwYXRoIChkZXZpY2UgcmVtb3ZhbCwgc3VzcGVuZCwgb3IgaW5pdFxuJiM0MztcdCAqIGZhaWx1cmUpIOKAlCByZXNvdXJjZXMgbXVzdCBiZSBmcmVlZCByZWdhcmRsZXNzLiAgSWYgdGVhcmRvd25cbiYjNDM7XHQgKiBmYWlscywgaGFyZHdhcmUgbWF5IHN0aWxsIGhhdmUgYWN0aXZlIE1TVCBlbnRyaWVzLCBidXQ6XG4mIzQzO1x0ICpcbiYjNDM7XHQgKiAgLSBJbnRlcnJ1cHRzOiBtYW5hX2h3Y19kZXN0cm95X2NxKCkgYmVsb3cgY2FsbHNcbiYjNDM7XHQgKiAgICBtYW5hX2dkX2RlcmVnaXN0ZXJfaXJxKCkgd2hpY2ggcmVtb3ZlcyB0aGUgSFdDIEVRIGZyb21cbiYjNDM7XHQgKiAgICB0aGUgaW50ZXJydXB0IGRpc3BhdGNoIGxpc3QgdmlhIGxpc3RfZGVsX3JjdSgpICYjNDM7XG4mIzQzO1x0ICogICAgc3luY2hyb25pemVfcmN1KCkuICBBZnRlciB0aGF0LCBubyBpbnRlcnJ1cHQgaGFuZGxlciBjYW5cbiYjNDM7XHQgKiAgICBpbnZva2UgaGFuZGxlX3Jlc3AoKSBvciBhY2Nlc3MgQ1EvUlEgYnVmZmVycyDigJQgZXZlbiBpZlxuJiM0MztcdCAqICAgIHRoZSBJUlEgaXMgc2hhcmVkIHdpdGggZGF0YSBwYXRoIHF1ZXVlcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqICAtIERNQTogbWFuYV9od2NfZGVzdHJveV93cSgpIGZyZWVzIERNQSBidWZmZXJzIHZpYVxuJiM0MztcdCAqICAgIGRtYV9mcmVlX2NvaGVyZW50KCkgd2hpY2ggdW5tYXBzIHRoZSBJT1ZBIGZyb20gdGhlXG4mIzQzO1x0ICogICAgSU9NTVUuICBBbnkgc3RhbGUgaGFyZHdhcmUgRE1BIHRvIHRoZSBvbGQgYWRkcmVzc1xuJiM0MztcdCAqICAgIGZhdWx0cyBhdCB0aGUgSU9NTVUsIG5vdCBpbiBrZXJuZWwgbWVtb3J5LlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChod2MtXHUwMDNlc2V0dXBfYWN0aXZlKSB7XG4mIzQzO1x0XHRpbnQgdGRfZXJyID0gbWFuYV9zbWNfdGVhcmRvd25faHdjKFx1MDAyNmdjLVx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHRkX2Vycikge1xuJiM0MztcdFx0XHRkZXZfZXJyKGdjLVx1MDAzZWRldiwgXCYjMzQ7SFdDIHRlYXJkb3duIGZhaWxlZDogJWQsIGlzc3VpbmcgRkxSXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdHRkX2Vycik7XG4mIzQzO1xuJiM0MztcdFx0XHQvKiBPbiBzeXN0ZW1zIHdpdGhvdXQgSU9NTVUsIGZyZWVpbmcgRE1BIG1lbW9yeSB3aXRoXG4mIzQzO1x0XHRcdCAqIGFjdGl2ZSBoYXJkd2FyZSBNU1QgbWFwcGluZ3Mgcmlza3MgbWVtb3J5IGNvcnJ1cHRpb24uXG4mIzQzO1x0XHRcdCAqIElzc3VlIEZMUiB0byBmb3JjZS1yZXNldCB0aGUgZGV2aWNlIGFuZCBpbnZhbGlkYXRlXG4mIzQzO1x0XHRcdCAqIGFsbCBoYXJkd2FyZSBzdGF0ZSBpbmNsdWRpbmcgTVNUIGVudHJpZXMuXG4mIzQzO1x0XHRcdCAqL1xuJiM0MztcdFx0XHR0ZF9lcnIgPSBwY2llX2Zscih0b19wY2lfZGV2KGdjLVx1MDAzZWRldikpO1xuJiM0MztcdFx0XHRpZiAodGRfZXJyKSB7XG4mIzQzO1x0XHRcdFx0LyogRGV2aWNlIHdlZGdlZDogdGVhcmRvd24gYW5kIEZMUlxuJiM0MztcdFx0XHRcdCAqIGJvdGggZmFpbGVkLCBzbyBoYXJkd2FyZSBtYXkgc3RpbGxcbiYjNDM7XHRcdFx0XHQgKiBETUEgaW50byBvdXIgcXVldWUgYnVmZmVycy4gIExlYWtcbiYjNDM7XHRcdFx0XHQgKiBhbGwgSFdDIERNQSBidWZmZXJzIC0tIGFuZCB0aGUgRVFcbiYjNDM7XHRcdFx0XHQgKiBJUlEgcmVnaXN0cmF0aW9uLCB3aG9zZSBzYWZlIHJlbW92YWxcbiYjNDM7XHRcdFx0XHQgKiBuZWVkcyB0aG9zZSBxdWV1ZXMgLS0gaW5zdGVhZCBvZlxuJiM0MztcdFx0XHRcdCAqIGZyZWVpbmcgbWVtb3J5IHRoZSBkZXZpY2UgY2FuIHN0aWxsXG4mIzQzO1x0XHRcdFx0ICogcmVhY2g7IHdpdGhvdXQgYW4gSU9NTVUgdGhlIGZyZWVkXG4mIzQzO1x0XHRcdFx0ICogcGFnZXMgY291bGQgYmUgcmV1c2VkIHVuZGVyIGxpdmVcbiYjNDM7XHRcdFx0XHQgKiBETUEuXG4mIzQzO1x0XHRcdFx0ICovXG4mIzQzO1xuJiM0MztcdFx0XHRcdGRldl93YXJuKGdjLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcdCBcJiMzNDtMZWFrZWQgSFdDIERNQSBidWZmZXJzIChDUS9SUS9UWFEpIHRvIHByZXZlbnQgbWVtb3J5IGNvcnJ1cHRpb24uIERldmljZSBpcyBubyBsb25nZXIgdXNhYmxlLlxcblwmIzM0Oyk7XG4mIzQzO1xuJiM0MztcdFx0XHRcdC8qIERvIG5vdCBjYWxsIGRlc3Ryb3lfY3Evd3EgYmVsb3c7XG4mIzQzO1x0XHRcdFx0ICogdGhleSB3b3VsZCBkbWFfZnJlZV9jb2hlcmVudCgpLlxuJiM0MztcdFx0XHRcdCAqIExlYXZlIGh3Yy9jcS9yeHEvdHhxIGFsbG9jYXRlZC5cbiYjNDM7XHRcdFx0XHQgKi9cbiYjNDM7XHRcdFx0XHRyZXR1cm47XG4mIzQzO1x0XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRcdGRldl9pbmZvKGdjLVx1MDAzZWRldiwgXCYjMzQ7RkxSIHN1Y2NlZWRlZCwgaGFyZHdhcmUgc3RhdGUgY2xlYXJlZFxcblwmIzM0Oyk7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0aHdjLVx1MDAzZXNldHVwX2FjdGl2ZSA9IGZhbHNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0LyogVGVhciBkb3duIHRoZSBIV0MgQ1Egb2JqZWN0IGZpcnN0IOKAlCBtYW5hX2h3Y19kZXN0cm95X2NxKClcbiYjNDM7XHQgKiBib3RoIHVucHVibGlzaGVzIHRoZSBDUSBmcm9tIGNxX3RhYmxlICgmIzQzO3N5bmNocm9uaXplX3JjdSkgYW5kXG4mIzQzO1x0ICogZGVyZWdpc3RlcnMgdGhlIEhXQyBFUSBmcm9tIHRoZSBpbnRlcnJ1cHQgaGFuZGxlciYjMzk7cyBSQ1UgbGlzdFxuJiM0MztcdCAqICh2aWEgbWFuYV9nZF9kZXJlZ2lzdGVyX2lycSAmIzQzOyBzeW5jaHJvbml6ZV9yY3UpLCBndWFyYW50ZWVpbmdcbiYjNDM7XHQgKiBubyBpbnRlcnJ1cHQgaGFuZGxlciBjYW4gYWNjZXNzIFJRL1RYUSBidWZmZXJzIGFmdGVyIHRoaXNcbiYjNDM7XHQgKiBwb2ludC4gIFRoZSBhY3RpdmVfc2VuZGVycyBkcmFpbiBhYm92ZSBlbnN1cmVzIG5vIHNlbmRlciBpc1xuJiM0MztcdCAqIGFjY2Vzc2luZyB0aGUgQ1EgdmlhIHR4cS1cdTAwM2Vod2NfY3Egd2hlbiBpdCBpcyBkZXN0cm95ZWQuICBUaGVuXG4mIzQzO1x0ICogZGVzdHJveSBUWFEgYW5kIFJRIHNhZmVseS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoaHdjLVx1MDAzZWNxKVxuJiM0MztcdFx0bWFuYV9od2NfZGVzdHJveV9jcShod2MtXHUwMDNlZ2RtYV9kZXYtXHUwMDNlZ2RtYV9jb250ZXh0LCBod2MtXHUwMDNlY3EpO1xuJiM0MztcbiBcdGlmIChod2MtXHUwMDNldHhxKVxuIFx0XHRtYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLVx1MDAzZXR4cSk7XG4gXG4gXHRpZiAoaHdjLVx1MDAzZXJ4cSlcbiBcdFx0bWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy1cdTAwM2VyeHEpO1xuIFxuLVx0aWYgKGh3Yy1cdTAwM2VjcSlcbi1cdFx0bWFuYV9od2NfZGVzdHJveV9jcShod2MtXHUwMDNlZ2RtYV9kZXYtXHUwMDNlZ2RtYV9jb250ZXh0LCBod2MtXHUwMDNlY3EpO1xuJiM0MztcdC8qIFJlbGVhc2UgYW55IHNsb3RzIHN0aWxsIGhlbGQg4oCUIHRoZXNlIGJlbG9uZyB0byB0aW1lZC1vdXRcbiYjNDM7XHQgKiBzZW5kZXJzIHdoZXJlIGhhbmRsZV9yZXNwKCkgbmV2ZXIgcmFuIChyZWZjb3VudCA9IDEgd2l0aFxuJiM0MztcdCAqIGhhbmRsZV9yZXNwJiMzOTtzIHJlZiBzdGlsbCBvdXRzdGFuZGluZykuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGh3Yy1cdTAwM2VjYWxsZXJfY3R4KSB7XG4mIzQzO1x0XHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDtcbiYjNDM7XHRcdGludCBpO1xuJiM0MztcbiYjNDM7XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGh3Yy1cdTAwM2VudW1faW5mbGlnaHRfbXNnOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0XHRpZiAoIXRlc3RfYml0KGksIGh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLm1hcCkpXG4mIzQzO1x0XHRcdFx0Y29udGludWU7XG4mIzQzO1xuJiM0MztcdFx0XHRjdHggPSBcdTAwMjZod2MtXHUwMDNlY2FsbGVyX2N0eFtpXTtcbiYjNDM7XHRcdFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiBcbiBcdGtmcmVlKGh3Yy1cdTAwM2VjYWxsZXJfY3R4KTtcbiBcdGh3Yy1cdTAwM2VjYWxsZXJfY3R4ID0gTlVMTDtcbkBAIC04NDUsMTEgJiM0MzsxMzgxLDExIEBAIHZvaWQgbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIFx0aHdjLVx1MDAzZWh3Y190aW1lb3V0ID0gMDtcbiBcbiBcdGtmcmVlKGh3Yyk7XG4tXHRnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGEgPSBOVUxMO1xuIFx0Z2MtXHUwMDNlaHdjLmdkbWFfY29udGV4dCA9IE5VTEw7XG4gXG4tXHR2ZnJlZShnYy1cdTAwM2VjcV90YWJsZSk7XG4tXHRnYy1cdTAwM2VjcV90YWJsZSA9IE5VTEw7XG4mIzQzO1x0b2xkX2NxX3RhYmxlID0gcmN1X3JlcGxhY2VfcG9pbnRlcihnYy1cdTAwM2VjcV90YWJsZSwgTlVMTCwgdHJ1ZSk7XG4mIzQzO1x0c3luY2hyb25pemVfcmN1KCk7XG4mIzQzO1x0dmZyZWUob2xkX2NxX3RhYmxlKTtcbiB9XG4gXG4gaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLFxuQEAgLTg2MCwxMyAmIzQzOzEzOTYsMTcgQEAgaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLFxuIFx0c3RydWN0IGh3Y193cSAqdHhxID0gaHdjLVx1MDAzZXR4cTtcbiBcdHN0cnVjdCBnZG1hX3JlcV9oZHIgKnJlcV9tc2c7XG4gXHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0dTMyIGRlc3RfdnJjcSA9IDA7XG4gXHR1MzIgZGVzdF92cnEgPSAwO1xuIFx0dTMyIGNvbW1hbmQ7XG4mIzQzO1x0dTMyIHN0YXR1cztcbiBcdHUxNiBtc2dfaWQ7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bWFuYV9od2NfZ2V0X21zZ19pbmRleChod2MsIFx1MDAyNm1zZ19pZCk7XG4mIzQzO1x0ZXJyID0gbWFuYV9od2NfZ2V0X21zZ19pbmRleChod2MsIFx1MDAyNm1zZ19pZCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4gXG4gXHR0eF93ciA9IFx1MDAyNnR4cS1cdTAwM2Vtc2dfYnVmLVx1MDAzZXJlcXNbbXNnX2lkXTtcbiBcbkBAIC04NzgsOCAmIzQzOzE0MTgsMTEgQEAgaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLFxuIFx0fVxuIFxuIFx0Y3R4ID0gaHdjLVx1MDAzZWNhbGxlcl9jdHggJiM0MzsgbXNnX2lkO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFx0Y3R4LVx1MDAzZW91dHB1dF9idWYgPSByZXNwO1xuIFx0Y3R4LVx1MDAzZW91dHB1dF9idWZsZW4gPSByZXNwX2xlbjtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4gXHRyZXFfbXNnID0gKHN0cnVjdCBnZG1hX3JlcV9oZHIgKil0eF93ci1cdTAwM2VidWZfdmE7XG4gXHRpZiAocmVxKVxuQEAgLTg5NSw4ICYjNDM7MTQzOCwxNCBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sXG4gXHRcdGRlc3RfdnJjcSA9IGh3Yy1cdTAwM2VwZl9kZXN0X3ZyY3FfaWQ7XG4gXHR9XG4gXG4mIzQzO1x0LyogVGFrZSBoYW5kbGVfcmVzcCYjMzk7cyByZWYgYmVmb3JlIHBvc3Rpbmcg4oCUIGhhcmR3YXJlIGNhbiByZXNwb25kXG4mIzQzO1x0ICogaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGRvb3JiZWxsIHJpbmcuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmVmY291bnRfaW5jKFx1MDAyNmN0eC1cdTAwM2VyZWZjbnQpO1xuJiM0MztcbiBcdGVyciA9IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKHR4cSwgdHhfd3IsIGRlc3RfdnJxLCBkZXN0X3ZyY3EsIGZhbHNlKTtcbiBcdGlmIChlcnIpIHtcbiYjNDM7XHRcdHJlZmNvdW50X2RlYyhcdTAwMjZjdHgtXHUwMDNlcmVmY250KTtcbiBcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcJiMzNDtIV0M6IEZhaWxlZCB0byBwb3N0IHNlbmQgV1FFOiAlZFxcblwmIzM0OywgZXJyKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG5AQCAtOTA3LDMxICYjNDM7MTQ1Niw4NiBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sXG4gXHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcJiMzNDtDb21tYW5kIDB4JXggdGltZWQgb3V0OiAldSBtc1xcblwmIzM0OyxcbiBcdFx0XHRcdGNvbW1hbmQsIGh3Yy1cdTAwM2Vod2NfdGltZW91dCk7XG4gXG4tXHRcdC8qIFJlZHVjZSBmdXJ0aGVyIHdhaXRpbmcgaWYgSFdDIG5vIHJlc3BvbnNlICovXG4mIzQzO1x0XHQvKiBOVUxMIG91dCBvdXRwdXRfYnVmIHNvIGEgbGF0ZSBoYW5kbGVfcmVzcCgpIHdvbiYjMzk7dCB3cml0ZVxuJiM0MztcdFx0ICogaW50byB0aGUgY2FsbGVyJiMzOTtzIGJ1ZmZlciBhZnRlciB0aGUgc2VuZGVyIHJldHVybnMsIHRoZW5cbiYjNDM7XHRcdCAqIGNoZWNrIHdoZXRoZXIgaGFuZGxlX3Jlc3AoKSBhbHJlYWR5IGRlbGl2ZXJlZCBhIHZhbGlkXG4mIzQzO1x0XHQgKiByZXNwb25zZSBiZXR3ZWVuIHRoZSB0aW1lb3V0IGZpcmluZyBhbmQgdGhpcyBsb2NrXG4mIzQzO1x0XHQgKiBhY3F1aXNpdGlvbiDigJQgY3R4LVx1MDAzZWVycm9yICE9IC1FSU5QUk9HUkVTUyBtZWFucyBpdCByYW4uXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0XHRjdHgtXHUwMDNlb3V0cHV0X2J1ZiA9IE5VTEw7XG4mIzQzO1x0XHRlcnIgPSBjdHgtXHUwMDNlZXJyb3I7XG4mIzQzO1x0XHRzdGF0dXMgPSBjdHgtXHUwMDNlc3RhdHVzX2NvZGU7XG4mIzQzO1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGVyciAhPSAtRUlOUFJPR1JFU1MpIHtcbiYjNDM7XHRcdFx0LyogaGFuZGxlX3Jlc3AoKSBkZWxpdmVyZWQgYSB2YWxpZCByZXNwb25zZSBqdXN0IGFmdGVyXG4mIzQzO1x0XHRcdCAqIHRoZSB0aW1lb3V0IGZpcmVkLiAgVGhlIGhhcmR3YXJlIGlzIGFsaXZlLCBzbyB1c2VcbiYjNDM7XHRcdFx0ICogdGhlIHJlc3BvbnNlIGFuZCBsZWF2ZSB0aGUgY2hhbm5lbCB1c2FibGU7IGRvIG5vdFxuJiM0MztcdFx0XHQgKiBsYXRjaCBod2NfdGltZWRfb3V0IG9yIGRlZ3JhZGUgaHdjX3RpbWVvdXQgZm9yIHdoYXRcbiYjNDM7XHRcdFx0ICogdHVybmVkIG91dCB0byBiZSBhIHRyYW5zaWVudCByYWNlLlxuJiM0MztcdFx0XHQgKi9cbiYjNDM7XHRcdFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuJiM0MztcdFx0XHRnb3RvIGNoZWNrX3N0YXR1cztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHQvKiBHZW51aW5lIHRpbWVvdXQ6IG5vIHJlc3BvbnNlIGFycml2ZWQuICBSZWR1Y2UgZnVydGhlclxuJiM0MztcdFx0ICogd2FpdGluZywgYW5kIG1hcmsgdGhlIGNoYW5uZWwgdGltZWQgb3V0IHVuZGVyIHRoZSBiaXRtYXBcbiYjNDM7XHRcdCAqIGxvY2sgc28gZ2V0X21zZ19pbmRleCgpIGNhbm5vdCBhY3F1aXJlIG5ldyBzbG90cyBhZnRlciB0aGlzLlxuJiM0MztcdFx0ICovXG4gXHRcdGlmIChod2MtXHUwMDNlaHdjX3RpbWVvdXQgXHUwMDNlIDEpXG4gXHRcdFx0aHdjLVx1MDAzZWh3Y190aW1lb3V0ID0gMTtcbiBcbiYjNDM7XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcbiYjNDM7XHRcdGh3Yy1cdTAwM2Vod2NfdGltZWRfb3V0ID0gdHJ1ZTtcbiYjNDM7XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubG9jaywgZmxhZ3MpO1xuJiM0MztcdFx0d2FrZV91cF9hbGwoXHUwMDI2aHdjLVx1MDAzZW1zZ193YWl0cSk7XG4mIzQzO1xuIFx0XHRlcnIgPSAtRVRJTUVET1VUO1xuLVx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdGh3Y19jdHhfcHV0KGh3YywgY3R4KTtcbiYjNDM7XHRcdGdvdG8gZG9uZTtcbiBcdH1cbiBcbi1cdGlmIChjdHgtXHUwMDNlZXJyb3IpIHtcbi1cdFx0ZXJyID0gY3R4LVx1MDAzZWVycm9yO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbiYjNDM7XHQvKiBOVUxMIG91dHB1dF9idWYgc28gYSBsYXRlIGhhbmRsZV9yZXNwKCkgd29uJiMzOTt0IG1lbWNweSBpbnRvXG4mIzQzO1x0ICogdGhlIGNhbGxlciYjMzk7cyBidWZmZXIgYWZ0ZXIgdGhlIHNlbmRlciBleGl0cy4gIFJlYWQgZXJyb3IgYW5kXG4mIzQzO1x0ICogc3RhdHVzX2NvZGUgdW5kZXIgdGhlIHNhbWUgbG9jayDigJQgYWZ0ZXIgaHdjX2N0eF9wdXQgdGhlIHNsb3RcbiYjNDM7XHQgKiBtYXkgYmUgcmV1c2VkIGFuZCB0aGVzZSBmaWVsZHMgb3ZlcndyaXR0ZW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Y3R4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbiYjNDM7XHRjdHgtXHUwMDNlb3V0cHV0X2J1ZiA9IE5VTEw7XG4mIzQzO1x0ZXJyID0gY3R4LVx1MDAzZWVycm9yO1xuJiM0MztcdHN0YXR1cyA9IGN0eC1cdTAwM2VzdGF0dXNfY29kZTtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuJiM0MztcbiYjNDM7Y2hlY2tfc3RhdHVzOlxuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGRvbmU7XG4gXG4tXHRpZiAoY3R4LVx1MDAzZXN0YXR1c19jb2RlIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlc3RhdHVzX2NvZGUgIT0gR0RNQV9TVEFUVVNfTU9SRV9FTlRSSUVTKSB7XG4tXHRcdGlmIChjdHgtXHUwMDNlc3RhdHVzX2NvZGUgPT0gR0RNQV9TVEFUVVNfQ01EX1VOU1VQUE9SVEVEKSB7XG4mIzQzO1x0aWYgKHN0YXR1cyBcdTAwMjZcdTAwMjYgc3RhdHVzICE9IEdETUFfU1RBVFVTX01PUkVfRU5UUklFUykge1xuJiM0MztcdFx0aWYgKHN0YXR1cyA9PSBHRE1BX1NUQVRVU19DTURfVU5TVVBQT1JURUQpIHtcbiBcdFx0XHRlcnIgPSAtRU9QTk9UU1VQUDtcbi1cdFx0XHRnb3RvIG91dDtcbiYjNDM7XHRcdFx0Z290byBkb25lO1xuIFx0XHR9XG4mIzQzO1xuIFx0XHRpZiAoY29tbWFuZCAhPSBNQU5BX1FVRVJZX1BIWV9TVEFUKVxuIFx0XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCYjMzQ7Q29tbWFuZCAweCV4IGZhaWxlZCB3aXRoIHN0YXR1czogMHgleFxcblwmIzM0Oyxcbi1cdFx0XHRcdGNvbW1hbmQsIGN0eC1cdTAwM2VzdGF0dXNfY29kZSk7XG4mIzQzO1x0XHRcdFx0Y29tbWFuZCwgc3RhdHVzKTtcbiBcdFx0ZXJyID0gLUVQUk9UTztcbi1cdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRnb3RvIGRvbmU7XG4gXHR9XG4mIzQzO1xuJiM0MztcdGVyciA9IDA7XG4mIzQzO1x0Z290byBkb25lO1xuIG91dDpcbi1cdG1hbmFfaHdjX3B1dF9tc2dfaW5kZXgoaHdjLCBtc2dfaWQpO1xuJiM0MztcdC8qIFByZS1wb3N0IGVycm9yIHBhdGhzOiBubyBXUUUgd2FzIHN1Ym1pdHRlZCBzbyBoYW5kbGVfcmVzcCgpXG4mIzQzO1x0ICogY2Fubm90IHJhY2UgaGVyZS4gIHJlZmNvdW50IGlzIDEgKG5vIHNlY29uZCByZWYgdGFrZW4pLlxuJiM0MztcdCAqL1xuJiM0MztcdGN0eCA9IGh3Yy1cdTAwM2VjYWxsZXJfY3R4ICYjNDM7IG1zZ19pZDtcbiYjNDM7XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuJiM0MztcdGN0eC1cdTAwM2VvdXRwdXRfYnVmID0gTlVMTDtcbiYjNDM7XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4mIzQzO1x0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuJiM0Mztkb25lOlxuIFx0cmV0dXJuIGVycjtcbiB9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXG5pbmRleCBhOGMzMjliZGJhY2Y4My4uNTUwODc0NjU5MGU3Y2QgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xuQEAgLTI2NDgsNiAmIzQzOzI2NDgsNyBAQCBzdGF0aWMgaW50IG1hbmFfY3JlYXRlX3R4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbiBcdHN0cnVjdCBtYW5hX29ial9zcGVjIGNxX3NwZWM7XG4gXHRzdHJ1Y3QgZ2RtYV9xdWV1ZV9zcGVjIHNwZWM7XG4gXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYztcbiYjNDM7XHRzdHJ1Y3QgZ2RtYV9xdWV1ZSBfX3JjdSAqKmNxX3RhYmxlO1xuIFx0c3RydWN0IG1hbmFfdHhxICp0eHE7XG4gXHRzdHJ1Y3QgbWFuYV9jcSAqY3E7XG4gXHR1MzIgdHhxX3NpemU7XG5AQCAtMjc1MywxMiAmIzQzOzI3NTQsMTggQEAgc3RhdGljIGludCBtYW5hX2NyZWF0ZV90eHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXG4gXG4gXHRcdGNxLVx1MDAzZWdkbWFfaWQgPSBjcS1cdTAwM2VnZG1hX2NxLVx1MDAzZWlkO1xuIFxuLVx0XHRpZiAoV0FSTl9PTihjcS1cdTAwM2VnZG1hX2lkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMpKSB7XG4mIzQzO1x0XHQvKiBObyByY3VfcmVhZF9sb2NrKCk6IG1hbmFfY3JlYXRlX3R4cSBydW5zIHVuZGVyIFJUTkwgZHVyaW5nXG4mIzQzO1x0XHQgKiBuZXRkZXYgYnJpbmctdXAsIGluc2lkZSB0aGUgbmV0ZGV2IGxpZmV0aW1lIHRoYXRcbiYjNDM7XHRcdCAqIG1hbmFfcmVtb3ZlKCkgZHJhaW5zIGJlZm9yZSB0aGUgYmFzZSBjcV90YWJsZSBjYW4gYmUgZnJlZWQuXG4mIzQzO1x0XHQgKiBTZWUgZ2RtYV9jb250ZXh0OjpjcV90YWJsZSBpbiBnZG1hLmggZm9yIHdoeSBcJiMzNDt0cnVlXCYjMzQ7IGlzIHNvdW5kLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRjcV90YWJsZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2MtXHUwMDNlY3FfdGFibGUsIHRydWUpO1xuJiM0MztcdFx0aWYgKFdBUk5fT04oIWNxX3RhYmxlIHx8IGNxLVx1MDAzZWdkbWFfaWQgXHUwMDNlPSBnYy1cdTAwM2VtYXhfbnVtX2NxcykpIHtcbiBcdFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXG4tXHRcdGdjLVx1MDAzZWNxX3RhYmxlW2NxLVx1MDAzZWdkbWFfaWRdID0gY3EtXHUwMDNlZ2RtYV9jcTtcbiYjNDM7XHRcdHJjdV9hc3NpZ25fcG9pbnRlcihjcV90YWJsZVtjcS1cdTAwM2VnZG1hX2lkXSwgY3EtXHUwMDNlZ2RtYV9jcSk7XG4gXG4gXHRcdG1hbmFfY3JlYXRlX3R4cV9kZWJ1Z2ZzKGFwYywgaSk7XG4gXG5AQCAtMjk4Niw2ICYjNDM7Mjk5Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWFuYV9yeHEgKm1hbmFfY3JlYXRlX3J4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlX3NwZWMgc3BlYztcbiBcdHN0cnVjdCBtYW5hX2NxICpjcSA9IE5VTEw7XG4gXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYztcbiYjNDM7XHRzdHJ1Y3QgZ2RtYV9xdWV1ZSBfX3JjdSAqKmNxX3RhYmxlO1xuIFx0dTMyIGNxX3NpemUsIHJxX3NpemU7XG4gXHRzdHJ1Y3QgbWFuYV9yeHEgKnJ4cTtcbiBcdGludCBlcnI7XG5AQCAtMzA3NSwxMiAmIzQzOzMwODMsMTggQEAgc3RhdGljIHN0cnVjdCBtYW5hX3J4cSAqbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoV0FSTl9PTihjcS1cdTAwM2VnZG1hX2lkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMpKSB7XG4mIzQzO1x0LyogTm8gcmN1X3JlYWRfbG9jaygpOiBtYW5hX2NyZWF0ZV9yeHEgcnVucyB1bmRlciBSVE5MIGR1cmluZyBuZXRkZXZcbiYjNDM7XHQgKiBicmluZy11cCwgaW5zaWRlIHRoZSBuZXRkZXYgbGlmZXRpbWUgdGhhdCBtYW5hX3JlbW92ZSgpIGRyYWluc1xuJiM0MztcdCAqIGJlZm9yZSB0aGUgYmFzZSBjcV90YWJsZSBjYW4gYmUgZnJlZWQuICBTZWUgZ2RtYV9jb250ZXh0OjpjcV90YWJsZVxuJiM0MztcdCAqIGluIGdkbWEuaCBmb3Igd2h5IFwmIzM0O3RydWVcJiMzNDsgaXMgc291bmQuXG4mIzQzO1x0ICovXG4mIzQzO1x0Y3FfdGFibGUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGdjLVx1MDAzZWNxX3RhYmxlLCB0cnVlKTtcbiYjNDM7XHRpZiAoV0FSTl9PTighY3FfdGFibGUgfHwgY3EtXHUwMDNlZ2RtYV9pZCBcdTAwM2U9IGdjLVx1MDAzZW1heF9udW1fY3FzKSkge1xuIFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGdjLVx1MDAzZWNxX3RhYmxlW2NxLVx1MDAzZWdkbWFfaWRdID0gY3EtXHUwMDNlZ2RtYV9jcTtcbiYjNDM7XHRyY3VfYXNzaWduX3BvaW50ZXIoY3FfdGFibGVbY3EtXHUwMDNlZ2RtYV9pZF0sIGNxLVx1MDAzZWdkbWFfY3EpO1xuIFxuIFx0bmV0aWZfbmFwaV9hZGRfd2VpZ2h0X2xvY2tlZChuZGV2LCBcdTAwMjZjcS1cdTAwM2VuYXBpLCBtYW5hX3BvbGwsIDEpO1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oIGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcbmluZGV4IDg1MjljZWYwZDdjNDUyLi5hNGVhYzZmN2MzNjYwOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuQEAgLTQyOCw5ICYjNDM7NDI4LDM0IEBAIHN0cnVjdCBnZG1hX2NvbnRleHQge1xuIFx0LyogTDIgTVRVICovXG4gXHR1MTYgYWRhcHRlcl9tdHU7XG4gXG4tXHQvKiBUaGlzIG1hcHMgYSBDUSBpbmRleCB0byB0aGUgcXVldWUgc3RydWN0dXJlLiAqL1xuJiM0MztcdC8qIFNpemUgb2YgY3FfdGFibGUsIGkuZS4gdGhlIGxhcmdlc3QgdmFsaWQgQ1EgaW5kZXggJiM0MzsgMS4gIFNldCBvbmNlXG4mIzQzO1x0ICogd2hlbiBjcV90YWJsZSBpcyBhbGxvY2F0ZWQgYW5kIHRyZWF0ZWQgYXMgaW1tdXRhYmxlIGZvciB0aGVcbiYjNDM7XHQgKiB0YWJsZSYjMzk7cyBsaWZldGltZSAoYSBib3VuZCBvbmx5KSAtLSBpdCBpcyBuZXZlciByZXNldCBvbiB0ZWFyZG93bi5cbiYjNDM7XHQgKiBjcV90YWJsZSA9PSBOVUxMIGlzIHRoZSBzb2xlIFwmIzM0O3RhYmxlIHRvcm4gZG93blwmIzM0OyBzaWduYWwsIHNvIGV2ZXJ5XG4mIzQzO1x0ICogY3FfdGFibGVbaWRdIGFjY2VzcyBtdXN0IGd1YXJkIHdpdGggYm90aCAhY3FfdGFibGUgKGdvbmUpIGFuZFxuJiM0MztcdCAqIGlkIFx1MDAzZT0gbWF4X251bV9jcXMgKG91dCBvZiBib3VuZHMpLlxuJiM0MztcdCAqL1xuIFx0dW5zaWduZWQgaW50XHRcdG1heF9udW1fY3FzO1xuLVx0c3RydWN0IGdkbWFfcXVldWVcdCoqY3FfdGFibGU7XG4mIzQzO1x0LyogQm90aCB0aGUgYmFzZSBwb2ludGVyIGFuZCBlYWNoIGVudHJ5IGFyZSBSQ1UtbWFuYWdlZC4gIFRoZSBmYXN0XG4mIzQzO1x0ICogcGF0aCAobWFuYV9nZF9wcm9jZXNzX2VxZSkgcmVhZHMgdGhlIGJhc2UgdmlhIHJjdV9kZXJlZmVyZW5jZSgpXG4mIzQzO1x0ICogdW5kZXIgcmN1X3JlYWRfbG9jaygpLCBzbyB0aGUgdGFibGUgaXMgZnJlZWQgd2l0aFxuJiM0MztcdCAqIHJjdV9hc3NpZ25fcG9pbnRlcihOVUxMKSAmIzQzOyBzeW5jaHJvbml6ZV9yY3UoKSBhbmQgYW4gaW4tZmxpZ2h0XG4mIzQzO1x0ICogcmVhZGVyIGNhbiBuZXZlciBvYnNlcnZlIGZyZWVkIG1lbW9yeS5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIFRoZSBzbG93IHBhdGhzIC0tIG1hbmFfZ2RfZGVzdHJveV9jcSgpIGFuZCB0aGUgQ1EgaW5zdGFsbC9yZW1vdmVcbiYjNDM7XHQgKiBjYWxsZXJzIChtYW5hX2NyZWF0ZV90eHEvX3J4cSwgbWFuYV9pYl9pbnN0YWxsL3JlbW92ZV9jcV9jYikgLS1cbiYjNDM7XHQgKiBpbnN0ZWFkIHJlYWQgdGhlIGJhc2Ugd2l0aCByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGNxX3RhYmxlLFxuJiM0MztcdCAqIHRydWUpLiAgVGhlIGJhcmUgXCYjMzQ7dHJ1ZVwmIzM0OyBpcyBqdXN0aWZpZWQgYnkgdGVhcmRvd24gb3JkZXJpbmcsIG5vdCBieVxuJiM0MztcdCAqIGEgbG9jazogdGhlIGJhc2UgdGFibGUgaXMgcmVwbGFjZWQmIzQzO2ZyZWVkIG9ubHkgYnlcbiYjNDM7XHQgKiBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoKSAoYW5kIHRoZSBjcmVhdGUtdGltZSByZWluaXQpLCBhbmQgZXZlcnlcbiYjNDM7XHQgKiB0ZWFyZG93biBwYXRoIGZpcnN0IHJ1bnMgbWFuYV9yZW1vdmUoKSAmIzQzOyBtYW5hX3JkbWFfcmVtb3ZlKCksIHdoaWNoXG4mIzQzO1x0ICogc3luY2hyb25vdXNseSBkcmFpbiB0aGUgbmV0ZGV2IGFuZCB0aGUgSUIgZGV2aWNlXG4mIzQzO1x0ICogKHVucmVnaXN0ZXJfbmV0ZGV2aWNlIC8gaWJfdW5yZWdpc3Rlcl9kZXZpY2UpIHRoYXQgYm91bmQgYWxsXG4mIzQzO1x0ICogaW5zdGFsbC9yZW1vdmUgY2FsbGVyczsgdGhlIHJlaW5pdCBjYXNlIHJ1bnMgYmVmb3JlIGVpdGhlclxuJiM0MztcdCAqIGNvbnN1bWVyIGlzIHByb2JlZC4gIFNvIG5vIHNsb3ctcGF0aCBjYWxsZXIgY2FuIHJ1biB3aGlsZSB0aGUgYmFzZVxuJiM0MztcdCAqIHRhYmxlIGlzIGJlaW5nIGZyZWVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHN0cnVjdCBnZG1hX3F1ZXVlXHRfX3JjdSAqIF9fcmN1ICpjcV90YWJsZTtcbiBcbiBcdC8qIFByb3RlY3QgZXFfdGVzdF9ldmVudCBhbmQgdGVzdF9ldmVudF9lcV9pZCAgKi9cbiBcdHN0cnVjdCBtdXRleFx0XHRlcV90ZXN0X2V2ZW50X211dGV4O1xuQEAgLTQ1Niw2ICYjNDM7NDgxLDIxIEBAIHN0cnVjdCBnZG1hX2NvbnRleHQge1xuIFx0LyogSGFyZHdhcmUgY29tbXVuaWNhdGlvbiBjaGFubmVsIChIV0MpICovXG4gXHRzdHJ1Y3QgZ2RtYV9kZXZcdFx0aHdjO1xuIFxuJiM0MztcdC8qIGRlc3Ryb3lfY2hhbm5lbCgpIHdhaXRzIGhlcmUgZm9yIGFsbCBIV0Mgc2VuZGVycyB0byBleGl0LlxuJiM0MztcdCAqIExpdmVzIG9uIGdjIChub3QgaHdjKSBzbyB3YWtlX3VwKCkgYWZ0ZXIgdGhlIGxhc3Qgc2VuZGVyJiMzOTtzXG4mIzQzO1x0ICogYXRvbWljX2RlYyBkb2VzbiYjMzk7dCBkZXJlZmVyZW5jZSBmcmVlZCBod2MgbWVtb3J5LlxuJiM0MztcdCAqL1xuJiM0MztcdHdhaXRfcXVldWVfaGVhZF90XHRod2NfZHJhaW5fd2FpdHE7XG4mIzQzO1xuJiM0MztcdC8qIFNlcmlhbGl6ZXMgaHdjLmRyaXZlcl9kYXRhICh0aGUgaHdfY2hhbm5lbF9jb250ZXh0IHBvaW50ZXIpXG4mIzQzO1x0ICogYmV0d2VlbiB0aGUgY29udHJvbC1wbGFuZSByZWFkZXJzIGluIG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCksXG4mIzQzO1x0ICogbWFuYV9uZWVkX2xvZygpIGFuZCBtYW5hX3NlcnZfcmVzZXQoKSBhbmQgdGhlIHB1Ymxpc2gvY2xlYXIgaW5cbiYjNDM7XHQgKiBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbCgpL21hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbCgpLiAgQWxsIHVzZXJzXG4mIzQzO1x0ICogYXJlIGNvbnRyb2wtcGxhbmUgKEhXQyBjb21tYW5kcyBzbGVlcDsgcmVzZXQgcnVucyBvbiBhIHdvcmtxdWV1ZSksXG4mIzQzO1x0ICogc28gYSBwbGFpbiBzcGlubG9jayAtLSBub3QgUkNVIC0tIGlzIHN1ZmZpY2llbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3BpbmxvY2tfdFx0XHRod2NfbG9jaztcbiYjNDM7XG4gXHQvKiBBenVyZSBuZXR3b3JrIGFkYXB0ZXIgKi9cbiBcdHN0cnVjdCBnZG1hX2Rldlx0XHRtYW5hO1xuIFxuQEAgLTY2OCw2ICYjNDM7NzA4LDkgQEAgZW51bSB7XG4gLyogRHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgaW50ZXJydXB0IG1vZGVyYXRpb24gLSBESU0gKi9cbiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0lOVEVSUlVQVF9NT0RFUkFUSU9OIEJJVCgyOClcbiBcbiYjNDM7LyogRHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgcXVldWUgZGVwdGggZm9yIEhXQyAqL1xuJiM0MzsjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0hXQ19RVUVVRV9ERVBUSCBCSVQoMjkpXG4mIzQzO1xuICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdTMSBcXFxuIFx0KEdETUFfRFJWX0NBUF9GTEFHXzFfRVFfU0hBUklOR19NVUxUSV9WUE9SVCB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9OQVBJX1dLRE9ORV9GSVggfCBcXFxuQEAgLTY4Myw2ICYjNDM7NzI2LDcgQEAgZW51bSB7XG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9QUk9CRV9SRUNPVkVSWSB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9IQU5ETEVfU1RBTExfU1FfUkVDT1ZFUlkgfCBcXFxuIFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfSFdDX1RJTUVPVVRfUkVDT1ZFUlkgfCBcXFxuJiM0MztcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0RZTl9IV0NfUVVFVUVfREVQVEggfCBcXFxuIFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfRVFfTVNJX1VOU0hBUkVfTVVMVElfVlBPUlQgfCBcXFxuIFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0lOVEVSUlVQVF9NT0RFUkFUSU9OKVxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvaHdfY2hhbm5lbC5oIGIvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmhcbmluZGV4IDE2ZmViMzk2MTZjMWJlLi5lZWM1ZDNhYTIzZTFkNSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L21hbmEvaHdfY2hhbm5lbC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYW5hL2h3X2NoYW5uZWwuaFxuQEAgLTE2NCw2ICYjNDM7MTY0LDkgQEAgc3RydWN0IGh3Y193cSB7XG4gXHR1MTYgcXVldWVfZGVwdGg7XG4gXG4gXHRzdHJ1Y3QgaHdjX2NxICpod2NfY3E7XG4mIzQzO1xuJiM0MztcdC8qIFNlcmlhbGl6ZXMgY29uY3VycmVudCBtYW5hX2dkX3Bvc3RfYW5kX3JpbmcoKSBjYWxscy4gKi9cbiYjNDM7XHRzcGlubG9ja190IGxvY2s7XG4gfTtcbiBcbiBzdHJ1Y3QgaHdjX2NhbGxlcl9jdHgge1xuQEAgLTE3Myw2ICYjNDM7MTc2LDE3IEBAIHN0cnVjdCBod2NfY2FsbGVyX2N0eCB7XG4gXG4gXHR1MzIgZXJyb3I7IC8qIExpbnV4IGVycm9yIGNvZGUgKi9cbiBcdHUzMiBzdGF0dXNfY29kZTtcbiYjNDM7XG4mIzQzO1x0LyogUHJvdGVjdHMgb3V0cHV0X2J1ZiBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzIGZyb21cbiYjNDM7XHQgKiBoYW5kbGVfcmVzcCgpIChDUSBpbnRlcnJ1cHQpIGFuZCB0aGUgc2VuZGVyIHRpbWVvdXQgcGF0aC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzcGlubG9ja190IGxvY2s7XG4mIzQzO1xuJiM0MztcdC8qIFRyYWNrcyBzZW5kZXIgJiM0MzsgaGFuZGxlX3Jlc3Agb3duZXJzaGlwLiAgVGhlIGxhc3QgcHV0XG4mIzQzO1x0ICogKHJlZmNvdW50IHJlYWNoZXMgMCkgcmVsZWFzZXMgdGhlIGJpdG1hcCBzbG90LlxuJiM0MztcdCAqL1xuJiM0MztcdHJlZmNvdW50X3QgcmVmY250O1xuJiM0MztcdHUxNiBtc2dfaWQ7XG4gfTtcbiBcbiBzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0IHtcbkBAIC0xODEsOCAmIzQzOzE5NSw5IEBAIHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQge1xuIFxuIFx0dTE2IG51bV9pbmZsaWdodF9tc2c7XG4gXHR1MzIgbWF4X3JlcV9tc2dfc2l6ZTtcbiYjNDM7XHR1MzIgbWF4X3Jlc3BfbXNnX3NpemU7XG4gXG4tXHR1MTYgaHdjX2luaXRfcV9kZXB0aF9tYXg7XG4mIzQzO1x0dTMyIGh3Y19pbml0X3FfZGVwdGhfbWF4O1xuIFx0dTMyIGh3Y19pbml0X21heF9yZXFfbXNnX3NpemU7XG4gXHR1MzIgaHdjX2luaXRfbWF4X3Jlc3BfbXNnX3NpemU7XG4gXG5AQCAtMTkyLDEzICYjNDM7MjA3LDM4IEBAIHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQge1xuIFx0c3RydWN0IGh3Y193cSAqdHhxO1xuIFx0c3RydWN0IGh3Y19jcSAqY3E7XG4gXG4tXHRzdHJ1Y3Qgc2VtYXBob3JlIHNlbWE7XG4gXHRzdHJ1Y3QgZ2RtYV9yZXNvdXJjZSBpbmZsaWdodF9tc2dfcmVzO1xuJiM0MztcdC8qIFdhaXRxdWV1ZSBmb3Igc2VuZGVycyBibG9ja2VkIG9uIGEgZnVsbCBpbmZsaWdodCBiaXRtYXAuICovXG4mIzQzO1x0d2FpdF9xdWV1ZV9oZWFkX3QgbXNnX3dhaXRxO1xuIFxuIFx0dTMyIHBmX2Rlc3RfdnJxX2lkO1xuIFx0dTMyIHBmX2Rlc3RfdnJjcV9pZDtcbiBcdHUzMiBod2NfdGltZW91dDtcbiBcbiYjNDM7XHQvKiBTZXQgYWZ0ZXIgY2hhbm5lbCBpcyBmdWxseSBlc3RhYmxpc2hlZDsgY2xlYXJlZCBvbiB0ZWFyZG93biB0b1xuJiM0MztcdCAqIGFib3J0IHdhaXRlcnMgaW4gbWFuYV9od2NfZ2V0X21zZ19pbmRleCgpIGFuZCByZWplY3QgbmV3IHNlbmRzLlxuJiM0MztcdCAqL1xuJiM0MztcdGJvb2wgY2hhbm5lbF91cDtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IG9uIGZpcnN0IEhXQyB0aW1lb3V0LiAgQ2F1c2VzIGdldF9tc2dfaW5kZXgoKSB0byByZXR1cm5cbiYjNDM7XHQgKiAtRVRJTUVET1VUIGluc3RlYWQgb2Ygd2FpdGluZywgZHJhaW5pbmcgYWxsIHF1ZXVlZCBzZW5kZXJzLlxuJiM0MztcdCAqL1xuJiM0MztcdGJvb2wgaHdjX3RpbWVkX291dDtcbiYjNDM7XG4mIzQzO1x0LyogU2V0IGFmdGVyIG1hbmFfc21jX3NldHVwX2h3YygpIHN1Y2NlZWRzIChoYXJkd2FyZSBoYXMgYWN0aXZlXG4mIzQzO1x0ICogTVNUIGVudHJpZXMpLiAgT24gcmVjb3ZlcmFibGUgcGF0aHMgKGVzdGFibGlzaF9jaGFubmVsKVxuJiM0MztcdCAqIGNsZWFyZWQgb25seSBhZnRlciBzdWNjZXNzZnVsIHRlYXJkb3duIHNvIGEgcmV0cnkgcmVtYWluc1xuJiM0MztcdCAqIHBvc3NpYmxlLiAgT24gdGhlIHRlcm1pbmFsIGRlc3Ryb3lfY2hhbm5lbCBwYXRoLCBjbGVhcmVkXG4mIzQzO1x0ICogdW5jb25kaXRpb25hbGx5IHNpbmNlIGh3YyBpcyBhYm91dCB0byBiZSBmcmVlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRib29sIHNldHVwX2FjdGl2ZTtcbiYjNDM7XG4mIzQzO1x0LyogQ291bnQgb2YgaW4tZmxpZ2h0IG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCkgY2FsbGVycy4gIFByb3RlY3RlZFxuJiM0MztcdCAqIGJ5IGdjLVx1MDAzZWh3Y19sb2NrOyB0aGUgbGFzdCBzZW5kZXIgdG8gZHJvcCBpdCB0byB6ZXJvIHdha2VzXG4mIzQzO1x0ICogZ2MtXHUwMDNlaHdjX2RyYWluX3dhaXRxIGZvciB0aGUgbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKCkgZHJhaW4uXG4mIzQzO1x0ICovXG4mIzQzO1x0dW5zaWduZWQgaW50IGFjdGl2ZV9zZW5kZXJzO1xuJiM0MztcbiBcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY2FsbGVyX2N0eDtcbiB9O1xuIFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE3OjUyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNSUNST1NPRlRfTUFOQSYjMzQ7LAogICAgJiMzNDtNQU5BX0lORklOSUJBTkQmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYW5hX2liX2luc3RhbGxfY3FfY2ImIzM0OywKICAgICYjMzQ7bWFuYV9pYl9yZW1vdmVfY3FfY2ImIzM0OywKICAgICYjMzQ7bWFuYV9od2NfZ2V0X21zZ19pbmRleCYjMzQ7LAogICAgJiMzNDttYW5hX2h3Y19oYW5kbGVfcmVzcCYjMzQ7LAogICAgJiMzNDttYW5hX2h3Y19yeF9ldmVudF9oYW5kbGVyJiMzNDssCiAgICAmIzM0O21hbmFfaHdjX2NyZWF0ZV9jaGFubmVsJiMzNDssCiAgICAmIzM0O21hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbCYjMzQ7LAogICAgJiMzNDttYW5hX2h3Y19zZW5kX3JlcXVlc3QmIzM0OywKICAgICYjMzQ7bWFuYV9nZF9wcm9jZXNzX2VxZSYjMzQ7LAogICAgJiMzNDttYW5hX2dkX2Rlc3Ryb3lfY3EmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIsIGluY2x1ZGluZyBhZGRpbmcgUkNVIHByb3RlY3Rpb24gZm9yIHRoZSBDUSB0YWJsZSwgaGFuZGxpbmcgSFdDIHRpbWVvdXRzLCBhbmQgYWRkaW5nIHJlZmNvdW50cyBmb3IgY2FsbGVyIGNvbnRleHRzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBsb2dpYyBvZiB0aGUgZHJpdmVyIGFuZCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCA3YTdmNjczYzVhNDkwMDU0MDVkNTVmYzI1NDBmMjQyZDNiODljZDk2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMjIgMTc6NTI6MTkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9jcS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvY3EuYwppbmRleCBmMjU0Nzk4OWY0MjI5MC4uMmJmNGJlMjFjZWRlNzkgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL2NxLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvY3EuYwpAQCAtMTMxLDEyICYjNDM7MTMxLDIwIEBAIHN0YXRpYyB2b2lkIG1hbmFfaWJfY3FfaGFuZGxlcih2b2lkICpjdHgsIHN0cnVjdCBnZG1hX3F1ZXVlICpnZG1hX2NxKQogaW50IG1hbmFfaWJfaW5zdGFsbF9jcV9jYihzdHJ1Y3QgbWFuYV9pYl9kZXYgKm1kZXYsIHN0cnVjdCBtYW5hX2liX2NxICpjcSkKIHsKIAlzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IG1kZXZfdG9fZ2MobWRldik7CiYjNDM7CXN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqY3FfdGFibGU7CiAJc3RydWN0IGdkbWFfcXVldWUgKmdkbWFfY3E7CiAKLQlpZiAoY3EtJmd0O3F1ZXVlLmlkICZndDs9IGdjLSZndDttYXhfbnVtX2NxcykKJiM0MzsJLyogTm8gcmN1X3JlYWRfbG9jaygpOiBpbnN0YWxsL3JlbW92ZSBydW4gd2l0aGluIHRoZSBJQiBkZXZpY2UKJiM0MzsJICogbGlmZXRpbWUsIHdoaWNoIG1hbmFfcmRtYV9yZW1vdmUoKSAoaWJfdW5yZWdpc3Rlcl9kZXZpY2UpIGRyYWlucwomIzQzOwkgKiBiZWZvcmUgdGhlIGJhc2UgY3FfdGFibGUgY2FuIGJlIGZyZWVkLiAgU2VlIGdkbWFfY29udGV4dDo6Y3FfdGFibGUKJiM0MzsJICogaW4gZ2RtYS5oIGZvciB3aHkgJiMzNDt0cnVlJiMzNDsgaXMgc291bmQuCiYjNDM7CSAqLwomIzQzOwljcV90YWJsZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2MtJmd0O2NxX3RhYmxlLCB0cnVlKTsKJiM0MzsJaWYgKCFjcV90YWJsZSB8fCBjcS0mZ3Q7cXVldWUuaWQgJmd0Oz0gZ2MtJmd0O21heF9udW1fY3FzKQogCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKIAkvKiBDcmVhdGUgQ1EgdGFibGUgZW50cnksIHNoYXJpbmcgYSBDUSBiZXR3ZWVuIFdRcyBpcyBub3Qgc3VwcG9ydGVkICovCi0JaWYgKGdjLSZndDtjcV90YWJsZVtjcS0mZ3Q7cXVldWUuaWRdKQomIzQzOwlpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNxX3RhYmxlW2NxLSZndDtxdWV1ZS5pZF0pKQogCQlyZXR1cm4gLUVJTlZBTDsKIAlpZiAoY3EtJmd0O3F1ZXVlLmttZW0pCiAJCWdkbWFfY3EgPSBjcS0mZ3Q7cXVldWUua21lbTsKQEAgLTE0OSwyMyAmIzQzOzE1Nyw0OSBAQCBpbnQgbWFuYV9pYl9pbnN0YWxsX2NxX2NiKHN0cnVjdCBtYW5hX2liX2RldiAqbWRldiwgc3RydWN0IG1hbmFfaWJfY3EgKmNxKQogCWdkbWFfY3EtJmd0O3R5cGUgPSBHRE1BX0NROwogCWdkbWFfY3EtJmd0O2NxLmNhbGxiYWNrID0gbWFuYV9pYl9jcV9oYW5kbGVyOwogCWdkbWFfY3EtJmd0O2lkID0gY3EtJmd0O3F1ZXVlLmlkOwotCWdjLSZndDtjcV90YWJsZVtjcS0mZ3Q7cXVldWUuaWRdID0gZ2RtYV9jcTsKJiM0MzsJcmN1X2Fzc2lnbl9wb2ludGVyKGNxX3RhYmxlW2NxLSZndDtxdWV1ZS5pZF0sIGdkbWFfY3EpOwogCXJldHVybiAwOwogfQogCiB2b2lkIG1hbmFfaWJfcmVtb3ZlX2NxX2NiKHN0cnVjdCBtYW5hX2liX2RldiAqbWRldiwgc3RydWN0IG1hbmFfaWJfY3EgKmNxKQogewogCXN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gbWRldl90b19nYyhtZGV2KTsKJiM0MzsJc3RydWN0IGdkbWFfcXVldWUgX19yY3UgKipjcV90YWJsZTsKJiM0MzsJc3RydWN0IGdkbWFfcXVldWUgKmdkbWFfY3E7CiAKLQlpZiAoY3EtJmd0O3F1ZXVlLmlkICZndDs9IGdjLSZndDttYXhfbnVtX2NxcyB8fCBjcS0mZ3Q7cXVldWUuaWQgPT0gSU5WQUxJRF9RVUVVRV9JRCkKJiM0MzsJaWYgKGNxLSZndDtxdWV1ZS5pZCA9PSBJTlZBTElEX1FVRVVFX0lEKQogCQlyZXR1cm47CiAKIAlpZiAoY3EtJmd0O3F1ZXVlLmttZW0pCiAJLyogVGhlbiBpdCB3aWxsIGJlIGNsZWFuZWQgYW5kIHJlbW92ZWQgYnkgdGhlIG1hbmEgKi8KIAkJcmV0dXJuOwogCi0Ja2ZyZWUoZ2MtJmd0O2NxX3RhYmxlW2NxLSZndDtxdWV1ZS5pZF0pOwotCWdjLSZndDtjcV90YWJsZVtjcS0mZ3Q7cXVldWUuaWRdID0gTlVMTDsKJiM0MzsJLyogTm8gcmN1X3JlYWRfbG9jaygpOiBsaWtlIG1hbmFfaWJfaW5zdGFsbF9jcV9jYigpLCB0aGlzIHJ1bnMgd2l0aGluCiYjNDM7CSAqIHRoZSBJQiBkZXZpY2UgbGlmZXRpbWUgdGhhdCBtYW5hX3JkbWFfcmVtb3ZlKCkgZHJhaW5zIGJlZm9yZSB0aGUKJiM0MzsJICogYmFzZSBjcV90YWJsZSBjYW4gYmUgZnJlZWQuICBTZWUgZ2RtYV9jb250ZXh0OjpjcV90YWJsZSBpbiBnZG1hLmguCiYjNDM7CSAqLwomIzQzOwljcV90YWJsZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2MtJmd0O2NxX3RhYmxlLCB0cnVlKTsKJiM0MzsJaWYgKCFjcV90YWJsZSB8fCBjcS0mZ3Q7cXVldWUuaWQgJmd0Oz0gZ2MtJmd0O21heF9udW1fY3FzKQomIzQzOwkJcmV0dXJuOwomIzQzOwkvKiBSZW1vdmVycyBmb3IgYSBnaXZlbiBDUSBhcmUgc2VyaWFsaXplZCBieSB0aGUgSUIgY29yZSwgc28gdGhlIHNsb3QKJiM0MzsJICogaXMgcmVhZCBhbmQgY2xlYXJlZCB3aXRob3V0IHJjdV9yZWFkX2xvY2soKSBvciBhdG9taWNpdHk6IGEgQ1EgaXMKJiM0MzsJICogbmV2ZXIgdG9ybiBkb3duIHdoaWxlIGEgbGl2ZSBRUCByZWZlcmVuY2VzIGl0IChjcS0mZ3Q7dXNlY250KSwgbm9yCiYjNDM7CSAqIHdoaWxlIHRoZSBRUC1jcmVhdGUgdGhhdCBpbnN0YWxsZWQgdGhlIGVudHJ5IGlzIHN0aWxsIHJ1bm5pbmcgKHRoYXQKJiM0MzsJICogY3JlYXRlIGhvbGRzIGEgcmVmZXJlbmNlIG9uIHRoZSBDUSB1b2JqZWN0IGFjcm9zcyBpdHMgZXJyb3IgcGF0aCwKJiM0MzsJICogYmVmb3JlIHVzZWNudCBpcyB0YWtlbikuICBBbnkgZG91YmxlLXJlbW92ZSBpcyB0aGVyZWZvcmUgc2VxdWVudGlhbAomIzQzOwkgKiAtLSB0aGUgbGF0ZXIgY2FsbGVyIHNlZXMgdGhlIE5VTEwgc3RvcmVkIGJlbG93IGFuZCByZXR1cm5zLgomIzQzOwkgKi8KJiM0MzsJZ2RtYV9jcSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3FfdGFibGVbY3EtJmd0O3F1ZXVlLmlkXSwgdHJ1ZSk7CiYjNDM7CWlmICghZ2RtYV9jcSkKJiM0MzsJCXJldHVybjsgIC8qIGFscmVhZHkgcmVtb3ZlZCBieSBhIHByaW9yIHRlYXJkb3duIHBhdGggKi8KJiM0MzsKJiM0MzsJcmN1X2Fzc2lnbl9wb2ludGVyKGNxX3RhYmxlW2NxLSZndDtxdWV1ZS5pZF0sIE5VTEwpOwomIzQzOwomIzQzOwkvKiBXYWl0IGZvciBpbi1mbGlnaHQgRVEgaGFuZGxlcnMgdGhhdCBtYXkgaGF2ZSBsb2FkZWQgdGhlIG9sZAomIzQzOwkgKiBwb2ludGVyIHZpYSByY3VfZGVyZWZlcmVuY2UoKSB0byBmaW5pc2ggYmVmb3JlIGZyZWVpbmcuCiYjNDM7CSAqLwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0MzsJa2ZyZWUoZ2RtYV9jcSk7CiB9CiAKIGludCBtYW5hX2liX2FybV9jcShzdHJ1Y3QgaWJfY3EgKmliY3EsIGVudW0gaWJfY3Ffbm90aWZ5X2ZsYWdzIGZsYWdzKQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYwppbmRleCBhMzhkNGJiNzQ2MjFmOS4uMTc3MTFlZTM3YzhiZTMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jCkBAIC0xNjEsNiAmIzQzOzE2MSw4IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9pbml0X3JlZ2lzdGVycyhzdHJ1Y3QgcGNpX2RldiAqcGRldikKIGJvb2wgbWFuYV9uZWVkX2xvZyhzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgaW50IGVycikKIHsKIAlzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7CiYjNDM7CWJvb2wgbmVlZF9sb2cgPSB0cnVlOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKGVyciAhPSAtRVRJTUVET1VUKQogCQlyZXR1cm4gdHJ1ZTsKQEAgLTE2OCwxMSAmIzQzOzE3MCwxMyBAQCBib29sIG1hbmFfbmVlZF9sb2coc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIGludCBlcnIpCiAJaWYgKCFnYykKIAkJcmV0dXJuIHRydWU7CiAKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtnYy0mZ3Q7aHdjX2xvY2ssIGZsYWdzKTsKIAlod2MgPSBnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhOwogCWlmIChod2MgJmFtcDsmYW1wOyBod2MtJmd0O2h3Y190aW1lb3V0ID09IDApCi0JCXJldHVybiBmYWxzZTsKJiM0MzsJCW5lZWRfbG9nID0gZmFsc2U7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtnYy0mZ3Q7aHdjX2xvY2ssIGZsYWdzKTsKIAotCXJldHVybiB0cnVlOwomIzQzOwlyZXR1cm4gbmVlZF9sb2c7CiB9CiAKIHN0YXRpYyBpbnQgbWFuYV9nZF9xdWVyeV9tYXhfcmVzb3VyY2VzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQpAQCAtMzY3LDkgJiM0MzszNzEsMjcgQEAgc3RhdGljIGludCBtYW5hX2dkX2RldGVjdF9kZXZpY2VzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQogaW50IG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MzIgcmVxX2xlbiwgY29uc3Qgdm9pZCAqcmVxLAogCQkJIHUzMiByZXNwX2xlbiwgdm9pZCAqcmVzcCkKIHsKLQlzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MgPSBnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhOwomIzQzOwlzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Z2MtJmd0O2h3Y19sb2NrLCBmbGFncyk7CiYjNDM7CWh3YyA9IGdjLSZndDtod2MuZHJpdmVyX2RhdGE7CiYjNDM7CWlmICghaHdjKSB7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z2MtJmd0O2h3Y19sb2NrLCBmbGFncyk7CiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsJfQomIzQzOwlod2MtJmd0O2FjdGl2ZV9zZW5kZXJzJiM0MzsmIzQzOzsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2djLSZndDtod2NfbG9jaywgZmxhZ3MpOwomIzQzOwomIzQzOwllcnIgPSBtYW5hX2h3Y19zZW5kX3JlcXVlc3QoaHdjLCByZXFfbGVuLCByZXEsIHJlc3BfbGVuLCByZXNwKTsKIAotCXJldHVybiBtYW5hX2h3Y19zZW5kX3JlcXVlc3QoaHdjLCByZXFfbGVuLCByZXEsIHJlc3BfbGVuLCByZXNwKTsKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtnYy0mZ3Q7aHdjX2xvY2ssIGZsYWdzKTsKJiM0MzsJaWYgKC0taHdjLSZndDthY3RpdmVfc2VuZGVycyA9PSAwKQomIzQzOwkJd2FrZV91cCgmYW1wO2djLSZndDtod2NfZHJhaW5fd2FpdHEpOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z2MtJmd0O2h3Y19sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiB9CiBFWFBPUlRfU1lNQk9MX05TKG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0LCAmIzM0O05FVF9NQU5BJiMzNDspOwogCkBAIC02MjIsNiAmIzQzOzY0NCw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldikKIHsKIAlzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTsKIAlzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7CiYjNDM7CXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJaW50IHJldDsKIAogCWlmICghZ2MpIHsKQEAgLTYzMSwxNCAmIzQzOzY1NCwxNyBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpCiAJCXJldHVybjsKIAl9CiAKJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtnYy0mZ3Q7aHdjX2xvY2ssIGZsYWdzKTsKIAlod2MgPSBnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhOwogCWlmICghaHdjKSB7CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z2MtJmd0O2h3Y19sb2NrLCBmbGFncyk7CiAJCWRldl9lcnIoJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7TUFOQSBzZXJ2aWNlOiBubyBIV0NcbiYjMzQ7KTsKIAkJZ290byBvdXQ7CiAJfQogCiAJLyogSFdDIGlzIG5vdCByZXNwb25kaW5nIGluIHRoaXMgY2FzZSwgc28gZG9uJiMzOTt0IHdhaXQgKi8KIAlod2MtJmd0O2h3Y190aW1lb3V0ID0gMDsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2djLSZndDtod2NfbG9jaywgZmxhZ3MpOwogCiAJZGV2X2luZm8oJmFtcDtwZGV2LSZndDtkZXYsICYjMzQ7TUFOQSByZXNldCBjeWNsZSBzdGFydFxuJiMzNDspOwogCkBAIC03NjEsNiAmIzQzOzc4Nyw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2RfcHJvY2Vzc19lcWUoc3RydWN0IGdkbWFfcXVldWUgKmVxKQogCXVuaW9uIGdkbWFfZXFlX2luZm8gZXFlX2luZm87CiAJZW51bSBnZG1hX2VxZV90eXBlIHR5cGU7CiAJc3RydWN0IGdkbWFfZXZlbnQgZXZlbnQ7CiYjNDM7CXN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqY3FfdGFibGU7CiAJc3RydWN0IGdkbWFfcXVldWUgKmNxOwogCXN0cnVjdCBnZG1hX2VxZSAqZXFlOwogCXUzMiBjcV9pZDsKQEAgLTc3MiwxMCAmIzQzOzc5OSwxMSBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3Byb2Nlc3NfZXFlKHN0cnVjdCBnZG1hX3F1ZXVlICplcSkKIAlzd2l0Y2ggKHR5cGUpIHsKIAljYXNlIEdETUFfRVFFX0NPTVBMRVRJT046CiAJCWNxX2lkID0gZXFlLSZndDtkZXRhaWxzWzBdICZhbXA7IDB4RkZGRkZGOwotCQlpZiAoV0FSTl9PTl9PTkNFKGNxX2lkICZndDs9IGdjLSZndDttYXhfbnVtX2NxcykpCiYjNDM7CQljcV90YWJsZSA9IHJjdV9kZXJlZmVyZW5jZShnYy0mZ3Q7Y3FfdGFibGUpOwomIzQzOwkJaWYgKFdBUk5fT05fT05DRShjcV9pZCAmZ3Q7PSBnYy0mZ3Q7bWF4X251bV9jcXMgfHwgIWNxX3RhYmxlKSkKIAkJCWJyZWFrOwogCi0JCWNxID0gZ2MtJmd0O2NxX3RhYmxlW2NxX2lkXTsKJiM0MzsJCWNxID0gcmN1X2RlcmVmZXJlbmNlKGNxX3RhYmxlW2NxX2lkXSk7CiAJCWlmIChXQVJOX09OX09OQ0UoIWNxIHx8IGNxLSZndDt0eXBlICE9IEdETUFfQ1EgfHwgY3EtJmd0O2lkICE9IGNxX2lkKSkKIAkJCWJyZWFrOwogCkBAIC0xMDgyLDE1ICYjNDM7MTExMCwyOCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX2NyZWF0ZV9jcShjb25zdCBzdHJ1Y3QgZ2RtYV9xdWV1ZV9zcGVjICpzcGVjLAogc3RhdGljIHZvaWQgbWFuYV9nZF9kZXN0cm95X2NxKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLAogCQkJICAgICAgIHN0cnVjdCBnZG1hX3F1ZXVlICpxdWV1ZSkKIHsKJiM0MzsJc3RydWN0IGdkbWFfcXVldWUgX19yY3UgKipjcV90YWJsZTsKIAl1MzIgaWQgPSBxdWV1ZS0mZ3Q7aWQ7CiAKLQlpZiAoaWQgJmd0Oz0gZ2MtJmd0O21heF9udW1fY3FzKQomIzQzOwkvKiBObyByY3VfcmVhZF9sb2NrKCkgaGVyZTogbWFuYV9nZF9kZXN0cm95X2NxKCkgcnVucyBvbmx5IG9uIHRoZQomIzQzOwkgKiBDUS1kZXN0cm95L3RlYXJkb3duIHBhdGgsIHdoZXJlIHRoZSBiYXNlIGNxX3RhYmxlIGlzIHN0YWJsZS4gIFNlZQomIzQzOwkgKiB0aGUgbGlmZWN5Y2xlIG5vdGUgb24gZ2RtYV9jb250ZXh0OjpjcV90YWJsZSBpbiBnZG1hLmggZm9yIHdoeSB0aGUKJiM0MzsJICogJiMzNDt0cnVlJiMzNDsgcHJlZGljYXRlIGlzIHNvdW5kLgomIzQzOwkgKi8KJiM0MzsJY3FfdGFibGUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGdjLSZndDtjcV90YWJsZSwgdHJ1ZSk7CiYjNDM7CWlmICghY3FfdGFibGUgfHwgaWQgJmd0Oz0gZ2MtJmd0O21heF9udW1fY3FzKQogCQlyZXR1cm47CiAKLQlpZiAoIWdjLSZndDtjcV90YWJsZVtpZF0pCiYjNDM7CWlmICghcmN1X2FjY2Vzc19wb2ludGVyKGNxX3RhYmxlW2lkXSkpCiAJCXJldHVybjsKIAotCWdjLSZndDtjcV90YWJsZVtpZF0gPSBOVUxMOwomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIoY3FfdGFibGVbaWRdLCBOVUxMKTsKJiM0MzsKJiM0MzsJLyogV2FpdCBmb3IgaW4tZmxpZ2h0IEVRIGhhbmRsZXJzIHRoYXQgbWF5IGhhdmUgbG9hZGVkIHRoZSBvbGQKJiM0MzsJICogcG9pbnRlciB2aWEgcmN1X2RlcmVmZXJlbmNlKCkgdG8gZmluaXNoIGJlZm9yZSB0aGUgY2FsbGVyCiYjNDM7CSAqIGZyZWVzIHRoZSBDUSBtZW1vcnkuCiYjNDM7CSAqLwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKIH0KIAogaW50IG1hbmFfZ2RfY3JlYXRlX2h3Y19xdWV1ZShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLApAQCAtMTE4NSw2ICYjNDM7MTIyNiwxNiBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfY3JlYXRlX2RtYV9yZWdpb24oc3RydWN0IGdkbWFfZGV2ICpnZCwKIAlpZiAoIU1BTkFfUEFHRV9BTElHTkVEKGdtaS0mZ3Q7dmlydF9hZGRyKSkKIAkJcmV0dXJuIC1FSU5WQUw7CiAKJiM0MzsJLyogTm8gUkNVIG5lZWRlZDogdGhpcyBydW5zIG9ubHkgb24gdGhlIGRhdGEtcGF0aCBxdWV1ZS1jcmVhdGlvbgomIzQzOwkgKiBwYXRoIChtYW5hX2dkX2NyZWF0ZV9tYW5hX2VxL21hbmFfZ2RfY3JlYXRlX21hbmFfd3FfY3EsIGNhbGxlZAomIzQzOwkgKiBieSBtYW5hX2VuIHVuZGVyIFJUTkwgYW5kIGJ5IG1hbmFfaWIgUkRNQSB2ZXJicywgb3IgZHVyaW5nCiYjNDM7CSAqIGluaXQpLiAgRXZlcnkgdGVhcmRvd24gcGF0aCDigJQgbWFuYV9nZF9yZW1vdmUsIG1hbmFfZ2Rfc3VzcGVuZCwKJiM0MzsJICogYW5kIHRoZSBIV0MgcmVzZXQvc2VydmljZSBwYXRoICh3aGljaCBnb2VzIHRocm91Z2gKJiM0MzsJICogbWFuYV9nZF9zdXNwZW5kKSDigJQgZHJhaW5zIHRob3NlIGNvbnN1bWVycyB2aWEgbWFuYV9yZG1hX3JlbW92ZSgpCiYjNDM7CSAqICYjNDM7IG1hbmFfcmVtb3ZlKCkgYmVmb3JlIG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbCgpIGNsZWFycwomIzQzOwkgKiBnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhLCBzbyBubyBjb25jdXJyZW50IGRlc3Ryb3kgY2FuIHJhY2Ugd2l0aAomIzQzOwkgKiB0aGlzIGRlcmVmZXJlbmNlLgomIzQzOwkgKi8KIAlod2MgPSBnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhOwogCXJlcV9tc2dfc2l6ZSA9IHN0cnVjdF9zaXplKHJlcSwgcGFnZV9hZGRyX2xpc3QsIG51bV9wYWdlKTsKIAlpZiAocmVxX21zZ19zaXplICZndDsgaHdjLSZndDttYXhfcmVxX21zZ19zaXplKQpAQCAtMTM3NCw3ICYjNDM7MTQyNSwxNyBAQCBpbnQgbWFuYV9nZF92ZXJpZnlfdmZfdmVyc2lvbihzdHJ1Y3QgcGNpX2RldiAqcGRldikKIAlzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7CiAJaW50IGVycjsKIAomIzQzOwkvKiBObyBSQ1UgbmVlZGVkOiB0aGlzIHJ1bnMgb25seSBpbnNpZGUgbWFuYV9nZF9zZXR1cCwgb24gdGhlCiYjNDM7CSAqIHByb2JlIGFuZCByZXN1bWUgcGF0aHMuICBUaGUgUENJL1BNIGNvcmUgaG9sZHMgZGV2aWNlX2xvY2sKJiM0MzsJICogYWNyb3NzIC5wcm9iZS8ucmVzdW1lIGFuZCAucmVtb3ZlLy5zdXNwZW5kLCBzbyBzZXR1cCBjYW5ub3QKJiM0MzsJICogb3ZlcmxhcCB0ZWFyZG93biBvZiB0aGUgc2FtZSBkZXZpY2UuICBUaGUgSFdDIHJlc2V0L3NlcnZpY2UKJiM0MzsJICogcGF0aCBpcyBhZGRpdGlvbmFsbHkgc2VyaWFsaXplZCBieSBHQ19JTl9TRVJWSUNFIGFuZCBydW5zCiYjNDM7CSAqIHN1c3BlbmQgKGRlc3Ryb3kpIHRoZW4gcmVzdW1lICh0aGlzKSBzZXF1ZW50aWFsbHkgaW4gb25lIHdvcmsKJiM0MzsJICogaXRlbS4gIGRyaXZlcl9kYXRhIHdhcyBqdXN0IHNldCBieSBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbAomIzQzOwkgKiBlYXJsaWVyIGluIHRoaXMgc2FtZSBzZXR1cCBjYWxsLCBzbyBpdCBpcyBsaXZlIGhlcmUuCiYjNDM7CSAqLwogCWh3YyA9IGdjLSZndDtod2MuZHJpdmVyX2RhdGE7CiYjNDM7CiAJbWFuYV9nZF9pbml0X3JlcV9oZHIoJmFtcDtyZXEuaGRyLCBHRE1BX1ZFUklGWV9WRl9EUklWRVJfVkVSU0lPTiwKIAkJCSAgICAgc2l6ZW9mKHJlcSksIHNpemVvZihyZXNwKSk7CiAKQEAgLTIzNjQsNiAmIzQzOzI0MjUsNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpCiAKIAltdXRleF9pbml0KCZhbXA7Z2MtJmd0O2VxX3Rlc3RfZXZlbnRfbXV0ZXgpOwogCW11dGV4X2luaXQoJmFtcDtnYy0mZ3Q7Z2ljX211dGV4KTsKJiM0MzsJc3Bpbl9sb2NrX2luaXQoJmFtcDtnYy0mZ3Q7aHdjX2xvY2spOwogCXBjaV9zZXRfZHJ2ZGF0YShwZGV2LCBnYyk7CiAJZ2MtJmd0O2JhcjBfcGEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7CiAJZ2MtJmd0O2JhcjBfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmMgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmMKaW5kZXggZTNjMjRkNTBkYWQwN2MuLjA0ODFkNDA0NDM0MjRmIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jCkBAIC00LDI3ICYjNDM7NCw1NSBAQAogI2luY2x1ZGUgJmx0O25ldC9tYW5hL2dkbWEuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvbWFuYS9tYW5hLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bmV0L21hbmEvaHdfY2hhbm5lbC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9wY2kuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC92bWFsbG9jLmgmZ3Q7CiAKJiM0MzsvKiBBY3F1aXJlIGEgZnJlZSBtZXNzYWdlIHNsb3QgZnJvbSB0aGUgaW5mbGlnaHQgYml0bWFwLiAgUmV0dXJucwomIzQzOyAqIC1FTk9ERVYgaWYgdGhlIGNoYW5uZWwgaXMgdG9ybiBkb3duLCBvciAtRVRJTUVET1VUIGlmIGEgcHJpb3IgSFdDCiYjNDM7ICogY29tbWFuZCBoYXMgdGltZWQgb3V0IChwcmVzZXJ2aW5nIHRoZSBlcnJvciBjb2RlIGNhbGxlcnMgZXhwZWN0KS4KJiM0MzsgKi8KIHN0YXRpYyBpbnQgbWFuYV9od2NfZ2V0X21zZ19pbmRleChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiAqbXNnX2lkKQogewogCXN0cnVjdCBnZG1hX3Jlc291cmNlICpyID0gJmFtcDtod2MtJmd0O2luZmxpZ2h0X21zZ19yZXM7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgaW5kZXg7CiAKLQlkb3duKCZhbXA7aHdjLSZndDtzZW1hKTsKJiM0MzsJZm9yICg7OykgewomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtyLSZndDtsb2NrLCBmbGFncyk7CiAKLQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ItJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCWlmICghaHdjLSZndDtjaGFubmVsX3VwIHx8IGh3Yy0mZ3Q7aHdjX3RpbWVkX291dCkgewomIzQzOwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtyLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQkJcmV0dXJuIGh3Yy0mZ3Q7Y2hhbm5lbF91cCA/IC1FVElNRURPVVQgOiAtRU5PREVWOwomIzQzOwkJfQogCi0JaW5kZXggPSBmaW5kX2ZpcnN0X3plcm9fYml0KGh3Yy0mZ3Q7aW5mbGlnaHRfbXNnX3Jlcy5tYXAsCi0JCQkJICAgIGh3Yy0mZ3Q7aW5mbGlnaHRfbXNnX3Jlcy5zaXplKTsKJiM0MzsJCWluZGV4ID0gZmluZF9maXJzdF96ZXJvX2JpdChyLSZndDttYXAsIHItJmd0O3NpemUpOwomIzQzOwkJaWYgKGluZGV4ICZsdDsgci0mZ3Q7c2l6ZSkgewomIzQzOwkJCXN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4OwomIzQzOwomIzQzOwkJCWJpdG1hcF9zZXQoci0mZ3Q7bWFwLCBpbmRleCwgMSk7CiYjNDM7CQkJY3R4ID0gJmFtcDtod2MtJmd0O2NhbGxlcl9jdHhbaW5kZXhdOwomIzQzOwkJCXJlaW5pdF9jb21wbGV0aW9uKCZhbXA7Y3R4LSZndDtjb21wX2V2ZW50KTsKJiM0MzsJCQlyZWZjb3VudF9zZXQoJmFtcDtjdHgtJmd0O3JlZmNudCwgMSk7CiYjNDM7CQkJY3R4LSZndDttc2dfaWQgPSBpbmRleDsKJiM0MzsJCQljdHgtJmd0O2Vycm9yID0gLUVJTlBST0dSRVNTOwomIzQzOwkJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtyLSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ci0mZ3Q7bG9jaywgZmxhZ3MpOwogCi0JYml0bWFwX3NldChod2MtJmd0O2luZmxpZ2h0X21zZ19yZXMubWFwLCBpbmRleCwgMSk7CiYjNDM7CQl3YWl0X2V2ZW50KGh3Yy0mZ3Q7bXNnX3dhaXRxLAomIzQzOwkJCSAgICFod2MtJmd0O2NoYW5uZWxfdXAgfHwKJiM0MzsJCQkgICBod2MtJmd0O2h3Y190aW1lZF9vdXQgfHwKJiM0MzsJCQkgICAhYml0bWFwX2Z1bGwoci0mZ3Q7bWFwLCByLSZndDtzaXplKSk7CiAKLQlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ci0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJaWYgKCFod2MtJmd0O2NoYW5uZWxfdXApCiYjNDM7CQkJcmV0dXJuIC1FTk9ERVY7CiAKLQkqbXNnX2lkID0gaW5kZXg7CiYjNDM7CQlpZiAoaHdjLSZndDtod2NfdGltZWRfb3V0KQomIzQzOwkJCXJldHVybiAtRVRJTUVET1VUOwomIzQzOwl9CiAKJiM0MzsJKm1zZ19pZCA9IGluZGV4OwogCXJldHVybiAwOwogfQogCkBAIC0zNCwxMCAmIzQzOzYyLDE3IEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX3B1dF9tc2dfaW5kZXgoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgbXNnX2lkKQogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAKIAlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO3ItJmd0O2xvY2ssIGZsYWdzKTsKLQliaXRtYXBfY2xlYXIoaHdjLSZndDtpbmZsaWdodF9tc2dfcmVzLm1hcCwgbXNnX2lkLCAxKTsKJiM0MzsJYml0bWFwX2NsZWFyKHItJmd0O21hcCwgbXNnX2lkLCAxKTsKIAlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7ci0mZ3Q7bG9jaywgZmxhZ3MpOwogCi0JdXAoJmFtcDtod2MtJmd0O3NlbWEpOwomIzQzOwl3YWtlX3VwKCZhbXA7aHdjLSZndDttc2dfd2FpdHEpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBod2NfY3R4X3B1dChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsCiYjNDM7CQkJc3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHgpCiYjNDM7ewomIzQzOwlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7Y3R4LSZndDtyZWZjbnQpKQomIzQzOwkJbWFuYV9od2NfcHV0X21zZ19pbmRleChod2MsIGN0eC0mZ3Q7bXNnX2lkKTsKIH0KIAogc3RhdGljIGludCBtYW5hX2h3Y192ZXJpZnlfcmVzcF9tc2coY29uc3Qgc3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjYWxsZXJfY3R4LApAQCAtODMsNiAmIzQzOzExOCwxNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19oYW5kbGVfcmVzcChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXNwX2xlbiwKIAlzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDsKIAlpbnQgZXJyOwogCiYjNDM7CS8qIFZhbGlkYXRlIG1zZ19pZCBpcyBpbiByYW5nZSBiZWZvcmUgdXNpbmcgaXQgdG8gaW5kZXggYml0bWFwCiYjNDM7CSAqIGFuZCBjYWxsZXJfY3R4IGFycmF5LiAgTWFsaWNpb3VzIGZpcm13YXJlIGNvdWxkIHNlbmQKJiM0MzsJICogb3V0LW9mLXJhbmdlIG1zZ19pZCBjYXVzaW5nIG91dC1vZi1ib3VuZHMgYWNjZXNzLgomIzQzOwkgKi8KJiM0MzsJaWYgKG1zZ19pZCAmZ3Q7PSBod2MtJmd0O251bV9pbmZsaWdodF9tc2cpIHsKJiM0MzsJCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7aHdjX3J4OiBtc2dfaWQgJXUgJmd0Oz0gbWF4ICV1XG4mIzM0OywKJiM0MzsJCQltc2dfaWQsIGh3Yy0mZ3Q7bnVtX2luZmxpZ2h0X21zZyk7CiYjNDM7CQltYW5hX2h3Y19wb3N0X3J4X3dxZShod2MtJmd0O3J4cSwgcnhfcmVxKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCWlmICghdGVzdF9iaXQobXNnX2lkLCBod2MtJmd0O2luZmxpZ2h0X21zZ19yZXMubWFwKSkgewogCQlkZXZfZXJyKGh3Yy0mZ3Q7ZGV2LCAmIzM0O2h3Y19yeDogaW52YWxpZCBtc2dfaWQgPSAldVxuJiMzNDssIG1zZ19pZCk7CiAJCW1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Yy0mZ3Q7cnhxLCByeF9yZXEpOwpAQCAtOTAsMjIgJiM0MzsxMzYsNDQgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfaGFuZGxlX3Jlc3Aoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVzcF9sZW4sCiAJfQogCiAJY3R4ID0gaHdjLSZndDtjYWxsZXJfY3R4ICYjNDM7IG1zZ19pZDsKLQllcnIgPSBtYW5hX2h3Y192ZXJpZnlfcmVzcF9tc2coY3R4LCByZXNwX21zZywgcmVzcF9sZW4pOwotCWlmIChlcnIpCi0JCWdvdG8gb3V0OwogCi0JY3R4LSZndDtzdGF0dXNfY29kZSA9IHJlc3BfbXNnLSZndDtzdGF0dXM7CiYjNDM7CS8qIFJlamVjdCByZXNwb25zZXMgbGFyZ2VyIHRoYW4gdGhlIFJYIERNQSBidWZmZXIg4oCUIHRoZSBTR0UKJiM0MzsJICogbGltaXRzIHdoYXQgaGFyZHdhcmUgY2FuIERNQSwgc28gYW4gb3ZlcnNpemVkIHJlc3BfbGVuCiYjNDM7CSAqIGluZGljYXRlcyBhIGZpcm13YXJlIGJ1Zy4gIEZhaWwgcmF0aGVyIHRoYW4gc2lsZW50bHkKJiM0MzsJICogdHJ1bmNhdGluZy4KJiM0MzsJICovCiYjNDM7CWlmIChyZXNwX2xlbiAmZ3Q7IHJ4X3JlcS0mZ3Q7YnVmX2xlbikgewomIzQzOwkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtIV0MgUlg6IHJlc3BfbGVuICV1ICZndDsgYnVmX2xlbiAldVxuJiMzNDssCiYjNDM7CQkJcmVzcF9sZW4sIHJ4X3JlcS0mZ3Q7YnVmX2xlbik7CiYjNDM7CQlyZXNwX2xlbiA9IDA7CiYjNDM7CX0KIAotCW1lbWNweShjdHgtJmd0O291dHB1dF9idWYsIHJlc3BfbXNnLCByZXNwX2xlbik7Ci1vdXQ6Ci0JY3R4LSZndDtlcnJvciA9IGVycjsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7Y3R4LSZndDtsb2NrKTsKJiM0MzsKJiM0MzsJZXJyID0gbWFuYV9od2NfdmVyaWZ5X3Jlc3BfbXNnKGN0eCwgcmVzcF9tc2csIHJlc3BfbGVuKTsKIAotCS8qIE11c3QgcG9zdCByeCB3cWUgYmVmb3JlIGNvbXBsZXRlKCksIG90aGVyd2lzZSB0aGUgbmV4dCByeCBtYXkKLQkgKiBoaXQgbm9fd3FlIGVycm9yLgomIzQzOwlpZiAoIWVyciAmYW1wOyZhbXA7IGN0eC0mZ3Q7b3V0cHV0X2J1ZikgewomIzQzOwkJY3R4LSZndDtzdGF0dXNfY29kZSA9IHJlc3BfbXNnLSZndDtzdGF0dXM7CiYjNDM7CQltZW1jcHkoY3R4LSZndDtvdXRwdXRfYnVmLCByZXNwX21zZywgcmVzcF9sZW4pOwomIzQzOwkJY3R4LSZndDtlcnJvciA9IDA7CiYjNDM7CX0gZWxzZSBpZiAoY3R4LSZndDtvdXRwdXRfYnVmKSB7CiYjNDM7CQkvKiBPbmx5IG92ZXJ3cml0ZSBlcnJvciBpZiB0aGUgc2VuZGVyIGhhc24mIzM5O3QgdGltZWQgb3V0CiYjNDM7CQkgKiBvciBiZWVuIGZvcmNlLWNvbXBsZXRlZCBieSBkZXN0cm95LiAgV2hlbiBvdXRwdXRfYnVmCiYjNDM7CQkgKiBpcyBOVUxMLCBhIHRlcm1pbmFsIGVycm9yICgtRU5PREVWIG9yIHRpbWVvdXQpIGhhcwomIzQzOwkJICogYWxyZWFkeSBiZWVuIHNldCDigJQgcHJlc2VydmUgaXQgc28gdGhlIHNlbmRlciBkb2VzbiYjMzk7dAomIzQzOwkJICogc2VlIGEgc3B1cmlvdXMgc3VjY2Vzcy4KJiM0MzsJCSAqLwomIzQzOwkJY3R4LSZndDtlcnJvciA9IGVycjsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBQb3N0IFJYIFdRRSBiZWZvcmUgY29tcGxldGluZyDigJQgdGhlIG5leHQgcmVzcG9uc2UgbWF5IGFycml2ZQomIzQzOwkgKiBpbW1lZGlhdGVseSBhbmQgbmVlZHMgYSBwb3N0ZWQgYnVmZmVyLgogCSAqLwogCW1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Yy0mZ3Q7cnhxLCByeF9yZXEpOwotCiAJY29tcGxldGUoJmFtcDtjdHgtJmd0O2NvbXBfZXZlbnQpOwomIzQzOwlzcGluX3VubG9jaygmYW1wO2N0eC0mZ3Q7bG9jayk7CiYjNDM7CiYjNDM7CWh3Y19jdHhfcHV0KGh3YywgY3R4KTsKIH0KIAogc3RhdGljIHZvaWQgbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKHZvaWQgKmN0eCwgc3RydWN0IGdkbWFfcXVldWUgKnFfc2VsZiwKQEAgLTE0Niw3ICYjNDM7MjE0LDEyIEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX2luaXRfZXZlbnRfaGFuZGxlcih2b2lkICpjdHgsIHN0cnVjdCBnZG1hX3F1ZXVlICpxX3NlbGYsCiAJCQlicmVhazsKIAogCQljYXNlIEhXQ19JTklUX0RBVEFfUVVFVUVfREVQVEg6Ci0JCQlod2MtJmd0O2h3Y19pbml0X3FfZGVwdGhfbWF4ID0gKHUxNil2YWw7CiYjNDM7CQkJLyogSFdDX0lOSVRfREFUQV9RVUVVRV9ERVBUSCBpcyBhIDI0LWJpdCBmaWVsZC4gIEtlZXAKJiM0MzsJCQkgKiB0aGUgZnVsbCBkZXZpY2UtcmVwb3J0ZWQgdmFsdWUgaGVyZTsgaXQgaXMgY2xhbXBlZAomIzQzOwkJCSAqIGFuZCB2YWxpZGF0ZWQgaW4gbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoKSByYXRoZXIKJiM0MzsJCQkgKiB0aGFuIHNpbGVudGx5IHRydW5jYXRlZCB0byB1MTYuCiYjNDM7CQkJICovCiYjNDM7CQkJaHdjLSZndDtod2NfaW5pdF9xX2RlcHRoX21heCA9IHZhbDsKIAkJCWJyZWFrOwogCiAJCWNhc2UgSFdDX0lOSVRfREFUQV9NQVhfUkVRVUVTVDoKQEAgLTI2MSwxOSAmIzQzOzMzNCw2OSBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19yeF9ldmVudF9oYW5kbGVyKHZvaWQgKmN0eCwgdTMyIGdkbWFfcnhxX2lkLAogCiAJc2dlID0gKHN0cnVjdCBnZG1hX3NnZSAqKSh3cWUgJiM0MzsgOCAmIzQzOyBkbWFfb29iLSZndDtpbmxpbmVfb29iX3NpemVfZGl2NCAqIDQpOwogCi0JLyogU2VsZWN0IHRoZSBSWCB3b3JrIHJlcXVlc3QgZm9yIHZpcnR1YWwgYWRkcmVzcyBhbmQgZm9yIHJlcG9zdGluZy4gKi8KLQlycV9iYXNlX2FkZHIgPSBod2NfcnhxLSZndDttc2dfYnVmLSZndDttZW1faW5mby5kbWFfaGFuZGxlOwotCXJ4X3JlcV9pZHggPSAoc2dlLSZndDthZGRyZXNzIC0gcnFfYmFzZV9hZGRyKSAvIGh3Yy0mZ3Q7bWF4X3JlcV9tc2dfc2l6ZTsKJiM0MzsJLyogaW5saW5lX29vYl9zaXplX2RpdjQgaXMgcmVhZCBmcm9tIHRoZSBXUUUgaW4gZGV2aWNlLWFjY2Vzc2libGUgUlEKJiM0MzsJICogbWVtb3J5LCBzbyBhIG1hbGljaW91cyBob3N0IGluIGEgQ1ZNIChvciBidWdneSBmaXJtd2FyZSkgY291bGQgc2V0CiYjNDM7CSAqIGl0IHRvIHB1c2ggdGhlIFNHRSBwYXN0IHRoZSBSUSBidWZmZXIuICBCb3VuZHMtY2hlY2sgdGhlIFNHRSBpdAomIzQzOwkgKiBsb2NhdGVzIGJlZm9yZSBkZXJlZmVyZW5jaW5nIHNnZS0mZ3Q7YWRkcmVzcyBiZWxvdy4gIEEgdmFsaWRseSBwb3N0ZWQKJiM0MzsJICogV1FFIGtlZXBzIHRoZSBTR0UgaW5zaWRlIHRoZSByaW5nICh3b3JzdCBjYXNlIGVuZHMgZXhhY3RseSBhdCB0aGUKJiM0MzsJICogYnVmZmVyIGJvdW5kYXJ5KTsgcmVqZWN0IGFueXRoaW5nIHRoYXQgd291bGQgcmVhZCBwYXN0IGl0LiAgVGhlCiYjNDM7CSAqIHNsb3QgY2Fubm90IGJlIHRydXN0ZWQgaGVyZSwgc28gbGVhayB0aGlzIFJYIFdRRSByYXRoZXIgdGhhbiByZXBvc3QKJiM0MzsJICogdGhlIHdyb25nIG9uZSAtLSBhcyBpbiB0aGUgU0dFLWFkZHJlc3MgbWlzbWF0Y2ggcGF0aCBiZWxvdy4KJiM0MzsJICovCiYjNDM7CWlmICgodTggKikoc2dlICYjNDM7IDEpICZndDsgKHU4ICopcnEtJmd0O3F1ZXVlX21lbV9wdHIgJiM0MzsgcnEtJmd0O3F1ZXVlX3NpemUpIHsKJiM0MzsJCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7SFdDIFJYOiBTR0UgcGFzdCBSUSBidWZmZXIsIG9vYl9kaXY0PSV1XG4mIzM0OywKJiM0MzsJCQlkbWFfb29iLSZndDtpbmxpbmVfb29iX3NpemVfZGl2NCk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KIAotCWlmIChyeF9yZXFfaWR4ICZndDs9IGh3Y19yeHEtJmd0O21zZ19idWYtJmd0O251bV9yZXFzKSB7Ci0JCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7SFdDIFJYOiB3cm9uZyByeF9yZXFfaWR4PSVsbHUsIG51bV9yZXFzPSV1XG4mIzM0OywKLQkJCXJ4X3JlcV9pZHgsIGh3Y19yeHEtJmd0O21zZ19idWYtJmd0O251bV9yZXFzKTsKJiM0MzsJLyogUmVjb3ZlciB0aGUgb3JpZ2luYXRpbmcgUlggc2xvdCBmcm9tIHRoZSBTR0UgYWRkcmVzcy4gIE9mIHRoZSB0aHJlZQomIzQzOwkgKiB0ZXJtcyBoZXJlIG9ubHkgc2dlLSZndDthZGRyZXNzIGxpdmVzIGluIGRldmljZS1hY2Nlc3NpYmxlIFJRIG1lbW9yeTsKJiM0MzsJICogcnFfYmFzZV9hZGRyIGFuZCBtYXhfcmVzcF9tc2dfc2l6ZSBhcmUgZHJpdmVyLXByaXZhdGUgY29uc3RhbnRzLiAgQW4KJiM0MzsJICogaW4tcmFuZ2UgYnV0IHdyb25nL3VuYWxpZ25lZCBTR0UgKGNvcnJ1cHRlZCBXUUUsIG9yIGEgbWFsaWNpb3VzIGhvc3QKJiM0MzsJICogaW4gYSBDVk0pIHdvdWxkIG90aGVyd2lzZSB0cnVuY2F0ZSBvbnRvIGEgbmVpZ2hib3VyaW5nIHNsb3QsIGxldHRpbmcKJiM0MzsJICogdXMgcmVhZCBhIHN0YWxlIHJlc3BvbnNlIHRoYXQgY291bGQgY29tcGxldGUgdGhlIHdyb25nLCByZXVzZWQKJiM0MzsJICogaW4tZmxpZ2h0IHJlcXVlc3QuICBSZXF1aXJlIHRoZSBpbmRleCB0byBiZSBpbiByYW5nZSBBTkQgdGhlIGFkZHJlc3MKJiM0MzsJICogdG8gZXhhY3RseSBtYXRjaCB0aGUgdmFsdWUgdGhlIGRyaXZlciBwb3N0ZWQgZm9yIHRoYXQgc2xvdC4KJiM0MzsJICovCiYjNDM7CXJxX2Jhc2VfYWRkciA9IGh3Y19yeHEtJmd0O21zZ19idWYtJmd0O21lbV9pbmZvLmRtYV9oYW5kbGU7CiYjNDM7CXJ4X3JlcV9pZHggPSAoc2dlLSZndDthZGRyZXNzIC0gcnFfYmFzZV9hZGRyKSAvIGh3Yy0mZ3Q7bWF4X3Jlc3BfbXNnX3NpemU7CiYjNDM7CiYjNDM7CWlmIChyeF9yZXFfaWR4ICZndDs9IGh3Y19yeHEtJmd0O3F1ZXVlX2RlcHRoKSB7CiYjNDM7CQkvKiBDYW5ub3QgdHJ1c3Qgd2hpY2ggV1FFIHRoaXMgaXMsIHNvIHdlIGNhbm5vdCBzYWZlbHkgcmVwb3N0CiYjNDM7CQkgKiBpdDsgbGVhayBvbmUgUlggV1FFIGFuZCBiYWlsLiAgQW4gb3V0LW9mLXJhbmdlIGluZGV4IG1lYW5zCiYjNDM7CQkgKiBhIGNvcnJ1cHRlZCBTR0UgZnJvbSBoYXJkd2FyZSAob3IgaG9zdCB0YW1wZXJpbmcpLCBhbgomIzQzOwkJICogdW5yZWNvdmVyYWJsZSBkZXZpY2UgZXJyb3IuCiYjNDM7CQkgKi8KJiM0MzsJCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7SFdDIFJYOiBTR0UgaWR4ICVsbHUgb3V0IG9mIHJhbmdlXG4mIzM0OywKJiM0MzsJCQlyeF9yZXFfaWR4KTsKIAkJcmV0dXJuOwogCX0KIAogCXJ4X3JlcSA9ICZhbXA7aHdjX3J4cS0mZ3Q7bXNnX2J1Zi0mZ3Q7cmVxc1tyeF9yZXFfaWR4XTsKJiM0MzsJaWYgKHNnZS0mZ3Q7YWRkcmVzcyAhPSAodTY0KXJ4X3JlcS0mZ3Q7YnVmX3NnZV9hZGRyKSB7CiYjNDM7CQkvKiBJbi1yYW5nZSBpbmRleCBidXQgdGhlIGFkZHJlc3MgZG9lcyBub3QgbWF0Y2ggd2hhdCB0aGUKJiM0MzsJCSAqIGRyaXZlciBwb3N0ZWQgZm9yIHRoYXQgc2xvdDsgdGhlIHNhbWUgdW5yZWNvdmVyYWJsZSBjYXNlLAomIzQzOwkJICogc28gbGVhayB0aGlzIFdRRSByYXRoZXIgdGhhbiByZXBvc3QgdGhlIHdyb25nIG9uZS4KJiM0MzsJCSAqLwomIzQzOwkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtIV0MgUlg6IGludmFsaWQgU0dFIGFkZHJlc3MgJWxseCAoaWR4PSVsbHUpXG4mIzM0OywKJiM0MzsJCQlzZ2UtJmd0O2FkZHJlc3MsIHJ4X3JlcV9pZHgpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiAJcmVzcCA9IChzdHJ1Y3QgZ2RtYV9yZXNwX2hkciAqKXJ4X3JlcS0mZ3Q7YnVmX3ZhOwogCiYjNDM7CS8qIFZhbGlkYXRlIHJlc3BfbGVuIGNvdmVycyB0aGUgcmVzcG9uc2UgaGVhZGVyIGJlZm9yZSByZWFkaW5nCiYjNDM7CSAqIGh3Y19tc2dfaWQuICBBIHNob3J0IHJlc3BvbnNlIGxlYXZlcyBzdGFsZSBkYXRhIGZyb20gdGhlCiYjNDM7CSAqIHByZXZpb3VzIGJ1ZmZlciBvY2N1cGFudCwgd2hpY2ggY291bGQgbWF0Y2ggYSBsaXZlIHNsb3QgYW5kCiYjNDM7CSAqIGNvbXBsZXRlIHRoZSB3cm9uZyByZXF1ZXN0LgomIzQzOwkgKi8KJiM0MzsJaWYgKHJ4X29vYi0mZ3Q7dHhfb29iX2RhdGFfc2l6ZSAmbHQ7IHNpemVvZigqcmVzcCkpIHsKJiM0MzsJCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7SFdDIFJYOiBzaG9ydCByZXNwX2xlbj0ldVxuJiMzNDssCiYjNDM7CQkJcnhfb29iLSZndDt0eF9vb2JfZGF0YV9zaXplKTsKJiM0MzsJCW1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Y19yeHEsIHJ4X3JlcSk7CiYjNDM7CQlyZXR1cm47CiYjNDM7CX0KJiM0MzsKIAkvKiBSZWFkIG1zZ19pZCBvbmNlIGZyb20gRE1BIGJ1ZmZlciB0byBwcmV2ZW50IFRPQ1RPVToKIAkgKiBETUEgbWVtb3J5IGlzIHNoYXJlZC91bmVuY3J5cHRlZCBpbiBDVk1zIC0gaG9zdCBjYW4KIAkgKiBtb2RpZnkgaXQgYmV0d2VlbiByZWFkcy4KQEAgLTI4MSw2ICYjNDM7NDA0LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfcnhfZXZlbnRfaGFuZGxlcih2b2lkICpjdHgsIHUzMiBnZG1hX3J4cV9pZCwKIAltc2dfaWQgPSBSRUFEX09OQ0UocmVzcC0mZ3Q7cmVzcG9uc2UuaHdjX21zZ19pZCk7CiAJaWYgKG1zZ19pZCAmZ3Q7PSBod2MtJmd0O251bV9pbmZsaWdodF9tc2cpIHsKIAkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtIV0MgUlg6IHdyb25nIG1zZ19pZD0ldVxuJiMzNDssIG1zZ19pZCk7CiYjNDM7CQltYW5hX2h3Y19wb3N0X3J4X3dxZShod2NfcnhxLCByeF9yZXEpOwogCQlyZXR1cm47CiAJfQogCkBAIC0zODQsMTQgJiM0Mzs1MDgsMjAgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfY29tcF9ldmVudCh2b2lkICpjdHgsIHN0cnVjdCBnZG1hX3F1ZXVlICpxX3NlbGYpCiAKIHN0YXRpYyB2b2lkIG1hbmFfaHdjX2Rlc3Ryb3lfY3Eoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHN0cnVjdCBod2NfY3EgKmh3Y19jcSkKIHsKLQlrZnJlZShod2NfY3EtJmd0O2NvbXBfYnVmKTsKLQogCWlmIChod2NfY3EtJmd0O2dkbWFfY3EpCiAJCW1hbmFfZ2RfZGVzdHJveV9xdWV1ZShnYywgaHdjX2NxLSZndDtnZG1hX2NxKTsKIAomIzQzOwkvKiBjb21wX2J1ZiBpcyByZWFjaGVkIG9ubHkgYnkgbWFuYV9od2NfY29tcF9ldmVudCgpLCB3aGljaCB0aGUKJiM0MzsJICogRVEgaGFuZGxlciBpbnZva2VzIHZpYSBjcV90YWJsZVtpZF0uICBUaGUgQ1EgZGVzdHJveSBhYm92ZQomIzQzOwkgKiBhbHJlYWR5IGNsZWFyZWQgdGhhdCBzbG90IGFuZCByYW4gc3luY2hyb25pemVfcmN1KCksIHNvIG5vCiYjNDM7CSAqIGhhbmRsZXIgY2FuIHJlYWNoIGNvbXBfYnVmIG9uY2UgaXQgcmV0dXJucy4gIERlc3Ryb3lpbmcgdGhlIEVRCiYjNDM7CSAqIGhlcmUgYWRkaXRpb25hbGx5IHRlYXJzIGRvd24gdGhlIElSUSAoZGVmZW5zZSBpbiBkZXB0aCkgYmVmb3JlCiYjNDM7CSAqIGNvbXBfYnVmIGFuZCBod2NfY3EgYXJlIGZyZWVkIGJlbG93LgomIzQzOwkgKi8KIAlpZiAoaHdjX2NxLSZndDtnZG1hX2VxKQogCQltYW5hX2dkX2Rlc3Ryb3lfcXVldWUoZ2MsIGh3Y19jcS0mZ3Q7Z2RtYV9lcSk7CiAKJiM0MzsJa2ZyZWUoaHdjX2NxLSZndDtjb21wX2J1Zik7CiAJa2ZyZWUoaHdjX2NxKTsKIH0KIApAQCAtNTYwLDYgJiM0Mzs2OTAsNyBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2NyZWF0ZV93cShzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsCiAJaHdjX3dxLSZndDtnZG1hX3dxID0gcXVldWU7CiAJaHdjX3dxLSZndDtxdWV1ZV9kZXB0aCA9IHFfZGVwdGg7CiAJaHdjX3dxLSZndDtod2NfY3EgPSBod2NfY3E7CiYjNDM7CXNwaW5fbG9ja19pbml0KCZhbXA7aHdjX3dxLSZndDtsb2NrKTsKIAogCWVyciA9IG1hbmFfaHdjX2FsbG9jX2RtYV9idWYoaHdjLCBxX2RlcHRoLCBtYXhfbXNnX3NpemUsCiAJCQkJICAgICAmYW1wO2h3Y193cS0mZ3Q7bXNnX2J1Zik7CkBAIC01NzcsNyAmIzQzOzcwOCw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfY3JlYXRlX3dxKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywKIAlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKGNvbnN0IHN0cnVjdCBod2Nfd3EgKmh3Y190eHEsCiYjNDM7c3RhdGljIGludCBtYW5hX2h3Y19wb3N0X3R4X3dxZShzdHJ1Y3QgaHdjX3dxICpod2NfdHhxLAogCQkJCXN0cnVjdCBod2Nfd29ya19yZXF1ZXN0ICpyZXEsCiAJCQkJdTMyIGRlc3RfdmlydF9ycV9pZCwgdTMyIGRlc3RfdmlydF9yY3FfaWQsCiAJCQkJYm9vbCBkZXN0X3BmKQpAQCAtNjE2LDcgJiM0Mzs3NDcsMTEgQEAgc3RhdGljIGludCBtYW5hX2h3Y19wb3N0X3R4X3dxZShjb25zdCBzdHJ1Y3QgaHdjX3dxICpod2NfdHhxLAogCXJlcS0mZ3Q7d3FlX3JlcS5pbmxpbmVfb29iX2RhdGEgPSB0eF9vb2I7CiAJcmVxLSZndDt3cWVfcmVxLmNsaWVudF9kYXRhX3VuaXQgPSAwOwogCiYjNDM7CS8qIFNlcmlhbGl6ZSBXUUUgcG9zdGluZyDigJQgbXVsdGlwbGUgc2VuZGVycyBtYXkgY2FsbCBjb25jdXJyZW50bHkuICovCiYjNDM7CXNwaW5fbG9jaygmYW1wO2h3Y190eHEtJmd0O2xvY2spOwogCWVyciA9IG1hbmFfZ2RfcG9zdF9hbmRfcmluZyhod2NfdHhxLSZndDtnZG1hX3dxLCAmYW1wO3JlcS0mZ3Q7d3FlX3JlcSwgTlVMTCk7CiYjNDM7CXNwaW5fdW5sb2NrKCZhbXA7aHdjX3R4cS0mZ3Q7bG9jayk7CiYjNDM7CiAJaWYgKGVycikKIAkJZGV2X2VycihkZXYsICYjMzQ7RmFpbGVkIHRvIHBvc3QgV1FFIG9uIEhXQyBTUTogJWRcbiYjMzQ7LCBlcnIpOwogCXJldHVybiBlcnI7CkBAIC02MjcsNyAmIzQzOzc2Miw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfaW5pdF9pbmZsaWdodF9tc2coc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLAogewogCWludCBlcnI7CiAKLQlzZW1hX2luaXQoJmFtcDtod2MtJmd0O3NlbWEsIG51bV9tc2cpOwomIzQzOwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZhbXA7aHdjLSZndDttc2dfd2FpdHEpOwogCiAJZXJyID0gbWFuYV9nZF9hbGxvY19yZXNfbWFwKG51bV9tc2csICZhbXA7aHdjLSZndDtpbmZsaWdodF9tc2dfcmVzKTsKIAlpZiAoZXJyKQpAQCAtNjU3LDIzICYjNDM7NzkyLDQwIEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfdGVzdF9jaGFubmVsKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsCiAJaWYgKCFjdHgpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JZm9yIChpID0gMDsgaSAmbHQ7IHFfZGVwdGg7ICYjNDM7JiM0MztpKQomIzQzOwlmb3IgKGkgPSAwOyBpICZsdDsgcV9kZXB0aDsgJiM0MzsmIzQzO2kpIHsKJiM0MzsJCXNwaW5fbG9ja19pbml0KCZhbXA7Y3R4W2ldLmxvY2spOwogCQlpbml0X2NvbXBsZXRpb24oJmFtcDtjdHhbaV0uY29tcF9ldmVudCk7CiYjNDM7CX0KIAogCWh3Yy0mZ3Q7Y2FsbGVyX2N0eCA9IGN0eDsKIAotCXJldHVybiBtYW5hX2dkX3Rlc3RfZXEoZ2MsIGh3Yy0mZ3Q7Y3EtJmd0O2dkbWFfZXEpOwomIzQzOwkvKiBjaGFubmVsX3VwIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgdGVzdCBFUSByZXF1ZXN0LCBiZWNhdXNlCiYjNDM7CSAqIHRoZSByZXF1ZXN0IGdvZXMgdGhyb3VnaCBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KCkgd2hpY2gKJiM0MzsJICogY2hlY2tzIGNoYW5uZWxfdXAuICBjYWxsZXJfY3R4IGlzIGFsbG9jYXRlZCBhYm92ZSwgc28KJiM0MzsJICogY29uY3VycmVudCBhY2Nlc3MgdG8gYSBOVUxMIGNhbGxlcl9jdHggaXMgbm90IHBvc3NpYmxlLgomIzQzOwkgKi8KJiM0MzsJaHdjLSZndDtjaGFubmVsX3VwID0gdHJ1ZTsKJiM0MzsKJiM0MzsJZXJyID0gbWFuYV9nZF90ZXN0X2VxKGdjLCBod2MtJmd0O2NxLSZndDtnZG1hX2VxKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWh3Yy0mZ3Q7Y2hhbm5lbF91cCA9IGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gZXJyOwogfQogCi1zdGF0aWMgaW50IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MTYgKnFfZGVwdGgsCiYjNDM7c3RhdGljIGludCBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTMyICpxX2RlcHRoLAogCQkJCSAgICAgIHUzMiAqbWF4X3JlcV9tc2dfc2l6ZSwKIAkJCQkgICAgICB1MzIgKm1heF9yZXNwX21zZ19zaXplKQogewomIzQzOwkvKiBObyBSQ1UgbmVlZGVkOiBjYWxsZWQgb25seSBmcm9tIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsCiYjNDM7CSAqIGR1cmluZyBpbml0LCBiZWZvcmUgdGhlIGNoYW5uZWwgaXMgcHVibGlzaGVkIHRvIHNlbmRlcnMuCiYjNDM7CSAqLwogCXN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyA9IGdjLSZndDtod2MuZHJpdmVyX2RhdGE7CiAJc3RydWN0IGdkbWFfcXVldWUgKnJxID0gaHdjLSZndDtyeHEtJmd0O2dkbWFfd3E7CiAJc3RydWN0IGdkbWFfcXVldWUgKnNxID0gaHdjLSZndDt0eHEtJmd0O2dkbWFfd3E7CiAJc3RydWN0IGdkbWFfcXVldWUgKmVxID0gaHdjLSZndDtjcS0mZ3Q7Z2RtYV9lcTsKIAlzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3EgPSBod2MtJmd0O2NxLSZndDtnZG1hX2NxOwomIzQzOwlzdHJ1Y3QgZ2RtYV9xdWV1ZSBfX3JjdSAqKmNxX3RhYmxlOwogCWludCBlcnI7CiAKIAlpbml0X2NvbXBsZXRpb24oJmFtcDtod2MtJmd0O2h3Y19pbml0X2VxZV9jb21wKTsKQEAgLTY4NywyNCAmIzQzOzgzOSw1MSBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MTYgKnFfZGVwdGgsCiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKIAotCWlmICghd2FpdF9mb3JfY29tcGxldGlvbl90aW1lb3V0KCZhbXA7aHdjLSZndDtod2NfaW5pdF9lcWVfY29tcCwgNjAgKiBIWikpCi0JCXJldHVybiAtRVRJTUVET1VUOwomIzQzOwkvKiBzZXR1cF9od2MgYWN0aXZhdGVkIE1TVCBlbnRyaWVzIOKAlCBoYXJkd2FyZSBjYW4gbm93IERNQSBpbnRvCiYjNDM7CSAqIG91ciBxdWV1ZSBidWZmZXJzLiAgSWYgYW55dGhpbmcgYmVsb3cgZmFpbHMsIHdlIG11c3QgdGVhcgomIzQzOwkgKiBkb3duIGJlZm9yZSByZXR1cm5pbmcgc28gdGhlIGNhbGxlciBkb2VzbiYjMzk7dCBuZWVkIHRvIHRyYWNrCiYjNDM7CSAqIHdoZXRoZXIgc2V0dXBfaHdjIHN1Y2NlZWRlZC4KJiM0MzsJICovCiYjNDM7CWh3Yy0mZ3Q7c2V0dXBfYWN0aXZlID0gdHJ1ZTsKJiM0MzsKJiM0MzsJaWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoJmFtcDtod2MtJmd0O2h3Y19pbml0X2VxZV9jb21wLCA2MCAqIEhaKSkgewomIzQzOwkJZXJyID0gLUVUSU1FRE9VVDsKJiM0MzsJCWdvdG8gdGVhcmRvd247CiYjNDM7CX0KIAogCSpxX2RlcHRoID0gaHdjLSZndDtod2NfaW5pdF9xX2RlcHRoX21heDsKIAkqbWF4X3JlcV9tc2dfc2l6ZSA9IGh3Yy0mZ3Q7aHdjX2luaXRfbWF4X3JlcV9tc2dfc2l6ZTsKIAkqbWF4X3Jlc3BfbXNnX3NpemUgPSBod2MtJmd0O2h3Y19pbml0X21heF9yZXNwX21zZ19zaXplOwogCiAJLyogQm90aCB3ZXJlIHNldCBpbiBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIoKS4gKi8KLQlpZiAoV0FSTl9PTihjcS0mZ3Q7aWQgJmd0Oz0gZ2MtJmd0O21heF9udW1fY3FzKSkKLQkJcmV0dXJuIC1FUFJPVE87CiYjNDM7CWlmIChXQVJOX09OKGNxLSZndDtpZCAmZ3Q7PSBnYy0mZ3Q7bWF4X251bV9jcXMpKSB7CiYjNDM7CQllcnIgPSAtRVBST1RPOwomIzQzOwkJZ290byB0ZWFyZG93bjsKJiM0MzsJfQogCi0JZ2MtJmd0O2NxX3RhYmxlID0gdmNhbGxvYyhnYy0mZ3Q7bWF4X251bV9jcXMsIHNpemVvZihzdHJ1Y3QgZ2RtYV9xdWV1ZSAqKSk7Ci0JaWYgKCFnYy0mZ3Q7Y3FfdGFibGUpCi0JCXJldHVybiAtRU5PTUVNOwomIzQzOwljcV90YWJsZSA9IHZjYWxsb2MoZ2MtJmd0O21heF9udW1fY3FzLCBzaXplb2YoKmNxX3RhYmxlKSk7CiYjNDM7CWlmICghY3FfdGFibGUpIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIHRlYXJkb3duOwomIzQzOwl9CiAKLQlnYy0mZ3Q7Y3FfdGFibGVbY3EtJmd0O2lkXSA9IGNxOwomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIoY3FfdGFibGVbY3EtJmd0O2lkXSwgY3EpOwomIzQzOwkvKiBQdWJsaXNoIHRoZSBmdWxseS1pbml0aWFsaXNlZCB0YWJsZSBsYXN0OyBwYWlycyB3aXRoIHRoZQomIzQzOwkgKiByY3VfZGVyZWZlcmVuY2UoZ2MtJmd0O2NxX3RhYmxlKSBpbiBtYW5hX2dkX3Byb2Nlc3NfZXFlKCkuCiYjNDM7CSAqLwomIzQzOwlyY3VfYXNzaWduX3BvaW50ZXIoZ2MtJmd0O2NxX3RhYmxlLCBjcV90YWJsZSk7CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0Mzt0ZWFyZG93bjoKJiM0MzsJewomIzQzOwkJaW50IHRkX2VyciA9IG1hbmFfc21jX3RlYXJkb3duX2h3YygmYW1wO2djLSZndDtzaG1fY2hhbm5lbCwgZmFsc2UpOwomIzQzOwomIzQzOwkJaWYgKCF0ZF9lcnIpCiYjNDM7CQkJaHdjLSZndDtzZXR1cF9hY3RpdmUgPSBmYWxzZTsKJiM0MzsKJiM0MzsJCXJldHVybiB0ZF9lcnIgPyB0ZF9lcnIgOiBlcnI7CiYjNDM7CX0KIH0KIAogc3RhdGljIGludCBtYW5hX2h3Y19pbml0X3F1ZXVlcyhzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLApAQCAtNzEyLDYgJiM0Mzs4OTEsMTIgQEAgc3RhdGljIGludCBtYW5hX2h3Y19pbml0X3F1ZXVlcyhzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLAogewogCWludCBlcnI7CiAKJiM0MzsJLyogQ1EgZGVwdGggaXMgcV9kZXB0aCAqIDIgKFNRICYjNDM7IFJRKSBwYXNzZWQgYXMgdTE2IHRvIGNyZWF0ZV9jcS4KJiM0MzsJICogQ2FwIHRvIHByZXZlbnQgdTE2IHRydW5jYXRpb24uCiYjNDM7CSAqLwomIzQzOwlpZiAocV9kZXB0aCAmZ3Q7IFUxNl9NQVggLyAyKQomIzQzOwkJcV9kZXB0aCA9IFUxNl9NQVggLyAyOwomIzQzOwogCWVyciA9IG1hbmFfaHdjX2luaXRfaW5mbGlnaHRfbXNnKGh3YywgcV9kZXB0aCk7CiAJaWYgKGVycikKIAkJcmV0dXJuIGVycjsKQEAgLTcyOCwxNCAmIzQzOzkxMywxNCBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsCiAJCWdvdG8gb3V0OwogCX0KIAotCWVyciA9IG1hbmFfaHdjX2NyZWF0ZV93cShod2MsIEdETUFfUlEsIHFfZGVwdGgsIG1heF9yZXFfbXNnX3NpemUsCiYjNDM7CWVyciA9IG1hbmFfaHdjX2NyZWF0ZV93cShod2MsIEdETUFfUlEsIHFfZGVwdGgsIG1heF9yZXNwX21zZ19zaXplLAogCQkJCSBod2MtJmd0O2NxLCAmYW1wO2h3Yy0mZ3Q7cnhxKTsKIAlpZiAoZXJyKSB7CiAJCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIGNyZWF0ZSBIV0MgUlE6ICVkXG4mIzM0OywgZXJyKTsKIAkJZ290byBvdXQ7CiAJfQogCi0JZXJyID0gbWFuYV9od2NfY3JlYXRlX3dxKGh3YywgR0RNQV9TUSwgcV9kZXB0aCwgbWF4X3Jlc3BfbXNnX3NpemUsCiYjNDM7CWVyciA9IG1hbmFfaHdjX2NyZWF0ZV93cShod2MsIEdETUFfU1EsIHFfZGVwdGgsIG1heF9yZXFfbXNnX3NpemUsCiAJCQkJIGh3Yy0mZ3Q7Y3EsICZhbXA7aHdjLSZndDt0eHEpOwogCWlmIChlcnIpIHsKIAkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gY3JlYXRlIEhXQyBTUTogJWRcbiYjMzQ7LCBlcnIpOwpAQCAtNzQ0LDYgJiM0Mzs5MjksNyBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsCiAKIAlod2MtJmd0O251bV9pbmZsaWdodF9tc2cgPSBxX2RlcHRoOwogCWh3Yy0mZ3Q7bWF4X3JlcV9tc2dfc2l6ZSA9IG1heF9yZXFfbXNnX3NpemU7CiYjNDM7CWh3Yy0mZ3Q7bWF4X3Jlc3BfbXNnX3NpemUgPSBtYXhfcmVzcF9tc2dfc2l6ZTsKIAogCXJldHVybiAwOwogb3V0OgpAQCAtNzUxLDEyICYjNDM7OTM3LDYyIEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfaW5pdF9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCwKIAlyZXR1cm4gZXJyOwogfQogCiYjNDM7LyogVGVhciBkb3duIGFsbCBIV0MgcXVldWVzIGFuZCBmcmVlIGFzc29jaWF0ZWQgcmVzb3VyY2VzLiAgVXNlZCBvbgomIzQzOyAqIHRoZSByZWluaXQtd2l0aC1oaWdoZXItcXVldWUtZGVwdGggcGF0aCBhbmQgcmVpbml0IGZhbGxiYWNrLgomIzQzOyAqCiYjNDM7ICogUFJFQ09ORElUSU9OOiBtdXN0IGJlIGNhbGxlZCBvbmx5IGR1cmluZyBjaGFubmVsIGJyaW5nLXVwIGluCiYjNDM7ICogbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoKSwgYmVmb3JlIHRoZSBjaGFubmVsIGlzIHB1Ymxpc2hlZCB0bwomIzQzOyAqIHNlbmRlcnMuICBUaGVyZSB0aGUgc2V0dXAgdGhyZWFkIGlzIGVmZmVjdGl2ZWx5IHNpbmdsZS10aHJlYWRlZAomIzQzOyAqIChzZXJpYWxpemVkIGFnYWluc3QgdGVhcmRvd24gYnkgdGhlIFBDSS9QTSBkZXZpY2VfbG9jayBvciwgb24gdGhlCiYjNDM7ICogc2VydmljZSBwYXRoLCBHQ19JTl9TRVJWSUNFLCB3aXRoIHRoZSBkYXRhIHBhdGggbm90IHlldCBwcm9iZWQpLAomIzQzOyAqIGNoYW5uZWxfdXAgaXMgc3RpbGwgZmFsc2UsIGNhbGxlcl9jdHggaXMgbm90IHlldCBhbGxvY2F0ZWQsIGFuZAomIzQzOyAqIGFjdGl2ZV9zZW5kZXJzIGlzIDAg4oCUIHNvIG5vIGNvbmN1cnJlbnQgcmVxdWVzdC9yZXNwb25zZSB1c2VyIGNhbgomIzQzOyAqIHRvdWNoIHRoZXNlIHF1ZXVlcy4gIFRoYXQgaXMgd2h5IHRoaXMgc2tpcHMgdGhlIGh3Y19sb2NrLXByb3RlY3RlZAomIzQzOyAqIGRyaXZlcl9kYXRhIGNsZWFyICYjNDM7IGFjdGl2ZV9zZW5kZXJzIGRyYWluIHRoYXQKJiM0MzsgKiBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoKSBuZWVkcyBmb3IgdGhlIHJ1bnRpbWUgdGVhcmRvd24gcmFjZTsKJiM0MzsgKiBvbmx5IHRoZSBDUS1maXJzdCBvcmRlcmluZyBiZWxvdyAodG8gZmVuY2Ugb2ZmIGEgcGVuZGluZyBpbnRlcnJ1cHQpCiYjNDM7ICogaXMgcmVxdWlyZWQuICBDYWxsaW5nIHRoaXMgb24gYSBsaXZlLCBwdWJsaXNoZWQgY2hhbm5lbCB3b3VsZCBiZSBhCiYjNDM7ICogdXNlLWFmdGVyLWZyZWUuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgbWFuYV9od2NfZGVzdHJveV9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjKQomIzQzO3sKJiM0MzsJc3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBod2MtJmd0O2dkbWFfZGV2LSZndDtnZG1hX2NvbnRleHQ7CiYjNDM7CiYjNDM7CS8qIERlc3Ryb3kgQ1EgZmlyc3QgdG8gZGVyZWdpc3RlciB0aGUgRVEgZnJvbSB0aGUgaW50ZXJydXB0CiYjNDM7CSAqIGhhbmRsZXIgbGlzdCBiZWZvcmUgZnJlZWluZyBjYWxsZXJfY3R4LCBUWFEsIG9yIFJYUSBtZW1vcnkuCiYjNDM7CSAqIEEgcGVuZGluZyBpbnRlcnJ1cHQgaGFuZGxlciBjb3VsZCBzdGlsbCByZWFjaCBoYW5kbGVfcmVzcCgpCiYjNDM7CSAqIHdoaWNoIGRlcmVmZXJlbmNlcyBjYWxsZXJfY3R4LgomIzQzOwkgKi8KJiM0MzsJaWYgKGh3Yy0mZ3Q7Y3EpIHsKJiM0MzsJCW1hbmFfaHdjX2Rlc3Ryb3lfY3EoZ2MsIGh3Yy0mZ3Q7Y3EpOwomIzQzOwkJaHdjLSZndDtjcSA9IE5VTEw7CiYjNDM7CX0KJiM0MzsKJiM0MzsJa2ZyZWUoaHdjLSZndDtjYWxsZXJfY3R4KTsKJiM0MzsJaHdjLSZndDtjYWxsZXJfY3R4ID0gTlVMTDsKJiM0MzsKJiM0MzsJaWYgKGh3Yy0mZ3Q7dHhxKSB7CiYjNDM7CQltYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLSZndDt0eHEpOwomIzQzOwkJaHdjLSZndDt0eHEgPSBOVUxMOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChod2MtJmd0O3J4cSkgewomIzQzOwkJbWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy0mZ3Q7cnhxKTsKJiM0MzsJCWh3Yy0mZ3Q7cnhxID0gTlVMTDsKJiM0MzsJfQomIzQzOwomIzQzOwltYW5hX2dkX2ZyZWVfcmVzX21hcCgmYW1wO2h3Yy0mZ3Q7aW5mbGlnaHRfbXNnX3Jlcyk7CiYjNDM7CWh3Yy0mZ3Q7bnVtX2luZmxpZ2h0X21zZyA9IDA7CiYjNDM7fQomIzQzOwogaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKQogewogCXUzMiBtYXhfcmVxX21zZ19zaXplLCBtYXhfcmVzcF9tc2dfc2l6ZTsKIAlzdHJ1Y3QgZ2RtYV9kZXYgKmdkID0gJmFtcDtnYy0mZ3Q7aHdjOwogCXN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YzsKLQl1MTYgcV9kZXB0aF9tYXg7CiYjNDM7CXN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqb2xkX2NxX3RhYmxlOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwomIzQzOwl1MzIgcV9kZXB0aF9tYXg7CiAJaW50IGVycjsKIAogCWh3YyA9IGt6YWxsb2Nfb2JqKCpod2MpOwpAQCAtNzY0LDEwICYjNDM7MTAwMCwxMSBAQCBpbnQgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpCiAJCXJldHVybiAtRU5PTUVNOwogCiAJZ2QtJmd0O2dkbWFfY29udGV4dCA9IGdjOwotCWdkLSZndDtkcml2ZXJfZGF0YSA9IGh3YzsKIAlod2MtJmd0O2dkbWFfZGV2ID0gZ2Q7CiAJaHdjLSZndDtkZXYgPSBnYy0mZ3Q7ZGV2OwogCWh3Yy0mZ3Q7aHdjX3RpbWVvdXQgPSBIV19DSEFOTkVMX1dBSVRfUkVTT1VSQ0VfVElNRU9VVF9NUzsKJiM0MzsJaHdjLSZndDthY3RpdmVfc2VuZGVycyA9IDA7CiYjNDM7CWluaXRfd2FpdHF1ZXVlX2hlYWQoJmFtcDtnYy0mZ3Q7aHdjX2RyYWluX3dhaXRxKTsKIAogCS8qIEhXQyYjMzk7cyBpbnN0YW5jZSBudW1iZXIgaXMgYWx3YXlzIDAuICovCiAJZ2QtJmd0O2Rldl9pZC5hc191aW50MzIgPSAwOwpAQCAtNzc2LDYgJiM0MzsxMDEzLDE1IEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYykKIAlnZC0mZ3Q7cGRpZCA9IElOVkFMSURfUERJRDsKIAlnZC0mZ3Q7ZG9vcmJlbGwgPSBJTlZBTElEX0RPT1JCRUxMOwogCiYjNDM7CS8qIFB1Ymxpc2ggZHJpdmVyX2RhdGEgbGFzdCwgdW5kZXIgaHdjX2xvY2s6IHRoZSBsb2NrIG9yZGVycyB0aGUgaHdjCiYjNDM7CSAqIGluaXRpYWxpc2F0aW9uIGFib3ZlIGJlZm9yZSB0aGUgcG9pbnRlciBiZWNvbWVzIHZpc2libGUgYW5kCiYjNDM7CSAqIHNlcmlhbGlzZXMgdGhlIHB1Ymxpc2ggYWdhaW5zdCB0aGUgY29udHJvbC1wbGFuZSByZWFkZXJzIGluCiYjNDM7CSAqIG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCksIG1hbmFfbmVlZF9sb2coKSBhbmQgbWFuYV9zZXJ2X3Jlc2V0KCkuCiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2djLSZndDtod2NfbG9jaywgZmxhZ3MpOwomIzQzOwlnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhID0gaHdjOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z2MtJmd0O2h3Y19sb2NrLCBmbGFncyk7CiYjNDM7CiAJLyogbWFuYV9od2NfaW5pdF9xdWV1ZXMoKSBvbmx5IGNyZWF0ZXMgdGhlIHJlcXVpcmVkIGRhdGEgc3RydWN0dXJlcywKIAkgKiBhbmQgZG9lc24mIzM5O3QgdG91Y2ggdGhlIEhXQyBkZXZpY2UuCiAJICovCkBAIC03OTQsOCAmIzQzOzEwNDAsMTMwIEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYykKIAkJZ290byBvdXQ7CiAJfQogCiYjNDM7CS8qIFRoZSBjaGFubmVsIHdhcyBib290c3RyYXBwZWQgYXQgYSBtaW5pbWFsIHF1ZXVlIGRlcHRoLiAgSWYgdGhlCiYjNDM7CSAqIGRldmljZSByZXBvcnRzIGEgaGlnaGVyIG1heGltdW0sIHRlYXIgZG93biBhbmQgcmVidWlsZCB3aXRoCiYjNDM7CSAqIHRoZSBsYXJnZXIgZGVwdGggc28gbW9yZSBIV0MgY29tbWFuZHMgY2FuIGJlIGluIGZsaWdodC4KJiM0MzsJICovCiYjNDM7CWlmIChxX2RlcHRoX21heCAmZ3Q7IEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRIKSB7CiYjNDM7CQkvKiBxX2RlcHRoX21heCBub3cgY2FycmllcyB0aGUgZnVsbCBkZXZpY2UtcmVwb3J0ZWQgdmFsdWUKJiM0MzsJCSAqIChIV0NfSU5JVF9EQVRBX1FVRVVFX0RFUFRIIGlzIDI0LWJpdCkuICBDbGFtcCBpdCB0byB0aGUKJiM0MzsJCSAqIGRlcHRoIHRoZSByZXN0IG9mIHRoZSBkcml2ZXIgc3VwcG9ydHMg4oCUIGNyZWF0ZV9jcSgpIHRha2VzCiYjNDM7CQkgKiBxX2RlcHRoICogMiBhcyBhIHUxNiDigJQgYmVmb3JlIHRoZSBvdmVyZmxvdyBjaGVjayBiZWxvdywgc28KJiM0MzsJCSAqIGFuIG92ZXItbGFyZ2UgYnV0IG90aGVyd2lzZS12YWxpZCBkZXB0aCBpcyByZWR1Y2VkIHRvIHRoZQomIzQzOwkJICogbWF4aW11bSBpbnN0ZWFkIG9mIHdyYXBwaW5nIG9yIGJlaW5nIHJlamVjdGVkLgomIzQzOwkJICovCiYjNDM7CQlpZiAocV9kZXB0aF9tYXggJmd0OyBVMTZfTUFYIC8gMikKJiM0MzsJCQlxX2RlcHRoX21heCA9IFUxNl9NQVggLyAyOwomIzQzOwomIzQzOwkJLyogU2FuaXR5LWNoZWNrIGRldmljZS1yZXBvcnRlZCB2YWx1ZXMgYmVmb3JlIHVzaW5nIHRoZW0KJiM0MzsJCSAqIHRvIHNpemUgRE1BIGFsbG9jYXRpb25zLiAgRW5mb3JjZSBwcm90b2NvbCBtaW5pbXVtcwomIzQzOwkJICogZm9yIG1lc3NhZ2Ugc2l6ZXMgYW5kIGNoZWNrIHRoYXQgcV9kZXB0aCAqIG1heF9tc2dfc2l6ZQomIzQzOwkJICogcGx1cyBhbGlnbm1lbnQgaGVhZHJvb20gZml0cyBpbiB1MzIgKGZvcgomIzQzOwkJICogbWFuYV9od2NfYWxsb2NfZG1hX2J1ZiYjMzk7cyBNQU5BX1BBR0VfQUxJR04pLgomIzQzOwkJICovCiYjNDM7CQlpZiAoIW1heF9yZXFfbXNnX3NpemUgfHwgIW1heF9yZXNwX21zZ19zaXplIHx8CiYjNDM7CQkgICAgbWF4X3JlcV9tc2dfc2l6ZSAmbHQ7IHNpemVvZihzdHJ1Y3QgZ2RtYV9yZXFfaGRyKSB8fAomIzQzOwkJICAgIG1heF9yZXNwX21zZ19zaXplICZsdDsgc2l6ZW9mKHN0cnVjdCBnZG1hX3Jlc3BfaGRyKSB8fAomIzQzOwkJICAgICh1NjQpcV9kZXB0aF9tYXggKiBtYXhfcmVxX21zZ19zaXplICZndDsKJiM0MzsJCQlVMzJfTUFYIC0gTUFOQV9QQUdFX1NJWkUgfHwKJiM0MzsJCSAgICAodTY0KXFfZGVwdGhfbWF4ICogbWF4X3Jlc3BfbXNnX3NpemUgJmd0OwomIzQzOwkJCVUzMl9NQVggLSBNQU5BX1BBR0VfU0laRSkgewomIzQzOwkJCWRldl9lcnIoaHdjLSZndDtkZXYsCiYjNDM7CQkJCSYjMzQ7SFdDOiBpbnZhbGlkIGRpbXMgcT0ldSByZXE9JXUgcmVzcD0ldVxuJiMzNDssCiYjNDM7CQkJCXFfZGVwdGhfbWF4LCBtYXhfcmVxX21zZ19zaXplLAomIzQzOwkJCQltYXhfcmVzcF9tc2dfc2l6ZSk7CiYjNDM7CQkJcV9kZXB0aF9tYXggPSBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSDsKJiM0MzsJCQlnb3RvIHNraXBfcmVpbml0OwomIzQzOwkJfQomIzQzOwomIzQzOwkJZXJyID0gbWFuYV9zbWNfdGVhcmRvd25faHdjKCZhbXA7Z2MtJmd0O3NobV9jaGFubmVsLCBmYWxzZSk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJLyogS2VlcCB1c2luZyB0aGUgYm9vdHN0cmFwLWRlcHRoIGNoYW5uZWwuICovCiYjNDM7CQkJZGV2X2Vycihod2MtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDtGYWlsZWQgdG8gdGVhcmRvd24gSFdDIGZvciByZWluaXQ6ICVkXG4mIzM0OywKJiM0MzsJCQkJZXJyKTsKJiM0MzsJCQlxX2RlcHRoX21heCA9IEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRIOwomIzQzOwkJCWdvdG8gc2tpcF9yZWluaXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQlod2MtJmd0O3NldHVwX2FjdGl2ZSA9IGZhbHNlOwomIzQzOwomIzQzOwkJLyogRGVzdHJveSBxdWV1ZXMgZmlyc3Qg4oCUIG1hbmFfZ2RfZGVzdHJveV9jcSBpbnNpZGUKJiM0MzsJCSAqIHVucHVibGlzaGVzIHRoZSBDUSBmcm9tIGNxX3RhYmxlIHZpYQomIzQzOwkJICogcmN1X2Fzc2lnbl9wb2ludGVyKE5VTEwpICYjNDM7IHN5bmNocm9uaXplX3JjdS4KJiM0MzsJCSAqIE11c3QgaGFwcGVuIHdoaWxlIGNxX3RhYmxlIGlzIHN0aWxsIHZhbGlkLgomIzQzOwkJICovCiYjNDM7CQltYW5hX2h3Y19kZXN0cm95X3F1ZXVlcyhod2MpOwomIzQzOwomIzQzOwkJb2xkX2NxX3RhYmxlID0gcmN1X3JlcGxhY2VfcG9pbnRlcihnYy0mZ3Q7Y3FfdGFibGUsIE5VTEwsIHRydWUpOwomIzQzOwkJc3luY2hyb25pemVfcmN1KCk7CiYjNDM7CQl2ZnJlZShvbGRfY3FfdGFibGUpOwomIzQzOwomIzQzOwkJZXJyID0gbWFuYV9od2NfaW5pdF9xdWV1ZXMoaHdjLCBxX2RlcHRoX21heCwKJiM0MzsJCQkJCSAgIG1heF9yZXFfbXNnX3NpemUsCiYjNDM7CQkJCQkgICBtYXhfcmVzcF9tc2dfc2l6ZSk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmVpbml0IEhXQzogJWRcbiYjMzQ7LCBlcnIpOwomIzQzOwkJCWdvdG8gcmVpbml0X2ZhbGxiYWNrOwomIzQzOwkJfQomIzQzOwomIzQzOwkJZXJyID0gbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoZ2MsICZhbXA7cV9kZXB0aF9tYXgsCiYjNDM7CQkJCQkJICZhbXA7bWF4X3JlcV9tc2dfc2l6ZSwKJiM0MzsJCQkJCQkgJmFtcDttYXhfcmVzcF9tc2dfc2l6ZSk7CiYjNDM7CQlpZiAoZXJyKSB7CiYjNDM7CQkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gcmUtZXN0YWJsaXNoIEhXQzogJWRcbiYjMzQ7LAomIzQzOwkJCQllcnIpOwomIzQzOwkJCS8qIGVzdGFibGlzaF9jaGFubmVsIGRvZXMgaW50ZXJuYWwgdGVhcmRvd24gb24KJiM0MzsJCQkgKiBmYWlsdXJlLiAgSWYgdGVhcmRvd24gc3VjY2VlZGVkIChzZXR1cF9hY3RpdmUKJiM0MzsJCQkgKiBjbGVhcmVkKSwgTVNUIGVudHJpZXMgYXJlIGludmFsaWRhdGVkIGFuZCB3ZQomIzQzOwkJCSAqIGNhbiB0cnkgdGhlIGJvb3RzdHJhcCBmYWxsYmFjay4gIElmIHRlYXJkb3duCiYjNDM7CQkJICogYWxzbyBmYWlsZWQgKHNldHVwX2FjdGl2ZSBzdGlsbCBzZXQpLCBoYXJkd2FyZQomIzQzOwkJCSAqIG1hcHBpbmdzIG1heSBzdGlsbCBiZSBhY3RpdmUg4oCUIHNraXAgZmFsbGJhY2suCiYjNDM7CQkJICovCiYjNDM7CQkJaWYgKGh3Yy0mZ3Q7c2V0dXBfYWN0aXZlKQomIzQzOwkJCQlnb3RvIG91dDsKJiM0MzsJCQlnb3RvIHJlaW5pdF9mYWxsYmFjazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwlnb3RvIHNraXBfcmVpbml0OwomIzQzOwomIzQzO3JlaW5pdF9mYWxsYmFjazoKJiM0MzsJLyogUmVzdG9yZSBib290c3RyYXAtZGVwdGggY2hhbm5lbCBzbyB0aGUgZGV2aWNlIHJlbWFpbnMgZnVuY3Rpb25hbC4KJiM0MzsJICogRnJlZSBjcV90YWJsZSBpZiBpdCB3YXMgYWxsb2NhdGVkIGJ5IGEgcGFydGlhbGx5IHN1Y2Nlc3NmdWwKJiM0MzsJICogZXN0YWJsaXNoIGF0dGVtcHQuCiYjNDM7CSAqLwomIzQzOwlkZXZfd2Fybihod2MtJmd0O2RldiwgJiMzNDtIV0MgcmVpbml0IGZhaWxlZCwgZmFsbGluZyBiYWNrIHRvIGJvb3RzdHJhcCBkZXB0aFxuJiMzNDspOwomIzQzOwomIzQzOwltYW5hX2h3Y19kZXN0cm95X3F1ZXVlcyhod2MpOwomIzQzOwomIzQzOwlvbGRfY3FfdGFibGUgPSByY3VfcmVwbGFjZV9wb2ludGVyKGdjLSZndDtjcV90YWJsZSwgTlVMTCwgdHJ1ZSk7CiYjNDM7CXN5bmNocm9uaXplX3JjdSgpOwomIzQzOwl2ZnJlZShvbGRfY3FfdGFibGUpOwomIzQzOwomIzQzOwllcnIgPSBtYW5hX2h3Y19pbml0X3F1ZXVlcyhod2MsIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRILAomIzQzOwkJCQkgICBIV19DSEFOTkVMX01BWF9SRVFVRVNUX1NJWkUsCiYjNDM7CQkJCSAgIEhXX0NIQU5ORUxfTUFYX1JFU1BPTlNFX1NJWkUpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlkZXZfZXJyKGh3Yy0mZ3Q7ZGV2LCAmIzM0O0ZhaWxlZCB0byByZXN0b3JlIGJvb3RzdHJhcCBIV0M6ICVkXG4mIzM0OywgZXJyKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKGdjLCAmYW1wO3FfZGVwdGhfbWF4LCAmYW1wO21heF9yZXFfbXNnX3NpemUsCiYjNDM7CQkJCQkgJmFtcDttYXhfcmVzcF9tc2dfc2l6ZSk7CiYjNDM7CWlmIChlcnIpIHsKJiM0MzsJCWRldl9lcnIoaHdjLSZndDtkZXYsICYjMzQ7RmFpbGVkIHRvIHJlLWVzdGFibGlzaCBib290c3RyYXAgSFdDOiAlZFxuJiMzNDssCiYjNDM7CQkJZXJyKTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7c2tpcF9yZWluaXQ6CiYjNDM7CiYjNDM7CS8qIE5vIFJDVSBuZWVkZWQ6IHN0aWxsIGluIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsLCB0aGUKJiM0MzsJICogcG9pbnRlciBoYXMgbm90IGJlZW4gcHVibGlzaGVkIHRvIGNvbmN1cnJlbnQgc2VuZGVycyB5ZXQuCiYjNDM7CSAqLwogCWVyciA9IG1hbmFfaHdjX3Rlc3RfY2hhbm5lbChnYy0mZ3Q7aHdjLmRyaXZlcl9kYXRhLAotCQkJCSAgICBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSCwKJiM0MzsJCQkJICAgIGh3Yy0mZ3Q7bnVtX2luZmxpZ2h0X21zZywKIAkJCQkgICAgbWF4X3JlcV9tc2dfc2l6ZSwgbWF4X3Jlc3BfbXNnX3NpemUpOwogCWlmIChlcnIpIHsKIAkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtGYWlsZWQgdG8gdGVzdCBIV0M6ICVkXG4mIzM0OywgZXJyKTsKQEAgLTgxMCwyNyAmIzQzOzExNzgsMTk1IEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYykKIAogdm9pZCBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpCiB7CiYjNDM7CS8qIFRoaXMgaXMgdGhlIG9ubHkgZGVzdHJveSBlbnRyeSBwb2ludC4gIGRyaXZlcl9kYXRhIGlzIHJlYWQKJiM0MzsJICogcGxhaW5seSBoZXJlICh0ZWFyZG93biBpcyBzZXJpYWxpc2VkIGFnYWluc3Qgb3RoZXIgdGVhcmRvd24pOwomIzQzOwkgKiBpdCBpcyBjbGVhcmVkIHVuZGVyIGh3Y19sb2NrIGJlbG93IGJlZm9yZSBod2MgaXMgZnJlZWQuCiYjNDM7CSAqLwogCXN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyA9IGdjLSZndDtod2MuZHJpdmVyX2RhdGE7CiYjNDM7CXN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqb2xkX2NxX3RhYmxlOwomIzQzOwl1bnNpZ25lZCBsb25nIGZsYWdzOwogCiAJaWYgKCFod2MpCiAJCXJldHVybjsKIAotCS8qIGdjLSZndDttYXhfbnVtX2NxcyBpcyBzZXQgaW4gbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKCkuIElmIGl0JiMzOTtzCi0JICogbm9uLXplcm8sIHRoZSBIV0Mgd29ya2VkIGFuZCB3ZSBzaG91bGQgdGVhciBkb3duIHRoZSBIV0MgaGVyZS4KJiM0MzsJLyogUHJldmVudCBuZXcgcmVxdWVzdHMgZnJvbSBzdGFydGluZyBhbmQgd2FrZSBhbnkKJiM0MzsJICogdGhyZWFkcyB3YWl0aW5nIGZvciBhIGZyZWUgbXNnIHNsb3QuICBTZXQgY2hhbm5lbF91cCB1bmRlcgomIzQzOwkgKiB0aGUgYml0bWFwIGxvY2sgc28gZ2V0X21zZ19pbmRleCgpIGNhbm5vdCBhY3F1aXJlIGEgc2xvdAomIzQzOwkgKiBhbmQgaW5jcmVtZW50IGFjdGl2ZV9zZW5kZXJzIGFmdGVyIHRoaXMgcG9pbnQuCiYjNDM7CSAqCiYjNDM7CSAqIElmIGNoYW5uZWxfdXAgaXMgYWxyZWFkeSBmYWxzZSAoZS5nLiBpbml0IGZhaWxlZCBiZWZvcmUKJiM0MzsJICogdGhlIGNoYW5uZWwgd2FzIGVzdGFibGlzaGVkKSwgc2tpcCB0aGUgbG9jayDigJQgaXQgbWF5IG5vdAomIzQzOwkgKiBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgeWV0LCBhbmQgbm8gc2VuZGVycyBjYW4gYmUgYWN0aXZlLgogCSAqLwotCWlmIChnYy0mZ3Q7bWF4X251bV9jcXMgJmd0OyAwKSB7Ci0JCW1hbmFfc21jX3RlYXJkb3duX2h3YygmYW1wO2djLSZndDtzaG1fY2hhbm5lbCwgZmFsc2UpOwotCQlnYy0mZ3Q7bWF4X251bV9jcXMgPSAwOwomIzQzOwlpZiAoaHdjLSZndDtjaGFubmVsX3VwKSB7CiYjNDM7CQlzcGluX2xvY2tfaXJxc2F2ZSgmYW1wO2h3Yy0mZ3Q7aW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7CiYjNDM7CQlod2MtJmd0O2NoYW5uZWxfdXAgPSBmYWxzZTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtod2MtJmd0O2luZmxpZ2h0X21zZ19yZXMubG9jaywgZmxhZ3MpOwomIzQzOwkJd2FrZV91cF9hbGwoJmFtcDtod2MtJmd0O21zZ193YWl0cSk7CiAJfQogCiYjNDM7CS8qIENsZWFyIHRoZSBwb2ludGVyIHVuZGVyIGh3Y19sb2NrIHNvIG5ldyBjYWxsZXJzIGluCiYjNDM7CSAqIG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCkgc2VlIE5VTEwgYW5kIHJldHVybiAtRU5PREVWLiAgVGhlIGxvY2sKJiM0MzsJICogbWFrZXMgdGhlIHJlYWRlcnMmIzM5OyAmIzM0O2xvYWQgZHJpdmVyX2RhdGEgJiM0MzsgYWN0aXZlX3NlbmRlcnMmIzQzOyYjNDM7JiMzNDsKJiM0MzsJICogYXRvbWljIGFnYWluc3QgdGhpcyBzdG9yZSwgc28gb25jZSBpdCByZXR1cm5zIG5vIG5ldyBzZW5kZXIgY2FuCiYjNDM7CSAqIHRha2UgYSByZWZlcmVuY2U7IHRoZSBhY3RpdmVfc2VuZGVycyBkcmFpbiBiZWxvdyB3YWl0cyBvdXQgdGhvc2UKJiM0MzsJICogdGhhdCBhbHJlYWR5IGRpZCwgYmVmb3JlIHRoZWlyIGh3YyBpcyBmcmVlZC4KJiM0MzsJICovCiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Z2MtJmd0O2h3Y19sb2NrLCBmbGFncyk7CiYjNDM7CWdjLSZndDtod2MuZHJpdmVyX2RhdGEgPSBOVUxMOwomIzQzOwlzcGluX3VubG9ja19pcnFyZXN0b3JlKCZhbXA7Z2MtJmd0O2h3Y19sb2NrLCBmbGFncyk7CiYjNDM7CiYjNDM7CS8qIEZvcmNlLWNvbXBsZXRlIGFueSBpbi1mbGlnaHQgc2VuZGVycyBzbyB0aGV5IG9ic2VydmUgLUVOT0RFViwKJiM0MzsJICogcmV0dXJuLCBhbmQgZHJvcCB0aGVpciByZWZlcmVuY2VzLiAgVGhpcyBydW5zIGJlZm9yZSB0aGUgSFdDCiYjNDM7CSAqIGhhcmR3YXJlIHRlYXJkb3duIGJlbG93LCBzbyBhIGxpdmUgaW50ZXJydXB0IG1heSBzdGlsbCBkZWxpdmVyCiYjNDM7CSAqIGEgcmVhbCByZXNwb25zZSB2aWEgaGFuZGxlX3Jlc3AoKSBjb25jdXJyZW50bHkg4oCUIHRoYXQgaXMgc2FmZQomIzQzOwkgKiBiZWNhdXNlIHRoZSBwZXItc2xvdCByZWZjb3VudCBtb2RlbCB0b2xlcmF0ZXMgYSBjb25jdXJyZW50CiYjNDM7CSAqIGNvbXBsZXRlKCkgYW5kIGJvdGggcGF0aHMgKGhhbmRsZV9yZXNwIGFuZCB0aGlzIGxvb3ApIGRyb3AKJiM0MzsJICogdGhlaXIgcmVmcyB3aXRob3V0IGRvdWJsZS1yZWxlYXNpbmcgdGhlIHNsb3QuCiYjNDM7CSAqLwomIzQzOwlpZiAoaHdjLSZndDtjYWxsZXJfY3R4KSB7CiYjNDM7CQlzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDsKJiM0MzsJCWludCBpOwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IGh3Yy0mZ3Q7bnVtX2luZmxpZ2h0X21zZzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAoIXRlc3RfYml0KGksIGh3Yy0mZ3Q7aW5mbGlnaHRfbXNnX3Jlcy5tYXApKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQljdHggPSAmYW1wO2h3Yy0mZ3Q7Y2FsbGVyX2N0eFtpXTsKJiM0MzsKJiM0MzsJCQkvKiBXYWtlIHNlbmRlcnMgYmxvY2tlZCBvbiB3YWl0X2Zvcl9jb21wbGV0aW9uLgomIzQzOwkJCSAqIFNldCBlcnJvciB1bmRlciBsb2NrIHRvIGF2b2lkIHJhY2luZyB3aXRoCiYjNDM7CQkJICogaGFuZGxlX3Jlc3AoKSB3aGljaCB3cml0ZXMgZXJyb3IgdW5kZXIgdGhlCiYjNDM7CQkJICogc2FtZSBsb2NrLiAgVGhlIHNlbmRlciBOVUxMcyBvdXRwdXRfYnVmCiYjNDM7CQkJICogYWZ0ZXIgd2FraW5nIOKAlCBkb2luZyBpdCBoZXJlIHdvdWxkIHJhY2UKJiM0MzsJCQkgKiB3aXRoIGEgc2VuZGVyIHRoYXQgaGFzbiYjMzk7dCBzZXQgb3V0cHV0X2J1ZiB5ZXQuCiYjNDM7CQkJICovCiYjNDM7CQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtjdHgtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCQljdHgtJmd0O2Vycm9yID0gLUVOT0RFVjsKJiM0MzsJCQljb21wbGV0ZSgmYW1wO2N0eC0mZ3Q7Y29tcF9ldmVudCk7CiYjNDM7CQkJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2N0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFdhaXQgZm9yIGFsbCBzZW5kZXIgdGhyZWFkcyB0byBmaW5pc2ggYW5kIGRyb3AgdGhlaXIgcmVmcwomIzQzOwkgKiBiZWZvcmUgdG91Y2hpbmcgdGhlIGhhcmR3YXJlIG9yIGZyZWVpbmcgYW55dGhpbmcuICBEcmFpbmluZwomIzQzOwkgKiBoZXJlIC0tIGFoZWFkIG9mIHRoZSB0ZWFyZG93bi9GTFIgYmxvY2sgYmVsb3cgLS0gZ3VhcmFudGVlcyBubwomIzQzOwkgKiBpbi1mbGlnaHQgc2VuZGVyIGlzIHN0aWxsIHJ1bm5pbmcgd2hlbiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgb24KJiM0MzsJICogYW55IHBhdGgsIGluY2x1ZGluZyB0aGUgRkxSLWZhaWx1cmUgZWFybHkgcmV0dXJuOyBvdGhlcndpc2UgYQomIzQzOwkgKiBzdHJhbmRlZCBzZW5kZXIgd291bGQgZGVyZWZlcmVuY2UgZ2MtJmd0O2h3Y19sb2NrIC8KJiM0MzsJICogZ2MtJmd0O2h3Y19kcmFpbl93YWl0cSBhZnRlciB0aGUgY2FsbGVyIGZyZWVzIGdjLgomIzQzOwkgKiBBZnRlciB0aGlzLCBvbmx5IHNsb3RzIGhlbGQgYnkgdGltZWQtb3V0IHNlbmRlcnMgd2hvc2UKJiM0MzsJICogaGFuZGxlX3Jlc3AoKSBuZXZlciByYW4gcmVtYWluIGluIHRoZSBiaXRtYXAuCiYjNDM7CSAqCiYjNDM7CSAqIGFjdGl2ZV9zZW5kZXJzIGlzIG9ubHkgZXZlciBtb2RpZmllZCB1bmRlciBod2NfbG9jaywgYW5kIHRoZQomIzQzOwkgKiBsYXN0IHNlbmRlciYjMzk7cyB3YWtlX3VwKCkgcnVucyB1bmRlciB0aGF0IGxvY2sgYmVmb3JlIGl0IGlzCiYjNDM7CSAqIHJlbGVhc2VkLiAgRXZhbHVhdGluZyB0aGUgY29uZGl0aW9uIHVuZGVyIGh3Y19sb2NrIHRoZXJlZm9yZQomIzQzOwkgKiBndWFyYW50ZWVzIHRoYXQgb25jZSB3ZSBvYnNlcnZlIDAgdGhlIHdha2luZyBzZW5kZXIgaGFzCiYjNDM7CSAqIGFscmVhZHkgZHJvcHBlZCB0aGUgbG9jayAtLSBpLmUuIGZpbmlzaGVkIHRvdWNoaW5nIGdjIC0tIHNvIGl0CiYjNDM7CSAqIGNhbm5vdCByYWNlIHRoZSBjYWxsZXIgZnJlZWluZyBnYyBhZnRlciB0aGlzIHJldHVybnMuCiYjNDM7CSAqLwomIzQzOwlzcGluX2xvY2tfaXJxKCZhbXA7Z2MtJmd0O2h3Y19sb2NrKTsKJiM0MzsJd2FpdF9ldmVudF9sb2NrX2lycShnYy0mZ3Q7aHdjX2RyYWluX3dhaXRxLAomIzQzOwkJCSAgICBod2MtJmd0O2FjdGl2ZV9zZW5kZXJzID09IDAsIGdjLSZndDtod2NfbG9jayk7CiYjNDM7CXNwaW5fdW5sb2NrX2lycSgmYW1wO2djLSZndDtod2NfbG9jayk7CiYjNDM7CiYjNDM7CS8qIFRlYXIgZG93biB0aGUgSFdDIGlmIHNldHVwX2h3YyBwcmV2aW91c2x5IGFjdGl2YXRlZCBNU1QgZW50cmllcy4KJiM0MzsJICogVGhpcyBpcyB0aGUgZGVmaW5pdGl2ZSBmbGFnIOKAlCB1bmxpa2UgbWF4X251bV9jcXMgd2hpY2ggZGVwZW5kcwomIzQzOwkgKiBvbiB0aGUgaW5pdCBFUUUgYXJyaXZpbmcuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSByZXR1cm4gdmFsdWUgaXMgaW50ZW50aW9uYWxseSBub3QgY2hlY2tlZC4gIFRoaXMgaXMgdGhlCiYjNDM7CSAqIHRlcm1pbmFsIGNsZWFudXAgcGF0aCAoZGV2aWNlIHJlbW92YWwsIHN1c3BlbmQsIG9yIGluaXQKJiM0MzsJICogZmFpbHVyZSkg4oCUIHJlc291cmNlcyBtdXN0IGJlIGZyZWVkIHJlZ2FyZGxlc3MuICBJZiB0ZWFyZG93bgomIzQzOwkgKiBmYWlscywgaGFyZHdhcmUgbWF5IHN0aWxsIGhhdmUgYWN0aXZlIE1TVCBlbnRyaWVzLCBidXQ6CiYjNDM7CSAqCiYjNDM7CSAqICAtIEludGVycnVwdHM6IG1hbmFfaHdjX2Rlc3Ryb3lfY3EoKSBiZWxvdyBjYWxscwomIzQzOwkgKiAgICBtYW5hX2dkX2RlcmVnaXN0ZXJfaXJxKCkgd2hpY2ggcmVtb3ZlcyB0aGUgSFdDIEVRIGZyb20KJiM0MzsJICogICAgdGhlIGludGVycnVwdCBkaXNwYXRjaCBsaXN0IHZpYSBsaXN0X2RlbF9yY3UoKSAmIzQzOwomIzQzOwkgKiAgICBzeW5jaHJvbml6ZV9yY3UoKS4gIEFmdGVyIHRoYXQsIG5vIGludGVycnVwdCBoYW5kbGVyIGNhbgomIzQzOwkgKiAgICBpbnZva2UgaGFuZGxlX3Jlc3AoKSBvciBhY2Nlc3MgQ1EvUlEgYnVmZmVycyDigJQgZXZlbiBpZgomIzQzOwkgKiAgICB0aGUgSVJRIGlzIHNoYXJlZCB3aXRoIGRhdGEgcGF0aCBxdWV1ZXMuCiYjNDM7CSAqCiYjNDM7CSAqICAtIERNQTogbWFuYV9od2NfZGVzdHJveV93cSgpIGZyZWVzIERNQSBidWZmZXJzIHZpYQomIzQzOwkgKiAgICBkbWFfZnJlZV9jb2hlcmVudCgpIHdoaWNoIHVubWFwcyB0aGUgSU9WQSBmcm9tIHRoZQomIzQzOwkgKiAgICBJT01NVS4gIEFueSBzdGFsZSBoYXJkd2FyZSBETUEgdG8gdGhlIG9sZCBhZGRyZXNzCiYjNDM7CSAqICAgIGZhdWx0cyBhdCB0aGUgSU9NTVUsIG5vdCBpbiBrZXJuZWwgbWVtb3J5LgomIzQzOwkgKi8KJiM0MzsJaWYgKGh3Yy0mZ3Q7c2V0dXBfYWN0aXZlKSB7CiYjNDM7CQlpbnQgdGRfZXJyID0gbWFuYV9zbWNfdGVhcmRvd25faHdjKCZhbXA7Z2MtJmd0O3NobV9jaGFubmVsLCBmYWxzZSk7CiYjNDM7CiYjNDM7CQlpZiAodGRfZXJyKSB7CiYjNDM7CQkJZGV2X2VycihnYy0mZ3Q7ZGV2LCAmIzM0O0hXQyB0ZWFyZG93biBmYWlsZWQ6ICVkLCBpc3N1aW5nIEZMUlxuJiMzNDssCiYjNDM7CQkJCXRkX2Vycik7CiYjNDM7CiYjNDM7CQkJLyogT24gc3lzdGVtcyB3aXRob3V0IElPTU1VLCBmcmVlaW5nIERNQSBtZW1vcnkgd2l0aAomIzQzOwkJCSAqIGFjdGl2ZSBoYXJkd2FyZSBNU1QgbWFwcGluZ3Mgcmlza3MgbWVtb3J5IGNvcnJ1cHRpb24uCiYjNDM7CQkJICogSXNzdWUgRkxSIHRvIGZvcmNlLXJlc2V0IHRoZSBkZXZpY2UgYW5kIGludmFsaWRhdGUKJiM0MzsJCQkgKiBhbGwgaGFyZHdhcmUgc3RhdGUgaW5jbHVkaW5nIE1TVCBlbnRyaWVzLgomIzQzOwkJCSAqLwomIzQzOwkJCXRkX2VyciA9IHBjaWVfZmxyKHRvX3BjaV9kZXYoZ2MtJmd0O2RldikpOwomIzQzOwkJCWlmICh0ZF9lcnIpIHsKJiM0MzsJCQkJLyogRGV2aWNlIHdlZGdlZDogdGVhcmRvd24gYW5kIEZMUgomIzQzOwkJCQkgKiBib3RoIGZhaWxlZCwgc28gaGFyZHdhcmUgbWF5IHN0aWxsCiYjNDM7CQkJCSAqIERNQSBpbnRvIG91ciBxdWV1ZSBidWZmZXJzLiAgTGVhawomIzQzOwkJCQkgKiBhbGwgSFdDIERNQSBidWZmZXJzIC0tIGFuZCB0aGUgRVEKJiM0MzsJCQkJICogSVJRIHJlZ2lzdHJhdGlvbiwgd2hvc2Ugc2FmZSByZW1vdmFsCiYjNDM7CQkJCSAqIG5lZWRzIHRob3NlIHF1ZXVlcyAtLSBpbnN0ZWFkIG9mCiYjNDM7CQkJCSAqIGZyZWVpbmcgbWVtb3J5IHRoZSBkZXZpY2UgY2FuIHN0aWxsCiYjNDM7CQkJCSAqIHJlYWNoOyB3aXRob3V0IGFuIElPTU1VIHRoZSBmcmVlZAomIzQzOwkJCQkgKiBwYWdlcyBjb3VsZCBiZSByZXVzZWQgdW5kZXIgbGl2ZQomIzQzOwkJCQkgKiBETUEuCiYjNDM7CQkJCSAqLwomIzQzOwomIzQzOwkJCQlkZXZfd2FybihnYy0mZ3Q7ZGV2LAomIzQzOwkJCQkJICYjMzQ7TGVha2VkIEhXQyBETUEgYnVmZmVycyAoQ1EvUlEvVFhRKSB0byBwcmV2ZW50IG1lbW9yeSBjb3JydXB0aW9uLiBEZXZpY2UgaXMgbm8gbG9uZ2VyIHVzYWJsZS5cbiYjMzQ7KTsKJiM0MzsKJiM0MzsJCQkJLyogRG8gbm90IGNhbGwgZGVzdHJveV9jcS93cSBiZWxvdzsKJiM0MzsJCQkJICogdGhleSB3b3VsZCBkbWFfZnJlZV9jb2hlcmVudCgpLgomIzQzOwkJCQkgKiBMZWF2ZSBod2MvY3EvcnhxL3R4cSBhbGxvY2F0ZWQuCiYjNDM7CQkJCSAqLwomIzQzOwkJCQlyZXR1cm47CiYjNDM7CQkJfQomIzQzOwomIzQzOwkJCWRldl9pbmZvKGdjLSZndDtkZXYsICYjMzQ7RkxSIHN1Y2NlZWRlZCwgaGFyZHdhcmUgc3RhdGUgY2xlYXJlZFxuJiMzNDspOwomIzQzOwkJfQomIzQzOwomIzQzOwkJaHdjLSZndDtzZXR1cF9hY3RpdmUgPSBmYWxzZTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBUZWFyIGRvd24gdGhlIEhXQyBDUSBvYmplY3QgZmlyc3Qg4oCUIG1hbmFfaHdjX2Rlc3Ryb3lfY3EoKQomIzQzOwkgKiBib3RoIHVucHVibGlzaGVzIHRoZSBDUSBmcm9tIGNxX3RhYmxlICgmIzQzO3N5bmNocm9uaXplX3JjdSkgYW5kCiYjNDM7CSAqIGRlcmVnaXN0ZXJzIHRoZSBIV0MgRVEgZnJvbSB0aGUgaW50ZXJydXB0IGhhbmRsZXImIzM5O3MgUkNVIGxpc3QKJiM0MzsJICogKHZpYSBtYW5hX2dkX2RlcmVnaXN0ZXJfaXJxICYjNDM7IHN5bmNocm9uaXplX3JjdSksIGd1YXJhbnRlZWluZwomIzQzOwkgKiBubyBpbnRlcnJ1cHQgaGFuZGxlciBjYW4gYWNjZXNzIFJRL1RYUSBidWZmZXJzIGFmdGVyIHRoaXMKJiM0MzsJICogcG9pbnQuICBUaGUgYWN0aXZlX3NlbmRlcnMgZHJhaW4gYWJvdmUgZW5zdXJlcyBubyBzZW5kZXIgaXMKJiM0MzsJICogYWNjZXNzaW5nIHRoZSBDUSB2aWEgdHhxLSZndDtod2NfY3Egd2hlbiBpdCBpcyBkZXN0cm95ZWQuICBUaGVuCiYjNDM7CSAqIGRlc3Ryb3kgVFhRIGFuZCBSUSBzYWZlbHkuCiYjNDM7CSAqLwomIzQzOwlpZiAoaHdjLSZndDtjcSkKJiM0MzsJCW1hbmFfaHdjX2Rlc3Ryb3lfY3EoaHdjLSZndDtnZG1hX2Rldi0mZ3Q7Z2RtYV9jb250ZXh0LCBod2MtJmd0O2NxKTsKJiM0MzsKIAlpZiAoaHdjLSZndDt0eHEpCiAJCW1hbmFfaHdjX2Rlc3Ryb3lfd3EoaHdjLCBod2MtJmd0O3R4cSk7CiAKIAlpZiAoaHdjLSZndDtyeHEpCiAJCW1hbmFfaHdjX2Rlc3Ryb3lfd3EoaHdjLCBod2MtJmd0O3J4cSk7CiAKLQlpZiAoaHdjLSZndDtjcSkKLQkJbWFuYV9od2NfZGVzdHJveV9jcShod2MtJmd0O2dkbWFfZGV2LSZndDtnZG1hX2NvbnRleHQsIGh3Yy0mZ3Q7Y3EpOwomIzQzOwkvKiBSZWxlYXNlIGFueSBzbG90cyBzdGlsbCBoZWxkIOKAlCB0aGVzZSBiZWxvbmcgdG8gdGltZWQtb3V0CiYjNDM7CSAqIHNlbmRlcnMgd2hlcmUgaGFuZGxlX3Jlc3AoKSBuZXZlciByYW4gKHJlZmNvdW50ID0gMSB3aXRoCiYjNDM7CSAqIGhhbmRsZV9yZXNwJiMzOTtzIHJlZiBzdGlsbCBvdXRzdGFuZGluZykuCiYjNDM7CSAqLwomIzQzOwlpZiAoaHdjLSZndDtjYWxsZXJfY3R4KSB7CiYjNDM7CQlzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDsKJiM0MzsJCWludCBpOwomIzQzOwomIzQzOwkJZm9yIChpID0gMDsgaSAmbHQ7IGh3Yy0mZ3Q7bnVtX2luZmxpZ2h0X21zZzsgaSYjNDM7JiM0MzspIHsKJiM0MzsJCQlpZiAoIXRlc3RfYml0KGksIGh3Yy0mZ3Q7aW5mbGlnaHRfbXNnX3Jlcy5tYXApKQomIzQzOwkJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCQljdHggPSAmYW1wO2h3Yy0mZ3Q7Y2FsbGVyX2N0eFtpXTsKJiM0MzsJCQlod2NfY3R4X3B1dChod2MsIGN0eCk7CiYjNDM7CQl9CiYjNDM7CX0KIAogCWtmcmVlKGh3Yy0mZ3Q7Y2FsbGVyX2N0eCk7CiAJaHdjLSZndDtjYWxsZXJfY3R4ID0gTlVMTDsKQEAgLTg0NSwxMSAmIzQzOzEzODEsMTEgQEAgdm9pZCBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpCiAJaHdjLSZndDtod2NfdGltZW91dCA9IDA7CiAKIAlrZnJlZShod2MpOwotCWdjLSZndDtod2MuZHJpdmVyX2RhdGEgPSBOVUxMOwogCWdjLSZndDtod2MuZ2RtYV9jb250ZXh0ID0gTlVMTDsKIAotCXZmcmVlKGdjLSZndDtjcV90YWJsZSk7Ci0JZ2MtJmd0O2NxX3RhYmxlID0gTlVMTDsKJiM0MzsJb2xkX2NxX3RhYmxlID0gcmN1X3JlcGxhY2VfcG9pbnRlcihnYy0mZ3Q7Y3FfdGFibGUsIE5VTEwsIHRydWUpOwomIzQzOwlzeW5jaHJvbml6ZV9yY3UoKTsKJiM0MzsJdmZyZWUob2xkX2NxX3RhYmxlKTsKIH0KIAogaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLApAQCAtODYwLDEzICYjNDM7MTM5NiwxNyBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sCiAJc3RydWN0IGh3Y193cSAqdHhxID0gaHdjLSZndDt0eHE7CiAJc3RydWN0IGdkbWFfcmVxX2hkciAqcmVxX21zZzsKIAlzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDsKJiM0MzsJdW5zaWduZWQgbG9uZyBmbGFnczsKIAl1MzIgZGVzdF92cmNxID0gMDsKIAl1MzIgZGVzdF92cnEgPSAwOwogCXUzMiBjb21tYW5kOwomIzQzOwl1MzIgc3RhdHVzOwogCXUxNiBtc2dfaWQ7CiAJaW50IGVycjsKIAotCW1hbmFfaHdjX2dldF9tc2dfaW5kZXgoaHdjLCAmYW1wO21zZ19pZCk7CiYjNDM7CWVyciA9IG1hbmFfaHdjX2dldF9tc2dfaW5kZXgoaHdjLCAmYW1wO21zZ19pZCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlyZXR1cm4gZXJyOwogCiAJdHhfd3IgPSAmYW1wO3R4cS0mZ3Q7bXNnX2J1Zi0mZ3Q7cmVxc1ttc2dfaWRdOwogCkBAIC04NzgsOCAmIzQzOzE0MTgsMTEgQEAgaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLAogCX0KIAogCWN0eCA9IGh3Yy0mZ3Q7Y2FsbGVyX2N0eCAmIzQzOyBtc2dfaWQ7CiYjNDM7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Y3R4LSZndDtsb2NrLCBmbGFncyk7CiAJY3R4LSZndDtvdXRwdXRfYnVmID0gcmVzcDsKIAljdHgtJmd0O291dHB1dF9idWZsZW4gPSByZXNwX2xlbjsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2N0eC0mZ3Q7bG9jaywgZmxhZ3MpOwogCiAJcmVxX21zZyA9IChzdHJ1Y3QgZ2RtYV9yZXFfaGRyICopdHhfd3ItJmd0O2J1Zl92YTsKIAlpZiAocmVxKQpAQCAtODk1LDggJiM0MzsxNDM4LDE0IEBAIGludCBtYW5hX2h3Y19zZW5kX3JlcXVlc3Qoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVxX2xlbiwKIAkJZGVzdF92cmNxID0gaHdjLSZndDtwZl9kZXN0X3ZyY3FfaWQ7CiAJfQogCiYjNDM7CS8qIFRha2UgaGFuZGxlX3Jlc3AmIzM5O3MgcmVmIGJlZm9yZSBwb3N0aW5nIOKAlCBoYXJkd2FyZSBjYW4gcmVzcG9uZAomIzQzOwkgKiBpbW1lZGlhdGVseSBhZnRlciB0aGUgZG9vcmJlbGwgcmluZy4KJiM0MzsJICovCiYjNDM7CXJlZmNvdW50X2luYygmYW1wO2N0eC0mZ3Q7cmVmY250KTsKJiM0MzsKIAllcnIgPSBtYW5hX2h3Y19wb3N0X3R4X3dxZSh0eHEsIHR4X3dyLCBkZXN0X3ZycSwgZGVzdF92cmNxLCBmYWxzZSk7CiAJaWYgKGVycikgewomIzQzOwkJcmVmY291bnRfZGVjKCZhbXA7Y3R4LSZndDtyZWZjbnQpOwogCQlkZXZfZXJyKGh3Yy0mZ3Q7ZGV2LCAmIzM0O0hXQzogRmFpbGVkIHRvIHBvc3Qgc2VuZCBXUUU6ICVkXG4mIzM0OywgZXJyKTsKIAkJZ290byBvdXQ7CiAJfQpAQCAtOTA3LDMxICYjNDM7MTQ1Niw4NiBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sCiAJCQlkZXZfZXJyKGh3Yy0mZ3Q7ZGV2LCAmIzM0O0NvbW1hbmQgMHgleCB0aW1lZCBvdXQ6ICV1IG1zXG4mIzM0OywKIAkJCQljb21tYW5kLCBod2MtJmd0O2h3Y190aW1lb3V0KTsKIAotCQkvKiBSZWR1Y2UgZnVydGhlciB3YWl0aW5nIGlmIEhXQyBubyByZXNwb25zZSAqLwomIzQzOwkJLyogTlVMTCBvdXQgb3V0cHV0X2J1ZiBzbyBhIGxhdGUgaGFuZGxlX3Jlc3AoKSB3b24mIzM5O3Qgd3JpdGUKJiM0MzsJCSAqIGludG8gdGhlIGNhbGxlciYjMzk7cyBidWZmZXIgYWZ0ZXIgdGhlIHNlbmRlciByZXR1cm5zLCB0aGVuCiYjNDM7CQkgKiBjaGVjayB3aGV0aGVyIGhhbmRsZV9yZXNwKCkgYWxyZWFkeSBkZWxpdmVyZWQgYSB2YWxpZAomIzQzOwkJICogcmVzcG9uc2UgYmV0d2VlbiB0aGUgdGltZW91dCBmaXJpbmcgYW5kIHRoaXMgbG9jawomIzQzOwkJICogYWNxdWlzaXRpb24g4oCUIGN0eC0mZ3Q7ZXJyb3IgIT0gLUVJTlBST0dSRVNTIG1lYW5zIGl0IHJhbi4KJiM0MzsJCSAqLwomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtjdHgtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJCWN0eC0mZ3Q7b3V0cHV0X2J1ZiA9IE5VTEw7CiYjNDM7CQllcnIgPSBjdHgtJmd0O2Vycm9yOwomIzQzOwkJc3RhdHVzID0gY3R4LSZndDtzdGF0dXNfY29kZTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjdHgtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsKJiM0MzsJCWlmIChlcnIgIT0gLUVJTlBST0dSRVNTKSB7CiYjNDM7CQkJLyogaGFuZGxlX3Jlc3AoKSBkZWxpdmVyZWQgYSB2YWxpZCByZXNwb25zZSBqdXN0IGFmdGVyCiYjNDM7CQkJICogdGhlIHRpbWVvdXQgZmlyZWQuICBUaGUgaGFyZHdhcmUgaXMgYWxpdmUsIHNvIHVzZQomIzQzOwkJCSAqIHRoZSByZXNwb25zZSBhbmQgbGVhdmUgdGhlIGNoYW5uZWwgdXNhYmxlOyBkbyBub3QKJiM0MzsJCQkgKiBsYXRjaCBod2NfdGltZWRfb3V0IG9yIGRlZ3JhZGUgaHdjX3RpbWVvdXQgZm9yIHdoYXQKJiM0MzsJCQkgKiB0dXJuZWQgb3V0IHRvIGJlIGEgdHJhbnNpZW50IHJhY2UuCiYjNDM7CQkJICovCiYjNDM7CQkJaHdjX2N0eF9wdXQoaHdjLCBjdHgpOwomIzQzOwkJCWdvdG8gY2hlY2tfc3RhdHVzOwomIzQzOwkJfQomIzQzOwomIzQzOwkJLyogR2VudWluZSB0aW1lb3V0OiBubyByZXNwb25zZSBhcnJpdmVkLiAgUmVkdWNlIGZ1cnRoZXIKJiM0MzsJCSAqIHdhaXRpbmcsIGFuZCBtYXJrIHRoZSBjaGFubmVsIHRpbWVkIG91dCB1bmRlciB0aGUgYml0bWFwCiYjNDM7CQkgKiBsb2NrIHNvIGdldF9tc2dfaW5kZXgoKSBjYW5ub3QgYWNxdWlyZSBuZXcgc2xvdHMgYWZ0ZXIgdGhpcy4KJiM0MzsJCSAqLwogCQlpZiAoaHdjLSZndDtod2NfdGltZW91dCAmZ3Q7IDEpCiAJCQlod2MtJmd0O2h3Y190aW1lb3V0ID0gMTsKIAomIzQzOwkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtod2MtJmd0O2luZmxpZ2h0X21zZ19yZXMubG9jaywgZmxhZ3MpOwomIzQzOwkJaHdjLSZndDtod2NfdGltZWRfb3V0ID0gdHJ1ZTsKJiM0MzsJCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtod2MtJmd0O2luZmxpZ2h0X21zZ19yZXMubG9jaywgZmxhZ3MpOwomIzQzOwkJd2FrZV91cF9hbGwoJmFtcDtod2MtJmd0O21zZ193YWl0cSk7CiYjNDM7CiAJCWVyciA9IC1FVElNRURPVVQ7Ci0JCWdvdG8gb3V0OwomIzQzOwkJaHdjX2N0eF9wdXQoaHdjLCBjdHgpOwomIzQzOwkJZ290byBkb25lOwogCX0KIAotCWlmIChjdHgtJmd0O2Vycm9yKSB7Ci0JCWVyciA9IGN0eC0mZ3Q7ZXJyb3I7Ci0JCWdvdG8gb3V0OwotCX0KJiM0MzsJLyogTlVMTCBvdXRwdXRfYnVmIHNvIGEgbGF0ZSBoYW5kbGVfcmVzcCgpIHdvbiYjMzk7dCBtZW1jcHkgaW50bwomIzQzOwkgKiB0aGUgY2FsbGVyJiMzOTtzIGJ1ZmZlciBhZnRlciB0aGUgc2VuZGVyIGV4aXRzLiAgUmVhZCBlcnJvciBhbmQKJiM0MzsJICogc3RhdHVzX2NvZGUgdW5kZXIgdGhlIHNhbWUgbG9jayDigJQgYWZ0ZXIgaHdjX2N0eF9wdXQgdGhlIHNsb3QKJiM0MzsJICogbWF5IGJlIHJldXNlZCBhbmQgdGhlc2UgZmllbGRzIG92ZXJ3cml0dGVuLgomIzQzOwkgKi8KJiM0MzsJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtjdHgtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJY3R4LSZndDtvdXRwdXRfYnVmID0gTlVMTDsKJiM0MzsJZXJyID0gY3R4LSZndDtlcnJvcjsKJiM0MzsJc3RhdHVzID0gY3R4LSZndDtzdGF0dXNfY29kZTsKJiM0MzsJc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmYW1wO2N0eC0mZ3Q7bG9jaywgZmxhZ3MpOwomIzQzOwlod2NfY3R4X3B1dChod2MsIGN0eCk7CiYjNDM7CiYjNDM7Y2hlY2tfc3RhdHVzOgomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBkb25lOwogCi0JaWYgKGN0eC0mZ3Q7c3RhdHVzX2NvZGUgJmFtcDsmYW1wOyBjdHgtJmd0O3N0YXR1c19jb2RlICE9IEdETUFfU1RBVFVTX01PUkVfRU5UUklFUykgewotCQlpZiAoY3R4LSZndDtzdGF0dXNfY29kZSA9PSBHRE1BX1NUQVRVU19DTURfVU5TVVBQT1JURUQpIHsKJiM0MzsJaWYgKHN0YXR1cyAmYW1wOyZhbXA7IHN0YXR1cyAhPSBHRE1BX1NUQVRVU19NT1JFX0VOVFJJRVMpIHsKJiM0MzsJCWlmIChzdGF0dXMgPT0gR0RNQV9TVEFUVVNfQ01EX1VOU1VQUE9SVEVEKSB7CiAJCQllcnIgPSAtRU9QTk9UU1VQUDsKLQkJCWdvdG8gb3V0OwomIzQzOwkJCWdvdG8gZG9uZTsKIAkJfQomIzQzOwogCQlpZiAoY29tbWFuZCAhPSBNQU5BX1FVRVJZX1BIWV9TVEFUKQogCQkJZGV2X2Vycihod2MtJmd0O2RldiwgJiMzNDtDb21tYW5kIDB4JXggZmFpbGVkIHdpdGggc3RhdHVzOiAweCV4XG4mIzM0OywKLQkJCQljb21tYW5kLCBjdHgtJmd0O3N0YXR1c19jb2RlKTsKJiM0MzsJCQkJY29tbWFuZCwgc3RhdHVzKTsKIAkJZXJyID0gLUVQUk9UTzsKLQkJZ290byBvdXQ7CiYjNDM7CQlnb3RvIGRvbmU7CiAJfQomIzQzOwomIzQzOwllcnIgPSAwOwomIzQzOwlnb3RvIGRvbmU7CiBvdXQ6Ci0JbWFuYV9od2NfcHV0X21zZ19pbmRleChod2MsIG1zZ19pZCk7CiYjNDM7CS8qIFByZS1wb3N0IGVycm9yIHBhdGhzOiBubyBXUUUgd2FzIHN1Ym1pdHRlZCBzbyBoYW5kbGVfcmVzcCgpCiYjNDM7CSAqIGNhbm5vdCByYWNlIGhlcmUuICByZWZjb3VudCBpcyAxIChubyBzZWNvbmQgcmVmIHRha2VuKS4KJiM0MzsJICovCiYjNDM7CWN0eCA9IGh3Yy0mZ3Q7Y2FsbGVyX2N0eCAmIzQzOyBtc2dfaWQ7CiYjNDM7CXNwaW5fbG9ja19pcnFzYXZlKCZhbXA7Y3R4LSZndDtsb2NrLCBmbGFncyk7CiYjNDM7CWN0eC0mZ3Q7b3V0cHV0X2J1ZiA9IE5VTEw7CiYjNDM7CXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJmFtcDtjdHgtJmd0O2xvY2ssIGZsYWdzKTsKJiM0MzsJaHdjX2N0eF9wdXQoaHdjLCBjdHgpOwomIzQzO2RvbmU6CiAJcmV0dXJuIGVycjsKIH0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYwppbmRleCBhOGMzMjliZGJhY2Y4My4uNTUwODc0NjU5MGU3Y2QgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmMKQEAgLTI2NDgsNiAmIzQzOzI2NDgsNyBAQCBzdGF0aWMgaW50IG1hbmFfY3JlYXRlX3R4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYywKIAlzdHJ1Y3QgbWFuYV9vYmpfc3BlYyBjcV9zcGVjOwogCXN0cnVjdCBnZG1hX3F1ZXVlX3NwZWMgc3BlYzsKIAlzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYzsKJiM0MzsJc3RydWN0IGdkbWFfcXVldWUgX19yY3UgKipjcV90YWJsZTsKIAlzdHJ1Y3QgbWFuYV90eHEgKnR4cTsKIAlzdHJ1Y3QgbWFuYV9jcSAqY3E7CiAJdTMyIHR4cV9zaXplOwpAQCAtMjc1MywxMiAmIzQzOzI3NTQsMTggQEAgc3RhdGljIGludCBtYW5hX2NyZWF0ZV90eHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsCiAKIAkJY3EtJmd0O2dkbWFfaWQgPSBjcS0mZ3Q7Z2RtYV9jcS0mZ3Q7aWQ7CiAKLQkJaWYgKFdBUk5fT04oY3EtJmd0O2dkbWFfaWQgJmd0Oz0gZ2MtJmd0O21heF9udW1fY3FzKSkgewomIzQzOwkJLyogTm8gcmN1X3JlYWRfbG9jaygpOiBtYW5hX2NyZWF0ZV90eHEgcnVucyB1bmRlciBSVE5MIGR1cmluZwomIzQzOwkJICogbmV0ZGV2IGJyaW5nLXVwLCBpbnNpZGUgdGhlIG5ldGRldiBsaWZldGltZSB0aGF0CiYjNDM7CQkgKiBtYW5hX3JlbW92ZSgpIGRyYWlucyBiZWZvcmUgdGhlIGJhc2UgY3FfdGFibGUgY2FuIGJlIGZyZWVkLgomIzQzOwkJICogU2VlIGdkbWFfY29udGV4dDo6Y3FfdGFibGUgaW4gZ2RtYS5oIGZvciB3aHkgJiMzNDt0cnVlJiMzNDsgaXMgc291bmQuCiYjNDM7CQkgKi8KJiM0MzsJCWNxX3RhYmxlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnYy0mZ3Q7Y3FfdGFibGUsIHRydWUpOwomIzQzOwkJaWYgKFdBUk5fT04oIWNxX3RhYmxlIHx8IGNxLSZndDtnZG1hX2lkICZndDs9IGdjLSZndDttYXhfbnVtX2NxcykpIHsKIAkJCWVyciA9IC1FSU5WQUw7CiAJCQlnb3RvIG91dDsKIAkJfQogCi0JCWdjLSZndDtjcV90YWJsZVtjcS0mZ3Q7Z2RtYV9pZF0gPSBjcS0mZ3Q7Z2RtYV9jcTsKJiM0MzsJCXJjdV9hc3NpZ25fcG9pbnRlcihjcV90YWJsZVtjcS0mZ3Q7Z2RtYV9pZF0sIGNxLSZndDtnZG1hX2NxKTsKIAogCQltYW5hX2NyZWF0ZV90eHFfZGVidWdmcyhhcGMsIGkpOwogCkBAIC0yOTg2LDYgJiM0MzsyOTkzLDcgQEAgc3RhdGljIHN0cnVjdCBtYW5hX3J4cSAqbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLAogCXN0cnVjdCBnZG1hX3F1ZXVlX3NwZWMgc3BlYzsKIAlzdHJ1Y3QgbWFuYV9jcSAqY3EgPSBOVUxMOwogCXN0cnVjdCBnZG1hX2NvbnRleHQgKmdjOwomIzQzOwlzdHJ1Y3QgZ2RtYV9xdWV1ZSBfX3JjdSAqKmNxX3RhYmxlOwogCXUzMiBjcV9zaXplLCBycV9zaXplOwogCXN0cnVjdCBtYW5hX3J4cSAqcnhxOwogCWludCBlcnI7CkBAIC0zMDc1LDEyICYjNDM7MzA4MywxOCBAQCBzdGF0aWMgc3RydWN0IG1hbmFfcnhxICptYW5hX2NyZWF0ZV9yeHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsCiAJaWYgKGVycikKIAkJZ290byBvdXQ7CiAKLQlpZiAoV0FSTl9PTihjcS0mZ3Q7Z2RtYV9pZCAmZ3Q7PSBnYy0mZ3Q7bWF4X251bV9jcXMpKSB7CiYjNDM7CS8qIE5vIHJjdV9yZWFkX2xvY2soKTogbWFuYV9jcmVhdGVfcnhxIHJ1bnMgdW5kZXIgUlROTCBkdXJpbmcgbmV0ZGV2CiYjNDM7CSAqIGJyaW5nLXVwLCBpbnNpZGUgdGhlIG5ldGRldiBsaWZldGltZSB0aGF0IG1hbmFfcmVtb3ZlKCkgZHJhaW5zCiYjNDM7CSAqIGJlZm9yZSB0aGUgYmFzZSBjcV90YWJsZSBjYW4gYmUgZnJlZWQuICBTZWUgZ2RtYV9jb250ZXh0OjpjcV90YWJsZQomIzQzOwkgKiBpbiBnZG1hLmggZm9yIHdoeSAmIzM0O3RydWUmIzM0OyBpcyBzb3VuZC4KJiM0MzsJICovCiYjNDM7CWNxX3RhYmxlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnYy0mZ3Q7Y3FfdGFibGUsIHRydWUpOwomIzQzOwlpZiAoV0FSTl9PTighY3FfdGFibGUgfHwgY3EtJmd0O2dkbWFfaWQgJmd0Oz0gZ2MtJmd0O21heF9udW1fY3FzKSkgewogCQllcnIgPSAtRUlOVkFMOwogCQlnb3RvIG91dDsKIAl9CiAKLQlnYy0mZ3Q7Y3FfdGFibGVbY3EtJmd0O2dkbWFfaWRdID0gY3EtJmd0O2dkbWFfY3E7CiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihjcV90YWJsZVtjcS0mZ3Q7Z2RtYV9pZF0sIGNxLSZndDtnZG1hX2NxKTsKIAogCW5ldGlmX25hcGlfYWRkX3dlaWdodF9sb2NrZWQobmRldiwgJmFtcDtjcS0mZ3Q7bmFwaSwgbWFuYV9wb2xsLCAxKTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmggYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaAppbmRleCA4NTI5Y2VmMGQ3YzQ1Mi4uYTRlYWM2ZjdjMzY2MDkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oCkBAIC00MjgsOSAmIzQzOzQyOCwzNCBAQCBzdHJ1Y3QgZ2RtYV9jb250ZXh0IHsKIAkvKiBMMiBNVFUgKi8KIAl1MTYgYWRhcHRlcl9tdHU7CiAKLQkvKiBUaGlzIG1hcHMgYSBDUSBpbmRleCB0byB0aGUgcXVldWUgc3RydWN0dXJlLiAqLwomIzQzOwkvKiBTaXplIG9mIGNxX3RhYmxlLCBpLmUuIHRoZSBsYXJnZXN0IHZhbGlkIENRIGluZGV4ICYjNDM7IDEuICBTZXQgb25jZQomIzQzOwkgKiB3aGVuIGNxX3RhYmxlIGlzIGFsbG9jYXRlZCBhbmQgdHJlYXRlZCBhcyBpbW11dGFibGUgZm9yIHRoZQomIzQzOwkgKiB0YWJsZSYjMzk7cyBsaWZldGltZSAoYSBib3VuZCBvbmx5KSAtLSBpdCBpcyBuZXZlciByZXNldCBvbiB0ZWFyZG93bi4KJiM0MzsJICogY3FfdGFibGUgPT0gTlVMTCBpcyB0aGUgc29sZSAmIzM0O3RhYmxlIHRvcm4gZG93biYjMzQ7IHNpZ25hbCwgc28gZXZlcnkKJiM0MzsJICogY3FfdGFibGVbaWRdIGFjY2VzcyBtdXN0IGd1YXJkIHdpdGggYm90aCAhY3FfdGFibGUgKGdvbmUpIGFuZAomIzQzOwkgKiBpZCAmZ3Q7PSBtYXhfbnVtX2NxcyAob3V0IG9mIGJvdW5kcykuCiYjNDM7CSAqLwogCXVuc2lnbmVkIGludAkJbWF4X251bV9jcXM7Ci0Jc3RydWN0IGdkbWFfcXVldWUJKipjcV90YWJsZTsKJiM0MzsJLyogQm90aCB0aGUgYmFzZSBwb2ludGVyIGFuZCBlYWNoIGVudHJ5IGFyZSBSQ1UtbWFuYWdlZC4gIFRoZSBmYXN0CiYjNDM7CSAqIHBhdGggKG1hbmFfZ2RfcHJvY2Vzc19lcWUpIHJlYWRzIHRoZSBiYXNlIHZpYSByY3VfZGVyZWZlcmVuY2UoKQomIzQzOwkgKiB1bmRlciByY3VfcmVhZF9sb2NrKCksIHNvIHRoZSB0YWJsZSBpcyBmcmVlZCB3aXRoCiYjNDM7CSAqIHJjdV9hc3NpZ25fcG9pbnRlcihOVUxMKSAmIzQzOyBzeW5jaHJvbml6ZV9yY3UoKSBhbmQgYW4gaW4tZmxpZ2h0CiYjNDM7CSAqIHJlYWRlciBjYW4gbmV2ZXIgb2JzZXJ2ZSBmcmVlZCBtZW1vcnkuCiYjNDM7CSAqCiYjNDM7CSAqIFRoZSBzbG93IHBhdGhzIC0tIG1hbmFfZ2RfZGVzdHJveV9jcSgpIGFuZCB0aGUgQ1EgaW5zdGFsbC9yZW1vdmUKJiM0MzsJICogY2FsbGVycyAobWFuYV9jcmVhdGVfdHhxL19yeHEsIG1hbmFfaWJfaW5zdGFsbC9yZW1vdmVfY3FfY2IpIC0tCiYjNDM7CSAqIGluc3RlYWQgcmVhZCB0aGUgYmFzZSB3aXRoIHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3FfdGFibGUsCiYjNDM7CSAqIHRydWUpLiAgVGhlIGJhcmUgJiMzNDt0cnVlJiMzNDsgaXMganVzdGlmaWVkIGJ5IHRlYXJkb3duIG9yZGVyaW5nLCBub3QgYnkKJiM0MzsJICogYSBsb2NrOiB0aGUgYmFzZSB0YWJsZSBpcyByZXBsYWNlZCYjNDM7ZnJlZWQgb25seSBieQomIzQzOwkgKiBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoKSAoYW5kIHRoZSBjcmVhdGUtdGltZSByZWluaXQpLCBhbmQgZXZlcnkKJiM0MzsJICogdGVhcmRvd24gcGF0aCBmaXJzdCBydW5zIG1hbmFfcmVtb3ZlKCkgJiM0MzsgbWFuYV9yZG1hX3JlbW92ZSgpLCB3aGljaAomIzQzOwkgKiBzeW5jaHJvbm91c2x5IGRyYWluIHRoZSBuZXRkZXYgYW5kIHRoZSBJQiBkZXZpY2UKJiM0MzsJICogKHVucmVnaXN0ZXJfbmV0ZGV2aWNlIC8gaWJfdW5yZWdpc3Rlcl9kZXZpY2UpIHRoYXQgYm91bmQgYWxsCiYjNDM7CSAqIGluc3RhbGwvcmVtb3ZlIGNhbGxlcnM7IHRoZSByZWluaXQgY2FzZSBydW5zIGJlZm9yZSBlaXRoZXIKJiM0MzsJICogY29uc3VtZXIgaXMgcHJvYmVkLiAgU28gbm8gc2xvdy1wYXRoIGNhbGxlciBjYW4gcnVuIHdoaWxlIHRoZSBiYXNlCiYjNDM7CSAqIHRhYmxlIGlzIGJlaW5nIGZyZWVkLgomIzQzOwkgKi8KJiM0MzsJc3RydWN0IGdkbWFfcXVldWUJX19yY3UgKiBfX3JjdSAqY3FfdGFibGU7CiAKIAkvKiBQcm90ZWN0IGVxX3Rlc3RfZXZlbnQgYW5kIHRlc3RfZXZlbnRfZXFfaWQgICovCiAJc3RydWN0IG11dGV4CQllcV90ZXN0X2V2ZW50X211dGV4OwpAQCAtNDU2LDYgJiM0Mzs0ODEsMjEgQEAgc3RydWN0IGdkbWFfY29udGV4dCB7CiAJLyogSGFyZHdhcmUgY29tbXVuaWNhdGlvbiBjaGFubmVsIChIV0MpICovCiAJc3RydWN0IGdkbWFfZGV2CQlod2M7CiAKJiM0MzsJLyogZGVzdHJveV9jaGFubmVsKCkgd2FpdHMgaGVyZSBmb3IgYWxsIEhXQyBzZW5kZXJzIHRvIGV4aXQuCiYjNDM7CSAqIExpdmVzIG9uIGdjIChub3QgaHdjKSBzbyB3YWtlX3VwKCkgYWZ0ZXIgdGhlIGxhc3Qgc2VuZGVyJiMzOTtzCiYjNDM7CSAqIGF0b21pY19kZWMgZG9lc24mIzM5O3QgZGVyZWZlcmVuY2UgZnJlZWQgaHdjIG1lbW9yeS4KJiM0MzsJICovCiYjNDM7CXdhaXRfcXVldWVfaGVhZF90CWh3Y19kcmFpbl93YWl0cTsKJiM0MzsKJiM0MzsJLyogU2VyaWFsaXplcyBod2MuZHJpdmVyX2RhdGEgKHRoZSBod19jaGFubmVsX2NvbnRleHQgcG9pbnRlcikKJiM0MzsJICogYmV0d2VlbiB0aGUgY29udHJvbC1wbGFuZSByZWFkZXJzIGluIG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCksCiYjNDM7CSAqIG1hbmFfbmVlZF9sb2coKSBhbmQgbWFuYV9zZXJ2X3Jlc2V0KCkgYW5kIHRoZSBwdWJsaXNoL2NsZWFyIGluCiYjNDM7CSAqIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKCkvbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKCkuICBBbGwgdXNlcnMKJiM0MzsJICogYXJlIGNvbnRyb2wtcGxhbmUgKEhXQyBjb21tYW5kcyBzbGVlcDsgcmVzZXQgcnVucyBvbiBhIHdvcmtxdWV1ZSksCiYjNDM7CSAqIHNvIGEgcGxhaW4gc3BpbmxvY2sgLS0gbm90IFJDVSAtLSBpcyBzdWZmaWNpZW50LgomIzQzOwkgKi8KJiM0MzsJc3BpbmxvY2tfdAkJaHdjX2xvY2s7CiYjNDM7CiAJLyogQXp1cmUgbmV0d29yayBhZGFwdGVyICovCiAJc3RydWN0IGdkbWFfZGV2CQltYW5hOwogCkBAIC02NjgsNiAmIzQzOzcwOCw5IEBAIGVudW0gewogLyogRHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgaW50ZXJydXB0IG1vZGVyYXRpb24gLSBESU0gKi8KICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04gQklUKDI4KQogCiYjNDM7LyogRHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgcXVldWUgZGVwdGggZm9yIEhXQyAqLwomIzQzOyNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSFdDX1FVRVVFX0RFUFRIIEJJVCgyOSkKJiM0MzsKICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdTMSBcCiAJKEdETUFfRFJWX0NBUF9GTEFHXzFfRVFfU0hBUklOR19NVUxUSV9WUE9SVCB8IFwKIAkgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9OQVBJX1dLRE9ORV9GSVggfCBcCkBAIC02ODMsNiAmIzQzOzcyNiw3IEBAIGVudW0gewogCSBHRE1BX0RSVl9DQVBfRkxBR18xX1BST0JFX1JFQ09WRVJZIHwgXAogCSBHRE1BX0RSVl9DQVBfRkxBR18xX0hBTkRMRV9TVEFMTF9TUV9SRUNPVkVSWSB8IFwKIAkgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9IV0NfVElNRU9VVF9SRUNPVkVSWSB8IFwKJiM0MzsJIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0hXQ19RVUVVRV9ERVBUSCB8IFwKIAkgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9FUV9NU0lfVU5TSEFSRV9NVUxUSV9WUE9SVCB8IFwKIAkgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04pCiAKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L21hbmEvaHdfY2hhbm5lbC5oIGIvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmgKaW5kZXggMTZmZWIzOTYxNmMxYmUuLmVlYzVkM2FhMjNlMWQ1IDEwMDY0NAotLS0gYS9pbmNsdWRlL25ldC9tYW5hL2h3X2NoYW5uZWwuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL25ldC9tYW5hL2h3X2NoYW5uZWwuaApAQCAtMTY0LDYgJiM0MzsxNjQsOSBAQCBzdHJ1Y3QgaHdjX3dxIHsKIAl1MTYgcXVldWVfZGVwdGg7CiAKIAlzdHJ1Y3QgaHdjX2NxICpod2NfY3E7CiYjNDM7CiYjNDM7CS8qIFNlcmlhbGl6ZXMgY29uY3VycmVudCBtYW5hX2dkX3Bvc3RfYW5kX3JpbmcoKSBjYWxscy4gKi8KJiM0MzsJc3BpbmxvY2tfdCBsb2NrOwogfTsKIAogc3RydWN0IGh3Y19jYWxsZXJfY3R4IHsKQEAgLTE3Myw2ICYjNDM7MTc2LDE3IEBAIHN0cnVjdCBod2NfY2FsbGVyX2N0eCB7CiAKIAl1MzIgZXJyb3I7IC8qIExpbnV4IGVycm9yIGNvZGUgKi8KIAl1MzIgc3RhdHVzX2NvZGU7CiYjNDM7CiYjNDM7CS8qIFByb3RlY3RzIG91dHB1dF9idWYgYWdhaW5zdCBjb25jdXJyZW50IGFjY2VzcyBmcm9tCiYjNDM7CSAqIGhhbmRsZV9yZXNwKCkgKENRIGludGVycnVwdCkgYW5kIHRoZSBzZW5kZXIgdGltZW91dCBwYXRoLgomIzQzOwkgKi8KJiM0MzsJc3BpbmxvY2tfdCBsb2NrOwomIzQzOwomIzQzOwkvKiBUcmFja3Mgc2VuZGVyICYjNDM7IGhhbmRsZV9yZXNwIG93bmVyc2hpcC4gIFRoZSBsYXN0IHB1dAomIzQzOwkgKiAocmVmY291bnQgcmVhY2hlcyAwKSByZWxlYXNlcyB0aGUgYml0bWFwIHNsb3QuCiYjNDM7CSAqLwomIzQzOwlyZWZjb3VudF90IHJlZmNudDsKJiM0MzsJdTE2IG1zZ19pZDsKIH07CiAKIHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgewpAQCAtMTgxLDggJiM0MzsxOTUsOSBAQCBzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0IHsKIAogCXUxNiBudW1faW5mbGlnaHRfbXNnOwogCXUzMiBtYXhfcmVxX21zZ19zaXplOwomIzQzOwl1MzIgbWF4X3Jlc3BfbXNnX3NpemU7CiAKLQl1MTYgaHdjX2luaXRfcV9kZXB0aF9tYXg7CiYjNDM7CXUzMiBod2NfaW5pdF9xX2RlcHRoX21heDsKIAl1MzIgaHdjX2luaXRfbWF4X3JlcV9tc2dfc2l6ZTsKIAl1MzIgaHdjX2luaXRfbWF4X3Jlc3BfbXNnX3NpemU7CiAKQEAgLTE5MiwxMyAmIzQzOzIwNywzOCBAQCBzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0IHsKIAlzdHJ1Y3QgaHdjX3dxICp0eHE7CiAJc3RydWN0IGh3Y19jcSAqY3E7CiAKLQlzdHJ1Y3Qgc2VtYXBob3JlIHNlbWE7CiAJc3RydWN0IGdkbWFfcmVzb3VyY2UgaW5mbGlnaHRfbXNnX3JlczsKJiM0MzsJLyogV2FpdHF1ZXVlIGZvciBzZW5kZXJzIGJsb2NrZWQgb24gYSBmdWxsIGluZmxpZ2h0IGJpdG1hcC4gKi8KJiM0MzsJd2FpdF9xdWV1ZV9oZWFkX3QgbXNnX3dhaXRxOwogCiAJdTMyIHBmX2Rlc3RfdnJxX2lkOwogCXUzMiBwZl9kZXN0X3ZyY3FfaWQ7CiAJdTMyIGh3Y190aW1lb3V0OwogCiYjNDM7CS8qIFNldCBhZnRlciBjaGFubmVsIGlzIGZ1bGx5IGVzdGFibGlzaGVkOyBjbGVhcmVkIG9uIHRlYXJkb3duIHRvCiYjNDM7CSAqIGFib3J0IHdhaXRlcnMgaW4gbWFuYV9od2NfZ2V0X21zZ19pbmRleCgpIGFuZCByZWplY3QgbmV3IHNlbmRzLgomIzQzOwkgKi8KJiM0MzsJYm9vbCBjaGFubmVsX3VwOwomIzQzOwomIzQzOwkvKiBTZXQgb24gZmlyc3QgSFdDIHRpbWVvdXQuICBDYXVzZXMgZ2V0X21zZ19pbmRleCgpIHRvIHJldHVybgomIzQzOwkgKiAtRVRJTUVET1VUIGluc3RlYWQgb2Ygd2FpdGluZywgZHJhaW5pbmcgYWxsIHF1ZXVlZCBzZW5kZXJzLgomIzQzOwkgKi8KJiM0MzsJYm9vbCBod2NfdGltZWRfb3V0OwomIzQzOwomIzQzOwkvKiBTZXQgYWZ0ZXIgbWFuYV9zbWNfc2V0dXBfaHdjKCkgc3VjY2VlZHMgKGhhcmR3YXJlIGhhcyBhY3RpdmUKJiM0MzsJICogTVNUIGVudHJpZXMpLiAgT24gcmVjb3ZlcmFibGUgcGF0aHMgKGVzdGFibGlzaF9jaGFubmVsKQomIzQzOwkgKiBjbGVhcmVkIG9ubHkgYWZ0ZXIgc3VjY2Vzc2Z1bCB0ZWFyZG93biBzbyBhIHJldHJ5IHJlbWFpbnMKJiM0MzsJICogcG9zc2libGUuICBPbiB0aGUgdGVybWluYWwgZGVzdHJveV9jaGFubmVsIHBhdGgsIGNsZWFyZWQKJiM0MzsJICogdW5jb25kaXRpb25hbGx5IHNpbmNlIGh3YyBpcyBhYm91dCB0byBiZSBmcmVlZC4KJiM0MzsJICovCiYjNDM7CWJvb2wgc2V0dXBfYWN0aXZlOwomIzQzOwomIzQzOwkvKiBDb3VudCBvZiBpbi1mbGlnaHQgbWFuYV9nZF9zZW5kX3JlcXVlc3QoKSBjYWxsZXJzLiAgUHJvdGVjdGVkCiYjNDM7CSAqIGJ5IGdjLSZndDtod2NfbG9jazsgdGhlIGxhc3Qgc2VuZGVyIHRvIGRyb3AgaXQgdG8gemVybyB3YWtlcwomIzQzOwkgKiBnYy0mZ3Q7aHdjX2RyYWluX3dhaXRxIGZvciB0aGUgbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKCkgZHJhaW4uCiYjNDM7CSAqLwomIzQzOwl1bnNpZ25lZCBpbnQgYWN0aXZlX3NlbmRlcnM7CiYjNDM7CiAJc3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjYWxsZXJfY3R4OwogfTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzE2MgoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDIxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1BTkEgRHJpdmVyIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUgdGhhdCYjMzk7cyBtYWtpbmcgY2hhbmdlcyB0byB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciwgdGhlIE1BTkEgZHJpdmVyLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIG9mIHRoZSBkcml2ZXIgaXMgYmVpbmcgdG91Y2hlZDsgSSYjMzk7bSBzZWVpbmcgbW9kaWZpY2F0aW9ucyBpbiBgY3EuY2AsIGBnZG1hX21haW4uY2AsIGBod19jaGFubmVsLmNgLCBhbmQgYG1hbmFfZW4uY2AsIGFsb25nIHdpdGggc29tZSBoZWFkZXIgZmlsZSB1cGRhdGVzIGluIGBnZG1hLmhgIGFuZCBgaHdfY2hhbm5lbC5oYC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhhdCBsaXN0IG9mIGZpbGVzIGltbWVkaWF0ZWx5IHRlbGxzIG1lIHRoaXMgaXMgbGlrZWx5IGEgc3Vic3RhbnRpYWwgZnVuY3Rpb25hbCBjaGFuZ2UuCgpMZXQmIzM5O3MgcXVpY2tseSBhc3Nlc3MgdGhlIG5hdHVyZSBvZiB0aGVzZSBjaGFuZ2VzIHRvIGdldCBhIGJldHRlciBoYW5kbGUgb24gdGhlIHNjb3BlLiBBaCwgeWVzLCBJJiMzOTttIHNlZWluZyBSQ1UgcHJvdGVjdGlvbiBhZGRlZCBmb3IgYGNxX3RhYmxlYCwgY2hhbmdlcyB0byBzcGlubG9ja3MsIHRpbWVvdXQgaGFuZGxpbmcgaW1wcm92ZW1lbnRzLCByZWZjb3VudCBtYW5hZ2VtZW50IGZvciBgaHdjX2NhbGxlcl9jdHhgLCBhbmQgaGFuZGxpbmcgb2YgSFdDIHJlaW5pdGlhbGl6YXRpb24uIFRoYXQmIzM5O3MgYSBwcmV0dHkgc2lnbmlmaWNhbnQgbGF1bmRyeSBsaXN0LiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgbWlub3IgdHdlYWs7IHRoaXMgaXMgYSBmdW5kYW1lbnRhbCByZXdvcmsgb2Ygc29tZSBrZXkgc3luY2hyb25pemF0aW9uIGFuZCByZXNvdXJjZSBtYW5hZ2VtZW50IGNvbXBvbmVudHMgd2l0aGluIHRoZSBNQU5BIGRyaXZlci4gVGhlc2UgdHlwZXMgb2YgY2hhbmdlcyBhbG1vc3QgYWx3YXlzIGludHJvZHVjZSB0aGUgcG90ZW50aWFsIGZvciBzdWJ0bGUsIGhhcmQtdG8tZGVidWcgcmVncmVzc2lvbnMsIHNvIHRob3JvdWdoIHRlc3RpbmcgaXMgYWJzb2x1dGVseSBjcml0aWNhbC4KCk5leHQsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoaXMgZHJpdmVyLiBJJiMzOTttIGdvaW5nIHRvIHNlYXJjaCB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3Igc29tZXRoaW5nIGxpa2UgYE1JQ1JPU09GVF9NQU5BYCBvciBhIHNpbWlsYXIgY29uZmlndXJhdGlvbiBzeW1ib2wgdG8gZmlndXJlIG91dCBob3cgdGhpcyBkcml2ZXIgaXMgZW5hYmxlZCBhbmQgaWYgYW55IG5ldyBvcHRpb25zIGhhdmUgYmVlbiBpbnRyb2R1Y2VkIHdpdGggdGhpcyBwYXRjaC4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBpcyB2aXRhbCB0byBwcm9wZXJseSBpbnRlZ3JhdGUgdGhpcyBwYXRjaCBzZXJpZXMsIG9yIHRvIGV2ZW4ganVzdCB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTc6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUlDUk9TT0ZUX01BTkEmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvS2NvbmZpZz0yPWNvbmZpZyBNQU5BX0lORklOSUJBTkRcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O01pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFwmIzM0O1xuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvS2NvbmZpZzo0Olx0ZGVwZW5kcyBvbiBORVRERVZJQ0VTIFx1MDAyNlx1MDAyNiBFVEhFUk5FVCBcdTAwMjZcdTAwMjYgUENJIFx1MDAyNlx1MDAyNiBNSUNST1NPRlRfTUFOQVxuZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvS2NvbmZpZy01LVx0aGVscFxuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnPTE2PWlmIE5FVF9WRU5ET1JfTUlDUk9TT0ZUXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZy0xNy1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnOjE4OmNvbmZpZyBNSUNST1NPRlRfTUFOQVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L0tjb25maWctMTktXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L01ha2VmaWxlLTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvTWFrZWZpbGU6NTpvYmotJChDT05GSUdfTUlDUk9TT0ZUX01BTkEpICYjNDM7PSBtYW5hL1xuLS1cbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL01ha2VmaWxlLTQtXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19NSUNST1NPRlRfTUFOQSkgJiM0Mzs9IG1hbmEub1xuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGUtNi1tYW5hLW9ianMgOj0gZ2RtYV9tYWluLm8gc2htX2NoYW5uZWwubyBod19jaGFubmVsLm8gbWFuYV9lbi5vIG1hbmFfZXRodG9vbC5vIG1hbmFfYnBmLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNzo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDA5OAoJCQkJCQkJb3V0cHV0OiAxNwoJCQkJCQkJdGhvdWdodHM6IDEwOTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBTdHJhdGVneSBmb3IgdGhlIE1BTkEgRHJpdmVyKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpbW1lZGlhdGVseSwgbXkgbWluZCBqdW1wcyB0byBmdXp6aW5nLiBUaGUga2V5IGhlcmUgaXMgdGhlIGBNSUNST1NPRlRfTUFOQWAgYW5kIGBNQU5BX0lORklOSUJBTkRgIGNvbmZpZ3MsIHRoZXkgd2lsbCBndWlkZSB1cyBvbiB3aGV0aGVyIHRoaXMgaXMgYnVpbHQgYXMgYSBtb2R1bGUgb3IgYnVpbHQgaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gd2hhdCB0aGUgdGFyZ2V0IGZ1bmN0aW9ucyBhcmUgd2l0aGluIHRoZSBjb2RlLCBzbyBsZXQmIzM5O3MgbGlzdCB0aG9zZS4gVGhlIHBhdGNoIHRvdWNoZXMgYSBnb29kIGNodW5rIG9mIHRoZSBkcml2ZXIsIHNwZWNpZmljYWxseTogYG1hbmFfaWJfaW5zdGFsbF9jcV9jYmAsIGBtYW5hX2liX3JlbW92ZV9jcV9jYmAsIGBtYW5hX25lZWRfbG9nYCwgYG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0YCwgYG1hbmFfc2Vydl9yZXNldGAsIGBtYW5hX2dkX3Byb2Nlc3NfZXFlYCwgYG1hbmFfZ2RfZGVzdHJveV9jcWAsIGBtYW5hX2dkX2NyZWF0ZV9kbWFfcmVnaW9uYCwgYG1hbmFfZ2RfdmVyaWZ5X3ZmX3ZlcnNpb25gLCBgbWFuYV9nZF9wcm9iZWAsIGBtYW5hX2h3Y19nZXRfbXNnX2luZGV4YCwgYG1hbmFfaHdjX3B1dF9tc2dfaW5kZXhgLCBgaHdjX2N0eF9wdXRgLCBgbWFuYV9od2NfaGFuZGxlX3Jlc3BgLCBgbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyYCwgYG1hbmFfaHdjX3J4X2V2ZW50X2hhbmRsZXJgLCBgbWFuYV9od2NfZGVzdHJveV9jcWAsIGBtYW5hX2h3Y19jcmVhdGVfd3FgLCBgbWFuYV9od2NfcG9zdF90eF93cWVgLCBgbWFuYV9od2NfaW5pdF9pbmZsaWdodF9tc2dgLCBgbWFuYV9od2NfdGVzdF9jaGFubmVsYCwgYG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsYCwgYG1hbmFfaHdjX2luaXRfcXVldWVzYCwgYG1hbmFfaHdjX2Rlc3Ryb3lfcXVldWVzYCwgYG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsYCwgYG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbGAsIGBtYW5hX2h3Y19zZW5kX3JlcXVlc3RgLCBgbWFuYV9jcmVhdGVfdHhxYCwgYW5kIGBtYW5hX2NyZWF0ZV9yeHFgLiBUaGF0JiMzOTtzIGEgbG90LCBzbyBJJiMzOTtsbCBuZWVkIHRvIHByaW9yaXRpemUuCgpMZXQmIzM5O3MgcGljayBhIGZldyBwcm9taXNpbmcgY2FuZGlkYXRlcyBmb3IgZnV6emluZywgYW5kIEkgc2hvdWxkIGZvY3VzIG9uIGVudHJ5IHBvaW50cyBmcm9tIHVzZXJzcGFjZSBvciB0aG9zZSB0aGF0IGhhbmRsZSBjb21wbGV4IGludGVyYWN0aW9uLiAgSSYjMzk7bGwgcGljazogYG1hbmFfaHdjX3NlbmRfcmVxdWVzdGAsIGBtYW5hX2h3Y19oYW5kbGVfcmVzcGAsIGBtYW5hX2h3Y19yeF9ldmVudF9oYW5kbGVyYCwgYG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsYCwgYG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbGAsIGBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbGAsIGBtYW5hX2h3Y190ZXN0X2NoYW5uZWxgLCBgbWFuYV9od2NfZ2V0X21zZ19pbmRleGAsIGBtYW5hX2h3Y19wdXRfbXNnX2luZGV4YCwgYG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0YCwgYG1hbmFfZ2RfcHJvY2Vzc19lcWVgLCBgbWFuYV9pYl9pbnN0YWxsX2NxX2NiYCwgYW5kIGBtYW5hX2liX3JlbW92ZV9jcV9jYmAuCgpOb3csIHRoZSBiaWcgcXVlc3Rpb246IElzIHRoaXMgZHJpdmVyIGV2ZW4gcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IE1BTkEgaXMgYSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyLCBzbyBpdCYjMzk7cyBhIFBDSSBkZXZpY2UuICBUeXBpY2FsbHksIEkmIzM5O2QgbG9vayBmb3Igc3l6a2FsbGVyIHN1cHBvcnQgdmlhIHZoY2kgb3IgYSBzaW1pbGFyIHBzZXVkby1kZXZpY2UgaWYgdGhlIGhhcmR3YXJlIGlzIGVtdWxhdGVkLiBTeXprYWxsZXIgZG9lc24mIzM5O3QgaGF2ZSBhIHNwZWNpZmljIE1BTkEgZW11bGF0b3IsIHNvIEkgd2FzIGNvbmNlcm5lZCBpdCB3b3VsZG4mIzM5O3QgYmUgcG9zc2libGUgYXQgZmlyc3QuCgpCdXQgd2FpdCwgUENJIGRyaXZlcnMgY2FuIGJlIGZ1enplZCB1c2luZyBgc3l6X3BjaV92cGNpYCBhbmQgc2ltaWxhci4gVGhlIHRleHQgc2F5cyB3ZSBtYXkgYmUgYWJsZSB0byByZWFjaCBldmVuIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlLiBJJiMzOTttIHNlZWluZyAmIzM0O3N5ei1jbHVzdGVyJiMzNDsgYXMgdGhlIGF1dGhvciwgd2hpY2ggc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBzeXprYWxsZXIgaXMgYWN0aXZlbHkgd29ya2luZyBvbiBvciBoYXMgZm91bmQgc29tZXRoaW5nIHRvIGZ1enogaW4gdGhpcyBjb2RlISBTaW5jZSBpdCBpcyBhIHBhdGNoIGJlaW5nIHRlc3RlZCBieSBzeXprYWxsZXIgaXQgaXMgd29ydGggaXQuIFN5emthbGxlciBjYW4gZnV6eiBhbnkgUENJIGRyaXZlciBieSBiaW5kaW5nIGl0IHRvIHRoZSB2aGNpIG9yIHBjaSBwc2V1ZG8tZGV2aWNlIGFuZCBwcm92aWRpbmcgcmFuZG9tIE1NSU8vRE1BIHJlc3BvbnNlcy4KCk9rYXksIGxldCYjMzk7cyBjb25maXJtIHRoZSBjb25maWdzIGFnYWluLCBiZWNhdXNlIGl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLiBZdXAsIGp1c3QgYE1JQ1JPU09GVF9NQU5BYCBhbmQgYE1BTkFfSU5GSU5JQkFORGAuCgpMZXQmIzM5O3MgcmVmaW5lIHRoZSBGb2N1c1N5bWJvbHMgdG8gdGhlIGltcG9ydGFudCBvbmVzOiBgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0YCwgYG1hbmFfaHdjX2hhbmRsZV9yZXNwYCwgYG1hbmFfaHdjX3J4X2V2ZW50X2hhbmRsZXJgLCBgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWxgLCBgbWFuYV9od2NfZGVzdHJveV9jaGFubmVsYCwgYG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsYCwgYG1hbmFfaHdjX2Rlc3Ryb3lfcXVldWVzYCwgYG1hbmFfZ2RfcHJvY2Vzc19lcWVgLCBgbWFuYV9pYl9pbnN0YWxsX2NxX2NiYCwgYG1hbmFfaWJfcmVtb3ZlX2NxX2NiYCwgYW5kIGBtYW5hX2h3Y19nZXRfbXNnX2luZGV4YC4KCkdvb2QuIE5vdywgSSBzaG91bGQgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGNvbmZpZ3MgdGhhdCB3b3VsZCBpbmZsdWVuY2UgdGhlIGJ1aWxkIG9yIGZ1bmN0aW9uYWxpdHkgSSYjMzk7bSBtaXNzaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIyIDE3OjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNQU5BJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWc6Mjpjb25maWcgTUFOQV9JTkZJTklCQU5EXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9LY29uZmlnLTMtXHR0cmlzdGF0ZSBcJiMzNDtNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnPTI5Mz1jb25maWcgQ0hBUkdFUl9TQlNcbi0tXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnLTI5OS1cbmRyaXZlcnMvcG93ZXIvc3VwcGx5L0tjb25maWc6MzAwOmNvbmZpZyBNQU5BR0VSX1NCU1xuZHJpdmVycy9wb3dlci9zdXBwbHkvS2NvbmZpZy0zMDEtXHR0cmlzdGF0ZSBcJiMzNDtTbWFydCBCYXR0ZXJ5IFN5c3RlbSBNYW5hZ2VyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjIgMTc6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjYzODUKCQkJCQkJCW91dHB1dDogMjE3CgkJCQkJCQl0aG91Z2h0czogMTUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqRGVlcCBEaXZlIGludG8gTUFOQSBJbmZpbmliYW5kIEZ1bmN0aW9uYWxpdHkqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZSB3aGF0IHdlJiMzOTtyZSB3b3JraW5nIHdpdGggaGVyZS4gVGhlIGNvbmZpZ3VyYXRpb24gY29udGV4dCBpcyBjbGVhcmx5IGZvY3VzZWQgb24gdGhlIGBNSUNST1NPRlRfTUFOQWAgYW5kIGBNQU5BX0lORklOSUJBTkRgIHNldHVwcy4gSSBuZWVkIHRvIGtlZXAgdGhvc2UgaW4gbWluZCBhcyB0aGUgZm91bmRhdGlvbiBmb3IgZXZlcnl0aGluZyB0aGF0JiMzOTtzIHRvIGNvbWUuCgpJJiMzOTttIHplcm9pbmcgaW4gb24gYSBjcml0aWNhbCBzdWJzZXQgb2YgZnVuY3Rpb25zLCBvciB3aGF0IHRoZXkmIzM5O3JlIGNhbGxpbmcgYEZvY3VzU3ltYm9sc2AuIFRoZXNlIHNlZW0gdG8gYmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIGZvciBoYW5kbGluZyBDb21wbGV0aW9uIFF1ZXVlcyAoQ1FzKSwgaGFyZHdhcmUgY29tbXVuaWNhdGlvbiwgYW5kIGdlbmVyYWwgZGF0YSBwcm9jZXNzaW5nIHdpdGhpbiB0aGlzIEluZmluaWJhbmQgaW1wbGVtZW50YXRpb24uIExldCYjMzk7cyBicmVhayB0aGVtIGRvd24uCgoqICAgYG1hbmFfaWJfaW5zdGFsbF9jcV9jYmAgYW5kIGBtYW5hX2liX3JlbW92ZV9jcV9jYmA6IFRoZXNlIGNsZWFybHkgcmVsYXRlIHRvIHRoZSBpbnN0YWxsYXRpb24gYW5kIHJlbW92YWwgb2YgQ29tcGxldGlvbiBRdWV1ZSBjYWxsYmFja3MuIFRoaXMgc3VnZ2VzdHMgYSBzb3BoaXN0aWNhdGVkIGV2ZW50LWRyaXZlbiBtb2RlbCBmb3IgaGFuZGxpbmcgY29tcGxldGlvbnMsIHdoaWNoIGlzIHN0YW5kYXJkIGJ1dCBpbXBvcnRhbnQgdG8gdmVyaWZ5IHRoZSBudWFuY2VzIG9mLgoqICAgYG1hbmFfaHdjX2dldF9tc2dfaW5kZXhgLCBgbWFuYV9od2NfaGFuZGxlX3Jlc3BgLCBgbWFuYV9od2NfcnhfZXZlbnRfaGFuZGxlcmAsIGBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbGAsIGBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWxgLCBhbmQgYG1hbmFfaHdjX3NlbmRfcmVxdWVzdGA6IFRoZXNlIGNvbGxlY3RpdmVseSBwYWludCBhIHBpY3R1cmUgb2YgSGFyZHdhcmUgQ29tbXVuaWNhdGlvbiAoSFdDKSBtYW5hZ2VtZW50LiBXZSYjMzk7cmUgbG9va2luZyBhdCBtZXNzYWdlIGluZGV4aW5nLCByZXNwb25zZSBoYW5kbGluZywgZXZlbnQgcHJvY2Vzc2luZyAocGFydGljdWxhcmx5IG9uIHRoZSByZWNlaXZlIHNpZGUpLCBhbmQgdGhlIGNyZWF0aW9uLCBkZXN0cnVjdGlvbiwgYW5kIHRyYW5zbWlzc2lvbiBhc3BlY3RzIG9mIGNvbW11bmljYXRpb24gY2hhbm5lbHMuIEEgZ29vZCBsZXZlbCBvZiBhYnN0cmFjdGlvbiwgY3JpdGljYWwgdG8gcGVyZm9ybWFuY2UuCiogICBgbWFuYV9nZF9wcm9jZXNzX2VxZWAgYW5kIGBtYW5hX2dkX2Rlc3Ryb3lfY3FgOiBUaGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gZ2VuZXJpYyBkYXRhIChHRCkgcHJvY2Vzc2luZyBhbmQgZGVzdHJveWluZyBDUXMuIFRoaXMgaW1wbGllcyB0aGUgZXhpc3RlbmNlIG9mIGEgZ2VuZXJpYyBkYXRhIG1vZGVsIGZvciBkYXRhIHRyYW5zZmVyLCBzZXBhcmF0ZSBmcm9tIHRoZSBJbmZpbmliYW5kLXNwZWNpZmljIGFzcGVjdHMuCgpTbywgb3ZlcmFsbCwgYSB0aG9yb3VnaCBzZXQgb2YgY29uc2lkZXJhdGlvbnMgdGhhdCBpbmRpY2F0ZXMgYSB3ZWxsLXN0cnVjdHVyZWQgYXBwcm9hY2ggdG8gaGFuZGxpbmcgSW5maW5pYmFuZCBvcGVyYXRpb25zIHdpdGggdGhpcyBgTUFOQWAgaW1wbGVtZW50YXRpb24uCgpNeSBuZXh0IHN0ZXAgaXMgdG8gY2FsbCBzZXQtcmVzdWx0cy4gVGhpcyBpbmRpY2F0ZXMgdGhlIG5leHQgc3RlcHMgaW4gdGhpcyBldmFsdWF0aW9uLCBsaWtlbHkgZ2F0aGVyaW5nIGFsbCBhdmFpbGFibGUgZGF0YSBwb2ludHMgdG8gZXN0YWJsaXNoIGEgYmVuY2htYXJrIGZvciBwZXJmb3JtYW5jZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMiAxNzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUlDUk9TT0ZUX01BTkEmIzM0OywKICAgICYjMzQ7TUFOQV9JTkZJTklCQU5EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFuYV9pYl9pbnN0YWxsX2NxX2NiJiMzNDssCiAgICAmIzM0O21hbmFfaWJfcmVtb3ZlX2NxX2NiJiMzNDssCiAgICAmIzM0O21hbmFfaHdjX2dldF9tc2dfaW5kZXgmIzM0OywKICAgICYjMzQ7bWFuYV9od2NfaGFuZGxlX3Jlc3AmIzM0OywKICAgICYjMzQ7bWFuYV9od2NfcnhfZXZlbnRfaGFuZGxlciYjMzQ7LAogICAgJiMzNDttYW5hX2h3Y19jcmVhdGVfY2hhbm5lbCYjMzQ7LAogICAgJiMzNDttYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwmIzM0OywKICAgICYjMzQ7bWFuYV9od2Nfc2VuZF9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O21hbmFfZ2RfcHJvY2Vzc19lcWUmIzM0OywKICAgICYjMzQ7bWFuYV9nZF9kZXN0cm95X2NxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLCBpbmNsdWRpbmcgYWRkaW5nIFJDVSBwcm90ZWN0aW9uIGZvciB0aGUgQ1EgdGFibGUsIGhhbmRsaW5nIEhXQyB0aW1lb3V0cywgYW5kIGFkZGluZyByZWZjb3VudHMgZm9yIGNhbGxlciBjb250ZXh0cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgbG9naWMgb2YgdGhlIGRyaXZlciBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUlDUk9TT0ZUX01BTkEmIzM0OywKICAgICYjMzQ7TUFOQV9JTkZJTklCQU5EJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFuYV9pYl9pbnN0YWxsX2NxX2NiJiMzNDssCiAgICAmIzM0O21hbmFfaWJfcmVtb3ZlX2NxX2NiJiMzNDssCiAgICAmIzM0O21hbmFfaHdjX2dldF9tc2dfaW5kZXgmIzM0OywKICAgICYjMzQ7bWFuYV9od2NfaGFuZGxlX3Jlc3AmIzM0OywKICAgICYjMzQ7bWFuYV9od2NfcnhfZXZlbnRfaGFuZGxlciYjMzQ7LAogICAgJiMzNDttYW5hX2h3Y19jcmVhdGVfY2hhbm5lbCYjMzQ7LAogICAgJiMzNDttYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwmIzM0OywKICAgICYjMzQ7bWFuYV9od2Nfc2VuZF9yZXF1ZXN0JiMzNDssCiAgICAmIzM0O21hbmFfZ2RfcHJvY2Vzc19lcWUmIzM0OywKICAgICYjMzQ7bWFuYV9nZF9kZXN0cm95X2NxJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLCBpbmNsdWRpbmcgYWRkaW5nIFJDVSBwcm90ZWN0aW9uIGZvciB0aGUgQ1EgdGFibGUsIGhhbmRsaW5nIEhXQyB0aW1lb3V0cywgYW5kIGFkZGluZyByZWZjb3VudHMgZm9yIGNhbGxlciBjb250ZXh0cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgbG9naWMgb2YgdGhlIGRyaXZlciBhbmQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE3OjUyOjIwLjg5Nzg0NDU1NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMDY0OTQ4MzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1JQ1JPU09GVF9NQU5BXCIsXG4gICAgXCJNQU5BX0lORklOSUJBTkRcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYW5hX2liX2luc3RhbGxfY3FfY2JcIixcbiAgICBcIm1hbmFfaWJfcmVtb3ZlX2NxX2NiXCIsXG4gICAgXCJtYW5hX2h3Y19nZXRfbXNnX2luZGV4XCIsXG4gICAgXCJtYW5hX2h3Y19oYW5kbGVfcmVzcFwiLFxuICAgIFwibWFuYV9od2NfcnhfZXZlbnRfaGFuZGxlclwiLFxuICAgIFwibWFuYV9od2NfY3JlYXRlX2NoYW5uZWxcIixcbiAgICBcIm1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbFwiLFxuICAgIFwibWFuYV9od2Nfc2VuZF9yZXF1ZXN0XCIsXG4gICAgXCJtYW5hX2dkX3Byb2Nlc3NfZXFlXCIsXG4gICAgXCJtYW5hX2dkX2Rlc3Ryb3lfY3FcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIE1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgKE1BTkEpIGRyaXZlciwgaW5jbHVkaW5nIGFkZGluZyBSQ1UgcHJvdGVjdGlvbiBmb3IgdGhlIENRIHRhYmxlLCBoYW5kbGluZyBIV0MgdGltZW91dHMsIGFuZCBhZGRpbmcgcmVmY291bnRzIGZvciBjYWxsZXIgY29udGV4dHMuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IHRoZSBjb3JlIGxvZ2ljIG9mIHRoZSBkcml2ZXIgYW5kIHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE3OjUyOjIwLjg5Nzg1Mjk1NVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzg3MzExMTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgN2E3ZjY3M2M1YTQ5MDA1NDA1ZDU1ZmMyNTQwZjI0MmQzYjg5Y2Q5NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAyMiAxNzo1MjoxOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9jcS5jIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvY3EuY1xcbmluZGV4IGYyNTQ3OTg5ZjQyMjkwLi4yYmY0YmUyMWNlZGU3OSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9jcS5jXFxuKysrIGIvZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvY3EuY1xcbkBAIC0xMzEsMTIgKzEzMSwyMCBAQCBzdGF0aWMgdm9pZCBtYW5hX2liX2NxX2hhbmRsZXIodm9pZCAqY3R4LCBzdHJ1Y3QgZ2RtYV9xdWV1ZSAqZ2RtYV9jcSlcXG4gaW50IG1hbmFfaWJfaW5zdGFsbF9jcV9jYihzdHJ1Y3QgbWFuYV9pYl9kZXYgKm1kZXYsIHN0cnVjdCBtYW5hX2liX2NxICpjcSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IG1kZXZfdG9fZ2MobWRldik7XFxuK1xcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqY3FfdGFibGU7XFxuIFxcdHN0cnVjdCBnZG1hX3F1ZXVlICpnZG1hX2NxO1xcbiBcXG4tXFx0aWYgKGNxLVxcdTAwM2VxdWV1ZS5pZCBcXHUwMDNlPSBnYy1cXHUwMDNlbWF4X251bV9jcXMpXFxuK1xcdC8qIE5vIHJjdV9yZWFkX2xvY2soKTogaW5zdGFsbC9yZW1vdmUgcnVuIHdpdGhpbiB0aGUgSUIgZGV2aWNlXFxuK1xcdCAqIGxpZmV0aW1lLCB3aGljaCBtYW5hX3JkbWFfcmVtb3ZlKCkgKGliX3VucmVnaXN0ZXJfZGV2aWNlKSBkcmFpbnNcXG4rXFx0ICogYmVmb3JlIHRoZSBiYXNlIGNxX3RhYmxlIGNhbiBiZSBmcmVlZC4gIFNlZSBnZG1hX2NvbnRleHQ6OmNxX3RhYmxlXFxuK1xcdCAqIGluIGdkbWEuaCBmb3Igd2h5IFxcXCJ0cnVlXFxcIiBpcyBzb3VuZC5cXG4rXFx0ICovXFxuK1xcdGNxX3RhYmxlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnYy1cXHUwMDNlY3FfdGFibGUsIHRydWUpO1xcbitcXHRpZiAoIWNxX3RhYmxlIHx8IGNxLVxcdTAwM2VxdWV1ZS5pZCBcXHUwMDNlPSBnYy1cXHUwMDNlbWF4X251bV9jcXMpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4gXFx0LyogQ3JlYXRlIENRIHRhYmxlIGVudHJ5LCBzaGFyaW5nIGEgQ1EgYmV0d2VlbiBXUXMgaXMgbm90IHN1cHBvcnRlZCAqL1xcbi1cXHRpZiAoZ2MtXFx1MDAzZWNxX3RhYmxlW2NxLVxcdTAwM2VxdWV1ZS5pZF0pXFxuK1xcdGlmIChyY3VfYWNjZXNzX3BvaW50ZXIoY3FfdGFibGVbY3EtXFx1MDAzZXF1ZXVlLmlkXSkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRpZiAoY3EtXFx1MDAzZXF1ZXVlLmttZW0pXFxuIFxcdFxcdGdkbWFfY3EgPSBjcS1cXHUwMDNlcXVldWUua21lbTtcXG5AQCAtMTQ5LDIzICsxNTcsNDkgQEAgaW50IG1hbmFfaWJfaW5zdGFsbF9jcV9jYihzdHJ1Y3QgbWFuYV9pYl9kZXYgKm1kZXYsIHN0cnVjdCBtYW5hX2liX2NxICpjcSlcXG4gXFx0Z2RtYV9jcS1cXHUwMDNldHlwZSA9IEdETUFfQ1E7XFxuIFxcdGdkbWFfY3EtXFx1MDAzZWNxLmNhbGxiYWNrID0gbWFuYV9pYl9jcV9oYW5kbGVyO1xcbiBcXHRnZG1hX2NxLVxcdTAwM2VpZCA9IGNxLVxcdTAwM2VxdWV1ZS5pZDtcXG4tXFx0Z2MtXFx1MDAzZWNxX3RhYmxlW2NxLVxcdTAwM2VxdWV1ZS5pZF0gPSBnZG1hX2NxO1xcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIoY3FfdGFibGVbY3EtXFx1MDAzZXF1ZXVlLmlkXSwgZ2RtYV9jcSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbiB2b2lkIG1hbmFfaWJfcmVtb3ZlX2NxX2NiKHN0cnVjdCBtYW5hX2liX2RldiAqbWRldiwgc3RydWN0IG1hbmFfaWJfY3EgKmNxKVxcbiB7XFxuIFxcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gbWRldl90b19nYyhtZGV2KTtcXG4rXFx0c3RydWN0IGdkbWFfcXVldWUgX19yY3UgKipjcV90YWJsZTtcXG4rXFx0c3RydWN0IGdkbWFfcXVldWUgKmdkbWFfY3E7XFxuIFxcbi1cXHRpZiAoY3EtXFx1MDAzZXF1ZXVlLmlkIFxcdTAwM2U9IGdjLVxcdTAwM2VtYXhfbnVtX2NxcyB8fCBjcS1cXHUwMDNlcXVldWUuaWQgPT0gSU5WQUxJRF9RVUVVRV9JRClcXG4rXFx0aWYgKGNxLVxcdTAwM2VxdWV1ZS5pZCA9PSBJTlZBTElEX1FVRVVFX0lEKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbiBcXHRpZiAoY3EtXFx1MDAzZXF1ZXVlLmttZW0pXFxuIFxcdC8qIFRoZW4gaXQgd2lsbCBiZSBjbGVhbmVkIGFuZCByZW1vdmVkIGJ5IHRoZSBtYW5hICovXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdGtmcmVlKGdjLVxcdTAwM2VjcV90YWJsZVtjcS1cXHUwMDNlcXVldWUuaWRdKTtcXG4tXFx0Z2MtXFx1MDAzZWNxX3RhYmxlW2NxLVxcdTAwM2VxdWV1ZS5pZF0gPSBOVUxMO1xcbitcXHQvKiBObyByY3VfcmVhZF9sb2NrKCk6IGxpa2UgbWFuYV9pYl9pbnN0YWxsX2NxX2NiKCksIHRoaXMgcnVucyB3aXRoaW5cXG4rXFx0ICogdGhlIElCIGRldmljZSBsaWZldGltZSB0aGF0IG1hbmFfcmRtYV9yZW1vdmUoKSBkcmFpbnMgYmVmb3JlIHRoZVxcbitcXHQgKiBiYXNlIGNxX3RhYmxlIGNhbiBiZSBmcmVlZC4gIFNlZSBnZG1hX2NvbnRleHQ6OmNxX3RhYmxlIGluIGdkbWEuaC5cXG4rXFx0ICovXFxuK1xcdGNxX3RhYmxlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnYy1cXHUwMDNlY3FfdGFibGUsIHRydWUpO1xcbitcXHRpZiAoIWNxX3RhYmxlIHx8IGNxLVxcdTAwM2VxdWV1ZS5pZCBcXHUwMDNlPSBnYy1cXHUwMDNlbWF4X251bV9jcXMpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0LyogUmVtb3ZlcnMgZm9yIGEgZ2l2ZW4gQ1EgYXJlIHNlcmlhbGl6ZWQgYnkgdGhlIElCIGNvcmUsIHNvIHRoZSBzbG90XFxuK1xcdCAqIGlzIHJlYWQgYW5kIGNsZWFyZWQgd2l0aG91dCByY3VfcmVhZF9sb2NrKCkgb3IgYXRvbWljaXR5OiBhIENRIGlzXFxuK1xcdCAqIG5ldmVyIHRvcm4gZG93biB3aGlsZSBhIGxpdmUgUVAgcmVmZXJlbmNlcyBpdCAoY3EtXFx1MDAzZXVzZWNudCksIG5vclxcbitcXHQgKiB3aGlsZSB0aGUgUVAtY3JlYXRlIHRoYXQgaW5zdGFsbGVkIHRoZSBlbnRyeSBpcyBzdGlsbCBydW5uaW5nICh0aGF0XFxuK1xcdCAqIGNyZWF0ZSBob2xkcyBhIHJlZmVyZW5jZSBvbiB0aGUgQ1EgdW9iamVjdCBhY3Jvc3MgaXRzIGVycm9yIHBhdGgsXFxuK1xcdCAqIGJlZm9yZSB1c2VjbnQgaXMgdGFrZW4pLiAgQW55IGRvdWJsZS1yZW1vdmUgaXMgdGhlcmVmb3JlIHNlcXVlbnRpYWxcXG4rXFx0ICogLS0gdGhlIGxhdGVyIGNhbGxlciBzZWVzIHRoZSBOVUxMIHN0b3JlZCBiZWxvdyBhbmQgcmV0dXJucy5cXG4rXFx0ICovXFxuK1xcdGdkbWFfY3EgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGNxX3RhYmxlW2NxLVxcdTAwM2VxdWV1ZS5pZF0sIHRydWUpO1xcbitcXHRpZiAoIWdkbWFfY3EpXFxuK1xcdFxcdHJldHVybjsgIC8qIGFscmVhZHkgcmVtb3ZlZCBieSBhIHByaW9yIHRlYXJkb3duIHBhdGggKi9cXG4rXFxuK1xcdHJjdV9hc3NpZ25fcG9pbnRlcihjcV90YWJsZVtjcS1cXHUwMDNlcXVldWUuaWRdLCBOVUxMKTtcXG4rXFxuK1xcdC8qIFdhaXQgZm9yIGluLWZsaWdodCBFUSBoYW5kbGVycyB0aGF0IG1heSBoYXZlIGxvYWRlZCB0aGUgb2xkXFxuK1xcdCAqIHBvaW50ZXIgdmlhIHJjdV9kZXJlZmVyZW5jZSgpIHRvIGZpbmlzaCBiZWZvcmUgZnJlZWluZy5cXG4rXFx0ICovXFxuK1xcdHN5bmNocm9uaXplX3JjdSgpO1xcbitcXHRrZnJlZShnZG1hX2NxKTtcXG4gfVxcbiBcXG4gaW50IG1hbmFfaWJfYXJtX2NxKHN0cnVjdCBpYl9jcSAqaWJjcSwgZW51bSBpYl9jcV9ub3RpZnlfZmxhZ3MgZmxhZ3MpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcXG5pbmRleCBhMzhkNGJiNzQ2MjFmOS4uMTc3MTFlZTM3YzhiZTMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1xcbkBAIC0xNjEsNiArMTYxLDggQEAgc3RhdGljIGludCBtYW5hX2dkX2luaXRfcmVnaXN0ZXJzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBib29sIG1hbmFfbmVlZF9sb2coc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIGludCBlcnIpXFxuIHtcXG4gXFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xcbitcXHRib29sIG5lZWRfbG9nID0gdHJ1ZTtcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuIFxcdGlmIChlcnIgIT0gLUVUSU1FRE9VVClcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuQEAgLTE2OCwxMSArMTcwLDEzIEBAIGJvb2wgbWFuYV9uZWVkX2xvZyhzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgaW50IGVycilcXG4gXFx0aWYgKCFnYylcXG4gXFx0XFx0cmV0dXJuIHRydWU7XFxuIFxcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XFxuIFxcdGh3YyA9IGdjLVxcdTAwM2Vod2MuZHJpdmVyX2RhdGE7XFxuIFxcdGlmIChod2MgXFx1MDAyNlxcdTAwMjYgaHdjLVxcdTAwM2Vod2NfdGltZW91dCA9PSAwKVxcbi1cXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdFxcdG5lZWRfbG9nID0gZmFsc2U7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmdjLVxcdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xcbiBcXG4tXFx0cmV0dXJuIHRydWU7XFxuK1xcdHJldHVybiBuZWVkX2xvZztcXG4gfVxcbiBcXG4gc3RhdGljIGludCBtYW5hX2dkX3F1ZXJ5X21heF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuQEAgLTM2Nyw5ICszNzEsMjcgQEAgc3RhdGljIGludCBtYW5hX2dkX2RldGVjdF9kZXZpY2VzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBpbnQgbWFuYV9nZF9zZW5kX3JlcXVlc3Qoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUzMiByZXFfbGVuLCBjb25zdCB2b2lkICpyZXEsXFxuIFxcdFxcdFxcdCB1MzIgcmVzcF9sZW4sIHZvaWQgKnJlc3ApXFxuIHtcXG4tXFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjID0gZ2MtXFx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcXG4rXFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmdjLVxcdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xcbitcXHRod2MgPSBnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xcbitcXHRpZiAoIWh3Yykge1xcbitcXHRcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdH1cXG4rXFx0aHdjLVxcdTAwM2VhY3RpdmVfc2VuZGVycysrO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcXG4rXFxuK1xcdGVyciA9IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChod2MsIHJlcV9sZW4sIHJlcSwgcmVzcF9sZW4sIHJlc3ApO1xcbiBcXG4tXFx0cmV0dXJuIG1hbmFfaHdjX3NlbmRfcmVxdWVzdChod2MsIHJlcV9sZW4sIHJlcSwgcmVzcF9sZW4sIHJlc3ApO1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XFxuK1xcdGlmICgtLWh3Yy1cXHUwMDNlYWN0aXZlX3NlbmRlcnMgPT0gMClcXG4rXFx0XFx0d2FrZV91cChcXHUwMDI2Z2MtXFx1MDAzZWh3Y19kcmFpbl93YWl0cSk7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmdjLVxcdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX05TKG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0LCBcXFwiTkVUX01BTkFcXFwiKTtcXG4gXFxuQEAgLTYyMiw2ICs2NDQsNyBAQCBzdGF0aWMgdm9pZCBtYW5hX3NlcnZfcmVzZXQoc3RydWN0IHBjaV9kZXYgKnBkZXYpXFxuIHtcXG4gXFx0c3RydWN0IGdkbWFfY29udGV4dCAqZ2MgPSBwY2lfZ2V0X2RydmRhdGEocGRldik7XFxuIFxcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YztcXG4rXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFx0aW50IHJldDtcXG4gXFxuIFxcdGlmICghZ2MpIHtcXG5AQCAtNjMxLDE0ICs2NTQsMTcgQEAgc3RhdGljIHZvaWQgbWFuYV9zZXJ2X3Jlc2V0KHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcXG4gXFx0aHdjID0gZ2MtXFx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcXG4gXFx0aWYgKCFod2MpIHtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XFxuIFxcdFxcdGRldl9lcnIoXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIk1BTkEgc2VydmljZTogbm8gSFdDXFxcXG5cXFwiKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuIFxcdC8qIEhXQyBpcyBub3QgcmVzcG9uZGluZyBpbiB0aGlzIGNhc2UsIHNvIGRvbid0IHdhaXQgKi9cXG4gXFx0aHdjLVxcdTAwM2Vod2NfdGltZW91dCA9IDA7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmdjLVxcdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xcbiBcXG4gXFx0ZGV2X2luZm8oXFx1MDAyNnBkZXYtXFx1MDAzZWRldiwgXFxcIk1BTkEgcmVzZXQgY3ljbGUgc3RhcnRcXFxcblxcXCIpO1xcbiBcXG5AQCAtNzYxLDYgKzc4Nyw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2RfcHJvY2Vzc19lcWUoc3RydWN0IGdkbWFfcXVldWUgKmVxKVxcbiBcXHR1bmlvbiBnZG1hX2VxZV9pbmZvIGVxZV9pbmZvO1xcbiBcXHRlbnVtIGdkbWFfZXFlX3R5cGUgdHlwZTtcXG4gXFx0c3RydWN0IGdkbWFfZXZlbnQgZXZlbnQ7XFxuK1xcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqY3FfdGFibGU7XFxuIFxcdHN0cnVjdCBnZG1hX3F1ZXVlICpjcTtcXG4gXFx0c3RydWN0IGdkbWFfZXFlICplcWU7XFxuIFxcdHUzMiBjcV9pZDtcXG5AQCAtNzcyLDEwICs3OTksMTEgQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9wcm9jZXNzX2VxZShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqZXEpXFxuIFxcdHN3aXRjaCAodHlwZSkge1xcbiBcXHRjYXNlIEdETUFfRVFFX0NPTVBMRVRJT046XFxuIFxcdFxcdGNxX2lkID0gZXFlLVxcdTAwM2VkZXRhaWxzWzBdIFxcdTAwMjYgMHhGRkZGRkY7XFxuLVxcdFxcdGlmIChXQVJOX09OX09OQ0UoY3FfaWQgXFx1MDAzZT0gZ2MtXFx1MDAzZW1heF9udW1fY3FzKSlcXG4rXFx0XFx0Y3FfdGFibGUgPSByY3VfZGVyZWZlcmVuY2UoZ2MtXFx1MDAzZWNxX3RhYmxlKTtcXG4rXFx0XFx0aWYgKFdBUk5fT05fT05DRShjcV9pZCBcXHUwMDNlPSBnYy1cXHUwMDNlbWF4X251bV9jcXMgfHwgIWNxX3RhYmxlKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbi1cXHRcXHRjcSA9IGdjLVxcdTAwM2VjcV90YWJsZVtjcV9pZF07XFxuK1xcdFxcdGNxID0gcmN1X2RlcmVmZXJlbmNlKGNxX3RhYmxlW2NxX2lkXSk7XFxuIFxcdFxcdGlmIChXQVJOX09OX09OQ0UoIWNxIHx8IGNxLVxcdTAwM2V0eXBlICE9IEdETUFfQ1EgfHwgY3EtXFx1MDAzZWlkICE9IGNxX2lkKSlcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbkBAIC0xMDgyLDE1ICsxMTEwLDI4IEBAIHN0YXRpYyB2b2lkIG1hbmFfZ2RfY3JlYXRlX2NxKGNvbnN0IHN0cnVjdCBnZG1hX3F1ZXVlX3NwZWMgKnNwZWMsXFxuIHN0YXRpYyB2b2lkIG1hbmFfZ2RfZGVzdHJveV9jcShzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyxcXG4gXFx0XFx0XFx0ICAgICAgIHN0cnVjdCBnZG1hX3F1ZXVlICpxdWV1ZSlcXG4ge1xcbitcXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSBfX3JjdSAqKmNxX3RhYmxlO1xcbiBcXHR1MzIgaWQgPSBxdWV1ZS1cXHUwMDNlaWQ7XFxuIFxcbi1cXHRpZiAoaWQgXFx1MDAzZT0gZ2MtXFx1MDAzZW1heF9udW1fY3FzKVxcbitcXHQvKiBObyByY3VfcmVhZF9sb2NrKCkgaGVyZTogbWFuYV9nZF9kZXN0cm95X2NxKCkgcnVucyBvbmx5IG9uIHRoZVxcbitcXHQgKiBDUS1kZXN0cm95L3RlYXJkb3duIHBhdGgsIHdoZXJlIHRoZSBiYXNlIGNxX3RhYmxlIGlzIHN0YWJsZS4gIFNlZVxcbitcXHQgKiB0aGUgbGlmZWN5Y2xlIG5vdGUgb24gZ2RtYV9jb250ZXh0OjpjcV90YWJsZSBpbiBnZG1hLmggZm9yIHdoeSB0aGVcXG4rXFx0ICogXFxcInRydWVcXFwiIHByZWRpY2F0ZSBpcyBzb3VuZC5cXG4rXFx0ICovXFxuK1xcdGNxX3RhYmxlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnYy1cXHUwMDNlY3FfdGFibGUsIHRydWUpO1xcbitcXHRpZiAoIWNxX3RhYmxlIHx8IGlkIFxcdTAwM2U9IGdjLVxcdTAwM2VtYXhfbnVtX2NxcylcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4tXFx0aWYgKCFnYy1cXHUwMDNlY3FfdGFibGVbaWRdKVxcbitcXHRpZiAoIXJjdV9hY2Nlc3NfcG9pbnRlcihjcV90YWJsZVtpZF0pKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRnYy1cXHUwMDNlY3FfdGFibGVbaWRdID0gTlVMTDtcXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNxX3RhYmxlW2lkXSwgTlVMTCk7XFxuK1xcbitcXHQvKiBXYWl0IGZvciBpbi1mbGlnaHQgRVEgaGFuZGxlcnMgdGhhdCBtYXkgaGF2ZSBsb2FkZWQgdGhlIG9sZFxcbitcXHQgKiBwb2ludGVyIHZpYSByY3VfZGVyZWZlcmVuY2UoKSB0byBmaW5pc2ggYmVmb3JlIHRoZSBjYWxsZXJcXG4rXFx0ICogZnJlZXMgdGhlIENRIG1lbW9yeS5cXG4rXFx0ICovXFxuK1xcdHN5bmNocm9uaXplX3JjdSgpO1xcbiB9XFxuIFxcbiBpbnQgbWFuYV9nZF9jcmVhdGVfaHdjX3F1ZXVlKHN0cnVjdCBnZG1hX2RldiAqZ2QsXFxuQEAgLTExODUsNiArMTIyNiwxNiBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfY3JlYXRlX2RtYV9yZWdpb24oc3RydWN0IGdkbWFfZGV2ICpnZCxcXG4gXFx0aWYgKCFNQU5BX1BBR0VfQUxJR05FRChnbWktXFx1MDAzZXZpcnRfYWRkcikpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4rXFx0LyogTm8gUkNVIG5lZWRlZDogdGhpcyBydW5zIG9ubHkgb24gdGhlIGRhdGEtcGF0aCBxdWV1ZS1jcmVhdGlvblxcbitcXHQgKiBwYXRoIChtYW5hX2dkX2NyZWF0ZV9tYW5hX2VxL21hbmFfZ2RfY3JlYXRlX21hbmFfd3FfY3EsIGNhbGxlZFxcbitcXHQgKiBieSBtYW5hX2VuIHVuZGVyIFJUTkwgYW5kIGJ5IG1hbmFfaWIgUkRNQSB2ZXJicywgb3IgZHVyaW5nXFxuK1xcdCAqIGluaXQpLiAgRXZlcnkgdGVhcmRvd24gcGF0aCDigJQgbWFuYV9nZF9yZW1vdmUsIG1hbmFfZ2Rfc3VzcGVuZCxcXG4rXFx0ICogYW5kIHRoZSBIV0MgcmVzZXQvc2VydmljZSBwYXRoICh3aGljaCBnb2VzIHRocm91Z2hcXG4rXFx0ICogbWFuYV9nZF9zdXNwZW5kKSDigJQgZHJhaW5zIHRob3NlIGNvbnN1bWVycyB2aWEgbWFuYV9yZG1hX3JlbW92ZSgpXFxuK1xcdCAqICsgbWFuYV9yZW1vdmUoKSBiZWZvcmUgbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKCkgY2xlYXJzXFxuK1xcdCAqIGdjLVxcdTAwM2Vod2MuZHJpdmVyX2RhdGEsIHNvIG5vIGNvbmN1cnJlbnQgZGVzdHJveSBjYW4gcmFjZSB3aXRoXFxuK1xcdCAqIHRoaXMgZGVyZWZlcmVuY2UuXFxuK1xcdCAqL1xcbiBcXHRod2MgPSBnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xcbiBcXHRyZXFfbXNnX3NpemUgPSBzdHJ1Y3Rfc2l6ZShyZXEsIHBhZ2VfYWRkcl9saXN0LCBudW1fcGFnZSk7XFxuIFxcdGlmIChyZXFfbXNnX3NpemUgXFx1MDAzZSBod2MtXFx1MDAzZW1heF9yZXFfbXNnX3NpemUpXFxuQEAgLTEzNzQsNyArMTQyNSwxNyBAQCBpbnQgbWFuYV9nZF92ZXJpZnlfdmZfdmVyc2lvbihzdHJ1Y3QgcGNpX2RldiAqcGRldilcXG4gXFx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4rXFx0LyogTm8gUkNVIG5lZWRlZDogdGhpcyBydW5zIG9ubHkgaW5zaWRlIG1hbmFfZ2Rfc2V0dXAsIG9uIHRoZVxcbitcXHQgKiBwcm9iZSBhbmQgcmVzdW1lIHBhdGhzLiAgVGhlIFBDSS9QTSBjb3JlIGhvbGRzIGRldmljZV9sb2NrXFxuK1xcdCAqIGFjcm9zcyAucHJvYmUvLnJlc3VtZSBhbmQgLnJlbW92ZS8uc3VzcGVuZCwgc28gc2V0dXAgY2Fubm90XFxuK1xcdCAqIG92ZXJsYXAgdGVhcmRvd24gb2YgdGhlIHNhbWUgZGV2aWNlLiAgVGhlIEhXQyByZXNldC9zZXJ2aWNlXFxuK1xcdCAqIHBhdGggaXMgYWRkaXRpb25hbGx5IHNlcmlhbGl6ZWQgYnkgR0NfSU5fU0VSVklDRSBhbmQgcnVuc1xcbitcXHQgKiBzdXNwZW5kIChkZXN0cm95KSB0aGVuIHJlc3VtZSAodGhpcykgc2VxdWVudGlhbGx5IGluIG9uZSB3b3JrXFxuK1xcdCAqIGl0ZW0uICBkcml2ZXJfZGF0YSB3YXMganVzdCBzZXQgYnkgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWxcXG4rXFx0ICogZWFybGllciBpbiB0aGlzIHNhbWUgc2V0dXAgY2FsbCwgc28gaXQgaXMgbGl2ZSBoZXJlLlxcbitcXHQgKi9cXG4gXFx0aHdjID0gZ2MtXFx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcXG4rXFxuIFxcdG1hbmFfZ2RfaW5pdF9yZXFfaGRyKFxcdTAwMjZyZXEuaGRyLCBHRE1BX1ZFUklGWV9WRl9EUklWRVJfVkVSU0lPTixcXG4gXFx0XFx0XFx0ICAgICBzaXplb2YocmVxKSwgc2l6ZW9mKHJlc3ApKTtcXG4gXFxuQEAgLTIzNjQsNiArMjQyNSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9nZF9wcm9iZShzdHJ1Y3QgcGNpX2RldiAqcGRldiwgY29uc3Qgc3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudClcXG4gXFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNmdjLVxcdTAwM2VlcV90ZXN0X2V2ZW50X211dGV4KTtcXG4gXFx0bXV0ZXhfaW5pdChcXHUwMDI2Z2MtXFx1MDAzZWdpY19tdXRleCk7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2spO1xcbiBcXHRwY2lfc2V0X2RydmRhdGEocGRldiwgZ2MpO1xcbiBcXHRnYy1cXHUwMDNlYmFyMF9wYSA9IHBjaV9yZXNvdXJjZV9zdGFydChwZGV2LCAwKTtcXG4gXFx0Z2MtXFx1MDAzZWJhcjBfc2l6ZSA9IHBjaV9yZXNvdXJjZV9sZW4ocGRldiwgMCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuY1xcbmluZGV4IGUzYzI0ZDUwZGFkMDdjLi4wNDgxZDQwNDQzNDI0ZiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmNcXG5AQCAtNCwyNyArNCw1NSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L21hbmEvZ2RtYS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L21hbmEvbWFuYS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L21hbmEvaHdfY2hhbm5lbC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvcGNpLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC92bWFsbG9jLmhcXHUwMDNlXFxuIFxcbisvKiBBY3F1aXJlIGEgZnJlZSBtZXNzYWdlIHNsb3QgZnJvbSB0aGUgaW5mbGlnaHQgYml0bWFwLiAgUmV0dXJuc1xcbisgKiAtRU5PREVWIGlmIHRoZSBjaGFubmVsIGlzIHRvcm4gZG93biwgb3IgLUVUSU1FRE9VVCBpZiBhIHByaW9yIEhXQ1xcbisgKiBjb21tYW5kIGhhcyB0aW1lZCBvdXQgKHByZXNlcnZpbmcgdGhlIGVycm9yIGNvZGUgY2FsbGVycyBleHBlY3QpLlxcbisgKi9cXG4gc3RhdGljIGludCBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2ICptc2dfaWQpXFxuIHtcXG4gXFx0c3RydWN0IGdkbWFfcmVzb3VyY2UgKnIgPSBcXHUwMDI2aHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHR1MzIgaW5kZXg7XFxuIFxcbi1cXHRkb3duKFxcdTAwMjZod2MtXFx1MDAzZXNlbWEpO1xcbitcXHRmb3IgKDs7KSB7XFxuK1xcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZyLVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuIFxcbi1cXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2ci1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRpZiAoIWh3Yy1cXHUwMDNlY2hhbm5lbF91cCB8fCBod2MtXFx1MDAzZWh3Y190aW1lZF9vdXQpIHtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ci1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRcXHRcXHRyZXR1cm4gaHdjLVxcdTAwM2VjaGFubmVsX3VwID8gLUVUSU1FRE9VVCA6IC1FTk9ERVY7XFxuK1xcdFxcdH1cXG4gXFxuLVxcdGluZGV4ID0gZmluZF9maXJzdF96ZXJvX2JpdChod2MtXFx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwLFxcbi1cXHRcXHRcXHRcXHQgICAgaHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzLnNpemUpO1xcbitcXHRcXHRpbmRleCA9IGZpbmRfZmlyc3RfemVyb19iaXQoci1cXHUwMDNlbWFwLCByLVxcdTAwM2VzaXplKTtcXG4rXFx0XFx0aWYgKGluZGV4IFxcdTAwM2Mgci1cXHUwMDNlc2l6ZSkge1xcbitcXHRcXHRcXHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmN0eDtcXG4rXFxuK1xcdFxcdFxcdGJpdG1hcF9zZXQoci1cXHUwMDNlbWFwLCBpbmRleCwgMSk7XFxuK1xcdFxcdFxcdGN0eCA9IFxcdTAwMjZod2MtXFx1MDAzZWNhbGxlcl9jdHhbaW5kZXhdO1xcbitcXHRcXHRcXHRyZWluaXRfY29tcGxldGlvbihcXHUwMDI2Y3R4LVxcdTAwM2Vjb21wX2V2ZW50KTtcXG4rXFx0XFx0XFx0cmVmY291bnRfc2V0KFxcdTAwMjZjdHgtXFx1MDAzZXJlZmNudCwgMSk7XFxuK1xcdFxcdFxcdGN0eC1cXHUwMDNlbXNnX2lkID0gaW5kZXg7XFxuK1xcdFxcdFxcdGN0eC1cXHUwMDNlZXJyb3IgPSAtRUlOUFJPR1JFU1M7XFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnItXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdH1cXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2ci1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXG4tXFx0Yml0bWFwX3NldChod2MtXFx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwLCBpbmRleCwgMSk7XFxuK1xcdFxcdHdhaXRfZXZlbnQoaHdjLVxcdTAwM2Vtc2dfd2FpdHEsXFxuK1xcdFxcdFxcdCAgICFod2MtXFx1MDAzZWNoYW5uZWxfdXAgfHxcXG4rXFx0XFx0XFx0ICAgaHdjLVxcdTAwM2Vod2NfdGltZWRfb3V0IHx8XFxuK1xcdFxcdFxcdCAgICFiaXRtYXBfZnVsbChyLVxcdTAwM2VtYXAsIHItXFx1MDAzZXNpemUpKTtcXG4gXFxuLVxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnItXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0aWYgKCFod2MtXFx1MDAzZWNoYW5uZWxfdXApXFxuK1xcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiBcXG4tXFx0Km1zZ19pZCA9IGluZGV4O1xcbitcXHRcXHRpZiAoaHdjLVxcdTAwM2Vod2NfdGltZWRfb3V0KVxcbitcXHRcXHRcXHRyZXR1cm4gLUVUSU1FRE9VVDtcXG4rXFx0fVxcbiBcXG4rXFx0Km1zZ19pZCA9IGluZGV4O1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMzQsMTAgKzYyLDE3IEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX3B1dF9tc2dfaW5kZXgoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgbXNnX2lkKVxcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4gXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNnItXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4tXFx0Yml0bWFwX2NsZWFyKGh3Yy1cXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5tYXAsIG1zZ19pZCwgMSk7XFxuK1xcdGJpdG1hcF9jbGVhcihyLVxcdTAwM2VtYXAsIG1zZ19pZCwgMSk7XFxuIFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNnItXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFxuLVxcdHVwKFxcdTAwMjZod2MtXFx1MDAzZXNlbWEpO1xcbitcXHR3YWtlX3VwKFxcdTAwMjZod2MtXFx1MDAzZW1zZ193YWl0cSk7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGh3Y19jdHhfcHV0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyxcXG4rXFx0XFx0XFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHgpXFxuK3tcXG4rXFx0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcXHUwMDI2Y3R4LVxcdTAwM2VyZWZjbnQpKVxcbitcXHRcXHRtYW5hX2h3Y19wdXRfbXNnX2luZGV4KGh3YywgY3R4LVxcdTAwM2Vtc2dfaWQpO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG1hbmFfaHdjX3ZlcmlmeV9yZXNwX21zZyhjb25zdCBzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmNhbGxlcl9jdHgsXFxuQEAgLTgzLDYgKzExOCwxNyBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19oYW5kbGVfcmVzcChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXNwX2xlbixcXG4gXFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHg7XFxuIFxcdGludCBlcnI7XFxuIFxcbitcXHQvKiBWYWxpZGF0ZSBtc2dfaWQgaXMgaW4gcmFuZ2UgYmVmb3JlIHVzaW5nIGl0IHRvIGluZGV4IGJpdG1hcFxcbitcXHQgKiBhbmQgY2FsbGVyX2N0eCBhcnJheS4gIE1hbGljaW91cyBmaXJtd2FyZSBjb3VsZCBzZW5kXFxuK1xcdCAqIG91dC1vZi1yYW5nZSBtc2dfaWQgY2F1c2luZyBvdXQtb2YtYm91bmRzIGFjY2Vzcy5cXG4rXFx0ICovXFxuK1xcdGlmIChtc2dfaWQgXFx1MDAzZT0gaHdjLVxcdTAwM2VudW1faW5mbGlnaHRfbXNnKSB7XFxuK1xcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsIFxcXCJod2Nfcng6IG1zZ19pZCAldSBcXHUwMDNlPSBtYXggJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdG1zZ19pZCwgaHdjLVxcdTAwM2VudW1faW5mbGlnaHRfbXNnKTtcXG4rXFx0XFx0bWFuYV9od2NfcG9zdF9yeF93cWUoaHdjLVxcdTAwM2VyeHEsIHJ4X3JlcSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0aWYgKCF0ZXN0X2JpdChtc2dfaWQsIGh3Yy1cXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5tYXApKSB7XFxuIFxcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsIFxcXCJod2Nfcng6IGludmFsaWQgbXNnX2lkID0gJXVcXFxcblxcXCIsIG1zZ19pZCk7XFxuIFxcdFxcdG1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Yy1cXHUwMDNlcnhxLCByeF9yZXEpO1xcbkBAIC05MCwyMiArMTM2LDQ0IEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX2hhbmRsZV9yZXNwKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlc3BfbGVuLFxcbiBcXHR9XFxuIFxcbiBcXHRjdHggPSBod2MtXFx1MDAzZWNhbGxlcl9jdHggKyBtc2dfaWQ7XFxuLVxcdGVyciA9IG1hbmFfaHdjX3ZlcmlmeV9yZXNwX21zZyhjdHgsIHJlc3BfbXNnLCByZXNwX2xlbik7XFxuLVxcdGlmIChlcnIpXFxuLVxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0Y3R4LVxcdTAwM2VzdGF0dXNfY29kZSA9IHJlc3BfbXNnLVxcdTAwM2VzdGF0dXM7XFxuK1xcdC8qIFJlamVjdCByZXNwb25zZXMgbGFyZ2VyIHRoYW4gdGhlIFJYIERNQSBidWZmZXIg4oCUIHRoZSBTR0VcXG4rXFx0ICogbGltaXRzIHdoYXQgaGFyZHdhcmUgY2FuIERNQSwgc28gYW4gb3ZlcnNpemVkIHJlc3BfbGVuXFxuK1xcdCAqIGluZGljYXRlcyBhIGZpcm13YXJlIGJ1Zy4gIEZhaWwgcmF0aGVyIHRoYW4gc2lsZW50bHlcXG4rXFx0ICogdHJ1bmNhdGluZy5cXG4rXFx0ICovXFxuK1xcdGlmIChyZXNwX2xlbiBcXHUwMDNlIHJ4X3JlcS1cXHUwMDNlYnVmX2xlbikge1xcbitcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiSFdDIFJYOiByZXNwX2xlbiAldSBcXHUwMDNlIGJ1Zl9sZW4gJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHJlc3BfbGVuLCByeF9yZXEtXFx1MDAzZWJ1Zl9sZW4pO1xcbitcXHRcXHRyZXNwX2xlbiA9IDA7XFxuK1xcdH1cXG4gXFxuLVxcdG1lbWNweShjdHgtXFx1MDAzZW91dHB1dF9idWYsIHJlc3BfbXNnLCByZXNwX2xlbik7XFxuLW91dDpcXG4tXFx0Y3R4LVxcdTAwM2VlcnJvciA9IGVycjtcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2spO1xcbitcXG4rXFx0ZXJyID0gbWFuYV9od2NfdmVyaWZ5X3Jlc3BfbXNnKGN0eCwgcmVzcF9tc2csIHJlc3BfbGVuKTtcXG4gXFxuLVxcdC8qIE11c3QgcG9zdCByeCB3cWUgYmVmb3JlIGNvbXBsZXRlKCksIG90aGVyd2lzZSB0aGUgbmV4dCByeCBtYXlcXG4tXFx0ICogaGl0IG5vX3dxZSBlcnJvci5cXG4rXFx0aWYgKCFlcnIgXFx1MDAyNlxcdTAwMjYgY3R4LVxcdTAwM2VvdXRwdXRfYnVmKSB7XFxuK1xcdFxcdGN0eC1cXHUwMDNlc3RhdHVzX2NvZGUgPSByZXNwX21zZy1cXHUwMDNlc3RhdHVzO1xcbitcXHRcXHRtZW1jcHkoY3R4LVxcdTAwM2VvdXRwdXRfYnVmLCByZXNwX21zZywgcmVzcF9sZW4pO1xcbitcXHRcXHRjdHgtXFx1MDAzZWVycm9yID0gMDtcXG4rXFx0fSBlbHNlIGlmIChjdHgtXFx1MDAzZW91dHB1dF9idWYpIHtcXG4rXFx0XFx0LyogT25seSBvdmVyd3JpdGUgZXJyb3IgaWYgdGhlIHNlbmRlciBoYXNuJ3QgdGltZWQgb3V0XFxuK1xcdFxcdCAqIG9yIGJlZW4gZm9yY2UtY29tcGxldGVkIGJ5IGRlc3Ryb3kuICBXaGVuIG91dHB1dF9idWZcXG4rXFx0XFx0ICogaXMgTlVMTCwgYSB0ZXJtaW5hbCBlcnJvciAoLUVOT0RFViBvciB0aW1lb3V0KSBoYXNcXG4rXFx0XFx0ICogYWxyZWFkeSBiZWVuIHNldCDigJQgcHJlc2VydmUgaXQgc28gdGhlIHNlbmRlciBkb2Vzbid0XFxuK1xcdFxcdCAqIHNlZSBhIHNwdXJpb3VzIHN1Y2Nlc3MuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjdHgtXFx1MDAzZWVycm9yID0gZXJyO1xcbitcXHR9XFxuK1xcbitcXHQvKiBQb3N0IFJYIFdRRSBiZWZvcmUgY29tcGxldGluZyDigJQgdGhlIG5leHQgcmVzcG9uc2UgbWF5IGFycml2ZVxcbitcXHQgKiBpbW1lZGlhdGVseSBhbmQgbmVlZHMgYSBwb3N0ZWQgYnVmZmVyLlxcbiBcXHQgKi9cXG4gXFx0bWFuYV9od2NfcG9zdF9yeF93cWUoaHdjLVxcdTAwM2VyeHEsIHJ4X3JlcSk7XFxuLVxcbiBcXHRjb21wbGV0ZShcXHUwMDI2Y3R4LVxcdTAwM2Vjb21wX2V2ZW50KTtcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmN0eC1cXHUwMDNlbG9jayk7XFxuK1xcbitcXHRod2NfY3R4X3B1dChod2MsIGN0eCk7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIG1hbmFfaHdjX2luaXRfZXZlbnRfaGFuZGxlcih2b2lkICpjdHgsIHN0cnVjdCBnZG1hX3F1ZXVlICpxX3NlbGYsXFxuQEAgLTE0Niw3ICsyMTQsMTIgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKHZvaWQgKmN0eCwgc3RydWN0IGdkbWFfcXVldWUgKnFfc2VsZixcXG4gXFx0XFx0XFx0YnJlYWs7XFxuIFxcbiBcXHRcXHRjYXNlIEhXQ19JTklUX0RBVEFfUVVFVUVfREVQVEg6XFxuLVxcdFxcdFxcdGh3Yy1cXHUwMDNlaHdjX2luaXRfcV9kZXB0aF9tYXggPSAodTE2KXZhbDtcXG4rXFx0XFx0XFx0LyogSFdDX0lOSVRfREFUQV9RVUVVRV9ERVBUSCBpcyBhIDI0LWJpdCBmaWVsZC4gIEtlZXBcXG4rXFx0XFx0XFx0ICogdGhlIGZ1bGwgZGV2aWNlLXJlcG9ydGVkIHZhbHVlIGhlcmU7IGl0IGlzIGNsYW1wZWRcXG4rXFx0XFx0XFx0ICogYW5kIHZhbGlkYXRlZCBpbiBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbCgpIHJhdGhlclxcbitcXHRcXHRcXHQgKiB0aGFuIHNpbGVudGx5IHRydW5jYXRlZCB0byB1MTYuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRod2MtXFx1MDAzZWh3Y19pbml0X3FfZGVwdGhfbWF4ID0gdmFsO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdGNhc2UgSFdDX0lOSVRfREFUQV9NQVhfUkVRVUVTVDpcXG5AQCAtMjYxLDE5ICszMzQsNjkgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfcnhfZXZlbnRfaGFuZGxlcih2b2lkICpjdHgsIHUzMiBnZG1hX3J4cV9pZCxcXG4gXFxuIFxcdHNnZSA9IChzdHJ1Y3QgZ2RtYV9zZ2UgKikod3FlICsgOCArIGRtYV9vb2ItXFx1MDAzZWlubGluZV9vb2Jfc2l6ZV9kaXY0ICogNCk7XFxuIFxcbi1cXHQvKiBTZWxlY3QgdGhlIFJYIHdvcmsgcmVxdWVzdCBmb3IgdmlydHVhbCBhZGRyZXNzIGFuZCBmb3IgcmVwb3N0aW5nLiAqL1xcbi1cXHRycV9iYXNlX2FkZHIgPSBod2NfcnhxLVxcdTAwM2Vtc2dfYnVmLVxcdTAwM2VtZW1faW5mby5kbWFfaGFuZGxlO1xcbi1cXHRyeF9yZXFfaWR4ID0gKHNnZS1cXHUwMDNlYWRkcmVzcyAtIHJxX2Jhc2VfYWRkcikgLyBod2MtXFx1MDAzZW1heF9yZXFfbXNnX3NpemU7XFxuK1xcdC8qIGlubGluZV9vb2Jfc2l6ZV9kaXY0IGlzIHJlYWQgZnJvbSB0aGUgV1FFIGluIGRldmljZS1hY2Nlc3NpYmxlIFJRXFxuK1xcdCAqIG1lbW9yeSwgc28gYSBtYWxpY2lvdXMgaG9zdCBpbiBhIENWTSAob3IgYnVnZ3kgZmlybXdhcmUpIGNvdWxkIHNldFxcbitcXHQgKiBpdCB0byBwdXNoIHRoZSBTR0UgcGFzdCB0aGUgUlEgYnVmZmVyLiAgQm91bmRzLWNoZWNrIHRoZSBTR0UgaXRcXG4rXFx0ICogbG9jYXRlcyBiZWZvcmUgZGVyZWZlcmVuY2luZyBzZ2UtXFx1MDAzZWFkZHJlc3MgYmVsb3cuICBBIHZhbGlkbHkgcG9zdGVkXFxuK1xcdCAqIFdRRSBrZWVwcyB0aGUgU0dFIGluc2lkZSB0aGUgcmluZyAod29yc3QgY2FzZSBlbmRzIGV4YWN0bHkgYXQgdGhlXFxuK1xcdCAqIGJ1ZmZlciBib3VuZGFyeSk7IHJlamVjdCBhbnl0aGluZyB0aGF0IHdvdWxkIHJlYWQgcGFzdCBpdC4gIFRoZVxcbitcXHQgKiBzbG90IGNhbm5vdCBiZSB0cnVzdGVkIGhlcmUsIHNvIGxlYWsgdGhpcyBSWCBXUUUgcmF0aGVyIHRoYW4gcmVwb3N0XFxuK1xcdCAqIHRoZSB3cm9uZyBvbmUgLS0gYXMgaW4gdGhlIFNHRS1hZGRyZXNzIG1pc21hdGNoIHBhdGggYmVsb3cuXFxuK1xcdCAqL1xcbitcXHRpZiAoKHU4ICopKHNnZSArIDEpIFxcdTAwM2UgKHU4ICopcnEtXFx1MDAzZXF1ZXVlX21lbV9wdHIgKyBycS1cXHUwMDNlcXVldWVfc2l6ZSkge1xcbitcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiSFdDIFJYOiBTR0UgcGFzdCBSUSBidWZmZXIsIG9vYl9kaXY0PSV1XFxcXG5cXFwiLFxcbitcXHRcXHRcXHRkbWFfb29iLVxcdTAwM2VpbmxpbmVfb29iX3NpemVfZGl2NCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbiBcXG4tXFx0aWYgKHJ4X3JlcV9pZHggXFx1MDAzZT0gaHdjX3J4cS1cXHUwMDNlbXNnX2J1Zi1cXHUwMDNlbnVtX3JlcXMpIHtcXG4tXFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkhXQyBSWDogd3JvbmcgcnhfcmVxX2lkeD0lbGx1LCBudW1fcmVxcz0ldVxcXFxuXFxcIixcXG4tXFx0XFx0XFx0cnhfcmVxX2lkeCwgaHdjX3J4cS1cXHUwMDNlbXNnX2J1Zi1cXHUwMDNlbnVtX3JlcXMpO1xcbitcXHQvKiBSZWNvdmVyIHRoZSBvcmlnaW5hdGluZyBSWCBzbG90IGZyb20gdGhlIFNHRSBhZGRyZXNzLiAgT2YgdGhlIHRocmVlXFxuK1xcdCAqIHRlcm1zIGhlcmUgb25seSBzZ2UtXFx1MDAzZWFkZHJlc3MgbGl2ZXMgaW4gZGV2aWNlLWFjY2Vzc2libGUgUlEgbWVtb3J5O1xcbitcXHQgKiBycV9iYXNlX2FkZHIgYW5kIG1heF9yZXNwX21zZ19zaXplIGFyZSBkcml2ZXItcHJpdmF0ZSBjb25zdGFudHMuICBBblxcbitcXHQgKiBpbi1yYW5nZSBidXQgd3JvbmcvdW5hbGlnbmVkIFNHRSAoY29ycnVwdGVkIFdRRSwgb3IgYSBtYWxpY2lvdXMgaG9zdFxcbitcXHQgKiBpbiBhIENWTSkgd291bGQgb3RoZXJ3aXNlIHRydW5jYXRlIG9udG8gYSBuZWlnaGJvdXJpbmcgc2xvdCwgbGV0dGluZ1xcbitcXHQgKiB1cyByZWFkIGEgc3RhbGUgcmVzcG9uc2UgdGhhdCBjb3VsZCBjb21wbGV0ZSB0aGUgd3JvbmcsIHJldXNlZFxcbitcXHQgKiBpbi1mbGlnaHQgcmVxdWVzdC4gIFJlcXVpcmUgdGhlIGluZGV4IHRvIGJlIGluIHJhbmdlIEFORCB0aGUgYWRkcmVzc1xcbitcXHQgKiB0byBleGFjdGx5IG1hdGNoIHRoZSB2YWx1ZSB0aGUgZHJpdmVyIHBvc3RlZCBmb3IgdGhhdCBzbG90LlxcbitcXHQgKi9cXG4rXFx0cnFfYmFzZV9hZGRyID0gaHdjX3J4cS1cXHUwMDNlbXNnX2J1Zi1cXHUwMDNlbWVtX2luZm8uZG1hX2hhbmRsZTtcXG4rXFx0cnhfcmVxX2lkeCA9IChzZ2UtXFx1MDAzZWFkZHJlc3MgLSBycV9iYXNlX2FkZHIpIC8gaHdjLVxcdTAwM2VtYXhfcmVzcF9tc2dfc2l6ZTtcXG4rXFxuK1xcdGlmIChyeF9yZXFfaWR4IFxcdTAwM2U9IGh3Y19yeHEtXFx1MDAzZXF1ZXVlX2RlcHRoKSB7XFxuK1xcdFxcdC8qIENhbm5vdCB0cnVzdCB3aGljaCBXUUUgdGhpcyBpcywgc28gd2UgY2Fubm90IHNhZmVseSByZXBvc3RcXG4rXFx0XFx0ICogaXQ7IGxlYWsgb25lIFJYIFdRRSBhbmQgYmFpbC4gIEFuIG91dC1vZi1yYW5nZSBpbmRleCBtZWFuc1xcbitcXHRcXHQgKiBhIGNvcnJ1cHRlZCBTR0UgZnJvbSBoYXJkd2FyZSAob3IgaG9zdCB0YW1wZXJpbmcpLCBhblxcbitcXHRcXHQgKiB1bnJlY292ZXJhYmxlIGRldmljZSBlcnJvci5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsIFxcXCJIV0MgUlg6IFNHRSBpZHggJWxsdSBvdXQgb2YgcmFuZ2VcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHJ4X3JlcV9pZHgpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuIFxcdHJ4X3JlcSA9IFxcdTAwMjZod2NfcnhxLVxcdTAwM2Vtc2dfYnVmLVxcdTAwM2VyZXFzW3J4X3JlcV9pZHhdO1xcbitcXHRpZiAoc2dlLVxcdTAwM2VhZGRyZXNzICE9ICh1NjQpcnhfcmVxLVxcdTAwM2VidWZfc2dlX2FkZHIpIHtcXG4rXFx0XFx0LyogSW4tcmFuZ2UgaW5kZXggYnV0IHRoZSBhZGRyZXNzIGRvZXMgbm90IG1hdGNoIHdoYXQgdGhlXFxuK1xcdFxcdCAqIGRyaXZlciBwb3N0ZWQgZm9yIHRoYXQgc2xvdDsgdGhlIHNhbWUgdW5yZWNvdmVyYWJsZSBjYXNlLFxcbitcXHRcXHQgKiBzbyBsZWFrIHRoaXMgV1FFIHJhdGhlciB0aGFuIHJlcG9zdCB0aGUgd3Jvbmcgb25lLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkhXQyBSWDogaW52YWxpZCBTR0UgYWRkcmVzcyAlbGx4IChpZHg9JWxsdSlcXFxcblxcXCIsXFxuK1xcdFxcdFxcdHNnZS1cXHUwMDNlYWRkcmVzcywgcnhfcmVxX2lkeCk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXG4gXFx0cmVzcCA9IChzdHJ1Y3QgZ2RtYV9yZXNwX2hkciAqKXJ4X3JlcS1cXHUwMDNlYnVmX3ZhO1xcbiBcXG4rXFx0LyogVmFsaWRhdGUgcmVzcF9sZW4gY292ZXJzIHRoZSByZXNwb25zZSBoZWFkZXIgYmVmb3JlIHJlYWRpbmdcXG4rXFx0ICogaHdjX21zZ19pZC4gIEEgc2hvcnQgcmVzcG9uc2UgbGVhdmVzIHN0YWxlIGRhdGEgZnJvbSB0aGVcXG4rXFx0ICogcHJldmlvdXMgYnVmZmVyIG9jY3VwYW50LCB3aGljaCBjb3VsZCBtYXRjaCBhIGxpdmUgc2xvdCBhbmRcXG4rXFx0ICogY29tcGxldGUgdGhlIHdyb25nIHJlcXVlc3QuXFxuK1xcdCAqL1xcbitcXHRpZiAocnhfb29iLVxcdTAwM2V0eF9vb2JfZGF0YV9zaXplIFxcdTAwM2Mgc2l6ZW9mKCpyZXNwKSkge1xcbitcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiSFdDIFJYOiBzaG9ydCByZXNwX2xlbj0ldVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0cnhfb29iLVxcdTAwM2V0eF9vb2JfZGF0YV9zaXplKTtcXG4rXFx0XFx0bWFuYV9od2NfcG9zdF9yeF93cWUoaHdjX3J4cSwgcnhfcmVxKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHQvKiBSZWFkIG1zZ19pZCBvbmNlIGZyb20gRE1BIGJ1ZmZlciB0byBwcmV2ZW50IFRPQ1RPVTpcXG4gXFx0ICogRE1BIG1lbW9yeSBpcyBzaGFyZWQvdW5lbmNyeXB0ZWQgaW4gQ1ZNcyAtIGhvc3QgY2FuXFxuIFxcdCAqIG1vZGlmeSBpdCBiZXR3ZWVuIHJlYWRzLlxcbkBAIC0yODEsNiArNDA0LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfcnhfZXZlbnRfaGFuZGxlcih2b2lkICpjdHgsIHUzMiBnZG1hX3J4cV9pZCxcXG4gXFx0bXNnX2lkID0gUkVBRF9PTkNFKHJlc3AtXFx1MDAzZXJlc3BvbnNlLmh3Y19tc2dfaWQpO1xcbiBcXHRpZiAobXNnX2lkIFxcdTAwM2U9IGh3Yy1cXHUwMDNlbnVtX2luZmxpZ2h0X21zZykge1xcbiBcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiSFdDIFJYOiB3cm9uZyBtc2dfaWQ9JXVcXFxcblxcXCIsIG1zZ19pZCk7XFxuK1xcdFxcdG1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Y19yeHEsIHJ4X3JlcSk7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG5AQCAtMzg0LDE0ICs1MDgsMjAgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfY29tcF9ldmVudCh2b2lkICpjdHgsIHN0cnVjdCBnZG1hX3F1ZXVlICpxX3NlbGYpXFxuIFxcbiBzdGF0aWMgdm9pZCBtYW5hX2h3Y19kZXN0cm95X2NxKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCBzdHJ1Y3QgaHdjX2NxICpod2NfY3EpXFxuIHtcXG4tXFx0a2ZyZWUoaHdjX2NxLVxcdTAwM2Vjb21wX2J1Zik7XFxuLVxcbiBcXHRpZiAoaHdjX2NxLVxcdTAwM2VnZG1hX2NxKVxcbiBcXHRcXHRtYW5hX2dkX2Rlc3Ryb3lfcXVldWUoZ2MsIGh3Y19jcS1cXHUwMDNlZ2RtYV9jcSk7XFxuIFxcbitcXHQvKiBjb21wX2J1ZiBpcyByZWFjaGVkIG9ubHkgYnkgbWFuYV9od2NfY29tcF9ldmVudCgpLCB3aGljaCB0aGVcXG4rXFx0ICogRVEgaGFuZGxlciBpbnZva2VzIHZpYSBjcV90YWJsZVtpZF0uICBUaGUgQ1EgZGVzdHJveSBhYm92ZVxcbitcXHQgKiBhbHJlYWR5IGNsZWFyZWQgdGhhdCBzbG90IGFuZCByYW4gc3luY2hyb25pemVfcmN1KCksIHNvIG5vXFxuK1xcdCAqIGhhbmRsZXIgY2FuIHJlYWNoIGNvbXBfYnVmIG9uY2UgaXQgcmV0dXJucy4gIERlc3Ryb3lpbmcgdGhlIEVRXFxuK1xcdCAqIGhlcmUgYWRkaXRpb25hbGx5IHRlYXJzIGRvd24gdGhlIElSUSAoZGVmZW5zZSBpbiBkZXB0aCkgYmVmb3JlXFxuK1xcdCAqIGNvbXBfYnVmIGFuZCBod2NfY3EgYXJlIGZyZWVkIGJlbG93LlxcbitcXHQgKi9cXG4gXFx0aWYgKGh3Y19jcS1cXHUwMDNlZ2RtYV9lcSlcXG4gXFx0XFx0bWFuYV9nZF9kZXN0cm95X3F1ZXVlKGdjLCBod2NfY3EtXFx1MDAzZWdkbWFfZXEpO1xcbiBcXG4rXFx0a2ZyZWUoaHdjX2NxLVxcdTAwM2Vjb21wX2J1Zik7XFxuIFxcdGtmcmVlKGh3Y19jcSk7XFxuIH1cXG4gXFxuQEAgLTU2MCw2ICs2OTAsNyBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2NyZWF0ZV93cShzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsXFxuIFxcdGh3Y193cS1cXHUwMDNlZ2RtYV93cSA9IHF1ZXVlO1xcbiBcXHRod2Nfd3EtXFx1MDAzZXF1ZXVlX2RlcHRoID0gcV9kZXB0aDtcXG4gXFx0aHdjX3dxLVxcdTAwM2Vod2NfY3EgPSBod2NfY3E7XFxuK1xcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZod2Nfd3EtXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0ZXJyID0gbWFuYV9od2NfYWxsb2NfZG1hX2J1Zihod2MsIHFfZGVwdGgsIG1heF9tc2dfc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2aHdjX3dxLVxcdTAwM2Vtc2dfYnVmKTtcXG5AQCAtNTc3LDcgKzcwOCw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfY3JlYXRlX3dxKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyxcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBtYW5hX2h3Y19wb3N0X3R4X3dxZShjb25zdCBzdHJ1Y3QgaHdjX3dxICpod2NfdHhxLFxcbitzdGF0aWMgaW50IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKHN0cnVjdCBod2Nfd3EgKmh3Y190eHEsXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBod2Nfd29ya19yZXF1ZXN0ICpyZXEsXFxuIFxcdFxcdFxcdFxcdHUzMiBkZXN0X3ZpcnRfcnFfaWQsIHUzMiBkZXN0X3ZpcnRfcmNxX2lkLFxcbiBcXHRcXHRcXHRcXHRib29sIGRlc3RfcGYpXFxuQEAgLTYxNiw3ICs3NDcsMTEgQEAgc3RhdGljIGludCBtYW5hX2h3Y19wb3N0X3R4X3dxZShjb25zdCBzdHJ1Y3QgaHdjX3dxICpod2NfdHhxLFxcbiBcXHRyZXEtXFx1MDAzZXdxZV9yZXEuaW5saW5lX29vYl9kYXRhID0gdHhfb29iO1xcbiBcXHRyZXEtXFx1MDAzZXdxZV9yZXEuY2xpZW50X2RhdGFfdW5pdCA9IDA7XFxuIFxcbitcXHQvKiBTZXJpYWxpemUgV1FFIHBvc3Rpbmcg4oCUIG11bHRpcGxlIHNlbmRlcnMgbWF5IGNhbGwgY29uY3VycmVudGx5LiAqL1xcbitcXHRzcGluX2xvY2soXFx1MDAyNmh3Y190eHEtXFx1MDAzZWxvY2spO1xcbiBcXHRlcnIgPSBtYW5hX2dkX3Bvc3RfYW5kX3JpbmcoaHdjX3R4cS1cXHUwMDNlZ2RtYV93cSwgXFx1MDAyNnJlcS1cXHUwMDNld3FlX3JlcSwgTlVMTCk7XFxuK1xcdHNwaW5fdW5sb2NrKFxcdTAwMjZod2NfdHhxLVxcdTAwM2Vsb2NrKTtcXG4rXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdGRldl9lcnIoZGV2LCBcXFwiRmFpbGVkIHRvIHBvc3QgV1FFIG9uIEhXQyBTUTogJWRcXFxcblxcXCIsIGVycik7XFxuIFxcdHJldHVybiBlcnI7XFxuQEAgLTYyNyw3ICs3NjIsNyBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfaW5mbGlnaHRfbXNnKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyxcXG4ge1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0c2VtYV9pbml0KFxcdTAwMjZod2MtXFx1MDAzZXNlbWEsIG51bV9tc2cpO1xcbitcXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFxcdTAwMjZod2MtXFx1MDAzZW1zZ193YWl0cSk7XFxuIFxcbiBcXHRlcnIgPSBtYW5hX2dkX2FsbG9jX3Jlc19tYXAobnVtX21zZywgXFx1MDAyNmh3Yy1cXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcyk7XFxuIFxcdGlmIChlcnIpXFxuQEAgLTY1NywyMyArNzkyLDQwIEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfdGVzdF9jaGFubmVsKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXFxuIFxcdGlmICghY3R4KVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBxX2RlcHRoOyArK2kpXFxuK1xcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBxX2RlcHRoOyArK2kpIHtcXG4rXFx0XFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmN0eFtpXS5sb2NrKTtcXG4gXFx0XFx0aW5pdF9jb21wbGV0aW9uKFxcdTAwMjZjdHhbaV0uY29tcF9ldmVudCk7XFxuK1xcdH1cXG4gXFxuIFxcdGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCA9IGN0eDtcXG4gXFxuLVxcdHJldHVybiBtYW5hX2dkX3Rlc3RfZXEoZ2MsIGh3Yy1cXHUwMDNlY3EtXFx1MDAzZWdkbWFfZXEpO1xcbitcXHQvKiBjaGFubmVsX3VwIG11c3QgYmUgc2V0IGJlZm9yZSB0aGUgdGVzdCBFUSByZXF1ZXN0LCBiZWNhdXNlXFxuK1xcdCAqIHRoZSByZXF1ZXN0IGdvZXMgdGhyb3VnaCBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KCkgd2hpY2hcXG4rXFx0ICogY2hlY2tzIGNoYW5uZWxfdXAuICBjYWxsZXJfY3R4IGlzIGFsbG9jYXRlZCBhYm92ZSwgc29cXG4rXFx0ICogY29uY3VycmVudCBhY2Nlc3MgdG8gYSBOVUxMIGNhbGxlcl9jdHggaXMgbm90IHBvc3NpYmxlLlxcbitcXHQgKi9cXG4rXFx0aHdjLVxcdTAwM2VjaGFubmVsX3VwID0gdHJ1ZTtcXG4rXFxuK1xcdGVyciA9IG1hbmFfZ2RfdGVzdF9lcShnYywgaHdjLVxcdTAwM2VjcS1cXHUwMDNlZ2RtYV9lcSk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGh3Yy1cXHUwMDNlY2hhbm5lbF91cCA9IGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgdTE2ICpxX2RlcHRoLFxcbitzdGF0aWMgaW50IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MzIgKnFfZGVwdGgsXFxuIFxcdFxcdFxcdFxcdCAgICAgIHUzMiAqbWF4X3JlcV9tc2dfc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgdTMyICptYXhfcmVzcF9tc2dfc2l6ZSlcXG4ge1xcbitcXHQvKiBObyBSQ1UgbmVlZGVkOiBjYWxsZWQgb25seSBmcm9tIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsXFxuK1xcdCAqIGR1cmluZyBpbml0LCBiZWZvcmUgdGhlIGNoYW5uZWwgaXMgcHVibGlzaGVkIHRvIHNlbmRlcnMuXFxuK1xcdCAqL1xcbiBcXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MgPSBnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xcbiBcXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSAqcnEgPSBod2MtXFx1MDAzZXJ4cS1cXHUwMDNlZ2RtYV93cTtcXG4gXFx0c3RydWN0IGdkbWFfcXVldWUgKnNxID0gaHdjLVxcdTAwM2V0eHEtXFx1MDAzZWdkbWFfd3E7XFxuIFxcdHN0cnVjdCBnZG1hX3F1ZXVlICplcSA9IGh3Yy1cXHUwMDNlY3EtXFx1MDAzZWdkbWFfZXE7XFxuIFxcdHN0cnVjdCBnZG1hX3F1ZXVlICpjcSA9IGh3Yy1cXHUwMDNlY3EtXFx1MDAzZWdkbWFfY3E7XFxuK1xcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqY3FfdGFibGU7XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHRpbml0X2NvbXBsZXRpb24oXFx1MDAyNmh3Yy1cXHUwMDNlaHdjX2luaXRfZXFlX2NvbXApO1xcbkBAIC02ODcsMjQgKzgzOSw1MSBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MTYgKnFfZGVwdGgsXFxuIFxcdGlmIChlcnIpXFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcbi1cXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcXHUwMDI2aHdjLVxcdTAwM2Vod2NfaW5pdF9lcWVfY29tcCwgNjAgKiBIWikpXFxuLVxcdFxcdHJldHVybiAtRVRJTUVET1VUO1xcbitcXHQvKiBzZXR1cF9od2MgYWN0aXZhdGVkIE1TVCBlbnRyaWVzIOKAlCBoYXJkd2FyZSBjYW4gbm93IERNQSBpbnRvXFxuK1xcdCAqIG91ciBxdWV1ZSBidWZmZXJzLiAgSWYgYW55dGhpbmcgYmVsb3cgZmFpbHMsIHdlIG11c3QgdGVhclxcbitcXHQgKiBkb3duIGJlZm9yZSByZXR1cm5pbmcgc28gdGhlIGNhbGxlciBkb2Vzbid0IG5lZWQgdG8gdHJhY2tcXG4rXFx0ICogd2hldGhlciBzZXR1cF9od2Mgc3VjY2VlZGVkLlxcbitcXHQgKi9cXG4rXFx0aHdjLVxcdTAwM2VzZXR1cF9hY3RpdmUgPSB0cnVlO1xcbitcXG4rXFx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXFx1MDAyNmh3Yy1cXHUwMDNlaHdjX2luaXRfZXFlX2NvbXAsIDYwICogSFopKSB7XFxuK1xcdFxcdGVyciA9IC1FVElNRURPVVQ7XFxuK1xcdFxcdGdvdG8gdGVhcmRvd247XFxuK1xcdH1cXG4gXFxuIFxcdCpxX2RlcHRoID0gaHdjLVxcdTAwM2Vod2NfaW5pdF9xX2RlcHRoX21heDtcXG4gXFx0Km1heF9yZXFfbXNnX3NpemUgPSBod2MtXFx1MDAzZWh3Y19pbml0X21heF9yZXFfbXNnX3NpemU7XFxuIFxcdCptYXhfcmVzcF9tc2dfc2l6ZSA9IGh3Yy1cXHUwMDNlaHdjX2luaXRfbWF4X3Jlc3BfbXNnX3NpemU7XFxuIFxcbiBcXHQvKiBCb3RoIHdlcmUgc2V0IGluIG1hbmFfaHdjX2luaXRfZXZlbnRfaGFuZGxlcigpLiAqL1xcbi1cXHRpZiAoV0FSTl9PTihjcS1cXHUwMDNlaWQgXFx1MDAzZT0gZ2MtXFx1MDAzZW1heF9udW1fY3FzKSlcXG4tXFx0XFx0cmV0dXJuIC1FUFJPVE87XFxuK1xcdGlmIChXQVJOX09OKGNxLVxcdTAwM2VpZCBcXHUwMDNlPSBnYy1cXHUwMDNlbWF4X251bV9jcXMpKSB7XFxuK1xcdFxcdGVyciA9IC1FUFJPVE87XFxuK1xcdFxcdGdvdG8gdGVhcmRvd247XFxuK1xcdH1cXG4gXFxuLVxcdGdjLVxcdTAwM2VjcV90YWJsZSA9IHZjYWxsb2MoZ2MtXFx1MDAzZW1heF9udW1fY3FzLCBzaXplb2Yoc3RydWN0IGdkbWFfcXVldWUgKikpO1xcbi1cXHRpZiAoIWdjLVxcdTAwM2VjcV90YWJsZSlcXG4tXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdGNxX3RhYmxlID0gdmNhbGxvYyhnYy1cXHUwMDNlbWF4X251bV9jcXMsIHNpemVvZigqY3FfdGFibGUpKTtcXG4rXFx0aWYgKCFjcV90YWJsZSkge1xcbitcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRnb3RvIHRlYXJkb3duO1xcbitcXHR9XFxuIFxcbi1cXHRnYy1cXHUwMDNlY3FfdGFibGVbY3EtXFx1MDAzZWlkXSA9IGNxO1xcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIoY3FfdGFibGVbY3EtXFx1MDAzZWlkXSwgY3EpO1xcbitcXHQvKiBQdWJsaXNoIHRoZSBmdWxseS1pbml0aWFsaXNlZCB0YWJsZSBsYXN0OyBwYWlycyB3aXRoIHRoZVxcbitcXHQgKiByY3VfZGVyZWZlcmVuY2UoZ2MtXFx1MDAzZWNxX3RhYmxlKSBpbiBtYW5hX2dkX3Byb2Nlc3NfZXFlKCkuXFxuK1xcdCAqL1xcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIoZ2MtXFx1MDAzZWNxX3RhYmxlLCBjcV90YWJsZSk7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK3RlYXJkb3duOlxcbitcXHR7XFxuK1xcdFxcdGludCB0ZF9lcnIgPSBtYW5hX3NtY190ZWFyZG93bl9od2MoXFx1MDAyNmdjLVxcdTAwM2VzaG1fY2hhbm5lbCwgZmFsc2UpO1xcbitcXG4rXFx0XFx0aWYgKCF0ZF9lcnIpXFxuK1xcdFxcdFxcdGh3Yy1cXHUwMDNlc2V0dXBfYWN0aXZlID0gZmFsc2U7XFxuK1xcbitcXHRcXHRyZXR1cm4gdGRfZXJyID8gdGRfZXJyIDogZXJyO1xcbitcXHR9XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgbWFuYV9od2NfaW5pdF9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCxcXG5AQCAtNzEyLDYgKzg5MSwxMiBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXFxuIHtcXG4gXFx0aW50IGVycjtcXG4gXFxuK1xcdC8qIENRIGRlcHRoIGlzIHFfZGVwdGggKiAyIChTUSArIFJRKSBwYXNzZWQgYXMgdTE2IHRvIGNyZWF0ZV9jcS5cXG4rXFx0ICogQ2FwIHRvIHByZXZlbnQgdTE2IHRydW5jYXRpb24uXFxuK1xcdCAqL1xcbitcXHRpZiAocV9kZXB0aCBcXHUwMDNlIFUxNl9NQVggLyAyKVxcbitcXHRcXHRxX2RlcHRoID0gVTE2X01BWCAvIDI7XFxuK1xcbiBcXHRlcnIgPSBtYW5hX2h3Y19pbml0X2luZmxpZ2h0X21zZyhod2MsIHFfZGVwdGgpO1xcbiBcXHRpZiAoZXJyKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbkBAIC03MjgsMTQgKzkxMywxNCBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXHR9XFxuIFxcbi1cXHRlcnIgPSBtYW5hX2h3Y19jcmVhdGVfd3EoaHdjLCBHRE1BX1JRLCBxX2RlcHRoLCBtYXhfcmVxX21zZ19zaXplLFxcbitcXHRlcnIgPSBtYW5hX2h3Y19jcmVhdGVfd3EoaHdjLCBHRE1BX1JRLCBxX2RlcHRoLCBtYXhfcmVzcF9tc2dfc2l6ZSxcXG4gXFx0XFx0XFx0XFx0IGh3Yy1cXHUwMDNlY3EsIFxcdTAwMjZod2MtXFx1MDAzZXJ4cSk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byBjcmVhdGUgSFdDIFJROiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdGVyciA9IG1hbmFfaHdjX2NyZWF0ZV93cShod2MsIEdETUFfU1EsIHFfZGVwdGgsIG1heF9yZXNwX21zZ19zaXplLFxcbitcXHRlcnIgPSBtYW5hX2h3Y19jcmVhdGVfd3EoaHdjLCBHRE1BX1NRLCBxX2RlcHRoLCBtYXhfcmVxX21zZ19zaXplLFxcbiBcXHRcXHRcXHRcXHQgaHdjLVxcdTAwM2VjcSwgXFx1MDAyNmh3Yy1cXHUwMDNldHhxKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIGNyZWF0ZSBIV0MgU1E6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbkBAIC03NDQsNiArOTI5LDcgQEAgc3RhdGljIGludCBtYW5hX2h3Y19pbml0X3F1ZXVlcyhzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLFxcbiBcXG4gXFx0aHdjLVxcdTAwM2VudW1faW5mbGlnaHRfbXNnID0gcV9kZXB0aDtcXG4gXFx0aHdjLVxcdTAwM2VtYXhfcmVxX21zZ19zaXplID0gbWF4X3JlcV9tc2dfc2l6ZTtcXG4rXFx0aHdjLVxcdTAwM2VtYXhfcmVzcF9tc2dfc2l6ZSA9IG1heF9yZXNwX21zZ19zaXplO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIG91dDpcXG5AQCAtNzUxLDEyICs5MzcsNjIgQEAgc3RhdGljIGludCBtYW5hX2h3Y19pbml0X3F1ZXVlcyhzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUxNiBxX2RlcHRoLFxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbisvKiBUZWFyIGRvd24gYWxsIEhXQyBxdWV1ZXMgYW5kIGZyZWUgYXNzb2NpYXRlZCByZXNvdXJjZXMuICBVc2VkIG9uXFxuKyAqIHRoZSByZWluaXQtd2l0aC1oaWdoZXItcXVldWUtZGVwdGggcGF0aCBhbmQgcmVpbml0IGZhbGxiYWNrLlxcbisgKlxcbisgKiBQUkVDT05ESVRJT046IG11c3QgYmUgY2FsbGVkIG9ubHkgZHVyaW5nIGNoYW5uZWwgYnJpbmctdXAgaW5cXG4rICogbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwoKSwgYmVmb3JlIHRoZSBjaGFubmVsIGlzIHB1Ymxpc2hlZCB0b1xcbisgKiBzZW5kZXJzLiAgVGhlcmUgdGhlIHNldHVwIHRocmVhZCBpcyBlZmZlY3RpdmVseSBzaW5nbGUtdGhyZWFkZWRcXG4rICogKHNlcmlhbGl6ZWQgYWdhaW5zdCB0ZWFyZG93biBieSB0aGUgUENJL1BNIGRldmljZV9sb2NrIG9yLCBvbiB0aGVcXG4rICogc2VydmljZSBwYXRoLCBHQ19JTl9TRVJWSUNFLCB3aXRoIHRoZSBkYXRhIHBhdGggbm90IHlldCBwcm9iZWQpLFxcbisgKiBjaGFubmVsX3VwIGlzIHN0aWxsIGZhbHNlLCBjYWxsZXJfY3R4IGlzIG5vdCB5ZXQgYWxsb2NhdGVkLCBhbmRcXG4rICogYWN0aXZlX3NlbmRlcnMgaXMgMCDigJQgc28gbm8gY29uY3VycmVudCByZXF1ZXN0L3Jlc3BvbnNlIHVzZXIgY2FuXFxuKyAqIHRvdWNoIHRoZXNlIHF1ZXVlcy4gIFRoYXQgaXMgd2h5IHRoaXMgc2tpcHMgdGhlIGh3Y19sb2NrLXByb3RlY3RlZFxcbisgKiBkcml2ZXJfZGF0YSBjbGVhciArIGFjdGl2ZV9zZW5kZXJzIGRyYWluIHRoYXRcXG4rICogbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKCkgbmVlZHMgZm9yIHRoZSBydW50aW1lIHRlYXJkb3duIHJhY2U7XFxuKyAqIG9ubHkgdGhlIENRLWZpcnN0IG9yZGVyaW5nIGJlbG93ICh0byBmZW5jZSBvZmYgYSBwZW5kaW5nIGludGVycnVwdClcXG4rICogaXMgcmVxdWlyZWQuICBDYWxsaW5nIHRoaXMgb24gYSBsaXZlLCBwdWJsaXNoZWQgY2hhbm5lbCB3b3VsZCBiZSBhXFxuKyAqIHVzZS1hZnRlci1mcmVlLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgbWFuYV9od2NfZGVzdHJveV9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjKVxcbit7XFxuK1xcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gaHdjLVxcdTAwM2VnZG1hX2Rldi1cXHUwMDNlZ2RtYV9jb250ZXh0O1xcbitcXG4rXFx0LyogRGVzdHJveSBDUSBmaXJzdCB0byBkZXJlZ2lzdGVyIHRoZSBFUSBmcm9tIHRoZSBpbnRlcnJ1cHRcXG4rXFx0ICogaGFuZGxlciBsaXN0IGJlZm9yZSBmcmVlaW5nIGNhbGxlcl9jdHgsIFRYUSwgb3IgUlhRIG1lbW9yeS5cXG4rXFx0ICogQSBwZW5kaW5nIGludGVycnVwdCBoYW5kbGVyIGNvdWxkIHN0aWxsIHJlYWNoIGhhbmRsZV9yZXNwKClcXG4rXFx0ICogd2hpY2ggZGVyZWZlcmVuY2VzIGNhbGxlcl9jdHguXFxuK1xcdCAqL1xcbitcXHRpZiAoaHdjLVxcdTAwM2VjcSkge1xcbitcXHRcXHRtYW5hX2h3Y19kZXN0cm95X2NxKGdjLCBod2MtXFx1MDAzZWNxKTtcXG4rXFx0XFx0aHdjLVxcdTAwM2VjcSA9IE5VTEw7XFxuK1xcdH1cXG4rXFxuK1xcdGtmcmVlKGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCk7XFxuK1xcdGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCA9IE5VTEw7XFxuK1xcbitcXHRpZiAoaHdjLVxcdTAwM2V0eHEpIHtcXG4rXFx0XFx0bWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy1cXHUwMDNldHhxKTtcXG4rXFx0XFx0aHdjLVxcdTAwM2V0eHEgPSBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaHdjLVxcdTAwM2VyeHEpIHtcXG4rXFx0XFx0bWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy1cXHUwMDNlcnhxKTtcXG4rXFx0XFx0aHdjLVxcdTAwM2VyeHEgPSBOVUxMO1xcbitcXHR9XFxuK1xcbitcXHRtYW5hX2dkX2ZyZWVfcmVzX21hcChcXHUwMDI2aHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzKTtcXG4rXFx0aHdjLVxcdTAwM2VudW1faW5mbGlnaHRfbXNnID0gMDtcXG4rfVxcbitcXG4gaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxcbiB7XFxuIFxcdHUzMiBtYXhfcmVxX21zZ19zaXplLCBtYXhfcmVzcF9tc2dfc2l6ZTtcXG4gXFx0c3RydWN0IGdkbWFfZGV2ICpnZCA9IFxcdTAwMjZnYy1cXHUwMDNlaHdjO1xcbiBcXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XFxuLVxcdHUxNiBxX2RlcHRoX21heDtcXG4rXFx0c3RydWN0IGdkbWFfcXVldWUgX19yY3UgKipvbGRfY3FfdGFibGU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuK1xcdHUzMiBxX2RlcHRoX21heDtcXG4gXFx0aW50IGVycjtcXG4gXFxuIFxcdGh3YyA9IGt6YWxsb2Nfb2JqKCpod2MpO1xcbkBAIC03NjQsMTAgKzEwMDAsMTEgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdGdkLVxcdTAwM2VnZG1hX2NvbnRleHQgPSBnYztcXG4tXFx0Z2QtXFx1MDAzZWRyaXZlcl9kYXRhID0gaHdjO1xcbiBcXHRod2MtXFx1MDAzZWdkbWFfZGV2ID0gZ2Q7XFxuIFxcdGh3Yy1cXHUwMDNlZGV2ID0gZ2MtXFx1MDAzZWRldjtcXG4gXFx0aHdjLVxcdTAwM2Vod2NfdGltZW91dCA9IEhXX0NIQU5ORUxfV0FJVF9SRVNPVVJDRV9USU1FT1VUX01TO1xcbitcXHRod2MtXFx1MDAzZWFjdGl2ZV9zZW5kZXJzID0gMDtcXG4rXFx0aW5pdF93YWl0cXVldWVfaGVhZChcXHUwMDI2Z2MtXFx1MDAzZWh3Y19kcmFpbl93YWl0cSk7XFxuIFxcbiBcXHQvKiBIV0MncyBpbnN0YW5jZSBudW1iZXIgaXMgYWx3YXlzIDAuICovXFxuIFxcdGdkLVxcdTAwM2VkZXZfaWQuYXNfdWludDMyID0gMDtcXG5AQCAtNzc2LDYgKzEwMTMsMTUgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxcbiBcXHRnZC1cXHUwMDNlcGRpZCA9IElOVkFMSURfUERJRDtcXG4gXFx0Z2QtXFx1MDAzZWRvb3JiZWxsID0gSU5WQUxJRF9ET09SQkVMTDtcXG4gXFxuK1xcdC8qIFB1Ymxpc2ggZHJpdmVyX2RhdGEgbGFzdCwgdW5kZXIgaHdjX2xvY2s6IHRoZSBsb2NrIG9yZGVycyB0aGUgaHdjXFxuK1xcdCAqIGluaXRpYWxpc2F0aW9uIGFib3ZlIGJlZm9yZSB0aGUgcG9pbnRlciBiZWNvbWVzIHZpc2libGUgYW5kXFxuK1xcdCAqIHNlcmlhbGlzZXMgdGhlIHB1Ymxpc2ggYWdhaW5zdCB0aGUgY29udHJvbC1wbGFuZSByZWFkZXJzIGluXFxuK1xcdCAqIG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCksIG1hbmFfbmVlZF9sb2coKSBhbmQgbWFuYV9zZXJ2X3Jlc2V0KCkuXFxuK1xcdCAqL1xcbitcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XFxuK1xcdGdjLVxcdTAwM2Vod2MuZHJpdmVyX2RhdGEgPSBod2M7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmdjLVxcdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xcbitcXG4gXFx0LyogbWFuYV9od2NfaW5pdF9xdWV1ZXMoKSBvbmx5IGNyZWF0ZXMgdGhlIHJlcXVpcmVkIGRhdGEgc3RydWN0dXJlcyxcXG4gXFx0ICogYW5kIGRvZXNuJ3QgdG91Y2ggdGhlIEhXQyBkZXZpY2UuXFxuIFxcdCAqL1xcbkBAIC03OTQsOCArMTA0MCwxMzAgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4rXFx0LyogVGhlIGNoYW5uZWwgd2FzIGJvb3RzdHJhcHBlZCBhdCBhIG1pbmltYWwgcXVldWUgZGVwdGguICBJZiB0aGVcXG4rXFx0ICogZGV2aWNlIHJlcG9ydHMgYSBoaWdoZXIgbWF4aW11bSwgdGVhciBkb3duIGFuZCByZWJ1aWxkIHdpdGhcXG4rXFx0ICogdGhlIGxhcmdlciBkZXB0aCBzbyBtb3JlIEhXQyBjb21tYW5kcyBjYW4gYmUgaW4gZmxpZ2h0LlxcbitcXHQgKi9cXG4rXFx0aWYgKHFfZGVwdGhfbWF4IFxcdTAwM2UgSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEgpIHtcXG4rXFx0XFx0LyogcV9kZXB0aF9tYXggbm93IGNhcnJpZXMgdGhlIGZ1bGwgZGV2aWNlLXJlcG9ydGVkIHZhbHVlXFxuK1xcdFxcdCAqIChIV0NfSU5JVF9EQVRBX1FVRVVFX0RFUFRIIGlzIDI0LWJpdCkuICBDbGFtcCBpdCB0byB0aGVcXG4rXFx0XFx0ICogZGVwdGggdGhlIHJlc3Qgb2YgdGhlIGRyaXZlciBzdXBwb3J0cyDigJQgY3JlYXRlX2NxKCkgdGFrZXNcXG4rXFx0XFx0ICogcV9kZXB0aCAqIDIgYXMgYSB1MTYg4oCUIGJlZm9yZSB0aGUgb3ZlcmZsb3cgY2hlY2sgYmVsb3csIHNvXFxuK1xcdFxcdCAqIGFuIG92ZXItbGFyZ2UgYnV0IG90aGVyd2lzZS12YWxpZCBkZXB0aCBpcyByZWR1Y2VkIHRvIHRoZVxcbitcXHRcXHQgKiBtYXhpbXVtIGluc3RlYWQgb2Ygd3JhcHBpbmcgb3IgYmVpbmcgcmVqZWN0ZWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAocV9kZXB0aF9tYXggXFx1MDAzZSBVMTZfTUFYIC8gMilcXG4rXFx0XFx0XFx0cV9kZXB0aF9tYXggPSBVMTZfTUFYIC8gMjtcXG4rXFxuK1xcdFxcdC8qIFNhbml0eS1jaGVjayBkZXZpY2UtcmVwb3J0ZWQgdmFsdWVzIGJlZm9yZSB1c2luZyB0aGVtXFxuK1xcdFxcdCAqIHRvIHNpemUgRE1BIGFsbG9jYXRpb25zLiAgRW5mb3JjZSBwcm90b2NvbCBtaW5pbXVtc1xcbitcXHRcXHQgKiBmb3IgbWVzc2FnZSBzaXplcyBhbmQgY2hlY2sgdGhhdCBxX2RlcHRoICogbWF4X21zZ19zaXplXFxuK1xcdFxcdCAqIHBsdXMgYWxpZ25tZW50IGhlYWRyb29tIGZpdHMgaW4gdTMyIChmb3JcXG4rXFx0XFx0ICogbWFuYV9od2NfYWxsb2NfZG1hX2J1ZidzIE1BTkFfUEFHRV9BTElHTikuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoIW1heF9yZXFfbXNnX3NpemUgfHwgIW1heF9yZXNwX21zZ19zaXplIHx8XFxuK1xcdFxcdCAgICBtYXhfcmVxX21zZ19zaXplIFxcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBnZG1hX3JlcV9oZHIpIHx8XFxuK1xcdFxcdCAgICBtYXhfcmVzcF9tc2dfc2l6ZSBcXHUwMDNjIHNpemVvZihzdHJ1Y3QgZ2RtYV9yZXNwX2hkcikgfHxcXG4rXFx0XFx0ICAgICh1NjQpcV9kZXB0aF9tYXggKiBtYXhfcmVxX21zZ19zaXplIFxcdTAwM2VcXG4rXFx0XFx0XFx0VTMyX01BWCAtIE1BTkFfUEFHRV9TSVpFIHx8XFxuK1xcdFxcdCAgICAodTY0KXFfZGVwdGhfbWF4ICogbWF4X3Jlc3BfbXNnX3NpemUgXFx1MDAzZVxcbitcXHRcXHRcXHRVMzJfTUFYIC0gTUFOQV9QQUdFX1NJWkUpIHtcXG4rXFx0XFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFxcIkhXQzogaW52YWxpZCBkaW1zIHE9JXUgcmVxPSV1IHJlc3A9JXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdHFfZGVwdGhfbWF4LCBtYXhfcmVxX21zZ19zaXplLFxcbitcXHRcXHRcXHRcXHRtYXhfcmVzcF9tc2dfc2l6ZSk7XFxuK1xcdFxcdFxcdHFfZGVwdGhfbWF4ID0gSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEg7XFxuK1xcdFxcdFxcdGdvdG8gc2tpcF9yZWluaXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGVyciA9IG1hbmFfc21jX3RlYXJkb3duX2h3YyhcXHUwMDI2Z2MtXFx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0LyogS2VlcCB1c2luZyB0aGUgYm9vdHN0cmFwLWRlcHRoIGNoYW5uZWwuICovXFxuK1xcdFxcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcXCJGYWlsZWQgdG8gdGVhcmRvd24gSFdDIGZvciByZWluaXQ6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRlcnIpO1xcbitcXHRcXHRcXHRxX2RlcHRoX21heCA9IEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRIO1xcbitcXHRcXHRcXHRnb3RvIHNraXBfcmVpbml0O1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHRod2MtXFx1MDAzZXNldHVwX2FjdGl2ZSA9IGZhbHNlO1xcbitcXG4rXFx0XFx0LyogRGVzdHJveSBxdWV1ZXMgZmlyc3Qg4oCUIG1hbmFfZ2RfZGVzdHJveV9jcSBpbnNpZGVcXG4rXFx0XFx0ICogdW5wdWJsaXNoZXMgdGhlIENRIGZyb20gY3FfdGFibGUgdmlhXFxuK1xcdFxcdCAqIHJjdV9hc3NpZ25fcG9pbnRlcihOVUxMKSArIHN5bmNocm9uaXplX3JjdS5cXG4rXFx0XFx0ICogTXVzdCBoYXBwZW4gd2hpbGUgY3FfdGFibGUgaXMgc3RpbGwgdmFsaWQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRtYW5hX2h3Y19kZXN0cm95X3F1ZXVlcyhod2MpO1xcbitcXG4rXFx0XFx0b2xkX2NxX3RhYmxlID0gcmN1X3JlcGxhY2VfcG9pbnRlcihnYy1cXHUwMDNlY3FfdGFibGUsIE5VTEwsIHRydWUpO1xcbitcXHRcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4rXFx0XFx0dmZyZWUob2xkX2NxX3RhYmxlKTtcXG4rXFxuK1xcdFxcdGVyciA9IG1hbmFfaHdjX2luaXRfcXVldWVzKGh3YywgcV9kZXB0aF9tYXgsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIG1heF9yZXFfbXNnX3NpemUsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIG1heF9yZXNwX21zZ19zaXplKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlaW5pdCBIV0M6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbitcXHRcXHRcXHRnb3RvIHJlaW5pdF9mYWxsYmFjaztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0ZXJyID0gbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoZ2MsIFxcdTAwMjZxX2RlcHRoX21heCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZtYXhfcmVxX21zZ19zaXplLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm1heF9yZXNwX21zZ19zaXplKTtcXG4rXFx0XFx0aWYgKGVycikge1xcbitcXHRcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlLWVzdGFibGlzaCBIV0M6ICVkXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRlcnIpO1xcbitcXHRcXHRcXHQvKiBlc3RhYmxpc2hfY2hhbm5lbCBkb2VzIGludGVybmFsIHRlYXJkb3duIG9uXFxuK1xcdFxcdFxcdCAqIGZhaWx1cmUuICBJZiB0ZWFyZG93biBzdWNjZWVkZWQgKHNldHVwX2FjdGl2ZVxcbitcXHRcXHRcXHQgKiBjbGVhcmVkKSwgTVNUIGVudHJpZXMgYXJlIGludmFsaWRhdGVkIGFuZCB3ZVxcbitcXHRcXHRcXHQgKiBjYW4gdHJ5IHRoZSBib290c3RyYXAgZmFsbGJhY2suICBJZiB0ZWFyZG93blxcbitcXHRcXHRcXHQgKiBhbHNvIGZhaWxlZCAoc2V0dXBfYWN0aXZlIHN0aWxsIHNldCksIGhhcmR3YXJlXFxuK1xcdFxcdFxcdCAqIG1hcHBpbmdzIG1heSBzdGlsbCBiZSBhY3RpdmUg4oCUIHNraXAgZmFsbGJhY2suXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRpZiAoaHdjLVxcdTAwM2VzZXR1cF9hY3RpdmUpXFxuK1xcdFxcdFxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRcXHRnb3RvIHJlaW5pdF9mYWxsYmFjaztcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRnb3RvIHNraXBfcmVpbml0O1xcbitcXG4rcmVpbml0X2ZhbGxiYWNrOlxcbitcXHQvKiBSZXN0b3JlIGJvb3RzdHJhcC1kZXB0aCBjaGFubmVsIHNvIHRoZSBkZXZpY2UgcmVtYWlucyBmdW5jdGlvbmFsLlxcbitcXHQgKiBGcmVlIGNxX3RhYmxlIGlmIGl0IHdhcyBhbGxvY2F0ZWQgYnkgYSBwYXJ0aWFsbHkgc3VjY2Vzc2Z1bFxcbitcXHQgKiBlc3RhYmxpc2ggYXR0ZW1wdC5cXG4rXFx0ICovXFxuK1xcdGRldl93YXJuKGh3Yy1cXHUwMDNlZGV2LCBcXFwiSFdDIHJlaW5pdCBmYWlsZWQsIGZhbGxpbmcgYmFjayB0byBib290c3RyYXAgZGVwdGhcXFxcblxcXCIpO1xcbitcXG4rXFx0bWFuYV9od2NfZGVzdHJveV9xdWV1ZXMoaHdjKTtcXG4rXFxuK1xcdG9sZF9jcV90YWJsZSA9IHJjdV9yZXBsYWNlX3BvaW50ZXIoZ2MtXFx1MDAzZWNxX3RhYmxlLCBOVUxMLCB0cnVlKTtcXG4rXFx0c3luY2hyb25pemVfcmN1KCk7XFxuK1xcdHZmcmVlKG9sZF9jcV90YWJsZSk7XFxuK1xcbitcXHRlcnIgPSBtYW5hX2h3Y19pbml0X3F1ZXVlcyhod2MsIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRILFxcbitcXHRcXHRcXHRcXHQgICBIV19DSEFOTkVMX01BWF9SRVFVRVNUX1NJWkUsXFxuK1xcdFxcdFxcdFxcdCAgIEhXX0NIQU5ORUxfTUFYX1JFU1BPTlNFX1NJWkUpO1xcbitcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdGRldl9lcnIoaHdjLVxcdTAwM2VkZXYsIFxcXCJGYWlsZWQgdG8gcmVzdG9yZSBib290c3RyYXAgSFdDOiAlZFxcXFxuXFxcIiwgZXJyKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGVyciA9IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKGdjLCBcXHUwMDI2cV9kZXB0aF9tYXgsIFxcdTAwMjZtYXhfcmVxX21zZ19zaXplLFxcbitcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNm1heF9yZXNwX21zZ19zaXplKTtcXG4rXFx0aWYgKGVycikge1xcbitcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiRmFpbGVkIHRvIHJlLWVzdGFibGlzaCBib290c3RyYXAgSFdDOiAlZFxcXFxuXFxcIixcXG4rXFx0XFx0XFx0ZXJyKTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuK3NraXBfcmVpbml0OlxcbitcXG4rXFx0LyogTm8gUkNVIG5lZWRlZDogc3RpbGwgaW4gbWFuYV9od2NfY3JlYXRlX2NoYW5uZWwsIHRoZVxcbitcXHQgKiBwb2ludGVyIGhhcyBub3QgYmVlbiBwdWJsaXNoZWQgdG8gY29uY3VycmVudCBzZW5kZXJzIHlldC5cXG4rXFx0ICovXFxuIFxcdGVyciA9IG1hbmFfaHdjX3Rlc3RfY2hhbm5lbChnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhLFxcbi1cXHRcXHRcXHRcXHQgICAgSFdfQ0hBTk5FTF9WRl9CT09UU1RSQVBfUVVFVUVfREVQVEgsXFxuK1xcdFxcdFxcdFxcdCAgICBod2MtXFx1MDAzZW51bV9pbmZsaWdodF9tc2csXFxuIFxcdFxcdFxcdFxcdCAgICBtYXhfcmVxX21zZ19zaXplLCBtYXhfcmVzcF9tc2dfc2l6ZSk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkZhaWxlZCB0byB0ZXN0IEhXQzogJWRcXFxcblxcXCIsIGVycik7XFxuQEAgLTgxMCwyNyArMTE3OCwxOTUgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxcbiBcXG4gdm9pZCBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MpXFxuIHtcXG4rXFx0LyogVGhpcyBpcyB0aGUgb25seSBkZXN0cm95IGVudHJ5IHBvaW50LiAgZHJpdmVyX2RhdGEgaXMgcmVhZFxcbitcXHQgKiBwbGFpbmx5IGhlcmUgKHRlYXJkb3duIGlzIHNlcmlhbGlzZWQgYWdhaW5zdCBvdGhlciB0ZWFyZG93bik7XFxuK1xcdCAqIGl0IGlzIGNsZWFyZWQgdW5kZXIgaHdjX2xvY2sgYmVsb3cgYmVmb3JlIGh3YyBpcyBmcmVlZC5cXG4rXFx0ICovXFxuIFxcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyA9IGdjLVxcdTAwM2Vod2MuZHJpdmVyX2RhdGE7XFxuK1xcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqb2xkX2NxX3RhYmxlO1xcbitcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXG4gXFx0aWYgKCFod2MpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuLVxcdC8qIGdjLVxcdTAwM2VtYXhfbnVtX2NxcyBpcyBzZXQgaW4gbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKCkuIElmIGl0J3NcXG4tXFx0ICogbm9uLXplcm8sIHRoZSBIV0Mgd29ya2VkIGFuZCB3ZSBzaG91bGQgdGVhciBkb3duIHRoZSBIV0MgaGVyZS5cXG4rXFx0LyogUHJldmVudCBuZXcgcmVxdWVzdHMgZnJvbSBzdGFydGluZyBhbmQgd2FrZSBhbnlcXG4rXFx0ICogdGhyZWFkcyB3YWl0aW5nIGZvciBhIGZyZWUgbXNnIHNsb3QuICBTZXQgY2hhbm5lbF91cCB1bmRlclxcbitcXHQgKiB0aGUgYml0bWFwIGxvY2sgc28gZ2V0X21zZ19pbmRleCgpIGNhbm5vdCBhY3F1aXJlIGEgc2xvdFxcbitcXHQgKiBhbmQgaW5jcmVtZW50IGFjdGl2ZV9zZW5kZXJzIGFmdGVyIHRoaXMgcG9pbnQuXFxuK1xcdCAqXFxuK1xcdCAqIElmIGNoYW5uZWxfdXAgaXMgYWxyZWFkeSBmYWxzZSAoZS5nLiBpbml0IGZhaWxlZCBiZWZvcmVcXG4rXFx0ICogdGhlIGNoYW5uZWwgd2FzIGVzdGFibGlzaGVkKSwgc2tpcCB0aGUgbG9jayDigJQgaXQgbWF5IG5vdFxcbitcXHQgKiBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgeWV0LCBhbmQgbm8gc2VuZGVycyBjYW4gYmUgYWN0aXZlLlxcbiBcXHQgKi9cXG4tXFx0aWYgKGdjLVxcdTAwM2VtYXhfbnVtX2NxcyBcXHUwMDNlIDApIHtcXG4tXFx0XFx0bWFuYV9zbWNfdGVhcmRvd25faHdjKFxcdTAwMjZnYy1cXHUwMDNlc2htX2NoYW5uZWwsIGZhbHNlKTtcXG4tXFx0XFx0Z2MtXFx1MDAzZW1heF9udW1fY3FzID0gMDtcXG4rXFx0aWYgKGh3Yy1cXHUwMDNlY2hhbm5lbF91cCkge1xcbitcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0aHdjLVxcdTAwM2VjaGFubmVsX3VwID0gZmFsc2U7XFxuK1xcdFxcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmh3Yy1cXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7XFxuK1xcdFxcdHdha2VfdXBfYWxsKFxcdTAwMjZod2MtXFx1MDAzZW1zZ193YWl0cSk7XFxuIFxcdH1cXG4gXFxuK1xcdC8qIENsZWFyIHRoZSBwb2ludGVyIHVuZGVyIGh3Y19sb2NrIHNvIG5ldyBjYWxsZXJzIGluXFxuK1xcdCAqIG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCkgc2VlIE5VTEwgYW5kIHJldHVybiAtRU5PREVWLiAgVGhlIGxvY2tcXG4rXFx0ICogbWFrZXMgdGhlIHJlYWRlcnMnIFxcXCJsb2FkIGRyaXZlcl9kYXRhICsgYWN0aXZlX3NlbmRlcnMrK1xcXCJcXG4rXFx0ICogYXRvbWljIGFnYWluc3QgdGhpcyBzdG9yZSwgc28gb25jZSBpdCByZXR1cm5zIG5vIG5ldyBzZW5kZXIgY2FuXFxuK1xcdCAqIHRha2UgYSByZWZlcmVuY2U7IHRoZSBhY3RpdmVfc2VuZGVycyBkcmFpbiBiZWxvdyB3YWl0cyBvdXQgdGhvc2VcXG4rXFx0ICogdGhhdCBhbHJlYWR5IGRpZCwgYmVmb3JlIHRoZWlyIGh3YyBpcyBmcmVlZC5cXG4rXFx0ICovXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZnYy1cXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcXG4rXFx0Z2MtXFx1MDAzZWh3Yy5kcml2ZXJfZGF0YSA9IE5VTEw7XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmdjLVxcdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xcbitcXG4rXFx0LyogRm9yY2UtY29tcGxldGUgYW55IGluLWZsaWdodCBzZW5kZXJzIHNvIHRoZXkgb2JzZXJ2ZSAtRU5PREVWLFxcbitcXHQgKiByZXR1cm4sIGFuZCBkcm9wIHRoZWlyIHJlZmVyZW5jZXMuICBUaGlzIHJ1bnMgYmVmb3JlIHRoZSBIV0NcXG4rXFx0ICogaGFyZHdhcmUgdGVhcmRvd24gYmVsb3csIHNvIGEgbGl2ZSBpbnRlcnJ1cHQgbWF5IHN0aWxsIGRlbGl2ZXJcXG4rXFx0ICogYSByZWFsIHJlc3BvbnNlIHZpYSBoYW5kbGVfcmVzcCgpIGNvbmN1cnJlbnRseSDigJQgdGhhdCBpcyBzYWZlXFxuK1xcdCAqIGJlY2F1c2UgdGhlIHBlci1zbG90IHJlZmNvdW50IG1vZGVsIHRvbGVyYXRlcyBhIGNvbmN1cnJlbnRcXG4rXFx0ICogY29tcGxldGUoKSBhbmQgYm90aCBwYXRocyAoaGFuZGxlX3Jlc3AgYW5kIHRoaXMgbG9vcCkgZHJvcFxcbitcXHQgKiB0aGVpciByZWZzIHdpdGhvdXQgZG91YmxlLXJlbGVhc2luZyB0aGUgc2xvdC5cXG4rXFx0ICovXFxuK1xcdGlmIChod2MtXFx1MDAzZWNhbGxlcl9jdHgpIHtcXG4rXFx0XFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHg7XFxuK1xcdFxcdGludCBpO1xcbitcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGh3Yy1cXHUwMDNlbnVtX2luZmxpZ2h0X21zZzsgaSsrKSB7XFxuK1xcdFxcdFxcdGlmICghdGVzdF9iaXQoaSwgaHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzLm1hcCkpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0Y3R4ID0gXFx1MDAyNmh3Yy1cXHUwMDNlY2FsbGVyX2N0eFtpXTtcXG4rXFxuK1xcdFxcdFxcdC8qIFdha2Ugc2VuZGVycyBibG9ja2VkIG9uIHdhaXRfZm9yX2NvbXBsZXRpb24uXFxuK1xcdFxcdFxcdCAqIFNldCBlcnJvciB1bmRlciBsb2NrIHRvIGF2b2lkIHJhY2luZyB3aXRoXFxuK1xcdFxcdFxcdCAqIGhhbmRsZV9yZXNwKCkgd2hpY2ggd3JpdGVzIGVycm9yIHVuZGVyIHRoZVxcbitcXHRcXHRcXHQgKiBzYW1lIGxvY2suICBUaGUgc2VuZGVyIE5VTExzIG91dHB1dF9idWZcXG4rXFx0XFx0XFx0ICogYWZ0ZXIgd2FraW5nIOKAlCBkb2luZyBpdCBoZXJlIHdvdWxkIHJhY2VcXG4rXFx0XFx0XFx0ICogd2l0aCBhIHNlbmRlciB0aGF0IGhhc24ndCBzZXQgb3V0cHV0X2J1ZiB5ZXQuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdFxcdGN0eC1cXHUwMDNlZXJyb3IgPSAtRU5PREVWO1xcbitcXHRcXHRcXHRjb21wbGV0ZShcXHUwMDI2Y3R4LVxcdTAwM2Vjb21wX2V2ZW50KTtcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0LyogV2FpdCBmb3IgYWxsIHNlbmRlciB0aHJlYWRzIHRvIGZpbmlzaCBhbmQgZHJvcCB0aGVpciByZWZzXFxuK1xcdCAqIGJlZm9yZSB0b3VjaGluZyB0aGUgaGFyZHdhcmUgb3IgZnJlZWluZyBhbnl0aGluZy4gIERyYWluaW5nXFxuK1xcdCAqIGhlcmUgLS0gYWhlYWQgb2YgdGhlIHRlYXJkb3duL0ZMUiBibG9jayBiZWxvdyAtLSBndWFyYW50ZWVzIG5vXFxuK1xcdCAqIGluLWZsaWdodCBzZW5kZXIgaXMgc3RpbGwgcnVubmluZyB3aGVuIHRoaXMgZnVuY3Rpb24gcmV0dXJucyBvblxcbitcXHQgKiBhbnkgcGF0aCwgaW5jbHVkaW5nIHRoZSBGTFItZmFpbHVyZSBlYXJseSByZXR1cm47IG90aGVyd2lzZSBhXFxuK1xcdCAqIHN0cmFuZGVkIHNlbmRlciB3b3VsZCBkZXJlZmVyZW5jZSBnYy1cXHUwMDNlaHdjX2xvY2sgL1xcbitcXHQgKiBnYy1cXHUwMDNlaHdjX2RyYWluX3dhaXRxIGFmdGVyIHRoZSBjYWxsZXIgZnJlZXMgZ2MuXFxuK1xcdCAqIEFmdGVyIHRoaXMsIG9ubHkgc2xvdHMgaGVsZCBieSB0aW1lZC1vdXQgc2VuZGVycyB3aG9zZVxcbitcXHQgKiBoYW5kbGVfcmVzcCgpIG5ldmVyIHJhbiByZW1haW4gaW4gdGhlIGJpdG1hcC5cXG4rXFx0ICpcXG4rXFx0ICogYWN0aXZlX3NlbmRlcnMgaXMgb25seSBldmVyIG1vZGlmaWVkIHVuZGVyIGh3Y19sb2NrLCBhbmQgdGhlXFxuK1xcdCAqIGxhc3Qgc2VuZGVyJ3Mgd2FrZV91cCgpIHJ1bnMgdW5kZXIgdGhhdCBsb2NrIGJlZm9yZSBpdCBpc1xcbitcXHQgKiByZWxlYXNlZC4gIEV2YWx1YXRpbmcgdGhlIGNvbmRpdGlvbiB1bmRlciBod2NfbG9jayB0aGVyZWZvcmVcXG4rXFx0ICogZ3VhcmFudGVlcyB0aGF0IG9uY2Ugd2Ugb2JzZXJ2ZSAwIHRoZSB3YWtpbmcgc2VuZGVyIGhhc1xcbitcXHQgKiBhbHJlYWR5IGRyb3BwZWQgdGhlIGxvY2sgLS0gaS5lLiBmaW5pc2hlZCB0b3VjaGluZyBnYyAtLSBzbyBpdFxcbitcXHQgKiBjYW5ub3QgcmFjZSB0aGUgY2FsbGVyIGZyZWVpbmcgZ2MgYWZ0ZXIgdGhpcyByZXR1cm5zLlxcbitcXHQgKi9cXG4rXFx0c3Bpbl9sb2NrX2lycShcXHUwMDI2Z2MtXFx1MDAzZWh3Y19sb2NrKTtcXG4rXFx0d2FpdF9ldmVudF9sb2NrX2lycShnYy1cXHUwMDNlaHdjX2RyYWluX3dhaXRxLFxcbitcXHRcXHRcXHQgICAgaHdjLVxcdTAwM2VhY3RpdmVfc2VuZGVycyA9PSAwLCBnYy1cXHUwMDNlaHdjX2xvY2spO1xcbitcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNmdjLVxcdTAwM2Vod2NfbG9jayk7XFxuK1xcbitcXHQvKiBUZWFyIGRvd24gdGhlIEhXQyBpZiBzZXR1cF9od2MgcHJldmlvdXNseSBhY3RpdmF0ZWQgTVNUIGVudHJpZXMuXFxuK1xcdCAqIFRoaXMgaXMgdGhlIGRlZmluaXRpdmUgZmxhZyDigJQgdW5saWtlIG1heF9udW1fY3FzIHdoaWNoIGRlcGVuZHNcXG4rXFx0ICogb24gdGhlIGluaXQgRVFFIGFycml2aW5nLlxcbitcXHQgKlxcbitcXHQgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGludGVudGlvbmFsbHkgbm90IGNoZWNrZWQuICBUaGlzIGlzIHRoZVxcbitcXHQgKiB0ZXJtaW5hbCBjbGVhbnVwIHBhdGggKGRldmljZSByZW1vdmFsLCBzdXNwZW5kLCBvciBpbml0XFxuK1xcdCAqIGZhaWx1cmUpIOKAlCByZXNvdXJjZXMgbXVzdCBiZSBmcmVlZCByZWdhcmRsZXNzLiAgSWYgdGVhcmRvd25cXG4rXFx0ICogZmFpbHMsIGhhcmR3YXJlIG1heSBzdGlsbCBoYXZlIGFjdGl2ZSBNU1QgZW50cmllcywgYnV0OlxcbitcXHQgKlxcbitcXHQgKiAgLSBJbnRlcnJ1cHRzOiBtYW5hX2h3Y19kZXN0cm95X2NxKCkgYmVsb3cgY2FsbHNcXG4rXFx0ICogICAgbWFuYV9nZF9kZXJlZ2lzdGVyX2lycSgpIHdoaWNoIHJlbW92ZXMgdGhlIEhXQyBFUSBmcm9tXFxuK1xcdCAqICAgIHRoZSBpbnRlcnJ1cHQgZGlzcGF0Y2ggbGlzdCB2aWEgbGlzdF9kZWxfcmN1KCkgK1xcbitcXHQgKiAgICBzeW5jaHJvbml6ZV9yY3UoKS4gIEFmdGVyIHRoYXQsIG5vIGludGVycnVwdCBoYW5kbGVyIGNhblxcbitcXHQgKiAgICBpbnZva2UgaGFuZGxlX3Jlc3AoKSBvciBhY2Nlc3MgQ1EvUlEgYnVmZmVycyDigJQgZXZlbiBpZlxcbitcXHQgKiAgICB0aGUgSVJRIGlzIHNoYXJlZCB3aXRoIGRhdGEgcGF0aCBxdWV1ZXMuXFxuK1xcdCAqXFxuK1xcdCAqICAtIERNQTogbWFuYV9od2NfZGVzdHJveV93cSgpIGZyZWVzIERNQSBidWZmZXJzIHZpYVxcbitcXHQgKiAgICBkbWFfZnJlZV9jb2hlcmVudCgpIHdoaWNoIHVubWFwcyB0aGUgSU9WQSBmcm9tIHRoZVxcbitcXHQgKiAgICBJT01NVS4gIEFueSBzdGFsZSBoYXJkd2FyZSBETUEgdG8gdGhlIG9sZCBhZGRyZXNzXFxuK1xcdCAqICAgIGZhdWx0cyBhdCB0aGUgSU9NTVUsIG5vdCBpbiBrZXJuZWwgbWVtb3J5LlxcbitcXHQgKi9cXG4rXFx0aWYgKGh3Yy1cXHUwMDNlc2V0dXBfYWN0aXZlKSB7XFxuK1xcdFxcdGludCB0ZF9lcnIgPSBtYW5hX3NtY190ZWFyZG93bl9od2MoXFx1MDAyNmdjLVxcdTAwM2VzaG1fY2hhbm5lbCwgZmFsc2UpO1xcbitcXG4rXFx0XFx0aWYgKHRkX2Vycikge1xcbitcXHRcXHRcXHRkZXZfZXJyKGdjLVxcdTAwM2VkZXYsIFxcXCJIV0MgdGVhcmRvd24gZmFpbGVkOiAlZCwgaXNzdWluZyBGTFJcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdHRkX2Vycik7XFxuK1xcbitcXHRcXHRcXHQvKiBPbiBzeXN0ZW1zIHdpdGhvdXQgSU9NTVUsIGZyZWVpbmcgRE1BIG1lbW9yeSB3aXRoXFxuK1xcdFxcdFxcdCAqIGFjdGl2ZSBoYXJkd2FyZSBNU1QgbWFwcGluZ3Mgcmlza3MgbWVtb3J5IGNvcnJ1cHRpb24uXFxuK1xcdFxcdFxcdCAqIElzc3VlIEZMUiB0byBmb3JjZS1yZXNldCB0aGUgZGV2aWNlIGFuZCBpbnZhbGlkYXRlXFxuK1xcdFxcdFxcdCAqIGFsbCBoYXJkd2FyZSBzdGF0ZSBpbmNsdWRpbmcgTVNUIGVudHJpZXMuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHR0ZF9lcnIgPSBwY2llX2Zscih0b19wY2lfZGV2KGdjLVxcdTAwM2VkZXYpKTtcXG4rXFx0XFx0XFx0aWYgKHRkX2Vycikge1xcbitcXHRcXHRcXHRcXHQvKiBEZXZpY2Ugd2VkZ2VkOiB0ZWFyZG93biBhbmQgRkxSXFxuK1xcdFxcdFxcdFxcdCAqIGJvdGggZmFpbGVkLCBzbyBoYXJkd2FyZSBtYXkgc3RpbGxcXG4rXFx0XFx0XFx0XFx0ICogRE1BIGludG8gb3VyIHF1ZXVlIGJ1ZmZlcnMuICBMZWFrXFxuK1xcdFxcdFxcdFxcdCAqIGFsbCBIV0MgRE1BIGJ1ZmZlcnMgLS0gYW5kIHRoZSBFUVxcbitcXHRcXHRcXHRcXHQgKiBJUlEgcmVnaXN0cmF0aW9uLCB3aG9zZSBzYWZlIHJlbW92YWxcXG4rXFx0XFx0XFx0XFx0ICogbmVlZHMgdGhvc2UgcXVldWVzIC0tIGluc3RlYWQgb2ZcXG4rXFx0XFx0XFx0XFx0ICogZnJlZWluZyBtZW1vcnkgdGhlIGRldmljZSBjYW4gc3RpbGxcXG4rXFx0XFx0XFx0XFx0ICogcmVhY2g7IHdpdGhvdXQgYW4gSU9NTVUgdGhlIGZyZWVkXFxuK1xcdFxcdFxcdFxcdCAqIHBhZ2VzIGNvdWxkIGJlIHJldXNlZCB1bmRlciBsaXZlXFxuK1xcdFxcdFxcdFxcdCAqIERNQS5cXG4rXFx0XFx0XFx0XFx0ICovXFxuK1xcbitcXHRcXHRcXHRcXHRkZXZfd2FybihnYy1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXHQgXFxcIkxlYWtlZCBIV0MgRE1BIGJ1ZmZlcnMgKENRL1JRL1RYUSkgdG8gcHJldmVudCBtZW1vcnkgY29ycnVwdGlvbi4gRGV2aWNlIGlzIG5vIGxvbmdlciB1c2FibGUuXFxcXG5cXFwiKTtcXG4rXFxuK1xcdFxcdFxcdFxcdC8qIERvIG5vdCBjYWxsIGRlc3Ryb3lfY3Evd3EgYmVsb3c7XFxuK1xcdFxcdFxcdFxcdCAqIHRoZXkgd291bGQgZG1hX2ZyZWVfY29oZXJlbnQoKS5cXG4rXFx0XFx0XFx0XFx0ICogTGVhdmUgaHdjL2NxL3J4cS90eHEgYWxsb2NhdGVkLlxcbitcXHRcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHRcXHR9XFxuK1xcbitcXHRcXHRcXHRkZXZfaW5mbyhnYy1cXHUwMDNlZGV2LCBcXFwiRkxSIHN1Y2NlZWRlZCwgaGFyZHdhcmUgc3RhdGUgY2xlYXJlZFxcXFxuXFxcIik7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGh3Yy1cXHUwMDNlc2V0dXBfYWN0aXZlID0gZmFsc2U7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRlYXIgZG93biB0aGUgSFdDIENRIG9iamVjdCBmaXJzdCDigJQgbWFuYV9od2NfZGVzdHJveV9jcSgpXFxuK1xcdCAqIGJvdGggdW5wdWJsaXNoZXMgdGhlIENRIGZyb20gY3FfdGFibGUgKCtzeW5jaHJvbml6ZV9yY3UpIGFuZFxcbitcXHQgKiBkZXJlZ2lzdGVycyB0aGUgSFdDIEVRIGZyb20gdGhlIGludGVycnVwdCBoYW5kbGVyJ3MgUkNVIGxpc3RcXG4rXFx0ICogKHZpYSBtYW5hX2dkX2RlcmVnaXN0ZXJfaXJxICsgc3luY2hyb25pemVfcmN1KSwgZ3VhcmFudGVlaW5nXFxuK1xcdCAqIG5vIGludGVycnVwdCBoYW5kbGVyIGNhbiBhY2Nlc3MgUlEvVFhRIGJ1ZmZlcnMgYWZ0ZXIgdGhpc1xcbitcXHQgKiBwb2ludC4gIFRoZSBhY3RpdmVfc2VuZGVycyBkcmFpbiBhYm92ZSBlbnN1cmVzIG5vIHNlbmRlciBpc1xcbitcXHQgKiBhY2Nlc3NpbmcgdGhlIENRIHZpYSB0eHEtXFx1MDAzZWh3Y19jcSB3aGVuIGl0IGlzIGRlc3Ryb3llZC4gIFRoZW5cXG4rXFx0ICogZGVzdHJveSBUWFEgYW5kIFJRIHNhZmVseS5cXG4rXFx0ICovXFxuK1xcdGlmIChod2MtXFx1MDAzZWNxKVxcbitcXHRcXHRtYW5hX2h3Y19kZXN0cm95X2NxKGh3Yy1cXHUwMDNlZ2RtYV9kZXYtXFx1MDAzZWdkbWFfY29udGV4dCwgaHdjLVxcdTAwM2VjcSk7XFxuK1xcbiBcXHRpZiAoaHdjLVxcdTAwM2V0eHEpXFxuIFxcdFxcdG1hbmFfaHdjX2Rlc3Ryb3lfd3EoaHdjLCBod2MtXFx1MDAzZXR4cSk7XFxuIFxcbiBcXHRpZiAoaHdjLVxcdTAwM2VyeHEpXFxuIFxcdFxcdG1hbmFfaHdjX2Rlc3Ryb3lfd3EoaHdjLCBod2MtXFx1MDAzZXJ4cSk7XFxuIFxcbi1cXHRpZiAoaHdjLVxcdTAwM2VjcSlcXG4tXFx0XFx0bWFuYV9od2NfZGVzdHJveV9jcShod2MtXFx1MDAzZWdkbWFfZGV2LVxcdTAwM2VnZG1hX2NvbnRleHQsIGh3Yy1cXHUwMDNlY3EpO1xcbitcXHQvKiBSZWxlYXNlIGFueSBzbG90cyBzdGlsbCBoZWxkIOKAlCB0aGVzZSBiZWxvbmcgdG8gdGltZWQtb3V0XFxuK1xcdCAqIHNlbmRlcnMgd2hlcmUgaGFuZGxlX3Jlc3AoKSBuZXZlciByYW4gKHJlZmNvdW50ID0gMSB3aXRoXFxuK1xcdCAqIGhhbmRsZV9yZXNwJ3MgcmVmIHN0aWxsIG91dHN0YW5kaW5nKS5cXG4rXFx0ICovXFxuK1xcdGlmIChod2MtXFx1MDAzZWNhbGxlcl9jdHgpIHtcXG4rXFx0XFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHg7XFxuK1xcdFxcdGludCBpO1xcbitcXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGh3Yy1cXHUwMDNlbnVtX2luZmxpZ2h0X21zZzsgaSsrKSB7XFxuK1xcdFxcdFxcdGlmICghdGVzdF9iaXQoaSwgaHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzLm1hcCkpXFxuK1xcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0XFx0Y3R4ID0gXFx1MDAyNmh3Yy1cXHUwMDNlY2FsbGVyX2N0eFtpXTtcXG4rXFx0XFx0XFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4gXFxuIFxcdGtmcmVlKGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCk7XFxuIFxcdGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCA9IE5VTEw7XFxuQEAgLTg0NSwxMSArMTM4MSwxMSBAQCB2b2lkIG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcXG4gXFx0aHdjLVxcdTAwM2Vod2NfdGltZW91dCA9IDA7XFxuIFxcbiBcXHRrZnJlZShod2MpO1xcbi1cXHRnYy1cXHUwMDNlaHdjLmRyaXZlcl9kYXRhID0gTlVMTDtcXG4gXFx0Z2MtXFx1MDAzZWh3Yy5nZG1hX2NvbnRleHQgPSBOVUxMO1xcbiBcXG4tXFx0dmZyZWUoZ2MtXFx1MDAzZWNxX3RhYmxlKTtcXG4tXFx0Z2MtXFx1MDAzZWNxX3RhYmxlID0gTlVMTDtcXG4rXFx0b2xkX2NxX3RhYmxlID0gcmN1X3JlcGxhY2VfcG9pbnRlcihnYy1cXHUwMDNlY3FfdGFibGUsIE5VTEwsIHRydWUpO1xcbitcXHRzeW5jaHJvbml6ZV9yY3UoKTtcXG4rXFx0dmZyZWUob2xkX2NxX3RhYmxlKTtcXG4gfVxcbiBcXG4gaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLFxcbkBAIC04NjAsMTMgKzEzOTYsMTcgQEAgaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLFxcbiBcXHRzdHJ1Y3QgaHdjX3dxICp0eHEgPSBod2MtXFx1MDAzZXR4cTtcXG4gXFx0c3RydWN0IGdkbWFfcmVxX2hkciAqcmVxX21zZztcXG4gXFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHg7XFxuK1xcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XFxuIFxcdHUzMiBkZXN0X3ZyY3EgPSAwO1xcbiBcXHR1MzIgZGVzdF92cnEgPSAwO1xcbiBcXHR1MzIgY29tbWFuZDtcXG4rXFx0dTMyIHN0YXR1cztcXG4gXFx0dTE2IG1zZ19pZDtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdG1hbmFfaHdjX2dldF9tc2dfaW5kZXgoaHdjLCBcXHUwMDI2bXNnX2lkKTtcXG4rXFx0ZXJyID0gbWFuYV9od2NfZ2V0X21zZ19pbmRleChod2MsIFxcdTAwMjZtc2dfaWQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4gXFx0dHhfd3IgPSBcXHUwMDI2dHhxLVxcdTAwM2Vtc2dfYnVmLVxcdTAwM2VyZXFzW21zZ19pZF07XFxuIFxcbkBAIC04NzgsOCArMTQxOCwxMSBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sXFxuIFxcdH1cXG4gXFxuIFxcdGN0eCA9IGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCArIG1zZ19pZDtcXG4rXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4gXFx0Y3R4LVxcdTAwM2VvdXRwdXRfYnVmID0gcmVzcDtcXG4gXFx0Y3R4LVxcdTAwM2VvdXRwdXRfYnVmbGVuID0gcmVzcF9sZW47XFxuK1xcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXFx1MDAyNmN0eC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXG4gXFx0cmVxX21zZyA9IChzdHJ1Y3QgZ2RtYV9yZXFfaGRyICopdHhfd3ItXFx1MDAzZWJ1Zl92YTtcXG4gXFx0aWYgKHJlcSlcXG5AQCAtODk1LDggKzE0MzgsMTQgQEAgaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLFxcbiBcXHRcXHRkZXN0X3ZyY3EgPSBod2MtXFx1MDAzZXBmX2Rlc3RfdnJjcV9pZDtcXG4gXFx0fVxcbiBcXG4rXFx0LyogVGFrZSBoYW5kbGVfcmVzcCdzIHJlZiBiZWZvcmUgcG9zdGluZyDigJQgaGFyZHdhcmUgY2FuIHJlc3BvbmRcXG4rXFx0ICogaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGRvb3JiZWxsIHJpbmcuXFxuK1xcdCAqL1xcbitcXHRyZWZjb3VudF9pbmMoXFx1MDAyNmN0eC1cXHUwMDNlcmVmY250KTtcXG4rXFxuIFxcdGVyciA9IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKHR4cSwgdHhfd3IsIGRlc3RfdnJxLCBkZXN0X3ZyY3EsIGZhbHNlKTtcXG4gXFx0aWYgKGVycikge1xcbitcXHRcXHRyZWZjb3VudF9kZWMoXFx1MDAyNmN0eC1cXHUwMDNlcmVmY250KTtcXG4gXFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkhXQzogRmFpbGVkIHRvIHBvc3Qgc2VuZCBXUUU6ICVkXFxcXG5cXFwiLCBlcnIpO1xcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbkBAIC05MDcsMzEgKzE0NTYsODYgQEAgaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLFxcbiBcXHRcXHRcXHRkZXZfZXJyKGh3Yy1cXHUwMDNlZGV2LCBcXFwiQ29tbWFuZCAweCV4IHRpbWVkIG91dDogJXUgbXNcXFxcblxcXCIsXFxuIFxcdFxcdFxcdFxcdGNvbW1hbmQsIGh3Yy1cXHUwMDNlaHdjX3RpbWVvdXQpO1xcbiBcXG4tXFx0XFx0LyogUmVkdWNlIGZ1cnRoZXIgd2FpdGluZyBpZiBIV0Mgbm8gcmVzcG9uc2UgKi9cXG4rXFx0XFx0LyogTlVMTCBvdXQgb3V0cHV0X2J1ZiBzbyBhIGxhdGUgaGFuZGxlX3Jlc3AoKSB3b24ndCB3cml0ZVxcbitcXHRcXHQgKiBpbnRvIHRoZSBjYWxsZXIncyBidWZmZXIgYWZ0ZXIgdGhlIHNlbmRlciByZXR1cm5zLCB0aGVuXFxuK1xcdFxcdCAqIGNoZWNrIHdoZXRoZXIgaGFuZGxlX3Jlc3AoKSBhbHJlYWR5IGRlbGl2ZXJlZCBhIHZhbGlkXFxuK1xcdFxcdCAqIHJlc3BvbnNlIGJldHdlZW4gdGhlIHRpbWVvdXQgZmlyaW5nIGFuZCB0aGlzIGxvY2tcXG4rXFx0XFx0ICogYWNxdWlzaXRpb24g4oCUIGN0eC1cXHUwMDNlZXJyb3IgIT0gLUVJTlBST0dSRVNTIG1lYW5zIGl0IHJhbi5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0Y3R4LVxcdTAwM2VvdXRwdXRfYnVmID0gTlVMTDtcXG4rXFx0XFx0ZXJyID0gY3R4LVxcdTAwM2VlcnJvcjtcXG4rXFx0XFx0c3RhdHVzID0gY3R4LVxcdTAwM2VzdGF0dXNfY29kZTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcbitcXHRcXHRpZiAoZXJyICE9IC1FSU5QUk9HUkVTUykge1xcbitcXHRcXHRcXHQvKiBoYW5kbGVfcmVzcCgpIGRlbGl2ZXJlZCBhIHZhbGlkIHJlc3BvbnNlIGp1c3QgYWZ0ZXJcXG4rXFx0XFx0XFx0ICogdGhlIHRpbWVvdXQgZmlyZWQuICBUaGUgaGFyZHdhcmUgaXMgYWxpdmUsIHNvIHVzZVxcbitcXHRcXHRcXHQgKiB0aGUgcmVzcG9uc2UgYW5kIGxlYXZlIHRoZSBjaGFubmVsIHVzYWJsZTsgZG8gbm90XFxuK1xcdFxcdFxcdCAqIGxhdGNoIGh3Y190aW1lZF9vdXQgb3IgZGVncmFkZSBod2NfdGltZW91dCBmb3Igd2hhdFxcbitcXHRcXHRcXHQgKiB0dXJuZWQgb3V0IHRvIGJlIGEgdHJhbnNpZW50IHJhY2UuXFxuK1xcdFxcdFxcdCAqL1xcbitcXHRcXHRcXHRod2NfY3R4X3B1dChod2MsIGN0eCk7XFxuK1xcdFxcdFxcdGdvdG8gY2hlY2tfc3RhdHVzO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiBHZW51aW5lIHRpbWVvdXQ6IG5vIHJlc3BvbnNlIGFycml2ZWQuICBSZWR1Y2UgZnVydGhlclxcbitcXHRcXHQgKiB3YWl0aW5nLCBhbmQgbWFyayB0aGUgY2hhbm5lbCB0aW1lZCBvdXQgdW5kZXIgdGhlIGJpdG1hcFxcbitcXHRcXHQgKiBsb2NrIHNvIGdldF9tc2dfaW5kZXgoKSBjYW5ub3QgYWNxdWlyZSBuZXcgc2xvdHMgYWZ0ZXIgdGhpcy5cXG4rXFx0XFx0ICovXFxuIFxcdFxcdGlmIChod2MtXFx1MDAzZWh3Y190aW1lb3V0IFxcdTAwM2UgMSlcXG4gXFx0XFx0XFx0aHdjLVxcdTAwM2Vod2NfdGltZW91dCA9IDE7XFxuIFxcbitcXHRcXHRzcGluX2xvY2tfaXJxc2F2ZShcXHUwMDI2aHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0aHdjLVxcdTAwM2Vod2NfdGltZWRfb3V0ID0gdHJ1ZTtcXG4rXFx0XFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2aHdjLVxcdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcXG4rXFx0XFx0d2FrZV91cF9hbGwoXFx1MDAyNmh3Yy1cXHUwMDNlbXNnX3dhaXRxKTtcXG4rXFxuIFxcdFxcdGVyciA9IC1FVElNRURPVVQ7XFxuLVxcdFxcdGdvdG8gb3V0O1xcbitcXHRcXHRod2NfY3R4X3B1dChod2MsIGN0eCk7XFxuK1xcdFxcdGdvdG8gZG9uZTtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKGN0eC1cXHUwMDNlZXJyb3IpIHtcXG4tXFx0XFx0ZXJyID0gY3R4LVxcdTAwM2VlcnJvcjtcXG4tXFx0XFx0Z290byBvdXQ7XFxuLVxcdH1cXG4rXFx0LyogTlVMTCBvdXRwdXRfYnVmIHNvIGEgbGF0ZSBoYW5kbGVfcmVzcCgpIHdvbid0IG1lbWNweSBpbnRvXFxuK1xcdCAqIHRoZSBjYWxsZXIncyBidWZmZXIgYWZ0ZXIgdGhlIHNlbmRlciBleGl0cy4gIFJlYWQgZXJyb3IgYW5kXFxuK1xcdCAqIHN0YXR1c19jb2RlIHVuZGVyIHRoZSBzYW1lIGxvY2sg4oCUIGFmdGVyIGh3Y19jdHhfcHV0IHRoZSBzbG90XFxuK1xcdCAqIG1heSBiZSByZXVzZWQgYW5kIHRoZXNlIGZpZWxkcyBvdmVyd3JpdHRlbi5cXG4rXFx0ICovXFxuK1xcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0Y3R4LVxcdTAwM2VvdXRwdXRfYnVmID0gTlVMTDtcXG4rXFx0ZXJyID0gY3R4LVxcdTAwM2VlcnJvcjtcXG4rXFx0c3RhdHVzID0gY3R4LVxcdTAwM2VzdGF0dXNfY29kZTtcXG4rXFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcXHUwMDI2Y3R4LVxcdTAwM2Vsb2NrLCBmbGFncyk7XFxuK1xcdGh3Y19jdHhfcHV0KGh3YywgY3R4KTtcXG4rXFxuK2NoZWNrX3N0YXR1czpcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBkb25lO1xcbiBcXG4tXFx0aWYgKGN0eC1cXHUwMDNlc3RhdHVzX2NvZGUgXFx1MDAyNlxcdTAwMjYgY3R4LVxcdTAwM2VzdGF0dXNfY29kZSAhPSBHRE1BX1NUQVRVU19NT1JFX0VOVFJJRVMpIHtcXG4tXFx0XFx0aWYgKGN0eC1cXHUwMDNlc3RhdHVzX2NvZGUgPT0gR0RNQV9TVEFUVVNfQ01EX1VOU1VQUE9SVEVEKSB7XFxuK1xcdGlmIChzdGF0dXMgXFx1MDAyNlxcdTAwMjYgc3RhdHVzICE9IEdETUFfU1RBVFVTX01PUkVfRU5UUklFUykge1xcbitcXHRcXHRpZiAoc3RhdHVzID09IEdETUFfU1RBVFVTX0NNRF9VTlNVUFBPUlRFRCkge1xcbiBcXHRcXHRcXHRlcnIgPSAtRU9QTk9UU1VQUDtcXG4tXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdFxcdGdvdG8gZG9uZTtcXG4gXFx0XFx0fVxcbitcXG4gXFx0XFx0aWYgKGNvbW1hbmQgIT0gTUFOQV9RVUVSWV9QSFlfU1RBVClcXG4gXFx0XFx0XFx0ZGV2X2Vycihod2MtXFx1MDAzZWRldiwgXFxcIkNvbW1hbmQgMHgleCBmYWlsZWQgd2l0aCBzdGF0dXM6IDB4JXhcXFxcblxcXCIsXFxuLVxcdFxcdFxcdFxcdGNvbW1hbmQsIGN0eC1cXHUwMDNlc3RhdHVzX2NvZGUpO1xcbitcXHRcXHRcXHRcXHRjb21tYW5kLCBzdGF0dXMpO1xcbiBcXHRcXHRlcnIgPSAtRVBST1RPO1xcbi1cXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0Z290byBkb25lO1xcbiBcXHR9XFxuK1xcbitcXHRlcnIgPSAwO1xcbitcXHRnb3RvIGRvbmU7XFxuIG91dDpcXG4tXFx0bWFuYV9od2NfcHV0X21zZ19pbmRleChod2MsIG1zZ19pZCk7XFxuK1xcdC8qIFByZS1wb3N0IGVycm9yIHBhdGhzOiBubyBXUUUgd2FzIHN1Ym1pdHRlZCBzbyBoYW5kbGVfcmVzcCgpXFxuK1xcdCAqIGNhbm5vdCByYWNlIGhlcmUuICByZWZjb3VudCBpcyAxIChubyBzZWNvbmQgcmVmIHRha2VuKS5cXG4rXFx0ICovXFxuK1xcdGN0eCA9IGh3Yy1cXHUwMDNlY2FsbGVyX2N0eCArIG1zZ19pZDtcXG4rXFx0c3Bpbl9sb2NrX2lycXNhdmUoXFx1MDAyNmN0eC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbitcXHRjdHgtXFx1MDAzZW91dHB1dF9idWYgPSBOVUxMO1xcbitcXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFxcdTAwMjZjdHgtXFx1MDAzZWxvY2ssIGZsYWdzKTtcXG4rXFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xcbitkb25lOlxcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xcbmluZGV4IGE4YzMyOWJkYmFjZjgzLi41NTA4NzQ2NTkwZTdjZCAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcXG5AQCAtMjY0OCw2ICsyNjQ4LDcgQEAgc3RhdGljIGludCBtYW5hX2NyZWF0ZV90eHEoc3RydWN0IG1hbmFfcG9ydF9jb250ZXh0ICphcGMsXFxuIFxcdHN0cnVjdCBtYW5hX29ial9zcGVjIGNxX3NwZWM7XFxuIFxcdHN0cnVjdCBnZG1hX3F1ZXVlX3NwZWMgc3BlYztcXG4gXFx0c3RydWN0IGdkbWFfY29udGV4dCAqZ2M7XFxuK1xcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqY3FfdGFibGU7XFxuIFxcdHN0cnVjdCBtYW5hX3R4cSAqdHhxO1xcbiBcXHRzdHJ1Y3QgbWFuYV9jcSAqY3E7XFxuIFxcdHUzMiB0eHFfc2l6ZTtcXG5AQCAtMjc1MywxMiArMjc1NCwxOCBAQCBzdGF0aWMgaW50IG1hbmFfY3JlYXRlX3R4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcXG4gXFxuIFxcdFxcdGNxLVxcdTAwM2VnZG1hX2lkID0gY3EtXFx1MDAzZWdkbWFfY3EtXFx1MDAzZWlkO1xcbiBcXG4tXFx0XFx0aWYgKFdBUk5fT04oY3EtXFx1MDAzZWdkbWFfaWQgXFx1MDAzZT0gZ2MtXFx1MDAzZW1heF9udW1fY3FzKSkge1xcbitcXHRcXHQvKiBObyByY3VfcmVhZF9sb2NrKCk6IG1hbmFfY3JlYXRlX3R4cSBydW5zIHVuZGVyIFJUTkwgZHVyaW5nXFxuK1xcdFxcdCAqIG5ldGRldiBicmluZy11cCwgaW5zaWRlIHRoZSBuZXRkZXYgbGlmZXRpbWUgdGhhdFxcbitcXHRcXHQgKiBtYW5hX3JlbW92ZSgpIGRyYWlucyBiZWZvcmUgdGhlIGJhc2UgY3FfdGFibGUgY2FuIGJlIGZyZWVkLlxcbitcXHRcXHQgKiBTZWUgZ2RtYV9jb250ZXh0OjpjcV90YWJsZSBpbiBnZG1hLmggZm9yIHdoeSBcXFwidHJ1ZVxcXCIgaXMgc291bmQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRjcV90YWJsZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2MtXFx1MDAzZWNxX3RhYmxlLCB0cnVlKTtcXG4rXFx0XFx0aWYgKFdBUk5fT04oIWNxX3RhYmxlIHx8IGNxLVxcdTAwM2VnZG1hX2lkIFxcdTAwM2U9IGdjLVxcdTAwM2VtYXhfbnVtX2NxcykpIHtcXG4gXFx0XFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gXFx0XFx0XFx0Z290byBvdXQ7XFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGdjLVxcdTAwM2VjcV90YWJsZVtjcS1cXHUwMDNlZ2RtYV9pZF0gPSBjcS1cXHUwMDNlZ2RtYV9jcTtcXG4rXFx0XFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNxX3RhYmxlW2NxLVxcdTAwM2VnZG1hX2lkXSwgY3EtXFx1MDAzZWdkbWFfY3EpO1xcbiBcXG4gXFx0XFx0bWFuYV9jcmVhdGVfdHhxX2RlYnVnZnMoYXBjLCBpKTtcXG4gXFxuQEAgLTI5ODYsNiArMjk5Myw3IEBAIHN0YXRpYyBzdHJ1Y3QgbWFuYV9yeHEgKm1hbmFfY3JlYXRlX3J4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcXG4gXFx0c3RydWN0IGdkbWFfcXVldWVfc3BlYyBzcGVjO1xcbiBcXHRzdHJ1Y3QgbWFuYV9jcSAqY3EgPSBOVUxMO1xcbiBcXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYztcXG4rXFx0c3RydWN0IGdkbWFfcXVldWUgX19yY3UgKipjcV90YWJsZTtcXG4gXFx0dTMyIGNxX3NpemUsIHJxX3NpemU7XFxuIFxcdHN0cnVjdCBtYW5hX3J4cSAqcnhxO1xcbiBcXHRpbnQgZXJyO1xcbkBAIC0zMDc1LDEyICszMDgzLDE4IEBAIHN0YXRpYyBzdHJ1Y3QgbWFuYV9yeHEgKm1hbmFfY3JlYXRlX3J4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcbi1cXHRpZiAoV0FSTl9PTihjcS1cXHUwMDNlZ2RtYV9pZCBcXHUwMDNlPSBnYy1cXHUwMDNlbWF4X251bV9jcXMpKSB7XFxuK1xcdC8qIE5vIHJjdV9yZWFkX2xvY2soKTogbWFuYV9jcmVhdGVfcnhxIHJ1bnMgdW5kZXIgUlROTCBkdXJpbmcgbmV0ZGV2XFxuK1xcdCAqIGJyaW5nLXVwLCBpbnNpZGUgdGhlIG5ldGRldiBsaWZldGltZSB0aGF0IG1hbmFfcmVtb3ZlKCkgZHJhaW5zXFxuK1xcdCAqIGJlZm9yZSB0aGUgYmFzZSBjcV90YWJsZSBjYW4gYmUgZnJlZWQuICBTZWUgZ2RtYV9jb250ZXh0OjpjcV90YWJsZVxcbitcXHQgKiBpbiBnZG1hLmggZm9yIHdoeSBcXFwidHJ1ZVxcXCIgaXMgc291bmQuXFxuK1xcdCAqL1xcbitcXHRjcV90YWJsZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2MtXFx1MDAzZWNxX3RhYmxlLCB0cnVlKTtcXG4rXFx0aWYgKFdBUk5fT04oIWNxX3RhYmxlIHx8IGNxLVxcdTAwM2VnZG1hX2lkIFxcdTAwM2U9IGdjLVxcdTAwM2VtYXhfbnVtX2NxcykpIHtcXG4gXFx0XFx0ZXJyID0gLUVJTlZBTDtcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdGdjLVxcdTAwM2VjcV90YWJsZVtjcS1cXHUwMDNlZ2RtYV9pZF0gPSBjcS1cXHUwMDNlZ2RtYV9jcTtcXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGNxX3RhYmxlW2NxLVxcdTAwM2VnZG1hX2lkXSwgY3EtXFx1MDAzZWdkbWFfY3EpO1xcbiBcXG4gXFx0bmV0aWZfbmFwaV9hZGRfd2VpZ2h0X2xvY2tlZChuZGV2LCBcXHUwMDI2Y3EtXFx1MDAzZW5hcGksIG1hbmFfcG9sbCwgMSk7XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaCBiL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXFxuaW5kZXggODUyOWNlZjBkN2M0NTIuLmE0ZWFjNmY3YzM2NjA5IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcXG5AQCAtNDI4LDkgKzQyOCwzNCBAQCBzdHJ1Y3QgZ2RtYV9jb250ZXh0IHtcXG4gXFx0LyogTDIgTVRVICovXFxuIFxcdHUxNiBhZGFwdGVyX210dTtcXG4gXFxuLVxcdC8qIFRoaXMgbWFwcyBhIENRIGluZGV4IHRvIHRoZSBxdWV1ZSBzdHJ1Y3R1cmUuICovXFxuK1xcdC8qIFNpemUgb2YgY3FfdGFibGUsIGkuZS4gdGhlIGxhcmdlc3QgdmFsaWQgQ1EgaW5kZXggKyAxLiAgU2V0IG9uY2VcXG4rXFx0ICogd2hlbiBjcV90YWJsZSBpcyBhbGxvY2F0ZWQgYW5kIHRyZWF0ZWQgYXMgaW1tdXRhYmxlIGZvciB0aGVcXG4rXFx0ICogdGFibGUncyBsaWZldGltZSAoYSBib3VuZCBvbmx5KSAtLSBpdCBpcyBuZXZlciByZXNldCBvbiB0ZWFyZG93bi5cXG4rXFx0ICogY3FfdGFibGUgPT0gTlVMTCBpcyB0aGUgc29sZSBcXFwidGFibGUgdG9ybiBkb3duXFxcIiBzaWduYWwsIHNvIGV2ZXJ5XFxuK1xcdCAqIGNxX3RhYmxlW2lkXSBhY2Nlc3MgbXVzdCBndWFyZCB3aXRoIGJvdGggIWNxX3RhYmxlIChnb25lKSBhbmRcXG4rXFx0ICogaWQgXFx1MDAzZT0gbWF4X251bV9jcXMgKG91dCBvZiBib3VuZHMpLlxcbitcXHQgKi9cXG4gXFx0dW5zaWduZWQgaW50XFx0XFx0bWF4X251bV9jcXM7XFxuLVxcdHN0cnVjdCBnZG1hX3F1ZXVlXFx0KipjcV90YWJsZTtcXG4rXFx0LyogQm90aCB0aGUgYmFzZSBwb2ludGVyIGFuZCBlYWNoIGVudHJ5IGFyZSBSQ1UtbWFuYWdlZC4gIFRoZSBmYXN0XFxuK1xcdCAqIHBhdGggKG1hbmFfZ2RfcHJvY2Vzc19lcWUpIHJlYWRzIHRoZSBiYXNlIHZpYSByY3VfZGVyZWZlcmVuY2UoKVxcbitcXHQgKiB1bmRlciByY3VfcmVhZF9sb2NrKCksIHNvIHRoZSB0YWJsZSBpcyBmcmVlZCB3aXRoXFxuK1xcdCAqIHJjdV9hc3NpZ25fcG9pbnRlcihOVUxMKSArIHN5bmNocm9uaXplX3JjdSgpIGFuZCBhbiBpbi1mbGlnaHRcXG4rXFx0ICogcmVhZGVyIGNhbiBuZXZlciBvYnNlcnZlIGZyZWVkIG1lbW9yeS5cXG4rXFx0ICpcXG4rXFx0ICogVGhlIHNsb3cgcGF0aHMgLS0gbWFuYV9nZF9kZXN0cm95X2NxKCkgYW5kIHRoZSBDUSBpbnN0YWxsL3JlbW92ZVxcbitcXHQgKiBjYWxsZXJzIChtYW5hX2NyZWF0ZV90eHEvX3J4cSwgbWFuYV9pYl9pbnN0YWxsL3JlbW92ZV9jcV9jYikgLS1cXG4rXFx0ICogaW5zdGVhZCByZWFkIHRoZSBiYXNlIHdpdGggcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjcV90YWJsZSxcXG4rXFx0ICogdHJ1ZSkuICBUaGUgYmFyZSBcXFwidHJ1ZVxcXCIgaXMganVzdGlmaWVkIGJ5IHRlYXJkb3duIG9yZGVyaW5nLCBub3QgYnlcXG4rXFx0ICogYSBsb2NrOiB0aGUgYmFzZSB0YWJsZSBpcyByZXBsYWNlZCtmcmVlZCBvbmx5IGJ5XFxuK1xcdCAqIG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbCgpIChhbmQgdGhlIGNyZWF0ZS10aW1lIHJlaW5pdCksIGFuZCBldmVyeVxcbitcXHQgKiB0ZWFyZG93biBwYXRoIGZpcnN0IHJ1bnMgbWFuYV9yZW1vdmUoKSArIG1hbmFfcmRtYV9yZW1vdmUoKSwgd2hpY2hcXG4rXFx0ICogc3luY2hyb25vdXNseSBkcmFpbiB0aGUgbmV0ZGV2IGFuZCB0aGUgSUIgZGV2aWNlXFxuK1xcdCAqICh1bnJlZ2lzdGVyX25ldGRldmljZSAvIGliX3VucmVnaXN0ZXJfZGV2aWNlKSB0aGF0IGJvdW5kIGFsbFxcbitcXHQgKiBpbnN0YWxsL3JlbW92ZSBjYWxsZXJzOyB0aGUgcmVpbml0IGNhc2UgcnVucyBiZWZvcmUgZWl0aGVyXFxuK1xcdCAqIGNvbnN1bWVyIGlzIHByb2JlZC4gIFNvIG5vIHNsb3ctcGF0aCBjYWxsZXIgY2FuIHJ1biB3aGlsZSB0aGUgYmFzZVxcbitcXHQgKiB0YWJsZSBpcyBiZWluZyBmcmVlZC5cXG4rXFx0ICovXFxuK1xcdHN0cnVjdCBnZG1hX3F1ZXVlXFx0X19yY3UgKiBfX3JjdSAqY3FfdGFibGU7XFxuIFxcbiBcXHQvKiBQcm90ZWN0IGVxX3Rlc3RfZXZlbnQgYW5kIHRlc3RfZXZlbnRfZXFfaWQgICovXFxuIFxcdHN0cnVjdCBtdXRleFxcdFxcdGVxX3Rlc3RfZXZlbnRfbXV0ZXg7XFxuQEAgLTQ1Niw2ICs0ODEsMjEgQEAgc3RydWN0IGdkbWFfY29udGV4dCB7XFxuIFxcdC8qIEhhcmR3YXJlIGNvbW11bmljYXRpb24gY2hhbm5lbCAoSFdDKSAqL1xcbiBcXHRzdHJ1Y3QgZ2RtYV9kZXZcXHRcXHRod2M7XFxuIFxcbitcXHQvKiBkZXN0cm95X2NoYW5uZWwoKSB3YWl0cyBoZXJlIGZvciBhbGwgSFdDIHNlbmRlcnMgdG8gZXhpdC5cXG4rXFx0ICogTGl2ZXMgb24gZ2MgKG5vdCBod2MpIHNvIHdha2VfdXAoKSBhZnRlciB0aGUgbGFzdCBzZW5kZXInc1xcbitcXHQgKiBhdG9taWNfZGVjIGRvZXNuJ3QgZGVyZWZlcmVuY2UgZnJlZWQgaHdjIG1lbW9yeS5cXG4rXFx0ICovXFxuK1xcdHdhaXRfcXVldWVfaGVhZF90XFx0aHdjX2RyYWluX3dhaXRxO1xcbitcXG4rXFx0LyogU2VyaWFsaXplcyBod2MuZHJpdmVyX2RhdGEgKHRoZSBod19jaGFubmVsX2NvbnRleHQgcG9pbnRlcilcXG4rXFx0ICogYmV0d2VlbiB0aGUgY29udHJvbC1wbGFuZSByZWFkZXJzIGluIG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCksXFxuK1xcdCAqIG1hbmFfbmVlZF9sb2coKSBhbmQgbWFuYV9zZXJ2X3Jlc2V0KCkgYW5kIHRoZSBwdWJsaXNoL2NsZWFyIGluXFxuK1xcdCAqIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKCkvbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKCkuICBBbGwgdXNlcnNcXG4rXFx0ICogYXJlIGNvbnRyb2wtcGxhbmUgKEhXQyBjb21tYW5kcyBzbGVlcDsgcmVzZXQgcnVucyBvbiBhIHdvcmtxdWV1ZSksXFxuK1xcdCAqIHNvIGEgcGxhaW4gc3BpbmxvY2sgLS0gbm90IFJDVSAtLSBpcyBzdWZmaWNpZW50LlxcbitcXHQgKi9cXG4rXFx0c3BpbmxvY2tfdFxcdFxcdGh3Y19sb2NrO1xcbitcXG4gXFx0LyogQXp1cmUgbmV0d29yayBhZGFwdGVyICovXFxuIFxcdHN0cnVjdCBnZG1hX2RldlxcdFxcdG1hbmE7XFxuIFxcbkBAIC02NjgsNiArNzA4LDkgQEAgZW51bSB7XFxuIC8qIERyaXZlciBzdXBwb3J0cyBkeW5hbWljIGludGVycnVwdCBtb2RlcmF0aW9uIC0gRElNICovXFxuICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04gQklUKDI4KVxcbiBcXG4rLyogRHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgcXVldWUgZGVwdGggZm9yIEhXQyAqL1xcbisjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0hXQ19RVUVVRV9ERVBUSCBCSVQoMjkpXFxuK1xcbiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHUzEgXFxcXFxcbiBcXHQoR0RNQV9EUlZfQ0FQX0ZMQUdfMV9FUV9TSEFSSU5HX01VTFRJX1ZQT1JUIHwgXFxcXFxcbiBcXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9OQVBJX1dLRE9ORV9GSVggfCBcXFxcXFxuQEAgLTY4Myw2ICs3MjYsNyBAQCBlbnVtIHtcXG4gXFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfUFJPQkVfUkVDT1ZFUlkgfCBcXFxcXFxuIFxcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0hBTkRMRV9TVEFMTF9TUV9SRUNPVkVSWSB8IFxcXFxcXG4gXFx0IEdETUFfRFJWX0NBUF9GTEFHXzFfSFdDX1RJTUVPVVRfUkVDT1ZFUlkgfCBcXFxcXFxuK1xcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0RZTl9IV0NfUVVFVUVfREVQVEggfCBcXFxcXFxuIFxcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0VRX01TSV9VTlNIQVJFX01VTFRJX1ZQT1JUIHwgXFxcXFxcbiBcXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSU5URVJSVVBUX01PREVSQVRJT04pXFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYW5hL2h3X2NoYW5uZWwuaCBiL2luY2x1ZGUvbmV0L21hbmEvaHdfY2hhbm5lbC5oXFxuaW5kZXggMTZmZWIzOTYxNmMxYmUuLmVlYzVkM2FhMjNlMWQ1IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L21hbmEvaHdfY2hhbm5lbC5oXFxuKysrIGIvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmhcXG5AQCAtMTY0LDYgKzE2NCw5IEBAIHN0cnVjdCBod2Nfd3Ege1xcbiBcXHR1MTYgcXVldWVfZGVwdGg7XFxuIFxcbiBcXHRzdHJ1Y3QgaHdjX2NxICpod2NfY3E7XFxuK1xcbitcXHQvKiBTZXJpYWxpemVzIGNvbmN1cnJlbnQgbWFuYV9nZF9wb3N0X2FuZF9yaW5nKCkgY2FsbHMuICovXFxuK1xcdHNwaW5sb2NrX3QgbG9jaztcXG4gfTtcXG4gXFxuIHN0cnVjdCBod2NfY2FsbGVyX2N0eCB7XFxuQEAgLTE3Myw2ICsxNzYsMTcgQEAgc3RydWN0IGh3Y19jYWxsZXJfY3R4IHtcXG4gXFxuIFxcdHUzMiBlcnJvcjsgLyogTGludXggZXJyb3IgY29kZSAqL1xcbiBcXHR1MzIgc3RhdHVzX2NvZGU7XFxuK1xcbitcXHQvKiBQcm90ZWN0cyBvdXRwdXRfYnVmIGFnYWluc3QgY29uY3VycmVudCBhY2Nlc3MgZnJvbVxcbitcXHQgKiBoYW5kbGVfcmVzcCgpIChDUSBpbnRlcnJ1cHQpIGFuZCB0aGUgc2VuZGVyIHRpbWVvdXQgcGF0aC5cXG4rXFx0ICovXFxuK1xcdHNwaW5sb2NrX3QgbG9jaztcXG4rXFxuK1xcdC8qIFRyYWNrcyBzZW5kZXIgKyBoYW5kbGVfcmVzcCBvd25lcnNoaXAuICBUaGUgbGFzdCBwdXRcXG4rXFx0ICogKHJlZmNvdW50IHJlYWNoZXMgMCkgcmVsZWFzZXMgdGhlIGJpdG1hcCBzbG90LlxcbitcXHQgKi9cXG4rXFx0cmVmY291bnRfdCByZWZjbnQ7XFxuK1xcdHUxNiBtc2dfaWQ7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0IHtcXG5AQCAtMTgxLDggKzE5NSw5IEBAIHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQge1xcbiBcXG4gXFx0dTE2IG51bV9pbmZsaWdodF9tc2c7XFxuIFxcdHUzMiBtYXhfcmVxX21zZ19zaXplO1xcbitcXHR1MzIgbWF4X3Jlc3BfbXNnX3NpemU7XFxuIFxcbi1cXHR1MTYgaHdjX2luaXRfcV9kZXB0aF9tYXg7XFxuK1xcdHUzMiBod2NfaW5pdF9xX2RlcHRoX21heDtcXG4gXFx0dTMyIGh3Y19pbml0X21heF9yZXFfbXNnX3NpemU7XFxuIFxcdHUzMiBod2NfaW5pdF9tYXhfcmVzcF9tc2dfc2l6ZTtcXG4gXFxuQEAgLTE5MiwxMyArMjA3LDM4IEBAIHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQge1xcbiBcXHRzdHJ1Y3QgaHdjX3dxICp0eHE7XFxuIFxcdHN0cnVjdCBod2NfY3EgKmNxO1xcbiBcXG4tXFx0c3RydWN0IHNlbWFwaG9yZSBzZW1hO1xcbiBcXHRzdHJ1Y3QgZ2RtYV9yZXNvdXJjZSBpbmZsaWdodF9tc2dfcmVzO1xcbitcXHQvKiBXYWl0cXVldWUgZm9yIHNlbmRlcnMgYmxvY2tlZCBvbiBhIGZ1bGwgaW5mbGlnaHQgYml0bWFwLiAqL1xcbitcXHR3YWl0X3F1ZXVlX2hlYWRfdCBtc2dfd2FpdHE7XFxuIFxcbiBcXHR1MzIgcGZfZGVzdF92cnFfaWQ7XFxuIFxcdHUzMiBwZl9kZXN0X3ZyY3FfaWQ7XFxuIFxcdHUzMiBod2NfdGltZW91dDtcXG4gXFxuK1xcdC8qIFNldCBhZnRlciBjaGFubmVsIGlzIGZ1bGx5IGVzdGFibGlzaGVkOyBjbGVhcmVkIG9uIHRlYXJkb3duIHRvXFxuK1xcdCAqIGFib3J0IHdhaXRlcnMgaW4gbWFuYV9od2NfZ2V0X21zZ19pbmRleCgpIGFuZCByZWplY3QgbmV3IHNlbmRzLlxcbitcXHQgKi9cXG4rXFx0Ym9vbCBjaGFubmVsX3VwO1xcbitcXG4rXFx0LyogU2V0IG9uIGZpcnN0IEhXQyB0aW1lb3V0LiAgQ2F1c2VzIGdldF9tc2dfaW5kZXgoKSB0byByZXR1cm5cXG4rXFx0ICogLUVUSU1FRE9VVCBpbnN0ZWFkIG9mIHdhaXRpbmcsIGRyYWluaW5nIGFsbCBxdWV1ZWQgc2VuZGVycy5cXG4rXFx0ICovXFxuK1xcdGJvb2wgaHdjX3RpbWVkX291dDtcXG4rXFxuK1xcdC8qIFNldCBhZnRlciBtYW5hX3NtY19zZXR1cF9od2MoKSBzdWNjZWVkcyAoaGFyZHdhcmUgaGFzIGFjdGl2ZVxcbitcXHQgKiBNU1QgZW50cmllcykuICBPbiByZWNvdmVyYWJsZSBwYXRocyAoZXN0YWJsaXNoX2NoYW5uZWwpXFxuK1xcdCAqIGNsZWFyZWQgb25seSBhZnRlciBzdWNjZXNzZnVsIHRlYXJkb3duIHNvIGEgcmV0cnkgcmVtYWluc1xcbitcXHQgKiBwb3NzaWJsZS4gIE9uIHRoZSB0ZXJtaW5hbCBkZXN0cm95X2NoYW5uZWwgcGF0aCwgY2xlYXJlZFxcbitcXHQgKiB1bmNvbmRpdGlvbmFsbHkgc2luY2UgaHdjIGlzIGFib3V0IHRvIGJlIGZyZWVkLlxcbitcXHQgKi9cXG4rXFx0Ym9vbCBzZXR1cF9hY3RpdmU7XFxuK1xcbitcXHQvKiBDb3VudCBvZiBpbi1mbGlnaHQgbWFuYV9nZF9zZW5kX3JlcXVlc3QoKSBjYWxsZXJzLiAgUHJvdGVjdGVkXFxuK1xcdCAqIGJ5IGdjLVxcdTAwM2Vod2NfbG9jazsgdGhlIGxhc3Qgc2VuZGVyIHRvIGRyb3AgaXQgdG8gemVybyB3YWtlc1xcbitcXHQgKiBnYy1cXHUwMDNlaHdjX2RyYWluX3dhaXRxIGZvciB0aGUgbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKCkgZHJhaW4uXFxuK1xcdCAqL1xcbitcXHR1bnNpZ25lZCBpbnQgYWN0aXZlX3NlbmRlcnM7XFxuK1xcbiBcXHRzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmNhbGxlcl9jdHg7XFxuIH07XFxuIFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNzo1MjoyMS42ODcyOTAwMjdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MDI3NTQ4NDAzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNSUNST1NPRlRfTUFOQVwiLFxuICAgIFwiTUFOQV9JTkZJTklCQU5EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFuYV9pYl9pbnN0YWxsX2NxX2NiXCIsXG4gICAgXCJtYW5hX2liX3JlbW92ZV9jcV9jYlwiLFxuICAgIFwibWFuYV9od2NfZ2V0X21zZ19pbmRleFwiLFxuICAgIFwibWFuYV9od2NfaGFuZGxlX3Jlc3BcIixcbiAgICBcIm1hbmFfaHdjX3J4X2V2ZW50X2hhbmRsZXJcIixcbiAgICBcIm1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsXCIsXG4gICAgXCJtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWxcIixcbiAgICBcIm1hbmFfaHdjX3NlbmRfcmVxdWVzdFwiLFxuICAgIFwibWFuYV9nZF9wcm9jZXNzX2VxZVwiLFxuICAgIFwibWFuYV9nZF9kZXN0cm95X2NxXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIsIGluY2x1ZGluZyBhZGRpbmcgUkNVIHByb3RlY3Rpb24gZm9yIHRoZSBDUSB0YWJsZSwgaGFuZGxpbmcgSFdDIHRpbWVvdXRzLCBhbmQgYWRkaW5nIHJlZmNvdW50cyBmb3IgY2FsbGVyIGNvbnRleHRzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBsb2dpYyBvZiB0aGUgZHJpdmVyIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDdhN2Y2NzNjNWE0OTAwNTQwNWQ1NWZjMjU0MGYyNDJkM2I4OWNkOTZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCAyMiAxNzo1MjoxOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL2NxLmMgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9jcS5jXG5pbmRleCBmMjU0Nzk4OWY0MjI5MC4uMmJmNGJlMjFjZWRlNzkgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9jcS5jXG4rKysgYi9kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9jcS5jXG5AQCAtMTMxLDEyICsxMzEsMjAgQEAgc3RhdGljIHZvaWQgbWFuYV9pYl9jcV9oYW5kbGVyKHZvaWQgKmN0eCwgc3RydWN0IGdkbWFfcXVldWUgKmdkbWFfY3EpXG4gaW50IG1hbmFfaWJfaW5zdGFsbF9jcV9jYihzdHJ1Y3QgbWFuYV9pYl9kZXYgKm1kZXYsIHN0cnVjdCBtYW5hX2liX2NxICpjcSlcbiB7XG4gXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IG1kZXZfdG9fZ2MobWRldik7XG4rXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSBfX3JjdSAqKmNxX3RhYmxlO1xuIFx0c3RydWN0IGdkbWFfcXVldWUgKmdkbWFfY3E7XG4gXG4tXHRpZiAoY3EtXHUwMDNlcXVldWUuaWQgXHUwMDNlPSBnYy1cdTAwM2VtYXhfbnVtX2NxcylcbitcdC8qIE5vIHJjdV9yZWFkX2xvY2soKTogaW5zdGFsbC9yZW1vdmUgcnVuIHdpdGhpbiB0aGUgSUIgZGV2aWNlXG4rXHQgKiBsaWZldGltZSwgd2hpY2ggbWFuYV9yZG1hX3JlbW92ZSgpIChpYl91bnJlZ2lzdGVyX2RldmljZSkgZHJhaW5zXG4rXHQgKiBiZWZvcmUgdGhlIGJhc2UgY3FfdGFibGUgY2FuIGJlIGZyZWVkLiAgU2VlIGdkbWFfY29udGV4dDo6Y3FfdGFibGVcbitcdCAqIGluIGdkbWEuaCBmb3Igd2h5IFwidHJ1ZVwiIGlzIHNvdW5kLlxuK1x0ICovXG4rXHRjcV90YWJsZSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2MtXHUwMDNlY3FfdGFibGUsIHRydWUpO1xuK1x0aWYgKCFjcV90YWJsZSB8fCBjcS1cdTAwM2VxdWV1ZS5pZCBcdTAwM2U9IGdjLVx1MDAzZW1heF9udW1fY3FzKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbitcbiBcdC8qIENyZWF0ZSBDUSB0YWJsZSBlbnRyeSwgc2hhcmluZyBhIENRIGJldHdlZW4gV1FzIGlzIG5vdCBzdXBwb3J0ZWQgKi9cbi1cdGlmIChnYy1cdTAwM2VjcV90YWJsZVtjcS1cdTAwM2VxdWV1ZS5pZF0pXG4rXHRpZiAocmN1X2FjY2Vzc19wb2ludGVyKGNxX3RhYmxlW2NxLVx1MDAzZXF1ZXVlLmlkXSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFx0aWYgKGNxLVx1MDAzZXF1ZXVlLmttZW0pXG4gXHRcdGdkbWFfY3EgPSBjcS1cdTAwM2VxdWV1ZS5rbWVtO1xuQEAgLTE0OSwyMyArMTU3LDQ5IEBAIGludCBtYW5hX2liX2luc3RhbGxfY3FfY2Ioc3RydWN0IG1hbmFfaWJfZGV2ICptZGV2LCBzdHJ1Y3QgbWFuYV9pYl9jcSAqY3EpXG4gXHRnZG1hX2NxLVx1MDAzZXR5cGUgPSBHRE1BX0NRO1xuIFx0Z2RtYV9jcS1cdTAwM2VjcS5jYWxsYmFjayA9IG1hbmFfaWJfY3FfaGFuZGxlcjtcbiBcdGdkbWFfY3EtXHUwMDNlaWQgPSBjcS1cdTAwM2VxdWV1ZS5pZDtcbi1cdGdjLVx1MDAzZWNxX3RhYmxlW2NxLVx1MDAzZXF1ZXVlLmlkXSA9IGdkbWFfY3E7XG4rXHRyY3VfYXNzaWduX3BvaW50ZXIoY3FfdGFibGVbY3EtXHUwMDNlcXVldWUuaWRdLCBnZG1hX2NxKTtcbiBcdHJldHVybiAwO1xuIH1cbiBcbiB2b2lkIG1hbmFfaWJfcmVtb3ZlX2NxX2NiKHN0cnVjdCBtYW5hX2liX2RldiAqbWRldiwgc3RydWN0IG1hbmFfaWJfY3EgKmNxKVxuIHtcbiBcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gbWRldl90b19nYyhtZGV2KTtcbitcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqY3FfdGFibGU7XG4rXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSAqZ2RtYV9jcTtcbiBcbi1cdGlmIChjcS1cdTAwM2VxdWV1ZS5pZCBcdTAwM2U9IGdjLVx1MDAzZW1heF9udW1fY3FzIHx8IGNxLVx1MDAzZXF1ZXVlLmlkID09IElOVkFMSURfUVVFVUVfSUQpXG4rXHRpZiAoY3EtXHUwMDNlcXVldWUuaWQgPT0gSU5WQUxJRF9RVUVVRV9JRClcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKGNxLVx1MDAzZXF1ZXVlLmttZW0pXG4gXHQvKiBUaGVuIGl0IHdpbGwgYmUgY2xlYW5lZCBhbmQgcmVtb3ZlZCBieSB0aGUgbWFuYSAqL1xuIFx0XHRyZXR1cm47XG4gXG4tXHRrZnJlZShnYy1cdTAwM2VjcV90YWJsZVtjcS1cdTAwM2VxdWV1ZS5pZF0pO1xuLVx0Z2MtXHUwMDNlY3FfdGFibGVbY3EtXHUwMDNlcXVldWUuaWRdID0gTlVMTDtcbitcdC8qIE5vIHJjdV9yZWFkX2xvY2soKTogbGlrZSBtYW5hX2liX2luc3RhbGxfY3FfY2IoKSwgdGhpcyBydW5zIHdpdGhpblxuK1x0ICogdGhlIElCIGRldmljZSBsaWZldGltZSB0aGF0IG1hbmFfcmRtYV9yZW1vdmUoKSBkcmFpbnMgYmVmb3JlIHRoZVxuK1x0ICogYmFzZSBjcV90YWJsZSBjYW4gYmUgZnJlZWQuICBTZWUgZ2RtYV9jb250ZXh0OjpjcV90YWJsZSBpbiBnZG1hLmguXG4rXHQgKi9cbitcdGNxX3RhYmxlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnYy1cdTAwM2VjcV90YWJsZSwgdHJ1ZSk7XG4rXHRpZiAoIWNxX3RhYmxlIHx8IGNxLVx1MDAzZXF1ZXVlLmlkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMpXG4rXHRcdHJldHVybjtcbitcdC8qIFJlbW92ZXJzIGZvciBhIGdpdmVuIENRIGFyZSBzZXJpYWxpemVkIGJ5IHRoZSBJQiBjb3JlLCBzbyB0aGUgc2xvdFxuK1x0ICogaXMgcmVhZCBhbmQgY2xlYXJlZCB3aXRob3V0IHJjdV9yZWFkX2xvY2soKSBvciBhdG9taWNpdHk6IGEgQ1EgaXNcbitcdCAqIG5ldmVyIHRvcm4gZG93biB3aGlsZSBhIGxpdmUgUVAgcmVmZXJlbmNlcyBpdCAoY3EtXHUwMDNldXNlY250KSwgbm9yXG4rXHQgKiB3aGlsZSB0aGUgUVAtY3JlYXRlIHRoYXQgaW5zdGFsbGVkIHRoZSBlbnRyeSBpcyBzdGlsbCBydW5uaW5nICh0aGF0XG4rXHQgKiBjcmVhdGUgaG9sZHMgYSByZWZlcmVuY2Ugb24gdGhlIENRIHVvYmplY3QgYWNyb3NzIGl0cyBlcnJvciBwYXRoLFxuK1x0ICogYmVmb3JlIHVzZWNudCBpcyB0YWtlbikuICBBbnkgZG91YmxlLXJlbW92ZSBpcyB0aGVyZWZvcmUgc2VxdWVudGlhbFxuK1x0ICogLS0gdGhlIGxhdGVyIGNhbGxlciBzZWVzIHRoZSBOVUxMIHN0b3JlZCBiZWxvdyBhbmQgcmV0dXJucy5cbitcdCAqL1xuK1x0Z2RtYV9jcSA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoY3FfdGFibGVbY3EtXHUwMDNlcXVldWUuaWRdLCB0cnVlKTtcbitcdGlmICghZ2RtYV9jcSlcbitcdFx0cmV0dXJuOyAgLyogYWxyZWFkeSByZW1vdmVkIGJ5IGEgcHJpb3IgdGVhcmRvd24gcGF0aCAqL1xuK1xuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKGNxX3RhYmxlW2NxLVx1MDAzZXF1ZXVlLmlkXSwgTlVMTCk7XG4rXG4rXHQvKiBXYWl0IGZvciBpbi1mbGlnaHQgRVEgaGFuZGxlcnMgdGhhdCBtYXkgaGF2ZSBsb2FkZWQgdGhlIG9sZFxuK1x0ICogcG9pbnRlciB2aWEgcmN1X2RlcmVmZXJlbmNlKCkgdG8gZmluaXNoIGJlZm9yZSBmcmVlaW5nLlxuK1x0ICovXG4rXHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdGtmcmVlKGdkbWFfY3EpO1xuIH1cbiBcbiBpbnQgbWFuYV9pYl9hcm1fY3Eoc3RydWN0IGliX2NxICppYmNxLCBlbnVtIGliX2NxX25vdGlmeV9mbGFncyBmbGFncylcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2dkbWFfbWFpbi5jXG5pbmRleCBhMzhkNGJiNzQ2MjFmOS4uMTc3MTFlZTM3YzhiZTMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9nZG1hX21haW4uY1xuKysrIGIvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvZ2RtYV9tYWluLmNcbkBAIC0xNjEsNiArMTYxLDggQEAgc3RhdGljIGludCBtYW5hX2dkX2luaXRfcmVnaXN0ZXJzKHN0cnVjdCBwY2lfZGV2ICpwZGV2KVxuIGJvb2wgbWFuYV9uZWVkX2xvZyhzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgaW50IGVycilcbiB7XG4gXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XG4rXHRib29sIG5lZWRfbG9nID0gdHJ1ZTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRpZiAoZXJyICE9IC1FVElNRURPVVQpXG4gXHRcdHJldHVybiB0cnVlO1xuQEAgLTE2OCwxMSArMTcwLDEzIEBAIGJvb2wgbWFuYV9uZWVkX2xvZyhzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgaW50IGVycilcbiBcdGlmICghZ2MpXG4gXHRcdHJldHVybiB0cnVlO1xuIFxuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiBcdGh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiBcdGlmIChod2MgXHUwMDI2XHUwMDI2IGh3Yy1cdTAwM2Vod2NfdGltZW91dCA9PSAwKVxuLVx0XHRyZXR1cm4gZmFsc2U7XG4rXHRcdG5lZWRfbG9nID0gZmFsc2U7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4gXG4tXHRyZXR1cm4gdHJ1ZTtcbitcdHJldHVybiBuZWVkX2xvZztcbiB9XG4gXG4gc3RhdGljIGludCBtYW5hX2dkX3F1ZXJ5X21heF9yZXNvdXJjZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG5AQCAtMzY3LDkgKzM3MSwyNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfZGV0ZWN0X2RldmljZXMoc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gaW50IG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MzIgcmVxX2xlbiwgY29uc3Qgdm9pZCAqcmVxLFxuIFx0XHRcdCB1MzIgcmVzcF9sZW4sIHZvaWQgKnJlc3ApXG4ge1xuLVx0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjID0gZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xuK1x0c3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbitcdGludCBlcnI7XG4rXG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuK1x0aHdjID0gZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xuK1x0aWYgKCFod2MpIHtcbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcdGh3Yy1cdTAwM2VhY3RpdmVfc2VuZGVycysrO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuK1xuK1x0ZXJyID0gbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KGh3YywgcmVxX2xlbiwgcmVxLCByZXNwX2xlbiwgcmVzcCk7XG4gXG4tXHRyZXR1cm4gbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KGh3YywgcmVxX2xlbiwgcmVxLCByZXNwX2xlbiwgcmVzcCk7XG4rXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuK1x0aWYgKC0taHdjLVx1MDAzZWFjdGl2ZV9zZW5kZXJzID09IDApXG4rXHRcdHdha2VfdXAoXHUwMDI2Z2MtXHUwMDNlaHdjX2RyYWluX3dhaXRxKTtcbitcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbitcbitcdHJldHVybiBlcnI7XG4gfVxuIEVYUE9SVF9TWU1CT0xfTlMobWFuYV9nZF9zZW5kX3JlcXVlc3QsIFwiTkVUX01BTkFcIik7XG4gXG5AQCAtNjIyLDYgKzY0NCw3IEBAIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiB7XG4gXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyA9IHBjaV9nZXRfZHJ2ZGF0YShwZGV2KTtcbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YztcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXHRpbnQgcmV0O1xuIFxuIFx0aWYgKCFnYykge1xuQEAgLTYzMSwxNCArNjU0LDE3IEBAIHN0YXRpYyB2b2lkIG1hbmFfc2Vydl9yZXNldChzdHJ1Y3QgcGNpX2RldiAqcGRldilcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuK1x0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiBcdGh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiBcdGlmICghaHdjKSB7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2ssIGZsYWdzKTtcbiBcdFx0ZGV2X2VycihcdTAwMjZwZGV2LVx1MDAzZWRldiwgXCJNQU5BIHNlcnZpY2U6IG5vIEhXQ1xcblwiKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4gXHQvKiBIV0MgaXMgbm90IHJlc3BvbmRpbmcgaW4gdGhpcyBjYXNlLCBzbyBkb24ndCB3YWl0ICovXG4gXHRod2MtXHUwMDNlaHdjX3RpbWVvdXQgPSAwO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuIFxuIFx0ZGV2X2luZm8oXHUwMDI2cGRldi1cdTAwM2VkZXYsIFwiTUFOQSByZXNldCBjeWNsZSBzdGFydFxcblwiKTtcbiBcbkBAIC03NjEsNiArNzg3LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9nZF9wcm9jZXNzX2VxZShzdHJ1Y3QgZ2RtYV9xdWV1ZSAqZXEpXG4gXHR1bmlvbiBnZG1hX2VxZV9pbmZvIGVxZV9pbmZvO1xuIFx0ZW51bSBnZG1hX2VxZV90eXBlIHR5cGU7XG4gXHRzdHJ1Y3QgZ2RtYV9ldmVudCBldmVudDtcbitcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqY3FfdGFibGU7XG4gXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSAqY3E7XG4gXHRzdHJ1Y3QgZ2RtYV9lcWUgKmVxZTtcbiBcdHUzMiBjcV9pZDtcbkBAIC03NzIsMTAgKzc5OSwxMSBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX3Byb2Nlc3NfZXFlKHN0cnVjdCBnZG1hX3F1ZXVlICplcSlcbiBcdHN3aXRjaCAodHlwZSkge1xuIFx0Y2FzZSBHRE1BX0VRRV9DT01QTEVUSU9OOlxuIFx0XHRjcV9pZCA9IGVxZS1cdTAwM2VkZXRhaWxzWzBdIFx1MDAyNiAweEZGRkZGRjtcbi1cdFx0aWYgKFdBUk5fT05fT05DRShjcV9pZCBcdTAwM2U9IGdjLVx1MDAzZW1heF9udW1fY3FzKSlcbitcdFx0Y3FfdGFibGUgPSByY3VfZGVyZWZlcmVuY2UoZ2MtXHUwMDNlY3FfdGFibGUpO1xuK1x0XHRpZiAoV0FSTl9PTl9PTkNFKGNxX2lkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMgfHwgIWNxX3RhYmxlKSlcbiBcdFx0XHRicmVhaztcbiBcbi1cdFx0Y3EgPSBnYy1cdTAwM2VjcV90YWJsZVtjcV9pZF07XG4rXHRcdGNxID0gcmN1X2RlcmVmZXJlbmNlKGNxX3RhYmxlW2NxX2lkXSk7XG4gXHRcdGlmIChXQVJOX09OX09OQ0UoIWNxIHx8IGNxLVx1MDAzZXR5cGUgIT0gR0RNQV9DUSB8fCBjcS1cdTAwM2VpZCAhPSBjcV9pZCkpXG4gXHRcdFx0YnJlYWs7XG4gXG5AQCAtMTA4MiwxNSArMTExMCwyOCBAQCBzdGF0aWMgdm9pZCBtYW5hX2dkX2NyZWF0ZV9jcShjb25zdCBzdHJ1Y3QgZ2RtYV9xdWV1ZV9zcGVjICpzcGVjLFxuIHN0YXRpYyB2b2lkIG1hbmFfZ2RfZGVzdHJveV9jcShzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYyxcbiBcdFx0XHQgICAgICAgc3RydWN0IGdkbWFfcXVldWUgKnF1ZXVlKVxuIHtcbitcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqY3FfdGFibGU7XG4gXHR1MzIgaWQgPSBxdWV1ZS1cdTAwM2VpZDtcbiBcbi1cdGlmIChpZCBcdTAwM2U9IGdjLVx1MDAzZW1heF9udW1fY3FzKVxuK1x0LyogTm8gcmN1X3JlYWRfbG9jaygpIGhlcmU6IG1hbmFfZ2RfZGVzdHJveV9jcSgpIHJ1bnMgb25seSBvbiB0aGVcbitcdCAqIENRLWRlc3Ryb3kvdGVhcmRvd24gcGF0aCwgd2hlcmUgdGhlIGJhc2UgY3FfdGFibGUgaXMgc3RhYmxlLiAgU2VlXG4rXHQgKiB0aGUgbGlmZWN5Y2xlIG5vdGUgb24gZ2RtYV9jb250ZXh0OjpjcV90YWJsZSBpbiBnZG1hLmggZm9yIHdoeSB0aGVcbitcdCAqIFwidHJ1ZVwiIHByZWRpY2F0ZSBpcyBzb3VuZC5cbitcdCAqL1xuK1x0Y3FfdGFibGUgPSByY3VfZGVyZWZlcmVuY2VfcHJvdGVjdGVkKGdjLVx1MDAzZWNxX3RhYmxlLCB0cnVlKTtcbitcdGlmICghY3FfdGFibGUgfHwgaWQgXHUwMDNlPSBnYy1cdTAwM2VtYXhfbnVtX2NxcylcbiBcdFx0cmV0dXJuO1xuIFxuLVx0aWYgKCFnYy1cdTAwM2VjcV90YWJsZVtpZF0pXG4rXHRpZiAoIXJjdV9hY2Nlc3NfcG9pbnRlcihjcV90YWJsZVtpZF0pKVxuIFx0XHRyZXR1cm47XG4gXG4tXHRnYy1cdTAwM2VjcV90YWJsZVtpZF0gPSBOVUxMO1xuK1x0cmN1X2Fzc2lnbl9wb2ludGVyKGNxX3RhYmxlW2lkXSwgTlVMTCk7XG4rXG4rXHQvKiBXYWl0IGZvciBpbi1mbGlnaHQgRVEgaGFuZGxlcnMgdGhhdCBtYXkgaGF2ZSBsb2FkZWQgdGhlIG9sZFxuK1x0ICogcG9pbnRlciB2aWEgcmN1X2RlcmVmZXJlbmNlKCkgdG8gZmluaXNoIGJlZm9yZSB0aGUgY2FsbGVyXG4rXHQgKiBmcmVlcyB0aGUgQ1EgbWVtb3J5LlxuK1x0ICovXG4rXHRzeW5jaHJvbml6ZV9yY3UoKTtcbiB9XG4gXG4gaW50IG1hbmFfZ2RfY3JlYXRlX2h3Y19xdWV1ZShzdHJ1Y3QgZ2RtYV9kZXYgKmdkLFxuQEAgLTExODUsNiArMTIyNiwxNiBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfY3JlYXRlX2RtYV9yZWdpb24oc3RydWN0IGdkbWFfZGV2ICpnZCxcbiBcdGlmICghTUFOQV9QQUdFX0FMSUdORUQoZ21pLVx1MDAzZXZpcnRfYWRkcikpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuK1x0LyogTm8gUkNVIG5lZWRlZDogdGhpcyBydW5zIG9ubHkgb24gdGhlIGRhdGEtcGF0aCBxdWV1ZS1jcmVhdGlvblxuK1x0ICogcGF0aCAobWFuYV9nZF9jcmVhdGVfbWFuYV9lcS9tYW5hX2dkX2NyZWF0ZV9tYW5hX3dxX2NxLCBjYWxsZWRcbitcdCAqIGJ5IG1hbmFfZW4gdW5kZXIgUlROTCBhbmQgYnkgbWFuYV9pYiBSRE1BIHZlcmJzLCBvciBkdXJpbmdcbitcdCAqIGluaXQpLiAgRXZlcnkgdGVhcmRvd24gcGF0aCDigJQgbWFuYV9nZF9yZW1vdmUsIG1hbmFfZ2Rfc3VzcGVuZCxcbitcdCAqIGFuZCB0aGUgSFdDIHJlc2V0L3NlcnZpY2UgcGF0aCAod2hpY2ggZ29lcyB0aHJvdWdoXG4rXHQgKiBtYW5hX2dkX3N1c3BlbmQpIOKAlCBkcmFpbnMgdGhvc2UgY29uc3VtZXJzIHZpYSBtYW5hX3JkbWFfcmVtb3ZlKClcbitcdCAqICsgbWFuYV9yZW1vdmUoKSBiZWZvcmUgbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKCkgY2xlYXJzXG4rXHQgKiBnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGEsIHNvIG5vIGNvbmN1cnJlbnQgZGVzdHJveSBjYW4gcmFjZSB3aXRoXG4rXHQgKiB0aGlzIGRlcmVmZXJlbmNlLlxuK1x0ICovXG4gXHRod2MgPSBnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGE7XG4gXHRyZXFfbXNnX3NpemUgPSBzdHJ1Y3Rfc2l6ZShyZXEsIHBhZ2VfYWRkcl9saXN0LCBudW1fcGFnZSk7XG4gXHRpZiAocmVxX21zZ19zaXplIFx1MDAzZSBod2MtXHUwMDNlbWF4X3JlcV9tc2dfc2l6ZSlcbkBAIC0xMzc0LDcgKzE0MjUsMTcgQEAgaW50IG1hbmFfZ2RfdmVyaWZ5X3ZmX3ZlcnNpb24oc3RydWN0IHBjaV9kZXYgKnBkZXYpXG4gXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XG4gXHRpbnQgZXJyO1xuIFxuK1x0LyogTm8gUkNVIG5lZWRlZDogdGhpcyBydW5zIG9ubHkgaW5zaWRlIG1hbmFfZ2Rfc2V0dXAsIG9uIHRoZVxuK1x0ICogcHJvYmUgYW5kIHJlc3VtZSBwYXRocy4gIFRoZSBQQ0kvUE0gY29yZSBob2xkcyBkZXZpY2VfbG9ja1xuK1x0ICogYWNyb3NzIC5wcm9iZS8ucmVzdW1lIGFuZCAucmVtb3ZlLy5zdXNwZW5kLCBzbyBzZXR1cCBjYW5ub3RcbitcdCAqIG92ZXJsYXAgdGVhcmRvd24gb2YgdGhlIHNhbWUgZGV2aWNlLiAgVGhlIEhXQyByZXNldC9zZXJ2aWNlXG4rXHQgKiBwYXRoIGlzIGFkZGl0aW9uYWxseSBzZXJpYWxpemVkIGJ5IEdDX0lOX1NFUlZJQ0UgYW5kIHJ1bnNcbitcdCAqIHN1c3BlbmQgKGRlc3Ryb3kpIHRoZW4gcmVzdW1lICh0aGlzKSBzZXF1ZW50aWFsbHkgaW4gb25lIHdvcmtcbitcdCAqIGl0ZW0uICBkcml2ZXJfZGF0YSB3YXMganVzdCBzZXQgYnkgbWFuYV9od2NfY3JlYXRlX2NoYW5uZWxcbitcdCAqIGVhcmxpZXIgaW4gdGhpcyBzYW1lIHNldHVwIGNhbGwsIHNvIGl0IGlzIGxpdmUgaGVyZS5cbitcdCAqL1xuIFx0aHdjID0gZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhO1xuK1xuIFx0bWFuYV9nZF9pbml0X3JlcV9oZHIoXHUwMDI2cmVxLmhkciwgR0RNQV9WRVJJRllfVkZfRFJJVkVSX1ZFUlNJT04sXG4gXHRcdFx0ICAgICBzaXplb2YocmVxKSwgc2l6ZW9mKHJlc3ApKTtcbiBcbkBAIC0yMzY0LDYgKzI0MjUsNyBAQCBzdGF0aWMgaW50IG1hbmFfZ2RfcHJvYmUoc3RydWN0IHBjaV9kZXYgKnBkZXYsIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICplbnQpXG4gXG4gXHRtdXRleF9pbml0KFx1MDAyNmdjLVx1MDAzZWVxX3Rlc3RfZXZlbnRfbXV0ZXgpO1xuIFx0bXV0ZXhfaW5pdChcdTAwMjZnYy1cdTAwM2VnaWNfbXV0ZXgpO1xuK1x0c3Bpbl9sb2NrX2luaXQoXHUwMDI2Z2MtXHUwMDNlaHdjX2xvY2spO1xuIFx0cGNpX3NldF9kcnZkYXRhKHBkZXYsIGdjKTtcbiBcdGdjLVx1MDAzZWJhcjBfcGEgPSBwY2lfcmVzb3VyY2Vfc3RhcnQocGRldiwgMCk7XG4gXHRnYy1cdTAwM2ViYXIwX3NpemUgPSBwY2lfcmVzb3VyY2VfbGVuKHBkZXYsIDApO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL2h3X2NoYW5uZWwuY1xuaW5kZXggZTNjMjRkNTBkYWQwN2MuLjA0ODFkNDA0NDM0MjRmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvaHdfY2hhbm5lbC5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9od19jaGFubmVsLmNcbkBAIC00LDI3ICs0LDU1IEBAXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hbmEvZ2RtYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hbmEvbWFuYS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L21hbmEvaHdfY2hhbm5lbC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcGNpLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC92bWFsbG9jLmhcdTAwM2VcbiBcbisvKiBBY3F1aXJlIGEgZnJlZSBtZXNzYWdlIHNsb3QgZnJvbSB0aGUgaW5mbGlnaHQgYml0bWFwLiAgUmV0dXJuc1xuKyAqIC1FTk9ERVYgaWYgdGhlIGNoYW5uZWwgaXMgdG9ybiBkb3duLCBvciAtRVRJTUVET1VUIGlmIGEgcHJpb3IgSFdDXG4rICogY29tbWFuZCBoYXMgdGltZWQgb3V0IChwcmVzZXJ2aW5nIHRoZSBlcnJvciBjb2RlIGNhbGxlcnMgZXhwZWN0KS5cbisgKi9cbiBzdGF0aWMgaW50IG1hbmFfaHdjX2dldF9tc2dfaW5kZXgoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgKm1zZ19pZClcbiB7XG4gXHRzdHJ1Y3QgZ2RtYV9yZXNvdXJjZSAqciA9IFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHUzMiBpbmRleDtcbiBcbi1cdGRvd24oXHUwMDI2aHdjLVx1MDAzZXNlbWEpO1xuK1x0Zm9yICg7Oykge1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZyLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbi1cdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnItXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRpZiAoIWh3Yy1cdTAwM2VjaGFubmVsX3VwIHx8IGh3Yy1cdTAwM2Vod2NfdGltZWRfb3V0KSB7XG4rXHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyLVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcdFx0XHRyZXR1cm4gaHdjLVx1MDAzZWNoYW5uZWxfdXAgPyAtRVRJTUVET1VUIDogLUVOT0RFVjtcbitcdFx0fVxuIFxuLVx0aW5kZXggPSBmaW5kX2ZpcnN0X3plcm9fYml0KGh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLm1hcCxcbi1cdFx0XHRcdCAgICBod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5zaXplKTtcbitcdFx0aW5kZXggPSBmaW5kX2ZpcnN0X3plcm9fYml0KHItXHUwMDNlbWFwLCByLVx1MDAzZXNpemUpO1xuK1x0XHRpZiAoaW5kZXggXHUwMDNjIHItXHUwMDNlc2l6ZSkge1xuK1x0XHRcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xuK1xuK1x0XHRcdGJpdG1hcF9zZXQoci1cdTAwM2VtYXAsIGluZGV4LCAxKTtcbitcdFx0XHRjdHggPSBcdTAwMjZod2MtXHUwMDNlY2FsbGVyX2N0eFtpbmRleF07XG4rXHRcdFx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2Y3R4LVx1MDAzZWNvbXBfZXZlbnQpO1xuK1x0XHRcdHJlZmNvdW50X3NldChcdTAwMjZjdHgtXHUwMDNlcmVmY250LCAxKTtcbitcdFx0XHRjdHgtXHUwMDNlbXNnX2lkID0gaW5kZXg7XG4rXHRcdFx0Y3R4LVx1MDAzZWVycm9yID0gLUVJTlBST0dSRVNTO1xuK1x0XHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ci1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZyLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbi1cdGJpdG1hcF9zZXQoaHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwLCBpbmRleCwgMSk7XG4rXHRcdHdhaXRfZXZlbnQoaHdjLVx1MDAzZW1zZ193YWl0cSxcbitcdFx0XHQgICAhaHdjLVx1MDAzZWNoYW5uZWxfdXAgfHxcbitcdFx0XHQgICBod2MtXHUwMDNlaHdjX3RpbWVkX291dCB8fFxuK1x0XHRcdCAgICFiaXRtYXBfZnVsbChyLVx1MDAzZW1hcCwgci1cdTAwM2VzaXplKSk7XG4gXG4tXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNnItXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHRpZiAoIWh3Yy1cdTAwM2VjaGFubmVsX3VwKVxuK1x0XHRcdHJldHVybiAtRU5PREVWO1xuIFxuLVx0Km1zZ19pZCA9IGluZGV4O1xuK1x0XHRpZiAoaHdjLVx1MDAzZWh3Y190aW1lZF9vdXQpXG4rXHRcdFx0cmV0dXJuIC1FVElNRURPVVQ7XG4rXHR9XG4gXG4rXHQqbXNnX2lkID0gaW5kZXg7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMzQsMTAgKzYyLDE3IEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX3B1dF9tc2dfaW5kZXgoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgbXNnX2lkKVxuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnItXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0Yml0bWFwX2NsZWFyKGh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLm1hcCwgbXNnX2lkLCAxKTtcbitcdGJpdG1hcF9jbGVhcihyLVx1MDAzZW1hcCwgbXNnX2lkLCAxKTtcbiBcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2ci1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHR1cChcdTAwMjZod2MtXHUwMDNlc2VtYSk7XG4rXHR3YWtlX3VwKFx1MDAyNmh3Yy1cdTAwM2Vtc2dfd2FpdHEpO1xuK31cbitcbitzdGF0aWMgdm9pZCBod2NfY3R4X3B1dChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsXG4rXHRcdFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHgpXG4re1xuK1x0aWYgKHJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZjdHgtXHUwMDNlcmVmY250KSlcbitcdFx0bWFuYV9od2NfcHV0X21zZ19pbmRleChod2MsIGN0eC1cdTAwM2Vtc2dfaWQpO1xuIH1cbiBcbiBzdGF0aWMgaW50IG1hbmFfaHdjX3ZlcmlmeV9yZXNwX21zZyhjb25zdCBzdHJ1Y3QgaHdjX2NhbGxlcl9jdHggKmNhbGxlcl9jdHgsXG5AQCAtODMsNiArMTE4LDE3IEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX2hhbmRsZV9yZXNwKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlc3BfbGVuLFxuIFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHg7XG4gXHRpbnQgZXJyO1xuIFxuK1x0LyogVmFsaWRhdGUgbXNnX2lkIGlzIGluIHJhbmdlIGJlZm9yZSB1c2luZyBpdCB0byBpbmRleCBiaXRtYXBcbitcdCAqIGFuZCBjYWxsZXJfY3R4IGFycmF5LiAgTWFsaWNpb3VzIGZpcm13YXJlIGNvdWxkIHNlbmRcbitcdCAqIG91dC1vZi1yYW5nZSBtc2dfaWQgY2F1c2luZyBvdXQtb2YtYm91bmRzIGFjY2Vzcy5cbitcdCAqL1xuK1x0aWYgKG1zZ19pZCBcdTAwM2U9IGh3Yy1cdTAwM2VudW1faW5mbGlnaHRfbXNnKSB7XG4rXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJod2Nfcng6IG1zZ19pZCAldSBcdTAwM2U9IG1heCAldVxcblwiLFxuK1x0XHRcdG1zZ19pZCwgaHdjLVx1MDAzZW51bV9pbmZsaWdodF9tc2cpO1xuK1x0XHRtYW5hX2h3Y19wb3N0X3J4X3dxZShod2MtXHUwMDNlcnhxLCByeF9yZXEpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRpZiAoIXRlc3RfYml0KG1zZ19pZCwgaHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwKSkge1xuIFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiaHdjX3J4OiBpbnZhbGlkIG1zZ19pZCA9ICV1XFxuXCIsIG1zZ19pZCk7XG4gXHRcdG1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Yy1cdTAwM2VyeHEsIHJ4X3JlcSk7XG5AQCAtOTAsMjIgKzEzNiw0NCBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19oYW5kbGVfcmVzcChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXNwX2xlbixcbiBcdH1cbiBcbiBcdGN0eCA9IGh3Yy1cdTAwM2VjYWxsZXJfY3R4ICsgbXNnX2lkO1xuLVx0ZXJyID0gbWFuYV9od2NfdmVyaWZ5X3Jlc3BfbXNnKGN0eCwgcmVzcF9tc2csIHJlc3BfbGVuKTtcbi1cdGlmIChlcnIpXG4tXHRcdGdvdG8gb3V0O1xuIFxuLVx0Y3R4LVx1MDAzZXN0YXR1c19jb2RlID0gcmVzcF9tc2ctXHUwMDNlc3RhdHVzO1xuK1x0LyogUmVqZWN0IHJlc3BvbnNlcyBsYXJnZXIgdGhhbiB0aGUgUlggRE1BIGJ1ZmZlciDigJQgdGhlIFNHRVxuK1x0ICogbGltaXRzIHdoYXQgaGFyZHdhcmUgY2FuIERNQSwgc28gYW4gb3ZlcnNpemVkIHJlc3BfbGVuXG4rXHQgKiBpbmRpY2F0ZXMgYSBmaXJtd2FyZSBidWcuICBGYWlsIHJhdGhlciB0aGFuIHNpbGVudGx5XG4rXHQgKiB0cnVuY2F0aW5nLlxuK1x0ICovXG4rXHRpZiAocmVzcF9sZW4gXHUwMDNlIHJ4X3JlcS1cdTAwM2VidWZfbGVuKSB7XG4rXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJIV0MgUlg6IHJlc3BfbGVuICV1IFx1MDAzZSBidWZfbGVuICV1XFxuXCIsXG4rXHRcdFx0cmVzcF9sZW4sIHJ4X3JlcS1cdTAwM2VidWZfbGVuKTtcbitcdFx0cmVzcF9sZW4gPSAwO1xuK1x0fVxuIFxuLVx0bWVtY3B5KGN0eC1cdTAwM2VvdXRwdXRfYnVmLCByZXNwX21zZywgcmVzcF9sZW4pO1xuLW91dDpcbi1cdGN0eC1cdTAwM2VlcnJvciA9IGVycjtcbitcdHNwaW5fbG9jayhcdTAwMjZjdHgtXHUwMDNlbG9jayk7XG4rXG4rXHRlcnIgPSBtYW5hX2h3Y192ZXJpZnlfcmVzcF9tc2coY3R4LCByZXNwX21zZywgcmVzcF9sZW4pO1xuIFxuLVx0LyogTXVzdCBwb3N0IHJ4IHdxZSBiZWZvcmUgY29tcGxldGUoKSwgb3RoZXJ3aXNlIHRoZSBuZXh0IHJ4IG1heVxuLVx0ICogaGl0IG5vX3dxZSBlcnJvci5cbitcdGlmICghZXJyIFx1MDAyNlx1MDAyNiBjdHgtXHUwMDNlb3V0cHV0X2J1Zikge1xuK1x0XHRjdHgtXHUwMDNlc3RhdHVzX2NvZGUgPSByZXNwX21zZy1cdTAwM2VzdGF0dXM7XG4rXHRcdG1lbWNweShjdHgtXHUwMDNlb3V0cHV0X2J1ZiwgcmVzcF9tc2csIHJlc3BfbGVuKTtcbitcdFx0Y3R4LVx1MDAzZWVycm9yID0gMDtcbitcdH0gZWxzZSBpZiAoY3R4LVx1MDAzZW91dHB1dF9idWYpIHtcbitcdFx0LyogT25seSBvdmVyd3JpdGUgZXJyb3IgaWYgdGhlIHNlbmRlciBoYXNuJ3QgdGltZWQgb3V0XG4rXHRcdCAqIG9yIGJlZW4gZm9yY2UtY29tcGxldGVkIGJ5IGRlc3Ryb3kuICBXaGVuIG91dHB1dF9idWZcbitcdFx0ICogaXMgTlVMTCwgYSB0ZXJtaW5hbCBlcnJvciAoLUVOT0RFViBvciB0aW1lb3V0KSBoYXNcbitcdFx0ICogYWxyZWFkeSBiZWVuIHNldCDigJQgcHJlc2VydmUgaXQgc28gdGhlIHNlbmRlciBkb2Vzbid0XG4rXHRcdCAqIHNlZSBhIHNwdXJpb3VzIHN1Y2Nlc3MuXG4rXHRcdCAqL1xuK1x0XHRjdHgtXHUwMDNlZXJyb3IgPSBlcnI7XG4rXHR9XG4rXG4rXHQvKiBQb3N0IFJYIFdRRSBiZWZvcmUgY29tcGxldGluZyDigJQgdGhlIG5leHQgcmVzcG9uc2UgbWF5IGFycml2ZVxuK1x0ICogaW1tZWRpYXRlbHkgYW5kIG5lZWRzIGEgcG9zdGVkIGJ1ZmZlci5cbiBcdCAqL1xuIFx0bWFuYV9od2NfcG9zdF9yeF93cWUoaHdjLVx1MDAzZXJ4cSwgcnhfcmVxKTtcbi1cbiBcdGNvbXBsZXRlKFx1MDAyNmN0eC1cdTAwM2Vjb21wX2V2ZW50KTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmN0eC1cdTAwM2Vsb2NrKTtcbitcbitcdGh3Y19jdHhfcHV0KGh3YywgY3R4KTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKHZvaWQgKmN0eCwgc3RydWN0IGdkbWFfcXVldWUgKnFfc2VsZixcbkBAIC0xNDYsNyArMjE0LDEyIEBAIHN0YXRpYyB2b2lkIG1hbmFfaHdjX2luaXRfZXZlbnRfaGFuZGxlcih2b2lkICpjdHgsIHN0cnVjdCBnZG1hX3F1ZXVlICpxX3NlbGYsXG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdGNhc2UgSFdDX0lOSVRfREFUQV9RVUVVRV9ERVBUSDpcbi1cdFx0XHRod2MtXHUwMDNlaHdjX2luaXRfcV9kZXB0aF9tYXggPSAodTE2KXZhbDtcbitcdFx0XHQvKiBIV0NfSU5JVF9EQVRBX1FVRVVFX0RFUFRIIGlzIGEgMjQtYml0IGZpZWxkLiAgS2VlcFxuK1x0XHRcdCAqIHRoZSBmdWxsIGRldmljZS1yZXBvcnRlZCB2YWx1ZSBoZXJlOyBpdCBpcyBjbGFtcGVkXG4rXHRcdFx0ICogYW5kIHZhbGlkYXRlZCBpbiBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbCgpIHJhdGhlclxuK1x0XHRcdCAqIHRoYW4gc2lsZW50bHkgdHJ1bmNhdGVkIHRvIHUxNi5cbitcdFx0XHQgKi9cbitcdFx0XHRod2MtXHUwMDNlaHdjX2luaXRfcV9kZXB0aF9tYXggPSB2YWw7XG4gXHRcdFx0YnJlYWs7XG4gXG4gXHRcdGNhc2UgSFdDX0lOSVRfREFUQV9NQVhfUkVRVUVTVDpcbkBAIC0yNjEsMTkgKzMzNCw2OSBAQCBzdGF0aWMgdm9pZCBtYW5hX2h3Y19yeF9ldmVudF9oYW5kbGVyKHZvaWQgKmN0eCwgdTMyIGdkbWFfcnhxX2lkLFxuIFxuIFx0c2dlID0gKHN0cnVjdCBnZG1hX3NnZSAqKSh3cWUgKyA4ICsgZG1hX29vYi1cdTAwM2VpbmxpbmVfb29iX3NpemVfZGl2NCAqIDQpO1xuIFxuLVx0LyogU2VsZWN0IHRoZSBSWCB3b3JrIHJlcXVlc3QgZm9yIHZpcnR1YWwgYWRkcmVzcyBhbmQgZm9yIHJlcG9zdGluZy4gKi9cbi1cdHJxX2Jhc2VfYWRkciA9IGh3Y19yeHEtXHUwMDNlbXNnX2J1Zi1cdTAwM2VtZW1faW5mby5kbWFfaGFuZGxlO1xuLVx0cnhfcmVxX2lkeCA9IChzZ2UtXHUwMDNlYWRkcmVzcyAtIHJxX2Jhc2VfYWRkcikgLyBod2MtXHUwMDNlbWF4X3JlcV9tc2dfc2l6ZTtcbitcdC8qIGlubGluZV9vb2Jfc2l6ZV9kaXY0IGlzIHJlYWQgZnJvbSB0aGUgV1FFIGluIGRldmljZS1hY2Nlc3NpYmxlIFJRXG4rXHQgKiBtZW1vcnksIHNvIGEgbWFsaWNpb3VzIGhvc3QgaW4gYSBDVk0gKG9yIGJ1Z2d5IGZpcm13YXJlKSBjb3VsZCBzZXRcbitcdCAqIGl0IHRvIHB1c2ggdGhlIFNHRSBwYXN0IHRoZSBSUSBidWZmZXIuICBCb3VuZHMtY2hlY2sgdGhlIFNHRSBpdFxuK1x0ICogbG9jYXRlcyBiZWZvcmUgZGVyZWZlcmVuY2luZyBzZ2UtXHUwMDNlYWRkcmVzcyBiZWxvdy4gIEEgdmFsaWRseSBwb3N0ZWRcbitcdCAqIFdRRSBrZWVwcyB0aGUgU0dFIGluc2lkZSB0aGUgcmluZyAod29yc3QgY2FzZSBlbmRzIGV4YWN0bHkgYXQgdGhlXG4rXHQgKiBidWZmZXIgYm91bmRhcnkpOyByZWplY3QgYW55dGhpbmcgdGhhdCB3b3VsZCByZWFkIHBhc3QgaXQuICBUaGVcbitcdCAqIHNsb3QgY2Fubm90IGJlIHRydXN0ZWQgaGVyZSwgc28gbGVhayB0aGlzIFJYIFdRRSByYXRoZXIgdGhhbiByZXBvc3RcbitcdCAqIHRoZSB3cm9uZyBvbmUgLS0gYXMgaW4gdGhlIFNHRS1hZGRyZXNzIG1pc21hdGNoIHBhdGggYmVsb3cuXG4rXHQgKi9cbitcdGlmICgodTggKikoc2dlICsgMSkgXHUwMDNlICh1OCAqKXJxLVx1MDAzZXF1ZXVlX21lbV9wdHIgKyBycS1cdTAwM2VxdWV1ZV9zaXplKSB7XG4rXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJIV0MgUlg6IFNHRSBwYXN0IFJRIGJ1ZmZlciwgb29iX2RpdjQ9JXVcXG5cIixcbitcdFx0XHRkbWFfb29iLVx1MDAzZWlubGluZV9vb2Jfc2l6ZV9kaXY0KTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFxuLVx0aWYgKHJ4X3JlcV9pZHggXHUwMDNlPSBod2NfcnhxLVx1MDAzZW1zZ19idWYtXHUwMDNlbnVtX3JlcXMpIHtcbi1cdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcIkhXQyBSWDogd3JvbmcgcnhfcmVxX2lkeD0lbGx1LCBudW1fcmVxcz0ldVxcblwiLFxuLVx0XHRcdHJ4X3JlcV9pZHgsIGh3Y19yeHEtXHUwMDNlbXNnX2J1Zi1cdTAwM2VudW1fcmVxcyk7XG4rXHQvKiBSZWNvdmVyIHRoZSBvcmlnaW5hdGluZyBSWCBzbG90IGZyb20gdGhlIFNHRSBhZGRyZXNzLiAgT2YgdGhlIHRocmVlXG4rXHQgKiB0ZXJtcyBoZXJlIG9ubHkgc2dlLVx1MDAzZWFkZHJlc3MgbGl2ZXMgaW4gZGV2aWNlLWFjY2Vzc2libGUgUlEgbWVtb3J5O1xuK1x0ICogcnFfYmFzZV9hZGRyIGFuZCBtYXhfcmVzcF9tc2dfc2l6ZSBhcmUgZHJpdmVyLXByaXZhdGUgY29uc3RhbnRzLiAgQW5cbitcdCAqIGluLXJhbmdlIGJ1dCB3cm9uZy91bmFsaWduZWQgU0dFIChjb3JydXB0ZWQgV1FFLCBvciBhIG1hbGljaW91cyBob3N0XG4rXHQgKiBpbiBhIENWTSkgd291bGQgb3RoZXJ3aXNlIHRydW5jYXRlIG9udG8gYSBuZWlnaGJvdXJpbmcgc2xvdCwgbGV0dGluZ1xuK1x0ICogdXMgcmVhZCBhIHN0YWxlIHJlc3BvbnNlIHRoYXQgY291bGQgY29tcGxldGUgdGhlIHdyb25nLCByZXVzZWRcbitcdCAqIGluLWZsaWdodCByZXF1ZXN0LiAgUmVxdWlyZSB0aGUgaW5kZXggdG8gYmUgaW4gcmFuZ2UgQU5EIHRoZSBhZGRyZXNzXG4rXHQgKiB0byBleGFjdGx5IG1hdGNoIHRoZSB2YWx1ZSB0aGUgZHJpdmVyIHBvc3RlZCBmb3IgdGhhdCBzbG90LlxuK1x0ICovXG4rXHRycV9iYXNlX2FkZHIgPSBod2NfcnhxLVx1MDAzZW1zZ19idWYtXHUwMDNlbWVtX2luZm8uZG1hX2hhbmRsZTtcbitcdHJ4X3JlcV9pZHggPSAoc2dlLVx1MDAzZWFkZHJlc3MgLSBycV9iYXNlX2FkZHIpIC8gaHdjLVx1MDAzZW1heF9yZXNwX21zZ19zaXplO1xuK1xuK1x0aWYgKHJ4X3JlcV9pZHggXHUwMDNlPSBod2NfcnhxLVx1MDAzZXF1ZXVlX2RlcHRoKSB7XG4rXHRcdC8qIENhbm5vdCB0cnVzdCB3aGljaCBXUUUgdGhpcyBpcywgc28gd2UgY2Fubm90IHNhZmVseSByZXBvc3RcbitcdFx0ICogaXQ7IGxlYWsgb25lIFJYIFdRRSBhbmQgYmFpbC4gIEFuIG91dC1vZi1yYW5nZSBpbmRleCBtZWFuc1xuK1x0XHQgKiBhIGNvcnJ1cHRlZCBTR0UgZnJvbSBoYXJkd2FyZSAob3IgaG9zdCB0YW1wZXJpbmcpLCBhblxuK1x0XHQgKiB1bnJlY292ZXJhYmxlIGRldmljZSBlcnJvci5cbitcdFx0ICovXG4rXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJIV0MgUlg6IFNHRSBpZHggJWxsdSBvdXQgb2YgcmFuZ2VcXG5cIixcbitcdFx0XHRyeF9yZXFfaWR4KTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuIFx0cnhfcmVxID0gXHUwMDI2aHdjX3J4cS1cdTAwM2Vtc2dfYnVmLVx1MDAzZXJlcXNbcnhfcmVxX2lkeF07XG4rXHRpZiAoc2dlLVx1MDAzZWFkZHJlc3MgIT0gKHU2NClyeF9yZXEtXHUwMDNlYnVmX3NnZV9hZGRyKSB7XG4rXHRcdC8qIEluLXJhbmdlIGluZGV4IGJ1dCB0aGUgYWRkcmVzcyBkb2VzIG5vdCBtYXRjaCB3aGF0IHRoZVxuK1x0XHQgKiBkcml2ZXIgcG9zdGVkIGZvciB0aGF0IHNsb3Q7IHRoZSBzYW1lIHVucmVjb3ZlcmFibGUgY2FzZSxcbitcdFx0ICogc28gbGVhayB0aGlzIFdRRSByYXRoZXIgdGhhbiByZXBvc3QgdGhlIHdyb25nIG9uZS5cbitcdFx0ICovXG4rXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJIV0MgUlg6IGludmFsaWQgU0dFIGFkZHJlc3MgJWxseCAoaWR4PSVsbHUpXFxuXCIsXG4rXHRcdFx0c2dlLVx1MDAzZWFkZHJlc3MsIHJ4X3JlcV9pZHgpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXG4gXHRyZXNwID0gKHN0cnVjdCBnZG1hX3Jlc3BfaGRyICopcnhfcmVxLVx1MDAzZWJ1Zl92YTtcbiBcbitcdC8qIFZhbGlkYXRlIHJlc3BfbGVuIGNvdmVycyB0aGUgcmVzcG9uc2UgaGVhZGVyIGJlZm9yZSByZWFkaW5nXG4rXHQgKiBod2NfbXNnX2lkLiAgQSBzaG9ydCByZXNwb25zZSBsZWF2ZXMgc3RhbGUgZGF0YSBmcm9tIHRoZVxuK1x0ICogcHJldmlvdXMgYnVmZmVyIG9jY3VwYW50LCB3aGljaCBjb3VsZCBtYXRjaCBhIGxpdmUgc2xvdCBhbmRcbitcdCAqIGNvbXBsZXRlIHRoZSB3cm9uZyByZXF1ZXN0LlxuK1x0ICovXG4rXHRpZiAocnhfb29iLVx1MDAzZXR4X29vYl9kYXRhX3NpemUgXHUwMDNjIHNpemVvZigqcmVzcCkpIHtcbitcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcIkhXQyBSWDogc2hvcnQgcmVzcF9sZW49JXVcXG5cIixcbitcdFx0XHRyeF9vb2ItXHUwMDNldHhfb29iX2RhdGFfc2l6ZSk7XG4rXHRcdG1hbmFfaHdjX3Bvc3Rfcnhfd3FlKGh3Y19yeHEsIHJ4X3JlcSk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbiBcdC8qIFJlYWQgbXNnX2lkIG9uY2UgZnJvbSBETUEgYnVmZmVyIHRvIHByZXZlbnQgVE9DVE9VOlxuIFx0ICogRE1BIG1lbW9yeSBpcyBzaGFyZWQvdW5lbmNyeXB0ZWQgaW4gQ1ZNcyAtIGhvc3QgY2FuXG4gXHQgKiBtb2RpZnkgaXQgYmV0d2VlbiByZWFkcy5cbkBAIC0yODEsNiArNDA0LDcgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfcnhfZXZlbnRfaGFuZGxlcih2b2lkICpjdHgsIHUzMiBnZG1hX3J4cV9pZCxcbiBcdG1zZ19pZCA9IFJFQURfT05DRShyZXNwLVx1MDAzZXJlc3BvbnNlLmh3Y19tc2dfaWQpO1xuIFx0aWYgKG1zZ19pZCBcdTAwM2U9IGh3Yy1cdTAwM2VudW1faW5mbGlnaHRfbXNnKSB7XG4gXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJIV0MgUlg6IHdyb25nIG1zZ19pZD0ldVxcblwiLCBtc2dfaWQpO1xuK1x0XHRtYW5hX2h3Y19wb3N0X3J4X3dxZShod2NfcnhxLCByeF9yZXEpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4gXG5AQCAtMzg0LDE0ICs1MDgsMjAgQEAgc3RhdGljIHZvaWQgbWFuYV9od2NfY29tcF9ldmVudCh2b2lkICpjdHgsIHN0cnVjdCBnZG1hX3F1ZXVlICpxX3NlbGYpXG4gXG4gc3RhdGljIHZvaWQgbWFuYV9od2NfZGVzdHJveV9jcShzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYywgc3RydWN0IGh3Y19jcSAqaHdjX2NxKVxuIHtcbi1cdGtmcmVlKGh3Y19jcS1cdTAwM2Vjb21wX2J1Zik7XG4tXG4gXHRpZiAoaHdjX2NxLVx1MDAzZWdkbWFfY3EpXG4gXHRcdG1hbmFfZ2RfZGVzdHJveV9xdWV1ZShnYywgaHdjX2NxLVx1MDAzZWdkbWFfY3EpO1xuIFxuK1x0LyogY29tcF9idWYgaXMgcmVhY2hlZCBvbmx5IGJ5IG1hbmFfaHdjX2NvbXBfZXZlbnQoKSwgd2hpY2ggdGhlXG4rXHQgKiBFUSBoYW5kbGVyIGludm9rZXMgdmlhIGNxX3RhYmxlW2lkXS4gIFRoZSBDUSBkZXN0cm95IGFib3ZlXG4rXHQgKiBhbHJlYWR5IGNsZWFyZWQgdGhhdCBzbG90IGFuZCByYW4gc3luY2hyb25pemVfcmN1KCksIHNvIG5vXG4rXHQgKiBoYW5kbGVyIGNhbiByZWFjaCBjb21wX2J1ZiBvbmNlIGl0IHJldHVybnMuICBEZXN0cm95aW5nIHRoZSBFUVxuK1x0ICogaGVyZSBhZGRpdGlvbmFsbHkgdGVhcnMgZG93biB0aGUgSVJRIChkZWZlbnNlIGluIGRlcHRoKSBiZWZvcmVcbitcdCAqIGNvbXBfYnVmIGFuZCBod2NfY3EgYXJlIGZyZWVkIGJlbG93LlxuK1x0ICovXG4gXHRpZiAoaHdjX2NxLVx1MDAzZWdkbWFfZXEpXG4gXHRcdG1hbmFfZ2RfZGVzdHJveV9xdWV1ZShnYywgaHdjX2NxLVx1MDAzZWdkbWFfZXEpO1xuIFxuK1x0a2ZyZWUoaHdjX2NxLVx1MDAzZWNvbXBfYnVmKTtcbiBcdGtmcmVlKGh3Y19jcSk7XG4gfVxuIFxuQEAgLTU2MCw2ICs2OTAsNyBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2NyZWF0ZV93cShzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsXG4gXHRod2Nfd3EtXHUwMDNlZ2RtYV93cSA9IHF1ZXVlO1xuIFx0aHdjX3dxLVx1MDAzZXF1ZXVlX2RlcHRoID0gcV9kZXB0aDtcbiBcdGh3Y193cS1cdTAwM2Vod2NfY3EgPSBod2NfY3E7XG4rXHRzcGluX2xvY2tfaW5pdChcdTAwMjZod2Nfd3EtXHUwMDNlbG9jayk7XG4gXG4gXHRlcnIgPSBtYW5hX2h3Y19hbGxvY19kbWFfYnVmKGh3YywgcV9kZXB0aCwgbWF4X21zZ19zaXplLFxuIFx0XHRcdFx0ICAgICBcdTAwMjZod2Nfd3EtXHUwMDNlbXNnX2J1Zik7XG5AQCAtNTc3LDcgKzcwOCw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfY3JlYXRlX3dxKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbWFuYV9od2NfcG9zdF90eF93cWUoY29uc3Qgc3RydWN0IGh3Y193cSAqaHdjX3R4cSxcbitzdGF0aWMgaW50IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKHN0cnVjdCBod2Nfd3EgKmh3Y190eHEsXG4gXHRcdFx0XHRzdHJ1Y3QgaHdjX3dvcmtfcmVxdWVzdCAqcmVxLFxuIFx0XHRcdFx0dTMyIGRlc3RfdmlydF9ycV9pZCwgdTMyIGRlc3RfdmlydF9yY3FfaWQsXG4gXHRcdFx0XHRib29sIGRlc3RfcGYpXG5AQCAtNjE2LDcgKzc0NywxMSBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKGNvbnN0IHN0cnVjdCBod2Nfd3EgKmh3Y190eHEsXG4gXHRyZXEtXHUwMDNld3FlX3JlcS5pbmxpbmVfb29iX2RhdGEgPSB0eF9vb2I7XG4gXHRyZXEtXHUwMDNld3FlX3JlcS5jbGllbnRfZGF0YV91bml0ID0gMDtcbiBcbitcdC8qIFNlcmlhbGl6ZSBXUUUgcG9zdGluZyDigJQgbXVsdGlwbGUgc2VuZGVycyBtYXkgY2FsbCBjb25jdXJyZW50bHkuICovXG4rXHRzcGluX2xvY2soXHUwMDI2aHdjX3R4cS1cdTAwM2Vsb2NrKTtcbiBcdGVyciA9IG1hbmFfZ2RfcG9zdF9hbmRfcmluZyhod2NfdHhxLVx1MDAzZWdkbWFfd3EsIFx1MDAyNnJlcS1cdTAwM2V3cWVfcmVxLCBOVUxMKTtcbitcdHNwaW5fdW5sb2NrKFx1MDAyNmh3Y190eHEtXHUwMDNlbG9jayk7XG4rXG4gXHRpZiAoZXJyKVxuIFx0XHRkZXZfZXJyKGRldiwgXCJGYWlsZWQgdG8gcG9zdCBXUUUgb24gSFdDIFNROiAlZFxcblwiLCBlcnIpO1xuIFx0cmV0dXJuIGVycjtcbkBAIC02MjcsNyArNzYyLDcgQEAgc3RhdGljIGludCBtYW5hX2h3Y19pbml0X2luZmxpZ2h0X21zZyhzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsXG4ge1xuIFx0aW50IGVycjtcbiBcbi1cdHNlbWFfaW5pdChcdTAwMjZod2MtXHUwMDNlc2VtYSwgbnVtX21zZyk7XG4rXHRpbml0X3dhaXRxdWV1ZV9oZWFkKFx1MDAyNmh3Yy1cdTAwM2Vtc2dfd2FpdHEpO1xuIFxuIFx0ZXJyID0gbWFuYV9nZF9hbGxvY19yZXNfbWFwKG51bV9tc2csIFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzKTtcbiBcdGlmIChlcnIpXG5AQCAtNjU3LDIzICs3OTIsNDAgQEAgc3RhdGljIGludCBtYW5hX2h3Y190ZXN0X2NoYW5uZWwoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCxcbiBcdGlmICghY3R4KVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIHFfZGVwdGg7ICsraSlcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIHFfZGVwdGg7ICsraSkge1xuK1x0XHRzcGluX2xvY2tfaW5pdChcdTAwMjZjdHhbaV0ubG9jayk7XG4gXHRcdGluaXRfY29tcGxldGlvbihcdTAwMjZjdHhbaV0uY29tcF9ldmVudCk7XG4rXHR9XG4gXG4gXHRod2MtXHUwMDNlY2FsbGVyX2N0eCA9IGN0eDtcbiBcbi1cdHJldHVybiBtYW5hX2dkX3Rlc3RfZXEoZ2MsIGh3Yy1cdTAwM2VjcS1cdTAwM2VnZG1hX2VxKTtcbitcdC8qIGNoYW5uZWxfdXAgbXVzdCBiZSBzZXQgYmVmb3JlIHRoZSB0ZXN0IEVRIHJlcXVlc3QsIGJlY2F1c2VcbitcdCAqIHRoZSByZXF1ZXN0IGdvZXMgdGhyb3VnaCBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KCkgd2hpY2hcbitcdCAqIGNoZWNrcyBjaGFubmVsX3VwLiAgY2FsbGVyX2N0eCBpcyBhbGxvY2F0ZWQgYWJvdmUsIHNvXG4rXHQgKiBjb25jdXJyZW50IGFjY2VzcyB0byBhIE5VTEwgY2FsbGVyX2N0eCBpcyBub3QgcG9zc2libGUuXG4rXHQgKi9cbitcdGh3Yy1cdTAwM2VjaGFubmVsX3VwID0gdHJ1ZTtcbitcbitcdGVyciA9IG1hbmFfZ2RfdGVzdF9lcShnYywgaHdjLVx1MDAzZWNxLVx1MDAzZWdkbWFfZXEpO1xuK1x0aWYgKGVycilcbitcdFx0aHdjLVx1MDAzZWNoYW5uZWxfdXAgPSBmYWxzZTtcbitcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuLXN0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUxNiAqcV9kZXB0aCxcbitzdGF0aWMgaW50IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjLCB1MzIgKnFfZGVwdGgsXG4gXHRcdFx0XHQgICAgICB1MzIgKm1heF9yZXFfbXNnX3NpemUsXG4gXHRcdFx0XHQgICAgICB1MzIgKm1heF9yZXNwX21zZ19zaXplKVxuIHtcbitcdC8qIE5vIFJDVSBuZWVkZWQ6IGNhbGxlZCBvbmx5IGZyb20gbWFuYV9od2NfY3JlYXRlX2NoYW5uZWxcbitcdCAqIGR1cmluZyBpbml0LCBiZWZvcmUgdGhlIGNoYW5uZWwgaXMgcHVibGlzaGVkIHRvIHNlbmRlcnMuXG4rXHQgKi9cbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlICpycSA9IGh3Yy1cdTAwM2VyeHEtXHUwMDNlZ2RtYV93cTtcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlICpzcSA9IGh3Yy1cdTAwM2V0eHEtXHUwMDNlZ2RtYV93cTtcbiBcdHN0cnVjdCBnZG1hX3F1ZXVlICplcSA9IGh3Yy1cdTAwM2VjcS1cdTAwM2VnZG1hX2VxO1xuIFx0c3RydWN0IGdkbWFfcXVldWUgKmNxID0gaHdjLVx1MDAzZWNxLVx1MDAzZWdkbWFfY3E7XG4rXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSBfX3JjdSAqKmNxX3RhYmxlO1xuIFx0aW50IGVycjtcbiBcbiBcdGluaXRfY29tcGxldGlvbihcdTAwMjZod2MtXHUwMDNlaHdjX2luaXRfZXFlX2NvbXApO1xuQEAgLTY4NywyNCArODM5LDUxIEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWwoc3RydWN0IGdkbWFfY29udGV4dCAqZ2MsIHUxNiAqcV9kZXB0aCxcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb25fdGltZW91dChcdTAwMjZod2MtXHUwMDNlaHdjX2luaXRfZXFlX2NvbXAsIDYwICogSFopKVxuLVx0XHRyZXR1cm4gLUVUSU1FRE9VVDtcbitcdC8qIHNldHVwX2h3YyBhY3RpdmF0ZWQgTVNUIGVudHJpZXMg4oCUIGhhcmR3YXJlIGNhbiBub3cgRE1BIGludG9cbitcdCAqIG91ciBxdWV1ZSBidWZmZXJzLiAgSWYgYW55dGhpbmcgYmVsb3cgZmFpbHMsIHdlIG11c3QgdGVhclxuK1x0ICogZG93biBiZWZvcmUgcmV0dXJuaW5nIHNvIHRoZSBjYWxsZXIgZG9lc24ndCBuZWVkIHRvIHRyYWNrXG4rXHQgKiB3aGV0aGVyIHNldHVwX2h3YyBzdWNjZWVkZWQuXG4rXHQgKi9cbitcdGh3Yy1cdTAwM2VzZXR1cF9hY3RpdmUgPSB0cnVlO1xuK1xuK1x0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uX3RpbWVvdXQoXHUwMDI2aHdjLVx1MDAzZWh3Y19pbml0X2VxZV9jb21wLCA2MCAqIEhaKSkge1xuK1x0XHRlcnIgPSAtRVRJTUVET1VUO1xuK1x0XHRnb3RvIHRlYXJkb3duO1xuK1x0fVxuIFxuIFx0KnFfZGVwdGggPSBod2MtXHUwMDNlaHdjX2luaXRfcV9kZXB0aF9tYXg7XG4gXHQqbWF4X3JlcV9tc2dfc2l6ZSA9IGh3Yy1cdTAwM2Vod2NfaW5pdF9tYXhfcmVxX21zZ19zaXplO1xuIFx0Km1heF9yZXNwX21zZ19zaXplID0gaHdjLVx1MDAzZWh3Y19pbml0X21heF9yZXNwX21zZ19zaXplO1xuIFxuIFx0LyogQm90aCB3ZXJlIHNldCBpbiBtYW5hX2h3Y19pbml0X2V2ZW50X2hhbmRsZXIoKS4gKi9cbi1cdGlmIChXQVJOX09OKGNxLVx1MDAzZWlkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMpKVxuLVx0XHRyZXR1cm4gLUVQUk9UTztcbitcdGlmIChXQVJOX09OKGNxLVx1MDAzZWlkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMpKSB7XG4rXHRcdGVyciA9IC1FUFJPVE87XG4rXHRcdGdvdG8gdGVhcmRvd247XG4rXHR9XG4gXG4tXHRnYy1cdTAwM2VjcV90YWJsZSA9IHZjYWxsb2MoZ2MtXHUwMDNlbWF4X251bV9jcXMsIHNpemVvZihzdHJ1Y3QgZ2RtYV9xdWV1ZSAqKSk7XG4tXHRpZiAoIWdjLVx1MDAzZWNxX3RhYmxlKVxuLVx0XHRyZXR1cm4gLUVOT01FTTtcbitcdGNxX3RhYmxlID0gdmNhbGxvYyhnYy1cdTAwM2VtYXhfbnVtX2Nxcywgc2l6ZW9mKCpjcV90YWJsZSkpO1xuK1x0aWYgKCFjcV90YWJsZSkge1xuK1x0XHRlcnIgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIHRlYXJkb3duO1xuK1x0fVxuIFxuLVx0Z2MtXHUwMDNlY3FfdGFibGVbY3EtXHUwMDNlaWRdID0gY3E7XG4rXHRyY3VfYXNzaWduX3BvaW50ZXIoY3FfdGFibGVbY3EtXHUwMDNlaWRdLCBjcSk7XG4rXHQvKiBQdWJsaXNoIHRoZSBmdWxseS1pbml0aWFsaXNlZCB0YWJsZSBsYXN0OyBwYWlycyB3aXRoIHRoZVxuK1x0ICogcmN1X2RlcmVmZXJlbmNlKGdjLVx1MDAzZWNxX3RhYmxlKSBpbiBtYW5hX2dkX3Byb2Nlc3NfZXFlKCkuXG4rXHQgKi9cbitcdHJjdV9hc3NpZ25fcG9pbnRlcihnYy1cdTAwM2VjcV90YWJsZSwgY3FfdGFibGUpO1xuIFxuIFx0cmV0dXJuIDA7XG4rXG4rdGVhcmRvd246XG4rXHR7XG4rXHRcdGludCB0ZF9lcnIgPSBtYW5hX3NtY190ZWFyZG93bl9od2MoXHUwMDI2Z2MtXHUwMDNlc2htX2NoYW5uZWwsIGZhbHNlKTtcbitcbitcdFx0aWYgKCF0ZF9lcnIpXG4rXHRcdFx0aHdjLVx1MDAzZXNldHVwX2FjdGl2ZSA9IGZhbHNlO1xuK1xuK1x0XHRyZXR1cm4gdGRfZXJyID8gdGRfZXJyIDogZXJyO1xuK1x0fVxuIH1cbiBcbiBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXG5AQCAtNzEyLDYgKzg5MSwxMiBAQCBzdGF0aWMgaW50IG1hbmFfaHdjX2luaXRfcXVldWVzKHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTE2IHFfZGVwdGgsXG4ge1xuIFx0aW50IGVycjtcbiBcbitcdC8qIENRIGRlcHRoIGlzIHFfZGVwdGggKiAyIChTUSArIFJRKSBwYXNzZWQgYXMgdTE2IHRvIGNyZWF0ZV9jcS5cbitcdCAqIENhcCB0byBwcmV2ZW50IHUxNiB0cnVuY2F0aW9uLlxuK1x0ICovXG4rXHRpZiAocV9kZXB0aCBcdTAwM2UgVTE2X01BWCAvIDIpXG4rXHRcdHFfZGVwdGggPSBVMTZfTUFYIC8gMjtcbitcbiBcdGVyciA9IG1hbmFfaHdjX2luaXRfaW5mbGlnaHRfbXNnKGh3YywgcV9kZXB0aCk7XG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuQEAgLTcyOCwxNCArOTEzLDE0IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfaW5pdF9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRlcnIgPSBtYW5hX2h3Y19jcmVhdGVfd3EoaHdjLCBHRE1BX1JRLCBxX2RlcHRoLCBtYXhfcmVxX21zZ19zaXplLFxuK1x0ZXJyID0gbWFuYV9od2NfY3JlYXRlX3dxKGh3YywgR0RNQV9SUSwgcV9kZXB0aCwgbWF4X3Jlc3BfbXNnX3NpemUsXG4gXHRcdFx0XHQgaHdjLVx1MDAzZWNxLCBcdTAwMjZod2MtXHUwMDNlcnhxKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byBjcmVhdGUgSFdDIFJROiAlZFxcblwiLCBlcnIpO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGVyciA9IG1hbmFfaHdjX2NyZWF0ZV93cShod2MsIEdETUFfU1EsIHFfZGVwdGgsIG1heF9yZXNwX21zZ19zaXplLFxuK1x0ZXJyID0gbWFuYV9od2NfY3JlYXRlX3dxKGh3YywgR0RNQV9TUSwgcV9kZXB0aCwgbWF4X3JlcV9tc2dfc2l6ZSxcbiBcdFx0XHRcdCBod2MtXHUwMDNlY3EsIFx1MDAyNmh3Yy1cdTAwM2V0eHEpO1xuIFx0aWYgKGVycikge1xuIFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiRmFpbGVkIHRvIGNyZWF0ZSBIV0MgU1E6ICVkXFxuXCIsIGVycik7XG5AQCAtNzQ0LDYgKzkyOSw3IEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfaW5pdF9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCxcbiBcbiBcdGh3Yy1cdTAwM2VudW1faW5mbGlnaHRfbXNnID0gcV9kZXB0aDtcbiBcdGh3Yy1cdTAwM2VtYXhfcmVxX21zZ19zaXplID0gbWF4X3JlcV9tc2dfc2l6ZTtcbitcdGh3Yy1cdTAwM2VtYXhfcmVzcF9tc2dfc2l6ZSA9IG1heF9yZXNwX21zZ19zaXplO1xuIFxuIFx0cmV0dXJuIDA7XG4gb3V0OlxuQEAgLTc1MSwxMiArOTM3LDYyIEBAIHN0YXRpYyBpbnQgbWFuYV9od2NfaW5pdF9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MTYgcV9kZXB0aCxcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuKy8qIFRlYXIgZG93biBhbGwgSFdDIHF1ZXVlcyBhbmQgZnJlZSBhc3NvY2lhdGVkIHJlc291cmNlcy4gIFVzZWQgb25cbisgKiB0aGUgcmVpbml0LXdpdGgtaGlnaGVyLXF1ZXVlLWRlcHRoIHBhdGggYW5kIHJlaW5pdCBmYWxsYmFjay5cbisgKlxuKyAqIFBSRUNPTkRJVElPTjogbXVzdCBiZSBjYWxsZWQgb25seSBkdXJpbmcgY2hhbm5lbCBicmluZy11cCBpblxuKyAqIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKCksIGJlZm9yZSB0aGUgY2hhbm5lbCBpcyBwdWJsaXNoZWQgdG9cbisgKiBzZW5kZXJzLiAgVGhlcmUgdGhlIHNldHVwIHRocmVhZCBpcyBlZmZlY3RpdmVseSBzaW5nbGUtdGhyZWFkZWRcbisgKiAoc2VyaWFsaXplZCBhZ2FpbnN0IHRlYXJkb3duIGJ5IHRoZSBQQ0kvUE0gZGV2aWNlX2xvY2sgb3IsIG9uIHRoZVxuKyAqIHNlcnZpY2UgcGF0aCwgR0NfSU5fU0VSVklDRSwgd2l0aCB0aGUgZGF0YSBwYXRoIG5vdCB5ZXQgcHJvYmVkKSxcbisgKiBjaGFubmVsX3VwIGlzIHN0aWxsIGZhbHNlLCBjYWxsZXJfY3R4IGlzIG5vdCB5ZXQgYWxsb2NhdGVkLCBhbmRcbisgKiBhY3RpdmVfc2VuZGVycyBpcyAwIOKAlCBzbyBubyBjb25jdXJyZW50IHJlcXVlc3QvcmVzcG9uc2UgdXNlciBjYW5cbisgKiB0b3VjaCB0aGVzZSBxdWV1ZXMuICBUaGF0IGlzIHdoeSB0aGlzIHNraXBzIHRoZSBod2NfbG9jay1wcm90ZWN0ZWRcbisgKiBkcml2ZXJfZGF0YSBjbGVhciArIGFjdGl2ZV9zZW5kZXJzIGRyYWluIHRoYXRcbisgKiBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoKSBuZWVkcyBmb3IgdGhlIHJ1bnRpbWUgdGVhcmRvd24gcmFjZTtcbisgKiBvbmx5IHRoZSBDUS1maXJzdCBvcmRlcmluZyBiZWxvdyAodG8gZmVuY2Ugb2ZmIGEgcGVuZGluZyBpbnRlcnJ1cHQpXG4rICogaXMgcmVxdWlyZWQuICBDYWxsaW5nIHRoaXMgb24gYSBsaXZlLCBwdWJsaXNoZWQgY2hhbm5lbCB3b3VsZCBiZSBhXG4rICogdXNlLWFmdGVyLWZyZWUuXG4rICovXG4rc3RhdGljIHZvaWQgbWFuYV9od2NfZGVzdHJveV9xdWV1ZXMoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjKVxuK3tcbitcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjID0gaHdjLVx1MDAzZWdkbWFfZGV2LVx1MDAzZWdkbWFfY29udGV4dDtcbitcbitcdC8qIERlc3Ryb3kgQ1EgZmlyc3QgdG8gZGVyZWdpc3RlciB0aGUgRVEgZnJvbSB0aGUgaW50ZXJydXB0XG4rXHQgKiBoYW5kbGVyIGxpc3QgYmVmb3JlIGZyZWVpbmcgY2FsbGVyX2N0eCwgVFhRLCBvciBSWFEgbWVtb3J5LlxuK1x0ICogQSBwZW5kaW5nIGludGVycnVwdCBoYW5kbGVyIGNvdWxkIHN0aWxsIHJlYWNoIGhhbmRsZV9yZXNwKClcbitcdCAqIHdoaWNoIGRlcmVmZXJlbmNlcyBjYWxsZXJfY3R4LlxuK1x0ICovXG4rXHRpZiAoaHdjLVx1MDAzZWNxKSB7XG4rXHRcdG1hbmFfaHdjX2Rlc3Ryb3lfY3EoZ2MsIGh3Yy1cdTAwM2VjcSk7XG4rXHRcdGh3Yy1cdTAwM2VjcSA9IE5VTEw7XG4rXHR9XG4rXG4rXHRrZnJlZShod2MtXHUwMDNlY2FsbGVyX2N0eCk7XG4rXHRod2MtXHUwMDNlY2FsbGVyX2N0eCA9IE5VTEw7XG4rXG4rXHRpZiAoaHdjLVx1MDAzZXR4cSkge1xuK1x0XHRtYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLVx1MDAzZXR4cSk7XG4rXHRcdGh3Yy1cdTAwM2V0eHEgPSBOVUxMO1xuK1x0fVxuK1xuK1x0aWYgKGh3Yy1cdTAwM2VyeHEpIHtcbitcdFx0bWFuYV9od2NfZGVzdHJveV93cShod2MsIGh3Yy1cdTAwM2VyeHEpO1xuK1x0XHRod2MtXHUwMDNlcnhxID0gTlVMTDtcbitcdH1cbitcbitcdG1hbmFfZ2RfZnJlZV9yZXNfbWFwKFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzKTtcbitcdGh3Yy1cdTAwM2VudW1faW5mbGlnaHRfbXNnID0gMDtcbit9XG4rXG4gaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIHtcbiBcdHUzMiBtYXhfcmVxX21zZ19zaXplLCBtYXhfcmVzcF9tc2dfc2l6ZTtcbiBcdHN0cnVjdCBnZG1hX2RldiAqZ2QgPSBcdTAwMjZnYy1cdTAwM2Vod2M7XG4gXHRzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2M7XG4tXHR1MTYgcV9kZXB0aF9tYXg7XG4rXHRzdHJ1Y3QgZ2RtYV9xdWV1ZSBfX3JjdSAqKm9sZF9jcV90YWJsZTtcbitcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rXHR1MzIgcV9kZXB0aF9tYXg7XG4gXHRpbnQgZXJyO1xuIFxuIFx0aHdjID0ga3phbGxvY19vYmooKmh3Yyk7XG5AQCAtNzY0LDEwICsxMDAwLDExIEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4gXHRnZC1cdTAwM2VnZG1hX2NvbnRleHQgPSBnYztcbi1cdGdkLVx1MDAzZWRyaXZlcl9kYXRhID0gaHdjO1xuIFx0aHdjLVx1MDAzZWdkbWFfZGV2ID0gZ2Q7XG4gXHRod2MtXHUwMDNlZGV2ID0gZ2MtXHUwMDNlZGV2O1xuIFx0aHdjLVx1MDAzZWh3Y190aW1lb3V0ID0gSFdfQ0hBTk5FTF9XQUlUX1JFU09VUkNFX1RJTUVPVVRfTVM7XG4rXHRod2MtXHUwMDNlYWN0aXZlX3NlbmRlcnMgPSAwO1xuK1x0aW5pdF93YWl0cXVldWVfaGVhZChcdTAwMjZnYy1cdTAwM2Vod2NfZHJhaW5fd2FpdHEpO1xuIFxuIFx0LyogSFdDJ3MgaW5zdGFuY2UgbnVtYmVyIGlzIGFsd2F5cyAwLiAqL1xuIFx0Z2QtXHUwMDNlZGV2X2lkLmFzX3VpbnQzMiA9IDA7XG5AQCAtNzc2LDYgKzEwMTMsMTUgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIFx0Z2QtXHUwMDNlcGRpZCA9IElOVkFMSURfUERJRDtcbiBcdGdkLVx1MDAzZWRvb3JiZWxsID0gSU5WQUxJRF9ET09SQkVMTDtcbiBcbitcdC8qIFB1Ymxpc2ggZHJpdmVyX2RhdGEgbGFzdCwgdW5kZXIgaHdjX2xvY2s6IHRoZSBsb2NrIG9yZGVycyB0aGUgaHdjXG4rXHQgKiBpbml0aWFsaXNhdGlvbiBhYm92ZSBiZWZvcmUgdGhlIHBvaW50ZXIgYmVjb21lcyB2aXNpYmxlIGFuZFxuK1x0ICogc2VyaWFsaXNlcyB0aGUgcHVibGlzaCBhZ2FpbnN0IHRoZSBjb250cm9sLXBsYW5lIHJlYWRlcnMgaW5cbitcdCAqIG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0KCksIG1hbmFfbmVlZF9sb2coKSBhbmQgbWFuYV9zZXJ2X3Jlc2V0KCkuXG4rXHQgKi9cbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4rXHRnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGEgPSBod2M7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4rXG4gXHQvKiBtYW5hX2h3Y19pbml0X3F1ZXVlcygpIG9ubHkgY3JlYXRlcyB0aGUgcmVxdWlyZWQgZGF0YSBzdHJ1Y3R1cmVzLFxuIFx0ICogYW5kIGRvZXNuJ3QgdG91Y2ggdGhlIEhXQyBkZXZpY2UuXG4gXHQgKi9cbkBAIC03OTQsOCArMTA0MCwxMzAgQEAgaW50IG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbitcdC8qIFRoZSBjaGFubmVsIHdhcyBib290c3RyYXBwZWQgYXQgYSBtaW5pbWFsIHF1ZXVlIGRlcHRoLiAgSWYgdGhlXG4rXHQgKiBkZXZpY2UgcmVwb3J0cyBhIGhpZ2hlciBtYXhpbXVtLCB0ZWFyIGRvd24gYW5kIHJlYnVpbGQgd2l0aFxuK1x0ICogdGhlIGxhcmdlciBkZXB0aCBzbyBtb3JlIEhXQyBjb21tYW5kcyBjYW4gYmUgaW4gZmxpZ2h0LlxuK1x0ICovXG4rXHRpZiAocV9kZXB0aF9tYXggXHUwMDNlIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRIKSB7XG4rXHRcdC8qIHFfZGVwdGhfbWF4IG5vdyBjYXJyaWVzIHRoZSBmdWxsIGRldmljZS1yZXBvcnRlZCB2YWx1ZVxuK1x0XHQgKiAoSFdDX0lOSVRfREFUQV9RVUVVRV9ERVBUSCBpcyAyNC1iaXQpLiAgQ2xhbXAgaXQgdG8gdGhlXG4rXHRcdCAqIGRlcHRoIHRoZSByZXN0IG9mIHRoZSBkcml2ZXIgc3VwcG9ydHMg4oCUIGNyZWF0ZV9jcSgpIHRha2VzXG4rXHRcdCAqIHFfZGVwdGggKiAyIGFzIGEgdTE2IOKAlCBiZWZvcmUgdGhlIG92ZXJmbG93IGNoZWNrIGJlbG93LCBzb1xuK1x0XHQgKiBhbiBvdmVyLWxhcmdlIGJ1dCBvdGhlcndpc2UtdmFsaWQgZGVwdGggaXMgcmVkdWNlZCB0byB0aGVcbitcdFx0ICogbWF4aW11bSBpbnN0ZWFkIG9mIHdyYXBwaW5nIG9yIGJlaW5nIHJlamVjdGVkLlxuK1x0XHQgKi9cbitcdFx0aWYgKHFfZGVwdGhfbWF4IFx1MDAzZSBVMTZfTUFYIC8gMilcbitcdFx0XHRxX2RlcHRoX21heCA9IFUxNl9NQVggLyAyO1xuK1xuK1x0XHQvKiBTYW5pdHktY2hlY2sgZGV2aWNlLXJlcG9ydGVkIHZhbHVlcyBiZWZvcmUgdXNpbmcgdGhlbVxuK1x0XHQgKiB0byBzaXplIERNQSBhbGxvY2F0aW9ucy4gIEVuZm9yY2UgcHJvdG9jb2wgbWluaW11bXNcbitcdFx0ICogZm9yIG1lc3NhZ2Ugc2l6ZXMgYW5kIGNoZWNrIHRoYXQgcV9kZXB0aCAqIG1heF9tc2dfc2l6ZVxuK1x0XHQgKiBwbHVzIGFsaWdubWVudCBoZWFkcm9vbSBmaXRzIGluIHUzMiAoZm9yXG4rXHRcdCAqIG1hbmFfaHdjX2FsbG9jX2RtYV9idWYncyBNQU5BX1BBR0VfQUxJR04pLlxuK1x0XHQgKi9cbitcdFx0aWYgKCFtYXhfcmVxX21zZ19zaXplIHx8ICFtYXhfcmVzcF9tc2dfc2l6ZSB8fFxuK1x0XHQgICAgbWF4X3JlcV9tc2dfc2l6ZSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBnZG1hX3JlcV9oZHIpIHx8XG4rXHRcdCAgICBtYXhfcmVzcF9tc2dfc2l6ZSBcdTAwM2Mgc2l6ZW9mKHN0cnVjdCBnZG1hX3Jlc3BfaGRyKSB8fFxuK1x0XHQgICAgKHU2NClxX2RlcHRoX21heCAqIG1heF9yZXFfbXNnX3NpemUgXHUwMDNlXG4rXHRcdFx0VTMyX01BWCAtIE1BTkFfUEFHRV9TSVpFIHx8XG4rXHRcdCAgICAodTY0KXFfZGVwdGhfbWF4ICogbWF4X3Jlc3BfbXNnX3NpemUgXHUwMDNlXG4rXHRcdFx0VTMyX01BWCAtIE1BTkFfUEFHRV9TSVpFKSB7XG4rXHRcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LFxuK1x0XHRcdFx0XCJIV0M6IGludmFsaWQgZGltcyBxPSV1IHJlcT0ldSByZXNwPSV1XFxuXCIsXG4rXHRcdFx0XHRxX2RlcHRoX21heCwgbWF4X3JlcV9tc2dfc2l6ZSxcbitcdFx0XHRcdG1heF9yZXNwX21zZ19zaXplKTtcbitcdFx0XHRxX2RlcHRoX21heCA9IEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRIO1xuK1x0XHRcdGdvdG8gc2tpcF9yZWluaXQ7XG4rXHRcdH1cbitcbitcdFx0ZXJyID0gbWFuYV9zbWNfdGVhcmRvd25faHdjKFx1MDAyNmdjLVx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSk7XG4rXHRcdGlmIChlcnIpIHtcbitcdFx0XHQvKiBLZWVwIHVzaW5nIHRoZSBib290c3RyYXAtZGVwdGggY2hhbm5lbC4gKi9cbitcdFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcIkZhaWxlZCB0byB0ZWFyZG93biBIV0MgZm9yIHJlaW5pdDogJWRcXG5cIixcbitcdFx0XHRcdGVycik7XG4rXHRcdFx0cV9kZXB0aF9tYXggPSBIV19DSEFOTkVMX1ZGX0JPT1RTVFJBUF9RVUVVRV9ERVBUSDtcbitcdFx0XHRnb3RvIHNraXBfcmVpbml0O1xuK1x0XHR9XG4rXG4rXHRcdGh3Yy1cdTAwM2VzZXR1cF9hY3RpdmUgPSBmYWxzZTtcbitcbitcdFx0LyogRGVzdHJveSBxdWV1ZXMgZmlyc3Qg4oCUIG1hbmFfZ2RfZGVzdHJveV9jcSBpbnNpZGVcbitcdFx0ICogdW5wdWJsaXNoZXMgdGhlIENRIGZyb20gY3FfdGFibGUgdmlhXG4rXHRcdCAqIHJjdV9hc3NpZ25fcG9pbnRlcihOVUxMKSArIHN5bmNocm9uaXplX3JjdS5cbitcdFx0ICogTXVzdCBoYXBwZW4gd2hpbGUgY3FfdGFibGUgaXMgc3RpbGwgdmFsaWQuXG4rXHRcdCAqL1xuK1x0XHRtYW5hX2h3Y19kZXN0cm95X3F1ZXVlcyhod2MpO1xuK1xuK1x0XHRvbGRfY3FfdGFibGUgPSByY3VfcmVwbGFjZV9wb2ludGVyKGdjLVx1MDAzZWNxX3RhYmxlLCBOVUxMLCB0cnVlKTtcbitcdFx0c3luY2hyb25pemVfcmN1KCk7XG4rXHRcdHZmcmVlKG9sZF9jcV90YWJsZSk7XG4rXG4rXHRcdGVyciA9IG1hbmFfaHdjX2luaXRfcXVldWVzKGh3YywgcV9kZXB0aF9tYXgsXG4rXHRcdFx0XHRcdCAgIG1heF9yZXFfbXNnX3NpemUsXG4rXHRcdFx0XHRcdCAgIG1heF9yZXNwX21zZ19zaXplKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gcmVpbml0IEhXQzogJWRcXG5cIiwgZXJyKTtcbitcdFx0XHRnb3RvIHJlaW5pdF9mYWxsYmFjaztcbitcdFx0fVxuK1xuK1x0XHRlcnIgPSBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbChnYywgXHUwMDI2cV9kZXB0aF9tYXgsXG4rXHRcdFx0XHRcdFx0IFx1MDAyNm1heF9yZXFfbXNnX3NpemUsXG4rXHRcdFx0XHRcdFx0IFx1MDAyNm1heF9yZXNwX21zZ19zaXplKTtcbitcdFx0aWYgKGVycikge1xuK1x0XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gcmUtZXN0YWJsaXNoIEhXQzogJWRcXG5cIixcbitcdFx0XHRcdGVycik7XG4rXHRcdFx0LyogZXN0YWJsaXNoX2NoYW5uZWwgZG9lcyBpbnRlcm5hbCB0ZWFyZG93biBvblxuK1x0XHRcdCAqIGZhaWx1cmUuICBJZiB0ZWFyZG93biBzdWNjZWVkZWQgKHNldHVwX2FjdGl2ZVxuK1x0XHRcdCAqIGNsZWFyZWQpLCBNU1QgZW50cmllcyBhcmUgaW52YWxpZGF0ZWQgYW5kIHdlXG4rXHRcdFx0ICogY2FuIHRyeSB0aGUgYm9vdHN0cmFwIGZhbGxiYWNrLiAgSWYgdGVhcmRvd25cbitcdFx0XHQgKiBhbHNvIGZhaWxlZCAoc2V0dXBfYWN0aXZlIHN0aWxsIHNldCksIGhhcmR3YXJlXG4rXHRcdFx0ICogbWFwcGluZ3MgbWF5IHN0aWxsIGJlIGFjdGl2ZSDigJQgc2tpcCBmYWxsYmFjay5cbitcdFx0XHQgKi9cbitcdFx0XHRpZiAoaHdjLVx1MDAzZXNldHVwX2FjdGl2ZSlcbitcdFx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdGdvdG8gcmVpbml0X2ZhbGxiYWNrO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRnb3RvIHNraXBfcmVpbml0O1xuK1xuK3JlaW5pdF9mYWxsYmFjazpcbitcdC8qIFJlc3RvcmUgYm9vdHN0cmFwLWRlcHRoIGNoYW5uZWwgc28gdGhlIGRldmljZSByZW1haW5zIGZ1bmN0aW9uYWwuXG4rXHQgKiBGcmVlIGNxX3RhYmxlIGlmIGl0IHdhcyBhbGxvY2F0ZWQgYnkgYSBwYXJ0aWFsbHkgc3VjY2Vzc2Z1bFxuK1x0ICogZXN0YWJsaXNoIGF0dGVtcHQuXG4rXHQgKi9cbitcdGRldl93YXJuKGh3Yy1cdTAwM2VkZXYsIFwiSFdDIHJlaW5pdCBmYWlsZWQsIGZhbGxpbmcgYmFjayB0byBib290c3RyYXAgZGVwdGhcXG5cIik7XG4rXG4rXHRtYW5hX2h3Y19kZXN0cm95X3F1ZXVlcyhod2MpO1xuK1xuK1x0b2xkX2NxX3RhYmxlID0gcmN1X3JlcGxhY2VfcG9pbnRlcihnYy1cdTAwM2VjcV90YWJsZSwgTlVMTCwgdHJ1ZSk7XG4rXHRzeW5jaHJvbml6ZV9yY3UoKTtcbitcdHZmcmVlKG9sZF9jcV90YWJsZSk7XG4rXG4rXHRlcnIgPSBtYW5hX2h3Y19pbml0X3F1ZXVlcyhod2MsIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRILFxuK1x0XHRcdFx0ICAgSFdfQ0hBTk5FTF9NQVhfUkVRVUVTVF9TSVpFLFxuK1x0XHRcdFx0ICAgSFdfQ0hBTk5FTF9NQVhfUkVTUE9OU0VfU0laRSk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJGYWlsZWQgdG8gcmVzdG9yZSBib290c3RyYXAgSFdDOiAlZFxcblwiLCBlcnIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGVyciA9IG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsKGdjLCBcdTAwMjZxX2RlcHRoX21heCwgXHUwMDI2bWF4X3JlcV9tc2dfc2l6ZSxcbitcdFx0XHRcdFx0IFx1MDAyNm1heF9yZXNwX21zZ19zaXplKTtcbitcdGlmIChlcnIpIHtcbitcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byByZS1lc3RhYmxpc2ggYm9vdHN0cmFwIEhXQzogJWRcXG5cIixcbitcdFx0XHRlcnIpO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitza2lwX3JlaW5pdDpcbitcbitcdC8qIE5vIFJDVSBuZWVkZWQ6IHN0aWxsIGluIG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsLCB0aGVcbitcdCAqIHBvaW50ZXIgaGFzIG5vdCBiZWVuIHB1Ymxpc2hlZCB0byBjb25jdXJyZW50IHNlbmRlcnMgeWV0LlxuK1x0ICovXG4gXHRlcnIgPSBtYW5hX2h3Y190ZXN0X2NoYW5uZWwoZ2MtXHUwMDNlaHdjLmRyaXZlcl9kYXRhLFxuLVx0XHRcdFx0ICAgIEhXX0NIQU5ORUxfVkZfQk9PVFNUUkFQX1FVRVVFX0RFUFRILFxuK1x0XHRcdFx0ICAgIGh3Yy1cdTAwM2VudW1faW5mbGlnaHRfbXNnLFxuIFx0XHRcdFx0ICAgIG1heF9yZXFfbXNnX3NpemUsIG1heF9yZXNwX21zZ19zaXplKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZGV2X2Vycihod2MtXHUwMDNlZGV2LCBcIkZhaWxlZCB0byB0ZXN0IEhXQzogJWRcXG5cIiwgZXJyKTtcbkBAIC04MTAsMjcgKzExNzgsMTk1IEBAIGludCBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiBcbiB2b2lkIG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbChzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYylcbiB7XG4rXHQvKiBUaGlzIGlzIHRoZSBvbmx5IGRlc3Ryb3kgZW50cnkgcG9pbnQuICBkcml2ZXJfZGF0YSBpcyByZWFkXG4rXHQgKiBwbGFpbmx5IGhlcmUgKHRlYXJkb3duIGlzIHNlcmlhbGlzZWQgYWdhaW5zdCBvdGhlciB0ZWFyZG93bik7XG4rXHQgKiBpdCBpcyBjbGVhcmVkIHVuZGVyIGh3Y19sb2NrIGJlbG93IGJlZm9yZSBod2MgaXMgZnJlZWQuXG4rXHQgKi9cbiBcdHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YyA9IGdjLVx1MDAzZWh3Yy5kcml2ZXJfZGF0YTtcbitcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqb2xkX2NxX3RhYmxlO1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcbiBcdGlmICghaHdjKVxuIFx0XHRyZXR1cm47XG4gXG4tXHQvKiBnYy1cdTAwM2VtYXhfbnVtX2NxcyBpcyBzZXQgaW4gbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyKCkuIElmIGl0J3Ncbi1cdCAqIG5vbi16ZXJvLCB0aGUgSFdDIHdvcmtlZCBhbmQgd2Ugc2hvdWxkIHRlYXIgZG93biB0aGUgSFdDIGhlcmUuXG4rXHQvKiBQcmV2ZW50IG5ldyByZXF1ZXN0cyBmcm9tIHN0YXJ0aW5nIGFuZCB3YWtlIGFueVxuK1x0ICogdGhyZWFkcyB3YWl0aW5nIGZvciBhIGZyZWUgbXNnIHNsb3QuICBTZXQgY2hhbm5lbF91cCB1bmRlclxuK1x0ICogdGhlIGJpdG1hcCBsb2NrIHNvIGdldF9tc2dfaW5kZXgoKSBjYW5ub3QgYWNxdWlyZSBhIHNsb3RcbitcdCAqIGFuZCBpbmNyZW1lbnQgYWN0aXZlX3NlbmRlcnMgYWZ0ZXIgdGhpcyBwb2ludC5cbitcdCAqXG4rXHQgKiBJZiBjaGFubmVsX3VwIGlzIGFscmVhZHkgZmFsc2UgKGUuZy4gaW5pdCBmYWlsZWQgYmVmb3JlXG4rXHQgKiB0aGUgY2hhbm5lbCB3YXMgZXN0YWJsaXNoZWQpLCBza2lwIHRoZSBsb2NrIOKAlCBpdCBtYXkgbm90XG4rXHQgKiBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQgeWV0LCBhbmQgbm8gc2VuZGVycyBjYW4gYmUgYWN0aXZlLlxuIFx0ICovXG4tXHRpZiAoZ2MtXHUwMDNlbWF4X251bV9jcXMgXHUwMDNlIDApIHtcbi1cdFx0bWFuYV9zbWNfdGVhcmRvd25faHdjKFx1MDAyNmdjLVx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSk7XG4tXHRcdGdjLVx1MDAzZW1heF9udW1fY3FzID0gMDtcbitcdGlmIChod2MtXHUwMDNlY2hhbm5lbF91cCkge1xuK1x0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5sb2NrLCBmbGFncyk7XG4rXHRcdGh3Yy1cdTAwM2VjaGFubmVsX3VwID0gZmFsc2U7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2aHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubG9jaywgZmxhZ3MpO1xuK1x0XHR3YWtlX3VwX2FsbChcdTAwMjZod2MtXHUwMDNlbXNnX3dhaXRxKTtcbiBcdH1cbiBcbitcdC8qIENsZWFyIHRoZSBwb2ludGVyIHVuZGVyIGh3Y19sb2NrIHNvIG5ldyBjYWxsZXJzIGluXG4rXHQgKiBtYW5hX2dkX3NlbmRfcmVxdWVzdCgpIHNlZSBOVUxMIGFuZCByZXR1cm4gLUVOT0RFVi4gIFRoZSBsb2NrXG4rXHQgKiBtYWtlcyB0aGUgcmVhZGVycycgXCJsb2FkIGRyaXZlcl9kYXRhICsgYWN0aXZlX3NlbmRlcnMrK1wiXG4rXHQgKiBhdG9taWMgYWdhaW5zdCB0aGlzIHN0b3JlLCBzbyBvbmNlIGl0IHJldHVybnMgbm8gbmV3IHNlbmRlciBjYW5cbitcdCAqIHRha2UgYSByZWZlcmVuY2U7IHRoZSBhY3RpdmVfc2VuZGVycyBkcmFpbiBiZWxvdyB3YWl0cyBvdXQgdGhvc2VcbitcdCAqIHRoYXQgYWxyZWFkeSBkaWQsIGJlZm9yZSB0aGVpciBod2MgaXMgZnJlZWQuXG4rXHQgKi9cbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrLCBmbGFncyk7XG4rXHRnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGEgPSBOVUxMO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZnYy1cdTAwM2Vod2NfbG9jaywgZmxhZ3MpO1xuK1xuK1x0LyogRm9yY2UtY29tcGxldGUgYW55IGluLWZsaWdodCBzZW5kZXJzIHNvIHRoZXkgb2JzZXJ2ZSAtRU5PREVWLFxuK1x0ICogcmV0dXJuLCBhbmQgZHJvcCB0aGVpciByZWZlcmVuY2VzLiAgVGhpcyBydW5zIGJlZm9yZSB0aGUgSFdDXG4rXHQgKiBoYXJkd2FyZSB0ZWFyZG93biBiZWxvdywgc28gYSBsaXZlIGludGVycnVwdCBtYXkgc3RpbGwgZGVsaXZlclxuK1x0ICogYSByZWFsIHJlc3BvbnNlIHZpYSBoYW5kbGVfcmVzcCgpIGNvbmN1cnJlbnRseSDigJQgdGhhdCBpcyBzYWZlXG4rXHQgKiBiZWNhdXNlIHRoZSBwZXItc2xvdCByZWZjb3VudCBtb2RlbCB0b2xlcmF0ZXMgYSBjb25jdXJyZW50XG4rXHQgKiBjb21wbGV0ZSgpIGFuZCBib3RoIHBhdGhzIChoYW5kbGVfcmVzcCBhbmQgdGhpcyBsb29wKSBkcm9wXG4rXHQgKiB0aGVpciByZWZzIHdpdGhvdXQgZG91YmxlLXJlbGVhc2luZyB0aGUgc2xvdC5cbitcdCAqL1xuK1x0aWYgKGh3Yy1cdTAwM2VjYWxsZXJfY3R4KSB7XG4rXHRcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xuK1x0XHRpbnQgaTtcbitcbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaHdjLVx1MDAzZW51bV9pbmZsaWdodF9tc2c7IGkrKykge1xuK1x0XHRcdGlmICghdGVzdF9iaXQoaSwgaHdjLVx1MDAzZWluZmxpZ2h0X21zZ19yZXMubWFwKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHRcdGN0eCA9IFx1MDAyNmh3Yy1cdTAwM2VjYWxsZXJfY3R4W2ldO1xuK1xuK1x0XHRcdC8qIFdha2Ugc2VuZGVycyBibG9ja2VkIG9uIHdhaXRfZm9yX2NvbXBsZXRpb24uXG4rXHRcdFx0ICogU2V0IGVycm9yIHVuZGVyIGxvY2sgdG8gYXZvaWQgcmFjaW5nIHdpdGhcbitcdFx0XHQgKiBoYW5kbGVfcmVzcCgpIHdoaWNoIHdyaXRlcyBlcnJvciB1bmRlciB0aGVcbitcdFx0XHQgKiBzYW1lIGxvY2suICBUaGUgc2VuZGVyIE5VTExzIG91dHB1dF9idWZcbitcdFx0XHQgKiBhZnRlciB3YWtpbmcg4oCUIGRvaW5nIGl0IGhlcmUgd291bGQgcmFjZVxuK1x0XHRcdCAqIHdpdGggYSBzZW5kZXIgdGhhdCBoYXNuJ3Qgc2V0IG91dHB1dF9idWYgeWV0LlxuK1x0XHRcdCAqL1xuK1x0XHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdFx0Y3R4LVx1MDAzZWVycm9yID0gLUVOT0RFVjtcbitcdFx0XHRjb21wbGV0ZShcdTAwMjZjdHgtXHUwMDNlY29tcF9ldmVudCk7XG4rXHRcdFx0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHQvKiBXYWl0IGZvciBhbGwgc2VuZGVyIHRocmVhZHMgdG8gZmluaXNoIGFuZCBkcm9wIHRoZWlyIHJlZnNcbitcdCAqIGJlZm9yZSB0b3VjaGluZyB0aGUgaGFyZHdhcmUgb3IgZnJlZWluZyBhbnl0aGluZy4gIERyYWluaW5nXG4rXHQgKiBoZXJlIC0tIGFoZWFkIG9mIHRoZSB0ZWFyZG93bi9GTFIgYmxvY2sgYmVsb3cgLS0gZ3VhcmFudGVlcyBub1xuK1x0ICogaW4tZmxpZ2h0IHNlbmRlciBpcyBzdGlsbCBydW5uaW5nIHdoZW4gdGhpcyBmdW5jdGlvbiByZXR1cm5zIG9uXG4rXHQgKiBhbnkgcGF0aCwgaW5jbHVkaW5nIHRoZSBGTFItZmFpbHVyZSBlYXJseSByZXR1cm47IG90aGVyd2lzZSBhXG4rXHQgKiBzdHJhbmRlZCBzZW5kZXIgd291bGQgZGVyZWZlcmVuY2UgZ2MtXHUwMDNlaHdjX2xvY2sgL1xuK1x0ICogZ2MtXHUwMDNlaHdjX2RyYWluX3dhaXRxIGFmdGVyIHRoZSBjYWxsZXIgZnJlZXMgZ2MuXG4rXHQgKiBBZnRlciB0aGlzLCBvbmx5IHNsb3RzIGhlbGQgYnkgdGltZWQtb3V0IHNlbmRlcnMgd2hvc2VcbitcdCAqIGhhbmRsZV9yZXNwKCkgbmV2ZXIgcmFuIHJlbWFpbiBpbiB0aGUgYml0bWFwLlxuK1x0ICpcbitcdCAqIGFjdGl2ZV9zZW5kZXJzIGlzIG9ubHkgZXZlciBtb2RpZmllZCB1bmRlciBod2NfbG9jaywgYW5kIHRoZVxuK1x0ICogbGFzdCBzZW5kZXIncyB3YWtlX3VwKCkgcnVucyB1bmRlciB0aGF0IGxvY2sgYmVmb3JlIGl0IGlzXG4rXHQgKiByZWxlYXNlZC4gIEV2YWx1YXRpbmcgdGhlIGNvbmRpdGlvbiB1bmRlciBod2NfbG9jayB0aGVyZWZvcmVcbitcdCAqIGd1YXJhbnRlZXMgdGhhdCBvbmNlIHdlIG9ic2VydmUgMCB0aGUgd2FraW5nIHNlbmRlciBoYXNcbitcdCAqIGFscmVhZHkgZHJvcHBlZCB0aGUgbG9jayAtLSBpLmUuIGZpbmlzaGVkIHRvdWNoaW5nIGdjIC0tIHNvIGl0XG4rXHQgKiBjYW5ub3QgcmFjZSB0aGUgY2FsbGVyIGZyZWVpbmcgZ2MgYWZ0ZXIgdGhpcyByZXR1cm5zLlxuK1x0ICovXG4rXHRzcGluX2xvY2tfaXJxKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrKTtcbitcdHdhaXRfZXZlbnRfbG9ja19pcnEoZ2MtXHUwMDNlaHdjX2RyYWluX3dhaXRxLFxuK1x0XHRcdCAgICBod2MtXHUwMDNlYWN0aXZlX3NlbmRlcnMgPT0gMCwgZ2MtXHUwMDNlaHdjX2xvY2spO1xuK1x0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmdjLVx1MDAzZWh3Y19sb2NrKTtcbitcbitcdC8qIFRlYXIgZG93biB0aGUgSFdDIGlmIHNldHVwX2h3YyBwcmV2aW91c2x5IGFjdGl2YXRlZCBNU1QgZW50cmllcy5cbitcdCAqIFRoaXMgaXMgdGhlIGRlZmluaXRpdmUgZmxhZyDigJQgdW5saWtlIG1heF9udW1fY3FzIHdoaWNoIGRlcGVuZHNcbitcdCAqIG9uIHRoZSBpbml0IEVRRSBhcnJpdmluZy5cbitcdCAqXG4rXHQgKiBUaGUgcmV0dXJuIHZhbHVlIGlzIGludGVudGlvbmFsbHkgbm90IGNoZWNrZWQuICBUaGlzIGlzIHRoZVxuK1x0ICogdGVybWluYWwgY2xlYW51cCBwYXRoIChkZXZpY2UgcmVtb3ZhbCwgc3VzcGVuZCwgb3IgaW5pdFxuK1x0ICogZmFpbHVyZSkg4oCUIHJlc291cmNlcyBtdXN0IGJlIGZyZWVkIHJlZ2FyZGxlc3MuICBJZiB0ZWFyZG93blxuK1x0ICogZmFpbHMsIGhhcmR3YXJlIG1heSBzdGlsbCBoYXZlIGFjdGl2ZSBNU1QgZW50cmllcywgYnV0OlxuK1x0ICpcbitcdCAqICAtIEludGVycnVwdHM6IG1hbmFfaHdjX2Rlc3Ryb3lfY3EoKSBiZWxvdyBjYWxsc1xuK1x0ICogICAgbWFuYV9nZF9kZXJlZ2lzdGVyX2lycSgpIHdoaWNoIHJlbW92ZXMgdGhlIEhXQyBFUSBmcm9tXG4rXHQgKiAgICB0aGUgaW50ZXJydXB0IGRpc3BhdGNoIGxpc3QgdmlhIGxpc3RfZGVsX3JjdSgpICtcbitcdCAqICAgIHN5bmNocm9uaXplX3JjdSgpLiAgQWZ0ZXIgdGhhdCwgbm8gaW50ZXJydXB0IGhhbmRsZXIgY2FuXG4rXHQgKiAgICBpbnZva2UgaGFuZGxlX3Jlc3AoKSBvciBhY2Nlc3MgQ1EvUlEgYnVmZmVycyDigJQgZXZlbiBpZlxuK1x0ICogICAgdGhlIElSUSBpcyBzaGFyZWQgd2l0aCBkYXRhIHBhdGggcXVldWVzLlxuK1x0ICpcbitcdCAqICAtIERNQTogbWFuYV9od2NfZGVzdHJveV93cSgpIGZyZWVzIERNQSBidWZmZXJzIHZpYVxuK1x0ICogICAgZG1hX2ZyZWVfY29oZXJlbnQoKSB3aGljaCB1bm1hcHMgdGhlIElPVkEgZnJvbSB0aGVcbitcdCAqICAgIElPTU1VLiAgQW55IHN0YWxlIGhhcmR3YXJlIERNQSB0byB0aGUgb2xkIGFkZHJlc3NcbitcdCAqICAgIGZhdWx0cyBhdCB0aGUgSU9NTVUsIG5vdCBpbiBrZXJuZWwgbWVtb3J5LlxuK1x0ICovXG4rXHRpZiAoaHdjLVx1MDAzZXNldHVwX2FjdGl2ZSkge1xuK1x0XHRpbnQgdGRfZXJyID0gbWFuYV9zbWNfdGVhcmRvd25faHdjKFx1MDAyNmdjLVx1MDAzZXNobV9jaGFubmVsLCBmYWxzZSk7XG4rXG4rXHRcdGlmICh0ZF9lcnIpIHtcbitcdFx0XHRkZXZfZXJyKGdjLVx1MDAzZWRldiwgXCJIV0MgdGVhcmRvd24gZmFpbGVkOiAlZCwgaXNzdWluZyBGTFJcXG5cIixcbitcdFx0XHRcdHRkX2Vycik7XG4rXG4rXHRcdFx0LyogT24gc3lzdGVtcyB3aXRob3V0IElPTU1VLCBmcmVlaW5nIERNQSBtZW1vcnkgd2l0aFxuK1x0XHRcdCAqIGFjdGl2ZSBoYXJkd2FyZSBNU1QgbWFwcGluZ3Mgcmlza3MgbWVtb3J5IGNvcnJ1cHRpb24uXG4rXHRcdFx0ICogSXNzdWUgRkxSIHRvIGZvcmNlLXJlc2V0IHRoZSBkZXZpY2UgYW5kIGludmFsaWRhdGVcbitcdFx0XHQgKiBhbGwgaGFyZHdhcmUgc3RhdGUgaW5jbHVkaW5nIE1TVCBlbnRyaWVzLlxuK1x0XHRcdCAqL1xuK1x0XHRcdHRkX2VyciA9IHBjaWVfZmxyKHRvX3BjaV9kZXYoZ2MtXHUwMDNlZGV2KSk7XG4rXHRcdFx0aWYgKHRkX2Vycikge1xuK1x0XHRcdFx0LyogRGV2aWNlIHdlZGdlZDogdGVhcmRvd24gYW5kIEZMUlxuK1x0XHRcdFx0ICogYm90aCBmYWlsZWQsIHNvIGhhcmR3YXJlIG1heSBzdGlsbFxuK1x0XHRcdFx0ICogRE1BIGludG8gb3VyIHF1ZXVlIGJ1ZmZlcnMuICBMZWFrXG4rXHRcdFx0XHQgKiBhbGwgSFdDIERNQSBidWZmZXJzIC0tIGFuZCB0aGUgRVFcbitcdFx0XHRcdCAqIElSUSByZWdpc3RyYXRpb24sIHdob3NlIHNhZmUgcmVtb3ZhbFxuK1x0XHRcdFx0ICogbmVlZHMgdGhvc2UgcXVldWVzIC0tIGluc3RlYWQgb2ZcbitcdFx0XHRcdCAqIGZyZWVpbmcgbWVtb3J5IHRoZSBkZXZpY2UgY2FuIHN0aWxsXG4rXHRcdFx0XHQgKiByZWFjaDsgd2l0aG91dCBhbiBJT01NVSB0aGUgZnJlZWRcbitcdFx0XHRcdCAqIHBhZ2VzIGNvdWxkIGJlIHJldXNlZCB1bmRlciBsaXZlXG4rXHRcdFx0XHQgKiBETUEuXG4rXHRcdFx0XHQgKi9cbitcbitcdFx0XHRcdGRldl93YXJuKGdjLVx1MDAzZWRldixcbitcdFx0XHRcdFx0IFwiTGVha2VkIEhXQyBETUEgYnVmZmVycyAoQ1EvUlEvVFhRKSB0byBwcmV2ZW50IG1lbW9yeSBjb3JydXB0aW9uLiBEZXZpY2UgaXMgbm8gbG9uZ2VyIHVzYWJsZS5cXG5cIik7XG4rXG4rXHRcdFx0XHQvKiBEbyBub3QgY2FsbCBkZXN0cm95X2NxL3dxIGJlbG93O1xuK1x0XHRcdFx0ICogdGhleSB3b3VsZCBkbWFfZnJlZV9jb2hlcmVudCgpLlxuK1x0XHRcdFx0ICogTGVhdmUgaHdjL2NxL3J4cS90eHEgYWxsb2NhdGVkLlxuK1x0XHRcdFx0ICovXG4rXHRcdFx0XHRyZXR1cm47XG4rXHRcdFx0fVxuK1xuK1x0XHRcdGRldl9pbmZvKGdjLVx1MDAzZWRldiwgXCJGTFIgc3VjY2VlZGVkLCBoYXJkd2FyZSBzdGF0ZSBjbGVhcmVkXFxuXCIpO1xuK1x0XHR9XG4rXG4rXHRcdGh3Yy1cdTAwM2VzZXR1cF9hY3RpdmUgPSBmYWxzZTtcbitcdH1cbitcbitcdC8qIFRlYXIgZG93biB0aGUgSFdDIENRIG9iamVjdCBmaXJzdCDigJQgbWFuYV9od2NfZGVzdHJveV9jcSgpXG4rXHQgKiBib3RoIHVucHVibGlzaGVzIHRoZSBDUSBmcm9tIGNxX3RhYmxlICgrc3luY2hyb25pemVfcmN1KSBhbmRcbitcdCAqIGRlcmVnaXN0ZXJzIHRoZSBIV0MgRVEgZnJvbSB0aGUgaW50ZXJydXB0IGhhbmRsZXIncyBSQ1UgbGlzdFxuK1x0ICogKHZpYSBtYW5hX2dkX2RlcmVnaXN0ZXJfaXJxICsgc3luY2hyb25pemVfcmN1KSwgZ3VhcmFudGVlaW5nXG4rXHQgKiBubyBpbnRlcnJ1cHQgaGFuZGxlciBjYW4gYWNjZXNzIFJRL1RYUSBidWZmZXJzIGFmdGVyIHRoaXNcbitcdCAqIHBvaW50LiAgVGhlIGFjdGl2ZV9zZW5kZXJzIGRyYWluIGFib3ZlIGVuc3VyZXMgbm8gc2VuZGVyIGlzXG4rXHQgKiBhY2Nlc3NpbmcgdGhlIENRIHZpYSB0eHEtXHUwMDNlaHdjX2NxIHdoZW4gaXQgaXMgZGVzdHJveWVkLiAgVGhlblxuK1x0ICogZGVzdHJveSBUWFEgYW5kIFJRIHNhZmVseS5cbitcdCAqL1xuK1x0aWYgKGh3Yy1cdTAwM2VjcSlcbitcdFx0bWFuYV9od2NfZGVzdHJveV9jcShod2MtXHUwMDNlZ2RtYV9kZXYtXHUwMDNlZ2RtYV9jb250ZXh0LCBod2MtXHUwMDNlY3EpO1xuK1xuIFx0aWYgKGh3Yy1cdTAwM2V0eHEpXG4gXHRcdG1hbmFfaHdjX2Rlc3Ryb3lfd3EoaHdjLCBod2MtXHUwMDNldHhxKTtcbiBcbiBcdGlmIChod2MtXHUwMDNlcnhxKVxuIFx0XHRtYW5hX2h3Y19kZXN0cm95X3dxKGh3YywgaHdjLVx1MDAzZXJ4cSk7XG4gXG4tXHRpZiAoaHdjLVx1MDAzZWNxKVxuLVx0XHRtYW5hX2h3Y19kZXN0cm95X2NxKGh3Yy1cdTAwM2VnZG1hX2Rldi1cdTAwM2VnZG1hX2NvbnRleHQsIGh3Yy1cdTAwM2VjcSk7XG4rXHQvKiBSZWxlYXNlIGFueSBzbG90cyBzdGlsbCBoZWxkIOKAlCB0aGVzZSBiZWxvbmcgdG8gdGltZWQtb3V0XG4rXHQgKiBzZW5kZXJzIHdoZXJlIGhhbmRsZV9yZXNwKCkgbmV2ZXIgcmFuIChyZWZjb3VudCA9IDEgd2l0aFxuK1x0ICogaGFuZGxlX3Jlc3AncyByZWYgc3RpbGwgb3V0c3RhbmRpbmcpLlxuK1x0ICovXG4rXHRpZiAoaHdjLVx1MDAzZWNhbGxlcl9jdHgpIHtcbitcdFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjdHg7XG4rXHRcdGludCBpO1xuK1xuK1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBod2MtXHUwMDNlbnVtX2luZmxpZ2h0X21zZzsgaSsrKSB7XG4rXHRcdFx0aWYgKCF0ZXN0X2JpdChpLCBod2MtXHUwMDNlaW5mbGlnaHRfbXNnX3Jlcy5tYXApKVxuK1x0XHRcdFx0Y29udGludWU7XG4rXG4rXHRcdFx0Y3R4ID0gXHUwMDI2aHdjLVx1MDAzZWNhbGxlcl9jdHhbaV07XG4rXHRcdFx0aHdjX2N0eF9wdXQoaHdjLCBjdHgpO1xuK1x0XHR9XG4rXHR9XG4gXG4gXHRrZnJlZShod2MtXHUwMDNlY2FsbGVyX2N0eCk7XG4gXHRod2MtXHUwMDNlY2FsbGVyX2N0eCA9IE5VTEw7XG5AQCAtODQ1LDExICsxMzgxLDExIEBAIHZvaWQgbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjKVxuIFx0aHdjLVx1MDAzZWh3Y190aW1lb3V0ID0gMDtcbiBcbiBcdGtmcmVlKGh3Yyk7XG4tXHRnYy1cdTAwM2Vod2MuZHJpdmVyX2RhdGEgPSBOVUxMO1xuIFx0Z2MtXHUwMDNlaHdjLmdkbWFfY29udGV4dCA9IE5VTEw7XG4gXG4tXHR2ZnJlZShnYy1cdTAwM2VjcV90YWJsZSk7XG4tXHRnYy1cdTAwM2VjcV90YWJsZSA9IE5VTEw7XG4rXHRvbGRfY3FfdGFibGUgPSByY3VfcmVwbGFjZV9wb2ludGVyKGdjLVx1MDAzZWNxX3RhYmxlLCBOVUxMLCB0cnVlKTtcbitcdHN5bmNocm9uaXplX3JjdSgpO1xuK1x0dmZyZWUob2xkX2NxX3RhYmxlKTtcbiB9XG4gXG4gaW50IG1hbmFfaHdjX3NlbmRfcmVxdWVzdChzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0ICpod2MsIHUzMiByZXFfbGVuLFxuQEAgLTg2MCwxMyArMTM5NiwxNyBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sXG4gXHRzdHJ1Y3QgaHdjX3dxICp0eHEgPSBod2MtXHUwMDNldHhxO1xuIFx0c3RydWN0IGdkbWFfcmVxX2hkciAqcmVxX21zZztcbiBcdHN0cnVjdCBod2NfY2FsbGVyX2N0eCAqY3R4O1xuK1x0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHUzMiBkZXN0X3ZyY3EgPSAwO1xuIFx0dTMyIGRlc3RfdnJxID0gMDtcbiBcdHUzMiBjb21tYW5kO1xuK1x0dTMyIHN0YXR1cztcbiBcdHUxNiBtc2dfaWQ7XG4gXHRpbnQgZXJyO1xuIFxuLVx0bWFuYV9od2NfZ2V0X21zZ19pbmRleChod2MsIFx1MDAyNm1zZ19pZCk7XG4rXHRlcnIgPSBtYW5hX2h3Y19nZXRfbXNnX2luZGV4KGh3YywgXHUwMDI2bXNnX2lkKTtcbitcdGlmIChlcnIpXG4rXHRcdHJldHVybiBlcnI7XG4gXG4gXHR0eF93ciA9IFx1MDAyNnR4cS1cdTAwM2Vtc2dfYnVmLVx1MDAzZXJlcXNbbXNnX2lkXTtcbiBcbkBAIC04NzgsOCArMTQxOCwxMSBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sXG4gXHR9XG4gXG4gXHRjdHggPSBod2MtXHUwMDNlY2FsbGVyX2N0eCArIG1zZ19pZDtcbitcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXHRjdHgtXHUwMDNlb3V0cHV0X2J1ZiA9IHJlc3A7XG4gXHRjdHgtXHUwMDNlb3V0cHV0X2J1ZmxlbiA9IHJlc3BfbGVuO1xuK1x0c3Bpbl91bmxvY2tfaXJxcmVzdG9yZShcdTAwMjZjdHgtXHUwMDNlbG9jaywgZmxhZ3MpO1xuIFxuIFx0cmVxX21zZyA9IChzdHJ1Y3QgZ2RtYV9yZXFfaGRyICopdHhfd3ItXHUwMDNlYnVmX3ZhO1xuIFx0aWYgKHJlcSlcbkBAIC04OTUsOCArMTQzOCwxNCBAQCBpbnQgbWFuYV9od2Nfc2VuZF9yZXF1ZXN0KHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQgKmh3YywgdTMyIHJlcV9sZW4sXG4gXHRcdGRlc3RfdnJjcSA9IGh3Yy1cdTAwM2VwZl9kZXN0X3ZyY3FfaWQ7XG4gXHR9XG4gXG4rXHQvKiBUYWtlIGhhbmRsZV9yZXNwJ3MgcmVmIGJlZm9yZSBwb3N0aW5nIOKAlCBoYXJkd2FyZSBjYW4gcmVzcG9uZFxuK1x0ICogaW1tZWRpYXRlbHkgYWZ0ZXIgdGhlIGRvb3JiZWxsIHJpbmcuXG4rXHQgKi9cbitcdHJlZmNvdW50X2luYyhcdTAwMjZjdHgtXHUwMDNlcmVmY250KTtcbitcbiBcdGVyciA9IG1hbmFfaHdjX3Bvc3RfdHhfd3FlKHR4cSwgdHhfd3IsIGRlc3RfdnJxLCBkZXN0X3ZyY3EsIGZhbHNlKTtcbiBcdGlmIChlcnIpIHtcbitcdFx0cmVmY291bnRfZGVjKFx1MDAyNmN0eC1cdTAwM2VyZWZjbnQpO1xuIFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiSFdDOiBGYWlsZWQgdG8gcG9zdCBzZW5kIFdRRTogJWRcXG5cIiwgZXJyKTtcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG5AQCAtOTA3LDMxICsxNDU2LDg2IEBAIGludCBtYW5hX2h3Y19zZW5kX3JlcXVlc3Qoc3RydWN0IGh3X2NoYW5uZWxfY29udGV4dCAqaHdjLCB1MzIgcmVxX2xlbixcbiBcdFx0XHRkZXZfZXJyKGh3Yy1cdTAwM2VkZXYsIFwiQ29tbWFuZCAweCV4IHRpbWVkIG91dDogJXUgbXNcXG5cIixcbiBcdFx0XHRcdGNvbW1hbmQsIGh3Yy1cdTAwM2Vod2NfdGltZW91dCk7XG4gXG4tXHRcdC8qIFJlZHVjZSBmdXJ0aGVyIHdhaXRpbmcgaWYgSFdDIG5vIHJlc3BvbnNlICovXG4rXHRcdC8qIE5VTEwgb3V0IG91dHB1dF9idWYgc28gYSBsYXRlIGhhbmRsZV9yZXNwKCkgd29uJ3Qgd3JpdGVcbitcdFx0ICogaW50byB0aGUgY2FsbGVyJ3MgYnVmZmVyIGFmdGVyIHRoZSBzZW5kZXIgcmV0dXJucywgdGhlblxuK1x0XHQgKiBjaGVjayB3aGV0aGVyIGhhbmRsZV9yZXNwKCkgYWxyZWFkeSBkZWxpdmVyZWQgYSB2YWxpZFxuK1x0XHQgKiByZXNwb25zZSBiZXR3ZWVuIHRoZSB0aW1lb3V0IGZpcmluZyBhbmQgdGhpcyBsb2NrXG4rXHRcdCAqIGFjcXVpc2l0aW9uIOKAlCBjdHgtXHUwMDNlZXJyb3IgIT0gLUVJTlBST0dSRVNTIG1lYW5zIGl0IHJhbi5cbitcdFx0ICovXG4rXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRcdGN0eC1cdTAwM2VvdXRwdXRfYnVmID0gTlVMTDtcbitcdFx0ZXJyID0gY3R4LVx1MDAzZWVycm9yO1xuK1x0XHRzdGF0dXMgPSBjdHgtXHUwMDNlc3RhdHVzX2NvZGU7XG4rXHRcdHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoXHUwMDI2Y3R4LVx1MDAzZWxvY2ssIGZsYWdzKTtcbitcbitcdFx0aWYgKGVyciAhPSAtRUlOUFJPR1JFU1MpIHtcbitcdFx0XHQvKiBoYW5kbGVfcmVzcCgpIGRlbGl2ZXJlZCBhIHZhbGlkIHJlc3BvbnNlIGp1c3QgYWZ0ZXJcbitcdFx0XHQgKiB0aGUgdGltZW91dCBmaXJlZC4gIFRoZSBoYXJkd2FyZSBpcyBhbGl2ZSwgc28gdXNlXG4rXHRcdFx0ICogdGhlIHJlc3BvbnNlIGFuZCBsZWF2ZSB0aGUgY2hhbm5lbCB1c2FibGU7IGRvIG5vdFxuK1x0XHRcdCAqIGxhdGNoIGh3Y190aW1lZF9vdXQgb3IgZGVncmFkZSBod2NfdGltZW91dCBmb3Igd2hhdFxuK1x0XHRcdCAqIHR1cm5lZCBvdXQgdG8gYmUgYSB0cmFuc2llbnQgcmFjZS5cbitcdFx0XHQgKi9cbitcdFx0XHRod2NfY3R4X3B1dChod2MsIGN0eCk7XG4rXHRcdFx0Z290byBjaGVja19zdGF0dXM7XG4rXHRcdH1cbitcbitcdFx0LyogR2VudWluZSB0aW1lb3V0OiBubyByZXNwb25zZSBhcnJpdmVkLiAgUmVkdWNlIGZ1cnRoZXJcbitcdFx0ICogd2FpdGluZywgYW5kIG1hcmsgdGhlIGNoYW5uZWwgdGltZWQgb3V0IHVuZGVyIHRoZSBiaXRtYXBcbitcdFx0ICogbG9jayBzbyBnZXRfbXNnX2luZGV4KCkgY2Fubm90IGFjcXVpcmUgbmV3IHNsb3RzIGFmdGVyIHRoaXMuXG4rXHRcdCAqL1xuIFx0XHRpZiAoaHdjLVx1MDAzZWh3Y190aW1lb3V0IFx1MDAzZSAxKVxuIFx0XHRcdGh3Yy1cdTAwM2Vod2NfdGltZW91dCA9IDE7XG4gXG4rXHRcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcbitcdFx0aHdjLVx1MDAzZWh3Y190aW1lZF9vdXQgPSB0cnVlO1xuK1x0XHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmh3Yy1cdTAwM2VpbmZsaWdodF9tc2dfcmVzLmxvY2ssIGZsYWdzKTtcbitcdFx0d2FrZV91cF9hbGwoXHUwMDI2aHdjLVx1MDAzZW1zZ193YWl0cSk7XG4rXG4gXHRcdGVyciA9IC1FVElNRURPVVQ7XG4tXHRcdGdvdG8gb3V0O1xuK1x0XHRod2NfY3R4X3B1dChod2MsIGN0eCk7XG4rXHRcdGdvdG8gZG9uZTtcbiBcdH1cbiBcbi1cdGlmIChjdHgtXHUwMDNlZXJyb3IpIHtcbi1cdFx0ZXJyID0gY3R4LVx1MDAzZWVycm9yO1xuLVx0XHRnb3RvIG91dDtcbi1cdH1cbitcdC8qIE5VTEwgb3V0cHV0X2J1ZiBzbyBhIGxhdGUgaGFuZGxlX3Jlc3AoKSB3b24ndCBtZW1jcHkgaW50b1xuK1x0ICogdGhlIGNhbGxlcidzIGJ1ZmZlciBhZnRlciB0aGUgc2VuZGVyIGV4aXRzLiAgUmVhZCBlcnJvciBhbmRcbitcdCAqIHN0YXR1c19jb2RlIHVuZGVyIHRoZSBzYW1lIGxvY2sg4oCUIGFmdGVyIGh3Y19jdHhfcHV0IHRoZSBzbG90XG4rXHQgKiBtYXkgYmUgcmV1c2VkIGFuZCB0aGVzZSBmaWVsZHMgb3ZlcndyaXR0ZW4uXG4rXHQgKi9cbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRjdHgtXHUwMDNlb3V0cHV0X2J1ZiA9IE5VTEw7XG4rXHRlcnIgPSBjdHgtXHUwMDNlZXJyb3I7XG4rXHRzdGF0dXMgPSBjdHgtXHUwMDNlc3RhdHVzX2NvZGU7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRod2NfY3R4X3B1dChod2MsIGN0eCk7XG4rXG4rY2hlY2tfc3RhdHVzOlxuK1x0aWYgKGVycilcbitcdFx0Z290byBkb25lO1xuIFxuLVx0aWYgKGN0eC1cdTAwM2VzdGF0dXNfY29kZSBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZXN0YXR1c19jb2RlICE9IEdETUFfU1RBVFVTX01PUkVfRU5UUklFUykge1xuLVx0XHRpZiAoY3R4LVx1MDAzZXN0YXR1c19jb2RlID09IEdETUFfU1RBVFVTX0NNRF9VTlNVUFBPUlRFRCkge1xuK1x0aWYgKHN0YXR1cyBcdTAwMjZcdTAwMjYgc3RhdHVzICE9IEdETUFfU1RBVFVTX01PUkVfRU5UUklFUykge1xuK1x0XHRpZiAoc3RhdHVzID09IEdETUFfU1RBVFVTX0NNRF9VTlNVUFBPUlRFRCkge1xuIFx0XHRcdGVyciA9IC1FT1BOT1RTVVBQO1xuLVx0XHRcdGdvdG8gb3V0O1xuK1x0XHRcdGdvdG8gZG9uZTtcbiBcdFx0fVxuK1xuIFx0XHRpZiAoY29tbWFuZCAhPSBNQU5BX1FVRVJZX1BIWV9TVEFUKVxuIFx0XHRcdGRldl9lcnIoaHdjLVx1MDAzZWRldiwgXCJDb21tYW5kIDB4JXggZmFpbGVkIHdpdGggc3RhdHVzOiAweCV4XFxuXCIsXG4tXHRcdFx0XHRjb21tYW5kLCBjdHgtXHUwMDNlc3RhdHVzX2NvZGUpO1xuK1x0XHRcdFx0Y29tbWFuZCwgc3RhdHVzKTtcbiBcdFx0ZXJyID0gLUVQUk9UTztcbi1cdFx0Z290byBvdXQ7XG4rXHRcdGdvdG8gZG9uZTtcbiBcdH1cbitcbitcdGVyciA9IDA7XG4rXHRnb3RvIGRvbmU7XG4gb3V0OlxuLVx0bWFuYV9od2NfcHV0X21zZ19pbmRleChod2MsIG1zZ19pZCk7XG4rXHQvKiBQcmUtcG9zdCBlcnJvciBwYXRoczogbm8gV1FFIHdhcyBzdWJtaXR0ZWQgc28gaGFuZGxlX3Jlc3AoKVxuK1x0ICogY2Fubm90IHJhY2UgaGVyZS4gIHJlZmNvdW50IGlzIDEgKG5vIHNlY29uZCByZWYgdGFrZW4pLlxuK1x0ICovXG4rXHRjdHggPSBod2MtXHUwMDNlY2FsbGVyX2N0eCArIG1zZ19pZDtcbitcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRjdHgtXHUwMDNlb3V0cHV0X2J1ZiA9IE5VTEw7XG4rXHRzcGluX3VubG9ja19pcnFyZXN0b3JlKFx1MDAyNmN0eC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4rXHRod2NfY3R4X3B1dChod2MsIGN0eCk7XG4rZG9uZTpcbiBcdHJldHVybiBlcnI7XG4gfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uYyBiL2RyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9tYW5hL21hbmFfZW4uY1xuaW5kZXggYThjMzI5YmRiYWNmODMuLjU1MDg3NDY1OTBlN2NkIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvbWFuYV9lbi5jXG4rKysgYi9kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9tYW5hX2VuLmNcbkBAIC0yNjQ4LDYgKzI2NDgsNyBAQCBzdGF0aWMgaW50IG1hbmFfY3JlYXRlX3R4cShzdHJ1Y3QgbWFuYV9wb3J0X2NvbnRleHQgKmFwYyxcbiBcdHN0cnVjdCBtYW5hX29ial9zcGVjIGNxX3NwZWM7XG4gXHRzdHJ1Y3QgZ2RtYV9xdWV1ZV9zcGVjIHNwZWM7XG4gXHRzdHJ1Y3QgZ2RtYV9jb250ZXh0ICpnYztcbitcdHN0cnVjdCBnZG1hX3F1ZXVlIF9fcmN1ICoqY3FfdGFibGU7XG4gXHRzdHJ1Y3QgbWFuYV90eHEgKnR4cTtcbiBcdHN0cnVjdCBtYW5hX2NxICpjcTtcbiBcdHUzMiB0eHFfc2l6ZTtcbkBAIC0yNzUzLDEyICsyNzU0LDE4IEBAIHN0YXRpYyBpbnQgbWFuYV9jcmVhdGVfdHhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuIFxuIFx0XHRjcS1cdTAwM2VnZG1hX2lkID0gY3EtXHUwMDNlZ2RtYV9jcS1cdTAwM2VpZDtcbiBcbi1cdFx0aWYgKFdBUk5fT04oY3EtXHUwMDNlZ2RtYV9pZCBcdTAwM2U9IGdjLVx1MDAzZW1heF9udW1fY3FzKSkge1xuK1x0XHQvKiBObyByY3VfcmVhZF9sb2NrKCk6IG1hbmFfY3JlYXRlX3R4cSBydW5zIHVuZGVyIFJUTkwgZHVyaW5nXG4rXHRcdCAqIG5ldGRldiBicmluZy11cCwgaW5zaWRlIHRoZSBuZXRkZXYgbGlmZXRpbWUgdGhhdFxuK1x0XHQgKiBtYW5hX3JlbW92ZSgpIGRyYWlucyBiZWZvcmUgdGhlIGJhc2UgY3FfdGFibGUgY2FuIGJlIGZyZWVkLlxuK1x0XHQgKiBTZWUgZ2RtYV9jb250ZXh0OjpjcV90YWJsZSBpbiBnZG1hLmggZm9yIHdoeSBcInRydWVcIiBpcyBzb3VuZC5cbitcdFx0ICovXG4rXHRcdGNxX3RhYmxlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnYy1cdTAwM2VjcV90YWJsZSwgdHJ1ZSk7XG4rXHRcdGlmIChXQVJOX09OKCFjcV90YWJsZSB8fCBjcS1cdTAwM2VnZG1hX2lkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMpKSB7XG4gXHRcdFx0ZXJyID0gLUVJTlZBTDtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFxuLVx0XHRnYy1cdTAwM2VjcV90YWJsZVtjcS1cdTAwM2VnZG1hX2lkXSA9IGNxLVx1MDAzZWdkbWFfY3E7XG4rXHRcdHJjdV9hc3NpZ25fcG9pbnRlcihjcV90YWJsZVtjcS1cdTAwM2VnZG1hX2lkXSwgY3EtXHUwMDNlZ2RtYV9jcSk7XG4gXG4gXHRcdG1hbmFfY3JlYXRlX3R4cV9kZWJ1Z2ZzKGFwYywgaSk7XG4gXG5AQCAtMjk4Niw2ICsyOTkzLDcgQEAgc3RhdGljIHN0cnVjdCBtYW5hX3J4cSAqbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuIFx0c3RydWN0IGdkbWFfcXVldWVfc3BlYyBzcGVjO1xuIFx0c3RydWN0IG1hbmFfY3EgKmNxID0gTlVMTDtcbiBcdHN0cnVjdCBnZG1hX2NvbnRleHQgKmdjO1xuK1x0c3RydWN0IGdkbWFfcXVldWUgX19yY3UgKipjcV90YWJsZTtcbiBcdHUzMiBjcV9zaXplLCBycV9zaXplO1xuIFx0c3RydWN0IG1hbmFfcnhxICpyeHE7XG4gXHRpbnQgZXJyO1xuQEAgLTMwNzUsMTIgKzMwODMsMTggQEAgc3RhdGljIHN0cnVjdCBtYW5hX3J4cSAqbWFuYV9jcmVhdGVfcnhxKHN0cnVjdCBtYW5hX3BvcnRfY29udGV4dCAqYXBjLFxuIFx0aWYgKGVycilcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRpZiAoV0FSTl9PTihjcS1cdTAwM2VnZG1hX2lkIFx1MDAzZT0gZ2MtXHUwMDNlbWF4X251bV9jcXMpKSB7XG4rXHQvKiBObyByY3VfcmVhZF9sb2NrKCk6IG1hbmFfY3JlYXRlX3J4cSBydW5zIHVuZGVyIFJUTkwgZHVyaW5nIG5ldGRldlxuK1x0ICogYnJpbmctdXAsIGluc2lkZSB0aGUgbmV0ZGV2IGxpZmV0aW1lIHRoYXQgbWFuYV9yZW1vdmUoKSBkcmFpbnNcbitcdCAqIGJlZm9yZSB0aGUgYmFzZSBjcV90YWJsZSBjYW4gYmUgZnJlZWQuICBTZWUgZ2RtYV9jb250ZXh0OjpjcV90YWJsZVxuK1x0ICogaW4gZ2RtYS5oIGZvciB3aHkgXCJ0cnVlXCIgaXMgc291bmQuXG4rXHQgKi9cbitcdGNxX3RhYmxlID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnYy1cdTAwM2VjcV90YWJsZSwgdHJ1ZSk7XG4rXHRpZiAoV0FSTl9PTighY3FfdGFibGUgfHwgY3EtXHUwMDNlZ2RtYV9pZCBcdTAwM2U9IGdjLVx1MDAzZW1heF9udW1fY3FzKSkge1xuIFx0XHRlcnIgPSAtRUlOVkFMO1xuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdGdjLVx1MDAzZWNxX3RhYmxlW2NxLVx1MDAzZWdkbWFfaWRdID0gY3EtXHUwMDNlZ2RtYV9jcTtcbitcdHJjdV9hc3NpZ25fcG9pbnRlcihjcV90YWJsZVtjcS1cdTAwM2VnZG1hX2lkXSwgY3EtXHUwMDNlZ2RtYV9jcSk7XG4gXG4gXHRuZXRpZl9uYXBpX2FkZF93ZWlnaHRfbG9ja2VkKG5kZXYsIFx1MDAyNmNxLVx1MDAzZW5hcGksIG1hbmFfcG9sbCwgMSk7XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmggYi9pbmNsdWRlL25ldC9tYW5hL2dkbWEuaFxuaW5kZXggODUyOWNlZjBkN2M0NTIuLmE0ZWFjNmY3YzM2NjA5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvbWFuYS9nZG1hLmhcbisrKyBiL2luY2x1ZGUvbmV0L21hbmEvZ2RtYS5oXG5AQCAtNDI4LDkgKzQyOCwzNCBAQCBzdHJ1Y3QgZ2RtYV9jb250ZXh0IHtcbiBcdC8qIEwyIE1UVSAqL1xuIFx0dTE2IGFkYXB0ZXJfbXR1O1xuIFxuLVx0LyogVGhpcyBtYXBzIGEgQ1EgaW5kZXggdG8gdGhlIHF1ZXVlIHN0cnVjdHVyZS4gKi9cbitcdC8qIFNpemUgb2YgY3FfdGFibGUsIGkuZS4gdGhlIGxhcmdlc3QgdmFsaWQgQ1EgaW5kZXggKyAxLiAgU2V0IG9uY2VcbitcdCAqIHdoZW4gY3FfdGFibGUgaXMgYWxsb2NhdGVkIGFuZCB0cmVhdGVkIGFzIGltbXV0YWJsZSBmb3IgdGhlXG4rXHQgKiB0YWJsZSdzIGxpZmV0aW1lIChhIGJvdW5kIG9ubHkpIC0tIGl0IGlzIG5ldmVyIHJlc2V0IG9uIHRlYXJkb3duLlxuK1x0ICogY3FfdGFibGUgPT0gTlVMTCBpcyB0aGUgc29sZSBcInRhYmxlIHRvcm4gZG93blwiIHNpZ25hbCwgc28gZXZlcnlcbitcdCAqIGNxX3RhYmxlW2lkXSBhY2Nlc3MgbXVzdCBndWFyZCB3aXRoIGJvdGggIWNxX3RhYmxlIChnb25lKSBhbmRcbitcdCAqIGlkIFx1MDAzZT0gbWF4X251bV9jcXMgKG91dCBvZiBib3VuZHMpLlxuK1x0ICovXG4gXHR1bnNpZ25lZCBpbnRcdFx0bWF4X251bV9jcXM7XG4tXHRzdHJ1Y3QgZ2RtYV9xdWV1ZVx0KipjcV90YWJsZTtcbitcdC8qIEJvdGggdGhlIGJhc2UgcG9pbnRlciBhbmQgZWFjaCBlbnRyeSBhcmUgUkNVLW1hbmFnZWQuICBUaGUgZmFzdFxuK1x0ICogcGF0aCAobWFuYV9nZF9wcm9jZXNzX2VxZSkgcmVhZHMgdGhlIGJhc2UgdmlhIHJjdV9kZXJlZmVyZW5jZSgpXG4rXHQgKiB1bmRlciByY3VfcmVhZF9sb2NrKCksIHNvIHRoZSB0YWJsZSBpcyBmcmVlZCB3aXRoXG4rXHQgKiByY3VfYXNzaWduX3BvaW50ZXIoTlVMTCkgKyBzeW5jaHJvbml6ZV9yY3UoKSBhbmQgYW4gaW4tZmxpZ2h0XG4rXHQgKiByZWFkZXIgY2FuIG5ldmVyIG9ic2VydmUgZnJlZWQgbWVtb3J5LlxuK1x0ICpcbitcdCAqIFRoZSBzbG93IHBhdGhzIC0tIG1hbmFfZ2RfZGVzdHJveV9jcSgpIGFuZCB0aGUgQ1EgaW5zdGFsbC9yZW1vdmVcbitcdCAqIGNhbGxlcnMgKG1hbmFfY3JlYXRlX3R4cS9fcnhxLCBtYW5hX2liX2luc3RhbGwvcmVtb3ZlX2NxX2NiKSAtLVxuK1x0ICogaW5zdGVhZCByZWFkIHRoZSBiYXNlIHdpdGggcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChjcV90YWJsZSxcbitcdCAqIHRydWUpLiAgVGhlIGJhcmUgXCJ0cnVlXCIgaXMganVzdGlmaWVkIGJ5IHRlYXJkb3duIG9yZGVyaW5nLCBub3QgYnlcbitcdCAqIGEgbG9jazogdGhlIGJhc2UgdGFibGUgaXMgcmVwbGFjZWQrZnJlZWQgb25seSBieVxuK1x0ICogbWFuYV9od2NfZGVzdHJveV9jaGFubmVsKCkgKGFuZCB0aGUgY3JlYXRlLXRpbWUgcmVpbml0KSwgYW5kIGV2ZXJ5XG4rXHQgKiB0ZWFyZG93biBwYXRoIGZpcnN0IHJ1bnMgbWFuYV9yZW1vdmUoKSArIG1hbmFfcmRtYV9yZW1vdmUoKSwgd2hpY2hcbitcdCAqIHN5bmNocm9ub3VzbHkgZHJhaW4gdGhlIG5ldGRldiBhbmQgdGhlIElCIGRldmljZVxuK1x0ICogKHVucmVnaXN0ZXJfbmV0ZGV2aWNlIC8gaWJfdW5yZWdpc3Rlcl9kZXZpY2UpIHRoYXQgYm91bmQgYWxsXG4rXHQgKiBpbnN0YWxsL3JlbW92ZSBjYWxsZXJzOyB0aGUgcmVpbml0IGNhc2UgcnVucyBiZWZvcmUgZWl0aGVyXG4rXHQgKiBjb25zdW1lciBpcyBwcm9iZWQuICBTbyBubyBzbG93LXBhdGggY2FsbGVyIGNhbiBydW4gd2hpbGUgdGhlIGJhc2VcbitcdCAqIHRhYmxlIGlzIGJlaW5nIGZyZWVkLlxuK1x0ICovXG4rXHRzdHJ1Y3QgZ2RtYV9xdWV1ZVx0X19yY3UgKiBfX3JjdSAqY3FfdGFibGU7XG4gXG4gXHQvKiBQcm90ZWN0IGVxX3Rlc3RfZXZlbnQgYW5kIHRlc3RfZXZlbnRfZXFfaWQgICovXG4gXHRzdHJ1Y3QgbXV0ZXhcdFx0ZXFfdGVzdF9ldmVudF9tdXRleDtcbkBAIC00NTYsNiArNDgxLDIxIEBAIHN0cnVjdCBnZG1hX2NvbnRleHQge1xuIFx0LyogSGFyZHdhcmUgY29tbXVuaWNhdGlvbiBjaGFubmVsIChIV0MpICovXG4gXHRzdHJ1Y3QgZ2RtYV9kZXZcdFx0aHdjO1xuIFxuK1x0LyogZGVzdHJveV9jaGFubmVsKCkgd2FpdHMgaGVyZSBmb3IgYWxsIEhXQyBzZW5kZXJzIHRvIGV4aXQuXG4rXHQgKiBMaXZlcyBvbiBnYyAobm90IGh3Yykgc28gd2FrZV91cCgpIGFmdGVyIHRoZSBsYXN0IHNlbmRlcidzXG4rXHQgKiBhdG9taWNfZGVjIGRvZXNuJ3QgZGVyZWZlcmVuY2UgZnJlZWQgaHdjIG1lbW9yeS5cbitcdCAqL1xuK1x0d2FpdF9xdWV1ZV9oZWFkX3RcdGh3Y19kcmFpbl93YWl0cTtcbitcbitcdC8qIFNlcmlhbGl6ZXMgaHdjLmRyaXZlcl9kYXRhICh0aGUgaHdfY2hhbm5lbF9jb250ZXh0IHBvaW50ZXIpXG4rXHQgKiBiZXR3ZWVuIHRoZSBjb250cm9sLXBsYW5lIHJlYWRlcnMgaW4gbWFuYV9nZF9zZW5kX3JlcXVlc3QoKSxcbitcdCAqIG1hbmFfbmVlZF9sb2coKSBhbmQgbWFuYV9zZXJ2X3Jlc2V0KCkgYW5kIHRoZSBwdWJsaXNoL2NsZWFyIGluXG4rXHQgKiBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbCgpL21hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbCgpLiAgQWxsIHVzZXJzXG4rXHQgKiBhcmUgY29udHJvbC1wbGFuZSAoSFdDIGNvbW1hbmRzIHNsZWVwOyByZXNldCBydW5zIG9uIGEgd29ya3F1ZXVlKSxcbitcdCAqIHNvIGEgcGxhaW4gc3BpbmxvY2sgLS0gbm90IFJDVSAtLSBpcyBzdWZmaWNpZW50LlxuK1x0ICovXG4rXHRzcGlubG9ja190XHRcdGh3Y19sb2NrO1xuK1xuIFx0LyogQXp1cmUgbmV0d29yayBhZGFwdGVyICovXG4gXHRzdHJ1Y3QgZ2RtYV9kZXZcdFx0bWFuYTtcbiBcbkBAIC02NjgsNiArNzA4LDkgQEAgZW51bSB7XG4gLyogRHJpdmVyIHN1cHBvcnRzIGR5bmFtaWMgaW50ZXJydXB0IG1vZGVyYXRpb24gLSBESU0gKi9cbiAjZGVmaW5lIEdETUFfRFJWX0NBUF9GTEFHXzFfRFlOX0lOVEVSUlVQVF9NT0RFUkFUSU9OIEJJVCgyOClcbiBcbisvKiBEcml2ZXIgc3VwcG9ydHMgZHluYW1pYyBxdWV1ZSBkZXB0aCBmb3IgSFdDICovXG4rI2RlZmluZSBHRE1BX0RSVl9DQVBfRkxBR18xX0RZTl9IV0NfUVVFVUVfREVQVEggQklUKDI5KVxuK1xuICNkZWZpbmUgR0RNQV9EUlZfQ0FQX0ZMQUdTMSBcXFxuIFx0KEdETUFfRFJWX0NBUF9GTEFHXzFfRVFfU0hBUklOR19NVUxUSV9WUE9SVCB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9OQVBJX1dLRE9ORV9GSVggfCBcXFxuQEAgLTY4Myw2ICs3MjYsNyBAQCBlbnVtIHtcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX1BST0JFX1JFQ09WRVJZIHwgXFxcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0hBTkRMRV9TVEFMTF9TUV9SRUNPVkVSWSB8IFxcXG4gXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9IV0NfVElNRU9VVF9SRUNPVkVSWSB8IFxcXG4rXHQgR0RNQV9EUlZfQ0FQX0ZMQUdfMV9EWU5fSFdDX1FVRVVFX0RFUFRIIHwgXFxcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0VRX01TSV9VTlNIQVJFX01VTFRJX1ZQT1JUIHwgXFxcbiBcdCBHRE1BX0RSVl9DQVBfRkxBR18xX0RZTl9JTlRFUlJVUFRfTU9ERVJBVElPTilcbiBcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9tYW5hL2h3X2NoYW5uZWwuaCBiL2luY2x1ZGUvbmV0L21hbmEvaHdfY2hhbm5lbC5oXG5pbmRleCAxNmZlYjM5NjE2YzFiZS4uZWVjNWQzYWEyM2UxZDUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL25ldC9tYW5hL2h3X2NoYW5uZWwuaFxuKysrIGIvaW5jbHVkZS9uZXQvbWFuYS9od19jaGFubmVsLmhcbkBAIC0xNjQsNiArMTY0LDkgQEAgc3RydWN0IGh3Y193cSB7XG4gXHR1MTYgcXVldWVfZGVwdGg7XG4gXG4gXHRzdHJ1Y3QgaHdjX2NxICpod2NfY3E7XG4rXG4rXHQvKiBTZXJpYWxpemVzIGNvbmN1cnJlbnQgbWFuYV9nZF9wb3N0X2FuZF9yaW5nKCkgY2FsbHMuICovXG4rXHRzcGlubG9ja190IGxvY2s7XG4gfTtcbiBcbiBzdHJ1Y3QgaHdjX2NhbGxlcl9jdHgge1xuQEAgLTE3Myw2ICsxNzYsMTcgQEAgc3RydWN0IGh3Y19jYWxsZXJfY3R4IHtcbiBcbiBcdHUzMiBlcnJvcjsgLyogTGludXggZXJyb3IgY29kZSAqL1xuIFx0dTMyIHN0YXR1c19jb2RlO1xuK1xuK1x0LyogUHJvdGVjdHMgb3V0cHV0X2J1ZiBhZ2FpbnN0IGNvbmN1cnJlbnQgYWNjZXNzIGZyb21cbitcdCAqIGhhbmRsZV9yZXNwKCkgKENRIGludGVycnVwdCkgYW5kIHRoZSBzZW5kZXIgdGltZW91dCBwYXRoLlxuK1x0ICovXG4rXHRzcGlubG9ja190IGxvY2s7XG4rXG4rXHQvKiBUcmFja3Mgc2VuZGVyICsgaGFuZGxlX3Jlc3Agb3duZXJzaGlwLiAgVGhlIGxhc3QgcHV0XG4rXHQgKiAocmVmY291bnQgcmVhY2hlcyAwKSByZWxlYXNlcyB0aGUgYml0bWFwIHNsb3QuXG4rXHQgKi9cbitcdHJlZmNvdW50X3QgcmVmY250O1xuK1x0dTE2IG1zZ19pZDtcbiB9O1xuIFxuIHN0cnVjdCBod19jaGFubmVsX2NvbnRleHQge1xuQEAgLTE4MSw4ICsxOTUsOSBAQCBzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0IHtcbiBcbiBcdHUxNiBudW1faW5mbGlnaHRfbXNnO1xuIFx0dTMyIG1heF9yZXFfbXNnX3NpemU7XG4rXHR1MzIgbWF4X3Jlc3BfbXNnX3NpemU7XG4gXG4tXHR1MTYgaHdjX2luaXRfcV9kZXB0aF9tYXg7XG4rXHR1MzIgaHdjX2luaXRfcV9kZXB0aF9tYXg7XG4gXHR1MzIgaHdjX2luaXRfbWF4X3JlcV9tc2dfc2l6ZTtcbiBcdHUzMiBod2NfaW5pdF9tYXhfcmVzcF9tc2dfc2l6ZTtcbiBcbkBAIC0xOTIsMTMgKzIwNywzOCBAQCBzdHJ1Y3QgaHdfY2hhbm5lbF9jb250ZXh0IHtcbiBcdHN0cnVjdCBod2Nfd3EgKnR4cTtcbiBcdHN0cnVjdCBod2NfY3EgKmNxO1xuIFxuLVx0c3RydWN0IHNlbWFwaG9yZSBzZW1hO1xuIFx0c3RydWN0IGdkbWFfcmVzb3VyY2UgaW5mbGlnaHRfbXNnX3JlcztcbitcdC8qIFdhaXRxdWV1ZSBmb3Igc2VuZGVycyBibG9ja2VkIG9uIGEgZnVsbCBpbmZsaWdodCBiaXRtYXAuICovXG4rXHR3YWl0X3F1ZXVlX2hlYWRfdCBtc2dfd2FpdHE7XG4gXG4gXHR1MzIgcGZfZGVzdF92cnFfaWQ7XG4gXHR1MzIgcGZfZGVzdF92cmNxX2lkO1xuIFx0dTMyIGh3Y190aW1lb3V0O1xuIFxuK1x0LyogU2V0IGFmdGVyIGNoYW5uZWwgaXMgZnVsbHkgZXN0YWJsaXNoZWQ7IGNsZWFyZWQgb24gdGVhcmRvd24gdG9cbitcdCAqIGFib3J0IHdhaXRlcnMgaW4gbWFuYV9od2NfZ2V0X21zZ19pbmRleCgpIGFuZCByZWplY3QgbmV3IHNlbmRzLlxuK1x0ICovXG4rXHRib29sIGNoYW5uZWxfdXA7XG4rXG4rXHQvKiBTZXQgb24gZmlyc3QgSFdDIHRpbWVvdXQuICBDYXVzZXMgZ2V0X21zZ19pbmRleCgpIHRvIHJldHVyblxuK1x0ICogLUVUSU1FRE9VVCBpbnN0ZWFkIG9mIHdhaXRpbmcsIGRyYWluaW5nIGFsbCBxdWV1ZWQgc2VuZGVycy5cbitcdCAqL1xuK1x0Ym9vbCBod2NfdGltZWRfb3V0O1xuK1xuK1x0LyogU2V0IGFmdGVyIG1hbmFfc21jX3NldHVwX2h3YygpIHN1Y2NlZWRzIChoYXJkd2FyZSBoYXMgYWN0aXZlXG4rXHQgKiBNU1QgZW50cmllcykuICBPbiByZWNvdmVyYWJsZSBwYXRocyAoZXN0YWJsaXNoX2NoYW5uZWwpXG4rXHQgKiBjbGVhcmVkIG9ubHkgYWZ0ZXIgc3VjY2Vzc2Z1bCB0ZWFyZG93biBzbyBhIHJldHJ5IHJlbWFpbnNcbitcdCAqIHBvc3NpYmxlLiAgT24gdGhlIHRlcm1pbmFsIGRlc3Ryb3lfY2hhbm5lbCBwYXRoLCBjbGVhcmVkXG4rXHQgKiB1bmNvbmRpdGlvbmFsbHkgc2luY2UgaHdjIGlzIGFib3V0IHRvIGJlIGZyZWVkLlxuK1x0ICovXG4rXHRib29sIHNldHVwX2FjdGl2ZTtcbitcbitcdC8qIENvdW50IG9mIGluLWZsaWdodCBtYW5hX2dkX3NlbmRfcmVxdWVzdCgpIGNhbGxlcnMuICBQcm90ZWN0ZWRcbitcdCAqIGJ5IGdjLVx1MDAzZWh3Y19sb2NrOyB0aGUgbGFzdCBzZW5kZXIgdG8gZHJvcCBpdCB0byB6ZXJvIHdha2VzXG4rXHQgKiBnYy1cdTAwM2Vod2NfZHJhaW5fd2FpdHEgZm9yIHRoZSBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWwoKSBkcmFpbi5cbitcdCAqL1xuK1x0dW5zaWduZWQgaW50IGFjdGl2ZV9zZW5kZXJzO1xuK1xuIFx0c3RydWN0IGh3Y19jYWxsZXJfY3R4ICpjYWxsZXJfY3R4O1xuIH07XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNzo1MjoyMS42ODcyOTI3NjdaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2MzQ5NDA1MDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTUFOQSBEcml2ZXIgUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBzZXJpZXMgaW4gZnJvbnQgb2YgbWUgdGhhdCdzIG1ha2luZyBjaGFuZ2VzIHRvIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyLCB0aGUgTUFOQSBkcml2ZXIuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgb2YgdGhlIGRyaXZlciBpcyBiZWluZyB0b3VjaGVkOyBJJ20gc2VlaW5nIG1vZGlmaWNhdGlvbnMgaW4gYGNxLmNgLCBgZ2RtYV9tYWluLmNgLCBgaHdfY2hhbm5lbC5jYCwgYW5kIGBtYW5hX2VuLmNgLCBhbG9uZyB3aXRoIHNvbWUgaGVhZGVyIGZpbGUgdXBkYXRlcyBpbiBgZ2RtYS5oYCBhbmQgYGh3X2NoYW5uZWwuaGAuIEdpdmVuIG15IGV4cGVyaWVuY2UsIHRoYXQgbGlzdCBvZiBmaWxlcyBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIGxpa2VseSBhIHN1YnN0YW50aWFsIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5MZXQncyBxdWlja2x5IGFzc2VzcyB0aGUgbmF0dXJlIG9mIHRoZXNlIGNoYW5nZXMgdG8gZ2V0IGEgYmV0dGVyIGhhbmRsZSBvbiB0aGUgc2NvcGUuIEFoLCB5ZXMsIEknbSBzZWVpbmcgUkNVIHByb3RlY3Rpb24gYWRkZWQgZm9yIGBjcV90YWJsZWAsIGNoYW5nZXMgdG8gc3BpbmxvY2tzLCB0aW1lb3V0IGhhbmRsaW5nIGltcHJvdmVtZW50cywgcmVmY291bnQgbWFuYWdlbWVudCBmb3IgYGh3Y19jYWxsZXJfY3R4YCwgYW5kIGhhbmRsaW5nIG9mIEhXQyByZWluaXRpYWxpemF0aW9uLiBUaGF0J3MgYSBwcmV0dHkgc2lnbmlmaWNhbnQgbGF1bmRyeSBsaXN0LiBUaGlzIGlzbid0IGp1c3QgYSBtaW5vciB0d2VhazsgdGhpcyBpcyBhIGZ1bmRhbWVudGFsIHJld29yayBvZiBzb21lIGtleSBzeW5jaHJvbml6YXRpb24gYW5kIHJlc291cmNlIG1hbmFnZW1lbnQgY29tcG9uZW50cyB3aXRoaW4gdGhlIE1BTkEgZHJpdmVyLiBUaGVzZSB0eXBlcyBvZiBjaGFuZ2VzIGFsbW9zdCBhbHdheXMgaW50cm9kdWNlIHRoZSBwb3RlbnRpYWwgZm9yIHN1YnRsZSwgaGFyZC10by1kZWJ1ZyByZWdyZXNzaW9ucywgc28gdGhvcm91Z2ggdGVzdGluZyBpcyBhYnNvbHV0ZWx5IGNyaXRpY2FsLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGlzIGRyaXZlci4gSSdtIGdvaW5nIHRvIHNlYXJjaCB0aHJvdWdoIHRoZSBLY29uZmlnIGZpbGVzLCBzcGVjaWZpY2FsbHkgbG9va2luZyBmb3Igc29tZXRoaW5nIGxpa2UgYE1JQ1JPU09GVF9NQU5BYCBvciBhIHNpbWlsYXIgY29uZmlndXJhdGlvbiBzeW1ib2wgdG8gZmlndXJlIG91dCBob3cgdGhpcyBkcml2ZXIgaXMgZW5hYmxlZCBhbmQgaWYgYW55IG5ldyBvcHRpb25zIGhhdmUgYmVlbiBpbnRyb2R1Y2VkIHdpdGggdGhpcyBwYXRjaC4gVW5kZXJzdGFuZGluZyB0aGUgY29uZmlndXJhdGlvbiBpcyB2aXRhbCB0byBwcm9wZXJseSBpbnRlZ3JhdGUgdGhpcyBwYXRjaCBzZXJpZXMsIG9yIHRvIGV2ZW4ganVzdCB1bmRlcnN0YW5kIHRoZSBicm9hZGVyIGNvbnRleHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTYyLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEzLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTc6NTI6MjguMDM2NzAxMzE0WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDQ0NDMwMzMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiTUlDUk9TT0ZUX01BTkFcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9pbmZpbmliYW5kL2h3L21hbmEvS2NvbmZpZz0yPWNvbmZpZyBNQU5BX0lORklOSUJBTkRcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIk1pY3Jvc29mdCBBenVyZSBOZXR3b3JrIEFkYXB0ZXIgc3VwcG9ydFxcXCJcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9LY29uZmlnOjQ6XFx0ZGVwZW5kcyBvbiBORVRERVZJQ0VTIFxcdTAwMjZcXHUwMDI2IEVUSEVSTkVUIFxcdTAwMjZcXHUwMDI2IFBDSSBcXHUwMDI2XFx1MDAyNiBNSUNST1NPRlRfTUFOQVxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWctNS1cXHRoZWxwXFxuLS1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvS2NvbmZpZz0xNj1pZiBORVRfVkVORE9SX01JQ1JPU09GVFxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTE3LVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnOjE4OmNvbmZpZyBNSUNST1NPRlRfTUFOQVxcbmRyaXZlcnMvbmV0L2V0aGVybmV0L21pY3Jvc29mdC9LY29uZmlnLTE5LVxcdHRyaXN0YXRlIFxcXCJNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L01ha2VmaWxlLTQtXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L01ha2VmaWxlOjU6b2JqLSQoQ09ORklHX01JQ1JPU09GVF9NQU5BKSArPSBtYW5hL1xcbi0tXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGUtNC1cXG5kcml2ZXJzL25ldC9ldGhlcm5ldC9taWNyb3NvZnQvbWFuYS9NYWtlZmlsZTo1Om9iai0kKENPTkZJR19NSUNST1NPRlRfTUFOQSkgKz0gbWFuYS5vXFxuZHJpdmVycy9uZXQvZXRoZXJuZXQvbWljcm9zb2Z0L21hbmEvTWFrZWZpbGUtNi1tYW5hLW9ianMgOj0gZ2RtYV9tYWluLm8gc2htX2NoYW5uZWwubyBod19jaGFubmVsLm8gbWFuYV9lbi5vIG1hbmFfZXRodG9vbC5vIG1hbmFfYnBmLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTc6NTI6MzMuMDgxMTU0MDQ3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTgyNTU2MDc2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBTdHJhdGVneSBmb3IgdGhlIE1BTkEgRHJpdmVyKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIG15IG1pbmQganVtcHMgdG8gZnV6emluZy4gVGhlIGtleSBoZXJlIGlzIHRoZSBgTUlDUk9TT0ZUX01BTkFgIGFuZCBgTUFOQV9JTkZJTklCQU5EYCBjb25maWdzLCB0aGV5IHdpbGwgZ3VpZGUgdXMgb24gd2hldGhlciB0aGlzIGlzIGJ1aWx0IGFzIGEgbW9kdWxlIG9yIGJ1aWx0IGluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQgdGhlIHRhcmdldCBmdW5jdGlvbnMgYXJlIHdpdGhpbiB0aGUgY29kZSwgc28gbGV0J3MgbGlzdCB0aG9zZS4gVGhlIHBhdGNoIHRvdWNoZXMgYSBnb29kIGNodW5rIG9mIHRoZSBkcml2ZXIsIHNwZWNpZmljYWxseTogYG1hbmFfaWJfaW5zdGFsbF9jcV9jYmAsIGBtYW5hX2liX3JlbW92ZV9jcV9jYmAsIGBtYW5hX25lZWRfbG9nYCwgYG1hbmFfZ2Rfc2VuZF9yZXF1ZXN0YCwgYG1hbmFfc2Vydl9yZXNldGAsIGBtYW5hX2dkX3Byb2Nlc3NfZXFlYCwgYG1hbmFfZ2RfZGVzdHJveV9jcWAsIGBtYW5hX2dkX2NyZWF0ZV9kbWFfcmVnaW9uYCwgYG1hbmFfZ2RfdmVyaWZ5X3ZmX3ZlcnNpb25gLCBgbWFuYV9nZF9wcm9iZWAsIGBtYW5hX2h3Y19nZXRfbXNnX2luZGV4YCwgYG1hbmFfaHdjX3B1dF9tc2dfaW5kZXhgLCBgaHdjX2N0eF9wdXRgLCBgbWFuYV9od2NfaGFuZGxlX3Jlc3BgLCBgbWFuYV9od2NfaW5pdF9ldmVudF9oYW5kbGVyYCwgYG1hbmFfaHdjX3J4X2V2ZW50X2hhbmRsZXJgLCBgbWFuYV9od2NfZGVzdHJveV9jcWAsIGBtYW5hX2h3Y19jcmVhdGVfd3FgLCBgbWFuYV9od2NfcG9zdF90eF93cWVgLCBgbWFuYV9od2NfaW5pdF9pbmZsaWdodF9tc2dgLCBgbWFuYV9od2NfdGVzdF9jaGFubmVsYCwgYG1hbmFfaHdjX2VzdGFibGlzaF9jaGFubmVsYCwgYG1hbmFfaHdjX2luaXRfcXVldWVzYCwgYG1hbmFfaHdjX2Rlc3Ryb3lfcXVldWVzYCwgYG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsYCwgYG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbGAsIGBtYW5hX2h3Y19zZW5kX3JlcXVlc3RgLCBgbWFuYV9jcmVhdGVfdHhxYCwgYW5kIGBtYW5hX2NyZWF0ZV9yeHFgLiBUaGF0J3MgYSBsb3QsIHNvIEknbGwgbmVlZCB0byBwcmlvcml0aXplLlxuXG5MZXQncyBwaWNrIGEgZmV3IHByb21pc2luZyBjYW5kaWRhdGVzIGZvciBmdXp6aW5nLCBhbmQgSSBzaG91bGQgZm9jdXMgb24gZW50cnkgcG9pbnRzIGZyb20gdXNlcnNwYWNlIG9yIHRob3NlIHRoYXQgaGFuZGxlIGNvbXBsZXggaW50ZXJhY3Rpb24uICBJJ2xsIHBpY2s6IGBtYW5hX2h3Y19zZW5kX3JlcXVlc3RgLCBgbWFuYV9od2NfaGFuZGxlX3Jlc3BgLCBgbWFuYV9od2NfcnhfZXZlbnRfaGFuZGxlcmAsIGBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbGAsIGBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWxgLCBgbWFuYV9od2NfZXN0YWJsaXNoX2NoYW5uZWxgLCBgbWFuYV9od2NfdGVzdF9jaGFubmVsYCwgYG1hbmFfaHdjX2dldF9tc2dfaW5kZXhgLCBgbWFuYV9od2NfcHV0X21zZ19pbmRleGAsIGBtYW5hX2dkX3NlbmRfcmVxdWVzdGAsIGBtYW5hX2dkX3Byb2Nlc3NfZXFlYCwgYG1hbmFfaWJfaW5zdGFsbF9jcV9jYmAsIGFuZCBgbWFuYV9pYl9yZW1vdmVfY3FfY2JgLlxuXG5Ob3csIHRoZSBiaWcgcXVlc3Rpb246IElzIHRoaXMgZHJpdmVyIGV2ZW4gcmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQ/IE1BTkEgaXMgYSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyLCBzbyBpdCdzIGEgUENJIGRldmljZS4gIFR5cGljYWxseSwgSSdkIGxvb2sgZm9yIHN5emthbGxlciBzdXBwb3J0IHZpYSB2aGNpIG9yIGEgc2ltaWxhciBwc2V1ZG8tZGV2aWNlIGlmIHRoZSBoYXJkd2FyZSBpcyBlbXVsYXRlZC4gU3l6a2FsbGVyIGRvZXNuJ3QgaGF2ZSBhIHNwZWNpZmljIE1BTkEgZW11bGF0b3IsIHNvIEkgd2FzIGNvbmNlcm5lZCBpdCB3b3VsZG4ndCBiZSBwb3NzaWJsZSBhdCBmaXJzdC5cblxuQnV0IHdhaXQsIFBDSSBkcml2ZXJzIGNhbiBiZSBmdXp6ZWQgdXNpbmcgYHN5el9wY2lfdnBjaWAgYW5kIHNpbWlsYXIuIFRoZSB0ZXh0IHNheXMgd2UgbWF5IGJlIGFibGUgdG8gcmVhY2ggZXZlbiBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZS4gSSdtIHNlZWluZyBcInN5ei1jbHVzdGVyXCIgYXMgdGhlIGF1dGhvciwgd2hpY2ggc3Ryb25nbHkgc3VnZ2VzdHMgdGhhdCBzeXprYWxsZXIgaXMgYWN0aXZlbHkgd29ya2luZyBvbiBvciBoYXMgZm91bmQgc29tZXRoaW5nIHRvIGZ1enogaW4gdGhpcyBjb2RlISBTaW5jZSBpdCBpcyBhIHBhdGNoIGJlaW5nIHRlc3RlZCBieSBzeXprYWxsZXIgaXQgaXMgd29ydGggaXQuIFN5emthbGxlciBjYW4gZnV6eiBhbnkgUENJIGRyaXZlciBieSBiaW5kaW5nIGl0IHRvIHRoZSB2aGNpIG9yIHBjaSBwc2V1ZG8tZGV2aWNlIGFuZCBwcm92aWRpbmcgcmFuZG9tIE1NSU8vRE1BIHJlc3BvbnNlcy5cblxuT2theSwgbGV0J3MgY29uZmlybSB0aGUgY29uZmlncyBhZ2FpbiwgYmVjYXVzZSBpdCdzIGFsd2F5cyBnb29kIHRvIGJlIHRob3JvdWdoLiBZdXAsIGp1c3QgYE1JQ1JPU09GVF9NQU5BYCBhbmQgYE1BTkFfSU5GSU5JQkFORGAuXG5cbkxldCdzIHJlZmluZSB0aGUgRm9jdXNTeW1ib2xzIHRvIHRoZSBpbXBvcnRhbnQgb25lczogYG1hbmFfaHdjX3NlbmRfcmVxdWVzdGAsIGBtYW5hX2h3Y19oYW5kbGVfcmVzcGAsIGBtYW5hX2h3Y19yeF9ldmVudF9oYW5kbGVyYCwgYG1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsYCwgYG1hbmFfaHdjX2Rlc3Ryb3lfY2hhbm5lbGAsIGBtYW5hX2h3Y19lc3RhYmxpc2hfY2hhbm5lbGAsIGBtYW5hX2h3Y19kZXN0cm95X3F1ZXVlc2AsIGBtYW5hX2dkX3Byb2Nlc3NfZXFlYCwgYG1hbmFfaWJfaW5zdGFsbF9jcV9jYmAsIGBtYW5hX2liX3JlbW92ZV9jcV9jYmAsIGFuZCBgbWFuYV9od2NfZ2V0X21zZ19pbmRleGAuXG5cbkdvb2QuIE5vdywgSSBzaG91bGQgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIgY29uZmlncyB0aGF0IHdvdWxkIGluZmx1ZW5jZSB0aGUgYnVpbGQgb3IgZnVuY3Rpb25hbGl0eSBJJ20gbWlzc2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQwOTgsIk91dHB1dFRva2VucyI6MTcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDk3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIyVDE3OjUyOjUxLjMzNjc3OTY0NVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTMyNDg5NDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBNQU5BXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5kcml2ZXJzL2luZmluaWJhbmQvaHcvbWFuYS9LY29uZmlnOjI6Y29uZmlnIE1BTkFfSU5GSU5JQkFORFxcbmRyaXZlcnMvaW5maW5pYmFuZC9ody9tYW5hL0tjb25maWctMy1cXHR0cmlzdGF0ZSBcXFwiTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9wb3dlci9zdXBwbHkvS2NvbmZpZz0yOTM9Y29uZmlnIENIQVJHRVJfU0JTXFxuLS1cXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnLTI5OS1cXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnOjMwMDpjb25maWcgTUFOQUdFUl9TQlNcXG5kcml2ZXJzL3Bvd2VyL3N1cHBseS9LY29uZmlnLTMwMS1cXHR0cmlzdGF0ZSBcXFwiU21hcnQgQmF0dGVyeSBTeXN0ZW0gTWFuYWdlclxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjJUMTc6NTI6NTMuODY5Mjc3MDA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzk2NDkyMDA3MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZTpcblxuKipEZWVwIERpdmUgaW50byBNQU5BIEluZmluaWJhbmQgRnVuY3Rpb25hbGl0eSoqXG5cbkFscmlnaHQsIGxldCdzIHNlZSB3aGF0IHdlJ3JlIHdvcmtpbmcgd2l0aCBoZXJlLiBUaGUgY29uZmlndXJhdGlvbiBjb250ZXh0IGlzIGNsZWFybHkgZm9jdXNlZCBvbiB0aGUgYE1JQ1JPU09GVF9NQU5BYCBhbmQgYE1BTkFfSU5GSU5JQkFORGAgc2V0dXBzLiBJIG5lZWQgdG8ga2VlcCB0aG9zZSBpbiBtaW5kIGFzIHRoZSBmb3VuZGF0aW9uIGZvciBldmVyeXRoaW5nIHRoYXQncyB0byBjb21lLlxuXG5JJ20gemVyb2luZyBpbiBvbiBhIGNyaXRpY2FsIHN1YnNldCBvZiBmdW5jdGlvbnMsIG9yIHdoYXQgdGhleSdyZSBjYWxsaW5nIGBGb2N1c1N5bWJvbHNgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjb3JlIGJ1aWxkaW5nIGJsb2NrcyBmb3IgaGFuZGxpbmcgQ29tcGxldGlvbiBRdWV1ZXMgKENRcyksIGhhcmR3YXJlIGNvbW11bmljYXRpb24sIGFuZCBnZW5lcmFsIGRhdGEgcHJvY2Vzc2luZyB3aXRoaW4gdGhpcyBJbmZpbmliYW5kIGltcGxlbWVudGF0aW9uLiBMZXQncyBicmVhayB0aGVtIGRvd24uXG5cbiogICBgbWFuYV9pYl9pbnN0YWxsX2NxX2NiYCBhbmQgYG1hbmFfaWJfcmVtb3ZlX2NxX2NiYDogVGhlc2UgY2xlYXJseSByZWxhdGUgdG8gdGhlIGluc3RhbGxhdGlvbiBhbmQgcmVtb3ZhbCBvZiBDb21wbGV0aW9uIFF1ZXVlIGNhbGxiYWNrcy4gVGhpcyBzdWdnZXN0cyBhIHNvcGhpc3RpY2F0ZWQgZXZlbnQtZHJpdmVuIG1vZGVsIGZvciBoYW5kbGluZyBjb21wbGV0aW9ucywgd2hpY2ggaXMgc3RhbmRhcmQgYnV0IGltcG9ydGFudCB0byB2ZXJpZnkgdGhlIG51YW5jZXMgb2YuXG4qICAgYG1hbmFfaHdjX2dldF9tc2dfaW5kZXhgLCBgbWFuYV9od2NfaGFuZGxlX3Jlc3BgLCBgbWFuYV9od2NfcnhfZXZlbnRfaGFuZGxlcmAsIGBtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbGAsIGBtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWxgLCBhbmQgYG1hbmFfaHdjX3NlbmRfcmVxdWVzdGA6IFRoZXNlIGNvbGxlY3RpdmVseSBwYWludCBhIHBpY3R1cmUgb2YgSGFyZHdhcmUgQ29tbXVuaWNhdGlvbiAoSFdDKSBtYW5hZ2VtZW50LiBXZSdyZSBsb29raW5nIGF0IG1lc3NhZ2UgaW5kZXhpbmcsIHJlc3BvbnNlIGhhbmRsaW5nLCBldmVudCBwcm9jZXNzaW5nIChwYXJ0aWN1bGFybHkgb24gdGhlIHJlY2VpdmUgc2lkZSksIGFuZCB0aGUgY3JlYXRpb24sIGRlc3RydWN0aW9uLCBhbmQgdHJhbnNtaXNzaW9uIGFzcGVjdHMgb2YgY29tbXVuaWNhdGlvbiBjaGFubmVscy4gQSBnb29kIGxldmVsIG9mIGFic3RyYWN0aW9uLCBjcml0aWNhbCB0byBwZXJmb3JtYW5jZS5cbiogICBgbWFuYV9nZF9wcm9jZXNzX2VxZWAgYW5kIGBtYW5hX2dkX2Rlc3Ryb3lfY3FgOiBUaGVzZSBhcmUgbGlrZWx5IHJlbGF0ZWQgdG8gZ2VuZXJpYyBkYXRhIChHRCkgcHJvY2Vzc2luZyBhbmQgZGVzdHJveWluZyBDUXMuIFRoaXMgaW1wbGllcyB0aGUgZXhpc3RlbmNlIG9mIGEgZ2VuZXJpYyBkYXRhIG1vZGVsIGZvciBkYXRhIHRyYW5zZmVyLCBzZXBhcmF0ZSBmcm9tIHRoZSBJbmZpbmliYW5kLXNwZWNpZmljIGFzcGVjdHMuXG5cblNvLCBvdmVyYWxsLCBhIHRob3JvdWdoIHNldCBvZiBjb25zaWRlcmF0aW9ucyB0aGF0IGluZGljYXRlcyBhIHdlbGwtc3RydWN0dXJlZCBhcHByb2FjaCB0byBoYW5kbGluZyBJbmZpbmliYW5kIG9wZXJhdGlvbnMgd2l0aCB0aGlzIGBNQU5BYCBpbXBsZW1lbnRhdGlvbi5cblxuTXkgbmV4dCBzdGVwIGlzIHRvIGNhbGwgc2V0LXJlc3VsdHMuIFRoaXMgaW5kaWNhdGVzIHRoZSBuZXh0IHN0ZXBzIGluIHRoaXMgZXZhbHVhdGlvbiwgbGlrZWx5IGdhdGhlcmluZyBhbGwgYXZhaWxhYmxlIGRhdGEgcG9pbnRzIHRvIGVzdGFibGlzaCBhIGJlbmNobWFyayBmb3IgcGVyZm9ybWFuY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2Mzg1LCJPdXRwdXRUb2tlbnMiOjIxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yMlQxNzo1MzowMS44MzQyMDEyMTZaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyODU2NzQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUlDUk9TT0ZUX01BTkFcIixcbiAgICBcIk1BTkFfSU5GSU5JQkFORFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm1hbmFfaWJfaW5zdGFsbF9jcV9jYlwiLFxuICAgIFwibWFuYV9pYl9yZW1vdmVfY3FfY2JcIixcbiAgICBcIm1hbmFfaHdjX2dldF9tc2dfaW5kZXhcIixcbiAgICBcIm1hbmFfaHdjX2hhbmRsZV9yZXNwXCIsXG4gICAgXCJtYW5hX2h3Y19yeF9ldmVudF9oYW5kbGVyXCIsXG4gICAgXCJtYW5hX2h3Y19jcmVhdGVfY2hhbm5lbFwiLFxuICAgIFwibWFuYV9od2NfZGVzdHJveV9jaGFubmVsXCIsXG4gICAgXCJtYW5hX2h3Y19zZW5kX3JlcXVlc3RcIixcbiAgICBcIm1hbmFfZ2RfcHJvY2Vzc19lcWVcIixcbiAgICBcIm1hbmFfZ2RfZGVzdHJveV9jcVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUgTWljcm9zb2Z0IEF6dXJlIE5ldHdvcmsgQWRhcHRlciAoTUFOQSkgZHJpdmVyLCBpbmNsdWRpbmcgYWRkaW5nIFJDVSBwcm90ZWN0aW9uIGZvciB0aGUgQ1EgdGFibGUsIGhhbmRsaW5nIEhXQyB0aW1lb3V0cywgYW5kIGFkZGluZyByZWZjb3VudHMgZm9yIGNhbGxlciBjb250ZXh0cy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgdGhlIGNvcmUgbG9naWMgb2YgdGhlIGRyaXZlciBhbmQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNSUNST1NPRlRfTUFOQVwiLFxuICAgIFwiTUFOQV9JTkZJTklCQU5EXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFuYV9pYl9pbnN0YWxsX2NxX2NiXCIsXG4gICAgXCJtYW5hX2liX3JlbW92ZV9jcV9jYlwiLFxuICAgIFwibWFuYV9od2NfZ2V0X21zZ19pbmRleFwiLFxuICAgIFwibWFuYV9od2NfaGFuZGxlX3Jlc3BcIixcbiAgICBcIm1hbmFfaHdjX3J4X2V2ZW50X2hhbmRsZXJcIixcbiAgICBcIm1hbmFfaHdjX2NyZWF0ZV9jaGFubmVsXCIsXG4gICAgXCJtYW5hX2h3Y19kZXN0cm95X2NoYW5uZWxcIixcbiAgICBcIm1hbmFfaHdjX3NlbmRfcmVxdWVzdFwiLFxuICAgIFwibWFuYV9nZF9wcm9jZXNzX2VxZVwiLFxuICAgIFwibWFuYV9nZF9kZXN0cm95X2NxXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBNaWNyb3NvZnQgQXp1cmUgTmV0d29yayBBZGFwdGVyIChNQU5BKSBkcml2ZXIsIGluY2x1ZGluZyBhZGRpbmcgUkNVIHByb3RlY3Rpb24gZm9yIHRoZSBDUSB0YWJsZSwgaGFuZGxpbmcgSFdDIHRpbWVvdXRzLCBhbmQgYWRkaW5nIHJlZmNvdW50cyBmb3IgY2FsbGVyIGNvbnRleHRzLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCB0aGUgY29yZSBsb2dpYyBvZiB0aGUgZHJpdmVyIGFuZCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4wvd[1] Phase: Succeeded StartedAt: 2026-07-22 17:53:14 +0000 UTC FinishedAt: 2026-07-22 17:53:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-22 17:53:14 +0000 UTC FinishedAt: 2026-07-22 17:53:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[2] Phase: Succeeded StartedAt: 2026-07-22 17:53:14 +0000 UTC FinishedAt: 2026-07-22 19:39:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-22 17:53:14 +0000 UTC FinishedAt: 2026-07-22 19:39:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-22 17:53:14 +0000 UTC FinishedAt: 2026-07-22 17:53:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-22 17:53:14 +0000 UTC FinishedAt: 2026-07-22 17:53:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4wvd/series-workflowd4wvd-convert-artifact-2291278003/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-22 17:53:34 +0000 UTC FinishedAt: 2026-07-22 18:42:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-22 17:53:34 +0000 UTC FinishedAt: 2026-07-22 18:42:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4495a1e2-772c-4b54-9429-e405a93bf481,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4wvd/series-workflowd4wvd-convert-artifact-2291278003/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "d4768c03-fcd3-45b4-8b51-d9ced54308e1", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4wvd/series-workflowd4wvd-build-action-1140345697/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-22 17:53:34 +0000 UTC FinishedAt: 2026-07-22 18:41:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4495a1e2-772c-4b54-9429-e405a93bf481,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4wvd/series-workflowd4wvd-convert-artifact-2291278003/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "d4768c03-fcd3-45b4-8b51-d9ced54308e1", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4wvd/series-workflowd4wvd-build-action-1140345697/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-22 18:42:20 +0000 UTC FinishedAt: 2026-07-22 18:42:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-22 18:42:20 +0000 UTC FinishedAt: 2026-07-22 18:42:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-22 18:42:20 +0000 UTC FinishedAt: 2026-07-22 18:42:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-22 18:42:20 +0000 UTC FinishedAt: 2026-07-22 18:42:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4wvd/series-workflowd4wvd-convert-artifact-360519338/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-22 18:42:30 +0000 UTC FinishedAt: 2026-07-22 18:44:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-22 18:42:30 +0000 UTC FinishedAt: 2026-07-22 18:44:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d4768c03-fcd3-45b4-8b51-d9ced54308e1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4wvd/series-workflowd4wvd-build-action-1140345697/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-22 18:44:33 +0000 UTC FinishedAt: 2026-07-22 18:44:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-22 18:44:33 +0000 UTC FinishedAt: 2026-07-22 18:44:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-22 18:44:33 +0000 UTC FinishedAt: 2026-07-22 19:32:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-22 18:44:33 +0000 UTC FinishedAt: 2026-07-22 19:32:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4495a1e2-772c-4b54-9429-e405a93bf481,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4wvd/series-workflowd4wvd-convert-artifact-360519338/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "23a96e91-eb29-44cd-bf24-489beb046d42", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4wvd/series-workflowd4wvd-build-action-2676108750/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-22 18:44:33 +0000 UTC FinishedAt: 2026-07-22 19:32:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*4495a1e2-772c-4b54-9429-e405a93bf481,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4wvd/series-workflowd4wvd-convert-artifact-360519338/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "23a96e91-eb29-44cd-bf24-489beb046d42", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4wvd/series-workflowd4wvd-build-action-2676108750/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-22 19:32:28 +0000 UTC FinishedAt: 2026-07-22 19:32:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-22 19:32:28 +0000 UTC FinishedAt: 2026-07-22 19:32:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-22 19:32:28 +0000 UTC FinishedAt: 2026-07-22 19:34:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-22 19:32:28 +0000 UTC FinishedAt: 2026-07-22 19:34:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*23a96e91-eb29-44cd-bf24-489beb046d42,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4wvd/series-workflowd4wvd-build-action-2676108750/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-22 19:34:21 +0000 UTC FinishedAt: 2026-07-22 19:39:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-22 19:34:21 +0000 UTC FinishedAt: 2026-07-22 19:39:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*d4768c03-fcd3-45b4-8b51-d9ced54308e1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*23a96e91-eb29-44cd-bf24-489beb046d42,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4wvd/series-workflowd4wvd-build-action-1140345697/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4wvd/series-workflowd4wvd-build-action-2676108750/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-22 19:34:21 +0000 UTC FinishedAt: 2026-07-22 19:34:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-22 19:34:21 +0000 UTC FinishedAt: 2026-07-22 19:34:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4wvd/series-workflowd4wvd-convert-artifact-225332799/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-22 19:34:21 +0000 UTC FinishedAt: 2026-07-22 19:34:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-22 19:34:21 +0000 UTC FinishedAt: 2026-07-22 19:34:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-22 19:34:21 +0000 UTC FinishedAt: 2026-07-22 19:34:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-22 19:34:31 +0000 UTC FinishedAt: 2026-07-22 19:39:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowd4wvd[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["mana_ib_install_cq_cb","mana_ib_remove_cq_cb","mana_hwc_get_msg_index","mana_hwc_handle_resp","mana_hwc_rx_event_handler","mana_hwc_create_channel","mana_hwc_destroy_channel","mana_hwc_send_request","mana_gd_process_eqe","mana_gd_destroy_cq"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"e354f7d60f14a3eacd5ec7b607346a5612f655ec","config_name":"upstream-apparmor-kasan.config","enable_configs":["MICROSOFT_MANA","MANA_INFINIBAND"],"series_id":"49feb0ee-d0b1-4dbb-8b35-593d07e85d2e","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-22 19:34:31 +0000 UTC FinishedAt: 2026-07-22 19:39:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d4768c03-fcd3-45b4-8b51-d9ced54308e1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*23a96e91-eb29-44cd-bf24-489beb046d42,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4wvd/series-workflowd4wvd-build-action-1140345697/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4wvd/series-workflowd4wvd-build-action-2676108750/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowd4wvd/series-workflowd4wvd-convert-artifact-225332799/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}