Name: series-workflow58rbr Phase: Succeeded StartedAt: 2026-07-07 23:30:24 +0000 UTC FinishedAt: 2026-07-08 04:51:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[0] Phase: Succeeded StartedAt: 2026-07-07 23:30:24 +0000 UTC FinishedAt: 2026-07-07 23:54:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[0].run-triage Phase: Succeeded StartedAt: 2026-07-07 23:30:24 +0000 UTC FinishedAt: 2026-07-07 23:54:28 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "4a13f31a92f35161b499bf29638336885259da78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GENEVE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "4a13f31a92f35161b499bf29638336885259da78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GENEVE" ], "series_id": "6ea35341-11eb-4020-aa27-3b79bf21b9af" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "geneve_changelink", "geneve_configure", "geneve_fill_info", "geneve_config_alloc", "geneve_free_dev" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dFTkVWRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbmV2ZV9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2dlbmV2ZV9jb25maWd1cmUmIzM0OywKICAgICYjMzQ7Z2VuZXZlX2ZpbGxfaW5mbyYjMzQ7LAogICAgJiMzNDtnZW5ldmVfY29uZmlnX2FsbG9jJiMzNDssCiAgICAmIzM0O2dlbmV2ZV9mcmVlX2RldiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEdFTkVWRSBkcml2ZXIgdG8gdXNlIFJDVSBmb3IgaXRzIGNvbmZpZ3VyYXRpb24gKGBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZ2ApLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIHN5bmNocm9ub3VzIGBnZW5ldmVfcXVpZXNjZWAvYGdlbmV2ZV91bnF1aWVzY2VgIG1lY2hhbmlzbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBob3cgY29uZmlndXJhdGlvbiB1cGRhdGVzIGFyZSBoYW5kbGVkIGNvbmN1cnJlbnRseSB3aXRoIHRoZSBkYXRhIHBhdGguIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIGNvbnRyb2wgcGF0aCBmdW5jdGlvbnMgdGhhdCBhbGxvY2F0ZSwgdXBkYXRlLCBhbmQgZnJlZSB0aGUgY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNhMWQwOTQxZGJjOTBkNjM5YTkyMmNhZDYwMjE1YjkzNzc1Yjk1NGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDIzOjUzOjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dlbmV2ZS5jIGIvZHJpdmVycy9uZXQvZ2VuZXZlLmNcbmluZGV4IDM5NmUxYTExM2NkNDllLi4xN2JkMzU0M2Q1ODdhOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2dlbmV2ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9nZW5ldmUuY1xuQEAgLTgyLDYgJiM0Mzs4Miw3IEBAIHN0cnVjdCBnZW5ldmVfY29uZmlnIHtcbiBcdHUxNlx0XHRcdHBvcnRfbWluO1xuIFx0dTE2XHRcdFx0cG9ydF9tYXg7XG4gXG4mIzQzO1x0c3RydWN0IHJjdV9oZWFkXHRcdHJjdTtcbiBcdC8qIE11c3QgYmUgbGFzdCAtLWVuZHMgaW4gYSBmbGV4aWJsZS1hcnJheSBtZW1iZXIuICovXG4gXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm9cdGluZm87XG4gfTtcbkBAIC0xMDAsNyAmIzQzOzEwMSw3IEBAIHN0cnVjdCBnZW5ldmVfZGV2IHtcbiAjZW5kaWZcbiBcdHN0cnVjdCBsaXN0X2hlYWQgICBuZXh0O1x0LyogZ2VuZXZlJiMzOTtzIHBlciBuYW1lc3BhY2UgbGlzdCAqL1xuIFx0c3RydWN0IGdyb19jZWxscyAgIGdyb19jZWxscztcbi1cdHN0cnVjdCBnZW5ldmVfY29uZmlnIGNmZztcbiYjNDM7XHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyBfX3JjdSAqY2ZnO1xuIH07XG4gXG4gc3RydWN0IGdlbmV2ZV9zb2NrIHtcbkBAIC0xODIsOCAmIzQzOzE4MywxMCBAQCBzdGF0aWMgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZV9sb29rdXAoc3RydWN0IGdlbmV2ZV9zb2NrICpncyxcbiBcdGhhc2ggPSBnZW5ldmVfbmV0X3ZuaV9oYXNoKHZuaSk7XG4gXHR2bmlfbGlzdF9oZWFkID0gXHUwMDI2Z3MtXHUwMDNldm5pX2xpc3RbaGFzaF07XG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uobm9kZSwgdm5pX2xpc3RfaGVhZCwgaGxpc3QpIHtcbi1cdFx0aWYgKGVxX3R1bl9pZF9hbmRfdm5pKCh1OCAqKVx1MDAyNm5vZGUtXHUwMDNlZ2VuZXZlLVx1MDAzZWNmZy5pbmZvLmtleS50dW5faWQsIHZuaSkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBhZGRyID09IG5vZGUtXHUwMDNlZ2VuZXZlLVx1MDAzZWNmZy5pbmZvLmtleS51LmlwdjQuZHN0KVxuJiM0MztcdFx0Y29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyA9IHJjdV9kZXJlZmVyZW5jZShub2RlLVx1MDAzZWdlbmV2ZS1cdTAwM2VjZmcpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChlcV90dW5faWRfYW5kX3ZuaSgodTggKilcdTAwMjZjZmctXHUwMDNlaW5mby5rZXkudHVuX2lkLCB2bmkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGFkZHIgPT0gY2ZnLVx1MDAzZWluZm8ua2V5LnUuaXB2NC5kc3QpXG4gXHRcdFx0cmV0dXJuIG5vZGUtXHUwMDNlZ2VuZXZlO1xuIFx0fVxuIFx0cmV0dXJuIE5VTEw7XG5AQCAtMjAxLDggJiM0MzsyMDQsMTAgQEAgc3RhdGljIHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmU2X2xvb2t1cChzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzLFxuIFx0aGFzaCA9IGdlbmV2ZV9uZXRfdm5pX2hhc2godm5pKTtcbiBcdHZuaV9saXN0X2hlYWQgPSBcdTAwMjZncy1cdTAwM2V2bmlfbGlzdFtoYXNoXTtcbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCB2bmlfbGlzdF9oZWFkLCBobGlzdCkge1xuLVx0XHRpZiAoZXFfdHVuX2lkX2FuZF92bmkoKHU4ICopXHUwMDI2bm9kZS1cdTAwM2VnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnR1bl9pZCwgdm5pKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGlwdjZfYWRkcl9lcXVhbChcdTAwMjZhZGRyNiwgXHUwMDI2bm9kZS1cdTAwM2VnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnUuaXB2Ni5kc3QpKVxuJiM0MztcdFx0Y29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyA9IHJjdV9kZXJlZmVyZW5jZShub2RlLVx1MDAzZWdlbmV2ZS1cdTAwM2VjZmcpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChlcV90dW5faWRfYW5kX3ZuaSgodTggKilcdTAwMjZjZmctXHUwMDNlaW5mby5rZXkudHVuX2lkLCB2bmkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGlwdjZfYWRkcl9lcXVhbChcdTAwMjZhZGRyNiwgXHUwMDI2Y2ZnLVx1MDAzZWluZm8ua2V5LnUuaXB2Ni5kc3QpKVxuIFx0XHRcdHJldHVybiBub2RlLVx1MDAzZWdlbmV2ZTtcbiBcdH1cbiBcdHJldHVybiBOVUxMO1xuQEAgLTM4NiwxMSAmIzQzOzM5MSw2IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRlcnIgPSBkc3RfY2FjaGVfaW5pdChcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLmluZm8uZHN0X2NhY2hlLCBHRlBfS0VSTkVMKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0Z3JvX2NlbGxzX2Rlc3Ryb3koXHUwMDI2Z2VuZXZlLVx1MDAzZWdyb19jZWxscyk7XG4tXHRcdHJldHVybiBlcnI7XG4tXHR9XG4gXHRuZXRkZXZfbG9ja2RlcF9zZXRfY2xhc3NlcyhkZXYpO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTM5OSw3ICYjNDM7Mzk5LDYgQEAgc3RhdGljIHZvaWQgZ2VuZXZlX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuLVx0ZHN0X2NhY2hlX2Rlc3Ryb3koXHUwMDI2Z2VuZXZlLVx1MDAzZWNmZy5pbmZvLmRzdF9jYWNoZSk7XG4gXHRncm9fY2VsbHNfZGVzdHJveShcdTAwMjZnZW5ldmUtXHUwMDNlZ3JvX2NlbGxzKTtcbiB9XG4gXG5AQCAtNjUwLDYgJiM0Mzs2NDksNyBAQCBzdGF0aWMgaW50IGdlbmV2ZV9wb3N0X2RlY2FwX2hpbnQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIC8qIENhbGxiYWNrIGZyb20gbmV0L2lwdjQvdWRwLmMgdG8gcmVjZWl2ZSBwYWNrZXRzICovXG4gc3RhdGljIGludCBnZW5ldmVfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnO1xuIFx0c3RydWN0IGdlbmV2ZWhkciAqZ2VuZXZlaDtcbiBcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmU7XG4gXHRzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzO1xuQEAgLTY3NSw4ICYjNDM7Njc1LDkgQEAgc3RhdGljIGludCBnZW5ldmVfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0aW5uZXJfcHJvdG8gPSBnZW5ldmVoLVx1MDAzZXByb3RvX3R5cGU7XG4gXG4tXHRpZiAodW5saWtlbHkoKCFnZW5ldmUtXHUwMDNlY2ZnLmlubmVyX3Byb3RvX2luaGVyaXQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgIGlubmVyX3Byb3RvICE9IGh0b25zKEVUSF9QX1RFQikpKSkge1xuJiM0MztcdGNmZyA9IHJjdV9kZXJlZmVyZW5jZShnZW5ldmUtXHUwMDNlY2ZnKTtcbiYjNDM7XHRpZiAodW5saWtlbHkoIWNmZyB8fCAoIWNmZy1cdTAwM2Vpbm5lcl9wcm90b19pbmhlcml0IFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgICBpbm5lcl9wcm90byAhPSBodG9ucyhFVEhfUF9URUIpKSkpIHtcbiBcdFx0ZGV2X2RzdGF0c19yeF9kcm9wcGVkKGdlbmV2ZS1cdTAwM2VkZXYpO1xuIFx0XHRnb3RvIGRyb3A7XG4gXHR9XG5AQCAtNzYyLDkgJiM0Mzs3NjMsMTAgQEAgc3RhdGljIGludCBnZW5ldmVfdWRwX2VuY2FwX2Vycl9sb29rdXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHNvY2sgKmdlbmV2ZV9jcmVhdGVfc29jayhzdHJ1Y3QgbmV0ICpuZXQsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuJiM0MztcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLCBib29sIGlwdjYpXG4ge1xuLVx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gXHUwMDI2Z2VuZXZlLVx1MDAzZWNmZy5pbmZvO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9IFx1MDAyNmNmZy1cdTAwM2VpbmZvO1xuIFx0c3RydWN0IHVkcF9wb3J0X2NmZyB1ZHBfY29uZjtcbiBcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG4gXHRpbnQgZXJyO1xuQEAgLTc3NSw3ICYjNDM7Nzc3LDcgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpnZW5ldmVfY3JlYXRlX3NvY2soc3RydWN0IG5ldCAqbmV0LFxuIFx0aWYgKGlwdjYpIHtcbiBcdFx0dWRwX2NvbmYuZmFtaWx5ID0gQUZfSU5FVDY7XG4gXHRcdHVkcF9jb25mLmlwdjZfdjZvbmx5ID0gMTtcbi1cdFx0dWRwX2NvbmYudXNlX3VkcDZfcnhfY2hlY2tzdW1zID0gZ2VuZXZlLVx1MDAzZWNmZy51c2VfdWRwNl9yeF9jaGVja3N1bXM7XG4mIzQzO1x0XHR1ZHBfY29uZi51c2VfdWRwNl9yeF9jaGVja3N1bXMgPSBjZmctXHUwMDNldXNlX3VkcDZfcnhfY2hlY2tzdW1zO1xuIFx0XHR1ZHBfY29uZi5sb2NhbF9pcDYgPSBpbmZvLVx1MDAzZWtleS51LmlwdjYuc3JjO1xuIFx0fSBlbHNlXG4gI2VuZGlmXG5AQCAtOTkxLDcgJiM0Mzs5OTMsOCBAQCBzdGF0aWMgaW50IGdlbmV2ZV9ncm9fY29tcGxldGUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIC8qIENyZWF0ZSBuZXcgbGlzdGVuIHNvY2tldCBpZiBuZWVkZWQgKi9cbiBzdGF0aWMgc3RydWN0IGdlbmV2ZV9zb2NrICpnZW5ldmVfc29ja2V0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tXHRcdFx0XHRcdFx0c3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxuJiM0MztcdFx0XHRcdFx0XHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuJiM0MztcdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLCBib29sIGlwdjYpXG4ge1xuIFx0c3RydWN0IGdlbmV2ZV9uZXQgKmduID0gbmV0X2dlbmVyaWMobmV0LCBnZW5ldmVfbmV0X2lkKTtcbiBcdHN0cnVjdCB1ZHBfdHVubmVsX3NvY2tfY2ZnIHR1bm5lbF9jZmc7XG5AQCAtMTAwMyw3ICYjNDM7MTAwNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdlbmV2ZV9zb2NrZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdGlmICghZ3MpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuLVx0c2sgPSBnZW5ldmVfY3JlYXRlX3NvY2sobmV0LCBnZW5ldmUsIGlwdjYpO1xuJiM0MztcdHNrID0gZ2VuZXZlX2NyZWF0ZV9zb2NrKG5ldCwgZ2VuZXZlLCBjZmcsIGlwdjYpO1xuIFx0aWYgKElTX0VSUihzaykpIHtcbiBcdFx0a2ZyZWUoZ3MpO1xuIFx0XHRyZXR1cm4gRVJSX0NBU1Qoc2spO1xuQEAgLTEwNjAsMTIgJiM0MzsxMDYzLDEzIEBAIHN0YXRpYyB2b2lkIGdlbmV2ZV9zb2NrX3JlbGVhc2Uoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSlcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBnZW5ldmVfc29jayAqZ2VuZXZlX2ZpbmRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBib29sIGlwdjYpXG4mIzQzO1x0XHRcdFx0XHQgICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSxcbiYjNDM7XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLCBib29sIGlwdjYpXG4ge1xuIFx0c3RydWN0IGdlbmV2ZV9uZXQgKmduID0gbmV0X2dlbmVyaWMobmV0LCBnZW5ldmVfbmV0X2lkKTtcbi1cdHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9IFx1MDAyNmdlbmV2ZS1cdTAwM2VjZmcuaW5mbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBcdTAwMjZjZmctXHUwMDNlaW5mbztcbiBcdHNhX2ZhbWlseV90IGZhbWlseSA9IGlwdjYgPyBBRl9JTkVUNiA6IEFGX0lORVQ7XG4tXHRib29sIGdyb19oaW50ID0gZ2VuZXZlLVx1MDAzZWNmZy5ncm9faGludDtcbiYjNDM7XHRib29sIGdyb19oaW50ID0gY2ZnLVx1MDAzZWdyb19oaW50O1xuIFx0X19iZTE2IGRzdF9wb3J0ID0gaW5mby1cdTAwM2VrZXkudHBfZHN0O1xuIFx0c3RydWN0IGdlbmV2ZV9zb2NrICpncztcbiBcbkBAIC0xMDk1LDcgJiM0MzsxMDk5LDggQEAgc3RhdGljIHN0cnVjdCBnZW5ldmVfc29jayAqZ2VuZXZlX2ZpbmRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGludCBnZW5ldmVfc29ja19hZGQoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxuJiM0MztzdGF0aWMgaW50IGdlbmV2ZV9zb2NrX2FkZChzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuJiM0MztcdFx0XHQgICBjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLCBib29sIGlwdjYpXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gZ2VuZXZlLVx1MDAzZW5ldDtcbiBcdHN0cnVjdCBnZW5ldmVfZGV2X25vZGUgKm5vZGU7XG5AQCAtMTEwMywxOSAmIzQzOzExMDgsMTkgQEAgc3RhdGljIGludCBnZW5ldmVfc29ja19hZGQoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxuIFx0X191OCB2bmlbM107XG4gXHRfX3UzMiBoYXNoO1xuIFxuLVx0Z3MgPSBnZW5ldmVfZmluZF9zb2NrKG5ldCwgZ2VuZXZlLCBpcHY2KTtcbiYjNDM7XHRncyA9IGdlbmV2ZV9maW5kX3NvY2sobmV0LCBnZW5ldmUsIGNmZywgaXB2Nik7XG4gXHRpZiAoZ3MpIHtcbiBcdFx0Z3MtXHUwMDNlcmVmY250JiM0MzsmIzQzOztcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRncyA9IGdlbmV2ZV9zb2NrZXRfY3JlYXRlKG5ldCwgZ2VuZXZlLCBpcHY2KTtcbiYjNDM7XHRncyA9IGdlbmV2ZV9zb2NrZXRfY3JlYXRlKG5ldCwgZ2VuZXZlLCBjZmcsIGlwdjYpO1xuIFx0aWYgKElTX0VSUihncykpXG4gXHRcdHJldHVybiBQVFJfRVJSKGdzKTtcbiBcbiBvdXQ6XG4tXHRncy1cdTAwM2Vjb2xsZWN0X21kID0gZ2VuZXZlLVx1MDAzZWNmZy5jb2xsZWN0X21kO1xuLVx0Z3MtXHUwMDNlZ3JvX2hpbnQgPSBnZW5ldmUtXHUwMDNlY2ZnLmdyb19oaW50O1xuJiM0MztcdGdzLVx1MDAzZWNvbGxlY3RfbWQgPSBjZmctXHUwMDNlY29sbGVjdF9tZDtcbiYjNDM7XHRncy1cdTAwM2Vncm9faGludCA9IGNmZy1cdTAwM2Vncm9faGludDtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiBcdGlmIChpcHY2KSB7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtXHUwMDNlc29jazYsIGdzKTtcbkBAIC0xMTI4LDcgJiM0MzsxMTMzLDcgQEAgc3RhdGljIGludCBnZW5ldmVfc29ja19hZGQoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxuIFx0fVxuIFx0bm9kZS1cdTAwM2VnZW5ldmUgPSBnZW5ldmU7XG4gXG4tXHR0dW5uZWxfaWRfdG9fdm5pKGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudHVuX2lkLCB2bmkpO1xuJiM0MztcdHR1bm5lbF9pZF90b192bmkoY2ZnLVx1MDAzZWluZm8ua2V5LnR1bl9pZCwgdm5pKTtcbiBcdGhhc2ggPSBnZW5ldmVfbmV0X3ZuaV9oYXNoKHZuaSk7XG4gXHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2bm9kZS1cdTAwM2VobGlzdCwgXHUwMDI2Z3MtXHUwMDNldm5pX2xpc3RbaGFzaF0pO1xuIFx0cmV0dXJuIDA7XG5AQCAtMTEzNywyMSAmIzQzOzExNDIsMjMgQEAgc3RhdGljIGludCBnZW5ldmVfc29ja19hZGQoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxuIHN0YXRpYyBpbnQgZ2VuZXZlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdGJvb2wgZHVhbHN0YWNrID0gZ2VuZXZlLVx1MDAzZWNmZy5kdWFsc3RhY2s7XG4tXHRib29sIGlwdjQsIGlwdjY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZztcbiYjNDM7XHRib29sIGlwdjQsIGlwdjYsIGR1YWxzdGFjaztcbiBcdGludCByZXQgPSAwO1xuIFxuLVx0aXB2NiA9IGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5tb2RlIFx1MDAyNiBJUF9UVU5ORUxfSU5GT19JUFY2IHx8IGR1YWxzdGFjaztcbiYjNDM7XHRjZmcgPSBydG5sX2RlcmVmZXJlbmNlKGdlbmV2ZS1cdTAwM2VjZmcpO1xuJiM0MztcdGR1YWxzdGFjayA9IGNmZy1cdTAwM2VkdWFsc3RhY2s7XG4mIzQzO1x0aXB2NiA9IGNmZy1cdTAwM2VpbmZvLm1vZGUgXHUwMDI2IElQX1RVTk5FTF9JTkZPX0lQVjYgfHwgZHVhbHN0YWNrO1xuIFx0aXB2NCA9ICFpcHY2IHx8IGR1YWxzdGFjaztcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiBcdGlmIChpcHY2KSB7XG4tXHRcdHJldCA9IGdlbmV2ZV9zb2NrX2FkZChnZW5ldmUsIHRydWUpO1xuJiM0MztcdFx0cmV0ID0gZ2VuZXZlX3NvY2tfYWRkKGdlbmV2ZSwgY2ZnLCB0cnVlKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQUZOT1NVUFBPUlQpXG4gXHRcdFx0aXB2NCA9IGZhbHNlO1xuIFx0fVxuICNlbmRpZlxuIFx0aWYgKGlwdjQpXG4tXHRcdHJldCA9IGdlbmV2ZV9zb2NrX2FkZChnZW5ldmUsIGZhbHNlKTtcbiYjNDM7XHRcdHJldCA9IGdlbmV2ZV9zb2NrX2FkZChnZW5ldmUsIGNmZywgZmFsc2UpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z2VuZXZlX3NvY2tfcmVsZWFzZShnZW5ldmUpO1xuIFxuQEAgLTExODksNiAmIzQzOzExOTYsNyBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfYnVpbGRfaGVhZGVyKHN0cnVjdCBnZW5ldmVoZHIgKmdlbmV2ZWgsXG4gfVxuIFxuIHN0YXRpYyBpbnQgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChjb25zdCBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3QgZ2VuZXZlX3NrYl9jYiAqY2IgPSBHRU5FVkVfU0tCX0NCKHNrYik7XG5AQCAtMTIwMSw3ICYjNDM7MTIwOSw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChjb25zdCBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuIFx0Y2ItXHUwMDNlZ3JvX2hpbnRfbGVuID0gMDtcbiBcbiBcdC8qIFRyeSB0byBhZGQgdGhlIEdSTyBoaW50IG9ubHkgaW4gY2FzZSBvZiBkb3VibGUgZW5jYXAuICovXG4tXHRpZiAoIWdlbmV2ZS1cdTAwM2VjZmcuZ3JvX2hpbnQgfHwgIXNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKVxuJiM0MztcdGlmICghY2ZnLVx1MDAzZWdyb19oaW50IHx8ICFza2ItXHUwMDNlZW5jYXBzdWxhdGlvbilcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKlxuQEAgLTEyNjIsMTAgJiM0MzsxMjcwLDExIEBAIHN0YXRpYyB2b2lkIGdlbmV2ZV9wdXRfZ3JvX2hpbnRfb3B0KHN0cnVjdCBnZW5ldmVoZHIgKmdudmgsIGludCBvcHRfc2l6ZSxcbiBcbiBzdGF0aWMgaW50IGdlbmV2ZV9idWlsZF9za2Ioc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXG4tXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsIGludCBpcF9oZHJfbGVuKVxuJiM0MztcdFx0XHQgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSxcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsIGludCBpcF9oZHJfbGVuKVxuIHtcbiBcdGJvb2wgdWRwX3N1bSA9IHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKTtcbi1cdGJvb2wgaW5uZXJfcHJvdG9faW5oZXJpdCA9IGdlbmV2ZS1cdTAwM2VjZmcuaW5uZXJfcHJvdG9faW5oZXJpdDtcbiYjNDM7XHRib29sIGlubmVyX3Byb3RvX2luaGVyaXQgPSBjZmctXHUwMDNlaW5uZXJfcHJvdG9faW5oZXJpdDtcbiBcdGJvb2wgeG5ldCA9ICFuZXRfZXEoZ2VuZXZlLVx1MDAzZW5ldCwgZGV2X25ldChnZW5ldmUtXHUwMDNlZGV2KSk7XG4gXHRzdHJ1Y3QgZ2VuZXZlX3NrYl9jYiAqY2IgPSBHRU5FVkVfU0tCX0NCKHNrYik7XG4gXHRzdHJ1Y3QgZ2VuZXZlaGRyICpnbnZoO1xuQEAgLTEzMDYsMTQgJiM0MzsxMzE1LDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2J1aWxkX3NrYihzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHN0cnVjdCBza19idWZmICpza2IsXG4gfVxuIFxuIHN0YXRpYyB1OCBnZW5ldmVfZ2V0X2RzZmllbGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLFxuIFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxuIFx0XHRcdCAgICAgYm9vbCAqdXNlX2NhY2hlKVxuIHtcbi1cdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0dTggZHNmaWVsZDtcbiBcbiBcdGRzZmllbGQgPSBpbmZvLVx1MDAzZWtleS50b3M7XG4tXHRpZiAoZHNmaWVsZCA9PSAxIFx1MDAyNlx1MDAyNiAhZ2VuZXZlLVx1MDAzZWNmZy5jb2xsZWN0X21kKSB7XG4mIzQzO1x0aWYgKGNmZyBcdTAwMjZcdTAwMjYgZHNmaWVsZCA9PSAxIFx1MDAyNlx1MDAyNiAhY2ZnLVx1MDAzZWNvbGxlY3RfbWQpIHtcbiBcdFx0ZHNmaWVsZCA9IGlwX3R1bm5lbF9nZXRfZHNmaWVsZChpcF9oZHIoc2tiKSwgc2tiKTtcbiBcdFx0KnVzZV9jYWNoZSA9IGZhbHNlO1xuIFx0fVxuQEAgLTEzMjMsNiAmIzQzOzEzMzIsNyBAQCBzdGF0aWMgdTggZ2VuZXZlX2dldF9kc2ZpZWxkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gc3RhdGljIGludCBnZW5ldmVfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHQgICBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuJiM0MztcdFx0XHQgICBjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLFxuIFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzNCA9IHJjdV9kZXJlZmVyZW5jZShnZW5ldmUtXHUwMDNlc29jazQpO1xuQEAgLTEzMzUsMzUgJiM0MzsxMzQ1LDM1IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRfX2JlMTYgc3BvcnQ7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKHNrYl92bGFuX2luZXRfcHJlcGFyZShza2IsIGdlbmV2ZS1cdTAwM2VjZmcuaW5uZXJfcHJvdG9faW5oZXJpdCkpXG4mIzQzO1x0aWYgKHNrYl92bGFuX2luZXRfcHJlcGFyZShza2IsIGNmZy1cdTAwM2Vpbm5lcl9wcm90b19pbmhlcml0KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIWdzNClcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHR1c2VfY2FjaGUgPSBpcF90dW5uZWxfZHN0X2NhY2hlX3VzYWJsZShza2IsIGluZm8pO1xuLVx0dG9zID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBpbmZvLCBcdTAwMjZ1c2VfY2FjaGUpO1xuJiM0MztcdHRvcyA9IGdlbmV2ZV9nZXRfZHNmaWVsZChza2IsIGRldiwgY2ZnLCBpbmZvLCBcdTAwMjZ1c2VfY2FjaGUpO1xuIFx0c3BvcnQgPSB1ZHBfZmxvd19zcmNfcG9ydChnZW5ldmUtXHUwMDNlbmV0LCBza2IsXG4tXHRcdFx0XHQgIGdlbmV2ZS1cdTAwM2VjZmcucG9ydF9taW4sXG4tXHRcdFx0XHQgIGdlbmV2ZS1cdTAwM2VjZmcucG9ydF9tYXgsIHRydWUpO1xuJiM0MztcdFx0XHRcdCAgY2ZnLVx1MDAzZXBvcnRfbWluLFxuJiM0MztcdFx0XHRcdCAgY2ZnLVx1MDAzZXBvcnRfbWF4LCB0cnVlKTtcbiBcbiBcdHJ0ID0gdWRwX3R1bm5lbF9kc3RfbG9va3VwKHNrYiwgZGV2LCBnZW5ldmUtXHUwMDNlbmV0LCAwLCBcdTAwMjZzYWRkcixcbiBcdFx0XHRcdCAgIFx1MDAyNmluZm8tXHUwMDNla2V5LFxuLVx0XHRcdFx0ICAgc3BvcnQsIGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudHBfZHN0LCB0b3MsXG4mIzQzO1x0XHRcdFx0ICAgc3BvcnQsIGNmZy1cdTAwM2VpbmZvLmtleS50cF9kc3QsIHRvcyxcbiBcdFx0XHRcdCAgIHVzZV9jYWNoZSA/XG4gXHRcdFx0XHQgICAoc3RydWN0IGRzdF9jYWNoZSAqKVx1MDAyNmluZm8tXHUwMDNlZHN0X2NhY2hlIDogTlVMTCk7XG4gXHRpZiAoSVNfRVJSKHJ0KSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocnQpO1xuIFxuLVx0aWYgKGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudS5pcHY0LnNyYyBcdTAwMjZcdTAwMjZcbi1cdCAgICBzYWRkciAhPSBnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnUuaXB2NC5zcmMpIHtcbiYjNDM7XHRpZiAoY2ZnLVx1MDAzZWluZm8ua2V5LnUuaXB2NC5zcmMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNhZGRyICE9IGNmZy1cdTAwM2VpbmZvLmtleS51LmlwdjQuc3JjKSB7XG4gXHRcdGRzdF9yZWxlYXNlKFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4gXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiBcdH1cbiBcbiBcdGVyciA9IHNrYl90dW5uZWxfY2hlY2tfcG10dShza2IsIFx1MDAyNnJ0LVx1MDAzZWRzdCxcbiBcdFx0XHRcdCAgICBHRU5FVkVfSVBWNF9ITEVOICYjNDM7IGluZm8tXHUwMDNlb3B0aW9uc19sZW4gJiM0Mztcbi1cdFx0XHRcdCAgICBnZW5ldmVfYnVpbGRfZ3JvX2hpbnRfb3B0KGdlbmV2ZSwgc2tiKSxcbiYjNDM7XHRcdFx0XHQgICAgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChnZW5ldmUsIGNmZywgc2tiKSxcbiBcdFx0XHRcdCAgICBuZXRpZl9pc19hbnlfYnJpZGdlX3BvcnQoZGV2KSk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdGRzdF9yZWxlYXNlKFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG5AQCAtMTM5NywyMSAmIzQzOzE0MDcsMjEgQEAgc3RhdGljIGludCBnZW5ldmVfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdH1cbiBcbiBcdHRvcyA9IGlwX3R1bm5lbF9lY25fZW5jYXAodG9zLCBpcF9oZHIoc2tiKSwgc2tiKTtcbi1cdGlmIChnZW5ldmUtXHUwMDNlY2ZnLmNvbGxlY3RfbWQpIHtcbiYjNDM7XHRpZiAoY2ZnLVx1MDAzZWNvbGxlY3RfbWQpIHtcbiBcdFx0dHRsID0ga2V5LVx1MDAzZXR0bDtcbiBcbiBcdFx0ZGYgPSB0ZXN0X2JpdChJUF9UVU5ORUxfRE9OVF9GUkFHTUVOVF9CSVQsIGtleS1cdTAwM2V0dW5fZmxhZ3MpID9cbiBcdFx0ICAgICBodG9ucyhJUF9ERikgOiAwO1xuIFx0fSBlbHNlIHtcbi1cdFx0aWYgKGdlbmV2ZS1cdTAwM2VjZmcudHRsX2luaGVyaXQpXG4mIzQzO1x0XHRpZiAoY2ZnLVx1MDAzZXR0bF9pbmhlcml0KVxuIFx0XHRcdHR0bCA9IGlwX3R1bm5lbF9nZXRfdHRsKGlwX2hkcihza2IpLCBza2IpO1xuIFx0XHRlbHNlXG4gXHRcdFx0dHRsID0ga2V5LVx1MDAzZXR0bDtcbiBcdFx0dHRsID0gdHRsID8gOiBpcDRfZHN0X2hvcGxpbWl0KFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4gXG4tXHRcdGlmIChnZW5ldmUtXHUwMDNlY2ZnLmRmID09IEdFTkVWRV9ERl9TRVQpIHtcbiYjNDM7XHRcdGlmIChjZmctXHUwMDNlZGYgPT0gR0VORVZFX0RGX1NFVCkge1xuIFx0XHRcdGRmID0gaHRvbnMoSVBfREYpO1xuLVx0XHR9IGVsc2UgaWYgKGdlbmV2ZS1cdTAwM2VjZmcuZGYgPT0gR0VORVZFX0RGX0lOSEVSSVQpIHtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoY2ZnLVx1MDAzZWRmID09IEdFTkVWRV9ERl9JTkhFUklUKSB7XG4gXHRcdFx0c3RydWN0IGV0aGhkciAqZXRoID0gc2tiX2V0aF9oZHIoc2tiKTtcbiBcbiBcdFx0XHRpZiAobnRvaHMoZXRoLVx1MDAzZWhfcHJvdG8pID09IEVUSF9QX0lQVjYpIHtcbkBAIC0xNDI1LDEzICYjNDM7MTQzNSwxMyBAQCBzdGF0aWMgaW50IGdlbmV2ZV94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRlcnIgPSBnZW5ldmVfYnVpbGRfc2tiKFx1MDAyNnJ0LVx1MDAzZWRzdCwgc2tiLCBpbmZvLCBnZW5ldmUsXG4mIzQzO1x0ZXJyID0gZ2VuZXZlX2J1aWxkX3NrYihcdTAwMjZydC1cdTAwM2Vkc3QsIHNrYiwgaW5mbywgZ2VuZXZlLCBjZmcsXG4gXHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTtcbiBcdGlmICh1bmxpa2VseShlcnIpKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0dWRwX3R1bm5lbF94bWl0X3NrYihydCwgZ3M0LVx1MDAzZXNrLCBza2IsIHNhZGRyLCBpbmZvLVx1MDAzZWtleS51LmlwdjQuZHN0LFxuLVx0XHRcdCAgICB0b3MsIHR0bCwgZGYsIHNwb3J0LCBnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnRwX2RzdCxcbiYjNDM7XHRcdFx0ICAgIHRvcywgdHRsLCBkZiwgc3BvcnQsIGNmZy1cdTAwM2VpbmZvLmtleS50cF9kc3QsXG4gXHRcdFx0ICAgICFuZXRfZXEoZ2VuZXZlLVx1MDAzZW5ldCwgZGV2X25ldChnZW5ldmUtXHUwMDNlZGV2KSksXG4gXHRcdFx0ICAgICF0ZXN0X2JpdChJUF9UVU5ORUxfQ1NVTV9CSVQsIGluZm8tXHUwMDNla2V5LnR1bl9mbGFncyksXG4gXHRcdFx0ICAgIDApO1xuQEAgLTE0NDEsNiAmIzQzOzE0NTEsNyBAQCBzdGF0aWMgaW50IGdlbmV2ZV94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIHN0YXRpYyBpbnQgZ2VuZXZlNl94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdCAgICBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuJiM0MztcdFx0XHQgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyxcbiBcdFx0XHQgICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBnZW5ldmVfc29jayAqZ3M2ID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS1cdTAwM2Vzb2NrNik7XG5AQCAtMTQ1MiwzNSAmIzQzOzE0NjMsMzUgQEAgc3RhdGljIGludCBnZW5ldmU2X3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRfX2JlMTYgc3BvcnQ7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKHNrYl92bGFuX2luZXRfcHJlcGFyZShza2IsIGdlbmV2ZS1cdTAwM2VjZmcuaW5uZXJfcHJvdG9faW5oZXJpdCkpXG4mIzQzO1x0aWYgKHNrYl92bGFuX2luZXRfcHJlcGFyZShza2IsIGNmZy1cdTAwM2Vpbm5lcl9wcm90b19pbmhlcml0KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIWdzNilcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHR1c2VfY2FjaGUgPSBpcF90dW5uZWxfZHN0X2NhY2hlX3VzYWJsZShza2IsIGluZm8pO1xuLVx0cHJpbyA9IGdlbmV2ZV9nZXRfZHNmaWVsZChza2IsIGRldiwgaW5mbywgXHUwMDI2dXNlX2NhY2hlKTtcbiYjNDM7XHRwcmlvID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBjZmcsIGluZm8sIFx1MDAyNnVzZV9jYWNoZSk7XG4gXHRzcG9ydCA9IHVkcF9mbG93X3NyY19wb3J0KGdlbmV2ZS1cdTAwM2VuZXQsIHNrYixcbi1cdFx0XHRcdCAgZ2VuZXZlLVx1MDAzZWNmZy5wb3J0X21pbixcbi1cdFx0XHRcdCAgZ2VuZXZlLVx1MDAzZWNmZy5wb3J0X21heCwgdHJ1ZSk7XG4mIzQzO1x0XHRcdFx0ICBjZmctXHUwMDNlcG9ydF9taW4sXG4mIzQzO1x0XHRcdFx0ICBjZmctXHUwMDNlcG9ydF9tYXgsIHRydWUpO1xuIFxuIFx0ZHN0ID0gdWRwX3R1bm5lbDZfZHN0X2xvb2t1cChza2IsIGRldiwgZ2VuZXZlLVx1MDAzZW5ldCwgZ3M2LVx1MDAzZXNrLCAwLFxuIFx0XHRcdFx0ICAgICBcdTAwMjZzYWRkciwga2V5LCBzcG9ydCxcbi1cdFx0XHRcdCAgICAgZ2VuZXZlLVx1MDAzZWNmZy5pbmZvLmtleS50cF9kc3QsIHByaW8sXG4mIzQzO1x0XHRcdFx0ICAgICBjZmctXHUwMDNlaW5mby5rZXkudHBfZHN0LCBwcmlvLFxuIFx0XHRcdFx0ICAgICB1c2VfY2FjaGUgP1xuIFx0XHRcdFx0ICAgICAoc3RydWN0IGRzdF9jYWNoZSAqKVx1MDAyNmluZm8tXHUwMDNlZHN0X2NhY2hlIDogTlVMTCk7XG4gXHRpZiAoSVNfRVJSKGRzdCkpXG4gXHRcdHJldHVybiBQVFJfRVJSKGRzdCk7XG4gXG4tXHRpZiAoIWlwdjZfYWRkcl9hbnkoXHUwMDI2Z2VuZXZlLVx1MDAzZWNmZy5pbmZvLmtleS51LmlwdjYuc3JjKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhaXB2Nl9hZGRyX2VxdWFsKFx1MDAyNnNhZGRyLCBcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnUuaXB2Ni5zcmMpKSB7XG4mIzQzO1x0aWYgKCFpcHY2X2FkZHJfYW55KFx1MDAyNmNmZy1cdTAwM2VpbmZvLmtleS51LmlwdjYuc3JjKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWlwdjZfYWRkcl9lcXVhbChcdTAwMjZzYWRkciwgXHUwMDI2Y2ZnLVx1MDAzZWluZm8ua2V5LnUuaXB2Ni5zcmMpKSB7XG4gXHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4gXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiBcdH1cbiBcbiBcdGVyciA9IHNrYl90dW5uZWxfY2hlY2tfcG10dShza2IsIGRzdCxcbiBcdFx0XHRcdCAgICBHRU5FVkVfSVBWNl9ITEVOICYjNDM7IGluZm8tXHUwMDNlb3B0aW9uc19sZW4gJiM0Mztcbi1cdFx0XHRcdCAgICBnZW5ldmVfYnVpbGRfZ3JvX2hpbnRfb3B0KGdlbmV2ZSwgc2tiKSxcbiYjNDM7XHRcdFx0XHQgICAgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChnZW5ldmUsIGNmZywgc2tiKSxcbiBcdFx0XHRcdCAgICBuZXRpZl9pc19hbnlfYnJpZGdlX3BvcnQoZGV2KSk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdGRzdF9yZWxlYXNlKGRzdCk7XG5AQCAtMTUxMywyMiAmIzQzOzE1MjQsMjIgQEAgc3RhdGljIGludCBnZW5ldmU2X3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHR9XG4gXG4gXHRwcmlvID0gaXBfdHVubmVsX2Vjbl9lbmNhcChwcmlvLCBpcF9oZHIoc2tiKSwgc2tiKTtcbi1cdGlmIChnZW5ldmUtXHUwMDNlY2ZnLmNvbGxlY3RfbWQpIHtcbiYjNDM7XHRpZiAoY2ZnLVx1MDAzZWNvbGxlY3RfbWQpIHtcbiBcdFx0dHRsID0ga2V5LVx1MDAzZXR0bDtcbiBcdH0gZWxzZSB7XG4tXHRcdGlmIChnZW5ldmUtXHUwMDNlY2ZnLnR0bF9pbmhlcml0KVxuJiM0MztcdFx0aWYgKGNmZy1cdTAwM2V0dGxfaW5oZXJpdClcbiBcdFx0XHR0dGwgPSBpcF90dW5uZWxfZ2V0X3R0bChpcF9oZHIoc2tiKSwgc2tiKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHR0bCA9IGtleS1cdTAwM2V0dGw7XG4gXHRcdHR0bCA9IHR0bCA/IDogaXA2X2RzdF9ob3BsaW1pdChkc3QpO1xuIFx0fVxuLVx0ZXJyID0gZ2VuZXZlX2J1aWxkX3NrYihkc3QsIHNrYiwgaW5mbywgZ2VuZXZlLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcbiYjNDM7XHRlcnIgPSBnZW5ldmVfYnVpbGRfc2tiKGRzdCwgc2tiLCBpbmZvLCBnZW5ldmUsIGNmZywgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4gXHRpZiAodW5saWtlbHkoZXJyKSlcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdHVkcF90dW5uZWw2X3htaXRfc2tiKGRzdCwgZ3M2LVx1MDAzZXNrLCBza2IsIGRldixcbiBcdFx0XHQgICAgIFx1MDAyNnNhZGRyLCBcdTAwMjZrZXktXHUwMDNldS5pcHY2LmRzdCwgcHJpbywgdHRsLFxuLVx0XHRcdCAgICAgaW5mby1cdTAwM2VrZXkubGFiZWwsIHNwb3J0LCBnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnRwX2RzdCxcbiYjNDM7XHRcdFx0ICAgICBpbmZvLVx1MDAzZWtleS5sYWJlbCwgc3BvcnQsIGNmZy1cdTAwM2VpbmZvLmtleS50cF9kc3QsXG4gXHRcdFx0ICAgICAhdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULFxuIFx0XHRcdFx0ICAgICAgIGluZm8tXHUwMDNla2V5LnR1bl9mbGFncyksXG4gXHRcdFx0ICAgICAwKTtcbkBAIC0xNTM5LDI4ICYjNDM7MTU1MCwzMSBAQCBzdGF0aWMgaW50IGdlbmV2ZTZfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBzdGF0aWMgbmV0ZGV2X3R4X3QgZ2VuZXZlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9IE5VTEw7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gTlVMTDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnO1xuIFx0aW50IGVycjtcbiBcbi1cdGlmIChnZW5ldmUtXHUwMDNlY2ZnLmNvbGxlY3RfbWQpIHtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0Y2ZnID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS1cdTAwM2VjZmcpO1xuJiM0MztcdGlmIChjZmctXHUwMDNlY29sbGVjdF9tZCkge1xuIFx0XHRpbmZvID0gc2tiX3R1bm5lbF9pbmZvKHNrYik7XG4gXHRcdGlmICh1bmxpa2VseSghaW5mbyB8fCAhKGluZm8tXHUwMDNlbW9kZSBcdTAwMjYgSVBfVFVOTkVMX0lORk9fVFgpKSkge1xuIFx0XHRcdG5ldGRldl9kYmcoZGV2LCBcJiMzNDtubyB0dW5uZWwgbWV0YWRhdGFcXG5cJiMzNDspO1xuIFx0XHRcdGRldl9rZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoZGV2KTtcbiYjNDM7XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0aW5mbyA9IFx1MDAyNmdlbmV2ZS1cdTAwM2VjZmcuaW5mbztcbiYjNDM7XHRcdGluZm8gPSBcdTAwMjZjZmctXHUwMDNlaW5mbztcbiBcdH1cbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiBcdGlmIChpbmZvLVx1MDAzZW1vZGUgXHUwMDI2IElQX1RVTk5FTF9JTkZPX0lQVjYpXG4tXHRcdGVyciA9IGdlbmV2ZTZfeG1pdF9za2Ioc2tiLCBkZXYsIGdlbmV2ZSwgaW5mbyk7XG4mIzQzO1x0XHRlcnIgPSBnZW5ldmU2X3htaXRfc2tiKHNrYiwgZGV2LCBnZW5ldmUsIGNmZywgaW5mbyk7XG4gXHRlbHNlXG4gI2VuZGlmXG4tXHRcdGVyciA9IGdlbmV2ZV94bWl0X3NrYihza2IsIGRldiwgZ2VuZXZlLCBpbmZvKTtcbiYjNDM7XHRcdGVyciA9IGdlbmV2ZV94bWl0X3NrYihza2IsIGRldiwgZ2VuZXZlLCBjZmcsIGluZm8pO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRpZiAobGlrZWx5KCFlcnIpKVxuQEAgLTE1OTMsOCAmIzQzOzE2MDcsMTMgQEAgc3RhdGljIGludCBnZW5ldmVfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBza2JfdHVubmVsX2luZm8oc2tiKTtcbiBcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmc7XG4gXHRfX2JlMTYgc3BvcnQ7XG4gXG4mIzQzO1x0Y2ZnID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS1cdTAwM2VjZmcpO1xuJiM0MztcdGlmICh1bmxpa2VseSghY2ZnKSlcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiBcdGlmIChpcF90dW5uZWxfaW5mb19hZihpbmZvKSA9PSBBRl9JTkVUKSB7XG4gXHRcdHN0cnVjdCBydGFibGUgKnJ0O1xuIFx0XHRzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzNCA9IHJjdV9kZXJlZmVyZW5jZShnZW5ldmUtXHUwMDNlc29jazQpO1xuQEAgLTE2MDYsMTQgJiM0MzsxNjI1LDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHRcdHVzZV9jYWNoZSA9IGlwX3R1bm5lbF9kc3RfY2FjaGVfdXNhYmxlKHNrYiwgaW5mbyk7XG4tXHRcdHRvcyA9IGdlbmV2ZV9nZXRfZHNmaWVsZChza2IsIGRldiwgaW5mbywgXHUwMDI2dXNlX2NhY2hlKTtcbiYjNDM7XHRcdHRvcyA9IGdlbmV2ZV9nZXRfZHNmaWVsZChza2IsIGRldiwgY2ZnLCBpbmZvLCBcdTAwMjZ1c2VfY2FjaGUpO1xuIFx0XHRzcG9ydCA9IHVkcF9mbG93X3NyY19wb3J0KGdlbmV2ZS1cdTAwM2VuZXQsIHNrYixcbi1cdFx0XHRcdFx0ICBnZW5ldmUtXHUwMDNlY2ZnLnBvcnRfbWluLFxuLVx0XHRcdFx0XHQgIGdlbmV2ZS1cdTAwM2VjZmcucG9ydF9tYXgsIHRydWUpO1xuJiM0MztcdFx0XHRcdFx0ICBjZmctXHUwMDNlcG9ydF9taW4sXG4mIzQzO1x0XHRcdFx0XHQgIGNmZy1cdTAwM2Vwb3J0X21heCwgdHJ1ZSk7XG4gXG4gXHRcdHJ0ID0gdWRwX3R1bm5lbF9kc3RfbG9va3VwKHNrYiwgZGV2LCBnZW5ldmUtXHUwMDNlbmV0LCAwLCBcdTAwMjZzYWRkcixcbiBcdFx0XHRcdFx0ICAgXHUwMDI2aW5mby1cdTAwM2VrZXksXG4tXHRcdFx0XHRcdCAgIHNwb3J0LCBnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnRwX2RzdCxcbiYjNDM7XHRcdFx0XHRcdCAgIHNwb3J0LCBjZmctXHUwMDNlaW5mby5rZXkudHBfZHN0LFxuIFx0XHRcdFx0XHQgICB0b3MsXG4gXHRcdFx0XHRcdCAgIHVzZV9jYWNoZSA/IFx1MDAyNmluZm8tXHUwMDNlZHN0X2NhY2hlIDogTlVMTCk7XG4gXHRcdGlmIChJU19FUlIocnQpKVxuQEAgLTE2MzMsMTQgJiM0MzsxNjUyLDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHRcdHVzZV9jYWNoZSA9IGlwX3R1bm5lbF9kc3RfY2FjaGVfdXNhYmxlKHNrYiwgaW5mbyk7XG4tXHRcdHByaW8gPSBnZW5ldmVfZ2V0X2RzZmllbGQoc2tiLCBkZXYsIGluZm8sIFx1MDAyNnVzZV9jYWNoZSk7XG4mIzQzO1x0XHRwcmlvID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBjZmcsIGluZm8sIFx1MDAyNnVzZV9jYWNoZSk7XG4gXHRcdHNwb3J0ID0gdWRwX2Zsb3dfc3JjX3BvcnQoZ2VuZXZlLVx1MDAzZW5ldCwgc2tiLFxuLVx0XHRcdFx0XHQgIGdlbmV2ZS1cdTAwM2VjZmcucG9ydF9taW4sXG4tXHRcdFx0XHRcdCAgZ2VuZXZlLVx1MDAzZWNmZy5wb3J0X21heCwgdHJ1ZSk7XG4mIzQzO1x0XHRcdFx0XHQgIGNmZy1cdTAwM2Vwb3J0X21pbixcbiYjNDM7XHRcdFx0XHRcdCAgY2ZnLVx1MDAzZXBvcnRfbWF4LCB0cnVlKTtcbiBcbiBcdFx0ZHN0ID0gdWRwX3R1bm5lbDZfZHN0X2xvb2t1cChza2IsIGRldiwgZ2VuZXZlLVx1MDAzZW5ldCwgZ3M2LVx1MDAzZXNrLCAwLFxuIFx0XHRcdFx0XHQgICAgIFx1MDAyNnNhZGRyLCBcdTAwMjZpbmZvLVx1MDAzZWtleSwgc3BvcnQsXG4tXHRcdFx0XHRcdCAgICAgZ2VuZXZlLVx1MDAzZWNmZy5pbmZvLmtleS50cF9kc3QsIHByaW8sXG4mIzQzO1x0XHRcdFx0XHQgICAgIGNmZy1cdTAwM2VpbmZvLmtleS50cF9kc3QsIHByaW8sXG4gXHRcdFx0XHRcdCAgICAgdXNlX2NhY2hlID8gXHUwMDI2aW5mby1cdTAwM2Vkc3RfY2FjaGUgOiBOVUxMKTtcbiBcdFx0aWYgKElTX0VSUihkc3QpKVxuIFx0XHRcdHJldHVybiBQVFJfRVJSKGRzdCk7XG5AQCAtMTY1Myw3ICYjNDM7MTY3Miw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR9XG4gXG4gXHRpbmZvLVx1MDAzZWtleS50cF9zcmMgPSBzcG9ydDtcbi1cdGluZm8tXHUwMDNla2V5LnRwX2RzdCA9IGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudHBfZHN0O1xuJiM0MztcdGluZm8tXHUwMDNla2V5LnRwX2RzdCA9IGNmZy1cdTAwM2VpbmZvLmtleS50cF9kc3Q7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTcwOSw3ICYjNDM7MTcyOCw1MCBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfb2ZmbG9hZF9yeF9wb3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHB1c2gpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IGdlbmV2ZV9jb25maWcgKmdlbmV2ZV9jb25maWdfYWxsb2MoY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKnNyYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmc7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0Y2ZnID0ga21lbWR1cChzcmMsIHNpemVvZigqc3JjKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFjZmcpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XG4mIzQzO1x0Y2ZnLVx1MDAzZWluZm8uZHN0X2NhY2hlLmNhY2hlID0gTlVMTDtcbiYjNDM7XHRlcnIgPSBkc3RfY2FjaGVfaW5pdChcdTAwMjZjZmctXHUwMDNlaW5mby5kc3RfY2FjaGUsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGtmcmVlKGNmZyk7XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNmZztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZ2VuZXZlX2NvbmZpZ19mcmVlKHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY2ZnKSB7XG4mIzQzO1x0XHRkc3RfY2FjaGVfZGVzdHJveShcdTAwMjZjZmctXHUwMDNlaW5mby5kc3RfY2FjaGUpO1xuJiM0MztcdFx0a2ZyZWUoY2ZnKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGdlbmV2ZV9jb25maWdfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZywgcmN1KTtcbiYjNDM7XG4mIzQzO1x0Z2VuZXZlX2NvbmZpZ19mcmVlKGNmZyk7XG4mIzQzO31cbiYjNDM7XG4gLyogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi9cbiYjNDM7c3RhdGljIHZvaWQgZ2VuZXZlX2ZyZWVfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnZW5ldmUtXHUwMDNlY2ZnLCAxKTtcbiYjNDM7XG4mIzQzO1x0Z2VuZXZlX2NvbmZpZ19mcmVlKGNmZyk7XG4mIzQzO1x0UkNVX0lOSVRfUE9JTlRFUihnZW5ldmUtXHUwMDNlY2ZnLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBnZW5ldmVfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRldGhlcl9zZXR1cChkZXYpO1xuQEAgLTE3MTcsNiAmIzQzOzE3NzksNyBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2Z2VuZXZlX25ldGRldl9vcHM7XG4gXHRkZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZnZW5ldmVfZXRodG9vbF9vcHM7XG4gXHRkZXYtXHUwMDNlbmVlZHNfZnJlZV9uZXRkZXYgPSB0cnVlO1xuJiM0MztcdGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3IgPSBnZW5ldmVfZnJlZV9kZXY7XG4gXG4gXHRTRVRfTkVUREVWX0RFVlRZUEUoZGV2LCBcdTAwMjZnZW5ldmVfdHlwZSk7XG4gXG5AQCAtMTg3OCwxNSAmIzQzOzE5NDEsMTcgQEAgc3RhdGljIHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmVfZmluZF9kZXYoc3RydWN0IGdlbmV2ZV9uZXQgKmduLFxuIFx0KnR1bl9vbl9zYW1lX3BvcnQgPSBmYWxzZTtcbiBcdCp0dW5fY29sbGVjdF9tZCA9IGZhbHNlO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShnZW5ldmUsIFx1MDAyNmduLVx1MDAzZWdlbmV2ZV9saXN0LCBuZXh0KSB7XG4tXHRcdGlmIChpbmZvLVx1MDAzZWtleS50cF9kc3QgPT0gZ2VuZXZlLVx1MDAzZWNmZy5pbmZvLmtleS50cF9kc3QgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAoY2ZnLVx1MDAzZWR1YWxzdGFjayB8fCBnZW5ldmUtXHUwMDNlY2ZnLmR1YWxzdGFjayB8fFxuLVx0XHQgICAgIGdlbmV2ZV9zYWRkcl9jb25mbGljdChpbmZvLCBcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLmluZm8pKSkge1xuLVx0XHRcdCp0dW5fY29sbGVjdF9tZCB8PSBnZW5ldmUtXHUwMDNlY2ZnLmNvbGxlY3RfbWQ7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqZ2NmZyA9IHJ0bmxfZGVyZWZlcmVuY2UoZ2VuZXZlLVx1MDAzZWNmZyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGluZm8tXHUwMDNla2V5LnRwX2RzdCA9PSBnY2ZnLVx1MDAzZWluZm8ua2V5LnRwX2RzdCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoY2ZnLVx1MDAzZWR1YWxzdGFjayB8fCBnY2ZnLVx1MDAzZWR1YWxzdGFjayB8fFxuJiM0MztcdFx0ICAgICBnZW5ldmVfc2FkZHJfY29uZmxpY3QoaW5mbywgXHUwMDI2Z2NmZy1cdTAwM2VpbmZvKSkpIHtcbiYjNDM7XHRcdFx0KnR1bl9jb2xsZWN0X21kIHw9IGdjZmctXHUwMDNlY29sbGVjdF9tZDtcbiBcdFx0XHQqdHVuX29uX3NhbWVfcG9ydCA9IHRydWU7XG4gXHRcdH1cbi1cdFx0aWYgKGluZm8tXHUwMDNla2V5LnR1bl9pZCA9PSBnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnR1bl9pZCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGluZm8tXHUwMDNla2V5LnRwX2RzdCA9PSBnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnRwX2RzdCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICFtZW1jbXAoXHUwMDI2aW5mby1cdTAwM2VrZXkudSwgXHUwMDI2Z2VuZXZlLVx1MDAzZWNmZy5pbmZvLmtleS51LCBzaXplb2YoaW5mby1cdTAwM2VrZXkudSkpKVxuJiM0MztcdFx0aWYgKGluZm8tXHUwMDNla2V5LnR1bl9pZCA9PSBnY2ZnLVx1MDAzZWluZm8ua2V5LnR1bl9pZCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBpbmZvLVx1MDAzZWtleS50cF9kc3QgPT0gZ2NmZy1cdTAwM2VpbmZvLmtleS50cF9kc3QgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIW1lbWNtcChcdTAwMjZpbmZvLVx1MDAzZWtleS51LCBcdTAwMjZnY2ZnLVx1MDAzZWluZm8ua2V5LnUsIHNpemVvZihpbmZvLVx1MDAzZWtleS51KSkpXG4gXHRcdFx0dCA9IGdlbmV2ZTtcbiBcdH1cbiBcdHJldHVybiB0O1xuQEAgLTE5MjIsNiAmIzQzOzE5ODcsNyBAQCBzdGF0aWMgaW50IGdlbmV2ZV9jb25maWd1cmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0c3RydWN0IGdlbmV2ZV9kZXYgKnQsICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gXHUwMDI2Y2ZnLVx1MDAzZWluZm87XG4gXHRib29sIHR1bl9jb2xsZWN0X21kLCB0dW5fb25fc2FtZV9wb3J0O1xuJiM0MztcdHN0cnVjdCBnZW5ldmVfY29uZmlnICpuZXdfY2ZnO1xuIFx0aW50IGVyciwgZW5jYXBfbGVuO1xuIFxuIFx0aWYgKGNmZy1cdTAwM2Vjb2xsZWN0X21kIFx1MDAyNlx1MDAyNiAhaXNfdG5sX2luZm9femVybyhpbmZvKSkge1xuQEAgLTE5NjIsMTAgJiM0MzsyMDI4LDEzIEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2NvbmZpZ3VyZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGRzdF9jYWNoZV9yZXNldChcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLmluZm8uZHN0X2NhY2hlKTtcbi1cdG1lbWNweShcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLCBjZmcsIHNpemVvZigqY2ZnKSk7XG4mIzQzO1x0bmV3X2NmZyA9IGdlbmV2ZV9jb25maWdfYWxsb2MoY2ZnKTtcbiYjNDM7XHRpZiAoSVNfRVJSKG5ld19jZmcpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIobmV3X2NmZyk7XG4mIzQzO1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtXHUwMDNlY2ZnLCBuZXdfY2ZnKTtcbiBcbi1cdGlmIChnZW5ldmUtXHUwMDNlY2ZnLmlubmVyX3Byb3RvX2luaGVyaXQpIHtcbiYjNDM7XHRpZiAoY2ZnLVx1MDAzZWlubmVyX3Byb3RvX2luaGVyaXQpIHtcbiBcdFx0ZGV2LVx1MDAzZWhlYWRlcl9vcHMgPSBOVUxMO1xuIFx0XHRkZXYtXHUwMDNldHlwZSA9IEFSUEhSRF9OT05FO1xuIFx0XHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gMDtcbkBAIC0yMzIzLDgxICYjNDM7MjM5Miw0NSBAQCBzdGF0aWMgaW50IGdlbmV2ZV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tLyogUXVpZXNjZXMgdGhlIGdlbmV2ZSBkZXZpY2UgZGF0YSBwYXRoIGZvciBib3RoIFRYIGFuZCBSWC5cbi0gKlxuLSAqIE9uIHRyYW5zbWl0IGdlbmV2ZSBjaGVja3MgZm9yIG5vbi1OVUxMIGdlbmV2ZV9zb2NrIGJlZm9yZSBpdCBwcm9jZWVkcy5cbi0gKiBTbywgaWYgd2Ugc2V0IHRoYXQgc29ja2V0IHRvIE5VTEwgdW5kZXIgUkNVIGFuZCB3YWl0IGZvciBzeW5jaHJvbml6ZV9uZXQoKVxuLSAqIHRvIGNvbXBsZXRlIGZvciB0aGUgZXhpc3Rpbmcgc2V0IG9mIGluLWZsaWdodCBwYWNrZXRzIHRvIGJlIHRyYW5zbWl0dGVkLFxuLSAqIHRoZW4gd2Ugd291bGQgaGF2ZSBxdWllc2NlZCB0aGUgdHJhbnNtaXQgZGF0YSBwYXRoLiBBbGwgdGhlIGZ1dHVyZSBwYWNrZXRzXG4tICogd2lsbCBnZXQgZHJvcHBlZCB1bnRpbCB3ZSB1bnF1aWVzY2UgdGhlIGRhdGEgcGF0aC5cbi0gKlxuLSAqIE9uIHJlY2VpdmUgZ2VuZXZlIGRlcmVmZXJlbmNlIHRoZSBnZW5ldmVfc29jayBzdGFzaGVkIGluIHRoZSBzb2NrZXQuIFNvLFxuLSAqIGlmIHdlIHNldCB0aGF0IHRvIE5VTEwgdW5kZXIgUkNVIGFuZCB3YWl0IGZvciBzeW5jaHJvbml6ZV9uZXQoKSB0b1xuLSAqIGNvbXBsZXRlLCB0aGVuIHdlIHdvdWxkIGhhdmUgcXVpZXNjZWQgdGhlIHJlY2VpdmUgZGF0YSBwYXRoLlxuJiM0MzsvKiBVcGRhdGUgdGhlIGRldmljZSBjb25maWd1cmF0aW9uIHVuZGVyIFJUTkwuXG4mIzQzOyAqIFdlIHVzZSBSQ1Ugc3dhcCB0byB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gYXRvbWljYWxseSwgc28gdGhlIGRhdGEgcGF0aFxuJiM0MzsgKiAoYm90aCBUWCBhbmQgUlgpIGNhbiBjb250aW51ZSBydW5uaW5nIHdpdGhvdXQgaW50ZXJydXB0aW9uIG9yIHBhY2tldCBsb3NzLlxuICAqL1xuLXN0YXRpYyB2b2lkIGdlbmV2ZV9xdWllc2NlKHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsIHN0cnVjdCBnZW5ldmVfc29jayAqKmdzNCxcbi1cdFx0XHQgICBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKipnczYpXG4te1xuLVx0KmdzNCA9IHJ0bmxfZGVyZWZlcmVuY2UoZ2VuZXZlLVx1MDAzZXNvY2s0KTtcbi1cdHJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtXHUwMDNlc29jazQsIE5VTEwpO1xuLVx0aWYgKCpnczQpXG4tXHRcdHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKCgqZ3M0KS1cdTAwM2VzaywgTlVMTCk7XG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4tXHQqZ3M2ID0gcnRubF9kZXJlZmVyZW5jZShnZW5ldmUtXHUwMDNlc29jazYpO1xuLVx0cmN1X2Fzc2lnbl9wb2ludGVyKGdlbmV2ZS1cdTAwM2Vzb2NrNiwgTlVMTCk7XG4tXHRpZiAoKmdzNilcbi1cdFx0cmN1X2Fzc2lnbl9za191c2VyX2RhdGEoKCpnczYpLVx1MDAzZXNrLCBOVUxMKTtcbi0jZWxzZVxuLVx0KmdzNiA9IE5VTEw7XG4tI2VuZGlmXG4tXHRzeW5jaHJvbml6ZV9uZXQoKTtcbi19XG4tXG4tLyogUmVzdW1lcyB0aGUgZ2VuZXZlIGRldmljZSBkYXRhIHBhdGggZm9yIGJvdGggVFggYW5kIFJYLiAqL1xuLXN0YXRpYyB2b2lkIGdlbmV2ZV91bnF1aWVzY2Uoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgc3RydWN0IGdlbmV2ZV9zb2NrICpnczQsXG4tXHRcdFx0ICAgICBzdHJ1Y3QgZ2VuZXZlX3NvY2sgX19tYXliZV91bnVzZWQgKmdzNilcbi17XG4tXHRyY3VfYXNzaWduX3BvaW50ZXIoZ2VuZXZlLVx1MDAzZXNvY2s0LCBnczQpO1xuLVx0aWYgKGdzNClcbi1cdFx0cmN1X2Fzc2lnbl9za191c2VyX2RhdGEoZ3M0LVx1MDAzZXNrLCBnczQpO1xuLSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuLVx0cmN1X2Fzc2lnbl9wb2ludGVyKGdlbmV2ZS1cdTAwM2Vzb2NrNiwgZ3M2KTtcbi1cdGlmIChnczYpXG4tXHRcdHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKGdzNi1cdTAwM2VzaywgZ3M2KTtcbi0jZW5kaWZcbi19XG4tXG4gc3RhdGljIGludCBnZW5ldmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFx0XHRcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuIFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0c3RydWN0IGdlbmV2ZV9zb2NrICpnczQsICpnczY7XG4tXHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyBjZmc7XG4mIzQzO1x0c3RydWN0IGdlbmV2ZV9jb25maWcgKm9sZF9jZmcgPSBydG5sX2RlcmVmZXJlbmNlKGdlbmV2ZS1cdTAwM2VjZmcpO1xuJiM0MztcdHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmc7XG4gXHRpbnQgZXJyO1xuIFxuIFx0LyogSWYgdGhlIGdlbmV2ZSBkZXZpY2UgaXMgY29uZmlndXJlZCBmb3IgbWV0YWRhdGEgKG9yIGV4dGVybmFsbHlcbiBcdCAqIGNvbnRyb2xsZWQsIGZvciBleGFtcGxlLCBPVlMpLCB0aGVuIG5vdGhpbmcgY2FuIGJlIGNoYW5nZWQuXG4gXHQgKi9cbi1cdGlmIChnZW5ldmUtXHUwMDNlY2ZnLmNvbGxlY3RfbWQpXG4mIzQzO1x0aWYgKG9sZF9jZmctXHUwMDNlY29sbGVjdF9tZClcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0LyogU3RhcnQgd2l0aCB0aGUgZXhpc3RpbmcgaW5mby4gKi9cbi1cdG1lbWNweShcdTAwMjZjZmcsIFx1MDAyNmdlbmV2ZS1cdTAwM2VjZmcsIHNpemVvZihjZmcpKTtcbi1cdGVyciA9IGdlbmV2ZV9ubDJpbmZvKHRiLCBkYXRhLCBleHRhY2ssIFx1MDAyNmNmZywgdHJ1ZSk7XG4mIzQzO1x0Y2ZnID0gZ2VuZXZlX2NvbmZpZ19hbGxvYyhvbGRfY2ZnKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGNmZykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihjZmcpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBnZW5ldmVfbmwyaW5mbyh0YiwgZGF0YSwgZXh0YWNrLCBjZmcsIHRydWUpO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfY2ZnO1xuIFxuLVx0aWYgKCFnZW5ldmVfZHN0X2FkZHJfZXF1YWwoXHUwMDI2Z2VuZXZlLVx1MDAzZWNmZy5pbmZvLCBcdTAwMjZjZmcuaW5mbykpIHtcbi1cdFx0ZHN0X2NhY2hlX3Jlc2V0KFx1MDAyNmNmZy5pbmZvLmRzdF9jYWNoZSk7XG4tXHRcdGdlbmV2ZV9saW5rX2NvbmZpZyhkZXYsIFx1MDAyNmNmZy5pbmZvLCB0Yik7XG4tXHR9XG4mIzQzO1x0aWYgKCFnZW5ldmVfZHN0X2FkZHJfZXF1YWwoXHUwMDI2b2xkX2NmZy1cdTAwM2VpbmZvLCBcdTAwMjZjZmctXHUwMDNlaW5mbykpXG4mIzQzO1x0XHRnZW5ldmVfbGlua19jb25maWcoZGV2LCBcdTAwMjZjZmctXHUwMDNlaW5mbywgdGIpO1xuIFxuLVx0Z2VuZXZlX3F1aWVzY2UoZ2VuZXZlLCBcdTAwMjZnczQsIFx1MDAyNmdzNik7XG4tXHRtZW1jcHkoXHUwMDI2Z2VuZXZlLVx1MDAzZWNmZywgXHUwMDI2Y2ZnLCBzaXplb2YoY2ZnKSk7XG4tXHRnZW5ldmVfdW5xdWllc2NlKGdlbmV2ZSwgZ3M0LCBnczYpO1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtXHUwMDNlY2ZnLCBjZmcpO1xuIFxuJiM0MztcdGNhbGxfcmN1X2h1cnJ5KFx1MDAyNm9sZF9jZmctXHUwMDNlcmN1LCBnZW5ldmVfY29uZmlnX2ZyZWVfcmN1KTtcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2ZyZWVfY2ZnOlxuJiM0MztcdGdlbmV2ZV9jb25maWdfZnJlZShjZmcpO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGdlbmV2ZV9kZWxsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG5AQCAtMjQzMSwxNiAmIzQzOzI0NjQsMjcgQEAgc3RhdGljIHNpemVfdCBnZW5ldmVfZ2V0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBzdGF0aWMgaW50IGdlbmV2ZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4tXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9IFx1MDAyNmdlbmV2ZS1cdTAwM2VjZmcuaW5mbztcbi1cdGJvb2wgdHRsX2luaGVyaXQgPSBnZW5ldmUtXHUwMDNlY2ZnLnR0bF9pbmhlcml0O1xuLVx0Ym9vbCBtZXRhZGF0YSA9IGdlbmV2ZS1cdTAwM2VjZmcuY29sbGVjdF9tZDtcbi1cdHN0cnVjdCBpZmxhX2dlbmV2ZV9wb3J0X3JhbmdlIHBvcnRzID0ge1xuLVx0XHQubG93XHQ9IGh0b25zKGdlbmV2ZS1cdTAwM2VjZmcucG9ydF9taW4pLFxuLVx0XHQuaGlnaFx0PSBodG9ucyhnZW5ldmUtXHUwMDNlY2ZnLnBvcnRfbWF4KSxcbi1cdH07XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0c3RydWN0IGlmbGFfZ2VuZXZlX3BvcnRfcmFuZ2UgcG9ydHM7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm87XG4mIzQzO1x0Ym9vbCB0dGxfaW5oZXJpdCwgbWV0YWRhdGE7XG4gXHRfX3U4IHRtcF92bmlbM107XG4gXHRfX3UzMiB2bmk7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRjZmcgPSByY3VfZGVyZWZlcmVuY2UoZ2VuZXZlLVx1MDAzZWNmZyk7XG4mIzQzO1x0aWYgKCFjZmcpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9ERVY7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGluZm8gPSBcdTAwMjZjZmctXHUwMDNlaW5mbztcbiYjNDM7XHR0dGxfaW5oZXJpdCA9IGNmZy1cdTAwM2V0dGxfaW5oZXJpdDtcbiYjNDM7XHRtZXRhZGF0YSA9IGNmZy1cdTAwM2Vjb2xsZWN0X21kO1xuJiM0MztcdHBvcnRzLmxvdyA9IGh0b25zKGNmZy1cdTAwM2Vwb3J0X21pbik7XG4mIzQzO1x0cG9ydHMuaGlnaCA9IGh0b25zKGNmZy1cdTAwM2Vwb3J0X21heCk7XG4gXG4gXHR0dW5uZWxfaWRfdG9fdm5pKGluZm8tXHUwMDNla2V5LnR1bl9pZCwgdG1wX3ZuaSk7XG4gXHR2bmkgPSAodG1wX3ZuaVswXSBcdTAwM2NcdTAwM2MgMTYpIHwgKHRtcF92bmlbMV0gXHUwMDNjXHUwMDNjIDgpIHwgdG1wX3ZuaVsyXTtcbkBAIC0yNDY4LDE3ICYjNDM7MjUxMiwxNyBAQCBzdGF0aWMgaW50IGdlbmV2ZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAjZW5kaWZcbiBcdH1cbiBcbi1cdGlmICghZ2VuZXZlLVx1MDAzZWNmZy5kdWFsc3RhY2spIHtcbiYjNDM7XHRpZiAoIWNmZy1cdTAwM2VkdWFsc3RhY2spIHtcbiBcdFx0aWYgKGlwX3R1bm5lbF9pbmZvX2FmKGluZm8pID09IEFGX0lORVQpIHtcbiBcdFx0XHRpZiAoKGluZm8tXHUwMDNla2V5LnUuaXB2NC5zcmMgfHxcbi1cdFx0XHQgICAgIGdlbmV2ZS1cdTAwM2VjZmcuY29sbGVjdF9tZCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAgbWV0YWRhdGEpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICBubGFfcHV0X2luX2FkZHIoc2tiLCBJRkxBX0dFTkVWRV9MT0NBTCxcbiBcdFx0XHRcdFx0ICAgIGluZm8tXHUwMDNla2V5LnUuaXB2NC5zcmMpKVxuIFx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0aWYgKCghaXB2Nl9hZGRyX2FueShcdTAwMjZpbmZvLVx1MDAzZWtleS51LmlwdjYuc3JjKSB8fFxuLVx0XHRcdCAgICAgZ2VuZXZlLVx1MDAzZWNmZy5jb2xsZWN0X21kKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICBtZXRhZGF0YSkgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgIG5sYV9wdXRfaW42X2FkZHIoc2tiLCBJRkxBX0dFTkVWRV9MT0NBTDYsXG4gXHRcdFx0XHRcdCAgICAgXHUwMDI2aW5mby1cdTAwM2VrZXkudS5pcHY2LnNyYykpXG4gXHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbkBAIC0yNDkxLDcgJiM0MzsyNTM1LDcgQEAgc3RhdGljIGludCBnZW5ldmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHQgICAgbmxhX3B1dF9iZTMyKHNrYiwgSUZMQV9HRU5FVkVfTEFCRUwsIGluZm8tXHUwMDNla2V5LmxhYmVsKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4tXHRpZiAobmxhX3B1dF91OChza2IsIElGTEFfR0VORVZFX0RGLCBnZW5ldmUtXHUwMDNlY2ZnLmRmKSlcbiYjNDM7XHRpZiAobmxhX3B1dF91OChza2IsIElGTEFfR0VORVZFX0RGLCBjZmctXHUwMDNlZGYpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbiBcdGlmIChubGFfcHV0X2JlMTYoc2tiLCBJRkxBX0dFTkVWRV9QT1JULCBpbmZvLVx1MDAzZWtleS50cF9kc3QpKVxuQEAgLTI1MDIsMjggJiM0MzsyNTQ2LDMxIEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBJRkxBX0dFTkVWRV9VRFBfWkVST19DU1VNNl9SWCxcbi1cdFx0ICAgICAgICFnZW5ldmUtXHUwMDNlY2ZnLnVzZV91ZHA2X3J4X2NoZWNrc3VtcykpXG4mIzQzO1x0XHQgICAgICAgIWNmZy1cdTAwM2V1c2VfdWRwNl9yeF9jaGVja3N1bXMpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiAjZW5kaWZcbiBcbiBcdGlmIChubGFfcHV0X3U4KHNrYiwgSUZMQV9HRU5FVkVfVFRMX0lOSEVSSVQsIHR0bF9pbmhlcml0KSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4tXHRpZiAoZ2VuZXZlLVx1MDAzZWNmZy5pbm5lcl9wcm90b19pbmhlcml0IFx1MDAyNlx1MDAyNlxuJiM0MztcdGlmIChjZmctXHUwMDNlaW5uZXJfcHJvdG9faW5oZXJpdCBcdTAwMjZcdTAwMjZcbiBcdCAgICBubGFfcHV0X2ZsYWcoc2tiLCBJRkxBX0dFTkVWRV9JTk5FUl9QUk9UT19JTkhFUklUKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4gXHRpZiAobmxhX3B1dChza2IsIElGTEFfR0VORVZFX1BPUlRfUkFOR0UsIHNpemVvZihwb3J0cyksIFx1MDAyNnBvcnRzKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4tXHRpZiAoZ2VuZXZlLVx1MDAzZWNmZy5ncm9faGludCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRpZiAoY2ZnLVx1MDAzZWdyb19oaW50IFx1MDAyNlx1MDAyNlxuIFx0ICAgIG5sYV9wdXRfZmxhZyhza2IsIElGTEFfR0VORVZFX0dST19ISU5UKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7b3V0OlxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdHJldHVybiBlcnI7XG4gXG4gbmxhX3B1dF9mYWlsdXJlOlxuLVx0cmV0dXJuIC1FTVNHU0laRTtcbiYjNDM7XHRlcnIgPSAtRU1TR1NJWkU7XG4mIzQzO1x0Z290byBvdXQ7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBnZW5ldmVfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbkBAIC0yNjcxLDYgJiM0MzsyNzE4LDcgQEAgc3RhdGljIHZvaWQgX19leGl0IGdlbmV2ZV9jbGVhbnVwX21vZHVsZSh2b2lkKVxuIFx0cnRubF9saW5rX3VucmVnaXN0ZXIoXHUwMDI2Z2VuZXZlX2xpbmtfb3BzKTtcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNmdlbmV2ZV9ub3RpZmllcl9ibG9jayk7XG4gXHR1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2Z2VuZXZlX25ldF9vcHMpO1xuJiM0MztcdHJjdV9iYXJyaWVyKCk7XG4gfVxuIG1vZHVsZV9leGl0KGdlbmV2ZV9jbGVhbnVwX21vZHVsZSk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7R0VORVZFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VuZXZlX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7Z2VuZXZlX2NvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtnZW5ldmVfZmlsbF9pbmZvJiMzNDssCiAgICAmIzM0O2dlbmV2ZV9jb25maWdfYWxsb2MmIzM0OywKICAgICYjMzQ7Z2VuZXZlX2ZyZWVfZGV2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgR0VORVZFIGRyaXZlciB0byB1c2UgUkNVIGZvciBpdHMgY29uZmlndXJhdGlvbiAoYHN0cnVjdCBnZW5ldmVfY29uZmlnYCksIHJlcGxhY2luZyB0aGUgcHJldmlvdXMgc3luY2hyb25vdXMgYGdlbmV2ZV9xdWllc2NlYC9gZ2VuZXZlX3VucXVpZXNjZWAgbWVjaGFuaXNtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGhvdyBjb25maWd1cmF0aW9uIHVwZGF0ZXMgYXJlIGhhbmRsZWQgY29uY3VycmVudGx5IHdpdGggdGhlIGRhdGEgcGF0aC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgY29udHJvbCBwYXRoIGZ1bmN0aW9ucyB0aGF0IGFsbG9jYXRlLCB1cGRhdGUsIGFuZCBmcmVlIHRoZSBjb25maWd1cmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYTFkMDk0MWRiYzkwZDYzOWE5MjJjYWQ2MDIxNWI5Mzc3NWI5NTRlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgNyAyMzo1MzoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dlbmV2ZS5jIGIvZHJpdmVycy9uZXQvZ2VuZXZlLmMKaW5kZXggMzk2ZTFhMTEzY2Q0OWUuLjE3YmQzNTQzZDU4N2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9nZW5ldmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9nZW5ldmUuYwpAQCAtODIsNiAmIzQzOzgyLDcgQEAgc3RydWN0IGdlbmV2ZV9jb25maWcgewogCXUxNgkJCXBvcnRfbWluOwogCXUxNgkJCXBvcnRfbWF4OwogCiYjNDM7CXN0cnVjdCByY3VfaGVhZAkJcmN1OwogCS8qIE11c3QgYmUgbGFzdCAtLWVuZHMgaW4gYSBmbGV4aWJsZS1hcnJheSBtZW1iZXIuICovCiAJc3RydWN0IGlwX3R1bm5lbF9pbmZvCWluZm87CiB9OwpAQCAtMTAwLDcgJiM0MzsxMDEsNyBAQCBzdHJ1Y3QgZ2VuZXZlX2RldiB7CiAjZW5kaWYKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgbmV4dDsJLyogZ2VuZXZlJiMzOTtzIHBlciBuYW1lc3BhY2UgbGlzdCAqLwogCXN0cnVjdCBncm9fY2VsbHMgICBncm9fY2VsbHM7Ci0Jc3RydWN0IGdlbmV2ZV9jb25maWcgY2ZnOwomIzQzOwlzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyBfX3JjdSAqY2ZnOwogfTsKIAogc3RydWN0IGdlbmV2ZV9zb2NrIHsKQEAgLTE4Miw4ICYjNDM7MTgzLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlX2xvb2t1cChzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzLAogCWhhc2ggPSBnZW5ldmVfbmV0X3ZuaV9oYXNoKHZuaSk7CiAJdm5pX2xpc3RfaGVhZCA9ICZhbXA7Z3MtJmd0O3ZuaV9saXN0W2hhc2hdOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCB2bmlfbGlzdF9oZWFkLCBobGlzdCkgewotCQlpZiAoZXFfdHVuX2lkX2FuZF92bmkoKHU4ICopJmFtcDtub2RlLSZndDtnZW5ldmUtJmd0O2NmZy5pbmZvLmtleS50dW5faWQsIHZuaSkgJmFtcDsmYW1wOwotCQkgICAgYWRkciA9PSBub2RlLSZndDtnZW5ldmUtJmd0O2NmZy5pbmZvLmtleS51LmlwdjQuZHN0KQomIzQzOwkJY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyA9IHJjdV9kZXJlZmVyZW5jZShub2RlLSZndDtnZW5ldmUtJmd0O2NmZyk7CiYjNDM7CiYjNDM7CQlpZiAoZXFfdHVuX2lkX2FuZF92bmkoKHU4ICopJmFtcDtjZmctJmd0O2luZm8ua2V5LnR1bl9pZCwgdm5pKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgYWRkciA9PSBjZmctJmd0O2luZm8ua2V5LnUuaXB2NC5kc3QpCiAJCQlyZXR1cm4gbm9kZS0mZ3Q7Z2VuZXZlOwogCX0KIAlyZXR1cm4gTlVMTDsKQEAgLTIwMSw4ICYjNDM7MjA0LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlNl9sb29rdXAoc3RydWN0IGdlbmV2ZV9zb2NrICpncywKIAloYXNoID0gZ2VuZXZlX25ldF92bmlfaGFzaCh2bmkpOwogCXZuaV9saXN0X2hlYWQgPSAmYW1wO2dzLSZndDt2bmlfbGlzdFtoYXNoXTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uobm9kZSwgdm5pX2xpc3RfaGVhZCwgaGxpc3QpIHsKLQkJaWYgKGVxX3R1bl9pZF9hbmRfdm5pKCh1OCAqKSZhbXA7bm9kZS0mZ3Q7Z2VuZXZlLSZndDtjZmcuaW5mby5rZXkudHVuX2lkLCB2bmkpICZhbXA7JmFtcDsKLQkJICAgIGlwdjZfYWRkcl9lcXVhbCgmYW1wO2FkZHI2LCAmYW1wO25vZGUtJmd0O2dlbmV2ZS0mZ3Q7Y2ZnLmluZm8ua2V5LnUuaXB2Ni5kc3QpKQomIzQzOwkJY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyA9IHJjdV9kZXJlZmVyZW5jZShub2RlLSZndDtnZW5ldmUtJmd0O2NmZyk7CiYjNDM7CiYjNDM7CQlpZiAoZXFfdHVuX2lkX2FuZF92bmkoKHU4ICopJmFtcDtjZmctJmd0O2luZm8ua2V5LnR1bl9pZCwgdm5pKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgaXB2Nl9hZGRyX2VxdWFsKCZhbXA7YWRkcjYsICZhbXA7Y2ZnLSZndDtpbmZvLmtleS51LmlwdjYuZHN0KSkKIAkJCXJldHVybiBub2RlLSZndDtnZW5ldmU7CiAJfQogCXJldHVybiBOVUxMOwpAQCAtMzg2LDExICYjNDM7MzkxLDYgQEAgc3RhdGljIGludCBnZW5ldmVfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBkc3RfY2FjaGVfaW5pdCgmYW1wO2dlbmV2ZS0mZ3Q7Y2ZnLmluZm8uZHN0X2NhY2hlLCBHRlBfS0VSTkVMKTsKLQlpZiAoZXJyKSB7Ci0JCWdyb19jZWxsc19kZXN0cm95KCZhbXA7Z2VuZXZlLSZndDtncm9fY2VsbHMpOwotCQlyZXR1cm4gZXJyOwotCX0KIAluZXRkZXZfbG9ja2RlcF9zZXRfY2xhc3NlcyhkZXYpOwogCXJldHVybiAwOwogfQpAQCAtMzk5LDcgJiM0MzszOTksNiBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7CiAKLQlkc3RfY2FjaGVfZGVzdHJveSgmYW1wO2dlbmV2ZS0mZ3Q7Y2ZnLmluZm8uZHN0X2NhY2hlKTsKIAlncm9fY2VsbHNfZGVzdHJveSgmYW1wO2dlbmV2ZS0mZ3Q7Z3JvX2NlbGxzKTsKIH0KIApAQCAtNjUwLDYgJiM0Mzs2NDksNyBAQCBzdGF0aWMgaW50IGdlbmV2ZV9wb3N0X2RlY2FwX2hpbnQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogLyogQ2FsbGJhY2sgZnJvbSBuZXQvaXB2NC91ZHAuYyB0byByZWNlaXZlIHBhY2tldHMgKi8KIHN0YXRpYyBpbnQgZ2VuZXZlX3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKJiM0MzsJY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZzsKIAlzdHJ1Y3QgZ2VuZXZlaGRyICpnZW5ldmVoOwogCXN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmU7CiAJc3RydWN0IGdlbmV2ZV9zb2NrICpnczsKQEAgLTY3NSw4ICYjNDM7Njc1LDkgQEAgc3RhdGljIGludCBnZW5ldmVfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiAJaW5uZXJfcHJvdG8gPSBnZW5ldmVoLSZndDtwcm90b190eXBlOwogCi0JaWYgKHVubGlrZWx5KCghZ2VuZXZlLSZndDtjZmcuaW5uZXJfcHJvdG9faW5oZXJpdCAmYW1wOyZhbXA7Ci0JCSAgICAgIGlubmVyX3Byb3RvICE9IGh0b25zKEVUSF9QX1RFQikpKSkgewomIzQzOwljZmcgPSByY3VfZGVyZWZlcmVuY2UoZ2VuZXZlLSZndDtjZmcpOwomIzQzOwlpZiAodW5saWtlbHkoIWNmZyB8fCAoIWNmZy0mZ3Q7aW5uZXJfcHJvdG9faW5oZXJpdCAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICAgaW5uZXJfcHJvdG8gIT0gaHRvbnMoRVRIX1BfVEVCKSkpKSB7CiAJCWRldl9kc3RhdHNfcnhfZHJvcHBlZChnZW5ldmUtJmd0O2Rldik7CiAJCWdvdG8gZHJvcDsKIAl9CkBAIC03NjIsOSAmIzQzOzc2MywxMCBAQCBzdGF0aWMgaW50IGdlbmV2ZV91ZHBfZW5jYXBfZXJyX2xvb2t1cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqZ2VuZXZlX2NyZWF0ZV9zb2NrKHN0cnVjdCBuZXQgKm5ldCwKLQkJCQkgICAgICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KQomIzQzOwkJCQkgICAgICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwKJiM0MzsJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsIGJvb2wgaXB2NikKIHsKLQlzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSAmYW1wO2dlbmV2ZS0mZ3Q7Y2ZnLmluZm87CiYjNDM7CWNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9ICZhbXA7Y2ZnLSZndDtpbmZvOwogCXN0cnVjdCB1ZHBfcG9ydF9jZmcgdWRwX2NvbmY7CiAJc3RydWN0IHNvY2tldCAqc29jazsKIAlpbnQgZXJyOwpAQCAtNzc1LDcgJiM0Mzs3NzcsNyBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKmdlbmV2ZV9jcmVhdGVfc29jayhzdHJ1Y3QgbmV0ICpuZXQsCiAJaWYgKGlwdjYpIHsKIAkJdWRwX2NvbmYuZmFtaWx5ID0gQUZfSU5FVDY7CiAJCXVkcF9jb25mLmlwdjZfdjZvbmx5ID0gMTsKLQkJdWRwX2NvbmYudXNlX3VkcDZfcnhfY2hlY2tzdW1zID0gZ2VuZXZlLSZndDtjZmcudXNlX3VkcDZfcnhfY2hlY2tzdW1zOwomIzQzOwkJdWRwX2NvbmYudXNlX3VkcDZfcnhfY2hlY2tzdW1zID0gY2ZnLSZndDt1c2VfdWRwNl9yeF9jaGVja3N1bXM7CiAJCXVkcF9jb25mLmxvY2FsX2lwNiA9IGluZm8tJmd0O2tleS51LmlwdjYuc3JjOwogCX0gZWxzZQogI2VuZGlmCkBAIC05OTEsNyAmIzQzOzk5Myw4IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2dyb19jb21wbGV0ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAKIC8qIENyZWF0ZSBuZXcgbGlzdGVuIHNvY2tldCBpZiBuZWVkZWQgKi8KIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdlbmV2ZV9zb2NrZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwKLQkJCQkJCXN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsIGJvb2wgaXB2NikKJiM0MzsJCQkJCQlzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLAomIzQzOwkJCQkJCWNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsIGJvb2wgaXB2NikKIHsKIAlzdHJ1Y3QgZ2VuZXZlX25ldCAqZ24gPSBuZXRfZ2VuZXJpYyhuZXQsIGdlbmV2ZV9uZXRfaWQpOwogCXN0cnVjdCB1ZHBfdHVubmVsX3NvY2tfY2ZnIHR1bm5lbF9jZmc7CkBAIC0xMDAzLDcgJiM0MzsxMDA2LDcgQEAgc3RhdGljIHN0cnVjdCBnZW5ldmVfc29jayAqZ2VuZXZlX3NvY2tldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LAogCWlmICghZ3MpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0Jc2sgPSBnZW5ldmVfY3JlYXRlX3NvY2sobmV0LCBnZW5ldmUsIGlwdjYpOwomIzQzOwlzayA9IGdlbmV2ZV9jcmVhdGVfc29jayhuZXQsIGdlbmV2ZSwgY2ZnLCBpcHY2KTsKIAlpZiAoSVNfRVJSKHNrKSkgewogCQlrZnJlZShncyk7CiAJCXJldHVybiBFUlJfQ0FTVChzayk7CkBAIC0xMDYwLDEyICYjNDM7MTA2MywxMyBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfc29ja19yZWxlYXNlKHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUpCiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdlbmV2ZV9maW5kX3NvY2soc3RydWN0IG5ldCAqbmV0LAotCQkJCQkgICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KQomIzQzOwkJCQkJICAgIHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsCiYjNDM7CQkJCQkgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZywgYm9vbCBpcHY2KQogewogCXN0cnVjdCBnZW5ldmVfbmV0ICpnbiA9IG5ldF9nZW5lcmljKG5ldCwgZ2VuZXZlX25ldF9pZCk7Ci0Jc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gJmFtcDtnZW5ldmUtJmd0O2NmZy5pbmZvOwomIzQzOwljb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSAmYW1wO2NmZy0mZ3Q7aW5mbzsKIAlzYV9mYW1pbHlfdCBmYW1pbHkgPSBpcHY2ID8gQUZfSU5FVDYgOiBBRl9JTkVUOwotCWJvb2wgZ3JvX2hpbnQgPSBnZW5ldmUtJmd0O2NmZy5ncm9faGludDsKJiM0MzsJYm9vbCBncm9faGludCA9IGNmZy0mZ3Q7Z3JvX2hpbnQ7CiAJX19iZTE2IGRzdF9wb3J0ID0gaW5mby0mZ3Q7a2V5LnRwX2RzdDsKIAlzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzOwogCkBAIC0xMDk1LDcgJiM0MzsxMDk5LDggQEAgc3RhdGljIHN0cnVjdCBnZW5ldmVfc29jayAqZ2VuZXZlX2ZpbmRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgZ2VuZXZlX3NvY2tfYWRkKHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsIGJvb2wgaXB2NikKJiM0MztzdGF0aWMgaW50IGdlbmV2ZV9zb2NrX2FkZChzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLAomIzQzOwkJCSAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsIGJvb2wgaXB2NikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBnZW5ldmUtJmd0O25ldDsKIAlzdHJ1Y3QgZ2VuZXZlX2Rldl9ub2RlICpub2RlOwpAQCAtMTEwMywxOSAmIzQzOzExMDgsMTkgQEAgc3RhdGljIGludCBnZW5ldmVfc29ja19hZGQoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KQogCV9fdTggdm5pWzNdOwogCV9fdTMyIGhhc2g7CiAKLQlncyA9IGdlbmV2ZV9maW5kX3NvY2sobmV0LCBnZW5ldmUsIGlwdjYpOwomIzQzOwlncyA9IGdlbmV2ZV9maW5kX3NvY2sobmV0LCBnZW5ldmUsIGNmZywgaXB2Nik7CiAJaWYgKGdzKSB7CiAJCWdzLSZndDtyZWZjbnQmIzQzOyYjNDM7OwogCQlnb3RvIG91dDsKIAl9CiAKLQlncyA9IGdlbmV2ZV9zb2NrZXRfY3JlYXRlKG5ldCwgZ2VuZXZlLCBpcHY2KTsKJiM0MzsJZ3MgPSBnZW5ldmVfc29ja2V0X2NyZWF0ZShuZXQsIGdlbmV2ZSwgY2ZnLCBpcHY2KTsKIAlpZiAoSVNfRVJSKGdzKSkKIAkJcmV0dXJuIFBUUl9FUlIoZ3MpOwogCiBvdXQ6Ci0JZ3MtJmd0O2NvbGxlY3RfbWQgPSBnZW5ldmUtJmd0O2NmZy5jb2xsZWN0X21kOwotCWdzLSZndDtncm9faGludCA9IGdlbmV2ZS0mZ3Q7Y2ZnLmdyb19oaW50OwomIzQzOwlncy0mZ3Q7Y29sbGVjdF9tZCA9IGNmZy0mZ3Q7Y29sbGVjdF9tZDsKJiM0MzsJZ3MtJmd0O2dyb19oaW50ID0gY2ZnLSZndDtncm9faGludDsKICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQogCWlmIChpcHY2KSB7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtJmd0O3NvY2s2LCBncyk7CkBAIC0xMTI4LDcgJiM0MzsxMTMzLDcgQEAgc3RhdGljIGludCBnZW5ldmVfc29ja19hZGQoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KQogCX0KIAlub2RlLSZndDtnZW5ldmUgPSBnZW5ldmU7CiAKLQl0dW5uZWxfaWRfdG9fdm5pKGdlbmV2ZS0mZ3Q7Y2ZnLmluZm8ua2V5LnR1bl9pZCwgdm5pKTsKJiM0MzsJdHVubmVsX2lkX3RvX3ZuaShjZmctJmd0O2luZm8ua2V5LnR1bl9pZCwgdm5pKTsKIAloYXNoID0gZ2VuZXZlX25ldF92bmlfaGFzaCh2bmkpOwogCWhsaXN0X2FkZF9oZWFkX3JjdSgmYW1wO25vZGUtJmd0O2hsaXN0LCAmYW1wO2dzLSZndDt2bmlfbGlzdFtoYXNoXSk7CiAJcmV0dXJuIDA7CkBAIC0xMTM3LDIxICYjNDM7MTE0MiwyMyBAQCBzdGF0aWMgaW50IGdlbmV2ZV9zb2NrX2FkZChzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBib29sIGlwdjYpCiBzdGF0aWMgaW50IGdlbmV2ZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7Ci0JYm9vbCBkdWFsc3RhY2sgPSBnZW5ldmUtJmd0O2NmZy5kdWFsc3RhY2s7Ci0JYm9vbCBpcHY0LCBpcHY2OwomIzQzOwljb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnOwomIzQzOwlib29sIGlwdjQsIGlwdjYsIGR1YWxzdGFjazsKIAlpbnQgcmV0ID0gMDsKIAotCWlwdjYgPSBnZW5ldmUtJmd0O2NmZy5pbmZvLm1vZGUgJmFtcDsgSVBfVFVOTkVMX0lORk9fSVBWNiB8fCBkdWFsc3RhY2s7CiYjNDM7CWNmZyA9IHJ0bmxfZGVyZWZlcmVuY2UoZ2VuZXZlLSZndDtjZmcpOwomIzQzOwlkdWFsc3RhY2sgPSBjZmctJmd0O2R1YWxzdGFjazsKJiM0MzsJaXB2NiA9IGNmZy0mZ3Q7aW5mby5tb2RlICZhbXA7IElQX1RVTk5FTF9JTkZPX0lQVjYgfHwgZHVhbHN0YWNrOwogCWlwdjQgPSAhaXB2NiB8fCBkdWFsc3RhY2s7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKIAlpZiAoaXB2NikgewotCQlyZXQgPSBnZW5ldmVfc29ja19hZGQoZ2VuZXZlLCB0cnVlKTsKJiM0MzsJCXJldCA9IGdlbmV2ZV9zb2NrX2FkZChnZW5ldmUsIGNmZywgdHJ1ZSk7CiAJCWlmIChyZXQgJmx0OyAwICZhbXA7JmFtcDsgcmV0ICE9IC1FQUZOT1NVUFBPUlQpCiAJCQlpcHY0ID0gZmFsc2U7CiAJfQogI2VuZGlmCiAJaWYgKGlwdjQpCi0JCXJldCA9IGdlbmV2ZV9zb2NrX2FkZChnZW5ldmUsIGZhbHNlKTsKJiM0MzsJCXJldCA9IGdlbmV2ZV9zb2NrX2FkZChnZW5ldmUsIGNmZywgZmFsc2UpOwogCWlmIChyZXQgJmx0OyAwKQogCQlnZW5ldmVfc29ja19yZWxlYXNlKGdlbmV2ZSk7CiAKQEAgLTExODksNiAmIzQzOzExOTYsNyBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfYnVpbGRfaGVhZGVyKHN0cnVjdCBnZW5ldmVoZHIgKmdlbmV2ZWgsCiB9CiAKIHN0YXRpYyBpbnQgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChjb25zdCBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsCiAJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBnZW5ldmVfc2tiX2NiICpjYiA9IEdFTkVWRV9TS0JfQ0Ioc2tiKTsKQEAgLTEyMDEsNyAmIzQzOzEyMDksNyBAQCBzdGF0aWMgaW50IGdlbmV2ZV9idWlsZF9ncm9faGludF9vcHQoY29uc3Qgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwKIAljYi0mZ3Q7Z3JvX2hpbnRfbGVuID0gMDsKIAogCS8qIFRyeSB0byBhZGQgdGhlIEdSTyBoaW50IG9ubHkgaW4gY2FzZSBvZiBkb3VibGUgZW5jYXAuICovCi0JaWYgKCFnZW5ldmUtJmd0O2NmZy5ncm9faGludCB8fCAhc2tiLSZndDtlbmNhcHN1bGF0aW9uKQomIzQzOwlpZiAoIWNmZy0mZ3Q7Z3JvX2hpbnQgfHwgIXNrYi0mZ3Q7ZW5jYXBzdWxhdGlvbikKIAkJcmV0dXJuIDA7CiAKIAkvKgpAQCAtMTI2MiwxMCAmIzQzOzEyNzAsMTEgQEAgc3RhdGljIHZvaWQgZ2VuZXZlX3B1dF9ncm9faGludF9vcHQoc3RydWN0IGdlbmV2ZWhkciAqZ252aCwgaW50IG9wdF9zaXplLAogCiBzdGF0aWMgaW50IGdlbmV2ZV9idWlsZF9za2Ioc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbywKLQkJCSAgICBjb25zdCBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBpbnQgaXBfaGRyX2xlbikKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZywgaW50IGlwX2hkcl9sZW4pCiB7CiAJYm9vbCB1ZHBfc3VtID0gdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULCBpbmZvLSZndDtrZXkudHVuX2ZsYWdzKTsKLQlib29sIGlubmVyX3Byb3RvX2luaGVyaXQgPSBnZW5ldmUtJmd0O2NmZy5pbm5lcl9wcm90b19pbmhlcml0OwomIzQzOwlib29sIGlubmVyX3Byb3RvX2luaGVyaXQgPSBjZmctJmd0O2lubmVyX3Byb3RvX2luaGVyaXQ7CiAJYm9vbCB4bmV0ID0gIW5ldF9lcShnZW5ldmUtJmd0O25ldCwgZGV2X25ldChnZW5ldmUtJmd0O2RldikpOwogCXN0cnVjdCBnZW5ldmVfc2tiX2NiICpjYiA9IEdFTkVWRV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgZ2VuZXZlaGRyICpnbnZoOwpAQCAtMTMwNiwxNCAmIzQzOzEzMTUsMTQgQEAgc3RhdGljIGludCBnZW5ldmVfYnVpbGRfc2tiKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIH0KIAogc3RhdGljIHU4IGdlbmV2ZV9nZXRfZHNmaWVsZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCSAgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZywKIAkJCSAgICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLAogCQkJICAgICBib29sICp1c2VfY2FjaGUpCiB7Ci0Jc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7CiAJdTggZHNmaWVsZDsKIAogCWRzZmllbGQgPSBpbmZvLSZndDtrZXkudG9zOwotCWlmIChkc2ZpZWxkID09IDEgJmFtcDsmYW1wOyAhZ2VuZXZlLSZndDtjZmcuY29sbGVjdF9tZCkgewomIzQzOwlpZiAoY2ZnICZhbXA7JmFtcDsgZHNmaWVsZCA9PSAxICZhbXA7JmFtcDsgIWNmZy0mZ3Q7Y29sbGVjdF9tZCkgewogCQlkc2ZpZWxkID0gaXBfdHVubmVsX2dldF9kc2ZpZWxkKGlwX2hkcihza2IpLCBza2IpOwogCQkqdXNlX2NhY2hlID0gZmFsc2U7CiAJfQpAQCAtMTMyMyw2ICYjNDM7MTMzMiw3IEBAIHN0YXRpYyB1OCBnZW5ldmVfZ2V0X2RzZmllbGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAogc3RhdGljIGludCBnZW5ldmVfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsCiYjNDM7CQkJICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZywKIAkJCSAgIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzNCA9IHJjdV9kZXJlZmVyZW5jZShnZW5ldmUtJmd0O3NvY2s0KTsKQEAgLTEzMzUsMzUgJiM0MzsxMzQ1LDM1IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJX19iZTE2IHNwb3J0OwogCWludCBlcnI7CiAKLQlpZiAoc2tiX3ZsYW5faW5ldF9wcmVwYXJlKHNrYiwgZ2VuZXZlLSZndDtjZmcuaW5uZXJfcHJvdG9faW5oZXJpdCkpCiYjNDM7CWlmIChza2Jfdmxhbl9pbmV0X3ByZXBhcmUoc2tiLCBjZmctJmd0O2lubmVyX3Byb3RvX2luaGVyaXQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghZ3M0KQogCQlyZXR1cm4gLUVJTzsKIAogCXVzZV9jYWNoZSA9IGlwX3R1bm5lbF9kc3RfY2FjaGVfdXNhYmxlKHNrYiwgaW5mbyk7Ci0JdG9zID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBpbmZvLCAmYW1wO3VzZV9jYWNoZSk7CiYjNDM7CXRvcyA9IGdlbmV2ZV9nZXRfZHNmaWVsZChza2IsIGRldiwgY2ZnLCBpbmZvLCAmYW1wO3VzZV9jYWNoZSk7CiAJc3BvcnQgPSB1ZHBfZmxvd19zcmNfcG9ydChnZW5ldmUtJmd0O25ldCwgc2tiLAotCQkJCSAgZ2VuZXZlLSZndDtjZmcucG9ydF9taW4sCi0JCQkJICBnZW5ldmUtJmd0O2NmZy5wb3J0X21heCwgdHJ1ZSk7CiYjNDM7CQkJCSAgY2ZnLSZndDtwb3J0X21pbiwKJiM0MzsJCQkJICBjZmctJmd0O3BvcnRfbWF4LCB0cnVlKTsKIAogCXJ0ID0gdWRwX3R1bm5lbF9kc3RfbG9va3VwKHNrYiwgZGV2LCBnZW5ldmUtJmd0O25ldCwgMCwgJmFtcDtzYWRkciwKIAkJCQkgICAmYW1wO2luZm8tJmd0O2tleSwKLQkJCQkgICBzcG9ydCwgZ2VuZXZlLSZndDtjZmcuaW5mby5rZXkudHBfZHN0LCB0b3MsCiYjNDM7CQkJCSAgIHNwb3J0LCBjZmctJmd0O2luZm8ua2V5LnRwX2RzdCwgdG9zLAogCQkJCSAgIHVzZV9jYWNoZSA/CiAJCQkJICAgKHN0cnVjdCBkc3RfY2FjaGUgKikmYW1wO2luZm8tJmd0O2RzdF9jYWNoZSA6IE5VTEwpOwogCWlmIChJU19FUlIocnQpKQogCQlyZXR1cm4gUFRSX0VSUihydCk7CiAKLQlpZiAoZ2VuZXZlLSZndDtjZmcuaW5mby5rZXkudS5pcHY0LnNyYyAmYW1wOyZhbXA7Ci0JICAgIHNhZGRyICE9IGdlbmV2ZS0mZ3Q7Y2ZnLmluZm8ua2V5LnUuaXB2NC5zcmMpIHsKJiM0MzsJaWYgKGNmZy0mZ3Q7aW5mby5rZXkudS5pcHY0LnNyYyAmYW1wOyZhbXA7CiYjNDM7CSAgICBzYWRkciAhPSBjZmctJmd0O2luZm8ua2V5LnUuaXB2NC5zcmMpIHsKIAkJZHN0X3JlbGVhc2UoJmFtcDtydC0mZ3Q7ZHN0KTsKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCX0KIAogCWVyciA9IHNrYl90dW5uZWxfY2hlY2tfcG10dShza2IsICZhbXA7cnQtJmd0O2RzdCwKIAkJCQkgICAgR0VORVZFX0lQVjRfSExFTiAmIzQzOyBpbmZvLSZndDtvcHRpb25zX2xlbiAmIzQzOwotCQkJCSAgICBnZW5ldmVfYnVpbGRfZ3JvX2hpbnRfb3B0KGdlbmV2ZSwgc2tiKSwKJiM0MzsJCQkJICAgIGdlbmV2ZV9idWlsZF9ncm9faGludF9vcHQoZ2VuZXZlLCBjZmcsIHNrYiksCiAJCQkJICAgIG5ldGlmX2lzX2FueV9icmlkZ2VfcG9ydChkZXYpKTsKIAlpZiAoZXJyICZsdDsgMCkgewogCQlkc3RfcmVsZWFzZSgmYW1wO3J0LSZndDtkc3QpOwpAQCAtMTM5NywyMSAmIzQzOzE0MDcsMjEgQEAgc3RhdGljIGludCBnZW5ldmVfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAl9CiAKIAl0b3MgPSBpcF90dW5uZWxfZWNuX2VuY2FwKHRvcywgaXBfaGRyKHNrYiksIHNrYik7Ci0JaWYgKGdlbmV2ZS0mZ3Q7Y2ZnLmNvbGxlY3RfbWQpIHsKJiM0MzsJaWYgKGNmZy0mZ3Q7Y29sbGVjdF9tZCkgewogCQl0dGwgPSBrZXktJmd0O3R0bDsKIAogCQlkZiA9IHRlc3RfYml0KElQX1RVTk5FTF9ET05UX0ZSQUdNRU5UX0JJVCwga2V5LSZndDt0dW5fZmxhZ3MpID8KIAkJICAgICBodG9ucyhJUF9ERikgOiAwOwogCX0gZWxzZSB7Ci0JCWlmIChnZW5ldmUtJmd0O2NmZy50dGxfaW5oZXJpdCkKJiM0MzsJCWlmIChjZmctJmd0O3R0bF9pbmhlcml0KQogCQkJdHRsID0gaXBfdHVubmVsX2dldF90dGwoaXBfaGRyKHNrYiksIHNrYik7CiAJCWVsc2UKIAkJCXR0bCA9IGtleS0mZ3Q7dHRsOwogCQl0dGwgPSB0dGwgPyA6IGlwNF9kc3RfaG9wbGltaXQoJmFtcDtydC0mZ3Q7ZHN0KTsKIAotCQlpZiAoZ2VuZXZlLSZndDtjZmcuZGYgPT0gR0VORVZFX0RGX1NFVCkgewomIzQzOwkJaWYgKGNmZy0mZ3Q7ZGYgPT0gR0VORVZFX0RGX1NFVCkgewogCQkJZGYgPSBodG9ucyhJUF9ERik7Ci0JCX0gZWxzZSBpZiAoZ2VuZXZlLSZndDtjZmcuZGYgPT0gR0VORVZFX0RGX0lOSEVSSVQpIHsKJiM0MzsJCX0gZWxzZSBpZiAoY2ZnLSZndDtkZiA9PSBHRU5FVkVfREZfSU5IRVJJVCkgewogCQkJc3RydWN0IGV0aGhkciAqZXRoID0gc2tiX2V0aF9oZHIoc2tiKTsKIAogCQkJaWYgKG50b2hzKGV0aC0mZ3Q7aF9wcm90bykgPT0gRVRIX1BfSVBWNikgewpAQCAtMTQyNSwxMyAmIzQzOzE0MzUsMTMgQEAgc3RhdGljIGludCBnZW5ldmVfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJfQogCX0KIAotCWVyciA9IGdlbmV2ZV9idWlsZF9za2IoJmFtcDtydC0mZ3Q7ZHN0LCBza2IsIGluZm8sIGdlbmV2ZSwKJiM0MzsJZXJyID0gZ2VuZXZlX2J1aWxkX3NrYigmYW1wO3J0LSZndDtkc3QsIHNrYiwgaW5mbywgZ2VuZXZlLCBjZmcsCiAJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpcGhkcikpOwogCWlmICh1bmxpa2VseShlcnIpKQogCQlyZXR1cm4gZXJyOwogCiAJdWRwX3R1bm5lbF94bWl0X3NrYihydCwgZ3M0LSZndDtzaywgc2tiLCBzYWRkciwgaW5mby0mZ3Q7a2V5LnUuaXB2NC5kc3QsCi0JCQkgICAgdG9zLCB0dGwsIGRmLCBzcG9ydCwgZ2VuZXZlLSZndDtjZmcuaW5mby5rZXkudHBfZHN0LAomIzQzOwkJCSAgICB0b3MsIHR0bCwgZGYsIHNwb3J0LCBjZmctJmd0O2luZm8ua2V5LnRwX2RzdCwKIAkJCSAgICAhbmV0X2VxKGdlbmV2ZS0mZ3Q7bmV0LCBkZXZfbmV0KGdlbmV2ZS0mZ3Q7ZGV2KSksCiAJCQkgICAgIXRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwgaW5mby0mZ3Q7a2V5LnR1bl9mbGFncyksCiAJCQkgICAgMCk7CkBAIC0xNDQxLDYgJiM0MzsxNDUxLDcgQEAgc3RhdGljIGludCBnZW5ldmVfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQogc3RhdGljIGludCBnZW5ldmU2X3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZywKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGdlbmV2ZV9zb2NrICpnczYgPSByY3VfZGVyZWZlcmVuY2UoZ2VuZXZlLSZndDtzb2NrNik7CkBAIC0xNDUyLDM1ICYjNDM7MTQ2MywzNSBAQCBzdGF0aWMgaW50IGdlbmV2ZTZfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlfX2JlMTYgc3BvcnQ7CiAJaW50IGVycjsKIAotCWlmIChza2Jfdmxhbl9pbmV0X3ByZXBhcmUoc2tiLCBnZW5ldmUtJmd0O2NmZy5pbm5lcl9wcm90b19pbmhlcml0KSkKJiM0MzsJaWYgKHNrYl92bGFuX2luZXRfcHJlcGFyZShza2IsIGNmZy0mZ3Q7aW5uZXJfcHJvdG9faW5oZXJpdCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFnczYpCiAJCXJldHVybiAtRUlPOwogCiAJdXNlX2NhY2hlID0gaXBfdHVubmVsX2RzdF9jYWNoZV91c2FibGUoc2tiLCBpbmZvKTsKLQlwcmlvID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBpbmZvLCAmYW1wO3VzZV9jYWNoZSk7CiYjNDM7CXByaW8gPSBnZW5ldmVfZ2V0X2RzZmllbGQoc2tiLCBkZXYsIGNmZywgaW5mbywgJmFtcDt1c2VfY2FjaGUpOwogCXNwb3J0ID0gdWRwX2Zsb3dfc3JjX3BvcnQoZ2VuZXZlLSZndDtuZXQsIHNrYiwKLQkJCQkgIGdlbmV2ZS0mZ3Q7Y2ZnLnBvcnRfbWluLAotCQkJCSAgZ2VuZXZlLSZndDtjZmcucG9ydF9tYXgsIHRydWUpOwomIzQzOwkJCQkgIGNmZy0mZ3Q7cG9ydF9taW4sCiYjNDM7CQkJCSAgY2ZnLSZndDtwb3J0X21heCwgdHJ1ZSk7CiAKIAlkc3QgPSB1ZHBfdHVubmVsNl9kc3RfbG9va3VwKHNrYiwgZGV2LCBnZW5ldmUtJmd0O25ldCwgZ3M2LSZndDtzaywgMCwKIAkJCQkgICAgICZhbXA7c2FkZHIsIGtleSwgc3BvcnQsCi0JCQkJICAgICBnZW5ldmUtJmd0O2NmZy5pbmZvLmtleS50cF9kc3QsIHByaW8sCiYjNDM7CQkJCSAgICAgY2ZnLSZndDtpbmZvLmtleS50cF9kc3QsIHByaW8sCiAJCQkJICAgICB1c2VfY2FjaGUgPwogCQkJCSAgICAgKHN0cnVjdCBkc3RfY2FjaGUgKikmYW1wO2luZm8tJmd0O2RzdF9jYWNoZSA6IE5VTEwpOwogCWlmIChJU19FUlIoZHN0KSkKIAkJcmV0dXJuIFBUUl9FUlIoZHN0KTsKIAotCWlmICghaXB2Nl9hZGRyX2FueSgmYW1wO2dlbmV2ZS0mZ3Q7Y2ZnLmluZm8ua2V5LnUuaXB2Ni5zcmMpICZhbXA7JmFtcDsKLQkgICAgIWlwdjZfYWRkcl9lcXVhbCgmYW1wO3NhZGRyLCAmYW1wO2dlbmV2ZS0mZ3Q7Y2ZnLmluZm8ua2V5LnUuaXB2Ni5zcmMpKSB7CiYjNDM7CWlmICghaXB2Nl9hZGRyX2FueSgmYW1wO2NmZy0mZ3Q7aW5mby5rZXkudS5pcHY2LnNyYykgJmFtcDsmYW1wOwomIzQzOwkgICAgIWlwdjZfYWRkcl9lcXVhbCgmYW1wO3NhZGRyLCAmYW1wO2NmZy0mZ3Q7aW5mby5rZXkudS5pcHY2LnNyYykpIHsKIAkJZHN0X3JlbGVhc2UoZHN0KTsKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCX0KIAogCWVyciA9IHNrYl90dW5uZWxfY2hlY2tfcG10dShza2IsIGRzdCwKIAkJCQkgICAgR0VORVZFX0lQVjZfSExFTiAmIzQzOyBpbmZvLSZndDtvcHRpb25zX2xlbiAmIzQzOwotCQkJCSAgICBnZW5ldmVfYnVpbGRfZ3JvX2hpbnRfb3B0KGdlbmV2ZSwgc2tiKSwKJiM0MzsJCQkJICAgIGdlbmV2ZV9idWlsZF9ncm9faGludF9vcHQoZ2VuZXZlLCBjZmcsIHNrYiksCiAJCQkJICAgIG5ldGlmX2lzX2FueV9icmlkZ2VfcG9ydChkZXYpKTsKIAlpZiAoZXJyICZsdDsgMCkgewogCQlkc3RfcmVsZWFzZShkc3QpOwpAQCAtMTUxMywyMiAmIzQzOzE1MjQsMjIgQEAgc3RhdGljIGludCBnZW5ldmU2X3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJfQogCiAJcHJpbyA9IGlwX3R1bm5lbF9lY25fZW5jYXAocHJpbywgaXBfaGRyKHNrYiksIHNrYik7Ci0JaWYgKGdlbmV2ZS0mZ3Q7Y2ZnLmNvbGxlY3RfbWQpIHsKJiM0MzsJaWYgKGNmZy0mZ3Q7Y29sbGVjdF9tZCkgewogCQl0dGwgPSBrZXktJmd0O3R0bDsKIAl9IGVsc2UgewotCQlpZiAoZ2VuZXZlLSZndDtjZmcudHRsX2luaGVyaXQpCiYjNDM7CQlpZiAoY2ZnLSZndDt0dGxfaW5oZXJpdCkKIAkJCXR0bCA9IGlwX3R1bm5lbF9nZXRfdHRsKGlwX2hkcihza2IpLCBza2IpOwogCQllbHNlCiAJCQl0dGwgPSBrZXktJmd0O3R0bDsKIAkJdHRsID0gdHRsID8gOiBpcDZfZHN0X2hvcGxpbWl0KGRzdCk7CiAJfQotCWVyciA9IGdlbmV2ZV9idWlsZF9za2IoZHN0LCBza2IsIGluZm8sIGdlbmV2ZSwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CiYjNDM7CWVyciA9IGdlbmV2ZV9idWlsZF9za2IoZHN0LCBza2IsIGluZm8sIGdlbmV2ZSwgY2ZnLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKIAlpZiAodW5saWtlbHkoZXJyKSkKIAkJcmV0dXJuIGVycjsKIAogCXVkcF90dW5uZWw2X3htaXRfc2tiKGRzdCwgZ3M2LSZndDtzaywgc2tiLCBkZXYsCiAJCQkgICAgICZhbXA7c2FkZHIsICZhbXA7a2V5LSZndDt1LmlwdjYuZHN0LCBwcmlvLCB0dGwsCi0JCQkgICAgIGluZm8tJmd0O2tleS5sYWJlbCwgc3BvcnQsIGdlbmV2ZS0mZ3Q7Y2ZnLmluZm8ua2V5LnRwX2RzdCwKJiM0MzsJCQkgICAgIGluZm8tJmd0O2tleS5sYWJlbCwgc3BvcnQsIGNmZy0mZ3Q7aW5mby5rZXkudHBfZHN0LAogCQkJICAgICAhdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULAogCQkJCSAgICAgICBpbmZvLSZndDtrZXkudHVuX2ZsYWdzKSwKIAkJCSAgICAgMCk7CkBAIC0xNTM5LDI4ICYjNDM7MTU1MCwzMSBAQCBzdGF0aWMgaW50IGdlbmV2ZTZfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIHN0YXRpYyBuZXRkZXZfdHhfdCBnZW5ldmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9IE5VTEw7CiYjNDM7CWNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9IE5VTEw7CiYjNDM7CWNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmc7CiAJaW50IGVycjsKIAotCWlmIChnZW5ldmUtJmd0O2NmZy5jb2xsZWN0X21kKSB7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJY2ZnID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS0mZ3Q7Y2ZnKTsKJiM0MzsJaWYgKGNmZy0mZ3Q7Y29sbGVjdF9tZCkgewogCQlpbmZvID0gc2tiX3R1bm5lbF9pbmZvKHNrYik7CiAJCWlmICh1bmxpa2VseSghaW5mbyB8fCAhKGluZm8tJmd0O21vZGUgJmFtcDsgSVBfVFVOTkVMX0lORk9fVFgpKSkgewogCQkJbmV0ZGV2X2RiZyhkZXYsICYjMzQ7bm8gdHVubmVsIG1ldGFkYXRhXG4mIzM0Oyk7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQlkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoZGV2KTsKJiM0MzsJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCX0KIAl9IGVsc2UgewotCQlpbmZvID0gJmFtcDtnZW5ldmUtJmd0O2NmZy5pbmZvOwomIzQzOwkJaW5mbyA9ICZhbXA7Y2ZnLSZndDtpbmZvOwogCX0KIAotCXJjdV9yZWFkX2xvY2soKTsKICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQogCWlmIChpbmZvLSZndDttb2RlICZhbXA7IElQX1RVTk5FTF9JTkZPX0lQVjYpCi0JCWVyciA9IGdlbmV2ZTZfeG1pdF9za2Ioc2tiLCBkZXYsIGdlbmV2ZSwgaW5mbyk7CiYjNDM7CQllcnIgPSBnZW5ldmU2X3htaXRfc2tiKHNrYiwgZGV2LCBnZW5ldmUsIGNmZywgaW5mbyk7CiAJZWxzZQogI2VuZGlmCi0JCWVyciA9IGdlbmV2ZV94bWl0X3NrYihza2IsIGRldiwgZ2VuZXZlLCBpbmZvKTsKJiM0MzsJCWVyciA9IGdlbmV2ZV94bWl0X3NrYihza2IsIGRldiwgZ2VuZXZlLCBjZmcsIGluZm8pOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKGxpa2VseSghZXJyKSkKQEAgLTE1OTMsOCAmIzQzOzE2MDcsMTMgQEAgc3RhdGljIGludCBnZW5ldmVfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBza2JfdHVubmVsX2luZm8oc2tiKTsKIAlzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZzsKIAlfX2JlMTYgc3BvcnQ7CiAKJiM0MzsJY2ZnID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS0mZ3Q7Y2ZnKTsKJiM0MzsJaWYgKHVubGlrZWx5KCFjZmcpKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiAJaWYgKGlwX3R1bm5lbF9pbmZvX2FmKGluZm8pID09IEFGX0lORVQpIHsKIAkJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJCXN0cnVjdCBnZW5ldmVfc29jayAqZ3M0ID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS0mZ3Q7c29jazQpOwpAQCAtMTYwNiwxNCAmIzQzOzE2MjUsMTQgQEAgc3RhdGljIGludCBnZW5ldmVfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJCXJldHVybiAtRUlPOwogCiAJCXVzZV9jYWNoZSA9IGlwX3R1bm5lbF9kc3RfY2FjaGVfdXNhYmxlKHNrYiwgaW5mbyk7Ci0JCXRvcyA9IGdlbmV2ZV9nZXRfZHNmaWVsZChza2IsIGRldiwgaW5mbywgJmFtcDt1c2VfY2FjaGUpOwomIzQzOwkJdG9zID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBjZmcsIGluZm8sICZhbXA7dXNlX2NhY2hlKTsKIAkJc3BvcnQgPSB1ZHBfZmxvd19zcmNfcG9ydChnZW5ldmUtJmd0O25ldCwgc2tiLAotCQkJCQkgIGdlbmV2ZS0mZ3Q7Y2ZnLnBvcnRfbWluLAotCQkJCQkgIGdlbmV2ZS0mZ3Q7Y2ZnLnBvcnRfbWF4LCB0cnVlKTsKJiM0MzsJCQkJCSAgY2ZnLSZndDtwb3J0X21pbiwKJiM0MzsJCQkJCSAgY2ZnLSZndDtwb3J0X21heCwgdHJ1ZSk7CiAKIAkJcnQgPSB1ZHBfdHVubmVsX2RzdF9sb29rdXAoc2tiLCBkZXYsIGdlbmV2ZS0mZ3Q7bmV0LCAwLCAmYW1wO3NhZGRyLAogCQkJCQkgICAmYW1wO2luZm8tJmd0O2tleSwKLQkJCQkJICAgc3BvcnQsIGdlbmV2ZS0mZ3Q7Y2ZnLmluZm8ua2V5LnRwX2RzdCwKJiM0MzsJCQkJCSAgIHNwb3J0LCBjZmctJmd0O2luZm8ua2V5LnRwX2RzdCwKIAkJCQkJICAgdG9zLAogCQkJCQkgICB1c2VfY2FjaGUgPyAmYW1wO2luZm8tJmd0O2RzdF9jYWNoZSA6IE5VTEwpOwogCQlpZiAoSVNfRVJSKHJ0KSkKQEAgLTE2MzMsMTQgJiM0MzsxNjUyLDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJCQlyZXR1cm4gLUVJTzsKIAogCQl1c2VfY2FjaGUgPSBpcF90dW5uZWxfZHN0X2NhY2hlX3VzYWJsZShza2IsIGluZm8pOwotCQlwcmlvID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBpbmZvLCAmYW1wO3VzZV9jYWNoZSk7CiYjNDM7CQlwcmlvID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBjZmcsIGluZm8sICZhbXA7dXNlX2NhY2hlKTsKIAkJc3BvcnQgPSB1ZHBfZmxvd19zcmNfcG9ydChnZW5ldmUtJmd0O25ldCwgc2tiLAotCQkJCQkgIGdlbmV2ZS0mZ3Q7Y2ZnLnBvcnRfbWluLAotCQkJCQkgIGdlbmV2ZS0mZ3Q7Y2ZnLnBvcnRfbWF4LCB0cnVlKTsKJiM0MzsJCQkJCSAgY2ZnLSZndDtwb3J0X21pbiwKJiM0MzsJCQkJCSAgY2ZnLSZndDtwb3J0X21heCwgdHJ1ZSk7CiAKIAkJZHN0ID0gdWRwX3R1bm5lbDZfZHN0X2xvb2t1cChza2IsIGRldiwgZ2VuZXZlLSZndDtuZXQsIGdzNi0mZ3Q7c2ssIDAsCiAJCQkJCSAgICAgJmFtcDtzYWRkciwgJmFtcDtpbmZvLSZndDtrZXksIHNwb3J0LAotCQkJCQkgICAgIGdlbmV2ZS0mZ3Q7Y2ZnLmluZm8ua2V5LnRwX2RzdCwgcHJpbywKJiM0MzsJCQkJCSAgICAgY2ZnLSZndDtpbmZvLmtleS50cF9kc3QsIHByaW8sCiAJCQkJCSAgICAgdXNlX2NhY2hlID8gJmFtcDtpbmZvLSZndDtkc3RfY2FjaGUgOiBOVUxMKTsKIAkJaWYgKElTX0VSUihkc3QpKQogCQkJcmV0dXJuIFBUUl9FUlIoZHN0KTsKQEAgLTE2NTMsNyAmIzQzOzE2NzIsNyBAQCBzdGF0aWMgaW50IGdlbmV2ZV9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCX0KIAogCWluZm8tJmd0O2tleS50cF9zcmMgPSBzcG9ydDsKLQlpbmZvLSZndDtrZXkudHBfZHN0ID0gZ2VuZXZlLSZndDtjZmcuaW5mby5rZXkudHBfZHN0OwomIzQzOwlpbmZvLSZndDtrZXkudHBfZHN0ID0gY2ZnLSZndDtpbmZvLmtleS50cF9kc3Q7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3MDksNyAmIzQzOzE3MjgsNTAgQEAgc3RhdGljIHZvaWQgZ2VuZXZlX29mZmxvYWRfcnhfcG9ydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBwdXNoKQogCX0KIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqZ2VuZXZlX2NvbmZpZ19hbGxvYyhjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqc3JjKQomIzQzO3sKJiM0MzsJc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZzsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJY2ZnID0ga21lbWR1cChzcmMsIHNpemVvZigqc3JjKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghY2ZnKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CWNmZy0mZ3Q7aW5mby5kc3RfY2FjaGUuY2FjaGUgPSBOVUxMOwomIzQzOwllcnIgPSBkc3RfY2FjaGVfaW5pdCgmYW1wO2NmZy0mZ3Q7aW5mby5kc3RfY2FjaGUsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlrZnJlZShjZmcpOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gY2ZnOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBnZW5ldmVfY29uZmlnX2ZyZWUoc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZykKJiM0Mzt7CiYjNDM7CWlmIChjZmcpIHsKJiM0MzsJCWRzdF9jYWNoZV9kZXN0cm95KCZhbXA7Y2ZnLSZndDtpbmZvLmRzdF9jYWNoZSk7CiYjNDM7CQlrZnJlZShjZmcpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGdlbmV2ZV9jb25maWdfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQomIzQzO3sKJiM0MzsJc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZywgcmN1KTsKJiM0MzsKJiM0MzsJZ2VuZXZlX2NvbmZpZ19mcmVlKGNmZyk7CiYjNDM7fQomIzQzOwogLyogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KJiM0MztzdGF0aWMgdm9pZCBnZW5ldmVfZnJlZV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnZW5ldmUtJmd0O2NmZywgMSk7CiYjNDM7CiYjNDM7CWdlbmV2ZV9jb25maWdfZnJlZShjZmcpOwomIzQzOwlSQ1VfSU5JVF9QT0lOVEVSKGdlbmV2ZS0mZ3Q7Y2ZnLCBOVUxMKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBnZW5ldmVfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlldGhlcl9zZXR1cChkZXYpOwpAQCAtMTcxNyw2ICYjNDM7MTc3OSw3IEBAIHN0YXRpYyB2b2lkIGdlbmV2ZV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCWRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7Z2VuZXZlX25ldGRldl9vcHM7CiAJZGV2LSZndDtldGh0b29sX29wcyA9ICZhbXA7Z2VuZXZlX2V0aHRvb2xfb3BzOwogCWRldi0mZ3Q7bmVlZHNfZnJlZV9uZXRkZXYgPSB0cnVlOwomIzQzOwlkZXYtJmd0O3ByaXZfZGVzdHJ1Y3RvciA9IGdlbmV2ZV9mcmVlX2RldjsKIAogCVNFVF9ORVRERVZfREVWVFlQRShkZXYsICZhbXA7Z2VuZXZlX3R5cGUpOwogCkBAIC0xODc4LDE1ICYjNDM7MTk0MSwxNyBAQCBzdGF0aWMgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZV9maW5kX2RldihzdHJ1Y3QgZ2VuZXZlX25ldCAqZ24sCiAJKnR1bl9vbl9zYW1lX3BvcnQgPSBmYWxzZTsKIAkqdHVuX2NvbGxlY3RfbWQgPSBmYWxzZTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGdlbmV2ZSwgJmFtcDtnbi0mZ3Q7Z2VuZXZlX2xpc3QsIG5leHQpIHsKLQkJaWYgKGluZm8tJmd0O2tleS50cF9kc3QgPT0gZ2VuZXZlLSZndDtjZmcuaW5mby5rZXkudHBfZHN0ICZhbXA7JmFtcDsKLQkJICAgIChjZmctJmd0O2R1YWxzdGFjayB8fCBnZW5ldmUtJmd0O2NmZy5kdWFsc3RhY2sgfHwKLQkJICAgICBnZW5ldmVfc2FkZHJfY29uZmxpY3QoaW5mbywgJmFtcDtnZW5ldmUtJmd0O2NmZy5pbmZvKSkpIHsKLQkJCSp0dW5fY29sbGVjdF9tZCB8PSBnZW5ldmUtJmd0O2NmZy5jb2xsZWN0X21kOwomIzQzOwkJY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmdjZmcgPSBydG5sX2RlcmVmZXJlbmNlKGdlbmV2ZS0mZ3Q7Y2ZnKTsKJiM0MzsKJiM0MzsJCWlmIChpbmZvLSZndDtrZXkudHBfZHN0ID09IGdjZmctJmd0O2luZm8ua2V5LnRwX2RzdCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKGNmZy0mZ3Q7ZHVhbHN0YWNrIHx8IGdjZmctJmd0O2R1YWxzdGFjayB8fAomIzQzOwkJICAgICBnZW5ldmVfc2FkZHJfY29uZmxpY3QoaW5mbywgJmFtcDtnY2ZnLSZndDtpbmZvKSkpIHsKJiM0MzsJCQkqdHVuX2NvbGxlY3RfbWQgfD0gZ2NmZy0mZ3Q7Y29sbGVjdF9tZDsKIAkJCSp0dW5fb25fc2FtZV9wb3J0ID0gdHJ1ZTsKIAkJfQotCQlpZiAoaW5mby0mZ3Q7a2V5LnR1bl9pZCA9PSBnZW5ldmUtJmd0O2NmZy5pbmZvLmtleS50dW5faWQgJmFtcDsmYW1wOwotCQkgICAgaW5mby0mZ3Q7a2V5LnRwX2RzdCA9PSBnZW5ldmUtJmd0O2NmZy5pbmZvLmtleS50cF9kc3QgJmFtcDsmYW1wOwotCQkgICAgIW1lbWNtcCgmYW1wO2luZm8tJmd0O2tleS51LCAmYW1wO2dlbmV2ZS0mZ3Q7Y2ZnLmluZm8ua2V5LnUsIHNpemVvZihpbmZvLSZndDtrZXkudSkpKQomIzQzOwkJaWYgKGluZm8tJmd0O2tleS50dW5faWQgPT0gZ2NmZy0mZ3Q7aW5mby5rZXkudHVuX2lkICZhbXA7JmFtcDsKJiM0MzsJCSAgICBpbmZvLSZndDtrZXkudHBfZHN0ID09IGdjZmctJmd0O2luZm8ua2V5LnRwX2RzdCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIW1lbWNtcCgmYW1wO2luZm8tJmd0O2tleS51LCAmYW1wO2djZmctJmd0O2luZm8ua2V5LnUsIHNpemVvZihpbmZvLSZndDtrZXkudSkpKQogCQkJdCA9IGdlbmV2ZTsKIAl9CiAJcmV0dXJuIHQ7CkBAIC0xOTIyLDYgJiM0MzsxOTg3LDcgQEAgc3RhdGljIGludCBnZW5ldmVfY29uZmlndXJlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlzdHJ1Y3QgZ2VuZXZlX2RldiAqdCwgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7CiAJY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gJmFtcDtjZmctJmd0O2luZm87CiAJYm9vbCB0dW5fY29sbGVjdF9tZCwgdHVuX29uX3NhbWVfcG9ydDsKJiM0MzsJc3RydWN0IGdlbmV2ZV9jb25maWcgKm5ld19jZmc7CiAJaW50IGVyciwgZW5jYXBfbGVuOwogCiAJaWYgKGNmZy0mZ3Q7Y29sbGVjdF9tZCAmYW1wOyZhbXA7ICFpc190bmxfaW5mb196ZXJvKGluZm8pKSB7CkBAIC0xOTYyLDEwICYjNDM7MjAyOCwxMyBAQCBzdGF0aWMgaW50IGdlbmV2ZV9jb25maWd1cmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQl9CiAJfQogCi0JZHN0X2NhY2hlX3Jlc2V0KCZhbXA7Z2VuZXZlLSZndDtjZmcuaW5mby5kc3RfY2FjaGUpOwotCW1lbWNweSgmYW1wO2dlbmV2ZS0mZ3Q7Y2ZnLCBjZmcsIHNpemVvZigqY2ZnKSk7CiYjNDM7CW5ld19jZmcgPSBnZW5ldmVfY29uZmlnX2FsbG9jKGNmZyk7CiYjNDM7CWlmIChJU19FUlIobmV3X2NmZykpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihuZXdfY2ZnKTsKJiM0MzsKJiM0MzsJcmN1X2Fzc2lnbl9wb2ludGVyKGdlbmV2ZS0mZ3Q7Y2ZnLCBuZXdfY2ZnKTsKIAotCWlmIChnZW5ldmUtJmd0O2NmZy5pbm5lcl9wcm90b19pbmhlcml0KSB7CiYjNDM7CWlmIChjZmctJmd0O2lubmVyX3Byb3RvX2luaGVyaXQpIHsKIAkJZGV2LSZndDtoZWFkZXJfb3BzID0gTlVMTDsKIAkJZGV2LSZndDt0eXBlID0gQVJQSFJEX05PTkU7CiAJCWRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuID0gMDsKQEAgLTIzMjMsODEgJiM0MzsyMzkyLDQ1IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlyZXR1cm4gMDsKIH0KIAotLyogUXVpZXNjZXMgdGhlIGdlbmV2ZSBkZXZpY2UgZGF0YSBwYXRoIGZvciBib3RoIFRYIGFuZCBSWC4KLSAqCi0gKiBPbiB0cmFuc21pdCBnZW5ldmUgY2hlY2tzIGZvciBub24tTlVMTCBnZW5ldmVfc29jayBiZWZvcmUgaXQgcHJvY2VlZHMuCi0gKiBTbywgaWYgd2Ugc2V0IHRoYXQgc29ja2V0IHRvIE5VTEwgdW5kZXIgUkNVIGFuZCB3YWl0IGZvciBzeW5jaHJvbml6ZV9uZXQoKQotICogdG8gY29tcGxldGUgZm9yIHRoZSBleGlzdGluZyBzZXQgb2YgaW4tZmxpZ2h0IHBhY2tldHMgdG8gYmUgdHJhbnNtaXR0ZWQsCi0gKiB0aGVuIHdlIHdvdWxkIGhhdmUgcXVpZXNjZWQgdGhlIHRyYW5zbWl0IGRhdGEgcGF0aC4gQWxsIHRoZSBmdXR1cmUgcGFja2V0cwotICogd2lsbCBnZXQgZHJvcHBlZCB1bnRpbCB3ZSB1bnF1aWVzY2UgdGhlIGRhdGEgcGF0aC4KLSAqCi0gKiBPbiByZWNlaXZlIGdlbmV2ZSBkZXJlZmVyZW5jZSB0aGUgZ2VuZXZlX3NvY2sgc3Rhc2hlZCBpbiB0aGUgc29ja2V0LiBTbywKLSAqIGlmIHdlIHNldCB0aGF0IHRvIE5VTEwgdW5kZXIgUkNVIGFuZCB3YWl0IGZvciBzeW5jaHJvbml6ZV9uZXQoKSB0bwotICogY29tcGxldGUsIHRoZW4gd2Ugd291bGQgaGF2ZSBxdWllc2NlZCB0aGUgcmVjZWl2ZSBkYXRhIHBhdGguCiYjNDM7LyogVXBkYXRlIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbiB1bmRlciBSVE5MLgomIzQzOyAqIFdlIHVzZSBSQ1Ugc3dhcCB0byB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gYXRvbWljYWxseSwgc28gdGhlIGRhdGEgcGF0aAomIzQzOyAqIChib3RoIFRYIGFuZCBSWCkgY2FuIGNvbnRpbnVlIHJ1bm5pbmcgd2l0aG91dCBpbnRlcnJ1cHRpb24gb3IgcGFja2V0IGxvc3MuCiAgKi8KLXN0YXRpYyB2b2lkIGdlbmV2ZV9xdWllc2NlKHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsIHN0cnVjdCBnZW5ldmVfc29jayAqKmdzNCwKLQkJCSAgIHN0cnVjdCBnZW5ldmVfc29jayAqKmdzNikKLXsKLQkqZ3M0ID0gcnRubF9kZXJlZmVyZW5jZShnZW5ldmUtJmd0O3NvY2s0KTsKLQlyY3VfYXNzaWduX3BvaW50ZXIoZ2VuZXZlLSZndDtzb2NrNCwgTlVMTCk7Ci0JaWYgKCpnczQpCi0JCXJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKCgqZ3M0KS0mZ3Q7c2ssIE5VTEwpOwotI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCi0JKmdzNiA9IHJ0bmxfZGVyZWZlcmVuY2UoZ2VuZXZlLSZndDtzb2NrNik7Ci0JcmN1X2Fzc2lnbl9wb2ludGVyKGdlbmV2ZS0mZ3Q7c29jazYsIE5VTEwpOwotCWlmICgqZ3M2KQotCQlyY3VfYXNzaWduX3NrX3VzZXJfZGF0YSgoKmdzNiktJmd0O3NrLCBOVUxMKTsKLSNlbHNlCi0JKmdzNiA9IE5VTEw7Ci0jZW5kaWYKLQlzeW5jaHJvbml6ZV9uZXQoKTsKLX0KLQotLyogUmVzdW1lcyB0aGUgZ2VuZXZlIGRldmljZSBkYXRhIHBhdGggZm9yIGJvdGggVFggYW5kIFJYLiAqLwotc3RhdGljIHZvaWQgZ2VuZXZlX3VucXVpZXNjZShzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzNCwKLQkJCSAgICAgc3RydWN0IGdlbmV2ZV9zb2NrIF9fbWF5YmVfdW51c2VkICpnczYpCi17Ci0JcmN1X2Fzc2lnbl9wb2ludGVyKGdlbmV2ZS0mZ3Q7c29jazQsIGdzNCk7Ci0JaWYgKGdzNCkKLQkJcmN1X2Fzc2lnbl9za191c2VyX2RhdGEoZ3M0LSZndDtzaywgZ3M0KTsKLSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQotCXJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtJmd0O3NvY2s2LCBnczYpOwotCWlmIChnczYpCi0JCXJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKGdzNi0mZ3Q7c2ssIGdzNik7Ci0jZW5kaWYKLX0KLQogc3RhdGljIGludCBnZW5ldmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLAogCQkJICAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sCiAJCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzNCwgKmdzNjsKLQlzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyBjZmc7CiYjNDM7CXN0cnVjdCBnZW5ldmVfY29uZmlnICpvbGRfY2ZnID0gcnRubF9kZXJlZmVyZW5jZShnZW5ldmUtJmd0O2NmZyk7CiYjNDM7CXN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmc7CiAJaW50IGVycjsKIAogCS8qIElmIHRoZSBnZW5ldmUgZGV2aWNlIGlzIGNvbmZpZ3VyZWQgZm9yIG1ldGFkYXRhIChvciBleHRlcm5hbGx5CiAJICogY29udHJvbGxlZCwgZm9yIGV4YW1wbGUsIE9WUyksIHRoZW4gbm90aGluZyBjYW4gYmUgY2hhbmdlZC4KIAkgKi8KLQlpZiAoZ2VuZXZlLSZndDtjZmcuY29sbGVjdF9tZCkKJiM0MzsJaWYgKG9sZF9jZmctJmd0O2NvbGxlY3RfbWQpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCS8qIFN0YXJ0IHdpdGggdGhlIGV4aXN0aW5nIGluZm8uICovCi0JbWVtY3B5KCZhbXA7Y2ZnLCAmYW1wO2dlbmV2ZS0mZ3Q7Y2ZnLCBzaXplb2YoY2ZnKSk7Ci0JZXJyID0gZ2VuZXZlX25sMmluZm8odGIsIGRhdGEsIGV4dGFjaywgJmFtcDtjZmcsIHRydWUpOwomIzQzOwljZmcgPSBnZW5ldmVfY29uZmlnX2FsbG9jKG9sZF9jZmcpOwomIzQzOwlpZiAoSVNfRVJSKGNmZykpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihjZmcpOwomIzQzOwomIzQzOwllcnIgPSBnZW5ldmVfbmwyaW5mbyh0YiwgZGF0YSwgZXh0YWNrLCBjZmcsIHRydWUpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CiYjNDM7CQlnb3RvIGVycl9mcmVlX2NmZzsKIAotCWlmICghZ2VuZXZlX2RzdF9hZGRyX2VxdWFsKCZhbXA7Z2VuZXZlLSZndDtjZmcuaW5mbywgJmFtcDtjZmcuaW5mbykpIHsKLQkJZHN0X2NhY2hlX3Jlc2V0KCZhbXA7Y2ZnLmluZm8uZHN0X2NhY2hlKTsKLQkJZ2VuZXZlX2xpbmtfY29uZmlnKGRldiwgJmFtcDtjZmcuaW5mbywgdGIpOwotCX0KJiM0MzsJaWYgKCFnZW5ldmVfZHN0X2FkZHJfZXF1YWwoJmFtcDtvbGRfY2ZnLSZndDtpbmZvLCAmYW1wO2NmZy0mZ3Q7aW5mbykpCiYjNDM7CQlnZW5ldmVfbGlua19jb25maWcoZGV2LCAmYW1wO2NmZy0mZ3Q7aW5mbywgdGIpOwogCi0JZ2VuZXZlX3F1aWVzY2UoZ2VuZXZlLCAmYW1wO2dzNCwgJmFtcDtnczYpOwotCW1lbWNweSgmYW1wO2dlbmV2ZS0mZ3Q7Y2ZnLCAmYW1wO2NmZywgc2l6ZW9mKGNmZykpOwotCWdlbmV2ZV91bnF1aWVzY2UoZ2VuZXZlLCBnczQsIGdzNik7CiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtJmd0O2NmZywgY2ZnKTsKIAomIzQzOwljYWxsX3JjdV9odXJyeSgmYW1wO29sZF9jZmctJmd0O3JjdSwgZ2VuZXZlX2NvbmZpZ19mcmVlX3JjdSk7CiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX2ZyZWVfY2ZnOgomIzQzOwlnZW5ldmVfY29uZmlnX2ZyZWUoY2ZnKTsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgZ2VuZXZlX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKQEAgLTI0MzEsMTYgJiM0MzsyNDY0LDI3IEBAIHN0YXRpYyBzaXplX3QgZ2VuZXZlX2dldF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9ICZhbXA7Z2VuZXZlLSZndDtjZmcuaW5mbzsKLQlib29sIHR0bF9pbmhlcml0ID0gZ2VuZXZlLSZndDtjZmcudHRsX2luaGVyaXQ7Ci0JYm9vbCBtZXRhZGF0YSA9IGdlbmV2ZS0mZ3Q7Y2ZnLmNvbGxlY3RfbWQ7Ci0Jc3RydWN0IGlmbGFfZ2VuZXZlX3BvcnRfcmFuZ2UgcG9ydHMgPSB7Ci0JCS5sb3cJPSBodG9ucyhnZW5ldmUtJmd0O2NmZy5wb3J0X21pbiksCi0JCS5oaWdoCT0gaHRvbnMoZ2VuZXZlLSZndDtjZmcucG9ydF9tYXgpLAotCX07CiYjNDM7CWNvbnN0IHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlzdHJ1Y3QgaWZsYV9nZW5ldmVfcG9ydF9yYW5nZSBwb3J0czsKJiM0MzsJY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZzsKJiM0MzsJY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvOwomIzQzOwlib29sIHR0bF9pbmhlcml0LCBtZXRhZGF0YTsKIAlfX3U4IHRtcF92bmlbM107CiAJX191MzIgdm5pOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwljZmcgPSByY3VfZGVyZWZlcmVuY2UoZ2VuZXZlLSZndDtjZmcpOwomIzQzOwlpZiAoIWNmZykgewomIzQzOwkJZXJyID0gLUVOT0RFVjsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWluZm8gPSAmYW1wO2NmZy0mZ3Q7aW5mbzsKJiM0MzsJdHRsX2luaGVyaXQgPSBjZmctJmd0O3R0bF9pbmhlcml0OwomIzQzOwltZXRhZGF0YSA9IGNmZy0mZ3Q7Y29sbGVjdF9tZDsKJiM0MzsJcG9ydHMubG93ID0gaHRvbnMoY2ZnLSZndDtwb3J0X21pbik7CiYjNDM7CXBvcnRzLmhpZ2ggPSBodG9ucyhjZmctJmd0O3BvcnRfbWF4KTsKIAogCXR1bm5lbF9pZF90b192bmkoaW5mby0mZ3Q7a2V5LnR1bl9pZCwgdG1wX3ZuaSk7CiAJdm5pID0gKHRtcF92bmlbMF0gJmx0OyZsdDsgMTYpIHwgKHRtcF92bmlbMV0gJmx0OyZsdDsgOCkgfCB0bXBfdm5pWzJdOwpAQCAtMjQ2OCwxNyAmIzQzOzI1MTIsMTcgQEAgc3RhdGljIGludCBnZW5ldmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAjZW5kaWYKIAl9CiAKLQlpZiAoIWdlbmV2ZS0mZ3Q7Y2ZnLmR1YWxzdGFjaykgewomIzQzOwlpZiAoIWNmZy0mZ3Q7ZHVhbHN0YWNrKSB7CiAJCWlmIChpcF90dW5uZWxfaW5mb19hZihpbmZvKSA9PSBBRl9JTkVUKSB7CiAJCQlpZiAoKGluZm8tJmd0O2tleS51LmlwdjQuc3JjIHx8Ci0JCQkgICAgIGdlbmV2ZS0mZ3Q7Y2ZnLmNvbGxlY3RfbWQpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgIG1ldGFkYXRhKSAmYW1wOyZhbXA7CiAJCQkgICAgbmxhX3B1dF9pbl9hZGRyKHNrYiwgSUZMQV9HRU5FVkVfTE9DQUwsCiAJCQkJCSAgICBpbmZvLSZndDtrZXkudS5pcHY0LnNyYykpCiAJCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKIAkJfSBlbHNlIHsKIAkJCWlmICgoIWlwdjZfYWRkcl9hbnkoJmFtcDtpbmZvLSZndDtrZXkudS5pcHY2LnNyYykgfHwKLQkJCSAgICAgZ2VuZXZlLSZndDtjZmcuY29sbGVjdF9tZCkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAgbWV0YWRhdGEpICZhbXA7JmFtcDsKIAkJCSAgICBubGFfcHV0X2luNl9hZGRyKHNrYiwgSUZMQV9HRU5FVkVfTE9DQUw2LAogCQkJCQkgICAgICZhbXA7aW5mby0mZ3Q7a2V5LnUuaXB2Ni5zcmMpKQogCQkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwpAQCAtMjQ5MSw3ICYjNDM7MjUzNSw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCSAgICBubGFfcHV0X2JlMzIoc2tiLCBJRkxBX0dFTkVWRV9MQUJFTCwgaW5mby0mZ3Q7a2V5LmxhYmVsKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlpZiAobmxhX3B1dF91OChza2IsIElGTEFfR0VORVZFX0RGLCBnZW5ldmUtJmd0O2NmZy5kZikpCiYjNDM7CWlmIChubGFfcHV0X3U4KHNrYiwgSUZMQV9HRU5FVkVfREYsIGNmZy0mZ3Q7ZGYpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAogCWlmIChubGFfcHV0X2JlMTYoc2tiLCBJRkxBX0dFTkVWRV9QT1JULCBpbmZvLSZndDtrZXkudHBfZHN0KSkKQEAgLTI1MDIsMjggJiM0MzsyNTQ2LDMxIEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKIAlpZiAobmxhX3B1dF91OChza2IsIElGTEFfR0VORVZFX1VEUF9aRVJPX0NTVU02X1JYLAotCQkgICAgICAgIWdlbmV2ZS0mZ3Q7Y2ZnLnVzZV91ZHA2X3J4X2NoZWNrc3VtcykpCiYjNDM7CQkgICAgICAgIWNmZy0mZ3Q7dXNlX3VkcDZfcnhfY2hlY2tzdW1zKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAjZW5kaWYKIAogCWlmIChubGFfcHV0X3U4KHNrYiwgSUZMQV9HRU5FVkVfVFRMX0lOSEVSSVQsIHR0bF9pbmhlcml0KSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlpZiAoZ2VuZXZlLSZndDtjZmcuaW5uZXJfcHJvdG9faW5oZXJpdCAmYW1wOyZhbXA7CiYjNDM7CWlmIChjZmctJmd0O2lubmVyX3Byb3RvX2luaGVyaXQgJmFtcDsmYW1wOwogCSAgICBubGFfcHV0X2ZsYWcoc2tiLCBJRkxBX0dFTkVWRV9JTk5FUl9QUk9UT19JTkhFUklUKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKIAlpZiAobmxhX3B1dChza2IsIElGTEFfR0VORVZFX1BPUlRfUkFOR0UsIHNpemVvZihwb3J0cyksICZhbXA7cG9ydHMpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAotCWlmIChnZW5ldmUtJmd0O2NmZy5ncm9faGludCAmYW1wOyZhbXA7CiYjNDM7CWlmIChjZmctJmd0O2dyb19oaW50ICZhbXA7JmFtcDsKIAkgICAgbmxhX3B1dF9mbGFnKHNrYiwgSUZMQV9HRU5FVkVfR1JPX0hJTlQpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAotCXJldHVybiAwOwomIzQzO291dDoKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CXJldHVybiBlcnI7CiAKIG5sYV9wdXRfZmFpbHVyZToKLQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwllcnIgPSAtRU1TR1NJWkU7CiYjNDM7CWdvdG8gb3V0OwogfQogCiBzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgZ2VuZXZlX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7CkBAIC0yNjcxLDYgJiM0MzsyNzE4LDcgQEAgc3RhdGljIHZvaWQgX19leGl0IGdlbmV2ZV9jbGVhbnVwX21vZHVsZSh2b2lkKQogCXJ0bmxfbGlua191bnJlZ2lzdGVyKCZhbXA7Z2VuZXZlX2xpbmtfb3BzKTsKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmYW1wO2dlbmV2ZV9ub3RpZmllcl9ibG9jayk7CiAJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZhbXA7Z2VuZXZlX25ldF9vcHMpOwomIzQzOwlyY3VfYmFycmllcigpOwogfQogbW9kdWxlX2V4aXQoZ2VuZXZlX2NsZWFudXBfbW9kdWxlKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDA4MwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDYyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEdFTkVWRSBDb25maWd1cmF0aW9uIFBhdGNoIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBgZHJpdmVycy9uZXQvZ2VuZXZlLmNgLCBhbmQgaXQmIzM5O3MgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZS4gVGhleSYjMzk7cmUgc3dpdGNoaW5nIGhvdyBgZ2VuZXZlX2NvbmZpZ2AgaXMgYWNjZXNzZWQsIG1vdmluZyBmcm9tIGEgZGlyZWN0IGBzdHJ1Y3RgIHRvIGFuIGBfX3JjdSAqYCBwb2ludGVyIHdpdGhpbiB0aGUgYGdlbmV2ZV9kZXZgIHN0cnVjdHVyZS4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBhcyBzb21ldGhpbmcgdGhhdCAqbmVlZHMqIGZ1enppbmcuIEl0JiMzOTtzIGRlc2lnbmVkIHRvIGZpeCBSQ1UgZGVyZWZlcmVuY2luZyBpc3N1ZXMsIGVzc2VudGlhbGx5IHJlcGxhY2luZyB0aGUgb2xkIHN5bmNocm9ub3VzIGBnZW5ldmVfcXVpZXNjZWAgYW5kIGBnZW5ldmVfdW5xdWllc2NlYCBtZWNoYW5pc21zIHdpdGggUkNVLWJhc2VkIGF0b21pYyBjb25maWd1cmF0aW9uIHVwZGF0ZXMuIFRoYXQmIzM5O3MgYSBzb2xpZCB3aW4gZm9yIGNvbmN1cnJlbmN5LCBidXQgYSBwb3RlbnRpYWwgbGFuZG1pbmUgaWYgdGhlIFJDVSB1c2FnZSBpc24mIzM5O3QgcGVyZmVjdC4KCkxldCYjMzk7cyBkcmlsbCBkb3duIGFuZCBmaWd1cmUgb3V0IHRoZSBiZXN0IGZvY3VzIHBvaW50cyBmb3IgZnV6emluZy4gSSYjMzk7dmUgZ290IGEgbGlzdCBvZiB0aGUgbW9kaWZpZWQgc3ltYm9sczogYGdlbmV2ZV9sb29rdXBgLCBgZ2VuZXZlNl9sb29rdXBgLCBgZ2VuZXZlX3VkcF9lbmNhcF9yZWN2YCwgYGdlbmV2ZV9jcmVhdGVfc29ja2AsIGFsbCB0aGUgd2F5IGRvd24gdG8gYGdlbmV2ZV9maWxsX2luZm9gLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXZvaWQgdGhlIGhvdCBwYXRoIGZ1bmN0aW9ucyBsaWtlIGBnZW5ldmVfeG1pdGAsIGBnZW5ldmVfeG1pdF9za2JgLCBhbmQgc28gb24uIFRoZXkmIzM5O3JlIGltcG9ydGFudCwgYnV0IHRoZWlyIHNoZWVyIHZvbHVtZSBvZiBleGVjdXRpb24gbWlnaHQgZHJvd24gb3V0IHN1YnRsZSBjb25jdXJyZW5jeSBidWdzLiBUaGUgc2FtZSBnb2VzIGZvciByZWNlaXZlIHByb2Nlc3NpbmcgbGlrZSBgZ2VuZXZlX3VkcF9lbmNhcF9yZWN2YCB3aGljaCB3aWxsIGJlIGNvbXBsZXggd2l0aCB0aGUgZW5jYXAgYW5kIGRlY2Fwc3VsYXRpb24uCgpJbnN0ZWFkLCBJJiMzOTtsbCBwcmlvcml0aXplIHRoZSBjb25maWd1cmF0aW9uIGFuZCBjb250cm9sIHBhdGggZnVuY3Rpb25zLiBNeSB0YXJnZXQgbGlzdCBpczoKCiogICBgZ2VuZXZlX2NoYW5nZWxpbmtgCiogICBgZ2VuZXZlX2NvbmZpZ3VyZWAKKiAgIGBnZW5ldmVfbmV3bGlua2AgKGV2ZW4gdGhvdWdoIGl0JiMzOTtzIG1pbmltYWxseSB0b3VjaGVkLCBpdCBjYWxscyBgZ2VuZXZlX2NvbmZpZ3VyZWAsIHNvIGl0JiMzOTtzIHJlbGV2YW50KQoqICAgYGdlbmV2ZV9maWxsX2luZm9gCiogICBUaGUgbmV3bHkgaW50cm9kdWNlZCBmdW5jdGlvbnMsIGxpa2UgYGdlbmV2ZV9jb25maWdfYWxsb2NgLCBgZ2VuZXZlX2NvbmZpZ19mcmVlYCwgYW5kIGBnZW5ldmVfZnJlZV9kZXZgIGFyZSBhbHNvIGhpZ2ggdmFsdWUgc2luY2UgdGhleSBpbXBsZW1lbnQgdGhlIG5ldyBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQuCgpJIGFsc28gbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgR0VORVZFLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gdGFyZ2V0aW5nIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZWl0aGVyIGluIGBkcml2ZXJzL25ldC9LY29uZmlnYCBvciBtYXliZSB3aXRoaW4gYGRyaXZlcnMvbmV0L2dlbmV2ZS5jYCBpdHNlbGYuIFRoaXMgd2lsbCBpbmZvcm0gdGhlIGluaXRpYWwgZnV6eiBoYXJuZXNzIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBHRU5FVkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0yMzA9Y29uZmlnIFZYTEFOXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNDQtXG5kcml2ZXJzL25ldC9LY29uZmlnOjI0NTpjb25maWcgR0VORVZFXG5kcml2ZXJzL25ldC9LY29uZmlnLTI0Ni1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgTmV0d29yayBWaXJ0dWFsaXphdGlvbiBFbmNhcHN1bGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMTcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipFeGFtaW5pbmcgdGhlIEdFTkVWRSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIGBHRU5FVkVgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBwb2ludCBoZXJlLCB0aGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEFyZSB0aGVyZSAqYW55KiBvdGhlciBjb25maWd1cmF0aW9ucyB3ZSBuZWVkIHRvIGNvbnNpZGVyPyBMZXQmIzM5O3Mgc2VlLi4uIEFoLCB5ZXMsIGBDT05GSUdfSVBWNmAgaXMgYWxzbyBiZWluZyByZWZlcmVuY2VkIGluIHRoZSBjb2RlLCBzbyB0aGF0JiMzOTtzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQsIGFsdGhvdWdoIGBDT05GSUdfR0VORVZFYCBhcHBlYXJzIHRvIGJlIHRoZSBwcmltYXJ5IG9uZS4gTm93LCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbiwgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZWJhc2UgYW5kIGFuYWx5emUgaXRzIGFwcGxpY2F0aW9uLgoKTGV0JiMzOTtzIGZvY3VzIG9uIGBnZW5ldmVfY2hhbmdlbGlua2AgYW5kIGBnZW5ldmVfY29uZmlndXJlYC4gQXJlIHRoZXNlIHRoZSByaWdodCBmdW5jdGlvbnMgdG8gemVybyBpbiBvbiB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29uZmlndXJhdGlvbiBhY3R1YWxseSBnZXRzIHB1dCBpbnRvIGVmZmVjdD8gVGhleSBzZWVtIGxpa2Ugc3Ryb25nIGNhbmRpZGF0ZXMsIGdpdmVuIHRoZSBuYW1lcy4gTXkgZ3V0IHNheXMgdGhleSYjMzk7bGwgYmUgY3JpdGljYWwgZm9jdXMgc3ltYm9scy4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aG9zZSBhbmQgc2VlIHdoZXJlIHRoZXkgbGVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5ldmVfY2hhbmdlbGluayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9nZW5ldmUuYz0yMzYzPXN0YXRpYyBpbnQgZ2VuZXZlX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yMzk4LSAqL1xuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjM5OTpzdGF0aWMgaW50IGdlbmV2ZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNDAwLVx0XHRcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTI1NzY9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGdlbmV2ZV9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTI1ODMtXHQubmV3bGlua1x0PSBnZW5ldmVfbmV3bGluayxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjI1ODQ6XHQuY2hhbmdlbGlua1x0PSBnZW5ldmVfY2hhbmdlbGluayxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTI1ODUtXHQuZGVsbGlua1x0PSBnZW5ldmVfZGVsbGluayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg2NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipGb2N1c2luZyBvbiBHZW5ldmUgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgYGdlbmV2ZV9jaGFuZ2VsaW5rYCBhbmQgYGdlbmV2ZV9jb25maWd1cmVgLiBUaG9zZSBhcmUgZGVmaW5pdGVseSB0aGUga2V5IGFyZWFzIHRvIGNvbmNlbnRyYXRlIG9uLiBUaGlua2luZyBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZWR1cmVzLCBzcGVjaWZpY2FsbHkgdGhvc2UgZnVuY3Rpb25zLCB0aGF0IGlzIHdoZXJlIHRoZSBpbnRyaWNhY2llcyBvZiBHZW5ldmUgaW1wbGVtZW50YXRpb24gd2lsbCB1bmRvdWJ0ZWRseSBsaWUuIGBnZW5ldmVfY2hhbmdlbGlua2AgaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIHRoZSBwcm9wZXIgaGFuZGxpbmcgb2YgbGluayBzdGF0ZSBjaGFuZ2VzIOKAkyB2aXRhbCBmb3IgcmVsaWFibGUgb3BlcmF0aW9uLiBBbmQgYGdlbmV2ZV9jb25maWd1cmVg4oCmIHdlbGwsIHRoYXQmIzM5O3MgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIsIGlzbiYjMzk7dCBpdD8gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIHNldHVwIGxvZ2ljIGxpdmVzOyBhbnkgYXJjaGl0ZWN0dXJhbCB3ZWFrbmVzc2VzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHdpbGwgYmVjb21lIHJlYWRpbHkgYXBwYXJlbnQgdGhlcmUuIEkgbmVlZCB0byBtYWtlIGEgbWVudGFsIG5vdGUgdG8gc2NydXRpbml6ZSB0aGVpciBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5ldmVfY29uZmlndXJlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2dlbmV2ZS5jPTE5NzM9c3RhdGljIGJvb2wgZ2VuZXZlX2RzdF9hZGRyX2VxdWFsKHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqYSxcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xOTgxLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MTk4MjpzdGF0aWMgaW50IGdlbmV2ZV9jb25maWd1cmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTk4My1cdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTIzNjM9c3RhdGljIGludCBnZW5ldmVfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTIzODUtXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoyMzg2Olx0ZXJyID0gZ2VuZXZlX2NvbmZpZ3VyZShsaW5rX25ldCwgZGV2LCBleHRhY2ssIFx1MDAyNmNmZyk7XG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yMzg3LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYz0yNTkwPXN0cnVjdCBuZXRfZGV2aWNlICpnZW5ldmVfZGV2X2NyZWF0ZV9mYihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjYxMy1cdGluaXRfdG5sX2luZm8oXHUwMDI2Y2ZnLmluZm8sIGRzdF9wb3J0KTtcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjI2MTQ6XHRlcnIgPSBnZW5ldmVfY29uZmlndXJlKG5ldCwgZGV2LCBOVUxMLCBcdTAwMjZjZmcpO1xuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjYxNS1cdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQyNgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgRm9jdXMgU3ltYm9scyBpbiBHZW5ldmUgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgdGhpbmtpbmcgYWJvdXQgdGhpcyBgZ2VuZXZlX2NvbmZpZ3VyZWAgaXMgYSBzb2xpZCwgY2xlYW4gc3ltYm9sIHRvIHN0YXJ0IHdpdGguIEl0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoZSBjb3JlIGZ1bmN0aW9uOiBzZXR0aW5nIHVwIGFuZCBtYW5hZ2luZyB0aGUgR2VuZXZlIGNvbmZpZ3VyYXRpb24uIEl04oCZcyBjb25jaXNlIGFuZCBjb252ZXlzIHRoZSBhcHByb3ByaWF0ZSBsZXZlbCBvZiBhYnN0cmFjdGlvbi4gTW92aW5nIG9uIHRvIGBnZW5ldmVfZmlsbF9pbmZvYCBmZWVscyBsaWtlIGEgbmF0dXJhbCBwcm9ncmVzc2lvbi4gSXQgZG92ZXRhaWxzIHBlcmZlY3RseSBhcyBhIGNvbXBhbmlvbjsgdGhlIGltcGxpY2F0aW9uIGJlaW5nIHRoZSBhY3Qgb2YgKnBvcHVsYXRpbmcqIG9yICpjb21wbGV0aW5nKiB0aGUgbmVjZXNzYXJ5IGRldGFpbHMgZm9yIHRoYXQgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBnb29kOyB0aGUgc3ltYm9scyB3b3JrIGluIHRhbmRlbSB0byBjcmVhdGUgYSBjbGVhciBwcm9ncmVzc2lvbiBmcm9tIGNvbmZpZ3VyYXRpb24gdG8gaW5zdGFudGlhdGlvbi4gSXQgaGVscHMgdG8gZGVsaW5lYXRlIHRoZSBmdW5jdGlvbmFsIGFyZWFzIGNsZWFybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dlbmV2ZV9maWxsX2luZm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ2VuZXZlLmM9MjQ0ND1zdGF0aWMgc2l6ZV90IGdlbmV2ZV9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTI0NjQtXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoyNDY1OnN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjQ2Ni17XG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MjU3Nj1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgZ2VuZXZlX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjU4Ni1cdC5nZXRfc2l6ZVx0PSBnZW5ldmVfZ2V0X3NpemUsXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoyNTg3Olx0LmZpbGxfaW5mb1x0PSBnZW5ldmVfZmlsbF9pbmZvLFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjU4OC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjg1NgoJCQkJCQkJb3V0cHV0OiAxNjIKCQkJCQkJCXRob3VnaHRzOiAyMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgdGhlIEdFTkVWRSBEcml2ZXImIzM5O3MgQ29uZmlndXJhdGlvbiBIYW5kbGluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc2lnbmlmaWNhbnQgc2hpZnQgaW4gaG93IHRoZSBHRU5FVkUgZHJpdmVyIG1hbmFnZXMgaXRzIGNvbmZpZ3VyYXRpb24gZGF0YSwgc3BlY2lmaWNhbGx5IHRoZSBgc3RydWN0IGdlbmV2ZV9jb25maWdgLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGRpdGNoaW5nIHRoZSBvbGQgc3luY2hyb25vdXMgYGdlbmV2ZV9xdWllc2NlYC9gZ2VuZXZlX3VucXVpZXNjZWAgbWV0aG9kLCB3aGljaCBpcyBnb29kLiBUaGF0IGBzeW5jaHJvbml6ZV9uZXQoKWAgY2FsbCB3YXMgcHJvYmFibHkgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLCBhbmQgdGhlIFJDVS1iYXNlZCBwb2ludGVyIHN3YXAgdGhleSYjMzk7cmUgdXNpbmcgc2hvdWxkIGJlIGEgYmlnIGltcHJvdmVtZW50LCBhbGxvd2luZyBsb2NrbGVzcyBhY2Nlc3MgaW4gdGhlIGRhdGEgcGF0aC4KCkZ1bmN0aW9uYWxseSwgdGhpcyBtZWFucyB0aGUgY29udHJvbCBwYXRoIGlzIHVuZGVyZ29pbmcgYSB0cmFuc2Zvcm1hdGlvbi4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgUkNVIGZvciBtYW5hZ2luZyB0aGF0IGBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZ2AuIFNvLCBJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoZSBuZXRsaW5rIGNvbnRyb2wgcGF0aCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aG9zZSBmdW5jdGlvbnMgdGhhdCBkZWFsIHdpdGggYWxsb2NhdGluZywgdXBkYXRpbmcsIGFuZCBmcmVlaW5nIHRoZSBjb25maWd1cmF0aW9uLiBJIHNob3VsZCBwcm9iYWJseSBwYXkgZXh0cmEgYXR0ZW50aW9uIHRvIGBnZW5ldmVfY2hhbmdlbGlua2AsIGBnZW5ldmVfY29uZmlndXJlYCwgYGdlbmV2ZV9maWxsX2luZm9gLCBgZ2VuZXZlX2NvbmZpZ19hbGxvY2AsIGFuZCBgZ2VuZXZlX2ZyZWVfZGV2YCAtLSB0aG9zZSBzZWVtIGxpa2UgdGhlIGtleSBhcmVhcyBhZmZlY3RlZCBieSB0aGlzIFJDVSBpbXBsZW1lbnRhdGlvbi4gVGhpcyB3aWxsIGJlIGNyaXRpY2FsIGZvciBjb25jdXJyZW50IGFjY2VzcyBhbmQgY29uZmlndXJhdGlvbiBjaGFuZ2VzLgoKVGhlIGBHRU5FVkVgIGNvbmZpZyBzZWVtcyB0byBiZSB0aGUgdHJpZ2dlciwgc28ga2VlcCBhbiBleWUgb3V0IGZvciB0aGF0IGJlaW5nIGVuYWJsZWQuIEdpdmVuIHRoaXMgUkNVIGltcGxlbWVudGF0aW9uLCB0aGVyZSBtaWdodCBiZSBzb21lIGludGVyZXN0aW5nIHJhY2UgY29uZGl0aW9ucyB0byBleHBsb2l0IGR1cmluZyBjb25maWd1cmF0aW9uIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtHRU5FVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZW5ldmVfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtnZW5ldmVfY29uZmlndXJlJiMzNDssCiAgICAmIzM0O2dlbmV2ZV9maWxsX2luZm8mIzM0OywKICAgICYjMzQ7Z2VuZXZlX2NvbmZpZ19hbGxvYyYjMzQ7LAogICAgJiMzNDtnZW5ldmVfZnJlZV9kZXYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBHRU5FVkUgZHJpdmVyIHRvIHVzZSBSQ1UgZm9yIGl0cyBjb25maWd1cmF0aW9uIChgc3RydWN0IGdlbmV2ZV9jb25maWdgKSwgcmVwbGFjaW5nIHRoZSBwcmV2aW91cyBzeW5jaHJvbm91cyBgZ2VuZXZlX3F1aWVzY2VgL2BnZW5ldmVfdW5xdWllc2NlYCBtZWNoYW5pc20uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgaG93IGNvbmZpZ3VyYXRpb24gdXBkYXRlcyBhcmUgaGFuZGxlZCBjb25jdXJyZW50bHkgd2l0aCB0aGUgZGF0YSBwYXRoLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBjb250cm9sIHBhdGggZnVuY3Rpb25zIHRoYXQgYWxsb2NhdGUsIHVwZGF0ZSwgYW5kIGZyZWUgdGhlIGNvbmZpZ3VyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dFTkVWRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbmV2ZV9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2dlbmV2ZV9jb25maWd1cmUmIzM0OywKICAgICYjMzQ7Z2VuZXZlX2ZpbGxfaW5mbyYjMzQ7LAogICAgJiMzNDtnZW5ldmVfY29uZmlnX2FsbG9jJiMzNDssCiAgICAmIzM0O2dlbmV2ZV9mcmVlX2RldiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEdFTkVWRSBkcml2ZXIgdG8gdXNlIFJDVSBmb3IgaXRzIGNvbmZpZ3VyYXRpb24gKGBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZ2ApLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIHN5bmNocm9ub3VzIGBnZW5ldmVfcXVpZXNjZWAvYGdlbmV2ZV91bnF1aWVzY2VgIG1lY2hhbmlzbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBob3cgY29uZmlndXJhdGlvbiB1cGRhdGVzIGFyZSBoYW5kbGVkIGNvbmN1cnJlbnRseSB3aXRoIHRoZSBkYXRhIHBhdGguIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIGNvbnRyb2wgcGF0aCBmdW5jdGlvbnMgdGhhdCBhbGxvY2F0ZSwgdXBkYXRlLCBhbmQgZnJlZSB0aGUgY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjUzOjMxLjg2NzExMTI0NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjY4Nzc3NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkdFTkVWRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbmV2ZV9jaGFuZ2VsaW5rXCIsXG4gICAgXCJnZW5ldmVfY29uZmlndXJlXCIsXG4gICAgXCJnZW5ldmVfZmlsbF9pbmZvXCIsXG4gICAgXCJnZW5ldmVfY29uZmlnX2FsbG9jXCIsXG4gICAgXCJnZW5ldmVfZnJlZV9kZXZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEdFTkVWRSBkcml2ZXIgdG8gdXNlIFJDVSBmb3IgaXRzIGNvbmZpZ3VyYXRpb24gKGBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZ2ApLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIHN5bmNocm9ub3VzIGBnZW5ldmVfcXVpZXNjZWAvYGdlbmV2ZV91bnF1aWVzY2VgIG1lY2hhbmlzbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBob3cgY29uZmlndXJhdGlvbiB1cGRhdGVzIGFyZSBoYW5kbGVkIGNvbmN1cnJlbnRseSB3aXRoIHRoZSBkYXRhIHBhdGguIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIGNvbnRyb2wgcGF0aCBmdW5jdGlvbnMgdGhhdCBhbGxvY2F0ZSwgdXBkYXRlLCBhbmQgZnJlZSB0aGUgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6NTM6MzEuODY3MTE2ODQ1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTc3NTY5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzYTFkMDk0MWRiYzkwZDYzOWE5MjJjYWQ2MDIxNWI5Mzc3NWI5NTRlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDcgMjM6NTM6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2VuZXZlLmMgYi9kcml2ZXJzL25ldC9nZW5ldmUuY1xcbmluZGV4IDM5NmUxYTExM2NkNDllLi4xN2JkMzU0M2Q1ODdhOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9nZW5ldmUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2dlbmV2ZS5jXFxuQEAgLTgyLDYgKzgyLDcgQEAgc3RydWN0IGdlbmV2ZV9jb25maWcge1xcbiBcXHR1MTZcXHRcXHRcXHRwb3J0X21pbjtcXG4gXFx0dTE2XFx0XFx0XFx0cG9ydF9tYXg7XFxuIFxcbitcXHRzdHJ1Y3QgcmN1X2hlYWRcXHRcXHRyY3U7XFxuIFxcdC8qIE11c3QgYmUgbGFzdCAtLWVuZHMgaW4gYSBmbGV4aWJsZS1hcnJheSBtZW1iZXIuICovXFxuIFxcdHN0cnVjdCBpcF90dW5uZWxfaW5mb1xcdGluZm87XFxuIH07XFxuQEAgLTEwMCw3ICsxMDEsNyBAQCBzdHJ1Y3QgZ2VuZXZlX2RldiB7XFxuICNlbmRpZlxcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkICAgbmV4dDtcXHQvKiBnZW5ldmUncyBwZXIgbmFtZXNwYWNlIGxpc3QgKi9cXG4gXFx0c3RydWN0IGdyb19jZWxscyAgIGdyb19jZWxscztcXG4tXFx0c3RydWN0IGdlbmV2ZV9jb25maWcgY2ZnO1xcbitcXHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyBfX3JjdSAqY2ZnO1xcbiB9O1xcbiBcXG4gc3RydWN0IGdlbmV2ZV9zb2NrIHtcXG5AQCAtMTgyLDggKzE4MywxMCBAQCBzdGF0aWMgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZV9sb29rdXAoc3RydWN0IGdlbmV2ZV9zb2NrICpncyxcXG4gXFx0aGFzaCA9IGdlbmV2ZV9uZXRfdm5pX2hhc2godm5pKTtcXG4gXFx0dm5pX2xpc3RfaGVhZCA9IFxcdTAwMjZncy1cXHUwMDNldm5pX2xpc3RbaGFzaF07XFxuIFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCB2bmlfbGlzdF9oZWFkLCBobGlzdCkge1xcbi1cXHRcXHRpZiAoZXFfdHVuX2lkX2FuZF92bmkoKHU4ICopXFx1MDAyNm5vZGUtXFx1MDAzZWdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8ua2V5LnR1bl9pZCwgdm5pKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgYWRkciA9PSBub2RlLVxcdTAwM2VnZW5ldmUtXFx1MDAzZWNmZy5pbmZvLmtleS51LmlwdjQuZHN0KVxcbitcXHRcXHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnID0gcmN1X2RlcmVmZXJlbmNlKG5vZGUtXFx1MDAzZWdlbmV2ZS1cXHUwMDNlY2ZnKTtcXG4rXFxuK1xcdFxcdGlmIChlcV90dW5faWRfYW5kX3ZuaSgodTggKilcXHUwMDI2Y2ZnLVxcdTAwM2VpbmZvLmtleS50dW5faWQsIHZuaSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGFkZHIgPT0gY2ZnLVxcdTAwM2VpbmZvLmtleS51LmlwdjQuZHN0KVxcbiBcXHRcXHRcXHRyZXR1cm4gbm9kZS1cXHUwMDNlZ2VuZXZlO1xcbiBcXHR9XFxuIFxcdHJldHVybiBOVUxMO1xcbkBAIC0yMDEsOCArMjA0LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlNl9sb29rdXAoc3RydWN0IGdlbmV2ZV9zb2NrICpncyxcXG4gXFx0aGFzaCA9IGdlbmV2ZV9uZXRfdm5pX2hhc2godm5pKTtcXG4gXFx0dm5pX2xpc3RfaGVhZCA9IFxcdTAwMjZncy1cXHUwMDNldm5pX2xpc3RbaGFzaF07XFxuIFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCB2bmlfbGlzdF9oZWFkLCBobGlzdCkge1xcbi1cXHRcXHRpZiAoZXFfdHVuX2lkX2FuZF92bmkoKHU4ICopXFx1MDAyNm5vZGUtXFx1MDAzZWdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8ua2V5LnR1bl9pZCwgdm5pKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgaXB2Nl9hZGRyX2VxdWFsKFxcdTAwMjZhZGRyNiwgXFx1MDAyNm5vZGUtXFx1MDAzZWdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8ua2V5LnUuaXB2Ni5kc3QpKVxcbitcXHRcXHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnID0gcmN1X2RlcmVmZXJlbmNlKG5vZGUtXFx1MDAzZWdlbmV2ZS1cXHUwMDNlY2ZnKTtcXG4rXFxuK1xcdFxcdGlmIChlcV90dW5faWRfYW5kX3ZuaSgodTggKilcXHUwMDI2Y2ZnLVxcdTAwM2VpbmZvLmtleS50dW5faWQsIHZuaSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGlwdjZfYWRkcl9lcXVhbChcXHUwMDI2YWRkcjYsIFxcdTAwMjZjZmctXFx1MDAzZWluZm8ua2V5LnUuaXB2Ni5kc3QpKVxcbiBcXHRcXHRcXHRyZXR1cm4gbm9kZS1cXHUwMDNlZ2VuZXZlO1xcbiBcXHR9XFxuIFxcdHJldHVybiBOVUxMO1xcbkBAIC0zODYsMTEgKzM5MSw2IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdGVyciA9IGRzdF9jYWNoZV9pbml0KFxcdTAwMjZnZW5ldmUtXFx1MDAzZWNmZy5pbmZvLmRzdF9jYWNoZSwgR0ZQX0tFUk5FTCk7XFxuLVxcdGlmIChlcnIpIHtcXG4tXFx0XFx0Z3JvX2NlbGxzX2Rlc3Ryb3koXFx1MDAyNmdlbmV2ZS1cXHUwMDNlZ3JvX2NlbGxzKTtcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0fVxcbiBcXHRuZXRkZXZfbG9ja2RlcF9zZXRfY2xhc3NlcyhkZXYpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0zOTksNyArMzk5LDYgQEAgc3RhdGljIHZvaWQgZ2VuZXZlX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXG4tXFx0ZHN0X2NhY2hlX2Rlc3Ryb3koXFx1MDAyNmdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8uZHN0X2NhY2hlKTtcXG4gXFx0Z3JvX2NlbGxzX2Rlc3Ryb3koXFx1MDAyNmdlbmV2ZS1cXHUwMDNlZ3JvX2NlbGxzKTtcXG4gfVxcbiBcXG5AQCAtNjUwLDYgKzY0OSw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX3Bvc3RfZGVjYXBfaGludChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIC8qIENhbGxiYWNrIGZyb20gbmV0L2lwdjQvdWRwLmMgdG8gcmVjZWl2ZSBwYWNrZXRzICovXFxuIHN0YXRpYyBpbnQgZ2VuZXZlX3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbitcXHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnO1xcbiBcXHRzdHJ1Y3QgZ2VuZXZlaGRyICpnZW5ldmVoO1xcbiBcXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlO1xcbiBcXHRzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzO1xcbkBAIC02NzUsOCArNjc1LDkgQEAgc3RhdGljIGludCBnZW5ldmVfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gXFx0aW5uZXJfcHJvdG8gPSBnZW5ldmVoLVxcdTAwM2Vwcm90b190eXBlO1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KCghZ2VuZXZlLVxcdTAwM2VjZmcuaW5uZXJfcHJvdG9faW5oZXJpdCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgICBpbm5lcl9wcm90byAhPSBodG9ucyhFVEhfUF9URUIpKSkpIHtcXG4rXFx0Y2ZnID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS1cXHUwMDNlY2ZnKTtcXG4rXFx0aWYgKHVubGlrZWx5KCFjZmcgfHwgKCFjZmctXFx1MDAzZWlubmVyX3Byb3RvX2luaGVyaXQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICAgaW5uZXJfcHJvdG8gIT0gaHRvbnMoRVRIX1BfVEVCKSkpKSB7XFxuIFxcdFxcdGRldl9kc3RhdHNfcnhfZHJvcHBlZChnZW5ldmUtXFx1MDAzZWRldik7XFxuIFxcdFxcdGdvdG8gZHJvcDtcXG4gXFx0fVxcbkBAIC03NjIsOSArNzYzLDEwIEBAIHN0YXRpYyBpbnQgZ2VuZXZlX3VkcF9lbmNhcF9lcnJfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBzb2NrICpnZW5ldmVfY3JlYXRlX3NvY2soc3RydWN0IG5ldCAqbmV0LFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsIGJvb2wgaXB2NilcXG4ge1xcbi1cXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBcXHUwMDI2Z2VuZXZlLVxcdTAwM2VjZmcuaW5mbztcXG4rXFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gXFx1MDAyNmNmZy1cXHUwMDNlaW5mbztcXG4gXFx0c3RydWN0IHVkcF9wb3J0X2NmZyB1ZHBfY29uZjtcXG4gXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4gXFx0aW50IGVycjtcXG5AQCAtNzc1LDcgKzc3Nyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqZ2VuZXZlX2NyZWF0ZV9zb2NrKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0aWYgKGlwdjYpIHtcXG4gXFx0XFx0dWRwX2NvbmYuZmFtaWx5ID0gQUZfSU5FVDY7XFxuIFxcdFxcdHVkcF9jb25mLmlwdjZfdjZvbmx5ID0gMTtcXG4tXFx0XFx0dWRwX2NvbmYudXNlX3VkcDZfcnhfY2hlY2tzdW1zID0gZ2VuZXZlLVxcdTAwM2VjZmcudXNlX3VkcDZfcnhfY2hlY2tzdW1zO1xcbitcXHRcXHR1ZHBfY29uZi51c2VfdWRwNl9yeF9jaGVja3N1bXMgPSBjZmctXFx1MDAzZXVzZV91ZHA2X3J4X2NoZWNrc3VtcztcXG4gXFx0XFx0dWRwX2NvbmYubG9jYWxfaXA2ID0gaW5mby1cXHUwMDNla2V5LnUuaXB2Ni5zcmM7XFxuIFxcdH0gZWxzZVxcbiAjZW5kaWZcXG5AQCAtOTkxLDcgKzk5Myw4IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2dyb19jb21wbGV0ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcbiAvKiBDcmVhdGUgbmV3IGxpc3RlbiBzb2NrZXQgaWYgbmVlZGVkICovXFxuIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdlbmV2ZV9zb2NrZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxcbitcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLCBib29sIGlwdjYpXFxuIHtcXG4gXFx0c3RydWN0IGdlbmV2ZV9uZXQgKmduID0gbmV0X2dlbmVyaWMobmV0LCBnZW5ldmVfbmV0X2lkKTtcXG4gXFx0c3RydWN0IHVkcF90dW5uZWxfc29ja19jZmcgdHVubmVsX2NmZztcXG5AQCAtMTAwMyw3ICsxMDA2LDcgQEAgc3RhdGljIHN0cnVjdCBnZW5ldmVfc29jayAqZ2VuZXZlX3NvY2tldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRpZiAoIWdzKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gXFxuLVxcdHNrID0gZ2VuZXZlX2NyZWF0ZV9zb2NrKG5ldCwgZ2VuZXZlLCBpcHY2KTtcXG4rXFx0c2sgPSBnZW5ldmVfY3JlYXRlX3NvY2sobmV0LCBnZW5ldmUsIGNmZywgaXB2Nik7XFxuIFxcdGlmIChJU19FUlIoc2spKSB7XFxuIFxcdFxcdGtmcmVlKGdzKTtcXG4gXFx0XFx0cmV0dXJuIEVSUl9DQVNUKHNrKTtcXG5AQCAtMTA2MCwxMiArMTA2MywxMyBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfc29ja19yZWxlYXNlKHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUpXFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdlbmV2ZV9maW5kX3NvY2soc3RydWN0IG5ldCAqbmV0LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsIGJvb2wgaXB2NilcXG4ge1xcbiBcXHRzdHJ1Y3QgZ2VuZXZlX25ldCAqZ24gPSBuZXRfZ2VuZXJpYyhuZXQsIGdlbmV2ZV9uZXRfaWQpO1xcbi1cXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBcXHUwMDI2Z2VuZXZlLVxcdTAwM2VjZmcuaW5mbztcXG4rXFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gXFx1MDAyNmNmZy1cXHUwMDNlaW5mbztcXG4gXFx0c2FfZmFtaWx5X3QgZmFtaWx5ID0gaXB2NiA/IEFGX0lORVQ2IDogQUZfSU5FVDtcXG4tXFx0Ym9vbCBncm9faGludCA9IGdlbmV2ZS1cXHUwMDNlY2ZnLmdyb19oaW50O1xcbitcXHRib29sIGdyb19oaW50ID0gY2ZnLVxcdTAwM2Vncm9faGludDtcXG4gXFx0X19iZTE2IGRzdF9wb3J0ID0gaW5mby1cXHUwMDNla2V5LnRwX2RzdDtcXG4gXFx0c3RydWN0IGdlbmV2ZV9zb2NrICpncztcXG4gXFxuQEAgLTEwOTUsNyArMTA5OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdlbmV2ZV9maW5kX3NvY2soc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBnZW5ldmVfc29ja19hZGQoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxcbitzdGF0aWMgaW50IGdlbmV2ZV9zb2NrX2FkZChzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxcbitcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLCBib29sIGlwdjYpXFxuIHtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gZ2VuZXZlLVxcdTAwM2VuZXQ7XFxuIFxcdHN0cnVjdCBnZW5ldmVfZGV2X25vZGUgKm5vZGU7XFxuQEAgLTExMDMsMTkgKzExMDgsMTkgQEAgc3RhdGljIGludCBnZW5ldmVfc29ja19hZGQoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxcbiBcXHRfX3U4IHZuaVszXTtcXG4gXFx0X191MzIgaGFzaDtcXG4gXFxuLVxcdGdzID0gZ2VuZXZlX2ZpbmRfc29jayhuZXQsIGdlbmV2ZSwgaXB2Nik7XFxuK1xcdGdzID0gZ2VuZXZlX2ZpbmRfc29jayhuZXQsIGdlbmV2ZSwgY2ZnLCBpcHY2KTtcXG4gXFx0aWYgKGdzKSB7XFxuIFxcdFxcdGdzLVxcdTAwM2VyZWZjbnQrKztcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdGdzID0gZ2VuZXZlX3NvY2tldF9jcmVhdGUobmV0LCBnZW5ldmUsIGlwdjYpO1xcbitcXHRncyA9IGdlbmV2ZV9zb2NrZXRfY3JlYXRlKG5ldCwgZ2VuZXZlLCBjZmcsIGlwdjYpO1xcbiBcXHRpZiAoSVNfRVJSKGdzKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIoZ3MpO1xcbiBcXG4gb3V0Olxcbi1cXHRncy1cXHUwMDNlY29sbGVjdF9tZCA9IGdlbmV2ZS1cXHUwMDNlY2ZnLmNvbGxlY3RfbWQ7XFxuLVxcdGdzLVxcdTAwM2Vncm9faGludCA9IGdlbmV2ZS1cXHUwMDNlY2ZnLmdyb19oaW50O1xcbitcXHRncy1cXHUwMDNlY29sbGVjdF9tZCA9IGNmZy1cXHUwMDNlY29sbGVjdF9tZDtcXG4rXFx0Z3MtXFx1MDAzZWdyb19oaW50ID0gY2ZnLVxcdTAwM2Vncm9faGludDtcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuIFxcdGlmIChpcHY2KSB7XFxuIFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtXFx1MDAzZXNvY2s2LCBncyk7XFxuQEAgLTExMjgsNyArMTEzMyw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX3NvY2tfYWRkKHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsIGJvb2wgaXB2NilcXG4gXFx0fVxcbiBcXHRub2RlLVxcdTAwM2VnZW5ldmUgPSBnZW5ldmU7XFxuIFxcbi1cXHR0dW5uZWxfaWRfdG9fdm5pKGdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8ua2V5LnR1bl9pZCwgdm5pKTtcXG4rXFx0dHVubmVsX2lkX3RvX3ZuaShjZmctXFx1MDAzZWluZm8ua2V5LnR1bl9pZCwgdm5pKTtcXG4gXFx0aGFzaCA9IGdlbmV2ZV9uZXRfdm5pX2hhc2godm5pKTtcXG4gXFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZub2RlLVxcdTAwM2VobGlzdCwgXFx1MDAyNmdzLVxcdTAwM2V2bmlfbGlzdFtoYXNoXSk7XFxuIFxcdHJldHVybiAwO1xcbkBAIC0xMTM3LDIxICsxMTQyLDIzIEBAIHN0YXRpYyBpbnQgZ2VuZXZlX3NvY2tfYWRkKHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsIGJvb2wgaXB2NilcXG4gc3RhdGljIGludCBnZW5ldmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xcbi1cXHRib29sIGR1YWxzdGFjayA9IGdlbmV2ZS1cXHUwMDNlY2ZnLmR1YWxzdGFjaztcXG4tXFx0Ym9vbCBpcHY0LCBpcHY2O1xcbitcXHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnO1xcbitcXHRib29sIGlwdjQsIGlwdjYsIGR1YWxzdGFjaztcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcbi1cXHRpcHY2ID0gZ2VuZXZlLVxcdTAwM2VjZmcuaW5mby5tb2RlIFxcdTAwMjYgSVBfVFVOTkVMX0lORk9fSVBWNiB8fCBkdWFsc3RhY2s7XFxuK1xcdGNmZyA9IHJ0bmxfZGVyZWZlcmVuY2UoZ2VuZXZlLVxcdTAwM2VjZmcpO1xcbitcXHRkdWFsc3RhY2sgPSBjZmctXFx1MDAzZWR1YWxzdGFjaztcXG4rXFx0aXB2NiA9IGNmZy1cXHUwMDNlaW5mby5tb2RlIFxcdTAwMjYgSVBfVFVOTkVMX0lORk9fSVBWNiB8fCBkdWFsc3RhY2s7XFxuIFxcdGlwdjQgPSAhaXB2NiB8fCBkdWFsc3RhY2s7XFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiBcXHRpZiAoaXB2Nikge1xcbi1cXHRcXHRyZXQgPSBnZW5ldmVfc29ja19hZGQoZ2VuZXZlLCB0cnVlKTtcXG4rXFx0XFx0cmV0ID0gZ2VuZXZlX3NvY2tfYWRkKGdlbmV2ZSwgY2ZnLCB0cnVlKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FQUZOT1NVUFBPUlQpXFxuIFxcdFxcdFxcdGlwdjQgPSBmYWxzZTtcXG4gXFx0fVxcbiAjZW5kaWZcXG4gXFx0aWYgKGlwdjQpXFxuLVxcdFxcdHJldCA9IGdlbmV2ZV9zb2NrX2FkZChnZW5ldmUsIGZhbHNlKTtcXG4rXFx0XFx0cmV0ID0gZ2VuZXZlX3NvY2tfYWRkKGdlbmV2ZSwgY2ZnLCBmYWxzZSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnZW5ldmVfc29ja19yZWxlYXNlKGdlbmV2ZSk7XFxuIFxcbkBAIC0xMTg5LDYgKzExOTYsNyBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfYnVpbGRfaGVhZGVyKHN0cnVjdCBnZW5ldmVoZHIgKmdlbmV2ZWgsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChjb25zdCBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHRzdHJ1Y3QgZ2VuZXZlX3NrYl9jYiAqY2IgPSBHRU5FVkVfU0tCX0NCKHNrYik7XFxuQEAgLTEyMDEsNyArMTIwOSw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChjb25zdCBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxcbiBcXHRjYi1cXHUwMDNlZ3JvX2hpbnRfbGVuID0gMDtcXG4gXFxuIFxcdC8qIFRyeSB0byBhZGQgdGhlIEdSTyBoaW50IG9ubHkgaW4gY2FzZSBvZiBkb3VibGUgZW5jYXAuICovXFxuLVxcdGlmICghZ2VuZXZlLVxcdTAwM2VjZmcuZ3JvX2hpbnQgfHwgIXNrYi1cXHUwMDNlZW5jYXBzdWxhdGlvbilcXG4rXFx0aWYgKCFjZmctXFx1MDAzZWdyb19oaW50IHx8ICFza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24pXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0LypcXG5AQCAtMTI2MiwxMCArMTI3MCwxMSBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfcHV0X2dyb19oaW50X29wdChzdHJ1Y3QgZ2VuZXZlaGRyICpnbnZoLCBpbnQgb3B0X3NpemUsXFxuIFxcbiBzdGF0aWMgaW50IGdlbmV2ZV9idWlsZF9za2Ioc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxcbi1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgaW50IGlwX2hkcl9sZW4pXFxuK1xcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZywgaW50IGlwX2hkcl9sZW4pXFxuIHtcXG4gXFx0Ym9vbCB1ZHBfc3VtID0gdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULCBpbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzKTtcXG4tXFx0Ym9vbCBpbm5lcl9wcm90b19pbmhlcml0ID0gZ2VuZXZlLVxcdTAwM2VjZmcuaW5uZXJfcHJvdG9faW5oZXJpdDtcXG4rXFx0Ym9vbCBpbm5lcl9wcm90b19pbmhlcml0ID0gY2ZnLVxcdTAwM2Vpbm5lcl9wcm90b19pbmhlcml0O1xcbiBcXHRib29sIHhuZXQgPSAhbmV0X2VxKGdlbmV2ZS1cXHUwMDNlbmV0LCBkZXZfbmV0KGdlbmV2ZS1cXHUwMDNlZGV2KSk7XFxuIFxcdHN0cnVjdCBnZW5ldmVfc2tiX2NiICpjYiA9IEdFTkVWRV9TS0JfQ0Ioc2tiKTtcXG4gXFx0c3RydWN0IGdlbmV2ZWhkciAqZ252aDtcXG5AQCAtMTMwNiwxNCArMTMxNSwxNCBAQCBzdGF0aWMgaW50IGdlbmV2ZV9idWlsZF9za2Ioc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiB9XFxuIFxcbiBzdGF0aWMgdTggZ2VuZXZlX2dldF9kc2ZpZWxkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyxcXG4gXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXFxuIFxcdFxcdFxcdCAgICAgYm9vbCAqdXNlX2NhY2hlKVxcbiB7XFxuLVxcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXHR1OCBkc2ZpZWxkO1xcbiBcXG4gXFx0ZHNmaWVsZCA9IGluZm8tXFx1MDAzZWtleS50b3M7XFxuLVxcdGlmIChkc2ZpZWxkID09IDEgXFx1MDAyNlxcdTAwMjYgIWdlbmV2ZS1cXHUwMDNlY2ZnLmNvbGxlY3RfbWQpIHtcXG4rXFx0aWYgKGNmZyBcXHUwMDI2XFx1MDAyNiBkc2ZpZWxkID09IDEgXFx1MDAyNlxcdTAwMjYgIWNmZy1cXHUwMDNlY29sbGVjdF9tZCkge1xcbiBcXHRcXHRkc2ZpZWxkID0gaXBfdHVubmVsX2dldF9kc2ZpZWxkKGlwX2hkcihza2IpLCBza2IpO1xcbiBcXHRcXHQqdXNlX2NhY2hlID0gZmFsc2U7XFxuIFxcdH1cXG5AQCAtMTMyMyw2ICsxMzMyLDcgQEAgc3RhdGljIHU4IGdlbmV2ZV9nZXRfZHNmaWVsZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXG4gc3RhdGljIGludCBnZW5ldmVfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0ICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSxcXG4rXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyxcXG4gXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHN0cnVjdCBnZW5ldmVfc29jayAqZ3M0ID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS1cXHUwMDNlc29jazQpO1xcbkBAIC0xMzM1LDM1ICsxMzQ1LDM1IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdF9fYmUxNiBzcG9ydDtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGlmIChza2Jfdmxhbl9pbmV0X3ByZXBhcmUoc2tiLCBnZW5ldmUtXFx1MDAzZWNmZy5pbm5lcl9wcm90b19pbmhlcml0KSlcXG4rXFx0aWYgKHNrYl92bGFuX2luZXRfcHJlcGFyZShza2IsIGNmZy1cXHUwMDNlaW5uZXJfcHJvdG9faW5oZXJpdCkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKCFnczQpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4gXFx0dXNlX2NhY2hlID0gaXBfdHVubmVsX2RzdF9jYWNoZV91c2FibGUoc2tiLCBpbmZvKTtcXG4tXFx0dG9zID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBpbmZvLCBcXHUwMDI2dXNlX2NhY2hlKTtcXG4rXFx0dG9zID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBjZmcsIGluZm8sIFxcdTAwMjZ1c2VfY2FjaGUpO1xcbiBcXHRzcG9ydCA9IHVkcF9mbG93X3NyY19wb3J0KGdlbmV2ZS1cXHUwMDNlbmV0LCBza2IsXFxuLVxcdFxcdFxcdFxcdCAgZ2VuZXZlLVxcdTAwM2VjZmcucG9ydF9taW4sXFxuLVxcdFxcdFxcdFxcdCAgZ2VuZXZlLVxcdTAwM2VjZmcucG9ydF9tYXgsIHRydWUpO1xcbitcXHRcXHRcXHRcXHQgIGNmZy1cXHUwMDNlcG9ydF9taW4sXFxuK1xcdFxcdFxcdFxcdCAgY2ZnLVxcdTAwM2Vwb3J0X21heCwgdHJ1ZSk7XFxuIFxcbiBcXHRydCA9IHVkcF90dW5uZWxfZHN0X2xvb2t1cChza2IsIGRldiwgZ2VuZXZlLVxcdTAwM2VuZXQsIDAsIFxcdTAwMjZzYWRkcixcXG4gXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmluZm8tXFx1MDAzZWtleSxcXG4tXFx0XFx0XFx0XFx0ICAgc3BvcnQsIGdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8ua2V5LnRwX2RzdCwgdG9zLFxcbitcXHRcXHRcXHRcXHQgICBzcG9ydCwgY2ZnLVxcdTAwM2VpbmZvLmtleS50cF9kc3QsIHRvcyxcXG4gXFx0XFx0XFx0XFx0ICAgdXNlX2NhY2hlID9cXG4gXFx0XFx0XFx0XFx0ICAgKHN0cnVjdCBkc3RfY2FjaGUgKilcXHUwMDI2aW5mby1cXHUwMDNlZHN0X2NhY2hlIDogTlVMTCk7XFxuIFxcdGlmIChJU19FUlIocnQpKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihydCk7XFxuIFxcbi1cXHRpZiAoZ2VuZXZlLVxcdTAwM2VjZmcuaW5mby5rZXkudS5pcHY0LnNyYyBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgc2FkZHIgIT0gZ2VuZXZlLVxcdTAwM2VjZmcuaW5mby5rZXkudS5pcHY0LnNyYykge1xcbitcXHRpZiAoY2ZnLVxcdTAwM2VpbmZvLmtleS51LmlwdjQuc3JjIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBzYWRkciAhPSBjZmctXFx1MDAzZWluZm8ua2V5LnUuaXB2NC5zcmMpIHtcXG4gXFx0XFx0ZHN0X3JlbGVhc2UoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcbiBcXHRcXHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XFxuIFxcdH1cXG4gXFxuIFxcdGVyciA9IHNrYl90dW5uZWxfY2hlY2tfcG10dShza2IsIFxcdTAwMjZydC1cXHUwMDNlZHN0LFxcbiBcXHRcXHRcXHRcXHQgICAgR0VORVZFX0lQVjRfSExFTiArIGluZm8tXFx1MDAzZW9wdGlvbnNfbGVuICtcXG4tXFx0XFx0XFx0XFx0ICAgIGdlbmV2ZV9idWlsZF9ncm9faGludF9vcHQoZ2VuZXZlLCBza2IpLFxcbitcXHRcXHRcXHRcXHQgICAgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChnZW5ldmUsIGNmZywgc2tiKSxcXG4gXFx0XFx0XFx0XFx0ICAgIG5ldGlmX2lzX2FueV9icmlkZ2VfcG9ydChkZXYpKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0ZHN0X3JlbGVhc2UoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcbkBAIC0xMzk3LDIxICsxNDA3LDIxIEBAIHN0YXRpYyBpbnQgZ2VuZXZlX3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdH1cXG4gXFxuIFxcdHRvcyA9IGlwX3R1bm5lbF9lY25fZW5jYXAodG9zLCBpcF9oZHIoc2tiKSwgc2tiKTtcXG4tXFx0aWYgKGdlbmV2ZS1cXHUwMDNlY2ZnLmNvbGxlY3RfbWQpIHtcXG4rXFx0aWYgKGNmZy1cXHUwMDNlY29sbGVjdF9tZCkge1xcbiBcXHRcXHR0dGwgPSBrZXktXFx1MDAzZXR0bDtcXG4gXFxuIFxcdFxcdGRmID0gdGVzdF9iaXQoSVBfVFVOTkVMX0RPTlRfRlJBR01FTlRfQklULCBrZXktXFx1MDAzZXR1bl9mbGFncykgP1xcbiBcXHRcXHQgICAgIGh0b25zKElQX0RGKSA6IDA7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGlmIChnZW5ldmUtXFx1MDAzZWNmZy50dGxfaW5oZXJpdClcXG4rXFx0XFx0aWYgKGNmZy1cXHUwMDNldHRsX2luaGVyaXQpXFxuIFxcdFxcdFxcdHR0bCA9IGlwX3R1bm5lbF9nZXRfdHRsKGlwX2hkcihza2IpLCBza2IpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHR0bCA9IGtleS1cXHUwMDNldHRsO1xcbiBcXHRcXHR0dGwgPSB0dGwgPyA6IGlwNF9kc3RfaG9wbGltaXQoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcbiBcXG4tXFx0XFx0aWYgKGdlbmV2ZS1cXHUwMDNlY2ZnLmRmID09IEdFTkVWRV9ERl9TRVQpIHtcXG4rXFx0XFx0aWYgKGNmZy1cXHUwMDNlZGYgPT0gR0VORVZFX0RGX1NFVCkge1xcbiBcXHRcXHRcXHRkZiA9IGh0b25zKElQX0RGKTtcXG4tXFx0XFx0fSBlbHNlIGlmIChnZW5ldmUtXFx1MDAzZWNmZy5kZiA9PSBHRU5FVkVfREZfSU5IRVJJVCkge1xcbitcXHRcXHR9IGVsc2UgaWYgKGNmZy1cXHUwMDNlZGYgPT0gR0VORVZFX0RGX0lOSEVSSVQpIHtcXG4gXFx0XFx0XFx0c3RydWN0IGV0aGhkciAqZXRoID0gc2tiX2V0aF9oZHIoc2tiKTtcXG4gXFxuIFxcdFxcdFxcdGlmIChudG9ocyhldGgtXFx1MDAzZWhfcHJvdG8pID09IEVUSF9QX0lQVjYpIHtcXG5AQCAtMTQyNSwxMyArMTQzNSwxMyBAQCBzdGF0aWMgaW50IGdlbmV2ZV94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGVyciA9IGdlbmV2ZV9idWlsZF9za2IoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QsIHNrYiwgaW5mbywgZ2VuZXZlLFxcbitcXHRlcnIgPSBnZW5ldmVfYnVpbGRfc2tiKFxcdTAwMjZydC1cXHUwMDNlZHN0LCBza2IsIGluZm8sIGdlbmV2ZSwgY2ZnLFxcbiBcXHRcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBpcGhkcikpO1xcbiBcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuIFxcdHVkcF90dW5uZWxfeG1pdF9za2IocnQsIGdzNC1cXHUwMDNlc2ssIHNrYiwgc2FkZHIsIGluZm8tXFx1MDAzZWtleS51LmlwdjQuZHN0LFxcbi1cXHRcXHRcXHQgICAgdG9zLCB0dGwsIGRmLCBzcG9ydCwgZ2VuZXZlLVxcdTAwM2VjZmcuaW5mby5rZXkudHBfZHN0LFxcbitcXHRcXHRcXHQgICAgdG9zLCB0dGwsIGRmLCBzcG9ydCwgY2ZnLVxcdTAwM2VpbmZvLmtleS50cF9kc3QsXFxuIFxcdFxcdFxcdCAgICAhbmV0X2VxKGdlbmV2ZS1cXHUwMDNlbmV0LCBkZXZfbmV0KGdlbmV2ZS1cXHUwMDNlZGV2KSksXFxuIFxcdFxcdFxcdCAgICAhdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULCBpbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzKSxcXG4gXFx0XFx0XFx0ICAgIDApO1xcbkBAIC0xNDQxLDYgKzE0NTEsNyBAQCBzdGF0aWMgaW50IGdlbmV2ZV94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gc3RhdGljIGludCBnZW5ldmU2X3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyxcXG4gXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcXG4ge1xcbiBcXHRzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzNiA9IHJjdV9kZXJlZmVyZW5jZShnZW5ldmUtXFx1MDAzZXNvY2s2KTtcXG5AQCAtMTQ1MiwzNSArMTQ2MywzNSBAQCBzdGF0aWMgaW50IGdlbmV2ZTZfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0X19iZTE2IHNwb3J0O1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKHNrYl92bGFuX2luZXRfcHJlcGFyZShza2IsIGdlbmV2ZS1cXHUwMDNlY2ZnLmlubmVyX3Byb3RvX2luaGVyaXQpKVxcbitcXHRpZiAoc2tiX3ZsYW5faW5ldF9wcmVwYXJlKHNrYiwgY2ZnLVxcdTAwM2Vpbm5lcl9wcm90b19pbmhlcml0KSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRpZiAoIWdzNilcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbiBcXHR1c2VfY2FjaGUgPSBpcF90dW5uZWxfZHN0X2NhY2hlX3VzYWJsZShza2IsIGluZm8pO1xcbi1cXHRwcmlvID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBpbmZvLCBcXHUwMDI2dXNlX2NhY2hlKTtcXG4rXFx0cHJpbyA9IGdlbmV2ZV9nZXRfZHNmaWVsZChza2IsIGRldiwgY2ZnLCBpbmZvLCBcXHUwMDI2dXNlX2NhY2hlKTtcXG4gXFx0c3BvcnQgPSB1ZHBfZmxvd19zcmNfcG9ydChnZW5ldmUtXFx1MDAzZW5ldCwgc2tiLFxcbi1cXHRcXHRcXHRcXHQgIGdlbmV2ZS1cXHUwMDNlY2ZnLnBvcnRfbWluLFxcbi1cXHRcXHRcXHRcXHQgIGdlbmV2ZS1cXHUwMDNlY2ZnLnBvcnRfbWF4LCB0cnVlKTtcXG4rXFx0XFx0XFx0XFx0ICBjZmctXFx1MDAzZXBvcnRfbWluLFxcbitcXHRcXHRcXHRcXHQgIGNmZy1cXHUwMDNlcG9ydF9tYXgsIHRydWUpO1xcbiBcXG4gXFx0ZHN0ID0gdWRwX3R1bm5lbDZfZHN0X2xvb2t1cChza2IsIGRldiwgZ2VuZXZlLVxcdTAwM2VuZXQsIGdzNi1cXHUwMDNlc2ssIDAsXFxuIFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnNhZGRyLCBrZXksIHNwb3J0LFxcbi1cXHRcXHRcXHRcXHQgICAgIGdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8ua2V5LnRwX2RzdCwgcHJpbyxcXG4rXFx0XFx0XFx0XFx0ICAgICBjZmctXFx1MDAzZWluZm8ua2V5LnRwX2RzdCwgcHJpbyxcXG4gXFx0XFx0XFx0XFx0ICAgICB1c2VfY2FjaGUgP1xcbiBcXHRcXHRcXHRcXHQgICAgIChzdHJ1Y3QgZHN0X2NhY2hlICopXFx1MDAyNmluZm8tXFx1MDAzZWRzdF9jYWNoZSA6IE5VTEwpO1xcbiBcXHRpZiAoSVNfRVJSKGRzdCkpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKGRzdCk7XFxuIFxcbi1cXHRpZiAoIWlwdjZfYWRkcl9hbnkoXFx1MDAyNmdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8ua2V5LnUuaXB2Ni5zcmMpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhaXB2Nl9hZGRyX2VxdWFsKFxcdTAwMjZzYWRkciwgXFx1MDAyNmdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8ua2V5LnUuaXB2Ni5zcmMpKSB7XFxuK1xcdGlmICghaXB2Nl9hZGRyX2FueShcXHUwMDI2Y2ZnLVxcdTAwM2VpbmZvLmtleS51LmlwdjYuc3JjKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIWlwdjZfYWRkcl9lcXVhbChcXHUwMDI2c2FkZHIsIFxcdTAwMjZjZmctXFx1MDAzZWluZm8ua2V5LnUuaXB2Ni5zcmMpKSB7XFxuIFxcdFxcdGRzdF9yZWxlYXNlKGRzdCk7XFxuIFxcdFxcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcXG4gXFx0fVxcbiBcXG4gXFx0ZXJyID0gc2tiX3R1bm5lbF9jaGVja19wbXR1KHNrYiwgZHN0LFxcbiBcXHRcXHRcXHRcXHQgICAgR0VORVZFX0lQVjZfSExFTiArIGluZm8tXFx1MDAzZW9wdGlvbnNfbGVuICtcXG4tXFx0XFx0XFx0XFx0ICAgIGdlbmV2ZV9idWlsZF9ncm9faGludF9vcHQoZ2VuZXZlLCBza2IpLFxcbitcXHRcXHRcXHRcXHQgICAgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChnZW5ldmUsIGNmZywgc2tiKSxcXG4gXFx0XFx0XFx0XFx0ICAgIG5ldGlmX2lzX2FueV9icmlkZ2VfcG9ydChkZXYpKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0ZHN0X3JlbGVhc2UoZHN0KTtcXG5AQCAtMTUxMywyMiArMTUyNCwyMiBAQCBzdGF0aWMgaW50IGdlbmV2ZTZfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0fVxcbiBcXG4gXFx0cHJpbyA9IGlwX3R1bm5lbF9lY25fZW5jYXAocHJpbywgaXBfaGRyKHNrYiksIHNrYik7XFxuLVxcdGlmIChnZW5ldmUtXFx1MDAzZWNmZy5jb2xsZWN0X21kKSB7XFxuK1xcdGlmIChjZmctXFx1MDAzZWNvbGxlY3RfbWQpIHtcXG4gXFx0XFx0dHRsID0ga2V5LVxcdTAwM2V0dGw7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGlmIChnZW5ldmUtXFx1MDAzZWNmZy50dGxfaW5oZXJpdClcXG4rXFx0XFx0aWYgKGNmZy1cXHUwMDNldHRsX2luaGVyaXQpXFxuIFxcdFxcdFxcdHR0bCA9IGlwX3R1bm5lbF9nZXRfdHRsKGlwX2hkcihza2IpLCBza2IpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHR0bCA9IGtleS1cXHUwMDNldHRsO1xcbiBcXHRcXHR0dGwgPSB0dGwgPyA6IGlwNl9kc3RfaG9wbGltaXQoZHN0KTtcXG4gXFx0fVxcbi1cXHRlcnIgPSBnZW5ldmVfYnVpbGRfc2tiKGRzdCwgc2tiLCBpbmZvLCBnZW5ldmUsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO1xcbitcXHRlcnIgPSBnZW5ldmVfYnVpbGRfc2tiKGRzdCwgc2tiLCBpbmZvLCBnZW5ldmUsIGNmZywgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XFxuIFxcdGlmICh1bmxpa2VseShlcnIpKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4gXFx0dWRwX3R1bm5lbDZfeG1pdF9za2IoZHN0LCBnczYtXFx1MDAzZXNrLCBza2IsIGRldixcXG4gXFx0XFx0XFx0ICAgICBcXHUwMDI2c2FkZHIsIFxcdTAwMjZrZXktXFx1MDAzZXUuaXB2Ni5kc3QsIHByaW8sIHR0bCxcXG4tXFx0XFx0XFx0ICAgICBpbmZvLVxcdTAwM2VrZXkubGFiZWwsIHNwb3J0LCBnZW5ldmUtXFx1MDAzZWNmZy5pbmZvLmtleS50cF9kc3QsXFxuK1xcdFxcdFxcdCAgICAgaW5mby1cXHUwMDNla2V5LmxhYmVsLCBzcG9ydCwgY2ZnLVxcdTAwM2VpbmZvLmtleS50cF9kc3QsXFxuIFxcdFxcdFxcdCAgICAgIXRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MpLFxcbiBcXHRcXHRcXHQgICAgIDApO1xcbkBAIC0xNTM5LDI4ICsxNTUwLDMxIEBAIHN0YXRpYyBpbnQgZ2VuZXZlNl94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBzdGF0aWMgbmV0ZGV2X3R4X3QgZ2VuZXZlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4tXFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gTlVMTDtcXG4rXFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gTlVMTDtcXG4rXFx0Y29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZztcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGlmIChnZW5ldmUtXFx1MDAzZWNmZy5jb2xsZWN0X21kKSB7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0Y2ZnID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS1cXHUwMDNlY2ZnKTtcXG4rXFx0aWYgKGNmZy1cXHUwMDNlY29sbGVjdF9tZCkge1xcbiBcXHRcXHRpbmZvID0gc2tiX3R1bm5lbF9pbmZvKHNrYik7XFxuIFxcdFxcdGlmICh1bmxpa2VseSghaW5mbyB8fCAhKGluZm8tXFx1MDAzZW1vZGUgXFx1MDAyNiBJUF9UVU5ORUxfSU5GT19UWCkpKSB7XFxuIFxcdFxcdFxcdG5ldGRldl9kYmcoZGV2LCBcXFwibm8gdHVubmVsIG1ldGFkYXRhXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0ZGV2X2tmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRcXHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoZGV2KTtcXG4rXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0aW5mbyA9IFxcdTAwMjZnZW5ldmUtXFx1MDAzZWNmZy5pbmZvO1xcbitcXHRcXHRpbmZvID0gXFx1MDAyNmNmZy1cXHUwMDNlaW5mbztcXG4gXFx0fVxcbiBcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gXFx0aWYgKGluZm8tXFx1MDAzZW1vZGUgXFx1MDAyNiBJUF9UVU5ORUxfSU5GT19JUFY2KVxcbi1cXHRcXHRlcnIgPSBnZW5ldmU2X3htaXRfc2tiKHNrYiwgZGV2LCBnZW5ldmUsIGluZm8pO1xcbitcXHRcXHRlcnIgPSBnZW5ldmU2X3htaXRfc2tiKHNrYiwgZGV2LCBnZW5ldmUsIGNmZywgaW5mbyk7XFxuIFxcdGVsc2VcXG4gI2VuZGlmXFxuLVxcdFxcdGVyciA9IGdlbmV2ZV94bWl0X3NrYihza2IsIGRldiwgZ2VuZXZlLCBpbmZvKTtcXG4rXFx0XFx0ZXJyID0gZ2VuZXZlX3htaXRfc2tiKHNrYiwgZGV2LCBnZW5ldmUsIGNmZywgaW5mbyk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0aWYgKGxpa2VseSghZXJyKSlcXG5AQCAtMTU5Myw4ICsxNjA3LDEzIEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gc2tiX3R1bm5lbF9pbmZvKHNrYik7XFxuIFxcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnO1xcbiBcXHRfX2JlMTYgc3BvcnQ7XFxuIFxcbitcXHRjZmcgPSByY3VfZGVyZWZlcmVuY2UoZ2VuZXZlLVxcdTAwM2VjZmcpO1xcbitcXHRpZiAodW5saWtlbHkoIWNmZykpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4gXFx0aWYgKGlwX3R1bm5lbF9pbmZvX2FmKGluZm8pID09IEFGX0lORVQpIHtcXG4gXFx0XFx0c3RydWN0IHJ0YWJsZSAqcnQ7XFxuIFxcdFxcdHN0cnVjdCBnZW5ldmVfc29jayAqZ3M0ID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS1cXHUwMDNlc29jazQpO1xcbkBAIC0xNjA2LDE0ICsxNjI1LDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4gXFx0XFx0dXNlX2NhY2hlID0gaXBfdHVubmVsX2RzdF9jYWNoZV91c2FibGUoc2tiLCBpbmZvKTtcXG4tXFx0XFx0dG9zID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBpbmZvLCBcXHUwMDI2dXNlX2NhY2hlKTtcXG4rXFx0XFx0dG9zID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBjZmcsIGluZm8sIFxcdTAwMjZ1c2VfY2FjaGUpO1xcbiBcXHRcXHRzcG9ydCA9IHVkcF9mbG93X3NyY19wb3J0KGdlbmV2ZS1cXHUwMDNlbmV0LCBza2IsXFxuLVxcdFxcdFxcdFxcdFxcdCAgZ2VuZXZlLVxcdTAwM2VjZmcucG9ydF9taW4sXFxuLVxcdFxcdFxcdFxcdFxcdCAgZ2VuZXZlLVxcdTAwM2VjZmcucG9ydF9tYXgsIHRydWUpO1xcbitcXHRcXHRcXHRcXHRcXHQgIGNmZy1cXHUwMDNlcG9ydF9taW4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgY2ZnLVxcdTAwM2Vwb3J0X21heCwgdHJ1ZSk7XFxuIFxcbiBcXHRcXHRydCA9IHVkcF90dW5uZWxfZHN0X2xvb2t1cChza2IsIGRldiwgZ2VuZXZlLVxcdTAwM2VuZXQsIDAsIFxcdTAwMjZzYWRkcixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmluZm8tXFx1MDAzZWtleSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgc3BvcnQsIGdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8ua2V5LnRwX2RzdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3BvcnQsIGNmZy1cXHUwMDNlaW5mby5rZXkudHBfZHN0LFxcbiBcXHRcXHRcXHRcXHRcXHQgICB0b3MsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHVzZV9jYWNoZSA/IFxcdTAwMjZpbmZvLVxcdTAwM2Vkc3RfY2FjaGUgOiBOVUxMKTtcXG4gXFx0XFx0aWYgKElTX0VSUihydCkpXFxuQEAgLTE2MzMsMTQgKzE2NTIsMTQgQEAgc3RhdGljIGludCBnZW5ldmVfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbiBcXHRcXHR1c2VfY2FjaGUgPSBpcF90dW5uZWxfZHN0X2NhY2hlX3VzYWJsZShza2IsIGluZm8pO1xcbi1cXHRcXHRwcmlvID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBpbmZvLCBcXHUwMDI2dXNlX2NhY2hlKTtcXG4rXFx0XFx0cHJpbyA9IGdlbmV2ZV9nZXRfZHNmaWVsZChza2IsIGRldiwgY2ZnLCBpbmZvLCBcXHUwMDI2dXNlX2NhY2hlKTtcXG4gXFx0XFx0c3BvcnQgPSB1ZHBfZmxvd19zcmNfcG9ydChnZW5ldmUtXFx1MDAzZW5ldCwgc2tiLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGdlbmV2ZS1cXHUwMDNlY2ZnLnBvcnRfbWluLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGdlbmV2ZS1cXHUwMDNlY2ZnLnBvcnRfbWF4LCB0cnVlKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICBjZmctXFx1MDAzZXBvcnRfbWluLFxcbitcXHRcXHRcXHRcXHRcXHQgIGNmZy1cXHUwMDNlcG9ydF9tYXgsIHRydWUpO1xcbiBcXG4gXFx0XFx0ZHN0ID0gdWRwX3R1bm5lbDZfZHN0X2xvb2t1cChza2IsIGRldiwgZ2VuZXZlLVxcdTAwM2VuZXQsIGdzNi1cXHUwMDNlc2ssIDAsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnNhZGRyLCBcXHUwMDI2aW5mby1cXHUwMDNla2V5LCBzcG9ydCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBnZW5ldmUtXFx1MDAzZWNmZy5pbmZvLmtleS50cF9kc3QsIHByaW8sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgY2ZnLVxcdTAwM2VpbmZvLmtleS50cF9kc3QsIHByaW8sXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgdXNlX2NhY2hlID8gXFx1MDAyNmluZm8tXFx1MDAzZWRzdF9jYWNoZSA6IE5VTEwpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKGRzdCkpXFxuIFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGRzdCk7XFxuQEAgLTE2NTMsNyArMTY3Miw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdH1cXG4gXFxuIFxcdGluZm8tXFx1MDAzZWtleS50cF9zcmMgPSBzcG9ydDtcXG4tXFx0aW5mby1cXHUwMDNla2V5LnRwX2RzdCA9IGdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8ua2V5LnRwX2RzdDtcXG4rXFx0aW5mby1cXHUwMDNla2V5LnRwX2RzdCA9IGNmZy1cXHUwMDNlaW5mby5rZXkudHBfZHN0O1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMTcwOSw3ICsxNzI4LDUwIEBAIHN0YXRpYyB2b2lkIGdlbmV2ZV9vZmZsb2FkX3J4X3BvcnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgcHVzaClcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IGdlbmV2ZV9jb25maWcgKmdlbmV2ZV9jb25maWdfYWxsb2MoY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKnNyYylcXG4re1xcbitcXHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0Y2ZnID0ga21lbWR1cChzcmMsIHNpemVvZigqc3JjKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghY2ZnKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdGNmZy1cXHUwMDNlaW5mby5kc3RfY2FjaGUuY2FjaGUgPSBOVUxMO1xcbitcXHRlcnIgPSBkc3RfY2FjaGVfaW5pdChcXHUwMDI2Y2ZnLVxcdTAwM2VpbmZvLmRzdF9jYWNoZSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0a2ZyZWUoY2ZnKTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGNmZztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZ2VuZXZlX2NvbmZpZ19mcmVlKHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcpXFxuK3tcXG4rXFx0aWYgKGNmZykge1xcbitcXHRcXHRkc3RfY2FjaGVfZGVzdHJveShcXHUwMDI2Y2ZnLVxcdTAwM2VpbmZvLmRzdF9jYWNoZSk7XFxuK1xcdFxcdGtmcmVlKGNmZyk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZ2VuZXZlX2NvbmZpZ19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuK3tcXG4rXFx0c3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZywgcmN1KTtcXG4rXFxuK1xcdGdlbmV2ZV9jb25maWdfZnJlZShjZmcpO1xcbit9XFxuK1xcbiAvKiBJbml0aWFsaXplIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqL1xcbitzdGF0aWMgdm9pZCBnZW5ldmVfZnJlZV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFx0c3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2VuZXZlLVxcdTAwM2VjZmcsIDEpO1xcbitcXG4rXFx0Z2VuZXZlX2NvbmZpZ19mcmVlKGNmZyk7XFxuK1xcdFJDVV9JTklUX1BPSU5URVIoZ2VuZXZlLVxcdTAwM2VjZmcsIE5VTEwpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBnZW5ldmVfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHRldGhlcl9zZXR1cChkZXYpO1xcbkBAIC0xNzE3LDYgKzE3NzksNyBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNmdlbmV2ZV9uZXRkZXZfb3BzO1xcbiBcXHRkZXYtXFx1MDAzZWV0aHRvb2xfb3BzID0gXFx1MDAyNmdlbmV2ZV9ldGh0b29sX29wcztcXG4gXFx0ZGV2LVxcdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XFxuK1xcdGRldi1cXHUwMDNlcHJpdl9kZXN0cnVjdG9yID0gZ2VuZXZlX2ZyZWVfZGV2O1xcbiBcXG4gXFx0U0VUX05FVERFVl9ERVZUWVBFKGRldiwgXFx1MDAyNmdlbmV2ZV90eXBlKTtcXG4gXFxuQEAgLTE4NzgsMTUgKzE5NDEsMTcgQEAgc3RhdGljIHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmVfZmluZF9kZXYoc3RydWN0IGdlbmV2ZV9uZXQgKmduLFxcbiBcXHQqdHVuX29uX3NhbWVfcG9ydCA9IGZhbHNlO1xcbiBcXHQqdHVuX2NvbGxlY3RfbWQgPSBmYWxzZTtcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShnZW5ldmUsIFxcdTAwMjZnbi1cXHUwMDNlZ2VuZXZlX2xpc3QsIG5leHQpIHtcXG4tXFx0XFx0aWYgKGluZm8tXFx1MDAzZWtleS50cF9kc3QgPT0gZ2VuZXZlLVxcdTAwM2VjZmcuaW5mby5rZXkudHBfZHN0IFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAoY2ZnLVxcdTAwM2VkdWFsc3RhY2sgfHwgZ2VuZXZlLVxcdTAwM2VjZmcuZHVhbHN0YWNrIHx8XFxuLVxcdFxcdCAgICAgZ2VuZXZlX3NhZGRyX2NvbmZsaWN0KGluZm8sIFxcdTAwMjZnZW5ldmUtXFx1MDAzZWNmZy5pbmZvKSkpIHtcXG4tXFx0XFx0XFx0KnR1bl9jb2xsZWN0X21kIHw9IGdlbmV2ZS1cXHUwMDNlY2ZnLmNvbGxlY3RfbWQ7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpnY2ZnID0gcnRubF9kZXJlZmVyZW5jZShnZW5ldmUtXFx1MDAzZWNmZyk7XFxuK1xcbitcXHRcXHRpZiAoaW5mby1cXHUwMDNla2V5LnRwX2RzdCA9PSBnY2ZnLVxcdTAwM2VpbmZvLmtleS50cF9kc3QgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIChjZmctXFx1MDAzZWR1YWxzdGFjayB8fCBnY2ZnLVxcdTAwM2VkdWFsc3RhY2sgfHxcXG4rXFx0XFx0ICAgICBnZW5ldmVfc2FkZHJfY29uZmxpY3QoaW5mbywgXFx1MDAyNmdjZmctXFx1MDAzZWluZm8pKSkge1xcbitcXHRcXHRcXHQqdHVuX2NvbGxlY3RfbWQgfD0gZ2NmZy1cXHUwMDNlY29sbGVjdF9tZDtcXG4gXFx0XFx0XFx0KnR1bl9vbl9zYW1lX3BvcnQgPSB0cnVlO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlmIChpbmZvLVxcdTAwM2VrZXkudHVuX2lkID09IGdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8ua2V5LnR1bl9pZCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgaW5mby1cXHUwMDNla2V5LnRwX2RzdCA9PSBnZW5ldmUtXFx1MDAzZWNmZy5pbmZvLmtleS50cF9kc3QgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICFtZW1jbXAoXFx1MDAyNmluZm8tXFx1MDAzZWtleS51LCBcXHUwMDI2Z2VuZXZlLVxcdTAwM2VjZmcuaW5mby5rZXkudSwgc2l6ZW9mKGluZm8tXFx1MDAzZWtleS51KSkpXFxuK1xcdFxcdGlmIChpbmZvLVxcdTAwM2VrZXkudHVuX2lkID09IGdjZmctXFx1MDAzZWluZm8ua2V5LnR1bl9pZCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgaW5mby1cXHUwMDNla2V5LnRwX2RzdCA9PSBnY2ZnLVxcdTAwM2VpbmZvLmtleS50cF9kc3QgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFtZW1jbXAoXFx1MDAyNmluZm8tXFx1MDAzZWtleS51LCBcXHUwMDI2Z2NmZy1cXHUwMDNlaW5mby5rZXkudSwgc2l6ZW9mKGluZm8tXFx1MDAzZWtleS51KSkpXFxuIFxcdFxcdFxcdHQgPSBnZW5ldmU7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIHQ7XFxuQEAgLTE5MjIsNiArMTk4Nyw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2NvbmZpZ3VyZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdHN0cnVjdCBnZW5ldmVfZGV2ICp0LCAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gXFx1MDAyNmNmZy1cXHUwMDNlaW5mbztcXG4gXFx0Ym9vbCB0dW5fY29sbGVjdF9tZCwgdHVuX29uX3NhbWVfcG9ydDtcXG4rXFx0c3RydWN0IGdlbmV2ZV9jb25maWcgKm5ld19jZmc7XFxuIFxcdGludCBlcnIsIGVuY2FwX2xlbjtcXG4gXFxuIFxcdGlmIChjZmctXFx1MDAzZWNvbGxlY3RfbWQgXFx1MDAyNlxcdTAwMjYgIWlzX3RubF9pbmZvX3plcm8oaW5mbykpIHtcXG5AQCAtMTk2MiwxMCArMjAyOCwxMyBAQCBzdGF0aWMgaW50IGdlbmV2ZV9jb25maWd1cmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGRzdF9jYWNoZV9yZXNldChcXHUwMDI2Z2VuZXZlLVxcdTAwM2VjZmcuaW5mby5kc3RfY2FjaGUpO1xcbi1cXHRtZW1jcHkoXFx1MDAyNmdlbmV2ZS1cXHUwMDNlY2ZnLCBjZmcsIHNpemVvZigqY2ZnKSk7XFxuK1xcdG5ld19jZmcgPSBnZW5ldmVfY29uZmlnX2FsbG9jKGNmZyk7XFxuK1xcdGlmIChJU19FUlIobmV3X2NmZykpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKG5ld19jZmcpO1xcbitcXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGdlbmV2ZS1cXHUwMDNlY2ZnLCBuZXdfY2ZnKTtcXG4gXFxuLVxcdGlmIChnZW5ldmUtXFx1MDAzZWNmZy5pbm5lcl9wcm90b19pbmhlcml0KSB7XFxuK1xcdGlmIChjZmctXFx1MDAzZWlubmVyX3Byb3RvX2luaGVyaXQpIHtcXG4gXFx0XFx0ZGV2LVxcdTAwM2VoZWFkZXJfb3BzID0gTlVMTDtcXG4gXFx0XFx0ZGV2LVxcdTAwM2V0eXBlID0gQVJQSFJEX05PTkU7XFxuIFxcdFxcdGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gMDtcXG5AQCAtMjMyMyw4MSArMjM5Miw0NSBAQCBzdGF0aWMgaW50IGdlbmV2ZV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi0vKiBRdWllc2NlcyB0aGUgZ2VuZXZlIGRldmljZSBkYXRhIHBhdGggZm9yIGJvdGggVFggYW5kIFJYLlxcbi0gKlxcbi0gKiBPbiB0cmFuc21pdCBnZW5ldmUgY2hlY2tzIGZvciBub24tTlVMTCBnZW5ldmVfc29jayBiZWZvcmUgaXQgcHJvY2VlZHMuXFxuLSAqIFNvLCBpZiB3ZSBzZXQgdGhhdCBzb2NrZXQgdG8gTlVMTCB1bmRlciBSQ1UgYW5kIHdhaXQgZm9yIHN5bmNocm9uaXplX25ldCgpXFxuLSAqIHRvIGNvbXBsZXRlIGZvciB0aGUgZXhpc3Rpbmcgc2V0IG9mIGluLWZsaWdodCBwYWNrZXRzIHRvIGJlIHRyYW5zbWl0dGVkLFxcbi0gKiB0aGVuIHdlIHdvdWxkIGhhdmUgcXVpZXNjZWQgdGhlIHRyYW5zbWl0IGRhdGEgcGF0aC4gQWxsIHRoZSBmdXR1cmUgcGFja2V0c1xcbi0gKiB3aWxsIGdldCBkcm9wcGVkIHVudGlsIHdlIHVucXVpZXNjZSB0aGUgZGF0YSBwYXRoLlxcbi0gKlxcbi0gKiBPbiByZWNlaXZlIGdlbmV2ZSBkZXJlZmVyZW5jZSB0aGUgZ2VuZXZlX3NvY2sgc3Rhc2hlZCBpbiB0aGUgc29ja2V0LiBTbyxcXG4tICogaWYgd2Ugc2V0IHRoYXQgdG8gTlVMTCB1bmRlciBSQ1UgYW5kIHdhaXQgZm9yIHN5bmNocm9uaXplX25ldCgpIHRvXFxuLSAqIGNvbXBsZXRlLCB0aGVuIHdlIHdvdWxkIGhhdmUgcXVpZXNjZWQgdGhlIHJlY2VpdmUgZGF0YSBwYXRoLlxcbisvKiBVcGRhdGUgdGhlIGRldmljZSBjb25maWd1cmF0aW9uIHVuZGVyIFJUTkwuXFxuKyAqIFdlIHVzZSBSQ1Ugc3dhcCB0byB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gYXRvbWljYWxseSwgc28gdGhlIGRhdGEgcGF0aFxcbisgKiAoYm90aCBUWCBhbmQgUlgpIGNhbiBjb250aW51ZSBydW5uaW5nIHdpdGhvdXQgaW50ZXJydXB0aW9uIG9yIHBhY2tldCBsb3NzLlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgZ2VuZXZlX3F1aWVzY2Uoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgc3RydWN0IGdlbmV2ZV9zb2NrICoqZ3M0LFxcbi1cXHRcXHRcXHQgICBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKipnczYpXFxuLXtcXG4tXFx0KmdzNCA9IHJ0bmxfZGVyZWZlcmVuY2UoZ2VuZXZlLVxcdTAwM2Vzb2NrNCk7XFxuLVxcdHJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtXFx1MDAzZXNvY2s0LCBOVUxMKTtcXG4tXFx0aWYgKCpnczQpXFxuLVxcdFxcdHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKCgqZ3M0KS1cXHUwMDNlc2ssIE5VTEwpO1xcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4tXFx0KmdzNiA9IHJ0bmxfZGVyZWZlcmVuY2UoZ2VuZXZlLVxcdTAwM2Vzb2NrNik7XFxuLVxcdHJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtXFx1MDAzZXNvY2s2LCBOVUxMKTtcXG4tXFx0aWYgKCpnczYpXFxuLVxcdFxcdHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKCgqZ3M2KS1cXHUwMDNlc2ssIE5VTEwpO1xcbi0jZWxzZVxcbi1cXHQqZ3M2ID0gTlVMTDtcXG4tI2VuZGlmXFxuLVxcdHN5bmNocm9uaXplX25ldCgpO1xcbi19XFxuLVxcbi0vKiBSZXN1bWVzIHRoZSBnZW5ldmUgZGV2aWNlIGRhdGEgcGF0aCBmb3IgYm90aCBUWCBhbmQgUlguICovXFxuLXN0YXRpYyB2b2lkIGdlbmV2ZV91bnF1aWVzY2Uoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgc3RydWN0IGdlbmV2ZV9zb2NrICpnczQsXFxuLVxcdFxcdFxcdCAgICAgc3RydWN0IGdlbmV2ZV9zb2NrIF9fbWF5YmVfdW51c2VkICpnczYpXFxuLXtcXG4tXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGdlbmV2ZS1cXHUwMDNlc29jazQsIGdzNCk7XFxuLVxcdGlmIChnczQpXFxuLVxcdFxcdHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKGdzNC1cXHUwMDNlc2ssIGdzNCk7XFxuLSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbi1cXHRyY3VfYXNzaWduX3BvaW50ZXIoZ2VuZXZlLVxcdTAwM2Vzb2NrNiwgZ3M2KTtcXG4tXFx0aWYgKGdzNilcXG4tXFx0XFx0cmN1X2Fzc2lnbl9za191c2VyX2RhdGEoZ3M2LVxcdTAwM2VzaywgZ3M2KTtcXG4tI2VuZGlmXFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgZ2VuZXZlX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xcbi1cXHRzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzNCwgKmdzNjtcXG4tXFx0c3RydWN0IGdlbmV2ZV9jb25maWcgY2ZnO1xcbitcXHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqb2xkX2NmZyA9IHJ0bmxfZGVyZWZlcmVuY2UoZ2VuZXZlLVxcdTAwM2VjZmcpO1xcbitcXHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0LyogSWYgdGhlIGdlbmV2ZSBkZXZpY2UgaXMgY29uZmlndXJlZCBmb3IgbWV0YWRhdGEgKG9yIGV4dGVybmFsbHlcXG4gXFx0ICogY29udHJvbGxlZCwgZm9yIGV4YW1wbGUsIE9WUyksIHRoZW4gbm90aGluZyBjYW4gYmUgY2hhbmdlZC5cXG4gXFx0ICovXFxuLVxcdGlmIChnZW5ldmUtXFx1MDAzZWNmZy5jb2xsZWN0X21kKVxcbitcXHRpZiAob2xkX2NmZy1cXHUwMDNlY29sbGVjdF9tZClcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4gXFx0LyogU3RhcnQgd2l0aCB0aGUgZXhpc3RpbmcgaW5mby4gKi9cXG4tXFx0bWVtY3B5KFxcdTAwMjZjZmcsIFxcdTAwMjZnZW5ldmUtXFx1MDAzZWNmZywgc2l6ZW9mKGNmZykpO1xcbi1cXHRlcnIgPSBnZW5ldmVfbmwyaW5mbyh0YiwgZGF0YSwgZXh0YWNrLCBcXHUwMDI2Y2ZnLCB0cnVlKTtcXG4rXFx0Y2ZnID0gZ2VuZXZlX2NvbmZpZ19hbGxvYyhvbGRfY2ZnKTtcXG4rXFx0aWYgKElTX0VSUihjZmcpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihjZmcpO1xcbitcXG4rXFx0ZXJyID0gZ2VuZXZlX25sMmluZm8odGIsIGRhdGEsIGV4dGFjaywgY2ZnLCB0cnVlKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9jZmc7XFxuIFxcbi1cXHRpZiAoIWdlbmV2ZV9kc3RfYWRkcl9lcXVhbChcXHUwMDI2Z2VuZXZlLVxcdTAwM2VjZmcuaW5mbywgXFx1MDAyNmNmZy5pbmZvKSkge1xcbi1cXHRcXHRkc3RfY2FjaGVfcmVzZXQoXFx1MDAyNmNmZy5pbmZvLmRzdF9jYWNoZSk7XFxuLVxcdFxcdGdlbmV2ZV9saW5rX2NvbmZpZyhkZXYsIFxcdTAwMjZjZmcuaW5mbywgdGIpO1xcbi1cXHR9XFxuK1xcdGlmICghZ2VuZXZlX2RzdF9hZGRyX2VxdWFsKFxcdTAwMjZvbGRfY2ZnLVxcdTAwM2VpbmZvLCBcXHUwMDI2Y2ZnLVxcdTAwM2VpbmZvKSlcXG4rXFx0XFx0Z2VuZXZlX2xpbmtfY29uZmlnKGRldiwgXFx1MDAyNmNmZy1cXHUwMDNlaW5mbywgdGIpO1xcbiBcXG4tXFx0Z2VuZXZlX3F1aWVzY2UoZ2VuZXZlLCBcXHUwMDI2Z3M0LCBcXHUwMDI2Z3M2KTtcXG4tXFx0bWVtY3B5KFxcdTAwMjZnZW5ldmUtXFx1MDAzZWNmZywgXFx1MDAyNmNmZywgc2l6ZW9mKGNmZykpO1xcbi1cXHRnZW5ldmVfdW5xdWllc2NlKGdlbmV2ZSwgZ3M0LCBnczYpO1xcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIoZ2VuZXZlLVxcdTAwM2VjZmcsIGNmZyk7XFxuIFxcbitcXHRjYWxsX3JjdV9odXJyeShcXHUwMDI2b2xkX2NmZy1cXHUwMDNlcmN1LCBnZW5ldmVfY29uZmlnX2ZyZWVfcmN1KTtcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfZnJlZV9jZmc6XFxuK1xcdGdlbmV2ZV9jb25maWdfZnJlZShjZmcpO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBnZW5ldmVfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbkBAIC0yNDMxLDE2ICsyNDY0LDI3IEBAIHN0YXRpYyBzaXplX3QgZ2VuZXZlX2dldF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcbiBzdGF0aWMgaW50IGdlbmV2ZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbi1cXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4tXFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gXFx1MDAyNmdlbmV2ZS1cXHUwMDNlY2ZnLmluZm87XFxuLVxcdGJvb2wgdHRsX2luaGVyaXQgPSBnZW5ldmUtXFx1MDAzZWNmZy50dGxfaW5oZXJpdDtcXG4tXFx0Ym9vbCBtZXRhZGF0YSA9IGdlbmV2ZS1cXHUwMDNlY2ZnLmNvbGxlY3RfbWQ7XFxuLVxcdHN0cnVjdCBpZmxhX2dlbmV2ZV9wb3J0X3JhbmdlIHBvcnRzID0ge1xcbi1cXHRcXHQubG93XFx0PSBodG9ucyhnZW5ldmUtXFx1MDAzZWNmZy5wb3J0X21pbiksXFxuLVxcdFxcdC5oaWdoXFx0PSBodG9ucyhnZW5ldmUtXFx1MDAzZWNmZy5wb3J0X21heCksXFxuLVxcdH07XFxuK1xcdGNvbnN0IHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRzdHJ1Y3QgaWZsYV9nZW5ldmVfcG9ydF9yYW5nZSBwb3J0cztcXG4rXFx0Y29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZztcXG4rXFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvO1xcbitcXHRib29sIHR0bF9pbmhlcml0LCBtZXRhZGF0YTtcXG4gXFx0X191OCB0bXBfdm5pWzNdO1xcbiBcXHRfX3UzMiB2bmk7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRjZmcgPSByY3VfZGVyZWZlcmVuY2UoZ2VuZXZlLVxcdTAwM2VjZmcpO1xcbitcXHRpZiAoIWNmZykge1xcbitcXHRcXHRlcnIgPSAtRU5PREVWO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0aW5mbyA9IFxcdTAwMjZjZmctXFx1MDAzZWluZm87XFxuK1xcdHR0bF9pbmhlcml0ID0gY2ZnLVxcdTAwM2V0dGxfaW5oZXJpdDtcXG4rXFx0bWV0YWRhdGEgPSBjZmctXFx1MDAzZWNvbGxlY3RfbWQ7XFxuK1xcdHBvcnRzLmxvdyA9IGh0b25zKGNmZy1cXHUwMDNlcG9ydF9taW4pO1xcbitcXHRwb3J0cy5oaWdoID0gaHRvbnMoY2ZnLVxcdTAwM2Vwb3J0X21heCk7XFxuIFxcbiBcXHR0dW5uZWxfaWRfdG9fdm5pKGluZm8tXFx1MDAzZWtleS50dW5faWQsIHRtcF92bmkpO1xcbiBcXHR2bmkgPSAodG1wX3ZuaVswXSBcXHUwMDNjXFx1MDAzYyAxNikgfCAodG1wX3ZuaVsxXSBcXHUwMDNjXFx1MDAzYyA4KSB8IHRtcF92bmlbMl07XFxuQEAgLTI0NjgsMTcgKzI1MTIsMTcgQEAgc3RhdGljIGludCBnZW5ldmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICNlbmRpZlxcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIWdlbmV2ZS1cXHUwMDNlY2ZnLmR1YWxzdGFjaykge1xcbitcXHRpZiAoIWNmZy1cXHUwMDNlZHVhbHN0YWNrKSB7XFxuIFxcdFxcdGlmIChpcF90dW5uZWxfaW5mb19hZihpbmZvKSA9PSBBRl9JTkVUKSB7XFxuIFxcdFxcdFxcdGlmICgoaW5mby1cXHUwMDNla2V5LnUuaXB2NC5zcmMgfHxcXG4tXFx0XFx0XFx0ICAgICBnZW5ldmUtXFx1MDAzZWNmZy5jb2xsZWN0X21kKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgIG1ldGFkYXRhKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgbmxhX3B1dF9pbl9hZGRyKHNrYiwgSUZMQV9HRU5FVkVfTE9DQUwsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBpbmZvLVxcdTAwM2VrZXkudS5pcHY0LnNyYykpXFxuIFxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0aWYgKCghaXB2Nl9hZGRyX2FueShcXHUwMDI2aW5mby1cXHUwMDNla2V5LnUuaXB2Ni5zcmMpIHx8XFxuLVxcdFxcdFxcdCAgICAgZ2VuZXZlLVxcdTAwM2VjZmcuY29sbGVjdF9tZCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICBtZXRhZGF0YSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0ICAgIG5sYV9wdXRfaW42X2FkZHIoc2tiLCBJRkxBX0dFTkVWRV9MT0NBTDYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmluZm8tXFx1MDAzZWtleS51LmlwdjYuc3JjKSlcXG4gXFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuQEAgLTI0OTEsNyArMjUzNSw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHQgICAgbmxhX3B1dF9iZTMyKHNrYiwgSUZMQV9HRU5FVkVfTEFCRUwsIGluZm8tXFx1MDAzZWtleS5sYWJlbCkpXFxuIFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiBcXG4tXFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBJRkxBX0dFTkVWRV9ERiwgZ2VuZXZlLVxcdTAwM2VjZmcuZGYpKVxcbitcXHRpZiAobmxhX3B1dF91OChza2IsIElGTEFfR0VORVZFX0RGLCBjZmctXFx1MDAzZWRmKSlcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbiBcXHRpZiAobmxhX3B1dF9iZTE2KHNrYiwgSUZMQV9HRU5FVkVfUE9SVCwgaW5mby1cXHUwMDNla2V5LnRwX2RzdCkpXFxuQEAgLTI1MDIsMjggKzI1NDYsMzEgQEAgc3RhdGljIGludCBnZW5ldmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gXFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBJRkxBX0dFTkVWRV9VRFBfWkVST19DU1VNNl9SWCxcXG4tXFx0XFx0ICAgICAgICFnZW5ldmUtXFx1MDAzZWNmZy51c2VfdWRwNl9yeF9jaGVja3N1bXMpKVxcbitcXHRcXHQgICAgICAgIWNmZy1cXHUwMDNldXNlX3VkcDZfcnhfY2hlY2tzdW1zKSlcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuICNlbmRpZlxcbiBcXG4gXFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBJRkxBX0dFTkVWRV9UVExfSU5IRVJJVCwgdHRsX2luaGVyaXQpKVxcbiBcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gXFxuLVxcdGlmIChnZW5ldmUtXFx1MDAzZWNmZy5pbm5lcl9wcm90b19pbmhlcml0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdGlmIChjZmctXFx1MDAzZWlubmVyX3Byb3RvX2luaGVyaXQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIG5sYV9wdXRfZmxhZyhza2IsIElGTEFfR0VORVZFX0lOTkVSX1BST1RPX0lOSEVSSVQpKVxcbiBcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gXFxuIFxcdGlmIChubGFfcHV0KHNrYiwgSUZMQV9HRU5FVkVfUE9SVF9SQU5HRSwgc2l6ZW9mKHBvcnRzKSwgXFx1MDAyNnBvcnRzKSlcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbi1cXHRpZiAoZ2VuZXZlLVxcdTAwM2VjZmcuZ3JvX2hpbnQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0aWYgKGNmZy1cXHUwMDNlZ3JvX2hpbnQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIG5sYV9wdXRfZmxhZyhza2IsIElGTEFfR0VORVZFX0dST19ISU5UKSlcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rb3V0OlxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4gXFxuIG5sYV9wdXRfZmFpbHVyZTpcXG4tXFx0cmV0dXJuIC1FTVNHU0laRTtcXG4rXFx0ZXJyID0gLUVNU0dTSVpFO1xcbitcXHRnb3RvIG91dDtcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGdlbmV2ZV9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbkBAIC0yNjcxLDYgKzI3MTgsNyBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgZ2VuZXZlX2NsZWFudXBfbW9kdWxlKHZvaWQpXFxuIFxcdHJ0bmxfbGlua191bnJlZ2lzdGVyKFxcdTAwMjZnZW5ldmVfbGlua19vcHMpO1xcbiBcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2Z2VuZXZlX25vdGlmaWVyX2Jsb2NrKTtcXG4gXFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZnZW5ldmVfbmV0X29wcyk7XFxuK1xcdHJjdV9iYXJyaWVyKCk7XFxuIH1cXG4gbW9kdWxlX2V4aXQoZ2VuZXZlX2NsZWFudXBfbW9kdWxlKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjUzOjMyLjU2NTg3NjUwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1Njk5OTgzNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiR0VORVZFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2VuZXZlX2NoYW5nZWxpbmtcIixcbiAgICBcImdlbmV2ZV9jb25maWd1cmVcIixcbiAgICBcImdlbmV2ZV9maWxsX2luZm9cIixcbiAgICBcImdlbmV2ZV9jb25maWdfYWxsb2NcIixcbiAgICBcImdlbmV2ZV9mcmVlX2RldlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgR0VORVZFIGRyaXZlciB0byB1c2UgUkNVIGZvciBpdHMgY29uZmlndXJhdGlvbiAoYHN0cnVjdCBnZW5ldmVfY29uZmlnYCksIHJlcGxhY2luZyB0aGUgcHJldmlvdXMgc3luY2hyb25vdXMgYGdlbmV2ZV9xdWllc2NlYC9gZ2VuZXZlX3VucXVpZXNjZWAgbWVjaGFuaXNtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGhvdyBjb25maWd1cmF0aW9uIHVwZGF0ZXMgYXJlIGhhbmRsZWQgY29uY3VycmVudGx5IHdpdGggdGhlIGRhdGEgcGF0aC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgY29udHJvbCBwYXRoIGZ1bmN0aW9ucyB0aGF0IGFsbG9jYXRlLCB1cGRhdGUsIGFuZCBmcmVlIHRoZSBjb25maWd1cmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNhMWQwOTQxZGJjOTBkNjM5YTkyMmNhZDYwMjE1YjkzNzc1Yjk1NGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDIzOjUzOjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2VuZXZlLmMgYi9kcml2ZXJzL25ldC9nZW5ldmUuY1xuaW5kZXggMzk2ZTFhMTEzY2Q0OWUuLjE3YmQzNTQzZDU4N2E5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZ2VuZXZlLmNcbisrKyBiL2RyaXZlcnMvbmV0L2dlbmV2ZS5jXG5AQCAtODIsNiArODIsNyBAQCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyB7XG4gXHR1MTZcdFx0XHRwb3J0X21pbjtcbiBcdHUxNlx0XHRcdHBvcnRfbWF4O1xuIFxuK1x0c3RydWN0IHJjdV9oZWFkXHRcdHJjdTtcbiBcdC8qIE11c3QgYmUgbGFzdCAtLWVuZHMgaW4gYSBmbGV4aWJsZS1hcnJheSBtZW1iZXIuICovXG4gXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm9cdGluZm87XG4gfTtcbkBAIC0xMDAsNyArMTAxLDcgQEAgc3RydWN0IGdlbmV2ZV9kZXYge1xuICNlbmRpZlxuIFx0c3RydWN0IGxpc3RfaGVhZCAgIG5leHQ7XHQvKiBnZW5ldmUncyBwZXIgbmFtZXNwYWNlIGxpc3QgKi9cbiBcdHN0cnVjdCBncm9fY2VsbHMgICBncm9fY2VsbHM7XG4tXHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyBjZmc7XG4rXHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyBfX3JjdSAqY2ZnO1xuIH07XG4gXG4gc3RydWN0IGdlbmV2ZV9zb2NrIHtcbkBAIC0xODIsOCArMTgzLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlX2xvb2t1cChzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzLFxuIFx0aGFzaCA9IGdlbmV2ZV9uZXRfdm5pX2hhc2godm5pKTtcbiBcdHZuaV9saXN0X2hlYWQgPSBcdTAwMjZncy1cdTAwM2V2bmlfbGlzdFtoYXNoXTtcbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCB2bmlfbGlzdF9oZWFkLCBobGlzdCkge1xuLVx0XHRpZiAoZXFfdHVuX2lkX2FuZF92bmkoKHU4ICopXHUwMDI2bm9kZS1cdTAwM2VnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnR1bl9pZCwgdm5pKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGFkZHIgPT0gbm9kZS1cdTAwM2VnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnUuaXB2NC5kc3QpXG4rXHRcdGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcgPSByY3VfZGVyZWZlcmVuY2Uobm9kZS1cdTAwM2VnZW5ldmUtXHUwMDNlY2ZnKTtcbitcbitcdFx0aWYgKGVxX3R1bl9pZF9hbmRfdm5pKCh1OCAqKVx1MDAyNmNmZy1cdTAwM2VpbmZvLmtleS50dW5faWQsIHZuaSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBhZGRyID09IGNmZy1cdTAwM2VpbmZvLmtleS51LmlwdjQuZHN0KVxuIFx0XHRcdHJldHVybiBub2RlLVx1MDAzZWdlbmV2ZTtcbiBcdH1cbiBcdHJldHVybiBOVUxMO1xuQEAgLTIwMSw4ICsyMDQsMTAgQEAgc3RhdGljIHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmU2X2xvb2t1cChzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzLFxuIFx0aGFzaCA9IGdlbmV2ZV9uZXRfdm5pX2hhc2godm5pKTtcbiBcdHZuaV9saXN0X2hlYWQgPSBcdTAwMjZncy1cdTAwM2V2bmlfbGlzdFtoYXNoXTtcbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCB2bmlfbGlzdF9oZWFkLCBobGlzdCkge1xuLVx0XHRpZiAoZXFfdHVuX2lkX2FuZF92bmkoKHU4ICopXHUwMDI2bm9kZS1cdTAwM2VnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnR1bl9pZCwgdm5pKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGlwdjZfYWRkcl9lcXVhbChcdTAwMjZhZGRyNiwgXHUwMDI2bm9kZS1cdTAwM2VnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnUuaXB2Ni5kc3QpKVxuK1x0XHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnID0gcmN1X2RlcmVmZXJlbmNlKG5vZGUtXHUwMDNlZ2VuZXZlLVx1MDAzZWNmZyk7XG4rXG4rXHRcdGlmIChlcV90dW5faWRfYW5kX3ZuaSgodTggKilcdTAwMjZjZmctXHUwMDNlaW5mby5rZXkudHVuX2lkLCB2bmkpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgaXB2Nl9hZGRyX2VxdWFsKFx1MDAyNmFkZHI2LCBcdTAwMjZjZmctXHUwMDNlaW5mby5rZXkudS5pcHY2LmRzdCkpXG4gXHRcdFx0cmV0dXJuIG5vZGUtXHUwMDNlZ2VuZXZlO1xuIFx0fVxuIFx0cmV0dXJuIE5VTEw7XG5AQCAtMzg2LDExICszOTEsNiBAQCBzdGF0aWMgaW50IGdlbmV2ZV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0ZXJyID0gZHN0X2NhY2hlX2luaXQoXHUwMDI2Z2VuZXZlLVx1MDAzZWNmZy5pbmZvLmRzdF9jYWNoZSwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGdyb19jZWxsc19kZXN0cm95KFx1MDAyNmdlbmV2ZS1cdTAwM2Vncm9fY2VsbHMpO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuIFx0bmV0ZGV2X2xvY2tkZXBfc2V0X2NsYXNzZXMoZGV2KTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zOTksNyArMzk5LDYgQEAgc3RhdGljIHZvaWQgZ2VuZXZlX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuLVx0ZHN0X2NhY2hlX2Rlc3Ryb3koXHUwMDI2Z2VuZXZlLVx1MDAzZWNmZy5pbmZvLmRzdF9jYWNoZSk7XG4gXHRncm9fY2VsbHNfZGVzdHJveShcdTAwMjZnZW5ldmUtXHUwMDNlZ3JvX2NlbGxzKTtcbiB9XG4gXG5AQCAtNjUwLDYgKzY0OSw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX3Bvc3RfZGVjYXBfaGludChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gLyogQ2FsbGJhY2sgZnJvbSBuZXQvaXB2NC91ZHAuYyB0byByZWNlaXZlIHBhY2tldHMgKi9cbiBzdGF0aWMgaW50IGdlbmV2ZV91ZHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuK1x0Y29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZztcbiBcdHN0cnVjdCBnZW5ldmVoZHIgKmdlbmV2ZWg7XG4gXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlO1xuIFx0c3RydWN0IGdlbmV2ZV9zb2NrICpncztcbkBAIC02NzUsOCArNjc1LDkgQEAgc3RhdGljIGludCBnZW5ldmVfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0aW5uZXJfcHJvdG8gPSBnZW5ldmVoLVx1MDAzZXByb3RvX3R5cGU7XG4gXG4tXHRpZiAodW5saWtlbHkoKCFnZW5ldmUtXHUwMDNlY2ZnLmlubmVyX3Byb3RvX2luaGVyaXQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgIGlubmVyX3Byb3RvICE9IGh0b25zKEVUSF9QX1RFQikpKSkge1xuK1x0Y2ZnID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS1cdTAwM2VjZmcpO1xuK1x0aWYgKHVubGlrZWx5KCFjZmcgfHwgKCFjZmctXHUwMDNlaW5uZXJfcHJvdG9faW5oZXJpdCBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgICBpbm5lcl9wcm90byAhPSBodG9ucyhFVEhfUF9URUIpKSkpIHtcbiBcdFx0ZGV2X2RzdGF0c19yeF9kcm9wcGVkKGdlbmV2ZS1cdTAwM2VkZXYpO1xuIFx0XHRnb3RvIGRyb3A7XG4gXHR9XG5AQCAtNzYyLDkgKzc2MywxMCBAQCBzdGF0aWMgaW50IGdlbmV2ZV91ZHBfZW5jYXBfZXJyX2xvb2t1cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3Qgc29jayAqZ2VuZXZlX2NyZWF0ZV9zb2NrKHN0cnVjdCBuZXQgKm5ldCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBib29sIGlwdjYpXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSxcbitcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLCBib29sIGlwdjYpXG4ge1xuLVx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gXHUwMDI2Z2VuZXZlLVx1MDAzZWNmZy5pbmZvO1xuK1x0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gXHUwMDI2Y2ZnLVx1MDAzZWluZm87XG4gXHRzdHJ1Y3QgdWRwX3BvcnRfY2ZnIHVkcF9jb25mO1xuIFx0c3RydWN0IHNvY2tldCAqc29jaztcbiBcdGludCBlcnI7XG5AQCAtNzc1LDcgKzc3Nyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqZ2VuZXZlX2NyZWF0ZV9zb2NrKHN0cnVjdCBuZXQgKm5ldCxcbiBcdGlmIChpcHY2KSB7XG4gXHRcdHVkcF9jb25mLmZhbWlseSA9IEFGX0lORVQ2O1xuIFx0XHR1ZHBfY29uZi5pcHY2X3Y2b25seSA9IDE7XG4tXHRcdHVkcF9jb25mLnVzZV91ZHA2X3J4X2NoZWNrc3VtcyA9IGdlbmV2ZS1cdTAwM2VjZmcudXNlX3VkcDZfcnhfY2hlY2tzdW1zO1xuK1x0XHR1ZHBfY29uZi51c2VfdWRwNl9yeF9jaGVja3N1bXMgPSBjZmctXHUwMDNldXNlX3VkcDZfcnhfY2hlY2tzdW1zO1xuIFx0XHR1ZHBfY29uZi5sb2NhbF9pcDYgPSBpbmZvLVx1MDAzZWtleS51LmlwdjYuc3JjO1xuIFx0fSBlbHNlXG4gI2VuZGlmXG5AQCAtOTkxLDcgKzk5Myw4IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2dyb19jb21wbGV0ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gLyogQ3JlYXRlIG5ldyBsaXN0ZW4gc29ja2V0IGlmIG5lZWRlZCAqL1xuIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdlbmV2ZV9zb2NrZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbi1cdFx0XHRcdFx0XHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBib29sIGlwdjYpXG4rXHRcdFx0XHRcdFx0c3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSxcbitcdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLCBib29sIGlwdjYpXG4ge1xuIFx0c3RydWN0IGdlbmV2ZV9uZXQgKmduID0gbmV0X2dlbmVyaWMobmV0LCBnZW5ldmVfbmV0X2lkKTtcbiBcdHN0cnVjdCB1ZHBfdHVubmVsX3NvY2tfY2ZnIHR1bm5lbF9jZmc7XG5AQCAtMTAwMyw3ICsxMDA2LDcgQEAgc3RhdGljIHN0cnVjdCBnZW5ldmVfc29jayAqZ2VuZXZlX3NvY2tldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxuIFx0aWYgKCFncylcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXG4tXHRzayA9IGdlbmV2ZV9jcmVhdGVfc29jayhuZXQsIGdlbmV2ZSwgaXB2Nik7XG4rXHRzayA9IGdlbmV2ZV9jcmVhdGVfc29jayhuZXQsIGdlbmV2ZSwgY2ZnLCBpcHY2KTtcbiBcdGlmIChJU19FUlIoc2spKSB7XG4gXHRcdGtmcmVlKGdzKTtcbiBcdFx0cmV0dXJuIEVSUl9DQVNUKHNrKTtcbkBAIC0xMDYwLDEyICsxMDYzLDEzIEBAIHN0YXRpYyB2b2lkIGdlbmV2ZV9zb2NrX3JlbGVhc2Uoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSlcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBnZW5ldmVfc29jayAqZ2VuZXZlX2ZpbmRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBib29sIGlwdjYpXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuK1x0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZywgYm9vbCBpcHY2KVxuIHtcbiBcdHN0cnVjdCBnZW5ldmVfbmV0ICpnbiA9IG5ldF9nZW5lcmljKG5ldCwgZ2VuZXZlX25ldF9pZCk7XG4tXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLmluZm87XG4rXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBcdTAwMjZjZmctXHUwMDNlaW5mbztcbiBcdHNhX2ZhbWlseV90IGZhbWlseSA9IGlwdjYgPyBBRl9JTkVUNiA6IEFGX0lORVQ7XG4tXHRib29sIGdyb19oaW50ID0gZ2VuZXZlLVx1MDAzZWNmZy5ncm9faGludDtcbitcdGJvb2wgZ3JvX2hpbnQgPSBjZmctXHUwMDNlZ3JvX2hpbnQ7XG4gXHRfX2JlMTYgZHN0X3BvcnQgPSBpbmZvLVx1MDAzZWtleS50cF9kc3Q7XG4gXHRzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzO1xuIFxuQEAgLTEwOTUsNyArMTA5OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdlbmV2ZV9maW5kX3NvY2soc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZ2VuZXZlX3NvY2tfYWRkKHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsIGJvb2wgaXB2NilcbitzdGF0aWMgaW50IGdlbmV2ZV9zb2NrX2FkZChzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuK1x0XHRcdCAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsIGJvb2wgaXB2NilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBnZW5ldmUtXHUwMDNlbmV0O1xuIFx0c3RydWN0IGdlbmV2ZV9kZXZfbm9kZSAqbm9kZTtcbkBAIC0xMTAzLDE5ICsxMTA4LDE5IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX3NvY2tfYWRkKHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsIGJvb2wgaXB2NilcbiBcdF9fdTggdm5pWzNdO1xuIFx0X191MzIgaGFzaDtcbiBcbi1cdGdzID0gZ2VuZXZlX2ZpbmRfc29jayhuZXQsIGdlbmV2ZSwgaXB2Nik7XG4rXHRncyA9IGdlbmV2ZV9maW5kX3NvY2sobmV0LCBnZW5ldmUsIGNmZywgaXB2Nik7XG4gXHRpZiAoZ3MpIHtcbiBcdFx0Z3MtXHUwMDNlcmVmY250Kys7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0Z3MgPSBnZW5ldmVfc29ja2V0X2NyZWF0ZShuZXQsIGdlbmV2ZSwgaXB2Nik7XG4rXHRncyA9IGdlbmV2ZV9zb2NrZXRfY3JlYXRlKG5ldCwgZ2VuZXZlLCBjZmcsIGlwdjYpO1xuIFx0aWYgKElTX0VSUihncykpXG4gXHRcdHJldHVybiBQVFJfRVJSKGdzKTtcbiBcbiBvdXQ6XG4tXHRncy1cdTAwM2Vjb2xsZWN0X21kID0gZ2VuZXZlLVx1MDAzZWNmZy5jb2xsZWN0X21kO1xuLVx0Z3MtXHUwMDNlZ3JvX2hpbnQgPSBnZW5ldmUtXHUwMDNlY2ZnLmdyb19oaW50O1xuK1x0Z3MtXHUwMDNlY29sbGVjdF9tZCA9IGNmZy1cdTAwM2Vjb2xsZWN0X21kO1xuK1x0Z3MtXHUwMDNlZ3JvX2hpbnQgPSBjZmctXHUwMDNlZ3JvX2hpbnQ7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gXHRpZiAoaXB2Nikge1xuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoZ2VuZXZlLVx1MDAzZXNvY2s2LCBncyk7XG5AQCAtMTEyOCw3ICsxMTMzLDcgQEAgc3RhdGljIGludCBnZW5ldmVfc29ja19hZGQoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxuIFx0fVxuIFx0bm9kZS1cdTAwM2VnZW5ldmUgPSBnZW5ldmU7XG4gXG4tXHR0dW5uZWxfaWRfdG9fdm5pKGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudHVuX2lkLCB2bmkpO1xuK1x0dHVubmVsX2lkX3RvX3ZuaShjZmctXHUwMDNlaW5mby5rZXkudHVuX2lkLCB2bmkpO1xuIFx0aGFzaCA9IGdlbmV2ZV9uZXRfdm5pX2hhc2godm5pKTtcbiBcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZub2RlLVx1MDAzZWhsaXN0LCBcdTAwMjZncy1cdTAwM2V2bmlfbGlzdFtoYXNoXSk7XG4gXHRyZXR1cm4gMDtcbkBAIC0xMTM3LDIxICsxMTQyLDIzIEBAIHN0YXRpYyBpbnQgZ2VuZXZlX3NvY2tfYWRkKHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsIGJvb2wgaXB2NilcbiBzdGF0aWMgaW50IGdlbmV2ZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7XG4tXHRib29sIGR1YWxzdGFjayA9IGdlbmV2ZS1cdTAwM2VjZmcuZHVhbHN0YWNrO1xuLVx0Ym9vbCBpcHY0LCBpcHY2O1xuK1x0Y29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZztcbitcdGJvb2wgaXB2NCwgaXB2NiwgZHVhbHN0YWNrO1xuIFx0aW50IHJldCA9IDA7XG4gXG4tXHRpcHY2ID0gZ2VuZXZlLVx1MDAzZWNmZy5pbmZvLm1vZGUgXHUwMDI2IElQX1RVTk5FTF9JTkZPX0lQVjYgfHwgZHVhbHN0YWNrO1xuK1x0Y2ZnID0gcnRubF9kZXJlZmVyZW5jZShnZW5ldmUtXHUwMDNlY2ZnKTtcbitcdGR1YWxzdGFjayA9IGNmZy1cdTAwM2VkdWFsc3RhY2s7XG4rXHRpcHY2ID0gY2ZnLVx1MDAzZWluZm8ubW9kZSBcdTAwMjYgSVBfVFVOTkVMX0lORk9fSVBWNiB8fCBkdWFsc3RhY2s7XG4gXHRpcHY0ID0gIWlwdjYgfHwgZHVhbHN0YWNrO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIFx0aWYgKGlwdjYpIHtcbi1cdFx0cmV0ID0gZ2VuZXZlX3NvY2tfYWRkKGdlbmV2ZSwgdHJ1ZSk7XG4rXHRcdHJldCA9IGdlbmV2ZV9zb2NrX2FkZChnZW5ldmUsIGNmZywgdHJ1ZSk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUFGTk9TVVBQT1JUKVxuIFx0XHRcdGlwdjQgPSBmYWxzZTtcbiBcdH1cbiAjZW5kaWZcbiBcdGlmIChpcHY0KVxuLVx0XHRyZXQgPSBnZW5ldmVfc29ja19hZGQoZ2VuZXZlLCBmYWxzZSk7XG4rXHRcdHJldCA9IGdlbmV2ZV9zb2NrX2FkZChnZW5ldmUsIGNmZywgZmFsc2UpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z2VuZXZlX3NvY2tfcmVsZWFzZShnZW5ldmUpO1xuIFxuQEAgLTExODksNiArMTE5Niw3IEBAIHN0YXRpYyB2b2lkIGdlbmV2ZV9idWlsZF9oZWFkZXIoc3RydWN0IGdlbmV2ZWhkciAqZ2VuZXZlaCxcbiB9XG4gXG4gc3RhdGljIGludCBnZW5ldmVfYnVpbGRfZ3JvX2hpbnRfb3B0KGNvbnN0IHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsXG4rXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IGdlbmV2ZV9za2JfY2IgKmNiID0gR0VORVZFX1NLQl9DQihza2IpO1xuQEAgLTEyMDEsNyArMTIwOSw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChjb25zdCBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuIFx0Y2ItXHUwMDNlZ3JvX2hpbnRfbGVuID0gMDtcbiBcbiBcdC8qIFRyeSB0byBhZGQgdGhlIEdSTyBoaW50IG9ubHkgaW4gY2FzZSBvZiBkb3VibGUgZW5jYXAuICovXG4tXHRpZiAoIWdlbmV2ZS1cdTAwM2VjZmcuZ3JvX2hpbnQgfHwgIXNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKVxuK1x0aWYgKCFjZmctXHUwMDNlZ3JvX2hpbnQgfHwgIXNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdC8qXG5AQCAtMTI2MiwxMCArMTI3MCwxMSBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfcHV0X2dyb19oaW50X29wdChzdHJ1Y3QgZ2VuZXZlaGRyICpnbnZoLCBpbnQgb3B0X3NpemUsXG4gXG4gc3RhdGljIGludCBnZW5ldmVfYnVpbGRfc2tiKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxuLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBpbnQgaXBfaGRyX2xlbilcbitcdFx0XHQgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSxcbitcdFx0XHQgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZywgaW50IGlwX2hkcl9sZW4pXG4ge1xuIFx0Ym9vbCB1ZHBfc3VtID0gdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULCBpbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MpO1xuLVx0Ym9vbCBpbm5lcl9wcm90b19pbmhlcml0ID0gZ2VuZXZlLVx1MDAzZWNmZy5pbm5lcl9wcm90b19pbmhlcml0O1xuK1x0Ym9vbCBpbm5lcl9wcm90b19pbmhlcml0ID0gY2ZnLVx1MDAzZWlubmVyX3Byb3RvX2luaGVyaXQ7XG4gXHRib29sIHhuZXQgPSAhbmV0X2VxKGdlbmV2ZS1cdTAwM2VuZXQsIGRldl9uZXQoZ2VuZXZlLVx1MDAzZWRldikpO1xuIFx0c3RydWN0IGdlbmV2ZV9za2JfY2IgKmNiID0gR0VORVZFX1NLQl9DQihza2IpO1xuIFx0c3RydWN0IGdlbmV2ZWhkciAqZ252aDtcbkBAIC0xMzA2LDE0ICsxMzE1LDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2J1aWxkX3NrYihzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHN0cnVjdCBza19idWZmICpza2IsXG4gfVxuIFxuIHN0YXRpYyB1OCBnZW5ldmVfZ2V0X2RzZmllbGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsXG4gXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXG4gXHRcdFx0ICAgICBib29sICp1c2VfY2FjaGUpXG4ge1xuLVx0c3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7XG4gXHR1OCBkc2ZpZWxkO1xuIFxuIFx0ZHNmaWVsZCA9IGluZm8tXHUwMDNla2V5LnRvcztcbi1cdGlmIChkc2ZpZWxkID09IDEgXHUwMDI2XHUwMDI2ICFnZW5ldmUtXHUwMDNlY2ZnLmNvbGxlY3RfbWQpIHtcbitcdGlmIChjZmcgXHUwMDI2XHUwMDI2IGRzZmllbGQgPT0gMSBcdTAwMjZcdTAwMjYgIWNmZy1cdTAwM2Vjb2xsZWN0X21kKSB7XG4gXHRcdGRzZmllbGQgPSBpcF90dW5uZWxfZ2V0X2RzZmllbGQoaXBfaGRyKHNrYiksIHNrYik7XG4gXHRcdCp1c2VfY2FjaGUgPSBmYWxzZTtcbiBcdH1cbkBAIC0xMzIzLDYgKzEzMzIsNyBAQCBzdGF0aWMgdTggZ2VuZXZlX2dldF9kc2ZpZWxkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gc3RhdGljIGludCBnZW5ldmVfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHQgICBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuK1x0XHRcdCAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsXG4gXHRcdFx0ICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBnZW5ldmVfc29jayAqZ3M0ID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS1cdTAwM2Vzb2NrNCk7XG5AQCAtMTMzNSwzNSArMTM0NSwzNSBAQCBzdGF0aWMgaW50IGdlbmV2ZV94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0X19iZTE2IHNwb3J0O1xuIFx0aW50IGVycjtcbiBcbi1cdGlmIChza2Jfdmxhbl9pbmV0X3ByZXBhcmUoc2tiLCBnZW5ldmUtXHUwMDNlY2ZnLmlubmVyX3Byb3RvX2luaGVyaXQpKVxuK1x0aWYgKHNrYl92bGFuX2luZXRfcHJlcGFyZShza2IsIGNmZy1cdTAwM2Vpbm5lcl9wcm90b19pbmhlcml0KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIWdzNClcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHR1c2VfY2FjaGUgPSBpcF90dW5uZWxfZHN0X2NhY2hlX3VzYWJsZShza2IsIGluZm8pO1xuLVx0dG9zID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBpbmZvLCBcdTAwMjZ1c2VfY2FjaGUpO1xuK1x0dG9zID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBjZmcsIGluZm8sIFx1MDAyNnVzZV9jYWNoZSk7XG4gXHRzcG9ydCA9IHVkcF9mbG93X3NyY19wb3J0KGdlbmV2ZS1cdTAwM2VuZXQsIHNrYixcbi1cdFx0XHRcdCAgZ2VuZXZlLVx1MDAzZWNmZy5wb3J0X21pbixcbi1cdFx0XHRcdCAgZ2VuZXZlLVx1MDAzZWNmZy5wb3J0X21heCwgdHJ1ZSk7XG4rXHRcdFx0XHQgIGNmZy1cdTAwM2Vwb3J0X21pbixcbitcdFx0XHRcdCAgY2ZnLVx1MDAzZXBvcnRfbWF4LCB0cnVlKTtcbiBcbiBcdHJ0ID0gdWRwX3R1bm5lbF9kc3RfbG9va3VwKHNrYiwgZGV2LCBnZW5ldmUtXHUwMDNlbmV0LCAwLCBcdTAwMjZzYWRkcixcbiBcdFx0XHRcdCAgIFx1MDAyNmluZm8tXHUwMDNla2V5LFxuLVx0XHRcdFx0ICAgc3BvcnQsIGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudHBfZHN0LCB0b3MsXG4rXHRcdFx0XHQgICBzcG9ydCwgY2ZnLVx1MDAzZWluZm8ua2V5LnRwX2RzdCwgdG9zLFxuIFx0XHRcdFx0ICAgdXNlX2NhY2hlID9cbiBcdFx0XHRcdCAgIChzdHJ1Y3QgZHN0X2NhY2hlICopXHUwMDI2aW5mby1cdTAwM2Vkc3RfY2FjaGUgOiBOVUxMKTtcbiBcdGlmIChJU19FUlIocnQpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihydCk7XG4gXG4tXHRpZiAoZ2VuZXZlLVx1MDAzZWNmZy5pbmZvLmtleS51LmlwdjQuc3JjIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHNhZGRyICE9IGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudS5pcHY0LnNyYykge1xuK1x0aWYgKGNmZy1cdTAwM2VpbmZvLmtleS51LmlwdjQuc3JjIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNhZGRyICE9IGNmZy1cdTAwM2VpbmZvLmtleS51LmlwdjQuc3JjKSB7XG4gXHRcdGRzdF9yZWxlYXNlKFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4gXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiBcdH1cbiBcbiBcdGVyciA9IHNrYl90dW5uZWxfY2hlY2tfcG10dShza2IsIFx1MDAyNnJ0LVx1MDAzZWRzdCxcbiBcdFx0XHRcdCAgICBHRU5FVkVfSVBWNF9ITEVOICsgaW5mby1cdTAwM2VvcHRpb25zX2xlbiArXG4tXHRcdFx0XHQgICAgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChnZW5ldmUsIHNrYiksXG4rXHRcdFx0XHQgICAgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChnZW5ldmUsIGNmZywgc2tiKSxcbiBcdFx0XHRcdCAgICBuZXRpZl9pc19hbnlfYnJpZGdlX3BvcnQoZGV2KSk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdGRzdF9yZWxlYXNlKFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG5AQCAtMTM5NywyMSArMTQwNywyMSBAQCBzdGF0aWMgaW50IGdlbmV2ZV94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0dG9zID0gaXBfdHVubmVsX2Vjbl9lbmNhcCh0b3MsIGlwX2hkcihza2IpLCBza2IpO1xuLVx0aWYgKGdlbmV2ZS1cdTAwM2VjZmcuY29sbGVjdF9tZCkge1xuK1x0aWYgKGNmZy1cdTAwM2Vjb2xsZWN0X21kKSB7XG4gXHRcdHR0bCA9IGtleS1cdTAwM2V0dGw7XG4gXG4gXHRcdGRmID0gdGVzdF9iaXQoSVBfVFVOTkVMX0RPTlRfRlJBR01FTlRfQklULCBrZXktXHUwMDNldHVuX2ZsYWdzKSA/XG4gXHRcdCAgICAgaHRvbnMoSVBfREYpIDogMDtcbiBcdH0gZWxzZSB7XG4tXHRcdGlmIChnZW5ldmUtXHUwMDNlY2ZnLnR0bF9pbmhlcml0KVxuK1x0XHRpZiAoY2ZnLVx1MDAzZXR0bF9pbmhlcml0KVxuIFx0XHRcdHR0bCA9IGlwX3R1bm5lbF9nZXRfdHRsKGlwX2hkcihza2IpLCBza2IpO1xuIFx0XHRlbHNlXG4gXHRcdFx0dHRsID0ga2V5LVx1MDAzZXR0bDtcbiBcdFx0dHRsID0gdHRsID8gOiBpcDRfZHN0X2hvcGxpbWl0KFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4gXG4tXHRcdGlmIChnZW5ldmUtXHUwMDNlY2ZnLmRmID09IEdFTkVWRV9ERl9TRVQpIHtcbitcdFx0aWYgKGNmZy1cdTAwM2VkZiA9PSBHRU5FVkVfREZfU0VUKSB7XG4gXHRcdFx0ZGYgPSBodG9ucyhJUF9ERik7XG4tXHRcdH0gZWxzZSBpZiAoZ2VuZXZlLVx1MDAzZWNmZy5kZiA9PSBHRU5FVkVfREZfSU5IRVJJVCkge1xuK1x0XHR9IGVsc2UgaWYgKGNmZy1cdTAwM2VkZiA9PSBHRU5FVkVfREZfSU5IRVJJVCkge1xuIFx0XHRcdHN0cnVjdCBldGhoZHIgKmV0aCA9IHNrYl9ldGhfaGRyKHNrYik7XG4gXG4gXHRcdFx0aWYgKG50b2hzKGV0aC1cdTAwM2VoX3Byb3RvKSA9PSBFVEhfUF9JUFY2KSB7XG5AQCAtMTQyNSwxMyArMTQzNSwxMyBAQCBzdGF0aWMgaW50IGdlbmV2ZV94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRlcnIgPSBnZW5ldmVfYnVpbGRfc2tiKFx1MDAyNnJ0LVx1MDAzZWRzdCwgc2tiLCBpbmZvLCBnZW5ldmUsXG4rXHRlcnIgPSBnZW5ldmVfYnVpbGRfc2tiKFx1MDAyNnJ0LVx1MDAzZWRzdCwgc2tiLCBpbmZvLCBnZW5ldmUsIGNmZyxcbiBcdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBpcGhkcikpO1xuIFx0aWYgKHVubGlrZWx5KGVycikpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHR1ZHBfdHVubmVsX3htaXRfc2tiKHJ0LCBnczQtXHUwMDNlc2ssIHNrYiwgc2FkZHIsIGluZm8tXHUwMDNla2V5LnUuaXB2NC5kc3QsXG4tXHRcdFx0ICAgIHRvcywgdHRsLCBkZiwgc3BvcnQsIGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudHBfZHN0LFxuK1x0XHRcdCAgICB0b3MsIHR0bCwgZGYsIHNwb3J0LCBjZmctXHUwMDNlaW5mby5rZXkudHBfZHN0LFxuIFx0XHRcdCAgICAhbmV0X2VxKGdlbmV2ZS1cdTAwM2VuZXQsIGRldl9uZXQoZ2VuZXZlLVx1MDAzZWRldikpLFxuIFx0XHRcdCAgICAhdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULCBpbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MpLFxuIFx0XHRcdCAgICAwKTtcbkBAIC0xNDQxLDYgKzE0NTEsNyBAQCBzdGF0aWMgaW50IGdlbmV2ZV94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIHN0YXRpYyBpbnQgZ2VuZXZlNl94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdCAgICBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuK1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLFxuIFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IGdlbmV2ZV9zb2NrICpnczYgPSByY3VfZGVyZWZlcmVuY2UoZ2VuZXZlLVx1MDAzZXNvY2s2KTtcbkBAIC0xNDUyLDM1ICsxNDYzLDM1IEBAIHN0YXRpYyBpbnQgZ2VuZXZlNl94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0X19iZTE2IHNwb3J0O1xuIFx0aW50IGVycjtcbiBcbi1cdGlmIChza2Jfdmxhbl9pbmV0X3ByZXBhcmUoc2tiLCBnZW5ldmUtXHUwMDNlY2ZnLmlubmVyX3Byb3RvX2luaGVyaXQpKVxuK1x0aWYgKHNrYl92bGFuX2luZXRfcHJlcGFyZShza2IsIGNmZy1cdTAwM2Vpbm5lcl9wcm90b19pbmhlcml0KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIWdzNilcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHR1c2VfY2FjaGUgPSBpcF90dW5uZWxfZHN0X2NhY2hlX3VzYWJsZShza2IsIGluZm8pO1xuLVx0cHJpbyA9IGdlbmV2ZV9nZXRfZHNmaWVsZChza2IsIGRldiwgaW5mbywgXHUwMDI2dXNlX2NhY2hlKTtcbitcdHByaW8gPSBnZW5ldmVfZ2V0X2RzZmllbGQoc2tiLCBkZXYsIGNmZywgaW5mbywgXHUwMDI2dXNlX2NhY2hlKTtcbiBcdHNwb3J0ID0gdWRwX2Zsb3dfc3JjX3BvcnQoZ2VuZXZlLVx1MDAzZW5ldCwgc2tiLFxuLVx0XHRcdFx0ICBnZW5ldmUtXHUwMDNlY2ZnLnBvcnRfbWluLFxuLVx0XHRcdFx0ICBnZW5ldmUtXHUwMDNlY2ZnLnBvcnRfbWF4LCB0cnVlKTtcbitcdFx0XHRcdCAgY2ZnLVx1MDAzZXBvcnRfbWluLFxuK1x0XHRcdFx0ICBjZmctXHUwMDNlcG9ydF9tYXgsIHRydWUpO1xuIFxuIFx0ZHN0ID0gdWRwX3R1bm5lbDZfZHN0X2xvb2t1cChza2IsIGRldiwgZ2VuZXZlLVx1MDAzZW5ldCwgZ3M2LVx1MDAzZXNrLCAwLFxuIFx0XHRcdFx0ICAgICBcdTAwMjZzYWRkciwga2V5LCBzcG9ydCxcbi1cdFx0XHRcdCAgICAgZ2VuZXZlLVx1MDAzZWNmZy5pbmZvLmtleS50cF9kc3QsIHByaW8sXG4rXHRcdFx0XHQgICAgIGNmZy1cdTAwM2VpbmZvLmtleS50cF9kc3QsIHByaW8sXG4gXHRcdFx0XHQgICAgIHVzZV9jYWNoZSA/XG4gXHRcdFx0XHQgICAgIChzdHJ1Y3QgZHN0X2NhY2hlICopXHUwMDI2aW5mby1cdTAwM2Vkc3RfY2FjaGUgOiBOVUxMKTtcbiBcdGlmIChJU19FUlIoZHN0KSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZHN0KTtcbiBcbi1cdGlmICghaXB2Nl9hZGRyX2FueShcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnUuaXB2Ni5zcmMpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXHUwMDI2c2FkZHIsIFx1MDAyNmdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudS5pcHY2LnNyYykpIHtcbitcdGlmICghaXB2Nl9hZGRyX2FueShcdTAwMjZjZmctXHUwMDNlaW5mby5rZXkudS5pcHY2LnNyYykgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWlwdjZfYWRkcl9lcXVhbChcdTAwMjZzYWRkciwgXHUwMDI2Y2ZnLVx1MDAzZWluZm8ua2V5LnUuaXB2Ni5zcmMpKSB7XG4gXHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4gXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiBcdH1cbiBcbiBcdGVyciA9IHNrYl90dW5uZWxfY2hlY2tfcG10dShza2IsIGRzdCxcbiBcdFx0XHRcdCAgICBHRU5FVkVfSVBWNl9ITEVOICsgaW5mby1cdTAwM2VvcHRpb25zX2xlbiArXG4tXHRcdFx0XHQgICAgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChnZW5ldmUsIHNrYiksXG4rXHRcdFx0XHQgICAgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChnZW5ldmUsIGNmZywgc2tiKSxcbiBcdFx0XHRcdCAgICBuZXRpZl9pc19hbnlfYnJpZGdlX3BvcnQoZGV2KSk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdGRzdF9yZWxlYXNlKGRzdCk7XG5AQCAtMTUxMywyMiArMTUyNCwyMiBAQCBzdGF0aWMgaW50IGdlbmV2ZTZfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdH1cbiBcbiBcdHByaW8gPSBpcF90dW5uZWxfZWNuX2VuY2FwKHByaW8sIGlwX2hkcihza2IpLCBza2IpO1xuLVx0aWYgKGdlbmV2ZS1cdTAwM2VjZmcuY29sbGVjdF9tZCkge1xuK1x0aWYgKGNmZy1cdTAwM2Vjb2xsZWN0X21kKSB7XG4gXHRcdHR0bCA9IGtleS1cdTAwM2V0dGw7XG4gXHR9IGVsc2Uge1xuLVx0XHRpZiAoZ2VuZXZlLVx1MDAzZWNmZy50dGxfaW5oZXJpdClcbitcdFx0aWYgKGNmZy1cdTAwM2V0dGxfaW5oZXJpdClcbiBcdFx0XHR0dGwgPSBpcF90dW5uZWxfZ2V0X3R0bChpcF9oZHIoc2tiKSwgc2tiKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHR0bCA9IGtleS1cdTAwM2V0dGw7XG4gXHRcdHR0bCA9IHR0bCA/IDogaXA2X2RzdF9ob3BsaW1pdChkc3QpO1xuIFx0fVxuLVx0ZXJyID0gZ2VuZXZlX2J1aWxkX3NrYihkc3QsIHNrYiwgaW5mbywgZ2VuZXZlLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcbitcdGVyciA9IGdlbmV2ZV9idWlsZF9za2IoZHN0LCBza2IsIGluZm8sIGdlbmV2ZSwgY2ZnLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcbiBcdGlmICh1bmxpa2VseShlcnIpKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0dWRwX3R1bm5lbDZfeG1pdF9za2IoZHN0LCBnczYtXHUwMDNlc2ssIHNrYiwgZGV2LFxuIFx0XHRcdCAgICAgXHUwMDI2c2FkZHIsIFx1MDAyNmtleS1cdTAwM2V1LmlwdjYuZHN0LCBwcmlvLCB0dGwsXG4tXHRcdFx0ICAgICBpbmZvLVx1MDAzZWtleS5sYWJlbCwgc3BvcnQsIGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudHBfZHN0LFxuK1x0XHRcdCAgICAgaW5mby1cdTAwM2VrZXkubGFiZWwsIHNwb3J0LCBjZmctXHUwMDNlaW5mby5rZXkudHBfZHN0LFxuIFx0XHRcdCAgICAgIXRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCxcbiBcdFx0XHRcdCAgICAgICBpbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MpLFxuIFx0XHRcdCAgICAgMCk7XG5AQCAtMTUzOSwyOCArMTU1MCwzMSBAQCBzdGF0aWMgaW50IGdlbmV2ZTZfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBzdGF0aWMgbmV0ZGV2X3R4X3QgZ2VuZXZlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9IE5VTEw7XG4rXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBOVUxMO1xuK1x0Y29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZztcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAoZ2VuZXZlLVx1MDAzZWNmZy5jb2xsZWN0X21kKSB7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRjZmcgPSByY3VfZGVyZWZlcmVuY2UoZ2VuZXZlLVx1MDAzZWNmZyk7XG4rXHRpZiAoY2ZnLVx1MDAzZWNvbGxlY3RfbWQpIHtcbiBcdFx0aW5mbyA9IHNrYl90dW5uZWxfaW5mbyhza2IpO1xuIFx0XHRpZiAodW5saWtlbHkoIWluZm8gfHwgIShpbmZvLVx1MDAzZW1vZGUgXHUwMDI2IElQX1RVTk5FTF9JTkZPX1RYKSkpIHtcbiBcdFx0XHRuZXRkZXZfZGJnKGRldiwgXCJubyB0dW5uZWwgbWV0YWRhdGFcXG5cIik7XG4gXHRcdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuIFx0XHRcdGRldl9kc3RhdHNfdHhfZHJvcHBlZChkZXYpO1xuK1x0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdHJldHVybiBORVRERVZfVFhfT0s7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4tXHRcdGluZm8gPSBcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLmluZm87XG4rXHRcdGluZm8gPSBcdTAwMjZjZmctXHUwMDNlaW5mbztcbiBcdH1cbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiBcdGlmIChpbmZvLVx1MDAzZW1vZGUgXHUwMDI2IElQX1RVTk5FTF9JTkZPX0lQVjYpXG4tXHRcdGVyciA9IGdlbmV2ZTZfeG1pdF9za2Ioc2tiLCBkZXYsIGdlbmV2ZSwgaW5mbyk7XG4rXHRcdGVyciA9IGdlbmV2ZTZfeG1pdF9za2Ioc2tiLCBkZXYsIGdlbmV2ZSwgY2ZnLCBpbmZvKTtcbiBcdGVsc2VcbiAjZW5kaWZcbi1cdFx0ZXJyID0gZ2VuZXZlX3htaXRfc2tiKHNrYiwgZGV2LCBnZW5ldmUsIGluZm8pO1xuK1x0XHRlcnIgPSBnZW5ldmVfeG1pdF9za2Ioc2tiLCBkZXYsIGdlbmV2ZSwgY2ZnLCBpbmZvKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKGxpa2VseSghZXJyKSlcbkBAIC0xNTkzLDggKzE2MDcsMTMgQEAgc3RhdGljIGludCBnZW5ldmVfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBza2JfdHVubmVsX2luZm8oc2tiKTtcbiBcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0Y29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZztcbiBcdF9fYmUxNiBzcG9ydDtcbiBcbitcdGNmZyA9IHJjdV9kZXJlZmVyZW5jZShnZW5ldmUtXHUwMDNlY2ZnKTtcbitcdGlmICh1bmxpa2VseSghY2ZnKSlcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4gXHRpZiAoaXBfdHVubmVsX2luZm9fYWYoaW5mbykgPT0gQUZfSU5FVCkge1xuIFx0XHRzdHJ1Y3QgcnRhYmxlICpydDtcbiBcdFx0c3RydWN0IGdlbmV2ZV9zb2NrICpnczQgPSByY3VfZGVyZWZlcmVuY2UoZ2VuZXZlLVx1MDAzZXNvY2s0KTtcbkBAIC0xNjA2LDE0ICsxNjI1LDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHRcdHVzZV9jYWNoZSA9IGlwX3R1bm5lbF9kc3RfY2FjaGVfdXNhYmxlKHNrYiwgaW5mbyk7XG4tXHRcdHRvcyA9IGdlbmV2ZV9nZXRfZHNmaWVsZChza2IsIGRldiwgaW5mbywgXHUwMDI2dXNlX2NhY2hlKTtcbitcdFx0dG9zID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBjZmcsIGluZm8sIFx1MDAyNnVzZV9jYWNoZSk7XG4gXHRcdHNwb3J0ID0gdWRwX2Zsb3dfc3JjX3BvcnQoZ2VuZXZlLVx1MDAzZW5ldCwgc2tiLFxuLVx0XHRcdFx0XHQgIGdlbmV2ZS1cdTAwM2VjZmcucG9ydF9taW4sXG4tXHRcdFx0XHRcdCAgZ2VuZXZlLVx1MDAzZWNmZy5wb3J0X21heCwgdHJ1ZSk7XG4rXHRcdFx0XHRcdCAgY2ZnLVx1MDAzZXBvcnRfbWluLFxuK1x0XHRcdFx0XHQgIGNmZy1cdTAwM2Vwb3J0X21heCwgdHJ1ZSk7XG4gXG4gXHRcdHJ0ID0gdWRwX3R1bm5lbF9kc3RfbG9va3VwKHNrYiwgZGV2LCBnZW5ldmUtXHUwMDNlbmV0LCAwLCBcdTAwMjZzYWRkcixcbiBcdFx0XHRcdFx0ICAgXHUwMDI2aW5mby1cdTAwM2VrZXksXG4tXHRcdFx0XHRcdCAgIHNwb3J0LCBnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnRwX2RzdCxcbitcdFx0XHRcdFx0ICAgc3BvcnQsIGNmZy1cdTAwM2VpbmZvLmtleS50cF9kc3QsXG4gXHRcdFx0XHRcdCAgIHRvcyxcbiBcdFx0XHRcdFx0ICAgdXNlX2NhY2hlID8gXHUwMDI2aW5mby1cdTAwM2Vkc3RfY2FjaGUgOiBOVUxMKTtcbiBcdFx0aWYgKElTX0VSUihydCkpXG5AQCAtMTYzMywxNCArMTY1MiwxNCBAQCBzdGF0aWMgaW50IGdlbmV2ZV9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdHJldHVybiAtRUlPO1xuIFxuIFx0XHR1c2VfY2FjaGUgPSBpcF90dW5uZWxfZHN0X2NhY2hlX3VzYWJsZShza2IsIGluZm8pO1xuLVx0XHRwcmlvID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBpbmZvLCBcdTAwMjZ1c2VfY2FjaGUpO1xuK1x0XHRwcmlvID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBjZmcsIGluZm8sIFx1MDAyNnVzZV9jYWNoZSk7XG4gXHRcdHNwb3J0ID0gdWRwX2Zsb3dfc3JjX3BvcnQoZ2VuZXZlLVx1MDAzZW5ldCwgc2tiLFxuLVx0XHRcdFx0XHQgIGdlbmV2ZS1cdTAwM2VjZmcucG9ydF9taW4sXG4tXHRcdFx0XHRcdCAgZ2VuZXZlLVx1MDAzZWNmZy5wb3J0X21heCwgdHJ1ZSk7XG4rXHRcdFx0XHRcdCAgY2ZnLVx1MDAzZXBvcnRfbWluLFxuK1x0XHRcdFx0XHQgIGNmZy1cdTAwM2Vwb3J0X21heCwgdHJ1ZSk7XG4gXG4gXHRcdGRzdCA9IHVkcF90dW5uZWw2X2RzdF9sb29rdXAoc2tiLCBkZXYsIGdlbmV2ZS1cdTAwM2VuZXQsIGdzNi1cdTAwM2VzaywgMCxcbiBcdFx0XHRcdFx0ICAgICBcdTAwMjZzYWRkciwgXHUwMDI2aW5mby1cdTAwM2VrZXksIHNwb3J0LFxuLVx0XHRcdFx0XHQgICAgIGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudHBfZHN0LCBwcmlvLFxuK1x0XHRcdFx0XHQgICAgIGNmZy1cdTAwM2VpbmZvLmtleS50cF9kc3QsIHByaW8sXG4gXHRcdFx0XHRcdCAgICAgdXNlX2NhY2hlID8gXHUwMDI2aW5mby1cdTAwM2Vkc3RfY2FjaGUgOiBOVUxMKTtcbiBcdFx0aWYgKElTX0VSUihkc3QpKVxuIFx0XHRcdHJldHVybiBQVFJfRVJSKGRzdCk7XG5AQCAtMTY1Myw3ICsxNjcyLDcgQEAgc3RhdGljIGludCBnZW5ldmVfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdH1cbiBcbiBcdGluZm8tXHUwMDNla2V5LnRwX3NyYyA9IHNwb3J0O1xuLVx0aW5mby1cdTAwM2VrZXkudHBfZHN0ID0gZ2VuZXZlLVx1MDAzZWNmZy5pbmZvLmtleS50cF9kc3Q7XG4rXHRpbmZvLVx1MDAzZWtleS50cF9kc3QgPSBjZmctXHUwMDNlaW5mby5rZXkudHBfZHN0O1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTE3MDksNyArMTcyOCw1MCBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfb2ZmbG9hZF9yeF9wb3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHB1c2gpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqZ2VuZXZlX2NvbmZpZ19hbGxvYyhjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqc3JjKVxuK3tcbitcdHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmc7XG4rXHRpbnQgZXJyO1xuK1xuK1x0Y2ZnID0ga21lbWR1cChzcmMsIHNpemVvZigqc3JjKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWNmZylcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXG4rXHRjZmctXHUwMDNlaW5mby5kc3RfY2FjaGUuY2FjaGUgPSBOVUxMO1xuK1x0ZXJyID0gZHN0X2NhY2hlX2luaXQoXHUwMDI2Y2ZnLVx1MDAzZWluZm8uZHN0X2NhY2hlLCBHRlBfS0VSTkVMKTtcbitcdGlmIChlcnIpIHtcbitcdFx0a2ZyZWUoY2ZnKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbitcdH1cbitcbitcdHJldHVybiBjZmc7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGdlbmV2ZV9jb25maWdfZnJlZShzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnKVxuK3tcbitcdGlmIChjZmcpIHtcbitcdFx0ZHN0X2NhY2hlX2Rlc3Ryb3koXHUwMDI2Y2ZnLVx1MDAzZWluZm8uZHN0X2NhY2hlKTtcbitcdFx0a2ZyZWUoY2ZnKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgZ2VuZXZlX2NvbmZpZ19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4re1xuK1x0c3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZywgcmN1KTtcbitcbitcdGdlbmV2ZV9jb25maWdfZnJlZShjZmcpO1xuK31cbitcbiAvKiBJbml0aWFsaXplIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqL1xuK3N0YXRpYyB2b2lkIGdlbmV2ZV9mcmVlX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0c3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2VuZXZlLVx1MDAzZWNmZywgMSk7XG4rXG4rXHRnZW5ldmVfY29uZmlnX2ZyZWUoY2ZnKTtcbitcdFJDVV9JTklUX1BPSU5URVIoZ2VuZXZlLVx1MDAzZWNmZywgTlVMTCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGdlbmV2ZV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdGV0aGVyX3NldHVwKGRldik7XG5AQCAtMTcxNyw2ICsxNzc5LDcgQEAgc3RhdGljIHZvaWQgZ2VuZXZlX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNmdlbmV2ZV9uZXRkZXZfb3BzO1xuIFx0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2Z2VuZXZlX2V0aHRvb2xfb3BzO1xuIFx0ZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbitcdGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3IgPSBnZW5ldmVfZnJlZV9kZXY7XG4gXG4gXHRTRVRfTkVUREVWX0RFVlRZUEUoZGV2LCBcdTAwMjZnZW5ldmVfdHlwZSk7XG4gXG5AQCAtMTg3OCwxNSArMTk0MSwxNyBAQCBzdGF0aWMgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZV9maW5kX2RldihzdHJ1Y3QgZ2VuZXZlX25ldCAqZ24sXG4gXHQqdHVuX29uX3NhbWVfcG9ydCA9IGZhbHNlO1xuIFx0KnR1bl9jb2xsZWN0X21kID0gZmFsc2U7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGdlbmV2ZSwgXHUwMDI2Z24tXHUwMDNlZ2VuZXZlX2xpc3QsIG5leHQpIHtcbi1cdFx0aWYgKGluZm8tXHUwMDNla2V5LnRwX2RzdCA9PSBnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnRwX2RzdCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIChjZmctXHUwMDNlZHVhbHN0YWNrIHx8IGdlbmV2ZS1cdTAwM2VjZmcuZHVhbHN0YWNrIHx8XG4tXHRcdCAgICAgZ2VuZXZlX3NhZGRyX2NvbmZsaWN0KGluZm8sIFx1MDAyNmdlbmV2ZS1cdTAwM2VjZmcuaW5mbykpKSB7XG4tXHRcdFx0KnR1bl9jb2xsZWN0X21kIHw9IGdlbmV2ZS1cdTAwM2VjZmcuY29sbGVjdF9tZDtcbitcdFx0Y29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmdjZmcgPSBydG5sX2RlcmVmZXJlbmNlKGdlbmV2ZS1cdTAwM2VjZmcpO1xuK1xuK1x0XHRpZiAoaW5mby1cdTAwM2VrZXkudHBfZHN0ID09IGdjZmctXHUwMDNlaW5mby5rZXkudHBfZHN0IFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKGNmZy1cdTAwM2VkdWFsc3RhY2sgfHwgZ2NmZy1cdTAwM2VkdWFsc3RhY2sgfHxcbitcdFx0ICAgICBnZW5ldmVfc2FkZHJfY29uZmxpY3QoaW5mbywgXHUwMDI2Z2NmZy1cdTAwM2VpbmZvKSkpIHtcbitcdFx0XHQqdHVuX2NvbGxlY3RfbWQgfD0gZ2NmZy1cdTAwM2Vjb2xsZWN0X21kO1xuIFx0XHRcdCp0dW5fb25fc2FtZV9wb3J0ID0gdHJ1ZTtcbiBcdFx0fVxuLVx0XHRpZiAoaW5mby1cdTAwM2VrZXkudHVuX2lkID09IGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudHVuX2lkIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgaW5mby1cdTAwM2VrZXkudHBfZHN0ID09IGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudHBfZHN0IFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIW1lbWNtcChcdTAwMjZpbmZvLVx1MDAzZWtleS51LCBcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnUsIHNpemVvZihpbmZvLVx1MDAzZWtleS51KSkpXG4rXHRcdGlmIChpbmZvLVx1MDAzZWtleS50dW5faWQgPT0gZ2NmZy1cdTAwM2VpbmZvLmtleS50dW5faWQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBpbmZvLVx1MDAzZWtleS50cF9kc3QgPT0gZ2NmZy1cdTAwM2VpbmZvLmtleS50cF9kc3QgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhbWVtY21wKFx1MDAyNmluZm8tXHUwMDNla2V5LnUsIFx1MDAyNmdjZmctXHUwMDNlaW5mby5rZXkudSwgc2l6ZW9mKGluZm8tXHUwMDNla2V5LnUpKSlcbiBcdFx0XHR0ID0gZ2VuZXZlO1xuIFx0fVxuIFx0cmV0dXJuIHQ7XG5AQCAtMTkyMiw2ICsxOTg3LDcgQEAgc3RhdGljIGludCBnZW5ldmVfY29uZmlndXJlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdHN0cnVjdCBnZW5ldmVfZGV2ICp0LCAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9IFx1MDAyNmNmZy1cdTAwM2VpbmZvO1xuIFx0Ym9vbCB0dW5fY29sbGVjdF9tZCwgdHVuX29uX3NhbWVfcG9ydDtcbitcdHN0cnVjdCBnZW5ldmVfY29uZmlnICpuZXdfY2ZnO1xuIFx0aW50IGVyciwgZW5jYXBfbGVuO1xuIFxuIFx0aWYgKGNmZy1cdTAwM2Vjb2xsZWN0X21kIFx1MDAyNlx1MDAyNiAhaXNfdG5sX2luZm9femVybyhpbmZvKSkge1xuQEAgLTE5NjIsMTAgKzIwMjgsMTMgQEAgc3RhdGljIGludCBnZW5ldmVfY29uZmlndXJlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0fVxuIFx0fVxuIFxuLVx0ZHN0X2NhY2hlX3Jlc2V0KFx1MDAyNmdlbmV2ZS1cdTAwM2VjZmcuaW5mby5kc3RfY2FjaGUpO1xuLVx0bWVtY3B5KFx1MDAyNmdlbmV2ZS1cdTAwM2VjZmcsIGNmZywgc2l6ZW9mKCpjZmcpKTtcbitcdG5ld19jZmcgPSBnZW5ldmVfY29uZmlnX2FsbG9jKGNmZyk7XG4rXHRpZiAoSVNfRVJSKG5ld19jZmcpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihuZXdfY2ZnKTtcbitcbitcdHJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtXHUwMDNlY2ZnLCBuZXdfY2ZnKTtcbiBcbi1cdGlmIChnZW5ldmUtXHUwMDNlY2ZnLmlubmVyX3Byb3RvX2luaGVyaXQpIHtcbitcdGlmIChjZmctXHUwMDNlaW5uZXJfcHJvdG9faW5oZXJpdCkge1xuIFx0XHRkZXYtXHUwMDNlaGVhZGVyX29wcyA9IE5VTEw7XG4gXHRcdGRldi1cdTAwM2V0eXBlID0gQVJQSFJEX05PTkU7XG4gXHRcdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSAwO1xuQEAgLTIzMjMsODEgKzIzOTIsNDUgQEAgc3RhdGljIGludCBnZW5ldmVfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLS8qIFF1aWVzY2VzIHRoZSBnZW5ldmUgZGV2aWNlIGRhdGEgcGF0aCBmb3IgYm90aCBUWCBhbmQgUlguXG4tICpcbi0gKiBPbiB0cmFuc21pdCBnZW5ldmUgY2hlY2tzIGZvciBub24tTlVMTCBnZW5ldmVfc29jayBiZWZvcmUgaXQgcHJvY2VlZHMuXG4tICogU28sIGlmIHdlIHNldCB0aGF0IHNvY2tldCB0byBOVUxMIHVuZGVyIFJDVSBhbmQgd2FpdCBmb3Igc3luY2hyb25pemVfbmV0KClcbi0gKiB0byBjb21wbGV0ZSBmb3IgdGhlIGV4aXN0aW5nIHNldCBvZiBpbi1mbGlnaHQgcGFja2V0cyB0byBiZSB0cmFuc21pdHRlZCxcbi0gKiB0aGVuIHdlIHdvdWxkIGhhdmUgcXVpZXNjZWQgdGhlIHRyYW5zbWl0IGRhdGEgcGF0aC4gQWxsIHRoZSBmdXR1cmUgcGFja2V0c1xuLSAqIHdpbGwgZ2V0IGRyb3BwZWQgdW50aWwgd2UgdW5xdWllc2NlIHRoZSBkYXRhIHBhdGguXG4tICpcbi0gKiBPbiByZWNlaXZlIGdlbmV2ZSBkZXJlZmVyZW5jZSB0aGUgZ2VuZXZlX3NvY2sgc3Rhc2hlZCBpbiB0aGUgc29ja2V0LiBTbyxcbi0gKiBpZiB3ZSBzZXQgdGhhdCB0byBOVUxMIHVuZGVyIFJDVSBhbmQgd2FpdCBmb3Igc3luY2hyb25pemVfbmV0KCkgdG9cbi0gKiBjb21wbGV0ZSwgdGhlbiB3ZSB3b3VsZCBoYXZlIHF1aWVzY2VkIHRoZSByZWNlaXZlIGRhdGEgcGF0aC5cbisvKiBVcGRhdGUgdGhlIGRldmljZSBjb25maWd1cmF0aW9uIHVuZGVyIFJUTkwuXG4rICogV2UgdXNlIFJDVSBzd2FwIHRvIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBhdG9taWNhbGx5LCBzbyB0aGUgZGF0YSBwYXRoXG4rICogKGJvdGggVFggYW5kIFJYKSBjYW4gY29udGludWUgcnVubmluZyB3aXRob3V0IGludGVycnVwdGlvbiBvciBwYWNrZXQgbG9zcy5cbiAgKi9cbi1zdGF0aWMgdm9pZCBnZW5ldmVfcXVpZXNjZShzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKipnczQsXG4tXHRcdFx0ICAgc3RydWN0IGdlbmV2ZV9zb2NrICoqZ3M2KVxuLXtcbi1cdCpnczQgPSBydG5sX2RlcmVmZXJlbmNlKGdlbmV2ZS1cdTAwM2Vzb2NrNCk7XG4tXHRyY3VfYXNzaWduX3BvaW50ZXIoZ2VuZXZlLVx1MDAzZXNvY2s0LCBOVUxMKTtcbi1cdGlmICgqZ3M0KVxuLVx0XHRyY3VfYXNzaWduX3NrX3VzZXJfZGF0YSgoKmdzNCktXHUwMDNlc2ssIE5VTEwpO1xuLSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuLVx0KmdzNiA9IHJ0bmxfZGVyZWZlcmVuY2UoZ2VuZXZlLVx1MDAzZXNvY2s2KTtcbi1cdHJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtXHUwMDNlc29jazYsIE5VTEwpO1xuLVx0aWYgKCpnczYpXG4tXHRcdHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKCgqZ3M2KS1cdTAwM2VzaywgTlVMTCk7XG4tI2Vsc2Vcbi1cdCpnczYgPSBOVUxMO1xuLSNlbmRpZlxuLVx0c3luY2hyb25pemVfbmV0KCk7XG4tfVxuLVxuLS8qIFJlc3VtZXMgdGhlIGdlbmV2ZSBkZXZpY2UgZGF0YSBwYXRoIGZvciBib3RoIFRYIGFuZCBSWC4gKi9cbi1zdGF0aWMgdm9pZCBnZW5ldmVfdW5xdWllc2NlKHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsIHN0cnVjdCBnZW5ldmVfc29jayAqZ3M0LFxuLVx0XHRcdCAgICAgc3RydWN0IGdlbmV2ZV9zb2NrIF9fbWF5YmVfdW51c2VkICpnczYpXG4te1xuLVx0cmN1X2Fzc2lnbl9wb2ludGVyKGdlbmV2ZS1cdTAwM2Vzb2NrNCwgZ3M0KTtcbi1cdGlmIChnczQpXG4tXHRcdHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKGdzNC1cdTAwM2VzaywgZ3M0KTtcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbi1cdHJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtXHUwMDNlc29jazYsIGdzNik7XG4tXHRpZiAoZ3M2KVxuLVx0XHRyY3VfYXNzaWduX3NrX3VzZXJfZGF0YShnczYtXHUwMDNlc2ssIGdzNik7XG4tI2VuZGlmXG4tfVxuLVxuIHN0YXRpYyBpbnQgZ2VuZXZlX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcdFx0XHQgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbiBcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdHN0cnVjdCBnZW5ldmVfc29jayAqZ3M0LCAqZ3M2O1xuLVx0c3RydWN0IGdlbmV2ZV9jb25maWcgY2ZnO1xuK1x0c3RydWN0IGdlbmV2ZV9jb25maWcgKm9sZF9jZmcgPSBydG5sX2RlcmVmZXJlbmNlKGdlbmV2ZS1cdTAwM2VjZmcpO1xuK1x0c3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZztcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBJZiB0aGUgZ2VuZXZlIGRldmljZSBpcyBjb25maWd1cmVkIGZvciBtZXRhZGF0YSAob3IgZXh0ZXJuYWxseVxuIFx0ICogY29udHJvbGxlZCwgZm9yIGV4YW1wbGUsIE9WUyksIHRoZW4gbm90aGluZyBjYW4gYmUgY2hhbmdlZC5cbiBcdCAqL1xuLVx0aWYgKGdlbmV2ZS1cdTAwM2VjZmcuY29sbGVjdF9tZClcbitcdGlmIChvbGRfY2ZnLVx1MDAzZWNvbGxlY3RfbWQpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdC8qIFN0YXJ0IHdpdGggdGhlIGV4aXN0aW5nIGluZm8uICovXG4tXHRtZW1jcHkoXHUwMDI2Y2ZnLCBcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLCBzaXplb2YoY2ZnKSk7XG4tXHRlcnIgPSBnZW5ldmVfbmwyaW5mbyh0YiwgZGF0YSwgZXh0YWNrLCBcdTAwMjZjZmcsIHRydWUpO1xuK1x0Y2ZnID0gZ2VuZXZlX2NvbmZpZ19hbGxvYyhvbGRfY2ZnKTtcbitcdGlmIChJU19FUlIoY2ZnKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoY2ZnKTtcbitcbitcdGVyciA9IGdlbmV2ZV9ubDJpbmZvKHRiLCBkYXRhLCBleHRhY2ssIGNmZywgdHJ1ZSk7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHRnb3RvIGVycl9mcmVlX2NmZztcbiBcbi1cdGlmICghZ2VuZXZlX2RzdF9hZGRyX2VxdWFsKFx1MDAyNmdlbmV2ZS1cdTAwM2VjZmcuaW5mbywgXHUwMDI2Y2ZnLmluZm8pKSB7XG4tXHRcdGRzdF9jYWNoZV9yZXNldChcdTAwMjZjZmcuaW5mby5kc3RfY2FjaGUpO1xuLVx0XHRnZW5ldmVfbGlua19jb25maWcoZGV2LCBcdTAwMjZjZmcuaW5mbywgdGIpO1xuLVx0fVxuK1x0aWYgKCFnZW5ldmVfZHN0X2FkZHJfZXF1YWwoXHUwMDI2b2xkX2NmZy1cdTAwM2VpbmZvLCBcdTAwMjZjZmctXHUwMDNlaW5mbykpXG4rXHRcdGdlbmV2ZV9saW5rX2NvbmZpZyhkZXYsIFx1MDAyNmNmZy1cdTAwM2VpbmZvLCB0Yik7XG4gXG4tXHRnZW5ldmVfcXVpZXNjZShnZW5ldmUsIFx1MDAyNmdzNCwgXHUwMDI2Z3M2KTtcbi1cdG1lbWNweShcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLCBcdTAwMjZjZmcsIHNpemVvZihjZmcpKTtcbi1cdGdlbmV2ZV91bnF1aWVzY2UoZ2VuZXZlLCBnczQsIGdzNik7XG4rXHRyY3VfYXNzaWduX3BvaW50ZXIoZ2VuZXZlLVx1MDAzZWNmZywgY2ZnKTtcbiBcbitcdGNhbGxfcmN1X2h1cnJ5KFx1MDAyNm9sZF9jZmctXHUwMDNlcmN1LCBnZW5ldmVfY29uZmlnX2ZyZWVfcmN1KTtcbiBcdHJldHVybiAwO1xuK1xuK2Vycl9mcmVlX2NmZzpcbitcdGdlbmV2ZV9jb25maWdfZnJlZShjZmcpO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZ2VuZXZlX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbkBAIC0yNDMxLDE2ICsyNDY0LDI3IEBAIHN0YXRpYyBzaXplX3QgZ2VuZXZlX2dldF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gc3RhdGljIGludCBnZW5ldmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuLVx0c3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7XG4tXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLmluZm87XG4tXHRib29sIHR0bF9pbmhlcml0ID0gZ2VuZXZlLVx1MDAzZWNmZy50dGxfaW5oZXJpdDtcbi1cdGJvb2wgbWV0YWRhdGEgPSBnZW5ldmUtXHUwMDNlY2ZnLmNvbGxlY3RfbWQ7XG4tXHRzdHJ1Y3QgaWZsYV9nZW5ldmVfcG9ydF9yYW5nZSBwb3J0cyA9IHtcbi1cdFx0Lmxvd1x0PSBodG9ucyhnZW5ldmUtXHUwMDNlY2ZnLnBvcnRfbWluKSxcbi1cdFx0LmhpZ2hcdD0gaHRvbnMoZ2VuZXZlLVx1MDAzZWNmZy5wb3J0X21heCksXG4tXHR9O1xuK1x0Y29uc3Qgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7XG4rXHRzdHJ1Y3QgaWZsYV9nZW5ldmVfcG9ydF9yYW5nZSBwb3J0cztcbitcdGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmc7XG4rXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm87XG4rXHRib29sIHR0bF9pbmhlcml0LCBtZXRhZGF0YTtcbiBcdF9fdTggdG1wX3ZuaVszXTtcbiBcdF9fdTMyIHZuaTtcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0Y2ZnID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS1cdTAwM2VjZmcpO1xuK1x0aWYgKCFjZmcpIHtcbitcdFx0ZXJyID0gLUVOT0RFVjtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRpbmZvID0gXHUwMDI2Y2ZnLVx1MDAzZWluZm87XG4rXHR0dGxfaW5oZXJpdCA9IGNmZy1cdTAwM2V0dGxfaW5oZXJpdDtcbitcdG1ldGFkYXRhID0gY2ZnLVx1MDAzZWNvbGxlY3RfbWQ7XG4rXHRwb3J0cy5sb3cgPSBodG9ucyhjZmctXHUwMDNlcG9ydF9taW4pO1xuK1x0cG9ydHMuaGlnaCA9IGh0b25zKGNmZy1cdTAwM2Vwb3J0X21heCk7XG4gXG4gXHR0dW5uZWxfaWRfdG9fdm5pKGluZm8tXHUwMDNla2V5LnR1bl9pZCwgdG1wX3ZuaSk7XG4gXHR2bmkgPSAodG1wX3ZuaVswXSBcdTAwM2NcdTAwM2MgMTYpIHwgKHRtcF92bmlbMV0gXHUwMDNjXHUwMDNjIDgpIHwgdG1wX3ZuaVsyXTtcbkBAIC0yNDY4LDE3ICsyNTEyLDE3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuICNlbmRpZlxuIFx0fVxuIFxuLVx0aWYgKCFnZW5ldmUtXHUwMDNlY2ZnLmR1YWxzdGFjaykge1xuK1x0aWYgKCFjZmctXHUwMDNlZHVhbHN0YWNrKSB7XG4gXHRcdGlmIChpcF90dW5uZWxfaW5mb19hZihpbmZvKSA9PSBBRl9JTkVUKSB7XG4gXHRcdFx0aWYgKChpbmZvLVx1MDAzZWtleS51LmlwdjQuc3JjIHx8XG4tXHRcdFx0ICAgICBnZW5ldmUtXHUwMDNlY2ZnLmNvbGxlY3RfbWQpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAgbWV0YWRhdGEpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICBubGFfcHV0X2luX2FkZHIoc2tiLCBJRkxBX0dFTkVWRV9MT0NBTCxcbiBcdFx0XHRcdFx0ICAgIGluZm8tXHUwMDNla2V5LnUuaXB2NC5zcmMpKVxuIFx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0aWYgKCghaXB2Nl9hZGRyX2FueShcdTAwMjZpbmZvLVx1MDAzZWtleS51LmlwdjYuc3JjKSB8fFxuLVx0XHRcdCAgICAgZ2VuZXZlLVx1MDAzZWNmZy5jb2xsZWN0X21kKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIG1ldGFkYXRhKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgbmxhX3B1dF9pbjZfYWRkcihza2IsIElGTEFfR0VORVZFX0xPQ0FMNixcbiBcdFx0XHRcdFx0ICAgICBcdTAwMjZpbmZvLVx1MDAzZWtleS51LmlwdjYuc3JjKSlcbiBcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuQEAgLTI0OTEsNyArMjUzNSw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0ICAgIG5sYV9wdXRfYmUzMihza2IsIElGTEFfR0VORVZFX0xBQkVMLCBpbmZvLVx1MDAzZWtleS5sYWJlbCkpXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuLVx0aWYgKG5sYV9wdXRfdTgoc2tiLCBJRkxBX0dFTkVWRV9ERiwgZ2VuZXZlLVx1MDAzZWNmZy5kZikpXG4rXHRpZiAobmxhX3B1dF91OChza2IsIElGTEFfR0VORVZFX0RGLCBjZmctXHUwMDNlZGYpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbiBcdGlmIChubGFfcHV0X2JlMTYoc2tiLCBJRkxBX0dFTkVWRV9QT1JULCBpbmZvLVx1MDAzZWtleS50cF9kc3QpKVxuQEAgLTI1MDIsMjggKzI1NDYsMzEgQEAgc3RhdGljIGludCBnZW5ldmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gXHRpZiAobmxhX3B1dF91OChza2IsIElGTEFfR0VORVZFX1VEUF9aRVJPX0NTVU02X1JYLFxuLVx0XHQgICAgICAgIWdlbmV2ZS1cdTAwM2VjZmcudXNlX3VkcDZfcnhfY2hlY2tzdW1zKSlcbitcdFx0ICAgICAgICFjZmctXHUwMDNldXNlX3VkcDZfcnhfY2hlY2tzdW1zKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gI2VuZGlmXG4gXG4gXHRpZiAobmxhX3B1dF91OChza2IsIElGTEFfR0VORVZFX1RUTF9JTkhFUklULCB0dGxfaW5oZXJpdCkpXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuLVx0aWYgKGdlbmV2ZS1cdTAwM2VjZmcuaW5uZXJfcHJvdG9faW5oZXJpdCBcdTAwMjZcdTAwMjZcbitcdGlmIChjZmctXHUwMDNlaW5uZXJfcHJvdG9faW5oZXJpdCBcdTAwMjZcdTAwMjZcbiBcdCAgICBubGFfcHV0X2ZsYWcoc2tiLCBJRkxBX0dFTkVWRV9JTk5FUl9QUk9UT19JTkhFUklUKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4gXHRpZiAobmxhX3B1dChza2IsIElGTEFfR0VORVZFX1BPUlRfUkFOR0UsIHNpemVvZihwb3J0cyksIFx1MDAyNnBvcnRzKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4tXHRpZiAoZ2VuZXZlLVx1MDAzZWNmZy5ncm9faGludCBcdTAwMjZcdTAwMjZcbitcdGlmIChjZmctXHUwMDNlZ3JvX2hpbnQgXHUwMDI2XHUwMDI2XG4gXHQgICAgbmxhX3B1dF9mbGFnKHNrYiwgSUZMQV9HRU5FVkVfR1JPX0hJTlQpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbi1cdHJldHVybiAwO1xuK291dDpcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0cmV0dXJuIGVycjtcbiBcbiBubGFfcHV0X2ZhaWx1cmU6XG4tXHRyZXR1cm4gLUVNU0dTSVpFO1xuK1x0ZXJyID0gLUVNU0dTSVpFO1xuK1x0Z290byBvdXQ7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBnZW5ldmVfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbkBAIC0yNjcxLDYgKzI3MTgsNyBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgZ2VuZXZlX2NsZWFudXBfbW9kdWxlKHZvaWQpXG4gXHRydG5sX2xpbmtfdW5yZWdpc3RlcihcdTAwMjZnZW5ldmVfbGlua19vcHMpO1xuIFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXHUwMDI2Z2VuZXZlX25vdGlmaWVyX2Jsb2NrKTtcbiBcdHVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZnZW5ldmVfbmV0X29wcyk7XG4rXHRyY3VfYmFycmllcigpO1xuIH1cbiBtb2R1bGVfZXhpdChnZW5ldmVfY2xlYW51cF9tb2R1bGUpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6NTM6MzIuNTY1ODc4OTMyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM0MzQxNjU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEdFTkVWRSBDb25maWd1cmF0aW9uIFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYGRyaXZlcnMvbmV0L2dlbmV2ZS5jYCwgYW5kIGl0J3MgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZS4gVGhleSdyZSBzd2l0Y2hpbmcgaG93IGBnZW5ldmVfY29uZmlnYCBpcyBhY2Nlc3NlZCwgbW92aW5nIGZyb20gYSBkaXJlY3QgYHN0cnVjdGAgdG8gYW4gYF9fcmN1ICpgIHBvaW50ZXIgd2l0aGluIHRoZSBgZ2VuZXZlX2RldmAgc3RydWN0dXJlLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGFzIHNvbWV0aGluZyB0aGF0ICpuZWVkcyogZnV6emluZy4gSXQncyBkZXNpZ25lZCB0byBmaXggUkNVIGRlcmVmZXJlbmNpbmcgaXNzdWVzLCBlc3NlbnRpYWxseSByZXBsYWNpbmcgdGhlIG9sZCBzeW5jaHJvbm91cyBgZ2VuZXZlX3F1aWVzY2VgIGFuZCBgZ2VuZXZlX3VucXVpZXNjZWAgbWVjaGFuaXNtcyB3aXRoIFJDVS1iYXNlZCBhdG9taWMgY29uZmlndXJhdGlvbiB1cGRhdGVzLiBUaGF0J3MgYSBzb2xpZCB3aW4gZm9yIGNvbmN1cnJlbmN5LCBidXQgYSBwb3RlbnRpYWwgbGFuZG1pbmUgaWYgdGhlIFJDVSB1c2FnZSBpc24ndCBwZXJmZWN0LlxuXG5MZXQncyBkcmlsbCBkb3duIGFuZCBmaWd1cmUgb3V0IHRoZSBiZXN0IGZvY3VzIHBvaW50cyBmb3IgZnV6emluZy4gSSd2ZSBnb3QgYSBsaXN0IG9mIHRoZSBtb2RpZmllZCBzeW1ib2xzOiBgZ2VuZXZlX2xvb2t1cGAsIGBnZW5ldmU2X2xvb2t1cGAsIGBnZW5ldmVfdWRwX2VuY2FwX3JlY3ZgLCBgZ2VuZXZlX2NyZWF0ZV9zb2NrYCwgYWxsIHRoZSB3YXkgZG93biB0byBgZ2VuZXZlX2ZpbGxfaW5mb2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhdm9pZCB0aGUgaG90IHBhdGggZnVuY3Rpb25zIGxpa2UgYGdlbmV2ZV94bWl0YCwgYGdlbmV2ZV94bWl0X3NrYmAsIGFuZCBzbyBvbi4gVGhleSdyZSBpbXBvcnRhbnQsIGJ1dCB0aGVpciBzaGVlciB2b2x1bWUgb2YgZXhlY3V0aW9uIG1pZ2h0IGRyb3duIG91dCBzdWJ0bGUgY29uY3VycmVuY3kgYnVncy4gVGhlIHNhbWUgZ29lcyBmb3IgcmVjZWl2ZSBwcm9jZXNzaW5nIGxpa2UgYGdlbmV2ZV91ZHBfZW5jYXBfcmVjdmAgd2hpY2ggd2lsbCBiZSBjb21wbGV4IHdpdGggdGhlIGVuY2FwIGFuZCBkZWNhcHN1bGF0aW9uLlxuXG5JbnN0ZWFkLCBJJ2xsIHByaW9yaXRpemUgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wgcGF0aCBmdW5jdGlvbnMuIE15IHRhcmdldCBsaXN0IGlzOlxuXG4qICAgYGdlbmV2ZV9jaGFuZ2VsaW5rYFxuKiAgIGBnZW5ldmVfY29uZmlndXJlYFxuKiAgIGBnZW5ldmVfbmV3bGlua2AgKGV2ZW4gdGhvdWdoIGl0J3MgbWluaW1hbGx5IHRvdWNoZWQsIGl0IGNhbGxzIGBnZW5ldmVfY29uZmlndXJlYCwgc28gaXQncyByZWxldmFudClcbiogICBgZ2VuZXZlX2ZpbGxfaW5mb2BcbiogICBUaGUgbmV3bHkgaW50cm9kdWNlZCBmdW5jdGlvbnMsIGxpa2UgYGdlbmV2ZV9jb25maWdfYWxsb2NgLCBgZ2VuZXZlX2NvbmZpZ19mcmVlYCwgYW5kIGBnZW5ldmVfZnJlZV9kZXZgIGFyZSBhbHNvIGhpZ2ggdmFsdWUgc2luY2UgdGhleSBpbXBsZW1lbnQgdGhlIG5ldyBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQuXG5cbkkgYWxzbyBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBHRU5FVkUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHRhcmdldGluZyB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGVpdGhlciBpbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2Agb3IgbWF5YmUgd2l0aGluIGBkcml2ZXJzL25ldC9nZW5ldmUuY2AgaXRzZWxmLiBUaGlzIHdpbGwgaW5mb3JtIHRoZSBpbml0aWFsIGZ1enogaGFybmVzcyBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwODMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzo1Mzo0MC45MDkyOTgwOThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0MDcyNTUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgR0VORVZFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MjMwPWNvbmZpZyBWWExBTlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNDQtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyNDU6Y29uZmlnIEdFTkVWRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMjQ2LVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIE5ldHdvcmsgVmlydHVhbGl6YXRpb24gRW5jYXBzdWxhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6NTM6NDUuODUwMDI5MDI3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMDY2NzEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRXhhbWluaW5nIHRoZSBHRU5FVkUgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBHRU5FVkVgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBwb2ludCBoZXJlLCB0aGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEFyZSB0aGVyZSAqYW55KiBvdGhlciBjb25maWd1cmF0aW9ucyB3ZSBuZWVkIHRvIGNvbnNpZGVyPyBMZXQncyBzZWUuLi4gQWgsIHllcywgYENPTkZJR19JUFY2YCBpcyBhbHNvIGJlaW5nIHJlZmVyZW5jZWQgaW4gdGhlIGNvZGUsIHNvIHRoYXQncyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLCBhbHRob3VnaCBgQ09ORklHX0dFTkVWRWAgYXBwZWFycyB0byBiZSB0aGUgcHJpbWFyeSBvbmUuIE5vdywgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24sIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGViYXNlIGFuZCBhbmFseXplIGl0cyBhcHBsaWNhdGlvbi5cblxuTGV0J3MgZm9jdXMgb24gYGdlbmV2ZV9jaGFuZ2VsaW5rYCBhbmQgYGdlbmV2ZV9jb25maWd1cmVgLiBBcmUgdGhlc2UgdGhlIHJpZ2h0IGZ1bmN0aW9ucyB0byB6ZXJvIGluIG9uIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb25maWd1cmF0aW9uIGFjdHVhbGx5IGdldHMgcHV0IGludG8gZWZmZWN0PyBUaGV5IHNlZW0gbGlrZSBzdHJvbmcgY2FuZGlkYXRlcywgZ2l2ZW4gdGhlIG5hbWVzLiBNeSBndXQgc2F5cyB0aGV5J2xsIGJlIGNyaXRpY2FsIGZvY3VzIHN5bWJvbHMuIEknbGwgc3RhcnQgd2l0aCB0aG9zZSBhbmQgc2VlIHdoZXJlIHRoZXkgbGVhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMTcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzo1Mzo0OS4xNzA2OTkyMzRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzNzQzMTQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5ldmVfY2hhbmdlbGlua1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9nZW5ldmUuYz0yMzYzPXN0YXRpYyBpbnQgZ2VuZXZlX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTIzOTgtICovXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjM5OTpzdGF0aWMgaW50IGdlbmV2ZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjQwMC1cXHRcXHRcXHQgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTI1NzY9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGdlbmV2ZV9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjU4My1cXHQubmV3bGlua1xcdD0gZ2VuZXZlX25ld2xpbmssXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjU4NDpcXHQuY2hhbmdlbGlua1xcdD0gZ2VuZXZlX2NoYW5nZWxpbmssXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjU4NS1cXHQuZGVsbGlua1xcdD0gZ2VuZXZlX2RlbGxpbmssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjUzOjU0LjIwODE0MTY5M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NjEwODk4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkZvY3VzaW5nIG9uIEdlbmV2ZSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGBnZW5ldmVfY2hhbmdlbGlua2AgYW5kIGBnZW5ldmVfY29uZmlndXJlYC4gVGhvc2UgYXJlIGRlZmluaXRlbHkgdGhlIGtleSBhcmVhcyB0byBjb25jZW50cmF0ZSBvbi4gVGhpbmtpbmcgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VkdXJlcywgc3BlY2lmaWNhbGx5IHRob3NlIGZ1bmN0aW9ucywgdGhhdCBpcyB3aGVyZSB0aGUgaW50cmljYWNpZXMgb2YgR2VuZXZlIGltcGxlbWVudGF0aW9uIHdpbGwgdW5kb3VidGVkbHkgbGllLiBgZ2VuZXZlX2NoYW5nZWxpbmtgIGlzIGNyaXRpY2FsIGZvciBlbnN1cmluZyB0aGUgcHJvcGVyIGhhbmRsaW5nIG9mIGxpbmsgc3RhdGUgY2hhbmdlcyDigJMgdml0YWwgZm9yIHJlbGlhYmxlIG9wZXJhdGlvbi4gQW5kIGBnZW5ldmVfY29uZmlndXJlYOKApiB3ZWxsLCB0aGF0J3MgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIsIGlzbid0IGl0PyBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBzZXR1cCBsb2dpYyBsaXZlczsgYW55IGFyY2hpdGVjdHVyYWwgd2Vha25lc3NlcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB3aWxsIGJlY29tZSByZWFkaWx5IGFwcGFyZW50IHRoZXJlLiBJIG5lZWQgdG8gbWFrZSBhIG1lbnRhbCBub3RlIHRvIHNjcnV0aW5pemUgdGhlaXIgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODY1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6NTM6NTcuMTY5MjMzODNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzNDY1MTgyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5ldmVfY29uZmlndXJlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2dlbmV2ZS5jPTE5NzM9c3RhdGljIGJvb2wgZ2VuZXZlX2RzdF9hZGRyX2VxdWFsKHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqYSxcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE5ODEtXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MTk4MjpzdGF0aWMgaW50IGdlbmV2ZV9jb25maWd1cmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE5ODMtXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTIzNjM9c3RhdGljIGludCBnZW5ldmVfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjM4NS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoyMzg2OlxcdGVyciA9IGdlbmV2ZV9jb25maWd1cmUobGlua19uZXQsIGRldiwgZXh0YWNrLCBcXHUwMDI2Y2ZnKTtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yMzg3LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYz0yNTkwPXN0cnVjdCBuZXRfZGV2aWNlICpnZW5ldmVfZGV2X2NyZWF0ZV9mYihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNjEzLVxcdGluaXRfdG5sX2luZm8oXFx1MDAyNmNmZy5pbmZvLCBkc3RfcG9ydCk7XFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjYxNDpcXHRlcnIgPSBnZW5ldmVfY29uZmlndXJlKG5ldCwgZGV2LCBOVUxMLCBcXHUwMDI2Y2ZnKTtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNjE1LVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6NTQ6MDEuNzAzODkwNzAyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU3NDE1NjY2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBGb2N1cyBTeW1ib2xzIGluIEdlbmV2ZSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHRoaW5raW5nIGFib3V0IHRoaXMgYGdlbmV2ZV9jb25maWd1cmVgIGlzIGEgc29saWQsIGNsZWFuIHN5bWJvbCB0byBzdGFydCB3aXRoLiBJdCBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGUgY29yZSBmdW5jdGlvbjogc2V0dGluZyB1cCBhbmQgbWFuYWdpbmcgdGhlIEdlbmV2ZSBjb25maWd1cmF0aW9uLiBJdOKAmXMgY29uY2lzZSBhbmQgY29udmV5cyB0aGUgYXBwcm9wcmlhdGUgbGV2ZWwgb2YgYWJzdHJhY3Rpb24uIE1vdmluZyBvbiB0byBgZ2VuZXZlX2ZpbGxfaW5mb2AgZmVlbHMgbGlrZSBhIG5hdHVyYWwgcHJvZ3Jlc3Npb24uIEl0IGRvdmV0YWlscyBwZXJmZWN0bHkgYXMgYSBjb21wYW5pb247IHRoZSBpbXBsaWNhdGlvbiBiZWluZyB0aGUgYWN0IG9mICpwb3B1bGF0aW5nKiBvciAqY29tcGxldGluZyogdGhlIG5lY2Vzc2FyeSBkZXRhaWxzIGZvciB0aGF0IGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgZ29vZDsgdGhlIHN5bWJvbHMgd29yayBpbiB0YW5kZW0gdG8gY3JlYXRlIGEgY2xlYXIgcHJvZ3Jlc3Npb24gZnJvbSBjb25maWd1cmF0aW9uIHRvIGluc3RhbnRpYXRpb24uIEl0IGhlbHBzIHRvIGRlbGluZWF0ZSB0aGUgZnVuY3Rpb25hbCBhcmVhcyBjbGVhcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQyNiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjU0OjA0LjI3ODA1MTUzMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4MjU2NTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5ldmVfZmlsbF9pbmZvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2dlbmV2ZS5jPTI0NDQ9c3RhdGljIHNpemVfdCBnZW5ldmVfZ2V0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTI0NjQtXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjQ2NTpzdGF0aWMgaW50IGdlbmV2ZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNDY2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTI1NzY9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGdlbmV2ZV9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjU4Ni1cXHQuZ2V0X3NpemVcXHQ9IGdlbmV2ZV9nZXRfc2l6ZSxcXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoyNTg3OlxcdC5maWxsX2luZm9cXHQ9IGdlbmV2ZV9maWxsX2luZm8sXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjU4OC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzo1NDowOS4xNjA2MjMyNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzc3NTIyMDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmFjdG9yaW5nIHRoZSBHRU5FVkUgRHJpdmVyJ3MgQ29uZmlndXJhdGlvbiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgdGhlIEdFTkVWRSBkcml2ZXIgbWFuYWdlcyBpdHMgY29uZmlndXJhdGlvbiBkYXRhLCBzcGVjaWZpY2FsbHkgdGhlIGBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZ2AuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBkaXRjaGluZyB0aGUgb2xkIHN5bmNocm9ub3VzIGBnZW5ldmVfcXVpZXNjZWAvYGdlbmV2ZV91bnF1aWVzY2VgIG1ldGhvZCwgd2hpY2ggaXMgZ29vZC4gVGhhdCBgc3luY2hyb25pemVfbmV0KClgIGNhbGwgd2FzIHByb2JhYmx5IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgYW5kIHRoZSBSQ1UtYmFzZWQgcG9pbnRlciBzd2FwIHRoZXkncmUgdXNpbmcgc2hvdWxkIGJlIGEgYmlnIGltcHJvdmVtZW50LCBhbGxvd2luZyBsb2NrbGVzcyBhY2Nlc3MgaW4gdGhlIGRhdGEgcGF0aC5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIG1lYW5zIHRoZSBjb250cm9sIHBhdGggaXMgdW5kZXJnb2luZyBhIHRyYW5zZm9ybWF0aW9uLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBSQ1UgZm9yIG1hbmFnaW5nIHRoYXQgYHN0cnVjdCBnZW5ldmVfY29uZmlnYC4gU28sIEkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhlIG5ldGxpbmsgY29udHJvbCBwYXRoIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhvc2UgZnVuY3Rpb25zIHRoYXQgZGVhbCB3aXRoIGFsbG9jYXRpbmcsIHVwZGF0aW5nLCBhbmQgZnJlZWluZyB0aGUgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgcGF5IGV4dHJhIGF0dGVudGlvbiB0byBgZ2VuZXZlX2NoYW5nZWxpbmtgLCBgZ2VuZXZlX2NvbmZpZ3VyZWAsIGBnZW5ldmVfZmlsbF9pbmZvYCwgYGdlbmV2ZV9jb25maWdfYWxsb2NgLCBhbmQgYGdlbmV2ZV9mcmVlX2RldmAgLS0gdGhvc2Ugc2VlbSBsaWtlIHRoZSBrZXkgYXJlYXMgYWZmZWN0ZWQgYnkgdGhpcyBSQ1UgaW1wbGVtZW50YXRpb24uIFRoaXMgd2lsbCBiZSBjcml0aWNhbCBmb3IgY29uY3VycmVudCBhY2Nlc3MgYW5kIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy5cblxuVGhlIGBHRU5FVkVgIGNvbmZpZyBzZWVtcyB0byBiZSB0aGUgdHJpZ2dlciwgc28ga2VlcCBhbiBleWUgb3V0IGZvciB0aGF0IGJlaW5nIGVuYWJsZWQuIEdpdmVuIHRoaXMgUkNVIGltcGxlbWVudGF0aW9uLCB0aGVyZSBtaWdodCBiZSBzb21lIGludGVyZXN0aW5nIHJhY2UgY29uZGl0aW9ucyB0byBleHBsb2l0IGR1cmluZyBjb25maWd1cmF0aW9uIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODU2LCJPdXRwdXRUb2tlbnMiOjE2MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzo1NDoxNC45MzgxNDc4OTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTc3MjExNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkdFTkVWRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbmV2ZV9jaGFuZ2VsaW5rXCIsXG4gICAgXCJnZW5ldmVfY29uZmlndXJlXCIsXG4gICAgXCJnZW5ldmVfZmlsbF9pbmZvXCIsXG4gICAgXCJnZW5ldmVfY29uZmlnX2FsbG9jXCIsXG4gICAgXCJnZW5ldmVfZnJlZV9kZXZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEdFTkVWRSBkcml2ZXIgdG8gdXNlIFJDVSBmb3IgaXRzIGNvbmZpZ3VyYXRpb24gKGBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZ2ApLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIHN5bmNocm9ub3VzIGBnZW5ldmVfcXVpZXNjZWAvYGdlbmV2ZV91bnF1aWVzY2VgIG1lY2hhbmlzbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBob3cgY29uZmlndXJhdGlvbiB1cGRhdGVzIGFyZSBoYW5kbGVkIGNvbmN1cnJlbnRseSB3aXRoIHRoZSBkYXRhIHBhdGguIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIGNvbnRyb2wgcGF0aCBmdW5jdGlvbnMgdGhhdCBhbGxvY2F0ZSwgdXBkYXRlLCBhbmQgZnJlZSB0aGUgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJHRU5FVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5ldmVfY2hhbmdlbGlua1wiLFxuICAgIFwiZ2VuZXZlX2NvbmZpZ3VyZVwiLFxuICAgIFwiZ2VuZXZlX2ZpbGxfaW5mb1wiLFxuICAgIFwiZ2VuZXZlX2NvbmZpZ19hbGxvY1wiLFxuICAgIFwiZ2VuZXZlX2ZyZWVfZGV2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBHRU5FVkUgZHJpdmVyIHRvIHVzZSBSQ1UgZm9yIGl0cyBjb25maWd1cmF0aW9uIChgc3RydWN0IGdlbmV2ZV9jb25maWdgKSwgcmVwbGFjaW5nIHRoZSBwcmV2aW91cyBzeW5jaHJvbm91cyBgZ2VuZXZlX3F1aWVzY2VgL2BnZW5ldmVfdW5xdWllc2NlYCBtZWNoYW5pc20uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgaG93IGNvbmZpZ3VyYXRpb24gdXBkYXRlcyBhcmUgaGFuZGxlZCBjb25jdXJyZW50bHkgd2l0aCB0aGUgZGF0YSBwYXRoLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBjb250cm9sIHBhdGggZnVuY3Rpb25zIHRoYXQgYWxsb2NhdGUsIHVwZGF0ZSwgYW5kIGZyZWUgdGhlIGNvbmZpZ3VyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow58rbr[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-07 23:30:24 +0000 UTC FinishedAt: 2026-07-07 23:54:16 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "4a13f31a92f35161b499bf29638336885259da78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GENEVE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git", "commit_hash": "4a13f31a92f35161b499bf29638336885259da78", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "GENEVE" ], "series_id": "6ea35341-11eb-4020-aa27-3b79bf21b9af" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "geneve_changelink", "geneve_configure", "geneve_fill_info", "geneve_config_alloc", "geneve_free_dev" ], "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+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjUzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dFTkVWRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbmV2ZV9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2dlbmV2ZV9jb25maWd1cmUmIzM0OywKICAgICYjMzQ7Z2VuZXZlX2ZpbGxfaW5mbyYjMzQ7LAogICAgJiMzNDtnZW5ldmVfY29uZmlnX2FsbG9jJiMzNDssCiAgICAmIzM0O2dlbmV2ZV9mcmVlX2RldiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEdFTkVWRSBkcml2ZXIgdG8gdXNlIFJDVSBmb3IgaXRzIGNvbmZpZ3VyYXRpb24gKGBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZ2ApLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIHN5bmNocm9ub3VzIGBnZW5ldmVfcXVpZXNjZWAvYGdlbmV2ZV91bnF1aWVzY2VgIG1lY2hhbmlzbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBob3cgY29uZmlndXJhdGlvbiB1cGRhdGVzIGFyZSBoYW5kbGVkIGNvbmN1cnJlbnRseSB3aXRoIHRoZSBkYXRhIHBhdGguIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIGNvbnRyb2wgcGF0aCBmdW5jdGlvbnMgdGhhdCBhbGxvY2F0ZSwgdXBkYXRlLCBhbmQgZnJlZSB0aGUgY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzo1MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDNhMWQwOTQxZGJjOTBkNjM5YTkyMmNhZDYwMjE1YjkzNzc1Yjk1NGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDIzOjUzOjI5IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dlbmV2ZS5jIGIvZHJpdmVycy9uZXQvZ2VuZXZlLmNcbmluZGV4IDM5NmUxYTExM2NkNDllLi4xN2JkMzU0M2Q1ODdhOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2dlbmV2ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9nZW5ldmUuY1xuQEAgLTgyLDYgJiM0Mzs4Miw3IEBAIHN0cnVjdCBnZW5ldmVfY29uZmlnIHtcbiBcdHUxNlx0XHRcdHBvcnRfbWluO1xuIFx0dTE2XHRcdFx0cG9ydF9tYXg7XG4gXG4mIzQzO1x0c3RydWN0IHJjdV9oZWFkXHRcdHJjdTtcbiBcdC8qIE11c3QgYmUgbGFzdCAtLWVuZHMgaW4gYSBmbGV4aWJsZS1hcnJheSBtZW1iZXIuICovXG4gXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm9cdGluZm87XG4gfTtcbkBAIC0xMDAsNyAmIzQzOzEwMSw3IEBAIHN0cnVjdCBnZW5ldmVfZGV2IHtcbiAjZW5kaWZcbiBcdHN0cnVjdCBsaXN0X2hlYWQgICBuZXh0O1x0LyogZ2VuZXZlJiMzOTtzIHBlciBuYW1lc3BhY2UgbGlzdCAqL1xuIFx0c3RydWN0IGdyb19jZWxscyAgIGdyb19jZWxscztcbi1cdHN0cnVjdCBnZW5ldmVfY29uZmlnIGNmZztcbiYjNDM7XHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyBfX3JjdSAqY2ZnO1xuIH07XG4gXG4gc3RydWN0IGdlbmV2ZV9zb2NrIHtcbkBAIC0xODIsOCAmIzQzOzE4MywxMCBAQCBzdGF0aWMgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZV9sb29rdXAoc3RydWN0IGdlbmV2ZV9zb2NrICpncyxcbiBcdGhhc2ggPSBnZW5ldmVfbmV0X3ZuaV9oYXNoKHZuaSk7XG4gXHR2bmlfbGlzdF9oZWFkID0gXHUwMDI2Z3MtXHUwMDNldm5pX2xpc3RbaGFzaF07XG4gXHRobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uobm9kZSwgdm5pX2xpc3RfaGVhZCwgaGxpc3QpIHtcbi1cdFx0aWYgKGVxX3R1bl9pZF9hbmRfdm5pKCh1OCAqKVx1MDAyNm5vZGUtXHUwMDNlZ2VuZXZlLVx1MDAzZWNmZy5pbmZvLmtleS50dW5faWQsIHZuaSkgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICBhZGRyID09IG5vZGUtXHUwMDNlZ2VuZXZlLVx1MDAzZWNmZy5pbmZvLmtleS51LmlwdjQuZHN0KVxuJiM0MztcdFx0Y29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyA9IHJjdV9kZXJlZmVyZW5jZShub2RlLVx1MDAzZWdlbmV2ZS1cdTAwM2VjZmcpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChlcV90dW5faWRfYW5kX3ZuaSgodTggKilcdTAwMjZjZmctXHUwMDNlaW5mby5rZXkudHVuX2lkLCB2bmkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGFkZHIgPT0gY2ZnLVx1MDAzZWluZm8ua2V5LnUuaXB2NC5kc3QpXG4gXHRcdFx0cmV0dXJuIG5vZGUtXHUwMDNlZ2VuZXZlO1xuIFx0fVxuIFx0cmV0dXJuIE5VTEw7XG5AQCAtMjAxLDggJiM0MzsyMDQsMTAgQEAgc3RhdGljIHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmU2X2xvb2t1cChzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzLFxuIFx0aGFzaCA9IGdlbmV2ZV9uZXRfdm5pX2hhc2godm5pKTtcbiBcdHZuaV9saXN0X2hlYWQgPSBcdTAwMjZncy1cdTAwM2V2bmlfbGlzdFtoYXNoXTtcbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCB2bmlfbGlzdF9oZWFkLCBobGlzdCkge1xuLVx0XHRpZiAoZXFfdHVuX2lkX2FuZF92bmkoKHU4ICopXHUwMDI2bm9kZS1cdTAwM2VnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnR1bl9pZCwgdm5pKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGlwdjZfYWRkcl9lcXVhbChcdTAwMjZhZGRyNiwgXHUwMDI2bm9kZS1cdTAwM2VnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnUuaXB2Ni5kc3QpKVxuJiM0MztcdFx0Y29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyA9IHJjdV9kZXJlZmVyZW5jZShub2RlLVx1MDAzZWdlbmV2ZS1cdTAwM2VjZmcpO1xuJiM0MztcbiYjNDM7XHRcdGlmIChlcV90dW5faWRfYW5kX3ZuaSgodTggKilcdTAwMjZjZmctXHUwMDNlaW5mby5rZXkudHVuX2lkLCB2bmkpIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGlwdjZfYWRkcl9lcXVhbChcdTAwMjZhZGRyNiwgXHUwMDI2Y2ZnLVx1MDAzZWluZm8ua2V5LnUuaXB2Ni5kc3QpKVxuIFx0XHRcdHJldHVybiBub2RlLVx1MDAzZWdlbmV2ZTtcbiBcdH1cbiBcdHJldHVybiBOVUxMO1xuQEAgLTM4NiwxMSAmIzQzOzM5MSw2IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGlmIChlcnIpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4tXHRlcnIgPSBkc3RfY2FjaGVfaW5pdChcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLmluZm8uZHN0X2NhY2hlLCBHRlBfS0VSTkVMKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0Z3JvX2NlbGxzX2Rlc3Ryb3koXHUwMDI2Z2VuZXZlLVx1MDAzZWdyb19jZWxscyk7XG4tXHRcdHJldHVybiBlcnI7XG4tXHR9XG4gXHRuZXRkZXZfbG9ja2RlcF9zZXRfY2xhc3NlcyhkZXYpO1xuIFx0cmV0dXJuIDA7XG4gfVxuQEAgLTM5OSw3ICYjNDM7Mzk5LDYgQEAgc3RhdGljIHZvaWQgZ2VuZXZlX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuLVx0ZHN0X2NhY2hlX2Rlc3Ryb3koXHUwMDI2Z2VuZXZlLVx1MDAzZWNmZy5pbmZvLmRzdF9jYWNoZSk7XG4gXHRncm9fY2VsbHNfZGVzdHJveShcdTAwMjZnZW5ldmUtXHUwMDNlZ3JvX2NlbGxzKTtcbiB9XG4gXG5AQCAtNjUwLDYgJiM0Mzs2NDksNyBAQCBzdGF0aWMgaW50IGdlbmV2ZV9wb3N0X2RlY2FwX2hpbnQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIC8qIENhbGxiYWNrIGZyb20gbmV0L2lwdjQvdWRwLmMgdG8gcmVjZWl2ZSBwYWNrZXRzICovXG4gc3RhdGljIGludCBnZW5ldmVfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIHtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnO1xuIFx0c3RydWN0IGdlbmV2ZWhkciAqZ2VuZXZlaDtcbiBcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmU7XG4gXHRzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzO1xuQEAgLTY3NSw4ICYjNDM7Njc1LDkgQEAgc3RhdGljIGludCBnZW5ldmVfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0aW5uZXJfcHJvdG8gPSBnZW5ldmVoLVx1MDAzZXByb3RvX3R5cGU7XG4gXG4tXHRpZiAodW5saWtlbHkoKCFnZW5ldmUtXHUwMDNlY2ZnLmlubmVyX3Byb3RvX2luaGVyaXQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgIGlubmVyX3Byb3RvICE9IGh0b25zKEVUSF9QX1RFQikpKSkge1xuJiM0MztcdGNmZyA9IHJjdV9kZXJlZmVyZW5jZShnZW5ldmUtXHUwMDNlY2ZnKTtcbiYjNDM7XHRpZiAodW5saWtlbHkoIWNmZyB8fCAoIWNmZy1cdTAwM2Vpbm5lcl9wcm90b19pbmhlcml0IFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgICBpbm5lcl9wcm90byAhPSBodG9ucyhFVEhfUF9URUIpKSkpIHtcbiBcdFx0ZGV2X2RzdGF0c19yeF9kcm9wcGVkKGdlbmV2ZS1cdTAwM2VkZXYpO1xuIFx0XHRnb3RvIGRyb3A7XG4gXHR9XG5AQCAtNzYyLDkgJiM0Mzs3NjMsMTAgQEAgc3RhdGljIGludCBnZW5ldmVfdWRwX2VuY2FwX2Vycl9sb29rdXAoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHNvY2sgKmdlbmV2ZV9jcmVhdGVfc29jayhzdHJ1Y3QgbmV0ICpuZXQsXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuJiM0MztcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLCBib29sIGlwdjYpXG4ge1xuLVx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gXHUwMDI2Z2VuZXZlLVx1MDAzZWNmZy5pbmZvO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9IFx1MDAyNmNmZy1cdTAwM2VpbmZvO1xuIFx0c3RydWN0IHVkcF9wb3J0X2NmZyB1ZHBfY29uZjtcbiBcdHN0cnVjdCBzb2NrZXQgKnNvY2s7XG4gXHRpbnQgZXJyO1xuQEAgLTc3NSw3ICYjNDM7Nzc3LDcgQEAgc3RhdGljIHN0cnVjdCBzb2NrICpnZW5ldmVfY3JlYXRlX3NvY2soc3RydWN0IG5ldCAqbmV0LFxuIFx0aWYgKGlwdjYpIHtcbiBcdFx0dWRwX2NvbmYuZmFtaWx5ID0gQUZfSU5FVDY7XG4gXHRcdHVkcF9jb25mLmlwdjZfdjZvbmx5ID0gMTtcbi1cdFx0dWRwX2NvbmYudXNlX3VkcDZfcnhfY2hlY2tzdW1zID0gZ2VuZXZlLVx1MDAzZWNmZy51c2VfdWRwNl9yeF9jaGVja3N1bXM7XG4mIzQzO1x0XHR1ZHBfY29uZi51c2VfdWRwNl9yeF9jaGVja3N1bXMgPSBjZmctXHUwMDNldXNlX3VkcDZfcnhfY2hlY2tzdW1zO1xuIFx0XHR1ZHBfY29uZi5sb2NhbF9pcDYgPSBpbmZvLVx1MDAzZWtleS51LmlwdjYuc3JjO1xuIFx0fSBlbHNlXG4gI2VuZGlmXG5AQCAtOTkxLDcgJiM0Mzs5OTMsOCBAQCBzdGF0aWMgaW50IGdlbmV2ZV9ncm9fY29tcGxldGUoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFxuIC8qIENyZWF0ZSBuZXcgbGlzdGVuIHNvY2tldCBpZiBuZWVkZWQgKi9cbiBzdGF0aWMgc3RydWN0IGdlbmV2ZV9zb2NrICpnZW5ldmVfc29ja2V0X2NyZWF0ZShzdHJ1Y3QgbmV0ICpuZXQsXG4tXHRcdFx0XHRcdFx0c3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxuJiM0MztcdFx0XHRcdFx0XHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuJiM0MztcdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLCBib29sIGlwdjYpXG4ge1xuIFx0c3RydWN0IGdlbmV2ZV9uZXQgKmduID0gbmV0X2dlbmVyaWMobmV0LCBnZW5ldmVfbmV0X2lkKTtcbiBcdHN0cnVjdCB1ZHBfdHVubmVsX3NvY2tfY2ZnIHR1bm5lbF9jZmc7XG5AQCAtMTAwMyw3ICYjNDM7MTAwNiw3IEBAIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdlbmV2ZV9zb2NrZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbiBcdGlmICghZ3MpXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFxuLVx0c2sgPSBnZW5ldmVfY3JlYXRlX3NvY2sobmV0LCBnZW5ldmUsIGlwdjYpO1xuJiM0MztcdHNrID0gZ2VuZXZlX2NyZWF0ZV9zb2NrKG5ldCwgZ2VuZXZlLCBjZmcsIGlwdjYpO1xuIFx0aWYgKElTX0VSUihzaykpIHtcbiBcdFx0a2ZyZWUoZ3MpO1xuIFx0XHRyZXR1cm4gRVJSX0NBU1Qoc2spO1xuQEAgLTEwNjAsMTIgJiM0MzsxMDYzLDEzIEBAIHN0YXRpYyB2b2lkIGdlbmV2ZV9zb2NrX3JlbGVhc2Uoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSlcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBnZW5ldmVfc29jayAqZ2VuZXZlX2ZpbmRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBib29sIGlwdjYpXG4mIzQzO1x0XHRcdFx0XHQgICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSxcbiYjNDM7XHRcdFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLCBib29sIGlwdjYpXG4ge1xuIFx0c3RydWN0IGdlbmV2ZV9uZXQgKmduID0gbmV0X2dlbmVyaWMobmV0LCBnZW5ldmVfbmV0X2lkKTtcbi1cdHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9IFx1MDAyNmdlbmV2ZS1cdTAwM2VjZmcuaW5mbztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBcdTAwMjZjZmctXHUwMDNlaW5mbztcbiBcdHNhX2ZhbWlseV90IGZhbWlseSA9IGlwdjYgPyBBRl9JTkVUNiA6IEFGX0lORVQ7XG4tXHRib29sIGdyb19oaW50ID0gZ2VuZXZlLVx1MDAzZWNmZy5ncm9faGludDtcbiYjNDM7XHRib29sIGdyb19oaW50ID0gY2ZnLVx1MDAzZWdyb19oaW50O1xuIFx0X19iZTE2IGRzdF9wb3J0ID0gaW5mby1cdTAwM2VrZXkudHBfZHN0O1xuIFx0c3RydWN0IGdlbmV2ZV9zb2NrICpncztcbiBcbkBAIC0xMDk1LDcgJiM0MzsxMDk5LDggQEAgc3RhdGljIHN0cnVjdCBnZW5ldmVfc29jayAqZ2VuZXZlX2ZpbmRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4tc3RhdGljIGludCBnZW5ldmVfc29ja19hZGQoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxuJiM0MztzdGF0aWMgaW50IGdlbmV2ZV9zb2NrX2FkZChzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuJiM0MztcdFx0XHQgICBjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLCBib29sIGlwdjYpXG4ge1xuIFx0c3RydWN0IG5ldCAqbmV0ID0gZ2VuZXZlLVx1MDAzZW5ldDtcbiBcdHN0cnVjdCBnZW5ldmVfZGV2X25vZGUgKm5vZGU7XG5AQCAtMTEwMywxOSAmIzQzOzExMDgsMTkgQEAgc3RhdGljIGludCBnZW5ldmVfc29ja19hZGQoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxuIFx0X191OCB2bmlbM107XG4gXHRfX3UzMiBoYXNoO1xuIFxuLVx0Z3MgPSBnZW5ldmVfZmluZF9zb2NrKG5ldCwgZ2VuZXZlLCBpcHY2KTtcbiYjNDM7XHRncyA9IGdlbmV2ZV9maW5kX3NvY2sobmV0LCBnZW5ldmUsIGNmZywgaXB2Nik7XG4gXHRpZiAoZ3MpIHtcbiBcdFx0Z3MtXHUwMDNlcmVmY250JiM0MzsmIzQzOztcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4tXHRncyA9IGdlbmV2ZV9zb2NrZXRfY3JlYXRlKG5ldCwgZ2VuZXZlLCBpcHY2KTtcbiYjNDM7XHRncyA9IGdlbmV2ZV9zb2NrZXRfY3JlYXRlKG5ldCwgZ2VuZXZlLCBjZmcsIGlwdjYpO1xuIFx0aWYgKElTX0VSUihncykpXG4gXHRcdHJldHVybiBQVFJfRVJSKGdzKTtcbiBcbiBvdXQ6XG4tXHRncy1cdTAwM2Vjb2xsZWN0X21kID0gZ2VuZXZlLVx1MDAzZWNmZy5jb2xsZWN0X21kO1xuLVx0Z3MtXHUwMDNlZ3JvX2hpbnQgPSBnZW5ldmUtXHUwMDNlY2ZnLmdyb19oaW50O1xuJiM0MztcdGdzLVx1MDAzZWNvbGxlY3RfbWQgPSBjZmctXHUwMDNlY29sbGVjdF9tZDtcbiYjNDM7XHRncy1cdTAwM2Vncm9faGludCA9IGNmZy1cdTAwM2Vncm9faGludDtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiBcdGlmIChpcHY2KSB7XG4gXHRcdHJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtXHUwMDNlc29jazYsIGdzKTtcbkBAIC0xMTI4LDcgJiM0MzsxMTMzLDcgQEAgc3RhdGljIGludCBnZW5ldmVfc29ja19hZGQoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxuIFx0fVxuIFx0bm9kZS1cdTAwM2VnZW5ldmUgPSBnZW5ldmU7XG4gXG4tXHR0dW5uZWxfaWRfdG9fdm5pKGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudHVuX2lkLCB2bmkpO1xuJiM0MztcdHR1bm5lbF9pZF90b192bmkoY2ZnLVx1MDAzZWluZm8ua2V5LnR1bl9pZCwgdm5pKTtcbiBcdGhhc2ggPSBnZW5ldmVfbmV0X3ZuaV9oYXNoKHZuaSk7XG4gXHRobGlzdF9hZGRfaGVhZF9yY3UoXHUwMDI2bm9kZS1cdTAwM2VobGlzdCwgXHUwMDI2Z3MtXHUwMDNldm5pX2xpc3RbaGFzaF0pO1xuIFx0cmV0dXJuIDA7XG5AQCAtMTEzNywyMSAmIzQzOzExNDIsMjMgQEAgc3RhdGljIGludCBnZW5ldmVfc29ja19hZGQoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxuIHN0YXRpYyBpbnQgZ2VuZXZlX29wZW4oc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdGJvb2wgZHVhbHN0YWNrID0gZ2VuZXZlLVx1MDAzZWNmZy5kdWFsc3RhY2s7XG4tXHRib29sIGlwdjQsIGlwdjY7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZztcbiYjNDM7XHRib29sIGlwdjQsIGlwdjYsIGR1YWxzdGFjaztcbiBcdGludCByZXQgPSAwO1xuIFxuLVx0aXB2NiA9IGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5tb2RlIFx1MDAyNiBJUF9UVU5ORUxfSU5GT19JUFY2IHx8IGR1YWxzdGFjaztcbiYjNDM7XHRjZmcgPSBydG5sX2RlcmVmZXJlbmNlKGdlbmV2ZS1cdTAwM2VjZmcpO1xuJiM0MztcdGR1YWxzdGFjayA9IGNmZy1cdTAwM2VkdWFsc3RhY2s7XG4mIzQzO1x0aXB2NiA9IGNmZy1cdTAwM2VpbmZvLm1vZGUgXHUwMDI2IElQX1RVTk5FTF9JTkZPX0lQVjYgfHwgZHVhbHN0YWNrO1xuIFx0aXB2NCA9ICFpcHY2IHx8IGR1YWxzdGFjaztcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiBcdGlmIChpcHY2KSB7XG4tXHRcdHJldCA9IGdlbmV2ZV9zb2NrX2FkZChnZW5ldmUsIHRydWUpO1xuJiM0MztcdFx0cmV0ID0gZ2VuZXZlX3NvY2tfYWRkKGdlbmV2ZSwgY2ZnLCB0cnVlKTtcbiBcdFx0aWYgKHJldCBcdTAwM2MgMCBcdTAwMjZcdTAwMjYgcmV0ICE9IC1FQUZOT1NVUFBPUlQpXG4gXHRcdFx0aXB2NCA9IGZhbHNlO1xuIFx0fVxuICNlbmRpZlxuIFx0aWYgKGlwdjQpXG4tXHRcdHJldCA9IGdlbmV2ZV9zb2NrX2FkZChnZW5ldmUsIGZhbHNlKTtcbiYjNDM7XHRcdHJldCA9IGdlbmV2ZV9zb2NrX2FkZChnZW5ldmUsIGNmZywgZmFsc2UpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z2VuZXZlX3NvY2tfcmVsZWFzZShnZW5ldmUpO1xuIFxuQEAgLTExODksNiAmIzQzOzExOTYsNyBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfYnVpbGRfaGVhZGVyKHN0cnVjdCBnZW5ldmVoZHIgKmdlbmV2ZWgsXG4gfVxuIFxuIHN0YXRpYyBpbnQgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChjb25zdCBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuJiM0MztcdFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyxcbiBcdFx0XHRcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3QgZ2VuZXZlX3NrYl9jYiAqY2IgPSBHRU5FVkVfU0tCX0NCKHNrYik7XG5AQCAtMTIwMSw3ICYjNDM7MTIwOSw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChjb25zdCBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuIFx0Y2ItXHUwMDNlZ3JvX2hpbnRfbGVuID0gMDtcbiBcbiBcdC8qIFRyeSB0byBhZGQgdGhlIEdSTyBoaW50IG9ubHkgaW4gY2FzZSBvZiBkb3VibGUgZW5jYXAuICovXG4tXHRpZiAoIWdlbmV2ZS1cdTAwM2VjZmcuZ3JvX2hpbnQgfHwgIXNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKVxuJiM0MztcdGlmICghY2ZnLVx1MDAzZWdyb19oaW50IHx8ICFza2ItXHUwMDNlZW5jYXBzdWxhdGlvbilcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKlxuQEAgLTEyNjIsMTAgJiM0MzsxMjcwLDExIEBAIHN0YXRpYyB2b2lkIGdlbmV2ZV9wdXRfZ3JvX2hpbnRfb3B0KHN0cnVjdCBnZW5ldmVoZHIgKmdudmgsIGludCBvcHRfc2l6ZSxcbiBcbiBzdGF0aWMgaW50IGdlbmV2ZV9idWlsZF9za2Ioc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxuIFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXG4tXHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsIGludCBpcF9oZHJfbGVuKVxuJiM0MztcdFx0XHQgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSxcbiYjNDM7XHRcdFx0ICAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsIGludCBpcF9oZHJfbGVuKVxuIHtcbiBcdGJvb2wgdWRwX3N1bSA9IHRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwgaW5mby1cdTAwM2VrZXkudHVuX2ZsYWdzKTtcbi1cdGJvb2wgaW5uZXJfcHJvdG9faW5oZXJpdCA9IGdlbmV2ZS1cdTAwM2VjZmcuaW5uZXJfcHJvdG9faW5oZXJpdDtcbiYjNDM7XHRib29sIGlubmVyX3Byb3RvX2luaGVyaXQgPSBjZmctXHUwMDNlaW5uZXJfcHJvdG9faW5oZXJpdDtcbiBcdGJvb2wgeG5ldCA9ICFuZXRfZXEoZ2VuZXZlLVx1MDAzZW5ldCwgZGV2X25ldChnZW5ldmUtXHUwMDNlZGV2KSk7XG4gXHRzdHJ1Y3QgZ2VuZXZlX3NrYl9jYiAqY2IgPSBHRU5FVkVfU0tCX0NCKHNrYik7XG4gXHRzdHJ1Y3QgZ2VuZXZlaGRyICpnbnZoO1xuQEAgLTEzMDYsMTQgJiM0MzsxMzE1LDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2J1aWxkX3NrYihzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHN0cnVjdCBza19idWZmICpza2IsXG4gfVxuIFxuIHN0YXRpYyB1OCBnZW5ldmVfZ2V0X2RzZmllbGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiYjNDM7XHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLFxuIFx0XHRcdCAgICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxuIFx0XHRcdCAgICAgYm9vbCAqdXNlX2NhY2hlKVxuIHtcbi1cdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0dTggZHNmaWVsZDtcbiBcbiBcdGRzZmllbGQgPSBpbmZvLVx1MDAzZWtleS50b3M7XG4tXHRpZiAoZHNmaWVsZCA9PSAxIFx1MDAyNlx1MDAyNiAhZ2VuZXZlLVx1MDAzZWNmZy5jb2xsZWN0X21kKSB7XG4mIzQzO1x0aWYgKGNmZyBcdTAwMjZcdTAwMjYgZHNmaWVsZCA9PSAxIFx1MDAyNlx1MDAyNiAhY2ZnLVx1MDAzZWNvbGxlY3RfbWQpIHtcbiBcdFx0ZHNmaWVsZCA9IGlwX3R1bm5lbF9nZXRfZHNmaWVsZChpcF9oZHIoc2tiKSwgc2tiKTtcbiBcdFx0KnVzZV9jYWNoZSA9IGZhbHNlO1xuIFx0fVxuQEAgLTEzMjMsNiAmIzQzOzEzMzIsNyBAQCBzdGF0aWMgdTggZ2VuZXZlX2dldF9kc2ZpZWxkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gc3RhdGljIGludCBnZW5ldmVfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHQgICBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuJiM0MztcdFx0XHQgICBjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLFxuIFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcbiB7XG4gXHRzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzNCA9IHJjdV9kZXJlZmVyZW5jZShnZW5ldmUtXHUwMDNlc29jazQpO1xuQEAgLTEzMzUsMzUgJiM0MzsxMzQ1LDM1IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRfX2JlMTYgc3BvcnQ7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKHNrYl92bGFuX2luZXRfcHJlcGFyZShza2IsIGdlbmV2ZS1cdTAwM2VjZmcuaW5uZXJfcHJvdG9faW5oZXJpdCkpXG4mIzQzO1x0aWYgKHNrYl92bGFuX2luZXRfcHJlcGFyZShza2IsIGNmZy1cdTAwM2Vpbm5lcl9wcm90b19pbmhlcml0KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIWdzNClcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHR1c2VfY2FjaGUgPSBpcF90dW5uZWxfZHN0X2NhY2hlX3VzYWJsZShza2IsIGluZm8pO1xuLVx0dG9zID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBpbmZvLCBcdTAwMjZ1c2VfY2FjaGUpO1xuJiM0MztcdHRvcyA9IGdlbmV2ZV9nZXRfZHNmaWVsZChza2IsIGRldiwgY2ZnLCBpbmZvLCBcdTAwMjZ1c2VfY2FjaGUpO1xuIFx0c3BvcnQgPSB1ZHBfZmxvd19zcmNfcG9ydChnZW5ldmUtXHUwMDNlbmV0LCBza2IsXG4tXHRcdFx0XHQgIGdlbmV2ZS1cdTAwM2VjZmcucG9ydF9taW4sXG4tXHRcdFx0XHQgIGdlbmV2ZS1cdTAwM2VjZmcucG9ydF9tYXgsIHRydWUpO1xuJiM0MztcdFx0XHRcdCAgY2ZnLVx1MDAzZXBvcnRfbWluLFxuJiM0MztcdFx0XHRcdCAgY2ZnLVx1MDAzZXBvcnRfbWF4LCB0cnVlKTtcbiBcbiBcdHJ0ID0gdWRwX3R1bm5lbF9kc3RfbG9va3VwKHNrYiwgZGV2LCBnZW5ldmUtXHUwMDNlbmV0LCAwLCBcdTAwMjZzYWRkcixcbiBcdFx0XHRcdCAgIFx1MDAyNmluZm8tXHUwMDNla2V5LFxuLVx0XHRcdFx0ICAgc3BvcnQsIGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudHBfZHN0LCB0b3MsXG4mIzQzO1x0XHRcdFx0ICAgc3BvcnQsIGNmZy1cdTAwM2VpbmZvLmtleS50cF9kc3QsIHRvcyxcbiBcdFx0XHRcdCAgIHVzZV9jYWNoZSA/XG4gXHRcdFx0XHQgICAoc3RydWN0IGRzdF9jYWNoZSAqKVx1MDAyNmluZm8tXHUwMDNlZHN0X2NhY2hlIDogTlVMTCk7XG4gXHRpZiAoSVNfRVJSKHJ0KSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocnQpO1xuIFxuLVx0aWYgKGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudS5pcHY0LnNyYyBcdTAwMjZcdTAwMjZcbi1cdCAgICBzYWRkciAhPSBnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnUuaXB2NC5zcmMpIHtcbiYjNDM7XHRpZiAoY2ZnLVx1MDAzZWluZm8ua2V5LnUuaXB2NC5zcmMgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNhZGRyICE9IGNmZy1cdTAwM2VpbmZvLmtleS51LmlwdjQuc3JjKSB7XG4gXHRcdGRzdF9yZWxlYXNlKFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4gXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiBcdH1cbiBcbiBcdGVyciA9IHNrYl90dW5uZWxfY2hlY2tfcG10dShza2IsIFx1MDAyNnJ0LVx1MDAzZWRzdCxcbiBcdFx0XHRcdCAgICBHRU5FVkVfSVBWNF9ITEVOICYjNDM7IGluZm8tXHUwMDNlb3B0aW9uc19sZW4gJiM0Mztcbi1cdFx0XHRcdCAgICBnZW5ldmVfYnVpbGRfZ3JvX2hpbnRfb3B0KGdlbmV2ZSwgc2tiKSxcbiYjNDM7XHRcdFx0XHQgICAgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChnZW5ldmUsIGNmZywgc2tiKSxcbiBcdFx0XHRcdCAgICBuZXRpZl9pc19hbnlfYnJpZGdlX3BvcnQoZGV2KSk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdGRzdF9yZWxlYXNlKFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG5AQCAtMTM5NywyMSAmIzQzOzE0MDcsMjEgQEAgc3RhdGljIGludCBnZW5ldmVfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdH1cbiBcbiBcdHRvcyA9IGlwX3R1bm5lbF9lY25fZW5jYXAodG9zLCBpcF9oZHIoc2tiKSwgc2tiKTtcbi1cdGlmIChnZW5ldmUtXHUwMDNlY2ZnLmNvbGxlY3RfbWQpIHtcbiYjNDM7XHRpZiAoY2ZnLVx1MDAzZWNvbGxlY3RfbWQpIHtcbiBcdFx0dHRsID0ga2V5LVx1MDAzZXR0bDtcbiBcbiBcdFx0ZGYgPSB0ZXN0X2JpdChJUF9UVU5ORUxfRE9OVF9GUkFHTUVOVF9CSVQsIGtleS1cdTAwM2V0dW5fZmxhZ3MpID9cbiBcdFx0ICAgICBodG9ucyhJUF9ERikgOiAwO1xuIFx0fSBlbHNlIHtcbi1cdFx0aWYgKGdlbmV2ZS1cdTAwM2VjZmcudHRsX2luaGVyaXQpXG4mIzQzO1x0XHRpZiAoY2ZnLVx1MDAzZXR0bF9pbmhlcml0KVxuIFx0XHRcdHR0bCA9IGlwX3R1bm5lbF9nZXRfdHRsKGlwX2hkcihza2IpLCBza2IpO1xuIFx0XHRlbHNlXG4gXHRcdFx0dHRsID0ga2V5LVx1MDAzZXR0bDtcbiBcdFx0dHRsID0gdHRsID8gOiBpcDRfZHN0X2hvcGxpbWl0KFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4gXG4tXHRcdGlmIChnZW5ldmUtXHUwMDNlY2ZnLmRmID09IEdFTkVWRV9ERl9TRVQpIHtcbiYjNDM7XHRcdGlmIChjZmctXHUwMDNlZGYgPT0gR0VORVZFX0RGX1NFVCkge1xuIFx0XHRcdGRmID0gaHRvbnMoSVBfREYpO1xuLVx0XHR9IGVsc2UgaWYgKGdlbmV2ZS1cdTAwM2VjZmcuZGYgPT0gR0VORVZFX0RGX0lOSEVSSVQpIHtcbiYjNDM7XHRcdH0gZWxzZSBpZiAoY2ZnLVx1MDAzZWRmID09IEdFTkVWRV9ERl9JTkhFUklUKSB7XG4gXHRcdFx0c3RydWN0IGV0aGhkciAqZXRoID0gc2tiX2V0aF9oZHIoc2tiKTtcbiBcbiBcdFx0XHRpZiAobnRvaHMoZXRoLVx1MDAzZWhfcHJvdG8pID09IEVUSF9QX0lQVjYpIHtcbkBAIC0xNDI1LDEzICYjNDM7MTQzNSwxMyBAQCBzdGF0aWMgaW50IGdlbmV2ZV94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRlcnIgPSBnZW5ldmVfYnVpbGRfc2tiKFx1MDAyNnJ0LVx1MDAzZWRzdCwgc2tiLCBpbmZvLCBnZW5ldmUsXG4mIzQzO1x0ZXJyID0gZ2VuZXZlX2J1aWxkX3NrYihcdTAwMjZydC1cdTAwM2Vkc3QsIHNrYiwgaW5mbywgZ2VuZXZlLCBjZmcsXG4gXHRcdFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgaXBoZHIpKTtcbiBcdGlmICh1bmxpa2VseShlcnIpKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0dWRwX3R1bm5lbF94bWl0X3NrYihydCwgZ3M0LVx1MDAzZXNrLCBza2IsIHNhZGRyLCBpbmZvLVx1MDAzZWtleS51LmlwdjQuZHN0LFxuLVx0XHRcdCAgICB0b3MsIHR0bCwgZGYsIHNwb3J0LCBnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnRwX2RzdCxcbiYjNDM7XHRcdFx0ICAgIHRvcywgdHRsLCBkZiwgc3BvcnQsIGNmZy1cdTAwM2VpbmZvLmtleS50cF9kc3QsXG4gXHRcdFx0ICAgICFuZXRfZXEoZ2VuZXZlLVx1MDAzZW5ldCwgZGV2X25ldChnZW5ldmUtXHUwMDNlZGV2KSksXG4gXHRcdFx0ICAgICF0ZXN0X2JpdChJUF9UVU5ORUxfQ1NVTV9CSVQsIGluZm8tXHUwMDNla2V5LnR1bl9mbGFncyksXG4gXHRcdFx0ICAgIDApO1xuQEAgLTE0NDEsNiAmIzQzOzE0NTEsNyBAQCBzdGF0aWMgaW50IGdlbmV2ZV94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIHN0YXRpYyBpbnQgZ2VuZXZlNl94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdCAgICBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuJiM0MztcdFx0XHQgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyxcbiBcdFx0XHQgICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBnZW5ldmVfc29jayAqZ3M2ID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS1cdTAwM2Vzb2NrNik7XG5AQCAtMTQ1MiwzNSAmIzQzOzE0NjMsMzUgQEAgc3RhdGljIGludCBnZW5ldmU2X3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRfX2JlMTYgc3BvcnQ7XG4gXHRpbnQgZXJyO1xuIFxuLVx0aWYgKHNrYl92bGFuX2luZXRfcHJlcGFyZShza2IsIGdlbmV2ZS1cdTAwM2VjZmcuaW5uZXJfcHJvdG9faW5oZXJpdCkpXG4mIzQzO1x0aWYgKHNrYl92bGFuX2luZXRfcHJlcGFyZShza2IsIGNmZy1cdTAwM2Vpbm5lcl9wcm90b19pbmhlcml0KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIWdzNilcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHR1c2VfY2FjaGUgPSBpcF90dW5uZWxfZHN0X2NhY2hlX3VzYWJsZShza2IsIGluZm8pO1xuLVx0cHJpbyA9IGdlbmV2ZV9nZXRfZHNmaWVsZChza2IsIGRldiwgaW5mbywgXHUwMDI2dXNlX2NhY2hlKTtcbiYjNDM7XHRwcmlvID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBjZmcsIGluZm8sIFx1MDAyNnVzZV9jYWNoZSk7XG4gXHRzcG9ydCA9IHVkcF9mbG93X3NyY19wb3J0KGdlbmV2ZS1cdTAwM2VuZXQsIHNrYixcbi1cdFx0XHRcdCAgZ2VuZXZlLVx1MDAzZWNmZy5wb3J0X21pbixcbi1cdFx0XHRcdCAgZ2VuZXZlLVx1MDAzZWNmZy5wb3J0X21heCwgdHJ1ZSk7XG4mIzQzO1x0XHRcdFx0ICBjZmctXHUwMDNlcG9ydF9taW4sXG4mIzQzO1x0XHRcdFx0ICBjZmctXHUwMDNlcG9ydF9tYXgsIHRydWUpO1xuIFxuIFx0ZHN0ID0gdWRwX3R1bm5lbDZfZHN0X2xvb2t1cChza2IsIGRldiwgZ2VuZXZlLVx1MDAzZW5ldCwgZ3M2LVx1MDAzZXNrLCAwLFxuIFx0XHRcdFx0ICAgICBcdTAwMjZzYWRkciwga2V5LCBzcG9ydCxcbi1cdFx0XHRcdCAgICAgZ2VuZXZlLVx1MDAzZWNmZy5pbmZvLmtleS50cF9kc3QsIHByaW8sXG4mIzQzO1x0XHRcdFx0ICAgICBjZmctXHUwMDNlaW5mby5rZXkudHBfZHN0LCBwcmlvLFxuIFx0XHRcdFx0ICAgICB1c2VfY2FjaGUgP1xuIFx0XHRcdFx0ICAgICAoc3RydWN0IGRzdF9jYWNoZSAqKVx1MDAyNmluZm8tXHUwMDNlZHN0X2NhY2hlIDogTlVMTCk7XG4gXHRpZiAoSVNfRVJSKGRzdCkpXG4gXHRcdHJldHVybiBQVFJfRVJSKGRzdCk7XG4gXG4tXHRpZiAoIWlwdjZfYWRkcl9hbnkoXHUwMDI2Z2VuZXZlLVx1MDAzZWNmZy5pbmZvLmtleS51LmlwdjYuc3JjKSBcdTAwMjZcdTAwMjZcbi1cdCAgICAhaXB2Nl9hZGRyX2VxdWFsKFx1MDAyNnNhZGRyLCBcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnUuaXB2Ni5zcmMpKSB7XG4mIzQzO1x0aWYgKCFpcHY2X2FkZHJfYW55KFx1MDAyNmNmZy1cdTAwM2VpbmZvLmtleS51LmlwdjYuc3JjKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWlwdjZfYWRkcl9lcXVhbChcdTAwMjZzYWRkciwgXHUwMDI2Y2ZnLVx1MDAzZWluZm8ua2V5LnUuaXB2Ni5zcmMpKSB7XG4gXHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4gXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiBcdH1cbiBcbiBcdGVyciA9IHNrYl90dW5uZWxfY2hlY2tfcG10dShza2IsIGRzdCxcbiBcdFx0XHRcdCAgICBHRU5FVkVfSVBWNl9ITEVOICYjNDM7IGluZm8tXHUwMDNlb3B0aW9uc19sZW4gJiM0Mztcbi1cdFx0XHRcdCAgICBnZW5ldmVfYnVpbGRfZ3JvX2hpbnRfb3B0KGdlbmV2ZSwgc2tiKSxcbiYjNDM7XHRcdFx0XHQgICAgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChnZW5ldmUsIGNmZywgc2tiKSxcbiBcdFx0XHRcdCAgICBuZXRpZl9pc19hbnlfYnJpZGdlX3BvcnQoZGV2KSk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdGRzdF9yZWxlYXNlKGRzdCk7XG5AQCAtMTUxMywyMiAmIzQzOzE1MjQsMjIgQEAgc3RhdGljIGludCBnZW5ldmU2X3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHR9XG4gXG4gXHRwcmlvID0gaXBfdHVubmVsX2Vjbl9lbmNhcChwcmlvLCBpcF9oZHIoc2tiKSwgc2tiKTtcbi1cdGlmIChnZW5ldmUtXHUwMDNlY2ZnLmNvbGxlY3RfbWQpIHtcbiYjNDM7XHRpZiAoY2ZnLVx1MDAzZWNvbGxlY3RfbWQpIHtcbiBcdFx0dHRsID0ga2V5LVx1MDAzZXR0bDtcbiBcdH0gZWxzZSB7XG4tXHRcdGlmIChnZW5ldmUtXHUwMDNlY2ZnLnR0bF9pbmhlcml0KVxuJiM0MztcdFx0aWYgKGNmZy1cdTAwM2V0dGxfaW5oZXJpdClcbiBcdFx0XHR0dGwgPSBpcF90dW5uZWxfZ2V0X3R0bChpcF9oZHIoc2tiKSwgc2tiKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHR0bCA9IGtleS1cdTAwM2V0dGw7XG4gXHRcdHR0bCA9IHR0bCA/IDogaXA2X2RzdF9ob3BsaW1pdChkc3QpO1xuIFx0fVxuLVx0ZXJyID0gZ2VuZXZlX2J1aWxkX3NrYihkc3QsIHNrYiwgaW5mbywgZ2VuZXZlLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcbiYjNDM7XHRlcnIgPSBnZW5ldmVfYnVpbGRfc2tiKGRzdCwgc2tiLCBpbmZvLCBnZW5ldmUsIGNmZywgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XG4gXHRpZiAodW5saWtlbHkoZXJyKSlcbiBcdFx0cmV0dXJuIGVycjtcbiBcbiBcdHVkcF90dW5uZWw2X3htaXRfc2tiKGRzdCwgZ3M2LVx1MDAzZXNrLCBza2IsIGRldixcbiBcdFx0XHQgICAgIFx1MDAyNnNhZGRyLCBcdTAwMjZrZXktXHUwMDNldS5pcHY2LmRzdCwgcHJpbywgdHRsLFxuLVx0XHRcdCAgICAgaW5mby1cdTAwM2VrZXkubGFiZWwsIHNwb3J0LCBnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnRwX2RzdCxcbiYjNDM7XHRcdFx0ICAgICBpbmZvLVx1MDAzZWtleS5sYWJlbCwgc3BvcnQsIGNmZy1cdTAwM2VpbmZvLmtleS50cF9kc3QsXG4gXHRcdFx0ICAgICAhdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULFxuIFx0XHRcdFx0ICAgICAgIGluZm8tXHUwMDNla2V5LnR1bl9mbGFncyksXG4gXHRcdFx0ICAgICAwKTtcbkBAIC0xNTM5LDI4ICYjNDM7MTU1MCwzMSBAQCBzdGF0aWMgaW50IGdlbmV2ZTZfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBzdGF0aWMgbmV0ZGV2X3R4X3QgZ2VuZXZlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9IE5VTEw7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gTlVMTDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnO1xuIFx0aW50IGVycjtcbiBcbi1cdGlmIChnZW5ldmUtXHUwMDNlY2ZnLmNvbGxlY3RfbWQpIHtcbiYjNDM7XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0Y2ZnID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS1cdTAwM2VjZmcpO1xuJiM0MztcdGlmIChjZmctXHUwMDNlY29sbGVjdF9tZCkge1xuIFx0XHRpbmZvID0gc2tiX3R1bm5lbF9pbmZvKHNrYik7XG4gXHRcdGlmICh1bmxpa2VseSghaW5mbyB8fCAhKGluZm8tXHUwMDNlbW9kZSBcdTAwMjYgSVBfVFVOTkVMX0lORk9fVFgpKSkge1xuIFx0XHRcdG5ldGRldl9kYmcoZGV2LCBcJiMzNDtubyB0dW5uZWwgbWV0YWRhdGFcXG5cJiMzNDspO1xuIFx0XHRcdGRldl9rZnJlZV9za2Ioc2tiKTtcbiBcdFx0XHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoZGV2KTtcbiYjNDM7XHRcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXHRcdFx0cmV0dXJuIE5FVERFVl9UWF9PSztcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbi1cdFx0aW5mbyA9IFx1MDAyNmdlbmV2ZS1cdTAwM2VjZmcuaW5mbztcbiYjNDM7XHRcdGluZm8gPSBcdTAwMjZjZmctXHUwMDNlaW5mbztcbiBcdH1cbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiBcdGlmIChpbmZvLVx1MDAzZW1vZGUgXHUwMDI2IElQX1RVTk5FTF9JTkZPX0lQVjYpXG4tXHRcdGVyciA9IGdlbmV2ZTZfeG1pdF9za2Ioc2tiLCBkZXYsIGdlbmV2ZSwgaW5mbyk7XG4mIzQzO1x0XHRlcnIgPSBnZW5ldmU2X3htaXRfc2tiKHNrYiwgZGV2LCBnZW5ldmUsIGNmZywgaW5mbyk7XG4gXHRlbHNlXG4gI2VuZGlmXG4tXHRcdGVyciA9IGdlbmV2ZV94bWl0X3NrYihza2IsIGRldiwgZ2VuZXZlLCBpbmZvKTtcbiYjNDM7XHRcdGVyciA9IGdlbmV2ZV94bWl0X3NrYihza2IsIGRldiwgZ2VuZXZlLCBjZmcsIGluZm8pO1xuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gXG4gXHRpZiAobGlrZWx5KCFlcnIpKVxuQEAgLTE1OTMsOCAmIzQzOzE2MDcsMTMgQEAgc3RhdGljIGludCBnZW5ldmVfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBza2JfdHVubmVsX2luZm8oc2tiKTtcbiBcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmc7XG4gXHRfX2JlMTYgc3BvcnQ7XG4gXG4mIzQzO1x0Y2ZnID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS1cdTAwM2VjZmcpO1xuJiM0MztcdGlmICh1bmxpa2VseSghY2ZnKSlcbiYjNDM7XHRcdHJldHVybiAtRU5PREVWO1xuJiM0MztcbiBcdGlmIChpcF90dW5uZWxfaW5mb19hZihpbmZvKSA9PSBBRl9JTkVUKSB7XG4gXHRcdHN0cnVjdCBydGFibGUgKnJ0O1xuIFx0XHRzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzNCA9IHJjdV9kZXJlZmVyZW5jZShnZW5ldmUtXHUwMDNlc29jazQpO1xuQEAgLTE2MDYsMTQgJiM0MzsxNjI1LDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHRcdHVzZV9jYWNoZSA9IGlwX3R1bm5lbF9kc3RfY2FjaGVfdXNhYmxlKHNrYiwgaW5mbyk7XG4tXHRcdHRvcyA9IGdlbmV2ZV9nZXRfZHNmaWVsZChza2IsIGRldiwgaW5mbywgXHUwMDI2dXNlX2NhY2hlKTtcbiYjNDM7XHRcdHRvcyA9IGdlbmV2ZV9nZXRfZHNmaWVsZChza2IsIGRldiwgY2ZnLCBpbmZvLCBcdTAwMjZ1c2VfY2FjaGUpO1xuIFx0XHRzcG9ydCA9IHVkcF9mbG93X3NyY19wb3J0KGdlbmV2ZS1cdTAwM2VuZXQsIHNrYixcbi1cdFx0XHRcdFx0ICBnZW5ldmUtXHUwMDNlY2ZnLnBvcnRfbWluLFxuLVx0XHRcdFx0XHQgIGdlbmV2ZS1cdTAwM2VjZmcucG9ydF9tYXgsIHRydWUpO1xuJiM0MztcdFx0XHRcdFx0ICBjZmctXHUwMDNlcG9ydF9taW4sXG4mIzQzO1x0XHRcdFx0XHQgIGNmZy1cdTAwM2Vwb3J0X21heCwgdHJ1ZSk7XG4gXG4gXHRcdHJ0ID0gdWRwX3R1bm5lbF9kc3RfbG9va3VwKHNrYiwgZGV2LCBnZW5ldmUtXHUwMDNlbmV0LCAwLCBcdTAwMjZzYWRkcixcbiBcdFx0XHRcdFx0ICAgXHUwMDI2aW5mby1cdTAwM2VrZXksXG4tXHRcdFx0XHRcdCAgIHNwb3J0LCBnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnRwX2RzdCxcbiYjNDM7XHRcdFx0XHRcdCAgIHNwb3J0LCBjZmctXHUwMDNlaW5mby5rZXkudHBfZHN0LFxuIFx0XHRcdFx0XHQgICB0b3MsXG4gXHRcdFx0XHRcdCAgIHVzZV9jYWNoZSA/IFx1MDAyNmluZm8tXHUwMDNlZHN0X2NhY2hlIDogTlVMTCk7XG4gXHRcdGlmIChJU19FUlIocnQpKVxuQEAgLTE2MzMsMTQgJiM0MzsxNjUyLDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHRcdHVzZV9jYWNoZSA9IGlwX3R1bm5lbF9kc3RfY2FjaGVfdXNhYmxlKHNrYiwgaW5mbyk7XG4tXHRcdHByaW8gPSBnZW5ldmVfZ2V0X2RzZmllbGQoc2tiLCBkZXYsIGluZm8sIFx1MDAyNnVzZV9jYWNoZSk7XG4mIzQzO1x0XHRwcmlvID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBjZmcsIGluZm8sIFx1MDAyNnVzZV9jYWNoZSk7XG4gXHRcdHNwb3J0ID0gdWRwX2Zsb3dfc3JjX3BvcnQoZ2VuZXZlLVx1MDAzZW5ldCwgc2tiLFxuLVx0XHRcdFx0XHQgIGdlbmV2ZS1cdTAwM2VjZmcucG9ydF9taW4sXG4tXHRcdFx0XHRcdCAgZ2VuZXZlLVx1MDAzZWNmZy5wb3J0X21heCwgdHJ1ZSk7XG4mIzQzO1x0XHRcdFx0XHQgIGNmZy1cdTAwM2Vwb3J0X21pbixcbiYjNDM7XHRcdFx0XHRcdCAgY2ZnLVx1MDAzZXBvcnRfbWF4LCB0cnVlKTtcbiBcbiBcdFx0ZHN0ID0gdWRwX3R1bm5lbDZfZHN0X2xvb2t1cChza2IsIGRldiwgZ2VuZXZlLVx1MDAzZW5ldCwgZ3M2LVx1MDAzZXNrLCAwLFxuIFx0XHRcdFx0XHQgICAgIFx1MDAyNnNhZGRyLCBcdTAwMjZpbmZvLVx1MDAzZWtleSwgc3BvcnQsXG4tXHRcdFx0XHRcdCAgICAgZ2VuZXZlLVx1MDAzZWNmZy5pbmZvLmtleS50cF9kc3QsIHByaW8sXG4mIzQzO1x0XHRcdFx0XHQgICAgIGNmZy1cdTAwM2VpbmZvLmtleS50cF9kc3QsIHByaW8sXG4gXHRcdFx0XHRcdCAgICAgdXNlX2NhY2hlID8gXHUwMDI2aW5mby1cdTAwM2Vkc3RfY2FjaGUgOiBOVUxMKTtcbiBcdFx0aWYgKElTX0VSUihkc3QpKVxuIFx0XHRcdHJldHVybiBQVFJfRVJSKGRzdCk7XG5AQCAtMTY1Myw3ICYjNDM7MTY3Miw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHR9XG4gXG4gXHRpbmZvLVx1MDAzZWtleS50cF9zcmMgPSBzcG9ydDtcbi1cdGluZm8tXHUwMDNla2V5LnRwX2RzdCA9IGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudHBfZHN0O1xuJiM0MztcdGluZm8tXHUwMDNla2V5LnRwX2RzdCA9IGNmZy1cdTAwM2VpbmZvLmtleS50cF9kc3Q7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMTcwOSw3ICYjNDM7MTcyOCw1MCBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfb2ZmbG9hZF9yeF9wb3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHB1c2gpXG4gXHR9XG4gfVxuIFxuJiM0MztzdGF0aWMgc3RydWN0IGdlbmV2ZV9jb25maWcgKmdlbmV2ZV9jb25maWdfYWxsb2MoY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKnNyYylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmc7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0Y2ZnID0ga21lbWR1cChzcmMsIHNpemVvZigqc3JjKSwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKCFjZmcpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiYjNDM7XG4mIzQzO1x0Y2ZnLVx1MDAzZWluZm8uZHN0X2NhY2hlLmNhY2hlID0gTlVMTDtcbiYjNDM7XHRlcnIgPSBkc3RfY2FjaGVfaW5pdChcdTAwMjZjZmctXHUwMDNlaW5mby5kc3RfY2FjaGUsIEdGUF9LRVJORUwpO1xuJiM0MztcdGlmIChlcnIpIHtcbiYjNDM7XHRcdGtmcmVlKGNmZyk7XG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGNmZztcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgZ2VuZXZlX2NvbmZpZ19mcmVlKHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcpXG4mIzQzO3tcbiYjNDM7XHRpZiAoY2ZnKSB7XG4mIzQzO1x0XHRkc3RfY2FjaGVfZGVzdHJveShcdTAwMjZjZmctXHUwMDNlaW5mby5kc3RfY2FjaGUpO1xuJiM0MztcdFx0a2ZyZWUoY2ZnKTtcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGdlbmV2ZV9jb25maWdfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZywgcmN1KTtcbiYjNDM7XG4mIzQzO1x0Z2VuZXZlX2NvbmZpZ19mcmVlKGNmZyk7XG4mIzQzO31cbiYjNDM7XG4gLyogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi9cbiYjNDM7c3RhdGljIHZvaWQgZ2VuZXZlX2ZyZWVfZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiYjNDM7XHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnZW5ldmUtXHUwMDNlY2ZnLCAxKTtcbiYjNDM7XG4mIzQzO1x0Z2VuZXZlX2NvbmZpZ19mcmVlKGNmZyk7XG4mIzQzO1x0UkNVX0lOSVRfUE9JTlRFUihnZW5ldmUtXHUwMDNlY2ZnLCBOVUxMKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBnZW5ldmVfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRldGhlcl9zZXR1cChkZXYpO1xuQEAgLTE3MTcsNiAmIzQzOzE3NzksNyBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcdGRldi1cdTAwM2VuZXRkZXZfb3BzID0gXHUwMDI2Z2VuZXZlX25ldGRldl9vcHM7XG4gXHRkZXYtXHUwMDNlZXRodG9vbF9vcHMgPSBcdTAwMjZnZW5ldmVfZXRodG9vbF9vcHM7XG4gXHRkZXYtXHUwMDNlbmVlZHNfZnJlZV9uZXRkZXYgPSB0cnVlO1xuJiM0MztcdGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3IgPSBnZW5ldmVfZnJlZV9kZXY7XG4gXG4gXHRTRVRfTkVUREVWX0RFVlRZUEUoZGV2LCBcdTAwMjZnZW5ldmVfdHlwZSk7XG4gXG5AQCAtMTg3OCwxNSAmIzQzOzE5NDEsMTcgQEAgc3RhdGljIHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmVfZmluZF9kZXYoc3RydWN0IGdlbmV2ZV9uZXQgKmduLFxuIFx0KnR1bl9vbl9zYW1lX3BvcnQgPSBmYWxzZTtcbiBcdCp0dW5fY29sbGVjdF9tZCA9IGZhbHNlO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShnZW5ldmUsIFx1MDAyNmduLVx1MDAzZWdlbmV2ZV9saXN0LCBuZXh0KSB7XG4tXHRcdGlmIChpbmZvLVx1MDAzZWtleS50cF9kc3QgPT0gZ2VuZXZlLVx1MDAzZWNmZy5pbmZvLmtleS50cF9kc3QgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAoY2ZnLVx1MDAzZWR1YWxzdGFjayB8fCBnZW5ldmUtXHUwMDNlY2ZnLmR1YWxzdGFjayB8fFxuLVx0XHQgICAgIGdlbmV2ZV9zYWRkcl9jb25mbGljdChpbmZvLCBcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLmluZm8pKSkge1xuLVx0XHRcdCp0dW5fY29sbGVjdF9tZCB8PSBnZW5ldmUtXHUwMDNlY2ZnLmNvbGxlY3RfbWQ7XG4mIzQzO1x0XHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqZ2NmZyA9IHJ0bmxfZGVyZWZlcmVuY2UoZ2VuZXZlLVx1MDAzZWNmZyk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGluZm8tXHUwMDNla2V5LnRwX2RzdCA9PSBnY2ZnLVx1MDAzZWluZm8ua2V5LnRwX2RzdCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICAoY2ZnLVx1MDAzZWR1YWxzdGFjayB8fCBnY2ZnLVx1MDAzZWR1YWxzdGFjayB8fFxuJiM0MztcdFx0ICAgICBnZW5ldmVfc2FkZHJfY29uZmxpY3QoaW5mbywgXHUwMDI2Z2NmZy1cdTAwM2VpbmZvKSkpIHtcbiYjNDM7XHRcdFx0KnR1bl9jb2xsZWN0X21kIHw9IGdjZmctXHUwMDNlY29sbGVjdF9tZDtcbiBcdFx0XHQqdHVuX29uX3NhbWVfcG9ydCA9IHRydWU7XG4gXHRcdH1cbi1cdFx0aWYgKGluZm8tXHUwMDNla2V5LnR1bl9pZCA9PSBnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnR1bl9pZCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGluZm8tXHUwMDNla2V5LnRwX2RzdCA9PSBnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnRwX2RzdCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICFtZW1jbXAoXHUwMDI2aW5mby1cdTAwM2VrZXkudSwgXHUwMDI2Z2VuZXZlLVx1MDAzZWNmZy5pbmZvLmtleS51LCBzaXplb2YoaW5mby1cdTAwM2VrZXkudSkpKVxuJiM0MztcdFx0aWYgKGluZm8tXHUwMDNla2V5LnR1bl9pZCA9PSBnY2ZnLVx1MDAzZWluZm8ua2V5LnR1bl9pZCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdCAgICBpbmZvLVx1MDAzZWtleS50cF9kc3QgPT0gZ2NmZy1cdTAwM2VpbmZvLmtleS50cF9kc3QgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIW1lbWNtcChcdTAwMjZpbmZvLVx1MDAzZWtleS51LCBcdTAwMjZnY2ZnLVx1MDAzZWluZm8ua2V5LnUsIHNpemVvZihpbmZvLVx1MDAzZWtleS51KSkpXG4gXHRcdFx0dCA9IGdlbmV2ZTtcbiBcdH1cbiBcdHJldHVybiB0O1xuQEAgLTE5MjIsNiAmIzQzOzE5ODcsNyBAQCBzdGF0aWMgaW50IGdlbmV2ZV9jb25maWd1cmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0c3RydWN0IGdlbmV2ZV9kZXYgKnQsICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gXHUwMDI2Y2ZnLVx1MDAzZWluZm87XG4gXHRib29sIHR1bl9jb2xsZWN0X21kLCB0dW5fb25fc2FtZV9wb3J0O1xuJiM0MztcdHN0cnVjdCBnZW5ldmVfY29uZmlnICpuZXdfY2ZnO1xuIFx0aW50IGVyciwgZW5jYXBfbGVuO1xuIFxuIFx0aWYgKGNmZy1cdTAwM2Vjb2xsZWN0X21kIFx1MDAyNlx1MDAyNiAhaXNfdG5sX2luZm9femVybyhpbmZvKSkge1xuQEAgLTE5NjIsMTAgJiM0MzsyMDI4LDEzIEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2NvbmZpZ3VyZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRcdH1cbiBcdH1cbiBcbi1cdGRzdF9jYWNoZV9yZXNldChcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLmluZm8uZHN0X2NhY2hlKTtcbi1cdG1lbWNweShcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLCBjZmcsIHNpemVvZigqY2ZnKSk7XG4mIzQzO1x0bmV3X2NmZyA9IGdlbmV2ZV9jb25maWdfYWxsb2MoY2ZnKTtcbiYjNDM7XHRpZiAoSVNfRVJSKG5ld19jZmcpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIobmV3X2NmZyk7XG4mIzQzO1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtXHUwMDNlY2ZnLCBuZXdfY2ZnKTtcbiBcbi1cdGlmIChnZW5ldmUtXHUwMDNlY2ZnLmlubmVyX3Byb3RvX2luaGVyaXQpIHtcbiYjNDM7XHRpZiAoY2ZnLVx1MDAzZWlubmVyX3Byb3RvX2luaGVyaXQpIHtcbiBcdFx0ZGV2LVx1MDAzZWhlYWRlcl9vcHMgPSBOVUxMO1xuIFx0XHRkZXYtXHUwMDNldHlwZSA9IEFSUEhSRF9OT05FO1xuIFx0XHRkZXYtXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gMDtcbkBAIC0yMzIzLDgxICYjNDM7MjM5Miw0NSBAQCBzdGF0aWMgaW50IGdlbmV2ZV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4tLyogUXVpZXNjZXMgdGhlIGdlbmV2ZSBkZXZpY2UgZGF0YSBwYXRoIGZvciBib3RoIFRYIGFuZCBSWC5cbi0gKlxuLSAqIE9uIHRyYW5zbWl0IGdlbmV2ZSBjaGVja3MgZm9yIG5vbi1OVUxMIGdlbmV2ZV9zb2NrIGJlZm9yZSBpdCBwcm9jZWVkcy5cbi0gKiBTbywgaWYgd2Ugc2V0IHRoYXQgc29ja2V0IHRvIE5VTEwgdW5kZXIgUkNVIGFuZCB3YWl0IGZvciBzeW5jaHJvbml6ZV9uZXQoKVxuLSAqIHRvIGNvbXBsZXRlIGZvciB0aGUgZXhpc3Rpbmcgc2V0IG9mIGluLWZsaWdodCBwYWNrZXRzIHRvIGJlIHRyYW5zbWl0dGVkLFxuLSAqIHRoZW4gd2Ugd291bGQgaGF2ZSBxdWllc2NlZCB0aGUgdHJhbnNtaXQgZGF0YSBwYXRoLiBBbGwgdGhlIGZ1dHVyZSBwYWNrZXRzXG4tICogd2lsbCBnZXQgZHJvcHBlZCB1bnRpbCB3ZSB1bnF1aWVzY2UgdGhlIGRhdGEgcGF0aC5cbi0gKlxuLSAqIE9uIHJlY2VpdmUgZ2VuZXZlIGRlcmVmZXJlbmNlIHRoZSBnZW5ldmVfc29jayBzdGFzaGVkIGluIHRoZSBzb2NrZXQuIFNvLFxuLSAqIGlmIHdlIHNldCB0aGF0IHRvIE5VTEwgdW5kZXIgUkNVIGFuZCB3YWl0IGZvciBzeW5jaHJvbml6ZV9uZXQoKSB0b1xuLSAqIGNvbXBsZXRlLCB0aGVuIHdlIHdvdWxkIGhhdmUgcXVpZXNjZWQgdGhlIHJlY2VpdmUgZGF0YSBwYXRoLlxuJiM0MzsvKiBVcGRhdGUgdGhlIGRldmljZSBjb25maWd1cmF0aW9uIHVuZGVyIFJUTkwuXG4mIzQzOyAqIFdlIHVzZSBSQ1Ugc3dhcCB0byB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gYXRvbWljYWxseSwgc28gdGhlIGRhdGEgcGF0aFxuJiM0MzsgKiAoYm90aCBUWCBhbmQgUlgpIGNhbiBjb250aW51ZSBydW5uaW5nIHdpdGhvdXQgaW50ZXJydXB0aW9uIG9yIHBhY2tldCBsb3NzLlxuICAqL1xuLXN0YXRpYyB2b2lkIGdlbmV2ZV9xdWllc2NlKHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsIHN0cnVjdCBnZW5ldmVfc29jayAqKmdzNCxcbi1cdFx0XHQgICBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKipnczYpXG4te1xuLVx0KmdzNCA9IHJ0bmxfZGVyZWZlcmVuY2UoZ2VuZXZlLVx1MDAzZXNvY2s0KTtcbi1cdHJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtXHUwMDNlc29jazQsIE5VTEwpO1xuLVx0aWYgKCpnczQpXG4tXHRcdHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKCgqZ3M0KS1cdTAwM2VzaywgTlVMTCk7XG4tI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4tXHQqZ3M2ID0gcnRubF9kZXJlZmVyZW5jZShnZW5ldmUtXHUwMDNlc29jazYpO1xuLVx0cmN1X2Fzc2lnbl9wb2ludGVyKGdlbmV2ZS1cdTAwM2Vzb2NrNiwgTlVMTCk7XG4tXHRpZiAoKmdzNilcbi1cdFx0cmN1X2Fzc2lnbl9za191c2VyX2RhdGEoKCpnczYpLVx1MDAzZXNrLCBOVUxMKTtcbi0jZWxzZVxuLVx0KmdzNiA9IE5VTEw7XG4tI2VuZGlmXG4tXHRzeW5jaHJvbml6ZV9uZXQoKTtcbi19XG4tXG4tLyogUmVzdW1lcyB0aGUgZ2VuZXZlIGRldmljZSBkYXRhIHBhdGggZm9yIGJvdGggVFggYW5kIFJYLiAqL1xuLXN0YXRpYyB2b2lkIGdlbmV2ZV91bnF1aWVzY2Uoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgc3RydWN0IGdlbmV2ZV9zb2NrICpnczQsXG4tXHRcdFx0ICAgICBzdHJ1Y3QgZ2VuZXZlX3NvY2sgX19tYXliZV91bnVzZWQgKmdzNilcbi17XG4tXHRyY3VfYXNzaWduX3BvaW50ZXIoZ2VuZXZlLVx1MDAzZXNvY2s0LCBnczQpO1xuLVx0aWYgKGdzNClcbi1cdFx0cmN1X2Fzc2lnbl9za191c2VyX2RhdGEoZ3M0LVx1MDAzZXNrLCBnczQpO1xuLSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuLVx0cmN1X2Fzc2lnbl9wb2ludGVyKGdlbmV2ZS1cdTAwM2Vzb2NrNiwgZ3M2KTtcbi1cdGlmIChnczYpXG4tXHRcdHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKGdzNi1cdTAwM2VzaywgZ3M2KTtcbi0jZW5kaWZcbi19XG4tXG4gc3RhdGljIGludCBnZW5ldmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLFxuIFx0XHRcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuIFx0XHRcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIHtcbiBcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xuLVx0c3RydWN0IGdlbmV2ZV9zb2NrICpnczQsICpnczY7XG4tXHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyBjZmc7XG4mIzQzO1x0c3RydWN0IGdlbmV2ZV9jb25maWcgKm9sZF9jZmcgPSBydG5sX2RlcmVmZXJlbmNlKGdlbmV2ZS1cdTAwM2VjZmcpO1xuJiM0MztcdHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmc7XG4gXHRpbnQgZXJyO1xuIFxuIFx0LyogSWYgdGhlIGdlbmV2ZSBkZXZpY2UgaXMgY29uZmlndXJlZCBmb3IgbWV0YWRhdGEgKG9yIGV4dGVybmFsbHlcbiBcdCAqIGNvbnRyb2xsZWQsIGZvciBleGFtcGxlLCBPVlMpLCB0aGVuIG5vdGhpbmcgY2FuIGJlIGNoYW5nZWQuXG4gXHQgKi9cbi1cdGlmIChnZW5ldmUtXHUwMDNlY2ZnLmNvbGxlY3RfbWQpXG4mIzQzO1x0aWYgKG9sZF9jZmctXHUwMDNlY29sbGVjdF9tZClcbiBcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIFxuIFx0LyogU3RhcnQgd2l0aCB0aGUgZXhpc3RpbmcgaW5mby4gKi9cbi1cdG1lbWNweShcdTAwMjZjZmcsIFx1MDAyNmdlbmV2ZS1cdTAwM2VjZmcsIHNpemVvZihjZmcpKTtcbi1cdGVyciA9IGdlbmV2ZV9ubDJpbmZvKHRiLCBkYXRhLCBleHRhY2ssIFx1MDAyNmNmZywgdHJ1ZSk7XG4mIzQzO1x0Y2ZnID0gZ2VuZXZlX2NvbmZpZ19hbGxvYyhvbGRfY2ZnKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGNmZykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihjZmcpO1xuJiM0MztcbiYjNDM7XHRlcnIgPSBnZW5ldmVfbmwyaW5mbyh0YiwgZGF0YSwgZXh0YWNrLCBjZmcsIHRydWUpO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfY2ZnO1xuIFxuLVx0aWYgKCFnZW5ldmVfZHN0X2FkZHJfZXF1YWwoXHUwMDI2Z2VuZXZlLVx1MDAzZWNmZy5pbmZvLCBcdTAwMjZjZmcuaW5mbykpIHtcbi1cdFx0ZHN0X2NhY2hlX3Jlc2V0KFx1MDAyNmNmZy5pbmZvLmRzdF9jYWNoZSk7XG4tXHRcdGdlbmV2ZV9saW5rX2NvbmZpZyhkZXYsIFx1MDAyNmNmZy5pbmZvLCB0Yik7XG4tXHR9XG4mIzQzO1x0aWYgKCFnZW5ldmVfZHN0X2FkZHJfZXF1YWwoXHUwMDI2b2xkX2NmZy1cdTAwM2VpbmZvLCBcdTAwMjZjZmctXHUwMDNlaW5mbykpXG4mIzQzO1x0XHRnZW5ldmVfbGlua19jb25maWcoZGV2LCBcdTAwMjZjZmctXHUwMDNlaW5mbywgdGIpO1xuIFxuLVx0Z2VuZXZlX3F1aWVzY2UoZ2VuZXZlLCBcdTAwMjZnczQsIFx1MDAyNmdzNik7XG4tXHRtZW1jcHkoXHUwMDI2Z2VuZXZlLVx1MDAzZWNmZywgXHUwMDI2Y2ZnLCBzaXplb2YoY2ZnKSk7XG4tXHRnZW5ldmVfdW5xdWllc2NlKGdlbmV2ZSwgZ3M0LCBnczYpO1xuJiM0MztcdHJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtXHUwMDNlY2ZnLCBjZmcpO1xuIFxuJiM0MztcdGNhbGxfcmN1X2h1cnJ5KFx1MDAyNm9sZF9jZmctXHUwMDNlcmN1LCBnZW5ldmVfY29uZmlnX2ZyZWVfcmN1KTtcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2ZyZWVfY2ZnOlxuJiM0MztcdGdlbmV2ZV9jb25maWdfZnJlZShjZmcpO1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGdlbmV2ZV9kZWxsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQpXG5AQCAtMjQzMSwxNiAmIzQzOzI0NjQsMjcgQEAgc3RhdGljIHNpemVfdCBnZW5ldmVfZ2V0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiBcbiBzdGF0aWMgaW50IGdlbmV2ZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4tXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9IFx1MDAyNmdlbmV2ZS1cdTAwM2VjZmcuaW5mbztcbi1cdGJvb2wgdHRsX2luaGVyaXQgPSBnZW5ldmUtXHUwMDNlY2ZnLnR0bF9pbmhlcml0O1xuLVx0Ym9vbCBtZXRhZGF0YSA9IGdlbmV2ZS1cdTAwM2VjZmcuY29sbGVjdF9tZDtcbi1cdHN0cnVjdCBpZmxhX2dlbmV2ZV9wb3J0X3JhbmdlIHBvcnRzID0ge1xuLVx0XHQubG93XHQ9IGh0b25zKGdlbmV2ZS1cdTAwM2VjZmcucG9ydF9taW4pLFxuLVx0XHQuaGlnaFx0PSBodG9ucyhnZW5ldmUtXHUwMDNlY2ZnLnBvcnRfbWF4KSxcbi1cdH07XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7XG4mIzQzO1x0c3RydWN0IGlmbGFfZ2VuZXZlX3BvcnRfcmFuZ2UgcG9ydHM7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZztcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm87XG4mIzQzO1x0Ym9vbCB0dGxfaW5oZXJpdCwgbWV0YWRhdGE7XG4gXHRfX3U4IHRtcF92bmlbM107XG4gXHRfX3UzMiB2bmk7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRjZmcgPSByY3VfZGVyZWZlcmVuY2UoZ2VuZXZlLVx1MDAzZWNmZyk7XG4mIzQzO1x0aWYgKCFjZmcpIHtcbiYjNDM7XHRcdGVyciA9IC1FTk9ERVY7XG4mIzQzO1x0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGluZm8gPSBcdTAwMjZjZmctXHUwMDNlaW5mbztcbiYjNDM7XHR0dGxfaW5oZXJpdCA9IGNmZy1cdTAwM2V0dGxfaW5oZXJpdDtcbiYjNDM7XHRtZXRhZGF0YSA9IGNmZy1cdTAwM2Vjb2xsZWN0X21kO1xuJiM0MztcdHBvcnRzLmxvdyA9IGh0b25zKGNmZy1cdTAwM2Vwb3J0X21pbik7XG4mIzQzO1x0cG9ydHMuaGlnaCA9IGh0b25zKGNmZy1cdTAwM2Vwb3J0X21heCk7XG4gXG4gXHR0dW5uZWxfaWRfdG9fdm5pKGluZm8tXHUwMDNla2V5LnR1bl9pZCwgdG1wX3ZuaSk7XG4gXHR2bmkgPSAodG1wX3ZuaVswXSBcdTAwM2NcdTAwM2MgMTYpIHwgKHRtcF92bmlbMV0gXHUwMDNjXHUwMDNjIDgpIHwgdG1wX3ZuaVsyXTtcbkBAIC0yNDY4LDE3ICYjNDM7MjUxMiwxNyBAQCBzdGF0aWMgaW50IGdlbmV2ZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiAjZW5kaWZcbiBcdH1cbiBcbi1cdGlmICghZ2VuZXZlLVx1MDAzZWNmZy5kdWFsc3RhY2spIHtcbiYjNDM7XHRpZiAoIWNmZy1cdTAwM2VkdWFsc3RhY2spIHtcbiBcdFx0aWYgKGlwX3R1bm5lbF9pbmZvX2FmKGluZm8pID09IEFGX0lORVQpIHtcbiBcdFx0XHRpZiAoKGluZm8tXHUwMDNla2V5LnUuaXB2NC5zcmMgfHxcbi1cdFx0XHQgICAgIGdlbmV2ZS1cdTAwM2VjZmcuY29sbGVjdF9tZCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHRcdCAgICAgbWV0YWRhdGEpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICBubGFfcHV0X2luX2FkZHIoc2tiLCBJRkxBX0dFTkVWRV9MT0NBTCxcbiBcdFx0XHRcdFx0ICAgIGluZm8tXHUwMDNla2V5LnUuaXB2NC5zcmMpKVxuIFx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0aWYgKCghaXB2Nl9hZGRyX2FueShcdTAwMjZpbmZvLVx1MDAzZWtleS51LmlwdjYuc3JjKSB8fFxuLVx0XHRcdCAgICAgZ2VuZXZlLVx1MDAzZWNmZy5jb2xsZWN0X21kKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICBtZXRhZGF0YSkgXHUwMDI2XHUwMDI2XG4gXHRcdFx0ICAgIG5sYV9wdXRfaW42X2FkZHIoc2tiLCBJRkxBX0dFTkVWRV9MT0NBTDYsXG4gXHRcdFx0XHRcdCAgICAgXHUwMDI2aW5mby1cdTAwM2VrZXkudS5pcHY2LnNyYykpXG4gXHRcdFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbkBAIC0yNDkxLDcgJiM0MzsyNTM1LDcgQEAgc3RhdGljIGludCBnZW5ldmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHQgICAgbmxhX3B1dF9iZTMyKHNrYiwgSUZMQV9HRU5FVkVfTEFCRUwsIGluZm8tXHUwMDNla2V5LmxhYmVsKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4tXHRpZiAobmxhX3B1dF91OChza2IsIElGTEFfR0VORVZFX0RGLCBnZW5ldmUtXHUwMDNlY2ZnLmRmKSlcbiYjNDM7XHRpZiAobmxhX3B1dF91OChza2IsIElGTEFfR0VORVZFX0RGLCBjZmctXHUwMDNlZGYpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbiBcdGlmIChubGFfcHV0X2JlMTYoc2tiLCBJRkxBX0dFTkVWRV9QT1JULCBpbmZvLVx1MDAzZWtleS50cF9kc3QpKVxuQEAgLTI1MDIsMjggJiM0MzsyNTQ2LDMxIEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBJRkxBX0dFTkVWRV9VRFBfWkVST19DU1VNNl9SWCxcbi1cdFx0ICAgICAgICFnZW5ldmUtXHUwMDNlY2ZnLnVzZV91ZHA2X3J4X2NoZWNrc3VtcykpXG4mIzQzO1x0XHQgICAgICAgIWNmZy1cdTAwM2V1c2VfdWRwNl9yeF9jaGVja3N1bXMpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiAjZW5kaWZcbiBcbiBcdGlmIChubGFfcHV0X3U4KHNrYiwgSUZMQV9HRU5FVkVfVFRMX0lOSEVSSVQsIHR0bF9pbmhlcml0KSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4tXHRpZiAoZ2VuZXZlLVx1MDAzZWNmZy5pbm5lcl9wcm90b19pbmhlcml0IFx1MDAyNlx1MDAyNlxuJiM0MztcdGlmIChjZmctXHUwMDNlaW5uZXJfcHJvdG9faW5oZXJpdCBcdTAwMjZcdTAwMjZcbiBcdCAgICBubGFfcHV0X2ZsYWcoc2tiLCBJRkxBX0dFTkVWRV9JTk5FUl9QUk9UT19JTkhFUklUKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4gXHRpZiAobmxhX3B1dChza2IsIElGTEFfR0VORVZFX1BPUlRfUkFOR0UsIHNpemVvZihwb3J0cyksIFx1MDAyNnBvcnRzKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4tXHRpZiAoZ2VuZXZlLVx1MDAzZWNmZy5ncm9faGludCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRpZiAoY2ZnLVx1MDAzZWdyb19oaW50IFx1MDAyNlx1MDAyNlxuIFx0ICAgIG5sYV9wdXRfZmxhZyhza2IsIElGTEFfR0VORVZFX0dST19ISU5UKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4tXHRyZXR1cm4gMDtcbiYjNDM7b3V0OlxuJiM0MztcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdHJldHVybiBlcnI7XG4gXG4gbmxhX3B1dF9mYWlsdXJlOlxuLVx0cmV0dXJuIC1FTVNHU0laRTtcbiYjNDM7XHRlcnIgPSAtRU1TR1NJWkU7XG4mIzQzO1x0Z290byBvdXQ7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBnZW5ldmVfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbkBAIC0yNjcxLDYgJiM0MzsyNzE4LDcgQEAgc3RhdGljIHZvaWQgX19leGl0IGdlbmV2ZV9jbGVhbnVwX21vZHVsZSh2b2lkKVxuIFx0cnRubF9saW5rX3VucmVnaXN0ZXIoXHUwMDI2Z2VuZXZlX2xpbmtfb3BzKTtcbiBcdHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKFx1MDAyNmdlbmV2ZV9ub3RpZmllcl9ibG9jayk7XG4gXHR1bnJlZ2lzdGVyX3Blcm5ldF9zdWJzeXMoXHUwMDI2Z2VuZXZlX25ldF9vcHMpO1xuJiM0MztcdHJjdV9iYXJyaWVyKCk7XG4gfVxuIG1vZHVsZV9leGl0KGdlbmV2ZV9jbGVhbnVwX21vZHVsZSk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6NTM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7R0VORVZFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Z2VuZXZlX2NoYW5nZWxpbmsmIzM0OywKICAgICYjMzQ7Z2VuZXZlX2NvbmZpZ3VyZSYjMzQ7LAogICAgJiMzNDtnZW5ldmVfZmlsbF9pbmZvJiMzNDssCiAgICAmIzM0O2dlbmV2ZV9jb25maWdfYWxsb2MmIzM0OywKICAgICYjMzQ7Z2VuZXZlX2ZyZWVfZGV2JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgR0VORVZFIGRyaXZlciB0byB1c2UgUkNVIGZvciBpdHMgY29uZmlndXJhdGlvbiAoYHN0cnVjdCBnZW5ldmVfY29uZmlnYCksIHJlcGxhY2luZyB0aGUgcHJldmlvdXMgc3luY2hyb25vdXMgYGdlbmV2ZV9xdWllc2NlYC9gZ2VuZXZlX3VucXVpZXNjZWAgbWVjaGFuaXNtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGhvdyBjb25maWd1cmF0aW9uIHVwZGF0ZXMgYXJlIGhhbmRsZWQgY29uY3VycmVudGx5IHdpdGggdGhlIGRhdGEgcGF0aC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgY29udHJvbCBwYXRoIGZ1bmN0aW9ucyB0aGF0IGFsbG9jYXRlLCB1cGRhdGUsIGFuZCBmcmVlIHRoZSBjb25maWd1cmF0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzYTFkMDk0MWRiYzkwZDYzOWE5MjJjYWQ2MDIxNWI5Mzc3NWI5NTRlCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdWwgNyAyMzo1MzoyOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2dlbmV2ZS5jIGIvZHJpdmVycy9uZXQvZ2VuZXZlLmMKaW5kZXggMzk2ZTFhMTEzY2Q0OWUuLjE3YmQzNTQzZDU4N2E5IDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9nZW5ldmUuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9nZW5ldmUuYwpAQCAtODIsNiAmIzQzOzgyLDcgQEAgc3RydWN0IGdlbmV2ZV9jb25maWcgewogCXUxNgkJCXBvcnRfbWluOwogCXUxNgkJCXBvcnRfbWF4OwogCiYjNDM7CXN0cnVjdCByY3VfaGVhZAkJcmN1OwogCS8qIE11c3QgYmUgbGFzdCAtLWVuZHMgaW4gYSBmbGV4aWJsZS1hcnJheSBtZW1iZXIuICovCiAJc3RydWN0IGlwX3R1bm5lbF9pbmZvCWluZm87CiB9OwpAQCAtMTAwLDcgJiM0MzsxMDEsNyBAQCBzdHJ1Y3QgZ2VuZXZlX2RldiB7CiAjZW5kaWYKIAlzdHJ1Y3QgbGlzdF9oZWFkICAgbmV4dDsJLyogZ2VuZXZlJiMzOTtzIHBlciBuYW1lc3BhY2UgbGlzdCAqLwogCXN0cnVjdCBncm9fY2VsbHMgICBncm9fY2VsbHM7Ci0Jc3RydWN0IGdlbmV2ZV9jb25maWcgY2ZnOwomIzQzOwlzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyBfX3JjdSAqY2ZnOwogfTsKIAogc3RydWN0IGdlbmV2ZV9zb2NrIHsKQEAgLTE4Miw4ICYjNDM7MTgzLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlX2xvb2t1cChzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzLAogCWhhc2ggPSBnZW5ldmVfbmV0X3ZuaV9oYXNoKHZuaSk7CiAJdm5pX2xpc3RfaGVhZCA9ICZhbXA7Z3MtJmd0O3ZuaV9saXN0W2hhc2hdOwogCWhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCB2bmlfbGlzdF9oZWFkLCBobGlzdCkgewotCQlpZiAoZXFfdHVuX2lkX2FuZF92bmkoKHU4ICopJmFtcDtub2RlLSZndDtnZW5ldmUtJmd0O2NmZy5pbmZvLmtleS50dW5faWQsIHZuaSkgJmFtcDsmYW1wOwotCQkgICAgYWRkciA9PSBub2RlLSZndDtnZW5ldmUtJmd0O2NmZy5pbmZvLmtleS51LmlwdjQuZHN0KQomIzQzOwkJY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyA9IHJjdV9kZXJlZmVyZW5jZShub2RlLSZndDtnZW5ldmUtJmd0O2NmZyk7CiYjNDM7CiYjNDM7CQlpZiAoZXFfdHVuX2lkX2FuZF92bmkoKHU4ICopJmFtcDtjZmctJmd0O2luZm8ua2V5LnR1bl9pZCwgdm5pKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgYWRkciA9PSBjZmctJmd0O2luZm8ua2V5LnUuaXB2NC5kc3QpCiAJCQlyZXR1cm4gbm9kZS0mZ3Q7Z2VuZXZlOwogCX0KIAlyZXR1cm4gTlVMTDsKQEAgLTIwMSw4ICYjNDM7MjA0LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlNl9sb29rdXAoc3RydWN0IGdlbmV2ZV9zb2NrICpncywKIAloYXNoID0gZ2VuZXZlX25ldF92bmlfaGFzaCh2bmkpOwogCXZuaV9saXN0X2hlYWQgPSAmYW1wO2dzLSZndDt2bmlfbGlzdFtoYXNoXTsKIAlobGlzdF9mb3JfZWFjaF9lbnRyeV9yY3Uobm9kZSwgdm5pX2xpc3RfaGVhZCwgaGxpc3QpIHsKLQkJaWYgKGVxX3R1bl9pZF9hbmRfdm5pKCh1OCAqKSZhbXA7bm9kZS0mZ3Q7Z2VuZXZlLSZndDtjZmcuaW5mby5rZXkudHVuX2lkLCB2bmkpICZhbXA7JmFtcDsKLQkJICAgIGlwdjZfYWRkcl9lcXVhbCgmYW1wO2FkZHI2LCAmYW1wO25vZGUtJmd0O2dlbmV2ZS0mZ3Q7Y2ZnLmluZm8ua2V5LnUuaXB2Ni5kc3QpKQomIzQzOwkJY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyA9IHJjdV9kZXJlZmVyZW5jZShub2RlLSZndDtnZW5ldmUtJmd0O2NmZyk7CiYjNDM7CiYjNDM7CQlpZiAoZXFfdHVuX2lkX2FuZF92bmkoKHU4ICopJmFtcDtjZmctJmd0O2luZm8ua2V5LnR1bl9pZCwgdm5pKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgaXB2Nl9hZGRyX2VxdWFsKCZhbXA7YWRkcjYsICZhbXA7Y2ZnLSZndDtpbmZvLmtleS51LmlwdjYuZHN0KSkKIAkJCXJldHVybiBub2RlLSZndDtnZW5ldmU7CiAJfQogCXJldHVybiBOVUxMOwpAQCAtMzg2LDExICYjNDM7MzkxLDYgQEAgc3RhdGljIGludCBnZW5ldmVfaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCWlmIChlcnIpCiAJCXJldHVybiBlcnI7CiAKLQllcnIgPSBkc3RfY2FjaGVfaW5pdCgmYW1wO2dlbmV2ZS0mZ3Q7Y2ZnLmluZm8uZHN0X2NhY2hlLCBHRlBfS0VSTkVMKTsKLQlpZiAoZXJyKSB7Ci0JCWdyb19jZWxsc19kZXN0cm95KCZhbXA7Z2VuZXZlLSZndDtncm9fY2VsbHMpOwotCQlyZXR1cm4gZXJyOwotCX0KIAluZXRkZXZfbG9ja2RlcF9zZXRfY2xhc3NlcyhkZXYpOwogCXJldHVybiAwOwogfQpAQCAtMzk5LDcgJiM0MzszOTksNiBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfdW5pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7CiAKLQlkc3RfY2FjaGVfZGVzdHJveSgmYW1wO2dlbmV2ZS0mZ3Q7Y2ZnLmluZm8uZHN0X2NhY2hlKTsKIAlncm9fY2VsbHNfZGVzdHJveSgmYW1wO2dlbmV2ZS0mZ3Q7Z3JvX2NlbGxzKTsKIH0KIApAQCAtNjUwLDYgJiM0Mzs2NDksNyBAQCBzdGF0aWMgaW50IGdlbmV2ZV9wb3N0X2RlY2FwX2hpbnQoY29uc3Qgc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogLyogQ2FsbGJhY2sgZnJvbSBuZXQvaXB2NC91ZHAuYyB0byByZWNlaXZlIHBhY2tldHMgKi8KIHN0YXRpYyBpbnQgZ2VuZXZlX3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKJiM0MzsJY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZzsKIAlzdHJ1Y3QgZ2VuZXZlaGRyICpnZW5ldmVoOwogCXN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmU7CiAJc3RydWN0IGdlbmV2ZV9zb2NrICpnczsKQEAgLTY3NSw4ICYjNDM7Njc1LDkgQEAgc3RhdGljIGludCBnZW5ldmVfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCiAJaW5uZXJfcHJvdG8gPSBnZW5ldmVoLSZndDtwcm90b190eXBlOwogCi0JaWYgKHVubGlrZWx5KCghZ2VuZXZlLSZndDtjZmcuaW5uZXJfcHJvdG9faW5oZXJpdCAmYW1wOyZhbXA7Ci0JCSAgICAgIGlubmVyX3Byb3RvICE9IGh0b25zKEVUSF9QX1RFQikpKSkgewomIzQzOwljZmcgPSByY3VfZGVyZWZlcmVuY2UoZ2VuZXZlLSZndDtjZmcpOwomIzQzOwlpZiAodW5saWtlbHkoIWNmZyB8fCAoIWNmZy0mZ3Q7aW5uZXJfcHJvdG9faW5oZXJpdCAmYW1wOyZhbXA7CiYjNDM7CQkJICAgICAgaW5uZXJfcHJvdG8gIT0gaHRvbnMoRVRIX1BfVEVCKSkpKSB7CiAJCWRldl9kc3RhdHNfcnhfZHJvcHBlZChnZW5ldmUtJmd0O2Rldik7CiAJCWdvdG8gZHJvcDsKIAl9CkBAIC03NjIsOSAmIzQzOzc2MywxMCBAQCBzdGF0aWMgaW50IGdlbmV2ZV91ZHBfZW5jYXBfZXJyX2xvb2t1cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpCiB9CiAKIHN0YXRpYyBzdHJ1Y3Qgc29jayAqZ2VuZXZlX2NyZWF0ZV9zb2NrKHN0cnVjdCBuZXQgKm5ldCwKLQkJCQkgICAgICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KQomIzQzOwkJCQkgICAgICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwKJiM0MzsJCQkJICAgICAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsIGJvb2wgaXB2NikKIHsKLQlzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSAmYW1wO2dlbmV2ZS0mZ3Q7Y2ZnLmluZm87CiYjNDM7CWNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9ICZhbXA7Y2ZnLSZndDtpbmZvOwogCXN0cnVjdCB1ZHBfcG9ydF9jZmcgdWRwX2NvbmY7CiAJc3RydWN0IHNvY2tldCAqc29jazsKIAlpbnQgZXJyOwpAQCAtNzc1LDcgJiM0Mzs3NzcsNyBAQCBzdGF0aWMgc3RydWN0IHNvY2sgKmdlbmV2ZV9jcmVhdGVfc29jayhzdHJ1Y3QgbmV0ICpuZXQsCiAJaWYgKGlwdjYpIHsKIAkJdWRwX2NvbmYuZmFtaWx5ID0gQUZfSU5FVDY7CiAJCXVkcF9jb25mLmlwdjZfdjZvbmx5ID0gMTsKLQkJdWRwX2NvbmYudXNlX3VkcDZfcnhfY2hlY2tzdW1zID0gZ2VuZXZlLSZndDtjZmcudXNlX3VkcDZfcnhfY2hlY2tzdW1zOwomIzQzOwkJdWRwX2NvbmYudXNlX3VkcDZfcnhfY2hlY2tzdW1zID0gY2ZnLSZndDt1c2VfdWRwNl9yeF9jaGVja3N1bXM7CiAJCXVkcF9jb25mLmxvY2FsX2lwNiA9IGluZm8tJmd0O2tleS51LmlwdjYuc3JjOwogCX0gZWxzZQogI2VuZGlmCkBAIC05OTEsNyAmIzQzOzk5Myw4IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2dyb19jb21wbGV0ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsCiAKIC8qIENyZWF0ZSBuZXcgbGlzdGVuIHNvY2tldCBpZiBuZWVkZWQgKi8KIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdlbmV2ZV9zb2NrZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCwKLQkJCQkJCXN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsIGJvb2wgaXB2NikKJiM0MzsJCQkJCQlzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLAomIzQzOwkJCQkJCWNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsIGJvb2wgaXB2NikKIHsKIAlzdHJ1Y3QgZ2VuZXZlX25ldCAqZ24gPSBuZXRfZ2VuZXJpYyhuZXQsIGdlbmV2ZV9uZXRfaWQpOwogCXN0cnVjdCB1ZHBfdHVubmVsX3NvY2tfY2ZnIHR1bm5lbF9jZmc7CkBAIC0xMDAzLDcgJiM0MzsxMDA2LDcgQEAgc3RhdGljIHN0cnVjdCBnZW5ldmVfc29jayAqZ2VuZXZlX3NvY2tldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LAogCWlmICghZ3MpCiAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0pOwogCi0Jc2sgPSBnZW5ldmVfY3JlYXRlX3NvY2sobmV0LCBnZW5ldmUsIGlwdjYpOwomIzQzOwlzayA9IGdlbmV2ZV9jcmVhdGVfc29jayhuZXQsIGdlbmV2ZSwgY2ZnLCBpcHY2KTsKIAlpZiAoSVNfRVJSKHNrKSkgewogCQlrZnJlZShncyk7CiAJCXJldHVybiBFUlJfQ0FTVChzayk7CkBAIC0xMDYwLDEyICYjNDM7MTA2MywxMyBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfc29ja19yZWxlYXNlKHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUpCiB9CiAKIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdlbmV2ZV9maW5kX3NvY2soc3RydWN0IG5ldCAqbmV0LAotCQkJCQkgICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KQomIzQzOwkJCQkJICAgIHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsCiYjNDM7CQkJCQkgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZywgYm9vbCBpcHY2KQogewogCXN0cnVjdCBnZW5ldmVfbmV0ICpnbiA9IG5ldF9nZW5lcmljKG5ldCwgZ2VuZXZlX25ldF9pZCk7Ci0Jc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gJmFtcDtnZW5ldmUtJmd0O2NmZy5pbmZvOwomIzQzOwljb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSAmYW1wO2NmZy0mZ3Q7aW5mbzsKIAlzYV9mYW1pbHlfdCBmYW1pbHkgPSBpcHY2ID8gQUZfSU5FVDYgOiBBRl9JTkVUOwotCWJvb2wgZ3JvX2hpbnQgPSBnZW5ldmUtJmd0O2NmZy5ncm9faGludDsKJiM0MzsJYm9vbCBncm9faGludCA9IGNmZy0mZ3Q7Z3JvX2hpbnQ7CiAJX19iZTE2IGRzdF9wb3J0ID0gaW5mby0mZ3Q7a2V5LnRwX2RzdDsKIAlzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzOwogCkBAIC0xMDk1LDcgJiM0MzsxMDk5LDggQEAgc3RhdGljIHN0cnVjdCBnZW5ldmVfc29jayAqZ2VuZXZlX2ZpbmRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsCiAJcmV0dXJuIE5VTEw7CiB9CiAKLXN0YXRpYyBpbnQgZ2VuZXZlX3NvY2tfYWRkKHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsIGJvb2wgaXB2NikKJiM0MztzdGF0aWMgaW50IGdlbmV2ZV9zb2NrX2FkZChzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLAomIzQzOwkJCSAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsIGJvb2wgaXB2NikKIHsKIAlzdHJ1Y3QgbmV0ICpuZXQgPSBnZW5ldmUtJmd0O25ldDsKIAlzdHJ1Y3QgZ2VuZXZlX2Rldl9ub2RlICpub2RlOwpAQCAtMTEwMywxOSAmIzQzOzExMDgsMTkgQEAgc3RhdGljIGludCBnZW5ldmVfc29ja19hZGQoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KQogCV9fdTggdm5pWzNdOwogCV9fdTMyIGhhc2g7CiAKLQlncyA9IGdlbmV2ZV9maW5kX3NvY2sobmV0LCBnZW5ldmUsIGlwdjYpOwomIzQzOwlncyA9IGdlbmV2ZV9maW5kX3NvY2sobmV0LCBnZW5ldmUsIGNmZywgaXB2Nik7CiAJaWYgKGdzKSB7CiAJCWdzLSZndDtyZWZjbnQmIzQzOyYjNDM7OwogCQlnb3RvIG91dDsKIAl9CiAKLQlncyA9IGdlbmV2ZV9zb2NrZXRfY3JlYXRlKG5ldCwgZ2VuZXZlLCBpcHY2KTsKJiM0MzsJZ3MgPSBnZW5ldmVfc29ja2V0X2NyZWF0ZShuZXQsIGdlbmV2ZSwgY2ZnLCBpcHY2KTsKIAlpZiAoSVNfRVJSKGdzKSkKIAkJcmV0dXJuIFBUUl9FUlIoZ3MpOwogCiBvdXQ6Ci0JZ3MtJmd0O2NvbGxlY3RfbWQgPSBnZW5ldmUtJmd0O2NmZy5jb2xsZWN0X21kOwotCWdzLSZndDtncm9faGludCA9IGdlbmV2ZS0mZ3Q7Y2ZnLmdyb19oaW50OwomIzQzOwlncy0mZ3Q7Y29sbGVjdF9tZCA9IGNmZy0mZ3Q7Y29sbGVjdF9tZDsKJiM0MzsJZ3MtJmd0O2dyb19oaW50ID0gY2ZnLSZndDtncm9faGludDsKICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQogCWlmIChpcHY2KSB7CiAJCXJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtJmd0O3NvY2s2LCBncyk7CkBAIC0xMTI4LDcgJiM0MzsxMTMzLDcgQEAgc3RhdGljIGludCBnZW5ldmVfc29ja19hZGQoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KQogCX0KIAlub2RlLSZndDtnZW5ldmUgPSBnZW5ldmU7CiAKLQl0dW5uZWxfaWRfdG9fdm5pKGdlbmV2ZS0mZ3Q7Y2ZnLmluZm8ua2V5LnR1bl9pZCwgdm5pKTsKJiM0MzsJdHVubmVsX2lkX3RvX3ZuaShjZmctJmd0O2luZm8ua2V5LnR1bl9pZCwgdm5pKTsKIAloYXNoID0gZ2VuZXZlX25ldF92bmlfaGFzaCh2bmkpOwogCWhsaXN0X2FkZF9oZWFkX3JjdSgmYW1wO25vZGUtJmd0O2hsaXN0LCAmYW1wO2dzLSZndDt2bmlfbGlzdFtoYXNoXSk7CiAJcmV0dXJuIDA7CkBAIC0xMTM3LDIxICYjNDM7MTE0MiwyMyBAQCBzdGF0aWMgaW50IGdlbmV2ZV9zb2NrX2FkZChzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBib29sIGlwdjYpCiBzdGF0aWMgaW50IGdlbmV2ZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiB7CiAJc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7Ci0JYm9vbCBkdWFsc3RhY2sgPSBnZW5ldmUtJmd0O2NmZy5kdWFsc3RhY2s7Ci0JYm9vbCBpcHY0LCBpcHY2OwomIzQzOwljb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnOwomIzQzOwlib29sIGlwdjQsIGlwdjYsIGR1YWxzdGFjazsKIAlpbnQgcmV0ID0gMDsKIAotCWlwdjYgPSBnZW5ldmUtJmd0O2NmZy5pbmZvLm1vZGUgJmFtcDsgSVBfVFVOTkVMX0lORk9fSVBWNiB8fCBkdWFsc3RhY2s7CiYjNDM7CWNmZyA9IHJ0bmxfZGVyZWZlcmVuY2UoZ2VuZXZlLSZndDtjZmcpOwomIzQzOwlkdWFsc3RhY2sgPSBjZmctJmd0O2R1YWxzdGFjazsKJiM0MzsJaXB2NiA9IGNmZy0mZ3Q7aW5mby5tb2RlICZhbXA7IElQX1RVTk5FTF9JTkZPX0lQVjYgfHwgZHVhbHN0YWNrOwogCWlwdjQgPSAhaXB2NiB8fCBkdWFsc3RhY2s7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKIAlpZiAoaXB2NikgewotCQlyZXQgPSBnZW5ldmVfc29ja19hZGQoZ2VuZXZlLCB0cnVlKTsKJiM0MzsJCXJldCA9IGdlbmV2ZV9zb2NrX2FkZChnZW5ldmUsIGNmZywgdHJ1ZSk7CiAJCWlmIChyZXQgJmx0OyAwICZhbXA7JmFtcDsgcmV0ICE9IC1FQUZOT1NVUFBPUlQpCiAJCQlpcHY0ID0gZmFsc2U7CiAJfQogI2VuZGlmCiAJaWYgKGlwdjQpCi0JCXJldCA9IGdlbmV2ZV9zb2NrX2FkZChnZW5ldmUsIGZhbHNlKTsKJiM0MzsJCXJldCA9IGdlbmV2ZV9zb2NrX2FkZChnZW5ldmUsIGNmZywgZmFsc2UpOwogCWlmIChyZXQgJmx0OyAwKQogCQlnZW5ldmVfc29ja19yZWxlYXNlKGdlbmV2ZSk7CiAKQEAgLTExODksNiAmIzQzOzExOTYsNyBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfYnVpbGRfaGVhZGVyKHN0cnVjdCBnZW5ldmVoZHIgKmdlbmV2ZWgsCiB9CiAKIHN0YXRpYyBpbnQgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChjb25zdCBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLAomIzQzOwkJCQkgICAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsCiAJCQkJICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogewogCXN0cnVjdCBnZW5ldmVfc2tiX2NiICpjYiA9IEdFTkVWRV9TS0JfQ0Ioc2tiKTsKQEAgLTEyMDEsNyAmIzQzOzEyMDksNyBAQCBzdGF0aWMgaW50IGdlbmV2ZV9idWlsZF9ncm9faGludF9vcHQoY29uc3Qgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwKIAljYi0mZ3Q7Z3JvX2hpbnRfbGVuID0gMDsKIAogCS8qIFRyeSB0byBhZGQgdGhlIEdSTyBoaW50IG9ubHkgaW4gY2FzZSBvZiBkb3VibGUgZW5jYXAuICovCi0JaWYgKCFnZW5ldmUtJmd0O2NmZy5ncm9faGludCB8fCAhc2tiLSZndDtlbmNhcHN1bGF0aW9uKQomIzQzOwlpZiAoIWNmZy0mZ3Q7Z3JvX2hpbnQgfHwgIXNrYi0mZ3Q7ZW5jYXBzdWxhdGlvbikKIAkJcmV0dXJuIDA7CiAKIAkvKgpAQCAtMTI2MiwxMCAmIzQzOzEyNzAsMTEgQEAgc3RhdGljIHZvaWQgZ2VuZXZlX3B1dF9ncm9faGludF9vcHQoc3RydWN0IGdlbmV2ZWhkciAqZ252aCwgaW50IG9wdF9zaXplLAogCiBzdGF0aWMgaW50IGdlbmV2ZV9idWlsZF9za2Ioc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLAogCQkJICAgIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbywKLQkJCSAgICBjb25zdCBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBpbnQgaXBfaGRyX2xlbikKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZywgaW50IGlwX2hkcl9sZW4pCiB7CiAJYm9vbCB1ZHBfc3VtID0gdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULCBpbmZvLSZndDtrZXkudHVuX2ZsYWdzKTsKLQlib29sIGlubmVyX3Byb3RvX2luaGVyaXQgPSBnZW5ldmUtJmd0O2NmZy5pbm5lcl9wcm90b19pbmhlcml0OwomIzQzOwlib29sIGlubmVyX3Byb3RvX2luaGVyaXQgPSBjZmctJmd0O2lubmVyX3Byb3RvX2luaGVyaXQ7CiAJYm9vbCB4bmV0ID0gIW5ldF9lcShnZW5ldmUtJmd0O25ldCwgZGV2X25ldChnZW5ldmUtJmd0O2RldikpOwogCXN0cnVjdCBnZW5ldmVfc2tiX2NiICpjYiA9IEdFTkVWRV9TS0JfQ0Ioc2tiKTsKIAlzdHJ1Y3QgZ2VuZXZlaGRyICpnbnZoOwpAQCAtMTMwNiwxNCAmIzQzOzEzMTUsMTQgQEAgc3RhdGljIGludCBnZW5ldmVfYnVpbGRfc2tiKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgc3RydWN0IHNrX2J1ZmYgKnNrYiwKIH0KIAogc3RhdGljIHU4IGdlbmV2ZV9nZXRfZHNmaWVsZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAomIzQzOwkJCSAgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZywKIAkJCSAgICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLAogCQkJICAgICBib29sICp1c2VfY2FjaGUpCiB7Ci0Jc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7CiAJdTggZHNmaWVsZDsKIAogCWRzZmllbGQgPSBpbmZvLSZndDtrZXkudG9zOwotCWlmIChkc2ZpZWxkID09IDEgJmFtcDsmYW1wOyAhZ2VuZXZlLSZndDtjZmcuY29sbGVjdF9tZCkgewomIzQzOwlpZiAoY2ZnICZhbXA7JmFtcDsgZHNmaWVsZCA9PSAxICZhbXA7JmFtcDsgIWNmZy0mZ3Q7Y29sbGVjdF9tZCkgewogCQlkc2ZpZWxkID0gaXBfdHVubmVsX2dldF9kc2ZpZWxkKGlwX2hkcihza2IpLCBza2IpOwogCQkqdXNlX2NhY2hlID0gZmFsc2U7CiAJfQpAQCAtMTMyMyw2ICYjNDM7MTMzMiw3IEBAIHN0YXRpYyB1OCBnZW5ldmVfZ2V0X2RzZmllbGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAogc3RhdGljIGludCBnZW5ldmVfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJCSAgIHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsCiYjNDM7CQkJICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZywKIAkJCSAgIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbykKIHsKIAlzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzNCA9IHJjdV9kZXJlZmVyZW5jZShnZW5ldmUtJmd0O3NvY2s0KTsKQEAgLTEzMzUsMzUgJiM0MzsxMzQ1LDM1IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJX19iZTE2IHNwb3J0OwogCWludCBlcnI7CiAKLQlpZiAoc2tiX3ZsYW5faW5ldF9wcmVwYXJlKHNrYiwgZ2VuZXZlLSZndDtjZmcuaW5uZXJfcHJvdG9faW5oZXJpdCkpCiYjNDM7CWlmIChza2Jfdmxhbl9pbmV0X3ByZXBhcmUoc2tiLCBjZmctJmd0O2lubmVyX3Byb3RvX2luaGVyaXQpKQogCQlyZXR1cm4gLUVJTlZBTDsKIAogCWlmICghZ3M0KQogCQlyZXR1cm4gLUVJTzsKIAogCXVzZV9jYWNoZSA9IGlwX3R1bm5lbF9kc3RfY2FjaGVfdXNhYmxlKHNrYiwgaW5mbyk7Ci0JdG9zID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBpbmZvLCAmYW1wO3VzZV9jYWNoZSk7CiYjNDM7CXRvcyA9IGdlbmV2ZV9nZXRfZHNmaWVsZChza2IsIGRldiwgY2ZnLCBpbmZvLCAmYW1wO3VzZV9jYWNoZSk7CiAJc3BvcnQgPSB1ZHBfZmxvd19zcmNfcG9ydChnZW5ldmUtJmd0O25ldCwgc2tiLAotCQkJCSAgZ2VuZXZlLSZndDtjZmcucG9ydF9taW4sCi0JCQkJICBnZW5ldmUtJmd0O2NmZy5wb3J0X21heCwgdHJ1ZSk7CiYjNDM7CQkJCSAgY2ZnLSZndDtwb3J0X21pbiwKJiM0MzsJCQkJICBjZmctJmd0O3BvcnRfbWF4LCB0cnVlKTsKIAogCXJ0ID0gdWRwX3R1bm5lbF9kc3RfbG9va3VwKHNrYiwgZGV2LCBnZW5ldmUtJmd0O25ldCwgMCwgJmFtcDtzYWRkciwKIAkJCQkgICAmYW1wO2luZm8tJmd0O2tleSwKLQkJCQkgICBzcG9ydCwgZ2VuZXZlLSZndDtjZmcuaW5mby5rZXkudHBfZHN0LCB0b3MsCiYjNDM7CQkJCSAgIHNwb3J0LCBjZmctJmd0O2luZm8ua2V5LnRwX2RzdCwgdG9zLAogCQkJCSAgIHVzZV9jYWNoZSA/CiAJCQkJICAgKHN0cnVjdCBkc3RfY2FjaGUgKikmYW1wO2luZm8tJmd0O2RzdF9jYWNoZSA6IE5VTEwpOwogCWlmIChJU19FUlIocnQpKQogCQlyZXR1cm4gUFRSX0VSUihydCk7CiAKLQlpZiAoZ2VuZXZlLSZndDtjZmcuaW5mby5rZXkudS5pcHY0LnNyYyAmYW1wOyZhbXA7Ci0JICAgIHNhZGRyICE9IGdlbmV2ZS0mZ3Q7Y2ZnLmluZm8ua2V5LnUuaXB2NC5zcmMpIHsKJiM0MzsJaWYgKGNmZy0mZ3Q7aW5mby5rZXkudS5pcHY0LnNyYyAmYW1wOyZhbXA7CiYjNDM7CSAgICBzYWRkciAhPSBjZmctJmd0O2luZm8ua2V5LnUuaXB2NC5zcmMpIHsKIAkJZHN0X3JlbGVhc2UoJmFtcDtydC0mZ3Q7ZHN0KTsKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCX0KIAogCWVyciA9IHNrYl90dW5uZWxfY2hlY2tfcG10dShza2IsICZhbXA7cnQtJmd0O2RzdCwKIAkJCQkgICAgR0VORVZFX0lQVjRfSExFTiAmIzQzOyBpbmZvLSZndDtvcHRpb25zX2xlbiAmIzQzOwotCQkJCSAgICBnZW5ldmVfYnVpbGRfZ3JvX2hpbnRfb3B0KGdlbmV2ZSwgc2tiKSwKJiM0MzsJCQkJICAgIGdlbmV2ZV9idWlsZF9ncm9faGludF9vcHQoZ2VuZXZlLCBjZmcsIHNrYiksCiAJCQkJICAgIG5ldGlmX2lzX2FueV9icmlkZ2VfcG9ydChkZXYpKTsKIAlpZiAoZXJyICZsdDsgMCkgewogCQlkc3RfcmVsZWFzZSgmYW1wO3J0LSZndDtkc3QpOwpAQCAtMTM5NywyMSAmIzQzOzE0MDcsMjEgQEAgc3RhdGljIGludCBnZW5ldmVfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAl9CiAKIAl0b3MgPSBpcF90dW5uZWxfZWNuX2VuY2FwKHRvcywgaXBfaGRyKHNrYiksIHNrYik7Ci0JaWYgKGdlbmV2ZS0mZ3Q7Y2ZnLmNvbGxlY3RfbWQpIHsKJiM0MzsJaWYgKGNmZy0mZ3Q7Y29sbGVjdF9tZCkgewogCQl0dGwgPSBrZXktJmd0O3R0bDsKIAogCQlkZiA9IHRlc3RfYml0KElQX1RVTk5FTF9ET05UX0ZSQUdNRU5UX0JJVCwga2V5LSZndDt0dW5fZmxhZ3MpID8KIAkJICAgICBodG9ucyhJUF9ERikgOiAwOwogCX0gZWxzZSB7Ci0JCWlmIChnZW5ldmUtJmd0O2NmZy50dGxfaW5oZXJpdCkKJiM0MzsJCWlmIChjZmctJmd0O3R0bF9pbmhlcml0KQogCQkJdHRsID0gaXBfdHVubmVsX2dldF90dGwoaXBfaGRyKHNrYiksIHNrYik7CiAJCWVsc2UKIAkJCXR0bCA9IGtleS0mZ3Q7dHRsOwogCQl0dGwgPSB0dGwgPyA6IGlwNF9kc3RfaG9wbGltaXQoJmFtcDtydC0mZ3Q7ZHN0KTsKIAotCQlpZiAoZ2VuZXZlLSZndDtjZmcuZGYgPT0gR0VORVZFX0RGX1NFVCkgewomIzQzOwkJaWYgKGNmZy0mZ3Q7ZGYgPT0gR0VORVZFX0RGX1NFVCkgewogCQkJZGYgPSBodG9ucyhJUF9ERik7Ci0JCX0gZWxzZSBpZiAoZ2VuZXZlLSZndDtjZmcuZGYgPT0gR0VORVZFX0RGX0lOSEVSSVQpIHsKJiM0MzsJCX0gZWxzZSBpZiAoY2ZnLSZndDtkZiA9PSBHRU5FVkVfREZfSU5IRVJJVCkgewogCQkJc3RydWN0IGV0aGhkciAqZXRoID0gc2tiX2V0aF9oZHIoc2tiKTsKIAogCQkJaWYgKG50b2hzKGV0aC0mZ3Q7aF9wcm90bykgPT0gRVRIX1BfSVBWNikgewpAQCAtMTQyNSwxMyAmIzQzOzE0MzUsMTMgQEAgc3RhdGljIGludCBnZW5ldmVfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAkJfQogCX0KIAotCWVyciA9IGdlbmV2ZV9idWlsZF9za2IoJmFtcDtydC0mZ3Q7ZHN0LCBza2IsIGluZm8sIGdlbmV2ZSwKJiM0MzsJZXJyID0gZ2VuZXZlX2J1aWxkX3NrYigmYW1wO3J0LSZndDtkc3QsIHNrYiwgaW5mbywgZ2VuZXZlLCBjZmcsCiAJCQkgICAgICAgc2l6ZW9mKHN0cnVjdCBpcGhkcikpOwogCWlmICh1bmxpa2VseShlcnIpKQogCQlyZXR1cm4gZXJyOwogCiAJdWRwX3R1bm5lbF94bWl0X3NrYihydCwgZ3M0LSZndDtzaywgc2tiLCBzYWRkciwgaW5mby0mZ3Q7a2V5LnUuaXB2NC5kc3QsCi0JCQkgICAgdG9zLCB0dGwsIGRmLCBzcG9ydCwgZ2VuZXZlLSZndDtjZmcuaW5mby5rZXkudHBfZHN0LAomIzQzOwkJCSAgICB0b3MsIHR0bCwgZGYsIHNwb3J0LCBjZmctJmd0O2luZm8ua2V5LnRwX2RzdCwKIAkJCSAgICAhbmV0X2VxKGdlbmV2ZS0mZ3Q7bmV0LCBkZXZfbmV0KGdlbmV2ZS0mZ3Q7ZGV2KSksCiAJCQkgICAgIXRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCwgaW5mby0mZ3Q7a2V5LnR1bl9mbGFncyksCiAJCQkgICAgMCk7CkBAIC0xNDQxLDYgJiM0MzsxNDUxLDcgQEAgc3RhdGljIGludCBnZW5ldmVfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQogc3RhdGljIGludCBnZW5ldmU2X3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJCQkgICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwKJiM0MzsJCQkgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZywKIAkJCSAgICBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGdlbmV2ZV9zb2NrICpnczYgPSByY3VfZGVyZWZlcmVuY2UoZ2VuZXZlLSZndDtzb2NrNik7CkBAIC0xNDUyLDM1ICYjNDM7MTQ2MywzNSBAQCBzdGF0aWMgaW50IGdlbmV2ZTZfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlfX2JlMTYgc3BvcnQ7CiAJaW50IGVycjsKIAotCWlmIChza2Jfdmxhbl9pbmV0X3ByZXBhcmUoc2tiLCBnZW5ldmUtJmd0O2NmZy5pbm5lcl9wcm90b19pbmhlcml0KSkKJiM0MzsJaWYgKHNrYl92bGFuX2luZXRfcHJlcGFyZShza2IsIGNmZy0mZ3Q7aW5uZXJfcHJvdG9faW5oZXJpdCkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFnczYpCiAJCXJldHVybiAtRUlPOwogCiAJdXNlX2NhY2hlID0gaXBfdHVubmVsX2RzdF9jYWNoZV91c2FibGUoc2tiLCBpbmZvKTsKLQlwcmlvID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBpbmZvLCAmYW1wO3VzZV9jYWNoZSk7CiYjNDM7CXByaW8gPSBnZW5ldmVfZ2V0X2RzZmllbGQoc2tiLCBkZXYsIGNmZywgaW5mbywgJmFtcDt1c2VfY2FjaGUpOwogCXNwb3J0ID0gdWRwX2Zsb3dfc3JjX3BvcnQoZ2VuZXZlLSZndDtuZXQsIHNrYiwKLQkJCQkgIGdlbmV2ZS0mZ3Q7Y2ZnLnBvcnRfbWluLAotCQkJCSAgZ2VuZXZlLSZndDtjZmcucG9ydF9tYXgsIHRydWUpOwomIzQzOwkJCQkgIGNmZy0mZ3Q7cG9ydF9taW4sCiYjNDM7CQkJCSAgY2ZnLSZndDtwb3J0X21heCwgdHJ1ZSk7CiAKIAlkc3QgPSB1ZHBfdHVubmVsNl9kc3RfbG9va3VwKHNrYiwgZGV2LCBnZW5ldmUtJmd0O25ldCwgZ3M2LSZndDtzaywgMCwKIAkJCQkgICAgICZhbXA7c2FkZHIsIGtleSwgc3BvcnQsCi0JCQkJICAgICBnZW5ldmUtJmd0O2NmZy5pbmZvLmtleS50cF9kc3QsIHByaW8sCiYjNDM7CQkJCSAgICAgY2ZnLSZndDtpbmZvLmtleS50cF9kc3QsIHByaW8sCiAJCQkJICAgICB1c2VfY2FjaGUgPwogCQkJCSAgICAgKHN0cnVjdCBkc3RfY2FjaGUgKikmYW1wO2luZm8tJmd0O2RzdF9jYWNoZSA6IE5VTEwpOwogCWlmIChJU19FUlIoZHN0KSkKIAkJcmV0dXJuIFBUUl9FUlIoZHN0KTsKIAotCWlmICghaXB2Nl9hZGRyX2FueSgmYW1wO2dlbmV2ZS0mZ3Q7Y2ZnLmluZm8ua2V5LnUuaXB2Ni5zcmMpICZhbXA7JmFtcDsKLQkgICAgIWlwdjZfYWRkcl9lcXVhbCgmYW1wO3NhZGRyLCAmYW1wO2dlbmV2ZS0mZ3Q7Y2ZnLmluZm8ua2V5LnUuaXB2Ni5zcmMpKSB7CiYjNDM7CWlmICghaXB2Nl9hZGRyX2FueSgmYW1wO2NmZy0mZ3Q7aW5mby5rZXkudS5pcHY2LnNyYykgJmFtcDsmYW1wOwomIzQzOwkgICAgIWlwdjZfYWRkcl9lcXVhbCgmYW1wO3NhZGRyLCAmYW1wO2NmZy0mZ3Q7aW5mby5rZXkudS5pcHY2LnNyYykpIHsKIAkJZHN0X3JlbGVhc2UoZHN0KTsKIAkJcmV0dXJuIC1FQUREUk5PVEFWQUlMOwogCX0KIAogCWVyciA9IHNrYl90dW5uZWxfY2hlY2tfcG10dShza2IsIGRzdCwKIAkJCQkgICAgR0VORVZFX0lQVjZfSExFTiAmIzQzOyBpbmZvLSZndDtvcHRpb25zX2xlbiAmIzQzOwotCQkJCSAgICBnZW5ldmVfYnVpbGRfZ3JvX2hpbnRfb3B0KGdlbmV2ZSwgc2tiKSwKJiM0MzsJCQkJICAgIGdlbmV2ZV9idWlsZF9ncm9faGludF9vcHQoZ2VuZXZlLCBjZmcsIHNrYiksCiAJCQkJICAgIG5ldGlmX2lzX2FueV9icmlkZ2VfcG9ydChkZXYpKTsKIAlpZiAoZXJyICZsdDsgMCkgewogCQlkc3RfcmVsZWFzZShkc3QpOwpAQCAtMTUxMywyMiAmIzQzOzE1MjQsMjIgQEAgc3RhdGljIGludCBnZW5ldmU2X3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAJfQogCiAJcHJpbyA9IGlwX3R1bm5lbF9lY25fZW5jYXAocHJpbywgaXBfaGRyKHNrYiksIHNrYik7Ci0JaWYgKGdlbmV2ZS0mZ3Q7Y2ZnLmNvbGxlY3RfbWQpIHsKJiM0MzsJaWYgKGNmZy0mZ3Q7Y29sbGVjdF9tZCkgewogCQl0dGwgPSBrZXktJmd0O3R0bDsKIAl9IGVsc2UgewotCQlpZiAoZ2VuZXZlLSZndDtjZmcudHRsX2luaGVyaXQpCiYjNDM7CQlpZiAoY2ZnLSZndDt0dGxfaW5oZXJpdCkKIAkJCXR0bCA9IGlwX3R1bm5lbF9nZXRfdHRsKGlwX2hkcihza2IpLCBza2IpOwogCQllbHNlCiAJCQl0dGwgPSBrZXktJmd0O3R0bDsKIAkJdHRsID0gdHRsID8gOiBpcDZfZHN0X2hvcGxpbWl0KGRzdCk7CiAJfQotCWVyciA9IGdlbmV2ZV9idWlsZF9za2IoZHN0LCBza2IsIGluZm8sIGdlbmV2ZSwgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7CiYjNDM7CWVyciA9IGdlbmV2ZV9idWlsZF9za2IoZHN0LCBza2IsIGluZm8sIGdlbmV2ZSwgY2ZnLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTsKIAlpZiAodW5saWtlbHkoZXJyKSkKIAkJcmV0dXJuIGVycjsKIAogCXVkcF90dW5uZWw2X3htaXRfc2tiKGRzdCwgZ3M2LSZndDtzaywgc2tiLCBkZXYsCiAJCQkgICAgICZhbXA7c2FkZHIsICZhbXA7a2V5LSZndDt1LmlwdjYuZHN0LCBwcmlvLCB0dGwsCi0JCQkgICAgIGluZm8tJmd0O2tleS5sYWJlbCwgc3BvcnQsIGdlbmV2ZS0mZ3Q7Y2ZnLmluZm8ua2V5LnRwX2RzdCwKJiM0MzsJCQkgICAgIGluZm8tJmd0O2tleS5sYWJlbCwgc3BvcnQsIGNmZy0mZ3Q7aW5mby5rZXkudHBfZHN0LAogCQkJICAgICAhdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULAogCQkJCSAgICAgICBpbmZvLSZndDtrZXkudHVuX2ZsYWdzKSwKIAkJCSAgICAgMCk7CkBAIC0xNTM5LDI4ICYjNDM7MTU1MCwzMSBAQCBzdGF0aWMgaW50IGdlbmV2ZTZfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIHN0YXRpYyBuZXRkZXZfdHhfdCBnZW5ldmVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewogCXN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9IE5VTEw7CiYjNDM7CWNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9IE5VTEw7CiYjNDM7CWNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmc7CiAJaW50IGVycjsKIAotCWlmIChnZW5ldmUtJmd0O2NmZy5jb2xsZWN0X21kKSB7CiYjNDM7CXJjdV9yZWFkX2xvY2soKTsKJiM0MzsJY2ZnID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS0mZ3Q7Y2ZnKTsKJiM0MzsJaWYgKGNmZy0mZ3Q7Y29sbGVjdF9tZCkgewogCQlpbmZvID0gc2tiX3R1bm5lbF9pbmZvKHNrYik7CiAJCWlmICh1bmxpa2VseSghaW5mbyB8fCAhKGluZm8tJmd0O21vZGUgJmFtcDsgSVBfVFVOTkVMX0lORk9fVFgpKSkgewogCQkJbmV0ZGV2X2RiZyhkZXYsICYjMzQ7bm8gdHVubmVsIG1ldGFkYXRhXG4mIzM0Oyk7CiAJCQlkZXZfa2ZyZWVfc2tiKHNrYik7CiAJCQlkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoZGV2KTsKJiM0MzsJCQlyY3VfcmVhZF91bmxvY2soKTsKIAkJCXJldHVybiBORVRERVZfVFhfT0s7CiAJCX0KIAl9IGVsc2UgewotCQlpbmZvID0gJmFtcDtnZW5ldmUtJmd0O2NmZy5pbmZvOwomIzQzOwkJaW5mbyA9ICZhbXA7Y2ZnLSZndDtpbmZvOwogCX0KIAotCXJjdV9yZWFkX2xvY2soKTsKICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQogCWlmIChpbmZvLSZndDttb2RlICZhbXA7IElQX1RVTk5FTF9JTkZPX0lQVjYpCi0JCWVyciA9IGdlbmV2ZTZfeG1pdF9za2Ioc2tiLCBkZXYsIGdlbmV2ZSwgaW5mbyk7CiYjNDM7CQllcnIgPSBnZW5ldmU2X3htaXRfc2tiKHNrYiwgZGV2LCBnZW5ldmUsIGNmZywgaW5mbyk7CiAJZWxzZQogI2VuZGlmCi0JCWVyciA9IGdlbmV2ZV94bWl0X3NrYihza2IsIGRldiwgZ2VuZXZlLCBpbmZvKTsKJiM0MzsJCWVyciA9IGdlbmV2ZV94bWl0X3NrYihza2IsIGRldiwgZ2VuZXZlLCBjZmcsIGluZm8pOwogCXJjdV9yZWFkX3VubG9jaygpOwogCiAJaWYgKGxpa2VseSghZXJyKSkKQEAgLTE1OTMsOCAmIzQzOzE2MDcsMTMgQEAgc3RhdGljIGludCBnZW5ldmVfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIHsKIAlzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBza2JfdHVubmVsX2luZm8oc2tiKTsKIAlzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTsKJiM0MzsJY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZzsKIAlfX2JlMTYgc3BvcnQ7CiAKJiM0MzsJY2ZnID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS0mZ3Q7Y2ZnKTsKJiM0MzsJaWYgKHVubGlrZWx5KCFjZmcpKQomIzQzOwkJcmV0dXJuIC1FTk9ERVY7CiYjNDM7CiAJaWYgKGlwX3R1bm5lbF9pbmZvX2FmKGluZm8pID09IEFGX0lORVQpIHsKIAkJc3RydWN0IHJ0YWJsZSAqcnQ7CiAJCXN0cnVjdCBnZW5ldmVfc29jayAqZ3M0ID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS0mZ3Q7c29jazQpOwpAQCAtMTYwNiwxNCAmIzQzOzE2MjUsMTQgQEAgc3RhdGljIGludCBnZW5ldmVfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYikKIAkJCXJldHVybiAtRUlPOwogCiAJCXVzZV9jYWNoZSA9IGlwX3R1bm5lbF9kc3RfY2FjaGVfdXNhYmxlKHNrYiwgaW5mbyk7Ci0JCXRvcyA9IGdlbmV2ZV9nZXRfZHNmaWVsZChza2IsIGRldiwgaW5mbywgJmFtcDt1c2VfY2FjaGUpOwomIzQzOwkJdG9zID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBjZmcsIGluZm8sICZhbXA7dXNlX2NhY2hlKTsKIAkJc3BvcnQgPSB1ZHBfZmxvd19zcmNfcG9ydChnZW5ldmUtJmd0O25ldCwgc2tiLAotCQkJCQkgIGdlbmV2ZS0mZ3Q7Y2ZnLnBvcnRfbWluLAotCQkJCQkgIGdlbmV2ZS0mZ3Q7Y2ZnLnBvcnRfbWF4LCB0cnVlKTsKJiM0MzsJCQkJCSAgY2ZnLSZndDtwb3J0X21pbiwKJiM0MzsJCQkJCSAgY2ZnLSZndDtwb3J0X21heCwgdHJ1ZSk7CiAKIAkJcnQgPSB1ZHBfdHVubmVsX2RzdF9sb29rdXAoc2tiLCBkZXYsIGdlbmV2ZS0mZ3Q7bmV0LCAwLCAmYW1wO3NhZGRyLAogCQkJCQkgICAmYW1wO2luZm8tJmd0O2tleSwKLQkJCQkJICAgc3BvcnQsIGdlbmV2ZS0mZ3Q7Y2ZnLmluZm8ua2V5LnRwX2RzdCwKJiM0MzsJCQkJCSAgIHNwb3J0LCBjZmctJmd0O2luZm8ua2V5LnRwX2RzdCwKIAkJCQkJICAgdG9zLAogCQkJCQkgICB1c2VfY2FjaGUgPyAmYW1wO2luZm8tJmd0O2RzdF9jYWNoZSA6IE5VTEwpOwogCQlpZiAoSVNfRVJSKHJ0KSkKQEAgLTE2MzMsMTQgJiM0MzsxNjUyLDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpCiAJCQlyZXR1cm4gLUVJTzsKIAogCQl1c2VfY2FjaGUgPSBpcF90dW5uZWxfZHN0X2NhY2hlX3VzYWJsZShza2IsIGluZm8pOwotCQlwcmlvID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBpbmZvLCAmYW1wO3VzZV9jYWNoZSk7CiYjNDM7CQlwcmlvID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBjZmcsIGluZm8sICZhbXA7dXNlX2NhY2hlKTsKIAkJc3BvcnQgPSB1ZHBfZmxvd19zcmNfcG9ydChnZW5ldmUtJmd0O25ldCwgc2tiLAotCQkJCQkgIGdlbmV2ZS0mZ3Q7Y2ZnLnBvcnRfbWluLAotCQkJCQkgIGdlbmV2ZS0mZ3Q7Y2ZnLnBvcnRfbWF4LCB0cnVlKTsKJiM0MzsJCQkJCSAgY2ZnLSZndDtwb3J0X21pbiwKJiM0MzsJCQkJCSAgY2ZnLSZndDtwb3J0X21heCwgdHJ1ZSk7CiAKIAkJZHN0ID0gdWRwX3R1bm5lbDZfZHN0X2xvb2t1cChza2IsIGRldiwgZ2VuZXZlLSZndDtuZXQsIGdzNi0mZ3Q7c2ssIDAsCiAJCQkJCSAgICAgJmFtcDtzYWRkciwgJmFtcDtpbmZvLSZndDtrZXksIHNwb3J0LAotCQkJCQkgICAgIGdlbmV2ZS0mZ3Q7Y2ZnLmluZm8ua2V5LnRwX2RzdCwgcHJpbywKJiM0MzsJCQkJCSAgICAgY2ZnLSZndDtpbmZvLmtleS50cF9kc3QsIHByaW8sCiAJCQkJCSAgICAgdXNlX2NhY2hlID8gJmFtcDtpbmZvLSZndDtkc3RfY2FjaGUgOiBOVUxMKTsKIAkJaWYgKElTX0VSUihkc3QpKQogCQkJcmV0dXJuIFBUUl9FUlIoZHN0KTsKQEAgLTE2NTMsNyAmIzQzOzE2NzIsNyBAQCBzdGF0aWMgaW50IGdlbmV2ZV9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQogCX0KIAogCWluZm8tJmd0O2tleS50cF9zcmMgPSBzcG9ydDsKLQlpbmZvLSZndDtrZXkudHBfZHN0ID0gZ2VuZXZlLSZndDtjZmcuaW5mby5rZXkudHBfZHN0OwomIzQzOwlpbmZvLSZndDtrZXkudHBfZHN0ID0gY2ZnLSZndDtpbmZvLmtleS50cF9kc3Q7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTE3MDksNyAmIzQzOzE3MjgsNTAgQEAgc3RhdGljIHZvaWQgZ2VuZXZlX29mZmxvYWRfcnhfcG9ydHMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgYm9vbCBwdXNoKQogCX0KIH0KIAomIzQzO3N0YXRpYyBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqZ2VuZXZlX2NvbmZpZ19hbGxvYyhjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqc3JjKQomIzQzO3sKJiM0MzsJc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZzsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJY2ZnID0ga21lbWR1cChzcmMsIHNpemVvZigqc3JjKSwgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmICghY2ZnKQomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CiYjNDM7CWNmZy0mZ3Q7aW5mby5kc3RfY2FjaGUuY2FjaGUgPSBOVUxMOwomIzQzOwllcnIgPSBkc3RfY2FjaGVfaW5pdCgmYW1wO2NmZy0mZ3Q7aW5mby5kc3RfY2FjaGUsIEdGUF9LRVJORUwpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlrZnJlZShjZmcpOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gY2ZnOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBnZW5ldmVfY29uZmlnX2ZyZWUoc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZykKJiM0Mzt7CiYjNDM7CWlmIChjZmcpIHsKJiM0MzsJCWRzdF9jYWNoZV9kZXN0cm95KCZhbXA7Y2ZnLSZndDtpbmZvLmRzdF9jYWNoZSk7CiYjNDM7CQlrZnJlZShjZmcpOwomIzQzOwl9CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGdlbmV2ZV9jb25maWdfZnJlZV9yY3Uoc3RydWN0IHJjdV9oZWFkICpoZWFkKQomIzQzO3sKJiM0MzsJc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZywgcmN1KTsKJiM0MzsKJiM0MzsJZ2VuZXZlX2NvbmZpZ19mcmVlKGNmZyk7CiYjNDM7fQomIzQzOwogLyogSW5pdGlhbGl6ZSB0aGUgZGV2aWNlIHN0cnVjdHVyZS4gKi8KJiM0MztzdGF0aWMgdm9pZCBnZW5ldmVfZnJlZV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnID0gcmN1X2RlcmVmZXJlbmNlX3Byb3RlY3RlZChnZW5ldmUtJmd0O2NmZywgMSk7CiYjNDM7CiYjNDM7CWdlbmV2ZV9jb25maWdfZnJlZShjZmcpOwomIzQzOwlSQ1VfSU5JVF9QT0lOVEVSKGdlbmV2ZS0mZ3Q7Y2ZnLCBOVUxMKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBnZW5ldmVfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKIHsKIAlldGhlcl9zZXR1cChkZXYpOwpAQCAtMTcxNyw2ICYjNDM7MTc3OSw3IEBAIHN0YXRpYyB2b2lkIGdlbmV2ZV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCWRldi0mZ3Q7bmV0ZGV2X29wcyA9ICZhbXA7Z2VuZXZlX25ldGRldl9vcHM7CiAJZGV2LSZndDtldGh0b29sX29wcyA9ICZhbXA7Z2VuZXZlX2V0aHRvb2xfb3BzOwogCWRldi0mZ3Q7bmVlZHNfZnJlZV9uZXRkZXYgPSB0cnVlOwomIzQzOwlkZXYtJmd0O3ByaXZfZGVzdHJ1Y3RvciA9IGdlbmV2ZV9mcmVlX2RldjsKIAogCVNFVF9ORVRERVZfREVWVFlQRShkZXYsICZhbXA7Z2VuZXZlX3R5cGUpOwogCkBAIC0xODc4LDE1ICYjNDM7MTk0MSwxNyBAQCBzdGF0aWMgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZV9maW5kX2RldihzdHJ1Y3QgZ2VuZXZlX25ldCAqZ24sCiAJKnR1bl9vbl9zYW1lX3BvcnQgPSBmYWxzZTsKIAkqdHVuX2NvbGxlY3RfbWQgPSBmYWxzZTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KGdlbmV2ZSwgJmFtcDtnbi0mZ3Q7Z2VuZXZlX2xpc3QsIG5leHQpIHsKLQkJaWYgKGluZm8tJmd0O2tleS50cF9kc3QgPT0gZ2VuZXZlLSZndDtjZmcuaW5mby5rZXkudHBfZHN0ICZhbXA7JmFtcDsKLQkJICAgIChjZmctJmd0O2R1YWxzdGFjayB8fCBnZW5ldmUtJmd0O2NmZy5kdWFsc3RhY2sgfHwKLQkJICAgICBnZW5ldmVfc2FkZHJfY29uZmxpY3QoaW5mbywgJmFtcDtnZW5ldmUtJmd0O2NmZy5pbmZvKSkpIHsKLQkJCSp0dW5fY29sbGVjdF9tZCB8PSBnZW5ldmUtJmd0O2NmZy5jb2xsZWN0X21kOwomIzQzOwkJY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmdjZmcgPSBydG5sX2RlcmVmZXJlbmNlKGdlbmV2ZS0mZ3Q7Y2ZnKTsKJiM0MzsKJiM0MzsJCWlmIChpbmZvLSZndDtrZXkudHBfZHN0ID09IGdjZmctJmd0O2luZm8ua2V5LnRwX2RzdCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgKGNmZy0mZ3Q7ZHVhbHN0YWNrIHx8IGdjZmctJmd0O2R1YWxzdGFjayB8fAomIzQzOwkJICAgICBnZW5ldmVfc2FkZHJfY29uZmxpY3QoaW5mbywgJmFtcDtnY2ZnLSZndDtpbmZvKSkpIHsKJiM0MzsJCQkqdHVuX2NvbGxlY3RfbWQgfD0gZ2NmZy0mZ3Q7Y29sbGVjdF9tZDsKIAkJCSp0dW5fb25fc2FtZV9wb3J0ID0gdHJ1ZTsKIAkJfQotCQlpZiAoaW5mby0mZ3Q7a2V5LnR1bl9pZCA9PSBnZW5ldmUtJmd0O2NmZy5pbmZvLmtleS50dW5faWQgJmFtcDsmYW1wOwotCQkgICAgaW5mby0mZ3Q7a2V5LnRwX2RzdCA9PSBnZW5ldmUtJmd0O2NmZy5pbmZvLmtleS50cF9kc3QgJmFtcDsmYW1wOwotCQkgICAgIW1lbWNtcCgmYW1wO2luZm8tJmd0O2tleS51LCAmYW1wO2dlbmV2ZS0mZ3Q7Y2ZnLmluZm8ua2V5LnUsIHNpemVvZihpbmZvLSZndDtrZXkudSkpKQomIzQzOwkJaWYgKGluZm8tJmd0O2tleS50dW5faWQgPT0gZ2NmZy0mZ3Q7aW5mby5rZXkudHVuX2lkICZhbXA7JmFtcDsKJiM0MzsJCSAgICBpbmZvLSZndDtrZXkudHBfZHN0ID09IGdjZmctJmd0O2luZm8ua2V5LnRwX2RzdCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIW1lbWNtcCgmYW1wO2luZm8tJmd0O2tleS51LCAmYW1wO2djZmctJmd0O2luZm8ua2V5LnUsIHNpemVvZihpbmZvLSZndDtrZXkudSkpKQogCQkJdCA9IGdlbmV2ZTsKIAl9CiAJcmV0dXJuIHQ7CkBAIC0xOTIyLDYgJiM0MzsxOTg3LDcgQEAgc3RhdGljIGludCBnZW5ldmVfY29uZmlndXJlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlzdHJ1Y3QgZ2VuZXZlX2RldiAqdCwgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7CiAJY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gJmFtcDtjZmctJmd0O2luZm87CiAJYm9vbCB0dW5fY29sbGVjdF9tZCwgdHVuX29uX3NhbWVfcG9ydDsKJiM0MzsJc3RydWN0IGdlbmV2ZV9jb25maWcgKm5ld19jZmc7CiAJaW50IGVyciwgZW5jYXBfbGVuOwogCiAJaWYgKGNmZy0mZ3Q7Y29sbGVjdF9tZCAmYW1wOyZhbXA7ICFpc190bmxfaW5mb196ZXJvKGluZm8pKSB7CkBAIC0xOTYyLDEwICYjNDM7MjAyOCwxMyBAQCBzdGF0aWMgaW50IGdlbmV2ZV9jb25maWd1cmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogCQl9CiAJfQogCi0JZHN0X2NhY2hlX3Jlc2V0KCZhbXA7Z2VuZXZlLSZndDtjZmcuaW5mby5kc3RfY2FjaGUpOwotCW1lbWNweSgmYW1wO2dlbmV2ZS0mZ3Q7Y2ZnLCBjZmcsIHNpemVvZigqY2ZnKSk7CiYjNDM7CW5ld19jZmcgPSBnZW5ldmVfY29uZmlnX2FsbG9jKGNmZyk7CiYjNDM7CWlmIChJU19FUlIobmV3X2NmZykpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihuZXdfY2ZnKTsKJiM0MzsKJiM0MzsJcmN1X2Fzc2lnbl9wb2ludGVyKGdlbmV2ZS0mZ3Q7Y2ZnLCBuZXdfY2ZnKTsKIAotCWlmIChnZW5ldmUtJmd0O2NmZy5pbm5lcl9wcm90b19pbmhlcml0KSB7CiYjNDM7CWlmIChjZmctJmd0O2lubmVyX3Byb3RvX2luaGVyaXQpIHsKIAkJZGV2LSZndDtoZWFkZXJfb3BzID0gTlVMTDsKIAkJZGV2LSZndDt0eXBlID0gQVJQSFJEX05PTkU7CiAJCWRldi0mZ3Q7aGFyZF9oZWFkZXJfbGVuID0gMDsKQEAgLTIzMjMsODEgJiM0MzsyMzkyLDQ1IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKIAlyZXR1cm4gMDsKIH0KIAotLyogUXVpZXNjZXMgdGhlIGdlbmV2ZSBkZXZpY2UgZGF0YSBwYXRoIGZvciBib3RoIFRYIGFuZCBSWC4KLSAqCi0gKiBPbiB0cmFuc21pdCBnZW5ldmUgY2hlY2tzIGZvciBub24tTlVMTCBnZW5ldmVfc29jayBiZWZvcmUgaXQgcHJvY2VlZHMuCi0gKiBTbywgaWYgd2Ugc2V0IHRoYXQgc29ja2V0IHRvIE5VTEwgdW5kZXIgUkNVIGFuZCB3YWl0IGZvciBzeW5jaHJvbml6ZV9uZXQoKQotICogdG8gY29tcGxldGUgZm9yIHRoZSBleGlzdGluZyBzZXQgb2YgaW4tZmxpZ2h0IHBhY2tldHMgdG8gYmUgdHJhbnNtaXR0ZWQsCi0gKiB0aGVuIHdlIHdvdWxkIGhhdmUgcXVpZXNjZWQgdGhlIHRyYW5zbWl0IGRhdGEgcGF0aC4gQWxsIHRoZSBmdXR1cmUgcGFja2V0cwotICogd2lsbCBnZXQgZHJvcHBlZCB1bnRpbCB3ZSB1bnF1aWVzY2UgdGhlIGRhdGEgcGF0aC4KLSAqCi0gKiBPbiByZWNlaXZlIGdlbmV2ZSBkZXJlZmVyZW5jZSB0aGUgZ2VuZXZlX3NvY2sgc3Rhc2hlZCBpbiB0aGUgc29ja2V0LiBTbywKLSAqIGlmIHdlIHNldCB0aGF0IHRvIE5VTEwgdW5kZXIgUkNVIGFuZCB3YWl0IGZvciBzeW5jaHJvbml6ZV9uZXQoKSB0bwotICogY29tcGxldGUsIHRoZW4gd2Ugd291bGQgaGF2ZSBxdWllc2NlZCB0aGUgcmVjZWl2ZSBkYXRhIHBhdGguCiYjNDM7LyogVXBkYXRlIHRoZSBkZXZpY2UgY29uZmlndXJhdGlvbiB1bmRlciBSVE5MLgomIzQzOyAqIFdlIHVzZSBSQ1Ugc3dhcCB0byB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gYXRvbWljYWxseSwgc28gdGhlIGRhdGEgcGF0aAomIzQzOyAqIChib3RoIFRYIGFuZCBSWCkgY2FuIGNvbnRpbnVlIHJ1bm5pbmcgd2l0aG91dCBpbnRlcnJ1cHRpb24gb3IgcGFja2V0IGxvc3MuCiAgKi8KLXN0YXRpYyB2b2lkIGdlbmV2ZV9xdWllc2NlKHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsIHN0cnVjdCBnZW5ldmVfc29jayAqKmdzNCwKLQkJCSAgIHN0cnVjdCBnZW5ldmVfc29jayAqKmdzNikKLXsKLQkqZ3M0ID0gcnRubF9kZXJlZmVyZW5jZShnZW5ldmUtJmd0O3NvY2s0KTsKLQlyY3VfYXNzaWduX3BvaW50ZXIoZ2VuZXZlLSZndDtzb2NrNCwgTlVMTCk7Ci0JaWYgKCpnczQpCi0JCXJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKCgqZ3M0KS0mZ3Q7c2ssIE5VTEwpOwotI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpCi0JKmdzNiA9IHJ0bmxfZGVyZWZlcmVuY2UoZ2VuZXZlLSZndDtzb2NrNik7Ci0JcmN1X2Fzc2lnbl9wb2ludGVyKGdlbmV2ZS0mZ3Q7c29jazYsIE5VTEwpOwotCWlmICgqZ3M2KQotCQlyY3VfYXNzaWduX3NrX3VzZXJfZGF0YSgoKmdzNiktJmd0O3NrLCBOVUxMKTsKLSNlbHNlCi0JKmdzNiA9IE5VTEw7Ci0jZW5kaWYKLQlzeW5jaHJvbml6ZV9uZXQoKTsKLX0KLQotLyogUmVzdW1lcyB0aGUgZ2VuZXZlIGRldmljZSBkYXRhIHBhdGggZm9yIGJvdGggVFggYW5kIFJYLiAqLwotc3RhdGljIHZvaWQgZ2VuZXZlX3VucXVpZXNjZShzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzNCwKLQkJCSAgICAgc3RydWN0IGdlbmV2ZV9zb2NrIF9fbWF5YmVfdW51c2VkICpnczYpCi17Ci0JcmN1X2Fzc2lnbl9wb2ludGVyKGdlbmV2ZS0mZ3Q7c29jazQsIGdzNCk7Ci0JaWYgKGdzNCkKLQkJcmN1X2Fzc2lnbl9za191c2VyX2RhdGEoZ3M0LSZndDtzaywgZ3M0KTsKLSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KQotCXJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtJmd0O3NvY2s2LCBnczYpOwotCWlmIChnczYpCi0JCXJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKGdzNi0mZ3Q7c2ssIGdzNik7Ci0jZW5kaWYKLX0KLQogc3RhdGljIGludCBnZW5ldmVfY2hhbmdlbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbmxhdHRyICp0YltdLAogCQkJICAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sCiAJCQkgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKIHsKIAlzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTsKLQlzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzNCwgKmdzNjsKLQlzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyBjZmc7CiYjNDM7CXN0cnVjdCBnZW5ldmVfY29uZmlnICpvbGRfY2ZnID0gcnRubF9kZXJlZmVyZW5jZShnZW5ldmUtJmd0O2NmZyk7CiYjNDM7CXN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmc7CiAJaW50IGVycjsKIAogCS8qIElmIHRoZSBnZW5ldmUgZGV2aWNlIGlzIGNvbmZpZ3VyZWQgZm9yIG1ldGFkYXRhIChvciBleHRlcm5hbGx5CiAJICogY29udHJvbGxlZCwgZm9yIGV4YW1wbGUsIE9WUyksIHRoZW4gbm90aGluZyBjYW4gYmUgY2hhbmdlZC4KIAkgKi8KLQlpZiAoZ2VuZXZlLSZndDtjZmcuY29sbGVjdF9tZCkKJiM0MzsJaWYgKG9sZF9jZmctJmd0O2NvbGxlY3RfbWQpCiAJCXJldHVybiAtRU9QTk9UU1VQUDsKIAogCS8qIFN0YXJ0IHdpdGggdGhlIGV4aXN0aW5nIGluZm8uICovCi0JbWVtY3B5KCZhbXA7Y2ZnLCAmYW1wO2dlbmV2ZS0mZ3Q7Y2ZnLCBzaXplb2YoY2ZnKSk7Ci0JZXJyID0gZ2VuZXZlX25sMmluZm8odGIsIGRhdGEsIGV4dGFjaywgJmFtcDtjZmcsIHRydWUpOwomIzQzOwljZmcgPSBnZW5ldmVfY29uZmlnX2FsbG9jKG9sZF9jZmcpOwomIzQzOwlpZiAoSVNfRVJSKGNmZykpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihjZmcpOwomIzQzOwomIzQzOwllcnIgPSBnZW5ldmVfbmwyaW5mbyh0YiwgZGF0YSwgZXh0YWNrLCBjZmcsIHRydWUpOwogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CiYjNDM7CQlnb3RvIGVycl9mcmVlX2NmZzsKIAotCWlmICghZ2VuZXZlX2RzdF9hZGRyX2VxdWFsKCZhbXA7Z2VuZXZlLSZndDtjZmcuaW5mbywgJmFtcDtjZmcuaW5mbykpIHsKLQkJZHN0X2NhY2hlX3Jlc2V0KCZhbXA7Y2ZnLmluZm8uZHN0X2NhY2hlKTsKLQkJZ2VuZXZlX2xpbmtfY29uZmlnKGRldiwgJmFtcDtjZmcuaW5mbywgdGIpOwotCX0KJiM0MzsJaWYgKCFnZW5ldmVfZHN0X2FkZHJfZXF1YWwoJmFtcDtvbGRfY2ZnLSZndDtpbmZvLCAmYW1wO2NmZy0mZ3Q7aW5mbykpCiYjNDM7CQlnZW5ldmVfbGlua19jb25maWcoZGV2LCAmYW1wO2NmZy0mZ3Q7aW5mbywgdGIpOwogCi0JZ2VuZXZlX3F1aWVzY2UoZ2VuZXZlLCAmYW1wO2dzNCwgJmFtcDtnczYpOwotCW1lbWNweSgmYW1wO2dlbmV2ZS0mZ3Q7Y2ZnLCAmYW1wO2NmZywgc2l6ZW9mKGNmZykpOwotCWdlbmV2ZV91bnF1aWVzY2UoZ2VuZXZlLCBnczQsIGdzNik7CiYjNDM7CXJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtJmd0O2NmZywgY2ZnKTsKIAomIzQzOwljYWxsX3JjdV9odXJyeSgmYW1wO29sZF9jZmctJmd0O3JjdSwgZ2VuZXZlX2NvbmZpZ19mcmVlX3JjdSk7CiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX2ZyZWVfY2ZnOgomIzQzOwlnZW5ldmVfY29uZmlnX2ZyZWUoY2ZnKTsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIHZvaWQgZ2VuZXZlX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKQEAgLTI0MzEsMTYgJiM0MzsyNDY0LDI3IEBAIHN0YXRpYyBzaXplX3QgZ2VuZXZlX2dldF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAKIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogewotCXN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpOwotCXN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9ICZhbXA7Z2VuZXZlLSZndDtjZmcuaW5mbzsKLQlib29sIHR0bF9pbmhlcml0ID0gZ2VuZXZlLSZndDtjZmcudHRsX2luaGVyaXQ7Ci0JYm9vbCBtZXRhZGF0YSA9IGdlbmV2ZS0mZ3Q7Y2ZnLmNvbGxlY3RfbWQ7Ci0Jc3RydWN0IGlmbGFfZ2VuZXZlX3BvcnRfcmFuZ2UgcG9ydHMgPSB7Ci0JCS5sb3cJPSBodG9ucyhnZW5ldmUtJmd0O2NmZy5wb3J0X21pbiksCi0JCS5oaWdoCT0gaHRvbnMoZ2VuZXZlLSZndDtjZmcucG9ydF9tYXgpLAotCX07CiYjNDM7CWNvbnN0IHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpOwomIzQzOwlzdHJ1Y3QgaWZsYV9nZW5ldmVfcG9ydF9yYW5nZSBwb3J0czsKJiM0MzsJY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZzsKJiM0MzsJY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvOwomIzQzOwlib29sIHR0bF9pbmhlcml0LCBtZXRhZGF0YTsKIAlfX3U4IHRtcF92bmlbM107CiAJX191MzIgdm5pOwomIzQzOwlpbnQgZXJyID0gMDsKJiM0MzsKJiM0MzsJcmN1X3JlYWRfbG9jaygpOwomIzQzOwljZmcgPSByY3VfZGVyZWZlcmVuY2UoZ2VuZXZlLSZndDtjZmcpOwomIzQzOwlpZiAoIWNmZykgewomIzQzOwkJZXJyID0gLUVOT0RFVjsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiYjNDM7CWluZm8gPSAmYW1wO2NmZy0mZ3Q7aW5mbzsKJiM0MzsJdHRsX2luaGVyaXQgPSBjZmctJmd0O3R0bF9pbmhlcml0OwomIzQzOwltZXRhZGF0YSA9IGNmZy0mZ3Q7Y29sbGVjdF9tZDsKJiM0MzsJcG9ydHMubG93ID0gaHRvbnMoY2ZnLSZndDtwb3J0X21pbik7CiYjNDM7CXBvcnRzLmhpZ2ggPSBodG9ucyhjZmctJmd0O3BvcnRfbWF4KTsKIAogCXR1bm5lbF9pZF90b192bmkoaW5mby0mZ3Q7a2V5LnR1bl9pZCwgdG1wX3ZuaSk7CiAJdm5pID0gKHRtcF92bmlbMF0gJmx0OyZsdDsgMTYpIHwgKHRtcF92bmlbMV0gJmx0OyZsdDsgOCkgfCB0bXBfdm5pWzJdOwpAQCAtMjQ2OCwxNyAmIzQzOzI1MTIsMTcgQEAgc3RhdGljIGludCBnZW5ldmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCiAjZW5kaWYKIAl9CiAKLQlpZiAoIWdlbmV2ZS0mZ3Q7Y2ZnLmR1YWxzdGFjaykgewomIzQzOwlpZiAoIWNmZy0mZ3Q7ZHVhbHN0YWNrKSB7CiAJCWlmIChpcF90dW5uZWxfaW5mb19hZihpbmZvKSA9PSBBRl9JTkVUKSB7CiAJCQlpZiAoKGluZm8tJmd0O2tleS51LmlwdjQuc3JjIHx8Ci0JCQkgICAgIGdlbmV2ZS0mZ3Q7Y2ZnLmNvbGxlY3RfbWQpICZhbXA7JmFtcDsKJiM0MzsJCQkgICAgIG1ldGFkYXRhKSAmYW1wOyZhbXA7CiAJCQkgICAgbmxhX3B1dF9pbl9hZGRyKHNrYiwgSUZMQV9HRU5FVkVfTE9DQUwsCiAJCQkJCSAgICBpbmZvLSZndDtrZXkudS5pcHY0LnNyYykpCiAJCQkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKIAkJfSBlbHNlIHsKIAkJCWlmICgoIWlwdjZfYWRkcl9hbnkoJmFtcDtpbmZvLSZndDtrZXkudS5pcHY2LnNyYykgfHwKLQkJCSAgICAgZ2VuZXZlLSZndDtjZmcuY29sbGVjdF9tZCkgJmFtcDsmYW1wOwomIzQzOwkJCSAgICAgbWV0YWRhdGEpICZhbXA7JmFtcDsKIAkJCSAgICBubGFfcHV0X2luNl9hZGRyKHNrYiwgSUZMQV9HRU5FVkVfTE9DQUw2LAogCQkJCQkgICAgICZhbXA7aW5mby0mZ3Q7a2V5LnUuaXB2Ni5zcmMpKQogCQkJCWdvdG8gbmxhX3B1dF9mYWlsdXJlOwpAQCAtMjQ5MSw3ICYjNDM7MjUzNSw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCSAgICBubGFfcHV0X2JlMzIoc2tiLCBJRkxBX0dFTkVWRV9MQUJFTCwgaW5mby0mZ3Q7a2V5LmxhYmVsKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlpZiAobmxhX3B1dF91OChza2IsIElGTEFfR0VORVZFX0RGLCBnZW5ldmUtJmd0O2NmZy5kZikpCiYjNDM7CWlmIChubGFfcHV0X3U4KHNrYiwgSUZMQV9HRU5FVkVfREYsIGNmZy0mZ3Q7ZGYpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAogCWlmIChubGFfcHV0X2JlMTYoc2tiLCBJRkxBX0dFTkVWRV9QT1JULCBpbmZvLSZndDtrZXkudHBfZHN0KSkKQEAgLTI1MDIsMjggJiM0MzsyNTQ2LDMxIEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQogCiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNikKIAlpZiAobmxhX3B1dF91OChza2IsIElGTEFfR0VORVZFX1VEUF9aRVJPX0NTVU02X1JYLAotCQkgICAgICAgIWdlbmV2ZS0mZ3Q7Y2ZnLnVzZV91ZHA2X3J4X2NoZWNrc3VtcykpCiYjNDM7CQkgICAgICAgIWNmZy0mZ3Q7dXNlX3VkcDZfcnhfY2hlY2tzdW1zKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAjZW5kaWYKIAogCWlmIChubGFfcHV0X3U4KHNrYiwgSUZMQV9HRU5FVkVfVFRMX0lOSEVSSVQsIHR0bF9pbmhlcml0KSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKLQlpZiAoZ2VuZXZlLSZndDtjZmcuaW5uZXJfcHJvdG9faW5oZXJpdCAmYW1wOyZhbXA7CiYjNDM7CWlmIChjZmctJmd0O2lubmVyX3Byb3RvX2luaGVyaXQgJmFtcDsmYW1wOwogCSAgICBubGFfcHV0X2ZsYWcoc2tiLCBJRkxBX0dFTkVWRV9JTk5FUl9QUk9UT19JTkhFUklUKSkKIAkJZ290byBubGFfcHV0X2ZhaWx1cmU7CiAKIAlpZiAobmxhX3B1dChza2IsIElGTEFfR0VORVZFX1BPUlRfUkFOR0UsIHNpemVvZihwb3J0cyksICZhbXA7cG9ydHMpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAotCWlmIChnZW5ldmUtJmd0O2NmZy5ncm9faGludCAmYW1wOyZhbXA7CiYjNDM7CWlmIChjZmctJmd0O2dyb19oaW50ICZhbXA7JmFtcDsKIAkgICAgbmxhX3B1dF9mbGFnKHNrYiwgSUZMQV9HRU5FVkVfR1JPX0hJTlQpKQogCQlnb3RvIG5sYV9wdXRfZmFpbHVyZTsKIAotCXJldHVybiAwOwomIzQzO291dDoKJiM0MzsJcmN1X3JlYWRfdW5sb2NrKCk7CiYjNDM7CXJldHVybiBlcnI7CiAKIG5sYV9wdXRfZmFpbHVyZToKLQlyZXR1cm4gLUVNU0dTSVpFOwomIzQzOwllcnIgPSAtRU1TR1NJWkU7CiYjNDM7CWdvdG8gb3V0OwogfQogCiBzdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgZ2VuZXZlX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7CkBAIC0yNjcxLDYgJiM0MzsyNzE4LDcgQEAgc3RhdGljIHZvaWQgX19leGl0IGdlbmV2ZV9jbGVhbnVwX21vZHVsZSh2b2lkKQogCXJ0bmxfbGlua191bnJlZ2lzdGVyKCZhbXA7Z2VuZXZlX2xpbmtfb3BzKTsKIAl1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcigmYW1wO2dlbmV2ZV9ub3RpZmllcl9ibG9jayk7CiAJdW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKCZhbXA7Z2VuZXZlX25ldF9vcHMpOwomIzQzOwlyY3VfYmFycmllcigpOwogfQogbW9kdWxlX2V4aXQoZ2VuZXZlX2NsZWFudXBfbW9kdWxlKTsKIAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDA4MwoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDYyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEdFTkVWRSBDb25maWd1cmF0aW9uIFBhdGNoIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBgZHJpdmVycy9uZXQvZ2VuZXZlLmNgLCBhbmQgaXQmIzM5O3MgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZS4gVGhleSYjMzk7cmUgc3dpdGNoaW5nIGhvdyBgZ2VuZXZlX2NvbmZpZ2AgaXMgYWNjZXNzZWQsIG1vdmluZyBmcm9tIGEgZGlyZWN0IGBzdHJ1Y3RgIHRvIGFuIGBfX3JjdSAqYCBwb2ludGVyIHdpdGhpbiB0aGUgYGdlbmV2ZV9kZXZgIHN0cnVjdHVyZS4gVGhpcyBpbW1lZGlhdGVseSBmbGFncyBhcyBzb21ldGhpbmcgdGhhdCAqbmVlZHMqIGZ1enppbmcuIEl0JiMzOTtzIGRlc2lnbmVkIHRvIGZpeCBSQ1UgZGVyZWZlcmVuY2luZyBpc3N1ZXMsIGVzc2VudGlhbGx5IHJlcGxhY2luZyB0aGUgb2xkIHN5bmNocm9ub3VzIGBnZW5ldmVfcXVpZXNjZWAgYW5kIGBnZW5ldmVfdW5xdWllc2NlYCBtZWNoYW5pc21zIHdpdGggUkNVLWJhc2VkIGF0b21pYyBjb25maWd1cmF0aW9uIHVwZGF0ZXMuIFRoYXQmIzM5O3MgYSBzb2xpZCB3aW4gZm9yIGNvbmN1cnJlbmN5LCBidXQgYSBwb3RlbnRpYWwgbGFuZG1pbmUgaWYgdGhlIFJDVSB1c2FnZSBpc24mIzM5O3QgcGVyZmVjdC4KCkxldCYjMzk7cyBkcmlsbCBkb3duIGFuZCBmaWd1cmUgb3V0IHRoZSBiZXN0IGZvY3VzIHBvaW50cyBmb3IgZnV6emluZy4gSSYjMzk7dmUgZ290IGEgbGlzdCBvZiB0aGUgbW9kaWZpZWQgc3ltYm9sczogYGdlbmV2ZV9sb29rdXBgLCBgZ2VuZXZlNl9sb29rdXBgLCBgZ2VuZXZlX3VkcF9lbmNhcF9yZWN2YCwgYGdlbmV2ZV9jcmVhdGVfc29ja2AsIGFsbCB0aGUgd2F5IGRvd24gdG8gYGdlbmV2ZV9maWxsX2luZm9gLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYXZvaWQgdGhlIGhvdCBwYXRoIGZ1bmN0aW9ucyBsaWtlIGBnZW5ldmVfeG1pdGAsIGBnZW5ldmVfeG1pdF9za2JgLCBhbmQgc28gb24uIFRoZXkmIzM5O3JlIGltcG9ydGFudCwgYnV0IHRoZWlyIHNoZWVyIHZvbHVtZSBvZiBleGVjdXRpb24gbWlnaHQgZHJvd24gb3V0IHN1YnRsZSBjb25jdXJyZW5jeSBidWdzLiBUaGUgc2FtZSBnb2VzIGZvciByZWNlaXZlIHByb2Nlc3NpbmcgbGlrZSBgZ2VuZXZlX3VkcF9lbmNhcF9yZWN2YCB3aGljaCB3aWxsIGJlIGNvbXBsZXggd2l0aCB0aGUgZW5jYXAgYW5kIGRlY2Fwc3VsYXRpb24uCgpJbnN0ZWFkLCBJJiMzOTtsbCBwcmlvcml0aXplIHRoZSBjb25maWd1cmF0aW9uIGFuZCBjb250cm9sIHBhdGggZnVuY3Rpb25zLiBNeSB0YXJnZXQgbGlzdCBpczoKCiogICBgZ2VuZXZlX2NoYW5nZWxpbmtgCiogICBgZ2VuZXZlX2NvbmZpZ3VyZWAKKiAgIGBnZW5ldmVfbmV3bGlua2AgKGV2ZW4gdGhvdWdoIGl0JiMzOTtzIG1pbmltYWxseSB0b3VjaGVkLCBpdCBjYWxscyBgZ2VuZXZlX2NvbmZpZ3VyZWAsIHNvIGl0JiMzOTtzIHJlbGV2YW50KQoqICAgYGdlbmV2ZV9maWxsX2luZm9gCiogICBUaGUgbmV3bHkgaW50cm9kdWNlZCBmdW5jdGlvbnMsIGxpa2UgYGdlbmV2ZV9jb25maWdfYWxsb2NgLCBgZ2VuZXZlX2NvbmZpZ19mcmVlYCwgYW5kIGBnZW5ldmVfZnJlZV9kZXZgIGFyZSBhbHNvIGhpZ2ggdmFsdWUgc2luY2UgdGhleSBpbXBsZW1lbnQgdGhlIG5ldyBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQuCgpJIGFsc28gbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgb3B0aW9ucyBmb3IgR0VORVZFLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gdGFyZ2V0aW5nIHRoZSBjb3JyZWN0IGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgZWl0aGVyIGluIGBkcml2ZXJzL25ldC9LY29uZmlnYCBvciBtYXliZSB3aXRoaW4gYGRyaXZlcnMvbmV0L2dlbmV2ZS5jYCBpdHNlbGYuIFRoaXMgd2lsbCBpbmZvcm0gdGhlIGluaXRpYWwgZnV6eiBoYXJuZXNzIHNldHVwLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBHRU5FVkUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvS2NvbmZpZz0yMzA9Y29uZmlnIFZYTEFOXG4tLVxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNDQtXG5kcml2ZXJzL25ldC9LY29uZmlnOjI0NTpjb25maWcgR0VORVZFXG5kcml2ZXJzL25ldC9LY29uZmlnLTI0Ni1cdHRyaXN0YXRlIFwmIzM0O0dlbmVyaWMgTmV0d29yayBWaXJ0dWFsaXphdGlvbiBFbmNhcHN1bGF0aW9uXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDcgMjM6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUzMTcKCQkJCQkJCW91dHB1dDogMTkKCQkJCQkJCXRob3VnaHRzOiA3NgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nOgoKKipFeGFtaW5pbmcgdGhlIEdFTkVWRSBDb25maWd1cmF0aW9uKioKCkFscmlnaHQsIHNvIGBHRU5FVkVgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBwb2ludCBoZXJlLCB0aGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEFyZSB0aGVyZSAqYW55KiBvdGhlciBjb25maWd1cmF0aW9ucyB3ZSBuZWVkIHRvIGNvbnNpZGVyPyBMZXQmIzM5O3Mgc2VlLi4uIEFoLCB5ZXMsIGBDT05GSUdfSVBWNmAgaXMgYWxzbyBiZWluZyByZWZlcmVuY2VkIGluIHRoZSBjb2RlLCBzbyB0aGF0JiMzOTtzIHNvbWV0aGluZyB0byBrZWVwIGluIG1pbmQsIGFsdGhvdWdoIGBDT05GSUdfR0VORVZFYCBhcHBlYXJzIHRvIGJlIHRoZSBwcmltYXJ5IG9uZS4gTm93LCB0byByZWFsbHkgdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgY29uZmlndXJhdGlvbiwgSSBuZWVkIHRvIGRpZyBkZWVwZXIgaW50byB0aGUgY29kZWJhc2UgYW5kIGFuYWx5emUgaXRzIGFwcGxpY2F0aW9uLgoKTGV0JiMzOTtzIGZvY3VzIG9uIGBnZW5ldmVfY2hhbmdlbGlua2AgYW5kIGBnZW5ldmVfY29uZmlndXJlYC4gQXJlIHRoZXNlIHRoZSByaWdodCBmdW5jdGlvbnMgdG8gemVybyBpbiBvbiB0byB1bmRlcnN0YW5kIGhvdyB0aGUgY29uZmlndXJhdGlvbiBhY3R1YWxseSBnZXRzIHB1dCBpbnRvIGVmZmVjdD8gVGhleSBzZWVtIGxpa2Ugc3Ryb25nIGNhbmRpZGF0ZXMsIGdpdmVuIHRoZSBuYW1lcy4gTXkgZ3V0IHNheXMgdGhleSYjMzk7bGwgYmUgY3JpdGljYWwgZm9jdXMgc3ltYm9scy4gSSYjMzk7bGwgc3RhcnQgd2l0aCB0aG9zZSBhbmQgc2VlIHdoZXJlIHRoZXkgbGVhZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5ldmVfY2hhbmdlbGluayYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9nZW5ldmUuYz0yMzYzPXN0YXRpYyBpbnQgZ2VuZXZlX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yMzk4LSAqL1xuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjM5OTpzdGF0aWMgaW50IGdlbmV2ZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNDAwLVx0XHRcdCAgICAgc3RydWN0IG5sYXR0ciAqZGF0YVtdLFxuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTI1NzY9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGdlbmV2ZV9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTI1ODMtXHQubmV3bGlua1x0PSBnZW5ldmVfbmV3bGluayxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjI1ODQ6XHQuY2hhbmdlbGlua1x0PSBnZW5ldmVfY2hhbmdlbGluayxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTI1ODUtXHQuZGVsbGlua1x0PSBnZW5ldmVfZGVsbGluayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTg2NQoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDIzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipGb2N1c2luZyBvbiBHZW5ldmUgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgYGdlbmV2ZV9jaGFuZ2VsaW5rYCBhbmQgYGdlbmV2ZV9jb25maWd1cmVgLiBUaG9zZSBhcmUgZGVmaW5pdGVseSB0aGUga2V5IGFyZWFzIHRvIGNvbmNlbnRyYXRlIG9uLiBUaGlua2luZyBhYm91dCB0aGUgY29uZmlndXJhdGlvbiBwcm9jZWR1cmVzLCBzcGVjaWZpY2FsbHkgdGhvc2UgZnVuY3Rpb25zLCB0aGF0IGlzIHdoZXJlIHRoZSBpbnRyaWNhY2llcyBvZiBHZW5ldmUgaW1wbGVtZW50YXRpb24gd2lsbCB1bmRvdWJ0ZWRseSBsaWUuIGBnZW5ldmVfY2hhbmdlbGlua2AgaXMgY3JpdGljYWwgZm9yIGVuc3VyaW5nIHRoZSBwcm9wZXIgaGFuZGxpbmcgb2YgbGluayBzdGF0ZSBjaGFuZ2VzIOKAkyB2aXRhbCBmb3IgcmVsaWFibGUgb3BlcmF0aW9uLiBBbmQgYGdlbmV2ZV9jb25maWd1cmVg4oCmIHdlbGwsIHRoYXQmIzM5O3MgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIsIGlzbiYjMzk7dCBpdD8gVGhhdCYjMzk7cyB3aGVyZSBhbGwgdGhlIHNldHVwIGxvZ2ljIGxpdmVzOyBhbnkgYXJjaGl0ZWN0dXJhbCB3ZWFrbmVzc2VzIG9yIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHdpbGwgYmVjb21lIHJlYWRpbHkgYXBwYXJlbnQgdGhlcmUuIEkgbmVlZCB0byBtYWtlIGEgbWVudGFsIG5vdGUgdG8gc2NydXRpbml6ZSB0aGVpciBpbnRlcmFjdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZW5ldmVfY29uZmlndXJlJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2dlbmV2ZS5jPTE5NzM9c3RhdGljIGJvb2wgZ2VuZXZlX2RzdF9hZGRyX2VxdWFsKHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqYSxcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0xOTgxLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MTk4MjpzdGF0aWMgaW50IGdlbmV2ZV9jb25maWd1cmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMTk4My1cdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrLFxuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTIzNjM9c3RhdGljIGludCBnZW5ldmVfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTIzODUtXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoyMzg2Olx0ZXJyID0gZ2VuZXZlX2NvbmZpZ3VyZShsaW5rX25ldCwgZGV2LCBleHRhY2ssIFx1MDAyNmNmZyk7XG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yMzg3LVx0aWYgKGVycilcbi0tXG5kcml2ZXJzL25ldC9nZW5ldmUuYz0yNTkwPXN0cnVjdCBuZXRfZGV2aWNlICpnZW5ldmVfZGV2X2NyZWF0ZV9mYihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjYxMy1cdGluaXRfdG5sX2luZm8oXHUwMDI2Y2ZnLmluZm8sIGRzdF9wb3J0KTtcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jOjI2MTQ6XHRlcnIgPSBnZW5ldmVfY29uZmlndXJlKG5ldCwgZGV2LCBOVUxMLCBcdTAwMjZjZmcpO1xuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjYxNS1cdGlmIChlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjQyNgoJCQkJCQkJb3V0cHV0OiAyMAoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgRm9jdXMgU3ltYm9scyBpbiBHZW5ldmUgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgdGhpbmtpbmcgYWJvdXQgdGhpcyBgZ2VuZXZlX2NvbmZpZ3VyZWAgaXMgYSBzb2xpZCwgY2xlYW4gc3ltYm9sIHRvIHN0YXJ0IHdpdGguIEl0IGltbWVkaWF0ZWx5IHN1Z2dlc3RzIHRoZSBjb3JlIGZ1bmN0aW9uOiBzZXR0aW5nIHVwIGFuZCBtYW5hZ2luZyB0aGUgR2VuZXZlIGNvbmZpZ3VyYXRpb24uIEl04oCZcyBjb25jaXNlIGFuZCBjb252ZXlzIHRoZSBhcHByb3ByaWF0ZSBsZXZlbCBvZiBhYnN0cmFjdGlvbi4gTW92aW5nIG9uIHRvIGBnZW5ldmVfZmlsbF9pbmZvYCBmZWVscyBsaWtlIGEgbmF0dXJhbCBwcm9ncmVzc2lvbi4gSXQgZG92ZXRhaWxzIHBlcmZlY3RseSBhcyBhIGNvbXBhbmlvbjsgdGhlIGltcGxpY2F0aW9uIGJlaW5nIHRoZSBhY3Qgb2YgKnBvcHVsYXRpbmcqIG9yICpjb21wbGV0aW5nKiB0aGUgbmVjZXNzYXJ5IGRldGFpbHMgZm9yIHRoYXQgY29uZmlndXJhdGlvbi4gVGhpcyBpcyBnb29kOyB0aGUgc3ltYm9scyB3b3JrIGluIHRhbmRlbSB0byBjcmVhdGUgYSBjbGVhciBwcm9ncmVzc2lvbiBmcm9tIGNvbmZpZ3VyYXRpb24gdG8gaW5zdGFudGlhdGlvbi4gSXQgaGVscHMgdG8gZGVsaW5lYXRlIHRoZSBmdW5jdGlvbmFsIGFyZWFzIGNsZWFybHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dlbmV2ZV9maWxsX2luZm8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZ2VuZXZlLmM9MjQ0ND1zdGF0aWMgc2l6ZV90IGdlbmV2ZV9nZXRfc2l6ZShjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuLS1cbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTI0NjQtXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoyNDY1OnN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjQ2Ni17XG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmM9MjU3Nj1zdGF0aWMgc3RydWN0IHJ0bmxfbGlua19vcHMgZ2VuZXZlX2xpbmtfb3BzIF9fcmVhZF9tb3N0bHkgPSB7XG4tLVxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjU4Ni1cdC5nZXRfc2l6ZVx0PSBnZW5ldmVfZ2V0X3NpemUsXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoyNTg3Olx0LmZpbGxfaW5mb1x0PSBnZW5ldmVfZmlsbF9pbmZvLFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjU4OC19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNyAyMzo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjg1NgoJCQkJCQkJb3V0cHV0OiAxNjIKCQkJCQkJCXRob3VnaHRzOiAyMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVmYWN0b3JpbmcgdGhlIEdFTkVWRSBEcml2ZXImIzM5O3MgQ29uZmlndXJhdGlvbiBIYW5kbGluZyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGEgc2lnbmlmaWNhbnQgc2hpZnQgaW4gaG93IHRoZSBHRU5FVkUgZHJpdmVyIG1hbmFnZXMgaXRzIGNvbmZpZ3VyYXRpb24gZGF0YSwgc3BlY2lmaWNhbGx5IHRoZSBgc3RydWN0IGdlbmV2ZV9jb25maWdgLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3JlIGRpdGNoaW5nIHRoZSBvbGQgc3luY2hyb25vdXMgYGdlbmV2ZV9xdWllc2NlYC9gZ2VuZXZlX3VucXVpZXNjZWAgbWV0aG9kLCB3aGljaCBpcyBnb29kLiBUaGF0IGBzeW5jaHJvbml6ZV9uZXQoKWAgY2FsbCB3YXMgcHJvYmFibHkgYSBwZXJmb3JtYW5jZSBib3R0bGVuZWNrLCBhbmQgdGhlIFJDVS1iYXNlZCBwb2ludGVyIHN3YXAgdGhleSYjMzk7cmUgdXNpbmcgc2hvdWxkIGJlIGEgYmlnIGltcHJvdmVtZW50LCBhbGxvd2luZyBsb2NrbGVzcyBhY2Nlc3MgaW4gdGhlIGRhdGEgcGF0aC4KCkZ1bmN0aW9uYWxseSwgdGhpcyBtZWFucyB0aGUgY29udHJvbCBwYXRoIGlzIHVuZGVyZ29pbmcgYSB0cmFuc2Zvcm1hdGlvbi4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgUkNVIGZvciBtYW5hZ2luZyB0aGF0IGBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZ2AuIFNvLCBJIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIHRoZSBuZXRsaW5rIGNvbnRyb2wgcGF0aCBmdW5jdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aG9zZSBmdW5jdGlvbnMgdGhhdCBkZWFsIHdpdGggYWxsb2NhdGluZywgdXBkYXRpbmcsIGFuZCBmcmVlaW5nIHRoZSBjb25maWd1cmF0aW9uLiBJIHNob3VsZCBwcm9iYWJseSBwYXkgZXh0cmEgYXR0ZW50aW9uIHRvIGBnZW5ldmVfY2hhbmdlbGlua2AsIGBnZW5ldmVfY29uZmlndXJlYCwgYGdlbmV2ZV9maWxsX2luZm9gLCBgZ2VuZXZlX2NvbmZpZ19hbGxvY2AsIGFuZCBgZ2VuZXZlX2ZyZWVfZGV2YCAtLSB0aG9zZSBzZWVtIGxpa2UgdGhlIGtleSBhcmVhcyBhZmZlY3RlZCBieSB0aGlzIFJDVSBpbXBsZW1lbnRhdGlvbi4gVGhpcyB3aWxsIGJlIGNyaXRpY2FsIGZvciBjb25jdXJyZW50IGFjY2VzcyBhbmQgY29uZmlndXJhdGlvbiBjaGFuZ2VzLgoKVGhlIGBHRU5FVkVgIGNvbmZpZyBzZWVtcyB0byBiZSB0aGUgdHJpZ2dlciwgc28ga2VlcCBhbiBleWUgb3V0IGZvciB0aGF0IGJlaW5nIGVuYWJsZWQuIEdpdmVuIHRoaXMgUkNVIGltcGxlbWVudGF0aW9uLCB0aGVyZSBtaWdodCBiZSBzb21lIGludGVyZXN0aW5nIHJhY2UgY29uZGl0aW9ucyB0byBleHBsb2l0IGR1cmluZyBjb25maWd1cmF0aW9uIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA3IDIzOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtHRU5FVkUmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtnZW5ldmVfY2hhbmdlbGluayYjMzQ7LAogICAgJiMzNDtnZW5ldmVfY29uZmlndXJlJiMzNDssCiAgICAmIzM0O2dlbmV2ZV9maWxsX2luZm8mIzM0OywKICAgICYjMzQ7Z2VuZXZlX2NvbmZpZ19hbGxvYyYjMzQ7LAogICAgJiMzNDtnZW5ldmVfZnJlZV9kZXYmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBHRU5FVkUgZHJpdmVyIHRvIHVzZSBSQ1UgZm9yIGl0cyBjb25maWd1cmF0aW9uIChgc3RydWN0IGdlbmV2ZV9jb25maWdgKSwgcmVwbGFjaW5nIHRoZSBwcmV2aW91cyBzeW5jaHJvbm91cyBgZ2VuZXZlX3F1aWVzY2VgL2BnZW5ldmVfdW5xdWllc2NlYCBtZWNoYW5pc20uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgaG93IGNvbmZpZ3VyYXRpb24gdXBkYXRlcyBhcmUgaGFuZGxlZCBjb25jdXJyZW50bHkgd2l0aCB0aGUgZGF0YSBwYXRoLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBjb250cm9sIHBhdGggZnVuY3Rpb25zIHRoYXQgYWxsb2NhdGUsIHVwZGF0ZSwgYW5kIGZyZWUgdGhlIGNvbmZpZ3VyYXRpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0dFTkVWRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2dlbmV2ZV9jaGFuZ2VsaW5rJiMzNDssCiAgICAmIzM0O2dlbmV2ZV9jb25maWd1cmUmIzM0OywKICAgICYjMzQ7Z2VuZXZlX2ZpbGxfaW5mbyYjMzQ7LAogICAgJiMzNDtnZW5ldmVfY29uZmlnX2FsbG9jJiMzNDssCiAgICAmIzM0O2dlbmV2ZV9mcmVlX2RldiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEdFTkVWRSBkcml2ZXIgdG8gdXNlIFJDVSBmb3IgaXRzIGNvbmZpZ3VyYXRpb24gKGBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZ2ApLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIHN5bmNocm9ub3VzIGBnZW5ldmVfcXVpZXNjZWAvYGdlbmV2ZV91bnF1aWVzY2VgIG1lY2hhbmlzbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBob3cgY29uZmlndXJhdGlvbiB1cGRhdGVzIGFyZSBoYW5kbGVkIGNvbmN1cnJlbnRseSB3aXRoIHRoZSBkYXRhIHBhdGguIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIGNvbnRyb2wgcGF0aCBmdW5jdGlvbnMgdGhhdCBhbGxvY2F0ZSwgdXBkYXRlLCBhbmQgZnJlZSB0aGUgY29uZmlndXJhdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjUzOjMxLjg2NzExMTI0NVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzMjY4Nzc3NDExLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkdFTkVWRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbmV2ZV9jaGFuZ2VsaW5rXCIsXG4gICAgXCJnZW5ldmVfY29uZmlndXJlXCIsXG4gICAgXCJnZW5ldmVfZmlsbF9pbmZvXCIsXG4gICAgXCJnZW5ldmVfY29uZmlnX2FsbG9jXCIsXG4gICAgXCJnZW5ldmVfZnJlZV9kZXZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEdFTkVWRSBkcml2ZXIgdG8gdXNlIFJDVSBmb3IgaXRzIGNvbmZpZ3VyYXRpb24gKGBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZ2ApLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIHN5bmNocm9ub3VzIGBnZW5ldmVfcXVpZXNjZWAvYGdlbmV2ZV91bnF1aWVzY2VgIG1lY2hhbmlzbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBob3cgY29uZmlndXJhdGlvbiB1cGRhdGVzIGFyZSBoYW5kbGVkIGNvbmN1cnJlbnRseSB3aXRoIHRoZSBkYXRhIHBhdGguIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIGNvbnRyb2wgcGF0aCBmdW5jdGlvbnMgdGhhdCBhbGxvY2F0ZSwgdXBkYXRlLCBhbmQgZnJlZSB0aGUgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6NTM6MzEuODY3MTE2ODQ1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2OTc3NTY5MDcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzYTFkMDk0MWRiYzkwZDYzOWE5MjJjYWQ2MDIxNWI5Mzc3NWI5NTRlXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgSnVsIDcgMjM6NTM6MjkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2VuZXZlLmMgYi9kcml2ZXJzL25ldC9nZW5ldmUuY1xcbmluZGV4IDM5NmUxYTExM2NkNDllLi4xN2JkMzU0M2Q1ODdhOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9nZW5ldmUuY1xcbisrKyBiL2RyaXZlcnMvbmV0L2dlbmV2ZS5jXFxuQEAgLTgyLDYgKzgyLDcgQEAgc3RydWN0IGdlbmV2ZV9jb25maWcge1xcbiBcXHR1MTZcXHRcXHRcXHRwb3J0X21pbjtcXG4gXFx0dTE2XFx0XFx0XFx0cG9ydF9tYXg7XFxuIFxcbitcXHRzdHJ1Y3QgcmN1X2hlYWRcXHRcXHRyY3U7XFxuIFxcdC8qIE11c3QgYmUgbGFzdCAtLWVuZHMgaW4gYSBmbGV4aWJsZS1hcnJheSBtZW1iZXIuICovXFxuIFxcdHN0cnVjdCBpcF90dW5uZWxfaW5mb1xcdGluZm87XFxuIH07XFxuQEAgLTEwMCw3ICsxMDEsNyBAQCBzdHJ1Y3QgZ2VuZXZlX2RldiB7XFxuICNlbmRpZlxcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkICAgbmV4dDtcXHQvKiBnZW5ldmUncyBwZXIgbmFtZXNwYWNlIGxpc3QgKi9cXG4gXFx0c3RydWN0IGdyb19jZWxscyAgIGdyb19jZWxscztcXG4tXFx0c3RydWN0IGdlbmV2ZV9jb25maWcgY2ZnO1xcbitcXHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyBfX3JjdSAqY2ZnO1xcbiB9O1xcbiBcXG4gc3RydWN0IGdlbmV2ZV9zb2NrIHtcXG5AQCAtMTgyLDggKzE4MywxMCBAQCBzdGF0aWMgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZV9sb29rdXAoc3RydWN0IGdlbmV2ZV9zb2NrICpncyxcXG4gXFx0aGFzaCA9IGdlbmV2ZV9uZXRfdm5pX2hhc2godm5pKTtcXG4gXFx0dm5pX2xpc3RfaGVhZCA9IFxcdTAwMjZncy1cXHUwMDNldm5pX2xpc3RbaGFzaF07XFxuIFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCB2bmlfbGlzdF9oZWFkLCBobGlzdCkge1xcbi1cXHRcXHRpZiAoZXFfdHVuX2lkX2FuZF92bmkoKHU4ICopXFx1MDAyNm5vZGUtXFx1MDAzZWdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8ua2V5LnR1bl9pZCwgdm5pKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgYWRkciA9PSBub2RlLVxcdTAwM2VnZW5ldmUtXFx1MDAzZWNmZy5pbmZvLmtleS51LmlwdjQuZHN0KVxcbitcXHRcXHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnID0gcmN1X2RlcmVmZXJlbmNlKG5vZGUtXFx1MDAzZWdlbmV2ZS1cXHUwMDNlY2ZnKTtcXG4rXFxuK1xcdFxcdGlmIChlcV90dW5faWRfYW5kX3ZuaSgodTggKilcXHUwMDI2Y2ZnLVxcdTAwM2VpbmZvLmtleS50dW5faWQsIHZuaSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGFkZHIgPT0gY2ZnLVxcdTAwM2VpbmZvLmtleS51LmlwdjQuZHN0KVxcbiBcXHRcXHRcXHRyZXR1cm4gbm9kZS1cXHUwMDNlZ2VuZXZlO1xcbiBcXHR9XFxuIFxcdHJldHVybiBOVUxMO1xcbkBAIC0yMDEsOCArMjA0LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlNl9sb29rdXAoc3RydWN0IGdlbmV2ZV9zb2NrICpncyxcXG4gXFx0aGFzaCA9IGdlbmV2ZV9uZXRfdm5pX2hhc2godm5pKTtcXG4gXFx0dm5pX2xpc3RfaGVhZCA9IFxcdTAwMjZncy1cXHUwMDNldm5pX2xpc3RbaGFzaF07XFxuIFxcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCB2bmlfbGlzdF9oZWFkLCBobGlzdCkge1xcbi1cXHRcXHRpZiAoZXFfdHVuX2lkX2FuZF92bmkoKHU4ICopXFx1MDAyNm5vZGUtXFx1MDAzZWdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8ua2V5LnR1bl9pZCwgdm5pKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgaXB2Nl9hZGRyX2VxdWFsKFxcdTAwMjZhZGRyNiwgXFx1MDAyNm5vZGUtXFx1MDAzZWdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8ua2V5LnUuaXB2Ni5kc3QpKVxcbitcXHRcXHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnID0gcmN1X2RlcmVmZXJlbmNlKG5vZGUtXFx1MDAzZWdlbmV2ZS1cXHUwMDNlY2ZnKTtcXG4rXFxuK1xcdFxcdGlmIChlcV90dW5faWRfYW5kX3ZuaSgodTggKilcXHUwMDI2Y2ZnLVxcdTAwM2VpbmZvLmtleS50dW5faWQsIHZuaSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIGlwdjZfYWRkcl9lcXVhbChcXHUwMDI2YWRkcjYsIFxcdTAwMjZjZmctXFx1MDAzZWluZm8ua2V5LnUuaXB2Ni5kc3QpKVxcbiBcXHRcXHRcXHRyZXR1cm4gbm9kZS1cXHUwMDNlZ2VuZXZlO1xcbiBcXHR9XFxuIFxcdHJldHVybiBOVUxMO1xcbkBAIC0zODYsMTEgKzM5MSw2IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2luaXQoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0aWYgKGVycilcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuLVxcdGVyciA9IGRzdF9jYWNoZV9pbml0KFxcdTAwMjZnZW5ldmUtXFx1MDAzZWNmZy5pbmZvLmRzdF9jYWNoZSwgR0ZQX0tFUk5FTCk7XFxuLVxcdGlmIChlcnIpIHtcXG4tXFx0XFx0Z3JvX2NlbGxzX2Rlc3Ryb3koXFx1MDAyNmdlbmV2ZS1cXHUwMDNlZ3JvX2NlbGxzKTtcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4tXFx0fVxcbiBcXHRuZXRkZXZfbG9ja2RlcF9zZXRfY2xhc3NlcyhkZXYpO1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbkBAIC0zOTksNyArMzk5LDYgQEAgc3RhdGljIHZvaWQgZ2VuZXZlX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXG4tXFx0ZHN0X2NhY2hlX2Rlc3Ryb3koXFx1MDAyNmdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8uZHN0X2NhY2hlKTtcXG4gXFx0Z3JvX2NlbGxzX2Rlc3Ryb3koXFx1MDAyNmdlbmV2ZS1cXHUwMDNlZ3JvX2NlbGxzKTtcXG4gfVxcbiBcXG5AQCAtNjUwLDYgKzY0OSw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX3Bvc3RfZGVjYXBfaGludChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIC8qIENhbGxiYWNrIGZyb20gbmV0L2lwdjQvdWRwLmMgdG8gcmVjZWl2ZSBwYWNrZXRzICovXFxuIHN0YXRpYyBpbnQgZ2VuZXZlX3VkcF9lbmNhcF9yZWN2KHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbitcXHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnO1xcbiBcXHRzdHJ1Y3QgZ2VuZXZlaGRyICpnZW5ldmVoO1xcbiBcXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlO1xcbiBcXHRzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzO1xcbkBAIC02NzUsOCArNjc1LDkgQEAgc3RhdGljIGludCBnZW5ldmVfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxcbiBcXG4gXFx0aW5uZXJfcHJvdG8gPSBnZW5ldmVoLVxcdTAwM2Vwcm90b190eXBlO1xcbiBcXG4tXFx0aWYgKHVubGlrZWx5KCghZ2VuZXZlLVxcdTAwM2VjZmcuaW5uZXJfcHJvdG9faW5oZXJpdCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgICBpbm5lcl9wcm90byAhPSBodG9ucyhFVEhfUF9URUIpKSkpIHtcXG4rXFx0Y2ZnID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS1cXHUwMDNlY2ZnKTtcXG4rXFx0aWYgKHVubGlrZWx5KCFjZmcgfHwgKCFjZmctXFx1MDAzZWlubmVyX3Byb3RvX2luaGVyaXQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICAgaW5uZXJfcHJvdG8gIT0gaHRvbnMoRVRIX1BfVEVCKSkpKSB7XFxuIFxcdFxcdGRldl9kc3RhdHNfcnhfZHJvcHBlZChnZW5ldmUtXFx1MDAzZWRldik7XFxuIFxcdFxcdGdvdG8gZHJvcDtcXG4gXFx0fVxcbkBAIC03NjIsOSArNzYzLDEwIEBAIHN0YXRpYyBpbnQgZ2VuZXZlX3VkcF9lbmNhcF9lcnJfbG9va3VwKHN0cnVjdCBzb2NrICpzaywgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBzb2NrICpnZW5ldmVfY3JlYXRlX3NvY2soc3RydWN0IG5ldCAqbmV0LFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsIGJvb2wgaXB2NilcXG4ge1xcbi1cXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBcXHUwMDI2Z2VuZXZlLVxcdTAwM2VjZmcuaW5mbztcXG4rXFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gXFx1MDAyNmNmZy1cXHUwMDNlaW5mbztcXG4gXFx0c3RydWN0IHVkcF9wb3J0X2NmZyB1ZHBfY29uZjtcXG4gXFx0c3RydWN0IHNvY2tldCAqc29jaztcXG4gXFx0aW50IGVycjtcXG5AQCAtNzc1LDcgKzc3Nyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqZ2VuZXZlX2NyZWF0ZV9zb2NrKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0aWYgKGlwdjYpIHtcXG4gXFx0XFx0dWRwX2NvbmYuZmFtaWx5ID0gQUZfSU5FVDY7XFxuIFxcdFxcdHVkcF9jb25mLmlwdjZfdjZvbmx5ID0gMTtcXG4tXFx0XFx0dWRwX2NvbmYudXNlX3VkcDZfcnhfY2hlY2tzdW1zID0gZ2VuZXZlLVxcdTAwM2VjZmcudXNlX3VkcDZfcnhfY2hlY2tzdW1zO1xcbitcXHRcXHR1ZHBfY29uZi51c2VfdWRwNl9yeF9jaGVja3N1bXMgPSBjZmctXFx1MDAzZXVzZV91ZHA2X3J4X2NoZWNrc3VtcztcXG4gXFx0XFx0dWRwX2NvbmYubG9jYWxfaXA2ID0gaW5mby1cXHUwMDNla2V5LnUuaXB2Ni5zcmM7XFxuIFxcdH0gZWxzZVxcbiAjZW5kaWZcXG5AQCAtOTkxLDcgKzk5Myw4IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2dyb19jb21wbGV0ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXFxuIFxcbiAvKiBDcmVhdGUgbmV3IGxpc3RlbiBzb2NrZXQgaWYgbmVlZGVkICovXFxuIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdlbmV2ZV9zb2NrZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxcbitcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLCBib29sIGlwdjYpXFxuIHtcXG4gXFx0c3RydWN0IGdlbmV2ZV9uZXQgKmduID0gbmV0X2dlbmVyaWMobmV0LCBnZW5ldmVfbmV0X2lkKTtcXG4gXFx0c3RydWN0IHVkcF90dW5uZWxfc29ja19jZmcgdHVubmVsX2NmZztcXG5AQCAtMTAwMyw3ICsxMDA2LDcgQEAgc3RhdGljIHN0cnVjdCBnZW5ldmVfc29jayAqZ2VuZXZlX3NvY2tldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRpZiAoIWdzKVxcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4gXFxuLVxcdHNrID0gZ2VuZXZlX2NyZWF0ZV9zb2NrKG5ldCwgZ2VuZXZlLCBpcHY2KTtcXG4rXFx0c2sgPSBnZW5ldmVfY3JlYXRlX3NvY2sobmV0LCBnZW5ldmUsIGNmZywgaXB2Nik7XFxuIFxcdGlmIChJU19FUlIoc2spKSB7XFxuIFxcdFxcdGtmcmVlKGdzKTtcXG4gXFx0XFx0cmV0dXJuIEVSUl9DQVNUKHNrKTtcXG5AQCAtMTA2MCwxMiArMTA2MywxMyBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfc29ja19yZWxlYXNlKHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUpXFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdlbmV2ZV9maW5kX3NvY2soc3RydWN0IG5ldCAqbmV0LFxcbi1cXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxcbitcXHRcXHRcXHRcXHRcXHQgICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsIGJvb2wgaXB2NilcXG4ge1xcbiBcXHRzdHJ1Y3QgZ2VuZXZlX25ldCAqZ24gPSBuZXRfZ2VuZXJpYyhuZXQsIGdlbmV2ZV9uZXRfaWQpO1xcbi1cXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBcXHUwMDI2Z2VuZXZlLVxcdTAwM2VjZmcuaW5mbztcXG4rXFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gXFx1MDAyNmNmZy1cXHUwMDNlaW5mbztcXG4gXFx0c2FfZmFtaWx5X3QgZmFtaWx5ID0gaXB2NiA/IEFGX0lORVQ2IDogQUZfSU5FVDtcXG4tXFx0Ym9vbCBncm9faGludCA9IGdlbmV2ZS1cXHUwMDNlY2ZnLmdyb19oaW50O1xcbitcXHRib29sIGdyb19oaW50ID0gY2ZnLVxcdTAwM2Vncm9faGludDtcXG4gXFx0X19iZTE2IGRzdF9wb3J0ID0gaW5mby1cXHUwMDNla2V5LnRwX2RzdDtcXG4gXFx0c3RydWN0IGdlbmV2ZV9zb2NrICpncztcXG4gXFxuQEAgLTEwOTUsNyArMTA5OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdlbmV2ZV9maW5kX3NvY2soc3RydWN0IG5ldCAqbmV0LFxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4tc3RhdGljIGludCBnZW5ldmVfc29ja19hZGQoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxcbitzdGF0aWMgaW50IGdlbmV2ZV9zb2NrX2FkZChzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxcbitcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLCBib29sIGlwdjYpXFxuIHtcXG4gXFx0c3RydWN0IG5ldCAqbmV0ID0gZ2VuZXZlLVxcdTAwM2VuZXQ7XFxuIFxcdHN0cnVjdCBnZW5ldmVfZGV2X25vZGUgKm5vZGU7XFxuQEAgLTExMDMsMTkgKzExMDgsMTkgQEAgc3RhdGljIGludCBnZW5ldmVfc29ja19hZGQoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxcbiBcXHRfX3U4IHZuaVszXTtcXG4gXFx0X191MzIgaGFzaDtcXG4gXFxuLVxcdGdzID0gZ2VuZXZlX2ZpbmRfc29jayhuZXQsIGdlbmV2ZSwgaXB2Nik7XFxuK1xcdGdzID0gZ2VuZXZlX2ZpbmRfc29jayhuZXQsIGdlbmV2ZSwgY2ZnLCBpcHY2KTtcXG4gXFx0aWYgKGdzKSB7XFxuIFxcdFxcdGdzLVxcdTAwM2VyZWZjbnQrKztcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdGdzID0gZ2VuZXZlX3NvY2tldF9jcmVhdGUobmV0LCBnZW5ldmUsIGlwdjYpO1xcbitcXHRncyA9IGdlbmV2ZV9zb2NrZXRfY3JlYXRlKG5ldCwgZ2VuZXZlLCBjZmcsIGlwdjYpO1xcbiBcXHRpZiAoSVNfRVJSKGdzKSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIoZ3MpO1xcbiBcXG4gb3V0Olxcbi1cXHRncy1cXHUwMDNlY29sbGVjdF9tZCA9IGdlbmV2ZS1cXHUwMDNlY2ZnLmNvbGxlY3RfbWQ7XFxuLVxcdGdzLVxcdTAwM2Vncm9faGludCA9IGdlbmV2ZS1cXHUwMDNlY2ZnLmdyb19oaW50O1xcbitcXHRncy1cXHUwMDNlY29sbGVjdF9tZCA9IGNmZy1cXHUwMDNlY29sbGVjdF9tZDtcXG4rXFx0Z3MtXFx1MDAzZWdyb19oaW50ID0gY2ZnLVxcdTAwM2Vncm9faGludDtcXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXFxuIFxcdGlmIChpcHY2KSB7XFxuIFxcdFxcdHJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtXFx1MDAzZXNvY2s2LCBncyk7XFxuQEAgLTExMjgsNyArMTEzMyw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX3NvY2tfYWRkKHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsIGJvb2wgaXB2NilcXG4gXFx0fVxcbiBcXHRub2RlLVxcdTAwM2VnZW5ldmUgPSBnZW5ldmU7XFxuIFxcbi1cXHR0dW5uZWxfaWRfdG9fdm5pKGdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8ua2V5LnR1bl9pZCwgdm5pKTtcXG4rXFx0dHVubmVsX2lkX3RvX3ZuaShjZmctXFx1MDAzZWluZm8ua2V5LnR1bl9pZCwgdm5pKTtcXG4gXFx0aGFzaCA9IGdlbmV2ZV9uZXRfdm5pX2hhc2godm5pKTtcXG4gXFx0aGxpc3RfYWRkX2hlYWRfcmN1KFxcdTAwMjZub2RlLVxcdTAwM2VobGlzdCwgXFx1MDAyNmdzLVxcdTAwM2V2bmlfbGlzdFtoYXNoXSk7XFxuIFxcdHJldHVybiAwO1xcbkBAIC0xMTM3LDIxICsxMTQyLDIzIEBAIHN0YXRpYyBpbnQgZ2VuZXZlX3NvY2tfYWRkKHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsIGJvb2wgaXB2NilcXG4gc3RhdGljIGludCBnZW5ldmVfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiB7XFxuIFxcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xcbi1cXHRib29sIGR1YWxzdGFjayA9IGdlbmV2ZS1cXHUwMDNlY2ZnLmR1YWxzdGFjaztcXG4tXFx0Ym9vbCBpcHY0LCBpcHY2O1xcbitcXHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnO1xcbitcXHRib29sIGlwdjQsIGlwdjYsIGR1YWxzdGFjaztcXG4gXFx0aW50IHJldCA9IDA7XFxuIFxcbi1cXHRpcHY2ID0gZ2VuZXZlLVxcdTAwM2VjZmcuaW5mby5tb2RlIFxcdTAwMjYgSVBfVFVOTkVMX0lORk9fSVBWNiB8fCBkdWFsc3RhY2s7XFxuK1xcdGNmZyA9IHJ0bmxfZGVyZWZlcmVuY2UoZ2VuZXZlLVxcdTAwM2VjZmcpO1xcbitcXHRkdWFsc3RhY2sgPSBjZmctXFx1MDAzZWR1YWxzdGFjaztcXG4rXFx0aXB2NiA9IGNmZy1cXHUwMDNlaW5mby5tb2RlIFxcdTAwMjYgSVBfVFVOTkVMX0lORk9fSVBWNiB8fCBkdWFsc3RhY2s7XFxuIFxcdGlwdjQgPSAhaXB2NiB8fCBkdWFsc3RhY2s7XFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbiBcXHRpZiAoaXB2Nikge1xcbi1cXHRcXHRyZXQgPSBnZW5ldmVfc29ja19hZGQoZ2VuZXZlLCB0cnVlKTtcXG4rXFx0XFx0cmV0ID0gZ2VuZXZlX3NvY2tfYWRkKGdlbmV2ZSwgY2ZnLCB0cnVlKTtcXG4gXFx0XFx0aWYgKHJldCBcXHUwMDNjIDAgXFx1MDAyNlxcdTAwMjYgcmV0ICE9IC1FQUZOT1NVUFBPUlQpXFxuIFxcdFxcdFxcdGlwdjQgPSBmYWxzZTtcXG4gXFx0fVxcbiAjZW5kaWZcXG4gXFx0aWYgKGlwdjQpXFxuLVxcdFxcdHJldCA9IGdlbmV2ZV9zb2NrX2FkZChnZW5ldmUsIGZhbHNlKTtcXG4rXFx0XFx0cmV0ID0gZ2VuZXZlX3NvY2tfYWRkKGdlbmV2ZSwgY2ZnLCBmYWxzZSk7XFxuIFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiBcXHRcXHRnZW5ldmVfc29ja19yZWxlYXNlKGdlbmV2ZSk7XFxuIFxcbkBAIC0xMTg5LDYgKzExOTYsNyBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfYnVpbGRfaGVhZGVyKHN0cnVjdCBnZW5ldmVoZHIgKmdlbmV2ZWgsXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChjb25zdCBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxcbitcXHRcXHRcXHRcXHQgICAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsXFxuIFxcdFxcdFxcdFxcdCAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4ge1xcbiBcXHRzdHJ1Y3QgZ2VuZXZlX3NrYl9jYiAqY2IgPSBHRU5FVkVfU0tCX0NCKHNrYik7XFxuQEAgLTEyMDEsNyArMTIwOSw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChjb25zdCBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxcbiBcXHRjYi1cXHUwMDNlZ3JvX2hpbnRfbGVuID0gMDtcXG4gXFxuIFxcdC8qIFRyeSB0byBhZGQgdGhlIEdSTyBoaW50IG9ubHkgaW4gY2FzZSBvZiBkb3VibGUgZW5jYXAuICovXFxuLVxcdGlmICghZ2VuZXZlLVxcdTAwM2VjZmcuZ3JvX2hpbnQgfHwgIXNrYi1cXHUwMDNlZW5jYXBzdWxhdGlvbilcXG4rXFx0aWYgKCFjZmctXFx1MDAzZWdyb19oaW50IHx8ICFza2ItXFx1MDAzZWVuY2Fwc3VsYXRpb24pXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0LypcXG5AQCAtMTI2MiwxMCArMTI3MCwxMSBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfcHV0X2dyb19oaW50X29wdChzdHJ1Y3QgZ2VuZXZlaGRyICpnbnZoLCBpbnQgb3B0X3NpemUsXFxuIFxcbiBzdGF0aWMgaW50IGdlbmV2ZV9idWlsZF9za2Ioc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiBcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxcbi1cXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgaW50IGlwX2hkcl9sZW4pXFxuK1xcdFxcdFxcdCAgICBjb25zdCBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZywgaW50IGlwX2hkcl9sZW4pXFxuIHtcXG4gXFx0Ym9vbCB1ZHBfc3VtID0gdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULCBpbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzKTtcXG4tXFx0Ym9vbCBpbm5lcl9wcm90b19pbmhlcml0ID0gZ2VuZXZlLVxcdTAwM2VjZmcuaW5uZXJfcHJvdG9faW5oZXJpdDtcXG4rXFx0Ym9vbCBpbm5lcl9wcm90b19pbmhlcml0ID0gY2ZnLVxcdTAwM2Vpbm5lcl9wcm90b19pbmhlcml0O1xcbiBcXHRib29sIHhuZXQgPSAhbmV0X2VxKGdlbmV2ZS1cXHUwMDNlbmV0LCBkZXZfbmV0KGdlbmV2ZS1cXHUwMDNlZGV2KSk7XFxuIFxcdHN0cnVjdCBnZW5ldmVfc2tiX2NiICpjYiA9IEdFTkVWRV9TS0JfQ0Ioc2tiKTtcXG4gXFx0c3RydWN0IGdlbmV2ZWhkciAqZ252aDtcXG5AQCAtMTMwNiwxNCArMTMxNSwxNCBAQCBzdGF0aWMgaW50IGdlbmV2ZV9idWlsZF9za2Ioc3RydWN0IGRzdF9lbnRyeSAqZHN0LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLFxcbiB9XFxuIFxcbiBzdGF0aWMgdTggZ2VuZXZlX2dldF9kc2ZpZWxkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuK1xcdFxcdFxcdCAgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyxcXG4gXFx0XFx0XFx0ICAgICBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXFxuIFxcdFxcdFxcdCAgICAgYm9vbCAqdXNlX2NhY2hlKVxcbiB7XFxuLVxcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xcbiBcXHR1OCBkc2ZpZWxkO1xcbiBcXG4gXFx0ZHNmaWVsZCA9IGluZm8tXFx1MDAzZWtleS50b3M7XFxuLVxcdGlmIChkc2ZpZWxkID09IDEgXFx1MDAyNlxcdTAwMjYgIWdlbmV2ZS1cXHUwMDNlY2ZnLmNvbGxlY3RfbWQpIHtcXG4rXFx0aWYgKGNmZyBcXHUwMDI2XFx1MDAyNiBkc2ZpZWxkID09IDEgXFx1MDAyNlxcdTAwMjYgIWNmZy1cXHUwMDNlY29sbGVjdF9tZCkge1xcbiBcXHRcXHRkc2ZpZWxkID0gaXBfdHVubmVsX2dldF9kc2ZpZWxkKGlwX2hkcihza2IpLCBza2IpO1xcbiBcXHRcXHQqdXNlX2NhY2hlID0gZmFsc2U7XFxuIFxcdH1cXG5AQCAtMTMyMyw2ICsxMzMyLDcgQEAgc3RhdGljIHU4IGdlbmV2ZV9nZXRfZHNmaWVsZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXG4gc3RhdGljIGludCBnZW5ldmVfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0XFx0XFx0ICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSxcXG4rXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyxcXG4gXFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHN0cnVjdCBnZW5ldmVfc29jayAqZ3M0ID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS1cXHUwMDNlc29jazQpO1xcbkBAIC0xMzM1LDM1ICsxMzQ1LDM1IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdF9fYmUxNiBzcG9ydDtcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGlmIChza2Jfdmxhbl9pbmV0X3ByZXBhcmUoc2tiLCBnZW5ldmUtXFx1MDAzZWNmZy5pbm5lcl9wcm90b19pbmhlcml0KSlcXG4rXFx0aWYgKHNrYl92bGFuX2luZXRfcHJlcGFyZShza2IsIGNmZy1cXHUwMDNlaW5uZXJfcHJvdG9faW5oZXJpdCkpXFxuIFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXG4gXFx0aWYgKCFnczQpXFxuIFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4gXFx0dXNlX2NhY2hlID0gaXBfdHVubmVsX2RzdF9jYWNoZV91c2FibGUoc2tiLCBpbmZvKTtcXG4tXFx0dG9zID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBpbmZvLCBcXHUwMDI2dXNlX2NhY2hlKTtcXG4rXFx0dG9zID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBjZmcsIGluZm8sIFxcdTAwMjZ1c2VfY2FjaGUpO1xcbiBcXHRzcG9ydCA9IHVkcF9mbG93X3NyY19wb3J0KGdlbmV2ZS1cXHUwMDNlbmV0LCBza2IsXFxuLVxcdFxcdFxcdFxcdCAgZ2VuZXZlLVxcdTAwM2VjZmcucG9ydF9taW4sXFxuLVxcdFxcdFxcdFxcdCAgZ2VuZXZlLVxcdTAwM2VjZmcucG9ydF9tYXgsIHRydWUpO1xcbitcXHRcXHRcXHRcXHQgIGNmZy1cXHUwMDNlcG9ydF9taW4sXFxuK1xcdFxcdFxcdFxcdCAgY2ZnLVxcdTAwM2Vwb3J0X21heCwgdHJ1ZSk7XFxuIFxcbiBcXHRydCA9IHVkcF90dW5uZWxfZHN0X2xvb2t1cChza2IsIGRldiwgZ2VuZXZlLVxcdTAwM2VuZXQsIDAsIFxcdTAwMjZzYWRkcixcXG4gXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmluZm8tXFx1MDAzZWtleSxcXG4tXFx0XFx0XFx0XFx0ICAgc3BvcnQsIGdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8ua2V5LnRwX2RzdCwgdG9zLFxcbitcXHRcXHRcXHRcXHQgICBzcG9ydCwgY2ZnLVxcdTAwM2VpbmZvLmtleS50cF9kc3QsIHRvcyxcXG4gXFx0XFx0XFx0XFx0ICAgdXNlX2NhY2hlID9cXG4gXFx0XFx0XFx0XFx0ICAgKHN0cnVjdCBkc3RfY2FjaGUgKilcXHUwMDI2aW5mby1cXHUwMDNlZHN0X2NhY2hlIDogTlVMTCk7XFxuIFxcdGlmIChJU19FUlIocnQpKVxcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihydCk7XFxuIFxcbi1cXHRpZiAoZ2VuZXZlLVxcdTAwM2VjZmcuaW5mby5rZXkudS5pcHY0LnNyYyBcXHUwMDI2XFx1MDAyNlxcbi1cXHQgICAgc2FkZHIgIT0gZ2VuZXZlLVxcdTAwM2VjZmcuaW5mby5rZXkudS5pcHY0LnNyYykge1xcbitcXHRpZiAoY2ZnLVxcdTAwM2VpbmZvLmtleS51LmlwdjQuc3JjIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBzYWRkciAhPSBjZmctXFx1MDAzZWluZm8ua2V5LnUuaXB2NC5zcmMpIHtcXG4gXFx0XFx0ZHN0X3JlbGVhc2UoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcbiBcXHRcXHRyZXR1cm4gLUVBRERSTk9UQVZBSUw7XFxuIFxcdH1cXG4gXFxuIFxcdGVyciA9IHNrYl90dW5uZWxfY2hlY2tfcG10dShza2IsIFxcdTAwMjZydC1cXHUwMDNlZHN0LFxcbiBcXHRcXHRcXHRcXHQgICAgR0VORVZFX0lQVjRfSExFTiArIGluZm8tXFx1MDAzZW9wdGlvbnNfbGVuICtcXG4tXFx0XFx0XFx0XFx0ICAgIGdlbmV2ZV9idWlsZF9ncm9faGludF9vcHQoZ2VuZXZlLCBza2IpLFxcbitcXHRcXHRcXHRcXHQgICAgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChnZW5ldmUsIGNmZywgc2tiKSxcXG4gXFx0XFx0XFx0XFx0ICAgIG5ldGlmX2lzX2FueV9icmlkZ2VfcG9ydChkZXYpKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0ZHN0X3JlbGVhc2UoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcbkBAIC0xMzk3LDIxICsxNDA3LDIxIEBAIHN0YXRpYyBpbnQgZ2VuZXZlX3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdH1cXG4gXFxuIFxcdHRvcyA9IGlwX3R1bm5lbF9lY25fZW5jYXAodG9zLCBpcF9oZHIoc2tiKSwgc2tiKTtcXG4tXFx0aWYgKGdlbmV2ZS1cXHUwMDNlY2ZnLmNvbGxlY3RfbWQpIHtcXG4rXFx0aWYgKGNmZy1cXHUwMDNlY29sbGVjdF9tZCkge1xcbiBcXHRcXHR0dGwgPSBrZXktXFx1MDAzZXR0bDtcXG4gXFxuIFxcdFxcdGRmID0gdGVzdF9iaXQoSVBfVFVOTkVMX0RPTlRfRlJBR01FTlRfQklULCBrZXktXFx1MDAzZXR1bl9mbGFncykgP1xcbiBcXHRcXHQgICAgIGh0b25zKElQX0RGKSA6IDA7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGlmIChnZW5ldmUtXFx1MDAzZWNmZy50dGxfaW5oZXJpdClcXG4rXFx0XFx0aWYgKGNmZy1cXHUwMDNldHRsX2luaGVyaXQpXFxuIFxcdFxcdFxcdHR0bCA9IGlwX3R1bm5lbF9nZXRfdHRsKGlwX2hkcihza2IpLCBza2IpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHR0bCA9IGtleS1cXHUwMDNldHRsO1xcbiBcXHRcXHR0dGwgPSB0dGwgPyA6IGlwNF9kc3RfaG9wbGltaXQoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QpO1xcbiBcXG4tXFx0XFx0aWYgKGdlbmV2ZS1cXHUwMDNlY2ZnLmRmID09IEdFTkVWRV9ERl9TRVQpIHtcXG4rXFx0XFx0aWYgKGNmZy1cXHUwMDNlZGYgPT0gR0VORVZFX0RGX1NFVCkge1xcbiBcXHRcXHRcXHRkZiA9IGh0b25zKElQX0RGKTtcXG4tXFx0XFx0fSBlbHNlIGlmIChnZW5ldmUtXFx1MDAzZWNmZy5kZiA9PSBHRU5FVkVfREZfSU5IRVJJVCkge1xcbitcXHRcXHR9IGVsc2UgaWYgKGNmZy1cXHUwMDNlZGYgPT0gR0VORVZFX0RGX0lOSEVSSVQpIHtcXG4gXFx0XFx0XFx0c3RydWN0IGV0aGhkciAqZXRoID0gc2tiX2V0aF9oZHIoc2tiKTtcXG4gXFxuIFxcdFxcdFxcdGlmIChudG9ocyhldGgtXFx1MDAzZWhfcHJvdG8pID09IEVUSF9QX0lQVjYpIHtcXG5AQCAtMTQyNSwxMyArMTQzNSwxMyBAQCBzdGF0aWMgaW50IGdlbmV2ZV94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGVyciA9IGdlbmV2ZV9idWlsZF9za2IoXFx1MDAyNnJ0LVxcdTAwM2Vkc3QsIHNrYiwgaW5mbywgZ2VuZXZlLFxcbitcXHRlcnIgPSBnZW5ldmVfYnVpbGRfc2tiKFxcdTAwMjZydC1cXHUwMDNlZHN0LCBza2IsIGluZm8sIGdlbmV2ZSwgY2ZnLFxcbiBcXHRcXHRcXHQgICAgICAgc2l6ZW9mKHN0cnVjdCBpcGhkcikpO1xcbiBcXHRpZiAodW5saWtlbHkoZXJyKSlcXG4gXFx0XFx0cmV0dXJuIGVycjtcXG4gXFxuIFxcdHVkcF90dW5uZWxfeG1pdF9za2IocnQsIGdzNC1cXHUwMDNlc2ssIHNrYiwgc2FkZHIsIGluZm8tXFx1MDAzZWtleS51LmlwdjQuZHN0LFxcbi1cXHRcXHRcXHQgICAgdG9zLCB0dGwsIGRmLCBzcG9ydCwgZ2VuZXZlLVxcdTAwM2VjZmcuaW5mby5rZXkudHBfZHN0LFxcbitcXHRcXHRcXHQgICAgdG9zLCB0dGwsIGRmLCBzcG9ydCwgY2ZnLVxcdTAwM2VpbmZvLmtleS50cF9kc3QsXFxuIFxcdFxcdFxcdCAgICAhbmV0X2VxKGdlbmV2ZS1cXHUwMDNlbmV0LCBkZXZfbmV0KGdlbmV2ZS1cXHUwMDNlZGV2KSksXFxuIFxcdFxcdFxcdCAgICAhdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULCBpbmZvLVxcdTAwM2VrZXkudHVuX2ZsYWdzKSxcXG4gXFx0XFx0XFx0ICAgIDApO1xcbkBAIC0xNDQxLDYgKzE0NTEsNyBAQCBzdGF0aWMgaW50IGdlbmV2ZV94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gc3RhdGljIGludCBnZW5ldmU2X3htaXRfc2tiKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdFxcdFxcdCAgICBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxcbitcXHRcXHRcXHQgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyxcXG4gXFx0XFx0XFx0ICAgIGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbylcXG4ge1xcbiBcXHRzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzNiA9IHJjdV9kZXJlZmVyZW5jZShnZW5ldmUtXFx1MDAzZXNvY2s2KTtcXG5AQCAtMTQ1MiwzNSArMTQ2MywzNSBAQCBzdGF0aWMgaW50IGdlbmV2ZTZfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0X19iZTE2IHNwb3J0O1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4tXFx0aWYgKHNrYl92bGFuX2luZXRfcHJlcGFyZShza2IsIGdlbmV2ZS1cXHUwMDNlY2ZnLmlubmVyX3Byb3RvX2luaGVyaXQpKVxcbitcXHRpZiAoc2tiX3ZsYW5faW5ldF9wcmVwYXJlKHNrYiwgY2ZnLVxcdTAwM2Vpbm5lcl9wcm90b19pbmhlcml0KSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbiBcXHRpZiAoIWdzNilcXG4gXFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbiBcXHR1c2VfY2FjaGUgPSBpcF90dW5uZWxfZHN0X2NhY2hlX3VzYWJsZShza2IsIGluZm8pO1xcbi1cXHRwcmlvID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBpbmZvLCBcXHUwMDI2dXNlX2NhY2hlKTtcXG4rXFx0cHJpbyA9IGdlbmV2ZV9nZXRfZHNmaWVsZChza2IsIGRldiwgY2ZnLCBpbmZvLCBcXHUwMDI2dXNlX2NhY2hlKTtcXG4gXFx0c3BvcnQgPSB1ZHBfZmxvd19zcmNfcG9ydChnZW5ldmUtXFx1MDAzZW5ldCwgc2tiLFxcbi1cXHRcXHRcXHRcXHQgIGdlbmV2ZS1cXHUwMDNlY2ZnLnBvcnRfbWluLFxcbi1cXHRcXHRcXHRcXHQgIGdlbmV2ZS1cXHUwMDNlY2ZnLnBvcnRfbWF4LCB0cnVlKTtcXG4rXFx0XFx0XFx0XFx0ICBjZmctXFx1MDAzZXBvcnRfbWluLFxcbitcXHRcXHRcXHRcXHQgIGNmZy1cXHUwMDNlcG9ydF9tYXgsIHRydWUpO1xcbiBcXG4gXFx0ZHN0ID0gdWRwX3R1bm5lbDZfZHN0X2xvb2t1cChza2IsIGRldiwgZ2VuZXZlLVxcdTAwM2VuZXQsIGdzNi1cXHUwMDNlc2ssIDAsXFxuIFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnNhZGRyLCBrZXksIHNwb3J0LFxcbi1cXHRcXHRcXHRcXHQgICAgIGdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8ua2V5LnRwX2RzdCwgcHJpbyxcXG4rXFx0XFx0XFx0XFx0ICAgICBjZmctXFx1MDAzZWluZm8ua2V5LnRwX2RzdCwgcHJpbyxcXG4gXFx0XFx0XFx0XFx0ICAgICB1c2VfY2FjaGUgP1xcbiBcXHRcXHRcXHRcXHQgICAgIChzdHJ1Y3QgZHN0X2NhY2hlICopXFx1MDAyNmluZm8tXFx1MDAzZWRzdF9jYWNoZSA6IE5VTEwpO1xcbiBcXHRpZiAoSVNfRVJSKGRzdCkpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKGRzdCk7XFxuIFxcbi1cXHRpZiAoIWlwdjZfYWRkcl9hbnkoXFx1MDAyNmdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8ua2V5LnUuaXB2Ni5zcmMpIFxcdTAwMjZcXHUwMDI2XFxuLVxcdCAgICAhaXB2Nl9hZGRyX2VxdWFsKFxcdTAwMjZzYWRkciwgXFx1MDAyNmdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8ua2V5LnUuaXB2Ni5zcmMpKSB7XFxuK1xcdGlmICghaXB2Nl9hZGRyX2FueShcXHUwMDI2Y2ZnLVxcdTAwM2VpbmZvLmtleS51LmlwdjYuc3JjKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIWlwdjZfYWRkcl9lcXVhbChcXHUwMDI2c2FkZHIsIFxcdTAwMjZjZmctXFx1MDAzZWluZm8ua2V5LnUuaXB2Ni5zcmMpKSB7XFxuIFxcdFxcdGRzdF9yZWxlYXNlKGRzdCk7XFxuIFxcdFxcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcXG4gXFx0fVxcbiBcXG4gXFx0ZXJyID0gc2tiX3R1bm5lbF9jaGVja19wbXR1KHNrYiwgZHN0LFxcbiBcXHRcXHRcXHRcXHQgICAgR0VORVZFX0lQVjZfSExFTiArIGluZm8tXFx1MDAzZW9wdGlvbnNfbGVuICtcXG4tXFx0XFx0XFx0XFx0ICAgIGdlbmV2ZV9idWlsZF9ncm9faGludF9vcHQoZ2VuZXZlLCBza2IpLFxcbitcXHRcXHRcXHRcXHQgICAgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChnZW5ldmUsIGNmZywgc2tiKSxcXG4gXFx0XFx0XFx0XFx0ICAgIG5ldGlmX2lzX2FueV9icmlkZ2VfcG9ydChkZXYpKTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0ZHN0X3JlbGVhc2UoZHN0KTtcXG5AQCAtMTUxMywyMiArMTUyNCwyMiBAQCBzdGF0aWMgaW50IGdlbmV2ZTZfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4gXFx0fVxcbiBcXG4gXFx0cHJpbyA9IGlwX3R1bm5lbF9lY25fZW5jYXAocHJpbywgaXBfaGRyKHNrYiksIHNrYik7XFxuLVxcdGlmIChnZW5ldmUtXFx1MDAzZWNmZy5jb2xsZWN0X21kKSB7XFxuK1xcdGlmIChjZmctXFx1MDAzZWNvbGxlY3RfbWQpIHtcXG4gXFx0XFx0dHRsID0ga2V5LVxcdTAwM2V0dGw7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGlmIChnZW5ldmUtXFx1MDAzZWNmZy50dGxfaW5oZXJpdClcXG4rXFx0XFx0aWYgKGNmZy1cXHUwMDNldHRsX2luaGVyaXQpXFxuIFxcdFxcdFxcdHR0bCA9IGlwX3R1bm5lbF9nZXRfdHRsKGlwX2hkcihza2IpLCBza2IpO1xcbiBcXHRcXHRlbHNlXFxuIFxcdFxcdFxcdHR0bCA9IGtleS1cXHUwMDNldHRsO1xcbiBcXHRcXHR0dGwgPSB0dGwgPyA6IGlwNl9kc3RfaG9wbGltaXQoZHN0KTtcXG4gXFx0fVxcbi1cXHRlcnIgPSBnZW5ldmVfYnVpbGRfc2tiKGRzdCwgc2tiLCBpbmZvLCBnZW5ldmUsIHNpemVvZihzdHJ1Y3QgaXB2NmhkcikpO1xcbitcXHRlcnIgPSBnZW5ldmVfYnVpbGRfc2tiKGRzdCwgc2tiLCBpbmZvLCBnZW5ldmUsIGNmZywgc2l6ZW9mKHN0cnVjdCBpcHY2aGRyKSk7XFxuIFxcdGlmICh1bmxpa2VseShlcnIpKVxcbiBcXHRcXHRyZXR1cm4gZXJyO1xcbiBcXG4gXFx0dWRwX3R1bm5lbDZfeG1pdF9za2IoZHN0LCBnczYtXFx1MDAzZXNrLCBza2IsIGRldixcXG4gXFx0XFx0XFx0ICAgICBcXHUwMDI2c2FkZHIsIFxcdTAwMjZrZXktXFx1MDAzZXUuaXB2Ni5kc3QsIHByaW8sIHR0bCxcXG4tXFx0XFx0XFx0ICAgICBpbmZvLVxcdTAwM2VrZXkubGFiZWwsIHNwb3J0LCBnZW5ldmUtXFx1MDAzZWNmZy5pbmZvLmtleS50cF9kc3QsXFxuK1xcdFxcdFxcdCAgICAgaW5mby1cXHUwMDNla2V5LmxhYmVsLCBzcG9ydCwgY2ZnLVxcdTAwM2VpbmZvLmtleS50cF9kc3QsXFxuIFxcdFxcdFxcdCAgICAgIXRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGluZm8tXFx1MDAzZWtleS50dW5fZmxhZ3MpLFxcbiBcXHRcXHRcXHQgICAgIDApO1xcbkBAIC0xNTM5LDI4ICsxNTUwLDMxIEBAIHN0YXRpYyBpbnQgZ2VuZXZlNl94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBzdGF0aWMgbmV0ZGV2X3R4X3QgZ2VuZXZlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4tXFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gTlVMTDtcXG4rXFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gTlVMTDtcXG4rXFx0Y29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZztcXG4gXFx0aW50IGVycjtcXG4gXFxuLVxcdGlmIChnZW5ldmUtXFx1MDAzZWNmZy5jb2xsZWN0X21kKSB7XFxuK1xcdHJjdV9yZWFkX2xvY2soKTtcXG4rXFx0Y2ZnID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS1cXHUwMDNlY2ZnKTtcXG4rXFx0aWYgKGNmZy1cXHUwMDNlY29sbGVjdF9tZCkge1xcbiBcXHRcXHRpbmZvID0gc2tiX3R1bm5lbF9pbmZvKHNrYik7XFxuIFxcdFxcdGlmICh1bmxpa2VseSghaW5mbyB8fCAhKGluZm8tXFx1MDAzZW1vZGUgXFx1MDAyNiBJUF9UVU5ORUxfSU5GT19UWCkpKSB7XFxuIFxcdFxcdFxcdG5ldGRldl9kYmcoZGV2LCBcXFwibm8gdHVubmVsIG1ldGFkYXRhXFxcXG5cXFwiKTtcXG4gXFx0XFx0XFx0ZGV2X2tmcmVlX3NrYihza2IpO1xcbiBcXHRcXHRcXHRkZXZfZHN0YXRzX3R4X2Ryb3BwZWQoZGV2KTtcXG4rXFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIFxcdFxcdFxcdHJldHVybiBORVRERVZfVFhfT0s7XFxuIFxcdFxcdH1cXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0aW5mbyA9IFxcdTAwMjZnZW5ldmUtXFx1MDAzZWNmZy5pbmZvO1xcbitcXHRcXHRpbmZvID0gXFx1MDAyNmNmZy1cXHUwMDNlaW5mbztcXG4gXFx0fVxcbiBcXG4tXFx0cmN1X3JlYWRfbG9jaygpO1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gXFx0aWYgKGluZm8tXFx1MDAzZW1vZGUgXFx1MDAyNiBJUF9UVU5ORUxfSU5GT19JUFY2KVxcbi1cXHRcXHRlcnIgPSBnZW5ldmU2X3htaXRfc2tiKHNrYiwgZGV2LCBnZW5ldmUsIGluZm8pO1xcbitcXHRcXHRlcnIgPSBnZW5ldmU2X3htaXRfc2tiKHNrYiwgZGV2LCBnZW5ldmUsIGNmZywgaW5mbyk7XFxuIFxcdGVsc2VcXG4gI2VuZGlmXFxuLVxcdFxcdGVyciA9IGdlbmV2ZV94bWl0X3NrYihza2IsIGRldiwgZ2VuZXZlLCBpbmZvKTtcXG4rXFx0XFx0ZXJyID0gZ2VuZXZlX3htaXRfc2tiKHNrYiwgZGV2LCBnZW5ldmUsIGNmZywgaW5mbyk7XFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiBcXG4gXFx0aWYgKGxpa2VseSghZXJyKSlcXG5AQCAtMTU5Myw4ICsxNjA3LDEzIEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIHtcXG4gXFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gc2tiX3R1bm5lbF9pbmZvKHNrYik7XFxuIFxcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnO1xcbiBcXHRfX2JlMTYgc3BvcnQ7XFxuIFxcbitcXHRjZmcgPSByY3VfZGVyZWZlcmVuY2UoZ2VuZXZlLVxcdTAwM2VjZmcpO1xcbitcXHRpZiAodW5saWtlbHkoIWNmZykpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4gXFx0aWYgKGlwX3R1bm5lbF9pbmZvX2FmKGluZm8pID09IEFGX0lORVQpIHtcXG4gXFx0XFx0c3RydWN0IHJ0YWJsZSAqcnQ7XFxuIFxcdFxcdHN0cnVjdCBnZW5ldmVfc29jayAqZ3M0ID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS1cXHUwMDNlc29jazQpO1xcbkBAIC0xNjA2LDE0ICsxNjI1LDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlPO1xcbiBcXG4gXFx0XFx0dXNlX2NhY2hlID0gaXBfdHVubmVsX2RzdF9jYWNoZV91c2FibGUoc2tiLCBpbmZvKTtcXG4tXFx0XFx0dG9zID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBpbmZvLCBcXHUwMDI2dXNlX2NhY2hlKTtcXG4rXFx0XFx0dG9zID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBjZmcsIGluZm8sIFxcdTAwMjZ1c2VfY2FjaGUpO1xcbiBcXHRcXHRzcG9ydCA9IHVkcF9mbG93X3NyY19wb3J0KGdlbmV2ZS1cXHUwMDNlbmV0LCBza2IsXFxuLVxcdFxcdFxcdFxcdFxcdCAgZ2VuZXZlLVxcdTAwM2VjZmcucG9ydF9taW4sXFxuLVxcdFxcdFxcdFxcdFxcdCAgZ2VuZXZlLVxcdTAwM2VjZmcucG9ydF9tYXgsIHRydWUpO1xcbitcXHRcXHRcXHRcXHRcXHQgIGNmZy1cXHUwMDNlcG9ydF9taW4sXFxuK1xcdFxcdFxcdFxcdFxcdCAgY2ZnLVxcdTAwM2Vwb3J0X21heCwgdHJ1ZSk7XFxuIFxcbiBcXHRcXHRydCA9IHVkcF90dW5uZWxfZHN0X2xvb2t1cChza2IsIGRldiwgZ2VuZXZlLVxcdTAwM2VuZXQsIDAsIFxcdTAwMjZzYWRkcixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmluZm8tXFx1MDAzZWtleSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgc3BvcnQsIGdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8ua2V5LnRwX2RzdCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgc3BvcnQsIGNmZy1cXHUwMDNlaW5mby5rZXkudHBfZHN0LFxcbiBcXHRcXHRcXHRcXHRcXHQgICB0b3MsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIHVzZV9jYWNoZSA/IFxcdTAwMjZpbmZvLVxcdTAwM2Vkc3RfY2FjaGUgOiBOVUxMKTtcXG4gXFx0XFx0aWYgKElTX0VSUihydCkpXFxuQEAgLTE2MzMsMTQgKzE2NTIsMTQgQEAgc3RhdGljIGludCBnZW5ldmVfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU87XFxuIFxcbiBcXHRcXHR1c2VfY2FjaGUgPSBpcF90dW5uZWxfZHN0X2NhY2hlX3VzYWJsZShza2IsIGluZm8pO1xcbi1cXHRcXHRwcmlvID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBpbmZvLCBcXHUwMDI2dXNlX2NhY2hlKTtcXG4rXFx0XFx0cHJpbyA9IGdlbmV2ZV9nZXRfZHNmaWVsZChza2IsIGRldiwgY2ZnLCBpbmZvLCBcXHUwMDI2dXNlX2NhY2hlKTtcXG4gXFx0XFx0c3BvcnQgPSB1ZHBfZmxvd19zcmNfcG9ydChnZW5ldmUtXFx1MDAzZW5ldCwgc2tiLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGdlbmV2ZS1cXHUwMDNlY2ZnLnBvcnRfbWluLFxcbi1cXHRcXHRcXHRcXHRcXHQgIGdlbmV2ZS1cXHUwMDNlY2ZnLnBvcnRfbWF4LCB0cnVlKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICBjZmctXFx1MDAzZXBvcnRfbWluLFxcbitcXHRcXHRcXHRcXHRcXHQgIGNmZy1cXHUwMDNlcG9ydF9tYXgsIHRydWUpO1xcbiBcXG4gXFx0XFx0ZHN0ID0gdWRwX3R1bm5lbDZfZHN0X2xvb2t1cChza2IsIGRldiwgZ2VuZXZlLVxcdTAwM2VuZXQsIGdzNi1cXHUwMDNlc2ssIDAsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNnNhZGRyLCBcXHUwMDI2aW5mby1cXHUwMDNla2V5LCBzcG9ydCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICBnZW5ldmUtXFx1MDAzZWNmZy5pbmZvLmtleS50cF9kc3QsIHByaW8sXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgY2ZnLVxcdTAwM2VpbmZvLmtleS50cF9kc3QsIHByaW8sXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgdXNlX2NhY2hlID8gXFx1MDAyNmluZm8tXFx1MDAzZWRzdF9jYWNoZSA6IE5VTEwpO1xcbiBcXHRcXHRpZiAoSVNfRVJSKGRzdCkpXFxuIFxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGRzdCk7XFxuQEAgLTE2NTMsNyArMTY3Miw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXFxuIFxcdH1cXG4gXFxuIFxcdGluZm8tXFx1MDAzZWtleS50cF9zcmMgPSBzcG9ydDtcXG4tXFx0aW5mby1cXHUwMDNla2V5LnRwX2RzdCA9IGdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8ua2V5LnRwX2RzdDtcXG4rXFx0aW5mby1cXHUwMDNla2V5LnRwX2RzdCA9IGNmZy1cXHUwMDNlaW5mby5rZXkudHBfZHN0O1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG5AQCAtMTcwOSw3ICsxNzI4LDUwIEBAIHN0YXRpYyB2b2lkIGdlbmV2ZV9vZmZsb2FkX3J4X3BvcnRzKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIGJvb2wgcHVzaClcXG4gXFx0fVxcbiB9XFxuIFxcbitzdGF0aWMgc3RydWN0IGdlbmV2ZV9jb25maWcgKmdlbmV2ZV9jb25maWdfYWxsb2MoY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKnNyYylcXG4re1xcbitcXHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0Y2ZnID0ga21lbWR1cChzcmMsIHNpemVvZigqc3JjKSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmICghY2ZnKVxcbitcXHRcXHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcXG4rXFxuK1xcdGNmZy1cXHUwMDNlaW5mby5kc3RfY2FjaGUuY2FjaGUgPSBOVUxMO1xcbitcXHRlcnIgPSBkc3RfY2FjaGVfaW5pdChcXHUwMDI2Y2ZnLVxcdTAwM2VpbmZvLmRzdF9jYWNoZSwgR0ZQX0tFUk5FTCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0a2ZyZWUoY2ZnKTtcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIGNmZztcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZ2VuZXZlX2NvbmZpZ19mcmVlKHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcpXFxuK3tcXG4rXFx0aWYgKGNmZykge1xcbitcXHRcXHRkc3RfY2FjaGVfZGVzdHJveShcXHUwMDI2Y2ZnLVxcdTAwM2VpbmZvLmRzdF9jYWNoZSk7XFxuK1xcdFxcdGtmcmVlKGNmZyk7XFxuK1xcdH1cXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgZ2VuZXZlX2NvbmZpZ19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXFxuK3tcXG4rXFx0c3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZywgcmN1KTtcXG4rXFxuK1xcdGdlbmV2ZV9jb25maWdfZnJlZShjZmcpO1xcbit9XFxuK1xcbiAvKiBJbml0aWFsaXplIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqL1xcbitzdGF0aWMgdm9pZCBnZW5ldmVfZnJlZV9kZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4re1xcbitcXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4rXFx0c3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2VuZXZlLVxcdTAwM2VjZmcsIDEpO1xcbitcXG4rXFx0Z2VuZXZlX2NvbmZpZ19mcmVlKGNmZyk7XFxuK1xcdFJDVV9JTklUX1BPSU5URVIoZ2VuZXZlLVxcdTAwM2VjZmcsIE5VTEwpO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBnZW5ldmVfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbiBcXHRldGhlcl9zZXR1cChkZXYpO1xcbkBAIC0xNzE3LDYgKzE3NzksNyBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4gXFx0ZGV2LVxcdTAwM2VuZXRkZXZfb3BzID0gXFx1MDAyNmdlbmV2ZV9uZXRkZXZfb3BzO1xcbiBcXHRkZXYtXFx1MDAzZWV0aHRvb2xfb3BzID0gXFx1MDAyNmdlbmV2ZV9ldGh0b29sX29wcztcXG4gXFx0ZGV2LVxcdTAwM2VuZWVkc19mcmVlX25ldGRldiA9IHRydWU7XFxuK1xcdGRldi1cXHUwMDNlcHJpdl9kZXN0cnVjdG9yID0gZ2VuZXZlX2ZyZWVfZGV2O1xcbiBcXG4gXFx0U0VUX05FVERFVl9ERVZUWVBFKGRldiwgXFx1MDAyNmdlbmV2ZV90eXBlKTtcXG4gXFxuQEAgLTE4NzgsMTUgKzE5NDEsMTcgQEAgc3RhdGljIHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmVfZmluZF9kZXYoc3RydWN0IGdlbmV2ZV9uZXQgKmduLFxcbiBcXHQqdHVuX29uX3NhbWVfcG9ydCA9IGZhbHNlO1xcbiBcXHQqdHVuX2NvbGxlY3RfbWQgPSBmYWxzZTtcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShnZW5ldmUsIFxcdTAwMjZnbi1cXHUwMDNlZ2VuZXZlX2xpc3QsIG5leHQpIHtcXG4tXFx0XFx0aWYgKGluZm8tXFx1MDAzZWtleS50cF9kc3QgPT0gZ2VuZXZlLVxcdTAwM2VjZmcuaW5mby5rZXkudHBfZHN0IFxcdTAwMjZcXHUwMDI2XFxuLVxcdFxcdCAgICAoY2ZnLVxcdTAwM2VkdWFsc3RhY2sgfHwgZ2VuZXZlLVxcdTAwM2VjZmcuZHVhbHN0YWNrIHx8XFxuLVxcdFxcdCAgICAgZ2VuZXZlX3NhZGRyX2NvbmZsaWN0KGluZm8sIFxcdTAwMjZnZW5ldmUtXFx1MDAzZWNmZy5pbmZvKSkpIHtcXG4tXFx0XFx0XFx0KnR1bl9jb2xsZWN0X21kIHw9IGdlbmV2ZS1cXHUwMDNlY2ZnLmNvbGxlY3RfbWQ7XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpnY2ZnID0gcnRubF9kZXJlZmVyZW5jZShnZW5ldmUtXFx1MDAzZWNmZyk7XFxuK1xcbitcXHRcXHRpZiAoaW5mby1cXHUwMDNla2V5LnRwX2RzdCA9PSBnY2ZnLVxcdTAwM2VpbmZvLmtleS50cF9kc3QgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgIChjZmctXFx1MDAzZWR1YWxzdGFjayB8fCBnY2ZnLVxcdTAwM2VkdWFsc3RhY2sgfHxcXG4rXFx0XFx0ICAgICBnZW5ldmVfc2FkZHJfY29uZmxpY3QoaW5mbywgXFx1MDAyNmdjZmctXFx1MDAzZWluZm8pKSkge1xcbitcXHRcXHRcXHQqdHVuX2NvbGxlY3RfbWQgfD0gZ2NmZy1cXHUwMDNlY29sbGVjdF9tZDtcXG4gXFx0XFx0XFx0KnR1bl9vbl9zYW1lX3BvcnQgPSB0cnVlO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlmIChpbmZvLVxcdTAwM2VrZXkudHVuX2lkID09IGdlbmV2ZS1cXHUwMDNlY2ZnLmluZm8ua2V5LnR1bl9pZCBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgaW5mby1cXHUwMDNla2V5LnRwX2RzdCA9PSBnZW5ldmUtXFx1MDAzZWNmZy5pbmZvLmtleS50cF9kc3QgXFx1MDAyNlxcdTAwMjZcXG4tXFx0XFx0ICAgICFtZW1jbXAoXFx1MDAyNmluZm8tXFx1MDAzZWtleS51LCBcXHUwMDI2Z2VuZXZlLVxcdTAwM2VjZmcuaW5mby5rZXkudSwgc2l6ZW9mKGluZm8tXFx1MDAzZWtleS51KSkpXFxuK1xcdFxcdGlmIChpbmZvLVxcdTAwM2VrZXkudHVuX2lkID09IGdjZmctXFx1MDAzZWluZm8ua2V5LnR1bl9pZCBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHQgICAgaW5mby1cXHUwMDNla2V5LnRwX2RzdCA9PSBnY2ZnLVxcdTAwM2VpbmZvLmtleS50cF9kc3QgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0ICAgICFtZW1jbXAoXFx1MDAyNmluZm8tXFx1MDAzZWtleS51LCBcXHUwMDI2Z2NmZy1cXHUwMDNlaW5mby5rZXkudSwgc2l6ZW9mKGluZm8tXFx1MDAzZWtleS51KSkpXFxuIFxcdFxcdFxcdHQgPSBnZW5ldmU7XFxuIFxcdH1cXG4gXFx0cmV0dXJuIHQ7XFxuQEAgLTE5MjIsNiArMTk4Nyw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2NvbmZpZ3VyZShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdHN0cnVjdCBnZW5ldmVfZGV2ICp0LCAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4gXFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gXFx1MDAyNmNmZy1cXHUwMDNlaW5mbztcXG4gXFx0Ym9vbCB0dW5fY29sbGVjdF9tZCwgdHVuX29uX3NhbWVfcG9ydDtcXG4rXFx0c3RydWN0IGdlbmV2ZV9jb25maWcgKm5ld19jZmc7XFxuIFxcdGludCBlcnIsIGVuY2FwX2xlbjtcXG4gXFxuIFxcdGlmIChjZmctXFx1MDAzZWNvbGxlY3RfbWQgXFx1MDAyNlxcdTAwMjYgIWlzX3RubF9pbmZvX3plcm8oaW5mbykpIHtcXG5AQCAtMTk2MiwxMCArMjAyOCwxMyBAQCBzdGF0aWMgaW50IGdlbmV2ZV9jb25maWd1cmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFxuLVxcdGRzdF9jYWNoZV9yZXNldChcXHUwMDI2Z2VuZXZlLVxcdTAwM2VjZmcuaW5mby5kc3RfY2FjaGUpO1xcbi1cXHRtZW1jcHkoXFx1MDAyNmdlbmV2ZS1cXHUwMDNlY2ZnLCBjZmcsIHNpemVvZigqY2ZnKSk7XFxuK1xcdG5ld19jZmcgPSBnZW5ldmVfY29uZmlnX2FsbG9jKGNmZyk7XFxuK1xcdGlmIChJU19FUlIobmV3X2NmZykpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKG5ld19jZmcpO1xcbitcXG4rXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGdlbmV2ZS1cXHUwMDNlY2ZnLCBuZXdfY2ZnKTtcXG4gXFxuLVxcdGlmIChnZW5ldmUtXFx1MDAzZWNmZy5pbm5lcl9wcm90b19pbmhlcml0KSB7XFxuK1xcdGlmIChjZmctXFx1MDAzZWlubmVyX3Byb3RvX2luaGVyaXQpIHtcXG4gXFx0XFx0ZGV2LVxcdTAwM2VoZWFkZXJfb3BzID0gTlVMTDtcXG4gXFx0XFx0ZGV2LVxcdTAwM2V0eXBlID0gQVJQSFJEX05PTkU7XFxuIFxcdFxcdGRldi1cXHUwMDNlaGFyZF9oZWFkZXJfbGVuID0gMDtcXG5AQCAtMjMyMyw4MSArMjM5Miw0NSBAQCBzdGF0aWMgaW50IGdlbmV2ZV9uZXdsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbi0vKiBRdWllc2NlcyB0aGUgZ2VuZXZlIGRldmljZSBkYXRhIHBhdGggZm9yIGJvdGggVFggYW5kIFJYLlxcbi0gKlxcbi0gKiBPbiB0cmFuc21pdCBnZW5ldmUgY2hlY2tzIGZvciBub24tTlVMTCBnZW5ldmVfc29jayBiZWZvcmUgaXQgcHJvY2VlZHMuXFxuLSAqIFNvLCBpZiB3ZSBzZXQgdGhhdCBzb2NrZXQgdG8gTlVMTCB1bmRlciBSQ1UgYW5kIHdhaXQgZm9yIHN5bmNocm9uaXplX25ldCgpXFxuLSAqIHRvIGNvbXBsZXRlIGZvciB0aGUgZXhpc3Rpbmcgc2V0IG9mIGluLWZsaWdodCBwYWNrZXRzIHRvIGJlIHRyYW5zbWl0dGVkLFxcbi0gKiB0aGVuIHdlIHdvdWxkIGhhdmUgcXVpZXNjZWQgdGhlIHRyYW5zbWl0IGRhdGEgcGF0aC4gQWxsIHRoZSBmdXR1cmUgcGFja2V0c1xcbi0gKiB3aWxsIGdldCBkcm9wcGVkIHVudGlsIHdlIHVucXVpZXNjZSB0aGUgZGF0YSBwYXRoLlxcbi0gKlxcbi0gKiBPbiByZWNlaXZlIGdlbmV2ZSBkZXJlZmVyZW5jZSB0aGUgZ2VuZXZlX3NvY2sgc3Rhc2hlZCBpbiB0aGUgc29ja2V0LiBTbyxcXG4tICogaWYgd2Ugc2V0IHRoYXQgdG8gTlVMTCB1bmRlciBSQ1UgYW5kIHdhaXQgZm9yIHN5bmNocm9uaXplX25ldCgpIHRvXFxuLSAqIGNvbXBsZXRlLCB0aGVuIHdlIHdvdWxkIGhhdmUgcXVpZXNjZWQgdGhlIHJlY2VpdmUgZGF0YSBwYXRoLlxcbisvKiBVcGRhdGUgdGhlIGRldmljZSBjb25maWd1cmF0aW9uIHVuZGVyIFJUTkwuXFxuKyAqIFdlIHVzZSBSQ1Ugc3dhcCB0byB1cGRhdGUgdGhlIGNvbmZpZ3VyYXRpb24gYXRvbWljYWxseSwgc28gdGhlIGRhdGEgcGF0aFxcbisgKiAoYm90aCBUWCBhbmQgUlgpIGNhbiBjb250aW51ZSBydW5uaW5nIHdpdGhvdXQgaW50ZXJydXB0aW9uIG9yIHBhY2tldCBsb3NzLlxcbiAgKi9cXG4tc3RhdGljIHZvaWQgZ2VuZXZlX3F1aWVzY2Uoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgc3RydWN0IGdlbmV2ZV9zb2NrICoqZ3M0LFxcbi1cXHRcXHRcXHQgICBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKipnczYpXFxuLXtcXG4tXFx0KmdzNCA9IHJ0bmxfZGVyZWZlcmVuY2UoZ2VuZXZlLVxcdTAwM2Vzb2NrNCk7XFxuLVxcdHJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtXFx1MDAzZXNvY2s0LCBOVUxMKTtcXG4tXFx0aWYgKCpnczQpXFxuLVxcdFxcdHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKCgqZ3M0KS1cXHUwMDNlc2ssIE5VTEwpO1xcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4tXFx0KmdzNiA9IHJ0bmxfZGVyZWZlcmVuY2UoZ2VuZXZlLVxcdTAwM2Vzb2NrNik7XFxuLVxcdHJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtXFx1MDAzZXNvY2s2LCBOVUxMKTtcXG4tXFx0aWYgKCpnczYpXFxuLVxcdFxcdHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKCgqZ3M2KS1cXHUwMDNlc2ssIE5VTEwpO1xcbi0jZWxzZVxcbi1cXHQqZ3M2ID0gTlVMTDtcXG4tI2VuZGlmXFxuLVxcdHN5bmNocm9uaXplX25ldCgpO1xcbi19XFxuLVxcbi0vKiBSZXN1bWVzIHRoZSBnZW5ldmUgZGV2aWNlIGRhdGEgcGF0aCBmb3IgYm90aCBUWCBhbmQgUlguICovXFxuLXN0YXRpYyB2b2lkIGdlbmV2ZV91bnF1aWVzY2Uoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgc3RydWN0IGdlbmV2ZV9zb2NrICpnczQsXFxuLVxcdFxcdFxcdCAgICAgc3RydWN0IGdlbmV2ZV9zb2NrIF9fbWF5YmVfdW51c2VkICpnczYpXFxuLXtcXG4tXFx0cmN1X2Fzc2lnbl9wb2ludGVyKGdlbmV2ZS1cXHUwMDNlc29jazQsIGdzNCk7XFxuLVxcdGlmIChnczQpXFxuLVxcdFxcdHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKGdzNC1cXHUwMDNlc2ssIGdzNCk7XFxuLSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxcbi1cXHRyY3VfYXNzaWduX3BvaW50ZXIoZ2VuZXZlLVxcdTAwM2Vzb2NrNiwgZ3M2KTtcXG4tXFx0aWYgKGdzNilcXG4tXFx0XFx0cmN1X2Fzc2lnbl9za191c2VyX2RhdGEoZ3M2LVxcdTAwM2VzaywgZ3M2KTtcXG4tI2VuZGlmXFxuLX1cXG4tXFxuIHN0YXRpYyBpbnQgZ2VuZXZlX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbmxhdHRyICpkYXRhW10sXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiB7XFxuIFxcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xcbi1cXHRzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzNCwgKmdzNjtcXG4tXFx0c3RydWN0IGdlbmV2ZV9jb25maWcgY2ZnO1xcbitcXHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqb2xkX2NmZyA9IHJ0bmxfZGVyZWZlcmVuY2UoZ2VuZXZlLVxcdTAwM2VjZmcpO1xcbitcXHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnO1xcbiBcXHRpbnQgZXJyO1xcbiBcXG4gXFx0LyogSWYgdGhlIGdlbmV2ZSBkZXZpY2UgaXMgY29uZmlndXJlZCBmb3IgbWV0YWRhdGEgKG9yIGV4dGVybmFsbHlcXG4gXFx0ICogY29udHJvbGxlZCwgZm9yIGV4YW1wbGUsIE9WUyksIHRoZW4gbm90aGluZyBjYW4gYmUgY2hhbmdlZC5cXG4gXFx0ICovXFxuLVxcdGlmIChnZW5ldmUtXFx1MDAzZWNmZy5jb2xsZWN0X21kKVxcbitcXHRpZiAob2xkX2NmZy1cXHUwMDNlY29sbGVjdF9tZClcXG4gXFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiBcXG4gXFx0LyogU3RhcnQgd2l0aCB0aGUgZXhpc3RpbmcgaW5mby4gKi9cXG4tXFx0bWVtY3B5KFxcdTAwMjZjZmcsIFxcdTAwMjZnZW5ldmUtXFx1MDAzZWNmZywgc2l6ZW9mKGNmZykpO1xcbi1cXHRlcnIgPSBnZW5ldmVfbmwyaW5mbyh0YiwgZGF0YSwgZXh0YWNrLCBcXHUwMDI2Y2ZnLCB0cnVlKTtcXG4rXFx0Y2ZnID0gZ2VuZXZlX2NvbmZpZ19hbGxvYyhvbGRfY2ZnKTtcXG4rXFx0aWYgKElTX0VSUihjZmcpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihjZmcpO1xcbitcXG4rXFx0ZXJyID0gZ2VuZXZlX25sMmluZm8odGIsIGRhdGEsIGV4dGFjaywgY2ZnLCB0cnVlKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0Z290byBlcnJfZnJlZV9jZmc7XFxuIFxcbi1cXHRpZiAoIWdlbmV2ZV9kc3RfYWRkcl9lcXVhbChcXHUwMDI2Z2VuZXZlLVxcdTAwM2VjZmcuaW5mbywgXFx1MDAyNmNmZy5pbmZvKSkge1xcbi1cXHRcXHRkc3RfY2FjaGVfcmVzZXQoXFx1MDAyNmNmZy5pbmZvLmRzdF9jYWNoZSk7XFxuLVxcdFxcdGdlbmV2ZV9saW5rX2NvbmZpZyhkZXYsIFxcdTAwMjZjZmcuaW5mbywgdGIpO1xcbi1cXHR9XFxuK1xcdGlmICghZ2VuZXZlX2RzdF9hZGRyX2VxdWFsKFxcdTAwMjZvbGRfY2ZnLVxcdTAwM2VpbmZvLCBcXHUwMDI2Y2ZnLVxcdTAwM2VpbmZvKSlcXG4rXFx0XFx0Z2VuZXZlX2xpbmtfY29uZmlnKGRldiwgXFx1MDAyNmNmZy1cXHUwMDNlaW5mbywgdGIpO1xcbiBcXG4tXFx0Z2VuZXZlX3F1aWVzY2UoZ2VuZXZlLCBcXHUwMDI2Z3M0LCBcXHUwMDI2Z3M2KTtcXG4tXFx0bWVtY3B5KFxcdTAwMjZnZW5ldmUtXFx1MDAzZWNmZywgXFx1MDAyNmNmZywgc2l6ZW9mKGNmZykpO1xcbi1cXHRnZW5ldmVfdW5xdWllc2NlKGdlbmV2ZSwgZ3M0LCBnczYpO1xcbitcXHRyY3VfYXNzaWduX3BvaW50ZXIoZ2VuZXZlLVxcdTAwM2VjZmcsIGNmZyk7XFxuIFxcbitcXHRjYWxsX3JjdV9odXJyeShcXHUwMDI2b2xkX2NmZy1cXHUwMDNlcmN1LCBnZW5ldmVfY29uZmlnX2ZyZWVfcmN1KTtcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfZnJlZV9jZmc6XFxuK1xcdGdlbmV2ZV9jb25maWdfZnJlZShjZmcpO1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCBnZW5ldmVfZGVsbGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKVxcbkBAIC0yNDMxLDE2ICsyNDY0LDI3IEBAIHN0YXRpYyBzaXplX3QgZ2VuZXZlX2dldF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcbiBzdGF0aWMgaW50IGdlbmV2ZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4ge1xcbi1cXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcXG4tXFx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gXFx1MDAyNmdlbmV2ZS1cXHUwMDNlY2ZnLmluZm87XFxuLVxcdGJvb2wgdHRsX2luaGVyaXQgPSBnZW5ldmUtXFx1MDAzZWNmZy50dGxfaW5oZXJpdDtcXG4tXFx0Ym9vbCBtZXRhZGF0YSA9IGdlbmV2ZS1cXHUwMDNlY2ZnLmNvbGxlY3RfbWQ7XFxuLVxcdHN0cnVjdCBpZmxhX2dlbmV2ZV9wb3J0X3JhbmdlIHBvcnRzID0ge1xcbi1cXHRcXHQubG93XFx0PSBodG9ucyhnZW5ldmUtXFx1MDAzZWNmZy5wb3J0X21pbiksXFxuLVxcdFxcdC5oaWdoXFx0PSBodG9ucyhnZW5ldmUtXFx1MDAzZWNmZy5wb3J0X21heCksXFxuLVxcdH07XFxuK1xcdGNvbnN0IHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xcbitcXHRzdHJ1Y3QgaWZsYV9nZW5ldmVfcG9ydF9yYW5nZSBwb3J0cztcXG4rXFx0Y29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZztcXG4rXFx0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvO1xcbitcXHRib29sIHR0bF9pbmhlcml0LCBtZXRhZGF0YTtcXG4gXFx0X191OCB0bXBfdm5pWzNdO1xcbiBcXHRfX3UzMiB2bmk7XFxuK1xcdGludCBlcnIgPSAwO1xcbitcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRjZmcgPSByY3VfZGVyZWZlcmVuY2UoZ2VuZXZlLVxcdTAwM2VjZmcpO1xcbitcXHRpZiAoIWNmZykge1xcbitcXHRcXHRlcnIgPSAtRU5PREVWO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0aW5mbyA9IFxcdTAwMjZjZmctXFx1MDAzZWluZm87XFxuK1xcdHR0bF9pbmhlcml0ID0gY2ZnLVxcdTAwM2V0dGxfaW5oZXJpdDtcXG4rXFx0bWV0YWRhdGEgPSBjZmctXFx1MDAzZWNvbGxlY3RfbWQ7XFxuK1xcdHBvcnRzLmxvdyA9IGh0b25zKGNmZy1cXHUwMDNlcG9ydF9taW4pO1xcbitcXHRwb3J0cy5oaWdoID0gaHRvbnMoY2ZnLVxcdTAwM2Vwb3J0X21heCk7XFxuIFxcbiBcXHR0dW5uZWxfaWRfdG9fdm5pKGluZm8tXFx1MDAzZWtleS50dW5faWQsIHRtcF92bmkpO1xcbiBcXHR2bmkgPSAodG1wX3ZuaVswXSBcXHUwMDNjXFx1MDAzYyAxNikgfCAodG1wX3ZuaVsxXSBcXHUwMDNjXFx1MDAzYyA4KSB8IHRtcF92bmlbMl07XFxuQEAgLTI0NjgsMTcgKzI1MTIsMTcgQEAgc3RhdGljIGludCBnZW5ldmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuICNlbmRpZlxcbiBcXHR9XFxuIFxcbi1cXHRpZiAoIWdlbmV2ZS1cXHUwMDNlY2ZnLmR1YWxzdGFjaykge1xcbitcXHRpZiAoIWNmZy1cXHUwMDNlZHVhbHN0YWNrKSB7XFxuIFxcdFxcdGlmIChpcF90dW5uZWxfaW5mb19hZihpbmZvKSA9PSBBRl9JTkVUKSB7XFxuIFxcdFxcdFxcdGlmICgoaW5mby1cXHUwMDNla2V5LnUuaXB2NC5zcmMgfHxcXG4tXFx0XFx0XFx0ICAgICBnZW5ldmUtXFx1MDAzZWNmZy5jb2xsZWN0X21kKSBcXHUwMDI2XFx1MDAyNlxcbitcXHRcXHRcXHQgICAgIG1ldGFkYXRhKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHRcXHQgICAgbmxhX3B1dF9pbl9hZGRyKHNrYiwgSUZMQV9HRU5FVkVfTE9DQUwsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICBpbmZvLVxcdTAwM2VrZXkudS5pcHY0LnNyYykpXFxuIFxcdFxcdFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gXFx0XFx0fSBlbHNlIHtcXG4gXFx0XFx0XFx0aWYgKCghaXB2Nl9hZGRyX2FueShcXHUwMDI2aW5mby1cXHUwMDNla2V5LnUuaXB2Ni5zcmMpIHx8XFxuLVxcdFxcdFxcdCAgICAgZ2VuZXZlLVxcdTAwM2VjZmcuY29sbGVjdF9tZCkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0XFx0ICAgICBtZXRhZGF0YSkgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0ICAgIG5sYV9wdXRfaW42X2FkZHIoc2tiLCBJRkxBX0dFTkVWRV9MT0NBTDYsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgXFx1MDAyNmluZm8tXFx1MDAzZWtleS51LmlwdjYuc3JjKSlcXG4gXFx0XFx0XFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuQEAgLTI0OTEsNyArMjUzNSw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxcbiBcXHQgICAgbmxhX3B1dF9iZTMyKHNrYiwgSUZMQV9HRU5FVkVfTEFCRUwsIGluZm8tXFx1MDAzZWtleS5sYWJlbCkpXFxuIFxcdFxcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xcbiBcXG4tXFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBJRkxBX0dFTkVWRV9ERiwgZ2VuZXZlLVxcdTAwM2VjZmcuZGYpKVxcbitcXHRpZiAobmxhX3B1dF91OChza2IsIElGTEFfR0VORVZFX0RGLCBjZmctXFx1MDAzZWRmKSlcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbiBcXHRpZiAobmxhX3B1dF9iZTE2KHNrYiwgSUZMQV9HRU5FVkVfUE9SVCwgaW5mby1cXHUwMDNla2V5LnRwX2RzdCkpXFxuQEAgLTI1MDIsMjggKzI1NDYsMzEgQEAgc3RhdGljIGludCBnZW5ldmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXFxuIFxcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcXG4gXFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBJRkxBX0dFTkVWRV9VRFBfWkVST19DU1VNNl9SWCxcXG4tXFx0XFx0ICAgICAgICFnZW5ldmUtXFx1MDAzZWNmZy51c2VfdWRwNl9yeF9jaGVja3N1bXMpKVxcbitcXHRcXHQgICAgICAgIWNmZy1cXHUwMDNldXNlX3VkcDZfcnhfY2hlY2tzdW1zKSlcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuICNlbmRpZlxcbiBcXG4gXFx0aWYgKG5sYV9wdXRfdTgoc2tiLCBJRkxBX0dFTkVWRV9UVExfSU5IRVJJVCwgdHRsX2luaGVyaXQpKVxcbiBcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gXFxuLVxcdGlmIChnZW5ldmUtXFx1MDAzZWNmZy5pbm5lcl9wcm90b19pbmhlcml0IFxcdTAwMjZcXHUwMDI2XFxuK1xcdGlmIChjZmctXFx1MDAzZWlubmVyX3Byb3RvX2luaGVyaXQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIG5sYV9wdXRfZmxhZyhza2IsIElGTEFfR0VORVZFX0lOTkVSX1BST1RPX0lOSEVSSVQpKVxcbiBcXHRcXHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcXG4gXFxuIFxcdGlmIChubGFfcHV0KHNrYiwgSUZMQV9HRU5FVkVfUE9SVF9SQU5HRSwgc2l6ZW9mKHBvcnRzKSwgXFx1MDAyNnBvcnRzKSlcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbi1cXHRpZiAoZ2VuZXZlLVxcdTAwM2VjZmcuZ3JvX2hpbnQgXFx1MDAyNlxcdTAwMjZcXG4rXFx0aWYgKGNmZy1cXHUwMDNlZ3JvX2hpbnQgXFx1MDAyNlxcdTAwMjZcXG4gXFx0ICAgIG5sYV9wdXRfZmxhZyhza2IsIElGTEFfR0VORVZFX0dST19ISU5UKSlcXG4gXFx0XFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XFxuIFxcbi1cXHRyZXR1cm4gMDtcXG4rb3V0OlxcbitcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4gXFxuIG5sYV9wdXRfZmFpbHVyZTpcXG4tXFx0cmV0dXJuIC1FTVNHU0laRTtcXG4rXFx0ZXJyID0gLUVNU0dTSVpFO1xcbitcXHRnb3RvIG91dDtcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGdlbmV2ZV9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbkBAIC0yNjcxLDYgKzI3MTgsNyBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgZ2VuZXZlX2NsZWFudXBfbW9kdWxlKHZvaWQpXFxuIFxcdHJ0bmxfbGlua191bnJlZ2lzdGVyKFxcdTAwMjZnZW5ldmVfbGlua19vcHMpO1xcbiBcXHR1bnJlZ2lzdGVyX25ldGRldmljZV9ub3RpZmllcihcXHUwMDI2Z2VuZXZlX25vdGlmaWVyX2Jsb2NrKTtcXG4gXFx0dW5yZWdpc3Rlcl9wZXJuZXRfc3Vic3lzKFxcdTAwMjZnZW5ldmVfbmV0X29wcyk7XFxuK1xcdHJjdV9iYXJyaWVyKCk7XFxuIH1cXG4gbW9kdWxlX2V4aXQoZ2VuZXZlX2NsZWFudXBfbW9kdWxlKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjUzOjMyLjU2NTg3NjUwMloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1Njk5OTgzNjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiR0VORVZFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZ2VuZXZlX2NoYW5nZWxpbmtcIixcbiAgICBcImdlbmV2ZV9jb25maWd1cmVcIixcbiAgICBcImdlbmV2ZV9maWxsX2luZm9cIixcbiAgICBcImdlbmV2ZV9jb25maWdfYWxsb2NcIixcbiAgICBcImdlbmV2ZV9mcmVlX2RldlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgR0VORVZFIGRyaXZlciB0byB1c2UgUkNVIGZvciBpdHMgY29uZmlndXJhdGlvbiAoYHN0cnVjdCBnZW5ldmVfY29uZmlnYCksIHJlcGxhY2luZyB0aGUgcHJldmlvdXMgc3luY2hyb25vdXMgYGdlbmV2ZV9xdWllc2NlYC9gZ2VuZXZlX3VucXVpZXNjZWAgbWVjaGFuaXNtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgYWZmZWN0aW5nIGhvdyBjb25maWd1cmF0aW9uIHVwZGF0ZXMgYXJlIGhhbmRsZWQgY29uY3VycmVudGx5IHdpdGggdGhlIGRhdGEgcGF0aC4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIG5ldGxpbmsgY29udHJvbCBwYXRoIGZ1bmN0aW9ucyB0aGF0IGFsbG9jYXRlLCB1cGRhdGUsIGFuZCBmcmVlIHRoZSBjb25maWd1cmF0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDNhMWQwOTQxZGJjOTBkNjM5YTkyMmNhZDYwMjE1YjkzNzc1Yjk1NGVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1bCA3IDIzOjUzOjI5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZ2VuZXZlLmMgYi9kcml2ZXJzL25ldC9nZW5ldmUuY1xuaW5kZXggMzk2ZTFhMTEzY2Q0OWUuLjE3YmQzNTQzZDU4N2E5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZ2VuZXZlLmNcbisrKyBiL2RyaXZlcnMvbmV0L2dlbmV2ZS5jXG5AQCAtODIsNiArODIsNyBAQCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyB7XG4gXHR1MTZcdFx0XHRwb3J0X21pbjtcbiBcdHUxNlx0XHRcdHBvcnRfbWF4O1xuIFxuK1x0c3RydWN0IHJjdV9oZWFkXHRcdHJjdTtcbiBcdC8qIE11c3QgYmUgbGFzdCAtLWVuZHMgaW4gYSBmbGV4aWJsZS1hcnJheSBtZW1iZXIuICovXG4gXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm9cdGluZm87XG4gfTtcbkBAIC0xMDAsNyArMTAxLDcgQEAgc3RydWN0IGdlbmV2ZV9kZXYge1xuICNlbmRpZlxuIFx0c3RydWN0IGxpc3RfaGVhZCAgIG5leHQ7XHQvKiBnZW5ldmUncyBwZXIgbmFtZXNwYWNlIGxpc3QgKi9cbiBcdHN0cnVjdCBncm9fY2VsbHMgICBncm9fY2VsbHM7XG4tXHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyBjZmc7XG4rXHRzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyBfX3JjdSAqY2ZnO1xuIH07XG4gXG4gc3RydWN0IGdlbmV2ZV9zb2NrIHtcbkBAIC0xODIsOCArMTgzLDEwIEBAIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlX2xvb2t1cChzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzLFxuIFx0aGFzaCA9IGdlbmV2ZV9uZXRfdm5pX2hhc2godm5pKTtcbiBcdHZuaV9saXN0X2hlYWQgPSBcdTAwMjZncy1cdTAwM2V2bmlfbGlzdFtoYXNoXTtcbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCB2bmlfbGlzdF9oZWFkLCBobGlzdCkge1xuLVx0XHRpZiAoZXFfdHVuX2lkX2FuZF92bmkoKHU4ICopXHUwMDI2bm9kZS1cdTAwM2VnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnR1bl9pZCwgdm5pKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGFkZHIgPT0gbm9kZS1cdTAwM2VnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnUuaXB2NC5kc3QpXG4rXHRcdGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcgPSByY3VfZGVyZWZlcmVuY2Uobm9kZS1cdTAwM2VnZW5ldmUtXHUwMDNlY2ZnKTtcbitcbitcdFx0aWYgKGVxX3R1bl9pZF9hbmRfdm5pKCh1OCAqKVx1MDAyNmNmZy1cdTAwM2VpbmZvLmtleS50dW5faWQsIHZuaSkgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBhZGRyID09IGNmZy1cdTAwM2VpbmZvLmtleS51LmlwdjQuZHN0KVxuIFx0XHRcdHJldHVybiBub2RlLVx1MDAzZWdlbmV2ZTtcbiBcdH1cbiBcdHJldHVybiBOVUxMO1xuQEAgLTIwMSw4ICsyMDQsMTAgQEAgc3RhdGljIHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmU2X2xvb2t1cChzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzLFxuIFx0aGFzaCA9IGdlbmV2ZV9uZXRfdm5pX2hhc2godm5pKTtcbiBcdHZuaV9saXN0X2hlYWQgPSBcdTAwMjZncy1cdTAwM2V2bmlfbGlzdFtoYXNoXTtcbiBcdGhsaXN0X2Zvcl9lYWNoX2VudHJ5X3JjdShub2RlLCB2bmlfbGlzdF9oZWFkLCBobGlzdCkge1xuLVx0XHRpZiAoZXFfdHVuX2lkX2FuZF92bmkoKHU4ICopXHUwMDI2bm9kZS1cdTAwM2VnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnR1bl9pZCwgdm5pKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIGlwdjZfYWRkcl9lcXVhbChcdTAwMjZhZGRyNiwgXHUwMDI2bm9kZS1cdTAwM2VnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnUuaXB2Ni5kc3QpKVxuK1x0XHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnID0gcmN1X2RlcmVmZXJlbmNlKG5vZGUtXHUwMDNlZ2VuZXZlLVx1MDAzZWNmZyk7XG4rXG4rXHRcdGlmIChlcV90dW5faWRfYW5kX3ZuaSgodTggKilcdTAwMjZjZmctXHUwMDNlaW5mby5rZXkudHVuX2lkLCB2bmkpIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgaXB2Nl9hZGRyX2VxdWFsKFx1MDAyNmFkZHI2LCBcdTAwMjZjZmctXHUwMDNlaW5mby5rZXkudS5pcHY2LmRzdCkpXG4gXHRcdFx0cmV0dXJuIG5vZGUtXHUwMDNlZ2VuZXZlO1xuIFx0fVxuIFx0cmV0dXJuIE5VTEw7XG5AQCAtMzg2LDExICszOTEsNiBAQCBzdGF0aWMgaW50IGdlbmV2ZV9pbml0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRpZiAoZXJyKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuLVx0ZXJyID0gZHN0X2NhY2hlX2luaXQoXHUwMDI2Z2VuZXZlLVx1MDAzZWNmZy5pbmZvLmRzdF9jYWNoZSwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGdyb19jZWxsc19kZXN0cm95KFx1MDAyNmdlbmV2ZS1cdTAwM2Vncm9fY2VsbHMpO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuIFx0bmV0ZGV2X2xvY2tkZXBfc2V0X2NsYXNzZXMoZGV2KTtcbiBcdHJldHVybiAwO1xuIH1cbkBAIC0zOTksNyArMzk5LDYgQEAgc3RhdGljIHZvaWQgZ2VuZXZlX3VuaW5pdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xuIFxuLVx0ZHN0X2NhY2hlX2Rlc3Ryb3koXHUwMDI2Z2VuZXZlLVx1MDAzZWNmZy5pbmZvLmRzdF9jYWNoZSk7XG4gXHRncm9fY2VsbHNfZGVzdHJveShcdTAwMjZnZW5ldmUtXHUwMDNlZ3JvX2NlbGxzKTtcbiB9XG4gXG5AQCAtNjUwLDYgKzY0OSw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX3Bvc3RfZGVjYXBfaGludChjb25zdCBzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gLyogQ2FsbGJhY2sgZnJvbSBuZXQvaXB2NC91ZHAuYyB0byByZWNlaXZlIHBhY2tldHMgKi9cbiBzdGF0aWMgaW50IGdlbmV2ZV91ZHBfZW5jYXBfcmVjdihzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuK1x0Y29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZztcbiBcdHN0cnVjdCBnZW5ldmVoZHIgKmdlbmV2ZWg7XG4gXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlO1xuIFx0c3RydWN0IGdlbmV2ZV9zb2NrICpncztcbkBAIC02NzUsOCArNjc1LDkgQEAgc3RhdGljIGludCBnZW5ldmVfdWRwX2VuY2FwX3JlY3Yoc3RydWN0IHNvY2sgKnNrLCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFxuIFx0aW5uZXJfcHJvdG8gPSBnZW5ldmVoLVx1MDAzZXByb3RvX3R5cGU7XG4gXG4tXHRpZiAodW5saWtlbHkoKCFnZW5ldmUtXHUwMDNlY2ZnLmlubmVyX3Byb3RvX2luaGVyaXQgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAgIGlubmVyX3Byb3RvICE9IGh0b25zKEVUSF9QX1RFQikpKSkge1xuK1x0Y2ZnID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS1cdTAwM2VjZmcpO1xuK1x0aWYgKHVubGlrZWx5KCFjZmcgfHwgKCFjZmctXHUwMDNlaW5uZXJfcHJvdG9faW5oZXJpdCBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgICBpbm5lcl9wcm90byAhPSBodG9ucyhFVEhfUF9URUIpKSkpIHtcbiBcdFx0ZGV2X2RzdGF0c19yeF9kcm9wcGVkKGdlbmV2ZS1cdTAwM2VkZXYpO1xuIFx0XHRnb3RvIGRyb3A7XG4gXHR9XG5AQCAtNzYyLDkgKzc2MywxMCBAQCBzdGF0aWMgaW50IGdlbmV2ZV91ZHBfZW5jYXBfZXJyX2xvb2t1cChzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IpXG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3Qgc29jayAqZ2VuZXZlX2NyZWF0ZV9zb2NrKHN0cnVjdCBuZXQgKm5ldCxcbi1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBib29sIGlwdjYpXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSxcbitcdFx0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLCBib29sIGlwdjYpXG4ge1xuLVx0c3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gXHUwMDI2Z2VuZXZlLVx1MDAzZWNmZy5pbmZvO1xuK1x0Y29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvID0gXHUwMDI2Y2ZnLVx1MDAzZWluZm87XG4gXHRzdHJ1Y3QgdWRwX3BvcnRfY2ZnIHVkcF9jb25mO1xuIFx0c3RydWN0IHNvY2tldCAqc29jaztcbiBcdGludCBlcnI7XG5AQCAtNzc1LDcgKzc3Nyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgc29jayAqZ2VuZXZlX2NyZWF0ZV9zb2NrKHN0cnVjdCBuZXQgKm5ldCxcbiBcdGlmIChpcHY2KSB7XG4gXHRcdHVkcF9jb25mLmZhbWlseSA9IEFGX0lORVQ2O1xuIFx0XHR1ZHBfY29uZi5pcHY2X3Y2b25seSA9IDE7XG4tXHRcdHVkcF9jb25mLnVzZV91ZHA2X3J4X2NoZWNrc3VtcyA9IGdlbmV2ZS1cdTAwM2VjZmcudXNlX3VkcDZfcnhfY2hlY2tzdW1zO1xuK1x0XHR1ZHBfY29uZi51c2VfdWRwNl9yeF9jaGVja3N1bXMgPSBjZmctXHUwMDNldXNlX3VkcDZfcnhfY2hlY2tzdW1zO1xuIFx0XHR1ZHBfY29uZi5sb2NhbF9pcDYgPSBpbmZvLVx1MDAzZWtleS51LmlwdjYuc3JjO1xuIFx0fSBlbHNlXG4gI2VuZGlmXG5AQCAtOTkxLDcgKzk5Myw4IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2dyb19jb21wbGV0ZShzdHJ1Y3Qgc29jayAqc2ssIHN0cnVjdCBza19idWZmICpza2IsXG4gXG4gLyogQ3JlYXRlIG5ldyBsaXN0ZW4gc29ja2V0IGlmIG5lZWRlZCAqL1xuIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdlbmV2ZV9zb2NrZXRfY3JlYXRlKHN0cnVjdCBuZXQgKm5ldCxcbi1cdFx0XHRcdFx0XHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBib29sIGlwdjYpXG4rXHRcdFx0XHRcdFx0c3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSxcbitcdFx0XHRcdFx0XHRjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLCBib29sIGlwdjYpXG4ge1xuIFx0c3RydWN0IGdlbmV2ZV9uZXQgKmduID0gbmV0X2dlbmVyaWMobmV0LCBnZW5ldmVfbmV0X2lkKTtcbiBcdHN0cnVjdCB1ZHBfdHVubmVsX3NvY2tfY2ZnIHR1bm5lbF9jZmc7XG5AQCAtMTAwMyw3ICsxMDA2LDcgQEAgc3RhdGljIHN0cnVjdCBnZW5ldmVfc29jayAqZ2VuZXZlX3NvY2tldF9jcmVhdGUoc3RydWN0IG5ldCAqbmV0LFxuIFx0aWYgKCFncylcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4gXG4tXHRzayA9IGdlbmV2ZV9jcmVhdGVfc29jayhuZXQsIGdlbmV2ZSwgaXB2Nik7XG4rXHRzayA9IGdlbmV2ZV9jcmVhdGVfc29jayhuZXQsIGdlbmV2ZSwgY2ZnLCBpcHY2KTtcbiBcdGlmIChJU19FUlIoc2spKSB7XG4gXHRcdGtmcmVlKGdzKTtcbiBcdFx0cmV0dXJuIEVSUl9DQVNUKHNrKTtcbkBAIC0xMDYwLDEyICsxMDYzLDEzIEBAIHN0YXRpYyB2b2lkIGdlbmV2ZV9zb2NrX3JlbGVhc2Uoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSlcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBnZW5ldmVfc29jayAqZ2VuZXZlX2ZpbmRfc29jayhzdHJ1Y3QgbmV0ICpuZXQsXG4tXHRcdFx0XHRcdCAgICBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBib29sIGlwdjYpXG4rXHRcdFx0XHRcdCAgICBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuK1x0XHRcdFx0XHQgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZywgYm9vbCBpcHY2KVxuIHtcbiBcdHN0cnVjdCBnZW5ldmVfbmV0ICpnbiA9IG5ldF9nZW5lcmljKG5ldCwgZ2VuZXZlX25ldF9pZCk7XG4tXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLmluZm87XG4rXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBcdTAwMjZjZmctXHUwMDNlaW5mbztcbiBcdHNhX2ZhbWlseV90IGZhbWlseSA9IGlwdjYgPyBBRl9JTkVUNiA6IEFGX0lORVQ7XG4tXHRib29sIGdyb19oaW50ID0gZ2VuZXZlLVx1MDAzZWNmZy5ncm9faGludDtcbitcdGJvb2wgZ3JvX2hpbnQgPSBjZmctXHUwMDNlZ3JvX2hpbnQ7XG4gXHRfX2JlMTYgZHN0X3BvcnQgPSBpbmZvLVx1MDAzZWtleS50cF9kc3Q7XG4gXHRzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdzO1xuIFxuQEAgLTEwOTUsNyArMTA5OSw4IEBAIHN0YXRpYyBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKmdlbmV2ZV9maW5kX3NvY2soc3RydWN0IG5ldCAqbmV0LFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuLXN0YXRpYyBpbnQgZ2VuZXZlX3NvY2tfYWRkKHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsIGJvb2wgaXB2NilcbitzdGF0aWMgaW50IGdlbmV2ZV9zb2NrX2FkZChzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuK1x0XHRcdCAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsIGJvb2wgaXB2NilcbiB7XG4gXHRzdHJ1Y3QgbmV0ICpuZXQgPSBnZW5ldmUtXHUwMDNlbmV0O1xuIFx0c3RydWN0IGdlbmV2ZV9kZXZfbm9kZSAqbm9kZTtcbkBAIC0xMTAzLDE5ICsxMTA4LDE5IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX3NvY2tfYWRkKHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsIGJvb2wgaXB2NilcbiBcdF9fdTggdm5pWzNdO1xuIFx0X191MzIgaGFzaDtcbiBcbi1cdGdzID0gZ2VuZXZlX2ZpbmRfc29jayhuZXQsIGdlbmV2ZSwgaXB2Nik7XG4rXHRncyA9IGdlbmV2ZV9maW5kX3NvY2sobmV0LCBnZW5ldmUsIGNmZywgaXB2Nik7XG4gXHRpZiAoZ3MpIHtcbiBcdFx0Z3MtXHUwMDNlcmVmY250Kys7XG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuLVx0Z3MgPSBnZW5ldmVfc29ja2V0X2NyZWF0ZShuZXQsIGdlbmV2ZSwgaXB2Nik7XG4rXHRncyA9IGdlbmV2ZV9zb2NrZXRfY3JlYXRlKG5ldCwgZ2VuZXZlLCBjZmcsIGlwdjYpO1xuIFx0aWYgKElTX0VSUihncykpXG4gXHRcdHJldHVybiBQVFJfRVJSKGdzKTtcbiBcbiBvdXQ6XG4tXHRncy1cdTAwM2Vjb2xsZWN0X21kID0gZ2VuZXZlLVx1MDAzZWNmZy5jb2xsZWN0X21kO1xuLVx0Z3MtXHUwMDNlZ3JvX2hpbnQgPSBnZW5ldmUtXHUwMDNlY2ZnLmdyb19oaW50O1xuK1x0Z3MtXHUwMDNlY29sbGVjdF9tZCA9IGNmZy1cdTAwM2Vjb2xsZWN0X21kO1xuK1x0Z3MtXHUwMDNlZ3JvX2hpbnQgPSBjZmctXHUwMDNlZ3JvX2hpbnQ7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gXHRpZiAoaXB2Nikge1xuIFx0XHRyY3VfYXNzaWduX3BvaW50ZXIoZ2VuZXZlLVx1MDAzZXNvY2s2LCBncyk7XG5AQCAtMTEyOCw3ICsxMTMzLDcgQEAgc3RhdGljIGludCBnZW5ldmVfc29ja19hZGQoc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSwgYm9vbCBpcHY2KVxuIFx0fVxuIFx0bm9kZS1cdTAwM2VnZW5ldmUgPSBnZW5ldmU7XG4gXG4tXHR0dW5uZWxfaWRfdG9fdm5pKGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudHVuX2lkLCB2bmkpO1xuK1x0dHVubmVsX2lkX3RvX3ZuaShjZmctXHUwMDNlaW5mby5rZXkudHVuX2lkLCB2bmkpO1xuIFx0aGFzaCA9IGdlbmV2ZV9uZXRfdm5pX2hhc2godm5pKTtcbiBcdGhsaXN0X2FkZF9oZWFkX3JjdShcdTAwMjZub2RlLVx1MDAzZWhsaXN0LCBcdTAwMjZncy1cdTAwM2V2bmlfbGlzdFtoYXNoXSk7XG4gXHRyZXR1cm4gMDtcbkBAIC0xMTM3LDIxICsxMTQyLDIzIEBAIHN0YXRpYyBpbnQgZ2VuZXZlX3NvY2tfYWRkKHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsIGJvb2wgaXB2NilcbiBzdGF0aWMgaW50IGdlbmV2ZV9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuIFx0c3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7XG4tXHRib29sIGR1YWxzdGFjayA9IGdlbmV2ZS1cdTAwM2VjZmcuZHVhbHN0YWNrO1xuLVx0Ym9vbCBpcHY0LCBpcHY2O1xuK1x0Y29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZztcbitcdGJvb2wgaXB2NCwgaXB2NiwgZHVhbHN0YWNrO1xuIFx0aW50IHJldCA9IDA7XG4gXG4tXHRpcHY2ID0gZ2VuZXZlLVx1MDAzZWNmZy5pbmZvLm1vZGUgXHUwMDI2IElQX1RVTk5FTF9JTkZPX0lQVjYgfHwgZHVhbHN0YWNrO1xuK1x0Y2ZnID0gcnRubF9kZXJlZmVyZW5jZShnZW5ldmUtXHUwMDNlY2ZnKTtcbitcdGR1YWxzdGFjayA9IGNmZy1cdTAwM2VkdWFsc3RhY2s7XG4rXHRpcHY2ID0gY2ZnLVx1MDAzZWluZm8ubW9kZSBcdTAwMjYgSVBfVFVOTkVMX0lORk9fSVBWNiB8fCBkdWFsc3RhY2s7XG4gXHRpcHY0ID0gIWlwdjYgfHwgZHVhbHN0YWNrO1xuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIFx0aWYgKGlwdjYpIHtcbi1cdFx0cmV0ID0gZ2VuZXZlX3NvY2tfYWRkKGdlbmV2ZSwgdHJ1ZSk7XG4rXHRcdHJldCA9IGdlbmV2ZV9zb2NrX2FkZChnZW5ldmUsIGNmZywgdHJ1ZSk7XG4gXHRcdGlmIChyZXQgXHUwMDNjIDAgXHUwMDI2XHUwMDI2IHJldCAhPSAtRUFGTk9TVVBQT1JUKVxuIFx0XHRcdGlwdjQgPSBmYWxzZTtcbiBcdH1cbiAjZW5kaWZcbiBcdGlmIChpcHY0KVxuLVx0XHRyZXQgPSBnZW5ldmVfc29ja19hZGQoZ2VuZXZlLCBmYWxzZSk7XG4rXHRcdHJldCA9IGdlbmV2ZV9zb2NrX2FkZChnZW5ldmUsIGNmZywgZmFsc2UpO1xuIFx0aWYgKHJldCBcdTAwM2MgMClcbiBcdFx0Z2VuZXZlX3NvY2tfcmVsZWFzZShnZW5ldmUpO1xuIFxuQEAgLTExODksNiArMTE5Niw3IEBAIHN0YXRpYyB2b2lkIGdlbmV2ZV9idWlsZF9oZWFkZXIoc3RydWN0IGdlbmV2ZWhkciAqZ2VuZXZlaCxcbiB9XG4gXG4gc3RhdGljIGludCBnZW5ldmVfYnVpbGRfZ3JvX2hpbnRfb3B0KGNvbnN0IHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsXG4rXHRcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsXG4gXHRcdFx0XHQgICAgIHN0cnVjdCBza19idWZmICpza2IpXG4ge1xuIFx0c3RydWN0IGdlbmV2ZV9za2JfY2IgKmNiID0gR0VORVZFX1NLQl9DQihza2IpO1xuQEAgLTEyMDEsNyArMTIwOSw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChjb25zdCBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuIFx0Y2ItXHUwMDNlZ3JvX2hpbnRfbGVuID0gMDtcbiBcbiBcdC8qIFRyeSB0byBhZGQgdGhlIEdSTyBoaW50IG9ubHkgaW4gY2FzZSBvZiBkb3VibGUgZW5jYXAuICovXG4tXHRpZiAoIWdlbmV2ZS1cdTAwM2VjZmcuZ3JvX2hpbnQgfHwgIXNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKVxuK1x0aWYgKCFjZmctXHUwMDNlZ3JvX2hpbnQgfHwgIXNrYi1cdTAwM2VlbmNhcHN1bGF0aW9uKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdC8qXG5AQCAtMTI2MiwxMCArMTI3MCwxMSBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfcHV0X2dyb19oaW50X29wdChzdHJ1Y3QgZ2VuZXZlaGRyICpnbnZoLCBpbnQgb3B0X3NpemUsXG4gXG4gc3RhdGljIGludCBnZW5ldmVfYnVpbGRfc2tiKHN0cnVjdCBkc3RfZW50cnkgKmRzdCwgc3RydWN0IHNrX2J1ZmYgKnNrYixcbiBcdFx0XHQgICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvLFxuLVx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBpbnQgaXBfaGRyX2xlbilcbitcdFx0XHQgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSxcbitcdFx0XHQgICAgY29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZywgaW50IGlwX2hkcl9sZW4pXG4ge1xuIFx0Ym9vbCB1ZHBfc3VtID0gdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULCBpbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MpO1xuLVx0Ym9vbCBpbm5lcl9wcm90b19pbmhlcml0ID0gZ2VuZXZlLVx1MDAzZWNmZy5pbm5lcl9wcm90b19pbmhlcml0O1xuK1x0Ym9vbCBpbm5lcl9wcm90b19pbmhlcml0ID0gY2ZnLVx1MDAzZWlubmVyX3Byb3RvX2luaGVyaXQ7XG4gXHRib29sIHhuZXQgPSAhbmV0X2VxKGdlbmV2ZS1cdTAwM2VuZXQsIGRldl9uZXQoZ2VuZXZlLVx1MDAzZWRldikpO1xuIFx0c3RydWN0IGdlbmV2ZV9za2JfY2IgKmNiID0gR0VORVZFX1NLQl9DQihza2IpO1xuIFx0c3RydWN0IGdlbmV2ZWhkciAqZ252aDtcbkBAIC0xMzA2LDE0ICsxMzE1LDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2J1aWxkX3NrYihzdHJ1Y3QgZHN0X2VudHJ5ICpkc3QsIHN0cnVjdCBza19idWZmICpza2IsXG4gfVxuIFxuIHN0YXRpYyB1OCBnZW5ldmVfZ2V0X2RzZmllbGQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbitcdFx0XHQgICAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsXG4gXHRcdFx0ICAgICBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8sXG4gXHRcdFx0ICAgICBib29sICp1c2VfY2FjaGUpXG4ge1xuLVx0c3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7XG4gXHR1OCBkc2ZpZWxkO1xuIFxuIFx0ZHNmaWVsZCA9IGluZm8tXHUwMDNla2V5LnRvcztcbi1cdGlmIChkc2ZpZWxkID09IDEgXHUwMDI2XHUwMDI2ICFnZW5ldmUtXHUwMDNlY2ZnLmNvbGxlY3RfbWQpIHtcbitcdGlmIChjZmcgXHUwMDI2XHUwMDI2IGRzZmllbGQgPT0gMSBcdTAwMjZcdTAwMjYgIWNmZy1cdTAwM2Vjb2xsZWN0X21kKSB7XG4gXHRcdGRzZmllbGQgPSBpcF90dW5uZWxfZ2V0X2RzZmllbGQoaXBfaGRyKHNrYiksIHNrYik7XG4gXHRcdCp1c2VfY2FjaGUgPSBmYWxzZTtcbiBcdH1cbkBAIC0xMzIzLDYgKzEzMzIsNyBAQCBzdGF0aWMgdTggZ2VuZXZlX2dldF9kc2ZpZWxkKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsXG4gXG4gc3RhdGljIGludCBnZW5ldmVfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0XHQgICBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuK1x0XHRcdCAgIGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmcsXG4gXHRcdFx0ICAgY29uc3Qgc3RydWN0IGlwX3R1bm5lbF9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBnZW5ldmVfc29jayAqZ3M0ID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS1cdTAwM2Vzb2NrNCk7XG5AQCAtMTMzNSwzNSArMTM0NSwzNSBAQCBzdGF0aWMgaW50IGdlbmV2ZV94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0X19iZTE2IHNwb3J0O1xuIFx0aW50IGVycjtcbiBcbi1cdGlmIChza2Jfdmxhbl9pbmV0X3ByZXBhcmUoc2tiLCBnZW5ldmUtXHUwMDNlY2ZnLmlubmVyX3Byb3RvX2luaGVyaXQpKVxuK1x0aWYgKHNrYl92bGFuX2luZXRfcHJlcGFyZShza2IsIGNmZy1cdTAwM2Vpbm5lcl9wcm90b19pbmhlcml0KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIWdzNClcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHR1c2VfY2FjaGUgPSBpcF90dW5uZWxfZHN0X2NhY2hlX3VzYWJsZShza2IsIGluZm8pO1xuLVx0dG9zID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBpbmZvLCBcdTAwMjZ1c2VfY2FjaGUpO1xuK1x0dG9zID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBjZmcsIGluZm8sIFx1MDAyNnVzZV9jYWNoZSk7XG4gXHRzcG9ydCA9IHVkcF9mbG93X3NyY19wb3J0KGdlbmV2ZS1cdTAwM2VuZXQsIHNrYixcbi1cdFx0XHRcdCAgZ2VuZXZlLVx1MDAzZWNmZy5wb3J0X21pbixcbi1cdFx0XHRcdCAgZ2VuZXZlLVx1MDAzZWNmZy5wb3J0X21heCwgdHJ1ZSk7XG4rXHRcdFx0XHQgIGNmZy1cdTAwM2Vwb3J0X21pbixcbitcdFx0XHRcdCAgY2ZnLVx1MDAzZXBvcnRfbWF4LCB0cnVlKTtcbiBcbiBcdHJ0ID0gdWRwX3R1bm5lbF9kc3RfbG9va3VwKHNrYiwgZGV2LCBnZW5ldmUtXHUwMDNlbmV0LCAwLCBcdTAwMjZzYWRkcixcbiBcdFx0XHRcdCAgIFx1MDAyNmluZm8tXHUwMDNla2V5LFxuLVx0XHRcdFx0ICAgc3BvcnQsIGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudHBfZHN0LCB0b3MsXG4rXHRcdFx0XHQgICBzcG9ydCwgY2ZnLVx1MDAzZWluZm8ua2V5LnRwX2RzdCwgdG9zLFxuIFx0XHRcdFx0ICAgdXNlX2NhY2hlID9cbiBcdFx0XHRcdCAgIChzdHJ1Y3QgZHN0X2NhY2hlICopXHUwMDI2aW5mby1cdTAwM2Vkc3RfY2FjaGUgOiBOVUxMKTtcbiBcdGlmIChJU19FUlIocnQpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihydCk7XG4gXG4tXHRpZiAoZ2VuZXZlLVx1MDAzZWNmZy5pbmZvLmtleS51LmlwdjQuc3JjIFx1MDAyNlx1MDAyNlxuLVx0ICAgIHNhZGRyICE9IGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudS5pcHY0LnNyYykge1xuK1x0aWYgKGNmZy1cdTAwM2VpbmZvLmtleS51LmlwdjQuc3JjIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNhZGRyICE9IGNmZy1cdTAwM2VpbmZvLmtleS51LmlwdjQuc3JjKSB7XG4gXHRcdGRzdF9yZWxlYXNlKFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4gXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiBcdH1cbiBcbiBcdGVyciA9IHNrYl90dW5uZWxfY2hlY2tfcG10dShza2IsIFx1MDAyNnJ0LVx1MDAzZWRzdCxcbiBcdFx0XHRcdCAgICBHRU5FVkVfSVBWNF9ITEVOICsgaW5mby1cdTAwM2VvcHRpb25zX2xlbiArXG4tXHRcdFx0XHQgICAgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChnZW5ldmUsIHNrYiksXG4rXHRcdFx0XHQgICAgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChnZW5ldmUsIGNmZywgc2tiKSxcbiBcdFx0XHRcdCAgICBuZXRpZl9pc19hbnlfYnJpZGdlX3BvcnQoZGV2KSk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdGRzdF9yZWxlYXNlKFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG5AQCAtMTM5NywyMSArMTQwNywyMSBAQCBzdGF0aWMgaW50IGdlbmV2ZV94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0fVxuIFxuIFx0dG9zID0gaXBfdHVubmVsX2Vjbl9lbmNhcCh0b3MsIGlwX2hkcihza2IpLCBza2IpO1xuLVx0aWYgKGdlbmV2ZS1cdTAwM2VjZmcuY29sbGVjdF9tZCkge1xuK1x0aWYgKGNmZy1cdTAwM2Vjb2xsZWN0X21kKSB7XG4gXHRcdHR0bCA9IGtleS1cdTAwM2V0dGw7XG4gXG4gXHRcdGRmID0gdGVzdF9iaXQoSVBfVFVOTkVMX0RPTlRfRlJBR01FTlRfQklULCBrZXktXHUwMDNldHVuX2ZsYWdzKSA/XG4gXHRcdCAgICAgaHRvbnMoSVBfREYpIDogMDtcbiBcdH0gZWxzZSB7XG4tXHRcdGlmIChnZW5ldmUtXHUwMDNlY2ZnLnR0bF9pbmhlcml0KVxuK1x0XHRpZiAoY2ZnLVx1MDAzZXR0bF9pbmhlcml0KVxuIFx0XHRcdHR0bCA9IGlwX3R1bm5lbF9nZXRfdHRsKGlwX2hkcihza2IpLCBza2IpO1xuIFx0XHRlbHNlXG4gXHRcdFx0dHRsID0ga2V5LVx1MDAzZXR0bDtcbiBcdFx0dHRsID0gdHRsID8gOiBpcDRfZHN0X2hvcGxpbWl0KFx1MDAyNnJ0LVx1MDAzZWRzdCk7XG4gXG4tXHRcdGlmIChnZW5ldmUtXHUwMDNlY2ZnLmRmID09IEdFTkVWRV9ERl9TRVQpIHtcbitcdFx0aWYgKGNmZy1cdTAwM2VkZiA9PSBHRU5FVkVfREZfU0VUKSB7XG4gXHRcdFx0ZGYgPSBodG9ucyhJUF9ERik7XG4tXHRcdH0gZWxzZSBpZiAoZ2VuZXZlLVx1MDAzZWNmZy5kZiA9PSBHRU5FVkVfREZfSU5IRVJJVCkge1xuK1x0XHR9IGVsc2UgaWYgKGNmZy1cdTAwM2VkZiA9PSBHRU5FVkVfREZfSU5IRVJJVCkge1xuIFx0XHRcdHN0cnVjdCBldGhoZHIgKmV0aCA9IHNrYl9ldGhfaGRyKHNrYik7XG4gXG4gXHRcdFx0aWYgKG50b2hzKGV0aC1cdTAwM2VoX3Byb3RvKSA9PSBFVEhfUF9JUFY2KSB7XG5AQCAtMTQyNSwxMyArMTQzNSwxMyBAQCBzdGF0aWMgaW50IGdlbmV2ZV94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHR9XG4gXHR9XG4gXG4tXHRlcnIgPSBnZW5ldmVfYnVpbGRfc2tiKFx1MDAyNnJ0LVx1MDAzZWRzdCwgc2tiLCBpbmZvLCBnZW5ldmUsXG4rXHRlcnIgPSBnZW5ldmVfYnVpbGRfc2tiKFx1MDAyNnJ0LVx1MDAzZWRzdCwgc2tiLCBpbmZvLCBnZW5ldmUsIGNmZyxcbiBcdFx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBpcGhkcikpO1xuIFx0aWYgKHVubGlrZWx5KGVycikpXG4gXHRcdHJldHVybiBlcnI7XG4gXG4gXHR1ZHBfdHVubmVsX3htaXRfc2tiKHJ0LCBnczQtXHUwMDNlc2ssIHNrYiwgc2FkZHIsIGluZm8tXHUwMDNla2V5LnUuaXB2NC5kc3QsXG4tXHRcdFx0ICAgIHRvcywgdHRsLCBkZiwgc3BvcnQsIGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudHBfZHN0LFxuK1x0XHRcdCAgICB0b3MsIHR0bCwgZGYsIHNwb3J0LCBjZmctXHUwMDNlaW5mby5rZXkudHBfZHN0LFxuIFx0XHRcdCAgICAhbmV0X2VxKGdlbmV2ZS1cdTAwM2VuZXQsIGRldl9uZXQoZ2VuZXZlLVx1MDAzZWRldikpLFxuIFx0XHRcdCAgICAhdGVzdF9iaXQoSVBfVFVOTkVMX0NTVU1fQklULCBpbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MpLFxuIFx0XHRcdCAgICAwKTtcbkBAIC0xNDQxLDYgKzE0NTEsNyBAQCBzdGF0aWMgaW50IGdlbmV2ZV94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuICNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuIHN0YXRpYyBpbnQgZ2VuZXZlNl94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0XHRcdCAgICBzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLFxuK1x0XHRcdCAgICBjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnLFxuIFx0XHRcdCAgICBjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IGdlbmV2ZV9zb2NrICpnczYgPSByY3VfZGVyZWZlcmVuY2UoZ2VuZXZlLVx1MDAzZXNvY2s2KTtcbkBAIC0xNDUyLDM1ICsxNDYzLDM1IEBAIHN0YXRpYyBpbnQgZ2VuZXZlNl94bWl0X3NrYihzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0X19iZTE2IHNwb3J0O1xuIFx0aW50IGVycjtcbiBcbi1cdGlmIChza2Jfdmxhbl9pbmV0X3ByZXBhcmUoc2tiLCBnZW5ldmUtXHUwMDNlY2ZnLmlubmVyX3Byb3RvX2luaGVyaXQpKVxuK1x0aWYgKHNrYl92bGFuX2luZXRfcHJlcGFyZShza2IsIGNmZy1cdTAwM2Vpbm5lcl9wcm90b19pbmhlcml0KSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIWdzNilcbiBcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHR1c2VfY2FjaGUgPSBpcF90dW5uZWxfZHN0X2NhY2hlX3VzYWJsZShza2IsIGluZm8pO1xuLVx0cHJpbyA9IGdlbmV2ZV9nZXRfZHNmaWVsZChza2IsIGRldiwgaW5mbywgXHUwMDI2dXNlX2NhY2hlKTtcbitcdHByaW8gPSBnZW5ldmVfZ2V0X2RzZmllbGQoc2tiLCBkZXYsIGNmZywgaW5mbywgXHUwMDI2dXNlX2NhY2hlKTtcbiBcdHNwb3J0ID0gdWRwX2Zsb3dfc3JjX3BvcnQoZ2VuZXZlLVx1MDAzZW5ldCwgc2tiLFxuLVx0XHRcdFx0ICBnZW5ldmUtXHUwMDNlY2ZnLnBvcnRfbWluLFxuLVx0XHRcdFx0ICBnZW5ldmUtXHUwMDNlY2ZnLnBvcnRfbWF4LCB0cnVlKTtcbitcdFx0XHRcdCAgY2ZnLVx1MDAzZXBvcnRfbWluLFxuK1x0XHRcdFx0ICBjZmctXHUwMDNlcG9ydF9tYXgsIHRydWUpO1xuIFxuIFx0ZHN0ID0gdWRwX3R1bm5lbDZfZHN0X2xvb2t1cChza2IsIGRldiwgZ2VuZXZlLVx1MDAzZW5ldCwgZ3M2LVx1MDAzZXNrLCAwLFxuIFx0XHRcdFx0ICAgICBcdTAwMjZzYWRkciwga2V5LCBzcG9ydCxcbi1cdFx0XHRcdCAgICAgZ2VuZXZlLVx1MDAzZWNmZy5pbmZvLmtleS50cF9kc3QsIHByaW8sXG4rXHRcdFx0XHQgICAgIGNmZy1cdTAwM2VpbmZvLmtleS50cF9kc3QsIHByaW8sXG4gXHRcdFx0XHQgICAgIHVzZV9jYWNoZSA/XG4gXHRcdFx0XHQgICAgIChzdHJ1Y3QgZHN0X2NhY2hlICopXHUwMDI2aW5mby1cdTAwM2Vkc3RfY2FjaGUgOiBOVUxMKTtcbiBcdGlmIChJU19FUlIoZHN0KSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZHN0KTtcbiBcbi1cdGlmICghaXB2Nl9hZGRyX2FueShcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnUuaXB2Ni5zcmMpIFx1MDAyNlx1MDAyNlxuLVx0ICAgICFpcHY2X2FkZHJfZXF1YWwoXHUwMDI2c2FkZHIsIFx1MDAyNmdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudS5pcHY2LnNyYykpIHtcbitcdGlmICghaXB2Nl9hZGRyX2FueShcdTAwMjZjZmctXHUwMDNlaW5mby5rZXkudS5pcHY2LnNyYykgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWlwdjZfYWRkcl9lcXVhbChcdTAwMjZzYWRkciwgXHUwMDI2Y2ZnLVx1MDAzZWluZm8ua2V5LnUuaXB2Ni5zcmMpKSB7XG4gXHRcdGRzdF9yZWxlYXNlKGRzdCk7XG4gXHRcdHJldHVybiAtRUFERFJOT1RBVkFJTDtcbiBcdH1cbiBcbiBcdGVyciA9IHNrYl90dW5uZWxfY2hlY2tfcG10dShza2IsIGRzdCxcbiBcdFx0XHRcdCAgICBHRU5FVkVfSVBWNl9ITEVOICsgaW5mby1cdTAwM2VvcHRpb25zX2xlbiArXG4tXHRcdFx0XHQgICAgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChnZW5ldmUsIHNrYiksXG4rXHRcdFx0XHQgICAgZ2VuZXZlX2J1aWxkX2dyb19oaW50X29wdChnZW5ldmUsIGNmZywgc2tiKSxcbiBcdFx0XHRcdCAgICBuZXRpZl9pc19hbnlfYnJpZGdlX3BvcnQoZGV2KSk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdGRzdF9yZWxlYXNlKGRzdCk7XG5AQCAtMTUxMywyMiArMTUyNCwyMiBAQCBzdGF0aWMgaW50IGdlbmV2ZTZfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdH1cbiBcbiBcdHByaW8gPSBpcF90dW5uZWxfZWNuX2VuY2FwKHByaW8sIGlwX2hkcihza2IpLCBza2IpO1xuLVx0aWYgKGdlbmV2ZS1cdTAwM2VjZmcuY29sbGVjdF9tZCkge1xuK1x0aWYgKGNmZy1cdTAwM2Vjb2xsZWN0X21kKSB7XG4gXHRcdHR0bCA9IGtleS1cdTAwM2V0dGw7XG4gXHR9IGVsc2Uge1xuLVx0XHRpZiAoZ2VuZXZlLVx1MDAzZWNmZy50dGxfaW5oZXJpdClcbitcdFx0aWYgKGNmZy1cdTAwM2V0dGxfaW5oZXJpdClcbiBcdFx0XHR0dGwgPSBpcF90dW5uZWxfZ2V0X3R0bChpcF9oZHIoc2tiKSwgc2tiKTtcbiBcdFx0ZWxzZVxuIFx0XHRcdHR0bCA9IGtleS1cdTAwM2V0dGw7XG4gXHRcdHR0bCA9IHR0bCA/IDogaXA2X2RzdF9ob3BsaW1pdChkc3QpO1xuIFx0fVxuLVx0ZXJyID0gZ2VuZXZlX2J1aWxkX3NrYihkc3QsIHNrYiwgaW5mbywgZ2VuZXZlLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcbitcdGVyciA9IGdlbmV2ZV9idWlsZF9za2IoZHN0LCBza2IsIGluZm8sIGdlbmV2ZSwgY2ZnLCBzaXplb2Yoc3RydWN0IGlwdjZoZHIpKTtcbiBcdGlmICh1bmxpa2VseShlcnIpKVxuIFx0XHRyZXR1cm4gZXJyO1xuIFxuIFx0dWRwX3R1bm5lbDZfeG1pdF9za2IoZHN0LCBnczYtXHUwMDNlc2ssIHNrYiwgZGV2LFxuIFx0XHRcdCAgICAgXHUwMDI2c2FkZHIsIFx1MDAyNmtleS1cdTAwM2V1LmlwdjYuZHN0LCBwcmlvLCB0dGwsXG4tXHRcdFx0ICAgICBpbmZvLVx1MDAzZWtleS5sYWJlbCwgc3BvcnQsIGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudHBfZHN0LFxuK1x0XHRcdCAgICAgaW5mby1cdTAwM2VrZXkubGFiZWwsIHNwb3J0LCBjZmctXHUwMDNlaW5mby5rZXkudHBfZHN0LFxuIFx0XHRcdCAgICAgIXRlc3RfYml0KElQX1RVTk5FTF9DU1VNX0JJVCxcbiBcdFx0XHRcdCAgICAgICBpbmZvLVx1MDAzZWtleS50dW5fZmxhZ3MpLFxuIFx0XHRcdCAgICAgMCk7XG5AQCAtMTUzOSwyOCArMTU1MCwzMSBAQCBzdGF0aWMgaW50IGdlbmV2ZTZfeG1pdF9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBzdGF0aWMgbmV0ZGV2X3R4X3QgZ2VuZXZlX3htaXQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcbiB7XG4gXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9IE5VTEw7XG4rXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBOVUxMO1xuK1x0Y29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZztcbiBcdGludCBlcnI7XG4gXG4tXHRpZiAoZ2VuZXZlLVx1MDAzZWNmZy5jb2xsZWN0X21kKSB7XG4rXHRyY3VfcmVhZF9sb2NrKCk7XG4rXHRjZmcgPSByY3VfZGVyZWZlcmVuY2UoZ2VuZXZlLVx1MDAzZWNmZyk7XG4rXHRpZiAoY2ZnLVx1MDAzZWNvbGxlY3RfbWQpIHtcbiBcdFx0aW5mbyA9IHNrYl90dW5uZWxfaW5mbyhza2IpO1xuIFx0XHRpZiAodW5saWtlbHkoIWluZm8gfHwgIShpbmZvLVx1MDAzZW1vZGUgXHUwMDI2IElQX1RVTk5FTF9JTkZPX1RYKSkpIHtcbiBcdFx0XHRuZXRkZXZfZGJnKGRldiwgXCJubyB0dW5uZWwgbWV0YWRhdGFcXG5cIik7XG4gXHRcdFx0ZGV2X2tmcmVlX3NrYihza2IpO1xuIFx0XHRcdGRldl9kc3RhdHNfdHhfZHJvcHBlZChkZXYpO1xuK1x0XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuIFx0XHRcdHJldHVybiBORVRERVZfVFhfT0s7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4tXHRcdGluZm8gPSBcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLmluZm87XG4rXHRcdGluZm8gPSBcdTAwMjZjZmctXHUwMDNlaW5mbztcbiBcdH1cbiBcbi1cdHJjdV9yZWFkX2xvY2soKTtcbiAjaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbiBcdGlmIChpbmZvLVx1MDAzZW1vZGUgXHUwMDI2IElQX1RVTk5FTF9JTkZPX0lQVjYpXG4tXHRcdGVyciA9IGdlbmV2ZTZfeG1pdF9za2Ioc2tiLCBkZXYsIGdlbmV2ZSwgaW5mbyk7XG4rXHRcdGVyciA9IGdlbmV2ZTZfeG1pdF9za2Ioc2tiLCBkZXYsIGdlbmV2ZSwgY2ZnLCBpbmZvKTtcbiBcdGVsc2VcbiAjZW5kaWZcbi1cdFx0ZXJyID0gZ2VuZXZlX3htaXRfc2tiKHNrYiwgZGV2LCBnZW5ldmUsIGluZm8pO1xuK1x0XHRlcnIgPSBnZW5ldmVfeG1pdF9za2Ioc2tiLCBkZXYsIGdlbmV2ZSwgY2ZnLCBpbmZvKTtcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIFxuIFx0aWYgKGxpa2VseSghZXJyKSlcbkBAIC0xNTkzLDggKzE2MDcsMTMgQEAgc3RhdGljIGludCBnZW5ldmVfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiB7XG4gXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBza2JfdHVubmVsX2luZm8oc2tiKTtcbiBcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0Y29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZztcbiBcdF9fYmUxNiBzcG9ydDtcbiBcbitcdGNmZyA9IHJjdV9kZXJlZmVyZW5jZShnZW5ldmUtXHUwMDNlY2ZnKTtcbitcdGlmICh1bmxpa2VseSghY2ZnKSlcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4gXHRpZiAoaXBfdHVubmVsX2luZm9fYWYoaW5mbykgPT0gQUZfSU5FVCkge1xuIFx0XHRzdHJ1Y3QgcnRhYmxlICpydDtcbiBcdFx0c3RydWN0IGdlbmV2ZV9zb2NrICpnczQgPSByY3VfZGVyZWZlcmVuY2UoZ2VuZXZlLVx1MDAzZXNvY2s0KTtcbkBAIC0xNjA2LDE0ICsxNjI1LDE0IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfbWV0YWRhdGFfZHN0KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBza19idWZmICpza2IpXG4gXHRcdFx0cmV0dXJuIC1FSU87XG4gXG4gXHRcdHVzZV9jYWNoZSA9IGlwX3R1bm5lbF9kc3RfY2FjaGVfdXNhYmxlKHNrYiwgaW5mbyk7XG4tXHRcdHRvcyA9IGdlbmV2ZV9nZXRfZHNmaWVsZChza2IsIGRldiwgaW5mbywgXHUwMDI2dXNlX2NhY2hlKTtcbitcdFx0dG9zID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBjZmcsIGluZm8sIFx1MDAyNnVzZV9jYWNoZSk7XG4gXHRcdHNwb3J0ID0gdWRwX2Zsb3dfc3JjX3BvcnQoZ2VuZXZlLVx1MDAzZW5ldCwgc2tiLFxuLVx0XHRcdFx0XHQgIGdlbmV2ZS1cdTAwM2VjZmcucG9ydF9taW4sXG4tXHRcdFx0XHRcdCAgZ2VuZXZlLVx1MDAzZWNmZy5wb3J0X21heCwgdHJ1ZSk7XG4rXHRcdFx0XHRcdCAgY2ZnLVx1MDAzZXBvcnRfbWluLFxuK1x0XHRcdFx0XHQgIGNmZy1cdTAwM2Vwb3J0X21heCwgdHJ1ZSk7XG4gXG4gXHRcdHJ0ID0gdWRwX3R1bm5lbF9kc3RfbG9va3VwKHNrYiwgZGV2LCBnZW5ldmUtXHUwMDNlbmV0LCAwLCBcdTAwMjZzYWRkcixcbiBcdFx0XHRcdFx0ICAgXHUwMDI2aW5mby1cdTAwM2VrZXksXG4tXHRcdFx0XHRcdCAgIHNwb3J0LCBnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnRwX2RzdCxcbitcdFx0XHRcdFx0ICAgc3BvcnQsIGNmZy1cdTAwM2VpbmZvLmtleS50cF9kc3QsXG4gXHRcdFx0XHRcdCAgIHRvcyxcbiBcdFx0XHRcdFx0ICAgdXNlX2NhY2hlID8gXHUwMDI2aW5mby1cdTAwM2Vkc3RfY2FjaGUgOiBOVUxMKTtcbiBcdFx0aWYgKElTX0VSUihydCkpXG5AQCAtMTYzMywxNCArMTY1MiwxNCBAQCBzdGF0aWMgaW50IGdlbmV2ZV9maWxsX21ldGFkYXRhX2RzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKVxuIFx0XHRcdHJldHVybiAtRUlPO1xuIFxuIFx0XHR1c2VfY2FjaGUgPSBpcF90dW5uZWxfZHN0X2NhY2hlX3VzYWJsZShza2IsIGluZm8pO1xuLVx0XHRwcmlvID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBpbmZvLCBcdTAwMjZ1c2VfY2FjaGUpO1xuK1x0XHRwcmlvID0gZ2VuZXZlX2dldF9kc2ZpZWxkKHNrYiwgZGV2LCBjZmcsIGluZm8sIFx1MDAyNnVzZV9jYWNoZSk7XG4gXHRcdHNwb3J0ID0gdWRwX2Zsb3dfc3JjX3BvcnQoZ2VuZXZlLVx1MDAzZW5ldCwgc2tiLFxuLVx0XHRcdFx0XHQgIGdlbmV2ZS1cdTAwM2VjZmcucG9ydF9taW4sXG4tXHRcdFx0XHRcdCAgZ2VuZXZlLVx1MDAzZWNmZy5wb3J0X21heCwgdHJ1ZSk7XG4rXHRcdFx0XHRcdCAgY2ZnLVx1MDAzZXBvcnRfbWluLFxuK1x0XHRcdFx0XHQgIGNmZy1cdTAwM2Vwb3J0X21heCwgdHJ1ZSk7XG4gXG4gXHRcdGRzdCA9IHVkcF90dW5uZWw2X2RzdF9sb29rdXAoc2tiLCBkZXYsIGdlbmV2ZS1cdTAwM2VuZXQsIGdzNi1cdTAwM2VzaywgMCxcbiBcdFx0XHRcdFx0ICAgICBcdTAwMjZzYWRkciwgXHUwMDI2aW5mby1cdTAwM2VrZXksIHNwb3J0LFxuLVx0XHRcdFx0XHQgICAgIGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudHBfZHN0LCBwcmlvLFxuK1x0XHRcdFx0XHQgICAgIGNmZy1cdTAwM2VpbmZvLmtleS50cF9kc3QsIHByaW8sXG4gXHRcdFx0XHRcdCAgICAgdXNlX2NhY2hlID8gXHUwMDI2aW5mby1cdTAwM2Vkc3RfY2FjaGUgOiBOVUxMKTtcbiBcdFx0aWYgKElTX0VSUihkc3QpKVxuIFx0XHRcdHJldHVybiBQVFJfRVJSKGRzdCk7XG5AQCAtMTY1Myw3ICsxNjcyLDcgQEAgc3RhdGljIGludCBnZW5ldmVfZmlsbF9tZXRhZGF0YV9kc3Qoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IHNrX2J1ZmYgKnNrYilcbiBcdH1cbiBcbiBcdGluZm8tXHUwMDNla2V5LnRwX3NyYyA9IHNwb3J0O1xuLVx0aW5mby1cdTAwM2VrZXkudHBfZHN0ID0gZ2VuZXZlLVx1MDAzZWNmZy5pbmZvLmtleS50cF9kc3Q7XG4rXHRpbmZvLVx1MDAzZWtleS50cF9kc3QgPSBjZmctXHUwMDNlaW5mby5rZXkudHBfZHN0O1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTE3MDksNyArMTcyOCw1MCBAQCBzdGF0aWMgdm9pZCBnZW5ldmVfb2ZmbG9hZF9yeF9wb3J0cyhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBib29sIHB1c2gpXG4gXHR9XG4gfVxuIFxuK3N0YXRpYyBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqZ2VuZXZlX2NvbmZpZ19hbGxvYyhjb25zdCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqc3JjKVxuK3tcbitcdHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmc7XG4rXHRpbnQgZXJyO1xuK1xuK1x0Y2ZnID0ga21lbWR1cChzcmMsIHNpemVvZigqc3JjKSwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWNmZylcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4rXG4rXHRjZmctXHUwMDNlaW5mby5kc3RfY2FjaGUuY2FjaGUgPSBOVUxMO1xuK1x0ZXJyID0gZHN0X2NhY2hlX2luaXQoXHUwMDI2Y2ZnLVx1MDAzZWluZm8uZHN0X2NhY2hlLCBHRlBfS0VSTkVMKTtcbitcdGlmIChlcnIpIHtcbitcdFx0a2ZyZWUoY2ZnKTtcbitcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbitcdH1cbitcbitcdHJldHVybiBjZmc7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGdlbmV2ZV9jb25maWdfZnJlZShzdHJ1Y3QgZ2VuZXZlX2NvbmZpZyAqY2ZnKVxuK3tcbitcdGlmIChjZmcpIHtcbitcdFx0ZHN0X2NhY2hlX2Rlc3Ryb3koXHUwMDI2Y2ZnLVx1MDAzZWluZm8uZHN0X2NhY2hlKTtcbitcdFx0a2ZyZWUoY2ZnKTtcbitcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgZ2VuZXZlX2NvbmZpZ19mcmVlX3JjdShzdHJ1Y3QgcmN1X2hlYWQgKmhlYWQpXG4re1xuK1x0c3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyA9IGNvbnRhaW5lcl9vZihoZWFkLCBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZywgcmN1KTtcbitcbitcdGdlbmV2ZV9jb25maWdfZnJlZShjZmcpO1xuK31cbitcbiAvKiBJbml0aWFsaXplIHRoZSBkZXZpY2Ugc3RydWN0dXJlLiAqL1xuK3N0YXRpYyB2b2lkIGdlbmV2ZV9mcmVlX2RldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuK3tcbitcdHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUgPSBuZXRkZXZfcHJpdihkZXYpO1xuK1x0c3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZyA9IHJjdV9kZXJlZmVyZW5jZV9wcm90ZWN0ZWQoZ2VuZXZlLVx1MDAzZWNmZywgMSk7XG4rXG4rXHRnZW5ldmVfY29uZmlnX2ZyZWUoY2ZnKTtcbitcdFJDVV9JTklUX1BPSU5URVIoZ2VuZXZlLVx1MDAzZWNmZywgTlVMTCk7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIGdlbmV2ZV9zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIHtcbiBcdGV0aGVyX3NldHVwKGRldik7XG5AQCAtMTcxNyw2ICsxNzc5LDcgQEAgc3RhdGljIHZvaWQgZ2VuZXZlX3NldHVwKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXHRkZXYtXHUwMDNlbmV0ZGV2X29wcyA9IFx1MDAyNmdlbmV2ZV9uZXRkZXZfb3BzO1xuIFx0ZGV2LVx1MDAzZWV0aHRvb2xfb3BzID0gXHUwMDI2Z2VuZXZlX2V0aHRvb2xfb3BzO1xuIFx0ZGV2LVx1MDAzZW5lZWRzX2ZyZWVfbmV0ZGV2ID0gdHJ1ZTtcbitcdGRldi1cdTAwM2Vwcml2X2Rlc3RydWN0b3IgPSBnZW5ldmVfZnJlZV9kZXY7XG4gXG4gXHRTRVRfTkVUREVWX0RFVlRZUEUoZGV2LCBcdTAwMjZnZW5ldmVfdHlwZSk7XG4gXG5AQCAtMTg3OCwxNSArMTk0MSwxNyBAQCBzdGF0aWMgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZV9maW5kX2RldihzdHJ1Y3QgZ2VuZXZlX25ldCAqZ24sXG4gXHQqdHVuX29uX3NhbWVfcG9ydCA9IGZhbHNlO1xuIFx0KnR1bl9jb2xsZWN0X21kID0gZmFsc2U7XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGdlbmV2ZSwgXHUwMDI2Z24tXHUwMDNlZ2VuZXZlX2xpc3QsIG5leHQpIHtcbi1cdFx0aWYgKGluZm8tXHUwMDNla2V5LnRwX2RzdCA9PSBnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnRwX2RzdCBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgIChjZmctXHUwMDNlZHVhbHN0YWNrIHx8IGdlbmV2ZS1cdTAwM2VjZmcuZHVhbHN0YWNrIHx8XG4tXHRcdCAgICAgZ2VuZXZlX3NhZGRyX2NvbmZsaWN0KGluZm8sIFx1MDAyNmdlbmV2ZS1cdTAwM2VjZmcuaW5mbykpKSB7XG4tXHRcdFx0KnR1bl9jb2xsZWN0X21kIHw9IGdlbmV2ZS1cdTAwM2VjZmcuY29sbGVjdF9tZDtcbitcdFx0Y29uc3Qgc3RydWN0IGdlbmV2ZV9jb25maWcgKmdjZmcgPSBydG5sX2RlcmVmZXJlbmNlKGdlbmV2ZS1cdTAwM2VjZmcpO1xuK1xuK1x0XHRpZiAoaW5mby1cdTAwM2VrZXkudHBfZHN0ID09IGdjZmctXHUwMDNlaW5mby5rZXkudHBfZHN0IFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgKGNmZy1cdTAwM2VkdWFsc3RhY2sgfHwgZ2NmZy1cdTAwM2VkdWFsc3RhY2sgfHxcbitcdFx0ICAgICBnZW5ldmVfc2FkZHJfY29uZmxpY3QoaW5mbywgXHUwMDI2Z2NmZy1cdTAwM2VpbmZvKSkpIHtcbitcdFx0XHQqdHVuX2NvbGxlY3RfbWQgfD0gZ2NmZy1cdTAwM2Vjb2xsZWN0X21kO1xuIFx0XHRcdCp0dW5fb25fc2FtZV9wb3J0ID0gdHJ1ZTtcbiBcdFx0fVxuLVx0XHRpZiAoaW5mby1cdTAwM2VrZXkudHVuX2lkID09IGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudHVuX2lkIFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgaW5mby1cdTAwM2VrZXkudHBfZHN0ID09IGdlbmV2ZS1cdTAwM2VjZmcuaW5mby5rZXkudHBfZHN0IFx1MDAyNlx1MDAyNlxuLVx0XHQgICAgIW1lbWNtcChcdTAwMjZpbmZvLVx1MDAzZWtleS51LCBcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLmluZm8ua2V5LnUsIHNpemVvZihpbmZvLVx1MDAzZWtleS51KSkpXG4rXHRcdGlmIChpbmZvLVx1MDAzZWtleS50dW5faWQgPT0gZ2NmZy1cdTAwM2VpbmZvLmtleS50dW5faWQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBpbmZvLVx1MDAzZWtleS50cF9kc3QgPT0gZ2NmZy1cdTAwM2VpbmZvLmtleS50cF9kc3QgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhbWVtY21wKFx1MDAyNmluZm8tXHUwMDNla2V5LnUsIFx1MDAyNmdjZmctXHUwMDNlaW5mby5rZXkudSwgc2l6ZW9mKGluZm8tXHUwMDNla2V5LnUpKSlcbiBcdFx0XHR0ID0gZ2VuZXZlO1xuIFx0fVxuIFx0cmV0dXJuIHQ7XG5AQCAtMTkyMiw2ICsxOTg3LDcgQEAgc3RhdGljIGludCBnZW5ldmVfY29uZmlndXJlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdHN0cnVjdCBnZW5ldmVfZGV2ICp0LCAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcbiBcdGNvbnN0IHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqaW5mbyA9IFx1MDAyNmNmZy1cdTAwM2VpbmZvO1xuIFx0Ym9vbCB0dW5fY29sbGVjdF9tZCwgdHVuX29uX3NhbWVfcG9ydDtcbitcdHN0cnVjdCBnZW5ldmVfY29uZmlnICpuZXdfY2ZnO1xuIFx0aW50IGVyciwgZW5jYXBfbGVuO1xuIFxuIFx0aWYgKGNmZy1cdTAwM2Vjb2xsZWN0X21kIFx1MDAyNlx1MDAyNiAhaXNfdG5sX2luZm9femVybyhpbmZvKSkge1xuQEAgLTE5NjIsMTAgKzIwMjgsMTMgQEAgc3RhdGljIGludCBnZW5ldmVfY29uZmlndXJlKHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldixcbiBcdFx0fVxuIFx0fVxuIFxuLVx0ZHN0X2NhY2hlX3Jlc2V0KFx1MDAyNmdlbmV2ZS1cdTAwM2VjZmcuaW5mby5kc3RfY2FjaGUpO1xuLVx0bWVtY3B5KFx1MDAyNmdlbmV2ZS1cdTAwM2VjZmcsIGNmZywgc2l6ZW9mKCpjZmcpKTtcbitcdG5ld19jZmcgPSBnZW5ldmVfY29uZmlnX2FsbG9jKGNmZyk7XG4rXHRpZiAoSVNfRVJSKG5ld19jZmcpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihuZXdfY2ZnKTtcbitcbitcdHJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtXHUwMDNlY2ZnLCBuZXdfY2ZnKTtcbiBcbi1cdGlmIChnZW5ldmUtXHUwMDNlY2ZnLmlubmVyX3Byb3RvX2luaGVyaXQpIHtcbitcdGlmIChjZmctXHUwMDNlaW5uZXJfcHJvdG9faW5oZXJpdCkge1xuIFx0XHRkZXYtXHUwMDNlaGVhZGVyX29wcyA9IE5VTEw7XG4gXHRcdGRldi1cdTAwM2V0eXBlID0gQVJQSFJEX05PTkU7XG4gXHRcdGRldi1cdTAwM2VoYXJkX2hlYWRlcl9sZW4gPSAwO1xuQEAgLTIzMjMsODEgKzIzOTIsNDUgQEAgc3RhdGljIGludCBnZW5ldmVfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxuIFx0cmV0dXJuIDA7XG4gfVxuIFxuLS8qIFF1aWVzY2VzIHRoZSBnZW5ldmUgZGV2aWNlIGRhdGEgcGF0aCBmb3IgYm90aCBUWCBhbmQgUlguXG4tICpcbi0gKiBPbiB0cmFuc21pdCBnZW5ldmUgY2hlY2tzIGZvciBub24tTlVMTCBnZW5ldmVfc29jayBiZWZvcmUgaXQgcHJvY2VlZHMuXG4tICogU28sIGlmIHdlIHNldCB0aGF0IHNvY2tldCB0byBOVUxMIHVuZGVyIFJDVSBhbmQgd2FpdCBmb3Igc3luY2hyb25pemVfbmV0KClcbi0gKiB0byBjb21wbGV0ZSBmb3IgdGhlIGV4aXN0aW5nIHNldCBvZiBpbi1mbGlnaHQgcGFja2V0cyB0byBiZSB0cmFuc21pdHRlZCxcbi0gKiB0aGVuIHdlIHdvdWxkIGhhdmUgcXVpZXNjZWQgdGhlIHRyYW5zbWl0IGRhdGEgcGF0aC4gQWxsIHRoZSBmdXR1cmUgcGFja2V0c1xuLSAqIHdpbGwgZ2V0IGRyb3BwZWQgdW50aWwgd2UgdW5xdWllc2NlIHRoZSBkYXRhIHBhdGguXG4tICpcbi0gKiBPbiByZWNlaXZlIGdlbmV2ZSBkZXJlZmVyZW5jZSB0aGUgZ2VuZXZlX3NvY2sgc3Rhc2hlZCBpbiB0aGUgc29ja2V0LiBTbyxcbi0gKiBpZiB3ZSBzZXQgdGhhdCB0byBOVUxMIHVuZGVyIFJDVSBhbmQgd2FpdCBmb3Igc3luY2hyb25pemVfbmV0KCkgdG9cbi0gKiBjb21wbGV0ZSwgdGhlbiB3ZSB3b3VsZCBoYXZlIHF1aWVzY2VkIHRoZSByZWNlaXZlIGRhdGEgcGF0aC5cbisvKiBVcGRhdGUgdGhlIGRldmljZSBjb25maWd1cmF0aW9uIHVuZGVyIFJUTkwuXG4rICogV2UgdXNlIFJDVSBzd2FwIHRvIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBhdG9taWNhbGx5LCBzbyB0aGUgZGF0YSBwYXRoXG4rICogKGJvdGggVFggYW5kIFJYKSBjYW4gY29udGludWUgcnVubmluZyB3aXRob3V0IGludGVycnVwdGlvbiBvciBwYWNrZXQgbG9zcy5cbiAgKi9cbi1zdGF0aWMgdm9pZCBnZW5ldmVfcXVpZXNjZShzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlLCBzdHJ1Y3QgZ2VuZXZlX3NvY2sgKipnczQsXG4tXHRcdFx0ICAgc3RydWN0IGdlbmV2ZV9zb2NrICoqZ3M2KVxuLXtcbi1cdCpnczQgPSBydG5sX2RlcmVmZXJlbmNlKGdlbmV2ZS1cdTAwM2Vzb2NrNCk7XG4tXHRyY3VfYXNzaWduX3BvaW50ZXIoZ2VuZXZlLVx1MDAzZXNvY2s0LCBOVUxMKTtcbi1cdGlmICgqZ3M0KVxuLVx0XHRyY3VfYXNzaWduX3NrX3VzZXJfZGF0YSgoKmdzNCktXHUwMDNlc2ssIE5VTEwpO1xuLSNpZiBJU19FTkFCTEVEKENPTkZJR19JUFY2KVxuLVx0KmdzNiA9IHJ0bmxfZGVyZWZlcmVuY2UoZ2VuZXZlLVx1MDAzZXNvY2s2KTtcbi1cdHJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtXHUwMDNlc29jazYsIE5VTEwpO1xuLVx0aWYgKCpnczYpXG4tXHRcdHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKCgqZ3M2KS1cdTAwM2VzaywgTlVMTCk7XG4tI2Vsc2Vcbi1cdCpnczYgPSBOVUxMO1xuLSNlbmRpZlxuLVx0c3luY2hyb25pemVfbmV0KCk7XG4tfVxuLVxuLS8qIFJlc3VtZXMgdGhlIGdlbmV2ZSBkZXZpY2UgZGF0YSBwYXRoIGZvciBib3RoIFRYIGFuZCBSWC4gKi9cbi1zdGF0aWMgdm9pZCBnZW5ldmVfdW5xdWllc2NlKHN0cnVjdCBnZW5ldmVfZGV2ICpnZW5ldmUsIHN0cnVjdCBnZW5ldmVfc29jayAqZ3M0LFxuLVx0XHRcdCAgICAgc3RydWN0IGdlbmV2ZV9zb2NrIF9fbWF5YmVfdW51c2VkICpnczYpXG4te1xuLVx0cmN1X2Fzc2lnbl9wb2ludGVyKGdlbmV2ZS1cdTAwM2Vzb2NrNCwgZ3M0KTtcbi1cdGlmIChnczQpXG4tXHRcdHJjdV9hc3NpZ25fc2tfdXNlcl9kYXRhKGdzNC1cdTAwM2VzaywgZ3M0KTtcbi0jaWYgSVNfRU5BQkxFRChDT05GSUdfSVBWNilcbi1cdHJjdV9hc3NpZ25fcG9pbnRlcihnZW5ldmUtXHUwMDNlc29jazYsIGdzNik7XG4tXHRpZiAoZ3M2KVxuLVx0XHRyY3VfYXNzaWduX3NrX3VzZXJfZGF0YShnczYtXHUwMDNlc2ssIGdzNik7XG4tI2VuZGlmXG4tfVxuLVxuIHN0YXRpYyBpbnQgZ2VuZXZlX2NoYW5nZWxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IG5sYXR0ciAqdGJbXSxcbiBcdFx0XHQgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcbiBcdFx0XHQgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiB7XG4gXHRzdHJ1Y3QgZ2VuZXZlX2RldiAqZ2VuZXZlID0gbmV0ZGV2X3ByaXYoZGV2KTtcbi1cdHN0cnVjdCBnZW5ldmVfc29jayAqZ3M0LCAqZ3M2O1xuLVx0c3RydWN0IGdlbmV2ZV9jb25maWcgY2ZnO1xuK1x0c3RydWN0IGdlbmV2ZV9jb25maWcgKm9sZF9jZmcgPSBydG5sX2RlcmVmZXJlbmNlKGdlbmV2ZS1cdTAwM2VjZmcpO1xuK1x0c3RydWN0IGdlbmV2ZV9jb25maWcgKmNmZztcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBJZiB0aGUgZ2VuZXZlIGRldmljZSBpcyBjb25maWd1cmVkIGZvciBtZXRhZGF0YSAob3IgZXh0ZXJuYWxseVxuIFx0ICogY29udHJvbGxlZCwgZm9yIGV4YW1wbGUsIE9WUyksIHRoZW4gbm90aGluZyBjYW4gYmUgY2hhbmdlZC5cbiBcdCAqL1xuLVx0aWYgKGdlbmV2ZS1cdTAwM2VjZmcuY29sbGVjdF9tZClcbitcdGlmIChvbGRfY2ZnLVx1MDAzZWNvbGxlY3RfbWQpXG4gXHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiBcbiBcdC8qIFN0YXJ0IHdpdGggdGhlIGV4aXN0aW5nIGluZm8uICovXG4tXHRtZW1jcHkoXHUwMDI2Y2ZnLCBcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLCBzaXplb2YoY2ZnKSk7XG4tXHRlcnIgPSBnZW5ldmVfbmwyaW5mbyh0YiwgZGF0YSwgZXh0YWNrLCBcdTAwMjZjZmcsIHRydWUpO1xuK1x0Y2ZnID0gZ2VuZXZlX2NvbmZpZ19hbGxvYyhvbGRfY2ZnKTtcbitcdGlmIChJU19FUlIoY2ZnKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoY2ZnKTtcbitcbitcdGVyciA9IGdlbmV2ZV9ubDJpbmZvKHRiLCBkYXRhLCBleHRhY2ssIGNmZywgdHJ1ZSk7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHRnb3RvIGVycl9mcmVlX2NmZztcbiBcbi1cdGlmICghZ2VuZXZlX2RzdF9hZGRyX2VxdWFsKFx1MDAyNmdlbmV2ZS1cdTAwM2VjZmcuaW5mbywgXHUwMDI2Y2ZnLmluZm8pKSB7XG4tXHRcdGRzdF9jYWNoZV9yZXNldChcdTAwMjZjZmcuaW5mby5kc3RfY2FjaGUpO1xuLVx0XHRnZW5ldmVfbGlua19jb25maWcoZGV2LCBcdTAwMjZjZmcuaW5mbywgdGIpO1xuLVx0fVxuK1x0aWYgKCFnZW5ldmVfZHN0X2FkZHJfZXF1YWwoXHUwMDI2b2xkX2NmZy1cdTAwM2VpbmZvLCBcdTAwMjZjZmctXHUwMDNlaW5mbykpXG4rXHRcdGdlbmV2ZV9saW5rX2NvbmZpZyhkZXYsIFx1MDAyNmNmZy1cdTAwM2VpbmZvLCB0Yik7XG4gXG4tXHRnZW5ldmVfcXVpZXNjZShnZW5ldmUsIFx1MDAyNmdzNCwgXHUwMDI2Z3M2KTtcbi1cdG1lbWNweShcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLCBcdTAwMjZjZmcsIHNpemVvZihjZmcpKTtcbi1cdGdlbmV2ZV91bnF1aWVzY2UoZ2VuZXZlLCBnczQsIGdzNik7XG4rXHRyY3VfYXNzaWduX3BvaW50ZXIoZ2VuZXZlLVx1MDAzZWNmZywgY2ZnKTtcbiBcbitcdGNhbGxfcmN1X2h1cnJ5KFx1MDAyNm9sZF9jZmctXHUwMDNlcmN1LCBnZW5ldmVfY29uZmlnX2ZyZWVfcmN1KTtcbiBcdHJldHVybiAwO1xuK1xuK2Vycl9mcmVlX2NmZzpcbitcdGdlbmV2ZV9jb25maWdfZnJlZShjZmcpO1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gc3RhdGljIHZvaWQgZ2VuZXZlX2RlbGxpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGxpc3RfaGVhZCAqaGVhZClcbkBAIC0yNDMxLDE2ICsyNDY0LDI3IEBAIHN0YXRpYyBzaXplX3QgZ2VuZXZlX2dldF9zaXplKGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gc3RhdGljIGludCBnZW5ldmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4ge1xuLVx0c3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7XG4tXHRzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm8gPSBcdTAwMjZnZW5ldmUtXHUwMDNlY2ZnLmluZm87XG4tXHRib29sIHR0bF9pbmhlcml0ID0gZ2VuZXZlLVx1MDAzZWNmZy50dGxfaW5oZXJpdDtcbi1cdGJvb2wgbWV0YWRhdGEgPSBnZW5ldmUtXHUwMDNlY2ZnLmNvbGxlY3RfbWQ7XG4tXHRzdHJ1Y3QgaWZsYV9nZW5ldmVfcG9ydF9yYW5nZSBwb3J0cyA9IHtcbi1cdFx0Lmxvd1x0PSBodG9ucyhnZW5ldmUtXHUwMDNlY2ZnLnBvcnRfbWluKSxcbi1cdFx0LmhpZ2hcdD0gaHRvbnMoZ2VuZXZlLVx1MDAzZWNmZy5wb3J0X21heCksXG4tXHR9O1xuK1x0Y29uc3Qgc3RydWN0IGdlbmV2ZV9kZXYgKmdlbmV2ZSA9IG5ldGRldl9wcml2KGRldik7XG4rXHRzdHJ1Y3QgaWZsYV9nZW5ldmVfcG9ydF9yYW5nZSBwb3J0cztcbitcdGNvbnN0IHN0cnVjdCBnZW5ldmVfY29uZmlnICpjZmc7XG4rXHRjb25zdCBzdHJ1Y3QgaXBfdHVubmVsX2luZm8gKmluZm87XG4rXHRib29sIHR0bF9pbmhlcml0LCBtZXRhZGF0YTtcbiBcdF9fdTggdG1wX3ZuaVszXTtcbiBcdF9fdTMyIHZuaTtcbitcdGludCBlcnIgPSAwO1xuK1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0Y2ZnID0gcmN1X2RlcmVmZXJlbmNlKGdlbmV2ZS1cdTAwM2VjZmcpO1xuK1x0aWYgKCFjZmcpIHtcbitcdFx0ZXJyID0gLUVOT0RFVjtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRpbmZvID0gXHUwMDI2Y2ZnLVx1MDAzZWluZm87XG4rXHR0dGxfaW5oZXJpdCA9IGNmZy1cdTAwM2V0dGxfaW5oZXJpdDtcbitcdG1ldGFkYXRhID0gY2ZnLVx1MDAzZWNvbGxlY3RfbWQ7XG4rXHRwb3J0cy5sb3cgPSBodG9ucyhjZmctXHUwMDNlcG9ydF9taW4pO1xuK1x0cG9ydHMuaGlnaCA9IGh0b25zKGNmZy1cdTAwM2Vwb3J0X21heCk7XG4gXG4gXHR0dW5uZWxfaWRfdG9fdm5pKGluZm8tXHUwMDNla2V5LnR1bl9pZCwgdG1wX3ZuaSk7XG4gXHR2bmkgPSAodG1wX3ZuaVswXSBcdTAwM2NcdTAwM2MgMTYpIHwgKHRtcF92bmlbMV0gXHUwMDNjXHUwMDNjIDgpIHwgdG1wX3ZuaVsyXTtcbkBAIC0yNDY4LDE3ICsyNTEyLDE3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuICNlbmRpZlxuIFx0fVxuIFxuLVx0aWYgKCFnZW5ldmUtXHUwMDNlY2ZnLmR1YWxzdGFjaykge1xuK1x0aWYgKCFjZmctXHUwMDNlZHVhbHN0YWNrKSB7XG4gXHRcdGlmIChpcF90dW5uZWxfaW5mb19hZihpbmZvKSA9PSBBRl9JTkVUKSB7XG4gXHRcdFx0aWYgKChpbmZvLVx1MDAzZWtleS51LmlwdjQuc3JjIHx8XG4tXHRcdFx0ICAgICBnZW5ldmUtXHUwMDNlY2ZnLmNvbGxlY3RfbWQpIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAgbWV0YWRhdGEpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdCAgICBubGFfcHV0X2luX2FkZHIoc2tiLCBJRkxBX0dFTkVWRV9MT0NBTCxcbiBcdFx0XHRcdFx0ICAgIGluZm8tXHUwMDNla2V5LnUuaXB2NC5zcmMpKVxuIFx0XHRcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gXHRcdH0gZWxzZSB7XG4gXHRcdFx0aWYgKCghaXB2Nl9hZGRyX2FueShcdTAwMjZpbmZvLVx1MDAzZWtleS51LmlwdjYuc3JjKSB8fFxuLVx0XHRcdCAgICAgZ2VuZXZlLVx1MDAzZWNmZy5jb2xsZWN0X21kKSBcdTAwMjZcdTAwMjZcbitcdFx0XHQgICAgIG1ldGFkYXRhKSBcdTAwMjZcdTAwMjZcbiBcdFx0XHQgICAgbmxhX3B1dF9pbjZfYWRkcihza2IsIElGTEFfR0VORVZFX0xPQ0FMNixcbiBcdFx0XHRcdFx0ICAgICBcdTAwMjZpbmZvLVx1MDAzZWtleS51LmlwdjYuc3JjKSlcbiBcdFx0XHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuQEAgLTI0OTEsNyArMjUzNSw3IEBAIHN0YXRpYyBpbnQgZ2VuZXZlX2ZpbGxfaW5mbyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBjb25zdCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KVxuIFx0ICAgIG5sYV9wdXRfYmUzMihza2IsIElGTEFfR0VORVZFX0xBQkVMLCBpbmZvLVx1MDAzZWtleS5sYWJlbCkpXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuLVx0aWYgKG5sYV9wdXRfdTgoc2tiLCBJRkxBX0dFTkVWRV9ERiwgZ2VuZXZlLVx1MDAzZWNmZy5kZikpXG4rXHRpZiAobmxhX3B1dF91OChza2IsIElGTEFfR0VORVZFX0RGLCBjZmctXHUwMDNlZGYpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbiBcdGlmIChubGFfcHV0X2JlMTYoc2tiLCBJRkxBX0dFTkVWRV9QT1JULCBpbmZvLVx1MDAzZWtleS50cF9kc3QpKVxuQEAgLTI1MDIsMjggKzI1NDYsMzEgQEAgc3RhdGljIGludCBnZW5ldmVfZmlsbF9pbmZvKHN0cnVjdCBza19idWZmICpza2IsIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpXG4gXG4gI2lmIElTX0VOQUJMRUQoQ09ORklHX0lQVjYpXG4gXHRpZiAobmxhX3B1dF91OChza2IsIElGTEFfR0VORVZFX1VEUF9aRVJPX0NTVU02X1JYLFxuLVx0XHQgICAgICAgIWdlbmV2ZS1cdTAwM2VjZmcudXNlX3VkcDZfcnhfY2hlY2tzdW1zKSlcbitcdFx0ICAgICAgICFjZmctXHUwMDNldXNlX3VkcDZfcnhfY2hlY2tzdW1zKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gI2VuZGlmXG4gXG4gXHRpZiAobmxhX3B1dF91OChza2IsIElGTEFfR0VORVZFX1RUTF9JTkhFUklULCB0dGxfaW5oZXJpdCkpXG4gXHRcdGdvdG8gbmxhX3B1dF9mYWlsdXJlO1xuIFxuLVx0aWYgKGdlbmV2ZS1cdTAwM2VjZmcuaW5uZXJfcHJvdG9faW5oZXJpdCBcdTAwMjZcdTAwMjZcbitcdGlmIChjZmctXHUwMDNlaW5uZXJfcHJvdG9faW5oZXJpdCBcdTAwMjZcdTAwMjZcbiBcdCAgICBubGFfcHV0X2ZsYWcoc2tiLCBJRkxBX0dFTkVWRV9JTk5FUl9QUk9UT19JTkhFUklUKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4gXHRpZiAobmxhX3B1dChza2IsIElGTEFfR0VORVZFX1BPUlRfUkFOR0UsIHNpemVvZihwb3J0cyksIFx1MDAyNnBvcnRzKSlcbiBcdFx0Z290byBubGFfcHV0X2ZhaWx1cmU7XG4gXG4tXHRpZiAoZ2VuZXZlLVx1MDAzZWNmZy5ncm9faGludCBcdTAwMjZcdTAwMjZcbitcdGlmIChjZmctXHUwMDNlZ3JvX2hpbnQgXHUwMDI2XHUwMDI2XG4gXHQgICAgbmxhX3B1dF9mbGFnKHNrYiwgSUZMQV9HRU5FVkVfR1JPX0hJTlQpKVxuIFx0XHRnb3RvIG5sYV9wdXRfZmFpbHVyZTtcbiBcbi1cdHJldHVybiAwO1xuK291dDpcbitcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0cmV0dXJuIGVycjtcbiBcbiBubGFfcHV0X2ZhaWx1cmU6XG4tXHRyZXR1cm4gLUVNU0dTSVpFO1xuK1x0ZXJyID0gLUVNU0dTSVpFO1xuK1x0Z290byBvdXQ7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgcnRubF9saW5rX29wcyBnZW5ldmVfbGlua19vcHMgX19yZWFkX21vc3RseSA9IHtcbkBAIC0yNjcxLDYgKzI3MTgsNyBAQCBzdGF0aWMgdm9pZCBfX2V4aXQgZ2VuZXZlX2NsZWFudXBfbW9kdWxlKHZvaWQpXG4gXHRydG5sX2xpbmtfdW5yZWdpc3RlcihcdTAwMjZnZW5ldmVfbGlua19vcHMpO1xuIFx0dW5yZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoXHUwMDI2Z2VuZXZlX25vdGlmaWVyX2Jsb2NrKTtcbiBcdHVucmVnaXN0ZXJfcGVybmV0X3N1YnN5cyhcdTAwMjZnZW5ldmVfbmV0X29wcyk7XG4rXHRyY3VfYmFycmllcigpO1xuIH1cbiBtb2R1bGVfZXhpdChnZW5ldmVfY2xlYW51cF9tb2R1bGUpO1xuIFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6NTM6MzIuNTY1ODc4OTMyWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODM0MzQxNjU5NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEdFTkVWRSBDb25maWd1cmF0aW9uIFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSd2ZSBnb3QgdGhpcyBwYXRjaCBhZmZlY3RpbmcgYGRyaXZlcnMvbmV0L2dlbmV2ZS5jYCwgYW5kIGl0J3MgYSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZS4gVGhleSdyZSBzd2l0Y2hpbmcgaG93IGBnZW5ldmVfY29uZmlnYCBpcyBhY2Nlc3NlZCwgbW92aW5nIGZyb20gYSBkaXJlY3QgYHN0cnVjdGAgdG8gYW4gYF9fcmN1ICpgIHBvaW50ZXIgd2l0aGluIHRoZSBgZ2VuZXZlX2RldmAgc3RydWN0dXJlLiBUaGlzIGltbWVkaWF0ZWx5IGZsYWdzIGFzIHNvbWV0aGluZyB0aGF0ICpuZWVkcyogZnV6emluZy4gSXQncyBkZXNpZ25lZCB0byBmaXggUkNVIGRlcmVmZXJlbmNpbmcgaXNzdWVzLCBlc3NlbnRpYWxseSByZXBsYWNpbmcgdGhlIG9sZCBzeW5jaHJvbm91cyBgZ2VuZXZlX3F1aWVzY2VgIGFuZCBgZ2VuZXZlX3VucXVpZXNjZWAgbWVjaGFuaXNtcyB3aXRoIFJDVS1iYXNlZCBhdG9taWMgY29uZmlndXJhdGlvbiB1cGRhdGVzLiBUaGF0J3MgYSBzb2xpZCB3aW4gZm9yIGNvbmN1cnJlbmN5LCBidXQgYSBwb3RlbnRpYWwgbGFuZG1pbmUgaWYgdGhlIFJDVSB1c2FnZSBpc24ndCBwZXJmZWN0LlxuXG5MZXQncyBkcmlsbCBkb3duIGFuZCBmaWd1cmUgb3V0IHRoZSBiZXN0IGZvY3VzIHBvaW50cyBmb3IgZnV6emluZy4gSSd2ZSBnb3QgYSBsaXN0IG9mIHRoZSBtb2RpZmllZCBzeW1ib2xzOiBgZ2VuZXZlX2xvb2t1cGAsIGBnZW5ldmU2X2xvb2t1cGAsIGBnZW5ldmVfdWRwX2VuY2FwX3JlY3ZgLCBgZ2VuZXZlX2NyZWF0ZV9zb2NrYCwgYWxsIHRoZSB3YXkgZG93biB0byBgZ2VuZXZlX2ZpbGxfaW5mb2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBhdm9pZCB0aGUgaG90IHBhdGggZnVuY3Rpb25zIGxpa2UgYGdlbmV2ZV94bWl0YCwgYGdlbmV2ZV94bWl0X3NrYmAsIGFuZCBzbyBvbi4gVGhleSdyZSBpbXBvcnRhbnQsIGJ1dCB0aGVpciBzaGVlciB2b2x1bWUgb2YgZXhlY3V0aW9uIG1pZ2h0IGRyb3duIG91dCBzdWJ0bGUgY29uY3VycmVuY3kgYnVncy4gVGhlIHNhbWUgZ29lcyBmb3IgcmVjZWl2ZSBwcm9jZXNzaW5nIGxpa2UgYGdlbmV2ZV91ZHBfZW5jYXBfcmVjdmAgd2hpY2ggd2lsbCBiZSBjb21wbGV4IHdpdGggdGhlIGVuY2FwIGFuZCBkZWNhcHN1bGF0aW9uLlxuXG5JbnN0ZWFkLCBJJ2xsIHByaW9yaXRpemUgdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGNvbnRyb2wgcGF0aCBmdW5jdGlvbnMuIE15IHRhcmdldCBsaXN0IGlzOlxuXG4qICAgYGdlbmV2ZV9jaGFuZ2VsaW5rYFxuKiAgIGBnZW5ldmVfY29uZmlndXJlYFxuKiAgIGBnZW5ldmVfbmV3bGlua2AgKGV2ZW4gdGhvdWdoIGl0J3MgbWluaW1hbGx5IHRvdWNoZWQsIGl0IGNhbGxzIGBnZW5ldmVfY29uZmlndXJlYCwgc28gaXQncyByZWxldmFudClcbiogICBgZ2VuZXZlX2ZpbGxfaW5mb2BcbiogICBUaGUgbmV3bHkgaW50cm9kdWNlZCBmdW5jdGlvbnMsIGxpa2UgYGdlbmV2ZV9jb25maWdfYWxsb2NgLCBgZ2VuZXZlX2NvbmZpZ19mcmVlYCwgYW5kIGBnZW5ldmVfZnJlZV9kZXZgIGFyZSBhbHNvIGhpZ2ggdmFsdWUgc2luY2UgdGhleSBpbXBsZW1lbnQgdGhlIG5ldyBjb25maWd1cmF0aW9uIG1hbmFnZW1lbnQuXG5cbkkgYWxzbyBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIGZvciBHRU5FVkUuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSdtIHRhcmdldGluZyB0aGUgY29ycmVjdCBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGVpdGhlciBpbiBgZHJpdmVycy9uZXQvS2NvbmZpZ2Agb3IgbWF5YmUgd2l0aGluIGBkcml2ZXJzL25ldC9nZW5ldmUuY2AgaXRzZWxmLiBUaGlzIHdpbGwgaW5mb3JtIHRoZSBpbml0aWFsIGZ1enogaGFybmVzcyBzZXR1cC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQwODMsIk91dHB1dFRva2VucyI6MTgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MjEsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzo1Mzo0MC45MDkyOTgwOThaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk0MDcyNTUyOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgR0VORVZFXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L0tjb25maWc9MjMwPWNvbmZpZyBWWExBTlxcbi0tXFxuZHJpdmVycy9uZXQvS2NvbmZpZy0yNDQtXFxuZHJpdmVycy9uZXQvS2NvbmZpZzoyNDU6Y29uZmlnIEdFTkVWRVxcbmRyaXZlcnMvbmV0L0tjb25maWctMjQ2LVxcdHRyaXN0YXRlIFxcXCJHZW5lcmljIE5ldHdvcmsgVmlydHVhbGl6YXRpb24gRW5jYXBzdWxhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6NTM6NDUuODUwMDI5MDI3WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMyMDY2NzEwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3Npbmc6XG5cbioqRXhhbWluaW5nIHRoZSBHRU5FVkUgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHNvIGBHRU5FVkVgIGlzIHRoZSBrZXkgY29uZmlndXJhdGlvbiBwb2ludCBoZXJlLCB0aGF0IG11Y2ggaXMgY2xlYXIuIEJ1dCBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIEFyZSB0aGVyZSAqYW55KiBvdGhlciBjb25maWd1cmF0aW9ucyB3ZSBuZWVkIHRvIGNvbnNpZGVyPyBMZXQncyBzZWUuLi4gQWgsIHllcywgYENPTkZJR19JUFY2YCBpcyBhbHNvIGJlaW5nIHJlZmVyZW5jZWQgaW4gdGhlIGNvZGUsIHNvIHRoYXQncyBzb21ldGhpbmcgdG8ga2VlcCBpbiBtaW5kLCBhbHRob3VnaCBgQ09ORklHX0dFTkVWRWAgYXBwZWFycyB0byBiZSB0aGUgcHJpbWFyeSBvbmUuIE5vdywgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzIGNvbmZpZ3VyYXRpb24sIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvZGViYXNlIGFuZCBhbmFseXplIGl0cyBhcHBsaWNhdGlvbi5cblxuTGV0J3MgZm9jdXMgb24gYGdlbmV2ZV9jaGFuZ2VsaW5rYCBhbmQgYGdlbmV2ZV9jb25maWd1cmVgLiBBcmUgdGhlc2UgdGhlIHJpZ2h0IGZ1bmN0aW9ucyB0byB6ZXJvIGluIG9uIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjb25maWd1cmF0aW9uIGFjdHVhbGx5IGdldHMgcHV0IGludG8gZWZmZWN0PyBUaGV5IHNlZW0gbGlrZSBzdHJvbmcgY2FuZGlkYXRlcywgZ2l2ZW4gdGhlIG5hbWVzLiBNeSBndXQgc2F5cyB0aGV5J2xsIGJlIGNyaXRpY2FsIGZvY3VzIHN5bWJvbHMuIEknbGwgc3RhcnQgd2l0aCB0aG9zZSBhbmQgc2VlIHdoZXJlIHRoZXkgbGVhZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUzMTcsIk91dHB1dFRva2VucyI6MTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzo1Mzo0OS4xNzA2OTkyMzRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTAzNzQzMTQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5ldmVfY2hhbmdlbGlua1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9nZW5ldmUuYz0yMzYzPXN0YXRpYyBpbnQgZ2VuZXZlX25ld2xpbmsoc3RydWN0IG5ldF9kZXZpY2UgKmRldixcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTIzOTgtICovXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjM5OTpzdGF0aWMgaW50IGdlbmV2ZV9jaGFuZ2VsaW5rKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBubGF0dHIgKnRiW10sXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjQwMC1cXHRcXHRcXHQgICAgIHN0cnVjdCBubGF0dHIgKmRhdGFbXSxcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTI1NzY9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGdlbmV2ZV9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjU4My1cXHQubmV3bGlua1xcdD0gZ2VuZXZlX25ld2xpbmssXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjU4NDpcXHQuY2hhbmdlbGlua1xcdD0gZ2VuZXZlX2NoYW5nZWxpbmssXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjU4NS1cXHQuZGVsbGlua1xcdD0gZ2VuZXZlX2RlbGxpbmssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjUzOjU0LjIwODE0MTY5M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NjEwODk4NTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkZvY3VzaW5nIG9uIEdlbmV2ZSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGBnZW5ldmVfY2hhbmdlbGlua2AgYW5kIGBnZW5ldmVfY29uZmlndXJlYC4gVGhvc2UgYXJlIGRlZmluaXRlbHkgdGhlIGtleSBhcmVhcyB0byBjb25jZW50cmF0ZSBvbi4gVGhpbmtpbmcgYWJvdXQgdGhlIGNvbmZpZ3VyYXRpb24gcHJvY2VkdXJlcywgc3BlY2lmaWNhbGx5IHRob3NlIGZ1bmN0aW9ucywgdGhhdCBpcyB3aGVyZSB0aGUgaW50cmljYWNpZXMgb2YgR2VuZXZlIGltcGxlbWVudGF0aW9uIHdpbGwgdW5kb3VidGVkbHkgbGllLiBgZ2VuZXZlX2NoYW5nZWxpbmtgIGlzIGNyaXRpY2FsIGZvciBlbnN1cmluZyB0aGUgcHJvcGVyIGhhbmRsaW5nIG9mIGxpbmsgc3RhdGUgY2hhbmdlcyDigJMgdml0YWwgZm9yIHJlbGlhYmxlIG9wZXJhdGlvbi4gQW5kIGBnZW5ldmVfY29uZmlndXJlYOKApiB3ZWxsLCB0aGF0J3MgdGhlIGhlYXJ0IG9mIHRoZSBtYXR0ZXIsIGlzbid0IGl0PyBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBzZXR1cCBsb2dpYyBsaXZlczsgYW55IGFyY2hpdGVjdHVyYWwgd2Vha25lc3NlcyBvciBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyB3aWxsIGJlY29tZSByZWFkaWx5IGFwcGFyZW50IHRoZXJlLiBJIG5lZWQgdG8gbWFrZSBhIG1lbnRhbCBub3RlIHRvIHNjcnV0aW5pemUgdGhlaXIgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODY1LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6NTM6NTcuMTY5MjMzODNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUzNDY1MTgyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5ldmVfY29uZmlndXJlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2dlbmV2ZS5jPTE5NzM9c3RhdGljIGJvb2wgZ2VuZXZlX2RzdF9hZGRyX2VxdWFsKHN0cnVjdCBpcF90dW5uZWxfaW5mbyAqYSxcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE5ODEtXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MTk4MjpzdGF0aWMgaW50IGdlbmV2ZV9jb25maWd1cmUoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTE5ODMtXFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayxcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTIzNjM9c3RhdGljIGludCBnZW5ldmVfbmV3bGluayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjM4NS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoyMzg2OlxcdGVyciA9IGdlbmV2ZV9jb25maWd1cmUobGlua19uZXQsIGRldiwgZXh0YWNrLCBcXHUwMDI2Y2ZnKTtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yMzg3LVxcdGlmIChlcnIpXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYz0yNTkwPXN0cnVjdCBuZXRfZGV2aWNlICpnZW5ldmVfZGV2X2NyZWF0ZV9mYihzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IGNoYXIgKm5hbWUsXFxuLS1cXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNjEzLVxcdGluaXRfdG5sX2luZm8oXFx1MDAyNmNmZy5pbmZvLCBkc3RfcG9ydCk7XFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjYxNDpcXHRlcnIgPSBnZW5ldmVfY29uZmlndXJlKG5ldCwgZGV2LCBOVUxMLCBcXHUwMDI2Y2ZnKTtcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNjE1LVxcdGlmIChlcnIpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDdUMjM6NTQ6MDEuNzAzODkwNzAyWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjU3NDE1NjY2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBGb2N1cyBTeW1ib2xzIGluIEdlbmV2ZSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIHRoaW5raW5nIGFib3V0IHRoaXMgYGdlbmV2ZV9jb25maWd1cmVgIGlzIGEgc29saWQsIGNsZWFuIHN5bWJvbCB0byBzdGFydCB3aXRoLiBJdCBpbW1lZGlhdGVseSBzdWdnZXN0cyB0aGUgY29yZSBmdW5jdGlvbjogc2V0dGluZyB1cCBhbmQgbWFuYWdpbmcgdGhlIEdlbmV2ZSBjb25maWd1cmF0aW9uLiBJdOKAmXMgY29uY2lzZSBhbmQgY29udmV5cyB0aGUgYXBwcm9wcmlhdGUgbGV2ZWwgb2YgYWJzdHJhY3Rpb24uIE1vdmluZyBvbiB0byBgZ2VuZXZlX2ZpbGxfaW5mb2AgZmVlbHMgbGlrZSBhIG5hdHVyYWwgcHJvZ3Jlc3Npb24uIEl0IGRvdmV0YWlscyBwZXJmZWN0bHkgYXMgYSBjb21wYW5pb247IHRoZSBpbXBsaWNhdGlvbiBiZWluZyB0aGUgYWN0IG9mICpwb3B1bGF0aW5nKiBvciAqY29tcGxldGluZyogdGhlIG5lY2Vzc2FyeSBkZXRhaWxzIGZvciB0aGF0IGNvbmZpZ3VyYXRpb24uIFRoaXMgaXMgZ29vZDsgdGhlIHN5bWJvbHMgd29yayBpbiB0YW5kZW0gdG8gY3JlYXRlIGEgY2xlYXIgcHJvZ3Jlc3Npb24gZnJvbSBjb25maWd1cmF0aW9uIHRvIGluc3RhbnRpYXRpb24uIEl0IGhlbHBzIHRvIGRlbGluZWF0ZSB0aGUgZnVuY3Rpb25hbCBhcmVhcyBjbGVhcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjQyNiwiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA3VDIzOjU0OjA0LjI3ODA1MTUzMVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4MjU2NTc2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZW5ldmVfZmlsbF9pbmZvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2dlbmV2ZS5jPTI0NDQ9c3RhdGljIHNpemVfdCBnZW5ldmVfZ2V0X3NpemUoY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jLTI0NjQtXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmM6MjQ2NTpzdGF0aWMgaW50IGdlbmV2ZV9maWxsX2luZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgY29uc3Qgc3RydWN0IG5ldF9kZXZpY2UgKmRldilcXG5kcml2ZXJzL25ldC9nZW5ldmUuYy0yNDY2LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2dlbmV2ZS5jPTI1NzY9c3RhdGljIHN0cnVjdCBydG5sX2xpbmtfb3BzIGdlbmV2ZV9saW5rX29wcyBfX3JlYWRfbW9zdGx5ID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjU4Ni1cXHQuZ2V0X3NpemVcXHQ9IGdlbmV2ZV9nZXRfc2l6ZSxcXG5kcml2ZXJzL25ldC9nZW5ldmUuYzoyNTg3OlxcdC5maWxsX2luZm9cXHQ9IGdlbmV2ZV9maWxsX2luZm8sXFxuZHJpdmVycy9uZXQvZ2VuZXZlLmMtMjU4OC19O1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzo1NDowOS4xNjA2MjMyNFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1Nzc3NTIyMDI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmFjdG9yaW5nIHRoZSBHRU5FVkUgRHJpdmVyJ3MgQ29uZmlndXJhdGlvbiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYSBzaWduaWZpY2FudCBzaGlmdCBpbiBob3cgdGhlIEdFTkVWRSBkcml2ZXIgbWFuYWdlcyBpdHMgY29uZmlndXJhdGlvbiBkYXRhLCBzcGVjaWZpY2FsbHkgdGhlIGBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZ2AuIEl0IGxvb2tzIGxpa2UgdGhleSdyZSBkaXRjaGluZyB0aGUgb2xkIHN5bmNocm9ub3VzIGBnZW5ldmVfcXVpZXNjZWAvYGdlbmV2ZV91bnF1aWVzY2VgIG1ldGhvZCwgd2hpY2ggaXMgZ29vZC4gVGhhdCBgc3luY2hyb25pemVfbmV0KClgIGNhbGwgd2FzIHByb2JhYmx5IGEgcGVyZm9ybWFuY2UgYm90dGxlbmVjaywgYW5kIHRoZSBSQ1UtYmFzZWQgcG9pbnRlciBzd2FwIHRoZXkncmUgdXNpbmcgc2hvdWxkIGJlIGEgYmlnIGltcHJvdmVtZW50LCBhbGxvd2luZyBsb2NrbGVzcyBhY2Nlc3MgaW4gdGhlIGRhdGEgcGF0aC5cblxuRnVuY3Rpb25hbGx5LCB0aGlzIG1lYW5zIHRoZSBjb250cm9sIHBhdGggaXMgdW5kZXJnb2luZyBhIHRyYW5zZm9ybWF0aW9uLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBSQ1UgZm9yIG1hbmFnaW5nIHRoYXQgYHN0cnVjdCBnZW5ldmVfY29uZmlnYC4gU28sIEkgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gdGhlIG5ldGxpbmsgY29udHJvbCBwYXRoIGZ1bmN0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhvc2UgZnVuY3Rpb25zIHRoYXQgZGVhbCB3aXRoIGFsbG9jYXRpbmcsIHVwZGF0aW5nLCBhbmQgZnJlZWluZyB0aGUgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgcGF5IGV4dHJhIGF0dGVudGlvbiB0byBgZ2VuZXZlX2NoYW5nZWxpbmtgLCBgZ2VuZXZlX2NvbmZpZ3VyZWAsIGBnZW5ldmVfZmlsbF9pbmZvYCwgYGdlbmV2ZV9jb25maWdfYWxsb2NgLCBhbmQgYGdlbmV2ZV9mcmVlX2RldmAgLS0gdGhvc2Ugc2VlbSBsaWtlIHRoZSBrZXkgYXJlYXMgYWZmZWN0ZWQgYnkgdGhpcyBSQ1UgaW1wbGVtZW50YXRpb24uIFRoaXMgd2lsbCBiZSBjcml0aWNhbCBmb3IgY29uY3VycmVudCBhY2Nlc3MgYW5kIGNvbmZpZ3VyYXRpb24gY2hhbmdlcy5cblxuVGhlIGBHRU5FVkVgIGNvbmZpZyBzZWVtcyB0byBiZSB0aGUgdHJpZ2dlciwgc28ga2VlcCBhbiBleWUgb3V0IGZvciB0aGF0IGJlaW5nIGVuYWJsZWQuIEdpdmVuIHRoaXMgUkNVIGltcGxlbWVudGF0aW9uLCB0aGVyZSBtaWdodCBiZSBzb21lIGludGVyZXN0aW5nIHJhY2UgY29uZGl0aW9ucyB0byBleHBsb2l0IGR1cmluZyBjb25maWd1cmF0aW9uIGNoYW5nZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2ODU2LCJPdXRwdXRUb2tlbnMiOjE2MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wN1QyMzo1NDoxNC45MzgxNDc4OTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTc3MjExNTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkdFTkVWRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImdlbmV2ZV9jaGFuZ2VsaW5rXCIsXG4gICAgXCJnZW5ldmVfY29uZmlndXJlXCIsXG4gICAgXCJnZW5ldmVfZmlsbF9pbmZvXCIsXG4gICAgXCJnZW5ldmVfY29uZmlnX2FsbG9jXCIsXG4gICAgXCJnZW5ldmVfZnJlZV9kZXZcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIEdFTkVWRSBkcml2ZXIgdG8gdXNlIFJDVSBmb3IgaXRzIGNvbmZpZ3VyYXRpb24gKGBzdHJ1Y3QgZ2VuZXZlX2NvbmZpZ2ApLCByZXBsYWNpbmcgdGhlIHByZXZpb3VzIHN5bmNocm9ub3VzIGBnZW5ldmVfcXVpZXNjZWAvYGdlbmV2ZV91bnF1aWVzY2VgIG1lY2hhbmlzbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGFmZmVjdGluZyBob3cgY29uZmlndXJhdGlvbiB1cGRhdGVzIGFyZSBoYW5kbGVkIGNvbmN1cnJlbnRseSB3aXRoIHRoZSBkYXRhIHBhdGguIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBuZXRsaW5rIGNvbnRyb2wgcGF0aCBmdW5jdGlvbnMgdGhhdCBhbGxvY2F0ZSwgdXBkYXRlLCBhbmQgZnJlZSB0aGUgY29uZmlndXJhdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJHRU5FVkVcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJnZW5ldmVfY2hhbmdlbGlua1wiLFxuICAgIFwiZ2VuZXZlX2NvbmZpZ3VyZVwiLFxuICAgIFwiZ2VuZXZlX2ZpbGxfaW5mb1wiLFxuICAgIFwiZ2VuZXZlX2NvbmZpZ19hbGxvY1wiLFxuICAgIFwiZ2VuZXZlX2ZyZWVfZGV2XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBHRU5FVkUgZHJpdmVyIHRvIHVzZSBSQ1UgZm9yIGl0cyBjb25maWd1cmF0aW9uIChgc3RydWN0IGdlbmV2ZV9jb25maWdgKSwgcmVwbGFjaW5nIHRoZSBwcmV2aW91cyBzeW5jaHJvbm91cyBgZ2VuZXZlX3F1aWVzY2VgL2BnZW5ldmVfdW5xdWllc2NlYCBtZWNoYW5pc20uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBhZmZlY3RpbmcgaG93IGNvbmZpZ3VyYXRpb24gdXBkYXRlcyBhcmUgaGFuZGxlZCBjb25jdXJyZW50bHkgd2l0aCB0aGUgZGF0YSBwYXRoLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgbmV0bGluayBjb250cm9sIHBhdGggZnVuY3Rpb25zIHRoYXQgYWxsb2NhdGUsIHVwZGF0ZSwgYW5kIGZyZWUgdGhlIGNvbmZpZ3VyYXRpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow58rbr[1] Phase: Succeeded StartedAt: 2026-07-07 23:54:28 +0000 UTC FinishedAt: 2026-07-07 23:54:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-07 23:54:29 +0000 UTC FinishedAt: 2026-07-07 23:54:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[2] Phase: Succeeded StartedAt: 2026-07-07 23:54:29 +0000 UTC FinishedAt: 2026-07-08 04:51:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-07 23:54:29 +0000 UTC FinishedAt: 2026-07-08 04:51:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-07 23:54:29 +0000 UTC FinishedAt: 2026-07-07 23:55:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-07 23:54:29 +0000 UTC FinishedAt: 2026-07-07 23:55:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflow58rbr/series-workflow58rbr-convert-artifact-798792049/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-07 23:55:19 +0000 UTC FinishedAt: 2026-07-08 00:34:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-07 23:55:19 +0000 UTC FinishedAt: 2026-07-08 00:34:33 +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:*c4fc62ef-a11e-4f79-ae74-13ced0f51e8d,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-workflow58rbr/series-workflow58rbr-convert-artifact-798792049/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": "d1104176-74ff-4c6c-9a15-06372662a0e6", "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-workflow58rbr/series-workflow58rbr-build-action-1543984031/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-07 23:55:19 +0000 UTC FinishedAt: 2026-07-08 00:34:19 +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:*c4fc62ef-a11e-4f79-ae74-13ced0f51e8d,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-workflow58rbr/series-workflow58rbr-convert-artifact-798792049/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": "d1104176-74ff-4c6c-9a15-06372662a0e6", "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-workflow58rbr/series-workflow58rbr-build-action-1543984031/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-08 00:34:33 +0000 UTC FinishedAt: 2026-07-08 00:34:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-08 00:34:34 +0000 UTC FinishedAt: 2026-07-08 00:34:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-08 00:34:34 +0000 UTC FinishedAt: 2026-07-08 00:34:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-08 00:34:34 +0000 UTC FinishedAt: 2026-07-08 00:34:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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-workflow58rbr/series-workflow58rbr-convert-artifact-2882053316/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-08 00:34:57 +0000 UTC FinishedAt: 2026-07-08 00:37:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-08 00:34:57 +0000 UTC FinishedAt: 2026-07-08 00:37:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d1104176-74ff-4c6c-9a15-06372662a0e6,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-workflow58rbr/series-workflow58rbr-build-action-1543984031/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-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-08 00:37:14 +0000 UTC FinishedAt: 2026-07-08 00:37:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-08 00:37:14 +0000 UTC FinishedAt: 2026-07-08 00:37:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-08 00:37:14 +0000 UTC FinishedAt: 2026-07-08 01:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-08 00:37:14 +0000 UTC FinishedAt: 2026-07-08 01:46:16 +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:*c4fc62ef-a11e-4f79-ae74-13ced0f51e8d,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-workflow58rbr/series-workflow58rbr-convert-artifact-2882053316/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": "c891d6d0-e1b3-4b7f-8d03-ab84f9cfc04c", "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-workflow58rbr/series-workflow58rbr-build-action-457100496/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-08 00:37:14 +0000 UTC FinishedAt: 2026-07-08 01:46:06 +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:*c4fc62ef-a11e-4f79-ae74-13ced0f51e8d,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-workflow58rbr/series-workflow58rbr-convert-artifact-2882053316/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": "c891d6d0-e1b3-4b7f-8d03-ab84f9cfc04c", "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-workflow58rbr/series-workflow58rbr-build-action-457100496/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-08 01:46:16 +0000 UTC FinishedAt: 2026-07-08 01:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-08 01:46:16 +0000 UTC FinishedAt: 2026-07-08 01:46:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-08 01:46:16 +0000 UTC FinishedAt: 2026-07-08 01:48:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-08 01:46:16 +0000 UTC FinishedAt: 2026-07-08 01:48:29 +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:*c891d6d0-e1b3-4b7f-8d03-ab84f9cfc04c,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-workflow58rbr/series-workflow58rbr-build-action-457100496/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-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-08 01:48:39 +0000 UTC FinishedAt: 2026-07-08 04:51:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-08 01:48:39 +0000 UTC FinishedAt: 2026-07-08 04:51:12 +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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"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:*d1104176-74ff-4c6c-9a15-06372662a0e6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c891d6d0-e1b3-4b7f-8d03-ab84f9cfc04c,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-workflow58rbr/series-workflow58rbr-build-action-1543984031/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-workflow58rbr/series-workflow58rbr-build-action-457100496/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-08 01:48:39 +0000 UTC FinishedAt: 2026-07-08 01:48:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-08 01:48:39 +0000 UTC FinishedAt: 2026-07-08 01:48:46 +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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"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-workflow58rbr/series-workflow58rbr-convert-artifact-2112940237/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-08 01:48:39 +0000 UTC FinishedAt: 2026-07-08 01:48:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-08 01:48:39 +0000 UTC FinishedAt: 2026-07-08 01:48:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-08 01:48:39 +0000 UTC FinishedAt: 2026-07-08 01:48:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-08 01:48:49 +0000 UTC FinishedAt: 2026-07-08 04:51:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow58rbr[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-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":["geneve_changelink","geneve_configure","geneve_fill_info","geneve_config_alloc","geneve_free_dev"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a13f31a92f35161b499bf29638336885259da78","config_name":"upstream-apparmor-kasan.config","enable_configs":["GENEVE"],"series_id":"6ea35341-11eb-4020-aa27-3b79bf21b9af","tree_name":"net-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-08 01:48:49 +0000 UTC FinishedAt: 2026-07-08 04:51:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d1104176-74ff-4c6c-9a15-06372662a0e6,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*c891d6d0-e1b3-4b7f-8d03-ab84f9cfc04c,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-workflow58rbr/series-workflow58rbr-build-action-1543984031/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-workflow58rbr/series-workflow58rbr-build-action-457100496/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-workflow58rbr/series-workflow58rbr-convert-artifact-2112940237/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,}