Name: series-workflow8bbzh Phase: Succeeded StartedAt: 2026-06-23 10:02:28 +0000 UTC FinishedAt: 2026-06-23 14:33:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[0] Phase: Succeeded StartedAt: 2026-06-23 10:02:28 +0000 UTC FinishedAt: 2026-06-23 10:11:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[0].run-triage Phase: Succeeded StartedAt: 2026-06-23 10:02:28 +0000 UTC FinishedAt: 2026-06-23 10:11:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "66affa37cfac0aec061cc4bcf4a065b0c52f7e19", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CONFIGFS_FS", "NVME_TARGET", "NVME_TARGET_LOOP", "NVME_TARGET_TCP", "NVME_TARGET_RDMA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "66affa37cfac0aec061cc4bcf4a065b0c52f7e19", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CONFIGFS_FS", "NVME_TARGET", "NVME_TARGET_LOOP", "NVME_TARGET_TCP", "NVME_TARGET_RDMA" ], "series_id": "f460be5a-d520-4bc1-9cfb-6492f841629b" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "configfs_register_subsystem", "configfs_link_subsystems", "configfs_unlink_subsystems", "configfs_get_super_info", "configfs_fill_super", "nvmet_configfs_fill_subsystem", "nvmet_add_disc_subsys", "nvmet_ports_make", "nvmet_subsys_make", "nvmet_add_port_list", "nvmet_del_port_list", "nvmet_root_discovery_nqn_store", "nvmet_execute_disc_get_log_page" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "773be3e5-366e-482f-8da3-9a5abb71b7a8" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDEwOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUX0xPT1AmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVRfVENQJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUX1JETUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0mIzM0OywKICAgICYjMzQ7Y29uZmlnZnNfbGlua19zdWJzeXN0ZW1zJiMzNDssCiAgICAmIzM0O2NvbmZpZ2ZzX3VubGlua19zdWJzeXN0ZW1zJiMzNDssCiAgICAmIzM0O2NvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvJiMzNDssCiAgICAmIzM0O2NvbmZpZ2ZzX2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7bnZtZXRfY29uZmlnZnNfZmlsbF9zdWJzeXN0ZW0mIzM0OywKICAgICYjMzQ7bnZtZXRfYWRkX2Rpc2Nfc3Vic3lzJiMzNDssCiAgICAmIzM0O252bWV0X3BvcnRzX21ha2UmIzM0OywKICAgICYjMzQ7bnZtZXRfc3Vic3lzX21ha2UmIzM0OywKICAgICYjMzQ7bnZtZXRfYWRkX3BvcnRfbGlzdCYjMzQ7LAogICAgJiMzNDtudm1ldF9kZWxfcG9ydF9saXN0JiMzNDssCiAgICAmIzM0O252bWV0X3Jvb3RfZGlzY292ZXJ5X25xbl9zdG9yZSYjMzQ7LAogICAgJiMzNDtudm1ldF9leGVjdXRlX2Rpc2NfZ2V0X2xvZ19wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV0d29yayBuYW1lc3BhY2Ugc3VwcG9ydCBmb3IgY29uZmlnZnMgYW5kIHRoZSBOVk1lLW9GIHRhcmdldC4gSXQgbW9kaWZpZXMgY29yZSBjb25maWdmcyBsb2dpYyB0byBzdXBwb3J0IG11bHRpcGxlIHN1cGVyYmxvY2tzIHBlciBuZXR3b3JrIG5hbWVzcGFjZSBhbmQgdXBkYXRlcyB0aGUgTlZNZSB0YXJnZXQgdG8gdXNlIHBlci1uYW1lc3BhY2UgZGlzY292ZXJ5IHN1YnN5c3RlbXMgYW5kIHBvcnRzLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxMDoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAxNTY5MWZiYTM3Y2MyYjg0YjJkYmYyNGJkNzY5MmI1NWY0YTYyYzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAxMDoxMDoxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMgYi9kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmNcbmluZGV4IGI4OGY4OTdmMDZlMjVlLi43NjM2YWMzNzczYjQwMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jXG5AQCAtMjUsOCAmIzQzOzI1LDcgQEBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgbnZtZXRfaG9zdF90eXBlO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBudm1ldF9zdWJzeXNfdHlwZTtcbiBcbi1zdGF0aWMgTElTVF9IRUFEKG52bWV0X3BvcnRzX2xpc3QpO1xuLXN0cnVjdCBsaXN0X2hlYWQgKm52bWV0X3BvcnRzID0gXHUwMDI2bnZtZXRfcG9ydHNfbGlzdDtcbiYjNDM7c3RhdGljIERFRklORV9YQVJSQVkobnZtZXRfcG9ydHNfeGEpO1xuIFxuIHN0cnVjdCBudm1ldF90eXBlX25hbWVfbWFwIHtcbiBcdHU4XHRcdHR5cGU7XG5AQCAtNTEsNiAmIzQzOzUwLDcwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbnZtZXRfdHlwZV9uYW1lX21hcCBudm1ldF9hZGRyX2ZhbWlseVtdID0ge1xuIFx0eyBOVk1GX0FERFJfRkFNSUxZX0xPT1AsXHRcJiMzNDtsb29wXCYjMzQ7IH0sXG4gfTtcbiBcbiYjNDM7dTY0IG52bWV0X2dldF9uc19pZChzdHJ1Y3QgbmV0ICpuZXRfbnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbnNfY29tbW9uICpucztcbiYjNDM7XG4mIzQzO1x0aWYgKCFuZXRfbnMpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRucyA9IHRvX25zX2NvbW1vbihuZXRfbnMpO1xuJiM0MztcdHJldHVybiBuZXRfbnMgPT0gXHUwMDI2aW5pdF9uZXQgPyAwIDogbnMtXHUwMDNlbnNfaWQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCBsaXN0X2hlYWQgKm52bWV0X2dldF9wb3J0X2xpc3Qoc3RydWN0IG5ldCAqbmV0X25zKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCAqcG9ydF9saXN0O1xuJiM0MztcdHU2NCBuc19pZCA9IG52bWV0X2dldF9uc19pZChuZXRfbnMpO1xuJiM0MztcbiYjNDM7XHRwb3J0X2xpc3QgPSB4YV9sb2FkKFx1MDAyNm52bWV0X3BvcnRzX3hhLCBuc19pZCk7XG4mIzQzO1x0cmV0dXJuIHBvcnRfbGlzdDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBudm1ldF9hZGRfcG9ydF9saXN0KHN0cnVjdCBudm1ldF9wb3J0ICpwKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IG5zX2lkID0gbnZtZXRfZ2V0X25zX2lkKHAtXHUwMDNlbmV0X25zKTtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3J0X2xpc3Q7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdHhhX2xvY2soXHUwMDI2bnZtZXRfcG9ydHNfeGEpO1xuJiM0MztcdHBvcnRfbGlzdCA9IHhhX2xvYWQoXHUwMDI2bnZtZXRfcG9ydHNfeGEsIG5zX2lkKTtcbiYjNDM7XHRpZiAoIXBvcnRfbGlzdCkge1xuJiM0MztcdFx0cG9ydF9saXN0ID0ga3phbGxvY19vYmooKnBvcnRfbGlzdCk7XG4mIzQzO1x0XHRpZiAoIXBvcnRfbGlzdCkge1xuJiM0MztcdFx0XHRlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRJTklUX0xJU1RfSEVBRChwb3J0X2xpc3QpO1xuJiM0MztcdFx0ZXJyID0gX194YV9pbnNlcnQoXHUwMDI2bnZtZXRfcG9ydHNfeGEsIG5zX2lkLFxuJiM0MztcdFx0XHRcdCAgcG9ydF9saXN0LCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0a2ZyZWUocG9ydF9saXN0KTtcbiYjNDM7XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRsaXN0X2FkZChcdTAwMjZwLVx1MDAzZWdsb2JhbF9lbnRyeSwgcG9ydF9saXN0KTtcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHR4YV91bmxvY2soXHUwMDI2bnZtZXRfcG9ydHNfeGEpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG52bWV0X2RlbF9wb3J0X2xpc3Qoc3RydWN0IG52bWV0X3BvcnQgKnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3J0X2xpc3Q7XG4mIzQzO1x0dTY0IG5zX2lkID0gbnZtZXRfZ2V0X25zX2lkKHAtXHUwMDNlbmV0X25zKTtcbiYjNDM7XG4mIzQzO1x0eGFfbG9jayhcdTAwMjZudm1ldF9wb3J0c194YSk7XG4mIzQzO1x0cG9ydF9saXN0ID0geGFfbG9hZChcdTAwMjZudm1ldF9wb3J0c194YSwgbnNfaWQpO1xuJiM0MztcdGlmICghV0FSTl9PTighcG9ydF9saXN0KSkge1xuJiM0MztcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZwLVx1MDAzZWdsb2JhbF9lbnRyeSk7XG4mIzQzO1x0XHRpZiAobGlzdF9lbXB0eShwb3J0X2xpc3QpKSB7XG4mIzQzO1x0XHRcdF9feGFfZXJhc2UoXHUwMDI2bnZtZXRfcG9ydHNfeGEsIG5zX2lkKTtcbiYjNDM7XHRcdFx0a2ZyZWUocG9ydF9saXN0KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0eGFfdW5sb2NrKFx1MDAyNm52bWV0X3BvcnRzX3hhKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgYm9vbCBudm1ldF9pc19wb3J0X2VuYWJsZWQoc3RydWN0IG52bWV0X3BvcnQgKnAsIGNvbnN0IGNoYXIgKmNhbGxlcilcbiB7XG4gXHRpZiAocC1cdTAwM2VlbmFibGVkKVxuQEAgLTE3MTcsNiAmIzQzOzE3ODAsNyBAQCBzdGF0aWMgdm9pZCBudm1ldF9zdWJzeXNfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG4ge1xuIFx0c3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzID0gdG9fc3Vic3lzKGl0ZW0pO1xuIFxuJiM0MztcdGNvbmZpZ2ZzX3JlbW92ZV9kZWZhdWx0X2dyb3VwcyhcdTAwMjZzdWJzeXMtXHUwMDNlZ3JvdXApO1xuIFx0bnZtZXRfc3Vic3lzX2RlbF9jdHJscyhzdWJzeXMpO1xuIFx0bnZtZXRfc3Vic3lzX3B1dChzdWJzeXMpO1xuIH1cbkBAIC0xNzM0LDE5ICYjNDM7MTc5OCwyMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgbnZtZXRfc3Vic3lzX3R5cGUgPSB7XG4gc3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgKm52bWV0X3N1YnN5c19tYWtlKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxuIFx0XHRjb25zdCBjaGFyICpuYW1lKVxuIHtcbi1cdHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cztcbiYjNDM7XHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMsICpkaXNjX3N1YnN5cztcbiYjNDM7XHRzdHJ1Y3QgbmV0ICpuZXRfbnMgPSBjb25maWdmc19uc19mcm9tX2dyb3VwKGdyb3VwKTtcbiBcbiBcdGlmIChzeXNmc19zdHJlcShuYW1lLCBOVk1FX0RJU0NfU1VCU1lTX05BTUUpKSB7XG4gXHRcdHByX2VycihcJiMzNDtjYW4mIzM5O3QgY3JlYXRlIGRpc2NvdmVyeSBzdWJzeXN0ZW0gdGhyb3VnaCBjb25maWdmc1xcblwmIzM0Oyk7XG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0fVxuIFxuLVx0aWYgKHN5c2ZzX3N0cmVxKG5hbWUsIG52bWV0X2Rpc2Nfc3Vic3lzLVx1MDAzZXN1YnN5c25xbikpIHtcbiYjNDM7XHRkaXNjX3N1YnN5cyA9IG52bWV0X2dldF9kaXNjX3N1YnN5cyhuZXRfbnMpO1xuJiM0MztcdGlmICghZGlzY19zdWJzeXMpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbiYjNDM7XHRpZiAoc3lzZnNfc3RyZXEobmFtZSwgZGlzY19zdWJzeXMtXHUwMDNlc3Vic3lzbnFuKSkge1xuIFx0XHRwcl9lcnIoXCYjMzQ7Y2FuJiMzOTt0IGNyZWF0ZSBzdWJzeXN0ZW0gdXNpbmcgdW5pcXVlIGRpc2NvdmVyeSBOUU5cXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiBcdH1cbiBcbi1cdHN1YnN5cyA9IG52bWV0X3N1YnN5c19hbGxvYyhuYW1lLCBOVk1FX05RTl9OVk1FKTtcbiYjNDM7XHRzdWJzeXMgPSBudm1ldF9zdWJzeXNfYWxsb2MobmFtZSwgTlZNRV9OUU5fTlZNRSwgbmV0X25zKTtcbiBcdGlmIChJU19FUlIoc3Vic3lzKSlcbiBcdFx0cmV0dXJuIEVSUl9DQVNUKHN1YnN5cyk7XG4gXG5AQCAtMjAwNCw4ICYjNDM7MjA3Miw5IEBAIHN0YXRpYyB2b2lkIG52bWV0X3BvcnRfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG4gXG4gXHQvKiBMZXQgaW5mbGlnaHQgY29udHJvbGxlcnMgdGVhcmRvd24gY29tcGxldGUgKi9cbiBcdGZsdXNoX3dvcmtxdWV1ZShudm1ldF93cSk7XG4tXHRsaXN0X2RlbChcdTAwMjZwb3J0LVx1MDAzZWdsb2JhbF9lbnRyeSk7XG4mIzQzO1x0bnZtZXRfZGVsX3BvcnRfbGlzdChwb3J0KTtcbiBcbiYjNDM7XHRjb25maWdmc19yZW1vdmVfZGVmYXVsdF9ncm91cHMoXHUwMDI2cG9ydC1cdTAwM2Vncm91cCk7XG4gXHRrZXlfcHV0KHBvcnQtXHUwMDNla2V5cmluZyk7XG4gXHRrZnJlZShwb3J0LVx1MDAzZWFuYV9zdGF0ZSk7XG4gXHRrZnJlZShwb3J0KTtcbkBAIC0yMDU3LDYgJiM0MzsyMTI2LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwICpudm1ldF9wb3J0c19tYWtlKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcdH1cbiBcbiYjNDM7XHRwb3J0LVx1MDAzZW5ldF9ucyA9IGNvbmZpZ2ZzX25zX2Zyb21fZ3JvdXAoZ3JvdXApO1xuJiM0MztcdGlmICghcG9ydC1cdTAwM2VuZXRfbnMpXG4mIzQzO1x0XHRwb3J0LVx1MDAzZW5ldF9ucyA9IGdldF9uZXQoXHUwMDI2aW5pdF9uZXQpO1xuJiM0MztcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVk1FX1RBUkdFVF9UQ1BfVExTKSBcdTAwMjZcdTAwMjYgbnZtZV9rZXlyaW5nX2lkKCkpIHtcbiBcdFx0cG9ydC1cdTAwM2VrZXlyaW5nID0ga2V5X2xvb2t1cChudm1lX2tleXJpbmdfaWQoKSk7XG4gXHRcdGlmIChJU19FUlIocG9ydC1cdTAwM2VrZXlyaW5nKSkge1xuQEAgLTIwNzIsNyAmIzQzOzIxNDUsNyBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbnZtZXRfcG9ydHNfbWFrZShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbiBcdFx0XHRwb3J0LVx1MDAzZWFuYV9zdGF0ZVtpXSA9IE5WTUVfQU5BX0lOQUNDRVNTSUJMRTtcbiBcdH1cbiBcbi1cdGxpc3RfYWRkKFx1MDAyNnBvcnQtXHUwMDNlZ2xvYmFsX2VudHJ5LCBcdTAwMjZudm1ldF9wb3J0c19saXN0KTtcbiYjNDM7XHRudm1ldF9hZGRfcG9ydF9saXN0KHBvcnQpO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cG9ydC1cdTAwM2VlbnRyeSk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwb3J0LVx1MDAzZXN1YnN5c3RlbXMpO1xuQEAgLTIxMTksOSAmIzQzOzIxOTIsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgbnZtZXRfcG9ydHNfdHlwZSA9IHtcbiBcdC5jdF9vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuIH07XG4gXG4tc3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgbnZtZXRfc3Vic3lzdGVtc19ncm91cDtcbi1zdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCBudm1ldF9wb3J0c19ncm91cDtcbi1cbiAjaWZkZWYgQ09ORklHX05WTUVfVEFSR0VUX0FVVEhcbiBzdGF0aWMgc3NpemVfdCBudm1ldF9ob3N0X2RoY2hhcF9rZXlfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4gXHRcdGNoYXIgKnBhZ2UpXG5AQCAtMjMwMywxOSAmIzQzOzIzNzMsMjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG52bWV0X2hvc3RzX3R5cGUgPSB7XG4gXHQuY3Rfb3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwIG52bWV0X2hvc3RzX2dyb3VwO1xuLVxuIHN0YXRpYyBzc2l6ZV90IG52bWV0X3Jvb3RfZGlzY292ZXJ5X25xbl9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbiBcdFx0XHRcdFx0ICAgICBjaGFyICpwYWdlKVxuIHtcbi1cdHJldHVybiBzbnByaW50ZihwYWdlLCBQQUdFX1NJWkUsIFwmIzM0OyVzXFxuXCYjMzQ7LCBudm1ldF9kaXNjX3N1YnN5cy1cdTAwM2VzdWJzeXNucW4pO1xuJiM0MztcdHN0cnVjdCBuZXQgKm5ldF9ucyA9IGNvbmZpZ2ZzX25zX2Zyb21fZ3JvdXAodG9fY29uZmlnX2dyb3VwKGl0ZW0pKTtcbiYjNDM7XHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpkaXNjX3N1YnN5cyA9IG52bWV0X2dldF9kaXNjX3N1YnN5cyhuZXRfbnMpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRpc2Nfc3Vic3lzKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1x0cmV0dXJuIHNucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwgXCYjMzQ7JXNcXG5cJiMzNDssIGRpc2Nfc3Vic3lzLVx1MDAzZXN1YnN5c25xbik7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IG52bWV0X3Jvb3RfZGlzY292ZXJ5X25xbl9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4gXHRcdGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudClcbiB7XG4mIzQzO1x0c3RydWN0IGNvbmZpZ19pdGVtICpzdWJzeXN0ZW1zX2l0ZW07XG4mIzQzO1x0c3RydWN0IGNvbmZpZ19ncm91cCAqc3Vic3lzdGVtc19ncm91cDtcbiYjNDM7XHRzdHJ1Y3QgbmV0ICpuZXRfbnMgPSBjb25maWdmc19uc19mcm9tX2dyb3VwKHRvX2NvbmZpZ19ncm91cChpdGVtKSk7XG4mIzQzO1x0c3RydWN0IG52bWV0X3N1YnN5cyAqZGlzY19zdWJzeXM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTtcbi1cdGNoYXIgKm9sZF9ucW4sICpuZXdfbnFuO1xuJiM0MztcdGNoYXIgKm9sZF9ucW4gPSBOVUxMLCAqbmV3X25xbjtcbiBcdHNpemVfdCBsZW47XG4gXG4gXHRsZW4gPSBzdHJjc3BuKHBhZ2UsIFwmIzM0O1xcblwmIzM0Oyk7XG5AQCAtMjMyNyw3ICYjNDM7MjQwNCwxNCBAQCBzdGF0aWMgc3NpemVfdCBudm1ldF9yb290X2Rpc2NvdmVyeV9ucW5fc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGRvd25fd3JpdGUoXHUwMDI2bnZtZXRfY29uZmlnX3NlbSk7XG4tXHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcdTAwMjZudm1ldF9zdWJzeXN0ZW1zX2dyb3VwLmNnX2NoaWxkcmVuKSB7XG4mIzQzO1x0c3Vic3lzdGVtc19pdGVtID0gY29uZmlnX2dyb3VwX2ZpbmRfaXRlbSh0b19jb25maWdfZ3JvdXAoaXRlbSksIFwmIzM0O3N1YnN5c3RlbXNcJiMzNDspO1xuJiM0MztcdGlmIChXQVJOX09OKCFzdWJzeXN0ZW1zX2l0ZW0pKSB7XG4mIzQzO1x0XHRrZnJlZShuZXdfbnFuKTtcbiYjNDM7XHRcdHVwX3dyaXRlKFx1MDAyNm52bWV0X2NvbmZpZ19zZW0pO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdHN1YnN5c3RlbXNfZ3JvdXAgPSB0b19jb25maWdfZ3JvdXAoc3Vic3lzdGVtc19pdGVtKTtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcdTAwMjZzdWJzeXN0ZW1zX2dyb3VwLVx1MDAzZWNnX2NoaWxkcmVuKSB7XG4gXHRcdHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSA9XG4gXHRcdFx0Y29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgY29uZmlnX2l0ZW0sIGNpX2VudHJ5KTtcbiBcbkBAIC0yMzM4LDEyICYjNDM7MjQyMiwxNSBAQCBzdGF0aWMgc3NpemVfdCBudm1ldF9yb290X2Rpc2NvdmVyeV9ucW5fc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXHR9XG4tXHRvbGRfbnFuID0gbnZtZXRfZGlzY19zdWJzeXMtXHUwMDNlc3Vic3lzbnFuO1xuLVx0bnZtZXRfZGlzY19zdWJzeXMtXHUwMDNlc3Vic3lzbnFuID0gbmV3X25xbjtcbiYjNDM7XHRkaXNjX3N1YnN5cyA9IG52bWV0X2dldF9kaXNjX3N1YnN5cyhuZXRfbnMpO1xuJiM0MztcdGlmIChkaXNjX3N1YnN5cykge1xuJiM0MztcdFx0b2xkX25xbiA9IGRpc2Nfc3Vic3lzLVx1MDAzZXN1YnN5c25xbjtcbiYjNDM7XHRcdGRpc2Nfc3Vic3lzLVx1MDAzZXN1YnN5c25xbiA9IG5ld19ucW47XG4mIzQzO1x0fVxuIFx0dXBfd3JpdGUoXHUwMDI2bnZtZXRfY29uZmlnX3NlbSk7XG4gXG4gXHRrZnJlZShvbGRfbnFuKTtcbi1cdHJldHVybiBsZW47XG4mIzQzO1x0cmV0dXJuIGRpc2Nfc3Vic3lzID8gbGVuIDogLUVOT0VOVDtcbiB9XG4gXG4gQ09ORklHRlNfQVRUUihudm1ldF9yb290XywgZGlzY292ZXJ5X25xbik7XG5AQCAtMjM1OCw2ICYjNDM7MjQ0NSw2OSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgbnZtZXRfcm9vdF90eXBlID0ge1xuIFx0LmN0X293bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4gfTtcbiBcbiYjNDM7c3RhdGljIGludCBudm1ldF9jb25maWdmc19maWxsX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMsXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IG5ldCAqbmV0X25zKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGNvbmZpZ19ncm91cCAqc3Vic3lzdGVtc19ncm91cCwgKnBvcnRzX2dyb3VwLCAqaG9zdHNfZ3JvdXA7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbnZtZXRfYWRkX2Rpc2Nfc3Vic3lzKG5ldF9ucyk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdHN1YnN5c3RlbXNfZ3JvdXAgPSBremFsbG9jX29iaigqc3Vic3lzdGVtc19ncm91cCk7XG4mIzQzO1x0aWYgKCFzdWJzeXN0ZW1zX2dyb3VwKSB7XG4mIzQzO1x0XHRudm1ldF9kZWxfZGlzY19zdWJzeXMobmV0X25zKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XHRjb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoc3Vic3lzdGVtc19ncm91cCxcbiYjNDM7XHRcdFx0XCYjMzQ7c3Vic3lzdGVtc1wmIzM0OywgXHUwMDI2bnZtZXRfc3Vic3lzdGVtc190eXBlKTtcbiYjNDM7XHRjb25maWdmc19hZGRfZGVmYXVsdF9ncm91cChzdWJzeXN0ZW1zX2dyb3VwLFxuJiM0MztcdFx0XHRcdTAwMjZzdWJzeXMtXHUwMDNlc3VfZ3JvdXApO1xuJiM0MztcbiYjNDM7XHRwb3J0c19ncm91cCA9IGt6YWxsb2Nfb2JqKCpwb3J0c19ncm91cCk7XG4mIzQzO1x0aWYgKCFwb3J0c19ncm91cCkge1xuJiM0MztcdFx0a2ZyZWUoc3Vic3lzdGVtc19ncm91cCk7XG4mIzQzO1x0XHRudm1ldF9kZWxfZGlzY19zdWJzeXMobmV0X25zKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XHRjb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUocG9ydHNfZ3JvdXAsXG4mIzQzO1x0XHRcdFwmIzM0O3BvcnRzXCYjMzQ7LCBcdTAwMjZudm1ldF9wb3J0c190eXBlKTtcbiYjNDM7XHRjb25maWdmc19hZGRfZGVmYXVsdF9ncm91cChwb3J0c19ncm91cCxcbiYjNDM7XHRcdFx0XHUwMDI2c3Vic3lzLVx1MDAzZXN1X2dyb3VwKTtcbiYjNDM7XG4mIzQzO1x0aG9zdHNfZ3JvdXAgPSBremFsbG9jX29iaigqaG9zdHNfZ3JvdXApO1xuJiM0MztcdGlmICghaG9zdHNfZ3JvdXApIHtcbiYjNDM7XHRcdGtmcmVlKHBvcnRzX2dyb3VwKTtcbiYjNDM7XHRcdGtmcmVlKHN1YnN5c3RlbXNfZ3JvdXApO1xuJiM0MztcdFx0bnZtZXRfZGVsX2Rpc2Nfc3Vic3lzKG5ldF9ucyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1x0Y29uZmlnX2dyb3VwX2luaXRfdHlwZV9uYW1lKGhvc3RzX2dyb3VwLFxuJiM0MztcdFx0XHRcJiMzNDtob3N0c1wmIzM0OywgXHUwMDI2bnZtZXRfaG9zdHNfdHlwZSk7XG4mIzQzO1x0Y29uZmlnZnNfYWRkX2RlZmF1bHRfZ3JvdXAoaG9zdHNfZ3JvdXAsXG4mIzQzO1x0XHRcdFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9ncm91cCk7XG4mIzQzO1x0c3Ryc2NweShzdWJzeXMtXHUwMDNlc3VfZ3JvdXAuY2dfaXRlbS5jaV9uYW1lYnVmLCBcJiMzNDtudm1ldFwmIzM0OyxcbiYjNDM7XHRcdHNpemVvZihzdWJzeXMtXHUwMDNlc3VfZ3JvdXAuY2dfaXRlbS5jaV9uYW1lYnVmKSk7XG4mIzQzO1x0c3Vic3lzLVx1MDAzZXN1X2dyb3VwLmNnX2l0ZW0uY2lfdHlwZSA9IFx1MDAyNm52bWV0X3Jvb3RfdHlwZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG52bWV0X2NvbmZpZ2ZzX2NsZWFyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0ICpuZXRfbnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgY29uZmlnX2dyb3VwICpnLCAqbjtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGcsIG4sIFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9ncm91cC5kZWZhdWx0X2dyb3VwcyxcbiYjNDM7XHRcdFx0XHQgZ3JvdXBfZW50cnkpIHtcbiYjNDM7XHRcdGxpc3RfZGVsKFx1MDAyNmctXHUwMDNlZ3JvdXBfZW50cnkpO1xuJiM0MztcdFx0Y29uZmlnX2l0ZW1fcHV0KFx1MDAyNmctXHUwMDNlY2dfaXRlbSk7XG4mIzQzO1x0XHRrZnJlZShnKTtcbiYjNDM7XHR9XG4mIzQzO1x0bnZtZXRfZGVsX2Rpc2Nfc3Vic3lzKG5ldF9ucyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gbnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtID0ge1xuIFx0LnN1X2dyb3VwID0ge1xuIFx0XHQuY2dfaXRlbSA9IHtcbkBAIC0yMzY1LDMwICYjNDM7MjUxNSwxNCBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBudm1ldF9jb25maWdmc19zdWJzeXN0ZW0gPSB7XG4gXHRcdFx0LmNpX3R5cGVcdD0gXHUwMDI2bnZtZXRfcm9vdF90eXBlLFxuIFx0XHR9LFxuIFx0fSxcbiYjNDM7XHQuZmlsbF9zdWJzeXN0ZW0gPSBudm1ldF9jb25maWdmc19maWxsX3N1YnN5c3RlbSxcbiYjNDM7XHQuY2xlYXJfc3Vic3lzdGVtID0gbnZtZXRfY29uZmlnZnNfY2xlYXJfc3Vic3lzdGVtLFxuIH07XG4gXG4gaW50IF9faW5pdCBudm1ldF9pbml0X2NvbmZpZ2ZzKHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdGNvbmZpZ19ncm91cF9pbml0KFx1MDAyNm52bWV0X2NvbmZpZ2ZzX3N1YnN5c3RlbS5zdV9ncm91cCk7XG4tXHRtdXRleF9pbml0KFx1MDAyNm52bWV0X2NvbmZpZ2ZzX3N1YnN5c3RlbS5zdV9tdXRleCk7XG4tXG4tXHRjb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoXHUwMDI2bnZtZXRfc3Vic3lzdGVtc19ncm91cCxcbi1cdFx0XHRcJiMzNDtzdWJzeXN0ZW1zXCYjMzQ7LCBcdTAwMjZudm1ldF9zdWJzeXN0ZW1zX3R5cGUpO1xuLVx0Y29uZmlnZnNfYWRkX2RlZmF1bHRfZ3JvdXAoXHUwMDI2bnZtZXRfc3Vic3lzdGVtc19ncm91cCxcbi1cdFx0XHRcdTAwMjZudm1ldF9jb25maWdmc19zdWJzeXN0ZW0uc3VfZ3JvdXApO1xuLVxuLVx0Y29uZmlnX2dyb3VwX2luaXRfdHlwZV9uYW1lKFx1MDAyNm52bWV0X3BvcnRzX2dyb3VwLFxuLVx0XHRcdFwmIzM0O3BvcnRzXCYjMzQ7LCBcdTAwMjZudm1ldF9wb3J0c190eXBlKTtcbi1cdGNvbmZpZ2ZzX2FkZF9kZWZhdWx0X2dyb3VwKFx1MDAyNm52bWV0X3BvcnRzX2dyb3VwLFxuLVx0XHRcdFx1MDAyNm52bWV0X2NvbmZpZ2ZzX3N1YnN5c3RlbS5zdV9ncm91cCk7XG4tXG4tXHRjb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoXHUwMDI2bnZtZXRfaG9zdHNfZ3JvdXAsXG4tXHRcdFx0XCYjMzQ7aG9zdHNcJiMzNDssIFx1MDAyNm52bWV0X2hvc3RzX3R5cGUpO1xuLVx0Y29uZmlnZnNfYWRkX2RlZmF1bHRfZ3JvdXAoXHUwMDI2bnZtZXRfaG9zdHNfZ3JvdXAsXG4tXHRcdFx0XHUwMDI2bnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtLnN1X2dyb3VwKTtcbi1cbiBcdHJldCA9IGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbShcdTAwMjZudm1ldF9jb25maWdmc19zdWJzeXN0ZW0pO1xuIFx0aWYgKHJldCkge1xuIFx0XHRwcl9lcnIoXCYjMzQ7Y29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtOiAlZFxcblwmIzM0OywgcmV0KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jXG5pbmRleCA2MmRkNTliOWFhNGYxYy4uMzk5ODliOGJhZTkyZjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmNcbkBAIC0xNzk4LDIyICYjNDM7MTc5OCwyNyBAQCBzdGF0aWMgc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfZmluZF9nZXRfc3Vic3lzKHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0LFxuIFx0XHRjb25zdCBjaGFyICpzdWJzeXNucW4pXG4ge1xuIFx0c3RydWN0IG52bWV0X3N1YnN5c19saW5rICpwO1xuJiM0MztcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzO1xuIFxuIFx0aWYgKCFwb3J0KVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiYjNDM7XHRkaXNjX3N1YnN5cyA9IG52bWV0X2dldF9kaXNjX3N1YnN5cyhwb3J0LVx1MDAzZW5ldF9ucyk7XG4mIzQzO1x0aWYgKCFkaXNjX3N1YnN5cylcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiBcdGlmICghc3RyY21wKE5WTUVfRElTQ19TVUJTWVNfTkFNRSwgc3Vic3lzbnFuKSkge1xuLVx0XHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVx1MDAzZXJlZikpXG4mIzQzO1x0XHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNmRpc2Nfc3Vic3lzLVx1MDAzZXJlZikpXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4tXHRcdHJldHVybiBudm1ldF9kaXNjX3N1YnN5cztcbiYjNDM7XHRcdHJldHVybiBkaXNjX3N1YnN5cztcbiBcdH1cbiBcbiBcdGRvd25fcmVhZChcdTAwMjZudm1ldF9jb25maWdfc2VtKTtcbi1cdGlmICghc3RybmNtcChudm1ldF9kaXNjX3N1YnN5cy1cdTAwM2VzdWJzeXNucW4sIHN1YnN5c25xbixcbiYjNDM7XHRpZiAoIXN0cm5jbXAoZGlzY19zdWJzeXMtXHUwMDNlc3Vic3lzbnFuLCBzdWJzeXNucW4sXG4gXHRcdFx0XHROVk1GX05RTl9TSVpFKSkge1xuLVx0XHRpZiAoa3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2bnZtZXRfZGlzY19zdWJzeXMtXHUwMDNlcmVmKSkge1xuJiM0MztcdFx0aWYgKGtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNmRpc2Nfc3Vic3lzLVx1MDAzZXJlZikpIHtcbiBcdFx0XHR1cF9yZWFkKFx1MDAyNm52bWV0X2NvbmZpZ19zZW0pO1xuLVx0XHRcdHJldHVybiBudm1ldF9kaXNjX3N1YnN5cztcbiYjNDM7XHRcdFx0cmV0dXJuIGRpc2Nfc3Vic3lzO1xuIFx0XHR9XG4gXHR9XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIFx1MDAyNnBvcnQtXHUwMDNlc3Vic3lzdGVtcywgZW50cnkpIHtcbkBAIC0xODMwLDcgJiM0MzsxODM1LDcgQEAgc3RhdGljIHN0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X2ZpbmRfZ2V0X3N1YnN5cyhzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCxcbiB9XG4gXG4gc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfc3Vic3lzX2FsbG9jKGNvbnN0IGNoYXIgKnN1YnN5c25xbixcbi1cdFx0ZW51bSBudm1lX3N1YnN5c190eXBlIHR5cGUpXG4mIzQzO1x0XHRlbnVtIG52bWVfc3Vic3lzX3R5cGUgdHlwZSwgc3RydWN0IG5ldCAqbmV0X25zKVxuIHtcbiBcdHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cztcbiBcdGNoYXIgc2VyaWFsW05WTUVUX1NOX01BWF9TSVpFIC8gMl07XG5AQCAtMTg4OCwxMCAmIzQzOzE4OTMsMTIgQEAgc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfc3Vic3lzX2FsbG9jKGNvbnN0IGNoYXIgKnN1YnN5c25xbixcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnN1YnN5cy1cdTAwM2VjdHJscyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzdWJzeXMtXHUwMDNlaG9zdHMpO1xuIFxuLVx0cmV0ID0gbnZtZXRfZGVidWdmc19zdWJzeXNfc2V0dXAoc3Vic3lzKTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gZnJlZV9zdWJzeXNucW47XG4tXG4mIzQzO1x0LyogRGlzYWJsZSBkZWJ1Z2ZzIGZvciBub24taW5pdGlhbCBuYW1lc3BhY2VzICovXG4mIzQzO1x0aWYgKG5ldF9ucyA9PSBcdTAwMjZpbml0X25ldCkge1xuJiM0MztcdFx0cmV0ID0gbnZtZXRfZGVidWdmc19zdWJzeXNfc2V0dXAoc3Vic3lzKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gZnJlZV9zdWJzeXNucW47XG4mIzQzO1x0fVxuIFx0cmV0dXJuIHN1YnN5cztcbiBcbiBmcmVlX3N1YnN5c25xbjpcbkBAIC0xOTc2LDE4ICYjNDM7MTk4MywxMiBAQCBzdGF0aWMgaW50IF9faW5pdCBudm1ldF9pbml0KHZvaWQpXG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gb3V0X2ZyZWVfbnZtZXRfYWVuX3dvcmtfcXVldWU7XG4gXG4tXHRlcnJvciA9IG52bWV0X2luaXRfZGlzY292ZXJ5KCk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGdvdG8gb3V0X2V4aXRfZGVidWdmcztcbi1cbiBcdGVycm9yID0gbnZtZXRfaW5pdF9jb25maWdmcygpO1xuIFx0aWYgKGVycm9yKVxuLVx0XHRnb3RvIG91dF9leGl0X2Rpc2NvdmVyeTtcbiYjNDM7XHRcdGdvdG8gb3V0X2V4aXRfZGVidWdmcztcbiBcbiBcdHJldHVybiAwO1xuIFxuLW91dF9leGl0X2Rpc2NvdmVyeTpcbi1cdG52bWV0X2V4aXRfZGlzY292ZXJ5KCk7XG4gb3V0X2V4aXRfZGVidWdmczpcbiBcdG52bWV0X2V4aXRfZGVidWdmcygpO1xuIG91dF9mcmVlX252bWV0X2Flbl93b3JrX3F1ZXVlOlxuQEAgLTIwMDYsNyAmIzQzOzIwMDcsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBudm1ldF9pbml0KHZvaWQpXG4gc3RhdGljIHZvaWQgX19leGl0IG52bWV0X2V4aXQodm9pZClcbiB7XG4gXHRudm1ldF9leGl0X2NvbmZpZ2ZzKCk7XG4tXHRudm1ldF9leGl0X2Rpc2NvdmVyeSgpO1xuIFx0bnZtZXRfZXhpdF9kZWJ1Z2ZzKCk7XG4gXHRpZGFfZGVzdHJveShcdTAwMjZjbnRsaWRfaWRhKTtcbiBcdGRlc3Ryb3lfd29ya3F1ZXVlKG52bWV0X2Flbl93cSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC9kaXNjb3ZlcnkuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvZGlzY292ZXJ5LmNcbmluZGV4IDExNDg2OWQxNmExZjNjLi5iNDk4NGZjNjViYTc4NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvZGlzY292ZXJ5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvZGlzY292ZXJ5LmNcbkBAIC04LDkgJiM0Mzs4LDQ0IEBAXG4gI2luY2x1ZGUgXHUwMDNjZ2VuZXJhdGVkL3V0c3JlbGVhc2UuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O252bWV0LmhcJiMzNDtcbiBcbi1zdHJ1Y3QgbnZtZXRfc3Vic3lzICpudm1ldF9kaXNjX3N1YnN5cztcbiYjNDM7c3RhdGljIERFRklORV9YQVJSQVkobnZtZXRfZGlzY194YSk7XG4gXG4tc3RhdGljIHU2NCBudm1ldF9nZW5jdHI7XG4mIzQzO3N0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X2dldF9kaXNjX3N1YnN5cyhzdHJ1Y3QgbmV0ICpuZXRfbnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXM7XG4mIzQzO1x0dTY0IG5zX2lkID0gbnZtZXRfZ2V0X25zX2lkKG5ldF9ucyk7XG4mIzQzO1xuJiM0MztcdHN1YnN5cyA9IHhhX2xvYWQoXHUwMDI2bnZtZXRfZGlzY194YSwgbnNfaWQpO1xuJiM0MztcdHJldHVybiBzdWJzeXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBudm1ldF9hZGRfZGlzY19zdWJzeXMoc3RydWN0IG5ldCAqbmV0X25zKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG52bWV0X3N1YnN5cyAqZGlzY19zdWJzeXM7XG4mIzQzO1x0dTY0IG5zX2lkID0gbnZtZXRfZ2V0X25zX2lkKG5ldF9ucyk7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZGlzY19zdWJzeXMgPSBudm1ldF9zdWJzeXNfYWxsb2MoTlZNRV9ESVNDX1NVQlNZU19OQU1FLFxuJiM0MztcdFx0XHRcdFx0IE5WTUVfTlFOX0NVUlIsIG5ldF9ucyk7XG4mIzQzO1x0aWYgKElTX0VSUihkaXNjX3N1YnN5cykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihkaXNjX3N1YnN5cyk7XG4mIzQzO1x0ZXJyID0geGFfaW5zZXJ0KFx1MDAyNm52bWV0X2Rpc2NfeGEsIG5zX2lkLFxuJiM0MztcdFx0XHRkaXNjX3N1YnN5cywgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdG52bWV0X3N1YnN5c19wdXQoZGlzY19zdWJzeXMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG52bWV0X2RlbF9kaXNjX3N1YnN5cyhzdHJ1Y3QgbmV0ICpuZXRfbnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpkaXNjX3N1YnN5cztcbiYjNDM7XHR1NjQgbnNfaWQgPSBudm1ldF9nZXRfbnNfaWQobmV0X25zKTtcbiYjNDM7XG4mIzQzO1x0ZGlzY19zdWJzeXMgPSB4YV9lcmFzZShcdTAwMjZudm1ldF9kaXNjX3hhLCBuc19pZCk7XG4mIzQzO1x0aWYgKGRpc2Nfc3Vic3lzKVxuJiM0MztcdFx0bnZtZXRfc3Vic3lzX3B1dChkaXNjX3N1YnN5cyk7XG4mIzQzO31cbiBcbiBzdGF0aWMgdm9pZCBfX252bWV0X2Rpc2NfY2hhbmdlZChzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCxcbiBcdFx0XHRcdCBzdHJ1Y3QgbnZtZXRfY3RybCAqY3RybClcbkBAIC0yOSwxOCAmIzQzOzY0LDIyIEBAIHZvaWQgbnZtZXRfcG9ydF9kaXNjX2NoYW5nZWQoc3RydWN0IG52bWV0X3BvcnQgKnBvcnQsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMpXG4ge1xuIFx0c3RydWN0IG52bWV0X2N0cmwgKmN0cmw7XG4mIzQzO1x0c3RydWN0IG52bWV0X3N1YnN5cyAqZGlzY19zdWJzeXM7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm52bWV0X2NvbmZpZ19zZW0pO1xuLVx0bnZtZXRfZ2VuY3RyJiM0MzsmIzQzOztcbiYjNDM7XHRkaXNjX3N1YnN5cyA9IG52bWV0X2dldF9kaXNjX3N1YnN5cyhwb3J0LVx1MDAzZW5ldF9ucyk7XG4mIzQzO1x0aWYgKFdBUk5fT04oIWRpc2Nfc3Vic3lzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRkaXNjX3N1YnN5cy1cdTAwM2VnZW5jdHImIzQzOyYjNDM7O1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZudm1ldF9kaXNjX3N1YnN5cy1cdTAwM2Vsb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoY3RybCwgXHUwMDI2bnZtZXRfZGlzY19zdWJzeXMtXHUwMDNlY3RybHMsIHN1YnN5c19lbnRyeSkge1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2ZGlzY19zdWJzeXMtXHUwMDNlbG9jayk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShjdHJsLCBcdTAwMjZkaXNjX3N1YnN5cy1cdTAwM2VjdHJscywgc3Vic3lzX2VudHJ5KSB7XG4gXHRcdGlmIChzdWJzeXMgXHUwMDI2XHUwMDI2ICFudm1ldF9ob3N0X2FsbG93ZWQoc3Vic3lzLCBjdHJsLVx1MDAzZWhvc3RucW4pKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRfX252bWV0X2Rpc2NfY2hhbmdlZChwb3J0LCBjdHJsKTtcbiBcdH1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZudm1ldF9kaXNjX3N1YnN5cy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2ZGlzY19zdWJzeXMtXHUwMDNlbG9jayk7XG4gXG4gXHQvKiBJZiB0cmFuc3BvcnQgY2FuIHNpZ25hbCBjaGFuZ2UsIG5vdGlmeSB0cmFuc3BvcnQgKi9cbiBcdGlmIChwb3J0LVx1MDAzZXRyX29wcyBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0cl9vcHMtXHUwMDNlZGlzY292ZXJ5X2NoZylcbkBAIC01MiwxNSAmIzQzOzkxLDE5IEBAIHN0YXRpYyB2b2lkIF9fbnZtZXRfc3Vic3lzX2Rpc2NfY2hhbmdlZChzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCxcbiBcdFx0XHRcdFx0c3RydWN0IG52bWV0X2hvc3QgKmhvc3QpXG4ge1xuIFx0c3RydWN0IG52bWV0X2N0cmwgKmN0cmw7XG4mIzQzO1x0c3RydWN0IG52bWV0X3N1YnN5cyAqZGlzY19zdWJzeXM7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVx1MDAzZWxvY2spO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShjdHJsLCBcdTAwMjZudm1ldF9kaXNjX3N1YnN5cy1cdTAwM2VjdHJscywgc3Vic3lzX2VudHJ5KSB7XG4mIzQzO1x0ZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMocG9ydC1cdTAwM2VuZXRfbnMpO1xuJiM0MztcdGlmIChXQVJOX09OKCFkaXNjX3N1YnN5cykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZkaXNjX3N1YnN5cy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsIFx1MDAyNmRpc2Nfc3Vic3lzLVx1MDAzZWN0cmxzLCBzdWJzeXNfZW50cnkpIHtcbiBcdFx0aWYgKGhvc3QgXHUwMDI2XHUwMDI2IHN0cmNtcChudm1ldF9ob3N0X25hbWUoaG9zdCksIGN0cmwtXHUwMDNlaG9zdG5xbikpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdF9fbnZtZXRfZGlzY19jaGFuZ2VkKHBvcnQsIGN0cmwpO1xuIFx0fVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVx1MDAzZWxvY2spO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZkaXNjX3N1YnN5cy1cdTAwM2Vsb2NrKTtcbiB9XG4gXG4gdm9pZCBudm1ldF9zdWJzeXNfZGlzY19jaGFuZ2VkKHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cyxcbkBAIC02OCwxMSAmIzQzOzExMSwxOCBAQCB2b2lkIG52bWV0X3N1YnN5c19kaXNjX2NoYW5nZWQoc3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzLFxuIHtcbiBcdHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0O1xuIFx0c3RydWN0IG52bWV0X3N1YnN5c19saW5rICpzO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgKnBvcnRfbGlzdDtcbiYjNDM7XHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpkaXNjX3N1YnN5cztcbiYjNDM7XHRzdHJ1Y3QgbmV0ICpuZXRfbnMgPSBjb25maWdmc19uc19mcm9tX2dyb3VwKFx1MDAyNnN1YnN5cy1cdTAwM2Vncm91cCk7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm52bWV0X2NvbmZpZ19zZW0pO1xuLVx0bnZtZXRfZ2VuY3RyJiM0MzsmIzQzOztcbiYjNDM7XHRkaXNjX3N1YnN5cyA9IG52bWV0X2dldF9kaXNjX3N1YnN5cyhuZXRfbnMpO1xuJiM0MztcdGlmIChXQVJOX09OKCFkaXNjX3N1YnN5cykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0ZGlzY19zdWJzeXMtXHUwMDNlZ2VuY3RyJiM0MzsmIzQzOztcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgbnZtZXRfcG9ydHMsIGdsb2JhbF9lbnRyeSlcbiYjNDM7XHRwb3J0X2xpc3QgPSBudm1ldF9nZXRfcG9ydF9saXN0KG5ldF9ucyk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBwb3J0X2xpc3QsIGdsb2JhbF9lbnRyeSlcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzLCBcdTAwMjZwb3J0LVx1MDAzZXN1YnN5c3RlbXMsIGVudHJ5KSB7XG4gXHRcdFx0aWYgKHMtXHUwMDNlc3Vic3lzICE9IHN1YnN5cylcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTE3Myw2ICYjNDM7MjIzLDcgQEAgc3RhdGljIHZvaWQgbnZtZXRfZXhlY3V0ZV9kaXNjX2dldF9sb2dfcGFnZShzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXG4gXHR1MTYgc3RhdHVzID0gMDtcbiBcdHZvaWQgKmJ1ZmZlcjtcbiBcdGNoYXIgdHJhZGRyW05WTUZfVFJBRERSX1NJWkVdO1xuJiM0MztcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzO1xuIFxuIFx0aWYgKCFudm1ldF9jaGVja190cmFuc2Zlcl9sZW4ocmVxLCBkYXRhX2xlbikpXG4gXHRcdHJldHVybjtcbkBAIC0yMDcsMTAgJiM0MzsyNTgsMTIgQEAgc3RhdGljIHZvaWQgbnZtZXRfZXhlY3V0ZV9kaXNjX2dldF9sb2dfcGFnZShzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXG4gXHR9XG4gXHRoZHIgPSBidWZmZXI7XG4gXG4mIzQzO1x0ZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMocmVxLVx1MDAzZXBvcnQtXHUwMDNlbmV0X25zKTtcbiYjNDM7XG4gXHRudm1ldF9zZXRfZGlzY190cmFkZHIocmVxLCByZXEtXHUwMDNlcG9ydCwgdHJhZGRyKTtcbiBcbiBcdG52bWV0X2Zvcm1hdF9kaXNjb3ZlcnlfZW50cnkoaGRyLCByZXEtXHUwMDNlcG9ydCxcbi1cdFx0XHRcdCAgICAgbnZtZXRfZGlzY19zdWJzeXMtXHUwMDNlc3Vic3lzbnFuLFxuJiM0MztcdFx0XHRcdCAgICAgZGlzY19zdWJzeXMtXHUwMDNlc3Vic3lzbnFuLFxuIFx0XHRcdFx0ICAgICB0cmFkZHIsIE5WTUVfTlFOX0NVUlIsIG51bXJlYyk7XG4gXHRudW1yZWMmIzQzOyYjNDM7O1xuIFxuQEAgLTIzNSw3ICYjNDM7Mjg4LDcgQEAgc3RhdGljIHZvaWQgbnZtZXRfZXhlY3V0ZV9kaXNjX2dldF9sb2dfcGFnZShzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXG4gXHRcdG51bXJlYyYjNDM7JiM0Mzs7XG4gXHR9XG4gXG4tXHRoZHItXHUwMDNlZ2VuY3RyID0gY3B1X3RvX2xlNjQobnZtZXRfZ2VuY3RyKTtcbiYjNDM7XHRoZHItXHUwMDNlZ2VuY3RyID0gY3B1X3RvX2xlNjQoZGlzY19zdWJzeXMtXHUwMDNlZ2VuY3RyKTtcbiBcdGhkci1cdTAwM2VudW1yZWMgPSBjcHVfdG9fbGU2NChudW1yZWMpO1xuIFx0aGRyLVx1MDAzZXJlY2ZtdCA9IGNwdV90b19sZTE2KDApO1xuIFxuQEAgLTQyOCwxNSAmIzQzOzQ4MSwzIEBAIHUxNiBudm1ldF9wYXJzZV9kaXNjb3ZlcnlfY21kKHN0cnVjdCBudm1ldF9yZXEgKnJlcSlcbiBcdH1cbiBcbiB9XG4tXG4taW50IF9faW5pdCBudm1ldF9pbml0X2Rpc2NvdmVyeSh2b2lkKVxuLXtcbi1cdG52bWV0X2Rpc2Nfc3Vic3lzID1cbi1cdFx0bnZtZXRfc3Vic3lzX2FsbG9jKE5WTUVfRElTQ19TVUJTWVNfTkFNRSwgTlZNRV9OUU5fQ1VSUik7XG4tXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKG52bWV0X2Rpc2Nfc3Vic3lzKTtcbi19XG4tXG4tdm9pZCBudm1ldF9leGl0X2Rpc2NvdmVyeSh2b2lkKVxuLXtcbi1cdG52bWV0X3N1YnN5c19wdXQobnZtZXRfZGlzY19zdWJzeXMpO1xuLX1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jXG5pbmRleCBmY2IxZjgxODZmZGQwZC4uMGVkZDY5MDkwMmNlNGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmNcbkBAIC05LDYgJiM0Mzs5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhcnNlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25zcHJveHkuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O252bWV0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9ob3N0L252bWUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2hvc3QvZmFicmljcy5oXCYjMzQ7XG5AQCAtNTM4LDYgJiM0Mzs1MzksOSBAQCBzdGF0aWMgc3RydWN0IG52bWV0X3BvcnQgKm52bWVfbG9vcF9maW5kX3BvcnQoc3RydWN0IG52bWVfY3RybCAqY3RybClcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2bnZtZV9sb29wX3BvcnRzX211dGV4KTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgXHUwMDI2bnZtZV9sb29wX3BvcnRzLCBlbnRyeSkge1xuJiM0MztcdFx0LyogU2tpcCBwb3J0cyBmcm9tIG5vbi1tYXRjaGluZyBuYW1lc3BhY2VzICovXG4mIzQzO1x0XHRpZiAocC1cdTAwM2VuZXRfbnMgIT0gY3VycmVudC1cdTAwM2Vuc3Byb3h5LVx1MDAzZW5ldF9ucylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdC8qIGlmIG5vIHRyYW5zcG9ydCBhZGRyZXNzIGlzIHNwZWNpZmllZCB1c2UgdGhlIGZpcnN0IHBvcnQgKi9cbiBcdFx0aWYgKChjdHJsLVx1MDAzZW9wdHMtXHUwMDNlbWFzayBcdTAwMjYgTlZNRl9PUFRfVFJBRERSKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHN0cmNtcChjdHJsLVx1MDAzZW9wdHMtXHUwMDNldHJhZGRyLCBwLVx1MDAzZWRpc2NfYWRkci50cmFkZHIpKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaCBiL2RyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaFxuaW5kZXggMzMwNWE4ODY4NGVjYWIuLjY4MWY5MzVkODAwODZiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmhcbkBAIC0yMTAsNiAmIzQzOzIxMCw3IEBAIHN0cnVjdCBudm1ldF9wb3J0IHtcbiBcdHN0cnVjdCBudm1ldF9hbmFfZ3JvdXBcdFx0YW5hX2RlZmF1bHRfZ3JvdXA7XG4gXHRlbnVtIG52bWVfYW5hX3N0YXRlXHRcdCphbmFfc3RhdGU7XG4gXHRzdHJ1Y3Qga2V5XHRcdFx0KmtleXJpbmc7XG4mIzQzO1x0c3RydWN0IG5ldFx0XHRcdCpuZXRfbnM7XG4gXHR2b2lkXHRcdFx0XHQqcHJpdjtcbiBcdGJvb2xcdFx0XHRcdGVuYWJsZWQ7XG4gXHRpbnRcdFx0XHRcdGlubGluZV9kYXRhX3NpemU7XG5AQCAtMzI1LDYgJiM0MzszMjYsOSBAQCBzdHJ1Y3QgbnZtZXRfc3Vic3lzIHtcbiBcdHUxNlx0XHRcdGNudGxpZF9taW47XG4gXHR1MTZcdFx0XHRjbnRsaWRfbWF4O1xuIFxuJiM0MztcdC8qIEZvciBkaXNjb3Zlcnkgc3Vic3lzdGVtcyAqL1xuJiM0MztcdHU2NCBnZW5jdHI7XG4mIzQzO1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0Y3RybHM7XG4gXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRob3N0cztcbkBAIC02MjYsNyAmIzQzOzYzMCw3IEBAIHNzaXplX3QgbnZtZXRfY3RybF9ob3N0X3RyYWRkcihzdHJ1Y3QgbnZtZXRfY3RybCAqY3RybCxcbiBcdFx0Y2hhciAqdHJhZGRyLCBzaXplX3QgdHJhZGRyX2xlbik7XG4gXG4gc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfc3Vic3lzX2FsbG9jKGNvbnN0IGNoYXIgKnN1YnN5c25xbixcbi1cdFx0ZW51bSBudm1lX3N1YnN5c190eXBlIHR5cGUpO1xuJiM0MztcdFx0ZW51bSBudm1lX3N1YnN5c190eXBlIHR5cGUsIHN0cnVjdCBuZXQgKm5ldF9ucyk7XG4gdm9pZCBudm1ldF9zdWJzeXNfcHV0KHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cyk7XG4gdm9pZCBudm1ldF9zdWJzeXNfZGVsX2N0cmxzKHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cyk7XG4gXG5AQCAtNjYyLDcgJiM0Mzs2NjYsNiBAQCB1MTYgbnZtZXRfemVyb19zZ2woc3RydWN0IG52bWV0X3JlcSAqcmVxLCBvZmZfdCBvZmYsIHNpemVfdCBsZW4pO1xuIHUzMiBudm1ldF9nZXRfbG9nX3BhZ2VfbGVuKHN0cnVjdCBudm1lX2NvbW1hbmQgKmNtZCk7XG4gdTY0IG52bWV0X2dldF9sb2dfcGFnZV9vZmZzZXQoc3RydWN0IG52bWVfY29tbWFuZCAqY21kKTtcbiBcbi1leHRlcm4gc3RydWN0IGxpc3RfaGVhZCAqbnZtZXRfcG9ydHM7XG4gdm9pZCBudm1ldF9wb3J0X2Rpc2NfY2hhbmdlZChzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCxcbiBcdFx0c3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzKTtcbiB2b2lkIG52bWV0X3N1YnN5c19kaXNjX2NoYW5nZWQoc3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzLFxuQEAgLTY5NiwxMSAmIzQzOzY5OSwxMyBAQCB2b2lkIG52bWV0X2FkZF9hc3luY19ldmVudChzdHJ1Y3QgbnZtZXRfY3RybCAqY3RybCwgdTggZXZlbnRfdHlwZSxcbiBcbiBpbnQgX19pbml0IG52bWV0X2luaXRfY29uZmlnZnModm9pZCk7XG4gdm9pZCBfX2V4aXQgbnZtZXRfZXhpdF9jb25maWdmcyh2b2lkKTtcbiYjNDM7ZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgKm52bWV0X2dldF9wb3J0X2xpc3Qoc3RydWN0IG5ldCAqbmV0X25zKTtcbiBcbi1pbnQgX19pbml0IG52bWV0X2luaXRfZGlzY292ZXJ5KHZvaWQpO1xuLXZvaWQgbnZtZXRfZXhpdF9kaXNjb3Zlcnkodm9pZCk7XG4mIzQzO2V4dGVybiB1NjQgbnZtZXRfZ2V0X25zX2lkKHN0cnVjdCBuZXQgKm5ldF9ucyk7XG4mIzQzO2V4dGVybiBpbnQgbnZtZXRfYWRkX2Rpc2Nfc3Vic3lzKHN0cnVjdCBuZXQgKm5ldF9ucyk7XG4mIzQzO2V4dGVybiB2b2lkIG52bWV0X2RlbF9kaXNjX3N1YnN5cyhzdHJ1Y3QgbmV0ICpuZXRfbnMpO1xuJiM0MztleHRlcm4gc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzKHN0cnVjdCBuZXQgKm5ldF9ucyk7XG4gXG4tZXh0ZXJuIHN0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X2Rpc2Nfc3Vic3lzO1xuIGV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIG52bWV0X2NvbmZpZ19zZW07XG4gXG4gZXh0ZXJuIHUzMiBudm1ldF9hbmFfZ3JvdXBfZW5hYmxlZFtOVk1FVF9NQVhfQU5BR1JQUyAmIzQzOyAxXTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvcmRtYS5jXG5pbmRleCBhYzI2ZjRmNzc0YzRkZS4uY2FkMjM5MWE2ZDBhNzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL3RhcmdldC9yZG1hLmNcbkBAIC0xODcwLDggJiM0MzsxODcwLDggQEAgc3RhdGljIGludCBudm1ldF9yZG1hX2VuYWJsZV9wb3J0KHN0cnVjdCBudm1ldF9yZG1hX3BvcnQgKnBvcnQpXG4gXHRzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQ7XG4gXHRpbnQgcmV0O1xuIFxuLVx0Y21faWQgPSByZG1hX2NyZWF0ZV9pZChcdTAwMjZpbml0X25ldCwgbnZtZXRfcmRtYV9jbV9oYW5kbGVyLCBwb3J0LFxuLVx0XHRcdFJETUFfUFNfVENQLCBJQl9RUFRfUkMpO1xuJiM0MztcdGNtX2lkID0gcmRtYV9jcmVhdGVfaWQocG9ydC1cdTAwM2VucG9ydC1cdTAwM2VuZXRfbnMsIG52bWV0X3JkbWFfY21faGFuZGxlcixcbiYjNDM7XHRcdFx0cG9ydCwgUkRNQV9QU19UQ1AsIElCX1FQVF9SQyk7XG4gXHRpZiAoSVNfRVJSKGNtX2lkKSkge1xuIFx0XHRwcl9lcnIoXCYjMzQ7Q00gSUQgY3JlYXRpb24gZmFpbGVkXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIFBUUl9FUlIoY21faWQpO1xuQEAgLTE5NjQsNyAmIzQzOzE5NjQsNyBAQCBzdGF0aWMgaW50IG52bWV0X3JkbWFfYWRkX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKm5wb3J0KVxuIFx0XHRucG9ydC1cdTAwM2VtYXhfcXVldWVfc2l6ZSA9IE5WTUVfUkRNQV9NQVhfUVVFVUVfU0laRTtcbiBcdH1cbiBcbi1cdHJldCA9IGluZXRfcHRvbl93aXRoX3Njb3BlKFx1MDAyNmluaXRfbmV0LCBhZiwgbnBvcnQtXHUwMDNlZGlzY19hZGRyLnRyYWRkcixcbiYjNDM7XHRyZXQgPSBpbmV0X3B0b25fd2l0aF9zY29wZShucG9ydC1cdTAwM2VuZXRfbnMsIGFmLCBucG9ydC1cdTAwM2VkaXNjX2FkZHIudHJhZGRyLFxuIFx0XHRcdG5wb3J0LVx1MDAzZWRpc2NfYWRkci50cnN2Y2lkLCBcdTAwMjZwb3J0LVx1MDAzZWFkZHIpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRwcl9lcnIoXCYjMzQ7bWFsZm9ybWVkIGlwL3BvcnQgcGFzc2VkOiAlczolc1xcblwmIzM0OyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jIGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xuaW5kZXggMTVjNTJmMWY5NWYxYjAuLjAxNmJlZjY1YTc2ZGQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xuQEAgLTIwNzQsNyAmIzQzOzIwNzQsNyBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpXG4gXHRcdGdvdG8gZXJyX3BvcnQ7XG4gXHR9XG4gXG4tXHRyZXQgPSBpbmV0X3B0b25fd2l0aF9zY29wZShcdTAwMjZpbml0X25ldCwgYWYsIG5wb3J0LVx1MDAzZWRpc2NfYWRkci50cmFkZHIsXG4mIzQzO1x0cmV0ID0gaW5ldF9wdG9uX3dpdGhfc2NvcGUobnBvcnQtXHUwMDNlbmV0X25zLCBhZiwgbnBvcnQtXHUwMDNlZGlzY19hZGRyLnRyYWRkcixcbiBcdFx0XHRucG9ydC1cdTAwM2VkaXNjX2FkZHIudHJzdmNpZCwgXHUwMDI2cG9ydC1cdTAwM2VhZGRyKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O21hbGZvcm1lZCBpcC9wb3J0IHBhc3NlZDogJXM6JXNcXG5cJiMzNDssXG5AQCAtMjA4Nyw4ICYjNDM7MjA4Nyw4IEBAIHN0YXRpYyBpbnQgbnZtZXRfdGNwX2FkZF9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpucG9ydClcbiBcdGlmIChwb3J0LVx1MDAzZW5wb3J0LVx1MDAzZWlubGluZV9kYXRhX3NpemUgXHUwMDNjIDApXG4gXHRcdHBvcnQtXHUwMDNlbnBvcnQtXHUwMDNlaW5saW5lX2RhdGFfc2l6ZSA9IE5WTUVUX1RDUF9ERUZfSU5MSU5FX0RBVEFfU0laRTtcbiBcbi1cdHJldCA9IHNvY2tfY3JlYXRlKHBvcnQtXHUwMDNlYWRkci5zc19mYW1pbHksIFNPQ0tfU1RSRUFNLFxuLVx0XHRcdFx0SVBQUk9UT19UQ1AsIFx1MDAyNnBvcnQtXHUwMDNlc29jayk7XG4mIzQzO1x0cmV0ID0gc29ja19jcmVhdGVfa2VybihucG9ydC1cdTAwM2VuZXRfbnMsIHBvcnQtXHUwMDNlYWRkci5zc19mYW1pbHksIFNPQ0tfU1RSRUFNLFxuJiM0MztcdFx0XHQgICAgSVBQUk9UT19UQ1AsIFx1MDAyNnBvcnQtXHUwMDNlc29jayk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGEgc29ja2V0XFxuXCYjMzQ7KTtcbiBcdFx0Z290byBlcnJfcG9ydDtcbmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9jb25maWdmc19pbnRlcm5hbC5oIGIvZnMvY29uZmlnZnMvY29uZmlnZnNfaW50ZXJuYWwuaFxuaW5kZXggYWNkZWVhOGUyZDY5YWMuLjM1ZWRkYzI3NGI4ODc5IDEwMDY0NFxuLS0tIGEvZnMvY29uZmlnZnMvY29uZmlnZnNfaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvY29uZmlnZnMvY29uZmlnZnNfaW50ZXJuYWwuaFxuQEAgLTQ0LDYgJiM0Mzs0NCwxNyBAQCBzdHJ1Y3QgY29uZmlnZnNfZGlyZW50IHtcbiBcdHN0cnVjdCBjb25maWdmc19mcmFnbWVudCAqc19mcmFnO1xuIH07XG4gXG4mIzQzO3N0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvIHtcbiYjNDM7XHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50IHJvb3Q7XG4mIzQzO1x0c3RydWN0IGNvbmZpZ19ncm91cCBncm91cDtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIHN1YnN5c19saXN0O1xuJiM0MztcdHN0cnVjdCBtdXRleCBzdWJzeXNfbXV0ZXg7XG4mIzQzO1x0c3RydWN0IHZmc21vdW50ICptbnQ7XG4mIzQzO1x0aW50IG1udF9jb3VudDtcbiYjNDM7XHRzdHJ1Y3QgbmV0ICpuZXRfbnM7XG4mIzQzO1x0cmVmY291bnRfdCByZWY7XG4mIzQzO307XG4mIzQzO1xuICNkZWZpbmUgQ09ORklHRlNfUk9PVFx0XHQweDAwMDFcbiAjZGVmaW5lIENPTkZJR0ZTX0RJUlx0XHQweDAwMDJcbiAjZGVmaW5lIENPTkZJR0ZTX0lURU1fQVRUUlx0MHgwMDA0XG5AQCAtNjMsNyAmIzQzOzc0LDcgQEAgZXh0ZXJuIHNwaW5sb2NrX3QgY29uZmlnZnNfZGlyZW50X2xvY2s7XG4gXG4gZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpjb25maWdmc19kaXJfY2FjaGVwO1xuIFxuLWV4dGVybiBpbnQgY29uZmlnZnNfaXNfcm9vdChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pO1xuJiM0MztleHRlcm4gYm9vbCBjb25maWdmc19pc19yb290KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSk7XG4gXG4gZXh0ZXJuIHN0cnVjdCBpbm9kZSAqIGNvbmZpZ2ZzX25ld19pbm9kZSh1bW9kZV90IG1vZGUsIHN0cnVjdCBjb25maWdmc19kaXJlbnQgKiwgc3RydWN0IHN1cGVyX2Jsb2NrICopO1xuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmNvbmZpZ2ZzX2NyZWF0ZShzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QgbW9kZSk7XG5AQCAtNzksOCAmIzQzOzkwLDE0IEBAIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyICogY29uZmlnZnNfZ2V0X25hbWUoc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2QpO1xuIGV4dGVybiBpbnQgY29uZmlnZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmlhdHRyKTtcbiBcbi1leHRlcm4gc3RydWN0IGRlbnRyeSAqY29uZmlnZnNfcGluX2ZzKHZvaWQpO1xuLWV4dGVybiB2b2lkIGNvbmZpZ2ZzX3JlbGVhc2VfZnModm9pZCk7XG4mIzQzO2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICpjb25maWdmc19waW5fZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4mIzQzO2V4dGVybiB2b2lkIGNvbmZpZ2ZzX3JlbGVhc2VfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4mIzQzO2V4dGVybiBzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqY29uZmlnZnNfZ2V0X3N1cGVyX2luZm8oc3RydWN0IG5ldCAqbmV0X25zKTtcbiYjNDM7ZXh0ZXJuIHZvaWQgY29uZmlnZnNfcHV0X3N1cGVyX2luZm8oc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8pO1xuJiM0MztleHRlcm4gdm9pZCBjb25maWdmc19saW5rX3N1YnN5c3RlbXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvKTtcbiYjNDM7ZXh0ZXJuIHZvaWQgY29uZmlnZnNfdW5saW5rX3N1YnN5c3RlbXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8pO1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvbmZpZ2ZzX2Rpcl9vcGVyYXRpb25zO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvbmZpZ2ZzX2ZpbGVfb3BlcmF0aW9ucztcbmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9kaXIuYyBiL2ZzL2NvbmZpZ2ZzL2Rpci5jXG5pbmRleCAzYzg4ZjEzZjFjYTJlOS4uM2QzOWE2YzFhNDE2MzYgMTAwNjQ0XG4tLS0gYS9mcy9jb25maWdmcy9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvY29uZmlnZnMvZGlyLmNcbkBAIC0zNCwxNCAmIzQzOzM0LDYgQEBcbiAgKi9cbiBERUZJTkVfU1BJTkxPQ0soY29uZmlnZnNfZGlyZW50X2xvY2spO1xuIFxuLS8qXG4tICogQWxsIG9mIGxpbmtfb2JqL3VubGlua19vYmovbGlua19ncm91cC91bmxpbmtfZ3JvdXAgcmVxdWlyZSB0aGF0XG4tICogc3Vic3lzLVx1MDAzZXN1X211dGV4IGlzIGhlbGQuXG4tICogQnV0IHBhcmVudCBjb25maWdmc19zdWJzeXN0ZW0gaXMgTlVMTCB3aGVuIGNvbmZpZ19pdGVtIGlzIHJvb3QuXG4tICogVXNlIHRoaXMgbXV0ZXggd2hlbiBjb25maWdfaXRlbSBpcyByb290LlxuLSAqL1xuLXN0YXRpYyBERUZJTkVfTVVURVgoY29uZmlnZnNfc3Vic3lzdGVtX211dGV4KTtcbi1cbiBzdGF0aWMgdm9pZCBjb25maWdmc19kX2lwdXQoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSxcbiBcdFx0XHQgICAgc3RydWN0IGlub2RlICogaW5vZGUpXG4ge1xuQEAgLTExNTIsNyAmIzQzOzExNDQsNyBAQCBpbnQgY29uZmlnZnNfZGVwZW5kX2l0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzLFxuIFx0ICogUGluIHRoZSBjb25maWdmcyBmaWxlc3lzdGVtLiAgVGhpcyBtZWFucyB3ZSBjYW4gc2FmZWx5IGFjY2Vzc1xuIFx0ICogdGhlIHJvb3Qgb2YgdGhlIGNvbmZpZ2ZzIGZpbGVzeXN0ZW0uXG4gXHQgKi9cbi1cdHJvb3QgPSBjb25maWdmc19waW5fZnMoKTtcbiYjNDM7XHRyb290ID0gY29uZmlnZnNfcGluX2ZzKE5VTEwpO1xuIFx0aWYgKElTX0VSUihyb290KSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocm9vdCk7XG4gXG5AQCAtMTE3OSw3ICYjNDM7MTE3MSw3IEBAIGludCBjb25maWdmc19kZXBlbmRfaXRlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMsXG4gXHQgKiBJZiB3ZSBzdWNjZWVkZWQsIHRoZSBmcyBpcyBwaW5uZWQgdmlhIG90aGVyIG1ldGhvZHMuICBJZiBub3QsXG4gXHQgKiB3ZSYjMzk7cmUgZG9uZSB3aXRoIGl0IGFueXdheS4gIFNvIHJlbGVhc2VfZnMoKSBpcyBhbHdheXMgcmlnaHQuXG4gXHQgKi9cbi1cdGNvbmZpZ2ZzX3JlbGVhc2VfZnMoKTtcbiYjNDM7XHRjb25maWdmc19yZWxlYXNlX2ZzKE5VTEwpO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMTg2OSwzMiAmIzQzOzE4NjEsMjcgQEAgdm9pZCBjb25maWdmc191bnJlZ2lzdGVyX2RlZmF1bHRfZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXApXG4gfVxuIEVYUE9SVF9TWU1CT0woY29uZmlnZnNfdW5yZWdpc3Rlcl9kZWZhdWx0X2dyb3VwKTtcbiBcbi1pbnQgY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cylcbiYjNDM7c3RhdGljIGludCBjb25maWdmc19saW5rX3Jvb3Qoc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gICppbmZvLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKnJvb3QpXG4ge1xuLVx0aW50IGVycjtcbiBcdHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwID0gXHUwMDI2c3Vic3lzLVx1MDAzZXN1X2dyb3VwO1xuIFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xuLVx0c3RydWN0IGRlbnRyeSAqcm9vdDtcbiBcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xuIFx0c3RydWN0IGNvbmZpZ2ZzX2ZyYWdtZW50ICpmcmFnO1xuJiM0MztcdGludCBlcnI7XG4gXG4gXHRmcmFnID0gbmV3X2ZyYWdtZW50KCk7XG4gXHRpZiAoIWZyYWcpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0cm9vdCA9IGNvbmZpZ2ZzX3Bpbl9mcygpO1xuLVx0aWYgKElTX0VSUihyb290KSkge1xuLVx0XHRwdXRfZnJhZ21lbnQoZnJhZyk7XG4tXHRcdHJldHVybiBQVFJfRVJSKHJvb3QpO1xuLVx0fVxuLVxuIFx0aWYgKCFncm91cC1cdTAwM2VjZ19pdGVtLmNpX25hbWUpXG4gXHRcdGdyb3VwLVx1MDAzZWNnX2l0ZW0uY2lfbmFtZSA9IGdyb3VwLVx1MDAzZWNnX2l0ZW0uY2lfbmFtZWJ1ZjtcbiBcbiBcdHNkID0gcm9vdC1cdTAwM2VkX2ZzZGF0YTtcbi1cdG11dGV4X2xvY2soXHUwMDI2Y29uZmlnZnNfc3Vic3lzdGVtX211dGV4KTtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX211dGV4KTtcbiBcdGxpbmtfZ3JvdXAodG9fY29uZmlnX2dyb3VwKHNkLVx1MDAzZXNfZWxlbWVudCksIGdyb3VwKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZjb25maWdmc19zdWJzeXN0ZW1fbXV0ZXgpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZXN1YnN5c19tdXRleCk7XG4gXG4gXHRpbm9kZV9sb2NrX25lc3RlZChkX2lub2RlKHJvb3QpLCBJX01VVEVYX1BBUkVOVCk7XG4gXG5AQCAtMTkyMSwxNyAmIzQzOzE5MDgsMTIwIEBAIGludCBjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKVxuIFx0aW5vZGVfdW5sb2NrKGRfaW5vZGUocm9vdCkpO1xuIFxuIFx0aWYgKGVycikge1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N1YnN5c3RlbV9tdXRleCk7XG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX211dGV4KTtcbiBcdFx0dW5saW5rX2dyb3VwKGdyb3VwKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N1YnN5c3RlbV9tdXRleCk7XG4tXHRcdGNvbmZpZ2ZzX3JlbGVhc2VfZnMoKTtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZXN1YnN5c19tdXRleCk7XG4gXHR9XG4gXHRwdXRfZnJhZ21lbnQoZnJhZyk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuIFxuJiM0MztpbnQgY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvO1xuJiM0MztcdHN0cnVjdCBkZW50cnkgKnJvb3Q7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aW5mbyA9IGNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKFx1MDAyNmluaXRfbmV0KTtcbiYjNDM7XHRpZiAoV0FSTl9PTihJU19FUlIoaW5mbykpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoaW5mbyk7XG4mIzQzO1xuJiM0MztcdHJvb3QgPSBjb25maWdmc19waW5fZnMoTlVMTCk7XG4mIzQzO1x0aWYgKElTX0VSUihyb290KSkge1xuJiM0MztcdFx0ZXJyID0gUFRSX0VSUihyb290KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzdWJzeXMtXHUwMDNlZmlsbF9zdWJzeXN0ZW0pIHtcbiYjNDM7XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9saW5rKTtcbiYjNDM7XHRcdG11dGV4X2luaXQoXHUwMDI2c3Vic3lzLVx1MDAzZXN1X211dGV4KTtcbiYjNDM7XHRcdGNvbmZpZ19ncm91cF9pbml0KFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9ncm91cCk7XG4mIzQzO1x0XHRlcnIgPSBzdWJzeXMtXHUwMDNlZmlsbF9zdWJzeXN0ZW0oc3Vic3lzLCBpbmZvLVx1MDAzZW5ldF9ucyk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIG91dF9yZWxlYXNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gY29uZmlnZnNfbGlua19yb290KGluZm8sIHN1YnN5cywgcm9vdCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0aWYgKHN1YnN5cy1cdTAwM2VjbGVhcl9zdWJzeXN0ZW0pXG4mIzQzO1x0XHRcdHN1YnN5cy1cdTAwM2VjbGVhcl9zdWJzeXN0ZW0oc3Vic3lzLCBpbmZvLVx1MDAzZW5ldF9ucyk7XG4mIzQzO1x0XHRnb3RvIG91dF9yZWxlYXNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZpbmZvLVx1MDAzZXN1YnN5c19tdXRleCk7XG4mIzQzO1x0bGlzdF9hZGQoXHUwMDI2c3Vic3lzLVx1MDAzZXN1X2xpbmssIFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX2xpc3QpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZXN1YnN5c19tdXRleCk7XG4mIzQzO1xuJiM0MztvdXRfcmVsZWFzZTpcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Y29uZmlnZnNfcmVsZWFzZV9mcyhOVUxMKTtcbiYjNDM7b3V0X3B1dDpcbiYjNDM7XHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXZvaWQgY29uZmlnZnNfdW5yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKVxuJiM0Mzt2b2lkIGNvbmZpZ2ZzX2xpbmtfc3Vic3lzdGVtcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnM7XG4mIzQzO1x0c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKnBhcmVudCA9IGNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKFx1MDAyNmluaXRfbmV0KTtcbiYjNDM7XHRMSVNUX0hFQUQoc3Vic3lzX2xpc3QpO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTihJU19FUlIocGFyZW50KSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKChpbmZvLVx1MDAzZW5ldF9ucyA9PSBcdTAwMjZpbml0X25ldCkgfHwgV0FSTl9PTihwYXJlbnQgPT0gaW5mbykpIHtcbiYjNDM7XHRcdGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKHBhcmVudCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cGFyZW50LVx1MDAzZXN1YnN5c19tdXRleCk7XG4mIzQzO1x0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZwYXJlbnQtXHUwMDNlc3Vic3lzX2xpc3QsIFx1MDAyNnN1YnN5c19saXN0KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cGFyZW50LVx1MDAzZXN1YnN5c19tdXRleCk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShzLCBcdTAwMjZzdWJzeXNfbGlzdCwgc3VfbGluaykge1xuJiM0MztcdFx0c3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzO1xuJiM0MztcdFx0c3RydWN0IGRlbnRyeSAqcm9vdDtcbiYjNDM7XHRcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzLVx1MDAzZWZpbGxfc3Vic3lzdGVtKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHN1YnN5cyA9IGt6YWxsb2Nfb2JqKCpzdWJzeXMpO1xuJiM0MztcdFx0aWYgKCFzdWJzeXMpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0c3Vic3lzLVx1MDAzZWZpbGxfc3Vic3lzdGVtID0gcy1cdTAwM2VmaWxsX3N1YnN5c3RlbTtcbiYjNDM7XHRcdHN1YnN5cy1cdTAwM2VjbGVhcl9zdWJzeXN0ZW0gPSBzLVx1MDAzZWNsZWFyX3N1YnN5c3RlbTtcbiYjNDM7XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9saW5rKTtcbiYjNDM7XHRcdG11dGV4X2luaXQoXHUwMDI2c3Vic3lzLVx1MDAzZXN1X211dGV4KTtcbiYjNDM7XHRcdGNvbmZpZ19ncm91cF9pbml0KFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9ncm91cCk7XG4mIzQzO1x0XHRlcnIgPSBzdWJzeXMtXHUwMDNlZmlsbF9zdWJzeXN0ZW0oc3Vic3lzLCBpbmZvLVx1MDAzZW5ldF9ucyk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdGtmcmVlKHN1YnN5cyk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cm9vdCA9IGNvbmZpZ2ZzX3Bpbl9mcyhzYik7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKHJvb3QpKSB7XG4mIzQzO1x0XHRcdGlmIChzdWJzeXMtXHUwMDNlY2xlYXJfc3Vic3lzdGVtKVxuJiM0MztcdFx0XHRcdHN1YnN5cy1cdTAwM2VjbGVhcl9zdWJzeXN0ZW0oc3Vic3lzLCBpbmZvLVx1MDAzZW5ldF9ucyk7XG4mIzQzO1x0XHRcdGtmcmVlKHN1YnN5cyk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ZXJyID0gY29uZmlnZnNfbGlua19yb290KGluZm8sIHN1YnN5cywgcm9vdCk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdGNvbmZpZ2ZzX3JlbGVhc2VfZnMoc2IpO1xuJiM0MztcdFx0XHRpZiAoc3Vic3lzLVx1MDAzZWNsZWFyX3N1YnN5c3RlbSlcbiYjNDM7XHRcdFx0XHRzdWJzeXMtXHUwMDNlY2xlYXJfc3Vic3lzdGVtKHN1YnN5cywgaW5mby1cdTAwM2VuZXRfbnMpO1xuJiM0MztcdFx0XHRrZnJlZShzdWJzeXMpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2aW5mby1cdTAwM2VzdWJzeXNfbXV0ZXgpO1xuJiM0MztcdFx0bGlzdF9hZGQoXHUwMDI2c3Vic3lzLVx1MDAzZXN1X2xpbmssIFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX2xpc3QpO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX211dGV4KTtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwYXJlbnQtXHUwMDNlc3Vic3lzX211dGV4KTtcbiYjNDM7XHRsaXN0X3NwbGljZShcdTAwMjZzdWJzeXNfbGlzdCwgXHUwMDI2cGFyZW50LVx1MDAzZXN1YnN5c19saXN0KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cGFyZW50LVx1MDAzZXN1YnN5c19tdXRleCk7XG4mIzQzO1x0Y29uZmlnZnNfcHV0X3N1cGVyX2luZm8ocGFyZW50KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgY29uZmlnZnNfdW5saW5rX3Jvb3Qoc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKVxuIHtcbiBcdHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwID0gXHUwMDI2c3Vic3lzLVx1MDAzZXN1X2dyb3VwO1xuIFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZGdldChncm91cC1cdTAwM2VjZ19pdGVtLmNpX2RlbnRyeSk7XG5AQCAtMTk0MSw3ICYjNDM7MjAzMSw4IEBAIHZvaWQgY29uZmlnZnNfdW5yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKVxuIFxuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX3BhcmVudCAhPSByb290KSB7XG4gXHRcdHByX2VycihcJiMzNDtUcmllZCB0byB1bnJlZ2lzdGVyIG5vbi1zdWJzeXN0ZW0hXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuO1xuJiM0MztcdFx0ZHB1dChkZW50cnkpO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuIFx0ZG93bl93cml0ZShcdTAwMjZmcmFnLVx1MDAzZWZyYWdfc2VtKTtcbkBAIC0xOTY5LDExICYjNDM7MjA2MCw1MCBAQCB2b2lkIGNvbmZpZ2ZzX3VucmVnaXN0ZXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cylcbiBcdGlub2RlX3VubG9jayhkX2lub2RlKHJvb3QpKTtcbiBcbiBcdGRwdXQoZGVudHJ5KTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBjb25maWdmc191bmxpbmtfc3Vic3lzdGVtcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzLCAqcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZpbmZvLVx1MDAzZXN1YnN5c19tdXRleCk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN1YnN5cywgcywgXHUwMDI2aW5mby1cdTAwM2VzdWJzeXNfbGlzdCwgc3VfbGluaykge1xuJiM0MztcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZzdWJzeXMtXHUwMDNlc3VfbGluayk7XG4mIzQzO1x0XHRpZiAoIWNvbmZpZ2ZzX3VubGlua19yb290KHN1YnN5cykpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKHN1YnN5cy1cdTAwM2VjbGVhcl9zdWJzeXN0ZW0pXG4mIzQzO1x0XHRcdHN1YnN5cy1cdTAwM2VjbGVhcl9zdWJzeXN0ZW0oc3Vic3lzLCBpbmZvLVx1MDAzZW5ldF9ucyk7XG4mIzQzO1x0XHR1bmxpbmtfZ3JvdXAoXHUwMDI2c3Vic3lzLVx1MDAzZXN1X2dyb3VwKTtcbiYjNDM7XHRcdGNvbmZpZ2ZzX3JlbGVhc2VfZnMoc2IpO1xuJiM0MztcdFx0a2ZyZWUoc3Vic3lzKTtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX211dGV4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBjb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbztcbiYjNDM7XHRzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCA9IFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9ncm91cDtcbiYjNDM7XG4mIzQzO1x0aW5mbyA9IGNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKFx1MDAyNmluaXRfbmV0KTtcbiYjNDM7XHRpZiAoV0FSTl9PTihJU19FUlIoaW5mbykpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoIWNvbmZpZ2ZzX3VubGlua19yb290KHN1YnN5cykpIHtcbiYjNDM7XHRcdGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKGluZm8pO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2Y29uZmlnZnNfc3Vic3lzdGVtX211dGV4KTtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX211dGV4KTtcbiYjNDM7XHRsaXN0X2RlbF9pbml0KFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9saW5rKTtcbiYjNDM7XHRpZiAoc3Vic3lzLVx1MDAzZWNsZWFyX3N1YnN5c3RlbSlcbiYjNDM7XHRcdHN1YnN5cy1cdTAwM2VjbGVhcl9zdWJzeXN0ZW0oc3Vic3lzLCBpbmZvLVx1MDAzZW5ldF9ucyk7XG4gXHR1bmxpbmtfZ3JvdXAoZ3JvdXApO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N1YnN5c3RlbV9tdXRleCk7XG4tXHRjb25maWdmc19yZWxlYXNlX2ZzKCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX211dGV4KTtcbiYjNDM7XHRjb25maWdmc19yZWxlYXNlX2ZzKE5VTEwpO1xuJiM0MztcdGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKGluZm8pO1xuIH1cbiBcbiBFWFBPUlRfU1lNQk9MKGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbSk7XG5kaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvbW91bnQuYyBiL2ZzL2NvbmZpZ2ZzL21vdW50LmNcbmluZGV4IDQ5MjlmMzQzMTE4OTQ2Li43OTQxMjU3ZDU1OGI3MiAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL21vdW50LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NvbmZpZ2ZzL21vdW50LmNcbkBAIC0yMiwxMCAmIzQzOzIyLDE5IEBAXG4gLyogUmFuZG9tIG1hZ2ljIG51bWJlciAqL1xuICNkZWZpbmUgQ09ORklHRlNfTUFHSUMgMHg2MjY1NjU3MFxuIFxuLXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKmNvbmZpZ2ZzX21vdW50ID0gTlVMTDtcbiBzdHJ1Y3Qga21lbV9jYWNoZSAqY29uZmlnZnNfZGlyX2NhY2hlcDtcbi1zdGF0aWMgaW50IGNvbmZpZ2ZzX21udF9jb3VudCA9IDA7XG4mIzQzO3N0YXRpYyBERUZJTkVfWEFSUkFZKGNvbmZpZ2ZzX3N1cGVyX3hhKTtcbiYjNDM7c3RhdGljIHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICpjb25maWdmc19yb290O1xuJiM0MztzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNvbmZpZ2ZzX3Bpbl9sb2NrKTtcbiBcbiYjNDM7c3RhdGljIHU2NCBjb25maWdmc19uc19pZChzdHJ1Y3QgbmV0ICpuZXRfbnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbnNfY29tbW9uICpucyA9IG5ldF9ucyA/IHRvX25zX2NvbW1vbihuZXRfbnMpIDogTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFucyB8fCBuZXRfbnMgPT0gXHUwMDI2aW5pdF9uZXQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gbnMtXHUwMDNlbnNfaWQ7XG4mIzQzO31cbiBcbiBzdGF0aWMgdm9pZCBjb25maWdmc19mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuQEAgLTQwLDI4ICYjNDM7NDksODIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGNvbmZpZ2ZzX29wcyA9IHtcbiBcdC5mcmVlX2lub2RlXHQ9IGNvbmZpZ2ZzX2ZyZWVfaW5vZGUsXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCBjb25maWdmc19yb290X2dyb3VwID0ge1xuLVx0LmNnX2l0ZW0gPSB7XG4tXHRcdC5jaV9uYW1lYnVmXHQ9IFwmIzM0O3Jvb3RcJiMzNDssXG4tXHRcdC5jaV9uYW1lXHQ9IGNvbmZpZ2ZzX3Jvb3RfZ3JvdXAuY2dfaXRlbS5jaV9uYW1lYnVmLFxuLVx0fSxcbi19O1xuJiM0Mztib29sIGNvbmZpZ2ZzX2lzX3Jvb3Qoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XG4mIzQzO1xuJiM0MztcdGlmICghaXRlbS1cdTAwM2VjaV9kZW50cnkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0c2QgPSBpdGVtLVx1MDAzZWNpX2RlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbiYjNDM7XHRyZXR1cm4gISEoc2QtXHUwMDNlc190eXBlIFx1MDAyNiBDT05GSUdGU19ST09UKTtcbiYjNDM7fVxuIFxuLWludCBjb25maWdmc19pc19yb290KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbiYjNDM7c3RhdGljIHZvaWQgY29uZmlnZnNfZmlsbF9zdXBlcl9pbmZvKHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvKVxuIHtcbi1cdHJldHVybiBpdGVtID09IFx1MDAyNmNvbmZpZ2ZzX3Jvb3RfZ3JvdXAuY2dfaXRlbTtcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZpbmZvLVx1MDAzZXJvb3Quc19zaWJsaW5nKTtcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZpbmZvLVx1MDAzZXJvb3Quc19jaGlsZHJlbik7XG4mIzQzO1x0aW5mby1cdTAwM2Vyb290LnNfdHlwZSA9IENPTkZJR0ZTX1JPT1Q7XG4mIzQzO1x0aW5mby1cdTAwM2Vyb290LnNfZWxlbWVudCA9IFx1MDAyNmluZm8tXHUwMDNlZ3JvdXAuY2dfaXRlbTtcbiYjNDM7XHRzdHJzY3B5KGluZm8tXHUwMDNlZ3JvdXAuY2dfaXRlbS5jaV9uYW1lYnVmLCBcJiMzNDtyb290XCYjMzQ7LCA0KTtcbiYjNDM7XHRpbmZvLVx1MDAzZWdyb3VwLmNnX2l0ZW0uY2lfbmFtZSA9IGluZm8tXHUwMDNlZ3JvdXAuY2dfaXRlbS5jaV9uYW1lYnVmO1xuJiM0MztcdGNvbmZpZ19ncm91cF9pbml0KFx1MDAyNmluZm8tXHUwMDNlZ3JvdXApO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX2xpc3QpO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2aW5mby1cdTAwM2VzdWJzeXNfbXV0ZXgpO1xuJiM0MztcdHJlZmNvdW50X3NldChcdTAwMjZpbmZvLVx1MDAzZXJlZiwgMSk7XG4mIzQzO1x0aW5mby1cdTAwM2VtbnRfY291bnQgPSAwO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCBjb25maWdmc19yb290ID0ge1xuLVx0LnNfc2libGluZ1x0PSBMSVNUX0hFQURfSU5JVChjb25maWdmc19yb290LnNfc2libGluZyksXG4tXHQuc19jaGlsZHJlblx0PSBMSVNUX0hFQURfSU5JVChjb25maWdmc19yb290LnNfY2hpbGRyZW4pLFxuLVx0LnNfZWxlbWVudFx0PSBcdTAwMjZjb25maWdmc19yb290X2dyb3VwLmNnX2l0ZW0sXG4tXHQuc190eXBlXHRcdD0gQ09ORklHRlNfUk9PVCxcbi1cdC5zX2lhdHRyXHQ9IE5VTEwsXG4tfTtcbiYjNDM7c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKHN0cnVjdCBuZXQgKm5ldF9ucylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvO1xuJiM0MztcdHU2NCBuc19pZCA9IGNvbmZpZ2ZzX25zX2lkKG5ldF9ucyk7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0eGFfbG9jayhcdTAwMjZjb25maWdmc19zdXBlcl94YSk7XG4mIzQzO1x0aW5mbyA9IHhhX2xvYWQoXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEsIG5zX2lkKTtcbiYjNDM7XHRpZiAoaW5mbykge1xuJiM0MztcdFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oKFx1MDAyNmluZm8tXHUwMDNlcmVmKSkpXG4mIzQzO1x0XHRcdGluZm8gPSBFUlJfUFRSKC1FQlVTWSk7XG4mIzQzO1x0XHR4YV91bmxvY2soXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEpO1xuJiM0MztcdFx0cmV0dXJuIGluZm87XG4mIzQzO1x0fVxuJiM0MztcdGluZm8gPSBremFsbG9jX29iaigqaW5mbyk7XG4mIzQzO1x0aWYgKCFpbmZvKSB7XG4mIzQzO1x0XHR4YV91bmxvY2soXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEpO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpbmZvLVx1MDAzZW5ldF9ucyA9IGdldF9uZXQobmV0X25zKTtcbiYjNDM7XHRjb25maWdmc19maWxsX3N1cGVyX2luZm8oaW5mbyk7XG4mIzQzO1x0ZXJyID0gX194YV9pbnNlcnQoXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEsIG5zX2lkLFxuJiM0MztcdFx0XHQgIGluZm8sIEdGUF9LRVJORUwpO1xuJiM0MztcdHhhX3VubG9jayhcdTAwMjZjb25maWdmc19zdXBlcl94YSk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMCkge1xuJiM0MztcdFx0cHV0X25ldChpbmZvLVx1MDAzZW5ldF9ucyk7XG4mIzQzO1x0XHRrZnJlZShpbmZvKTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBpbmZvO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IG5zX2lkID0gY29uZmlnZnNfbnNfaWQoaW5mby1cdTAwM2VuZXRfbnMpO1xuJiM0MztcbiYjNDM7XHR4YV9sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N1cGVyX3hhKTtcbiYjNDM7XHRpZiAoIXJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZpbmZvLVx1MDAzZXJlZikpIHtcbiYjNDM7XHRcdHhhX3VubG9jayhcdTAwMjZjb25maWdmc19zdXBlcl94YSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdF9feGFfZXJhc2UoXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEsIG5zX2lkKTtcbiYjNDM7XHR4YV91bmxvY2soXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEpO1xuJiM0MztcdHB1dF9uZXQoaW5mby1cdTAwM2VuZXRfbnMpO1xuJiM0MztcdGtmcmVlKGluZm8pO1xuJiM0Mzt9XG4gXG4gc3RhdGljIGludCBjb25maWdmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiB7XG4mIzQzO1x0c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8gPSBzYi1cdTAwM2VzX2ZzX2luZm87XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIFx0c3RydWN0IGRlbnRyeSAqcm9vdDtcbiBcbkBAIC03Miw2NiAmIzQzOzEzNSwxNjIgQEAgc3RhdGljIGludCBjb25maWdmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdHNiLVx1MDAzZXNfdGltZV9ncmFuID0gMTtcbiBcbiBcdGlub2RlID0gY29uZmlnZnNfbmV3X2lub2RlKFNfSUZESVIgfCBTX0lSV1hVIHwgU19JUlVHTyB8IFNfSVhVR08sXG4tXHRcdFx0XHQgICBcdTAwMjZjb25maWdmc19yb290LCBzYik7XG4tXHRpZiAoaW5vZGUpIHtcbi1cdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmNvbmZpZ2ZzX3Jvb3RfaW5vZGVfb3BlcmF0aW9ucztcbi1cdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZjb25maWdmc19kaXJfb3BlcmF0aW9ucztcbi1cdFx0LyogZGlyZWN0b3J5IGlub2RlcyBzdGFydCBvZmYgd2l0aCBpX25saW5rID09IDIgKGZvciBcJiMzNDsuXCYjMzQ7IGVudHJ5KSAqL1xuLVx0XHRpbmNfbmxpbmsoaW5vZGUpO1xuLVx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHQgICBcdTAwMjZpbmZvLVx1MDAzZXJvb3QsIHNiKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGlub2RlKSkge1xuIFx0XHRwcl9kZWJ1ZyhcJiMzNDtjb3VsZCBub3QgZ2V0IHJvb3QgaW5vZGVcXG5cJiMzNDspO1xuLVx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKGlub2RlKTtcbiBcdH1cbiYjNDM7XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2Y29uZmlnZnNfcm9vdF9pbm9kZV9vcGVyYXRpb25zO1xuJiM0MztcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2Y29uZmlnZnNfZGlyX29wZXJhdGlvbnM7XG4mIzQzO1x0LyogZGlyZWN0b3J5IGlub2RlcyBzdGFydCBvZmYgd2l0aCBpX25saW5rID09IDIgKGZvciBcJiMzNDsuXCYjMzQ7IGVudHJ5KSAqL1xuJiM0MztcdGluY19ubGluayhpbm9kZSk7XG4gXG4gXHRyb290ID0gZF9tYWtlX3Jvb3QoaW5vZGUpO1xuIFx0aWYgKCFyb290KSB7XG4gXHRcdHByX2RlYnVnKFwmIzM0OyVzOiBjb3VsZCBub3QgZ2V0IHJvb3QgZGVudHJ5IVxcblwmIzM0OyxfX2Z1bmNfXyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuLVx0Y29uZmlnX2dyb3VwX2luaXQoXHUwMDI2Y29uZmlnZnNfcm9vdF9ncm91cCk7XG4tXHRjb25maWdmc19yb290X2dyb3VwLmNnX2l0ZW0uY2lfZGVudHJ5ID0gcm9vdDtcbi1cdHJvb3QtXHUwMDNlZF9mc2RhdGEgPSBcdTAwMjZjb25maWdmc19yb290O1xuJiM0MztcdGluZm8tXHUwMDNlZ3JvdXAuY2dfaXRlbS5jaV9kZW50cnkgPSByb290O1xuJiM0MztcdHJvb3QtXHUwMDNlZF9mc2RhdGEgPSBcdTAwMjZpbmZvLVx1MDAzZXJvb3Q7XG4gXHRzYi1cdTAwM2VzX3Jvb3QgPSByb290O1xuIFx0c2V0X2RlZmF1bHRfZF9vcChzYiwgXHUwMDI2Y29uZmlnZnNfZGVudHJ5X29wcyk7IC8qIHRoZSByZXN0IGdldCB0aGF0ICovXG4gXHRzYi1cdTAwM2VzX2RfZmxhZ3MgfD0gRENBQ0hFX0RPTlRDQUNIRTtcbiYjNDM7XG4mIzQzO1x0Y29uZmlnZnNfbGlua19zdWJzeXN0ZW1zKHNiLCBpbmZvKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBjb25maWdmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4ge1xuLVx0cmV0dXJuIGdldF90cmVlX3NpbmdsZShmYywgY29uZmlnZnNfZmlsbF9zdXBlcik7XG4mIzQzO1x0c3RydWN0IG5ldCAqbmV0X25zID0gZmMtXHUwMDNlZnNfcHJpdmF0ZTtcbiYjNDM7XHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpbmZvID0gY29uZmlnZnNfZ2V0X3N1cGVyX2luZm8obmV0X25zKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGluZm8pKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoaW5mbyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGdldF90cmVlX2tleWVkKGZjLCBjb25maWdmc19maWxsX3N1cGVyLCBpbmZvKTtcbiYjNDM7XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBmYy1cdTAwM2VzX2ZzX2luZm8pXG4mIzQzO1x0XHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBjb25maWdmc19mc19jb250ZXh0X2ZyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldCAqbmV0X25zID0gZmMtXHUwMDNlZnNfcHJpdmF0ZTtcbiYjNDM7XG4mIzQzO1x0ZmMtXHUwMDNlZnNfcHJpdmF0ZSA9IE5VTEw7XG4mIzQzO1x0cHV0X25ldChuZXRfbnMpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBjb25maWdmc19jb250ZXh0X29wcyA9IHtcbiBcdC5nZXRfdHJlZVx0PSBjb25maWdmc19nZXRfdHJlZSxcbiYjNDM7XHQuZnJlZVx0XHQ9IGNvbmZpZ2ZzX2ZzX2NvbnRleHRfZnJlZSxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgY29uZmlnZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiB7XG4mIzQzO1x0c3RydWN0IG5ldCAqbmV0X25zID0gZ2V0X25ldChjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zKTtcbiYjNDM7XG4mIzQzO1x0ZmMtXHUwMDNlZnNfcHJpdmF0ZSA9IG5ldF9ucztcbiBcdGZjLVx1MDAzZW9wcyA9IFx1MDAyNmNvbmZpZ2ZzX2NvbnRleHRfb3BzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBjb25maWdmc19raWxsX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyA9IHNiLVx1MDAzZXNfZnNfaW5mbztcbiYjNDM7XG4mIzQzO1x0Y29uZmlnZnNfdW5saW5rX3N1YnN5c3RlbXMoc2IsIGluZm8pO1xuJiM0MztcdGtpbGxfYW5vbl9zdXBlcihzYik7XG4mIzQzO1x0Y29uZmlnZnNfcHV0X3N1cGVyX2luZm8oaW5mbyk7XG4mIzQzO1x0c2ItXHUwMDNlc19mc19pbmZvID0gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgY29uZmlnZnNfZnNfdHlwZSA9IHtcbiBcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuIFx0Lm5hbWVcdFx0PSBcJiMzNDtjb25maWdmc1wmIzM0OyxcbiBcdC5pbml0X2ZzX2NvbnRleHQgPSBjb25maWdmc19pbml0X2ZzX2NvbnRleHQsXG4tXHQua2lsbF9zYlx0PSBraWxsX2Fub25fc3VwZXIsXG4mIzQzO1x0LmtpbGxfc2JcdD0gY29uZmlnZnNfa2lsbF9zYixcbiYjNDM7XHQuZnNfZmxhZ3NcdD0gRlNfVVNFUk5TX01PVU5ULFxuIH07XG4gTU9EVUxFX0FMSUFTX0ZTKFwmIzM0O2NvbmZpZ2ZzXCYjMzQ7KTtcbiBcbi1zdHJ1Y3QgZGVudHJ5ICpjb25maWdmc19waW5fZnModm9pZClcbiYjNDM7c3RydWN0IGRlbnRyeSAqY29uZmlnZnNfcGluX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4ge1xuLVx0aW50IGVyciA9IHNpbXBsZV9waW5fZnMoXHUwMDI2Y29uZmlnZnNfZnNfdHlwZSwgXHUwMDI2Y29uZmlnZnNfbW91bnQsXG4tXHRcdFx0ICAgICBcdTAwMjZjb25maWdmc19tbnRfY291bnQpO1xuLVx0cmV0dXJuIGVyciA/IEVSUl9QVFIoZXJyKSA6IGNvbmZpZ2ZzX21vdW50LVx1MDAzZW1udF9yb290O1xuJiM0MztcdHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xuJiM0MztcdGlmIChzYikge1xuJiM0MztcdFx0c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKnJvb3QgPSBjb25maWdmc19yb290O1xuJiM0MztcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gc2ItXHUwMDNlc19yb290O1xuJiM0MztcbiYjNDM7XHRcdGluZm8gPSBzYi1cdTAwM2VzX2ZzX2luZm87XG4mIzQzO1x0XHRpZiAoIWluZm8tXHUwMDNlbW50KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB2ZnNtb3VudCAqbW50O1xuJiM0MztcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xuJiM0MztcdFx0XHRtbnQgPSBtbnRfY2xvbmVfZGlyZWN0KHJvb3QtXHUwMDNlbW50LCBkZW50cnkpO1xuJiM0MztcdFx0XHRpZiAoSVNfRVJSKG1udCkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIEVSUl9DQVNUKG1udCk7XG4mIzQzO1x0XHRcdHNwaW5fbG9jayhcdTAwMjZjb25maWdmc19waW5fbG9jayk7XG4mIzQzO1x0XHRcdGluZm8tXHUwMDNlbW50ID0gbW50O1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0bW50Z2V0KGluZm8tXHUwMDNlbW50KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aW5mbyA9IGNvbmZpZ2ZzX3Jvb3Q7XG4mIzQzO1x0XHRpZiAoIWluZm8tXHUwMDNlbW50KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB2ZnNtb3VudCAqbW50O1xuJiM0MztcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xuJiM0MztcdFx0XHRtbnQgPSB2ZnNfa2Vybl9tb3VudChcdTAwMjZjb25maWdmc19mc190eXBlLCBTQl9LRVJOTU9VTlQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGNvbmZpZ2ZzX2ZzX3R5cGUubmFtZSwgTlVMTCk7XG4mIzQzO1x0XHRcdGlmIChJU19FUlIobW50KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gRVJSX0NBU1QobW50KTtcbiYjNDM7XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNmNvbmZpZ2ZzX3Bpbl9sb2NrKTtcbiYjNDM7XHRcdFx0aW5mby1cdTAwM2VtbnQgPSBtbnQ7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRtbnRnZXQoaW5mby1cdTAwM2VtbnQpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRpbmZvLVx1MDAzZW1udF9jb3VudCYjNDM7JiM0Mzs7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xuJiM0MztcdHJldHVybiBpbmZvLVx1MDAzZW1udC1cdTAwM2VtbnRfcm9vdDtcbiB9XG4gXG4tdm9pZCBjb25maWdmc19yZWxlYXNlX2ZzKHZvaWQpXG4mIzQzO3ZvaWQgY29uZmlnZnNfcmVsZWFzZV9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbi1cdHNpbXBsZV9yZWxlYXNlX2ZzKFx1MDAyNmNvbmZpZ2ZzX21vdW50LCBcdTAwMjZjb25maWdmc19tbnRfY291bnQpO1xuJiM0MztcdHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvID0gY29uZmlnZnNfcm9vdDtcbiYjNDM7XHRzdHJ1Y3QgdmZzbW91bnQgKm1udDtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmNvbmZpZ2ZzX3Bpbl9sb2NrKTtcbiYjNDM7XHRpZiAoc2IpXG4mIzQzO1x0XHRpbmZvID0gc2ItXHUwMDNlc19mc19pbmZvO1xuJiM0MztcdG1udCA9IGluZm8tXHUwMDNlbW50O1xuJiM0MztcdGlmICgtLWluZm8tXHUwMDNlbW50X2NvdW50KVxuJiM0MztcdFx0aW5mby1cdTAwM2VtbnQgPSBOVUxMO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmNvbmZpZ2ZzX3Bpbl9sb2NrKTtcbiYjNDM7XHRtbnRwdXQobW50KTtcbiB9XG4gXG4mIzQzO3N0cnVjdCBuZXQgKmNvbmZpZ2ZzX25zX2Zyb21fZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyA9IGNvbmZpZ2ZzX3Jvb3Q7XG4mIzQzO1x0c3RydWN0IG5ldCAqbmV0X25zID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKGdyb3VwKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBncm91cC1cdTAwM2VjZ19pdGVtLmNpX2RlbnRyeTtcbiYjNDM7XG4mIzQzO1x0XHRpbmZvID0gZGVudHJ5LVx1MDAzZWRfc2ItXHUwMDNlc19mc19pbmZvO1xuJiM0MztcdFx0aWYgKGluZm8pXG4mIzQzO1x0XHRcdG5ldF9ucyA9IGluZm8tXHUwMDNlbmV0X25zO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gbmV0X25zO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGNvbmZpZ2ZzX25zX2Zyb21fZ3JvdXApO1xuIFxuIHN0YXRpYyBpbnQgX19pbml0IGNvbmZpZ2ZzX2luaXQodm9pZClcbiB7XG5AQCAtMTQzLDE4ICYjNDM7MzAyLDI3IEBAIHN0YXRpYyBpbnQgX19pbml0IGNvbmZpZ2ZzX2luaXQodm9pZClcbiBcdGlmICghY29uZmlnZnNfZGlyX2NhY2hlcClcbiBcdFx0Z290byBvdXQ7XG4gXG4mIzQzO1x0Y29uZmlnZnNfcm9vdCA9IGNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKFx1MDAyNmluaXRfbmV0KTtcbiYjNDM7XHRpZiAoSVNfRVJSKGNvbmZpZ2ZzX3Jvb3QpKSB7XG4mIzQzO1x0XHRlcnIgPSBQVFJfRVJSKGNvbmZpZ2ZzX3Jvb3QpO1xuJiM0MztcdFx0Z290byBvdXQyO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRlcnIgPSBzeXNmc19jcmVhdGVfbW91bnRfcG9pbnQoa2VybmVsX2tvYmosIFwmIzM0O2NvbmZpZ1wmIzM0Oyk7XG4gXHRpZiAoZXJyKVxuLVx0XHRnb3RvIG91dDI7XG4mIzQzO1x0XHRnb3RvIG91dDM7XG4gXG4gXHRlcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKFx1MDAyNmNvbmZpZ2ZzX2ZzX3R5cGUpO1xuIFx0aWYgKGVycilcbi1cdFx0Z290byBvdXQzO1xuJiM0MztcdFx0Z290byBvdXQ0O1xuIFxuIFx0cmV0dXJuIDA7XG4tb3V0MzpcbiYjNDM7b3V0NDpcbiBcdHByX2VycihcJiMzNDtVbmFibGUgdG8gcmVnaXN0ZXIgZmlsZXN5c3RlbSFcXG5cJiMzNDspO1xuIFx0c3lzZnNfcmVtb3ZlX21vdW50X3BvaW50KGtlcm5lbF9rb2JqLCBcJiMzNDtjb25maWdcJiMzNDspO1xuJiM0MztvdXQzOlxuJiM0MztcdGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKGNvbmZpZ2ZzX3Jvb3QpO1xuJiM0MztcdGNvbmZpZ2ZzX3Jvb3QgPSBOVUxMO1xuIG91dDI6XG4gXHRrbWVtX2NhY2hlX2Rlc3Ryb3koY29uZmlnZnNfZGlyX2NhY2hlcCk7XG4gXHRjb25maWdmc19kaXJfY2FjaGVwID0gTlVMTDtcbkBAIC0xNjYsNiAmIzQzOzMzNCw4IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBjb25maWdmc19leGl0KHZvaWQpXG4ge1xuIFx0dW5yZWdpc3Rlcl9maWxlc3lzdGVtKFx1MDAyNmNvbmZpZ2ZzX2ZzX3R5cGUpO1xuIFx0c3lzZnNfcmVtb3ZlX21vdW50X3BvaW50KGtlcm5lbF9rb2JqLCBcJiMzNDtjb25maWdcJiMzNDspO1xuJiM0MztcdGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKGNvbmZpZ2ZzX3Jvb3QpO1xuJiM0MztcdGNvbmZpZ2ZzX3Jvb3QgPSBOVUxMO1xuIFx0a21lbV9jYWNoZV9kZXN0cm95KGNvbmZpZ2ZzX2Rpcl9jYWNoZXApO1xuIFx0Y29uZmlnZnNfZGlyX2NhY2hlcCA9IE5VTEw7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmNcbmluZGV4IDNkNWNkNWJmM2IwNTM3Li5lN2FiYmY2MzJjYzcwZCAxMDA2NDRcbi0tLSBhL2ZzL25hbWVzcGFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1lc3BhY2UuY1xuQEAgLTE0ODIsNiAmIzQzOzE0ODIsMTcgQEAgc3RydWN0IHZmc21vdW50ICptbnRfY2xvbmVfaW50ZXJuYWwoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4gXHRyZXR1cm4gXHUwMDI2cC1cdTAwM2VtbnQ7XG4gfVxuIFxuJiM0MztzdHJ1Y3QgdmZzbW91bnQgKm1udF9jbG9uZV9kaXJlY3Qoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtb3VudCAqcDtcbiYjNDM7XG4mIzQzO1x0cCA9IGNsb25lX21udChyZWFsX21vdW50KG1udCksIGRlbnRyeSwgQ0xfU0xBVkUpO1xuJiM0MztcdGlmIChJU19FUlIocCkpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX0NBU1QocCk7XG4mIzQzO1x0cC1cdTAwM2VtbnQubW50X2ZsYWdzIHw9IE1OVF9JTlRFUk5BTDtcbiYjNDM7XHRyZXR1cm4gXHUwMDI2cC1cdTAwM2VtbnQ7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBSZXR1cm5zIHRoZSBtb3VudCB3aGljaCBlaXRoZXIgaGFzIHRoZSBzcGVjaWZpZWQgbW50X2lkLCBvciBoYXMgdGhlIG5leHRcbiAgKiBzbWFsbGVzdCBpZCBhZmVyIHRoZSBzcGVjaWZpZWQgb25lLlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29uZmlnZnMuaCBiL2luY2x1ZGUvbGludXgvY29uZmlnZnMuaFxuaW5kZXggZWY2NWM3NWJlZWFhZDguLjc2ZTBiYjFhNzJiOWRiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9jb25maWdmcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmhcbkBAIC0yNCw2ICYjNDM7MjQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZSAgIC8qIHN0cnVjdCBsaXN0X2hlYWQgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rcmVmLmhcdTAwM2UgICAvKiBzdHJ1Y3Qga3JlZiAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2UgIC8qIHN0cnVjdCBtdXRleCAqL1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvbmV0X25hbWVzcGFjZS5oXHUwMDNlIC8qIHN0cnVjdCBuZXQgKi9cbiBcbiAjZGVmaW5lIENPTkZJR0ZTX0lURU1fTkFNRV9MRU5cdDIwXG4gXG5AQCAtMjI2LDggJiM0MzsyMjcsMTMgQEAgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMge1xuIH07XG4gXG4gc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSB7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZFx0c3VfbGluaztcbiBcdHN0cnVjdCBjb25maWdfZ3JvdXBcdHN1X2dyb3VwO1xuIFx0c3RydWN0IG11dGV4XHRcdHN1X211dGV4O1xuJiM0MztcdGludCAoKmZpbGxfc3Vic3lzdGVtKShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBuZXQgKm5ldF9ucyk7XG4mIzQzO1x0dm9pZCAoKmNsZWFyX3N1YnN5c3RlbSkoc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBuZXQgKm5ldF9ucyk7XG4gfTtcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnRvX2NvbmZpZ2ZzX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cClcbkBAIC0yNTIsNiAmIzQzOzI1OCw4IEBAIGNvbmZpZ2ZzX3JlZ2lzdGVyX2RlZmF1bHRfZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAqcGFyZW50X2dyb3VwLFxuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKml0ZW1fdHlwZSk7XG4gdm9pZCBjb25maWdmc191bnJlZ2lzdGVyX2RlZmF1bHRfZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXApO1xuIFxuJiM0MztzdHJ1Y3QgbmV0ICpjb25maWdmc19uc19mcm9tX2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKTtcbiYjNDM7XG4gLyogVGhlc2UgZnVuY3Rpb25zIGNhbiBzbGVlcCBhbmQgY2FuIGFsbG9jIHdpdGggR0ZQX0tFUk5FTCAqL1xuIC8qIFdBUk5JTkc6IFRoZXNlIGNhbm5vdCBiZSBjYWxsZWQgdW5kZXJuZWF0aCBjb25maWdmcyBjYWxsYmFja3MhISAqL1xuIGludCBjb25maWdmc19kZXBlbmRfaXRlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb3VudC5oIGIvaW5jbHVkZS9saW51eC9tb3VudC5oXG5pbmRleCBhY2ZlN2VmODZhMWIzZi4uN2U3ZTdkNjZjMzAyNGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21vdW50LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW91bnQuaFxuQEAgLTc1LDYgJiM0Mzs3NSw3IEBAIGV4dGVybiB2b2lkIG1udF9kcm9wX3dyaXRlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpO1xuIGV4dGVybiB2b2lkIG1udHB1dChzdHJ1Y3QgdmZzbW91bnQgKm1udCk7XG4gZXh0ZXJuIHN0cnVjdCB2ZnNtb3VudCAqbW50Z2V0KHN0cnVjdCB2ZnNtb3VudCAqbW50KTtcbiBleHRlcm4gdm9pZCBtbnRfbWFrZV9zaG9ydHRlcm0oc3RydWN0IHZmc21vdW50ICptbnQpO1xuJiM0MztleHRlcm4gc3RydWN0IHZmc21vdW50ICptbnRfY2xvbmVfZGlyZWN0KHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIGV4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKm1udF9jbG9uZV9pbnRlcm5hbChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCk7XG4gZXh0ZXJuIGJvb2wgX19tbnRfaXNfcmVhZG9ubHkoY29uc3Qgc3RydWN0IHZmc21vdW50ICptbnQpO1xuIGV4dGVybiBib29sIG1udF9tYXlfc3VpZChzdHJ1Y3QgdmZzbW91bnQgKm1udCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTA6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVQmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVRfTE9PUCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVF9UQ1AmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVRfUkRNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbSYjMzQ7LAogICAgJiMzNDtjb25maWdmc19saW5rX3N1YnN5c3RlbXMmIzM0OywKICAgICYjMzQ7Y29uZmlnZnNfdW5saW5rX3N1YnN5c3RlbXMmIzM0OywKICAgICYjMzQ7Y29uZmlnZnNfZ2V0X3N1cGVyX2luZm8mIzM0OywKICAgICYjMzQ7Y29uZmlnZnNfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtudm1ldF9jb25maWdmc19maWxsX3N1YnN5c3RlbSYjMzQ7LAogICAgJiMzNDtudm1ldF9hZGRfZGlzY19zdWJzeXMmIzM0OywKICAgICYjMzQ7bnZtZXRfcG9ydHNfbWFrZSYjMzQ7LAogICAgJiMzNDtudm1ldF9zdWJzeXNfbWFrZSYjMzQ7LAogICAgJiMzNDtudm1ldF9hZGRfcG9ydF9saXN0JiMzNDssCiAgICAmIzM0O252bWV0X2RlbF9wb3J0X2xpc3QmIzM0OywKICAgICYjMzQ7bnZtZXRfcm9vdF9kaXNjb3ZlcnlfbnFuX3N0b3JlJiMzNDssCiAgICAmIzM0O252bWV0X2V4ZWN1dGVfZGlzY19nZXRfbG9nX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXR3b3JrIG5hbWVzcGFjZSBzdXBwb3J0IGZvciBjb25maWdmcyBhbmQgdGhlIE5WTWUtb0YgdGFyZ2V0LiBJdCBtb2RpZmllcyBjb3JlIGNvbmZpZ2ZzIGxvZ2ljIHRvIHN1cHBvcnQgbXVsdGlwbGUgc3VwZXJibG9ja3MgcGVyIG5ldHdvcmsgbmFtZXNwYWNlIGFuZCB1cGRhdGVzIHRoZSBOVk1lIHRhcmdldCB0byB1c2UgcGVyLW5hbWVzcGFjZSBkaXNjb3Zlcnkgc3Vic3lzdGVtcyBhbmQgcG9ydHMuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGtlcm5lbCBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwMTU2OTFmYmEzN2NjMmI4NGIyZGJmMjRiZDc2OTJiNTVmNGE2MmM0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMjMgMTA6MTA6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMgYi9kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMKaW5kZXggYjg4Zjg5N2YwNmUyNWUuLjc2MzZhYzM3NzNiNDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jCkBAIC0yNSw4ICYjNDM7MjUsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG52bWV0X2hvc3RfdHlwZTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBudm1ldF9zdWJzeXNfdHlwZTsKIAotc3RhdGljIExJU1RfSEVBRChudm1ldF9wb3J0c19saXN0KTsKLXN0cnVjdCBsaXN0X2hlYWQgKm52bWV0X3BvcnRzID0gJmFtcDtudm1ldF9wb3J0c19saXN0OwomIzQzO3N0YXRpYyBERUZJTkVfWEFSUkFZKG52bWV0X3BvcnRzX3hhKTsKIAogc3RydWN0IG52bWV0X3R5cGVfbmFtZV9tYXAgewogCXU4CQl0eXBlOwpAQCAtNTEsNiAmIzQzOzUwLDcwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbnZtZXRfdHlwZV9uYW1lX21hcCBudm1ldF9hZGRyX2ZhbWlseVtdID0gewogCXsgTlZNRl9BRERSX0ZBTUlMWV9MT09QLAkmIzM0O2xvb3AmIzM0OyB9LAogfTsKIAomIzQzO3U2NCBudm1ldF9nZXRfbnNfaWQoc3RydWN0IG5ldCAqbmV0X25zKQomIzQzO3sKJiM0MzsJc3RydWN0IG5zX2NvbW1vbiAqbnM7CiYjNDM7CiYjNDM7CWlmICghbmV0X25zKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CW5zID0gdG9fbnNfY29tbW9uKG5ldF9ucyk7CiYjNDM7CXJldHVybiBuZXRfbnMgPT0gJmFtcDtpbml0X25ldCA/IDAgOiBucy0mZ3Q7bnNfaWQ7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBsaXN0X2hlYWQgKm52bWV0X2dldF9wb3J0X2xpc3Qoc3RydWN0IG5ldCAqbmV0X25zKQomIzQzO3sKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCAqcG9ydF9saXN0OwomIzQzOwl1NjQgbnNfaWQgPSBudm1ldF9nZXRfbnNfaWQobmV0X25zKTsKJiM0MzsKJiM0MzsJcG9ydF9saXN0ID0geGFfbG9hZCgmYW1wO252bWV0X3BvcnRzX3hhLCBuc19pZCk7CiYjNDM7CXJldHVybiBwb3J0X2xpc3Q7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnZtZXRfYWRkX3BvcnRfbGlzdChzdHJ1Y3QgbnZtZXRfcG9ydCAqcCkKJiM0Mzt7CiYjNDM7CXU2NCBuc19pZCA9IG52bWV0X2dldF9uc19pZChwLSZndDtuZXRfbnMpOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3J0X2xpc3Q7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwl4YV9sb2NrKCZhbXA7bnZtZXRfcG9ydHNfeGEpOwomIzQzOwlwb3J0X2xpc3QgPSB4YV9sb2FkKCZhbXA7bnZtZXRfcG9ydHNfeGEsIG5zX2lkKTsKJiM0MzsJaWYgKCFwb3J0X2xpc3QpIHsKJiM0MzsJCXBvcnRfbGlzdCA9IGt6YWxsb2Nfb2JqKCpwb3J0X2xpc3QpOwomIzQzOwkJaWYgKCFwb3J0X2xpc3QpIHsKJiM0MzsJCQllcnIgPSAtRU5PTUVNOwomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCX0KJiM0MzsJCUlOSVRfTElTVF9IRUFEKHBvcnRfbGlzdCk7CiYjNDM7CQllcnIgPSBfX3hhX2luc2VydCgmYW1wO252bWV0X3BvcnRzX3hhLCBuc19pZCwKJiM0MzsJCQkJICBwb3J0X2xpc3QsIEdGUF9LRVJORUwpOwomIzQzOwkJaWYgKGVyciAmbHQ7IDApIHsKJiM0MzsJCQlrZnJlZShwb3J0X2xpc3QpOwomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlsaXN0X2FkZCgmYW1wO3AtJmd0O2dsb2JhbF9lbnRyeSwgcG9ydF9saXN0KTsKJiM0MztvdXRfdW5sb2NrOgomIzQzOwl4YV91bmxvY2soJmFtcDtudm1ldF9wb3J0c194YSk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG52bWV0X2RlbF9wb3J0X2xpc3Qoc3RydWN0IG52bWV0X3BvcnQgKnApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3J0X2xpc3Q7CiYjNDM7CXU2NCBuc19pZCA9IG52bWV0X2dldF9uc19pZChwLSZndDtuZXRfbnMpOwomIzQzOwomIzQzOwl4YV9sb2NrKCZhbXA7bnZtZXRfcG9ydHNfeGEpOwomIzQzOwlwb3J0X2xpc3QgPSB4YV9sb2FkKCZhbXA7bnZtZXRfcG9ydHNfeGEsIG5zX2lkKTsKJiM0MzsJaWYgKCFXQVJOX09OKCFwb3J0X2xpc3QpKSB7CiYjNDM7CQlsaXN0X2RlbF9pbml0KCZhbXA7cC0mZ3Q7Z2xvYmFsX2VudHJ5KTsKJiM0MzsJCWlmIChsaXN0X2VtcHR5KHBvcnRfbGlzdCkpIHsKJiM0MzsJCQlfX3hhX2VyYXNlKCZhbXA7bnZtZXRfcG9ydHNfeGEsIG5zX2lkKTsKJiM0MzsJCQlrZnJlZShwb3J0X2xpc3QpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXhhX3VubG9jaygmYW1wO252bWV0X3BvcnRzX3hhKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBudm1ldF9pc19wb3J0X2VuYWJsZWQoc3RydWN0IG52bWV0X3BvcnQgKnAsIGNvbnN0IGNoYXIgKmNhbGxlcikKIHsKIAlpZiAocC0mZ3Q7ZW5hYmxlZCkKQEAgLTE3MTcsNiAmIzQzOzE3ODAsNyBAQCBzdGF0aWMgdm9pZCBudm1ldF9zdWJzeXNfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCiB7CiAJc3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzID0gdG9fc3Vic3lzKGl0ZW0pOwogCiYjNDM7CWNvbmZpZ2ZzX3JlbW92ZV9kZWZhdWx0X2dyb3VwcygmYW1wO3N1YnN5cy0mZ3Q7Z3JvdXApOwogCW52bWV0X3N1YnN5c19kZWxfY3RybHMoc3Vic3lzKTsKIAludm1ldF9zdWJzeXNfcHV0KHN1YnN5cyk7CiB9CkBAIC0xNzM0LDE5ICYjNDM7MTc5OCwyMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgbnZtZXRfc3Vic3lzX3R5cGUgPSB7CiBzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbnZtZXRfc3Vic3lzX21ha2Uoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsCiAJCWNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0Jc3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzOwomIzQzOwlzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMsICpkaXNjX3N1YnN5czsKJiM0MzsJc3RydWN0IG5ldCAqbmV0X25zID0gY29uZmlnZnNfbnNfZnJvbV9ncm91cChncm91cCk7CiAKIAlpZiAoc3lzZnNfc3RyZXEobmFtZSwgTlZNRV9ESVNDX1NVQlNZU19OQU1FKSkgewogCQlwcl9lcnIoJiMzNDtjYW4mIzM5O3QgY3JlYXRlIGRpc2NvdmVyeSBzdWJzeXN0ZW0gdGhyb3VnaCBjb25maWdmc1xuJiMzNDspOwogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAKLQlpZiAoc3lzZnNfc3RyZXEobmFtZSwgbnZtZXRfZGlzY19zdWJzeXMtJmd0O3N1YnN5c25xbikpIHsKJiM0MzsJZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMobmV0X25zKTsKJiM0MzsJaWYgKCFkaXNjX3N1YnN5cykKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwomIzQzOwlpZiAoc3lzZnNfc3RyZXEobmFtZSwgZGlzY19zdWJzeXMtJmd0O3N1YnN5c25xbikpIHsKIAkJcHJfZXJyKCYjMzQ7Y2FuJiMzOTt0IGNyZWF0ZSBzdWJzeXN0ZW0gdXNpbmcgdW5pcXVlIGRpc2NvdmVyeSBOUU5cbiYjMzQ7KTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCi0Jc3Vic3lzID0gbnZtZXRfc3Vic3lzX2FsbG9jKG5hbWUsIE5WTUVfTlFOX05WTUUpOwomIzQzOwlzdWJzeXMgPSBudm1ldF9zdWJzeXNfYWxsb2MobmFtZSwgTlZNRV9OUU5fTlZNRSwgbmV0X25zKTsKIAlpZiAoSVNfRVJSKHN1YnN5cykpCiAJCXJldHVybiBFUlJfQ0FTVChzdWJzeXMpOwogCkBAIC0yMDA0LDggJiM0MzsyMDcyLDkgQEAgc3RhdGljIHZvaWQgbnZtZXRfcG9ydF9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKIAogCS8qIExldCBpbmZsaWdodCBjb250cm9sbGVycyB0ZWFyZG93biBjb21wbGV0ZSAqLwogCWZsdXNoX3dvcmtxdWV1ZShudm1ldF93cSk7Ci0JbGlzdF9kZWwoJmFtcDtwb3J0LSZndDtnbG9iYWxfZW50cnkpOwomIzQzOwludm1ldF9kZWxfcG9ydF9saXN0KHBvcnQpOwogCiYjNDM7CWNvbmZpZ2ZzX3JlbW92ZV9kZWZhdWx0X2dyb3VwcygmYW1wO3BvcnQtJmd0O2dyb3VwKTsKIAlrZXlfcHV0KHBvcnQtJmd0O2tleXJpbmcpOwogCWtmcmVlKHBvcnQtJmd0O2FuYV9zdGF0ZSk7CiAJa2ZyZWUocG9ydCk7CkBAIC0yMDU3LDYgJiM0MzsyMTI2LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwICpudm1ldF9wb3J0c19tYWtlKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CiAKJiM0MzsJcG9ydC0mZ3Q7bmV0X25zID0gY29uZmlnZnNfbnNfZnJvbV9ncm91cChncm91cCk7CiYjNDM7CWlmICghcG9ydC0mZ3Q7bmV0X25zKQomIzQzOwkJcG9ydC0mZ3Q7bmV0X25zID0gZ2V0X25ldCgmYW1wO2luaXRfbmV0KTsKJiM0MzsKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfTlZNRV9UQVJHRVRfVENQX1RMUykgJmFtcDsmYW1wOyBudm1lX2tleXJpbmdfaWQoKSkgewogCQlwb3J0LSZndDtrZXlyaW5nID0ga2V5X2xvb2t1cChudm1lX2tleXJpbmdfaWQoKSk7CiAJCWlmIChJU19FUlIocG9ydC0mZ3Q7a2V5cmluZykpIHsKQEAgLTIwNzIsNyAmIzQzOzIxNDUsNyBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbnZtZXRfcG9ydHNfbWFrZShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwKIAkJCXBvcnQtJmd0O2FuYV9zdGF0ZVtpXSA9IE5WTUVfQU5BX0lOQUNDRVNTSUJMRTsKIAl9CiAKLQlsaXN0X2FkZCgmYW1wO3BvcnQtJmd0O2dsb2JhbF9lbnRyeSwgJmFtcDtudm1ldF9wb3J0c19saXN0KTsKJiM0MzsJbnZtZXRfYWRkX3BvcnRfbGlzdChwb3J0KTsKIAogCUlOSVRfTElTVF9IRUFEKCZhbXA7cG9ydC0mZ3Q7ZW50cnkpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7cG9ydC0mZ3Q7c3Vic3lzdGVtcyk7CkBAIC0yMTE5LDkgJiM0MzsyMTkyLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG52bWV0X3BvcnRzX3R5cGUgPSB7CiAJLmN0X293bmVyCQk9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgbnZtZXRfc3Vic3lzdGVtc19ncm91cDsKLXN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwIG52bWV0X3BvcnRzX2dyb3VwOwotCiAjaWZkZWYgQ09ORklHX05WTUVfVEFSR0VUX0FVVEgKIHN0YXRpYyBzc2l6ZV90IG52bWV0X2hvc3RfZGhjaGFwX2tleV9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwKIAkJY2hhciAqcGFnZSkKQEAgLTIzMDMsMTkgJiM0MzsyMzczLDI2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBudm1ldF9ob3N0c190eXBlID0gewogCS5jdF9vd25lcgkJPSBUSElTX01PRFVMRSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwIG52bWV0X2hvc3RzX2dyb3VwOwotCiBzdGF0aWMgc3NpemVfdCBudm1ldF9yb290X2Rpc2NvdmVyeV9ucW5fc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCiAJCQkJCSAgICAgY2hhciAqcGFnZSkKIHsKLQlyZXR1cm4gc25wcmludGYocGFnZSwgUEFHRV9TSVpFLCAmIzM0OyVzXG4mIzM0OywgbnZtZXRfZGlzY19zdWJzeXMtJmd0O3N1YnN5c25xbik7CiYjNDM7CXN0cnVjdCBuZXQgKm5ldF9ucyA9IGNvbmZpZ2ZzX25zX2Zyb21fZ3JvdXAodG9fY29uZmlnX2dyb3VwKGl0ZW0pKTsKJiM0MzsJc3RydWN0IG52bWV0X3N1YnN5cyAqZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMobmV0X25zKTsKJiM0MzsKJiM0MzsJaWYgKCFkaXNjX3N1YnN5cykKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwlyZXR1cm4gc25wcmludGYocGFnZSwgUEFHRV9TSVpFLCAmIzM0OyVzXG4mIzM0OywgZGlzY19zdWJzeXMtJmd0O3N1YnN5c25xbik7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG52bWV0X3Jvb3RfZGlzY292ZXJ5X25xbl9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCiAJCWNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudCkKIHsKJiM0MzsJc3RydWN0IGNvbmZpZ19pdGVtICpzdWJzeXN0ZW1zX2l0ZW07CiYjNDM7CXN0cnVjdCBjb25maWdfZ3JvdXAgKnN1YnN5c3RlbXNfZ3JvdXA7CiYjNDM7CXN0cnVjdCBuZXQgKm5ldF9ucyA9IGNvbmZpZ2ZzX25zX2Zyb21fZ3JvdXAodG9fY29uZmlnX2dyb3VwKGl0ZW0pKTsKJiM0MzsJc3RydWN0IG52bWV0X3N1YnN5cyAqZGlzY19zdWJzeXM7CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7Ci0JY2hhciAqb2xkX25xbiwgKm5ld19ucW47CiYjNDM7CWNoYXIgKm9sZF9ucW4gPSBOVUxMLCAqbmV3X25xbjsKIAlzaXplX3QgbGVuOwogCiAJbGVuID0gc3RyY3NwbihwYWdlLCAmIzM0O1xuJiMzNDspOwpAQCAtMjMyNyw3ICYjNDM7MjQwNCwxNCBAQCBzdGF0aWMgc3NpemVfdCBudm1ldF9yb290X2Rpc2NvdmVyeV9ucW5fc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWRvd25fd3JpdGUoJmFtcDtudm1ldF9jb25maWdfc2VtKTsKLQlsaXN0X2Zvcl9lYWNoKGVudHJ5LCAmYW1wO252bWV0X3N1YnN5c3RlbXNfZ3JvdXAuY2dfY2hpbGRyZW4pIHsKJiM0MzsJc3Vic3lzdGVtc19pdGVtID0gY29uZmlnX2dyb3VwX2ZpbmRfaXRlbSh0b19jb25maWdfZ3JvdXAoaXRlbSksICYjMzQ7c3Vic3lzdGVtcyYjMzQ7KTsKJiM0MzsJaWYgKFdBUk5fT04oIXN1YnN5c3RlbXNfaXRlbSkpIHsKJiM0MzsJCWtmcmVlKG5ld19ucW4pOwomIzQzOwkJdXBfd3JpdGUoJmFtcDtudm1ldF9jb25maWdfc2VtKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CXN1YnN5c3RlbXNfZ3JvdXAgPSB0b19jb25maWdfZ3JvdXAoc3Vic3lzdGVtc19pdGVtKTsKJiM0MzsJbGlzdF9mb3JfZWFjaChlbnRyeSwgJmFtcDtzdWJzeXN0ZW1zX2dyb3VwLSZndDtjZ19jaGlsZHJlbikgewogCQlzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0gPQogCQkJY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgY29uZmlnX2l0ZW0sIGNpX2VudHJ5KTsKIApAQCAtMjMzOCwxMiAmIzQzOzI0MjIsMTUgQEAgc3RhdGljIHNzaXplX3QgbnZtZXRfcm9vdF9kaXNjb3ZlcnlfbnFuX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQotCW9sZF9ucW4gPSBudm1ldF9kaXNjX3N1YnN5cy0mZ3Q7c3Vic3lzbnFuOwotCW52bWV0X2Rpc2Nfc3Vic3lzLSZndDtzdWJzeXNucW4gPSBuZXdfbnFuOwomIzQzOwlkaXNjX3N1YnN5cyA9IG52bWV0X2dldF9kaXNjX3N1YnN5cyhuZXRfbnMpOwomIzQzOwlpZiAoZGlzY19zdWJzeXMpIHsKJiM0MzsJCW9sZF9ucW4gPSBkaXNjX3N1YnN5cy0mZ3Q7c3Vic3lzbnFuOwomIzQzOwkJZGlzY19zdWJzeXMtJmd0O3N1YnN5c25xbiA9IG5ld19ucW47CiYjNDM7CX0KIAl1cF93cml0ZSgmYW1wO252bWV0X2NvbmZpZ19zZW0pOwogCiAJa2ZyZWUob2xkX25xbik7Ci0JcmV0dXJuIGxlbjsKJiM0MzsJcmV0dXJuIGRpc2Nfc3Vic3lzID8gbGVuIDogLUVOT0VOVDsKIH0KIAogQ09ORklHRlNfQVRUUihudm1ldF9yb290XywgZGlzY292ZXJ5X25xbik7CkBAIC0yMzU4LDYgJiM0MzsyNDQ1LDY5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBudm1ldF9yb290X3R5cGUgPSB7CiAJLmN0X293bmVyCQk9IFRISVNfTU9EVUxFLAogfTsKIAomIzQzO3N0YXRpYyBpbnQgbnZtZXRfY29uZmlnZnNfZmlsbF9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzLAomIzQzOwkJCQkJIHN0cnVjdCBuZXQgKm5ldF9ucykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjb25maWdfZ3JvdXAgKnN1YnN5c3RlbXNfZ3JvdXAsICpwb3J0c19ncm91cCwgKmhvc3RzX2dyb3VwOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwllcnIgPSBudm1ldF9hZGRfZGlzY19zdWJzeXMobmV0X25zKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlzdWJzeXN0ZW1zX2dyb3VwID0ga3phbGxvY19vYmooKnN1YnN5c3RlbXNfZ3JvdXApOwomIzQzOwlpZiAoIXN1YnN5c3RlbXNfZ3JvdXApIHsKJiM0MzsJCW52bWV0X2RlbF9kaXNjX3N1YnN5cyhuZXRfbnMpOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsJY29uZmlnX2dyb3VwX2luaXRfdHlwZV9uYW1lKHN1YnN5c3RlbXNfZ3JvdXAsCiYjNDM7CQkJJiMzNDtzdWJzeXN0ZW1zJiMzNDssICZhbXA7bnZtZXRfc3Vic3lzdGVtc190eXBlKTsKJiM0MzsJY29uZmlnZnNfYWRkX2RlZmF1bHRfZ3JvdXAoc3Vic3lzdGVtc19ncm91cCwKJiM0MzsJCQkmYW1wO3N1YnN5cy0mZ3Q7c3VfZ3JvdXApOwomIzQzOwomIzQzOwlwb3J0c19ncm91cCA9IGt6YWxsb2Nfb2JqKCpwb3J0c19ncm91cCk7CiYjNDM7CWlmICghcG9ydHNfZ3JvdXApIHsKJiM0MzsJCWtmcmVlKHN1YnN5c3RlbXNfZ3JvdXApOwomIzQzOwkJbnZtZXRfZGVsX2Rpc2Nfc3Vic3lzKG5ldF9ucyk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwljb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUocG9ydHNfZ3JvdXAsCiYjNDM7CQkJJiMzNDtwb3J0cyYjMzQ7LCAmYW1wO252bWV0X3BvcnRzX3R5cGUpOwomIzQzOwljb25maWdmc19hZGRfZGVmYXVsdF9ncm91cChwb3J0c19ncm91cCwKJiM0MzsJCQkmYW1wO3N1YnN5cy0mZ3Q7c3VfZ3JvdXApOwomIzQzOwomIzQzOwlob3N0c19ncm91cCA9IGt6YWxsb2Nfb2JqKCpob3N0c19ncm91cCk7CiYjNDM7CWlmICghaG9zdHNfZ3JvdXApIHsKJiM0MzsJCWtmcmVlKHBvcnRzX2dyb3VwKTsKJiM0MzsJCWtmcmVlKHN1YnN5c3RlbXNfZ3JvdXApOwomIzQzOwkJbnZtZXRfZGVsX2Rpc2Nfc3Vic3lzKG5ldF9ucyk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwljb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoaG9zdHNfZ3JvdXAsCiYjNDM7CQkJJiMzNDtob3N0cyYjMzQ7LCAmYW1wO252bWV0X2hvc3RzX3R5cGUpOwomIzQzOwljb25maWdmc19hZGRfZGVmYXVsdF9ncm91cChob3N0c19ncm91cCwKJiM0MzsJCQkmYW1wO3N1YnN5cy0mZ3Q7c3VfZ3JvdXApOwomIzQzOwlzdHJzY3B5KHN1YnN5cy0mZ3Q7c3VfZ3JvdXAuY2dfaXRlbS5jaV9uYW1lYnVmLCAmIzM0O252bWV0JiMzNDssCiYjNDM7CQlzaXplb2Yoc3Vic3lzLSZndDtzdV9ncm91cC5jZ19pdGVtLmNpX25hbWVidWYpKTsKJiM0MzsJc3Vic3lzLSZndDtzdV9ncm91cC5jZ19pdGVtLmNpX3R5cGUgPSAmYW1wO252bWV0X3Jvb3RfdHlwZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG52bWV0X2NvbmZpZ2ZzX2NsZWFyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMsCiYjNDM7CQkJCQkgICBzdHJ1Y3QgbmV0ICpuZXRfbnMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgY29uZmlnX2dyb3VwICpnLCAqbjsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGcsIG4sICZhbXA7c3Vic3lzLSZndDtzdV9ncm91cC5kZWZhdWx0X2dyb3VwcywKJiM0MzsJCQkJIGdyb3VwX2VudHJ5KSB7CiYjNDM7CQlsaXN0X2RlbCgmYW1wO2ctJmd0O2dyb3VwX2VudHJ5KTsKJiM0MzsJCWNvbmZpZ19pdGVtX3B1dCgmYW1wO2ctJmd0O2NnX2l0ZW0pOwomIzQzOwkJa2ZyZWUoZyk7CiYjNDM7CX0KJiM0MzsJbnZtZXRfZGVsX2Rpc2Nfc3Vic3lzKG5ldF9ucyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gbnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtID0gewogCS5zdV9ncm91cCA9IHsKIAkJLmNnX2l0ZW0gPSB7CkBAIC0yMzY1LDMwICYjNDM7MjUxNSwxNCBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBudm1ldF9jb25maWdmc19zdWJzeXN0ZW0gPSB7CiAJCQkuY2lfdHlwZQk9ICZhbXA7bnZtZXRfcm9vdF90eXBlLAogCQl9LAogCX0sCiYjNDM7CS5maWxsX3N1YnN5c3RlbSA9IG52bWV0X2NvbmZpZ2ZzX2ZpbGxfc3Vic3lzdGVtLAomIzQzOwkuY2xlYXJfc3Vic3lzdGVtID0gbnZtZXRfY29uZmlnZnNfY2xlYXJfc3Vic3lzdGVtLAogfTsKIAogaW50IF9faW5pdCBudm1ldF9pbml0X2NvbmZpZ2ZzKHZvaWQpCiB7CiAJaW50IHJldDsKIAotCWNvbmZpZ19ncm91cF9pbml0KCZhbXA7bnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtLnN1X2dyb3VwKTsKLQltdXRleF9pbml0KCZhbXA7bnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtLnN1X211dGV4KTsKLQotCWNvbmZpZ19ncm91cF9pbml0X3R5cGVfbmFtZSgmYW1wO252bWV0X3N1YnN5c3RlbXNfZ3JvdXAsCi0JCQkmIzM0O3N1YnN5c3RlbXMmIzM0OywgJmFtcDtudm1ldF9zdWJzeXN0ZW1zX3R5cGUpOwotCWNvbmZpZ2ZzX2FkZF9kZWZhdWx0X2dyb3VwKCZhbXA7bnZtZXRfc3Vic3lzdGVtc19ncm91cCwKLQkJCSZhbXA7bnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtLnN1X2dyb3VwKTsKLQotCWNvbmZpZ19ncm91cF9pbml0X3R5cGVfbmFtZSgmYW1wO252bWV0X3BvcnRzX2dyb3VwLAotCQkJJiMzNDtwb3J0cyYjMzQ7LCAmYW1wO252bWV0X3BvcnRzX3R5cGUpOwotCWNvbmZpZ2ZzX2FkZF9kZWZhdWx0X2dyb3VwKCZhbXA7bnZtZXRfcG9ydHNfZ3JvdXAsCi0JCQkmYW1wO252bWV0X2NvbmZpZ2ZzX3N1YnN5c3RlbS5zdV9ncm91cCk7Ci0KLQljb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoJmFtcDtudm1ldF9ob3N0c19ncm91cCwKLQkJCSYjMzQ7aG9zdHMmIzM0OywgJmFtcDtudm1ldF9ob3N0c190eXBlKTsKLQljb25maWdmc19hZGRfZGVmYXVsdF9ncm91cCgmYW1wO252bWV0X2hvc3RzX2dyb3VwLAotCQkJJmFtcDtudm1ldF9jb25maWdmc19zdWJzeXN0ZW0uc3VfZ3JvdXApOwotCiAJcmV0ID0gY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtKCZhbXA7bnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtKTsKIAlpZiAocmV0KSB7CiAJCXByX2VycigmIzM0O2NvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbTogJWRcbiYjMzQ7LCByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMgYi9kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYwppbmRleCA2MmRkNTliOWFhNGYxYy4uMzk5ODliOGJhZTkyZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jCkBAIC0xNzk4LDIyICYjNDM7MTc5OCwyNyBAQCBzdGF0aWMgc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfZmluZF9nZXRfc3Vic3lzKHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0LAogCQljb25zdCBjaGFyICpzdWJzeXNucW4pCiB7CiAJc3RydWN0IG52bWV0X3N1YnN5c19saW5rICpwOwomIzQzOwlzdHJ1Y3QgbnZtZXRfc3Vic3lzICpkaXNjX3N1YnN5czsKIAogCWlmICghcG9ydCkKIAkJcmV0dXJuIE5VTEw7CiAKJiM0MzsJZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMocG9ydC0mZ3Q7bmV0X25zKTsKJiM0MzsJaWYgKCFkaXNjX3N1YnN5cykKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwogCWlmICghc3RyY21wKE5WTUVfRElTQ19TVUJTWVNfTkFNRSwgc3Vic3lzbnFuKSkgewotCQlpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKCZhbXA7bnZtZXRfZGlzY19zdWJzeXMtJmd0O3JlZikpCiYjNDM7CQlpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKCZhbXA7ZGlzY19zdWJzeXMtJmd0O3JlZikpCiAJCQlyZXR1cm4gTlVMTDsKLQkJcmV0dXJuIG52bWV0X2Rpc2Nfc3Vic3lzOwomIzQzOwkJcmV0dXJuIGRpc2Nfc3Vic3lzOwogCX0KIAogCWRvd25fcmVhZCgmYW1wO252bWV0X2NvbmZpZ19zZW0pOwotCWlmICghc3RybmNtcChudm1ldF9kaXNjX3N1YnN5cy0mZ3Q7c3Vic3lzbnFuLCBzdWJzeXNucW4sCiYjNDM7CWlmICghc3RybmNtcChkaXNjX3N1YnN5cy0mZ3Q7c3Vic3lzbnFuLCBzdWJzeXNucW4sCiAJCQkJTlZNRl9OUU5fU0laRSkpIHsKLQkJaWYgKGtyZWZfZ2V0X3VubGVzc196ZXJvKCZhbXA7bnZtZXRfZGlzY19zdWJzeXMtJmd0O3JlZikpIHsKJiM0MzsJCWlmIChrcmVmX2dldF91bmxlc3NfemVybygmYW1wO2Rpc2Nfc3Vic3lzLSZndDtyZWYpKSB7CiAJCQl1cF9yZWFkKCZhbXA7bnZtZXRfY29uZmlnX3NlbSk7Ci0JCQlyZXR1cm4gbnZtZXRfZGlzY19zdWJzeXM7CiYjNDM7CQkJcmV0dXJuIGRpc2Nfc3Vic3lzOwogCQl9CiAJfQogCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmFtcDtwb3J0LSZndDtzdWJzeXN0ZW1zLCBlbnRyeSkgewpAQCAtMTgzMCw3ICYjNDM7MTgzNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgbnZtZXRfc3Vic3lzICpudm1ldF9maW5kX2dldF9zdWJzeXMoc3RydWN0IG52bWV0X3BvcnQgKnBvcnQsCiB9CiAKIHN0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X3N1YnN5c19hbGxvYyhjb25zdCBjaGFyICpzdWJzeXNucW4sCi0JCWVudW0gbnZtZV9zdWJzeXNfdHlwZSB0eXBlKQomIzQzOwkJZW51bSBudm1lX3N1YnN5c190eXBlIHR5cGUsIHN0cnVjdCBuZXQgKm5ldF9ucykKIHsKIAlzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXM7CiAJY2hhciBzZXJpYWxbTlZNRVRfU05fTUFYX1NJWkUgLyAyXTsKQEAgLTE4ODgsMTAgJiM0MzsxODkzLDEyIEBAIHN0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X3N1YnN5c19hbGxvYyhjb25zdCBjaGFyICpzdWJzeXNucW4sCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtzdWJzeXMtJmd0O2N0cmxzKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3N1YnN5cy0mZ3Q7aG9zdHMpOwogCi0JcmV0ID0gbnZtZXRfZGVidWdmc19zdWJzeXNfc2V0dXAoc3Vic3lzKTsKLQlpZiAocmV0KQotCQlnb3RvIGZyZWVfc3Vic3lzbnFuOwotCiYjNDM7CS8qIERpc2FibGUgZGVidWdmcyBmb3Igbm9uLWluaXRpYWwgbmFtZXNwYWNlcyAqLwomIzQzOwlpZiAobmV0X25zID09ICZhbXA7aW5pdF9uZXQpIHsKJiM0MzsJCXJldCA9IG52bWV0X2RlYnVnZnNfc3Vic3lzX3NldHVwKHN1YnN5cyk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gZnJlZV9zdWJzeXNucW47CiYjNDM7CX0KIAlyZXR1cm4gc3Vic3lzOwogCiBmcmVlX3N1YnN5c25xbjoKQEAgLTE5NzYsMTggJiM0MzsxOTgzLDEyIEBAIHN0YXRpYyBpbnQgX19pbml0IG52bWV0X2luaXQodm9pZCkKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2ZyZWVfbnZtZXRfYWVuX3dvcmtfcXVldWU7CiAKLQllcnJvciA9IG52bWV0X2luaXRfZGlzY292ZXJ5KCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9leGl0X2RlYnVnZnM7Ci0KIAllcnJvciA9IG52bWV0X2luaXRfY29uZmlnZnMoKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2V4aXRfZGlzY292ZXJ5OwomIzQzOwkJZ290byBvdXRfZXhpdF9kZWJ1Z2ZzOwogCiAJcmV0dXJuIDA7CiAKLW91dF9leGl0X2Rpc2NvdmVyeToKLQludm1ldF9leGl0X2Rpc2NvdmVyeSgpOwogb3V0X2V4aXRfZGVidWdmczoKIAludm1ldF9leGl0X2RlYnVnZnMoKTsKIG91dF9mcmVlX252bWV0X2Flbl93b3JrX3F1ZXVlOgpAQCAtMjAwNiw3ICYjNDM7MjAwNyw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG52bWV0X2luaXQodm9pZCkKIHN0YXRpYyB2b2lkIF9fZXhpdCBudm1ldF9leGl0KHZvaWQpCiB7CiAJbnZtZXRfZXhpdF9jb25maWdmcygpOwotCW52bWV0X2V4aXRfZGlzY292ZXJ5KCk7CiAJbnZtZXRfZXhpdF9kZWJ1Z2ZzKCk7CiAJaWRhX2Rlc3Ryb3koJmFtcDtjbnRsaWRfaWRhKTsKIAlkZXN0cm95X3dvcmtxdWV1ZShudm1ldF9hZW5fd3EpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC9kaXNjb3ZlcnkuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvZGlzY292ZXJ5LmMKaW5kZXggMTE0ODY5ZDE2YTFmM2MuLmI0OTg0ZmM2NWJhNzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L2Rpc2NvdmVyeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvZGlzY292ZXJ5LmMKQEAgLTgsOSAmIzQzOzgsNDQgQEAKICNpbmNsdWRlICZsdDtnZW5lcmF0ZWQvdXRzcmVsZWFzZS5oJmd0OwogI2luY2x1ZGUgJiMzNDtudm1ldC5oJiMzNDsKIAotc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfZGlzY19zdWJzeXM7CiYjNDM7c3RhdGljIERFRklORV9YQVJSQVkobnZtZXRfZGlzY194YSk7CiAKLXN0YXRpYyB1NjQgbnZtZXRfZ2VuY3RyOwomIzQzO3N0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X2dldF9kaXNjX3N1YnN5cyhzdHJ1Y3QgbmV0ICpuZXRfbnMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXM7CiYjNDM7CXU2NCBuc19pZCA9IG52bWV0X2dldF9uc19pZChuZXRfbnMpOwomIzQzOwomIzQzOwlzdWJzeXMgPSB4YV9sb2FkKCZhbXA7bnZtZXRfZGlzY194YSwgbnNfaWQpOwomIzQzOwlyZXR1cm4gc3Vic3lzOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbnZtZXRfYWRkX2Rpc2Nfc3Vic3lzKHN0cnVjdCBuZXQgKm5ldF9ucykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzOwomIzQzOwl1NjQgbnNfaWQgPSBudm1ldF9nZXRfbnNfaWQobmV0X25zKTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZGlzY19zdWJzeXMgPSBudm1ldF9zdWJzeXNfYWxsb2MoTlZNRV9ESVNDX1NVQlNZU19OQU1FLAomIzQzOwkJCQkJIE5WTUVfTlFOX0NVUlIsIG5ldF9ucyk7CiYjNDM7CWlmIChJU19FUlIoZGlzY19zdWJzeXMpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoZGlzY19zdWJzeXMpOwomIzQzOwllcnIgPSB4YV9pbnNlcnQoJmFtcDtudm1ldF9kaXNjX3hhLCBuc19pZCwKJiM0MzsJCQlkaXNjX3N1YnN5cywgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmIChlcnIgJmx0OyAwKQomIzQzOwkJbnZtZXRfc3Vic3lzX3B1dChkaXNjX3N1YnN5cyk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbnZtZXRfZGVsX2Rpc2Nfc3Vic3lzKHN0cnVjdCBuZXQgKm5ldF9ucykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzOwomIzQzOwl1NjQgbnNfaWQgPSBudm1ldF9nZXRfbnNfaWQobmV0X25zKTsKJiM0MzsKJiM0MzsJZGlzY19zdWJzeXMgPSB4YV9lcmFzZSgmYW1wO252bWV0X2Rpc2NfeGEsIG5zX2lkKTsKJiM0MzsJaWYgKGRpc2Nfc3Vic3lzKQomIzQzOwkJbnZtZXRfc3Vic3lzX3B1dChkaXNjX3N1YnN5cyk7CiYjNDM7fQogCiBzdGF0aWMgdm9pZCBfX252bWV0X2Rpc2NfY2hhbmdlZChzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCwKIAkJCQkgc3RydWN0IG52bWV0X2N0cmwgKmN0cmwpCkBAIC0yOSwxOCAmIzQzOzY0LDIyIEBAIHZvaWQgbnZtZXRfcG9ydF9kaXNjX2NoYW5nZWQoc3RydWN0IG52bWV0X3BvcnQgKnBvcnQsCiAJCQkgICAgIHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cykKIHsKIAlzdHJ1Y3QgbnZtZXRfY3RybCAqY3RybDsKJiM0MzsJc3RydWN0IG52bWV0X3N1YnN5cyAqZGlzY19zdWJzeXM7CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7bnZtZXRfY29uZmlnX3NlbSk7Ci0JbnZtZXRfZ2VuY3RyJiM0MzsmIzQzOzsKJiM0MzsJZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMocG9ydC0mZ3Q7bmV0X25zKTsKJiM0MzsJaWYgKFdBUk5fT04oIWRpc2Nfc3Vic3lzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJZGlzY19zdWJzeXMtJmd0O2dlbmN0ciYjNDM7JiM0Mzs7CiAKLQltdXRleF9sb2NrKCZhbXA7bnZtZXRfZGlzY19zdWJzeXMtJmd0O2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY3RybCwgJmFtcDtudm1ldF9kaXNjX3N1YnN5cy0mZ3Q7Y3RybHMsIHN1YnN5c19lbnRyeSkgewomIzQzOwltdXRleF9sb2NrKCZhbXA7ZGlzY19zdWJzeXMtJmd0O2xvY2spOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsICZhbXA7ZGlzY19zdWJzeXMtJmd0O2N0cmxzLCBzdWJzeXNfZW50cnkpIHsKIAkJaWYgKHN1YnN5cyAmYW1wOyZhbXA7ICFudm1ldF9ob3N0X2FsbG93ZWQoc3Vic3lzLCBjdHJsLSZndDtob3N0bnFuKSkKIAkJCWNvbnRpbnVlOwogCiAJCV9fbnZtZXRfZGlzY19jaGFuZ2VkKHBvcnQsIGN0cmwpOwogCX0KLQltdXRleF91bmxvY2soJmFtcDtudm1ldF9kaXNjX3N1YnN5cy0mZ3Q7bG9jayk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2Rpc2Nfc3Vic3lzLSZndDtsb2NrKTsKIAogCS8qIElmIHRyYW5zcG9ydCBjYW4gc2lnbmFsIGNoYW5nZSwgbm90aWZ5IHRyYW5zcG9ydCAqLwogCWlmIChwb3J0LSZndDt0cl9vcHMgJmFtcDsmYW1wOyBwb3J0LSZndDt0cl9vcHMtJmd0O2Rpc2NvdmVyeV9jaGcpCkBAIC01MiwxNSAmIzQzOzkxLDE5IEBAIHN0YXRpYyB2b2lkIF9fbnZtZXRfc3Vic3lzX2Rpc2NfY2hhbmdlZChzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCwKIAkJCQkJc3RydWN0IG52bWV0X2hvc3QgKmhvc3QpCiB7CiAJc3RydWN0IG52bWV0X2N0cmwgKmN0cmw7CiYjNDM7CXN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzOwogCi0JbXV0ZXhfbG9jaygmYW1wO252bWV0X2Rpc2Nfc3Vic3lzLSZndDtsb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsICZhbXA7bnZtZXRfZGlzY19zdWJzeXMtJmd0O2N0cmxzLCBzdWJzeXNfZW50cnkpIHsKJiM0MzsJZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMocG9ydC0mZ3Q7bmV0X25zKTsKJiM0MzsJaWYgKFdBUk5fT04oIWRpc2Nfc3Vic3lzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2Rpc2Nfc3Vic3lzLSZndDtsb2NrKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShjdHJsLCAmYW1wO2Rpc2Nfc3Vic3lzLSZndDtjdHJscywgc3Vic3lzX2VudHJ5KSB7CiAJCWlmIChob3N0ICZhbXA7JmFtcDsgc3RyY21wKG52bWV0X2hvc3RfbmFtZShob3N0KSwgY3RybC0mZ3Q7aG9zdG5xbikpCiAJCQljb250aW51ZTsKIAogCQlfX252bWV0X2Rpc2NfY2hhbmdlZChwb3J0LCBjdHJsKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7bnZtZXRfZGlzY19zdWJzeXMtJmd0O2xvY2spOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtkaXNjX3N1YnN5cy0mZ3Q7bG9jayk7CiB9CiAKIHZvaWQgbnZtZXRfc3Vic3lzX2Rpc2NfY2hhbmdlZChzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMsCkBAIC02OCwxMSAmIzQzOzExMSwxOCBAQCB2b2lkIG52bWV0X3N1YnN5c19kaXNjX2NoYW5nZWQoc3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzLAogewogCXN0cnVjdCBudm1ldF9wb3J0ICpwb3J0OwogCXN0cnVjdCBudm1ldF9zdWJzeXNfbGluayAqczsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCAqcG9ydF9saXN0OwomIzQzOwlzdHJ1Y3QgbnZtZXRfc3Vic3lzICpkaXNjX3N1YnN5czsKJiM0MzsJc3RydWN0IG5ldCAqbmV0X25zID0gY29uZmlnZnNfbnNfZnJvbV9ncm91cCgmYW1wO3N1YnN5cy0mZ3Q7Z3JvdXApOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO252bWV0X2NvbmZpZ19zZW0pOwotCW52bWV0X2dlbmN0ciYjNDM7JiM0Mzs7CiYjNDM7CWRpc2Nfc3Vic3lzID0gbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzKG5ldF9ucyk7CiYjNDM7CWlmIChXQVJOX09OKCFkaXNjX3N1YnN5cykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWRpc2Nfc3Vic3lzLSZndDtnZW5jdHImIzQzOyYjNDM7OwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBudm1ldF9wb3J0cywgZ2xvYmFsX2VudHJ5KQomIzQzOwlwb3J0X2xpc3QgPSBudm1ldF9nZXRfcG9ydF9saXN0KG5ldF9ucyk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgcG9ydF9saXN0LCBnbG9iYWxfZW50cnkpCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocywgJmFtcDtwb3J0LSZndDtzdWJzeXN0ZW1zLCBlbnRyeSkgewogCQkJaWYgKHMtJmd0O3N1YnN5cyAhPSBzdWJzeXMpCiAJCQkJY29udGludWU7CkBAIC0xNzMsNiAmIzQzOzIyMyw3IEBAIHN0YXRpYyB2b2lkIG52bWV0X2V4ZWN1dGVfZGlzY19nZXRfbG9nX3BhZ2Uoc3RydWN0IG52bWV0X3JlcSAqcmVxKQogCXUxNiBzdGF0dXMgPSAwOwogCXZvaWQgKmJ1ZmZlcjsKIAljaGFyIHRyYWRkcltOVk1GX1RSQUREUl9TSVpFXTsKJiM0MzsJc3RydWN0IG52bWV0X3N1YnN5cyAqZGlzY19zdWJzeXM7CiAKIAlpZiAoIW52bWV0X2NoZWNrX3RyYW5zZmVyX2xlbihyZXEsIGRhdGFfbGVuKSkKIAkJcmV0dXJuOwpAQCAtMjA3LDEwICYjNDM7MjU4LDEyIEBAIHN0YXRpYyB2b2lkIG52bWV0X2V4ZWN1dGVfZGlzY19nZXRfbG9nX3BhZ2Uoc3RydWN0IG52bWV0X3JlcSAqcmVxKQogCX0KIAloZHIgPSBidWZmZXI7CiAKJiM0MzsJZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMocmVxLSZndDtwb3J0LSZndDtuZXRfbnMpOwomIzQzOwogCW52bWV0X3NldF9kaXNjX3RyYWRkcihyZXEsIHJlcS0mZ3Q7cG9ydCwgdHJhZGRyKTsKIAogCW52bWV0X2Zvcm1hdF9kaXNjb3ZlcnlfZW50cnkoaGRyLCByZXEtJmd0O3BvcnQsCi0JCQkJICAgICBudm1ldF9kaXNjX3N1YnN5cy0mZ3Q7c3Vic3lzbnFuLAomIzQzOwkJCQkgICAgIGRpc2Nfc3Vic3lzLSZndDtzdWJzeXNucW4sCiAJCQkJICAgICB0cmFkZHIsIE5WTUVfTlFOX0NVUlIsIG51bXJlYyk7CiAJbnVtcmVjJiM0MzsmIzQzOzsKIApAQCAtMjM1LDcgJiM0MzsyODgsNyBAQCBzdGF0aWMgdm9pZCBudm1ldF9leGVjdXRlX2Rpc2NfZ2V0X2xvZ19wYWdlKHN0cnVjdCBudm1ldF9yZXEgKnJlcSkKIAkJbnVtcmVjJiM0MzsmIzQzOzsKIAl9CiAKLQloZHItJmd0O2dlbmN0ciA9IGNwdV90b19sZTY0KG52bWV0X2dlbmN0cik7CiYjNDM7CWhkci0mZ3Q7Z2VuY3RyID0gY3B1X3RvX2xlNjQoZGlzY19zdWJzeXMtJmd0O2dlbmN0cik7CiAJaGRyLSZndDtudW1yZWMgPSBjcHVfdG9fbGU2NChudW1yZWMpOwogCWhkci0mZ3Q7cmVjZm10ID0gY3B1X3RvX2xlMTYoMCk7CiAKQEAgLTQyOCwxNSAmIzQzOzQ4MSwzIEBAIHUxNiBudm1ldF9wYXJzZV9kaXNjb3ZlcnlfY21kKHN0cnVjdCBudm1ldF9yZXEgKnJlcSkKIAl9CiAKIH0KLQotaW50IF9faW5pdCBudm1ldF9pbml0X2Rpc2NvdmVyeSh2b2lkKQotewotCW52bWV0X2Rpc2Nfc3Vic3lzID0KLQkJbnZtZXRfc3Vic3lzX2FsbG9jKE5WTUVfRElTQ19TVUJTWVNfTkFNRSwgTlZNRV9OUU5fQ1VSUik7Ci0JcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhudm1ldF9kaXNjX3N1YnN5cyk7Ci19Ci0KLXZvaWQgbnZtZXRfZXhpdF9kaXNjb3Zlcnkodm9pZCkKLXsKLQludm1ldF9zdWJzeXNfcHV0KG52bWV0X2Rpc2Nfc3Vic3lzKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jIGIvZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmMKaW5kZXggZmNiMWY4MTg2ZmRkMGQuLjBlZGQ2OTA5MDJjZTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYwpAQCAtOSw2ICYjNDM7OSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbnZtZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhcnNlci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uc3Byb3h5LmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O252bWV0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9ob3N0L252bWUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2hvc3QvZmFicmljcy5oJiMzNDsKQEAgLTUzOCw2ICYjNDM7NTM5LDkgQEAgc3RhdGljIHN0cnVjdCBudm1ldF9wb3J0ICpudm1lX2xvb3BfZmluZF9wb3J0KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpCiAKIAltdXRleF9sb2NrKCZhbXA7bnZtZV9sb29wX3BvcnRzX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZhbXA7bnZtZV9sb29wX3BvcnRzLCBlbnRyeSkgewomIzQzOwkJLyogU2tpcCBwb3J0cyBmcm9tIG5vbi1tYXRjaGluZyBuYW1lc3BhY2VzICovCiYjNDM7CQlpZiAocC0mZ3Q7bmV0X25zICE9IGN1cnJlbnQtJmd0O25zcHJveHktJmd0O25ldF9ucykKJiM0MzsJCQljb250aW51ZTsKIAkJLyogaWYgbm8gdHJhbnNwb3J0IGFkZHJlc3MgaXMgc3BlY2lmaWVkIHVzZSB0aGUgZmlyc3QgcG9ydCAqLwogCQlpZiAoKGN0cmwtJmd0O29wdHMtJmd0O21hc2sgJmFtcDsgTlZNRl9PUFRfVFJBRERSKSAmYW1wOyZhbXA7CiAJCSAgICBzdHJjbXAoY3RybC0mZ3Q7b3B0cy0mZ3Q7dHJhZGRyLCBwLSZndDtkaXNjX2FkZHIudHJhZGRyKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaCBiL2RyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaAppbmRleCAzMzA1YTg4Njg0ZWNhYi4uNjgxZjkzNWQ4MDA4NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmgKQEAgLTIxMCw2ICYjNDM7MjEwLDcgQEAgc3RydWN0IG52bWV0X3BvcnQgewogCXN0cnVjdCBudm1ldF9hbmFfZ3JvdXAJCWFuYV9kZWZhdWx0X2dyb3VwOwogCWVudW0gbnZtZV9hbmFfc3RhdGUJCSphbmFfc3RhdGU7CiAJc3RydWN0IGtleQkJCSprZXlyaW5nOwomIzQzOwlzdHJ1Y3QgbmV0CQkJKm5ldF9uczsKIAl2b2lkCQkJCSpwcml2OwogCWJvb2wJCQkJZW5hYmxlZDsKIAlpbnQJCQkJaW5saW5lX2RhdGFfc2l6ZTsKQEAgLTMyNSw2ICYjNDM7MzI2LDkgQEAgc3RydWN0IG52bWV0X3N1YnN5cyB7CiAJdTE2CQkJY250bGlkX21pbjsKIAl1MTYJCQljbnRsaWRfbWF4OwogCiYjNDM7CS8qIEZvciBkaXNjb3Zlcnkgc3Vic3lzdGVtcyAqLwomIzQzOwl1NjQgZ2VuY3RyOwomIzQzOwogCXN0cnVjdCBsaXN0X2hlYWQJY3RybHM7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWhvc3RzOwpAQCAtNjI2LDcgJiM0Mzs2MzAsNyBAQCBzc2l6ZV90IG52bWV0X2N0cmxfaG9zdF90cmFkZHIoc3RydWN0IG52bWV0X2N0cmwgKmN0cmwsCiAJCWNoYXIgKnRyYWRkciwgc2l6ZV90IHRyYWRkcl9sZW4pOwogCiBzdHJ1Y3QgbnZtZXRfc3Vic3lzICpudm1ldF9zdWJzeXNfYWxsb2MoY29uc3QgY2hhciAqc3Vic3lzbnFuLAotCQllbnVtIG52bWVfc3Vic3lzX3R5cGUgdHlwZSk7CiYjNDM7CQllbnVtIG52bWVfc3Vic3lzX3R5cGUgdHlwZSwgc3RydWN0IG5ldCAqbmV0X25zKTsKIHZvaWQgbnZtZXRfc3Vic3lzX3B1dChzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMpOwogdm9pZCBudm1ldF9zdWJzeXNfZGVsX2N0cmxzKHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cyk7CiAKQEAgLTY2Miw3ICYjNDM7NjY2LDYgQEAgdTE2IG52bWV0X3plcm9fc2dsKHN0cnVjdCBudm1ldF9yZXEgKnJlcSwgb2ZmX3Qgb2ZmLCBzaXplX3QgbGVuKTsKIHUzMiBudm1ldF9nZXRfbG9nX3BhZ2VfbGVuKHN0cnVjdCBudm1lX2NvbW1hbmQgKmNtZCk7CiB1NjQgbnZtZXRfZ2V0X2xvZ19wYWdlX29mZnNldChzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbWQpOwogCi1leHRlcm4gc3RydWN0IGxpc3RfaGVhZCAqbnZtZXRfcG9ydHM7CiB2b2lkIG52bWV0X3BvcnRfZGlzY19jaGFuZ2VkKHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0LAogCQlzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMpOwogdm9pZCBudm1ldF9zdWJzeXNfZGlzY19jaGFuZ2VkKHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cywKQEAgLTY5NiwxMSAmIzQzOzY5OSwxMyBAQCB2b2lkIG52bWV0X2FkZF9hc3luY19ldmVudChzdHJ1Y3QgbnZtZXRfY3RybCAqY3RybCwgdTggZXZlbnRfdHlwZSwKIAogaW50IF9faW5pdCBudm1ldF9pbml0X2NvbmZpZ2ZzKHZvaWQpOwogdm9pZCBfX2V4aXQgbnZtZXRfZXhpdF9jb25maWdmcyh2b2lkKTsKJiM0MztleHRlcm4gc3RydWN0IGxpc3RfaGVhZCAqbnZtZXRfZ2V0X3BvcnRfbGlzdChzdHJ1Y3QgbmV0ICpuZXRfbnMpOwogCi1pbnQgX19pbml0IG52bWV0X2luaXRfZGlzY292ZXJ5KHZvaWQpOwotdm9pZCBudm1ldF9leGl0X2Rpc2NvdmVyeSh2b2lkKTsKJiM0MztleHRlcm4gdTY0IG52bWV0X2dldF9uc19pZChzdHJ1Y3QgbmV0ICpuZXRfbnMpOwomIzQzO2V4dGVybiBpbnQgbnZtZXRfYWRkX2Rpc2Nfc3Vic3lzKHN0cnVjdCBuZXQgKm5ldF9ucyk7CiYjNDM7ZXh0ZXJuIHZvaWQgbnZtZXRfZGVsX2Rpc2Nfc3Vic3lzKHN0cnVjdCBuZXQgKm5ldF9ucyk7CiYjNDM7ZXh0ZXJuIHN0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X2dldF9kaXNjX3N1YnN5cyhzdHJ1Y3QgbmV0ICpuZXRfbnMpOwogCi1leHRlcm4gc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfZGlzY19zdWJzeXM7CiBleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSBudm1ldF9jb25maWdfc2VtOwogCiBleHRlcm4gdTMyIG52bWV0X2FuYV9ncm91cF9lbmFibGVkW05WTUVUX01BWF9BTkFHUlBTICYjNDM7IDFdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC9yZG1hLmMgYi9kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuYwppbmRleCBhYzI2ZjRmNzc0YzRkZS4uY2FkMjM5MWE2ZDBhNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvcmRtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvcmRtYS5jCkBAIC0xODcwLDggJiM0MzsxODcwLDggQEAgc3RhdGljIGludCBudm1ldF9yZG1hX2VuYWJsZV9wb3J0KHN0cnVjdCBudm1ldF9yZG1hX3BvcnQgKnBvcnQpCiAJc3RydWN0IHJkbWFfY21faWQgKmNtX2lkOwogCWludCByZXQ7CiAKLQljbV9pZCA9IHJkbWFfY3JlYXRlX2lkKCZhbXA7aW5pdF9uZXQsIG52bWV0X3JkbWFfY21faGFuZGxlciwgcG9ydCwKLQkJCVJETUFfUFNfVENQLCBJQl9RUFRfUkMpOwomIzQzOwljbV9pZCA9IHJkbWFfY3JlYXRlX2lkKHBvcnQtJmd0O25wb3J0LSZndDtuZXRfbnMsIG52bWV0X3JkbWFfY21faGFuZGxlciwKJiM0MzsJCQlwb3J0LCBSRE1BX1BTX1RDUCwgSUJfUVBUX1JDKTsKIAlpZiAoSVNfRVJSKGNtX2lkKSkgewogCQlwcl9lcnIoJiMzNDtDTSBJRCBjcmVhdGlvbiBmYWlsZWRcbiYjMzQ7KTsKIAkJcmV0dXJuIFBUUl9FUlIoY21faWQpOwpAQCAtMTk2NCw3ICYjNDM7MTk2NCw3IEBAIHN0YXRpYyBpbnQgbnZtZXRfcmRtYV9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpCiAJCW5wb3J0LSZndDttYXhfcXVldWVfc2l6ZSA9IE5WTUVfUkRNQV9NQVhfUVVFVUVfU0laRTsKIAl9CiAKLQlyZXQgPSBpbmV0X3B0b25fd2l0aF9zY29wZSgmYW1wO2luaXRfbmV0LCBhZiwgbnBvcnQtJmd0O2Rpc2NfYWRkci50cmFkZHIsCiYjNDM7CXJldCA9IGluZXRfcHRvbl93aXRoX3Njb3BlKG5wb3J0LSZndDtuZXRfbnMsIGFmLCBucG9ydC0mZ3Q7ZGlzY19hZGRyLnRyYWRkciwKIAkJCW5wb3J0LSZndDtkaXNjX2FkZHIudHJzdmNpZCwgJmFtcDtwb3J0LSZndDthZGRyKTsKIAlpZiAocmV0KSB7CiAJCXByX2VycigmIzM0O21hbGZvcm1lZCBpcC9wb3J0IHBhc3NlZDogJXM6JXNcbiYjMzQ7LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMKaW5kZXggMTVjNTJmMWY5NWYxYjAuLjAxNmJlZjY1YTc2ZGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMKQEAgLTIwNzQsNyAmIzQzOzIwNzQsNyBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpCiAJCWdvdG8gZXJyX3BvcnQ7CiAJfQogCi0JcmV0ID0gaW5ldF9wdG9uX3dpdGhfc2NvcGUoJmFtcDtpbml0X25ldCwgYWYsIG5wb3J0LSZndDtkaXNjX2FkZHIudHJhZGRyLAomIzQzOwlyZXQgPSBpbmV0X3B0b25fd2l0aF9zY29wZShucG9ydC0mZ3Q7bmV0X25zLCBhZiwgbnBvcnQtJmd0O2Rpc2NfYWRkci50cmFkZHIsCiAJCQlucG9ydC0mZ3Q7ZGlzY19hZGRyLnRyc3ZjaWQsICZhbXA7cG9ydC0mZ3Q7YWRkcik7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoJiMzNDttYWxmb3JtZWQgaXAvcG9ydCBwYXNzZWQ6ICVzOiVzXG4mIzM0OywKQEAgLTIwODcsOCAmIzQzOzIwODcsOCBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpCiAJaWYgKHBvcnQtJmd0O25wb3J0LSZndDtpbmxpbmVfZGF0YV9zaXplICZsdDsgMCkKIAkJcG9ydC0mZ3Q7bnBvcnQtJmd0O2lubGluZV9kYXRhX3NpemUgPSBOVk1FVF9UQ1BfREVGX0lOTElORV9EQVRBX1NJWkU7CiAKLQlyZXQgPSBzb2NrX2NyZWF0ZShwb3J0LSZndDthZGRyLnNzX2ZhbWlseSwgU09DS19TVFJFQU0sCi0JCQkJSVBQUk9UT19UQ1AsICZhbXA7cG9ydC0mZ3Q7c29jayk7CiYjNDM7CXJldCA9IHNvY2tfY3JlYXRlX2tlcm4obnBvcnQtJmd0O25ldF9ucywgcG9ydC0mZ3Q7YWRkci5zc19mYW1pbHksIFNPQ0tfU1RSRUFNLAomIzQzOwkJCSAgICBJUFBST1RPX1RDUCwgJmFtcDtwb3J0LSZndDtzb2NrKTsKIAlpZiAocmV0KSB7CiAJCXByX2VycigmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBzb2NrZXRcbiYjMzQ7KTsKIAkJZ290byBlcnJfcG9ydDsKZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL2NvbmZpZ2ZzX2ludGVybmFsLmggYi9mcy9jb25maWdmcy9jb25maWdmc19pbnRlcm5hbC5oCmluZGV4IGFjZGVlYThlMmQ2OWFjLi4zNWVkZGMyNzRiODg3OSAxMDA2NDQKLS0tIGEvZnMvY29uZmlnZnMvY29uZmlnZnNfaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9jb25maWdmcy9jb25maWdmc19pbnRlcm5hbC5oCkBAIC00NCw2ICYjNDM7NDQsMTcgQEAgc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCB7CiAJc3RydWN0IGNvbmZpZ2ZzX2ZyYWdtZW50ICpzX2ZyYWc7CiB9OwogCiYjNDM7c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gewomIzQzOwlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50IHJvb3Q7CiYjNDM7CXN0cnVjdCBjb25maWdfZ3JvdXAgZ3JvdXA7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgc3Vic3lzX2xpc3Q7CiYjNDM7CXN0cnVjdCBtdXRleCBzdWJzeXNfbXV0ZXg7CiYjNDM7CXN0cnVjdCB2ZnNtb3VudCAqbW50OwomIzQzOwlpbnQgbW50X2NvdW50OwomIzQzOwlzdHJ1Y3QgbmV0ICpuZXRfbnM7CiYjNDM7CXJlZmNvdW50X3QgcmVmOwomIzQzO307CiYjNDM7CiAjZGVmaW5lIENPTkZJR0ZTX1JPT1QJCTB4MDAwMQogI2RlZmluZSBDT05GSUdGU19ESVIJCTB4MDAwMgogI2RlZmluZSBDT05GSUdGU19JVEVNX0FUVFIJMHgwMDA0CkBAIC02Myw3ICYjNDM7NzQsNyBAQCBleHRlcm4gc3BpbmxvY2tfdCBjb25maWdmc19kaXJlbnRfbG9jazsKIAogZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpjb25maWdmc19kaXJfY2FjaGVwOwogCi1leHRlcm4gaW50IGNvbmZpZ2ZzX2lzX3Jvb3Qoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKTsKJiM0MztleHRlcm4gYm9vbCBjb25maWdmc19pc19yb290KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSk7CiAKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKiBjb25maWdmc19uZXdfaW5vZGUodW1vZGVfdCBtb2RlLCBzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICosIHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmNvbmZpZ2ZzX2NyZWF0ZShzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QgbW9kZSk7CkBAIC03OSw4ICYjNDM7OTAsMTQgQEAgZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBjb25maWdmc19nZXRfbmFtZShzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZCk7CiBleHRlcm4gaW50IGNvbmZpZ2ZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCQkgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmlhdHRyKTsKIAotZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmNvbmZpZ2ZzX3Bpbl9mcyh2b2lkKTsKLWV4dGVybiB2b2lkIGNvbmZpZ2ZzX3JlbGVhc2VfZnModm9pZCk7CiYjNDM7ZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmNvbmZpZ2ZzX3Bpbl9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKJiM0MztleHRlcm4gdm9pZCBjb25maWdmc19yZWxlYXNlX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwomIzQzO2V4dGVybiBzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqY29uZmlnZnNfZ2V0X3N1cGVyX2luZm8oc3RydWN0IG5ldCAqbmV0X25zKTsKJiM0MztleHRlcm4gdm9pZCBjb25maWdmc19wdXRfc3VwZXJfaW5mbyhzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyk7CiYjNDM7ZXh0ZXJuIHZvaWQgY29uZmlnZnNfbGlua19zdWJzeXN0ZW1zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiYjNDM7CQkJCSAgICAgc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8pOwomIzQzO2V4dGVybiB2b2lkIGNvbmZpZ2ZzX3VubGlua19zdWJzeXN0ZW1zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyk7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvbmZpZ2ZzX2Rpcl9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29uZmlnZnNfZmlsZV9vcGVyYXRpb25zOwpkaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvZGlyLmMgYi9mcy9jb25maWdmcy9kaXIuYwppbmRleCAzYzg4ZjEzZjFjYTJlOS4uM2QzOWE2YzFhNDE2MzYgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NvbmZpZ2ZzL2Rpci5jCkBAIC0zNCwxNCAmIzQzOzM0LDYgQEAKICAqLwogREVGSU5FX1NQSU5MT0NLKGNvbmZpZ2ZzX2RpcmVudF9sb2NrKTsKIAotLyoKLSAqIEFsbCBvZiBsaW5rX29iai91bmxpbmtfb2JqL2xpbmtfZ3JvdXAvdW5saW5rX2dyb3VwIHJlcXVpcmUgdGhhdAotICogc3Vic3lzLSZndDtzdV9tdXRleCBpcyBoZWxkLgotICogQnV0IHBhcmVudCBjb25maWdmc19zdWJzeXN0ZW0gaXMgTlVMTCB3aGVuIGNvbmZpZ19pdGVtIGlzIHJvb3QuCi0gKiBVc2UgdGhpcyBtdXRleCB3aGVuIGNvbmZpZ19pdGVtIGlzIHJvb3QuCi0gKi8KLXN0YXRpYyBERUZJTkVfTVVURVgoY29uZmlnZnNfc3Vic3lzdGVtX211dGV4KTsKLQogc3RhdGljIHZvaWQgY29uZmlnZnNfZF9pcHV0KHN0cnVjdCBkZW50cnkgKiBkZW50cnksCiAJCQkgICAgc3RydWN0IGlub2RlICogaW5vZGUpCiB7CkBAIC0xMTUyLDcgJiM0MzsxMTQ0LDcgQEAgaW50IGNvbmZpZ2ZzX2RlcGVuZF9pdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cywKIAkgKiBQaW4gdGhlIGNvbmZpZ2ZzIGZpbGVzeXN0ZW0uICBUaGlzIG1lYW5zIHdlIGNhbiBzYWZlbHkgYWNjZXNzCiAJICogdGhlIHJvb3Qgb2YgdGhlIGNvbmZpZ2ZzIGZpbGVzeXN0ZW0uCiAJICovCi0Jcm9vdCA9IGNvbmZpZ2ZzX3Bpbl9mcygpOwomIzQzOwlyb290ID0gY29uZmlnZnNfcGluX2ZzKE5VTEwpOwogCWlmIChJU19FUlIocm9vdCkpCiAJCXJldHVybiBQVFJfRVJSKHJvb3QpOwogCkBAIC0xMTc5LDcgJiM0MzsxMTcxLDcgQEAgaW50IGNvbmZpZ2ZzX2RlcGVuZF9pdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cywKIAkgKiBJZiB3ZSBzdWNjZWVkZWQsIHRoZSBmcyBpcyBwaW5uZWQgdmlhIG90aGVyIG1ldGhvZHMuICBJZiBub3QsCiAJICogd2UmIzM5O3JlIGRvbmUgd2l0aCBpdCBhbnl3YXkuICBTbyByZWxlYXNlX2ZzKCkgaXMgYWx3YXlzIHJpZ2h0LgogCSAqLwotCWNvbmZpZ2ZzX3JlbGVhc2VfZnMoKTsKJiM0MzsJY29uZmlnZnNfcmVsZWFzZV9mcyhOVUxMKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xODY5LDMyICYjNDM7MTg2MSwyNyBAQCB2b2lkIGNvbmZpZ2ZzX3VucmVnaXN0ZXJfZGVmYXVsdF9ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCkKIH0KIEVYUE9SVF9TWU1CT0woY29uZmlnZnNfdW5yZWdpc3Rlcl9kZWZhdWx0X2dyb3VwKTsKIAotaW50IGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpCiYjNDM7c3RhdGljIGludCBjb25maWdmc19saW5rX3Jvb3Qoc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gICppbmZvLAomIzQzOwkJCSAgICAgIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cywKJiM0MzsJCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpyb290KQogewotCWludCBlcnI7CiAJc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAgPSAmYW1wO3N1YnN5cy0mZ3Q7c3VfZ3JvdXA7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwotCXN0cnVjdCBkZW50cnkgKnJvb3Q7CiAJc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7CiAJc3RydWN0IGNvbmZpZ2ZzX2ZyYWdtZW50ICpmcmFnOwomIzQzOwlpbnQgZXJyOwogCiAJZnJhZyA9IG5ld19mcmFnbWVudCgpOwogCWlmICghZnJhZykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlyb290ID0gY29uZmlnZnNfcGluX2ZzKCk7Ci0JaWYgKElTX0VSUihyb290KSkgewotCQlwdXRfZnJhZ21lbnQoZnJhZyk7Ci0JCXJldHVybiBQVFJfRVJSKHJvb3QpOwotCX0KLQogCWlmICghZ3JvdXAtJmd0O2NnX2l0ZW0uY2lfbmFtZSkKIAkJZ3JvdXAtJmd0O2NnX2l0ZW0uY2lfbmFtZSA9IGdyb3VwLSZndDtjZ19pdGVtLmNpX25hbWVidWY7CiAKIAlzZCA9IHJvb3QtJmd0O2RfZnNkYXRhOwotCW11dGV4X2xvY2soJmFtcDtjb25maWdmc19zdWJzeXN0ZW1fbXV0ZXgpOwomIzQzOwltdXRleF9sb2NrKCZhbXA7aW5mby0mZ3Q7c3Vic3lzX211dGV4KTsKIAlsaW5rX2dyb3VwKHRvX2NvbmZpZ19ncm91cChzZC0mZ3Q7c19lbGVtZW50KSwgZ3JvdXApOwotCW11dGV4X3VubG9jaygmYW1wO2NvbmZpZ2ZzX3N1YnN5c3RlbV9tdXRleCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2luZm8tJmd0O3N1YnN5c19tdXRleCk7CiAKIAlpbm9kZV9sb2NrX25lc3RlZChkX2lub2RlKHJvb3QpLCBJX01VVEVYX1BBUkVOVCk7CiAKQEAgLTE5MjEsMTcgJiM0MzsxOTA4LDEyMCBAQCBpbnQgY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cykKIAlpbm9kZV91bmxvY2soZF9pbm9kZShyb290KSk7CiAKIAlpZiAoZXJyKSB7Ci0JCW11dGV4X2xvY2soJmFtcDtjb25maWdmc19zdWJzeXN0ZW1fbXV0ZXgpOwomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO2luZm8tJmd0O3N1YnN5c19tdXRleCk7CiAJCXVubGlua19ncm91cChncm91cCk7Ci0JCW11dGV4X3VubG9jaygmYW1wO2NvbmZpZ2ZzX3N1YnN5c3RlbV9tdXRleCk7Ci0JCWNvbmZpZ2ZzX3JlbGVhc2VfZnMoKTsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2luZm8tJmd0O3N1YnN5c19tdXRleCk7CiAJfQogCXB1dF9mcmFnbWVudChmcmFnKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiAKJiM0MztpbnQgY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvOwomIzQzOwlzdHJ1Y3QgZGVudHJ5ICpyb290OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpbmZvID0gY29uZmlnZnNfZ2V0X3N1cGVyX2luZm8oJmFtcDtpbml0X25ldCk7CiYjNDM7CWlmIChXQVJOX09OKElTX0VSUihpbmZvKSkpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihpbmZvKTsKJiM0MzsKJiM0MzsJcm9vdCA9IGNvbmZpZ2ZzX3Bpbl9mcyhOVUxMKTsKJiM0MzsJaWYgKElTX0VSUihyb290KSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihyb290KTsKJiM0MzsJCWdvdG8gb3V0X3B1dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc3Vic3lzLSZndDtmaWxsX3N1YnN5c3RlbSkgewomIzQzOwkJSU5JVF9MSVNUX0hFQUQoJmFtcDtzdWJzeXMtJmd0O3N1X2xpbmspOwomIzQzOwkJbXV0ZXhfaW5pdCgmYW1wO3N1YnN5cy0mZ3Q7c3VfbXV0ZXgpOwomIzQzOwkJY29uZmlnX2dyb3VwX2luaXQoJmFtcDtzdWJzeXMtJmd0O3N1X2dyb3VwKTsKJiM0MzsJCWVyciA9IHN1YnN5cy0mZ3Q7ZmlsbF9zdWJzeXN0ZW0oc3Vic3lzLCBpbmZvLSZndDtuZXRfbnMpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIG91dF9yZWxlYXNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IGNvbmZpZ2ZzX2xpbmtfcm9vdChpbmZvLCBzdWJzeXMsIHJvb3QpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlpZiAoc3Vic3lzLSZndDtjbGVhcl9zdWJzeXN0ZW0pCiYjNDM7CQkJc3Vic3lzLSZndDtjbGVhcl9zdWJzeXN0ZW0oc3Vic3lzLCBpbmZvLSZndDtuZXRfbnMpOwomIzQzOwkJZ290byBvdXRfcmVsZWFzZTsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7aW5mby0mZ3Q7c3Vic3lzX211dGV4KTsKJiM0MzsJbGlzdF9hZGQoJmFtcDtzdWJzeXMtJmd0O3N1X2xpbmssICZhbXA7aW5mby0mZ3Q7c3Vic3lzX2xpc3QpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtpbmZvLSZndDtzdWJzeXNfbXV0ZXgpOwomIzQzOwomIzQzO291dF9yZWxlYXNlOgomIzQzOwlpZiAoZXJyKQomIzQzOwkJY29uZmlnZnNfcmVsZWFzZV9mcyhOVUxMKTsKJiM0MztvdXRfcHV0OgomIzQzOwljb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTsKIAlyZXR1cm4gZXJyOwogfQogCi12b2lkIGNvbmZpZ2ZzX3VucmVnaXN0ZXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cykKJiM0Mzt2b2lkIGNvbmZpZ2ZzX2xpbmtfc3Vic3lzdGVtcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAomIzQzOwkJCSAgICAgIHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqczsKJiM0MzsJc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKnBhcmVudCA9IGNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKCZhbXA7aW5pdF9uZXQpOwomIzQzOwlMSVNUX0hFQUQoc3Vic3lzX2xpc3QpOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTihJU19FUlIocGFyZW50KSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmICgoaW5mby0mZ3Q7bmV0X25zID09ICZhbXA7aW5pdF9uZXQpIHx8IFdBUk5fT04ocGFyZW50ID09IGluZm8pKSB7CiYjNDM7CQljb25maWdmc19wdXRfc3VwZXJfaW5mbyhwYXJlbnQpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwYXJlbnQtJmd0O3N1YnN5c19tdXRleCk7CiYjNDM7CWxpc3Rfc3BsaWNlX2luaXQoJmFtcDtwYXJlbnQtJmd0O3N1YnN5c19saXN0LCAmYW1wO3N1YnN5c19saXN0KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cGFyZW50LSZndDtzdWJzeXNfbXV0ZXgpOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHMsICZhbXA7c3Vic3lzX2xpc3QsIHN1X2xpbmspIHsKJiM0MzsJCXN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5czsKJiM0MzsJCXN0cnVjdCBkZW50cnkgKnJvb3Q7CiYjNDM7CQlpbnQgZXJyOwomIzQzOwomIzQzOwkJaWYgKCFzLSZndDtmaWxsX3N1YnN5c3RlbSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXN1YnN5cyA9IGt6YWxsb2Nfb2JqKCpzdWJzeXMpOwomIzQzOwkJaWYgKCFzdWJzeXMpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlzdWJzeXMtJmd0O2ZpbGxfc3Vic3lzdGVtID0gcy0mZ3Q7ZmlsbF9zdWJzeXN0ZW07CiYjNDM7CQlzdWJzeXMtJmd0O2NsZWFyX3N1YnN5c3RlbSA9IHMtJmd0O2NsZWFyX3N1YnN5c3RlbTsKJiM0MzsJCUlOSVRfTElTVF9IRUFEKCZhbXA7c3Vic3lzLSZndDtzdV9saW5rKTsKJiM0MzsJCW11dGV4X2luaXQoJmFtcDtzdWJzeXMtJmd0O3N1X211dGV4KTsKJiM0MzsJCWNvbmZpZ19ncm91cF9pbml0KCZhbXA7c3Vic3lzLSZndDtzdV9ncm91cCk7CiYjNDM7CQllcnIgPSBzdWJzeXMtJmd0O2ZpbGxfc3Vic3lzdGVtKHN1YnN5cywgaW5mby0mZ3Q7bmV0X25zKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlrZnJlZShzdWJzeXMpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJcm9vdCA9IGNvbmZpZ2ZzX3Bpbl9mcyhzYik7CiYjNDM7CQlpZiAoSVNfRVJSKHJvb3QpKSB7CiYjNDM7CQkJaWYgKHN1YnN5cy0mZ3Q7Y2xlYXJfc3Vic3lzdGVtKQomIzQzOwkJCQlzdWJzeXMtJmd0O2NsZWFyX3N1YnN5c3RlbShzdWJzeXMsIGluZm8tJmd0O25ldF9ucyk7CiYjNDM7CQkJa2ZyZWUoc3Vic3lzKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCWVyciA9IGNvbmZpZ2ZzX2xpbmtfcm9vdChpbmZvLCBzdWJzeXMsIHJvb3QpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCWNvbmZpZ2ZzX3JlbGVhc2VfZnMoc2IpOwomIzQzOwkJCWlmIChzdWJzeXMtJmd0O2NsZWFyX3N1YnN5c3RlbSkKJiM0MzsJCQkJc3Vic3lzLSZndDtjbGVhcl9zdWJzeXN0ZW0oc3Vic3lzLCBpbmZvLSZndDtuZXRfbnMpOwomIzQzOwkJCWtmcmVlKHN1YnN5cyk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7aW5mby0mZ3Q7c3Vic3lzX211dGV4KTsKJiM0MzsJCWxpc3RfYWRkKCZhbXA7c3Vic3lzLSZndDtzdV9saW5rLCAmYW1wO2luZm8tJmd0O3N1YnN5c19saXN0KTsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2luZm8tJmd0O3N1YnN5c19tdXRleCk7CiYjNDM7CX0KJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3BhcmVudC0mZ3Q7c3Vic3lzX211dGV4KTsKJiM0MzsJbGlzdF9zcGxpY2UoJmFtcDtzdWJzeXNfbGlzdCwgJmFtcDtwYXJlbnQtJmd0O3N1YnN5c19saXN0KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cGFyZW50LSZndDtzdWJzeXNfbXV0ZXgpOwomIzQzOwljb25maWdmc19wdXRfc3VwZXJfaW5mbyhwYXJlbnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBjb25maWdmc191bmxpbmtfcm9vdChzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpCiB7CiAJc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAgPSAmYW1wO3N1YnN5cy0mZ3Q7c3VfZ3JvdXA7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZGdldChncm91cC0mZ3Q7Y2dfaXRlbS5jaV9kZW50cnkpOwpAQCAtMTk0MSw3ICYjNDM7MjAzMSw4IEBAIHZvaWQgY29uZmlnZnNfdW5yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKQogCiAJaWYgKGRlbnRyeS0mZ3Q7ZF9wYXJlbnQgIT0gcm9vdCkgewogCQlwcl9lcnIoJiMzNDtUcmllZCB0byB1bnJlZ2lzdGVyIG5vbi1zdWJzeXN0ZW0hXG4mIzM0Oyk7Ci0JCXJldHVybjsKJiM0MzsJCWRwdXQoZGVudHJ5KTsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlkb3duX3dyaXRlKCZhbXA7ZnJhZy0mZ3Q7ZnJhZ19zZW0pOwpAQCAtMTk2OSwxMSAmIzQzOzIwNjAsNTAgQEAgdm9pZCBjb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpCiAJaW5vZGVfdW5sb2NrKGRfaW5vZGUocm9vdCkpOwogCiAJZHB1dChkZW50cnkpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBjb25maWdmc191bmxpbmtfc3Vic3lzdGVtcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAomIzQzOwkJCQlzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cywgKnM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtpbmZvLSZndDtzdWJzeXNfbXV0ZXgpOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3Vic3lzLCBzLCAmYW1wO2luZm8tJmd0O3N1YnN5c19saXN0LCBzdV9saW5rKSB7CiYjNDM7CQlsaXN0X2RlbF9pbml0KCZhbXA7c3Vic3lzLSZndDtzdV9saW5rKTsKJiM0MzsJCWlmICghY29uZmlnZnNfdW5saW5rX3Jvb3Qoc3Vic3lzKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChzdWJzeXMtJmd0O2NsZWFyX3N1YnN5c3RlbSkKJiM0MzsJCQlzdWJzeXMtJmd0O2NsZWFyX3N1YnN5c3RlbShzdWJzeXMsIGluZm8tJmd0O25ldF9ucyk7CiYjNDM7CQl1bmxpbmtfZ3JvdXAoJmFtcDtzdWJzeXMtJmd0O3N1X2dyb3VwKTsKJiM0MzsJCWNvbmZpZ2ZzX3JlbGVhc2VfZnMoc2IpOwomIzQzOwkJa2ZyZWUoc3Vic3lzKTsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtpbmZvLSZndDtzdWJzeXNfbXV0ZXgpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGNvbmZpZ2ZzX3VucmVnaXN0ZXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvOwomIzQzOwlzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCA9ICZhbXA7c3Vic3lzLSZndDtzdV9ncm91cDsKJiM0MzsKJiM0MzsJaW5mbyA9IGNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKCZhbXA7aW5pdF9uZXQpOwomIzQzOwlpZiAoV0FSTl9PTihJU19FUlIoaW5mbykpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoIWNvbmZpZ2ZzX3VubGlua19yb290KHN1YnN5cykpIHsKJiM0MzsJCWNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKGluZm8pOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiAKLQltdXRleF9sb2NrKCZhbXA7Y29uZmlnZnNfc3Vic3lzdGVtX211dGV4KTsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2luZm8tJmd0O3N1YnN5c19tdXRleCk7CiYjNDM7CWxpc3RfZGVsX2luaXQoJmFtcDtzdWJzeXMtJmd0O3N1X2xpbmspOwomIzQzOwlpZiAoc3Vic3lzLSZndDtjbGVhcl9zdWJzeXN0ZW0pCiYjNDM7CQlzdWJzeXMtJmd0O2NsZWFyX3N1YnN5c3RlbShzdWJzeXMsIGluZm8tJmd0O25ldF9ucyk7CiAJdW5saW5rX2dyb3VwKGdyb3VwKTsKLQltdXRleF91bmxvY2soJmFtcDtjb25maWdmc19zdWJzeXN0ZW1fbXV0ZXgpOwotCWNvbmZpZ2ZzX3JlbGVhc2VfZnMoKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7aW5mby0mZ3Q7c3Vic3lzX211dGV4KTsKJiM0MzsJY29uZmlnZnNfcmVsZWFzZV9mcyhOVUxMKTsKJiM0MzsJY29uZmlnZnNfcHV0X3N1cGVyX2luZm8oaW5mbyk7CiB9CiAKIEVYUE9SVF9TWU1CT0woY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtKTsKZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL21vdW50LmMgYi9mcy9jb25maWdmcy9tb3VudC5jCmluZGV4IDQ5MjlmMzQzMTE4OTQ2Li43OTQxMjU3ZDU1OGI3MiAxMDA2NDQKLS0tIGEvZnMvY29uZmlnZnMvbW91bnQuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jb25maWdmcy9tb3VudC5jCkBAIC0yMiwxMCAmIzQzOzIyLDE5IEBACiAvKiBSYW5kb20gbWFnaWMgbnVtYmVyICovCiAjZGVmaW5lIENPTkZJR0ZTX01BR0lDIDB4NjI2NTY1NzAKIAotc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqY29uZmlnZnNfbW91bnQgPSBOVUxMOwogc3RydWN0IGttZW1fY2FjaGUgKmNvbmZpZ2ZzX2Rpcl9jYWNoZXA7Ci1zdGF0aWMgaW50IGNvbmZpZ2ZzX21udF9jb3VudCA9IDA7CiYjNDM7c3RhdGljIERFRklORV9YQVJSQVkoY29uZmlnZnNfc3VwZXJfeGEpOwomIzQzO3N0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqY29uZmlnZnNfcm9vdDsKJiM0MztzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNvbmZpZ2ZzX3Bpbl9sb2NrKTsKIAomIzQzO3N0YXRpYyB1NjQgY29uZmlnZnNfbnNfaWQoc3RydWN0IG5ldCAqbmV0X25zKQomIzQzO3sKJiM0MzsJc3RydWN0IG5zX2NvbW1vbiAqbnMgPSBuZXRfbnMgPyB0b19uc19jb21tb24obmV0X25zKSA6IE5VTEw7CiYjNDM7CiYjNDM7CWlmICghbnMgfHwgbmV0X25zID09ICZhbXA7aW5pdF9uZXQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIG5zLSZndDtuc19pZDsKJiM0Mzt9CiAKIHN0YXRpYyB2b2lkIGNvbmZpZ2ZzX2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKQEAgLTQwLDI4ICYjNDM7NDksODIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGNvbmZpZ2ZzX29wcyA9IHsKIAkuZnJlZV9pbm9kZQk9IGNvbmZpZ2ZzX2ZyZWVfaW5vZGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCBjb25maWdmc19yb290X2dyb3VwID0gewotCS5jZ19pdGVtID0gewotCQkuY2lfbmFtZWJ1Zgk9ICYjMzQ7cm9vdCYjMzQ7LAotCQkuY2lfbmFtZQk9IGNvbmZpZ2ZzX3Jvb3RfZ3JvdXAuY2dfaXRlbS5jaV9uYW1lYnVmLAotCX0sCi19OwomIzQzO2Jvb2wgY29uZmlnZnNfaXNfcm9vdChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDsKJiM0MzsKJiM0MzsJaWYgKCFpdGVtLSZndDtjaV9kZW50cnkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CXNkID0gaXRlbS0mZ3Q7Y2lfZGVudHJ5LSZndDtkX2ZzZGF0YTsKJiM0MzsJcmV0dXJuICEhKHNkLSZndDtzX3R5cGUgJmFtcDsgQ09ORklHRlNfUk9PVCk7CiYjNDM7fQogCi1pbnQgY29uZmlnZnNfaXNfcm9vdChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCiYjNDM7c3RhdGljIHZvaWQgY29uZmlnZnNfZmlsbF9zdXBlcl9pbmZvKHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvKQogewotCXJldHVybiBpdGVtID09ICZhbXA7Y29uZmlnZnNfcm9vdF9ncm91cC5jZ19pdGVtOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO2luZm8tJmd0O3Jvb3Quc19zaWJsaW5nKTsKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtpbmZvLSZndDtyb290LnNfY2hpbGRyZW4pOwomIzQzOwlpbmZvLSZndDtyb290LnNfdHlwZSA9IENPTkZJR0ZTX1JPT1Q7CiYjNDM7CWluZm8tJmd0O3Jvb3Quc19lbGVtZW50ID0gJmFtcDtpbmZvLSZndDtncm91cC5jZ19pdGVtOwomIzQzOwlzdHJzY3B5KGluZm8tJmd0O2dyb3VwLmNnX2l0ZW0uY2lfbmFtZWJ1ZiwgJiMzNDtyb290JiMzNDssIDQpOwomIzQzOwlpbmZvLSZndDtncm91cC5jZ19pdGVtLmNpX25hbWUgPSBpbmZvLSZndDtncm91cC5jZ19pdGVtLmNpX25hbWVidWY7CiYjNDM7CWNvbmZpZ19ncm91cF9pbml0KCZhbXA7aW5mby0mZ3Q7Z3JvdXApOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO2luZm8tJmd0O3N1YnN5c19saXN0KTsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO2luZm8tJmd0O3N1YnN5c19tdXRleCk7CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO2luZm8tJmd0O3JlZiwgMSk7CiYjNDM7CWluZm8tJmd0O21udF9jb3VudCA9IDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfZGlyZW50IGNvbmZpZ2ZzX3Jvb3QgPSB7Ci0JLnNfc2libGluZwk9IExJU1RfSEVBRF9JTklUKGNvbmZpZ2ZzX3Jvb3Quc19zaWJsaW5nKSwKLQkuc19jaGlsZHJlbgk9IExJU1RfSEVBRF9JTklUKGNvbmZpZ2ZzX3Jvb3Quc19jaGlsZHJlbiksCi0JLnNfZWxlbWVudAk9ICZhbXA7Y29uZmlnZnNfcm9vdF9ncm91cC5jZ19pdGVtLAotCS5zX3R5cGUJCT0gQ09ORklHRlNfUk9PVCwKLQkuc19pYXR0cgk9IE5VTEwsCi19OwomIzQzO3N0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICpjb25maWdmc19nZXRfc3VwZXJfaW5mbyhzdHJ1Y3QgbmV0ICpuZXRfbnMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbzsKJiM0MzsJdTY0IG5zX2lkID0gY29uZmlnZnNfbnNfaWQobmV0X25zKTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJeGFfbG9jaygmYW1wO2NvbmZpZ2ZzX3N1cGVyX3hhKTsKJiM0MzsJaW5mbyA9IHhhX2xvYWQoJmFtcDtjb25maWdmc19zdXBlcl94YSwgbnNfaWQpOwomIzQzOwlpZiAoaW5mbykgewomIzQzOwkJaWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oKCZhbXA7aW5mby0mZ3Q7cmVmKSkpCiYjNDM7CQkJaW5mbyA9IEVSUl9QVFIoLUVCVVNZKTsKJiM0MzsJCXhhX3VubG9jaygmYW1wO2NvbmZpZ2ZzX3N1cGVyX3hhKTsKJiM0MzsJCXJldHVybiBpbmZvOwomIzQzOwl9CiYjNDM7CWluZm8gPSBremFsbG9jX29iaigqaW5mbyk7CiYjNDM7CWlmICghaW5mbykgewomIzQzOwkJeGFfdW5sb2NrKCZhbXA7Y29uZmlnZnNfc3VwZXJfeGEpOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaW5mby0mZ3Q7bmV0X25zID0gZ2V0X25ldChuZXRfbnMpOwomIzQzOwljb25maWdmc19maWxsX3N1cGVyX2luZm8oaW5mbyk7CiYjNDM7CWVyciA9IF9feGFfaW5zZXJ0KCZhbXA7Y29uZmlnZnNfc3VwZXJfeGEsIG5zX2lkLAomIzQzOwkJCSAgaW5mbywgR0ZQX0tFUk5FTCk7CiYjNDM7CXhhX3VubG9jaygmYW1wO2NvbmZpZ2ZzX3N1cGVyX3hhKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApIHsKJiM0MzsJCXB1dF9uZXQoaW5mby0mZ3Q7bmV0X25zKTsKJiM0MzsJCWtmcmVlKGluZm8pOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gaW5mbzsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBjb25maWdmc19wdXRfc3VwZXJfaW5mbyhzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CXU2NCBuc19pZCA9IGNvbmZpZ2ZzX25zX2lkKGluZm8tJmd0O25ldF9ucyk7CiYjNDM7CiYjNDM7CXhhX2xvY2soJmFtcDtjb25maWdmc19zdXBlcl94YSk7CiYjNDM7CWlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7aW5mby0mZ3Q7cmVmKSkgewomIzQzOwkJeGFfdW5sb2NrKCZhbXA7Y29uZmlnZnNfc3VwZXJfeGEpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CV9feGFfZXJhc2UoJmFtcDtjb25maWdmc19zdXBlcl94YSwgbnNfaWQpOwomIzQzOwl4YV91bmxvY2soJmFtcDtjb25maWdmc19zdXBlcl94YSk7CiYjNDM7CXB1dF9uZXQoaW5mby0mZ3Q7bmV0X25zKTsKJiM0MzsJa2ZyZWUoaW5mbyk7CiYjNDM7fQogCiBzdGF0aWMgaW50IGNvbmZpZ2ZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKQogewomIzQzOwlzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyA9IHNiLSZndDtzX2ZzX2luZm87CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgZGVudHJ5ICpyb290OwogCkBAIC03Miw2NiAmIzQzOzEzNSwxNjIgQEAgc3RhdGljIGludCBjb25maWdmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYykKIAlzYi0mZ3Q7c190aW1lX2dyYW4gPSAxOwogCiAJaW5vZGUgPSBjb25maWdmc19uZXdfaW5vZGUoU19JRkRJUiB8IFNfSVJXWFUgfCBTX0lSVUdPIHwgU19JWFVHTywKLQkJCQkgICAmYW1wO2NvbmZpZ2ZzX3Jvb3QsIHNiKTsKLQlpZiAoaW5vZGUpIHsKLQkJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2NvbmZpZ2ZzX3Jvb3RfaW5vZGVfb3BlcmF0aW9uczsKLQkJaW5vZGUtJmd0O2lfZm9wID0gJmFtcDtjb25maWdmc19kaXJfb3BlcmF0aW9uczsKLQkJLyogZGlyZWN0b3J5IGlub2RlcyBzdGFydCBvZmYgd2l0aCBpX25saW5rID09IDIgKGZvciAmIzM0Oy4mIzM0OyBlbnRyeSkgKi8KLQkJaW5jX25saW5rKGlub2RlKTsKLQl9IGVsc2UgewomIzQzOwkJCQkgICAmYW1wO2luZm8tJmd0O3Jvb3QsIHNiKTsKJiM0MzsJaWYgKElTX0VSUihpbm9kZSkpIHsKIAkJcHJfZGVidWcoJiMzNDtjb3VsZCBub3QgZ2V0IHJvb3QgaW5vZGVcbiYjMzQ7KTsKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQlyZXR1cm4gUFRSX0VSUihpbm9kZSk7CiAJfQomIzQzOwlpbm9kZS0mZ3Q7aV9vcCA9ICZhbXA7Y29uZmlnZnNfcm9vdF9pbm9kZV9vcGVyYXRpb25zOwomIzQzOwlpbm9kZS0mZ3Q7aV9mb3AgPSAmYW1wO2NvbmZpZ2ZzX2Rpcl9vcGVyYXRpb25zOwomIzQzOwkvKiBkaXJlY3RvcnkgaW5vZGVzIHN0YXJ0IG9mZiB3aXRoIGlfbmxpbmsgPT0gMiAoZm9yICYjMzQ7LiYjMzQ7IGVudHJ5KSAqLwomIzQzOwlpbmNfbmxpbmsoaW5vZGUpOwogCiAJcm9vdCA9IGRfbWFrZV9yb290KGlub2RlKTsKIAlpZiAoIXJvb3QpIHsKIAkJcHJfZGVidWcoJiMzNDslczogY291bGQgbm90IGdldCByb290IGRlbnRyeSFcbiYjMzQ7LF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWNvbmZpZ19ncm91cF9pbml0KCZhbXA7Y29uZmlnZnNfcm9vdF9ncm91cCk7Ci0JY29uZmlnZnNfcm9vdF9ncm91cC5jZ19pdGVtLmNpX2RlbnRyeSA9IHJvb3Q7Ci0Jcm9vdC0mZ3Q7ZF9mc2RhdGEgPSAmYW1wO2NvbmZpZ2ZzX3Jvb3Q7CiYjNDM7CWluZm8tJmd0O2dyb3VwLmNnX2l0ZW0uY2lfZGVudHJ5ID0gcm9vdDsKJiM0MzsJcm9vdC0mZ3Q7ZF9mc2RhdGEgPSAmYW1wO2luZm8tJmd0O3Jvb3Q7CiAJc2ItJmd0O3Nfcm9vdCA9IHJvb3Q7CiAJc2V0X2RlZmF1bHRfZF9vcChzYiwgJmFtcDtjb25maWdmc19kZW50cnlfb3BzKTsgLyogdGhlIHJlc3QgZ2V0IHRoYXQgKi8KIAlzYi0mZ3Q7c19kX2ZsYWdzIHw9IERDQUNIRV9ET05UQ0FDSEU7CiYjNDM7CiYjNDM7CWNvbmZpZ2ZzX2xpbmtfc3Vic3lzdGVtcyhzYiwgaW5mbyk7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY29uZmlnZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKQogewotCXJldHVybiBnZXRfdHJlZV9zaW5nbGUoZmMsIGNvbmZpZ2ZzX2ZpbGxfc3VwZXIpOwomIzQzOwlzdHJ1Y3QgbmV0ICpuZXRfbnMgPSBmYy0mZ3Q7ZnNfcHJpdmF0ZTsKJiM0MzsJc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm87CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWluZm8gPSBjb25maWdmc19nZXRfc3VwZXJfaW5mbyhuZXRfbnMpOwomIzQzOwlpZiAoSVNfRVJSKGluZm8pKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoaW5mbyk7CiYjNDM7CiYjNDM7CWVyciA9IGdldF90cmVlX2tleWVkKGZjLCBjb25maWdmc19maWxsX3N1cGVyLCBpbmZvKTsKJiM0MzsJaWYgKGVyciAmYW1wOyZhbXA7IGZjLSZndDtzX2ZzX2luZm8pCiYjNDM7CQljb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgY29uZmlnZnNfZnNfY29udGV4dF9mcmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXQgKm5ldF9ucyA9IGZjLSZndDtmc19wcml2YXRlOwomIzQzOwomIzQzOwlmYy0mZ3Q7ZnNfcHJpdmF0ZSA9IE5VTEw7CiYjNDM7CXB1dF9uZXQobmV0X25zKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgY29uZmlnZnNfY29udGV4dF9vcHMgPSB7CiAJLmdldF90cmVlCT0gY29uZmlnZnNfZ2V0X3RyZWUsCiYjNDM7CS5mcmVlCQk9IGNvbmZpZ2ZzX2ZzX2NvbnRleHRfZnJlZSwKIH07CiAKIHN0YXRpYyBpbnQgY29uZmlnZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYykKIHsKJiM0MzsJc3RydWN0IG5ldCAqbmV0X25zID0gZ2V0X25ldChjdXJyZW50LSZndDtuc3Byb3h5LSZndDtuZXRfbnMpOwomIzQzOwomIzQzOwlmYy0mZ3Q7ZnNfcHJpdmF0ZSA9IG5ldF9uczsKIAlmYy0mZ3Q7b3BzID0gJmFtcDtjb25maWdmc19jb250ZXh0X29wczsKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGNvbmZpZ2ZzX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvID0gc2ItJmd0O3NfZnNfaW5mbzsKJiM0MzsKJiM0MzsJY29uZmlnZnNfdW5saW5rX3N1YnN5c3RlbXMoc2IsIGluZm8pOwomIzQzOwlraWxsX2Fub25fc3VwZXIoc2IpOwomIzQzOwljb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTsKJiM0MzsJc2ItJmd0O3NfZnNfaW5mbyA9IE5VTEw7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGNvbmZpZ2ZzX2ZzX3R5cGUgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICYjMzQ7Y29uZmlnZnMmIzM0OywKIAkuaW5pdF9mc19jb250ZXh0ID0gY29uZmlnZnNfaW5pdF9mc19jb250ZXh0LAotCS5raWxsX3NiCT0ga2lsbF9hbm9uX3N1cGVyLAomIzQzOwkua2lsbF9zYgk9IGNvbmZpZ2ZzX2tpbGxfc2IsCiYjNDM7CS5mc19mbGFncwk9IEZTX1VTRVJOU19NT1VOVCwKIH07CiBNT0RVTEVfQUxJQVNfRlMoJiMzNDtjb25maWdmcyYjMzQ7KTsKIAotc3RydWN0IGRlbnRyeSAqY29uZmlnZnNfcGluX2ZzKHZvaWQpCiYjNDM7c3RydWN0IGRlbnRyeSAqY29uZmlnZnNfcGluX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0JaW50IGVyciA9IHNpbXBsZV9waW5fZnMoJmFtcDtjb25maWdmc19mc190eXBlLCAmYW1wO2NvbmZpZ2ZzX21vdW50LAotCQkJICAgICAmYW1wO2NvbmZpZ2ZzX21udF9jb3VudCk7Ci0JcmV0dXJuIGVyciA/IEVSUl9QVFIoZXJyKSA6IGNvbmZpZ2ZzX21vdW50LSZndDttbnRfcm9vdDsKJiM0MzsJc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm87CiYjNDM7CiYjNDM7CXNwaW5fbG9jaygmYW1wO2NvbmZpZ2ZzX3Bpbl9sb2NrKTsKJiM0MzsJaWYgKHNiKSB7CiYjNDM7CQlzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqcm9vdCA9IGNvbmZpZ2ZzX3Jvb3Q7CiYjNDM7CQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBzYi0mZ3Q7c19yb290OwomIzQzOwomIzQzOwkJaW5mbyA9IHNiLSZndDtzX2ZzX2luZm87CiYjNDM7CQlpZiAoIWluZm8tJmd0O21udCkgewomIzQzOwkJCXN0cnVjdCB2ZnNtb3VudCAqbW50OwomIzQzOwomIzQzOwkJCXNwaW5fdW5sb2NrKCZhbXA7Y29uZmlnZnNfcGluX2xvY2spOwomIzQzOwkJCW1udCA9IG1udF9jbG9uZV9kaXJlY3Qocm9vdC0mZ3Q7bW50LCBkZW50cnkpOwomIzQzOwkJCWlmIChJU19FUlIobW50KSkKJiM0MzsJCQkJcmV0dXJuIEVSUl9DQVNUKG1udCk7CiYjNDM7CQkJc3Bpbl9sb2NrKCZhbXA7Y29uZmlnZnNfcGluX2xvY2spOwomIzQzOwkJCWluZm8tJmd0O21udCA9IG1udDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJbW50Z2V0KGluZm8tJmd0O21udCk7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpbmZvID0gY29uZmlnZnNfcm9vdDsKJiM0MzsJCWlmICghaW5mby0mZ3Q7bW50KSB7CiYjNDM7CQkJc3RydWN0IHZmc21vdW50ICptbnQ7CiYjNDM7CiYjNDM7CQkJc3Bpbl91bmxvY2soJmFtcDtjb25maWdmc19waW5fbG9jayk7CiYjNDM7CQkJbW50ID0gdmZzX2tlcm5fbW91bnQoJmFtcDtjb25maWdmc19mc190eXBlLCBTQl9LRVJOTU9VTlQsCiYjNDM7CQkJCQkgICAgIGNvbmZpZ2ZzX2ZzX3R5cGUubmFtZSwgTlVMTCk7CiYjNDM7CQkJaWYgKElTX0VSUihtbnQpKQomIzQzOwkJCQlyZXR1cm4gRVJSX0NBU1QobW50KTsKJiM0MzsJCQlzcGluX2xvY2soJmFtcDtjb25maWdmc19waW5fbG9jayk7CiYjNDM7CQkJaW5mby0mZ3Q7bW50ID0gbW50OwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQltbnRnZXQoaW5mby0mZ3Q7bW50KTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlpbmZvLSZndDttbnRfY291bnQmIzQzOyYjNDM7OwomIzQzOwlzcGluX3VubG9jaygmYW1wO2NvbmZpZ2ZzX3Bpbl9sb2NrKTsKJiM0MzsJcmV0dXJuIGluZm8tJmd0O21udC0mZ3Q7bW50X3Jvb3Q7CiB9CiAKLXZvaWQgY29uZmlnZnNfcmVsZWFzZV9mcyh2b2lkKQomIzQzO3ZvaWQgY29uZmlnZnNfcmVsZWFzZV9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXNpbXBsZV9yZWxlYXNlX2ZzKCZhbXA7Y29uZmlnZnNfbW91bnQsICZhbXA7Y29uZmlnZnNfbW50X2NvdW50KTsKJiM0MzsJc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8gPSBjb25maWdmc19yb290OwomIzQzOwlzdHJ1Y3QgdmZzbW91bnQgKm1udDsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7Y29uZmlnZnNfcGluX2xvY2spOwomIzQzOwlpZiAoc2IpCiYjNDM7CQlpbmZvID0gc2ItJmd0O3NfZnNfaW5mbzsKJiM0MzsJbW50ID0gaW5mby0mZ3Q7bW50OwomIzQzOwlpZiAoLS1pbmZvLSZndDttbnRfY291bnQpCiYjNDM7CQlpbmZvLSZndDttbnQgPSBOVUxMOwomIzQzOwlzcGluX3VubG9jaygmYW1wO2NvbmZpZ2ZzX3Bpbl9sb2NrKTsKJiM0MzsJbW50cHV0KG1udCk7CiB9CiAKJiM0MztzdHJ1Y3QgbmV0ICpjb25maWdmc19uc19mcm9tX2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKQomIzQzO3sKJiM0MzsJc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8gPSBjb25maWdmc19yb290OwomIzQzOwlzdHJ1Y3QgbmV0ICpuZXRfbnMgPSBOVUxMOwomIzQzOwomIzQzOwlpZiAoZ3JvdXApIHsKJiM0MzsJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGdyb3VwLSZndDtjZ19pdGVtLmNpX2RlbnRyeTsKJiM0MzsKJiM0MzsJCWluZm8gPSBkZW50cnktJmd0O2Rfc2ItJmd0O3NfZnNfaW5mbzsKJiM0MzsJCWlmIChpbmZvKQomIzQzOwkJCW5ldF9ucyA9IGluZm8tJmd0O25ldF9uczsKJiM0MzsJfQomIzQzOwlyZXR1cm4gbmV0X25zOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChjb25maWdmc19uc19mcm9tX2dyb3VwKTsKIAogc3RhdGljIGludCBfX2luaXQgY29uZmlnZnNfaW5pdCh2b2lkKQogewpAQCAtMTQzLDE4ICYjNDM7MzAyLDI3IEBAIHN0YXRpYyBpbnQgX19pbml0IGNvbmZpZ2ZzX2luaXQodm9pZCkKIAlpZiAoIWNvbmZpZ2ZzX2Rpcl9jYWNoZXApCiAJCWdvdG8gb3V0OwogCiYjNDM7CWNvbmZpZ2ZzX3Jvb3QgPSBjb25maWdmc19nZXRfc3VwZXJfaW5mbygmYW1wO2luaXRfbmV0KTsKJiM0MzsJaWYgKElTX0VSUihjb25maWdmc19yb290KSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihjb25maWdmc19yb290KTsKJiM0MzsJCWdvdG8gb3V0MjsKJiM0MzsJfQomIzQzOwogCWVyciA9IHN5c2ZzX2NyZWF0ZV9tb3VudF9wb2ludChrZXJuZWxfa29iaiwgJiMzNDtjb25maWcmIzM0Oyk7CiAJaWYgKGVycikKLQkJZ290byBvdXQyOwomIzQzOwkJZ290byBvdXQzOwogCiAJZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmYW1wO2NvbmZpZ2ZzX2ZzX3R5cGUpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0MzsKJiM0MzsJCWdvdG8gb3V0NDsKIAogCXJldHVybiAwOwotb3V0MzoKJiM0MztvdXQ0OgogCXByX2VycigmIzM0O1VuYWJsZSB0byByZWdpc3RlciBmaWxlc3lzdGVtIVxuJiMzNDspOwogCXN5c2ZzX3JlbW92ZV9tb3VudF9wb2ludChrZXJuZWxfa29iaiwgJiMzNDtjb25maWcmIzM0Oyk7CiYjNDM7b3V0MzoKJiM0MzsJY29uZmlnZnNfcHV0X3N1cGVyX2luZm8oY29uZmlnZnNfcm9vdCk7CiYjNDM7CWNvbmZpZ2ZzX3Jvb3QgPSBOVUxMOwogb3V0MjoKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koY29uZmlnZnNfZGlyX2NhY2hlcCk7CiAJY29uZmlnZnNfZGlyX2NhY2hlcCA9IE5VTEw7CkBAIC0xNjYsNiAmIzQzOzMzNCw4IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBjb25maWdmc19leGl0KHZvaWQpCiB7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZhbXA7Y29uZmlnZnNfZnNfdHlwZSk7CiAJc3lzZnNfcmVtb3ZlX21vdW50X3BvaW50KGtlcm5lbF9rb2JqLCAmIzM0O2NvbmZpZyYjMzQ7KTsKJiM0MzsJY29uZmlnZnNfcHV0X3N1cGVyX2luZm8oY29uZmlnZnNfcm9vdCk7CiYjNDM7CWNvbmZpZ2ZzX3Jvb3QgPSBOVUxMOwogCWttZW1fY2FjaGVfZGVzdHJveShjb25maWdmc19kaXJfY2FjaGVwKTsKIAljb25maWdmc19kaXJfY2FjaGVwID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmMKaW5kZXggM2Q1Y2Q1YmYzYjA1MzcuLmU3YWJiZjYzMmNjNzBkIDEwMDY0NAotLS0gYS9mcy9uYW1lc3BhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1lc3BhY2UuYwpAQCAtMTQ4Miw2ICYjNDM7MTQ4MiwxNyBAQCBzdHJ1Y3QgdmZzbW91bnQgKm1udF9jbG9uZV9pbnRlcm5hbChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCkKIAlyZXR1cm4gJmFtcDtwLSZndDttbnQ7CiB9CiAKJiM0MztzdHJ1Y3QgdmZzbW91bnQgKm1udF9jbG9uZV9kaXJlY3Qoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtb3VudCAqcDsKJiM0MzsKJiM0MzsJcCA9IGNsb25lX21udChyZWFsX21vdW50KG1udCksIGRlbnRyeSwgQ0xfU0xBVkUpOwomIzQzOwlpZiAoSVNfRVJSKHApKQomIzQzOwkJcmV0dXJuIEVSUl9DQVNUKHApOwomIzQzOwlwLSZndDttbnQubW50X2ZsYWdzIHw9IE1OVF9JTlRFUk5BTDsKJiM0MzsJcmV0dXJuICZhbXA7cC0mZ3Q7bW50OwomIzQzO30KJiM0MzsKIC8qCiAgKiBSZXR1cm5zIHRoZSBtb3VudCB3aGljaCBlaXRoZXIgaGFzIHRoZSBzcGVjaWZpZWQgbW50X2lkLCBvciBoYXMgdGhlIG5leHQKICAqIHNtYWxsZXN0IGlkIGFmZXIgdGhlIHNwZWNpZmllZCBvbmUuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmggYi9pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgKaW5kZXggZWY2NWM3NWJlZWFhZDguLjc2ZTBiYjFhNzJiOWRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9jb25maWdmcy5oCkBAIC0yNCw2ICYjNDM7MjQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsgICAvKiBzdHJ1Y3QgbGlzdF9oZWFkICovCiAjaW5jbHVkZSAmbHQ7bGludXgva3JlZi5oJmd0OyAgIC8qIHN0cnVjdCBrcmVmICovCiAjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsgIC8qIHN0cnVjdCBtdXRleCAqLwomIzQzOyNpbmNsdWRlICZsdDtuZXQvbmV0X25hbWVzcGFjZS5oJmd0OyAvKiBzdHJ1Y3QgbmV0ICovCiAKICNkZWZpbmUgQ09ORklHRlNfSVRFTV9OQU1FX0xFTgkyMAogCkBAIC0yMjYsOCAmIzQzOzIyNywxMyBAQCBzdHJ1Y3QgY29uZmlnZnNfZ3JvdXBfb3BlcmF0aW9ucyB7CiB9OwogCiBzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtIHsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZAlzdV9saW5rOwogCXN0cnVjdCBjb25maWdfZ3JvdXAJc3VfZ3JvdXA7CiAJc3RydWN0IG11dGV4CQlzdV9tdXRleDsKJiM0MzsJaW50ICgqZmlsbF9zdWJzeXN0ZW0pKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cywKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbmV0ICpuZXRfbnMpOwomIzQzOwl2b2lkICgqY2xlYXJfc3Vic3lzdGVtKShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMsCiYjNDM7CQkJCXN0cnVjdCBuZXQgKm5ldF9ucyk7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnRvX2NvbmZpZ2ZzX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCkKQEAgLTI1Miw2ICYjNDM7MjU4LDggQEAgY29uZmlnZnNfcmVnaXN0ZXJfZGVmYXVsdF9ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpwYXJlbnRfZ3JvdXAsCiAJCQkJY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKml0ZW1fdHlwZSk7CiB2b2lkIGNvbmZpZ2ZzX3VucmVnaXN0ZXJfZGVmYXVsdF9ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCk7CiAKJiM0MztzdHJ1Y3QgbmV0ICpjb25maWdmc19uc19mcm9tX2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKTsKJiM0MzsKIC8qIFRoZXNlIGZ1bmN0aW9ucyBjYW4gc2xlZXAgYW5kIGNhbiBhbGxvYyB3aXRoIEdGUF9LRVJORUwgKi8KIC8qIFdBUk5JTkc6IFRoZXNlIGNhbm5vdCBiZSBjYWxsZWQgdW5kZXJuZWF0aCBjb25maWdmcyBjYWxsYmFja3MhISAqLwogaW50IGNvbmZpZ2ZzX2RlcGVuZF9pdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW91bnQuaCBiL2luY2x1ZGUvbGludXgvbW91bnQuaAppbmRleCBhY2ZlN2VmODZhMWIzZi4uN2U3ZTdkNjZjMzAyNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW91bnQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21vdW50LmgKQEAgLTc1LDYgJiM0Mzs3NSw3IEBAIGV4dGVybiB2b2lkIG1udF9kcm9wX3dyaXRlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpOwogZXh0ZXJuIHZvaWQgbW50cHV0KHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKIGV4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKm1udGdldChzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CiBleHRlcm4gdm9pZCBtbnRfbWFrZV9zaG9ydHRlcm0oc3RydWN0IHZmc21vdW50ICptbnQpOwomIzQzO2V4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKm1udF9jbG9uZV9kaXJlY3Qoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiBleHRlcm4gc3RydWN0IHZmc21vdW50ICptbnRfY2xvbmVfaW50ZXJuYWwoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpOwogZXh0ZXJuIGJvb2wgX19tbnRfaXNfcmVhZG9ubHkoY29uc3Qgc3RydWN0IHZmc21vdW50ICptbnQpOwogZXh0ZXJuIGJvb2wgbW50X21heV9zdWlkKHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5MzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIEltcGFjdCBvZiB0aGlzIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgbm9uLXRyaXZpYWwgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCwgYW5kIHRoZXJlZm9yZSwgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhZGRpbmcgbmV0d29yayBuYW1lc3BhY2Ugc3VwcG9ydCB0byBOVk1lLW9GIHRhcmdldCBhbmQgY29uZmlnZnMuIFRoaXMgaXNuJiMzOTt0IGEgbWlub3IgdHdlYWs7IHRoaXMgZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IHRoZXNlIHN1YnN5c3RlbXMgaW50ZXJhY3QgYW5kIHRoZWlyIHBvdGVudGlhbCBmb3IgZXhwb3N1cmUuCgpTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHRoZSBtb2RpZmljYXRpb24gb2YgYGRyaXZlcnMvbnZtZS90YXJnZXQvYCBhbmQgYGZzL2NvbmZpZ2ZzL2AgdGhhdCYjMzk7cyB0aGUgcmVkIGZsYWcuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYG5ldF9uc2AgaW50byBgc3RydWN0IG52bWV0X3BvcnRgIGFuZCBgc3RydWN0IG52bWV0X3N1YnN5c2AgaXMgYSBtYWpvciBzdHJ1Y3R1cmFsIHNoaWZ0LiBUaGUgc3dpdGNoIHRvIFhBcnJheXMgKGBudm1ldF9wb3J0c194YWAsIGBudm1ldF9kaXNjX3hhYCwgYGNvbmZpZ2ZzX3N1cGVyX3hhYCkgaW5kZXhlZCBieSBgbnNfaWRgIHVuZGVyc2NvcmVzIHRoZSBjb3JlIGFyY2hpdGVjdHVyYWwgY2hhbmdlLiBUaGlzIGFsc28gaW5jbHVkZXMgdGhlIG5ldyBgY29uZmlnZnNfbnNfZnJvbV9ncm91cCgpYCBmdW5jdGlvbi4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2UgdG8gYGZzL25hbWVzcGFjZS5jYCB0byBhZGQgYG1udF9jbG9uZV9kaXJlY3QoKWAgZm9yIG5hbWVzcGFjZSBjbG9uaW5nIGlzIHNpZ25pZmljYW50LgoKVGhlIHJlYWNoYWJpbGl0eSBpcyBhIGNyaXRpY2FsIGNvbnNpZGVyYXRpb24uIFRoaXMgY29kZSwgYWZmZWN0aW5nIGJvdGggYGZzL2NvbmZpZ2ZzL2AgYW5kIGRyaXZlcnMsIGlzIHZlcnkgbGlrZWx5IHRvdWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIGFuZCBRRU1VLCBtYWtpbmcgaXQgZXZlbiBtb3JlIHJlbGV2YW50IGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4gSXQgZGlyZWN0bHkgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMsIG1ha2luZyBpdCByaXBlIGZvciBmdXp6aW5nLiBUaHVzLCBgV29ydGhGdXp6aW5nPXRydWVgIGlzIHRoZSByaWdodCBjb25jbHVzaW9uLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSB3b3J0aCBmb2N1c2luZyBvbiBmb3IgZnV6emluZy4gSSYjMzk7dmUgY29tcGlsZWQgYSBsaXN0OgoKLSBgbnZtZXRfZ2V0X25zX2lkYAotIGBudm1ldF9nZXRfcG9ydF9saXN0YAotIGBudm1ldF9hZGRfcG9ydF9saXN0YAotIGBudm1ldF9kZWxfcG9ydF9saXN0YAotIGBudm1ldF9zdWJzeXNfbWFrZWAKLSBgbnZtZXRfcG9ydHNfbWFrZWAKLSBgbnZtZXRfcm9vdF9kaXNjb3ZlcnlfbnFuX3Nob3dgCi0gYG52bWV0X3Jvb3RfZGlzY292ZXJ5X25xbl9zdG9yZWAKLSBgbnZtZXRfY29uZmlnZnNfZmlsbF9zdWJzeXN0ZW1gCi0gYG52bWV0X2NvbmZpZ2ZzX2NsZWFyX3N1YnN5c3RlbWAKLSBgbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzYAotIGBudm1ldF9hZGRfZGlzY19zdWJzeXNgCi0gYG52bWV0X2RlbF9kaXNjX3N1YnN5c2AKLSBgbnZtZXRfcG9ydF9kaXNjX2NoYW5nZWRgCi0gYG52bWV0X3N1YnN5c19kaXNjX2NoYW5nZWRgCi0gYG52bWV0X2V4ZWN1dGVfZGlzY19nZXRfbG9nX3BhZ2VgCi0gYG52bWVfbG9vcF9maW5kX3BvcnRgCi0gYG52bWV0X3JkbWFfZW5hYmxlX3BvcnRgCi0gYG52bWV0X3JkbWFfYWRkX3BvcnRgCi0gYG52bWV0X3RjcF9hZGRfcG9ydGAKLSBgY29uZmlnZnNfbGlua19yb290YAotIGBjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW1gCi0gYGNvbmZpZ2ZzX2xpbmtfc3Vic3lzdGVtc2AKLSBgY29uZmlnZnNfdW5saW5rX3Jvb3RgCi0gYGNvbmZpZ2ZzX3VubGlua19zdWJzeXN0ZW1zYAotIGBjb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbWAKLSBgY29uZmlnZnNfZ2V0X3N1cGVyX2luZm9gCi0gYGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvYAotIGBjb25maWdmc19maWxsX3N1cGVyYAotIGBjb25maWdmc19nZXRfdHJlZWAKLSBgY29uZmlnZnNfa2lsbF9zYmAKLSBgY29uZmlnZnNfcGluX2ZzYAotIGBjb25maWdmc19yZWxlYXNlX2ZzYAotIGBjb25maWdmc19uc19mcm9tX2dyb3VwYAotIGBtbnRfY2xvbmVfZGlyZWN0YAoKRnJvbSB0aGlzIGxpc3QsIHNvbWUga2V5IHN5bWJvbHMganVtcCBvdXQgYXMgcGFydGljdWxhcmx5IHJlbGV2YW50OiBgY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtYCwgYGNvbmZpZ2ZzX2xpbmtfc3Vic3lzdGVtc2AsIGBjb25maWdmc191bmxpbmtfc3Vic3lzdGVtc2AsIGBjb25maWdmc19nZXRfc3VwZXJfaW5mb2AsIGBjb25maWdmc19maWxsX3N1cGVyYCwgYG52bWV0X2NvbmZpZ2ZzX2ZpbGxfc3Vic3lzdGVtYCwgYG52bWV0X2FkZF9kaXNjX3N1YnN5c2AsIGBudm1ldF9wb3J0c19tYWtlYCwgYW5kIGBudm1ldF9zdWJzeXNfbWFrZWAuIFRoZXNlIGFyZSB0aGUgY29yZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBpbnRlZ3JhdGlvbiBhbmQgc3Vic3lzdGVtIG1hbmFnZW1lbnQuCgpGaW5hbGx5LCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMuIE9idmlvdXNseSwgYENPTkZJR19DT05GSUdGU19GU2AgZm9yIGNvbmZpZ2ZzLCBhbmQgYENPTkZJR19OVk1FX1RBUkdFVGAgZm9yIE5WTWUgdGFyZ2V0IGFyZSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGVzLiBXZSBhbHNvIHNob3VsZCBpbnZlc3RpZ2F0ZSBgQ09ORklHX05WTUVfVEFSR0VUX0xPT1BgLCBgQ09ORklHX05WTUVfVEFSR0VUX1RDUGAsIGFuZCBgQ09ORklHX05WTUVfVEFSR0VUX1JETUFgIGFzIHRoZXkgbWlnaHQgb3BlbiBhZGRpdGlvbmFsIGF0dGFjayBzdXJmYWNlcyB0aHJvdWdoIHRoZSBkaWZmZXJlbnQgdHJhbnNwb3J0cy4gTGV0JiMzOTtzIGRlbHZlIGludG8gYGRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZ2AgYW5kIGBmcy9jb25maWdmcy9LY29uZmlnYCB0byBjb25maXJtIGFuZCBpZGVudGlmeSBhbnkgb3RoZXIgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDEwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9jb25maWdmcy9kaXIuYz05ODQ9c3RhdGljIGludCBjb25maWdmc19kdW1wKHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkLCBpbnQgbGV2ZWwpXG4tLVxuZnMvY29uZmlnZnMvZGlyLmMtMTAyNi0gKiBzdWJzeXN0ZW0gaXNuJiMzOTt0IHJlZ2lzdGVyZWQsIG9yIHdoZW4gY29uZmlnZnMgaXMgbG9hZGluZyBvciB1bmxvYWRpbmcuXG5mcy9jb25maWdmcy9kaXIuYzoxMDI3OiAqIEp1c3QgbGlrZSBjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0oKS4gIFNvIHdlIHRha2UgdGhlIHNhbWVcbmZzL2NvbmZpZ2ZzL2Rpci5jLTEwMjgtICogcHJlY2F1dGlvbnMuICBXZSBwaW4gdGhlIGZpbGVzeXN0ZW0uICBXZSBsb2NrIGNvbmZpZ2ZzX2RpcmVudF9sb2NrLlxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jPTE4NjQ9c3RhdGljIGludCBjb25maWdmc19saW5rX3Jvb3Qoc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gICppbmZvLFxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTE5MTgtXG5mcy9jb25maWdmcy9kaXIuYzoxOTE5OmludCBjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKVxuZnMvY29uZmlnZnMvZGlyLmMtMTkyMC17XG4tLVxuZnMvY29uZmlnZnMvZGlyLmM9MjA4NT12b2lkIGNvbmZpZ2ZzX3VucmVnaXN0ZXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cylcbi0tXG5mcy9jb25maWdmcy9kaXIuYy0yMTA4LVxuZnMvY29uZmlnZnMvZGlyLmM6MjEwOTpFWFBPUlRfU1lNQk9MKGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbSk7XG5mcy9jb25maWdmcy9kaXIuYy0yMTEwLUVYUE9SVF9TWU1CT0woY29uZmlnZnNfdW5yZWdpc3Rlcl9zdWJzeXN0ZW0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDEwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjgzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgTlZNZSBUYXJnZXQgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBzdHJhaWdodCBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYGRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZ2AuIFdlJiMzOTtyZSBvYnZpb3VzbHkgY29uY2VybmVkIHdpdGggZW5hYmxpbmcgb3IgY29uZmlndXJpbmcgdGhlIE5WTWUgdGFyZ2V0IGZ1bmN0aW9uYWxpdHksIGFuZCB0aGF0IEtjb25maWcgZmlsZSBpcyB0aGUgKmNhbm9uaWNhbCogcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIGNvbnRyb2xsaW5nIGJ1aWxkIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBhZnRlciB0aGUgYE5WTUVfVEFSR0VUYCBzeW1ib2wuIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGJlIHRoZSBtYWluIHN3aXRjaCwgdGhlIGZ1bmRhbWVudGFsIGZsYWcuIERvZXMgaXQgZXhpc3Q/IFdoYXQgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGRvZXMgaXQgZGVwZW5kIG9uIG9yIGludGVyYWN0IHdpdGg/IEFyZSB0aGVyZSByZWxhdGVkIHN5bWJvbHMgdGhhdCBtaWdodCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIGl0IHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gQXJlIHRoZXJlIG1vcmUgZ3JhbnVsYXIgb3B0aW9ucyBJIG5lZWQgdG8ga25vdyBhYm91dCB0byBjb25maWd1cmUgdGhlIGJlaGF2aW9yPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBzeXN0ZW0sIGFuZCB0aGF0IEtjb25maWcgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBpbnNpZ2h0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlZNRV9UQVJHRVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvdGFyZ2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMi1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzozOmNvbmZpZyBOVk1FX1RBUkdFVFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtOVk1lIFRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTE5LVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjIwOmNvbmZpZyBOVk1FX1RBUkdFVF9ERUJVR0ZTXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMjEtICAgICAgICBib29sIFwmIzM0O05WTWUgVGFyZ2V0IGRlYnVnZnMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0yOC1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzoyOTpjb25maWcgTlZNRV9UQVJHRVRfUEFTU1RIUlVcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7TlZNZSBUYXJnZXQgUGFzc3Rocm91Z2ggc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy00MC1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo0MTpjb25maWcgTlZNRV9UQVJHRVRfTE9PUFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTQyLVx0dHJpc3RhdGUgXCYjMzQ7TlZNZSBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy01MS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo1Mjpjb25maWcgTlZNRV9UQVJHRVRfUkRNQVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgUkRNQSB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy02Mi1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo2Mzpjb25maWcgTlZNRV9UQVJHRVRfRkNcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy02NC1cdHRyaXN0YXRlIFwmIzM0O05WTWUgb3ZlciBGYWJyaWNzIEZDIHRhcmdldCBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNzMtXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NzQ6Y29uZmlnIE5WTUVfVEFSR0VUX0ZDTE9PUFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTc1LVx0dHJpc3RhdGUgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgRkMgVHJhbnNwb3J0IExvb3BiYWNrIFRlc3QgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTg2LVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjg3OmNvbmZpZyBOVk1FX1RBUkdFVF9UQ1BcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy04OC1cdHRyaXN0YXRlIFwmIzM0O05WTWUgb3ZlciBGYWJyaWNzIFRDUCB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy05Ni1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo5Nzpjb25maWcgTlZNRV9UQVJHRVRfVENQX1RMU1xuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTk4LVx0Ym9vbCBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IFRMUyBlbmNyeXB0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTA5LVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjExMDpjb25maWcgTlZNRV9UQVJHRVRfQVVUSFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTExMS1cdGJvb2wgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgSW4tYmFuZCBBdXRoZW50aWNhdGlvbiBpbiB0YXJnZXQgc2lkZVwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMTktXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6MTIwOmNvbmZpZyBOVk1FX1RBUkdFVF9BVVRIX0RFQlVHXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTIxLVx0Ym9vbCBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBJbi1iYW5kIEF1dGhlbnRpY2F0aW9uIGRlYnVnIG1lc3NhZ2VzXCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTEyOC1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzoxMjk6Y29uZmlnIE5WTUVfVEFSR0VUX1BDSV9FUEZcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMzAtXHR0cmlzdGF0ZSBcJiMzNDtOVk1lIFBDSSBFbmRwb2ludCBGdW5jdGlvbiB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDEwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzE4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgTlZNZSBUYXJnZXQqKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgY29yZSBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UgZm9yIHRoaXMgTlZNZSB0YXJnZXQgc2V0dXAuIEl0IGxvb2tzIGxpa2UgYENPTkZJR0ZTX0ZTYCBpcyB0aGUgYWJzb2x1dGUgbXVzdC1oYXZlIGhlcmUsIHRoYXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gd2UmIzM5O3JlIGJ1aWxkaW5nIG9uLiBBbmQgb2J2aW91c2x5LCBgTlZNRV9UQVJHRVRgIGl0c2VsZiBuZWVkcyB0byBiZSBlbmFibGVkLgoKQmV5b25kIHRoZSBjb3JlLCBpdCB3b3VsZCBiZSBzbWFydCB0byBlbmFibGUgdGhlIHRyYW5zcG9ydC1zcGVjaWZpYyBvcHRpb25zIGZvciB0ZXN0aW5nLiBgTlZNRV9UQVJHRVRfTE9PUGAsIGBOVk1FX1RBUkdFVF9UQ1BgLCBhbmQgYE5WTUVfVEFSR0VUX1JETUFgIGFyZSBhbGwgZ29vZCBjYW5kaWRhdGVzLiBIYXZpbmcgdGhvc2Ugb3B0aW9ucyB3aWxsIGFsbG93IG1lIHRvIHByb3Blcmx5IGV4ZXJjaXNlIHRoZSB0cmFuc3BvcnQtc3BlY2lmaWMgY29kZS4KCkxldCYjMzk7cyBzdGFydCBieSBkb3VibGUtY2hlY2tpbmcgYENPTkZJR0ZTX0ZTYC4gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgc3RhcnRpbmcgcG9pbnQsIGFuZCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENPTkZJR0ZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcbmZzL2NvbmZpZ2ZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1VzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2NjIKCQkJCQkJCW91dHB1dDogMjc0CgkJCQkJCQl0aG91Z2h0czogMjM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgVGhpbmtpbmcqKgoKT2theSwgdGltZSB0byBnZXQgdG8gd29yay4gRmlyc3QgdGhpbmcmIzM5O3MgZmlyc3Q6IEkgbmVlZCB0byBleHBsaWNpdGx5IHNldCBgRW5hYmxlQ29uZmlnc2AgdG8gdGhlIHJlbGV2YW50IHRhcmdldCBjb25maWd1cmF0aW9uczogYFsmIzM0O0NPTkZJR0ZTX0ZTJiMzNDssICYjMzQ7TlZNRV9UQVJHRVQmIzM0OywgJiMzNDtOVk1FX1RBUkdFVF9MT09QJiMzNDssICYjMzQ7TlZNRV9UQVJHRVRfVENQJiMzNDssICYjMzQ7TlZNRV9UQVJHRVRfUkRNQSYjMzQ7XWAuIFRoYXQgZW5zdXJlcyB0aG9zZSBtb2R1bGVzIGFyZSBwcm9wZXJseSBlbmFibGVkIGZvciB0aGlzIHByb2Nlc3MuCgpOb3csIGxldCYjMzk7cyB0dXJuIG15IGF0dGVudGlvbiB0byB0aGUgY29yZSBmdW5jdGlvbnMuIEkgc2hvdWxkIGV4YW1pbmUgYEZvY3VzU3ltYm9sc2AgdG8gZW5zdXJlIEkgaGF2ZSBhbGwgdGhlIGtleSBwbGF5ZXJzLiBIbW0sIGxldCYjMzk7cyBzZWUuIEkmIzM5O3ZlIGdvdCBhIGdvb2Qgc3RhcnQgd2l0aDoKYGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbWAKYGNvbmZpZ2ZzX2xpbmtfc3Vic3lzdGVtc2AKYGNvbmZpZ2ZzX3VubGlua19zdWJzeXN0ZW1zYApgY29uZmlnZnNfZ2V0X3N1cGVyX2luZm9gCmBjb25maWdmc19maWxsX3N1cGVyYApgbnZtZXRfY29uZmlnZnNfZmlsbF9zdWJzeXN0ZW1gCmBudm1ldF9hZGRfZGlzY19zdWJzeXNgCmBudm1ldF9wb3J0c19tYWtlYApgbnZtZXRfc3Vic3lzX21ha2VgCgpUaGF0JiMzOTtzIGEgc29saWQgZm91bmRhdGlvbiBmb3IgbWFuYWdpbmcgdGhlIGZpbGVzeXN0ZW0gYW5kIE5WTWUgc3Vic3lzdGVtcy4KCkFscmlnaHQsIGJ1dCBJIGNhbiYjMzk7dCBiZSB0b28gaGFzdHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4gTGV0IG1lIGV4cGxvcmUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtYXkgYmUgdXNlZnVsLiBPa2F5LCBsZXQmIzM5O3Mgc2VlOgpgbnZtZXRfZ2V0X3BvcnRfbGlzdGAKYG52bWV0X2FkZF9wb3J0X2xpc3RgCmBudm1ldF9kZWxfcG9ydF9saXN0YApgbnZtZXRfcm9vdF9kaXNjb3ZlcnlfbnFuX3N0b3JlYApgbnZtZXRfZXhlY3V0ZV9kaXNjX2dldF9sb2dfcGFnZWAKClRob3NlIGxvb2sgcHJvbWlzaW5nLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgcG9ydCBtYW5hZ2VtZW50IGFuZCBkaXNjb3ZlcnkuIFRoZXkgZGVmaW5pdGVseSBuZWVkIHRvIGJlIGluY2x1ZGVkLiBJJiMzOTtsbCBhZGQgdGhlbSB0byBgRm9jdXNTeW1ib2xzYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBzeXN0ZW0mIzM5O3MgaW5uZXIgd29ya2luZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDEwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT05GSUdGU19GUyYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVF9MT09QJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUX1RDUCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVF9SRE1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtJiMzNDssCiAgICAmIzM0O2NvbmZpZ2ZzX2xpbmtfc3Vic3lzdGVtcyYjMzQ7LAogICAgJiMzNDtjb25maWdmc191bmxpbmtfc3Vic3lzdGVtcyYjMzQ7LAogICAgJiMzNDtjb25maWdmc19nZXRfc3VwZXJfaW5mbyYjMzQ7LAogICAgJiMzNDtjb25maWdmc19maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O252bWV0X2NvbmZpZ2ZzX2ZpbGxfc3Vic3lzdGVtJiMzNDssCiAgICAmIzM0O252bWV0X2FkZF9kaXNjX3N1YnN5cyYjMzQ7LAogICAgJiMzNDtudm1ldF9wb3J0c19tYWtlJiMzNDssCiAgICAmIzM0O252bWV0X3N1YnN5c19tYWtlJiMzNDssCiAgICAmIzM0O252bWV0X2FkZF9wb3J0X2xpc3QmIzM0OywKICAgICYjMzQ7bnZtZXRfZGVsX3BvcnRfbGlzdCYjMzQ7LAogICAgJiMzNDtudm1ldF9yb290X2Rpc2NvdmVyeV9ucW5fc3RvcmUmIzM0OywKICAgICYjMzQ7bnZtZXRfZXhlY3V0ZV9kaXNjX2dldF9sb2dfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldHdvcmsgbmFtZXNwYWNlIHN1cHBvcnQgZm9yIGNvbmZpZ2ZzIGFuZCB0aGUgTlZNZS1vRiB0YXJnZXQuIEl0IG1vZGlmaWVzIGNvcmUgY29uZmlnZnMgbG9naWMgdG8gc3VwcG9ydCBtdWx0aXBsZSBzdXBlcmJsb2NrcyBwZXIgbmV0d29yayBuYW1lc3BhY2UgYW5kIHVwZGF0ZXMgdGhlIE5WTWUgdGFyZ2V0IHRvIHVzZSBwZXItbmFtZXNwYWNlIGRpc2NvdmVyeSBzdWJzeXN0ZW1zIGFuZCBwb3J0cy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUga2VybmVsIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUX0xPT1AmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVRfVENQJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUX1JETUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0mIzM0OywKICAgICYjMzQ7Y29uZmlnZnNfbGlua19zdWJzeXN0ZW1zJiMzNDssCiAgICAmIzM0O2NvbmZpZ2ZzX3VubGlua19zdWJzeXN0ZW1zJiMzNDssCiAgICAmIzM0O2NvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvJiMzNDssCiAgICAmIzM0O2NvbmZpZ2ZzX2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7bnZtZXRfY29uZmlnZnNfZmlsbF9zdWJzeXN0ZW0mIzM0OywKICAgICYjMzQ7bnZtZXRfYWRkX2Rpc2Nfc3Vic3lzJiMzNDssCiAgICAmIzM0O252bWV0X3BvcnRzX21ha2UmIzM0OywKICAgICYjMzQ7bnZtZXRfc3Vic3lzX21ha2UmIzM0OywKICAgICYjMzQ7bnZtZXRfYWRkX3BvcnRfbGlzdCYjMzQ7LAogICAgJiMzNDtudm1ldF9kZWxfcG9ydF9saXN0JiMzNDssCiAgICAmIzM0O252bWV0X3Jvb3RfZGlzY292ZXJ5X25xbl9zdG9yZSYjMzQ7LAogICAgJiMzNDtudm1ldF9leGVjdXRlX2Rpc2NfZ2V0X2xvZ19wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV0d29yayBuYW1lc3BhY2Ugc3VwcG9ydCBmb3IgY29uZmlnZnMgYW5kIHRoZSBOVk1lLW9GIHRhcmdldC4gSXQgbW9kaWZpZXMgY29yZSBjb25maWdmcyBsb2dpYyB0byBzdXBwb3J0IG11bHRpcGxlIHN1cGVyYmxvY2tzIHBlciBuZXR3b3JrIG5hbWVzcGFjZSBhbmQgdXBkYXRlcyB0aGUgTlZNZSB0YXJnZXQgdG8gdXNlIHBlci1uYW1lc3BhY2UgZGlzY292ZXJ5IHN1YnN5c3RlbXMgYW5kIHBvcnRzLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDEwOjEwOjE0LjEyMjU1OTA3NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMTUzODgyMTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTkZJR0ZTX0ZTXCIsXG4gICAgXCJOVk1FX1RBUkdFVFwiLFxuICAgIFwiTlZNRV9UQVJHRVRfTE9PUFwiLFxuICAgIFwiTlZNRV9UQVJHRVRfVENQXCIsXG4gICAgXCJOVk1FX1RBUkdFVF9SRE1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtXCIsXG4gICAgXCJjb25maWdmc19saW5rX3N1YnN5c3RlbXNcIixcbiAgICBcImNvbmZpZ2ZzX3VubGlua19zdWJzeXN0ZW1zXCIsXG4gICAgXCJjb25maWdmc19nZXRfc3VwZXJfaW5mb1wiLFxuICAgIFwiY29uZmlnZnNfZmlsbF9zdXBlclwiLFxuICAgIFwibnZtZXRfY29uZmlnZnNfZmlsbF9zdWJzeXN0ZW1cIixcbiAgICBcIm52bWV0X2FkZF9kaXNjX3N1YnN5c1wiLFxuICAgIFwibnZtZXRfcG9ydHNfbWFrZVwiLFxuICAgIFwibnZtZXRfc3Vic3lzX21ha2VcIixcbiAgICBcIm52bWV0X2FkZF9wb3J0X2xpc3RcIixcbiAgICBcIm52bWV0X2RlbF9wb3J0X2xpc3RcIixcbiAgICBcIm52bWV0X3Jvb3RfZGlzY292ZXJ5X25xbl9zdG9yZVwiLFxuICAgIFwibnZtZXRfZXhlY3V0ZV9kaXNjX2dldF9sb2dfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV0d29yayBuYW1lc3BhY2Ugc3VwcG9ydCBmb3IgY29uZmlnZnMgYW5kIHRoZSBOVk1lLW9GIHRhcmdldC4gSXQgbW9kaWZpZXMgY29yZSBjb25maWdmcyBsb2dpYyB0byBzdXBwb3J0IG11bHRpcGxlIHN1cGVyYmxvY2tzIHBlciBuZXR3b3JrIG5hbWVzcGFjZSBhbmQgdXBkYXRlcyB0aGUgTlZNZSB0YXJnZXQgdG8gdXNlIHBlci1uYW1lc3BhY2UgZGlzY292ZXJ5IHN1YnN5c3RlbXMgYW5kIHBvcnRzLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBrZXJuZWwgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTA6MTA6MTQuMTIyNTY3NzI1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE1NzQ5NjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDE1NjkxZmJhMzdjYzJiODRiMmRiZjI0YmQ3NjkyYjU1ZjRhNjJjNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAyMyAxMDoxMDoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMgYi9kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmNcXG5pbmRleCBiODhmODk3ZjA2ZTI1ZS4uNzYzNmFjMzc3M2I0MDAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jXFxuKysrIGIvZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jXFxuQEAgLTI1LDggKzI1LDcgQEBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG52bWV0X2hvc3RfdHlwZTtcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG52bWV0X3N1YnN5c190eXBlO1xcbiBcXG4tc3RhdGljIExJU1RfSEVBRChudm1ldF9wb3J0c19saXN0KTtcXG4tc3RydWN0IGxpc3RfaGVhZCAqbnZtZXRfcG9ydHMgPSBcXHUwMDI2bnZtZXRfcG9ydHNfbGlzdDtcXG4rc3RhdGljIERFRklORV9YQVJSQVkobnZtZXRfcG9ydHNfeGEpO1xcbiBcXG4gc3RydWN0IG52bWV0X3R5cGVfbmFtZV9tYXAge1xcbiBcXHR1OFxcdFxcdHR5cGU7XFxuQEAgLTUxLDYgKzUwLDcwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbnZtZXRfdHlwZV9uYW1lX21hcCBudm1ldF9hZGRyX2ZhbWlseVtdID0ge1xcbiBcXHR7IE5WTUZfQUREUl9GQU1JTFlfTE9PUCxcXHRcXFwibG9vcFxcXCIgfSxcXG4gfTtcXG4gXFxuK3U2NCBudm1ldF9nZXRfbnNfaWQoc3RydWN0IG5ldCAqbmV0X25zKVxcbit7XFxuK1xcdHN0cnVjdCBuc19jb21tb24gKm5zO1xcbitcXG4rXFx0aWYgKCFuZXRfbnMpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRucyA9IHRvX25zX2NvbW1vbihuZXRfbnMpO1xcbitcXHRyZXR1cm4gbmV0X25zID09IFxcdTAwMjZpbml0X25ldCA/IDAgOiBucy1cXHUwMDNlbnNfaWQ7XFxuK31cXG4rXFxuK3N0cnVjdCBsaXN0X2hlYWQgKm52bWV0X2dldF9wb3J0X2xpc3Qoc3RydWN0IG5ldCAqbmV0X25zKVxcbit7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgKnBvcnRfbGlzdDtcXG4rXFx0dTY0IG5zX2lkID0gbnZtZXRfZ2V0X25zX2lkKG5ldF9ucyk7XFxuK1xcbitcXHRwb3J0X2xpc3QgPSB4YV9sb2FkKFxcdTAwMjZudm1ldF9wb3J0c194YSwgbnNfaWQpO1xcbitcXHRyZXR1cm4gcG9ydF9saXN0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG52bWV0X2FkZF9wb3J0X2xpc3Qoc3RydWN0IG52bWV0X3BvcnQgKnApXFxuK3tcXG4rXFx0dTY0IG5zX2lkID0gbnZtZXRfZ2V0X25zX2lkKHAtXFx1MDAzZW5ldF9ucyk7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgKnBvcnRfbGlzdDtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHR4YV9sb2NrKFxcdTAwMjZudm1ldF9wb3J0c194YSk7XFxuK1xcdHBvcnRfbGlzdCA9IHhhX2xvYWQoXFx1MDAyNm52bWV0X3BvcnRzX3hhLCBuc19pZCk7XFxuK1xcdGlmICghcG9ydF9saXN0KSB7XFxuK1xcdFxcdHBvcnRfbGlzdCA9IGt6YWxsb2Nfb2JqKCpwb3J0X2xpc3QpO1xcbitcXHRcXHRpZiAoIXBvcnRfbGlzdCkge1xcbitcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFx0XFx0SU5JVF9MSVNUX0hFQUQocG9ydF9saXN0KTtcXG4rXFx0XFx0ZXJyID0gX194YV9pbnNlcnQoXFx1MDAyNm52bWV0X3BvcnRzX3hhLCBuc19pZCxcXG4rXFx0XFx0XFx0XFx0ICBwb3J0X2xpc3QsIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRrZnJlZShwb3J0X2xpc3QpO1xcbitcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRsaXN0X2FkZChcXHUwMDI2cC1cXHUwMDNlZ2xvYmFsX2VudHJ5LCBwb3J0X2xpc3QpO1xcbitvdXRfdW5sb2NrOlxcbitcXHR4YV91bmxvY2soXFx1MDAyNm52bWV0X3BvcnRzX3hhKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbnZtZXRfZGVsX3BvcnRfbGlzdChzdHJ1Y3QgbnZtZXRfcG9ydCAqcClcXG4re1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3J0X2xpc3Q7XFxuK1xcdHU2NCBuc19pZCA9IG52bWV0X2dldF9uc19pZChwLVxcdTAwM2VuZXRfbnMpO1xcbitcXG4rXFx0eGFfbG9jayhcXHUwMDI2bnZtZXRfcG9ydHNfeGEpO1xcbitcXHRwb3J0X2xpc3QgPSB4YV9sb2FkKFxcdTAwMjZudm1ldF9wb3J0c194YSwgbnNfaWQpO1xcbitcXHRpZiAoIVdBUk5fT04oIXBvcnRfbGlzdCkpIHtcXG4rXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2cC1cXHUwMDNlZ2xvYmFsX2VudHJ5KTtcXG4rXFx0XFx0aWYgKGxpc3RfZW1wdHkocG9ydF9saXN0KSkge1xcbitcXHRcXHRcXHRfX3hhX2VyYXNlKFxcdTAwMjZudm1ldF9wb3J0c194YSwgbnNfaWQpO1xcbitcXHRcXHRcXHRrZnJlZShwb3J0X2xpc3QpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0eGFfdW5sb2NrKFxcdTAwMjZudm1ldF9wb3J0c194YSk7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIG52bWV0X2lzX3BvcnRfZW5hYmxlZChzdHJ1Y3QgbnZtZXRfcG9ydCAqcCwgY29uc3QgY2hhciAqY2FsbGVyKVxcbiB7XFxuIFxcdGlmIChwLVxcdTAwM2VlbmFibGVkKVxcbkBAIC0xNzE3LDYgKzE3ODAsNyBAQCBzdGF0aWMgdm9pZCBudm1ldF9zdWJzeXNfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuIHtcXG4gXFx0c3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzID0gdG9fc3Vic3lzKGl0ZW0pO1xcbiBcXG4rXFx0Y29uZmlnZnNfcmVtb3ZlX2RlZmF1bHRfZ3JvdXBzKFxcdTAwMjZzdWJzeXMtXFx1MDAzZWdyb3VwKTtcXG4gXFx0bnZtZXRfc3Vic3lzX2RlbF9jdHJscyhzdWJzeXMpO1xcbiBcXHRudm1ldF9zdWJzeXNfcHV0KHN1YnN5cyk7XFxuIH1cXG5AQCAtMTczNCwxOSArMTc5OCwyMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgbnZtZXRfc3Vic3lzX3R5cGUgPSB7XFxuIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwICpudm1ldF9zdWJzeXNfbWFrZShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcXG4gXFx0XFx0Y29uc3QgY2hhciAqbmFtZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXM7XFxuK1xcdHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cywgKmRpc2Nfc3Vic3lzO1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXRfbnMgPSBjb25maWdmc19uc19mcm9tX2dyb3VwKGdyb3VwKTtcXG4gXFxuIFxcdGlmIChzeXNmc19zdHJlcShuYW1lLCBOVk1FX0RJU0NfU1VCU1lTX05BTUUpKSB7XFxuIFxcdFxcdHByX2VycihcXFwiY2FuJ3QgY3JlYXRlIGRpc2NvdmVyeSBzdWJzeXN0ZW0gdGhyb3VnaCBjb25maWdmc1xcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoc3lzZnNfc3RyZXEobmFtZSwgbnZtZXRfZGlzY19zdWJzeXMtXFx1MDAzZXN1YnN5c25xbikpIHtcXG4rXFx0ZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMobmV0X25zKTtcXG4rXFx0aWYgKCFkaXNjX3N1YnN5cylcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuK1xcdGlmIChzeXNmc19zdHJlcShuYW1lLCBkaXNjX3N1YnN5cy1cXHUwMDNlc3Vic3lzbnFuKSkge1xcbiBcXHRcXHRwcl9lcnIoXFxcImNhbid0IGNyZWF0ZSBzdWJzeXN0ZW0gdXNpbmcgdW5pcXVlIGRpc2NvdmVyeSBOUU5cXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFx0fVxcbiBcXG4tXFx0c3Vic3lzID0gbnZtZXRfc3Vic3lzX2FsbG9jKG5hbWUsIE5WTUVfTlFOX05WTUUpO1xcbitcXHRzdWJzeXMgPSBudm1ldF9zdWJzeXNfYWxsb2MobmFtZSwgTlZNRV9OUU5fTlZNRSwgbmV0X25zKTtcXG4gXFx0aWYgKElTX0VSUihzdWJzeXMpKVxcbiBcXHRcXHRyZXR1cm4gRVJSX0NBU1Qoc3Vic3lzKTtcXG4gXFxuQEAgLTIwMDQsOCArMjA3Miw5IEBAIHN0YXRpYyB2b2lkIG52bWV0X3BvcnRfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuIFxcbiBcXHQvKiBMZXQgaW5mbGlnaHQgY29udHJvbGxlcnMgdGVhcmRvd24gY29tcGxldGUgKi9cXG4gXFx0Zmx1c2hfd29ya3F1ZXVlKG52bWV0X3dxKTtcXG4tXFx0bGlzdF9kZWwoXFx1MDAyNnBvcnQtXFx1MDAzZWdsb2JhbF9lbnRyeSk7XFxuK1xcdG52bWV0X2RlbF9wb3J0X2xpc3QocG9ydCk7XFxuIFxcbitcXHRjb25maWdmc19yZW1vdmVfZGVmYXVsdF9ncm91cHMoXFx1MDAyNnBvcnQtXFx1MDAzZWdyb3VwKTtcXG4gXFx0a2V5X3B1dChwb3J0LVxcdTAwM2VrZXlyaW5nKTtcXG4gXFx0a2ZyZWUocG9ydC1cXHUwMDNlYW5hX3N0YXRlKTtcXG4gXFx0a2ZyZWUocG9ydCk7XFxuQEAgLTIwNTcsNiArMjEyNiwxMCBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbnZtZXRfcG9ydHNfbWFrZShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcdH1cXG4gXFxuK1xcdHBvcnQtXFx1MDAzZW5ldF9ucyA9IGNvbmZpZ2ZzX25zX2Zyb21fZ3JvdXAoZ3JvdXApO1xcbitcXHRpZiAoIXBvcnQtXFx1MDAzZW5ldF9ucylcXG4rXFx0XFx0cG9ydC1cXHUwMDNlbmV0X25zID0gZ2V0X25ldChcXHUwMDI2aW5pdF9uZXQpO1xcbitcXG4gXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05WTUVfVEFSR0VUX1RDUF9UTFMpIFxcdTAwMjZcXHUwMDI2IG52bWVfa2V5cmluZ19pZCgpKSB7XFxuIFxcdFxcdHBvcnQtXFx1MDAzZWtleXJpbmcgPSBrZXlfbG9va3VwKG52bWVfa2V5cmluZ19pZCgpKTtcXG4gXFx0XFx0aWYgKElTX0VSUihwb3J0LVxcdTAwM2VrZXlyaW5nKSkge1xcbkBAIC0yMDcyLDcgKzIxNDUsNyBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbnZtZXRfcG9ydHNfbWFrZShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcXG4gXFx0XFx0XFx0cG9ydC1cXHUwMDNlYW5hX3N0YXRlW2ldID0gTlZNRV9BTkFfSU5BQ0NFU1NJQkxFO1xcbiBcXHR9XFxuIFxcbi1cXHRsaXN0X2FkZChcXHUwMDI2cG9ydC1cXHUwMDNlZ2xvYmFsX2VudHJ5LCBcXHUwMDI2bnZtZXRfcG9ydHNfbGlzdCk7XFxuK1xcdG52bWV0X2FkZF9wb3J0X2xpc3QocG9ydCk7XFxuIFxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cG9ydC1cXHUwMDNlZW50cnkpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cG9ydC1cXHUwMDNlc3Vic3lzdGVtcyk7XFxuQEAgLTIxMTksOSArMjE5Miw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBudm1ldF9wb3J0c190eXBlID0ge1xcbiBcXHQuY3Rfb3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiB9O1xcbiBcXG4tc3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgbnZtZXRfc3Vic3lzdGVtc19ncm91cDtcXG4tc3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgbnZtZXRfcG9ydHNfZ3JvdXA7XFxuLVxcbiAjaWZkZWYgQ09ORklHX05WTUVfVEFSR0VUX0FVVEhcXG4gc3RhdGljIHNzaXplX3QgbnZtZXRfaG9zdF9kaGNoYXBfa2V5X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbiBcXHRcXHRjaGFyICpwYWdlKVxcbkBAIC0yMzAzLDE5ICsyMzczLDI2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBudm1ldF9ob3N0c190eXBlID0ge1xcbiBcXHQuY3Rfb3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiB9O1xcbiBcXG4tc3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgbnZtZXRfaG9zdHNfZ3JvdXA7XFxuLVxcbiBzdGF0aWMgc3NpemVfdCBudm1ldF9yb290X2Rpc2NvdmVyeV9ucW5fc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgY2hhciAqcGFnZSlcXG4ge1xcbi1cXHRyZXR1cm4gc25wcmludGYocGFnZSwgUEFHRV9TSVpFLCBcXFwiJXNcXFxcblxcXCIsIG52bWV0X2Rpc2Nfc3Vic3lzLVxcdTAwM2VzdWJzeXNucW4pO1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXRfbnMgPSBjb25maWdmc19uc19mcm9tX2dyb3VwKHRvX2NvbmZpZ19ncm91cChpdGVtKSk7XFxuK1xcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzID0gbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzKG5ldF9ucyk7XFxuK1xcbitcXHRpZiAoIWRpc2Nfc3Vic3lzKVxcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFx0cmV0dXJuIHNucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwgXFxcIiVzXFxcXG5cXFwiLCBkaXNjX3N1YnN5cy1cXHUwMDNlc3Vic3lzbnFuKTtcXG4gfVxcbiBcXG4gc3RhdGljIHNzaXplX3QgbnZtZXRfcm9vdF9kaXNjb3ZlcnlfbnFuX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4gXFx0XFx0Y29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KVxcbiB7XFxuK1xcdHN0cnVjdCBjb25maWdfaXRlbSAqc3Vic3lzdGVtc19pdGVtO1xcbitcXHRzdHJ1Y3QgY29uZmlnX2dyb3VwICpzdWJzeXN0ZW1zX2dyb3VwO1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXRfbnMgPSBjb25maWdmc19uc19mcm9tX2dyb3VwKHRvX2NvbmZpZ19ncm91cChpdGVtKSk7XFxuK1xcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTtcXG4tXFx0Y2hhciAqb2xkX25xbiwgKm5ld19ucW47XFxuK1xcdGNoYXIgKm9sZF9ucW4gPSBOVUxMLCAqbmV3X25xbjtcXG4gXFx0c2l6ZV90IGxlbjtcXG4gXFxuIFxcdGxlbiA9IHN0cmNzcG4ocGFnZSwgXFxcIlxcXFxuXFxcIik7XFxuQEAgLTIzMjcsNyArMjQwNCwxNCBAQCBzdGF0aWMgc3NpemVfdCBudm1ldF9yb290X2Rpc2NvdmVyeV9ucW5fc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdGRvd25fd3JpdGUoXFx1MDAyNm52bWV0X2NvbmZpZ19zZW0pO1xcbi1cXHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcXHUwMDI2bnZtZXRfc3Vic3lzdGVtc19ncm91cC5jZ19jaGlsZHJlbikge1xcbitcXHRzdWJzeXN0ZW1zX2l0ZW0gPSBjb25maWdfZ3JvdXBfZmluZF9pdGVtKHRvX2NvbmZpZ19ncm91cChpdGVtKSwgXFxcInN1YnN5c3RlbXNcXFwiKTtcXG4rXFx0aWYgKFdBUk5fT04oIXN1YnN5c3RlbXNfaXRlbSkpIHtcXG4rXFx0XFx0a2ZyZWUobmV3X25xbik7XFxuK1xcdFxcdHVwX3dyaXRlKFxcdTAwMjZudm1ldF9jb25maWdfc2VtKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFx0c3Vic3lzdGVtc19ncm91cCA9IHRvX2NvbmZpZ19ncm91cChzdWJzeXN0ZW1zX2l0ZW0pO1xcbitcXHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcXHUwMDI2c3Vic3lzdGVtc19ncm91cC1cXHUwMDNlY2dfY2hpbGRyZW4pIHtcXG4gXFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtICppdGVtID1cXG4gXFx0XFx0XFx0Y29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgY29uZmlnX2l0ZW0sIGNpX2VudHJ5KTtcXG4gXFxuQEAgLTIzMzgsMTIgKzI0MjIsMTUgQEAgc3RhdGljIHNzaXplX3QgbnZtZXRfcm9vdF9kaXNjb3ZlcnlfbnFuX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbi1cXHRvbGRfbnFuID0gbnZtZXRfZGlzY19zdWJzeXMtXFx1MDAzZXN1YnN5c25xbjtcXG4tXFx0bnZtZXRfZGlzY19zdWJzeXMtXFx1MDAzZXN1YnN5c25xbiA9IG5ld19ucW47XFxuK1xcdGRpc2Nfc3Vic3lzID0gbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzKG5ldF9ucyk7XFxuK1xcdGlmIChkaXNjX3N1YnN5cykge1xcbitcXHRcXHRvbGRfbnFuID0gZGlzY19zdWJzeXMtXFx1MDAzZXN1YnN5c25xbjtcXG4rXFx0XFx0ZGlzY19zdWJzeXMtXFx1MDAzZXN1YnN5c25xbiA9IG5ld19ucW47XFxuK1xcdH1cXG4gXFx0dXBfd3JpdGUoXFx1MDAyNm52bWV0X2NvbmZpZ19zZW0pO1xcbiBcXG4gXFx0a2ZyZWUob2xkX25xbik7XFxuLVxcdHJldHVybiBsZW47XFxuK1xcdHJldHVybiBkaXNjX3N1YnN5cyA/IGxlbiA6IC1FTk9FTlQ7XFxuIH1cXG4gXFxuIENPTkZJR0ZTX0FUVFIobnZtZXRfcm9vdF8sIGRpc2NvdmVyeV9ucW4pO1xcbkBAIC0yMzU4LDYgKzI0NDUsNjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG52bWV0X3Jvb3RfdHlwZSA9IHtcXG4gXFx0LmN0X293bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4gfTtcXG4gXFxuK3N0YXRpYyBpbnQgbnZtZXRfY29uZmlnZnNfZmlsbF9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzLFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5ldCAqbmV0X25zKVxcbit7XFxuK1xcdHN0cnVjdCBjb25maWdfZ3JvdXAgKnN1YnN5c3RlbXNfZ3JvdXAsICpwb3J0c19ncm91cCwgKmhvc3RzX2dyb3VwO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gbnZtZXRfYWRkX2Rpc2Nfc3Vic3lzKG5ldF9ucyk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0c3Vic3lzdGVtc19ncm91cCA9IGt6YWxsb2Nfb2JqKCpzdWJzeXN0ZW1zX2dyb3VwKTtcXG4rXFx0aWYgKCFzdWJzeXN0ZW1zX2dyb3VwKSB7XFxuK1xcdFxcdG52bWV0X2RlbF9kaXNjX3N1YnN5cyhuZXRfbnMpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXHRjb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoc3Vic3lzdGVtc19ncm91cCxcXG4rXFx0XFx0XFx0XFxcInN1YnN5c3RlbXNcXFwiLCBcXHUwMDI2bnZtZXRfc3Vic3lzdGVtc190eXBlKTtcXG4rXFx0Y29uZmlnZnNfYWRkX2RlZmF1bHRfZ3JvdXAoc3Vic3lzdGVtc19ncm91cCxcXG4rXFx0XFx0XFx0XFx1MDAyNnN1YnN5cy1cXHUwMDNlc3VfZ3JvdXApO1xcbitcXG4rXFx0cG9ydHNfZ3JvdXAgPSBremFsbG9jX29iaigqcG9ydHNfZ3JvdXApO1xcbitcXHRpZiAoIXBvcnRzX2dyb3VwKSB7XFxuK1xcdFxcdGtmcmVlKHN1YnN5c3RlbXNfZ3JvdXApO1xcbitcXHRcXHRudm1ldF9kZWxfZGlzY19zdWJzeXMobmV0X25zKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFx0Y29uZmlnX2dyb3VwX2luaXRfdHlwZV9uYW1lKHBvcnRzX2dyb3VwLFxcbitcXHRcXHRcXHRcXFwicG9ydHNcXFwiLCBcXHUwMDI2bnZtZXRfcG9ydHNfdHlwZSk7XFxuK1xcdGNvbmZpZ2ZzX2FkZF9kZWZhdWx0X2dyb3VwKHBvcnRzX2dyb3VwLFxcbitcXHRcXHRcXHRcXHUwMDI2c3Vic3lzLVxcdTAwM2VzdV9ncm91cCk7XFxuK1xcbitcXHRob3N0c19ncm91cCA9IGt6YWxsb2Nfb2JqKCpob3N0c19ncm91cCk7XFxuK1xcdGlmICghaG9zdHNfZ3JvdXApIHtcXG4rXFx0XFx0a2ZyZWUocG9ydHNfZ3JvdXApO1xcbitcXHRcXHRrZnJlZShzdWJzeXN0ZW1zX2dyb3VwKTtcXG4rXFx0XFx0bnZtZXRfZGVsX2Rpc2Nfc3Vic3lzKG5ldF9ucyk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcdGNvbmZpZ19ncm91cF9pbml0X3R5cGVfbmFtZShob3N0c19ncm91cCxcXG4rXFx0XFx0XFx0XFxcImhvc3RzXFxcIiwgXFx1MDAyNm52bWV0X2hvc3RzX3R5cGUpO1xcbitcXHRjb25maWdmc19hZGRfZGVmYXVsdF9ncm91cChob3N0c19ncm91cCxcXG4rXFx0XFx0XFx0XFx1MDAyNnN1YnN5cy1cXHUwMDNlc3VfZ3JvdXApO1xcbitcXHRzdHJzY3B5KHN1YnN5cy1cXHUwMDNlc3VfZ3JvdXAuY2dfaXRlbS5jaV9uYW1lYnVmLCBcXFwibnZtZXRcXFwiLFxcbitcXHRcXHRzaXplb2Yoc3Vic3lzLVxcdTAwM2VzdV9ncm91cC5jZ19pdGVtLmNpX25hbWVidWYpKTtcXG4rXFx0c3Vic3lzLVxcdTAwM2VzdV9ncm91cC5jZ19pdGVtLmNpX3R5cGUgPSBcXHUwMDI2bnZtZXRfcm9vdF90eXBlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG52bWV0X2NvbmZpZ2ZzX2NsZWFyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXQgKm5ldF9ucylcXG4re1xcbitcXHRzdHJ1Y3QgY29uZmlnX2dyb3VwICpnLCAqbjtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShnLCBuLCBcXHUwMDI2c3Vic3lzLVxcdTAwM2VzdV9ncm91cC5kZWZhdWx0X2dyb3VwcyxcXG4rXFx0XFx0XFx0XFx0IGdyb3VwX2VudHJ5KSB7XFxuK1xcdFxcdGxpc3RfZGVsKFxcdTAwMjZnLVxcdTAwM2Vncm91cF9lbnRyeSk7XFxuK1xcdFxcdGNvbmZpZ19pdGVtX3B1dChcXHUwMDI2Zy1cXHUwMDNlY2dfaXRlbSk7XFxuK1xcdFxcdGtmcmVlKGcpO1xcbitcXHR9XFxuK1xcdG52bWV0X2RlbF9kaXNjX3N1YnN5cyhuZXRfbnMpO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBudm1ldF9jb25maWdmc19zdWJzeXN0ZW0gPSB7XFxuIFxcdC5zdV9ncm91cCA9IHtcXG4gXFx0XFx0LmNnX2l0ZW0gPSB7XFxuQEAgLTIzNjUsMzAgKzI1MTUsMTQgQEAgc3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gbnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtID0ge1xcbiBcXHRcXHRcXHQuY2lfdHlwZVxcdD0gXFx1MDAyNm52bWV0X3Jvb3RfdHlwZSxcXG4gXFx0XFx0fSxcXG4gXFx0fSxcXG4rXFx0LmZpbGxfc3Vic3lzdGVtID0gbnZtZXRfY29uZmlnZnNfZmlsbF9zdWJzeXN0ZW0sXFxuK1xcdC5jbGVhcl9zdWJzeXN0ZW0gPSBudm1ldF9jb25maWdmc19jbGVhcl9zdWJzeXN0ZW0sXFxuIH07XFxuIFxcbiBpbnQgX19pbml0IG52bWV0X2luaXRfY29uZmlnZnModm9pZClcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0Y29uZmlnX2dyb3VwX2luaXQoXFx1MDAyNm52bWV0X2NvbmZpZ2ZzX3N1YnN5c3RlbS5zdV9ncm91cCk7XFxuLVxcdG11dGV4X2luaXQoXFx1MDAyNm52bWV0X2NvbmZpZ2ZzX3N1YnN5c3RlbS5zdV9tdXRleCk7XFxuLVxcbi1cXHRjb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoXFx1MDAyNm52bWV0X3N1YnN5c3RlbXNfZ3JvdXAsXFxuLVxcdFxcdFxcdFxcXCJzdWJzeXN0ZW1zXFxcIiwgXFx1MDAyNm52bWV0X3N1YnN5c3RlbXNfdHlwZSk7XFxuLVxcdGNvbmZpZ2ZzX2FkZF9kZWZhdWx0X2dyb3VwKFxcdTAwMjZudm1ldF9zdWJzeXN0ZW1zX2dyb3VwLFxcbi1cXHRcXHRcXHRcXHUwMDI2bnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtLnN1X2dyb3VwKTtcXG4tXFxuLVxcdGNvbmZpZ19ncm91cF9pbml0X3R5cGVfbmFtZShcXHUwMDI2bnZtZXRfcG9ydHNfZ3JvdXAsXFxuLVxcdFxcdFxcdFxcXCJwb3J0c1xcXCIsIFxcdTAwMjZudm1ldF9wb3J0c190eXBlKTtcXG4tXFx0Y29uZmlnZnNfYWRkX2RlZmF1bHRfZ3JvdXAoXFx1MDAyNm52bWV0X3BvcnRzX2dyb3VwLFxcbi1cXHRcXHRcXHRcXHUwMDI2bnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtLnN1X2dyb3VwKTtcXG4tXFxuLVxcdGNvbmZpZ19ncm91cF9pbml0X3R5cGVfbmFtZShcXHUwMDI2bnZtZXRfaG9zdHNfZ3JvdXAsXFxuLVxcdFxcdFxcdFxcXCJob3N0c1xcXCIsIFxcdTAwMjZudm1ldF9ob3N0c190eXBlKTtcXG4tXFx0Y29uZmlnZnNfYWRkX2RlZmF1bHRfZ3JvdXAoXFx1MDAyNm52bWV0X2hvc3RzX2dyb3VwLFxcbi1cXHRcXHRcXHRcXHUwMDI2bnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtLnN1X2dyb3VwKTtcXG4tXFxuIFxcdHJldCA9IGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbShcXHUwMDI2bnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtKTtcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHRwcl9lcnIoXFxcImNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbTogJWRcXFxcblxcXCIsIHJldCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jIGIvZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmNcXG5pbmRleCA2MmRkNTliOWFhNGYxYy4uMzk5ODliOGJhZTkyZjggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuY1xcbkBAIC0xNzk4LDIyICsxNzk4LDI3IEBAIHN0YXRpYyBzdHJ1Y3QgbnZtZXRfc3Vic3lzICpudm1ldF9maW5kX2dldF9zdWJzeXMoc3RydWN0IG52bWV0X3BvcnQgKnBvcnQsXFxuIFxcdFxcdGNvbnN0IGNoYXIgKnN1YnN5c25xbilcXG4ge1xcbiBcXHRzdHJ1Y3QgbnZtZXRfc3Vic3lzX2xpbmsgKnA7XFxuK1xcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzO1xcbiBcXG4gXFx0aWYgKCFwb3J0KVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuK1xcdGRpc2Nfc3Vic3lzID0gbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzKHBvcnQtXFx1MDAzZW5ldF9ucyk7XFxuK1xcdGlmICghZGlzY19zdWJzeXMpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4gXFx0aWYgKCFzdHJjbXAoTlZNRV9ESVNDX1NVQlNZU19OQU1FLCBzdWJzeXNucW4pKSB7XFxuLVxcdFxcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVxcdTAwM2VyZWYpKVxcbitcXHRcXHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFxcdTAwMjZkaXNjX3N1YnN5cy1cXHUwMDNlcmVmKSlcXG4gXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdFxcdHJldHVybiBudm1ldF9kaXNjX3N1YnN5cztcXG4rXFx0XFx0cmV0dXJuIGRpc2Nfc3Vic3lzO1xcbiBcXHR9XFxuIFxcbiBcXHRkb3duX3JlYWQoXFx1MDAyNm52bWV0X2NvbmZpZ19zZW0pO1xcbi1cXHRpZiAoIXN0cm5jbXAobnZtZXRfZGlzY19zdWJzeXMtXFx1MDAzZXN1YnN5c25xbiwgc3Vic3lzbnFuLFxcbitcXHRpZiAoIXN0cm5jbXAoZGlzY19zdWJzeXMtXFx1MDAzZXN1YnN5c25xbiwgc3Vic3lzbnFuLFxcbiBcXHRcXHRcXHRcXHROVk1GX05RTl9TSVpFKSkge1xcbi1cXHRcXHRpZiAoa3JlZl9nZXRfdW5sZXNzX3plcm8oXFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVxcdTAwM2VyZWYpKSB7XFxuK1xcdFxcdGlmIChrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2ZGlzY19zdWJzeXMtXFx1MDAzZXJlZikpIHtcXG4gXFx0XFx0XFx0dXBfcmVhZChcXHUwMDI2bnZtZXRfY29uZmlnX3NlbSk7XFxuLVxcdFxcdFxcdHJldHVybiBudm1ldF9kaXNjX3N1YnN5cztcXG4rXFx0XFx0XFx0cmV0dXJuIGRpc2Nfc3Vic3lzO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcXHUwMDI2cG9ydC1cXHUwMDNlc3Vic3lzdGVtcywgZW50cnkpIHtcXG5AQCAtMTgzMCw3ICsxODM1LDcgQEAgc3RhdGljIHN0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X2ZpbmRfZ2V0X3N1YnN5cyhzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCxcXG4gfVxcbiBcXG4gc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfc3Vic3lzX2FsbG9jKGNvbnN0IGNoYXIgKnN1YnN5c25xbixcXG4tXFx0XFx0ZW51bSBudm1lX3N1YnN5c190eXBlIHR5cGUpXFxuK1xcdFxcdGVudW0gbnZtZV9zdWJzeXNfdHlwZSB0eXBlLCBzdHJ1Y3QgbmV0ICpuZXRfbnMpXFxuIHtcXG4gXFx0c3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzO1xcbiBcXHRjaGFyIHNlcmlhbFtOVk1FVF9TTl9NQVhfU0laRSAvIDJdO1xcbkBAIC0xODg4LDEwICsxODkzLDEyIEBAIHN0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X3N1YnN5c19hbGxvYyhjb25zdCBjaGFyICpzdWJzeXNucW4sXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzdWJzeXMtXFx1MDAzZWN0cmxzKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnN1YnN5cy1cXHUwMDNlaG9zdHMpO1xcbiBcXG4tXFx0cmV0ID0gbnZtZXRfZGVidWdmc19zdWJzeXNfc2V0dXAoc3Vic3lzKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0Z290byBmcmVlX3N1YnN5c25xbjtcXG4tXFxuK1xcdC8qIERpc2FibGUgZGVidWdmcyBmb3Igbm9uLWluaXRpYWwgbmFtZXNwYWNlcyAqL1xcbitcXHRpZiAobmV0X25zID09IFxcdTAwMjZpbml0X25ldCkge1xcbitcXHRcXHRyZXQgPSBudm1ldF9kZWJ1Z2ZzX3N1YnN5c19zZXR1cChzdWJzeXMpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIGZyZWVfc3Vic3lzbnFuO1xcbitcXHR9XFxuIFxcdHJldHVybiBzdWJzeXM7XFxuIFxcbiBmcmVlX3N1YnN5c25xbjpcXG5AQCAtMTk3NiwxOCArMTk4MywxMiBAQCBzdGF0aWMgaW50IF9faW5pdCBudm1ldF9pbml0KHZvaWQpXFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0Z290byBvdXRfZnJlZV9udm1ldF9hZW5fd29ya19xdWV1ZTtcXG4gXFxuLVxcdGVycm9yID0gbnZtZXRfaW5pdF9kaXNjb3ZlcnkoKTtcXG4tXFx0aWYgKGVycm9yKVxcbi1cXHRcXHRnb3RvIG91dF9leGl0X2RlYnVnZnM7XFxuLVxcbiBcXHRlcnJvciA9IG52bWV0X2luaXRfY29uZmlnZnMoKTtcXG4gXFx0aWYgKGVycm9yKVxcbi1cXHRcXHRnb3RvIG91dF9leGl0X2Rpc2NvdmVyeTtcXG4rXFx0XFx0Z290byBvdXRfZXhpdF9kZWJ1Z2ZzO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbi1vdXRfZXhpdF9kaXNjb3Zlcnk6XFxuLVxcdG52bWV0X2V4aXRfZGlzY292ZXJ5KCk7XFxuIG91dF9leGl0X2RlYnVnZnM6XFxuIFxcdG52bWV0X2V4aXRfZGVidWdmcygpO1xcbiBvdXRfZnJlZV9udm1ldF9hZW5fd29ya19xdWV1ZTpcXG5AQCAtMjAwNiw3ICsyMDA3LDYgQEAgc3RhdGljIGludCBfX2luaXQgbnZtZXRfaW5pdCh2b2lkKVxcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbnZtZXRfZXhpdCh2b2lkKVxcbiB7XFxuIFxcdG52bWV0X2V4aXRfY29uZmlnZnMoKTtcXG4tXFx0bnZtZXRfZXhpdF9kaXNjb3ZlcnkoKTtcXG4gXFx0bnZtZXRfZXhpdF9kZWJ1Z2ZzKCk7XFxuIFxcdGlkYV9kZXN0cm95KFxcdTAwMjZjbnRsaWRfaWRhKTtcXG4gXFx0ZGVzdHJveV93b3JrcXVldWUobnZtZXRfYWVuX3dxKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC9kaXNjb3ZlcnkuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvZGlzY292ZXJ5LmNcXG5pbmRleCAxMTQ4NjlkMTZhMWYzYy4uYjQ5ODRmYzY1YmE3ODcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9udm1lL3RhcmdldC9kaXNjb3ZlcnkuY1xcbisrKyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvZGlzY292ZXJ5LmNcXG5AQCAtOCw5ICs4LDQ0IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NnZW5lcmF0ZWQvdXRzcmVsZWFzZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwibnZtZXQuaFxcXCJcXG4gXFxuLXN0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X2Rpc2Nfc3Vic3lzO1xcbitzdGF0aWMgREVGSU5FX1hBUlJBWShudm1ldF9kaXNjX3hhKTtcXG4gXFxuLXN0YXRpYyB1NjQgbnZtZXRfZ2VuY3RyO1xcbitzdHJ1Y3QgbnZtZXRfc3Vic3lzICpudm1ldF9nZXRfZGlzY19zdWJzeXMoc3RydWN0IG5ldCAqbmV0X25zKVxcbit7XFxuK1xcdHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cztcXG4rXFx0dTY0IG5zX2lkID0gbnZtZXRfZ2V0X25zX2lkKG5ldF9ucyk7XFxuK1xcbitcXHRzdWJzeXMgPSB4YV9sb2FkKFxcdTAwMjZudm1ldF9kaXNjX3hhLCBuc19pZCk7XFxuK1xcdHJldHVybiBzdWJzeXM7XFxuK31cXG4rXFxuK2ludCBudm1ldF9hZGRfZGlzY19zdWJzeXMoc3RydWN0IG5ldCAqbmV0X25zKVxcbit7XFxuK1xcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzO1xcbitcXHR1NjQgbnNfaWQgPSBudm1ldF9nZXRfbnNfaWQobmV0X25zKTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGRpc2Nfc3Vic3lzID0gbnZtZXRfc3Vic3lzX2FsbG9jKE5WTUVfRElTQ19TVUJTWVNfTkFNRSxcXG4rXFx0XFx0XFx0XFx0XFx0IE5WTUVfTlFOX0NVUlIsIG5ldF9ucyk7XFxuK1xcdGlmIChJU19FUlIoZGlzY19zdWJzeXMpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihkaXNjX3N1YnN5cyk7XFxuK1xcdGVyciA9IHhhX2luc2VydChcXHUwMDI2bnZtZXRfZGlzY194YSwgbnNfaWQsXFxuK1xcdFxcdFxcdGRpc2Nfc3Vic3lzLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdG52bWV0X3N1YnN5c19wdXQoZGlzY19zdWJzeXMpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rdm9pZCBudm1ldF9kZWxfZGlzY19zdWJzeXMoc3RydWN0IG5ldCAqbmV0X25zKVxcbit7XFxuK1xcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzO1xcbitcXHR1NjQgbnNfaWQgPSBudm1ldF9nZXRfbnNfaWQobmV0X25zKTtcXG4rXFxuK1xcdGRpc2Nfc3Vic3lzID0geGFfZXJhc2UoXFx1MDAyNm52bWV0X2Rpc2NfeGEsIG5zX2lkKTtcXG4rXFx0aWYgKGRpc2Nfc3Vic3lzKVxcbitcXHRcXHRudm1ldF9zdWJzeXNfcHV0KGRpc2Nfc3Vic3lzKTtcXG4rfVxcbiBcXG4gc3RhdGljIHZvaWQgX19udm1ldF9kaXNjX2NoYW5nZWQoc3RydWN0IG52bWV0X3BvcnQgKnBvcnQsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbnZtZXRfY3RybCAqY3RybClcXG5AQCAtMjksMTggKzY0LDIyIEBAIHZvaWQgbnZtZXRfcG9ydF9kaXNjX2NoYW5nZWQoc3RydWN0IG52bWV0X3BvcnQgKnBvcnQsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzKVxcbiB7XFxuIFxcdHN0cnVjdCBudm1ldF9jdHJsICpjdHJsO1xcbitcXHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpkaXNjX3N1YnN5cztcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNm52bWV0X2NvbmZpZ19zZW0pO1xcbi1cXHRudm1ldF9nZW5jdHIrKztcXG4rXFx0ZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMocG9ydC1cXHUwMDNlbmV0X25zKTtcXG4rXFx0aWYgKFdBUk5fT04oIWRpc2Nfc3Vic3lzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRkaXNjX3N1YnN5cy1cXHUwMDNlZ2VuY3RyKys7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZudm1ldF9kaXNjX3N1YnN5cy1cXHUwMDNlbG9jayk7XFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY3RybCwgXFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVxcdTAwM2VjdHJscywgc3Vic3lzX2VudHJ5KSB7XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmRpc2Nfc3Vic3lzLVxcdTAwM2Vsb2NrKTtcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjdHJsLCBcXHUwMDI2ZGlzY19zdWJzeXMtXFx1MDAzZWN0cmxzLCBzdWJzeXNfZW50cnkpIHtcXG4gXFx0XFx0aWYgKHN1YnN5cyBcXHUwMDI2XFx1MDAyNiAhbnZtZXRfaG9zdF9hbGxvd2VkKHN1YnN5cywgY3RybC1cXHUwMDNlaG9zdG5xbikpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0X19udm1ldF9kaXNjX2NoYW5nZWQocG9ydCwgY3RybCk7XFxuIFxcdH1cXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZudm1ldF9kaXNjX3N1YnN5cy1cXHUwMDNlbG9jayk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2ZGlzY19zdWJzeXMtXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0LyogSWYgdHJhbnNwb3J0IGNhbiBzaWduYWwgY2hhbmdlLCBub3RpZnkgdHJhbnNwb3J0ICovXFxuIFxcdGlmIChwb3J0LVxcdTAwM2V0cl9vcHMgXFx1MDAyNlxcdTAwMjYgcG9ydC1cXHUwMDNldHJfb3BzLVxcdTAwM2VkaXNjb3ZlcnlfY2hnKVxcbkBAIC01MiwxNSArOTEsMTkgQEAgc3RhdGljIHZvaWQgX19udm1ldF9zdWJzeXNfZGlzY19jaGFuZ2VkKHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0LFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbnZtZXRfaG9zdCAqaG9zdClcXG4ge1xcbiBcXHRzdHJ1Y3QgbnZtZXRfY3RybCAqY3RybDtcXG4rXFx0c3RydWN0IG52bWV0X3N1YnN5cyAqZGlzY19zdWJzeXM7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZudm1ldF9kaXNjX3N1YnN5cy1cXHUwMDNlbG9jayk7XFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY3RybCwgXFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVxcdTAwM2VjdHJscywgc3Vic3lzX2VudHJ5KSB7XFxuK1xcdGRpc2Nfc3Vic3lzID0gbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzKHBvcnQtXFx1MDAzZW5ldF9ucyk7XFxuK1xcdGlmIChXQVJOX09OKCFkaXNjX3N1YnN5cykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGlzY19zdWJzeXMtXFx1MDAzZWxvY2spO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsIFxcdTAwMjZkaXNjX3N1YnN5cy1cXHUwMDNlY3RybHMsIHN1YnN5c19lbnRyeSkge1xcbiBcXHRcXHRpZiAoaG9zdCBcXHUwMDI2XFx1MDAyNiBzdHJjbXAobnZtZXRfaG9zdF9uYW1lKGhvc3QpLCBjdHJsLVxcdTAwM2Vob3N0bnFuKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRfX252bWV0X2Rpc2NfY2hhbmdlZChwb3J0LCBjdHJsKTtcXG4gXFx0fVxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVxcdTAwM2Vsb2NrKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkaXNjX3N1YnN5cy1cXHUwMDNlbG9jayk7XFxuIH1cXG4gXFxuIHZvaWQgbnZtZXRfc3Vic3lzX2Rpc2NfY2hhbmdlZChzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMsXFxuQEAgLTY4LDExICsxMTEsMTggQEAgdm9pZCBudm1ldF9zdWJzeXNfZGlzY19jaGFuZ2VkKHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cyxcXG4ge1xcbiBcXHRzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydDtcXG4gXFx0c3RydWN0IG52bWV0X3N1YnN5c19saW5rICpzO1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3J0X2xpc3Q7XFxuK1xcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzO1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXRfbnMgPSBjb25maWdmc19uc19mcm9tX2dyb3VwKFxcdTAwMjZzdWJzeXMtXFx1MDAzZWdyb3VwKTtcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNm52bWV0X2NvbmZpZ19zZW0pO1xcbi1cXHRudm1ldF9nZW5jdHIrKztcXG4rXFx0ZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMobmV0X25zKTtcXG4rXFx0aWYgKFdBUk5fT04oIWRpc2Nfc3Vic3lzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRkaXNjX3N1YnN5cy1cXHUwMDNlZ2VuY3RyKys7XFxuIFxcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsIG52bWV0X3BvcnRzLCBnbG9iYWxfZW50cnkpXFxuK1xcdHBvcnRfbGlzdCA9IG52bWV0X2dldF9wb3J0X2xpc3QobmV0X25zKTtcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBwb3J0X2xpc3QsIGdsb2JhbF9lbnRyeSlcXG4gXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzLCBcXHUwMDI2cG9ydC1cXHUwMDNlc3Vic3lzdGVtcywgZW50cnkpIHtcXG4gXFx0XFx0XFx0aWYgKHMtXFx1MDAzZXN1YnN5cyAhPSBzdWJzeXMpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC0xNzMsNiArMjIzLDcgQEAgc3RhdGljIHZvaWQgbnZtZXRfZXhlY3V0ZV9kaXNjX2dldF9sb2dfcGFnZShzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXFxuIFxcdHUxNiBzdGF0dXMgPSAwO1xcbiBcXHR2b2lkICpidWZmZXI7XFxuIFxcdGNoYXIgdHJhZGRyW05WTUZfVFJBRERSX1NJWkVdO1xcbitcXHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpkaXNjX3N1YnN5cztcXG4gXFxuIFxcdGlmICghbnZtZXRfY2hlY2tfdHJhbnNmZXJfbGVuKHJlcSwgZGF0YV9sZW4pKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTIwNywxMCArMjU4LDEyIEBAIHN0YXRpYyB2b2lkIG52bWV0X2V4ZWN1dGVfZGlzY19nZXRfbG9nX3BhZ2Uoc3RydWN0IG52bWV0X3JlcSAqcmVxKVxcbiBcXHR9XFxuIFxcdGhkciA9IGJ1ZmZlcjtcXG4gXFxuK1xcdGRpc2Nfc3Vic3lzID0gbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzKHJlcS1cXHUwMDNlcG9ydC1cXHUwMDNlbmV0X25zKTtcXG4rXFxuIFxcdG52bWV0X3NldF9kaXNjX3RyYWRkcihyZXEsIHJlcS1cXHUwMDNlcG9ydCwgdHJhZGRyKTtcXG4gXFxuIFxcdG52bWV0X2Zvcm1hdF9kaXNjb3ZlcnlfZW50cnkoaGRyLCByZXEtXFx1MDAzZXBvcnQsXFxuLVxcdFxcdFxcdFxcdCAgICAgbnZtZXRfZGlzY19zdWJzeXMtXFx1MDAzZXN1YnN5c25xbixcXG4rXFx0XFx0XFx0XFx0ICAgICBkaXNjX3N1YnN5cy1cXHUwMDNlc3Vic3lzbnFuLFxcbiBcXHRcXHRcXHRcXHQgICAgIHRyYWRkciwgTlZNRV9OUU5fQ1VSUiwgbnVtcmVjKTtcXG4gXFx0bnVtcmVjKys7XFxuIFxcbkBAIC0yMzUsNyArMjg4LDcgQEAgc3RhdGljIHZvaWQgbnZtZXRfZXhlY3V0ZV9kaXNjX2dldF9sb2dfcGFnZShzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXFxuIFxcdFxcdG51bXJlYysrO1xcbiBcXHR9XFxuIFxcbi1cXHRoZHItXFx1MDAzZWdlbmN0ciA9IGNwdV90b19sZTY0KG52bWV0X2dlbmN0cik7XFxuK1xcdGhkci1cXHUwMDNlZ2VuY3RyID0gY3B1X3RvX2xlNjQoZGlzY19zdWJzeXMtXFx1MDAzZWdlbmN0cik7XFxuIFxcdGhkci1cXHUwMDNlbnVtcmVjID0gY3B1X3RvX2xlNjQobnVtcmVjKTtcXG4gXFx0aGRyLVxcdTAwM2VyZWNmbXQgPSBjcHVfdG9fbGUxNigwKTtcXG4gXFxuQEAgLTQyOCwxNSArNDgxLDMgQEAgdTE2IG52bWV0X3BhcnNlX2Rpc2NvdmVyeV9jbWQoc3RydWN0IG52bWV0X3JlcSAqcmVxKVxcbiBcXHR9XFxuIFxcbiB9XFxuLVxcbi1pbnQgX19pbml0IG52bWV0X2luaXRfZGlzY292ZXJ5KHZvaWQpXFxuLXtcXG4tXFx0bnZtZXRfZGlzY19zdWJzeXMgPVxcbi1cXHRcXHRudm1ldF9zdWJzeXNfYWxsb2MoTlZNRV9ESVNDX1NVQlNZU19OQU1FLCBOVk1FX05RTl9DVVJSKTtcXG4tXFx0cmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhudm1ldF9kaXNjX3N1YnN5cyk7XFxuLX1cXG4tXFxuLXZvaWQgbnZtZXRfZXhpdF9kaXNjb3Zlcnkodm9pZClcXG4te1xcbi1cXHRudm1ldF9zdWJzeXNfcHV0KG52bWV0X2Rpc2Nfc3Vic3lzKTtcXG4tfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jXFxuaW5kZXggZmNiMWY4MTg2ZmRkMGQuLjBlZGQ2OTA5MDJjZTRiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jXFxuKysrIGIvZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmNcXG5AQCAtOSw2ICs5LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L252bWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFyc2VyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uc3Byb3h5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJudm1ldC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vaG9zdC9udm1lLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9ob3N0L2ZhYnJpY3MuaFxcXCJcXG5AQCAtNTM4LDYgKzUzOSw5IEBAIHN0YXRpYyBzdHJ1Y3QgbnZtZXRfcG9ydCAqbnZtZV9sb29wX2ZpbmRfcG9ydChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2bnZtZV9sb29wX3BvcnRzX211dGV4KTtcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcXHUwMDI2bnZtZV9sb29wX3BvcnRzLCBlbnRyeSkge1xcbitcXHRcXHQvKiBTa2lwIHBvcnRzIGZyb20gbm9uLW1hdGNoaW5nIG5hbWVzcGFjZXMgKi9cXG4rXFx0XFx0aWYgKHAtXFx1MDAzZW5ldF9ucyAhPSBjdXJyZW50LVxcdTAwM2Vuc3Byb3h5LVxcdTAwM2VuZXRfbnMpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHQvKiBpZiBubyB0cmFuc3BvcnQgYWRkcmVzcyBpcyBzcGVjaWZpZWQgdXNlIHRoZSBmaXJzdCBwb3J0ICovXFxuIFxcdFxcdGlmICgoY3RybC1cXHUwMDNlb3B0cy1cXHUwMDNlbWFzayBcXHUwMDI2IE5WTUZfT1BUX1RSQUREUikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIHN0cmNtcChjdHJsLVxcdTAwM2VvcHRzLVxcdTAwM2V0cmFkZHIsIHAtXFx1MDAzZWRpc2NfYWRkci50cmFkZHIpKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmggYi9kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmhcXG5pbmRleCAzMzA1YTg4Njg0ZWNhYi4uNjgxZjkzNWQ4MDA4NmIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oXFxuKysrIGIvZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oXFxuQEAgLTIxMCw2ICsyMTAsNyBAQCBzdHJ1Y3QgbnZtZXRfcG9ydCB7XFxuIFxcdHN0cnVjdCBudm1ldF9hbmFfZ3JvdXBcXHRcXHRhbmFfZGVmYXVsdF9ncm91cDtcXG4gXFx0ZW51bSBudm1lX2FuYV9zdGF0ZVxcdFxcdCphbmFfc3RhdGU7XFxuIFxcdHN0cnVjdCBrZXlcXHRcXHRcXHQqa2V5cmluZztcXG4rXFx0c3RydWN0IG5ldFxcdFxcdFxcdCpuZXRfbnM7XFxuIFxcdHZvaWRcXHRcXHRcXHRcXHQqcHJpdjtcXG4gXFx0Ym9vbFxcdFxcdFxcdFxcdGVuYWJsZWQ7XFxuIFxcdGludFxcdFxcdFxcdFxcdGlubGluZV9kYXRhX3NpemU7XFxuQEAgLTMyNSw2ICszMjYsOSBAQCBzdHJ1Y3QgbnZtZXRfc3Vic3lzIHtcXG4gXFx0dTE2XFx0XFx0XFx0Y250bGlkX21pbjtcXG4gXFx0dTE2XFx0XFx0XFx0Y250bGlkX21heDtcXG4gXFxuK1xcdC8qIEZvciBkaXNjb3Zlcnkgc3Vic3lzdGVtcyAqL1xcbitcXHR1NjQgZ2VuY3RyO1xcbitcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdGN0cmxzO1xcbiBcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdGhvc3RzO1xcbkBAIC02MjYsNyArNjMwLDcgQEAgc3NpemVfdCBudm1ldF9jdHJsX2hvc3RfdHJhZGRyKHN0cnVjdCBudm1ldF9jdHJsICpjdHJsLFxcbiBcXHRcXHRjaGFyICp0cmFkZHIsIHNpemVfdCB0cmFkZHJfbGVuKTtcXG4gXFxuIHN0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X3N1YnN5c19hbGxvYyhjb25zdCBjaGFyICpzdWJzeXNucW4sXFxuLVxcdFxcdGVudW0gbnZtZV9zdWJzeXNfdHlwZSB0eXBlKTtcXG4rXFx0XFx0ZW51bSBudm1lX3N1YnN5c190eXBlIHR5cGUsIHN0cnVjdCBuZXQgKm5ldF9ucyk7XFxuIHZvaWQgbnZtZXRfc3Vic3lzX3B1dChzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMpO1xcbiB2b2lkIG52bWV0X3N1YnN5c19kZWxfY3RybHMoc3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzKTtcXG4gXFxuQEAgLTY2Miw3ICs2NjYsNiBAQCB1MTYgbnZtZXRfemVyb19zZ2woc3RydWN0IG52bWV0X3JlcSAqcmVxLCBvZmZfdCBvZmYsIHNpemVfdCBsZW4pO1xcbiB1MzIgbnZtZXRfZ2V0X2xvZ19wYWdlX2xlbihzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbWQpO1xcbiB1NjQgbnZtZXRfZ2V0X2xvZ19wYWdlX29mZnNldChzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbWQpO1xcbiBcXG4tZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgKm52bWV0X3BvcnRzO1xcbiB2b2lkIG52bWV0X3BvcnRfZGlzY19jaGFuZ2VkKHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0LFxcbiBcXHRcXHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMpO1xcbiB2b2lkIG52bWV0X3N1YnN5c19kaXNjX2NoYW5nZWQoc3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzLFxcbkBAIC02OTYsMTEgKzY5OSwxMyBAQCB2b2lkIG52bWV0X2FkZF9hc3luY19ldmVudChzdHJ1Y3QgbnZtZXRfY3RybCAqY3RybCwgdTggZXZlbnRfdHlwZSxcXG4gXFxuIGludCBfX2luaXQgbnZtZXRfaW5pdF9jb25maWdmcyh2b2lkKTtcXG4gdm9pZCBfX2V4aXQgbnZtZXRfZXhpdF9jb25maWdmcyh2b2lkKTtcXG4rZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgKm52bWV0X2dldF9wb3J0X2xpc3Qoc3RydWN0IG5ldCAqbmV0X25zKTtcXG4gXFxuLWludCBfX2luaXQgbnZtZXRfaW5pdF9kaXNjb3Zlcnkodm9pZCk7XFxuLXZvaWQgbnZtZXRfZXhpdF9kaXNjb3Zlcnkodm9pZCk7XFxuK2V4dGVybiB1NjQgbnZtZXRfZ2V0X25zX2lkKHN0cnVjdCBuZXQgKm5ldF9ucyk7XFxuK2V4dGVybiBpbnQgbnZtZXRfYWRkX2Rpc2Nfc3Vic3lzKHN0cnVjdCBuZXQgKm5ldF9ucyk7XFxuK2V4dGVybiB2b2lkIG52bWV0X2RlbF9kaXNjX3N1YnN5cyhzdHJ1Y3QgbmV0ICpuZXRfbnMpO1xcbitleHRlcm4gc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzKHN0cnVjdCBuZXQgKm5ldF9ucyk7XFxuIFxcbi1leHRlcm4gc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfZGlzY19zdWJzeXM7XFxuIGV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIG52bWV0X2NvbmZpZ19zZW07XFxuIFxcbiBleHRlcm4gdTMyIG52bWV0X2FuYV9ncm91cF9lbmFibGVkW05WTUVUX01BWF9BTkFHUlBTICsgMV07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS90YXJnZXQvcmRtYS5jIGIvZHJpdmVycy9udm1lL3RhcmdldC9yZG1hLmNcXG5pbmRleCBhYzI2ZjRmNzc0YzRkZS4uY2FkMjM5MWE2ZDBhNzggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9udm1lL3RhcmdldC9yZG1hLmNcXG4rKysgYi9kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuY1xcbkBAIC0xODcwLDggKzE4NzAsOCBAQCBzdGF0aWMgaW50IG52bWV0X3JkbWFfZW5hYmxlX3BvcnQoc3RydWN0IG52bWV0X3JkbWFfcG9ydCAqcG9ydClcXG4gXFx0c3RydWN0IHJkbWFfY21faWQgKmNtX2lkO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0Y21faWQgPSByZG1hX2NyZWF0ZV9pZChcXHUwMDI2aW5pdF9uZXQsIG52bWV0X3JkbWFfY21faGFuZGxlciwgcG9ydCxcXG4tXFx0XFx0XFx0UkRNQV9QU19UQ1AsIElCX1FQVF9SQyk7XFxuK1xcdGNtX2lkID0gcmRtYV9jcmVhdGVfaWQocG9ydC1cXHUwMDNlbnBvcnQtXFx1MDAzZW5ldF9ucywgbnZtZXRfcmRtYV9jbV9oYW5kbGVyLFxcbitcXHRcXHRcXHRwb3J0LCBSRE1BX1BTX1RDUCwgSUJfUVBUX1JDKTtcXG4gXFx0aWYgKElTX0VSUihjbV9pZCkpIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJDTSBJRCBjcmVhdGlvbiBmYWlsZWRcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihjbV9pZCk7XFxuQEAgLTE5NjQsNyArMTk2NCw3IEBAIHN0YXRpYyBpbnQgbnZtZXRfcmRtYV9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpXFxuIFxcdFxcdG5wb3J0LVxcdTAwM2VtYXhfcXVldWVfc2l6ZSA9IE5WTUVfUkRNQV9NQVhfUVVFVUVfU0laRTtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0ID0gaW5ldF9wdG9uX3dpdGhfc2NvcGUoXFx1MDAyNmluaXRfbmV0LCBhZiwgbnBvcnQtXFx1MDAzZWRpc2NfYWRkci50cmFkZHIsXFxuK1xcdHJldCA9IGluZXRfcHRvbl93aXRoX3Njb3BlKG5wb3J0LVxcdTAwM2VuZXRfbnMsIGFmLCBucG9ydC1cXHUwMDNlZGlzY19hZGRyLnRyYWRkcixcXG4gXFx0XFx0XFx0bnBvcnQtXFx1MDAzZWRpc2NfYWRkci50cnN2Y2lkLCBcXHUwMDI2cG9ydC1cXHUwMDNlYWRkcik7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJtYWxmb3JtZWQgaXAvcG9ydCBwYXNzZWQ6ICVzOiVzXFxcXG5cXFwiLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jIGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xcbmluZGV4IDE1YzUyZjFmOTVmMWIwLi4wMTZiZWY2NWE3NmRkOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jXFxuKysrIGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xcbkBAIC0yMDc0LDcgKzIwNzQsNyBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpXFxuIFxcdFxcdGdvdG8gZXJyX3BvcnQ7XFxuIFxcdH1cXG4gXFxuLVxcdHJldCA9IGluZXRfcHRvbl93aXRoX3Njb3BlKFxcdTAwMjZpbml0X25ldCwgYWYsIG5wb3J0LVxcdTAwM2VkaXNjX2FkZHIudHJhZGRyLFxcbitcXHRyZXQgPSBpbmV0X3B0b25fd2l0aF9zY29wZShucG9ydC1cXHUwMDNlbmV0X25zLCBhZiwgbnBvcnQtXFx1MDAzZWRpc2NfYWRkci50cmFkZHIsXFxuIFxcdFxcdFxcdG5wb3J0LVxcdTAwM2VkaXNjX2FkZHIudHJzdmNpZCwgXFx1MDAyNnBvcnQtXFx1MDAzZWFkZHIpO1xcbiBcXHRpZiAocmV0KSB7XFxuIFxcdFxcdHByX2VycihcXFwibWFsZm9ybWVkIGlwL3BvcnQgcGFzc2VkOiAlczolc1xcXFxuXFxcIixcXG5AQCAtMjA4Nyw4ICsyMDg3LDggQEAgc3RhdGljIGludCBudm1ldF90Y3BfYWRkX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKm5wb3J0KVxcbiBcXHRpZiAocG9ydC1cXHUwMDNlbnBvcnQtXFx1MDAzZWlubGluZV9kYXRhX3NpemUgXFx1MDAzYyAwKVxcbiBcXHRcXHRwb3J0LVxcdTAwM2VucG9ydC1cXHUwMDNlaW5saW5lX2RhdGFfc2l6ZSA9IE5WTUVUX1RDUF9ERUZfSU5MSU5FX0RBVEFfU0laRTtcXG4gXFxuLVxcdHJldCA9IHNvY2tfY3JlYXRlKHBvcnQtXFx1MDAzZWFkZHIuc3NfZmFtaWx5LCBTT0NLX1NUUkVBTSxcXG4tXFx0XFx0XFx0XFx0SVBQUk9UT19UQ1AsIFxcdTAwMjZwb3J0LVxcdTAwM2Vzb2NrKTtcXG4rXFx0cmV0ID0gc29ja19jcmVhdGVfa2VybihucG9ydC1cXHUwMDNlbmV0X25zLCBwb3J0LVxcdTAwM2VhZGRyLnNzX2ZhbWlseSwgU09DS19TVFJFQU0sXFxuK1xcdFxcdFxcdCAgICBJUFBST1RPX1RDUCwgXFx1MDAyNnBvcnQtXFx1MDAzZXNvY2spO1xcbiBcXHRpZiAocmV0KSB7XFxuIFxcdFxcdHByX2VycihcXFwiZmFpbGVkIHRvIGNyZWF0ZSBhIHNvY2tldFxcXFxuXFxcIik7XFxuIFxcdFxcdGdvdG8gZXJyX3BvcnQ7XFxuZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL2NvbmZpZ2ZzX2ludGVybmFsLmggYi9mcy9jb25maWdmcy9jb25maWdmc19pbnRlcm5hbC5oXFxuaW5kZXggYWNkZWVhOGUyZDY5YWMuLjM1ZWRkYzI3NGI4ODc5IDEwMDY0NFxcbi0tLSBhL2ZzL2NvbmZpZ2ZzL2NvbmZpZ2ZzX2ludGVybmFsLmhcXG4rKysgYi9mcy9jb25maWdmcy9jb25maWdmc19pbnRlcm5hbC5oXFxuQEAgLTQ0LDYgKzQ0LDE3IEBAIHN0cnVjdCBjb25maWdmc19kaXJlbnQge1xcbiBcXHRzdHJ1Y3QgY29uZmlnZnNfZnJhZ21lbnQgKnNfZnJhZztcXG4gfTtcXG4gXFxuK3N0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvIHtcXG4rXFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCByb290O1xcbitcXHRzdHJ1Y3QgY29uZmlnX2dyb3VwIGdyb3VwO1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIHN1YnN5c19saXN0O1xcbitcXHRzdHJ1Y3QgbXV0ZXggc3Vic3lzX211dGV4O1xcbitcXHRzdHJ1Y3QgdmZzbW91bnQgKm1udDtcXG4rXFx0aW50IG1udF9jb3VudDtcXG4rXFx0c3RydWN0IG5ldCAqbmV0X25zO1xcbitcXHRyZWZjb3VudF90IHJlZjtcXG4rfTtcXG4rXFxuICNkZWZpbmUgQ09ORklHRlNfUk9PVFxcdFxcdDB4MDAwMVxcbiAjZGVmaW5lIENPTkZJR0ZTX0RJUlxcdFxcdDB4MDAwMlxcbiAjZGVmaW5lIENPTkZJR0ZTX0lURU1fQVRUUlxcdDB4MDAwNFxcbkBAIC02Myw3ICs3NCw3IEBAIGV4dGVybiBzcGlubG9ja190IGNvbmZpZ2ZzX2RpcmVudF9sb2NrO1xcbiBcXG4gZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpjb25maWdmc19kaXJfY2FjaGVwO1xcbiBcXG4tZXh0ZXJuIGludCBjb25maWdmc19pc19yb290KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSk7XFxuK2V4dGVybiBib29sIGNvbmZpZ2ZzX2lzX3Jvb3Qoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKTtcXG4gXFxuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKiBjb25maWdmc19uZXdfaW5vZGUodW1vZGVfdCBtb2RlLCBzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICosIHN0cnVjdCBzdXBlcl9ibG9jayAqKTtcXG4gZXh0ZXJuIHN0cnVjdCBpbm9kZSAqY29uZmlnZnNfY3JlYXRlKHN0cnVjdCBkZW50cnkgKiwgdW1vZGVfdCBtb2RlKTtcXG5AQCAtNzksOCArOTAsMTQgQEAgZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBjb25maWdmc19nZXRfbmFtZShzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZCk7XFxuIGV4dGVybiBpbnQgY29uZmlnZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICppYXR0cik7XFxuIFxcbi1leHRlcm4gc3RydWN0IGRlbnRyeSAqY29uZmlnZnNfcGluX2ZzKHZvaWQpO1xcbi1leHRlcm4gdm9pZCBjb25maWdmc19yZWxlYXNlX2ZzKHZvaWQpO1xcbitleHRlcm4gc3RydWN0IGRlbnRyeSAqY29uZmlnZnNfcGluX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbitleHRlcm4gdm9pZCBjb25maWdmc19yZWxlYXNlX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbitleHRlcm4gc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKHN0cnVjdCBuZXQgKm5ldF9ucyk7XFxuK2V4dGVybiB2b2lkIGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvKTtcXG4rZXh0ZXJuIHZvaWQgY29uZmlnZnNfbGlua19zdWJzeXN0ZW1zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8pO1xcbitleHRlcm4gdm9pZCBjb25maWdmc191bmxpbmtfc3Vic3lzdGVtcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8pO1xcbiBcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29uZmlnZnNfZGlyX29wZXJhdGlvbnM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvbmZpZ2ZzX2ZpbGVfb3BlcmF0aW9ucztcXG5kaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvZGlyLmMgYi9mcy9jb25maWdmcy9kaXIuY1xcbmluZGV4IDNjODhmMTNmMWNhMmU5Li4zZDM5YTZjMWE0MTYzNiAxMDA2NDRcXG4tLS0gYS9mcy9jb25maWdmcy9kaXIuY1xcbisrKyBiL2ZzL2NvbmZpZ2ZzL2Rpci5jXFxuQEAgLTM0LDE0ICszNCw2IEBAXFxuICAqL1xcbiBERUZJTkVfU1BJTkxPQ0soY29uZmlnZnNfZGlyZW50X2xvY2spO1xcbiBcXG4tLypcXG4tICogQWxsIG9mIGxpbmtfb2JqL3VubGlua19vYmovbGlua19ncm91cC91bmxpbmtfZ3JvdXAgcmVxdWlyZSB0aGF0XFxuLSAqIHN1YnN5cy1cXHUwMDNlc3VfbXV0ZXggaXMgaGVsZC5cXG4tICogQnV0IHBhcmVudCBjb25maWdmc19zdWJzeXN0ZW0gaXMgTlVMTCB3aGVuIGNvbmZpZ19pdGVtIGlzIHJvb3QuXFxuLSAqIFVzZSB0aGlzIG11dGV4IHdoZW4gY29uZmlnX2l0ZW0gaXMgcm9vdC5cXG4tICovXFxuLXN0YXRpYyBERUZJTkVfTVVURVgoY29uZmlnZnNfc3Vic3lzdGVtX211dGV4KTtcXG4tXFxuIHN0YXRpYyB2b2lkIGNvbmZpZ2ZzX2RfaXB1dChzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGlub2RlICogaW5vZGUpXFxuIHtcXG5AQCAtMTE1Miw3ICsxMTQ0LDcgQEAgaW50IGNvbmZpZ2ZzX2RlcGVuZF9pdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cyxcXG4gXFx0ICogUGluIHRoZSBjb25maWdmcyBmaWxlc3lzdGVtLiAgVGhpcyBtZWFucyB3ZSBjYW4gc2FmZWx5IGFjY2Vzc1xcbiBcXHQgKiB0aGUgcm9vdCBvZiB0aGUgY29uZmlnZnMgZmlsZXN5c3RlbS5cXG4gXFx0ICovXFxuLVxcdHJvb3QgPSBjb25maWdmc19waW5fZnMoKTtcXG4rXFx0cm9vdCA9IGNvbmZpZ2ZzX3Bpbl9mcyhOVUxMKTtcXG4gXFx0aWYgKElTX0VSUihyb290KSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIocm9vdCk7XFxuIFxcbkBAIC0xMTc5LDcgKzExNzEsNyBAQCBpbnQgY29uZmlnZnNfZGVwZW5kX2l0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzLFxcbiBcXHQgKiBJZiB3ZSBzdWNjZWVkZWQsIHRoZSBmcyBpcyBwaW5uZWQgdmlhIG90aGVyIG1ldGhvZHMuICBJZiBub3QsXFxuIFxcdCAqIHdlJ3JlIGRvbmUgd2l0aCBpdCBhbnl3YXkuICBTbyByZWxlYXNlX2ZzKCkgaXMgYWx3YXlzIHJpZ2h0LlxcbiBcXHQgKi9cXG4tXFx0Y29uZmlnZnNfcmVsZWFzZV9mcygpO1xcbitcXHRjb25maWdmc19yZWxlYXNlX2ZzKE5VTEwpO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0xODY5LDMyICsxODYxLDI3IEBAIHZvaWQgY29uZmlnZnNfdW5yZWdpc3Rlcl9kZWZhdWx0X2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0woY29uZmlnZnNfdW5yZWdpc3Rlcl9kZWZhdWx0X2dyb3VwKTtcXG4gXFxuLWludCBjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKVxcbitzdGF0aWMgaW50IGNvbmZpZ2ZzX2xpbmtfcm9vdChzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAgKmluZm8sXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cyxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqcm9vdClcXG4ge1xcbi1cXHRpbnQgZXJyO1xcbiBcXHRzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCA9IFxcdTAwMjZzdWJzeXMtXFx1MDAzZXN1X2dyb3VwO1xcbiBcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XFxuLVxcdHN0cnVjdCBkZW50cnkgKnJvb3Q7XFxuIFxcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xcbiBcXHRzdHJ1Y3QgY29uZmlnZnNfZnJhZ21lbnQgKmZyYWc7XFxuK1xcdGludCBlcnI7XFxuIFxcbiBcXHRmcmFnID0gbmV3X2ZyYWdtZW50KCk7XFxuIFxcdGlmICghZnJhZylcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHRyb290ID0gY29uZmlnZnNfcGluX2ZzKCk7XFxuLVxcdGlmIChJU19FUlIocm9vdCkpIHtcXG4tXFx0XFx0cHV0X2ZyYWdtZW50KGZyYWcpO1xcbi1cXHRcXHRyZXR1cm4gUFRSX0VSUihyb290KTtcXG4tXFx0fVxcbi1cXG4gXFx0aWYgKCFncm91cC1cXHUwMDNlY2dfaXRlbS5jaV9uYW1lKVxcbiBcXHRcXHRncm91cC1cXHUwMDNlY2dfaXRlbS5jaV9uYW1lID0gZ3JvdXAtXFx1MDAzZWNnX2l0ZW0uY2lfbmFtZWJ1ZjtcXG4gXFxuIFxcdHNkID0gcm9vdC1cXHUwMDNlZF9mc2RhdGE7XFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmNvbmZpZ2ZzX3N1YnN5c3RlbV9tdXRleCk7XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmluZm8tXFx1MDAzZXN1YnN5c19tdXRleCk7XFxuIFxcdGxpbmtfZ3JvdXAodG9fY29uZmlnX2dyb3VwKHNkLVxcdTAwM2VzX2VsZW1lbnQpLCBncm91cCk7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2Y29uZmlnZnNfc3Vic3lzdGVtX211dGV4KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2VzdWJzeXNfbXV0ZXgpO1xcbiBcXG4gXFx0aW5vZGVfbG9ja19uZXN0ZWQoZF9pbm9kZShyb290KSwgSV9NVVRFWF9QQVJFTlQpO1xcbiBcXG5AQCAtMTkyMSwxNyArMTkwOCwxMjAgQEAgaW50IGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpXFxuIFxcdGlub2RlX3VubG9jayhkX2lub2RlKHJvb3QpKTtcXG4gXFxuIFxcdGlmIChlcnIpIHtcXG4tXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Y29uZmlnZnNfc3Vic3lzdGVtX211dGV4KTtcXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2aW5mby1cXHUwMDNlc3Vic3lzX211dGV4KTtcXG4gXFx0XFx0dW5saW5rX2dyb3VwKGdyb3VwKTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjb25maWdmc19zdWJzeXN0ZW1fbXV0ZXgpO1xcbi1cXHRcXHRjb25maWdmc19yZWxlYXNlX2ZzKCk7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlc3Vic3lzX211dGV4KTtcXG4gXFx0fVxcbiBcXHRwdXRfZnJhZ21lbnQoZnJhZyk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4gXFxuK2ludCBjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKVxcbit7XFxuK1xcdHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvO1xcbitcXHRzdHJ1Y3QgZGVudHJ5ICpyb290O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aW5mbyA9IGNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKFxcdTAwMjZpbml0X25ldCk7XFxuK1xcdGlmIChXQVJOX09OKElTX0VSUihpbmZvKSkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGluZm8pO1xcbitcXG4rXFx0cm9vdCA9IGNvbmZpZ2ZzX3Bpbl9mcyhOVUxMKTtcXG4rXFx0aWYgKElTX0VSUihyb290KSkge1xcbitcXHRcXHRlcnIgPSBQVFJfRVJSKHJvb3QpO1xcbitcXHRcXHRnb3RvIG91dF9wdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzdWJzeXMtXFx1MDAzZWZpbGxfc3Vic3lzdGVtKSB7XFxuK1xcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzdWJzeXMtXFx1MDAzZXN1X2xpbmspO1xcbitcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZzdWJzeXMtXFx1MDAzZXN1X211dGV4KTtcXG4rXFx0XFx0Y29uZmlnX2dyb3VwX2luaXQoXFx1MDAyNnN1YnN5cy1cXHUwMDNlc3VfZ3JvdXApO1xcbitcXHRcXHRlcnIgPSBzdWJzeXMtXFx1MDAzZWZpbGxfc3Vic3lzdGVtKHN1YnN5cywgaW5mby1cXHUwMDNlbmV0X25zKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBvdXRfcmVsZWFzZTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gY29uZmlnZnNfbGlua19yb290KGluZm8sIHN1YnN5cywgcm9vdCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0aWYgKHN1YnN5cy1cXHUwMDNlY2xlYXJfc3Vic3lzdGVtKVxcbitcXHRcXHRcXHRzdWJzeXMtXFx1MDAzZWNsZWFyX3N1YnN5c3RlbShzdWJzeXMsIGluZm8tXFx1MDAzZW5ldF9ucyk7XFxuK1xcdFxcdGdvdG8gb3V0X3JlbGVhc2U7XFxuK1xcdH1cXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmluZm8tXFx1MDAzZXN1YnN5c19tdXRleCk7XFxuK1xcdGxpc3RfYWRkKFxcdTAwMjZzdWJzeXMtXFx1MDAzZXN1X2xpbmssIFxcdTAwMjZpbmZvLVxcdTAwM2VzdWJzeXNfbGlzdCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlc3Vic3lzX211dGV4KTtcXG4rXFxuK291dF9yZWxlYXNlOlxcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRjb25maWdmc19yZWxlYXNlX2ZzKE5VTEwpO1xcbitvdXRfcHV0OlxcbitcXHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tdm9pZCBjb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpXFxuK3ZvaWQgY29uZmlnZnNfbGlua19zdWJzeXN0ZW1zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvKVxcbit7XFxuK1xcdHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnM7XFxuK1xcdHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICpwYXJlbnQgPSBjb25maWdmc19nZXRfc3VwZXJfaW5mbyhcXHUwMDI2aW5pdF9uZXQpO1xcbitcXHRMSVNUX0hFQUQoc3Vic3lzX2xpc3QpO1xcbitcXG4rXFx0aWYgKFdBUk5fT04oSVNfRVJSKHBhcmVudCkpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlmICgoaW5mby1cXHUwMDNlbmV0X25zID09IFxcdTAwMjZpbml0X25ldCkgfHwgV0FSTl9PTihwYXJlbnQgPT0gaW5mbykpIHtcXG4rXFx0XFx0Y29uZmlnZnNfcHV0X3N1cGVyX2luZm8ocGFyZW50KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnBhcmVudC1cXHUwMDNlc3Vic3lzX211dGV4KTtcXG4rXFx0bGlzdF9zcGxpY2VfaW5pdChcXHUwMDI2cGFyZW50LVxcdTAwM2VzdWJzeXNfbGlzdCwgXFx1MDAyNnN1YnN5c19saXN0KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwYXJlbnQtXFx1MDAzZXN1YnN5c19tdXRleCk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkocywgXFx1MDAyNnN1YnN5c19saXN0LCBzdV9saW5rKSB7XFxuK1xcdFxcdHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cztcXG4rXFx0XFx0c3RydWN0IGRlbnRyeSAqcm9vdDtcXG4rXFx0XFx0aW50IGVycjtcXG4rXFxuK1xcdFxcdGlmICghcy1cXHUwMDNlZmlsbF9zdWJzeXN0ZW0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRzdWJzeXMgPSBremFsbG9jX29iaigqc3Vic3lzKTtcXG4rXFx0XFx0aWYgKCFzdWJzeXMpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRzdWJzeXMtXFx1MDAzZWZpbGxfc3Vic3lzdGVtID0gcy1cXHUwMDNlZmlsbF9zdWJzeXN0ZW07XFxuK1xcdFxcdHN1YnN5cy1cXHUwMDNlY2xlYXJfc3Vic3lzdGVtID0gcy1cXHUwMDNlY2xlYXJfc3Vic3lzdGVtO1xcbitcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c3Vic3lzLVxcdTAwM2VzdV9saW5rKTtcXG4rXFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2c3Vic3lzLVxcdTAwM2VzdV9tdXRleCk7XFxuK1xcdFxcdGNvbmZpZ19ncm91cF9pbml0KFxcdTAwMjZzdWJzeXMtXFx1MDAzZXN1X2dyb3VwKTtcXG4rXFx0XFx0ZXJyID0gc3Vic3lzLVxcdTAwM2VmaWxsX3N1YnN5c3RlbShzdWJzeXMsIGluZm8tXFx1MDAzZW5ldF9ucyk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0a2ZyZWUoc3Vic3lzKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cm9vdCA9IGNvbmZpZ2ZzX3Bpbl9mcyhzYik7XFxuK1xcdFxcdGlmIChJU19FUlIocm9vdCkpIHtcXG4rXFx0XFx0XFx0aWYgKHN1YnN5cy1cXHUwMDNlY2xlYXJfc3Vic3lzdGVtKVxcbitcXHRcXHRcXHRcXHRzdWJzeXMtXFx1MDAzZWNsZWFyX3N1YnN5c3RlbShzdWJzeXMsIGluZm8tXFx1MDAzZW5ldF9ucyk7XFxuK1xcdFxcdFxcdGtmcmVlKHN1YnN5cyk7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdGVyciA9IGNvbmZpZ2ZzX2xpbmtfcm9vdChpbmZvLCBzdWJzeXMsIHJvb3QpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdGNvbmZpZ2ZzX3JlbGVhc2VfZnMoc2IpO1xcbitcXHRcXHRcXHRpZiAoc3Vic3lzLVxcdTAwM2VjbGVhcl9zdWJzeXN0ZW0pXFxuK1xcdFxcdFxcdFxcdHN1YnN5cy1cXHUwMDNlY2xlYXJfc3Vic3lzdGVtKHN1YnN5cywgaW5mby1cXHUwMDNlbmV0X25zKTtcXG4rXFx0XFx0XFx0a2ZyZWUoc3Vic3lzKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2aW5mby1cXHUwMDNlc3Vic3lzX211dGV4KTtcXG4rXFx0XFx0bGlzdF9hZGQoXFx1MDAyNnN1YnN5cy1cXHUwMDNlc3VfbGluaywgXFx1MDAyNmluZm8tXFx1MDAzZXN1YnN5c19saXN0KTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2VzdWJzeXNfbXV0ZXgpO1xcbitcXHR9XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnBhcmVudC1cXHUwMDNlc3Vic3lzX211dGV4KTtcXG4rXFx0bGlzdF9zcGxpY2UoXFx1MDAyNnN1YnN5c19saXN0LCBcXHUwMDI2cGFyZW50LVxcdTAwM2VzdWJzeXNfbGlzdCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cGFyZW50LVxcdTAwM2VzdWJzeXNfbXV0ZXgpO1xcbitcXHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhwYXJlbnQpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBjb25maWdmc191bmxpbmtfcm9vdChzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpXFxuIHtcXG4gXFx0c3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAgPSBcXHUwMDI2c3Vic3lzLVxcdTAwM2VzdV9ncm91cDtcXG4gXFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZGdldChncm91cC1cXHUwMDNlY2dfaXRlbS5jaV9kZW50cnkpO1xcbkBAIC0xOTQxLDcgKzIwMzEsOCBAQCB2b2lkIGNvbmZpZ2ZzX3VucmVnaXN0ZXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cylcXG4gXFxuIFxcdGlmIChkZW50cnktXFx1MDAzZWRfcGFyZW50ICE9IHJvb3QpIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJUcmllZCB0byB1bnJlZ2lzdGVyIG5vbi1zdWJzeXN0ZW0hXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRkcHV0KGRlbnRyeSk7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBcXG4gXFx0ZG93bl93cml0ZShcXHUwMDI2ZnJhZy1cXHUwMDNlZnJhZ19zZW0pO1xcbkBAIC0xOTY5LDExICsyMDYwLDUwIEBAIHZvaWQgY29uZmlnZnNfdW5yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKVxcbiBcXHRpbm9kZV91bmxvY2soZF9pbm9kZShyb290KSk7XFxuIFxcbiBcXHRkcHV0KGRlbnRyeSk7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbit2b2lkIGNvbmZpZ2ZzX3VubGlua19zdWJzeXN0ZW1zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvKVxcbit7XFxuK1xcdHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cywgKnM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2VzdWJzeXNfbXV0ZXgpO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3Vic3lzLCBzLCBcXHUwMDI2aW5mby1cXHUwMDNlc3Vic3lzX2xpc3QsIHN1X2xpbmspIHtcXG4rXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2c3Vic3lzLVxcdTAwM2VzdV9saW5rKTtcXG4rXFx0XFx0aWYgKCFjb25maWdmc191bmxpbmtfcm9vdChzdWJzeXMpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKHN1YnN5cy1cXHUwMDNlY2xlYXJfc3Vic3lzdGVtKVxcbitcXHRcXHRcXHRzdWJzeXMtXFx1MDAzZWNsZWFyX3N1YnN5c3RlbShzdWJzeXMsIGluZm8tXFx1MDAzZW5ldF9ucyk7XFxuK1xcdFxcdHVubGlua19ncm91cChcXHUwMDI2c3Vic3lzLVxcdTAwM2VzdV9ncm91cCk7XFxuK1xcdFxcdGNvbmZpZ2ZzX3JlbGVhc2VfZnMoc2IpO1xcbitcXHRcXHRrZnJlZShzdWJzeXMpO1xcbitcXHR9XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlc3Vic3lzX211dGV4KTtcXG4rfVxcbitcXG4rdm9pZCBjb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpXFxuK3tcXG4rXFx0c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm87XFxuK1xcdHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwID0gXFx1MDAyNnN1YnN5cy1cXHUwMDNlc3VfZ3JvdXA7XFxuK1xcbitcXHRpbmZvID0gY29uZmlnZnNfZ2V0X3N1cGVyX2luZm8oXFx1MDAyNmluaXRfbmV0KTtcXG4rXFx0aWYgKFdBUk5fT04oSVNfRVJSKGluZm8pKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKCFjb25maWdmc191bmxpbmtfcm9vdChzdWJzeXMpKSB7XFxuK1xcdFxcdGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKGluZm8pO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmNvbmZpZ2ZzX3N1YnN5c3RlbV9tdXRleCk7XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmluZm8tXFx1MDAzZXN1YnN5c19tdXRleCk7XFxuK1xcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnN1YnN5cy1cXHUwMDNlc3VfbGluayk7XFxuK1xcdGlmIChzdWJzeXMtXFx1MDAzZWNsZWFyX3N1YnN5c3RlbSlcXG4rXFx0XFx0c3Vic3lzLVxcdTAwM2VjbGVhcl9zdWJzeXN0ZW0oc3Vic3lzLCBpbmZvLVxcdTAwM2VuZXRfbnMpO1xcbiBcXHR1bmxpbmtfZ3JvdXAoZ3JvdXApO1xcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmNvbmZpZ2ZzX3N1YnN5c3RlbV9tdXRleCk7XFxuLVxcdGNvbmZpZ2ZzX3JlbGVhc2VfZnMoKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2VzdWJzeXNfbXV0ZXgpO1xcbitcXHRjb25maWdmc19yZWxlYXNlX2ZzKE5VTEwpO1xcbitcXHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTtcXG4gfVxcbiBcXG4gRVhQT1JUX1NZTUJPTChjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0pO1xcbmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9tb3VudC5jIGIvZnMvY29uZmlnZnMvbW91bnQuY1xcbmluZGV4IDQ5MjlmMzQzMTE4OTQ2Li43OTQxMjU3ZDU1OGI3MiAxMDA2NDRcXG4tLS0gYS9mcy9jb25maWdmcy9tb3VudC5jXFxuKysrIGIvZnMvY29uZmlnZnMvbW91bnQuY1xcbkBAIC0yMiwxMCArMjIsMTkgQEBcXG4gLyogUmFuZG9tIG1hZ2ljIG51bWJlciAqL1xcbiAjZGVmaW5lIENPTkZJR0ZTX01BR0lDIDB4NjI2NTY1NzBcXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKmNvbmZpZ2ZzX21vdW50ID0gTlVMTDtcXG4gc3RydWN0IGttZW1fY2FjaGUgKmNvbmZpZ2ZzX2Rpcl9jYWNoZXA7XFxuLXN0YXRpYyBpbnQgY29uZmlnZnNfbW50X2NvdW50ID0gMDtcXG4rc3RhdGljIERFRklORV9YQVJSQVkoY29uZmlnZnNfc3VwZXJfeGEpO1xcbitzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmNvbmZpZ2ZzX3Jvb3Q7XFxuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soY29uZmlnZnNfcGluX2xvY2spO1xcbiBcXG4rc3RhdGljIHU2NCBjb25maWdmc19uc19pZChzdHJ1Y3QgbmV0ICpuZXRfbnMpXFxuK3tcXG4rXFx0c3RydWN0IG5zX2NvbW1vbiAqbnMgPSBuZXRfbnMgPyB0b19uc19jb21tb24obmV0X25zKSA6IE5VTEw7XFxuK1xcbitcXHRpZiAoIW5zIHx8IG5ldF9ucyA9PSBcXHUwMDI2aW5pdF9uZXQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gbnMtXFx1MDAzZW5zX2lkO1xcbit9XFxuIFxcbiBzdGF0aWMgdm9pZCBjb25maWdmc19mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG5AQCAtNDAsMjggKzQ5LDgyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBjb25maWdmc19vcHMgPSB7XFxuIFxcdC5mcmVlX2lub2RlXFx0PSBjb25maWdmc19mcmVlX2lub2RlLFxcbiB9O1xcbiBcXG4tc3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgY29uZmlnZnNfcm9vdF9ncm91cCA9IHtcXG4tXFx0LmNnX2l0ZW0gPSB7XFxuLVxcdFxcdC5jaV9uYW1lYnVmXFx0PSBcXFwicm9vdFxcXCIsXFxuLVxcdFxcdC5jaV9uYW1lXFx0PSBjb25maWdmc19yb290X2dyb3VwLmNnX2l0ZW0uY2lfbmFtZWJ1ZixcXG4tXFx0fSxcXG4tfTtcXG4rYm9vbCBjb25maWdmc19pc19yb290KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG4re1xcbitcXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcXG4rXFxuK1xcdGlmICghaXRlbS1cXHUwMDNlY2lfZGVudHJ5KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdHNkID0gaXRlbS1cXHUwMDNlY2lfZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YTtcXG4rXFx0cmV0dXJuICEhKHNkLVxcdTAwM2VzX3R5cGUgXFx1MDAyNiBDT05GSUdGU19ST09UKTtcXG4rfVxcbiBcXG4taW50IGNvbmZpZ2ZzX2lzX3Jvb3Qoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxcbitzdGF0aWMgdm9pZCBjb25maWdmc19maWxsX3N1cGVyX2luZm8oc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8pXFxuIHtcXG4tXFx0cmV0dXJuIGl0ZW0gPT0gXFx1MDAyNmNvbmZpZ2ZzX3Jvb3RfZ3JvdXAuY2dfaXRlbTtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmluZm8tXFx1MDAzZXJvb3Quc19zaWJsaW5nKTtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmluZm8tXFx1MDAzZXJvb3Quc19jaGlsZHJlbik7XFxuK1xcdGluZm8tXFx1MDAzZXJvb3Quc190eXBlID0gQ09ORklHRlNfUk9PVDtcXG4rXFx0aW5mby1cXHUwMDNlcm9vdC5zX2VsZW1lbnQgPSBcXHUwMDI2aW5mby1cXHUwMDNlZ3JvdXAuY2dfaXRlbTtcXG4rXFx0c3Ryc2NweShpbmZvLVxcdTAwM2Vncm91cC5jZ19pdGVtLmNpX25hbWVidWYsIFxcXCJyb290XFxcIiwgNCk7XFxuK1xcdGluZm8tXFx1MDAzZWdyb3VwLmNnX2l0ZW0uY2lfbmFtZSA9IGluZm8tXFx1MDAzZWdyb3VwLmNnX2l0ZW0uY2lfbmFtZWJ1ZjtcXG4rXFx0Y29uZmlnX2dyb3VwX2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZWdyb3VwKTtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmluZm8tXFx1MDAzZXN1YnN5c19saXN0KTtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2aW5mby1cXHUwMDNlc3Vic3lzX211dGV4KTtcXG4rXFx0cmVmY291bnRfc2V0KFxcdTAwMjZpbmZvLVxcdTAwM2VyZWYsIDEpO1xcbitcXHRpbmZvLVxcdTAwM2VtbnRfY291bnQgPSAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCBjb25maWdmc19yb290ID0ge1xcbi1cXHQuc19zaWJsaW5nXFx0PSBMSVNUX0hFQURfSU5JVChjb25maWdmc19yb290LnNfc2libGluZyksXFxuLVxcdC5zX2NoaWxkcmVuXFx0PSBMSVNUX0hFQURfSU5JVChjb25maWdmc19yb290LnNfY2hpbGRyZW4pLFxcbi1cXHQuc19lbGVtZW50XFx0PSBcXHUwMDI2Y29uZmlnZnNfcm9vdF9ncm91cC5jZ19pdGVtLFxcbi1cXHQuc190eXBlXFx0XFx0PSBDT05GSUdGU19ST09ULFxcbi1cXHQuc19pYXR0clxcdD0gTlVMTCxcXG4tfTtcXG4rc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKHN0cnVjdCBuZXQgKm5ldF9ucylcXG4re1xcbitcXHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbztcXG4rXFx0dTY0IG5zX2lkID0gY29uZmlnZnNfbnNfaWQobmV0X25zKTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHhhX2xvY2soXFx1MDAyNmNvbmZpZ2ZzX3N1cGVyX3hhKTtcXG4rXFx0aW5mbyA9IHhhX2xvYWQoXFx1MDAyNmNvbmZpZ2ZzX3N1cGVyX3hhLCBuc19pZCk7XFxuK1xcdGlmIChpbmZvKSB7XFxuK1xcdFxcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKChcXHUwMDI2aW5mby1cXHUwMDNlcmVmKSkpXFxuK1xcdFxcdFxcdGluZm8gPSBFUlJfUFRSKC1FQlVTWSk7XFxuK1xcdFxcdHhhX3VubG9jayhcXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEpO1xcbitcXHRcXHRyZXR1cm4gaW5mbztcXG4rXFx0fVxcbitcXHRpbmZvID0ga3phbGxvY19vYmooKmluZm8pO1xcbitcXHRpZiAoIWluZm8pIHtcXG4rXFx0XFx0eGFfdW5sb2NrKFxcdTAwMjZjb25maWdmc19zdXBlcl94YSk7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHR9XFxuK1xcbitcXHRpbmZvLVxcdTAwM2VuZXRfbnMgPSBnZXRfbmV0KG5ldF9ucyk7XFxuK1xcdGNvbmZpZ2ZzX2ZpbGxfc3VwZXJfaW5mbyhpbmZvKTtcXG4rXFx0ZXJyID0gX194YV9pbnNlcnQoXFx1MDAyNmNvbmZpZ2ZzX3N1cGVyX3hhLCBuc19pZCxcXG4rXFx0XFx0XFx0ICBpbmZvLCBHRlBfS0VSTkVMKTtcXG4rXFx0eGFfdW5sb2NrKFxcdTAwMjZjb25maWdmc19zdXBlcl94YSk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHB1dF9uZXQoaW5mby1cXHUwMDNlbmV0X25zKTtcXG4rXFx0XFx0a2ZyZWUoaW5mbyk7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGluZm87XFxuK31cXG4rXFxuK3ZvaWQgY29uZmlnZnNfcHV0X3N1cGVyX2luZm8oc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8pXFxuK3tcXG4rXFx0dTY0IG5zX2lkID0gY29uZmlnZnNfbnNfaWQoaW5mby1cXHUwMDNlbmV0X25zKTtcXG4rXFxuK1xcdHhhX2xvY2soXFx1MDAyNmNvbmZpZ2ZzX3N1cGVyX3hhKTtcXG4rXFx0aWYgKCFyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmluZm8tXFx1MDAzZXJlZikpIHtcXG4rXFx0XFx0eGFfdW5sb2NrKFxcdTAwMjZjb25maWdmc19zdXBlcl94YSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXHRfX3hhX2VyYXNlKFxcdTAwMjZjb25maWdmc19zdXBlcl94YSwgbnNfaWQpO1xcbitcXHR4YV91bmxvY2soXFx1MDAyNmNvbmZpZ2ZzX3N1cGVyX3hhKTtcXG4rXFx0cHV0X25ldChpbmZvLVxcdTAwM2VuZXRfbnMpO1xcbitcXHRrZnJlZShpbmZvKTtcXG4rfVxcbiBcXG4gc3RhdGljIGludCBjb25maWdmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4ge1xcbitcXHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyA9IHNiLVxcdTAwM2VzX2ZzX2luZm87XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuIFxcdHN0cnVjdCBkZW50cnkgKnJvb3Q7XFxuIFxcbkBAIC03Miw2NiArMTM1LDE2MiBAQCBzdGF0aWMgaW50IGNvbmZpZ2ZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbiBcXHRzYi1cXHUwMDNlc190aW1lX2dyYW4gPSAxO1xcbiBcXG4gXFx0aW5vZGUgPSBjb25maWdmc19uZXdfaW5vZGUoU19JRkRJUiB8IFNfSVJXWFUgfCBTX0lSVUdPIHwgU19JWFVHTyxcXG4tXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmNvbmZpZ2ZzX3Jvb3QsIHNiKTtcXG4tXFx0aWYgKGlub2RlKSB7XFxuLVxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNmNvbmZpZ2ZzX3Jvb3RfaW5vZGVfb3BlcmF0aW9ucztcXG4tXFx0XFx0aW5vZGUtXFx1MDAzZWlfZm9wID0gXFx1MDAyNmNvbmZpZ2ZzX2Rpcl9vcGVyYXRpb25zO1xcbi1cXHRcXHQvKiBkaXJlY3RvcnkgaW5vZGVzIHN0YXJ0IG9mZiB3aXRoIGlfbmxpbmsgPT0gMiAoZm9yIFxcXCIuXFxcIiBlbnRyeSkgKi9cXG4tXFx0XFx0aW5jX25saW5rKGlub2RlKTtcXG4tXFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmluZm8tXFx1MDAzZXJvb3QsIHNiKTtcXG4rXFx0aWYgKElTX0VSUihpbm9kZSkpIHtcXG4gXFx0XFx0cHJfZGVidWcoXFxcImNvdWxkIG5vdCBnZXQgcm9vdCBpbm9kZVxcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihpbm9kZSk7XFxuIFxcdH1cXG4rXFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2Y29uZmlnZnNfcm9vdF9pbm9kZV9vcGVyYXRpb25zO1xcbitcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2Y29uZmlnZnNfZGlyX29wZXJhdGlvbnM7XFxuK1xcdC8qIGRpcmVjdG9yeSBpbm9kZXMgc3RhcnQgb2ZmIHdpdGggaV9ubGluayA9PSAyIChmb3IgXFxcIi5cXFwiIGVudHJ5KSAqL1xcbitcXHRpbmNfbmxpbmsoaW5vZGUpO1xcbiBcXG4gXFx0cm9vdCA9IGRfbWFrZV9yb290KGlub2RlKTtcXG4gXFx0aWYgKCFyb290KSB7XFxuIFxcdFxcdHByX2RlYnVnKFxcXCIlczogY291bGQgbm90IGdldCByb290IGRlbnRyeSFcXFxcblxcXCIsX19mdW5jX18pO1xcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbi1cXHRjb25maWdfZ3JvdXBfaW5pdChcXHUwMDI2Y29uZmlnZnNfcm9vdF9ncm91cCk7XFxuLVxcdGNvbmZpZ2ZzX3Jvb3RfZ3JvdXAuY2dfaXRlbS5jaV9kZW50cnkgPSByb290O1xcbi1cXHRyb290LVxcdTAwM2VkX2ZzZGF0YSA9IFxcdTAwMjZjb25maWdmc19yb290O1xcbitcXHRpbmZvLVxcdTAwM2Vncm91cC5jZ19pdGVtLmNpX2RlbnRyeSA9IHJvb3Q7XFxuK1xcdHJvb3QtXFx1MDAzZWRfZnNkYXRhID0gXFx1MDAyNmluZm8tXFx1MDAzZXJvb3Q7XFxuIFxcdHNiLVxcdTAwM2VzX3Jvb3QgPSByb290O1xcbiBcXHRzZXRfZGVmYXVsdF9kX29wKHNiLCBcXHUwMDI2Y29uZmlnZnNfZGVudHJ5X29wcyk7IC8qIHRoZSByZXN0IGdldCB0aGF0ICovXFxuIFxcdHNiLVxcdTAwM2VzX2RfZmxhZ3MgfD0gRENBQ0hFX0RPTlRDQUNIRTtcXG4rXFxuK1xcdGNvbmZpZ2ZzX2xpbmtfc3Vic3lzdGVtcyhzYiwgaW5mbyk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBjb25maWdmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuIHtcXG4tXFx0cmV0dXJuIGdldF90cmVlX3NpbmdsZShmYywgY29uZmlnZnNfZmlsbF9zdXBlcik7XFxuK1xcdHN0cnVjdCBuZXQgKm5ldF9ucyA9IGZjLVxcdTAwM2Vmc19wcml2YXRlO1xcbitcXHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbztcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGluZm8gPSBjb25maWdmc19nZXRfc3VwZXJfaW5mbyhuZXRfbnMpO1xcbitcXHRpZiAoSVNfRVJSKGluZm8pKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihpbmZvKTtcXG4rXFxuK1xcdGVyciA9IGdldF90cmVlX2tleWVkKGZjLCBjb25maWdmc19maWxsX3N1cGVyLCBpbmZvKTtcXG4rXFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBmYy1cXHUwMDNlc19mc19pbmZvKVxcbitcXHRcXHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgY29uZmlnZnNfZnNfY29udGV4dF9mcmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXRfbnMgPSBmYy1cXHUwMDNlZnNfcHJpdmF0ZTtcXG4rXFxuK1xcdGZjLVxcdTAwM2Vmc19wcml2YXRlID0gTlVMTDtcXG4rXFx0cHV0X25ldChuZXRfbnMpO1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBjb25maWdmc19jb250ZXh0X29wcyA9IHtcXG4gXFx0LmdldF90cmVlXFx0PSBjb25maWdmc19nZXRfdHJlZSxcXG4rXFx0LmZyZWVcXHRcXHQ9IGNvbmZpZ2ZzX2ZzX2NvbnRleHRfZnJlZSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgY29uZmlnZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4ge1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXRfbnMgPSBnZXRfbmV0KGN1cnJlbnQtXFx1MDAzZW5zcHJveHktXFx1MDAzZW5ldF9ucyk7XFxuK1xcbitcXHRmYy1cXHUwMDNlZnNfcHJpdmF0ZSA9IG5ldF9ucztcXG4gXFx0ZmMtXFx1MDAzZW9wcyA9IFxcdTAwMjZjb25maWdmc19jb250ZXh0X29wcztcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGNvbmZpZ2ZzX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4re1xcbitcXHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyA9IHNiLVxcdTAwM2VzX2ZzX2luZm87XFxuK1xcbitcXHRjb25maWdmc191bmxpbmtfc3Vic3lzdGVtcyhzYiwgaW5mbyk7XFxuK1xcdGtpbGxfYW5vbl9zdXBlcihzYik7XFxuK1xcdGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKGluZm8pO1xcbitcXHRzYi1cXHUwMDNlc19mc19pbmZvID0gTlVMTDtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGNvbmZpZ2ZzX2ZzX3R5cGUgPSB7XFxuIFxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuIFxcdC5uYW1lXFx0XFx0PSBcXFwiY29uZmlnZnNcXFwiLFxcbiBcXHQuaW5pdF9mc19jb250ZXh0ID0gY29uZmlnZnNfaW5pdF9mc19jb250ZXh0LFxcbi1cXHQua2lsbF9zYlxcdD0ga2lsbF9hbm9uX3N1cGVyLFxcbitcXHQua2lsbF9zYlxcdD0gY29uZmlnZnNfa2lsbF9zYixcXG4rXFx0LmZzX2ZsYWdzXFx0PSBGU19VU0VSTlNfTU9VTlQsXFxuIH07XFxuIE1PRFVMRV9BTElBU19GUyhcXFwiY29uZmlnZnNcXFwiKTtcXG4gXFxuLXN0cnVjdCBkZW50cnkgKmNvbmZpZ2ZzX3Bpbl9mcyh2b2lkKVxcbitzdHJ1Y3QgZGVudHJ5ICpjb25maWdmc19waW5fZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4ge1xcbi1cXHRpbnQgZXJyID0gc2ltcGxlX3Bpbl9mcyhcXHUwMDI2Y29uZmlnZnNfZnNfdHlwZSwgXFx1MDAyNmNvbmZpZ2ZzX21vdW50LFxcbi1cXHRcXHRcXHQgICAgIFxcdTAwMjZjb25maWdmc19tbnRfY291bnQpO1xcbi1cXHRyZXR1cm4gZXJyID8gRVJSX1BUUihlcnIpIDogY29uZmlnZnNfbW91bnQtXFx1MDAzZW1udF9yb290O1xcbitcXHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbztcXG4rXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xcbitcXHRpZiAoc2IpIHtcXG4rXFx0XFx0c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKnJvb3QgPSBjb25maWdmc19yb290O1xcbitcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBzYi1cXHUwMDNlc19yb290O1xcbitcXG4rXFx0XFx0aW5mbyA9IHNiLVxcdTAwM2VzX2ZzX2luZm87XFxuK1xcdFxcdGlmICghaW5mby1cXHUwMDNlbW50KSB7XFxuK1xcdFxcdFxcdHN0cnVjdCB2ZnNtb3VudCAqbW50O1xcbitcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmNvbmZpZ2ZzX3Bpbl9sb2NrKTtcXG4rXFx0XFx0XFx0bW50ID0gbW50X2Nsb25lX2RpcmVjdChyb290LVxcdTAwM2VtbnQsIGRlbnRyeSk7XFxuK1xcdFxcdFxcdGlmIChJU19FUlIobW50KSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9DQVNUKG1udCk7XFxuK1xcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xcbitcXHRcXHRcXHRpbmZvLVxcdTAwM2VtbnQgPSBtbnQ7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdG1udGdldChpbmZvLVxcdTAwM2VtbnQpO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGluZm8gPSBjb25maWdmc19yb290O1xcbitcXHRcXHRpZiAoIWluZm8tXFx1MDAzZW1udCkge1xcbitcXHRcXHRcXHRzdHJ1Y3QgdmZzbW91bnQgKm1udDtcXG4rXFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjb25maWdmc19waW5fbG9jayk7XFxuK1xcdFxcdFxcdG1udCA9IHZmc19rZXJuX21vdW50KFxcdTAwMjZjb25maWdmc19mc190eXBlLCBTQl9LRVJOTU9VTlQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgY29uZmlnZnNfZnNfdHlwZS5uYW1lLCBOVUxMKTtcXG4rXFx0XFx0XFx0aWYgKElTX0VSUihtbnQpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX0NBU1QobW50KTtcXG4rXFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZjb25maWdmc19waW5fbG9jayk7XFxuK1xcdFxcdFxcdGluZm8tXFx1MDAzZW1udCA9IG1udDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0bW50Z2V0KGluZm8tXFx1MDAzZW1udCk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRpbmZvLVxcdTAwM2VtbnRfY291bnQrKztcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmNvbmZpZ2ZzX3Bpbl9sb2NrKTtcXG4rXFx0cmV0dXJuIGluZm8tXFx1MDAzZW1udC1cXHUwMDNlbW50X3Jvb3Q7XFxuIH1cXG4gXFxuLXZvaWQgY29uZmlnZnNfcmVsZWFzZV9mcyh2b2lkKVxcbit2b2lkIGNvbmZpZ2ZzX3JlbGVhc2VfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4ge1xcbi1cXHRzaW1wbGVfcmVsZWFzZV9mcyhcXHUwMDI2Y29uZmlnZnNfbW91bnQsIFxcdTAwMjZjb25maWdmc19tbnRfY291bnQpO1xcbitcXHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyA9IGNvbmZpZ2ZzX3Jvb3Q7XFxuK1xcdHN0cnVjdCB2ZnNtb3VudCAqbW50O1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZjb25maWdmc19waW5fbG9jayk7XFxuK1xcdGlmIChzYilcXG4rXFx0XFx0aW5mbyA9IHNiLVxcdTAwM2VzX2ZzX2luZm87XFxuK1xcdG1udCA9IGluZm8tXFx1MDAzZW1udDtcXG4rXFx0aWYgKC0taW5mby1cXHUwMDNlbW50X2NvdW50KVxcbitcXHRcXHRpbmZvLVxcdTAwM2VtbnQgPSBOVUxMO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xcbitcXHRtbnRwdXQobW50KTtcXG4gfVxcbiBcXG4rc3RydWN0IG5ldCAqY29uZmlnZnNfbnNfZnJvbV9ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cClcXG4re1xcbitcXHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyA9IGNvbmZpZ2ZzX3Jvb3Q7XFxuK1xcdHN0cnVjdCBuZXQgKm5ldF9ucyA9IE5VTEw7XFxuK1xcbitcXHRpZiAoZ3JvdXApIHtcXG4rXFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZ3JvdXAtXFx1MDAzZWNnX2l0ZW0uY2lfZGVudHJ5O1xcbitcXG4rXFx0XFx0aW5mbyA9IGRlbnRyeS1cXHUwMDNlZF9zYi1cXHUwMDNlc19mc19pbmZvO1xcbitcXHRcXHRpZiAoaW5mbylcXG4rXFx0XFx0XFx0bmV0X25zID0gaW5mby1cXHUwMDNlbmV0X25zO1xcbitcXHR9XFxuK1xcdHJldHVybiBuZXRfbnM7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoY29uZmlnZnNfbnNfZnJvbV9ncm91cCk7XFxuIFxcbiBzdGF0aWMgaW50IF9faW5pdCBjb25maWdmc19pbml0KHZvaWQpXFxuIHtcXG5AQCAtMTQzLDE4ICszMDIsMjcgQEAgc3RhdGljIGludCBfX2luaXQgY29uZmlnZnNfaW5pdCh2b2lkKVxcbiBcXHRpZiAoIWNvbmZpZ2ZzX2Rpcl9jYWNoZXApXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4rXFx0Y29uZmlnZnNfcm9vdCA9IGNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKFxcdTAwMjZpbml0X25ldCk7XFxuK1xcdGlmIChJU19FUlIoY29uZmlnZnNfcm9vdCkpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUihjb25maWdmc19yb290KTtcXG4rXFx0XFx0Z290byBvdXQyO1xcbitcXHR9XFxuK1xcbiBcXHRlcnIgPSBzeXNmc19jcmVhdGVfbW91bnRfcG9pbnQoa2VybmVsX2tvYmosIFxcXCJjb25maWdcXFwiKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBvdXQyO1xcbitcXHRcXHRnb3RvIG91dDM7XFxuIFxcbiBcXHRlcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKFxcdTAwMjZjb25maWdmc19mc190eXBlKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBvdXQzO1xcbitcXHRcXHRnb3RvIG91dDQ7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4tb3V0MzpcXG4rb3V0NDpcXG4gXFx0cHJfZXJyKFxcXCJVbmFibGUgdG8gcmVnaXN0ZXIgZmlsZXN5c3RlbSFcXFxcblxcXCIpO1xcbiBcXHRzeXNmc19yZW1vdmVfbW91bnRfcG9pbnQoa2VybmVsX2tvYmosIFxcXCJjb25maWdcXFwiKTtcXG4rb3V0MzpcXG4rXFx0Y29uZmlnZnNfcHV0X3N1cGVyX2luZm8oY29uZmlnZnNfcm9vdCk7XFxuK1xcdGNvbmZpZ2ZzX3Jvb3QgPSBOVUxMO1xcbiBvdXQyOlxcbiBcXHRrbWVtX2NhY2hlX2Rlc3Ryb3koY29uZmlnZnNfZGlyX2NhY2hlcCk7XFxuIFxcdGNvbmZpZ2ZzX2Rpcl9jYWNoZXAgPSBOVUxMO1xcbkBAIC0xNjYsNiArMzM0LDggQEAgc3RhdGljIHZvaWQgX19leGl0IGNvbmZpZ2ZzX2V4aXQodm9pZClcXG4ge1xcbiBcXHR1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oXFx1MDAyNmNvbmZpZ2ZzX2ZzX3R5cGUpO1xcbiBcXHRzeXNmc19yZW1vdmVfbW91bnRfcG9pbnQoa2VybmVsX2tvYmosIFxcXCJjb25maWdcXFwiKTtcXG4rXFx0Y29uZmlnZnNfcHV0X3N1cGVyX2luZm8oY29uZmlnZnNfcm9vdCk7XFxuK1xcdGNvbmZpZ2ZzX3Jvb3QgPSBOVUxMO1xcbiBcXHRrbWVtX2NhY2hlX2Rlc3Ryb3koY29uZmlnZnNfZGlyX2NhY2hlcCk7XFxuIFxcdGNvbmZpZ2ZzX2Rpcl9jYWNoZXAgPSBOVUxMO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmNcXG5pbmRleCAzZDVjZDViZjNiMDUzNy4uZTdhYmJmNjMyY2M3MGQgMTAwNjQ0XFxuLS0tIGEvZnMvbmFtZXNwYWNlLmNcXG4rKysgYi9mcy9uYW1lc3BhY2UuY1xcbkBAIC0xNDgyLDYgKzE0ODIsMTcgQEAgc3RydWN0IHZmc21vdW50ICptbnRfY2xvbmVfaW50ZXJuYWwoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXFxuIFxcdHJldHVybiBcXHUwMDI2cC1cXHUwMDNlbW50O1xcbiB9XFxuIFxcbitzdHJ1Y3QgdmZzbW91bnQgKm1udF9jbG9uZV9kaXJlY3Qoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4re1xcbitcXHRzdHJ1Y3QgbW91bnQgKnA7XFxuK1xcbitcXHRwID0gY2xvbmVfbW50KHJlYWxfbW91bnQobW50KSwgZGVudHJ5LCBDTF9TTEFWRSk7XFxuK1xcdGlmIChJU19FUlIocCkpXFxuK1xcdFxcdHJldHVybiBFUlJfQ0FTVChwKTtcXG4rXFx0cC1cXHUwMDNlbW50Lm1udF9mbGFncyB8PSBNTlRfSU5URVJOQUw7XFxuK1xcdHJldHVybiBcXHUwMDI2cC1cXHUwMDNlbW50O1xcbit9XFxuK1xcbiAvKlxcbiAgKiBSZXR1cm5zIHRoZSBtb3VudCB3aGljaCBlaXRoZXIgaGFzIHRoZSBzcGVjaWZpZWQgbW50X2lkLCBvciBoYXMgdGhlIG5leHRcXG4gICogc21hbGxlc3QgaWQgYWZlciB0aGUgc3BlY2lmaWVkIG9uZS5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb25maWdmcy5oIGIvaW5jbHVkZS9saW51eC9jb25maWdmcy5oXFxuaW5kZXggZWY2NWM3NWJlZWFhZDguLjc2ZTBiYjFhNzJiOWRiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvY29uZmlnZnMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvY29uZmlnZnMuaFxcbkBAIC0yNCw2ICsyNCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlICAgLyogc3RydWN0IGxpc3RfaGVhZCAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3JlZi5oXFx1MDAzZSAgIC8qIHN0cnVjdCBrcmVmICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZSAgLyogc3RydWN0IG11dGV4ICovXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0X25hbWVzcGFjZS5oXFx1MDAzZSAvKiBzdHJ1Y3QgbmV0ICovXFxuIFxcbiAjZGVmaW5lIENPTkZJR0ZTX0lURU1fTkFNRV9MRU5cXHQyMFxcbiBcXG5AQCAtMjI2LDggKzIyNywxMyBAQCBzdHJ1Y3QgY29uZmlnZnNfZ3JvdXBfb3BlcmF0aW9ucyB7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtIHtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZFxcdHN1X2xpbms7XFxuIFxcdHN0cnVjdCBjb25maWdfZ3JvdXBcXHRzdV9ncm91cDtcXG4gXFx0c3RydWN0IG11dGV4XFx0XFx0c3VfbXV0ZXg7XFxuK1xcdGludCAoKmZpbGxfc3Vic3lzdGVtKShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXQgKm5ldF9ucyk7XFxuK1xcdHZvaWQgKCpjbGVhcl9zdWJzeXN0ZW0pKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cyxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IG5ldCAqbmV0X25zKTtcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqdG9fY29uZmlnZnNfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKVxcbkBAIC0yNTIsNiArMjU4LDggQEAgY29uZmlnZnNfcmVnaXN0ZXJfZGVmYXVsdF9ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpwYXJlbnRfZ3JvdXAsXFxuIFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICppdGVtX3R5cGUpO1xcbiB2b2lkIGNvbmZpZ2ZzX3VucmVnaXN0ZXJfZGVmYXVsdF9ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCk7XFxuIFxcbitzdHJ1Y3QgbmV0ICpjb25maWdmc19uc19mcm9tX2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKTtcXG4rXFxuIC8qIFRoZXNlIGZ1bmN0aW9ucyBjYW4gc2xlZXAgYW5kIGNhbiBhbGxvYyB3aXRoIEdGUF9LRVJORUwgKi9cXG4gLyogV0FSTklORzogVGhlc2UgY2Fubm90IGJlIGNhbGxlZCB1bmRlcm5lYXRoIGNvbmZpZ2ZzIGNhbGxiYWNrcyEhICovXFxuIGludCBjb25maWdmc19kZXBlbmRfaXRlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMsXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW91bnQuaCBiL2luY2x1ZGUvbGludXgvbW91bnQuaFxcbmluZGV4IGFjZmU3ZWY4NmExYjNmLi43ZTdlN2Q2NmMzMDI0YiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21vdW50LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21vdW50LmhcXG5AQCAtNzUsNiArNzUsNyBAQCBleHRlcm4gdm9pZCBtbnRfZHJvcF93cml0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKTtcXG4gZXh0ZXJuIHZvaWQgbW50cHV0KHN0cnVjdCB2ZnNtb3VudCAqbW50KTtcXG4gZXh0ZXJuIHN0cnVjdCB2ZnNtb3VudCAqbW50Z2V0KHN0cnVjdCB2ZnNtb3VudCAqbW50KTtcXG4gZXh0ZXJuIHZvaWQgbW50X21ha2Vfc2hvcnR0ZXJtKHN0cnVjdCB2ZnNtb3VudCAqbW50KTtcXG4rZXh0ZXJuIHN0cnVjdCB2ZnNtb3VudCAqbW50X2Nsb25lX2RpcmVjdChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcXG4gZXh0ZXJuIHN0cnVjdCB2ZnNtb3VudCAqbW50X2Nsb25lX2ludGVybmFsKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKTtcXG4gZXh0ZXJuIGJvb2wgX19tbnRfaXNfcmVhZG9ubHkoY29uc3Qgc3RydWN0IHZmc21vdW50ICptbnQpO1xcbiBleHRlcm4gYm9vbCBtbnRfbWF5X3N1aWQoc3RydWN0IHZmc21vdW50ICptbnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxMDoxMDoxNS4zNDE0MDMxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDkzNTAyNDkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT05GSUdGU19GU1wiLFxuICAgIFwiTlZNRV9UQVJHRVRcIixcbiAgICBcIk5WTUVfVEFSR0VUX0xPT1BcIixcbiAgICBcIk5WTUVfVEFSR0VUX1RDUFwiLFxuICAgIFwiTlZNRV9UQVJHRVRfUkRNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbVwiLFxuICAgIFwiY29uZmlnZnNfbGlua19zdWJzeXN0ZW1zXCIsXG4gICAgXCJjb25maWdmc191bmxpbmtfc3Vic3lzdGVtc1wiLFxuICAgIFwiY29uZmlnZnNfZ2V0X3N1cGVyX2luZm9cIixcbiAgICBcImNvbmZpZ2ZzX2ZpbGxfc3VwZXJcIixcbiAgICBcIm52bWV0X2NvbmZpZ2ZzX2ZpbGxfc3Vic3lzdGVtXCIsXG4gICAgXCJudm1ldF9hZGRfZGlzY19zdWJzeXNcIixcbiAgICBcIm52bWV0X3BvcnRzX21ha2VcIixcbiAgICBcIm52bWV0X3N1YnN5c19tYWtlXCIsXG4gICAgXCJudm1ldF9hZGRfcG9ydF9saXN0XCIsXG4gICAgXCJudm1ldF9kZWxfcG9ydF9saXN0XCIsXG4gICAgXCJudm1ldF9yb290X2Rpc2NvdmVyeV9ucW5fc3RvcmVcIixcbiAgICBcIm52bWV0X2V4ZWN1dGVfZGlzY19nZXRfbG9nX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldHdvcmsgbmFtZXNwYWNlIHN1cHBvcnQgZm9yIGNvbmZpZ2ZzIGFuZCB0aGUgTlZNZS1vRiB0YXJnZXQuIEl0IG1vZGlmaWVzIGNvcmUgY29uZmlnZnMgbG9naWMgdG8gc3VwcG9ydCBtdWx0aXBsZSBzdXBlcmJsb2NrcyBwZXIgbmV0d29yayBuYW1lc3BhY2UgYW5kIHVwZGF0ZXMgdGhlIE5WTWUgdGFyZ2V0IHRvIHVzZSBwZXItbmFtZXNwYWNlIGRpc2NvdmVyeSBzdWJzeXN0ZW1zIGFuZCBwb3J0cy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDE1NjkxZmJhMzdjYzJiODRiMmRiZjI0YmQ3NjkyYjU1ZjRhNjJjNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDIzIDEwOjEwOjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jIGIvZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jXG5pbmRleCBiODhmODk3ZjA2ZTI1ZS4uNzYzNmFjMzc3M2I0MDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmNcbisrKyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuY1xuQEAgLTI1LDggKzI1LDcgQEBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgbnZtZXRfaG9zdF90eXBlO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBudm1ldF9zdWJzeXNfdHlwZTtcbiBcbi1zdGF0aWMgTElTVF9IRUFEKG52bWV0X3BvcnRzX2xpc3QpO1xuLXN0cnVjdCBsaXN0X2hlYWQgKm52bWV0X3BvcnRzID0gXHUwMDI2bnZtZXRfcG9ydHNfbGlzdDtcbitzdGF0aWMgREVGSU5FX1hBUlJBWShudm1ldF9wb3J0c194YSk7XG4gXG4gc3RydWN0IG52bWV0X3R5cGVfbmFtZV9tYXAge1xuIFx0dThcdFx0dHlwZTtcbkBAIC01MSw2ICs1MCw3MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG52bWV0X3R5cGVfbmFtZV9tYXAgbnZtZXRfYWRkcl9mYW1pbHlbXSA9IHtcbiBcdHsgTlZNRl9BRERSX0ZBTUlMWV9MT09QLFx0XCJsb29wXCIgfSxcbiB9O1xuIFxuK3U2NCBudm1ldF9nZXRfbnNfaWQoc3RydWN0IG5ldCAqbmV0X25zKVxuK3tcbitcdHN0cnVjdCBuc19jb21tb24gKm5zO1xuK1xuK1x0aWYgKCFuZXRfbnMpXG4rXHRcdHJldHVybiAwO1xuK1x0bnMgPSB0b19uc19jb21tb24obmV0X25zKTtcbitcdHJldHVybiBuZXRfbnMgPT0gXHUwMDI2aW5pdF9uZXQgPyAwIDogbnMtXHUwMDNlbnNfaWQ7XG4rfVxuK1xuK3N0cnVjdCBsaXN0X2hlYWQgKm52bWV0X2dldF9wb3J0X2xpc3Qoc3RydWN0IG5ldCAqbmV0X25zKVxuK3tcbitcdHN0cnVjdCBsaXN0X2hlYWQgKnBvcnRfbGlzdDtcbitcdHU2NCBuc19pZCA9IG52bWV0X2dldF9uc19pZChuZXRfbnMpO1xuK1xuK1x0cG9ydF9saXN0ID0geGFfbG9hZChcdTAwMjZudm1ldF9wb3J0c194YSwgbnNfaWQpO1xuK1x0cmV0dXJuIHBvcnRfbGlzdDtcbit9XG4rXG4rc3RhdGljIGludCBudm1ldF9hZGRfcG9ydF9saXN0KHN0cnVjdCBudm1ldF9wb3J0ICpwKVxuK3tcbitcdHU2NCBuc19pZCA9IG52bWV0X2dldF9uc19pZChwLVx1MDAzZW5ldF9ucyk7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3J0X2xpc3Q7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdHhhX2xvY2soXHUwMDI2bnZtZXRfcG9ydHNfeGEpO1xuK1x0cG9ydF9saXN0ID0geGFfbG9hZChcdTAwMjZudm1ldF9wb3J0c194YSwgbnNfaWQpO1xuK1x0aWYgKCFwb3J0X2xpc3QpIHtcbitcdFx0cG9ydF9saXN0ID0ga3phbGxvY19vYmooKnBvcnRfbGlzdCk7XG4rXHRcdGlmICghcG9ydF9saXN0KSB7XG4rXHRcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdH1cbitcdFx0SU5JVF9MSVNUX0hFQUQocG9ydF9saXN0KTtcbitcdFx0ZXJyID0gX194YV9pbnNlcnQoXHUwMDI2bnZtZXRfcG9ydHNfeGEsIG5zX2lkLFxuK1x0XHRcdFx0ICBwb3J0X2xpc3QsIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4rXHRcdFx0a2ZyZWUocG9ydF9saXN0KTtcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdH1cbitcdH1cbitcdGxpc3RfYWRkKFx1MDAyNnAtXHUwMDNlZ2xvYmFsX2VudHJ5LCBwb3J0X2xpc3QpO1xuK291dF91bmxvY2s6XG4rXHR4YV91bmxvY2soXHUwMDI2bnZtZXRfcG9ydHNfeGEpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIHZvaWQgbnZtZXRfZGVsX3BvcnRfbGlzdChzdHJ1Y3QgbnZtZXRfcG9ydCAqcClcbit7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3J0X2xpc3Q7XG4rXHR1NjQgbnNfaWQgPSBudm1ldF9nZXRfbnNfaWQocC1cdTAwM2VuZXRfbnMpO1xuK1xuK1x0eGFfbG9jayhcdTAwMjZudm1ldF9wb3J0c194YSk7XG4rXHRwb3J0X2xpc3QgPSB4YV9sb2FkKFx1MDAyNm52bWV0X3BvcnRzX3hhLCBuc19pZCk7XG4rXHRpZiAoIVdBUk5fT04oIXBvcnRfbGlzdCkpIHtcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZwLVx1MDAzZWdsb2JhbF9lbnRyeSk7XG4rXHRcdGlmIChsaXN0X2VtcHR5KHBvcnRfbGlzdCkpIHtcbitcdFx0XHRfX3hhX2VyYXNlKFx1MDAyNm52bWV0X3BvcnRzX3hhLCBuc19pZCk7XG4rXHRcdFx0a2ZyZWUocG9ydF9saXN0KTtcbitcdFx0fVxuK1x0fVxuK1x0eGFfdW5sb2NrKFx1MDAyNm52bWV0X3BvcnRzX3hhKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgbnZtZXRfaXNfcG9ydF9lbmFibGVkKHN0cnVjdCBudm1ldF9wb3J0ICpwLCBjb25zdCBjaGFyICpjYWxsZXIpXG4ge1xuIFx0aWYgKHAtXHUwMDNlZW5hYmxlZClcbkBAIC0xNzE3LDYgKzE3ODAsNyBAQCBzdGF0aWMgdm9pZCBudm1ldF9zdWJzeXNfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG4ge1xuIFx0c3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzID0gdG9fc3Vic3lzKGl0ZW0pO1xuIFxuK1x0Y29uZmlnZnNfcmVtb3ZlX2RlZmF1bHRfZ3JvdXBzKFx1MDAyNnN1YnN5cy1cdTAwM2Vncm91cCk7XG4gXHRudm1ldF9zdWJzeXNfZGVsX2N0cmxzKHN1YnN5cyk7XG4gXHRudm1ldF9zdWJzeXNfcHV0KHN1YnN5cyk7XG4gfVxuQEAgLTE3MzQsMTkgKzE3OTgsMjMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG52bWV0X3N1YnN5c190eXBlID0ge1xuIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwICpudm1ldF9zdWJzeXNfbWFrZShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbiBcdFx0Y29uc3QgY2hhciAqbmFtZSlcbiB7XG4tXHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXM7XG4rXHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMsICpkaXNjX3N1YnN5cztcbitcdHN0cnVjdCBuZXQgKm5ldF9ucyA9IGNvbmZpZ2ZzX25zX2Zyb21fZ3JvdXAoZ3JvdXApO1xuIFxuIFx0aWYgKHN5c2ZzX3N0cmVxKG5hbWUsIE5WTUVfRElTQ19TVUJTWVNfTkFNRSkpIHtcbiBcdFx0cHJfZXJyKFwiY2FuJ3QgY3JlYXRlIGRpc2NvdmVyeSBzdWJzeXN0ZW0gdGhyb3VnaCBjb25maWdmc1xcblwiKTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXHR9XG4gXG4tXHRpZiAoc3lzZnNfc3RyZXEobmFtZSwgbnZtZXRfZGlzY19zdWJzeXMtXHUwMDNlc3Vic3lzbnFuKSkge1xuK1x0ZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMobmV0X25zKTtcbitcdGlmICghZGlzY19zdWJzeXMpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuK1x0aWYgKHN5c2ZzX3N0cmVxKG5hbWUsIGRpc2Nfc3Vic3lzLVx1MDAzZXN1YnN5c25xbikpIHtcbiBcdFx0cHJfZXJyKFwiY2FuJ3QgY3JlYXRlIHN1YnN5c3RlbSB1c2luZyB1bmlxdWUgZGlzY292ZXJ5IE5RTlxcblwiKTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXHR9XG4gXG4tXHRzdWJzeXMgPSBudm1ldF9zdWJzeXNfYWxsb2MobmFtZSwgTlZNRV9OUU5fTlZNRSk7XG4rXHRzdWJzeXMgPSBudm1ldF9zdWJzeXNfYWxsb2MobmFtZSwgTlZNRV9OUU5fTlZNRSwgbmV0X25zKTtcbiBcdGlmIChJU19FUlIoc3Vic3lzKSlcbiBcdFx0cmV0dXJuIEVSUl9DQVNUKHN1YnN5cyk7XG4gXG5AQCAtMjAwNCw4ICsyMDcyLDkgQEAgc3RhdGljIHZvaWQgbnZtZXRfcG9ydF9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbiBcbiBcdC8qIExldCBpbmZsaWdodCBjb250cm9sbGVycyB0ZWFyZG93biBjb21wbGV0ZSAqL1xuIFx0Zmx1c2hfd29ya3F1ZXVlKG52bWV0X3dxKTtcbi1cdGxpc3RfZGVsKFx1MDAyNnBvcnQtXHUwMDNlZ2xvYmFsX2VudHJ5KTtcbitcdG52bWV0X2RlbF9wb3J0X2xpc3QocG9ydCk7XG4gXG4rXHRjb25maWdmc19yZW1vdmVfZGVmYXVsdF9ncm91cHMoXHUwMDI2cG9ydC1cdTAwM2Vncm91cCk7XG4gXHRrZXlfcHV0KHBvcnQtXHUwMDNla2V5cmluZyk7XG4gXHRrZnJlZShwb3J0LVx1MDAzZWFuYV9zdGF0ZSk7XG4gXHRrZnJlZShwb3J0KTtcbkBAIC0yMDU3LDYgKzIxMjYsMTAgQEAgc3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgKm52bWV0X3BvcnRzX21ha2Uoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFx0fVxuIFxuK1x0cG9ydC1cdTAwM2VuZXRfbnMgPSBjb25maWdmc19uc19mcm9tX2dyb3VwKGdyb3VwKTtcbitcdGlmICghcG9ydC1cdTAwM2VuZXRfbnMpXG4rXHRcdHBvcnQtXHUwMDNlbmV0X25zID0gZ2V0X25ldChcdTAwMjZpbml0X25ldCk7XG4rXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlZNRV9UQVJHRVRfVENQX1RMUykgXHUwMDI2XHUwMDI2IG52bWVfa2V5cmluZ19pZCgpKSB7XG4gXHRcdHBvcnQtXHUwMDNla2V5cmluZyA9IGtleV9sb29rdXAobnZtZV9rZXlyaW5nX2lkKCkpO1xuIFx0XHRpZiAoSVNfRVJSKHBvcnQtXHUwMDNla2V5cmluZykpIHtcbkBAIC0yMDcyLDcgKzIxNDUsNyBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbnZtZXRfcG9ydHNfbWFrZShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbiBcdFx0XHRwb3J0LVx1MDAzZWFuYV9zdGF0ZVtpXSA9IE5WTUVfQU5BX0lOQUNDRVNTSUJMRTtcbiBcdH1cbiBcbi1cdGxpc3RfYWRkKFx1MDAyNnBvcnQtXHUwMDNlZ2xvYmFsX2VudHJ5LCBcdTAwMjZudm1ldF9wb3J0c19saXN0KTtcbitcdG52bWV0X2FkZF9wb3J0X2xpc3QocG9ydCk7XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwb3J0LVx1MDAzZWVudHJ5KTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnBvcnQtXHUwMDNlc3Vic3lzdGVtcyk7XG5AQCAtMjExOSw5ICsyMTkyLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG52bWV0X3BvcnRzX3R5cGUgPSB7XG4gXHQuY3Rfb3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwIG52bWV0X3N1YnN5c3RlbXNfZ3JvdXA7XG4tc3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgbnZtZXRfcG9ydHNfZ3JvdXA7XG4tXG4gI2lmZGVmIENPTkZJR19OVk1FX1RBUkdFVF9BVVRIXG4gc3RhdGljIHNzaXplX3QgbnZtZXRfaG9zdF9kaGNoYXBfa2V5X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuIFx0XHRjaGFyICpwYWdlKVxuQEAgLTIzMDMsMTkgKzIzNzMsMjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG52bWV0X2hvc3RzX3R5cGUgPSB7XG4gXHQuY3Rfb3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwIG52bWV0X2hvc3RzX2dyb3VwO1xuLVxuIHN0YXRpYyBzc2l6ZV90IG52bWV0X3Jvb3RfZGlzY292ZXJ5X25xbl9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbiBcdFx0XHRcdFx0ICAgICBjaGFyICpwYWdlKVxuIHtcbi1cdHJldHVybiBzbnByaW50ZihwYWdlLCBQQUdFX1NJWkUsIFwiJXNcXG5cIiwgbnZtZXRfZGlzY19zdWJzeXMtXHUwMDNlc3Vic3lzbnFuKTtcbitcdHN0cnVjdCBuZXQgKm5ldF9ucyA9IGNvbmZpZ2ZzX25zX2Zyb21fZ3JvdXAodG9fY29uZmlnX2dyb3VwKGl0ZW0pKTtcbitcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzID0gbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzKG5ldF9ucyk7XG4rXG4rXHRpZiAoIWRpc2Nfc3Vic3lzKVxuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcdHJldHVybiBzbnByaW50ZihwYWdlLCBQQUdFX1NJWkUsIFwiJXNcXG5cIiwgZGlzY19zdWJzeXMtXHUwMDNlc3Vic3lzbnFuKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbnZtZXRfcm9vdF9kaXNjb3ZlcnlfbnFuX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbiBcdFx0Y29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KVxuIHtcbitcdHN0cnVjdCBjb25maWdfaXRlbSAqc3Vic3lzdGVtc19pdGVtO1xuK1x0c3RydWN0IGNvbmZpZ19ncm91cCAqc3Vic3lzdGVtc19ncm91cDtcbitcdHN0cnVjdCBuZXQgKm5ldF9ucyA9IGNvbmZpZ2ZzX25zX2Zyb21fZ3JvdXAodG9fY29uZmlnX2dyb3VwKGl0ZW0pKTtcbitcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzO1xuIFx0c3RydWN0IGxpc3RfaGVhZCAqZW50cnk7XG4tXHRjaGFyICpvbGRfbnFuLCAqbmV3X25xbjtcbitcdGNoYXIgKm9sZF9ucW4gPSBOVUxMLCAqbmV3X25xbjtcbiBcdHNpemVfdCBsZW47XG4gXG4gXHRsZW4gPSBzdHJjc3BuKHBhZ2UsIFwiXFxuXCIpO1xuQEAgLTIzMjcsNyArMjQwNCwxNCBAQCBzdGF0aWMgc3NpemVfdCBudm1ldF9yb290X2Rpc2NvdmVyeV9ucW5fc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGRvd25fd3JpdGUoXHUwMDI2bnZtZXRfY29uZmlnX3NlbSk7XG4tXHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcdTAwMjZudm1ldF9zdWJzeXN0ZW1zX2dyb3VwLmNnX2NoaWxkcmVuKSB7XG4rXHRzdWJzeXN0ZW1zX2l0ZW0gPSBjb25maWdfZ3JvdXBfZmluZF9pdGVtKHRvX2NvbmZpZ19ncm91cChpdGVtKSwgXCJzdWJzeXN0ZW1zXCIpO1xuK1x0aWYgKFdBUk5fT04oIXN1YnN5c3RlbXNfaXRlbSkpIHtcbitcdFx0a2ZyZWUobmV3X25xbik7XG4rXHRcdHVwX3dyaXRlKFx1MDAyNm52bWV0X2NvbmZpZ19zZW0pO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcdHN1YnN5c3RlbXNfZ3JvdXAgPSB0b19jb25maWdfZ3JvdXAoc3Vic3lzdGVtc19pdGVtKTtcbitcdGxpc3RfZm9yX2VhY2goZW50cnksIFx1MDAyNnN1YnN5c3RlbXNfZ3JvdXAtXHUwMDNlY2dfY2hpbGRyZW4pIHtcbiBcdFx0c3RydWN0IGNvbmZpZ19pdGVtICppdGVtID1cbiBcdFx0XHRjb250YWluZXJfb2YoZW50cnksIHN0cnVjdCBjb25maWdfaXRlbSwgY2lfZW50cnkpO1xuIFxuQEAgLTIzMzgsMTIgKzI0MjIsMTUgQEAgc3RhdGljIHNzaXplX3QgbnZtZXRfcm9vdF9kaXNjb3ZlcnlfbnFuX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFx0fVxuLVx0b2xkX25xbiA9IG52bWV0X2Rpc2Nfc3Vic3lzLVx1MDAzZXN1YnN5c25xbjtcbi1cdG52bWV0X2Rpc2Nfc3Vic3lzLVx1MDAzZXN1YnN5c25xbiA9IG5ld19ucW47XG4rXHRkaXNjX3N1YnN5cyA9IG52bWV0X2dldF9kaXNjX3N1YnN5cyhuZXRfbnMpO1xuK1x0aWYgKGRpc2Nfc3Vic3lzKSB7XG4rXHRcdG9sZF9ucW4gPSBkaXNjX3N1YnN5cy1cdTAwM2VzdWJzeXNucW47XG4rXHRcdGRpc2Nfc3Vic3lzLVx1MDAzZXN1YnN5c25xbiA9IG5ld19ucW47XG4rXHR9XG4gXHR1cF93cml0ZShcdTAwMjZudm1ldF9jb25maWdfc2VtKTtcbiBcbiBcdGtmcmVlKG9sZF9ucW4pO1xuLVx0cmV0dXJuIGxlbjtcbitcdHJldHVybiBkaXNjX3N1YnN5cyA/IGxlbiA6IC1FTk9FTlQ7XG4gfVxuIFxuIENPTkZJR0ZTX0FUVFIobnZtZXRfcm9vdF8sIGRpc2NvdmVyeV9ucW4pO1xuQEAgLTIzNTgsNiArMjQ0NSw2OSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgbnZtZXRfcm9vdF90eXBlID0ge1xuIFx0LmN0X293bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4gfTtcbiBcbitzdGF0aWMgaW50IG52bWV0X2NvbmZpZ2ZzX2ZpbGxfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cyxcbitcdFx0XHRcdFx0IHN0cnVjdCBuZXQgKm5ldF9ucylcbit7XG4rXHRzdHJ1Y3QgY29uZmlnX2dyb3VwICpzdWJzeXN0ZW1zX2dyb3VwLCAqcG9ydHNfZ3JvdXAsICpob3N0c19ncm91cDtcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBudm1ldF9hZGRfZGlzY19zdWJzeXMobmV0X25zKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRzdWJzeXN0ZW1zX2dyb3VwID0ga3phbGxvY19vYmooKnN1YnN5c3RlbXNfZ3JvdXApO1xuK1x0aWYgKCFzdWJzeXN0ZW1zX2dyb3VwKSB7XG4rXHRcdG52bWV0X2RlbF9kaXNjX3N1YnN5cyhuZXRfbnMpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcdGNvbmZpZ19ncm91cF9pbml0X3R5cGVfbmFtZShzdWJzeXN0ZW1zX2dyb3VwLFxuK1x0XHRcdFwic3Vic3lzdGVtc1wiLCBcdTAwMjZudm1ldF9zdWJzeXN0ZW1zX3R5cGUpO1xuK1x0Y29uZmlnZnNfYWRkX2RlZmF1bHRfZ3JvdXAoc3Vic3lzdGVtc19ncm91cCxcbitcdFx0XHRcdTAwMjZzdWJzeXMtXHUwMDNlc3VfZ3JvdXApO1xuK1xuK1x0cG9ydHNfZ3JvdXAgPSBremFsbG9jX29iaigqcG9ydHNfZ3JvdXApO1xuK1x0aWYgKCFwb3J0c19ncm91cCkge1xuK1x0XHRrZnJlZShzdWJzeXN0ZW1zX2dyb3VwKTtcbitcdFx0bnZtZXRfZGVsX2Rpc2Nfc3Vic3lzKG5ldF9ucyk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1x0Y29uZmlnX2dyb3VwX2luaXRfdHlwZV9uYW1lKHBvcnRzX2dyb3VwLFxuK1x0XHRcdFwicG9ydHNcIiwgXHUwMDI2bnZtZXRfcG9ydHNfdHlwZSk7XG4rXHRjb25maWdmc19hZGRfZGVmYXVsdF9ncm91cChwb3J0c19ncm91cCxcbitcdFx0XHRcdTAwMjZzdWJzeXMtXHUwMDNlc3VfZ3JvdXApO1xuK1xuK1x0aG9zdHNfZ3JvdXAgPSBremFsbG9jX29iaigqaG9zdHNfZ3JvdXApO1xuK1x0aWYgKCFob3N0c19ncm91cCkge1xuK1x0XHRrZnJlZShwb3J0c19ncm91cCk7XG4rXHRcdGtmcmVlKHN1YnN5c3RlbXNfZ3JvdXApO1xuK1x0XHRudm1ldF9kZWxfZGlzY19zdWJzeXMobmV0X25zKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXHRjb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoaG9zdHNfZ3JvdXAsXG4rXHRcdFx0XCJob3N0c1wiLCBcdTAwMjZudm1ldF9ob3N0c190eXBlKTtcbitcdGNvbmZpZ2ZzX2FkZF9kZWZhdWx0X2dyb3VwKGhvc3RzX2dyb3VwLFxuK1x0XHRcdFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9ncm91cCk7XG4rXHRzdHJzY3B5KHN1YnN5cy1cdTAwM2VzdV9ncm91cC5jZ19pdGVtLmNpX25hbWVidWYsIFwibnZtZXRcIixcbitcdFx0c2l6ZW9mKHN1YnN5cy1cdTAwM2VzdV9ncm91cC5jZ19pdGVtLmNpX25hbWVidWYpKTtcbitcdHN1YnN5cy1cdTAwM2VzdV9ncm91cC5jZ19pdGVtLmNpX3R5cGUgPSBcdTAwMjZudm1ldF9yb290X3R5cGU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgbnZtZXRfY29uZmlnZnNfY2xlYXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cyxcbitcdFx0XHRcdFx0ICAgc3RydWN0IG5ldCAqbmV0X25zKVxuK3tcbitcdHN0cnVjdCBjb25maWdfZ3JvdXAgKmcsICpuO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGcsIG4sIFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9ncm91cC5kZWZhdWx0X2dyb3VwcyxcbitcdFx0XHRcdCBncm91cF9lbnRyeSkge1xuK1x0XHRsaXN0X2RlbChcdTAwMjZnLVx1MDAzZWdyb3VwX2VudHJ5KTtcbitcdFx0Y29uZmlnX2l0ZW1fcHV0KFx1MDAyNmctXHUwMDNlY2dfaXRlbSk7XG4rXHRcdGtmcmVlKGcpO1xuK1x0fVxuK1x0bnZtZXRfZGVsX2Rpc2Nfc3Vic3lzKG5ldF9ucyk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtIG52bWV0X2NvbmZpZ2ZzX3N1YnN5c3RlbSA9IHtcbiBcdC5zdV9ncm91cCA9IHtcbiBcdFx0LmNnX2l0ZW0gPSB7XG5AQCAtMjM2NSwzMCArMjUxNSwxNCBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBudm1ldF9jb25maWdmc19zdWJzeXN0ZW0gPSB7XG4gXHRcdFx0LmNpX3R5cGVcdD0gXHUwMDI2bnZtZXRfcm9vdF90eXBlLFxuIFx0XHR9LFxuIFx0fSxcbitcdC5maWxsX3N1YnN5c3RlbSA9IG52bWV0X2NvbmZpZ2ZzX2ZpbGxfc3Vic3lzdGVtLFxuK1x0LmNsZWFyX3N1YnN5c3RlbSA9IG52bWV0X2NvbmZpZ2ZzX2NsZWFyX3N1YnN5c3RlbSxcbiB9O1xuIFxuIGludCBfX2luaXQgbnZtZXRfaW5pdF9jb25maWdmcyh2b2lkKVxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRjb25maWdfZ3JvdXBfaW5pdChcdTAwMjZudm1ldF9jb25maWdmc19zdWJzeXN0ZW0uc3VfZ3JvdXApO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZudm1ldF9jb25maWdmc19zdWJzeXN0ZW0uc3VfbXV0ZXgpO1xuLVxuLVx0Y29uZmlnX2dyb3VwX2luaXRfdHlwZV9uYW1lKFx1MDAyNm52bWV0X3N1YnN5c3RlbXNfZ3JvdXAsXG4tXHRcdFx0XCJzdWJzeXN0ZW1zXCIsIFx1MDAyNm52bWV0X3N1YnN5c3RlbXNfdHlwZSk7XG4tXHRjb25maWdmc19hZGRfZGVmYXVsdF9ncm91cChcdTAwMjZudm1ldF9zdWJzeXN0ZW1zX2dyb3VwLFxuLVx0XHRcdFx1MDAyNm52bWV0X2NvbmZpZ2ZzX3N1YnN5c3RlbS5zdV9ncm91cCk7XG4tXG4tXHRjb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoXHUwMDI2bnZtZXRfcG9ydHNfZ3JvdXAsXG4tXHRcdFx0XCJwb3J0c1wiLCBcdTAwMjZudm1ldF9wb3J0c190eXBlKTtcbi1cdGNvbmZpZ2ZzX2FkZF9kZWZhdWx0X2dyb3VwKFx1MDAyNm52bWV0X3BvcnRzX2dyb3VwLFxuLVx0XHRcdFx1MDAyNm52bWV0X2NvbmZpZ2ZzX3N1YnN5c3RlbS5zdV9ncm91cCk7XG4tXG4tXHRjb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoXHUwMDI2bnZtZXRfaG9zdHNfZ3JvdXAsXG4tXHRcdFx0XCJob3N0c1wiLCBcdTAwMjZudm1ldF9ob3N0c190eXBlKTtcbi1cdGNvbmZpZ2ZzX2FkZF9kZWZhdWx0X2dyb3VwKFx1MDAyNm52bWV0X2hvc3RzX2dyb3VwLFxuLVx0XHRcdFx1MDAyNm52bWV0X2NvbmZpZ2ZzX3N1YnN5c3RlbS5zdV9ncm91cCk7XG4tXG4gXHRyZXQgPSBjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0oXHUwMDI2bnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0cHJfZXJyKFwiY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtOiAlZFxcblwiLCByZXQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jIGIvZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmNcbmluZGV4IDYyZGQ1OWI5YWE0ZjFjLi4zOTk4OWI4YmFlOTJmOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jXG4rKysgYi9kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuY1xuQEAgLTE3OTgsMjIgKzE3OTgsMjcgQEAgc3RhdGljIHN0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X2ZpbmRfZ2V0X3N1YnN5cyhzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCxcbiBcdFx0Y29uc3QgY2hhciAqc3Vic3lzbnFuKVxuIHtcbiBcdHN0cnVjdCBudm1ldF9zdWJzeXNfbGluayAqcDtcbitcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzO1xuIFxuIFx0aWYgKCFwb3J0KVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbitcdGRpc2Nfc3Vic3lzID0gbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzKHBvcnQtXHUwMDNlbmV0X25zKTtcbitcdGlmICghZGlzY19zdWJzeXMpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuIFx0aWYgKCFzdHJjbXAoTlZNRV9ESVNDX1NVQlNZU19OQU1FLCBzdWJzeXNucW4pKSB7XG4tXHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2bnZtZXRfZGlzY19zdWJzeXMtXHUwMDNlcmVmKSlcbitcdFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZkaXNjX3N1YnN5cy1cdTAwM2VyZWYpKVxuIFx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHRyZXR1cm4gbnZtZXRfZGlzY19zdWJzeXM7XG4rXHRcdHJldHVybiBkaXNjX3N1YnN5cztcbiBcdH1cbiBcbiBcdGRvd25fcmVhZChcdTAwMjZudm1ldF9jb25maWdfc2VtKTtcbi1cdGlmICghc3RybmNtcChudm1ldF9kaXNjX3N1YnN5cy1cdTAwM2VzdWJzeXNucW4sIHN1YnN5c25xbixcbitcdGlmICghc3RybmNtcChkaXNjX3N1YnN5cy1cdTAwM2VzdWJzeXNucW4sIHN1YnN5c25xbixcbiBcdFx0XHRcdE5WTUZfTlFOX1NJWkUpKSB7XG4tXHRcdGlmIChrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZudm1ldF9kaXNjX3N1YnN5cy1cdTAwM2VyZWYpKSB7XG4rXHRcdGlmIChrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZkaXNjX3N1YnN5cy1cdTAwM2VyZWYpKSB7XG4gXHRcdFx0dXBfcmVhZChcdTAwMjZudm1ldF9jb25maWdfc2VtKTtcbi1cdFx0XHRyZXR1cm4gbnZtZXRfZGlzY19zdWJzeXM7XG4rXHRcdFx0cmV0dXJuIGRpc2Nfc3Vic3lzO1xuIFx0XHR9XG4gXHR9XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIFx1MDAyNnBvcnQtXHUwMDNlc3Vic3lzdGVtcywgZW50cnkpIHtcbkBAIC0xODMwLDcgKzE4MzUsNyBAQCBzdGF0aWMgc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfZmluZF9nZXRfc3Vic3lzKHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0LFxuIH1cbiBcbiBzdHJ1Y3QgbnZtZXRfc3Vic3lzICpudm1ldF9zdWJzeXNfYWxsb2MoY29uc3QgY2hhciAqc3Vic3lzbnFuLFxuLVx0XHRlbnVtIG52bWVfc3Vic3lzX3R5cGUgdHlwZSlcbitcdFx0ZW51bSBudm1lX3N1YnN5c190eXBlIHR5cGUsIHN0cnVjdCBuZXQgKm5ldF9ucylcbiB7XG4gXHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXM7XG4gXHRjaGFyIHNlcmlhbFtOVk1FVF9TTl9NQVhfU0laRSAvIDJdO1xuQEAgLTE4ODgsMTAgKzE4OTMsMTIgQEAgc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfc3Vic3lzX2FsbG9jKGNvbnN0IGNoYXIgKnN1YnN5c25xbixcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnN1YnN5cy1cdTAwM2VjdHJscyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzdWJzeXMtXHUwMDNlaG9zdHMpO1xuIFxuLVx0cmV0ID0gbnZtZXRfZGVidWdmc19zdWJzeXNfc2V0dXAoc3Vic3lzKTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gZnJlZV9zdWJzeXNucW47XG4tXG4rXHQvKiBEaXNhYmxlIGRlYnVnZnMgZm9yIG5vbi1pbml0aWFsIG5hbWVzcGFjZXMgKi9cbitcdGlmIChuZXRfbnMgPT0gXHUwMDI2aW5pdF9uZXQpIHtcbitcdFx0cmV0ID0gbnZtZXRfZGVidWdmc19zdWJzeXNfc2V0dXAoc3Vic3lzKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIGZyZWVfc3Vic3lzbnFuO1xuK1x0fVxuIFx0cmV0dXJuIHN1YnN5cztcbiBcbiBmcmVlX3N1YnN5c25xbjpcbkBAIC0xOTc2LDE4ICsxOTgzLDEyIEBAIHN0YXRpYyBpbnQgX19pbml0IG52bWV0X2luaXQodm9pZClcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBvdXRfZnJlZV9udm1ldF9hZW5fd29ya19xdWV1ZTtcbiBcbi1cdGVycm9yID0gbnZtZXRfaW5pdF9kaXNjb3ZlcnkoKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0Z290byBvdXRfZXhpdF9kZWJ1Z2ZzO1xuLVxuIFx0ZXJyb3IgPSBudm1ldF9pbml0X2NvbmZpZ2ZzKCk7XG4gXHRpZiAoZXJyb3IpXG4tXHRcdGdvdG8gb3V0X2V4aXRfZGlzY292ZXJ5O1xuK1x0XHRnb3RvIG91dF9leGl0X2RlYnVnZnM7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1vdXRfZXhpdF9kaXNjb3Zlcnk6XG4tXHRudm1ldF9leGl0X2Rpc2NvdmVyeSgpO1xuIG91dF9leGl0X2RlYnVnZnM6XG4gXHRudm1ldF9leGl0X2RlYnVnZnMoKTtcbiBvdXRfZnJlZV9udm1ldF9hZW5fd29ya19xdWV1ZTpcbkBAIC0yMDA2LDcgKzIwMDcsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBudm1ldF9pbml0KHZvaWQpXG4gc3RhdGljIHZvaWQgX19leGl0IG52bWV0X2V4aXQodm9pZClcbiB7XG4gXHRudm1ldF9leGl0X2NvbmZpZ2ZzKCk7XG4tXHRudm1ldF9leGl0X2Rpc2NvdmVyeSgpO1xuIFx0bnZtZXRfZXhpdF9kZWJ1Z2ZzKCk7XG4gXHRpZGFfZGVzdHJveShcdTAwMjZjbnRsaWRfaWRhKTtcbiBcdGRlc3Ryb3lfd29ya3F1ZXVlKG52bWV0X2Flbl93cSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC9kaXNjb3ZlcnkuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvZGlzY292ZXJ5LmNcbmluZGV4IDExNDg2OWQxNmExZjNjLi5iNDk4NGZjNjViYTc4NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvZGlzY292ZXJ5LmNcbisrKyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvZGlzY292ZXJ5LmNcbkBAIC04LDkgKzgsNDQgQEBcbiAjaW5jbHVkZSBcdTAwM2NnZW5lcmF0ZWQvdXRzcmVsZWFzZS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJudm1ldC5oXCJcbiBcbi1zdHJ1Y3QgbnZtZXRfc3Vic3lzICpudm1ldF9kaXNjX3N1YnN5cztcbitzdGF0aWMgREVGSU5FX1hBUlJBWShudm1ldF9kaXNjX3hhKTtcbiBcbi1zdGF0aWMgdTY0IG52bWV0X2dlbmN0cjtcbitzdHJ1Y3QgbnZtZXRfc3Vic3lzICpudm1ldF9nZXRfZGlzY19zdWJzeXMoc3RydWN0IG5ldCAqbmV0X25zKVxuK3tcbitcdHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cztcbitcdHU2NCBuc19pZCA9IG52bWV0X2dldF9uc19pZChuZXRfbnMpO1xuK1xuK1x0c3Vic3lzID0geGFfbG9hZChcdTAwMjZudm1ldF9kaXNjX3hhLCBuc19pZCk7XG4rXHRyZXR1cm4gc3Vic3lzO1xuK31cbitcbitpbnQgbnZtZXRfYWRkX2Rpc2Nfc3Vic3lzKHN0cnVjdCBuZXQgKm5ldF9ucylcbit7XG4rXHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpkaXNjX3N1YnN5cztcbitcdHU2NCBuc19pZCA9IG52bWV0X2dldF9uc19pZChuZXRfbnMpO1xuK1x0aW50IGVycjtcbitcbitcdGRpc2Nfc3Vic3lzID0gbnZtZXRfc3Vic3lzX2FsbG9jKE5WTUVfRElTQ19TVUJTWVNfTkFNRSxcbitcdFx0XHRcdFx0IE5WTUVfTlFOX0NVUlIsIG5ldF9ucyk7XG4rXHRpZiAoSVNfRVJSKGRpc2Nfc3Vic3lzKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoZGlzY19zdWJzeXMpO1xuK1x0ZXJyID0geGFfaW5zZXJ0KFx1MDAyNm52bWV0X2Rpc2NfeGEsIG5zX2lkLFxuK1x0XHRcdGRpc2Nfc3Vic3lzLCBHRlBfS0VSTkVMKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdG52bWV0X3N1YnN5c19wdXQoZGlzY19zdWJzeXMpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rdm9pZCBudm1ldF9kZWxfZGlzY19zdWJzeXMoc3RydWN0IG5ldCAqbmV0X25zKVxuK3tcbitcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzO1xuK1x0dTY0IG5zX2lkID0gbnZtZXRfZ2V0X25zX2lkKG5ldF9ucyk7XG4rXG4rXHRkaXNjX3N1YnN5cyA9IHhhX2VyYXNlKFx1MDAyNm52bWV0X2Rpc2NfeGEsIG5zX2lkKTtcbitcdGlmIChkaXNjX3N1YnN5cylcbitcdFx0bnZtZXRfc3Vic3lzX3B1dChkaXNjX3N1YnN5cyk7XG4rfVxuIFxuIHN0YXRpYyB2b2lkIF9fbnZtZXRfZGlzY19jaGFuZ2VkKHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0LFxuIFx0XHRcdFx0IHN0cnVjdCBudm1ldF9jdHJsICpjdHJsKVxuQEAgLTI5LDE4ICs2NCwyMiBAQCB2b2lkIG52bWV0X3BvcnRfZGlzY19jaGFuZ2VkKHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0LFxuIFx0XHRcdCAgICAgc3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzKVxuIHtcbiBcdHN0cnVjdCBudm1ldF9jdHJsICpjdHJsO1xuK1x0c3RydWN0IG52bWV0X3N1YnN5cyAqZGlzY19zdWJzeXM7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm52bWV0X2NvbmZpZ19zZW0pO1xuLVx0bnZtZXRfZ2VuY3RyKys7XG4rXHRkaXNjX3N1YnN5cyA9IG52bWV0X2dldF9kaXNjX3N1YnN5cyhwb3J0LVx1MDAzZW5ldF9ucyk7XG4rXHRpZiAoV0FSTl9PTighZGlzY19zdWJzeXMpKVxuK1x0XHRyZXR1cm47XG4rXHRkaXNjX3N1YnN5cy1cdTAwM2VnZW5jdHIrKztcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2bnZtZXRfZGlzY19zdWJzeXMtXHUwMDNlbG9jayk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsIFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVx1MDAzZWN0cmxzLCBzdWJzeXNfZW50cnkpIHtcbitcdG11dGV4X2xvY2soXHUwMDI2ZGlzY19zdWJzeXMtXHUwMDNlbG9jayk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsIFx1MDAyNmRpc2Nfc3Vic3lzLVx1MDAzZWN0cmxzLCBzdWJzeXNfZW50cnkpIHtcbiBcdFx0aWYgKHN1YnN5cyBcdTAwMjZcdTAwMjYgIW52bWV0X2hvc3RfYWxsb3dlZChzdWJzeXMsIGN0cmwtXHUwMDNlaG9zdG5xbikpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdF9fbnZtZXRfZGlzY19jaGFuZ2VkKHBvcnQsIGN0cmwpO1xuIFx0fVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVx1MDAzZWxvY2spO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2Nfc3Vic3lzLVx1MDAzZWxvY2spO1xuIFxuIFx0LyogSWYgdHJhbnNwb3J0IGNhbiBzaWduYWwgY2hhbmdlLCBub3RpZnkgdHJhbnNwb3J0ICovXG4gXHRpZiAocG9ydC1cdTAwM2V0cl9vcHMgXHUwMDI2XHUwMDI2IHBvcnQtXHUwMDNldHJfb3BzLVx1MDAzZWRpc2NvdmVyeV9jaGcpXG5AQCAtNTIsMTUgKzkxLDE5IEBAIHN0YXRpYyB2b2lkIF9fbnZtZXRfc3Vic3lzX2Rpc2NfY2hhbmdlZChzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCxcbiBcdFx0XHRcdFx0c3RydWN0IG52bWV0X2hvc3QgKmhvc3QpXG4ge1xuIFx0c3RydWN0IG52bWV0X2N0cmwgKmN0cmw7XG4rXHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpkaXNjX3N1YnN5cztcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2bnZtZXRfZGlzY19zdWJzeXMtXHUwMDNlbG9jayk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsIFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVx1MDAzZWN0cmxzLCBzdWJzeXNfZW50cnkpIHtcbitcdGRpc2Nfc3Vic3lzID0gbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzKHBvcnQtXHUwMDNlbmV0X25zKTtcbitcdGlmIChXQVJOX09OKCFkaXNjX3N1YnN5cykpXG4rXHRcdHJldHVybjtcbitcdG11dGV4X2xvY2soXHUwMDI2ZGlzY19zdWJzeXMtXHUwMDNlbG9jayk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsIFx1MDAyNmRpc2Nfc3Vic3lzLVx1MDAzZWN0cmxzLCBzdWJzeXNfZW50cnkpIHtcbiBcdFx0aWYgKGhvc3QgXHUwMDI2XHUwMDI2IHN0cmNtcChudm1ldF9ob3N0X25hbWUoaG9zdCksIGN0cmwtXHUwMDNlaG9zdG5xbikpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdF9fbnZtZXRfZGlzY19jaGFuZ2VkKHBvcnQsIGN0cmwpO1xuIFx0fVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVx1MDAzZWxvY2spO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2Nfc3Vic3lzLVx1MDAzZWxvY2spO1xuIH1cbiBcbiB2b2lkIG52bWV0X3N1YnN5c19kaXNjX2NoYW5nZWQoc3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzLFxuQEAgLTY4LDExICsxMTEsMTggQEAgdm9pZCBudm1ldF9zdWJzeXNfZGlzY19jaGFuZ2VkKHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cyxcbiB7XG4gXHRzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydDtcbiBcdHN0cnVjdCBudm1ldF9zdWJzeXNfbGluayAqcztcbitcdHN0cnVjdCBsaXN0X2hlYWQgKnBvcnRfbGlzdDtcbitcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzO1xuK1x0c3RydWN0IG5ldCAqbmV0X25zID0gY29uZmlnZnNfbnNfZnJvbV9ncm91cChcdTAwMjZzdWJzeXMtXHUwMDNlZ3JvdXApO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZudm1ldF9jb25maWdfc2VtKTtcbi1cdG52bWV0X2dlbmN0cisrO1xuK1x0ZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMobmV0X25zKTtcbitcdGlmIChXQVJOX09OKCFkaXNjX3N1YnN5cykpXG4rXHRcdHJldHVybjtcbitcdGRpc2Nfc3Vic3lzLVx1MDAzZWdlbmN0cisrO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBudm1ldF9wb3J0cywgZ2xvYmFsX2VudHJ5KVxuK1x0cG9ydF9saXN0ID0gbnZtZXRfZ2V0X3BvcnRfbGlzdChuZXRfbnMpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBwb3J0X2xpc3QsIGdsb2JhbF9lbnRyeSlcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzLCBcdTAwMjZwb3J0LVx1MDAzZXN1YnN5c3RlbXMsIGVudHJ5KSB7XG4gXHRcdFx0aWYgKHMtXHUwMDNlc3Vic3lzICE9IHN1YnN5cylcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTE3Myw2ICsyMjMsNyBAQCBzdGF0aWMgdm9pZCBudm1ldF9leGVjdXRlX2Rpc2NfZ2V0X2xvZ19wYWdlKHN0cnVjdCBudm1ldF9yZXEgKnJlcSlcbiBcdHUxNiBzdGF0dXMgPSAwO1xuIFx0dm9pZCAqYnVmZmVyO1xuIFx0Y2hhciB0cmFkZHJbTlZNRl9UUkFERFJfU0laRV07XG4rXHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpkaXNjX3N1YnN5cztcbiBcbiBcdGlmICghbnZtZXRfY2hlY2tfdHJhbnNmZXJfbGVuKHJlcSwgZGF0YV9sZW4pKVxuIFx0XHRyZXR1cm47XG5AQCAtMjA3LDEwICsyNTgsMTIgQEAgc3RhdGljIHZvaWQgbnZtZXRfZXhlY3V0ZV9kaXNjX2dldF9sb2dfcGFnZShzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXG4gXHR9XG4gXHRoZHIgPSBidWZmZXI7XG4gXG4rXHRkaXNjX3N1YnN5cyA9IG52bWV0X2dldF9kaXNjX3N1YnN5cyhyZXEtXHUwMDNlcG9ydC1cdTAwM2VuZXRfbnMpO1xuK1xuIFx0bnZtZXRfc2V0X2Rpc2NfdHJhZGRyKHJlcSwgcmVxLVx1MDAzZXBvcnQsIHRyYWRkcik7XG4gXG4gXHRudm1ldF9mb3JtYXRfZGlzY292ZXJ5X2VudHJ5KGhkciwgcmVxLVx1MDAzZXBvcnQsXG4tXHRcdFx0XHQgICAgIG52bWV0X2Rpc2Nfc3Vic3lzLVx1MDAzZXN1YnN5c25xbixcbitcdFx0XHRcdCAgICAgZGlzY19zdWJzeXMtXHUwMDNlc3Vic3lzbnFuLFxuIFx0XHRcdFx0ICAgICB0cmFkZHIsIE5WTUVfTlFOX0NVUlIsIG51bXJlYyk7XG4gXHRudW1yZWMrKztcbiBcbkBAIC0yMzUsNyArMjg4LDcgQEAgc3RhdGljIHZvaWQgbnZtZXRfZXhlY3V0ZV9kaXNjX2dldF9sb2dfcGFnZShzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXG4gXHRcdG51bXJlYysrO1xuIFx0fVxuIFxuLVx0aGRyLVx1MDAzZWdlbmN0ciA9IGNwdV90b19sZTY0KG52bWV0X2dlbmN0cik7XG4rXHRoZHItXHUwMDNlZ2VuY3RyID0gY3B1X3RvX2xlNjQoZGlzY19zdWJzeXMtXHUwMDNlZ2VuY3RyKTtcbiBcdGhkci1cdTAwM2VudW1yZWMgPSBjcHVfdG9fbGU2NChudW1yZWMpO1xuIFx0aGRyLVx1MDAzZXJlY2ZtdCA9IGNwdV90b19sZTE2KDApO1xuIFxuQEAgLTQyOCwxNSArNDgxLDMgQEAgdTE2IG52bWV0X3BhcnNlX2Rpc2NvdmVyeV9jbWQoc3RydWN0IG52bWV0X3JlcSAqcmVxKVxuIFx0fVxuIFxuIH1cbi1cbi1pbnQgX19pbml0IG52bWV0X2luaXRfZGlzY292ZXJ5KHZvaWQpXG4te1xuLVx0bnZtZXRfZGlzY19zdWJzeXMgPVxuLVx0XHRudm1ldF9zdWJzeXNfYWxsb2MoTlZNRV9ESVNDX1NVQlNZU19OQU1FLCBOVk1FX05RTl9DVVJSKTtcbi1cdHJldHVybiBQVFJfRVJSX09SX1pFUk8obnZtZXRfZGlzY19zdWJzeXMpO1xuLX1cbi1cbi12b2lkIG52bWV0X2V4aXRfZGlzY292ZXJ5KHZvaWQpXG4te1xuLVx0bnZtZXRfc3Vic3lzX3B1dChudm1ldF9kaXNjX3N1YnN5cyk7XG4tfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jIGIvZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmNcbmluZGV4IGZjYjFmODE4NmZkZDBkLi4wZWRkNjkwOTAyY2U0YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jXG4rKysgYi9kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuY1xuQEAgLTksNiArOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbnZtZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYXJzZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25zcHJveHkuaFx1MDAzZVxuICNpbmNsdWRlIFwibnZtZXQuaFwiXG4gI2luY2x1ZGUgXCIuLi9ob3N0L252bWUuaFwiXG4gI2luY2x1ZGUgXCIuLi9ob3N0L2ZhYnJpY3MuaFwiXG5AQCAtNTM4LDYgKzUzOSw5IEBAIHN0YXRpYyBzdHJ1Y3QgbnZtZXRfcG9ydCAqbnZtZV9sb29wX2ZpbmRfcG9ydChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZudm1lX2xvb3BfcG9ydHNfbXV0ZXgpO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcdTAwMjZudm1lX2xvb3BfcG9ydHMsIGVudHJ5KSB7XG4rXHRcdC8qIFNraXAgcG9ydHMgZnJvbSBub24tbWF0Y2hpbmcgbmFtZXNwYWNlcyAqL1xuK1x0XHRpZiAocC1cdTAwM2VuZXRfbnMgIT0gY3VycmVudC1cdTAwM2Vuc3Byb3h5LVx1MDAzZW5ldF9ucylcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0LyogaWYgbm8gdHJhbnNwb3J0IGFkZHJlc3MgaXMgc3BlY2lmaWVkIHVzZSB0aGUgZmlyc3QgcG9ydCAqL1xuIFx0XHRpZiAoKGN0cmwtXHUwMDNlb3B0cy1cdTAwM2VtYXNrIFx1MDAyNiBOVk1GX09QVF9UUkFERFIpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgc3RyY21wKGN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0cmFkZHIsIHAtXHUwMDNlZGlzY19hZGRyLnRyYWRkcikpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oIGIvZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oXG5pbmRleCAzMzA1YTg4Njg0ZWNhYi4uNjgxZjkzNWQ4MDA4NmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmhcbisrKyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaFxuQEAgLTIxMCw2ICsyMTAsNyBAQCBzdHJ1Y3QgbnZtZXRfcG9ydCB7XG4gXHRzdHJ1Y3QgbnZtZXRfYW5hX2dyb3VwXHRcdGFuYV9kZWZhdWx0X2dyb3VwO1xuIFx0ZW51bSBudm1lX2FuYV9zdGF0ZVx0XHQqYW5hX3N0YXRlO1xuIFx0c3RydWN0IGtleVx0XHRcdCprZXlyaW5nO1xuK1x0c3RydWN0IG5ldFx0XHRcdCpuZXRfbnM7XG4gXHR2b2lkXHRcdFx0XHQqcHJpdjtcbiBcdGJvb2xcdFx0XHRcdGVuYWJsZWQ7XG4gXHRpbnRcdFx0XHRcdGlubGluZV9kYXRhX3NpemU7XG5AQCAtMzI1LDYgKzMyNiw5IEBAIHN0cnVjdCBudm1ldF9zdWJzeXMge1xuIFx0dTE2XHRcdFx0Y250bGlkX21pbjtcbiBcdHUxNlx0XHRcdGNudGxpZF9tYXg7XG4gXG4rXHQvKiBGb3IgZGlzY292ZXJ5IHN1YnN5c3RlbXMgKi9cbitcdHU2NCBnZW5jdHI7XG4rXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRjdHJscztcbiBcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGhvc3RzO1xuQEAgLTYyNiw3ICs2MzAsNyBAQCBzc2l6ZV90IG52bWV0X2N0cmxfaG9zdF90cmFkZHIoc3RydWN0IG52bWV0X2N0cmwgKmN0cmwsXG4gXHRcdGNoYXIgKnRyYWRkciwgc2l6ZV90IHRyYWRkcl9sZW4pO1xuIFxuIHN0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X3N1YnN5c19hbGxvYyhjb25zdCBjaGFyICpzdWJzeXNucW4sXG4tXHRcdGVudW0gbnZtZV9zdWJzeXNfdHlwZSB0eXBlKTtcbitcdFx0ZW51bSBudm1lX3N1YnN5c190eXBlIHR5cGUsIHN0cnVjdCBuZXQgKm5ldF9ucyk7XG4gdm9pZCBudm1ldF9zdWJzeXNfcHV0KHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cyk7XG4gdm9pZCBudm1ldF9zdWJzeXNfZGVsX2N0cmxzKHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cyk7XG4gXG5AQCAtNjYyLDcgKzY2Niw2IEBAIHUxNiBudm1ldF96ZXJvX3NnbChzdHJ1Y3QgbnZtZXRfcmVxICpyZXEsIG9mZl90IG9mZiwgc2l6ZV90IGxlbik7XG4gdTMyIG52bWV0X2dldF9sb2dfcGFnZV9sZW4oc3RydWN0IG52bWVfY29tbWFuZCAqY21kKTtcbiB1NjQgbnZtZXRfZ2V0X2xvZ19wYWdlX29mZnNldChzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbWQpO1xuIFxuLWV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkICpudm1ldF9wb3J0cztcbiB2b2lkIG52bWV0X3BvcnRfZGlzY19jaGFuZ2VkKHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0LFxuIFx0XHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMpO1xuIHZvaWQgbnZtZXRfc3Vic3lzX2Rpc2NfY2hhbmdlZChzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMsXG5AQCAtNjk2LDExICs2OTksMTMgQEAgdm9pZCBudm1ldF9hZGRfYXN5bmNfZXZlbnQoc3RydWN0IG52bWV0X2N0cmwgKmN0cmwsIHU4IGV2ZW50X3R5cGUsXG4gXG4gaW50IF9faW5pdCBudm1ldF9pbml0X2NvbmZpZ2ZzKHZvaWQpO1xuIHZvaWQgX19leGl0IG52bWV0X2V4aXRfY29uZmlnZnModm9pZCk7XG4rZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgKm52bWV0X2dldF9wb3J0X2xpc3Qoc3RydWN0IG5ldCAqbmV0X25zKTtcbiBcbi1pbnQgX19pbml0IG52bWV0X2luaXRfZGlzY292ZXJ5KHZvaWQpO1xuLXZvaWQgbnZtZXRfZXhpdF9kaXNjb3Zlcnkodm9pZCk7XG4rZXh0ZXJuIHU2NCBudm1ldF9nZXRfbnNfaWQoc3RydWN0IG5ldCAqbmV0X25zKTtcbitleHRlcm4gaW50IG52bWV0X2FkZF9kaXNjX3N1YnN5cyhzdHJ1Y3QgbmV0ICpuZXRfbnMpO1xuK2V4dGVybiB2b2lkIG52bWV0X2RlbF9kaXNjX3N1YnN5cyhzdHJ1Y3QgbmV0ICpuZXRfbnMpO1xuK2V4dGVybiBzdHJ1Y3QgbnZtZXRfc3Vic3lzICpudm1ldF9nZXRfZGlzY19zdWJzeXMoc3RydWN0IG5ldCAqbmV0X25zKTtcbiBcbi1leHRlcm4gc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfZGlzY19zdWJzeXM7XG4gZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgbnZtZXRfY29uZmlnX3NlbTtcbiBcbiBleHRlcm4gdTMyIG52bWV0X2FuYV9ncm91cF9lbmFibGVkW05WTUVUX01BWF9BTkFHUlBTICsgMV07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC9yZG1hLmMgYi9kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuY1xuaW5kZXggYWMyNmY0Zjc3NGM0ZGUuLmNhZDIzOTFhNmQwYTc4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL3RhcmdldC9yZG1hLmNcbisrKyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvcmRtYS5jXG5AQCAtMTg3MCw4ICsxODcwLDggQEAgc3RhdGljIGludCBudm1ldF9yZG1hX2VuYWJsZV9wb3J0KHN0cnVjdCBudm1ldF9yZG1hX3BvcnQgKnBvcnQpXG4gXHRzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQ7XG4gXHRpbnQgcmV0O1xuIFxuLVx0Y21faWQgPSByZG1hX2NyZWF0ZV9pZChcdTAwMjZpbml0X25ldCwgbnZtZXRfcmRtYV9jbV9oYW5kbGVyLCBwb3J0LFxuLVx0XHRcdFJETUFfUFNfVENQLCBJQl9RUFRfUkMpO1xuK1x0Y21faWQgPSByZG1hX2NyZWF0ZV9pZChwb3J0LVx1MDAzZW5wb3J0LVx1MDAzZW5ldF9ucywgbnZtZXRfcmRtYV9jbV9oYW5kbGVyLFxuK1x0XHRcdHBvcnQsIFJETUFfUFNfVENQLCBJQl9RUFRfUkMpO1xuIFx0aWYgKElTX0VSUihjbV9pZCkpIHtcbiBcdFx0cHJfZXJyKFwiQ00gSUQgY3JlYXRpb24gZmFpbGVkXFxuXCIpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihjbV9pZCk7XG5AQCAtMTk2NCw3ICsxOTY0LDcgQEAgc3RhdGljIGludCBudm1ldF9yZG1hX2FkZF9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpucG9ydClcbiBcdFx0bnBvcnQtXHUwMDNlbWF4X3F1ZXVlX3NpemUgPSBOVk1FX1JETUFfTUFYX1FVRVVFX1NJWkU7XG4gXHR9XG4gXG4tXHRyZXQgPSBpbmV0X3B0b25fd2l0aF9zY29wZShcdTAwMjZpbml0X25ldCwgYWYsIG5wb3J0LVx1MDAzZWRpc2NfYWRkci50cmFkZHIsXG4rXHRyZXQgPSBpbmV0X3B0b25fd2l0aF9zY29wZShucG9ydC1cdTAwM2VuZXRfbnMsIGFmLCBucG9ydC1cdTAwM2VkaXNjX2FkZHIudHJhZGRyLFxuIFx0XHRcdG5wb3J0LVx1MDAzZWRpc2NfYWRkci50cnN2Y2lkLCBcdTAwMjZwb3J0LVx1MDAzZWFkZHIpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRwcl9lcnIoXCJtYWxmb3JtZWQgaXAvcG9ydCBwYXNzZWQ6ICVzOiVzXFxuXCIsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNcbmluZGV4IDE1YzUyZjFmOTVmMWIwLi4wMTZiZWY2NWE3NmRkOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNcbisrKyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNcbkBAIC0yMDc0LDcgKzIwNzQsNyBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpXG4gXHRcdGdvdG8gZXJyX3BvcnQ7XG4gXHR9XG4gXG4tXHRyZXQgPSBpbmV0X3B0b25fd2l0aF9zY29wZShcdTAwMjZpbml0X25ldCwgYWYsIG5wb3J0LVx1MDAzZWRpc2NfYWRkci50cmFkZHIsXG4rXHRyZXQgPSBpbmV0X3B0b25fd2l0aF9zY29wZShucG9ydC1cdTAwM2VuZXRfbnMsIGFmLCBucG9ydC1cdTAwM2VkaXNjX2FkZHIudHJhZGRyLFxuIFx0XHRcdG5wb3J0LVx1MDAzZWRpc2NfYWRkci50cnN2Y2lkLCBcdTAwMjZwb3J0LVx1MDAzZWFkZHIpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRwcl9lcnIoXCJtYWxmb3JtZWQgaXAvcG9ydCBwYXNzZWQ6ICVzOiVzXFxuXCIsXG5AQCAtMjA4Nyw4ICsyMDg3LDggQEAgc3RhdGljIGludCBudm1ldF90Y3BfYWRkX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKm5wb3J0KVxuIFx0aWYgKHBvcnQtXHUwMDNlbnBvcnQtXHUwMDNlaW5saW5lX2RhdGFfc2l6ZSBcdTAwM2MgMClcbiBcdFx0cG9ydC1cdTAwM2VucG9ydC1cdTAwM2VpbmxpbmVfZGF0YV9zaXplID0gTlZNRVRfVENQX0RFRl9JTkxJTkVfREFUQV9TSVpFO1xuIFxuLVx0cmV0ID0gc29ja19jcmVhdGUocG9ydC1cdTAwM2VhZGRyLnNzX2ZhbWlseSwgU09DS19TVFJFQU0sXG4tXHRcdFx0XHRJUFBST1RPX1RDUCwgXHUwMDI2cG9ydC1cdTAwM2Vzb2NrKTtcbitcdHJldCA9IHNvY2tfY3JlYXRlX2tlcm4obnBvcnQtXHUwMDNlbmV0X25zLCBwb3J0LVx1MDAzZWFkZHIuc3NfZmFtaWx5LCBTT0NLX1NUUkVBTSxcbitcdFx0XHQgICAgSVBQUk9UT19UQ1AsIFx1MDAyNnBvcnQtXHUwMDNlc29jayk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHByX2VycihcImZhaWxlZCB0byBjcmVhdGUgYSBzb2NrZXRcXG5cIik7XG4gXHRcdGdvdG8gZXJyX3BvcnQ7XG5kaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvY29uZmlnZnNfaW50ZXJuYWwuaCBiL2ZzL2NvbmZpZ2ZzL2NvbmZpZ2ZzX2ludGVybmFsLmhcbmluZGV4IGFjZGVlYThlMmQ2OWFjLi4zNWVkZGMyNzRiODg3OSAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL2NvbmZpZ2ZzX2ludGVybmFsLmhcbisrKyBiL2ZzL2NvbmZpZ2ZzL2NvbmZpZ2ZzX2ludGVybmFsLmhcbkBAIC00NCw2ICs0NCwxNyBAQCBzdHJ1Y3QgY29uZmlnZnNfZGlyZW50IHtcbiBcdHN0cnVjdCBjb25maWdmc19mcmFnbWVudCAqc19mcmFnO1xuIH07XG4gXG4rc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8ge1xuK1x0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCByb290O1xuK1x0c3RydWN0IGNvbmZpZ19ncm91cCBncm91cDtcbitcdHN0cnVjdCBsaXN0X2hlYWQgc3Vic3lzX2xpc3Q7XG4rXHRzdHJ1Y3QgbXV0ZXggc3Vic3lzX211dGV4O1xuK1x0c3RydWN0IHZmc21vdW50ICptbnQ7XG4rXHRpbnQgbW50X2NvdW50O1xuK1x0c3RydWN0IG5ldCAqbmV0X25zO1xuK1x0cmVmY291bnRfdCByZWY7XG4rfTtcbitcbiAjZGVmaW5lIENPTkZJR0ZTX1JPT1RcdFx0MHgwMDAxXG4gI2RlZmluZSBDT05GSUdGU19ESVJcdFx0MHgwMDAyXG4gI2RlZmluZSBDT05GSUdGU19JVEVNX0FUVFJcdDB4MDAwNFxuQEAgLTYzLDcgKzc0LDcgQEAgZXh0ZXJuIHNwaW5sb2NrX3QgY29uZmlnZnNfZGlyZW50X2xvY2s7XG4gXG4gZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpjb25maWdmc19kaXJfY2FjaGVwO1xuIFxuLWV4dGVybiBpbnQgY29uZmlnZnNfaXNfcm9vdChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pO1xuK2V4dGVybiBib29sIGNvbmZpZ2ZzX2lzX3Jvb3Qoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKTtcbiBcbiBleHRlcm4gc3RydWN0IGlub2RlICogY29uZmlnZnNfbmV3X2lub2RlKHVtb2RlX3QgbW9kZSwgc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XG4gZXh0ZXJuIHN0cnVjdCBpbm9kZSAqY29uZmlnZnNfY3JlYXRlKHN0cnVjdCBkZW50cnkgKiwgdW1vZGVfdCBtb2RlKTtcbkBAIC03OSw4ICs5MCwxNCBAQCBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciAqIGNvbmZpZ2ZzX2dldF9uYW1lKHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkKTtcbiBleHRlcm4gaW50IGNvbmZpZ2ZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICppYXR0cik7XG4gXG4tZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmNvbmZpZ2ZzX3Bpbl9mcyh2b2lkKTtcbi1leHRlcm4gdm9pZCBjb25maWdmc19yZWxlYXNlX2ZzKHZvaWQpO1xuK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICpjb25maWdmc19waW5fZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4rZXh0ZXJuIHZvaWQgY29uZmlnZnNfcmVsZWFzZV9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbitleHRlcm4gc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKHN0cnVjdCBuZXQgKm5ldF9ucyk7XG4rZXh0ZXJuIHZvaWQgY29uZmlnZnNfcHV0X3N1cGVyX2luZm8oc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8pO1xuK2V4dGVybiB2b2lkIGNvbmZpZ2ZzX2xpbmtfc3Vic3lzdGVtcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyk7XG4rZXh0ZXJuIHZvaWQgY29uZmlnZnNfdW5saW5rX3N1YnN5c3RlbXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyk7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29uZmlnZnNfZGlyX29wZXJhdGlvbnM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29uZmlnZnNfZmlsZV9vcGVyYXRpb25zO1xuZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL2Rpci5jIGIvZnMvY29uZmlnZnMvZGlyLmNcbmluZGV4IDNjODhmMTNmMWNhMmU5Li4zZDM5YTZjMWE0MTYzNiAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL2Rpci5jXG4rKysgYi9mcy9jb25maWdmcy9kaXIuY1xuQEAgLTM0LDE0ICszNCw2IEBAXG4gICovXG4gREVGSU5FX1NQSU5MT0NLKGNvbmZpZ2ZzX2RpcmVudF9sb2NrKTtcbiBcbi0vKlxuLSAqIEFsbCBvZiBsaW5rX29iai91bmxpbmtfb2JqL2xpbmtfZ3JvdXAvdW5saW5rX2dyb3VwIHJlcXVpcmUgdGhhdFxuLSAqIHN1YnN5cy1cdTAwM2VzdV9tdXRleCBpcyBoZWxkLlxuLSAqIEJ1dCBwYXJlbnQgY29uZmlnZnNfc3Vic3lzdGVtIGlzIE5VTEwgd2hlbiBjb25maWdfaXRlbSBpcyByb290LlxuLSAqIFVzZSB0aGlzIG11dGV4IHdoZW4gY29uZmlnX2l0ZW0gaXMgcm9vdC5cbi0gKi9cbi1zdGF0aWMgREVGSU5FX01VVEVYKGNvbmZpZ2ZzX3N1YnN5c3RlbV9tdXRleCk7XG4tXG4gc3RhdGljIHZvaWQgY29uZmlnZnNfZF9pcHV0KHN0cnVjdCBkZW50cnkgKiBkZW50cnksXG4gXHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIHtcbkBAIC0xMTUyLDcgKzExNDQsNyBAQCBpbnQgY29uZmlnZnNfZGVwZW5kX2l0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzLFxuIFx0ICogUGluIHRoZSBjb25maWdmcyBmaWxlc3lzdGVtLiAgVGhpcyBtZWFucyB3ZSBjYW4gc2FmZWx5IGFjY2Vzc1xuIFx0ICogdGhlIHJvb3Qgb2YgdGhlIGNvbmZpZ2ZzIGZpbGVzeXN0ZW0uXG4gXHQgKi9cbi1cdHJvb3QgPSBjb25maWdmc19waW5fZnMoKTtcbitcdHJvb3QgPSBjb25maWdmc19waW5fZnMoTlVMTCk7XG4gXHRpZiAoSVNfRVJSKHJvb3QpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihyb290KTtcbiBcbkBAIC0xMTc5LDcgKzExNzEsNyBAQCBpbnQgY29uZmlnZnNfZGVwZW5kX2l0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzLFxuIFx0ICogSWYgd2Ugc3VjY2VlZGVkLCB0aGUgZnMgaXMgcGlubmVkIHZpYSBvdGhlciBtZXRob2RzLiAgSWYgbm90LFxuIFx0ICogd2UncmUgZG9uZSB3aXRoIGl0IGFueXdheS4gIFNvIHJlbGVhc2VfZnMoKSBpcyBhbHdheXMgcmlnaHQuXG4gXHQgKi9cbi1cdGNvbmZpZ2ZzX3JlbGVhc2VfZnMoKTtcbitcdGNvbmZpZ2ZzX3JlbGVhc2VfZnMoTlVMTCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0xODY5LDMyICsxODYxLDI3IEBAIHZvaWQgY29uZmlnZnNfdW5yZWdpc3Rlcl9kZWZhdWx0X2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKVxuIH1cbiBFWFBPUlRfU1lNQk9MKGNvbmZpZ2ZzX3VucmVnaXN0ZXJfZGVmYXVsdF9ncm91cCk7XG4gXG4taW50IGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpXG4rc3RhdGljIGludCBjb25maWdmc19saW5rX3Jvb3Qoc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gICppbmZvLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cyxcbitcdFx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuIHtcbi1cdGludCBlcnI7XG4gXHRzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCA9IFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9ncm91cDtcbiBcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbi1cdHN0cnVjdCBkZW50cnkgKnJvb3Q7XG4gXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiBcdHN0cnVjdCBjb25maWdmc19mcmFnbWVudCAqZnJhZztcbitcdGludCBlcnI7XG4gXG4gXHRmcmFnID0gbmV3X2ZyYWdtZW50KCk7XG4gXHRpZiAoIWZyYWcpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0cm9vdCA9IGNvbmZpZ2ZzX3Bpbl9mcygpO1xuLVx0aWYgKElTX0VSUihyb290KSkge1xuLVx0XHRwdXRfZnJhZ21lbnQoZnJhZyk7XG4tXHRcdHJldHVybiBQVFJfRVJSKHJvb3QpO1xuLVx0fVxuLVxuIFx0aWYgKCFncm91cC1cdTAwM2VjZ19pdGVtLmNpX25hbWUpXG4gXHRcdGdyb3VwLVx1MDAzZWNnX2l0ZW0uY2lfbmFtZSA9IGdyb3VwLVx1MDAzZWNnX2l0ZW0uY2lfbmFtZWJ1ZjtcbiBcbiBcdHNkID0gcm9vdC1cdTAwM2VkX2ZzZGF0YTtcbi1cdG11dGV4X2xvY2soXHUwMDI2Y29uZmlnZnNfc3Vic3lzdGVtX211dGV4KTtcbitcdG11dGV4X2xvY2soXHUwMDI2aW5mby1cdTAwM2VzdWJzeXNfbXV0ZXgpO1xuIFx0bGlua19ncm91cCh0b19jb25maWdfZ3JvdXAoc2QtXHUwMDNlc19lbGVtZW50KSwgZ3JvdXApO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N1YnN5c3RlbV9tdXRleCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2VzdWJzeXNfbXV0ZXgpO1xuIFxuIFx0aW5vZGVfbG9ja19uZXN0ZWQoZF9pbm9kZShyb290KSwgSV9NVVRFWF9QQVJFTlQpO1xuIFxuQEAgLTE5MjEsMTcgKzE5MDgsMTIwIEBAIGludCBjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKVxuIFx0aW5vZGVfdW5sb2NrKGRfaW5vZGUocm9vdCkpO1xuIFxuIFx0aWYgKGVycikge1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N1YnN5c3RlbV9tdXRleCk7XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2aW5mby1cdTAwM2VzdWJzeXNfbXV0ZXgpO1xuIFx0XHR1bmxpbmtfZ3JvdXAoZ3JvdXApO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2Y29uZmlnZnNfc3Vic3lzdGVtX211dGV4KTtcbi1cdFx0Y29uZmlnZnNfcmVsZWFzZV9mcygpO1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2VzdWJzeXNfbXV0ZXgpO1xuIFx0fVxuIFx0cHV0X2ZyYWdtZW50KGZyYWcpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4gXG4raW50IGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpXG4re1xuK1x0c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm87XG4rXHRzdHJ1Y3QgZGVudHJ5ICpyb290O1xuK1x0aW50IGVycjtcbitcbitcdGluZm8gPSBjb25maWdmc19nZXRfc3VwZXJfaW5mbyhcdTAwMjZpbml0X25ldCk7XG4rXHRpZiAoV0FSTl9PTihJU19FUlIoaW5mbykpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihpbmZvKTtcbitcbitcdHJvb3QgPSBjb25maWdmc19waW5fZnMoTlVMTCk7XG4rXHRpZiAoSVNfRVJSKHJvb3QpKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIocm9vdCk7XG4rXHRcdGdvdG8gb3V0X3B1dDtcbitcdH1cbitcbitcdGlmIChzdWJzeXMtXHUwMDNlZmlsbF9zdWJzeXN0ZW0pIHtcbitcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c3Vic3lzLVx1MDAzZXN1X2xpbmspO1xuK1x0XHRtdXRleF9pbml0KFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9tdXRleCk7XG4rXHRcdGNvbmZpZ19ncm91cF9pbml0KFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9ncm91cCk7XG4rXHRcdGVyciA9IHN1YnN5cy1cdTAwM2VmaWxsX3N1YnN5c3RlbShzdWJzeXMsIGluZm8tXHUwMDNlbmV0X25zKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIG91dF9yZWxlYXNlO1xuK1x0fVxuK1xuK1x0ZXJyID0gY29uZmlnZnNfbGlua19yb290KGluZm8sIHN1YnN5cywgcm9vdCk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGlmIChzdWJzeXMtXHUwMDNlY2xlYXJfc3Vic3lzdGVtKVxuK1x0XHRcdHN1YnN5cy1cdTAwM2VjbGVhcl9zdWJzeXN0ZW0oc3Vic3lzLCBpbmZvLVx1MDAzZW5ldF9ucyk7XG4rXHRcdGdvdG8gb3V0X3JlbGVhc2U7XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX211dGV4KTtcbitcdGxpc3RfYWRkKFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9saW5rLCBcdTAwMjZpbmZvLVx1MDAzZXN1YnN5c19saXN0KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZXN1YnN5c19tdXRleCk7XG4rXG4rb3V0X3JlbGVhc2U6XG4rXHRpZiAoZXJyKVxuK1x0XHRjb25maWdmc19yZWxlYXNlX2ZzKE5VTEwpO1xuK291dF9wdXQ6XG4rXHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXZvaWQgY29uZmlnZnNfdW5yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKVxuK3ZvaWQgY29uZmlnZnNfbGlua19zdWJzeXN0ZW1zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4rXHRcdFx0ICAgICAgc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8pXG4re1xuK1x0c3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqcztcbitcdHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICpwYXJlbnQgPSBjb25maWdmc19nZXRfc3VwZXJfaW5mbyhcdTAwMjZpbml0X25ldCk7XG4rXHRMSVNUX0hFQUQoc3Vic3lzX2xpc3QpO1xuK1xuK1x0aWYgKFdBUk5fT04oSVNfRVJSKHBhcmVudCkpKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAoKGluZm8tXHUwMDNlbmV0X25zID09IFx1MDAyNmluaXRfbmV0KSB8fCBXQVJOX09OKHBhcmVudCA9PSBpbmZvKSkge1xuK1x0XHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhwYXJlbnQpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXHRtdXRleF9sb2NrKFx1MDAyNnBhcmVudC1cdTAwM2VzdWJzeXNfbXV0ZXgpO1xuK1x0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZwYXJlbnQtXHUwMDNlc3Vic3lzX2xpc3QsIFx1MDAyNnN1YnN5c19saXN0KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwYXJlbnQtXHUwMDNlc3Vic3lzX211dGV4KTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkocywgXHUwMDI2c3Vic3lzX2xpc3QsIHN1X2xpbmspIHtcbitcdFx0c3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzO1xuK1x0XHRzdHJ1Y3QgZGVudHJ5ICpyb290O1xuK1x0XHRpbnQgZXJyO1xuK1xuK1x0XHRpZiAoIXMtXHUwMDNlZmlsbF9zdWJzeXN0ZW0pXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHN1YnN5cyA9IGt6YWxsb2Nfb2JqKCpzdWJzeXMpO1xuK1x0XHRpZiAoIXN1YnN5cylcbitcdFx0XHRjb250aW51ZTtcbitcdFx0c3Vic3lzLVx1MDAzZWZpbGxfc3Vic3lzdGVtID0gcy1cdTAwM2VmaWxsX3N1YnN5c3RlbTtcbitcdFx0c3Vic3lzLVx1MDAzZWNsZWFyX3N1YnN5c3RlbSA9IHMtXHUwMDNlY2xlYXJfc3Vic3lzdGVtO1xuK1x0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzdWJzeXMtXHUwMDNlc3VfbGluayk7XG4rXHRcdG11dGV4X2luaXQoXHUwMDI2c3Vic3lzLVx1MDAzZXN1X211dGV4KTtcbitcdFx0Y29uZmlnX2dyb3VwX2luaXQoXHUwMDI2c3Vic3lzLVx1MDAzZXN1X2dyb3VwKTtcbitcdFx0ZXJyID0gc3Vic3lzLVx1MDAzZWZpbGxfc3Vic3lzdGVtKHN1YnN5cywgaW5mby1cdTAwM2VuZXRfbnMpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0a2ZyZWUoc3Vic3lzKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1x0XHRyb290ID0gY29uZmlnZnNfcGluX2ZzKHNiKTtcbitcdFx0aWYgKElTX0VSUihyb290KSkge1xuK1x0XHRcdGlmIChzdWJzeXMtXHUwMDNlY2xlYXJfc3Vic3lzdGVtKVxuK1x0XHRcdFx0c3Vic3lzLVx1MDAzZWNsZWFyX3N1YnN5c3RlbShzdWJzeXMsIGluZm8tXHUwMDNlbmV0X25zKTtcbitcdFx0XHRrZnJlZShzdWJzeXMpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdGVyciA9IGNvbmZpZ2ZzX2xpbmtfcm9vdChpbmZvLCBzdWJzeXMsIHJvb3QpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0Y29uZmlnZnNfcmVsZWFzZV9mcyhzYik7XG4rXHRcdFx0aWYgKHN1YnN5cy1cdTAwM2VjbGVhcl9zdWJzeXN0ZW0pXG4rXHRcdFx0XHRzdWJzeXMtXHUwMDNlY2xlYXJfc3Vic3lzdGVtKHN1YnN5cywgaW5mby1cdTAwM2VuZXRfbnMpO1xuK1x0XHRcdGtmcmVlKHN1YnN5cyk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZpbmZvLVx1MDAzZXN1YnN5c19tdXRleCk7XG4rXHRcdGxpc3RfYWRkKFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9saW5rLCBcdTAwMjZpbmZvLVx1MDAzZXN1YnN5c19saXN0KTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX211dGV4KTtcbitcdH1cbitcdG11dGV4X2xvY2soXHUwMDI2cGFyZW50LVx1MDAzZXN1YnN5c19tdXRleCk7XG4rXHRsaXN0X3NwbGljZShcdTAwMjZzdWJzeXNfbGlzdCwgXHUwMDI2cGFyZW50LVx1MDAzZXN1YnN5c19saXN0KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwYXJlbnQtXHUwMDNlc3Vic3lzX211dGV4KTtcbitcdGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKHBhcmVudCk7XG4rfVxuK1xuK3N0YXRpYyBib29sIGNvbmZpZ2ZzX3VubGlua19yb290KHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cylcbiB7XG4gXHRzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCA9IFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9ncm91cDtcbiBcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGRnZXQoZ3JvdXAtXHUwMDNlY2dfaXRlbS5jaV9kZW50cnkpO1xuQEAgLTE5NDEsNyArMjAzMSw4IEBAIHZvaWQgY29uZmlnZnNfdW5yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKVxuIFxuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX3BhcmVudCAhPSByb290KSB7XG4gXHRcdHByX2VycihcIlRyaWVkIHRvIHVucmVnaXN0ZXIgbm9uLXN1YnN5c3RlbSFcXG5cIik7XG4tXHRcdHJldHVybjtcbitcdFx0ZHB1dChkZW50cnkpO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHRkb3duX3dyaXRlKFx1MDAyNmZyYWctXHUwMDNlZnJhZ19zZW0pO1xuQEAgLTE5NjksMTEgKzIwNjAsNTAgQEAgdm9pZCBjb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpXG4gXHRpbm9kZV91bmxvY2soZF9pbm9kZShyb290KSk7XG4gXG4gXHRkcHV0KGRlbnRyeSk7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rdm9pZCBjb25maWdmc191bmxpbmtfc3Vic3lzdGVtcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuK1x0XHRcdFx0c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8pXG4re1xuK1x0c3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzLCAqcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2aW5mby1cdTAwM2VzdWJzeXNfbXV0ZXgpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN1YnN5cywgcywgXHUwMDI2aW5mby1cdTAwM2VzdWJzeXNfbGlzdCwgc3VfbGluaykge1xuK1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9saW5rKTtcbitcdFx0aWYgKCFjb25maWdmc191bmxpbmtfcm9vdChzdWJzeXMpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoc3Vic3lzLVx1MDAzZWNsZWFyX3N1YnN5c3RlbSlcbitcdFx0XHRzdWJzeXMtXHUwMDNlY2xlYXJfc3Vic3lzdGVtKHN1YnN5cywgaW5mby1cdTAwM2VuZXRfbnMpO1xuK1x0XHR1bmxpbmtfZ3JvdXAoXHUwMDI2c3Vic3lzLVx1MDAzZXN1X2dyb3VwKTtcbitcdFx0Y29uZmlnZnNfcmVsZWFzZV9mcyhzYik7XG4rXHRcdGtmcmVlKHN1YnN5cyk7XG4rXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2VzdWJzeXNfbXV0ZXgpO1xuK31cbitcbit2b2lkIGNvbmZpZ2ZzX3VucmVnaXN0ZXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cylcbit7XG4rXHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbztcbitcdHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwID0gXHUwMDI2c3Vic3lzLVx1MDAzZXN1X2dyb3VwO1xuK1xuK1x0aW5mbyA9IGNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKFx1MDAyNmluaXRfbmV0KTtcbitcdGlmIChXQVJOX09OKElTX0VSUihpbmZvKSkpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICghY29uZmlnZnNfdW5saW5rX3Jvb3Qoc3Vic3lzKSkge1xuK1x0XHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZjb25maWdmc19zdWJzeXN0ZW1fbXV0ZXgpO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZpbmZvLVx1MDAzZXN1YnN5c19tdXRleCk7XG4rXHRsaXN0X2RlbF9pbml0KFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9saW5rKTtcbitcdGlmIChzdWJzeXMtXHUwMDNlY2xlYXJfc3Vic3lzdGVtKVxuK1x0XHRzdWJzeXMtXHUwMDNlY2xlYXJfc3Vic3lzdGVtKHN1YnN5cywgaW5mby1cdTAwM2VuZXRfbnMpO1xuIFx0dW5saW5rX2dyb3VwKGdyb3VwKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZjb25maWdmc19zdWJzeXN0ZW1fbXV0ZXgpO1xuLVx0Y29uZmlnZnNfcmVsZWFzZV9mcygpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX211dGV4KTtcbitcdGNvbmZpZ2ZzX3JlbGVhc2VfZnMoTlVMTCk7XG4rXHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTtcbiB9XG4gXG4gRVhQT1JUX1NZTUJPTChjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0pO1xuZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL21vdW50LmMgYi9mcy9jb25maWdmcy9tb3VudC5jXG5pbmRleCA0OTI5ZjM0MzExODk0Ni4uNzk0MTI1N2Q1NThiNzIgMTAwNjQ0XG4tLS0gYS9mcy9jb25maWdmcy9tb3VudC5jXG4rKysgYi9mcy9jb25maWdmcy9tb3VudC5jXG5AQCAtMjIsMTAgKzIyLDE5IEBAXG4gLyogUmFuZG9tIG1hZ2ljIG51bWJlciAqL1xuICNkZWZpbmUgQ09ORklHRlNfTUFHSUMgMHg2MjY1NjU3MFxuIFxuLXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKmNvbmZpZ2ZzX21vdW50ID0gTlVMTDtcbiBzdHJ1Y3Qga21lbV9jYWNoZSAqY29uZmlnZnNfZGlyX2NhY2hlcDtcbi1zdGF0aWMgaW50IGNvbmZpZ2ZzX21udF9jb3VudCA9IDA7XG4rc3RhdGljIERFRklORV9YQVJSQVkoY29uZmlnZnNfc3VwZXJfeGEpO1xuK3N0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqY29uZmlnZnNfcm9vdDtcbitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNvbmZpZ2ZzX3Bpbl9sb2NrKTtcbiBcbitzdGF0aWMgdTY0IGNvbmZpZ2ZzX25zX2lkKHN0cnVjdCBuZXQgKm5ldF9ucylcbit7XG4rXHRzdHJ1Y3QgbnNfY29tbW9uICpucyA9IG5ldF9ucyA/IHRvX25zX2NvbW1vbihuZXRfbnMpIDogTlVMTDtcbitcbitcdGlmICghbnMgfHwgbmV0X25zID09IFx1MDAyNmluaXRfbmV0KVxuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiBucy1cdTAwM2Vuc19pZDtcbit9XG4gXG4gc3RhdGljIHZvaWQgY29uZmlnZnNfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbkBAIC00MCwyOCArNDksODIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGNvbmZpZ2ZzX29wcyA9IHtcbiBcdC5mcmVlX2lub2RlXHQ9IGNvbmZpZ2ZzX2ZyZWVfaW5vZGUsXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCBjb25maWdmc19yb290X2dyb3VwID0ge1xuLVx0LmNnX2l0ZW0gPSB7XG4tXHRcdC5jaV9uYW1lYnVmXHQ9IFwicm9vdFwiLFxuLVx0XHQuY2lfbmFtZVx0PSBjb25maWdmc19yb290X2dyb3VwLmNnX2l0ZW0uY2lfbmFtZWJ1Zixcbi1cdH0sXG4tfTtcbitib29sIGNvbmZpZ2ZzX2lzX3Jvb3Qoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuK3tcbitcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xuK1xuK1x0aWYgKCFpdGVtLVx1MDAzZWNpX2RlbnRyeSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0c2QgPSBpdGVtLVx1MDAzZWNpX2RlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbitcdHJldHVybiAhIShzZC1cdTAwM2VzX3R5cGUgXHUwMDI2IENPTkZJR0ZTX1JPT1QpO1xuK31cbiBcbi1pbnQgY29uZmlnZnNfaXNfcm9vdChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG4rc3RhdGljIHZvaWQgY29uZmlnZnNfZmlsbF9zdXBlcl9pbmZvKHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvKVxuIHtcbi1cdHJldHVybiBpdGVtID09IFx1MDAyNmNvbmZpZ2ZzX3Jvb3RfZ3JvdXAuY2dfaXRlbTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlcm9vdC5zX3NpYmxpbmcpO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aW5mby1cdTAwM2Vyb290LnNfY2hpbGRyZW4pO1xuK1x0aW5mby1cdTAwM2Vyb290LnNfdHlwZSA9IENPTkZJR0ZTX1JPT1Q7XG4rXHRpbmZvLVx1MDAzZXJvb3Quc19lbGVtZW50ID0gXHUwMDI2aW5mby1cdTAwM2Vncm91cC5jZ19pdGVtO1xuK1x0c3Ryc2NweShpbmZvLVx1MDAzZWdyb3VwLmNnX2l0ZW0uY2lfbmFtZWJ1ZiwgXCJyb290XCIsIDQpO1xuK1x0aW5mby1cdTAwM2Vncm91cC5jZ19pdGVtLmNpX25hbWUgPSBpbmZvLVx1MDAzZWdyb3VwLmNnX2l0ZW0uY2lfbmFtZWJ1ZjtcbitcdGNvbmZpZ19ncm91cF9pbml0KFx1MDAyNmluZm8tXHUwMDNlZ3JvdXApO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aW5mby1cdTAwM2VzdWJzeXNfbGlzdCk7XG4rXHRtdXRleF9pbml0KFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX211dGV4KTtcbitcdHJlZmNvdW50X3NldChcdTAwMjZpbmZvLVx1MDAzZXJlZiwgMSk7XG4rXHRpbmZvLVx1MDAzZW1udF9jb3VudCA9IDA7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfZGlyZW50IGNvbmZpZ2ZzX3Jvb3QgPSB7XG4tXHQuc19zaWJsaW5nXHQ9IExJU1RfSEVBRF9JTklUKGNvbmZpZ2ZzX3Jvb3Quc19zaWJsaW5nKSxcbi1cdC5zX2NoaWxkcmVuXHQ9IExJU1RfSEVBRF9JTklUKGNvbmZpZ2ZzX3Jvb3Quc19jaGlsZHJlbiksXG4tXHQuc19lbGVtZW50XHQ9IFx1MDAyNmNvbmZpZ2ZzX3Jvb3RfZ3JvdXAuY2dfaXRlbSxcbi1cdC5zX3R5cGVcdFx0PSBDT05GSUdGU19ST09ULFxuLVx0LnNfaWF0dHJcdD0gTlVMTCxcbi19O1xuK3N0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICpjb25maWdmc19nZXRfc3VwZXJfaW5mbyhzdHJ1Y3QgbmV0ICpuZXRfbnMpXG4re1xuK1x0c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm87XG4rXHR1NjQgbnNfaWQgPSBjb25maWdmc19uc19pZChuZXRfbnMpO1xuK1x0aW50IGVycjtcbitcbitcdHhhX2xvY2soXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEpO1xuK1x0aW5mbyA9IHhhX2xvYWQoXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEsIG5zX2lkKTtcbitcdGlmIChpbmZvKSB7XG4rXHRcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKChcdTAwMjZpbmZvLVx1MDAzZXJlZikpKVxuK1x0XHRcdGluZm8gPSBFUlJfUFRSKC1FQlVTWSk7XG4rXHRcdHhhX3VubG9jayhcdTAwMjZjb25maWdmc19zdXBlcl94YSk7XG4rXHRcdHJldHVybiBpbmZvO1xuK1x0fVxuK1x0aW5mbyA9IGt6YWxsb2Nfb2JqKCppbmZvKTtcbitcdGlmICghaW5mbykge1xuK1x0XHR4YV91bmxvY2soXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEpO1xuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdH1cbitcbitcdGluZm8tXHUwMDNlbmV0X25zID0gZ2V0X25ldChuZXRfbnMpO1xuK1x0Y29uZmlnZnNfZmlsbF9zdXBlcl9pbmZvKGluZm8pO1xuK1x0ZXJyID0gX194YV9pbnNlcnQoXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEsIG5zX2lkLFxuK1x0XHRcdCAgaW5mbywgR0ZQX0tFUk5FTCk7XG4rXHR4YV91bmxvY2soXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEpO1xuK1x0aWYgKGVyciBcdTAwM2MgMCkge1xuK1x0XHRwdXRfbmV0KGluZm8tXHUwMDNlbmV0X25zKTtcbitcdFx0a2ZyZWUoaW5mbyk7XG4rXHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4rXHR9XG4rXHRyZXR1cm4gaW5mbztcbit9XG4rXG4rdm9pZCBjb25maWdmc19wdXRfc3VwZXJfaW5mbyhzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbylcbit7XG4rXHR1NjQgbnNfaWQgPSBjb25maWdmc19uc19pZChpbmZvLVx1MDAzZW5ldF9ucyk7XG4rXG4rXHR4YV9sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N1cGVyX3hhKTtcbitcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmluZm8tXHUwMDNlcmVmKSkge1xuK1x0XHR4YV91bmxvY2soXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXHRfX3hhX2VyYXNlKFx1MDAyNmNvbmZpZ2ZzX3N1cGVyX3hhLCBuc19pZCk7XG4rXHR4YV91bmxvY2soXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEpO1xuK1x0cHV0X25ldChpbmZvLVx1MDAzZW5ldF9ucyk7XG4rXHRrZnJlZShpbmZvKTtcbit9XG4gXG4gc3RhdGljIGludCBjb25maWdmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiB7XG4rXHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyA9IHNiLVx1MDAzZXNfZnNfaW5mbztcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpyb290O1xuIFxuQEAgLTcyLDY2ICsxMzUsMTYyIEBAIHN0YXRpYyBpbnQgY29uZmlnZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRzYi1cdTAwM2VzX3RpbWVfZ3JhbiA9IDE7XG4gXG4gXHRpbm9kZSA9IGNvbmZpZ2ZzX25ld19pbm9kZShTX0lGRElSIHwgU19JUldYVSB8IFNfSVJVR08gfCBTX0lYVUdPLFxuLVx0XHRcdFx0ICAgXHUwMDI2Y29uZmlnZnNfcm9vdCwgc2IpO1xuLVx0aWYgKGlub2RlKSB7XG4tXHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZjb25maWdmc19yb290X2lub2RlX29wZXJhdGlvbnM7XG4tXHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2Y29uZmlnZnNfZGlyX29wZXJhdGlvbnM7XG4tXHRcdC8qIGRpcmVjdG9yeSBpbm9kZXMgc3RhcnQgb2ZmIHdpdGggaV9ubGluayA9PSAyIChmb3IgXCIuXCIgZW50cnkpICovXG4tXHRcdGluY19ubGluayhpbm9kZSk7XG4tXHR9IGVsc2Uge1xuK1x0XHRcdFx0ICAgXHUwMDI2aW5mby1cdTAwM2Vyb290LCBzYik7XG4rXHRpZiAoSVNfRVJSKGlub2RlKSkge1xuIFx0XHRwcl9kZWJ1ZyhcImNvdWxkIG5vdCBnZXQgcm9vdCBpbm9kZVxcblwiKTtcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdHJldHVybiBQVFJfRVJSKGlub2RlKTtcbiBcdH1cbitcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZjb25maWdmc19yb290X2lub2RlX29wZXJhdGlvbnM7XG4rXHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNmNvbmZpZ2ZzX2Rpcl9vcGVyYXRpb25zO1xuK1x0LyogZGlyZWN0b3J5IGlub2RlcyBzdGFydCBvZmYgd2l0aCBpX25saW5rID09IDIgKGZvciBcIi5cIiBlbnRyeSkgKi9cbitcdGluY19ubGluayhpbm9kZSk7XG4gXG4gXHRyb290ID0gZF9tYWtlX3Jvb3QoaW5vZGUpO1xuIFx0aWYgKCFyb290KSB7XG4gXHRcdHByX2RlYnVnKFwiJXM6IGNvdWxkIG5vdCBnZXQgcm9vdCBkZW50cnkhXFxuXCIsX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbi1cdGNvbmZpZ19ncm91cF9pbml0KFx1MDAyNmNvbmZpZ2ZzX3Jvb3RfZ3JvdXApO1xuLVx0Y29uZmlnZnNfcm9vdF9ncm91cC5jZ19pdGVtLmNpX2RlbnRyeSA9IHJvb3Q7XG4tXHRyb290LVx1MDAzZWRfZnNkYXRhID0gXHUwMDI2Y29uZmlnZnNfcm9vdDtcbitcdGluZm8tXHUwMDNlZ3JvdXAuY2dfaXRlbS5jaV9kZW50cnkgPSByb290O1xuK1x0cm9vdC1cdTAwM2VkX2ZzZGF0YSA9IFx1MDAyNmluZm8tXHUwMDNlcm9vdDtcbiBcdHNiLVx1MDAzZXNfcm9vdCA9IHJvb3Q7XG4gXHRzZXRfZGVmYXVsdF9kX29wKHNiLCBcdTAwMjZjb25maWdmc19kZW50cnlfb3BzKTsgLyogdGhlIHJlc3QgZ2V0IHRoYXQgKi9cbiBcdHNiLVx1MDAzZXNfZF9mbGFncyB8PSBEQ0FDSEVfRE9OVENBQ0hFO1xuK1xuK1x0Y29uZmlnZnNfbGlua19zdWJzeXN0ZW1zKHNiLCBpbmZvKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGNvbmZpZ2ZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiB7XG4tXHRyZXR1cm4gZ2V0X3RyZWVfc2luZ2xlKGZjLCBjb25maWdmc19maWxsX3N1cGVyKTtcbitcdHN0cnVjdCBuZXQgKm5ldF9ucyA9IGZjLVx1MDAzZWZzX3ByaXZhdGU7XG4rXHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbztcbitcdGludCBlcnI7XG4rXG4rXHRpbmZvID0gY29uZmlnZnNfZ2V0X3N1cGVyX2luZm8obmV0X25zKTtcbitcdGlmIChJU19FUlIoaW5mbykpXG4rXHRcdHJldHVybiBQVFJfRVJSKGluZm8pO1xuK1xuK1x0ZXJyID0gZ2V0X3RyZWVfa2V5ZWQoZmMsIGNvbmZpZ2ZzX2ZpbGxfc3VwZXIsIGluZm8pO1xuK1x0aWYgKGVyciBcdTAwMjZcdTAwMjYgZmMtXHUwMDNlc19mc19pbmZvKVxuK1x0XHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGNvbmZpZ2ZzX2ZzX2NvbnRleHRfZnJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4re1xuK1x0c3RydWN0IG5ldCAqbmV0X25zID0gZmMtXHUwMDNlZnNfcHJpdmF0ZTtcbitcbitcdGZjLVx1MDAzZWZzX3ByaXZhdGUgPSBOVUxMO1xuK1x0cHV0X25ldChuZXRfbnMpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBjb25maWdmc19jb250ZXh0X29wcyA9IHtcbiBcdC5nZXRfdHJlZVx0PSBjb25maWdmc19nZXRfdHJlZSxcbitcdC5mcmVlXHRcdD0gY29uZmlnZnNfZnNfY29udGV4dF9mcmVlLFxuIH07XG4gXG4gc3RhdGljIGludCBjb25maWdmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIHtcbitcdHN0cnVjdCBuZXQgKm5ldF9ucyA9IGdldF9uZXQoY3VycmVudC1cdTAwM2Vuc3Byb3h5LVx1MDAzZW5ldF9ucyk7XG4rXG4rXHRmYy1cdTAwM2Vmc19wcml2YXRlID0gbmV0X25zO1xuIFx0ZmMtXHUwMDNlb3BzID0gXHUwMDI2Y29uZmlnZnNfY29udGV4dF9vcHM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgY29uZmlnZnNfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuK3tcbitcdHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvID0gc2ItXHUwMDNlc19mc19pbmZvO1xuK1xuK1x0Y29uZmlnZnNfdW5saW5rX3N1YnN5c3RlbXMoc2IsIGluZm8pO1xuK1x0a2lsbF9hbm9uX3N1cGVyKHNiKTtcbitcdGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKGluZm8pO1xuK1x0c2ItXHUwMDNlc19mc19pbmZvID0gTlVMTDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGNvbmZpZ2ZzX2ZzX3R5cGUgPSB7XG4gXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiBcdC5uYW1lXHRcdD0gXCJjb25maWdmc1wiLFxuIFx0LmluaXRfZnNfY29udGV4dCA9IGNvbmZpZ2ZzX2luaXRfZnNfY29udGV4dCxcbi1cdC5raWxsX3NiXHQ9IGtpbGxfYW5vbl9zdXBlcixcbitcdC5raWxsX3NiXHQ9IGNvbmZpZ2ZzX2tpbGxfc2IsXG4rXHQuZnNfZmxhZ3NcdD0gRlNfVVNFUk5TX01PVU5ULFxuIH07XG4gTU9EVUxFX0FMSUFTX0ZTKFwiY29uZmlnZnNcIik7XG4gXG4tc3RydWN0IGRlbnRyeSAqY29uZmlnZnNfcGluX2ZzKHZvaWQpXG4rc3RydWN0IGRlbnRyeSAqY29uZmlnZnNfcGluX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4ge1xuLVx0aW50IGVyciA9IHNpbXBsZV9waW5fZnMoXHUwMDI2Y29uZmlnZnNfZnNfdHlwZSwgXHUwMDI2Y29uZmlnZnNfbW91bnQsXG4tXHRcdFx0ICAgICBcdTAwMjZjb25maWdmc19tbnRfY291bnQpO1xuLVx0cmV0dXJuIGVyciA/IEVSUl9QVFIoZXJyKSA6IGNvbmZpZ2ZzX21vdW50LVx1MDAzZW1udF9yb290O1xuK1x0c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm87XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xuK1x0aWYgKHNiKSB7XG4rXHRcdHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICpyb290ID0gY29uZmlnZnNfcm9vdDtcbitcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gc2ItXHUwMDNlc19yb290O1xuK1xuK1x0XHRpbmZvID0gc2ItXHUwMDNlc19mc19pbmZvO1xuK1x0XHRpZiAoIWluZm8tXHUwMDNlbW50KSB7XG4rXHRcdFx0c3RydWN0IHZmc21vdW50ICptbnQ7XG4rXG4rXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xuK1x0XHRcdG1udCA9IG1udF9jbG9uZV9kaXJlY3Qocm9vdC1cdTAwM2VtbnQsIGRlbnRyeSk7XG4rXHRcdFx0aWYgKElTX0VSUihtbnQpKVxuK1x0XHRcdFx0cmV0dXJuIEVSUl9DQVNUKG1udCk7XG4rXHRcdFx0c3Bpbl9sb2NrKFx1MDAyNmNvbmZpZ2ZzX3Bpbl9sb2NrKTtcbitcdFx0XHRpbmZvLVx1MDAzZW1udCA9IG1udDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRtbnRnZXQoaW5mby1cdTAwM2VtbnQpO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRpbmZvID0gY29uZmlnZnNfcm9vdDtcbitcdFx0aWYgKCFpbmZvLVx1MDAzZW1udCkge1xuK1x0XHRcdHN0cnVjdCB2ZnNtb3VudCAqbW50O1xuK1xuK1x0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmNvbmZpZ2ZzX3Bpbl9sb2NrKTtcbitcdFx0XHRtbnQgPSB2ZnNfa2Vybl9tb3VudChcdTAwMjZjb25maWdmc19mc190eXBlLCBTQl9LRVJOTU9VTlQsXG4rXHRcdFx0XHRcdCAgICAgY29uZmlnZnNfZnNfdHlwZS5uYW1lLCBOVUxMKTtcbitcdFx0XHRpZiAoSVNfRVJSKG1udCkpXG4rXHRcdFx0XHRyZXR1cm4gRVJSX0NBU1QobW50KTtcbitcdFx0XHRzcGluX2xvY2soXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xuK1x0XHRcdGluZm8tXHUwMDNlbW50ID0gbW50O1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdG1udGdldChpbmZvLVx1MDAzZW1udCk7XG4rXHRcdH1cbitcdH1cbitcdGluZm8tXHUwMDNlbW50X2NvdW50Kys7XG4rXHRzcGluX3VubG9jayhcdTAwMjZjb25maWdmc19waW5fbG9jayk7XG4rXHRyZXR1cm4gaW5mby1cdTAwM2VtbnQtXHUwMDNlbW50X3Jvb3Q7XG4gfVxuIFxuLXZvaWQgY29uZmlnZnNfcmVsZWFzZV9mcyh2b2lkKVxuK3ZvaWQgY29uZmlnZnNfcmVsZWFzZV9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbi1cdHNpbXBsZV9yZWxlYXNlX2ZzKFx1MDAyNmNvbmZpZ2ZzX21vdW50LCBcdTAwMjZjb25maWdmc19tbnRfY291bnQpO1xuK1x0c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8gPSBjb25maWdmc19yb290O1xuK1x0c3RydWN0IHZmc21vdW50ICptbnQ7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xuK1x0aWYgKHNiKVxuK1x0XHRpbmZvID0gc2ItXHUwMDNlc19mc19pbmZvO1xuK1x0bW50ID0gaW5mby1cdTAwM2VtbnQ7XG4rXHRpZiAoLS1pbmZvLVx1MDAzZW1udF9jb3VudClcbitcdFx0aW5mby1cdTAwM2VtbnQgPSBOVUxMO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xuK1x0bW50cHV0KG1udCk7XG4gfVxuIFxuK3N0cnVjdCBuZXQgKmNvbmZpZ2ZzX25zX2Zyb21fZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXApXG4re1xuK1x0c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8gPSBjb25maWdmc19yb290O1xuK1x0c3RydWN0IG5ldCAqbmV0X25zID0gTlVMTDtcbitcbitcdGlmIChncm91cCkge1xuK1x0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBncm91cC1cdTAwM2VjZ19pdGVtLmNpX2RlbnRyeTtcbitcbitcdFx0aW5mbyA9IGRlbnRyeS1cdTAwM2VkX3NiLVx1MDAzZXNfZnNfaW5mbztcbitcdFx0aWYgKGluZm8pXG4rXHRcdFx0bmV0X25zID0gaW5mby1cdTAwM2VuZXRfbnM7XG4rXHR9XG4rXHRyZXR1cm4gbmV0X25zO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChjb25maWdmc19uc19mcm9tX2dyb3VwKTtcbiBcbiBzdGF0aWMgaW50IF9faW5pdCBjb25maWdmc19pbml0KHZvaWQpXG4ge1xuQEAgLTE0MywxOCArMzAyLDI3IEBAIHN0YXRpYyBpbnQgX19pbml0IGNvbmZpZ2ZzX2luaXQodm9pZClcbiBcdGlmICghY29uZmlnZnNfZGlyX2NhY2hlcClcbiBcdFx0Z290byBvdXQ7XG4gXG4rXHRjb25maWdmc19yb290ID0gY29uZmlnZnNfZ2V0X3N1cGVyX2luZm8oXHUwMDI2aW5pdF9uZXQpO1xuK1x0aWYgKElTX0VSUihjb25maWdmc19yb290KSkge1xuK1x0XHRlcnIgPSBQVFJfRVJSKGNvbmZpZ2ZzX3Jvb3QpO1xuK1x0XHRnb3RvIG91dDI7XG4rXHR9XG4rXG4gXHRlcnIgPSBzeXNmc19jcmVhdGVfbW91bnRfcG9pbnQoa2VybmVsX2tvYmosIFwiY29uZmlnXCIpO1xuIFx0aWYgKGVycilcbi1cdFx0Z290byBvdXQyO1xuK1x0XHRnb3RvIG91dDM7XG4gXG4gXHRlcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKFx1MDAyNmNvbmZpZ2ZzX2ZzX3R5cGUpO1xuIFx0aWYgKGVycilcbi1cdFx0Z290byBvdXQzO1xuK1x0XHRnb3RvIG91dDQ7XG4gXG4gXHRyZXR1cm4gMDtcbi1vdXQzOlxuK291dDQ6XG4gXHRwcl9lcnIoXCJVbmFibGUgdG8gcmVnaXN0ZXIgZmlsZXN5c3RlbSFcXG5cIik7XG4gXHRzeXNmc19yZW1vdmVfbW91bnRfcG9pbnQoa2VybmVsX2tvYmosIFwiY29uZmlnXCIpO1xuK291dDM6XG4rXHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhjb25maWdmc19yb290KTtcbitcdGNvbmZpZ2ZzX3Jvb3QgPSBOVUxMO1xuIG91dDI6XG4gXHRrbWVtX2NhY2hlX2Rlc3Ryb3koY29uZmlnZnNfZGlyX2NhY2hlcCk7XG4gXHRjb25maWdmc19kaXJfY2FjaGVwID0gTlVMTDtcbkBAIC0xNjYsNiArMzM0LDggQEAgc3RhdGljIHZvaWQgX19leGl0IGNvbmZpZ2ZzX2V4aXQodm9pZClcbiB7XG4gXHR1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oXHUwMDI2Y29uZmlnZnNfZnNfdHlwZSk7XG4gXHRzeXNmc19yZW1vdmVfbW91bnRfcG9pbnQoa2VybmVsX2tvYmosIFwiY29uZmlnXCIpO1xuK1x0Y29uZmlnZnNfcHV0X3N1cGVyX2luZm8oY29uZmlnZnNfcm9vdCk7XG4rXHRjb25maWdmc19yb290ID0gTlVMTDtcbiBcdGttZW1fY2FjaGVfZGVzdHJveShjb25maWdmc19kaXJfY2FjaGVwKTtcbiBcdGNvbmZpZ2ZzX2Rpcl9jYWNoZXAgPSBOVUxMO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9uYW1lc3BhY2UuYyBiL2ZzL25hbWVzcGFjZS5jXG5pbmRleCAzZDVjZDViZjNiMDUzNy4uZTdhYmJmNjMyY2M3MGQgMTAwNjQ0XG4tLS0gYS9mcy9uYW1lc3BhY2UuY1xuKysrIGIvZnMvbmFtZXNwYWNlLmNcbkBAIC0xNDgyLDYgKzE0ODIsMTcgQEAgc3RydWN0IHZmc21vdW50ICptbnRfY2xvbmVfaW50ZXJuYWwoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4gXHRyZXR1cm4gXHUwMDI2cC1cdTAwM2VtbnQ7XG4gfVxuIFxuK3N0cnVjdCB2ZnNtb3VudCAqbW50X2Nsb25lX2RpcmVjdChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuK3tcbitcdHN0cnVjdCBtb3VudCAqcDtcbitcbitcdHAgPSBjbG9uZV9tbnQocmVhbF9tb3VudChtbnQpLCBkZW50cnksIENMX1NMQVZFKTtcbitcdGlmIChJU19FUlIocCkpXG4rXHRcdHJldHVybiBFUlJfQ0FTVChwKTtcbitcdHAtXHUwMDNlbW50Lm1udF9mbGFncyB8PSBNTlRfSU5URVJOQUw7XG4rXHRyZXR1cm4gXHUwMDI2cC1cdTAwM2VtbnQ7XG4rfVxuK1xuIC8qXG4gICogUmV0dXJucyB0aGUgbW91bnQgd2hpY2ggZWl0aGVyIGhhcyB0aGUgc3BlY2lmaWVkIG1udF9pZCwgb3IgaGFzIHRoZSBuZXh0XG4gICogc21hbGxlc3QgaWQgYWZlciB0aGUgc3BlY2lmaWVkIG9uZS5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmggYi9pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmhcbmluZGV4IGVmNjVjNzViZWVhYWQ4Li43NmUwYmIxYTcyYjlkYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY29uZmlnZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9jb25maWdmcy5oXG5AQCAtMjQsNiArMjQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZSAgIC8qIHN0cnVjdCBsaXN0X2hlYWQgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rcmVmLmhcdTAwM2UgICAvKiBzdHJ1Y3Qga3JlZiAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2UgIC8qIHN0cnVjdCBtdXRleCAqL1xuKyNpbmNsdWRlIFx1MDAzY25ldC9uZXRfbmFtZXNwYWNlLmhcdTAwM2UgLyogc3RydWN0IG5ldCAqL1xuIFxuICNkZWZpbmUgQ09ORklHRlNfSVRFTV9OQU1FX0xFTlx0MjBcbiBcbkBAIC0yMjYsOCArMjI3LDEzIEBAIHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHtcbiB9O1xuIFxuIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0ge1xuK1x0c3RydWN0IGxpc3RfaGVhZFx0c3VfbGluaztcbiBcdHN0cnVjdCBjb25maWdfZ3JvdXBcdHN1X2dyb3VwO1xuIFx0c3RydWN0IG11dGV4XHRcdHN1X211dGV4O1xuK1x0aW50ICgqZmlsbF9zdWJzeXN0ZW0pKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cyxcbitcdFx0XHQgICAgICBzdHJ1Y3QgbmV0ICpuZXRfbnMpO1xuK1x0dm9pZCAoKmNsZWFyX3N1YnN5c3RlbSkoc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzLFxuK1x0XHRcdFx0c3RydWN0IG5ldCAqbmV0X25zKTtcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqdG9fY29uZmlnZnNfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKVxuQEAgLTI1Miw2ICsyNTgsOCBAQCBjb25maWdmc19yZWdpc3Rlcl9kZWZhdWx0X2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKnBhcmVudF9ncm91cCxcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICppdGVtX3R5cGUpO1xuIHZvaWQgY29uZmlnZnNfdW5yZWdpc3Rlcl9kZWZhdWx0X2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKTtcbiBcbitzdHJ1Y3QgbmV0ICpjb25maWdmc19uc19mcm9tX2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKTtcbitcbiAvKiBUaGVzZSBmdW5jdGlvbnMgY2FuIHNsZWVwIGFuZCBjYW4gYWxsb2Mgd2l0aCBHRlBfS0VSTkVMICovXG4gLyogV0FSTklORzogVGhlc2UgY2Fubm90IGJlIGNhbGxlZCB1bmRlcm5lYXRoIGNvbmZpZ2ZzIGNhbGxiYWNrcyEhICovXG4gaW50IGNvbmZpZ2ZzX2RlcGVuZF9pdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cyxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vdW50LmggYi9pbmNsdWRlL2xpbnV4L21vdW50LmhcbmluZGV4IGFjZmU3ZWY4NmExYjNmLi43ZTdlN2Q2NmMzMDI0YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW91bnQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tb3VudC5oXG5AQCAtNzUsNiArNzUsNyBAQCBleHRlcm4gdm9pZCBtbnRfZHJvcF93cml0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKTtcbiBleHRlcm4gdm9pZCBtbnRwdXQoc3RydWN0IHZmc21vdW50ICptbnQpO1xuIGV4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKm1udGdldChzdHJ1Y3QgdmZzbW91bnQgKm1udCk7XG4gZXh0ZXJuIHZvaWQgbW50X21ha2Vfc2hvcnR0ZXJtKHN0cnVjdCB2ZnNtb3VudCAqbW50KTtcbitleHRlcm4gc3RydWN0IHZmc21vdW50ICptbnRfY2xvbmVfZGlyZWN0KHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIGV4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKm1udF9jbG9uZV9pbnRlcm5hbChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCk7XG4gZXh0ZXJuIGJvb2wgX19tbnRfaXNfcmVhZG9ubHkoY29uc3Qgc3RydWN0IHZmc21vdW50ICptbnQpO1xuIGV4dGVybiBib29sIG1udF9tYXlfc3VpZChzdHJ1Y3QgdmZzbW91bnQgKm1udCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxMDoxMDoxNS4zNDE0MDU2MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNjYxODcyNTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgRnV6emluZyBJbXBhY3Qgb2YgdGhpcyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYSBub24tdHJpdmlhbCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsLCBhbmQgdGhlcmVmb3JlLCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYWRkaW5nIG5ldHdvcmsgbmFtZXNwYWNlIHN1cHBvcnQgdG8gTlZNZS1vRiB0YXJnZXQgYW5kIGNvbmZpZ2ZzLiBUaGlzIGlzbid0IGEgbWlub3IgdHdlYWs7IHRoaXMgZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IHRoZXNlIHN1YnN5c3RlbXMgaW50ZXJhY3QgYW5kIHRoZWlyIHBvdGVudGlhbCBmb3IgZXhwb3N1cmUuXG5cblNwZWNpZmljYWxseSwgaXQncyB0aGUgbW9kaWZpY2F0aW9uIG9mIGBkcml2ZXJzL252bWUvdGFyZ2V0L2AgYW5kIGBmcy9jb25maWdmcy9gIHRoYXQncyB0aGUgcmVkIGZsYWcuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYG5ldF9uc2AgaW50byBgc3RydWN0IG52bWV0X3BvcnRgIGFuZCBgc3RydWN0IG52bWV0X3N1YnN5c2AgaXMgYSBtYWpvciBzdHJ1Y3R1cmFsIHNoaWZ0LiBUaGUgc3dpdGNoIHRvIFhBcnJheXMgKGBudm1ldF9wb3J0c194YWAsIGBudm1ldF9kaXNjX3hhYCwgYGNvbmZpZ2ZzX3N1cGVyX3hhYCkgaW5kZXhlZCBieSBgbnNfaWRgIHVuZGVyc2NvcmVzIHRoZSBjb3JlIGFyY2hpdGVjdHVyYWwgY2hhbmdlLiBUaGlzIGFsc28gaW5jbHVkZXMgdGhlIG5ldyBgY29uZmlnZnNfbnNfZnJvbV9ncm91cCgpYCBmdW5jdGlvbi4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2UgdG8gYGZzL25hbWVzcGFjZS5jYCB0byBhZGQgYG1udF9jbG9uZV9kaXJlY3QoKWAgZm9yIG5hbWVzcGFjZSBjbG9uaW5nIGlzIHNpZ25pZmljYW50LlxuXG5UaGUgcmVhY2hhYmlsaXR5IGlzIGEgY3JpdGljYWwgY29uc2lkZXJhdGlvbi4gVGhpcyBjb2RlLCBhZmZlY3RpbmcgYm90aCBgZnMvY29uZmlnZnMvYCBhbmQgZHJpdmVycywgaXMgdmVyeSBsaWtlbHkgdG91Y2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0UgYW5kIFFFTVUsIG1ha2luZyBpdCBldmVuIG1vcmUgcmVsZXZhbnQgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBJdCBkaXJlY3RseSBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYywgbWFraW5nIGl0IHJpcGUgZm9yIGZ1enppbmcuIFRodXMsIGBXb3J0aEZ1enppbmc9dHJ1ZWAgaXMgdGhlIHJpZ2h0IGNvbmNsdXNpb24uXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSB3b3J0aCBmb2N1c2luZyBvbiBmb3IgZnV6emluZy4gSSd2ZSBjb21waWxlZCBhIGxpc3Q6XG5cbi0gYG52bWV0X2dldF9uc19pZGBcbi0gYG52bWV0X2dldF9wb3J0X2xpc3RgXG4tIGBudm1ldF9hZGRfcG9ydF9saXN0YFxuLSBgbnZtZXRfZGVsX3BvcnRfbGlzdGBcbi0gYG52bWV0X3N1YnN5c19tYWtlYFxuLSBgbnZtZXRfcG9ydHNfbWFrZWBcbi0gYG52bWV0X3Jvb3RfZGlzY292ZXJ5X25xbl9zaG93YFxuLSBgbnZtZXRfcm9vdF9kaXNjb3ZlcnlfbnFuX3N0b3JlYFxuLSBgbnZtZXRfY29uZmlnZnNfZmlsbF9zdWJzeXN0ZW1gXG4tIGBudm1ldF9jb25maWdmc19jbGVhcl9zdWJzeXN0ZW1gXG4tIGBudm1ldF9nZXRfZGlzY19zdWJzeXNgXG4tIGBudm1ldF9hZGRfZGlzY19zdWJzeXNgXG4tIGBudm1ldF9kZWxfZGlzY19zdWJzeXNgXG4tIGBudm1ldF9wb3J0X2Rpc2NfY2hhbmdlZGBcbi0gYG52bWV0X3N1YnN5c19kaXNjX2NoYW5nZWRgXG4tIGBudm1ldF9leGVjdXRlX2Rpc2NfZ2V0X2xvZ19wYWdlYFxuLSBgbnZtZV9sb29wX2ZpbmRfcG9ydGBcbi0gYG52bWV0X3JkbWFfZW5hYmxlX3BvcnRgXG4tIGBudm1ldF9yZG1hX2FkZF9wb3J0YFxuLSBgbnZtZXRfdGNwX2FkZF9wb3J0YFxuLSBgY29uZmlnZnNfbGlua19yb290YFxuLSBgY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtYFxuLSBgY29uZmlnZnNfbGlua19zdWJzeXN0ZW1zYFxuLSBgY29uZmlnZnNfdW5saW5rX3Jvb3RgXG4tIGBjb25maWdmc191bmxpbmtfc3Vic3lzdGVtc2Bcbi0gYGNvbmZpZ2ZzX3VucmVnaXN0ZXJfc3Vic3lzdGVtYFxuLSBgY29uZmlnZnNfZ2V0X3N1cGVyX2luZm9gXG4tIGBjb25maWdmc19wdXRfc3VwZXJfaW5mb2Bcbi0gYGNvbmZpZ2ZzX2ZpbGxfc3VwZXJgXG4tIGBjb25maWdmc19nZXRfdHJlZWBcbi0gYGNvbmZpZ2ZzX2tpbGxfc2JgXG4tIGBjb25maWdmc19waW5fZnNgXG4tIGBjb25maWdmc19yZWxlYXNlX2ZzYFxuLSBgY29uZmlnZnNfbnNfZnJvbV9ncm91cGBcbi0gYG1udF9jbG9uZV9kaXJlY3RgXG5cbkZyb20gdGhpcyBsaXN0LCBzb21lIGtleSBzeW1ib2xzIGp1bXAgb3V0IGFzIHBhcnRpY3VsYXJseSByZWxldmFudDogYGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbWAsIGBjb25maWdmc19saW5rX3N1YnN5c3RlbXNgLCBgY29uZmlnZnNfdW5saW5rX3N1YnN5c3RlbXNgLCBgY29uZmlnZnNfZ2V0X3N1cGVyX2luZm9gLCBgY29uZmlnZnNfZmlsbF9zdXBlcmAsIGBudm1ldF9jb25maWdmc19maWxsX3N1YnN5c3RlbWAsIGBudm1ldF9hZGRfZGlzY19zdWJzeXNgLCBgbnZtZXRfcG9ydHNfbWFrZWAsIGFuZCBgbnZtZXRfc3Vic3lzX21ha2VgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGZvciB0aGUgbmV0d29yayBuYW1lc3BhY2UgaW50ZWdyYXRpb24gYW5kIHN1YnN5c3RlbSBtYW5hZ2VtZW50LlxuXG5GaW5hbGx5LCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMuIE9idmlvdXNseSwgYENPTkZJR19DT05GSUdGU19GU2AgZm9yIGNvbmZpZ2ZzLCBhbmQgYENPTkZJR19OVk1FX1RBUkdFVGAgZm9yIE5WTWUgdGFyZ2V0IGFyZSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGVzLiBXZSBhbHNvIHNob3VsZCBpbnZlc3RpZ2F0ZSBgQ09ORklHX05WTUVfVEFSR0VUX0xPT1BgLCBgQ09ORklHX05WTUVfVEFSR0VUX1RDUGAsIGFuZCBgQ09ORklHX05WTUVfVEFSR0VUX1JETUFgIGFzIHRoZXkgbWlnaHQgb3BlbiBhZGRpdGlvbmFsIGF0dGFjayBzdXJmYWNlcyB0aHJvdWdoIHRoZSBkaWZmZXJlbnQgdHJhbnNwb3J0cy4gTGV0J3MgZGVsdmUgaW50byBgZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnYCBhbmQgYGZzL2NvbmZpZ2ZzL0tjb25maWdgIHRvIGNvbmZpcm0gYW5kIGlkZW50aWZ5IGFueSBvdGhlciByZWxldmFudCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTM4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTA6MTA6MjguMDAzMjgwMjE3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTYyMDg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvY29uZmlnZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NvbmZpZ2ZzL2Rpci5jPTk4ND1zdGF0aWMgaW50IGNvbmZpZ2ZzX2R1bXAoc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2QsIGludCBsZXZlbClcXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jLTEwMjYtICogc3Vic3lzdGVtIGlzbid0IHJlZ2lzdGVyZWQsIG9yIHdoZW4gY29uZmlnZnMgaXMgbG9hZGluZyBvciB1bmxvYWRpbmcuXFxuZnMvY29uZmlnZnMvZGlyLmM6MTAyNzogKiBKdXN0IGxpa2UgY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtKCkuICBTbyB3ZSB0YWtlIHRoZSBzYW1lXFxuZnMvY29uZmlnZnMvZGlyLmMtMTAyOC0gKiBwcmVjYXV0aW9ucy4gIFdlIHBpbiB0aGUgZmlsZXN5c3RlbS4gIFdlIGxvY2sgY29uZmlnZnNfZGlyZW50X2xvY2suXFxuLS1cXG5mcy9jb25maWdmcy9kaXIuYz0xODY0PXN0YXRpYyBpbnQgY29uZmlnZnNfbGlua19yb290KHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICAqaW5mbyxcXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jLTE5MTgtXFxuZnMvY29uZmlnZnMvZGlyLmM6MTkxOTppbnQgY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cylcXG5mcy9jb25maWdmcy9kaXIuYy0xOTIwLXtcXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jPTIwODU9dm9pZCBjb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpXFxuLS1cXG5mcy9jb25maWdmcy9kaXIuYy0yMTA4LVxcbmZzL2NvbmZpZ2ZzL2Rpci5jOjIxMDk6RVhQT1JUX1NZTUJPTChjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0pO1xcbmZzL2NvbmZpZ2ZzL2Rpci5jLTIxMTAtRVhQT1JUX1NZTUJPTChjb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDEwOjEwOjI4LjQ5ODkwNzE1N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTQ3MDEwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIE5WTWUgVGFyZ2V0IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIHN0cmFpZ2h0IGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBgZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnYC4gV2UncmUgb2J2aW91c2x5IGNvbmNlcm5lZCB3aXRoIGVuYWJsaW5nIG9yIGNvbmZpZ3VyaW5nIHRoZSBOVk1lIHRhcmdldCBmdW5jdGlvbmFsaXR5LCBhbmQgdGhhdCBLY29uZmlnIGZpbGUgaXMgdGhlICpjYW5vbmljYWwqIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZm9yIHRoZSBjb250cm9sbGluZyBidWlsZCBvcHRpb25zLiBTcGVjaWZpY2FsbHksIEknbSBhZnRlciB0aGUgYE5WTUVfVEFSR0VUYCBzeW1ib2wuIEknZCBleHBlY3QgaXQgdG8gYmUgdGhlIG1haW4gc3dpdGNoLCB0aGUgZnVuZGFtZW50YWwgZmxhZy4gRG9lcyBpdCBleGlzdD8gV2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgZG9lcyBpdCBkZXBlbmQgb24gb3IgaW50ZXJhY3Qgd2l0aD8gQXJlIHRoZXJlIHJlbGF0ZWQgc3ltYm9scyB0aGF0IG1pZ2h0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgaXQgdG8gZnVuY3Rpb24gY29ycmVjdGx5PyBBcmUgdGhlcmUgbW9yZSBncmFudWxhciBvcHRpb25zIEkgbmVlZCB0byBrbm93IGFib3V0IHRvIGNvbmZpZ3VyZSB0aGUgYmVoYXZpb3I/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgb24gdGhlIHN5c3RlbSwgYW5kIHRoYXQgS2NvbmZpZyBmaWxlIHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGluc2lnaHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI4MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDEwOjEwOjMyLjM5MzYxMDkwOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTEzMjA5MjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVk1FX1RBUkdFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL252bWUvdGFyZ2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMi1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6Mzpjb25maWcgTlZNRV9UQVJHRVRcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBUYXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xOS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6MjA6Y29uZmlnIE5WTUVfVEFSR0VUX0RFQlVHRlNcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMjEtICAgICAgICBib29sIFxcXCJOVk1lIFRhcmdldCBkZWJ1Z2ZzIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMjgtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjI5OmNvbmZpZyBOVk1FX1RBUkdFVF9QQVNTVEhSVVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJOVk1lIFRhcmdldCBQYXNzdGhyb3VnaCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTQwLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo0MTpjb25maWcgTlZNRV9UQVJHRVRfTE9PUFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy00Mi1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy01MS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NTI6Y29uZmlnIE5WTUVfVEFSR0VUX1JETUFcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIFJETUEgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNjItXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjYzOmNvbmZpZyBOVk1FX1RBUkdFVF9GQ1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy02NC1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgRkMgdGFyZ2V0IGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy03My1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NzQ6Y29uZmlnIE5WTUVfVEFSR0VUX0ZDTE9PUFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy03NS1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgRkMgVHJhbnNwb3J0IExvb3BiYWNrIFRlc3QgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTg2LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo4Nzpjb25maWcgTlZNRV9UQVJHRVRfVENQXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTg4LVxcdHRyaXN0YXRlIFxcXCJOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctOTYtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjk3OmNvbmZpZyBOVk1FX1RBUkdFVF9UQ1BfVExTXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTk4LVxcdGJvb2wgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIFRDUCB0YXJnZXQgVExTIGVuY3J5cHRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMDktXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjExMDpjb25maWcgTlZNRV9UQVJHRVRfQVVUSFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgSW4tYmFuZCBBdXRoZW50aWNhdGlvbiBpbiB0YXJnZXQgc2lkZVxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMTktXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjEyMDpjb25maWcgTlZNRV9UQVJHRVRfQVVUSF9ERUJVR1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMjEtXFx0Ym9vbCBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgSW4tYmFuZCBBdXRoZW50aWNhdGlvbiBkZWJ1ZyBtZXNzYWdlc1xcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMjgtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjEyOTpjb25maWcgTlZNRV9UQVJHRVRfUENJX0VQRlxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMzAtXFx0dHJpc3RhdGUgXFxcIk5WTWUgUENJIEVuZHBvaW50IEZ1bmN0aW9uIHRhcmdldCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxMDoxMDozNC41MDY4Mjg3NzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTk5ODU3ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIE5WTWUgVGFyZ2V0KipcblxuT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgY29yZSBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UgZm9yIHRoaXMgTlZNZSB0YXJnZXQgc2V0dXAuIEl0IGxvb2tzIGxpa2UgYENPTkZJR0ZTX0ZTYCBpcyB0aGUgYWJzb2x1dGUgbXVzdC1oYXZlIGhlcmUsIHRoYXQncyB0aGUgZm91bmRhdGlvbiB3ZSdyZSBidWlsZGluZyBvbi4gQW5kIG9idmlvdXNseSwgYE5WTUVfVEFSR0VUYCBpdHNlbGYgbmVlZHMgdG8gYmUgZW5hYmxlZC5cblxuQmV5b25kIHRoZSBjb3JlLCBpdCB3b3VsZCBiZSBzbWFydCB0byBlbmFibGUgdGhlIHRyYW5zcG9ydC1zcGVjaWZpYyBvcHRpb25zIGZvciB0ZXN0aW5nLiBgTlZNRV9UQVJHRVRfTE9PUGAsIGBOVk1FX1RBUkdFVF9UQ1BgLCBhbmQgYE5WTUVfVEFSR0VUX1JETUFgIGFyZSBhbGwgZ29vZCBjYW5kaWRhdGVzLiBIYXZpbmcgdGhvc2Ugb3B0aW9ucyB3aWxsIGFsbG93IG1lIHRvIHByb3Blcmx5IGV4ZXJjaXNlIHRoZSB0cmFuc3BvcnQtc3BlY2lmaWMgY29kZS5cblxuTGV0J3Mgc3RhcnQgYnkgZG91YmxlLWNoZWNraW5nIGBDT05GSUdGU19GU2AuIFRoYXQncyB0aGUgY3JpdGljYWwgc3RhcnRpbmcgcG9pbnQsIGFuZCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzMTgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxMDoxMDozNy43MDY2ODg3NTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1Njc2NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT05GSUdGU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY29uZmlnZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcXG5mcy9jb25maWdmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxMDoxMDozNy44OTIzNzI5NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMTI2MDY0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBUaGlua2luZyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEZpcnN0IHRoaW5nJ3MgZmlyc3Q6IEkgbmVlZCB0byBleHBsaWNpdGx5IHNldCBgRW5hYmxlQ29uZmlnc2AgdG8gdGhlIHJlbGV2YW50IHRhcmdldCBjb25maWd1cmF0aW9uczogYFtcIkNPTkZJR0ZTX0ZTXCIsIFwiTlZNRV9UQVJHRVRcIiwgXCJOVk1FX1RBUkdFVF9MT09QXCIsIFwiTlZNRV9UQVJHRVRfVENQXCIsIFwiTlZNRV9UQVJHRVRfUkRNQVwiXWAuIFRoYXQgZW5zdXJlcyB0aG9zZSBtb2R1bGVzIGFyZSBwcm9wZXJseSBlbmFibGVkIGZvciB0aGlzIHByb2Nlc3MuXG5cbk5vdywgbGV0J3MgdHVybiBteSBhdHRlbnRpb24gdG8gdGhlIGNvcmUgZnVuY3Rpb25zLiBJIHNob3VsZCBleGFtaW5lIGBGb2N1c1N5bWJvbHNgIHRvIGVuc3VyZSBJIGhhdmUgYWxsIHRoZSBrZXkgcGxheWVycy4gSG1tLCBsZXQncyBzZWUuIEkndmUgZ290IGEgZ29vZCBzdGFydCB3aXRoOlxuYGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbWBcbmBjb25maWdmc19saW5rX3N1YnN5c3RlbXNgXG5gY29uZmlnZnNfdW5saW5rX3N1YnN5c3RlbXNgXG5gY29uZmlnZnNfZ2V0X3N1cGVyX2luZm9gXG5gY29uZmlnZnNfZmlsbF9zdXBlcmBcbmBudm1ldF9jb25maWdmc19maWxsX3N1YnN5c3RlbWBcbmBudm1ldF9hZGRfZGlzY19zdWJzeXNgXG5gbnZtZXRfcG9ydHNfbWFrZWBcbmBudm1ldF9zdWJzeXNfbWFrZWBcblxuVGhhdCdzIGEgc29saWQgZm91bmRhdGlvbiBmb3IgbWFuYWdpbmcgdGhlIGZpbGVzeXN0ZW0gYW5kIE5WTWUgc3Vic3lzdGVtcy5cblxuQWxyaWdodCwgYnV0IEkgY2FuJ3QgYmUgdG9vIGhhc3R5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy4gTGV0IG1lIGV4cGxvcmUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtYXkgYmUgdXNlZnVsLiBPa2F5LCBsZXQncyBzZWU6XG5gbnZtZXRfZ2V0X3BvcnRfbGlzdGBcbmBudm1ldF9hZGRfcG9ydF9saXN0YFxuYG52bWV0X2RlbF9wb3J0X2xpc3RgXG5gbnZtZXRfcm9vdF9kaXNjb3ZlcnlfbnFuX3N0b3JlYFxuYG52bWV0X2V4ZWN1dGVfZGlzY19nZXRfbG9nX3BhZ2VgXG5cblRob3NlIGxvb2sgcHJvbWlzaW5nLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgcG9ydCBtYW5hZ2VtZW50IGFuZCBkaXNjb3ZlcnkuIFRoZXkgZGVmaW5pdGVseSBuZWVkIHRvIGJlIGluY2x1ZGVkLiBJJ2xsIGFkZCB0aGVtIHRvIGBGb2N1c1N5bWJvbHNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgbW9yZSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgdGhlIHN5c3RlbSdzIGlubmVyIHdvcmtpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzY2MiwiT3V0cHV0VG9rZW5zIjoyNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTA6MTA6NDYuMTA0OTgxNzI2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNDM4NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT05GSUdGU19GU1wiLFxuICAgIFwiTlZNRV9UQVJHRVRcIixcbiAgICBcIk5WTUVfVEFSR0VUX0xPT1BcIixcbiAgICBcIk5WTUVfVEFSR0VUX1RDUFwiLFxuICAgIFwiTlZNRV9UQVJHRVRfUkRNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbVwiLFxuICAgIFwiY29uZmlnZnNfbGlua19zdWJzeXN0ZW1zXCIsXG4gICAgXCJjb25maWdmc191bmxpbmtfc3Vic3lzdGVtc1wiLFxuICAgIFwiY29uZmlnZnNfZ2V0X3N1cGVyX2luZm9cIixcbiAgICBcImNvbmZpZ2ZzX2ZpbGxfc3VwZXJcIixcbiAgICBcIm52bWV0X2NvbmZpZ2ZzX2ZpbGxfc3Vic3lzdGVtXCIsXG4gICAgXCJudm1ldF9hZGRfZGlzY19zdWJzeXNcIixcbiAgICBcIm52bWV0X3BvcnRzX21ha2VcIixcbiAgICBcIm52bWV0X3N1YnN5c19tYWtlXCIsXG4gICAgXCJudm1ldF9hZGRfcG9ydF9saXN0XCIsXG4gICAgXCJudm1ldF9kZWxfcG9ydF9saXN0XCIsXG4gICAgXCJudm1ldF9yb290X2Rpc2NvdmVyeV9ucW5fc3RvcmVcIixcbiAgICBcIm52bWV0X2V4ZWN1dGVfZGlzY19nZXRfbG9nX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldHdvcmsgbmFtZXNwYWNlIHN1cHBvcnQgZm9yIGNvbmZpZ2ZzIGFuZCB0aGUgTlZNZS1vRiB0YXJnZXQuIEl0IG1vZGlmaWVzIGNvcmUgY29uZmlnZnMgbG9naWMgdG8gc3VwcG9ydCBtdWx0aXBsZSBzdXBlcmJsb2NrcyBwZXIgbmV0d29yayBuYW1lc3BhY2UgYW5kIHVwZGF0ZXMgdGhlIE5WTWUgdGFyZ2V0IHRvIHVzZSBwZXItbmFtZXNwYWNlIGRpc2NvdmVyeSBzdWJzeXN0ZW1zIGFuZCBwb3J0cy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09ORklHRlNfRlNcIixcbiAgICBcIk5WTUVfVEFSR0VUXCIsXG4gICAgXCJOVk1FX1RBUkdFVF9MT09QXCIsXG4gICAgXCJOVk1FX1RBUkdFVF9UQ1BcIixcbiAgICBcIk5WTUVfVEFSR0VUX1JETUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW1cIixcbiAgICBcImNvbmZpZ2ZzX2xpbmtfc3Vic3lzdGVtc1wiLFxuICAgIFwiY29uZmlnZnNfdW5saW5rX3N1YnN5c3RlbXNcIixcbiAgICBcImNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvXCIsXG4gICAgXCJjb25maWdmc19maWxsX3N1cGVyXCIsXG4gICAgXCJudm1ldF9jb25maWdmc19maWxsX3N1YnN5c3RlbVwiLFxuICAgIFwibnZtZXRfYWRkX2Rpc2Nfc3Vic3lzXCIsXG4gICAgXCJudm1ldF9wb3J0c19tYWtlXCIsXG4gICAgXCJudm1ldF9zdWJzeXNfbWFrZVwiLFxuICAgIFwibnZtZXRfYWRkX3BvcnRfbGlzdFwiLFxuICAgIFwibnZtZXRfZGVsX3BvcnRfbGlzdFwiLFxuICAgIFwibnZtZXRfcm9vdF9kaXNjb3ZlcnlfbnFuX3N0b3JlXCIsXG4gICAgXCJudm1ldF9leGVjdXRlX2Rpc2NfZ2V0X2xvZ19wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXR3b3JrIG5hbWVzcGFjZSBzdXBwb3J0IGZvciBjb25maWdmcyBhbmQgdGhlIE5WTWUtb0YgdGFyZ2V0LiBJdCBtb2RpZmllcyBjb3JlIGNvbmZpZ2ZzIGxvZ2ljIHRvIHN1cHBvcnQgbXVsdGlwbGUgc3VwZXJibG9ja3MgcGVyIG5ldHdvcmsgbmFtZXNwYWNlIGFuZCB1cGRhdGVzIHRoZSBOVk1lIHRhcmdldCB0byB1c2UgcGVyLW5hbWVzcGFjZSBkaXNjb3Zlcnkgc3Vic3lzdGVtcyBhbmQgcG9ydHMuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGtlcm5lbCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bbzh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-23 10:02:28 +0000 UTC FinishedAt: 2026-06-23 10:10:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "66affa37cfac0aec061cc4bcf4a065b0c52f7e19", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CONFIGFS_FS", "NVME_TARGET", "NVME_TARGET_LOOP", "NVME_TARGET_TCP", "NVME_TARGET_RDMA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "66affa37cfac0aec061cc4bcf4a065b0c52f7e19", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CONFIGFS_FS", "NVME_TARGET", "NVME_TARGET_LOOP", "NVME_TARGET_TCP", "NVME_TARGET_RDMA" ], "series_id": "f460be5a-d520-4bc1-9cfb-6492f841629b" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "configfs_register_subsystem", "configfs_link_subsystems", "configfs_unlink_subsystems", "configfs_get_super_info", "configfs_fill_super", "nvmet_configfs_fill_subsystem", "nvmet_add_disc_subsys", "nvmet_ports_make", "nvmet_subsys_make", "nvmet_add_port_list", "nvmet_del_port_list", "nvmet_root_discovery_nqn_store", "nvmet_execute_disc_get_log_page" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "773be3e5-366e-482f-8da3-9a5abb71b7a8" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDEwOjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUX0xPT1AmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVRfVENQJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUX1JETUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0mIzM0OywKICAgICYjMzQ7Y29uZmlnZnNfbGlua19zdWJzeXN0ZW1zJiMzNDssCiAgICAmIzM0O2NvbmZpZ2ZzX3VubGlua19zdWJzeXN0ZW1zJiMzNDssCiAgICAmIzM0O2NvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvJiMzNDssCiAgICAmIzM0O2NvbmZpZ2ZzX2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7bnZtZXRfY29uZmlnZnNfZmlsbF9zdWJzeXN0ZW0mIzM0OywKICAgICYjMzQ7bnZtZXRfYWRkX2Rpc2Nfc3Vic3lzJiMzNDssCiAgICAmIzM0O252bWV0X3BvcnRzX21ha2UmIzM0OywKICAgICYjMzQ7bnZtZXRfc3Vic3lzX21ha2UmIzM0OywKICAgICYjMzQ7bnZtZXRfYWRkX3BvcnRfbGlzdCYjMzQ7LAogICAgJiMzNDtudm1ldF9kZWxfcG9ydF9saXN0JiMzNDssCiAgICAmIzM0O252bWV0X3Jvb3RfZGlzY292ZXJ5X25xbl9zdG9yZSYjMzQ7LAogICAgJiMzNDtudm1ldF9leGVjdXRlX2Rpc2NfZ2V0X2xvZ19wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV0d29yayBuYW1lc3BhY2Ugc3VwcG9ydCBmb3IgY29uZmlnZnMgYW5kIHRoZSBOVk1lLW9GIHRhcmdldC4gSXQgbW9kaWZpZXMgY29yZSBjb25maWdmcyBsb2dpYyB0byBzdXBwb3J0IG11bHRpcGxlIHN1cGVyYmxvY2tzIHBlciBuZXR3b3JrIG5hbWVzcGFjZSBhbmQgdXBkYXRlcyB0aGUgTlZNZSB0YXJnZXQgdG8gdXNlIHBlci1uYW1lc3BhY2UgZGlzY292ZXJ5IHN1YnN5c3RlbXMgYW5kIHBvcnRzLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxMDoxMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDAxNTY5MWZiYTM3Y2MyYjg0YjJkYmYyNGJkNzY5MmI1NWY0YTYyYzRcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIEp1biAyMyAxMDoxMDoxMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMgYi9kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmNcbmluZGV4IGI4OGY4OTdmMDZlMjVlLi43NjM2YWMzNzczYjQwMCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jXG5AQCAtMjUsOCAmIzQzOzI1LDcgQEBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgbnZtZXRfaG9zdF90eXBlO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBudm1ldF9zdWJzeXNfdHlwZTtcbiBcbi1zdGF0aWMgTElTVF9IRUFEKG52bWV0X3BvcnRzX2xpc3QpO1xuLXN0cnVjdCBsaXN0X2hlYWQgKm52bWV0X3BvcnRzID0gXHUwMDI2bnZtZXRfcG9ydHNfbGlzdDtcbiYjNDM7c3RhdGljIERFRklORV9YQVJSQVkobnZtZXRfcG9ydHNfeGEpO1xuIFxuIHN0cnVjdCBudm1ldF90eXBlX25hbWVfbWFwIHtcbiBcdHU4XHRcdHR5cGU7XG5AQCAtNTEsNiAmIzQzOzUwLDcwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbnZtZXRfdHlwZV9uYW1lX21hcCBudm1ldF9hZGRyX2ZhbWlseVtdID0ge1xuIFx0eyBOVk1GX0FERFJfRkFNSUxZX0xPT1AsXHRcJiMzNDtsb29wXCYjMzQ7IH0sXG4gfTtcbiBcbiYjNDM7dTY0IG52bWV0X2dldF9uc19pZChzdHJ1Y3QgbmV0ICpuZXRfbnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbnNfY29tbW9uICpucztcbiYjNDM7XG4mIzQzO1x0aWYgKCFuZXRfbnMpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRucyA9IHRvX25zX2NvbW1vbihuZXRfbnMpO1xuJiM0MztcdHJldHVybiBuZXRfbnMgPT0gXHUwMDI2aW5pdF9uZXQgPyAwIDogbnMtXHUwMDNlbnNfaWQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0cnVjdCBsaXN0X2hlYWQgKm52bWV0X2dldF9wb3J0X2xpc3Qoc3RydWN0IG5ldCAqbmV0X25zKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZCAqcG9ydF9saXN0O1xuJiM0MztcdHU2NCBuc19pZCA9IG52bWV0X2dldF9uc19pZChuZXRfbnMpO1xuJiM0MztcbiYjNDM7XHRwb3J0X2xpc3QgPSB4YV9sb2FkKFx1MDAyNm52bWV0X3BvcnRzX3hhLCBuc19pZCk7XG4mIzQzO1x0cmV0dXJuIHBvcnRfbGlzdDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBudm1ldF9hZGRfcG9ydF9saXN0KHN0cnVjdCBudm1ldF9wb3J0ICpwKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IG5zX2lkID0gbnZtZXRfZ2V0X25zX2lkKHAtXHUwMDNlbmV0X25zKTtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3J0X2xpc3Q7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4mIzQzO1xuJiM0MztcdHhhX2xvY2soXHUwMDI2bnZtZXRfcG9ydHNfeGEpO1xuJiM0MztcdHBvcnRfbGlzdCA9IHhhX2xvYWQoXHUwMDI2bnZtZXRfcG9ydHNfeGEsIG5zX2lkKTtcbiYjNDM7XHRpZiAoIXBvcnRfbGlzdCkge1xuJiM0MztcdFx0cG9ydF9saXN0ID0ga3phbGxvY19vYmooKnBvcnRfbGlzdCk7XG4mIzQzO1x0XHRpZiAoIXBvcnRfbGlzdCkge1xuJiM0MztcdFx0XHRlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4mIzQzO1x0XHR9XG4mIzQzO1x0XHRJTklUX0xJU1RfSEVBRChwb3J0X2xpc3QpO1xuJiM0MztcdFx0ZXJyID0gX194YV9pbnNlcnQoXHUwMDI2bnZtZXRfcG9ydHNfeGEsIG5zX2lkLFxuJiM0MztcdFx0XHRcdCAgcG9ydF9saXN0LCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRcdGlmIChlcnIgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0a2ZyZWUocG9ydF9saXN0KTtcbiYjNDM7XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRsaXN0X2FkZChcdTAwMjZwLVx1MDAzZWdsb2JhbF9lbnRyeSwgcG9ydF9saXN0KTtcbiYjNDM7b3V0X3VubG9jazpcbiYjNDM7XHR4YV91bmxvY2soXHUwMDI2bnZtZXRfcG9ydHNfeGEpO1xuJiM0MztcdHJldHVybiBlcnI7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG52bWV0X2RlbF9wb3J0X2xpc3Qoc3RydWN0IG52bWV0X3BvcnQgKnApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3J0X2xpc3Q7XG4mIzQzO1x0dTY0IG5zX2lkID0gbnZtZXRfZ2V0X25zX2lkKHAtXHUwMDNlbmV0X25zKTtcbiYjNDM7XG4mIzQzO1x0eGFfbG9jayhcdTAwMjZudm1ldF9wb3J0c194YSk7XG4mIzQzO1x0cG9ydF9saXN0ID0geGFfbG9hZChcdTAwMjZudm1ldF9wb3J0c194YSwgbnNfaWQpO1xuJiM0MztcdGlmICghV0FSTl9PTighcG9ydF9saXN0KSkge1xuJiM0MztcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZwLVx1MDAzZWdsb2JhbF9lbnRyeSk7XG4mIzQzO1x0XHRpZiAobGlzdF9lbXB0eShwb3J0X2xpc3QpKSB7XG4mIzQzO1x0XHRcdF9feGFfZXJhc2UoXHUwMDI2bnZtZXRfcG9ydHNfeGEsIG5zX2lkKTtcbiYjNDM7XHRcdFx0a2ZyZWUocG9ydF9saXN0KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0eGFfdW5sb2NrKFx1MDAyNm52bWV0X3BvcnRzX3hhKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgYm9vbCBudm1ldF9pc19wb3J0X2VuYWJsZWQoc3RydWN0IG52bWV0X3BvcnQgKnAsIGNvbnN0IGNoYXIgKmNhbGxlcilcbiB7XG4gXHRpZiAocC1cdTAwM2VlbmFibGVkKVxuQEAgLTE3MTcsNiAmIzQzOzE3ODAsNyBAQCBzdGF0aWMgdm9pZCBudm1ldF9zdWJzeXNfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG4ge1xuIFx0c3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzID0gdG9fc3Vic3lzKGl0ZW0pO1xuIFxuJiM0MztcdGNvbmZpZ2ZzX3JlbW92ZV9kZWZhdWx0X2dyb3VwcyhcdTAwMjZzdWJzeXMtXHUwMDNlZ3JvdXApO1xuIFx0bnZtZXRfc3Vic3lzX2RlbF9jdHJscyhzdWJzeXMpO1xuIFx0bnZtZXRfc3Vic3lzX3B1dChzdWJzeXMpO1xuIH1cbkBAIC0xNzM0LDE5ICYjNDM7MTc5OCwyMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgbnZtZXRfc3Vic3lzX3R5cGUgPSB7XG4gc3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgKm52bWV0X3N1YnN5c19tYWtlKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxuIFx0XHRjb25zdCBjaGFyICpuYW1lKVxuIHtcbi1cdHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cztcbiYjNDM7XHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMsICpkaXNjX3N1YnN5cztcbiYjNDM7XHRzdHJ1Y3QgbmV0ICpuZXRfbnMgPSBjb25maWdmc19uc19mcm9tX2dyb3VwKGdyb3VwKTtcbiBcbiBcdGlmIChzeXNmc19zdHJlcShuYW1lLCBOVk1FX0RJU0NfU1VCU1lTX05BTUUpKSB7XG4gXHRcdHByX2VycihcJiMzNDtjYW4mIzM5O3QgY3JlYXRlIGRpc2NvdmVyeSBzdWJzeXN0ZW0gdGhyb3VnaCBjb25maWdmc1xcblwmIzM0Oyk7XG4gXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuIFx0fVxuIFxuLVx0aWYgKHN5c2ZzX3N0cmVxKG5hbWUsIG52bWV0X2Rpc2Nfc3Vic3lzLVx1MDAzZXN1YnN5c25xbikpIHtcbiYjNDM7XHRkaXNjX3N1YnN5cyA9IG52bWV0X2dldF9kaXNjX3N1YnN5cyhuZXRfbnMpO1xuJiM0MztcdGlmICghZGlzY19zdWJzeXMpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbiYjNDM7XHRpZiAoc3lzZnNfc3RyZXEobmFtZSwgZGlzY19zdWJzeXMtXHUwMDNlc3Vic3lzbnFuKSkge1xuIFx0XHRwcl9lcnIoXCYjMzQ7Y2FuJiMzOTt0IGNyZWF0ZSBzdWJzeXN0ZW0gdXNpbmcgdW5pcXVlIGRpc2NvdmVyeSBOUU5cXG5cJiMzNDspO1xuIFx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcbiBcdH1cbiBcbi1cdHN1YnN5cyA9IG52bWV0X3N1YnN5c19hbGxvYyhuYW1lLCBOVk1FX05RTl9OVk1FKTtcbiYjNDM7XHRzdWJzeXMgPSBudm1ldF9zdWJzeXNfYWxsb2MobmFtZSwgTlZNRV9OUU5fTlZNRSwgbmV0X25zKTtcbiBcdGlmIChJU19FUlIoc3Vic3lzKSlcbiBcdFx0cmV0dXJuIEVSUl9DQVNUKHN1YnN5cyk7XG4gXG5AQCAtMjAwNCw4ICYjNDM7MjA3Miw5IEBAIHN0YXRpYyB2b2lkIG52bWV0X3BvcnRfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG4gXG4gXHQvKiBMZXQgaW5mbGlnaHQgY29udHJvbGxlcnMgdGVhcmRvd24gY29tcGxldGUgKi9cbiBcdGZsdXNoX3dvcmtxdWV1ZShudm1ldF93cSk7XG4tXHRsaXN0X2RlbChcdTAwMjZwb3J0LVx1MDAzZWdsb2JhbF9lbnRyeSk7XG4mIzQzO1x0bnZtZXRfZGVsX3BvcnRfbGlzdChwb3J0KTtcbiBcbiYjNDM7XHRjb25maWdmc19yZW1vdmVfZGVmYXVsdF9ncm91cHMoXHUwMDI2cG9ydC1cdTAwM2Vncm91cCk7XG4gXHRrZXlfcHV0KHBvcnQtXHUwMDNla2V5cmluZyk7XG4gXHRrZnJlZShwb3J0LVx1MDAzZWFuYV9zdGF0ZSk7XG4gXHRrZnJlZShwb3J0KTtcbkBAIC0yMDU3LDYgJiM0MzsyMTI2LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwICpudm1ldF9wb3J0c19tYWtlKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLFxuIFx0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbiBcdH1cbiBcbiYjNDM7XHRwb3J0LVx1MDAzZW5ldF9ucyA9IGNvbmZpZ2ZzX25zX2Zyb21fZ3JvdXAoZ3JvdXApO1xuJiM0MztcdGlmICghcG9ydC1cdTAwM2VuZXRfbnMpXG4mIzQzO1x0XHRwb3J0LVx1MDAzZW5ldF9ucyA9IGdldF9uZXQoXHUwMDI2aW5pdF9uZXQpO1xuJiM0MztcbiBcdGlmIChJU19FTkFCTEVEKENPTkZJR19OVk1FX1RBUkdFVF9UQ1BfVExTKSBcdTAwMjZcdTAwMjYgbnZtZV9rZXlyaW5nX2lkKCkpIHtcbiBcdFx0cG9ydC1cdTAwM2VrZXlyaW5nID0ga2V5X2xvb2t1cChudm1lX2tleXJpbmdfaWQoKSk7XG4gXHRcdGlmIChJU19FUlIocG9ydC1cdTAwM2VrZXlyaW5nKSkge1xuQEAgLTIwNzIsNyAmIzQzOzIxNDUsNyBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbnZtZXRfcG9ydHNfbWFrZShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbiBcdFx0XHRwb3J0LVx1MDAzZWFuYV9zdGF0ZVtpXSA9IE5WTUVfQU5BX0lOQUNDRVNTSUJMRTtcbiBcdH1cbiBcbi1cdGxpc3RfYWRkKFx1MDAyNnBvcnQtXHUwMDNlZ2xvYmFsX2VudHJ5LCBcdTAwMjZudm1ldF9wb3J0c19saXN0KTtcbiYjNDM7XHRudm1ldF9hZGRfcG9ydF9saXN0KHBvcnQpO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2cG9ydC1cdTAwM2VlbnRyeSk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwb3J0LVx1MDAzZXN1YnN5c3RlbXMpO1xuQEAgLTIxMTksOSAmIzQzOzIxOTIsNiBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgbnZtZXRfcG9ydHNfdHlwZSA9IHtcbiBcdC5jdF9vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuIH07XG4gXG4tc3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgbnZtZXRfc3Vic3lzdGVtc19ncm91cDtcbi1zdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCBudm1ldF9wb3J0c19ncm91cDtcbi1cbiAjaWZkZWYgQ09ORklHX05WTUVfVEFSR0VUX0FVVEhcbiBzdGF0aWMgc3NpemVfdCBudm1ldF9ob3N0X2RoY2hhcF9rZXlfc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4gXHRcdGNoYXIgKnBhZ2UpXG5AQCAtMjMwMywxOSAmIzQzOzIzNzMsMjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG52bWV0X2hvc3RzX3R5cGUgPSB7XG4gXHQuY3Rfb3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwIG52bWV0X2hvc3RzX2dyb3VwO1xuLVxuIHN0YXRpYyBzc2l6ZV90IG52bWV0X3Jvb3RfZGlzY292ZXJ5X25xbl9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbiBcdFx0XHRcdFx0ICAgICBjaGFyICpwYWdlKVxuIHtcbi1cdHJldHVybiBzbnByaW50ZihwYWdlLCBQQUdFX1NJWkUsIFwmIzM0OyVzXFxuXCYjMzQ7LCBudm1ldF9kaXNjX3N1YnN5cy1cdTAwM2VzdWJzeXNucW4pO1xuJiM0MztcdHN0cnVjdCBuZXQgKm5ldF9ucyA9IGNvbmZpZ2ZzX25zX2Zyb21fZ3JvdXAodG9fY29uZmlnX2dyb3VwKGl0ZW0pKTtcbiYjNDM7XHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpkaXNjX3N1YnN5cyA9IG52bWV0X2dldF9kaXNjX3N1YnN5cyhuZXRfbnMpO1xuJiM0MztcbiYjNDM7XHRpZiAoIWRpc2Nfc3Vic3lzKVxuJiM0MztcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1x0cmV0dXJuIHNucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwgXCYjMzQ7JXNcXG5cJiMzNDssIGRpc2Nfc3Vic3lzLVx1MDAzZXN1YnN5c25xbik7XG4gfVxuIFxuIHN0YXRpYyBzc2l6ZV90IG52bWV0X3Jvb3RfZGlzY292ZXJ5X25xbl9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXG4gXHRcdGNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudClcbiB7XG4mIzQzO1x0c3RydWN0IGNvbmZpZ19pdGVtICpzdWJzeXN0ZW1zX2l0ZW07XG4mIzQzO1x0c3RydWN0IGNvbmZpZ19ncm91cCAqc3Vic3lzdGVtc19ncm91cDtcbiYjNDM7XHRzdHJ1Y3QgbmV0ICpuZXRfbnMgPSBjb25maWdmc19uc19mcm9tX2dyb3VwKHRvX2NvbmZpZ19ncm91cChpdGVtKSk7XG4mIzQzO1x0c3RydWN0IG52bWV0X3N1YnN5cyAqZGlzY19zdWJzeXM7XG4gXHRzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTtcbi1cdGNoYXIgKm9sZF9ucW4sICpuZXdfbnFuO1xuJiM0MztcdGNoYXIgKm9sZF9ucW4gPSBOVUxMLCAqbmV3X25xbjtcbiBcdHNpemVfdCBsZW47XG4gXG4gXHRsZW4gPSBzdHJjc3BuKHBhZ2UsIFwmIzM0O1xcblwmIzM0Oyk7XG5AQCAtMjMyNyw3ICYjNDM7MjQwNCwxNCBAQCBzdGF0aWMgc3NpemVfdCBudm1ldF9yb290X2Rpc2NvdmVyeV9ucW5fc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGRvd25fd3JpdGUoXHUwMDI2bnZtZXRfY29uZmlnX3NlbSk7XG4tXHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcdTAwMjZudm1ldF9zdWJzeXN0ZW1zX2dyb3VwLmNnX2NoaWxkcmVuKSB7XG4mIzQzO1x0c3Vic3lzdGVtc19pdGVtID0gY29uZmlnX2dyb3VwX2ZpbmRfaXRlbSh0b19jb25maWdfZ3JvdXAoaXRlbSksIFwmIzM0O3N1YnN5c3RlbXNcJiMzNDspO1xuJiM0MztcdGlmIChXQVJOX09OKCFzdWJzeXN0ZW1zX2l0ZW0pKSB7XG4mIzQzO1x0XHRrZnJlZShuZXdfbnFuKTtcbiYjNDM7XHRcdHVwX3dyaXRlKFx1MDAyNm52bWV0X2NvbmZpZ19zZW0pO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcdHN1YnN5c3RlbXNfZ3JvdXAgPSB0b19jb25maWdfZ3JvdXAoc3Vic3lzdGVtc19pdGVtKTtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcdTAwMjZzdWJzeXN0ZW1zX2dyb3VwLVx1MDAzZWNnX2NoaWxkcmVuKSB7XG4gXHRcdHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSA9XG4gXHRcdFx0Y29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgY29uZmlnX2l0ZW0sIGNpX2VudHJ5KTtcbiBcbkBAIC0yMzM4LDEyICYjNDM7MjQyMiwxNSBAQCBzdGF0aWMgc3NpemVfdCBudm1ldF9yb290X2Rpc2NvdmVyeV9ucW5fc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHR9XG4gXHR9XG4tXHRvbGRfbnFuID0gbnZtZXRfZGlzY19zdWJzeXMtXHUwMDNlc3Vic3lzbnFuO1xuLVx0bnZtZXRfZGlzY19zdWJzeXMtXHUwMDNlc3Vic3lzbnFuID0gbmV3X25xbjtcbiYjNDM7XHRkaXNjX3N1YnN5cyA9IG52bWV0X2dldF9kaXNjX3N1YnN5cyhuZXRfbnMpO1xuJiM0MztcdGlmIChkaXNjX3N1YnN5cykge1xuJiM0MztcdFx0b2xkX25xbiA9IGRpc2Nfc3Vic3lzLVx1MDAzZXN1YnN5c25xbjtcbiYjNDM7XHRcdGRpc2Nfc3Vic3lzLVx1MDAzZXN1YnN5c25xbiA9IG5ld19ucW47XG4mIzQzO1x0fVxuIFx0dXBfd3JpdGUoXHUwMDI2bnZtZXRfY29uZmlnX3NlbSk7XG4gXG4gXHRrZnJlZShvbGRfbnFuKTtcbi1cdHJldHVybiBsZW47XG4mIzQzO1x0cmV0dXJuIGRpc2Nfc3Vic3lzID8gbGVuIDogLUVOT0VOVDtcbiB9XG4gXG4gQ09ORklHRlNfQVRUUihudm1ldF9yb290XywgZGlzY292ZXJ5X25xbik7XG5AQCAtMjM1OCw2ICYjNDM7MjQ0NSw2OSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgbnZtZXRfcm9vdF90eXBlID0ge1xuIFx0LmN0X293bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4gfTtcbiBcbiYjNDM7c3RhdGljIGludCBudm1ldF9jb25maWdmc19maWxsX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMsXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IG5ldCAqbmV0X25zKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGNvbmZpZ19ncm91cCAqc3Vic3lzdGVtc19ncm91cCwgKnBvcnRzX2dyb3VwLCAqaG9zdHNfZ3JvdXA7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbnZtZXRfYWRkX2Rpc2Nfc3Vic3lzKG5ldF9ucyk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBlcnI7XG4mIzQzO1xuJiM0MztcdHN1YnN5c3RlbXNfZ3JvdXAgPSBremFsbG9jX29iaigqc3Vic3lzdGVtc19ncm91cCk7XG4mIzQzO1x0aWYgKCFzdWJzeXN0ZW1zX2dyb3VwKSB7XG4mIzQzO1x0XHRudm1ldF9kZWxfZGlzY19zdWJzeXMobmV0X25zKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XHRjb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoc3Vic3lzdGVtc19ncm91cCxcbiYjNDM7XHRcdFx0XCYjMzQ7c3Vic3lzdGVtc1wmIzM0OywgXHUwMDI2bnZtZXRfc3Vic3lzdGVtc190eXBlKTtcbiYjNDM7XHRjb25maWdmc19hZGRfZGVmYXVsdF9ncm91cChzdWJzeXN0ZW1zX2dyb3VwLFxuJiM0MztcdFx0XHRcdTAwMjZzdWJzeXMtXHUwMDNlc3VfZ3JvdXApO1xuJiM0MztcbiYjNDM7XHRwb3J0c19ncm91cCA9IGt6YWxsb2Nfb2JqKCpwb3J0c19ncm91cCk7XG4mIzQzO1x0aWYgKCFwb3J0c19ncm91cCkge1xuJiM0MztcdFx0a2ZyZWUoc3Vic3lzdGVtc19ncm91cCk7XG4mIzQzO1x0XHRudm1ldF9kZWxfZGlzY19zdWJzeXMobmV0X25zKTtcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcdH1cbiYjNDM7XHRjb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUocG9ydHNfZ3JvdXAsXG4mIzQzO1x0XHRcdFwmIzM0O3BvcnRzXCYjMzQ7LCBcdTAwMjZudm1ldF9wb3J0c190eXBlKTtcbiYjNDM7XHRjb25maWdmc19hZGRfZGVmYXVsdF9ncm91cChwb3J0c19ncm91cCxcbiYjNDM7XHRcdFx0XHUwMDI2c3Vic3lzLVx1MDAzZXN1X2dyb3VwKTtcbiYjNDM7XG4mIzQzO1x0aG9zdHNfZ3JvdXAgPSBremFsbG9jX29iaigqaG9zdHNfZ3JvdXApO1xuJiM0MztcdGlmICghaG9zdHNfZ3JvdXApIHtcbiYjNDM7XHRcdGtmcmVlKHBvcnRzX2dyb3VwKTtcbiYjNDM7XHRcdGtmcmVlKHN1YnN5c3RlbXNfZ3JvdXApO1xuJiM0MztcdFx0bnZtZXRfZGVsX2Rpc2Nfc3Vic3lzKG5ldF9ucyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHR9XG4mIzQzO1x0Y29uZmlnX2dyb3VwX2luaXRfdHlwZV9uYW1lKGhvc3RzX2dyb3VwLFxuJiM0MztcdFx0XHRcJiMzNDtob3N0c1wmIzM0OywgXHUwMDI2bnZtZXRfaG9zdHNfdHlwZSk7XG4mIzQzO1x0Y29uZmlnZnNfYWRkX2RlZmF1bHRfZ3JvdXAoaG9zdHNfZ3JvdXAsXG4mIzQzO1x0XHRcdFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9ncm91cCk7XG4mIzQzO1x0c3Ryc2NweShzdWJzeXMtXHUwMDNlc3VfZ3JvdXAuY2dfaXRlbS5jaV9uYW1lYnVmLCBcJiMzNDtudm1ldFwmIzM0OyxcbiYjNDM7XHRcdHNpemVvZihzdWJzeXMtXHUwMDNlc3VfZ3JvdXAuY2dfaXRlbS5jaV9uYW1lYnVmKSk7XG4mIzQzO1x0c3Vic3lzLVx1MDAzZXN1X2dyb3VwLmNnX2l0ZW0uY2lfdHlwZSA9IFx1MDAyNm52bWV0X3Jvb3RfdHlwZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIG52bWV0X2NvbmZpZ2ZzX2NsZWFyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMsXG4mIzQzO1x0XHRcdFx0XHQgICBzdHJ1Y3QgbmV0ICpuZXRfbnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgY29uZmlnX2dyb3VwICpnLCAqbjtcbiYjNDM7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGcsIG4sIFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9ncm91cC5kZWZhdWx0X2dyb3VwcyxcbiYjNDM7XHRcdFx0XHQgZ3JvdXBfZW50cnkpIHtcbiYjNDM7XHRcdGxpc3RfZGVsKFx1MDAyNmctXHUwMDNlZ3JvdXBfZW50cnkpO1xuJiM0MztcdFx0Y29uZmlnX2l0ZW1fcHV0KFx1MDAyNmctXHUwMDNlY2dfaXRlbSk7XG4mIzQzO1x0XHRrZnJlZShnKTtcbiYjNDM7XHR9XG4mIzQzO1x0bnZtZXRfZGVsX2Rpc2Nfc3Vic3lzKG5ldF9ucyk7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gbnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtID0ge1xuIFx0LnN1X2dyb3VwID0ge1xuIFx0XHQuY2dfaXRlbSA9IHtcbkBAIC0yMzY1LDMwICYjNDM7MjUxNSwxNCBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBudm1ldF9jb25maWdmc19zdWJzeXN0ZW0gPSB7XG4gXHRcdFx0LmNpX3R5cGVcdD0gXHUwMDI2bnZtZXRfcm9vdF90eXBlLFxuIFx0XHR9LFxuIFx0fSxcbiYjNDM7XHQuZmlsbF9zdWJzeXN0ZW0gPSBudm1ldF9jb25maWdmc19maWxsX3N1YnN5c3RlbSxcbiYjNDM7XHQuY2xlYXJfc3Vic3lzdGVtID0gbnZtZXRfY29uZmlnZnNfY2xlYXJfc3Vic3lzdGVtLFxuIH07XG4gXG4gaW50IF9faW5pdCBudm1ldF9pbml0X2NvbmZpZ2ZzKHZvaWQpXG4ge1xuIFx0aW50IHJldDtcbiBcbi1cdGNvbmZpZ19ncm91cF9pbml0KFx1MDAyNm52bWV0X2NvbmZpZ2ZzX3N1YnN5c3RlbS5zdV9ncm91cCk7XG4tXHRtdXRleF9pbml0KFx1MDAyNm52bWV0X2NvbmZpZ2ZzX3N1YnN5c3RlbS5zdV9tdXRleCk7XG4tXG4tXHRjb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoXHUwMDI2bnZtZXRfc3Vic3lzdGVtc19ncm91cCxcbi1cdFx0XHRcJiMzNDtzdWJzeXN0ZW1zXCYjMzQ7LCBcdTAwMjZudm1ldF9zdWJzeXN0ZW1zX3R5cGUpO1xuLVx0Y29uZmlnZnNfYWRkX2RlZmF1bHRfZ3JvdXAoXHUwMDI2bnZtZXRfc3Vic3lzdGVtc19ncm91cCxcbi1cdFx0XHRcdTAwMjZudm1ldF9jb25maWdmc19zdWJzeXN0ZW0uc3VfZ3JvdXApO1xuLVxuLVx0Y29uZmlnX2dyb3VwX2luaXRfdHlwZV9uYW1lKFx1MDAyNm52bWV0X3BvcnRzX2dyb3VwLFxuLVx0XHRcdFwmIzM0O3BvcnRzXCYjMzQ7LCBcdTAwMjZudm1ldF9wb3J0c190eXBlKTtcbi1cdGNvbmZpZ2ZzX2FkZF9kZWZhdWx0X2dyb3VwKFx1MDAyNm52bWV0X3BvcnRzX2dyb3VwLFxuLVx0XHRcdFx1MDAyNm52bWV0X2NvbmZpZ2ZzX3N1YnN5c3RlbS5zdV9ncm91cCk7XG4tXG4tXHRjb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoXHUwMDI2bnZtZXRfaG9zdHNfZ3JvdXAsXG4tXHRcdFx0XCYjMzQ7aG9zdHNcJiMzNDssIFx1MDAyNm52bWV0X2hvc3RzX3R5cGUpO1xuLVx0Y29uZmlnZnNfYWRkX2RlZmF1bHRfZ3JvdXAoXHUwMDI2bnZtZXRfaG9zdHNfZ3JvdXAsXG4tXHRcdFx0XHUwMDI2bnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtLnN1X2dyb3VwKTtcbi1cbiBcdHJldCA9IGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbShcdTAwMjZudm1ldF9jb25maWdmc19zdWJzeXN0ZW0pO1xuIFx0aWYgKHJldCkge1xuIFx0XHRwcl9lcnIoXCYjMzQ7Y29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtOiAlZFxcblwmIzM0OywgcmV0KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jXG5pbmRleCA2MmRkNTliOWFhNGYxYy4uMzk5ODliOGJhZTkyZjggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmNcbkBAIC0xNzk4LDIyICYjNDM7MTc5OCwyNyBAQCBzdGF0aWMgc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfZmluZF9nZXRfc3Vic3lzKHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0LFxuIFx0XHRjb25zdCBjaGFyICpzdWJzeXNucW4pXG4ge1xuIFx0c3RydWN0IG52bWV0X3N1YnN5c19saW5rICpwO1xuJiM0MztcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzO1xuIFxuIFx0aWYgKCFwb3J0KVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbiYjNDM7XHRkaXNjX3N1YnN5cyA9IG52bWV0X2dldF9kaXNjX3N1YnN5cyhwb3J0LVx1MDAzZW5ldF9ucyk7XG4mIzQzO1x0aWYgKCFkaXNjX3N1YnN5cylcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiBcdGlmICghc3RyY21wKE5WTUVfRElTQ19TVUJTWVNfTkFNRSwgc3Vic3lzbnFuKSkge1xuLVx0XHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVx1MDAzZXJlZikpXG4mIzQzO1x0XHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNmRpc2Nfc3Vic3lzLVx1MDAzZXJlZikpXG4gXHRcdFx0cmV0dXJuIE5VTEw7XG4tXHRcdHJldHVybiBudm1ldF9kaXNjX3N1YnN5cztcbiYjNDM7XHRcdHJldHVybiBkaXNjX3N1YnN5cztcbiBcdH1cbiBcbiBcdGRvd25fcmVhZChcdTAwMjZudm1ldF9jb25maWdfc2VtKTtcbi1cdGlmICghc3RybmNtcChudm1ldF9kaXNjX3N1YnN5cy1cdTAwM2VzdWJzeXNucW4sIHN1YnN5c25xbixcbiYjNDM7XHRpZiAoIXN0cm5jbXAoZGlzY19zdWJzeXMtXHUwMDNlc3Vic3lzbnFuLCBzdWJzeXNucW4sXG4gXHRcdFx0XHROVk1GX05RTl9TSVpFKSkge1xuLVx0XHRpZiAoa3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2bnZtZXRfZGlzY19zdWJzeXMtXHUwMDNlcmVmKSkge1xuJiM0MztcdFx0aWYgKGtyZWZfZ2V0X3VubGVzc196ZXJvKFx1MDAyNmRpc2Nfc3Vic3lzLVx1MDAzZXJlZikpIHtcbiBcdFx0XHR1cF9yZWFkKFx1MDAyNm52bWV0X2NvbmZpZ19zZW0pO1xuLVx0XHRcdHJldHVybiBudm1ldF9kaXNjX3N1YnN5cztcbiYjNDM7XHRcdFx0cmV0dXJuIGRpc2Nfc3Vic3lzO1xuIFx0XHR9XG4gXHR9XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIFx1MDAyNnBvcnQtXHUwMDNlc3Vic3lzdGVtcywgZW50cnkpIHtcbkBAIC0xODMwLDcgJiM0MzsxODM1LDcgQEAgc3RhdGljIHN0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X2ZpbmRfZ2V0X3N1YnN5cyhzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCxcbiB9XG4gXG4gc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfc3Vic3lzX2FsbG9jKGNvbnN0IGNoYXIgKnN1YnN5c25xbixcbi1cdFx0ZW51bSBudm1lX3N1YnN5c190eXBlIHR5cGUpXG4mIzQzO1x0XHRlbnVtIG52bWVfc3Vic3lzX3R5cGUgdHlwZSwgc3RydWN0IG5ldCAqbmV0X25zKVxuIHtcbiBcdHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cztcbiBcdGNoYXIgc2VyaWFsW05WTUVUX1NOX01BWF9TSVpFIC8gMl07XG5AQCAtMTg4OCwxMCAmIzQzOzE4OTMsMTIgQEAgc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfc3Vic3lzX2FsbG9jKGNvbnN0IGNoYXIgKnN1YnN5c25xbixcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnN1YnN5cy1cdTAwM2VjdHJscyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzdWJzeXMtXHUwMDNlaG9zdHMpO1xuIFxuLVx0cmV0ID0gbnZtZXRfZGVidWdmc19zdWJzeXNfc2V0dXAoc3Vic3lzKTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gZnJlZV9zdWJzeXNucW47XG4tXG4mIzQzO1x0LyogRGlzYWJsZSBkZWJ1Z2ZzIGZvciBub24taW5pdGlhbCBuYW1lc3BhY2VzICovXG4mIzQzO1x0aWYgKG5ldF9ucyA9PSBcdTAwMjZpbml0X25ldCkge1xuJiM0MztcdFx0cmV0ID0gbnZtZXRfZGVidWdmc19zdWJzeXNfc2V0dXAoc3Vic3lzKTtcbiYjNDM7XHRcdGlmIChyZXQpXG4mIzQzO1x0XHRcdGdvdG8gZnJlZV9zdWJzeXNucW47XG4mIzQzO1x0fVxuIFx0cmV0dXJuIHN1YnN5cztcbiBcbiBmcmVlX3N1YnN5c25xbjpcbkBAIC0xOTc2LDE4ICYjNDM7MTk4MywxMiBAQCBzdGF0aWMgaW50IF9faW5pdCBudm1ldF9pbml0KHZvaWQpXG4gXHRpZiAoZXJyb3IpXG4gXHRcdGdvdG8gb3V0X2ZyZWVfbnZtZXRfYWVuX3dvcmtfcXVldWU7XG4gXG4tXHRlcnJvciA9IG52bWV0X2luaXRfZGlzY292ZXJ5KCk7XG4tXHRpZiAoZXJyb3IpXG4tXHRcdGdvdG8gb3V0X2V4aXRfZGVidWdmcztcbi1cbiBcdGVycm9yID0gbnZtZXRfaW5pdF9jb25maWdmcygpO1xuIFx0aWYgKGVycm9yKVxuLVx0XHRnb3RvIG91dF9leGl0X2Rpc2NvdmVyeTtcbiYjNDM7XHRcdGdvdG8gb3V0X2V4aXRfZGVidWdmcztcbiBcbiBcdHJldHVybiAwO1xuIFxuLW91dF9leGl0X2Rpc2NvdmVyeTpcbi1cdG52bWV0X2V4aXRfZGlzY292ZXJ5KCk7XG4gb3V0X2V4aXRfZGVidWdmczpcbiBcdG52bWV0X2V4aXRfZGVidWdmcygpO1xuIG91dF9mcmVlX252bWV0X2Flbl93b3JrX3F1ZXVlOlxuQEAgLTIwMDYsNyAmIzQzOzIwMDcsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBudm1ldF9pbml0KHZvaWQpXG4gc3RhdGljIHZvaWQgX19leGl0IG52bWV0X2V4aXQodm9pZClcbiB7XG4gXHRudm1ldF9leGl0X2NvbmZpZ2ZzKCk7XG4tXHRudm1ldF9leGl0X2Rpc2NvdmVyeSgpO1xuIFx0bnZtZXRfZXhpdF9kZWJ1Z2ZzKCk7XG4gXHRpZGFfZGVzdHJveShcdTAwMjZjbnRsaWRfaWRhKTtcbiBcdGRlc3Ryb3lfd29ya3F1ZXVlKG52bWV0X2Flbl93cSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC9kaXNjb3ZlcnkuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvZGlzY292ZXJ5LmNcbmluZGV4IDExNDg2OWQxNmExZjNjLi5iNDk4NGZjNjViYTc4NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvZGlzY292ZXJ5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvZGlzY292ZXJ5LmNcbkBAIC04LDkgJiM0Mzs4LDQ0IEBAXG4gI2luY2x1ZGUgXHUwMDNjZ2VuZXJhdGVkL3V0c3JlbGVhc2UuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O252bWV0LmhcJiMzNDtcbiBcbi1zdHJ1Y3QgbnZtZXRfc3Vic3lzICpudm1ldF9kaXNjX3N1YnN5cztcbiYjNDM7c3RhdGljIERFRklORV9YQVJSQVkobnZtZXRfZGlzY194YSk7XG4gXG4tc3RhdGljIHU2NCBudm1ldF9nZW5jdHI7XG4mIzQzO3N0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X2dldF9kaXNjX3N1YnN5cyhzdHJ1Y3QgbmV0ICpuZXRfbnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXM7XG4mIzQzO1x0dTY0IG5zX2lkID0gbnZtZXRfZ2V0X25zX2lkKG5ldF9ucyk7XG4mIzQzO1xuJiM0MztcdHN1YnN5cyA9IHhhX2xvYWQoXHUwMDI2bnZtZXRfZGlzY194YSwgbnNfaWQpO1xuJiM0MztcdHJldHVybiBzdWJzeXM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBudm1ldF9hZGRfZGlzY19zdWJzeXMoc3RydWN0IG5ldCAqbmV0X25zKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG52bWV0X3N1YnN5cyAqZGlzY19zdWJzeXM7XG4mIzQzO1x0dTY0IG5zX2lkID0gbnZtZXRfZ2V0X25zX2lkKG5ldF9ucyk7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0ZGlzY19zdWJzeXMgPSBudm1ldF9zdWJzeXNfYWxsb2MoTlZNRV9ESVNDX1NVQlNZU19OQU1FLFxuJiM0MztcdFx0XHRcdFx0IE5WTUVfTlFOX0NVUlIsIG5ldF9ucyk7XG4mIzQzO1x0aWYgKElTX0VSUihkaXNjX3N1YnN5cykpXG4mIzQzO1x0XHRyZXR1cm4gUFRSX0VSUihkaXNjX3N1YnN5cyk7XG4mIzQzO1x0ZXJyID0geGFfaW5zZXJ0KFx1MDAyNm52bWV0X2Rpc2NfeGEsIG5zX2lkLFxuJiM0MztcdFx0XHRkaXNjX3N1YnN5cywgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMClcbiYjNDM7XHRcdG52bWV0X3N1YnN5c19wdXQoZGlzY19zdWJzeXMpO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIG52bWV0X2RlbF9kaXNjX3N1YnN5cyhzdHJ1Y3QgbmV0ICpuZXRfbnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpkaXNjX3N1YnN5cztcbiYjNDM7XHR1NjQgbnNfaWQgPSBudm1ldF9nZXRfbnNfaWQobmV0X25zKTtcbiYjNDM7XG4mIzQzO1x0ZGlzY19zdWJzeXMgPSB4YV9lcmFzZShcdTAwMjZudm1ldF9kaXNjX3hhLCBuc19pZCk7XG4mIzQzO1x0aWYgKGRpc2Nfc3Vic3lzKVxuJiM0MztcdFx0bnZtZXRfc3Vic3lzX3B1dChkaXNjX3N1YnN5cyk7XG4mIzQzO31cbiBcbiBzdGF0aWMgdm9pZCBfX252bWV0X2Rpc2NfY2hhbmdlZChzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCxcbiBcdFx0XHRcdCBzdHJ1Y3QgbnZtZXRfY3RybCAqY3RybClcbkBAIC0yOSwxOCAmIzQzOzY0LDIyIEBAIHZvaWQgbnZtZXRfcG9ydF9kaXNjX2NoYW5nZWQoc3RydWN0IG52bWV0X3BvcnQgKnBvcnQsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMpXG4ge1xuIFx0c3RydWN0IG52bWV0X2N0cmwgKmN0cmw7XG4mIzQzO1x0c3RydWN0IG52bWV0X3N1YnN5cyAqZGlzY19zdWJzeXM7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm52bWV0X2NvbmZpZ19zZW0pO1xuLVx0bnZtZXRfZ2VuY3RyJiM0MzsmIzQzOztcbiYjNDM7XHRkaXNjX3N1YnN5cyA9IG52bWV0X2dldF9kaXNjX3N1YnN5cyhwb3J0LVx1MDAzZW5ldF9ucyk7XG4mIzQzO1x0aWYgKFdBUk5fT04oIWRpc2Nfc3Vic3lzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRkaXNjX3N1YnN5cy1cdTAwM2VnZW5jdHImIzQzOyYjNDM7O1xuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZudm1ldF9kaXNjX3N1YnN5cy1cdTAwM2Vsb2NrKTtcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkoY3RybCwgXHUwMDI2bnZtZXRfZGlzY19zdWJzeXMtXHUwMDNlY3RybHMsIHN1YnN5c19lbnRyeSkge1xuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2ZGlzY19zdWJzeXMtXHUwMDNlbG9jayk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShjdHJsLCBcdTAwMjZkaXNjX3N1YnN5cy1cdTAwM2VjdHJscywgc3Vic3lzX2VudHJ5KSB7XG4gXHRcdGlmIChzdWJzeXMgXHUwMDI2XHUwMDI2ICFudm1ldF9ob3N0X2FsbG93ZWQoc3Vic3lzLCBjdHJsLVx1MDAzZWhvc3RucW4pKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuIFx0XHRfX252bWV0X2Rpc2NfY2hhbmdlZChwb3J0LCBjdHJsKTtcbiBcdH1cbi1cdG11dGV4X3VubG9jayhcdTAwMjZudm1ldF9kaXNjX3N1YnN5cy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2ZGlzY19zdWJzeXMtXHUwMDNlbG9jayk7XG4gXG4gXHQvKiBJZiB0cmFuc3BvcnQgY2FuIHNpZ25hbCBjaGFuZ2UsIG5vdGlmeSB0cmFuc3BvcnQgKi9cbiBcdGlmIChwb3J0LVx1MDAzZXRyX29wcyBcdTAwMjZcdTAwMjYgcG9ydC1cdTAwM2V0cl9vcHMtXHUwMDNlZGlzY292ZXJ5X2NoZylcbkBAIC01MiwxNSAmIzQzOzkxLDE5IEBAIHN0YXRpYyB2b2lkIF9fbnZtZXRfc3Vic3lzX2Rpc2NfY2hhbmdlZChzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCxcbiBcdFx0XHRcdFx0c3RydWN0IG52bWV0X2hvc3QgKmhvc3QpXG4ge1xuIFx0c3RydWN0IG52bWV0X2N0cmwgKmN0cmw7XG4mIzQzO1x0c3RydWN0IG52bWV0X3N1YnN5cyAqZGlzY19zdWJzeXM7XG4gXG4tXHRtdXRleF9sb2NrKFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVx1MDAzZWxvY2spO1xuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShjdHJsLCBcdTAwMjZudm1ldF9kaXNjX3N1YnN5cy1cdTAwM2VjdHJscywgc3Vic3lzX2VudHJ5KSB7XG4mIzQzO1x0ZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMocG9ydC1cdTAwM2VuZXRfbnMpO1xuJiM0MztcdGlmIChXQVJOX09OKCFkaXNjX3N1YnN5cykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZkaXNjX3N1YnN5cy1cdTAwM2Vsb2NrKTtcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsIFx1MDAyNmRpc2Nfc3Vic3lzLVx1MDAzZWN0cmxzLCBzdWJzeXNfZW50cnkpIHtcbiBcdFx0aWYgKGhvc3QgXHUwMDI2XHUwMDI2IHN0cmNtcChudm1ldF9ob3N0X25hbWUoaG9zdCksIGN0cmwtXHUwMDNlaG9zdG5xbikpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdF9fbnZtZXRfZGlzY19jaGFuZ2VkKHBvcnQsIGN0cmwpO1xuIFx0fVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVx1MDAzZWxvY2spO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZkaXNjX3N1YnN5cy1cdTAwM2Vsb2NrKTtcbiB9XG4gXG4gdm9pZCBudm1ldF9zdWJzeXNfZGlzY19jaGFuZ2VkKHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cyxcbkBAIC02OCwxMSAmIzQzOzExMSwxOCBAQCB2b2lkIG52bWV0X3N1YnN5c19kaXNjX2NoYW5nZWQoc3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzLFxuIHtcbiBcdHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0O1xuIFx0c3RydWN0IG52bWV0X3N1YnN5c19saW5rICpzO1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgKnBvcnRfbGlzdDtcbiYjNDM7XHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpkaXNjX3N1YnN5cztcbiYjNDM7XHRzdHJ1Y3QgbmV0ICpuZXRfbnMgPSBjb25maWdmc19uc19mcm9tX2dyb3VwKFx1MDAyNnN1YnN5cy1cdTAwM2Vncm91cCk7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm52bWV0X2NvbmZpZ19zZW0pO1xuLVx0bnZtZXRfZ2VuY3RyJiM0MzsmIzQzOztcbiYjNDM7XHRkaXNjX3N1YnN5cyA9IG52bWV0X2dldF9kaXNjX3N1YnN5cyhuZXRfbnMpO1xuJiM0MztcdGlmIChXQVJOX09OKCFkaXNjX3N1YnN5cykpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0ZGlzY19zdWJzeXMtXHUwMDNlZ2VuY3RyJiM0MzsmIzQzOztcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgbnZtZXRfcG9ydHMsIGdsb2JhbF9lbnRyeSlcbiYjNDM7XHRwb3J0X2xpc3QgPSBudm1ldF9nZXRfcG9ydF9saXN0KG5ldF9ucyk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBwb3J0X2xpc3QsIGdsb2JhbF9lbnRyeSlcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzLCBcdTAwMjZwb3J0LVx1MDAzZXN1YnN5c3RlbXMsIGVudHJ5KSB7XG4gXHRcdFx0aWYgKHMtXHUwMDNlc3Vic3lzICE9IHN1YnN5cylcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTE3Myw2ICYjNDM7MjIzLDcgQEAgc3RhdGljIHZvaWQgbnZtZXRfZXhlY3V0ZV9kaXNjX2dldF9sb2dfcGFnZShzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXG4gXHR1MTYgc3RhdHVzID0gMDtcbiBcdHZvaWQgKmJ1ZmZlcjtcbiBcdGNoYXIgdHJhZGRyW05WTUZfVFJBRERSX1NJWkVdO1xuJiM0MztcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzO1xuIFxuIFx0aWYgKCFudm1ldF9jaGVja190cmFuc2Zlcl9sZW4ocmVxLCBkYXRhX2xlbikpXG4gXHRcdHJldHVybjtcbkBAIC0yMDcsMTAgJiM0MzsyNTgsMTIgQEAgc3RhdGljIHZvaWQgbnZtZXRfZXhlY3V0ZV9kaXNjX2dldF9sb2dfcGFnZShzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXG4gXHR9XG4gXHRoZHIgPSBidWZmZXI7XG4gXG4mIzQzO1x0ZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMocmVxLVx1MDAzZXBvcnQtXHUwMDNlbmV0X25zKTtcbiYjNDM7XG4gXHRudm1ldF9zZXRfZGlzY190cmFkZHIocmVxLCByZXEtXHUwMDNlcG9ydCwgdHJhZGRyKTtcbiBcbiBcdG52bWV0X2Zvcm1hdF9kaXNjb3ZlcnlfZW50cnkoaGRyLCByZXEtXHUwMDNlcG9ydCxcbi1cdFx0XHRcdCAgICAgbnZtZXRfZGlzY19zdWJzeXMtXHUwMDNlc3Vic3lzbnFuLFxuJiM0MztcdFx0XHRcdCAgICAgZGlzY19zdWJzeXMtXHUwMDNlc3Vic3lzbnFuLFxuIFx0XHRcdFx0ICAgICB0cmFkZHIsIE5WTUVfTlFOX0NVUlIsIG51bXJlYyk7XG4gXHRudW1yZWMmIzQzOyYjNDM7O1xuIFxuQEAgLTIzNSw3ICYjNDM7Mjg4LDcgQEAgc3RhdGljIHZvaWQgbnZtZXRfZXhlY3V0ZV9kaXNjX2dldF9sb2dfcGFnZShzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXG4gXHRcdG51bXJlYyYjNDM7JiM0Mzs7XG4gXHR9XG4gXG4tXHRoZHItXHUwMDNlZ2VuY3RyID0gY3B1X3RvX2xlNjQobnZtZXRfZ2VuY3RyKTtcbiYjNDM7XHRoZHItXHUwMDNlZ2VuY3RyID0gY3B1X3RvX2xlNjQoZGlzY19zdWJzeXMtXHUwMDNlZ2VuY3RyKTtcbiBcdGhkci1cdTAwM2VudW1yZWMgPSBjcHVfdG9fbGU2NChudW1yZWMpO1xuIFx0aGRyLVx1MDAzZXJlY2ZtdCA9IGNwdV90b19sZTE2KDApO1xuIFxuQEAgLTQyOCwxNSAmIzQzOzQ4MSwzIEBAIHUxNiBudm1ldF9wYXJzZV9kaXNjb3ZlcnlfY21kKHN0cnVjdCBudm1ldF9yZXEgKnJlcSlcbiBcdH1cbiBcbiB9XG4tXG4taW50IF9faW5pdCBudm1ldF9pbml0X2Rpc2NvdmVyeSh2b2lkKVxuLXtcbi1cdG52bWV0X2Rpc2Nfc3Vic3lzID1cbi1cdFx0bnZtZXRfc3Vic3lzX2FsbG9jKE5WTUVfRElTQ19TVUJTWVNfTkFNRSwgTlZNRV9OUU5fQ1VSUik7XG4tXHRyZXR1cm4gUFRSX0VSUl9PUl9aRVJPKG52bWV0X2Rpc2Nfc3Vic3lzKTtcbi19XG4tXG4tdm9pZCBudm1ldF9leGl0X2Rpc2NvdmVyeSh2b2lkKVxuLXtcbi1cdG52bWV0X3N1YnN5c19wdXQobnZtZXRfZGlzY19zdWJzeXMpO1xuLX1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jXG5pbmRleCBmY2IxZjgxODZmZGQwZC4uMGVkZDY5MDkwMmNlNGIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmNcbkBAIC05LDYgJiM0Mzs5LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9udm1lLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhcnNlci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L25zcHJveHkuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O252bWV0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDsuLi9ob3N0L252bWUuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0Oy4uL2hvc3QvZmFicmljcy5oXCYjMzQ7XG5AQCAtNTM4LDYgJiM0Mzs1MzksOSBAQCBzdGF0aWMgc3RydWN0IG52bWV0X3BvcnQgKm52bWVfbG9vcF9maW5kX3BvcnQoc3RydWN0IG52bWVfY3RybCAqY3RybClcbiBcbiBcdG11dGV4X2xvY2soXHUwMDI2bnZtZV9sb29wX3BvcnRzX211dGV4KTtcbiBcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgXHUwMDI2bnZtZV9sb29wX3BvcnRzLCBlbnRyeSkge1xuJiM0MztcdFx0LyogU2tpcCBwb3J0cyBmcm9tIG5vbi1tYXRjaGluZyBuYW1lc3BhY2VzICovXG4mIzQzO1x0XHRpZiAocC1cdTAwM2VuZXRfbnMgIT0gY3VycmVudC1cdTAwM2Vuc3Byb3h5LVx1MDAzZW5ldF9ucylcbiYjNDM7XHRcdFx0Y29udGludWU7XG4gXHRcdC8qIGlmIG5vIHRyYW5zcG9ydCBhZGRyZXNzIGlzIHNwZWNpZmllZCB1c2UgdGhlIGZpcnN0IHBvcnQgKi9cbiBcdFx0aWYgKChjdHJsLVx1MDAzZW9wdHMtXHUwMDNlbWFzayBcdTAwMjYgTlZNRl9PUFRfVFJBRERSKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgIHN0cmNtcChjdHJsLVx1MDAzZW9wdHMtXHUwMDNldHJhZGRyLCBwLVx1MDAzZWRpc2NfYWRkci50cmFkZHIpKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaCBiL2RyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaFxuaW5kZXggMzMwNWE4ODY4NGVjYWIuLjY4MWY5MzVkODAwODZiIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmhcbkBAIC0yMTAsNiAmIzQzOzIxMCw3IEBAIHN0cnVjdCBudm1ldF9wb3J0IHtcbiBcdHN0cnVjdCBudm1ldF9hbmFfZ3JvdXBcdFx0YW5hX2RlZmF1bHRfZ3JvdXA7XG4gXHRlbnVtIG52bWVfYW5hX3N0YXRlXHRcdCphbmFfc3RhdGU7XG4gXHRzdHJ1Y3Qga2V5XHRcdFx0KmtleXJpbmc7XG4mIzQzO1x0c3RydWN0IG5ldFx0XHRcdCpuZXRfbnM7XG4gXHR2b2lkXHRcdFx0XHQqcHJpdjtcbiBcdGJvb2xcdFx0XHRcdGVuYWJsZWQ7XG4gXHRpbnRcdFx0XHRcdGlubGluZV9kYXRhX3NpemU7XG5AQCAtMzI1LDYgJiM0MzszMjYsOSBAQCBzdHJ1Y3QgbnZtZXRfc3Vic3lzIHtcbiBcdHUxNlx0XHRcdGNudGxpZF9taW47XG4gXHR1MTZcdFx0XHRjbnRsaWRfbWF4O1xuIFxuJiM0MztcdC8qIEZvciBkaXNjb3Zlcnkgc3Vic3lzdGVtcyAqL1xuJiM0MztcdHU2NCBnZW5jdHI7XG4mIzQzO1xuIFx0c3RydWN0IGxpc3RfaGVhZFx0Y3RybHM7XG4gXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRob3N0cztcbkBAIC02MjYsNyAmIzQzOzYzMCw3IEBAIHNzaXplX3QgbnZtZXRfY3RybF9ob3N0X3RyYWRkcihzdHJ1Y3QgbnZtZXRfY3RybCAqY3RybCxcbiBcdFx0Y2hhciAqdHJhZGRyLCBzaXplX3QgdHJhZGRyX2xlbik7XG4gXG4gc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfc3Vic3lzX2FsbG9jKGNvbnN0IGNoYXIgKnN1YnN5c25xbixcbi1cdFx0ZW51bSBudm1lX3N1YnN5c190eXBlIHR5cGUpO1xuJiM0MztcdFx0ZW51bSBudm1lX3N1YnN5c190eXBlIHR5cGUsIHN0cnVjdCBuZXQgKm5ldF9ucyk7XG4gdm9pZCBudm1ldF9zdWJzeXNfcHV0KHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cyk7XG4gdm9pZCBudm1ldF9zdWJzeXNfZGVsX2N0cmxzKHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cyk7XG4gXG5AQCAtNjYyLDcgJiM0Mzs2NjYsNiBAQCB1MTYgbnZtZXRfemVyb19zZ2woc3RydWN0IG52bWV0X3JlcSAqcmVxLCBvZmZfdCBvZmYsIHNpemVfdCBsZW4pO1xuIHUzMiBudm1ldF9nZXRfbG9nX3BhZ2VfbGVuKHN0cnVjdCBudm1lX2NvbW1hbmQgKmNtZCk7XG4gdTY0IG52bWV0X2dldF9sb2dfcGFnZV9vZmZzZXQoc3RydWN0IG52bWVfY29tbWFuZCAqY21kKTtcbiBcbi1leHRlcm4gc3RydWN0IGxpc3RfaGVhZCAqbnZtZXRfcG9ydHM7XG4gdm9pZCBudm1ldF9wb3J0X2Rpc2NfY2hhbmdlZChzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCxcbiBcdFx0c3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzKTtcbiB2b2lkIG52bWV0X3N1YnN5c19kaXNjX2NoYW5nZWQoc3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzLFxuQEAgLTY5NiwxMSAmIzQzOzY5OSwxMyBAQCB2b2lkIG52bWV0X2FkZF9hc3luY19ldmVudChzdHJ1Y3QgbnZtZXRfY3RybCAqY3RybCwgdTggZXZlbnRfdHlwZSxcbiBcbiBpbnQgX19pbml0IG52bWV0X2luaXRfY29uZmlnZnModm9pZCk7XG4gdm9pZCBfX2V4aXQgbnZtZXRfZXhpdF9jb25maWdmcyh2b2lkKTtcbiYjNDM7ZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgKm52bWV0X2dldF9wb3J0X2xpc3Qoc3RydWN0IG5ldCAqbmV0X25zKTtcbiBcbi1pbnQgX19pbml0IG52bWV0X2luaXRfZGlzY292ZXJ5KHZvaWQpO1xuLXZvaWQgbnZtZXRfZXhpdF9kaXNjb3Zlcnkodm9pZCk7XG4mIzQzO2V4dGVybiB1NjQgbnZtZXRfZ2V0X25zX2lkKHN0cnVjdCBuZXQgKm5ldF9ucyk7XG4mIzQzO2V4dGVybiBpbnQgbnZtZXRfYWRkX2Rpc2Nfc3Vic3lzKHN0cnVjdCBuZXQgKm5ldF9ucyk7XG4mIzQzO2V4dGVybiB2b2lkIG52bWV0X2RlbF9kaXNjX3N1YnN5cyhzdHJ1Y3QgbmV0ICpuZXRfbnMpO1xuJiM0MztleHRlcm4gc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzKHN0cnVjdCBuZXQgKm5ldF9ucyk7XG4gXG4tZXh0ZXJuIHN0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X2Rpc2Nfc3Vic3lzO1xuIGV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIG52bWV0X2NvbmZpZ19zZW07XG4gXG4gZXh0ZXJuIHUzMiBudm1ldF9hbmFfZ3JvdXBfZW5hYmxlZFtOVk1FVF9NQVhfQU5BR1JQUyAmIzQzOyAxXTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvcmRtYS5jXG5pbmRleCBhYzI2ZjRmNzc0YzRkZS4uY2FkMjM5MWE2ZDBhNzggMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL3RhcmdldC9yZG1hLmNcbkBAIC0xODcwLDggJiM0MzsxODcwLDggQEAgc3RhdGljIGludCBudm1ldF9yZG1hX2VuYWJsZV9wb3J0KHN0cnVjdCBudm1ldF9yZG1hX3BvcnQgKnBvcnQpXG4gXHRzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQ7XG4gXHRpbnQgcmV0O1xuIFxuLVx0Y21faWQgPSByZG1hX2NyZWF0ZV9pZChcdTAwMjZpbml0X25ldCwgbnZtZXRfcmRtYV9jbV9oYW5kbGVyLCBwb3J0LFxuLVx0XHRcdFJETUFfUFNfVENQLCBJQl9RUFRfUkMpO1xuJiM0MztcdGNtX2lkID0gcmRtYV9jcmVhdGVfaWQocG9ydC1cdTAwM2VucG9ydC1cdTAwM2VuZXRfbnMsIG52bWV0X3JkbWFfY21faGFuZGxlcixcbiYjNDM7XHRcdFx0cG9ydCwgUkRNQV9QU19UQ1AsIElCX1FQVF9SQyk7XG4gXHRpZiAoSVNfRVJSKGNtX2lkKSkge1xuIFx0XHRwcl9lcnIoXCYjMzQ7Q00gSUQgY3JlYXRpb24gZmFpbGVkXFxuXCYjMzQ7KTtcbiBcdFx0cmV0dXJuIFBUUl9FUlIoY21faWQpO1xuQEAgLTE5NjQsNyAmIzQzOzE5NjQsNyBAQCBzdGF0aWMgaW50IG52bWV0X3JkbWFfYWRkX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKm5wb3J0KVxuIFx0XHRucG9ydC1cdTAwM2VtYXhfcXVldWVfc2l6ZSA9IE5WTUVfUkRNQV9NQVhfUVVFVUVfU0laRTtcbiBcdH1cbiBcbi1cdHJldCA9IGluZXRfcHRvbl93aXRoX3Njb3BlKFx1MDAyNmluaXRfbmV0LCBhZiwgbnBvcnQtXHUwMDNlZGlzY19hZGRyLnRyYWRkcixcbiYjNDM7XHRyZXQgPSBpbmV0X3B0b25fd2l0aF9zY29wZShucG9ydC1cdTAwM2VuZXRfbnMsIGFmLCBucG9ydC1cdTAwM2VkaXNjX2FkZHIudHJhZGRyLFxuIFx0XHRcdG5wb3J0LVx1MDAzZWRpc2NfYWRkci50cnN2Y2lkLCBcdTAwMjZwb3J0LVx1MDAzZWFkZHIpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRwcl9lcnIoXCYjMzQ7bWFsZm9ybWVkIGlwL3BvcnQgcGFzc2VkOiAlczolc1xcblwmIzM0OyxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jIGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xuaW5kZXggMTVjNTJmMWY5NWYxYjAuLjAxNmJlZjY1YTc2ZGQ5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xuQEAgLTIwNzQsNyAmIzQzOzIwNzQsNyBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpXG4gXHRcdGdvdG8gZXJyX3BvcnQ7XG4gXHR9XG4gXG4tXHRyZXQgPSBpbmV0X3B0b25fd2l0aF9zY29wZShcdTAwMjZpbml0X25ldCwgYWYsIG5wb3J0LVx1MDAzZWRpc2NfYWRkci50cmFkZHIsXG4mIzQzO1x0cmV0ID0gaW5ldF9wdG9uX3dpdGhfc2NvcGUobnBvcnQtXHUwMDNlbmV0X25zLCBhZiwgbnBvcnQtXHUwMDNlZGlzY19hZGRyLnRyYWRkcixcbiBcdFx0XHRucG9ydC1cdTAwM2VkaXNjX2FkZHIudHJzdmNpZCwgXHUwMDI2cG9ydC1cdTAwM2VhZGRyKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0cHJfZXJyKFwmIzM0O21hbGZvcm1lZCBpcC9wb3J0IHBhc3NlZDogJXM6JXNcXG5cJiMzNDssXG5AQCAtMjA4Nyw4ICYjNDM7MjA4Nyw4IEBAIHN0YXRpYyBpbnQgbnZtZXRfdGNwX2FkZF9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpucG9ydClcbiBcdGlmIChwb3J0LVx1MDAzZW5wb3J0LVx1MDAzZWlubGluZV9kYXRhX3NpemUgXHUwMDNjIDApXG4gXHRcdHBvcnQtXHUwMDNlbnBvcnQtXHUwMDNlaW5saW5lX2RhdGFfc2l6ZSA9IE5WTUVUX1RDUF9ERUZfSU5MSU5FX0RBVEFfU0laRTtcbiBcbi1cdHJldCA9IHNvY2tfY3JlYXRlKHBvcnQtXHUwMDNlYWRkci5zc19mYW1pbHksIFNPQ0tfU1RSRUFNLFxuLVx0XHRcdFx0SVBQUk9UT19UQ1AsIFx1MDAyNnBvcnQtXHUwMDNlc29jayk7XG4mIzQzO1x0cmV0ID0gc29ja19jcmVhdGVfa2VybihucG9ydC1cdTAwM2VuZXRfbnMsIHBvcnQtXHUwMDNlYWRkci5zc19mYW1pbHksIFNPQ0tfU1RSRUFNLFxuJiM0MztcdFx0XHQgICAgSVBQUk9UT19UQ1AsIFx1MDAyNnBvcnQtXHUwMDNlc29jayk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHByX2VycihcJiMzNDtmYWlsZWQgdG8gY3JlYXRlIGEgc29ja2V0XFxuXCYjMzQ7KTtcbiBcdFx0Z290byBlcnJfcG9ydDtcbmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9jb25maWdmc19pbnRlcm5hbC5oIGIvZnMvY29uZmlnZnMvY29uZmlnZnNfaW50ZXJuYWwuaFxuaW5kZXggYWNkZWVhOGUyZDY5YWMuLjM1ZWRkYzI3NGI4ODc5IDEwMDY0NFxuLS0tIGEvZnMvY29uZmlnZnMvY29uZmlnZnNfaW50ZXJuYWwuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvY29uZmlnZnMvY29uZmlnZnNfaW50ZXJuYWwuaFxuQEAgLTQ0LDYgJiM0Mzs0NCwxNyBAQCBzdHJ1Y3QgY29uZmlnZnNfZGlyZW50IHtcbiBcdHN0cnVjdCBjb25maWdmc19mcmFnbWVudCAqc19mcmFnO1xuIH07XG4gXG4mIzQzO3N0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvIHtcbiYjNDM7XHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50IHJvb3Q7XG4mIzQzO1x0c3RydWN0IGNvbmZpZ19ncm91cCBncm91cDtcbiYjNDM7XHRzdHJ1Y3QgbGlzdF9oZWFkIHN1YnN5c19saXN0O1xuJiM0MztcdHN0cnVjdCBtdXRleCBzdWJzeXNfbXV0ZXg7XG4mIzQzO1x0c3RydWN0IHZmc21vdW50ICptbnQ7XG4mIzQzO1x0aW50IG1udF9jb3VudDtcbiYjNDM7XHRzdHJ1Y3QgbmV0ICpuZXRfbnM7XG4mIzQzO1x0cmVmY291bnRfdCByZWY7XG4mIzQzO307XG4mIzQzO1xuICNkZWZpbmUgQ09ORklHRlNfUk9PVFx0XHQweDAwMDFcbiAjZGVmaW5lIENPTkZJR0ZTX0RJUlx0XHQweDAwMDJcbiAjZGVmaW5lIENPTkZJR0ZTX0lURU1fQVRUUlx0MHgwMDA0XG5AQCAtNjMsNyAmIzQzOzc0LDcgQEAgZXh0ZXJuIHNwaW5sb2NrX3QgY29uZmlnZnNfZGlyZW50X2xvY2s7XG4gXG4gZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpjb25maWdmc19kaXJfY2FjaGVwO1xuIFxuLWV4dGVybiBpbnQgY29uZmlnZnNfaXNfcm9vdChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pO1xuJiM0MztleHRlcm4gYm9vbCBjb25maWdmc19pc19yb290KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSk7XG4gXG4gZXh0ZXJuIHN0cnVjdCBpbm9kZSAqIGNvbmZpZ2ZzX25ld19pbm9kZSh1bW9kZV90IG1vZGUsIHN0cnVjdCBjb25maWdmc19kaXJlbnQgKiwgc3RydWN0IHN1cGVyX2Jsb2NrICopO1xuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmNvbmZpZ2ZzX2NyZWF0ZShzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QgbW9kZSk7XG5AQCAtNzksOCAmIzQzOzkwLDE0IEBAIGV4dGVybiBjb25zdCB1bnNpZ25lZCBjaGFyICogY29uZmlnZnNfZ2V0X25hbWUoc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2QpO1xuIGV4dGVybiBpbnQgY29uZmlnZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbiBcdFx0XHQgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmlhdHRyKTtcbiBcbi1leHRlcm4gc3RydWN0IGRlbnRyeSAqY29uZmlnZnNfcGluX2ZzKHZvaWQpO1xuLWV4dGVybiB2b2lkIGNvbmZpZ2ZzX3JlbGVhc2VfZnModm9pZCk7XG4mIzQzO2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICpjb25maWdmc19waW5fZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4mIzQzO2V4dGVybiB2b2lkIGNvbmZpZ2ZzX3JlbGVhc2VfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4mIzQzO2V4dGVybiBzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqY29uZmlnZnNfZ2V0X3N1cGVyX2luZm8oc3RydWN0IG5ldCAqbmV0X25zKTtcbiYjNDM7ZXh0ZXJuIHZvaWQgY29uZmlnZnNfcHV0X3N1cGVyX2luZm8oc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8pO1xuJiM0MztleHRlcm4gdm9pZCBjb25maWdmc19saW5rX3N1YnN5c3RlbXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvKTtcbiYjNDM7ZXh0ZXJuIHZvaWQgY29uZmlnZnNfdW5saW5rX3N1YnN5c3RlbXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbiYjNDM7XHRcdFx0XHQgICAgICAgc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8pO1xuIFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvbmZpZ2ZzX2Rpcl9vcGVyYXRpb25zO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvbmZpZ2ZzX2ZpbGVfb3BlcmF0aW9ucztcbmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9kaXIuYyBiL2ZzL2NvbmZpZ2ZzL2Rpci5jXG5pbmRleCAzYzg4ZjEzZjFjYTJlOS4uM2QzOWE2YzFhNDE2MzYgMTAwNjQ0XG4tLS0gYS9mcy9jb25maWdmcy9kaXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvY29uZmlnZnMvZGlyLmNcbkBAIC0zNCwxNCAmIzQzOzM0LDYgQEBcbiAgKi9cbiBERUZJTkVfU1BJTkxPQ0soY29uZmlnZnNfZGlyZW50X2xvY2spO1xuIFxuLS8qXG4tICogQWxsIG9mIGxpbmtfb2JqL3VubGlua19vYmovbGlua19ncm91cC91bmxpbmtfZ3JvdXAgcmVxdWlyZSB0aGF0XG4tICogc3Vic3lzLVx1MDAzZXN1X211dGV4IGlzIGhlbGQuXG4tICogQnV0IHBhcmVudCBjb25maWdmc19zdWJzeXN0ZW0gaXMgTlVMTCB3aGVuIGNvbmZpZ19pdGVtIGlzIHJvb3QuXG4tICogVXNlIHRoaXMgbXV0ZXggd2hlbiBjb25maWdfaXRlbSBpcyByb290LlxuLSAqL1xuLXN0YXRpYyBERUZJTkVfTVVURVgoY29uZmlnZnNfc3Vic3lzdGVtX211dGV4KTtcbi1cbiBzdGF0aWMgdm9pZCBjb25maWdmc19kX2lwdXQoc3RydWN0IGRlbnRyeSAqIGRlbnRyeSxcbiBcdFx0XHQgICAgc3RydWN0IGlub2RlICogaW5vZGUpXG4ge1xuQEAgLTExNTIsNyAmIzQzOzExNDQsNyBAQCBpbnQgY29uZmlnZnNfZGVwZW5kX2l0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzLFxuIFx0ICogUGluIHRoZSBjb25maWdmcyBmaWxlc3lzdGVtLiAgVGhpcyBtZWFucyB3ZSBjYW4gc2FmZWx5IGFjY2Vzc1xuIFx0ICogdGhlIHJvb3Qgb2YgdGhlIGNvbmZpZ2ZzIGZpbGVzeXN0ZW0uXG4gXHQgKi9cbi1cdHJvb3QgPSBjb25maWdmc19waW5fZnMoKTtcbiYjNDM7XHRyb290ID0gY29uZmlnZnNfcGluX2ZzKE5VTEwpO1xuIFx0aWYgKElTX0VSUihyb290KSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIocm9vdCk7XG4gXG5AQCAtMTE3OSw3ICYjNDM7MTE3MSw3IEBAIGludCBjb25maWdmc19kZXBlbmRfaXRlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMsXG4gXHQgKiBJZiB3ZSBzdWNjZWVkZWQsIHRoZSBmcyBpcyBwaW5uZWQgdmlhIG90aGVyIG1ldGhvZHMuICBJZiBub3QsXG4gXHQgKiB3ZSYjMzk7cmUgZG9uZSB3aXRoIGl0IGFueXdheS4gIFNvIHJlbGVhc2VfZnMoKSBpcyBhbHdheXMgcmlnaHQuXG4gXHQgKi9cbi1cdGNvbmZpZ2ZzX3JlbGVhc2VfZnMoKTtcbiYjNDM7XHRjb25maWdmc19yZWxlYXNlX2ZzKE5VTEwpO1xuIFxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMTg2OSwzMiAmIzQzOzE4NjEsMjcgQEAgdm9pZCBjb25maWdmc191bnJlZ2lzdGVyX2RlZmF1bHRfZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXApXG4gfVxuIEVYUE9SVF9TWU1CT0woY29uZmlnZnNfdW5yZWdpc3Rlcl9kZWZhdWx0X2dyb3VwKTtcbiBcbi1pbnQgY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cylcbiYjNDM7c3RhdGljIGludCBjb25maWdmc19saW5rX3Jvb3Qoc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gICppbmZvLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBkZW50cnkgKnJvb3QpXG4ge1xuLVx0aW50IGVycjtcbiBcdHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwID0gXHUwMDI2c3Vic3lzLVx1MDAzZXN1X2dyb3VwO1xuIFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xuLVx0c3RydWN0IGRlbnRyeSAqcm9vdDtcbiBcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xuIFx0c3RydWN0IGNvbmZpZ2ZzX2ZyYWdtZW50ICpmcmFnO1xuJiM0MztcdGludCBlcnI7XG4gXG4gXHRmcmFnID0gbmV3X2ZyYWdtZW50KCk7XG4gXHRpZiAoIWZyYWcpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0cm9vdCA9IGNvbmZpZ2ZzX3Bpbl9mcygpO1xuLVx0aWYgKElTX0VSUihyb290KSkge1xuLVx0XHRwdXRfZnJhZ21lbnQoZnJhZyk7XG4tXHRcdHJldHVybiBQVFJfRVJSKHJvb3QpO1xuLVx0fVxuLVxuIFx0aWYgKCFncm91cC1cdTAwM2VjZ19pdGVtLmNpX25hbWUpXG4gXHRcdGdyb3VwLVx1MDAzZWNnX2l0ZW0uY2lfbmFtZSA9IGdyb3VwLVx1MDAzZWNnX2l0ZW0uY2lfbmFtZWJ1ZjtcbiBcbiBcdHNkID0gcm9vdC1cdTAwM2VkX2ZzZGF0YTtcbi1cdG11dGV4X2xvY2soXHUwMDI2Y29uZmlnZnNfc3Vic3lzdGVtX211dGV4KTtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX211dGV4KTtcbiBcdGxpbmtfZ3JvdXAodG9fY29uZmlnX2dyb3VwKHNkLVx1MDAzZXNfZWxlbWVudCksIGdyb3VwKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZjb25maWdmc19zdWJzeXN0ZW1fbXV0ZXgpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZXN1YnN5c19tdXRleCk7XG4gXG4gXHRpbm9kZV9sb2NrX25lc3RlZChkX2lub2RlKHJvb3QpLCBJX01VVEVYX1BBUkVOVCk7XG4gXG5AQCAtMTkyMSwxNyAmIzQzOzE5MDgsMTIwIEBAIGludCBjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKVxuIFx0aW5vZGVfdW5sb2NrKGRfaW5vZGUocm9vdCkpO1xuIFxuIFx0aWYgKGVycikge1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N1YnN5c3RlbV9tdXRleCk7XG4mIzQzO1x0XHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX211dGV4KTtcbiBcdFx0dW5saW5rX2dyb3VwKGdyb3VwKTtcbi1cdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N1YnN5c3RlbV9tdXRleCk7XG4tXHRcdGNvbmZpZ2ZzX3JlbGVhc2VfZnMoKTtcbiYjNDM7XHRcdG11dGV4X3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZXN1YnN5c19tdXRleCk7XG4gXHR9XG4gXHRwdXRfZnJhZ21lbnQoZnJhZyk7XG4mIzQzO1x0cmV0dXJuIGVycjtcbiYjNDM7fVxuIFxuJiM0MztpbnQgY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvO1xuJiM0MztcdHN0cnVjdCBkZW50cnkgKnJvb3Q7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0aW5mbyA9IGNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKFx1MDAyNmluaXRfbmV0KTtcbiYjNDM7XHRpZiAoV0FSTl9PTihJU19FUlIoaW5mbykpKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoaW5mbyk7XG4mIzQzO1xuJiM0MztcdHJvb3QgPSBjb25maWdmc19waW5fZnMoTlVMTCk7XG4mIzQzO1x0aWYgKElTX0VSUihyb290KSkge1xuJiM0MztcdFx0ZXJyID0gUFRSX0VSUihyb290KTtcbiYjNDM7XHRcdGdvdG8gb3V0X3B1dDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChzdWJzeXMtXHUwMDNlZmlsbF9zdWJzeXN0ZW0pIHtcbiYjNDM7XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9saW5rKTtcbiYjNDM7XHRcdG11dGV4X2luaXQoXHUwMDI2c3Vic3lzLVx1MDAzZXN1X211dGV4KTtcbiYjNDM7XHRcdGNvbmZpZ19ncm91cF9pbml0KFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9ncm91cCk7XG4mIzQzO1x0XHRlcnIgPSBzdWJzeXMtXHUwMDNlZmlsbF9zdWJzeXN0ZW0oc3Vic3lzLCBpbmZvLVx1MDAzZW5ldF9ucyk7XG4mIzQzO1x0XHRpZiAoZXJyKVxuJiM0MztcdFx0XHRnb3RvIG91dF9yZWxlYXNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0ZXJyID0gY29uZmlnZnNfbGlua19yb290KGluZm8sIHN1YnN5cywgcm9vdCk7XG4mIzQzO1x0aWYgKGVycikge1xuJiM0MztcdFx0aWYgKHN1YnN5cy1cdTAwM2VjbGVhcl9zdWJzeXN0ZW0pXG4mIzQzO1x0XHRcdHN1YnN5cy1cdTAwM2VjbGVhcl9zdWJzeXN0ZW0oc3Vic3lzLCBpbmZvLVx1MDAzZW5ldF9ucyk7XG4mIzQzO1x0XHRnb3RvIG91dF9yZWxlYXNlO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZpbmZvLVx1MDAzZXN1YnN5c19tdXRleCk7XG4mIzQzO1x0bGlzdF9hZGQoXHUwMDI2c3Vic3lzLVx1MDAzZXN1X2xpbmssIFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX2xpc3QpO1xuJiM0MztcdG11dGV4X3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZXN1YnN5c19tdXRleCk7XG4mIzQzO1xuJiM0MztvdXRfcmVsZWFzZTpcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Y29uZmlnZnNfcmVsZWFzZV9mcyhOVUxMKTtcbiYjNDM7b3V0X3B1dDpcbiYjNDM7XHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXZvaWQgY29uZmlnZnNfdW5yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKVxuJiM0Mzt2b2lkIGNvbmZpZ2ZzX2xpbmtfc3Vic3lzdGVtcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnM7XG4mIzQzO1x0c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKnBhcmVudCA9IGNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKFx1MDAyNmluaXRfbmV0KTtcbiYjNDM7XHRMSVNUX0hFQUQoc3Vic3lzX2xpc3QpO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTihJU19FUlIocGFyZW50KSkpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0aWYgKChpbmZvLVx1MDAzZW5ldF9ucyA9PSBcdTAwMjZpbml0X25ldCkgfHwgV0FSTl9PTihwYXJlbnQgPT0gaW5mbykpIHtcbiYjNDM7XHRcdGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKHBhcmVudCk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdG11dGV4X2xvY2soXHUwMDI2cGFyZW50LVx1MDAzZXN1YnN5c19tdXRleCk7XG4mIzQzO1x0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZwYXJlbnQtXHUwMDNlc3Vic3lzX2xpc3QsIFx1MDAyNnN1YnN5c19saXN0KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cGFyZW50LVx1MDAzZXN1YnN5c19tdXRleCk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeShzLCBcdTAwMjZzdWJzeXNfbGlzdCwgc3VfbGluaykge1xuJiM0MztcdFx0c3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzO1xuJiM0MztcdFx0c3RydWN0IGRlbnRyeSAqcm9vdDtcbiYjNDM7XHRcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdFx0aWYgKCFzLVx1MDAzZWZpbGxfc3Vic3lzdGVtKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdHN1YnN5cyA9IGt6YWxsb2Nfb2JqKCpzdWJzeXMpO1xuJiM0MztcdFx0aWYgKCFzdWJzeXMpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0c3Vic3lzLVx1MDAzZWZpbGxfc3Vic3lzdGVtID0gcy1cdTAwM2VmaWxsX3N1YnN5c3RlbTtcbiYjNDM7XHRcdHN1YnN5cy1cdTAwM2VjbGVhcl9zdWJzeXN0ZW0gPSBzLVx1MDAzZWNsZWFyX3N1YnN5c3RlbTtcbiYjNDM7XHRcdElOSVRfTElTVF9IRUFEKFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9saW5rKTtcbiYjNDM7XHRcdG11dGV4X2luaXQoXHUwMDI2c3Vic3lzLVx1MDAzZXN1X211dGV4KTtcbiYjNDM7XHRcdGNvbmZpZ19ncm91cF9pbml0KFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9ncm91cCk7XG4mIzQzO1x0XHRlcnIgPSBzdWJzeXMtXHUwMDNlZmlsbF9zdWJzeXN0ZW0oc3Vic3lzLCBpbmZvLVx1MDAzZW5ldF9ucyk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdGtmcmVlKHN1YnN5cyk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cm9vdCA9IGNvbmZpZ2ZzX3Bpbl9mcyhzYik7XG4mIzQzO1x0XHRpZiAoSVNfRVJSKHJvb3QpKSB7XG4mIzQzO1x0XHRcdGlmIChzdWJzeXMtXHUwMDNlY2xlYXJfc3Vic3lzdGVtKVxuJiM0MztcdFx0XHRcdHN1YnN5cy1cdTAwM2VjbGVhcl9zdWJzeXN0ZW0oc3Vic3lzLCBpbmZvLVx1MDAzZW5ldF9ucyk7XG4mIzQzO1x0XHRcdGtmcmVlKHN1YnN5cyk7XG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0ZXJyID0gY29uZmlnZnNfbGlua19yb290KGluZm8sIHN1YnN5cywgcm9vdCk7XG4mIzQzO1x0XHRpZiAoZXJyKSB7XG4mIzQzO1x0XHRcdGNvbmZpZ2ZzX3JlbGVhc2VfZnMoc2IpO1xuJiM0MztcdFx0XHRpZiAoc3Vic3lzLVx1MDAzZWNsZWFyX3N1YnN5c3RlbSlcbiYjNDM7XHRcdFx0XHRzdWJzeXMtXHUwMDNlY2xlYXJfc3Vic3lzdGVtKHN1YnN5cywgaW5mby1cdTAwM2VuZXRfbnMpO1xuJiM0MztcdFx0XHRrZnJlZShzdWJzeXMpO1xuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdG11dGV4X2xvY2soXHUwMDI2aW5mby1cdTAwM2VzdWJzeXNfbXV0ZXgpO1xuJiM0MztcdFx0bGlzdF9hZGQoXHUwMDI2c3Vic3lzLVx1MDAzZXN1X2xpbmssIFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX2xpc3QpO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX211dGV4KTtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZwYXJlbnQtXHUwMDNlc3Vic3lzX211dGV4KTtcbiYjNDM7XHRsaXN0X3NwbGljZShcdTAwMjZzdWJzeXNfbGlzdCwgXHUwMDI2cGFyZW50LVx1MDAzZXN1YnN5c19saXN0KTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cGFyZW50LVx1MDAzZXN1YnN5c19tdXRleCk7XG4mIzQzO1x0Y29uZmlnZnNfcHV0X3N1cGVyX2luZm8ocGFyZW50KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGJvb2wgY29uZmlnZnNfdW5saW5rX3Jvb3Qoc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKVxuIHtcbiBcdHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwID0gXHUwMDI2c3Vic3lzLVx1MDAzZXN1X2dyb3VwO1xuIFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZGdldChncm91cC1cdTAwM2VjZ19pdGVtLmNpX2RlbnRyeSk7XG5AQCAtMTk0MSw3ICYjNDM7MjAzMSw4IEBAIHZvaWQgY29uZmlnZnNfdW5yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKVxuIFxuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX3BhcmVudCAhPSByb290KSB7XG4gXHRcdHByX2VycihcJiMzNDtUcmllZCB0byB1bnJlZ2lzdGVyIG5vbi1zdWJzeXN0ZW0hXFxuXCYjMzQ7KTtcbi1cdFx0cmV0dXJuO1xuJiM0MztcdFx0ZHB1dChkZW50cnkpO1xuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuIFx0fVxuIFxuIFx0ZG93bl93cml0ZShcdTAwMjZmcmFnLVx1MDAzZWZyYWdfc2VtKTtcbkBAIC0xOTY5LDExICYjNDM7MjA2MCw1MCBAQCB2b2lkIGNvbmZpZ2ZzX3VucmVnaXN0ZXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cylcbiBcdGlub2RlX3VubG9jayhkX2lub2RlKHJvb3QpKTtcbiBcbiBcdGRwdXQoZGVudHJ5KTtcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBjb25maWdmc191bmxpbmtfc3Vic3lzdGVtcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzLCAqcztcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZpbmZvLVx1MDAzZXN1YnN5c19tdXRleCk7XG4mIzQzO1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN1YnN5cywgcywgXHUwMDI2aW5mby1cdTAwM2VzdWJzeXNfbGlzdCwgc3VfbGluaykge1xuJiM0MztcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZzdWJzeXMtXHUwMDNlc3VfbGluayk7XG4mIzQzO1x0XHRpZiAoIWNvbmZpZ2ZzX3VubGlua19yb290KHN1YnN5cykpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKHN1YnN5cy1cdTAwM2VjbGVhcl9zdWJzeXN0ZW0pXG4mIzQzO1x0XHRcdHN1YnN5cy1cdTAwM2VjbGVhcl9zdWJzeXN0ZW0oc3Vic3lzLCBpbmZvLVx1MDAzZW5ldF9ucyk7XG4mIzQzO1x0XHR1bmxpbmtfZ3JvdXAoXHUwMDI2c3Vic3lzLVx1MDAzZXN1X2dyb3VwKTtcbiYjNDM7XHRcdGNvbmZpZ2ZzX3JlbGVhc2VfZnMoc2IpO1xuJiM0MztcdFx0a2ZyZWUoc3Vic3lzKTtcbiYjNDM7XHR9XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX211dGV4KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBjb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbztcbiYjNDM7XHRzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCA9IFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9ncm91cDtcbiYjNDM7XG4mIzQzO1x0aW5mbyA9IGNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKFx1MDAyNmluaXRfbmV0KTtcbiYjNDM7XHRpZiAoV0FSTl9PTihJU19FUlIoaW5mbykpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRpZiAoIWNvbmZpZ2ZzX3VubGlua19yb290KHN1YnN5cykpIHtcbiYjNDM7XHRcdGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKGluZm8pO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2Y29uZmlnZnNfc3Vic3lzdGVtX211dGV4KTtcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX211dGV4KTtcbiYjNDM7XHRsaXN0X2RlbF9pbml0KFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9saW5rKTtcbiYjNDM7XHRpZiAoc3Vic3lzLVx1MDAzZWNsZWFyX3N1YnN5c3RlbSlcbiYjNDM7XHRcdHN1YnN5cy1cdTAwM2VjbGVhcl9zdWJzeXN0ZW0oc3Vic3lzLCBpbmZvLVx1MDAzZW5ldF9ucyk7XG4gXHR1bmxpbmtfZ3JvdXAoZ3JvdXApO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N1YnN5c3RlbV9tdXRleCk7XG4tXHRjb25maWdmc19yZWxlYXNlX2ZzKCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX211dGV4KTtcbiYjNDM7XHRjb25maWdmc19yZWxlYXNlX2ZzKE5VTEwpO1xuJiM0MztcdGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKGluZm8pO1xuIH1cbiBcbiBFWFBPUlRfU1lNQk9MKGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbSk7XG5kaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvbW91bnQuYyBiL2ZzL2NvbmZpZ2ZzL21vdW50LmNcbmluZGV4IDQ5MjlmMzQzMTE4OTQ2Li43OTQxMjU3ZDU1OGI3MiAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL21vdW50LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NvbmZpZ2ZzL21vdW50LmNcbkBAIC0yMiwxMCAmIzQzOzIyLDE5IEBAXG4gLyogUmFuZG9tIG1hZ2ljIG51bWJlciAqL1xuICNkZWZpbmUgQ09ORklHRlNfTUFHSUMgMHg2MjY1NjU3MFxuIFxuLXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKmNvbmZpZ2ZzX21vdW50ID0gTlVMTDtcbiBzdHJ1Y3Qga21lbV9jYWNoZSAqY29uZmlnZnNfZGlyX2NhY2hlcDtcbi1zdGF0aWMgaW50IGNvbmZpZ2ZzX21udF9jb3VudCA9IDA7XG4mIzQzO3N0YXRpYyBERUZJTkVfWEFSUkFZKGNvbmZpZ2ZzX3N1cGVyX3hhKTtcbiYjNDM7c3RhdGljIHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICpjb25maWdmc19yb290O1xuJiM0MztzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNvbmZpZ2ZzX3Bpbl9sb2NrKTtcbiBcbiYjNDM7c3RhdGljIHU2NCBjb25maWdmc19uc19pZChzdHJ1Y3QgbmV0ICpuZXRfbnMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbnNfY29tbW9uICpucyA9IG5ldF9ucyA/IHRvX25zX2NvbW1vbihuZXRfbnMpIDogTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKCFucyB8fCBuZXRfbnMgPT0gXHUwMDI2aW5pdF9uZXQpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRyZXR1cm4gbnMtXHUwMDNlbnNfaWQ7XG4mIzQzO31cbiBcbiBzdGF0aWMgdm9pZCBjb25maWdmc19mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4ge1xuQEAgLTQwLDI4ICYjNDM7NDksODIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGNvbmZpZ2ZzX29wcyA9IHtcbiBcdC5mcmVlX2lub2RlXHQ9IGNvbmZpZ2ZzX2ZyZWVfaW5vZGUsXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCBjb25maWdmc19yb290X2dyb3VwID0ge1xuLVx0LmNnX2l0ZW0gPSB7XG4tXHRcdC5jaV9uYW1lYnVmXHQ9IFwmIzM0O3Jvb3RcJiMzNDssXG4tXHRcdC5jaV9uYW1lXHQ9IGNvbmZpZ2ZzX3Jvb3RfZ3JvdXAuY2dfaXRlbS5jaV9uYW1lYnVmLFxuLVx0fSxcbi19O1xuJiM0Mztib29sIGNvbmZpZ2ZzX2lzX3Jvb3Qoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7XG4mIzQzO1xuJiM0MztcdGlmICghaXRlbS1cdTAwM2VjaV9kZW50cnkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0c2QgPSBpdGVtLVx1MDAzZWNpX2RlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbiYjNDM7XHRyZXR1cm4gISEoc2QtXHUwMDNlc190eXBlIFx1MDAyNiBDT05GSUdGU19ST09UKTtcbiYjNDM7fVxuIFxuLWludCBjb25maWdmc19pc19yb290KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbiYjNDM7c3RhdGljIHZvaWQgY29uZmlnZnNfZmlsbF9zdXBlcl9pbmZvKHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvKVxuIHtcbi1cdHJldHVybiBpdGVtID09IFx1MDAyNmNvbmZpZ2ZzX3Jvb3RfZ3JvdXAuY2dfaXRlbTtcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZpbmZvLVx1MDAzZXJvb3Quc19zaWJsaW5nKTtcbiYjNDM7XHRJTklUX0xJU1RfSEVBRChcdTAwMjZpbmZvLVx1MDAzZXJvb3Quc19jaGlsZHJlbik7XG4mIzQzO1x0aW5mby1cdTAwM2Vyb290LnNfdHlwZSA9IENPTkZJR0ZTX1JPT1Q7XG4mIzQzO1x0aW5mby1cdTAwM2Vyb290LnNfZWxlbWVudCA9IFx1MDAyNmluZm8tXHUwMDNlZ3JvdXAuY2dfaXRlbTtcbiYjNDM7XHRzdHJzY3B5KGluZm8tXHUwMDNlZ3JvdXAuY2dfaXRlbS5jaV9uYW1lYnVmLCBcJiMzNDtyb290XCYjMzQ7LCA0KTtcbiYjNDM7XHRpbmZvLVx1MDAzZWdyb3VwLmNnX2l0ZW0uY2lfbmFtZSA9IGluZm8tXHUwMDNlZ3JvdXAuY2dfaXRlbS5jaV9uYW1lYnVmO1xuJiM0MztcdGNvbmZpZ19ncm91cF9pbml0KFx1MDAyNmluZm8tXHUwMDNlZ3JvdXApO1xuJiM0MztcdElOSVRfTElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX2xpc3QpO1xuJiM0MztcdG11dGV4X2luaXQoXHUwMDI2aW5mby1cdTAwM2VzdWJzeXNfbXV0ZXgpO1xuJiM0MztcdHJlZmNvdW50X3NldChcdTAwMjZpbmZvLVx1MDAzZXJlZiwgMSk7XG4mIzQzO1x0aW5mby1cdTAwM2VtbnRfY291bnQgPSAwO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCBjb25maWdmc19yb290ID0ge1xuLVx0LnNfc2libGluZ1x0PSBMSVNUX0hFQURfSU5JVChjb25maWdmc19yb290LnNfc2libGluZyksXG4tXHQuc19jaGlsZHJlblx0PSBMSVNUX0hFQURfSU5JVChjb25maWdmc19yb290LnNfY2hpbGRyZW4pLFxuLVx0LnNfZWxlbWVudFx0PSBcdTAwMjZjb25maWdmc19yb290X2dyb3VwLmNnX2l0ZW0sXG4tXHQuc190eXBlXHRcdD0gQ09ORklHRlNfUk9PVCxcbi1cdC5zX2lhdHRyXHQ9IE5VTEwsXG4tfTtcbiYjNDM7c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKHN0cnVjdCBuZXQgKm5ldF9ucylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvO1xuJiM0MztcdHU2NCBuc19pZCA9IGNvbmZpZ2ZzX25zX2lkKG5ldF9ucyk7XG4mIzQzO1x0aW50IGVycjtcbiYjNDM7XG4mIzQzO1x0eGFfbG9jayhcdTAwMjZjb25maWdmc19zdXBlcl94YSk7XG4mIzQzO1x0aW5mbyA9IHhhX2xvYWQoXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEsIG5zX2lkKTtcbiYjNDM7XHRpZiAoaW5mbykge1xuJiM0MztcdFx0aWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oKFx1MDAyNmluZm8tXHUwMDNlcmVmKSkpXG4mIzQzO1x0XHRcdGluZm8gPSBFUlJfUFRSKC1FQlVTWSk7XG4mIzQzO1x0XHR4YV91bmxvY2soXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEpO1xuJiM0MztcdFx0cmV0dXJuIGluZm87XG4mIzQzO1x0fVxuJiM0MztcdGluZm8gPSBremFsbG9jX29iaigqaW5mbyk7XG4mIzQzO1x0aWYgKCFpbmZvKSB7XG4mIzQzO1x0XHR4YV91bmxvY2soXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEpO1xuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpbmZvLVx1MDAzZW5ldF9ucyA9IGdldF9uZXQobmV0X25zKTtcbiYjNDM7XHRjb25maWdmc19maWxsX3N1cGVyX2luZm8oaW5mbyk7XG4mIzQzO1x0ZXJyID0gX194YV9pbnNlcnQoXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEsIG5zX2lkLFxuJiM0MztcdFx0XHQgIGluZm8sIEdGUF9LRVJORUwpO1xuJiM0MztcdHhhX3VubG9jayhcdTAwMjZjb25maWdmc19zdXBlcl94YSk7XG4mIzQzO1x0aWYgKGVyciBcdTAwM2MgMCkge1xuJiM0MztcdFx0cHV0X25ldChpbmZvLVx1MDAzZW5ldF9ucyk7XG4mIzQzO1x0XHRrZnJlZShpbmZvKTtcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBpbmZvO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvKVxuJiM0Mzt7XG4mIzQzO1x0dTY0IG5zX2lkID0gY29uZmlnZnNfbnNfaWQoaW5mby1cdTAwM2VuZXRfbnMpO1xuJiM0MztcbiYjNDM7XHR4YV9sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N1cGVyX3hhKTtcbiYjNDM7XHRpZiAoIXJlZmNvdW50X2RlY19hbmRfdGVzdChcdTAwMjZpbmZvLVx1MDAzZXJlZikpIHtcbiYjNDM7XHRcdHhhX3VubG9jayhcdTAwMjZjb25maWdmc19zdXBlcl94YSk7XG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0fVxuJiM0MztcdF9feGFfZXJhc2UoXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEsIG5zX2lkKTtcbiYjNDM7XHR4YV91bmxvY2soXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEpO1xuJiM0MztcdHB1dF9uZXQoaW5mby1cdTAwM2VuZXRfbnMpO1xuJiM0MztcdGtmcmVlKGluZm8pO1xuJiM0Mzt9XG4gXG4gc3RhdGljIGludCBjb25maWdmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiB7XG4mIzQzO1x0c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8gPSBzYi1cdTAwM2VzX2ZzX2luZm87XG4gXHRzdHJ1Y3QgaW5vZGUgKmlub2RlO1xuIFx0c3RydWN0IGRlbnRyeSAqcm9vdDtcbiBcbkBAIC03Miw2NiAmIzQzOzEzNSwxNjIgQEAgc3RhdGljIGludCBjb25maWdmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiBcdHNiLVx1MDAzZXNfdGltZV9ncmFuID0gMTtcbiBcbiBcdGlub2RlID0gY29uZmlnZnNfbmV3X2lub2RlKFNfSUZESVIgfCBTX0lSV1hVIHwgU19JUlVHTyB8IFNfSVhVR08sXG4tXHRcdFx0XHQgICBcdTAwMjZjb25maWdmc19yb290LCBzYik7XG4tXHRpZiAoaW5vZGUpIHtcbi1cdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmNvbmZpZ2ZzX3Jvb3RfaW5vZGVfb3BlcmF0aW9ucztcbi1cdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZjb25maWdmc19kaXJfb3BlcmF0aW9ucztcbi1cdFx0LyogZGlyZWN0b3J5IGlub2RlcyBzdGFydCBvZmYgd2l0aCBpX25saW5rID09IDIgKGZvciBcJiMzNDsuXCYjMzQ7IGVudHJ5KSAqL1xuLVx0XHRpbmNfbmxpbmsoaW5vZGUpO1xuLVx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHQgICBcdTAwMjZpbmZvLVx1MDAzZXJvb3QsIHNiKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGlub2RlKSkge1xuIFx0XHRwcl9kZWJ1ZyhcJiMzNDtjb3VsZCBub3QgZ2V0IHJvb3QgaW5vZGVcXG5cJiMzNDspO1xuLVx0XHRyZXR1cm4gLUVOT01FTTtcbiYjNDM7XHRcdHJldHVybiBQVFJfRVJSKGlub2RlKTtcbiBcdH1cbiYjNDM7XHRpbm9kZS1cdTAwM2VpX29wID0gXHUwMDI2Y29uZmlnZnNfcm9vdF9pbm9kZV9vcGVyYXRpb25zO1xuJiM0MztcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2Y29uZmlnZnNfZGlyX29wZXJhdGlvbnM7XG4mIzQzO1x0LyogZGlyZWN0b3J5IGlub2RlcyBzdGFydCBvZmYgd2l0aCBpX25saW5rID09IDIgKGZvciBcJiMzNDsuXCYjMzQ7IGVudHJ5KSAqL1xuJiM0MztcdGluY19ubGluayhpbm9kZSk7XG4gXG4gXHRyb290ID0gZF9tYWtlX3Jvb3QoaW5vZGUpO1xuIFx0aWYgKCFyb290KSB7XG4gXHRcdHByX2RlYnVnKFwmIzM0OyVzOiBjb3VsZCBub3QgZ2V0IHJvb3QgZGVudHJ5IVxcblwmIzM0OyxfX2Z1bmNfXyk7XG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0fVxuLVx0Y29uZmlnX2dyb3VwX2luaXQoXHUwMDI2Y29uZmlnZnNfcm9vdF9ncm91cCk7XG4tXHRjb25maWdmc19yb290X2dyb3VwLmNnX2l0ZW0uY2lfZGVudHJ5ID0gcm9vdDtcbi1cdHJvb3QtXHUwMDNlZF9mc2RhdGEgPSBcdTAwMjZjb25maWdmc19yb290O1xuJiM0MztcdGluZm8tXHUwMDNlZ3JvdXAuY2dfaXRlbS5jaV9kZW50cnkgPSByb290O1xuJiM0MztcdHJvb3QtXHUwMDNlZF9mc2RhdGEgPSBcdTAwMjZpbmZvLVx1MDAzZXJvb3Q7XG4gXHRzYi1cdTAwM2VzX3Jvb3QgPSByb290O1xuIFx0c2V0X2RlZmF1bHRfZF9vcChzYiwgXHUwMDI2Y29uZmlnZnNfZGVudHJ5X29wcyk7IC8qIHRoZSByZXN0IGdldCB0aGF0ICovXG4gXHRzYi1cdTAwM2VzX2RfZmxhZ3MgfD0gRENBQ0hFX0RPTlRDQUNIRTtcbiYjNDM7XG4mIzQzO1x0Y29uZmlnZnNfbGlua19zdWJzeXN0ZW1zKHNiLCBpbmZvKTtcbiYjNDM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4gc3RhdGljIGludCBjb25maWdmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4ge1xuLVx0cmV0dXJuIGdldF90cmVlX3NpbmdsZShmYywgY29uZmlnZnNfZmlsbF9zdXBlcik7XG4mIzQzO1x0c3RydWN0IG5ldCAqbmV0X25zID0gZmMtXHUwMDNlZnNfcHJpdmF0ZTtcbiYjNDM7XHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbztcbiYjNDM7XHRpbnQgZXJyO1xuJiM0MztcbiYjNDM7XHRpbmZvID0gY29uZmlnZnNfZ2V0X3N1cGVyX2luZm8obmV0X25zKTtcbiYjNDM7XHRpZiAoSVNfRVJSKGluZm8pKVxuJiM0MztcdFx0cmV0dXJuIFBUUl9FUlIoaW5mbyk7XG4mIzQzO1xuJiM0MztcdGVyciA9IGdldF90cmVlX2tleWVkKGZjLCBjb25maWdmc19maWxsX3N1cGVyLCBpbmZvKTtcbiYjNDM7XHRpZiAoZXJyIFx1MDAyNlx1MDAyNiBmYy1cdTAwM2VzX2ZzX2luZm8pXG4mIzQzO1x0XHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBjb25maWdmc19mc19jb250ZXh0X2ZyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG5ldCAqbmV0X25zID0gZmMtXHUwMDNlZnNfcHJpdmF0ZTtcbiYjNDM7XG4mIzQzO1x0ZmMtXHUwMDNlZnNfcHJpdmF0ZSA9IE5VTEw7XG4mIzQzO1x0cHV0X25ldChuZXRfbnMpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBjb25maWdmc19jb250ZXh0X29wcyA9IHtcbiBcdC5nZXRfdHJlZVx0PSBjb25maWdmc19nZXRfdHJlZSxcbiYjNDM7XHQuZnJlZVx0XHQ9IGNvbmZpZ2ZzX2ZzX2NvbnRleHRfZnJlZSxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgY29uZmlnZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiB7XG4mIzQzO1x0c3RydWN0IG5ldCAqbmV0X25zID0gZ2V0X25ldChjdXJyZW50LVx1MDAzZW5zcHJveHktXHUwMDNlbmV0X25zKTtcbiYjNDM7XG4mIzQzO1x0ZmMtXHUwMDNlZnNfcHJpdmF0ZSA9IG5ldF9ucztcbiBcdGZjLVx1MDAzZW9wcyA9IFx1MDAyNmNvbmZpZ2ZzX2NvbnRleHRfb3BzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBjb25maWdmc19raWxsX3NiKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyA9IHNiLVx1MDAzZXNfZnNfaW5mbztcbiYjNDM7XG4mIzQzO1x0Y29uZmlnZnNfdW5saW5rX3N1YnN5c3RlbXMoc2IsIGluZm8pO1xuJiM0MztcdGtpbGxfYW5vbl9zdXBlcihzYik7XG4mIzQzO1x0Y29uZmlnZnNfcHV0X3N1cGVyX2luZm8oaW5mbyk7XG4mIzQzO1x0c2ItXHUwMDNlc19mc19pbmZvID0gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgY29uZmlnZnNfZnNfdHlwZSA9IHtcbiBcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuIFx0Lm5hbWVcdFx0PSBcJiMzNDtjb25maWdmc1wmIzM0OyxcbiBcdC5pbml0X2ZzX2NvbnRleHQgPSBjb25maWdmc19pbml0X2ZzX2NvbnRleHQsXG4tXHQua2lsbF9zYlx0PSBraWxsX2Fub25fc3VwZXIsXG4mIzQzO1x0LmtpbGxfc2JcdD0gY29uZmlnZnNfa2lsbF9zYixcbiYjNDM7XHQuZnNfZmxhZ3NcdD0gRlNfVVNFUk5TX01PVU5ULFxuIH07XG4gTU9EVUxFX0FMSUFTX0ZTKFwmIzM0O2NvbmZpZ2ZzXCYjMzQ7KTtcbiBcbi1zdHJ1Y3QgZGVudHJ5ICpjb25maWdmc19waW5fZnModm9pZClcbiYjNDM7c3RydWN0IGRlbnRyeSAqY29uZmlnZnNfcGluX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4ge1xuLVx0aW50IGVyciA9IHNpbXBsZV9waW5fZnMoXHUwMDI2Y29uZmlnZnNfZnNfdHlwZSwgXHUwMDI2Y29uZmlnZnNfbW91bnQsXG4tXHRcdFx0ICAgICBcdTAwMjZjb25maWdmc19tbnRfY291bnQpO1xuLVx0cmV0dXJuIGVyciA/IEVSUl9QVFIoZXJyKSA6IGNvbmZpZ2ZzX21vdW50LVx1MDAzZW1udF9yb290O1xuJiM0MztcdHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvO1xuJiM0MztcbiYjNDM7XHRzcGluX2xvY2soXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xuJiM0MztcdGlmIChzYikge1xuJiM0MztcdFx0c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKnJvb3QgPSBjb25maWdmc19yb290O1xuJiM0MztcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gc2ItXHUwMDNlc19yb290O1xuJiM0MztcbiYjNDM7XHRcdGluZm8gPSBzYi1cdTAwM2VzX2ZzX2luZm87XG4mIzQzO1x0XHRpZiAoIWluZm8tXHUwMDNlbW50KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB2ZnNtb3VudCAqbW50O1xuJiM0MztcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xuJiM0MztcdFx0XHRtbnQgPSBtbnRfY2xvbmVfZGlyZWN0KHJvb3QtXHUwMDNlbW50LCBkZW50cnkpO1xuJiM0MztcdFx0XHRpZiAoSVNfRVJSKG1udCkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIEVSUl9DQVNUKG1udCk7XG4mIzQzO1x0XHRcdHNwaW5fbG9jayhcdTAwMjZjb25maWdmc19waW5fbG9jayk7XG4mIzQzO1x0XHRcdGluZm8tXHUwMDNlbW50ID0gbW50O1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0bW50Z2V0KGluZm8tXHUwMDNlbW50KTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aW5mbyA9IGNvbmZpZ2ZzX3Jvb3Q7XG4mIzQzO1x0XHRpZiAoIWluZm8tXHUwMDNlbW50KSB7XG4mIzQzO1x0XHRcdHN0cnVjdCB2ZnNtb3VudCAqbW50O1xuJiM0MztcbiYjNDM7XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xuJiM0MztcdFx0XHRtbnQgPSB2ZnNfa2Vybl9tb3VudChcdTAwMjZjb25maWdmc19mc190eXBlLCBTQl9LRVJOTU9VTlQsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGNvbmZpZ2ZzX2ZzX3R5cGUubmFtZSwgTlVMTCk7XG4mIzQzO1x0XHRcdGlmIChJU19FUlIobW50KSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gRVJSX0NBU1QobW50KTtcbiYjNDM7XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNmNvbmZpZ2ZzX3Bpbl9sb2NrKTtcbiYjNDM7XHRcdFx0aW5mby1cdTAwM2VtbnQgPSBtbnQ7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRtbnRnZXQoaW5mby1cdTAwM2VtbnQpO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHRpbmZvLVx1MDAzZW1udF9jb3VudCYjNDM7JiM0Mzs7XG4mIzQzO1x0c3Bpbl91bmxvY2soXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xuJiM0MztcdHJldHVybiBpbmZvLVx1MDAzZW1udC1cdTAwM2VtbnRfcm9vdDtcbiB9XG4gXG4tdm9pZCBjb25maWdmc19yZWxlYXNlX2ZzKHZvaWQpXG4mIzQzO3ZvaWQgY29uZmlnZnNfcmVsZWFzZV9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbi1cdHNpbXBsZV9yZWxlYXNlX2ZzKFx1MDAyNmNvbmZpZ2ZzX21vdW50LCBcdTAwMjZjb25maWdmc19tbnRfY291bnQpO1xuJiM0MztcdHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvID0gY29uZmlnZnNfcm9vdDtcbiYjNDM7XHRzdHJ1Y3QgdmZzbW91bnQgKm1udDtcbiYjNDM7XG4mIzQzO1x0c3Bpbl9sb2NrKFx1MDAyNmNvbmZpZ2ZzX3Bpbl9sb2NrKTtcbiYjNDM7XHRpZiAoc2IpXG4mIzQzO1x0XHRpbmZvID0gc2ItXHUwMDNlc19mc19pbmZvO1xuJiM0MztcdG1udCA9IGluZm8tXHUwMDNlbW50O1xuJiM0MztcdGlmICgtLWluZm8tXHUwMDNlbW50X2NvdW50KVxuJiM0MztcdFx0aW5mby1cdTAwM2VtbnQgPSBOVUxMO1xuJiM0MztcdHNwaW5fdW5sb2NrKFx1MDAyNmNvbmZpZ2ZzX3Bpbl9sb2NrKTtcbiYjNDM7XHRtbnRwdXQobW50KTtcbiB9XG4gXG4mIzQzO3N0cnVjdCBuZXQgKmNvbmZpZ2ZzX25zX2Zyb21fZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXApXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyA9IGNvbmZpZ2ZzX3Jvb3Q7XG4mIzQzO1x0c3RydWN0IG5ldCAqbmV0X25zID0gTlVMTDtcbiYjNDM7XG4mIzQzO1x0aWYgKGdyb3VwKSB7XG4mIzQzO1x0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBncm91cC1cdTAwM2VjZ19pdGVtLmNpX2RlbnRyeTtcbiYjNDM7XG4mIzQzO1x0XHRpbmZvID0gZGVudHJ5LVx1MDAzZWRfc2ItXHUwMDNlc19mc19pbmZvO1xuJiM0MztcdFx0aWYgKGluZm8pXG4mIzQzO1x0XHRcdG5ldF9ucyA9IGluZm8tXHUwMDNlbmV0X25zO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gbmV0X25zO1xuJiM0Mzt9XG4mIzQzO0VYUE9SVF9TWU1CT0xfR1BMKGNvbmZpZ2ZzX25zX2Zyb21fZ3JvdXApO1xuIFxuIHN0YXRpYyBpbnQgX19pbml0IGNvbmZpZ2ZzX2luaXQodm9pZClcbiB7XG5AQCAtMTQzLDE4ICYjNDM7MzAyLDI3IEBAIHN0YXRpYyBpbnQgX19pbml0IGNvbmZpZ2ZzX2luaXQodm9pZClcbiBcdGlmICghY29uZmlnZnNfZGlyX2NhY2hlcClcbiBcdFx0Z290byBvdXQ7XG4gXG4mIzQzO1x0Y29uZmlnZnNfcm9vdCA9IGNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKFx1MDAyNmluaXRfbmV0KTtcbiYjNDM7XHRpZiAoSVNfRVJSKGNvbmZpZ2ZzX3Jvb3QpKSB7XG4mIzQzO1x0XHRlcnIgPSBQVFJfRVJSKGNvbmZpZ2ZzX3Jvb3QpO1xuJiM0MztcdFx0Z290byBvdXQyO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRlcnIgPSBzeXNmc19jcmVhdGVfbW91bnRfcG9pbnQoa2VybmVsX2tvYmosIFwmIzM0O2NvbmZpZ1wmIzM0Oyk7XG4gXHRpZiAoZXJyKVxuLVx0XHRnb3RvIG91dDI7XG4mIzQzO1x0XHRnb3RvIG91dDM7XG4gXG4gXHRlcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKFx1MDAyNmNvbmZpZ2ZzX2ZzX3R5cGUpO1xuIFx0aWYgKGVycilcbi1cdFx0Z290byBvdXQzO1xuJiM0MztcdFx0Z290byBvdXQ0O1xuIFxuIFx0cmV0dXJuIDA7XG4tb3V0MzpcbiYjNDM7b3V0NDpcbiBcdHByX2VycihcJiMzNDtVbmFibGUgdG8gcmVnaXN0ZXIgZmlsZXN5c3RlbSFcXG5cJiMzNDspO1xuIFx0c3lzZnNfcmVtb3ZlX21vdW50X3BvaW50KGtlcm5lbF9rb2JqLCBcJiMzNDtjb25maWdcJiMzNDspO1xuJiM0MztvdXQzOlxuJiM0MztcdGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKGNvbmZpZ2ZzX3Jvb3QpO1xuJiM0MztcdGNvbmZpZ2ZzX3Jvb3QgPSBOVUxMO1xuIG91dDI6XG4gXHRrbWVtX2NhY2hlX2Rlc3Ryb3koY29uZmlnZnNfZGlyX2NhY2hlcCk7XG4gXHRjb25maWdmc19kaXJfY2FjaGVwID0gTlVMTDtcbkBAIC0xNjYsNiAmIzQzOzMzNCw4IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBjb25maWdmc19leGl0KHZvaWQpXG4ge1xuIFx0dW5yZWdpc3Rlcl9maWxlc3lzdGVtKFx1MDAyNmNvbmZpZ2ZzX2ZzX3R5cGUpO1xuIFx0c3lzZnNfcmVtb3ZlX21vdW50X3BvaW50KGtlcm5lbF9rb2JqLCBcJiMzNDtjb25maWdcJiMzNDspO1xuJiM0MztcdGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKGNvbmZpZ2ZzX3Jvb3QpO1xuJiM0MztcdGNvbmZpZ2ZzX3Jvb3QgPSBOVUxMO1xuIFx0a21lbV9jYWNoZV9kZXN0cm95KGNvbmZpZ2ZzX2Rpcl9jYWNoZXApO1xuIFx0Y29uZmlnZnNfZGlyX2NhY2hlcCA9IE5VTEw7XG4gfVxuZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmNcbmluZGV4IDNkNWNkNWJmM2IwNTM3Li5lN2FiYmY2MzJjYzcwZCAxMDA2NDRcbi0tLSBhL2ZzL25hbWVzcGFjZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1lc3BhY2UuY1xuQEAgLTE0ODIsNiAmIzQzOzE0ODIsMTcgQEAgc3RydWN0IHZmc21vdW50ICptbnRfY2xvbmVfaW50ZXJuYWwoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4gXHRyZXR1cm4gXHUwMDI2cC1cdTAwM2VtbnQ7XG4gfVxuIFxuJiM0MztzdHJ1Y3QgdmZzbW91bnQgKm1udF9jbG9uZV9kaXJlY3Qoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtb3VudCAqcDtcbiYjNDM7XG4mIzQzO1x0cCA9IGNsb25lX21udChyZWFsX21vdW50KG1udCksIGRlbnRyeSwgQ0xfU0xBVkUpO1xuJiM0MztcdGlmIChJU19FUlIocCkpXG4mIzQzO1x0XHRyZXR1cm4gRVJSX0NBU1QocCk7XG4mIzQzO1x0cC1cdTAwM2VtbnQubW50X2ZsYWdzIHw9IE1OVF9JTlRFUk5BTDtcbiYjNDM7XHRyZXR1cm4gXHUwMDI2cC1cdTAwM2VtbnQ7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBSZXR1cm5zIHRoZSBtb3VudCB3aGljaCBlaXRoZXIgaGFzIHRoZSBzcGVjaWZpZWQgbW50X2lkLCBvciBoYXMgdGhlIG5leHRcbiAgKiBzbWFsbGVzdCBpZCBhZmVyIHRoZSBzcGVjaWZpZWQgb25lLlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY29uZmlnZnMuaCBiL2luY2x1ZGUvbGludXgvY29uZmlnZnMuaFxuaW5kZXggZWY2NWM3NWJlZWFhZDguLjc2ZTBiYjFhNzJiOWRiIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9jb25maWdmcy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmhcbkBAIC0yNCw2ICYjNDM7MjQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZSAgIC8qIHN0cnVjdCBsaXN0X2hlYWQgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rcmVmLmhcdTAwM2UgICAvKiBzdHJ1Y3Qga3JlZiAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2UgIC8qIHN0cnVjdCBtdXRleCAqL1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvbmV0X25hbWVzcGFjZS5oXHUwMDNlIC8qIHN0cnVjdCBuZXQgKi9cbiBcbiAjZGVmaW5lIENPTkZJR0ZTX0lURU1fTkFNRV9MRU5cdDIwXG4gXG5AQCAtMjI2LDggJiM0MzsyMjcsMTMgQEAgc3RydWN0IGNvbmZpZ2ZzX2dyb3VwX29wZXJhdGlvbnMge1xuIH07XG4gXG4gc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSB7XG4mIzQzO1x0c3RydWN0IGxpc3RfaGVhZFx0c3VfbGluaztcbiBcdHN0cnVjdCBjb25maWdfZ3JvdXBcdHN1X2dyb3VwO1xuIFx0c3RydWN0IG11dGV4XHRcdHN1X211dGV4O1xuJiM0MztcdGludCAoKmZpbGxfc3Vic3lzdGVtKShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBuZXQgKm5ldF9ucyk7XG4mIzQzO1x0dm9pZCAoKmNsZWFyX3N1YnN5c3RlbSkoc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzLFxuJiM0MztcdFx0XHRcdHN0cnVjdCBuZXQgKm5ldF9ucyk7XG4gfTtcbiBcbiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnRvX2NvbmZpZ2ZzX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cClcbkBAIC0yNTIsNiAmIzQzOzI1OCw4IEBAIGNvbmZpZ2ZzX3JlZ2lzdGVyX2RlZmF1bHRfZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAqcGFyZW50X2dyb3VwLFxuIFx0XHRcdFx0Y29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKml0ZW1fdHlwZSk7XG4gdm9pZCBjb25maWdmc191bnJlZ2lzdGVyX2RlZmF1bHRfZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXApO1xuIFxuJiM0MztzdHJ1Y3QgbmV0ICpjb25maWdmc19uc19mcm9tX2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKTtcbiYjNDM7XG4gLyogVGhlc2UgZnVuY3Rpb25zIGNhbiBzbGVlcCBhbmQgY2FuIGFsbG9jIHdpdGggR0ZQX0tFUk5FTCAqL1xuIC8qIFdBUk5JTkc6IFRoZXNlIGNhbm5vdCBiZSBjYWxsZWQgdW5kZXJuZWF0aCBjb25maWdmcyBjYWxsYmFja3MhISAqL1xuIGludCBjb25maWdmc19kZXBlbmRfaXRlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb3VudC5oIGIvaW5jbHVkZS9saW51eC9tb3VudC5oXG5pbmRleCBhY2ZlN2VmODZhMWIzZi4uN2U3ZTdkNjZjMzAyNGIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21vdW50LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvbW91bnQuaFxuQEAgLTc1LDYgJiM0Mzs3NSw3IEBAIGV4dGVybiB2b2lkIG1udF9kcm9wX3dyaXRlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpO1xuIGV4dGVybiB2b2lkIG1udHB1dChzdHJ1Y3QgdmZzbW91bnQgKm1udCk7XG4gZXh0ZXJuIHN0cnVjdCB2ZnNtb3VudCAqbW50Z2V0KHN0cnVjdCB2ZnNtb3VudCAqbW50KTtcbiBleHRlcm4gdm9pZCBtbnRfbWFrZV9zaG9ydHRlcm0oc3RydWN0IHZmc21vdW50ICptbnQpO1xuJiM0MztleHRlcm4gc3RydWN0IHZmc21vdW50ICptbnRfY2xvbmVfZGlyZWN0KHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIGV4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKm1udF9jbG9uZV9pbnRlcm5hbChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCk7XG4gZXh0ZXJuIGJvb2wgX19tbnRfaXNfcmVhZG9ubHkoY29uc3Qgc3RydWN0IHZmc21vdW50ICptbnQpO1xuIGV4dGVybiBib29sIG1udF9tYXlfc3VpZChzdHJ1Y3QgdmZzbW91bnQgKm1udCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTA6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q09ORklHRlNfRlMmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVQmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVRfTE9PUCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVF9UQ1AmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVRfUkRNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2NvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbSYjMzQ7LAogICAgJiMzNDtjb25maWdmc19saW5rX3N1YnN5c3RlbXMmIzM0OywKICAgICYjMzQ7Y29uZmlnZnNfdW5saW5rX3N1YnN5c3RlbXMmIzM0OywKICAgICYjMzQ7Y29uZmlnZnNfZ2V0X3N1cGVyX2luZm8mIzM0OywKICAgICYjMzQ7Y29uZmlnZnNfZmlsbF9zdXBlciYjMzQ7LAogICAgJiMzNDtudm1ldF9jb25maWdmc19maWxsX3N1YnN5c3RlbSYjMzQ7LAogICAgJiMzNDtudm1ldF9hZGRfZGlzY19zdWJzeXMmIzM0OywKICAgICYjMzQ7bnZtZXRfcG9ydHNfbWFrZSYjMzQ7LAogICAgJiMzNDtudm1ldF9zdWJzeXNfbWFrZSYjMzQ7LAogICAgJiMzNDtudm1ldF9hZGRfcG9ydF9saXN0JiMzNDssCiAgICAmIzM0O252bWV0X2RlbF9wb3J0X2xpc3QmIzM0OywKICAgICYjMzQ7bnZtZXRfcm9vdF9kaXNjb3ZlcnlfbnFuX3N0b3JlJiMzNDssCiAgICAmIzM0O252bWV0X2V4ZWN1dGVfZGlzY19nZXRfbG9nX3BhZ2UmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXR3b3JrIG5hbWVzcGFjZSBzdXBwb3J0IGZvciBjb25maWdmcyBhbmQgdGhlIE5WTWUtb0YgdGFyZ2V0LiBJdCBtb2RpZmllcyBjb3JlIGNvbmZpZ2ZzIGxvZ2ljIHRvIHN1cHBvcnQgbXVsdGlwbGUgc3VwZXJibG9ja3MgcGVyIG5ldHdvcmsgbmFtZXNwYWNlIGFuZCB1cGRhdGVzIHRoZSBOVk1lIHRhcmdldCB0byB1c2UgcGVyLW5hbWVzcGFjZSBkaXNjb3Zlcnkgc3Vic3lzdGVtcyBhbmQgcG9ydHMuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGtlcm5lbCBjb2RlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwMTU2OTFmYmEzN2NjMmI4NGIyZGJmMjRiZDc2OTJiNTVmNGE2MmM0CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFR1ZSBKdW4gMjMgMTA6MTA6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMgYi9kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMKaW5kZXggYjg4Zjg5N2YwNmUyNWUuLjc2MzZhYzM3NzNiNDAwIDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jCkBAIC0yNSw4ICYjNDM7MjUsNyBAQAogc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG52bWV0X2hvc3RfdHlwZTsKIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBudm1ldF9zdWJzeXNfdHlwZTsKIAotc3RhdGljIExJU1RfSEVBRChudm1ldF9wb3J0c19saXN0KTsKLXN0cnVjdCBsaXN0X2hlYWQgKm52bWV0X3BvcnRzID0gJmFtcDtudm1ldF9wb3J0c19saXN0OwomIzQzO3N0YXRpYyBERUZJTkVfWEFSUkFZKG52bWV0X3BvcnRzX3hhKTsKIAogc3RydWN0IG52bWV0X3R5cGVfbmFtZV9tYXAgewogCXU4CQl0eXBlOwpAQCAtNTEsNiAmIzQzOzUwLDcwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbnZtZXRfdHlwZV9uYW1lX21hcCBudm1ldF9hZGRyX2ZhbWlseVtdID0gewogCXsgTlZNRl9BRERSX0ZBTUlMWV9MT09QLAkmIzM0O2xvb3AmIzM0OyB9LAogfTsKIAomIzQzO3U2NCBudm1ldF9nZXRfbnNfaWQoc3RydWN0IG5ldCAqbmV0X25zKQomIzQzO3sKJiM0MzsJc3RydWN0IG5zX2NvbW1vbiAqbnM7CiYjNDM7CiYjNDM7CWlmICghbmV0X25zKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CW5zID0gdG9fbnNfY29tbW9uKG5ldF9ucyk7CiYjNDM7CXJldHVybiBuZXRfbnMgPT0gJmFtcDtpbml0X25ldCA/IDAgOiBucy0mZ3Q7bnNfaWQ7CiYjNDM7fQomIzQzOwomIzQzO3N0cnVjdCBsaXN0X2hlYWQgKm52bWV0X2dldF9wb3J0X2xpc3Qoc3RydWN0IG5ldCAqbmV0X25zKQomIzQzO3sKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCAqcG9ydF9saXN0OwomIzQzOwl1NjQgbnNfaWQgPSBudm1ldF9nZXRfbnNfaWQobmV0X25zKTsKJiM0MzsKJiM0MzsJcG9ydF9saXN0ID0geGFfbG9hZCgmYW1wO252bWV0X3BvcnRzX3hhLCBuc19pZCk7CiYjNDM7CXJldHVybiBwb3J0X2xpc3Q7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbnQgbnZtZXRfYWRkX3BvcnRfbGlzdChzdHJ1Y3QgbnZtZXRfcG9ydCAqcCkKJiM0Mzt7CiYjNDM7CXU2NCBuc19pZCA9IG52bWV0X2dldF9uc19pZChwLSZndDtuZXRfbnMpOwomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3J0X2xpc3Q7CiYjNDM7CWludCBlcnIgPSAwOwomIzQzOwomIzQzOwl4YV9sb2NrKCZhbXA7bnZtZXRfcG9ydHNfeGEpOwomIzQzOwlwb3J0X2xpc3QgPSB4YV9sb2FkKCZhbXA7bnZtZXRfcG9ydHNfeGEsIG5zX2lkKTsKJiM0MzsJaWYgKCFwb3J0X2xpc3QpIHsKJiM0MzsJCXBvcnRfbGlzdCA9IGt6YWxsb2Nfb2JqKCpwb3J0X2xpc3QpOwomIzQzOwkJaWYgKCFwb3J0X2xpc3QpIHsKJiM0MzsJCQllcnIgPSAtRU5PTUVNOwomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCX0KJiM0MzsJCUlOSVRfTElTVF9IRUFEKHBvcnRfbGlzdCk7CiYjNDM7CQllcnIgPSBfX3hhX2luc2VydCgmYW1wO252bWV0X3BvcnRzX3hhLCBuc19pZCwKJiM0MzsJCQkJICBwb3J0X2xpc3QsIEdGUF9LRVJORUwpOwomIzQzOwkJaWYgKGVyciAmbHQ7IDApIHsKJiM0MzsJCQlrZnJlZShwb3J0X2xpc3QpOwomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlsaXN0X2FkZCgmYW1wO3AtJmd0O2dsb2JhbF9lbnRyeSwgcG9ydF9saXN0KTsKJiM0MztvdXRfdW5sb2NrOgomIzQzOwl4YV91bmxvY2soJmFtcDtudm1ldF9wb3J0c194YSk7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG52bWV0X2RlbF9wb3J0X2xpc3Qoc3RydWN0IG52bWV0X3BvcnQgKnApCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGlzdF9oZWFkICpwb3J0X2xpc3Q7CiYjNDM7CXU2NCBuc19pZCA9IG52bWV0X2dldF9uc19pZChwLSZndDtuZXRfbnMpOwomIzQzOwomIzQzOwl4YV9sb2NrKCZhbXA7bnZtZXRfcG9ydHNfeGEpOwomIzQzOwlwb3J0X2xpc3QgPSB4YV9sb2FkKCZhbXA7bnZtZXRfcG9ydHNfeGEsIG5zX2lkKTsKJiM0MzsJaWYgKCFXQVJOX09OKCFwb3J0X2xpc3QpKSB7CiYjNDM7CQlsaXN0X2RlbF9pbml0KCZhbXA7cC0mZ3Q7Z2xvYmFsX2VudHJ5KTsKJiM0MzsJCWlmIChsaXN0X2VtcHR5KHBvcnRfbGlzdCkpIHsKJiM0MzsJCQlfX3hhX2VyYXNlKCZhbXA7bnZtZXRfcG9ydHNfeGEsIG5zX2lkKTsKJiM0MzsJCQlrZnJlZShwb3J0X2xpc3QpOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CXhhX3VubG9jaygmYW1wO252bWV0X3BvcnRzX3hhKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBudm1ldF9pc19wb3J0X2VuYWJsZWQoc3RydWN0IG52bWV0X3BvcnQgKnAsIGNvbnN0IGNoYXIgKmNhbGxlcikKIHsKIAlpZiAocC0mZ3Q7ZW5hYmxlZCkKQEAgLTE3MTcsNiAmIzQzOzE3ODAsNyBAQCBzdGF0aWMgdm9pZCBudm1ldF9zdWJzeXNfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCiB7CiAJc3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzID0gdG9fc3Vic3lzKGl0ZW0pOwogCiYjNDM7CWNvbmZpZ2ZzX3JlbW92ZV9kZWZhdWx0X2dyb3VwcygmYW1wO3N1YnN5cy0mZ3Q7Z3JvdXApOwogCW52bWV0X3N1YnN5c19kZWxfY3RybHMoc3Vic3lzKTsKIAludm1ldF9zdWJzeXNfcHV0KHN1YnN5cyk7CiB9CkBAIC0xNzM0LDE5ICYjNDM7MTc5OCwyMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgbnZtZXRfc3Vic3lzX3R5cGUgPSB7CiBzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbnZtZXRfc3Vic3lzX21ha2Uoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsCiAJCWNvbnN0IGNoYXIgKm5hbWUpCiB7Ci0Jc3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzOwomIzQzOwlzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMsICpkaXNjX3N1YnN5czsKJiM0MzsJc3RydWN0IG5ldCAqbmV0X25zID0gY29uZmlnZnNfbnNfZnJvbV9ncm91cChncm91cCk7CiAKIAlpZiAoc3lzZnNfc3RyZXEobmFtZSwgTlZNRV9ESVNDX1NVQlNZU19OQU1FKSkgewogCQlwcl9lcnIoJiMzNDtjYW4mIzM5O3QgY3JlYXRlIGRpc2NvdmVyeSBzdWJzeXN0ZW0gdGhyb3VnaCBjb25maWdmc1xuJiMzNDspOwogCQlyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTsKIAl9CiAKLQlpZiAoc3lzZnNfc3RyZXEobmFtZSwgbnZtZXRfZGlzY19zdWJzeXMtJmd0O3N1YnN5c25xbikpIHsKJiM0MzsJZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMobmV0X25zKTsKJiM0MzsJaWYgKCFkaXNjX3N1YnN5cykKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwomIzQzOwlpZiAoc3lzZnNfc3RyZXEobmFtZSwgZGlzY19zdWJzeXMtJmd0O3N1YnN5c25xbikpIHsKIAkJcHJfZXJyKCYjMzQ7Y2FuJiMzOTt0IGNyZWF0ZSBzdWJzeXN0ZW0gdXNpbmcgdW5pcXVlIGRpc2NvdmVyeSBOUU5cbiYjMzQ7KTsKIAkJcmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7CiAJfQogCi0Jc3Vic3lzID0gbnZtZXRfc3Vic3lzX2FsbG9jKG5hbWUsIE5WTUVfTlFOX05WTUUpOwomIzQzOwlzdWJzeXMgPSBudm1ldF9zdWJzeXNfYWxsb2MobmFtZSwgTlZNRV9OUU5fTlZNRSwgbmV0X25zKTsKIAlpZiAoSVNfRVJSKHN1YnN5cykpCiAJCXJldHVybiBFUlJfQ0FTVChzdWJzeXMpOwogCkBAIC0yMDA0LDggJiM0MzsyMDcyLDkgQEAgc3RhdGljIHZvaWQgbnZtZXRfcG9ydF9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSkKIAogCS8qIExldCBpbmZsaWdodCBjb250cm9sbGVycyB0ZWFyZG93biBjb21wbGV0ZSAqLwogCWZsdXNoX3dvcmtxdWV1ZShudm1ldF93cSk7Ci0JbGlzdF9kZWwoJmFtcDtwb3J0LSZndDtnbG9iYWxfZW50cnkpOwomIzQzOwludm1ldF9kZWxfcG9ydF9saXN0KHBvcnQpOwogCiYjNDM7CWNvbmZpZ2ZzX3JlbW92ZV9kZWZhdWx0X2dyb3VwcygmYW1wO3BvcnQtJmd0O2dyb3VwKTsKIAlrZXlfcHV0KHBvcnQtJmd0O2tleXJpbmcpOwogCWtmcmVlKHBvcnQtJmd0O2FuYV9zdGF0ZSk7CiAJa2ZyZWUocG9ydCk7CkBAIC0yMDU3LDYgJiM0MzsyMTI2LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwICpudm1ldF9wb3J0c19tYWtlKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwLAogCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsKIAl9CiAKJiM0MzsJcG9ydC0mZ3Q7bmV0X25zID0gY29uZmlnZnNfbnNfZnJvbV9ncm91cChncm91cCk7CiYjNDM7CWlmICghcG9ydC0mZ3Q7bmV0X25zKQomIzQzOwkJcG9ydC0mZ3Q7bmV0X25zID0gZ2V0X25ldCgmYW1wO2luaXRfbmV0KTsKJiM0MzsKIAlpZiAoSVNfRU5BQkxFRChDT05GSUdfTlZNRV9UQVJHRVRfVENQX1RMUykgJmFtcDsmYW1wOyBudm1lX2tleXJpbmdfaWQoKSkgewogCQlwb3J0LSZndDtrZXlyaW5nID0ga2V5X2xvb2t1cChudm1lX2tleXJpbmdfaWQoKSk7CiAJCWlmIChJU19FUlIocG9ydC0mZ3Q7a2V5cmluZykpIHsKQEAgLTIwNzIsNyAmIzQzOzIxNDUsNyBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbnZtZXRfcG9ydHNfbWFrZShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCwKIAkJCXBvcnQtJmd0O2FuYV9zdGF0ZVtpXSA9IE5WTUVfQU5BX0lOQUNDRVNTSUJMRTsKIAl9CiAKLQlsaXN0X2FkZCgmYW1wO3BvcnQtJmd0O2dsb2JhbF9lbnRyeSwgJmFtcDtudm1ldF9wb3J0c19saXN0KTsKJiM0MzsJbnZtZXRfYWRkX3BvcnRfbGlzdChwb3J0KTsKIAogCUlOSVRfTElTVF9IRUFEKCZhbXA7cG9ydC0mZ3Q7ZW50cnkpOwogCUlOSVRfTElTVF9IRUFEKCZhbXA7cG9ydC0mZ3Q7c3Vic3lzdGVtcyk7CkBAIC0yMTE5LDkgJiM0MzsyMTkyLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG52bWV0X3BvcnRzX3R5cGUgPSB7CiAJLmN0X293bmVyCQk9IFRISVNfTU9EVUxFLAogfTsKIAotc3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgbnZtZXRfc3Vic3lzdGVtc19ncm91cDsKLXN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwIG52bWV0X3BvcnRzX2dyb3VwOwotCiAjaWZkZWYgQ09ORklHX05WTUVfVEFSR0VUX0FVVEgKIHN0YXRpYyBzc2l6ZV90IG52bWV0X2hvc3RfZGhjaGFwX2tleV9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwKIAkJY2hhciAqcGFnZSkKQEAgLTIzMDMsMTkgJiM0MzsyMzczLDI2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBudm1ldF9ob3N0c190eXBlID0gewogCS5jdF9vd25lcgkJPSBUSElTX01PRFVMRSwKIH07CiAKLXN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwIG52bWV0X2hvc3RzX2dyb3VwOwotCiBzdGF0aWMgc3NpemVfdCBudm1ldF9yb290X2Rpc2NvdmVyeV9ucW5fc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCiAJCQkJCSAgICAgY2hhciAqcGFnZSkKIHsKLQlyZXR1cm4gc25wcmludGYocGFnZSwgUEFHRV9TSVpFLCAmIzM0OyVzXG4mIzM0OywgbnZtZXRfZGlzY19zdWJzeXMtJmd0O3N1YnN5c25xbik7CiYjNDM7CXN0cnVjdCBuZXQgKm5ldF9ucyA9IGNvbmZpZ2ZzX25zX2Zyb21fZ3JvdXAodG9fY29uZmlnX2dyb3VwKGl0ZW0pKTsKJiM0MzsJc3RydWN0IG52bWV0X3N1YnN5cyAqZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMobmV0X25zKTsKJiM0MzsKJiM0MzsJaWYgKCFkaXNjX3N1YnN5cykKJiM0MzsJCXJldHVybiAtRU5PRU5UOwomIzQzOwlyZXR1cm4gc25wcmludGYocGFnZSwgUEFHRV9TSVpFLCAmIzM0OyVzXG4mIzM0OywgZGlzY19zdWJzeXMtJmd0O3N1YnN5c25xbik7CiB9CiAKIHN0YXRpYyBzc2l6ZV90IG52bWV0X3Jvb3RfZGlzY292ZXJ5X25xbl9zdG9yZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sCiAJCWNvbnN0IGNoYXIgKnBhZ2UsIHNpemVfdCBjb3VudCkKIHsKJiM0MzsJc3RydWN0IGNvbmZpZ19pdGVtICpzdWJzeXN0ZW1zX2l0ZW07CiYjNDM7CXN0cnVjdCBjb25maWdfZ3JvdXAgKnN1YnN5c3RlbXNfZ3JvdXA7CiYjNDM7CXN0cnVjdCBuZXQgKm5ldF9ucyA9IGNvbmZpZ2ZzX25zX2Zyb21fZ3JvdXAodG9fY29uZmlnX2dyb3VwKGl0ZW0pKTsKJiM0MzsJc3RydWN0IG52bWV0X3N1YnN5cyAqZGlzY19zdWJzeXM7CiAJc3RydWN0IGxpc3RfaGVhZCAqZW50cnk7Ci0JY2hhciAqb2xkX25xbiwgKm5ld19ucW47CiYjNDM7CWNoYXIgKm9sZF9ucW4gPSBOVUxMLCAqbmV3X25xbjsKIAlzaXplX3QgbGVuOwogCiAJbGVuID0gc3RyY3NwbihwYWdlLCAmIzM0O1xuJiMzNDspOwpAQCAtMjMyNyw3ICYjNDM7MjQwNCwxNCBAQCBzdGF0aWMgc3NpemVfdCBudm1ldF9yb290X2Rpc2NvdmVyeV9ucW5fc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLAogCQlyZXR1cm4gLUVOT01FTTsKIAogCWRvd25fd3JpdGUoJmFtcDtudm1ldF9jb25maWdfc2VtKTsKLQlsaXN0X2Zvcl9lYWNoKGVudHJ5LCAmYW1wO252bWV0X3N1YnN5c3RlbXNfZ3JvdXAuY2dfY2hpbGRyZW4pIHsKJiM0MzsJc3Vic3lzdGVtc19pdGVtID0gY29uZmlnX2dyb3VwX2ZpbmRfaXRlbSh0b19jb25maWdfZ3JvdXAoaXRlbSksICYjMzQ7c3Vic3lzdGVtcyYjMzQ7KTsKJiM0MzsJaWYgKFdBUk5fT04oIXN1YnN5c3RlbXNfaXRlbSkpIHsKJiM0MzsJCWtmcmVlKG5ld19ucW4pOwomIzQzOwkJdXBfd3JpdGUoJmFtcDtudm1ldF9jb25maWdfc2VtKTsKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwl9CiYjNDM7CXN1YnN5c3RlbXNfZ3JvdXAgPSB0b19jb25maWdfZ3JvdXAoc3Vic3lzdGVtc19pdGVtKTsKJiM0MzsJbGlzdF9mb3JfZWFjaChlbnRyeSwgJmFtcDtzdWJzeXN0ZW1zX2dyb3VwLSZndDtjZ19jaGlsZHJlbikgewogCQlzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0gPQogCQkJY29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgY29uZmlnX2l0ZW0sIGNpX2VudHJ5KTsKIApAQCAtMjMzOCwxMiAmIzQzOzI0MjIsMTUgQEAgc3RhdGljIHNzaXplX3QgbnZtZXRfcm9vdF9kaXNjb3ZlcnlfbnFuX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSwKIAkJCXJldHVybiAtRUlOVkFMOwogCQl9CiAJfQotCW9sZF9ucW4gPSBudm1ldF9kaXNjX3N1YnN5cy0mZ3Q7c3Vic3lzbnFuOwotCW52bWV0X2Rpc2Nfc3Vic3lzLSZndDtzdWJzeXNucW4gPSBuZXdfbnFuOwomIzQzOwlkaXNjX3N1YnN5cyA9IG52bWV0X2dldF9kaXNjX3N1YnN5cyhuZXRfbnMpOwomIzQzOwlpZiAoZGlzY19zdWJzeXMpIHsKJiM0MzsJCW9sZF9ucW4gPSBkaXNjX3N1YnN5cy0mZ3Q7c3Vic3lzbnFuOwomIzQzOwkJZGlzY19zdWJzeXMtJmd0O3N1YnN5c25xbiA9IG5ld19ucW47CiYjNDM7CX0KIAl1cF93cml0ZSgmYW1wO252bWV0X2NvbmZpZ19zZW0pOwogCiAJa2ZyZWUob2xkX25xbik7Ci0JcmV0dXJuIGxlbjsKJiM0MzsJcmV0dXJuIGRpc2Nfc3Vic3lzID8gbGVuIDogLUVOT0VOVDsKIH0KIAogQ09ORklHRlNfQVRUUihudm1ldF9yb290XywgZGlzY292ZXJ5X25xbik7CkBAIC0yMzU4LDYgJiM0MzsyNDQ1LDY5IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBudm1ldF9yb290X3R5cGUgPSB7CiAJLmN0X293bmVyCQk9IFRISVNfTU9EVUxFLAogfTsKIAomIzQzO3N0YXRpYyBpbnQgbnZtZXRfY29uZmlnZnNfZmlsbF9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzLAomIzQzOwkJCQkJIHN0cnVjdCBuZXQgKm5ldF9ucykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjb25maWdfZ3JvdXAgKnN1YnN5c3RlbXNfZ3JvdXAsICpwb3J0c19ncm91cCwgKmhvc3RzX2dyb3VwOwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwllcnIgPSBudm1ldF9hZGRfZGlzY19zdWJzeXMobmV0X25zKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZXJyOwomIzQzOwomIzQzOwlzdWJzeXN0ZW1zX2dyb3VwID0ga3phbGxvY19vYmooKnN1YnN5c3RlbXNfZ3JvdXApOwomIzQzOwlpZiAoIXN1YnN5c3RlbXNfZ3JvdXApIHsKJiM0MzsJCW52bWV0X2RlbF9kaXNjX3N1YnN5cyhuZXRfbnMpOwomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CX0KJiM0MzsJY29uZmlnX2dyb3VwX2luaXRfdHlwZV9uYW1lKHN1YnN5c3RlbXNfZ3JvdXAsCiYjNDM7CQkJJiMzNDtzdWJzeXN0ZW1zJiMzNDssICZhbXA7bnZtZXRfc3Vic3lzdGVtc190eXBlKTsKJiM0MzsJY29uZmlnZnNfYWRkX2RlZmF1bHRfZ3JvdXAoc3Vic3lzdGVtc19ncm91cCwKJiM0MzsJCQkmYW1wO3N1YnN5cy0mZ3Q7c3VfZ3JvdXApOwomIzQzOwomIzQzOwlwb3J0c19ncm91cCA9IGt6YWxsb2Nfb2JqKCpwb3J0c19ncm91cCk7CiYjNDM7CWlmICghcG9ydHNfZ3JvdXApIHsKJiM0MzsJCWtmcmVlKHN1YnN5c3RlbXNfZ3JvdXApOwomIzQzOwkJbnZtZXRfZGVsX2Rpc2Nfc3Vic3lzKG5ldF9ucyk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwljb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUocG9ydHNfZ3JvdXAsCiYjNDM7CQkJJiMzNDtwb3J0cyYjMzQ7LCAmYW1wO252bWV0X3BvcnRzX3R5cGUpOwomIzQzOwljb25maWdmc19hZGRfZGVmYXVsdF9ncm91cChwb3J0c19ncm91cCwKJiM0MzsJCQkmYW1wO3N1YnN5cy0mZ3Q7c3VfZ3JvdXApOwomIzQzOwomIzQzOwlob3N0c19ncm91cCA9IGt6YWxsb2Nfb2JqKCpob3N0c19ncm91cCk7CiYjNDM7CWlmICghaG9zdHNfZ3JvdXApIHsKJiM0MzsJCWtmcmVlKHBvcnRzX2dyb3VwKTsKJiM0MzsJCWtmcmVlKHN1YnN5c3RlbXNfZ3JvdXApOwomIzQzOwkJbnZtZXRfZGVsX2Rpc2Nfc3Vic3lzKG5ldF9ucyk7CiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsJfQomIzQzOwljb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoaG9zdHNfZ3JvdXAsCiYjNDM7CQkJJiMzNDtob3N0cyYjMzQ7LCAmYW1wO252bWV0X2hvc3RzX3R5cGUpOwomIzQzOwljb25maWdmc19hZGRfZGVmYXVsdF9ncm91cChob3N0c19ncm91cCwKJiM0MzsJCQkmYW1wO3N1YnN5cy0mZ3Q7c3VfZ3JvdXApOwomIzQzOwlzdHJzY3B5KHN1YnN5cy0mZ3Q7c3VfZ3JvdXAuY2dfaXRlbS5jaV9uYW1lYnVmLCAmIzM0O252bWV0JiMzNDssCiYjNDM7CQlzaXplb2Yoc3Vic3lzLSZndDtzdV9ncm91cC5jZ19pdGVtLmNpX25hbWVidWYpKTsKJiM0MzsJc3Vic3lzLSZndDtzdV9ncm91cC5jZ19pdGVtLmNpX3R5cGUgPSAmYW1wO252bWV0X3Jvb3RfdHlwZTsKJiM0MzsKJiM0MzsJcmV0dXJuIDA7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIG52bWV0X2NvbmZpZ2ZzX2NsZWFyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMsCiYjNDM7CQkJCQkgICBzdHJ1Y3QgbmV0ICpuZXRfbnMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgY29uZmlnX2dyb3VwICpnLCAqbjsKJiM0MzsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGcsIG4sICZhbXA7c3Vic3lzLSZndDtzdV9ncm91cC5kZWZhdWx0X2dyb3VwcywKJiM0MzsJCQkJIGdyb3VwX2VudHJ5KSB7CiYjNDM7CQlsaXN0X2RlbCgmYW1wO2ctJmd0O2dyb3VwX2VudHJ5KTsKJiM0MzsJCWNvbmZpZ19pdGVtX3B1dCgmYW1wO2ctJmd0O2NnX2l0ZW0pOwomIzQzOwkJa2ZyZWUoZyk7CiYjNDM7CX0KJiM0MzsJbnZtZXRfZGVsX2Rpc2Nfc3Vic3lzKG5ldF9ucyk7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gbnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtID0gewogCS5zdV9ncm91cCA9IHsKIAkJLmNnX2l0ZW0gPSB7CkBAIC0yMzY1LDMwICYjNDM7MjUxNSwxNCBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBudm1ldF9jb25maWdmc19zdWJzeXN0ZW0gPSB7CiAJCQkuY2lfdHlwZQk9ICZhbXA7bnZtZXRfcm9vdF90eXBlLAogCQl9LAogCX0sCiYjNDM7CS5maWxsX3N1YnN5c3RlbSA9IG52bWV0X2NvbmZpZ2ZzX2ZpbGxfc3Vic3lzdGVtLAomIzQzOwkuY2xlYXJfc3Vic3lzdGVtID0gbnZtZXRfY29uZmlnZnNfY2xlYXJfc3Vic3lzdGVtLAogfTsKIAogaW50IF9faW5pdCBudm1ldF9pbml0X2NvbmZpZ2ZzKHZvaWQpCiB7CiAJaW50IHJldDsKIAotCWNvbmZpZ19ncm91cF9pbml0KCZhbXA7bnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtLnN1X2dyb3VwKTsKLQltdXRleF9pbml0KCZhbXA7bnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtLnN1X211dGV4KTsKLQotCWNvbmZpZ19ncm91cF9pbml0X3R5cGVfbmFtZSgmYW1wO252bWV0X3N1YnN5c3RlbXNfZ3JvdXAsCi0JCQkmIzM0O3N1YnN5c3RlbXMmIzM0OywgJmFtcDtudm1ldF9zdWJzeXN0ZW1zX3R5cGUpOwotCWNvbmZpZ2ZzX2FkZF9kZWZhdWx0X2dyb3VwKCZhbXA7bnZtZXRfc3Vic3lzdGVtc19ncm91cCwKLQkJCSZhbXA7bnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtLnN1X2dyb3VwKTsKLQotCWNvbmZpZ19ncm91cF9pbml0X3R5cGVfbmFtZSgmYW1wO252bWV0X3BvcnRzX2dyb3VwLAotCQkJJiMzNDtwb3J0cyYjMzQ7LCAmYW1wO252bWV0X3BvcnRzX3R5cGUpOwotCWNvbmZpZ2ZzX2FkZF9kZWZhdWx0X2dyb3VwKCZhbXA7bnZtZXRfcG9ydHNfZ3JvdXAsCi0JCQkmYW1wO252bWV0X2NvbmZpZ2ZzX3N1YnN5c3RlbS5zdV9ncm91cCk7Ci0KLQljb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoJmFtcDtudm1ldF9ob3N0c19ncm91cCwKLQkJCSYjMzQ7aG9zdHMmIzM0OywgJmFtcDtudm1ldF9ob3N0c190eXBlKTsKLQljb25maWdmc19hZGRfZGVmYXVsdF9ncm91cCgmYW1wO252bWV0X2hvc3RzX2dyb3VwLAotCQkJJmFtcDtudm1ldF9jb25maWdmc19zdWJzeXN0ZW0uc3VfZ3JvdXApOwotCiAJcmV0ID0gY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtKCZhbXA7bnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtKTsKIAlpZiAocmV0KSB7CiAJCXByX2VycigmIzM0O2NvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbTogJWRcbiYjMzQ7LCByZXQpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmMgYi9kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuYwppbmRleCA2MmRkNTliOWFhNGYxYy4uMzk5ODliOGJhZTkyZjggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jCkBAIC0xNzk4LDIyICYjNDM7MTc5OCwyNyBAQCBzdGF0aWMgc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfZmluZF9nZXRfc3Vic3lzKHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0LAogCQljb25zdCBjaGFyICpzdWJzeXNucW4pCiB7CiAJc3RydWN0IG52bWV0X3N1YnN5c19saW5rICpwOwomIzQzOwlzdHJ1Y3QgbnZtZXRfc3Vic3lzICpkaXNjX3N1YnN5czsKIAogCWlmICghcG9ydCkKIAkJcmV0dXJuIE5VTEw7CiAKJiM0MzsJZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMocG9ydC0mZ3Q7bmV0X25zKTsKJiM0MzsJaWYgKCFkaXNjX3N1YnN5cykKJiM0MzsJCXJldHVybiBOVUxMOwomIzQzOwogCWlmICghc3RyY21wKE5WTUVfRElTQ19TVUJTWVNfTkFNRSwgc3Vic3lzbnFuKSkgewotCQlpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKCZhbXA7bnZtZXRfZGlzY19zdWJzeXMtJmd0O3JlZikpCiYjNDM7CQlpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKCZhbXA7ZGlzY19zdWJzeXMtJmd0O3JlZikpCiAJCQlyZXR1cm4gTlVMTDsKLQkJcmV0dXJuIG52bWV0X2Rpc2Nfc3Vic3lzOwomIzQzOwkJcmV0dXJuIGRpc2Nfc3Vic3lzOwogCX0KIAogCWRvd25fcmVhZCgmYW1wO252bWV0X2NvbmZpZ19zZW0pOwotCWlmICghc3RybmNtcChudm1ldF9kaXNjX3N1YnN5cy0mZ3Q7c3Vic3lzbnFuLCBzdWJzeXNucW4sCiYjNDM7CWlmICghc3RybmNtcChkaXNjX3N1YnN5cy0mZ3Q7c3Vic3lzbnFuLCBzdWJzeXNucW4sCiAJCQkJTlZNRl9OUU5fU0laRSkpIHsKLQkJaWYgKGtyZWZfZ2V0X3VubGVzc196ZXJvKCZhbXA7bnZtZXRfZGlzY19zdWJzeXMtJmd0O3JlZikpIHsKJiM0MzsJCWlmIChrcmVmX2dldF91bmxlc3NfemVybygmYW1wO2Rpc2Nfc3Vic3lzLSZndDtyZWYpKSB7CiAJCQl1cF9yZWFkKCZhbXA7bnZtZXRfY29uZmlnX3NlbSk7Ci0JCQlyZXR1cm4gbnZtZXRfZGlzY19zdWJzeXM7CiYjNDM7CQkJcmV0dXJuIGRpc2Nfc3Vic3lzOwogCQl9CiAJfQogCWxpc3RfZm9yX2VhY2hfZW50cnkocCwgJmFtcDtwb3J0LSZndDtzdWJzeXN0ZW1zLCBlbnRyeSkgewpAQCAtMTgzMCw3ICYjNDM7MTgzNSw3IEBAIHN0YXRpYyBzdHJ1Y3QgbnZtZXRfc3Vic3lzICpudm1ldF9maW5kX2dldF9zdWJzeXMoc3RydWN0IG52bWV0X3BvcnQgKnBvcnQsCiB9CiAKIHN0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X3N1YnN5c19hbGxvYyhjb25zdCBjaGFyICpzdWJzeXNucW4sCi0JCWVudW0gbnZtZV9zdWJzeXNfdHlwZSB0eXBlKQomIzQzOwkJZW51bSBudm1lX3N1YnN5c190eXBlIHR5cGUsIHN0cnVjdCBuZXQgKm5ldF9ucykKIHsKIAlzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXM7CiAJY2hhciBzZXJpYWxbTlZNRVRfU05fTUFYX1NJWkUgLyAyXTsKQEAgLTE4ODgsMTAgJiM0MzsxODkzLDEyIEBAIHN0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X3N1YnN5c19hbGxvYyhjb25zdCBjaGFyICpzdWJzeXNucW4sCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtzdWJzeXMtJmd0O2N0cmxzKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO3N1YnN5cy0mZ3Q7aG9zdHMpOwogCi0JcmV0ID0gbnZtZXRfZGVidWdmc19zdWJzeXNfc2V0dXAoc3Vic3lzKTsKLQlpZiAocmV0KQotCQlnb3RvIGZyZWVfc3Vic3lzbnFuOwotCiYjNDM7CS8qIERpc2FibGUgZGVidWdmcyBmb3Igbm9uLWluaXRpYWwgbmFtZXNwYWNlcyAqLwomIzQzOwlpZiAobmV0X25zID09ICZhbXA7aW5pdF9uZXQpIHsKJiM0MzsJCXJldCA9IG52bWV0X2RlYnVnZnNfc3Vic3lzX3NldHVwKHN1YnN5cyk7CiYjNDM7CQlpZiAocmV0KQomIzQzOwkJCWdvdG8gZnJlZV9zdWJzeXNucW47CiYjNDM7CX0KIAlyZXR1cm4gc3Vic3lzOwogCiBmcmVlX3N1YnN5c25xbjoKQEAgLTE5NzYsMTggJiM0MzsxOTgzLDEyIEBAIHN0YXRpYyBpbnQgX19pbml0IG52bWV0X2luaXQodm9pZCkKIAlpZiAoZXJyb3IpCiAJCWdvdG8gb3V0X2ZyZWVfbnZtZXRfYWVuX3dvcmtfcXVldWU7CiAKLQllcnJvciA9IG52bWV0X2luaXRfZGlzY292ZXJ5KCk7Ci0JaWYgKGVycm9yKQotCQlnb3RvIG91dF9leGl0X2RlYnVnZnM7Ci0KIAllcnJvciA9IG52bWV0X2luaXRfY29uZmlnZnMoKTsKIAlpZiAoZXJyb3IpCi0JCWdvdG8gb3V0X2V4aXRfZGlzY292ZXJ5OwomIzQzOwkJZ290byBvdXRfZXhpdF9kZWJ1Z2ZzOwogCiAJcmV0dXJuIDA7CiAKLW91dF9leGl0X2Rpc2NvdmVyeToKLQludm1ldF9leGl0X2Rpc2NvdmVyeSgpOwogb3V0X2V4aXRfZGVidWdmczoKIAludm1ldF9leGl0X2RlYnVnZnMoKTsKIG91dF9mcmVlX252bWV0X2Flbl93b3JrX3F1ZXVlOgpAQCAtMjAwNiw3ICYjNDM7MjAwNyw2IEBAIHN0YXRpYyBpbnQgX19pbml0IG52bWV0X2luaXQodm9pZCkKIHN0YXRpYyB2b2lkIF9fZXhpdCBudm1ldF9leGl0KHZvaWQpCiB7CiAJbnZtZXRfZXhpdF9jb25maWdmcygpOwotCW52bWV0X2V4aXRfZGlzY292ZXJ5KCk7CiAJbnZtZXRfZXhpdF9kZWJ1Z2ZzKCk7CiAJaWRhX2Rlc3Ryb3koJmFtcDtjbnRsaWRfaWRhKTsKIAlkZXN0cm95X3dvcmtxdWV1ZShudm1ldF9hZW5fd3EpOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC9kaXNjb3ZlcnkuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvZGlzY292ZXJ5LmMKaW5kZXggMTE0ODY5ZDE2YTFmM2MuLmI0OTg0ZmM2NWJhNzg3IDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L2Rpc2NvdmVyeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvZGlzY292ZXJ5LmMKQEAgLTgsOSAmIzQzOzgsNDQgQEAKICNpbmNsdWRlICZsdDtnZW5lcmF0ZWQvdXRzcmVsZWFzZS5oJmd0OwogI2luY2x1ZGUgJiMzNDtudm1ldC5oJiMzNDsKIAotc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfZGlzY19zdWJzeXM7CiYjNDM7c3RhdGljIERFRklORV9YQVJSQVkobnZtZXRfZGlzY194YSk7CiAKLXN0YXRpYyB1NjQgbnZtZXRfZ2VuY3RyOwomIzQzO3N0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X2dldF9kaXNjX3N1YnN5cyhzdHJ1Y3QgbmV0ICpuZXRfbnMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXM7CiYjNDM7CXU2NCBuc19pZCA9IG52bWV0X2dldF9uc19pZChuZXRfbnMpOwomIzQzOwomIzQzOwlzdWJzeXMgPSB4YV9sb2FkKCZhbXA7bnZtZXRfZGlzY194YSwgbnNfaWQpOwomIzQzOwlyZXR1cm4gc3Vic3lzOwomIzQzO30KJiM0MzsKJiM0MztpbnQgbnZtZXRfYWRkX2Rpc2Nfc3Vic3lzKHN0cnVjdCBuZXQgKm5ldF9ucykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzOwomIzQzOwl1NjQgbnNfaWQgPSBudm1ldF9nZXRfbnNfaWQobmV0X25zKTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZGlzY19zdWJzeXMgPSBudm1ldF9zdWJzeXNfYWxsb2MoTlZNRV9ESVNDX1NVQlNZU19OQU1FLAomIzQzOwkJCQkJIE5WTUVfTlFOX0NVUlIsIG5ldF9ucyk7CiYjNDM7CWlmIChJU19FUlIoZGlzY19zdWJzeXMpKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoZGlzY19zdWJzeXMpOwomIzQzOwllcnIgPSB4YV9pbnNlcnQoJmFtcDtudm1ldF9kaXNjX3hhLCBuc19pZCwKJiM0MzsJCQlkaXNjX3N1YnN5cywgR0ZQX0tFUk5FTCk7CiYjNDM7CWlmIChlcnIgJmx0OyAwKQomIzQzOwkJbnZtZXRfc3Vic3lzX3B1dChkaXNjX3N1YnN5cyk7CiYjNDM7CiYjNDM7CXJldHVybiBlcnI7CiYjNDM7fQomIzQzOwomIzQzO3ZvaWQgbnZtZXRfZGVsX2Rpc2Nfc3Vic3lzKHN0cnVjdCBuZXQgKm5ldF9ucykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzOwomIzQzOwl1NjQgbnNfaWQgPSBudm1ldF9nZXRfbnNfaWQobmV0X25zKTsKJiM0MzsKJiM0MzsJZGlzY19zdWJzeXMgPSB4YV9lcmFzZSgmYW1wO252bWV0X2Rpc2NfeGEsIG5zX2lkKTsKJiM0MzsJaWYgKGRpc2Nfc3Vic3lzKQomIzQzOwkJbnZtZXRfc3Vic3lzX3B1dChkaXNjX3N1YnN5cyk7CiYjNDM7fQogCiBzdGF0aWMgdm9pZCBfX252bWV0X2Rpc2NfY2hhbmdlZChzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCwKIAkJCQkgc3RydWN0IG52bWV0X2N0cmwgKmN0cmwpCkBAIC0yOSwxOCAmIzQzOzY0LDIyIEBAIHZvaWQgbnZtZXRfcG9ydF9kaXNjX2NoYW5nZWQoc3RydWN0IG52bWV0X3BvcnQgKnBvcnQsCiAJCQkgICAgIHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cykKIHsKIAlzdHJ1Y3QgbnZtZXRfY3RybCAqY3RybDsKJiM0MzsJc3RydWN0IG52bWV0X3N1YnN5cyAqZGlzY19zdWJzeXM7CiAKIAlsb2NrZGVwX2Fzc2VydF9oZWxkKCZhbXA7bnZtZXRfY29uZmlnX3NlbSk7Ci0JbnZtZXRfZ2VuY3RyJiM0MzsmIzQzOzsKJiM0MzsJZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMocG9ydC0mZ3Q7bmV0X25zKTsKJiM0MzsJaWYgKFdBUk5fT04oIWRpc2Nfc3Vic3lzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJZGlzY19zdWJzeXMtJmd0O2dlbmN0ciYjNDM7JiM0Mzs7CiAKLQltdXRleF9sb2NrKCZhbXA7bnZtZXRfZGlzY19zdWJzeXMtJmd0O2xvY2spOwotCWxpc3RfZm9yX2VhY2hfZW50cnkoY3RybCwgJmFtcDtudm1ldF9kaXNjX3N1YnN5cy0mZ3Q7Y3RybHMsIHN1YnN5c19lbnRyeSkgewomIzQzOwltdXRleF9sb2NrKCZhbXA7ZGlzY19zdWJzeXMtJmd0O2xvY2spOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsICZhbXA7ZGlzY19zdWJzeXMtJmd0O2N0cmxzLCBzdWJzeXNfZW50cnkpIHsKIAkJaWYgKHN1YnN5cyAmYW1wOyZhbXA7ICFudm1ldF9ob3N0X2FsbG93ZWQoc3Vic3lzLCBjdHJsLSZndDtob3N0bnFuKSkKIAkJCWNvbnRpbnVlOwogCiAJCV9fbnZtZXRfZGlzY19jaGFuZ2VkKHBvcnQsIGN0cmwpOwogCX0KLQltdXRleF91bmxvY2soJmFtcDtudm1ldF9kaXNjX3N1YnN5cy0mZ3Q7bG9jayk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2Rpc2Nfc3Vic3lzLSZndDtsb2NrKTsKIAogCS8qIElmIHRyYW5zcG9ydCBjYW4gc2lnbmFsIGNoYW5nZSwgbm90aWZ5IHRyYW5zcG9ydCAqLwogCWlmIChwb3J0LSZndDt0cl9vcHMgJmFtcDsmYW1wOyBwb3J0LSZndDt0cl9vcHMtJmd0O2Rpc2NvdmVyeV9jaGcpCkBAIC01MiwxNSAmIzQzOzkxLDE5IEBAIHN0YXRpYyB2b2lkIF9fbnZtZXRfc3Vic3lzX2Rpc2NfY2hhbmdlZChzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCwKIAkJCQkJc3RydWN0IG52bWV0X2hvc3QgKmhvc3QpCiB7CiAJc3RydWN0IG52bWV0X2N0cmwgKmN0cmw7CiYjNDM7CXN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzOwogCi0JbXV0ZXhfbG9jaygmYW1wO252bWV0X2Rpc2Nfc3Vic3lzLSZndDtsb2NrKTsKLQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsICZhbXA7bnZtZXRfZGlzY19zdWJzeXMtJmd0O2N0cmxzLCBzdWJzeXNfZW50cnkpIHsKJiM0MzsJZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMocG9ydC0mZ3Q7bmV0X25zKTsKJiM0MzsJaWYgKFdBUk5fT04oIWRpc2Nfc3Vic3lzKSkKJiM0MzsJCXJldHVybjsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2Rpc2Nfc3Vic3lzLSZndDtsb2NrKTsKJiM0MzsJbGlzdF9mb3JfZWFjaF9lbnRyeShjdHJsLCAmYW1wO2Rpc2Nfc3Vic3lzLSZndDtjdHJscywgc3Vic3lzX2VudHJ5KSB7CiAJCWlmIChob3N0ICZhbXA7JmFtcDsgc3RyY21wKG52bWV0X2hvc3RfbmFtZShob3N0KSwgY3RybC0mZ3Q7aG9zdG5xbikpCiAJCQljb250aW51ZTsKIAogCQlfX252bWV0X2Rpc2NfY2hhbmdlZChwb3J0LCBjdHJsKTsKIAl9Ci0JbXV0ZXhfdW5sb2NrKCZhbXA7bnZtZXRfZGlzY19zdWJzeXMtJmd0O2xvY2spOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtkaXNjX3N1YnN5cy0mZ3Q7bG9jayk7CiB9CiAKIHZvaWQgbnZtZXRfc3Vic3lzX2Rpc2NfY2hhbmdlZChzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMsCkBAIC02OCwxMSAmIzQzOzExMSwxOCBAQCB2b2lkIG52bWV0X3N1YnN5c19kaXNjX2NoYW5nZWQoc3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzLAogewogCXN0cnVjdCBudm1ldF9wb3J0ICpwb3J0OwogCXN0cnVjdCBudm1ldF9zdWJzeXNfbGluayAqczsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZCAqcG9ydF9saXN0OwomIzQzOwlzdHJ1Y3QgbnZtZXRfc3Vic3lzICpkaXNjX3N1YnN5czsKJiM0MzsJc3RydWN0IG5ldCAqbmV0X25zID0gY29uZmlnZnNfbnNfZnJvbV9ncm91cCgmYW1wO3N1YnN5cy0mZ3Q7Z3JvdXApOwogCiAJbG9ja2RlcF9hc3NlcnRfaGVsZCgmYW1wO252bWV0X2NvbmZpZ19zZW0pOwotCW52bWV0X2dlbmN0ciYjNDM7JiM0Mzs7CiYjNDM7CWRpc2Nfc3Vic3lzID0gbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzKG5ldF9ucyk7CiYjNDM7CWlmIChXQVJOX09OKCFkaXNjX3N1YnN5cykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWRpc2Nfc3Vic3lzLSZndDtnZW5jdHImIzQzOyYjNDM7OwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBudm1ldF9wb3J0cywgZ2xvYmFsX2VudHJ5KQomIzQzOwlwb3J0X2xpc3QgPSBudm1ldF9nZXRfcG9ydF9saXN0KG5ldF9ucyk7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnkocG9ydCwgcG9ydF9saXN0LCBnbG9iYWxfZW50cnkpCiAJCWxpc3RfZm9yX2VhY2hfZW50cnkocywgJmFtcDtwb3J0LSZndDtzdWJzeXN0ZW1zLCBlbnRyeSkgewogCQkJaWYgKHMtJmd0O3N1YnN5cyAhPSBzdWJzeXMpCiAJCQkJY29udGludWU7CkBAIC0xNzMsNiAmIzQzOzIyMyw3IEBAIHN0YXRpYyB2b2lkIG52bWV0X2V4ZWN1dGVfZGlzY19nZXRfbG9nX3BhZ2Uoc3RydWN0IG52bWV0X3JlcSAqcmVxKQogCXUxNiBzdGF0dXMgPSAwOwogCXZvaWQgKmJ1ZmZlcjsKIAljaGFyIHRyYWRkcltOVk1GX1RSQUREUl9TSVpFXTsKJiM0MzsJc3RydWN0IG52bWV0X3N1YnN5cyAqZGlzY19zdWJzeXM7CiAKIAlpZiAoIW52bWV0X2NoZWNrX3RyYW5zZmVyX2xlbihyZXEsIGRhdGFfbGVuKSkKIAkJcmV0dXJuOwpAQCAtMjA3LDEwICYjNDM7MjU4LDEyIEBAIHN0YXRpYyB2b2lkIG52bWV0X2V4ZWN1dGVfZGlzY19nZXRfbG9nX3BhZ2Uoc3RydWN0IG52bWV0X3JlcSAqcmVxKQogCX0KIAloZHIgPSBidWZmZXI7CiAKJiM0MzsJZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMocmVxLSZndDtwb3J0LSZndDtuZXRfbnMpOwomIzQzOwogCW52bWV0X3NldF9kaXNjX3RyYWRkcihyZXEsIHJlcS0mZ3Q7cG9ydCwgdHJhZGRyKTsKIAogCW52bWV0X2Zvcm1hdF9kaXNjb3ZlcnlfZW50cnkoaGRyLCByZXEtJmd0O3BvcnQsCi0JCQkJICAgICBudm1ldF9kaXNjX3N1YnN5cy0mZ3Q7c3Vic3lzbnFuLAomIzQzOwkJCQkgICAgIGRpc2Nfc3Vic3lzLSZndDtzdWJzeXNucW4sCiAJCQkJICAgICB0cmFkZHIsIE5WTUVfTlFOX0NVUlIsIG51bXJlYyk7CiAJbnVtcmVjJiM0MzsmIzQzOzsKIApAQCAtMjM1LDcgJiM0MzsyODgsNyBAQCBzdGF0aWMgdm9pZCBudm1ldF9leGVjdXRlX2Rpc2NfZ2V0X2xvZ19wYWdlKHN0cnVjdCBudm1ldF9yZXEgKnJlcSkKIAkJbnVtcmVjJiM0MzsmIzQzOzsKIAl9CiAKLQloZHItJmd0O2dlbmN0ciA9IGNwdV90b19sZTY0KG52bWV0X2dlbmN0cik7CiYjNDM7CWhkci0mZ3Q7Z2VuY3RyID0gY3B1X3RvX2xlNjQoZGlzY19zdWJzeXMtJmd0O2dlbmN0cik7CiAJaGRyLSZndDtudW1yZWMgPSBjcHVfdG9fbGU2NChudW1yZWMpOwogCWhkci0mZ3Q7cmVjZm10ID0gY3B1X3RvX2xlMTYoMCk7CiAKQEAgLTQyOCwxNSAmIzQzOzQ4MSwzIEBAIHUxNiBudm1ldF9wYXJzZV9kaXNjb3ZlcnlfY21kKHN0cnVjdCBudm1ldF9yZXEgKnJlcSkKIAl9CiAKIH0KLQotaW50IF9faW5pdCBudm1ldF9pbml0X2Rpc2NvdmVyeSh2b2lkKQotewotCW52bWV0X2Rpc2Nfc3Vic3lzID0KLQkJbnZtZXRfc3Vic3lzX2FsbG9jKE5WTUVfRElTQ19TVUJTWVNfTkFNRSwgTlZNRV9OUU5fQ1VSUik7Ci0JcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhudm1ldF9kaXNjX3N1YnN5cyk7Ci19Ci0KLXZvaWQgbnZtZXRfZXhpdF9kaXNjb3Zlcnkodm9pZCkKLXsKLQludm1ldF9zdWJzeXNfcHV0KG52bWV0X2Rpc2Nfc3Vic3lzKTsKLX0KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jIGIvZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmMKaW5kZXggZmNiMWY4MTg2ZmRkMGQuLjBlZGQ2OTA5MDJjZTRiIDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYwpAQCAtOSw2ICYjNDM7OSw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvbnZtZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhcnNlci5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uc3Byb3h5LmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O252bWV0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDsuLi9ob3N0L252bWUuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0Oy4uL2hvc3QvZmFicmljcy5oJiMzNDsKQEAgLTUzOCw2ICYjNDM7NTM5LDkgQEAgc3RhdGljIHN0cnVjdCBudm1ldF9wb3J0ICpudm1lX2xvb3BfZmluZF9wb3J0KHN0cnVjdCBudm1lX2N0cmwgKmN0cmwpCiAKIAltdXRleF9sb2NrKCZhbXA7bnZtZV9sb29wX3BvcnRzX211dGV4KTsKIAlsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsICZhbXA7bnZtZV9sb29wX3BvcnRzLCBlbnRyeSkgewomIzQzOwkJLyogU2tpcCBwb3J0cyBmcm9tIG5vbi1tYXRjaGluZyBuYW1lc3BhY2VzICovCiYjNDM7CQlpZiAocC0mZ3Q7bmV0X25zICE9IGN1cnJlbnQtJmd0O25zcHJveHktJmd0O25ldF9ucykKJiM0MzsJCQljb250aW51ZTsKIAkJLyogaWYgbm8gdHJhbnNwb3J0IGFkZHJlc3MgaXMgc3BlY2lmaWVkIHVzZSB0aGUgZmlyc3QgcG9ydCAqLwogCQlpZiAoKGN0cmwtJmd0O29wdHMtJmd0O21hc2sgJmFtcDsgTlZNRl9PUFRfVFJBRERSKSAmYW1wOyZhbXA7CiAJCSAgICBzdHJjbXAoY3RybC0mZ3Q7b3B0cy0mZ3Q7dHJhZGRyLCBwLSZndDtkaXNjX2FkZHIudHJhZGRyKSkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaCBiL2RyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaAppbmRleCAzMzA1YTg4Njg0ZWNhYi4uNjgxZjkzNWQ4MDA4NmIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmgKQEAgLTIxMCw2ICYjNDM7MjEwLDcgQEAgc3RydWN0IG52bWV0X3BvcnQgewogCXN0cnVjdCBudm1ldF9hbmFfZ3JvdXAJCWFuYV9kZWZhdWx0X2dyb3VwOwogCWVudW0gbnZtZV9hbmFfc3RhdGUJCSphbmFfc3RhdGU7CiAJc3RydWN0IGtleQkJCSprZXlyaW5nOwomIzQzOwlzdHJ1Y3QgbmV0CQkJKm5ldF9uczsKIAl2b2lkCQkJCSpwcml2OwogCWJvb2wJCQkJZW5hYmxlZDsKIAlpbnQJCQkJaW5saW5lX2RhdGFfc2l6ZTsKQEAgLTMyNSw2ICYjNDM7MzI2LDkgQEAgc3RydWN0IG52bWV0X3N1YnN5cyB7CiAJdTE2CQkJY250bGlkX21pbjsKIAl1MTYJCQljbnRsaWRfbWF4OwogCiYjNDM7CS8qIEZvciBkaXNjb3Zlcnkgc3Vic3lzdGVtcyAqLwomIzQzOwl1NjQgZ2VuY3RyOwomIzQzOwogCXN0cnVjdCBsaXN0X2hlYWQJY3RybHM7CiAKIAlzdHJ1Y3QgbGlzdF9oZWFkCWhvc3RzOwpAQCAtNjI2LDcgJiM0Mzs2MzAsNyBAQCBzc2l6ZV90IG52bWV0X2N0cmxfaG9zdF90cmFkZHIoc3RydWN0IG52bWV0X2N0cmwgKmN0cmwsCiAJCWNoYXIgKnRyYWRkciwgc2l6ZV90IHRyYWRkcl9sZW4pOwogCiBzdHJ1Y3QgbnZtZXRfc3Vic3lzICpudm1ldF9zdWJzeXNfYWxsb2MoY29uc3QgY2hhciAqc3Vic3lzbnFuLAotCQllbnVtIG52bWVfc3Vic3lzX3R5cGUgdHlwZSk7CiYjNDM7CQllbnVtIG52bWVfc3Vic3lzX3R5cGUgdHlwZSwgc3RydWN0IG5ldCAqbmV0X25zKTsKIHZvaWQgbnZtZXRfc3Vic3lzX3B1dChzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMpOwogdm9pZCBudm1ldF9zdWJzeXNfZGVsX2N0cmxzKHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cyk7CiAKQEAgLTY2Miw3ICYjNDM7NjY2LDYgQEAgdTE2IG52bWV0X3plcm9fc2dsKHN0cnVjdCBudm1ldF9yZXEgKnJlcSwgb2ZmX3Qgb2ZmLCBzaXplX3QgbGVuKTsKIHUzMiBudm1ldF9nZXRfbG9nX3BhZ2VfbGVuKHN0cnVjdCBudm1lX2NvbW1hbmQgKmNtZCk7CiB1NjQgbnZtZXRfZ2V0X2xvZ19wYWdlX29mZnNldChzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbWQpOwogCi1leHRlcm4gc3RydWN0IGxpc3RfaGVhZCAqbnZtZXRfcG9ydHM7CiB2b2lkIG52bWV0X3BvcnRfZGlzY19jaGFuZ2VkKHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0LAogCQlzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMpOwogdm9pZCBudm1ldF9zdWJzeXNfZGlzY19jaGFuZ2VkKHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cywKQEAgLTY5NiwxMSAmIzQzOzY5OSwxMyBAQCB2b2lkIG52bWV0X2FkZF9hc3luY19ldmVudChzdHJ1Y3QgbnZtZXRfY3RybCAqY3RybCwgdTggZXZlbnRfdHlwZSwKIAogaW50IF9faW5pdCBudm1ldF9pbml0X2NvbmZpZ2ZzKHZvaWQpOwogdm9pZCBfX2V4aXQgbnZtZXRfZXhpdF9jb25maWdmcyh2b2lkKTsKJiM0MztleHRlcm4gc3RydWN0IGxpc3RfaGVhZCAqbnZtZXRfZ2V0X3BvcnRfbGlzdChzdHJ1Y3QgbmV0ICpuZXRfbnMpOwogCi1pbnQgX19pbml0IG52bWV0X2luaXRfZGlzY292ZXJ5KHZvaWQpOwotdm9pZCBudm1ldF9leGl0X2Rpc2NvdmVyeSh2b2lkKTsKJiM0MztleHRlcm4gdTY0IG52bWV0X2dldF9uc19pZChzdHJ1Y3QgbmV0ICpuZXRfbnMpOwomIzQzO2V4dGVybiBpbnQgbnZtZXRfYWRkX2Rpc2Nfc3Vic3lzKHN0cnVjdCBuZXQgKm5ldF9ucyk7CiYjNDM7ZXh0ZXJuIHZvaWQgbnZtZXRfZGVsX2Rpc2Nfc3Vic3lzKHN0cnVjdCBuZXQgKm5ldF9ucyk7CiYjNDM7ZXh0ZXJuIHN0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X2dldF9kaXNjX3N1YnN5cyhzdHJ1Y3QgbmV0ICpuZXRfbnMpOwogCi1leHRlcm4gc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfZGlzY19zdWJzeXM7CiBleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSBudm1ldF9jb25maWdfc2VtOwogCiBleHRlcm4gdTMyIG52bWV0X2FuYV9ncm91cF9lbmFibGVkW05WTUVUX01BWF9BTkFHUlBTICYjNDM7IDFdOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC9yZG1hLmMgYi9kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuYwppbmRleCBhYzI2ZjRmNzc0YzRkZS4uY2FkMjM5MWE2ZDBhNzggMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvcmRtYS5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvcmRtYS5jCkBAIC0xODcwLDggJiM0MzsxODcwLDggQEAgc3RhdGljIGludCBudm1ldF9yZG1hX2VuYWJsZV9wb3J0KHN0cnVjdCBudm1ldF9yZG1hX3BvcnQgKnBvcnQpCiAJc3RydWN0IHJkbWFfY21faWQgKmNtX2lkOwogCWludCByZXQ7CiAKLQljbV9pZCA9IHJkbWFfY3JlYXRlX2lkKCZhbXA7aW5pdF9uZXQsIG52bWV0X3JkbWFfY21faGFuZGxlciwgcG9ydCwKLQkJCVJETUFfUFNfVENQLCBJQl9RUFRfUkMpOwomIzQzOwljbV9pZCA9IHJkbWFfY3JlYXRlX2lkKHBvcnQtJmd0O25wb3J0LSZndDtuZXRfbnMsIG52bWV0X3JkbWFfY21faGFuZGxlciwKJiM0MzsJCQlwb3J0LCBSRE1BX1BTX1RDUCwgSUJfUVBUX1JDKTsKIAlpZiAoSVNfRVJSKGNtX2lkKSkgewogCQlwcl9lcnIoJiMzNDtDTSBJRCBjcmVhdGlvbiBmYWlsZWRcbiYjMzQ7KTsKIAkJcmV0dXJuIFBUUl9FUlIoY21faWQpOwpAQCAtMTk2NCw3ICYjNDM7MTk2NCw3IEBAIHN0YXRpYyBpbnQgbnZtZXRfcmRtYV9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpCiAJCW5wb3J0LSZndDttYXhfcXVldWVfc2l6ZSA9IE5WTUVfUkRNQV9NQVhfUVVFVUVfU0laRTsKIAl9CiAKLQlyZXQgPSBpbmV0X3B0b25fd2l0aF9zY29wZSgmYW1wO2luaXRfbmV0LCBhZiwgbnBvcnQtJmd0O2Rpc2NfYWRkci50cmFkZHIsCiYjNDM7CXJldCA9IGluZXRfcHRvbl93aXRoX3Njb3BlKG5wb3J0LSZndDtuZXRfbnMsIGFmLCBucG9ydC0mZ3Q7ZGlzY19hZGRyLnRyYWRkciwKIAkJCW5wb3J0LSZndDtkaXNjX2FkZHIudHJzdmNpZCwgJmFtcDtwb3J0LSZndDthZGRyKTsKIAlpZiAocmV0KSB7CiAJCXByX2VycigmIzM0O21hbGZvcm1lZCBpcC9wb3J0IHBhc3NlZDogJXM6JXNcbiYjMzQ7LApkaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMKaW5kZXggMTVjNTJmMWY5NWYxYjAuLjAxNmJlZjY1YTc2ZGQ5IDEwMDY0NAotLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmMKQEAgLTIwNzQsNyAmIzQzOzIwNzQsNyBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpCiAJCWdvdG8gZXJyX3BvcnQ7CiAJfQogCi0JcmV0ID0gaW5ldF9wdG9uX3dpdGhfc2NvcGUoJmFtcDtpbml0X25ldCwgYWYsIG5wb3J0LSZndDtkaXNjX2FkZHIudHJhZGRyLAomIzQzOwlyZXQgPSBpbmV0X3B0b25fd2l0aF9zY29wZShucG9ydC0mZ3Q7bmV0X25zLCBhZiwgbnBvcnQtJmd0O2Rpc2NfYWRkci50cmFkZHIsCiAJCQlucG9ydC0mZ3Q7ZGlzY19hZGRyLnRyc3ZjaWQsICZhbXA7cG9ydC0mZ3Q7YWRkcik7CiAJaWYgKHJldCkgewogCQlwcl9lcnIoJiMzNDttYWxmb3JtZWQgaXAvcG9ydCBwYXNzZWQ6ICVzOiVzXG4mIzM0OywKQEAgLTIwODcsOCAmIzQzOzIwODcsOCBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpCiAJaWYgKHBvcnQtJmd0O25wb3J0LSZndDtpbmxpbmVfZGF0YV9zaXplICZsdDsgMCkKIAkJcG9ydC0mZ3Q7bnBvcnQtJmd0O2lubGluZV9kYXRhX3NpemUgPSBOVk1FVF9UQ1BfREVGX0lOTElORV9EQVRBX1NJWkU7CiAKLQlyZXQgPSBzb2NrX2NyZWF0ZShwb3J0LSZndDthZGRyLnNzX2ZhbWlseSwgU09DS19TVFJFQU0sCi0JCQkJSVBQUk9UT19UQ1AsICZhbXA7cG9ydC0mZ3Q7c29jayk7CiYjNDM7CXJldCA9IHNvY2tfY3JlYXRlX2tlcm4obnBvcnQtJmd0O25ldF9ucywgcG9ydC0mZ3Q7YWRkci5zc19mYW1pbHksIFNPQ0tfU1RSRUFNLAomIzQzOwkJCSAgICBJUFBST1RPX1RDUCwgJmFtcDtwb3J0LSZndDtzb2NrKTsKIAlpZiAocmV0KSB7CiAJCXByX2VycigmIzM0O2ZhaWxlZCB0byBjcmVhdGUgYSBzb2NrZXRcbiYjMzQ7KTsKIAkJZ290byBlcnJfcG9ydDsKZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL2NvbmZpZ2ZzX2ludGVybmFsLmggYi9mcy9jb25maWdmcy9jb25maWdmc19pbnRlcm5hbC5oCmluZGV4IGFjZGVlYThlMmQ2OWFjLi4zNWVkZGMyNzRiODg3OSAxMDA2NDQKLS0tIGEvZnMvY29uZmlnZnMvY29uZmlnZnNfaW50ZXJuYWwuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9jb25maWdmcy9jb25maWdmc19pbnRlcm5hbC5oCkBAIC00NCw2ICYjNDM7NDQsMTcgQEAgc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCB7CiAJc3RydWN0IGNvbmZpZ2ZzX2ZyYWdtZW50ICpzX2ZyYWc7CiB9OwogCiYjNDM7c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gewomIzQzOwlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50IHJvb3Q7CiYjNDM7CXN0cnVjdCBjb25maWdfZ3JvdXAgZ3JvdXA7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgc3Vic3lzX2xpc3Q7CiYjNDM7CXN0cnVjdCBtdXRleCBzdWJzeXNfbXV0ZXg7CiYjNDM7CXN0cnVjdCB2ZnNtb3VudCAqbW50OwomIzQzOwlpbnQgbW50X2NvdW50OwomIzQzOwlzdHJ1Y3QgbmV0ICpuZXRfbnM7CiYjNDM7CXJlZmNvdW50X3QgcmVmOwomIzQzO307CiYjNDM7CiAjZGVmaW5lIENPTkZJR0ZTX1JPT1QJCTB4MDAwMQogI2RlZmluZSBDT05GSUdGU19ESVIJCTB4MDAwMgogI2RlZmluZSBDT05GSUdGU19JVEVNX0FUVFIJMHgwMDA0CkBAIC02Myw3ICYjNDM7NzQsNyBAQCBleHRlcm4gc3BpbmxvY2tfdCBjb25maWdmc19kaXJlbnRfbG9jazsKIAogZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpjb25maWdmc19kaXJfY2FjaGVwOwogCi1leHRlcm4gaW50IGNvbmZpZ2ZzX2lzX3Jvb3Qoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKTsKJiM0MztleHRlcm4gYm9vbCBjb25maWdmc19pc19yb290KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSk7CiAKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKiBjb25maWdmc19uZXdfaW5vZGUodW1vZGVfdCBtb2RlLCBzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICosIHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKmNvbmZpZ2ZzX2NyZWF0ZShzdHJ1Y3QgZGVudHJ5ICosIHVtb2RlX3QgbW9kZSk7CkBAIC03OSw4ICYjNDM7OTAsMTQgQEAgZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBjb25maWdmc19nZXRfbmFtZShzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZCk7CiBleHRlcm4gaW50IGNvbmZpZ2ZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsCiAJCQkgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3QgaWF0dHIgKmlhdHRyKTsKIAotZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmNvbmZpZ2ZzX3Bpbl9mcyh2b2lkKTsKLWV4dGVybiB2b2lkIGNvbmZpZ2ZzX3JlbGVhc2VfZnModm9pZCk7CiYjNDM7ZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmNvbmZpZ2ZzX3Bpbl9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKJiM0MztleHRlcm4gdm9pZCBjb25maWdmc19yZWxlYXNlX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwomIzQzO2V4dGVybiBzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqY29uZmlnZnNfZ2V0X3N1cGVyX2luZm8oc3RydWN0IG5ldCAqbmV0X25zKTsKJiM0MztleHRlcm4gdm9pZCBjb25maWdmc19wdXRfc3VwZXJfaW5mbyhzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyk7CiYjNDM7ZXh0ZXJuIHZvaWQgY29uZmlnZnNfbGlua19zdWJzeXN0ZW1zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiYjNDM7CQkJCSAgICAgc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8pOwomIzQzO2V4dGVybiB2b2lkIGNvbmZpZ2ZzX3VubGlua19zdWJzeXN0ZW1zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsCiYjNDM7CQkJCSAgICAgICBzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyk7CiAKIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvbmZpZ2ZzX2Rpcl9vcGVyYXRpb25zOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29uZmlnZnNfZmlsZV9vcGVyYXRpb25zOwpkaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvZGlyLmMgYi9mcy9jb25maWdmcy9kaXIuYwppbmRleCAzYzg4ZjEzZjFjYTJlOS4uM2QzOWE2YzFhNDE2MzYgMTAwNjQ0Ci0tLSBhL2ZzL2NvbmZpZ2ZzL2Rpci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2NvbmZpZ2ZzL2Rpci5jCkBAIC0zNCwxNCAmIzQzOzM0LDYgQEAKICAqLwogREVGSU5FX1NQSU5MT0NLKGNvbmZpZ2ZzX2RpcmVudF9sb2NrKTsKIAotLyoKLSAqIEFsbCBvZiBsaW5rX29iai91bmxpbmtfb2JqL2xpbmtfZ3JvdXAvdW5saW5rX2dyb3VwIHJlcXVpcmUgdGhhdAotICogc3Vic3lzLSZndDtzdV9tdXRleCBpcyBoZWxkLgotICogQnV0IHBhcmVudCBjb25maWdmc19zdWJzeXN0ZW0gaXMgTlVMTCB3aGVuIGNvbmZpZ19pdGVtIGlzIHJvb3QuCi0gKiBVc2UgdGhpcyBtdXRleCB3aGVuIGNvbmZpZ19pdGVtIGlzIHJvb3QuCi0gKi8KLXN0YXRpYyBERUZJTkVfTVVURVgoY29uZmlnZnNfc3Vic3lzdGVtX211dGV4KTsKLQogc3RhdGljIHZvaWQgY29uZmlnZnNfZF9pcHV0KHN0cnVjdCBkZW50cnkgKiBkZW50cnksCiAJCQkgICAgc3RydWN0IGlub2RlICogaW5vZGUpCiB7CkBAIC0xMTUyLDcgJiM0MzsxMTQ0LDcgQEAgaW50IGNvbmZpZ2ZzX2RlcGVuZF9pdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cywKIAkgKiBQaW4gdGhlIGNvbmZpZ2ZzIGZpbGVzeXN0ZW0uICBUaGlzIG1lYW5zIHdlIGNhbiBzYWZlbHkgYWNjZXNzCiAJICogdGhlIHJvb3Qgb2YgdGhlIGNvbmZpZ2ZzIGZpbGVzeXN0ZW0uCiAJICovCi0Jcm9vdCA9IGNvbmZpZ2ZzX3Bpbl9mcygpOwomIzQzOwlyb290ID0gY29uZmlnZnNfcGluX2ZzKE5VTEwpOwogCWlmIChJU19FUlIocm9vdCkpCiAJCXJldHVybiBQVFJfRVJSKHJvb3QpOwogCkBAIC0xMTc5LDcgJiM0MzsxMTcxLDcgQEAgaW50IGNvbmZpZ2ZzX2RlcGVuZF9pdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cywKIAkgKiBJZiB3ZSBzdWNjZWVkZWQsIHRoZSBmcyBpcyBwaW5uZWQgdmlhIG90aGVyIG1ldGhvZHMuICBJZiBub3QsCiAJICogd2UmIzM5O3JlIGRvbmUgd2l0aCBpdCBhbnl3YXkuICBTbyByZWxlYXNlX2ZzKCkgaXMgYWx3YXlzIHJpZ2h0LgogCSAqLwotCWNvbmZpZ2ZzX3JlbGVhc2VfZnMoKTsKJiM0MzsJY29uZmlnZnNfcmVsZWFzZV9mcyhOVUxMKTsKIAogCXJldHVybiByZXQ7CiB9CkBAIC0xODY5LDMyICYjNDM7MTg2MSwyNyBAQCB2b2lkIGNvbmZpZ2ZzX3VucmVnaXN0ZXJfZGVmYXVsdF9ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCkKIH0KIEVYUE9SVF9TWU1CT0woY29uZmlnZnNfdW5yZWdpc3Rlcl9kZWZhdWx0X2dyb3VwKTsKIAotaW50IGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpCiYjNDM7c3RhdGljIGludCBjb25maWdmc19saW5rX3Jvb3Qoc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gICppbmZvLAomIzQzOwkJCSAgICAgIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cywKJiM0MzsJCQkgICAgICBzdHJ1Y3QgZGVudHJ5ICpyb290KQogewotCWludCBlcnI7CiAJc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAgPSAmYW1wO3N1YnN5cy0mZ3Q7c3VfZ3JvdXA7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5OwotCXN0cnVjdCBkZW50cnkgKnJvb3Q7CiAJc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2Q7CiAJc3RydWN0IGNvbmZpZ2ZzX2ZyYWdtZW50ICpmcmFnOwomIzQzOwlpbnQgZXJyOwogCiAJZnJhZyA9IG5ld19mcmFnbWVudCgpOwogCWlmICghZnJhZykKIAkJcmV0dXJuIC1FTk9NRU07CiAKLQlyb290ID0gY29uZmlnZnNfcGluX2ZzKCk7Ci0JaWYgKElTX0VSUihyb290KSkgewotCQlwdXRfZnJhZ21lbnQoZnJhZyk7Ci0JCXJldHVybiBQVFJfRVJSKHJvb3QpOwotCX0KLQogCWlmICghZ3JvdXAtJmd0O2NnX2l0ZW0uY2lfbmFtZSkKIAkJZ3JvdXAtJmd0O2NnX2l0ZW0uY2lfbmFtZSA9IGdyb3VwLSZndDtjZ19pdGVtLmNpX25hbWVidWY7CiAKIAlzZCA9IHJvb3QtJmd0O2RfZnNkYXRhOwotCW11dGV4X2xvY2soJmFtcDtjb25maWdmc19zdWJzeXN0ZW1fbXV0ZXgpOwomIzQzOwltdXRleF9sb2NrKCZhbXA7aW5mby0mZ3Q7c3Vic3lzX211dGV4KTsKIAlsaW5rX2dyb3VwKHRvX2NvbmZpZ19ncm91cChzZC0mZ3Q7c19lbGVtZW50KSwgZ3JvdXApOwotCW11dGV4X3VubG9jaygmYW1wO2NvbmZpZ2ZzX3N1YnN5c3RlbV9tdXRleCk7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO2luZm8tJmd0O3N1YnN5c19tdXRleCk7CiAKIAlpbm9kZV9sb2NrX25lc3RlZChkX2lub2RlKHJvb3QpLCBJX01VVEVYX1BBUkVOVCk7CiAKQEAgLTE5MjEsMTcgJiM0MzsxOTA4LDEyMCBAQCBpbnQgY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cykKIAlpbm9kZV91bmxvY2soZF9pbm9kZShyb290KSk7CiAKIAlpZiAoZXJyKSB7Ci0JCW11dGV4X2xvY2soJmFtcDtjb25maWdmc19zdWJzeXN0ZW1fbXV0ZXgpOwomIzQzOwkJbXV0ZXhfbG9jaygmYW1wO2luZm8tJmd0O3N1YnN5c19tdXRleCk7CiAJCXVubGlua19ncm91cChncm91cCk7Ci0JCW11dGV4X3VubG9jaygmYW1wO2NvbmZpZ2ZzX3N1YnN5c3RlbV9tdXRleCk7Ci0JCWNvbmZpZ2ZzX3JlbGVhc2VfZnMoKTsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2luZm8tJmd0O3N1YnN5c19tdXRleCk7CiAJfQogCXB1dF9mcmFnbWVudChmcmFnKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiAKJiM0MztpbnQgY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvOwomIzQzOwlzdHJ1Y3QgZGVudHJ5ICpyb290OwomIzQzOwlpbnQgZXJyOwomIzQzOwomIzQzOwlpbmZvID0gY29uZmlnZnNfZ2V0X3N1cGVyX2luZm8oJmFtcDtpbml0X25ldCk7CiYjNDM7CWlmIChXQVJOX09OKElTX0VSUihpbmZvKSkpCiYjNDM7CQlyZXR1cm4gUFRSX0VSUihpbmZvKTsKJiM0MzsKJiM0MzsJcm9vdCA9IGNvbmZpZ2ZzX3Bpbl9mcyhOVUxMKTsKJiM0MzsJaWYgKElTX0VSUihyb290KSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihyb290KTsKJiM0MzsJCWdvdG8gb3V0X3B1dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc3Vic3lzLSZndDtmaWxsX3N1YnN5c3RlbSkgewomIzQzOwkJSU5JVF9MSVNUX0hFQUQoJmFtcDtzdWJzeXMtJmd0O3N1X2xpbmspOwomIzQzOwkJbXV0ZXhfaW5pdCgmYW1wO3N1YnN5cy0mZ3Q7c3VfbXV0ZXgpOwomIzQzOwkJY29uZmlnX2dyb3VwX2luaXQoJmFtcDtzdWJzeXMtJmd0O3N1X2dyb3VwKTsKJiM0MzsJCWVyciA9IHN1YnN5cy0mZ3Q7ZmlsbF9zdWJzeXN0ZW0oc3Vic3lzLCBpbmZvLSZndDtuZXRfbnMpOwomIzQzOwkJaWYgKGVycikKJiM0MzsJCQlnb3RvIG91dF9yZWxlYXNlOwomIzQzOwl9CiYjNDM7CiYjNDM7CWVyciA9IGNvbmZpZ2ZzX2xpbmtfcm9vdChpbmZvLCBzdWJzeXMsIHJvb3QpOwomIzQzOwlpZiAoZXJyKSB7CiYjNDM7CQlpZiAoc3Vic3lzLSZndDtjbGVhcl9zdWJzeXN0ZW0pCiYjNDM7CQkJc3Vic3lzLSZndDtjbGVhcl9zdWJzeXN0ZW0oc3Vic3lzLCBpbmZvLSZndDtuZXRfbnMpOwomIzQzOwkJZ290byBvdXRfcmVsZWFzZTsKJiM0MzsJfQomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7aW5mby0mZ3Q7c3Vic3lzX211dGV4KTsKJiM0MzsJbGlzdF9hZGQoJmFtcDtzdWJzeXMtJmd0O3N1X2xpbmssICZhbXA7aW5mby0mZ3Q7c3Vic3lzX2xpc3QpOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtpbmZvLSZndDtzdWJzeXNfbXV0ZXgpOwomIzQzOwomIzQzO291dF9yZWxlYXNlOgomIzQzOwlpZiAoZXJyKQomIzQzOwkJY29uZmlnZnNfcmVsZWFzZV9mcyhOVUxMKTsKJiM0MztvdXRfcHV0OgomIzQzOwljb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTsKIAlyZXR1cm4gZXJyOwogfQogCi12b2lkIGNvbmZpZ2ZzX3VucmVnaXN0ZXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cykKJiM0Mzt2b2lkIGNvbmZpZ2ZzX2xpbmtfc3Vic3lzdGVtcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAomIzQzOwkJCSAgICAgIHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvKQomIzQzO3sKJiM0MzsJc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqczsKJiM0MzsJc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKnBhcmVudCA9IGNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKCZhbXA7aW5pdF9uZXQpOwomIzQzOwlMSVNUX0hFQUQoc3Vic3lzX2xpc3QpOwomIzQzOwomIzQzOwlpZiAoV0FSTl9PTihJU19FUlIocGFyZW50KSkpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmICgoaW5mby0mZ3Q7bmV0X25zID09ICZhbXA7aW5pdF9uZXQpIHx8IFdBUk5fT04ocGFyZW50ID09IGluZm8pKSB7CiYjNDM7CQljb25maWdmc19wdXRfc3VwZXJfaW5mbyhwYXJlbnQpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CW11dGV4X2xvY2soJmFtcDtwYXJlbnQtJmd0O3N1YnN5c19tdXRleCk7CiYjNDM7CWxpc3Rfc3BsaWNlX2luaXQoJmFtcDtwYXJlbnQtJmd0O3N1YnN5c19saXN0LCAmYW1wO3N1YnN5c19saXN0KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cGFyZW50LSZndDtzdWJzeXNfbXV0ZXgpOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHMsICZhbXA7c3Vic3lzX2xpc3QsIHN1X2xpbmspIHsKJiM0MzsJCXN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5czsKJiM0MzsJCXN0cnVjdCBkZW50cnkgKnJvb3Q7CiYjNDM7CQlpbnQgZXJyOwomIzQzOwomIzQzOwkJaWYgKCFzLSZndDtmaWxsX3N1YnN5c3RlbSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCXN1YnN5cyA9IGt6YWxsb2Nfb2JqKCpzdWJzeXMpOwomIzQzOwkJaWYgKCFzdWJzeXMpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CQlzdWJzeXMtJmd0O2ZpbGxfc3Vic3lzdGVtID0gcy0mZ3Q7ZmlsbF9zdWJzeXN0ZW07CiYjNDM7CQlzdWJzeXMtJmd0O2NsZWFyX3N1YnN5c3RlbSA9IHMtJmd0O2NsZWFyX3N1YnN5c3RlbTsKJiM0MzsJCUlOSVRfTElTVF9IRUFEKCZhbXA7c3Vic3lzLSZndDtzdV9saW5rKTsKJiM0MzsJCW11dGV4X2luaXQoJmFtcDtzdWJzeXMtJmd0O3N1X211dGV4KTsKJiM0MzsJCWNvbmZpZ19ncm91cF9pbml0KCZhbXA7c3Vic3lzLSZndDtzdV9ncm91cCk7CiYjNDM7CQllcnIgPSBzdWJzeXMtJmd0O2ZpbGxfc3Vic3lzdGVtKHN1YnN5cywgaW5mby0mZ3Q7bmV0X25zKTsKJiM0MzsJCWlmIChlcnIpIHsKJiM0MzsJCQlrZnJlZShzdWJzeXMpOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOwkJcm9vdCA9IGNvbmZpZ2ZzX3Bpbl9mcyhzYik7CiYjNDM7CQlpZiAoSVNfRVJSKHJvb3QpKSB7CiYjNDM7CQkJaWYgKHN1YnN5cy0mZ3Q7Y2xlYXJfc3Vic3lzdGVtKQomIzQzOwkJCQlzdWJzeXMtJmd0O2NsZWFyX3N1YnN5c3RlbShzdWJzeXMsIGluZm8tJmd0O25ldF9ucyk7CiYjNDM7CQkJa2ZyZWUoc3Vic3lzKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsJCWVyciA9IGNvbmZpZ2ZzX2xpbmtfcm9vdChpbmZvLCBzdWJzeXMsIHJvb3QpOwomIzQzOwkJaWYgKGVycikgewomIzQzOwkJCWNvbmZpZ2ZzX3JlbGVhc2VfZnMoc2IpOwomIzQzOwkJCWlmIChzdWJzeXMtJmd0O2NsZWFyX3N1YnN5c3RlbSkKJiM0MzsJCQkJc3Vic3lzLSZndDtjbGVhcl9zdWJzeXN0ZW0oc3Vic3lzLCBpbmZvLSZndDtuZXRfbnMpOwomIzQzOwkJCWtmcmVlKHN1YnN5cyk7CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiYjNDM7CQltdXRleF9sb2NrKCZhbXA7aW5mby0mZ3Q7c3Vic3lzX211dGV4KTsKJiM0MzsJCWxpc3RfYWRkKCZhbXA7c3Vic3lzLSZndDtzdV9saW5rLCAmYW1wO2luZm8tJmd0O3N1YnN5c19saXN0KTsKJiM0MzsJCW11dGV4X3VubG9jaygmYW1wO2luZm8tJmd0O3N1YnN5c19tdXRleCk7CiYjNDM7CX0KJiM0MzsJbXV0ZXhfbG9jaygmYW1wO3BhcmVudC0mZ3Q7c3Vic3lzX211dGV4KTsKJiM0MzsJbGlzdF9zcGxpY2UoJmFtcDtzdWJzeXNfbGlzdCwgJmFtcDtwYXJlbnQtJmd0O3N1YnN5c19saXN0KTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cGFyZW50LSZndDtzdWJzeXNfbXV0ZXgpOwomIzQzOwljb25maWdmc19wdXRfc3VwZXJfaW5mbyhwYXJlbnQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgYm9vbCBjb25maWdmc191bmxpbmtfcm9vdChzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpCiB7CiAJc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAgPSAmYW1wO3N1YnN5cy0mZ3Q7c3VfZ3JvdXA7CiAJc3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZGdldChncm91cC0mZ3Q7Y2dfaXRlbS5jaV9kZW50cnkpOwpAQCAtMTk0MSw3ICYjNDM7MjAzMSw4IEBAIHZvaWQgY29uZmlnZnNfdW5yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKQogCiAJaWYgKGRlbnRyeS0mZ3Q7ZF9wYXJlbnQgIT0gcm9vdCkgewogCQlwcl9lcnIoJiMzNDtUcmllZCB0byB1bnJlZ2lzdGVyIG5vbi1zdWJzeXN0ZW0hXG4mIzM0Oyk7Ci0JCXJldHVybjsKJiM0MzsJCWRwdXQoZGVudHJ5KTsKJiM0MzsJCXJldHVybiBmYWxzZTsKIAl9CiAKIAlkb3duX3dyaXRlKCZhbXA7ZnJhZy0mZ3Q7ZnJhZ19zZW0pOwpAQCAtMTk2OSwxMSAmIzQzOzIwNjAsNTAgQEAgdm9pZCBjb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpCiAJaW5vZGVfdW5sb2NrKGRfaW5vZGUocm9vdCkpOwogCiAJZHB1dChkZW50cnkpOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBjb25maWdmc191bmxpbmtfc3Vic3lzdGVtcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLAomIzQzOwkJCQlzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cywgKnM7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2soJmFtcDtpbmZvLSZndDtzdWJzeXNfbXV0ZXgpOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3Vic3lzLCBzLCAmYW1wO2luZm8tJmd0O3N1YnN5c19saXN0LCBzdV9saW5rKSB7CiYjNDM7CQlsaXN0X2RlbF9pbml0KCZhbXA7c3Vic3lzLSZndDtzdV9saW5rKTsKJiM0MzsJCWlmICghY29uZmlnZnNfdW5saW5rX3Jvb3Qoc3Vic3lzKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCWlmIChzdWJzeXMtJmd0O2NsZWFyX3N1YnN5c3RlbSkKJiM0MzsJCQlzdWJzeXMtJmd0O2NsZWFyX3N1YnN5c3RlbShzdWJzeXMsIGluZm8tJmd0O25ldF9ucyk7CiYjNDM7CQl1bmxpbmtfZ3JvdXAoJmFtcDtzdWJzeXMtJmd0O3N1X2dyb3VwKTsKJiM0MzsJCWNvbmZpZ2ZzX3JlbGVhc2VfZnMoc2IpOwomIzQzOwkJa2ZyZWUoc3Vic3lzKTsKJiM0MzsJfQomIzQzOwltdXRleF91bmxvY2soJmFtcDtpbmZvLSZndDtzdWJzeXNfbXV0ZXgpOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGNvbmZpZ2ZzX3VucmVnaXN0ZXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvOwomIzQzOwlzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCA9ICZhbXA7c3Vic3lzLSZndDtzdV9ncm91cDsKJiM0MzsKJiM0MzsJaW5mbyA9IGNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKCZhbXA7aW5pdF9uZXQpOwomIzQzOwlpZiAoV0FSTl9PTihJU19FUlIoaW5mbykpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlpZiAoIWNvbmZpZ2ZzX3VubGlua19yb290KHN1YnN5cykpIHsKJiM0MzsJCWNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKGluZm8pOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiAKLQltdXRleF9sb2NrKCZhbXA7Y29uZmlnZnNfc3Vic3lzdGVtX211dGV4KTsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2luZm8tJmd0O3N1YnN5c19tdXRleCk7CiYjNDM7CWxpc3RfZGVsX2luaXQoJmFtcDtzdWJzeXMtJmd0O3N1X2xpbmspOwomIzQzOwlpZiAoc3Vic3lzLSZndDtjbGVhcl9zdWJzeXN0ZW0pCiYjNDM7CQlzdWJzeXMtJmd0O2NsZWFyX3N1YnN5c3RlbShzdWJzeXMsIGluZm8tJmd0O25ldF9ucyk7CiAJdW5saW5rX2dyb3VwKGdyb3VwKTsKLQltdXRleF91bmxvY2soJmFtcDtjb25maWdmc19zdWJzeXN0ZW1fbXV0ZXgpOwotCWNvbmZpZ2ZzX3JlbGVhc2VfZnMoKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7aW5mby0mZ3Q7c3Vic3lzX211dGV4KTsKJiM0MzsJY29uZmlnZnNfcmVsZWFzZV9mcyhOVUxMKTsKJiM0MzsJY29uZmlnZnNfcHV0X3N1cGVyX2luZm8oaW5mbyk7CiB9CiAKIEVYUE9SVF9TWU1CT0woY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtKTsKZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL21vdW50LmMgYi9mcy9jb25maWdmcy9tb3VudC5jCmluZGV4IDQ5MjlmMzQzMTE4OTQ2Li43OTQxMjU3ZDU1OGI3MiAxMDA2NDQKLS0tIGEvZnMvY29uZmlnZnMvbW91bnQuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9jb25maWdmcy9tb3VudC5jCkBAIC0yMiwxMCAmIzQzOzIyLDE5IEBACiAvKiBSYW5kb20gbWFnaWMgbnVtYmVyICovCiAjZGVmaW5lIENPTkZJR0ZTX01BR0lDIDB4NjI2NTY1NzAKIAotc3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqY29uZmlnZnNfbW91bnQgPSBOVUxMOwogc3RydWN0IGttZW1fY2FjaGUgKmNvbmZpZ2ZzX2Rpcl9jYWNoZXA7Ci1zdGF0aWMgaW50IGNvbmZpZ2ZzX21udF9jb3VudCA9IDA7CiYjNDM7c3RhdGljIERFRklORV9YQVJSQVkoY29uZmlnZnNfc3VwZXJfeGEpOwomIzQzO3N0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqY29uZmlnZnNfcm9vdDsKJiM0MztzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNvbmZpZ2ZzX3Bpbl9sb2NrKTsKIAomIzQzO3N0YXRpYyB1NjQgY29uZmlnZnNfbnNfaWQoc3RydWN0IG5ldCAqbmV0X25zKQomIzQzO3sKJiM0MzsJc3RydWN0IG5zX2NvbW1vbiAqbnMgPSBuZXRfbnMgPyB0b19uc19jb21tb24obmV0X25zKSA6IE5VTEw7CiYjNDM7CiYjNDM7CWlmICghbnMgfHwgbmV0X25zID09ICZhbXA7aW5pdF9uZXQpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIG5zLSZndDtuc19pZDsKJiM0Mzt9CiAKIHN0YXRpYyB2b2lkIGNvbmZpZ2ZzX2ZyZWVfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIHsKQEAgLTQwLDI4ICYjNDM7NDksODIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGNvbmZpZ2ZzX29wcyA9IHsKIAkuZnJlZV9pbm9kZQk9IGNvbmZpZ2ZzX2ZyZWVfaW5vZGUsCiB9OwogCi1zdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCBjb25maWdmc19yb290X2dyb3VwID0gewotCS5jZ19pdGVtID0gewotCQkuY2lfbmFtZWJ1Zgk9ICYjMzQ7cm9vdCYjMzQ7LAotCQkuY2lfbmFtZQk9IGNvbmZpZ2ZzX3Jvb3RfZ3JvdXAuY2dfaXRlbS5jaV9uYW1lYnVmLAotCX0sCi19OwomIzQzO2Jvb2wgY29uZmlnZnNfaXNfcm9vdChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDsKJiM0MzsKJiM0MzsJaWYgKCFpdGVtLSZndDtjaV9kZW50cnkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CXNkID0gaXRlbS0mZ3Q7Y2lfZGVudHJ5LSZndDtkX2ZzZGF0YTsKJiM0MzsJcmV0dXJuICEhKHNkLSZndDtzX3R5cGUgJmFtcDsgQ09ORklHRlNfUk9PVCk7CiYjNDM7fQogCi1pbnQgY29uZmlnZnNfaXNfcm9vdChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pCiYjNDM7c3RhdGljIHZvaWQgY29uZmlnZnNfZmlsbF9zdXBlcl9pbmZvKHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvKQogewotCXJldHVybiBpdGVtID09ICZhbXA7Y29uZmlnZnNfcm9vdF9ncm91cC5jZ19pdGVtOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO2luZm8tJmd0O3Jvb3Quc19zaWJsaW5nKTsKJiM0MzsJSU5JVF9MSVNUX0hFQUQoJmFtcDtpbmZvLSZndDtyb290LnNfY2hpbGRyZW4pOwomIzQzOwlpbmZvLSZndDtyb290LnNfdHlwZSA9IENPTkZJR0ZTX1JPT1Q7CiYjNDM7CWluZm8tJmd0O3Jvb3Quc19lbGVtZW50ID0gJmFtcDtpbmZvLSZndDtncm91cC5jZ19pdGVtOwomIzQzOwlzdHJzY3B5KGluZm8tJmd0O2dyb3VwLmNnX2l0ZW0uY2lfbmFtZWJ1ZiwgJiMzNDtyb290JiMzNDssIDQpOwomIzQzOwlpbmZvLSZndDtncm91cC5jZ19pdGVtLmNpX25hbWUgPSBpbmZvLSZndDtncm91cC5jZ19pdGVtLmNpX25hbWVidWY7CiYjNDM7CWNvbmZpZ19ncm91cF9pbml0KCZhbXA7aW5mby0mZ3Q7Z3JvdXApOwomIzQzOwlJTklUX0xJU1RfSEVBRCgmYW1wO2luZm8tJmd0O3N1YnN5c19saXN0KTsKJiM0MzsJbXV0ZXhfaW5pdCgmYW1wO2luZm8tJmd0O3N1YnN5c19tdXRleCk7CiYjNDM7CXJlZmNvdW50X3NldCgmYW1wO2luZm8tJmd0O3JlZiwgMSk7CiYjNDM7CWluZm8tJmd0O21udF9jb3VudCA9IDA7CiB9CiAKLXN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfZGlyZW50IGNvbmZpZ2ZzX3Jvb3QgPSB7Ci0JLnNfc2libGluZwk9IExJU1RfSEVBRF9JTklUKGNvbmZpZ2ZzX3Jvb3Quc19zaWJsaW5nKSwKLQkuc19jaGlsZHJlbgk9IExJU1RfSEVBRF9JTklUKGNvbmZpZ2ZzX3Jvb3Quc19jaGlsZHJlbiksCi0JLnNfZWxlbWVudAk9ICZhbXA7Y29uZmlnZnNfcm9vdF9ncm91cC5jZ19pdGVtLAotCS5zX3R5cGUJCT0gQ09ORklHRlNfUk9PVCwKLQkuc19pYXR0cgk9IE5VTEwsCi19OwomIzQzO3N0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICpjb25maWdmc19nZXRfc3VwZXJfaW5mbyhzdHJ1Y3QgbmV0ICpuZXRfbnMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbzsKJiM0MzsJdTY0IG5zX2lkID0gY29uZmlnZnNfbnNfaWQobmV0X25zKTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJeGFfbG9jaygmYW1wO2NvbmZpZ2ZzX3N1cGVyX3hhKTsKJiM0MzsJaW5mbyA9IHhhX2xvYWQoJmFtcDtjb25maWdmc19zdXBlcl94YSwgbnNfaWQpOwomIzQzOwlpZiAoaW5mbykgewomIzQzOwkJaWYgKCFyZWZjb3VudF9pbmNfbm90X3plcm8oKCZhbXA7aW5mby0mZ3Q7cmVmKSkpCiYjNDM7CQkJaW5mbyA9IEVSUl9QVFIoLUVCVVNZKTsKJiM0MzsJCXhhX3VubG9jaygmYW1wO2NvbmZpZ2ZzX3N1cGVyX3hhKTsKJiM0MzsJCXJldHVybiBpbmZvOwomIzQzOwl9CiYjNDM7CWluZm8gPSBremFsbG9jX29iaigqaW5mbyk7CiYjNDM7CWlmICghaW5mbykgewomIzQzOwkJeGFfdW5sb2NrKCZhbXA7Y29uZmlnZnNfc3VwZXJfeGEpOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaW5mby0mZ3Q7bmV0X25zID0gZ2V0X25ldChuZXRfbnMpOwomIzQzOwljb25maWdmc19maWxsX3N1cGVyX2luZm8oaW5mbyk7CiYjNDM7CWVyciA9IF9feGFfaW5zZXJ0KCZhbXA7Y29uZmlnZnNfc3VwZXJfeGEsIG5zX2lkLAomIzQzOwkJCSAgaW5mbywgR0ZQX0tFUk5FTCk7CiYjNDM7CXhhX3VubG9jaygmYW1wO2NvbmZpZ2ZzX3N1cGVyX3hhKTsKJiM0MzsJaWYgKGVyciAmbHQ7IDApIHsKJiM0MzsJCXB1dF9uZXQoaW5mby0mZ3Q7bmV0X25zKTsKJiM0MzsJCWtmcmVlKGluZm8pOwomIzQzOwkJcmV0dXJuIEVSUl9QVFIoZXJyKTsKJiM0MzsJfQomIzQzOwlyZXR1cm4gaW5mbzsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBjb25maWdmc19wdXRfc3VwZXJfaW5mbyhzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbykKJiM0Mzt7CiYjNDM7CXU2NCBuc19pZCA9IGNvbmZpZ2ZzX25zX2lkKGluZm8tJmd0O25ldF9ucyk7CiYjNDM7CiYjNDM7CXhhX2xvY2soJmFtcDtjb25maWdmc19zdXBlcl94YSk7CiYjNDM7CWlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7aW5mby0mZ3Q7cmVmKSkgewomIzQzOwkJeGFfdW5sb2NrKCZhbXA7Y29uZmlnZnNfc3VwZXJfeGEpOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CV9feGFfZXJhc2UoJmFtcDtjb25maWdmc19zdXBlcl94YSwgbnNfaWQpOwomIzQzOwl4YV91bmxvY2soJmFtcDtjb25maWdmc19zdXBlcl94YSk7CiYjNDM7CXB1dF9uZXQoaW5mby0mZ3Q7bmV0X25zKTsKJiM0MzsJa2ZyZWUoaW5mbyk7CiYjNDM7fQogCiBzdGF0aWMgaW50IGNvbmZpZ2ZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKQogewomIzQzOwlzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyA9IHNiLSZndDtzX2ZzX2luZm87CiAJc3RydWN0IGlub2RlICppbm9kZTsKIAlzdHJ1Y3QgZGVudHJ5ICpyb290OwogCkBAIC03Miw2NiAmIzQzOzEzNSwxNjIgQEAgc3RhdGljIGludCBjb25maWdmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYykKIAlzYi0mZ3Q7c190aW1lX2dyYW4gPSAxOwogCiAJaW5vZGUgPSBjb25maWdmc19uZXdfaW5vZGUoU19JRkRJUiB8IFNfSVJXWFUgfCBTX0lSVUdPIHwgU19JWFVHTywKLQkJCQkgICAmYW1wO2NvbmZpZ2ZzX3Jvb3QsIHNiKTsKLQlpZiAoaW5vZGUpIHsKLQkJaW5vZGUtJmd0O2lfb3AgPSAmYW1wO2NvbmZpZ2ZzX3Jvb3RfaW5vZGVfb3BlcmF0aW9uczsKLQkJaW5vZGUtJmd0O2lfZm9wID0gJmFtcDtjb25maWdmc19kaXJfb3BlcmF0aW9uczsKLQkJLyogZGlyZWN0b3J5IGlub2RlcyBzdGFydCBvZmYgd2l0aCBpX25saW5rID09IDIgKGZvciAmIzM0Oy4mIzM0OyBlbnRyeSkgKi8KLQkJaW5jX25saW5rKGlub2RlKTsKLQl9IGVsc2UgewomIzQzOwkJCQkgICAmYW1wO2luZm8tJmd0O3Jvb3QsIHNiKTsKJiM0MzsJaWYgKElTX0VSUihpbm9kZSkpIHsKIAkJcHJfZGVidWcoJiMzNDtjb3VsZCBub3QgZ2V0IHJvb3QgaW5vZGVcbiYjMzQ7KTsKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CQlyZXR1cm4gUFRSX0VSUihpbm9kZSk7CiAJfQomIzQzOwlpbm9kZS0mZ3Q7aV9vcCA9ICZhbXA7Y29uZmlnZnNfcm9vdF9pbm9kZV9vcGVyYXRpb25zOwomIzQzOwlpbm9kZS0mZ3Q7aV9mb3AgPSAmYW1wO2NvbmZpZ2ZzX2Rpcl9vcGVyYXRpb25zOwomIzQzOwkvKiBkaXJlY3RvcnkgaW5vZGVzIHN0YXJ0IG9mZiB3aXRoIGlfbmxpbmsgPT0gMiAoZm9yICYjMzQ7LiYjMzQ7IGVudHJ5KSAqLwomIzQzOwlpbmNfbmxpbmsoaW5vZGUpOwogCiAJcm9vdCA9IGRfbWFrZV9yb290KGlub2RlKTsKIAlpZiAoIXJvb3QpIHsKIAkJcHJfZGVidWcoJiMzNDslczogY291bGQgbm90IGdldCByb290IGRlbnRyeSFcbiYjMzQ7LF9fZnVuY19fKTsKIAkJcmV0dXJuIC1FTk9NRU07CiAJfQotCWNvbmZpZ19ncm91cF9pbml0KCZhbXA7Y29uZmlnZnNfcm9vdF9ncm91cCk7Ci0JY29uZmlnZnNfcm9vdF9ncm91cC5jZ19pdGVtLmNpX2RlbnRyeSA9IHJvb3Q7Ci0Jcm9vdC0mZ3Q7ZF9mc2RhdGEgPSAmYW1wO2NvbmZpZ2ZzX3Jvb3Q7CiYjNDM7CWluZm8tJmd0O2dyb3VwLmNnX2l0ZW0uY2lfZGVudHJ5ID0gcm9vdDsKJiM0MzsJcm9vdC0mZ3Q7ZF9mc2RhdGEgPSAmYW1wO2luZm8tJmd0O3Jvb3Q7CiAJc2ItJmd0O3Nfcm9vdCA9IHJvb3Q7CiAJc2V0X2RlZmF1bHRfZF9vcChzYiwgJmFtcDtjb25maWdmc19kZW50cnlfb3BzKTsgLyogdGhlIHJlc3QgZ2V0IHRoYXQgKi8KIAlzYi0mZ3Q7c19kX2ZsYWdzIHw9IERDQUNIRV9ET05UQ0FDSEU7CiYjNDM7CiYjNDM7CWNvbmZpZ2ZzX2xpbmtfc3Vic3lzdGVtcyhzYiwgaW5mbyk7CiYjNDM7CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgY29uZmlnZnNfZ2V0X3RyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKQogewotCXJldHVybiBnZXRfdHJlZV9zaW5nbGUoZmMsIGNvbmZpZ2ZzX2ZpbGxfc3VwZXIpOwomIzQzOwlzdHJ1Y3QgbmV0ICpuZXRfbnMgPSBmYy0mZ3Q7ZnNfcHJpdmF0ZTsKJiM0MzsJc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm87CiYjNDM7CWludCBlcnI7CiYjNDM7CiYjNDM7CWluZm8gPSBjb25maWdmc19nZXRfc3VwZXJfaW5mbyhuZXRfbnMpOwomIzQzOwlpZiAoSVNfRVJSKGluZm8pKQomIzQzOwkJcmV0dXJuIFBUUl9FUlIoaW5mbyk7CiYjNDM7CiYjNDM7CWVyciA9IGdldF90cmVlX2tleWVkKGZjLCBjb25maWdmc19maWxsX3N1cGVyLCBpbmZvKTsKJiM0MzsJaWYgKGVyciAmYW1wOyZhbXA7IGZjLSZndDtzX2ZzX2luZm8pCiYjNDM7CQljb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTsKJiM0MzsJcmV0dXJuIGVycjsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgY29uZmlnZnNfZnNfY29udGV4dF9mcmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBuZXQgKm5ldF9ucyA9IGZjLSZndDtmc19wcml2YXRlOwomIzQzOwomIzQzOwlmYy0mZ3Q7ZnNfcHJpdmF0ZSA9IE5VTEw7CiYjNDM7CXB1dF9uZXQobmV0X25zKTsKIH0KIAogc3RhdGljIGNvbnN0IHN0cnVjdCBmc19jb250ZXh0X29wZXJhdGlvbnMgY29uZmlnZnNfY29udGV4dF9vcHMgPSB7CiAJLmdldF90cmVlCT0gY29uZmlnZnNfZ2V0X3RyZWUsCiYjNDM7CS5mcmVlCQk9IGNvbmZpZ2ZzX2ZzX2NvbnRleHRfZnJlZSwKIH07CiAKIHN0YXRpYyBpbnQgY29uZmlnZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYykKIHsKJiM0MzsJc3RydWN0IG5ldCAqbmV0X25zID0gZ2V0X25ldChjdXJyZW50LSZndDtuc3Byb3h5LSZndDtuZXRfbnMpOwomIzQzOwomIzQzOwlmYy0mZ3Q7ZnNfcHJpdmF0ZSA9IG5ldF9uczsKIAlmYy0mZ3Q7b3BzID0gJmFtcDtjb25maWdmc19jb250ZXh0X29wczsKIAlyZXR1cm4gMDsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIGNvbmZpZ2ZzX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvID0gc2ItJmd0O3NfZnNfaW5mbzsKJiM0MzsKJiM0MzsJY29uZmlnZnNfdW5saW5rX3N1YnN5c3RlbXMoc2IsIGluZm8pOwomIzQzOwlraWxsX2Fub25fc3VwZXIoc2IpOwomIzQzOwljb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTsKJiM0MzsJc2ItJmd0O3NfZnNfaW5mbyA9IE5VTEw7CiYjNDM7fQomIzQzOwogc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGNvbmZpZ2ZzX2ZzX3R5cGUgPSB7CiAJLm93bmVyCQk9IFRISVNfTU9EVUxFLAogCS5uYW1lCQk9ICYjMzQ7Y29uZmlnZnMmIzM0OywKIAkuaW5pdF9mc19jb250ZXh0ID0gY29uZmlnZnNfaW5pdF9mc19jb250ZXh0LAotCS5raWxsX3NiCT0ga2lsbF9hbm9uX3N1cGVyLAomIzQzOwkua2lsbF9zYgk9IGNvbmZpZ2ZzX2tpbGxfc2IsCiYjNDM7CS5mc19mbGFncwk9IEZTX1VTRVJOU19NT1VOVCwKIH07CiBNT0RVTEVfQUxJQVNfRlMoJiMzNDtjb25maWdmcyYjMzQ7KTsKIAotc3RydWN0IGRlbnRyeSAqY29uZmlnZnNfcGluX2ZzKHZvaWQpCiYjNDM7c3RydWN0IGRlbnRyeSAqY29uZmlnZnNfcGluX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiB7Ci0JaW50IGVyciA9IHNpbXBsZV9waW5fZnMoJmFtcDtjb25maWdmc19mc190eXBlLCAmYW1wO2NvbmZpZ2ZzX21vdW50LAotCQkJICAgICAmYW1wO2NvbmZpZ2ZzX21udF9jb3VudCk7Ci0JcmV0dXJuIGVyciA/IEVSUl9QVFIoZXJyKSA6IGNvbmZpZ2ZzX21vdW50LSZndDttbnRfcm9vdDsKJiM0MzsJc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm87CiYjNDM7CiYjNDM7CXNwaW5fbG9jaygmYW1wO2NvbmZpZ2ZzX3Bpbl9sb2NrKTsKJiM0MzsJaWYgKHNiKSB7CiYjNDM7CQlzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqcm9vdCA9IGNvbmZpZ2ZzX3Jvb3Q7CiYjNDM7CQlzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBzYi0mZ3Q7c19yb290OwomIzQzOwomIzQzOwkJaW5mbyA9IHNiLSZndDtzX2ZzX2luZm87CiYjNDM7CQlpZiAoIWluZm8tJmd0O21udCkgewomIzQzOwkJCXN0cnVjdCB2ZnNtb3VudCAqbW50OwomIzQzOwomIzQzOwkJCXNwaW5fdW5sb2NrKCZhbXA7Y29uZmlnZnNfcGluX2xvY2spOwomIzQzOwkJCW1udCA9IG1udF9jbG9uZV9kaXJlY3Qocm9vdC0mZ3Q7bW50LCBkZW50cnkpOwomIzQzOwkJCWlmIChJU19FUlIobW50KSkKJiM0MzsJCQkJcmV0dXJuIEVSUl9DQVNUKG1udCk7CiYjNDM7CQkJc3Bpbl9sb2NrKCZhbXA7Y29uZmlnZnNfcGluX2xvY2spOwomIzQzOwkJCWluZm8tJmd0O21udCA9IG1udDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJbW50Z2V0KGluZm8tJmd0O21udCk7CiYjNDM7CQl9CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpbmZvID0gY29uZmlnZnNfcm9vdDsKJiM0MzsJCWlmICghaW5mby0mZ3Q7bW50KSB7CiYjNDM7CQkJc3RydWN0IHZmc21vdW50ICptbnQ7CiYjNDM7CiYjNDM7CQkJc3Bpbl91bmxvY2soJmFtcDtjb25maWdmc19waW5fbG9jayk7CiYjNDM7CQkJbW50ID0gdmZzX2tlcm5fbW91bnQoJmFtcDtjb25maWdmc19mc190eXBlLCBTQl9LRVJOTU9VTlQsCiYjNDM7CQkJCQkgICAgIGNvbmZpZ2ZzX2ZzX3R5cGUubmFtZSwgTlVMTCk7CiYjNDM7CQkJaWYgKElTX0VSUihtbnQpKQomIzQzOwkJCQlyZXR1cm4gRVJSX0NBU1QobW50KTsKJiM0MzsJCQlzcGluX2xvY2soJmFtcDtjb25maWdmc19waW5fbG9jayk7CiYjNDM7CQkJaW5mby0mZ3Q7bW50ID0gbW50OwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQltbnRnZXQoaW5mby0mZ3Q7bW50KTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlpbmZvLSZndDttbnRfY291bnQmIzQzOyYjNDM7OwomIzQzOwlzcGluX3VubG9jaygmYW1wO2NvbmZpZ2ZzX3Bpbl9sb2NrKTsKJiM0MzsJcmV0dXJuIGluZm8tJmd0O21udC0mZ3Q7bW50X3Jvb3Q7CiB9CiAKLXZvaWQgY29uZmlnZnNfcmVsZWFzZV9mcyh2b2lkKQomIzQzO3ZvaWQgY29uZmlnZnNfcmVsZWFzZV9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogewotCXNpbXBsZV9yZWxlYXNlX2ZzKCZhbXA7Y29uZmlnZnNfbW91bnQsICZhbXA7Y29uZmlnZnNfbW50X2NvdW50KTsKJiM0MzsJc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8gPSBjb25maWdmc19yb290OwomIzQzOwlzdHJ1Y3QgdmZzbW91bnQgKm1udDsKJiM0MzsKJiM0MzsJc3Bpbl9sb2NrKCZhbXA7Y29uZmlnZnNfcGluX2xvY2spOwomIzQzOwlpZiAoc2IpCiYjNDM7CQlpbmZvID0gc2ItJmd0O3NfZnNfaW5mbzsKJiM0MzsJbW50ID0gaW5mby0mZ3Q7bW50OwomIzQzOwlpZiAoLS1pbmZvLSZndDttbnRfY291bnQpCiYjNDM7CQlpbmZvLSZndDttbnQgPSBOVUxMOwomIzQzOwlzcGluX3VubG9jaygmYW1wO2NvbmZpZ2ZzX3Bpbl9sb2NrKTsKJiM0MzsJbW50cHV0KG1udCk7CiB9CiAKJiM0MztzdHJ1Y3QgbmV0ICpjb25maWdmc19uc19mcm9tX2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKQomIzQzO3sKJiM0MzsJc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8gPSBjb25maWdmc19yb290OwomIzQzOwlzdHJ1Y3QgbmV0ICpuZXRfbnMgPSBOVUxMOwomIzQzOwomIzQzOwlpZiAoZ3JvdXApIHsKJiM0MzsJCXN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGdyb3VwLSZndDtjZ19pdGVtLmNpX2RlbnRyeTsKJiM0MzsKJiM0MzsJCWluZm8gPSBkZW50cnktJmd0O2Rfc2ItJmd0O3NfZnNfaW5mbzsKJiM0MzsJCWlmIChpbmZvKQomIzQzOwkJCW5ldF9ucyA9IGluZm8tJmd0O25ldF9uczsKJiM0MzsJfQomIzQzOwlyZXR1cm4gbmV0X25zOwomIzQzO30KJiM0MztFWFBPUlRfU1lNQk9MX0dQTChjb25maWdmc19uc19mcm9tX2dyb3VwKTsKIAogc3RhdGljIGludCBfX2luaXQgY29uZmlnZnNfaW5pdCh2b2lkKQogewpAQCAtMTQzLDE4ICYjNDM7MzAyLDI3IEBAIHN0YXRpYyBpbnQgX19pbml0IGNvbmZpZ2ZzX2luaXQodm9pZCkKIAlpZiAoIWNvbmZpZ2ZzX2Rpcl9jYWNoZXApCiAJCWdvdG8gb3V0OwogCiYjNDM7CWNvbmZpZ2ZzX3Jvb3QgPSBjb25maWdmc19nZXRfc3VwZXJfaW5mbygmYW1wO2luaXRfbmV0KTsKJiM0MzsJaWYgKElTX0VSUihjb25maWdmc19yb290KSkgewomIzQzOwkJZXJyID0gUFRSX0VSUihjb25maWdmc19yb290KTsKJiM0MzsJCWdvdG8gb3V0MjsKJiM0MzsJfQomIzQzOwogCWVyciA9IHN5c2ZzX2NyZWF0ZV9tb3VudF9wb2ludChrZXJuZWxfa29iaiwgJiMzNDtjb25maWcmIzM0Oyk7CiAJaWYgKGVycikKLQkJZ290byBvdXQyOwomIzQzOwkJZ290byBvdXQzOwogCiAJZXJyID0gcmVnaXN0ZXJfZmlsZXN5c3RlbSgmYW1wO2NvbmZpZ2ZzX2ZzX3R5cGUpOwogCWlmIChlcnIpCi0JCWdvdG8gb3V0MzsKJiM0MzsJCWdvdG8gb3V0NDsKIAogCXJldHVybiAwOwotb3V0MzoKJiM0MztvdXQ0OgogCXByX2VycigmIzM0O1VuYWJsZSB0byByZWdpc3RlciBmaWxlc3lzdGVtIVxuJiMzNDspOwogCXN5c2ZzX3JlbW92ZV9tb3VudF9wb2ludChrZXJuZWxfa29iaiwgJiMzNDtjb25maWcmIzM0Oyk7CiYjNDM7b3V0MzoKJiM0MzsJY29uZmlnZnNfcHV0X3N1cGVyX2luZm8oY29uZmlnZnNfcm9vdCk7CiYjNDM7CWNvbmZpZ2ZzX3Jvb3QgPSBOVUxMOwogb3V0MjoKIAlrbWVtX2NhY2hlX2Rlc3Ryb3koY29uZmlnZnNfZGlyX2NhY2hlcCk7CiAJY29uZmlnZnNfZGlyX2NhY2hlcCA9IE5VTEw7CkBAIC0xNjYsNiAmIzQzOzMzNCw4IEBAIHN0YXRpYyB2b2lkIF9fZXhpdCBjb25maWdmc19leGl0KHZvaWQpCiB7CiAJdW5yZWdpc3Rlcl9maWxlc3lzdGVtKCZhbXA7Y29uZmlnZnNfZnNfdHlwZSk7CiAJc3lzZnNfcmVtb3ZlX21vdW50X3BvaW50KGtlcm5lbF9rb2JqLCAmIzM0O2NvbmZpZyYjMzQ7KTsKJiM0MzsJY29uZmlnZnNfcHV0X3N1cGVyX2luZm8oY29uZmlnZnNfcm9vdCk7CiYjNDM7CWNvbmZpZ2ZzX3Jvb3QgPSBOVUxMOwogCWttZW1fY2FjaGVfZGVzdHJveShjb25maWdmc19kaXJfY2FjaGVwKTsKIAljb25maWdmc19kaXJfY2FjaGVwID0gTlVMTDsKIH0KZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmMKaW5kZXggM2Q1Y2Q1YmYzYjA1MzcuLmU3YWJiZjYzMmNjNzBkIDEwMDY0NAotLS0gYS9mcy9uYW1lc3BhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uYW1lc3BhY2UuYwpAQCAtMTQ4Miw2ICYjNDM7MTQ4MiwxNyBAQCBzdHJ1Y3QgdmZzbW91bnQgKm1udF9jbG9uZV9pbnRlcm5hbChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCkKIAlyZXR1cm4gJmFtcDtwLSZndDttbnQ7CiB9CiAKJiM0MztzdHJ1Y3QgdmZzbW91bnQgKm1udF9jbG9uZV9kaXJlY3Qoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtb3VudCAqcDsKJiM0MzsKJiM0MzsJcCA9IGNsb25lX21udChyZWFsX21vdW50KG1udCksIGRlbnRyeSwgQ0xfU0xBVkUpOwomIzQzOwlpZiAoSVNfRVJSKHApKQomIzQzOwkJcmV0dXJuIEVSUl9DQVNUKHApOwomIzQzOwlwLSZndDttbnQubW50X2ZsYWdzIHw9IE1OVF9JTlRFUk5BTDsKJiM0MzsJcmV0dXJuICZhbXA7cC0mZ3Q7bW50OwomIzQzO30KJiM0MzsKIC8qCiAgKiBSZXR1cm5zIHRoZSBtb3VudCB3aGljaCBlaXRoZXIgaGFzIHRoZSBzcGVjaWZpZWQgbW50X2lkLCBvciBoYXMgdGhlIG5leHQKICAqIHNtYWxsZXN0IGlkIGFmZXIgdGhlIHNwZWNpZmllZCBvbmUuCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmggYi9pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgKaW5kZXggZWY2NWM3NWJlZWFhZDguLjc2ZTBiYjFhNzJiOWRiIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9jb25maWdmcy5oCkBAIC0yNCw2ICYjNDM7MjQsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2xpc3QuaCZndDsgICAvKiBzdHJ1Y3QgbGlzdF9oZWFkICovCiAjaW5jbHVkZSAmbHQ7bGludXgva3JlZi5oJmd0OyAgIC8qIHN0cnVjdCBrcmVmICovCiAjaW5jbHVkZSAmbHQ7bGludXgvbXV0ZXguaCZndDsgIC8qIHN0cnVjdCBtdXRleCAqLwomIzQzOyNpbmNsdWRlICZsdDtuZXQvbmV0X25hbWVzcGFjZS5oJmd0OyAvKiBzdHJ1Y3QgbmV0ICovCiAKICNkZWZpbmUgQ09ORklHRlNfSVRFTV9OQU1FX0xFTgkyMAogCkBAIC0yMjYsOCAmIzQzOzIyNywxMyBAQCBzdHJ1Y3QgY29uZmlnZnNfZ3JvdXBfb3BlcmF0aW9ucyB7CiB9OwogCiBzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtIHsKJiM0MzsJc3RydWN0IGxpc3RfaGVhZAlzdV9saW5rOwogCXN0cnVjdCBjb25maWdfZ3JvdXAJc3VfZ3JvdXA7CiAJc3RydWN0IG11dGV4CQlzdV9tdXRleDsKJiM0MzsJaW50ICgqZmlsbF9zdWJzeXN0ZW0pKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cywKJiM0MzsJCQkgICAgICBzdHJ1Y3QgbmV0ICpuZXRfbnMpOwomIzQzOwl2b2lkICgqY2xlYXJfc3Vic3lzdGVtKShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMsCiYjNDM7CQkJCXN0cnVjdCBuZXQgKm5ldF9ucyk7CiB9OwogCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnRvX2NvbmZpZ2ZzX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCkKQEAgLTI1Miw2ICYjNDM7MjU4LDggQEAgY29uZmlnZnNfcmVnaXN0ZXJfZGVmYXVsdF9ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpwYXJlbnRfZ3JvdXAsCiAJCQkJY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgKml0ZW1fdHlwZSk7CiB2b2lkIGNvbmZpZ2ZzX3VucmVnaXN0ZXJfZGVmYXVsdF9ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCk7CiAKJiM0MztzdHJ1Y3QgbmV0ICpjb25maWdmc19uc19mcm9tX2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKTsKJiM0MzsKIC8qIFRoZXNlIGZ1bmN0aW9ucyBjYW4gc2xlZXAgYW5kIGNhbiBhbGxvYyB3aXRoIEdGUF9LRVJORUwgKi8KIC8qIFdBUk5JTkc6IFRoZXNlIGNhbm5vdCBiZSBjYWxsZWQgdW5kZXJuZWF0aCBjb25maWdmcyBjYWxsYmFja3MhISAqLwogaW50IGNvbmZpZ2ZzX2RlcGVuZF9pdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cywKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW91bnQuaCBiL2luY2x1ZGUvbGludXgvbW91bnQuaAppbmRleCBhY2ZlN2VmODZhMWIzZi4uN2U3ZTdkNjZjMzAyNGIgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvbW91bnQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21vdW50LmgKQEAgLTc1LDYgJiM0Mzs3NSw3IEBAIGV4dGVybiB2b2lkIG1udF9kcm9wX3dyaXRlX2ZpbGUoc3RydWN0IGZpbGUgKmZpbGUpOwogZXh0ZXJuIHZvaWQgbW50cHV0KHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKIGV4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKm1udGdldChzdHJ1Y3QgdmZzbW91bnQgKm1udCk7CiBleHRlcm4gdm9pZCBtbnRfbWFrZV9zaG9ydHRlcm0oc3RydWN0IHZmc21vdW50ICptbnQpOwomIzQzO2V4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKm1udF9jbG9uZV9kaXJlY3Qoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSk7CiBleHRlcm4gc3RydWN0IHZmc21vdW50ICptbnRfY2xvbmVfaW50ZXJuYWwoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpOwogZXh0ZXJuIGJvb2wgX19tbnRfaXNfcmVhZG9ubHkoY29uc3Qgc3RydWN0IHZmc21vdW50ICptbnQpOwogZXh0ZXJuIGJvb2wgbW50X21heV9zdWlkKHN0cnVjdCB2ZnNtb3VudCAqbW50KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5MzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA5NTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQXNzZXNzaW5nIHRoZSBGdXp6aW5nIEltcGFjdCBvZiB0aGlzIFBhdGNoIFNlcmllcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIGEgbm9uLXRyaXZpYWwgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGtlcm5lbCwgYW5kIHRoZXJlZm9yZSwgZGVmaW5pdGVseSB3YXJyYW50cyBmdXp6aW5nLiBXZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhZGRpbmcgbmV0d29yayBuYW1lc3BhY2Ugc3VwcG9ydCB0byBOVk1lLW9GIHRhcmdldCBhbmQgY29uZmlnZnMuIFRoaXMgaXNuJiMzOTt0IGEgbWlub3IgdHdlYWs7IHRoaXMgZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IHRoZXNlIHN1YnN5c3RlbXMgaW50ZXJhY3QgYW5kIHRoZWlyIHBvdGVudGlhbCBmb3IgZXhwb3N1cmUuCgpTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHRoZSBtb2RpZmljYXRpb24gb2YgYGRyaXZlcnMvbnZtZS90YXJnZXQvYCBhbmQgYGZzL2NvbmZpZ2ZzL2AgdGhhdCYjMzk7cyB0aGUgcmVkIGZsYWcuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYG5ldF9uc2AgaW50byBgc3RydWN0IG52bWV0X3BvcnRgIGFuZCBgc3RydWN0IG52bWV0X3N1YnN5c2AgaXMgYSBtYWpvciBzdHJ1Y3R1cmFsIHNoaWZ0LiBUaGUgc3dpdGNoIHRvIFhBcnJheXMgKGBudm1ldF9wb3J0c194YWAsIGBudm1ldF9kaXNjX3hhYCwgYGNvbmZpZ2ZzX3N1cGVyX3hhYCkgaW5kZXhlZCBieSBgbnNfaWRgIHVuZGVyc2NvcmVzIHRoZSBjb3JlIGFyY2hpdGVjdHVyYWwgY2hhbmdlLiBUaGlzIGFsc28gaW5jbHVkZXMgdGhlIG5ldyBgY29uZmlnZnNfbnNfZnJvbV9ncm91cCgpYCBmdW5jdGlvbi4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2UgdG8gYGZzL25hbWVzcGFjZS5jYCB0byBhZGQgYG1udF9jbG9uZV9kaXJlY3QoKWAgZm9yIG5hbWVzcGFjZSBjbG9uaW5nIGlzIHNpZ25pZmljYW50LgoKVGhlIHJlYWNoYWJpbGl0eSBpcyBhIGNyaXRpY2FsIGNvbnNpZGVyYXRpb24uIFRoaXMgY29kZSwgYWZmZWN0aW5nIGJvdGggYGZzL2NvbmZpZ2ZzL2AgYW5kIGRyaXZlcnMsIGlzIHZlcnkgbGlrZWx5IHRvdWNoZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIGFuZCBRRU1VLCBtYWtpbmcgaXQgZXZlbiBtb3JlIHJlbGV2YW50IGZyb20gYSBzZWN1cml0eSBwZXJzcGVjdGl2ZS4gSXQgZGlyZWN0bHkgbW9kaWZpZXMgY29yZSBrZXJuZWwgbG9naWMsIG1ha2luZyBpdCByaXBlIGZvciBmdXp6aW5nLiBUaHVzLCBgV29ydGhGdXp6aW5nPXRydWVgIGlzIHRoZSByaWdodCBjb25jbHVzaW9uLgoKTm93LCBsZXQmIzM5O3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSB3b3J0aCBmb2N1c2luZyBvbiBmb3IgZnV6emluZy4gSSYjMzk7dmUgY29tcGlsZWQgYSBsaXN0OgoKLSBgbnZtZXRfZ2V0X25zX2lkYAotIGBudm1ldF9nZXRfcG9ydF9saXN0YAotIGBudm1ldF9hZGRfcG9ydF9saXN0YAotIGBudm1ldF9kZWxfcG9ydF9saXN0YAotIGBudm1ldF9zdWJzeXNfbWFrZWAKLSBgbnZtZXRfcG9ydHNfbWFrZWAKLSBgbnZtZXRfcm9vdF9kaXNjb3ZlcnlfbnFuX3Nob3dgCi0gYG52bWV0X3Jvb3RfZGlzY292ZXJ5X25xbl9zdG9yZWAKLSBgbnZtZXRfY29uZmlnZnNfZmlsbF9zdWJzeXN0ZW1gCi0gYG52bWV0X2NvbmZpZ2ZzX2NsZWFyX3N1YnN5c3RlbWAKLSBgbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzYAotIGBudm1ldF9hZGRfZGlzY19zdWJzeXNgCi0gYG52bWV0X2RlbF9kaXNjX3N1YnN5c2AKLSBgbnZtZXRfcG9ydF9kaXNjX2NoYW5nZWRgCi0gYG52bWV0X3N1YnN5c19kaXNjX2NoYW5nZWRgCi0gYG52bWV0X2V4ZWN1dGVfZGlzY19nZXRfbG9nX3BhZ2VgCi0gYG52bWVfbG9vcF9maW5kX3BvcnRgCi0gYG52bWV0X3JkbWFfZW5hYmxlX3BvcnRgCi0gYG52bWV0X3JkbWFfYWRkX3BvcnRgCi0gYG52bWV0X3RjcF9hZGRfcG9ydGAKLSBgY29uZmlnZnNfbGlua19yb290YAotIGBjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW1gCi0gYGNvbmZpZ2ZzX2xpbmtfc3Vic3lzdGVtc2AKLSBgY29uZmlnZnNfdW5saW5rX3Jvb3RgCi0gYGNvbmZpZ2ZzX3VubGlua19zdWJzeXN0ZW1zYAotIGBjb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbWAKLSBgY29uZmlnZnNfZ2V0X3N1cGVyX2luZm9gCi0gYGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvYAotIGBjb25maWdmc19maWxsX3N1cGVyYAotIGBjb25maWdmc19nZXRfdHJlZWAKLSBgY29uZmlnZnNfa2lsbF9zYmAKLSBgY29uZmlnZnNfcGluX2ZzYAotIGBjb25maWdmc19yZWxlYXNlX2ZzYAotIGBjb25maWdmc19uc19mcm9tX2dyb3VwYAotIGBtbnRfY2xvbmVfZGlyZWN0YAoKRnJvbSB0aGlzIGxpc3QsIHNvbWUga2V5IHN5bWJvbHMganVtcCBvdXQgYXMgcGFydGljdWxhcmx5IHJlbGV2YW50OiBgY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtYCwgYGNvbmZpZ2ZzX2xpbmtfc3Vic3lzdGVtc2AsIGBjb25maWdmc191bmxpbmtfc3Vic3lzdGVtc2AsIGBjb25maWdmc19nZXRfc3VwZXJfaW5mb2AsIGBjb25maWdmc19maWxsX3N1cGVyYCwgYG52bWV0X2NvbmZpZ2ZzX2ZpbGxfc3Vic3lzdGVtYCwgYG52bWV0X2FkZF9kaXNjX3N1YnN5c2AsIGBudm1ldF9wb3J0c19tYWtlYCwgYW5kIGBudm1ldF9zdWJzeXNfbWFrZWAuIFRoZXNlIGFyZSB0aGUgY29yZSBlbnRyeSBwb2ludHMgZm9yIHRoZSBuZXR3b3JrIG5hbWVzcGFjZSBpbnRlZ3JhdGlvbiBhbmQgc3Vic3lzdGVtIG1hbmFnZW1lbnQuCgpGaW5hbGx5LCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMuIE9idmlvdXNseSwgYENPTkZJR19DT05GSUdGU19GU2AgZm9yIGNvbmZpZ2ZzLCBhbmQgYENPTkZJR19OVk1FX1RBUkdFVGAgZm9yIE5WTWUgdGFyZ2V0IGFyZSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGVzLiBXZSBhbHNvIHNob3VsZCBpbnZlc3RpZ2F0ZSBgQ09ORklHX05WTUVfVEFSR0VUX0xPT1BgLCBgQ09ORklHX05WTUVfVEFSR0VUX1RDUGAsIGFuZCBgQ09ORklHX05WTUVfVEFSR0VUX1JETUFgIGFzIHRoZXkgbWlnaHQgb3BlbiBhZGRpdGlvbmFsIGF0dGFjayBzdXJmYWNlcyB0aHJvdWdoIHRoZSBkaWZmZXJlbnQgdHJhbnNwb3J0cy4gTGV0JiMzOTtzIGRlbHZlIGludG8gYGRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZ2AgYW5kIGBmcy9jb25maWdmcy9LY29uZmlnYCB0byBjb25maXJtIGFuZCBpZGVudGlmeSBhbnkgb3RoZXIgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDEwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9jb25maWdmcy9kaXIuYz05ODQ9c3RhdGljIGludCBjb25maWdmc19kdW1wKHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkLCBpbnQgbGV2ZWwpXG4tLVxuZnMvY29uZmlnZnMvZGlyLmMtMTAyNi0gKiBzdWJzeXN0ZW0gaXNuJiMzOTt0IHJlZ2lzdGVyZWQsIG9yIHdoZW4gY29uZmlnZnMgaXMgbG9hZGluZyBvciB1bmxvYWRpbmcuXG5mcy9jb25maWdmcy9kaXIuYzoxMDI3OiAqIEp1c3QgbGlrZSBjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0oKS4gIFNvIHdlIHRha2UgdGhlIHNhbWVcbmZzL2NvbmZpZ2ZzL2Rpci5jLTEwMjgtICogcHJlY2F1dGlvbnMuICBXZSBwaW4gdGhlIGZpbGVzeXN0ZW0uICBXZSBsb2NrIGNvbmZpZ2ZzX2RpcmVudF9sb2NrLlxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jPTE4NjQ9c3RhdGljIGludCBjb25maWdmc19saW5rX3Jvb3Qoc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gICppbmZvLFxuLS1cbmZzL2NvbmZpZ2ZzL2Rpci5jLTE5MTgtXG5mcy9jb25maWdmcy9kaXIuYzoxOTE5OmludCBjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKVxuZnMvY29uZmlnZnMvZGlyLmMtMTkyMC17XG4tLVxuZnMvY29uZmlnZnMvZGlyLmM9MjA4NT12b2lkIGNvbmZpZ2ZzX3VucmVnaXN0ZXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cylcbi0tXG5mcy9jb25maWdmcy9kaXIuYy0yMTA4LVxuZnMvY29uZmlnZnMvZGlyLmM6MjEwOTpFWFBPUlRfU1lNQk9MKGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbSk7XG5mcy9jb25maWdmcy9kaXIuYy0yMTEwLUVYUE9SVF9TWU1CT0woY29uZmlnZnNfdW5yZWdpc3Rlcl9zdWJzeXN0ZW0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDEwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMjgzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyB0aGUgTlZNZSBUYXJnZXQgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBzdHJhaWdodCBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gY2hlY2sgYGRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZ2AuIFdlJiMzOTtyZSBvYnZpb3VzbHkgY29uY2VybmVkIHdpdGggZW5hYmxpbmcgb3IgY29uZmlndXJpbmcgdGhlIE5WTWUgdGFyZ2V0IGZ1bmN0aW9uYWxpdHksIGFuZCB0aGF0IEtjb25maWcgZmlsZSBpcyB0aGUgKmNhbm9uaWNhbCogcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBmb3IgdGhlIGNvbnRyb2xsaW5nIGJ1aWxkIG9wdGlvbnMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBhZnRlciB0aGUgYE5WTUVfVEFSR0VUYCBzeW1ib2wuIEkmIzM5O2QgZXhwZWN0IGl0IHRvIGJlIHRoZSBtYWluIHN3aXRjaCwgdGhlIGZ1bmRhbWVudGFsIGZsYWcuIERvZXMgaXQgZXhpc3Q/IFdoYXQgb3RoZXIgY29uZmlndXJhdGlvbiBvcHRpb25zIGRvZXMgaXQgZGVwZW5kIG9uIG9yIGludGVyYWN0IHdpdGg/IEFyZSB0aGVyZSByZWxhdGVkIHN5bWJvbHMgdGhhdCBtaWdodCBuZWVkIHRvIGJlIGVuYWJsZWQgZm9yIGl0IHRvIGZ1bmN0aW9uIGNvcnJlY3RseT8gQXJlIHRoZXJlIG1vcmUgZ3JhbnVsYXIgb3B0aW9ucyBJIG5lZWQgdG8ga25vdyBhYm91dCB0byBjb25maWd1cmUgdGhlIGJlaGF2aW9yPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBzeXN0ZW0sIGFuZCB0aGF0IEtjb25maWcgZmlsZSBzaG91bGQgZ2l2ZSBtZSB0aGUgY29yZSBpbnNpZ2h0cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yMyAxMDoxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTlZNRV9UQVJHRVQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvdGFyZ2V0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMi1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzozOmNvbmZpZyBOVk1FX1RBUkdFVFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTQtXHR0cmlzdGF0ZSBcJiMzNDtOVk1lIFRhcmdldCBzdXBwb3J0XCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTE5LVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjIwOmNvbmZpZyBOVk1FX1RBUkdFVF9ERUJVR0ZTXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMjEtICAgICAgICBib29sIFwmIzM0O05WTWUgVGFyZ2V0IGRlYnVnZnMgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0yOC1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzoyOTpjb25maWcgTlZNRV9UQVJHRVRfUEFTU1RIUlVcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0zMC1cdGJvb2wgXCYjMzQ7TlZNZSBUYXJnZXQgUGFzc3Rocm91Z2ggc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy00MC1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo0MTpjb25maWcgTlZNRV9UQVJHRVRfTE9PUFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTQyLVx0dHJpc3RhdGUgXCYjMzQ7TlZNZSBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy01MS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo1Mjpjb25maWcgTlZNRV9UQVJHRVRfUkRNQVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTUzLVx0dHJpc3RhdGUgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgUkRNQSB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy02Mi1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo2Mzpjb25maWcgTlZNRV9UQVJHRVRfRkNcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy02NC1cdHRyaXN0YXRlIFwmIzM0O05WTWUgb3ZlciBGYWJyaWNzIEZDIHRhcmdldCBkcml2ZXJcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNzMtXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NzQ6Y29uZmlnIE5WTUVfVEFSR0VUX0ZDTE9PUFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTc1LVx0dHJpc3RhdGUgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgRkMgVHJhbnNwb3J0IExvb3BiYWNrIFRlc3QgZHJpdmVyXCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTg2LVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjg3OmNvbmZpZyBOVk1FX1RBUkdFVF9UQ1BcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy04OC1cdHRyaXN0YXRlIFwmIzM0O05WTWUgb3ZlciBGYWJyaWNzIFRDUCB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy05Ni1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo5Nzpjb25maWcgTlZNRV9UQVJHRVRfVENQX1RMU1xuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTk4LVx0Ym9vbCBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IFRMUyBlbmNyeXB0aW9uIHN1cHBvcnRcJiMzNDtcbi0tXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTA5LVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjExMDpjb25maWcgTlZNRV9UQVJHRVRfQVVUSFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTExMS1cdGJvb2wgXCYjMzQ7TlZNZSBvdmVyIEZhYnJpY3MgSW4tYmFuZCBBdXRoZW50aWNhdGlvbiBpbiB0YXJnZXQgc2lkZVwmIzM0O1xuLS1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMTktXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6MTIwOmNvbmZpZyBOVk1FX1RBUkdFVF9BVVRIX0RFQlVHXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMTIxLVx0Ym9vbCBcJiMzNDtOVk1lIG92ZXIgRmFicmljcyBJbi1iYW5kIEF1dGhlbnRpY2F0aW9uIGRlYnVnIG1lc3NhZ2VzXCYjMzQ7XG4tLVxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTEyOC1cbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzoxMjk6Y29uZmlnIE5WTUVfVEFSR0VUX1BDSV9FUEZcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMzAtXHR0cmlzdGF0ZSBcJiMzNDtOVk1lIFBDSSBFbmRwb2ludCBGdW5jdGlvbiB0YXJnZXQgc3VwcG9ydFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDEwOjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMzE4CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNjYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9ucyBmb3IgTlZNZSBUYXJnZXQqKgoKT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgY29yZSBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UgZm9yIHRoaXMgTlZNZSB0YXJnZXQgc2V0dXAuIEl0IGxvb2tzIGxpa2UgYENPTkZJR0ZTX0ZTYCBpcyB0aGUgYWJzb2x1dGUgbXVzdC1oYXZlIGhlcmUsIHRoYXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gd2UmIzM5O3JlIGJ1aWxkaW5nIG9uLiBBbmQgb2J2aW91c2x5LCBgTlZNRV9UQVJHRVRgIGl0c2VsZiBuZWVkcyB0byBiZSBlbmFibGVkLgoKQmV5b25kIHRoZSBjb3JlLCBpdCB3b3VsZCBiZSBzbWFydCB0byBlbmFibGUgdGhlIHRyYW5zcG9ydC1zcGVjaWZpYyBvcHRpb25zIGZvciB0ZXN0aW5nLiBgTlZNRV9UQVJHRVRfTE9PUGAsIGBOVk1FX1RBUkdFVF9UQ1BgLCBhbmQgYE5WTUVfVEFSR0VUX1JETUFgIGFyZSBhbGwgZ29vZCBjYW5kaWRhdGVzLiBIYXZpbmcgdGhvc2Ugb3B0aW9ucyB3aWxsIGFsbG93IG1lIHRvIHByb3Blcmx5IGV4ZXJjaXNlIHRoZSB0cmFuc3BvcnQtc3BlY2lmaWMgY29kZS4KCkxldCYjMzk7cyBzdGFydCBieSBkb3VibGUtY2hlY2tpbmcgYENPTkZJR0ZTX0ZTYC4gVGhhdCYjMzk7cyB0aGUgY3JpdGljYWwgc3RhcnRpbmcgcG9pbnQsIGFuZCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIG9idmlvdXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTA6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIENPTkZJR0ZTX0ZTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL2NvbmZpZ2ZzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcbmZzL2NvbmZpZ2ZzL0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1VzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjMgMTA6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM2NjIKCQkJCQkJCW91dHB1dDogMjc0CgkJCQkJCQl0aG91Z2h0czogMjM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgVGhpbmtpbmcqKgoKT2theSwgdGltZSB0byBnZXQgdG8gd29yay4gRmlyc3QgdGhpbmcmIzM5O3MgZmlyc3Q6IEkgbmVlZCB0byBleHBsaWNpdGx5IHNldCBgRW5hYmxlQ29uZmlnc2AgdG8gdGhlIHJlbGV2YW50IHRhcmdldCBjb25maWd1cmF0aW9uczogYFsmIzM0O0NPTkZJR0ZTX0ZTJiMzNDssICYjMzQ7TlZNRV9UQVJHRVQmIzM0OywgJiMzNDtOVk1FX1RBUkdFVF9MT09QJiMzNDssICYjMzQ7TlZNRV9UQVJHRVRfVENQJiMzNDssICYjMzQ7TlZNRV9UQVJHRVRfUkRNQSYjMzQ7XWAuIFRoYXQgZW5zdXJlcyB0aG9zZSBtb2R1bGVzIGFyZSBwcm9wZXJseSBlbmFibGVkIGZvciB0aGlzIHByb2Nlc3MuCgpOb3csIGxldCYjMzk7cyB0dXJuIG15IGF0dGVudGlvbiB0byB0aGUgY29yZSBmdW5jdGlvbnMuIEkgc2hvdWxkIGV4YW1pbmUgYEZvY3VzU3ltYm9sc2AgdG8gZW5zdXJlIEkgaGF2ZSBhbGwgdGhlIGtleSBwbGF5ZXJzLiBIbW0sIGxldCYjMzk7cyBzZWUuIEkmIzM5O3ZlIGdvdCBhIGdvb2Qgc3RhcnQgd2l0aDoKYGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbWAKYGNvbmZpZ2ZzX2xpbmtfc3Vic3lzdGVtc2AKYGNvbmZpZ2ZzX3VubGlua19zdWJzeXN0ZW1zYApgY29uZmlnZnNfZ2V0X3N1cGVyX2luZm9gCmBjb25maWdmc19maWxsX3N1cGVyYApgbnZtZXRfY29uZmlnZnNfZmlsbF9zdWJzeXN0ZW1gCmBudm1ldF9hZGRfZGlzY19zdWJzeXNgCmBudm1ldF9wb3J0c19tYWtlYApgbnZtZXRfc3Vic3lzX21ha2VgCgpUaGF0JiMzOTtzIGEgc29saWQgZm91bmRhdGlvbiBmb3IgbWFuYWdpbmcgdGhlIGZpbGVzeXN0ZW0gYW5kIE5WTWUgc3Vic3lzdGVtcy4KCkFscmlnaHQsIGJ1dCBJIGNhbiYjMzk7dCBiZSB0b28gaGFzdHkuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZy4gTGV0IG1lIGV4cGxvcmUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtYXkgYmUgdXNlZnVsLiBPa2F5LCBsZXQmIzM5O3Mgc2VlOgpgbnZtZXRfZ2V0X3BvcnRfbGlzdGAKYG52bWV0X2FkZF9wb3J0X2xpc3RgCmBudm1ldF9kZWxfcG9ydF9saXN0YApgbnZtZXRfcm9vdF9kaXNjb3ZlcnlfbnFuX3N0b3JlYApgbnZtZXRfZXhlY3V0ZV9kaXNjX2dldF9sb2dfcGFnZWAKClRob3NlIGxvb2sgcHJvbWlzaW5nLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgcG9ydCBtYW5hZ2VtZW50IGFuZCBkaXNjb3ZlcnkuIFRoZXkgZGVmaW5pdGVseSBuZWVkIHRvIGJlIGluY2x1ZGVkLiBJJiMzOTtsbCBhZGQgdGhlbSB0byBgRm9jdXNTeW1ib2xzYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIG1vcmUgY29tcHJlaGVuc2l2ZSB2aWV3IG9mIHRoZSBzeXN0ZW0mIzM5O3MgaW5uZXIgd29ya2luZ3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzIzIDEwOjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDT05GSUdGU19GUyYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVF9MT09QJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUX1RDUCYjMzQ7LAogICAgJiMzNDtOVk1FX1RBUkdFVF9SRE1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7Y29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtJiMzNDssCiAgICAmIzM0O2NvbmZpZ2ZzX2xpbmtfc3Vic3lzdGVtcyYjMzQ7LAogICAgJiMzNDtjb25maWdmc191bmxpbmtfc3Vic3lzdGVtcyYjMzQ7LAogICAgJiMzNDtjb25maWdmc19nZXRfc3VwZXJfaW5mbyYjMzQ7LAogICAgJiMzNDtjb25maWdmc19maWxsX3N1cGVyJiMzNDssCiAgICAmIzM0O252bWV0X2NvbmZpZ2ZzX2ZpbGxfc3Vic3lzdGVtJiMzNDssCiAgICAmIzM0O252bWV0X2FkZF9kaXNjX3N1YnN5cyYjMzQ7LAogICAgJiMzNDtudm1ldF9wb3J0c19tYWtlJiMzNDssCiAgICAmIzM0O252bWV0X3N1YnN5c19tYWtlJiMzNDssCiAgICAmIzM0O252bWV0X2FkZF9wb3J0X2xpc3QmIzM0OywKICAgICYjMzQ7bnZtZXRfZGVsX3BvcnRfbGlzdCYjMzQ7LAogICAgJiMzNDtudm1ldF9yb290X2Rpc2NvdmVyeV9ucW5fc3RvcmUmIzM0OywKICAgICYjMzQ7bnZtZXRfZXhlY3V0ZV9kaXNjX2dldF9sb2dfcGFnZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldHdvcmsgbmFtZXNwYWNlIHN1cHBvcnQgZm9yIGNvbmZpZ2ZzIGFuZCB0aGUgTlZNZS1vRiB0YXJnZXQuIEl0IG1vZGlmaWVzIGNvcmUgY29uZmlnZnMgbG9naWMgdG8gc3VwcG9ydCBtdWx0aXBsZSBzdXBlcmJsb2NrcyBwZXIgbmV0d29yayBuYW1lc3BhY2UgYW5kIHVwZGF0ZXMgdGhlIE5WTWUgdGFyZ2V0IHRvIHVzZSBwZXItbmFtZXNwYWNlIGRpc2NvdmVyeSBzdWJzeXN0ZW1zIGFuZCBwb3J0cy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUga2VybmVsIGNvZGUuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NPTkZJR0ZTX0ZTJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUX0xPT1AmIzM0OywKICAgICYjMzQ7TlZNRV9UQVJHRVRfVENQJiMzNDssCiAgICAmIzM0O05WTUVfVEFSR0VUX1JETUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0mIzM0OywKICAgICYjMzQ7Y29uZmlnZnNfbGlua19zdWJzeXN0ZW1zJiMzNDssCiAgICAmIzM0O2NvbmZpZ2ZzX3VubGlua19zdWJzeXN0ZW1zJiMzNDssCiAgICAmIzM0O2NvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvJiMzNDssCiAgICAmIzM0O2NvbmZpZ2ZzX2ZpbGxfc3VwZXImIzM0OywKICAgICYjMzQ7bnZtZXRfY29uZmlnZnNfZmlsbF9zdWJzeXN0ZW0mIzM0OywKICAgICYjMzQ7bnZtZXRfYWRkX2Rpc2Nfc3Vic3lzJiMzNDssCiAgICAmIzM0O252bWV0X3BvcnRzX21ha2UmIzM0OywKICAgICYjMzQ7bnZtZXRfc3Vic3lzX21ha2UmIzM0OywKICAgICYjMzQ7bnZtZXRfYWRkX3BvcnRfbGlzdCYjMzQ7LAogICAgJiMzNDtudm1ldF9kZWxfcG9ydF9saXN0JiMzNDssCiAgICAmIzM0O252bWV0X3Jvb3RfZGlzY292ZXJ5X25xbl9zdG9yZSYjMzQ7LAogICAgJiMzNDtudm1ldF9leGVjdXRlX2Rpc2NfZ2V0X2xvZ19wYWdlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgbmV0d29yayBuYW1lc3BhY2Ugc3VwcG9ydCBmb3IgY29uZmlnZnMgYW5kIHRoZSBOVk1lLW9GIHRhcmdldC4gSXQgbW9kaWZpZXMgY29yZSBjb25maWdmcyBsb2dpYyB0byBzdXBwb3J0IG11bHRpcGxlIHN1cGVyYmxvY2tzIHBlciBuZXR3b3JrIG5hbWVzcGFjZSBhbmQgdXBkYXRlcyB0aGUgTlZNZSB0YXJnZXQgdG8gdXNlIHBlci1uYW1lc3BhY2UgZGlzY292ZXJ5IHN1YnN5c3RlbXMgYW5kIHBvcnRzLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBrZXJuZWwgY29kZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDEwOjEwOjE0LjEyMjU1OTA3NFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyMTUzODgyMTM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNPTkZJR0ZTX0ZTXCIsXG4gICAgXCJOVk1FX1RBUkdFVFwiLFxuICAgIFwiTlZNRV9UQVJHRVRfTE9PUFwiLFxuICAgIFwiTlZNRV9UQVJHRVRfVENQXCIsXG4gICAgXCJOVk1FX1RBUkdFVF9SRE1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtXCIsXG4gICAgXCJjb25maWdmc19saW5rX3N1YnN5c3RlbXNcIixcbiAgICBcImNvbmZpZ2ZzX3VubGlua19zdWJzeXN0ZW1zXCIsXG4gICAgXCJjb25maWdmc19nZXRfc3VwZXJfaW5mb1wiLFxuICAgIFwiY29uZmlnZnNfZmlsbF9zdXBlclwiLFxuICAgIFwibnZtZXRfY29uZmlnZnNfZmlsbF9zdWJzeXN0ZW1cIixcbiAgICBcIm52bWV0X2FkZF9kaXNjX3N1YnN5c1wiLFxuICAgIFwibnZtZXRfcG9ydHNfbWFrZVwiLFxuICAgIFwibnZtZXRfc3Vic3lzX21ha2VcIixcbiAgICBcIm52bWV0X2FkZF9wb3J0X2xpc3RcIixcbiAgICBcIm52bWV0X2RlbF9wb3J0X2xpc3RcIixcbiAgICBcIm52bWV0X3Jvb3RfZGlzY292ZXJ5X25xbl9zdG9yZVwiLFxuICAgIFwibnZtZXRfZXhlY3V0ZV9kaXNjX2dldF9sb2dfcGFnZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgbmV0d29yayBuYW1lc3BhY2Ugc3VwcG9ydCBmb3IgY29uZmlnZnMgYW5kIHRoZSBOVk1lLW9GIHRhcmdldC4gSXQgbW9kaWZpZXMgY29yZSBjb25maWdmcyBsb2dpYyB0byBzdXBwb3J0IG11bHRpcGxlIHN1cGVyYmxvY2tzIHBlciBuZXR3b3JrIG5hbWVzcGFjZSBhbmQgdXBkYXRlcyB0aGUgTlZNZSB0YXJnZXQgdG8gdXNlIHBlci1uYW1lc3BhY2UgZGlzY292ZXJ5IHN1YnN5c3RlbXMgYW5kIHBvcnRzLiBUaGVzZSBhcmUgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHJlYWNoYWJsZSBrZXJuZWwgY29kZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTA6MTA6MTQuMTIyNTY3NzI1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjE1NzQ5NjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMDE1NjkxZmJhMzdjYzJiODRiMmRiZjI0YmQ3NjkyYjU1ZjRhNjJjNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIEp1biAyMyAxMDoxMDoxMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmMgYi9kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmNcXG5pbmRleCBiODhmODk3ZjA2ZTI1ZS4uNzYzNmFjMzc3M2I0MDAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jXFxuKysrIGIvZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jXFxuQEAgLTI1LDggKzI1LDcgQEBcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG52bWV0X2hvc3RfdHlwZTtcXG4gc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG52bWV0X3N1YnN5c190eXBlO1xcbiBcXG4tc3RhdGljIExJU1RfSEVBRChudm1ldF9wb3J0c19saXN0KTtcXG4tc3RydWN0IGxpc3RfaGVhZCAqbnZtZXRfcG9ydHMgPSBcXHUwMDI2bnZtZXRfcG9ydHNfbGlzdDtcXG4rc3RhdGljIERFRklORV9YQVJSQVkobnZtZXRfcG9ydHNfeGEpO1xcbiBcXG4gc3RydWN0IG52bWV0X3R5cGVfbmFtZV9tYXAge1xcbiBcXHR1OFxcdFxcdHR5cGU7XFxuQEAgLTUxLDYgKzUwLDcwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbnZtZXRfdHlwZV9uYW1lX21hcCBudm1ldF9hZGRyX2ZhbWlseVtdID0ge1xcbiBcXHR7IE5WTUZfQUREUl9GQU1JTFlfTE9PUCxcXHRcXFwibG9vcFxcXCIgfSxcXG4gfTtcXG4gXFxuK3U2NCBudm1ldF9nZXRfbnNfaWQoc3RydWN0IG5ldCAqbmV0X25zKVxcbit7XFxuK1xcdHN0cnVjdCBuc19jb21tb24gKm5zO1xcbitcXG4rXFx0aWYgKCFuZXRfbnMpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRucyA9IHRvX25zX2NvbW1vbihuZXRfbnMpO1xcbitcXHRyZXR1cm4gbmV0X25zID09IFxcdTAwMjZpbml0X25ldCA/IDAgOiBucy1cXHUwMDNlbnNfaWQ7XFxuK31cXG4rXFxuK3N0cnVjdCBsaXN0X2hlYWQgKm52bWV0X2dldF9wb3J0X2xpc3Qoc3RydWN0IG5ldCAqbmV0X25zKVxcbit7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgKnBvcnRfbGlzdDtcXG4rXFx0dTY0IG5zX2lkID0gbnZtZXRfZ2V0X25zX2lkKG5ldF9ucyk7XFxuK1xcbitcXHRwb3J0X2xpc3QgPSB4YV9sb2FkKFxcdTAwMjZudm1ldF9wb3J0c194YSwgbnNfaWQpO1xcbitcXHRyZXR1cm4gcG9ydF9saXN0O1xcbit9XFxuK1xcbitzdGF0aWMgaW50IG52bWV0X2FkZF9wb3J0X2xpc3Qoc3RydWN0IG52bWV0X3BvcnQgKnApXFxuK3tcXG4rXFx0dTY0IG5zX2lkID0gbnZtZXRfZ2V0X25zX2lkKHAtXFx1MDAzZW5ldF9ucyk7XFxuK1xcdHN0cnVjdCBsaXN0X2hlYWQgKnBvcnRfbGlzdDtcXG4rXFx0aW50IGVyciA9IDA7XFxuK1xcbitcXHR4YV9sb2NrKFxcdTAwMjZudm1ldF9wb3J0c194YSk7XFxuK1xcdHBvcnRfbGlzdCA9IHhhX2xvYWQoXFx1MDAyNm52bWV0X3BvcnRzX3hhLCBuc19pZCk7XFxuK1xcdGlmICghcG9ydF9saXN0KSB7XFxuK1xcdFxcdHBvcnRfbGlzdCA9IGt6YWxsb2Nfb2JqKCpwb3J0X2xpc3QpO1xcbitcXHRcXHRpZiAoIXBvcnRfbGlzdCkge1xcbitcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbitcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFx0XFx0SU5JVF9MSVNUX0hFQUQocG9ydF9saXN0KTtcXG4rXFx0XFx0ZXJyID0gX194YV9pbnNlcnQoXFx1MDAyNm52bWV0X3BvcnRzX3hhLCBuc19pZCxcXG4rXFx0XFx0XFx0XFx0ICBwb3J0X2xpc3QsIEdGUF9LRVJORUwpO1xcbitcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbitcXHRcXHRcXHRrZnJlZShwb3J0X2xpc3QpO1xcbitcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRsaXN0X2FkZChcXHUwMDI2cC1cXHUwMDNlZ2xvYmFsX2VudHJ5LCBwb3J0X2xpc3QpO1xcbitvdXRfdW5sb2NrOlxcbitcXHR4YV91bmxvY2soXFx1MDAyNm52bWV0X3BvcnRzX3hhKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbnZtZXRfZGVsX3BvcnRfbGlzdChzdHJ1Y3QgbnZtZXRfcG9ydCAqcClcXG4re1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3J0X2xpc3Q7XFxuK1xcdHU2NCBuc19pZCA9IG52bWV0X2dldF9uc19pZChwLVxcdTAwM2VuZXRfbnMpO1xcbitcXG4rXFx0eGFfbG9jayhcXHUwMDI2bnZtZXRfcG9ydHNfeGEpO1xcbitcXHRwb3J0X2xpc3QgPSB4YV9sb2FkKFxcdTAwMjZudm1ldF9wb3J0c194YSwgbnNfaWQpO1xcbitcXHRpZiAoIVdBUk5fT04oIXBvcnRfbGlzdCkpIHtcXG4rXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2cC1cXHUwMDNlZ2xvYmFsX2VudHJ5KTtcXG4rXFx0XFx0aWYgKGxpc3RfZW1wdHkocG9ydF9saXN0KSkge1xcbitcXHRcXHRcXHRfX3hhX2VyYXNlKFxcdTAwMjZudm1ldF9wb3J0c194YSwgbnNfaWQpO1xcbitcXHRcXHRcXHRrZnJlZShwb3J0X2xpc3QpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0eGFfdW5sb2NrKFxcdTAwMjZudm1ldF9wb3J0c194YSk7XFxuK31cXG4rXFxuIHN0YXRpYyBib29sIG52bWV0X2lzX3BvcnRfZW5hYmxlZChzdHJ1Y3QgbnZtZXRfcG9ydCAqcCwgY29uc3QgY2hhciAqY2FsbGVyKVxcbiB7XFxuIFxcdGlmIChwLVxcdTAwM2VlbmFibGVkKVxcbkBAIC0xNzE3LDYgKzE3ODAsNyBAQCBzdGF0aWMgdm9pZCBudm1ldF9zdWJzeXNfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuIHtcXG4gXFx0c3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzID0gdG9fc3Vic3lzKGl0ZW0pO1xcbiBcXG4rXFx0Y29uZmlnZnNfcmVtb3ZlX2RlZmF1bHRfZ3JvdXBzKFxcdTAwMjZzdWJzeXMtXFx1MDAzZWdyb3VwKTtcXG4gXFx0bnZtZXRfc3Vic3lzX2RlbF9jdHJscyhzdWJzeXMpO1xcbiBcXHRudm1ldF9zdWJzeXNfcHV0KHN1YnN5cyk7XFxuIH1cXG5AQCAtMTczNCwxOSArMTc5OCwyMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgbnZtZXRfc3Vic3lzX3R5cGUgPSB7XFxuIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwICpudm1ldF9zdWJzeXNfbWFrZShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcXG4gXFx0XFx0Y29uc3QgY2hhciAqbmFtZSlcXG4ge1xcbi1cXHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXM7XFxuK1xcdHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cywgKmRpc2Nfc3Vic3lzO1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXRfbnMgPSBjb25maWdmc19uc19mcm9tX2dyb3VwKGdyb3VwKTtcXG4gXFxuIFxcdGlmIChzeXNmc19zdHJlcShuYW1lLCBOVk1FX0RJU0NfU1VCU1lTX05BTUUpKSB7XFxuIFxcdFxcdHByX2VycihcXFwiY2FuJ3QgY3JlYXRlIGRpc2NvdmVyeSBzdWJzeXN0ZW0gdGhyb3VnaCBjb25maWdmc1xcXFxuXFxcIik7XFxuIFxcdFxcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xcbiBcXHR9XFxuIFxcbi1cXHRpZiAoc3lzZnNfc3RyZXEobmFtZSwgbnZtZXRfZGlzY19zdWJzeXMtXFx1MDAzZXN1YnN5c25xbikpIHtcXG4rXFx0ZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMobmV0X25zKTtcXG4rXFx0aWYgKCFkaXNjX3N1YnN5cylcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XFxuK1xcdGlmIChzeXNmc19zdHJlcShuYW1lLCBkaXNjX3N1YnN5cy1cXHUwMDNlc3Vic3lzbnFuKSkge1xcbiBcXHRcXHRwcl9lcnIoXFxcImNhbid0IGNyZWF0ZSBzdWJzeXN0ZW0gdXNpbmcgdW5pcXVlIGRpc2NvdmVyeSBOUU5cXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVkFMKTtcXG4gXFx0fVxcbiBcXG4tXFx0c3Vic3lzID0gbnZtZXRfc3Vic3lzX2FsbG9jKG5hbWUsIE5WTUVfTlFOX05WTUUpO1xcbitcXHRzdWJzeXMgPSBudm1ldF9zdWJzeXNfYWxsb2MobmFtZSwgTlZNRV9OUU5fTlZNRSwgbmV0X25zKTtcXG4gXFx0aWYgKElTX0VSUihzdWJzeXMpKVxcbiBcXHRcXHRyZXR1cm4gRVJSX0NBU1Qoc3Vic3lzKTtcXG4gXFxuQEAgLTIwMDQsOCArMjA3Miw5IEBAIHN0YXRpYyB2b2lkIG52bWV0X3BvcnRfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXFxuIFxcbiBcXHQvKiBMZXQgaW5mbGlnaHQgY29udHJvbGxlcnMgdGVhcmRvd24gY29tcGxldGUgKi9cXG4gXFx0Zmx1c2hfd29ya3F1ZXVlKG52bWV0X3dxKTtcXG4tXFx0bGlzdF9kZWwoXFx1MDAyNnBvcnQtXFx1MDAzZWdsb2JhbF9lbnRyeSk7XFxuK1xcdG52bWV0X2RlbF9wb3J0X2xpc3QocG9ydCk7XFxuIFxcbitcXHRjb25maWdmc19yZW1vdmVfZGVmYXVsdF9ncm91cHMoXFx1MDAyNnBvcnQtXFx1MDAzZWdyb3VwKTtcXG4gXFx0a2V5X3B1dChwb3J0LVxcdTAwM2VrZXlyaW5nKTtcXG4gXFx0a2ZyZWUocG9ydC1cXHUwMDNlYW5hX3N0YXRlKTtcXG4gXFx0a2ZyZWUocG9ydCk7XFxuQEAgLTIwNTcsNiArMjEyNiwxMCBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbnZtZXRfcG9ydHNfbWFrZShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcXG4gXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcdH1cXG4gXFxuK1xcdHBvcnQtXFx1MDAzZW5ldF9ucyA9IGNvbmZpZ2ZzX25zX2Zyb21fZ3JvdXAoZ3JvdXApO1xcbitcXHRpZiAoIXBvcnQtXFx1MDAzZW5ldF9ucylcXG4rXFx0XFx0cG9ydC1cXHUwMDNlbmV0X25zID0gZ2V0X25ldChcXHUwMDI2aW5pdF9uZXQpO1xcbitcXG4gXFx0aWYgKElTX0VOQUJMRUQoQ09ORklHX05WTUVfVEFSR0VUX1RDUF9UTFMpIFxcdTAwMjZcXHUwMDI2IG52bWVfa2V5cmluZ19pZCgpKSB7XFxuIFxcdFxcdHBvcnQtXFx1MDAzZWtleXJpbmcgPSBrZXlfbG9va3VwKG52bWVfa2V5cmluZ19pZCgpKTtcXG4gXFx0XFx0aWYgKElTX0VSUihwb3J0LVxcdTAwM2VrZXlyaW5nKSkge1xcbkBAIC0yMDcyLDcgKzIxNDUsNyBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbnZtZXRfcG9ydHNfbWFrZShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcXG4gXFx0XFx0XFx0cG9ydC1cXHUwMDNlYW5hX3N0YXRlW2ldID0gTlZNRV9BTkFfSU5BQ0NFU1NJQkxFO1xcbiBcXHR9XFxuIFxcbi1cXHRsaXN0X2FkZChcXHUwMDI2cG9ydC1cXHUwMDNlZ2xvYmFsX2VudHJ5LCBcXHUwMDI2bnZtZXRfcG9ydHNfbGlzdCk7XFxuK1xcdG52bWV0X2FkZF9wb3J0X2xpc3QocG9ydCk7XFxuIFxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cG9ydC1cXHUwMDNlZW50cnkpO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2cG9ydC1cXHUwMDNlc3Vic3lzdGVtcyk7XFxuQEAgLTIxMTksOSArMjE5Miw2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBudm1ldF9wb3J0c190eXBlID0ge1xcbiBcXHQuY3Rfb3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiB9O1xcbiBcXG4tc3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgbnZtZXRfc3Vic3lzdGVtc19ncm91cDtcXG4tc3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgbnZtZXRfcG9ydHNfZ3JvdXA7XFxuLVxcbiAjaWZkZWYgQ09ORklHX05WTUVfVEFSR0VUX0FVVEhcXG4gc3RhdGljIHNzaXplX3QgbnZtZXRfaG9zdF9kaGNoYXBfa2V5X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbiBcXHRcXHRjaGFyICpwYWdlKVxcbkBAIC0yMzAzLDE5ICsyMzczLDI2IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBudm1ldF9ob3N0c190eXBlID0ge1xcbiBcXHQuY3Rfb3duZXJcXHRcXHQ9IFRISVNfTU9EVUxFLFxcbiB9O1xcbiBcXG4tc3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgbnZtZXRfaG9zdHNfZ3JvdXA7XFxuLVxcbiBzdGF0aWMgc3NpemVfdCBudm1ldF9yb290X2Rpc2NvdmVyeV9ucW5fc2hvdyhzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0sXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgY2hhciAqcGFnZSlcXG4ge1xcbi1cXHRyZXR1cm4gc25wcmludGYocGFnZSwgUEFHRV9TSVpFLCBcXFwiJXNcXFxcblxcXCIsIG52bWV0X2Rpc2Nfc3Vic3lzLVxcdTAwM2VzdWJzeXNucW4pO1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXRfbnMgPSBjb25maWdmc19uc19mcm9tX2dyb3VwKHRvX2NvbmZpZ19ncm91cChpdGVtKSk7XFxuK1xcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzID0gbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzKG5ldF9ucyk7XFxuK1xcbitcXHRpZiAoIWRpc2Nfc3Vic3lzKVxcbitcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4rXFx0cmV0dXJuIHNucHJpbnRmKHBhZ2UsIFBBR0VfU0laRSwgXFxcIiVzXFxcXG5cXFwiLCBkaXNjX3N1YnN5cy1cXHUwMDNlc3Vic3lzbnFuKTtcXG4gfVxcbiBcXG4gc3RhdGljIHNzaXplX3QgbnZtZXRfcm9vdF9kaXNjb3ZlcnlfbnFuX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4gXFx0XFx0Y29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KVxcbiB7XFxuK1xcdHN0cnVjdCBjb25maWdfaXRlbSAqc3Vic3lzdGVtc19pdGVtO1xcbitcXHRzdHJ1Y3QgY29uZmlnX2dyb3VwICpzdWJzeXN0ZW1zX2dyb3VwO1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXRfbnMgPSBjb25maWdmc19uc19mcm9tX2dyb3VwKHRvX2NvbmZpZ19ncm91cChpdGVtKSk7XFxuK1xcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzO1xcbiBcXHRzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeTtcXG4tXFx0Y2hhciAqb2xkX25xbiwgKm5ld19ucW47XFxuK1xcdGNoYXIgKm9sZF9ucW4gPSBOVUxMLCAqbmV3X25xbjtcXG4gXFx0c2l6ZV90IGxlbjtcXG4gXFxuIFxcdGxlbiA9IHN0cmNzcG4ocGFnZSwgXFxcIlxcXFxuXFxcIik7XFxuQEAgLTIzMjcsNyArMjQwNCwxNCBAQCBzdGF0aWMgc3NpemVfdCBudm1ldF9yb290X2Rpc2NvdmVyeV9ucW5fc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuIFxcdGRvd25fd3JpdGUoXFx1MDAyNm52bWV0X2NvbmZpZ19zZW0pO1xcbi1cXHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcXHUwMDI2bnZtZXRfc3Vic3lzdGVtc19ncm91cC5jZ19jaGlsZHJlbikge1xcbitcXHRzdWJzeXN0ZW1zX2l0ZW0gPSBjb25maWdfZ3JvdXBfZmluZF9pdGVtKHRvX2NvbmZpZ19ncm91cChpdGVtKSwgXFxcInN1YnN5c3RlbXNcXFwiKTtcXG4rXFx0aWYgKFdBUk5fT04oIXN1YnN5c3RlbXNfaXRlbSkpIHtcXG4rXFx0XFx0a2ZyZWUobmV3X25xbik7XFxuK1xcdFxcdHVwX3dyaXRlKFxcdTAwMjZudm1ldF9jb25maWdfc2VtKTtcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdH1cXG4rXFx0c3Vic3lzdGVtc19ncm91cCA9IHRvX2NvbmZpZ19ncm91cChzdWJzeXN0ZW1zX2l0ZW0pO1xcbitcXHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcXHUwMDI2c3Vic3lzdGVtc19ncm91cC1cXHUwMDNlY2dfY2hpbGRyZW4pIHtcXG4gXFx0XFx0c3RydWN0IGNvbmZpZ19pdGVtICppdGVtID1cXG4gXFx0XFx0XFx0Y29udGFpbmVyX29mKGVudHJ5LCBzdHJ1Y3QgY29uZmlnX2l0ZW0sIGNpX2VudHJ5KTtcXG4gXFxuQEAgLTIzMzgsMTIgKzI0MjIsMTUgQEAgc3RhdGljIHNzaXplX3QgbnZtZXRfcm9vdF9kaXNjb3ZlcnlfbnFuX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcXG4gXFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbi1cXHRvbGRfbnFuID0gbnZtZXRfZGlzY19zdWJzeXMtXFx1MDAzZXN1YnN5c25xbjtcXG4tXFx0bnZtZXRfZGlzY19zdWJzeXMtXFx1MDAzZXN1YnN5c25xbiA9IG5ld19ucW47XFxuK1xcdGRpc2Nfc3Vic3lzID0gbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzKG5ldF9ucyk7XFxuK1xcdGlmIChkaXNjX3N1YnN5cykge1xcbitcXHRcXHRvbGRfbnFuID0gZGlzY19zdWJzeXMtXFx1MDAzZXN1YnN5c25xbjtcXG4rXFx0XFx0ZGlzY19zdWJzeXMtXFx1MDAzZXN1YnN5c25xbiA9IG5ld19ucW47XFxuK1xcdH1cXG4gXFx0dXBfd3JpdGUoXFx1MDAyNm52bWV0X2NvbmZpZ19zZW0pO1xcbiBcXG4gXFx0a2ZyZWUob2xkX25xbik7XFxuLVxcdHJldHVybiBsZW47XFxuK1xcdHJldHVybiBkaXNjX3N1YnN5cyA/IGxlbiA6IC1FTk9FTlQ7XFxuIH1cXG4gXFxuIENPTkZJR0ZTX0FUVFIobnZtZXRfcm9vdF8sIGRpc2NvdmVyeV9ucW4pO1xcbkBAIC0yMzU4LDYgKzI0NDUsNjkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG52bWV0X3Jvb3RfdHlwZSA9IHtcXG4gXFx0LmN0X293bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4gfTtcXG4gXFxuK3N0YXRpYyBpbnQgbnZtZXRfY29uZmlnZnNfZmlsbF9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzLFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG5ldCAqbmV0X25zKVxcbit7XFxuK1xcdHN0cnVjdCBjb25maWdfZ3JvdXAgKnN1YnN5c3RlbXNfZ3JvdXAsICpwb3J0c19ncm91cCwgKmhvc3RzX2dyb3VwO1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0ZXJyID0gbnZtZXRfYWRkX2Rpc2Nfc3Vic3lzKG5ldF9ucyk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gZXJyO1xcbitcXG4rXFx0c3Vic3lzdGVtc19ncm91cCA9IGt6YWxsb2Nfb2JqKCpzdWJzeXN0ZW1zX2dyb3VwKTtcXG4rXFx0aWYgKCFzdWJzeXN0ZW1zX2dyb3VwKSB7XFxuK1xcdFxcdG52bWV0X2RlbF9kaXNjX3N1YnN5cyhuZXRfbnMpO1xcbitcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0fVxcbitcXHRjb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoc3Vic3lzdGVtc19ncm91cCxcXG4rXFx0XFx0XFx0XFxcInN1YnN5c3RlbXNcXFwiLCBcXHUwMDI2bnZtZXRfc3Vic3lzdGVtc190eXBlKTtcXG4rXFx0Y29uZmlnZnNfYWRkX2RlZmF1bHRfZ3JvdXAoc3Vic3lzdGVtc19ncm91cCxcXG4rXFx0XFx0XFx0XFx1MDAyNnN1YnN5cy1cXHUwMDNlc3VfZ3JvdXApO1xcbitcXG4rXFx0cG9ydHNfZ3JvdXAgPSBremFsbG9jX29iaigqcG9ydHNfZ3JvdXApO1xcbitcXHRpZiAoIXBvcnRzX2dyb3VwKSB7XFxuK1xcdFxcdGtmcmVlKHN1YnN5c3RlbXNfZ3JvdXApO1xcbitcXHRcXHRudm1ldF9kZWxfZGlzY19zdWJzeXMobmV0X25zKTtcXG4rXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuK1xcdH1cXG4rXFx0Y29uZmlnX2dyb3VwX2luaXRfdHlwZV9uYW1lKHBvcnRzX2dyb3VwLFxcbitcXHRcXHRcXHRcXFwicG9ydHNcXFwiLCBcXHUwMDI2bnZtZXRfcG9ydHNfdHlwZSk7XFxuK1xcdGNvbmZpZ2ZzX2FkZF9kZWZhdWx0X2dyb3VwKHBvcnRzX2dyb3VwLFxcbitcXHRcXHRcXHRcXHUwMDI2c3Vic3lzLVxcdTAwM2VzdV9ncm91cCk7XFxuK1xcbitcXHRob3N0c19ncm91cCA9IGt6YWxsb2Nfb2JqKCpob3N0c19ncm91cCk7XFxuK1xcdGlmICghaG9zdHNfZ3JvdXApIHtcXG4rXFx0XFx0a2ZyZWUocG9ydHNfZ3JvdXApO1xcbitcXHRcXHRrZnJlZShzdWJzeXN0ZW1zX2dyb3VwKTtcXG4rXFx0XFx0bnZtZXRfZGVsX2Rpc2Nfc3Vic3lzKG5ldF9ucyk7XFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHR9XFxuK1xcdGNvbmZpZ19ncm91cF9pbml0X3R5cGVfbmFtZShob3N0c19ncm91cCxcXG4rXFx0XFx0XFx0XFxcImhvc3RzXFxcIiwgXFx1MDAyNm52bWV0X2hvc3RzX3R5cGUpO1xcbitcXHRjb25maWdmc19hZGRfZGVmYXVsdF9ncm91cChob3N0c19ncm91cCxcXG4rXFx0XFx0XFx0XFx1MDAyNnN1YnN5cy1cXHUwMDNlc3VfZ3JvdXApO1xcbitcXHRzdHJzY3B5KHN1YnN5cy1cXHUwMDNlc3VfZ3JvdXAuY2dfaXRlbS5jaV9uYW1lYnVmLCBcXFwibnZtZXRcXFwiLFxcbitcXHRcXHRzaXplb2Yoc3Vic3lzLVxcdTAwM2VzdV9ncm91cC5jZ19pdGVtLmNpX25hbWVidWYpKTtcXG4rXFx0c3Vic3lzLVxcdTAwM2VzdV9ncm91cC5jZ19pdGVtLmNpX3R5cGUgPSBcXHUwMDI2bnZtZXRfcm9vdF90eXBlO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIG52bWV0X2NvbmZpZ2ZzX2NsZWFyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXQgKm5ldF9ucylcXG4re1xcbitcXHRzdHJ1Y3QgY29uZmlnX2dyb3VwICpnLCAqbjtcXG4rXFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZShnLCBuLCBcXHUwMDI2c3Vic3lzLVxcdTAwM2VzdV9ncm91cC5kZWZhdWx0X2dyb3VwcyxcXG4rXFx0XFx0XFx0XFx0IGdyb3VwX2VudHJ5KSB7XFxuK1xcdFxcdGxpc3RfZGVsKFxcdTAwMjZnLVxcdTAwM2Vncm91cF9lbnRyeSk7XFxuK1xcdFxcdGNvbmZpZ19pdGVtX3B1dChcXHUwMDI2Zy1cXHUwMDNlY2dfaXRlbSk7XFxuK1xcdFxcdGtmcmVlKGcpO1xcbitcXHR9XFxuK1xcdG52bWV0X2RlbF9kaXNjX3N1YnN5cyhuZXRfbnMpO1xcbit9XFxuK1xcbiBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBudm1ldF9jb25maWdmc19zdWJzeXN0ZW0gPSB7XFxuIFxcdC5zdV9ncm91cCA9IHtcXG4gXFx0XFx0LmNnX2l0ZW0gPSB7XFxuQEAgLTIzNjUsMzAgKzI1MTUsMTQgQEAgc3RhdGljIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gbnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtID0ge1xcbiBcXHRcXHRcXHQuY2lfdHlwZVxcdD0gXFx1MDAyNm52bWV0X3Jvb3RfdHlwZSxcXG4gXFx0XFx0fSxcXG4gXFx0fSxcXG4rXFx0LmZpbGxfc3Vic3lzdGVtID0gbnZtZXRfY29uZmlnZnNfZmlsbF9zdWJzeXN0ZW0sXFxuK1xcdC5jbGVhcl9zdWJzeXN0ZW0gPSBudm1ldF9jb25maWdmc19jbGVhcl9zdWJzeXN0ZW0sXFxuIH07XFxuIFxcbiBpbnQgX19pbml0IG52bWV0X2luaXRfY29uZmlnZnModm9pZClcXG4ge1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0Y29uZmlnX2dyb3VwX2luaXQoXFx1MDAyNm52bWV0X2NvbmZpZ2ZzX3N1YnN5c3RlbS5zdV9ncm91cCk7XFxuLVxcdG11dGV4X2luaXQoXFx1MDAyNm52bWV0X2NvbmZpZ2ZzX3N1YnN5c3RlbS5zdV9tdXRleCk7XFxuLVxcbi1cXHRjb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoXFx1MDAyNm52bWV0X3N1YnN5c3RlbXNfZ3JvdXAsXFxuLVxcdFxcdFxcdFxcXCJzdWJzeXN0ZW1zXFxcIiwgXFx1MDAyNm52bWV0X3N1YnN5c3RlbXNfdHlwZSk7XFxuLVxcdGNvbmZpZ2ZzX2FkZF9kZWZhdWx0X2dyb3VwKFxcdTAwMjZudm1ldF9zdWJzeXN0ZW1zX2dyb3VwLFxcbi1cXHRcXHRcXHRcXHUwMDI2bnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtLnN1X2dyb3VwKTtcXG4tXFxuLVxcdGNvbmZpZ19ncm91cF9pbml0X3R5cGVfbmFtZShcXHUwMDI2bnZtZXRfcG9ydHNfZ3JvdXAsXFxuLVxcdFxcdFxcdFxcXCJwb3J0c1xcXCIsIFxcdTAwMjZudm1ldF9wb3J0c190eXBlKTtcXG4tXFx0Y29uZmlnZnNfYWRkX2RlZmF1bHRfZ3JvdXAoXFx1MDAyNm52bWV0X3BvcnRzX2dyb3VwLFxcbi1cXHRcXHRcXHRcXHUwMDI2bnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtLnN1X2dyb3VwKTtcXG4tXFxuLVxcdGNvbmZpZ19ncm91cF9pbml0X3R5cGVfbmFtZShcXHUwMDI2bnZtZXRfaG9zdHNfZ3JvdXAsXFxuLVxcdFxcdFxcdFxcXCJob3N0c1xcXCIsIFxcdTAwMjZudm1ldF9ob3N0c190eXBlKTtcXG4tXFx0Y29uZmlnZnNfYWRkX2RlZmF1bHRfZ3JvdXAoXFx1MDAyNm52bWV0X2hvc3RzX2dyb3VwLFxcbi1cXHRcXHRcXHRcXHUwMDI2bnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtLnN1X2dyb3VwKTtcXG4tXFxuIFxcdHJldCA9IGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbShcXHUwMDI2bnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtKTtcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHRwcl9lcnIoXFxcImNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbTogJWRcXFxcblxcXCIsIHJldCk7XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jIGIvZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmNcXG5pbmRleCA2MmRkNTliOWFhNGYxYy4uMzk5ODliOGJhZTkyZjggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmNcXG4rKysgYi9kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuY1xcbkBAIC0xNzk4LDIyICsxNzk4LDI3IEBAIHN0YXRpYyBzdHJ1Y3QgbnZtZXRfc3Vic3lzICpudm1ldF9maW5kX2dldF9zdWJzeXMoc3RydWN0IG52bWV0X3BvcnQgKnBvcnQsXFxuIFxcdFxcdGNvbnN0IGNoYXIgKnN1YnN5c25xbilcXG4ge1xcbiBcXHRzdHJ1Y3QgbnZtZXRfc3Vic3lzX2xpbmsgKnA7XFxuK1xcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzO1xcbiBcXG4gXFx0aWYgKCFwb3J0KVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFxuK1xcdGRpc2Nfc3Vic3lzID0gbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzKHBvcnQtXFx1MDAzZW5ldF9ucyk7XFxuK1xcdGlmICghZGlzY19zdWJzeXMpXFxuK1xcdFxcdHJldHVybiBOVUxMO1xcbitcXG4gXFx0aWYgKCFzdHJjbXAoTlZNRV9ESVNDX1NVQlNZU19OQU1FLCBzdWJzeXNucW4pKSB7XFxuLVxcdFxcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVxcdTAwM2VyZWYpKVxcbitcXHRcXHRpZiAoIWtyZWZfZ2V0X3VubGVzc196ZXJvKFxcdTAwMjZkaXNjX3N1YnN5cy1cXHUwMDNlcmVmKSlcXG4gXFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuLVxcdFxcdHJldHVybiBudm1ldF9kaXNjX3N1YnN5cztcXG4rXFx0XFx0cmV0dXJuIGRpc2Nfc3Vic3lzO1xcbiBcXHR9XFxuIFxcbiBcXHRkb3duX3JlYWQoXFx1MDAyNm52bWV0X2NvbmZpZ19zZW0pO1xcbi1cXHRpZiAoIXN0cm5jbXAobnZtZXRfZGlzY19zdWJzeXMtXFx1MDAzZXN1YnN5c25xbiwgc3Vic3lzbnFuLFxcbitcXHRpZiAoIXN0cm5jbXAoZGlzY19zdWJzeXMtXFx1MDAzZXN1YnN5c25xbiwgc3Vic3lzbnFuLFxcbiBcXHRcXHRcXHRcXHROVk1GX05RTl9TSVpFKSkge1xcbi1cXHRcXHRpZiAoa3JlZl9nZXRfdW5sZXNzX3plcm8oXFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVxcdTAwM2VyZWYpKSB7XFxuK1xcdFxcdGlmIChrcmVmX2dldF91bmxlc3NfemVybyhcXHUwMDI2ZGlzY19zdWJzeXMtXFx1MDAzZXJlZikpIHtcXG4gXFx0XFx0XFx0dXBfcmVhZChcXHUwMDI2bnZtZXRfY29uZmlnX3NlbSk7XFxuLVxcdFxcdFxcdHJldHVybiBudm1ldF9kaXNjX3N1YnN5cztcXG4rXFx0XFx0XFx0cmV0dXJuIGRpc2Nfc3Vic3lzO1xcbiBcXHRcXHR9XFxuIFxcdH1cXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcXHUwMDI2cG9ydC1cXHUwMDNlc3Vic3lzdGVtcywgZW50cnkpIHtcXG5AQCAtMTgzMCw3ICsxODM1LDcgQEAgc3RhdGljIHN0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X2ZpbmRfZ2V0X3N1YnN5cyhzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCxcXG4gfVxcbiBcXG4gc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfc3Vic3lzX2FsbG9jKGNvbnN0IGNoYXIgKnN1YnN5c25xbixcXG4tXFx0XFx0ZW51bSBudm1lX3N1YnN5c190eXBlIHR5cGUpXFxuK1xcdFxcdGVudW0gbnZtZV9zdWJzeXNfdHlwZSB0eXBlLCBzdHJ1Y3QgbmV0ICpuZXRfbnMpXFxuIHtcXG4gXFx0c3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzO1xcbiBcXHRjaGFyIHNlcmlhbFtOVk1FVF9TTl9NQVhfU0laRSAvIDJdO1xcbkBAIC0xODg4LDEwICsxODkzLDEyIEBAIHN0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X3N1YnN5c19hbGxvYyhjb25zdCBjaGFyICpzdWJzeXNucW4sXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzdWJzeXMtXFx1MDAzZWN0cmxzKTtcXG4gXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNnN1YnN5cy1cXHUwMDNlaG9zdHMpO1xcbiBcXG4tXFx0cmV0ID0gbnZtZXRfZGVidWdmc19zdWJzeXNfc2V0dXAoc3Vic3lzKTtcXG4tXFx0aWYgKHJldClcXG4tXFx0XFx0Z290byBmcmVlX3N1YnN5c25xbjtcXG4tXFxuK1xcdC8qIERpc2FibGUgZGVidWdmcyBmb3Igbm9uLWluaXRpYWwgbmFtZXNwYWNlcyAqL1xcbitcXHRpZiAobmV0X25zID09IFxcdTAwMjZpbml0X25ldCkge1xcbitcXHRcXHRyZXQgPSBudm1ldF9kZWJ1Z2ZzX3N1YnN5c19zZXR1cChzdWJzeXMpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRnb3RvIGZyZWVfc3Vic3lzbnFuO1xcbitcXHR9XFxuIFxcdHJldHVybiBzdWJzeXM7XFxuIFxcbiBmcmVlX3N1YnN5c25xbjpcXG5AQCAtMTk3NiwxOCArMTk4MywxMiBAQCBzdGF0aWMgaW50IF9faW5pdCBudm1ldF9pbml0KHZvaWQpXFxuIFxcdGlmIChlcnJvcilcXG4gXFx0XFx0Z290byBvdXRfZnJlZV9udm1ldF9hZW5fd29ya19xdWV1ZTtcXG4gXFxuLVxcdGVycm9yID0gbnZtZXRfaW5pdF9kaXNjb3ZlcnkoKTtcXG4tXFx0aWYgKGVycm9yKVxcbi1cXHRcXHRnb3RvIG91dF9leGl0X2RlYnVnZnM7XFxuLVxcbiBcXHRlcnJvciA9IG52bWV0X2luaXRfY29uZmlnZnMoKTtcXG4gXFx0aWYgKGVycm9yKVxcbi1cXHRcXHRnb3RvIG91dF9leGl0X2Rpc2NvdmVyeTtcXG4rXFx0XFx0Z290byBvdXRfZXhpdF9kZWJ1Z2ZzO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuIFxcbi1vdXRfZXhpdF9kaXNjb3Zlcnk6XFxuLVxcdG52bWV0X2V4aXRfZGlzY292ZXJ5KCk7XFxuIG91dF9leGl0X2RlYnVnZnM6XFxuIFxcdG52bWV0X2V4aXRfZGVidWdmcygpO1xcbiBvdXRfZnJlZV9udm1ldF9hZW5fd29ya19xdWV1ZTpcXG5AQCAtMjAwNiw3ICsyMDA3LDYgQEAgc3RhdGljIGludCBfX2luaXQgbnZtZXRfaW5pdCh2b2lkKVxcbiBzdGF0aWMgdm9pZCBfX2V4aXQgbnZtZXRfZXhpdCh2b2lkKVxcbiB7XFxuIFxcdG52bWV0X2V4aXRfY29uZmlnZnMoKTtcXG4tXFx0bnZtZXRfZXhpdF9kaXNjb3ZlcnkoKTtcXG4gXFx0bnZtZXRfZXhpdF9kZWJ1Z2ZzKCk7XFxuIFxcdGlkYV9kZXN0cm95KFxcdTAwMjZjbnRsaWRfaWRhKTtcXG4gXFx0ZGVzdHJveV93b3JrcXVldWUobnZtZXRfYWVuX3dxKTtcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC9kaXNjb3ZlcnkuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvZGlzY292ZXJ5LmNcXG5pbmRleCAxMTQ4NjlkMTZhMWYzYy4uYjQ5ODRmYzY1YmE3ODcgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9udm1lL3RhcmdldC9kaXNjb3ZlcnkuY1xcbisrKyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvZGlzY292ZXJ5LmNcXG5AQCAtOCw5ICs4LDQ0IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NnZW5lcmF0ZWQvdXRzcmVsZWFzZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwibnZtZXQuaFxcXCJcXG4gXFxuLXN0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X2Rpc2Nfc3Vic3lzO1xcbitzdGF0aWMgREVGSU5FX1hBUlJBWShudm1ldF9kaXNjX3hhKTtcXG4gXFxuLXN0YXRpYyB1NjQgbnZtZXRfZ2VuY3RyO1xcbitzdHJ1Y3QgbnZtZXRfc3Vic3lzICpudm1ldF9nZXRfZGlzY19zdWJzeXMoc3RydWN0IG5ldCAqbmV0X25zKVxcbit7XFxuK1xcdHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cztcXG4rXFx0dTY0IG5zX2lkID0gbnZtZXRfZ2V0X25zX2lkKG5ldF9ucyk7XFxuK1xcbitcXHRzdWJzeXMgPSB4YV9sb2FkKFxcdTAwMjZudm1ldF9kaXNjX3hhLCBuc19pZCk7XFxuK1xcdHJldHVybiBzdWJzeXM7XFxuK31cXG4rXFxuK2ludCBudm1ldF9hZGRfZGlzY19zdWJzeXMoc3RydWN0IG5ldCAqbmV0X25zKVxcbit7XFxuK1xcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzO1xcbitcXHR1NjQgbnNfaWQgPSBudm1ldF9nZXRfbnNfaWQobmV0X25zKTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGRpc2Nfc3Vic3lzID0gbnZtZXRfc3Vic3lzX2FsbG9jKE5WTUVfRElTQ19TVUJTWVNfTkFNRSxcXG4rXFx0XFx0XFx0XFx0XFx0IE5WTUVfTlFOX0NVUlIsIG5ldF9ucyk7XFxuK1xcdGlmIChJU19FUlIoZGlzY19zdWJzeXMpKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihkaXNjX3N1YnN5cyk7XFxuK1xcdGVyciA9IHhhX2luc2VydChcXHUwMDI2bnZtZXRfZGlzY194YSwgbnNfaWQsXFxuK1xcdFxcdFxcdGRpc2Nfc3Vic3lzLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuK1xcdFxcdG52bWV0X3N1YnN5c19wdXQoZGlzY19zdWJzeXMpO1xcbitcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rdm9pZCBudm1ldF9kZWxfZGlzY19zdWJzeXMoc3RydWN0IG5ldCAqbmV0X25zKVxcbit7XFxuK1xcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzO1xcbitcXHR1NjQgbnNfaWQgPSBudm1ldF9nZXRfbnNfaWQobmV0X25zKTtcXG4rXFxuK1xcdGRpc2Nfc3Vic3lzID0geGFfZXJhc2UoXFx1MDAyNm52bWV0X2Rpc2NfeGEsIG5zX2lkKTtcXG4rXFx0aWYgKGRpc2Nfc3Vic3lzKVxcbitcXHRcXHRudm1ldF9zdWJzeXNfcHV0KGRpc2Nfc3Vic3lzKTtcXG4rfVxcbiBcXG4gc3RhdGljIHZvaWQgX19udm1ldF9kaXNjX2NoYW5nZWQoc3RydWN0IG52bWV0X3BvcnQgKnBvcnQsXFxuIFxcdFxcdFxcdFxcdCBzdHJ1Y3QgbnZtZXRfY3RybCAqY3RybClcXG5AQCAtMjksMTggKzY0LDIyIEBAIHZvaWQgbnZtZXRfcG9ydF9kaXNjX2NoYW5nZWQoc3RydWN0IG52bWV0X3BvcnQgKnBvcnQsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzKVxcbiB7XFxuIFxcdHN0cnVjdCBudm1ldF9jdHJsICpjdHJsO1xcbitcXHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpkaXNjX3N1YnN5cztcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNm52bWV0X2NvbmZpZ19zZW0pO1xcbi1cXHRudm1ldF9nZW5jdHIrKztcXG4rXFx0ZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMocG9ydC1cXHUwMDNlbmV0X25zKTtcXG4rXFx0aWYgKFdBUk5fT04oIWRpc2Nfc3Vic3lzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRkaXNjX3N1YnN5cy1cXHUwMDNlZ2VuY3RyKys7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZudm1ldF9kaXNjX3N1YnN5cy1cXHUwMDNlbG9jayk7XFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY3RybCwgXFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVxcdTAwM2VjdHJscywgc3Vic3lzX2VudHJ5KSB7XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmRpc2Nfc3Vic3lzLVxcdTAwM2Vsb2NrKTtcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShjdHJsLCBcXHUwMDI2ZGlzY19zdWJzeXMtXFx1MDAzZWN0cmxzLCBzdWJzeXNfZW50cnkpIHtcXG4gXFx0XFx0aWYgKHN1YnN5cyBcXHUwMDI2XFx1MDAyNiAhbnZtZXRfaG9zdF9hbGxvd2VkKHN1YnN5cywgY3RybC1cXHUwMDNlaG9zdG5xbikpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4gXFx0XFx0X19udm1ldF9kaXNjX2NoYW5nZWQocG9ydCwgY3RybCk7XFxuIFxcdH1cXG4tXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZudm1ldF9kaXNjX3N1YnN5cy1cXHUwMDNlbG9jayk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2ZGlzY19zdWJzeXMtXFx1MDAzZWxvY2spO1xcbiBcXG4gXFx0LyogSWYgdHJhbnNwb3J0IGNhbiBzaWduYWwgY2hhbmdlLCBub3RpZnkgdHJhbnNwb3J0ICovXFxuIFxcdGlmIChwb3J0LVxcdTAwM2V0cl9vcHMgXFx1MDAyNlxcdTAwMjYgcG9ydC1cXHUwMDNldHJfb3BzLVxcdTAwM2VkaXNjb3ZlcnlfY2hnKVxcbkBAIC01MiwxNSArOTEsMTkgQEAgc3RhdGljIHZvaWQgX19udm1ldF9zdWJzeXNfZGlzY19jaGFuZ2VkKHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0LFxcbiBcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbnZtZXRfaG9zdCAqaG9zdClcXG4ge1xcbiBcXHRzdHJ1Y3QgbnZtZXRfY3RybCAqY3RybDtcXG4rXFx0c3RydWN0IG52bWV0X3N1YnN5cyAqZGlzY19zdWJzeXM7XFxuIFxcbi1cXHRtdXRleF9sb2NrKFxcdTAwMjZudm1ldF9kaXNjX3N1YnN5cy1cXHUwMDNlbG9jayk7XFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnkoY3RybCwgXFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVxcdTAwM2VjdHJscywgc3Vic3lzX2VudHJ5KSB7XFxuK1xcdGRpc2Nfc3Vic3lzID0gbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzKHBvcnQtXFx1MDAzZW5ldF9ucyk7XFxuK1xcdGlmIChXQVJOX09OKCFkaXNjX3N1YnN5cykpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2ZGlzY19zdWJzeXMtXFx1MDAzZWxvY2spO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsIFxcdTAwMjZkaXNjX3N1YnN5cy1cXHUwMDNlY3RybHMsIHN1YnN5c19lbnRyeSkge1xcbiBcXHRcXHRpZiAoaG9zdCBcXHUwMDI2XFx1MDAyNiBzdHJjbXAobnZtZXRfaG9zdF9uYW1lKGhvc3QpLCBjdHJsLVxcdTAwM2Vob3N0bnFuKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbiBcXHRcXHRfX252bWV0X2Rpc2NfY2hhbmdlZChwb3J0LCBjdHJsKTtcXG4gXFx0fVxcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVxcdTAwM2Vsb2NrKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZkaXNjX3N1YnN5cy1cXHUwMDNlbG9jayk7XFxuIH1cXG4gXFxuIHZvaWQgbnZtZXRfc3Vic3lzX2Rpc2NfY2hhbmdlZChzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMsXFxuQEAgLTY4LDExICsxMTEsMTggQEAgdm9pZCBudm1ldF9zdWJzeXNfZGlzY19jaGFuZ2VkKHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cyxcXG4ge1xcbiBcXHRzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydDtcXG4gXFx0c3RydWN0IG52bWV0X3N1YnN5c19saW5rICpzO1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3J0X2xpc3Q7XFxuK1xcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzO1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXRfbnMgPSBjb25maWdmc19uc19mcm9tX2dyb3VwKFxcdTAwMjZzdWJzeXMtXFx1MDAzZWdyb3VwKTtcXG4gXFxuIFxcdGxvY2tkZXBfYXNzZXJ0X2hlbGQoXFx1MDAyNm52bWV0X2NvbmZpZ19zZW0pO1xcbi1cXHRudm1ldF9nZW5jdHIrKztcXG4rXFx0ZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMobmV0X25zKTtcXG4rXFx0aWYgKFdBUk5fT04oIWRpc2Nfc3Vic3lzKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRkaXNjX3N1YnN5cy1cXHUwMDNlZ2VuY3RyKys7XFxuIFxcbi1cXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHBvcnQsIG52bWV0X3BvcnRzLCBnbG9iYWxfZW50cnkpXFxuK1xcdHBvcnRfbGlzdCA9IG52bWV0X2dldF9wb3J0X2xpc3QobmV0X25zKTtcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBwb3J0X2xpc3QsIGdsb2JhbF9lbnRyeSlcXG4gXFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzLCBcXHUwMDI2cG9ydC1cXHUwMDNlc3Vic3lzdGVtcywgZW50cnkpIHtcXG4gXFx0XFx0XFx0aWYgKHMtXFx1MDAzZXN1YnN5cyAhPSBzdWJzeXMpXFxuIFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbkBAIC0xNzMsNiArMjIzLDcgQEAgc3RhdGljIHZvaWQgbnZtZXRfZXhlY3V0ZV9kaXNjX2dldF9sb2dfcGFnZShzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXFxuIFxcdHUxNiBzdGF0dXMgPSAwO1xcbiBcXHR2b2lkICpidWZmZXI7XFxuIFxcdGNoYXIgdHJhZGRyW05WTUZfVFJBRERSX1NJWkVdO1xcbitcXHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpkaXNjX3N1YnN5cztcXG4gXFxuIFxcdGlmICghbnZtZXRfY2hlY2tfdHJhbnNmZXJfbGVuKHJlcSwgZGF0YV9sZW4pKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTIwNywxMCArMjU4LDEyIEBAIHN0YXRpYyB2b2lkIG52bWV0X2V4ZWN1dGVfZGlzY19nZXRfbG9nX3BhZ2Uoc3RydWN0IG52bWV0X3JlcSAqcmVxKVxcbiBcXHR9XFxuIFxcdGhkciA9IGJ1ZmZlcjtcXG4gXFxuK1xcdGRpc2Nfc3Vic3lzID0gbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzKHJlcS1cXHUwMDNlcG9ydC1cXHUwMDNlbmV0X25zKTtcXG4rXFxuIFxcdG52bWV0X3NldF9kaXNjX3RyYWRkcihyZXEsIHJlcS1cXHUwMDNlcG9ydCwgdHJhZGRyKTtcXG4gXFxuIFxcdG52bWV0X2Zvcm1hdF9kaXNjb3ZlcnlfZW50cnkoaGRyLCByZXEtXFx1MDAzZXBvcnQsXFxuLVxcdFxcdFxcdFxcdCAgICAgbnZtZXRfZGlzY19zdWJzeXMtXFx1MDAzZXN1YnN5c25xbixcXG4rXFx0XFx0XFx0XFx0ICAgICBkaXNjX3N1YnN5cy1cXHUwMDNlc3Vic3lzbnFuLFxcbiBcXHRcXHRcXHRcXHQgICAgIHRyYWRkciwgTlZNRV9OUU5fQ1VSUiwgbnVtcmVjKTtcXG4gXFx0bnVtcmVjKys7XFxuIFxcbkBAIC0yMzUsNyArMjg4LDcgQEAgc3RhdGljIHZvaWQgbnZtZXRfZXhlY3V0ZV9kaXNjX2dldF9sb2dfcGFnZShzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXFxuIFxcdFxcdG51bXJlYysrO1xcbiBcXHR9XFxuIFxcbi1cXHRoZHItXFx1MDAzZWdlbmN0ciA9IGNwdV90b19sZTY0KG52bWV0X2dlbmN0cik7XFxuK1xcdGhkci1cXHUwMDNlZ2VuY3RyID0gY3B1X3RvX2xlNjQoZGlzY19zdWJzeXMtXFx1MDAzZWdlbmN0cik7XFxuIFxcdGhkci1cXHUwMDNlbnVtcmVjID0gY3B1X3RvX2xlNjQobnVtcmVjKTtcXG4gXFx0aGRyLVxcdTAwM2VyZWNmbXQgPSBjcHVfdG9fbGUxNigwKTtcXG4gXFxuQEAgLTQyOCwxNSArNDgxLDMgQEAgdTE2IG52bWV0X3BhcnNlX2Rpc2NvdmVyeV9jbWQoc3RydWN0IG52bWV0X3JlcSAqcmVxKVxcbiBcXHR9XFxuIFxcbiB9XFxuLVxcbi1pbnQgX19pbml0IG52bWV0X2luaXRfZGlzY292ZXJ5KHZvaWQpXFxuLXtcXG4tXFx0bnZtZXRfZGlzY19zdWJzeXMgPVxcbi1cXHRcXHRudm1ldF9zdWJzeXNfYWxsb2MoTlZNRV9ESVNDX1NVQlNZU19OQU1FLCBOVk1FX05RTl9DVVJSKTtcXG4tXFx0cmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhudm1ldF9kaXNjX3N1YnN5cyk7XFxuLX1cXG4tXFxuLXZvaWQgbnZtZXRfZXhpdF9kaXNjb3Zlcnkodm9pZClcXG4te1xcbi1cXHRudm1ldF9zdWJzeXNfcHV0KG52bWV0X2Rpc2Nfc3Vic3lzKTtcXG4tfVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jXFxuaW5kZXggZmNiMWY4MTg2ZmRkMGQuLjBlZGQ2OTA5MDJjZTRiIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jXFxuKysrIGIvZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmNcXG5AQCAtOSw2ICs5LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L252bWUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21vZHVsZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFyc2VyLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uc3Byb3h5LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJudm1ldC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwiLi4vaG9zdC9udm1lLmhcXFwiXFxuICNpbmNsdWRlIFxcXCIuLi9ob3N0L2ZhYnJpY3MuaFxcXCJcXG5AQCAtNTM4LDYgKzUzOSw5IEBAIHN0YXRpYyBzdHJ1Y3QgbnZtZXRfcG9ydCAqbnZtZV9sb29wX2ZpbmRfcG9ydChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxcbiBcXG4gXFx0bXV0ZXhfbG9jayhcXHUwMDI2bnZtZV9sb29wX3BvcnRzX211dGV4KTtcXG4gXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcXHUwMDI2bnZtZV9sb29wX3BvcnRzLCBlbnRyeSkge1xcbitcXHRcXHQvKiBTa2lwIHBvcnRzIGZyb20gbm9uLW1hdGNoaW5nIG5hbWVzcGFjZXMgKi9cXG4rXFx0XFx0aWYgKHAtXFx1MDAzZW5ldF9ucyAhPSBjdXJyZW50LVxcdTAwM2Vuc3Byb3h5LVxcdTAwM2VuZXRfbnMpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHQvKiBpZiBubyB0cmFuc3BvcnQgYWRkcmVzcyBpcyBzcGVjaWZpZWQgdXNlIHRoZSBmaXJzdCBwb3J0ICovXFxuIFxcdFxcdGlmICgoY3RybC1cXHUwMDNlb3B0cy1cXHUwMDNlbWFzayBcXHUwMDI2IE5WTUZfT1BUX1RSQUREUikgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0ICAgIHN0cmNtcChjdHJsLVxcdTAwM2VvcHRzLVxcdTAwM2V0cmFkZHIsIHAtXFx1MDAzZWRpc2NfYWRkci50cmFkZHIpKVxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmggYi9kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmhcXG5pbmRleCAzMzA1YTg4Njg0ZWNhYi4uNjgxZjkzNWQ4MDA4NmIgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oXFxuKysrIGIvZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oXFxuQEAgLTIxMCw2ICsyMTAsNyBAQCBzdHJ1Y3QgbnZtZXRfcG9ydCB7XFxuIFxcdHN0cnVjdCBudm1ldF9hbmFfZ3JvdXBcXHRcXHRhbmFfZGVmYXVsdF9ncm91cDtcXG4gXFx0ZW51bSBudm1lX2FuYV9zdGF0ZVxcdFxcdCphbmFfc3RhdGU7XFxuIFxcdHN0cnVjdCBrZXlcXHRcXHRcXHQqa2V5cmluZztcXG4rXFx0c3RydWN0IG5ldFxcdFxcdFxcdCpuZXRfbnM7XFxuIFxcdHZvaWRcXHRcXHRcXHRcXHQqcHJpdjtcXG4gXFx0Ym9vbFxcdFxcdFxcdFxcdGVuYWJsZWQ7XFxuIFxcdGludFxcdFxcdFxcdFxcdGlubGluZV9kYXRhX3NpemU7XFxuQEAgLTMyNSw2ICszMjYsOSBAQCBzdHJ1Y3QgbnZtZXRfc3Vic3lzIHtcXG4gXFx0dTE2XFx0XFx0XFx0Y250bGlkX21pbjtcXG4gXFx0dTE2XFx0XFx0XFx0Y250bGlkX21heDtcXG4gXFxuK1xcdC8qIEZvciBkaXNjb3Zlcnkgc3Vic3lzdGVtcyAqL1xcbitcXHR1NjQgZ2VuY3RyO1xcbitcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdGN0cmxzO1xcbiBcXG4gXFx0c3RydWN0IGxpc3RfaGVhZFxcdGhvc3RzO1xcbkBAIC02MjYsNyArNjMwLDcgQEAgc3NpemVfdCBudm1ldF9jdHJsX2hvc3RfdHJhZGRyKHN0cnVjdCBudm1ldF9jdHJsICpjdHJsLFxcbiBcXHRcXHRjaGFyICp0cmFkZHIsIHNpemVfdCB0cmFkZHJfbGVuKTtcXG4gXFxuIHN0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X3N1YnN5c19hbGxvYyhjb25zdCBjaGFyICpzdWJzeXNucW4sXFxuLVxcdFxcdGVudW0gbnZtZV9zdWJzeXNfdHlwZSB0eXBlKTtcXG4rXFx0XFx0ZW51bSBudm1lX3N1YnN5c190eXBlIHR5cGUsIHN0cnVjdCBuZXQgKm5ldF9ucyk7XFxuIHZvaWQgbnZtZXRfc3Vic3lzX3B1dChzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMpO1xcbiB2b2lkIG52bWV0X3N1YnN5c19kZWxfY3RybHMoc3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzKTtcXG4gXFxuQEAgLTY2Miw3ICs2NjYsNiBAQCB1MTYgbnZtZXRfemVyb19zZ2woc3RydWN0IG52bWV0X3JlcSAqcmVxLCBvZmZfdCBvZmYsIHNpemVfdCBsZW4pO1xcbiB1MzIgbnZtZXRfZ2V0X2xvZ19wYWdlX2xlbihzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbWQpO1xcbiB1NjQgbnZtZXRfZ2V0X2xvZ19wYWdlX29mZnNldChzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbWQpO1xcbiBcXG4tZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgKm52bWV0X3BvcnRzO1xcbiB2b2lkIG52bWV0X3BvcnRfZGlzY19jaGFuZ2VkKHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0LFxcbiBcXHRcXHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMpO1xcbiB2b2lkIG52bWV0X3N1YnN5c19kaXNjX2NoYW5nZWQoc3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzLFxcbkBAIC02OTYsMTEgKzY5OSwxMyBAQCB2b2lkIG52bWV0X2FkZF9hc3luY19ldmVudChzdHJ1Y3QgbnZtZXRfY3RybCAqY3RybCwgdTggZXZlbnRfdHlwZSxcXG4gXFxuIGludCBfX2luaXQgbnZtZXRfaW5pdF9jb25maWdmcyh2b2lkKTtcXG4gdm9pZCBfX2V4aXQgbnZtZXRfZXhpdF9jb25maWdmcyh2b2lkKTtcXG4rZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgKm52bWV0X2dldF9wb3J0X2xpc3Qoc3RydWN0IG5ldCAqbmV0X25zKTtcXG4gXFxuLWludCBfX2luaXQgbnZtZXRfaW5pdF9kaXNjb3Zlcnkodm9pZCk7XFxuLXZvaWQgbnZtZXRfZXhpdF9kaXNjb3Zlcnkodm9pZCk7XFxuK2V4dGVybiB1NjQgbnZtZXRfZ2V0X25zX2lkKHN0cnVjdCBuZXQgKm5ldF9ucyk7XFxuK2V4dGVybiBpbnQgbnZtZXRfYWRkX2Rpc2Nfc3Vic3lzKHN0cnVjdCBuZXQgKm5ldF9ucyk7XFxuK2V4dGVybiB2b2lkIG52bWV0X2RlbF9kaXNjX3N1YnN5cyhzdHJ1Y3QgbmV0ICpuZXRfbnMpO1xcbitleHRlcm4gc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzKHN0cnVjdCBuZXQgKm5ldF9ucyk7XFxuIFxcbi1leHRlcm4gc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfZGlzY19zdWJzeXM7XFxuIGV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlIG52bWV0X2NvbmZpZ19zZW07XFxuIFxcbiBleHRlcm4gdTMyIG52bWV0X2FuYV9ncm91cF9lbmFibGVkW05WTUVUX01BWF9BTkFHUlBTICsgMV07XFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS90YXJnZXQvcmRtYS5jIGIvZHJpdmVycy9udm1lL3RhcmdldC9yZG1hLmNcXG5pbmRleCBhYzI2ZjRmNzc0YzRkZS4uY2FkMjM5MWE2ZDBhNzggMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9udm1lL3RhcmdldC9yZG1hLmNcXG4rKysgYi9kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuY1xcbkBAIC0xODcwLDggKzE4NzAsOCBAQCBzdGF0aWMgaW50IG52bWV0X3JkbWFfZW5hYmxlX3BvcnQoc3RydWN0IG52bWV0X3JkbWFfcG9ydCAqcG9ydClcXG4gXFx0c3RydWN0IHJkbWFfY21faWQgKmNtX2lkO1xcbiBcXHRpbnQgcmV0O1xcbiBcXG4tXFx0Y21faWQgPSByZG1hX2NyZWF0ZV9pZChcXHUwMDI2aW5pdF9uZXQsIG52bWV0X3JkbWFfY21faGFuZGxlciwgcG9ydCxcXG4tXFx0XFx0XFx0UkRNQV9QU19UQ1AsIElCX1FQVF9SQyk7XFxuK1xcdGNtX2lkID0gcmRtYV9jcmVhdGVfaWQocG9ydC1cXHUwMDNlbnBvcnQtXFx1MDAzZW5ldF9ucywgbnZtZXRfcmRtYV9jbV9oYW5kbGVyLFxcbitcXHRcXHRcXHRwb3J0LCBSRE1BX1BTX1RDUCwgSUJfUVBUX1JDKTtcXG4gXFx0aWYgKElTX0VSUihjbV9pZCkpIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJDTSBJRCBjcmVhdGlvbiBmYWlsZWRcXFxcblxcXCIpO1xcbiBcXHRcXHRyZXR1cm4gUFRSX0VSUihjbV9pZCk7XFxuQEAgLTE5NjQsNyArMTk2NCw3IEBAIHN0YXRpYyBpbnQgbnZtZXRfcmRtYV9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpXFxuIFxcdFxcdG5wb3J0LVxcdTAwM2VtYXhfcXVldWVfc2l6ZSA9IE5WTUVfUkRNQV9NQVhfUVVFVUVfU0laRTtcXG4gXFx0fVxcbiBcXG4tXFx0cmV0ID0gaW5ldF9wdG9uX3dpdGhfc2NvcGUoXFx1MDAyNmluaXRfbmV0LCBhZiwgbnBvcnQtXFx1MDAzZWRpc2NfYWRkci50cmFkZHIsXFxuK1xcdHJldCA9IGluZXRfcHRvbl93aXRoX3Njb3BlKG5wb3J0LVxcdTAwM2VuZXRfbnMsIGFmLCBucG9ydC1cXHUwMDNlZGlzY19hZGRyLnRyYWRkcixcXG4gXFx0XFx0XFx0bnBvcnQtXFx1MDAzZWRpc2NfYWRkci50cnN2Y2lkLCBcXHUwMDI2cG9ydC1cXHUwMDNlYWRkcik7XFxuIFxcdGlmIChyZXQpIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJtYWxmb3JtZWQgaXAvcG9ydCBwYXNzZWQ6ICVzOiVzXFxcXG5cXFwiLFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jIGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xcbmluZGV4IDE1YzUyZjFmOTVmMWIwLi4wMTZiZWY2NWE3NmRkOSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L3RjcC5jXFxuKysrIGIvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuY1xcbkBAIC0yMDc0LDcgKzIwNzQsNyBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpXFxuIFxcdFxcdGdvdG8gZXJyX3BvcnQ7XFxuIFxcdH1cXG4gXFxuLVxcdHJldCA9IGluZXRfcHRvbl93aXRoX3Njb3BlKFxcdTAwMjZpbml0X25ldCwgYWYsIG5wb3J0LVxcdTAwM2VkaXNjX2FkZHIudHJhZGRyLFxcbitcXHRyZXQgPSBpbmV0X3B0b25fd2l0aF9zY29wZShucG9ydC1cXHUwMDNlbmV0X25zLCBhZiwgbnBvcnQtXFx1MDAzZWRpc2NfYWRkci50cmFkZHIsXFxuIFxcdFxcdFxcdG5wb3J0LVxcdTAwM2VkaXNjX2FkZHIudHJzdmNpZCwgXFx1MDAyNnBvcnQtXFx1MDAzZWFkZHIpO1xcbiBcXHRpZiAocmV0KSB7XFxuIFxcdFxcdHByX2VycihcXFwibWFsZm9ybWVkIGlwL3BvcnQgcGFzc2VkOiAlczolc1xcXFxuXFxcIixcXG5AQCAtMjA4Nyw4ICsyMDg3LDggQEAgc3RhdGljIGludCBudm1ldF90Y3BfYWRkX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKm5wb3J0KVxcbiBcXHRpZiAocG9ydC1cXHUwMDNlbnBvcnQtXFx1MDAzZWlubGluZV9kYXRhX3NpemUgXFx1MDAzYyAwKVxcbiBcXHRcXHRwb3J0LVxcdTAwM2VucG9ydC1cXHUwMDNlaW5saW5lX2RhdGFfc2l6ZSA9IE5WTUVUX1RDUF9ERUZfSU5MSU5FX0RBVEFfU0laRTtcXG4gXFxuLVxcdHJldCA9IHNvY2tfY3JlYXRlKHBvcnQtXFx1MDAzZWFkZHIuc3NfZmFtaWx5LCBTT0NLX1NUUkVBTSxcXG4tXFx0XFx0XFx0XFx0SVBQUk9UT19UQ1AsIFxcdTAwMjZwb3J0LVxcdTAwM2Vzb2NrKTtcXG4rXFx0cmV0ID0gc29ja19jcmVhdGVfa2VybihucG9ydC1cXHUwMDNlbmV0X25zLCBwb3J0LVxcdTAwM2VhZGRyLnNzX2ZhbWlseSwgU09DS19TVFJFQU0sXFxuK1xcdFxcdFxcdCAgICBJUFBST1RPX1RDUCwgXFx1MDAyNnBvcnQtXFx1MDAzZXNvY2spO1xcbiBcXHRpZiAocmV0KSB7XFxuIFxcdFxcdHByX2VycihcXFwiZmFpbGVkIHRvIGNyZWF0ZSBhIHNvY2tldFxcXFxuXFxcIik7XFxuIFxcdFxcdGdvdG8gZXJyX3BvcnQ7XFxuZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL2NvbmZpZ2ZzX2ludGVybmFsLmggYi9mcy9jb25maWdmcy9jb25maWdmc19pbnRlcm5hbC5oXFxuaW5kZXggYWNkZWVhOGUyZDY5YWMuLjM1ZWRkYzI3NGI4ODc5IDEwMDY0NFxcbi0tLSBhL2ZzL2NvbmZpZ2ZzL2NvbmZpZ2ZzX2ludGVybmFsLmhcXG4rKysgYi9mcy9jb25maWdmcy9jb25maWdmc19pbnRlcm5hbC5oXFxuQEAgLTQ0LDYgKzQ0LDE3IEBAIHN0cnVjdCBjb25maWdmc19kaXJlbnQge1xcbiBcXHRzdHJ1Y3QgY29uZmlnZnNfZnJhZ21lbnQgKnNfZnJhZztcXG4gfTtcXG4gXFxuK3N0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvIHtcXG4rXFx0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCByb290O1xcbitcXHRzdHJ1Y3QgY29uZmlnX2dyb3VwIGdyb3VwO1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIHN1YnN5c19saXN0O1xcbitcXHRzdHJ1Y3QgbXV0ZXggc3Vic3lzX211dGV4O1xcbitcXHRzdHJ1Y3QgdmZzbW91bnQgKm1udDtcXG4rXFx0aW50IG1udF9jb3VudDtcXG4rXFx0c3RydWN0IG5ldCAqbmV0X25zO1xcbitcXHRyZWZjb3VudF90IHJlZjtcXG4rfTtcXG4rXFxuICNkZWZpbmUgQ09ORklHRlNfUk9PVFxcdFxcdDB4MDAwMVxcbiAjZGVmaW5lIENPTkZJR0ZTX0RJUlxcdFxcdDB4MDAwMlxcbiAjZGVmaW5lIENPTkZJR0ZTX0lURU1fQVRUUlxcdDB4MDAwNFxcbkBAIC02Myw3ICs3NCw3IEBAIGV4dGVybiBzcGlubG9ja190IGNvbmZpZ2ZzX2RpcmVudF9sb2NrO1xcbiBcXG4gZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpjb25maWdmc19kaXJfY2FjaGVwO1xcbiBcXG4tZXh0ZXJuIGludCBjb25maWdmc19pc19yb290KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSk7XFxuK2V4dGVybiBib29sIGNvbmZpZ2ZzX2lzX3Jvb3Qoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKTtcXG4gXFxuIGV4dGVybiBzdHJ1Y3QgaW5vZGUgKiBjb25maWdmc19uZXdfaW5vZGUodW1vZGVfdCBtb2RlLCBzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICosIHN0cnVjdCBzdXBlcl9ibG9jayAqKTtcXG4gZXh0ZXJuIHN0cnVjdCBpbm9kZSAqY29uZmlnZnNfY3JlYXRlKHN0cnVjdCBkZW50cnkgKiwgdW1vZGVfdCBtb2RlKTtcXG5AQCAtNzksOCArOTAsMTQgQEAgZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBjb25maWdmc19nZXRfbmFtZShzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZCk7XFxuIGV4dGVybiBpbnQgY29uZmlnZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICppYXR0cik7XFxuIFxcbi1leHRlcm4gc3RydWN0IGRlbnRyeSAqY29uZmlnZnNfcGluX2ZzKHZvaWQpO1xcbi1leHRlcm4gdm9pZCBjb25maWdmc19yZWxlYXNlX2ZzKHZvaWQpO1xcbitleHRlcm4gc3RydWN0IGRlbnRyeSAqY29uZmlnZnNfcGluX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbitleHRlcm4gdm9pZCBjb25maWdmc19yZWxlYXNlX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpO1xcbitleHRlcm4gc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKHN0cnVjdCBuZXQgKm5ldF9ucyk7XFxuK2V4dGVybiB2b2lkIGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvKTtcXG4rZXh0ZXJuIHZvaWQgY29uZmlnZnNfbGlua19zdWJzeXN0ZW1zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuK1xcdFxcdFxcdFxcdCAgICAgc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8pO1xcbitleHRlcm4gdm9pZCBjb25maWdmc191bmxpbmtfc3Vic3lzdGVtcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8pO1xcbiBcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29uZmlnZnNfZGlyX29wZXJhdGlvbnM7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGNvbmZpZ2ZzX2ZpbGVfb3BlcmF0aW9ucztcXG5kaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvZGlyLmMgYi9mcy9jb25maWdmcy9kaXIuY1xcbmluZGV4IDNjODhmMTNmMWNhMmU5Li4zZDM5YTZjMWE0MTYzNiAxMDA2NDRcXG4tLS0gYS9mcy9jb25maWdmcy9kaXIuY1xcbisrKyBiL2ZzL2NvbmZpZ2ZzL2Rpci5jXFxuQEAgLTM0LDE0ICszNCw2IEBAXFxuICAqL1xcbiBERUZJTkVfU1BJTkxPQ0soY29uZmlnZnNfZGlyZW50X2xvY2spO1xcbiBcXG4tLypcXG4tICogQWxsIG9mIGxpbmtfb2JqL3VubGlua19vYmovbGlua19ncm91cC91bmxpbmtfZ3JvdXAgcmVxdWlyZSB0aGF0XFxuLSAqIHN1YnN5cy1cXHUwMDNlc3VfbXV0ZXggaXMgaGVsZC5cXG4tICogQnV0IHBhcmVudCBjb25maWdmc19zdWJzeXN0ZW0gaXMgTlVMTCB3aGVuIGNvbmZpZ19pdGVtIGlzIHJvb3QuXFxuLSAqIFVzZSB0aGlzIG11dGV4IHdoZW4gY29uZmlnX2l0ZW0gaXMgcm9vdC5cXG4tICovXFxuLXN0YXRpYyBERUZJTkVfTVVURVgoY29uZmlnZnNfc3Vic3lzdGVtX211dGV4KTtcXG4tXFxuIHN0YXRpYyB2b2lkIGNvbmZpZ2ZzX2RfaXB1dChzdHJ1Y3QgZGVudHJ5ICogZGVudHJ5LFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGlub2RlICogaW5vZGUpXFxuIHtcXG5AQCAtMTE1Miw3ICsxMTQ0LDcgQEAgaW50IGNvbmZpZ2ZzX2RlcGVuZF9pdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cyxcXG4gXFx0ICogUGluIHRoZSBjb25maWdmcyBmaWxlc3lzdGVtLiAgVGhpcyBtZWFucyB3ZSBjYW4gc2FmZWx5IGFjY2Vzc1xcbiBcXHQgKiB0aGUgcm9vdCBvZiB0aGUgY29uZmlnZnMgZmlsZXN5c3RlbS5cXG4gXFx0ICovXFxuLVxcdHJvb3QgPSBjb25maWdmc19waW5fZnMoKTtcXG4rXFx0cm9vdCA9IGNvbmZpZ2ZzX3Bpbl9mcyhOVUxMKTtcXG4gXFx0aWYgKElTX0VSUihyb290KSlcXG4gXFx0XFx0cmV0dXJuIFBUUl9FUlIocm9vdCk7XFxuIFxcbkBAIC0xMTc5LDcgKzExNzEsNyBAQCBpbnQgY29uZmlnZnNfZGVwZW5kX2l0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzLFxcbiBcXHQgKiBJZiB3ZSBzdWNjZWVkZWQsIHRoZSBmcyBpcyBwaW5uZWQgdmlhIG90aGVyIG1ldGhvZHMuICBJZiBub3QsXFxuIFxcdCAqIHdlJ3JlIGRvbmUgd2l0aCBpdCBhbnl3YXkuICBTbyByZWxlYXNlX2ZzKCkgaXMgYWx3YXlzIHJpZ2h0LlxcbiBcXHQgKi9cXG4tXFx0Y29uZmlnZnNfcmVsZWFzZV9mcygpO1xcbitcXHRjb25maWdmc19yZWxlYXNlX2ZzKE5VTEwpO1xcbiBcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbkBAIC0xODY5LDMyICsxODYxLDI3IEBAIHZvaWQgY29uZmlnZnNfdW5yZWdpc3Rlcl9kZWZhdWx0X2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKVxcbiB9XFxuIEVYUE9SVF9TWU1CT0woY29uZmlnZnNfdW5yZWdpc3Rlcl9kZWZhdWx0X2dyb3VwKTtcXG4gXFxuLWludCBjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKVxcbitzdGF0aWMgaW50IGNvbmZpZ2ZzX2xpbmtfcm9vdChzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAgKmluZm8sXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cyxcXG4rXFx0XFx0XFx0ICAgICAgc3RydWN0IGRlbnRyeSAqcm9vdClcXG4ge1xcbi1cXHRpbnQgZXJyO1xcbiBcXHRzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCA9IFxcdTAwMjZzdWJzeXMtXFx1MDAzZXN1X2dyb3VwO1xcbiBcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XFxuLVxcdHN0cnVjdCBkZW50cnkgKnJvb3Q7XFxuIFxcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xcbiBcXHRzdHJ1Y3QgY29uZmlnZnNfZnJhZ21lbnQgKmZyYWc7XFxuK1xcdGludCBlcnI7XFxuIFxcbiBcXHRmcmFnID0gbmV3X2ZyYWdtZW50KCk7XFxuIFxcdGlmICghZnJhZylcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbi1cXHRyb290ID0gY29uZmlnZnNfcGluX2ZzKCk7XFxuLVxcdGlmIChJU19FUlIocm9vdCkpIHtcXG4tXFx0XFx0cHV0X2ZyYWdtZW50KGZyYWcpO1xcbi1cXHRcXHRyZXR1cm4gUFRSX0VSUihyb290KTtcXG4tXFx0fVxcbi1cXG4gXFx0aWYgKCFncm91cC1cXHUwMDNlY2dfaXRlbS5jaV9uYW1lKVxcbiBcXHRcXHRncm91cC1cXHUwMDNlY2dfaXRlbS5jaV9uYW1lID0gZ3JvdXAtXFx1MDAzZWNnX2l0ZW0uY2lfbmFtZWJ1ZjtcXG4gXFxuIFxcdHNkID0gcm9vdC1cXHUwMDNlZF9mc2RhdGE7XFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmNvbmZpZ2ZzX3N1YnN5c3RlbV9tdXRleCk7XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmluZm8tXFx1MDAzZXN1YnN5c19tdXRleCk7XFxuIFxcdGxpbmtfZ3JvdXAodG9fY29uZmlnX2dyb3VwKHNkLVxcdTAwM2VzX2VsZW1lbnQpLCBncm91cCk7XFxuLVxcdG11dGV4X3VubG9jayhcXHUwMDI2Y29uZmlnZnNfc3Vic3lzdGVtX211dGV4KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2VzdWJzeXNfbXV0ZXgpO1xcbiBcXG4gXFx0aW5vZGVfbG9ja19uZXN0ZWQoZF9pbm9kZShyb290KSwgSV9NVVRFWF9QQVJFTlQpO1xcbiBcXG5AQCAtMTkyMSwxNyArMTkwOCwxMjAgQEAgaW50IGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpXFxuIFxcdGlub2RlX3VubG9jayhkX2lub2RlKHJvb3QpKTtcXG4gXFxuIFxcdGlmIChlcnIpIHtcXG4tXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2Y29uZmlnZnNfc3Vic3lzdGVtX211dGV4KTtcXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2aW5mby1cXHUwMDNlc3Vic3lzX211dGV4KTtcXG4gXFx0XFx0dW5saW5rX2dyb3VwKGdyb3VwKTtcXG4tXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZjb25maWdmc19zdWJzeXN0ZW1fbXV0ZXgpO1xcbi1cXHRcXHRjb25maWdmc19yZWxlYXNlX2ZzKCk7XFxuK1xcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlc3Vic3lzX211dGV4KTtcXG4gXFx0fVxcbiBcXHRwdXRfZnJhZ21lbnQoZnJhZyk7XFxuK1xcdHJldHVybiBlcnI7XFxuK31cXG4gXFxuK2ludCBjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKVxcbit7XFxuK1xcdHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvO1xcbitcXHRzdHJ1Y3QgZGVudHJ5ICpyb290O1xcbitcXHRpbnQgZXJyO1xcbitcXG4rXFx0aW5mbyA9IGNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKFxcdTAwMjZpbml0X25ldCk7XFxuK1xcdGlmIChXQVJOX09OKElTX0VSUihpbmZvKSkpXFxuK1xcdFxcdHJldHVybiBQVFJfRVJSKGluZm8pO1xcbitcXG4rXFx0cm9vdCA9IGNvbmZpZ2ZzX3Bpbl9mcyhOVUxMKTtcXG4rXFx0aWYgKElTX0VSUihyb290KSkge1xcbitcXHRcXHRlcnIgPSBQVFJfRVJSKHJvb3QpO1xcbitcXHRcXHRnb3RvIG91dF9wdXQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzdWJzeXMtXFx1MDAzZWZpbGxfc3Vic3lzdGVtKSB7XFxuK1xcdFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZzdWJzeXMtXFx1MDAzZXN1X2xpbmspO1xcbitcXHRcXHRtdXRleF9pbml0KFxcdTAwMjZzdWJzeXMtXFx1MDAzZXN1X211dGV4KTtcXG4rXFx0XFx0Y29uZmlnX2dyb3VwX2luaXQoXFx1MDAyNnN1YnN5cy1cXHUwMDNlc3VfZ3JvdXApO1xcbitcXHRcXHRlcnIgPSBzdWJzeXMtXFx1MDAzZWZpbGxfc3Vic3lzdGVtKHN1YnN5cywgaW5mby1cXHUwMDNlbmV0X25zKTtcXG4rXFx0XFx0aWYgKGVycilcXG4rXFx0XFx0XFx0Z290byBvdXRfcmVsZWFzZTtcXG4rXFx0fVxcbitcXG4rXFx0ZXJyID0gY29uZmlnZnNfbGlua19yb290KGluZm8sIHN1YnN5cywgcm9vdCk7XFxuK1xcdGlmIChlcnIpIHtcXG4rXFx0XFx0aWYgKHN1YnN5cy1cXHUwMDNlY2xlYXJfc3Vic3lzdGVtKVxcbitcXHRcXHRcXHRzdWJzeXMtXFx1MDAzZWNsZWFyX3N1YnN5c3RlbShzdWJzeXMsIGluZm8tXFx1MDAzZW5ldF9ucyk7XFxuK1xcdFxcdGdvdG8gb3V0X3JlbGVhc2U7XFxuK1xcdH1cXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmluZm8tXFx1MDAzZXN1YnN5c19tdXRleCk7XFxuK1xcdGxpc3RfYWRkKFxcdTAwMjZzdWJzeXMtXFx1MDAzZXN1X2xpbmssIFxcdTAwMjZpbmZvLVxcdTAwM2VzdWJzeXNfbGlzdCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlc3Vic3lzX211dGV4KTtcXG4rXFxuK291dF9yZWxlYXNlOlxcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRjb25maWdmc19yZWxlYXNlX2ZzKE5VTEwpO1xcbitvdXRfcHV0OlxcbitcXHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTtcXG4gXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4tdm9pZCBjb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpXFxuK3ZvaWQgY29uZmlnZnNfbGlua19zdWJzeXN0ZW1zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvKVxcbit7XFxuK1xcdHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnM7XFxuK1xcdHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICpwYXJlbnQgPSBjb25maWdmc19nZXRfc3VwZXJfaW5mbyhcXHUwMDI2aW5pdF9uZXQpO1xcbitcXHRMSVNUX0hFQUQoc3Vic3lzX2xpc3QpO1xcbitcXG4rXFx0aWYgKFdBUk5fT04oSVNfRVJSKHBhcmVudCkpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlmICgoaW5mby1cXHUwMDNlbmV0X25zID09IFxcdTAwMjZpbml0X25ldCkgfHwgV0FSTl9PTihwYXJlbnQgPT0gaW5mbykpIHtcXG4rXFx0XFx0Y29uZmlnZnNfcHV0X3N1cGVyX2luZm8ocGFyZW50KTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnBhcmVudC1cXHUwMDNlc3Vic3lzX211dGV4KTtcXG4rXFx0bGlzdF9zcGxpY2VfaW5pdChcXHUwMDI2cGFyZW50LVxcdTAwM2VzdWJzeXNfbGlzdCwgXFx1MDAyNnN1YnN5c19saXN0KTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZwYXJlbnQtXFx1MDAzZXN1YnN5c19tdXRleCk7XFxuK1xcdGxpc3RfZm9yX2VhY2hfZW50cnkocywgXFx1MDAyNnN1YnN5c19saXN0LCBzdV9saW5rKSB7XFxuK1xcdFxcdHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cztcXG4rXFx0XFx0c3RydWN0IGRlbnRyeSAqcm9vdDtcXG4rXFx0XFx0aW50IGVycjtcXG4rXFxuK1xcdFxcdGlmICghcy1cXHUwMDNlZmlsbF9zdWJzeXN0ZW0pXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRzdWJzeXMgPSBremFsbG9jX29iaigqc3Vic3lzKTtcXG4rXFx0XFx0aWYgKCFzdWJzeXMpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRzdWJzeXMtXFx1MDAzZWZpbGxfc3Vic3lzdGVtID0gcy1cXHUwMDNlZmlsbF9zdWJzeXN0ZW07XFxuK1xcdFxcdHN1YnN5cy1cXHUwMDNlY2xlYXJfc3Vic3lzdGVtID0gcy1cXHUwMDNlY2xlYXJfc3Vic3lzdGVtO1xcbitcXHRcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2c3Vic3lzLVxcdTAwM2VzdV9saW5rKTtcXG4rXFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2c3Vic3lzLVxcdTAwM2VzdV9tdXRleCk7XFxuK1xcdFxcdGNvbmZpZ19ncm91cF9pbml0KFxcdTAwMjZzdWJzeXMtXFx1MDAzZXN1X2dyb3VwKTtcXG4rXFx0XFx0ZXJyID0gc3Vic3lzLVxcdTAwM2VmaWxsX3N1YnN5c3RlbShzdWJzeXMsIGluZm8tXFx1MDAzZW5ldF9ucyk7XFxuK1xcdFxcdGlmIChlcnIpIHtcXG4rXFx0XFx0XFx0a2ZyZWUoc3Vic3lzKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cm9vdCA9IGNvbmZpZ2ZzX3Bpbl9mcyhzYik7XFxuK1xcdFxcdGlmIChJU19FUlIocm9vdCkpIHtcXG4rXFx0XFx0XFx0aWYgKHN1YnN5cy1cXHUwMDNlY2xlYXJfc3Vic3lzdGVtKVxcbitcXHRcXHRcXHRcXHRzdWJzeXMtXFx1MDAzZWNsZWFyX3N1YnN5c3RlbShzdWJzeXMsIGluZm8tXFx1MDAzZW5ldF9ucyk7XFxuK1xcdFxcdFxcdGtmcmVlKHN1YnN5cyk7XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuK1xcdFxcdGVyciA9IGNvbmZpZ2ZzX2xpbmtfcm9vdChpbmZvLCBzdWJzeXMsIHJvb3QpO1xcbitcXHRcXHRpZiAoZXJyKSB7XFxuK1xcdFxcdFxcdGNvbmZpZ2ZzX3JlbGVhc2VfZnMoc2IpO1xcbitcXHRcXHRcXHRpZiAoc3Vic3lzLVxcdTAwM2VjbGVhcl9zdWJzeXN0ZW0pXFxuK1xcdFxcdFxcdFxcdHN1YnN5cy1cXHUwMDNlY2xlYXJfc3Vic3lzdGVtKHN1YnN5cywgaW5mby1cXHUwMDNlbmV0X25zKTtcXG4rXFx0XFx0XFx0a2ZyZWUoc3Vic3lzKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2aW5mby1cXHUwMDNlc3Vic3lzX211dGV4KTtcXG4rXFx0XFx0bGlzdF9hZGQoXFx1MDAyNnN1YnN5cy1cXHUwMDNlc3VfbGluaywgXFx1MDAyNmluZm8tXFx1MDAzZXN1YnN5c19saXN0KTtcXG4rXFx0XFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2VzdWJzeXNfbXV0ZXgpO1xcbitcXHR9XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNnBhcmVudC1cXHUwMDNlc3Vic3lzX211dGV4KTtcXG4rXFx0bGlzdF9zcGxpY2UoXFx1MDAyNnN1YnN5c19saXN0LCBcXHUwMDI2cGFyZW50LVxcdTAwM2VzdWJzeXNfbGlzdCk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cGFyZW50LVxcdTAwM2VzdWJzeXNfbXV0ZXgpO1xcbitcXHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhwYXJlbnQpO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBjb25maWdmc191bmxpbmtfcm9vdChzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpXFxuIHtcXG4gXFx0c3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAgPSBcXHUwMDI2c3Vic3lzLVxcdTAwM2VzdV9ncm91cDtcXG4gXFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZGdldChncm91cC1cXHUwMDNlY2dfaXRlbS5jaV9kZW50cnkpO1xcbkBAIC0xOTQxLDcgKzIwMzEsOCBAQCB2b2lkIGNvbmZpZ2ZzX3VucmVnaXN0ZXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cylcXG4gXFxuIFxcdGlmIChkZW50cnktXFx1MDAzZWRfcGFyZW50ICE9IHJvb3QpIHtcXG4gXFx0XFx0cHJfZXJyKFxcXCJUcmllZCB0byB1bnJlZ2lzdGVyIG5vbi1zdWJzeXN0ZW0hXFxcXG5cXFwiKTtcXG4tXFx0XFx0cmV0dXJuO1xcbitcXHRcXHRkcHV0KGRlbnRyeSk7XFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4gXFx0fVxcbiBcXG4gXFx0ZG93bl93cml0ZShcXHUwMDI2ZnJhZy1cXHUwMDNlZnJhZ19zZW0pO1xcbkBAIC0xOTY5LDExICsyMDYwLDUwIEBAIHZvaWQgY29uZmlnZnNfdW5yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKVxcbiBcXHRpbm9kZV91bmxvY2soZF9pbm9kZShyb290KSk7XFxuIFxcbiBcXHRkcHV0KGRlbnRyeSk7XFxuK1xcdHJldHVybiB0cnVlO1xcbit9XFxuK1xcbit2b2lkIGNvbmZpZ2ZzX3VubGlua19zdWJzeXN0ZW1zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXFxuK1xcdFxcdFxcdFxcdHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvKVxcbit7XFxuK1xcdHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cywgKnM7XFxuK1xcbitcXHRtdXRleF9sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2VzdWJzeXNfbXV0ZXgpO1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUoc3Vic3lzLCBzLCBcXHUwMDI2aW5mby1cXHUwMDNlc3Vic3lzX2xpc3QsIHN1X2xpbmspIHtcXG4rXFx0XFx0bGlzdF9kZWxfaW5pdChcXHUwMDI2c3Vic3lzLVxcdTAwM2VzdV9saW5rKTtcXG4rXFx0XFx0aWYgKCFjb25maWdmc191bmxpbmtfcm9vdChzdWJzeXMpKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFx0XFx0aWYgKHN1YnN5cy1cXHUwMDNlY2xlYXJfc3Vic3lzdGVtKVxcbitcXHRcXHRcXHRzdWJzeXMtXFx1MDAzZWNsZWFyX3N1YnN5c3RlbShzdWJzeXMsIGluZm8tXFx1MDAzZW5ldF9ucyk7XFxuK1xcdFxcdHVubGlua19ncm91cChcXHUwMDI2c3Vic3lzLVxcdTAwM2VzdV9ncm91cCk7XFxuK1xcdFxcdGNvbmZpZ2ZzX3JlbGVhc2VfZnMoc2IpO1xcbitcXHRcXHRrZnJlZShzdWJzeXMpO1xcbitcXHR9XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2aW5mby1cXHUwMDNlc3Vic3lzX211dGV4KTtcXG4rfVxcbitcXG4rdm9pZCBjb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpXFxuK3tcXG4rXFx0c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm87XFxuK1xcdHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwID0gXFx1MDAyNnN1YnN5cy1cXHUwMDNlc3VfZ3JvdXA7XFxuK1xcbitcXHRpbmZvID0gY29uZmlnZnNfZ2V0X3N1cGVyX2luZm8oXFx1MDAyNmluaXRfbmV0KTtcXG4rXFx0aWYgKFdBUk5fT04oSVNfRVJSKGluZm8pKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0aWYgKCFjb25maWdmc191bmxpbmtfcm9vdChzdWJzeXMpKSB7XFxuK1xcdFxcdGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKGluZm8pO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4gXFxuLVxcdG11dGV4X2xvY2soXFx1MDAyNmNvbmZpZ2ZzX3N1YnN5c3RlbV9tdXRleCk7XFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmluZm8tXFx1MDAzZXN1YnN5c19tdXRleCk7XFxuK1xcdGxpc3RfZGVsX2luaXQoXFx1MDAyNnN1YnN5cy1cXHUwMDNlc3VfbGluayk7XFxuK1xcdGlmIChzdWJzeXMtXFx1MDAzZWNsZWFyX3N1YnN5c3RlbSlcXG4rXFx0XFx0c3Vic3lzLVxcdTAwM2VjbGVhcl9zdWJzeXN0ZW0oc3Vic3lzLCBpbmZvLVxcdTAwM2VuZXRfbnMpO1xcbiBcXHR1bmxpbmtfZ3JvdXAoZ3JvdXApO1xcbi1cXHRtdXRleF91bmxvY2soXFx1MDAyNmNvbmZpZ2ZzX3N1YnN5c3RlbV9tdXRleCk7XFxuLVxcdGNvbmZpZ2ZzX3JlbGVhc2VfZnMoKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZpbmZvLVxcdTAwM2VzdWJzeXNfbXV0ZXgpO1xcbitcXHRjb25maWdmc19yZWxlYXNlX2ZzKE5VTEwpO1xcbitcXHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTtcXG4gfVxcbiBcXG4gRVhQT1JUX1NZTUJPTChjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0pO1xcbmRpZmYgLS1naXQgYS9mcy9jb25maWdmcy9tb3VudC5jIGIvZnMvY29uZmlnZnMvbW91bnQuY1xcbmluZGV4IDQ5MjlmMzQzMTE4OTQ2Li43OTQxMjU3ZDU1OGI3MiAxMDA2NDRcXG4tLS0gYS9mcy9jb25maWdmcy9tb3VudC5jXFxuKysrIGIvZnMvY29uZmlnZnMvbW91bnQuY1xcbkBAIC0yMiwxMCArMjIsMTkgQEBcXG4gLyogUmFuZG9tIG1hZ2ljIG51bWJlciAqL1xcbiAjZGVmaW5lIENPTkZJR0ZTX01BR0lDIDB4NjI2NTY1NzBcXG4gXFxuLXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKmNvbmZpZ2ZzX21vdW50ID0gTlVMTDtcXG4gc3RydWN0IGttZW1fY2FjaGUgKmNvbmZpZ2ZzX2Rpcl9jYWNoZXA7XFxuLXN0YXRpYyBpbnQgY29uZmlnZnNfbW50X2NvdW50ID0gMDtcXG4rc3RhdGljIERFRklORV9YQVJSQVkoY29uZmlnZnNfc3VwZXJfeGEpO1xcbitzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmNvbmZpZ2ZzX3Jvb3Q7XFxuK3N0YXRpYyBERUZJTkVfU1BJTkxPQ0soY29uZmlnZnNfcGluX2xvY2spO1xcbiBcXG4rc3RhdGljIHU2NCBjb25maWdmc19uc19pZChzdHJ1Y3QgbmV0ICpuZXRfbnMpXFxuK3tcXG4rXFx0c3RydWN0IG5zX2NvbW1vbiAqbnMgPSBuZXRfbnMgPyB0b19uc19jb21tb24obmV0X25zKSA6IE5VTEw7XFxuK1xcbitcXHRpZiAoIW5zIHx8IG5ldF9ucyA9PSBcXHUwMDI2aW5pdF9uZXQpXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRyZXR1cm4gbnMtXFx1MDAzZW5zX2lkO1xcbit9XFxuIFxcbiBzdGF0aWMgdm9pZCBjb25maWdmc19mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIHtcXG5AQCAtNDAsMjggKzQ5LDgyIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBjb25maWdmc19vcHMgPSB7XFxuIFxcdC5mcmVlX2lub2RlXFx0PSBjb25maWdmc19mcmVlX2lub2RlLFxcbiB9O1xcbiBcXG4tc3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgY29uZmlnZnNfcm9vdF9ncm91cCA9IHtcXG4tXFx0LmNnX2l0ZW0gPSB7XFxuLVxcdFxcdC5jaV9uYW1lYnVmXFx0PSBcXFwicm9vdFxcXCIsXFxuLVxcdFxcdC5jaV9uYW1lXFx0PSBjb25maWdmc19yb290X2dyb3VwLmNnX2l0ZW0uY2lfbmFtZWJ1ZixcXG4tXFx0fSxcXG4tfTtcXG4rYm9vbCBjb25maWdmc19pc19yb290KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcXG4re1xcbitcXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcXG4rXFxuK1xcdGlmICghaXRlbS1cXHUwMDNlY2lfZGVudHJ5KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdHNkID0gaXRlbS1cXHUwMDNlY2lfZGVudHJ5LVxcdTAwM2VkX2ZzZGF0YTtcXG4rXFx0cmV0dXJuICEhKHNkLVxcdTAwM2VzX3R5cGUgXFx1MDAyNiBDT05GSUdGU19ST09UKTtcXG4rfVxcbiBcXG4taW50IGNvbmZpZ2ZzX2lzX3Jvb3Qoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxcbitzdGF0aWMgdm9pZCBjb25maWdmc19maWxsX3N1cGVyX2luZm8oc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8pXFxuIHtcXG4tXFx0cmV0dXJuIGl0ZW0gPT0gXFx1MDAyNmNvbmZpZ2ZzX3Jvb3RfZ3JvdXAuY2dfaXRlbTtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmluZm8tXFx1MDAzZXJvb3Quc19zaWJsaW5nKTtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmluZm8tXFx1MDAzZXJvb3Quc19jaGlsZHJlbik7XFxuK1xcdGluZm8tXFx1MDAzZXJvb3Quc190eXBlID0gQ09ORklHRlNfUk9PVDtcXG4rXFx0aW5mby1cXHUwMDNlcm9vdC5zX2VsZW1lbnQgPSBcXHUwMDI2aW5mby1cXHUwMDNlZ3JvdXAuY2dfaXRlbTtcXG4rXFx0c3Ryc2NweShpbmZvLVxcdTAwM2Vncm91cC5jZ19pdGVtLmNpX25hbWVidWYsIFxcXCJyb290XFxcIiwgNCk7XFxuK1xcdGluZm8tXFx1MDAzZWdyb3VwLmNnX2l0ZW0uY2lfbmFtZSA9IGluZm8tXFx1MDAzZWdyb3VwLmNnX2l0ZW0uY2lfbmFtZWJ1ZjtcXG4rXFx0Y29uZmlnX2dyb3VwX2luaXQoXFx1MDAyNmluZm8tXFx1MDAzZWdyb3VwKTtcXG4rXFx0SU5JVF9MSVNUX0hFQUQoXFx1MDAyNmluZm8tXFx1MDAzZXN1YnN5c19saXN0KTtcXG4rXFx0bXV0ZXhfaW5pdChcXHUwMDI2aW5mby1cXHUwMDNlc3Vic3lzX211dGV4KTtcXG4rXFx0cmVmY291bnRfc2V0KFxcdTAwMjZpbmZvLVxcdTAwM2VyZWYsIDEpO1xcbitcXHRpbmZvLVxcdTAwM2VtbnRfY291bnQgPSAwO1xcbiB9XFxuIFxcbi1zdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCBjb25maWdmc19yb290ID0ge1xcbi1cXHQuc19zaWJsaW5nXFx0PSBMSVNUX0hFQURfSU5JVChjb25maWdmc19yb290LnNfc2libGluZyksXFxuLVxcdC5zX2NoaWxkcmVuXFx0PSBMSVNUX0hFQURfSU5JVChjb25maWdmc19yb290LnNfY2hpbGRyZW4pLFxcbi1cXHQuc19lbGVtZW50XFx0PSBcXHUwMDI2Y29uZmlnZnNfcm9vdF9ncm91cC5jZ19pdGVtLFxcbi1cXHQuc190eXBlXFx0XFx0PSBDT05GSUdGU19ST09ULFxcbi1cXHQuc19pYXR0clxcdD0gTlVMTCxcXG4tfTtcXG4rc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKHN0cnVjdCBuZXQgKm5ldF9ucylcXG4re1xcbitcXHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbztcXG4rXFx0dTY0IG5zX2lkID0gY29uZmlnZnNfbnNfaWQobmV0X25zKTtcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdHhhX2xvY2soXFx1MDAyNmNvbmZpZ2ZzX3N1cGVyX3hhKTtcXG4rXFx0aW5mbyA9IHhhX2xvYWQoXFx1MDAyNmNvbmZpZ2ZzX3N1cGVyX3hhLCBuc19pZCk7XFxuK1xcdGlmIChpbmZvKSB7XFxuK1xcdFxcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKChcXHUwMDI2aW5mby1cXHUwMDNlcmVmKSkpXFxuK1xcdFxcdFxcdGluZm8gPSBFUlJfUFRSKC1FQlVTWSk7XFxuK1xcdFxcdHhhX3VubG9jayhcXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEpO1xcbitcXHRcXHRyZXR1cm4gaW5mbztcXG4rXFx0fVxcbitcXHRpbmZvID0ga3phbGxvY19vYmooKmluZm8pO1xcbitcXHRpZiAoIWluZm8pIHtcXG4rXFx0XFx0eGFfdW5sb2NrKFxcdTAwMjZjb25maWdmc19zdXBlcl94YSk7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbitcXHR9XFxuK1xcbitcXHRpbmZvLVxcdTAwM2VuZXRfbnMgPSBnZXRfbmV0KG5ldF9ucyk7XFxuK1xcdGNvbmZpZ2ZzX2ZpbGxfc3VwZXJfaW5mbyhpbmZvKTtcXG4rXFx0ZXJyID0gX194YV9pbnNlcnQoXFx1MDAyNmNvbmZpZ2ZzX3N1cGVyX3hhLCBuc19pZCxcXG4rXFx0XFx0XFx0ICBpbmZvLCBHRlBfS0VSTkVMKTtcXG4rXFx0eGFfdW5sb2NrKFxcdTAwMjZjb25maWdmc19zdXBlcl94YSk7XFxuK1xcdGlmIChlcnIgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdHB1dF9uZXQoaW5mby1cXHUwMDNlbmV0X25zKTtcXG4rXFx0XFx0a2ZyZWUoaW5mbyk7XFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIGluZm87XFxuK31cXG4rXFxuK3ZvaWQgY29uZmlnZnNfcHV0X3N1cGVyX2luZm8oc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8pXFxuK3tcXG4rXFx0dTY0IG5zX2lkID0gY29uZmlnZnNfbnNfaWQoaW5mby1cXHUwMDNlbmV0X25zKTtcXG4rXFxuK1xcdHhhX2xvY2soXFx1MDAyNmNvbmZpZ2ZzX3N1cGVyX3hhKTtcXG4rXFx0aWYgKCFyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmluZm8tXFx1MDAzZXJlZikpIHtcXG4rXFx0XFx0eGFfdW5sb2NrKFxcdTAwMjZjb25maWdmc19zdXBlcl94YSk7XFxuK1xcdFxcdHJldHVybjtcXG4rXFx0fVxcbitcXHRfX3hhX2VyYXNlKFxcdTAwMjZjb25maWdmc19zdXBlcl94YSwgbnNfaWQpO1xcbitcXHR4YV91bmxvY2soXFx1MDAyNmNvbmZpZ2ZzX3N1cGVyX3hhKTtcXG4rXFx0cHV0X25ldChpbmZvLVxcdTAwM2VuZXRfbnMpO1xcbitcXHRrZnJlZShpbmZvKTtcXG4rfVxcbiBcXG4gc3RhdGljIGludCBjb25maWdmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4ge1xcbitcXHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyA9IHNiLVxcdTAwM2VzX2ZzX2luZm87XFxuIFxcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XFxuIFxcdHN0cnVjdCBkZW50cnkgKnJvb3Q7XFxuIFxcbkBAIC03Miw2NiArMTM1LDE2MiBAQCBzdGF0aWMgaW50IGNvbmZpZ2ZzX2ZpbGxfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbiBcXHRzYi1cXHUwMDNlc190aW1lX2dyYW4gPSAxO1xcbiBcXG4gXFx0aW5vZGUgPSBjb25maWdmc19uZXdfaW5vZGUoU19JRkRJUiB8IFNfSVJXWFUgfCBTX0lSVUdPIHwgU19JWFVHTyxcXG4tXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmNvbmZpZ2ZzX3Jvb3QsIHNiKTtcXG4tXFx0aWYgKGlub2RlKSB7XFxuLVxcdFxcdGlub2RlLVxcdTAwM2VpX29wID0gXFx1MDAyNmNvbmZpZ2ZzX3Jvb3RfaW5vZGVfb3BlcmF0aW9ucztcXG4tXFx0XFx0aW5vZGUtXFx1MDAzZWlfZm9wID0gXFx1MDAyNmNvbmZpZ2ZzX2Rpcl9vcGVyYXRpb25zO1xcbi1cXHRcXHQvKiBkaXJlY3RvcnkgaW5vZGVzIHN0YXJ0IG9mZiB3aXRoIGlfbmxpbmsgPT0gMiAoZm9yIFxcXCIuXFxcIiBlbnRyeSkgKi9cXG4tXFx0XFx0aW5jX25saW5rKGlub2RlKTtcXG4tXFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0ICAgXFx1MDAyNmluZm8tXFx1MDAzZXJvb3QsIHNiKTtcXG4rXFx0aWYgKElTX0VSUihpbm9kZSkpIHtcXG4gXFx0XFx0cHJfZGVidWcoXFxcImNvdWxkIG5vdCBnZXQgcm9vdCBpbm9kZVxcXFxuXFxcIik7XFxuLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihpbm9kZSk7XFxuIFxcdH1cXG4rXFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2Y29uZmlnZnNfcm9vdF9pbm9kZV9vcGVyYXRpb25zO1xcbitcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2Y29uZmlnZnNfZGlyX29wZXJhdGlvbnM7XFxuK1xcdC8qIGRpcmVjdG9yeSBpbm9kZXMgc3RhcnQgb2ZmIHdpdGggaV9ubGluayA9PSAyIChmb3IgXFxcIi5cXFwiIGVudHJ5KSAqL1xcbitcXHRpbmNfbmxpbmsoaW5vZGUpO1xcbiBcXG4gXFx0cm9vdCA9IGRfbWFrZV9yb290KGlub2RlKTtcXG4gXFx0aWYgKCFyb290KSB7XFxuIFxcdFxcdHByX2RlYnVnKFxcXCIlczogY291bGQgbm90IGdldCByb290IGRlbnRyeSFcXFxcblxcXCIsX19mdW5jX18pO1xcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0fVxcbi1cXHRjb25maWdfZ3JvdXBfaW5pdChcXHUwMDI2Y29uZmlnZnNfcm9vdF9ncm91cCk7XFxuLVxcdGNvbmZpZ2ZzX3Jvb3RfZ3JvdXAuY2dfaXRlbS5jaV9kZW50cnkgPSByb290O1xcbi1cXHRyb290LVxcdTAwM2VkX2ZzZGF0YSA9IFxcdTAwMjZjb25maWdmc19yb290O1xcbitcXHRpbmZvLVxcdTAwM2Vncm91cC5jZ19pdGVtLmNpX2RlbnRyeSA9IHJvb3Q7XFxuK1xcdHJvb3QtXFx1MDAzZWRfZnNkYXRhID0gXFx1MDAyNmluZm8tXFx1MDAzZXJvb3Q7XFxuIFxcdHNiLVxcdTAwM2VzX3Jvb3QgPSByb290O1xcbiBcXHRzZXRfZGVmYXVsdF9kX29wKHNiLCBcXHUwMDI2Y29uZmlnZnNfZGVudHJ5X29wcyk7IC8qIHRoZSByZXN0IGdldCB0aGF0ICovXFxuIFxcdHNiLVxcdTAwM2VzX2RfZmxhZ3MgfD0gRENBQ0hFX0RPTlRDQUNIRTtcXG4rXFxuK1xcdGNvbmZpZ2ZzX2xpbmtfc3Vic3lzdGVtcyhzYiwgaW5mbyk7XFxuK1xcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGludCBjb25maWdmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuIHtcXG4tXFx0cmV0dXJuIGdldF90cmVlX3NpbmdsZShmYywgY29uZmlnZnNfZmlsbF9zdXBlcik7XFxuK1xcdHN0cnVjdCBuZXQgKm5ldF9ucyA9IGZjLVxcdTAwM2Vmc19wcml2YXRlO1xcbitcXHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbztcXG4rXFx0aW50IGVycjtcXG4rXFxuK1xcdGluZm8gPSBjb25maWdmc19nZXRfc3VwZXJfaW5mbyhuZXRfbnMpO1xcbitcXHRpZiAoSVNfRVJSKGluZm8pKVxcbitcXHRcXHRyZXR1cm4gUFRSX0VSUihpbmZvKTtcXG4rXFxuK1xcdGVyciA9IGdldF90cmVlX2tleWVkKGZjLCBjb25maWdmc19maWxsX3N1cGVyLCBpbmZvKTtcXG4rXFx0aWYgKGVyciBcXHUwMDI2XFx1MDAyNiBmYy1cXHUwMDNlc19mc19pbmZvKVxcbitcXHRcXHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgY29uZmlnZnNfZnNfY29udGV4dF9mcmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4re1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXRfbnMgPSBmYy1cXHUwMDNlZnNfcHJpdmF0ZTtcXG4rXFxuK1xcdGZjLVxcdTAwM2Vmc19wcml2YXRlID0gTlVMTDtcXG4rXFx0cHV0X25ldChuZXRfbnMpO1xcbiB9XFxuIFxcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBjb25maWdmc19jb250ZXh0X29wcyA9IHtcXG4gXFx0LmdldF90cmVlXFx0PSBjb25maWdmc19nZXRfdHJlZSxcXG4rXFx0LmZyZWVcXHRcXHQ9IGNvbmZpZ2ZzX2ZzX2NvbnRleHRfZnJlZSxcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbnQgY29uZmlnZnNfaW5pdF9mc19jb250ZXh0KHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG4ge1xcbitcXHRzdHJ1Y3QgbmV0ICpuZXRfbnMgPSBnZXRfbmV0KGN1cnJlbnQtXFx1MDAzZW5zcHJveHktXFx1MDAzZW5ldF9ucyk7XFxuK1xcbitcXHRmYy1cXHUwMDNlZnNfcHJpdmF0ZSA9IG5ldF9ucztcXG4gXFx0ZmMtXFx1MDAzZW9wcyA9IFxcdTAwMjZjb25maWdmc19jb250ZXh0X29wcztcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGNvbmZpZ2ZzX2tpbGxfc2Ioc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4re1xcbitcXHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyA9IHNiLVxcdTAwM2VzX2ZzX2luZm87XFxuK1xcbitcXHRjb25maWdmc191bmxpbmtfc3Vic3lzdGVtcyhzYiwgaW5mbyk7XFxuK1xcdGtpbGxfYW5vbl9zdXBlcihzYik7XFxuK1xcdGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKGluZm8pO1xcbitcXHRzYi1cXHUwMDNlc19mc19pbmZvID0gTlVMTDtcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGNvbmZpZ2ZzX2ZzX3R5cGUgPSB7XFxuIFxcdC5vd25lclxcdFxcdD0gVEhJU19NT0RVTEUsXFxuIFxcdC5uYW1lXFx0XFx0PSBcXFwiY29uZmlnZnNcXFwiLFxcbiBcXHQuaW5pdF9mc19jb250ZXh0ID0gY29uZmlnZnNfaW5pdF9mc19jb250ZXh0LFxcbi1cXHQua2lsbF9zYlxcdD0ga2lsbF9hbm9uX3N1cGVyLFxcbitcXHQua2lsbF9zYlxcdD0gY29uZmlnZnNfa2lsbF9zYixcXG4rXFx0LmZzX2ZsYWdzXFx0PSBGU19VU0VSTlNfTU9VTlQsXFxuIH07XFxuIE1PRFVMRV9BTElBU19GUyhcXFwiY29uZmlnZnNcXFwiKTtcXG4gXFxuLXN0cnVjdCBkZW50cnkgKmNvbmZpZ2ZzX3Bpbl9mcyh2b2lkKVxcbitzdHJ1Y3QgZGVudHJ5ICpjb25maWdmc19waW5fZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4ge1xcbi1cXHRpbnQgZXJyID0gc2ltcGxlX3Bpbl9mcyhcXHUwMDI2Y29uZmlnZnNfZnNfdHlwZSwgXFx1MDAyNmNvbmZpZ2ZzX21vdW50LFxcbi1cXHRcXHRcXHQgICAgIFxcdTAwMjZjb25maWdmc19tbnRfY291bnQpO1xcbi1cXHRyZXR1cm4gZXJyID8gRVJSX1BUUihlcnIpIDogY29uZmlnZnNfbW91bnQtXFx1MDAzZW1udF9yb290O1xcbitcXHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbztcXG4rXFxuK1xcdHNwaW5fbG9jayhcXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xcbitcXHRpZiAoc2IpIHtcXG4rXFx0XFx0c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKnJvb3QgPSBjb25maWdmc19yb290O1xcbitcXHRcXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBzYi1cXHUwMDNlc19yb290O1xcbitcXG4rXFx0XFx0aW5mbyA9IHNiLVxcdTAwM2VzX2ZzX2luZm87XFxuK1xcdFxcdGlmICghaW5mby1cXHUwMDNlbW50KSB7XFxuK1xcdFxcdFxcdHN0cnVjdCB2ZnNtb3VudCAqbW50O1xcbitcXG4rXFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNmNvbmZpZ2ZzX3Bpbl9sb2NrKTtcXG4rXFx0XFx0XFx0bW50ID0gbW50X2Nsb25lX2RpcmVjdChyb290LVxcdTAwM2VtbnQsIGRlbnRyeSk7XFxuK1xcdFxcdFxcdGlmIChJU19FUlIobW50KSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIEVSUl9DQVNUKG1udCk7XFxuK1xcdFxcdFxcdHNwaW5fbG9jayhcXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xcbitcXHRcXHRcXHRpbmZvLVxcdTAwM2VtbnQgPSBtbnQ7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdG1udGdldChpbmZvLVxcdTAwM2VtbnQpO1xcbitcXHRcXHR9XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGluZm8gPSBjb25maWdmc19yb290O1xcbitcXHRcXHRpZiAoIWluZm8tXFx1MDAzZW1udCkge1xcbitcXHRcXHRcXHRzdHJ1Y3QgdmZzbW91bnQgKm1udDtcXG4rXFxuK1xcdFxcdFxcdHNwaW5fdW5sb2NrKFxcdTAwMjZjb25maWdmc19waW5fbG9jayk7XFxuK1xcdFxcdFxcdG1udCA9IHZmc19rZXJuX21vdW50KFxcdTAwMjZjb25maWdmc19mc190eXBlLCBTQl9LRVJOTU9VTlQsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgY29uZmlnZnNfZnNfdHlwZS5uYW1lLCBOVUxMKTtcXG4rXFx0XFx0XFx0aWYgKElTX0VSUihtbnQpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX0NBU1QobW50KTtcXG4rXFx0XFx0XFx0c3Bpbl9sb2NrKFxcdTAwMjZjb25maWdmc19waW5fbG9jayk7XFxuK1xcdFxcdFxcdGluZm8tXFx1MDAzZW1udCA9IG1udDtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0bW50Z2V0KGluZm8tXFx1MDAzZW1udCk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXHRpbmZvLVxcdTAwM2VtbnRfY291bnQrKztcXG4rXFx0c3Bpbl91bmxvY2soXFx1MDAyNmNvbmZpZ2ZzX3Bpbl9sb2NrKTtcXG4rXFx0cmV0dXJuIGluZm8tXFx1MDAzZW1udC1cXHUwMDNlbW50X3Jvb3Q7XFxuIH1cXG4gXFxuLXZvaWQgY29uZmlnZnNfcmVsZWFzZV9mcyh2b2lkKVxcbit2b2lkIGNvbmZpZ2ZzX3JlbGVhc2VfZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4ge1xcbi1cXHRzaW1wbGVfcmVsZWFzZV9mcyhcXHUwMDI2Y29uZmlnZnNfbW91bnQsIFxcdTAwMjZjb25maWdmc19tbnRfY291bnQpO1xcbitcXHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyA9IGNvbmZpZ2ZzX3Jvb3Q7XFxuK1xcdHN0cnVjdCB2ZnNtb3VudCAqbW50O1xcbitcXG4rXFx0c3Bpbl9sb2NrKFxcdTAwMjZjb25maWdmc19waW5fbG9jayk7XFxuK1xcdGlmIChzYilcXG4rXFx0XFx0aW5mbyA9IHNiLVxcdTAwM2VzX2ZzX2luZm87XFxuK1xcdG1udCA9IGluZm8tXFx1MDAzZW1udDtcXG4rXFx0aWYgKC0taW5mby1cXHUwMDNlbW50X2NvdW50KVxcbitcXHRcXHRpbmZvLVxcdTAwM2VtbnQgPSBOVUxMO1xcbitcXHRzcGluX3VubG9jayhcXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xcbitcXHRtbnRwdXQobW50KTtcXG4gfVxcbiBcXG4rc3RydWN0IG5ldCAqY29uZmlnZnNfbnNfZnJvbV9ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cClcXG4re1xcbitcXHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyA9IGNvbmZpZ2ZzX3Jvb3Q7XFxuK1xcdHN0cnVjdCBuZXQgKm5ldF9ucyA9IE5VTEw7XFxuK1xcbitcXHRpZiAoZ3JvdXApIHtcXG4rXFx0XFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gZ3JvdXAtXFx1MDAzZWNnX2l0ZW0uY2lfZGVudHJ5O1xcbitcXG4rXFx0XFx0aW5mbyA9IGRlbnRyeS1cXHUwMDNlZF9zYi1cXHUwMDNlc19mc19pbmZvO1xcbitcXHRcXHRpZiAoaW5mbylcXG4rXFx0XFx0XFx0bmV0X25zID0gaW5mby1cXHUwMDNlbmV0X25zO1xcbitcXHR9XFxuK1xcdHJldHVybiBuZXRfbnM7XFxuK31cXG4rRVhQT1JUX1NZTUJPTF9HUEwoY29uZmlnZnNfbnNfZnJvbV9ncm91cCk7XFxuIFxcbiBzdGF0aWMgaW50IF9faW5pdCBjb25maWdmc19pbml0KHZvaWQpXFxuIHtcXG5AQCAtMTQzLDE4ICszMDIsMjcgQEAgc3RhdGljIGludCBfX2luaXQgY29uZmlnZnNfaW5pdCh2b2lkKVxcbiBcXHRpZiAoIWNvbmZpZ2ZzX2Rpcl9jYWNoZXApXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4rXFx0Y29uZmlnZnNfcm9vdCA9IGNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKFxcdTAwMjZpbml0X25ldCk7XFxuK1xcdGlmIChJU19FUlIoY29uZmlnZnNfcm9vdCkpIHtcXG4rXFx0XFx0ZXJyID0gUFRSX0VSUihjb25maWdmc19yb290KTtcXG4rXFx0XFx0Z290byBvdXQyO1xcbitcXHR9XFxuK1xcbiBcXHRlcnIgPSBzeXNmc19jcmVhdGVfbW91bnRfcG9pbnQoa2VybmVsX2tvYmosIFxcXCJjb25maWdcXFwiKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBvdXQyO1xcbitcXHRcXHRnb3RvIG91dDM7XFxuIFxcbiBcXHRlcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKFxcdTAwMjZjb25maWdmc19mc190eXBlKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0Z290byBvdXQzO1xcbitcXHRcXHRnb3RvIG91dDQ7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4tb3V0MzpcXG4rb3V0NDpcXG4gXFx0cHJfZXJyKFxcXCJVbmFibGUgdG8gcmVnaXN0ZXIgZmlsZXN5c3RlbSFcXFxcblxcXCIpO1xcbiBcXHRzeXNmc19yZW1vdmVfbW91bnRfcG9pbnQoa2VybmVsX2tvYmosIFxcXCJjb25maWdcXFwiKTtcXG4rb3V0MzpcXG4rXFx0Y29uZmlnZnNfcHV0X3N1cGVyX2luZm8oY29uZmlnZnNfcm9vdCk7XFxuK1xcdGNvbmZpZ2ZzX3Jvb3QgPSBOVUxMO1xcbiBvdXQyOlxcbiBcXHRrbWVtX2NhY2hlX2Rlc3Ryb3koY29uZmlnZnNfZGlyX2NhY2hlcCk7XFxuIFxcdGNvbmZpZ2ZzX2Rpcl9jYWNoZXAgPSBOVUxMO1xcbkBAIC0xNjYsNiArMzM0LDggQEAgc3RhdGljIHZvaWQgX19leGl0IGNvbmZpZ2ZzX2V4aXQodm9pZClcXG4ge1xcbiBcXHR1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oXFx1MDAyNmNvbmZpZ2ZzX2ZzX3R5cGUpO1xcbiBcXHRzeXNmc19yZW1vdmVfbW91bnRfcG9pbnQoa2VybmVsX2tvYmosIFxcXCJjb25maWdcXFwiKTtcXG4rXFx0Y29uZmlnZnNfcHV0X3N1cGVyX2luZm8oY29uZmlnZnNfcm9vdCk7XFxuK1xcdGNvbmZpZ2ZzX3Jvb3QgPSBOVUxMO1xcbiBcXHRrbWVtX2NhY2hlX2Rlc3Ryb3koY29uZmlnZnNfZGlyX2NhY2hlcCk7XFxuIFxcdGNvbmZpZ2ZzX2Rpcl9jYWNoZXAgPSBOVUxMO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2ZzL25hbWVzcGFjZS5jIGIvZnMvbmFtZXNwYWNlLmNcXG5pbmRleCAzZDVjZDViZjNiMDUzNy4uZTdhYmJmNjMyY2M3MGQgMTAwNjQ0XFxuLS0tIGEvZnMvbmFtZXNwYWNlLmNcXG4rKysgYi9mcy9uYW1lc3BhY2UuY1xcbkBAIC0xNDgyLDYgKzE0ODIsMTcgQEAgc3RydWN0IHZmc21vdW50ICptbnRfY2xvbmVfaW50ZXJuYWwoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXFxuIFxcdHJldHVybiBcXHUwMDI2cC1cXHUwMDNlbW50O1xcbiB9XFxuIFxcbitzdHJ1Y3QgdmZzbW91bnQgKm1udF9jbG9uZV9kaXJlY3Qoc3RydWN0IHZmc21vdW50ICptbnQsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSlcXG4re1xcbitcXHRzdHJ1Y3QgbW91bnQgKnA7XFxuK1xcbitcXHRwID0gY2xvbmVfbW50KHJlYWxfbW91bnQobW50KSwgZGVudHJ5LCBDTF9TTEFWRSk7XFxuK1xcdGlmIChJU19FUlIocCkpXFxuK1xcdFxcdHJldHVybiBFUlJfQ0FTVChwKTtcXG4rXFx0cC1cXHUwMDNlbW50Lm1udF9mbGFncyB8PSBNTlRfSU5URVJOQUw7XFxuK1xcdHJldHVybiBcXHUwMDI2cC1cXHUwMDNlbW50O1xcbit9XFxuK1xcbiAvKlxcbiAgKiBSZXR1cm5zIHRoZSBtb3VudCB3aGljaCBlaXRoZXIgaGFzIHRoZSBzcGVjaWZpZWQgbW50X2lkLCBvciBoYXMgdGhlIG5leHRcXG4gICogc21hbGxlc3QgaWQgYWZlciB0aGUgc3BlY2lmaWVkIG9uZS5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jb25maWdmcy5oIGIvaW5jbHVkZS9saW51eC9jb25maWdmcy5oXFxuaW5kZXggZWY2NWM3NWJlZWFhZDguLjc2ZTBiYjFhNzJiOWRiIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvY29uZmlnZnMuaFxcbisrKyBiL2luY2x1ZGUvbGludXgvY29uZmlnZnMuaFxcbkBAIC0yNCw2ICsyNCw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0LmhcXHUwMDNlICAgLyogc3RydWN0IGxpc3RfaGVhZCAqL1xcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgva3JlZi5oXFx1MDAzZSAgIC8qIHN0cnVjdCBrcmVmICovXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9tdXRleC5oXFx1MDAzZSAgLyogc3RydWN0IG11dGV4ICovXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0X25hbWVzcGFjZS5oXFx1MDAzZSAvKiBzdHJ1Y3QgbmV0ICovXFxuIFxcbiAjZGVmaW5lIENPTkZJR0ZTX0lURU1fTkFNRV9MRU5cXHQyMFxcbiBcXG5AQCAtMjI2LDggKzIyNywxMyBAQCBzdHJ1Y3QgY29uZmlnZnNfZ3JvdXBfb3BlcmF0aW9ucyB7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtIHtcXG4rXFx0c3RydWN0IGxpc3RfaGVhZFxcdHN1X2xpbms7XFxuIFxcdHN0cnVjdCBjb25maWdfZ3JvdXBcXHRzdV9ncm91cDtcXG4gXFx0c3RydWN0IG11dGV4XFx0XFx0c3VfbXV0ZXg7XFxuK1xcdGludCAoKmZpbGxfc3Vic3lzdGVtKShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXQgKm5ldF9ucyk7XFxuK1xcdHZvaWQgKCpjbGVhcl9zdWJzeXN0ZW0pKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cyxcXG4rXFx0XFx0XFx0XFx0c3RydWN0IG5ldCAqbmV0X25zKTtcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqdG9fY29uZmlnZnNfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKVxcbkBAIC0yNTIsNiArMjU4LDggQEAgY29uZmlnZnNfcmVnaXN0ZXJfZGVmYXVsdF9ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpwYXJlbnRfZ3JvdXAsXFxuIFxcdFxcdFxcdFxcdGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICppdGVtX3R5cGUpO1xcbiB2b2lkIGNvbmZpZ2ZzX3VucmVnaXN0ZXJfZGVmYXVsdF9ncm91cChzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCk7XFxuIFxcbitzdHJ1Y3QgbmV0ICpjb25maWdmc19uc19mcm9tX2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKTtcXG4rXFxuIC8qIFRoZXNlIGZ1bmN0aW9ucyBjYW4gc2xlZXAgYW5kIGNhbiBhbGxvYyB3aXRoIEdGUF9LRVJORUwgKi9cXG4gLyogV0FSTklORzogVGhlc2UgY2Fubm90IGJlIGNhbGxlZCB1bmRlcm5lYXRoIGNvbmZpZ2ZzIGNhbGxiYWNrcyEhICovXFxuIGludCBjb25maWdmc19kZXBlbmRfaXRlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMsXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW91bnQuaCBiL2luY2x1ZGUvbGludXgvbW91bnQuaFxcbmluZGV4IGFjZmU3ZWY4NmExYjNmLi43ZTdlN2Q2NmMzMDI0YiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21vdW50LmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L21vdW50LmhcXG5AQCAtNzUsNiArNzUsNyBAQCBleHRlcm4gdm9pZCBtbnRfZHJvcF93cml0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKTtcXG4gZXh0ZXJuIHZvaWQgbW50cHV0KHN0cnVjdCB2ZnNtb3VudCAqbW50KTtcXG4gZXh0ZXJuIHN0cnVjdCB2ZnNtb3VudCAqbW50Z2V0KHN0cnVjdCB2ZnNtb3VudCAqbW50KTtcXG4gZXh0ZXJuIHZvaWQgbW50X21ha2Vfc2hvcnR0ZXJtKHN0cnVjdCB2ZnNtb3VudCAqbW50KTtcXG4rZXh0ZXJuIHN0cnVjdCB2ZnNtb3VudCAqbW50X2Nsb25lX2RpcmVjdChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTtcXG4gZXh0ZXJuIHN0cnVjdCB2ZnNtb3VudCAqbW50X2Nsb25lX2ludGVybmFsKGNvbnN0IHN0cnVjdCBwYXRoICpwYXRoKTtcXG4gZXh0ZXJuIGJvb2wgX19tbnRfaXNfcmVhZG9ubHkoY29uc3Qgc3RydWN0IHZmc21vdW50ICptbnQpO1xcbiBleHRlcm4gYm9vbCBtbnRfbWF5X3N1aWQoc3RydWN0IHZmc21vdW50ICptbnQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxMDoxMDoxNS4zNDE0MDMxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDkzNTAyNDkzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT05GSUdGU19GU1wiLFxuICAgIFwiTlZNRV9UQVJHRVRcIixcbiAgICBcIk5WTUVfVEFSR0VUX0xPT1BcIixcbiAgICBcIk5WTUVfVEFSR0VUX1RDUFwiLFxuICAgIFwiTlZNRV9UQVJHRVRfUkRNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbVwiLFxuICAgIFwiY29uZmlnZnNfbGlua19zdWJzeXN0ZW1zXCIsXG4gICAgXCJjb25maWdmc191bmxpbmtfc3Vic3lzdGVtc1wiLFxuICAgIFwiY29uZmlnZnNfZ2V0X3N1cGVyX2luZm9cIixcbiAgICBcImNvbmZpZ2ZzX2ZpbGxfc3VwZXJcIixcbiAgICBcIm52bWV0X2NvbmZpZ2ZzX2ZpbGxfc3Vic3lzdGVtXCIsXG4gICAgXCJudm1ldF9hZGRfZGlzY19zdWJzeXNcIixcbiAgICBcIm52bWV0X3BvcnRzX21ha2VcIixcbiAgICBcIm52bWV0X3N1YnN5c19tYWtlXCIsXG4gICAgXCJudm1ldF9hZGRfcG9ydF9saXN0XCIsXG4gICAgXCJudm1ldF9kZWxfcG9ydF9saXN0XCIsXG4gICAgXCJudm1ldF9yb290X2Rpc2NvdmVyeV9ucW5fc3RvcmVcIixcbiAgICBcIm52bWV0X2V4ZWN1dGVfZGlzY19nZXRfbG9nX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldHdvcmsgbmFtZXNwYWNlIHN1cHBvcnQgZm9yIGNvbmZpZ2ZzIGFuZCB0aGUgTlZNZS1vRiB0YXJnZXQuIEl0IG1vZGlmaWVzIGNvcmUgY29uZmlnZnMgbG9naWMgdG8gc3VwcG9ydCBtdWx0aXBsZSBzdXBlcmJsb2NrcyBwZXIgbmV0d29yayBuYW1lc3BhY2UgYW5kIHVwZGF0ZXMgdGhlIE5WTWUgdGFyZ2V0IHRvIHVzZSBwZXItbmFtZXNwYWNlIGRpc2NvdmVyeSBzdWJzeXN0ZW1zIGFuZCBwb3J0cy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMDE1NjkxZmJhMzdjYzJiODRiMmRiZjI0YmQ3NjkyYjU1ZjRhNjJjNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgSnVuIDIzIDEwOjEwOjEyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jIGIvZHJpdmVycy9udm1lL3RhcmdldC9jb25maWdmcy5jXG5pbmRleCBiODhmODk3ZjA2ZTI1ZS4uNzYzNmFjMzc3M2I0MDAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L2NvbmZpZ2ZzLmNcbisrKyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvY29uZmlnZnMuY1xuQEAgLTI1LDggKzI1LDcgQEBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgbnZtZXRfaG9zdF90eXBlO1xuIHN0YXRpYyBjb25zdCBzdHJ1Y3QgY29uZmlnX2l0ZW1fdHlwZSBudm1ldF9zdWJzeXNfdHlwZTtcbiBcbi1zdGF0aWMgTElTVF9IRUFEKG52bWV0X3BvcnRzX2xpc3QpO1xuLXN0cnVjdCBsaXN0X2hlYWQgKm52bWV0X3BvcnRzID0gXHUwMDI2bnZtZXRfcG9ydHNfbGlzdDtcbitzdGF0aWMgREVGSU5FX1hBUlJBWShudm1ldF9wb3J0c194YSk7XG4gXG4gc3RydWN0IG52bWV0X3R5cGVfbmFtZV9tYXAge1xuIFx0dThcdFx0dHlwZTtcbkBAIC01MSw2ICs1MCw3MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG52bWV0X3R5cGVfbmFtZV9tYXAgbnZtZXRfYWRkcl9mYW1pbHlbXSA9IHtcbiBcdHsgTlZNRl9BRERSX0ZBTUlMWV9MT09QLFx0XCJsb29wXCIgfSxcbiB9O1xuIFxuK3U2NCBudm1ldF9nZXRfbnNfaWQoc3RydWN0IG5ldCAqbmV0X25zKVxuK3tcbitcdHN0cnVjdCBuc19jb21tb24gKm5zO1xuK1xuK1x0aWYgKCFuZXRfbnMpXG4rXHRcdHJldHVybiAwO1xuK1x0bnMgPSB0b19uc19jb21tb24obmV0X25zKTtcbitcdHJldHVybiBuZXRfbnMgPT0gXHUwMDI2aW5pdF9uZXQgPyAwIDogbnMtXHUwMDNlbnNfaWQ7XG4rfVxuK1xuK3N0cnVjdCBsaXN0X2hlYWQgKm52bWV0X2dldF9wb3J0X2xpc3Qoc3RydWN0IG5ldCAqbmV0X25zKVxuK3tcbitcdHN0cnVjdCBsaXN0X2hlYWQgKnBvcnRfbGlzdDtcbitcdHU2NCBuc19pZCA9IG52bWV0X2dldF9uc19pZChuZXRfbnMpO1xuK1xuK1x0cG9ydF9saXN0ID0geGFfbG9hZChcdTAwMjZudm1ldF9wb3J0c194YSwgbnNfaWQpO1xuK1x0cmV0dXJuIHBvcnRfbGlzdDtcbit9XG4rXG4rc3RhdGljIGludCBudm1ldF9hZGRfcG9ydF9saXN0KHN0cnVjdCBudm1ldF9wb3J0ICpwKVxuK3tcbitcdHU2NCBuc19pZCA9IG52bWV0X2dldF9uc19pZChwLVx1MDAzZW5ldF9ucyk7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3J0X2xpc3Q7XG4rXHRpbnQgZXJyID0gMDtcbitcbitcdHhhX2xvY2soXHUwMDI2bnZtZXRfcG9ydHNfeGEpO1xuK1x0cG9ydF9saXN0ID0geGFfbG9hZChcdTAwMjZudm1ldF9wb3J0c194YSwgbnNfaWQpO1xuK1x0aWYgKCFwb3J0X2xpc3QpIHtcbitcdFx0cG9ydF9saXN0ID0ga3phbGxvY19vYmooKnBvcnRfbGlzdCk7XG4rXHRcdGlmICghcG9ydF9saXN0KSB7XG4rXHRcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdH1cbitcdFx0SU5JVF9MSVNUX0hFQUQocG9ydF9saXN0KTtcbitcdFx0ZXJyID0gX194YV9pbnNlcnQoXHUwMDI2bnZtZXRfcG9ydHNfeGEsIG5zX2lkLFxuK1x0XHRcdFx0ICBwb3J0X2xpc3QsIEdGUF9LRVJORUwpO1xuK1x0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4rXHRcdFx0a2ZyZWUocG9ydF9saXN0KTtcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdH1cbitcdH1cbitcdGxpc3RfYWRkKFx1MDAyNnAtXHUwMDNlZ2xvYmFsX2VudHJ5LCBwb3J0X2xpc3QpO1xuK291dF91bmxvY2s6XG4rXHR4YV91bmxvY2soXHUwMDI2bnZtZXRfcG9ydHNfeGEpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rc3RhdGljIHZvaWQgbnZtZXRfZGVsX3BvcnRfbGlzdChzdHJ1Y3QgbnZtZXRfcG9ydCAqcClcbit7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkICpwb3J0X2xpc3Q7XG4rXHR1NjQgbnNfaWQgPSBudm1ldF9nZXRfbnNfaWQocC1cdTAwM2VuZXRfbnMpO1xuK1xuK1x0eGFfbG9jayhcdTAwMjZudm1ldF9wb3J0c194YSk7XG4rXHRwb3J0X2xpc3QgPSB4YV9sb2FkKFx1MDAyNm52bWV0X3BvcnRzX3hhLCBuc19pZCk7XG4rXHRpZiAoIVdBUk5fT04oIXBvcnRfbGlzdCkpIHtcbitcdFx0bGlzdF9kZWxfaW5pdChcdTAwMjZwLVx1MDAzZWdsb2JhbF9lbnRyeSk7XG4rXHRcdGlmIChsaXN0X2VtcHR5KHBvcnRfbGlzdCkpIHtcbitcdFx0XHRfX3hhX2VyYXNlKFx1MDAyNm52bWV0X3BvcnRzX3hhLCBuc19pZCk7XG4rXHRcdFx0a2ZyZWUocG9ydF9saXN0KTtcbitcdFx0fVxuK1x0fVxuK1x0eGFfdW5sb2NrKFx1MDAyNm52bWV0X3BvcnRzX3hhKTtcbit9XG4rXG4gc3RhdGljIGJvb2wgbnZtZXRfaXNfcG9ydF9lbmFibGVkKHN0cnVjdCBudm1ldF9wb3J0ICpwLCBjb25zdCBjaGFyICpjYWxsZXIpXG4ge1xuIFx0aWYgKHAtXHUwMDNlZW5hYmxlZClcbkBAIC0xNzE3LDYgKzE3ODAsNyBAQCBzdGF0aWMgdm9pZCBudm1ldF9zdWJzeXNfcmVsZWFzZShzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG4ge1xuIFx0c3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzID0gdG9fc3Vic3lzKGl0ZW0pO1xuIFxuK1x0Y29uZmlnZnNfcmVtb3ZlX2RlZmF1bHRfZ3JvdXBzKFx1MDAyNnN1YnN5cy1cdTAwM2Vncm91cCk7XG4gXHRudm1ldF9zdWJzeXNfZGVsX2N0cmxzKHN1YnN5cyk7XG4gXHRudm1ldF9zdWJzeXNfcHV0KHN1YnN5cyk7XG4gfVxuQEAgLTE3MzQsMTkgKzE3OTgsMjMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG52bWV0X3N1YnN5c190eXBlID0ge1xuIHN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwICpudm1ldF9zdWJzeXNfbWFrZShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbiBcdFx0Y29uc3QgY2hhciAqbmFtZSlcbiB7XG4tXHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXM7XG4rXHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMsICpkaXNjX3N1YnN5cztcbitcdHN0cnVjdCBuZXQgKm5ldF9ucyA9IGNvbmZpZ2ZzX25zX2Zyb21fZ3JvdXAoZ3JvdXApO1xuIFxuIFx0aWYgKHN5c2ZzX3N0cmVxKG5hbWUsIE5WTUVfRElTQ19TVUJTWVNfTkFNRSkpIHtcbiBcdFx0cHJfZXJyKFwiY2FuJ3QgY3JlYXRlIGRpc2NvdmVyeSBzdWJzeXN0ZW0gdGhyb3VnaCBjb25maWdmc1xcblwiKTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXHR9XG4gXG4tXHRpZiAoc3lzZnNfc3RyZXEobmFtZSwgbnZtZXRfZGlzY19zdWJzeXMtXHUwMDNlc3Vic3lzbnFuKSkge1xuK1x0ZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMobmV0X25zKTtcbitcdGlmICghZGlzY19zdWJzeXMpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuK1x0aWYgKHN5c2ZzX3N0cmVxKG5hbWUsIGRpc2Nfc3Vic3lzLVx1MDAzZXN1YnN5c25xbikpIHtcbiBcdFx0cHJfZXJyKFwiY2FuJ3QgY3JlYXRlIHN1YnN5c3RlbSB1c2luZyB1bmlxdWUgZGlzY292ZXJ5IE5RTlxcblwiKTtcbiBcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4gXHR9XG4gXG4tXHRzdWJzeXMgPSBudm1ldF9zdWJzeXNfYWxsb2MobmFtZSwgTlZNRV9OUU5fTlZNRSk7XG4rXHRzdWJzeXMgPSBudm1ldF9zdWJzeXNfYWxsb2MobmFtZSwgTlZNRV9OUU5fTlZNRSwgbmV0X25zKTtcbiBcdGlmIChJU19FUlIoc3Vic3lzKSlcbiBcdFx0cmV0dXJuIEVSUl9DQVNUKHN1YnN5cyk7XG4gXG5AQCAtMjAwNCw4ICsyMDcyLDkgQEAgc3RhdGljIHZvaWQgbnZtZXRfcG9ydF9yZWxlYXNlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSlcbiBcbiBcdC8qIExldCBpbmZsaWdodCBjb250cm9sbGVycyB0ZWFyZG93biBjb21wbGV0ZSAqL1xuIFx0Zmx1c2hfd29ya3F1ZXVlKG52bWV0X3dxKTtcbi1cdGxpc3RfZGVsKFx1MDAyNnBvcnQtXHUwMDNlZ2xvYmFsX2VudHJ5KTtcbitcdG52bWV0X2RlbF9wb3J0X2xpc3QocG9ydCk7XG4gXG4rXHRjb25maWdmc19yZW1vdmVfZGVmYXVsdF9ncm91cHMoXHUwMDI2cG9ydC1cdTAwM2Vncm91cCk7XG4gXHRrZXlfcHV0KHBvcnQtXHUwMDNla2V5cmluZyk7XG4gXHRrZnJlZShwb3J0LVx1MDAzZWFuYV9zdGF0ZSk7XG4gXHRrZnJlZShwb3J0KTtcbkBAIC0yMDU3LDYgKzIxMjYsMTAgQEAgc3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgKm52bWV0X3BvcnRzX21ha2Uoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXAsXG4gXHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuIFx0fVxuIFxuK1x0cG9ydC1cdTAwM2VuZXRfbnMgPSBjb25maWdmc19uc19mcm9tX2dyb3VwKGdyb3VwKTtcbitcdGlmICghcG9ydC1cdTAwM2VuZXRfbnMpXG4rXHRcdHBvcnQtXHUwMDNlbmV0X25zID0gZ2V0X25ldChcdTAwMjZpbml0X25ldCk7XG4rXG4gXHRpZiAoSVNfRU5BQkxFRChDT05GSUdfTlZNRV9UQVJHRVRfVENQX1RMUykgXHUwMDI2XHUwMDI2IG52bWVfa2V5cmluZ19pZCgpKSB7XG4gXHRcdHBvcnQtXHUwMDNla2V5cmluZyA9IGtleV9sb29rdXAobnZtZV9rZXlyaW5nX2lkKCkpO1xuIFx0XHRpZiAoSVNfRVJSKHBvcnQtXHUwMDNla2V5cmluZykpIHtcbkBAIC0yMDcyLDcgKzIxNDUsNyBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCAqbnZtZXRfcG9ydHNfbWFrZShzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCxcbiBcdFx0XHRwb3J0LVx1MDAzZWFuYV9zdGF0ZVtpXSA9IE5WTUVfQU5BX0lOQUNDRVNTSUJMRTtcbiBcdH1cbiBcbi1cdGxpc3RfYWRkKFx1MDAyNnBvcnQtXHUwMDNlZ2xvYmFsX2VudHJ5LCBcdTAwMjZudm1ldF9wb3J0c19saXN0KTtcbitcdG52bWV0X2FkZF9wb3J0X2xpc3QocG9ydCk7XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZwb3J0LVx1MDAzZWVudHJ5KTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnBvcnQtXHUwMDNlc3Vic3lzdGVtcyk7XG5AQCAtMjExOSw5ICsyMTkyLDYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG52bWV0X3BvcnRzX3R5cGUgPSB7XG4gXHQuY3Rfb3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwIG52bWV0X3N1YnN5c3RlbXNfZ3JvdXA7XG4tc3RhdGljIHN0cnVjdCBjb25maWdfZ3JvdXAgbnZtZXRfcG9ydHNfZ3JvdXA7XG4tXG4gI2lmZGVmIENPTkZJR19OVk1FX1RBUkdFVF9BVVRIXG4gc3RhdGljIHNzaXplX3QgbnZtZXRfaG9zdF9kaGNoYXBfa2V5X3Nob3coc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuIFx0XHRjaGFyICpwYWdlKVxuQEAgLTIzMDMsMTkgKzIzNzMsMjYgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlIG52bWV0X2hvc3RzX3R5cGUgPSB7XG4gXHQuY3Rfb3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiB9O1xuIFxuLXN0YXRpYyBzdHJ1Y3QgY29uZmlnX2dyb3VwIG52bWV0X2hvc3RzX2dyb3VwO1xuLVxuIHN0YXRpYyBzc2l6ZV90IG52bWV0X3Jvb3RfZGlzY292ZXJ5X25xbl9zaG93KHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbiBcdFx0XHRcdFx0ICAgICBjaGFyICpwYWdlKVxuIHtcbi1cdHJldHVybiBzbnByaW50ZihwYWdlLCBQQUdFX1NJWkUsIFwiJXNcXG5cIiwgbnZtZXRfZGlzY19zdWJzeXMtXHUwMDNlc3Vic3lzbnFuKTtcbitcdHN0cnVjdCBuZXQgKm5ldF9ucyA9IGNvbmZpZ2ZzX25zX2Zyb21fZ3JvdXAodG9fY29uZmlnX2dyb3VwKGl0ZW0pKTtcbitcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzID0gbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzKG5ldF9ucyk7XG4rXG4rXHRpZiAoIWRpc2Nfc3Vic3lzKVxuK1x0XHRyZXR1cm4gLUVOT0VOVDtcbitcdHJldHVybiBzbnByaW50ZihwYWdlLCBQQUdFX1NJWkUsIFwiJXNcXG5cIiwgZGlzY19zdWJzeXMtXHUwMDNlc3Vic3lzbnFuKTtcbiB9XG4gXG4gc3RhdGljIHNzaXplX3QgbnZtZXRfcm9vdF9kaXNjb3ZlcnlfbnFuX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbiBcdFx0Y29uc3QgY2hhciAqcGFnZSwgc2l6ZV90IGNvdW50KVxuIHtcbitcdHN0cnVjdCBjb25maWdfaXRlbSAqc3Vic3lzdGVtc19pdGVtO1xuK1x0c3RydWN0IGNvbmZpZ19ncm91cCAqc3Vic3lzdGVtc19ncm91cDtcbitcdHN0cnVjdCBuZXQgKm5ldF9ucyA9IGNvbmZpZ2ZzX25zX2Zyb21fZ3JvdXAodG9fY29uZmlnX2dyb3VwKGl0ZW0pKTtcbitcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzO1xuIFx0c3RydWN0IGxpc3RfaGVhZCAqZW50cnk7XG4tXHRjaGFyICpvbGRfbnFuLCAqbmV3X25xbjtcbitcdGNoYXIgKm9sZF9ucW4gPSBOVUxMLCAqbmV3X25xbjtcbiBcdHNpemVfdCBsZW47XG4gXG4gXHRsZW4gPSBzdHJjc3BuKHBhZ2UsIFwiXFxuXCIpO1xuQEAgLTIzMjcsNyArMjQwNCwxNCBAQCBzdGF0aWMgc3NpemVfdCBudm1ldF9yb290X2Rpc2NvdmVyeV9ucW5fc3RvcmUoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtLFxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGRvd25fd3JpdGUoXHUwMDI2bnZtZXRfY29uZmlnX3NlbSk7XG4tXHRsaXN0X2Zvcl9lYWNoKGVudHJ5LCBcdTAwMjZudm1ldF9zdWJzeXN0ZW1zX2dyb3VwLmNnX2NoaWxkcmVuKSB7XG4rXHRzdWJzeXN0ZW1zX2l0ZW0gPSBjb25maWdfZ3JvdXBfZmluZF9pdGVtKHRvX2NvbmZpZ19ncm91cChpdGVtKSwgXCJzdWJzeXN0ZW1zXCIpO1xuK1x0aWYgKFdBUk5fT04oIXN1YnN5c3RlbXNfaXRlbSkpIHtcbitcdFx0a2ZyZWUobmV3X25xbik7XG4rXHRcdHVwX3dyaXRlKFx1MDAyNm52bWV0X2NvbmZpZ19zZW0pO1xuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcdHN1YnN5c3RlbXNfZ3JvdXAgPSB0b19jb25maWdfZ3JvdXAoc3Vic3lzdGVtc19pdGVtKTtcbitcdGxpc3RfZm9yX2VhY2goZW50cnksIFx1MDAyNnN1YnN5c3RlbXNfZ3JvdXAtXHUwMDNlY2dfY2hpbGRyZW4pIHtcbiBcdFx0c3RydWN0IGNvbmZpZ19pdGVtICppdGVtID1cbiBcdFx0XHRjb250YWluZXJfb2YoZW50cnksIHN0cnVjdCBjb25maWdfaXRlbSwgY2lfZW50cnkpO1xuIFxuQEAgLTIzMzgsMTIgKzI0MjIsMTUgQEAgc3RhdGljIHNzaXplX3QgbnZtZXRfcm9vdF9kaXNjb3ZlcnlfbnFuX3N0b3JlKHN0cnVjdCBjb25maWdfaXRlbSAqaXRlbSxcbiBcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcdFx0fVxuIFx0fVxuLVx0b2xkX25xbiA9IG52bWV0X2Rpc2Nfc3Vic3lzLVx1MDAzZXN1YnN5c25xbjtcbi1cdG52bWV0X2Rpc2Nfc3Vic3lzLVx1MDAzZXN1YnN5c25xbiA9IG5ld19ucW47XG4rXHRkaXNjX3N1YnN5cyA9IG52bWV0X2dldF9kaXNjX3N1YnN5cyhuZXRfbnMpO1xuK1x0aWYgKGRpc2Nfc3Vic3lzKSB7XG4rXHRcdG9sZF9ucW4gPSBkaXNjX3N1YnN5cy1cdTAwM2VzdWJzeXNucW47XG4rXHRcdGRpc2Nfc3Vic3lzLVx1MDAzZXN1YnN5c25xbiA9IG5ld19ucW47XG4rXHR9XG4gXHR1cF93cml0ZShcdTAwMjZudm1ldF9jb25maWdfc2VtKTtcbiBcbiBcdGtmcmVlKG9sZF9ucW4pO1xuLVx0cmV0dXJuIGxlbjtcbitcdHJldHVybiBkaXNjX3N1YnN5cyA/IGxlbiA6IC1FTk9FTlQ7XG4gfVxuIFxuIENPTkZJR0ZTX0FUVFIobnZtZXRfcm9vdF8sIGRpc2NvdmVyeV9ucW4pO1xuQEAgLTIzNTgsNiArMjQ0NSw2OSBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGNvbmZpZ19pdGVtX3R5cGUgbnZtZXRfcm9vdF90eXBlID0ge1xuIFx0LmN0X293bmVyXHRcdD0gVEhJU19NT0RVTEUsXG4gfTtcbiBcbitzdGF0aWMgaW50IG52bWV0X2NvbmZpZ2ZzX2ZpbGxfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cyxcbitcdFx0XHRcdFx0IHN0cnVjdCBuZXQgKm5ldF9ucylcbit7XG4rXHRzdHJ1Y3QgY29uZmlnX2dyb3VwICpzdWJzeXN0ZW1zX2dyb3VwLCAqcG9ydHNfZ3JvdXAsICpob3N0c19ncm91cDtcbitcdGludCBlcnI7XG4rXG4rXHRlcnIgPSBudm1ldF9hZGRfZGlzY19zdWJzeXMobmV0X25zKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdHJldHVybiBlcnI7XG4rXG4rXHRzdWJzeXN0ZW1zX2dyb3VwID0ga3phbGxvY19vYmooKnN1YnN5c3RlbXNfZ3JvdXApO1xuK1x0aWYgKCFzdWJzeXN0ZW1zX2dyb3VwKSB7XG4rXHRcdG52bWV0X2RlbF9kaXNjX3N1YnN5cyhuZXRfbnMpO1xuK1x0XHRyZXR1cm4gLUVOT01FTTtcbitcdH1cbitcdGNvbmZpZ19ncm91cF9pbml0X3R5cGVfbmFtZShzdWJzeXN0ZW1zX2dyb3VwLFxuK1x0XHRcdFwic3Vic3lzdGVtc1wiLCBcdTAwMjZudm1ldF9zdWJzeXN0ZW1zX3R5cGUpO1xuK1x0Y29uZmlnZnNfYWRkX2RlZmF1bHRfZ3JvdXAoc3Vic3lzdGVtc19ncm91cCxcbitcdFx0XHRcdTAwMjZzdWJzeXMtXHUwMDNlc3VfZ3JvdXApO1xuK1xuK1x0cG9ydHNfZ3JvdXAgPSBremFsbG9jX29iaigqcG9ydHNfZ3JvdXApO1xuK1x0aWYgKCFwb3J0c19ncm91cCkge1xuK1x0XHRrZnJlZShzdWJzeXN0ZW1zX2dyb3VwKTtcbitcdFx0bnZtZXRfZGVsX2Rpc2Nfc3Vic3lzKG5ldF9ucyk7XG4rXHRcdHJldHVybiAtRU5PTUVNO1xuK1x0fVxuK1x0Y29uZmlnX2dyb3VwX2luaXRfdHlwZV9uYW1lKHBvcnRzX2dyb3VwLFxuK1x0XHRcdFwicG9ydHNcIiwgXHUwMDI2bnZtZXRfcG9ydHNfdHlwZSk7XG4rXHRjb25maWdmc19hZGRfZGVmYXVsdF9ncm91cChwb3J0c19ncm91cCxcbitcdFx0XHRcdTAwMjZzdWJzeXMtXHUwMDNlc3VfZ3JvdXApO1xuK1xuK1x0aG9zdHNfZ3JvdXAgPSBremFsbG9jX29iaigqaG9zdHNfZ3JvdXApO1xuK1x0aWYgKCFob3N0c19ncm91cCkge1xuK1x0XHRrZnJlZShwb3J0c19ncm91cCk7XG4rXHRcdGtmcmVlKHN1YnN5c3RlbXNfZ3JvdXApO1xuK1x0XHRudm1ldF9kZWxfZGlzY19zdWJzeXMobmV0X25zKTtcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXHR9XG4rXHRjb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoaG9zdHNfZ3JvdXAsXG4rXHRcdFx0XCJob3N0c1wiLCBcdTAwMjZudm1ldF9ob3N0c190eXBlKTtcbitcdGNvbmZpZ2ZzX2FkZF9kZWZhdWx0X2dyb3VwKGhvc3RzX2dyb3VwLFxuK1x0XHRcdFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9ncm91cCk7XG4rXHRzdHJzY3B5KHN1YnN5cy1cdTAwM2VzdV9ncm91cC5jZ19pdGVtLmNpX25hbWVidWYsIFwibnZtZXRcIixcbitcdFx0c2l6ZW9mKHN1YnN5cy1cdTAwM2VzdV9ncm91cC5jZ19pdGVtLmNpX25hbWVidWYpKTtcbitcdHN1YnN5cy1cdTAwM2VzdV9ncm91cC5jZ19pdGVtLmNpX3R5cGUgPSBcdTAwMjZudm1ldF9yb290X3R5cGU7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgbnZtZXRfY29uZmlnZnNfY2xlYXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cyxcbitcdFx0XHRcdFx0ICAgc3RydWN0IG5ldCAqbmV0X25zKVxuK3tcbitcdHN0cnVjdCBjb25maWdfZ3JvdXAgKmcsICpuO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGcsIG4sIFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9ncm91cC5kZWZhdWx0X2dyb3VwcyxcbitcdFx0XHRcdCBncm91cF9lbnRyeSkge1xuK1x0XHRsaXN0X2RlbChcdTAwMjZnLVx1MDAzZWdyb3VwX2VudHJ5KTtcbitcdFx0Y29uZmlnX2l0ZW1fcHV0KFx1MDAyNmctXHUwMDNlY2dfaXRlbSk7XG4rXHRcdGtmcmVlKGcpO1xuK1x0fVxuK1x0bnZtZXRfZGVsX2Rpc2Nfc3Vic3lzKG5ldF9ucyk7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtIG52bWV0X2NvbmZpZ2ZzX3N1YnN5c3RlbSA9IHtcbiBcdC5zdV9ncm91cCA9IHtcbiBcdFx0LmNnX2l0ZW0gPSB7XG5AQCAtMjM2NSwzMCArMjUxNSwxNCBAQCBzdGF0aWMgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSBudm1ldF9jb25maWdmc19zdWJzeXN0ZW0gPSB7XG4gXHRcdFx0LmNpX3R5cGVcdD0gXHUwMDI2bnZtZXRfcm9vdF90eXBlLFxuIFx0XHR9LFxuIFx0fSxcbitcdC5maWxsX3N1YnN5c3RlbSA9IG52bWV0X2NvbmZpZ2ZzX2ZpbGxfc3Vic3lzdGVtLFxuK1x0LmNsZWFyX3N1YnN5c3RlbSA9IG52bWV0X2NvbmZpZ2ZzX2NsZWFyX3N1YnN5c3RlbSxcbiB9O1xuIFxuIGludCBfX2luaXQgbnZtZXRfaW5pdF9jb25maWdmcyh2b2lkKVxuIHtcbiBcdGludCByZXQ7XG4gXG4tXHRjb25maWdfZ3JvdXBfaW5pdChcdTAwMjZudm1ldF9jb25maWdmc19zdWJzeXN0ZW0uc3VfZ3JvdXApO1xuLVx0bXV0ZXhfaW5pdChcdTAwMjZudm1ldF9jb25maWdmc19zdWJzeXN0ZW0uc3VfbXV0ZXgpO1xuLVxuLVx0Y29uZmlnX2dyb3VwX2luaXRfdHlwZV9uYW1lKFx1MDAyNm52bWV0X3N1YnN5c3RlbXNfZ3JvdXAsXG4tXHRcdFx0XCJzdWJzeXN0ZW1zXCIsIFx1MDAyNm52bWV0X3N1YnN5c3RlbXNfdHlwZSk7XG4tXHRjb25maWdmc19hZGRfZGVmYXVsdF9ncm91cChcdTAwMjZudm1ldF9zdWJzeXN0ZW1zX2dyb3VwLFxuLVx0XHRcdFx1MDAyNm52bWV0X2NvbmZpZ2ZzX3N1YnN5c3RlbS5zdV9ncm91cCk7XG4tXG4tXHRjb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoXHUwMDI2bnZtZXRfcG9ydHNfZ3JvdXAsXG4tXHRcdFx0XCJwb3J0c1wiLCBcdTAwMjZudm1ldF9wb3J0c190eXBlKTtcbi1cdGNvbmZpZ2ZzX2FkZF9kZWZhdWx0X2dyb3VwKFx1MDAyNm52bWV0X3BvcnRzX2dyb3VwLFxuLVx0XHRcdFx1MDAyNm52bWV0X2NvbmZpZ2ZzX3N1YnN5c3RlbS5zdV9ncm91cCk7XG4tXG4tXHRjb25maWdfZ3JvdXBfaW5pdF90eXBlX25hbWUoXHUwMDI2bnZtZXRfaG9zdHNfZ3JvdXAsXG4tXHRcdFx0XCJob3N0c1wiLCBcdTAwMjZudm1ldF9ob3N0c190eXBlKTtcbi1cdGNvbmZpZ2ZzX2FkZF9kZWZhdWx0X2dyb3VwKFx1MDAyNm52bWV0X2hvc3RzX2dyb3VwLFxuLVx0XHRcdFx1MDAyNm52bWV0X2NvbmZpZ2ZzX3N1YnN5c3RlbS5zdV9ncm91cCk7XG4tXG4gXHRyZXQgPSBjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0oXHUwMDI2bnZtZXRfY29uZmlnZnNfc3Vic3lzdGVtKTtcbiBcdGlmIChyZXQpIHtcbiBcdFx0cHJfZXJyKFwiY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtOiAlZFxcblwiLCByZXQpO1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jIGIvZHJpdmVycy9udm1lL3RhcmdldC9jb3JlLmNcbmluZGV4IDYyZGQ1OWI5YWE0ZjFjLi4zOTk4OWI4YmFlOTJmOCAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvY29yZS5jXG4rKysgYi9kcml2ZXJzL252bWUvdGFyZ2V0L2NvcmUuY1xuQEAgLTE3OTgsMjIgKzE3OTgsMjcgQEAgc3RhdGljIHN0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X2ZpbmRfZ2V0X3N1YnN5cyhzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCxcbiBcdFx0Y29uc3QgY2hhciAqc3Vic3lzbnFuKVxuIHtcbiBcdHN0cnVjdCBudm1ldF9zdWJzeXNfbGluayAqcDtcbitcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzO1xuIFxuIFx0aWYgKCFwb3J0KVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcbitcdGRpc2Nfc3Vic3lzID0gbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzKHBvcnQtXHUwMDNlbmV0X25zKTtcbitcdGlmICghZGlzY19zdWJzeXMpXG4rXHRcdHJldHVybiBOVUxMO1xuK1xuIFx0aWYgKCFzdHJjbXAoTlZNRV9ESVNDX1NVQlNZU19OQU1FLCBzdWJzeXNucW4pKSB7XG4tXHRcdGlmICgha3JlZl9nZXRfdW5sZXNzX3plcm8oXHUwMDI2bnZtZXRfZGlzY19zdWJzeXMtXHUwMDNlcmVmKSlcbitcdFx0aWYgKCFrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZkaXNjX3N1YnN5cy1cdTAwM2VyZWYpKVxuIFx0XHRcdHJldHVybiBOVUxMO1xuLVx0XHRyZXR1cm4gbnZtZXRfZGlzY19zdWJzeXM7XG4rXHRcdHJldHVybiBkaXNjX3N1YnN5cztcbiBcdH1cbiBcbiBcdGRvd25fcmVhZChcdTAwMjZudm1ldF9jb25maWdfc2VtKTtcbi1cdGlmICghc3RybmNtcChudm1ldF9kaXNjX3N1YnN5cy1cdTAwM2VzdWJzeXNucW4sIHN1YnN5c25xbixcbitcdGlmICghc3RybmNtcChkaXNjX3N1YnN5cy1cdTAwM2VzdWJzeXNucW4sIHN1YnN5c25xbixcbiBcdFx0XHRcdE5WTUZfTlFOX1NJWkUpKSB7XG4tXHRcdGlmIChrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZudm1ldF9kaXNjX3N1YnN5cy1cdTAwM2VyZWYpKSB7XG4rXHRcdGlmIChrcmVmX2dldF91bmxlc3NfemVybyhcdTAwMjZkaXNjX3N1YnN5cy1cdTAwM2VyZWYpKSB7XG4gXHRcdFx0dXBfcmVhZChcdTAwMjZudm1ldF9jb25maWdfc2VtKTtcbi1cdFx0XHRyZXR1cm4gbnZtZXRfZGlzY19zdWJzeXM7XG4rXHRcdFx0cmV0dXJuIGRpc2Nfc3Vic3lzO1xuIFx0XHR9XG4gXHR9XG4gXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHAsIFx1MDAyNnBvcnQtXHUwMDNlc3Vic3lzdGVtcywgZW50cnkpIHtcbkBAIC0xODMwLDcgKzE4MzUsNyBAQCBzdGF0aWMgc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfZmluZF9nZXRfc3Vic3lzKHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0LFxuIH1cbiBcbiBzdHJ1Y3QgbnZtZXRfc3Vic3lzICpudm1ldF9zdWJzeXNfYWxsb2MoY29uc3QgY2hhciAqc3Vic3lzbnFuLFxuLVx0XHRlbnVtIG52bWVfc3Vic3lzX3R5cGUgdHlwZSlcbitcdFx0ZW51bSBudm1lX3N1YnN5c190eXBlIHR5cGUsIHN0cnVjdCBuZXQgKm5ldF9ucylcbiB7XG4gXHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXM7XG4gXHRjaGFyIHNlcmlhbFtOVk1FVF9TTl9NQVhfU0laRSAvIDJdO1xuQEAgLTE4ODgsMTAgKzE4OTMsMTIgQEAgc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfc3Vic3lzX2FsbG9jKGNvbnN0IGNoYXIgKnN1YnN5c25xbixcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNnN1YnN5cy1cdTAwM2VjdHJscyk7XG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZzdWJzeXMtXHUwMDNlaG9zdHMpO1xuIFxuLVx0cmV0ID0gbnZtZXRfZGVidWdmc19zdWJzeXNfc2V0dXAoc3Vic3lzKTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gZnJlZV9zdWJzeXNucW47XG4tXG4rXHQvKiBEaXNhYmxlIGRlYnVnZnMgZm9yIG5vbi1pbml0aWFsIG5hbWVzcGFjZXMgKi9cbitcdGlmIChuZXRfbnMgPT0gXHUwMDI2aW5pdF9uZXQpIHtcbitcdFx0cmV0ID0gbnZtZXRfZGVidWdmc19zdWJzeXNfc2V0dXAoc3Vic3lzKTtcbitcdFx0aWYgKHJldClcbitcdFx0XHRnb3RvIGZyZWVfc3Vic3lzbnFuO1xuK1x0fVxuIFx0cmV0dXJuIHN1YnN5cztcbiBcbiBmcmVlX3N1YnN5c25xbjpcbkBAIC0xOTc2LDE4ICsxOTgzLDEyIEBAIHN0YXRpYyBpbnQgX19pbml0IG52bWV0X2luaXQodm9pZClcbiBcdGlmIChlcnJvcilcbiBcdFx0Z290byBvdXRfZnJlZV9udm1ldF9hZW5fd29ya19xdWV1ZTtcbiBcbi1cdGVycm9yID0gbnZtZXRfaW5pdF9kaXNjb3ZlcnkoKTtcbi1cdGlmIChlcnJvcilcbi1cdFx0Z290byBvdXRfZXhpdF9kZWJ1Z2ZzO1xuLVxuIFx0ZXJyb3IgPSBudm1ldF9pbml0X2NvbmZpZ2ZzKCk7XG4gXHRpZiAoZXJyb3IpXG4tXHRcdGdvdG8gb3V0X2V4aXRfZGlzY292ZXJ5O1xuK1x0XHRnb3RvIG91dF9leGl0X2RlYnVnZnM7XG4gXG4gXHRyZXR1cm4gMDtcbiBcbi1vdXRfZXhpdF9kaXNjb3Zlcnk6XG4tXHRudm1ldF9leGl0X2Rpc2NvdmVyeSgpO1xuIG91dF9leGl0X2RlYnVnZnM6XG4gXHRudm1ldF9leGl0X2RlYnVnZnMoKTtcbiBvdXRfZnJlZV9udm1ldF9hZW5fd29ya19xdWV1ZTpcbkBAIC0yMDA2LDcgKzIwMDcsNiBAQCBzdGF0aWMgaW50IF9faW5pdCBudm1ldF9pbml0KHZvaWQpXG4gc3RhdGljIHZvaWQgX19leGl0IG52bWV0X2V4aXQodm9pZClcbiB7XG4gXHRudm1ldF9leGl0X2NvbmZpZ2ZzKCk7XG4tXHRudm1ldF9leGl0X2Rpc2NvdmVyeSgpO1xuIFx0bnZtZXRfZXhpdF9kZWJ1Z2ZzKCk7XG4gXHRpZGFfZGVzdHJveShcdTAwMjZjbnRsaWRfaWRhKTtcbiBcdGRlc3Ryb3lfd29ya3F1ZXVlKG52bWV0X2Flbl93cSk7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC9kaXNjb3ZlcnkuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvZGlzY292ZXJ5LmNcbmluZGV4IDExNDg2OWQxNmExZjNjLi5iNDk4NGZjNjViYTc4NyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvZGlzY292ZXJ5LmNcbisrKyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvZGlzY292ZXJ5LmNcbkBAIC04LDkgKzgsNDQgQEBcbiAjaW5jbHVkZSBcdTAwM2NnZW5lcmF0ZWQvdXRzcmVsZWFzZS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJudm1ldC5oXCJcbiBcbi1zdHJ1Y3QgbnZtZXRfc3Vic3lzICpudm1ldF9kaXNjX3N1YnN5cztcbitzdGF0aWMgREVGSU5FX1hBUlJBWShudm1ldF9kaXNjX3hhKTtcbiBcbi1zdGF0aWMgdTY0IG52bWV0X2dlbmN0cjtcbitzdHJ1Y3QgbnZtZXRfc3Vic3lzICpudm1ldF9nZXRfZGlzY19zdWJzeXMoc3RydWN0IG5ldCAqbmV0X25zKVxuK3tcbitcdHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cztcbitcdHU2NCBuc19pZCA9IG52bWV0X2dldF9uc19pZChuZXRfbnMpO1xuK1xuK1x0c3Vic3lzID0geGFfbG9hZChcdTAwMjZudm1ldF9kaXNjX3hhLCBuc19pZCk7XG4rXHRyZXR1cm4gc3Vic3lzO1xuK31cbitcbitpbnQgbnZtZXRfYWRkX2Rpc2Nfc3Vic3lzKHN0cnVjdCBuZXQgKm5ldF9ucylcbit7XG4rXHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpkaXNjX3N1YnN5cztcbitcdHU2NCBuc19pZCA9IG52bWV0X2dldF9uc19pZChuZXRfbnMpO1xuK1x0aW50IGVycjtcbitcbitcdGRpc2Nfc3Vic3lzID0gbnZtZXRfc3Vic3lzX2FsbG9jKE5WTUVfRElTQ19TVUJTWVNfTkFNRSxcbitcdFx0XHRcdFx0IE5WTUVfTlFOX0NVUlIsIG5ldF9ucyk7XG4rXHRpZiAoSVNfRVJSKGRpc2Nfc3Vic3lzKSlcbitcdFx0cmV0dXJuIFBUUl9FUlIoZGlzY19zdWJzeXMpO1xuK1x0ZXJyID0geGFfaW5zZXJ0KFx1MDAyNm52bWV0X2Rpc2NfeGEsIG5zX2lkLFxuK1x0XHRcdGRpc2Nfc3Vic3lzLCBHRlBfS0VSTkVMKTtcbitcdGlmIChlcnIgXHUwMDNjIDApXG4rXHRcdG52bWV0X3N1YnN5c19wdXQoZGlzY19zdWJzeXMpO1xuK1xuK1x0cmV0dXJuIGVycjtcbit9XG4rXG4rdm9pZCBudm1ldF9kZWxfZGlzY19zdWJzeXMoc3RydWN0IG5ldCAqbmV0X25zKVxuK3tcbitcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzO1xuK1x0dTY0IG5zX2lkID0gbnZtZXRfZ2V0X25zX2lkKG5ldF9ucyk7XG4rXG4rXHRkaXNjX3N1YnN5cyA9IHhhX2VyYXNlKFx1MDAyNm52bWV0X2Rpc2NfeGEsIG5zX2lkKTtcbitcdGlmIChkaXNjX3N1YnN5cylcbitcdFx0bnZtZXRfc3Vic3lzX3B1dChkaXNjX3N1YnN5cyk7XG4rfVxuIFxuIHN0YXRpYyB2b2lkIF9fbnZtZXRfZGlzY19jaGFuZ2VkKHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0LFxuIFx0XHRcdFx0IHN0cnVjdCBudm1ldF9jdHJsICpjdHJsKVxuQEAgLTI5LDE4ICs2NCwyMiBAQCB2b2lkIG52bWV0X3BvcnRfZGlzY19jaGFuZ2VkKHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0LFxuIFx0XHRcdCAgICAgc3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzKVxuIHtcbiBcdHN0cnVjdCBudm1ldF9jdHJsICpjdHJsO1xuK1x0c3RydWN0IG52bWV0X3N1YnN5cyAqZGlzY19zdWJzeXM7XG4gXG4gXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFx1MDAyNm52bWV0X2NvbmZpZ19zZW0pO1xuLVx0bnZtZXRfZ2VuY3RyKys7XG4rXHRkaXNjX3N1YnN5cyA9IG52bWV0X2dldF9kaXNjX3N1YnN5cyhwb3J0LVx1MDAzZW5ldF9ucyk7XG4rXHRpZiAoV0FSTl9PTighZGlzY19zdWJzeXMpKVxuK1x0XHRyZXR1cm47XG4rXHRkaXNjX3N1YnN5cy1cdTAwM2VnZW5jdHIrKztcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2bnZtZXRfZGlzY19zdWJzeXMtXHUwMDNlbG9jayk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsIFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVx1MDAzZWN0cmxzLCBzdWJzeXNfZW50cnkpIHtcbitcdG11dGV4X2xvY2soXHUwMDI2ZGlzY19zdWJzeXMtXHUwMDNlbG9jayk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsIFx1MDAyNmRpc2Nfc3Vic3lzLVx1MDAzZWN0cmxzLCBzdWJzeXNfZW50cnkpIHtcbiBcdFx0aWYgKHN1YnN5cyBcdTAwMjZcdTAwMjYgIW52bWV0X2hvc3RfYWxsb3dlZChzdWJzeXMsIGN0cmwtXHUwMDNlaG9zdG5xbikpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdF9fbnZtZXRfZGlzY19jaGFuZ2VkKHBvcnQsIGN0cmwpO1xuIFx0fVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVx1MDAzZWxvY2spO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2Nfc3Vic3lzLVx1MDAzZWxvY2spO1xuIFxuIFx0LyogSWYgdHJhbnNwb3J0IGNhbiBzaWduYWwgY2hhbmdlLCBub3RpZnkgdHJhbnNwb3J0ICovXG4gXHRpZiAocG9ydC1cdTAwM2V0cl9vcHMgXHUwMDI2XHUwMDI2IHBvcnQtXHUwMDNldHJfb3BzLVx1MDAzZWRpc2NvdmVyeV9jaGcpXG5AQCAtNTIsMTUgKzkxLDE5IEBAIHN0YXRpYyB2b2lkIF9fbnZtZXRfc3Vic3lzX2Rpc2NfY2hhbmdlZChzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydCxcbiBcdFx0XHRcdFx0c3RydWN0IG52bWV0X2hvc3QgKmhvc3QpXG4ge1xuIFx0c3RydWN0IG52bWV0X2N0cmwgKmN0cmw7XG4rXHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpkaXNjX3N1YnN5cztcbiBcbi1cdG11dGV4X2xvY2soXHUwMDI2bnZtZXRfZGlzY19zdWJzeXMtXHUwMDNlbG9jayk7XG4tXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsIFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVx1MDAzZWN0cmxzLCBzdWJzeXNfZW50cnkpIHtcbitcdGRpc2Nfc3Vic3lzID0gbnZtZXRfZ2V0X2Rpc2Nfc3Vic3lzKHBvcnQtXHUwMDNlbmV0X25zKTtcbitcdGlmIChXQVJOX09OKCFkaXNjX3N1YnN5cykpXG4rXHRcdHJldHVybjtcbitcdG11dGV4X2xvY2soXHUwMDI2ZGlzY19zdWJzeXMtXHUwMDNlbG9jayk7XG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGN0cmwsIFx1MDAyNmRpc2Nfc3Vic3lzLVx1MDAzZWN0cmxzLCBzdWJzeXNfZW50cnkpIHtcbiBcdFx0aWYgKGhvc3QgXHUwMDI2XHUwMDI2IHN0cmNtcChudm1ldF9ob3N0X25hbWUoaG9zdCksIGN0cmwtXHUwMDNlaG9zdG5xbikpXG4gXHRcdFx0Y29udGludWU7XG4gXG4gXHRcdF9fbnZtZXRfZGlzY19jaGFuZ2VkKHBvcnQsIGN0cmwpO1xuIFx0fVxuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNm52bWV0X2Rpc2Nfc3Vic3lzLVx1MDAzZWxvY2spO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmRpc2Nfc3Vic3lzLVx1MDAzZWxvY2spO1xuIH1cbiBcbiB2b2lkIG52bWV0X3N1YnN5c19kaXNjX2NoYW5nZWQoc3RydWN0IG52bWV0X3N1YnN5cyAqc3Vic3lzLFxuQEAgLTY4LDExICsxMTEsMTggQEAgdm9pZCBudm1ldF9zdWJzeXNfZGlzY19jaGFuZ2VkKHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cyxcbiB7XG4gXHRzdHJ1Y3QgbnZtZXRfcG9ydCAqcG9ydDtcbiBcdHN0cnVjdCBudm1ldF9zdWJzeXNfbGluayAqcztcbitcdHN0cnVjdCBsaXN0X2hlYWQgKnBvcnRfbGlzdDtcbitcdHN0cnVjdCBudm1ldF9zdWJzeXMgKmRpc2Nfc3Vic3lzO1xuK1x0c3RydWN0IG5ldCAqbmV0X25zID0gY29uZmlnZnNfbnNfZnJvbV9ncm91cChcdTAwMjZzdWJzeXMtXHUwMDNlZ3JvdXApO1xuIFxuIFx0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZudm1ldF9jb25maWdfc2VtKTtcbi1cdG52bWV0X2dlbmN0cisrO1xuK1x0ZGlzY19zdWJzeXMgPSBudm1ldF9nZXRfZGlzY19zdWJzeXMobmV0X25zKTtcbitcdGlmIChXQVJOX09OKCFkaXNjX3N1YnN5cykpXG4rXHRcdHJldHVybjtcbitcdGRpc2Nfc3Vic3lzLVx1MDAzZWdlbmN0cisrO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBudm1ldF9wb3J0cywgZ2xvYmFsX2VudHJ5KVxuK1x0cG9ydF9saXN0ID0gbnZtZXRfZ2V0X3BvcnRfbGlzdChuZXRfbnMpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShwb3J0LCBwb3J0X2xpc3QsIGdsb2JhbF9lbnRyeSlcbiBcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeShzLCBcdTAwMjZwb3J0LVx1MDAzZXN1YnN5c3RlbXMsIGVudHJ5KSB7XG4gXHRcdFx0aWYgKHMtXHUwMDNlc3Vic3lzICE9IHN1YnN5cylcbiBcdFx0XHRcdGNvbnRpbnVlO1xuQEAgLTE3Myw2ICsyMjMsNyBAQCBzdGF0aWMgdm9pZCBudm1ldF9leGVjdXRlX2Rpc2NfZ2V0X2xvZ19wYWdlKHN0cnVjdCBudm1ldF9yZXEgKnJlcSlcbiBcdHUxNiBzdGF0dXMgPSAwO1xuIFx0dm9pZCAqYnVmZmVyO1xuIFx0Y2hhciB0cmFkZHJbTlZNRl9UUkFERFJfU0laRV07XG4rXHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpkaXNjX3N1YnN5cztcbiBcbiBcdGlmICghbnZtZXRfY2hlY2tfdHJhbnNmZXJfbGVuKHJlcSwgZGF0YV9sZW4pKVxuIFx0XHRyZXR1cm47XG5AQCAtMjA3LDEwICsyNTgsMTIgQEAgc3RhdGljIHZvaWQgbnZtZXRfZXhlY3V0ZV9kaXNjX2dldF9sb2dfcGFnZShzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXG4gXHR9XG4gXHRoZHIgPSBidWZmZXI7XG4gXG4rXHRkaXNjX3N1YnN5cyA9IG52bWV0X2dldF9kaXNjX3N1YnN5cyhyZXEtXHUwMDNlcG9ydC1cdTAwM2VuZXRfbnMpO1xuK1xuIFx0bnZtZXRfc2V0X2Rpc2NfdHJhZGRyKHJlcSwgcmVxLVx1MDAzZXBvcnQsIHRyYWRkcik7XG4gXG4gXHRudm1ldF9mb3JtYXRfZGlzY292ZXJ5X2VudHJ5KGhkciwgcmVxLVx1MDAzZXBvcnQsXG4tXHRcdFx0XHQgICAgIG52bWV0X2Rpc2Nfc3Vic3lzLVx1MDAzZXN1YnN5c25xbixcbitcdFx0XHRcdCAgICAgZGlzY19zdWJzeXMtXHUwMDNlc3Vic3lzbnFuLFxuIFx0XHRcdFx0ICAgICB0cmFkZHIsIE5WTUVfTlFOX0NVUlIsIG51bXJlYyk7XG4gXHRudW1yZWMrKztcbiBcbkBAIC0yMzUsNyArMjg4LDcgQEAgc3RhdGljIHZvaWQgbnZtZXRfZXhlY3V0ZV9kaXNjX2dldF9sb2dfcGFnZShzdHJ1Y3QgbnZtZXRfcmVxICpyZXEpXG4gXHRcdG51bXJlYysrO1xuIFx0fVxuIFxuLVx0aGRyLVx1MDAzZWdlbmN0ciA9IGNwdV90b19sZTY0KG52bWV0X2dlbmN0cik7XG4rXHRoZHItXHUwMDNlZ2VuY3RyID0gY3B1X3RvX2xlNjQoZGlzY19zdWJzeXMtXHUwMDNlZ2VuY3RyKTtcbiBcdGhkci1cdTAwM2VudW1yZWMgPSBjcHVfdG9fbGU2NChudW1yZWMpO1xuIFx0aGRyLVx1MDAzZXJlY2ZtdCA9IGNwdV90b19sZTE2KDApO1xuIFxuQEAgLTQyOCwxNSArNDgxLDMgQEAgdTE2IG52bWV0X3BhcnNlX2Rpc2NvdmVyeV9jbWQoc3RydWN0IG52bWV0X3JlcSAqcmVxKVxuIFx0fVxuIFxuIH1cbi1cbi1pbnQgX19pbml0IG52bWV0X2luaXRfZGlzY292ZXJ5KHZvaWQpXG4te1xuLVx0bnZtZXRfZGlzY19zdWJzeXMgPVxuLVx0XHRudm1ldF9zdWJzeXNfYWxsb2MoTlZNRV9ESVNDX1NVQlNZU19OQU1FLCBOVk1FX05RTl9DVVJSKTtcbi1cdHJldHVybiBQVFJfRVJSX09SX1pFUk8obnZtZXRfZGlzY19zdWJzeXMpO1xuLX1cbi1cbi12b2lkIG52bWV0X2V4aXRfZGlzY292ZXJ5KHZvaWQpXG4te1xuLVx0bnZtZXRfc3Vic3lzX3B1dChudm1ldF9kaXNjX3N1YnN5cyk7XG4tfVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jIGIvZHJpdmVycy9udm1lL3RhcmdldC9sb29wLmNcbmluZGV4IGZjYjFmODE4NmZkZDBkLi4wZWRkNjkwOTAyY2U0YiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvbG9vcC5jXG4rKysgYi9kcml2ZXJzL252bWUvdGFyZ2V0L2xvb3AuY1xuQEAgLTksNiArOSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbnZtZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW9kdWxlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYXJzZXIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L25zcHJveHkuaFx1MDAzZVxuICNpbmNsdWRlIFwibnZtZXQuaFwiXG4gI2luY2x1ZGUgXCIuLi9ob3N0L252bWUuaFwiXG4gI2luY2x1ZGUgXCIuLi9ob3N0L2ZhYnJpY3MuaFwiXG5AQCAtNTM4LDYgKzUzOSw5IEBAIHN0YXRpYyBzdHJ1Y3QgbnZtZXRfcG9ydCAqbnZtZV9sb29wX2ZpbmRfcG9ydChzdHJ1Y3QgbnZtZV9jdHJsICpjdHJsKVxuIFxuIFx0bXV0ZXhfbG9jayhcdTAwMjZudm1lX2xvb3BfcG9ydHNfbXV0ZXgpO1xuIFx0bGlzdF9mb3JfZWFjaF9lbnRyeShwLCBcdTAwMjZudm1lX2xvb3BfcG9ydHMsIGVudHJ5KSB7XG4rXHRcdC8qIFNraXAgcG9ydHMgZnJvbSBub24tbWF0Y2hpbmcgbmFtZXNwYWNlcyAqL1xuK1x0XHRpZiAocC1cdTAwM2VuZXRfbnMgIT0gY3VycmVudC1cdTAwM2Vuc3Byb3h5LVx1MDAzZW5ldF9ucylcbitcdFx0XHRjb250aW51ZTtcbiBcdFx0LyogaWYgbm8gdHJhbnNwb3J0IGFkZHJlc3MgaXMgc3BlY2lmaWVkIHVzZSB0aGUgZmlyc3QgcG9ydCAqL1xuIFx0XHRpZiAoKGN0cmwtXHUwMDNlb3B0cy1cdTAwM2VtYXNrIFx1MDAyNiBOVk1GX09QVF9UUkFERFIpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgc3RyY21wKGN0cmwtXHUwMDNlb3B0cy1cdTAwM2V0cmFkZHIsIHAtXHUwMDNlZGlzY19hZGRyLnRyYWRkcikpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oIGIvZHJpdmVycy9udm1lL3RhcmdldC9udm1ldC5oXG5pbmRleCAzMzA1YTg4Njg0ZWNhYi4uNjgxZjkzNWQ4MDA4NmIgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL252bWUvdGFyZ2V0L252bWV0LmhcbisrKyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvbnZtZXQuaFxuQEAgLTIxMCw2ICsyMTAsNyBAQCBzdHJ1Y3QgbnZtZXRfcG9ydCB7XG4gXHRzdHJ1Y3QgbnZtZXRfYW5hX2dyb3VwXHRcdGFuYV9kZWZhdWx0X2dyb3VwO1xuIFx0ZW51bSBudm1lX2FuYV9zdGF0ZVx0XHQqYW5hX3N0YXRlO1xuIFx0c3RydWN0IGtleVx0XHRcdCprZXlyaW5nO1xuK1x0c3RydWN0IG5ldFx0XHRcdCpuZXRfbnM7XG4gXHR2b2lkXHRcdFx0XHQqcHJpdjtcbiBcdGJvb2xcdFx0XHRcdGVuYWJsZWQ7XG4gXHRpbnRcdFx0XHRcdGlubGluZV9kYXRhX3NpemU7XG5AQCAtMzI1LDYgKzMyNiw5IEBAIHN0cnVjdCBudm1ldF9zdWJzeXMge1xuIFx0dTE2XHRcdFx0Y250bGlkX21pbjtcbiBcdHUxNlx0XHRcdGNudGxpZF9tYXg7XG4gXG4rXHQvKiBGb3IgZGlzY292ZXJ5IHN1YnN5c3RlbXMgKi9cbitcdHU2NCBnZW5jdHI7XG4rXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkXHRjdHJscztcbiBcbiBcdHN0cnVjdCBsaXN0X2hlYWRcdGhvc3RzO1xuQEAgLTYyNiw3ICs2MzAsNyBAQCBzc2l6ZV90IG52bWV0X2N0cmxfaG9zdF90cmFkZHIoc3RydWN0IG52bWV0X2N0cmwgKmN0cmwsXG4gXHRcdGNoYXIgKnRyYWRkciwgc2l6ZV90IHRyYWRkcl9sZW4pO1xuIFxuIHN0cnVjdCBudm1ldF9zdWJzeXMgKm52bWV0X3N1YnN5c19hbGxvYyhjb25zdCBjaGFyICpzdWJzeXNucW4sXG4tXHRcdGVudW0gbnZtZV9zdWJzeXNfdHlwZSB0eXBlKTtcbitcdFx0ZW51bSBudm1lX3N1YnN5c190eXBlIHR5cGUsIHN0cnVjdCBuZXQgKm5ldF9ucyk7XG4gdm9pZCBudm1ldF9zdWJzeXNfcHV0KHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cyk7XG4gdm9pZCBudm1ldF9zdWJzeXNfZGVsX2N0cmxzKHN0cnVjdCBudm1ldF9zdWJzeXMgKnN1YnN5cyk7XG4gXG5AQCAtNjYyLDcgKzY2Niw2IEBAIHUxNiBudm1ldF96ZXJvX3NnbChzdHJ1Y3QgbnZtZXRfcmVxICpyZXEsIG9mZl90IG9mZiwgc2l6ZV90IGxlbik7XG4gdTMyIG52bWV0X2dldF9sb2dfcGFnZV9sZW4oc3RydWN0IG52bWVfY29tbWFuZCAqY21kKTtcbiB1NjQgbnZtZXRfZ2V0X2xvZ19wYWdlX29mZnNldChzdHJ1Y3QgbnZtZV9jb21tYW5kICpjbWQpO1xuIFxuLWV4dGVybiBzdHJ1Y3QgbGlzdF9oZWFkICpudm1ldF9wb3J0cztcbiB2b2lkIG52bWV0X3BvcnRfZGlzY19jaGFuZ2VkKHN0cnVjdCBudm1ldF9wb3J0ICpwb3J0LFxuIFx0XHRzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMpO1xuIHZvaWQgbnZtZXRfc3Vic3lzX2Rpc2NfY2hhbmdlZChzdHJ1Y3QgbnZtZXRfc3Vic3lzICpzdWJzeXMsXG5AQCAtNjk2LDExICs2OTksMTMgQEAgdm9pZCBudm1ldF9hZGRfYXN5bmNfZXZlbnQoc3RydWN0IG52bWV0X2N0cmwgKmN0cmwsIHU4IGV2ZW50X3R5cGUsXG4gXG4gaW50IF9faW5pdCBudm1ldF9pbml0X2NvbmZpZ2ZzKHZvaWQpO1xuIHZvaWQgX19leGl0IG52bWV0X2V4aXRfY29uZmlnZnModm9pZCk7XG4rZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgKm52bWV0X2dldF9wb3J0X2xpc3Qoc3RydWN0IG5ldCAqbmV0X25zKTtcbiBcbi1pbnQgX19pbml0IG52bWV0X2luaXRfZGlzY292ZXJ5KHZvaWQpO1xuLXZvaWQgbnZtZXRfZXhpdF9kaXNjb3Zlcnkodm9pZCk7XG4rZXh0ZXJuIHU2NCBudm1ldF9nZXRfbnNfaWQoc3RydWN0IG5ldCAqbmV0X25zKTtcbitleHRlcm4gaW50IG52bWV0X2FkZF9kaXNjX3N1YnN5cyhzdHJ1Y3QgbmV0ICpuZXRfbnMpO1xuK2V4dGVybiB2b2lkIG52bWV0X2RlbF9kaXNjX3N1YnN5cyhzdHJ1Y3QgbmV0ICpuZXRfbnMpO1xuK2V4dGVybiBzdHJ1Y3QgbnZtZXRfc3Vic3lzICpudm1ldF9nZXRfZGlzY19zdWJzeXMoc3RydWN0IG5ldCAqbmV0X25zKTtcbiBcbi1leHRlcm4gc3RydWN0IG52bWV0X3N1YnN5cyAqbnZtZXRfZGlzY19zdWJzeXM7XG4gZXh0ZXJuIHN0cnVjdCByd19zZW1hcGhvcmUgbnZtZXRfY29uZmlnX3NlbTtcbiBcbiBleHRlcm4gdTMyIG52bWV0X2FuYV9ncm91cF9lbmFibGVkW05WTUVUX01BWF9BTkFHUlBTICsgMV07XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC9yZG1hLmMgYi9kcml2ZXJzL252bWUvdGFyZ2V0L3JkbWEuY1xuaW5kZXggYWMyNmY0Zjc3NGM0ZGUuLmNhZDIzOTFhNmQwYTc4IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9udm1lL3RhcmdldC9yZG1hLmNcbisrKyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvcmRtYS5jXG5AQCAtMTg3MCw4ICsxODcwLDggQEAgc3RhdGljIGludCBudm1ldF9yZG1hX2VuYWJsZV9wb3J0KHN0cnVjdCBudm1ldF9yZG1hX3BvcnQgKnBvcnQpXG4gXHRzdHJ1Y3QgcmRtYV9jbV9pZCAqY21faWQ7XG4gXHRpbnQgcmV0O1xuIFxuLVx0Y21faWQgPSByZG1hX2NyZWF0ZV9pZChcdTAwMjZpbml0X25ldCwgbnZtZXRfcmRtYV9jbV9oYW5kbGVyLCBwb3J0LFxuLVx0XHRcdFJETUFfUFNfVENQLCBJQl9RUFRfUkMpO1xuK1x0Y21faWQgPSByZG1hX2NyZWF0ZV9pZChwb3J0LVx1MDAzZW5wb3J0LVx1MDAzZW5ldF9ucywgbnZtZXRfcmRtYV9jbV9oYW5kbGVyLFxuK1x0XHRcdHBvcnQsIFJETUFfUFNfVENQLCBJQl9RUFRfUkMpO1xuIFx0aWYgKElTX0VSUihjbV9pZCkpIHtcbiBcdFx0cHJfZXJyKFwiQ00gSUQgY3JlYXRpb24gZmFpbGVkXFxuXCIpO1xuIFx0XHRyZXR1cm4gUFRSX0VSUihjbV9pZCk7XG5AQCAtMTk2NCw3ICsxOTY0LDcgQEAgc3RhdGljIGludCBudm1ldF9yZG1hX2FkZF9wb3J0KHN0cnVjdCBudm1ldF9wb3J0ICpucG9ydClcbiBcdFx0bnBvcnQtXHUwMDNlbWF4X3F1ZXVlX3NpemUgPSBOVk1FX1JETUFfTUFYX1FVRVVFX1NJWkU7XG4gXHR9XG4gXG4tXHRyZXQgPSBpbmV0X3B0b25fd2l0aF9zY29wZShcdTAwMjZpbml0X25ldCwgYWYsIG5wb3J0LVx1MDAzZWRpc2NfYWRkci50cmFkZHIsXG4rXHRyZXQgPSBpbmV0X3B0b25fd2l0aF9zY29wZShucG9ydC1cdTAwM2VuZXRfbnMsIGFmLCBucG9ydC1cdTAwM2VkaXNjX2FkZHIudHJhZGRyLFxuIFx0XHRcdG5wb3J0LVx1MDAzZWRpc2NfYWRkci50cnN2Y2lkLCBcdTAwMjZwb3J0LVx1MDAzZWFkZHIpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRwcl9lcnIoXCJtYWxmb3JtZWQgaXAvcG9ydCBwYXNzZWQ6ICVzOiVzXFxuXCIsXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9udm1lL3RhcmdldC90Y3AuYyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNcbmluZGV4IDE1YzUyZjFmOTVmMWIwLi4wMTZiZWY2NWE3NmRkOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNcbisrKyBiL2RyaXZlcnMvbnZtZS90YXJnZXQvdGNwLmNcbkBAIC0yMDc0LDcgKzIwNzQsNyBAQCBzdGF0aWMgaW50IG52bWV0X3RjcF9hZGRfcG9ydChzdHJ1Y3QgbnZtZXRfcG9ydCAqbnBvcnQpXG4gXHRcdGdvdG8gZXJyX3BvcnQ7XG4gXHR9XG4gXG4tXHRyZXQgPSBpbmV0X3B0b25fd2l0aF9zY29wZShcdTAwMjZpbml0X25ldCwgYWYsIG5wb3J0LVx1MDAzZWRpc2NfYWRkci50cmFkZHIsXG4rXHRyZXQgPSBpbmV0X3B0b25fd2l0aF9zY29wZShucG9ydC1cdTAwM2VuZXRfbnMsIGFmLCBucG9ydC1cdTAwM2VkaXNjX2FkZHIudHJhZGRyLFxuIFx0XHRcdG5wb3J0LVx1MDAzZWRpc2NfYWRkci50cnN2Y2lkLCBcdTAwMjZwb3J0LVx1MDAzZWFkZHIpO1xuIFx0aWYgKHJldCkge1xuIFx0XHRwcl9lcnIoXCJtYWxmb3JtZWQgaXAvcG9ydCBwYXNzZWQ6ICVzOiVzXFxuXCIsXG5AQCAtMjA4Nyw4ICsyMDg3LDggQEAgc3RhdGljIGludCBudm1ldF90Y3BfYWRkX3BvcnQoc3RydWN0IG52bWV0X3BvcnQgKm5wb3J0KVxuIFx0aWYgKHBvcnQtXHUwMDNlbnBvcnQtXHUwMDNlaW5saW5lX2RhdGFfc2l6ZSBcdTAwM2MgMClcbiBcdFx0cG9ydC1cdTAwM2VucG9ydC1cdTAwM2VpbmxpbmVfZGF0YV9zaXplID0gTlZNRVRfVENQX0RFRl9JTkxJTkVfREFUQV9TSVpFO1xuIFxuLVx0cmV0ID0gc29ja19jcmVhdGUocG9ydC1cdTAwM2VhZGRyLnNzX2ZhbWlseSwgU09DS19TVFJFQU0sXG4tXHRcdFx0XHRJUFBST1RPX1RDUCwgXHUwMDI2cG9ydC1cdTAwM2Vzb2NrKTtcbitcdHJldCA9IHNvY2tfY3JlYXRlX2tlcm4obnBvcnQtXHUwMDNlbmV0X25zLCBwb3J0LVx1MDAzZWFkZHIuc3NfZmFtaWx5LCBTT0NLX1NUUkVBTSxcbitcdFx0XHQgICAgSVBQUk9UT19UQ1AsIFx1MDAyNnBvcnQtXHUwMDNlc29jayk7XG4gXHRpZiAocmV0KSB7XG4gXHRcdHByX2VycihcImZhaWxlZCB0byBjcmVhdGUgYSBzb2NrZXRcXG5cIik7XG4gXHRcdGdvdG8gZXJyX3BvcnQ7XG5kaWZmIC0tZ2l0IGEvZnMvY29uZmlnZnMvY29uZmlnZnNfaW50ZXJuYWwuaCBiL2ZzL2NvbmZpZ2ZzL2NvbmZpZ2ZzX2ludGVybmFsLmhcbmluZGV4IGFjZGVlYThlMmQ2OWFjLi4zNWVkZGMyNzRiODg3OSAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL2NvbmZpZ2ZzX2ludGVybmFsLmhcbisrKyBiL2ZzL2NvbmZpZ2ZzL2NvbmZpZ2ZzX2ludGVybmFsLmhcbkBAIC00NCw2ICs0NCwxNyBAQCBzdHJ1Y3QgY29uZmlnZnNfZGlyZW50IHtcbiBcdHN0cnVjdCBjb25maWdmc19mcmFnbWVudCAqc19mcmFnO1xuIH07XG4gXG4rc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8ge1xuK1x0c3RydWN0IGNvbmZpZ2ZzX2RpcmVudCByb290O1xuK1x0c3RydWN0IGNvbmZpZ19ncm91cCBncm91cDtcbitcdHN0cnVjdCBsaXN0X2hlYWQgc3Vic3lzX2xpc3Q7XG4rXHRzdHJ1Y3QgbXV0ZXggc3Vic3lzX211dGV4O1xuK1x0c3RydWN0IHZmc21vdW50ICptbnQ7XG4rXHRpbnQgbW50X2NvdW50O1xuK1x0c3RydWN0IG5ldCAqbmV0X25zO1xuK1x0cmVmY291bnRfdCByZWY7XG4rfTtcbitcbiAjZGVmaW5lIENPTkZJR0ZTX1JPT1RcdFx0MHgwMDAxXG4gI2RlZmluZSBDT05GSUdGU19ESVJcdFx0MHgwMDAyXG4gI2RlZmluZSBDT05GSUdGU19JVEVNX0FUVFJcdDB4MDAwNFxuQEAgLTYzLDcgKzc0LDcgQEAgZXh0ZXJuIHNwaW5sb2NrX3QgY29uZmlnZnNfZGlyZW50X2xvY2s7XG4gXG4gZXh0ZXJuIHN0cnVjdCBrbWVtX2NhY2hlICpjb25maWdmc19kaXJfY2FjaGVwO1xuIFxuLWV4dGVybiBpbnQgY29uZmlnZnNfaXNfcm9vdChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pO1xuK2V4dGVybiBib29sIGNvbmZpZ2ZzX2lzX3Jvb3Qoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKTtcbiBcbiBleHRlcm4gc3RydWN0IGlub2RlICogY29uZmlnZnNfbmV3X2lub2RlKHVtb2RlX3QgbW9kZSwgc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7XG4gZXh0ZXJuIHN0cnVjdCBpbm9kZSAqY29uZmlnZnNfY3JlYXRlKHN0cnVjdCBkZW50cnkgKiwgdW1vZGVfdCBtb2RlKTtcbkBAIC03OSw4ICs5MCwxNCBAQCBleHRlcm4gY29uc3QgdW5zaWduZWQgY2hhciAqIGNvbmZpZ2ZzX2dldF9uYW1lKHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkKTtcbiBleHRlcm4gaW50IGNvbmZpZ2ZzX3NldGF0dHIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4gXHRcdFx0ICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICppYXR0cik7XG4gXG4tZXh0ZXJuIHN0cnVjdCBkZW50cnkgKmNvbmZpZ2ZzX3Bpbl9mcyh2b2lkKTtcbi1leHRlcm4gdm9pZCBjb25maWdmc19yZWxlYXNlX2ZzKHZvaWQpO1xuK2V4dGVybiBzdHJ1Y3QgZGVudHJ5ICpjb25maWdmc19waW5fZnMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYik7XG4rZXh0ZXJuIHZvaWQgY29uZmlnZnNfcmVsZWFzZV9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTtcbitleHRlcm4gc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKHN0cnVjdCBuZXQgKm5ldF9ucyk7XG4rZXh0ZXJuIHZvaWQgY29uZmlnZnNfcHV0X3N1cGVyX2luZm8oc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8pO1xuK2V4dGVybiB2b2lkIGNvbmZpZ2ZzX2xpbmtfc3Vic3lzdGVtcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyk7XG4rZXh0ZXJuIHZvaWQgY29uZmlnZnNfdW5saW5rX3N1YnN5c3RlbXMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbitcdFx0XHRcdCAgICAgICBzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyk7XG4gXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29uZmlnZnNfZGlyX29wZXJhdGlvbnM7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgY29uZmlnZnNfZmlsZV9vcGVyYXRpb25zO1xuZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL2Rpci5jIGIvZnMvY29uZmlnZnMvZGlyLmNcbmluZGV4IDNjODhmMTNmMWNhMmU5Li4zZDM5YTZjMWE0MTYzNiAxMDA2NDRcbi0tLSBhL2ZzL2NvbmZpZ2ZzL2Rpci5jXG4rKysgYi9mcy9jb25maWdmcy9kaXIuY1xuQEAgLTM0LDE0ICszNCw2IEBAXG4gICovXG4gREVGSU5FX1NQSU5MT0NLKGNvbmZpZ2ZzX2RpcmVudF9sb2NrKTtcbiBcbi0vKlxuLSAqIEFsbCBvZiBsaW5rX29iai91bmxpbmtfb2JqL2xpbmtfZ3JvdXAvdW5saW5rX2dyb3VwIHJlcXVpcmUgdGhhdFxuLSAqIHN1YnN5cy1cdTAwM2VzdV9tdXRleCBpcyBoZWxkLlxuLSAqIEJ1dCBwYXJlbnQgY29uZmlnZnNfc3Vic3lzdGVtIGlzIE5VTEwgd2hlbiBjb25maWdfaXRlbSBpcyByb290LlxuLSAqIFVzZSB0aGlzIG11dGV4IHdoZW4gY29uZmlnX2l0ZW0gaXMgcm9vdC5cbi0gKi9cbi1zdGF0aWMgREVGSU5FX01VVEVYKGNvbmZpZ2ZzX3N1YnN5c3RlbV9tdXRleCk7XG4tXG4gc3RhdGljIHZvaWQgY29uZmlnZnNfZF9pcHV0KHN0cnVjdCBkZW50cnkgKiBkZW50cnksXG4gXHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqIGlub2RlKVxuIHtcbkBAIC0xMTUyLDcgKzExNDQsNyBAQCBpbnQgY29uZmlnZnNfZGVwZW5kX2l0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzLFxuIFx0ICogUGluIHRoZSBjb25maWdmcyBmaWxlc3lzdGVtLiAgVGhpcyBtZWFucyB3ZSBjYW4gc2FmZWx5IGFjY2Vzc1xuIFx0ICogdGhlIHJvb3Qgb2YgdGhlIGNvbmZpZ2ZzIGZpbGVzeXN0ZW0uXG4gXHQgKi9cbi1cdHJvb3QgPSBjb25maWdmc19waW5fZnMoKTtcbitcdHJvb3QgPSBjb25maWdmc19waW5fZnMoTlVMTCk7XG4gXHRpZiAoSVNfRVJSKHJvb3QpKVxuIFx0XHRyZXR1cm4gUFRSX0VSUihyb290KTtcbiBcbkBAIC0xMTc5LDcgKzExNzEsNyBAQCBpbnQgY29uZmlnZnNfZGVwZW5kX2l0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzLFxuIFx0ICogSWYgd2Ugc3VjY2VlZGVkLCB0aGUgZnMgaXMgcGlubmVkIHZpYSBvdGhlciBtZXRob2RzLiAgSWYgbm90LFxuIFx0ICogd2UncmUgZG9uZSB3aXRoIGl0IGFueXdheS4gIFNvIHJlbGVhc2VfZnMoKSBpcyBhbHdheXMgcmlnaHQuXG4gXHQgKi9cbi1cdGNvbmZpZ2ZzX3JlbGVhc2VfZnMoKTtcbitcdGNvbmZpZ2ZzX3JlbGVhc2VfZnMoTlVMTCk7XG4gXG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0xODY5LDMyICsxODYxLDI3IEBAIHZvaWQgY29uZmlnZnNfdW5yZWdpc3Rlcl9kZWZhdWx0X2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKVxuIH1cbiBFWFBPUlRfU1lNQk9MKGNvbmZpZ2ZzX3VucmVnaXN0ZXJfZGVmYXVsdF9ncm91cCk7XG4gXG4taW50IGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpXG4rc3RhdGljIGludCBjb25maWdmc19saW5rX3Jvb3Qoc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gICppbmZvLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cyxcbitcdFx0XHQgICAgICBzdHJ1Y3QgZGVudHJ5ICpyb290KVxuIHtcbi1cdGludCBlcnI7XG4gXHRzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCA9IFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9ncm91cDtcbiBcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcbi1cdHN0cnVjdCBkZW50cnkgKnJvb3Q7XG4gXHRzdHJ1Y3QgY29uZmlnZnNfZGlyZW50ICpzZDtcbiBcdHN0cnVjdCBjb25maWdmc19mcmFnbWVudCAqZnJhZztcbitcdGludCBlcnI7XG4gXG4gXHRmcmFnID0gbmV3X2ZyYWdtZW50KCk7XG4gXHRpZiAoIWZyYWcpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0cm9vdCA9IGNvbmZpZ2ZzX3Bpbl9mcygpO1xuLVx0aWYgKElTX0VSUihyb290KSkge1xuLVx0XHRwdXRfZnJhZ21lbnQoZnJhZyk7XG4tXHRcdHJldHVybiBQVFJfRVJSKHJvb3QpO1xuLVx0fVxuLVxuIFx0aWYgKCFncm91cC1cdTAwM2VjZ19pdGVtLmNpX25hbWUpXG4gXHRcdGdyb3VwLVx1MDAzZWNnX2l0ZW0uY2lfbmFtZSA9IGdyb3VwLVx1MDAzZWNnX2l0ZW0uY2lfbmFtZWJ1ZjtcbiBcbiBcdHNkID0gcm9vdC1cdTAwM2VkX2ZzZGF0YTtcbi1cdG11dGV4X2xvY2soXHUwMDI2Y29uZmlnZnNfc3Vic3lzdGVtX211dGV4KTtcbitcdG11dGV4X2xvY2soXHUwMDI2aW5mby1cdTAwM2VzdWJzeXNfbXV0ZXgpO1xuIFx0bGlua19ncm91cCh0b19jb25maWdfZ3JvdXAoc2QtXHUwMDNlc19lbGVtZW50KSwgZ3JvdXApO1xuLVx0bXV0ZXhfdW5sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N1YnN5c3RlbV9tdXRleCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2VzdWJzeXNfbXV0ZXgpO1xuIFxuIFx0aW5vZGVfbG9ja19uZXN0ZWQoZF9pbm9kZShyb290KSwgSV9NVVRFWF9QQVJFTlQpO1xuIFxuQEAgLTE5MjEsMTcgKzE5MDgsMTIwIEBAIGludCBjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKVxuIFx0aW5vZGVfdW5sb2NrKGRfaW5vZGUocm9vdCkpO1xuIFxuIFx0aWYgKGVycikge1xuLVx0XHRtdXRleF9sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N1YnN5c3RlbV9tdXRleCk7XG4rXHRcdG11dGV4X2xvY2soXHUwMDI2aW5mby1cdTAwM2VzdWJzeXNfbXV0ZXgpO1xuIFx0XHR1bmxpbmtfZ3JvdXAoZ3JvdXApO1xuLVx0XHRtdXRleF91bmxvY2soXHUwMDI2Y29uZmlnZnNfc3Vic3lzdGVtX211dGV4KTtcbi1cdFx0Y29uZmlnZnNfcmVsZWFzZV9mcygpO1xuK1x0XHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2VzdWJzeXNfbXV0ZXgpO1xuIFx0fVxuIFx0cHV0X2ZyYWdtZW50KGZyYWcpO1xuK1x0cmV0dXJuIGVycjtcbit9XG4gXG4raW50IGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpXG4re1xuK1x0c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm87XG4rXHRzdHJ1Y3QgZGVudHJ5ICpyb290O1xuK1x0aW50IGVycjtcbitcbitcdGluZm8gPSBjb25maWdmc19nZXRfc3VwZXJfaW5mbyhcdTAwMjZpbml0X25ldCk7XG4rXHRpZiAoV0FSTl9PTihJU19FUlIoaW5mbykpKVxuK1x0XHRyZXR1cm4gUFRSX0VSUihpbmZvKTtcbitcbitcdHJvb3QgPSBjb25maWdmc19waW5fZnMoTlVMTCk7XG4rXHRpZiAoSVNfRVJSKHJvb3QpKSB7XG4rXHRcdGVyciA9IFBUUl9FUlIocm9vdCk7XG4rXHRcdGdvdG8gb3V0X3B1dDtcbitcdH1cbitcbitcdGlmIChzdWJzeXMtXHUwMDNlZmlsbF9zdWJzeXN0ZW0pIHtcbitcdFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2c3Vic3lzLVx1MDAzZXN1X2xpbmspO1xuK1x0XHRtdXRleF9pbml0KFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9tdXRleCk7XG4rXHRcdGNvbmZpZ19ncm91cF9pbml0KFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9ncm91cCk7XG4rXHRcdGVyciA9IHN1YnN5cy1cdTAwM2VmaWxsX3N1YnN5c3RlbShzdWJzeXMsIGluZm8tXHUwMDNlbmV0X25zKTtcbitcdFx0aWYgKGVycilcbitcdFx0XHRnb3RvIG91dF9yZWxlYXNlO1xuK1x0fVxuK1xuK1x0ZXJyID0gY29uZmlnZnNfbGlua19yb290KGluZm8sIHN1YnN5cywgcm9vdCk7XG4rXHRpZiAoZXJyKSB7XG4rXHRcdGlmIChzdWJzeXMtXHUwMDNlY2xlYXJfc3Vic3lzdGVtKVxuK1x0XHRcdHN1YnN5cy1cdTAwM2VjbGVhcl9zdWJzeXN0ZW0oc3Vic3lzLCBpbmZvLVx1MDAzZW5ldF9ucyk7XG4rXHRcdGdvdG8gb3V0X3JlbGVhc2U7XG4rXHR9XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX211dGV4KTtcbitcdGxpc3RfYWRkKFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9saW5rLCBcdTAwMjZpbmZvLVx1MDAzZXN1YnN5c19saXN0KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZpbmZvLVx1MDAzZXN1YnN5c19tdXRleCk7XG4rXG4rb3V0X3JlbGVhc2U6XG4rXHRpZiAoZXJyKVxuK1x0XHRjb25maWdmc19yZWxlYXNlX2ZzKE5VTEwpO1xuK291dF9wdXQ6XG4rXHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuLXZvaWQgY29uZmlnZnNfdW5yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKVxuK3ZvaWQgY29uZmlnZnNfbGlua19zdWJzeXN0ZW1zKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsXG4rXHRcdFx0ICAgICAgc3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8pXG4re1xuK1x0c3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqcztcbitcdHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICpwYXJlbnQgPSBjb25maWdmc19nZXRfc3VwZXJfaW5mbyhcdTAwMjZpbml0X25ldCk7XG4rXHRMSVNUX0hFQUQoc3Vic3lzX2xpc3QpO1xuK1xuK1x0aWYgKFdBUk5fT04oSVNfRVJSKHBhcmVudCkpKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAoKGluZm8tXHUwMDNlbmV0X25zID09IFx1MDAyNmluaXRfbmV0KSB8fCBXQVJOX09OKHBhcmVudCA9PSBpbmZvKSkge1xuK1x0XHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhwYXJlbnQpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXHRtdXRleF9sb2NrKFx1MDAyNnBhcmVudC1cdTAwM2VzdWJzeXNfbXV0ZXgpO1xuK1x0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZwYXJlbnQtXHUwMDNlc3Vic3lzX2xpc3QsIFx1MDAyNnN1YnN5c19saXN0KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwYXJlbnQtXHUwMDNlc3Vic3lzX211dGV4KTtcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkocywgXHUwMDI2c3Vic3lzX2xpc3QsIHN1X2xpbmspIHtcbitcdFx0c3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzO1xuK1x0XHRzdHJ1Y3QgZGVudHJ5ICpyb290O1xuK1x0XHRpbnQgZXJyO1xuK1xuK1x0XHRpZiAoIXMtXHUwMDNlZmlsbF9zdWJzeXN0ZW0pXG4rXHRcdFx0Y29udGludWU7XG4rXHRcdHN1YnN5cyA9IGt6YWxsb2Nfb2JqKCpzdWJzeXMpO1xuK1x0XHRpZiAoIXN1YnN5cylcbitcdFx0XHRjb250aW51ZTtcbitcdFx0c3Vic3lzLVx1MDAzZWZpbGxfc3Vic3lzdGVtID0gcy1cdTAwM2VmaWxsX3N1YnN5c3RlbTtcbitcdFx0c3Vic3lzLVx1MDAzZWNsZWFyX3N1YnN5c3RlbSA9IHMtXHUwMDNlY2xlYXJfc3Vic3lzdGVtO1xuK1x0XHRJTklUX0xJU1RfSEVBRChcdTAwMjZzdWJzeXMtXHUwMDNlc3VfbGluayk7XG4rXHRcdG11dGV4X2luaXQoXHUwMDI2c3Vic3lzLVx1MDAzZXN1X211dGV4KTtcbitcdFx0Y29uZmlnX2dyb3VwX2luaXQoXHUwMDI2c3Vic3lzLVx1MDAzZXN1X2dyb3VwKTtcbitcdFx0ZXJyID0gc3Vic3lzLVx1MDAzZWZpbGxfc3Vic3lzdGVtKHN1YnN5cywgaW5mby1cdTAwM2VuZXRfbnMpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0a2ZyZWUoc3Vic3lzKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuK1x0XHRyb290ID0gY29uZmlnZnNfcGluX2ZzKHNiKTtcbitcdFx0aWYgKElTX0VSUihyb290KSkge1xuK1x0XHRcdGlmIChzdWJzeXMtXHUwMDNlY2xlYXJfc3Vic3lzdGVtKVxuK1x0XHRcdFx0c3Vic3lzLVx1MDAzZWNsZWFyX3N1YnN5c3RlbShzdWJzeXMsIGluZm8tXHUwMDNlbmV0X25zKTtcbitcdFx0XHRrZnJlZShzdWJzeXMpO1xuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHR9XG4rXHRcdGVyciA9IGNvbmZpZ2ZzX2xpbmtfcm9vdChpbmZvLCBzdWJzeXMsIHJvb3QpO1xuK1x0XHRpZiAoZXJyKSB7XG4rXHRcdFx0Y29uZmlnZnNfcmVsZWFzZV9mcyhzYik7XG4rXHRcdFx0aWYgKHN1YnN5cy1cdTAwM2VjbGVhcl9zdWJzeXN0ZW0pXG4rXHRcdFx0XHRzdWJzeXMtXHUwMDNlY2xlYXJfc3Vic3lzdGVtKHN1YnN5cywgaW5mby1cdTAwM2VuZXRfbnMpO1xuK1x0XHRcdGtmcmVlKHN1YnN5cyk7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbitcdFx0bXV0ZXhfbG9jayhcdTAwMjZpbmZvLVx1MDAzZXN1YnN5c19tdXRleCk7XG4rXHRcdGxpc3RfYWRkKFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9saW5rLCBcdTAwMjZpbmZvLVx1MDAzZXN1YnN5c19saXN0KTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX211dGV4KTtcbitcdH1cbitcdG11dGV4X2xvY2soXHUwMDI2cGFyZW50LVx1MDAzZXN1YnN5c19tdXRleCk7XG4rXHRsaXN0X3NwbGljZShcdTAwMjZzdWJzeXNfbGlzdCwgXHUwMDI2cGFyZW50LVx1MDAzZXN1YnN5c19saXN0KTtcbitcdG11dGV4X3VubG9jayhcdTAwMjZwYXJlbnQtXHUwMDNlc3Vic3lzX211dGV4KTtcbitcdGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKHBhcmVudCk7XG4rfVxuK1xuK3N0YXRpYyBib29sIGNvbmZpZ2ZzX3VubGlua19yb290KHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cylcbiB7XG4gXHRzdHJ1Y3QgY29uZmlnX2dyb3VwICpncm91cCA9IFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9ncm91cDtcbiBcdHN0cnVjdCBkZW50cnkgKmRlbnRyeSA9IGRnZXQoZ3JvdXAtXHUwMDNlY2dfaXRlbS5jaV9kZW50cnkpO1xuQEAgLTE5NDEsNyArMjAzMSw4IEBAIHZvaWQgY29uZmlnZnNfdW5yZWdpc3Rlcl9zdWJzeXN0ZW0oc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzKVxuIFxuIFx0aWYgKGRlbnRyeS1cdTAwM2VkX3BhcmVudCAhPSByb290KSB7XG4gXHRcdHByX2VycihcIlRyaWVkIHRvIHVucmVnaXN0ZXIgbm9uLXN1YnN5c3RlbSFcXG5cIik7XG4tXHRcdHJldHVybjtcbitcdFx0ZHB1dChkZW50cnkpO1xuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXHR9XG4gXG4gXHRkb3duX3dyaXRlKFx1MDAyNmZyYWctXHUwMDNlZnJhZ19zZW0pO1xuQEAgLTE5NjksMTEgKzIwNjAsNTAgQEAgdm9pZCBjb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpXG4gXHRpbm9kZV91bmxvY2soZF9pbm9kZShyb290KSk7XG4gXG4gXHRkcHV0KGRlbnRyeSk7XG4rXHRyZXR1cm4gdHJ1ZTtcbit9XG4rXG4rdm9pZCBjb25maWdmc191bmxpbmtfc3Vic3lzdGVtcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuK1x0XHRcdFx0c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8pXG4re1xuK1x0c3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzLCAqcztcbitcbitcdG11dGV4X2xvY2soXHUwMDI2aW5mby1cdTAwM2VzdWJzeXNfbXV0ZXgpO1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKHN1YnN5cywgcywgXHUwMDI2aW5mby1cdTAwM2VzdWJzeXNfbGlzdCwgc3VfbGluaykge1xuK1x0XHRsaXN0X2RlbF9pbml0KFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9saW5rKTtcbitcdFx0aWYgKCFjb25maWdmc191bmxpbmtfcm9vdChzdWJzeXMpKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1x0XHRpZiAoc3Vic3lzLVx1MDAzZWNsZWFyX3N1YnN5c3RlbSlcbitcdFx0XHRzdWJzeXMtXHUwMDNlY2xlYXJfc3Vic3lzdGVtKHN1YnN5cywgaW5mby1cdTAwM2VuZXRfbnMpO1xuK1x0XHR1bmxpbmtfZ3JvdXAoXHUwMDI2c3Vic3lzLVx1MDAzZXN1X2dyb3VwKTtcbitcdFx0Y29uZmlnZnNfcmVsZWFzZV9mcyhzYik7XG4rXHRcdGtmcmVlKHN1YnN5cyk7XG4rXHR9XG4rXHRtdXRleF91bmxvY2soXHUwMDI2aW5mby1cdTAwM2VzdWJzeXNfbXV0ZXgpO1xuK31cbitcbit2b2lkIGNvbmZpZ2ZzX3VucmVnaXN0ZXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cylcbit7XG4rXHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbztcbitcdHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwID0gXHUwMDI2c3Vic3lzLVx1MDAzZXN1X2dyb3VwO1xuK1xuK1x0aW5mbyA9IGNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvKFx1MDAyNmluaXRfbmV0KTtcbitcdGlmIChXQVJOX09OKElTX0VSUihpbmZvKSkpXG4rXHRcdHJldHVybjtcbitcbitcdGlmICghY29uZmlnZnNfdW5saW5rX3Jvb3Qoc3Vic3lzKSkge1xuK1x0XHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuIFxuLVx0bXV0ZXhfbG9jayhcdTAwMjZjb25maWdmc19zdWJzeXN0ZW1fbXV0ZXgpO1xuK1x0bXV0ZXhfbG9jayhcdTAwMjZpbmZvLVx1MDAzZXN1YnN5c19tdXRleCk7XG4rXHRsaXN0X2RlbF9pbml0KFx1MDAyNnN1YnN5cy1cdTAwM2VzdV9saW5rKTtcbitcdGlmIChzdWJzeXMtXHUwMDNlY2xlYXJfc3Vic3lzdGVtKVxuK1x0XHRzdWJzeXMtXHUwMDNlY2xlYXJfc3Vic3lzdGVtKHN1YnN5cywgaW5mby1cdTAwM2VuZXRfbnMpO1xuIFx0dW5saW5rX2dyb3VwKGdyb3VwKTtcbi1cdG11dGV4X3VubG9jayhcdTAwMjZjb25maWdmc19zdWJzeXN0ZW1fbXV0ZXgpO1xuLVx0Y29uZmlnZnNfcmVsZWFzZV9mcygpO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX211dGV4KTtcbitcdGNvbmZpZ2ZzX3JlbGVhc2VfZnMoTlVMTCk7XG4rXHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTtcbiB9XG4gXG4gRVhQT1JUX1NZTUJPTChjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0pO1xuZGlmZiAtLWdpdCBhL2ZzL2NvbmZpZ2ZzL21vdW50LmMgYi9mcy9jb25maWdmcy9tb3VudC5jXG5pbmRleCA0OTI5ZjM0MzExODk0Ni4uNzk0MTI1N2Q1NThiNzIgMTAwNjQ0XG4tLS0gYS9mcy9jb25maWdmcy9tb3VudC5jXG4rKysgYi9mcy9jb25maWdmcy9tb3VudC5jXG5AQCAtMjIsMTAgKzIyLDE5IEBAXG4gLyogUmFuZG9tIG1hZ2ljIG51bWJlciAqL1xuICNkZWZpbmUgQ09ORklHRlNfTUFHSUMgMHg2MjY1NjU3MFxuIFxuLXN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKmNvbmZpZ2ZzX21vdW50ID0gTlVMTDtcbiBzdHJ1Y3Qga21lbV9jYWNoZSAqY29uZmlnZnNfZGlyX2NhY2hlcDtcbi1zdGF0aWMgaW50IGNvbmZpZ2ZzX21udF9jb3VudCA9IDA7XG4rc3RhdGljIERFRklORV9YQVJSQVkoY29uZmlnZnNfc3VwZXJfeGEpO1xuK3N0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqY29uZmlnZnNfcm9vdDtcbitzdGF0aWMgREVGSU5FX1NQSU5MT0NLKGNvbmZpZ2ZzX3Bpbl9sb2NrKTtcbiBcbitzdGF0aWMgdTY0IGNvbmZpZ2ZzX25zX2lkKHN0cnVjdCBuZXQgKm5ldF9ucylcbit7XG4rXHRzdHJ1Y3QgbnNfY29tbW9uICpucyA9IG5ldF9ucyA/IHRvX25zX2NvbW1vbihuZXRfbnMpIDogTlVMTDtcbitcbitcdGlmICghbnMgfHwgbmV0X25zID09IFx1MDAyNmluaXRfbmV0KVxuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiBucy1cdTAwM2Vuc19pZDtcbit9XG4gXG4gc3RhdGljIHZvaWQgY29uZmlnZnNfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIHtcbkBAIC00MCwyOCArNDksODIgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGNvbmZpZ2ZzX29wcyA9IHtcbiBcdC5mcmVlX2lub2RlXHQ9IGNvbmZpZ2ZzX2ZyZWVfaW5vZGUsXG4gfTtcbiBcbi1zdGF0aWMgc3RydWN0IGNvbmZpZ19ncm91cCBjb25maWdmc19yb290X2dyb3VwID0ge1xuLVx0LmNnX2l0ZW0gPSB7XG4tXHRcdC5jaV9uYW1lYnVmXHQ9IFwicm9vdFwiLFxuLVx0XHQuY2lfbmFtZVx0PSBjb25maWdmc19yb290X2dyb3VwLmNnX2l0ZW0uY2lfbmFtZWJ1Zixcbi1cdH0sXG4tfTtcbitib29sIGNvbmZpZ2ZzX2lzX3Jvb3Qoc3RydWN0IGNvbmZpZ19pdGVtICppdGVtKVxuK3tcbitcdHN0cnVjdCBjb25maWdmc19kaXJlbnQgKnNkO1xuK1xuK1x0aWYgKCFpdGVtLVx1MDAzZWNpX2RlbnRyeSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1x0c2QgPSBpdGVtLVx1MDAzZWNpX2RlbnRyeS1cdTAwM2VkX2ZzZGF0YTtcbitcdHJldHVybiAhIShzZC1cdTAwM2VzX3R5cGUgXHUwMDI2IENPTkZJR0ZTX1JPT1QpO1xuK31cbiBcbi1pbnQgY29uZmlnZnNfaXNfcm9vdChzdHJ1Y3QgY29uZmlnX2l0ZW0gKml0ZW0pXG4rc3RhdGljIHZvaWQgY29uZmlnZnNfZmlsbF9zdXBlcl9pbmZvKHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvKVxuIHtcbi1cdHJldHVybiBpdGVtID09IFx1MDAyNmNvbmZpZ2ZzX3Jvb3RfZ3JvdXAuY2dfaXRlbTtcbitcdElOSVRfTElTVF9IRUFEKFx1MDAyNmluZm8tXHUwMDNlcm9vdC5zX3NpYmxpbmcpO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aW5mby1cdTAwM2Vyb290LnNfY2hpbGRyZW4pO1xuK1x0aW5mby1cdTAwM2Vyb290LnNfdHlwZSA9IENPTkZJR0ZTX1JPT1Q7XG4rXHRpbmZvLVx1MDAzZXJvb3Quc19lbGVtZW50ID0gXHUwMDI2aW5mby1cdTAwM2Vncm91cC5jZ19pdGVtO1xuK1x0c3Ryc2NweShpbmZvLVx1MDAzZWdyb3VwLmNnX2l0ZW0uY2lfbmFtZWJ1ZiwgXCJyb290XCIsIDQpO1xuK1x0aW5mby1cdTAwM2Vncm91cC5jZ19pdGVtLmNpX25hbWUgPSBpbmZvLVx1MDAzZWdyb3VwLmNnX2l0ZW0uY2lfbmFtZWJ1ZjtcbitcdGNvbmZpZ19ncm91cF9pbml0KFx1MDAyNmluZm8tXHUwMDNlZ3JvdXApO1xuK1x0SU5JVF9MSVNUX0hFQUQoXHUwMDI2aW5mby1cdTAwM2VzdWJzeXNfbGlzdCk7XG4rXHRtdXRleF9pbml0KFx1MDAyNmluZm8tXHUwMDNlc3Vic3lzX211dGV4KTtcbitcdHJlZmNvdW50X3NldChcdTAwMjZpbmZvLVx1MDAzZXJlZiwgMSk7XG4rXHRpbmZvLVx1MDAzZW1udF9jb3VudCA9IDA7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgY29uZmlnZnNfZGlyZW50IGNvbmZpZ2ZzX3Jvb3QgPSB7XG4tXHQuc19zaWJsaW5nXHQ9IExJU1RfSEVBRF9JTklUKGNvbmZpZ2ZzX3Jvb3Quc19zaWJsaW5nKSxcbi1cdC5zX2NoaWxkcmVuXHQ9IExJU1RfSEVBRF9JTklUKGNvbmZpZ2ZzX3Jvb3Quc19jaGlsZHJlbiksXG4tXHQuc19lbGVtZW50XHQ9IFx1MDAyNmNvbmZpZ2ZzX3Jvb3RfZ3JvdXAuY2dfaXRlbSxcbi1cdC5zX3R5cGVcdFx0PSBDT05GSUdGU19ST09ULFxuLVx0LnNfaWF0dHJcdD0gTlVMTCxcbi19O1xuK3N0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICpjb25maWdmc19nZXRfc3VwZXJfaW5mbyhzdHJ1Y3QgbmV0ICpuZXRfbnMpXG4re1xuK1x0c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm87XG4rXHR1NjQgbnNfaWQgPSBjb25maWdmc19uc19pZChuZXRfbnMpO1xuK1x0aW50IGVycjtcbitcbitcdHhhX2xvY2soXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEpO1xuK1x0aW5mbyA9IHhhX2xvYWQoXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEsIG5zX2lkKTtcbitcdGlmIChpbmZvKSB7XG4rXHRcdGlmICghcmVmY291bnRfaW5jX25vdF96ZXJvKChcdTAwMjZpbmZvLVx1MDAzZXJlZikpKVxuK1x0XHRcdGluZm8gPSBFUlJfUFRSKC1FQlVTWSk7XG4rXHRcdHhhX3VubG9jayhcdTAwMjZjb25maWdmc19zdXBlcl94YSk7XG4rXHRcdHJldHVybiBpbmZvO1xuK1x0fVxuK1x0aW5mbyA9IGt6YWxsb2Nfb2JqKCppbmZvKTtcbitcdGlmICghaW5mbykge1xuK1x0XHR4YV91bmxvY2soXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEpO1xuK1x0XHRyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTtcbitcdH1cbitcbitcdGluZm8tXHUwMDNlbmV0X25zID0gZ2V0X25ldChuZXRfbnMpO1xuK1x0Y29uZmlnZnNfZmlsbF9zdXBlcl9pbmZvKGluZm8pO1xuK1x0ZXJyID0gX194YV9pbnNlcnQoXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEsIG5zX2lkLFxuK1x0XHRcdCAgaW5mbywgR0ZQX0tFUk5FTCk7XG4rXHR4YV91bmxvY2soXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEpO1xuK1x0aWYgKGVyciBcdTAwM2MgMCkge1xuK1x0XHRwdXRfbmV0KGluZm8tXHUwMDNlbmV0X25zKTtcbitcdFx0a2ZyZWUoaW5mbyk7XG4rXHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4rXHR9XG4rXHRyZXR1cm4gaW5mbztcbit9XG4rXG4rdm9pZCBjb25maWdmc19wdXRfc3VwZXJfaW5mbyhzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbylcbit7XG4rXHR1NjQgbnNfaWQgPSBjb25maWdmc19uc19pZChpbmZvLVx1MDAzZW5ldF9ucyk7XG4rXG4rXHR4YV9sb2NrKFx1MDAyNmNvbmZpZ2ZzX3N1cGVyX3hhKTtcbitcdGlmICghcmVmY291bnRfZGVjX2FuZF90ZXN0KFx1MDAyNmluZm8tXHUwMDNlcmVmKSkge1xuK1x0XHR4YV91bmxvY2soXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEpO1xuK1x0XHRyZXR1cm47XG4rXHR9XG4rXHRfX3hhX2VyYXNlKFx1MDAyNmNvbmZpZ2ZzX3N1cGVyX3hhLCBuc19pZCk7XG4rXHR4YV91bmxvY2soXHUwMDI2Y29uZmlnZnNfc3VwZXJfeGEpO1xuK1x0cHV0X25ldChpbmZvLVx1MDAzZW5ldF9ucyk7XG4rXHRrZnJlZShpbmZvKTtcbit9XG4gXG4gc3RhdGljIGludCBjb25maWdmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiB7XG4rXHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbyA9IHNiLVx1MDAzZXNfZnNfaW5mbztcbiBcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpyb290O1xuIFxuQEAgLTcyLDY2ICsxMzUsMTYyIEBAIHN0YXRpYyBpbnQgY29uZmlnZnNfZmlsbF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4gXHRzYi1cdTAwM2VzX3RpbWVfZ3JhbiA9IDE7XG4gXG4gXHRpbm9kZSA9IGNvbmZpZ2ZzX25ld19pbm9kZShTX0lGRElSIHwgU19JUldYVSB8IFNfSVJVR08gfCBTX0lYVUdPLFxuLVx0XHRcdFx0ICAgXHUwMDI2Y29uZmlnZnNfcm9vdCwgc2IpO1xuLVx0aWYgKGlub2RlKSB7XG4tXHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZjb25maWdmc19yb290X2lub2RlX29wZXJhdGlvbnM7XG4tXHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2Y29uZmlnZnNfZGlyX29wZXJhdGlvbnM7XG4tXHRcdC8qIGRpcmVjdG9yeSBpbm9kZXMgc3RhcnQgb2ZmIHdpdGggaV9ubGluayA9PSAyIChmb3IgXCIuXCIgZW50cnkpICovXG4tXHRcdGluY19ubGluayhpbm9kZSk7XG4tXHR9IGVsc2Uge1xuK1x0XHRcdFx0ICAgXHUwMDI2aW5mby1cdTAwM2Vyb290LCBzYik7XG4rXHRpZiAoSVNfRVJSKGlub2RlKSkge1xuIFx0XHRwcl9kZWJ1ZyhcImNvdWxkIG5vdCBnZXQgcm9vdCBpbm9kZVxcblwiKTtcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRcdHJldHVybiBQVFJfRVJSKGlub2RlKTtcbiBcdH1cbitcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZjb25maWdmc19yb290X2lub2RlX29wZXJhdGlvbnM7XG4rXHRpbm9kZS1cdTAwM2VpX2ZvcCA9IFx1MDAyNmNvbmZpZ2ZzX2Rpcl9vcGVyYXRpb25zO1xuK1x0LyogZGlyZWN0b3J5IGlub2RlcyBzdGFydCBvZmYgd2l0aCBpX25saW5rID09IDIgKGZvciBcIi5cIiBlbnRyeSkgKi9cbitcdGluY19ubGluayhpbm9kZSk7XG4gXG4gXHRyb290ID0gZF9tYWtlX3Jvb3QoaW5vZGUpO1xuIFx0aWYgKCFyb290KSB7XG4gXHRcdHByX2RlYnVnKFwiJXM6IGNvdWxkIG5vdCBnZXQgcm9vdCBkZW50cnkhXFxuXCIsX19mdW5jX18pO1xuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcdH1cbi1cdGNvbmZpZ19ncm91cF9pbml0KFx1MDAyNmNvbmZpZ2ZzX3Jvb3RfZ3JvdXApO1xuLVx0Y29uZmlnZnNfcm9vdF9ncm91cC5jZ19pdGVtLmNpX2RlbnRyeSA9IHJvb3Q7XG4tXHRyb290LVx1MDAzZWRfZnNkYXRhID0gXHUwMDI2Y29uZmlnZnNfcm9vdDtcbitcdGluZm8tXHUwMDNlZ3JvdXAuY2dfaXRlbS5jaV9kZW50cnkgPSByb290O1xuK1x0cm9vdC1cdTAwM2VkX2ZzZGF0YSA9IFx1MDAyNmluZm8tXHUwMDNlcm9vdDtcbiBcdHNiLVx1MDAzZXNfcm9vdCA9IHJvb3Q7XG4gXHRzZXRfZGVmYXVsdF9kX29wKHNiLCBcdTAwMjZjb25maWdmc19kZW50cnlfb3BzKTsgLyogdGhlIHJlc3QgZ2V0IHRoYXQgKi9cbiBcdHNiLVx1MDAzZXNfZF9mbGFncyB8PSBEQ0FDSEVfRE9OVENBQ0hFO1xuK1xuK1x0Y29uZmlnZnNfbGlua19zdWJzeXN0ZW1zKHNiLCBpbmZvKTtcbitcbiBcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IGNvbmZpZ2ZzX2dldF90cmVlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbiB7XG4tXHRyZXR1cm4gZ2V0X3RyZWVfc2luZ2xlKGZjLCBjb25maWdmc19maWxsX3N1cGVyKTtcbitcdHN0cnVjdCBuZXQgKm5ldF9ucyA9IGZjLVx1MDAzZWZzX3ByaXZhdGU7XG4rXHRzdHJ1Y3QgY29uZmlnZnNfc3VwZXJfaW5mbyAqaW5mbztcbitcdGludCBlcnI7XG4rXG4rXHRpbmZvID0gY29uZmlnZnNfZ2V0X3N1cGVyX2luZm8obmV0X25zKTtcbitcdGlmIChJU19FUlIoaW5mbykpXG4rXHRcdHJldHVybiBQVFJfRVJSKGluZm8pO1xuK1xuK1x0ZXJyID0gZ2V0X3RyZWVfa2V5ZWQoZmMsIGNvbmZpZ2ZzX2ZpbGxfc3VwZXIsIGluZm8pO1xuK1x0aWYgKGVyciBcdTAwMjZcdTAwMjYgZmMtXHUwMDNlc19mc19pbmZvKVxuK1x0XHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhpbmZvKTtcbitcdHJldHVybiBlcnI7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIGNvbmZpZ2ZzX2ZzX2NvbnRleHRfZnJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG4re1xuK1x0c3RydWN0IG5ldCAqbmV0X25zID0gZmMtXHUwMDNlZnNfcHJpdmF0ZTtcbitcbitcdGZjLVx1MDAzZWZzX3ByaXZhdGUgPSBOVUxMO1xuK1x0cHV0X25ldChuZXRfbnMpO1xuIH1cbiBcbiBzdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBjb25maWdmc19jb250ZXh0X29wcyA9IHtcbiBcdC5nZXRfdHJlZVx0PSBjb25maWdmc19nZXRfdHJlZSxcbitcdC5mcmVlXHRcdD0gY29uZmlnZnNfZnNfY29udGV4dF9mcmVlLFxuIH07XG4gXG4gc3RhdGljIGludCBjb25maWdmc19pbml0X2ZzX2NvbnRleHQoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxuIHtcbitcdHN0cnVjdCBuZXQgKm5ldF9ucyA9IGdldF9uZXQoY3VycmVudC1cdTAwM2Vuc3Byb3h5LVx1MDAzZW5ldF9ucyk7XG4rXG4rXHRmYy1cdTAwM2Vmc19wcml2YXRlID0gbmV0X25zO1xuIFx0ZmMtXHUwMDNlb3BzID0gXHUwMDI2Y29uZmlnZnNfY29udGV4dF9vcHM7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgY29uZmlnZnNfa2lsbF9zYihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuK3tcbitcdHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICppbmZvID0gc2ItXHUwMDNlc19mc19pbmZvO1xuK1xuK1x0Y29uZmlnZnNfdW5saW5rX3N1YnN5c3RlbXMoc2IsIGluZm8pO1xuK1x0a2lsbF9hbm9uX3N1cGVyKHNiKTtcbitcdGNvbmZpZ2ZzX3B1dF9zdXBlcl9pbmZvKGluZm8pO1xuK1x0c2ItXHUwMDNlc19mc19pbmZvID0gTlVMTDtcbit9XG4rXG4gc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGNvbmZpZ2ZzX2ZzX3R5cGUgPSB7XG4gXHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiBcdC5uYW1lXHRcdD0gXCJjb25maWdmc1wiLFxuIFx0LmluaXRfZnNfY29udGV4dCA9IGNvbmZpZ2ZzX2luaXRfZnNfY29udGV4dCxcbi1cdC5raWxsX3NiXHQ9IGtpbGxfYW5vbl9zdXBlcixcbitcdC5raWxsX3NiXHQ9IGNvbmZpZ2ZzX2tpbGxfc2IsXG4rXHQuZnNfZmxhZ3NcdD0gRlNfVVNFUk5TX01PVU5ULFxuIH07XG4gTU9EVUxFX0FMSUFTX0ZTKFwiY29uZmlnZnNcIik7XG4gXG4tc3RydWN0IGRlbnRyeSAqY29uZmlnZnNfcGluX2ZzKHZvaWQpXG4rc3RydWN0IGRlbnRyeSAqY29uZmlnZnNfcGluX2ZzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4ge1xuLVx0aW50IGVyciA9IHNpbXBsZV9waW5fZnMoXHUwMDI2Y29uZmlnZnNfZnNfdHlwZSwgXHUwMDI2Y29uZmlnZnNfbW91bnQsXG4tXHRcdFx0ICAgICBcdTAwMjZjb25maWdmc19tbnRfY291bnQpO1xuLVx0cmV0dXJuIGVyciA/IEVSUl9QVFIoZXJyKSA6IGNvbmZpZ2ZzX21vdW50LVx1MDAzZW1udF9yb290O1xuK1x0c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm87XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xuK1x0aWYgKHNiKSB7XG4rXHRcdHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICpyb290ID0gY29uZmlnZnNfcm9vdDtcbitcdFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5ID0gc2ItXHUwMDNlc19yb290O1xuK1xuK1x0XHRpbmZvID0gc2ItXHUwMDNlc19mc19pbmZvO1xuK1x0XHRpZiAoIWluZm8tXHUwMDNlbW50KSB7XG4rXHRcdFx0c3RydWN0IHZmc21vdW50ICptbnQ7XG4rXG4rXHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xuK1x0XHRcdG1udCA9IG1udF9jbG9uZV9kaXJlY3Qocm9vdC1cdTAwM2VtbnQsIGRlbnRyeSk7XG4rXHRcdFx0aWYgKElTX0VSUihtbnQpKVxuK1x0XHRcdFx0cmV0dXJuIEVSUl9DQVNUKG1udCk7XG4rXHRcdFx0c3Bpbl9sb2NrKFx1MDAyNmNvbmZpZ2ZzX3Bpbl9sb2NrKTtcbitcdFx0XHRpbmZvLVx1MDAzZW1udCA9IG1udDtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRtbnRnZXQoaW5mby1cdTAwM2VtbnQpO1xuK1x0XHR9XG4rXHR9IGVsc2Uge1xuK1x0XHRpbmZvID0gY29uZmlnZnNfcm9vdDtcbitcdFx0aWYgKCFpbmZvLVx1MDAzZW1udCkge1xuK1x0XHRcdHN0cnVjdCB2ZnNtb3VudCAqbW50O1xuK1xuK1x0XHRcdHNwaW5fdW5sb2NrKFx1MDAyNmNvbmZpZ2ZzX3Bpbl9sb2NrKTtcbitcdFx0XHRtbnQgPSB2ZnNfa2Vybl9tb3VudChcdTAwMjZjb25maWdmc19mc190eXBlLCBTQl9LRVJOTU9VTlQsXG4rXHRcdFx0XHRcdCAgICAgY29uZmlnZnNfZnNfdHlwZS5uYW1lLCBOVUxMKTtcbitcdFx0XHRpZiAoSVNfRVJSKG1udCkpXG4rXHRcdFx0XHRyZXR1cm4gRVJSX0NBU1QobW50KTtcbitcdFx0XHRzcGluX2xvY2soXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xuK1x0XHRcdGluZm8tXHUwMDNlbW50ID0gbW50O1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdG1udGdldChpbmZvLVx1MDAzZW1udCk7XG4rXHRcdH1cbitcdH1cbitcdGluZm8tXHUwMDNlbW50X2NvdW50Kys7XG4rXHRzcGluX3VubG9jayhcdTAwMjZjb25maWdmc19waW5fbG9jayk7XG4rXHRyZXR1cm4gaW5mby1cdTAwM2VtbnQtXHUwMDNlbW50X3Jvb3Q7XG4gfVxuIFxuLXZvaWQgY29uZmlnZnNfcmVsZWFzZV9mcyh2b2lkKVxuK3ZvaWQgY29uZmlnZnNfcmVsZWFzZV9mcyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIHtcbi1cdHNpbXBsZV9yZWxlYXNlX2ZzKFx1MDAyNmNvbmZpZ2ZzX21vdW50LCBcdTAwMjZjb25maWdmc19tbnRfY291bnQpO1xuK1x0c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8gPSBjb25maWdmc19yb290O1xuK1x0c3RydWN0IHZmc21vdW50ICptbnQ7XG4rXG4rXHRzcGluX2xvY2soXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xuK1x0aWYgKHNiKVxuK1x0XHRpbmZvID0gc2ItXHUwMDNlc19mc19pbmZvO1xuK1x0bW50ID0gaW5mby1cdTAwM2VtbnQ7XG4rXHRpZiAoLS1pbmZvLVx1MDAzZW1udF9jb3VudClcbitcdFx0aW5mby1cdTAwM2VtbnQgPSBOVUxMO1xuK1x0c3Bpbl91bmxvY2soXHUwMDI2Y29uZmlnZnNfcGluX2xvY2spO1xuK1x0bW50cHV0KG1udCk7XG4gfVxuIFxuK3N0cnVjdCBuZXQgKmNvbmZpZ2ZzX25zX2Zyb21fZ3JvdXAoc3RydWN0IGNvbmZpZ19ncm91cCAqZ3JvdXApXG4re1xuK1x0c3RydWN0IGNvbmZpZ2ZzX3N1cGVyX2luZm8gKmluZm8gPSBjb25maWdmc19yb290O1xuK1x0c3RydWN0IG5ldCAqbmV0X25zID0gTlVMTDtcbitcbitcdGlmIChncm91cCkge1xuK1x0XHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnkgPSBncm91cC1cdTAwM2VjZ19pdGVtLmNpX2RlbnRyeTtcbitcbitcdFx0aW5mbyA9IGRlbnRyeS1cdTAwM2VkX3NiLVx1MDAzZXNfZnNfaW5mbztcbitcdFx0aWYgKGluZm8pXG4rXHRcdFx0bmV0X25zID0gaW5mby1cdTAwM2VuZXRfbnM7XG4rXHR9XG4rXHRyZXR1cm4gbmV0X25zO1xuK31cbitFWFBPUlRfU1lNQk9MX0dQTChjb25maWdmc19uc19mcm9tX2dyb3VwKTtcbiBcbiBzdGF0aWMgaW50IF9faW5pdCBjb25maWdmc19pbml0KHZvaWQpXG4ge1xuQEAgLTE0MywxOCArMzAyLDI3IEBAIHN0YXRpYyBpbnQgX19pbml0IGNvbmZpZ2ZzX2luaXQodm9pZClcbiBcdGlmICghY29uZmlnZnNfZGlyX2NhY2hlcClcbiBcdFx0Z290byBvdXQ7XG4gXG4rXHRjb25maWdmc19yb290ID0gY29uZmlnZnNfZ2V0X3N1cGVyX2luZm8oXHUwMDI2aW5pdF9uZXQpO1xuK1x0aWYgKElTX0VSUihjb25maWdmc19yb290KSkge1xuK1x0XHRlcnIgPSBQVFJfRVJSKGNvbmZpZ2ZzX3Jvb3QpO1xuK1x0XHRnb3RvIG91dDI7XG4rXHR9XG4rXG4gXHRlcnIgPSBzeXNmc19jcmVhdGVfbW91bnRfcG9pbnQoa2VybmVsX2tvYmosIFwiY29uZmlnXCIpO1xuIFx0aWYgKGVycilcbi1cdFx0Z290byBvdXQyO1xuK1x0XHRnb3RvIG91dDM7XG4gXG4gXHRlcnIgPSByZWdpc3Rlcl9maWxlc3lzdGVtKFx1MDAyNmNvbmZpZ2ZzX2ZzX3R5cGUpO1xuIFx0aWYgKGVycilcbi1cdFx0Z290byBvdXQzO1xuK1x0XHRnb3RvIG91dDQ7XG4gXG4gXHRyZXR1cm4gMDtcbi1vdXQzOlxuK291dDQ6XG4gXHRwcl9lcnIoXCJVbmFibGUgdG8gcmVnaXN0ZXIgZmlsZXN5c3RlbSFcXG5cIik7XG4gXHRzeXNmc19yZW1vdmVfbW91bnRfcG9pbnQoa2VybmVsX2tvYmosIFwiY29uZmlnXCIpO1xuK291dDM6XG4rXHRjb25maWdmc19wdXRfc3VwZXJfaW5mbyhjb25maWdmc19yb290KTtcbitcdGNvbmZpZ2ZzX3Jvb3QgPSBOVUxMO1xuIG91dDI6XG4gXHRrbWVtX2NhY2hlX2Rlc3Ryb3koY29uZmlnZnNfZGlyX2NhY2hlcCk7XG4gXHRjb25maWdmc19kaXJfY2FjaGVwID0gTlVMTDtcbkBAIC0xNjYsNiArMzM0LDggQEAgc3RhdGljIHZvaWQgX19leGl0IGNvbmZpZ2ZzX2V4aXQodm9pZClcbiB7XG4gXHR1bnJlZ2lzdGVyX2ZpbGVzeXN0ZW0oXHUwMDI2Y29uZmlnZnNfZnNfdHlwZSk7XG4gXHRzeXNmc19yZW1vdmVfbW91bnRfcG9pbnQoa2VybmVsX2tvYmosIFwiY29uZmlnXCIpO1xuK1x0Y29uZmlnZnNfcHV0X3N1cGVyX2luZm8oY29uZmlnZnNfcm9vdCk7XG4rXHRjb25maWdmc19yb290ID0gTlVMTDtcbiBcdGttZW1fY2FjaGVfZGVzdHJveShjb25maWdmc19kaXJfY2FjaGVwKTtcbiBcdGNvbmZpZ2ZzX2Rpcl9jYWNoZXAgPSBOVUxMO1xuIH1cbmRpZmYgLS1naXQgYS9mcy9uYW1lc3BhY2UuYyBiL2ZzL25hbWVzcGFjZS5jXG5pbmRleCAzZDVjZDViZjNiMDUzNy4uZTdhYmJmNjMyY2M3MGQgMTAwNjQ0XG4tLS0gYS9mcy9uYW1lc3BhY2UuY1xuKysrIGIvZnMvbmFtZXNwYWNlLmNcbkBAIC0xNDgyLDYgKzE0ODIsMTcgQEAgc3RydWN0IHZmc21vdW50ICptbnRfY2xvbmVfaW50ZXJuYWwoY29uc3Qgc3RydWN0IHBhdGggKnBhdGgpXG4gXHRyZXR1cm4gXHUwMDI2cC1cdTAwM2VtbnQ7XG4gfVxuIFxuK3N0cnVjdCB2ZnNtb3VudCAqbW50X2Nsb25lX2RpcmVjdChzdHJ1Y3QgdmZzbW91bnQgKm1udCwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KVxuK3tcbitcdHN0cnVjdCBtb3VudCAqcDtcbitcbitcdHAgPSBjbG9uZV9tbnQocmVhbF9tb3VudChtbnQpLCBkZW50cnksIENMX1NMQVZFKTtcbitcdGlmIChJU19FUlIocCkpXG4rXHRcdHJldHVybiBFUlJfQ0FTVChwKTtcbitcdHAtXHUwMDNlbW50Lm1udF9mbGFncyB8PSBNTlRfSU5URVJOQUw7XG4rXHRyZXR1cm4gXHUwMDI2cC1cdTAwM2VtbnQ7XG4rfVxuK1xuIC8qXG4gICogUmV0dXJucyB0aGUgbW91bnQgd2hpY2ggZWl0aGVyIGhhcyB0aGUgc3BlY2lmaWVkIG1udF9pZCwgb3IgaGFzIHRoZSBuZXh0XG4gICogc21hbGxlc3QgaWQgYWZlciB0aGUgc3BlY2lmaWVkIG9uZS5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmggYi9pbmNsdWRlL2xpbnV4L2NvbmZpZ2ZzLmhcbmluZGV4IGVmNjVjNzViZWVhYWQ4Li43NmUwYmIxYTcyYjlkYiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY29uZmlnZnMuaFxuKysrIGIvaW5jbHVkZS9saW51eC9jb25maWdmcy5oXG5AQCAtMjQsNiArMjQsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpc3QuaFx1MDAzZSAgIC8qIHN0cnVjdCBsaXN0X2hlYWQgKi9cbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9rcmVmLmhcdTAwM2UgICAvKiBzdHJ1Y3Qga3JlZiAqL1xuICNpbmNsdWRlIFx1MDAzY2xpbnV4L211dGV4LmhcdTAwM2UgIC8qIHN0cnVjdCBtdXRleCAqL1xuKyNpbmNsdWRlIFx1MDAzY25ldC9uZXRfbmFtZXNwYWNlLmhcdTAwM2UgLyogc3RydWN0IG5ldCAqL1xuIFxuICNkZWZpbmUgQ09ORklHRlNfSVRFTV9OQU1FX0xFTlx0MjBcbiBcbkBAIC0yMjYsOCArMjI3LDEzIEBAIHN0cnVjdCBjb25maWdmc19ncm91cF9vcGVyYXRpb25zIHtcbiB9O1xuIFxuIHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0ge1xuK1x0c3RydWN0IGxpc3RfaGVhZFx0c3VfbGluaztcbiBcdHN0cnVjdCBjb25maWdfZ3JvdXBcdHN1X2dyb3VwO1xuIFx0c3RydWN0IG11dGV4XHRcdHN1X211dGV4O1xuK1x0aW50ICgqZmlsbF9zdWJzeXN0ZW0pKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cyxcbitcdFx0XHQgICAgICBzdHJ1Y3QgbmV0ICpuZXRfbnMpO1xuK1x0dm9pZCAoKmNsZWFyX3N1YnN5c3RlbSkoc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqc3Vic3lzLFxuK1x0XHRcdFx0c3RydWN0IG5ldCAqbmV0X25zKTtcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgc3RydWN0IGNvbmZpZ2ZzX3N1YnN5c3RlbSAqdG9fY29uZmlnZnNfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKVxuQEAgLTI1Miw2ICsyNTgsOCBAQCBjb25maWdmc19yZWdpc3Rlcl9kZWZhdWx0X2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKnBhcmVudF9ncm91cCxcbiBcdFx0XHRcdGNvbnN0IHN0cnVjdCBjb25maWdfaXRlbV90eXBlICppdGVtX3R5cGUpO1xuIHZvaWQgY29uZmlnZnNfdW5yZWdpc3Rlcl9kZWZhdWx0X2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKTtcbiBcbitzdHJ1Y3QgbmV0ICpjb25maWdmc19uc19mcm9tX2dyb3VwKHN0cnVjdCBjb25maWdfZ3JvdXAgKmdyb3VwKTtcbitcbiAvKiBUaGVzZSBmdW5jdGlvbnMgY2FuIHNsZWVwIGFuZCBjYW4gYWxsb2Mgd2l0aCBHRlBfS0VSTkVMICovXG4gLyogV0FSTklORzogVGhlc2UgY2Fubm90IGJlIGNhbGxlZCB1bmRlcm5lYXRoIGNvbmZpZ2ZzIGNhbGxiYWNrcyEhICovXG4gaW50IGNvbmZpZ2ZzX2RlcGVuZF9pdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cyxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vdW50LmggYi9pbmNsdWRlL2xpbnV4L21vdW50LmhcbmluZGV4IGFjZmU3ZWY4NmExYjNmLi43ZTdlN2Q2NmMzMDI0YiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW91bnQuaFxuKysrIGIvaW5jbHVkZS9saW51eC9tb3VudC5oXG5AQCAtNzUsNiArNzUsNyBAQCBleHRlcm4gdm9pZCBtbnRfZHJvcF93cml0ZV9maWxlKHN0cnVjdCBmaWxlICpmaWxlKTtcbiBleHRlcm4gdm9pZCBtbnRwdXQoc3RydWN0IHZmc21vdW50ICptbnQpO1xuIGV4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKm1udGdldChzdHJ1Y3QgdmZzbW91bnQgKm1udCk7XG4gZXh0ZXJuIHZvaWQgbW50X21ha2Vfc2hvcnR0ZXJtKHN0cnVjdCB2ZnNtb3VudCAqbW50KTtcbitleHRlcm4gc3RydWN0IHZmc21vdW50ICptbnRfY2xvbmVfZGlyZWN0KHN0cnVjdCB2ZnNtb3VudCAqbW50LCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpO1xuIGV4dGVybiBzdHJ1Y3QgdmZzbW91bnQgKm1udF9jbG9uZV9pbnRlcm5hbChjb25zdCBzdHJ1Y3QgcGF0aCAqcGF0aCk7XG4gZXh0ZXJuIGJvb2wgX19tbnRfaXNfcmVhZG9ubHkoY29uc3Qgc3RydWN0IHZmc21vdW50ICptbnQpO1xuIGV4dGVybiBib29sIG1udF9tYXlfc3VpZChzdHJ1Y3QgdmZzbW91bnQgKm1udCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxMDoxMDoxNS4zNDE0MDU2MloiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNjYxODcyNTE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgRnV6emluZyBJbXBhY3Qgb2YgdGhpcyBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgYSBub24tdHJpdmlhbCBmdW5jdGlvbmFsIGNoYW5nZSB0byB0aGUga2VybmVsLCBhbmQgdGhlcmVmb3JlLCBkZWZpbml0ZWx5IHdhcnJhbnRzIGZ1enppbmcuIFdlJ3JlIHRhbGtpbmcgYWJvdXQgYWRkaW5nIG5ldHdvcmsgbmFtZXNwYWNlIHN1cHBvcnQgdG8gTlZNZS1vRiB0YXJnZXQgYW5kIGNvbmZpZ2ZzLiBUaGlzIGlzbid0IGEgbWlub3IgdHdlYWs7IHRoaXMgZnVuZGFtZW50YWxseSBhbHRlcnMgaG93IHRoZXNlIHN1YnN5c3RlbXMgaW50ZXJhY3QgYW5kIHRoZWlyIHBvdGVudGlhbCBmb3IgZXhwb3N1cmUuXG5cblNwZWNpZmljYWxseSwgaXQncyB0aGUgbW9kaWZpY2F0aW9uIG9mIGBkcml2ZXJzL252bWUvdGFyZ2V0L2AgYW5kIGBmcy9jb25maWdmcy9gIHRoYXQncyB0aGUgcmVkIGZsYWcuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYG5ldF9uc2AgaW50byBgc3RydWN0IG52bWV0X3BvcnRgIGFuZCBgc3RydWN0IG52bWV0X3N1YnN5c2AgaXMgYSBtYWpvciBzdHJ1Y3R1cmFsIHNoaWZ0LiBUaGUgc3dpdGNoIHRvIFhBcnJheXMgKGBudm1ldF9wb3J0c194YWAsIGBudm1ldF9kaXNjX3hhYCwgYGNvbmZpZ2ZzX3N1cGVyX3hhYCkgaW5kZXhlZCBieSBgbnNfaWRgIHVuZGVyc2NvcmVzIHRoZSBjb3JlIGFyY2hpdGVjdHVyYWwgY2hhbmdlLiBUaGlzIGFsc28gaW5jbHVkZXMgdGhlIG5ldyBgY29uZmlnZnNfbnNfZnJvbV9ncm91cCgpYCBmdW5jdGlvbi4gRnVydGhlcm1vcmUsIHRoZSBjaGFuZ2UgdG8gYGZzL25hbWVzcGFjZS5jYCB0byBhZGQgYG1udF9jbG9uZV9kaXJlY3QoKWAgZm9yIG5hbWVzcGFjZSBjbG9uaW5nIGlzIHNpZ25pZmljYW50LlxuXG5UaGUgcmVhY2hhYmlsaXR5IGlzIGEgY3JpdGljYWwgY29uc2lkZXJhdGlvbi4gVGhpcyBjb2RlLCBhZmZlY3RpbmcgYm90aCBgZnMvY29uZmlnZnMvYCBhbmQgZHJpdmVycywgaXMgdmVyeSBsaWtlbHkgdG91Y2hlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0UgYW5kIFFFTVUsIG1ha2luZyBpdCBldmVuIG1vcmUgcmVsZXZhbnQgZnJvbSBhIHNlY3VyaXR5IHBlcnNwZWN0aXZlLiBJdCBkaXJlY3RseSBtb2RpZmllcyBjb3JlIGtlcm5lbCBsb2dpYywgbWFraW5nIGl0IHJpcGUgZm9yIGZ1enppbmcuIFRodXMsIGBXb3J0aEZ1enppbmc9dHJ1ZWAgaXMgdGhlIHJpZ2h0IGNvbmNsdXNpb24uXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSB3b3J0aCBmb2N1c2luZyBvbiBmb3IgZnV6emluZy4gSSd2ZSBjb21waWxlZCBhIGxpc3Q6XG5cbi0gYG52bWV0X2dldF9uc19pZGBcbi0gYG52bWV0X2dldF9wb3J0X2xpc3RgXG4tIGBudm1ldF9hZGRfcG9ydF9saXN0YFxuLSBgbnZtZXRfZGVsX3BvcnRfbGlzdGBcbi0gYG52bWV0X3N1YnN5c19tYWtlYFxuLSBgbnZtZXRfcG9ydHNfbWFrZWBcbi0gYG52bWV0X3Jvb3RfZGlzY292ZXJ5X25xbl9zaG93YFxuLSBgbnZtZXRfcm9vdF9kaXNjb3ZlcnlfbnFuX3N0b3JlYFxuLSBgbnZtZXRfY29uZmlnZnNfZmlsbF9zdWJzeXN0ZW1gXG4tIGBudm1ldF9jb25maWdmc19jbGVhcl9zdWJzeXN0ZW1gXG4tIGBudm1ldF9nZXRfZGlzY19zdWJzeXNgXG4tIGBudm1ldF9hZGRfZGlzY19zdWJzeXNgXG4tIGBudm1ldF9kZWxfZGlzY19zdWJzeXNgXG4tIGBudm1ldF9wb3J0X2Rpc2NfY2hhbmdlZGBcbi0gYG52bWV0X3N1YnN5c19kaXNjX2NoYW5nZWRgXG4tIGBudm1ldF9leGVjdXRlX2Rpc2NfZ2V0X2xvZ19wYWdlYFxuLSBgbnZtZV9sb29wX2ZpbmRfcG9ydGBcbi0gYG52bWV0X3JkbWFfZW5hYmxlX3BvcnRgXG4tIGBudm1ldF9yZG1hX2FkZF9wb3J0YFxuLSBgbnZtZXRfdGNwX2FkZF9wb3J0YFxuLSBgY29uZmlnZnNfbGlua19yb290YFxuLSBgY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtYFxuLSBgY29uZmlnZnNfbGlua19zdWJzeXN0ZW1zYFxuLSBgY29uZmlnZnNfdW5saW5rX3Jvb3RgXG4tIGBjb25maWdmc191bmxpbmtfc3Vic3lzdGVtc2Bcbi0gYGNvbmZpZ2ZzX3VucmVnaXN0ZXJfc3Vic3lzdGVtYFxuLSBgY29uZmlnZnNfZ2V0X3N1cGVyX2luZm9gXG4tIGBjb25maWdmc19wdXRfc3VwZXJfaW5mb2Bcbi0gYGNvbmZpZ2ZzX2ZpbGxfc3VwZXJgXG4tIGBjb25maWdmc19nZXRfdHJlZWBcbi0gYGNvbmZpZ2ZzX2tpbGxfc2JgXG4tIGBjb25maWdmc19waW5fZnNgXG4tIGBjb25maWdmc19yZWxlYXNlX2ZzYFxuLSBgY29uZmlnZnNfbnNfZnJvbV9ncm91cGBcbi0gYG1udF9jbG9uZV9kaXJlY3RgXG5cbkZyb20gdGhpcyBsaXN0LCBzb21lIGtleSBzeW1ib2xzIGp1bXAgb3V0IGFzIHBhcnRpY3VsYXJseSByZWxldmFudDogYGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbWAsIGBjb25maWdmc19saW5rX3N1YnN5c3RlbXNgLCBgY29uZmlnZnNfdW5saW5rX3N1YnN5c3RlbXNgLCBgY29uZmlnZnNfZ2V0X3N1cGVyX2luZm9gLCBgY29uZmlnZnNfZmlsbF9zdXBlcmAsIGBudm1ldF9jb25maWdmc19maWxsX3N1YnN5c3RlbWAsIGBudm1ldF9hZGRfZGlzY19zdWJzeXNgLCBgbnZtZXRfcG9ydHNfbWFrZWAsIGFuZCBgbnZtZXRfc3Vic3lzX21ha2VgLiBUaGVzZSBhcmUgdGhlIGNvcmUgZW50cnkgcG9pbnRzIGZvciB0aGUgbmV0d29yayBuYW1lc3BhY2UgaW50ZWdyYXRpb24gYW5kIHN1YnN5c3RlbSBtYW5hZ2VtZW50LlxuXG5GaW5hbGx5LCB3ZSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMuIE9idmlvdXNseSwgYENPTkZJR19DT05GSUdGU19GU2AgZm9yIGNvbmZpZ2ZzLCBhbmQgYENPTkZJR19OVk1FX1RBUkdFVGAgZm9yIE5WTWUgdGFyZ2V0IGFyZSBmdW5kYW1lbnRhbCBwcmVyZXF1aXNpdGVzLiBXZSBhbHNvIHNob3VsZCBpbnZlc3RpZ2F0ZSBgQ09ORklHX05WTUVfVEFSR0VUX0xPT1BgLCBgQ09ORklHX05WTUVfVEFSR0VUX1RDUGAsIGFuZCBgQ09ORklHX05WTUVfVEFSR0VUX1JETUFgIGFzIHRoZXkgbWlnaHQgb3BlbiBhZGRpdGlvbmFsIGF0dGFjayBzdXJmYWNlcyB0aHJvdWdoIHRoZSBkaWZmZXJlbnQgdHJhbnNwb3J0cy4gTGV0J3MgZGVsdmUgaW50byBgZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnYCBhbmQgYGZzL2NvbmZpZ2ZzL0tjb25maWdgIHRvIGNvbmZpcm0gYW5kIGlkZW50aWZ5IGFueSBvdGhlciByZWxldmFudCBkZXBlbmRlbmNpZXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE5OTM4LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTA6MTA6MjguMDAzMjgwMjE3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NTYyMDg2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvY29uZmlnZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2NvbmZpZ2ZzL2Rpci5jPTk4ND1zdGF0aWMgaW50IGNvbmZpZ2ZzX2R1bXAoc3RydWN0IGNvbmZpZ2ZzX2RpcmVudCAqc2QsIGludCBsZXZlbClcXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jLTEwMjYtICogc3Vic3lzdGVtIGlzbid0IHJlZ2lzdGVyZWQsIG9yIHdoZW4gY29uZmlnZnMgaXMgbG9hZGluZyBvciB1bmxvYWRpbmcuXFxuZnMvY29uZmlnZnMvZGlyLmM6MTAyNzogKiBKdXN0IGxpa2UgY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtKCkuICBTbyB3ZSB0YWtlIHRoZSBzYW1lXFxuZnMvY29uZmlnZnMvZGlyLmMtMTAyOC0gKiBwcmVjYXV0aW9ucy4gIFdlIHBpbiB0aGUgZmlsZXN5c3RlbS4gIFdlIGxvY2sgY29uZmlnZnNfZGlyZW50X2xvY2suXFxuLS1cXG5mcy9jb25maWdmcy9kaXIuYz0xODY0PXN0YXRpYyBpbnQgY29uZmlnZnNfbGlua19yb290KHN0cnVjdCBjb25maWdmc19zdXBlcl9pbmZvICAqaW5mbyxcXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jLTE5MTgtXFxuZnMvY29uZmlnZnMvZGlyLmM6MTkxOTppbnQgY29uZmlnZnNfcmVnaXN0ZXJfc3Vic3lzdGVtKHN0cnVjdCBjb25maWdmc19zdWJzeXN0ZW0gKnN1YnN5cylcXG5mcy9jb25maWdmcy9kaXIuYy0xOTIwLXtcXG4tLVxcbmZzL2NvbmZpZ2ZzL2Rpci5jPTIwODU9dm9pZCBjb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbShzdHJ1Y3QgY29uZmlnZnNfc3Vic3lzdGVtICpzdWJzeXMpXFxuLS1cXG5mcy9jb25maWdmcy9kaXIuYy0yMTA4LVxcbmZzL2NvbmZpZ2ZzL2Rpci5jOjIxMDk6RVhQT1JUX1NZTUJPTChjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW0pO1xcbmZzL2NvbmZpZ2ZzL2Rpci5jLTIxMTAtRVhQT1JUX1NZTUJPTChjb25maWdmc191bnJlZ2lzdGVyX3N1YnN5c3RlbSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDEwOjEwOjI4LjQ5ODkwNzE1N1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTQ3MDEwMjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIE5WTWUgVGFyZ2V0IENvbmZpZ3VyYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIHN0cmFpZ2h0IGluLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayBgZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnYC4gV2UncmUgb2J2aW91c2x5IGNvbmNlcm5lZCB3aXRoIGVuYWJsaW5nIG9yIGNvbmZpZ3VyaW5nIHRoZSBOVk1lIHRhcmdldCBmdW5jdGlvbmFsaXR5LCBhbmQgdGhhdCBLY29uZmlnIGZpbGUgaXMgdGhlICpjYW5vbmljYWwqIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgZm9yIHRoZSBjb250cm9sbGluZyBidWlsZCBvcHRpb25zLiBTcGVjaWZpY2FsbHksIEknbSBhZnRlciB0aGUgYE5WTUVfVEFSR0VUYCBzeW1ib2wuIEknZCBleHBlY3QgaXQgdG8gYmUgdGhlIG1haW4gc3dpdGNoLCB0aGUgZnVuZGFtZW50YWwgZmxhZy4gRG9lcyBpdCBleGlzdD8gV2hhdCBvdGhlciBjb25maWd1cmF0aW9uIG9wdGlvbnMgZG9lcyBpdCBkZXBlbmQgb24gb3IgaW50ZXJhY3Qgd2l0aD8gQXJlIHRoZXJlIHJlbGF0ZWQgc3ltYm9scyB0aGF0IG1pZ2h0IG5lZWQgdG8gYmUgZW5hYmxlZCBmb3IgaXQgdG8gZnVuY3Rpb24gY29ycmVjdGx5PyBBcmUgdGhlcmUgbW9yZSBncmFudWxhciBvcHRpb25zIEkgbmVlZCB0byBrbm93IGFib3V0IHRvIGNvbmZpZ3VyZSB0aGUgYmVoYXZpb3I/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3Qgb24gdGhlIHN5c3RlbSwgYW5kIHRoYXQgS2NvbmZpZyBmaWxlIHNob3VsZCBnaXZlIG1lIHRoZSBjb3JlIGluc2lnaHRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjI4MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTIzVDEwOjEwOjMyLjM5MzYxMDkwOVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTEzMjA5MjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBOVk1FX1RBUkdFVFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL252bWUvdGFyZ2V0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMi1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6Mzpjb25maWcgTlZNRV9UQVJHRVRcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNC1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBUYXJnZXQgc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xOS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6MjA6Y29uZmlnIE5WTUVfVEFSR0VUX0RFQlVHRlNcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMjEtICAgICAgICBib29sIFxcXCJOVk1lIFRhcmdldCBkZWJ1Z2ZzIHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctMjgtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjI5OmNvbmZpZyBOVk1FX1RBUkdFVF9QQVNTVEhSVVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0zMC1cXHRib29sIFxcXCJOVk1lIFRhcmdldCBQYXNzdGhyb3VnaCBzdXBwb3J0XFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTQwLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo0MTpjb25maWcgTlZNRV9UQVJHRVRfTE9PUFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy00Mi1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBsb29wYmFjayBkZXZpY2Ugc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy01MS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NTI6Y29uZmlnIE5WTUVfVEFSR0VUX1JETUFcXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIFJETUEgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctNjItXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjYzOmNvbmZpZyBOVk1FX1RBUkdFVF9GQ1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy02NC1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgRkMgdGFyZ2V0IGRyaXZlclxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy03My1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWc6NzQ6Y29uZmlnIE5WTUVfVEFSR0VUX0ZDTE9PUFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy03NS1cXHR0cmlzdGF0ZSBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgRkMgVHJhbnNwb3J0IExvb3BiYWNrIFRlc3QgZHJpdmVyXFxcIlxcbi0tXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTg2LVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZzo4Nzpjb25maWcgTlZNRV9UQVJHRVRfVENQXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTg4LVxcdHRyaXN0YXRlIFxcXCJOVk1lIG92ZXIgRmFicmljcyBUQ1AgdGFyZ2V0IHN1cHBvcnRcXFwiXFxuLS1cXG5kcml2ZXJzL252bWUvdGFyZ2V0L0tjb25maWctOTYtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjk3OmNvbmZpZyBOVk1FX1RBUkdFVF9UQ1BfVExTXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnLTk4LVxcdGJvb2wgXFxcIk5WTWUgb3ZlciBGYWJyaWNzIFRDUCB0YXJnZXQgVExTIGVuY3J5cHRpb24gc3VwcG9ydFxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMDktXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjExMDpjb25maWcgTlZNRV9UQVJHRVRfQVVUSFxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMTEtXFx0Ym9vbCBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgSW4tYmFuZCBBdXRoZW50aWNhdGlvbiBpbiB0YXJnZXQgc2lkZVxcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMTktXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjEyMDpjb25maWcgTlZNRV9UQVJHRVRfQVVUSF9ERUJVR1xcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMjEtXFx0Ym9vbCBcXFwiTlZNZSBvdmVyIEZhYnJpY3MgSW4tYmFuZCBBdXRoZW50aWNhdGlvbiBkZWJ1ZyBtZXNzYWdlc1xcXCJcXG4tLVxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMjgtXFxuZHJpdmVycy9udm1lL3RhcmdldC9LY29uZmlnOjEyOTpjb25maWcgTlZNRV9UQVJHRVRfUENJX0VQRlxcbmRyaXZlcnMvbnZtZS90YXJnZXQvS2NvbmZpZy0xMzAtXFx0dHJpc3RhdGUgXFxcIk5WTWUgUENJIEVuZHBvaW50IEZ1bmN0aW9uIHRhcmdldCBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxMDoxMDozNC41MDY4Mjg3NzdaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTk5ODU3ODA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkNvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIE5WTWUgVGFyZ2V0KipcblxuT2theSwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgY29yZSBjb25maWd1cmF0aW9ucyBhcmUgaW4gcGxhY2UgZm9yIHRoaXMgTlZNZSB0YXJnZXQgc2V0dXAuIEl0IGxvb2tzIGxpa2UgYENPTkZJR0ZTX0ZTYCBpcyB0aGUgYWJzb2x1dGUgbXVzdC1oYXZlIGhlcmUsIHRoYXQncyB0aGUgZm91bmRhdGlvbiB3ZSdyZSBidWlsZGluZyBvbi4gQW5kIG9idmlvdXNseSwgYE5WTUVfVEFSR0VUYCBpdHNlbGYgbmVlZHMgdG8gYmUgZW5hYmxlZC5cblxuQmV5b25kIHRoZSBjb3JlLCBpdCB3b3VsZCBiZSBzbWFydCB0byBlbmFibGUgdGhlIHRyYW5zcG9ydC1zcGVjaWZpYyBvcHRpb25zIGZvciB0ZXN0aW5nLiBgTlZNRV9UQVJHRVRfTE9PUGAsIGBOVk1FX1RBUkdFVF9UQ1BgLCBhbmQgYE5WTUVfVEFSR0VUX1JETUFgIGFyZSBhbGwgZ29vZCBjYW5kaWRhdGVzLiBIYXZpbmcgdGhvc2Ugb3B0aW9ucyB3aWxsIGFsbG93IG1lIHRvIHByb3Blcmx5IGV4ZXJjaXNlIHRoZSB0cmFuc3BvcnQtc3BlY2lmaWMgY29kZS5cblxuTGV0J3Mgc3RhcnQgYnkgZG91YmxlLWNoZWNraW5nIGBDT05GSUdGU19GU2AuIFRoYXQncyB0aGUgY3JpdGljYWwgc3RhcnRpbmcgcG9pbnQsIGFuZCBJIHdhbnQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgb2J2aW91cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMzMTgsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxMDoxMDozNy43MDY2ODg3NTNaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg1Njc2NTI3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBDT05GSUdGU19GU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvY29uZmlnZnMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2NvbmZpZ2ZzL0tjb25maWc6Mjpjb25maWcgQ09ORklHRlNfRlNcXG5mcy9jb25maWdmcy9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlVzZXJzcGFjZS1kcml2ZW4gY29uZmlndXJhdGlvbiBmaWxlc3lzdGVtXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yM1QxMDoxMDozNy44OTIzNzI5NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgyMTI2MDY0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBUaGlua2luZyoqXG5cbk9rYXksIHRpbWUgdG8gZ2V0IHRvIHdvcmsuIEZpcnN0IHRoaW5nJ3MgZmlyc3Q6IEkgbmVlZCB0byBleHBsaWNpdGx5IHNldCBgRW5hYmxlQ29uZmlnc2AgdG8gdGhlIHJlbGV2YW50IHRhcmdldCBjb25maWd1cmF0aW9uczogYFtcIkNPTkZJR0ZTX0ZTXCIsIFwiTlZNRV9UQVJHRVRcIiwgXCJOVk1FX1RBUkdFVF9MT09QXCIsIFwiTlZNRV9UQVJHRVRfVENQXCIsIFwiTlZNRV9UQVJHRVRfUkRNQVwiXWAuIFRoYXQgZW5zdXJlcyB0aG9zZSBtb2R1bGVzIGFyZSBwcm9wZXJseSBlbmFibGVkIGZvciB0aGlzIHByb2Nlc3MuXG5cbk5vdywgbGV0J3MgdHVybiBteSBhdHRlbnRpb24gdG8gdGhlIGNvcmUgZnVuY3Rpb25zLiBJIHNob3VsZCBleGFtaW5lIGBGb2N1c1N5bWJvbHNgIHRvIGVuc3VyZSBJIGhhdmUgYWxsIHRoZSBrZXkgcGxheWVycy4gSG1tLCBsZXQncyBzZWUuIEkndmUgZ290IGEgZ29vZCBzdGFydCB3aXRoOlxuYGNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbWBcbmBjb25maWdmc19saW5rX3N1YnN5c3RlbXNgXG5gY29uZmlnZnNfdW5saW5rX3N1YnN5c3RlbXNgXG5gY29uZmlnZnNfZ2V0X3N1cGVyX2luZm9gXG5gY29uZmlnZnNfZmlsbF9zdXBlcmBcbmBudm1ldF9jb25maWdmc19maWxsX3N1YnN5c3RlbWBcbmBudm1ldF9hZGRfZGlzY19zdWJzeXNgXG5gbnZtZXRfcG9ydHNfbWFrZWBcbmBudm1ldF9zdWJzeXNfbWFrZWBcblxuVGhhdCdzIGEgc29saWQgZm91bmRhdGlvbiBmb3IgbWFuYWdpbmcgdGhlIGZpbGVzeXN0ZW0gYW5kIE5WTWUgc3Vic3lzdGVtcy5cblxuQWxyaWdodCwgYnV0IEkgY2FuJ3QgYmUgdG9vIGhhc3R5LiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZG9uJ3QgbWlzcyBhbnl0aGluZy4gTGV0IG1lIGV4cGxvcmUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBmdW5jdGlvbnMgdGhhdCBtYXkgYmUgdXNlZnVsLiBPa2F5LCBsZXQncyBzZWU6XG5gbnZtZXRfZ2V0X3BvcnRfbGlzdGBcbmBudm1ldF9hZGRfcG9ydF9saXN0YFxuYG52bWV0X2RlbF9wb3J0X2xpc3RgXG5gbnZtZXRfcm9vdF9kaXNjb3ZlcnlfbnFuX3N0b3JlYFxuYG52bWV0X2V4ZWN1dGVfZGlzY19nZXRfbG9nX3BhZ2VgXG5cblRob3NlIGxvb2sgcHJvbWlzaW5nLCBlc3BlY2lhbGx5IGNvbmNlcm5pbmcgcG9ydCBtYW5hZ2VtZW50IGFuZCBkaXNjb3ZlcnkuIFRoZXkgZGVmaW5pdGVseSBuZWVkIHRvIGJlIGluY2x1ZGVkLiBJJ2xsIGFkZCB0aGVtIHRvIGBGb2N1c1N5bWJvbHNgLiBUaGF0IHNob3VsZCBnaXZlIG1lIGEgbW9yZSBjb21wcmVoZW5zaXZlIHZpZXcgb2YgdGhlIHN5c3RlbSdzIGlubmVyIHdvcmtpbmdzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzY2MiwiT3V0cHV0VG9rZW5zIjoyNzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjNUMTA6MTA6NDYuMTA0OTgxNzI2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTcxNDM4NjQ2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDT05GSUdGU19GU1wiLFxuICAgIFwiTlZNRV9UQVJHRVRcIixcbiAgICBcIk5WTUVfVEFSR0VUX0xPT1BcIixcbiAgICBcIk5WTUVfVEFSR0VUX1RDUFwiLFxuICAgIFwiTlZNRV9UQVJHRVRfUkRNQVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImNvbmZpZ2ZzX3JlZ2lzdGVyX3N1YnN5c3RlbVwiLFxuICAgIFwiY29uZmlnZnNfbGlua19zdWJzeXN0ZW1zXCIsXG4gICAgXCJjb25maWdmc191bmxpbmtfc3Vic3lzdGVtc1wiLFxuICAgIFwiY29uZmlnZnNfZ2V0X3N1cGVyX2luZm9cIixcbiAgICBcImNvbmZpZ2ZzX2ZpbGxfc3VwZXJcIixcbiAgICBcIm52bWV0X2NvbmZpZ2ZzX2ZpbGxfc3Vic3lzdGVtXCIsXG4gICAgXCJudm1ldF9hZGRfZGlzY19zdWJzeXNcIixcbiAgICBcIm52bWV0X3BvcnRzX21ha2VcIixcbiAgICBcIm52bWV0X3N1YnN5c19tYWtlXCIsXG4gICAgXCJudm1ldF9hZGRfcG9ydF9saXN0XCIsXG4gICAgXCJudm1ldF9kZWxfcG9ydF9saXN0XCIsXG4gICAgXCJudm1ldF9yb290X2Rpc2NvdmVyeV9ucW5fc3RvcmVcIixcbiAgICBcIm52bWV0X2V4ZWN1dGVfZGlzY19nZXRfbG9nX3BhZ2VcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIG5ldHdvcmsgbmFtZXNwYWNlIHN1cHBvcnQgZm9yIGNvbmZpZ2ZzIGFuZCB0aGUgTlZNZS1vRiB0YXJnZXQuIEl0IG1vZGlmaWVzIGNvcmUgY29uZmlnZnMgbG9naWMgdG8gc3VwcG9ydCBtdWx0aXBsZSBzdXBlcmJsb2NrcyBwZXIgbmV0d29yayBuYW1lc3BhY2UgYW5kIHVwZGF0ZXMgdGhlIE5WTWUgdGFyZ2V0IHRvIHVzZSBwZXItbmFtZXNwYWNlIGRpc2NvdmVyeSBzdWJzeXN0ZW1zIGFuZCBwb3J0cy4gVGhlc2UgYXJlIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byByZWFjaGFibGUga2VybmVsIGNvZGUuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ09ORklHRlNfRlNcIixcbiAgICBcIk5WTUVfVEFSR0VUXCIsXG4gICAgXCJOVk1FX1RBUkdFVF9MT09QXCIsXG4gICAgXCJOVk1FX1RBUkdFVF9UQ1BcIixcbiAgICBcIk5WTUVfVEFSR0VUX1JETUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJjb25maWdmc19yZWdpc3Rlcl9zdWJzeXN0ZW1cIixcbiAgICBcImNvbmZpZ2ZzX2xpbmtfc3Vic3lzdGVtc1wiLFxuICAgIFwiY29uZmlnZnNfdW5saW5rX3N1YnN5c3RlbXNcIixcbiAgICBcImNvbmZpZ2ZzX2dldF9zdXBlcl9pbmZvXCIsXG4gICAgXCJjb25maWdmc19maWxsX3N1cGVyXCIsXG4gICAgXCJudm1ldF9jb25maWdmc19maWxsX3N1YnN5c3RlbVwiLFxuICAgIFwibnZtZXRfYWRkX2Rpc2Nfc3Vic3lzXCIsXG4gICAgXCJudm1ldF9wb3J0c19tYWtlXCIsXG4gICAgXCJudm1ldF9zdWJzeXNfbWFrZVwiLFxuICAgIFwibnZtZXRfYWRkX3BvcnRfbGlzdFwiLFxuICAgIFwibnZtZXRfZGVsX3BvcnRfbGlzdFwiLFxuICAgIFwibnZtZXRfcm9vdF9kaXNjb3ZlcnlfbnFuX3N0b3JlXCIsXG4gICAgXCJudm1ldF9leGVjdXRlX2Rpc2NfZ2V0X2xvZ19wYWdlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBuZXR3b3JrIG5hbWVzcGFjZSBzdXBwb3J0IGZvciBjb25maWdmcyBhbmQgdGhlIE5WTWUtb0YgdGFyZ2V0LiBJdCBtb2RpZmllcyBjb3JlIGNvbmZpZ2ZzIGxvZ2ljIHRvIHN1cHBvcnQgbXVsdGlwbGUgc3VwZXJibG9ja3MgcGVyIG5ldHdvcmsgbmFtZXNwYWNlIGFuZCB1cGRhdGVzIHRoZSBOVk1lIHRhcmdldCB0byB1c2UgcGVyLW5hbWVzcGFjZSBkaXNjb3Zlcnkgc3Vic3lzdGVtcyBhbmQgcG9ydHMuIFRoZXNlIGFyZSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gcmVhY2hhYmxlIGtlcm5lbCBjb2RlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bbzh[1] Phase: Succeeded StartedAt: 2026-06-23 10:11:44 +0000 UTC FinishedAt: 2026-06-23 10:11:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-23 10:11:44 +0000 UTC FinishedAt: 2026-06-23 10:11:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[2] Phase: Succeeded StartedAt: 2026-06-23 10:11:44 +0000 UTC FinishedAt: 2026-06-23 14:33:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN) Phase: Failed StartedAt: 2026-06-23 10:11:44 +0000 UTC FinishedAt: 2026-06-23 14:33:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-23 10:11:44 +0000 UTC FinishedAt: 2026-06-23 10:12:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-23 10:11:44 +0000 UTC FinishedAt: 2026-06-23 10:12:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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-workflow8bbzh/series-workflow8bbzh-convert-artifact-2110092162/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-23 10:12:08 +0000 UTC FinishedAt: 2026-06-23 10:52:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-23 10:12:08 +0000 UTC FinishedAt: 2026-06-23 10:52:50 +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:*a13a2d34-9c76-40d7-ba5e-683270536515,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-workflow8bbzh/series-workflow8bbzh-convert-artifact-2110092162/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": "04922c80-2124-4174-b53a-3ee12cb543cc", "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-workflow8bbzh/series-workflow8bbzh-build-action-3785687616/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-23 10:12:08 +0000 UTC FinishedAt: 2026-06-23 10:52:40 +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:*a13a2d34-9c76-40d7-ba5e-683270536515,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-workflow8bbzh/series-workflow8bbzh-convert-artifact-2110092162/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": "04922c80-2124-4174-b53a-3ee12cb543cc", "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-workflow8bbzh/series-workflow8bbzh-build-action-3785687616/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-23 10:52:50 +0000 UTC FinishedAt: 2026-06-23 10:52:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-23 10:52:50 +0000 UTC FinishedAt: 2026-06-23 10:52:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-23 10:52:50 +0000 UTC FinishedAt: 2026-06-23 10:53:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-23 10:52:50 +0000 UTC FinishedAt: 2026-06-23 10:52:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-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-workflow8bbzh/series-workflow8bbzh-convert-artifact-3876667101/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-23 10:53:39 +0000 UTC FinishedAt: 2026-06-23 10:55:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-23 10:53:39 +0000 UTC FinishedAt: 2026-06-23 10:55:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*04922c80-2124-4174-b53a-3ee12cb543cc,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-workflow8bbzh/series-workflow8bbzh-build-action-3785687616/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-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-23 10:55:29 +0000 UTC FinishedAt: 2026-06-23 10:55:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-23 10:55:29 +0000 UTC FinishedAt: 2026-06-23 10:55:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-23 10:55:29 +0000 UTC FinishedAt: 2026-06-23 11:27:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-23 10:55:29 +0000 UTC FinishedAt: 2026-06-23 11:27:19 +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:*a13a2d34-9c76-40d7-ba5e-683270536515,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-workflow8bbzh/series-workflow8bbzh-convert-artifact-3876667101/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": "73803fa0-5ba4-4d03-976f-f9962ee982c8", "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-workflow8bbzh/series-workflow8bbzh-build-action-308707257/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-23 10:55:29 +0000 UTC FinishedAt: 2026-06-23 11:27:09 +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:*a13a2d34-9c76-40d7-ba5e-683270536515,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-workflow8bbzh/series-workflow8bbzh-convert-artifact-3876667101/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": "73803fa0-5ba4-4d03-976f-f9962ee982c8", "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-workflow8bbzh/series-workflow8bbzh-build-action-308707257/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-23 11:27:19 +0000 UTC FinishedAt: 2026-06-23 11:27:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-23 11:27:19 +0000 UTC FinishedAt: 2026-06-23 11:27:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-23 11:27:19 +0000 UTC FinishedAt: 2026-06-23 11:29:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-23 11:27:19 +0000 UTC FinishedAt: 2026-06-23 11:28:57 +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:*73803fa0-5ba4-4d03-976f-f9962ee982c8,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-workflow8bbzh/series-workflow8bbzh-build-action-308707257/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-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[10] Phase: Failed StartedAt: 2026-06-23 11:29:07 +0000 UTC FinishedAt: 2026-06-23 14:33:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-23 11:29:07 +0000 UTC FinishedAt: 2026-06-23 14:33:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"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:*04922c80-2124-4174-b53a-3ee12cb543cc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*73803fa0-5ba4-4d03-976f-f9962ee982c8,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-workflow8bbzh/series-workflow8bbzh-build-action-3785687616/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-workflow8bbzh/series-workflow8bbzh-build-action-308707257/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-23 11:29:07 +0000 UTC FinishedAt: 2026-06-23 11:30:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-23 11:29:07 +0000 UTC FinishedAt: 2026-06-23 11:29:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"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-workflow8bbzh/series-workflow8bbzh-convert-artifact-2982128226/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[10].run-retest Phase: Failed StartedAt: 2026-06-23 11:29:07 +0000 UTC FinishedAt: 2026-06-23 11:31:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:retest-data,Default:nil,Value:*{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*{{=steps['base-build'].outputs.parameters.result ? jsonpath(steps['base-build'].outputs.parameters.result, '$.build_id') : ''}},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*73803fa0-5ba4-4d03-976f-f9962ee982c8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,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-workflow8bbzh/series-workflow8bbzh-build-action-3785687616/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-workflow8bbzh/series-workflow8bbzh-build-action-308707257/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[10].run-retest[0] Phase: Succeeded StartedAt: 2026-06-23 11:29:07 +0000 UTC FinishedAt: 2026-06-23 11:29:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[10].run-retest[0].save-retest-task Phase: Succeeded StartedAt: 2026-06-23 11:29:07 +0000 UTC FinishedAt: 2026-06-23 11:29:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},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-workflow8bbzh/series-workflow8bbzh-convert-artifact-1692150625/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-23 11:29:07 +0000 UTC FinishedAt: 2026-06-23 11:29:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-23 11:29:07 +0000 UTC FinishedAt: 2026-06-23 11:29:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[10].run-retest[1] Phase: Failed StartedAt: 2026-06-23 11:29:54 +0000 UTC FinishedAt: 2026-06-23 11:31:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[10].run-retest[1].retest Phase: Failed StartedAt: 2026-06-23 11:29:54 +0000 UTC FinishedAt: 2026-06-23 11:31:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*{{=steps['base-build'].outputs.parameters.result ? jsonpath(steps['base-build'].outputs.parameters.result, '$.build_id') : ''}},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*73803fa0-5ba4-4d03-976f-f9962ee982c8,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Previous reproducers,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-workflow8bbzh/series-workflow8bbzh-build-action-3785687616/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-workflow8bbzh/series-workflow8bbzh-build-action-308707257/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:retest-task,Path:/data/retest.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-workflow8bbzh/series-workflow8bbzh-convert-artifact-1692150625/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:*1,} --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-23 11:30:04 +0000 UTC FinishedAt: 2026-06-23 14:33:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflow8bbzh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["configfs_register_subsystem","configfs_link_subsystems","configfs_unlink_subsystems","configfs_get_super_info","configfs_fill_super","nvmet_configfs_fill_subsystem","nvmet_add_disc_subsys","nvmet_ports_make","nvmet_subsys_make","nvmet_add_port_list","nvmet_del_port_list","nvmet_root_discovery_nqn_store","nvmet_execute_disc_get_log_page"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"66affa37cfac0aec061cc4bcf4a065b0c52f7e19","config_name":"upstream-apparmor-kasan.config","enable_configs":["CONFIGFS_FS","NVME_TARGET","NVME_TARGET_LOOP","NVME_TARGET_TCP","NVME_TARGET_RDMA"],"series_id":"f460be5a-d520-4bc1-9cfb-6492f841629b","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:{"findings":["773be3e5-366e-482f-8da3-9a5abb71b7a8"]},track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-23 11:30:04 +0000 UTC FinishedAt: 2026-06-23 14:33:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*04922c80-2124-4174-b53a-3ee12cb543cc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*73803fa0-5ba4-4d03-976f-f9962ee982c8,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-workflow8bbzh/series-workflow8bbzh-build-action-3785687616/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-workflow8bbzh/series-workflow8bbzh-build-action-308707257/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-workflow8bbzh/series-workflow8bbzh-convert-artifact-2982128226/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,}