Name: series-workflowhjj7w Phase: Succeeded StartedAt: 2026-06-29 12:47:07 +0000 UTC FinishedAt: 2026-06-29 17:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[0] Phase: Succeeded StartedAt: 2026-06-29 12:47:07 +0000 UTC FinishedAt: 2026-06-29 13:12:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[0].run-triage Phase: Succeeded StartedAt: 2026-06-29 12:47:07 +0000 UTC FinishedAt: 2026-06-29 13:12:26 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD", "BRIDGE", "BRIDGE_VLAN_FILTERING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD", "BRIDGE", "BRIDGE_VLAN_FILTERING" ], "series_id": "3cda7c22-8be4-4de2-adb2-7d4318f01ed4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "br_fdb_has_forwarding_entry_rcu", "br_vlan_get_offload_info_rcu", "br_vlan_is_enabled_rcu", "__dev_fill_forward_path", "nft_flow_route", "nft_flow_route_bridging", "nft_flow_offload_is_bridging", "nft_br_vlan_dev_fill_forward_path", "nft_fill_vlan_passthrough_info" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI5IDEyOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0JSSURHRV9WTEFOX0ZJTFRFUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3UmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9nZXRfb2ZmbG9hZF9pbmZvX3JjdSYjMzQ7LAogICAgJiMzNDticl92bGFuX2lzX2VuYWJsZWRfcmN1JiMzNDssCiAgICAmIzM0O19fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O25mdF9mbG93X3JvdXRlJiMzNDssCiAgICAmIzM0O25mdF9mbG93X3JvdXRlX2JyaWRnaW5nJiMzNDssCiAgICAmIzM0O25mdF9mbG93X29mZmxvYWRfaXNfYnJpZGdpbmcmIzM0OywKICAgICYjMzQ7bmZ0X2JyX3ZsYW5fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O25mdF9maWxsX3ZsYW5fcGFzc3Rocm91Z2hfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGZsb3cgb2ZmbG9hZCBvZiBicmlkZ2VkIHRyYWZmaWMuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBjaGVjayBicmlkZ2UgRkRCIGVudHJpZXMgYW5kIFZMQU4gaW5mb3JtYXRpb24gZm9yIGZsb3cgb2ZmbG9hZCwgYW5kIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBwYXRoIHRvIGhhbmRsZSBicmlkZ2VkIHRyYWZmaWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTI6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNTI5NWQ2MmVlY2YyODk4NmUxOGFhZDc3OWNmNWRjZjNkMDU5NmFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTI6NTY6MjcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaCBiL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmhcbmluZGV4IDc1NjczYjhiZmZjYjhhLi5jMWNhZTU0NzQ5YzUxNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmhcbkBAIC0xNDgsNiAmIzQzOzE0OCw5IEBAIGludCBicl92bGFuX2dldF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB2aWQsXG4gXHRcdCAgICAgc3RydWN0IGJyaWRnZV92bGFuX2luZm8gKnBfdmluZm8pO1xuIGludCBicl92bGFuX2dldF9pbmZvX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkLFxuIFx0XHRcdCBzdHJ1Y3QgYnJpZGdlX3ZsYW5faW5mbyAqcF92aW5mbyk7XG4mIzQzO3UxNiBicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiAqcHJvdG8pO1xuJiM0Mztib29sIGJyX3ZsYW5faXNfZW5hYmxlZF9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gYm9vbCBicl9tc3RfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBpbnQgYnJfbXN0X2dldF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBtc3RpLCB1bnNpZ25lZCBsb25nICp2aWRzKTtcbiBpbnQgYnJfbXN0X2dldF9zdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgbXN0aSwgdTggKnN0YXRlKTtcbkBAIC0xODQsNiAmIzQzOzE4NywxNyBAQCBzdGF0aWMgaW5saW5lIGludCBicl92bGFuX2dldF9pbmZvX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkLFxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHUxNiBicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0XHRcdF9fYmUxNiAqcHJvdG8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGJyX3ZsYW5faXNfZW5hYmxlZF9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBicl9tc3RfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbkBAIC0yMDksNiAmIzQzOzIyMyw4IEBAIHZvaWQgYnJfZmRiX2NsZWFyX29mZmxvYWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCk7XG4gYm9vbCBicl9wb3J0X2ZsYWdfaXNfc2V0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZyk7XG4gdTggYnJfcG9ydF9nZXRfc3RwX3N0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIGNsb2NrX3QgYnJfZ2V0X2FnZWluZ190aW1lKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpicl9kZXYpO1xuJiM0Mztib29sIGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHU4ICphZGRyKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKlxuIGJyX2ZkYl9maW5kX3BvcnQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldixcbkBAIC0yMzcsNiAmIzQzOzI1MywxMyBAQCBzdGF0aWMgaW5saW5lIGNsb2NrX3QgYnJfZ2V0X2FnZWluZ190aW1lKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpicl9kZXYpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgY29uc3QgdTggKmFkZHIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiAjZW5kaWZcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOTk4MWQ2MzdmOGI1NDYuLmMxZDBiODk3ZGU5NTM0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTM0MjIsNiAmIzQzOzM0MjIsOCBAQCBpbnQgZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gaW50IGRldl9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcbiBcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcbiYjNDM7aW50IF9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsIGNvbnN0IHU4ICpkYWRkcixcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XG4gc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZV9yY3Uoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqX19kZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2ZkYi5jIGIvbmV0L2JyaWRnZS9icl9mZGIuY1xuaW5kZXggZTQ1NzBiYmVkODU0NDUuLjMxNjFjMjY4OWY2YTZmIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9mZGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9mZGIuY1xuQEAgLTI2Nyw2ICYjNDM7MjY3LDM4IEBAIHN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqYnJfZmRiX2ZpbmRfcmN1KHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiBcdHJldHVybiBmZGJfZmluZF9yY3UoXHUwMDI2YnItXHUwMDNlZmRiX2hhc2hfdGJsLCBhZGRyLCB2aWQpO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3UgLSBjaGVjayBpZiBhIE1BQyBjYW4gYmUgZm9yd2FyZGVkIGJ5IHRoZSBicmlkZ2VcbiYjNDM7ICogQGRldjogYnJpZGdlIHBvcnQgbmV0d29yayBkZXZpY2VcbiYjNDM7ICogQHNrYjogcGFja2V0IGJ1ZmZlciAodXNlZCB0byBkZXRlcm1pbmUgVkxBTiBpZClcbiYjNDM7ICogQGFkZHI6IGRlc3RpbmF0aW9uIE1BQyBhZGRyZXNzXG4mIzQzOyAqXG4mIzQzOyAqIFJlc29sdmVzIHRoZSBWTEFOIGlkIGZvciBAc2tiIG9uIEBkZXYgKHNrYiBWTEFOIHRhZyB3aGVuIHByZXNlbnQsIFBWSURcbiYjNDM7ICogd2hlbiBWTEFOIGZpbHRlcmluZyBpcyBlbmFibGVkLCAwIG90aGVyd2lzZSkgdGhlbiBjaGVja3Mgd2hldGhlciB0aGUgYnJpZGdlXG4mIzQzOyAqIEZEQiBjb250YWlucyBhIGZvcndhcmRpbmcgZW50cnkgKGRzdCAhPSBOVUxMLCBub3QgYSBsb2NhbC9zZWxmIGVudHJ5KSBmb3JcbiYjNDM7ICogQGFkZHIgYW5kIHRoYXQgVkxBTiBpZC4gU2luZ2xlIGJyX3BvcnRfZ2V0X3JjdSgpIGxvb2t1cC5cbiYjNDM7ICogTXVzdCBiZSBjYWxsZWQgdW5kZXIgUkNVIHJlYWQgbG9jay5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTggKmFkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0ID0gYnJfcG9ydF9nZXRfcmN1KGRldik7XG4mIzQzO1x0c3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmZGI7XG4mIzQzO1x0dTE2IHZpZCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghcG9ydClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoYnJfb3B0X2dldChwb3J0LVx1MDAzZWJyLCBCUk9QVF9WTEFOX0VOQUJMRUQpKSB7XG4mIzQzO1x0XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSlcbiYjNDM7XHRcdFx0dmlkID0gc2tiX3ZsYW5fdGFnX2dldF9pZChza2IpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRicl92bGFuX2dldF9wdmlkX3JjdShkZXYsIFx1MDAyNnZpZCk7XG4mIzQzO1x0fVxuJiM0MztcdGZkYiA9IGJyX2ZkYl9maW5kX3JjdShwb3J0LVx1MDAzZWJyLCBhZGRyLCB2aWQpO1xuJiM0MztcdHJldHVybiBmZGIgXHUwMDI2XHUwMDI2IGZkYi1cdTAwM2Vkc3Q7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdSk7XG4mIzQzO1xuIC8qIFdoZW4gYSBzdGF0aWMgRkRCIGVudHJ5IGlzIGFkZGVkLCB0aGUgbWFjIGFkZHJlc3MgZnJvbSB0aGUgZW50cnkgaXNcbiAgKiBhZGRlZCB0byB0aGUgYnJpZGdlIHByaXZhdGUgSFcgYWRkcmVzcyBsaXN0IGFuZCBhbGwgcmVxdWlyZWQgcG9ydHNcbiAgKiBhcmUgdGhlbiB1cGRhdGVkIHdpdGggdGhlIG5ldyBpbmZvcm1hdGlvbi5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ZsYW4uYyBiL25ldC9icmlkZ2UvYnJfdmxhbi5jXG5pbmRleCA1NTYwYWZjYWFjYTMyNy4uMGIyOTYzNjJhZGY3YzkgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl92bGFuLmNcbkBAIC0xNTU5LDYgJiM0MzsxNTU5LDUxIEBAIGludCBicl92bGFuX2dldF9pbmZvX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChicl92bGFuX2dldF9pbmZvX3JjdSk7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1IC0gZ2V0IFZMQU4gaWQgYW5kIHByb3RvY29sIGZvciBicmlkZ2UgZmxvdyBvZmZsb2FkXG4mIzQzOyAqIEBkZXY6IGJyaWRnZSBwb3J0IG5ldHdvcmsgZGV2aWNlXG4mIzQzOyAqIEBza2I6IHBhY2tldCBidWZmZXJcbiYjNDM7ICogQHByb3RvOiBvdXRwdXQgZm9yIHRoZSBicmlkZ2UgVkxBTiBwcm90b2NvbCAoc2V0IG9ubHkgd2hlbiByZXR1cm4gdmFsdWUgIT0gMClcbiYjNDM7ICpcbiYjNDM7ICogV2hlbiBWTEFOIGZpbHRlcmluZyBpcyBlbmFibGVkLCByZXNvbHZlcyB0aGUgVkxBTiBpZCBmb3IgZmxvdyBvZmZsb2FkIChza2JcbiYjNDM7ICogVkxBTiB0YWcgaWQgaWYgcHJlc2VudCwgUFZJRCBvdGhlcndpc2UpIGFuZCB3cml0ZXMgdGhlIGJyaWRnZSBWTEFOIHByb3RvY29sXG4mIzQzOyAqIHRvIEBwcm90by4gUmV0dXJucyAwIHdoZW4gZmlsdGVyaW5nIGlzIG9mZiBvciBAZGV2IGlzIG5vdCBhIGJyaWRnZSBwb3J0LlxuJiM0MzsgKiBTaW5nbGUgYnJfcG9ydF9nZXRfcmN1KCkgbG9va3VwLiBNdXN0IGJlIGNhbGxlZCB1bmRlciBSQ1UgcmVhZCBsb2NrLlxuJiM0MzsgKi9cbiYjNDM7dTE2IGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2ICpwcm90bylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQgPSBicl9wb3J0X2dldF9yY3UoZGV2KTtcbiYjNDM7XHR1MTYgdmlkID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwb3J0IHx8ICFicl9vcHRfZ2V0KHBvcnQtXHUwMDNlYnIsIEJST1BUX1ZMQU5fRU5BQkxFRCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSlcbiYjNDM7XHRcdHZpZCA9IHNrYl92bGFuX3RhZ19nZXRfaWQoc2tiKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRicl92bGFuX2dldF9wdmlkX3JjdShkZXYsIFx1MDAyNnZpZCk7XG4mIzQzO1x0aWYgKHZpZClcbiYjNDM7XHRcdCpwcm90byA9IHBvcnQtXHUwMDNlYnItXHUwMDNldmxhbl9wcm90bztcbiYjNDM7XHRyZXR1cm4gdmlkO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3UpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJyX3ZsYW5faXNfZW5hYmxlZF9yY3UgLSBjaGVjayBpZiBWTEFOIGZpbHRlcmluZyBpcyBhY3RpdmUgb24gYSBwb3J0JiMzOTtzIGJyaWRnZVxuJiM0MzsgKiBAZGV2OiBicmlkZ2UgcG9ydCBuZXR3b3JrIGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zIHRydWUgaWYgVkxBTiBmaWx0ZXJpbmcgaXMgZW5hYmxlZCBvbiB0aGUgYnJpZGdlIEBkZXYgYmVsb25ncyB0by5cbiYjNDM7ICogUmV0dXJucyBmYWxzZSB3aGVuIEBkZXYgaXMgbm90IGEgYnJpZGdlIHBvcnQgb3IgZmlsdGVyaW5nIGlzIG9mZi5cbiYjNDM7ICogTXVzdCBiZSBjYWxsZWQgdW5kZXIgUkNVIHJlYWQgbG9jay5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgYnJfdmxhbl9pc19lbmFibGVkX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IGJyX3BvcnRfZ2V0X3JjdShkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcG9ydCBcdTAwMjZcdTAwMjYgYnJfb3B0X2dldChwb3J0LVx1MDAzZWJyLCBCUk9QVF9WTEFOX0VOQUJMRUQpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGJyX3ZsYW5faXNfZW5hYmxlZF9yY3UpO1xuJiM0MztcbiBzdGF0aWMgaW50IGJyX3ZsYW5faXNfYmluZF92bGFuX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHJldHVybiBpc192bGFuX2RldihkZXYpIFx1MDAyNlx1MDAyNlxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDRiM2Q1Y2ZkZjZlMDBmLi42MmYxZDBiNjRjNzZkZSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTc1MCw0NCAmIzQzOzc1MCw1MiBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqZGV2X2Z3ZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuIFx0cmV0dXJuIFx1MDAyNnN0YWNrLVx1MDAzZXBhdGhba107XG4gfVxuIFxuLWludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuLVx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4mIzQzO2ludCBfX2Rldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LCBjb25zdCB1OCAqZGFkZHIsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbGFzdF9kZXY7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XG4tXHRcdC5kZXZcdD0gZGV2LFxuLVx0fTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbi1cdG1lbWNweShjdHguZGFkZHIsIGRhZGRyLCBzaXplb2YoY3R4LmRhZGRyKSk7XG4mIzQzO1x0bWVtY3B5KGN0eC1cdTAwM2VkYWRkciwgZGFkZHIsIHNpemVvZihjdHgtXHUwMDNlZGFkZHIpKTtcbiBcdHN0YWNrLVx1MDAzZW51bV9wYXRocyA9IDA7XG4tXHR3aGlsZSAoY3R4LmRldiBcdTAwMjZcdTAwMjYgY3R4LmRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aCkge1xuLVx0XHRsYXN0X2RldiA9IGN0eC5kZXY7XG4mIzQzO1x0d2hpbGUgKGN0eC1cdTAwM2VkZXYgXHUwMDI2XHUwMDI2IGN0eC1cdTAwM2VkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgpIHtcbiYjNDM7XHRcdGxhc3RfZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcdFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XG4gXHRcdGlmICghcGF0aClcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXG4gXHRcdG1lbXNldChwYXRoLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2VfcGF0aCkpO1xuLVx0XHRyZXQgPSBjdHguZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKFx1MDAyNmN0eCwgcGF0aCk7XG4mIzQzO1x0XHRyZXQgPSBjdHgtXHUwMDNlZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFxuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC5kZXYpKVxuJiM0MztcdFx0aWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHgtXHUwMDNlZGV2KSlcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG4tXHRpZiAoIWN0eC5kZXYpXG4mIzQzO1x0aWYgKCFjdHgtXHUwMDNlZGV2KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XG4gXHRpZiAoIXBhdGgpXG4gXHRcdHJldHVybiAtMTtcbiBcdHBhdGgtXHUwMDNldHlwZSA9IERFVl9QQVRIX0VUSEVSTkVUO1xuLVx0cGF0aC1cdTAwM2VkZXYgPSBjdHguZGV2O1xuJiM0MztcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChfX2Rldl9maWxsX2ZvcndhcmRfcGF0aCk7XG4mIzQzO1xuJiM0MztpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHtcbiYjNDM7XHRcdC5kZXZcdD0gZGV2LFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX2Rldl9maWxsX2ZvcndhcmRfcGF0aChcdTAwMjZjdHgsIGRhZGRyLCBzdGFjayk7XG4mIzQzO31cbiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGgpO1xuIFxuIC8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2soKSwgYXMgd2UgZG9udCB0YWtlIGEgcmVmZXJlbmNlICovXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbmluZGV4IDk4YzAzYjQ4N2Y1MjExLi5kMTVjNDI1Yzg4YzRhYSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbkBAIC0xNSw2ICYjNDM7MTUsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9pcDZfcm91dGUuaFx1MDAzZVxuIFxuIHN0YXRpYyBlbnVtIGZsb3dfb2ZmbG9hZF94bWl0X3R5cGUgbmZ0X3htaXRfdHlwZShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4ge1xuQEAgLTQyLDcgJiM0Mzs0NywyNSBAQCBzdGF0aWMgYm9vbCBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbiYjNDM7c3RhdGljIGJvb2wgbmZ0X2Zsb3dfb2ZmbG9hZF9pc19icmlkZ2luZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghbmV0aWZfaXNfYnJpZGdlX3BvcnQoc2tiLVx1MDAzZWRldikpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKCFza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRyZXQgPSBicl9mZGJfaGFzX2ZvcndhcmRpbmdfZW50cnlfcmN1KHNrYi1cdTAwM2VkZXYsIHNrYixcbiYjNDM7XHRcdFx0XHRcdCAgICAgIGV0aF9oZHIoc2tiKS1cdTAwM2VoX2Rlc3QpO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRcdFx0XHQgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIHU4ICpoYSxcbkBAIC01OCw2ICYjNDM7ODEsMTIgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzQzO1x0LyogQnJpZGdpbmcgZmFzdHBhdGggY29waWVzIEV0aGVybmV0IGFkZHJlc3NlcyBpbnRvIGhhOyBkbyBub3QgcmVwbGFjZVxuJiM0MztcdCAqIHRoZW0gdmlhIG5laWdoYm91ciBsb29rdXAgb24gdGhlIHJvdXRlZCBkZXN0aW5hdGlvbiBkZXZpY2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFpc196ZXJvX2V0aGVyX2FkZHIoaGEpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0biA9IGRzdF9uZWlnaF9sb29rdXAoZHN0X2NhY2hlLCBkYWRkcik7XG4gXHRpZiAoIW4pXG4gXHRcdHJldHVybiAtMTtcbkBAIC03Miw3ICYjNDM7MTAxLDIzIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4gXHRcdHJldHVybiAtMTtcbiBcbiBvdXQ6XG4tXHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgaGEsIHN0YWNrKTtcbiYjNDM7XHRyZXR1cm4gX19kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBoYSwgc3RhY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuZnRfYnJfdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0X19iZTE2IHByb3RvID0gMDtcbiYjNDM7XHR1MTYgdmxhbl9pZDtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHZsYW5faWQgPSBicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1KHBrdC1cdTAwM2Vza2ItXHUwMDNlZGV2LCBwa3QtXHUwMDNlc2tiLCBcdTAwMjZwcm90byk7XG4mIzQzO1x0aWYgKHZsYW5faWQpIHtcbiYjNDM7XHRcdGN0eC1cdTAwM2VudW1fdmxhbnMgPSAxO1xuJiM0MztcdFx0Y3R4LVx1MDAzZXZsYW5bMF0uaWQgPSB2bGFuX2lkO1xuJiM0MztcdFx0Y3R4LVx1MDAzZXZsYW5bMF0ucHJvdG8gPSBwcm90bztcbiYjNDM7XHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHtcbkBAIC05Miw2ICYjNDM7MTM3LDI5IEBAIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHtcbiBcdGVudW0gZmxvd19vZmZsb2FkX3htaXRfdHlwZSB4bWl0X3R5cGU7XG4gfTtcbiBcbiYjNDM7c3RhdGljIHZvaWQgbmZ0X2ZpbGxfdmxhbl9wYXNzdGhyb3VnaF9pbmZvKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IG5mdF9mb3J3YXJkX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXNrYl92bGFuX3RhZ19wcmVzZW50KHBrdC1cdTAwM2Vza2IpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0Lyogd2hlbiBicmlkZ2UgVkxBTiBmaWx0ZXJpbmcgaXMgZW5hYmxlZCwgdGhlIGJyaWRnZSBoYW5kbGVzIHRoZSB0YWcgKi9cbiYjNDM7XHRpZiAobmV0aWZfaXNfYnJpZGdlX3BvcnQocGt0LVx1MDAzZXNrYi1cdTAwM2VkZXYpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhYnJfdmxhbl9pc19lbmFibGVkX3JjdShwa3QtXHUwMDNlc2tiLVx1MDAzZWRldikpIHtcbiYjNDM7XHRcdGlmIChpbmZvLVx1MDAzZW51bV9lbmNhcHMgXHUwMDNlPSBORl9GTE9XX1RBQkxFX0VOQ0FQX01BWCkge1xuJiM0MztcdFx0XHRpbmZvLVx1MDAzZWluZGV2ID0gTlVMTDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGluZm8tXHUwMDNlZW5jYXBbaW5mby1cdTAwM2VudW1fZW5jYXBzXS5pZCA9XG4mIzQzO1x0XHRcdFx0c2tiX3ZsYW5fdGFnX2dldF9pZChwa3QtXHUwMDNlc2tiKTtcbiYjNDM7XHRcdFx0aW5mby1cdTAwM2VlbmNhcFtpbmZvLVx1MDAzZW51bV9lbmNhcHNdLnByb3RvID1cbiYjNDM7XHRcdFx0XHRwa3QtXHUwMDNlc2tiLVx1MDAzZXZsYW5fcHJvdG87XG4mIzQzO1x0XHRcdGluZm8tXHUwMDNlbnVtX2VuY2FwcyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0ICAgICBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyAqaW5mbyxcbiBcdFx0XHQgICAgIHVuc2lnbmVkIGNoYXIgKmhhLCBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXG5AQCAtMTAzLDEzICYjNDM7MTcxLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzdGFjay1cdTAwM2VudW1fcGF0aHM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHBhdGggPSBcdTAwMjZzdGFjay1cdTAwM2VwYXRoW2ldO1xuJiM0MztcdFx0aW5mby1cdTAwM2VpbmRldiA9IHBhdGgtXHUwMDNlZGV2O1xuIFx0XHRzd2l0Y2ggKHBhdGgtXHUwMDNldHlwZSkge1xuIFx0XHRjYXNlIERFVl9QQVRIX0VUSEVSTkVUOlxuIFx0XHRjYXNlIERFVl9QQVRIX0RTQTpcbiBcdFx0Y2FzZSBERVZfUEFUSF9WTEFOOlxuIFx0XHRjYXNlIERFVl9QQVRIX1BQUE9FOlxuIFx0XHRjYXNlIERFVl9QQVRIX1RVTjpcbi1cdFx0XHRpbmZvLVx1MDAzZWluZGV2ID0gcGF0aC1cdTAwM2VkZXY7XG4gXHRcdFx0aWYgKGlzX3plcm9fZXRoZXJfYWRkcihpbmZvLVx1MDAzZWhfc291cmNlKSlcbiBcdFx0XHRcdG1lbWNweShpbmZvLVx1MDAzZWhfc291cmNlLCBwYXRoLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xuIFxuQEAgLTE3NSw2ICYjNDM7MjQzLDEwIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0fVxuIFx0XHRcdGluZm8tXHUwMDNleG1pdF90eXBlID0gRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBERVZfUEFUSF9NVEtfV0RNQTpcbiYjNDM7XHRcdFx0aWYgKGlzX3plcm9fZXRoZXJfYWRkcihpbmZvLVx1MDAzZWhfc291cmNlKSlcbiYjNDM7XHRcdFx0XHRtZW1jcHkoaW5mby1cdTAwM2VoX3NvdXJjZSwgcGF0aC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0cmV0dXJuIC0xO1xuIFx0XHR9XG5AQCAtMjQ0LDYgJiM0MzszMTYsNyBAQCBzdGF0aWMgaW50IG5mdF9mbG93X3R1bm5lbF91cGRhdGVfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gfVxuIFxuIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4mIzQzO1x0XHRcdFx0Ym9vbCBpc19icmlkZ2luZyxcbiBcdFx0XHRcdHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdFx0XHRcdGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG5AQCAtMjUxLDEyICYjNDM7MzI0LDM4IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gcm91dGUtXHUwMDNldHVwbGVbZGlyXS5kc3Q7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHN0YWNrO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHtcbiYjNDM7XHRcdC5kZXZcdD0gZHN0LVx1MDAzZWRldixcbiYjNDM7XHR9O1xuIFx0c3RydWN0IG5mdF9mb3J3YXJkX2luZm8gaW5mbyA9IHt9O1xuJiM0MztcdGVudW0gaXBfY29ubnRyYWNrX2luZm8gcGt0X2N0aW5mbztcbiYjNDM7XHRlbnVtIGlwX2Nvbm50cmFja19kaXIgc2tiX2RpcjtcbiYjNDM7XHRzdHJ1Y3QgZXRoaGRyICpldGg7XG4gXHR1bnNpZ25lZCBjaGFyIGhhW0VUSF9BTEVOXTtcbiBcdGludCBpO1xuIFxuLVx0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgocm91dGUsIGRzdCwgY3QsIGRpciwgaGEsIFx1MDAyNnN0YWNrKSBcdTAwM2MgMCB8fFxuLVx0ICAgIG5mdF9kZXZfcGF0aF9pbmZvKFx1MDAyNnN0YWNrLCBcdTAwMjZpbmZvLCBoYSwgXHUwMDI2ZnQtXHUwMDNlZGF0YSkgXHUwMDNjIDApXG4mIzQzO1x0bWVtc2V0KGhhLCAwLCBzaXplb2YoaGEpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX2JyaWRnaW5nKSB7XG4mIzQzO1x0XHRuZl9jdF9nZXQocGt0LVx1MDAzZXNrYiwgXHUwMDI2cGt0X2N0aW5mbyk7XG4mIzQzO1x0XHRldGggPSBldGhfaGRyKHBrdC1cdTAwM2Vza2IpO1xuJiM0MztcdFx0c2tiX2RpciA9IENUSU5GTzJESVIocGt0X2N0aW5mbyk7XG4mIzQzO1x0XHRpZiAoc2tiX2RpciAhPSBkaXIpIHtcbiYjNDM7XHRcdFx0bWVtY3B5KGhhLCBldGgtXHUwMDNlaF9zb3VyY2UsIEVUSF9BTEVOKTtcbiYjNDM7XHRcdFx0bWVtY3B5KGluZm8uaF9zb3VyY2UsIGV0aC1cdTAwM2VoX2Rlc3QsIEVUSF9BTEVOKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdG1lbWNweShoYSwgZXRoLVx1MDAzZWhfZGVzdCwgRVRIX0FMRU4pO1xuJiM0MztcdFx0XHRtZW1jcHkoaW5mby5oX3NvdXJjZSwgZXRoLVx1MDAzZWhfc291cmNlLCBFVEhfQUxFTik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRuZnRfYnJfdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgocGt0LCBcdTAwMjZjdHgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoXHUwMDI2Y3R4LCByb3V0ZSwgZHN0LCBjdCwgZGlyLCBoYSwgXHUwMDI2c3RhY2spIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1xuJiM0MztcdG5mdF9maWxsX3ZsYW5fcGFzc3Rocm91Z2hfaW5mbyhwa3QsIFx1MDAyNmluZm8pO1xuJiM0MztcbiYjNDM7XHRpZiAobmZ0X2Rldl9wYXRoX2luZm8oXHUwMDI2c3RhY2ssIFx1MDAyNmluZm8sIGhhLCBcdTAwMjZmdC1cdTAwM2VkYXRhKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRpZiAoIW5mdF9mbG93dGFibGVfZmluZF9kZXYoaW5mby5pbmRldiwgZnQpKVxuQEAgLTI5Miw5ICYjNDM7MzkxLDExIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tXHRcdCAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbi1cdFx0ICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxuJiM0MztzdGF0aWMgaW50IG5mdF9mbG93X3JvdXRlX3JvdXRpbmcoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4mIzQzO1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4mIzQzO1x0XHRcdFx0ICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxuIHtcbiBcdHN0cnVjdCBkc3RfZW50cnkgKnRoaXNfZHN0ID0gc2tiX2RzdChwa3QtXHUwMDNlc2tiKTtcbiBcdHN0cnVjdCBkc3RfZW50cnkgKm90aGVyX2RzdCA9IE5VTEw7XG5AQCAtMzM0LDEyICYjNDM7NDM1LDEyIEBAIGludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0bmZ0X2RlZmF1bHRfZm9yd2FyZF9wYXRoKHJvdXRlLCB0aGlzX2RzdCwgZGlyKTtcbiBcdG5mdF9kZWZhdWx0X2ZvcndhcmRfcGF0aChyb3V0ZSwgb3RoZXJfZHN0LCAhZGlyKTtcbiBcbi1cdGlmIChyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLnhtaXRfdHlwZVx0PT0gRkxPV19PRkZMT0FEX1hNSVRfTkVJR0ggXHUwMDI2XHUwMDI2XG4tXHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCByb3V0ZSwgY3QsIGRpciwgZnQpIFx1MDAzYyAwKVxuJiM0MztcdGlmIChyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCBmYWxzZSwgcm91dGUsIGN0LCBkaXIsIGZ0KSBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfZHN0X3JlbGVhc2U7XG4gXG4gXHRpZiAocm91dGUtXHUwMDNldHVwbGVbIWRpcl0ueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIIFx1MDAyNlx1MDAyNlxuLVx0ICAgIG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgcm91dGUsIGN0LCAhZGlyLCBmdCkgXHUwMDNjIDApXG4mIzQzO1x0ICAgIG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgZmFsc2UsIHJvdXRlLCBjdCwgIWRpciwgZnQpIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9kc3RfcmVsZWFzZTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTM0OSw0ICYjNDM7NDUwLDgyIEBAIGludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0ZHN0X3JlbGVhc2Uocm91dGUtXHUwMDNldHVwbGVbIWRpcl0uZHN0KTtcbiBcdHJldHVybiAtRU5PRU5UO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmcoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbiYjNDM7XHRcdFx0XHQgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc3RfZW50cnkgKmRzdHNbSVBfQ1RfRElSX01BWF0gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2O1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHQvKiBBbGxvY2F0ZSBtaW5pbWFsIGRzdHMgYW5jaG9yZWQgdG8gdGhlIGJyaWRnZSBtYXN0ZXIgZGV2aWNlIHRvIHN1cHBseVxuJiM0MztcdCAqIHhtaXRfdHlwZSBhbmQgTVRVLiBBIGZ1bGwgcm91dGluZyBsb29rdXAgdmlhIG5mX3JvdXRlKCkgaXMgYXZvaWRlZFxuJiM0MztcdCAqIGJlY2F1c2UgaXQgZmFpbHMgZm9yIHByZWZpeGVzIHRoYXQgYXJlIGJyaWRnZWQgYnV0IG5vdCByb3V0ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGJyX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldF9yY3UocGt0LVx1MDAzZXNrYi1cdTAwM2VkZXYpO1xuJiM0MztcdGlmICghYnJfZGV2IHx8ICFuZXRpZl9pc19icmlkZ2VfbWFzdGVyKGJyX2RldikpIHtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUF9DVF9ESVJfTUFYOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3dpdGNoIChuZnRfcGYocGt0KSkge1xuJiM0MztcdFx0Y2FzZSBORlBST1RPX0lQVjQ6IHtcbiYjNDM7XHRcdFx0c3RydWN0IHJ0YWJsZSAqcnQ7XG4mIzQzO1xuJiM0MztcdFx0XHRydCA9IHJ0X2RzdF9hbGxvYyhicl9kZXYsIDAsIFJUTl9VTklDQVNULCB0cnVlKTtcbiYjNDM7XHRcdFx0aWYgKHJ0KVxuJiM0MztcdFx0XHRcdGRzdHNbaV0gPSBcdTAwMjZydC1cdTAwM2Vkc3Q7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Y2FzZSBORlBST1RPX0lQVjY6IHtcbiYjNDM7XHRcdFx0c3RydWN0IHJ0Nl9pbmZvICpydDtcbiYjNDM7XG4mIzQzO1x0XHRcdHJ0ID0gaXA2X2RzdF9hbGxvYyhuZnRfbmV0KHBrdCksIGJyX2RldiwgMCk7XG4mIzQzO1x0XHRcdGlmIChydClcbiYjNDM7XHRcdFx0XHRkc3RzW2ldID0gXHUwMDI2cnQtXHUwMDNlZHN0O1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmICghZHN0c1tkaXJdIHx8ICFkc3RzWyFkaXJdKSB7XG4mIzQzO1x0XHRkc3RfcmVsZWFzZShkc3RzW2Rpcl0pO1xuJiM0MztcdFx0ZHN0X3JlbGVhc2UoZHN0c1shZGlyXSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5mdF9kZWZhdWx0X2ZvcndhcmRfcGF0aChyb3V0ZSwgZHN0c1tkaXJdLCBkaXIpO1xuJiM0MztcdG5mdF9kZWZhdWx0X2ZvcndhcmRfcGF0aChyb3V0ZSwgZHN0c1shZGlyXSwgIWRpcik7XG4mIzQzO1x0LyogRHJvcCBhbGxvY2F0aW9uIHJlZmVyZW5jZXM7IHJvdXRlLVx1MDAzZXR1cGxlWypdLmRzdCBob2xkcyB0aGUgY2xvbmVzLiAqL1xuJiM0MztcdGRzdF9yZWxlYXNlKGRzdHNbZGlyXSk7XG4mIzQzO1x0ZHN0X3JlbGVhc2UoZHN0c1shZGlyXSk7XG4mIzQzO1xuJiM0MztcdGlmIChyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcm91dGUtXHUwMDNldHVwbGVbIWRpcl0ueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIKSB7XG4mIzQzO1x0XHRpZiAobmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCB0cnVlLCByb3V0ZSwgY3QsIGRpciwgZnQpIHx8XG4mIzQzO1x0XHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCB0cnVlLCByb3V0ZSwgY3QsICFkaXIsIGZ0KSkge1xuJiM0MztcdFx0XHRkc3RfcmVsZWFzZShyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLmRzdCk7XG4mIzQzO1x0XHRcdGRzdF9yZWxlYXNlKHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmRzdCk7XG4mIzQzO1x0XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuJiM0MztcdFx0ICAgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuJiM0MztcdFx0ICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKG5mdF9mbG93X29mZmxvYWRfaXNfYnJpZGdpbmcocGt0LVx1MDAzZXNrYikpXG4mIzQzO1x0XHRyZXR1cm4gbmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmcocGt0LCBjdCwgcm91dGUsIGRpciwgZnQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbmZ0X2Zsb3dfcm91dGVfcm91dGluZyhwa3QsIGN0LCByb3V0ZSwgZGlyLCBmdCk7XG4mIzQzO31cbiBFWFBPUlRfU1lNQk9MX0dQTChuZnRfZmxvd19yb3V0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTI6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdSYjMzQ7LAogICAgJiMzNDticl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1JiMzNDssCiAgICAmIzM0O2JyX3ZsYW5faXNfZW5hYmxlZF9yY3UmIzM0OywKICAgICYjMzQ7X19kZXZfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfcm91dGUmIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmcmIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfb2ZmbG9hZF9pc19icmlkZ2luZyYjMzQ7LAogICAgJiMzNDtuZnRfYnJfdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7bmZ0X2ZpbGxfdmxhbl9wYXNzdGhyb3VnaF9pbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZmxvdyBvZmZsb2FkIG9mIGJyaWRnZWQgdHJhZmZpYy4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIGNoZWNrIGJyaWRnZSBGREIgZW50cmllcyBhbmQgVkxBTiBpbmZvcm1hdGlvbiBmb3IgZmxvdyBvZmZsb2FkLCBhbmQgbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIHBhdGggdG8gaGFuZGxlIGJyaWRnZWQgdHJhZmZpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDUyOTVkNjJlZWNmMjg5ODZlMThhYWQ3NzljZjVkY2YzZDA1OTZhZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDI5IDEyOjU2OjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaCBiL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmgKaW5kZXggNzU2NzNiOGJmZmNiOGEuLmMxY2FlNTQ3NDljNTE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX2JyaWRnZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmgKQEAgLTE0OCw2ICYjNDM7MTQ4LDkgQEAgaW50IGJyX3ZsYW5fZ2V0X2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCwKIAkJICAgICBzdHJ1Y3QgYnJpZGdlX3ZsYW5faW5mbyAqcF92aW5mbyk7CiBpbnQgYnJfdmxhbl9nZXRfaW5mb19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCwKIAkJCSBzdHJ1Y3QgYnJpZGdlX3ZsYW5faW5mbyAqcF92aW5mbyk7CiYjNDM7dTE2IGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiAqcHJvdG8pOwomIzQzO2Jvb2wgYnJfdmxhbl9pc19lbmFibGVkX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGJvb2wgYnJfbXN0X2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgYnJfbXN0X2dldF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBtc3RpLCB1bnNpZ25lZCBsb25nICp2aWRzKTsKIGludCBicl9tc3RfZ2V0X3N0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBtc3RpLCB1OCAqc3RhdGUpOwpAQCAtMTg0LDYgJiM0MzsxODcsMTcgQEAgc3RhdGljIGlubGluZSBpbnQgYnJfdmxhbl9nZXRfaW5mb19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCwKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdTE2IGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJCQljb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkJCV9fYmUxNiAqcHJvdG8pCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIGJyX3ZsYW5faXNfZW5hYmxlZF9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiBzdGF0aWMgaW5saW5lIGJvb2wgYnJfbXN0X2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gZmFsc2U7CkBAIC0yMDksNiAmIzQzOzIyMyw4IEBAIHZvaWQgYnJfZmRiX2NsZWFyX29mZmxvYWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCk7CiBib29sIGJyX3BvcnRfZmxhZ19pc19zZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFnKTsKIHU4IGJyX3BvcnRfZ2V0X3N0cF9zdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGNsb2NrX3QgYnJfZ2V0X2FnZWluZ190aW1lKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpicl9kZXYpOwomIzQzO2Jvb2wgYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHU4ICphZGRyKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICoKIGJyX2ZkYl9maW5kX3BvcnQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldiwKQEAgLTIzNyw2ICYjNDM7MjUzLDEzIEBAIHN0YXRpYyBpbmxpbmUgY2xvY2tfdCBicl9nZXRfYWdlaW5nX3RpbWUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldikKIHsKIAlyZXR1cm4gMDsKIH0KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJCSAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCQkJICAgY29uc3QgdTggKmFkZHIpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggOTk4MWQ2MzdmOGI1NDYuLmMxZDBiODk3ZGU5NTM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTM0MjIsNiAmIzQzOzM0MjIsOCBAQCBpbnQgZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsCiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTsKJiM0MztpbnQgX19kZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwgY29uc3QgdTggKmRhZGRyLAomIzQzOwkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayk7CiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7CiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpOwogc3RydWN0IG5ldF9kZXZpY2UgKl9fZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2ZkYi5jIGIvbmV0L2JyaWRnZS9icl9mZGIuYwppbmRleCBlNDU3MGJiZWQ4NTQ0NS4uMzE2MWMyNjg5ZjZhNmYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfZmRiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9mZGIuYwpAQCAtMjY3LDYgJiM0MzsyNjcsMzggQEAgc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpicl9mZGJfZmluZF9yY3Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogCXJldHVybiBmZGJfZmluZF9yY3UoJmFtcDtici0mZ3Q7ZmRiX2hhc2hfdGJsLCBhZGRyLCB2aWQpOwogfQogCiYjNDM7LyoqCiYjNDM7ICogYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdSAtIGNoZWNrIGlmIGEgTUFDIGNhbiBiZSBmb3J3YXJkZWQgYnkgdGhlIGJyaWRnZQomIzQzOyAqIEBkZXY6IGJyaWRnZSBwb3J0IG5ldHdvcmsgZGV2aWNlCiYjNDM7ICogQHNrYjogcGFja2V0IGJ1ZmZlciAodXNlZCB0byBkZXRlcm1pbmUgVkxBTiBpZCkKJiM0MzsgKiBAYWRkcjogZGVzdGluYXRpb24gTUFDIGFkZHJlc3MKJiM0MzsgKgomIzQzOyAqIFJlc29sdmVzIHRoZSBWTEFOIGlkIGZvciBAc2tiIG9uIEBkZXYgKHNrYiBWTEFOIHRhZyB3aGVuIHByZXNlbnQsIFBWSUQKJiM0MzsgKiB3aGVuIFZMQU4gZmlsdGVyaW5nIGlzIGVuYWJsZWQsIDAgb3RoZXJ3aXNlKSB0aGVuIGNoZWNrcyB3aGV0aGVyIHRoZSBicmlkZ2UKJiM0MzsgKiBGREIgY29udGFpbnMgYSBmb3J3YXJkaW5nIGVudHJ5IChkc3QgIT0gTlVMTCwgbm90IGEgbG9jYWwvc2VsZiBlbnRyeSkgZm9yCiYjNDM7ICogQGFkZHIgYW5kIHRoYXQgVkxBTiBpZC4gU2luZ2xlIGJyX3BvcnRfZ2V0X3JjdSgpIGxvb2t1cC4KJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB1bmRlciBSQ1UgcmVhZCBsb2NrLgomIzQzOyAqLwomIzQzO2Jvb2wgYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHU4ICphZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IGJyX3BvcnRfZ2V0X3JjdShkZXYpOwomIzQzOwlzdHJ1Y3QgbmV0X2JyaWRnZV9mZGJfZW50cnkgKmZkYjsKJiM0MzsJdTE2IHZpZCA9IDA7CiYjNDM7CiYjNDM7CWlmICghcG9ydCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGJyX29wdF9nZXQocG9ydC0mZ3Q7YnIsIEJST1BUX1ZMQU5fRU5BQkxFRCkpIHsKJiM0MzsJCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKQomIzQzOwkJCXZpZCA9IHNrYl92bGFuX3RhZ19nZXRfaWQoc2tiKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlicl92bGFuX2dldF9wdmlkX3JjdShkZXYsICZhbXA7dmlkKTsKJiM0MzsJfQomIzQzOwlmZGIgPSBicl9mZGJfZmluZF9yY3UocG9ydC0mZ3Q7YnIsIGFkZHIsIHZpZCk7CiYjNDM7CXJldHVybiBmZGIgJmFtcDsmYW1wOyBmZGItJmd0O2RzdDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdSk7CiYjNDM7CiAvKiBXaGVuIGEgc3RhdGljIEZEQiBlbnRyeSBpcyBhZGRlZCwgdGhlIG1hYyBhZGRyZXNzIGZyb20gdGhlIGVudHJ5IGlzCiAgKiBhZGRlZCB0byB0aGUgYnJpZGdlIHByaXZhdGUgSFcgYWRkcmVzcyBsaXN0IGFuZCBhbGwgcmVxdWlyZWQgcG9ydHMKICAqIGFyZSB0aGVuIHVwZGF0ZWQgd2l0aCB0aGUgbmV3IGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl92bGFuLmMgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uYwppbmRleCA1NTYwYWZjYWFjYTMyNy4uMGIyOTYzNjJhZGY3YzkgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfdmxhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfdmxhbi5jCkBAIC0xNTU5LDYgJiM0MzsxNTU5LDUxIEBAIGludCBicl92bGFuX2dldF9pbmZvX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkLAogfQogRVhQT1JUX1NZTUJPTF9HUEwoYnJfdmxhbl9nZXRfaW5mb19yY3UpOwogCiYjNDM7LyoqCiYjNDM7ICogYnJfdmxhbl9nZXRfb2ZmbG9hZF9pbmZvX3JjdSAtIGdldCBWTEFOIGlkIGFuZCBwcm90b2NvbCBmb3IgYnJpZGdlIGZsb3cgb2ZmbG9hZAomIzQzOyAqIEBkZXY6IGJyaWRnZSBwb3J0IG5ldHdvcmsgZGV2aWNlCiYjNDM7ICogQHNrYjogcGFja2V0IGJ1ZmZlcgomIzQzOyAqIEBwcm90bzogb3V0cHV0IGZvciB0aGUgYnJpZGdlIFZMQU4gcHJvdG9jb2wgKHNldCBvbmx5IHdoZW4gcmV0dXJuIHZhbHVlICE9IDApCiYjNDM7ICoKJiM0MzsgKiBXaGVuIFZMQU4gZmlsdGVyaW5nIGlzIGVuYWJsZWQsIHJlc29sdmVzIHRoZSBWTEFOIGlkIGZvciBmbG93IG9mZmxvYWQgKHNrYgomIzQzOyAqIFZMQU4gdGFnIGlkIGlmIHByZXNlbnQsIFBWSUQgb3RoZXJ3aXNlKSBhbmQgd3JpdGVzIHRoZSBicmlkZ2UgVkxBTiBwcm90b2NvbAomIzQzOyAqIHRvIEBwcm90by4gUmV0dXJucyAwIHdoZW4gZmlsdGVyaW5nIGlzIG9mZiBvciBAZGV2IGlzIG5vdCBhIGJyaWRnZSBwb3J0LgomIzQzOyAqIFNpbmdsZSBicl9wb3J0X2dldF9yY3UoKSBsb29rdXAuIE11c3QgYmUgY2FsbGVkIHVuZGVyIFJDVSByZWFkIGxvY2suCiYjNDM7ICovCiYjNDM7dTE2IGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiAqcHJvdG8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0ID0gYnJfcG9ydF9nZXRfcmN1KGRldik7CiYjNDM7CXUxNiB2aWQgPSAwOwomIzQzOwomIzQzOwlpZiAoIXBvcnQgfHwgIWJyX29wdF9nZXQocG9ydC0mZ3Q7YnIsIEJST1BUX1ZMQU5fRU5BQkxFRCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpCiYjNDM7CQl2aWQgPSBza2Jfdmxhbl90YWdfZ2V0X2lkKHNrYik7CiYjNDM7CWVsc2UKJiM0MzsJCWJyX3ZsYW5fZ2V0X3B2aWRfcmN1KGRldiwgJmFtcDt2aWQpOwomIzQzOwlpZiAodmlkKQomIzQzOwkJKnByb3RvID0gcG9ydC0mZ3Q7YnItJmd0O3ZsYW5fcHJvdG87CiYjNDM7CXJldHVybiB2aWQ7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3UpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJyX3ZsYW5faXNfZW5hYmxlZF9yY3UgLSBjaGVjayBpZiBWTEFOIGZpbHRlcmluZyBpcyBhY3RpdmUgb24gYSBwb3J0JiMzOTtzIGJyaWRnZQomIzQzOyAqIEBkZXY6IGJyaWRnZSBwb3J0IG5ldHdvcmsgZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIHRydWUgaWYgVkxBTiBmaWx0ZXJpbmcgaXMgZW5hYmxlZCBvbiB0aGUgYnJpZGdlIEBkZXYgYmVsb25ncyB0by4KJiM0MzsgKiBSZXR1cm5zIGZhbHNlIHdoZW4gQGRldiBpcyBub3QgYSBicmlkZ2UgcG9ydCBvciBmaWx0ZXJpbmcgaXMgb2ZmLgomIzQzOyAqIE11c3QgYmUgY2FsbGVkIHVuZGVyIFJDVSByZWFkIGxvY2suCiYjNDM7ICovCiYjNDM7Ym9vbCBicl92bGFuX2lzX2VuYWJsZWRfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0ID0gYnJfcG9ydF9nZXRfcmN1KGRldik7CiYjNDM7CiYjNDM7CXJldHVybiBwb3J0ICZhbXA7JmFtcDsgYnJfb3B0X2dldChwb3J0LSZndDticiwgQlJPUFRfVkxBTl9FTkFCTEVEKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoYnJfdmxhbl9pc19lbmFibGVkX3JjdSk7CiYjNDM7CiBzdGF0aWMgaW50IGJyX3ZsYW5faXNfYmluZF92bGFuX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXJldHVybiBpc192bGFuX2RldihkZXYpICZhbXA7JmFtcDsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggNGIzZDVjZmRmNmUwMGYuLjYyZjFkMGI2NGM3NmRlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtNzUwLDQ0ICYjNDM7NzUwLDUyIEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpkZXZfZndkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spCiAJcmV0dXJuICZhbXA7c3RhY2stJmd0O3BhdGhba107CiB9CiAKLWludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLAotCQkJICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaykKJiM0MztpbnQgX19kZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwgY29uc3QgdTggKmRhZGRyLAomIzQzOwkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaykKIHsKIAljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbGFzdF9kZXY7Ci0Jc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0gewotCQkuZGV2CT0gZGV2LAotCX07CiAJc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDsKIAlpbnQgcmV0ID0gMDsKIAotCW1lbWNweShjdHguZGFkZHIsIGRhZGRyLCBzaXplb2YoY3R4LmRhZGRyKSk7CiYjNDM7CW1lbWNweShjdHgtJmd0O2RhZGRyLCBkYWRkciwgc2l6ZW9mKGN0eC0mZ3Q7ZGFkZHIpKTsKIAlzdGFjay0mZ3Q7bnVtX3BhdGhzID0gMDsKLQl3aGlsZSAoY3R4LmRldiAmYW1wOyZhbXA7IGN0eC5kZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19maWxsX2ZvcndhcmRfcGF0aCkgewotCQlsYXN0X2RldiA9IGN0eC5kZXY7CiYjNDM7CXdoaWxlIChjdHgtJmd0O2RldiAmYW1wOyZhbXA7IGN0eC0mZ3Q7ZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fZmlsbF9mb3J3YXJkX3BhdGgpIHsKJiM0MzsJCWxhc3RfZGV2ID0gY3R4LSZndDtkZXY7CiAJCXBhdGggPSBkZXZfZndkX3BhdGgoc3RhY2spOwogCQlpZiAoIXBhdGgpCiAJCQlyZXR1cm4gLTE7CiAKIAkJbWVtc2V0KHBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoKSk7Ci0JCXJldCA9IGN0eC5kZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19maWxsX2ZvcndhcmRfcGF0aCgmYW1wO2N0eCwgcGF0aCk7CiYjNDM7CQlyZXQgPSBjdHgtJmd0O2Rldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX2ZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCk7CiAJCWlmIChyZXQgJmx0OyAwKQogCQkJcmV0dXJuIC0xOwogCi0JCWlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LmRldikpCiYjNDM7CQlpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC0mZ3Q7ZGV2KSkKIAkJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAoIWN0eC5kZXYpCiYjNDM7CWlmICghY3R4LSZndDtkZXYpCiAJCXJldHVybiByZXQ7CiAKIAlwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTsKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtMTsKIAlwYXRoLSZndDt0eXBlID0gREVWX1BBVEhfRVRIRVJORVQ7Ci0JcGF0aC0mZ3Q7ZGV2ID0gY3R4LmRldjsKJiM0MzsJcGF0aC0mZ3Q7ZGV2ID0gY3R4LSZndDtkZXY7CiAKIAlyZXR1cm4gcmV0OwogfQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKF9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTsKJiM0MzsKJiM0MztpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkciwKJiM0MzsJCQkgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0gewomIzQzOwkJLmRldgk9IGRldiwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKCZhbXA7Y3R4LCBkYWRkciwgc3RhY2spOwomIzQzO30KIEVYUE9SVF9TWU1CT0xfR1BMKGRldl9maWxsX2ZvcndhcmRfcGF0aCk7CiAKIC8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2soKSwgYXMgd2UgZG9udCB0YWtlIGEgcmVmZXJlbmNlICovCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYwppbmRleCA5OGMwM2I0ODdmNTIxMS4uZDE1YzQyNWM4OGM0YWEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYwpAQCAtMTUsNiAmIzQzOzE1LDExIEBACiAjaW5jbHVkZSAmbHQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pZl9icmlkZ2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfZXRoZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfdmxhbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvcm91dGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2lwNl9yb3V0ZS5oJmd0OwogCiBzdGF0aWMgZW51bSBmbG93X29mZmxvYWRfeG1pdF90eXBlIG5mdF94bWl0X3R5cGUoc3RydWN0IGRzdF9lbnRyeSAqZHN0KQogewpAQCAtNDIsNyAmIzQzOzQ3LDI1IEBAIHN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwKJiM0MztzdGF0aWMgYm9vbCBuZnRfZmxvd19vZmZsb2FkX2lzX2JyaWRnaW5nKHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlib29sIHJldDsKJiM0MzsKJiM0MzsJaWYgKCFuZXRpZl9pc19icmlkZ2VfcG9ydChza2ItJmd0O2RldikpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmICghc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXJldCA9IGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3Uoc2tiLSZndDtkZXYsIHNrYiwKJiM0MzsJCQkJCSAgICAgIGV0aF9oZHIoc2tiKS0mZ3Q7aF9kZXN0KTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZSwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwKIAkJCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIHU4ICpoYSwKQEAgLTU4LDYgJiM0Mzs4MSwxMiBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLAogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJLyogQnJpZGdpbmcgZmFzdHBhdGggY29waWVzIEV0aGVybmV0IGFkZHJlc3NlcyBpbnRvIGhhOyBkbyBub3QgcmVwbGFjZQomIzQzOwkgKiB0aGVtIHZpYSBuZWlnaGJvdXIgbG9va3VwIG9uIHRoZSByb3V0ZWQgZGVzdGluYXRpb24gZGV2aWNlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFpc196ZXJvX2V0aGVyX2FkZHIoaGEpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJbiA9IGRzdF9uZWlnaF9sb29rdXAoZHN0X2NhY2hlLCBkYWRkcik7CiAJaWYgKCFuKQogCQlyZXR1cm4gLTE7CkBAIC03Miw3ICYjNDM7MTAxLDIzIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsCiAJCXJldHVybiAtMTsKIAogb3V0OgotCXJldHVybiBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBoYSwgc3RhY2spOwomIzQzOwlyZXR1cm4gX19kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBoYSwgc3RhY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBuZnRfYnJfdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiYjNDM7CQkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJX19iZTE2IHByb3RvID0gMDsKJiM0MzsJdTE2IHZsYW5faWQ7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJdmxhbl9pZCA9IGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3UocGt0LSZndDtza2ItJmd0O2RldiwgcGt0LSZndDtza2IsICZhbXA7cHJvdG8pOwomIzQzOwlpZiAodmxhbl9pZCkgewomIzQzOwkJY3R4LSZndDtudW1fdmxhbnMgPSAxOwomIzQzOwkJY3R4LSZndDt2bGFuWzBdLmlkID0gdmxhbl9pZDsKJiM0MzsJCWN0eC0mZ3Q7dmxhblswXS5wcm90byA9IHByb3RvOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogCiBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7CkBAIC05Miw2ICYjNDM7MTM3LDI5IEBAIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHsKIAllbnVtIGZsb3dfb2ZmbG9hZF94bWl0X3R5cGUgeG1pdF90eXBlOwogfTsKIAomIzQzO3N0YXRpYyB2b2lkIG5mdF9maWxsX3ZsYW5fcGFzc3Rocm91Z2hfaW5mbyhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwKJiM0MzsJCQkJCSAgIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJaWYgKCFza2Jfdmxhbl90YWdfcHJlc2VudChwa3QtJmd0O3NrYikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJLyogd2hlbiBicmlkZ2UgVkxBTiBmaWx0ZXJpbmcgaXMgZW5hYmxlZCwgdGhlIGJyaWRnZSBoYW5kbGVzIHRoZSB0YWcgKi8KJiM0MzsJaWYgKG5ldGlmX2lzX2JyaWRnZV9wb3J0KHBrdC0mZ3Q7c2tiLSZndDtkZXYpICZhbXA7JmFtcDsKJiM0MzsJICAgICFicl92bGFuX2lzX2VuYWJsZWRfcmN1KHBrdC0mZ3Q7c2tiLSZndDtkZXYpKSB7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7bnVtX2VuY2FwcyAmZ3Q7PSBORl9GTE9XX1RBQkxFX0VOQ0FQX01BWCkgewomIzQzOwkJCWluZm8tJmd0O2luZGV2ID0gTlVMTDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJaW5mby0mZ3Q7ZW5jYXBbaW5mby0mZ3Q7bnVtX2VuY2Fwc10uaWQgPQomIzQzOwkJCQlza2Jfdmxhbl90YWdfZ2V0X2lkKHBrdC0mZ3Q7c2tiKTsKJiM0MzsJCQlpbmZvLSZndDtlbmNhcFtpbmZvLSZndDtudW1fZW5jYXBzXS5wcm90byA9CiYjNDM7CQkJCXBrdC0mZ3Q7c2tiLSZndDt2bGFuX3Byb3RvOwomIzQzOwkJCWluZm8tJmd0O251bV9lbmNhcHMmIzQzOyYjNDM7OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssCiAJCQkgICAgIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvICppbmZvLAogCQkJICAgICB1bnNpZ25lZCBjaGFyICpoYSwgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKQpAQCAtMTAzLDEzICYjNDM7MTcxLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssCiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgc3RhY2stJmd0O251bV9wYXRoczsgaSYjNDM7JiM0MzspIHsKIAkJcGF0aCA9ICZhbXA7c3RhY2stJmd0O3BhdGhbaV07CiYjNDM7CQlpbmZvLSZndDtpbmRldiA9IHBhdGgtJmd0O2RldjsKIAkJc3dpdGNoIChwYXRoLSZndDt0eXBlKSB7CiAJCWNhc2UgREVWX1BBVEhfRVRIRVJORVQ6CiAJCWNhc2UgREVWX1BBVEhfRFNBOgogCQljYXNlIERFVl9QQVRIX1ZMQU46CiAJCWNhc2UgREVWX1BBVEhfUFBQT0U6CiAJCWNhc2UgREVWX1BBVEhfVFVOOgotCQkJaW5mby0mZ3Q7aW5kZXYgPSBwYXRoLSZndDtkZXY7CiAJCQlpZiAoaXNfemVyb19ldGhlcl9hZGRyKGluZm8tJmd0O2hfc291cmNlKSkKIAkJCQltZW1jcHkoaW5mby0mZ3Q7aF9zb3VyY2UsIHBhdGgtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIApAQCAtMTc1LDYgJiM0MzsyNDMsMTAgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaywKIAkJCX0KIAkJCWluZm8tJmd0O3htaXRfdHlwZSA9IEZMT1dfT0ZGTE9BRF9YTUlUX0RJUkVDVDsKIAkJCWJyZWFrOwomIzQzOwkJY2FzZSBERVZfUEFUSF9NVEtfV0RNQToKJiM0MzsJCQlpZiAoaXNfemVyb19ldGhlcl9hZGRyKGluZm8tJmd0O2hfc291cmNlKSkKJiM0MzsJCQkJbWVtY3B5KGluZm8tJmd0O2hfc291cmNlLCBwYXRoLSZndDtkZXYtJmd0O2Rldl9hZGRyLCBFVEhfQUxFTik7CiYjNDM7CQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLTE7CiAJCX0KQEAgLTI0NCw2ICYjNDM7MzE2LDcgQEAgc3RhdGljIGludCBuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAogfQogCiBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAomIzQzOwkJCQlib29sIGlzX2JyaWRnaW5nLAogCQkJCXN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwKIAkJCQljb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCQkJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKQEAgLTI1MSwxMiAmIzQzOzMyNCwzOCBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAogewogCWNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHJvdXRlLSZndDt0dXBsZVtkaXJdLmRzdDsKIAlzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHN0YWNrOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7CiYjNDM7CQkuZGV2CT0gZHN0LSZndDtkZXYsCiYjNDM7CX07CiAJc3RydWN0IG5mdF9mb3J3YXJkX2luZm8gaW5mbyA9IHt9OwomIzQzOwllbnVtIGlwX2Nvbm50cmFja19pbmZvIHBrdF9jdGluZm87CiYjNDM7CWVudW0gaXBfY29ubnRyYWNrX2RpciBza2JfZGlyOwomIzQzOwlzdHJ1Y3QgZXRoaGRyICpldGg7CiAJdW5zaWduZWQgY2hhciBoYVtFVEhfQUxFTl07CiAJaW50IGk7CiAKLQlpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChyb3V0ZSwgZHN0LCBjdCwgZGlyLCBoYSwgJmFtcDtzdGFjaykgJmx0OyAwIHx8Ci0JICAgIG5mdF9kZXZfcGF0aF9pbmZvKCZhbXA7c3RhY2ssICZhbXA7aW5mbywgaGEsICZhbXA7ZnQtJmd0O2RhdGEpICZsdDsgMCkKJiM0MzsJbWVtc2V0KGhhLCAwLCBzaXplb2YoaGEpKTsKJiM0MzsKJiM0MzsJaWYgKGlzX2JyaWRnaW5nKSB7CiYjNDM7CQluZl9jdF9nZXQocGt0LSZndDtza2IsICZhbXA7cGt0X2N0aW5mbyk7CiYjNDM7CQlldGggPSBldGhfaGRyKHBrdC0mZ3Q7c2tiKTsKJiM0MzsJCXNrYl9kaXIgPSBDVElORk8yRElSKHBrdF9jdGluZm8pOwomIzQzOwkJaWYgKHNrYl9kaXIgIT0gZGlyKSB7CiYjNDM7CQkJbWVtY3B5KGhhLCBldGgtJmd0O2hfc291cmNlLCBFVEhfQUxFTik7CiYjNDM7CQkJbWVtY3B5KGluZm8uaF9zb3VyY2UsIGV0aC0mZ3Q7aF9kZXN0LCBFVEhfQUxFTik7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCW1lbWNweShoYSwgZXRoLSZndDtoX2Rlc3QsIEVUSF9BTEVOKTsKJiM0MzsJCQltZW1jcHkoaW5mby5oX3NvdXJjZSwgZXRoLSZndDtoX3NvdXJjZSwgRVRIX0FMRU4pOwomIzQzOwkJfQomIzQzOwkJbmZ0X2JyX3ZsYW5fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHBrdCwgJmFtcDtjdHgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKCZhbXA7Y3R4LCByb3V0ZSwgZHN0LCBjdCwgZGlyLCBoYSwgJmFtcDtzdGFjaykgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiYjNDM7CW5mdF9maWxsX3ZsYW5fcGFzc3Rocm91Z2hfaW5mbyhwa3QsICZhbXA7aW5mbyk7CiYjNDM7CiYjNDM7CWlmIChuZnRfZGV2X3BhdGhfaW5mbygmYW1wO3N0YWNrLCAmYW1wO2luZm8sIGhhLCAmYW1wO2Z0LSZndDtkYXRhKSAmbHQ7IDApCiAJCXJldHVybiAtRU5PRU5UOwogCiAJaWYgKCFuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGluZm8uaW5kZXYsIGZ0KSkKQEAgLTI5Miw5ICYjNDM7MzkxLDExIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiAJcmV0dXJuIDA7CiB9CiAKLWludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAotCQkgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsCi0JCSAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdCkKJiM0MztzdGF0aWMgaW50IG5mdF9mbG93X3JvdXRlX3JvdXRpbmcoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiYjNDM7CQkJCSAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAomIzQzOwkJCQkgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwKJiM0MzsJCQkJICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLAomIzQzOwkJCQkgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdCkKIHsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICp0aGlzX2RzdCA9IHNrYl9kc3QocGt0LSZndDtza2IpOwogCXN0cnVjdCBkc3RfZW50cnkgKm90aGVyX2RzdCA9IE5VTEw7CkBAIC0zMzQsMTIgJiM0Mzs0MzUsMTIgQEAgaW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJbmZ0X2RlZmF1bHRfZm9yd2FyZF9wYXRoKHJvdXRlLCB0aGlzX2RzdCwgZGlyKTsKIAluZnRfZGVmYXVsdF9mb3J3YXJkX3BhdGgocm91dGUsIG90aGVyX2RzdCwgIWRpcik7CiAKLQlpZiAocm91dGUtJmd0O3R1cGxlW2Rpcl0ueG1pdF90eXBlCT09IEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIICZhbXA7JmFtcDsKLQkgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCByb3V0ZSwgY3QsIGRpciwgZnQpICZsdDsgMCkKJiM0MzsJaWYgKHJvdXRlLSZndDt0dXBsZVtkaXJdLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCAmYW1wOyZhbXA7CiYjNDM7CSAgICBuZnRfZGV2X2ZvcndhcmRfcGF0aChwa3QsIGZhbHNlLCByb3V0ZSwgY3QsIGRpciwgZnQpICZsdDsgMCkKIAkJZ290byBlcnJfZHN0X3JlbGVhc2U7CiAKIAlpZiAocm91dGUtJmd0O3R1cGxlWyFkaXJdLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCAmYW1wOyZhbXA7Ci0JICAgIG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgcm91dGUsIGN0LCAhZGlyLCBmdCkgJmx0OyAwKQomIzQzOwkgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCBmYWxzZSwgcm91dGUsIGN0LCAhZGlyLCBmdCkgJmx0OyAwKQogCQlnb3RvIGVycl9kc3RfcmVsZWFzZTsKIAogCXJldHVybiAwOwpAQCAtMzQ5LDQgJiM0Mzs0NTAsODIgQEAgaW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJZHN0X3JlbGVhc2Uocm91dGUtJmd0O3R1cGxlWyFkaXJdLmRzdCk7CiAJcmV0dXJuIC1FTk9FTlQ7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGludCBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZyhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAomIzQzOwkJCQkgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsCiYjNDM7CQkJCSAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsCiYjNDM7CQkJCSAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc3RfZW50cnkgKmRzdHNbSVBfQ1RfRElSX01BWF0gPSB7fTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldjsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CS8qIEFsbG9jYXRlIG1pbmltYWwgZHN0cyBhbmNob3JlZCB0byB0aGUgYnJpZGdlIG1hc3RlciBkZXZpY2UgdG8gc3VwcGx5CiYjNDM7CSAqIHhtaXRfdHlwZSBhbmQgTVRVLiBBIGZ1bGwgcm91dGluZyBsb29rdXAgdmlhIG5mX3JvdXRlKCkgaXMgYXZvaWRlZAomIzQzOwkgKiBiZWNhdXNlIGl0IGZhaWxzIGZvciBwcmVmaXhlcyB0aGF0IGFyZSBicmlkZ2VkIGJ1dCBub3Qgcm91dGVkLgomIzQzOwkgKi8KJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlicl9kZXYgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXRfcmN1KHBrdC0mZ3Q7c2tiLSZndDtkZXYpOwomIzQzOwlpZiAoIWJyX2RldiB8fCAhbmV0aWZfaXNfYnJpZGdlX21hc3Rlcihicl9kZXYpKSB7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBJUF9DVF9ESVJfTUFYOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3dpdGNoIChuZnRfcGYocGt0KSkgewomIzQzOwkJY2FzZSBORlBST1RPX0lQVjQ6IHsKJiM0MzsJCQlzdHJ1Y3QgcnRhYmxlICpydDsKJiM0MzsKJiM0MzsJCQlydCA9IHJ0X2RzdF9hbGxvYyhicl9kZXYsIDAsIFJUTl9VTklDQVNULCB0cnVlKTsKJiM0MzsJCQlpZiAocnQpCiYjNDM7CQkJCWRzdHNbaV0gPSAmYW1wO3J0LSZndDtkc3Q7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQljYXNlIE5GUFJPVE9fSVBWNjogewomIzQzOwkJCXN0cnVjdCBydDZfaW5mbyAqcnQ7CiYjNDM7CiYjNDM7CQkJcnQgPSBpcDZfZHN0X2FsbG9jKG5mdF9uZXQocGt0KSwgYnJfZGV2LCAwKTsKJiM0MzsJCQlpZiAocnQpCiYjNDM7CQkJCWRzdHNbaV0gPSAmYW1wO3J0LSZndDtkc3Q7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CWlmICghZHN0c1tkaXJdIHx8ICFkc3RzWyFkaXJdKSB7CiYjNDM7CQlkc3RfcmVsZWFzZShkc3RzW2Rpcl0pOwomIzQzOwkJZHN0X3JlbGVhc2UoZHN0c1shZGlyXSk7CiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsJfQomIzQzOwomIzQzOwluZnRfZGVmYXVsdF9mb3J3YXJkX3BhdGgocm91dGUsIGRzdHNbZGlyXSwgZGlyKTsKJiM0MzsJbmZ0X2RlZmF1bHRfZm9yd2FyZF9wYXRoKHJvdXRlLCBkc3RzWyFkaXJdLCAhZGlyKTsKJiM0MzsJLyogRHJvcCBhbGxvY2F0aW9uIHJlZmVyZW5jZXM7IHJvdXRlLSZndDt0dXBsZVsqXS5kc3QgaG9sZHMgdGhlIGNsb25lcy4gKi8KJiM0MzsJZHN0X3JlbGVhc2UoZHN0c1tkaXJdKTsKJiM0MzsJZHN0X3JlbGVhc2UoZHN0c1shZGlyXSk7CiYjNDM7CiYjNDM7CWlmIChyb3V0ZS0mZ3Q7dHVwbGVbZGlyXS54bWl0X3R5cGUgPT0gRkxPV19PRkZMT0FEX1hNSVRfTkVJR0ggJmFtcDsmYW1wOwomIzQzOwkgICAgcm91dGUtJmd0O3R1cGxlWyFkaXJdLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCkgewomIzQzOwkJaWYgKG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgdHJ1ZSwgcm91dGUsIGN0LCBkaXIsIGZ0KSB8fAomIzQzOwkJICAgIG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgdHJ1ZSwgcm91dGUsIGN0LCAhZGlyLCBmdCkpIHsKJiM0MzsJCQlkc3RfcmVsZWFzZShyb3V0ZS0mZ3Q7dHVwbGVbZGlyXS5kc3QpOwomIzQzOwkJCWRzdF9yZWxlYXNlKHJvdXRlLSZndDt0dXBsZVshZGlyXS5kc3QpOwomIzQzOwkJCXJldHVybiAtRU5PRU5UOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwKJiM0MzsJCSAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKJiM0MzsJCSAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdCkKJiM0Mzt7CiYjNDM7CWlmIChuZnRfZmxvd19vZmZsb2FkX2lzX2JyaWRnaW5nKHBrdC0mZ3Q7c2tiKSkKJiM0MzsJCXJldHVybiBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZyhwa3QsIGN0LCByb3V0ZSwgZGlyLCBmdCk7CiYjNDM7CiYjNDM7CXJldHVybiBuZnRfZmxvd19yb3V0ZV9yb3V0aW5nKHBrdCwgY3QsIHJvdXRlLCBkaXIsIGZ0KTsKJiM0Mzt9CiBFWFBPUlRfU1lNQk9MX0dQTChuZnRfZmxvd19yb3V0ZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEyOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NTUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQnJpZGdlZCBUcmFmZmljIEZsb3cgT2ZmbG9hZCBQYXRjaCoqCgpPa2F5LCBzbyB3ZSBoYXZlIHRoaXMgbmV3IHBhdGNoIHRoYXQgc2VlbXMgdG8gaW50cm9kdWNlIGZsb3cgb2ZmbG9hZCBzdXBwb3J0IGZvciBicmlkZ2VkIHRyYWZmaWMsIHdoaWNoIGlzIGEgcHJldHR5IGludGVyZXN0aW5nIGRldmVsb3BtZW50LiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZXMgYXJlIGNvbmNlbnRyYXRlZCBpbiBgbmV0L2JyaWRnZS9icl9mZGIuY2AsIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AsIGBuZXQvY29yZS9kZXYuY2AsIGFuZCBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY2AuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlc2UgbmV3IGZ1bmN0aW9ucyBsaWtlIGBicl9mZGJfaGFzX2ZvcndhcmRpbmdfZW50cnlfcmN1YCwgYGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3VgLCBgYnJfdmxhbl9pc19lbmFibGVkX3JjdWAsIGFuZCBgX19kZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGFyZSBleGFjdGx5IHdoYXQgSSB3b3VsZCBleHBlY3QgdG8gc2VlIGZvciBzb21ldGhpbmcgbGlrZSB0aGlzLiBBbmQgdGhlIG1vZGlmaWNhdGlvbiB0byBgbmZ0X2Zsb3dfcm91dGVgLCBwYXJ0aWN1bGFybHkgdGhlIGFkZGl0aW9uIG9mIGBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZ2AsIHN1Z2dlc3RzIGEgY2xlYXIgaW50ZWdyYXRpb24gd2l0aCB0aGUgTmV0ZmlsdGVyIGZsb3cgdGFibGUgZnJhbWV3b3JrLgoKRnJvbSBhIHF1aWNrIGdsYW5jZSwgdGhpcyBjb2RlIGxvb2tzIGZ1bmN0aW9uYWwgYW5kIHRoZSBsb2dpYyBpcyByZWFjaGFibGUsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBnZXQgdGhpcyBpbnRvIGEgZnV6emluZyByZWdpbWUuIFRoYXQgc2VlbXMgbGlrZSBhIHdvcnRod2hpbGUgdGVzdCBzdHJhdGVneS4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIE9idmlvdXNseSwgYENPTkZJR19ORl9GTE9XX1RBQkxFYCBpcyBnb2luZyB0byBiZSByZXF1aXJlZCwgdGhhdCYjMzk7cyBhIG5vLWJyYWluZXIuIGBDT05GSUdfQlJJREdFYCBpcyBhbm90aGVyIG9idmlvdXMgb25lLiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgaXMgYSBtYXliZSwgYmFzZWQgb24gdGhlIGBicl92bGFuYCBmaWxlcywgc28gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgb25lLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2Agb3Igc2ltaWxhciBmaWxlcyBmb3IgYG5mX2Zsb3dfdGFibGVfcGF0aC5jYCB0byBjb25maXJtLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgcHJldHR5IGNsZWFyIHBpY3R1cmUgb2YgdGhlIG5lY2Vzc2FyeSBlbnZpcm9ubWVudCB0byByZXByb2R1Y2UgYW5kIHZhbGlkYXRlIHRoZSBwYXRjaCYjMzk7cyBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEyOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfdGFibGVfcGF0aC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTQzPW5mX2Zsb3dfdGFibGUtb2Jqc1x0XHQ6PSBuZl9mbG93X3RhYmxlX2NvcmUubyBuZl9mbG93X3RhYmxlX2lwLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ0Olx0XHRcdFx0ICAgbmZfZmxvd190YWJsZV9wYXRoLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ1LVx0XHRcdFx0ICAgbmZfZmxvd190YWJsZV9vZmZsb2FkLm8gbmZfZmxvd190YWJsZV94ZHAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEyOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MzIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipORl9GTE9XX1RBQkxFIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQ09ORklHX05GX0ZMT1dfVEFCTEVgLiBSaWdodCwgdGhhdCYjMzk7cyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3ltYm9sIHRoYXQgZGlyZWN0bHkgY29udHJvbHMgd2hldGhlciB0aGUgYG5mX2Zsb3dfdGFibGVgIG9iamVjdCBmaWxlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiBJdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZGVwZW5kZW5jeSwgbm8gcmVhbCBzdXJwcmlzZXMgdGhlcmUuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCB0aGlzIGlzIGEgY3JpdGljYWwgbW9kdWxlIGZvciBhbnkgc3lzdGVtIHVzaW5nIGNvbm5lY3Rpb24gdHJhY2tpbmcgb3IgTmV0ZmlsdGVyJiMzOTtzIGZsb3cgdGFibGUgaW1wbGVtZW50YXRpb24uIFRoZSBpbXBhY3Qgb2YgdGhpcyBzZXR0aW5nIHdpbGwgZGVwZW5kIG9uIHRoZSByZXN0IG9mIG15IGNvbmZpZ3VyYXRpb24sIG9mIGNvdXJzZSAtIHBhcnRpY3VsYXJseSBob3cgdGhlIGtlcm5lbCBpcyBjb21waWxlZCBhbmQgd2hpY2ggZmVhdHVyZXMgSSBoYXZlIGVuYWJsZWQuIEkgd2FudCB0byBkaXZlIGEgbGl0dGxlIGRlZXBlciwgSSYjMzk7ZCBzYXkgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIGEgaGFyZCBvciBzb2Z0IGRlcGVuZGVuY3kgb24gb3RoZXIgcGFydHMgb2YgdGhlIE5ldGZpbHRlciBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0ZMT1dfVEFCTEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzIxOmNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cdGJvb2wgXCYjMzQ7U3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE2NQoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBCcmlkZ2UgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBxdWlja2x5IHZlcmlmeSB0aGUgY29yZSBicmlkZ2UgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgcHJlc2VuY2UgYW5kIHN0YXR1cyBvZiBib3RoIGBDT05GSUdfQlJJREdFYCBhbmQgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gSSYjMzk7bSBnb2luZyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBgbmV0L2JyaWRnZS9LY29uZmlnYCBmaWxlLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBmaW5kIHRoZXNlIHNldHRpbmdzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIEkmIzM5O20gZXNzZW50aWFsbHkgbG9va2luZyBmb3IgdGhlIGZvdW5kYXRpb25hbCBkZWZpbml0aW9ucyBhbmQgYW55IGFzc29jaWF0ZWQgY29uZGl0aW9uYWwgbG9naWMgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uIEEgcXVpY2sgY2hlY2sgaGVyZSB3aWxsIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGJyaWRnZSBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQgYW5kIGlmIFZMQU4gZmlsdGVyaW5nIGlzIHN1cHBvcnRlZCBhdCB0aGUgY29uZmlndXJhdGlvbiBsZXZlbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlJJREdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTIyMD1jb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXG4tLVxubmV0L0tjb25maWctMjMwLVxubmV0L0tjb25maWc6MjMxOmNvbmZpZyBCUklER0VfTkVURklMVEVSXG5uZXQvS2NvbmZpZy0yMzItXHR0cmlzdGF0ZSBcJiMzNDtCcmlkZ2VkIElQL0FSUCBwYWNrZXRzIGZpbHRlcmluZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy01LVxubmV0L2JyaWRnZS9LY29uZmlnOjY6Y29uZmlnIEJSSURHRVxubmV0L2JyaWRnZS9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDs4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctMzUtXG5uZXQvYnJpZGdlL0tjb25maWc6MzY6Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXG5uZXQvYnJpZGdlL0tjb25maWctMzctXHRib29sIFwmIzM0O0lHTVAvTUxEIHNub29waW5nXCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTQ5LVxubmV0L2JyaWRnZS9LY29uZmlnOjUwOmNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy01MS1cdGJvb2wgXCYjMzQ7VkxBTiBmaWx0ZXJpbmdcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNjMtXG5uZXQvYnJpZGdlL0tjb25maWc6NjQ6Y29uZmlnIEJSSURHRV9NUlBcbm5ldC9icmlkZ2UvS2NvbmZpZy02NS1cdGJvb2wgXCYjMzQ7TVJQIHByb3RvY29sXCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTc1LVxubmV0L2JyaWRnZS9LY29uZmlnOjc2OmNvbmZpZyBCUklER0VfQ0ZNXG5uZXQvYnJpZGdlL0tjb25maWctNzctXHRib29sIFwmIzM0O0NGTSBwcm90b2NvbFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9Mjg9Y29uZmlnIE5GX0NPTk5UUkFDS19CUklER0Vcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTQyLSMgb2xkIHNvY2tvcHQgaW50ZXJmYWNlIGFuZCBldmFsIGxvb3Bcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NDM6Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDQtXHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgRUJUQUJMRVMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNTItXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjUzOm1lbnVjb25maWcgQlJJREdFX05GX0VCVEFCTEVTXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTU0LVx0dHJpc3RhdGUgXCYjMzQ7RXRoZXJuZXQgQnJpZGdlIHRhYmxlcyAoZWJ0YWJsZXMpIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTYyPWlmIEJSSURHRV9ORl9FQlRBQkxFU1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNjYtI1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo2Nzpjb25maWcgQlJJREdFX0VCVF9CUk9VVEVcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNjgtXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IGJyb3V0ZSB0YWJsZSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy03Ny1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6Nzg6Y29uZmlnIEJSSURHRV9FQlRfVF9GSUxURVJcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNzktXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IGZpbHRlciB0YWJsZSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy04Ny1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6ODg6Y29uZmlnIEJSSURHRV9FQlRfVF9OQVRcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctODktXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IG5hdCB0YWJsZSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy05OS0jXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjEwMDpjb25maWcgQlJJREdFX0VCVF84MDJfM1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xMDEtXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IDgwMi4zIGZpbHRlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xMDYtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjEwNzpjb25maWcgQlJJREdFX0VCVF9BTU9OR1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xMDgtXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IGFtb25nIGZpbHRlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xMTUtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjExNjpjb25maWcgQlJJREdFX0VCVF9BUlBcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTE3LVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBBUlAgZmlsdGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEyMy1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTI0OmNvbmZpZyBCUklER0VfRUJUX0lQXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEyNS1cdHRyaXN0YXRlIFwmIzM0O2VidDogSVAgZmlsdGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEzMS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTMyOmNvbmZpZyBCUklER0VfRUJUX0lQNlxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xMzMtXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IElQNiBmaWx0ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTQwLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxNDE6Y29uZmlnIEJSSURHRV9FQlRfTElNSVRcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTQyLVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBsaW1pdCBtYXRjaCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xNTAtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE1MTpjb25maWcgQlJJREdFX0VCVF9NQVJLXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE1Mi1cdHRyaXN0YXRlIFwmIzM0O2VidDogbWFyayBmaWx0ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTYwLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxNjE6Y29uZmlnIEJSSURHRV9FQlRfUEtUVFlQRVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xNjItXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IHBhY2tldCB0eXBlIGZpbHRlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xNzAtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE3MTpjb25maWcgQlJJREdFX0VCVF9TVFBcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTcyLVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBTVFAgZmlsdGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE3OC1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTc5OmNvbmZpZyBCUklER0VfRUJUX1ZMQU5cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTgwLVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiA4MDIuMVEgVkxBTiBmaWx0ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTg4LSNcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTg5OmNvbmZpZyBCUklER0VfRUJUX0FSUFJFUExZXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE5MC1cdHRyaXN0YXRlIFwmIzM0O2VidDogYXJwIHJlcGx5IHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xOTctXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE5ODpjb25maWcgQlJJREdFX0VCVF9ETkFUXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE5OS1cdHRyaXN0YXRlIFwmIzM0O2VidDogZG5hdCB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjA1LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoyMDY6Y29uZmlnIEJSSURHRV9FQlRfTUFSS19UXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTIwNy1cdHRyaXN0YXRlIFwmIzM0O2VidDogbWFyayB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjE1LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoyMTY6Y29uZmlnIEJSSURHRV9FQlRfUkVESVJFQ1Rcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjE3LVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiByZWRpcmVjdCB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjIzLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoyMjQ6Y29uZmlnIEJSSURHRV9FQlRfU05BVFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMjUtXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IHNuYXQgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTIzMy0jXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjIzNDpjb25maWcgQlJJREdFX0VCVF9MT0dcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjM1LVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBsb2cgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjQyLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoyNDM6Y29uZmlnIEJSSURHRV9FQlRfTkZMT0dcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjQ0LVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBuZmxvZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMzkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBuZXcgZnVuY3Rpb25zLCBjb25zaWRlcmluZyB0aGUgY29udGV4dCBvZiBicmlkZ2luZyBhbmQgVkxBTnM6CgoqKk5ldyBCcmlkZ2UgRkRCIGFuZCBWTEFOIFJDVSBIZWxwZXJzKioKCkFscmlnaHQsIHNvIEkgc2VlIHRoZXNlIG5ldyBmdW5jdGlvbnMgcG9wcGluZyB1cDogYGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3VgLCBgYnJfdmxhbl9nZXRfb2ZmbG9hZF9pbmZvX3JjdWAsIGFuZCBgYnJfdmxhbl9pc19lbmFibGVkX3JjdWAuIFRoZXkmIzM5O3JlIGFsbCBsYWJlbGVkIHdpdGggJiMzNDtyY3UsJiMzNDsgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhleSYjMzk7cmUgZGVzaWduZWQgZm9yIHNhZmUsIGxvY2tsZXNzIGFjY2VzcyB0byBicmlkZ2UgZm9yd2FyZGluZyBkYXRhYmFzZSAoRkRCKSBhbmQgVkxBTiBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmVzLiBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3JlIGluIGBuZXQvYnJpZGdlL2JyX2ZkYi5jYCBhbmQgYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCByZXNwZWN0aXZlbHkgaXMgcHJldHR5IG11Y2ggZXhwZWN0ZWQsIG9idmlvdXNseS4KCmBicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1YCBhbmQgYGJyX3ZsYW5faXNfZW5hYmxlZF9yY3VgIGFyZSBpbiBgYnJfdmxhbi5jYCwgYW5kIHNvIGFyZSByZWxhdGVkIHRvIFZMQU4gZmlsdGVyaW5nLCB3aGljaCBpcyBjb21waWxlZCBpbiBvbmx5IHdoZW4gYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIGlzIGVuYWJsZWQuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBtZWFucyB0aGV5JiMzOTtyZSBsaWtlbHkgaW52b2x2ZWQgaW4gcXVlcnlpbmcgVkxBTi1yZWxhdGVkIHBhcmFtZXRlcnMsIGFuZCBwZXJoYXBzIHRoZWlyIHByZXNlbmNlIHN1Z2dlc3RzIGVuaGFuY2VtZW50cyB0byBWTEFOLWF3YXJlIGJyaWRnaW5nLiBQZXJoYXBzIGJldHRlciBwZXJmb3JtYW5jZSBhY2Nlc3NpbmcgVkxBTiBlbnRyaWVzLgoKVGhlIFJDVS1iYXNlZCBhY2Nlc3Mgc3Ryb25nbHkgaW1wbGllcyB0aGVzZSBhcmUgbGlrZWx5IGJlaW5nIHVzZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dHMsIG9yIHBvc3NpYmx5IGluIHNjZW5hcmlvcyB3aGVyZSBjb250ZW50aW9uIGlzIGEgc2lnbmlmaWNhbnQgY29uY2Vybi4gVGhleSYjMzk7cmUgY2xlYXJseSBsb29raW5nIHRvIGF2b2lkIHRha2luZyBsb2NrcyB0byBwcm92aWRlIGhpZ2hlciBjb25jdXJyZW5jeS4gSXQmIzM5O3MgZ29vZCB0byBzZWUgdGhpcyBsZXZlbCBvZiBjYXJlZnVsIG9wdGltaXphdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCB1c2UgY2FzZXMgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfdmxhbi5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvTWFrZWZpbGU9MjE9YnJpZGdlLSQoQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HKSAmIzQzOz0gYnJfbXVsdGljYXN0Lm8gYnJfbWRiLm8gYnJfbXVsdGljYXN0X2VodC5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTIyLVxubmV0L2JyaWRnZS9NYWtlZmlsZToyMzpicmlkZ2UtJChDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HKSAmIzQzOz0gYnJfdmxhbi5vIGJyX3ZsYW5fdHVubmVsLm8gYnJfdmxhbl9vcHRpb25zLm8gYnJfbXN0Lm9cbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjQtXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTg4Mj1zdGF0aWMgaW5saW5lIHUxNiBicl92bGFuX2ZsYWdzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBwdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4ODgtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxODg5Oi8qIGJyX3ZsYW5fb3B0aW9ucy5jICovXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODkwLSNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxODkxOmJvb2wgYnJfdmxhbl9vcHRzX2VxX3JhbmdlKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZfY3Vycixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4OTItXHRcdFx0ICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqcmFuZ2VfZW5kKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE4OTM6Ym9vbCBicl92bGFuX29wdHNfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTg5NC1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTg5NTpzaXplX3QgYnJfdmxhbl9vcHRzX25sX3NpemUodm9pZCk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODk2LWludCBicl92bGFuX3Byb2Nlc3Nfb3B0aW9ucyhjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MTkwMz1zdGF0aWMgYm9vbCBicl92bGFuX2ZpbGxfdmlkcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgdmlkLCB1MTYgdmlkX3JhbmdlLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE5MzEtXHRpZiAodl9vcHRzKSB7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxOTMyOlx0XHRpZiAoIWJyX3ZsYW5fb3B0c19maWxsKHNrYiwgdl9vcHRzLCBwKSlcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE5MzMtXHRcdFx0Z290byBvdXRfZXJyO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTE5NDg9c3RhdGljIHNpemVfdCBydG5sX3ZsYW5fbmxtc2dfc2l6ZSh2b2lkKVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE5NTMtXHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgYnJpZGdlX3ZsYW5faW5mbykpIC8qIEJSSURHRV9WTEFOREJfRU5UUllfSU5GTyAqL1xubmV0L2JyaWRnZS9icl92bGFuLmM6MTk1NDpcdFx0JiM0MzsgYnJfdmxhbl9vcHRzX25sX3NpemUoKTsgLyogYnJpZGdlIHZsYW4gb3B0aW9ucyAqL1xubmV0L2JyaWRnZS9icl92bGFuLmMtMTk1NS19XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MjAyOT1ib29sIGJyX3ZsYW5fY2FuX2VudGVyX3JhbmdlKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZfY3Vycixcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yMDMzLVx0ICAgICAgIHJhbmdlX2VuZC1cdTAwM2VmbGFncyA9PSB2X2N1cnItXHUwMDNlZmxhZ3MgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyMDM0Olx0ICAgICAgIGJyX3ZsYW5fb3B0c19lcV9yYW5nZSh2X2N1cnIsIHJhbmdlX2VuZCk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yMDM1LX1cbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jPTMyPXN0YXRpYyBib29sIF9fdmxhbl90dW5fY2FuX2VudGVyX3JhbmdlKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZfY3Vycixcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTM5LS8qIGNoZWNrIGlmIHRoZSBvcHRpb25zJiMzOTsgc3RhdGUgb2Ygdl9jdXJyIGFsbG93IGl0IHRvIGVudGVyIHRoZSByYW5nZSAqL1xubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYzo0MDpib29sIGJyX3ZsYW5fb3B0c19lcV9yYW5nZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2X2N1cnIsXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTQxLVx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnJhbmdlX2VuZClcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTcxLVxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYzo3Mjpib29sIGJyX3ZsYW5fb3B0c19maWxsKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTczLVx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTk3LVxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYzo5ODpzaXplX3QgYnJfdmxhbl9vcHRzX25sX3NpemUodm9pZClcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtOTkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkwMwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDYxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBOZXR3b3JrIEZsb3cgVGFibGUgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBzdXBwb3J0IHRoaXMgZmxvdyB0YWJsZSBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYnJpZGdpbmcgYW5kIFZMQU4gZmlsdGVyaW5nLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBpcyBhIGtleSByZXF1aXJlbWVudCwgb2J2aW91c2x5LiBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19ORl9GTE9XX1RBQkxFYCBpcyBlc3NlbnRpYWwuIFNpbmNlIGBORl9GTE9XX1RBQkxFYCBpbXBsaWVzIGBORVRGSUxURVJgLCBJIGRvbiYjMzk7dCBuZWVkIHRvIGV4cGxpY2l0bHkgc3RhdGUgYENPTkZJR19ORVRGSUxURVJgLCBpdCYjMzk7cyBjb3ZlcmVkLiBOb3csIHRoZSBkZXBlbmRlbmN5IHRyZWUgc2VlbXMgdG8gYnJhbmNoOiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgbmVlZHMgYENPTkZJR19CUklER0VgLiBHb3QgaXQuIFRoYXQgc2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBzeW1ib2xzIHdpdGhpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGlkZW50aWZpZWQgc2V2ZXJhbCBrZXkgZnVuY3Rpb24gbmFtZXM6IGBicl9mZGJfaGFzX2ZvcndhcmRpbmdfZW50cnlfcmN1YCwgYGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3VgLCBgYnJfdmxhbl9pc19lbmFibGVkX3JjdWAsIGBfX2Rldl9maWxsX2ZvcndhcmRfcGF0aGAsIGBuZnRfZmxvd19yb3V0ZWAsIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAsIGBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZ2AsIGBuZnRfZmxvd19yb3V0ZV9yb3V0aW5nYCwgYG5mdF9mbG93X29mZmxvYWRfaXNfYnJpZGdpbmdgLCBgbmZ0X2JyX3ZsYW5fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgYW5kIGBuZnRfZmlsbF92bGFuX3Bhc3N0aHJvdWdoX2luZm9gLiBUaGVzZSB3aWxsIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2YgdGhlIGNvZGUgcGF0aC4KCkFscmlnaHQsIEkgbmVlZCB0byBzZWUgd2hpY2ggb2YgdGhlc2UgYXJlIGV4cG9ydGVkLiBUaGlzIHRlbGxzIG1lIHdoYXQmIzM5O3MgYXZhaWxhYmxlIHRvIG1vZHVsZXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIE9rYXksIHNvIGBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZ2AgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gYG5mdF9mbG93X3JvdXRlYCBhbmQgYF9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBhcmUgZXhwb3J0ZWQuIEFuZCB0aGUgYGJyX2AgcHJlZml4ZWQgZnVuY3Rpb25zIGFyZSBhbHNvIGV4cG9ydGVkLiBUaGlzIGlzIGdvb2QgdG8ga25vdy4KCkxldCYjMzk7cyBkbyBhIHF1aWNrLCBjbGVhbiBsaXN0IG9mIHRoZSByZWxldmFudCBzeW1ib2xzLCBqdXN0IHRvIGtlZXAgdGhpbmdzIG9yZ2FuaXplZDoKKiAgIGBicl9mZGJfaGFzX2ZvcndhcmRpbmdfZW50cnlfcmN1YAoqICAgYGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3VgCiogICBgYnJfdmxhbl9pc19lbmFibGVkX3JjdWAKKiAgIGBfX2Rldl9maWxsX2ZvcndhcmRfcGF0aGAKKiAgIGBuZnRfZmxvd19yb3V0ZWAKKiAgIGBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZ2AKKiAgIGBuZnRfZmxvd19vZmZsb2FkX2lzX2JyaWRnaW5nYAoqICAgYG5mdF9icl92bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aGAKKiAgIGBuZnRfZmlsbF92bGFuX3Bhc3N0aHJvdWdoX2luZm9gCgpKdXN0IGEgcXVpY2sgZG91YmxlLWNoZWNrIG9uIGBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZ2AgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZXhhY3QgbmFtZS4gWWVwLCB0aGUgZGVmaW5pdGlvbiBpbiB0aGUgZGlmZiBtYXRjaGVzIHdoYXQgSSBoYXZlIGluIG15IG5vdGVzLiBJIGFsd2F5cyBkb3VibGUtY2hlY2suCgpgYGBjCnN0YXRpYyBpbnQgbmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmcoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCgkJCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCgkJCQkgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsCgkJCQkgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLAoJCQkJICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KQpgYGAKCk5vdywgbGV0IG1lIG1ha2Ugc3VyZSBJIGRpZG4mIzM5O3QgbWlzcyBhbnl0aGluZy4gU28gSSBuZWVkIGBORl9GTE9XX1RBQkxFYCwgYEJSSURHRWAsIGFuZCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gSSBzaG91bGQgYWxzbyBkb3VibGUgY2hlY2sgaWYgYG5mdF9mbG93X3JvdXRlYCBoYXMgYW55IG90aGVyIGhpZGRlbiBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlciBvbiB0aGF0IHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfZmxvd19yb3V0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTI0Nj1zdHJ1Y3QgbmZ0X3BrdGluZm87XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjI0NzppbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMjQ4LVx0XHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0zMTg9c3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTM5My1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6Mzk0OnN0YXRpYyBpbnQgbmZ0X2Zsb3dfcm91dGVfcm91dGluZyhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzk1LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy00NTMtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjQ1NDpzdGF0aWMgaW50IG5mdF9mbG93X3JvdXRlX2JyaWRnaW5nKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy00NTUtXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy01MjEtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjUyMjppbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNTIzLVx0XHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy01MjYtXHRpZiAobmZ0X2Zsb3dfb2ZmbG9hZF9pc19icmlkZ2luZyhwa3QtXHUwMDNlc2tiKSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6NTI3Olx0XHRyZXR1cm4gbmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmcocGt0LCBjdCwgcm91dGUsIGRpciwgZnQpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy01MjgtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjUyOTpcdHJldHVybiBuZnRfZmxvd19yb3V0ZV9yb3V0aW5nKHBrdCwgY3QsIHJvdXRlLCBkaXIsIGZ0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNTMwLX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6NTMxOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9mbG93X3JvdXRlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz01MD1zdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTEwOC1cdGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjEwOTpcdGlmIChuZnRfZmxvd19yb3V0ZShwa3QsIGN0LCBcdTAwMjZyb3V0ZSwgZGlyLCBwcml2LVx1MDAzZWZsb3d0YWJsZSkgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xMTAtXHRcdGdvdG8gZXJyX2Zsb3dfcm91dGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDkzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBPZmZsb2FkIENvZGUqKgoKT2theSwgc28gYG5mdF9mbG93X29mZmxvYWQuY2AgaXMgY2FsbGluZyBgbmZ0X2Zsb3dfcm91dGVgLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBhbmQsIHNwZWNpZmljYWxseSwgaG93IHRoZSBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgdHJpZ2dlcmVkLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBzY3J1dGluaXplIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYG5mdF9mbG93X29mZmxvYWQub2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgd2lsbCBsaWtlbHkgYmUgZGVmaW5lZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggb2ZmbG9hZCBpcyBlbmFibGVkLCB3aGF0IGNyaXRlcmlhIGFyZSB1c2VkIGZvciByb3V0aW5nLCBhbmQgYW55IHJlbGV2YW50IHBvbGljeSBzZXR0aW5ncy4gSSBhbnRpY2lwYXRlIGZpbmRpbmcga2V5IHBhcmFtZXRlcnMgYW5kIHBvdGVudGlhbGx5IHNvbWUgb3B0aW1pemF0aW9ucyBvciBsaW1pdGF0aW9ucyBkaWN0YXRlZCBieSB0aGUgY29uZmlndXJhdGlvbi4gVGhpcyBjb3VsZCBpbnZvbHZlIGxvb2tpbmcgYXQgdmFyaW91cyBuZXRmaWx0ZXIgb3B0aW9ucyBhbmQgYW55IHJlbGF0ZWQga2NvbmZpZyBzeW1ib2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfZmxvd19vZmZsb2FkLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMTI9b2JqLSQoQ09ORklHX05GVF9DVClcdFx0JiM0Mzs9IG5mdF9jdC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjExMzpvYmotJChDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRClcdCYjNDM7PSBuZnRfZmxvd19vZmZsb2FkLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTE0LW9iai0kKENPTkZJR19ORlRfTElNSVQpXHRcdCYjNDM7PSBuZnRfbGltaXQub1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jPTIxNz1zdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X2Zsb3dfb2ZmbG9hZF90eXBlO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjE4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9mbG93X29mZmxvYWRfb3BzID0ge1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjE5LVx0LnR5cGVcdFx0PSBcdTAwMjZuZnRfZmxvd19vZmZsb2FkX3R5cGUsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9MjMwPXN0YXRpYyBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfZmxvd19vZmZsb2FkX3R5cGUgX19yZWFkX21vc3RseSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTIzMS1cdC5uYW1lXHRcdD0gXCYjMzQ7Zmxvd19vZmZsb2FkXCYjMzQ7LFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjMyOlx0Lm9wc1x0XHQ9IFx1MDAyNm5mdF9mbG93X29mZmxvYWRfb3BzLFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjMzLVx0LnBvbGljeVx0XHQ9IG5mdF9mbG93X29mZmxvYWRfcG9saWN5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY2NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBgQ09ORklHX05GVF9GTE9XX09GRkxPQURgJiMzOTtzIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyB0aGUgY3VycmVudCBpc3N1ZSBpcyBwb2ludGluZyB0b3dhcmRzIGEgcG90ZW50aWFsIGRlcGVuZGVuY2Ugb24gYENPTkZJR19ORlRfRkxPV19PRkZMT0FEYC4gVGhpcyBpc24mIzM5O3QgZW50aXJlbHkgdW5leHBlY3RlZCBnaXZlbiB0aGUgY29udGV4dCwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIHZlcmlmeSB0aGUgcHJlY2lzZSByZWxhdGlvbnNoaXBzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgQ09ORklHX05GVF9GTE9XX09GRkxPQURgIGlzIGEgZGlyZWN0IGRlcGVuZGVuY3ksIGFuIGltcGxpY2l0IHJlcXVpcmVtZW50LCBvciBtZXJlbHkgYW4gb3B0aW1pemF0aW9uIHRoYXQmIzM5O3MgKnN0cm9uZ2x5KiByZWNvbW1lbmRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBjdXJyZW50IHRhc2suIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29uZGl0aW9uYWxzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGFueSBleHBsaWNpdCBgc2VsZWN0YCBzdGF0ZW1lbnRzIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBzZXR0aW5nIGlzICpzdHJpY3RseSogbmVjZXNzYXJ5LCBvciBpZiB0aGVyZSYjMzk7cyBzb21lIHdpZ2dsZSByb29tIHRoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlLiBVbHRpbWF0ZWx5LCB0aGUgZ29hbCBpcyB0byBmdWxseSBkZWZpbmUgdGhlIGNvbnN0cmFpbnRzIG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORlRfRkxPV19PRkZMT0FEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz00OTg9Y29uZmlnIE5GVF9FWFRIRFJfRENDUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA0OmNvbmZpZyBORlRfRkxPV19PRkZMT0FEXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTA1LVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwMjUKCQkJCQkJCW91dHB1dDogMjQ2CgkJCQkJCQl0aG91Z2h0czogMjU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE5GVCBGbG93IE9mZmxvYWRpbmcgYW5kIEJyaWRnaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBORlRfRkxPV19PRkZMT0FEYCBpcyB0aGUgY3JpdGljYWwgY29uZmlnIHRoYXQgYWN0aXZhdGVzIHRoZSBmbG93IG9mZmxvYWQgZnVuY3Rpb25hbGl0eSB3aXRoaW4gbmZ0YWJsZXMuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyB0aGUgb24gc3dpdGNoIGZvciB0aGlzIGNhcGFiaWxpdHksIGFuZCwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpdCByZWxpZXMgb24gY2FsbGluZyBgbmZ0X2Zsb3dfcm91dGVgLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgcmVjYXAgb2YgdGhlIGNvbmZpZ3Mgd2UmIzM5O3JlIGNvbmNlcm5lZCB3aXRoIGhlcmU6IGBORl9GTE9XX1RBQkxFYCwgYE5GVF9GTE9XX09GRkxPQURgLCB0aGUgYEJSSURHRWAgb3B0aW9ucywgYW5kIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLiBJIGtub3cgdGhlcmUgYXJlIGxpa2VseSBpbXBsaWNhdGlvbnMgYW5kIGRlcGVuZGVuY2llcywgc28gbGV0JiMzOTtzIHNlZSBpZiB3ZSBtaXNzZWQgYW55dGhpbmcuCgpSaWdodCwgSSYjMzk7bSBub3RpbmcgdGhhdCBgQ09ORklHX05GX0NPTk5UUkFDS2AgYW5kIGBDT05GSUdfTkVURklMVEVSYCBhcmUgYXV0b21hdGljYWxseSBpbXBsaWVkIGJ5IHRoZSBgTkZUX0ZMT1dfT0ZGTE9BRGAgc2V0dGluZy4gR29vZCwgdGhhdCBoZWxwcyBjbGFyaWZ5IHRoZSBvdmVyYWxsIHBpY3R1cmUuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgc3ltYm9scyB0aGF0IGFyZSByZWxldmFudCB0byB0aGlzIHByb2Nlc3MuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2UgZm9yIGRlZXBlciBhbmFseXNpczoKKiAgIGBicl9mZGJfaGFzX2ZvcndhcmRpbmdfZW50cnlfcmN1YAoqICAgYGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3VgCiogICBgYnJfdmxhbl9pc19lbmFibGVkX3JjdWAKKiAgIGBfX2Rldl9maWxsX2ZvcndhcmRfcGF0aGAKKiAgIGBuZnRfZmxvd19yb3V0ZWAKKiAgIGBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZ2AKKiAgIGBuZnRfZmxvd19vZmZsb2FkX2lzX2JyaWRnaW5nYAoqICAgYG5mdF9icl92bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aGAKKiAgIGBuZnRfZmlsbF92bGFuX3Bhc3N0aHJvdWdoX2luZm9gCgpJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0JSSURHRV9WTEFOX0ZJTFRFUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3UmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9nZXRfb2ZmbG9hZF9pbmZvX3JjdSYjMzQ7LAogICAgJiMzNDticl92bGFuX2lzX2VuYWJsZWRfcmN1JiMzNDssCiAgICAmIzM0O19fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O25mdF9mbG93X3JvdXRlJiMzNDssCiAgICAmIzM0O25mdF9mbG93X3JvdXRlX2JyaWRnaW5nJiMzNDssCiAgICAmIzM0O25mdF9mbG93X29mZmxvYWRfaXNfYnJpZGdpbmcmIzM0OywKICAgICYjMzQ7bmZ0X2JyX3ZsYW5fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O25mdF9maWxsX3ZsYW5fcGFzc3Rocm91Z2hfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGZsb3cgb2ZmbG9hZCBvZiBicmlkZ2VkIHRyYWZmaWMuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBjaGVjayBicmlkZ2UgRkRCIGVudHJpZXMgYW5kIFZMQU4gaW5mb3JtYXRpb24gZm9yIGZsb3cgb2ZmbG9hZCwgYW5kIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBwYXRoIHRvIGhhbmRsZSBicmlkZ2VkIHRyYWZmaWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdSYjMzQ7LAogICAgJiMzNDticl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1JiMzNDssCiAgICAmIzM0O2JyX3ZsYW5faXNfZW5hYmxlZF9yY3UmIzM0OywKICAgICYjMzQ7X19kZXZfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfcm91dGUmIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmcmIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfb2ZmbG9hZF9pc19icmlkZ2luZyYjMzQ7LAogICAgJiMzNDtuZnRfYnJfdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7bmZ0X2ZpbGxfdmxhbl9wYXNzdGhyb3VnaF9pbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZmxvdyBvZmZsb2FkIG9mIGJyaWRnZWQgdHJhZmZpYy4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIGNoZWNrIGJyaWRnZSBGREIgZW50cmllcyBhbmQgVkxBTiBpbmZvcm1hdGlvbiBmb3IgZmxvdyBvZmZsb2FkLCBhbmQgbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIHBhdGggdG8gaGFuZGxlIGJyaWRnZWQgdHJhZmZpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEyOjU2OjI4LjMxNDg3MTc0MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NjY2MDA5MzE5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCIsXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3VcIixcbiAgICBcImJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3VcIixcbiAgICBcImJyX3ZsYW5faXNfZW5hYmxlZF9yY3VcIixcbiAgICBcIl9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoXCIsXG4gICAgXCJuZnRfZmxvd19yb3V0ZVwiLFxuICAgIFwibmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmdcIixcbiAgICBcIm5mdF9mbG93X29mZmxvYWRfaXNfYnJpZGdpbmdcIixcbiAgICBcIm5mdF9icl92bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwibmZ0X2ZpbGxfdmxhbl9wYXNzdGhyb3VnaF9pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBmbG93IG9mZmxvYWQgb2YgYnJpZGdlZCB0cmFmZmljLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gY2hlY2sgYnJpZGdlIEZEQiBlbnRyaWVzIGFuZCBWTEFOIGluZm9ybWF0aW9uIGZvciBmbG93IG9mZmxvYWQsIGFuZCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgcGF0aCB0byBoYW5kbGUgYnJpZGdlZCB0cmFmZmljLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIHN1YnN5c3RlbXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMjo1NjoyOC4zMTQ4NzczMDJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNDk4MjM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA1Mjk1ZDYyZWVjZjI4OTg2ZTE4YWFkNzc5Y2Y1ZGNmM2QwNTk2YWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTI6NTY6MjcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaCBiL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmhcXG5pbmRleCA3NTY3M2I4YmZmY2I4YS4uYzFjYWU1NDc0OWM1MTYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmhcXG5AQCAtMTQ4LDYgKzE0OCw5IEBAIGludCBicl92bGFuX2dldF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB2aWQsXFxuIFxcdFxcdCAgICAgc3RydWN0IGJyaWRnZV92bGFuX2luZm8gKnBfdmluZm8pO1xcbiBpbnQgYnJfdmxhbl9nZXRfaW5mb19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCxcXG4gXFx0XFx0XFx0IHN0cnVjdCBicmlkZ2Vfdmxhbl9pbmZvICpwX3ZpbmZvKTtcXG4rdTE2IGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiAqcHJvdG8pO1xcbitib29sIGJyX3ZsYW5faXNfZW5hYmxlZF9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIGJvb2wgYnJfbXN0X2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIGludCBicl9tc3RfZ2V0X2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IG1zdGksIHVuc2lnbmVkIGxvbmcgKnZpZHMpO1xcbiBpbnQgYnJfbXN0X2dldF9zdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgbXN0aSwgdTggKnN0YXRlKTtcXG5AQCAtMTg0LDYgKzE4NywxNyBAQCBzdGF0aWMgaW5saW5lIGludCBicl92bGFuX2dldF9pbmZvX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkLFxcbiBcXHRyZXR1cm4gLUVJTlZBTDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB1MTYgYnJfdmxhbl9nZXRfb2ZmbG9hZF9pbmZvX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRfX2JlMTYgKnByb3RvKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgYnJfdmxhbl9pc19lbmFibGVkX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbiBzdGF0aWMgaW5saW5lIGJvb2wgYnJfbXN0X2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuQEAgLTIwOSw2ICsyMjMsOCBAQCB2b2lkIGJyX2ZkYl9jbGVhcl9vZmZsb2FkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB2aWQpO1xcbiBib29sIGJyX3BvcnRfZmxhZ19pc19zZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFnKTtcXG4gdTggYnJfcG9ydF9nZXRfc3RwX3N0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiBjbG9ja190IGJyX2dldF9hZ2VpbmdfdGltZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2KTtcXG4rYm9vbCBicl9mZGJfaGFzX2ZvcndhcmRpbmdfZW50cnlfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTggKmFkZHIpO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpcXG4gYnJfZmRiX2ZpbmRfcG9ydChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2LFxcbkBAIC0yMzcsNiArMjUzLDEzIEBAIHN0YXRpYyBpbmxpbmUgY2xvY2tfdCBicl9nZXRfYWdlaW5nX3RpbWUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldilcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29uc3QgdTggKmFkZHIpXFxuK3tcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuaW5kZXggOTk4MWQ2MzdmOGI1NDYuLmMxZDBiODk3ZGU5NTM0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuQEAgLTM0MjIsNiArMzQyMiw4IEBAIGludCBkZXZfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gaW50IGRldl9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXFxuIFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xcbitpbnQgX19kZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwgY29uc3QgdTggKmRhZGRyLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XFxuIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWVfcmN1KHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XFxuIHN0cnVjdCBuZXRfZGV2aWNlICpfX2Rldl9nZXRfYnlfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2ZkYi5jIGIvbmV0L2JyaWRnZS9icl9mZGIuY1xcbmluZGV4IGU0NTcwYmJlZDg1NDQ1Li4zMTYxYzI2ODlmNmE2ZiAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX2ZkYi5jXFxuKysrIGIvbmV0L2JyaWRnZS9icl9mZGIuY1xcbkBAIC0yNjcsNiArMjY3LDM4IEBAIHN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqYnJfZmRiX2ZpbmRfcmN1KHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4gXFx0cmV0dXJuIGZkYl9maW5kX3JjdShcXHUwMDI2YnItXFx1MDAzZWZkYl9oYXNoX3RibCwgYWRkciwgdmlkKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3UgLSBjaGVjayBpZiBhIE1BQyBjYW4gYmUgZm9yd2FyZGVkIGJ5IHRoZSBicmlkZ2VcXG4rICogQGRldjogYnJpZGdlIHBvcnQgbmV0d29yayBkZXZpY2VcXG4rICogQHNrYjogcGFja2V0IGJ1ZmZlciAodXNlZCB0byBkZXRlcm1pbmUgVkxBTiBpZClcXG4rICogQGFkZHI6IGRlc3RpbmF0aW9uIE1BQyBhZGRyZXNzXFxuKyAqXFxuKyAqIFJlc29sdmVzIHRoZSBWTEFOIGlkIGZvciBAc2tiIG9uIEBkZXYgKHNrYiBWTEFOIHRhZyB3aGVuIHByZXNlbnQsIFBWSURcXG4rICogd2hlbiBWTEFOIGZpbHRlcmluZyBpcyBlbmFibGVkLCAwIG90aGVyd2lzZSkgdGhlbiBjaGVja3Mgd2hldGhlciB0aGUgYnJpZGdlXFxuKyAqIEZEQiBjb250YWlucyBhIGZvcndhcmRpbmcgZW50cnkgKGRzdCAhPSBOVUxMLCBub3QgYSBsb2NhbC9zZWxmIGVudHJ5KSBmb3JcXG4rICogQGFkZHIgYW5kIHRoYXQgVkxBTiBpZC4gU2luZ2xlIGJyX3BvcnRfZ2V0X3JjdSgpIGxvb2t1cC5cXG4rICogTXVzdCBiZSBjYWxsZWQgdW5kZXIgUkNVIHJlYWQgbG9jay5cXG4rICovXFxuK2Jvb2wgYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHU4ICphZGRyKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQgPSBicl9wb3J0X2dldF9yY3UoZGV2KTtcXG4rXFx0c3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmZGI7XFxuK1xcdHUxNiB2aWQgPSAwO1xcbitcXG4rXFx0aWYgKCFwb3J0KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmIChicl9vcHRfZ2V0KHBvcnQtXFx1MDAzZWJyLCBCUk9QVF9WTEFOX0VOQUJMRUQpKSB7XFxuK1xcdFxcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKVxcbitcXHRcXHRcXHR2aWQgPSBza2Jfdmxhbl90YWdfZ2V0X2lkKHNrYik7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0YnJfdmxhbl9nZXRfcHZpZF9yY3UoZGV2LCBcXHUwMDI2dmlkKTtcXG4rXFx0fVxcbitcXHRmZGIgPSBicl9mZGJfZmluZF9yY3UocG9ydC1cXHUwMDNlYnIsIGFkZHIsIHZpZCk7XFxuK1xcdHJldHVybiBmZGIgXFx1MDAyNlxcdTAwMjYgZmRiLVxcdTAwM2Vkc3Q7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdSk7XFxuK1xcbiAvKiBXaGVuIGEgc3RhdGljIEZEQiBlbnRyeSBpcyBhZGRlZCwgdGhlIG1hYyBhZGRyZXNzIGZyb20gdGhlIGVudHJ5IGlzXFxuICAqIGFkZGVkIHRvIHRoZSBicmlkZ2UgcHJpdmF0ZSBIVyBhZGRyZXNzIGxpc3QgYW5kIGFsbCByZXF1aXJlZCBwb3J0c1xcbiAgKiBhcmUgdGhlbiB1cGRhdGVkIHdpdGggdGhlIG5ldyBpbmZvcm1hdGlvbi5cXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl92bGFuLmMgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xcbmluZGV4IDU1NjBhZmNhYWNhMzI3Li4wYjI5NjM2MmFkZjdjOSAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfdmxhbi5jXFxuQEAgLTE1NTksNiArMTU1OSw1MSBAQCBpbnQgYnJfdmxhbl9nZXRfaW5mb19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCxcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChicl92bGFuX2dldF9pbmZvX3JjdSk7XFxuIFxcbisvKipcXG4rICogYnJfdmxhbl9nZXRfb2ZmbG9hZF9pbmZvX3JjdSAtIGdldCBWTEFOIGlkIGFuZCBwcm90b2NvbCBmb3IgYnJpZGdlIGZsb3cgb2ZmbG9hZFxcbisgKiBAZGV2OiBicmlkZ2UgcG9ydCBuZXR3b3JrIGRldmljZVxcbisgKiBAc2tiOiBwYWNrZXQgYnVmZmVyXFxuKyAqIEBwcm90bzogb3V0cHV0IGZvciB0aGUgYnJpZGdlIFZMQU4gcHJvdG9jb2wgKHNldCBvbmx5IHdoZW4gcmV0dXJuIHZhbHVlICE9IDApXFxuKyAqXFxuKyAqIFdoZW4gVkxBTiBmaWx0ZXJpbmcgaXMgZW5hYmxlZCwgcmVzb2x2ZXMgdGhlIFZMQU4gaWQgZm9yIGZsb3cgb2ZmbG9hZCAoc2tiXFxuKyAqIFZMQU4gdGFnIGlkIGlmIHByZXNlbnQsIFBWSUQgb3RoZXJ3aXNlKSBhbmQgd3JpdGVzIHRoZSBicmlkZ2UgVkxBTiBwcm90b2NvbFxcbisgKiB0byBAcHJvdG8uIFJldHVybnMgMCB3aGVuIGZpbHRlcmluZyBpcyBvZmYgb3IgQGRldiBpcyBub3QgYSBicmlkZ2UgcG9ydC5cXG4rICogU2luZ2xlIGJyX3BvcnRfZ2V0X3JjdSgpIGxvb2t1cC4gTXVzdCBiZSBjYWxsZWQgdW5kZXIgUkNVIHJlYWQgbG9jay5cXG4rICovXFxuK3UxNiBicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgKnByb3RvKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQgPSBicl9wb3J0X2dldF9yY3UoZGV2KTtcXG4rXFx0dTE2IHZpZCA9IDA7XFxuK1xcbitcXHRpZiAoIXBvcnQgfHwgIWJyX29wdF9nZXQocG9ydC1cXHUwMDNlYnIsIEJST1BUX1ZMQU5fRU5BQkxFRCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSlcXG4rXFx0XFx0dmlkID0gc2tiX3ZsYW5fdGFnX2dldF9pZChza2IpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGJyX3ZsYW5fZ2V0X3B2aWRfcmN1KGRldiwgXFx1MDAyNnZpZCk7XFxuK1xcdGlmICh2aWQpXFxuK1xcdFxcdCpwcm90byA9IHBvcnQtXFx1MDAzZWJyLVxcdTAwM2V2bGFuX3Byb3RvO1xcbitcXHRyZXR1cm4gdmlkO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3UpO1xcbitcXG4rLyoqXFxuKyAqIGJyX3ZsYW5faXNfZW5hYmxlZF9yY3UgLSBjaGVjayBpZiBWTEFOIGZpbHRlcmluZyBpcyBhY3RpdmUgb24gYSBwb3J0J3MgYnJpZGdlXFxuKyAqIEBkZXY6IGJyaWRnZSBwb3J0IG5ldHdvcmsgZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnMgdHJ1ZSBpZiBWTEFOIGZpbHRlcmluZyBpcyBlbmFibGVkIG9uIHRoZSBicmlkZ2UgQGRldiBiZWxvbmdzIHRvLlxcbisgKiBSZXR1cm5zIGZhbHNlIHdoZW4gQGRldiBpcyBub3QgYSBicmlkZ2UgcG9ydCBvciBmaWx0ZXJpbmcgaXMgb2ZmLlxcbisgKiBNdXN0IGJlIGNhbGxlZCB1bmRlciBSQ1UgcmVhZCBsb2NrLlxcbisgKi9cXG4rYm9vbCBicl92bGFuX2lzX2VuYWJsZWRfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IGJyX3BvcnRfZ2V0X3JjdShkZXYpO1xcbitcXG4rXFx0cmV0dXJuIHBvcnQgXFx1MDAyNlxcdTAwMjYgYnJfb3B0X2dldChwb3J0LVxcdTAwM2ViciwgQlJPUFRfVkxBTl9FTkFCTEVEKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChicl92bGFuX2lzX2VuYWJsZWRfcmN1KTtcXG4rXFxuIHN0YXRpYyBpbnQgYnJfdmxhbl9pc19iaW5kX3ZsYW5fZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0cmV0dXJuIGlzX3ZsYW5fZGV2KGRldikgXFx1MDAyNlxcdTAwMjZcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IDRiM2Q1Y2ZkZjZlMDBmLi42MmYxZDBiNjRjNzZkZSAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXYuY1xcbisrKyBiL25ldC9jb3JlL2Rldi5jXFxuQEAgLTc1MCw0NCArNzUwLDUyIEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpkZXZfZndkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuIFxcdHJldHVybiBcXHUwMDI2c3RhY2stXFx1MDAzZXBhdGhba107XFxuIH1cXG4gXFxuLWludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxcbitpbnQgX19kZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwgY29uc3QgdTggKmRhZGRyLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmxhc3RfZGV2O1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XFxuLVxcdFxcdC5kZXZcXHQ9IGRldixcXG4tXFx0fTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcbi1cXHRtZW1jcHkoY3R4LmRhZGRyLCBkYWRkciwgc2l6ZW9mKGN0eC5kYWRkcikpO1xcbitcXHRtZW1jcHkoY3R4LVxcdTAwM2VkYWRkciwgZGFkZHIsIHNpemVvZihjdHgtXFx1MDAzZWRhZGRyKSk7XFxuIFxcdHN0YWNrLVxcdTAwM2VudW1fcGF0aHMgPSAwO1xcbi1cXHR3aGlsZSAoY3R4LmRldiBcXHUwMDI2XFx1MDAyNiBjdHguZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgpIHtcXG4tXFx0XFx0bGFzdF9kZXYgPSBjdHguZGV2O1xcbitcXHR3aGlsZSAoY3R4LVxcdTAwM2VkZXYgXFx1MDAyNlxcdTAwMjYgY3R4LVxcdTAwM2VkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aCkge1xcbitcXHRcXHRsYXN0X2RldiA9IGN0eC1cXHUwMDNlZGV2O1xcbiBcXHRcXHRwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTtcXG4gXFx0XFx0aWYgKCFwYXRoKVxcbiBcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbiBcXHRcXHRtZW1zZXQocGF0aCwgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGgpKTtcXG4tXFx0XFx0cmV0ID0gY3R4LmRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKFxcdTAwMjZjdHgsIHBhdGgpO1xcbitcXHRcXHRyZXQgPSBjdHgtXFx1MDAzZWRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbi1cXHRcXHRpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC5kZXYpKVxcbitcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC1cXHUwMDNlZGV2KSlcXG4gXFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIWN0eC5kZXYpXFxuK1xcdGlmICghY3R4LVxcdTAwM2VkZXYpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTtcXG4gXFx0aWYgKCFwYXRoKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdHBhdGgtXFx1MDAzZXR5cGUgPSBERVZfUEFUSF9FVEhFUk5FVDtcXG4tXFx0cGF0aC1cXHUwMDNlZGV2ID0gY3R4LmRldjtcXG4rXFx0cGF0aC1cXHUwMDNlZGV2ID0gY3R4LVxcdTAwM2VkZXY7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKF9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcXG4rXFxuK2ludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHtcXG4rXFx0XFx0LmRldlxcdD0gZGV2LFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIF9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKFxcdTAwMjZjdHgsIGRhZGRyLCBzdGFjayk7XFxuK31cXG4gRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcXG4gXFxuIC8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2soKSwgYXMgd2UgZG9udCB0YWtlIGEgcmVmZXJlbmNlICovXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXFxuaW5kZXggOThjMDNiNDg3ZjUyMTEuLmQxNWM0MjVjODhjNGFhIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXFxuQEAgLTE1LDYgKzE1LDExIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfYnJpZGdlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9ldGhlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfdmxhbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3JvdXRlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X3JvdXRlLmhcXHUwMDNlXFxuIFxcbiBzdGF0aWMgZW51bSBmbG93X29mZmxvYWRfeG1pdF90eXBlIG5mdF94bWl0X3R5cGUoc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbiB7XFxuQEAgLTQyLDcgKzQ3LDI1IEBAIHN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXFxuK3N0YXRpYyBib29sIG5mdF9mbG93X29mZmxvYWRfaXNfYnJpZGdpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRib29sIHJldDtcXG4rXFxuK1xcdGlmICghbmV0aWZfaXNfYnJpZGdlX3BvcnQoc2tiLVxcdTAwM2VkZXYpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmICghc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHJldCA9IGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3Uoc2tiLVxcdTAwM2VkZXYsIHNrYixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgZXRoX2hkcihza2IpLVxcdTAwM2VoX2Rlc3QpO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcXG4gXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbiBcXHRcXHRcXHRcXHQgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIHU4ICpoYSxcXG5AQCAtNTgsNiArODEsMTIgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdC8qIEJyaWRnaW5nIGZhc3RwYXRoIGNvcGllcyBFdGhlcm5ldCBhZGRyZXNzZXMgaW50byBoYTsgZG8gbm90IHJlcGxhY2VcXG4rXFx0ICogdGhlbSB2aWEgbmVpZ2hib3VyIGxvb2t1cCBvbiB0aGUgcm91dGVkIGRlc3RpbmF0aW9uIGRldmljZS5cXG4rXFx0ICovXFxuK1xcdGlmICghaXNfemVyb19ldGhlcl9hZGRyKGhhKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRuID0gZHN0X25laWdoX2xvb2t1cChkc3RfY2FjaGUsIGRhZGRyKTtcXG4gXFx0aWYgKCFuKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuQEAgLTcyLDcgKzEwMSwyMyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbiBvdXQ6XFxuLVxcdHJldHVybiBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBoYSwgc3RhY2spO1xcbitcXHRyZXR1cm4gX19kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBoYSwgc3RhY2spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBuZnRfYnJfdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgpXFxuK3tcXG4rXFx0X19iZTE2IHByb3RvID0gMDtcXG4rXFx0dTE2IHZsYW5faWQ7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHZsYW5faWQgPSBicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1KHBrdC1cXHUwMDNlc2tiLVxcdTAwM2VkZXYsIHBrdC1cXHUwMDNlc2tiLCBcXHUwMDI2cHJvdG8pO1xcbitcXHRpZiAodmxhbl9pZCkge1xcbitcXHRcXHRjdHgtXFx1MDAzZW51bV92bGFucyA9IDE7XFxuK1xcdFxcdGN0eC1cXHUwMDNldmxhblswXS5pZCA9IHZsYW5faWQ7XFxuK1xcdFxcdGN0eC1cXHUwMDNldmxhblswXS5wcm90byA9IHByb3RvO1xcbitcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7XFxuQEAgLTkyLDYgKzEzNywyOSBAQCBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7XFxuIFxcdGVudW0gZmxvd19vZmZsb2FkX3htaXRfdHlwZSB4bWl0X3R5cGU7XFxuIH07XFxuIFxcbitzdGF0aWMgdm9pZCBuZnRfZmlsbF92bGFuX3Bhc3N0aHJvdWdoX2luZm8oY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvICppbmZvKVxcbit7XFxuK1xcdGlmICghc2tiX3ZsYW5fdGFnX3ByZXNlbnQocGt0LVxcdTAwM2Vza2IpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdC8qIHdoZW4gYnJpZGdlIFZMQU4gZmlsdGVyaW5nIGlzIGVuYWJsZWQsIHRoZSBicmlkZ2UgaGFuZGxlcyB0aGUgdGFnICovXFxuK1xcdGlmIChuZXRpZl9pc19icmlkZ2VfcG9ydChwa3QtXFx1MDAzZXNrYi1cXHUwMDNlZGV2KSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIWJyX3ZsYW5faXNfZW5hYmxlZF9yY3UocGt0LVxcdTAwM2Vza2ItXFx1MDAzZWRldikpIHtcXG4rXFx0XFx0aWYgKGluZm8tXFx1MDAzZW51bV9lbmNhcHMgXFx1MDAzZT0gTkZfRkxPV19UQUJMRV9FTkNBUF9NQVgpIHtcXG4rXFx0XFx0XFx0aW5mby1cXHUwMDNlaW5kZXYgPSBOVUxMO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRpbmZvLVxcdTAwM2VlbmNhcFtpbmZvLVxcdTAwM2VudW1fZW5jYXBzXS5pZCA9XFxuK1xcdFxcdFxcdFxcdHNrYl92bGFuX3RhZ19nZXRfaWQocGt0LVxcdTAwM2Vza2IpO1xcbitcXHRcXHRcXHRpbmZvLVxcdTAwM2VlbmNhcFtpbmZvLVxcdTAwM2VudW1fZW5jYXBzXS5wcm90byA9XFxuK1xcdFxcdFxcdFxcdHBrdC1cXHUwMDNlc2tiLVxcdTAwM2V2bGFuX3Byb3RvO1xcbitcXHRcXHRcXHRpbmZvLVxcdTAwM2VudW1fZW5jYXBzKys7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyAqaW5mbyxcXG4gXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBjaGFyICpoYSwgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbkBAIC0xMDMsMTMgKzE3MSwxMyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLFxcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHN0YWNrLVxcdTAwM2VudW1fcGF0aHM7IGkrKykge1xcbiBcXHRcXHRwYXRoID0gXFx1MDAyNnN0YWNrLVxcdTAwM2VwYXRoW2ldO1xcbitcXHRcXHRpbmZvLVxcdTAwM2VpbmRldiA9IHBhdGgtXFx1MDAzZWRldjtcXG4gXFx0XFx0c3dpdGNoIChwYXRoLVxcdTAwM2V0eXBlKSB7XFxuIFxcdFxcdGNhc2UgREVWX1BBVEhfRVRIRVJORVQ6XFxuIFxcdFxcdGNhc2UgREVWX1BBVEhfRFNBOlxcbiBcXHRcXHRjYXNlIERFVl9QQVRIX1ZMQU46XFxuIFxcdFxcdGNhc2UgREVWX1BBVEhfUFBQT0U6XFxuIFxcdFxcdGNhc2UgREVWX1BBVEhfVFVOOlxcbi1cXHRcXHRcXHRpbmZvLVxcdTAwM2VpbmRldiA9IHBhdGgtXFx1MDAzZWRldjtcXG4gXFx0XFx0XFx0aWYgKGlzX3plcm9fZXRoZXJfYWRkcihpbmZvLVxcdTAwM2VoX3NvdXJjZSkpXFxuIFxcdFxcdFxcdFxcdG1lbWNweShpbmZvLVxcdTAwM2VoX3NvdXJjZSwgcGF0aC1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xcbiBcXG5AQCAtMTc1LDYgKzI0MywxMCBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLFxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGluZm8tXFx1MDAzZXhtaXRfdHlwZSA9IEZMT1dfT0ZGTE9BRF9YTUlUX0RJUkVDVDtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgREVWX1BBVEhfTVRLX1dETUE6XFxuK1xcdFxcdFxcdGlmIChpc196ZXJvX2V0aGVyX2FkZHIoaW5mby1cXHUwMDNlaF9zb3VyY2UpKVxcbitcXHRcXHRcXHRcXHRtZW1jcHkoaW5mby1cXHUwMDNlaF9zb3VyY2UsIHBhdGgtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFxcdHJldHVybiAtMTtcXG4gXFx0XFx0fVxcbkBAIC0yNDQsNiArMzE2LDcgQEAgc3RhdGljIGludCBuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbitcXHRcXHRcXHRcXHRib29sIGlzX2JyaWRnaW5nLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXFxuIFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0XFx0XFx0XFx0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcXG5AQCAtMjUxLDEyICszMjQsMzggQEAgc3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSByb3V0ZS1cXHUwMDNldHVwbGVbZGlyXS5kc3Q7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgc3RhY2s7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHtcXG4rXFx0XFx0LmRldlxcdD0gZHN0LVxcdTAwM2VkZXYsXFxuK1xcdH07XFxuIFxcdHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIGluZm8gPSB7fTtcXG4rXFx0ZW51bSBpcF9jb25udHJhY2tfaW5mbyBwa3RfY3RpbmZvO1xcbitcXHRlbnVtIGlwX2Nvbm50cmFja19kaXIgc2tiX2RpcjtcXG4rXFx0c3RydWN0IGV0aGhkciAqZXRoO1xcbiBcXHR1bnNpZ25lZCBjaGFyIGhhW0VUSF9BTEVOXTtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChyb3V0ZSwgZHN0LCBjdCwgZGlyLCBoYSwgXFx1MDAyNnN0YWNrKSBcXHUwMDNjIDAgfHxcXG4tXFx0ICAgIG5mdF9kZXZfcGF0aF9pbmZvKFxcdTAwMjZzdGFjaywgXFx1MDAyNmluZm8sIGhhLCBcXHUwMDI2ZnQtXFx1MDAzZWRhdGEpIFxcdTAwM2MgMClcXG4rXFx0bWVtc2V0KGhhLCAwLCBzaXplb2YoaGEpKTtcXG4rXFxuK1xcdGlmIChpc19icmlkZ2luZykge1xcbitcXHRcXHRuZl9jdF9nZXQocGt0LVxcdTAwM2Vza2IsIFxcdTAwMjZwa3RfY3RpbmZvKTtcXG4rXFx0XFx0ZXRoID0gZXRoX2hkcihwa3QtXFx1MDAzZXNrYik7XFxuK1xcdFxcdHNrYl9kaXIgPSBDVElORk8yRElSKHBrdF9jdGluZm8pO1xcbitcXHRcXHRpZiAoc2tiX2RpciAhPSBkaXIpIHtcXG4rXFx0XFx0XFx0bWVtY3B5KGhhLCBldGgtXFx1MDAzZWhfc291cmNlLCBFVEhfQUxFTik7XFxuK1xcdFxcdFxcdG1lbWNweShpbmZvLmhfc291cmNlLCBldGgtXFx1MDAzZWhfZGVzdCwgRVRIX0FMRU4pO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRtZW1jcHkoaGEsIGV0aC1cXHUwMDNlaF9kZXN0LCBFVEhfQUxFTik7XFxuK1xcdFxcdFxcdG1lbWNweShpbmZvLmhfc291cmNlLCBldGgtXFx1MDAzZWhfc291cmNlLCBFVEhfQUxFTik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0bmZ0X2JyX3ZsYW5fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHBrdCwgXFx1MDAyNmN0eCk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKFxcdTAwMjZjdHgsIHJvdXRlLCBkc3QsIGN0LCBkaXIsIGhhLCBcXHUwMDI2c3RhY2spIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcbitcXHRuZnRfZmlsbF92bGFuX3Bhc3N0aHJvdWdoX2luZm8ocGt0LCBcXHUwMDI2aW5mbyk7XFxuK1xcbitcXHRpZiAobmZ0X2Rldl9wYXRoX2luZm8oXFx1MDAyNnN0YWNrLCBcXHUwMDI2aW5mbywgaGEsIFxcdTAwMjZmdC1cXHUwMDNlZGF0YSkgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuIFxcdGlmICghbmZ0X2Zsb3d0YWJsZV9maW5kX2RldihpbmZvLmluZGV2LCBmdCkpXFxuQEAgLTI5Miw5ICszOTEsMTEgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLWludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi1cXHRcXHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXFxuLVxcdFxcdCAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdClcXG4rc3RhdGljIGludCBuZnRfZmxvd19yb3V0ZV9yb3V0aW5nKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbitcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXFxuK1xcdFxcdFxcdFxcdCAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZSAqZnQpXFxuIHtcXG4gXFx0c3RydWN0IGRzdF9lbnRyeSAqdGhpc19kc3QgPSBza2JfZHN0KHBrdC1cXHUwMDNlc2tiKTtcXG4gXFx0c3RydWN0IGRzdF9lbnRyeSAqb3RoZXJfZHN0ID0gTlVMTDtcXG5AQCAtMzM0LDEyICs0MzUsMTIgQEAgaW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcdG5mdF9kZWZhdWx0X2ZvcndhcmRfcGF0aChyb3V0ZSwgdGhpc19kc3QsIGRpcik7XFxuIFxcdG5mdF9kZWZhdWx0X2ZvcndhcmRfcGF0aChyb3V0ZSwgb3RoZXJfZHN0LCAhZGlyKTtcXG4gXFxuLVxcdGlmIChyb3V0ZS1cXHUwMDNldHVwbGVbZGlyXS54bWl0X3R5cGVcXHQ9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCByb3V0ZSwgY3QsIGRpciwgZnQpIFxcdTAwM2MgMClcXG4rXFx0aWYgKHJvdXRlLVxcdTAwM2V0dXBsZVtkaXJdLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCBmYWxzZSwgcm91dGUsIGN0LCBkaXIsIGZ0KSBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyX2RzdF9yZWxlYXNlO1xcbiBcXG4gXFx0aWYgKHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS54bWl0X3R5cGUgPT0gRkxPV19PRkZMT0FEX1hNSVRfTkVJR0ggXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgcm91dGUsIGN0LCAhZGlyLCBmdCkgXFx1MDAzYyAwKVxcbitcXHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCBmYWxzZSwgcm91dGUsIGN0LCAhZGlyLCBmdCkgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycl9kc3RfcmVsZWFzZTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC0zNDksNCArNDUwLDgyIEBAIGludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbiBcXHRkc3RfcmVsZWFzZShyb3V0ZS1cXHUwMDNldHVwbGVbIWRpcl0uZHN0KTtcXG4gXFx0cmV0dXJuIC1FTk9FTlQ7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbnQgbmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmcoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxcbitcXHRcXHRcXHRcXHQgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZSAqZnQpXFxuK3tcXG4rXFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0c1tJUF9DVF9ESVJfTUFYXSA9IHt9O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2O1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdC8qIEFsbG9jYXRlIG1pbmltYWwgZHN0cyBhbmNob3JlZCB0byB0aGUgYnJpZGdlIG1hc3RlciBkZXZpY2UgdG8gc3VwcGx5XFxuK1xcdCAqIHhtaXRfdHlwZSBhbmQgTVRVLiBBIGZ1bGwgcm91dGluZyBsb29rdXAgdmlhIG5mX3JvdXRlKCkgaXMgYXZvaWRlZFxcbitcXHQgKiBiZWNhdXNlIGl0IGZhaWxzIGZvciBwcmVmaXhlcyB0aGF0IGFyZSBicmlkZ2VkIGJ1dCBub3Qgcm91dGVkLlxcbitcXHQgKi9cXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRicl9kZXYgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXRfcmN1KHBrdC1cXHUwMDNlc2tiLVxcdTAwM2VkZXYpO1xcbitcXHRpZiAoIWJyX2RldiB8fCAhbmV0aWZfaXNfYnJpZGdlX21hc3Rlcihicl9kZXYpKSB7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElQX0NUX0RJUl9NQVg7IGkrKykge1xcbitcXHRcXHRzd2l0Y2ggKG5mdF9wZihwa3QpKSB7XFxuK1xcdFxcdGNhc2UgTkZQUk9UT19JUFY0OiB7XFxuK1xcdFxcdFxcdHN0cnVjdCBydGFibGUgKnJ0O1xcbitcXG4rXFx0XFx0XFx0cnQgPSBydF9kc3RfYWxsb2MoYnJfZGV2LCAwLCBSVE5fVU5JQ0FTVCwgdHJ1ZSk7XFxuK1xcdFxcdFxcdGlmIChydClcXG4rXFx0XFx0XFx0XFx0ZHN0c1tpXSA9IFxcdTAwMjZydC1cXHUwMDNlZHN0O1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRcXHRjYXNlIE5GUFJPVE9fSVBWNjoge1xcbitcXHRcXHRcXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0O1xcbitcXG4rXFx0XFx0XFx0cnQgPSBpcDZfZHN0X2FsbG9jKG5mdF9uZXQocGt0KSwgYnJfZGV2LCAwKTtcXG4rXFx0XFx0XFx0aWYgKHJ0KVxcbitcXHRcXHRcXHRcXHRkc3RzW2ldID0gXFx1MDAyNnJ0LVxcdTAwM2Vkc3Q7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdGlmICghZHN0c1tkaXJdIHx8ICFkc3RzWyFkaXJdKSB7XFxuK1xcdFxcdGRzdF9yZWxlYXNlKGRzdHNbZGlyXSk7XFxuK1xcdFxcdGRzdF9yZWxlYXNlKGRzdHNbIWRpcl0pO1xcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFx0fVxcbitcXG4rXFx0bmZ0X2RlZmF1bHRfZm9yd2FyZF9wYXRoKHJvdXRlLCBkc3RzW2Rpcl0sIGRpcik7XFxuK1xcdG5mdF9kZWZhdWx0X2ZvcndhcmRfcGF0aChyb3V0ZSwgZHN0c1shZGlyXSwgIWRpcik7XFxuK1xcdC8qIERyb3AgYWxsb2NhdGlvbiByZWZlcmVuY2VzOyByb3V0ZS1cXHUwMDNldHVwbGVbKl0uZHN0IGhvbGRzIHRoZSBjbG9uZXMuICovXFxuK1xcdGRzdF9yZWxlYXNlKGRzdHNbZGlyXSk7XFxuK1xcdGRzdF9yZWxlYXNlKGRzdHNbIWRpcl0pO1xcbitcXG4rXFx0aWYgKHJvdXRlLVxcdTAwM2V0dXBsZVtkaXJdLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCkge1xcbitcXHRcXHRpZiAobmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCB0cnVlLCByb3V0ZSwgY3QsIGRpciwgZnQpIHx8XFxuK1xcdFxcdCAgICBuZnRfZGV2X2ZvcndhcmRfcGF0aChwa3QsIHRydWUsIHJvdXRlLCBjdCwgIWRpciwgZnQpKSB7XFxuK1xcdFxcdFxcdGRzdF9yZWxlYXNlKHJvdXRlLVxcdTAwM2V0dXBsZVtkaXJdLmRzdCk7XFxuK1xcdFxcdFxcdGRzdF9yZWxlYXNlKHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS5kc3QpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuK1xcdFxcdCAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcXG4rXFx0XFx0ICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxcbit7XFxuK1xcdGlmIChuZnRfZmxvd19vZmZsb2FkX2lzX2JyaWRnaW5nKHBrdC1cXHUwMDNlc2tiKSlcXG4rXFx0XFx0cmV0dXJuIG5mdF9mbG93X3JvdXRlX2JyaWRnaW5nKHBrdCwgY3QsIHJvdXRlLCBkaXIsIGZ0KTtcXG4rXFxuK1xcdHJldHVybiBuZnRfZmxvd19yb3V0ZV9yb3V0aW5nKHBrdCwgY3QsIHJvdXRlLCBkaXIsIGZ0KTtcXG4rfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChuZnRfZmxvd19yb3V0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEyOjU2OjI4Ljc0MDQ3MTAzMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ2MjM0NDc5MzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX1ZMQU5fRklMVEVSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdVwiLFxuICAgIFwiYnJfdmxhbl9nZXRfb2ZmbG9hZF9pbmZvX3JjdVwiLFxuICAgIFwiYnJfdmxhbl9pc19lbmFibGVkX3JjdVwiLFxuICAgIFwiX19kZXZfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcIm5mdF9mbG93X3JvdXRlXCIsXG4gICAgXCJuZnRfZmxvd19yb3V0ZV9icmlkZ2luZ1wiLFxuICAgIFwibmZ0X2Zsb3dfb2ZmbG9hZF9pc19icmlkZ2luZ1wiLFxuICAgIFwibmZ0X2JyX3ZsYW5fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoXCIsXG4gICAgXCJuZnRfZmlsbF92bGFuX3Bhc3N0aHJvdWdoX2luZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGZsb3cgb2ZmbG9hZCBvZiBicmlkZ2VkIHRyYWZmaWMuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBjaGVjayBicmlkZ2UgRkRCIGVudHJpZXMgYW5kIFZMQU4gaW5mb3JtYXRpb24gZm9yIGZsb3cgb2ZmbG9hZCwgYW5kIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBwYXRoIHRvIGhhbmRsZSBicmlkZ2VkIHRyYWZmaWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDUyOTVkNjJlZWNmMjg5ODZlMThhYWQ3NzljZjVkY2YzZDA1OTZhZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDEyOjU2OjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaCBiL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmhcbmluZGV4IDc1NjczYjhiZmZjYjhhLi5jMWNhZTU0NzQ5YzUxNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmhcbkBAIC0xNDgsNiArMTQ4LDkgQEAgaW50IGJyX3ZsYW5fZ2V0X2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCxcbiBcdFx0ICAgICBzdHJ1Y3QgYnJpZGdlX3ZsYW5faW5mbyAqcF92aW5mbyk7XG4gaW50IGJyX3ZsYW5fZ2V0X2luZm9fcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB2aWQsXG4gXHRcdFx0IHN0cnVjdCBicmlkZ2Vfdmxhbl9pbmZvICpwX3ZpbmZvKTtcbit1MTYgYnJfdmxhbl9nZXRfb2ZmbG9hZF9pbmZvX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiAqcHJvdG8pO1xuK2Jvb2wgYnJfdmxhbl9pc19lbmFibGVkX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBib29sIGJyX21zdF9lbmFibGVkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIGludCBicl9tc3RfZ2V0X2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IG1zdGksIHVuc2lnbmVkIGxvbmcgKnZpZHMpO1xuIGludCBicl9tc3RfZ2V0X3N0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBtc3RpLCB1OCAqc3RhdGUpO1xuQEAgLTE4NCw2ICsxODcsMTcgQEAgc3RhdGljIGlubGluZSBpbnQgYnJfdmxhbl9nZXRfaW5mb19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCxcbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHUxNiBicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdFx0XHRfX2JlMTYgKnByb3RvKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgYnJfdmxhbl9pc19lbmFibGVkX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4gc3RhdGljIGlubGluZSBib29sIGJyX21zdF9lbmFibGVkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuQEAgLTIwOSw2ICsyMjMsOCBAQCB2b2lkIGJyX2ZkYl9jbGVhcl9vZmZsb2FkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB2aWQpO1xuIGJvb2wgYnJfcG9ydF9mbGFnX2lzX3NldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWcpO1xuIHU4IGJyX3BvcnRfZ2V0X3N0cF9zdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBjbG9ja190IGJyX2dldF9hZ2VpbmdfdGltZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2KTtcbitib29sIGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTggKmFkZHIpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqXG4gYnJfZmRiX2ZpbmRfcG9ydChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2LFxuQEAgLTIzNyw2ICsyNTMsMTMgQEAgc3RhdGljIGlubGluZSBjbG9ja190IGJyX2dldF9hZ2VpbmdfdGltZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2KVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRcdFx0ICAgY29uc3QgdTggKmFkZHIpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbiAjZW5kaWZcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOTk4MWQ2MzdmOGI1NDYuLmMxZDBiODk3ZGU5NTM0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTM0MjIsNiArMzQyMiw4IEBAIGludCBkZXZfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBpbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xuK2ludCBfX2Rldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LCBjb25zdCB1OCAqZGFkZHIsXG4rXHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XG4gc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZV9yY3Uoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqX19kZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2ZkYi5jIGIvbmV0L2JyaWRnZS9icl9mZGIuY1xuaW5kZXggZTQ1NzBiYmVkODU0NDUuLjMxNjFjMjY4OWY2YTZmIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9mZGIuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9mZGIuY1xuQEAgLTI2Nyw2ICsyNjcsMzggQEAgc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpicl9mZGJfZmluZF9yY3Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0cmV0dXJuIGZkYl9maW5kX3JjdShcdTAwMjZici1cdTAwM2VmZGJfaGFzaF90YmwsIGFkZHIsIHZpZCk7XG4gfVxuIFxuKy8qKlxuKyAqIGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3UgLSBjaGVjayBpZiBhIE1BQyBjYW4gYmUgZm9yd2FyZGVkIGJ5IHRoZSBicmlkZ2VcbisgKiBAZGV2OiBicmlkZ2UgcG9ydCBuZXR3b3JrIGRldmljZVxuKyAqIEBza2I6IHBhY2tldCBidWZmZXIgKHVzZWQgdG8gZGV0ZXJtaW5lIFZMQU4gaWQpXG4rICogQGFkZHI6IGRlc3RpbmF0aW9uIE1BQyBhZGRyZXNzXG4rICpcbisgKiBSZXNvbHZlcyB0aGUgVkxBTiBpZCBmb3IgQHNrYiBvbiBAZGV2IChza2IgVkxBTiB0YWcgd2hlbiBwcmVzZW50LCBQVklEXG4rICogd2hlbiBWTEFOIGZpbHRlcmluZyBpcyBlbmFibGVkLCAwIG90aGVyd2lzZSkgdGhlbiBjaGVja3Mgd2hldGhlciB0aGUgYnJpZGdlXG4rICogRkRCIGNvbnRhaW5zIGEgZm9yd2FyZGluZyBlbnRyeSAoZHN0ICE9IE5VTEwsIG5vdCBhIGxvY2FsL3NlbGYgZW50cnkpIGZvclxuKyAqIEBhZGRyIGFuZCB0aGF0IFZMQU4gaWQuIFNpbmdsZSBicl9wb3J0X2dldF9yY3UoKSBsb29rdXAuXG4rICogTXVzdCBiZSBjYWxsZWQgdW5kZXIgUkNVIHJlYWQgbG9jay5cbisgKi9cbitib29sIGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTggKmFkZHIpXG4re1xuK1x0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IGJyX3BvcnRfZ2V0X3JjdShkZXYpO1xuK1x0c3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmZGI7XG4rXHR1MTYgdmlkID0gMDtcbitcbitcdGlmICghcG9ydClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKGJyX29wdF9nZXQocG9ydC1cdTAwM2ViciwgQlJPUFRfVkxBTl9FTkFCTEVEKSkge1xuK1x0XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSlcbitcdFx0XHR2aWQgPSBza2Jfdmxhbl90YWdfZ2V0X2lkKHNrYik7XG4rXHRcdGVsc2VcbitcdFx0XHRicl92bGFuX2dldF9wdmlkX3JjdShkZXYsIFx1MDAyNnZpZCk7XG4rXHR9XG4rXHRmZGIgPSBicl9mZGJfZmluZF9yY3UocG9ydC1cdTAwM2ViciwgYWRkciwgdmlkKTtcbitcdHJldHVybiBmZGIgXHUwMDI2XHUwMDI2IGZkYi1cdTAwM2Vkc3Q7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3UpO1xuK1xuIC8qIFdoZW4gYSBzdGF0aWMgRkRCIGVudHJ5IGlzIGFkZGVkLCB0aGUgbWFjIGFkZHJlc3MgZnJvbSB0aGUgZW50cnkgaXNcbiAgKiBhZGRlZCB0byB0aGUgYnJpZGdlIHByaXZhdGUgSFcgYWRkcmVzcyBsaXN0IGFuZCBhbGwgcmVxdWlyZWQgcG9ydHNcbiAgKiBhcmUgdGhlbiB1cGRhdGVkIHdpdGggdGhlIG5ldyBpbmZvcm1hdGlvbi5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ZsYW4uYyBiL25ldC9icmlkZ2UvYnJfdmxhbi5jXG5pbmRleCA1NTYwYWZjYWFjYTMyNy4uMGIyOTYzNjJhZGY3YzkgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xuKysrIGIvbmV0L2JyaWRnZS9icl92bGFuLmNcbkBAIC0xNTU5LDYgKzE1NTksNTEgQEAgaW50IGJyX3ZsYW5fZ2V0X2luZm9fcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB2aWQsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGJyX3ZsYW5fZ2V0X2luZm9fcmN1KTtcbiBcbisvKipcbisgKiBicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1IC0gZ2V0IFZMQU4gaWQgYW5kIHByb3RvY29sIGZvciBicmlkZ2UgZmxvdyBvZmZsb2FkXG4rICogQGRldjogYnJpZGdlIHBvcnQgbmV0d29yayBkZXZpY2VcbisgKiBAc2tiOiBwYWNrZXQgYnVmZmVyXG4rICogQHByb3RvOiBvdXRwdXQgZm9yIHRoZSBicmlkZ2UgVkxBTiBwcm90b2NvbCAoc2V0IG9ubHkgd2hlbiByZXR1cm4gdmFsdWUgIT0gMClcbisgKlxuKyAqIFdoZW4gVkxBTiBmaWx0ZXJpbmcgaXMgZW5hYmxlZCwgcmVzb2x2ZXMgdGhlIFZMQU4gaWQgZm9yIGZsb3cgb2ZmbG9hZCAoc2tiXG4rICogVkxBTiB0YWcgaWQgaWYgcHJlc2VudCwgUFZJRCBvdGhlcndpc2UpIGFuZCB3cml0ZXMgdGhlIGJyaWRnZSBWTEFOIHByb3RvY29sXG4rICogdG8gQHByb3RvLiBSZXR1cm5zIDAgd2hlbiBmaWx0ZXJpbmcgaXMgb2ZmIG9yIEBkZXYgaXMgbm90IGEgYnJpZGdlIHBvcnQuXG4rICogU2luZ2xlIGJyX3BvcnRfZ2V0X3JjdSgpIGxvb2t1cC4gTXVzdCBiZSBjYWxsZWQgdW5kZXIgUkNVIHJlYWQgbG9jay5cbisgKi9cbit1MTYgYnJfdmxhbl9nZXRfb2ZmbG9hZF9pbmZvX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiAqcHJvdG8pXG4re1xuK1x0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IGJyX3BvcnRfZ2V0X3JjdShkZXYpO1xuK1x0dTE2IHZpZCA9IDA7XG4rXG4rXHRpZiAoIXBvcnQgfHwgIWJyX29wdF9nZXQocG9ydC1cdTAwM2ViciwgQlJPUFRfVkxBTl9FTkFCTEVEKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSlcbitcdFx0dmlkID0gc2tiX3ZsYW5fdGFnX2dldF9pZChza2IpO1xuK1x0ZWxzZVxuK1x0XHRicl92bGFuX2dldF9wdmlkX3JjdShkZXYsIFx1MDAyNnZpZCk7XG4rXHRpZiAodmlkKVxuK1x0XHQqcHJvdG8gPSBwb3J0LVx1MDAzZWJyLVx1MDAzZXZsYW5fcHJvdG87XG4rXHRyZXR1cm4gdmlkO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1KTtcbitcbisvKipcbisgKiBicl92bGFuX2lzX2VuYWJsZWRfcmN1IC0gY2hlY2sgaWYgVkxBTiBmaWx0ZXJpbmcgaXMgYWN0aXZlIG9uIGEgcG9ydCdzIGJyaWRnZVxuKyAqIEBkZXY6IGJyaWRnZSBwb3J0IG5ldHdvcmsgZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zIHRydWUgaWYgVkxBTiBmaWx0ZXJpbmcgaXMgZW5hYmxlZCBvbiB0aGUgYnJpZGdlIEBkZXYgYmVsb25ncyB0by5cbisgKiBSZXR1cm5zIGZhbHNlIHdoZW4gQGRldiBpcyBub3QgYSBicmlkZ2UgcG9ydCBvciBmaWx0ZXJpbmcgaXMgb2ZmLlxuKyAqIE11c3QgYmUgY2FsbGVkIHVuZGVyIFJDVSByZWFkIGxvY2suXG4rICovXG4rYm9vbCBicl92bGFuX2lzX2VuYWJsZWRfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IGJyX3BvcnRfZ2V0X3JjdShkZXYpO1xuK1xuK1x0cmV0dXJuIHBvcnQgXHUwMDI2XHUwMDI2IGJyX29wdF9nZXQocG9ydC1cdTAwM2ViciwgQlJPUFRfVkxBTl9FTkFCTEVEKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoYnJfdmxhbl9pc19lbmFibGVkX3JjdSk7XG4rXG4gc3RhdGljIGludCBicl92bGFuX2lzX2JpbmRfdmxhbl9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRyZXR1cm4gaXNfdmxhbl9kZXYoZGV2KSBcdTAwMjZcdTAwMjZcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCA0YjNkNWNmZGY2ZTAwZi4uNjJmMWQwYjY0Yzc2ZGUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC03NTAsNDQgKzc1MCw1MiBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqZGV2X2Z3ZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuIFx0cmV0dXJuIFx1MDAyNnN0YWNrLVx1MDAzZXBhdGhba107XG4gfVxuIFxuLWludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuLVx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4raW50IF9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsIGNvbnN0IHU4ICpkYWRkcixcbitcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmxhc3RfZGV2O1xuLVx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0ge1xuLVx0XHQuZGV2XHQ9IGRldixcbi1cdH07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoO1xuIFx0aW50IHJldCA9IDA7XG4gXG4tXHRtZW1jcHkoY3R4LmRhZGRyLCBkYWRkciwgc2l6ZW9mKGN0eC5kYWRkcikpO1xuK1x0bWVtY3B5KGN0eC1cdTAwM2VkYWRkciwgZGFkZHIsIHNpemVvZihjdHgtXHUwMDNlZGFkZHIpKTtcbiBcdHN0YWNrLVx1MDAzZW51bV9wYXRocyA9IDA7XG4tXHR3aGlsZSAoY3R4LmRldiBcdTAwMjZcdTAwMjYgY3R4LmRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aCkge1xuLVx0XHRsYXN0X2RldiA9IGN0eC5kZXY7XG4rXHR3aGlsZSAoY3R4LVx1MDAzZWRldiBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZWRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aCkge1xuK1x0XHRsYXN0X2RldiA9IGN0eC1cdTAwM2VkZXY7XG4gXHRcdHBhdGggPSBkZXZfZndkX3BhdGgoc3RhY2spO1xuIFx0XHRpZiAoIXBhdGgpXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFxuIFx0XHRtZW1zZXQocGF0aCwgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGgpKTtcbi1cdFx0cmV0ID0gY3R4LmRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aChcdTAwMjZjdHgsIHBhdGgpO1xuK1x0XHRyZXQgPSBjdHgtXHUwMDNlZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFxuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC5kZXYpKVxuK1x0XHRpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC1cdTAwM2VkZXYpKVxuIFx0XHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbi1cdGlmICghY3R4LmRldilcbitcdGlmICghY3R4LVx1MDAzZWRldilcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHBhdGggPSBkZXZfZndkX3BhdGgoc3RhY2spO1xuIFx0aWYgKCFwYXRoKVxuIFx0XHRyZXR1cm4gLTE7XG4gXHRwYXRoLVx1MDAzZXR5cGUgPSBERVZfUEFUSF9FVEhFUk5FVDtcbi1cdHBhdGgtXHUwMDNlZGV2ID0gY3R4LmRldjtcbitcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuK0VYUE9SVF9TWU1CT0xfR1BMKF9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcbitcbitpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcbitcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHtcbitcdFx0LmRldlx0PSBkZXYsXG4rXHR9O1xuK1xuK1x0cmV0dXJuIF9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKFx1MDAyNmN0eCwgZGFkZHIsIHN0YWNrKTtcbit9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcbiBcbiAvKiBtdXN0IGJlIGNhbGxlZCB1bmRlciByY3VfcmVhZF9sb2NrKCksIGFzIHdlIGRvbnQgdGFrZSBhIHJlZmVyZW5jZSAqL1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXG5pbmRleCA5OGMwM2I0ODdmNTIxMS4uZDE1YzQyNWM4OGM0YWEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXG5AQCAtMTUsNiArMTUsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYnJpZGdlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9ldGhlci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L3JvdXRlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2VcbiBcbiBzdGF0aWMgZW51bSBmbG93X29mZmxvYWRfeG1pdF90eXBlIG5mdF94bWl0X3R5cGUoc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuIHtcbkBAIC00Miw3ICs0NywyNSBAQCBzdGF0aWMgYm9vbCBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbitzdGF0aWMgYm9vbCBuZnRfZmxvd19vZmZsb2FkX2lzX2JyaWRnaW5nKHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0Ym9vbCByZXQ7XG4rXG4rXHRpZiAoIW5ldGlmX2lzX2JyaWRnZV9wb3J0KHNrYi1cdTAwM2VkZXYpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoIXNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0cmV0ID0gYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdShza2ItXHUwMDNlZGV2LCBza2IsXG4rXHRcdFx0XHRcdCAgICAgIGV0aF9oZHIoc2tiKS1cdTAwM2VoX2Rlc3QpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbitcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdFx0XHRcdCAgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwgdTggKmhhLFxuQEAgLTU4LDYgKzgxLDEyIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuK1x0LyogQnJpZGdpbmcgZmFzdHBhdGggY29waWVzIEV0aGVybmV0IGFkZHJlc3NlcyBpbnRvIGhhOyBkbyBub3QgcmVwbGFjZVxuK1x0ICogdGhlbSB2aWEgbmVpZ2hib3VyIGxvb2t1cCBvbiB0aGUgcm91dGVkIGRlc3RpbmF0aW9uIGRldmljZS5cbitcdCAqL1xuK1x0aWYgKCFpc196ZXJvX2V0aGVyX2FkZHIoaGEpKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdG4gPSBkc3RfbmVpZ2hfbG9va3VwKGRzdF9jYWNoZSwgZGFkZHIpO1xuIFx0aWYgKCFuKVxuIFx0XHRyZXR1cm4gLTE7XG5AQCAtNzIsNyArMTAxLDIzIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4gXHRcdHJldHVybiAtMTtcbiBcbiBvdXQ6XG4tXHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgaGEsIHN0YWNrKTtcbitcdHJldHVybiBfX2Rldl9maWxsX2ZvcndhcmRfcGF0aChjdHgsIGhhLCBzdGFjayk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG5mdF9icl92bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbitcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eClcbit7XG4rXHRfX2JlMTYgcHJvdG8gPSAwO1xuK1x0dTE2IHZsYW5faWQ7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHR2bGFuX2lkID0gYnJfdmxhbl9nZXRfb2ZmbG9hZF9pbmZvX3JjdShwa3QtXHUwMDNlc2tiLVx1MDAzZWRldiwgcGt0LVx1MDAzZXNrYiwgXHUwMDI2cHJvdG8pO1xuK1x0aWYgKHZsYW5faWQpIHtcbitcdFx0Y3R4LVx1MDAzZW51bV92bGFucyA9IDE7XG4rXHRcdGN0eC1cdTAwM2V2bGFuWzBdLmlkID0gdmxhbl9pZDtcbitcdFx0Y3R4LVx1MDAzZXZsYW5bMF0ucHJvdG8gPSBwcm90bztcbitcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7XG5AQCAtOTIsNiArMTM3LDI5IEBAIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHtcbiBcdGVudW0gZmxvd19vZmZsb2FkX3htaXRfdHlwZSB4bWl0X3R5cGU7XG4gfTtcbiBcbitzdGF0aWMgdm9pZCBuZnRfZmlsbF92bGFuX3Bhc3N0aHJvdWdoX2luZm8oY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvICppbmZvKVxuK3tcbitcdGlmICghc2tiX3ZsYW5fdGFnX3ByZXNlbnQocGt0LVx1MDAzZXNrYikpXG4rXHRcdHJldHVybjtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdC8qIHdoZW4gYnJpZGdlIFZMQU4gZmlsdGVyaW5nIGlzIGVuYWJsZWQsIHRoZSBicmlkZ2UgaGFuZGxlcyB0aGUgdGFnICovXG4rXHRpZiAobmV0aWZfaXNfYnJpZGdlX3BvcnQocGt0LVx1MDAzZXNrYi1cdTAwM2VkZXYpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFicl92bGFuX2lzX2VuYWJsZWRfcmN1KHBrdC1cdTAwM2Vza2ItXHUwMDNlZGV2KSkge1xuK1x0XHRpZiAoaW5mby1cdTAwM2VudW1fZW5jYXBzIFx1MDAzZT0gTkZfRkxPV19UQUJMRV9FTkNBUF9NQVgpIHtcbitcdFx0XHRpbmZvLVx1MDAzZWluZGV2ID0gTlVMTDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRpbmZvLVx1MDAzZWVuY2FwW2luZm8tXHUwMDNlbnVtX2VuY2Fwc10uaWQgPVxuK1x0XHRcdFx0c2tiX3ZsYW5fdGFnX2dldF9pZChwa3QtXHUwMDNlc2tiKTtcbitcdFx0XHRpbmZvLVx1MDAzZWVuY2FwW2luZm8tXHUwMDNlbnVtX2VuY2Fwc10ucHJvdG8gPVxuK1x0XHRcdFx0cGt0LVx1MDAzZXNrYi1cdTAwM2V2bGFuX3Byb3RvO1xuK1x0XHRcdGluZm8tXHUwMDNlbnVtX2VuY2FwcysrO1xuK1x0XHR9XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbit9XG4rXG4gc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcdFx0XHQgICAgIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvICppbmZvLFxuIFx0XHRcdCAgICAgdW5zaWduZWQgY2hhciAqaGEsIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbkBAIC0xMDMsMTMgKzE3MSwxMyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLFxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3RhY2stXHUwMDNlbnVtX3BhdGhzOyBpKyspIHtcbiBcdFx0cGF0aCA9IFx1MDAyNnN0YWNrLVx1MDAzZXBhdGhbaV07XG4rXHRcdGluZm8tXHUwMDNlaW5kZXYgPSBwYXRoLVx1MDAzZWRldjtcbiBcdFx0c3dpdGNoIChwYXRoLVx1MDAzZXR5cGUpIHtcbiBcdFx0Y2FzZSBERVZfUEFUSF9FVEhFUk5FVDpcbiBcdFx0Y2FzZSBERVZfUEFUSF9EU0E6XG4gXHRcdGNhc2UgREVWX1BBVEhfVkxBTjpcbiBcdFx0Y2FzZSBERVZfUEFUSF9QUFBPRTpcbiBcdFx0Y2FzZSBERVZfUEFUSF9UVU46XG4tXHRcdFx0aW5mby1cdTAwM2VpbmRldiA9IHBhdGgtXHUwMDNlZGV2O1xuIFx0XHRcdGlmIChpc196ZXJvX2V0aGVyX2FkZHIoaW5mby1cdTAwM2VoX3NvdXJjZSkpXG4gXHRcdFx0XHRtZW1jcHkoaW5mby1cdTAwM2VoX3NvdXJjZSwgcGF0aC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcbiBcbkBAIC0xNzUsNiArMjQzLDEwIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0fVxuIFx0XHRcdGluZm8tXHUwMDNleG1pdF90eXBlID0gRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIERFVl9QQVRIX01US19XRE1BOlxuK1x0XHRcdGlmIChpc196ZXJvX2V0aGVyX2FkZHIoaW5mby1cdTAwM2VoX3NvdXJjZSkpXG4rXHRcdFx0XHRtZW1jcHkoaW5mby1cdTAwM2VoX3NvdXJjZSwgcGF0aC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcbitcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXHRcdH1cbkBAIC0yNDQsNiArMzE2LDcgQEAgc3RhdGljIGludCBuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIH1cbiBcbiBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuK1x0XHRcdFx0Ym9vbCBpc19icmlkZ2luZyxcbiBcdFx0XHRcdHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdFx0XHRcdGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG5AQCAtMjUxLDEyICszMjQsMzggQEAgc3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSByb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLmRzdDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgc3RhY2s7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XG4rXHRcdC5kZXZcdD0gZHN0LVx1MDAzZWRldixcbitcdH07XG4gXHRzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyBpbmZvID0ge307XG4rXHRlbnVtIGlwX2Nvbm50cmFja19pbmZvIHBrdF9jdGluZm87XG4rXHRlbnVtIGlwX2Nvbm50cmFja19kaXIgc2tiX2RpcjtcbitcdHN0cnVjdCBldGhoZHIgKmV0aDtcbiBcdHVuc2lnbmVkIGNoYXIgaGFbRVRIX0FMRU5dO1xuIFx0aW50IGk7XG4gXG4tXHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChyb3V0ZSwgZHN0LCBjdCwgZGlyLCBoYSwgXHUwMDI2c3RhY2spIFx1MDAzYyAwIHx8XG4tXHQgICAgbmZ0X2Rldl9wYXRoX2luZm8oXHUwMDI2c3RhY2ssIFx1MDAyNmluZm8sIGhhLCBcdTAwMjZmdC1cdTAwM2VkYXRhKSBcdTAwM2MgMClcbitcdG1lbXNldChoYSwgMCwgc2l6ZW9mKGhhKSk7XG4rXG4rXHRpZiAoaXNfYnJpZGdpbmcpIHtcbitcdFx0bmZfY3RfZ2V0KHBrdC1cdTAwM2Vza2IsIFx1MDAyNnBrdF9jdGluZm8pO1xuK1x0XHRldGggPSBldGhfaGRyKHBrdC1cdTAwM2Vza2IpO1xuK1x0XHRza2JfZGlyID0gQ1RJTkZPMkRJUihwa3RfY3RpbmZvKTtcbitcdFx0aWYgKHNrYl9kaXIgIT0gZGlyKSB7XG4rXHRcdFx0bWVtY3B5KGhhLCBldGgtXHUwMDNlaF9zb3VyY2UsIEVUSF9BTEVOKTtcbitcdFx0XHRtZW1jcHkoaW5mby5oX3NvdXJjZSwgZXRoLVx1MDAzZWhfZGVzdCwgRVRIX0FMRU4pO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdG1lbWNweShoYSwgZXRoLVx1MDAzZWhfZGVzdCwgRVRIX0FMRU4pO1xuK1x0XHRcdG1lbWNweShpbmZvLmhfc291cmNlLCBldGgtXHUwMDNlaF9zb3VyY2UsIEVUSF9BTEVOKTtcbitcdFx0fVxuK1x0XHRuZnRfYnJfdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgocGt0LCBcdTAwMjZjdHgpO1xuK1x0fVxuK1xuK1x0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoXHUwMDI2Y3R4LCByb3V0ZSwgZHN0LCBjdCwgZGlyLCBoYSwgXHUwMDI2c3RhY2spIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcbitcdG5mdF9maWxsX3ZsYW5fcGFzc3Rocm91Z2hfaW5mbyhwa3QsIFx1MDAyNmluZm8pO1xuK1xuK1x0aWYgKG5mdF9kZXZfcGF0aF9pbmZvKFx1MDAyNnN0YWNrLCBcdTAwMjZpbmZvLCBoYSwgXHUwMDI2ZnQtXHUwMDNlZGF0YSkgXHUwMDNjIDApXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuIFx0aWYgKCFuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGluZm8uaW5kZXYsIGZ0KSlcbkBAIC0yOTIsOSArMzkxLDExIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tXHRcdCAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbi1cdFx0ICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxuK3N0YXRpYyBpbnQgbmZ0X2Zsb3dfcm91dGVfcm91dGluZyhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbitcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuK1x0XHRcdFx0ICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4rXHRcdFx0XHQgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdClcbiB7XG4gXHRzdHJ1Y3QgZHN0X2VudHJ5ICp0aGlzX2RzdCA9IHNrYl9kc3QocGt0LVx1MDAzZXNrYik7XG4gXHRzdHJ1Y3QgZHN0X2VudHJ5ICpvdGhlcl9kc3QgPSBOVUxMO1xuQEAgLTMzNCwxMiArNDM1LDEyIEBAIGludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0bmZ0X2RlZmF1bHRfZm9yd2FyZF9wYXRoKHJvdXRlLCB0aGlzX2RzdCwgZGlyKTtcbiBcdG5mdF9kZWZhdWx0X2ZvcndhcmRfcGF0aChyb3V0ZSwgb3RoZXJfZHN0LCAhZGlyKTtcbiBcbi1cdGlmIChyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLnhtaXRfdHlwZVx0PT0gRkxPV19PRkZMT0FEX1hNSVRfTkVJR0ggXHUwMDI2XHUwMDI2XG4tXHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCByb3V0ZSwgY3QsIGRpciwgZnQpIFx1MDAzYyAwKVxuK1x0aWYgKHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0ueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgZmFsc2UsIHJvdXRlLCBjdCwgZGlyLCBmdCkgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX2RzdF9yZWxlYXNlO1xuIFxuIFx0aWYgKHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCBcdTAwMjZcdTAwMjZcbi1cdCAgICBuZnRfZGV2X2ZvcndhcmRfcGF0aChwa3QsIHJvdXRlLCBjdCwgIWRpciwgZnQpIFx1MDAzYyAwKVxuK1x0ICAgIG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgZmFsc2UsIHJvdXRlLCBjdCwgIWRpciwgZnQpIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9kc3RfcmVsZWFzZTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTM0OSw0ICs0NTAsODIgQEAgaW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRkc3RfcmVsZWFzZShyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5kc3QpO1xuIFx0cmV0dXJuIC1FTk9FTlQ7XG4gfVxuK1xuK3N0YXRpYyBpbnQgbmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmcoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4rXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4rXHRcdFx0XHQgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuK1x0XHRcdFx0ICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxuK3tcbitcdHN0cnVjdCBkc3RfZW50cnkgKmRzdHNbSVBfQ1RfRElSX01BWF0gPSB7fTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpicl9kZXY7XG4rXHRpbnQgaTtcbitcbitcdC8qIEFsbG9jYXRlIG1pbmltYWwgZHN0cyBhbmNob3JlZCB0byB0aGUgYnJpZGdlIG1hc3RlciBkZXZpY2UgdG8gc3VwcGx5XG4rXHQgKiB4bWl0X3R5cGUgYW5kIE1UVS4gQSBmdWxsIHJvdXRpbmcgbG9va3VwIHZpYSBuZl9yb3V0ZSgpIGlzIGF2b2lkZWRcbitcdCAqIGJlY2F1c2UgaXQgZmFpbHMgZm9yIHByZWZpeGVzIHRoYXQgYXJlIGJyaWRnZWQgYnV0IG5vdCByb3V0ZWQuXG4rXHQgKi9cbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGJyX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldF9yY3UocGt0LVx1MDAzZXNrYi1cdTAwM2VkZXYpO1xuK1x0aWYgKCFicl9kZXYgfHwgIW5ldGlmX2lzX2JyaWRnZV9tYXN0ZXIoYnJfZGV2KSkge1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUF9DVF9ESVJfTUFYOyBpKyspIHtcbitcdFx0c3dpdGNoIChuZnRfcGYocGt0KSkge1xuK1x0XHRjYXNlIE5GUFJPVE9fSVBWNDoge1xuK1x0XHRcdHN0cnVjdCBydGFibGUgKnJ0O1xuK1xuK1x0XHRcdHJ0ID0gcnRfZHN0X2FsbG9jKGJyX2RldiwgMCwgUlROX1VOSUNBU1QsIHRydWUpO1xuK1x0XHRcdGlmIChydClcbitcdFx0XHRcdGRzdHNbaV0gPSBcdTAwMjZydC1cdTAwM2Vkc3Q7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0Y2FzZSBORlBST1RPX0lQVjY6IHtcbitcdFx0XHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0O1xuK1xuK1x0XHRcdHJ0ID0gaXA2X2RzdF9hbGxvYyhuZnRfbmV0KHBrdCksIGJyX2RldiwgMCk7XG4rXHRcdFx0aWYgKHJ0KVxuK1x0XHRcdFx0ZHN0c1tpXSA9IFx1MDAyNnJ0LVx1MDAzZWRzdDtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdGlmICghZHN0c1tkaXJdIHx8ICFkc3RzWyFkaXJdKSB7XG4rXHRcdGRzdF9yZWxlYXNlKGRzdHNbZGlyXSk7XG4rXHRcdGRzdF9yZWxlYXNlKGRzdHNbIWRpcl0pO1xuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcdH1cbitcbitcdG5mdF9kZWZhdWx0X2ZvcndhcmRfcGF0aChyb3V0ZSwgZHN0c1tkaXJdLCBkaXIpO1xuK1x0bmZ0X2RlZmF1bHRfZm9yd2FyZF9wYXRoKHJvdXRlLCBkc3RzWyFkaXJdLCAhZGlyKTtcbitcdC8qIERyb3AgYWxsb2NhdGlvbiByZWZlcmVuY2VzOyByb3V0ZS1cdTAwM2V0dXBsZVsqXS5kc3QgaG9sZHMgdGhlIGNsb25lcy4gKi9cbitcdGRzdF9yZWxlYXNlKGRzdHNbZGlyXSk7XG4rXHRkc3RfcmVsZWFzZShkc3RzWyFkaXJdKTtcbitcbitcdGlmIChyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCBcdTAwMjZcdTAwMjZcbitcdCAgICByb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS54bWl0X3R5cGUgPT0gRkxPV19PRkZMT0FEX1hNSVRfTkVJR0gpIHtcbitcdFx0aWYgKG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgdHJ1ZSwgcm91dGUsIGN0LCBkaXIsIGZ0KSB8fFxuK1x0XHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCB0cnVlLCByb3V0ZSwgY3QsICFkaXIsIGZ0KSkge1xuK1x0XHRcdGRzdF9yZWxlYXNlKHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0uZHN0KTtcbitcdFx0XHRkc3RfcmVsZWFzZShyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5kc3QpO1xuK1x0XHRcdHJldHVybiAtRU5PRU5UO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4rXHRcdCAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbitcdFx0ICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxuK3tcbitcdGlmIChuZnRfZmxvd19vZmZsb2FkX2lzX2JyaWRnaW5nKHBrdC1cdTAwM2Vza2IpKVxuK1x0XHRyZXR1cm4gbmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmcocGt0LCBjdCwgcm91dGUsIGRpciwgZnQpO1xuK1xuK1x0cmV0dXJuIG5mdF9mbG93X3JvdXRlX3JvdXRpbmcocGt0LCBjdCwgcm91dGUsIGRpciwgZnQpO1xuK31cbiBFWFBPUlRfU1lNQk9MX0dQTChuZnRfZmxvd19yb3V0ZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMjo1NjoyOC43NDA0NzI4MjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTI5MjkzODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJyaWRnZWQgVHJhZmZpYyBGbG93IE9mZmxvYWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgbmV3IHBhdGNoIHRoYXQgc2VlbXMgdG8gaW50cm9kdWNlIGZsb3cgb2ZmbG9hZCBzdXBwb3J0IGZvciBicmlkZ2VkIHRyYWZmaWMsIHdoaWNoIGlzIGEgcHJldHR5IGludGVyZXN0aW5nIGRldmVsb3BtZW50LiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZXMgYXJlIGNvbmNlbnRyYXRlZCBpbiBgbmV0L2JyaWRnZS9icl9mZGIuY2AsIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AsIGBuZXQvY29yZS9kZXYuY2AsIGFuZCBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY2AuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlc2UgbmV3IGZ1bmN0aW9ucyBsaWtlIGBicl9mZGJfaGFzX2ZvcndhcmRpbmdfZW50cnlfcmN1YCwgYGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3VgLCBgYnJfdmxhbl9pc19lbmFibGVkX3JjdWAsIGFuZCBgX19kZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGFyZSBleGFjdGx5IHdoYXQgSSB3b3VsZCBleHBlY3QgdG8gc2VlIGZvciBzb21ldGhpbmcgbGlrZSB0aGlzLiBBbmQgdGhlIG1vZGlmaWNhdGlvbiB0byBgbmZ0X2Zsb3dfcm91dGVgLCBwYXJ0aWN1bGFybHkgdGhlIGFkZGl0aW9uIG9mIGBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZ2AsIHN1Z2dlc3RzIGEgY2xlYXIgaW50ZWdyYXRpb24gd2l0aCB0aGUgTmV0ZmlsdGVyIGZsb3cgdGFibGUgZnJhbWV3b3JrLlxuXG5Gcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGlzIGNvZGUgbG9va3MgZnVuY3Rpb25hbCBhbmQgdGhlIGxvZ2ljIGlzIHJlYWNoYWJsZSwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGdldCB0aGlzIGludG8gYSBmdXp6aW5nIHJlZ2ltZS4gVGhhdCBzZWVtcyBsaWtlIGEgd29ydGh3aGlsZSB0ZXN0IHN0cmF0ZWd5LlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIE9idmlvdXNseSwgYENPTkZJR19ORl9GTE9XX1RBQkxFYCBpcyBnb2luZyB0byBiZSByZXF1aXJlZCwgdGhhdCdzIGEgbm8tYnJhaW5lci4gYENPTkZJR19CUklER0VgIGlzIGFub3RoZXIgb2J2aW91cyBvbmUuIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBpcyBhIG1heWJlLCBiYXNlZCBvbiB0aGUgYGJyX3ZsYW5gIGZpbGVzLCBzbyBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IG9uZS4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2Agb3Igc2ltaWxhciBmaWxlcyBmb3IgYG5mX2Zsb3dfdGFibGVfcGF0aC5jYCB0byBjb25maXJtLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgcHJldHR5IGNsZWFyIHBpY3R1cmUgb2YgdGhlIG5lY2Vzc2FyeSBlbnZpcm9ubWVudCB0byByZXByb2R1Y2UgYW5kIHZhbGlkYXRlIHRoZSBwYXRjaCdzIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NTUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMjo1NjozNC42Njk3NjgzNjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQyODc1NDc1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X3RhYmxlX3BhdGgub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE0Mz1uZl9mbG93X3RhYmxlLW9ianNcXHRcXHQ6PSBuZl9mbG93X3RhYmxlX2NvcmUubyBuZl9mbG93X3RhYmxlX2lwLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ0OlxcdFxcdFxcdFxcdCAgIG5mX2Zsb3dfdGFibGVfcGF0aC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0NS1cXHRcXHRcXHRcXHQgICBuZl9mbG93X3RhYmxlX29mZmxvYWQubyBuZl9mbG93X3RhYmxlX3hkcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEyOjU2OjM4LjA5ODUyODIwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDcwMTgxNzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipORl9GTE9XX1RBQkxFIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYENPTkZJR19ORl9GTE9XX1RBQkxFYC4gUmlnaHQsIHRoYXQncyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3ltYm9sIHRoYXQgZGlyZWN0bHkgY29udHJvbHMgd2hldGhlciB0aGUgYG5mX2Zsb3dfdGFibGVgIG9iamVjdCBmaWxlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiBJdCdzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBkZXBlbmRlbmN5LCBubyByZWFsIHN1cnByaXNlcyB0aGVyZS4gSSdtIGFzc3VtaW5nIHRoYXQgdGhpcyBpcyBhIGNyaXRpY2FsIG1vZHVsZSBmb3IgYW55IHN5c3RlbSB1c2luZyBjb25uZWN0aW9uIHRyYWNraW5nIG9yIE5ldGZpbHRlcidzIGZsb3cgdGFibGUgaW1wbGVtZW50YXRpb24uIFRoZSBpbXBhY3Qgb2YgdGhpcyBzZXR0aW5nIHdpbGwgZGVwZW5kIG9uIHRoZSByZXN0IG9mIG15IGNvbmZpZ3VyYXRpb24sIG9mIGNvdXJzZSAtIHBhcnRpY3VsYXJseSBob3cgdGhlIGtlcm5lbCBpcyBjb21waWxlZCBhbmQgd2hpY2ggZmVhdHVyZXMgSSBoYXZlIGVuYWJsZWQuIEkgd2FudCB0byBkaXZlIGEgbGl0dGxlIGRlZXBlciwgSSdkIHNheSBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgaXMgYSBoYXJkIG9yIHNvZnQgZGVwZW5kZW5jeSBvbiBvdGhlciBwYXJ0cyBvZiB0aGUgTmV0ZmlsdGVyIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTczMiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEyOjU3OjE1LjU2ODcxMTYxNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ0MTg2Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9GTE9XX1RBQkxFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEyLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MjE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cXHRib29sIFxcXCJTdXBwbHkgZmxvdyB0YWJsZSBzdGF0aXN0aWNzIGluIHByb2Nmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTI6NTc6MTcuNzEyOTA1NzY0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc4NzUzOTYzMjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgQnJpZGdlIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgcmlnaHQgaW4uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBjb3JlIGJyaWRnZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byBjb25maXJtIHRoZSBwcmVzZW5jZSBhbmQgc3RhdHVzIG9mIGJvdGggYENPTkZJR19CUklER0VgIGFuZCBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AuIFRoYXQncyB0aGUgYmFzZWxpbmUuIEknbSBnb2luZyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBgbmV0L2JyaWRnZS9LY29uZmlnYCBmaWxlLiBJdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlc2Ugc2V0dGluZ3MgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gSSdtIGVzc2VudGlhbGx5IGxvb2tpbmcgZm9yIHRoZSBmb3VuZGF0aW9uYWwgZGVmaW5pdGlvbnMgYW5kIGFueSBhc3NvY2lhdGVkIGNvbmRpdGlvbmFsIGxvZ2ljIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBBIHF1aWNrIGNoZWNrIGhlcmUgd2lsbCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBicmlkZ2UgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIGFuZCBpZiBWTEFOIGZpbHRlcmluZyBpcyBzdXBwb3J0ZWQgYXQgdGhlIGNvbmZpZ3VyYXRpb24gbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTY1LCJPdXRwdXRUb2tlbnMiOjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTM6MDA6MTYuNDY2ODcxNDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkyNjk4MzAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlJJREdFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTIyMD1jb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXFxuLS1cXG5uZXQvS2NvbmZpZy0yMzAtXFxubmV0L0tjb25maWc6MjMxOmNvbmZpZyBCUklER0VfTkVURklMVEVSXFxubmV0L0tjb25maWctMjMyLVxcdHRyaXN0YXRlIFxcXCJCcmlkZ2VkIElQL0FSUCBwYWNrZXRzIGZpbHRlcmluZ1xcXCJcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy01LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo2OmNvbmZpZyBCUklER0VcXG5uZXQvYnJpZGdlL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXFxcIlxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTM1LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcXG5uZXQvYnJpZGdlL0tjb25maWctMzctXFx0Ym9vbCBcXFwiSUdNUC9NTEQgc25vb3BpbmdcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNDktXFxubmV0L2JyaWRnZS9LY29uZmlnOjUwOmNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiVkxBTiBmaWx0ZXJpbmdcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNjMtXFxubmV0L2JyaWRnZS9LY29uZmlnOjY0OmNvbmZpZyBCUklER0VfTVJQXFxubmV0L2JyaWRnZS9LY29uZmlnLTY1LVxcdGJvb2wgXFxcIk1SUCBwcm90b2NvbFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy03NS1cXG5uZXQvYnJpZGdlL0tjb25maWc6NzY6Y29uZmlnIEJSSURHRV9DRk1cXG5uZXQvYnJpZGdlL0tjb25maWctNzctXFx0Ym9vbCBcXFwiQ0ZNIHByb3RvY29sXFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz0yOD1jb25maWcgTkZfQ09OTlRSQUNLX0JSSURHRVxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy00Mi0jIG9sZCBzb2Nrb3B0IGludGVyZmFjZSBhbmQgZXZhbCBsb29wXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo0Mzpjb25maWcgQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDQtXFx0dHJpc3RhdGUgXFxcIkxlZ2FjeSBFQlRBQkxFUyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy01Mi1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjUzOm1lbnVjb25maWcgQlJJREdFX05GX0VCVEFCTEVTXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy01NC1cXHR0cmlzdGF0ZSBcXFwiRXRoZXJuZXQgQnJpZGdlIHRhYmxlcyAoZWJ0YWJsZXMpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTYyPWlmIEJSSURHRV9ORl9FQlRBQkxFU1xcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy02Ni0jXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo2Nzpjb25maWcgQlJJREdFX0VCVF9CUk9VVEVcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTY4LVxcdHRyaXN0YXRlIFxcXCJlYnQ6IGJyb3V0ZSB0YWJsZSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy03Ny1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjc4OmNvbmZpZyBCUklER0VfRUJUX1RfRklMVEVSXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy03OS1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBmaWx0ZXIgdGFibGUgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctODctXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo4ODpjb25maWcgQlJJREdFX0VCVF9UX05BVFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctODktXFx0dHJpc3RhdGUgXFxcImVidDogbmF0IHRhYmxlIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTk5LSNcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjEwMDpjb25maWcgQlJJREdFX0VCVF84MDJfM1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTAxLVxcdHRyaXN0YXRlIFxcXCJlYnQ6IDgwMi4zIGZpbHRlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xMDYtXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxMDc6Y29uZmlnIEJSSURHRV9FQlRfQU1PTkdcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEwOC1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBhbW9uZyBmaWx0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTE1LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTE2OmNvbmZpZyBCUklER0VfRUJUX0FSUFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTE3LVxcdHRyaXN0YXRlIFxcXCJlYnQ6IEFSUCBmaWx0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTIzLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTI0OmNvbmZpZyBCUklER0VfRUJUX0lQXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xMjUtXFx0dHJpc3RhdGUgXFxcImVidDogSVAgZmlsdGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEzMS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjEzMjpjb25maWcgQlJJREdFX0VCVF9JUDZcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEzMy1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBJUDYgZmlsdGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE0MC1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE0MTpjb25maWcgQlJJREdFX0VCVF9MSU1JVFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTQyLVxcdHRyaXN0YXRlIFxcXCJlYnQ6IGxpbWl0IG1hdGNoIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE1MC1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE1MTpjb25maWcgQlJJREdFX0VCVF9NQVJLXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xNTItXFx0dHJpc3RhdGUgXFxcImVidDogbWFyayBmaWx0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTYwLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTYxOmNvbmZpZyBCUklER0VfRUJUX1BLVFRZUEVcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE2Mi1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBwYWNrZXQgdHlwZSBmaWx0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTcwLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTcxOmNvbmZpZyBCUklER0VfRUJUX1NUUFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTcyLVxcdHRyaXN0YXRlIFxcXCJlYnQ6IFNUUCBmaWx0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTc4LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTc5OmNvbmZpZyBCUklER0VfRUJUX1ZMQU5cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE4MC1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiA4MDIuMVEgVkxBTiBmaWx0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTg4LSNcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE4OTpjb25maWcgQlJJREdFX0VCVF9BUlBSRVBMWVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTkwLVxcdHRyaXN0YXRlIFxcXCJlYnQ6IGFycCByZXBseSB0YXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTk3LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTk4OmNvbmZpZyBCUklER0VfRUJUX0ROQVRcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE5OS1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBkbmF0IHRhcmdldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMDUtXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoyMDY6Y29uZmlnIEJSSURHRV9FQlRfTUFSS19UXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMDctXFx0dHJpc3RhdGUgXFxcImVidDogbWFyayB0YXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjE1LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MjE2OmNvbmZpZyBCUklER0VfRUJUX1JFRElSRUNUXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMTctXFx0dHJpc3RhdGUgXFxcImVidDogcmVkaXJlY3QgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTIyMy1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjIyNDpjb25maWcgQlJJREdFX0VCVF9TTkFUXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMjUtXFx0dHJpc3RhdGUgXFxcImVidDogc25hdCB0YXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjMzLSNcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjIzNDpjb25maWcgQlJJREdFX0VCVF9MT0dcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTIzNS1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBsb2cgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjQyLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MjQzOmNvbmZpZyBCUklER0VfRUJUX05GTE9HXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yNDQtXFx0dHJpc3RhdGUgXFxcImVidDogbmZsb2cgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTM6MDA6MjAuMzkzODYxNjg3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIwMjA3MDYxMDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBuZXcgZnVuY3Rpb25zLCBjb25zaWRlcmluZyB0aGUgY29udGV4dCBvZiBicmlkZ2luZyBhbmQgVkxBTnM6XG5cbioqTmV3IEJyaWRnZSBGREIgYW5kIFZMQU4gUkNVIEhlbHBlcnMqKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSB0aGVzZSBuZXcgZnVuY3Rpb25zIHBvcHBpbmcgdXA6IGBicl9mZGJfaGFzX2ZvcndhcmRpbmdfZW50cnlfcmN1YCwgYGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3VgLCBhbmQgYGJyX3ZsYW5faXNfZW5hYmxlZF9yY3VgLiBUaGV5J3JlIGFsbCBsYWJlbGVkIHdpdGggXCJyY3UsXCIgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhleSdyZSBkZXNpZ25lZCBmb3Igc2FmZSwgbG9ja2xlc3MgYWNjZXNzIHRvIGJyaWRnZSBmb3J3YXJkaW5nIGRhdGFiYXNlIChGREIpIGFuZCBWTEFOIGluZm9ybWF0aW9uIHN0cnVjdHVyZXMuIFRoZSBmYWN0IHRoYXQgdGhleSdyZSBpbiBgbmV0L2JyaWRnZS9icl9mZGIuY2AgYW5kIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AgcmVzcGVjdGl2ZWx5IGlzIHByZXR0eSBtdWNoIGV4cGVjdGVkLCBvYnZpb3VzbHkuXG5cbmBicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1YCBhbmQgYGJyX3ZsYW5faXNfZW5hYmxlZF9yY3VgIGFyZSBpbiBgYnJfdmxhbi5jYCwgYW5kIHNvIGFyZSByZWxhdGVkIHRvIFZMQU4gZmlsdGVyaW5nLCB3aGljaCBpcyBjb21waWxlZCBpbiBvbmx5IHdoZW4gYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIGlzIGVuYWJsZWQuIEknbSBndWVzc2luZyB0aGF0IG1lYW5zIHRoZXkncmUgbGlrZWx5IGludm9sdmVkIGluIHF1ZXJ5aW5nIFZMQU4tcmVsYXRlZCBwYXJhbWV0ZXJzLCBhbmQgcGVyaGFwcyB0aGVpciBwcmVzZW5jZSBzdWdnZXN0cyBlbmhhbmNlbWVudHMgdG8gVkxBTi1hd2FyZSBicmlkZ2luZy4gUGVyaGFwcyBiZXR0ZXIgcGVyZm9ybWFuY2UgYWNjZXNzaW5nIFZMQU4gZW50cmllcy5cblxuVGhlIFJDVS1iYXNlZCBhY2Nlc3Mgc3Ryb25nbHkgaW1wbGllcyB0aGVzZSBhcmUgbGlrZWx5IGJlaW5nIHVzZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dHMsIG9yIHBvc3NpYmx5IGluIHNjZW5hcmlvcyB3aGVyZSBjb250ZW50aW9uIGlzIGEgc2lnbmlmaWNhbnQgY29uY2Vybi4gVGhleSdyZSBjbGVhcmx5IGxvb2tpbmcgdG8gYXZvaWQgdGFraW5nIGxvY2tzIHRvIHByb3ZpZGUgaGlnaGVyIGNvbmN1cnJlbmN5LiBJdCdzIGdvb2QgdG8gc2VlIHRoaXMgbGV2ZWwgb2YgY2FyZWZ1bCBvcHRpbWl6YXRpb24uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCB1c2UgY2FzZXMgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMzksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTM6MDQ6MDAuNjAwOTI1OTk5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTYyNzUwMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX3ZsYW4ub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL01ha2VmaWxlPTIxPWJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgKz0gYnJfbXVsdGljYXN0Lm8gYnJfbWRiLm8gYnJfbXVsdGljYXN0X2VodC5vXFxubmV0L2JyaWRnZS9NYWtlZmlsZS0yMi1cXG5uZXQvYnJpZGdlL01ha2VmaWxlOjIzOmJyaWRnZS0kKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpICs9IGJyX3ZsYW4ubyBicl92bGFuX3R1bm5lbC5vIGJyX3ZsYW5fb3B0aW9ucy5vIGJyX21zdC5vXFxubmV0L2JyaWRnZS9NYWtlZmlsZS0yNC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE4ODI9c3RhdGljIGlubGluZSB1MTYgYnJfdmxhbl9mbGFncyhjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgcHZpZClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4ODgtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTg4OTovKiBicl92bGFuX29wdGlvbnMuYyAqL1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4OTAtI2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxODkxOmJvb2wgYnJfdmxhbl9vcHRzX2VxX3JhbmdlKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZfY3VycixcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODkyLVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnJhbmdlX2VuZCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTg5Mzpib29sIGJyX3ZsYW5fb3B0c19maWxsKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTg5NC1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTg5NTpzaXplX3QgYnJfdmxhbl9vcHRzX25sX3NpemUodm9pZCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTg5Ni1pbnQgYnJfdmxhbl9wcm9jZXNzX29wdGlvbnMoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MTkwMz1zdGF0aWMgYm9vbCBicl92bGFuX2ZpbGxfdmlkcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgdmlkLCB1MTYgdmlkX3JhbmdlLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTkzMS1cXHRpZiAodl9vcHRzKSB7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTkzMjpcXHRcXHRpZiAoIWJyX3ZsYW5fb3B0c19maWxsKHNrYiwgdl9vcHRzLCBwKSlcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xOTMzLVxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTE5NDg9c3RhdGljIHNpemVfdCBydG5sX3ZsYW5fbmxtc2dfc2l6ZSh2b2lkKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTk1My1cXHRcXHQrIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgYnJpZGdlX3ZsYW5faW5mbykpIC8qIEJSSURHRV9WTEFOREJfRU5UUllfSU5GTyAqL1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjE5NTQ6XFx0XFx0KyBicl92bGFuX29wdHNfbmxfc2l6ZSgpOyAvKiBicmlkZ2UgdmxhbiBvcHRpb25zICovXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTk1NS19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMDI5PWJvb2wgYnJfdmxhbl9jYW5fZW50ZXJfcmFuZ2UoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdl9jdXJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMjAzMy1cXHQgICAgICAgcmFuZ2VfZW5kLVxcdTAwM2VmbGFncyA9PSB2X2N1cnItXFx1MDAzZWZsYWdzIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MjAzNDpcXHQgICAgICAgYnJfdmxhbl9vcHRzX2VxX3JhbmdlKHZfY3VyciwgcmFuZ2VfZW5kKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yMDM1LX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM9MzI9c3RhdGljIGJvb2wgX192bGFuX3R1bl9jYW5fZW50ZXJfcmFuZ2UoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdl9jdXJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYy0zOS0vKiBjaGVjayBpZiB0aGUgb3B0aW9ucycgc3RhdGUgb2Ygdl9jdXJyIGFsbG93IGl0IHRvIGVudGVyIHRoZSByYW5nZSAqL1xcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM6NDA6Ym9vbCBicl92bGFuX29wdHNfZXFfcmFuZ2UoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdl9jdXJyLFxcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNDEtXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqcmFuZ2VfZW5kKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYy03MS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jOjcyOmJvb2wgYnJfdmxhbl9vcHRzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdixcXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTczLVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYy05Ny1cXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jOjk4OnNpemVfdCBicl92bGFuX29wdHNfbmxfc2l6ZSh2b2lkKVxcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtOTkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMzowNDowMy4xNjM2ODMxNDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc1OTM0NjkzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgTmV0d29yayBGbG93IFRhYmxlIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBzdXBwb3J0IHRoaXMgZmxvdyB0YWJsZSBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYnJpZGdpbmcgYW5kIFZMQU4gZmlsdGVyaW5nLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBpcyBhIGtleSByZXF1aXJlbWVudCwgb2J2aW91c2x5LiBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19ORl9GTE9XX1RBQkxFYCBpcyBlc3NlbnRpYWwuIFNpbmNlIGBORl9GTE9XX1RBQkxFYCBpbXBsaWVzIGBORVRGSUxURVJgLCBJIGRvbid0IG5lZWQgdG8gZXhwbGljaXRseSBzdGF0ZSBgQ09ORklHX05FVEZJTFRFUmAsIGl0J3MgY292ZXJlZC4gTm93LCB0aGUgZGVwZW5kZW5jeSB0cmVlIHNlZW1zIHRvIGJyYW5jaDogYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIG5lZWRzIGBDT05GSUdfQlJJREdFYC4gR290IGl0LiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBzeW1ib2xzIHdpdGhpbiB0aGUga2VybmVsLiBMZXQncyBzZWUuLi4gSSd2ZSBpZGVudGlmaWVkIHNldmVyYWwga2V5IGZ1bmN0aW9uIG5hbWVzOiBgYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdWAsIGBicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1YCwgYGJyX3ZsYW5faXNfZW5hYmxlZF9yY3VgLCBgX19kZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCBgbmZ0X2Zsb3dfcm91dGVgLCBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgLCBgbmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmdgLCBgbmZ0X2Zsb3dfcm91dGVfcm91dGluZ2AsIGBuZnRfZmxvd19vZmZsb2FkX2lzX2JyaWRnaW5nYCwgYG5mdF9icl92bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aGAsIGFuZCBgbmZ0X2ZpbGxfdmxhbl9wYXNzdGhyb3VnaF9pbmZvYC4gVGhlc2Ugd2lsbCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIHRoZSBjb2RlIHBhdGguXG5cbkFscmlnaHQsIEkgbmVlZCB0byBzZWUgd2hpY2ggb2YgdGhlc2UgYXJlIGV4cG9ydGVkLiBUaGlzIHRlbGxzIG1lIHdoYXQncyBhdmFpbGFibGUgdG8gbW9kdWxlcyBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gT2theSwgc28gYG5mdF9mbG93X3JvdXRlX2JyaWRnaW5nYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBgbmZ0X2Zsb3dfcm91dGVgIGFuZCBgX19kZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGFyZSBleHBvcnRlZC4gQW5kIHRoZSBgYnJfYCBwcmVmaXhlZCBmdW5jdGlvbnMgYXJlIGFsc28gZXhwb3J0ZWQuIFRoaXMgaXMgZ29vZCB0byBrbm93LlxuXG5MZXQncyBkbyBhIHF1aWNrLCBjbGVhbiBsaXN0IG9mIHRoZSByZWxldmFudCBzeW1ib2xzLCBqdXN0IHRvIGtlZXAgdGhpbmdzIG9yZ2FuaXplZDpcbiogICBgYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdWBcbiogICBgYnJfdmxhbl9nZXRfb2ZmbG9hZF9pbmZvX3JjdWBcbiogICBgYnJfdmxhbl9pc19lbmFibGVkX3JjdWBcbiogICBgX19kZXZfZmlsbF9mb3J3YXJkX3BhdGhgXG4qICAgYG5mdF9mbG93X3JvdXRlYFxuKiAgIGBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZ2BcbiogICBgbmZ0X2Zsb3dfb2ZmbG9hZF9pc19icmlkZ2luZ2BcbiogICBgbmZ0X2JyX3ZsYW5fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYFxuKiAgIGBuZnRfZmlsbF92bGFuX3Bhc3N0aHJvdWdoX2luZm9gXG5cbkp1c3QgYSBxdWljayBkb3VibGUtY2hlY2sgb24gYG5mdF9mbG93X3JvdXRlX2JyaWRnaW5nYCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBleGFjdCBuYW1lLiBZZXAsIHRoZSBkZWZpbml0aW9uIGluIHRoZSBkaWZmIG1hdGNoZXMgd2hhdCBJIGhhdmUgaW4gbXkgbm90ZXMuIEkgYWx3YXlzIGRvdWJsZS1jaGVjay5cblxuYGBgY1xuc3RhdGljIGludCBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZyhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcblx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuXHRcdFx0XHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG5cdFx0XHRcdCAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG5cdFx0XHRcdCAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdClcbmBgYFxuXG5Ob3csIGxldCBtZSBtYWtlIHN1cmUgSSBkaWRuJ3QgbWlzcyBhbnl0aGluZy4gU28gSSBuZWVkIGBORl9GTE9XX1RBQkxFYCwgYEJSSURHRWAsIGFuZCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gSSBzaG91bGQgYWxzbyBkb3VibGUgY2hlY2sgaWYgYG5mdF9mbG93X3JvdXRlYCBoYXMgYW55IG90aGVyIGhpZGRlbiBkZXBlbmRlbmNpZXMuIEknbGwgbmVlZCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyIG9uIHRoYXQgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTAzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEzOjA1OjIwLjc1NzE1NjQ4MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEzOTQ3ODA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfZmxvd19yb3V0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTI0Nj1zdHJ1Y3QgbmZ0X3BrdGluZm87XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDoyNDc6aW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0yNDgtXFx0XFx0ICAgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0zMTg9c3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzkzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6Mzk0OnN0YXRpYyBpbnQgbmZ0X2Zsb3dfcm91dGVfcm91dGluZyhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTM5NS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNDUzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6NDU0OnN0YXRpYyBpbnQgbmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmcoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy00NTUtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy01MjEtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzo1MjI6aW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy01MjMtXFx0XFx0ICAgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy01MjYtXFx0aWYgKG5mdF9mbG93X29mZmxvYWRfaXNfYnJpZGdpbmcocGt0LVxcdTAwM2Vza2IpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6NTI3OlxcdFxcdHJldHVybiBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZyhwa3QsIGN0LCByb3V0ZSwgZGlyLCBmdCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy01MjgtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzo1Mjk6XFx0cmV0dXJuIG5mdF9mbG93X3JvdXRlX3JvdXRpbmcocGt0LCBjdCwgcm91dGUsIGRpciwgZnQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNTMwLX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjUzMTpFWFBPUlRfU1lNQk9MX0dQTChuZnRfZmxvd19yb3V0ZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz01MD1zdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTA4LVxcdGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoxMDk6XFx0aWYgKG5mdF9mbG93X3JvdXRlKHBrdCwgY3QsIFxcdTAwMjZyb3V0ZSwgZGlyLCBwcml2LVxcdTAwM2VmbG93dGFibGUpIFxcdTAwM2MgMClcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xMTAtXFx0XFx0Z290byBlcnJfZmxvd19yb3V0ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTM6MDU6MjUuODk2NjQzNzAxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTMwMTE1NjExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBPZmZsb2FkIENvZGUqKlxuXG5Pa2F5LCBzbyBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCBpcyBjYWxsaW5nIGBuZnRfZmxvd19yb3V0ZWAuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGFuZCwgc3BlY2lmaWNhbGx5LCBob3cgdGhlIG9mZmxvYWQgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyB0cmlnZ2VyZWQuIE15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBgbmZ0X2Zsb3dfb2ZmbG9hZC5vYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyB3aWxsIGxpa2VseSBiZSBkZWZpbmVkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIG9mZmxvYWQgaXMgZW5hYmxlZCwgd2hhdCBjcml0ZXJpYSBhcmUgdXNlZCBmb3Igcm91dGluZywgYW5kIGFueSByZWxldmFudCBwb2xpY3kgc2V0dGluZ3MuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIGtleSBwYXJhbWV0ZXJzIGFuZCBwb3RlbnRpYWxseSBzb21lIG9wdGltaXphdGlvbnMgb3IgbGltaXRhdGlvbnMgZGljdGF0ZWQgYnkgdGhlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY291bGQgaW52b2x2ZSBsb29raW5nIGF0IHZhcmlvdXMgbmV0ZmlsdGVyIG9wdGlvbnMgYW5kIGFueSByZWxhdGVkIGtjb25maWcgc3ltYm9scy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwOTMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMzoxMDo0Ny4xOTc4MDMxNTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMjk0MDMxODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2Zsb3dfb2ZmbG9hZC5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTEyPW9iai0kKENPTkZJR19ORlRfQ1QpXFx0XFx0Kz0gbmZ0X2N0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjExMzpvYmotJChDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRClcXHQrPSBuZnRfZmxvd19vZmZsb2FkLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTExNC1vYmotJChDT05GSUdfTkZUX0xJTUlUKVxcdFxcdCs9IG5mdF9saW1pdC5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz0yMTc9c3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9mbG93X29mZmxvYWRfdHlwZTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMTg6c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2Zsb3dfb2ZmbG9hZF9vcHMgPSB7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjE5LVxcdC50eXBlXFx0XFx0PSBcXHUwMDI2bmZ0X2Zsb3dfb2ZmbG9hZF90eXBlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9MjMwPXN0YXRpYyBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfZmxvd19vZmZsb2FkX3R5cGUgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMzEtXFx0Lm5hbWVcXHRcXHQ9IFxcXCJmbG93X29mZmxvYWRcXFwiLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIzMjpcXHQub3BzXFx0XFx0PSBcXHUwMDI2bmZ0X2Zsb3dfb2ZmbG9hZF9vcHMsXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjMzLVxcdC5wb2xpY3lcXHRcXHQ9IG5mdF9mbG93X29mZmxvYWRfcG9saWN5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMzoxMDo1MS40MjcyMTU1NjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc3NDU1MDEzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBgQ09ORklHX05GVF9GTE9XX09GRkxPQURgJ3MgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gdGhlIGN1cnJlbnQgaXNzdWUgaXMgcG9pbnRpbmcgdG93YXJkcyBhIHBvdGVudGlhbCBkZXBlbmRlbmNlIG9uIGBDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRGAuIFRoaXMgaXNuJ3QgZW50aXJlbHkgdW5leHBlY3RlZCBnaXZlbiB0aGUgY29udGV4dCwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIHZlcmlmeSB0aGUgcHJlY2lzZSByZWxhdGlvbnNoaXBzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgQ09ORklHX05GVF9GTE9XX09GRkxPQURgIGlzIGEgZGlyZWN0IGRlcGVuZGVuY3ksIGFuIGltcGxpY2l0IHJlcXVpcmVtZW50LCBvciBtZXJlbHkgYW4gb3B0aW1pemF0aW9uIHRoYXQncyAqc3Ryb25nbHkqIHJlY29tbWVuZGVkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGN1cnJlbnQgdGFzay4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbmRpdGlvbmFscywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhbnkgZXhwbGljaXQgYHNlbGVjdGAgc3RhdGVtZW50cyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgc2V0dGluZyBpcyAqc3RyaWN0bHkqIG5lY2Vzc2FyeSwgb3IgaWYgdGhlcmUncyBzb21lIHdpZ2dsZSByb29tIHRoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlLiBVbHRpbWF0ZWx5LCB0aGUgZ29hbCBpcyB0byBmdWxseSBkZWZpbmUgdGhlIGNvbnN0cmFpbnRzIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjY3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTM6MTE6NDkuMTcyNzE5NTg5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTMzNzExMTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORlRfRkxPV19PRkZMT0FEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00OTg9Y29uZmlnIE5GVF9FWFRIRFJfRENDUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwMy1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA0OmNvbmZpZyBORlRfRkxPV19PRkZMT0FEXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwNS1cXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiBORl9GTE9XX1RBQkxFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEzOjExOjUxLjcwNjQzODY1N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzAwNTkyMDI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBORlQgRmxvdyBPZmZsb2FkaW5nIGFuZCBCcmlkZ2luZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYE5GVF9GTE9XX09GRkxPQURgIGlzIHRoZSBjcml0aWNhbCBjb25maWcgdGhhdCBhY3RpdmF0ZXMgdGhlIGZsb3cgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5IHdpdGhpbiBuZnRhYmxlcy4gRXNzZW50aWFsbHksIGl0J3MgdGhlIG9uIHN3aXRjaCBmb3IgdGhpcyBjYXBhYmlsaXR5LCBhbmQsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXQgcmVsaWVzIG9uIGNhbGxpbmcgYG5mdF9mbG93X3JvdXRlYC5cblxuTGV0J3MgZG8gYSBxdWljayByZWNhcCBvZiB0aGUgY29uZmlncyB3ZSdyZSBjb25jZXJuZWQgd2l0aCBoZXJlOiBgTkZfRkxPV19UQUJMRWAsIGBORlRfRkxPV19PRkZMT0FEYCwgdGhlIGBCUklER0VgIG9wdGlvbnMsIGFuZCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gSSBrbm93IHRoZXJlIGFyZSBsaWtlbHkgaW1wbGljYXRpb25zIGFuZCBkZXBlbmRlbmNpZXMsIHNvIGxldCdzIHNlZSBpZiB3ZSBtaXNzZWQgYW55dGhpbmcuXG5cblJpZ2h0LCBJJ20gbm90aW5nIHRoYXQgYENPTkZJR19ORl9DT05OVFJBQ0tgIGFuZCBgQ09ORklHX05FVEZJTFRFUmAgYXJlIGF1dG9tYXRpY2FsbHkgaW1wbGllZCBieSB0aGUgYE5GVF9GTE9XX09GRkxPQURgIHNldHRpbmcuIEdvb2QsIHRoYXQgaGVscHMgY2xhcmlmeSB0aGUgb3ZlcmFsbCBwaWN0dXJlLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGFuZCBzeW1ib2xzIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgcHJvY2Vzcy4gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIGZvciBkZWVwZXIgYW5hbHlzaXM6XG4qICAgYGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3VgXG4qICAgYGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3VgXG4qICAgYGJyX3ZsYW5faXNfZW5hYmxlZF9yY3VgXG4qICAgYF9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYFxuKiAgIGBuZnRfZmxvd19yb3V0ZWBcbiogICBgbmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmdgXG4qICAgYG5mdF9mbG93X29mZmxvYWRfaXNfYnJpZGdpbmdgXG4qICAgYG5mdF9icl92bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aGBcbiogICBgbmZ0X2ZpbGxfdmxhbl9wYXNzdGhyb3VnaF9pbmZvYFxuXG5JJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwMjUsIk91dHB1dFRva2VucyI6MjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEzOjEyOjE0LjcxMjM2MjAzOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjU3Mzg1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiQlJJREdFXCIsXG4gICAgXCJCUklER0VfVkxBTl9GSUxURVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9mZGJfaGFzX2ZvcndhcmRpbmdfZW50cnlfcmN1XCIsXG4gICAgXCJicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1XCIsXG4gICAgXCJicl92bGFuX2lzX2VuYWJsZWRfcmN1XCIsXG4gICAgXCJfX2Rldl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwibmZ0X2Zsb3dfcm91dGVcIixcbiAgICBcIm5mdF9mbG93X3JvdXRlX2JyaWRnaW5nXCIsXG4gICAgXCJuZnRfZmxvd19vZmZsb2FkX2lzX2JyaWRnaW5nXCIsXG4gICAgXCJuZnRfYnJfdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcIm5mdF9maWxsX3ZsYW5fcGFzc3Rocm91Z2hfaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZmxvdyBvZmZsb2FkIG9mIGJyaWRnZWQgdHJhZmZpYy4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIGNoZWNrIGJyaWRnZSBGREIgZW50cmllcyBhbmQgVkxBTiBpbmZvcm1hdGlvbiBmb3IgZmxvdyBvZmZsb2FkLCBhbmQgbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIHBhdGggdG8gaGFuZGxlIGJyaWRnZWQgdHJhZmZpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCIsXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3VcIixcbiAgICBcImJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3VcIixcbiAgICBcImJyX3ZsYW5faXNfZW5hYmxlZF9yY3VcIixcbiAgICBcIl9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoXCIsXG4gICAgXCJuZnRfZmxvd19yb3V0ZVwiLFxuICAgIFwibmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmdcIixcbiAgICBcIm5mdF9mbG93X29mZmxvYWRfaXNfYnJpZGdpbmdcIixcbiAgICBcIm5mdF9icl92bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwibmZ0X2ZpbGxfdmxhbl9wYXNzdGhyb3VnaF9pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBmbG93IG9mZmxvYWQgb2YgYnJpZGdlZCB0cmFmZmljLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gY2hlY2sgYnJpZGdlIEZEQiBlbnRyaWVzIGFuZCBWTEFOIGluZm9ybWF0aW9uIGZvciBmbG93IG9mZmxvYWQsIGFuZCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgcGF0aCB0byBoYW5kbGUgYnJpZGdlZCB0cmFmZmljLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIHN1YnN5c3RlbXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowhjj7w[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-29 12:47:07 +0000 UTC FinishedAt: 2026-06-29 13:12:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD", "BRIDGE", "BRIDGE_VLAN_FILTERING" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "nf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git", "commit_hash": "805185b7c7a1069e407b6f7b3bc98e44d415f484", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NF_FLOW_TABLE", "NFT_FLOW_OFFLOAD", "BRIDGE", "BRIDGE_VLAN_FILTERING" ], "series_id": "3cda7c22-8be4-4de2-adb2-7d4318f01ed4" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "br_fdb_has_forwarding_entry_rcu", "br_vlan_get_offload_info_rcu", "br_vlan_is_enabled_rcu", "__dev_fill_forward_path", "nft_flow_route", "nft_flow_route_bridging", "nft_flow_offload_is_bridging", "nft_br_vlan_dev_fill_forward_path", "nft_fill_vlan_passthrough_info" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI5IDEyOjU2PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0JSSURHRV9WTEFOX0ZJTFRFUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3UmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9nZXRfb2ZmbG9hZF9pbmZvX3JjdSYjMzQ7LAogICAgJiMzNDticl92bGFuX2lzX2VuYWJsZWRfcmN1JiMzNDssCiAgICAmIzM0O19fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O25mdF9mbG93X3JvdXRlJiMzNDssCiAgICAmIzM0O25mdF9mbG93X3JvdXRlX2JyaWRnaW5nJiMzNDssCiAgICAmIzM0O25mdF9mbG93X29mZmxvYWRfaXNfYnJpZGdpbmcmIzM0OywKICAgICYjMzQ7bmZ0X2JyX3ZsYW5fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O25mdF9maWxsX3ZsYW5fcGFzc3Rocm91Z2hfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGZsb3cgb2ZmbG9hZCBvZiBicmlkZ2VkIHRyYWZmaWMuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBjaGVjayBicmlkZ2UgRkRCIGVudHJpZXMgYW5kIFZMQU4gaW5mb3JtYXRpb24gZm9yIGZsb3cgb2ZmbG9hZCwgYW5kIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBwYXRoIHRvIGhhbmRsZSBicmlkZ2VkIHRyYWZmaWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTI6NTY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAwNTI5NWQ2MmVlY2YyODk4NmUxOGFhZDc3OWNmNWRjZjNkMDU5NmFlXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTI6NTY6MjcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaCBiL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmhcbmluZGV4IDc1NjczYjhiZmZjYjhhLi5jMWNhZTU0NzQ5YzUxNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmhcbkBAIC0xNDgsNiAmIzQzOzE0OCw5IEBAIGludCBicl92bGFuX2dldF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB2aWQsXG4gXHRcdCAgICAgc3RydWN0IGJyaWRnZV92bGFuX2luZm8gKnBfdmluZm8pO1xuIGludCBicl92bGFuX2dldF9pbmZvX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkLFxuIFx0XHRcdCBzdHJ1Y3QgYnJpZGdlX3ZsYW5faW5mbyAqcF92aW5mbyk7XG4mIzQzO3UxNiBicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiAqcHJvdG8pO1xuJiM0Mztib29sIGJyX3ZsYW5faXNfZW5hYmxlZF9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gYm9vbCBicl9tc3RfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBpbnQgYnJfbXN0X2dldF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBtc3RpLCB1bnNpZ25lZCBsb25nICp2aWRzKTtcbiBpbnQgYnJfbXN0X2dldF9zdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgbXN0aSwgdTggKnN0YXRlKTtcbkBAIC0xODQsNiAmIzQzOzE4NywxNyBAQCBzdGF0aWMgaW5saW5lIGludCBicl92bGFuX2dldF9pbmZvX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkLFxuIFx0cmV0dXJuIC1FSU5WQUw7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHUxNiBicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4mIzQzO1x0XHRcdFx0XHRcdGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4mIzQzO1x0XHRcdFx0XHRcdF9fYmUxNiAqcHJvdG8pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGJyX3ZsYW5faXNfZW5hYmxlZF9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiYjNDM7e1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBicl9tc3RfZW5hYmxlZChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHJldHVybiBmYWxzZTtcbkBAIC0yMDksNiAmIzQzOzIyMyw4IEBAIHZvaWQgYnJfZmRiX2NsZWFyX29mZmxvYWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCk7XG4gYm9vbCBicl9wb3J0X2ZsYWdfaXNfc2V0KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGxvbmcgZmxhZyk7XG4gdTggYnJfcG9ydF9nZXRfc3RwX3N0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIGNsb2NrX3QgYnJfZ2V0X2FnZWluZ190aW1lKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpicl9kZXYpO1xuJiM0Mztib29sIGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHU4ICphZGRyKTtcbiAjZWxzZVxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IG5ldF9kZXZpY2UgKlxuIGJyX2ZkYl9maW5kX3BvcnQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldixcbkBAIC0yMzcsNiAmIzQzOzI1MywxMyBAQCBzdGF0aWMgaW5saW5lIGNsb2NrX3QgYnJfZ2V0X2FnZWluZ190aW1lKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpicl9kZXYpXG4ge1xuIFx0cmV0dXJuIDA7XG4gfVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgY29uc3QgdTggKmFkZHIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiAjZW5kaWZcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOTk4MWQ2MzdmOGI1NDYuLmMxZDBiODk3ZGU5NTM0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTM0MjIsNiAmIzQzOzM0MjIsOCBAQCBpbnQgZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XG4gaW50IGRldl9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcbiBpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcbiBcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcbiYjNDM7aW50IF9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsIGNvbnN0IHU4ICpkYWRkcixcbiYjNDM7XHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XG4gc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZV9yY3Uoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqX19kZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2ZkYi5jIGIvbmV0L2JyaWRnZS9icl9mZGIuY1xuaW5kZXggZTQ1NzBiYmVkODU0NDUuLjMxNjFjMjY4OWY2YTZmIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9mZGIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9mZGIuY1xuQEAgLTI2Nyw2ICYjNDM7MjY3LDM4IEBAIHN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqYnJfZmRiX2ZpbmRfcmN1KHN0cnVjdCBuZXRfYnJpZGdlICpicixcbiBcdHJldHVybiBmZGJfZmluZF9yY3UoXHUwMDI2YnItXHUwMDNlZmRiX2hhc2hfdGJsLCBhZGRyLCB2aWQpO1xuIH1cbiBcbiYjNDM7LyoqXG4mIzQzOyAqIGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3UgLSBjaGVjayBpZiBhIE1BQyBjYW4gYmUgZm9yd2FyZGVkIGJ5IHRoZSBicmlkZ2VcbiYjNDM7ICogQGRldjogYnJpZGdlIHBvcnQgbmV0d29yayBkZXZpY2VcbiYjNDM7ICogQHNrYjogcGFja2V0IGJ1ZmZlciAodXNlZCB0byBkZXRlcm1pbmUgVkxBTiBpZClcbiYjNDM7ICogQGFkZHI6IGRlc3RpbmF0aW9uIE1BQyBhZGRyZXNzXG4mIzQzOyAqXG4mIzQzOyAqIFJlc29sdmVzIHRoZSBWTEFOIGlkIGZvciBAc2tiIG9uIEBkZXYgKHNrYiBWTEFOIHRhZyB3aGVuIHByZXNlbnQsIFBWSURcbiYjNDM7ICogd2hlbiBWTEFOIGZpbHRlcmluZyBpcyBlbmFibGVkLCAwIG90aGVyd2lzZSkgdGhlbiBjaGVja3Mgd2hldGhlciB0aGUgYnJpZGdlXG4mIzQzOyAqIEZEQiBjb250YWlucyBhIGZvcndhcmRpbmcgZW50cnkgKGRzdCAhPSBOVUxMLCBub3QgYSBsb2NhbC9zZWxmIGVudHJ5KSBmb3JcbiYjNDM7ICogQGFkZHIgYW5kIHRoYXQgVkxBTiBpZC4gU2luZ2xlIGJyX3BvcnRfZ2V0X3JjdSgpIGxvb2t1cC5cbiYjNDM7ICogTXVzdCBiZSBjYWxsZWQgdW5kZXIgUkNVIHJlYWQgbG9jay5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTggKmFkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0ID0gYnJfcG9ydF9nZXRfcmN1KGRldik7XG4mIzQzO1x0c3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmZGI7XG4mIzQzO1x0dTE2IHZpZCA9IDA7XG4mIzQzO1xuJiM0MztcdGlmICghcG9ydClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoYnJfb3B0X2dldChwb3J0LVx1MDAzZWJyLCBCUk9QVF9WTEFOX0VOQUJMRUQpKSB7XG4mIzQzO1x0XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSlcbiYjNDM7XHRcdFx0dmlkID0gc2tiX3ZsYW5fdGFnX2dldF9pZChza2IpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRicl92bGFuX2dldF9wdmlkX3JjdShkZXYsIFx1MDAyNnZpZCk7XG4mIzQzO1x0fVxuJiM0MztcdGZkYiA9IGJyX2ZkYl9maW5kX3JjdShwb3J0LVx1MDAzZWJyLCBhZGRyLCB2aWQpO1xuJiM0MztcdHJldHVybiBmZGIgXHUwMDI2XHUwMDI2IGZkYi1cdTAwM2Vkc3Q7XG4mIzQzO31cbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdSk7XG4mIzQzO1xuIC8qIFdoZW4gYSBzdGF0aWMgRkRCIGVudHJ5IGlzIGFkZGVkLCB0aGUgbWFjIGFkZHJlc3MgZnJvbSB0aGUgZW50cnkgaXNcbiAgKiBhZGRlZCB0byB0aGUgYnJpZGdlIHByaXZhdGUgSFcgYWRkcmVzcyBsaXN0IGFuZCBhbGwgcmVxdWlyZWQgcG9ydHNcbiAgKiBhcmUgdGhlbiB1cGRhdGVkIHdpdGggdGhlIG5ldyBpbmZvcm1hdGlvbi5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ZsYW4uYyBiL25ldC9icmlkZ2UvYnJfdmxhbi5jXG5pbmRleCA1NTYwYWZjYWFjYTMyNy4uMGIyOTYzNjJhZGY3YzkgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xuJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl92bGFuLmNcbkBAIC0xNTU5LDYgJiM0MzsxNTU5LDUxIEBAIGludCBicl92bGFuX2dldF9pbmZvX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTChicl92bGFuX2dldF9pbmZvX3JjdSk7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1IC0gZ2V0IFZMQU4gaWQgYW5kIHByb3RvY29sIGZvciBicmlkZ2UgZmxvdyBvZmZsb2FkXG4mIzQzOyAqIEBkZXY6IGJyaWRnZSBwb3J0IG5ldHdvcmsgZGV2aWNlXG4mIzQzOyAqIEBza2I6IHBhY2tldCBidWZmZXJcbiYjNDM7ICogQHByb3RvOiBvdXRwdXQgZm9yIHRoZSBicmlkZ2UgVkxBTiBwcm90b2NvbCAoc2V0IG9ubHkgd2hlbiByZXR1cm4gdmFsdWUgIT0gMClcbiYjNDM7ICpcbiYjNDM7ICogV2hlbiBWTEFOIGZpbHRlcmluZyBpcyBlbmFibGVkLCByZXNvbHZlcyB0aGUgVkxBTiBpZCBmb3IgZmxvdyBvZmZsb2FkIChza2JcbiYjNDM7ICogVkxBTiB0YWcgaWQgaWYgcHJlc2VudCwgUFZJRCBvdGhlcndpc2UpIGFuZCB3cml0ZXMgdGhlIGJyaWRnZSBWTEFOIHByb3RvY29sXG4mIzQzOyAqIHRvIEBwcm90by4gUmV0dXJucyAwIHdoZW4gZmlsdGVyaW5nIGlzIG9mZiBvciBAZGV2IGlzIG5vdCBhIGJyaWRnZSBwb3J0LlxuJiM0MzsgKiBTaW5nbGUgYnJfcG9ydF9nZXRfcmN1KCkgbG9va3VwLiBNdXN0IGJlIGNhbGxlZCB1bmRlciBSQ1UgcmVhZCBsb2NrLlxuJiM0MzsgKi9cbiYjNDM7dTE2IGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0XHQgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX19iZTE2ICpwcm90bylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQgPSBicl9wb3J0X2dldF9yY3UoZGV2KTtcbiYjNDM7XHR1MTYgdmlkID0gMDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwb3J0IHx8ICFicl9vcHRfZ2V0KHBvcnQtXHUwMDNlYnIsIEJST1BUX1ZMQU5fRU5BQkxFRCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSlcbiYjNDM7XHRcdHZpZCA9IHNrYl92bGFuX3RhZ19nZXRfaWQoc2tiKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRicl92bGFuX2dldF9wdmlkX3JjdShkZXYsIFx1MDAyNnZpZCk7XG4mIzQzO1x0aWYgKHZpZClcbiYjNDM7XHRcdCpwcm90byA9IHBvcnQtXHUwMDNlYnItXHUwMDNldmxhbl9wcm90bztcbiYjNDM7XHRyZXR1cm4gdmlkO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3UpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJyX3ZsYW5faXNfZW5hYmxlZF9yY3UgLSBjaGVjayBpZiBWTEFOIGZpbHRlcmluZyBpcyBhY3RpdmUgb24gYSBwb3J0JiMzOTtzIGJyaWRnZVxuJiM0MzsgKiBAZGV2OiBicmlkZ2UgcG9ydCBuZXR3b3JrIGRldmljZVxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm5zIHRydWUgaWYgVkxBTiBmaWx0ZXJpbmcgaXMgZW5hYmxlZCBvbiB0aGUgYnJpZGdlIEBkZXYgYmVsb25ncyB0by5cbiYjNDM7ICogUmV0dXJucyBmYWxzZSB3aGVuIEBkZXYgaXMgbm90IGEgYnJpZGdlIHBvcnQgb3IgZmlsdGVyaW5nIGlzIG9mZi5cbiYjNDM7ICogTXVzdCBiZSBjYWxsZWQgdW5kZXIgUkNVIHJlYWQgbG9jay5cbiYjNDM7ICovXG4mIzQzO2Jvb2wgYnJfdmxhbl9pc19lbmFibGVkX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IGJyX3BvcnRfZ2V0X3JjdShkZXYpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcG9ydCBcdTAwMjZcdTAwMjYgYnJfb3B0X2dldChwb3J0LVx1MDAzZWJyLCBCUk9QVF9WTEFOX0VOQUJMRUQpO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGJyX3ZsYW5faXNfZW5hYmxlZF9yY3UpO1xuJiM0MztcbiBzdGF0aWMgaW50IGJyX3ZsYW5faXNfYmluZF92bGFuX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHJldHVybiBpc192bGFuX2RldihkZXYpIFx1MDAyNlx1MDAyNlxuZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmNcbmluZGV4IDRiM2Q1Y2ZkZjZlMDBmLi42MmYxZDBiNjRjNzZkZSAxMDA2NDRcbi0tLSBhL25ldC9jb3JlL2Rldi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuY1xuQEAgLTc1MCw0NCAmIzQzOzc1MCw1MiBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqZGV2X2Z3ZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuIFx0cmV0dXJuIFx1MDAyNnN0YWNrLVx1MDAzZXBhdGhba107XG4gfVxuIFxuLWludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuLVx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4mIzQzO2ludCBfX2Rldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LCBjb25zdCB1OCAqZGFkZHIsXG4mIzQzO1x0XHRcdCAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbGFzdF9kZXY7XG4tXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XG4tXHRcdC5kZXZcdD0gZGV2LFxuLVx0fTtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGggKnBhdGg7XG4gXHRpbnQgcmV0ID0gMDtcbiBcbi1cdG1lbWNweShjdHguZGFkZHIsIGRhZGRyLCBzaXplb2YoY3R4LmRhZGRyKSk7XG4mIzQzO1x0bWVtY3B5KGN0eC1cdTAwM2VkYWRkciwgZGFkZHIsIHNpemVvZihjdHgtXHUwMDNlZGFkZHIpKTtcbiBcdHN0YWNrLVx1MDAzZW51bV9wYXRocyA9IDA7XG4tXHR3aGlsZSAoY3R4LmRldiBcdTAwMjZcdTAwMjYgY3R4LmRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aCkge1xuLVx0XHRsYXN0X2RldiA9IGN0eC5kZXY7XG4mIzQzO1x0d2hpbGUgKGN0eC1cdTAwM2VkZXYgXHUwMDI2XHUwMDI2IGN0eC1cdTAwM2VkZXYtXHUwMDNlbmV0ZGV2X29wcy1cdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgpIHtcbiYjNDM7XHRcdGxhc3RfZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcdFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XG4gXHRcdGlmICghcGF0aClcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXG4gXHRcdG1lbXNldChwYXRoLCAwLCBzaXplb2Yoc3RydWN0IG5ldF9kZXZpY2VfcGF0aCkpO1xuLVx0XHRyZXQgPSBjdHguZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKFx1MDAyNmN0eCwgcGF0aCk7XG4mIzQzO1x0XHRyZXQgPSBjdHgtXHUwMDNlZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFxuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC5kZXYpKVxuJiM0MztcdFx0aWYgKFdBUk5fT05fT05DRShsYXN0X2RldiA9PSBjdHgtXHUwMDNlZGV2KSlcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXHR9XG4gXG4tXHRpZiAoIWN0eC5kZXYpXG4mIzQzO1x0aWYgKCFjdHgtXHUwMDNlZGV2KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuIFx0cGF0aCA9IGRldl9md2RfcGF0aChzdGFjayk7XG4gXHRpZiAoIXBhdGgpXG4gXHRcdHJldHVybiAtMTtcbiBcdHBhdGgtXHUwMDNldHlwZSA9IERFVl9QQVRIX0VUSEVSTkVUO1xuLVx0cGF0aC1cdTAwM2VkZXYgPSBjdHguZGV2O1xuJiM0MztcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuJiM0MztFWFBPUlRfU1lNQk9MX0dQTChfX2Rldl9maWxsX2ZvcndhcmRfcGF0aCk7XG4mIzQzO1xuJiM0MztpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcbiYjNDM7XHRcdFx0ICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHtcbiYjNDM7XHRcdC5kZXZcdD0gZGV2LFxuJiM0MztcdH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBfX2Rldl9maWxsX2ZvcndhcmRfcGF0aChcdTAwMjZjdHgsIGRhZGRyLCBzdGFjayk7XG4mIzQzO31cbiBFWFBPUlRfU1lNQk9MX0dQTChkZXZfZmlsbF9mb3J3YXJkX3BhdGgpO1xuIFxuIC8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2soKSwgYXMgd2UgZG9udCB0YWtlIGEgcmVmZXJlbmNlICovXG5kaWZmIC0tZ2l0IGEvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbmluZGV4IDk4YzAzYjQ4N2Y1MjExLi5kMTVjNDI1Yzg4YzRhYSAxMDA2NDRcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcbkBAIC0xNSw2ICYjNDM7MTUsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2JyaWRnZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2lmX2V0aGVyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9yb3V0ZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9pcDZfcm91dGUuaFx1MDAzZVxuIFxuIHN0YXRpYyBlbnVtIGZsb3dfb2ZmbG9hZF94bWl0X3R5cGUgbmZ0X3htaXRfdHlwZShzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QpXG4ge1xuQEAgLTQyLDcgJiM0Mzs0NywyNSBAQCBzdGF0aWMgYm9vbCBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbiYjNDM7c3RhdGljIGJvb2wgbmZ0X2Zsb3dfb2ZmbG9hZF9pc19icmlkZ2luZyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuJiM0Mzt7XG4mIzQzO1x0Ym9vbCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmICghbmV0aWZfaXNfYnJpZGdlX3BvcnQoc2tiLVx1MDAzZWRldikpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKCFza2JfbWFjX2hlYWRlcl93YXNfc2V0KHNrYikpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRyZXQgPSBicl9mZGJfaGFzX2ZvcndhcmRpbmdfZW50cnlfcmN1KHNrYi1cdTAwM2VkZXYsIHNrYixcbiYjNDM7XHRcdFx0XHRcdCAgICAgIGV0aF9oZHIoc2tiKS1cdTAwM2VoX2Rlc3QpO1xuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbiYjNDM7XHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbiBcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0X2NhY2hlLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRcdFx0XHQgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIHU4ICpoYSxcbkBAIC01OCw2ICYjNDM7ODEsMTIgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4mIzQzO1x0LyogQnJpZGdpbmcgZmFzdHBhdGggY29waWVzIEV0aGVybmV0IGFkZHJlc3NlcyBpbnRvIGhhOyBkbyBub3QgcmVwbGFjZVxuJiM0MztcdCAqIHRoZW0gdmlhIG5laWdoYm91ciBsb29rdXAgb24gdGhlIHJvdXRlZCBkZXN0aW5hdGlvbiBkZXZpY2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFpc196ZXJvX2V0aGVyX2FkZHIoaGEpKVxuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1xuIFx0biA9IGRzdF9uZWlnaF9sb29rdXAoZHN0X2NhY2hlLCBkYWRkcik7XG4gXHRpZiAoIW4pXG4gXHRcdHJldHVybiAtMTtcbkBAIC03Miw3ICYjNDM7MTAxLDIzIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4gXHRcdHJldHVybiAtMTtcbiBcbiBvdXQ6XG4tXHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgaGEsIHN0YWNrKTtcbiYjNDM7XHRyZXR1cm4gX19kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBoYSwgc3RhY2spO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBuZnRfYnJfdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4mIzQzO1x0XHRcdFx0XHQgICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4KVxuJiM0Mzt7XG4mIzQzO1x0X19iZTE2IHByb3RvID0gMDtcbiYjNDM7XHR1MTYgdmxhbl9pZDtcbiYjNDM7XG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHZsYW5faWQgPSBicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1KHBrdC1cdTAwM2Vza2ItXHUwMDNlZGV2LCBwa3QtXHUwMDNlc2tiLCBcdTAwMjZwcm90byk7XG4mIzQzO1x0aWYgKHZsYW5faWQpIHtcbiYjNDM7XHRcdGN0eC1cdTAwM2VudW1fdmxhbnMgPSAxO1xuJiM0MztcdFx0Y3R4LVx1MDAzZXZsYW5bMF0uaWQgPSB2bGFuX2lkO1xuJiM0MztcdFx0Y3R4LVx1MDAzZXZsYW5bMF0ucHJvdG8gPSBwcm90bztcbiYjNDM7XHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHtcbkBAIC05Miw2ICYjNDM7MTM3LDI5IEBAIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHtcbiBcdGVudW0gZmxvd19vZmZsb2FkX3htaXRfdHlwZSB4bWl0X3R5cGU7XG4gfTtcbiBcbiYjNDM7c3RhdGljIHZvaWQgbmZ0X2ZpbGxfdmxhbl9wYXNzdGhyb3VnaF9pbmZvKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuJiM0MztcdFx0XHRcdFx0ICAgc3RydWN0IG5mdF9mb3J3YXJkX2luZm8gKmluZm8pXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXNrYl92bGFuX3RhZ19wcmVzZW50KHBrdC1cdTAwM2Vza2IpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0Lyogd2hlbiBicmlkZ2UgVkxBTiBmaWx0ZXJpbmcgaXMgZW5hYmxlZCwgdGhlIGJyaWRnZSBoYW5kbGVzIHRoZSB0YWcgKi9cbiYjNDM7XHRpZiAobmV0aWZfaXNfYnJpZGdlX3BvcnQocGt0LVx1MDAzZXNrYi1cdTAwM2VkZXYpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAhYnJfdmxhbl9pc19lbmFibGVkX3JjdShwa3QtXHUwMDNlc2tiLVx1MDAzZWRldikpIHtcbiYjNDM7XHRcdGlmIChpbmZvLVx1MDAzZW51bV9lbmNhcHMgXHUwMDNlPSBORl9GTE9XX1RBQkxFX0VOQ0FQX01BWCkge1xuJiM0MztcdFx0XHRpbmZvLVx1MDAzZWluZGV2ID0gTlVMTDtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdGluZm8tXHUwMDNlZW5jYXBbaW5mby1cdTAwM2VudW1fZW5jYXBzXS5pZCA9XG4mIzQzO1x0XHRcdFx0c2tiX3ZsYW5fdGFnX2dldF9pZChwa3QtXHUwMDNlc2tiKTtcbiYjNDM7XHRcdFx0aW5mby1cdTAwM2VlbmNhcFtpbmZvLVx1MDAzZW51bV9lbmNhcHNdLnByb3RvID1cbiYjNDM7XHRcdFx0XHRwa3QtXHUwMDNlc2tiLVx1MDAzZXZsYW5fcHJvdG87XG4mIzQzO1x0XHRcdGluZm8tXHUwMDNlbnVtX2VuY2FwcyYjNDM7JiM0Mzs7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0ICAgICBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyAqaW5mbyxcbiBcdFx0XHQgICAgIHVuc2lnbmVkIGNoYXIgKmhhLCBzdHJ1Y3QgbmZfZmxvd3RhYmxlICpmbG93dGFibGUpXG5AQCAtMTAzLDEzICYjNDM7MTcxLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBzdGFjay1cdTAwM2VudW1fcGF0aHM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdHBhdGggPSBcdTAwMjZzdGFjay1cdTAwM2VwYXRoW2ldO1xuJiM0MztcdFx0aW5mby1cdTAwM2VpbmRldiA9IHBhdGgtXHUwMDNlZGV2O1xuIFx0XHRzd2l0Y2ggKHBhdGgtXHUwMDNldHlwZSkge1xuIFx0XHRjYXNlIERFVl9QQVRIX0VUSEVSTkVUOlxuIFx0XHRjYXNlIERFVl9QQVRIX0RTQTpcbiBcdFx0Y2FzZSBERVZfUEFUSF9WTEFOOlxuIFx0XHRjYXNlIERFVl9QQVRIX1BQUE9FOlxuIFx0XHRjYXNlIERFVl9QQVRIX1RVTjpcbi1cdFx0XHRpbmZvLVx1MDAzZWluZGV2ID0gcGF0aC1cdTAwM2VkZXY7XG4gXHRcdFx0aWYgKGlzX3plcm9fZXRoZXJfYWRkcihpbmZvLVx1MDAzZWhfc291cmNlKSlcbiBcdFx0XHRcdG1lbWNweShpbmZvLVx1MDAzZWhfc291cmNlLCBwYXRoLVx1MDAzZWRldi1cdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xuIFxuQEAgLTE3NSw2ICYjNDM7MjQzLDEwIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0fVxuIFx0XHRcdGluZm8tXHUwMDNleG1pdF90eXBlID0gRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUO1xuIFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0Y2FzZSBERVZfUEFUSF9NVEtfV0RNQTpcbiYjNDM7XHRcdFx0aWYgKGlzX3plcm9fZXRoZXJfYWRkcihpbmZvLVx1MDAzZWhfc291cmNlKSlcbiYjNDM7XHRcdFx0XHRtZW1jcHkoaW5mby1cdTAwM2VoX3NvdXJjZSwgcGF0aC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXHRcdGRlZmF1bHQ6XG4gXHRcdFx0cmV0dXJuIC0xO1xuIFx0XHR9XG5AQCAtMjQ0LDYgJiM0MzszMTYsNyBAQCBzdGF0aWMgaW50IG5mdF9mbG93X3R1bm5lbF91cGRhdGVfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gfVxuIFxuIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4mIzQzO1x0XHRcdFx0Ym9vbCBpc19icmlkZ2luZyxcbiBcdFx0XHRcdHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdFx0XHRcdGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG5AQCAtMjUxLDEyICYjNDM7MzI0LDM4IEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGRzdF9lbnRyeSAqZHN0ID0gcm91dGUtXHUwMDNldHVwbGVbZGlyXS5kc3Q7XG4gXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHN0YWNrO1xuJiM0MztcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHtcbiYjNDM7XHRcdC5kZXZcdD0gZHN0LVx1MDAzZWRldixcbiYjNDM7XHR9O1xuIFx0c3RydWN0IG5mdF9mb3J3YXJkX2luZm8gaW5mbyA9IHt9O1xuJiM0MztcdGVudW0gaXBfY29ubnRyYWNrX2luZm8gcGt0X2N0aW5mbztcbiYjNDM7XHRlbnVtIGlwX2Nvbm50cmFja19kaXIgc2tiX2RpcjtcbiYjNDM7XHRzdHJ1Y3QgZXRoaGRyICpldGg7XG4gXHR1bnNpZ25lZCBjaGFyIGhhW0VUSF9BTEVOXTtcbiBcdGludCBpO1xuIFxuLVx0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgocm91dGUsIGRzdCwgY3QsIGRpciwgaGEsIFx1MDAyNnN0YWNrKSBcdTAwM2MgMCB8fFxuLVx0ICAgIG5mdF9kZXZfcGF0aF9pbmZvKFx1MDAyNnN0YWNrLCBcdTAwMjZpbmZvLCBoYSwgXHUwMDI2ZnQtXHUwMDNlZGF0YSkgXHUwMDNjIDApXG4mIzQzO1x0bWVtc2V0KGhhLCAwLCBzaXplb2YoaGEpKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlzX2JyaWRnaW5nKSB7XG4mIzQzO1x0XHRuZl9jdF9nZXQocGt0LVx1MDAzZXNrYiwgXHUwMDI2cGt0X2N0aW5mbyk7XG4mIzQzO1x0XHRldGggPSBldGhfaGRyKHBrdC1cdTAwM2Vza2IpO1xuJiM0MztcdFx0c2tiX2RpciA9IENUSU5GTzJESVIocGt0X2N0aW5mbyk7XG4mIzQzO1x0XHRpZiAoc2tiX2RpciAhPSBkaXIpIHtcbiYjNDM7XHRcdFx0bWVtY3B5KGhhLCBldGgtXHUwMDNlaF9zb3VyY2UsIEVUSF9BTEVOKTtcbiYjNDM7XHRcdFx0bWVtY3B5KGluZm8uaF9zb3VyY2UsIGV0aC1cdTAwM2VoX2Rlc3QsIEVUSF9BTEVOKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdG1lbWNweShoYSwgZXRoLVx1MDAzZWhfZGVzdCwgRVRIX0FMRU4pO1xuJiM0MztcdFx0XHRtZW1jcHkoaW5mby5oX3NvdXJjZSwgZXRoLVx1MDAzZWhfc291cmNlLCBFVEhfQUxFTik7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRuZnRfYnJfdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgocGt0LCBcdTAwMjZjdHgpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoXHUwMDI2Y3R4LCByb3V0ZSwgZHN0LCBjdCwgZGlyLCBoYSwgXHUwMDI2c3RhY2spIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1xuJiM0MztcdG5mdF9maWxsX3ZsYW5fcGFzc3Rocm91Z2hfaW5mbyhwa3QsIFx1MDAyNmluZm8pO1xuJiM0MztcbiYjNDM7XHRpZiAobmZ0X2Rldl9wYXRoX2luZm8oXHUwMDI2c3RhY2ssIFx1MDAyNmluZm8sIGhhLCBcdTAwMjZmdC1cdTAwM2VkYXRhKSBcdTAwM2MgMClcbiBcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gXG4gXHRpZiAoIW5mdF9mbG93dGFibGVfZmluZF9kZXYoaW5mby5pbmRldiwgZnQpKVxuQEAgLTI5Miw5ICYjNDM7MzkxLDExIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tXHRcdCAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbi1cdFx0ICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxuJiM0MztzdGF0aWMgaW50IG5mdF9mbG93X3JvdXRlX3JvdXRpbmcoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4mIzQzO1x0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4mIzQzO1x0XHRcdFx0ICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuJiM0MztcdFx0XHRcdCAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxuIHtcbiBcdHN0cnVjdCBkc3RfZW50cnkgKnRoaXNfZHN0ID0gc2tiX2RzdChwa3QtXHUwMDNlc2tiKTtcbiBcdHN0cnVjdCBkc3RfZW50cnkgKm90aGVyX2RzdCA9IE5VTEw7XG5AQCAtMzM0LDEyICYjNDM7NDM1LDEyIEBAIGludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0bmZ0X2RlZmF1bHRfZm9yd2FyZF9wYXRoKHJvdXRlLCB0aGlzX2RzdCwgZGlyKTtcbiBcdG5mdF9kZWZhdWx0X2ZvcndhcmRfcGF0aChyb3V0ZSwgb3RoZXJfZHN0LCAhZGlyKTtcbiBcbi1cdGlmIChyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLnhtaXRfdHlwZVx0PT0gRkxPV19PRkZMT0FEX1hNSVRfTkVJR0ggXHUwMDI2XHUwMDI2XG4tXHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCByb3V0ZSwgY3QsIGRpciwgZnQpIFx1MDAzYyAwKVxuJiM0MztcdGlmIChyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCBmYWxzZSwgcm91dGUsIGN0LCBkaXIsIGZ0KSBcdTAwM2MgMClcbiBcdFx0Z290byBlcnJfZHN0X3JlbGVhc2U7XG4gXG4gXHRpZiAocm91dGUtXHUwMDNldHVwbGVbIWRpcl0ueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIIFx1MDAyNlx1MDAyNlxuLVx0ICAgIG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgcm91dGUsIGN0LCAhZGlyLCBmdCkgXHUwMDNjIDApXG4mIzQzO1x0ICAgIG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgZmFsc2UsIHJvdXRlLCBjdCwgIWRpciwgZnQpIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9kc3RfcmVsZWFzZTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTM0OSw0ICYjNDM7NDUwLDgyIEBAIGludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0ZHN0X3JlbGVhc2Uocm91dGUtXHUwMDNldHVwbGVbIWRpcl0uZHN0KTtcbiBcdHJldHVybiAtRU5PRU5UO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmcoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbiYjNDM7XHRcdFx0XHQgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuJiM0MztcdFx0XHRcdCAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBkc3RfZW50cnkgKmRzdHNbSVBfQ1RfRElSX01BWF0gPSB7fTtcbiYjNDM7XHRzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2O1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHQvKiBBbGxvY2F0ZSBtaW5pbWFsIGRzdHMgYW5jaG9yZWQgdG8gdGhlIGJyaWRnZSBtYXN0ZXIgZGV2aWNlIHRvIHN1cHBseVxuJiM0MztcdCAqIHhtaXRfdHlwZSBhbmQgTVRVLiBBIGZ1bGwgcm91dGluZyBsb29rdXAgdmlhIG5mX3JvdXRlKCkgaXMgYXZvaWRlZFxuJiM0MztcdCAqIGJlY2F1c2UgaXQgZmFpbHMgZm9yIHByZWZpeGVzIHRoYXQgYXJlIGJyaWRnZWQgYnV0IG5vdCByb3V0ZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdGJyX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldF9yY3UocGt0LVx1MDAzZXNrYi1cdTAwM2VkZXYpO1xuJiM0MztcdGlmICghYnJfZGV2IHx8ICFuZXRpZl9pc19icmlkZ2VfbWFzdGVyKGJyX2RldikpIHtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUF9DVF9ESVJfTUFYOyBpJiM0MzsmIzQzOykge1xuJiM0MztcdFx0c3dpdGNoIChuZnRfcGYocGt0KSkge1xuJiM0MztcdFx0Y2FzZSBORlBST1RPX0lQVjQ6IHtcbiYjNDM7XHRcdFx0c3RydWN0IHJ0YWJsZSAqcnQ7XG4mIzQzO1xuJiM0MztcdFx0XHRydCA9IHJ0X2RzdF9hbGxvYyhicl9kZXYsIDAsIFJUTl9VTklDQVNULCB0cnVlKTtcbiYjNDM7XHRcdFx0aWYgKHJ0KVxuJiM0MztcdFx0XHRcdGRzdHNbaV0gPSBcdTAwMjZydC1cdTAwM2Vkc3Q7XG4mIzQzO1x0XHRcdGJyZWFrO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0Y2FzZSBORlBST1RPX0lQVjY6IHtcbiYjNDM7XHRcdFx0c3RydWN0IHJ0Nl9pbmZvICpydDtcbiYjNDM7XG4mIzQzO1x0XHRcdHJ0ID0gaXA2X2RzdF9hbGxvYyhuZnRfbmV0KHBrdCksIGJyX2RldiwgMCk7XG4mIzQzO1x0XHRcdGlmIChydClcbiYjNDM7XHRcdFx0XHRkc3RzW2ldID0gXHUwMDI2cnQtXHUwMDNlZHN0O1xuJiM0MztcdFx0XHRicmVhaztcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4mIzQzO1xuJiM0MztcdGlmICghZHN0c1tkaXJdIHx8ICFkc3RzWyFkaXJdKSB7XG4mIzQzO1x0XHRkc3RfcmVsZWFzZShkc3RzW2Rpcl0pO1xuJiM0MztcdFx0ZHN0X3JlbGVhc2UoZHN0c1shZGlyXSk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT0VOVDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG5mdF9kZWZhdWx0X2ZvcndhcmRfcGF0aChyb3V0ZSwgZHN0c1tkaXJdLCBkaXIpO1xuJiM0MztcdG5mdF9kZWZhdWx0X2ZvcndhcmRfcGF0aChyb3V0ZSwgZHN0c1shZGlyXSwgIWRpcik7XG4mIzQzO1x0LyogRHJvcCBhbGxvY2F0aW9uIHJlZmVyZW5jZXM7IHJvdXRlLVx1MDAzZXR1cGxlWypdLmRzdCBob2xkcyB0aGUgY2xvbmVzLiAqL1xuJiM0MztcdGRzdF9yZWxlYXNlKGRzdHNbZGlyXSk7XG4mIzQzO1x0ZHN0X3JlbGVhc2UoZHN0c1shZGlyXSk7XG4mIzQzO1xuJiM0MztcdGlmIChyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgcm91dGUtXHUwMDNldHVwbGVbIWRpcl0ueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIKSB7XG4mIzQzO1x0XHRpZiAobmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCB0cnVlLCByb3V0ZSwgY3QsIGRpciwgZnQpIHx8XG4mIzQzO1x0XHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCB0cnVlLCByb3V0ZSwgY3QsICFkaXIsIGZ0KSkge1xuJiM0MztcdFx0XHRkc3RfcmVsZWFzZShyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLmRzdCk7XG4mIzQzO1x0XHRcdGRzdF9yZWxlYXNlKHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLmRzdCk7XG4mIzQzO1x0XHRcdHJldHVybiAtRU5PRU5UO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuJiM0MztcdFx0ICAgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuJiM0MztcdFx0ICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxuJiM0Mzt7XG4mIzQzO1x0aWYgKG5mdF9mbG93X29mZmxvYWRfaXNfYnJpZGdpbmcocGt0LVx1MDAzZXNrYikpXG4mIzQzO1x0XHRyZXR1cm4gbmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmcocGt0LCBjdCwgcm91dGUsIGRpciwgZnQpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gbmZ0X2Zsb3dfcm91dGVfcm91dGluZyhwa3QsIGN0LCByb3V0ZSwgZGlyLCBmdCk7XG4mIzQzO31cbiBFWFBPUlRfU1lNQk9MX0dQTChuZnRfZmxvd19yb3V0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTI6NTY8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MTVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdSYjMzQ7LAogICAgJiMzNDticl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1JiMzNDssCiAgICAmIzM0O2JyX3ZsYW5faXNfZW5hYmxlZF9yY3UmIzM0OywKICAgICYjMzQ7X19kZXZfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfcm91dGUmIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmcmIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfb2ZmbG9hZF9pc19icmlkZ2luZyYjMzQ7LAogICAgJiMzNDtuZnRfYnJfdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7bmZ0X2ZpbGxfdmxhbl9wYXNzdGhyb3VnaF9pbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZmxvdyBvZmZsb2FkIG9mIGJyaWRnZWQgdHJhZmZpYy4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIGNoZWNrIGJyaWRnZSBGREIgZW50cmllcyBhbmQgVkxBTiBpbmZvcm1hdGlvbiBmb3IgZmxvdyBvZmZsb2FkLCBhbmQgbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIHBhdGggdG8gaGFuZGxlIGJyaWRnZWQgdHJhZmZpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMDUyOTVkNjJlZWNmMjg5ODZlMThhYWQ3NzljZjVkY2YzZDA1OTZhZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVuIDI5IDEyOjU2OjI3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaCBiL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmgKaW5kZXggNzU2NzNiOGJmZmNiOGEuLmMxY2FlNTQ3NDljNTE2IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2lmX2JyaWRnZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmgKQEAgLTE0OCw2ICYjNDM7MTQ4LDkgQEAgaW50IGJyX3ZsYW5fZ2V0X2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCwKIAkJICAgICBzdHJ1Y3QgYnJpZGdlX3ZsYW5faW5mbyAqcF92aW5mbyk7CiBpbnQgYnJfdmxhbl9nZXRfaW5mb19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCwKIAkJCSBzdHJ1Y3QgYnJpZGdlX3ZsYW5faW5mbyAqcF92aW5mbyk7CiYjNDM7dTE2IGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiAqcHJvdG8pOwomIzQzO2Jvb2wgYnJfdmxhbl9pc19lbmFibGVkX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGJvb2wgYnJfbXN0X2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgYnJfbXN0X2dldF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBtc3RpLCB1bnNpZ25lZCBsb25nICp2aWRzKTsKIGludCBicl9tc3RfZ2V0X3N0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBtc3RpLCB1OCAqc3RhdGUpOwpAQCAtMTg0LDYgJiM0MzsxODcsMTcgQEAgc3RhdGljIGlubGluZSBpbnQgYnJfdmxhbl9nZXRfaW5mb19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCwKIAlyZXR1cm4gLUVJTlZBTDsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgdTE2IGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJCQljb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAomIzQzOwkJCQkJCV9fYmUxNiAqcHJvdG8pCiYjNDM7ewomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSBib29sIGJyX3ZsYW5faXNfZW5hYmxlZF9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiBzdGF0aWMgaW5saW5lIGJvb2wgYnJfbXN0X2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlyZXR1cm4gZmFsc2U7CkBAIC0yMDksNiAmIzQzOzIyMyw4IEBAIHZvaWQgYnJfZmRiX2NsZWFyX29mZmxvYWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCk7CiBib29sIGJyX3BvcnRfZmxhZ19pc19zZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFnKTsKIHU4IGJyX3BvcnRfZ2V0X3N0cF9zdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIGNsb2NrX3QgYnJfZ2V0X2FnZWluZ190aW1lKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpicl9kZXYpOwomIzQzO2Jvb2wgYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHU4ICphZGRyKTsKICNlbHNlCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICoKIGJyX2ZkYl9maW5kX3BvcnQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldiwKQEAgLTIzNyw2ICYjNDM7MjUzLDEzIEBAIHN0YXRpYyBpbmxpbmUgY2xvY2tfdCBicl9nZXRfYWdlaW5nX3RpbWUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldikKIHsKIAlyZXR1cm4gMDsKIH0KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkJCSAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsCiYjNDM7CQkJCQkJICAgY29uc3QgdTggKmFkZHIpCiYjNDM7ewomIzQzOwlyZXR1cm4gZmFsc2U7CiYjNDM7fQogI2VuZGlmCiAKICNlbmRpZgpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKaW5kZXggOTk4MWQ2MzdmOGI1NDYuLmMxZDBiODk3ZGU5NTM0IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgKQEAgLTM0MjIsNiAmIzQzOzM0MjIsOCBAQCBpbnQgZGV2X2dldF9pZmxpbmsoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CiBpbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpOwogaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsCiAJCQkgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTsKJiM0MztpbnQgX19kZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwgY29uc3QgdTggKmRhZGRyLAomIzQzOwkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayk7CiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7CiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lX3JjdShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpOwogc3RydWN0IG5ldF9kZXZpY2UgKl9fZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7CmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2ZkYi5jIGIvbmV0L2JyaWRnZS9icl9mZGIuYwppbmRleCBlNDU3MGJiZWQ4NTQ0NS4uMzE2MWMyNjg5ZjZhNmYgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfZmRiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L2JyaWRnZS9icl9mZGIuYwpAQCAtMjY3LDYgJiM0MzsyNjcsMzggQEAgc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpicl9mZGJfZmluZF9yY3Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLAogCXJldHVybiBmZGJfZmluZF9yY3UoJmFtcDtici0mZ3Q7ZmRiX2hhc2hfdGJsLCBhZGRyLCB2aWQpOwogfQogCiYjNDM7LyoqCiYjNDM7ICogYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdSAtIGNoZWNrIGlmIGEgTUFDIGNhbiBiZSBmb3J3YXJkZWQgYnkgdGhlIGJyaWRnZQomIzQzOyAqIEBkZXY6IGJyaWRnZSBwb3J0IG5ldHdvcmsgZGV2aWNlCiYjNDM7ICogQHNrYjogcGFja2V0IGJ1ZmZlciAodXNlZCB0byBkZXRlcm1pbmUgVkxBTiBpZCkKJiM0MzsgKiBAYWRkcjogZGVzdGluYXRpb24gTUFDIGFkZHJlc3MKJiM0MzsgKgomIzQzOyAqIFJlc29sdmVzIHRoZSBWTEFOIGlkIGZvciBAc2tiIG9uIEBkZXYgKHNrYiBWTEFOIHRhZyB3aGVuIHByZXNlbnQsIFBWSUQKJiM0MzsgKiB3aGVuIFZMQU4gZmlsdGVyaW5nIGlzIGVuYWJsZWQsIDAgb3RoZXJ3aXNlKSB0aGVuIGNoZWNrcyB3aGV0aGVyIHRoZSBicmlkZ2UKJiM0MzsgKiBGREIgY29udGFpbnMgYSBmb3J3YXJkaW5nIGVudHJ5IChkc3QgIT0gTlVMTCwgbm90IGEgbG9jYWwvc2VsZiBlbnRyeSkgZm9yCiYjNDM7ICogQGFkZHIgYW5kIHRoYXQgVkxBTiBpZC4gU2luZ2xlIGJyX3BvcnRfZ2V0X3JjdSgpIGxvb2t1cC4KJiM0MzsgKiBNdXN0IGJlIGNhbGxlZCB1bmRlciBSQ1UgcmVhZCBsb2NrLgomIzQzOyAqLwomIzQzO2Jvb2wgYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHU4ICphZGRyKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IGJyX3BvcnRfZ2V0X3JjdShkZXYpOwomIzQzOwlzdHJ1Y3QgbmV0X2JyaWRnZV9mZGJfZW50cnkgKmZkYjsKJiM0MzsJdTE2IHZpZCA9IDA7CiYjNDM7CiYjNDM7CWlmICghcG9ydCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGJyX29wdF9nZXQocG9ydC0mZ3Q7YnIsIEJST1BUX1ZMQU5fRU5BQkxFRCkpIHsKJiM0MzsJCWlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKQomIzQzOwkJCXZpZCA9IHNrYl92bGFuX3RhZ19nZXRfaWQoc2tiKTsKJiM0MzsJCWVsc2UKJiM0MzsJCQlicl92bGFuX2dldF9wdmlkX3JjdShkZXYsICZhbXA7dmlkKTsKJiM0MzsJfQomIzQzOwlmZGIgPSBicl9mZGJfZmluZF9yY3UocG9ydC0mZ3Q7YnIsIGFkZHIsIHZpZCk7CiYjNDM7CXJldHVybiBmZGIgJmFtcDsmYW1wOyBmZGItJmd0O2RzdDsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdSk7CiYjNDM7CiAvKiBXaGVuIGEgc3RhdGljIEZEQiBlbnRyeSBpcyBhZGRlZCwgdGhlIG1hYyBhZGRyZXNzIGZyb20gdGhlIGVudHJ5IGlzCiAgKiBhZGRlZCB0byB0aGUgYnJpZGdlIHByaXZhdGUgSFcgYWRkcmVzcyBsaXN0IGFuZCBhbGwgcmVxdWlyZWQgcG9ydHMKICAqIGFyZSB0aGVuIHVwZGF0ZWQgd2l0aCB0aGUgbmV3IGluZm9ybWF0aW9uLgpkaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl92bGFuLmMgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uYwppbmRleCA1NTYwYWZjYWFjYTMyNy4uMGIyOTYzNjJhZGY3YzkgMTAwNjQ0Ci0tLSBhL25ldC9icmlkZ2UvYnJfdmxhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9icmlkZ2UvYnJfdmxhbi5jCkBAIC0xNTU5LDYgJiM0MzsxNTU5LDUxIEBAIGludCBicl92bGFuX2dldF9pbmZvX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkLAogfQogRVhQT1JUX1NZTUJPTF9HUEwoYnJfdmxhbl9nZXRfaW5mb19yY3UpOwogCiYjNDM7LyoqCiYjNDM7ICogYnJfdmxhbl9nZXRfb2ZmbG9hZF9pbmZvX3JjdSAtIGdldCBWTEFOIGlkIGFuZCBwcm90b2NvbCBmb3IgYnJpZGdlIGZsb3cgb2ZmbG9hZAomIzQzOyAqIEBkZXY6IGJyaWRnZSBwb3J0IG5ldHdvcmsgZGV2aWNlCiYjNDM7ICogQHNrYjogcGFja2V0IGJ1ZmZlcgomIzQzOyAqIEBwcm90bzogb3V0cHV0IGZvciB0aGUgYnJpZGdlIFZMQU4gcHJvdG9jb2wgKHNldCBvbmx5IHdoZW4gcmV0dXJuIHZhbHVlICE9IDApCiYjNDM7ICoKJiM0MzsgKiBXaGVuIFZMQU4gZmlsdGVyaW5nIGlzIGVuYWJsZWQsIHJlc29sdmVzIHRoZSBWTEFOIGlkIGZvciBmbG93IG9mZmxvYWQgKHNrYgomIzQzOyAqIFZMQU4gdGFnIGlkIGlmIHByZXNlbnQsIFBWSUQgb3RoZXJ3aXNlKSBhbmQgd3JpdGVzIHRoZSBicmlkZ2UgVkxBTiBwcm90b2NvbAomIzQzOyAqIHRvIEBwcm90by4gUmV0dXJucyAwIHdoZW4gZmlsdGVyaW5nIGlzIG9mZiBvciBAZGV2IGlzIG5vdCBhIGJyaWRnZSBwb3J0LgomIzQzOyAqIFNpbmdsZSBicl9wb3J0X2dldF9yY3UoKSBsb29rdXAuIE11c3QgYmUgY2FsbGVkIHVuZGVyIFJDVSByZWFkIGxvY2suCiYjNDM7ICovCiYjNDM7dTE2IGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKJiM0MzsJCQkJIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiAqcHJvdG8pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0ID0gYnJfcG9ydF9nZXRfcmN1KGRldik7CiYjNDM7CXUxNiB2aWQgPSAwOwomIzQzOwomIzQzOwlpZiAoIXBvcnQgfHwgIWJyX29wdF9nZXQocG9ydC0mZ3Q7YnIsIEJST1BUX1ZMQU5fRU5BQkxFRCkpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJaWYgKHNrYl92bGFuX3RhZ19wcmVzZW50KHNrYikpCiYjNDM7CQl2aWQgPSBza2Jfdmxhbl90YWdfZ2V0X2lkKHNrYik7CiYjNDM7CWVsc2UKJiM0MzsJCWJyX3ZsYW5fZ2V0X3B2aWRfcmN1KGRldiwgJmFtcDt2aWQpOwomIzQzOwlpZiAodmlkKQomIzQzOwkJKnByb3RvID0gcG9ydC0mZ3Q7YnItJmd0O3ZsYW5fcHJvdG87CiYjNDM7CXJldHVybiB2aWQ7CiYjNDM7fQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3UpOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJyX3ZsYW5faXNfZW5hYmxlZF9yY3UgLSBjaGVjayBpZiBWTEFOIGZpbHRlcmluZyBpcyBhY3RpdmUgb24gYSBwb3J0JiMzOTtzIGJyaWRnZQomIzQzOyAqIEBkZXY6IGJyaWRnZSBwb3J0IG5ldHdvcmsgZGV2aWNlCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm5zIHRydWUgaWYgVkxBTiBmaWx0ZXJpbmcgaXMgZW5hYmxlZCBvbiB0aGUgYnJpZGdlIEBkZXYgYmVsb25ncyB0by4KJiM0MzsgKiBSZXR1cm5zIGZhbHNlIHdoZW4gQGRldiBpcyBub3QgYSBicmlkZ2UgcG9ydCBvciBmaWx0ZXJpbmcgaXMgb2ZmLgomIzQzOyAqIE11c3QgYmUgY2FsbGVkIHVuZGVyIFJDVSByZWFkIGxvY2suCiYjNDM7ICovCiYjNDM7Ym9vbCBicl92bGFuX2lzX2VuYWJsZWRfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwb3J0ID0gYnJfcG9ydF9nZXRfcmN1KGRldik7CiYjNDM7CiYjNDM7CXJldHVybiBwb3J0ICZhbXA7JmFtcDsgYnJfb3B0X2dldChwb3J0LSZndDticiwgQlJPUFRfVkxBTl9FTkFCTEVEKTsKJiM0Mzt9CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoYnJfdmxhbl9pc19lbmFibGVkX3JjdSk7CiYjNDM7CiBzdGF0aWMgaW50IGJyX3ZsYW5faXNfYmluZF92bGFuX2Rldihjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXJldHVybiBpc192bGFuX2RldihkZXYpICZhbXA7JmFtcDsKZGlmZiAtLWdpdCBhL25ldC9jb3JlL2Rldi5jIGIvbmV0L2NvcmUvZGV2LmMKaW5kZXggNGIzZDVjZmRmNmUwMGYuLjYyZjFkMGI2NGM3NmRlIDEwMDY0NAotLS0gYS9uZXQvY29yZS9kZXYuYwomIzQzOyYjNDM7JiM0MzsgYi9uZXQvY29yZS9kZXYuYwpAQCAtNzUwLDQ0ICYjNDM7NzUwLDUyIEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpkZXZfZndkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spCiAJcmV0dXJuICZhbXA7c3RhY2stJmd0O3BhdGhba107CiB9CiAKLWludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLAotCQkJICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaykKJiM0MztpbnQgX19kZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwgY29uc3QgdTggKmRhZGRyLAomIzQzOwkJCSAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaykKIHsKIAljb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqbGFzdF9kZXY7Ci0Jc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0gewotCQkuZGV2CT0gZGV2LAotCX07CiAJc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDsKIAlpbnQgcmV0ID0gMDsKIAotCW1lbWNweShjdHguZGFkZHIsIGRhZGRyLCBzaXplb2YoY3R4LmRhZGRyKSk7CiYjNDM7CW1lbWNweShjdHgtJmd0O2RhZGRyLCBkYWRkciwgc2l6ZW9mKGN0eC0mZ3Q7ZGFkZHIpKTsKIAlzdGFjay0mZ3Q7bnVtX3BhdGhzID0gMDsKLQl3aGlsZSAoY3R4LmRldiAmYW1wOyZhbXA7IGN0eC5kZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19maWxsX2ZvcndhcmRfcGF0aCkgewotCQlsYXN0X2RldiA9IGN0eC5kZXY7CiYjNDM7CXdoaWxlIChjdHgtJmd0O2RldiAmYW1wOyZhbXA7IGN0eC0mZ3Q7ZGV2LSZndDtuZXRkZXZfb3BzLSZndDtuZG9fZmlsbF9mb3J3YXJkX3BhdGgpIHsKJiM0MzsJCWxhc3RfZGV2ID0gY3R4LSZndDtkZXY7CiAJCXBhdGggPSBkZXZfZndkX3BhdGgoc3RhY2spOwogCQlpZiAoIXBhdGgpCiAJCQlyZXR1cm4gLTE7CiAKIAkJbWVtc2V0KHBhdGgsIDAsIHNpemVvZihzdHJ1Y3QgbmV0X2RldmljZV9wYXRoKSk7Ci0JCXJldCA9IGN0eC5kZXYtJmd0O25ldGRldl9vcHMtJmd0O25kb19maWxsX2ZvcndhcmRfcGF0aCgmYW1wO2N0eCwgcGF0aCk7CiYjNDM7CQlyZXQgPSBjdHgtJmd0O2Rldi0mZ3Q7bmV0ZGV2X29wcy0mZ3Q7bmRvX2ZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCk7CiAJCWlmIChyZXQgJmx0OyAwKQogCQkJcmV0dXJuIC0xOwogCi0JCWlmIChXQVJOX09OX09OQ0UobGFzdF9kZXYgPT0gY3R4LmRldikpCiYjNDM7CQlpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC0mZ3Q7ZGV2KSkKIAkJCXJldHVybiAtMTsKIAl9CiAKLQlpZiAoIWN0eC5kZXYpCiYjNDM7CWlmICghY3R4LSZndDtkZXYpCiAJCXJldHVybiByZXQ7CiAKIAlwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTsKIAlpZiAoIXBhdGgpCiAJCXJldHVybiAtMTsKIAlwYXRoLSZndDt0eXBlID0gREVWX1BBVEhfRVRIRVJORVQ7Ci0JcGF0aC0mZ3Q7ZGV2ID0gY3R4LmRldjsKJiM0MzsJcGF0aC0mZ3Q7ZGV2ID0gY3R4LSZndDtkZXY7CiAKIAlyZXR1cm4gcmV0OwogfQomIzQzO0VYUE9SVF9TWU1CT0xfR1BMKF9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTsKJiM0MzsKJiM0MztpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkciwKJiM0MzsJCQkgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0gewomIzQzOwkJLmRldgk9IGRldiwKJiM0MzsJfTsKJiM0MzsKJiM0MzsJcmV0dXJuIF9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKCZhbXA7Y3R4LCBkYWRkciwgc3RhY2spOwomIzQzO30KIEVYUE9SVF9TWU1CT0xfR1BMKGRldl9maWxsX2ZvcndhcmRfcGF0aCk7CiAKIC8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2soKSwgYXMgd2UgZG9udCB0YWtlIGEgcmVmZXJlbmNlICovCmRpZmYgLS1naXQgYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jIGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYwppbmRleCA5OGMwM2I0ODdmNTIxMS4uZDE1YzQyNWM4OGM0YWEgMTAwNjQ0Ci0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYwpAQCAtMTUsNiAmIzQzOzE1LDExIEBACiAjaW5jbHVkZSAmbHQ7bmV0L25ldGZpbHRlci9uZl9jb25udHJhY2tfY29yZS5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfY29ubnRyYWNrX2V4dGVuZC5oJmd0OwogI2luY2x1ZGUgJmx0O25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pZl9icmlkZ2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfZXRoZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaWZfdmxhbi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvcm91dGUuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bmV0L2lwNl9yb3V0ZS5oJmd0OwogCiBzdGF0aWMgZW51bSBmbG93X29mZmxvYWRfeG1pdF90eXBlIG5mdF94bWl0X3R5cGUoc3RydWN0IGRzdF9lbnRyeSAqZHN0KQogewpAQCAtNDIsNyAmIzQzOzQ3LDI1IEBAIHN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwKJiM0MztzdGF0aWMgYm9vbCBuZnRfZmxvd19vZmZsb2FkX2lzX2JyaWRnaW5nKHN0cnVjdCBza19idWZmICpza2IpCiYjNDM7ewomIzQzOwlib29sIHJldDsKJiM0MzsKJiM0MzsJaWYgKCFuZXRpZl9pc19icmlkZ2VfcG9ydChza2ItJmd0O2RldikpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmICghc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXJldCA9IGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3Uoc2tiLSZndDtkZXYsIHNrYiwKJiM0MzsJCQkJCSAgICAgIGV0aF9oZHIoc2tiKS0mZ3Q7aF9kZXN0KTsKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdF9jYWNoZSwKIAkJCQkgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwKIAkJCQkgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIHU4ICpoYSwKQEAgLTU4LDYgJiM0Mzs4MSwxMiBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLAogCQlnb3RvIG91dDsKIAl9CiAKJiM0MzsJLyogQnJpZGdpbmcgZmFzdHBhdGggY29waWVzIEV0aGVybmV0IGFkZHJlc3NlcyBpbnRvIGhhOyBkbyBub3QgcmVwbGFjZQomIzQzOwkgKiB0aGVtIHZpYSBuZWlnaGJvdXIgbG9va3VwIG9uIHRoZSByb3V0ZWQgZGVzdGluYXRpb24gZGV2aWNlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFpc196ZXJvX2V0aGVyX2FkZHIoaGEpKQomIzQzOwkJZ290byBvdXQ7CiYjNDM7CiAJbiA9IGRzdF9uZWlnaF9sb29rdXAoZHN0X2NhY2hlLCBkYWRkcik7CiAJaWYgKCFuKQogCQlyZXR1cm4gLTE7CkBAIC03Miw3ICYjNDM7MTAxLDIzIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsCiAJCXJldHVybiAtMTsKIAogb3V0OgotCXJldHVybiBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBoYSwgc3RhY2spOwomIzQzOwlyZXR1cm4gX19kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBoYSwgc3RhY2spOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBuZnRfYnJfdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiYjNDM7CQkJCQkgICAgICBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4KQomIzQzO3sKJiM0MzsJX19iZTE2IHByb3RvID0gMDsKJiM0MzsJdTE2IHZsYW5faWQ7CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJdmxhbl9pZCA9IGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3UocGt0LSZndDtza2ItJmd0O2RldiwgcGt0LSZndDtza2IsICZhbXA7cHJvdG8pOwomIzQzOwlpZiAodmxhbl9pZCkgewomIzQzOwkJY3R4LSZndDtudW1fdmxhbnMgPSAxOwomIzQzOwkJY3R4LSZndDt2bGFuWzBdLmlkID0gdmxhbl9pZDsKJiM0MzsJCWN0eC0mZ3Q7dmxhblswXS5wcm90byA9IHByb3RvOwomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwogfQogCiBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7CkBAIC05Miw2ICYjNDM7MTM3LDI5IEBAIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHsKIAllbnVtIGZsb3dfb2ZmbG9hZF94bWl0X3R5cGUgeG1pdF90eXBlOwogfTsKIAomIzQzO3N0YXRpYyB2b2lkIG5mdF9maWxsX3ZsYW5fcGFzc3Rocm91Z2hfaW5mbyhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwKJiM0MzsJCQkJCSAgIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJaWYgKCFza2Jfdmxhbl90YWdfcHJlc2VudChwa3QtJmd0O3NrYikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJLyogd2hlbiBicmlkZ2UgVkxBTiBmaWx0ZXJpbmcgaXMgZW5hYmxlZCwgdGhlIGJyaWRnZSBoYW5kbGVzIHRoZSB0YWcgKi8KJiM0MzsJaWYgKG5ldGlmX2lzX2JyaWRnZV9wb3J0KHBrdC0mZ3Q7c2tiLSZndDtkZXYpICZhbXA7JmFtcDsKJiM0MzsJICAgICFicl92bGFuX2lzX2VuYWJsZWRfcmN1KHBrdC0mZ3Q7c2tiLSZndDtkZXYpKSB7CiYjNDM7CQlpZiAoaW5mby0mZ3Q7bnVtX2VuY2FwcyAmZ3Q7PSBORl9GTE9XX1RBQkxFX0VOQ0FQX01BWCkgewomIzQzOwkJCWluZm8tJmd0O2luZGV2ID0gTlVMTDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJaW5mby0mZ3Q7ZW5jYXBbaW5mby0mZ3Q7bnVtX2VuY2Fwc10uaWQgPQomIzQzOwkJCQlza2Jfdmxhbl90YWdfZ2V0X2lkKHBrdC0mZ3Q7c2tiKTsKJiM0MzsJCQlpbmZvLSZndDtlbmNhcFtpbmZvLSZndDtudW1fZW5jYXBzXS5wcm90byA9CiYjNDM7CQkJCXBrdC0mZ3Q7c2tiLSZndDt2bGFuX3Byb3RvOwomIzQzOwkJCWluZm8tJmd0O251bV9lbmNhcHMmIzQzOyYjNDM7OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXJjdV9yZWFkX3VubG9jaygpOwomIzQzO30KJiM0MzsKIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssCiAJCQkgICAgIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvICppbmZvLAogCQkJICAgICB1bnNpZ25lZCBjaGFyICpoYSwgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKQpAQCAtMTAzLDEzICYjNDM7MTcxLDEzIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssCiAKIAlmb3IgKGkgPSAwOyBpICZsdDsgc3RhY2stJmd0O251bV9wYXRoczsgaSYjNDM7JiM0MzspIHsKIAkJcGF0aCA9ICZhbXA7c3RhY2stJmd0O3BhdGhbaV07CiYjNDM7CQlpbmZvLSZndDtpbmRldiA9IHBhdGgtJmd0O2RldjsKIAkJc3dpdGNoIChwYXRoLSZndDt0eXBlKSB7CiAJCWNhc2UgREVWX1BBVEhfRVRIRVJORVQ6CiAJCWNhc2UgREVWX1BBVEhfRFNBOgogCQljYXNlIERFVl9QQVRIX1ZMQU46CiAJCWNhc2UgREVWX1BBVEhfUFBQT0U6CiAJCWNhc2UgREVWX1BBVEhfVFVOOgotCQkJaW5mby0mZ3Q7aW5kZXYgPSBwYXRoLSZndDtkZXY7CiAJCQlpZiAoaXNfemVyb19ldGhlcl9hZGRyKGluZm8tJmd0O2hfc291cmNlKSkKIAkJCQltZW1jcHkoaW5mby0mZ3Q7aF9zb3VyY2UsIHBhdGgtJmd0O2Rldi0mZ3Q7ZGV2X2FkZHIsIEVUSF9BTEVOKTsKIApAQCAtMTc1LDYgJiM0MzsyNDMsMTAgQEAgc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjaywKIAkJCX0KIAkJCWluZm8tJmd0O3htaXRfdHlwZSA9IEZMT1dfT0ZGTE9BRF9YTUlUX0RJUkVDVDsKIAkJCWJyZWFrOwomIzQzOwkJY2FzZSBERVZfUEFUSF9NVEtfV0RNQToKJiM0MzsJCQlpZiAoaXNfemVyb19ldGhlcl9hZGRyKGluZm8tJmd0O2hfc291cmNlKSkKJiM0MzsJCQkJbWVtY3B5KGluZm8tJmd0O2hfc291cmNlLCBwYXRoLSZndDtkZXYtJmd0O2Rldl9hZGRyLCBFVEhfQUxFTik7CiYjNDM7CQkJYnJlYWs7CiAJCWRlZmF1bHQ6CiAJCQlyZXR1cm4gLTE7CiAJCX0KQEAgLTI0NCw2ICYjNDM7MzE2LDcgQEAgc3RhdGljIGludCBuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAogfQogCiBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAomIzQzOwkJCQlib29sIGlzX2JyaWRnaW5nLAogCQkJCXN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwKIAkJCQljb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJCQkJZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKQEAgLTI1MSwxMiAmIzQzOzMyNCwzOCBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LAogewogCWNvbnN0IHN0cnVjdCBkc3RfZW50cnkgKmRzdCA9IHJvdXRlLSZndDt0dXBsZVtkaXJdLmRzdDsKIAlzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrIHN0YWNrOwomIzQzOwlzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7CiYjNDM7CQkuZGV2CT0gZHN0LSZndDtkZXYsCiYjNDM7CX07CiAJc3RydWN0IG5mdF9mb3J3YXJkX2luZm8gaW5mbyA9IHt9OwomIzQzOwllbnVtIGlwX2Nvbm50cmFja19pbmZvIHBrdF9jdGluZm87CiYjNDM7CWVudW0gaXBfY29ubnRyYWNrX2RpciBza2JfZGlyOwomIzQzOwlzdHJ1Y3QgZXRoaGRyICpldGg7CiAJdW5zaWduZWQgY2hhciBoYVtFVEhfQUxFTl07CiAJaW50IGk7CiAKLQlpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChyb3V0ZSwgZHN0LCBjdCwgZGlyLCBoYSwgJmFtcDtzdGFjaykgJmx0OyAwIHx8Ci0JICAgIG5mdF9kZXZfcGF0aF9pbmZvKCZhbXA7c3RhY2ssICZhbXA7aW5mbywgaGEsICZhbXA7ZnQtJmd0O2RhdGEpICZsdDsgMCkKJiM0MzsJbWVtc2V0KGhhLCAwLCBzaXplb2YoaGEpKTsKJiM0MzsKJiM0MzsJaWYgKGlzX2JyaWRnaW5nKSB7CiYjNDM7CQluZl9jdF9nZXQocGt0LSZndDtza2IsICZhbXA7cGt0X2N0aW5mbyk7CiYjNDM7CQlldGggPSBldGhfaGRyKHBrdC0mZ3Q7c2tiKTsKJiM0MzsJCXNrYl9kaXIgPSBDVElORk8yRElSKHBrdF9jdGluZm8pOwomIzQzOwkJaWYgKHNrYl9kaXIgIT0gZGlyKSB7CiYjNDM7CQkJbWVtY3B5KGhhLCBldGgtJmd0O2hfc291cmNlLCBFVEhfQUxFTik7CiYjNDM7CQkJbWVtY3B5KGluZm8uaF9zb3VyY2UsIGV0aC0mZ3Q7aF9kZXN0LCBFVEhfQUxFTik7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCW1lbWNweShoYSwgZXRoLSZndDtoX2Rlc3QsIEVUSF9BTEVOKTsKJiM0MzsJCQltZW1jcHkoaW5mby5oX3NvdXJjZSwgZXRoLSZndDtoX3NvdXJjZSwgRVRIX0FMRU4pOwomIzQzOwkJfQomIzQzOwkJbmZ0X2JyX3ZsYW5fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHBrdCwgJmFtcDtjdHgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKCZhbXA7Y3R4LCByb3V0ZSwgZHN0LCBjdCwgZGlyLCBoYSwgJmFtcDtzdGFjaykgJmx0OyAwKQomIzQzOwkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CiYjNDM7CW5mdF9maWxsX3ZsYW5fcGFzc3Rocm91Z2hfaW5mbyhwa3QsICZhbXA7aW5mbyk7CiYjNDM7CiYjNDM7CWlmIChuZnRfZGV2X3BhdGhfaW5mbygmYW1wO3N0YWNrLCAmYW1wO2luZm8sIGhhLCAmYW1wO2Z0LSZndDtkYXRhKSAmbHQ7IDApCiAJCXJldHVybiAtRU5PRU5UOwogCiAJaWYgKCFuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGluZm8uaW5kZXYsIGZ0KSkKQEAgLTI5Miw5ICYjNDM7MzkxLDExIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiAJcmV0dXJuIDA7CiB9CiAKLWludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAotCQkgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsCi0JCSAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdCkKJiM0MztzdGF0aWMgaW50IG5mdF9mbG93X3JvdXRlX3JvdXRpbmcoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCiYjNDM7CQkJCSAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAomIzQzOwkJCQkgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwKJiM0MzsJCQkJICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLAomIzQzOwkJCQkgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdCkKIHsKIAlzdHJ1Y3QgZHN0X2VudHJ5ICp0aGlzX2RzdCA9IHNrYl9kc3QocGt0LSZndDtza2IpOwogCXN0cnVjdCBkc3RfZW50cnkgKm90aGVyX2RzdCA9IE5VTEw7CkBAIC0zMzQsMTIgJiM0Mzs0MzUsMTIgQEAgaW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJbmZ0X2RlZmF1bHRfZm9yd2FyZF9wYXRoKHJvdXRlLCB0aGlzX2RzdCwgZGlyKTsKIAluZnRfZGVmYXVsdF9mb3J3YXJkX3BhdGgocm91dGUsIG90aGVyX2RzdCwgIWRpcik7CiAKLQlpZiAocm91dGUtJmd0O3R1cGxlW2Rpcl0ueG1pdF90eXBlCT09IEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIICZhbXA7JmFtcDsKLQkgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCByb3V0ZSwgY3QsIGRpciwgZnQpICZsdDsgMCkKJiM0MzsJaWYgKHJvdXRlLSZndDt0dXBsZVtkaXJdLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCAmYW1wOyZhbXA7CiYjNDM7CSAgICBuZnRfZGV2X2ZvcndhcmRfcGF0aChwa3QsIGZhbHNlLCByb3V0ZSwgY3QsIGRpciwgZnQpICZsdDsgMCkKIAkJZ290byBlcnJfZHN0X3JlbGVhc2U7CiAKIAlpZiAocm91dGUtJmd0O3R1cGxlWyFkaXJdLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCAmYW1wOyZhbXA7Ci0JICAgIG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgcm91dGUsIGN0LCAhZGlyLCBmdCkgJmx0OyAwKQomIzQzOwkgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCBmYWxzZSwgcm91dGUsIGN0LCAhZGlyLCBmdCkgJmx0OyAwKQogCQlnb3RvIGVycl9kc3RfcmVsZWFzZTsKIAogCXJldHVybiAwOwpAQCAtMzQ5LDQgJiM0Mzs0NTAsODIgQEAgaW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCiAJZHN0X3JlbGVhc2Uocm91dGUtJmd0O3R1cGxlWyFkaXJdLmRzdCk7CiAJcmV0dXJuIC1FTk9FTlQ7CiB9CiYjNDM7CiYjNDM7c3RhdGljIGludCBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZyhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LAomIzQzOwkJCQkgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsCiYjNDM7CQkJCSAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsCiYjNDM7CQkJCSAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBkc3RfZW50cnkgKmRzdHNbSVBfQ1RfRElSX01BWF0gPSB7fTsKJiM0MzsJc3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldjsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CS8qIEFsbG9jYXRlIG1pbmltYWwgZHN0cyBhbmNob3JlZCB0byB0aGUgYnJpZGdlIG1hc3RlciBkZXZpY2UgdG8gc3VwcGx5CiYjNDM7CSAqIHhtaXRfdHlwZSBhbmQgTVRVLiBBIGZ1bGwgcm91dGluZyBsb29rdXAgdmlhIG5mX3JvdXRlKCkgaXMgYXZvaWRlZAomIzQzOwkgKiBiZWNhdXNlIGl0IGZhaWxzIGZvciBwcmVmaXhlcyB0aGF0IGFyZSBicmlkZ2VkIGJ1dCBub3Qgcm91dGVkLgomIzQzOwkgKi8KJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwlicl9kZXYgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXRfcmN1KHBrdC0mZ3Q7c2tiLSZndDtkZXYpOwomIzQzOwlpZiAoIWJyX2RldiB8fCAhbmV0aWZfaXNfYnJpZGdlX21hc3Rlcihicl9kZXYpKSB7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwl9CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBJUF9DVF9ESVJfTUFYOyBpJiM0MzsmIzQzOykgewomIzQzOwkJc3dpdGNoIChuZnRfcGYocGt0KSkgewomIzQzOwkJY2FzZSBORlBST1RPX0lQVjQ6IHsKJiM0MzsJCQlzdHJ1Y3QgcnRhYmxlICpydDsKJiM0MzsKJiM0MzsJCQlydCA9IHJ0X2RzdF9hbGxvYyhicl9kZXYsIDAsIFJUTl9VTklDQVNULCB0cnVlKTsKJiM0MzsJCQlpZiAocnQpCiYjNDM7CQkJCWRzdHNbaV0gPSAmYW1wO3J0LSZndDtkc3Q7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQljYXNlIE5GUFJPVE9fSVBWNjogewomIzQzOwkJCXN0cnVjdCBydDZfaW5mbyAqcnQ7CiYjNDM7CiYjNDM7CQkJcnQgPSBpcDZfZHN0X2FsbG9jKG5mdF9uZXQocGt0KSwgYnJfZGV2LCAwKTsKJiM0MzsJCQlpZiAocnQpCiYjNDM7CQkJCWRzdHNbaV0gPSAmYW1wO3J0LSZndDtkc3Q7CiYjNDM7CQkJYnJlYWs7CiYjNDM7CQl9CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CWlmICghZHN0c1tkaXJdIHx8ICFkc3RzWyFkaXJdKSB7CiYjNDM7CQlkc3RfcmVsZWFzZShkc3RzW2Rpcl0pOwomIzQzOwkJZHN0X3JlbGVhc2UoZHN0c1shZGlyXSk7CiYjNDM7CQlyZXR1cm4gLUVOT0VOVDsKJiM0MzsJfQomIzQzOwomIzQzOwluZnRfZGVmYXVsdF9mb3J3YXJkX3BhdGgocm91dGUsIGRzdHNbZGlyXSwgZGlyKTsKJiM0MzsJbmZ0X2RlZmF1bHRfZm9yd2FyZF9wYXRoKHJvdXRlLCBkc3RzWyFkaXJdLCAhZGlyKTsKJiM0MzsJLyogRHJvcCBhbGxvY2F0aW9uIHJlZmVyZW5jZXM7IHJvdXRlLSZndDt0dXBsZVsqXS5kc3QgaG9sZHMgdGhlIGNsb25lcy4gKi8KJiM0MzsJZHN0X3JlbGVhc2UoZHN0c1tkaXJdKTsKJiM0MzsJZHN0X3JlbGVhc2UoZHN0c1shZGlyXSk7CiYjNDM7CiYjNDM7CWlmIChyb3V0ZS0mZ3Q7dHVwbGVbZGlyXS54bWl0X3R5cGUgPT0gRkxPV19PRkZMT0FEX1hNSVRfTkVJR0ggJmFtcDsmYW1wOwomIzQzOwkgICAgcm91dGUtJmd0O3R1cGxlWyFkaXJdLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCkgewomIzQzOwkJaWYgKG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgdHJ1ZSwgcm91dGUsIGN0LCBkaXIsIGZ0KSB8fAomIzQzOwkJICAgIG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgdHJ1ZSwgcm91dGUsIGN0LCAhZGlyLCBmdCkpIHsKJiM0MzsJCQlkc3RfcmVsZWFzZShyb3V0ZS0mZ3Q7dHVwbGVbZGlyXS5kc3QpOwomIzQzOwkJCWRzdF9yZWxlYXNlKHJvdXRlLSZndDt0dXBsZVshZGlyXS5kc3QpOwomIzQzOwkJCXJldHVybiAtRU5PRU5UOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCwKJiM0MzsJCSAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwKJiM0MzsJCSAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdCkKJiM0Mzt7CiYjNDM7CWlmIChuZnRfZmxvd19vZmZsb2FkX2lzX2JyaWRnaW5nKHBrdC0mZ3Q7c2tiKSkKJiM0MzsJCXJldHVybiBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZyhwa3QsIGN0LCByb3V0ZSwgZGlyLCBmdCk7CiYjNDM7CiYjNDM7CXJldHVybiBuZnRfZmxvd19yb3V0ZV9yb3V0aW5nKHBrdCwgY3QsIHJvdXRlLCBkaXIsIGZ0KTsKJiM0Mzt9CiBFWFBPUlRfU1lNQk9MX0dQTChuZnRfZmxvd19yb3V0ZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEyOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg5NTUKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgQnJpZGdlZCBUcmFmZmljIEZsb3cgT2ZmbG9hZCBQYXRjaCoqCgpPa2F5LCBzbyB3ZSBoYXZlIHRoaXMgbmV3IHBhdGNoIHRoYXQgc2VlbXMgdG8gaW50cm9kdWNlIGZsb3cgb2ZmbG9hZCBzdXBwb3J0IGZvciBicmlkZ2VkIHRyYWZmaWMsIHdoaWNoIGlzIGEgcHJldHR5IGludGVyZXN0aW5nIGRldmVsb3BtZW50LiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZXMgYXJlIGNvbmNlbnRyYXRlZCBpbiBgbmV0L2JyaWRnZS9icl9mZGIuY2AsIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AsIGBuZXQvY29yZS9kZXYuY2AsIGFuZCBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY2AuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlc2UgbmV3IGZ1bmN0aW9ucyBsaWtlIGBicl9mZGJfaGFzX2ZvcndhcmRpbmdfZW50cnlfcmN1YCwgYGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3VgLCBgYnJfdmxhbl9pc19lbmFibGVkX3JjdWAsIGFuZCBgX19kZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGFyZSBleGFjdGx5IHdoYXQgSSB3b3VsZCBleHBlY3QgdG8gc2VlIGZvciBzb21ldGhpbmcgbGlrZSB0aGlzLiBBbmQgdGhlIG1vZGlmaWNhdGlvbiB0byBgbmZ0X2Zsb3dfcm91dGVgLCBwYXJ0aWN1bGFybHkgdGhlIGFkZGl0aW9uIG9mIGBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZ2AsIHN1Z2dlc3RzIGEgY2xlYXIgaW50ZWdyYXRpb24gd2l0aCB0aGUgTmV0ZmlsdGVyIGZsb3cgdGFibGUgZnJhbWV3b3JrLgoKRnJvbSBhIHF1aWNrIGdsYW5jZSwgdGhpcyBjb2RlIGxvb2tzIGZ1bmN0aW9uYWwgYW5kIHRoZSBsb2dpYyBpcyByZWFjaGFibGUsIHdoaWNoIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTXkgbmV4dCBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBnZXQgdGhpcyBpbnRvIGEgZnV6emluZyByZWdpbWUuIFRoYXQgc2VlbXMgbGlrZSBhIHdvcnRod2hpbGUgdGVzdCBzdHJhdGVneS4KCk5vdywgbGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIE9idmlvdXNseSwgYENPTkZJR19ORl9GTE9XX1RBQkxFYCBpcyBnb2luZyB0byBiZSByZXF1aXJlZCwgdGhhdCYjMzk7cyBhIG5vLWJyYWluZXIuIGBDT05GSUdfQlJJREdFYCBpcyBhbm90aGVyIG9idmlvdXMgb25lLiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgaXMgYSBtYXliZSwgYmFzZWQgb24gdGhlIGBicl92bGFuYCBmaWxlcywgc28gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgb25lLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2Agb3Igc2ltaWxhciBmaWxlcyBmb3IgYG5mX2Zsb3dfdGFibGVfcGF0aC5jYCB0byBjb25maXJtLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgcHJldHR5IGNsZWFyIHBpY3R1cmUgb2YgdGhlIG5lY2Vzc2FyeSBlbnZpcm9ubWVudCB0byByZXByb2R1Y2UgYW5kIHZhbGlkYXRlIHRoZSBwYXRjaCYjMzk7cyBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEyOjU2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25mX2Zsb3dfdGFibGVfcGF0aC5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTQzPW5mX2Zsb3dfdGFibGUtb2Jqc1x0XHQ6PSBuZl9mbG93X3RhYmxlX2NvcmUubyBuZl9mbG93X3RhYmxlX2lwLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ0Olx0XHRcdFx0ICAgbmZfZmxvd190YWJsZV9wYXRoLm8gXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTQ1LVx0XHRcdFx0ICAgbmZfZmxvd190YWJsZV9vZmZsb2FkLm8gbmZfZmxvd190YWJsZV94ZHAub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEyOjU2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3MzIKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipORl9GTE9XX1RBQkxFIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgQ09ORklHX05GX0ZMT1dfVEFCTEVgLiBSaWdodCwgdGhhdCYjMzk7cyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3ltYm9sIHRoYXQgZGlyZWN0bHkgY29udHJvbHMgd2hldGhlciB0aGUgYG5mX2Zsb3dfdGFibGVgIG9iamVjdCBmaWxlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiBJdCYjMzk7cyBhIHByZXR0eSBzdHJhaWdodGZvcndhcmQgZGVwZW5kZW5jeSwgbm8gcmVhbCBzdXJwcmlzZXMgdGhlcmUuIEkmIzM5O20gYXNzdW1pbmcgdGhhdCB0aGlzIGlzIGEgY3JpdGljYWwgbW9kdWxlIGZvciBhbnkgc3lzdGVtIHVzaW5nIGNvbm5lY3Rpb24gdHJhY2tpbmcgb3IgTmV0ZmlsdGVyJiMzOTtzIGZsb3cgdGFibGUgaW1wbGVtZW50YXRpb24uIFRoZSBpbXBhY3Qgb2YgdGhpcyBzZXR0aW5nIHdpbGwgZGVwZW5kIG9uIHRoZSByZXN0IG9mIG15IGNvbmZpZ3VyYXRpb24sIG9mIGNvdXJzZSAtIHBhcnRpY3VsYXJseSBob3cgdGhlIGtlcm5lbCBpcyBjb21waWxlZCBhbmQgd2hpY2ggZmVhdHVyZXMgSSBoYXZlIGVuYWJsZWQuIEkgd2FudCB0byBkaXZlIGEgbGl0dGxlIGRlZXBlciwgSSYjMzk7ZCBzYXkgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hldGhlciB0aGlzIGlzIGEgaGFyZCBvciBzb2Z0IGRlcGVuZGVuY3kgb24gb3RoZXIgcGFydHMgb2YgdGhlIE5ldGZpbHRlciBzdWJzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTI6NTc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE5GX0ZMT1dfVEFCTEUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9LY29uZmlnPTcwMT1lbmRpZiAjIE5GX1RBQkxFU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcwMi1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcwNC1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcJiMzNDtcbi0tXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxubmV0L25ldGZpbHRlci9LY29uZmlnOjcxMTpjb25maWcgTkZfRkxPV19UQUJMRVxubmV0L25ldGZpbHRlci9LY29uZmlnLTcxMi1cdHRyaXN0YXRlIFwmIzM0O05ldGZpbHRlciBmbG93IHRhYmxlIG1vZHVsZVwmIzM0O1xuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MjAtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NzIxOmNvbmZpZyBORl9GTE9XX1RBQkxFX1BST0NGU1xubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cdGJvb2wgXCYjMzQ7U3VwcGx5IGZsb3cgdGFibGUgc3RhdGlzdGljcyBpbiBwcm9jZnNcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMjo1NzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDE2NQoJCQkJCQkJb3V0cHV0OiAxNgoJCQkJCQkJdGhvdWdodHM6IDMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBCcmlkZ2UgQ29uZmlndXJhdGlvbiBPcHRpb25zKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIHJpZ2h0IGluLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyB0byBxdWlja2x5IHZlcmlmeSB0aGUgY29yZSBicmlkZ2UgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgcHJlc2VuY2UgYW5kIHN0YXR1cyBvZiBib3RoIGBDT05GSUdfQlJJREdFYCBhbmQgYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gSSYjMzk7bSBnb2luZyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBgbmV0L2JyaWRnZS9LY29uZmlnYCBmaWxlLiBJdCYjMzk7cyB0aGUgbG9naWNhbCBwbGFjZSB0byBmaW5kIHRoZXNlIHNldHRpbmdzIGFuZCB0aGVpciBkZXBlbmRlbmNpZXMuIEkmIzM5O20gZXNzZW50aWFsbHkgbG9va2luZyBmb3IgdGhlIGZvdW5kYXRpb25hbCBkZWZpbml0aW9ucyBhbmQgYW55IGFzc29jaWF0ZWQgY29uZGl0aW9uYWwgbG9naWMgd2l0aGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbiBzeXN0ZW0uIEEgcXVpY2sgY2hlY2sgaGVyZSB3aWxsIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGJyaWRnZSBmdW5jdGlvbmFsaXR5IGlzIGVuYWJsZWQgYW5kIGlmIFZMQU4gZmlsdGVyaW5nIGlzIHN1cHBvcnRlZCBhdCB0aGUgY29uZmlndXJhdGlvbiBsZXZlbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMzowMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlJJREdFJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9LY29uZmlnPTIyMD1jb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXG4tLVxubmV0L0tjb25maWctMjMwLVxubmV0L0tjb25maWc6MjMxOmNvbmZpZyBCUklER0VfTkVURklMVEVSXG5uZXQvS2NvbmZpZy0yMzItXHR0cmlzdGF0ZSBcJiMzNDtCcmlkZ2VkIElQL0FSUCBwYWNrZXRzIGZpbHRlcmluZ1wmIzM0O1xuLS1cbm5ldC9icmlkZ2UvS2NvbmZpZy01LVxubmV0L2JyaWRnZS9LY29uZmlnOjY6Y29uZmlnIEJSSURHRVxubmV0L2JyaWRnZS9LY29uZmlnLTctXHR0cmlzdGF0ZSBcJiMzNDs4MDIuMWQgRXRoZXJuZXQgQnJpZGdpbmdcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctMzUtXG5uZXQvYnJpZGdlL0tjb25maWc6MzY6Y29uZmlnIEJSSURHRV9JR01QX1NOT09QSU5HXG5uZXQvYnJpZGdlL0tjb25maWctMzctXHRib29sIFwmIzM0O0lHTVAvTUxEIHNub29waW5nXCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTQ5LVxubmV0L2JyaWRnZS9LY29uZmlnOjUwOmNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcbm5ldC9icmlkZ2UvS2NvbmZpZy01MS1cdGJvb2wgXCYjMzQ7VkxBTiBmaWx0ZXJpbmdcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL0tjb25maWctNjMtXG5uZXQvYnJpZGdlL0tjb25maWc6NjQ6Y29uZmlnIEJSSURHRV9NUlBcbm5ldC9icmlkZ2UvS2NvbmZpZy02NS1cdGJvb2wgXCYjMzQ7TVJQIHByb3RvY29sXCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9LY29uZmlnLTc1LVxubmV0L2JyaWRnZS9LY29uZmlnOjc2OmNvbmZpZyBCUklER0VfQ0ZNXG5uZXQvYnJpZGdlL0tjb25maWctNzctXHRib29sIFwmIzM0O0NGTSBwcm90b2NvbFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc9Mjg9Y29uZmlnIE5GX0NPTk5UUkFDS19CUklER0Vcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTQyLSMgb2xkIHNvY2tvcHQgaW50ZXJmYWNlIGFuZCBldmFsIGxvb3Bcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6NDM6Y29uZmlnIEJSSURHRV9ORl9FQlRBQkxFU19MRUdBQ1lcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDQtXHR0cmlzdGF0ZSBcJiMzNDtMZWdhY3kgRUJUQUJMRVMgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNTItXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjUzOm1lbnVjb25maWcgQlJJREdFX05GX0VCVEFCTEVTXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTU0LVx0dHJpc3RhdGUgXCYjMzQ7RXRoZXJuZXQgQnJpZGdlIHRhYmxlcyAoZWJ0YWJsZXMpIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTYyPWlmIEJSSURHRV9ORl9FQlRBQkxFU1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNjYtI1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo2Nzpjb25maWcgQlJJREdFX0VCVF9CUk9VVEVcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNjgtXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IGJyb3V0ZSB0YWJsZSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy03Ny1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6Nzg6Y29uZmlnIEJSSURHRV9FQlRfVF9GSUxURVJcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNzktXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IGZpbHRlciB0YWJsZSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy04Ny1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6ODg6Y29uZmlnIEJSSURHRV9FQlRfVF9OQVRcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctODktXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IG5hdCB0YWJsZSBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy05OS0jXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjEwMDpjb25maWcgQlJJREdFX0VCVF84MDJfM1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xMDEtXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IDgwMi4zIGZpbHRlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xMDYtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjEwNzpjb25maWcgQlJJREdFX0VCVF9BTU9OR1xubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xMDgtXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IGFtb25nIGZpbHRlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xMTUtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjExNjpjb25maWcgQlJJREdFX0VCVF9BUlBcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTE3LVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBBUlAgZmlsdGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEyMy1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTI0OmNvbmZpZyBCUklER0VfRUJUX0lQXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEyNS1cdHRyaXN0YXRlIFwmIzM0O2VidDogSVAgZmlsdGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEzMS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTMyOmNvbmZpZyBCUklER0VfRUJUX0lQNlxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xMzMtXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IElQNiBmaWx0ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTQwLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxNDE6Y29uZmlnIEJSSURHRV9FQlRfTElNSVRcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTQyLVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBsaW1pdCBtYXRjaCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xNTAtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE1MTpjb25maWcgQlJJREdFX0VCVF9NQVJLXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE1Mi1cdHRyaXN0YXRlIFwmIzM0O2VidDogbWFyayBmaWx0ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTYwLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxNjE6Y29uZmlnIEJSSURHRV9FQlRfUEtUVFlQRVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xNjItXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IHBhY2tldCB0eXBlIGZpbHRlciBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xNzAtXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE3MTpjb25maWcgQlJJREdFX0VCVF9TVFBcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTcyLVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBTVFAgZmlsdGVyIHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE3OC1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTc5OmNvbmZpZyBCUklER0VfRUJUX1ZMQU5cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTgwLVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiA4MDIuMVEgVkxBTiBmaWx0ZXIgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTg4LSNcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTg5OmNvbmZpZyBCUklER0VfRUJUX0FSUFJFUExZXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE5MC1cdHRyaXN0YXRlIFwmIzM0O2VidDogYXJwIHJlcGx5IHRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xOTctXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE5ODpjb25maWcgQlJJREdFX0VCVF9ETkFUXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE5OS1cdHRyaXN0YXRlIFwmIzM0O2VidDogZG5hdCB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjA1LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoyMDY6Y29uZmlnIEJSSURHRV9FQlRfTUFSS19UXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTIwNy1cdHRyaXN0YXRlIFwmIzM0O2VidDogbWFyayB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjE1LVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoyMTY6Y29uZmlnIEJSSURHRV9FQlRfUkVESVJFQ1Rcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjE3LVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiByZWRpcmVjdCB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjIzLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoyMjQ6Y29uZmlnIEJSSURHRV9FQlRfU05BVFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMjUtXHR0cmlzdGF0ZSBcJiMzNDtlYnQ6IHNuYXQgdGFyZ2V0IHN1cHBvcnRcJiMzNDtcbi0tXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTIzMy0jXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjIzNDpjb25maWcgQlJJREdFX0VCVF9MT0dcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjM1LVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBsb2cgc3VwcG9ydFwmIzM0O1xuLS1cbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjQyLVxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoyNDM6Y29uZmlnIEJSSURHRV9FQlRfTkZMT0dcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjQ0LVx0dHJpc3RhdGUgXCYjMzQ7ZWJ0OiBuZmxvZyBzdXBwb3J0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTM6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjNtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIyMzkKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBuZXcgZnVuY3Rpb25zLCBjb25zaWRlcmluZyB0aGUgY29udGV4dCBvZiBicmlkZ2luZyBhbmQgVkxBTnM6CgoqKk5ldyBCcmlkZ2UgRkRCIGFuZCBWTEFOIFJDVSBIZWxwZXJzKioKCkFscmlnaHQsIHNvIEkgc2VlIHRoZXNlIG5ldyBmdW5jdGlvbnMgcG9wcGluZyB1cDogYGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3VgLCBgYnJfdmxhbl9nZXRfb2ZmbG9hZF9pbmZvX3JjdWAsIGFuZCBgYnJfdmxhbl9pc19lbmFibGVkX3JjdWAuIFRoZXkmIzM5O3JlIGFsbCBsYWJlbGVkIHdpdGggJiMzNDtyY3UsJiMzNDsgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhleSYjMzk7cmUgZGVzaWduZWQgZm9yIHNhZmUsIGxvY2tsZXNzIGFjY2VzcyB0byBicmlkZ2UgZm9yd2FyZGluZyBkYXRhYmFzZSAoRkRCKSBhbmQgVkxBTiBpbmZvcm1hdGlvbiBzdHJ1Y3R1cmVzLiBUaGUgZmFjdCB0aGF0IHRoZXkmIzM5O3JlIGluIGBuZXQvYnJpZGdlL2JyX2ZkYi5jYCBhbmQgYG5ldC9icmlkZ2UvYnJfdmxhbi5jYCByZXNwZWN0aXZlbHkgaXMgcHJldHR5IG11Y2ggZXhwZWN0ZWQsIG9idmlvdXNseS4KCmBicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1YCBhbmQgYGJyX3ZsYW5faXNfZW5hYmxlZF9yY3VgIGFyZSBpbiBgYnJfdmxhbi5jYCwgYW5kIHNvIGFyZSByZWxhdGVkIHRvIFZMQU4gZmlsdGVyaW5nLCB3aGljaCBpcyBjb21waWxlZCBpbiBvbmx5IHdoZW4gYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIGlzIGVuYWJsZWQuIEkmIzM5O20gZ3Vlc3NpbmcgdGhhdCBtZWFucyB0aGV5JiMzOTtyZSBsaWtlbHkgaW52b2x2ZWQgaW4gcXVlcnlpbmcgVkxBTi1yZWxhdGVkIHBhcmFtZXRlcnMsIGFuZCBwZXJoYXBzIHRoZWlyIHByZXNlbmNlIHN1Z2dlc3RzIGVuaGFuY2VtZW50cyB0byBWTEFOLWF3YXJlIGJyaWRnaW5nLiBQZXJoYXBzIGJldHRlciBwZXJmb3JtYW5jZSBhY2Nlc3NpbmcgVkxBTiBlbnRyaWVzLgoKVGhlIFJDVS1iYXNlZCBhY2Nlc3Mgc3Ryb25nbHkgaW1wbGllcyB0aGVzZSBhcmUgbGlrZWx5IGJlaW5nIHVzZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dHMsIG9yIHBvc3NpYmx5IGluIHNjZW5hcmlvcyB3aGVyZSBjb250ZW50aW9uIGlzIGEgc2lnbmlmaWNhbnQgY29uY2Vybi4gVGhleSYjMzk7cmUgY2xlYXJseSBsb29raW5nIHRvIGF2b2lkIHRha2luZyBsb2NrcyB0byBwcm92aWRlIGhpZ2hlciBjb25jdXJyZW5jeS4gSXQmIzM5O3MgZ29vZCB0byBzZWUgdGhpcyBsZXZlbCBvZiBjYXJlZnVsIG9wdGltaXphdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCB1c2UgY2FzZXMgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTM6MDQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YnJfdmxhbi5vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9icmlkZ2UvTWFrZWZpbGU9MjE9YnJpZGdlLSQoQ09ORklHX0JSSURHRV9JR01QX1NOT09QSU5HKSAmIzQzOz0gYnJfbXVsdGljYXN0Lm8gYnJfbWRiLm8gYnJfbXVsdGljYXN0X2VodC5vXG5uZXQvYnJpZGdlL01ha2VmaWxlLTIyLVxubmV0L2JyaWRnZS9NYWtlZmlsZToyMzpicmlkZ2UtJChDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HKSAmIzQzOz0gYnJfdmxhbi5vIGJyX3ZsYW5fdHVubmVsLm8gYnJfdmxhbl9vcHRpb25zLm8gYnJfbXN0Lm9cbm5ldC9icmlkZ2UvTWFrZWZpbGUtMjQtXG4tLVxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg9MTg4Mj1zdGF0aWMgaW5saW5lIHUxNiBicl92bGFuX2ZsYWdzKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsIHUxNiBwdmlkKVxuLS1cbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4ODgtXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxODg5Oi8qIGJyX3ZsYW5fb3B0aW9ucy5jICovXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODkwLSNpZmRlZiBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxODkxOmJvb2wgYnJfdmxhbl9vcHRzX2VxX3JhbmdlKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZfY3Vycixcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4OTItXHRcdFx0ICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqcmFuZ2VfZW5kKTtcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oOjE4OTM6Ym9vbCBicl92bGFuX29wdHNfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTg5NC1cdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnApO1xubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTg5NTpzaXplX3QgYnJfdmxhbl9vcHRzX25sX3NpemUodm9pZCk7XG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODk2LWludCBicl92bGFuX3Byb2Nlc3Nfb3B0aW9ucyhjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZSAqYnIsXG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MTkwMz1zdGF0aWMgYm9vbCBicl92bGFuX2ZpbGxfdmlkcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgdmlkLCB1MTYgdmlkX3JhbmdlLFxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE5MzEtXHRpZiAodl9vcHRzKSB7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoxOTMyOlx0XHRpZiAoIWJyX3ZsYW5fb3B0c19maWxsKHNrYiwgdl9vcHRzLCBwKSlcbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE5MzMtXHRcdFx0Z290byBvdXRfZXJyO1xuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTE5NDg9c3RhdGljIHNpemVfdCBydG5sX3ZsYW5fbmxtc2dfc2l6ZSh2b2lkKVxuLS1cbm5ldC9icmlkZ2UvYnJfdmxhbi5jLTE5NTMtXHRcdCYjNDM7IG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgYnJpZGdlX3ZsYW5faW5mbykpIC8qIEJSSURHRV9WTEFOREJfRU5UUllfSU5GTyAqL1xubmV0L2JyaWRnZS9icl92bGFuLmM6MTk1NDpcdFx0JiM0MzsgYnJfdmxhbl9vcHRzX25sX3NpemUoKTsgLyogYnJpZGdlIHZsYW4gb3B0aW9ucyAqL1xubmV0L2JyaWRnZS9icl92bGFuLmMtMTk1NS19XG4tLVxubmV0L2JyaWRnZS9icl92bGFuLmM9MjAyOT1ib29sIGJyX3ZsYW5fY2FuX2VudGVyX3JhbmdlKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZfY3Vycixcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yMDMzLVx0ICAgICAgIHJhbmdlX2VuZC1cdTAwM2VmbGFncyA9PSB2X2N1cnItXHUwMDNlZmxhZ3MgXHUwMDI2XHUwMDI2XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYzoyMDM0Olx0ICAgICAgIGJyX3ZsYW5fb3B0c19lcV9yYW5nZSh2X2N1cnIsIHJhbmdlX2VuZCk7XG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yMDM1LX1cbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jPTMyPXN0YXRpYyBib29sIF9fdmxhbl90dW5fY2FuX2VudGVyX3JhbmdlKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZfY3Vycixcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTM5LS8qIGNoZWNrIGlmIHRoZSBvcHRpb25zJiMzOTsgc3RhdGUgb2Ygdl9jdXJyIGFsbG93IGl0IHRvIGVudGVyIHRoZSByYW5nZSAqL1xubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYzo0MDpib29sIGJyX3ZsYW5fb3B0c19lcV9yYW5nZShjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2X2N1cnIsXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTQxLVx0XHRcdCAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnJhbmdlX2VuZClcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTcxLVxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYzo3Mjpib29sIGJyX3ZsYW5fb3B0c19maWxsKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTczLVx0XHQgICAgICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcClcbi0tXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTk3LVxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYzo5ODpzaXplX3QgYnJfdmxhbl9vcHRzX25sX3NpemUodm9pZClcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtOTkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMzowNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzkwMwoJCQkJCQkJb3V0cHV0OiAxOQoJCQkJCQkJdGhvdWdodHM6IDYxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS2VybmVsIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzIGZvciBOZXR3b3JrIEZsb3cgVGFibGUgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBzdXBwb3J0IHRoaXMgZmxvdyB0YWJsZSBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYnJpZGdpbmcgYW5kIFZMQU4gZmlsdGVyaW5nLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBpcyBhIGtleSByZXF1aXJlbWVudCwgb2J2aW91c2x5LiBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19ORl9GTE9XX1RBQkxFYCBpcyBlc3NlbnRpYWwuIFNpbmNlIGBORl9GTE9XX1RBQkxFYCBpbXBsaWVzIGBORVRGSUxURVJgLCBJIGRvbiYjMzk7dCBuZWVkIHRvIGV4cGxpY2l0bHkgc3RhdGUgYENPTkZJR19ORVRGSUxURVJgLCBpdCYjMzk7cyBjb3ZlcmVkLiBOb3csIHRoZSBkZXBlbmRlbmN5IHRyZWUgc2VlbXMgdG8gYnJhbmNoOiBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AgbmVlZHMgYENPTkZJR19CUklER0VgLiBHb3QgaXQuIFRoYXQgc2VlbXMgbGlrZSBhIHNvbGlkIHN0YXJ0aW5nIHBvaW50LgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBzeW1ib2xzIHdpdGhpbiB0aGUga2VybmVsLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGlkZW50aWZpZWQgc2V2ZXJhbCBrZXkgZnVuY3Rpb24gbmFtZXM6IGBicl9mZGJfaGFzX2ZvcndhcmRpbmdfZW50cnlfcmN1YCwgYGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3VgLCBgYnJfdmxhbl9pc19lbmFibGVkX3JjdWAsIGBfX2Rldl9maWxsX2ZvcndhcmRfcGF0aGAsIGBuZnRfZmxvd19yb3V0ZWAsIGBuZnRfZGV2X2ZvcndhcmRfcGF0aGAsIGBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZ2AsIGBuZnRfZmxvd19yb3V0ZV9yb3V0aW5nYCwgYG5mdF9mbG93X29mZmxvYWRfaXNfYnJpZGdpbmdgLCBgbmZ0X2JyX3ZsYW5fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCwgYW5kIGBuZnRfZmlsbF92bGFuX3Bhc3N0aHJvdWdoX2luZm9gLiBUaGVzZSB3aWxsIGdpdmUgbWUgYSBnb29kIHBpY3R1cmUgb2YgdGhlIGNvZGUgcGF0aC4KCkFscmlnaHQsIEkgbmVlZCB0byBzZWUgd2hpY2ggb2YgdGhlc2UgYXJlIGV4cG9ydGVkLiBUaGlzIHRlbGxzIG1lIHdoYXQmIzM5O3MgYXZhaWxhYmxlIHRvIG1vZHVsZXMgYW5kIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIE9rYXksIHNvIGBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZ2AgaXMgc3RhdGljLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gYG5mdF9mbG93X3JvdXRlYCBhbmQgYF9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYCBhcmUgZXhwb3J0ZWQuIEFuZCB0aGUgYGJyX2AgcHJlZml4ZWQgZnVuY3Rpb25zIGFyZSBhbHNvIGV4cG9ydGVkLiBUaGlzIGlzIGdvb2QgdG8ga25vdy4KCkxldCYjMzk7cyBkbyBhIHF1aWNrLCBjbGVhbiBsaXN0IG9mIHRoZSByZWxldmFudCBzeW1ib2xzLCBqdXN0IHRvIGtlZXAgdGhpbmdzIG9yZ2FuaXplZDoKKiAgIGBicl9mZGJfaGFzX2ZvcndhcmRpbmdfZW50cnlfcmN1YAoqICAgYGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3VgCiogICBgYnJfdmxhbl9pc19lbmFibGVkX3JjdWAKKiAgIGBfX2Rldl9maWxsX2ZvcndhcmRfcGF0aGAKKiAgIGBuZnRfZmxvd19yb3V0ZWAKKiAgIGBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZ2AKKiAgIGBuZnRfZmxvd19vZmZsb2FkX2lzX2JyaWRnaW5nYAoqICAgYG5mdF9icl92bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aGAKKiAgIGBuZnRfZmlsbF92bGFuX3Bhc3N0aHJvdWdoX2luZm9gCgpKdXN0IGEgcXVpY2sgZG91YmxlLWNoZWNrIG9uIGBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZ2AgdG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgZXhhY3QgbmFtZS4gWWVwLCB0aGUgZGVmaW5pdGlvbiBpbiB0aGUgZGlmZiBtYXRjaGVzIHdoYXQgSSBoYXZlIGluIG15IG5vdGVzLiBJIGFsd2F5cyBkb3VibGUtY2hlY2suCgpgYGBjCnN0YXRpYyBpbnQgbmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmcoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsCgkJCQkgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsCgkJCQkgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsCgkJCQkgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLAoJCQkJICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KQpgYGAKCk5vdywgbGV0IG1lIG1ha2Ugc3VyZSBJIGRpZG4mIzM5O3QgbWlzcyBhbnl0aGluZy4gU28gSSBuZWVkIGBORl9GTE9XX1RBQkxFYCwgYEJSSURHRWAsIGFuZCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gSSBzaG91bGQgYWxzbyBkb3VibGUgY2hlY2sgaWYgYG5mdF9mbG93X3JvdXRlYCBoYXMgYW55IG90aGVyIGhpZGRlbiBkZXBlbmRlbmNpZXMuIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGEgbGl0dGxlIGRlZXBlciBvbiB0aGF0IHBvaW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMzowNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfZmxvd19yb3V0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTI0Nj1zdHJ1Y3QgbmZ0X3BrdGluZm87XG5pbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oOjI0NzppbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbmluY2x1ZGUvbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlLmgtMjQ4LVx0XHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0zMTg9c3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbi0tXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTM5My1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6Mzk0OnN0YXRpYyBpbnQgbmZ0X2Zsb3dfcm91dGVfcm91dGluZyhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzk1LVx0XHRcdFx0ICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy00NTMtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjQ1NDpzdGF0aWMgaW50IG5mdF9mbG93X3JvdXRlX2JyaWRnaW5nKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy00NTUtXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy01MjEtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjUyMjppbnQgbmZ0X2Zsb3dfcm91dGUoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNTIzLVx0XHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4tLVxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy01MjYtXHRpZiAobmZ0X2Zsb3dfb2ZmbG9hZF9pc19icmlkZ2luZyhwa3QtXHUwMDNlc2tiKSlcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6NTI3Olx0XHRyZXR1cm4gbmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmcocGt0LCBjdCwgcm91dGUsIGRpciwgZnQpO1xubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy01MjgtXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjUyOTpcdHJldHVybiBuZnRfZmxvd19yb3V0ZV9yb3V0aW5nKHBrdCwgY3QsIHJvdXRlLCBkaXIsIGZ0KTtcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNTMwLX1cbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6NTMxOkVYUE9SVF9TWU1CT0xfR1BMKG5mdF9mbG93X3JvdXRlKTtcbi0tXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz01MD1zdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTEwOC1cdGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjEwOTpcdGlmIChuZnRfZmxvd19yb3V0ZShwa3QsIGN0LCBcdTAwMjZyb3V0ZSwgZGlyLCBwcml2LVx1MDAzZWZsb3d0YWJsZSkgXHUwMDNjIDApXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xMTAtXHRcdGdvdG8gZXJyX2Zsb3dfcm91dGU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEzOjA1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT41bTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDkzCgkJCQkJCQlvdXRwdXQ6IDIyCgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IGltbWVkaWF0ZSB0aG91Z2h0IHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBPZmZsb2FkIENvZGUqKgoKT2theSwgc28gYG5mdF9mbG93X29mZmxvYWQuY2AgaXMgY2FsbGluZyBgbmZ0X2Zsb3dfcm91dGVgLiBUaGF0IGltbWVkaWF0ZWx5IHJhaXNlcyBhIGZsYWcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBhbmQsIHNwZWNpZmljYWxseSwgaG93IHRoZSBvZmZsb2FkIGZ1bmN0aW9uYWxpdHkgaXMgYmVpbmcgdHJpZ2dlcmVkLiBNeSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byBzY3J1dGluaXplIHRoZSBjb25maWd1cmF0aW9uIHJlbGF0ZWQgdG8gYG5mdF9mbG93X29mZmxvYWQub2AuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgd2lsbCBsaWtlbHkgYmUgZGVmaW5lZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYWJvdXQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggb2ZmbG9hZCBpcyBlbmFibGVkLCB3aGF0IGNyaXRlcmlhIGFyZSB1c2VkIGZvciByb3V0aW5nLCBhbmQgYW55IHJlbGV2YW50IHBvbGljeSBzZXR0aW5ncy4gSSBhbnRpY2lwYXRlIGZpbmRpbmcga2V5IHBhcmFtZXRlcnMgYW5kIHBvdGVudGlhbGx5IHNvbWUgb3B0aW1pemF0aW9ucyBvciBsaW1pdGF0aW9ucyBkaWN0YXRlZCBieSB0aGUgY29uZmlndXJhdGlvbi4gVGhpcyBjb3VsZCBpbnZvbHZlIGxvb2tpbmcgYXQgdmFyaW91cyBuZXRmaWx0ZXIgb3B0aW9ucyBhbmQgYW55IHJlbGF0ZWQga2NvbmZpZyBzeW1ib2xzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMzoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZnRfZmxvd19vZmZsb2FkLm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L25ldGZpbHRlci9NYWtlZmlsZT0xMTI9b2JqLSQoQ09ORklHX05GVF9DVClcdFx0JiM0Mzs9IG5mdF9jdC5vXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjExMzpvYmotJChDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRClcdCYjNDM7PSBuZnRfZmxvd19vZmZsb2FkLm9cbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGUtMTE0LW9iai0kKENPTkZJR19ORlRfTElNSVQpXHRcdCYjNDM7PSBuZnRfbGltaXQub1xuLS1cbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jPTIxNz1zdGF0aWMgc3RydWN0IG5mdF9leHByX3R5cGUgbmZ0X2Zsb3dfb2ZmbG9hZF90eXBlO1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjE4OnN0YXRpYyBjb25zdCBzdHJ1Y3QgbmZ0X2V4cHJfb3BzIG5mdF9mbG93X29mZmxvYWRfb3BzID0ge1xubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjE5LVx0LnR5cGVcdFx0PSBcdTAwMjZuZnRfZmxvd19vZmZsb2FkX3R5cGUsXG4tLVxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9MjMwPXN0YXRpYyBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfZmxvd19vZmZsb2FkX3R5cGUgX19yZWFkX21vc3RseSA9IHtcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jLTIzMS1cdC5uYW1lXHRcdD0gXCYjMzQ7Zmxvd19vZmZsb2FkXCYjMzQ7LFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM6MjMyOlx0Lm9wc1x0XHQ9IFx1MDAyNm5mdF9mbG93X29mZmxvYWRfb3BzLFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjMzLVx0LnBvbGljeVx0XHQ9IG5mdF9mbG93X29mZmxvYWRfcG9saWN5LFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMzoxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjY2NwoJCQkJCQkJb3V0cHV0OiAyMQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkV4YW1pbmluZyBgQ09ORklHX05GVF9GTE9XX09GRkxPQURgJiMzOTtzIERlcGVuZGVuY2llcyoqCgpBbHJpZ2h0LCBzbyB0aGUgY3VycmVudCBpc3N1ZSBpcyBwb2ludGluZyB0b3dhcmRzIGEgcG90ZW50aWFsIGRlcGVuZGVuY2Ugb24gYENPTkZJR19ORlRfRkxPV19PRkZMT0FEYC4gVGhpcyBpc24mIzM5O3QgZW50aXJlbHkgdW5leHBlY3RlZCBnaXZlbiB0aGUgY29udGV4dCwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIHZlcmlmeSB0aGUgcHJlY2lzZSByZWxhdGlvbnNoaXBzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgQ09ORklHX05GVF9GTE9XX09GRkxPQURgIGlzIGEgZGlyZWN0IGRlcGVuZGVuY3ksIGFuIGltcGxpY2l0IHJlcXVpcmVtZW50LCBvciBtZXJlbHkgYW4gb3B0aW1pemF0aW9uIHRoYXQmIzM5O3MgKnN0cm9uZ2x5KiByZWNvbW1lbmRlZCBpbiBjb25qdW5jdGlvbiB3aXRoIHRoZSBjdXJyZW50IHRhc2suIEkmIzM5O2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgY29uZGl0aW9uYWxzLCBkZWZhdWx0IHZhbHVlcywgYW5kIGFueSBleHBsaWNpdCBgc2VsZWN0YCBzdGF0ZW1lbnRzIHRoYXQgbWlnaHQgYmUgcHJlc2VudC4gTXkgZ29hbCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBzZXR0aW5nIGlzICpzdHJpY3RseSogbmVjZXNzYXJ5LCBvciBpZiB0aGVyZSYjMzk7cyBzb21lIHdpZ2dsZSByb29tIHRoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlLiBVbHRpbWF0ZWx5LCB0aGUgZ29hbCBpcyB0byBmdWxseSBkZWZpbmUgdGhlIGNvbnN0cmFpbnRzIG9mIHRoZSBzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEzOjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORlRfRkxPV19PRkZMT0FEJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9uZXRmaWx0ZXIvS2NvbmZpZz00OTg9Y29uZmlnIE5GVF9FWFRIRFJfRENDUFxuLS1cbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy01MDMtXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA0OmNvbmZpZyBORlRfRkxPV19PRkZMT0FEXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNTA1LVx0ZGVwZW5kcyBvbiBORl9DT05OVFJBQ0sgXHUwMDI2XHUwMDI2IE5GX0ZMT1dfVEFCTEVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTM6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwMjUKCQkJCQkJCW91dHB1dDogMjQ2CgkJCQkJCQl0aG91Z2h0czogMjU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIE5GVCBGbG93IE9mZmxvYWRpbmcgYW5kIEJyaWRnaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgdW5kZXJzdGFuZGluZyBpcyB0aGF0IGBORlRfRkxPV19PRkZMT0FEYCBpcyB0aGUgY3JpdGljYWwgY29uZmlnIHRoYXQgYWN0aXZhdGVzIHRoZSBmbG93IG9mZmxvYWQgZnVuY3Rpb25hbGl0eSB3aXRoaW4gbmZ0YWJsZXMuIEVzc2VudGlhbGx5LCBpdCYjMzk7cyB0aGUgb24gc3dpdGNoIGZvciB0aGlzIGNhcGFiaWxpdHksIGFuZCwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpdCByZWxpZXMgb24gY2FsbGluZyBgbmZ0X2Zsb3dfcm91dGVgLgoKTGV0JiMzOTtzIGRvIGEgcXVpY2sgcmVjYXAgb2YgdGhlIGNvbmZpZ3Mgd2UmIzM5O3JlIGNvbmNlcm5lZCB3aXRoIGhlcmU6IGBORl9GTE9XX1RBQkxFYCwgYE5GVF9GTE9XX09GRkxPQURgLCB0aGUgYEJSSURHRWAgb3B0aW9ucywgYW5kIGBCUklER0VfVkxBTl9GSUxURVJJTkdgLiBJIGtub3cgdGhlcmUgYXJlIGxpa2VseSBpbXBsaWNhdGlvbnMgYW5kIGRlcGVuZGVuY2llcywgc28gbGV0JiMzOTtzIHNlZSBpZiB3ZSBtaXNzZWQgYW55dGhpbmcuCgpSaWdodCwgSSYjMzk7bSBub3RpbmcgdGhhdCBgQ09ORklHX05GX0NPTk5UUkFDS2AgYW5kIGBDT05GSUdfTkVURklMVEVSYCBhcmUgYXV0b21hdGljYWxseSBpbXBsaWVkIGJ5IHRoZSBgTkZUX0ZMT1dfT0ZGTE9BRGAgc2V0dGluZy4gR29vZCwgdGhhdCBoZWxwcyBjbGFyaWZ5IHRoZSBvdmVyYWxsIHBpY3R1cmUuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyBhbmQgc3ltYm9scyB0aGF0IGFyZSByZWxldmFudCB0byB0aGlzIHByb2Nlc3MuIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlc2UgZm9yIGRlZXBlciBhbmFseXNpczoKKiAgIGBicl9mZGJfaGFzX2ZvcndhcmRpbmdfZW50cnlfcmN1YAoqICAgYGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3VgCiogICBgYnJfdmxhbl9pc19lbmFibGVkX3JjdWAKKiAgIGBfX2Rldl9maWxsX2ZvcndhcmRfcGF0aGAKKiAgIGBuZnRfZmxvd19yb3V0ZWAKKiAgIGBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZ2AKKiAgIGBuZnRfZmxvd19vZmZsb2FkX2lzX2JyaWRnaW5nYAoqICAgYG5mdF9icl92bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aGAKKiAgIGBuZnRfZmlsbF92bGFuX3Bhc3N0aHJvdWdoX2luZm9gCgpJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEzOjEyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtORl9GTE9XX1RBQkxFJiMzNDssCiAgICAmIzM0O05GVF9GTE9XX09GRkxPQUQmIzM0OywKICAgICYjMzQ7QlJJREdFJiMzNDssCiAgICAmIzM0O0JSSURHRV9WTEFOX0ZJTFRFUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3UmIzM0OywKICAgICYjMzQ7YnJfdmxhbl9nZXRfb2ZmbG9hZF9pbmZvX3JjdSYjMzQ7LAogICAgJiMzNDticl92bGFuX2lzX2VuYWJsZWRfcmN1JiMzNDssCiAgICAmIzM0O19fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O25mdF9mbG93X3JvdXRlJiMzNDssCiAgICAmIzM0O25mdF9mbG93X3JvdXRlX2JyaWRnaW5nJiMzNDssCiAgICAmIzM0O25mdF9mbG93X29mZmxvYWRfaXNfYnJpZGdpbmcmIzM0OywKICAgICYjMzQ7bmZ0X2JyX3ZsYW5fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoJiMzNDssCiAgICAmIzM0O25mdF9maWxsX3ZsYW5fcGFzc3Rocm91Z2hfaW5mbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGZsb3cgb2ZmbG9hZCBvZiBicmlkZ2VkIHRyYWZmaWMuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBjaGVjayBicmlkZ2UgRkRCIGVudHJpZXMgYW5kIFZMQU4gaW5mb3JtYXRpb24gZm9yIGZsb3cgb2ZmbG9hZCwgYW5kIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBwYXRoIHRvIGhhbmRsZSBicmlkZ2VkIHRyYWZmaWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05GX0ZMT1dfVEFCTEUmIzM0OywKICAgICYjMzQ7TkZUX0ZMT1dfT0ZGTE9BRCYjMzQ7LAogICAgJiMzNDtCUklER0UmIzM0OywKICAgICYjMzQ7QlJJREdFX1ZMQU5fRklMVEVSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdSYjMzQ7LAogICAgJiMzNDticl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1JiMzNDssCiAgICAmIzM0O2JyX3ZsYW5faXNfZW5hYmxlZF9yY3UmIzM0OywKICAgICYjMzQ7X19kZXZfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfcm91dGUmIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmcmIzM0OywKICAgICYjMzQ7bmZ0X2Zsb3dfb2ZmbG9hZF9pc19icmlkZ2luZyYjMzQ7LAogICAgJiMzNDtuZnRfYnJfdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgmIzM0OywKICAgICYjMzQ7bmZ0X2ZpbGxfdmxhbl9wYXNzdGhyb3VnaF9pbmZvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZmxvdyBvZmZsb2FkIG9mIGJyaWRnZWQgdHJhZmZpYy4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIGNoZWNrIGJyaWRnZSBGREIgZW50cmllcyBhbmQgVkxBTiBpbmZvcm1hdGlvbiBmb3IgZmxvdyBvZmZsb2FkLCBhbmQgbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIHBhdGggdG8gaGFuZGxlIGJyaWRnZWQgdHJhZmZpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEyOjU2OjI4LjMxNDg3MTc0MloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk0NjY2MDA5MzE5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCIsXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3VcIixcbiAgICBcImJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3VcIixcbiAgICBcImJyX3ZsYW5faXNfZW5hYmxlZF9yY3VcIixcbiAgICBcIl9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoXCIsXG4gICAgXCJuZnRfZmxvd19yb3V0ZVwiLFxuICAgIFwibmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmdcIixcbiAgICBcIm5mdF9mbG93X29mZmxvYWRfaXNfYnJpZGdpbmdcIixcbiAgICBcIm5mdF9icl92bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwibmZ0X2ZpbGxfdmxhbl9wYXNzdGhyb3VnaF9pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBmbG93IG9mZmxvYWQgb2YgYnJpZGdlZCB0cmFmZmljLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gY2hlY2sgYnJpZGdlIEZEQiBlbnRyaWVzIGFuZCBWTEFOIGluZm9ybWF0aW9uIGZvciBmbG93IG9mZmxvYWQsIGFuZCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgcGF0aCB0byBoYW5kbGUgYnJpZGdlZCB0cmFmZmljLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIHN1YnN5c3RlbXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMjo1NjoyOC4zMTQ4NzczMDJaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyNDk4MjM3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDA1Mjk1ZDYyZWVjZjI4OTg2ZTE4YWFkNzc5Y2Y1ZGNmM2QwNTk2YWVcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTI6NTY6MjcgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaCBiL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmhcXG5pbmRleCA3NTY3M2I4YmZmY2I4YS4uYzFjYWU1NDc0OWM1MTYgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmhcXG5AQCAtMTQ4LDYgKzE0OCw5IEBAIGludCBicl92bGFuX2dldF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB2aWQsXFxuIFxcdFxcdCAgICAgc3RydWN0IGJyaWRnZV92bGFuX2luZm8gKnBfdmluZm8pO1xcbiBpbnQgYnJfdmxhbl9nZXRfaW5mb19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCxcXG4gXFx0XFx0XFx0IHN0cnVjdCBicmlkZ2Vfdmxhbl9pbmZvICpwX3ZpbmZvKTtcXG4rdTE2IGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0IGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiAqcHJvdG8pO1xcbitib29sIGJyX3ZsYW5faXNfZW5hYmxlZF9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIGJvb2wgYnJfbXN0X2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldik7XFxuIGludCBicl9tc3RfZ2V0X2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IG1zdGksIHVuc2lnbmVkIGxvbmcgKnZpZHMpO1xcbiBpbnQgYnJfbXN0X2dldF9zdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgbXN0aSwgdTggKnN0YXRlKTtcXG5AQCAtMTg0LDYgKzE4NywxNyBAQCBzdGF0aWMgaW5saW5lIGludCBicl92bGFuX2dldF9pbmZvX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1MTYgdmlkLFxcbiBcXHRyZXR1cm4gLUVJTlZBTDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB1MTYgYnJfdmxhbl9nZXRfb2ZmbG9hZF9pbmZvX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRfX2JlMTYgKnByb3RvKVxcbit7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgYnJfdmxhbl9pc19lbmFibGVkX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbiBzdGF0aWMgaW5saW5lIGJvb2wgYnJfbXN0X2VuYWJsZWQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHRyZXR1cm4gZmFsc2U7XFxuQEAgLTIwOSw2ICsyMjMsOCBAQCB2b2lkIGJyX2ZkYl9jbGVhcl9vZmZsb2FkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB2aWQpO1xcbiBib29sIGJyX3BvcnRfZmxhZ19pc19zZXQoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdW5zaWduZWQgbG9uZyBmbGFnKTtcXG4gdTggYnJfcG9ydF9nZXRfc3RwX3N0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xcbiBjbG9ja190IGJyX2dldF9hZ2VpbmdfdGltZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2KTtcXG4rYm9vbCBicl9mZGJfaGFzX2ZvcndhcmRpbmdfZW50cnlfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTggKmFkZHIpO1xcbiAjZWxzZVxcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBuZXRfZGV2aWNlICpcXG4gYnJfZmRiX2ZpbmRfcG9ydChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2LFxcbkBAIC0yMzcsNiArMjUzLDEzIEBAIHN0YXRpYyBpbmxpbmUgY2xvY2tfdCBicl9nZXRfYWdlaW5nX3RpbWUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmJyX2RldilcXG4ge1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbitcXG4rc3RhdGljIGlubGluZSBib29sIGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgY29uc3QgdTggKmFkZHIpXFxuK3tcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuICNlbmRpZlxcbiBcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmggYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuaW5kZXggOTk4MWQ2MzdmOGI1NDYuLmMxZDBiODk3ZGU5NTM0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oXFxuQEAgLTM0MjIsNiArMzQyMiw4IEBAIGludCBkZXZfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcXG4gaW50IGRldl9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTtcXG4gaW50IGRldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBjb25zdCB1OCAqZGFkZHIsXFxuIFxcdFxcdFxcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xcbitpbnQgX19kZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwgY29uc3QgdTggKmRhZGRyLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XFxuIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfZ2V0X2J5X25hbWVfcmN1KHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XFxuIHN0cnVjdCBuZXRfZGV2aWNlICpfX2Rldl9nZXRfYnlfbmFtZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUpO1xcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2ZkYi5jIGIvbmV0L2JyaWRnZS9icl9mZGIuY1xcbmluZGV4IGU0NTcwYmJlZDg1NDQ1Li4zMTYxYzI2ODlmNmE2ZiAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX2ZkYi5jXFxuKysrIGIvbmV0L2JyaWRnZS9icl9mZGIuY1xcbkBAIC0yNjcsNiArMjY3LDM4IEBAIHN0cnVjdCBuZXRfYnJpZGdlX2ZkYl9lbnRyeSAqYnJfZmRiX2ZpbmRfcmN1KHN0cnVjdCBuZXRfYnJpZGdlICpicixcXG4gXFx0cmV0dXJuIGZkYl9maW5kX3JjdShcXHUwMDI2YnItXFx1MDAzZWZkYl9oYXNoX3RibCwgYWRkciwgdmlkKTtcXG4gfVxcbiBcXG4rLyoqXFxuKyAqIGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3UgLSBjaGVjayBpZiBhIE1BQyBjYW4gYmUgZm9yd2FyZGVkIGJ5IHRoZSBicmlkZ2VcXG4rICogQGRldjogYnJpZGdlIHBvcnQgbmV0d29yayBkZXZpY2VcXG4rICogQHNrYjogcGFja2V0IGJ1ZmZlciAodXNlZCB0byBkZXRlcm1pbmUgVkxBTiBpZClcXG4rICogQGFkZHI6IGRlc3RpbmF0aW9uIE1BQyBhZGRyZXNzXFxuKyAqXFxuKyAqIFJlc29sdmVzIHRoZSBWTEFOIGlkIGZvciBAc2tiIG9uIEBkZXYgKHNrYiBWTEFOIHRhZyB3aGVuIHByZXNlbnQsIFBWSURcXG4rICogd2hlbiBWTEFOIGZpbHRlcmluZyBpcyBlbmFibGVkLCAwIG90aGVyd2lzZSkgdGhlbiBjaGVja3Mgd2hldGhlciB0aGUgYnJpZGdlXFxuKyAqIEZEQiBjb250YWlucyBhIGZvcndhcmRpbmcgZW50cnkgKGRzdCAhPSBOVUxMLCBub3QgYSBsb2NhbC9zZWxmIGVudHJ5KSBmb3JcXG4rICogQGFkZHIgYW5kIHRoYXQgVkxBTiBpZC4gU2luZ2xlIGJyX3BvcnRfZ2V0X3JjdSgpIGxvb2t1cC5cXG4rICogTXVzdCBiZSBjYWxsZWQgdW5kZXIgUkNVIHJlYWQgbG9jay5cXG4rICovXFxuK2Jvb2wgYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHU4ICphZGRyKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQgPSBicl9wb3J0X2dldF9yY3UoZGV2KTtcXG4rXFx0c3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmZGI7XFxuK1xcdHUxNiB2aWQgPSAwO1xcbitcXG4rXFx0aWYgKCFwb3J0KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmIChicl9vcHRfZ2V0KHBvcnQtXFx1MDAzZWJyLCBCUk9QVF9WTEFOX0VOQUJMRUQpKSB7XFxuK1xcdFxcdGlmIChza2Jfdmxhbl90YWdfcHJlc2VudChza2IpKVxcbitcXHRcXHRcXHR2aWQgPSBza2Jfdmxhbl90YWdfZ2V0X2lkKHNrYik7XFxuK1xcdFxcdGVsc2VcXG4rXFx0XFx0XFx0YnJfdmxhbl9nZXRfcHZpZF9yY3UoZGV2LCBcXHUwMDI2dmlkKTtcXG4rXFx0fVxcbitcXHRmZGIgPSBicl9mZGJfZmluZF9yY3UocG9ydC1cXHUwMDNlYnIsIGFkZHIsIHZpZCk7XFxuK1xcdHJldHVybiBmZGIgXFx1MDAyNlxcdTAwMjYgZmRiLVxcdTAwM2Vkc3Q7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdSk7XFxuK1xcbiAvKiBXaGVuIGEgc3RhdGljIEZEQiBlbnRyeSBpcyBhZGRlZCwgdGhlIG1hYyBhZGRyZXNzIGZyb20gdGhlIGVudHJ5IGlzXFxuICAqIGFkZGVkIHRvIHRoZSBicmlkZ2UgcHJpdmF0ZSBIVyBhZGRyZXNzIGxpc3QgYW5kIGFsbCByZXF1aXJlZCBwb3J0c1xcbiAgKiBhcmUgdGhlbiB1cGRhdGVkIHdpdGggdGhlIG5ldyBpbmZvcm1hdGlvbi5cXG5kaWZmIC0tZ2l0IGEvbmV0L2JyaWRnZS9icl92bGFuLmMgYi9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xcbmluZGV4IDU1NjBhZmNhYWNhMzI3Li4wYjI5NjM2MmFkZjdjOSAxMDA2NDRcXG4tLS0gYS9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xcbisrKyBiL25ldC9icmlkZ2UvYnJfdmxhbi5jXFxuQEAgLTE1NTksNiArMTU1OSw1MSBAQCBpbnQgYnJfdmxhbl9nZXRfaW5mb19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCxcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChicl92bGFuX2dldF9pbmZvX3JjdSk7XFxuIFxcbisvKipcXG4rICogYnJfdmxhbl9nZXRfb2ZmbG9hZF9pbmZvX3JjdSAtIGdldCBWTEFOIGlkIGFuZCBwcm90b2NvbCBmb3IgYnJpZGdlIGZsb3cgb2ZmbG9hZFxcbisgKiBAZGV2OiBicmlkZ2UgcG9ydCBuZXR3b3JrIGRldmljZVxcbisgKiBAc2tiOiBwYWNrZXQgYnVmZmVyXFxuKyAqIEBwcm90bzogb3V0cHV0IGZvciB0aGUgYnJpZGdlIFZMQU4gcHJvdG9jb2wgKHNldCBvbmx5IHdoZW4gcmV0dXJuIHZhbHVlICE9IDApXFxuKyAqXFxuKyAqIFdoZW4gVkxBTiBmaWx0ZXJpbmcgaXMgZW5hYmxlZCwgcmVzb2x2ZXMgdGhlIFZMQU4gaWQgZm9yIGZsb3cgb2ZmbG9hZCAoc2tiXFxuKyAqIFZMQU4gdGFnIGlkIGlmIHByZXNlbnQsIFBWSUQgb3RoZXJ3aXNlKSBhbmQgd3JpdGVzIHRoZSBicmlkZ2UgVkxBTiBwcm90b2NvbFxcbisgKiB0byBAcHJvdG8uIFJldHVybnMgMCB3aGVuIGZpbHRlcmluZyBpcyBvZmYgb3IgQGRldiBpcyBub3QgYSBicmlkZ2UgcG9ydC5cXG4rICogU2luZ2xlIGJyX3BvcnRfZ2V0X3JjdSgpIGxvb2t1cC4gTXVzdCBiZSBjYWxsZWQgdW5kZXIgUkNVIHJlYWQgbG9jay5cXG4rICovXFxuK3UxNiBicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdFxcdCBjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBfX2JlMTYgKnByb3RvKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfYnJpZGdlX3BvcnQgKnBvcnQgPSBicl9wb3J0X2dldF9yY3UoZGV2KTtcXG4rXFx0dTE2IHZpZCA9IDA7XFxuK1xcbitcXHRpZiAoIXBvcnQgfHwgIWJyX29wdF9nZXQocG9ydC1cXHUwMDNlYnIsIEJST1BUX1ZMQU5fRU5BQkxFRCkpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSlcXG4rXFx0XFx0dmlkID0gc2tiX3ZsYW5fdGFnX2dldF9pZChza2IpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGJyX3ZsYW5fZ2V0X3B2aWRfcmN1KGRldiwgXFx1MDAyNnZpZCk7XFxuK1xcdGlmICh2aWQpXFxuK1xcdFxcdCpwcm90byA9IHBvcnQtXFx1MDAzZWJyLVxcdTAwM2V2bGFuX3Byb3RvO1xcbitcXHRyZXR1cm4gdmlkO1xcbit9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3UpO1xcbitcXG4rLyoqXFxuKyAqIGJyX3ZsYW5faXNfZW5hYmxlZF9yY3UgLSBjaGVjayBpZiBWTEFOIGZpbHRlcmluZyBpcyBhY3RpdmUgb24gYSBwb3J0J3MgYnJpZGdlXFxuKyAqIEBkZXY6IGJyaWRnZSBwb3J0IG5ldHdvcmsgZGV2aWNlXFxuKyAqXFxuKyAqIFJldHVybnMgdHJ1ZSBpZiBWTEFOIGZpbHRlcmluZyBpcyBlbmFibGVkIG9uIHRoZSBicmlkZ2UgQGRldiBiZWxvbmdzIHRvLlxcbisgKiBSZXR1cm5zIGZhbHNlIHdoZW4gQGRldiBpcyBub3QgYSBicmlkZ2UgcG9ydCBvciBmaWx0ZXJpbmcgaXMgb2ZmLlxcbisgKiBNdXN0IGJlIGNhbGxlZCB1bmRlciBSQ1UgcmVhZCBsb2NrLlxcbisgKi9cXG4rYm9vbCBicl92bGFuX2lzX2VuYWJsZWRfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuK3tcXG4rXFx0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IGJyX3BvcnRfZ2V0X3JjdShkZXYpO1xcbitcXG4rXFx0cmV0dXJuIHBvcnQgXFx1MDAyNlxcdTAwMjYgYnJfb3B0X2dldChwb3J0LVxcdTAwM2ViciwgQlJPUFRfVkxBTl9FTkFCTEVEKTtcXG4rfVxcbitFWFBPUlRfU1lNQk9MX0dQTChicl92bGFuX2lzX2VuYWJsZWRfcmN1KTtcXG4rXFxuIHN0YXRpYyBpbnQgYnJfdmxhbl9pc19iaW5kX3ZsYW5fZGV2KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIHtcXG4gXFx0cmV0dXJuIGlzX3ZsYW5fZGV2KGRldikgXFx1MDAyNlxcdTAwMjZcXG5kaWZmIC0tZ2l0IGEvbmV0L2NvcmUvZGV2LmMgYi9uZXQvY29yZS9kZXYuY1xcbmluZGV4IDRiM2Q1Y2ZkZjZlMDBmLi42MmYxZDBiNjRjNzZkZSAxMDA2NDRcXG4tLS0gYS9uZXQvY29yZS9kZXYuY1xcbisrKyBiL25ldC9jb3JlL2Rldi5jXFxuQEAgLTc1MCw0NCArNzUwLDUyIEBAIHN0YXRpYyBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpkZXZfZndkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuIFxcdHJldHVybiBcXHUwMDI2c3RhY2stXFx1MDAzZXBhdGhba107XFxuIH1cXG4gXFxuLWludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxcbi1cXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxcbitpbnQgX19kZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCwgY29uc3QgdTggKmRhZGRyLFxcbitcXHRcXHRcXHQgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmxhc3RfZGV2O1xcbi1cXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XFxuLVxcdFxcdC5kZXZcXHQ9IGRldixcXG4tXFx0fTtcXG4gXFx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqcGF0aDtcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcbi1cXHRtZW1jcHkoY3R4LmRhZGRyLCBkYWRkciwgc2l6ZW9mKGN0eC5kYWRkcikpO1xcbitcXHRtZW1jcHkoY3R4LVxcdTAwM2VkYWRkciwgZGFkZHIsIHNpemVvZihjdHgtXFx1MDAzZWRhZGRyKSk7XFxuIFxcdHN0YWNrLVxcdTAwM2VudW1fcGF0aHMgPSAwO1xcbi1cXHR3aGlsZSAoY3R4LmRldiBcXHUwMDI2XFx1MDAyNiBjdHguZGV2LVxcdTAwM2VuZXRkZXZfb3BzLVxcdTAwM2VuZG9fZmlsbF9mb3J3YXJkX3BhdGgpIHtcXG4tXFx0XFx0bGFzdF9kZXYgPSBjdHguZGV2O1xcbitcXHR3aGlsZSAoY3R4LVxcdTAwM2VkZXYgXFx1MDAyNlxcdTAwMjYgY3R4LVxcdTAwM2VkZXYtXFx1MDAzZW5ldGRldl9vcHMtXFx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aCkge1xcbitcXHRcXHRsYXN0X2RldiA9IGN0eC1cXHUwMDNlZGV2O1xcbiBcXHRcXHRwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTtcXG4gXFx0XFx0aWYgKCFwYXRoKVxcbiBcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbiBcXHRcXHRtZW1zZXQocGF0aCwgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGgpKTtcXG4tXFx0XFx0cmV0ID0gY3R4LmRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKFxcdTAwMjZjdHgsIHBhdGgpO1xcbitcXHRcXHRyZXQgPSBjdHgtXFx1MDAzZWRldi1cXHUwMDNlbmV0ZGV2X29wcy1cXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCk7XFxuIFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbi1cXHRcXHRpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC5kZXYpKVxcbitcXHRcXHRpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC1cXHUwMDNlZGV2KSlcXG4gXFx0XFx0XFx0cmV0dXJuIC0xO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIWN0eC5kZXYpXFxuK1xcdGlmICghY3R4LVxcdTAwM2VkZXYpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbiBcXHRwYXRoID0gZGV2X2Z3ZF9wYXRoKHN0YWNrKTtcXG4gXFx0aWYgKCFwYXRoKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcdHBhdGgtXFx1MDAzZXR5cGUgPSBERVZfUEFUSF9FVEhFUk5FVDtcXG4tXFx0cGF0aC1cXHUwMDNlZGV2ID0gY3R4LmRldjtcXG4rXFx0cGF0aC1cXHUwMDNlZGV2ID0gY3R4LVxcdTAwM2VkZXY7XFxuIFxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuK0VYUE9SVF9TWU1CT0xfR1BMKF9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcXG4rXFxuK2ludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxcbitcXHRcXHRcXHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxcbit7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHtcXG4rXFx0XFx0LmRldlxcdD0gZGV2LFxcbitcXHR9O1xcbitcXG4rXFx0cmV0dXJuIF9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKFxcdTAwMjZjdHgsIGRhZGRyLCBzdGFjayk7XFxuK31cXG4gRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcXG4gXFxuIC8qIG11c3QgYmUgY2FsbGVkIHVuZGVyIHJjdV9yZWFkX2xvY2soKSwgYXMgd2UgZG9udCB0YWtlIGEgcmVmZXJlbmNlICovXFxuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXFxuaW5kZXggOThjMDNiNDg3ZjUyMTEuLmQxNWM0MjVjODhjNGFhIDEwMDY0NFxcbi0tLSBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmNcXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXFxuQEAgLTE1LDYgKzE1LDExIEBAXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfYnJpZGdlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pZl9ldGhlci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvaWZfdmxhbi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3JvdXRlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvaXA2X3JvdXRlLmhcXHUwMDNlXFxuIFxcbiBzdGF0aWMgZW51bSBmbG93X29mZmxvYWRfeG1pdF90eXBlIG5mdF94bWl0X3R5cGUoc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxcbiB7XFxuQEAgLTQyLDcgKzQ3LDI1IEBAIHN0YXRpYyBib29sIG5mdF9pc192YWxpZF9ldGhlcl9kZXZpY2UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXFxuK3N0YXRpYyBib29sIG5mdF9mbG93X29mZmxvYWRfaXNfYnJpZGdpbmcoc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4re1xcbitcXHRib29sIHJldDtcXG4rXFxuK1xcdGlmICghbmV0aWZfaXNfYnJpZGdlX3BvcnQoc2tiLVxcdTAwM2VkZXYpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmICghc2tiX21hY19oZWFkZXJfd2FzX3NldChza2IpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHJldCA9IGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3Uoc2tiLVxcdTAwM2VkZXYsIHNrYixcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgZXRoX2hkcihza2IpLVxcdTAwM2VoX2Rlc3QpO1xcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LFxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcXG4gXFx0XFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbiBcXHRcXHRcXHRcXHQgICAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsIHU4ICpoYSxcXG5AQCAtNTgsNiArODEsMTIgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuK1xcdC8qIEJyaWRnaW5nIGZhc3RwYXRoIGNvcGllcyBFdGhlcm5ldCBhZGRyZXNzZXMgaW50byBoYTsgZG8gbm90IHJlcGxhY2VcXG4rXFx0ICogdGhlbSB2aWEgbmVpZ2hib3VyIGxvb2t1cCBvbiB0aGUgcm91dGVkIGRlc3RpbmF0aW9uIGRldmljZS5cXG4rXFx0ICovXFxuK1xcdGlmICghaXNfemVyb19ldGhlcl9hZGRyKGhhKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbiBcXHRuID0gZHN0X25laWdoX2xvb2t1cChkc3RfY2FjaGUsIGRhZGRyKTtcXG4gXFx0aWYgKCFuKVxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuQEAgLTcyLDcgKzEwMSwyMyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxcbiBcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbiBvdXQ6XFxuLVxcdHJldHVybiBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoZGV2LCBoYSwgc3RhY2spO1xcbitcXHRyZXR1cm4gX19kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY3R4LCBoYSwgc3RhY2spO1xcbit9XFxuK1xcbitzdGF0aWMgdm9pZCBuZnRfYnJfdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgpXFxuK3tcXG4rXFx0X19iZTE2IHByb3RvID0gMDtcXG4rXFx0dTE2IHZsYW5faWQ7XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHZsYW5faWQgPSBicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1KHBrdC1cXHUwMDNlc2tiLVxcdTAwM2VkZXYsIHBrdC1cXHUwMDNlc2tiLCBcXHUwMDI2cHJvdG8pO1xcbitcXHRpZiAodmxhbl9pZCkge1xcbitcXHRcXHRjdHgtXFx1MDAzZW51bV92bGFucyA9IDE7XFxuK1xcdFxcdGN0eC1cXHUwMDNldmxhblswXS5pZCA9IHZsYW5faWQ7XFxuK1xcdFxcdGN0eC1cXHUwMDNldmxhblswXS5wcm90byA9IHByb3RvO1xcbitcXHR9XFxuK1xcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbiBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7XFxuQEAgLTkyLDYgKzEzNywyOSBAQCBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7XFxuIFxcdGVudW0gZmxvd19vZmZsb2FkX3htaXRfdHlwZSB4bWl0X3R5cGU7XFxuIH07XFxuIFxcbitzdGF0aWMgdm9pZCBuZnRfZmlsbF92bGFuX3Bhc3N0aHJvdWdoX2luZm8oY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvICppbmZvKVxcbit7XFxuK1xcdGlmICghc2tiX3ZsYW5fdGFnX3ByZXNlbnQocGt0LVxcdTAwM2Vza2IpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdC8qIHdoZW4gYnJpZGdlIFZMQU4gZmlsdGVyaW5nIGlzIGVuYWJsZWQsIHRoZSBicmlkZ2UgaGFuZGxlcyB0aGUgdGFnICovXFxuK1xcdGlmIChuZXRpZl9pc19icmlkZ2VfcG9ydChwa3QtXFx1MDAzZXNrYi1cXHUwMDNlZGV2KSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIWJyX3ZsYW5faXNfZW5hYmxlZF9yY3UocGt0LVxcdTAwM2Vza2ItXFx1MDAzZWRldikpIHtcXG4rXFx0XFx0aWYgKGluZm8tXFx1MDAzZW51bV9lbmNhcHMgXFx1MDAzZT0gTkZfRkxPV19UQUJMRV9FTkNBUF9NQVgpIHtcXG4rXFx0XFx0XFx0aW5mby1cXHUwMDNlaW5kZXYgPSBOVUxMO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRpbmZvLVxcdTAwM2VlbmNhcFtpbmZvLVxcdTAwM2VudW1fZW5jYXBzXS5pZCA9XFxuK1xcdFxcdFxcdFxcdHNrYl92bGFuX3RhZ19nZXRfaWQocGt0LVxcdTAwM2Vza2IpO1xcbitcXHRcXHRcXHRpbmZvLVxcdTAwM2VlbmNhcFtpbmZvLVxcdTAwM2VudW1fZW5jYXBzXS5wcm90byA9XFxuK1xcdFxcdFxcdFxcdHBrdC1cXHUwMDNlc2tiLVxcdTAwM2V2bGFuX3Byb3RvO1xcbitcXHRcXHRcXHRpbmZvLVxcdTAwM2VudW1fZW5jYXBzKys7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyAqaW5mbyxcXG4gXFx0XFx0XFx0ICAgICB1bnNpZ25lZCBjaGFyICpoYSwgc3RydWN0IG5mX2Zsb3d0YWJsZSAqZmxvd3RhYmxlKVxcbkBAIC0xMDMsMTMgKzE3MSwxMyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLFxcbiBcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIHN0YWNrLVxcdTAwM2VudW1fcGF0aHM7IGkrKykge1xcbiBcXHRcXHRwYXRoID0gXFx1MDAyNnN0YWNrLVxcdTAwM2VwYXRoW2ldO1xcbitcXHRcXHRpbmZvLVxcdTAwM2VpbmRldiA9IHBhdGgtXFx1MDAzZWRldjtcXG4gXFx0XFx0c3dpdGNoIChwYXRoLVxcdTAwM2V0eXBlKSB7XFxuIFxcdFxcdGNhc2UgREVWX1BBVEhfRVRIRVJORVQ6XFxuIFxcdFxcdGNhc2UgREVWX1BBVEhfRFNBOlxcbiBcXHRcXHRjYXNlIERFVl9QQVRIX1ZMQU46XFxuIFxcdFxcdGNhc2UgREVWX1BBVEhfUFBQT0U6XFxuIFxcdFxcdGNhc2UgREVWX1BBVEhfVFVOOlxcbi1cXHRcXHRcXHRpbmZvLVxcdTAwM2VpbmRldiA9IHBhdGgtXFx1MDAzZWRldjtcXG4gXFx0XFx0XFx0aWYgKGlzX3plcm9fZXRoZXJfYWRkcihpbmZvLVxcdTAwM2VoX3NvdXJjZSkpXFxuIFxcdFxcdFxcdFxcdG1lbWNweShpbmZvLVxcdTAwM2VoX3NvdXJjZSwgcGF0aC1cXHUwMDNlZGV2LVxcdTAwM2VkZXZfYWRkciwgRVRIX0FMRU4pO1xcbiBcXG5AQCAtMTc1LDYgKzI0MywxMCBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLFxcbiBcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGluZm8tXFx1MDAzZXhtaXRfdHlwZSA9IEZMT1dfT0ZGTE9BRF9YTUlUX0RJUkVDVDtcXG4gXFx0XFx0XFx0YnJlYWs7XFxuK1xcdFxcdGNhc2UgREVWX1BBVEhfTVRLX1dETUE6XFxuK1xcdFxcdFxcdGlmIChpc196ZXJvX2V0aGVyX2FkZHIoaW5mby1cXHUwMDNlaF9zb3VyY2UpKVxcbitcXHRcXHRcXHRcXHRtZW1jcHkoaW5mby1cXHUwMDNlaF9zb3VyY2UsIHBhdGgtXFx1MDAzZWRldi1cXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcXG4rXFx0XFx0XFx0YnJlYWs7XFxuIFxcdFxcdGRlZmF1bHQ6XFxuIFxcdFxcdFxcdHJldHVybiAtMTtcXG4gXFx0XFx0fVxcbkBAIC0yNDQsNiArMzE2LDcgQEAgc3RhdGljIGludCBuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbiB9XFxuIFxcbiBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbitcXHRcXHRcXHRcXHRib29sIGlzX2JyaWRnaW5nLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXFxuIFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4gXFx0XFx0XFx0XFx0ZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcXG5AQCAtMjUxLDEyICszMjQsMzggQEAgc3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSByb3V0ZS1cXHUwMDNldHVwbGVbZGlyXS5kc3Q7XFxuIFxcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgc3RhY2s7XFxuK1xcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHtcXG4rXFx0XFx0LmRldlxcdD0gZHN0LVxcdTAwM2VkZXYsXFxuK1xcdH07XFxuIFxcdHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIGluZm8gPSB7fTtcXG4rXFx0ZW51bSBpcF9jb25udHJhY2tfaW5mbyBwa3RfY3RpbmZvO1xcbitcXHRlbnVtIGlwX2Nvbm50cmFja19kaXIgc2tiX2RpcjtcXG4rXFx0c3RydWN0IGV0aGhkciAqZXRoO1xcbiBcXHR1bnNpZ25lZCBjaGFyIGhhW0VUSF9BTEVOXTtcXG4gXFx0aW50IGk7XFxuIFxcbi1cXHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChyb3V0ZSwgZHN0LCBjdCwgZGlyLCBoYSwgXFx1MDAyNnN0YWNrKSBcXHUwMDNjIDAgfHxcXG4tXFx0ICAgIG5mdF9kZXZfcGF0aF9pbmZvKFxcdTAwMjZzdGFjaywgXFx1MDAyNmluZm8sIGhhLCBcXHUwMDI2ZnQtXFx1MDAzZWRhdGEpIFxcdTAwM2MgMClcXG4rXFx0bWVtc2V0KGhhLCAwLCBzaXplb2YoaGEpKTtcXG4rXFxuK1xcdGlmIChpc19icmlkZ2luZykge1xcbitcXHRcXHRuZl9jdF9nZXQocGt0LVxcdTAwM2Vza2IsIFxcdTAwMjZwa3RfY3RpbmZvKTtcXG4rXFx0XFx0ZXRoID0gZXRoX2hkcihwa3QtXFx1MDAzZXNrYik7XFxuK1xcdFxcdHNrYl9kaXIgPSBDVElORk8yRElSKHBrdF9jdGluZm8pO1xcbitcXHRcXHRpZiAoc2tiX2RpciAhPSBkaXIpIHtcXG4rXFx0XFx0XFx0bWVtY3B5KGhhLCBldGgtXFx1MDAzZWhfc291cmNlLCBFVEhfQUxFTik7XFxuK1xcdFxcdFxcdG1lbWNweShpbmZvLmhfc291cmNlLCBldGgtXFx1MDAzZWhfZGVzdCwgRVRIX0FMRU4pO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRtZW1jcHkoaGEsIGV0aC1cXHUwMDNlaF9kZXN0LCBFVEhfQUxFTik7XFxuK1xcdFxcdFxcdG1lbWNweShpbmZvLmhfc291cmNlLCBldGgtXFx1MDAzZWhfc291cmNlLCBFVEhfQUxFTik7XFxuK1xcdFxcdH1cXG4rXFx0XFx0bmZ0X2JyX3ZsYW5fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHBrdCwgXFx1MDAyNmN0eCk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKFxcdTAwMjZjdHgsIHJvdXRlLCBkc3QsIGN0LCBkaXIsIGhhLCBcXHUwMDI2c3RhY2spIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIC1FTk9FTlQ7XFxuK1xcbitcXHRuZnRfZmlsbF92bGFuX3Bhc3N0aHJvdWdoX2luZm8ocGt0LCBcXHUwMDI2aW5mbyk7XFxuK1xcbitcXHRpZiAobmZ0X2Rldl9wYXRoX2luZm8oXFx1MDAyNnN0YWNrLCBcXHUwMDI2aW5mbywgaGEsIFxcdTAwMjZmdC1cXHUwMDNlZGF0YSkgXFx1MDAzYyAwKVxcbiBcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gXFxuIFxcdGlmICghbmZ0X2Zsb3d0YWJsZV9maW5kX2RldihpbmZvLmluZGV2LCBmdCkpXFxuQEAgLTI5Miw5ICszOTEsMTEgQEAgc3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuLWludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi1cXHRcXHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXFxuLVxcdFxcdCAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdClcXG4rc3RhdGljIGludCBuZnRfZmxvd19yb3V0ZV9yb3V0aW5nKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxcbitcXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXFxuK1xcdFxcdFxcdFxcdCAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZSAqZnQpXFxuIHtcXG4gXFx0c3RydWN0IGRzdF9lbnRyeSAqdGhpc19kc3QgPSBza2JfZHN0KHBrdC1cXHUwMDNlc2tiKTtcXG4gXFx0c3RydWN0IGRzdF9lbnRyeSAqb3RoZXJfZHN0ID0gTlVMTDtcXG5AQCAtMzM0LDEyICs0MzUsMTIgQEAgaW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuIFxcdG5mdF9kZWZhdWx0X2ZvcndhcmRfcGF0aChyb3V0ZSwgdGhpc19kc3QsIGRpcik7XFxuIFxcdG5mdF9kZWZhdWx0X2ZvcndhcmRfcGF0aChyb3V0ZSwgb3RoZXJfZHN0LCAhZGlyKTtcXG4gXFxuLVxcdGlmIChyb3V0ZS1cXHUwMDNldHVwbGVbZGlyXS54bWl0X3R5cGVcXHQ9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCByb3V0ZSwgY3QsIGRpciwgZnQpIFxcdTAwM2MgMClcXG4rXFx0aWYgKHJvdXRlLVxcdTAwM2V0dXBsZVtkaXJdLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCBmYWxzZSwgcm91dGUsIGN0LCBkaXIsIGZ0KSBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gZXJyX2RzdF9yZWxlYXNlO1xcbiBcXG4gXFx0aWYgKHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS54bWl0X3R5cGUgPT0gRkxPV19PRkZMT0FEX1hNSVRfTkVJR0ggXFx1MDAyNlxcdTAwMjZcXG4tXFx0ICAgIG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgcm91dGUsIGN0LCAhZGlyLCBmdCkgXFx1MDAzYyAwKVxcbitcXHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCBmYWxzZSwgcm91dGUsIGN0LCAhZGlyLCBmdCkgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGVycl9kc3RfcmVsZWFzZTtcXG4gXFxuIFxcdHJldHVybiAwO1xcbkBAIC0zNDksNCArNDUwLDgyIEBAIGludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbiBcXHRkc3RfcmVsZWFzZShyb3V0ZS1cXHUwMDNldHVwbGVbIWRpcl0uZHN0KTtcXG4gXFx0cmV0dXJuIC1FTk9FTlQ7XFxuIH1cXG4rXFxuK3N0YXRpYyBpbnQgbmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmcoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxuK1xcdFxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4rXFx0XFx0XFx0XFx0ICAgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxcbitcXHRcXHRcXHRcXHQgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbitcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbmZ0X2Zsb3d0YWJsZSAqZnQpXFxuK3tcXG4rXFx0c3RydWN0IGRzdF9lbnRyeSAqZHN0c1tJUF9DVF9ESVJfTUFYXSA9IHt9O1xcbitcXHRzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2O1xcbitcXHRpbnQgaTtcXG4rXFxuK1xcdC8qIEFsbG9jYXRlIG1pbmltYWwgZHN0cyBhbmNob3JlZCB0byB0aGUgYnJpZGdlIG1hc3RlciBkZXZpY2UgdG8gc3VwcGx5XFxuK1xcdCAqIHhtaXRfdHlwZSBhbmQgTVRVLiBBIGZ1bGwgcm91dGluZyBsb29rdXAgdmlhIG5mX3JvdXRlKCkgaXMgYXZvaWRlZFxcbitcXHQgKiBiZWNhdXNlIGl0IGZhaWxzIGZvciBwcmVmaXhlcyB0aGF0IGFyZSBicmlkZ2VkIGJ1dCBub3Qgcm91dGVkLlxcbitcXHQgKi9cXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRicl9kZXYgPSBuZXRkZXZfbWFzdGVyX3VwcGVyX2Rldl9nZXRfcmN1KHBrdC1cXHUwMDNlc2tiLVxcdTAwM2VkZXYpO1xcbitcXHRpZiAoIWJyX2RldiB8fCAhbmV0aWZfaXNfYnJpZGdlX21hc3Rlcihicl9kZXYpKSB7XFxuK1xcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFx0fVxcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIElQX0NUX0RJUl9NQVg7IGkrKykge1xcbitcXHRcXHRzd2l0Y2ggKG5mdF9wZihwa3QpKSB7XFxuK1xcdFxcdGNhc2UgTkZQUk9UT19JUFY0OiB7XFxuK1xcdFxcdFxcdHN0cnVjdCBydGFibGUgKnJ0O1xcbitcXG4rXFx0XFx0XFx0cnQgPSBydF9kc3RfYWxsb2MoYnJfZGV2LCAwLCBSVE5fVU5JQ0FTVCwgdHJ1ZSk7XFxuK1xcdFxcdFxcdGlmIChydClcXG4rXFx0XFx0XFx0XFx0ZHN0c1tpXSA9IFxcdTAwMjZydC1cXHUwMDNlZHN0O1xcbitcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0fVxcbitcXHRcXHRjYXNlIE5GUFJPVE9fSVBWNjoge1xcbitcXHRcXHRcXHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0O1xcbitcXG4rXFx0XFx0XFx0cnQgPSBpcDZfZHN0X2FsbG9jKG5mdF9uZXQocGt0KSwgYnJfZGV2LCAwKTtcXG4rXFx0XFx0XFx0aWYgKHJ0KVxcbitcXHRcXHRcXHRcXHRkc3RzW2ldID0gXFx1MDAyNnJ0LVxcdTAwM2Vkc3Q7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFxuK1xcdGlmICghZHN0c1tkaXJdIHx8ICFkc3RzWyFkaXJdKSB7XFxuK1xcdFxcdGRzdF9yZWxlYXNlKGRzdHNbZGlyXSk7XFxuK1xcdFxcdGRzdF9yZWxlYXNlKGRzdHNbIWRpcl0pO1xcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFx0fVxcbitcXG4rXFx0bmZ0X2RlZmF1bHRfZm9yd2FyZF9wYXRoKHJvdXRlLCBkc3RzW2Rpcl0sIGRpcik7XFxuK1xcdG5mdF9kZWZhdWx0X2ZvcndhcmRfcGF0aChyb3V0ZSwgZHN0c1shZGlyXSwgIWRpcik7XFxuK1xcdC8qIERyb3AgYWxsb2NhdGlvbiByZWZlcmVuY2VzOyByb3V0ZS1cXHUwMDNldHVwbGVbKl0uZHN0IGhvbGRzIHRoZSBjbG9uZXMuICovXFxuK1xcdGRzdF9yZWxlYXNlKGRzdHNbZGlyXSk7XFxuK1xcdGRzdF9yZWxlYXNlKGRzdHNbIWRpcl0pO1xcbitcXG4rXFx0aWYgKHJvdXRlLVxcdTAwM2V0dXBsZVtkaXJdLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgcm91dGUtXFx1MDAzZXR1cGxlWyFkaXJdLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCkge1xcbitcXHRcXHRpZiAobmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCB0cnVlLCByb3V0ZSwgY3QsIGRpciwgZnQpIHx8XFxuK1xcdFxcdCAgICBuZnRfZGV2X2ZvcndhcmRfcGF0aChwa3QsIHRydWUsIHJvdXRlLCBjdCwgIWRpciwgZnQpKSB7XFxuK1xcdFxcdFxcdGRzdF9yZWxlYXNlKHJvdXRlLVxcdTAwM2V0dXBsZVtkaXJdLmRzdCk7XFxuK1xcdFxcdFxcdGRzdF9yZWxlYXNlKHJvdXRlLVxcdTAwM2V0dXBsZVshZGlyXS5kc3QpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4raW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuK1xcdFxcdCAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcXG4rXFx0XFx0ICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxcbit7XFxuK1xcdGlmIChuZnRfZmxvd19vZmZsb2FkX2lzX2JyaWRnaW5nKHBrdC1cXHUwMDNlc2tiKSlcXG4rXFx0XFx0cmV0dXJuIG5mdF9mbG93X3JvdXRlX2JyaWRnaW5nKHBrdCwgY3QsIHJvdXRlLCBkaXIsIGZ0KTtcXG4rXFxuK1xcdHJldHVybiBuZnRfZmxvd19yb3V0ZV9yb3V0aW5nKHBrdCwgY3QsIHJvdXRlLCBkaXIsIGZ0KTtcXG4rfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChuZnRfZmxvd19yb3V0ZSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEyOjU2OjI4Ljc0MDQ3MTAzMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTQ2MjM0NDc5MzQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5GX0ZMT1dfVEFCTEVcIixcbiAgICBcIk5GVF9GTE9XX09GRkxPQURcIixcbiAgICBcIkJSSURHRVwiLFxuICAgIFwiQlJJREdFX1ZMQU5fRklMVEVSSU5HXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdVwiLFxuICAgIFwiYnJfdmxhbl9nZXRfb2ZmbG9hZF9pbmZvX3JjdVwiLFxuICAgIFwiYnJfdmxhbl9pc19lbmFibGVkX3JjdVwiLFxuICAgIFwiX19kZXZfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcIm5mdF9mbG93X3JvdXRlXCIsXG4gICAgXCJuZnRfZmxvd19yb3V0ZV9icmlkZ2luZ1wiLFxuICAgIFwibmZ0X2Zsb3dfb2ZmbG9hZF9pc19icmlkZ2luZ1wiLFxuICAgIFwibmZ0X2JyX3ZsYW5fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoXCIsXG4gICAgXCJuZnRfZmlsbF92bGFuX3Bhc3N0aHJvdWdoX2luZm9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIHN1cHBvcnQgZm9yIGZsb3cgb2ZmbG9hZCBvZiBicmlkZ2VkIHRyYWZmaWMuIEl0IGludHJvZHVjZXMgbmV3IGZ1bmN0aW9ucyB0byBjaGVjayBicmlkZ2UgRkRCIGVudHJpZXMgYW5kIFZMQU4gaW5mb3JtYXRpb24gZm9yIGZsb3cgb2ZmbG9hZCwgYW5kIG1vZGlmaWVzIHRoZSBuZXRmaWx0ZXIgZmxvdyB0YWJsZSBwYXRoIHRvIGhhbmRsZSBicmlkZ2VkIHRyYWZmaWMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBuZXR3b3JraW5nIGFuZCBuZXRmaWx0ZXIgc3Vic3lzdGVtcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDUyOTVkNjJlZWNmMjg5ODZlMThhYWQ3NzljZjVkY2YzZDA1OTZhZVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDEyOjU2OjI3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9pZl9icmlkZ2UuaCBiL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmhcbmluZGV4IDc1NjczYjhiZmZjYjhhLi5jMWNhZTU0NzQ5YzUxNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaWZfYnJpZGdlLmhcbkBAIC0xNDgsNiArMTQ4LDkgQEAgaW50IGJyX3ZsYW5fZ2V0X2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCxcbiBcdFx0ICAgICBzdHJ1Y3QgYnJpZGdlX3ZsYW5faW5mbyAqcF92aW5mbyk7XG4gaW50IGJyX3ZsYW5fZ2V0X2luZm9fcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB2aWQsXG4gXHRcdFx0IHN0cnVjdCBicmlkZ2Vfdmxhbl9pbmZvICpwX3ZpbmZvKTtcbit1MTYgYnJfdmxhbl9nZXRfb2ZmbG9hZF9pbmZvX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiAqcHJvdG8pO1xuK2Jvb2wgYnJfdmxhbl9pc19lbmFibGVkX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBib29sIGJyX21zdF9lbmFibGVkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpO1xuIGludCBicl9tc3RfZ2V0X2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IG1zdGksIHVuc2lnbmVkIGxvbmcgKnZpZHMpO1xuIGludCBicl9tc3RfZ2V0X3N0YXRlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiBtc3RpLCB1OCAqc3RhdGUpO1xuQEAgLTE4NCw2ICsxODcsMTcgQEAgc3RhdGljIGlubGluZSBpbnQgYnJfdmxhbl9nZXRfaW5mb19yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdTE2IHZpZCxcbiBcdHJldHVybiAtRUlOVkFMO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHUxNiBicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4rXHRcdFx0XHRcdFx0Y29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYixcbitcdFx0XHRcdFx0XHRfX2JlMTYgKnByb3RvKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgYnJfdmxhbl9pc19lbmFibGVkX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHJldHVybiBmYWxzZTtcbit9XG4gc3RhdGljIGlubGluZSBib29sIGJyX21zdF9lbmFibGVkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuQEAgLTIwOSw2ICsyMjMsOCBAQCB2b2lkIGJyX2ZkYl9jbGVhcl9vZmZsb2FkKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB2aWQpO1xuIGJvb2wgYnJfcG9ydF9mbGFnX2lzX3NldChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB1bnNpZ25lZCBsb25nIGZsYWcpO1xuIHU4IGJyX3BvcnRfZ2V0X3N0cF9zdGF0ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBjbG9ja190IGJyX2dldF9hZ2VpbmdfdGltZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2KTtcbitib29sIGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTggKmFkZHIpO1xuICNlbHNlXG4gc3RhdGljIGlubGluZSBzdHJ1Y3QgbmV0X2RldmljZSAqXG4gYnJfZmRiX2ZpbmRfcG9ydChjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2LFxuQEAgLTIzNyw2ICsyNTMsMTMgQEAgc3RhdGljIGlubGluZSBjbG9ja190IGJyX2dldF9hZ2VpbmdfdGltZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqYnJfZGV2KVxuIHtcbiBcdHJldHVybiAwO1xuIH1cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsXG4rXHRcdFx0XHRcdFx0ICAgY29uc3QgdTggKmFkZHIpXG4re1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbiAjZW5kaWZcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuaW5kZXggOTk4MWQ2MzdmOGI1NDYuLmMxZDBiODk3ZGU5NTM0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuKysrIGIvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaFxuQEAgLTM0MjIsNiArMzQyMiw4IEBAIGludCBkZXZfZ2V0X2lmbGluayhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTtcbiBpbnQgZGV2X2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpO1xuIGludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuIFx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spO1xuK2ludCBfX2Rldl9maWxsX2ZvcndhcmRfcGF0aChzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCAqY3R4LCBjb25zdCB1OCAqZGFkZHIsXG4rXHRcdFx0ICAgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9uYW1lKHN0cnVjdCBuZXQgKm5ldCwgY29uc3QgY2hhciAqbmFtZSk7XG4gc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZV9yY3Uoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcbiBzdHJ1Y3QgbmV0X2RldmljZSAqX19kZXZfZ2V0X2J5X25hbWUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBjaGFyICpuYW1lKTtcbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX2ZkYi5jIGIvbmV0L2JyaWRnZS9icl9mZGIuY1xuaW5kZXggZTQ1NzBiYmVkODU0NDUuLjMxNjFjMjY4OWY2YTZmIDEwMDY0NFxuLS0tIGEvbmV0L2JyaWRnZS9icl9mZGIuY1xuKysrIGIvbmV0L2JyaWRnZS9icl9mZGIuY1xuQEAgLTI2Nyw2ICsyNjcsMzggQEAgc3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpicl9mZGJfZmluZF9yY3Uoc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxuIFx0cmV0dXJuIGZkYl9maW5kX3JjdShcdTAwMjZici1cdTAwM2VmZGJfaGFzaF90YmwsIGFkZHIsIHZpZCk7XG4gfVxuIFxuKy8qKlxuKyAqIGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3UgLSBjaGVjayBpZiBhIE1BQyBjYW4gYmUgZm9yd2FyZGVkIGJ5IHRoZSBicmlkZ2VcbisgKiBAZGV2OiBicmlkZ2UgcG9ydCBuZXR3b3JrIGRldmljZVxuKyAqIEBza2I6IHBhY2tldCBidWZmZXIgKHVzZWQgdG8gZGV0ZXJtaW5lIFZMQU4gaWQpXG4rICogQGFkZHI6IGRlc3RpbmF0aW9uIE1BQyBhZGRyZXNzXG4rICpcbisgKiBSZXNvbHZlcyB0aGUgVkxBTiBpZCBmb3IgQHNrYiBvbiBAZGV2IChza2IgVkxBTiB0YWcgd2hlbiBwcmVzZW50LCBQVklEXG4rICogd2hlbiBWTEFOIGZpbHRlcmluZyBpcyBlbmFibGVkLCAwIG90aGVyd2lzZSkgdGhlbiBjaGVja3Mgd2hldGhlciB0aGUgYnJpZGdlXG4rICogRkRCIGNvbnRhaW5zIGEgZm9yd2FyZGluZyBlbnRyeSAoZHN0ICE9IE5VTEwsIG5vdCBhIGxvY2FsL3NlbGYgZW50cnkpIGZvclxuKyAqIEBhZGRyIGFuZCB0aGF0IFZMQU4gaWQuIFNpbmdsZSBicl9wb3J0X2dldF9yY3UoKSBsb29rdXAuXG4rICogTXVzdCBiZSBjYWxsZWQgdW5kZXIgUkNVIHJlYWQgbG9jay5cbisgKi9cbitib29sIGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3UoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3QgdTggKmFkZHIpXG4re1xuK1x0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IGJyX3BvcnRfZ2V0X3JjdShkZXYpO1xuK1x0c3RydWN0IG5ldF9icmlkZ2VfZmRiX2VudHJ5ICpmZGI7XG4rXHR1MTYgdmlkID0gMDtcbitcbitcdGlmICghcG9ydClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0aWYgKGJyX29wdF9nZXQocG9ydC1cdTAwM2ViciwgQlJPUFRfVkxBTl9FTkFCTEVEKSkge1xuK1x0XHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSlcbitcdFx0XHR2aWQgPSBza2Jfdmxhbl90YWdfZ2V0X2lkKHNrYik7XG4rXHRcdGVsc2VcbitcdFx0XHRicl92bGFuX2dldF9wdmlkX3JjdShkZXYsIFx1MDAyNnZpZCk7XG4rXHR9XG4rXHRmZGIgPSBicl9mZGJfZmluZF9yY3UocG9ydC1cdTAwM2ViciwgYWRkciwgdmlkKTtcbitcdHJldHVybiBmZGIgXHUwMDI2XHUwMDI2IGZkYi1cdTAwM2Vkc3Q7XG4rfVxuK0VYUE9SVF9TWU1CT0xfR1BMKGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3UpO1xuK1xuIC8qIFdoZW4gYSBzdGF0aWMgRkRCIGVudHJ5IGlzIGFkZGVkLCB0aGUgbWFjIGFkZHJlc3MgZnJvbSB0aGUgZW50cnkgaXNcbiAgKiBhZGRlZCB0byB0aGUgYnJpZGdlIHByaXZhdGUgSFcgYWRkcmVzcyBsaXN0IGFuZCBhbGwgcmVxdWlyZWQgcG9ydHNcbiAgKiBhcmUgdGhlbiB1cGRhdGVkIHdpdGggdGhlIG5ldyBpbmZvcm1hdGlvbi5cbmRpZmYgLS1naXQgYS9uZXQvYnJpZGdlL2JyX3ZsYW4uYyBiL25ldC9icmlkZ2UvYnJfdmxhbi5jXG5pbmRleCA1NTYwYWZjYWFjYTMyNy4uMGIyOTYzNjJhZGY3YzkgMTAwNjQ0XG4tLS0gYS9uZXQvYnJpZGdlL2JyX3ZsYW4uY1xuKysrIGIvbmV0L2JyaWRnZS9icl92bGFuLmNcbkBAIC0xNTU5LDYgKzE1NTksNTEgQEAgaW50IGJyX3ZsYW5fZ2V0X2luZm9fcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHUxNiB2aWQsXG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGJyX3ZsYW5fZ2V0X2luZm9fcmN1KTtcbiBcbisvKipcbisgKiBicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1IC0gZ2V0IFZMQU4gaWQgYW5kIHByb3RvY29sIGZvciBicmlkZ2UgZmxvdyBvZmZsb2FkXG4rICogQGRldjogYnJpZGdlIHBvcnQgbmV0d29yayBkZXZpY2VcbisgKiBAc2tiOiBwYWNrZXQgYnVmZmVyXG4rICogQHByb3RvOiBvdXRwdXQgZm9yIHRoZSBicmlkZ2UgVkxBTiBwcm90b2NvbCAoc2V0IG9ubHkgd2hlbiByZXR1cm4gdmFsdWUgIT0gMClcbisgKlxuKyAqIFdoZW4gVkxBTiBmaWx0ZXJpbmcgaXMgZW5hYmxlZCwgcmVzb2x2ZXMgdGhlIFZMQU4gaWQgZm9yIGZsb3cgb2ZmbG9hZCAoc2tiXG4rICogVkxBTiB0YWcgaWQgaWYgcHJlc2VudCwgUFZJRCBvdGhlcndpc2UpIGFuZCB3cml0ZXMgdGhlIGJyaWRnZSBWTEFOIHByb3RvY29sXG4rICogdG8gQHByb3RvLiBSZXR1cm5zIDAgd2hlbiBmaWx0ZXJpbmcgaXMgb2ZmIG9yIEBkZXYgaXMgbm90IGEgYnJpZGdlIHBvcnQuXG4rICogU2luZ2xlIGJyX3BvcnRfZ2V0X3JjdSgpIGxvb2t1cC4gTXVzdCBiZSBjYWxsZWQgdW5kZXIgUkNVIHJlYWQgbG9jay5cbisgKi9cbit1MTYgYnJfdmxhbl9nZXRfb2ZmbG9hZF9pbmZvX3JjdShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuK1x0XHRcdFx0IGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIF9fYmUxNiAqcHJvdG8pXG4re1xuK1x0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IGJyX3BvcnRfZ2V0X3JjdShkZXYpO1xuK1x0dTE2IHZpZCA9IDA7XG4rXG4rXHRpZiAoIXBvcnQgfHwgIWJyX29wdF9nZXQocG9ydC1cdTAwM2ViciwgQlJPUFRfVkxBTl9FTkFCTEVEKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRpZiAoc2tiX3ZsYW5fdGFnX3ByZXNlbnQoc2tiKSlcbitcdFx0dmlkID0gc2tiX3ZsYW5fdGFnX2dldF9pZChza2IpO1xuK1x0ZWxzZVxuK1x0XHRicl92bGFuX2dldF9wdmlkX3JjdShkZXYsIFx1MDAyNnZpZCk7XG4rXHRpZiAodmlkKVxuK1x0XHQqcHJvdG8gPSBwb3J0LVx1MDAzZWJyLVx1MDAzZXZsYW5fcHJvdG87XG4rXHRyZXR1cm4gdmlkO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1KTtcbitcbisvKipcbisgKiBicl92bGFuX2lzX2VuYWJsZWRfcmN1IC0gY2hlY2sgaWYgVkxBTiBmaWx0ZXJpbmcgaXMgYWN0aXZlIG9uIGEgcG9ydCdzIGJyaWRnZVxuKyAqIEBkZXY6IGJyaWRnZSBwb3J0IG5ldHdvcmsgZGV2aWNlXG4rICpcbisgKiBSZXR1cm5zIHRydWUgaWYgVkxBTiBmaWx0ZXJpbmcgaXMgZW5hYmxlZCBvbiB0aGUgYnJpZGdlIEBkZXYgYmVsb25ncyB0by5cbisgKiBSZXR1cm5zIGZhbHNlIHdoZW4gQGRldiBpcyBub3QgYSBicmlkZ2UgcG9ydCBvciBmaWx0ZXJpbmcgaXMgb2ZmLlxuKyAqIE11c3QgYmUgY2FsbGVkIHVuZGVyIFJDVSByZWFkIGxvY2suXG4rICovXG4rYm9vbCBicl92bGFuX2lzX2VuYWJsZWRfcmN1KGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4re1xuK1x0c3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcG9ydCA9IGJyX3BvcnRfZ2V0X3JjdShkZXYpO1xuK1xuK1x0cmV0dXJuIHBvcnQgXHUwMDI2XHUwMDI2IGJyX29wdF9nZXQocG9ydC1cdTAwM2ViciwgQlJPUFRfVkxBTl9FTkFCTEVEKTtcbit9XG4rRVhQT1JUX1NZTUJPTF9HUEwoYnJfdmxhbl9pc19lbmFibGVkX3JjdSk7XG4rXG4gc3RhdGljIGludCBicl92bGFuX2lzX2JpbmRfdmxhbl9kZXYoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRyZXR1cm4gaXNfdmxhbl9kZXYoZGV2KSBcdTAwMjZcdTAwMjZcbmRpZmYgLS1naXQgYS9uZXQvY29yZS9kZXYuYyBiL25ldC9jb3JlL2Rldi5jXG5pbmRleCA0YjNkNWNmZGY2ZTAwZi4uNjJmMWQwYjY0Yzc2ZGUgMTAwNjQ0XG4tLS0gYS9uZXQvY29yZS9kZXYuY1xuKysrIGIvbmV0L2NvcmUvZGV2LmNcbkBAIC03NTAsNDQgKzc1MCw1MiBAQCBzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2VfcGF0aCAqZGV2X2Z3ZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuIFx0cmV0dXJuIFx1MDAyNnN0YWNrLVx1MDAzZXBhdGhba107XG4gfVxuIFxuLWludCBkZXZfZmlsbF9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgY29uc3QgdTggKmRhZGRyLFxuLVx0XHRcdCAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4raW50IF9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4ICpjdHgsIGNvbnN0IHU4ICpkYWRkcixcbitcdFx0XHQgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2spXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmxhc3RfZGV2O1xuLVx0c3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggY3R4ID0ge1xuLVx0XHQuZGV2XHQ9IGRldixcbi1cdH07XG4gXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoICpwYXRoO1xuIFx0aW50IHJldCA9IDA7XG4gXG4tXHRtZW1jcHkoY3R4LmRhZGRyLCBkYWRkciwgc2l6ZW9mKGN0eC5kYWRkcikpO1xuK1x0bWVtY3B5KGN0eC1cdTAwM2VkYWRkciwgZGFkZHIsIHNpemVvZihjdHgtXHUwMDNlZGFkZHIpKTtcbiBcdHN0YWNrLVx1MDAzZW51bV9wYXRocyA9IDA7XG4tXHR3aGlsZSAoY3R4LmRldiBcdTAwMjZcdTAwMjYgY3R4LmRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aCkge1xuLVx0XHRsYXN0X2RldiA9IGN0eC5kZXY7XG4rXHR3aGlsZSAoY3R4LVx1MDAzZWRldiBcdTAwMjZcdTAwMjYgY3R4LVx1MDAzZWRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aCkge1xuK1x0XHRsYXN0X2RldiA9IGN0eC1cdTAwM2VkZXY7XG4gXHRcdHBhdGggPSBkZXZfZndkX3BhdGgoc3RhY2spO1xuIFx0XHRpZiAoIXBhdGgpXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFxuIFx0XHRtZW1zZXQocGF0aCwgMCwgc2l6ZW9mKHN0cnVjdCBuZXRfZGV2aWNlX3BhdGgpKTtcbi1cdFx0cmV0ID0gY3R4LmRldi1cdTAwM2VuZXRkZXZfb3BzLVx1MDAzZW5kb19maWxsX2ZvcndhcmRfcGF0aChcdTAwMjZjdHgsIHBhdGgpO1xuK1x0XHRyZXQgPSBjdHgtXHUwMDNlZGV2LVx1MDAzZW5ldGRldl9vcHMtXHUwMDNlbmRvX2ZpbGxfZm9yd2FyZF9wYXRoKGN0eCwgcGF0aCk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDApXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFxuLVx0XHRpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC5kZXYpKVxuK1x0XHRpZiAoV0FSTl9PTl9PTkNFKGxhc3RfZGV2ID09IGN0eC1cdTAwM2VkZXYpKVxuIFx0XHRcdHJldHVybiAtMTtcbiBcdH1cbiBcbi1cdGlmICghY3R4LmRldilcbitcdGlmICghY3R4LVx1MDAzZWRldilcbiBcdFx0cmV0dXJuIHJldDtcbiBcbiBcdHBhdGggPSBkZXZfZndkX3BhdGgoc3RhY2spO1xuIFx0aWYgKCFwYXRoKVxuIFx0XHRyZXR1cm4gLTE7XG4gXHRwYXRoLVx1MDAzZXR5cGUgPSBERVZfUEFUSF9FVEhFUk5FVDtcbi1cdHBhdGgtXHUwMDNlZGV2ID0gY3R4LmRldjtcbitcdHBhdGgtXHUwMDNlZGV2ID0gY3R4LVx1MDAzZWRldjtcbiBcbiBcdHJldHVybiByZXQ7XG4gfVxuK0VYUE9SVF9TWU1CT0xfR1BMKF9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcbitcbitpbnQgZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGNvbnN0IHU4ICpkYWRkcixcbitcdFx0XHQgIHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrKVxuK3tcbitcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfY3R4IGN0eCA9IHtcbitcdFx0LmRldlx0PSBkZXYsXG4rXHR9O1xuK1xuK1x0cmV0dXJuIF9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKFx1MDAyNmN0eCwgZGFkZHIsIHN0YWNrKTtcbit9XG4gRVhQT1JUX1NZTUJPTF9HUEwoZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKTtcbiBcbiAvKiBtdXN0IGJlIGNhbGxlZCB1bmRlciByY3VfcmVhZF9sb2NrKCksIGFzIHdlIGRvbnQgdGFrZSBhIHJlZmVyZW5jZSAqL1xuZGlmZiAtLWdpdCBhL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXG5pbmRleCA5OGMwM2I0ODdmNTIxMS4uZDE1YzQyNWM4OGM0YWEgMTAwNjQ0XG4tLS0gYS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXG4rKysgYi9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jXG5AQCAtMTUsNiArMTUsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19jb3JlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NuZXQvbmV0ZmlsdGVyL25mX2Nvbm50cmFja19leHRlbmQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfYnJpZGdlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9pZl9ldGhlci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvaWZfdmxhbi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbmV0L3JvdXRlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NuZXQvaXA2X3JvdXRlLmhcdTAwM2VcbiBcbiBzdGF0aWMgZW51bSBmbG93X29mZmxvYWRfeG1pdF90eXBlIG5mdF94bWl0X3R5cGUoc3RydWN0IGRzdF9lbnRyeSAqZHN0KVxuIHtcbkBAIC00Miw3ICs0NywyNSBAQCBzdGF0aWMgYm9vbCBuZnRfaXNfdmFsaWRfZXRoZXJfZGV2aWNlKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4tc3RhdGljIGludCBuZnRfZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbitzdGF0aWMgYm9vbCBuZnRfZmxvd19vZmZsb2FkX2lzX2JyaWRnaW5nKHN0cnVjdCBza19idWZmICpza2IpXG4re1xuK1x0Ym9vbCByZXQ7XG4rXG4rXHRpZiAoIW5ldGlmX2lzX2JyaWRnZV9wb3J0KHNrYi1cdTAwM2VkZXYpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoIXNrYl9tYWNfaGVhZGVyX3dhc19zZXQoc2tiKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0cmV0ID0gYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdShza2ItXHUwMDNlZGV2LCBza2IsXG4rXHRcdFx0XHRcdCAgICAgIGV0aF9oZHIoc2tiKS1cdTAwM2VoX2Rlc3QpO1xuK1x0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitzdGF0aWMgaW50IG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eCxcbitcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLFxuIFx0XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3RfY2FjaGUsXG4gXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdFx0XHRcdCAgICAgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpciwgdTggKmhhLFxuQEAgLTU4LDYgKzgxLDEyIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuK1x0LyogQnJpZGdpbmcgZmFzdHBhdGggY29waWVzIEV0aGVybmV0IGFkZHJlc3NlcyBpbnRvIGhhOyBkbyBub3QgcmVwbGFjZVxuK1x0ICogdGhlbSB2aWEgbmVpZ2hib3VyIGxvb2t1cCBvbiB0aGUgcm91dGVkIGRlc3RpbmF0aW9uIGRldmljZS5cbitcdCAqL1xuK1x0aWYgKCFpc196ZXJvX2V0aGVyX2FkZHIoaGEpKVxuK1x0XHRnb3RvIG91dDtcbitcbiBcdG4gPSBkc3RfbmVpZ2hfbG9va3VwKGRzdF9jYWNoZSwgZGFkZHIpO1xuIFx0aWYgKCFuKVxuIFx0XHRyZXR1cm4gLTE7XG5AQCAtNzIsNyArMTAxLDIzIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4gXHRcdHJldHVybiAtMTtcbiBcbiBvdXQ6XG4tXHRyZXR1cm4gZGV2X2ZpbGxfZm9yd2FyZF9wYXRoKGRldiwgaGEsIHN0YWNrKTtcbitcdHJldHVybiBfX2Rldl9maWxsX2ZvcndhcmRfcGF0aChjdHgsIGhhLCBzdGFjayk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG5mdF9icl92bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbitcdFx0XHRcdFx0ICAgICAgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9jdHggKmN0eClcbit7XG4rXHRfX2JlMTYgcHJvdG8gPSAwO1xuK1x0dTE2IHZsYW5faWQ7XG4rXG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHR2bGFuX2lkID0gYnJfdmxhbl9nZXRfb2ZmbG9hZF9pbmZvX3JjdShwa3QtXHUwMDNlc2tiLVx1MDAzZWRldiwgcGt0LVx1MDAzZXNrYiwgXHUwMDI2cHJvdG8pO1xuK1x0aWYgKHZsYW5faWQpIHtcbitcdFx0Y3R4LVx1MDAzZW51bV92bGFucyA9IDE7XG4rXHRcdGN0eC1cdTAwM2V2bGFuWzBdLmlkID0gdmxhbl9pZDtcbitcdFx0Y3R4LVx1MDAzZXZsYW5bMF0ucHJvdG8gPSBwcm90bztcbitcdH1cbitcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbiBcbiBzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyB7XG5AQCAtOTIsNiArMTM3LDI5IEBAIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvIHtcbiBcdGVudW0gZmxvd19vZmZsb2FkX3htaXRfdHlwZSB4bWl0X3R5cGU7XG4gfTtcbiBcbitzdGF0aWMgdm9pZCBuZnRfZmlsbF92bGFuX3Bhc3N0aHJvdWdoX2luZm8oY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4rXHRcdFx0XHRcdCAgIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvICppbmZvKVxuK3tcbitcdGlmICghc2tiX3ZsYW5fdGFnX3ByZXNlbnQocGt0LVx1MDAzZXNrYikpXG4rXHRcdHJldHVybjtcbitcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdC8qIHdoZW4gYnJpZGdlIFZMQU4gZmlsdGVyaW5nIGlzIGVuYWJsZWQsIHRoZSBicmlkZ2UgaGFuZGxlcyB0aGUgdGFnICovXG4rXHRpZiAobmV0aWZfaXNfYnJpZGdlX3BvcnQocGt0LVx1MDAzZXNrYi1cdTAwM2VkZXYpIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFicl92bGFuX2lzX2VuYWJsZWRfcmN1KHBrdC1cdTAwM2Vza2ItXHUwMDNlZGV2KSkge1xuK1x0XHRpZiAoaW5mby1cdTAwM2VudW1fZW5jYXBzIFx1MDAzZT0gTkZfRkxPV19UQUJMRV9FTkNBUF9NQVgpIHtcbitcdFx0XHRpbmZvLVx1MDAzZWluZGV2ID0gTlVMTDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRpbmZvLVx1MDAzZWVuY2FwW2luZm8tXHUwMDNlbnVtX2VuY2Fwc10uaWQgPVxuK1x0XHRcdFx0c2tiX3ZsYW5fdGFnX2dldF9pZChwa3QtXHUwMDNlc2tiKTtcbitcdFx0XHRpbmZvLVx1MDAzZWVuY2FwW2luZm8tXHUwMDNlbnVtX2VuY2Fwc10ucHJvdG8gPVxuK1x0XHRcdFx0cGt0LVx1MDAzZXNrYi1cdTAwM2V2bGFuX3Byb3RvO1xuK1x0XHRcdGluZm8tXHUwMDNlbnVtX2VuY2FwcysrO1xuK1x0XHR9XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbit9XG4rXG4gc3RhdGljIGludCBuZnRfZGV2X3BhdGhfaW5mbyhjb25zdCBzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX3N0YWNrICpzdGFjayxcbiBcdFx0XHQgICAgIHN0cnVjdCBuZnRfZm9yd2FyZF9pbmZvICppbmZvLFxuIFx0XHRcdCAgICAgdW5zaWduZWQgY2hhciAqaGEsIHN0cnVjdCBuZl9mbG93dGFibGUgKmZsb3d0YWJsZSlcbkBAIC0xMDMsMTMgKzE3MSwxMyBAQCBzdGF0aWMgaW50IG5mdF9kZXZfcGF0aF9pbmZvKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgKnN0YWNrLFxuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgc3RhY2stXHUwMDNlbnVtX3BhdGhzOyBpKyspIHtcbiBcdFx0cGF0aCA9IFx1MDAyNnN0YWNrLVx1MDAzZXBhdGhbaV07XG4rXHRcdGluZm8tXHUwMDNlaW5kZXYgPSBwYXRoLVx1MDAzZWRldjtcbiBcdFx0c3dpdGNoIChwYXRoLVx1MDAzZXR5cGUpIHtcbiBcdFx0Y2FzZSBERVZfUEFUSF9FVEhFUk5FVDpcbiBcdFx0Y2FzZSBERVZfUEFUSF9EU0E6XG4gXHRcdGNhc2UgREVWX1BBVEhfVkxBTjpcbiBcdFx0Y2FzZSBERVZfUEFUSF9QUFBPRTpcbiBcdFx0Y2FzZSBERVZfUEFUSF9UVU46XG4tXHRcdFx0aW5mby1cdTAwM2VpbmRldiA9IHBhdGgtXHUwMDNlZGV2O1xuIFx0XHRcdGlmIChpc196ZXJvX2V0aGVyX2FkZHIoaW5mby1cdTAwM2VoX3NvdXJjZSkpXG4gXHRcdFx0XHRtZW1jcHkoaW5mby1cdTAwM2VoX3NvdXJjZSwgcGF0aC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcbiBcbkBAIC0xNzUsNiArMjQzLDEwIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9wYXRoX2luZm8oY29uc3Qgc3RydWN0IG5ldF9kZXZpY2VfcGF0aF9zdGFjayAqc3RhY2ssXG4gXHRcdFx0fVxuIFx0XHRcdGluZm8tXHUwMDNleG1pdF90eXBlID0gRkxPV19PRkZMT0FEX1hNSVRfRElSRUNUO1xuIFx0XHRcdGJyZWFrO1xuK1x0XHRjYXNlIERFVl9QQVRIX01US19XRE1BOlxuK1x0XHRcdGlmIChpc196ZXJvX2V0aGVyX2FkZHIoaW5mby1cdTAwM2VoX3NvdXJjZSkpXG4rXHRcdFx0XHRtZW1jcHkoaW5mby1cdTAwM2VoX3NvdXJjZSwgcGF0aC1cdTAwM2VkZXYtXHUwMDNlZGV2X2FkZHIsIEVUSF9BTEVOKTtcbitcdFx0XHRicmVhaztcbiBcdFx0ZGVmYXVsdDpcbiBcdFx0XHRyZXR1cm4gLTE7XG4gXHRcdH1cbkBAIC0yNDQsNiArMzE2LDcgQEAgc3RhdGljIGludCBuZnRfZmxvd190dW5uZWxfdXBkYXRlX3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuIH1cbiBcbiBzdGF0aWMgaW50IG5mdF9kZXZfZm9yd2FyZF9wYXRoKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LFxuK1x0XHRcdFx0Ym9vbCBpc19icmlkZ2luZyxcbiBcdFx0XHRcdHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSxcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcbiBcdFx0XHRcdGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG5AQCAtMjUxLDEyICszMjQsMzggQEAgc3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QgPSByb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLmRzdDtcbiBcdHN0cnVjdCBuZXRfZGV2aWNlX3BhdGhfc3RhY2sgc3RhY2s7XG4rXHRzdHJ1Y3QgbmV0X2RldmljZV9wYXRoX2N0eCBjdHggPSB7XG4rXHRcdC5kZXZcdD0gZHN0LVx1MDAzZWRldixcbitcdH07XG4gXHRzdHJ1Y3QgbmZ0X2ZvcndhcmRfaW5mbyBpbmZvID0ge307XG4rXHRlbnVtIGlwX2Nvbm50cmFja19pbmZvIHBrdF9jdGluZm87XG4rXHRlbnVtIGlwX2Nvbm50cmFja19kaXIgc2tiX2RpcjtcbitcdHN0cnVjdCBldGhoZHIgKmV0aDtcbiBcdHVuc2lnbmVkIGNoYXIgaGFbRVRIX0FMRU5dO1xuIFx0aW50IGk7XG4gXG4tXHRpZiAobmZ0X2Rldl9maWxsX2ZvcndhcmRfcGF0aChyb3V0ZSwgZHN0LCBjdCwgZGlyLCBoYSwgXHUwMDI2c3RhY2spIFx1MDAzYyAwIHx8XG4tXHQgICAgbmZ0X2Rldl9wYXRoX2luZm8oXHUwMDI2c3RhY2ssIFx1MDAyNmluZm8sIGhhLCBcdTAwMjZmdC1cdTAwM2VkYXRhKSBcdTAwM2MgMClcbitcdG1lbXNldChoYSwgMCwgc2l6ZW9mKGhhKSk7XG4rXG4rXHRpZiAoaXNfYnJpZGdpbmcpIHtcbitcdFx0bmZfY3RfZ2V0KHBrdC1cdTAwM2Vza2IsIFx1MDAyNnBrdF9jdGluZm8pO1xuK1x0XHRldGggPSBldGhfaGRyKHBrdC1cdTAwM2Vza2IpO1xuK1x0XHRza2JfZGlyID0gQ1RJTkZPMkRJUihwa3RfY3RpbmZvKTtcbitcdFx0aWYgKHNrYl9kaXIgIT0gZGlyKSB7XG4rXHRcdFx0bWVtY3B5KGhhLCBldGgtXHUwMDNlaF9zb3VyY2UsIEVUSF9BTEVOKTtcbitcdFx0XHRtZW1jcHkoaW5mby5oX3NvdXJjZSwgZXRoLVx1MDAzZWhfZGVzdCwgRVRIX0FMRU4pO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdG1lbWNweShoYSwgZXRoLVx1MDAzZWhfZGVzdCwgRVRIX0FMRU4pO1xuK1x0XHRcdG1lbWNweShpbmZvLmhfc291cmNlLCBldGgtXHUwMDNlaF9zb3VyY2UsIEVUSF9BTEVOKTtcbitcdFx0fVxuK1x0XHRuZnRfYnJfdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGgocGt0LCBcdTAwMjZjdHgpO1xuK1x0fVxuK1xuK1x0aWYgKG5mdF9kZXZfZmlsbF9mb3J3YXJkX3BhdGgoXHUwMDI2Y3R4LCByb3V0ZSwgZHN0LCBjdCwgZGlyLCBoYSwgXHUwMDI2c3RhY2spIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcbitcdG5mdF9maWxsX3ZsYW5fcGFzc3Rocm91Z2hfaW5mbyhwa3QsIFx1MDAyNmluZm8pO1xuK1xuK1x0aWYgKG5mdF9kZXZfcGF0aF9pbmZvKFx1MDAyNnN0YWNrLCBcdTAwMjZpbmZvLCBoYSwgXHUwMDI2ZnQtXHUwMDNlZGF0YSkgXHUwMDNjIDApXG4gXHRcdHJldHVybiAtRU5PRU5UO1xuIFxuIFx0aWYgKCFuZnRfZmxvd3RhYmxlX2ZpbmRfZGV2KGluZm8uaW5kZXYsIGZ0KSlcbkBAIC0yOTIsOSArMzkxLDExIEBAIHN0YXRpYyBpbnQgbmZ0X2Rldl9mb3J3YXJkX3BhdGgoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4taW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4tXHRcdCAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbi1cdFx0ICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxuK3N0YXRpYyBpbnQgbmZ0X2Zsb3dfcm91dGVfcm91dGluZyhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcbitcdFx0XHRcdCAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuK1x0XHRcdFx0ICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4rXHRcdFx0XHQgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdClcbiB7XG4gXHRzdHJ1Y3QgZHN0X2VudHJ5ICp0aGlzX2RzdCA9IHNrYl9kc3QocGt0LVx1MDAzZXNrYik7XG4gXHRzdHJ1Y3QgZHN0X2VudHJ5ICpvdGhlcl9kc3QgPSBOVUxMO1xuQEAgLTMzNCwxMiArNDM1LDEyIEBAIGludCBuZnRfZmxvd19yb3V0ZShjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCwgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuIFx0bmZ0X2RlZmF1bHRfZm9yd2FyZF9wYXRoKHJvdXRlLCB0aGlzX2RzdCwgZGlyKTtcbiBcdG5mdF9kZWZhdWx0X2ZvcndhcmRfcGF0aChyb3V0ZSwgb3RoZXJfZHN0LCAhZGlyKTtcbiBcbi1cdGlmIChyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLnhtaXRfdHlwZVx0PT0gRkxPV19PRkZMT0FEX1hNSVRfTkVJR0ggXHUwMDI2XHUwMDI2XG4tXHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCByb3V0ZSwgY3QsIGRpciwgZnQpIFx1MDAzYyAwKVxuK1x0aWYgKHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0ueG1pdF90eXBlID09IEZMT1dfT0ZGTE9BRF9YTUlUX05FSUdIIFx1MDAyNlx1MDAyNlxuK1x0ICAgIG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgZmFsc2UsIHJvdXRlLCBjdCwgZGlyLCBmdCkgXHUwMDNjIDApXG4gXHRcdGdvdG8gZXJyX2RzdF9yZWxlYXNlO1xuIFxuIFx0aWYgKHJvdXRlLVx1MDAzZXR1cGxlWyFkaXJdLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCBcdTAwMjZcdTAwMjZcbi1cdCAgICBuZnRfZGV2X2ZvcndhcmRfcGF0aChwa3QsIHJvdXRlLCBjdCwgIWRpciwgZnQpIFx1MDAzYyAwKVxuK1x0ICAgIG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgZmFsc2UsIHJvdXRlLCBjdCwgIWRpciwgZnQpIFx1MDAzYyAwKVxuIFx0XHRnb3RvIGVycl9kc3RfcmVsZWFzZTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTM0OSw0ICs0NTAsODIgQEAgaW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4gXHRkc3RfcmVsZWFzZShyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5kc3QpO1xuIFx0cmV0dXJuIC1FTk9FTlQ7XG4gfVxuK1xuK3N0YXRpYyBpbnQgbmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmcoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXG4rXHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG4rXHRcdFx0XHQgICBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxuK1x0XHRcdFx0ICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxuK3tcbitcdHN0cnVjdCBkc3RfZW50cnkgKmRzdHNbSVBfQ1RfRElSX01BWF0gPSB7fTtcbitcdHN0cnVjdCBuZXRfZGV2aWNlICpicl9kZXY7XG4rXHRpbnQgaTtcbitcbitcdC8qIEFsbG9jYXRlIG1pbmltYWwgZHN0cyBhbmNob3JlZCB0byB0aGUgYnJpZGdlIG1hc3RlciBkZXZpY2UgdG8gc3VwcGx5XG4rXHQgKiB4bWl0X3R5cGUgYW5kIE1UVS4gQSBmdWxsIHJvdXRpbmcgbG9va3VwIHZpYSBuZl9yb3V0ZSgpIGlzIGF2b2lkZWRcbitcdCAqIGJlY2F1c2UgaXQgZmFpbHMgZm9yIHByZWZpeGVzIHRoYXQgYXJlIGJyaWRnZWQgYnV0IG5vdCByb3V0ZWQuXG4rXHQgKi9cbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdGJyX2RldiA9IG5ldGRldl9tYXN0ZXJfdXBwZXJfZGV2X2dldF9yY3UocGt0LVx1MDAzZXNrYi1cdTAwM2VkZXYpO1xuK1x0aWYgKCFicl9kZXYgfHwgIW5ldGlmX2lzX2JyaWRnZV9tYXN0ZXIoYnJfZGV2KSkge1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXHR9XG4rXG4rXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBJUF9DVF9ESVJfTUFYOyBpKyspIHtcbitcdFx0c3dpdGNoIChuZnRfcGYocGt0KSkge1xuK1x0XHRjYXNlIE5GUFJPVE9fSVBWNDoge1xuK1x0XHRcdHN0cnVjdCBydGFibGUgKnJ0O1xuK1xuK1x0XHRcdHJ0ID0gcnRfZHN0X2FsbG9jKGJyX2RldiwgMCwgUlROX1VOSUNBU1QsIHRydWUpO1xuK1x0XHRcdGlmIChydClcbitcdFx0XHRcdGRzdHNbaV0gPSBcdTAwMjZydC1cdTAwM2Vkc3Q7XG4rXHRcdFx0YnJlYWs7XG4rXHRcdH1cbitcdFx0Y2FzZSBORlBST1RPX0lQVjY6IHtcbitcdFx0XHRzdHJ1Y3QgcnQ2X2luZm8gKnJ0O1xuK1xuK1x0XHRcdHJ0ID0gaXA2X2RzdF9hbGxvYyhuZnRfbmV0KHBrdCksIGJyX2RldiwgMCk7XG4rXHRcdFx0aWYgKHJ0KVxuK1x0XHRcdFx0ZHN0c1tpXSA9IFx1MDAyNnJ0LVx1MDAzZWRzdDtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1x0XHR9XG4rXHR9XG4rXHRyY3VfcmVhZF91bmxvY2soKTtcbitcbitcdGlmICghZHN0c1tkaXJdIHx8ICFkc3RzWyFkaXJdKSB7XG4rXHRcdGRzdF9yZWxlYXNlKGRzdHNbZGlyXSk7XG4rXHRcdGRzdF9yZWxlYXNlKGRzdHNbIWRpcl0pO1xuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcdH1cbitcbitcdG5mdF9kZWZhdWx0X2ZvcndhcmRfcGF0aChyb3V0ZSwgZHN0c1tkaXJdLCBkaXIpO1xuK1x0bmZ0X2RlZmF1bHRfZm9yd2FyZF9wYXRoKHJvdXRlLCBkc3RzWyFkaXJdLCAhZGlyKTtcbitcdC8qIERyb3AgYWxsb2NhdGlvbiByZWZlcmVuY2VzOyByb3V0ZS1cdTAwM2V0dXBsZVsqXS5kc3QgaG9sZHMgdGhlIGNsb25lcy4gKi9cbitcdGRzdF9yZWxlYXNlKGRzdHNbZGlyXSk7XG4rXHRkc3RfcmVsZWFzZShkc3RzWyFkaXJdKTtcbitcbitcdGlmIChyb3V0ZS1cdTAwM2V0dXBsZVtkaXJdLnhtaXRfdHlwZSA9PSBGTE9XX09GRkxPQURfWE1JVF9ORUlHSCBcdTAwMjZcdTAwMjZcbitcdCAgICByb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS54bWl0X3R5cGUgPT0gRkxPV19PRkZMT0FEX1hNSVRfTkVJR0gpIHtcbitcdFx0aWYgKG5mdF9kZXZfZm9yd2FyZF9wYXRoKHBrdCwgdHJ1ZSwgcm91dGUsIGN0LCBkaXIsIGZ0KSB8fFxuK1x0XHQgICAgbmZ0X2Rldl9mb3J3YXJkX3BhdGgocGt0LCB0cnVlLCByb3V0ZSwgY3QsICFkaXIsIGZ0KSkge1xuK1x0XHRcdGRzdF9yZWxlYXNlKHJvdXRlLVx1MDAzZXR1cGxlW2Rpcl0uZHN0KTtcbitcdFx0XHRkc3RfcmVsZWFzZShyb3V0ZS1cdTAwM2V0dXBsZVshZGlyXS5kc3QpO1xuK1x0XHRcdHJldHVybiAtRU5PRU5UO1xuK1x0XHR9XG4rXHR9XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4raW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXG4rXHRcdCAgIHN0cnVjdCBuZl9mbG93X3JvdXRlICpyb3V0ZSwgZW51bSBpcF9jb25udHJhY2tfZGlyIGRpcixcbitcdFx0ICAgc3RydWN0IG5mdF9mbG93dGFibGUgKmZ0KVxuK3tcbitcdGlmIChuZnRfZmxvd19vZmZsb2FkX2lzX2JyaWRnaW5nKHBrdC1cdTAwM2Vza2IpKVxuK1x0XHRyZXR1cm4gbmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmcocGt0LCBjdCwgcm91dGUsIGRpciwgZnQpO1xuK1xuK1x0cmV0dXJuIG5mdF9mbG93X3JvdXRlX3JvdXRpbmcocGt0LCBjdCwgcm91dGUsIGRpciwgZnQpO1xuK31cbiBFWFBPUlRfU1lNQk9MX0dQTChuZnRfZmxvd19yb3V0ZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMjo1NjoyOC43NDA0NzI4MjFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1OTI5MjkzODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEJyaWRnZWQgVHJhZmZpYyBGbG93IE9mZmxvYWQgUGF0Y2gqKlxuXG5Pa2F5LCBzbyB3ZSBoYXZlIHRoaXMgbmV3IHBhdGNoIHRoYXQgc2VlbXMgdG8gaW50cm9kdWNlIGZsb3cgb2ZmbG9hZCBzdXBwb3J0IGZvciBicmlkZ2VkIHRyYWZmaWMsIHdoaWNoIGlzIGEgcHJldHR5IGludGVyZXN0aW5nIGRldmVsb3BtZW50LiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZXMgYXJlIGNvbmNlbnRyYXRlZCBpbiBgbmV0L2JyaWRnZS9icl9mZGIuY2AsIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AsIGBuZXQvY29yZS9kZXYuY2AsIGFuZCBgbmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguY2AuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgdGhlc2UgbmV3IGZ1bmN0aW9ucyBsaWtlIGBicl9mZGJfaGFzX2ZvcndhcmRpbmdfZW50cnlfcmN1YCwgYGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3VgLCBgYnJfdmxhbl9pc19lbmFibGVkX3JjdWAsIGFuZCBgX19kZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGFyZSBleGFjdGx5IHdoYXQgSSB3b3VsZCBleHBlY3QgdG8gc2VlIGZvciBzb21ldGhpbmcgbGlrZSB0aGlzLiBBbmQgdGhlIG1vZGlmaWNhdGlvbiB0byBgbmZ0X2Zsb3dfcm91dGVgLCBwYXJ0aWN1bGFybHkgdGhlIGFkZGl0aW9uIG9mIGBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZ2AsIHN1Z2dlc3RzIGEgY2xlYXIgaW50ZWdyYXRpb24gd2l0aCB0aGUgTmV0ZmlsdGVyIGZsb3cgdGFibGUgZnJhbWV3b3JrLlxuXG5Gcm9tIGEgcXVpY2sgZ2xhbmNlLCB0aGlzIGNvZGUgbG9va3MgZnVuY3Rpb25hbCBhbmQgdGhlIGxvZ2ljIGlzIHJlYWNoYWJsZSwgd2hpY2ggaXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBNeSBuZXh0IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIGdldCB0aGlzIGludG8gYSBmdXp6aW5nIHJlZ2ltZS4gVGhhdCBzZWVtcyBsaWtlIGEgd29ydGh3aGlsZSB0ZXN0IHN0cmF0ZWd5LlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIE9idmlvdXNseSwgYENPTkZJR19ORl9GTE9XX1RBQkxFYCBpcyBnb2luZyB0byBiZSByZXF1aXJlZCwgdGhhdCdzIGEgbm8tYnJhaW5lci4gYENPTkZJR19CUklER0VgIGlzIGFub3RoZXIgb2J2aW91cyBvbmUuIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBpcyBhIG1heWJlLCBiYXNlZCBvbiB0aGUgYGJyX3ZsYW5gIGZpbGVzLCBzbyBJJ2xsIG5lZWQgdG8gY29uZmlybSB0aGF0IG9uZS4gSSdsbCB0YWtlIGEgbG9vayBhdCB0aGUgYG5ldC9uZXRmaWx0ZXIvS2NvbmZpZ2Agb3Igc2ltaWxhciBmaWxlcyBmb3IgYG5mX2Zsb3dfdGFibGVfcGF0aC5jYCB0byBjb25maXJtLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgcHJldHR5IGNsZWFyIHBpY3R1cmUgb2YgdGhlIG5lY2Vzc2FyeSBlbnZpcm9ubWVudCB0byByZXByb2R1Y2UgYW5kIHZhbGlkYXRlIHRoZSBwYXRjaCdzIGZ1bmN0aW9uYWxpdHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg5NTUsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMjo1NjozNC42Njk3NjgzNjNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQyODc1NDc1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZl9mbG93X3RhYmxlX3BhdGgub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvbmV0ZmlsdGVyL01ha2VmaWxlPTE0Mz1uZl9mbG93X3RhYmxlLW9ianNcXHRcXHQ6PSBuZl9mbG93X3RhYmxlX2NvcmUubyBuZl9mbG93X3RhYmxlX2lwLm8gXFxcXFxcbm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU6MTQ0OlxcdFxcdFxcdFxcdCAgIG5mX2Zsb3dfdGFibGVfcGF0aC5vIFxcXFxcXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTE0NS1cXHRcXHRcXHRcXHQgICBuZl9mbG93X3RhYmxlX29mZmxvYWQubyBuZl9mbG93X3RhYmxlX3hkcC5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEyOjU2OjM4LjA5ODUyODIwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NDcwMTgxNzY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipORl9GTE9XX1RBQkxFIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYENPTkZJR19ORl9GTE9XX1RBQkxFYC4gUmlnaHQsIHRoYXQncyB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3ltYm9sIHRoYXQgZGlyZWN0bHkgY29udHJvbHMgd2hldGhlciB0aGUgYG5mX2Zsb3dfdGFibGVgIG9iamVjdCBmaWxlcyBhcmUgaW5jbHVkZWQgaW4gdGhlIGJ1aWxkLiBJdCdzIGEgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCBkZXBlbmRlbmN5LCBubyByZWFsIHN1cnByaXNlcyB0aGVyZS4gSSdtIGFzc3VtaW5nIHRoYXQgdGhpcyBpcyBhIGNyaXRpY2FsIG1vZHVsZSBmb3IgYW55IHN5c3RlbSB1c2luZyBjb25uZWN0aW9uIHRyYWNraW5nIG9yIE5ldGZpbHRlcidzIGZsb3cgdGFibGUgaW1wbGVtZW50YXRpb24uIFRoZSBpbXBhY3Qgb2YgdGhpcyBzZXR0aW5nIHdpbGwgZGVwZW5kIG9uIHRoZSByZXN0IG9mIG15IGNvbmZpZ3VyYXRpb24sIG9mIGNvdXJzZSAtIHBhcnRpY3VsYXJseSBob3cgdGhlIGtlcm5lbCBpcyBjb21waWxlZCBhbmQgd2hpY2ggZmVhdHVyZXMgSSBoYXZlIGVuYWJsZWQuIEkgd2FudCB0byBkaXZlIGEgbGl0dGxlIGRlZXBlciwgSSdkIHNheSBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGV0aGVyIHRoaXMgaXMgYSBoYXJkIG9yIHNvZnQgZGVwZW5kZW5jeSBvbiBvdGhlciBwYXJ0cyBvZiB0aGUgTmV0ZmlsdGVyIHN1YnN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTczMiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEyOjU3OjE1LjU2ODcxMTYxNloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTQ0MTg2Njk4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORl9GTE9XX1RBQkxFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz03MDE9ZW5kaWYgIyBORl9UQUJMRVNcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzAyLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MDM6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfSU5FVFxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZy03MDQtXFx0dHJpc3RhdGUgXFxcIk5ldGZpbHRlciBmbG93IHRhYmxlIG1peGVkIElQdjQvSVB2NiBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MTE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVcXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzEyLVxcdHRyaXN0YXRlIFxcXCJOZXRmaWx0ZXIgZmxvdyB0YWJsZSBtb2R1bGVcXFwiXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWctNzIwLVxcbm5ldC9uZXRmaWx0ZXIvS2NvbmZpZzo3MjE6Y29uZmlnIE5GX0ZMT1dfVEFCTEVfUFJPQ0ZTXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTcyMi1cXHRib29sIFxcXCJTdXBwbHkgZmxvdyB0YWJsZSBzdGF0aXN0aWNzIGluIHByb2Nmc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTI6NTc6MTcuNzEyOTA1NzY0WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTc4NzUzOTYzMjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipFeGFtaW5pbmcgQnJpZGdlIENvbmZpZ3VyYXRpb24gT3B0aW9ucyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgcmlnaHQgaW4uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBjb3JlIGJyaWRnZSBjb25maWd1cmF0aW9uIG9wdGlvbnMuIEkgbmVlZCB0byBjb25maXJtIHRoZSBwcmVzZW5jZSBhbmQgc3RhdHVzIG9mIGJvdGggYENPTkZJR19CUklER0VgIGFuZCBgQ09ORklHX0JSSURHRV9WTEFOX0ZJTFRFUklOR2AuIFRoYXQncyB0aGUgYmFzZWxpbmUuIEknbSBnb2luZyB0byBoZWFkIHN0cmFpZ2h0IHRvIHRoZSBgbmV0L2JyaWRnZS9LY29uZmlnYCBmaWxlLiBJdCdzIHRoZSBsb2dpY2FsIHBsYWNlIHRvIGZpbmQgdGhlc2Ugc2V0dGluZ3MgYW5kIHRoZWlyIGRlcGVuZGVuY2llcy4gSSdtIGVzc2VudGlhbGx5IGxvb2tpbmcgZm9yIHRoZSBmb3VuZGF0aW9uYWwgZGVmaW5pdGlvbnMgYW5kIGFueSBhc3NvY2lhdGVkIGNvbmRpdGlvbmFsIGxvZ2ljIHdpdGhpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24gc3lzdGVtLiBBIHF1aWNrIGNoZWNrIGhlcmUgd2lsbCBnaXZlIG1lIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHRoZSBicmlkZ2UgZnVuY3Rpb25hbGl0eSBpcyBlbmFibGVkIGFuZCBpZiBWTEFOIGZpbHRlcmluZyBpcyBzdXBwb3J0ZWQgYXQgdGhlIGNvbmZpZ3VyYXRpb24gbGV2ZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMTY1LCJPdXRwdXRUb2tlbnMiOjE2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTM6MDA6MTYuNDY2ODcxNDhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkyNjk4MzAxOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlJJREdFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9LY29uZmlnPTIyMD1jb25maWcgTkVURklMVEVSX0FEVkFOQ0VEXFxuLS1cXG5uZXQvS2NvbmZpZy0yMzAtXFxubmV0L0tjb25maWc6MjMxOmNvbmZpZyBCUklER0VfTkVURklMVEVSXFxubmV0L0tjb25maWctMjMyLVxcdHRyaXN0YXRlIFxcXCJCcmlkZ2VkIElQL0FSUCBwYWNrZXRzIGZpbHRlcmluZ1xcXCJcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy01LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzo2OmNvbmZpZyBCUklER0VcXG5uZXQvYnJpZGdlL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiODAyLjFkIEV0aGVybmV0IEJyaWRnaW5nXFxcIlxcbi0tXFxubmV0L2JyaWRnZS9LY29uZmlnLTM1LVxcbm5ldC9icmlkZ2UvS2NvbmZpZzozNjpjb25maWcgQlJJREdFX0lHTVBfU05PT1BJTkdcXG5uZXQvYnJpZGdlL0tjb25maWctMzctXFx0Ym9vbCBcXFwiSUdNUC9NTEQgc25vb3BpbmdcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNDktXFxubmV0L2JyaWRnZS9LY29uZmlnOjUwOmNvbmZpZyBCUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL0tjb25maWctNTEtXFx0Ym9vbCBcXFwiVkxBTiBmaWx0ZXJpbmdcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL0tjb25maWctNjMtXFxubmV0L2JyaWRnZS9LY29uZmlnOjY0OmNvbmZpZyBCUklER0VfTVJQXFxubmV0L2JyaWRnZS9LY29uZmlnLTY1LVxcdGJvb2wgXFxcIk1SUCBwcm90b2NvbFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvS2NvbmZpZy03NS1cXG5uZXQvYnJpZGdlL0tjb25maWc6NzY6Y29uZmlnIEJSSURHRV9DRk1cXG5uZXQvYnJpZGdlL0tjb25maWctNzctXFx0Ym9vbCBcXFwiQ0ZNIHByb3RvY29sXFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZz0yOD1jb25maWcgTkZfQ09OTlRSQUNLX0JSSURHRVxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy00Mi0jIG9sZCBzb2Nrb3B0IGludGVyZmFjZSBhbmQgZXZhbCBsb29wXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo0Mzpjb25maWcgQlJJREdFX05GX0VCVEFCTEVTX0xFR0FDWVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctNDQtXFx0dHJpc3RhdGUgXFxcIkxlZ2FjeSBFQlRBQkxFUyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy01Mi1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjUzOm1lbnVjb25maWcgQlJJREdFX05GX0VCVEFCTEVTXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy01NC1cXHR0cmlzdGF0ZSBcXFwiRXRoZXJuZXQgQnJpZGdlIHRhYmxlcyAoZWJ0YWJsZXMpIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnPTYyPWlmIEJSSURHRV9ORl9FQlRBQkxFU1xcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy02Ni0jXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo2Nzpjb25maWcgQlJJREdFX0VCVF9CUk9VVEVcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTY4LVxcdHRyaXN0YXRlIFxcXCJlYnQ6IGJyb3V0ZSB0YWJsZSBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy03Ny1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjc4OmNvbmZpZyBCUklER0VfRUJUX1RfRklMVEVSXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy03OS1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBmaWx0ZXIgdGFibGUgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctODctXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzo4ODpjb25maWcgQlJJREdFX0VCVF9UX05BVFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctODktXFx0dHJpc3RhdGUgXFxcImVidDogbmF0IHRhYmxlIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTk5LSNcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjEwMDpjb25maWcgQlJJREdFX0VCVF84MDJfM1xcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTAxLVxcdHRyaXN0YXRlIFxcXCJlYnQ6IDgwMi4zIGZpbHRlciBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xMDYtXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoxMDc6Y29uZmlnIEJSSURHRV9FQlRfQU1PTkdcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEwOC1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBhbW9uZyBmaWx0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTE1LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTE2OmNvbmZpZyBCUklER0VfRUJUX0FSUFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTE3LVxcdHRyaXN0YXRlIFxcXCJlYnQ6IEFSUCBmaWx0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTIzLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTI0OmNvbmZpZyBCUklER0VfRUJUX0lQXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xMjUtXFx0dHJpc3RhdGUgXFxcImVidDogSVAgZmlsdGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEzMS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjEzMjpjb25maWcgQlJJREdFX0VCVF9JUDZcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTEzMy1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBJUDYgZmlsdGVyIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE0MC1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE0MTpjb25maWcgQlJJREdFX0VCVF9MSU1JVFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTQyLVxcdHRyaXN0YXRlIFxcXCJlYnQ6IGxpbWl0IG1hdGNoIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE1MC1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE1MTpjb25maWcgQlJJREdFX0VCVF9NQVJLXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0xNTItXFx0dHJpc3RhdGUgXFxcImVidDogbWFyayBmaWx0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTYwLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTYxOmNvbmZpZyBCUklER0VfRUJUX1BLVFRZUEVcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE2Mi1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBwYWNrZXQgdHlwZSBmaWx0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTcwLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTcxOmNvbmZpZyBCUklER0VfRUJUX1NUUFxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTcyLVxcdHRyaXN0YXRlIFxcXCJlYnQ6IFNUUCBmaWx0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTc4LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTc5OmNvbmZpZyBCUklER0VfRUJUX1ZMQU5cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE4MC1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiA4MDIuMVEgVkxBTiBmaWx0ZXIgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTg4LSNcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjE4OTpjb25maWcgQlJJREdFX0VCVF9BUlBSRVBMWVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTkwLVxcdHRyaXN0YXRlIFxcXCJlYnQ6IGFycCByZXBseSB0YXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMTk3LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MTk4OmNvbmZpZyBCUklER0VfRUJUX0ROQVRcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTE5OS1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBkbmF0IHRhcmdldCBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMDUtXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZzoyMDY6Y29uZmlnIEJSSURHRV9FQlRfTUFSS19UXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMDctXFx0dHJpc3RhdGUgXFxcImVidDogbWFyayB0YXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjE1LVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MjE2OmNvbmZpZyBCUklER0VfRUJUX1JFRElSRUNUXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMTctXFx0dHJpc3RhdGUgXFxcImVidDogcmVkaXJlY3QgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTIyMy1cXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjIyNDpjb25maWcgQlJJREdFX0VCVF9TTkFUXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yMjUtXFx0dHJpc3RhdGUgXFxcImVidDogc25hdCB0YXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjMzLSNcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnOjIzNDpjb25maWcgQlJJREdFX0VCVF9MT0dcXG5uZXQvYnJpZGdlL25ldGZpbHRlci9LY29uZmlnLTIzNS1cXHR0cmlzdGF0ZSBcXFwiZWJ0OiBsb2cgc3VwcG9ydFxcXCJcXG4tLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWctMjQyLVxcbm5ldC9icmlkZ2UvbmV0ZmlsdGVyL0tjb25maWc6MjQzOmNvbmZpZyBCUklER0VfRUJUX05GTE9HXFxubmV0L2JyaWRnZS9uZXRmaWx0ZXIvS2NvbmZpZy0yNDQtXFx0dHJpc3RhdGUgXFxcImVidDogbmZsb2cgc3VwcG9ydFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTM6MDA6MjAuMzkzODYxNjg3WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjIwMjA3MDYxMDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSBuZXcgZnVuY3Rpb25zLCBjb25zaWRlcmluZyB0aGUgY29udGV4dCBvZiBicmlkZ2luZyBhbmQgVkxBTnM6XG5cbioqTmV3IEJyaWRnZSBGREIgYW5kIFZMQU4gUkNVIEhlbHBlcnMqKlxuXG5BbHJpZ2h0LCBzbyBJIHNlZSB0aGVzZSBuZXcgZnVuY3Rpb25zIHBvcHBpbmcgdXA6IGBicl9mZGJfaGFzX2ZvcndhcmRpbmdfZW50cnlfcmN1YCwgYGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3VgLCBhbmQgYGJyX3ZsYW5faXNfZW5hYmxlZF9yY3VgLiBUaGV5J3JlIGFsbCBsYWJlbGVkIHdpdGggXCJyY3UsXCIgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhleSdyZSBkZXNpZ25lZCBmb3Igc2FmZSwgbG9ja2xlc3MgYWNjZXNzIHRvIGJyaWRnZSBmb3J3YXJkaW5nIGRhdGFiYXNlIChGREIpIGFuZCBWTEFOIGluZm9ybWF0aW9uIHN0cnVjdHVyZXMuIFRoZSBmYWN0IHRoYXQgdGhleSdyZSBpbiBgbmV0L2JyaWRnZS9icl9mZGIuY2AgYW5kIGBuZXQvYnJpZGdlL2JyX3ZsYW4uY2AgcmVzcGVjdGl2ZWx5IGlzIHByZXR0eSBtdWNoIGV4cGVjdGVkLCBvYnZpb3VzbHkuXG5cbmBicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1YCBhbmQgYGJyX3ZsYW5faXNfZW5hYmxlZF9yY3VgIGFyZSBpbiBgYnJfdmxhbi5jYCwgYW5kIHNvIGFyZSByZWxhdGVkIHRvIFZMQU4gZmlsdGVyaW5nLCB3aGljaCBpcyBjb21waWxlZCBpbiBvbmx5IHdoZW4gYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIGlzIGVuYWJsZWQuIEknbSBndWVzc2luZyB0aGF0IG1lYW5zIHRoZXkncmUgbGlrZWx5IGludm9sdmVkIGluIHF1ZXJ5aW5nIFZMQU4tcmVsYXRlZCBwYXJhbWV0ZXJzLCBhbmQgcGVyaGFwcyB0aGVpciBwcmVzZW5jZSBzdWdnZXN0cyBlbmhhbmNlbWVudHMgdG8gVkxBTi1hd2FyZSBicmlkZ2luZy4gUGVyaGFwcyBiZXR0ZXIgcGVyZm9ybWFuY2UgYWNjZXNzaW5nIFZMQU4gZW50cmllcy5cblxuVGhlIFJDVS1iYXNlZCBhY2Nlc3Mgc3Ryb25nbHkgaW1wbGllcyB0aGVzZSBhcmUgbGlrZWx5IGJlaW5nIHVzZWQgZnJvbSBpbnRlcnJ1cHQgY29udGV4dHMsIG9yIHBvc3NpYmx5IGluIHNjZW5hcmlvcyB3aGVyZSBjb250ZW50aW9uIGlzIGEgc2lnbmlmaWNhbnQgY29uY2Vybi4gVGhleSdyZSBjbGVhcmx5IGxvb2tpbmcgdG8gYXZvaWQgdGFraW5nIGxvY2tzIHRvIHByb3ZpZGUgaGlnaGVyIGNvbmN1cnJlbmN5LiBJdCdzIGdvb2QgdG8gc2VlIHRoaXMgbGV2ZWwgb2YgY2FyZWZ1bCBvcHRpbWl6YXRpb24uIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBleGFjdCB1c2UgY2FzZXMgYW5kIHBlcmZvcm1hbmNlIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIyMzksIk91dHB1dFRva2VucyI6MjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTM6MDQ6MDAuNjAwOTI1OTk5WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTYyNzUwMzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJyX3ZsYW4ub1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvYnJpZGdlL01ha2VmaWxlPTIxPWJyaWRnZS0kKENPTkZJR19CUklER0VfSUdNUF9TTk9PUElORykgKz0gYnJfbXVsdGljYXN0Lm8gYnJfbWRiLm8gYnJfbXVsdGljYXN0X2VodC5vXFxubmV0L2JyaWRnZS9NYWtlZmlsZS0yMi1cXG5uZXQvYnJpZGdlL01ha2VmaWxlOjIzOmJyaWRnZS0kKENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkcpICs9IGJyX3ZsYW4ubyBicl92bGFuX3R1bm5lbC5vIGJyX3ZsYW5fb3B0aW9ucy5vIGJyX21zdC5vXFxubmV0L2JyaWRnZS9NYWtlZmlsZS0yNC1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oPTE4ODI9c3RhdGljIGlubGluZSB1MTYgYnJfdmxhbl9mbGFncyhjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV92bGFuICp2LCB1MTYgcHZpZClcXG4tLVxcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4ODgtXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTg4OTovKiBicl92bGFuX29wdGlvbnMuYyAqL1xcbm5ldC9icmlkZ2UvYnJfcHJpdmF0ZS5oLTE4OTAtI2lmZGVmIENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaDoxODkxOmJvb2wgYnJfdmxhbl9vcHRzX2VxX3JhbmdlKGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnZfY3VycixcXG5uZXQvYnJpZGdlL2JyX3ByaXZhdGUuaC0xODkyLVxcdFxcdFxcdCAgIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnJhbmdlX2VuZCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTg5Mzpib29sIGJyX3ZsYW5fb3B0c19maWxsKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfYnJpZGdlX3ZsYW4gKnYsXFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTg5NC1cXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqcCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmg6MTg5NTpzaXplX3QgYnJfdmxhbl9vcHRzX25sX3NpemUodm9pZCk7XFxubmV0L2JyaWRnZS9icl9wcml2YXRlLmgtMTg5Ni1pbnQgYnJfdmxhbl9wcm9jZXNzX29wdGlvbnMoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2UgKmJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmM9MTkwMz1zdGF0aWMgYm9vbCBicl92bGFuX2ZpbGxfdmlkcyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MTYgdmlkLCB1MTYgdmlkX3JhbmdlLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTkzMS1cXHRpZiAodl9vcHRzKSB7XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MTkzMjpcXHRcXHRpZiAoIWJyX3ZsYW5fb3B0c19maWxsKHNrYiwgdl9vcHRzLCBwKSlcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0xOTMzLVxcdFxcdFxcdGdvdG8gb3V0X2VycjtcXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbi5jPTE5NDg9c3RhdGljIHNpemVfdCBydG5sX3ZsYW5fbmxtc2dfc2l6ZSh2b2lkKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTk1My1cXHRcXHQrIG5sYV90b3RhbF9zaXplKHNpemVvZihzdHJ1Y3QgYnJpZGdlX3ZsYW5faW5mbykpIC8qIEJSSURHRV9WTEFOREJfRU5UUllfSU5GTyAqL1xcbm5ldC9icmlkZ2UvYnJfdmxhbi5jOjE5NTQ6XFx0XFx0KyBicl92bGFuX29wdHNfbmxfc2l6ZSgpOyAvKiBicmlkZ2UgdmxhbiBvcHRpb25zICovXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMTk1NS19XFxuLS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYz0yMDI5PWJvb2wgYnJfdmxhbl9jYW5fZW50ZXJfcmFuZ2UoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdl9jdXJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuLmMtMjAzMy1cXHQgICAgICAgcmFuZ2VfZW5kLVxcdTAwM2VmbGFncyA9PSB2X2N1cnItXFx1MDAzZWZsYWdzIFxcdTAwMjZcXHUwMDI2XFxubmV0L2JyaWRnZS9icl92bGFuLmM6MjAzNDpcXHQgICAgICAgYnJfdmxhbl9vcHRzX2VxX3JhbmdlKHZfY3VyciwgcmFuZ2VfZW5kKTtcXG5uZXQvYnJpZGdlL2JyX3ZsYW4uYy0yMDM1LX1cXG4tLVxcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM9MzI9c3RhdGljIGJvb2wgX192bGFuX3R1bl9jYW5fZW50ZXJfcmFuZ2UoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdl9jdXJyLFxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYy0zOS0vKiBjaGVjayBpZiB0aGUgb3B0aW9ucycgc3RhdGUgb2Ygdl9jdXJyIGFsbG93IGl0IHRvIGVudGVyIHRoZSByYW5nZSAqL1xcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmM6NDA6Ym9vbCBicl92bGFuX29wdHNfZXFfcmFuZ2UoY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdl9jdXJyLFxcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtNDEtXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqcmFuZ2VfZW5kKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYy03MS1cXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jOjcyOmJvb2wgYnJfdmxhbl9vcHRzX2ZpbGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9icmlkZ2VfdmxhbiAqdixcXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jLTczLVxcdFxcdCAgICAgICBjb25zdCBzdHJ1Y3QgbmV0X2JyaWRnZV9wb3J0ICpwKVxcbi0tXFxubmV0L2JyaWRnZS9icl92bGFuX29wdGlvbnMuYy05Ny1cXG5uZXQvYnJpZGdlL2JyX3ZsYW5fb3B0aW9ucy5jOjk4OnNpemVfdCBicl92bGFuX29wdHNfbmxfc2l6ZSh2b2lkKVxcbm5ldC9icmlkZ2UvYnJfdmxhbl9vcHRpb25zLmMtOTkte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMzowNDowMy4xNjM2ODMxNDlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Nzc1OTM0NjkzMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyBmb3IgTmV0d29yayBGbG93IFRhYmxlIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgbmVjZXNzYXJ5IGtlcm5lbCBjb25maWd1cmF0aW9ucyB0byBzdXBwb3J0IHRoaXMgZmxvdyB0YWJsZSBpbXBsZW1lbnRhdGlvbiwgc3BlY2lmaWNhbGx5IGNvbmNlcm5pbmcgYnJpZGdpbmcgYW5kIFZMQU4gZmlsdGVyaW5nLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfQlJJREdFX1ZMQU5fRklMVEVSSU5HYCBpcyBhIGtleSByZXF1aXJlbWVudCwgb2J2aW91c2x5LiBBbmQsIG9mIGNvdXJzZSwgYENPTkZJR19ORl9GTE9XX1RBQkxFYCBpcyBlc3NlbnRpYWwuIFNpbmNlIGBORl9GTE9XX1RBQkxFYCBpbXBsaWVzIGBORVRGSUxURVJgLCBJIGRvbid0IG5lZWQgdG8gZXhwbGljaXRseSBzdGF0ZSBgQ09ORklHX05FVEZJTFRFUmAsIGl0J3MgY292ZXJlZC4gTm93LCB0aGUgZGVwZW5kZW5jeSB0cmVlIHNlZW1zIHRvIGJyYW5jaDogYENPTkZJR19CUklER0VfVkxBTl9GSUxURVJJTkdgIG5lZWRzIGBDT05GSUdfQlJJREdFYC4gR290IGl0LiBUaGF0IHNlZW1zIGxpa2UgYSBzb2xpZCBzdGFydGluZyBwb2ludC5cblxuTmV4dCwgSSBuZWVkIHRvIGNoZWNrIHRoZSByZWxldmFudCBzeW1ib2xzIHdpdGhpbiB0aGUga2VybmVsLiBMZXQncyBzZWUuLi4gSSd2ZSBpZGVudGlmaWVkIHNldmVyYWwga2V5IGZ1bmN0aW9uIG5hbWVzOiBgYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdWAsIGBicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1YCwgYGJyX3ZsYW5faXNfZW5hYmxlZF9yY3VgLCBgX19kZXZfZmlsbF9mb3J3YXJkX3BhdGhgLCBgbmZ0X2Zsb3dfcm91dGVgLCBgbmZ0X2Rldl9mb3J3YXJkX3BhdGhgLCBgbmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmdgLCBgbmZ0X2Zsb3dfcm91dGVfcm91dGluZ2AsIGBuZnRfZmxvd19vZmZsb2FkX2lzX2JyaWRnaW5nYCwgYG5mdF9icl92bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aGAsIGFuZCBgbmZ0X2ZpbGxfdmxhbl9wYXNzdGhyb3VnaF9pbmZvYC4gVGhlc2Ugd2lsbCBnaXZlIG1lIGEgZ29vZCBwaWN0dXJlIG9mIHRoZSBjb2RlIHBhdGguXG5cbkFscmlnaHQsIEkgbmVlZCB0byBzZWUgd2hpY2ggb2YgdGhlc2UgYXJlIGV4cG9ydGVkLiBUaGlzIHRlbGxzIG1lIHdoYXQncyBhdmFpbGFibGUgdG8gbW9kdWxlcyBhbmQgb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gT2theSwgc28gYG5mdF9mbG93X3JvdXRlX2JyaWRnaW5nYCBpcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBgbmZ0X2Zsb3dfcm91dGVgIGFuZCBgX19kZXZfZmlsbF9mb3J3YXJkX3BhdGhgIGFyZSBleHBvcnRlZC4gQW5kIHRoZSBgYnJfYCBwcmVmaXhlZCBmdW5jdGlvbnMgYXJlIGFsc28gZXhwb3J0ZWQuIFRoaXMgaXMgZ29vZCB0byBrbm93LlxuXG5MZXQncyBkbyBhIHF1aWNrLCBjbGVhbiBsaXN0IG9mIHRoZSByZWxldmFudCBzeW1ib2xzLCBqdXN0IHRvIGtlZXAgdGhpbmdzIG9yZ2FuaXplZDpcbiogICBgYnJfZmRiX2hhc19mb3J3YXJkaW5nX2VudHJ5X3JjdWBcbiogICBgYnJfdmxhbl9nZXRfb2ZmbG9hZF9pbmZvX3JjdWBcbiogICBgYnJfdmxhbl9pc19lbmFibGVkX3JjdWBcbiogICBgX19kZXZfZmlsbF9mb3J3YXJkX3BhdGhgXG4qICAgYG5mdF9mbG93X3JvdXRlYFxuKiAgIGBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZ2BcbiogICBgbmZ0X2Zsb3dfb2ZmbG9hZF9pc19icmlkZ2luZ2BcbiogICBgbmZ0X2JyX3ZsYW5fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYFxuKiAgIGBuZnRfZmlsbF92bGFuX3Bhc3N0aHJvdWdoX2luZm9gXG5cbkp1c3QgYSBxdWljayBkb3VibGUtY2hlY2sgb24gYG5mdF9mbG93X3JvdXRlX2JyaWRnaW5nYCB0byBtYWtlIHN1cmUgSSBoYXZlIHRoZSBleGFjdCBuYW1lLiBZZXAsIHRoZSBkZWZpbml0aW9uIGluIHRoZSBkaWZmIG1hdGNoZXMgd2hhdCBJIGhhdmUgaW4gbXkgbm90ZXMuIEkgYWx3YXlzIGRvdWJsZS1jaGVjay5cblxuYGBgY1xuc3RhdGljIGludCBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZyhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcblx0XHRcdFx0ICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxuXHRcdFx0XHQgICBzdHJ1Y3QgbmZfZmxvd19yb3V0ZSAqcm91dGUsXG5cdFx0XHRcdCAgIGVudW0gaXBfY29ubnRyYWNrX2RpciBkaXIsXG5cdFx0XHRcdCAgIHN0cnVjdCBuZnRfZmxvd3RhYmxlICpmdClcbmBgYFxuXG5Ob3csIGxldCBtZSBtYWtlIHN1cmUgSSBkaWRuJ3QgbWlzcyBhbnl0aGluZy4gU28gSSBuZWVkIGBORl9GTE9XX1RBQkxFYCwgYEJSSURHRWAsIGFuZCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gSSBzaG91bGQgYWxzbyBkb3VibGUgY2hlY2sgaWYgYG5mdF9mbG93X3JvdXRlYCBoYXMgYW55IG90aGVyIGhpZGRlbiBkZXBlbmRlbmNpZXMuIEknbGwgbmVlZCB0byBkaWcgYSBsaXR0bGUgZGVlcGVyIG9uIHRoYXQgcG9pbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzOTAzLCJPdXRwdXRUb2tlbnMiOjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEzOjA1OjIwLjc1NzE1NjQ4MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTEzOTQ3ODA0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZnRfZmxvd19yb3V0ZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL25ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZS5oPTI0Nj1zdHJ1Y3QgbmZ0X3BrdGluZm87XFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaDoyNDc6aW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxuaW5jbHVkZS9uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGUuaC0yNDgtXFx0XFx0ICAgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYz0zMTg9c3RhdGljIGludCBuZnRfZGV2X2ZvcndhcmRfcGF0aChjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtMzkzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6Mzk0OnN0YXRpYyBpbnQgbmZ0X2Zsb3dfcm91dGVfcm91dGluZyhjb25zdCBzdHJ1Y3QgbmZ0X3BrdGluZm8gKnBrdCxcXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jLTM5NS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBuZl9jb25uICpjdCxcXG4tLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNDUzLVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6NDU0OnN0YXRpYyBpbnQgbmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmcoY29uc3Qgc3RydWN0IG5mdF9wa3RpbmZvICpwa3QsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy00NTUtXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IG5mX2Nvbm4gKmN0LFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy01MjEtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzo1MjI6aW50IG5mdF9mbG93X3JvdXRlKGNvbnN0IHN0cnVjdCBuZnRfcGt0aW5mbyAqcGt0LCBjb25zdCBzdHJ1Y3QgbmZfY29ubiAqY3QsXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy01MjMtXFx0XFx0ICAgc3RydWN0IG5mX2Zsb3dfcm91dGUgKnJvdXRlLCBlbnVtIGlwX2Nvbm50cmFja19kaXIgZGlyLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy01MjYtXFx0aWYgKG5mdF9mbG93X29mZmxvYWRfaXNfYnJpZGdpbmcocGt0LVxcdTAwM2Vza2IpKVxcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmM6NTI3OlxcdFxcdHJldHVybiBuZnRfZmxvd19yb3V0ZV9icmlkZ2luZyhwa3QsIGN0LCByb3V0ZSwgZGlyLCBmdCk7XFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYy01MjgtXFxubmV0L25ldGZpbHRlci9uZl9mbG93X3RhYmxlX3BhdGguYzo1Mjk6XFx0cmV0dXJuIG5mdF9mbG93X3JvdXRlX3JvdXRpbmcocGt0LCBjdCwgcm91dGUsIGRpciwgZnQpO1xcbm5ldC9uZXRmaWx0ZXIvbmZfZmxvd190YWJsZV9wYXRoLmMtNTMwLX1cXG5uZXQvbmV0ZmlsdGVyL25mX2Zsb3dfdGFibGVfcGF0aC5jOjUzMTpFWFBPUlRfU1lNQk9MX0dQTChuZnRfZmxvd19yb3V0ZSk7XFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz01MD1zdGF0aWMgdm9pZCBuZnRfZmxvd19vZmZsb2FkX2V2YWwoY29uc3Qgc3RydWN0IG5mdF9leHByICpleHByLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMTA4LVxcdGRpciA9IENUSU5GTzJESVIoY3RpbmZvKTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoxMDk6XFx0aWYgKG5mdF9mbG93X3JvdXRlKHBrdCwgY3QsIFxcdTAwMjZyb3V0ZSwgZGlyLCBwcml2LVxcdTAwM2VmbG93dGFibGUpIFxcdTAwM2MgMClcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0xMTAtXFx0XFx0Z290byBlcnJfZmxvd19yb3V0ZTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTM6MDU6MjUuODk2NjQzNzAxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyMTMwMTE1NjExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBPZmZsb2FkIENvZGUqKlxuXG5Pa2F5LCBzbyBgbmZ0X2Zsb3dfb2ZmbG9hZC5jYCBpcyBjYWxsaW5nIGBuZnRfZmxvd19yb3V0ZWAuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIGFuZCwgc3BlY2lmaWNhbGx5LCBob3cgdGhlIG9mZmxvYWQgZnVuY3Rpb25hbGl0eSBpcyBiZWluZyB0cmlnZ2VyZWQuIE15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHNjcnV0aW5pemUgdGhlIGNvbmZpZ3VyYXRpb24gcmVsYXRlZCB0byBgbmZ0X2Zsb3dfb2ZmbG9hZC5vYC4gVGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyB3aWxsIGxpa2VseSBiZSBkZWZpbmVkLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIG9mZmxvYWQgaXMgZW5hYmxlZCwgd2hhdCBjcml0ZXJpYSBhcmUgdXNlZCBmb3Igcm91dGluZywgYW5kIGFueSByZWxldmFudCBwb2xpY3kgc2V0dGluZ3MuIEkgYW50aWNpcGF0ZSBmaW5kaW5nIGtleSBwYXJhbWV0ZXJzIGFuZCBwb3RlbnRpYWxseSBzb21lIG9wdGltaXphdGlvbnMgb3IgbGltaXRhdGlvbnMgZGljdGF0ZWQgYnkgdGhlIGNvbmZpZ3VyYXRpb24uIFRoaXMgY291bGQgaW52b2x2ZSBsb29raW5nIGF0IHZhcmlvdXMgbmV0ZmlsdGVyIG9wdGlvbnMgYW5kIGFueSByZWxhdGVkIGtjb25maWcgc3ltYm9scy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTYwOTMsIk91dHB1dFRva2VucyI6MjIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMzoxMDo0Ny4xOTc4MDMxNTlaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyMjk0MDMxODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmZ0X2Zsb3dfb2ZmbG9hZC5vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvTWFrZWZpbGU9MTEyPW9iai0kKENPTkZJR19ORlRfQ1QpXFx0XFx0Kz0gbmZ0X2N0Lm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlOjExMzpvYmotJChDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRClcXHQrPSBuZnRfZmxvd19vZmZsb2FkLm9cXG5uZXQvbmV0ZmlsdGVyL01ha2VmaWxlLTExNC1vYmotJChDT05GSUdfTkZUX0xJTUlUKVxcdFxcdCs9IG5mdF9saW1pdC5vXFxuLS1cXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYz0yMTc9c3RhdGljIHN0cnVjdCBuZnRfZXhwcl90eXBlIG5mdF9mbG93X29mZmxvYWRfdHlwZTtcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYzoyMTg6c3RhdGljIGNvbnN0IHN0cnVjdCBuZnRfZXhwcl9vcHMgbmZ0X2Zsb3dfb2ZmbG9hZF9vcHMgPSB7XFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjE5LVxcdC50eXBlXFx0XFx0PSBcXHUwMDI2bmZ0X2Zsb3dfb2ZmbG9hZF90eXBlLFxcbi0tXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmM9MjMwPXN0YXRpYyBzdHJ1Y3QgbmZ0X2V4cHJfdHlwZSBuZnRfZmxvd19vZmZsb2FkX3R5cGUgX19yZWFkX21vc3RseSA9IHtcXG5uZXQvbmV0ZmlsdGVyL25mdF9mbG93X29mZmxvYWQuYy0yMzEtXFx0Lm5hbWVcXHRcXHQ9IFxcXCJmbG93X29mZmxvYWRcXFwiLFxcbm5ldC9uZXRmaWx0ZXIvbmZ0X2Zsb3dfb2ZmbG9hZC5jOjIzMjpcXHQub3BzXFx0XFx0PSBcXHUwMDI2bmZ0X2Zsb3dfb2ZmbG9hZF9vcHMsXFxubmV0L25ldGZpbHRlci9uZnRfZmxvd19vZmZsb2FkLmMtMjMzLVxcdC5wb2xpY3lcXHRcXHQ9IG5mdF9mbG93X29mZmxvYWRfcG9saWN5LFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMzoxMDo1MS40MjcyMTU1NjVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTc3NDU1MDEzMTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4YW1pbmluZyBgQ09ORklHX05GVF9GTE9XX09GRkxPQURgJ3MgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgc28gdGhlIGN1cnJlbnQgaXNzdWUgaXMgcG9pbnRpbmcgdG93YXJkcyBhIHBvdGVudGlhbCBkZXBlbmRlbmNlIG9uIGBDT05GSUdfTkZUX0ZMT1dfT0ZGTE9BRGAuIFRoaXMgaXNuJ3QgZW50aXJlbHkgdW5leHBlY3RlZCBnaXZlbiB0aGUgY29udGV4dCwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoaXMgYXNzdW1wdGlvbi4gTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBkcmlsbCBpbnRvIHRoZSBgS2NvbmZpZ2AgZmlsZXMgYW5kIHZlcmlmeSB0aGUgcHJlY2lzZSByZWxhdGlvbnNoaXBzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpZiBgQ09ORklHX05GVF9GTE9XX09GRkxPQURgIGlzIGEgZGlyZWN0IGRlcGVuZGVuY3ksIGFuIGltcGxpY2l0IHJlcXVpcmVtZW50LCBvciBtZXJlbHkgYW4gb3B0aW1pemF0aW9uIHRoYXQncyAqc3Ryb25nbHkqIHJlY29tbWVuZGVkIGluIGNvbmp1bmN0aW9uIHdpdGggdGhlIGN1cnJlbnQgdGFzay4gSSdsbCBuZWVkIHRvIHBheSBjbG9zZSBhdHRlbnRpb24gdG8gdGhlIGNvbmRpdGlvbmFscywgZGVmYXVsdCB2YWx1ZXMsIGFuZCBhbnkgZXhwbGljaXQgYHNlbGVjdGAgc3RhdGVtZW50cyB0aGF0IG1pZ2h0IGJlIHByZXNlbnQuIE15IGdvYWwgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgc2V0dGluZyBpcyAqc3RyaWN0bHkqIG5lY2Vzc2FyeSwgb3IgaWYgdGhlcmUncyBzb21lIHdpZ2dsZSByb29tIHRoYXQgSSBuZWVkIHRvIGludmVzdGlnYXRlLiBVbHRpbWF0ZWx5LCB0aGUgZ29hbCBpcyB0byBmdWxseSBkZWZpbmUgdGhlIGNvbnN0cmFpbnRzIG9mIHRoZSBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2NjY3LCJPdXRwdXRUb2tlbnMiOjIxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTM6MTE6NDkuMTcyNzE5NTg5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTMzNzExMTU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBORlRfRkxPV19PRkZMT0FEXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9uZXRmaWx0ZXIvS2NvbmZpZz00OTg9Y29uZmlnIE5GVF9FWFRIRFJfRENDUFxcbi0tXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwMy1cXG5uZXQvbmV0ZmlsdGVyL0tjb25maWc6NTA0OmNvbmZpZyBORlRfRkxPV19PRkZMT0FEXFxubmV0L25ldGZpbHRlci9LY29uZmlnLTUwNS1cXHRkZXBlbmRzIG9uIE5GX0NPTk5UUkFDSyBcXHUwMDI2XFx1MDAyNiBORl9GTE9XX1RBQkxFXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEzOjExOjUxLjcwNjQzODY1N1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMzAwNTkyMDI3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBORlQgRmxvdyBPZmZsb2FkaW5nIGFuZCBCcmlkZ2luZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSB1bmRlcnN0YW5kaW5nIGlzIHRoYXQgYE5GVF9GTE9XX09GRkxPQURgIGlzIHRoZSBjcml0aWNhbCBjb25maWcgdGhhdCBhY3RpdmF0ZXMgdGhlIGZsb3cgb2ZmbG9hZCBmdW5jdGlvbmFsaXR5IHdpdGhpbiBuZnRhYmxlcy4gRXNzZW50aWFsbHksIGl0J3MgdGhlIG9uIHN3aXRjaCBmb3IgdGhpcyBjYXBhYmlsaXR5LCBhbmQsIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXQgcmVsaWVzIG9uIGNhbGxpbmcgYG5mdF9mbG93X3JvdXRlYC5cblxuTGV0J3MgZG8gYSBxdWljayByZWNhcCBvZiB0aGUgY29uZmlncyB3ZSdyZSBjb25jZXJuZWQgd2l0aCBoZXJlOiBgTkZfRkxPV19UQUJMRWAsIGBORlRfRkxPV19PRkZMT0FEYCwgdGhlIGBCUklER0VgIG9wdGlvbnMsIGFuZCBgQlJJREdFX1ZMQU5fRklMVEVSSU5HYC4gSSBrbm93IHRoZXJlIGFyZSBsaWtlbHkgaW1wbGljYXRpb25zIGFuZCBkZXBlbmRlbmNpZXMsIHNvIGxldCdzIHNlZSBpZiB3ZSBtaXNzZWQgYW55dGhpbmcuXG5cblJpZ2h0LCBJJ20gbm90aW5nIHRoYXQgYENPTkZJR19ORl9DT05OVFJBQ0tgIGFuZCBgQ09ORklHX05FVEZJTFRFUmAgYXJlIGF1dG9tYXRpY2FsbHkgaW1wbGllZCBieSB0aGUgYE5GVF9GTE9XX09GRkxPQURgIHNldHRpbmcuIEdvb2QsIHRoYXQgaGVscHMgY2xhcmlmeSB0aGUgb3ZlcmFsbCBwaWN0dXJlLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIGFuZCBzeW1ib2xzIHRoYXQgYXJlIHJlbGV2YW50IHRvIHRoaXMgcHJvY2Vzcy4gSSdtIGZvY3VzaW5nIG9uIHRoZXNlIGZvciBkZWVwZXIgYW5hbHlzaXM6XG4qICAgYGJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3VgXG4qICAgYGJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3VgXG4qICAgYGJyX3ZsYW5faXNfZW5hYmxlZF9yY3VgXG4qICAgYF9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoYFxuKiAgIGBuZnRfZmxvd19yb3V0ZWBcbiogICBgbmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmdgXG4qICAgYG5mdF9mbG93X29mZmxvYWRfaXNfYnJpZGdpbmdgXG4qICAgYG5mdF9icl92bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aGBcbiogICBgbmZ0X2ZpbGxfdmxhbl9wYXNzdGhyb3VnaF9pbmZvYFxuXG5JJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwMjUsIk91dHB1dFRva2VucyI6MjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEzOjEyOjE0LjcxMjM2MjAzOVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2MjU3Mzg1NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTkZfRkxPV19UQUJMRVwiLFxuICAgIFwiTkZUX0ZMT1dfT0ZGTE9BRFwiLFxuICAgIFwiQlJJREdFXCIsXG4gICAgXCJCUklER0VfVkxBTl9GSUxURVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicl9mZGJfaGFzX2ZvcndhcmRpbmdfZW50cnlfcmN1XCIsXG4gICAgXCJicl92bGFuX2dldF9vZmZsb2FkX2luZm9fcmN1XCIsXG4gICAgXCJicl92bGFuX2lzX2VuYWJsZWRfcmN1XCIsXG4gICAgXCJfX2Rldl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwibmZ0X2Zsb3dfcm91dGVcIixcbiAgICBcIm5mdF9mbG93X3JvdXRlX2JyaWRnaW5nXCIsXG4gICAgXCJuZnRfZmxvd19vZmZsb2FkX2lzX2JyaWRnaW5nXCIsXG4gICAgXCJuZnRfYnJfdmxhbl9kZXZfZmlsbF9mb3J3YXJkX3BhdGhcIixcbiAgICBcIm5mdF9maWxsX3ZsYW5fcGFzc3Rocm91Z2hfaW5mb1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgZmxvdyBvZmZsb2FkIG9mIGJyaWRnZWQgdHJhZmZpYy4gSXQgaW50cm9kdWNlcyBuZXcgZnVuY3Rpb25zIHRvIGNoZWNrIGJyaWRnZSBGREIgZW50cmllcyBhbmQgVkxBTiBpbmZvcm1hdGlvbiBmb3IgZmxvdyBvZmZsb2FkLCBhbmQgbW9kaWZpZXMgdGhlIG5ldGZpbHRlciBmbG93IHRhYmxlIHBhdGggdG8gaGFuZGxlIGJyaWRnZWQgdHJhZmZpYy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIG5ldHdvcmtpbmcgYW5kIG5ldGZpbHRlciBzdWJzeXN0ZW1zIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJORl9GTE9XX1RBQkxFXCIsXG4gICAgXCJORlRfRkxPV19PRkZMT0FEXCIsXG4gICAgXCJCUklER0VcIixcbiAgICBcIkJSSURHRV9WTEFOX0ZJTFRFUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJyX2ZkYl9oYXNfZm9yd2FyZGluZ19lbnRyeV9yY3VcIixcbiAgICBcImJyX3ZsYW5fZ2V0X29mZmxvYWRfaW5mb19yY3VcIixcbiAgICBcImJyX3ZsYW5faXNfZW5hYmxlZF9yY3VcIixcbiAgICBcIl9fZGV2X2ZpbGxfZm9yd2FyZF9wYXRoXCIsXG4gICAgXCJuZnRfZmxvd19yb3V0ZVwiLFxuICAgIFwibmZ0X2Zsb3dfcm91dGVfYnJpZGdpbmdcIixcbiAgICBcIm5mdF9mbG93X29mZmxvYWRfaXNfYnJpZGdpbmdcIixcbiAgICBcIm5mdF9icl92bGFuX2Rldl9maWxsX2ZvcndhcmRfcGF0aFwiLFxuICAgIFwibmZ0X2ZpbGxfdmxhbl9wYXNzdGhyb3VnaF9pbmZvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0IGZvciBmbG93IG9mZmxvYWQgb2YgYnJpZGdlZCB0cmFmZmljLiBJdCBpbnRyb2R1Y2VzIG5ldyBmdW5jdGlvbnMgdG8gY2hlY2sgYnJpZGdlIEZEQiBlbnRyaWVzIGFuZCBWTEFOIGluZm9ybWF0aW9uIGZvciBmbG93IG9mZmxvYWQsIGFuZCBtb2RpZmllcyB0aGUgbmV0ZmlsdGVyIGZsb3cgdGFibGUgcGF0aCB0byBoYW5kbGUgYnJpZGdlZCB0cmFmZmljLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgbmV0d29ya2luZyBhbmQgbmV0ZmlsdGVyIHN1YnN5c3RlbXMgdGhhdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowhjj7w[1] Phase: Succeeded StartedAt: 2026-06-29 13:12:26 +0000 UTC FinishedAt: 2026-06-29 13:12:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-29 13:12:26 +0000 UTC FinishedAt: 2026-06-29 13:12:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[2] Phase: Succeeded StartedAt: 2026-06-29 13:12:26 +0000 UTC FinishedAt: 2026-06-29 17:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-29 13:12:26 +0000 UTC FinishedAt: 2026-06-29 17:21:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-29 13:12:26 +0000 UTC FinishedAt: 2026-06-29 13:12:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-29 13:12:26 +0000 UTC FinishedAt: 2026-06-29 13:12:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},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-workflowhjj7w/series-workflowhjj7w-convert-artifact-1421147063/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-29 13:12:48 +0000 UTC FinishedAt: 2026-06-29 13:38:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-29 13:12:48 +0000 UTC FinishedAt: 2026-06-29 13:38:41 +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:*4ff385c8-1d6c-407d-a1e9-8411323610d5,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-workflowhjj7w/series-workflowhjj7w-convert-artifact-1421147063/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": "6296c901-f344-49f4-abb3-ebf82e833307", "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-workflowhjj7w/series-workflowhjj7w-build-action-2111462157/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-29 13:12:48 +0000 UTC FinishedAt: 2026-06-29 13:36:17 +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:*4ff385c8-1d6c-407d-a1e9-8411323610d5,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-workflowhjj7w/series-workflowhjj7w-convert-artifact-1421147063/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": "6296c901-f344-49f4-abb3-ebf82e833307", "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-workflowhjj7w/series-workflowhjj7w-build-action-2111462157/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-29 13:38:41 +0000 UTC FinishedAt: 2026-06-29 13:38:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-29 13:38:41 +0000 UTC FinishedAt: 2026-06-29 13:38:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-29 13:38:41 +0000 UTC FinishedAt: 2026-06-29 13:39:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-29 13:38:41 +0000 UTC FinishedAt: 2026-06-29 13:39:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},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-workflowhjj7w/series-workflowhjj7w-convert-artifact-2601911526/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-29 13:39:20 +0000 UTC FinishedAt: 2026-06-29 13:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-29 13:39:20 +0000 UTC FinishedAt: 2026-06-29 13:41:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6296c901-f344-49f4-abb3-ebf82e833307,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-workflowhjj7w/series-workflowhjj7w-build-action-2111462157/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-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-29 13:41:36 +0000 UTC FinishedAt: 2026-06-29 13:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-29 13:41:36 +0000 UTC FinishedAt: 2026-06-29 13:41:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-29 13:41:36 +0000 UTC FinishedAt: 2026-06-29 14:17:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-29 13:41:36 +0000 UTC FinishedAt: 2026-06-29 14:17:50 +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:*4ff385c8-1d6c-407d-a1e9-8411323610d5,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-workflowhjj7w/series-workflowhjj7w-convert-artifact-2601911526/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": "84900db6-437a-4bf5-960c-36c11e56df65", "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-workflowhjj7w/series-workflowhjj7w-build-action-2347678378/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-29 13:41:36 +0000 UTC FinishedAt: 2026-06-29 14:17:40 +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:*4ff385c8-1d6c-407d-a1e9-8411323610d5,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-workflowhjj7w/series-workflowhjj7w-convert-artifact-2601911526/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": "84900db6-437a-4bf5-960c-36c11e56df65", "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-workflowhjj7w/series-workflowhjj7w-build-action-2347678378/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-29 14:17:50 +0000 UTC FinishedAt: 2026-06-29 14:17:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-29 14:17:50 +0000 UTC FinishedAt: 2026-06-29 14:17:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-29 14:17:50 +0000 UTC FinishedAt: 2026-06-29 14:20:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-29 14:17:50 +0000 UTC FinishedAt: 2026-06-29 14:19:53 +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:*84900db6-437a-4bf5-960c-36c11e56df65,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-workflowhjj7w/series-workflowhjj7w-build-action-2347678378/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-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-29 14:20:03 +0000 UTC FinishedAt: 2026-06-29 17:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-29 14:20:03 +0000 UTC FinishedAt: 2026-06-29 17:21:32 +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":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"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:*6296c901-f344-49f4-abb3-ebf82e833307,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*84900db6-437a-4bf5-960c-36c11e56df65,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-workflowhjj7w/series-workflowhjj7w-build-action-2111462157/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-workflowhjj7w/series-workflowhjj7w-build-action-2347678378/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-29 14:20:03 +0000 UTC FinishedAt: 2026-06-29 14:20:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-29 14:20:03 +0000 UTC FinishedAt: 2026-06-29 14:20:09 +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":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"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-workflowhjj7w/series-workflowhjj7w-convert-artifact-3181229099/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-29 14:20:03 +0000 UTC FinishedAt: 2026-06-29 14:20:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-29 14:20:03 +0000 UTC FinishedAt: 2026-06-29 14:20:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-29 14:20:03 +0000 UTC FinishedAt: 2026-06-29 14:20:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-29 14:20:13 +0000 UTC FinishedAt: 2026-06-29 17:21:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhjj7w[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["br_fdb_has_forwarding_entry_rcu","br_vlan_get_offload_info_rcu","br_vlan_is_enabled_rcu","__dev_fill_forward_path","nft_flow_route","nft_flow_route_bridging","nft_flow_offload_is_bridging","nft_br_vlan_dev_fill_forward_path","nft_fill_vlan_passthrough_info"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"805185b7c7a1069e407b6f7b3bc98e44d415f484","config_name":"upstream-apparmor-kasan.config","enable_configs":["NF_FLOW_TABLE","NFT_FLOW_OFFLOAD","BRIDGE","BRIDGE_VLAN_FILTERING"],"series_id":"3cda7c22-8be4-4de2-adb2-7d4318f01ed4","tree_name":"nf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netfilter/nf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-29 14:20:13 +0000 UTC FinishedAt: 2026-06-29 17:21:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*6296c901-f344-49f4-abb3-ebf82e833307,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*84900db6-437a-4bf5-960c-36c11e56df65,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-workflowhjj7w/series-workflowhjj7w-build-action-2111462157/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-workflowhjj7w/series-workflowhjj7w-build-action-2347678378/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-workflowhjj7w/series-workflowhjj7w-convert-artifact-3181229099/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,}