Name: series-workflowl9tqv Phase: Succeeded StartedAt: 2026-08-01 10:41:33 +0000 UTC FinishedAt: 2026-08-01 14:26:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[0] Phase: Succeeded StartedAt: 2026-08-01 10:41:33 +0000 UTC FinishedAt: 2026-08-01 10:44:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[0].run-triage Phase: Succeeded StartedAt: 2026-08-01 10:41:33 +0000 UTC FinishedAt: 2026-08-01 10:44:32 +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": "cfce77b63375dac81d53f2f85593c548415206b7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "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": "cfce77b63375dac81d53f2f85593c548415206b7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "f44ec010-4f69-4776-9bf9-15526781c8fa" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "htab_map_alloc", "htab_map_update_elem", "htab_lru_map_update_elem", "htab_map_delete_elem", "htab_lru_map_delete_elem", "htab_map_lookup_elem", "htab_lru_map_lookup_elem", "htab_percpu_map_lookup_elem", "htab_lru_percpu_map_lookup_elem", "htab_map_get_next_key", "__htab_map_lookup_and_delete_elem", "__htab_map_lookup_and_delete_batch", "bpf_map_meta_alloc", "bpf_htab_map_meta_init", "bpf_htab_map_meta_size" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEwOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHRhYl9tYXBfYWxsb2MmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfdXBkYXRlX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2RlbGV0ZV9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9sb29rdXBfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9tYXBfbG9va3VwX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfZ2V0X25leHRfa2V5JiMzNDssCiAgICAmIzM0O19faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2JwZl9tYXBfbWV0YV9hbGxvYyYjMzQ7LAogICAgJiMzNDticGZfaHRhYl9tYXBfbWV0YV9pbml0JiMzNDssCiAgICAmIzM0O2JwZl9odGFiX21hcF9tZXRhX3NpemUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIHRoZSBtZW1vcnkgbGF5b3V0IG9mIEJQRiBoYXNoIG1hcCBlbGVtZW50cyBieSBjb25kaXRpb25hbGx5IHJlbW92aW5nIHRoZSBoYXNoIHZhbHVlIGZpZWxkIHdoZW4gaXQmIzM5O3Mgbm90IG5lZWRlZC4gSXQgaW50cm9kdWNlcyBga2V5X29mZnNldGAgdG8gZHluYW1pY2FsbHkgY29tcHV0ZSB0aGUgb2Zmc2V0IG9mIHRoZSBrZXkgYW5kIHZhbHVlIHdpdGhpbiB0aGUgZWxlbWVudC4gSXQgYWxzbyBtb2RpZmllcyBgbWFwX2luX21hcC5jYCB0byBwcm9wYWdhdGUgdGhpcyBvZmZzZXQgZm9yIGlubmVyIG1hcHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgaGFzaCBtYXAgaW1wbGVtZW50YXRpb24gYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMDo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFiN2NiNjY3ZmYyNzA0YjZiOTg1OGY5ZDZiMzAxYTU1NGVmMmViMDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDEwOjQzOjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IDlmMzk0ZTFhYTJlODUuLjgyYjE5YmQ1NDMxMDkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oYXNodGFiLmNcbkBAIC0xMDAsMTMgJiM0MzsxMDAsMTYgQEAgc3RydWN0IGJwZl9odGFiIHtcbiBcdHN0cnVjdCBwZXJjcHVfY291bnRlciBwY291bnQ7XG4gXHRhdG9taWNfdCBjb3VudDtcbiBcdGJvb2wgdXNlX3BlcmNwdV9jb3VudGVyO1xuJiM0MztcdGJvb2wgaGFzX2hhc2g7XG4gXHR1MzIgbl9idWNrZXRzO1x0LyogbnVtYmVyIG9mIGhhc2ggYnVja2V0cyAqL1xuIFx0dTMyIGVsZW1fc2l6ZTtcdC8qIHNpemUgb2YgZWFjaCBlbGVtZW50IGluIGJ5dGVzICovXG4mIzQzO1x0dTMyIGtleV9vZmZzZXQ7XHQvKiBvZmZzZXQgb2Yga2V5IGluIGJ5dGVzICovXG4gXHR1MzIgaGFzaHJuZDtcbiB9O1xuIFxuIC8qIGVhY2ggaHRhYiBlbGVtZW50IGlzIHN0cnVjdCBodGFiX2VsZW0gJiM0Mzsga2V5ICYjNDM7IHZhbHVlICovXG4tc3RydWN0IGh0YWJfZWxlbSB7XG4mIzQzO3N0cnVjdCBodGFiX2VsZW07XG4mIzQzO3N0cnVjdCBodGFiX25vZGUge1xuIFx0dW5pb24ge1xuIFx0XHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSBoYXNoX25vZGU7XG4gXHRcdHN0cnVjdCB7XG5AQCAtMTE3LDE4ICYjNDM7MTIwLDMyIEBAIHN0cnVjdCBodGFiX2VsZW0ge1xuIFx0XHRcdH07XG4gXHRcdH07XG4gXHR9O1xuLVx0dW5pb24ge1xuLVx0XHQvKiBwb2ludGVyIHRvIHBlci1jcHUgcG9pbnRlciAqL1xuLVx0XHR2b2lkICpwdHJfdG9fcHB0cjtcbi1cdFx0c3RydWN0IGJwZl9scnVfbm9kZSBscnVfbm9kZTtcbi1cdH07XG4tXHR1MzIgaGFzaDtcbi1cdGNoYXIga2V5W10gX19hbGlnbmVkKDgpO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGh0YWJfZWxlbSB7XG4mIzQzO1x0c3RydWN0IGh0YWJfbm9kZSBub2RlO1xuJiM0MztcdHU4IGRhdGFbXSBfX2FsaWduZWQoOCk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgaHRhYl9lbGVtX2xydSB7XG4mIzQzO1x0c3RydWN0IGh0YWJfbm9kZSBub2RlO1xuJiM0MztcdHN0cnVjdCBicGZfbHJ1X25vZGUgbHJ1X25vZGU7XG4mIzQzO1x0dTggZGF0YVtdIF9fYWxpZ25lZCg4KTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIE9ubHkgZm9yIG5vbi1wcmVhbGxvY2F0ZWQgUENQVSBtYXBzLiBQcmVhbGxvY2F0ZWQgUENQVSBtYXBzIGRvbiYjMzk7dCBuZWVkXG4mIzQzOyAqIHB0cl90b19wcHRyLCBhbmQgdXNlIGh0YWJfZWxlbS5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBodGFiX2VsZW1fcGNwdSB7XG4mIzQzO1x0c3RydWN0IGh0YWJfbm9kZSBub2RlO1xuJiM0MztcdHZvaWQgKnB0cl90b19wcHRyO1xuJiM0MztcdHU4IGRhdGFbXSBfX2FsaWduZWQoOCk7XG4gfTtcbiBcbiBzdHJ1Y3QgaHRhYl9idGZfcmVjb3JkIHtcbiBcdHN0cnVjdCBidGZfcmVjb3JkICpyZWNvcmQ7XG4gXHR1MzIga2V5X3NpemU7XG4mIzQzO1x0dTMyIGtleV9vZmZzZXQ7XG4gfTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgaHRhYl9pc19wcmVhbGxvYyhjb25zdCBzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG5AQCAtMTM2LDYgJiM0MzsxNTMsMjEgQEAgc3RhdGljIGlubGluZSBib29sIGh0YWJfaXNfcHJlYWxsb2MoY29uc3Qgc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0cmV0dXJuICEoaHRhYi1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9OT19QUkVBTExPQyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfbHJ1X25vZGUgKmh0YWJfZWxlbV9scnVfbm9kZShzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFx1MDAyNigoc3RydWN0IGh0YWJfZWxlbV9scnUgKilsKS1cdTAwM2VscnVfbm9kZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkICpodGFiX2VsZW1fZ2V0X3B0cl90b19wcHRyKHN0cnVjdCBodGFiX2VsZW0gKmwpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS1cdTAwM2VwdHJfdG9fcHB0cjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfcHRyX3RvX3BwdHIoc3RydWN0IGh0YWJfZWxlbSAqbCwgdm9pZCAqcHRyKVxuJiM0Mzt7XG4mIzQzO1x0KChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS1cdTAwM2VwdHJfdG9fcHB0ciA9IHB0cjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBodGFiX2luaXRfYnVja2V0cyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4ge1xuIFx0dW5zaWduZWQgaW50IGk7XG5AQCAtMTgzLDI1ICYjNDM7MjE1LDMwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19mZF9odGFiKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdHJldHVybiBodGFiLVx1MDAzZW1hcC5tYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfSEFTSF9PRl9NQVBTO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV92YWx1ZShzdHJ1Y3QgaHRhYl9lbGVtICpsLCB1MzIga2V5X3NpemUpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqaHRhYl9lbGVtX2tleShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHZvaWQgKilsICYjNDM7IGh0YWItXHUwMDNla2V5X29mZnNldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkICpodGFiX2VsZW1fdmFsdWUoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuIHtcbi1cdHJldHVybiBsLVx1MDAzZWtleSAmIzQzOyByb3VuZF91cChrZXlfc2l6ZSwgOCk7XG4mIzQzO1x0cmV0dXJuIGh0YWJfZWxlbV9rZXkoaHRhYiwgbCkgJiM0Mzsgcm91bmRfdXAoaHRhYi1cdTAwM2VtYXAua2V5X3NpemUsIDgpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9wdHIoc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGtleV9zaXplLFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9wdHIoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsLFxuIFx0XHRcdFx0ICAgICB2b2lkIF9fcGVyY3B1ICpwcHRyKVxuIHtcbi1cdCoodm9pZCBfX3BlcmNwdSAqKilodGFiX2VsZW1fdmFsdWUobCwga2V5X3NpemUpID0gcHB0cjtcbiYjNDM7XHQqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpID0gcHB0cjtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIF9fcGVyY3B1ICpodGFiX2VsZW1fZ2V0X3B0cihzdHJ1Y3QgaHRhYl9lbGVtICpsLCB1MzIga2V5X3NpemUpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BlcmNwdSAqaHRhYl9lbGVtX2dldF9wdHIoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuIHtcbi1cdHJldHVybiAqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGwsIGtleV9zaXplKTtcbiYjNDM7XHRyZXR1cm4gKih2b2lkIF9fcGVyY3B1ICoqKWh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgKmZkX2h0YWJfbWFwX2dldF9wdHIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiYjNDM7c3RhdGljIHZvaWQgKmZkX2h0YWJfbWFwX2dldF9wdHIoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuIHtcbi1cdHJldHVybiAqKHZvaWQgKiopaHRhYl9lbGVtX3ZhbHVlKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4mIzQzO1x0cmV0dXJuICoodm9pZCAqKilodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpnZXRfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgaW50IGkpXG5AQCAtMjA5LDYgJiM0MzsyNDYsMzMgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmdldF9odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCBpbnQgaSlcbiBcdHJldHVybiAoc3RydWN0IGh0YWJfZWxlbSAqKSAoaHRhYi1cdTAwM2VlbGVtcyAmIzQzOyBpICogKHU2NClodGFiLVx1MDAzZWVsZW1fc2l6ZSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaHRhYl9oYXNfaGFzaChjb25zdCBzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaHRhYi1cdTAwM2VoYXNfaGFzaDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB1MzIgaHRhYl9lbGVtX2hhc2goc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGh0YWJfaXNfbHJ1KGh0YWIpKVxuJiM0MztcdFx0cmV0dXJuICoodTMyICopKChzdHJ1Y3QgaHRhYl9lbGVtX2xydSAqKWwpLVx1MDAzZWRhdGE7XG4mIzQzO1x0ZWxzZSBpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikgXHUwMDI2XHUwMDI2ICFodGFiX2lzX3ByZWFsbG9jKGh0YWIpKVxuJiM0MztcdFx0cmV0dXJuICoodTMyICopKChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS1cdTAwM2VkYXRhO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldHVybiAqKHUzMiAqKWwtXHUwMDNlZGF0YTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfaGFzaChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwsIHUzMiBoYXNoKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFodGFiX2hhc19oYXNoKGh0YWIpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGlmIChodGFiX2lzX2xydShodGFiKSlcbiYjNDM7XHRcdCoodTMyICopKChzdHJ1Y3QgaHRhYl9lbGVtX2xydSAqKWwpLVx1MDAzZWRhdGEgPSBoYXNoO1xuJiM0MztcdGVsc2UgaWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpIFx1MDAyNlx1MDAyNiAhaHRhYl9pc19wcmVhbGxvYyhodGFiKSlcbiYjNDM7XHRcdCoodTMyICopKChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS1cdTAwM2VkYXRhID0gaGFzaDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHQqKHUzMiAqKWwtXHUwMDNlZGF0YSA9IGhhc2g7XG4mIzQzO31cbiYjNDM7XG4gLyogQm90aCBwZXJjcHUgYW5kIGZkIGh0YWIgc3VwcG9ydCBpbi1wbGFjZSB1cGRhdGUsIHNvIG5vIG5lZWQgZm9yXG4gICogZXh0cmEgZWxlbS4gTFJVIGl0c2VsZiBjYW4gcmVtb3ZlIHRoZSBsZWFzdCB1c2VkIGVsZW1lbnQsIHNvXG4gICogdGhlcmUgaXMgbm8gbmVlZCBmb3IgYW4gZXh0cmEgZWxlbSBkdXJpbmcgbWFwX3VwZGF0ZS5cbkBAIC0yMzEsNyAmIzQzOzI5NSw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZnJlZV9wcmVhbGxvY2VkX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFxuIFx0XHRlbGVtID0gZ2V0X2h0YWJfZWxlbShodGFiLCBpKTtcbiBcdFx0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsXG4tXHRcdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShlbGVtLCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xuJiM0MztcdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pKTtcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHR9XG4gfVxuQEAgLTI1NCw3ICYjNDM7MzE4LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcbiBcdFx0ZWxlbSA9IGdldF9odGFiX2VsZW0oaHRhYiwgaSk7XG4gXHRcdGlmIChodGFiX2lzX3BlcmNwdShodGFiKSkge1xuLVx0XHRcdHZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSk7XG4mIzQzO1x0XHRcdHZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBlbGVtKTtcbiBcdFx0XHRpbnQgY3B1O1xuIFxuIFx0XHRcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbkBAIC0yNjMsNyAmIzQzOzMyNyw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZnJlZV9wcmVhbGxvY2VkX2ZpZWxkcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4gXHRcdFx0fVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGJwZl9vYmpfZnJlZV9maWVsZHMoaHRhYi1cdTAwM2VtYXAucmVjb3JkLFxuLVx0XHRcdFx0XHQgICAgaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4mIzQzO1x0XHRcdFx0XHQgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pKTtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdFx0fVxuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbkBAIC0yODAsOCAmIzQzOzM0NCw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZnJlZV9lbGVtcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBodGFiLVx1MDAzZW1hcC5tYXhfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcbiBcbi1cdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGdldF9odGFiX2VsZW0oaHRhYiwgaSksXG4tXHRcdFx0XHRcdCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSk7XG4mIzQzO1x0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgZ2V0X2h0YWJfZWxlbShodGFiLCBpKSk7XG4gXHRcdGZyZWVfcGVyY3B1KHBwdHIpO1xuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdH1cbkBAIC0zMDgsOCAmIzQzOzM3MSw4IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpwcmVhbGxvY19scnVfcG9wKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgdm9pZCAqa2V5LFxuIFxuIFx0aWYgKG5vZGUpIHtcbiBcdFx0YnBmX21hcF9pbmNfZWxlbV9jb3VudChcdTAwMjZodGFiLVx1MDAzZW1hcCk7XG4tXHRcdGwgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpO1xuLVx0XHRtZW1jcHkobC1cdTAwM2VrZXksIGtleSwgaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpO1xuJiM0MztcdFx0bCA9IChzdHJ1Y3QgaHRhYl9lbGVtICopY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSk7XG4mIzQzO1x0XHRtZW1jcHkoaHRhYl9lbGVtX2tleShodGFiLCBsKSwga2V5LCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSk7XG4gXHRcdHJldHVybiBsO1xuIFx0fVxuIFxuQEAgLTM0MCw4ICYjNDM7NDAzLDcgQEAgc3RhdGljIGludCBwcmVhbGxvY19pbml0KHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdFx0XHRcdFx0ICAgIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcbiBcdFx0aWYgKCFwcHRyKVxuIFx0XHRcdGdvdG8gZnJlZV9lbGVtcztcbi1cdFx0aHRhYl9lbGVtX3NldF9wdHIoZ2V0X2h0YWJfZWxlbShodGFiLCBpKSwgaHRhYi1cdTAwM2VtYXAua2V5X3NpemUsXG4tXHRcdFx0XHQgIHBwdHIpO1xuJiM0MztcdFx0aHRhYl9lbGVtX3NldF9wdHIoaHRhYiwgZ2V0X2h0YWJfZWxlbShodGFiLCBpKSwgcHB0cik7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuIFxuQEAgLTM0OSw4ICYjNDM7NDExLDggQEAgc3RhdGljIGludCBwcmVhbGxvY19pbml0KHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdGlmIChodGFiX2lzX2xydShodGFiKSlcbiBcdFx0ZXJyID0gYnBmX2xydV9pbml0KFx1MDAyNmh0YWItXHUwMDNlbHJ1LFxuIFx0XHRcdFx0ICAgaHRhYi1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9OT19DT01NT05fTFJVLFxuLVx0XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgaGFzaCkgLVxuLVx0XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpLFxuJiM0MztcdFx0XHRcdCAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBkYXRhKSAtXG4mIzQzO1x0XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSxcbiBcdFx0XHRcdCAgIGh0YWJfbHJ1X21hcF9kZWxldGVfbm9kZSxcbiBcdFx0XHRcdCAgIGh0YWIpO1xuIFx0ZWxzZVxuQEAgLTM2MSwxMSAmIzQzOzQyMywxMSBAQCBzdGF0aWMgaW50IHByZWFsbG9jX2luaXQoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFxuIFx0aWYgKGh0YWJfaXNfbHJ1KGh0YWIpKVxuIFx0XHRicGZfbHJ1X3BvcHVsYXRlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBodGFiLVx1MDAzZWVsZW1zLFxuLVx0XHRcdFx0IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSxcbiYjNDM7XHRcdFx0XHQgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSxcbiBcdFx0XHRcdCBodGFiLVx1MDAzZWVsZW1fc2l6ZSwgbnVtX2VudHJpZXMpO1xuIFx0ZWxzZVxuIFx0XHRwY3B1X2ZyZWVsaXN0X3BvcHVsYXRlKFx1MDAyNmh0YWItXHUwMDNlZnJlZWxpc3QsXG4tXHRcdFx0XHQgICAgICAgaHRhYi1cdTAwM2VlbGVtcyAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZSksXG4mIzQzO1x0XHRcdFx0ICAgICAgIGh0YWItXHUwMDNlZWxlbXMgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgbm9kZS5mbm9kZSksXG4gXHRcdFx0XHQgICAgICAgaHRhYi1cdTAwM2VlbGVtX3NpemUsIG51bV9lbnRyaWVzKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTQwMSw3ICYjNDM7NDYzLDcgQEAgc3RhdGljIGludCBhbGxvY19leHRyYV9lbGVtcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4gXHRcdC8qIHBvcCB3aWxsIHN1Y2NlZWQsIHNpbmNlIHByZWFsbG9jX2luaXQoKVxuIFx0XHQgKiBwcmVhbGxvY2F0ZWQgZXh0cmEgbnVtX3Bvc3NpYmxlX2NwdXMgZWxlbWVudHNcbiBcdFx0ICovXG4tXHRcdGxfbmV3ID0gY29udGFpbmVyX29mKGwsIHN0cnVjdCBodGFiX2VsZW0sIGZub2RlKTtcbiYjNDM7XHRcdGxfbmV3ID0gY29udGFpbmVyX29mKGwsIHN0cnVjdCBodGFiX2VsZW0sIG5vZGUuZm5vZGUpO1xuIFx0XHQqcGVyX2NwdV9wdHIocHB0ciwgY3B1KSA9IGxfbmV3O1xuIFx0fVxuIFx0aHRhYi1cdTAwM2VleHRyYV9lbGVtcyA9IHBwdHI7XG5AQCAtNDI1LDggJiM0Mzs0ODcsOCBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuIFx0Ym9vbCB6ZXJvX3NlZWQgPSAoYXR0ci1cdTAwM2VtYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1pFUk9fU0VFRCk7XG4gXHRpbnQgbnVtYV9ub2RlID0gYnBmX21hcF9hdHRyX251bWFfbm9kZShhdHRyKTtcbiBcbi1cdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZS5uZXh0KSAhPVxuLVx0XHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGhhc2hfbm9kZS5wcHJldikpO1xuJiM0MztcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9ub2RlLCBmbm9kZS5uZXh0KSAhPVxuJiM0MztcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9ub2RlLCBoYXNoX25vZGUucHByZXYpKTtcbiBcbiBcdGlmICh6ZXJvX3NlZWQgXHUwMDI2XHUwMDI2ICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxuIFx0XHQvKiBHdWFyZCBhZ2FpbnN0IGxvY2FsIERvUywgYW5kIGRpc2NvdXJhZ2UgcHJvZHVjdGlvbiB1c2UuICovXG5AQCAtNDc2LDcgJiM0Mzs1MzgsNyBAQCBzdGF0aWMgdm9pZCBodGFiX21lbV9kdG9yKHZvaWQgKm9iaiwgdm9pZCAqY3R4KVxuIFx0aWYgKElTX0VSUl9PUl9OVUxMKGhyZWMtXHUwMDNlcmVjb3JkKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0bWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGhyZWMtXHUwMDNla2V5X3NpemUpO1xuJiM0MztcdG1hcF92YWx1ZSA9ICh2b2lkICopZWxlbSAmIzQzOyBocmVjLVx1MDAzZWtleV9vZmZzZXQgJiM0Mzsgcm91bmRfdXAoaHJlYy1cdTAwM2VrZXlfc2l6ZSwgOCk7XG4gXHRicGZfb2JqX2ZyZWVfZmllbGRzKGhyZWMtXHUwMDNlcmVjb3JkLCBtYXBfdmFsdWUpO1xuIH1cbiBcbkBAIC01MDIsNyAmIzQzOzU2NCw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZHRvcl9jdHhfZnJlZSh2b2lkICpjdHgpXG4gfVxuIFxuIHN0YXRpYyBpbnQgYnBmX21hX3NldF9kdG9yKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSxcbi1cdFx0XHQgICB2b2lkICgqZHRvcikodm9pZCAqLCB2b2lkICopKVxuJiM0MztcdFx0XHQgICB2b2lkICgqZHRvcikodm9pZCAqLCB2b2lkICopLCB1MzIga2V5X29mZnNldClcbiB7XG4gXHRzdHJ1Y3QgaHRhYl9idGZfcmVjb3JkICpocmVjO1xuIFx0aW50IGVycjtcbkBAIC01MTUsNiAmIzQzOzU3Nyw3IEBAIHN0YXRpYyBpbnQgYnBmX21hX3NldF9kdG9yKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSxcbiBcdGlmICghaHJlYylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRocmVjLVx1MDAzZWtleV9zaXplID0gbWFwLVx1MDAzZWtleV9zaXplO1xuJiM0MztcdGhyZWMtXHUwMDNla2V5X29mZnNldCA9IGtleV9vZmZzZXQ7XG4gXHRocmVjLVx1MDAzZXJlY29yZCA9IGJ0Zl9yZWNvcmRfZHVwKG1hcC1cdTAwM2VyZWNvcmQpO1xuIFx0aWYgKElTX0VSUihocmVjLVx1MDAzZXJlY29yZCkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihocmVjLVx1MDAzZXJlY29yZCk7XG5AQCAtNTM3LDkgJiM0Mzs2MDAsOSBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4gXHQgKiBwb3B1bGF0ZWQgaW4gaHRhYl9tYXBfYWxsb2MoKSwgc28gaXQgd2lsbCBhbHdheXMgYXBwZWFyIGFzIE5VTEwuXG4gXHQgKi9cbiBcdGlmIChodGFiX2lzX3BlcmNwdShodGFiKSlcbi1cdFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFx1MDAyNmh0YWItXHUwMDNlcGNwdV9tYSwgaHRhYl9wY3B1X21lbV9kdG9yKTtcbiYjNDM7XHRcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZodGFiLVx1MDAzZXBjcHVfbWEsIGh0YWJfcGNwdV9tZW1fZHRvciwgaHRhYi1cdTAwM2VrZXlfb2Zmc2V0KTtcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFx1MDAyNmh0YWItXHUwMDNlbWEsIGh0YWJfbWVtX2R0b3IpO1xuJiM0MztcdFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFx1MDAyNmh0YWItXHUwMDNlbWEsIGh0YWJfbWVtX2R0b3IsIGh0YWItXHUwMDNla2V5X29mZnNldCk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG5AQCAtNTYyLDYgJiM0Mzs2MjUsMTIgQEAgc3RhdGljIHN0cnVjdCBicGZfbWFwICpodGFiX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcbiBcdGJwZl9tYXBfaW5pdF9mcm9tX2F0dHIoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGF0dHIpO1xuIFxuJiM0MztcdC8qIEF2b2lkIGhhc2ggbWVtb3J5IHVzZSBhbmQgY29tcGFyaXNvbnMgd2hlcmUgdW5uZWNlc3NhcnkuXG4mIzQzO1x0ICogdTMyIGhhc2ggcmVhZHMgYXJlIGFsd2F5cyBhdG9taWMuIElmIHdlIGVsaWRlIHRoZW0sIGtleSBjb21wYXJpc29ucyBtdXN0IGFsc28gYmUgYXRvbWljXG4mIzQzO1x0ICogdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmUga2V5IG1hdGNoZXMgZHVlIHRvIHRvcm4ga2V5IHJlYWRzIC8gd3JpdGVzLiBTbyBjaGVjayBrZXlfc2l6ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRodGFiLVx1MDAzZWhhc19oYXNoID0gaHRhYl9pc19scnUoaHRhYikgfHwgaHRhYi1cdTAwM2VtYXAua2V5X3NpemUgXHUwMDNlIHNpemVvZih1bnNpZ25lZCBsb25nKTtcbiYjNDM7XG4gXHRpZiAocGVyY3B1X2xydSkge1xuIFx0XHQvKiBlbnN1cmUgZWFjaCBDUFUmIzM5O3MgbHJ1IGxpc3QgaGFzIFx1MDAzZT0xIGVsZW1lbnRzLlxuIFx0XHQgKiBzaW5jZSB3ZSBhcmUgYXQgaXQsIG1ha2UgZWFjaCBscnUgbGlzdCBoYXMgdGhlIHNhbWVcbkBAIC01ODMsOCAmIzQzOzY1MiwxNiBAQCBzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuIFxuIFx0aHRhYi1cdTAwM2VuX2J1Y2tldHMgPSByb3VuZHVwX3Bvd19vZl90d28oaHRhYi1cdTAwM2VtYXAubWF4X2VudHJpZXMpO1xuIFxuLVx0aHRhYi1cdTAwM2VlbGVtX3NpemUgPSBzaXplb2Yoc3RydWN0IGh0YWJfZWxlbSkgJiM0Mztcbi1cdFx0XHQgIHJvdW5kX3VwKGh0YWItXHUwMDNlbWFwLmtleV9zaXplLCA4KTtcbiYjNDM7XHRpZiAoaHRhYl9pc19scnUoaHRhYikpXG4mIzQzO1x0XHRodGFiLVx1MDAzZWtleV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgZGF0YSkgJiM0MzsgODtcbiYjNDM7XHRlbHNlIGlmIChwZXJjcHUgXHUwMDI2XHUwMDI2ICFwcmVhbGxvYylcbiYjNDM7XHRcdGh0YWItXHUwMDNla2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fcGNwdSwgZGF0YSkgJiM0MztcbiYjNDM7XHRcdFx0XHQgICAoaHRhYl9oYXNfaGFzaChodGFiKSA/IDggOiAwKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRodGFiLVx1MDAzZWtleV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBkYXRhKSAmIzQzO1xuJiM0MztcdFx0XHRcdCAgIChodGFiX2hhc19oYXNoKGh0YWIpID8gOCA6IDApO1xuJiM0MztcbiYjNDM7XHRodGFiLVx1MDAzZWVsZW1fc2l6ZSA9IGh0YWItXHUwMDNla2V5X29mZnNldCAmIzQzOyByb3VuZF91cChodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSwgOCk7XG4gXHRpZiAocGVyY3B1KVxuIFx0XHRodGFiLVx1MDAzZWVsZW1fc2l6ZSAmIzQzOz0gc2l6ZW9mKHZvaWQgKik7XG4gXHRlbHNlXG5AQCAtNjkyLDE1ICYjNDM7NzY5LDIzIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKnNlbGVjdF9idWNrZXQoc3RydWN0IGJwZl9odGFiICpodGFiLCB1MzJcbiB9XG4gXG4gLyogdGhpcyBsb29rdXAgZnVuY3Rpb24gY2FuIG9ubHkgYmUgY2FsbGVkIHdpdGggYnVja2V0IGxvY2sgdGFrZW4gKi9cbi1zdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLCB1MzIgaGFzaCxcbiYjNDM7c3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9lbGVtX3JhdyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsIHUzMiBoYXNoLFxuIFx0XHRcdFx0XHQgdm9pZCAqa2V5LCB1MzIga2V5X3NpemUpXG4ge1xuIFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsO1xuIFxuLVx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSlcbi1cdFx0aWYgKGwtXHUwMDNlaGFzaCA9PSBoYXNoIFx1MDAyNlx1MDAyNiAhbWVtY21wKFx1MDAyNmwtXHUwMDNla2V5LCBrZXksIGtleV9zaXplKSlcbi1cdFx0XHRyZXR1cm4gbDtcbiYjNDM7XHRpZiAoaHRhYl9oYXNfaGFzaChodGFiKSkge1xuJiM0MztcdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKVxuJiM0MztcdFx0XHRpZiAoaHRhYl9lbGVtX2hhc2goaHRhYiwgbCkgPT0gaGFzaCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICFtZW1jbXAoaHRhYl9lbGVtX2tleShodGFiLCBsKSwga2V5LCBrZXlfc2l6ZSkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGw7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShsLCBuLCBoZWFkLCBub2RlLmhhc2hfbm9kZSlcbiYjNDM7XHRcdFx0aWYgKCFtZW1jbXAoaHRhYl9lbGVtX2tleShodGFiLCBsKSwga2V5LCBrZXlfc2l6ZSkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGw7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTcwOSw3ICYjNDM7Nzk0LDggQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCwgdTMyIGhhc2hcbiAgKiB0aGUgdW5saWtlbHkgZXZlbnQgd2hlbiBlbGVtZW50cyBtb3ZlZCBmcm9tIG9uZSBidWNrZXQgaW50byBhbm90aGVyXG4gICogd2hpbGUgbGluayBsaXN0IGlzIGJlaW5nIHdhbGtlZFxuICAqL1xuLXN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGJwZl9odGFiICpodGFiLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLFxuIFx0XHRcdFx0XHQgICAgICAgdTMyIGhhc2gsIHZvaWQgKmtleSxcbiBcdFx0XHRcdFx0ICAgICAgIHUzMiBrZXlfc2l6ZSwgdTMyIG5fYnVja2V0cylcbiB7XG5AQCAtNzE3LDkgJiM0Mzs4MDMsMTYgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9udWxsc19lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCxcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4gYWdhaW46XG4tXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxuLVx0XHRpZiAobC1cdTAwM2VoYXNoID09IGhhc2ggXHUwMDI2XHUwMDI2ICFtZW1jbXAoXHUwMDI2bC1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpKVxuLVx0XHRcdHJldHVybiBsO1xuJiM0MztcdGlmIChodGFiX2hhc19oYXNoKGh0YWIpKSB7XG4mIzQzO1x0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpXG4mIzQzO1x0XHRcdGlmIChodGFiX2VsZW1faGFzaChodGFiLCBsKSA9PSBoYXNoIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgIW1lbWNtcChodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGtleV9zaXplKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gbDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKVxuJiM0MztcdFx0XHRpZiAoIW1lbWNtcChodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGtleV9zaXplKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gbDtcbiYjNDM7XHR9XG4gXG4gXHRpZiAodW5saWtlbHkoZ2V0X251bGxzX3ZhbHVlKG4pICE9IChoYXNoIFx1MDAyNiAobl9idWNrZXRzIC0gMSkpKSlcbiBcdFx0Z290byBhZ2FpbjtcbkBAIC03NDcsMTcgJiM0Mzs4NDAsMTggQEAgc3RhdGljIHZvaWQgKl9faHRhYl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIFxuIFx0aGVhZCA9IHNlbGVjdF9idWNrZXQoaHRhYiwgaGFzaCk7XG4gXG4tXHRsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItXHUwMDNlbl9idWNrZXRzKTtcbiYjNDM7XHRsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItXHUwMDNlbl9idWNrZXRzKTtcbiBcbiBcdHJldHVybiBsO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCAqaHRhYl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsID0gX19odGFiX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG4gXG4gXHRpZiAobClcbi1cdFx0cmV0dXJuIGh0YWJfZWxlbV92YWx1ZShsLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuJiM0MztcdFx0cmV0dXJuIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcbiBcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC03NzUsNiAmIzQzOzg2OSw3IEBAIHN0YXRpYyB2b2lkICpodGFiX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gICovXG4gc3RhdGljIGludCBodGFiX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG4ge1xuJiM0MztcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xuIFx0Y29uc3QgaW50IHJldCA9IEJQRl9SRUdfMDtcbiBcbkBAIC03ODMsNyAmIzQzOzg3OCw3IEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHJldCwgMCwgMSk7XG4gXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfSU1NKEJQRl9BREQsIHJldCxcbi1cdFx0XHRcdG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGtleSkgJiM0MztcbiYjNDM7XHRcdFx0XHRodGFiLVx1MDAzZWtleV9vZmZzZXQgJiM0MztcbiBcdFx0XHRcdHJvdW5kX3VwKG1hcC1cdTAwM2VrZXlfc2l6ZSwgOCkpO1xuIFx0cmV0dXJuIGluc24gLSBpbnNuX2J1ZjtcbiB9XG5AQCAtNzkxLDEyICYjNDM7ODg2LDEzIEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqX19odGFiX2xydV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdFx0XHRcdHZvaWQgKmtleSwgY29uc3QgYm9vbCBtYXJrKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsID0gX19odGFiX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG4gXG4gXHRpZiAobCkge1xuIFx0XHRpZiAobWFyaylcbi1cdFx0XHRicGZfbHJ1X25vZGVfc2V0X3JlZihcdTAwMjZsLVx1MDAzZWxydV9ub2RlKTtcbi1cdFx0cmV0dXJuIGh0YWJfZWxlbV92YWx1ZShsLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuJiM0MztcdFx0XHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobCkpO1xuJiM0MztcdFx0cmV0dXJuIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcbiBcdH1cbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTgxNSw2ICYjNDM7OTExLDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfbHJ1X21hcF9sb29rdXBfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIHN0YXRpYyBpbnQgaHRhYl9scnVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG4ge1xuJiM0MztcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xuIFx0Y29uc3QgaW50IHJldCA9IEJQRl9SRUdfMDtcbiBcdGNvbnN0IGludCByZWZfcmVnID0gQlBGX1JFR18xO1xuQEAgLTgyNCwxNSAmIzQzOzkyMSwxNSBAQCBzdGF0aWMgaW50IGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pO1xuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgcmV0LCAwLCA0KTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9CLCByZWZfcmVnLCByZXQsXG4tXHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpICYjNDM7XG4mIzQzO1x0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSkgJiM0MztcbiBcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX2xydV9ub2RlLCByZWYpKTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KTkUsIHJlZl9yZWcsIDAsIDEpO1xuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX1NUX01FTShCUEZfQiwgcmV0LFxuLVx0XHRcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpICYjNDM7XG4mIzQzO1x0XHRcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSAmIzQzO1xuIFx0XHRcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9scnVfbm9kZSwgcmVmKSxcbiBcdFx0XHQgICAgIDEpO1xuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCByZXQsXG4tXHRcdFx0XHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICYjNDM7XG4mIzQzO1x0XHRcdFx0aHRhYi1cdTAwM2VrZXlfb2Zmc2V0ICYjNDM7XG4gXHRcdFx0XHRyb3VuZF91cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbiBcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XG4gfVxuQEAgLTg0NCwxMyAmIzQzOzk0MSwxMyBAQCBzdGF0aWMgdm9pZCBjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmIChodGFiX2lzX3BlcmNwdShodGFiKSkge1xuLVx0XHR2b2lkIF9fcGVyY3B1ICpwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZWxlbSwgaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpO1xuJiM0MztcdFx0dm9pZCBfX3BlcmNwdSAqcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGVsZW0pO1xuIFx0XHRpbnQgY3B1O1xuIFxuIFx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KVxuIFx0XHRcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcdTAwMjZodGFiLVx1MDAzZW1hcCwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7XG4gXHR9IGVsc2Uge1xuLVx0XHR2b2lkICptYXBfdmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoZWxlbSwgaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpO1xuJiM0MztcdFx0dm9pZCAqbWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pO1xuIFxuIFx0XHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIG1hcF92YWx1ZSk7XG4gXHR9XG5AQCAtODY5LDE3ICYjNDM7OTY2LDE3IEBAIHN0YXRpYyBib29sIGh0YWJfbHJ1X21hcF9kZWxldGVfbm9kZSh2b2lkICphcmcsIHN0cnVjdCBicGZfbHJ1X25vZGUgKm5vZGUpXG4gXHRzdHJ1Y3QgYnVja2V0ICpiO1xuIFx0aW50IHJldDtcbiBcbi1cdHRndF9sID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKTtcbi1cdGIgPSBfX3NlbGVjdF9idWNrZXQoaHRhYiwgdGd0X2wtXHUwMDNlaGFzaCk7XG4mIzQzO1x0dGd0X2wgPSAoc3RydWN0IGh0YWJfZWxlbSAqKWNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpO1xuJiM0MztcdGIgPSBfX3NlbGVjdF9idWNrZXQoaHRhYiwgaHRhYl9lbGVtX2hhc2goaHRhYiwgdGd0X2wpKTtcbiBcdGhlYWQgPSBcdTAwMjZiLVx1MDAzZWhlYWQ7XG4gXG4gXHRyZXQgPSBodGFiX2xvY2tfYnVja2V0KGIsIFx1MDAyNmZsYWdzKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShsLCBuLCBoZWFkLCBoYXNoX25vZGUpXG4mIzQzO1x0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKVxuIFx0XHRpZiAobCA9PSB0Z3RfbCkge1xuLVx0XHRcdGhsaXN0X251bGxzX2RlbF9yY3UoXHUwMDI2bC1cdTAwM2VoYXNoX25vZGUpO1xuJiM0MztcdFx0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmwtXHUwMDNlbm9kZS5oYXNoX25vZGUpO1xuIFx0XHRcdGJwZl9tYXBfZGVjX2VsZW1fY291bnQoXHUwMDI2aHRhYi1cdTAwM2VtYXApO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtOTEyLDE4ICYjNDM7MTAwOSwxOSBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxuIFx0aGVhZCA9IHNlbGVjdF9idWNrZXQoaHRhYiwgaGFzaCk7XG4gXG4gXHQvKiBsb29rdXAgdGhlIGtleSAqL1xuLVx0bCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLVx1MDAzZW5fYnVja2V0cyk7XG4mIzQzO1x0bCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLVx1MDAzZW5fYnVja2V0cyk7XG4gXG4gXHRpZiAoIWwpXG4gXHRcdGdvdG8gZmluZF9maXJzdF9lbGVtO1xuIFxuIFx0Lyoga2V5IHdhcyBmb3VuZCwgZ2V0IG5leHQga2V5IGluIHRoZSBzYW1lIGJ1Y2tldCAqL1xuLVx0bmV4dF9sID0gaGxpc3RfbnVsbHNfZW50cnlfc2FmZShyY3VfZGVyZWZlcmVuY2VfcmF3KGhsaXN0X251bGxzX25leHRfcmN1KFx1MDAyNmwtXHUwMDNlaGFzaF9ub2RlKSksXG4tXHRcdFx0XHQgIHN0cnVjdCBodGFiX2VsZW0sIGhhc2hfbm9kZSk7XG4mIzQzO1x0bmV4dF9sID0gaGxpc3RfbnVsbHNfZW50cnlfc2FmZShcbiYjNDM7XHRcdFx0cmN1X2RlcmVmZXJlbmNlX3JhdyhobGlzdF9udWxsc19uZXh0X3JjdShcdTAwMjZsLVx1MDAzZW5vZGUuaGFzaF9ub2RlKSksXG4mIzQzO1x0XHRcdHN0cnVjdCBodGFiX2VsZW0sIG5vZGUuaGFzaF9ub2RlKTtcbiBcbiBcdGlmIChuZXh0X2wpIHtcbiBcdFx0LyogaWYgbmV4dCBlbGVtIGluIHRoaXMgaGFzaCBsaXN0IGlzIG5vbi16ZXJvLCBqdXN0IHJldHVybiBpdCAqL1xuLVx0XHRtZW1jcHkobmV4dF9rZXksIG5leHRfbC1cdTAwM2VrZXksIGtleV9zaXplKTtcbiYjNDM7XHRcdG1lbWNweShuZXh0X2tleSwgaHRhYl9lbGVtX2tleShodGFiLCBuZXh0X2wpLCBrZXlfc2l6ZSk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuQEAgLTkzOCwxMCAmIzQzOzEwMzYsMTAgQEAgc3RhdGljIGludCBodGFiX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcbiBcbiBcdFx0LyogcGljayBmaXJzdCBlbGVtZW50IGluIHRoZSBidWNrZXQgKi9cbiBcdFx0bmV4dF9sID0gaGxpc3RfbnVsbHNfZW50cnlfc2FmZShyY3VfZGVyZWZlcmVuY2VfcmF3KGhsaXN0X251bGxzX2ZpcnN0X3JjdShoZWFkKSksXG4tXHRcdFx0XHRcdCAgc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKTtcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IGh0YWJfZWxlbSwgbm9kZS5oYXNoX25vZGUpO1xuIFx0XHRpZiAobmV4dF9sKSB7XG4gXHRcdFx0LyogaWYgaXQmIzM5O3Mgbm90IGVtcHR5LCBqdXN0IHJldHVybiBpdCAqL1xuLVx0XHRcdG1lbWNweShuZXh0X2tleSwgbmV4dF9sLVx1MDAzZWtleSwga2V5X3NpemUpO1xuJiM0MztcdFx0XHRtZW1jcHkobmV4dF9rZXksIGh0YWJfZWxlbV9rZXkoaHRhYiwgbmV4dF9sKSwga2V5X3NpemUpO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHR9XG5AQCAtOTU1LDcgJiM0MzsxMDUzLDcgQEAgc3RhdGljIHZvaWQgaHRhYl9lbGVtX2ZyZWUoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuIFx0Y2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoaHRhYiwgbCk7XG4gXG4gXHRpZiAoaHRhYi1cdTAwM2VtYXAubWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIKVxuLVx0XHRicGZfbWVtX2NhY2hlX2ZyZWUoXHUwMDI2aHRhYi1cdTAwM2VwY3B1X21hLCBsLVx1MDAzZXB0cl90b19wcHRyKTtcbiYjNDM7XHRcdGJwZl9tZW1fY2FjaGVfZnJlZShcdTAwMjZodGFiLVx1MDAzZXBjcHVfbWEsIGh0YWJfZWxlbV9nZXRfcHRyX3RvX3BwdHIobCkpO1xuIFx0YnBmX21lbV9jYWNoZV9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbWEsIGwpO1xuIH1cbiBcbkBAIC05NjUsNyAmIzQzOzEwNjMsNyBAQCBzdGF0aWMgdm9pZCBodGFiX3B1dF9mZF92YWx1ZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4gXHR2b2lkICpwdHI7XG4gXG4gXHRpZiAobWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfZmRfcHV0X3B0cikge1xuLVx0XHRwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKG1hcCwgbCk7XG4mIzQzO1x0XHRwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKGh0YWIsIGwpO1xuIFx0XHRtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9mZF9wdXRfcHRyKG1hcCwgcHRyLCB0cnVlKTtcbiBcdH1cbiB9XG5AQCAtMTAwNiw3ICYjNDM7MTEwNCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiBcdGlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKSB7XG4gXHRcdGJwZl9tYXBfZGVjX2VsZW1fY291bnQoXHUwMDI2aHRhYi1cdTAwM2VtYXApO1xuIFx0XHRjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhodGFiLCBsKTtcbi1cdFx0cGNwdV9mcmVlbGlzdF9wdXNoKFx1MDAyNmh0YWItXHUwMDNlZnJlZWxpc3QsIFx1MDAyNmwtXHUwMDNlZm5vZGUpO1xuJiM0MztcdFx0cGNwdV9mcmVlbGlzdF9wdXNoKFx1MDAyNmh0YWItXHUwMDNlZnJlZWxpc3QsIFx1MDAyNmwtXHUwMDNlbm9kZS5mbm9kZSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRkZWNfZWxlbV9jb3VudChodGFiKTtcbiBcdFx0aHRhYl9lbGVtX2ZyZWUoaHRhYiwgbCk7XG5AQCAtMTA5Nyw3ICYjNDM7MTE5NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksXG4gXHRcdFx0bCA9IF9fcGNwdV9mcmVlbGlzdF9wb3AoXHUwMDI2aHRhYi1cdTAwM2VmcmVlbGlzdCk7XG4gXHRcdFx0aWYgKCFsKVxuIFx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUUyQklHKTtcbi1cdFx0XHRsX25ldyA9IGNvbnRhaW5lcl9vZihsLCBzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZSk7XG4mIzQzO1x0XHRcdGxfbmV3ID0gY29udGFpbmVyX29mKGwsIHN0cnVjdCBodGFiX2VsZW0sIG5vZGUuZm5vZGUpO1xuIFx0XHRcdGJwZl9tYXBfaW5jX2VsZW1fY291bnQoXHUwMDI2aHRhYi1cdTAwM2VtYXApO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuQEAgLTExMTcsMTAgJiM0MzsxMjE1LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksXG4gXHRcdH1cbiBcdH1cbiBcbi1cdG1lbWNweShsX25ldy1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpO1xuJiM0MztcdG1lbWNweShodGFiX2VsZW1fa2V5KGh0YWIsIGxfbmV3KSwga2V5LCBrZXlfc2l6ZSk7XG4gXHRpZiAocGVyY3B1KSB7XG4gXHRcdGlmIChwcmVhbGxvYykge1xuLVx0XHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsX25ldywga2V5X3NpemUpO1xuJiM0MztcdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9uZXcpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qIGFsbG9jX3BlcmNwdSB6ZXJvLWZpbGxzICovXG4gXHRcdFx0dm9pZCAqcHRyID0gYnBmX21lbV9jYWNoZV9hbGxvYyhcdTAwMjZodGFiLVx1MDAzZXBjcHVfbWEpO1xuQEAgLTExMzAsMjYgJiM0MzsxMjI4LDI2IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksXG4gXHRcdFx0XHRsX25ldyA9IEVSUl9QVFIoLUVOT01FTSk7XG4gXHRcdFx0XHRnb3RvIGRlY19jb3VudDtcbiBcdFx0XHR9XG4tXHRcdFx0bF9uZXctXHUwMDNlcHRyX3RvX3BwdHIgPSBwdHI7XG4mIzQzO1x0XHRcdGh0YWJfZWxlbV9zZXRfcHRyX3RvX3BwdHIobF9uZXcsIHB0cik7XG4gXHRcdFx0cHB0ciA9ICoodm9pZCBfX3BlcmNwdSAqKilwdHI7XG4gXHRcdH1cbiBcbiBcdFx0cGNwdV9pbml0X3ZhbHVlKGh0YWIsIHBwdHIsIHZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7XG4gXG4gXHRcdGlmICghcHJlYWxsb2MpXG4tXHRcdFx0aHRhYl9lbGVtX3NldF9wdHIobF9uZXcsIGtleV9zaXplLCBwcHRyKTtcbiYjNDM7XHRcdFx0aHRhYl9lbGVtX3NldF9wdHIoaHRhYiwgbF9uZXcsIHBwdHIpO1xuIFx0fSBlbHNlIGlmIChmZF9odGFiX21hcF9uZWVkc19hZGp1c3QoaHRhYikpIHtcbiBcdFx0c2l6ZSA9IHJvdW5kX3VwKHNpemUsIDgpO1xuLVx0XHRtZW1jcHkoaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBrZXlfc2l6ZSksIHZhbHVlLCBzaXplKTtcbiYjNDM7XHRcdG1lbWNweShodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLCB2YWx1ZSwgc2l6ZSk7XG4gXHR9IGVsc2UgaWYgKG1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfTE9DSykge1xuIFx0XHRjb3B5X21hcF92YWx1ZV9sb2NrZWQoXHUwMDI2aHRhYi1cdTAwM2VtYXAsXG4tXHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUobF9uZXcsIGtleV9zaXplKSxcbiYjNDM7XHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLFxuIFx0XHRcdFx0ICAgICAgdmFsdWUsIGZhbHNlKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGNvcHlfbWFwX3ZhbHVlKFx1MDAyNmh0YWItXHUwMDNlbWFwLCBodGFiX2VsZW1fdmFsdWUobF9uZXcsIGtleV9zaXplKSwgdmFsdWUpO1xuJiM0MztcdFx0Y29weV9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksIHZhbHVlKTtcbiBcdH1cbiBcbi1cdGxfbmV3LVx1MDAzZWhhc2ggPSBoYXNoO1xuJiM0MztcdGh0YWJfZWxlbV9zZXRfaGFzaChodGFiLCBsX25ldywgaGFzaCk7XG4gXHRyZXR1cm4gbF9uZXc7XG4gZGVjX2NvdW50OlxuIFx0ZGVjX2VsZW1fY291bnQoaHRhYik7XG5AQCAtMTE5OSw3ICYjNDM7MTI5Nyw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4gXHRcdGlmICh1bmxpa2VseSghYnRmX3JlY29yZF9oYXNfZmllbGQobWFwLVx1MDAzZXJlY29yZCwgQlBGX1NQSU5fTE9DSykpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHQvKiBmaW5kIGFuIGVsZW1lbnQgd2l0aG91dCB0YWtpbmcgdGhlIGJ1Y2tldCBsb2NrICovXG4tXHRcdGxfb2xkID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsXG4mIzQzO1x0XHRsX29sZCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLFxuIFx0XHRcdFx0XHQgICAgICBodGFiLVx1MDAzZW5fYnVja2V0cyk7XG4gXHRcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xuIFx0XHRpZiAocmV0KVxuQEAgLTEyMDcsNyAmIzQzOzEzMDUsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIFx0XHRpZiAobF9vbGQpIHtcbiBcdFx0XHQvKiBncmFiIHRoZSBlbGVtZW50IGxvY2sgYW5kIHVwZGF0ZSB2YWx1ZSBpbiBwbGFjZSAqL1xuIFx0XHRcdGNvcHlfbWFwX3ZhbHVlX2xvY2tlZChtYXAsXG4tXHRcdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShsX29sZCwga2V5X3NpemUpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfb2xkKSxcbiBcdFx0XHRcdFx0ICAgICAgdmFsdWUsIGZhbHNlKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuQEAgLTEyMjEsNyAmIzQzOzEzMTksNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuJiM0MztcdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuIFxuIFx0cmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7XG4gXHRpZiAocmV0KVxuQEAgLTEyMzUsNyAmIzQzOzEzMzMsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIFx0XHQgKiBhbmQgdXBkYXRlIGVsZW1lbnQgaW4gcGxhY2VcbiBcdFx0ICovXG4gXHRcdGNvcHlfbWFwX3ZhbHVlX2xvY2tlZChtYXAsXG4tXHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUobF9vbGQsIGtleV9zaXplKSxcbiYjNDM7XHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9vbGQpLFxuIFx0XHRcdFx0ICAgICAgdmFsdWUsIGZhbHNlKTtcbiBcdFx0cmV0ID0gMDtcbiBcdFx0Z290byBlcnI7XG5AQCAtMTI1Miw5ICYjNDM7MTM1MCw5IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4gXHQvKiBhZGQgbmV3IGVsZW1lbnQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QsIHNvIHRoYXRcbiBcdCAqIGNvbmN1cnJlbnQgc2VhcmNoIHdpbGwgZmluZCBpdCBiZWZvcmUgb2xkIGVsZW1cbiBcdCAqL1xuLVx0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFx1MDAyNmxfbmV3LVx1MDAzZWhhc2hfbm9kZSwgaGVhZCk7XG4mIzQzO1x0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFx1MDAyNmxfbmV3LVx1MDAzZW5vZGUuaGFzaF9ub2RlLCBoZWFkKTtcbiBcdGlmIChsX29sZCkge1xuLVx0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmxfb2xkLVx1MDAzZWhhc2hfbm9kZSk7XG4mIzQzO1x0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmxfb2xkLVx1MDAzZW5vZGUuaGFzaF9ub2RlKTtcbiBcbiBcdFx0LyogbF9vbGQgaGFzIGFscmVhZHkgYmVlbiBzdGFzaGVkIGluIGh0YWItXHUwMDNlZXh0cmFfZWxlbXMsIGNhbmNlbFxuIFx0XHQgKiBpdHMgcmV1c2FibGUgc3BlY2lhbCBmaWVsZHMgYmVmb3JlIGl0IGlzIGF2YWlsYWJsZSBmb3IgcmV1c2UuXG5AQCAtMTI3NSw3ICYjNDM7MTM3Myw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfbHJ1X3B1c2hfZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmVsZW0pXG4ge1xuIFx0Y2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoaHRhYiwgZWxlbSk7XG4gXHRicGZfbWFwX2RlY19lbGVtX2NvdW50KFx1MDAyNmh0YWItXHUwMDNlbWFwKTtcbi1cdGJwZl9scnVfcHVzaF9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBcdTAwMjZlbGVtLVx1MDAzZWxydV9ub2RlKTtcbiYjNDM7XHRicGZfbHJ1X3B1c2hfZnJlZShcdTAwMjZodGFiLVx1MDAzZWxydSwgaHRhYl9lbGVtX2xydV9ub2RlKGVsZW0pKTtcbiB9XG4gXG4gc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG5AQCAtMTMxMCwxMyAmIzQzOzE0MDgsMTMgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWVcbiBcdGxfbmV3ID0gcHJlYWxsb2NfbHJ1X3BvcChodGFiLCBrZXksIGhhc2gpO1xuIFx0aWYgKCFsX25ldylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRjb3B5X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBtYXAtXHUwMDNla2V5X3NpemUpLCB2YWx1ZSk7XG4mIzQzO1x0Y29weV9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksIHZhbHVlKTtcbiBcbiBcdHJldCA9IGh0YWJfbG9ja19idWNrZXQoYiwgXHUwMDI2ZmxhZ3MpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBlcnJfbG9ja19idWNrZXQ7XG4gXG4tXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiYjNDM7XHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiBcbiBcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xuIFx0aWYgKHJldClcbkBAIC0xMzI1LDEwICYjNDM7MTQyMywxMCBAQCBzdGF0aWMgbG9uZyBodGFiX2xydV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZVxuIFx0LyogYWRkIG5ldyBlbGVtZW50IHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0LCBzbyB0aGF0XG4gXHQgKiBjb25jdXJyZW50IHNlYXJjaCB3aWxsIGZpbmQgaXQgYmVmb3JlIG9sZCBlbGVtXG4gXHQgKi9cbi1cdGhsaXN0X251bGxzX2FkZF9oZWFkX3JjdShcdTAwMjZsX25ldy1cdTAwM2VoYXNoX25vZGUsIGhlYWQpO1xuJiM0MztcdGhsaXN0X251bGxzX2FkZF9oZWFkX3JjdShcdTAwMjZsX25ldy1cdTAwM2Vub2RlLmhhc2hfbm9kZSwgaGVhZCk7XG4gXHRpZiAobF9vbGQpIHtcbi1cdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXHUwMDI2bF9uZXctXHUwMDNlbHJ1X25vZGUpO1xuLVx0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmxfb2xkLVx1MDAzZWhhc2hfbm9kZSk7XG4mIzQzO1x0XHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobF9uZXcpKTtcbiYjNDM7XHRcdGhsaXN0X251bGxzX2RlbF9yY3UoXHUwMDI2bF9vbGQtXHUwMDNlbm9kZS5oYXNoX25vZGUpO1xuIFx0fVxuIFx0cmV0ID0gMDtcbiBcbkBAIC0xMzgzLDcgJiM0MzsxNDgxLDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW1faW5fcGxhY2Uoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuJiM0MztcdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuIFxuIFx0cmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7XG4gXHRpZiAocmV0KVxuQEAgLTEzOTIsMTAgJiM0MzsxNDkwLDEwIEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtX2luX3BsYWNlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcdGlmIChsX29sZCkge1xuIFx0XHQvKiBVcGRhdGUgdmFsdWUgaW4tcGxhY2UgKi9cbiBcdFx0aWYgKHBlcmNwdSkge1xuLVx0XHRcdHBjcHVfY29weV92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihsX29sZCwga2V5X3NpemUpLFxuJiM0MztcdFx0XHRwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9vbGQpLFxuIFx0XHRcdFx0XHR2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHZvaWQgKippbm5lcl9tYXBfcHB0ciA9IGh0YWJfZWxlbV92YWx1ZShsX29sZCwga2V5X3NpemUpO1xuJiM0MztcdFx0XHR2b2lkICoqaW5uZXJfbWFwX3BwdHIgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9vbGQpO1xuIFxuIFx0XHRcdG9sZF9tYXBfcHRyID0gKmlubmVyX21hcF9wcHRyO1xuIFx0XHRcdFdSSVRFX09OQ0UoKmlubmVyX21hcF9wcHRyLCAqKHZvaWQgKiopdmFsdWUpO1xuQEAgLTE0MDcsNyAmIzQzOzE1MDUsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbV9pbl9wbGFjZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gXHRcdFx0cmV0ID0gUFRSX0VSUihsX25ldyk7XG4gXHRcdFx0Z290byBlcnI7XG4gXHRcdH1cbi1cdFx0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFx1MDAyNmxfbmV3LVx1MDAzZWhhc2hfbm9kZSwgaGVhZCk7XG4mIzQzO1x0XHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXHUwMDI2bF9uZXctXHUwMDNlbm9kZS5oYXNoX25vZGUsIGhlYWQpO1xuIFx0fVxuIGVycjpcbiBcdGh0YWJfdW5sb2NrX2J1Y2tldChiLCBmbGFncyk7XG5AQCAtMTQ1NiwyMiAmIzQzOzE1NTQsMjIgQEAgc3RhdGljIGxvbmcgX19odGFiX2xydV9wZXJjcHVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gZXJyX2xvY2tfYnVja2V0O1xuIFxuLVx0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4mIzQzO1x0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4gXG4gXHRyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0aWYgKGxfb2xkKSB7XG4tXHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKFx1MDAyNmxfb2xkLVx1MDAzZWxydV9ub2RlKTtcbiYjNDM7XHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsX29sZCkpO1xuIFxuIFx0XHQvKiBwZXItY3B1IGhhc2ggbWFwIGNhbiB1cGRhdGUgdmFsdWUgaW4tcGxhY2UgKi9cbi1cdFx0cGNwdV9jb3B5X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGxfb2xkLCBrZXlfc2l6ZSksXG4mIzQzO1x0XHRwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9vbGQpLFxuIFx0XHRcdFx0dmFsdWUsIG9uYWxsY3B1cywgbWFwX2ZsYWdzKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHBjcHVfaW5pdF92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihsX25ldywga2V5X3NpemUpLFxuJiM0MztcdFx0cGNwdV9pbml0X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGxfbmV3KSxcbiBcdFx0XHRcdHZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7XG4tXHRcdGhsaXN0X251bGxzX2FkZF9oZWFkX3JjdShcdTAwMjZsX25ldy1cdTAwM2VoYXNoX25vZGUsIGhlYWQpO1xuJiM0MztcdFx0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFx1MDAyNmxfbmV3LVx1MDAzZW5vZGUuaGFzaF9ub2RlLCBoZWFkKTtcbiBcdFx0bF9uZXcgPSBOVUxMO1xuIFx0fVxuIFx0cmV0ID0gMDtcbkBAIC0xNDgwLDcgJiM0MzsxNTc4LDcgQEAgc3RhdGljIGxvbmcgX19odGFiX2xydV9wZXJjcHVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBlcnJfbG9ja19idWNrZXQ6XG4gXHRpZiAobF9uZXcpIHtcbiBcdFx0YnBmX21hcF9kZWNfZWxlbV9jb3VudChcdTAwMjZodGFiLVx1MDAzZW1hcCk7XG4tXHRcdGJwZl9scnVfcHVzaF9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBcdTAwMjZsX25ldy1cdTAwM2VscnVfbm9kZSk7XG4mIzQzO1x0XHRicGZfbHJ1X3B1c2hfZnJlZShcdTAwMjZodGFiLVx1MDAzZWxydSwgaHRhYl9lbGVtX2xydV9ub2RlKGxfbmV3KSk7XG4gXHR9XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0xNTIxLDkgJiM0MzsxNjE5LDkgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4mIzQzO1x0bCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiBcdGlmIChsKVxuLVx0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmwtXHUwMDNlaGFzaF9ub2RlKTtcbiYjNDM7XHRcdGhsaXN0X251bGxzX2RlbF9yY3UoXHUwMDI2bC1cdTAwM2Vub2RlLmhhc2hfbm9kZSk7XG4gXHRlbHNlXG4gXHRcdHJldCA9IC1FTk9FTlQ7XG4gXG5AQCAtMTU1NiwxMCAmIzQzOzE2NTQsMTAgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRsID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuJiM0MztcdGwgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4gXG4gXHRpZiAobClcbi1cdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZWhhc2hfbm9kZSk7XG4mIzQzO1x0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmwtXHUwMDNlbm9kZS5oYXNoX25vZGUpO1xuIFx0ZWxzZVxuIFx0XHRyZXQgPSAtRU5PRU5UO1xuIFxuQEAgLTE1ODEsOCAmIzQzOzE2NzksOCBAQCBzdGF0aWMgdm9pZCBkZWxldGVfYWxsX2VsZW1lbnRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47XG4gXHRcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4tXHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XG4tXHRcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZWhhc2hfbm9kZSk7XG4mIzQzO1x0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKSB7XG4mIzQzO1x0XHRcdGhsaXN0X251bGxzX2RlbF9yY3UoXHUwMDI2bC1cdTAwM2Vub2RlLmhhc2hfbm9kZSk7XG4gXHRcdFx0aHRhYl9lbGVtX2ZyZWUoaHRhYiwgbCk7XG4gXHRcdH1cbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG5AQCAtMTU5OSwxMCAmIzQzOzE2OTcsMTAgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX21hbGxvY2VkX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0XHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjtcbiBcdFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcbiBcbi1cdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnkobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XG4mIzQzO1x0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeShsLCBuLCBoZWFkLCBub2RlLmhhc2hfbm9kZSkge1xuIFx0XHRcdC8qIFdlIG9ubHkgZnJlZSBpbnRlcm5hbCBzdHJ1Y3RzIG9uIHVyZWYgZHJvcHBpbmcgdG8gemVybyAqL1xuIFx0XHRcdGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKFx1MDAyNmh0YWItXHUwMDNlbWFwLFxuLVx0XHRcdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShsLCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCkpO1xuIFx0XHR9XG4gXHRcdGNvbmRfcmVzY2hlZF9yY3UoKTtcbiBcdH1cbkBAIC0xNjk3LDcgJiM0MzsxNzk1LDcgQEAgc3RhdGljIGludCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4mIzQzO1x0bCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiBcdGlmICghbCkge1xuIFx0XHRyZXQgPSAtRU5PRU5UO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG5AQCAtMTcwOCwxNCAmIzQzOzE4MDYsMTQgQEAgc3RhdGljIGludCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFx0XHR2b2lkIF9fcGVyY3B1ICpwcHRyO1xuIFx0XHRpbnQgb2ZmID0gMCwgY3B1O1xuIFxuLVx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwga2V5X3NpemUpO1xuJiM0MztcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xuIFx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4gXHRcdFx0Y29weV9tYXBfdmFsdWVfbG9uZyhcdTAwMjZodGFiLVx1MDAzZW1hcCwgdmFsdWUgJiM0Mzsgb2ZmLCBwZXJfY3B1X3B0cihwcHRyLCBjcHUpKTtcbiBcdFx0XHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIHZhbHVlICYjNDM7IG9mZik7XG4gXHRcdFx0b2ZmICYjNDM7PSByb3VuZHVwX3ZhbHVlX3NpemU7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4tXHRcdHZvaWQgKnNyYyA9IGh0YWJfZWxlbV92YWx1ZShsLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuJiM0MztcdFx0dm9pZCAqc3JjID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpO1xuIFxuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX0xPQ0spXG4gXHRcdFx0Y29weV9tYXBfdmFsdWVfbG9ja2VkKG1hcCwgdmFsdWUsIHNyYywgdHJ1ZSk7XG5AQCAtMTcyNCw3ICYjNDM7MTgyMiw3IEBAIHN0YXRpYyBpbnQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcdFx0LyogWmVyb2luZyBzcGVjaWFsIGZpZWxkcyBpbiB0aGUgdGVtcCBidWZmZXIgKi9cbiBcdFx0Y2hlY2tfYW5kX2luaXRfbWFwX3ZhbHVlKG1hcCwgdmFsdWUpO1xuIFx0fVxuLVx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZWhhc2hfbm9kZSk7XG4mIzQzO1x0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZW5vZGUuaGFzaF9ub2RlKTtcbiBcbiBvdXRfdW5sb2NrOlxuIFx0aHRhYl91bmxvY2tfYnVja2V0KGIsIGJmbGFncyk7XG5AQCAtMTg2MCw3ICYjNDM7MTk1OCw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdH1cbiBcbiBcdGJ1Y2tldF9jbnQgPSAwO1xuLVx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSlcbiYjNDM7XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpXG4gXHRcdGJ1Y2tldF9jbnQmIzQzOyYjNDM7O1xuIFxuIFx0aWYgKGJ1Y2tldF9jbnQgXHUwMDI2XHUwMDI2ICFsb2NrZWQpIHtcbkBAIC0xODk3LDE0ICYjNDM7MTk5NSwxNCBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHRpZiAoIWxvY2tlZClcbiBcdFx0Z290byBuZXh0X2JhdGNoO1xuIFxuLVx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShsLCBuLCBoZWFkLCBoYXNoX25vZGUpIHtcbi1cdFx0bWVtY3B5KGRzdF9rZXksIGwtXHUwMDNla2V5LCBrZXlfc2l6ZSk7XG4mIzQzO1x0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShsLCBuLCBoZWFkLCBub2RlLmhhc2hfbm9kZSkge1xuJiM0MztcdFx0bWVtY3B5KGRzdF9rZXksIGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleV9zaXplKTtcbiBcbiBcdFx0aWYgKGlzX3BlcmNwdSkge1xuIFx0XHRcdGludCBvZmYgPSAwLCBjcHU7XG4gXHRcdFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcbiBcbi1cdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVx1MDAzZWtleV9zaXplKTtcbiYjNDM7XHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xuIFx0XHRcdGlmIChlbGVtX21hcF9mbGFncyBcdTAwMjYgQlBGX0ZfQ1BVKSB7XG4gXHRcdFx0XHRjcHUgPSBlbGVtX21hcF9mbGFncyBcdTAwM2VcdTAwM2UgMzI7XG4gXHRcdFx0XHRjb3B5X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgZHN0X3ZhbCwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7XG5AQCAtMTkxOCw3ICYjNDM7MjAxNiw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0dmFsdWUgPSBodGFiX2VsZW1fdmFsdWUobCwga2V5X3NpemUpO1xuJiM0MztcdFx0XHR2YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcbiBcdFx0XHRpZiAoaXNfZmRfaHRhYihodGFiKSkge1xuIFx0XHRcdFx0c3RydWN0IGJwZl9tYXAgKippbm5lcl9tYXAgPSB2YWx1ZTtcbiBcbkBAIC0xOTM2LDcgJiM0MzsyMDM0LDcgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHRcdGNoZWNrX2FuZF9pbml0X21hcF92YWx1ZShtYXAsIGRzdF92YWwpO1xuIFx0XHR9XG4gXHRcdGlmIChkb19kZWxldGUpIHtcbi1cdFx0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmwtXHUwMDNlaGFzaF9ub2RlKTtcbiYjNDM7XHRcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZW5vZGUuaGFzaF9ub2RlKTtcbiBcbiBcdFx0XHQvKiBicGZfbHJ1X3B1c2hfZnJlZSgpIHdpbGwgYWNxdWlyZSBscnVfbG9jaywgd2hpY2hcbiBcdFx0XHQgKiBtYXkgY2F1c2UgZGVhZGxvY2suIFNlZSBjb21tZW50cyBpbiBmdW5jdGlvblxuQEAgLTE5NDgsNyAmIzQzOzIwNDYsNyBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHRcdFx0ICogbG9jayBiZWluZyBoZWxkIGFuZCBpdCB2aW9sYXRlcyB0aGUgbG9jayBydWxlLCBzb1xuIFx0XHRcdCAqIGludm9rZSBmcmVlX2h0YWJfZWxlbSgpIGFmdGVyIHVubG9jayBhcyB3ZWxsLlxuIFx0XHRcdCAqL1xuLVx0XHRcdGwtXHUwMDNlYmF0Y2hfZmxpbmsgPSBub2RlX3RvX2ZyZWU7XG4mIzQzO1x0XHRcdGwtXHUwMDNlbm9kZS5iYXRjaF9mbGluayA9IG5vZGVfdG9fZnJlZTtcbiBcdFx0XHRub2RlX3RvX2ZyZWUgPSBsO1xuIFx0XHR9XG4gXHRcdGRzdF9rZXkgJiM0Mzs9IGtleV9zaXplO1xuQEAgLTE5NjAsNyAmIzQzOzIwNTgsNyBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXG4gXHR3aGlsZSAobm9kZV90b19mcmVlKSB7XG4gXHRcdGwgPSBub2RlX3RvX2ZyZWU7XG4tXHRcdG5vZGVfdG9fZnJlZSA9IG5vZGVfdG9fZnJlZS1cdTAwM2ViYXRjaF9mbGluaztcbiYjNDM7XHRcdG5vZGVfdG9fZnJlZSA9IG5vZGVfdG9fZnJlZS1cdTAwM2Vub2RlLmJhdGNoX2ZsaW5rO1xuIFx0XHRpZiAoaXNfbHJ1X21hcClcbiBcdFx0XHRodGFiX2xydV9wdXNoX2ZyZWUoaHRhYiwgbCk7XG4gXHRcdGVsc2VcbkBAIC0yMTA4LDggJiM0MzsyMjA2LDggQEAgYnBmX2hhc2hfbWFwX3NlcV9maW5kX25leHQoc3RydWN0IGJwZl9pdGVyX3NlcV9oYXNoX21hcF9pbmZvICppbmZvLFxuIFx0XHQvKiBubyB1cGRhdGUvZGVsZXRpb24gb24gdGhpcyBidWNrZXQsIHByZXZfZWxlbSBzaG91bGQgYmUgc3RpbGwgdmFsaWRcbiBcdFx0ICogYW5kIHdlIHdvbiYjMzk7dCBza2lwIGVsZW1lbnRzLlxuIFx0XHQgKi9cbi1cdFx0biA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoaGxpc3RfbnVsbHNfbmV4dF9yY3UoXHUwMDI2cHJldl9lbGVtLVx1MDAzZWhhc2hfbm9kZSkpO1xuLVx0XHRlbGVtID0gaGxpc3RfbnVsbHNfZW50cnlfc2FmZShuLCBzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoX25vZGUpO1xuJiM0MztcdFx0biA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoaGxpc3RfbnVsbHNfbmV4dF9yY3UoXHUwMDI2cHJldl9lbGVtLVx1MDAzZW5vZGUuaGFzaF9ub2RlKSk7XG4mIzQzO1x0XHRlbGVtID0gaGxpc3RfbnVsbHNfZW50cnlfc2FmZShuLCBzdHJ1Y3QgaHRhYl9lbGVtLCBub2RlLmhhc2hfbm9kZSk7XG4gXHRcdGlmIChlbGVtKVxuIFx0XHRcdHJldHVybiBlbGVtO1xuIFxuQEAgLTIxMjUsNyAmIzQzOzIyMjMsNyBAQCBicGZfaGFzaF9tYXBfc2VxX2ZpbmRfbmV4dChzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2hhc2hfbWFwX2luZm8gKmluZm8sXG4gXG4gXHRcdGNvdW50ID0gMDtcbiBcdFx0aGVhZCA9IFx1MDAyNmItXHUwMDNlaGVhZDtcbi1cdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGVsZW0sIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xuJiM0MztcdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGVsZW0sIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKSB7XG4gXHRcdFx0aWYgKGNvdW50IFx1MDAzZT0gc2tpcF9lbGVtcykge1xuIFx0XHRcdFx0aW5mby1cdTAwM2VidWNrZXRfaWQgPSBpO1xuIFx0XHRcdFx0aW5mby1cdTAwM2Vza2lwX2VsZW1zID0gY291bnQ7XG5AQCAtMjE4MywxMiAmIzQzOzIyODEsMTIgQEAgc3RhdGljIGludCBfX2JwZl9oYXNoX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGh0YWJfZWxlbSAqZWxlbSlcbiBcdFx0Y3R4Lm1ldGEgPSBcdTAwMjZtZXRhO1xuIFx0XHRjdHgubWFwID0gaW5mby1cdTAwM2VtYXA7XG4gXHRcdGlmIChlbGVtKSB7XG4tXHRcdFx0Y3R4LmtleSA9IGVsZW0tXHUwMDNla2V5O1xuJiM0MztcdFx0XHRjdHgua2V5ID0gaHRhYl9lbGVtX2tleShpbmZvLVx1MDAzZWh0YWIsIGVsZW0pO1xuIFx0XHRcdGlmICghaW5mby1cdTAwM2VwZXJjcHVfdmFsdWVfYnVmKSB7XG4tXHRcdFx0XHRjdHgudmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoZWxlbSwgbWFwLVx1MDAzZWtleV9zaXplKTtcbiYjNDM7XHRcdFx0XHRjdHgudmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoaW5mby1cdTAwM2VodGFiLCBlbGVtKTtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0cm91bmR1cF92YWx1ZV9zaXplID0gcm91bmRfdXAobWFwLVx1MDAzZXZhbHVlX3NpemUsIDgpO1xuLVx0XHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGVsZW0sIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4mIzQzO1x0XHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGluZm8tXHUwMDNlaHRhYiwgZWxlbSk7XG4gXHRcdFx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4gXHRcdFx0XHRcdGNvcHlfbWFwX3ZhbHVlX2xvbmcobWFwLCBpbmZvLVx1MDAzZXBlcmNwdV92YWx1ZV9idWYgJiM0Mzsgb2ZmLFxuIFx0XHRcdFx0XHRcdFx0ICAgIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuQEAgLTIyOTIsMTQgJiM0MzsyMzkwLDE0IEBAIHN0YXRpYyBsb25nIGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgYnBmX2NhbGxiYWNrX3QgY2FsbGJhY2tfXG4gXHRcdGIgPSBcdTAwMjZodGFiLVx1MDAzZWJ1Y2tldHNbaV07XG4gXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0aGVhZCA9IFx1MDAyNmItXHUwMDNlaGVhZDtcbi1cdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShlbGVtLCBuLCBoZWFkLCBoYXNoX25vZGUpIHtcbi1cdFx0XHRrZXkgPSBlbGVtLVx1MDAzZWtleTtcbiYjNDM7XHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUoZWxlbSwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpIHtcbiYjNDM7XHRcdFx0a2V5ID0gaHRhYl9lbGVtX2tleShodGFiLCBlbGVtKTtcbiBcdFx0XHRpZiAoaXNfcGVyY3B1KSB7XG4gXHRcdFx0XHQvKiBjdXJyZW50IGNwdSB2YWx1ZSBmb3IgcGVyY3B1IG1hcCAqL1xuLVx0XHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGVsZW0sIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4mIzQzO1x0XHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGVsZW0pO1xuIFx0XHRcdFx0dmFsID0gdGhpc19jcHVfcHRyKHBwdHIpO1xuIFx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHR2YWwgPSBodGFiX2VsZW1fdmFsdWUoZWxlbSwgbWFwLVx1MDAzZWtleV9zaXplKTtcbiYjNDM7XHRcdFx0XHR2YWwgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgZWxlbSk7XG4gXHRcdFx0fVxuIFx0XHRcdG51bV9lbGVtcyYjNDM7JiM0Mzs7XG4gXHRcdFx0cmV0ID0gY2FsbGJhY2tfZm4oKHU2NCkobG9uZyltYXAsICh1NjQpKGxvbmcpa2V5LFxuQEAgLTI0MDMsMTAgJiM0MzsyNTAxLDExIEBAIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xuIC8qIENhbGxlZCBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xuIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsID0gX19odGFiX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG4gXG4gXHRpZiAobClcbi1cdFx0cmV0dXJuIHRoaXNfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXHUwMDNla2V5X3NpemUpKTtcbiYjNDM7XHRcdHJldHVybiB0aGlzX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCkpO1xuIFx0ZWxzZVxuIFx0XHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtMjQxNCw2ICYjNDM7MjUxMyw3IEBAIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIC8qIGlubGluZSBicGZfbWFwX2xvb2t1cF9lbGVtKCkgY2FsbCBmb3IgcGVyLUNQVSBoYXNobWFwICovXG4gc3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjtcbiBcbiBcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxuQEAgLTI0MjQsNyAmIzQzOzI1MjQsNyBAQCBzdGF0aWMgaW50IGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zblxuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIEJQRl9SRUdfMCwgMCwgMyk7XG4gXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfSU1NKEJQRl9BREQsIEJQRl9SRUdfMCxcbi1cdFx0XHRcdG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGtleSkgJiM0Mzsgcm91bmR1cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbiYjNDM7XHRcdFx0XHRodGFiLVx1MDAzZWtleV9vZmZzZXQgJiM0Mzsgcm91bmR1cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApO1xuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xuIFxuQEAgLTI0MzMsNiAmIzQzOzI1MzMsNyBAQCBzdGF0aWMgaW50IGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zblxuIFxuIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdTMyIGNwdSlcbiB7XG4mIzQzO1x0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuIFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcbiBcbiBcdGlmIChjcHUgXHUwMDNlPSBucl9jcHVfaWRzKVxuQEAgLTI0NDAsMTggJiM0MzsyNTQxLDE5IEBAIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcbiBcdGwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcdGlmIChsKVxuLVx0XHRyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVx1MDAzZWtleV9zaXplKSwgY3B1KTtcbiYjNDM7XHRcdHJldHVybiBwZXJfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKSwgY3B1KTtcbiBcdGVsc2VcbiBcdFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiB7XG4mIzQzO1x0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuIFx0c3RydWN0IGh0YWJfZWxlbSAqbCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xuIFxuIFx0aWYgKGwpIHtcbi1cdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXHUwMDI2bC1cdTAwM2VscnVfbm9kZSk7XG4tXHRcdHJldHVybiB0aGlzX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVx1MDAzZWtleV9zaXplKSk7XG4mIzQzO1x0XHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobCkpO1xuJiM0MztcdFx0cmV0dXJuIHRoaXNfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKSk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gTlVMTDtcbkBAIC0yNDU5LDYgJiM0MzsyNTYxLDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIFxuIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHUzMiBjcHUpXG4ge1xuJiM0MztcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4gXHRpZiAoY3B1IFx1MDAzZT0gbnJfY3B1X2lkcylcbkBAIC0yNDY2LDggJiM0MzsyNTY5LDggQEAgc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtcbiBcbiBcdGwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcdGlmIChsKSB7XG4tXHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKFx1MDAyNmwtXHUwMDNlbHJ1X25vZGUpO1xuLVx0XHRyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVx1MDAzZWtleV9zaXplKSwgY3B1KTtcbiYjNDM7XHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsKSk7XG4mIzQzO1x0XHRyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCksIGNwdSk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gTlVMTDtcbkBAIC0yNDc1LDYgJiM0MzsyNTc4LDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtcbiBcbiBpbnQgYnBmX3BlcmNwdV9oYXNoX2NvcHkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcbiB7XG4mIzQzO1x0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuIFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcbiBcdHZvaWQgX19wZXJjcHUgKnBwdHI7XG4gXHRpbnQgcmV0ID0gLUVOT0VOVDtcbkBAIC0yNDk0LDcgJiM0MzsyNTk4LDcgQEAgaW50IGJwZl9wZXJjcHVfaGFzaF9jb3B5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxcbiBcdC8qIFdlIGRvIG5vdCBtYXJrIExSVSBtYXAgZWxlbWVudCBoZXJlIGluIG9yZGVyIHRvIG5vdCBtZXNzIHVwXG4gXHQgKiBldmljdGlvbiBoZXVyaXN0aWNzIHdoZW4gdXNlciBzcGFjZSBkb2VzIGEgbWFwIHdhbGsuXG4gXHQgKi9cbi1cdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuJiM0MztcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKTtcbiBcdGlmIChtYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX0NQVSkge1xuIFx0XHRjcHUgPSBtYXBfZmxhZ3MgXHUwMDNlXHUwMDNlIDMyO1xuIFx0XHRjb3B5X21hcF92YWx1ZShtYXAsIHZhbHVlLCBwZXJfY3B1X3B0cihwcHRyLCBjcHUpKTtcbkBAIC0yNTMyLDYgJiM0MzsyNjM2LDcgQEAgaW50IGJwZl9wZXJjcHVfaGFzaF91cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbiBzdGF0aWMgdm9pZCBodGFiX3BlcmNwdV9tYXBfc2VxX3Nob3dfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gXHRcdFx0XHRcdCAgc3RydWN0IHNlcV9maWxlICptKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsO1xuIFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcbiBcdGludCBjcHU7XG5AQCAtMjU0Niw3ICYjNDM7MjY1MSw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfcGVyY3B1X21hcF9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcbiBcdGJ0Zl90eXBlX3NlcV9zaG93KG1hcC1cdTAwM2VidGYsIG1hcC1cdTAwM2VidGZfa2V5X3R5cGVfaWQsIGtleSwgbSk7XG4gXHRzZXFfcHV0cyhtLCBcJiMzNDs6IHtcXG5cJiMzNDspO1xuLVx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4mIzQzO1x0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuIFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0O1xcdGNwdSVkOiBcJiMzNDssIGNwdSk7XG4gXHRcdGJ0Zl90eXBlX3NlcV9zaG93KG1hcC1cdTAwM2VidGYsIG1hcC1cdTAwM2VidGZfdmFsdWVfdHlwZV9pZCxcbkBAIC0yNjE5LDggJiM0MzsyNzI0LDggQEAgc3RhdGljIHZvaWQgZmRfaHRhYl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaHRhYi1cdTAwM2VuX2J1Y2tldHM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGhlYWQgPSBzZWxlY3RfYnVja2V0KGh0YWIsIGkpO1xuIFxuLVx0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xuLVx0XHRcdHZvaWQgKnB0ciA9IGZkX2h0YWJfbWFwX2dldF9wdHIobWFwLCBsKTtcbiYjNDM7XHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpIHtcbiYjNDM7XHRcdFx0dm9pZCAqcHRyID0gZmRfaHRhYl9tYXBfZ2V0X3B0cihodGFiLCBsKTtcbiBcbiBcdFx0XHRtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9mZF9wdXRfcHRyKG1hcCwgcHRyLCBmYWxzZSk7XG4gXHRcdH1cbkBAIC0yNzA1LDYgJiM0MzsyODEwLDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfb2ZfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBzdGF0aWMgaW50IGh0YWJfb2ZfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdCAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiB7XG4mIzQzO1x0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XG4gXHRjb25zdCBpbnQgcmV0ID0gQlBGX1JFR18wO1xuIFxuQEAgLTI3MTMsNyAmIzQzOzI4MTksNyBAQCBzdGF0aWMgaW50IGh0YWJfb2ZfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9FTUlUX0NBTEwoX19odGFiX21hcF9sb29rdXBfZWxlbSk7XG4gXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCByZXQsIDAsIDIpO1xuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCByZXQsXG4tXHRcdFx0XHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICYjNDM7XG4mIzQzO1x0XHRcdFx0aHRhYi1cdTAwM2VrZXlfb2Zmc2V0ICYjNDM7XG4gXHRcdFx0XHRyb3VuZF91cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9EVywgcmV0LCByZXQsIDApO1xuIFxuQEAgLTMxMTIsNyAmIzQzOzMyMTgsNyBAQCBzdGF0aWMgaW50IHJodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIHtcbiBcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcbiBcbi1cdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZyaHRhYi1cdTAwM2VtYSwgcmh0YWJfbWVtX2R0b3IpO1xuJiM0MztcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZyaHRhYi1cdTAwM2VtYSwgcmh0YWJfbWVtX2R0b3IsIG9mZnNldG9mKHN0cnVjdCByaHRhYl9lbGVtLCBkYXRhKSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcClcbkBAIC0zNTMzLDMgJiM0MzszNjM5LDE2IEBAIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xuIFx0Lm1hcF9idGZfaWQgPSBcdTAwMjZyaHRhYl9tYXBfYnRmX2lkc1swXSxcbiBcdC5pdGVyX3NlcV9pbmZvID0gXHUwMDI2cmhhc2hfaXRlcl9zZXFfaW5mbyxcbiB9O1xuJiM0MztcbiYjNDM7c2l6ZV90IGJwZl9odGFiX21hcF9tZXRhX3NpemUodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzaXplb2Yoc3RydWN0IGJwZl9odGFiKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBicGZfaHRhYl9tYXBfbWV0YV9pbml0KHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXBfbWV0YSwgc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfaHRhYiAqaW5uZXJfaHRhYl9tZXRhID0gY29udGFpbmVyX29mKGlubmVyX21hcF9tZXRhLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4mIzQzO1x0c3RydWN0IGJwZl9odGFiICppbm5lcl9odGFiID0gY29udGFpbmVyX29mKGlubmVyX21hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuJiM0MztcbiYjNDM7XHRpbm5lcl9odGFiX21ldGEtXHUwMDNla2V5X29mZnNldCA9IGlubmVyX2h0YWItXHUwMDNla2V5X29mZnNldDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWFwX2luX21hcC5jIGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmNcbmluZGV4IGQyY2JhYjRiZGY2NDQuLmIyZGI1ZDBjOThiZWUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL21hcF9pbl9tYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmNcbkBAIC03LDYgJiM0Mzs3LDE1IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7bWFwX2luX21hcC5oXCYjMzQ7XG4gXG4mIzQzO3N0YXRpYyBib29sIGJwZl9tYXBfdHlwZV9pc19odGFiKGVudW0gYnBmX21hcF90eXBlIHR5cGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdHlwZSA9PSBCUEZfTUFQX1RZUEVfSEFTSCB8fFxuJiM0MztcdCAgICAgICB0eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSCB8fFxuJiM0MztcdCAgICAgICB0eXBlID09IEJQRl9NQVBfVFlQRV9MUlVfSEFTSCB8fFxuJiM0MztcdCAgICAgICB0eXBlID09IEJQRl9NQVBfVFlQRV9MUlVfUEVSQ1BVX0hBU0ggfHxcbiYjNDM7XHQgICAgICAgdHlwZSA9PSBCUEZfTUFQX1RZUEVfSEFTSF9PRl9NQVBTO1xuJiM0Mzt9XG4mIzQzO1xuIHN0cnVjdCBicGZfbWFwICpicGZfbWFwX21ldGFfYWxsb2MoaW50IGlubmVyX21hcF91ZmQpXG4ge1xuIFx0c3RydWN0IGJwZl9tYXAgKmlubmVyX21hcCwgKmlubmVyX21hcF9tZXRhO1xuQEAgLTI5LDYgJiM0MzszOCw4IEBAIHN0cnVjdCBicGZfbWFwICpicGZfbWFwX21ldGFfYWxsb2MoaW50IGlubmVyX21hcF91ZmQpXG4gXHQvKiBJbiBzb21lIGNhc2VzIHZlcmlmaWVyIG5lZWRzIHRvIGFjY2VzcyBiZXlvbmQganVzdCBiYXNlIG1hcC4gKi9cbiBcdGlmIChpbm5lcl9tYXAtXHUwMDNlb3BzID09IFx1MDAyNmFycmF5X21hcF9vcHMgfHwgaW5uZXJfbWFwLVx1MDAzZW9wcyA9PSBcdTAwMjZwZXJjcHVfYXJyYXlfbWFwX29wcylcbiBcdFx0aW5uZXJfbWFwX21ldGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2FycmF5KTtcbiYjNDM7XHRlbHNlIGlmIChicGZfbWFwX3R5cGVfaXNfaHRhYihpbm5lcl9tYXAtXHUwMDNlbWFwX3R5cGUpKVxuJiM0MztcdFx0aW5uZXJfbWFwX21ldGFfc2l6ZSA9IGJwZl9odGFiX21hcF9tZXRhX3NpemUoKTtcbiBcbiBcdGlubmVyX21hcF9tZXRhID0ga3phbGxvYyhpbm5lcl9tYXBfbWV0YV9zaXplLCBHRlBfVVNFUik7XG4gXHRpZiAoIWlubmVyX21hcF9tZXRhKVxuQEAgLTcwLDYgJiM0Mzs4MSw4IEBAIHN0cnVjdCBicGZfbWFwICpicGZfbWFwX21ldGFfYWxsb2MoaW50IGlubmVyX21hcF91ZmQpXG4gXHRcdGlubmVyX2FycmF5X21ldGEtXHUwMDNlaW5kZXhfbWFzayA9IGlubmVyX2FycmF5LVx1MDAzZWluZGV4X21hc2s7XG4gXHRcdGlubmVyX2FycmF5X21ldGEtXHUwMDNlZWxlbV9zaXplID0gaW5uZXJfYXJyYXktXHUwMDNlZWxlbV9zaXplO1xuIFx0XHRpbm5lcl9tYXBfbWV0YS1cdTAwM2VieXBhc3Nfc3BlY192MSA9IGlubmVyX21hcC1cdTAwM2VieXBhc3Nfc3BlY192MTtcbiYjNDM7XHR9IGVsc2UgaWYgKGJwZl9tYXBfdHlwZV9pc19odGFiKGlubmVyX21hcC1cdTAwM2VtYXBfdHlwZSkpIHtcbiYjNDM7XHRcdGJwZl9odGFiX21hcF9tZXRhX2luaXQoaW5uZXJfbWFwX21ldGEsIGlubmVyX21hcCk7XG4gXHR9XG4gXHRyZXR1cm4gaW5uZXJfbWFwX21ldGE7XG4gfVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWFwX2luX21hcC5oIGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmhcbmluZGV4IDdkNjE2MDIzNTRkZTguLjFlZGMyMDU3NzJkOGMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL21hcF9pbl9tYXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmhcbkBAIC0xNSw1ICYjNDM7MTUsNyBAQCB2b2lkICpicGZfbWFwX2ZkX2dldF9wdHIoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxuIFx0XHRcdCBpbnQgdWZkKTtcbiB2b2lkIGJwZl9tYXBfZmRfcHV0X3B0cihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpwdHIsIGJvb2wgbmVlZF9kZWZlcik7XG4gdTMyIGJwZl9tYXBfZmRfc3lzX2xvb2t1cF9lbGVtKHZvaWQgKnB0cik7XG4mIzQzO3NpemVfdCBicGZfaHRhYl9tYXBfbWV0YV9zaXplKHZvaWQpO1xuJiM0Mzt2b2lkIGJwZl9odGFiX21hcF9tZXRhX2luaXQoc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcF9tZXRhLCBzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwKTtcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmNcbmluZGV4IDM3M2M4ZDE3ZWE1NTcuLjZiZDRjYjY4YzIwYzEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uY1xuQEAgLTExNCw3ICYjNDM7MTE0LDcgQEAgc3RhdGljIGlubGluZSBpbnQgY2hlY2tfaGFzaCh2b2lkKVxuIFx0VkVSSUZZKGNoZWNrX2RlZmF1bHRfbm9pbmxpbmUoXHUwMDI2aGFzaC1cdTAwM2VtYXAsIG1hcCkpO1xuIFxuIFx0VkVSSUZZKGhhc2gtXHUwMDNlbl9idWNrZXRzID09IE1BWF9FTlRSSUVTKTtcbi1cdFZFUklGWShoYXNoLVx1MDAzZWVsZW1fc2l6ZSA9PSA2NCk7XG4mIzQzO1x0VkVSSUZZKGhhc2gtXHUwMDNlZWxlbV9zaXplID09IDMyKTtcbiBcbiBcdFZFUklGWShoYXNoLVx1MDAzZWNvdW50LmNvdW50ZXIgPT0gMCk7XG4gXHRWRVJJRlkoYnBmX21hcF9zdW1fZWxlbV9jb3VudChtYXApID09IDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEwOjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h0YWJfbWFwX2FsbG9jJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X21hcF91cGRhdGVfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9tYXBfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfcGVyY3B1X21hcF9sb29rdXBfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2dldF9uZXh0X2tleSYjMzQ7LAogICAgJiMzNDtfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7LAogICAgJiMzNDticGZfbWFwX21ldGFfYWxsb2MmIzM0OywKICAgICYjMzQ7YnBmX2h0YWJfbWFwX21ldGFfaW5pdCYjMzQ7LAogICAgJiMzNDticGZfaHRhYl9tYXBfbWV0YV9zaXplJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyB0aGUgbWVtb3J5IGxheW91dCBvZiBCUEYgaGFzaCBtYXAgZWxlbWVudHMgYnkgY29uZGl0aW9uYWxseSByZW1vdmluZyB0aGUgaGFzaCB2YWx1ZSBmaWVsZCB3aGVuIGl0JiMzOTtzIG5vdCBuZWVkZWQuIEl0IGludHJvZHVjZXMgYGtleV9vZmZzZXRgIHRvIGR5bmFtaWNhbGx5IGNvbXB1dGUgdGhlIG9mZnNldCBvZiB0aGUga2V5IGFuZCB2YWx1ZSB3aXRoaW4gdGhlIGVsZW1lbnQuIEl0IGFsc28gbW9kaWZpZXMgYG1hcF9pbl9tYXAuY2AgdG8gcHJvcGFnYXRlIHRoaXMgb2Zmc2V0IGZvciBpbm5lciBtYXBzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIGhhc2ggbWFwIGltcGxlbWVudGF0aW9uIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxYjdjYjY2N2ZmMjcwNGI2Yjk4NThmOWQ2YjMwMWE1NTRlZjJlYjAzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAxMDo0MzozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmMKaW5kZXggOWYzOTRlMWFhMmU4NS4uODJiMTliZDU0MzEwOSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oYXNodGFiLmMKQEAgLTEwMCwxMyAmIzQzOzEwMCwxNiBAQCBzdHJ1Y3QgYnBmX2h0YWIgewogCXN0cnVjdCBwZXJjcHVfY291bnRlciBwY291bnQ7CiAJYXRvbWljX3QgY291bnQ7CiAJYm9vbCB1c2VfcGVyY3B1X2NvdW50ZXI7CiYjNDM7CWJvb2wgaGFzX2hhc2g7CiAJdTMyIG5fYnVja2V0czsJLyogbnVtYmVyIG9mIGhhc2ggYnVja2V0cyAqLwogCXUzMiBlbGVtX3NpemU7CS8qIHNpemUgb2YgZWFjaCBlbGVtZW50IGluIGJ5dGVzICovCiYjNDM7CXUzMiBrZXlfb2Zmc2V0OwkvKiBvZmZzZXQgb2Yga2V5IGluIGJ5dGVzICovCiAJdTMyIGhhc2hybmQ7CiB9OwogCiAvKiBlYWNoIGh0YWIgZWxlbWVudCBpcyBzdHJ1Y3QgaHRhYl9lbGVtICYjNDM7IGtleSAmIzQzOyB2YWx1ZSAqLwotc3RydWN0IGh0YWJfZWxlbSB7CiYjNDM7c3RydWN0IGh0YWJfZWxlbTsKJiM0MztzdHJ1Y3QgaHRhYl9ub2RlIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCBobGlzdF9udWxsc19ub2RlIGhhc2hfbm9kZTsKIAkJc3RydWN0IHsKQEAgLTExNywxOCAmIzQzOzEyMCwzMiBAQCBzdHJ1Y3QgaHRhYl9lbGVtIHsKIAkJCX07CiAJCX07CiAJfTsKLQl1bmlvbiB7Ci0JCS8qIHBvaW50ZXIgdG8gcGVyLWNwdSBwb2ludGVyICovCi0JCXZvaWQgKnB0cl90b19wcHRyOwotCQlzdHJ1Y3QgYnBmX2xydV9ub2RlIGxydV9ub2RlOwotCX07Ci0JdTMyIGhhc2g7Ci0JY2hhciBrZXlbXSBfX2FsaWduZWQoOCk7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgaHRhYl9lbGVtIHsKJiM0MzsJc3RydWN0IGh0YWJfbm9kZSBub2RlOwomIzQzOwl1OCBkYXRhW10gX19hbGlnbmVkKDgpOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGh0YWJfZWxlbV9scnUgewomIzQzOwlzdHJ1Y3QgaHRhYl9ub2RlIG5vZGU7CiYjNDM7CXN0cnVjdCBicGZfbHJ1X25vZGUgbHJ1X25vZGU7CiYjNDM7CXU4IGRhdGFbXSBfX2FsaWduZWQoOCk7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBPbmx5IGZvciBub24tcHJlYWxsb2NhdGVkIFBDUFUgbWFwcy4gUHJlYWxsb2NhdGVkIFBDUFUgbWFwcyBkb24mIzM5O3QgbmVlZAomIzQzOyAqIHB0cl90b19wcHRyLCBhbmQgdXNlIGh0YWJfZWxlbS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgewomIzQzOwlzdHJ1Y3QgaHRhYl9ub2RlIG5vZGU7CiYjNDM7CXZvaWQgKnB0cl90b19wcHRyOwomIzQzOwl1OCBkYXRhW10gX19hbGlnbmVkKDgpOwogfTsKIAogc3RydWN0IGh0YWJfYnRmX3JlY29yZCB7CiAJc3RydWN0IGJ0Zl9yZWNvcmQgKnJlY29yZDsKIAl1MzIga2V5X3NpemU7CiYjNDM7CXUzMiBrZXlfb2Zmc2V0OwogfTsKIAogc3RhdGljIGlubGluZSBib29sIGh0YWJfaXNfcHJlYWxsb2MoY29uc3Qgc3RydWN0IGJwZl9odGFiICpodGFiKQpAQCAtMTM2LDYgJiM0MzsxNTMsMjEgQEAgc3RhdGljIGlubGluZSBib29sIGh0YWJfaXNfcHJlYWxsb2MoY29uc3Qgc3RydWN0IGJwZl9odGFiICpodGFiKQogCXJldHVybiAhKGh0YWItJmd0O21hcC5tYXBfZmxhZ3MgJmFtcDsgQlBGX0ZfTk9fUFJFQUxMT0MpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2xydV9ub2RlICpodGFiX2VsZW1fbHJ1X25vZGUoc3RydWN0IGh0YWJfZWxlbSAqbCkKJiM0Mzt7CiYjNDM7CXJldHVybiAmYW1wOygoc3RydWN0IGh0YWJfZWxlbV9scnUgKilsKS0mZ3Q7bHJ1X25vZGU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqaHRhYl9lbGVtX2dldF9wdHJfdG9fcHB0cihzdHJ1Y3QgaHRhYl9lbGVtICpsKQomIzQzO3sKJiM0MzsJcmV0dXJuICgoc3RydWN0IGh0YWJfZWxlbV9wY3B1ICopbCktJmd0O3B0cl90b19wcHRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9wdHJfdG9fcHB0cihzdHJ1Y3QgaHRhYl9lbGVtICpsLCB2b2lkICpwdHIpCiYjNDM7ewomIzQzOwkoKHN0cnVjdCBodGFiX2VsZW1fcGNwdSAqKWwpLSZndDtwdHJfdG9fcHB0ciA9IHB0cjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBodGFiX2luaXRfYnVja2V0cyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpCiB7CiAJdW5zaWduZWQgaW50IGk7CkBAIC0xODMsMjUgJiM0MzsyMTUsMzAgQEAgc3RhdGljIGlubGluZSBib29sIGlzX2ZkX2h0YWIoY29uc3Qgc3RydWN0IGJwZl9odGFiICpodGFiKQogCXJldHVybiBodGFiLSZndDttYXAubWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0hBU0hfT0ZfTUFQUzsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkICpodGFiX2VsZW1fdmFsdWUoc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGtleV9zaXplKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqaHRhYl9lbGVtX2tleShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpCiYjNDM7ewomIzQzOwlyZXR1cm4gKHZvaWQgKilsICYjNDM7IGh0YWItJmd0O2tleV9vZmZzZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqaHRhYl9lbGVtX3ZhbHVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCkKIHsKLQlyZXR1cm4gbC0mZ3Q7a2V5ICYjNDM7IHJvdW5kX3VwKGtleV9zaXplLCA4KTsKJiM0MzsJcmV0dXJuIGh0YWJfZWxlbV9rZXkoaHRhYiwgbCkgJiM0Mzsgcm91bmRfdXAoaHRhYi0mZ3Q7bWFwLmtleV9zaXplLCA4KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfcHRyKHN0cnVjdCBodGFiX2VsZW0gKmwsIHUzMiBrZXlfc2l6ZSwKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9wdHIoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsLAogCQkJCSAgICAgdm9pZCBfX3BlcmNwdSAqcHB0cikKIHsKLQkqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGwsIGtleV9zaXplKSA9IHBwdHI7CiYjNDM7CSoodm9pZCBfX3BlcmNwdSAqKilodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCkgPSBwcHRyOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19wZXJjcHUgKmh0YWJfZWxlbV9nZXRfcHRyKHN0cnVjdCBodGFiX2VsZW0gKmwsIHUzMiBrZXlfc2l6ZSkKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX19wZXJjcHUgKmh0YWJfZWxlbV9nZXRfcHRyKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCkKIHsKLQlyZXR1cm4gKih2b2lkIF9fcGVyY3B1ICoqKWh0YWJfZWxlbV92YWx1ZShsLCBrZXlfc2l6ZSk7CiYjNDM7CXJldHVybiAqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpOwogfQogCi1zdGF0aWMgdm9pZCAqZmRfaHRhYl9tYXBfZ2V0X3B0cihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKQomIzQzO3N0YXRpYyB2b2lkICpmZF9odGFiX21hcF9nZXRfcHRyKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCkKIHsKLQlyZXR1cm4gKih2b2lkICoqKWh0YWJfZWxlbV92YWx1ZShsLCBtYXAtJmd0O2tleV9zaXplKTsKJiM0MzsJcmV0dXJuICoodm9pZCAqKilodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpnZXRfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgaW50IGkpCkBAIC0yMDksNiAmIzQzOzI0NiwzMyBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqZ2V0X2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIGludCBpKQogCXJldHVybiAoc3RydWN0IGh0YWJfZWxlbSAqKSAoaHRhYi0mZ3Q7ZWxlbXMgJiM0MzsgaSAqICh1NjQpaHRhYi0mZ3Q7ZWxlbV9zaXplKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBodGFiX2hhc19oYXNoKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYikKJiM0Mzt7CiYjNDM7CXJldHVybiBodGFiLSZndDtoYXNfaGFzaDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB1MzIgaHRhYl9lbGVtX2hhc2goc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKQomIzQzO3sKJiM0MzsJaWYgKGh0YWJfaXNfbHJ1KGh0YWIpKQomIzQzOwkJcmV0dXJuICoodTMyICopKChzdHJ1Y3QgaHRhYl9lbGVtX2xydSAqKWwpLSZndDtkYXRhOwomIzQzOwllbHNlIGlmIChodGFiX2lzX3BlcmNwdShodGFiKSAmYW1wOyZhbXA7ICFodGFiX2lzX3ByZWFsbG9jKGh0YWIpKQomIzQzOwkJcmV0dXJuICoodTMyICopKChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS0mZ3Q7ZGF0YTsKJiM0MzsJZWxzZQomIzQzOwkJcmV0dXJuICoodTMyICopbC0mZ3Q7ZGF0YTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfaGFzaChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwsIHUzMiBoYXNoKQomIzQzO3sKJiM0MzsJaWYgKCFodGFiX2hhc19oYXNoKGh0YWIpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAoaHRhYl9pc19scnUoaHRhYikpCiYjNDM7CQkqKHUzMiAqKSgoc3RydWN0IGh0YWJfZWxlbV9scnUgKilsKS0mZ3Q7ZGF0YSA9IGhhc2g7CiYjNDM7CWVsc2UgaWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpICZhbXA7JmFtcDsgIWh0YWJfaXNfcHJlYWxsb2MoaHRhYikpCiYjNDM7CQkqKHUzMiAqKSgoc3RydWN0IGh0YWJfZWxlbV9wY3B1ICopbCktJmd0O2RhdGEgPSBoYXNoOwomIzQzOwllbHNlCiYjNDM7CQkqKHUzMiAqKWwtJmd0O2RhdGEgPSBoYXNoOwomIzQzO30KJiM0MzsKIC8qIEJvdGggcGVyY3B1IGFuZCBmZCBodGFiIHN1cHBvcnQgaW4tcGxhY2UgdXBkYXRlLCBzbyBubyBuZWVkIGZvcgogICogZXh0cmEgZWxlbS4gTFJVIGl0c2VsZiBjYW4gcmVtb3ZlIHRoZSBsZWFzdCB1c2VkIGVsZW1lbnQsIHNvCiAgKiB0aGVyZSBpcyBubyBuZWVkIGZvciBhbiBleHRyYSBlbGVtIGR1cmluZyBtYXBfdXBkYXRlLgpAQCAtMjMxLDcgJiM0MzsyOTUsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2ZyZWVfcHJlYWxsb2NlZF9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfaHRhYiAqaHRhYikKIAogCQllbGVtID0gZ2V0X2h0YWJfZWxlbShodGFiLCBpKTsKIAkJYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoJmFtcDtodGFiLSZndDttYXAsCi0JCQkJCSAgICAgIGh0YWJfZWxlbV92YWx1ZShlbGVtLCBodGFiLSZndDttYXAua2V5X3NpemUpKTsKJiM0MzsJCQkJCSAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBlbGVtKSk7CiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KIH0KQEAgLTI1NCw3ICYjNDM7MzE4LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYikKIAogCQllbGVtID0gZ2V0X2h0YWJfZWxlbShodGFiLCBpKTsKIAkJaWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpKSB7Ci0JCQl2b2lkIF9fcGVyY3B1ICpwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZWxlbSwgaHRhYi0mZ3Q7bWFwLmtleV9zaXplKTsKJiM0MzsJCQl2b2lkIF9fcGVyY3B1ICpwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgZWxlbSk7CiAJCQlpbnQgY3B1OwogCiAJCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CkBAIC0yNjMsNyAmIzQzOzMyNyw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZnJlZV9wcmVhbGxvY2VkX2ZpZWxkcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpCiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlicGZfb2JqX2ZyZWVfZmllbGRzKGh0YWItJmd0O21hcC5yZWNvcmQsCi0JCQkJCSAgICBodGFiX2VsZW1fdmFsdWUoZWxlbSwgaHRhYi0mZ3Q7bWFwLmtleV9zaXplKSk7CiYjNDM7CQkJCQkgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pKTsKIAkJCWNvbmRfcmVzY2hlZCgpOwogCQl9CiAJCWNvbmRfcmVzY2hlZCgpOwpAQCAtMjgwLDggJiM0MzszNDQsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2ZyZWVfZWxlbXMoc3RydWN0IGJwZl9odGFiICpodGFiKQogCWZvciAoaSA9IDA7IGkgJmx0OyBodGFiLSZndDttYXAubWF4X2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7CiAJCXZvaWQgX19wZXJjcHUgKnBwdHI7CiAKLQkJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGdldF9odGFiX2VsZW0oaHRhYiwgaSksCi0JCQkJCSBodGFiLSZndDttYXAua2V5X3NpemUpOwomIzQzOwkJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGdldF9odGFiX2VsZW0oaHRhYiwgaSkpOwogCQlmcmVlX3BlcmNwdShwcHRyKTsKIAkJY29uZF9yZXNjaGVkKCk7CiAJfQpAQCAtMzA4LDggJiM0MzszNzEsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqcHJlYWxsb2NfbHJ1X3BvcChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSwKIAogCWlmIChub2RlKSB7CiAJCWJwZl9tYXBfaW5jX2VsZW1fY291bnQoJmFtcDtodGFiLSZndDttYXApOwotCQlsID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKTsKLQkJbWVtY3B5KGwtJmd0O2tleSwga2V5LCBodGFiLSZndDttYXAua2V5X3NpemUpOwomIzQzOwkJbCA9IChzdHJ1Y3QgaHRhYl9lbGVtICopY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSk7CiYjNDM7CQltZW1jcHkoaHRhYl9lbGVtX2tleShodGFiLCBsKSwga2V5LCBodGFiLSZndDttYXAua2V5X3NpemUpOwogCQlyZXR1cm4gbDsKIAl9CiAKQEAgLTM0MCw4ICYjNDM7NDAzLDcgQEAgc3RhdGljIGludCBwcmVhbGxvY19pbml0KHN0cnVjdCBicGZfaHRhYiAqaHRhYikKIAkJCQkJICAgIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTsKIAkJaWYgKCFwcHRyKQogCQkJZ290byBmcmVlX2VsZW1zOwotCQlodGFiX2VsZW1fc2V0X3B0cihnZXRfaHRhYl9lbGVtKGh0YWIsIGkpLCBodGFiLSZndDttYXAua2V5X3NpemUsCi0JCQkJICBwcHRyKTsKJiM0MzsJCWh0YWJfZWxlbV9zZXRfcHRyKGh0YWIsIGdldF9odGFiX2VsZW0oaHRhYiwgaSksIHBwdHIpOwogCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAKQEAgLTM0OSw4ICYjNDM7NDExLDggQEAgc3RhdGljIGludCBwcmVhbGxvY19pbml0KHN0cnVjdCBicGZfaHRhYiAqaHRhYikKIAlpZiAoaHRhYl9pc19scnUoaHRhYikpCiAJCWVyciA9IGJwZl9scnVfaW5pdCgmYW1wO2h0YWItJmd0O2xydSwKIAkJCQkgICBodGFiLSZndDttYXAubWFwX2ZsYWdzICZhbXA7IEJQRl9GX05PX0NPTU1PTl9MUlUsCi0JCQkJICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgaGFzaCkgLQotCQkJCSAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSwKJiM0MzsJCQkJICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGRhdGEpIC0KJiM0MzsJCQkJICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSwKIAkJCQkgICBodGFiX2xydV9tYXBfZGVsZXRlX25vZGUsCiAJCQkJICAgaHRhYik7CiAJZWxzZQpAQCAtMzYxLDExICYjNDM7NDIzLDExIEBAIHN0YXRpYyBpbnQgcHJlYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpCiAKIAlpZiAoaHRhYl9pc19scnUoaHRhYikpCiAJCWJwZl9scnVfcG9wdWxhdGUoJmFtcDtodGFiLSZndDtscnUsIGh0YWItJmd0O2VsZW1zLAotCQkJCSBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBscnVfbm9kZSksCiYjNDM7CQkJCSBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpLAogCQkJCSBodGFiLSZndDtlbGVtX3NpemUsIG51bV9lbnRyaWVzKTsKIAllbHNlCiAJCXBjcHVfZnJlZWxpc3RfcG9wdWxhdGUoJmFtcDtodGFiLSZndDtmcmVlbGlzdCwKLQkJCQkgICAgICAgaHRhYi0mZ3Q7ZWxlbXMgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgZm5vZGUpLAomIzQzOwkJCQkgICAgICAgaHRhYi0mZ3Q7ZWxlbXMgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgbm9kZS5mbm9kZSksCiAJCQkJICAgICAgIGh0YWItJmd0O2VsZW1fc2l6ZSwgbnVtX2VudHJpZXMpOwogCiAJcmV0dXJuIDA7CkBAIC00MDEsNyAmIzQzOzQ2Myw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfZXh0cmFfZWxlbXMoc3RydWN0IGJwZl9odGFiICpodGFiKQogCQkvKiBwb3Agd2lsbCBzdWNjZWVkLCBzaW5jZSBwcmVhbGxvY19pbml0KCkKIAkJICogcHJlYWxsb2NhdGVkIGV4dHJhIG51bV9wb3NzaWJsZV9jcHVzIGVsZW1lbnRzCiAJCSAqLwotCQlsX25ldyA9IGNvbnRhaW5lcl9vZihsLCBzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZSk7CiYjNDM7CQlsX25ldyA9IGNvbnRhaW5lcl9vZihsLCBzdHJ1Y3QgaHRhYl9lbGVtLCBub2RlLmZub2RlKTsKIAkJKnBlcl9jcHVfcHRyKHBwdHIsIGNwdSkgPSBsX25ldzsKIAl9CiAJaHRhYi0mZ3Q7ZXh0cmFfZWxlbXMgPSBwcHRyOwpAQCAtNDI1LDggJiM0Mzs0ODcsOCBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKQogCWJvb2wgemVyb19zZWVkID0gKGF0dHItJmd0O21hcF9mbGFncyAmYW1wOyBCUEZfRl9aRVJPX1NFRUQpOwogCWludCBudW1hX25vZGUgPSBicGZfbWFwX2F0dHJfbnVtYV9ub2RlKGF0dHIpOwogCi0JQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGZub2RlLm5leHQpICE9Ci0JCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlLnBwcmV2KSk7CiYjNDM7CUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9ub2RlLCBmbm9kZS5uZXh0KSAhPQomIzQzOwkJICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9ub2RlLCBoYXNoX25vZGUucHByZXYpKTsKIAogCWlmICh6ZXJvX3NlZWQgJmFtcDsmYW1wOyAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJLyogR3VhcmQgYWdhaW5zdCBsb2NhbCBEb1MsIGFuZCBkaXNjb3VyYWdlIHByb2R1Y3Rpb24gdXNlLiAqLwpAQCAtNDc2LDcgJiM0Mzs1MzgsNyBAQCBzdGF0aWMgdm9pZCBodGFiX21lbV9kdG9yKHZvaWQgKm9iaiwgdm9pZCAqY3R4KQogCWlmIChJU19FUlJfT1JfTlVMTChocmVjLSZndDtyZWNvcmQpKQogCQlyZXR1cm47CiAKLQltYXBfdmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoZWxlbSwgaHJlYy0mZ3Q7a2V5X3NpemUpOwomIzQzOwltYXBfdmFsdWUgPSAodm9pZCAqKWVsZW0gJiM0MzsgaHJlYy0mZ3Q7a2V5X29mZnNldCAmIzQzOyByb3VuZF91cChocmVjLSZndDtrZXlfc2l6ZSwgOCk7CiAJYnBmX29ial9mcmVlX2ZpZWxkcyhocmVjLSZndDtyZWNvcmQsIG1hcF92YWx1ZSk7CiB9CiAKQEAgLTUwMiw3ICYjNDM7NTY0LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9kdG9yX2N0eF9mcmVlKHZvaWQgKmN0eCkKIH0KIAogc3RhdGljIGludCBicGZfbWFfc2V0X2R0b3Ioc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLAotCQkJICAgdm9pZCAoKmR0b3IpKHZvaWQgKiwgdm9pZCAqKSkKJiM0MzsJCQkgICB2b2lkICgqZHRvcikodm9pZCAqLCB2b2lkICopLCB1MzIga2V5X29mZnNldCkKIHsKIAlzdHJ1Y3QgaHRhYl9idGZfcmVjb3JkICpocmVjOwogCWludCBlcnI7CkBAIC01MTUsNiAmIzQzOzU3Nyw3IEBAIHN0YXRpYyBpbnQgYnBmX21hX3NldF9kdG9yKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwKIAlpZiAoIWhyZWMpCiAJCXJldHVybiAtRU5PTUVNOwogCWhyZWMtJmd0O2tleV9zaXplID0gbWFwLSZndDtrZXlfc2l6ZTsKJiM0MzsJaHJlYy0mZ3Q7a2V5X29mZnNldCA9IGtleV9vZmZzZXQ7CiAJaHJlYy0mZ3Q7cmVjb3JkID0gYnRmX3JlY29yZF9kdXAobWFwLSZndDtyZWNvcmQpOwogCWlmIChJU19FUlIoaHJlYy0mZ3Q7cmVjb3JkKSkgewogCQllcnIgPSBQVFJfRVJSKGhyZWMtJmd0O3JlY29yZCk7CkBAIC01MzcsOSAmIzQzOzYwMCw5IEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwKIAkgKiBwb3B1bGF0ZWQgaW4gaHRhYl9tYXBfYWxsb2MoKSwgc28gaXQgd2lsbCBhbHdheXMgYXBwZWFyIGFzIE5VTEwuCiAJICovCiAJaWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpKQotCQlyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgJmFtcDtodGFiLSZndDtwY3B1X21hLCBodGFiX3BjcHVfbWVtX2R0b3IpOwomIzQzOwkJcmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsICZhbXA7aHRhYi0mZ3Q7cGNwdV9tYSwgaHRhYl9wY3B1X21lbV9kdG9yLCBodGFiLSZndDtrZXlfb2Zmc2V0KTsKIAllbHNlCi0JCXJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCAmYW1wO2h0YWItJmd0O21hLCBodGFiX21lbV9kdG9yKTsKJiM0MzsJCXJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCAmYW1wO2h0YWItJmd0O21hLCBodGFiX21lbV9kdG9yLCBodGFiLSZndDtrZXlfb2Zmc2V0KTsKIH0KIAogc3RhdGljIHN0cnVjdCBicGZfbWFwICpodGFiX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cikKQEAgLTU2Miw2ICYjNDM7NjI1LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpCiAKIAlicGZfbWFwX2luaXRfZnJvbV9hdHRyKCZhbXA7aHRhYi0mZ3Q7bWFwLCBhdHRyKTsKIAomIzQzOwkvKiBBdm9pZCBoYXNoIG1lbW9yeSB1c2UgYW5kIGNvbXBhcmlzb25zIHdoZXJlIHVubmVjZXNzYXJ5LgomIzQzOwkgKiB1MzIgaGFzaCByZWFkcyBhcmUgYWx3YXlzIGF0b21pYy4gSWYgd2UgZWxpZGUgdGhlbSwga2V5IGNvbXBhcmlzb25zIG11c3QgYWxzbyBiZSBhdG9taWMKJiM0MzsJICogdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmUga2V5IG1hdGNoZXMgZHVlIHRvIHRvcm4ga2V5IHJlYWRzIC8gd3JpdGVzLiBTbyBjaGVjayBrZXlfc2l6ZS4KJiM0MzsJICovCiYjNDM7CWh0YWItJmd0O2hhc19oYXNoID0gaHRhYl9pc19scnUoaHRhYikgfHwgaHRhYi0mZ3Q7bWFwLmtleV9zaXplICZndDsgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwomIzQzOwogCWlmIChwZXJjcHVfbHJ1KSB7CiAJCS8qIGVuc3VyZSBlYWNoIENQVSYjMzk7cyBscnUgbGlzdCBoYXMgJmd0Oz0xIGVsZW1lbnRzLgogCQkgKiBzaW5jZSB3ZSBhcmUgYXQgaXQsIG1ha2UgZWFjaCBscnUgbGlzdCBoYXMgdGhlIHNhbWUKQEAgLTU4Myw4ICYjNDM7NjUyLDE2IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpCiAKIAlodGFiLSZndDtuX2J1Y2tldHMgPSByb3VuZHVwX3Bvd19vZl90d28oaHRhYi0mZ3Q7bWFwLm1heF9lbnRyaWVzKTsKIAotCWh0YWItJmd0O2VsZW1fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaHRhYl9lbGVtKSAmIzQzOwotCQkJICByb3VuZF91cChodGFiLSZndDttYXAua2V5X3NpemUsIDgpOwomIzQzOwlpZiAoaHRhYl9pc19scnUoaHRhYikpCiYjNDM7CQlodGFiLSZndDtrZXlfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGRhdGEpICYjNDM7IDg7CiYjNDM7CWVsc2UgaWYgKHBlcmNwdSAmYW1wOyZhbXA7ICFwcmVhbGxvYykKJiM0MzsJCWh0YWItJmd0O2tleV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUsIGRhdGEpICYjNDM7CiYjNDM7CQkJCSAgIChodGFiX2hhc19oYXNoKGh0YWIpID8gOCA6IDApOwomIzQzOwllbHNlCiYjNDM7CQlodGFiLSZndDtrZXlfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgZGF0YSkgJiM0MzsKJiM0MzsJCQkJICAgKGh0YWJfaGFzX2hhc2goaHRhYikgPyA4IDogMCk7CiYjNDM7CiYjNDM7CWh0YWItJmd0O2VsZW1fc2l6ZSA9IGh0YWItJmd0O2tleV9vZmZzZXQgJiM0Mzsgcm91bmRfdXAoaHRhYi0mZ3Q7bWFwLmtleV9zaXplLCA4KTsKIAlpZiAocGVyY3B1KQogCQlodGFiLSZndDtlbGVtX3NpemUgJiM0Mzs9IHNpemVvZih2b2lkICopOwogCWVsc2UKQEAgLTY5MiwxNSAmIzQzOzc2OSwyMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpzZWxlY3RfYnVja2V0KHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgdTMyCiB9CiAKIC8qIHRoaXMgbG9va3VwIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIGNhbGxlZCB3aXRoIGJ1Y2tldCBsb2NrIHRha2VuICovCi1zdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLCB1MzIgaGFzaCwKJiM0MztzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBicGZfaHRhYiAqaHRhYiwKJiM0MzsJCQkJCSBzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCwgdTMyIGhhc2gsCiAJCQkJCSB2b2lkICprZXksIHUzMiBrZXlfc2l6ZSkKIHsKIAlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjsKIAlzdHJ1Y3QgaHRhYl9lbGVtICpsOwogCi0JaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkKLQkJaWYgKGwtJmd0O2hhc2ggPT0gaGFzaCAmYW1wOyZhbXA7ICFtZW1jbXAoJmFtcDtsLSZndDtrZXksIGtleSwga2V5X3NpemUpKQotCQkJcmV0dXJuIGw7CiYjNDM7CWlmIChodGFiX2hhc19oYXNoKGh0YWIpKSB7CiYjNDM7CQlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpCiYjNDM7CQkJaWYgKGh0YWJfZWxlbV9oYXNoKGh0YWIsIGwpID09IGhhc2ggJmFtcDsmYW1wOwomIzQzOwkJCSAgICAhbWVtY21wKGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleSwga2V5X3NpemUpKQomIzQzOwkJCQlyZXR1cm4gbDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShsLCBuLCBoZWFkLCBub2RlLmhhc2hfbm9kZSkKJiM0MzsJCQlpZiAoIW1lbWNtcChodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGtleV9zaXplKSkKJiM0MzsJCQkJcmV0dXJuIGw7CiYjNDM7CX0KIAogCXJldHVybiBOVUxMOwogfQpAQCAtNzA5LDcgJiM0Mzs3OTQsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLCB1MzIgaGFzaAogICogdGhlIHVubGlrZWx5IGV2ZW50IHdoZW4gZWxlbWVudHMgbW92ZWQgZnJvbSBvbmUgYnVja2V0IGludG8gYW5vdGhlcgogICogd2hpbGUgbGluayBsaXN0IGlzIGJlaW5nIHdhbGtlZAogICovCi1zdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX251bGxzX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLAomIzQzO3N0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGJwZl9odGFiICpodGFiLAomIzQzOwkJCQkJICAgICAgIHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLAogCQkJCQkgICAgICAgdTMyIGhhc2gsIHZvaWQgKmtleSwKIAkJCQkJICAgICAgIHUzMiBrZXlfc2l6ZSwgdTMyIG5fYnVja2V0cykKIHsKQEAgLTcxNyw5ICYjNDM7ODAzLDE2IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsCiAJc3RydWN0IGh0YWJfZWxlbSAqbDsKIAogYWdhaW46Ci0JaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkKLQkJaWYgKGwtJmd0O2hhc2ggPT0gaGFzaCAmYW1wOyZhbXA7ICFtZW1jbXAoJmFtcDtsLSZndDtrZXksIGtleSwga2V5X3NpemUpKQotCQkJcmV0dXJuIGw7CiYjNDM7CWlmIChodGFiX2hhc19oYXNoKGh0YWIpKSB7CiYjNDM7CQlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpCiYjNDM7CQkJaWYgKGh0YWJfZWxlbV9oYXNoKGh0YWIsIGwpID09IGhhc2ggJmFtcDsmYW1wOwomIzQzOwkJCSAgICAhbWVtY21wKGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleSwga2V5X3NpemUpKQomIzQzOwkJCQlyZXR1cm4gbDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShsLCBuLCBoZWFkLCBub2RlLmhhc2hfbm9kZSkKJiM0MzsJCQlpZiAoIW1lbWNtcChodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGtleV9zaXplKSkKJiM0MzsJCQkJcmV0dXJuIGw7CiYjNDM7CX0KIAogCWlmICh1bmxpa2VseShnZXRfbnVsbHNfdmFsdWUobikgIT0gKGhhc2ggJmFtcDsgKG5fYnVja2V0cyAtIDEpKSkpCiAJCWdvdG8gYWdhaW47CkBAIC03NDcsMTcgJiM0Mzs4NDAsMTggQEAgc3RhdGljIHZvaWQgKl9faHRhYl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQogCiAJaGVhZCA9IHNlbGVjdF9idWNrZXQoaHRhYiwgaGFzaCk7CiAKLQlsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItJmd0O25fYnVja2V0cyk7CiYjNDM7CWwgPSBsb29rdXBfbnVsbHNfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSwgaHRhYi0mZ3Q7bl9idWNrZXRzKTsKIAogCXJldHVybiBsOwogfQogCiBzdGF0aWMgdm9pZCAqaHRhYl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQogewomIzQzOwlzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7CiAJc3RydWN0IGh0YWJfZWxlbSAqbCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpOwogCiAJaWYgKGwpCi0JCXJldHVybiBodGFiX2VsZW1fdmFsdWUobCwgbWFwLSZndDtrZXlfc2l6ZSk7CiYjNDM7CQlyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpOwogCiAJcmV0dXJuIE5VTEw7CiB9CkBAIC03NzUsNiAmIzQzOzg2OSw3IEBAIHN0YXRpYyB2b2lkICpodGFiX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpCiAgKi8KIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKQogewomIzQzOwlzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7CiAJc3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7CiAJY29uc3QgaW50IHJldCA9IEJQRl9SRUdfMDsKIApAQCAtNzgzLDcgJiM0Mzs4NzgsNyBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZikKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pOwogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHJldCwgMCwgMSk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCByZXQsCi0JCQkJb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwga2V5KSAmIzQzOwomIzQzOwkJCQlodGFiLSZndDtrZXlfb2Zmc2V0ICYjNDM7CiAJCQkJcm91bmRfdXAobWFwLSZndDtrZXlfc2l6ZSwgOCkpOwogCXJldHVybiBpbnNuIC0gaW5zbl9idWY7CiB9CkBAIC03OTEsMTIgJiM0Mzs4ODYsMTMgQEAgc3RhdGljIGludCBodGFiX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKl9faHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsCiAJCQkJCQkJdm9pZCAqa2V5LCBjb25zdCBib29sIG1hcmspCiB7CiYjNDM7CXN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKIAlzdHJ1Y3QgaHRhYl9lbGVtICpsID0gX19odGFiX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7CiAKIAlpZiAobCkgewogCQlpZiAobWFyaykKLQkJCWJwZl9scnVfbm9kZV9zZXRfcmVmKCZhbXA7bC0mZ3Q7bHJ1X25vZGUpOwotCQlyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGwsIG1hcC0mZ3Q7a2V5X3NpemUpOwomIzQzOwkJCWJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsKSk7CiYjNDM7CQlyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpOwogCX0KIAogCXJldHVybiBOVUxMOwpAQCAtODE1LDYgJiM0Mzs5MTEsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpCiBzdGF0aWMgaW50IGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsCiAJCQkJICAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZikKIHsKJiM0MzsJc3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApOwogCXN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmOwogCWNvbnN0IGludCByZXQgPSBCUEZfUkVHXzA7CiAJY29uc3QgaW50IHJlZl9yZWcgPSBCUEZfUkVHXzE7CkBAIC04MjQsMTUgJiM0Mzs5MjEsMTUgQEAgc3RhdGljIGludCBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9FTUlUX0NBTEwoX19odGFiX21hcF9sb29rdXBfZWxlbSk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgcmV0LCAwLCA0KTsKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfQiwgcmVmX3JlZywgcmV0LAotCQkJICAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpICYjNDM7CiYjNDM7CQkJICAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSAmIzQzOwogCQkJICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9scnVfbm9kZSwgcmVmKSk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pORSwgcmVmX3JlZywgMCwgMSk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX1NUX01FTShCUEZfQiwgcmV0LAotCQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBscnVfbm9kZSkgJiM0MzsKJiM0MzsJCQkgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSkgJiM0MzsKIAkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9scnVfbm9kZSwgcmVmKSwKIAkJCSAgICAgMSk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCByZXQsCi0JCQkJb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwga2V5KSAmIzQzOwomIzQzOwkJCQlodGFiLSZndDtrZXlfb2Zmc2V0ICYjNDM7CiAJCQkJcm91bmRfdXAobWFwLSZndDtrZXlfc2l6ZSwgOCkpOwogCXJldHVybiBpbnNuIC0gaW5zbl9idWY7CiB9CkBAIC04NDQsMTMgJiM0Mzs5NDEsMTMgQEAgc3RhdGljIHZvaWQgY2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoc3RydWN0IGJwZl9odGFiICpodGFiLAogCQlyZXR1cm47CiAKIAlpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikpIHsKLQkJdm9pZCBfX3BlcmNwdSAqcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGVsZW0sIGh0YWItJmd0O21hcC5rZXlfc2l6ZSk7CiYjNDM7CQl2b2lkIF9fcGVyY3B1ICpwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgZWxlbSk7CiAJCWludCBjcHU7CiAKIAkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKIAkJCWJwZl9vYmpfY2FuY2VsX2ZpZWxkcygmYW1wO2h0YWItJmd0O21hcCwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7CiAJfSBlbHNlIHsKLQkJdm9pZCAqbWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGh0YWItJmd0O21hcC5rZXlfc2l6ZSk7CiYjNDM7CQl2b2lkICptYXBfdmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgZWxlbSk7CiAKIAkJYnBmX29ial9jYW5jZWxfZmllbGRzKCZhbXA7aHRhYi0mZ3Q7bWFwLCBtYXBfdmFsdWUpOwogCX0KQEAgLTg2OSwxNyAmIzQzOzk2NiwxNyBAQCBzdGF0aWMgYm9vbCBodGFiX2xydV9tYXBfZGVsZXRlX25vZGUodm9pZCAqYXJnLCBzdHJ1Y3QgYnBmX2xydV9ub2RlICpub2RlKQogCXN0cnVjdCBidWNrZXQgKmI7CiAJaW50IHJldDsKIAotCXRndF9sID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKTsKLQliID0gX19zZWxlY3RfYnVja2V0KGh0YWIsIHRndF9sLSZndDtoYXNoKTsKJiM0MzsJdGd0X2wgPSAoc3RydWN0IGh0YWJfZWxlbSAqKWNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpOwomIzQzOwliID0gX19zZWxlY3RfYnVja2V0KGh0YWIsIGh0YWJfZWxlbV9oYXNoKGh0YWIsIHRndF9sKSk7CiAJaGVhZCA9ICZhbXA7Yi0mZ3Q7aGVhZDsKIAogCXJldCA9IGh0YWJfbG9ja19idWNrZXQoYiwgJmFtcDtmbGFncyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkKJiM0MzsJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKQogCQlpZiAobCA9PSB0Z3RfbCkgewotCQkJaGxpc3RfbnVsbHNfZGVsX3JjdSgmYW1wO2wtJmd0O2hhc2hfbm9kZSk7CiYjNDM7CQkJaGxpc3RfbnVsbHNfZGVsX3JjdSgmYW1wO2wtJmd0O25vZGUuaGFzaF9ub2RlKTsKIAkJCWJwZl9tYXBfZGVjX2VsZW1fY291bnQoJmFtcDtodGFiLSZndDttYXApOwogCQkJYnJlYWs7CiAJCX0KQEAgLTkxMiwxOCAmIzQzOzEwMDksMTkgQEAgc3RhdGljIGludCBodGFiX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSkKIAloZWFkID0gc2VsZWN0X2J1Y2tldChodGFiLCBoYXNoKTsKIAogCS8qIGxvb2t1cCB0aGUga2V5ICovCi0JbCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLSZndDtuX2J1Y2tldHMpOwomIzQzOwlsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItJmd0O25fYnVja2V0cyk7CiAKIAlpZiAoIWwpCiAJCWdvdG8gZmluZF9maXJzdF9lbGVtOwogCiAJLyoga2V5IHdhcyBmb3VuZCwgZ2V0IG5leHQga2V5IGluIHRoZSBzYW1lIGJ1Y2tldCAqLwotCW5leHRfbCA9IGhsaXN0X251bGxzX2VudHJ5X3NhZmUocmN1X2RlcmVmZXJlbmNlX3JhdyhobGlzdF9udWxsc19uZXh0X3JjdSgmYW1wO2wtJmd0O2hhc2hfbm9kZSkpLAotCQkJCSAgc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKTsKJiM0MzsJbmV4dF9sID0gaGxpc3RfbnVsbHNfZW50cnlfc2FmZSgKJiM0MzsJCQlyY3VfZGVyZWZlcmVuY2VfcmF3KGhsaXN0X251bGxzX25leHRfcmN1KCZhbXA7bC0mZ3Q7bm9kZS5oYXNoX25vZGUpKSwKJiM0MzsJCQlzdHJ1Y3QgaHRhYl9lbGVtLCBub2RlLmhhc2hfbm9kZSk7CiAKIAlpZiAobmV4dF9sKSB7CiAJCS8qIGlmIG5leHQgZWxlbSBpbiB0aGlzIGhhc2ggbGlzdCBpcyBub24temVybywganVzdCByZXR1cm4gaXQgKi8KLQkJbWVtY3B5KG5leHRfa2V5LCBuZXh0X2wtJmd0O2tleSwga2V5X3NpemUpOwomIzQzOwkJbWVtY3B5KG5leHRfa2V5LCBodGFiX2VsZW1fa2V5KGh0YWIsIG5leHRfbCksIGtleV9zaXplKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC05MzgsMTAgJiM0MzsxMDM2LDEwIEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpCiAKIAkJLyogcGljayBmaXJzdCBlbGVtZW50IGluIHRoZSBidWNrZXQgKi8KIAkJbmV4dF9sID0gaGxpc3RfbnVsbHNfZW50cnlfc2FmZShyY3VfZGVyZWZlcmVuY2VfcmF3KGhsaXN0X251bGxzX2ZpcnN0X3JjdShoZWFkKSksCi0JCQkJCSAgc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKTsKJiM0MzsJCQkJCSAgc3RydWN0IGh0YWJfZWxlbSwgbm9kZS5oYXNoX25vZGUpOwogCQlpZiAobmV4dF9sKSB7CiAJCQkvKiBpZiBpdCYjMzk7cyBub3QgZW1wdHksIGp1c3QgcmV0dXJuIGl0ICovCi0JCQltZW1jcHkobmV4dF9rZXksIG5leHRfbC0mZ3Q7a2V5LCBrZXlfc2l6ZSk7CiYjNDM7CQkJbWVtY3B5KG5leHRfa2V5LCBodGFiX2VsZW1fa2V5KGh0YWIsIG5leHRfbCksIGtleV9zaXplKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtOTU1LDcgJiM0MzsxMDUzLDcgQEAgc3RhdGljIHZvaWQgaHRhYl9lbGVtX2ZyZWUoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKQogCWNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGwpOwogCiAJaWYgKGh0YWItJmd0O21hcC5tYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0gpCi0JCWJwZl9tZW1fY2FjaGVfZnJlZSgmYW1wO2h0YWItJmd0O3BjcHVfbWEsIGwtJmd0O3B0cl90b19wcHRyKTsKJiM0MzsJCWJwZl9tZW1fY2FjaGVfZnJlZSgmYW1wO2h0YWItJmd0O3BjcHVfbWEsIGh0YWJfZWxlbV9nZXRfcHRyX3RvX3BwdHIobCkpOwogCWJwZl9tZW1fY2FjaGVfZnJlZSgmYW1wO2h0YWItJmd0O21hLCBsKTsKIH0KIApAQCAtOTY1LDcgJiM0MzsxMDYzLDcgQEAgc3RhdGljIHZvaWQgaHRhYl9wdXRfZmRfdmFsdWUoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKQogCXZvaWQgKnB0cjsKIAogCWlmIChtYXAtJmd0O29wcy0mZ3Q7bWFwX2ZkX3B1dF9wdHIpIHsKLQkJcHRyID0gZmRfaHRhYl9tYXBfZ2V0X3B0cihtYXAsIGwpOwomIzQzOwkJcHRyID0gZmRfaHRhYl9tYXBfZ2V0X3B0cihodGFiLCBsKTsKIAkJbWFwLSZndDtvcHMtJmd0O21hcF9mZF9wdXRfcHRyKG1hcCwgcHRyLCB0cnVlKTsKIAl9CiB9CkBAIC0xMDA2LDcgJiM0MzsxMTA0LDcgQEAgc3RhdGljIHZvaWQgZnJlZV9odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKQogCWlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKSB7CiAJCWJwZl9tYXBfZGVjX2VsZW1fY291bnQoJmFtcDtodGFiLSZndDttYXApOwogCQljaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhodGFiLCBsKTsKLQkJcGNwdV9mcmVlbGlzdF9wdXNoKCZhbXA7aHRhYi0mZ3Q7ZnJlZWxpc3QsICZhbXA7bC0mZ3Q7Zm5vZGUpOwomIzQzOwkJcGNwdV9mcmVlbGlzdF9wdXNoKCZhbXA7aHRhYi0mZ3Q7ZnJlZWxpc3QsICZhbXA7bC0mZ3Q7bm9kZS5mbm9kZSk7CiAJfSBlbHNlIHsKIAkJZGVjX2VsZW1fY291bnQoaHRhYik7CiAJCWh0YWJfZWxlbV9mcmVlKGh0YWIsIGwpOwpAQCAtMTA5Nyw3ICYjNDM7MTE5NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksCiAJCQlsID0gX19wY3B1X2ZyZWVsaXN0X3BvcCgmYW1wO2h0YWItJmd0O2ZyZWVsaXN0KTsKIAkJCWlmICghbCkKIAkJCQlyZXR1cm4gRVJSX1BUUigtRTJCSUcpOwotCQkJbF9uZXcgPSBjb250YWluZXJfb2YobCwgc3RydWN0IGh0YWJfZWxlbSwgZm5vZGUpOwomIzQzOwkJCWxfbmV3ID0gY29udGFpbmVyX29mKGwsIHN0cnVjdCBodGFiX2VsZW0sIG5vZGUuZm5vZGUpOwogCQkJYnBmX21hcF9pbmNfZWxlbV9jb3VudCgmYW1wO2h0YWItJmd0O21hcCk7CiAJCX0KIAl9IGVsc2UgewpAQCAtMTExNywxMCAmIzQzOzEyMTUsMTAgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmFsbG9jX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSwKIAkJfQogCX0KIAotCW1lbWNweShsX25ldy0mZ3Q7a2V5LCBrZXksIGtleV9zaXplKTsKJiM0MzsJbWVtY3B5KGh0YWJfZWxlbV9rZXkoaHRhYiwgbF9uZXcpLCBrZXksIGtleV9zaXplKTsKIAlpZiAocGVyY3B1KSB7CiAJCWlmIChwcmVhbGxvYykgewotCQkJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGxfbmV3LCBrZXlfc2l6ZSk7CiYjNDM7CQkJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGxfbmV3KTsKIAkJfSBlbHNlIHsKIAkJCS8qIGFsbG9jX3BlcmNwdSB6ZXJvLWZpbGxzICovCiAJCQl2b2lkICpwdHIgPSBicGZfbWVtX2NhY2hlX2FsbG9jKCZhbXA7aHRhYi0mZ3Q7cGNwdV9tYSk7CkBAIC0xMTMwLDI2ICYjNDM7MTIyOCwyNiBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqYWxsb2NfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgdm9pZCAqa2V5LAogCQkJCWxfbmV3ID0gRVJSX1BUUigtRU5PTUVNKTsKIAkJCQlnb3RvIGRlY19jb3VudDsKIAkJCX0KLQkJCWxfbmV3LSZndDtwdHJfdG9fcHB0ciA9IHB0cjsKJiM0MzsJCQlodGFiX2VsZW1fc2V0X3B0cl90b19wcHRyKGxfbmV3LCBwdHIpOwogCQkJcHB0ciA9ICoodm9pZCBfX3BlcmNwdSAqKilwdHI7CiAJCX0KIAogCQlwY3B1X2luaXRfdmFsdWUoaHRhYiwgcHB0ciwgdmFsdWUsIG9uYWxsY3B1cywgbWFwX2ZsYWdzKTsKIAogCQlpZiAoIXByZWFsbG9jKQotCQkJaHRhYl9lbGVtX3NldF9wdHIobF9uZXcsIGtleV9zaXplLCBwcHRyKTsKJiM0MzsJCQlodGFiX2VsZW1fc2V0X3B0cihodGFiLCBsX25ldywgcHB0cik7CiAJfSBlbHNlIGlmIChmZF9odGFiX21hcF9uZWVkc19hZGp1c3QoaHRhYikpIHsKIAkJc2l6ZSA9IHJvdW5kX3VwKHNpemUsIDgpOwotCQltZW1jcHkoaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBrZXlfc2l6ZSksIHZhbHVlLCBzaXplKTsKJiM0MzsJCW1lbWNweShodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLCB2YWx1ZSwgc2l6ZSk7CiAJfSBlbHNlIGlmIChtYXBfZmxhZ3MgJmFtcDsgQlBGX0ZfTE9DSykgewogCQljb3B5X21hcF92YWx1ZV9sb2NrZWQoJmFtcDtodGFiLSZndDttYXAsCi0JCQkJICAgICAgaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBrZXlfc2l6ZSksCiYjNDM7CQkJCSAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksCiAJCQkJICAgICAgdmFsdWUsIGZhbHNlKTsKIAl9IGVsc2UgewotCQljb3B5X21hcF92YWx1ZSgmYW1wO2h0YWItJmd0O21hcCwgaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBrZXlfc2l6ZSksIHZhbHVlKTsKJiM0MzsJCWNvcHlfbWFwX3ZhbHVlKCZhbXA7aHRhYi0mZ3Q7bWFwLCBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLCB2YWx1ZSk7CiAJfQogCi0JbF9uZXctJmd0O2hhc2ggPSBoYXNoOwomIzQzOwlodGFiX2VsZW1fc2V0X2hhc2goaHRhYiwgbF9uZXcsIGhhc2gpOwogCXJldHVybiBsX25ldzsKIGRlY19jb3VudDoKIAlkZWNfZWxlbV9jb3VudChodGFiKTsKQEAgLTExOTksNyAmIzQzOzEyOTcsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLAogCQlpZiAodW5saWtlbHkoIWJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKG1hcC0mZ3Q7cmVjb3JkLCBCUEZfU1BJTl9MT0NLKSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJLyogZmluZCBhbiBlbGVtZW50IHdpdGhvdXQgdGFraW5nIHRoZSBidWNrZXQgbG9jayAqLwotCQlsX29sZCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLAomIzQzOwkJbF9vbGQgPSBsb29rdXBfbnVsbHNfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSwKIAkJCQkJICAgICAgaHRhYi0mZ3Q7bl9idWNrZXRzKTsKIAkJcmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7CiAJCWlmIChyZXQpCkBAIC0xMjA3LDcgJiM0MzsxMzA1LDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwKIAkJaWYgKGxfb2xkKSB7CiAJCQkvKiBncmFiIHRoZSBlbGVtZW50IGxvY2sgYW5kIHVwZGF0ZSB2YWx1ZSBpbiBwbGFjZSAqLwogCQkJY29weV9tYXBfdmFsdWVfbG9ja2VkKG1hcCwKLQkJCQkJICAgICAgaHRhYl9lbGVtX3ZhbHVlKGxfb2xkLCBrZXlfc2l6ZSksCiYjNDM7CQkJCQkgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9vbGQpLAogCQkJCQkgICAgICB2YWx1ZSwgZmFsc2UpOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTEyMjEsNyAmIzQzOzEzMTksNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKJiM0MzsJbF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7CiAKIAlyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTsKIAlpZiAocmV0KQpAQCAtMTIzNSw3ICYjNDM7MTMzMyw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsCiAJCSAqIGFuZCB1cGRhdGUgZWxlbWVudCBpbiBwbGFjZQogCQkgKi8KIAkJY29weV9tYXBfdmFsdWVfbG9ja2VkKG1hcCwKLQkJCQkgICAgICBodGFiX2VsZW1fdmFsdWUobF9vbGQsIGtleV9zaXplKSwKJiM0MzsJCQkJICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfb2xkKSwKIAkJCQkgICAgICB2YWx1ZSwgZmFsc2UpOwogCQlyZXQgPSAwOwogCQlnb3RvIGVycjsKQEAgLTEyNTIsOSAmIzQzOzEzNTAsOSBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLAogCS8qIGFkZCBuZXcgZWxlbWVudCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdAogCSAqIGNvbmN1cnJlbnQgc2VhcmNoIHdpbGwgZmluZCBpdCBiZWZvcmUgb2xkIGVsZW0KIAkgKi8KLQlobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoJmFtcDtsX25ldy0mZ3Q7aGFzaF9ub2RlLCBoZWFkKTsKJiM0MzsJaGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KCZhbXA7bF9uZXctJmd0O25vZGUuaGFzaF9ub2RlLCBoZWFkKTsKIAlpZiAobF9vbGQpIHsKLQkJaGxpc3RfbnVsbHNfZGVsX3JjdSgmYW1wO2xfb2xkLSZndDtoYXNoX25vZGUpOwomIzQzOwkJaGxpc3RfbnVsbHNfZGVsX3JjdSgmYW1wO2xfb2xkLSZndDtub2RlLmhhc2hfbm9kZSk7CiAKIAkJLyogbF9vbGQgaGFzIGFscmVhZHkgYmVlbiBzdGFzaGVkIGluIGh0YWItJmd0O2V4dHJhX2VsZW1zLCBjYW5jZWwKIAkJICogaXRzIHJldXNhYmxlIHNwZWNpYWwgZmllbGRzIGJlZm9yZSBpdCBpcyBhdmFpbGFibGUgZm9yIHJldXNlLgpAQCAtMTI3NSw3ICYjNDM7MTM3Myw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfbHJ1X3B1c2hfZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmVsZW0pCiB7CiAJY2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoaHRhYiwgZWxlbSk7CiAJYnBmX21hcF9kZWNfZWxlbV9jb3VudCgmYW1wO2h0YWItJmd0O21hcCk7Ci0JYnBmX2xydV9wdXNoX2ZyZWUoJmFtcDtodGFiLSZndDtscnUsICZhbXA7ZWxlbS0mZ3Q7bHJ1X25vZGUpOwomIzQzOwlicGZfbHJ1X3B1c2hfZnJlZSgmYW1wO2h0YWItJmd0O2xydSwgaHRhYl9lbGVtX2xydV9ub2RlKGVsZW0pKTsKIH0KIAogc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsCkBAIC0xMzEwLDEzICYjNDM7MTQwOCwxMyBAQCBzdGF0aWMgbG9uZyBodGFiX2xydV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZQogCWxfbmV3ID0gcHJlYWxsb2NfbHJ1X3BvcChodGFiLCBrZXksIGhhc2gpOwogCWlmICghbF9uZXcpCiAJCXJldHVybiAtRU5PTUVNOwotCWNvcHlfbWFwX3ZhbHVlKCZhbXA7aHRhYi0mZ3Q7bWFwLCBodGFiX2VsZW1fdmFsdWUobF9uZXcsIG1hcC0mZ3Q7a2V5X3NpemUpLCB2YWx1ZSk7CiYjNDM7CWNvcHlfbWFwX3ZhbHVlKCZhbXA7aHRhYi0mZ3Q7bWFwLCBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLCB2YWx1ZSk7CiAKIAlyZXQgPSBodGFiX2xvY2tfYnVja2V0KGIsICZhbXA7ZmxhZ3MpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2xvY2tfYnVja2V0OwogCi0JbF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7CiYjNDM7CWxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpOwogCiAJcmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7CiAJaWYgKHJldCkKQEAgLTEzMjUsMTAgJiM0MzsxNDIzLDEwIEBAIHN0YXRpYyBsb25nIGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlCiAJLyogYWRkIG5ldyBlbGVtZW50IHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0LCBzbyB0aGF0CiAJICogY29uY3VycmVudCBzZWFyY2ggd2lsbCBmaW5kIGl0IGJlZm9yZSBvbGQgZWxlbQogCSAqLwotCWhsaXN0X251bGxzX2FkZF9oZWFkX3JjdSgmYW1wO2xfbmV3LSZndDtoYXNoX25vZGUsIGhlYWQpOwomIzQzOwlobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoJmFtcDtsX25ldy0mZ3Q7bm9kZS5oYXNoX25vZGUsIGhlYWQpOwogCWlmIChsX29sZCkgewotCQlicGZfbHJ1X25vZGVfc2V0X3JlZigmYW1wO2xfbmV3LSZndDtscnVfbm9kZSk7Ci0JCWhsaXN0X251bGxzX2RlbF9yY3UoJmFtcDtsX29sZC0mZ3Q7aGFzaF9ub2RlKTsKJiM0MzsJCWJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsX25ldykpOwomIzQzOwkJaGxpc3RfbnVsbHNfZGVsX3JjdSgmYW1wO2xfb2xkLSZndDtub2RlLmhhc2hfbm9kZSk7CiAJfQogCXJldCA9IDA7CiAKQEAgLTEzODMsNyAmIzQzOzE0ODEsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbV9pbl9wbGFjZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpOwomIzQzOwlsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKIAogCXJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpOwogCWlmIChyZXQpCkBAIC0xMzkyLDEwICYjNDM7MTQ5MCwxMCBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbV9pbl9wbGFjZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksCiAJaWYgKGxfb2xkKSB7CiAJCS8qIFVwZGF0ZSB2YWx1ZSBpbi1wbGFjZSAqLwogCQlpZiAocGVyY3B1KSB7Ci0JCQlwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIobF9vbGQsIGtleV9zaXplKSwKJiM0MzsJCQlwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9vbGQpLAogCQkJCQl2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpOwogCQl9IGVsc2UgewotCQkJdm9pZCAqKmlubmVyX21hcF9wcHRyID0gaHRhYl9lbGVtX3ZhbHVlKGxfb2xkLCBrZXlfc2l6ZSk7CiYjNDM7CQkJdm9pZCAqKmlubmVyX21hcF9wcHRyID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfb2xkKTsKIAogCQkJb2xkX21hcF9wdHIgPSAqaW5uZXJfbWFwX3BwdHI7CiAJCQlXUklURV9PTkNFKCppbm5lcl9tYXBfcHB0ciwgKih2b2lkICoqKXZhbHVlKTsKQEAgLTE0MDcsNyAmIzQzOzE1MDUsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbV9pbl9wbGFjZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksCiAJCQlyZXQgPSBQVFJfRVJSKGxfbmV3KTsKIAkJCWdvdG8gZXJyOwogCQl9Ci0JCWhsaXN0X251bGxzX2FkZF9oZWFkX3JjdSgmYW1wO2xfbmV3LSZndDtoYXNoX25vZGUsIGhlYWQpOwomIzQzOwkJaGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KCZhbXA7bF9uZXctJmd0O25vZGUuaGFzaF9ub2RlLCBoZWFkKTsKIAl9CiBlcnI6CiAJaHRhYl91bmxvY2tfYnVja2V0KGIsIGZsYWdzKTsKQEAgLTE0NTYsMjIgJiM0MzsxNTU0LDIyIEBAIHN0YXRpYyBsb25nIF9faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksCiAJaWYgKHJldCkKIAkJZ290byBlcnJfbG9ja19idWNrZXQ7CiAKLQlsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKJiM0MzsJbF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7CiAKIAlyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAogCWlmIChsX29sZCkgewotCQlicGZfbHJ1X25vZGVfc2V0X3JlZigmYW1wO2xfb2xkLSZndDtscnVfbm9kZSk7CiYjNDM7CQlicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobF9vbGQpKTsKIAogCQkvKiBwZXItY3B1IGhhc2ggbWFwIGNhbiB1cGRhdGUgdmFsdWUgaW4tcGxhY2UgKi8KLQkJcGNwdV9jb3B5X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGxfb2xkLCBrZXlfc2l6ZSksCiYjNDM7CQlwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9vbGQpLAogCQkJCXZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7CiAJfSBlbHNlIHsKLQkJcGNwdV9pbml0X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGxfbmV3LCBrZXlfc2l6ZSksCiYjNDM7CQlwY3B1X2luaXRfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9uZXcpLAogCQkJCXZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7Ci0JCWhsaXN0X251bGxzX2FkZF9oZWFkX3JjdSgmYW1wO2xfbmV3LSZndDtoYXNoX25vZGUsIGhlYWQpOwomIzQzOwkJaGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KCZhbXA7bF9uZXctJmd0O25vZGUuaGFzaF9ub2RlLCBoZWFkKTsKIAkJbF9uZXcgPSBOVUxMOwogCX0KIAlyZXQgPSAwOwpAQCAtMTQ4MCw3ICYjNDM7MTU3OCw3IEBAIHN0YXRpYyBsb25nIF9faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksCiBlcnJfbG9ja19idWNrZXQ6CiAJaWYgKGxfbmV3KSB7CiAJCWJwZl9tYXBfZGVjX2VsZW1fY291bnQoJmFtcDtodGFiLSZndDttYXApOwotCQlicGZfbHJ1X3B1c2hfZnJlZSgmYW1wO2h0YWItJmd0O2xydSwgJmFtcDtsX25ldy0mZ3Q7bHJ1X25vZGUpOwomIzQzOwkJYnBmX2xydV9wdXNoX2ZyZWUoJmFtcDtodGFiLSZndDtscnUsIGh0YWJfZWxlbV9scnVfbm9kZShsX25ldykpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMTUyMSw5ICYjNDM7MTYxOSw5IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JbCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKJiM0MzsJbCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKIAlpZiAobCkKLQkJaGxpc3RfbnVsbHNfZGVsX3JjdSgmYW1wO2wtJmd0O2hhc2hfbm9kZSk7CiYjNDM7CQlobGlzdF9udWxsc19kZWxfcmN1KCZhbXA7bC0mZ3Q7bm9kZS5oYXNoX25vZGUpOwogCWVsc2UKIAkJcmV0ID0gLUVOT0VOVDsKIApAQCAtMTU1NiwxMCAmIzQzOzE2NTQsMTAgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JbCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKJiM0MzsJbCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKIAogCWlmIChsKQotCQlobGlzdF9udWxsc19kZWxfcmN1KCZhbXA7bC0mZ3Q7aGFzaF9ub2RlKTsKJiM0MzsJCWhsaXN0X251bGxzX2RlbF9yY3UoJmFtcDtsLSZndDtub2RlLmhhc2hfbm9kZSk7CiAJZWxzZQogCQlyZXQgPSAtRU5PRU5UOwogCkBAIC0xNTgxLDggJiM0MzsxNjc5LDggQEAgc3RhdGljIHZvaWQgZGVsZXRlX2FsbF9lbGVtZW50cyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpCiAJCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuOwogCQlzdHJ1Y3QgaHRhYl9lbGVtICpsOwogCi0JCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7Ci0JCQlobGlzdF9udWxsc19kZWxfcmN1KCZhbXA7bC0mZ3Q7aGFzaF9ub2RlKTsKJiM0MzsJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpIHsKJiM0MzsJCQlobGlzdF9udWxsc19kZWxfcmN1KCZhbXA7bC0mZ3Q7bm9kZS5oYXNoX25vZGUpOwogCQkJaHRhYl9lbGVtX2ZyZWUoaHRhYiwgbCk7CiAJCX0KIAkJY29uZF9yZXNjaGVkKCk7CkBAIC0xNTk5LDEwICYjNDM7MTY5NywxMCBAQCBzdGF0aWMgdm9pZCBodGFiX2ZyZWVfbWFsbG9jZWRfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpCiAJCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuOwogCQlzdHJ1Y3QgaHRhYl9lbGVtICpsOwogCi0JCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkgewomIzQzOwkJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnkobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpIHsKIAkJCS8qIFdlIG9ubHkgZnJlZSBpbnRlcm5hbCBzdHJ1Y3RzIG9uIHVyZWYgZHJvcHBpbmcgdG8gemVybyAqLwogCQkJYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoJmFtcDtodGFiLSZndDttYXAsCi0JCQkJCQkgICAgICBodGFiX2VsZW1fdmFsdWUobCwgaHRhYi0mZ3Q7bWFwLmtleV9zaXplKSk7CiYjNDM7CQkJCQkJICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpKTsKIAkJfQogCQljb25kX3Jlc2NoZWRfcmN1KCk7CiAJfQpAQCAtMTY5Nyw3ICYjNDM7MTc5NSw3IEBAIHN0YXRpYyBpbnQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JbCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKJiM0MzsJbCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKIAlpZiAoIWwpIHsKIAkJcmV0ID0gLUVOT0VOVDsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtMTcwOCwxNCAmIzQzOzE4MDYsMTQgQEAgc3RhdGljIGludCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LAogCQl2b2lkIF9fcGVyY3B1ICpwcHRyOwogCQlpbnQgb2ZmID0gMCwgY3B1OwogCi0JCXBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBrZXlfc2l6ZSk7CiYjNDM7CQlwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCk7CiAJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJCWNvcHlfbWFwX3ZhbHVlX2xvbmcoJmFtcDtodGFiLSZndDttYXAsIHZhbHVlICYjNDM7IG9mZiwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7CiAJCQljaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoJmFtcDtodGFiLSZndDttYXAsIHZhbHVlICYjNDM7IG9mZik7CiAJCQlvZmYgJiM0Mzs9IHJvdW5kdXBfdmFsdWVfc2l6ZTsKIAkJfQogCX0gZWxzZSB7Ci0JCXZvaWQgKnNyYyA9IGh0YWJfZWxlbV92YWx1ZShsLCBtYXAtJmd0O2tleV9zaXplKTsKJiM0MzsJCXZvaWQgKnNyYyA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTsKIAogCQlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZfTE9DSykKIAkJCWNvcHlfbWFwX3ZhbHVlX2xvY2tlZChtYXAsIHZhbHVlLCBzcmMsIHRydWUpOwpAQCAtMTcyNCw3ICYjNDM7MTgyMiw3IEBAIHN0YXRpYyBpbnQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwKIAkJLyogWmVyb2luZyBzcGVjaWFsIGZpZWxkcyBpbiB0aGUgdGVtcCBidWZmZXIgKi8KIAkJY2hlY2tfYW5kX2luaXRfbWFwX3ZhbHVlKG1hcCwgdmFsdWUpOwogCX0KLQlobGlzdF9udWxsc19kZWxfcmN1KCZhbXA7bC0mZ3Q7aGFzaF9ub2RlKTsKJiM0MzsJaGxpc3RfbnVsbHNfZGVsX3JjdSgmYW1wO2wtJmd0O25vZGUuaGFzaF9ub2RlKTsKIAogb3V0X3VubG9jazoKIAlodGFiX3VubG9ja19idWNrZXQoYiwgYmZsYWdzKTsKQEAgLTE4NjAsNyAmIzQzOzE5NTgsNyBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsCiAJfQogCiAJYnVja2V0X2NudCA9IDA7Ci0JaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkKJiM0MzsJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKQogCQlidWNrZXRfY250JiM0MzsmIzQzOzsKIAogCWlmIChidWNrZXRfY250ICZhbXA7JmFtcDsgIWxvY2tlZCkgewpAQCAtMTg5NywxNCAmIzQzOzE5OTUsMTQgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCWlmICghbG9ja2VkKQogCQlnb3RvIG5leHRfYmF0Y2g7CiAKLQlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkgewotCQltZW1jcHkoZHN0X2tleSwgbC0mZ3Q7a2V5LCBrZXlfc2l6ZSk7CiYjNDM7CWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpIHsKJiM0MzsJCW1lbWNweShkc3Rfa2V5LCBodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXlfc2l6ZSk7CiAKIAkJaWYgKGlzX3BlcmNwdSkgewogCQkJaW50IG9mZiA9IDAsIGNwdTsKIAkJCXZvaWQgX19wZXJjcHUgKnBwdHI7CiAKLQkJCXBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtJmd0O2tleV9zaXplKTsKJiM0MzsJCQlwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCk7CiAJCQlpZiAoZWxlbV9tYXBfZmxhZ3MgJmFtcDsgQlBGX0ZfQ1BVKSB7CiAJCQkJY3B1ID0gZWxlbV9tYXBfZmxhZ3MgJmd0OyZndDsgMzI7CiAJCQkJY29weV9tYXBfdmFsdWUoJmFtcDtodGFiLSZndDttYXAsIGRzdF92YWwsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpOwpAQCAtMTkxOCw3ICYjNDM7MjAxNiw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwKIAkJCQl9CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQl2YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShsLCBrZXlfc2l6ZSk7CiYjNDM7CQkJdmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7CiAJCQlpZiAoaXNfZmRfaHRhYihodGFiKSkgewogCQkJCXN0cnVjdCBicGZfbWFwICoqaW5uZXJfbWFwID0gdmFsdWU7CiAKQEAgLTE5MzYsNyAmIzQzOzIwMzQsNyBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsCiAJCQljaGVja19hbmRfaW5pdF9tYXBfdmFsdWUobWFwLCBkc3RfdmFsKTsKIAkJfQogCQlpZiAoZG9fZGVsZXRlKSB7Ci0JCQlobGlzdF9udWxsc19kZWxfcmN1KCZhbXA7bC0mZ3Q7aGFzaF9ub2RlKTsKJiM0MzsJCQlobGlzdF9udWxsc19kZWxfcmN1KCZhbXA7bC0mZ3Q7bm9kZS5oYXNoX25vZGUpOwogCiAJCQkvKiBicGZfbHJ1X3B1c2hfZnJlZSgpIHdpbGwgYWNxdWlyZSBscnVfbG9jaywgd2hpY2gKIAkJCSAqIG1heSBjYXVzZSBkZWFkbG9jay4gU2VlIGNvbW1lbnRzIGluIGZ1bmN0aW9uCkBAIC0xOTQ4LDcgJiM0MzsyMDQ2LDcgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCQkJICogbG9jayBiZWluZyBoZWxkIGFuZCBpdCB2aW9sYXRlcyB0aGUgbG9jayBydWxlLCBzbwogCQkJICogaW52b2tlIGZyZWVfaHRhYl9lbGVtKCkgYWZ0ZXIgdW5sb2NrIGFzIHdlbGwuCiAJCQkgKi8KLQkJCWwtJmd0O2JhdGNoX2ZsaW5rID0gbm9kZV90b19mcmVlOwomIzQzOwkJCWwtJmd0O25vZGUuYmF0Y2hfZmxpbmsgPSBub2RlX3RvX2ZyZWU7CiAJCQlub2RlX3RvX2ZyZWUgPSBsOwogCQl9CiAJCWRzdF9rZXkgJiM0Mzs9IGtleV9zaXplOwpAQCAtMTk2MCw3ICYjNDM7MjA1OCw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwKIAogCXdoaWxlIChub2RlX3RvX2ZyZWUpIHsKIAkJbCA9IG5vZGVfdG9fZnJlZTsKLQkJbm9kZV90b19mcmVlID0gbm9kZV90b19mcmVlLSZndDtiYXRjaF9mbGluazsKJiM0MzsJCW5vZGVfdG9fZnJlZSA9IG5vZGVfdG9fZnJlZS0mZ3Q7bm9kZS5iYXRjaF9mbGluazsKIAkJaWYgKGlzX2xydV9tYXApCiAJCQlodGFiX2xydV9wdXNoX2ZyZWUoaHRhYiwgbCk7CiAJCWVsc2UKQEAgLTIxMDgsOCAmIzQzOzIyMDYsOCBAQCBicGZfaGFzaF9tYXBfc2VxX2ZpbmRfbmV4dChzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2hhc2hfbWFwX2luZm8gKmluZm8sCiAJCS8qIG5vIHVwZGF0ZS9kZWxldGlvbiBvbiB0aGlzIGJ1Y2tldCwgcHJldl9lbGVtIHNob3VsZCBiZSBzdGlsbCB2YWxpZAogCQkgKiBhbmQgd2Ugd29uJiMzOTt0IHNraXAgZWxlbWVudHMuCiAJCSAqLwotCQluID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhobGlzdF9udWxsc19uZXh0X3JjdSgmYW1wO3ByZXZfZWxlbS0mZ3Q7aGFzaF9ub2RlKSk7Ci0JCWVsZW0gPSBobGlzdF9udWxsc19lbnRyeV9zYWZlKG4sIHN0cnVjdCBodGFiX2VsZW0sIGhhc2hfbm9kZSk7CiYjNDM7CQluID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhobGlzdF9udWxsc19uZXh0X3JjdSgmYW1wO3ByZXZfZWxlbS0mZ3Q7bm9kZS5oYXNoX25vZGUpKTsKJiM0MzsJCWVsZW0gPSBobGlzdF9udWxsc19lbnRyeV9zYWZlKG4sIHN0cnVjdCBodGFiX2VsZW0sIG5vZGUuaGFzaF9ub2RlKTsKIAkJaWYgKGVsZW0pCiAJCQlyZXR1cm4gZWxlbTsKIApAQCAtMjEyNSw3ICYjNDM7MjIyMyw3IEBAIGJwZl9oYXNoX21hcF9zZXFfZmluZF9uZXh0KHN0cnVjdCBicGZfaXRlcl9zZXFfaGFzaF9tYXBfaW5mbyAqaW5mbywKIAogCQljb3VudCA9IDA7CiAJCWhlYWQgPSAmYW1wO2ItJmd0O2hlYWQ7Ci0JCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShlbGVtLCBuLCBoZWFkLCBoYXNoX25vZGUpIHsKJiM0MzsJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShlbGVtLCBuLCBoZWFkLCBub2RlLmhhc2hfbm9kZSkgewogCQkJaWYgKGNvdW50ICZndDs9IHNraXBfZWxlbXMpIHsKIAkJCQlpbmZvLSZndDtidWNrZXRfaWQgPSBpOwogCQkJCWluZm8tJmd0O3NraXBfZWxlbXMgPSBjb3VudDsKQEAgLTIxODMsMTIgJiM0MzsyMjgxLDEyIEBAIHN0YXRpYyBpbnQgX19icGZfaGFzaF9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBodGFiX2VsZW0gKmVsZW0pCiAJCWN0eC5tZXRhID0gJmFtcDttZXRhOwogCQljdHgubWFwID0gaW5mby0mZ3Q7bWFwOwogCQlpZiAoZWxlbSkgewotCQkJY3R4LmtleSA9IGVsZW0tJmd0O2tleTsKJiM0MzsJCQljdHgua2V5ID0gaHRhYl9lbGVtX2tleShpbmZvLSZndDtodGFiLCBlbGVtKTsKIAkJCWlmICghaW5mby0mZ3Q7cGVyY3B1X3ZhbHVlX2J1ZikgewotCQkJCWN0eC52YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShlbGVtLCBtYXAtJmd0O2tleV9zaXplKTsKJiM0MzsJCQkJY3R4LnZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGluZm8tJmd0O2h0YWIsIGVsZW0pOwogCQkJfSBlbHNlIHsKIAkJCQlyb3VuZHVwX3ZhbHVlX3NpemUgPSByb3VuZF91cChtYXAtJmd0O3ZhbHVlX3NpemUsIDgpOwotCQkJCXBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBtYXAtJmd0O2tleV9zaXplKTsKJiM0MzsJCQkJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGluZm8tJmd0O2h0YWIsIGVsZW0pOwogCQkJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJCQkJY29weV9tYXBfdmFsdWVfbG9uZyhtYXAsIGluZm8tJmd0O3BlcmNwdV92YWx1ZV9idWYgJiM0Mzsgb2ZmLAogCQkJCQkJCSAgICBwZXJfY3B1X3B0cihwcHRyLCBjcHUpKTsKQEAgLTIyOTIsMTQgJiM0MzsyMzkwLDE0IEBAIHN0YXRpYyBsb25nIGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgYnBmX2NhbGxiYWNrX3QgY2FsbGJhY2tfCiAJCWIgPSAmYW1wO2h0YWItJmd0O2J1Y2tldHNbaV07CiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJaGVhZCA9ICZhbXA7Yi0mZ3Q7aGVhZDsKLQkJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShlbGVtLCBuLCBoZWFkLCBoYXNoX25vZGUpIHsKLQkJCWtleSA9IGVsZW0tJmd0O2tleTsKJiM0MzsJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUoZWxlbSwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpIHsKJiM0MzsJCQlrZXkgPSBodGFiX2VsZW1fa2V5KGh0YWIsIGVsZW0pOwogCQkJaWYgKGlzX3BlcmNwdSkgewogCQkJCS8qIGN1cnJlbnQgY3B1IHZhbHVlIGZvciBwZXJjcHUgbWFwICovCi0JCQkJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGVsZW0sIG1hcC0mZ3Q7a2V5X3NpemUpOwomIzQzOwkJCQlwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgZWxlbSk7CiAJCQkJdmFsID0gdGhpc19jcHVfcHRyKHBwdHIpOwogCQkJfSBlbHNlIHsKLQkJCQl2YWwgPSBodGFiX2VsZW1fdmFsdWUoZWxlbSwgbWFwLSZndDtrZXlfc2l6ZSk7CiYjNDM7CQkJCXZhbCA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBlbGVtKTsKIAkJCX0KIAkJCW51bV9lbGVtcyYjNDM7JiM0Mzs7CiAJCQlyZXQgPSBjYWxsYmFja19mbigodTY0KShsb25nKW1hcCwgKHU2NCkobG9uZylrZXksCkBAIC0yNDAzLDEwICYjNDM7MjUwMSwxMSBAQCBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9scnVfbWFwX29wcyA9IHsKIC8qIENhbGxlZCBmcm9tIGVCUEYgcHJvZ3JhbSAqLwogc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpCiB7CiYjNDM7CXN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKIAlzdHJ1Y3QgaHRhYl9lbGVtICpsID0gX19odGFiX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7CiAKIAlpZiAobCkKLQkJcmV0dXJuIHRoaXNfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtJmd0O2tleV9zaXplKSk7CiYjNDM7CQlyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpKTsKIAllbHNlCiAJCXJldHVybiBOVUxMOwogfQpAQCAtMjQxNCw2ICYjNDM7MjUxMyw3IEBAIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQogLyogaW5saW5lIGJwZl9tYXBfbG9va3VwX2VsZW0oKSBjYWxsIGZvciBwZXItQ1BVIGhhc2htYXAgKi8KIHN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZikKIHsKJiM0MzsJc3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApOwogCXN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmOwogCiAJaWYgKCFicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKCkpCkBAIC0yNDI0LDcgJiM0MzsyNTI0LDcgQEAgc3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc24KIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pOwogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIEJQRl9SRUdfMCwgMCwgMyk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCBCUEZfUkVHXzAsCi0JCQkJb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwga2V5KSAmIzQzOyByb3VuZHVwKG1hcC0mZ3Q7a2V5X3NpemUsIDgpKTsKJiM0MzsJCQkJaHRhYi0mZ3Q7a2V5X29mZnNldCAmIzQzOyByb3VuZHVwKG1hcC0mZ3Q7a2V5X3NpemUsIDgpKTsKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18wLCAwKTsKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7CiAKQEAgLTI0MzMsNiAmIzQzOzI1MzMsNyBAQCBzdGF0aWMgaW50IGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbgogCiBzdGF0aWMgdm9pZCAqaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHUzMiBjcHUpCiB7CiYjNDM7CXN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKIAlzdHJ1Y3QgaHRhYl9lbGVtICpsOwogCiAJaWYgKGNwdSAmZ3Q7PSBucl9jcHVfaWRzKQpAQCAtMjQ0MCwxOCAmIzQzOzI1NDEsMTkgQEAgc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LAogCiAJbCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpOwogCWlmIChsKQotCQlyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLSZndDtrZXlfc2l6ZSksIGNwdSk7CiYjNDM7CQlyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCksIGNwdSk7CiAJZWxzZQogCQlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQogewomIzQzOwlzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7CiAJc3RydWN0IGh0YWJfZWxlbSAqbCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpOwogCiAJaWYgKGwpIHsKLQkJYnBmX2xydV9ub2RlX3NldF9yZWYoJmFtcDtsLSZndDtscnVfbm9kZSk7Ci0JCXJldHVybiB0aGlzX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLSZndDtrZXlfc2l6ZSkpOwomIzQzOwkJYnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGwpKTsKJiM0MzsJCXJldHVybiB0aGlzX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCkpOwogCX0KIAogCXJldHVybiBOVUxMOwpAQCAtMjQ1OSw2ICYjNDM7MjU2MSw3IEBAIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkKIAogc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdTMyIGNwdSkKIHsKJiM0MzsJc3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApOwogCXN0cnVjdCBodGFiX2VsZW0gKmw7CiAKIAlpZiAoY3B1ICZndDs9IG5yX2NwdV9pZHMpCkBAIC0yNDY2LDggJiM0MzsyNTY5LDggQEAgc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmsKIAogCWwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTsKIAlpZiAobCkgewotCQlicGZfbHJ1X25vZGVfc2V0X3JlZigmYW1wO2wtJmd0O2xydV9ub2RlKTsKLQkJcmV0dXJuIHBlcl9jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC0mZ3Q7a2V5X3NpemUpLCBjcHUpOwomIzQzOwkJYnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGwpKTsKJiM0MzsJCXJldHVybiBwZXJfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKSwgY3B1KTsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTI0NzUsNiAmIzQzOzI1NzgsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqawogCiBpbnQgYnBmX3BlcmNwdV9oYXNoX2NvcHkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncykKIHsKJiM0MzsJc3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApOwogCXN0cnVjdCBodGFiX2VsZW0gKmw7CiAJdm9pZCBfX3BlcmNwdSAqcHB0cjsKIAlpbnQgcmV0ID0gLUVOT0VOVDsKQEAgLTI0OTQsNyAmIzQzOzI1OTgsNyBAQCBpbnQgYnBmX3BlcmNwdV9oYXNoX2NvcHkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbAogCS8qIFdlIGRvIG5vdCBtYXJrIExSVSBtYXAgZWxlbWVudCBoZXJlIGluIG9yZGVyIHRvIG5vdCBtZXNzIHVwCiAJICogZXZpY3Rpb24gaGV1cmlzdGljcyB3aGVuIHVzZXIgc3BhY2UgZG9lcyBhIG1hcCB3YWxrLgogCSAqLwotCXBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtJmd0O2tleV9zaXplKTsKJiM0MzsJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpOwogCWlmIChtYXBfZmxhZ3MgJmFtcDsgQlBGX0ZfQ1BVKSB7CiAJCWNwdSA9IG1hcF9mbGFncyAmZ3Q7Jmd0OyAzMjsKIAkJY29weV9tYXBfdmFsdWUobWFwLCB2YWx1ZSwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7CkBAIC0yNTMyLDYgJiM0MzsyNjM2LDcgQEAgaW50IGJwZl9wZXJjcHVfaGFzaF91cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwKIHN0YXRpYyB2b2lkIGh0YWJfcGVyY3B1X21hcF9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwKIAkJCQkJICBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CiYjNDM7CXN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKIAlzdHJ1Y3QgaHRhYl9lbGVtICpsOwogCXZvaWQgX19wZXJjcHUgKnBwdHI7CiAJaW50IGNwdTsKQEAgLTI1NDYsNyAmIzQzOzI2NTEsNyBAQCBzdGF0aWMgdm9pZCBodGFiX3BlcmNwdV9tYXBfc2VxX3Nob3dfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksCiAKIAlidGZfdHlwZV9zZXFfc2hvdyhtYXAtJmd0O2J0ZiwgbWFwLSZndDtidGZfa2V5X3R5cGVfaWQsIGtleSwgbSk7CiAJc2VxX3B1dHMobSwgJiMzNDs6IHtcbiYjMzQ7KTsKLQlwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLSZndDtrZXlfc2l6ZSk7CiYjNDM7CXBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCXNlcV9wcmludGYobSwgJiMzNDtcdGNwdSVkOiAmIzM0OywgY3B1KTsKIAkJYnRmX3R5cGVfc2VxX3Nob3cobWFwLSZndDtidGYsIG1hcC0mZ3Q7YnRmX3ZhbHVlX3R5cGVfaWQsCkBAIC0yNjE5LDggJiM0MzsyNzI0LDggQEAgc3RhdGljIHZvaWQgZmRfaHRhYl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKQogCWZvciAoaSA9IDA7IGkgJmx0OyBodGFiLSZndDtuX2J1Y2tldHM7IGkmIzQzOyYjNDM7KSB7CiAJCWhlYWQgPSBzZWxlY3RfYnVja2V0KGh0YWIsIGkpOwogCi0JCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7Ci0JCQl2b2lkICpwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKG1hcCwgbCk7CiYjNDM7CQlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKSB7CiYjNDM7CQkJdm9pZCAqcHRyID0gZmRfaHRhYl9tYXBfZ2V0X3B0cihodGFiLCBsKTsKIAogCQkJbWFwLSZndDtvcHMtJmd0O21hcF9mZF9wdXRfcHRyKG1hcCwgcHRyLCBmYWxzZSk7CiAJCX0KQEAgLTI3MDUsNiAmIzQzOzI4MTAsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9vZl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQogc3RhdGljIGludCBodGFiX29mX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsCiAJCQkJICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKQogewomIzQzOwlzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7CiAJc3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7CiAJY29uc3QgaW50IHJldCA9IEJQRl9SRUdfMDsKIApAQCAtMjcxMyw3ICYjNDM7MjgxOSw3IEBAIHN0YXRpYyBpbnQgaHRhYl9vZl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9FTUlUX0NBTEwoX19odGFiX21hcF9sb29rdXBfZWxlbSk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgcmV0LCAwLCAyKTsKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfSU1NKEJQRl9BREQsIHJldCwKLQkJCQlvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICYjNDM7CiYjNDM7CQkJCWh0YWItJmd0O2tleV9vZmZzZXQgJiM0MzsKIAkJCQlyb3VuZF91cChtYXAtJmd0O2tleV9zaXplLCA4KSk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0RXLCByZXQsIHJldCwgMCk7CiAKQEAgLTMxMTIsNyAmIzQzOzMyMTgsNyBAQCBzdGF0aWMgaW50IHJodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAogewogCXN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTsKIAotCXJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCAmYW1wO3JodGFiLSZndDttYSwgcmh0YWJfbWVtX2R0b3IpOwomIzQzOwlyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgJmFtcDtyaHRhYi0mZ3Q7bWEsIHJodGFiX21lbV9kdG9yLCBvZmZzZXRvZihzdHJ1Y3Qgcmh0YWJfZWxlbSwgZGF0YSkpOwogfQogCiBzdGF0aWMgdm9pZCByaHRhYl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXApCkBAIC0zNTMzLDMgJiM0MzszNjM5LDE2IEBAIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0gewogCS5tYXBfYnRmX2lkID0gJmFtcDtyaHRhYl9tYXBfYnRmX2lkc1swXSwKIAkuaXRlcl9zZXFfaW5mbyA9ICZhbXA7cmhhc2hfaXRlcl9zZXFfaW5mbywKIH07CiYjNDM7CiYjNDM7c2l6ZV90IGJwZl9odGFiX21hcF9tZXRhX3NpemUodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBzaXplb2Yoc3RydWN0IGJwZl9odGFiKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBicGZfaHRhYl9tYXBfbWV0YV9pbml0KHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXBfbWV0YSwgc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfaHRhYiAqaW5uZXJfaHRhYl9tZXRhID0gY29udGFpbmVyX29mKGlubmVyX21hcF9tZXRhLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7CiYjNDM7CXN0cnVjdCBicGZfaHRhYiAqaW5uZXJfaHRhYiA9IGNvbnRhaW5lcl9vZihpbm5lcl9tYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKJiM0MzsKJiM0MzsJaW5uZXJfaHRhYl9tZXRhLSZndDtrZXlfb2Zmc2V0ID0gaW5uZXJfaHRhYi0mZ3Q7a2V5X29mZnNldDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21hcF9pbl9tYXAuYyBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5jCmluZGV4IGQyY2JhYjRiZGY2NDQuLmIyZGI1ZDBjOThiZWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvbWFwX2luX21hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5jCkBAIC03LDYgJiM0Mzs3LDE1IEBACiAKICNpbmNsdWRlICYjMzQ7bWFwX2luX21hcC5oJiMzNDsKIAomIzQzO3N0YXRpYyBib29sIGJwZl9tYXBfdHlwZV9pc19odGFiKGVudW0gYnBmX21hcF90eXBlIHR5cGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHlwZSA9PSBCUEZfTUFQX1RZUEVfSEFTSCB8fAomIzQzOwkgICAgICAgdHlwZSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0ggfHwKJiM0MzsJICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX0xSVV9IQVNIIHx8CiYjNDM7CSAgICAgICB0eXBlID09IEJQRl9NQVBfVFlQRV9MUlVfUEVSQ1BVX0hBU0ggfHwKJiM0MzsJICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX0hBU0hfT0ZfTUFQUzsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3QgYnBmX21hcCAqYnBmX21hcF9tZXRhX2FsbG9jKGludCBpbm5lcl9tYXBfdWZkKQogewogCXN0cnVjdCBicGZfbWFwICppbm5lcl9tYXAsICppbm5lcl9tYXBfbWV0YTsKQEAgLTI5LDYgJiM0MzszOCw4IEBAIHN0cnVjdCBicGZfbWFwICpicGZfbWFwX21ldGFfYWxsb2MoaW50IGlubmVyX21hcF91ZmQpCiAJLyogSW4gc29tZSBjYXNlcyB2ZXJpZmllciBuZWVkcyB0byBhY2Nlc3MgYmV5b25kIGp1c3QgYmFzZSBtYXAuICovCiAJaWYgKGlubmVyX21hcC0mZ3Q7b3BzID09ICZhbXA7YXJyYXlfbWFwX29wcyB8fCBpbm5lcl9tYXAtJmd0O29wcyA9PSAmYW1wO3BlcmNwdV9hcnJheV9tYXBfb3BzKQogCQlpbm5lcl9tYXBfbWV0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBicGZfYXJyYXkpOwomIzQzOwllbHNlIGlmIChicGZfbWFwX3R5cGVfaXNfaHRhYihpbm5lcl9tYXAtJmd0O21hcF90eXBlKSkKJiM0MzsJCWlubmVyX21hcF9tZXRhX3NpemUgPSBicGZfaHRhYl9tYXBfbWV0YV9zaXplKCk7CiAKIAlpbm5lcl9tYXBfbWV0YSA9IGt6YWxsb2MoaW5uZXJfbWFwX21ldGFfc2l6ZSwgR0ZQX1VTRVIpOwogCWlmICghaW5uZXJfbWFwX21ldGEpCkBAIC03MCw2ICYjNDM7ODEsOCBAQCBzdHJ1Y3QgYnBmX21hcCAqYnBmX21hcF9tZXRhX2FsbG9jKGludCBpbm5lcl9tYXBfdWZkKQogCQlpbm5lcl9hcnJheV9tZXRhLSZndDtpbmRleF9tYXNrID0gaW5uZXJfYXJyYXktJmd0O2luZGV4X21hc2s7CiAJCWlubmVyX2FycmF5X21ldGEtJmd0O2VsZW1fc2l6ZSA9IGlubmVyX2FycmF5LSZndDtlbGVtX3NpemU7CiAJCWlubmVyX21hcF9tZXRhLSZndDtieXBhc3Nfc3BlY192MSA9IGlubmVyX21hcC0mZ3Q7YnlwYXNzX3NwZWNfdjE7CiYjNDM7CX0gZWxzZSBpZiAoYnBmX21hcF90eXBlX2lzX2h0YWIoaW5uZXJfbWFwLSZndDttYXBfdHlwZSkpIHsKJiM0MzsJCWJwZl9odGFiX21hcF9tZXRhX2luaXQoaW5uZXJfbWFwX21ldGEsIGlubmVyX21hcCk7CiAJfQogCXJldHVybiBpbm5lcl9tYXBfbWV0YTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWFwX2luX21hcC5oIGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmgKaW5kZXggN2Q2MTYwMjM1NGRlOC4uMWVkYzIwNTc3MmQ4YyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9tYXBfaW5fbWFwLmgKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmgKQEAgLTE1LDUgJiM0MzsxNSw3IEBAIHZvaWQgKmJwZl9tYXBfZmRfZ2V0X3B0cihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsCiAJCQkgaW50IHVmZCk7CiB2b2lkIGJwZl9tYXBfZmRfcHV0X3B0cihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpwdHIsIGJvb2wgbmVlZF9kZWZlcik7CiB1MzIgYnBmX21hcF9mZF9zeXNfbG9va3VwX2VsZW0odm9pZCAqcHRyKTsKJiM0MztzaXplX3QgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSh2b2lkKTsKJiM0Mzt2b2lkIGJwZl9odGFiX21hcF9tZXRhX2luaXQoc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcF9tZXRhLCBzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMKaW5kZXggMzczYzhkMTdlYTU1Ny4uNmJkNGNiNjhjMjBjMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYwpAQCAtMTE0LDcgJiM0MzsxMTQsNyBAQCBzdGF0aWMgaW5saW5lIGludCBjaGVja19oYXNoKHZvaWQpCiAJVkVSSUZZKGNoZWNrX2RlZmF1bHRfbm9pbmxpbmUoJmFtcDtoYXNoLSZndDttYXAsIG1hcCkpOwogCiAJVkVSSUZZKGhhc2gtJmd0O25fYnVja2V0cyA9PSBNQVhfRU5UUklFUyk7Ci0JVkVSSUZZKGhhc2gtJmd0O2VsZW1fc2l6ZSA9PSA2NCk7CiYjNDM7CVZFUklGWShoYXNoLSZndDtlbGVtX3NpemUgPT0gMzIpOwogCiAJVkVSSUZZKGhhc2gtJmd0O2NvdW50LmNvdW50ZXIgPT0gMCk7CiAJVkVSSUZZKGJwZl9tYXBfc3VtX2VsZW1fY291bnQobWFwKSA9PSAwKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4MTAKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiA4MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIEhhc2ggTWFwIE9wdGltaXphdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgY2hhbmdlcyB0aGUgbGF5b3V0IG9mIGVsZW1lbnRzIHdpdGhpbiBCUEYgaGFzaCBtYXBzLCBzcGVjaWZpY2FsbHkgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBhbmQgYGtlcm5lbC9icGYvbWFwX2luX21hcC5jYC4gVGhlIGNvcmUgaWRlYSBpcyB0byAqY29uZGl0aW9uYWxseSogZHJvcCB0aGUgYGhhc2hgIGZpZWxkIGZyb20gdGhlIGVsZW1lbnQgc3RydWN0dXJlLCB3aGljaCBtYWtlcyBzZW5zZTsgaWYga2V5IGNvbXBhcmlzb25zIGFyZSBhdG9taWMgKHNtYWxsIGtleXMpIGFuZCBpdCYjMzk7cyBub3QgYW4gTFJVIG1hcCwgd2h5IGJvdGhlciBzdG9yaW5nIGl0PyBUaGlzIG9wdGltaXphdGlvbiBpbnRyb2R1Y2VzIGBrZXlfb2Zmc2V0YCB0byBgc3RydWN0IGJwZl9odGFiYCwgYWxsb3dpbmcgZm9yIGR5bmFtaWMgY29tcHV0YXRpb24gb2Yga2V5IGFuZCB2YWx1ZSBvZmZzZXRzIHdpdGhpbiB0aGUgZWxlbWVudC4gVGhlIHBhdGNoIGFsc28gcHJvcGFnYXRlcyBga2V5X29mZnNldGAgaW50byB0aGUgaW5uZXIgbWFwIG1ldGFkYXRhIGZvciBoYXNoIG1hcHMgd2l0aGluIG1hcC1pbi1tYXAgc3RydWN0dXJlcywgd2hpY2ggaXMgZXhwZWN0ZWQuCgpHaXZlbiB0aGUgZGVwdGggb2YgdGhpcyBjaGFuZ2UgdG8gdGhlIGNvcmUgaGFzaCBtYXAgaW1wbGVtZW50YXRpb24sIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyAqYWJzb2x1dGVseSogZGVtYW5kcyB0aG9yb3VnaCBmdXp6aW5nLiBUaGlzIGlzIHRoZSBraW5kIG9mIGNoYW5nZSB0aGF0IGNhbiBpbnRyb2R1Y2Ugc3VidGxlIGJ1dCBjcml0aWNhbCBidWdzLgoKTXkgZm9jdXMgaGFzIHNoaWZ0ZWQgdG8gaWRlbnRpZnlpbmcgdGhlIGtleSBmdW5jdGlvbnMgYW5kIEFQSSBlbnRyeSBwb2ludHMuIEkmIzM5O3ZlIGluaXRpYWxseSBzcG90dGVkIHRoZSBmb2xsb3dpbmcgYXMgYmVpbmcgaW1wb3J0YW50IHRvIGNoZWNrIGZvciBmdW5jdGlvbmFsaXR5OgoKKiAgIGBodGFiX21hcF9hbGxvY2AKKiAgIGBodGFiX21hcF91cGRhdGVfZWxlbWAKKiAgIGBodGFiX2xydV9tYXBfdXBkYXRlX2VsZW1gCiogICBgaHRhYl9tYXBfZGVsZXRlX2VsZW1gCiogICBgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtYAoqICAgYGh0YWJfbWFwX2xvb2t1cF9lbGVtYAoqICAgYGh0YWJfbHJ1X21hcF9sb29rdXBfZWxlbWAKKiAgIGBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW1gCiogICBgaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfZWxlbWAKKiAgIGBodGFiX21hcF9nZXRfbmV4dF9rZXlgCiogICBgaHRhYl9tYXBfZ2VuX2xvb2t1cGAKKiAgIGBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cGAKKiAgIGBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cGAKKiAgIGBodGFiX29mX21hcF9nZW5fbG9va3VwYAoqICAgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAKKiAgIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYAoqICAgYGJwZl9tYXBfbWV0YV9hbGxvY2AKClRob3VnaCBpdCBzZWVtcyBgaHRhYl9tYXBfdXBkYXRlX2VsZW1gIGlzIHN0YXRpYywgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGl0JiMzOTtzIGFzc2lnbmVkIHRvIGBtYXBfb3BzYC4gSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCAqd2hpY2gqIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgZXhwb3NlZCBhcyB0aGUgQVBJLCBhbmQgd2hhdCBhcmUgZ29vZCB0YXJnZXRzIGZvciBmdXp6aW5nLgoKQWZ0ZXIgYSBsaXR0bGUgcmV2aWV3LCBpdCBsb29rcyBsaWtlIGBodGFiX21hcF9hbGxvY2AgaXMgYWxzbyBzdGF0aWMsIHNvIEkgd2lsbCBub3cgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzIG9uIG90aGVyIGV4cG9ydHM6CgoqICAgYGJwZl9wZXJjcHVfaGFzaF9jb3B5YAoqICAgYGJwZl9wZXJjcHVfaGFzaF91cGRhdGVgCiogICBgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZWAKKiAgIGBicGZfaHRhYl9tYXBfbWV0YV9pbml0YAoqICAgYGJwZl9tYXBfbWV0YV9hbGxvY2AKClRpbWUgdG8gY2hlY2sgaG93IHRoZXNlIGFyZSBkZWZpbmVkIHVzaW5nIGBkZWZhdWx0X2FwaTpncmVwcGVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIEFQSXMgYXJlIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oaW50fHZvaWR8c3RydWN0IGJwZl9tYXAgXFwqKSBodGFiX21hcF9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jPTQ1MD1zdGF0aWMgaW50IGFsbG9jX2V4dHJhX2VsZW1zKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy00NzMtLyogQ2FsbGVkIGZyb20gc3lzY2FsbCAqL1xua2VybmVsL2JwZi9oYXNodGFiLmM6NDc0OnN0YXRpYyBpbnQgaHRhYl9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy00NzUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTA0CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlRoaW5raW5nIFRocm91Z2ggSGFzaCBUYWJsZSBBbGxvY2F0aW9uKioKClJpZ2h0LCBzbyBgaHRhYl9tYXBfYWxsb2NgIGlzIHN0YXRpYywgd2hpY2ggaXMgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgd2hlbiB0cmFja2luZyB0aGlzLiBUaGUgc2NvcGUgb2YgdGhpcyBpcyBsaW1pdGVkLCBhIGRldGFpbCB0aGF0IGlzIG9mIHNpZ25pZmljYW5jZSB0byBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGJlaW5nIGRvbmUuCgpOb3csIGxldCYjMzk7cyBwaXZvdCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGBodGFiX21hcF91cGRhdGVfZWxlbWAgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgaG93IGVsZW1lbnRzIGFyZSB1cGRhdGVkIGlzIGtleSBoZXJlLiBUaGF0IHdpbGwgaW5mb3JtIGEgZ3JlYXQgZGVhbCBhYm91dCB0aGUgb3ZlcmFsbCBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhsb25nfGludHx2b2lkKSBodGFiX21hcF91cGRhdGVfZWxlbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jPTEyNTc9c3RhdGljIGludCBjaGVja19mbGFncyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmxfb2xkLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEyNzEtLyogQ2FsbGVkIGZyb20gc3lzY2FsbCBvciBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xua2VybmVsL2JwZi9oYXNodGFiLmM6MTI3MjpzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTI3My1cdFx0XHRcdCB1NjQgbWFwX2ZsYWdzKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTE0NDU9c3RhdGljIGludCBodGFiX21hcF9jaGVja191cGRhdGVfZmxhZ3MoYm9vbCBvbmFsbGNwdXMsIHU2NCBtYXBfZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMTQ1My1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjE0NTQ6c3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW1faW5fcGxhY2Uoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTQ1NS1cdFx0XHRcdFx0ICB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzk4NwoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDE0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIE1hcCBPcGVyYXRpb25zIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBCUEYgbWFwIG9wZXJhdGlvbiBpbXBsZW1lbnRhdGlvbnMuIFRoZXkmIzM5O3JlIGFsbCBkZWNsYXJlZCBhcyBgc3RhdGljYCBmdW5jdGlvbnMsIHdoaWNoIGlzIHR5cGljYWwgZm9yIGNvcmUgbG9naWMgd2l0aGluIGEga2VybmVsIG1vZHVsZSwgYnV0IHRoZXkmIzM5O3JlIHRoZSBvbmVzIGRyaXZpbmcgdGhlIGBicGZfbWFwX29wc2AuICBUaGF0JiMzOTtzIHdoZXJlIHRoZSBpbXBvcnRhbnQgc3R1ZmYgaGFwcGVucy4gVGhlIGBicGZfbWFwX29wc2Agc3RydWN0LCBpbiBwYXJ0aWN1bGFyLCBob2xkcyBwb2ludGVycyB0byB0aGVzZSBmdW5jdGlvbnMsIHdoaWNoIGlzIGtleSBmb3IgaG93IHRoZXNlIG1hcHMgYmVoYXZlLgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZy4gSWYgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucyBlbmNhcHN1bGF0ZSB0aGUgY29yZSBsb2dpYywgdGhleSBzZWVtIGxpa2UgcHJpbWUgdGFyZ2V0cy4gQnV0IHdhaXQuLi50aGUgaW5zdHJ1Y3Rpb25zIGFyZSB0ZWxsaW5nIG1lIHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IG1lYW5zIGF2b2lkaW5nIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgYXJlIGxpa2VseSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gVGhlc2UgaGVscGVycyB3b24mIzM5O3QgaGF2ZSB0aGVpciBvd24gZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBmb3IgZnV6emluZyB0b29scyB0byB0YXJnZXQgZWZmZWN0aXZlbHkuCgpUaGlua2luZyBhYm91dCB0aGF0LCBgaHRhYl9tYXBfdXBkYXRlX2VsZW1gIGlzbiYjMzk7dCBhbiBpbnRlcm5hbCBoZWxwZXIuIEl0JiMzOTtzIGEgY2FsbGJhY2sgZm9yIGEgbWFwIG9wZXJhdGlvbiwgc28gaXRzIGFkZHJlc3MgaXMgZGVmaW5pdGVseSB0YWtlbiBhbmQgaXQgc2hvdWxkbiYjMzk7dCBiZSBpbmxpbmVkLiBUaGF0JiMzOTtzIGEgZ29vZCBmaW5kISBJdCBzaG91bGQgYmUgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCkxldCBtZSB0YWtlIGEgbG9vayBhdCBgYnBmX21hcF9tZXRhX2FsbG9jYCBuZXh0IHRvIHNlZSBpZiBpdCBmb2xsb3dzIHRoaXMgcGF0dGVybi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApP3N0cnVjdCBicGZfbWFwIFxcKmJwZl9tYXBfbWV0YV9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbWFwX2luX21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbWFwX2luX21hcC5jPTEwPXN0YXRpYyBib29sIGJwZl9tYXBfdHlwZV9pc19odGFiKGVudW0gYnBmX21hcF90eXBlIHR5cGUpXG4tLVxua2VybmVsL2JwZi9tYXBfaW5fbWFwLmMtMTgtXG5rZXJuZWwvYnBmL21hcF9pbl9tYXAuYzoxOTpzdHJ1Y3QgYnBmX21hcCAqYnBmX21hcF9tZXRhX2FsbG9jKGludCBpbm5lcl9tYXBfdWZkKVxua2VybmVsL2JwZi9tYXBfaW5fbWFwLmMtMjAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTk2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEhhc2ggVGFibGUgT3BlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIG91ciBrZXkgZm9jdXMgYXJlYXMuIEkgbmVlZCB0byBsaXN0IGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gVGhpbmtpbmcgaXQgdGhyb3VnaCwgdGhlIGZ1bmN0aW9ucyB0aGF0IGp1bXAgb3V0IGF0IG1lIGFzIG1vc3QgcmVsZXZhbnQgYXJlOiBgaHRhYl9tYXBfYWxsb2NgLCBvYnZpb3VzbHk7IHRoZW4gaG93IHdlIHVwZGF0ZSBhbmQgZGVsZXRlIGVsZW1lbnRzIHdpdGggYGh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbWAsIGFuZCBgaHRhYl9tYXBfZGVsZXRlX2VsZW1gOyBhbmQsIG9mIGNvdXJzZSwgbG9va3VwcyBhbmQgaXRlcmF0aW9ucyB3aXRoIGBodGFiX21hcF9sb29rdXBfZWxlbWAgYW5kIGBodGFiX21hcF9nZXRfbmV4dF9rZXlgLiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aG9zZSBmdW5jdGlvbnMgdGhhdCBhcmUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb25zIGxpa2UgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAgYW5kIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciBgYnBmX21hcF9tZXRhX2FsbG9jYC4KCk5vdywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgaHRhYl9tYXBfYWxsb2NgIGlzIGFjdHVhbGx5ICpkZWZpbmVkKiB3aXRoaW4gdGhpcyBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHRhYl9tYXBfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYz00NTA9c3RhdGljIGludCBhbGxvY19leHRyYV9lbGVtcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtNDczLS8qIENhbGxlZCBmcm9tIHN5c2NhbGwgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjQ3NDpzdGF0aWMgaW50IGh0YWJfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL2JwZi9oYXNodGFiLmMtNDc1LXtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz01OTE9c3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTU5OS1cdCAqIFdlIG11c3Qgc2V0IHRoZSBkdG9yIHVzaW5nIHRoaXMgY2FsbGJhY2ssIGFzIG1hcCYjMzk7cyBCVEYgcmVjb3JkIGlzIG5vdFxua2VybmVsL2JwZi9oYXNodGFiLmM6NjAwOlx0ICogcG9wdWxhdGVkIGluIGh0YWJfbWFwX2FsbG9jKCksIHNvIGl0IHdpbGwgYWx3YXlzIGFwcGVhciBhcyBOVUxMLlxua2VybmVsL2JwZi9oYXNodGFiLmMtNjAxLVx0ICovXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtNjA3LVxua2VybmVsL2JwZi9oYXNodGFiLmM6NjA4OnN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy02MDkte1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI0NTY9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbWFwX29wcyA9IHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0NTctXHQubWFwX21ldGFfZXF1YWwgPSBicGZfbWFwX21ldGFfZXF1YWwsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDU4Olx0Lm1hcF9hbGxvY19jaGVjayA9IGh0YWJfbWFwX2FsbG9jX2NoZWNrLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjQ1OTpcdC5tYXBfYWxsb2MgPSBodGFiX21hcF9hbGxvYyxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0NjAtXHQubWFwX2ZyZWUgPSBodGFiX21hcF9mcmVlLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI0Nzg9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbHJ1X21hcF9vcHMgPSB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDc5LVx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjQ4MDpcdC5tYXBfYWxsb2NfY2hlY2sgPSBodGFiX21hcF9hbGxvY19jaGVjayxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI0ODE6XHQubWFwX2FsbG9jID0gaHRhYl9tYXBfYWxsb2MsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDgyLVx0Lm1hcF9mcmVlID0gaHRhYl9tYXBfZnJlZSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNjY2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX3BlcmNwdV9tYXBfb3BzID0ge1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjY2Ny1cdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI2Njg6XHQubWFwX2FsbG9jX2NoZWNrID0gaHRhYl9tYXBfYWxsb2NfY2hlY2ssXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNjY5Olx0Lm1hcF9hbGxvYyA9IGh0YWJfbWFwX2FsbG9jLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjY3MC1cdC5tYXBfZnJlZSA9IGh0YWJfbWFwX2ZyZWUsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjY4OD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9scnVfcGVyY3B1X21hcF9vcHMgPSB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNjg5LVx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjY5MDpcdC5tYXBfYWxsb2NfY2hlY2sgPSBodGFiX21hcF9hbGxvY19jaGVjayxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI2OTE6XHQubWFwX2FsbG9jID0gaHRhYl9tYXBfYWxsb2MsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNjkyLVx0Lm1hcF9mcmVlID0gaHRhYl9tYXBfZnJlZSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzA4LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjcwOTpzdGF0aWMgaW50IGZkX2h0YWJfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjcxMC17XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjcxMi1cdFx0cmV0dXJuIC1FSU5WQUw7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzEzOlx0cmV0dXJuIGh0YWJfbWFwX2FsbG9jX2NoZWNrKGF0dHIpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjcxNC19XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjc4MT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfb2ZfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3ODgtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzg5Olx0bWFwID0gaHRhYl9tYXBfYWxsb2MoYXR0cik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzkwLVx0aWYgKElTX0VSUihtYXApKSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjgzNT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9vZl9tYXBzX21hcF9vcHMgPSB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyODM2Olx0Lm1hcF9hbGxvY19jaGVjayA9IGZkX2h0YWJfbWFwX2FsbG9jX2NoZWNrLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjgzNy1cdC5tYXBfYWxsb2MgPSBodGFiX29mX21hcF9hbGxvYyxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yODkzPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcmh0YWJfcGFyYW1zX2xvbmcgPSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkwMC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5MDE6c3RhdGljIHN0cnVjdCBicGZfbWFwICpyaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTAyLXtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTUwLVxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk1MTpzdGF0aWMgaW50IHJodGFiX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NTIte1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NzAtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTcxOlx0cmV0dXJuIGh0YWJfbWFwX2FsbG9jX2NoZWNrKGF0dHIpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjk3Mi19XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzYyMT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM2MjItXHQubWFwX21ldGFfZXF1YWwgPSBicGZfbWFwX21ldGFfZXF1YWwsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNjIzOlx0Lm1hcF9hbGxvY19jaGVjayA9IHJodGFiX21hcF9hbGxvY19jaGVjayxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM2MjQ6XHQubWFwX2FsbG9jID0gcmh0YWJfbWFwX2FsbG9jLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzYyNS1cdC5tYXBfZnJlZSA9IHJodGFiX21hcF9mcmVlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjc1NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OgoKKipSZWZsZWN0aW5nIG9uIGEgQlBGIEhhc2ggTWFwIEltcGxlbWVudGF0aW9uIFBhdGNoKioKCkFscmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBCUEYgaGFzaCBtYXAgaW1wbGVtZW50YXRpb24uIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBjb3VwbGUgb2YgdGhpbmdzLiBGaXJzdCwgdGhpcyBpcyBhIGNvcmUgcGllY2Ugb2YgQlBGIGluZnJhc3RydWN0dXJlLCBtZWFuaW5nIGFueSBjaGFuZ2VzIGhlcmUgaGF2ZSB0aGUgcG90ZW50aWFsIGZvciBzaWduaWZpY2FudCBpbXBhY3Qgb24gcGVyZm9ybWFuY2UsIHN0YWJpbGl0eSwgYW5kIGV2ZW4gc2VjdXJpdHkgYWNyb3NzIGEgd2lkZSByYW5nZSBvZiBCUEYtYmFzZWQgYXBwbGljYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBtb2RpZmljYXRpb24gZGVlcGx5LiBTZWNvbmQsIEkgbmVlZCB0byBrZWVwIHRoZSBncmVhdGVyIGNvbnRleHQgb2YgdGhlIHdob2xlIHN5c3RlbSBpbiBtaW5kLCBob3cgdGhpcyBtb2RpZmljYXRpb24gd2lsbCBhZmZlY3QgYW5kIGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4KClRoZSBtZW50aW9uIG9mIGBCUEZfU1lTQ0FMTGAgbWFrZXMgbXkgZXllYnJvd3MgcmFpc2UgYSBiaXQuIFRoaXMgbGlrZWx5IGluZGljYXRlcyB0aGF0IHRoZSBwYXRjaCBpcyB0b3VjaGluZyB0aGUgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIHJlbGF0ZWQgdG8gQlBGLCB3aGljaCBpcyBhbiBhcmVhIHRoYXQmIzM5O3MgYmVlbiB1bmRlciBzY3J1dGlueS4gVGhpcyBjb3VsZCBtZWFuIGNoYW5nZXMgdG8gaG93IEJQRiBwcm9ncmFtcyBhcmUgbG9hZGVkLCB2ZXJpZmllZCwgb3IgZXhlY3V0ZWQuIEdpdmVuIHRoYXQgdGhlIGtlcm5lbCBhbmQgQlBGIHN1YnN5c3RlbSBpcyBjb25zdGFudGx5IGV2b2x2aW5nLCBJIG5lZWQgdG8ga2VlcCB0aGUgYmlnZ2VyIHBpY3R1cmUgaW4gbWluZC4KCk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIGFuZCBkb3VibGUtY2hlY2sgaXRzIHN0YXR1cy4gSSBuZWVkIHRvIGtub3cgZXhhY3RseSBob3cgaXQgaXMgY29uZmlndXJlZCBhcyB0aGUgYEtjb25maWdgIGZpbGVzIHdpbGwgZ2l2ZSBtZSBpbmZvcm1hdGlvbiBhYm91dCBkZXBlbmRlbmN5IGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBjdXJyZW50IHN5c3RlbS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjcml0aWNhbCBiYXNlbGluZSBmb3IgYXNzZXNzaW5nIHRoZSBwYXRjaCYjMzk7cyBvdmVyYWxsIGltcGFjdCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIHdpZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyMzIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkFkZGluZyBgQlBGX1NZU0NBTExgIHRvIEVuYWJsZUNvbmZpZ3MqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBhZGRpbmcgYEJQRl9TWVNDQUxMYCB0byBgRW5hYmxlQ29uZmlnc2AuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgc28gZmFyLiBKdXN0IG5lZWQgdG8gaW50ZWdyYXRlIHRoYXQgZmxhZy4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhpcyBhZGRpdGlvbiBkb2VzbiYjMzk7dCBjcmVhdGUgYW55IGNvbmZsaWN0cyBvciBlZGdlIGNhc2VzIEkmIzM5O20gbm90IGltbWVkaWF0ZWx5IHRoaW5raW5nIG9mLCBlc3BlY2lhbGx5IHdpdGggZXhpc3RpbmcgY29uZmlndXJhdGlvbnMuIEFsd2F5cyB3b3J0aCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBhdm9pZCB1bmV4cGVjdGVkIGJlaGF2aW9yIGRvd24gdGhlIGxpbmUuCgpOb3csIGxldCBtZSBzZWUgd2hpY2ggZmlsZXMgYXJlIGJlaW5nIHRvdWNoZWQgYnkgdGhpcyBjaGFuZ2UuIEFoYSwgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYW5kIGBrZXJuZWwvYnBmL21hcF9pbl9tYXAuY2AuIFRob3NlIGFyZSAqZGVmaW5pdGVseSogaW50ZXJlc3RpbmcgYXJlYXMuIFRob3NlIGZpbGVzIGFyZSBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZCwgd2hpY2ggbWVhbnMgdGhlIGZ1bmN0aW9ucyBpbiB0aGVzZSBmaWxlcyBhcmUgb25seSBhdmFpbGFibGUgaWYgdGhlIGNvbmZpZyBpcyBzZXQuIENvbnNpZGVyaW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGludGVyYWN0aW9ucyB0aG9zZSBmaWxlcyBlbmFibGUsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBjb21mb3J0YWJsZSB3aXRoIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIEkgd291bGQgbGlrZSB0byBkbyBzb21lIGFkZGl0aW9uYWwgY29kZSByZXZpZXdzIHdoZW4gdGltZSBwZXJtaXRzIHRvIHByZXZlbnQgcmVncmVzc2lvbnMgYW5kIHNlY3VyaXR5IGlzc3VlcyB0aGF0IG1pZ2h0IGJlIGludHJvZHVjZWQgYnkgdGhpcyBjb25maWcgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIGRvIGEgZGVlcCBkaXZlIHRoZXJlIGFzIHBhcnQgb2YgbXkgZHVlIGRpbGlnZW5jZS4gT2theSwgdGhhdCYjMzk7cyB0aGUgc2NvcGUgb2YgdGhlIGltbWVkaWF0ZSBjaGFuZ2UgdW5kZXJzdG9vZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgYnVpbGQgc3lzdGVtIGhhbmRsZXMgdGhlIGRlcGVuZGVuY3kgY29ycmVjdGx5Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhc2h0YWJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODE3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogODI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEJQRiBIYXNoIE1hcCBFbGVtZW50IFN0cnVjdHVyZSBDaGFuZ2VzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUga2V5IGhlcmUgaXMgZGVmaW5pdGVseSBgQ09ORklHX0JQRl9TWVNDQUxMYCwgdGhhdCYjMzk7cyB0aGUgbWFpbiBlbmFibGVyLiBMZXQmIzM5O3MgZ2V0IHRoZSBmb2N1cyByaWdodC4gU2luY2UgdGhpcyBwYXRjaCBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgaG93IGhhc2ggbWFwIGVsZW1lbnRzIGFyZSBzdHJ1Y3R1cmVkIGludGVybmFsbHksIHdlIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aG9zZSBlbGVtZW50cy4gVGhlIG9uZXMgdGhhdCBkbyB0aGUgYWxsb2NhdGluZywgdXBkYXRpbmcsIGxvb2tpbmcgdXAsIGFuZCBkZWxldGluZy4gVGhvc2UgYXJlIHRoZSBoaWdoLXZhbHVlIHRhcmdldHMgZm9yIGZ1enppbmcuCgpNeSBpbml0aWFsIGxpc3QgaW5jbHVkZXM6CgoqICAgYGh0YWJfbWFwX2FsbG9jYAoqICAgYGh0YWJfbWFwX3VwZGF0ZV9lbGVtYAoqICAgYGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbWAKKiAgIGBodGFiX21hcF9kZWxldGVfZWxlbWAKKiAgIGBodGFiX2xydV9tYXBfZGVsZXRlX2VsZW1gCiogICBgaHRhYl9tYXBfbG9va3VwX2VsZW1gCiogICBgaHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtYAoqICAgYGh0YWJfcGVyY3B1X21hcF9sb29rdXBfZWxlbWAKKiAgIGBodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtYAoqICAgYGh0YWJfbWFwX2dldF9uZXh0X2tleWAKKiAgIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gCiogICBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAKKiAgIGBicGZfbWFwX21ldGFfYWxsb2NgCiogICBgYnBmX2h0YWJfbWFwX21ldGFfaW5pdGAKCldhaXQgYSBzZWNvbmQsIGBodGFiX21hcF9hbGxvY2AgaXMgc3RhdGljLCByaWdodD8gQnV0IGl0JiMzOTtzIHBhcnQgb2YgdGhlIG1hcCBvcGVyYXRpb25zIGNhbGxiYWNrIHN0cnVjdHVyZS4gVGhhdCBtZWFucyB0aGUgY29tcGlsZXIgd29uJiMzOTt0IG5lY2Vzc2FyaWx5IGlubGluZSBpdCwgYW5kIHdlICpjYW4qIHRhcmdldCBpdCwgYW5kIHRoZSBzYW1lIGdvZXMgZm9yIG90aGVyIHN0YXRpYyBmdW5jdGlvbnMgd2hpY2ggYXJlIGFzc2lnbmVkIGFzIGBicGZfbWFwX29wc2AgY2FsbGJhY2tzLiBQZXJmZWN0LiBHb29kIGNhdGNoLiBMZXQmIzM5O3MgcmVmaW5lIHRoZSBsaXN0LiBTbywgaW5jbHVkaW5nIHRob3NlLCBsZXQmIzM5O3MgYWxzbyBhZGQgYGJwZl9odGFiX21hcF9tZXRhX2luaXRgIGFuZCBgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZWAgc2luY2UgdGhleSYjMzk7cmUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHZlcmlmeSB0aG9zZSBmdW5jdGlvbiBuYW1lcyBvbmUgbGFzdCB0aW1lOgoKKiAgIGBodGFiX21hcF9hbGxvY2AKKiAgIGBodGFiX21hcF91cGRhdGVfZWxlbWAKKiAgIGBodGFiX2xydV9tYXBfdXBkYXRlX2VsZW1gCiogICBgaHRhYl9tYXBfZGVsZXRlX2VsZW1gCiogICBgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtYAoqICAgYGh0YWJfbWFwX2xvb2t1cF9lbGVtYAoqICAgYGh0YWJfbHJ1X21hcF9sb29rdXBfZWxlbWAKKiAgIGBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW1gCiogICBgaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfZWxlbWAKKiAgIGBodGFiX21hcF9nZXRfbmV4dF9rZXlgCiogICBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYAoqICAgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgCiogICBgYnBmX21hcF9tZXRhX2FsbG9jYAoqICAgYGJwZl9odGFiX21hcF9tZXRhX2luaXRgCiogICBgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZWAKCkFscmlnaHQuIENvbmZpZ3VyYXRpb24td2lzZSwgaXQmIzM5O3MganVzdCBgQlBGX1NZU0NBTExgLCBnb29kLgoKTm93LCB0aGUgcmVhc29uaW5nOiBUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCBvcHRpbWl6aW5nIGhhc2ggbWFwIGVsZW1lbnQgbWVtb3J5IGxheW91dC4gU3BlY2lmaWNhbGx5LCBjb25kaXRpb25hbGx5IHJlbW92aW5nIHRoZSBoYXNoIHZhbHVlIGZpZWxkIGJhc2VkIG9uIHRoZSBrZXkgc2l6ZSBhbmQgdGhlIG1hcCB0eXBlLiBJdOKAmXMgYWxzbyBpbnRyb2R1Y2luZyBga2V5X29mZnNldGAgZm9yIGR5bmFtaWMga2V5L3ZhbHVlIG9mZnNldCBjYWxjdWxhdGlvbnMuIFRoaXMgY2hhbmdlIGlzIGNvcmUgdG8gdGhlIEJQRiBoYXNoIG1hcCBpbXBsZW1lbnRhdGlvbi4gVGhlcmVmb3JlLCBmdXp6aW5nIGlzIGNyaXRpY2FsIHRvIGV4cG9zZSBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0aWVzIG9yIGxvZ2ljYWwgZXJyb3JzIHJlc3VsdGluZyBmcm9tIHRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UuIE5lZWQgdG8gY2hlY2sgYGJwZl9odGFiX21hcF9tZXRhX2luaXRgIGFuZCBgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZWAgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaHRhYl9tYXBfbWV0YV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oYXNodGFiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oYXNodGFiLmM9MzY0Mz1zaXplX3QgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSh2b2lkKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM2NDctXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNjQ4OnZvaWQgYnBmX2h0YWJfbWFwX21ldGFfaW5pdChzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwX21ldGEsIHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXApXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNjQ5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk2NTYKCQkJCQkJCW91dHB1dDogMzM0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGVjdXRpbmcgdGhlIFByb2NlZHVyZSoqCgpPa2F5LCB0aGUgcHJlbGltaW5hcnkgY2hlY2tzIGFsbCBzZWVtIHNvdW5kLiBUaGUgaW50ZXJuYWwgc3RhdGUgYXBwZWFycyBhcyBleHBlY3RlZCwgYW5kIHRoZSBpbnB1dCBkYXRhIHZhbGlkYXRlcyBhZ2FpbnN0IG15IGtub3duIGNvbnN0cmFpbnRzLiBObyByZWQgZmxhZ3MgYXJlIHdhdmluZy4gSSYjMzk7bSBzYXRpc2ZpZWQgdGhhdCBwcm9jZWVkaW5nIHdpdGggdGhlIGNvcmUgZXhlY3V0aW9uIGlzIHdhcnJhbnRlZC4KClRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gVGhpcyBmdW5jdGlvbiBlbmNhcHN1bGF0ZXMgdGhlIGZpbmFsIHN0YWdlIG9mIHRoaXMgcHJvY2VzcyAtIHRoZSBkZWZpbml0aXZlIGFjdGlvbiB3aGljaCBjb25maXJtcyB0aGUgcHJvY2VzcyBleGVjdXRpb24gaXMgY29tcGxldGUuIEkmIzM5O20gY29uZmlkZW50IHRoYXQgaW52b2tpbmcgYHNldC1yZXN1bHRzYCBhdCB0aGlzIGp1bmN0dXJlIHdpbGwgeWllbGQgdGhlIGNvcnJlY3QgYW5kIGRlc2lyZWQgb3V0cHV0LCBlZmZlY3RpdmVseSBjb21wbGV0aW5nIHRoaXMgcGFydGljdWxhciBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodGFiX21hcF9hbGxvYyYjMzQ7LAogICAgJiMzNDtodGFiX21hcF91cGRhdGVfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9tYXBfdXBkYXRlX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2xvb2t1cF9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X21hcF9sb29rdXBfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9nZXRfbmV4dF9rZXkmIzM0OywKICAgICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtJiMzNDssCiAgICAmIzM0O19faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7YnBmX21hcF9tZXRhX2FsbG9jJiMzNDssCiAgICAmIzM0O2JwZl9odGFiX21hcF9tZXRhX2luaXQmIzM0OywKICAgICYjMzQ7YnBmX2h0YWJfbWFwX21ldGFfc2l6ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgdGhlIG1lbW9yeSBsYXlvdXQgb2YgQlBGIGhhc2ggbWFwIGVsZW1lbnRzIGJ5IGNvbmRpdGlvbmFsbHkgcmVtb3ZpbmcgdGhlIGhhc2ggdmFsdWUgZmllbGQgd2hlbiBpdCYjMzk7cyBub3QgbmVlZGVkLiBJdCBpbnRyb2R1Y2VzIGBrZXlfb2Zmc2V0YCB0byBkeW5hbWljYWxseSBjb21wdXRlIHRoZSBvZmZzZXQgb2YgdGhlIGtleSBhbmQgdmFsdWUgd2l0aGluIHRoZSBlbGVtZW50LiBJdCBhbHNvIG1vZGlmaWVzIGBtYXBfaW5fbWFwLmNgIHRvIHByb3BhZ2F0ZSB0aGlzIG9mZnNldCBmb3IgaW5uZXIgbWFwcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBoYXNoIG1hcCBpbXBsZW1lbnRhdGlvbiBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgZXJyb3JzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h0YWJfbWFwX2FsbG9jJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X21hcF91cGRhdGVfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9tYXBfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfcGVyY3B1X21hcF9sb29rdXBfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2dldF9uZXh0X2tleSYjMzQ7LAogICAgJiMzNDtfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7LAogICAgJiMzNDticGZfbWFwX21ldGFfYWxsb2MmIzM0OywKICAgICYjMzQ7YnBmX2h0YWJfbWFwX21ldGFfaW5pdCYjMzQ7LAogICAgJiMzNDticGZfaHRhYl9tYXBfbWV0YV9zaXplJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyB0aGUgbWVtb3J5IGxheW91dCBvZiBCUEYgaGFzaCBtYXAgZWxlbWVudHMgYnkgY29uZGl0aW9uYWxseSByZW1vdmluZyB0aGUgaGFzaCB2YWx1ZSBmaWVsZCB3aGVuIGl0JiMzOTtzIG5vdCBuZWVkZWQuIEl0IGludHJvZHVjZXMgYGtleV9vZmZzZXRgIHRvIGR5bmFtaWNhbGx5IGNvbXB1dGUgdGhlIG9mZnNldCBvZiB0aGUga2V5IGFuZCB2YWx1ZSB3aXRoaW4gdGhlIGVsZW1lbnQuIEl0IGFsc28gbW9kaWZpZXMgYG1hcF9pbl9tYXAuY2AgdG8gcHJvcGFnYXRlIHRoaXMgb2Zmc2V0IGZvciBpbm5lciBtYXBzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIGhhc2ggbWFwIGltcGxlbWVudGF0aW9uIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMDo0MzozMi41MzEyMTkyOTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODYwMzIzNDMzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh0YWJfbWFwX2FsbG9jXCIsXG4gICAgXCJodGFiX21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtXCIsXG4gICAgXCJodGFiX21hcF9kZWxldGVfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtXCIsXG4gICAgXCJodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW1cIixcbiAgICBcImh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW1cIixcbiAgICBcImh0YWJfbWFwX2dldF9uZXh0X2tleVwiLFxuICAgIFwiX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJicGZfbWFwX21ldGFfYWxsb2NcIixcbiAgICBcImJwZl9odGFiX21hcF9tZXRhX2luaXRcIixcbiAgICBcImJwZl9odGFiX21hcF9tZXRhX3NpemVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgdGhlIG1lbW9yeSBsYXlvdXQgb2YgQlBGIGhhc2ggbWFwIGVsZW1lbnRzIGJ5IGNvbmRpdGlvbmFsbHkgcmVtb3ZpbmcgdGhlIGhhc2ggdmFsdWUgZmllbGQgd2hlbiBpdCdzIG5vdCBuZWVkZWQuIEl0IGludHJvZHVjZXMgYGtleV9vZmZzZXRgIHRvIGR5bmFtaWNhbGx5IGNvbXB1dGUgdGhlIG9mZnNldCBvZiB0aGUga2V5IGFuZCB2YWx1ZSB3aXRoaW4gdGhlIGVsZW1lbnQuIEl0IGFsc28gbW9kaWZpZXMgYG1hcF9pbl9tYXAuY2AgdG8gcHJvcGFnYXRlIHRoaXMgb2Zmc2V0IGZvciBpbm5lciBtYXBzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIGhhc2ggbWFwIGltcGxlbWVudGF0aW9uIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEwOjQzOjMyLjUzMTIyNTc4NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4ODI5MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWI3Y2I2NjdmZjI3MDRiNmI5ODU4ZjlkNmIzMDFhNTU0ZWYyZWIwM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDEwOjQzOjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcXG5pbmRleCA5ZjM5NGUxYWEyZTg1Li44MmIxOWJkNTQzMTA5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXFxuKysrIGIva2VybmVsL2JwZi9oYXNodGFiLmNcXG5AQCAtMTAwLDEzICsxMDAsMTYgQEAgc3RydWN0IGJwZl9odGFiIHtcXG4gXFx0c3RydWN0IHBlcmNwdV9jb3VudGVyIHBjb3VudDtcXG4gXFx0YXRvbWljX3QgY291bnQ7XFxuIFxcdGJvb2wgdXNlX3BlcmNwdV9jb3VudGVyO1xcbitcXHRib29sIGhhc19oYXNoO1xcbiBcXHR1MzIgbl9idWNrZXRzO1xcdC8qIG51bWJlciBvZiBoYXNoIGJ1Y2tldHMgKi9cXG4gXFx0dTMyIGVsZW1fc2l6ZTtcXHQvKiBzaXplIG9mIGVhY2ggZWxlbWVudCBpbiBieXRlcyAqL1xcbitcXHR1MzIga2V5X29mZnNldDtcXHQvKiBvZmZzZXQgb2Yga2V5IGluIGJ5dGVzICovXFxuIFxcdHUzMiBoYXNocm5kO1xcbiB9O1xcbiBcXG4gLyogZWFjaCBodGFiIGVsZW1lbnQgaXMgc3RydWN0IGh0YWJfZWxlbSArIGtleSArIHZhbHVlICovXFxuLXN0cnVjdCBodGFiX2VsZW0ge1xcbitzdHJ1Y3QgaHRhYl9lbGVtO1xcbitzdHJ1Y3QgaHRhYl9ub2RlIHtcXG4gXFx0dW5pb24ge1xcbiBcXHRcXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSBoYXNoX25vZGU7XFxuIFxcdFxcdHN0cnVjdCB7XFxuQEAgLTExNywxOCArMTIwLDMyIEBAIHN0cnVjdCBodGFiX2VsZW0ge1xcbiBcXHRcXHRcXHR9O1xcbiBcXHRcXHR9O1xcbiBcXHR9O1xcbi1cXHR1bmlvbiB7XFxuLVxcdFxcdC8qIHBvaW50ZXIgdG8gcGVyLWNwdSBwb2ludGVyICovXFxuLVxcdFxcdHZvaWQgKnB0cl90b19wcHRyO1xcbi1cXHRcXHRzdHJ1Y3QgYnBmX2xydV9ub2RlIGxydV9ub2RlO1xcbi1cXHR9O1xcbi1cXHR1MzIgaGFzaDtcXG4tXFx0Y2hhciBrZXlbXSBfX2FsaWduZWQoOCk7XFxuK307XFxuK1xcbitzdHJ1Y3QgaHRhYl9lbGVtIHtcXG4rXFx0c3RydWN0IGh0YWJfbm9kZSBub2RlO1xcbitcXHR1OCBkYXRhW10gX19hbGlnbmVkKDgpO1xcbit9O1xcbitcXG4rc3RydWN0IGh0YWJfZWxlbV9scnUge1xcbitcXHRzdHJ1Y3QgaHRhYl9ub2RlIG5vZGU7XFxuK1xcdHN0cnVjdCBicGZfbHJ1X25vZGUgbHJ1X25vZGU7XFxuK1xcdHU4IGRhdGFbXSBfX2FsaWduZWQoOCk7XFxuK307XFxuK1xcbisvKiBPbmx5IGZvciBub24tcHJlYWxsb2NhdGVkIFBDUFUgbWFwcy4gUHJlYWxsb2NhdGVkIFBDUFUgbWFwcyBkb24ndCBuZWVkXFxuKyAqIHB0cl90b19wcHRyLCBhbmQgdXNlIGh0YWJfZWxlbS5cXG4rICovXFxuK3N0cnVjdCBodGFiX2VsZW1fcGNwdSB7XFxuK1xcdHN0cnVjdCBodGFiX25vZGUgbm9kZTtcXG4rXFx0dm9pZCAqcHRyX3RvX3BwdHI7XFxuK1xcdHU4IGRhdGFbXSBfX2FsaWduZWQoOCk7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgaHRhYl9idGZfcmVjb3JkIHtcXG4gXFx0c3RydWN0IGJ0Zl9yZWNvcmQgKnJlY29yZDtcXG4gXFx0dTMyIGtleV9zaXplO1xcbitcXHR1MzIga2V5X29mZnNldDtcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBodGFiX2lzX3ByZWFsbG9jKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG5AQCAtMTM2LDYgKzE1MywyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaHRhYl9pc19wcmVhbGxvYyhjb25zdCBzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuIFxcdHJldHVybiAhKGh0YWItXFx1MDAzZW1hcC5tYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9OT19QUkVBTExPQyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9scnVfbm9kZSAqaHRhYl9lbGVtX2xydV9ub2RlKHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuK3tcXG4rXFx0cmV0dXJuIFxcdTAwMjYoKHN0cnVjdCBodGFiX2VsZW1fbHJ1ICopbCktXFx1MDAzZWxydV9ub2RlO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV9nZXRfcHRyX3RvX3BwdHIoc3RydWN0IGh0YWJfZWxlbSAqbClcXG4re1xcbitcXHRyZXR1cm4gKChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS1cXHUwMDNlcHRyX3RvX3BwdHI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBodGFiX2VsZW1fc2V0X3B0cl90b19wcHRyKHN0cnVjdCBodGFiX2VsZW0gKmwsIHZvaWQgKnB0cilcXG4re1xcbitcXHQoKHN0cnVjdCBodGFiX2VsZW1fcGNwdSAqKWwpLVxcdTAwM2VwdHJfdG9fcHB0ciA9IHB0cjtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgaHRhYl9pbml0X2J1Y2tldHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbkBAIC0xODMsMjUgKzIxNSwzMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfZmRfaHRhYihjb25zdCBzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuIFxcdHJldHVybiBodGFiLVxcdTAwM2VtYXAubWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0hBU0hfT0ZfTUFQUztcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkICpodGFiX2VsZW1fdmFsdWUoc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGtleV9zaXplKVxcbitzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV9rZXkoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxcbit7XFxuK1xcdHJldHVybiAodm9pZCAqKWwgKyBodGFiLVxcdTAwM2VrZXlfb2Zmc2V0O1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV92YWx1ZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuIHtcXG4tXFx0cmV0dXJuIGwtXFx1MDAzZWtleSArIHJvdW5kX3VwKGtleV9zaXplLCA4KTtcXG4rXFx0cmV0dXJuIGh0YWJfZWxlbV9rZXkoaHRhYiwgbCkgKyByb3VuZF91cChodGFiLVxcdTAwM2VtYXAua2V5X3NpemUsIDgpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9wdHIoc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGtleV9zaXplLFxcbitzdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9wdHIoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsLFxcbiBcXHRcXHRcXHRcXHQgICAgIHZvaWQgX19wZXJjcHUgKnBwdHIpXFxuIHtcXG4tXFx0Kih2b2lkIF9fcGVyY3B1ICoqKWh0YWJfZWxlbV92YWx1ZShsLCBrZXlfc2l6ZSkgPSBwcHRyO1xcbitcXHQqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpID0gcHB0cjtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIF9fcGVyY3B1ICpodGFiX2VsZW1fZ2V0X3B0cihzdHJ1Y3QgaHRhYl9lbGVtICpsLCB1MzIga2V5X3NpemUpXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BlcmNwdSAqaHRhYl9lbGVtX2dldF9wdHIoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxcbiB7XFxuLVxcdHJldHVybiAqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGwsIGtleV9zaXplKTtcXG4rXFx0cmV0dXJuICoodm9pZCBfX3BlcmNwdSAqKilodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkICpmZF9odGFiX21hcF9nZXRfcHRyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuK3N0YXRpYyB2b2lkICpmZF9odGFiX21hcF9nZXRfcHRyKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcXG4ge1xcbi1cXHRyZXR1cm4gKih2b2lkICoqKWh0YWJfZWxlbV92YWx1ZShsLCBtYXAtXFx1MDAzZWtleV9zaXplKTtcXG4rXFx0cmV0dXJuICoodm9pZCAqKilodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpnZXRfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgaW50IGkpXFxuQEAgLTIwOSw2ICsyNDYsMzMgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmdldF9odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCBpbnQgaSlcXG4gXFx0cmV0dXJuIChzdHJ1Y3QgaHRhYl9lbGVtICopIChodGFiLVxcdTAwM2VlbGVtcyArIGkgKiAodTY0KWh0YWItXFx1MDAzZWVsZW1fc2l6ZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBodGFiX2hhc19oYXNoKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4re1xcbitcXHRyZXR1cm4gaHRhYi1cXHUwMDNlaGFzX2hhc2g7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdTMyIGh0YWJfZWxlbV9oYXNoKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcXG4re1xcbitcXHRpZiAoaHRhYl9pc19scnUoaHRhYikpXFxuK1xcdFxcdHJldHVybiAqKHUzMiAqKSgoc3RydWN0IGh0YWJfZWxlbV9scnUgKilsKS1cXHUwMDNlZGF0YTtcXG4rXFx0ZWxzZSBpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikgXFx1MDAyNlxcdTAwMjYgIWh0YWJfaXNfcHJlYWxsb2MoaHRhYikpXFxuK1xcdFxcdHJldHVybiAqKHUzMiAqKSgoc3RydWN0IGh0YWJfZWxlbV9wY3B1ICopbCktXFx1MDAzZWRhdGE7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0dXJuICoodTMyICopbC1cXHUwMDNlZGF0YTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfaGFzaChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwsIHUzMiBoYXNoKVxcbit7XFxuK1xcdGlmICghaHRhYl9oYXNfaGFzaChodGFiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAoaHRhYl9pc19scnUoaHRhYikpXFxuK1xcdFxcdCoodTMyICopKChzdHJ1Y3QgaHRhYl9lbGVtX2xydSAqKWwpLVxcdTAwM2VkYXRhID0gaGFzaDtcXG4rXFx0ZWxzZSBpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikgXFx1MDAyNlxcdTAwMjYgIWh0YWJfaXNfcHJlYWxsb2MoaHRhYikpXFxuK1xcdFxcdCoodTMyICopKChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS1cXHUwMDNlZGF0YSA9IGhhc2g7XFxuK1xcdGVsc2VcXG4rXFx0XFx0Kih1MzIgKilsLVxcdTAwM2VkYXRhID0gaGFzaDtcXG4rfVxcbitcXG4gLyogQm90aCBwZXJjcHUgYW5kIGZkIGh0YWIgc3VwcG9ydCBpbi1wbGFjZSB1cGRhdGUsIHNvIG5vIG5lZWQgZm9yXFxuICAqIGV4dHJhIGVsZW0uIExSVSBpdHNlbGYgY2FuIHJlbW92ZSB0aGUgbGVhc3QgdXNlZCBlbGVtZW50LCBzb1xcbiAgKiB0aGVyZSBpcyBubyBuZWVkIGZvciBhbiBleHRyYSBlbGVtIGR1cmluZyBtYXBfdXBkYXRlLlxcbkBAIC0yMzEsNyArMjk1LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuIFxcbiBcXHRcXHRlbGVtID0gZ2V0X2h0YWJfZWxlbShodGFiLCBpKTtcXG4gXFx0XFx0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgZWxlbSkpO1xcbiBcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFx0fVxcbiB9XFxuQEAgLTI1NCw3ICszMTgsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2ZyZWVfcHJlYWxsb2NlZF9maWVsZHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxcbiBcXG4gXFx0XFx0ZWxlbSA9IGdldF9odGFiX2VsZW0oaHRhYiwgaSk7XFxuIFxcdFxcdGlmIChodGFiX2lzX3BlcmNwdShodGFiKSkge1xcbi1cXHRcXHRcXHR2b2lkIF9fcGVyY3B1ICpwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZWxlbSwgaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplKTtcXG4rXFx0XFx0XFx0dm9pZCBfX3BlcmNwdSAqcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGVsZW0pO1xcbiBcXHRcXHRcXHRpbnQgY3B1O1xcbiBcXG4gXFx0XFx0XFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbkBAIC0yNjMsNyArMzI3LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRicGZfb2JqX2ZyZWVfZmllbGRzKGh0YWItXFx1MDAzZW1hcC5yZWNvcmQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBodGFiX2VsZW1fdmFsdWUoZWxlbSwgaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplKSk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgZWxlbSkpO1xcbiBcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5AQCAtMjgwLDggKzM0NCw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZnJlZV9lbGVtcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBodGFiLVxcdTAwM2VtYXAubWF4X2VudHJpZXM7IGkrKykge1xcbiBcXHRcXHR2b2lkIF9fcGVyY3B1ICpwcHRyO1xcbiBcXG4tXFx0XFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGdldF9odGFiX2VsZW0oaHRhYiwgaSksXFxuLVxcdFxcdFxcdFxcdFxcdCBodGFiLVxcdTAwM2VtYXAua2V5X3NpemUpO1xcbitcXHRcXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgZ2V0X2h0YWJfZWxlbShodGFiLCBpKSk7XFxuIFxcdFxcdGZyZWVfcGVyY3B1KHBwdHIpO1xcbiBcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFx0fVxcbkBAIC0zMDgsOCArMzcxLDggQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKnByZWFsbG9jX2xydV9wb3Aoc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksXFxuIFxcbiBcXHRpZiAobm9kZSkge1xcbiBcXHRcXHRicGZfbWFwX2luY19lbGVtX2NvdW50KFxcdTAwMjZodGFiLVxcdTAwM2VtYXApO1xcbi1cXHRcXHRsID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKTtcXG4tXFx0XFx0bWVtY3B5KGwtXFx1MDAzZWtleSwga2V5LCBodGFiLVxcdTAwM2VtYXAua2V5X3NpemUpO1xcbitcXHRcXHRsID0gKHN0cnVjdCBodGFiX2VsZW0gKiljb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKTtcXG4rXFx0XFx0bWVtY3B5KGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleSwgaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplKTtcXG4gXFx0XFx0cmV0dXJuIGw7XFxuIFxcdH1cXG4gXFxuQEAgLTM0MCw4ICs0MDMsNyBAQCBzdGF0aWMgaW50IHByZWFsbG9jX2luaXQoc3RydWN0IGJwZl9odGFiICpodGFiKVxcbiBcXHRcXHRcXHRcXHRcXHQgICAgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xcbiBcXHRcXHRpZiAoIXBwdHIpXFxuIFxcdFxcdFxcdGdvdG8gZnJlZV9lbGVtcztcXG4tXFx0XFx0aHRhYl9lbGVtX3NldF9wdHIoZ2V0X2h0YWJfZWxlbShodGFiLCBpKSwgaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplLFxcbi1cXHRcXHRcXHRcXHQgIHBwdHIpO1xcbitcXHRcXHRodGFiX2VsZW1fc2V0X3B0cihodGFiLCBnZXRfaHRhYl9lbGVtKGh0YWIsIGkpLCBwcHRyKTtcXG4gXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcdH1cXG4gXFxuQEAgLTM0OSw4ICs0MTEsOCBAQCBzdGF0aWMgaW50IHByZWFsbG9jX2luaXQoc3RydWN0IGJwZl9odGFiICpodGFiKVxcbiBcXHRpZiAoaHRhYl9pc19scnUoaHRhYikpXFxuIFxcdFxcdGVyciA9IGJwZl9scnVfaW5pdChcXHUwMDI2aHRhYi1cXHUwMDNlbHJ1LFxcbiBcXHRcXHRcXHRcXHQgICBodGFiLVxcdTAwM2VtYXAubWFwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfTk9fQ09NTU9OX0xSVSxcXG4tXFx0XFx0XFx0XFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgaGFzaCkgLVxcbi1cXHRcXHRcXHRcXHQgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBscnVfbm9kZSksXFxuK1xcdFxcdFxcdFxcdCAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBkYXRhKSAtXFxuK1xcdFxcdFxcdFxcdCAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSksXFxuIFxcdFxcdFxcdFxcdCAgIGh0YWJfbHJ1X21hcF9kZWxldGVfbm9kZSxcXG4gXFx0XFx0XFx0XFx0ICAgaHRhYik7XFxuIFxcdGVsc2VcXG5AQCAtMzYxLDExICs0MjMsMTEgQEAgc3RhdGljIGludCBwcmVhbGxvY19pbml0KHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4gXFxuIFxcdGlmIChodGFiX2lzX2xydShodGFiKSlcXG4gXFx0XFx0YnBmX2xydV9wb3B1bGF0ZShcXHUwMDI2aHRhYi1cXHUwMDNlbHJ1LCBodGFiLVxcdTAwM2VlbGVtcyxcXG4tXFx0XFx0XFx0XFx0IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSxcXG4rXFx0XFx0XFx0XFx0IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSksXFxuIFxcdFxcdFxcdFxcdCBodGFiLVxcdTAwM2VlbGVtX3NpemUsIG51bV9lbnRyaWVzKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRwY3B1X2ZyZWVsaXN0X3BvcHVsYXRlKFxcdTAwMjZodGFiLVxcdTAwM2VmcmVlbGlzdCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGh0YWItXFx1MDAzZWVsZW1zICsgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgZm5vZGUpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgaHRhYi1cXHUwMDNlZWxlbXMgKyBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBub2RlLmZub2RlKSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGh0YWItXFx1MDAzZWVsZW1fc2l6ZSwgbnVtX2VudHJpZXMpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTQwMSw3ICs0NjMsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2V4dHJhX2VsZW1zKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4gXFx0XFx0LyogcG9wIHdpbGwgc3VjY2VlZCwgc2luY2UgcHJlYWxsb2NfaW5pdCgpXFxuIFxcdFxcdCAqIHByZWFsbG9jYXRlZCBleHRyYSBudW1fcG9zc2libGVfY3B1cyBlbGVtZW50c1xcbiBcXHRcXHQgKi9cXG4tXFx0XFx0bF9uZXcgPSBjb250YWluZXJfb2YobCwgc3RydWN0IGh0YWJfZWxlbSwgZm5vZGUpO1xcbitcXHRcXHRsX25ldyA9IGNvbnRhaW5lcl9vZihsLCBzdHJ1Y3QgaHRhYl9lbGVtLCBub2RlLmZub2RlKTtcXG4gXFx0XFx0KnBlcl9jcHVfcHRyKHBwdHIsIGNwdSkgPSBsX25ldztcXG4gXFx0fVxcbiBcXHRodGFiLVxcdTAwM2VleHRyYV9lbGVtcyA9IHBwdHI7XFxuQEAgLTQyNSw4ICs0ODcsOCBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbiBcXHRib29sIHplcm9fc2VlZCA9IChhdHRyLVxcdTAwM2VtYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9aRVJPX1NFRUQpO1xcbiBcXHRpbnQgbnVtYV9ub2RlID0gYnBmX21hcF9hdHRyX251bWFfbm9kZShhdHRyKTtcXG4gXFxuLVxcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZS5uZXh0KSAhPVxcbi1cXHRcXHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGhhc2hfbm9kZS5wcHJldikpO1xcbitcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGh0YWJfbm9kZSwgZm5vZGUubmV4dCkgIT1cXG4rXFx0XFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9ub2RlLCBoYXNoX25vZGUucHByZXYpKTtcXG4gXFxuIFxcdGlmICh6ZXJvX3NlZWQgXFx1MDAyNlxcdTAwMjYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpXFxuIFxcdFxcdC8qIEd1YXJkIGFnYWluc3QgbG9jYWwgRG9TLCBhbmQgZGlzY291cmFnZSBwcm9kdWN0aW9uIHVzZS4gKi9cXG5AQCAtNDc2LDcgKzUzOCw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpXFxuIFxcdGlmIChJU19FUlJfT1JfTlVMTChocmVjLVxcdTAwM2VyZWNvcmQpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRtYXBfdmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoZWxlbSwgaHJlYy1cXHUwMDNla2V5X3NpemUpO1xcbitcXHRtYXBfdmFsdWUgPSAodm9pZCAqKWVsZW0gKyBocmVjLVxcdTAwM2VrZXlfb2Zmc2V0ICsgcm91bmRfdXAoaHJlYy1cXHUwMDNla2V5X3NpemUsIDgpO1xcbiBcXHRicGZfb2JqX2ZyZWVfZmllbGRzKGhyZWMtXFx1MDAzZXJlY29yZCwgbWFwX3ZhbHVlKTtcXG4gfVxcbiBcXG5AQCAtNTAyLDcgKzU2NCw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZHRvcl9jdHhfZnJlZSh2b2lkICpjdHgpXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgYnBmX21hX3NldF9kdG9yKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSxcXG4tXFx0XFx0XFx0ICAgdm9pZCAoKmR0b3IpKHZvaWQgKiwgdm9pZCAqKSlcXG4rXFx0XFx0XFx0ICAgdm9pZCAoKmR0b3IpKHZvaWQgKiwgdm9pZCAqKSwgdTMyIGtleV9vZmZzZXQpXFxuIHtcXG4gXFx0c3RydWN0IGh0YWJfYnRmX3JlY29yZCAqaHJlYztcXG4gXFx0aW50IGVycjtcXG5AQCAtNTE1LDYgKzU3Nyw3IEBAIHN0YXRpYyBpbnQgYnBmX21hX3NldF9kdG9yKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSxcXG4gXFx0aWYgKCFocmVjKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0aHJlYy1cXHUwMDNla2V5X3NpemUgPSBtYXAtXFx1MDAzZWtleV9zaXplO1xcbitcXHRocmVjLVxcdTAwM2VrZXlfb2Zmc2V0ID0ga2V5X29mZnNldDtcXG4gXFx0aHJlYy1cXHUwMDNlcmVjb3JkID0gYnRmX3JlY29yZF9kdXAobWFwLVxcdTAwM2VyZWNvcmQpO1xcbiBcXHRpZiAoSVNfRVJSKGhyZWMtXFx1MDAzZXJlY29yZCkpIHtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihocmVjLVxcdTAwM2VyZWNvcmQpO1xcbkBAIC01MzcsOSArNjAwLDkgQEAgc3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbiBcXHQgKiBwb3B1bGF0ZWQgaW4gaHRhYl9tYXBfYWxsb2MoKSwgc28gaXQgd2lsbCBhbHdheXMgYXBwZWFyIGFzIE5VTEwuXFxuIFxcdCAqL1xcbiBcXHRpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikpXFxuLVxcdFxcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcXHUwMDI2aHRhYi1cXHUwMDNlcGNwdV9tYSwgaHRhYl9wY3B1X21lbV9kdG9yKTtcXG4rXFx0XFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFxcdTAwMjZodGFiLVxcdTAwM2VwY3B1X21hLCBodGFiX3BjcHVfbWVtX2R0b3IsIGh0YWItXFx1MDAzZWtleV9vZmZzZXQpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcXHUwMDI2aHRhYi1cXHUwMDNlbWEsIGh0YWJfbWVtX2R0b3IpO1xcbitcXHRcXHRyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgXFx1MDAyNmh0YWItXFx1MDAzZW1hLCBodGFiX21lbV9kdG9yLCBodGFiLVxcdTAwM2VrZXlfb2Zmc2V0KTtcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBicGZfbWFwICpodGFiX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5AQCAtNTYyLDYgKzYyNSwxMiBAQCBzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbiBcXG4gXFx0YnBmX21hcF9pbml0X2Zyb21fYXR0cihcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBhdHRyKTtcXG4gXFxuK1xcdC8qIEF2b2lkIGhhc2ggbWVtb3J5IHVzZSBhbmQgY29tcGFyaXNvbnMgd2hlcmUgdW5uZWNlc3NhcnkuXFxuK1xcdCAqIHUzMiBoYXNoIHJlYWRzIGFyZSBhbHdheXMgYXRvbWljLiBJZiB3ZSBlbGlkZSB0aGVtLCBrZXkgY29tcGFyaXNvbnMgbXVzdCBhbHNvIGJlIGF0b21pY1xcbitcXHQgKiB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZSBrZXkgbWF0Y2hlcyBkdWUgdG8gdG9ybiBrZXkgcmVhZHMgLyB3cml0ZXMuIFNvIGNoZWNrIGtleV9zaXplLlxcbitcXHQgKi9cXG4rXFx0aHRhYi1cXHUwMDNlaGFzX2hhc2ggPSBodGFiX2lzX2xydShodGFiKSB8fCBodGFiLVxcdTAwM2VtYXAua2V5X3NpemUgXFx1MDAzZSBzaXplb2YodW5zaWduZWQgbG9uZyk7XFxuK1xcbiBcXHRpZiAocGVyY3B1X2xydSkge1xcbiBcXHRcXHQvKiBlbnN1cmUgZWFjaCBDUFUncyBscnUgbGlzdCBoYXMgXFx1MDAzZT0xIGVsZW1lbnRzLlxcbiBcXHRcXHQgKiBzaW5jZSB3ZSBhcmUgYXQgaXQsIG1ha2UgZWFjaCBscnUgbGlzdCBoYXMgdGhlIHNhbWVcXG5AQCAtNTgzLDggKzY1MiwxNiBAQCBzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbiBcXG4gXFx0aHRhYi1cXHUwMDNlbl9idWNrZXRzID0gcm91bmR1cF9wb3dfb2ZfdHdvKGh0YWItXFx1MDAzZW1hcC5tYXhfZW50cmllcyk7XFxuIFxcbi1cXHRodGFiLVxcdTAwM2VlbGVtX3NpemUgPSBzaXplb2Yoc3RydWN0IGh0YWJfZWxlbSkgK1xcbi1cXHRcXHRcXHQgIHJvdW5kX3VwKGh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSwgOCk7XFxuK1xcdGlmIChodGFiX2lzX2xydShodGFiKSlcXG4rXFx0XFx0aHRhYi1cXHUwMDNla2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBkYXRhKSArIDg7XFxuK1xcdGVsc2UgaWYgKHBlcmNwdSBcXHUwMDI2XFx1MDAyNiAhcHJlYWxsb2MpXFxuK1xcdFxcdGh0YWItXFx1MDAzZWtleV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUsIGRhdGEpICtcXG4rXFx0XFx0XFx0XFx0ICAgKGh0YWJfaGFzX2hhc2goaHRhYikgPyA4IDogMCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0aHRhYi1cXHUwMDNla2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGRhdGEpICtcXG4rXFx0XFx0XFx0XFx0ICAgKGh0YWJfaGFzX2hhc2goaHRhYikgPyA4IDogMCk7XFxuK1xcbitcXHRodGFiLVxcdTAwM2VlbGVtX3NpemUgPSBodGFiLVxcdTAwM2VrZXlfb2Zmc2V0ICsgcm91bmRfdXAoaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplLCA4KTtcXG4gXFx0aWYgKHBlcmNwdSlcXG4gXFx0XFx0aHRhYi1cXHUwMDNlZWxlbV9zaXplICs9IHNpemVvZih2b2lkICopO1xcbiBcXHRlbHNlXFxuQEAgLTY5MiwxNSArNzY5LDIzIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKnNlbGVjdF9idWNrZXQoc3RydWN0IGJwZl9odGFiICpodGFiLCB1MzJcXG4gfVxcbiBcXG4gLyogdGhpcyBsb29rdXAgZnVuY3Rpb24gY2FuIG9ubHkgYmUgY2FsbGVkIHdpdGggYnVja2V0IGxvY2sgdGFrZW4gKi9cXG4tc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCwgdTMyIGhhc2gsXFxuK3N0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfZWxlbV9yYXcoc3RydWN0IGJwZl9odGFiICpodGFiLFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsIHUzMiBoYXNoLFxcbiBcXHRcXHRcXHRcXHRcXHQgdm9pZCAqa2V5LCB1MzIga2V5X3NpemUpXFxuIHtcXG4gXFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47XFxuIFxcdHN0cnVjdCBodGFiX2VsZW0gKmw7XFxuIFxcbi1cXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxcbi1cXHRcXHRpZiAobC1cXHUwMDNlaGFzaCA9PSBoYXNoIFxcdTAwMjZcXHUwMDI2ICFtZW1jbXAoXFx1MDAyNmwtXFx1MDAzZWtleSwga2V5LCBrZXlfc2l6ZSkpXFxuLVxcdFxcdFxcdHJldHVybiBsO1xcbitcXHRpZiAoaHRhYl9oYXNfaGFzaChodGFiKSkge1xcbitcXHRcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpXFxuK1xcdFxcdFxcdGlmIChodGFiX2VsZW1faGFzaChodGFiLCBsKSA9PSBoYXNoIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAhbWVtY21wKGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleSwga2V5X3NpemUpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gbDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKVxcbitcXHRcXHRcXHRpZiAoIW1lbWNtcChodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGtleV9zaXplKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGw7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuQEAgLTcwOSw3ICs3OTQsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLCB1MzIgaGFzaFxcbiAgKiB0aGUgdW5saWtlbHkgZXZlbnQgd2hlbiBlbGVtZW50cyBtb3ZlZCBmcm9tIG9uZSBidWNrZXQgaW50byBhbm90aGVyXFxuICAqIHdoaWxlIGxpbmsgbGlzdCBpcyBiZWluZyB3YWxrZWRcXG4gICovXFxuLXN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsXFxuK3N0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGJwZl9odGFiICpodGFiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICB1MzIgaGFzaCwgdm9pZCAqa2V5LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgdTMyIGtleV9zaXplLCB1MzIgbl9idWNrZXRzKVxcbiB7XFxuQEAgLTcxNyw5ICs4MDMsMTYgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9udWxsc19lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCxcXG4gXFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcXG4gXFxuIGFnYWluOlxcbi1cXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxcbi1cXHRcXHRpZiAobC1cXHUwMDNlaGFzaCA9PSBoYXNoIFxcdTAwMjZcXHUwMDI2ICFtZW1jbXAoXFx1MDAyNmwtXFx1MDAzZWtleSwga2V5LCBrZXlfc2l6ZSkpXFxuLVxcdFxcdFxcdHJldHVybiBsO1xcbitcXHRpZiAoaHRhYl9oYXNfaGFzaChodGFiKSkge1xcbitcXHRcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpXFxuK1xcdFxcdFxcdGlmIChodGFiX2VsZW1faGFzaChodGFiLCBsKSA9PSBoYXNoIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAhbWVtY21wKGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleSwga2V5X3NpemUpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gbDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKVxcbitcXHRcXHRcXHRpZiAoIW1lbWNtcChodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGtleV9zaXplKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGw7XFxuK1xcdH1cXG4gXFxuIFxcdGlmICh1bmxpa2VseShnZXRfbnVsbHNfdmFsdWUobikgIT0gKGhhc2ggXFx1MDAyNiAobl9idWNrZXRzIC0gMSkpKSlcXG4gXFx0XFx0Z290byBhZ2FpbjtcXG5AQCAtNzQ3LDE3ICs4NDAsMTggQEAgc3RhdGljIHZvaWQgKl9faHRhYl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbiBcXG4gXFx0aGVhZCA9IHNlbGVjdF9idWNrZXQoaHRhYiwgaGFzaCk7XFxuIFxcbi1cXHRsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItXFx1MDAzZW5fYnVja2V0cyk7XFxuK1xcdGwgPSBsb29rdXBfbnVsbHNfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSwgaHRhYi1cXHUwMDNlbl9idWNrZXRzKTtcXG4gXFxuIFxcdHJldHVybiBsO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCAqaHRhYl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4gXFx0c3RydWN0IGh0YWJfZWxlbSAqbCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbiBcXG4gXFx0aWYgKGwpXFxuLVxcdFxcdHJldHVybiBodGFiX2VsZW1fdmFsdWUobCwgbWFwLVxcdTAwM2VrZXlfc2l6ZSk7XFxuK1xcdFxcdHJldHVybiBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XFxuIFxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbkBAIC03NzUsNiArODY5LDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4gICovXFxuIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4gXFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XFxuIFxcdGNvbnN0IGludCByZXQgPSBCUEZfUkVHXzA7XFxuIFxcbkBAIC03ODMsNyArODc4LDcgQEAgc3RhdGljIGludCBodGFiX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXFxuIFxcdCppbnNuKysgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pO1xcbiBcXHQqaW5zbisrID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgcmV0LCAwLCAxKTtcXG4gXFx0Kmluc24rKyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgcmV0LFxcbi1cXHRcXHRcXHRcXHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICtcXG4rXFx0XFx0XFx0XFx0aHRhYi1cXHUwMDNla2V5X29mZnNldCArXFxuIFxcdFxcdFxcdFxcdHJvdW5kX3VwKG1hcC1cXHUwMDNla2V5X3NpemUsIDgpKTtcXG4gXFx0cmV0dXJuIGluc24gLSBpbnNuX2J1ZjtcXG4gfVxcbkBAIC03OTEsMTIgKzg4NiwxMyBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICpfX2h0YWJfbHJ1X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHR2b2lkICprZXksIGNvbnN0IGJvb2wgbWFyaylcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuIFxcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG4gXFxuIFxcdGlmIChsKSB7XFxuIFxcdFxcdGlmIChtYXJrKVxcbi1cXHRcXHRcXHRicGZfbHJ1X25vZGVfc2V0X3JlZihcXHUwMDI2bC1cXHUwMDNlbHJ1X25vZGUpO1xcbi1cXHRcXHRyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGwsIG1hcC1cXHUwMDNla2V5X3NpemUpO1xcbitcXHRcXHRcXHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobCkpO1xcbitcXHRcXHRyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gTlVMTDtcXG5AQCAtODE1LDYgKzkxMSw3IEBAIHN0YXRpYyB2b2lkICpodGFiX2xydV9tYXBfbG9va3VwX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4gc3RhdGljIGludCBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4gXFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XFxuIFxcdGNvbnN0IGludCByZXQgPSBCUEZfUkVHXzA7XFxuIFxcdGNvbnN0IGludCByZWZfcmVnID0gQlBGX1JFR18xO1xcbkBAIC04MjQsMTUgKzkyMSwxNSBAQCBzdGF0aWMgaW50IGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsXFxuIFxcdCppbnNuKysgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pO1xcbiBcXHQqaW5zbisrID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgcmV0LCAwLCA0KTtcXG4gXFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9CLCByZWZfcmVnLCByZXQsXFxuLVxcdFxcdFxcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSArXFxuK1xcdFxcdFxcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSkgK1xcbiBcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX2xydV9ub2RlLCByZWYpKTtcXG4gXFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KTkUsIHJlZl9yZWcsIDAsIDEpO1xcbiBcXHQqaW5zbisrID0gQlBGX1NUX01FTShCUEZfQiwgcmV0LFxcbi1cXHRcXHRcXHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSArXFxuK1xcdFxcdFxcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSArXFxuIFxcdFxcdFxcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9scnVfbm9kZSwgcmVmKSxcXG4gXFx0XFx0XFx0ICAgICAxKTtcXG4gXFx0Kmluc24rKyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgcmV0LFxcbi1cXHRcXHRcXHRcXHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICtcXG4rXFx0XFx0XFx0XFx0aHRhYi1cXHUwMDNla2V5X29mZnNldCArXFxuIFxcdFxcdFxcdFxcdHJvdW5kX3VwKG1hcC1cXHUwMDNla2V5X3NpemUsIDgpKTtcXG4gXFx0cmV0dXJuIGluc24gLSBpbnNuX2J1ZjtcXG4gfVxcbkBAIC04NDQsMTMgKzk0MSwxMyBAQCBzdGF0aWMgdm9pZCBjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmIChodGFiX2lzX3BlcmNwdShodGFiKSkge1xcbi1cXHRcXHR2b2lkIF9fcGVyY3B1ICpwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZWxlbSwgaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplKTtcXG4rXFx0XFx0dm9pZCBfX3BlcmNwdSAqcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGVsZW0pO1xcbiBcXHRcXHRpbnQgY3B1O1xcbiBcXG4gXFx0XFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcXG4gXFx0XFx0XFx0YnBmX29ial9jYW5jZWxfZmllbGRzKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHR2b2lkICptYXBfdmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoZWxlbSwgaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplKTtcXG4rXFx0XFx0dm9pZCAqbWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pO1xcbiBcXG4gXFx0XFx0YnBmX29ial9jYW5jZWxfZmllbGRzKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIG1hcF92YWx1ZSk7XFxuIFxcdH1cXG5AQCAtODY5LDE3ICs5NjYsMTcgQEAgc3RhdGljIGJvb2wgaHRhYl9scnVfbWFwX2RlbGV0ZV9ub2RlKHZvaWQgKmFyZywgc3RydWN0IGJwZl9scnVfbm9kZSAqbm9kZSlcXG4gXFx0c3RydWN0IGJ1Y2tldCAqYjtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHRndF9sID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKTtcXG4tXFx0YiA9IF9fc2VsZWN0X2J1Y2tldChodGFiLCB0Z3RfbC1cXHUwMDNlaGFzaCk7XFxuK1xcdHRndF9sID0gKHN0cnVjdCBodGFiX2VsZW0gKiljb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKTtcXG4rXFx0YiA9IF9fc2VsZWN0X2J1Y2tldChodGFiLCBodGFiX2VsZW1faGFzaChodGFiLCB0Z3RfbCkpO1xcbiBcXHRoZWFkID0gXFx1MDAyNmItXFx1MDAzZWhlYWQ7XFxuIFxcbiBcXHRyZXQgPSBodGFiX2xvY2tfYnVja2V0KGIsIFxcdTAwMjZmbGFncyk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShsLCBuLCBoZWFkLCBoYXNoX25vZGUpXFxuK1xcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShsLCBuLCBoZWFkLCBub2RlLmhhc2hfbm9kZSlcXG4gXFx0XFx0aWYgKGwgPT0gdGd0X2wpIHtcXG4tXFx0XFx0XFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcXHUwMDI2bC1cXHUwMDNlaGFzaF9ub2RlKTtcXG4rXFx0XFx0XFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcXHUwMDI2bC1cXHUwMDNlbm9kZS5oYXNoX25vZGUpO1xcbiBcXHRcXHRcXHRicGZfbWFwX2RlY19lbGVtX2NvdW50KFxcdTAwMjZodGFiLVxcdTAwM2VtYXApO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbkBAIC05MTIsMTggKzEwMDksMTkgQEAgc3RhdGljIGludCBodGFiX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcXG4gXFx0aGVhZCA9IHNlbGVjdF9idWNrZXQoaHRhYiwgaGFzaCk7XFxuIFxcbiBcXHQvKiBsb29rdXAgdGhlIGtleSAqL1xcbi1cXHRsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItXFx1MDAzZW5fYnVja2V0cyk7XFxuK1xcdGwgPSBsb29rdXBfbnVsbHNfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSwgaHRhYi1cXHUwMDNlbl9idWNrZXRzKTtcXG4gXFxuIFxcdGlmICghbClcXG4gXFx0XFx0Z290byBmaW5kX2ZpcnN0X2VsZW07XFxuIFxcbiBcXHQvKiBrZXkgd2FzIGZvdW5kLCBnZXQgbmV4dCBrZXkgaW4gdGhlIHNhbWUgYnVja2V0ICovXFxuLVxcdG5leHRfbCA9IGhsaXN0X251bGxzX2VudHJ5X3NhZmUocmN1X2RlcmVmZXJlbmNlX3JhdyhobGlzdF9udWxsc19uZXh0X3JjdShcXHUwMDI2bC1cXHUwMDNlaGFzaF9ub2RlKSksXFxuLVxcdFxcdFxcdFxcdCAgc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKTtcXG4rXFx0bmV4dF9sID0gaGxpc3RfbnVsbHNfZW50cnlfc2FmZShcXG4rXFx0XFx0XFx0cmN1X2RlcmVmZXJlbmNlX3JhdyhobGlzdF9udWxsc19uZXh0X3JjdShcXHUwMDI2bC1cXHUwMDNlbm9kZS5oYXNoX25vZGUpKSxcXG4rXFx0XFx0XFx0c3RydWN0IGh0YWJfZWxlbSwgbm9kZS5oYXNoX25vZGUpO1xcbiBcXG4gXFx0aWYgKG5leHRfbCkge1xcbiBcXHRcXHQvKiBpZiBuZXh0IGVsZW0gaW4gdGhpcyBoYXNoIGxpc3QgaXMgbm9uLXplcm8sIGp1c3QgcmV0dXJuIGl0ICovXFxuLVxcdFxcdG1lbWNweShuZXh0X2tleSwgbmV4dF9sLVxcdTAwM2VrZXksIGtleV9zaXplKTtcXG4rXFx0XFx0bWVtY3B5KG5leHRfa2V5LCBodGFiX2VsZW1fa2V5KGh0YWIsIG5leHRfbCksIGtleV9zaXplKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuQEAgLTkzOCwxMCArMTAzNiwxMCBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxcbiBcXG4gXFx0XFx0LyogcGljayBmaXJzdCBlbGVtZW50IGluIHRoZSBidWNrZXQgKi9cXG4gXFx0XFx0bmV4dF9sID0gaGxpc3RfbnVsbHNfZW50cnlfc2FmZShyY3VfZGVyZWZlcmVuY2VfcmF3KGhsaXN0X251bGxzX2ZpcnN0X3JjdShoZWFkKSksXFxuLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaHRhYl9lbGVtLCBub2RlLmhhc2hfbm9kZSk7XFxuIFxcdFxcdGlmIChuZXh0X2wpIHtcXG4gXFx0XFx0XFx0LyogaWYgaXQncyBub3QgZW1wdHksIGp1c3QgcmV0dXJuIGl0ICovXFxuLVxcdFxcdFxcdG1lbWNweShuZXh0X2tleSwgbmV4dF9sLVxcdTAwM2VrZXksIGtleV9zaXplKTtcXG4rXFx0XFx0XFx0bWVtY3B5KG5leHRfa2V5LCBodGFiX2VsZW1fa2V5KGh0YWIsIG5leHRfbCksIGtleV9zaXplKTtcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbkBAIC05NTUsNyArMTA1Myw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZWxlbV9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcXG4gXFx0Y2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoaHRhYiwgbCk7XFxuIFxcbiBcXHRpZiAoaHRhYi1cXHUwMDNlbWFwLm1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSClcXG4tXFx0XFx0YnBmX21lbV9jYWNoZV9mcmVlKFxcdTAwMjZodGFiLVxcdTAwM2VwY3B1X21hLCBsLVxcdTAwM2VwdHJfdG9fcHB0cik7XFxuK1xcdFxcdGJwZl9tZW1fY2FjaGVfZnJlZShcXHUwMDI2aHRhYi1cXHUwMDNlcGNwdV9tYSwgaHRhYl9lbGVtX2dldF9wdHJfdG9fcHB0cihsKSk7XFxuIFxcdGJwZl9tZW1fY2FjaGVfZnJlZShcXHUwMDI2aHRhYi1cXHUwMDNlbWEsIGwpO1xcbiB9XFxuIFxcbkBAIC05NjUsNyArMTA2Myw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfcHV0X2ZkX3ZhbHVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcXG4gXFx0dm9pZCAqcHRyO1xcbiBcXG4gXFx0aWYgKG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfZmRfcHV0X3B0cikge1xcbi1cXHRcXHRwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKG1hcCwgbCk7XFxuK1xcdFxcdHB0ciA9IGZkX2h0YWJfbWFwX2dldF9wdHIoaHRhYiwgbCk7XFxuIFxcdFxcdG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfZmRfcHV0X3B0cihtYXAsIHB0ciwgdHJ1ZSk7XFxuIFxcdH1cXG4gfVxcbkBAIC0xMDA2LDcgKzExMDQsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuIFxcdGlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKSB7XFxuIFxcdFxcdGJwZl9tYXBfZGVjX2VsZW1fY291bnQoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCk7XFxuIFxcdFxcdGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGwpO1xcbi1cXHRcXHRwY3B1X2ZyZWVsaXN0X3B1c2goXFx1MDAyNmh0YWItXFx1MDAzZWZyZWVsaXN0LCBcXHUwMDI2bC1cXHUwMDNlZm5vZGUpO1xcbitcXHRcXHRwY3B1X2ZyZWVsaXN0X3B1c2goXFx1MDAyNmh0YWItXFx1MDAzZWZyZWVsaXN0LCBcXHUwMDI2bC1cXHUwMDNlbm9kZS5mbm9kZSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGRlY19lbGVtX2NvdW50KGh0YWIpO1xcbiBcXHRcXHRodGFiX2VsZW1fZnJlZShodGFiLCBsKTtcXG5AQCAtMTA5Nyw3ICsxMTk1LDcgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmFsbG9jX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcXG4gXFx0XFx0XFx0bCA9IF9fcGNwdV9mcmVlbGlzdF9wb3AoXFx1MDAyNmh0YWItXFx1MDAzZWZyZWVsaXN0KTtcXG4gXFx0XFx0XFx0aWYgKCFsKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRTJCSUcpO1xcbi1cXHRcXHRcXHRsX25ldyA9IGNvbnRhaW5lcl9vZihsLCBzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZSk7XFxuK1xcdFxcdFxcdGxfbmV3ID0gY29udGFpbmVyX29mKGwsIHN0cnVjdCBodGFiX2VsZW0sIG5vZGUuZm5vZGUpO1xcbiBcXHRcXHRcXHRicGZfbWFwX2luY19lbGVtX2NvdW50KFxcdTAwMjZodGFiLVxcdTAwM2VtYXApO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuQEAgLTExMTcsMTAgKzEyMTUsMTAgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmFsbG9jX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRtZW1jcHkobF9uZXctXFx1MDAzZWtleSwga2V5LCBrZXlfc2l6ZSk7XFxuK1xcdG1lbWNweShodGFiX2VsZW1fa2V5KGh0YWIsIGxfbmV3KSwga2V5LCBrZXlfc2l6ZSk7XFxuIFxcdGlmIChwZXJjcHUpIHtcXG4gXFx0XFx0aWYgKHByZWFsbG9jKSB7XFxuLVxcdFxcdFxcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsX25ldywga2V5X3NpemUpO1xcbitcXHRcXHRcXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9uZXcpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHQvKiBhbGxvY19wZXJjcHUgemVyby1maWxscyAqL1xcbiBcXHRcXHRcXHR2b2lkICpwdHIgPSBicGZfbWVtX2NhY2hlX2FsbG9jKFxcdTAwMjZodGFiLVxcdTAwM2VwY3B1X21hKTtcXG5AQCAtMTEzMCwyNiArMTIyOCwyNiBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqYWxsb2NfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgdm9pZCAqa2V5LFxcbiBcXHRcXHRcXHRcXHRsX25ldyA9IEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcdFxcdFxcdFxcdGdvdG8gZGVjX2NvdW50O1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGxfbmV3LVxcdTAwM2VwdHJfdG9fcHB0ciA9IHB0cjtcXG4rXFx0XFx0XFx0aHRhYl9lbGVtX3NldF9wdHJfdG9fcHB0cihsX25ldywgcHRyKTtcXG4gXFx0XFx0XFx0cHB0ciA9ICoodm9pZCBfX3BlcmNwdSAqKilwdHI7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdHBjcHVfaW5pdF92YWx1ZShodGFiLCBwcHRyLCB2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpO1xcbiBcXG4gXFx0XFx0aWYgKCFwcmVhbGxvYylcXG4tXFx0XFx0XFx0aHRhYl9lbGVtX3NldF9wdHIobF9uZXcsIGtleV9zaXplLCBwcHRyKTtcXG4rXFx0XFx0XFx0aHRhYl9lbGVtX3NldF9wdHIoaHRhYiwgbF9uZXcsIHBwdHIpO1xcbiBcXHR9IGVsc2UgaWYgKGZkX2h0YWJfbWFwX25lZWRzX2FkanVzdChodGFiKSkge1xcbiBcXHRcXHRzaXplID0gcm91bmRfdXAoc2l6ZSwgOCk7XFxuLVxcdFxcdG1lbWNweShodGFiX2VsZW1fdmFsdWUobF9uZXcsIGtleV9zaXplKSwgdmFsdWUsIHNpemUpO1xcbitcXHRcXHRtZW1jcHkoaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfbmV3KSwgdmFsdWUsIHNpemUpO1xcbiBcXHR9IGVsc2UgaWYgKG1hcF9mbGFncyBcXHUwMDI2IEJQRl9GX0xPQ0spIHtcXG4gXFx0XFx0Y29weV9tYXBfdmFsdWVfbG9ja2VkKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsXFxuLVxcdFxcdFxcdFxcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShsX25ldywga2V5X3NpemUpLFxcbitcXHRcXHRcXHRcXHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLFxcbiBcXHRcXHRcXHRcXHQgICAgICB2YWx1ZSwgZmFsc2UpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRjb3B5X21hcF92YWx1ZShcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBodGFiX2VsZW1fdmFsdWUobF9uZXcsIGtleV9zaXplKSwgdmFsdWUpO1xcbitcXHRcXHRjb3B5X21hcF92YWx1ZShcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLCB2YWx1ZSk7XFxuIFxcdH1cXG4gXFxuLVxcdGxfbmV3LVxcdTAwM2VoYXNoID0gaGFzaDtcXG4rXFx0aHRhYl9lbGVtX3NldF9oYXNoKGh0YWIsIGxfbmV3LCBoYXNoKTtcXG4gXFx0cmV0dXJuIGxfbmV3O1xcbiBkZWNfY291bnQ6XFxuIFxcdGRlY19lbGVtX2NvdW50KGh0YWIpO1xcbkBAIC0xMTk5LDcgKzEyOTcsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbiBcXHRcXHRpZiAodW5saWtlbHkoIWJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKG1hcC1cXHUwMDNlcmVjb3JkLCBCUEZfU1BJTl9MT0NLKSkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHQvKiBmaW5kIGFuIGVsZW1lbnQgd2l0aG91dCB0YWtpbmcgdGhlIGJ1Y2tldCBsb2NrICovXFxuLVxcdFxcdGxfb2xkID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsXFxuK1xcdFxcdGxfb2xkID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGh0YWItXFx1MDAzZW5fYnVja2V0cyk7XFxuIFxcdFxcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xcbiBcXHRcXHRpZiAocmV0KVxcbkBAIC0xMjA3LDcgKzEzMDUsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbiBcXHRcXHRpZiAobF9vbGQpIHtcXG4gXFx0XFx0XFx0LyogZ3JhYiB0aGUgZWxlbWVudCBsb2NrIGFuZCB1cGRhdGUgdmFsdWUgaW4gcGxhY2UgKi9cXG4gXFx0XFx0XFx0Y29weV9tYXBfdmFsdWVfbG9ja2VkKG1hcCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGxfb2xkLCBrZXlfc2l6ZSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX29sZCksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHZhbHVlLCBmYWxzZSk7XFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHRcXHR9XFxuQEAgLTEyMjEsNyArMTMxOSw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcXG4rXFx0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuIFxcbiBcXHRyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTtcXG4gXFx0aWYgKHJldClcXG5AQCAtMTIzNSw3ICsxMzMzLDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcXG4gXFx0XFx0ICogYW5kIHVwZGF0ZSBlbGVtZW50IGluIHBsYWNlXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRjb3B5X21hcF92YWx1ZV9sb2NrZWQobWFwLFxcbi1cXHRcXHRcXHRcXHQgICAgICBodGFiX2VsZW1fdmFsdWUobF9vbGQsIGtleV9zaXplKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfb2xkKSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgdmFsdWUsIGZhbHNlKTtcXG4gXFx0XFx0cmV0ID0gMDtcXG4gXFx0XFx0Z290byBlcnI7XFxuQEAgLTEyNTIsOSArMTM1MCw5IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuIFxcdC8qIGFkZCBuZXcgZWxlbWVudCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdFxcbiBcXHQgKiBjb25jdXJyZW50IHNlYXJjaCB3aWxsIGZpbmQgaXQgYmVmb3JlIG9sZCBlbGVtXFxuIFxcdCAqL1xcbi1cXHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXFx1MDAyNmxfbmV3LVxcdTAwM2VoYXNoX25vZGUsIGhlYWQpO1xcbitcXHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXFx1MDAyNmxfbmV3LVxcdTAwM2Vub2RlLmhhc2hfbm9kZSwgaGVhZCk7XFxuIFxcdGlmIChsX29sZCkge1xcbi1cXHRcXHRobGlzdF9udWxsc19kZWxfcmN1KFxcdTAwMjZsX29sZC1cXHUwMDNlaGFzaF9ub2RlKTtcXG4rXFx0XFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcXHUwMDI2bF9vbGQtXFx1MDAzZW5vZGUuaGFzaF9ub2RlKTtcXG4gXFxuIFxcdFxcdC8qIGxfb2xkIGhhcyBhbHJlYWR5IGJlZW4gc3Rhc2hlZCBpbiBodGFiLVxcdTAwM2VleHRyYV9lbGVtcywgY2FuY2VsXFxuIFxcdFxcdCAqIGl0cyByZXVzYWJsZSBzcGVjaWFsIGZpZWxkcyBiZWZvcmUgaXQgaXMgYXZhaWxhYmxlIGZvciByZXVzZS5cXG5AQCAtMTI3NSw3ICsxMzczLDcgQEAgc3RhdGljIHZvaWQgaHRhYl9scnVfcHVzaF9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqZWxlbSlcXG4ge1xcbiBcXHRjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhodGFiLCBlbGVtKTtcXG4gXFx0YnBmX21hcF9kZWNfZWxlbV9jb3VudChcXHUwMDI2aHRhYi1cXHUwMDNlbWFwKTtcXG4tXFx0YnBmX2xydV9wdXNoX2ZyZWUoXFx1MDAyNmh0YWItXFx1MDAzZWxydSwgXFx1MDAyNmVsZW0tXFx1MDAzZWxydV9ub2RlKTtcXG4rXFx0YnBmX2xydV9wdXNoX2ZyZWUoXFx1MDAyNmh0YWItXFx1MDAzZWxydSwgaHRhYl9lbGVtX2xydV9ub2RlKGVsZW0pKTtcXG4gfVxcbiBcXG4gc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuQEAgLTEzMTAsMTMgKzE0MDgsMTMgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWVcXG4gXFx0bF9uZXcgPSBwcmVhbGxvY19scnVfcG9wKGh0YWIsIGtleSwgaGFzaCk7XFxuIFxcdGlmICghbF9uZXcpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHRjb3B5X21hcF92YWx1ZShcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBodGFiX2VsZW1fdmFsdWUobF9uZXcsIG1hcC1cXHUwMDNla2V5X3NpemUpLCB2YWx1ZSk7XFxuK1xcdGNvcHlfbWFwX3ZhbHVlKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksIHZhbHVlKTtcXG4gXFxuIFxcdHJldCA9IGh0YWJfbG9ja19idWNrZXQoYiwgXFx1MDAyNmZsYWdzKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBlcnJfbG9ja19idWNrZXQ7XFxuIFxcbi1cXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcXG4rXFx0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuIFxcbiBcXHRyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTtcXG4gXFx0aWYgKHJldClcXG5AQCAtMTMyNSwxMCArMTQyMywxMCBAQCBzdGF0aWMgbG9uZyBodGFiX2xydV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZVxcbiBcXHQvKiBhZGQgbmV3IGVsZW1lbnQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QsIHNvIHRoYXRcXG4gXFx0ICogY29uY3VycmVudCBzZWFyY2ggd2lsbCBmaW5kIGl0IGJlZm9yZSBvbGQgZWxlbVxcbiBcXHQgKi9cXG4tXFx0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFxcdTAwMjZsX25ldy1cXHUwMDNlaGFzaF9ub2RlLCBoZWFkKTtcXG4rXFx0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFxcdTAwMjZsX25ldy1cXHUwMDNlbm9kZS5oYXNoX25vZGUsIGhlYWQpO1xcbiBcXHRpZiAobF9vbGQpIHtcXG4tXFx0XFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXFx1MDAyNmxfbmV3LVxcdTAwM2VscnVfbm9kZSk7XFxuLVxcdFxcdGhsaXN0X251bGxzX2RlbF9yY3UoXFx1MDAyNmxfb2xkLVxcdTAwM2VoYXNoX25vZGUpO1xcbitcXHRcXHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobF9uZXcpKTtcXG4rXFx0XFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcXHUwMDI2bF9vbGQtXFx1MDAzZW5vZGUuaGFzaF9ub2RlKTtcXG4gXFx0fVxcbiBcXHRyZXQgPSAwO1xcbiBcXG5AQCAtMTM4Myw3ICsxNDgxLDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW1faW5fcGxhY2Uoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuK1xcdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbiBcXG4gXFx0cmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7XFxuIFxcdGlmIChyZXQpXFxuQEAgLTEzOTIsMTAgKzE0OTAsMTAgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW1faW5fcGxhY2Uoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbiBcXHRpZiAobF9vbGQpIHtcXG4gXFx0XFx0LyogVXBkYXRlIHZhbHVlIGluLXBsYWNlICovXFxuIFxcdFxcdGlmIChwZXJjcHUpIHtcXG4tXFx0XFx0XFx0cGNwdV9jb3B5X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGxfb2xkLCBrZXlfc2l6ZSksXFxuK1xcdFxcdFxcdHBjcHVfY29weV92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsX29sZCksXFxuIFxcdFxcdFxcdFxcdFxcdHZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHZvaWQgKippbm5lcl9tYXBfcHB0ciA9IGh0YWJfZWxlbV92YWx1ZShsX29sZCwga2V5X3NpemUpO1xcbitcXHRcXHRcXHR2b2lkICoqaW5uZXJfbWFwX3BwdHIgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9vbGQpO1xcbiBcXG4gXFx0XFx0XFx0b2xkX21hcF9wdHIgPSAqaW5uZXJfbWFwX3BwdHI7XFxuIFxcdFxcdFxcdFdSSVRFX09OQ0UoKmlubmVyX21hcF9wcHRyLCAqKHZvaWQgKiopdmFsdWUpO1xcbkBAIC0xNDA3LDcgKzE1MDUsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbV9pbl9wbGFjZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuIFxcdFxcdFxcdHJldCA9IFBUUl9FUlIobF9uZXcpO1xcbiBcXHRcXHRcXHRnb3RvIGVycjtcXG4gXFx0XFx0fVxcbi1cXHRcXHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXFx1MDAyNmxfbmV3LVxcdTAwM2VoYXNoX25vZGUsIGhlYWQpO1xcbitcXHRcXHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXFx1MDAyNmxfbmV3LVxcdTAwM2Vub2RlLmhhc2hfbm9kZSwgaGVhZCk7XFxuIFxcdH1cXG4gZXJyOlxcbiBcXHRodGFiX3VubG9ja19idWNrZXQoYiwgZmxhZ3MpO1xcbkBAIC0xNDU2LDIyICsxNTU0LDIyIEBAIHN0YXRpYyBsb25nIF9faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gZXJyX2xvY2tfYnVja2V0O1xcbiBcXG4tXFx0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuK1xcdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbiBcXG4gXFx0cmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4gXFx0aWYgKGxfb2xkKSB7XFxuLVxcdFxcdGJwZl9scnVfbm9kZV9zZXRfcmVmKFxcdTAwMjZsX29sZC1cXHUwMDNlbHJ1X25vZGUpO1xcbitcXHRcXHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobF9vbGQpKTtcXG4gXFxuIFxcdFxcdC8qIHBlci1jcHUgaGFzaCBtYXAgY2FuIHVwZGF0ZSB2YWx1ZSBpbi1wbGFjZSAqL1xcbi1cXHRcXHRwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIobF9vbGQsIGtleV9zaXplKSxcXG4rXFx0XFx0cGNwdV9jb3B5X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGxfb2xkKSxcXG4gXFx0XFx0XFx0XFx0dmFsdWUsIG9uYWxsY3B1cywgbWFwX2ZsYWdzKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0cGNwdV9pbml0X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGxfbmV3LCBrZXlfc2l6ZSksXFxuK1xcdFxcdHBjcHVfaW5pdF92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsX25ldyksXFxuIFxcdFxcdFxcdFxcdHZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7XFxuLVxcdFxcdGhsaXN0X251bGxzX2FkZF9oZWFkX3JjdShcXHUwMDI2bF9uZXctXFx1MDAzZWhhc2hfbm9kZSwgaGVhZCk7XFxuK1xcdFxcdGhsaXN0X251bGxzX2FkZF9oZWFkX3JjdShcXHUwMDI2bF9uZXctXFx1MDAzZW5vZGUuaGFzaF9ub2RlLCBoZWFkKTtcXG4gXFx0XFx0bF9uZXcgPSBOVUxMO1xcbiBcXHR9XFxuIFxcdHJldCA9IDA7XFxuQEAgLTE0ODAsNyArMTU3OCw3IEBAIHN0YXRpYyBsb25nIF9faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuIGVycl9sb2NrX2J1Y2tldDpcXG4gXFx0aWYgKGxfbmV3KSB7XFxuIFxcdFxcdGJwZl9tYXBfZGVjX2VsZW1fY291bnQoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCk7XFxuLVxcdFxcdGJwZl9scnVfcHVzaF9mcmVlKFxcdTAwMjZodGFiLVxcdTAwM2VscnUsIFxcdTAwMjZsX25ldy1cXHUwMDNlbHJ1X25vZGUpO1xcbitcXHRcXHRicGZfbHJ1X3B1c2hfZnJlZShcXHUwMDI2aHRhYi1cXHUwMDNlbHJ1LCBodGFiX2VsZW1fbHJ1X25vZGUobF9uZXcpKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTE1MjEsOSArMTYxOSw5IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuK1xcdGwgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuIFxcdGlmIChsKVxcbi1cXHRcXHRobGlzdF9udWxsc19kZWxfcmN1KFxcdTAwMjZsLVxcdTAwM2VoYXNoX25vZGUpO1xcbitcXHRcXHRobGlzdF9udWxsc19kZWxfcmN1KFxcdTAwMjZsLVxcdTAwM2Vub2RlLmhhc2hfbm9kZSk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4gXFxuQEAgLTE1NTYsMTAgKzE2NTQsMTAgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuK1xcdGwgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuIFxcbiBcXHRpZiAobClcXG4tXFx0XFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcXHUwMDI2bC1cXHUwMDNlaGFzaF9ub2RlKTtcXG4rXFx0XFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcXHUwMDI2bC1cXHUwMDNlbm9kZS5oYXNoX25vZGUpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdHJldCA9IC1FTk9FTlQ7XFxuIFxcbkBAIC0xNTgxLDggKzE2NzksOCBAQCBzdGF0aWMgdm9pZCBkZWxldGVfYWxsX2VsZW1lbnRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4gXFx0XFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47XFxuIFxcdFxcdHN0cnVjdCBodGFiX2VsZW0gKmw7XFxuIFxcbi1cXHRcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xcbi1cXHRcXHRcXHRobGlzdF9udWxsc19kZWxfcmN1KFxcdTAwMjZsLVxcdTAwM2VoYXNoX25vZGUpO1xcbitcXHRcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKSB7XFxuK1xcdFxcdFxcdGhsaXN0X251bGxzX2RlbF9yY3UoXFx1MDAyNmwtXFx1MDAzZW5vZGUuaGFzaF9ub2RlKTtcXG4gXFx0XFx0XFx0aHRhYl9lbGVtX2ZyZWUoaHRhYiwgbCk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuQEAgLTE1OTksMTAgKzE2OTcsMTAgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX21hbGxvY2VkX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxcbiBcXHRcXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjtcXG4gXFx0XFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcXG4gXFxuLVxcdFxcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xcbitcXHRcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeShsLCBuLCBoZWFkLCBub2RlLmhhc2hfbm9kZSkge1xcbiBcXHRcXHRcXHQvKiBXZSBvbmx5IGZyZWUgaW50ZXJuYWwgc3RydWN0cyBvbiB1cmVmIGRyb3BwaW5nIHRvIHplcm8gKi9cXG4gXFx0XFx0XFx0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGwsIGh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCkpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGNvbmRfcmVzY2hlZF9yY3UoKTtcXG4gXFx0fVxcbkBAIC0xNjk3LDcgKzE3OTUsNyBAQCBzdGF0aWMgaW50IF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRsID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbitcXHRsID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbiBcXHRpZiAoIWwpIHtcXG4gXFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbkBAIC0xNzA4LDE0ICsxODA2LDE0IEBAIHN0YXRpYyBpbnQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4gXFx0XFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcXG4gXFx0XFx0aW50IG9mZiA9IDAsIGNwdTtcXG4gXFxuLVxcdFxcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBrZXlfc2l6ZSk7XFxuK1xcdFxcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKTtcXG4gXFx0XFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbiBcXHRcXHRcXHRjb3B5X21hcF92YWx1ZV9sb25nKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIHZhbHVlICsgb2ZmLCBwZXJfY3B1X3B0cihwcHRyLCBjcHUpKTtcXG4gXFx0XFx0XFx0Y2hlY2tfYW5kX2luaXRfbWFwX3ZhbHVlKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIHZhbHVlICsgb2ZmKTtcXG4gXFx0XFx0XFx0b2ZmICs9IHJvdW5kdXBfdmFsdWVfc2l6ZTtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHR2b2lkICpzcmMgPSBodGFiX2VsZW1fdmFsdWUobCwgbWFwLVxcdTAwM2VrZXlfc2l6ZSk7XFxuK1xcdFxcdHZvaWQgKnNyYyA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcXG4gXFxuIFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GX0xPQ0spXFxuIFxcdFxcdFxcdGNvcHlfbWFwX3ZhbHVlX2xvY2tlZChtYXAsIHZhbHVlLCBzcmMsIHRydWUpO1xcbkBAIC0xNzI0LDcgKzE4MjIsNyBAQCBzdGF0aWMgaW50IF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuIFxcdFxcdC8qIFplcm9pbmcgc3BlY2lhbCBmaWVsZHMgaW4gdGhlIHRlbXAgYnVmZmVyICovXFxuIFxcdFxcdGNoZWNrX2FuZF9pbml0X21hcF92YWx1ZShtYXAsIHZhbHVlKTtcXG4gXFx0fVxcbi1cXHRobGlzdF9udWxsc19kZWxfcmN1KFxcdTAwMjZsLVxcdTAwM2VoYXNoX25vZGUpO1xcbitcXHRobGlzdF9udWxsc19kZWxfcmN1KFxcdTAwMjZsLVxcdTAwM2Vub2RlLmhhc2hfbm9kZSk7XFxuIFxcbiBvdXRfdW5sb2NrOlxcbiBcXHRodGFiX3VubG9ja19idWNrZXQoYiwgYmZsYWdzKTtcXG5AQCAtMTg2MCw3ICsxOTU4LDcgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHR9XFxuIFxcbiBcXHRidWNrZXRfY250ID0gMDtcXG4tXFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSlcXG4rXFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKVxcbiBcXHRcXHRidWNrZXRfY250Kys7XFxuIFxcbiBcXHRpZiAoYnVja2V0X2NudCBcXHUwMDI2XFx1MDAyNiAhbG9ja2VkKSB7XFxuQEAgLTE4OTcsMTQgKzE5OTUsMTQgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRpZiAoIWxvY2tlZClcXG4gXFx0XFx0Z290byBuZXh0X2JhdGNoO1xcbiBcXG4tXFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShsLCBuLCBoZWFkLCBoYXNoX25vZGUpIHtcXG4tXFx0XFx0bWVtY3B5KGRzdF9rZXksIGwtXFx1MDAzZWtleSwga2V5X3NpemUpO1xcbitcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKSB7XFxuK1xcdFxcdG1lbWNweShkc3Rfa2V5LCBodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXlfc2l6ZSk7XFxuIFxcbiBcXHRcXHRpZiAoaXNfcGVyY3B1KSB7XFxuIFxcdFxcdFxcdGludCBvZmYgPSAwLCBjcHU7XFxuIFxcdFxcdFxcdHZvaWQgX19wZXJjcHUgKnBwdHI7XFxuIFxcbi1cXHRcXHRcXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVxcdTAwM2VrZXlfc2l6ZSk7XFxuK1xcdFxcdFxcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKTtcXG4gXFx0XFx0XFx0aWYgKGVsZW1fbWFwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfQ1BVKSB7XFxuIFxcdFxcdFxcdFxcdGNwdSA9IGVsZW1fbWFwX2ZsYWdzIFxcdTAwM2VcXHUwMDNlIDMyO1xcbiBcXHRcXHRcXHRcXHRjb3B5X21hcF92YWx1ZShcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBkc3RfdmFsLCBwZXJfY3B1X3B0cihwcHRyLCBjcHUpKTtcXG5AQCAtMTkxOCw3ICsyMDE2LDcgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0dmFsdWUgPSBodGFiX2VsZW1fdmFsdWUobCwga2V5X3NpemUpO1xcbitcXHRcXHRcXHR2YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcXG4gXFx0XFx0XFx0aWYgKGlzX2ZkX2h0YWIoaHRhYikpIHtcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGJwZl9tYXAgKippbm5lcl9tYXAgPSB2YWx1ZTtcXG4gXFxuQEAgLTE5MzYsNyArMjAzNCw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gXFx0XFx0XFx0Y2hlY2tfYW5kX2luaXRfbWFwX3ZhbHVlKG1hcCwgZHN0X3ZhbCk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKGRvX2RlbGV0ZSkge1xcbi1cXHRcXHRcXHRobGlzdF9udWxsc19kZWxfcmN1KFxcdTAwMjZsLVxcdTAwM2VoYXNoX25vZGUpO1xcbitcXHRcXHRcXHRobGlzdF9udWxsc19kZWxfcmN1KFxcdTAwMjZsLVxcdTAwM2Vub2RlLmhhc2hfbm9kZSk7XFxuIFxcbiBcXHRcXHRcXHQvKiBicGZfbHJ1X3B1c2hfZnJlZSgpIHdpbGwgYWNxdWlyZSBscnVfbG9jaywgd2hpY2hcXG4gXFx0XFx0XFx0ICogbWF5IGNhdXNlIGRlYWRsb2NrLiBTZWUgY29tbWVudHMgaW4gZnVuY3Rpb25cXG5AQCAtMTk0OCw3ICsyMDQ2LDcgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRcXHRcXHQgKiBsb2NrIGJlaW5nIGhlbGQgYW5kIGl0IHZpb2xhdGVzIHRoZSBsb2NrIHJ1bGUsIHNvXFxuIFxcdFxcdFxcdCAqIGludm9rZSBmcmVlX2h0YWJfZWxlbSgpIGFmdGVyIHVubG9jayBhcyB3ZWxsLlxcbiBcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0bC1cXHUwMDNlYmF0Y2hfZmxpbmsgPSBub2RlX3RvX2ZyZWU7XFxuK1xcdFxcdFxcdGwtXFx1MDAzZW5vZGUuYmF0Y2hfZmxpbmsgPSBub2RlX3RvX2ZyZWU7XFxuIFxcdFxcdFxcdG5vZGVfdG9fZnJlZSA9IGw7XFxuIFxcdFxcdH1cXG4gXFx0XFx0ZHN0X2tleSArPSBrZXlfc2l6ZTtcXG5AQCAtMTk2MCw3ICsyMDU4LDcgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXG4gXFx0d2hpbGUgKG5vZGVfdG9fZnJlZSkge1xcbiBcXHRcXHRsID0gbm9kZV90b19mcmVlO1xcbi1cXHRcXHRub2RlX3RvX2ZyZWUgPSBub2RlX3RvX2ZyZWUtXFx1MDAzZWJhdGNoX2ZsaW5rO1xcbitcXHRcXHRub2RlX3RvX2ZyZWUgPSBub2RlX3RvX2ZyZWUtXFx1MDAzZW5vZGUuYmF0Y2hfZmxpbms7XFxuIFxcdFxcdGlmIChpc19scnVfbWFwKVxcbiBcXHRcXHRcXHRodGFiX2xydV9wdXNoX2ZyZWUoaHRhYiwgbCk7XFxuIFxcdFxcdGVsc2VcXG5AQCAtMjEwOCw4ICsyMjA2LDggQEAgYnBmX2hhc2hfbWFwX3NlcV9maW5kX25leHQoc3RydWN0IGJwZl9pdGVyX3NlcV9oYXNoX21hcF9pbmZvICppbmZvLFxcbiBcXHRcXHQvKiBubyB1cGRhdGUvZGVsZXRpb24gb24gdGhpcyBidWNrZXQsIHByZXZfZWxlbSBzaG91bGQgYmUgc3RpbGwgdmFsaWRcXG4gXFx0XFx0ICogYW5kIHdlIHdvbid0IHNraXAgZWxlbWVudHMuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRuID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhobGlzdF9udWxsc19uZXh0X3JjdShcXHUwMDI2cHJldl9lbGVtLVxcdTAwM2VoYXNoX25vZGUpKTtcXG4tXFx0XFx0ZWxlbSA9IGhsaXN0X251bGxzX2VudHJ5X3NhZmUobiwgc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKTtcXG4rXFx0XFx0biA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoaGxpc3RfbnVsbHNfbmV4dF9yY3UoXFx1MDAyNnByZXZfZWxlbS1cXHUwMDNlbm9kZS5oYXNoX25vZGUpKTtcXG4rXFx0XFx0ZWxlbSA9IGhsaXN0X251bGxzX2VudHJ5X3NhZmUobiwgc3RydWN0IGh0YWJfZWxlbSwgbm9kZS5oYXNoX25vZGUpO1xcbiBcXHRcXHRpZiAoZWxlbSlcXG4gXFx0XFx0XFx0cmV0dXJuIGVsZW07XFxuIFxcbkBAIC0yMTI1LDcgKzIyMjMsNyBAQCBicGZfaGFzaF9tYXBfc2VxX2ZpbmRfbmV4dChzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2hhc2hfbWFwX2luZm8gKmluZm8sXFxuIFxcbiBcXHRcXHRjb3VudCA9IDA7XFxuIFxcdFxcdGhlYWQgPSBcXHUwMDI2Yi1cXHUwMDNlaGVhZDtcXG4tXFx0XFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGVsZW0sIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xcbitcXHRcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UoZWxlbSwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpIHtcXG4gXFx0XFx0XFx0aWYgKGNvdW50IFxcdTAwM2U9IHNraXBfZWxlbXMpIHtcXG4gXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlYnVja2V0X2lkID0gaTtcXG4gXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlc2tpcF9lbGVtcyA9IGNvdW50O1xcbkBAIC0yMTgzLDEyICsyMjgxLDEyIEBAIHN0YXRpYyBpbnQgX19icGZfaGFzaF9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBodGFiX2VsZW0gKmVsZW0pXFxuIFxcdFxcdGN0eC5tZXRhID0gXFx1MDAyNm1ldGE7XFxuIFxcdFxcdGN0eC5tYXAgPSBpbmZvLVxcdTAwM2VtYXA7XFxuIFxcdFxcdGlmIChlbGVtKSB7XFxuLVxcdFxcdFxcdGN0eC5rZXkgPSBlbGVtLVxcdTAwM2VrZXk7XFxuK1xcdFxcdFxcdGN0eC5rZXkgPSBodGFiX2VsZW1fa2V5KGluZm8tXFx1MDAzZWh0YWIsIGVsZW0pO1xcbiBcXHRcXHRcXHRpZiAoIWluZm8tXFx1MDAzZXBlcmNwdV92YWx1ZV9idWYpIHtcXG4tXFx0XFx0XFx0XFx0Y3R4LnZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIG1hcC1cXHUwMDNla2V5X3NpemUpO1xcbitcXHRcXHRcXHRcXHRjdHgudmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoaW5mby1cXHUwMDNlaHRhYiwgZWxlbSk7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdFxcdHJvdW5kdXBfdmFsdWVfc2l6ZSA9IHJvdW5kX3VwKG1hcC1cXHUwMDNldmFsdWVfc2l6ZSwgOCk7XFxuLVxcdFxcdFxcdFxcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBtYXAtXFx1MDAzZWtleV9zaXplKTtcXG4rXFx0XFx0XFx0XFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGluZm8tXFx1MDAzZWh0YWIsIGVsZW0pO1xcbiBcXHRcXHRcXHRcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuIFxcdFxcdFxcdFxcdFxcdGNvcHlfbWFwX3ZhbHVlX2xvbmcobWFwLCBpbmZvLVxcdTAwM2VwZXJjcHVfdmFsdWVfYnVmICsgb2ZmLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7XFxuQEAgLTIyOTIsMTQgKzIzOTAsMTQgQEAgc3RhdGljIGxvbmcgYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19cXG4gXFx0XFx0YiA9IFxcdTAwMjZodGFiLVxcdTAwM2VidWNrZXRzW2ldO1xcbiBcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdFxcdGhlYWQgPSBcXHUwMDI2Yi1cXHUwMDNlaGVhZDtcXG4tXFx0XFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShlbGVtLCBuLCBoZWFkLCBoYXNoX25vZGUpIHtcXG4tXFx0XFx0XFx0a2V5ID0gZWxlbS1cXHUwMDNla2V5O1xcbitcXHRcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGVsZW0sIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKSB7XFxuK1xcdFxcdFxcdGtleSA9IGh0YWJfZWxlbV9rZXkoaHRhYiwgZWxlbSk7XFxuIFxcdFxcdFxcdGlmIChpc19wZXJjcHUpIHtcXG4gXFx0XFx0XFx0XFx0LyogY3VycmVudCBjcHUgdmFsdWUgZm9yIHBlcmNwdSBtYXAgKi9cXG4tXFx0XFx0XFx0XFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGVsZW0sIG1hcC1cXHUwMDNla2V5X3NpemUpO1xcbitcXHRcXHRcXHRcXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgZWxlbSk7XFxuIFxcdFxcdFxcdFxcdHZhbCA9IHRoaXNfY3B1X3B0cihwcHRyKTtcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0XFx0dmFsID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIG1hcC1cXHUwMDNla2V5X3NpemUpO1xcbitcXHRcXHRcXHRcXHR2YWwgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgZWxlbSk7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0bnVtX2VsZW1zKys7XFxuIFxcdFxcdFxcdHJldCA9IGNhbGxiYWNrX2ZuKCh1NjQpKGxvbmcpbWFwLCAodTY0KShsb25nKWtleSxcXG5AQCAtMjQwMywxMCArMjUwMSwxMSBAQCBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9scnVfbWFwX29wcyA9IHtcXG4gLyogQ2FsbGVkIGZyb20gZUJQRiBwcm9ncmFtICovXFxuIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4gXFx0c3RydWN0IGh0YWJfZWxlbSAqbCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbiBcXG4gXFx0aWYgKGwpXFxuLVxcdFxcdHJldHVybiB0aGlzX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVxcdTAwM2VrZXlfc2l6ZSkpO1xcbitcXHRcXHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbkBAIC0yNDE0LDYgKzI1MTMsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4gLyogaW5saW5lIGJwZl9tYXBfbG9va3VwX2VsZW0oKSBjYWxsIGZvciBwZXItQ1BVIGhhc2htYXAgKi9cXG4gc3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4gXFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XFxuIFxcbiBcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSlcXG5AQCAtMjQyNCw3ICsyNTI0LDcgQEAgc3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25cXG4gXFx0Kmluc24rKyA9IEJQRl9FTUlUX0NBTEwoX19odGFiX21hcF9sb29rdXBfZWxlbSk7XFxuIFxcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCBCUEZfUkVHXzAsIDAsIDMpO1xcbiBcXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCBCUEZfUkVHXzAsXFxuLVxcdFxcdFxcdFxcdG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGtleSkgKyByb3VuZHVwKG1hcC1cXHUwMDNla2V5X3NpemUsIDgpKTtcXG4rXFx0XFx0XFx0XFx0aHRhYi1cXHUwMDNla2V5X29mZnNldCArIHJvdW5kdXAobWFwLVxcdTAwM2VrZXlfc2l6ZSwgOCkpO1xcbiBcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XFxuIFxcdCppbnNuKysgPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7XFxuIFxcbkBAIC0yNDMzLDYgKzI1MzMsNyBAQCBzdGF0aWMgaW50IGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zblxcbiBcXG4gc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1MzIgY3B1KVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4gXFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcXG4gXFxuIFxcdGlmIChjcHUgXFx1MDAzZT0gbnJfY3B1X2lkcylcXG5AQCAtMjQ0MCwxOCArMjU0MSwxOSBAQCBzdGF0aWMgdm9pZCAqaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuIFxcbiBcXHRsID0gX19odGFiX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxuIFxcdGlmIChsKVxcbi1cXHRcXHRyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVxcdTAwM2VrZXlfc2l6ZSksIGNwdSk7XFxuK1xcdFxcdHJldHVybiBwZXJfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKSwgY3B1KTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4gXFx0c3RydWN0IGh0YWJfZWxlbSAqbCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbiBcXG4gXFx0aWYgKGwpIHtcXG4tXFx0XFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXFx1MDAyNmwtXFx1MDAzZWxydV9ub2RlKTtcXG4tXFx0XFx0cmV0dXJuIHRoaXNfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXFx1MDAzZWtleV9zaXplKSk7XFxuK1xcdFxcdGJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsKSk7XFxuK1xcdFxcdHJldHVybiB0aGlzX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCkpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gTlVMTDtcXG5AQCAtMjQ1OSw2ICsyNTYxLDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbiBcXG4gc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdTMyIGNwdSlcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuIFxcdHN0cnVjdCBodGFiX2VsZW0gKmw7XFxuIFxcbiBcXHRpZiAoY3B1IFxcdTAwM2U9IG5yX2NwdV9pZHMpXFxuQEAgLTI0NjYsOCArMjU2OSw4IEBAIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprXFxuIFxcbiBcXHRsID0gX19odGFiX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxuIFxcdGlmIChsKSB7XFxuLVxcdFxcdGJwZl9scnVfbm9kZV9zZXRfcmVmKFxcdTAwMjZsLVxcdTAwM2VscnVfbm9kZSk7XFxuLVxcdFxcdHJldHVybiBwZXJfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXFx1MDAzZWtleV9zaXplKSwgY3B1KTtcXG4rXFx0XFx0YnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGwpKTtcXG4rXFx0XFx0cmV0dXJuIHBlcl9jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpLCBjcHUpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gTlVMTDtcXG5AQCAtMjQ3NSw2ICsyNTc4LDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtcXG4gXFxuIGludCBicGZfcGVyY3B1X2hhc2hfY29weShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4gXFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcXG4gXFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcXG4gXFx0aW50IHJldCA9IC1FTk9FTlQ7XFxuQEAgLTI0OTQsNyArMjU5OCw3IEBAIGludCBicGZfcGVyY3B1X2hhc2hfY29weShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsXFxuIFxcdC8qIFdlIGRvIG5vdCBtYXJrIExSVSBtYXAgZWxlbWVudCBoZXJlIGluIG9yZGVyIHRvIG5vdCBtZXNzIHVwXFxuIFxcdCAqIGV2aWN0aW9uIGhldXJpc3RpY3Mgd2hlbiB1c2VyIHNwYWNlIGRvZXMgYSBtYXAgd2Fsay5cXG4gXFx0ICovXFxuLVxcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXFx1MDAzZWtleV9zaXplKTtcXG4rXFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xcbiBcXHRpZiAobWFwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfQ1BVKSB7XFxuIFxcdFxcdGNwdSA9IG1hcF9mbGFncyBcXHUwMDNlXFx1MDAzZSAzMjtcXG4gXFx0XFx0Y29weV9tYXBfdmFsdWUobWFwLCB2YWx1ZSwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7XFxuQEAgLTI1MzIsNiArMjYzNiw3IEBAIGludCBicGZfcGVyY3B1X2hhc2hfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuIHN0YXRpYyB2b2lkIGh0YWJfcGVyY3B1X21hcF9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuIHtcXG4rXFx0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xcbiBcXHRzdHJ1Y3QgaHRhYl9lbGVtICpsO1xcbiBcXHR2b2lkIF9fcGVyY3B1ICpwcHRyO1xcbiBcXHRpbnQgY3B1O1xcbkBAIC0yNTQ2LDcgKzI2NTEsNyBAQCBzdGF0aWMgdm9pZCBodGFiX3BlcmNwdV9tYXBfc2VxX3Nob3dfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuIFxcbiBcXHRidGZfdHlwZV9zZXFfc2hvdyhtYXAtXFx1MDAzZWJ0ZiwgbWFwLVxcdTAwM2VidGZfa2V5X3R5cGVfaWQsIGtleSwgbSk7XFxuIFxcdHNlcV9wdXRzKG0sIFxcXCI6IHtcXFxcblxcXCIpO1xcbi1cXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVxcdTAwM2VrZXlfc2l6ZSk7XFxuK1xcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKTtcXG4gXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbiBcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJcXFxcdGNwdSVkOiBcXFwiLCBjcHUpO1xcbiBcXHRcXHRidGZfdHlwZV9zZXFfc2hvdyhtYXAtXFx1MDAzZWJ0ZiwgbWFwLVxcdTAwM2VidGZfdmFsdWVfdHlwZV9pZCxcXG5AQCAtMjYxOSw4ICsyNzI0LDggQEAgc3RhdGljIHZvaWQgZmRfaHRhYl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaHRhYi1cXHUwMDNlbl9idWNrZXRzOyBpKyspIHtcXG4gXFx0XFx0aGVhZCA9IHNlbGVjdF9idWNrZXQoaHRhYiwgaSk7XFxuIFxcbi1cXHRcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xcbi1cXHRcXHRcXHR2b2lkICpwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKG1hcCwgbCk7XFxuK1xcdFxcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpIHtcXG4rXFx0XFx0XFx0dm9pZCAqcHRyID0gZmRfaHRhYl9tYXBfZ2V0X3B0cihodGFiLCBsKTtcXG4gXFxuIFxcdFxcdFxcdG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfZmRfcHV0X3B0cihtYXAsIHB0ciwgZmFsc2UpO1xcbiBcXHRcXHR9XFxuQEAgLTI3MDUsNiArMjgxMCw3IEBAIHN0YXRpYyB2b2lkICpodGFiX29mX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuIHN0YXRpYyBpbnQgaHRhYl9vZl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXFxuIHtcXG4rXFx0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xcbiBcXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjtcXG4gXFx0Y29uc3QgaW50IHJldCA9IEJQRl9SRUdfMDtcXG4gXFxuQEAgLTI3MTMsNyArMjgxOSw3IEBAIHN0YXRpYyBpbnQgaHRhYl9vZl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHQqaW5zbisrID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTtcXG4gXFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHJldCwgMCwgMik7XFxuIFxcdCppbnNuKysgPSBCUEZfQUxVNjRfSU1NKEJQRl9BREQsIHJldCxcXG4tXFx0XFx0XFx0XFx0b2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwga2V5KSArXFxuK1xcdFxcdFxcdFxcdGh0YWItXFx1MDAzZWtleV9vZmZzZXQgK1xcbiBcXHRcXHRcXHRcXHRyb3VuZF91cChtYXAtXFx1MDAzZWtleV9zaXplLCA4KSk7XFxuIFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfRFcsIHJldCwgcmV0LCAwKTtcXG4gXFxuQEAgLTMxMTIsNyArMzIxOCw3IEBAIHN0YXRpYyBpbnQgcmh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApO1xcbiBcXG4tXFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFxcdTAwMjZyaHRhYi1cXHUwMDNlbWEsIHJodGFiX21lbV9kdG9yKTtcXG4rXFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFxcdTAwMjZyaHRhYi1cXHUwMDNlbWEsIHJodGFiX21lbV9kdG9yLCBvZmZzZXRvZihzdHJ1Y3Qgcmh0YWJfZWxlbSwgZGF0YSkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCByaHRhYl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXApXFxuQEAgLTM1MzMsMyArMzYzOSwxNiBAQCBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcXG4gXFx0Lm1hcF9idGZfaWQgPSBcXHUwMDI2cmh0YWJfbWFwX2J0Zl9pZHNbMF0sXFxuIFxcdC5pdGVyX3NlcV9pbmZvID0gXFx1MDAyNnJoYXNoX2l0ZXJfc2VxX2luZm8sXFxuIH07XFxuK1xcbitzaXplX3QgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBzaXplb2Yoc3RydWN0IGJwZl9odGFiKTtcXG4rfVxcbitcXG4rdm9pZCBicGZfaHRhYl9tYXBfbWV0YV9pbml0KHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXBfbWV0YSwgc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmlubmVyX2h0YWJfbWV0YSA9IGNvbnRhaW5lcl9vZihpbm5lcl9tYXBfbWV0YSwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmlubmVyX2h0YWIgPSBjb250YWluZXJfb2YoaW5uZXJfbWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuK1xcbitcXHRpbm5lcl9odGFiX21ldGEtXFx1MDAzZWtleV9vZmZzZXQgPSBpbm5lcl9odGFiLVxcdTAwM2VrZXlfb2Zmc2V0O1xcbit9XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWFwX2luX21hcC5jIGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmNcXG5pbmRleCBkMmNiYWI0YmRmNjQ0Li5iMmRiNWQwYzk4YmVlIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvbWFwX2luX21hcC5jXFxuKysrIGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmNcXG5AQCAtNyw2ICs3LDE1IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwibWFwX2luX21hcC5oXFxcIlxcbiBcXG4rc3RhdGljIGJvb2wgYnBmX21hcF90eXBlX2lzX2h0YWIoZW51bSBicGZfbWFwX3R5cGUgdHlwZSlcXG4re1xcbitcXHRyZXR1cm4gdHlwZSA9PSBCUEZfTUFQX1RZUEVfSEFTSCB8fFxcbitcXHQgICAgICAgdHlwZSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0ggfHxcXG4rXFx0ICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX0xSVV9IQVNIIHx8XFxuK1xcdCAgICAgICB0eXBlID09IEJQRl9NQVBfVFlQRV9MUlVfUEVSQ1BVX0hBU0ggfHxcXG4rXFx0ICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX0hBU0hfT0ZfTUFQUztcXG4rfVxcbitcXG4gc3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfbWV0YV9hbGxvYyhpbnQgaW5uZXJfbWFwX3VmZClcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwLCAqaW5uZXJfbWFwX21ldGE7XFxuQEAgLTI5LDYgKzM4LDggQEAgc3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfbWV0YV9hbGxvYyhpbnQgaW5uZXJfbWFwX3VmZClcXG4gXFx0LyogSW4gc29tZSBjYXNlcyB2ZXJpZmllciBuZWVkcyB0byBhY2Nlc3MgYmV5b25kIGp1c3QgYmFzZSBtYXAuICovXFxuIFxcdGlmIChpbm5lcl9tYXAtXFx1MDAzZW9wcyA9PSBcXHUwMDI2YXJyYXlfbWFwX29wcyB8fCBpbm5lcl9tYXAtXFx1MDAzZW9wcyA9PSBcXHUwMDI2cGVyY3B1X2FycmF5X21hcF9vcHMpXFxuIFxcdFxcdGlubmVyX21hcF9tZXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9hcnJheSk7XFxuK1xcdGVsc2UgaWYgKGJwZl9tYXBfdHlwZV9pc19odGFiKGlubmVyX21hcC1cXHUwMDNlbWFwX3R5cGUpKVxcbitcXHRcXHRpbm5lcl9tYXBfbWV0YV9zaXplID0gYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSgpO1xcbiBcXG4gXFx0aW5uZXJfbWFwX21ldGEgPSBremFsbG9jKGlubmVyX21hcF9tZXRhX3NpemUsIEdGUF9VU0VSKTtcXG4gXFx0aWYgKCFpbm5lcl9tYXBfbWV0YSlcXG5AQCAtNzAsNiArODEsOCBAQCBzdHJ1Y3QgYnBmX21hcCAqYnBmX21hcF9tZXRhX2FsbG9jKGludCBpbm5lcl9tYXBfdWZkKVxcbiBcXHRcXHRpbm5lcl9hcnJheV9tZXRhLVxcdTAwM2VpbmRleF9tYXNrID0gaW5uZXJfYXJyYXktXFx1MDAzZWluZGV4X21hc2s7XFxuIFxcdFxcdGlubmVyX2FycmF5X21ldGEtXFx1MDAzZWVsZW1fc2l6ZSA9IGlubmVyX2FycmF5LVxcdTAwM2VlbGVtX3NpemU7XFxuIFxcdFxcdGlubmVyX21hcF9tZXRhLVxcdTAwM2VieXBhc3Nfc3BlY192MSA9IGlubmVyX21hcC1cXHUwMDNlYnlwYXNzX3NwZWNfdjE7XFxuK1xcdH0gZWxzZSBpZiAoYnBmX21hcF90eXBlX2lzX2h0YWIoaW5uZXJfbWFwLVxcdTAwM2VtYXBfdHlwZSkpIHtcXG4rXFx0XFx0YnBmX2h0YWJfbWFwX21ldGFfaW5pdChpbm5lcl9tYXBfbWV0YSwgaW5uZXJfbWFwKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gaW5uZXJfbWFwX21ldGE7XFxuIH1cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tYXBfaW5fbWFwLmggYi9rZXJuZWwvYnBmL21hcF9pbl9tYXAuaFxcbmluZGV4IDdkNjE2MDIzNTRkZTguLjFlZGMyMDU3NzJkOGMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9tYXBfaW5fbWFwLmhcXG4rKysgYi9rZXJuZWwvYnBmL21hcF9pbl9tYXAuaFxcbkBAIC0xNSw1ICsxNSw3IEBAIHZvaWQgKmJwZl9tYXBfZmRfZ2V0X3B0cihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXFxuIFxcdFxcdFxcdCBpbnQgdWZkKTtcXG4gdm9pZCBicGZfbWFwX2ZkX3B1dF9wdHIoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqcHRyLCBib29sIG5lZWRfZGVmZXIpO1xcbiB1MzIgYnBmX21hcF9mZF9zeXNfbG9va3VwX2VsZW0odm9pZCAqcHRyKTtcXG4rc2l6ZV90IGJwZl9odGFiX21hcF9tZXRhX3NpemUodm9pZCk7XFxuK3ZvaWQgYnBmX2h0YWJfbWFwX21ldGFfaW5pdChzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwX21ldGEsIHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXApO1xcbiBcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uY1xcbmluZGV4IDM3M2M4ZDE3ZWE1NTcuLjZiZDRjYjY4YzIwYzEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jXFxuQEAgLTExNCw3ICsxMTQsNyBAQCBzdGF0aWMgaW5saW5lIGludCBjaGVja19oYXNoKHZvaWQpXFxuIFxcdFZFUklGWShjaGVja19kZWZhdWx0X25vaW5saW5lKFxcdTAwMjZoYXNoLVxcdTAwM2VtYXAsIG1hcCkpO1xcbiBcXG4gXFx0VkVSSUZZKGhhc2gtXFx1MDAzZW5fYnVja2V0cyA9PSBNQVhfRU5UUklFUyk7XFxuLVxcdFZFUklGWShoYXNoLVxcdTAwM2VlbGVtX3NpemUgPT0gNjQpO1xcbitcXHRWRVJJRlkoaGFzaC1cXHUwMDNlZWxlbV9zaXplID09IDMyKTtcXG4gXFxuIFxcdFZFUklGWShoYXNoLVxcdTAwM2Vjb3VudC5jb3VudGVyID09IDApO1xcbiBcXHRWRVJJRlkoYnBmX21hcF9zdW1fZWxlbV9jb3VudChtYXApID09IDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMDo0MzozMy4wMjA2Nzg1NjlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0ODExMzc2NjYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh0YWJfbWFwX2FsbG9jXCIsXG4gICAgXCJodGFiX21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtXCIsXG4gICAgXCJodGFiX21hcF9kZWxldGVfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtXCIsXG4gICAgXCJodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW1cIixcbiAgICBcImh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW1cIixcbiAgICBcImh0YWJfbWFwX2dldF9uZXh0X2tleVwiLFxuICAgIFwiX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJicGZfbWFwX21ldGFfYWxsb2NcIixcbiAgICBcImJwZl9odGFiX21hcF9tZXRhX2luaXRcIixcbiAgICBcImJwZl9odGFiX21hcF9tZXRhX3NpemVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgdGhlIG1lbW9yeSBsYXlvdXQgb2YgQlBGIGhhc2ggbWFwIGVsZW1lbnRzIGJ5IGNvbmRpdGlvbmFsbHkgcmVtb3ZpbmcgdGhlIGhhc2ggdmFsdWUgZmllbGQgd2hlbiBpdCdzIG5vdCBuZWVkZWQuIEl0IGludHJvZHVjZXMgYGtleV9vZmZzZXRgIHRvIGR5bmFtaWNhbGx5IGNvbXB1dGUgdGhlIG9mZnNldCBvZiB0aGUga2V5IGFuZCB2YWx1ZSB3aXRoaW4gdGhlIGVsZW1lbnQuIEl0IGFsc28gbW9kaWZpZXMgYG1hcF9pbl9tYXAuY2AgdG8gcHJvcGFnYXRlIHRoaXMgb2Zmc2V0IGZvciBpbm5lciBtYXBzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIGhhc2ggbWFwIGltcGxlbWVudGF0aW9uIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFiN2NiNjY3ZmYyNzA0YjZiOTg1OGY5ZDZiMzAxYTU1NGVmMmViMDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDEwOjQzOjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuaW5kZXggOWYzOTRlMWFhMmU4NS4uODJiMTliZDU0MzEwOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTEwMCwxMyArMTAwLDE2IEBAIHN0cnVjdCBicGZfaHRhYiB7XG4gXHRzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgcGNvdW50O1xuIFx0YXRvbWljX3QgY291bnQ7XG4gXHRib29sIHVzZV9wZXJjcHVfY291bnRlcjtcbitcdGJvb2wgaGFzX2hhc2g7XG4gXHR1MzIgbl9idWNrZXRzO1x0LyogbnVtYmVyIG9mIGhhc2ggYnVja2V0cyAqL1xuIFx0dTMyIGVsZW1fc2l6ZTtcdC8qIHNpemUgb2YgZWFjaCBlbGVtZW50IGluIGJ5dGVzICovXG4rXHR1MzIga2V5X29mZnNldDtcdC8qIG9mZnNldCBvZiBrZXkgaW4gYnl0ZXMgKi9cbiBcdHUzMiBoYXNocm5kO1xuIH07XG4gXG4gLyogZWFjaCBodGFiIGVsZW1lbnQgaXMgc3RydWN0IGh0YWJfZWxlbSArIGtleSArIHZhbHVlICovXG4tc3RydWN0IGh0YWJfZWxlbSB7XG4rc3RydWN0IGh0YWJfZWxlbTtcbitzdHJ1Y3QgaHRhYl9ub2RlIHtcbiBcdHVuaW9uIHtcbiBcdFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgaGFzaF9ub2RlO1xuIFx0XHRzdHJ1Y3Qge1xuQEAgLTExNywxOCArMTIwLDMyIEBAIHN0cnVjdCBodGFiX2VsZW0ge1xuIFx0XHRcdH07XG4gXHRcdH07XG4gXHR9O1xuLVx0dW5pb24ge1xuLVx0XHQvKiBwb2ludGVyIHRvIHBlci1jcHUgcG9pbnRlciAqL1xuLVx0XHR2b2lkICpwdHJfdG9fcHB0cjtcbi1cdFx0c3RydWN0IGJwZl9scnVfbm9kZSBscnVfbm9kZTtcbi1cdH07XG4tXHR1MzIgaGFzaDtcbi1cdGNoYXIga2V5W10gX19hbGlnbmVkKDgpO1xuK307XG4rXG4rc3RydWN0IGh0YWJfZWxlbSB7XG4rXHRzdHJ1Y3QgaHRhYl9ub2RlIG5vZGU7XG4rXHR1OCBkYXRhW10gX19hbGlnbmVkKDgpO1xuK307XG4rXG4rc3RydWN0IGh0YWJfZWxlbV9scnUge1xuK1x0c3RydWN0IGh0YWJfbm9kZSBub2RlO1xuK1x0c3RydWN0IGJwZl9scnVfbm9kZSBscnVfbm9kZTtcbitcdHU4IGRhdGFbXSBfX2FsaWduZWQoOCk7XG4rfTtcbitcbisvKiBPbmx5IGZvciBub24tcHJlYWxsb2NhdGVkIFBDUFUgbWFwcy4gUHJlYWxsb2NhdGVkIFBDUFUgbWFwcyBkb24ndCBuZWVkXG4rICogcHRyX3RvX3BwdHIsIGFuZCB1c2UgaHRhYl9lbGVtLlxuKyAqL1xuK3N0cnVjdCBodGFiX2VsZW1fcGNwdSB7XG4rXHRzdHJ1Y3QgaHRhYl9ub2RlIG5vZGU7XG4rXHR2b2lkICpwdHJfdG9fcHB0cjtcbitcdHU4IGRhdGFbXSBfX2FsaWduZWQoOCk7XG4gfTtcbiBcbiBzdHJ1Y3QgaHRhYl9idGZfcmVjb3JkIHtcbiBcdHN0cnVjdCBidGZfcmVjb3JkICpyZWNvcmQ7XG4gXHR1MzIga2V5X3NpemU7XG4rXHR1MzIga2V5X29mZnNldDtcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBodGFiX2lzX3ByZWFsbG9jKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbkBAIC0xMzYsNiArMTUzLDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBodGFiX2lzX3ByZWFsbG9jKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdHJldHVybiAhKGh0YWItXHUwMDNlbWFwLm1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfbHJ1X25vZGUgKmh0YWJfZWxlbV9scnVfbm9kZShzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuK3tcbitcdHJldHVybiBcdTAwMjYoKHN0cnVjdCBodGFiX2VsZW1fbHJ1ICopbCktXHUwMDNlbHJ1X25vZGU7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCAqaHRhYl9lbGVtX2dldF9wdHJfdG9fcHB0cihzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuK3tcbitcdHJldHVybiAoKHN0cnVjdCBodGFiX2VsZW1fcGNwdSAqKWwpLVx1MDAzZXB0cl90b19wcHRyO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9wdHJfdG9fcHB0cihzdHJ1Y3QgaHRhYl9lbGVtICpsLCB2b2lkICpwdHIpXG4re1xuK1x0KChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS1cdTAwM2VwdHJfdG9fcHB0ciA9IHB0cjtcbit9XG4rXG4gc3RhdGljIHZvaWQgaHRhYl9pbml0X2J1Y2tldHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIHtcbiBcdHVuc2lnbmVkIGludCBpO1xuQEAgLTE4MywyNSArMjE1LDMwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19mZF9odGFiKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdHJldHVybiBodGFiLVx1MDAzZW1hcC5tYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfSEFTSF9PRl9NQVBTO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV92YWx1ZShzdHJ1Y3QgaHRhYl9lbGVtICpsLCB1MzIga2V5X3NpemUpXG4rc3RhdGljIGlubGluZSB2b2lkICpodGFiX2VsZW1fa2V5KHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbit7XG4rXHRyZXR1cm4gKHZvaWQgKilsICsgaHRhYi1cdTAwM2VrZXlfb2Zmc2V0O1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV92YWx1ZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4ge1xuLVx0cmV0dXJuIGwtXHUwMDNla2V5ICsgcm91bmRfdXAoa2V5X3NpemUsIDgpO1xuK1x0cmV0dXJuIGh0YWJfZWxlbV9rZXkoaHRhYiwgbCkgKyByb3VuZF91cChodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSwgOCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBodGFiX2VsZW1fc2V0X3B0cihzdHJ1Y3QgaHRhYl9lbGVtICpsLCB1MzIga2V5X3NpemUsXG4rc3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfcHRyKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCxcbiBcdFx0XHRcdCAgICAgdm9pZCBfX3BlcmNwdSAqcHB0cilcbiB7XG4tXHQqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGwsIGtleV9zaXplKSA9IHBwdHI7XG4rXHQqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpID0gcHB0cjtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIF9fcGVyY3B1ICpodGFiX2VsZW1fZ2V0X3B0cihzdHJ1Y3QgaHRhYl9lbGVtICpsLCB1MzIga2V5X3NpemUpXG4rc3RhdGljIGlubGluZSB2b2lkIF9fcGVyY3B1ICpodGFiX2VsZW1fZ2V0X3B0cihzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4ge1xuLVx0cmV0dXJuICoodm9pZCBfX3BlcmNwdSAqKilodGFiX2VsZW1fdmFsdWUobCwga2V5X3NpemUpO1xuK1x0cmV0dXJuICoodm9pZCBfX3BlcmNwdSAqKilodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkICpmZF9odGFiX21hcF9nZXRfcHRyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4rc3RhdGljIHZvaWQgKmZkX2h0YWJfbWFwX2dldF9wdHIoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuIHtcbi1cdHJldHVybiAqKHZvaWQgKiopaHRhYl9lbGVtX3ZhbHVlKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRyZXR1cm4gKih2b2lkICoqKWh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmdldF9odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCBpbnQgaSlcbkBAIC0yMDksNiArMjQ2LDMzIEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpnZXRfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgaW50IGkpXG4gXHRyZXR1cm4gKHN0cnVjdCBodGFiX2VsZW0gKikgKGh0YWItXHUwMDNlZWxlbXMgKyBpICogKHU2NClodGFiLVx1MDAzZWVsZW1fc2l6ZSk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBodGFiX2hhc19oYXNoKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbit7XG4rXHRyZXR1cm4gaHRhYi1cdTAwM2VoYXNfaGFzaDtcbit9XG4rXG4rc3RhdGljIGlubGluZSB1MzIgaHRhYl9lbGVtX2hhc2goc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuK3tcbitcdGlmIChodGFiX2lzX2xydShodGFiKSlcbitcdFx0cmV0dXJuICoodTMyICopKChzdHJ1Y3QgaHRhYl9lbGVtX2xydSAqKWwpLVx1MDAzZWRhdGE7XG4rXHRlbHNlIGlmIChodGFiX2lzX3BlcmNwdShodGFiKSBcdTAwMjZcdTAwMjYgIWh0YWJfaXNfcHJlYWxsb2MoaHRhYikpXG4rXHRcdHJldHVybiAqKHUzMiAqKSgoc3RydWN0IGh0YWJfZWxlbV9wY3B1ICopbCktXHUwMDNlZGF0YTtcbitcdGVsc2VcbitcdFx0cmV0dXJuICoodTMyICopbC1cdTAwM2VkYXRhO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9oYXNoKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGhhc2gpXG4re1xuK1x0aWYgKCFodGFiX2hhc19oYXNoKGh0YWIpKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAoaHRhYl9pc19scnUoaHRhYikpXG4rXHRcdCoodTMyICopKChzdHJ1Y3QgaHRhYl9lbGVtX2xydSAqKWwpLVx1MDAzZWRhdGEgPSBoYXNoO1xuK1x0ZWxzZSBpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikgXHUwMDI2XHUwMDI2ICFodGFiX2lzX3ByZWFsbG9jKGh0YWIpKVxuK1x0XHQqKHUzMiAqKSgoc3RydWN0IGh0YWJfZWxlbV9wY3B1ICopbCktXHUwMDNlZGF0YSA9IGhhc2g7XG4rXHRlbHNlXG4rXHRcdCoodTMyICopbC1cdTAwM2VkYXRhID0gaGFzaDtcbit9XG4rXG4gLyogQm90aCBwZXJjcHUgYW5kIGZkIGh0YWIgc3VwcG9ydCBpbi1wbGFjZSB1cGRhdGUsIHNvIG5vIG5lZWQgZm9yXG4gICogZXh0cmEgZWxlbS4gTFJVIGl0c2VsZiBjYW4gcmVtb3ZlIHRoZSBsZWFzdCB1c2VkIGVsZW1lbnQsIHNvXG4gICogdGhlcmUgaXMgbm8gbmVlZCBmb3IgYW4gZXh0cmEgZWxlbSBkdXJpbmcgbWFwX3VwZGF0ZS5cbkBAIC0yMzEsNyArMjk1LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4gXG4gXHRcdGVsZW0gPSBnZXRfaHRhYl9lbGVtKGh0YWIsIGkpO1xuIFx0XHRicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhcdTAwMjZodGFiLVx1MDAzZW1hcCxcbi1cdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4rXHRcdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBlbGVtKSk7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuIH1cbkBAIC0yNTQsNyArMzE4LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcbiBcdFx0ZWxlbSA9IGdldF9odGFiX2VsZW0oaHRhYiwgaSk7XG4gXHRcdGlmIChodGFiX2lzX3BlcmNwdShodGFiKSkge1xuLVx0XHRcdHZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSk7XG4rXHRcdFx0dm9pZCBfX3BlcmNwdSAqcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGVsZW0pO1xuIFx0XHRcdGludCBjcHU7XG4gXG4gXHRcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuQEAgLTI2Myw3ICszMjcsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2ZyZWVfcHJlYWxsb2NlZF9maWVsZHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRicGZfb2JqX2ZyZWVfZmllbGRzKGh0YWItXHUwMDNlbWFwLnJlY29yZCxcbi1cdFx0XHRcdFx0ICAgIGh0YWJfZWxlbV92YWx1ZShlbGVtLCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xuK1x0XHRcdFx0XHQgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pKTtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdFx0fVxuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbkBAIC0yODAsOCArMzQ0LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX2VsZW1zKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGh0YWItXHUwMDNlbWFwLm1heF9lbnRyaWVzOyBpKyspIHtcbiBcdFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcbiBcbi1cdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGdldF9odGFiX2VsZW0oaHRhYiwgaSksXG4tXHRcdFx0XHRcdCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSk7XG4rXHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBnZXRfaHRhYl9lbGVtKGh0YWIsIGkpKTtcbiBcdFx0ZnJlZV9wZXJjcHUocHB0cik7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuQEAgLTMwOCw4ICszNzEsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqcHJlYWxsb2NfbHJ1X3BvcChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcbiBcbiBcdGlmIChub2RlKSB7XG4gXHRcdGJwZl9tYXBfaW5jX2VsZW1fY291bnQoXHUwMDI2aHRhYi1cdTAwM2VtYXApO1xuLVx0XHRsID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKTtcbi1cdFx0bWVtY3B5KGwtXHUwMDNla2V5LCBrZXksIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKTtcbitcdFx0bCA9IChzdHJ1Y3QgaHRhYl9lbGVtICopY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSk7XG4rXHRcdG1lbWNweShodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKTtcbiBcdFx0cmV0dXJuIGw7XG4gXHR9XG4gXG5AQCAtMzQwLDggKzQwMyw3IEBAIHN0YXRpYyBpbnQgcHJlYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4gXHRcdFx0XHRcdCAgICBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4gXHRcdGlmICghcHB0cilcbiBcdFx0XHRnb3RvIGZyZWVfZWxlbXM7XG4tXHRcdGh0YWJfZWxlbV9zZXRfcHRyKGdldF9odGFiX2VsZW0oaHRhYiwgaSksIGh0YWItXHUwMDNlbWFwLmtleV9zaXplLFxuLVx0XHRcdFx0ICBwcHRyKTtcbitcdFx0aHRhYl9lbGVtX3NldF9wdHIoaHRhYiwgZ2V0X2h0YWJfZWxlbShodGFiLCBpKSwgcHB0cik7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuIFxuQEAgLTM0OSw4ICs0MTEsOCBAQCBzdGF0aWMgaW50IHByZWFsbG9jX2luaXQoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0aWYgKGh0YWJfaXNfbHJ1KGh0YWIpKVxuIFx0XHRlcnIgPSBicGZfbHJ1X2luaXQoXHUwMDI2aHRhYi1cdTAwM2VscnUsXG4gXHRcdFx0XHQgICBodGFiLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX05PX0NPTU1PTl9MUlUsXG4tXHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoKSAtXG4tXHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBscnVfbm9kZSksXG4rXHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgZGF0YSkgLVxuK1x0XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSxcbiBcdFx0XHRcdCAgIGh0YWJfbHJ1X21hcF9kZWxldGVfbm9kZSxcbiBcdFx0XHRcdCAgIGh0YWIpO1xuIFx0ZWxzZVxuQEAgLTM2MSwxMSArNDIzLDExIEBAIHN0YXRpYyBpbnQgcHJlYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4gXG4gXHRpZiAoaHRhYl9pc19scnUoaHRhYikpXG4gXHRcdGJwZl9scnVfcG9wdWxhdGUoXHUwMDI2aHRhYi1cdTAwM2VscnUsIGh0YWItXHUwMDNlZWxlbXMsXG4tXHRcdFx0XHQgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpLFxuK1x0XHRcdFx0IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSksXG4gXHRcdFx0XHQgaHRhYi1cdTAwM2VlbGVtX3NpemUsIG51bV9lbnRyaWVzKTtcbiBcdGVsc2VcbiBcdFx0cGNwdV9mcmVlbGlzdF9wb3B1bGF0ZShcdTAwMjZodGFiLVx1MDAzZWZyZWVsaXN0LFxuLVx0XHRcdFx0ICAgICAgIGh0YWItXHUwMDNlZWxlbXMgKyBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZSksXG4rXHRcdFx0XHQgICAgICAgaHRhYi1cdTAwM2VlbGVtcyArIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIG5vZGUuZm5vZGUpLFxuIFx0XHRcdFx0ICAgICAgIGh0YWItXHUwMDNlZWxlbV9zaXplLCBudW1fZW50cmllcyk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC00MDEsNyArNDYzLDcgQEAgc3RhdGljIGludCBhbGxvY19leHRyYV9lbGVtcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4gXHRcdC8qIHBvcCB3aWxsIHN1Y2NlZWQsIHNpbmNlIHByZWFsbG9jX2luaXQoKVxuIFx0XHQgKiBwcmVhbGxvY2F0ZWQgZXh0cmEgbnVtX3Bvc3NpYmxlX2NwdXMgZWxlbWVudHNcbiBcdFx0ICovXG4tXHRcdGxfbmV3ID0gY29udGFpbmVyX29mKGwsIHN0cnVjdCBodGFiX2VsZW0sIGZub2RlKTtcbitcdFx0bF9uZXcgPSBjb250YWluZXJfb2YobCwgc3RydWN0IGh0YWJfZWxlbSwgbm9kZS5mbm9kZSk7XG4gXHRcdCpwZXJfY3B1X3B0cihwcHRyLCBjcHUpID0gbF9uZXc7XG4gXHR9XG4gXHRodGFiLVx1MDAzZWV4dHJhX2VsZW1zID0gcHB0cjtcbkBAIC00MjUsOCArNDg3LDggQEAgc3RhdGljIGludCBodGFiX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdGJvb2wgemVyb19zZWVkID0gKGF0dHItXHUwMDNlbWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9aRVJPX1NFRUQpO1xuIFx0aW50IG51bWFfbm9kZSA9IGJwZl9tYXBfYXR0cl9udW1hX25vZGUoYXR0cik7XG4gXG4tXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgZm5vZGUubmV4dCkgIT1cbi1cdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoX25vZGUucHByZXYpKTtcbitcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9ub2RlLCBmbm9kZS5uZXh0KSAhPVxuK1x0XHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX25vZGUsIGhhc2hfbm9kZS5wcHJldikpO1xuIFxuIFx0aWYgKHplcm9fc2VlZCBcdTAwMjZcdTAwMjYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpXG4gXHRcdC8qIEd1YXJkIGFnYWluc3QgbG9jYWwgRG9TLCBhbmQgZGlzY291cmFnZSBwcm9kdWN0aW9uIHVzZS4gKi9cbkBAIC00NzYsNyArNTM4LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9tZW1fZHRvcih2b2lkICpvYmosIHZvaWQgKmN0eClcbiBcdGlmIChJU19FUlJfT1JfTlVMTChocmVjLVx1MDAzZXJlY29yZCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdG1hcF92YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShlbGVtLCBocmVjLVx1MDAzZWtleV9zaXplKTtcbitcdG1hcF92YWx1ZSA9ICh2b2lkICopZWxlbSArIGhyZWMtXHUwMDNla2V5X29mZnNldCArIHJvdW5kX3VwKGhyZWMtXHUwMDNla2V5X3NpemUsIDgpO1xuIFx0YnBmX29ial9mcmVlX2ZpZWxkcyhocmVjLVx1MDAzZXJlY29yZCwgbWFwX3ZhbHVlKTtcbiB9XG4gXG5AQCAtNTAyLDcgKzU2NCw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZHRvcl9jdHhfZnJlZSh2b2lkICpjdHgpXG4gfVxuIFxuIHN0YXRpYyBpbnQgYnBmX21hX3NldF9kdG9yKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSxcbi1cdFx0XHQgICB2b2lkICgqZHRvcikodm9pZCAqLCB2b2lkICopKVxuK1x0XHRcdCAgIHZvaWQgKCpkdG9yKSh2b2lkICosIHZvaWQgKiksIHUzMiBrZXlfb2Zmc2V0KVxuIHtcbiBcdHN0cnVjdCBodGFiX2J0Zl9yZWNvcmQgKmhyZWM7XG4gXHRpbnQgZXJyO1xuQEAgLTUxNSw2ICs1NzcsNyBAQCBzdGF0aWMgaW50IGJwZl9tYV9zZXRfZHRvcihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsXG4gXHRpZiAoIWhyZWMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0aHJlYy1cdTAwM2VrZXlfc2l6ZSA9IG1hcC1cdTAwM2VrZXlfc2l6ZTtcbitcdGhyZWMtXHUwMDNla2V5X29mZnNldCA9IGtleV9vZmZzZXQ7XG4gXHRocmVjLVx1MDAzZXJlY29yZCA9IGJ0Zl9yZWNvcmRfZHVwKG1hcC1cdTAwM2VyZWNvcmQpO1xuIFx0aWYgKElTX0VSUihocmVjLVx1MDAzZXJlY29yZCkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihocmVjLVx1MDAzZXJlY29yZCk7XG5AQCAtNTM3LDkgKzYwMCw5IEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiBcdCAqIHBvcHVsYXRlZCBpbiBodGFiX21hcF9hbGxvYygpLCBzbyBpdCB3aWxsIGFsd2F5cyBhcHBlYXIgYXMgTlVMTC5cbiBcdCAqL1xuIFx0aWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpKVxuLVx0XHRyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgXHUwMDI2aHRhYi1cdTAwM2VwY3B1X21hLCBodGFiX3BjcHVfbWVtX2R0b3IpO1xuK1x0XHRyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgXHUwMDI2aHRhYi1cdTAwM2VwY3B1X21hLCBodGFiX3BjcHVfbWVtX2R0b3IsIGh0YWItXHUwMDNla2V5X29mZnNldCk7XG4gXHRlbHNlXG4tXHRcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZodGFiLVx1MDAzZW1hLCBodGFiX21lbV9kdG9yKTtcbitcdFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFx1MDAyNmh0YWItXHUwMDNlbWEsIGh0YWJfbWVtX2R0b3IsIGh0YWItXHUwMDNla2V5X29mZnNldCk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG5AQCAtNTYyLDYgKzYyNSwxMiBAQCBzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuIFxuIFx0YnBmX21hcF9pbml0X2Zyb21fYXR0cihcdTAwMjZodGFiLVx1MDAzZW1hcCwgYXR0cik7XG4gXG4rXHQvKiBBdm9pZCBoYXNoIG1lbW9yeSB1c2UgYW5kIGNvbXBhcmlzb25zIHdoZXJlIHVubmVjZXNzYXJ5LlxuK1x0ICogdTMyIGhhc2ggcmVhZHMgYXJlIGFsd2F5cyBhdG9taWMuIElmIHdlIGVsaWRlIHRoZW0sIGtleSBjb21wYXJpc29ucyBtdXN0IGFsc28gYmUgYXRvbWljXG4rXHQgKiB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZSBrZXkgbWF0Y2hlcyBkdWUgdG8gdG9ybiBrZXkgcmVhZHMgLyB3cml0ZXMuIFNvIGNoZWNrIGtleV9zaXplLlxuK1x0ICovXG4rXHRodGFiLVx1MDAzZWhhc19oYXNoID0gaHRhYl9pc19scnUoaHRhYikgfHwgaHRhYi1cdTAwM2VtYXAua2V5X3NpemUgXHUwMDNlIHNpemVvZih1bnNpZ25lZCBsb25nKTtcbitcbiBcdGlmIChwZXJjcHVfbHJ1KSB7XG4gXHRcdC8qIGVuc3VyZSBlYWNoIENQVSdzIGxydSBsaXN0IGhhcyBcdTAwM2U9MSBlbGVtZW50cy5cbiBcdFx0ICogc2luY2Ugd2UgYXJlIGF0IGl0LCBtYWtlIGVhY2ggbHJ1IGxpc3QgaGFzIHRoZSBzYW1lXG5AQCAtNTgzLDggKzY1MiwxNiBAQCBzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuIFxuIFx0aHRhYi1cdTAwM2VuX2J1Y2tldHMgPSByb3VuZHVwX3Bvd19vZl90d28oaHRhYi1cdTAwM2VtYXAubWF4X2VudHJpZXMpO1xuIFxuLVx0aHRhYi1cdTAwM2VlbGVtX3NpemUgPSBzaXplb2Yoc3RydWN0IGh0YWJfZWxlbSkgK1xuLVx0XHRcdCAgcm91bmRfdXAoaHRhYi1cdTAwM2VtYXAua2V5X3NpemUsIDgpO1xuK1x0aWYgKGh0YWJfaXNfbHJ1KGh0YWIpKVxuK1x0XHRodGFiLVx1MDAzZWtleV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgZGF0YSkgKyA4O1xuK1x0ZWxzZSBpZiAocGVyY3B1IFx1MDAyNlx1MDAyNiAhcHJlYWxsb2MpXG4rXHRcdGh0YWItXHUwMDNla2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fcGNwdSwgZGF0YSkgK1xuK1x0XHRcdFx0ICAgKGh0YWJfaGFzX2hhc2goaHRhYikgPyA4IDogMCk7XG4rXHRlbHNlXG4rXHRcdGh0YWItXHUwMDNla2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGRhdGEpICtcbitcdFx0XHRcdCAgIChodGFiX2hhc19oYXNoKGh0YWIpID8gOCA6IDApO1xuK1xuK1x0aHRhYi1cdTAwM2VlbGVtX3NpemUgPSBodGFiLVx1MDAzZWtleV9vZmZzZXQgKyByb3VuZF91cChodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSwgOCk7XG4gXHRpZiAocGVyY3B1KVxuIFx0XHRodGFiLVx1MDAzZWVsZW1fc2l6ZSArPSBzaXplb2Yodm9pZCAqKTtcbiBcdGVsc2VcbkBAIC02OTIsMTUgKzc2OSwyMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpzZWxlY3RfYnVja2V0KHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgdTMyXG4gfVxuIFxuIC8qIHRoaXMgbG9va3VwIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIGNhbGxlZCB3aXRoIGJ1Y2tldCBsb2NrIHRha2VuICovXG4tc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCwgdTMyIGhhc2gsXG4rc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9lbGVtX3JhdyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCwgdTMyIGhhc2gsXG4gXHRcdFx0XHRcdCB2b2lkICprZXksIHUzMiBrZXlfc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4tXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxuLVx0XHRpZiAobC1cdTAwM2VoYXNoID09IGhhc2ggXHUwMDI2XHUwMDI2ICFtZW1jbXAoXHUwMDI2bC1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpKVxuLVx0XHRcdHJldHVybiBsO1xuK1x0aWYgKGh0YWJfaGFzX2hhc2goaHRhYikpIHtcbitcdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKVxuK1x0XHRcdGlmIChodGFiX2VsZW1faGFzaChodGFiLCBsKSA9PSBoYXNoIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAhbWVtY21wKGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleSwga2V5X3NpemUpKVxuK1x0XHRcdFx0cmV0dXJuIGw7XG4rXHR9IGVsc2Uge1xuK1x0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpXG4rXHRcdFx0aWYgKCFtZW1jbXAoaHRhYl9lbGVtX2tleShodGFiLCBsKSwga2V5LCBrZXlfc2l6ZSkpXG4rXHRcdFx0XHRyZXR1cm4gbDtcbitcdH1cbiBcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC03MDksNyArNzk0LDggQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCwgdTMyIGhhc2hcbiAgKiB0aGUgdW5saWtlbHkgZXZlbnQgd2hlbiBlbGVtZW50cyBtb3ZlZCBmcm9tIG9uZSBidWNrZXQgaW50byBhbm90aGVyXG4gICogd2hpbGUgbGluayBsaXN0IGlzIGJlaW5nIHdhbGtlZFxuICAqL1xuLXN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsXG4rc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9udWxsc19lbGVtX3JhdyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsXG4rXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCxcbiBcdFx0XHRcdFx0ICAgICAgIHUzMiBoYXNoLCB2b2lkICprZXksXG4gXHRcdFx0XHRcdCAgICAgICB1MzIga2V5X3NpemUsIHUzMiBuX2J1Y2tldHMpXG4ge1xuQEAgLTcxNyw5ICs4MDMsMTYgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9udWxsc19lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCxcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4gYWdhaW46XG4tXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxuLVx0XHRpZiAobC1cdTAwM2VoYXNoID09IGhhc2ggXHUwMDI2XHUwMDI2ICFtZW1jbXAoXHUwMDI2bC1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpKVxuLVx0XHRcdHJldHVybiBsO1xuK1x0aWYgKGh0YWJfaGFzX2hhc2goaHRhYikpIHtcbitcdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKVxuK1x0XHRcdGlmIChodGFiX2VsZW1faGFzaChodGFiLCBsKSA9PSBoYXNoIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAhbWVtY21wKGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleSwga2V5X3NpemUpKVxuK1x0XHRcdFx0cmV0dXJuIGw7XG4rXHR9IGVsc2Uge1xuK1x0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpXG4rXHRcdFx0aWYgKCFtZW1jbXAoaHRhYl9lbGVtX2tleShodGFiLCBsKSwga2V5LCBrZXlfc2l6ZSkpXG4rXHRcdFx0XHRyZXR1cm4gbDtcbitcdH1cbiBcbiBcdGlmICh1bmxpa2VseShnZXRfbnVsbHNfdmFsdWUobikgIT0gKGhhc2ggXHUwMDI2IChuX2J1Y2tldHMgLSAxKSkpKVxuIFx0XHRnb3RvIGFnYWluO1xuQEAgLTc0NywxNyArODQwLDE4IEBAIHN0YXRpYyB2b2lkICpfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcbiBcdGhlYWQgPSBzZWxlY3RfYnVja2V0KGh0YWIsIGhhc2gpO1xuIFxuLVx0bCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLVx1MDAzZW5fYnVja2V0cyk7XG4rXHRsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItXHUwMDNlbl9idWNrZXRzKTtcbiBcbiBcdHJldHVybiBsO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCAqaHRhYl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcbiBcdGlmIChsKVxuLVx0XHRyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRcdHJldHVybiBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XG4gXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtNzc1LDYgKzg2OSw3IEBAIHN0YXRpYyB2b2lkICpodGFiX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gICovXG4gc3RhdGljIGludCBodGFiX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG4ge1xuK1x0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XG4gXHRjb25zdCBpbnQgcmV0ID0gQlBGX1JFR18wO1xuIFxuQEAgLTc4Myw3ICs4NzgsNyBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiBcdCppbnNuKysgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pO1xuIFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHJldCwgMCwgMSk7XG4gXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCByZXQsXG4tXHRcdFx0XHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICtcbitcdFx0XHRcdGh0YWItXHUwMDNla2V5X29mZnNldCArXG4gXHRcdFx0XHRyb3VuZF91cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbiBcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XG4gfVxuQEAgLTc5MSwxMiArODg2LDEzIEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqX19odGFiX2xydV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdFx0XHRcdHZvaWQgKmtleSwgY29uc3QgYm9vbCBtYXJrKVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcbiBcdGlmIChsKSB7XG4gXHRcdGlmIChtYXJrKVxuLVx0XHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKFx1MDAyNmwtXHUwMDNlbHJ1X25vZGUpO1xuLVx0XHRyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRcdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGwpKTtcbitcdFx0cmV0dXJuIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcbiBcdH1cbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTgxNSw2ICs5MTEsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gc3RhdGljIGludCBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHRcdFx0ICAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiB7XG4rXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjtcbiBcdGNvbnN0IGludCByZXQgPSBCUEZfUkVHXzA7XG4gXHRjb25zdCBpbnQgcmVmX3JlZyA9IEJQRl9SRUdfMTtcbkBAIC04MjQsMTUgKzkyMSwxNSBAQCBzdGF0aWMgaW50IGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHQqaW5zbisrID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTtcbiBcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCByZXQsIDAsIDQpO1xuIFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9CLCByZWZfcmVnLCByZXQsXG4tXHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpICtcbitcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpICtcbiBcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX2xydV9ub2RlLCByZWYpKTtcbiBcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSk5FLCByZWZfcmVnLCAwLCAxKTtcbiBcdCppbnNuKysgPSBCUEZfU1RfTUVNKEJQRl9CLCByZXQsXG4tXHRcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBscnVfbm9kZSkgK1xuK1x0XHRcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSArXG4gXHRcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX2xydV9ub2RlLCByZWYpLFxuIFx0XHRcdCAgICAgMSk7XG4gXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCByZXQsXG4tXHRcdFx0XHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICtcbitcdFx0XHRcdGh0YWItXHUwMDNla2V5X29mZnNldCArXG4gXHRcdFx0XHRyb3VuZF91cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbiBcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XG4gfVxuQEAgLTg0NCwxMyArOTQxLDEzIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYixcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpKSB7XG4tXHRcdHZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSk7XG4rXHRcdHZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBlbGVtKTtcbiBcdFx0aW50IGNwdTtcbiBcbiBcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcbiBcdFx0XHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuIFx0fSBlbHNlIHtcbi1cdFx0dm9pZCAqbWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKTtcbitcdFx0dm9pZCAqbWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pO1xuIFxuIFx0XHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIG1hcF92YWx1ZSk7XG4gXHR9XG5AQCAtODY5LDE3ICs5NjYsMTcgQEAgc3RhdGljIGJvb2wgaHRhYl9scnVfbWFwX2RlbGV0ZV9ub2RlKHZvaWQgKmFyZywgc3RydWN0IGJwZl9scnVfbm9kZSAqbm9kZSlcbiBcdHN0cnVjdCBidWNrZXQgKmI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0dGd0X2wgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpO1xuLVx0YiA9IF9fc2VsZWN0X2J1Y2tldChodGFiLCB0Z3RfbC1cdTAwM2VoYXNoKTtcbitcdHRndF9sID0gKHN0cnVjdCBodGFiX2VsZW0gKiljb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKTtcbitcdGIgPSBfX3NlbGVjdF9idWNrZXQoaHRhYiwgaHRhYl9lbGVtX2hhc2goaHRhYiwgdGd0X2wpKTtcbiBcdGhlYWQgPSBcdTAwMjZiLVx1MDAzZWhlYWQ7XG4gXG4gXHRyZXQgPSBodGFiX2xvY2tfYnVja2V0KGIsIFx1MDAyNmZsYWdzKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShsLCBuLCBoZWFkLCBoYXNoX25vZGUpXG4rXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpXG4gXHRcdGlmIChsID09IHRndF9sKSB7XG4tXHRcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZWhhc2hfbm9kZSk7XG4rXHRcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZW5vZGUuaGFzaF9ub2RlKTtcbiBcdFx0XHRicGZfbWFwX2RlY19lbGVtX2NvdW50KFx1MDAyNmh0YWItXHUwMDNlbWFwKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTkxMiwxOCArMTAwOSwxOSBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxuIFx0aGVhZCA9IHNlbGVjdF9idWNrZXQoaHRhYiwgaGFzaCk7XG4gXG4gXHQvKiBsb29rdXAgdGhlIGtleSAqL1xuLVx0bCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLVx1MDAzZW5fYnVja2V0cyk7XG4rXHRsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItXHUwMDNlbl9idWNrZXRzKTtcbiBcbiBcdGlmICghbClcbiBcdFx0Z290byBmaW5kX2ZpcnN0X2VsZW07XG4gXG4gXHQvKiBrZXkgd2FzIGZvdW5kLCBnZXQgbmV4dCBrZXkgaW4gdGhlIHNhbWUgYnVja2V0ICovXG4tXHRuZXh0X2wgPSBobGlzdF9udWxsc19lbnRyeV9zYWZlKHJjdV9kZXJlZmVyZW5jZV9yYXcoaGxpc3RfbnVsbHNfbmV4dF9yY3UoXHUwMDI2bC1cdTAwM2VoYXNoX25vZGUpKSxcbi1cdFx0XHRcdCAgc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKTtcbitcdG5leHRfbCA9IGhsaXN0X251bGxzX2VudHJ5X3NhZmUoXG4rXHRcdFx0cmN1X2RlcmVmZXJlbmNlX3JhdyhobGlzdF9udWxsc19uZXh0X3JjdShcdTAwMjZsLVx1MDAzZW5vZGUuaGFzaF9ub2RlKSksXG4rXHRcdFx0c3RydWN0IGh0YWJfZWxlbSwgbm9kZS5oYXNoX25vZGUpO1xuIFxuIFx0aWYgKG5leHRfbCkge1xuIFx0XHQvKiBpZiBuZXh0IGVsZW0gaW4gdGhpcyBoYXNoIGxpc3QgaXMgbm9uLXplcm8sIGp1c3QgcmV0dXJuIGl0ICovXG4tXHRcdG1lbWNweShuZXh0X2tleSwgbmV4dF9sLVx1MDAzZWtleSwga2V5X3NpemUpO1xuK1x0XHRtZW1jcHkobmV4dF9rZXksIGh0YWJfZWxlbV9rZXkoaHRhYiwgbmV4dF9sKSwga2V5X3NpemUpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbkBAIC05MzgsMTAgKzEwMzYsMTAgQEAgc3RhdGljIGludCBodGFiX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcbiBcbiBcdFx0LyogcGljayBmaXJzdCBlbGVtZW50IGluIHRoZSBidWNrZXQgKi9cbiBcdFx0bmV4dF9sID0gaGxpc3RfbnVsbHNfZW50cnlfc2FmZShyY3VfZGVyZWZlcmVuY2VfcmF3KGhsaXN0X251bGxzX2ZpcnN0X3JjdShoZWFkKSksXG4tXHRcdFx0XHRcdCAgc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKTtcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgaHRhYl9lbGVtLCBub2RlLmhhc2hfbm9kZSk7XG4gXHRcdGlmIChuZXh0X2wpIHtcbiBcdFx0XHQvKiBpZiBpdCdzIG5vdCBlbXB0eSwganVzdCByZXR1cm4gaXQgKi9cbi1cdFx0XHRtZW1jcHkobmV4dF9rZXksIG5leHRfbC1cdTAwM2VrZXksIGtleV9zaXplKTtcbitcdFx0XHRtZW1jcHkobmV4dF9rZXksIGh0YWJfZWxlbV9rZXkoaHRhYiwgbmV4dF9sKSwga2V5X3NpemUpO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHR9XG5AQCAtOTU1LDcgKzEwNTMsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2VsZW1fZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4gXHRjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhodGFiLCBsKTtcbiBcbiBcdGlmIChodGFiLVx1MDAzZW1hcC5tYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0gpXG4tXHRcdGJwZl9tZW1fY2FjaGVfZnJlZShcdTAwMjZodGFiLVx1MDAzZXBjcHVfbWEsIGwtXHUwMDNlcHRyX3RvX3BwdHIpO1xuK1x0XHRicGZfbWVtX2NhY2hlX2ZyZWUoXHUwMDI2aHRhYi1cdTAwM2VwY3B1X21hLCBodGFiX2VsZW1fZ2V0X3B0cl90b19wcHRyKGwpKTtcbiBcdGJwZl9tZW1fY2FjaGVfZnJlZShcdTAwMjZodGFiLVx1MDAzZW1hLCBsKTtcbiB9XG4gXG5AQCAtOTY1LDcgKzEwNjMsNyBAQCBzdGF0aWMgdm9pZCBodGFiX3B1dF9mZF92YWx1ZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4gXHR2b2lkICpwdHI7XG4gXG4gXHRpZiAobWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfZmRfcHV0X3B0cikge1xuLVx0XHRwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKG1hcCwgbCk7XG4rXHRcdHB0ciA9IGZkX2h0YWJfbWFwX2dldF9wdHIoaHRhYiwgbCk7XG4gXHRcdG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2ZkX3B1dF9wdHIobWFwLCBwdHIsIHRydWUpO1xuIFx0fVxuIH1cbkBAIC0xMDA2LDcgKzExMDQsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4gXHRpZiAoaHRhYl9pc19wcmVhbGxvYyhodGFiKSkge1xuIFx0XHRicGZfbWFwX2RlY19lbGVtX2NvdW50KFx1MDAyNmh0YWItXHUwMDNlbWFwKTtcbiBcdFx0Y2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoaHRhYiwgbCk7XG4tXHRcdHBjcHVfZnJlZWxpc3RfcHVzaChcdTAwMjZodGFiLVx1MDAzZWZyZWVsaXN0LCBcdTAwMjZsLVx1MDAzZWZub2RlKTtcbitcdFx0cGNwdV9mcmVlbGlzdF9wdXNoKFx1MDAyNmh0YWItXHUwMDNlZnJlZWxpc3QsIFx1MDAyNmwtXHUwMDNlbm9kZS5mbm9kZSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRkZWNfZWxlbV9jb3VudChodGFiKTtcbiBcdFx0aHRhYl9lbGVtX2ZyZWUoaHRhYiwgbCk7XG5AQCAtMTA5Nyw3ICsxMTk1LDcgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmFsbG9jX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcbiBcdFx0XHRsID0gX19wY3B1X2ZyZWVsaXN0X3BvcChcdTAwMjZodGFiLVx1MDAzZWZyZWVsaXN0KTtcbiBcdFx0XHRpZiAoIWwpXG4gXHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRTJCSUcpO1xuLVx0XHRcdGxfbmV3ID0gY29udGFpbmVyX29mKGwsIHN0cnVjdCBodGFiX2VsZW0sIGZub2RlKTtcbitcdFx0XHRsX25ldyA9IGNvbnRhaW5lcl9vZihsLCBzdHJ1Y3QgaHRhYl9lbGVtLCBub2RlLmZub2RlKTtcbiBcdFx0XHRicGZfbWFwX2luY19lbGVtX2NvdW50KFx1MDAyNmh0YWItXHUwMDNlbWFwKTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbkBAIC0xMTE3LDEwICsxMjE1LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksXG4gXHRcdH1cbiBcdH1cbiBcbi1cdG1lbWNweShsX25ldy1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpO1xuK1x0bWVtY3B5KGh0YWJfZWxlbV9rZXkoaHRhYiwgbF9uZXcpLCBrZXksIGtleV9zaXplKTtcbiBcdGlmIChwZXJjcHUpIHtcbiBcdFx0aWYgKHByZWFsbG9jKSB7XG4tXHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGxfbmV3LCBrZXlfc2l6ZSk7XG4rXHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGxfbmV3KTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKiBhbGxvY19wZXJjcHUgemVyby1maWxscyAqL1xuIFx0XHRcdHZvaWQgKnB0ciA9IGJwZl9tZW1fY2FjaGVfYWxsb2MoXHUwMDI2aHRhYi1cdTAwM2VwY3B1X21hKTtcbkBAIC0xMTMwLDI2ICsxMjI4LDI2IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksXG4gXHRcdFx0XHRsX25ldyA9IEVSUl9QVFIoLUVOT01FTSk7XG4gXHRcdFx0XHRnb3RvIGRlY19jb3VudDtcbiBcdFx0XHR9XG4tXHRcdFx0bF9uZXctXHUwMDNlcHRyX3RvX3BwdHIgPSBwdHI7XG4rXHRcdFx0aHRhYl9lbGVtX3NldF9wdHJfdG9fcHB0cihsX25ldywgcHRyKTtcbiBcdFx0XHRwcHRyID0gKih2b2lkIF9fcGVyY3B1ICoqKXB0cjtcbiBcdFx0fVxuIFxuIFx0XHRwY3B1X2luaXRfdmFsdWUoaHRhYiwgcHB0ciwgdmFsdWUsIG9uYWxsY3B1cywgbWFwX2ZsYWdzKTtcbiBcbiBcdFx0aWYgKCFwcmVhbGxvYylcbi1cdFx0XHRodGFiX2VsZW1fc2V0X3B0cihsX25ldywga2V5X3NpemUsIHBwdHIpO1xuK1x0XHRcdGh0YWJfZWxlbV9zZXRfcHRyKGh0YWIsIGxfbmV3LCBwcHRyKTtcbiBcdH0gZWxzZSBpZiAoZmRfaHRhYl9tYXBfbmVlZHNfYWRqdXN0KGh0YWIpKSB7XG4gXHRcdHNpemUgPSByb3VuZF91cChzaXplLCA4KTtcbi1cdFx0bWVtY3B5KGh0YWJfZWxlbV92YWx1ZShsX25ldywga2V5X3NpemUpLCB2YWx1ZSwgc2l6ZSk7XG4rXHRcdG1lbWNweShodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLCB2YWx1ZSwgc2l6ZSk7XG4gXHR9IGVsc2UgaWYgKG1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfTE9DSykge1xuIFx0XHRjb3B5X21hcF92YWx1ZV9sb2NrZWQoXHUwMDI2aHRhYi1cdTAwM2VtYXAsXG4tXHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUobF9uZXcsIGtleV9zaXplKSxcbitcdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksXG4gXHRcdFx0XHQgICAgICB2YWx1ZSwgZmFsc2UpO1xuIFx0fSBlbHNlIHtcbi1cdFx0Y29weV9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShsX25ldywga2V5X3NpemUpLCB2YWx1ZSk7XG4rXHRcdGNvcHlfbWFwX3ZhbHVlKFx1MDAyNmh0YWItXHUwMDNlbWFwLCBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLCB2YWx1ZSk7XG4gXHR9XG4gXG4tXHRsX25ldy1cdTAwM2VoYXNoID0gaGFzaDtcbitcdGh0YWJfZWxlbV9zZXRfaGFzaChodGFiLCBsX25ldywgaGFzaCk7XG4gXHRyZXR1cm4gbF9uZXc7XG4gZGVjX2NvdW50OlxuIFx0ZGVjX2VsZW1fY291bnQoaHRhYik7XG5AQCAtMTE5OSw3ICsxMjk3LDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbiBcdFx0aWYgKHVubGlrZWx5KCFidGZfcmVjb3JkX2hhc19maWVsZChtYXAtXHUwMDNlcmVjb3JkLCBCUEZfU1BJTl9MT0NLKSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdC8qIGZpbmQgYW4gZWxlbWVudCB3aXRob3V0IHRha2luZyB0aGUgYnVja2V0IGxvY2sgKi9cbi1cdFx0bF9vbGQgPSBsb29rdXBfbnVsbHNfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSxcbitcdFx0bF9vbGQgPSBsb29rdXBfbnVsbHNfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSxcbiBcdFx0XHRcdFx0ICAgICAgaHRhYi1cdTAwM2VuX2J1Y2tldHMpO1xuIFx0XHRyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTtcbiBcdFx0aWYgKHJldClcbkBAIC0xMjA3LDcgKzEzMDUsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIFx0XHRpZiAobF9vbGQpIHtcbiBcdFx0XHQvKiBncmFiIHRoZSBlbGVtZW50IGxvY2sgYW5kIHVwZGF0ZSB2YWx1ZSBpbiBwbGFjZSAqL1xuIFx0XHRcdGNvcHlfbWFwX3ZhbHVlX2xvY2tlZChtYXAsXG4tXHRcdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShsX29sZCwga2V5X3NpemUpLFxuK1x0XHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9vbGQpLFxuIFx0XHRcdFx0XHQgICAgICB2YWx1ZSwgZmFsc2UpO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG5AQCAtMTIyMSw3ICsxMzE5LDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbitcdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuIFxuIFx0cmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7XG4gXHRpZiAocmV0KVxuQEAgLTEyMzUsNyArMTMzMyw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4gXHRcdCAqIGFuZCB1cGRhdGUgZWxlbWVudCBpbiBwbGFjZVxuIFx0XHQgKi9cbiBcdFx0Y29weV9tYXBfdmFsdWVfbG9ja2VkKG1hcCxcbi1cdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShsX29sZCwga2V5X3NpemUpLFxuK1x0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfb2xkKSxcbiBcdFx0XHRcdCAgICAgIHZhbHVlLCBmYWxzZSk7XG4gXHRcdHJldCA9IDA7XG4gXHRcdGdvdG8gZXJyO1xuQEAgLTEyNTIsOSArMTM1MCw5IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4gXHQvKiBhZGQgbmV3IGVsZW1lbnQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QsIHNvIHRoYXRcbiBcdCAqIGNvbmN1cnJlbnQgc2VhcmNoIHdpbGwgZmluZCBpdCBiZWZvcmUgb2xkIGVsZW1cbiBcdCAqL1xuLVx0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFx1MDAyNmxfbmV3LVx1MDAzZWhhc2hfbm9kZSwgaGVhZCk7XG4rXHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXHUwMDI2bF9uZXctXHUwMDNlbm9kZS5oYXNoX25vZGUsIGhlYWQpO1xuIFx0aWYgKGxfb2xkKSB7XG4tXHRcdGhsaXN0X251bGxzX2RlbF9yY3UoXHUwMDI2bF9vbGQtXHUwMDNlaGFzaF9ub2RlKTtcbitcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsX29sZC1cdTAwM2Vub2RlLmhhc2hfbm9kZSk7XG4gXG4gXHRcdC8qIGxfb2xkIGhhcyBhbHJlYWR5IGJlZW4gc3Rhc2hlZCBpbiBodGFiLVx1MDAzZWV4dHJhX2VsZW1zLCBjYW5jZWxcbiBcdFx0ICogaXRzIHJldXNhYmxlIHNwZWNpYWwgZmllbGRzIGJlZm9yZSBpdCBpcyBhdmFpbGFibGUgZm9yIHJldXNlLlxuQEAgLTEyNzUsNyArMTM3Myw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfbHJ1X3B1c2hfZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmVsZW0pXG4ge1xuIFx0Y2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoaHRhYiwgZWxlbSk7XG4gXHRicGZfbWFwX2RlY19lbGVtX2NvdW50KFx1MDAyNmh0YWItXHUwMDNlbWFwKTtcbi1cdGJwZl9scnVfcHVzaF9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBcdTAwMjZlbGVtLVx1MDAzZWxydV9ub2RlKTtcbitcdGJwZl9scnVfcHVzaF9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBodGFiX2VsZW1fbHJ1X25vZGUoZWxlbSkpO1xuIH1cbiBcbiBzdGF0aWMgbG9uZyBodGFiX2xydV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbkBAIC0xMzEwLDEzICsxNDA4LDEzIEBAIHN0YXRpYyBsb25nIGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlXG4gXHRsX25ldyA9IHByZWFsbG9jX2xydV9wb3AoaHRhYiwga2V5LCBoYXNoKTtcbiBcdGlmICghbF9uZXcpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0Y29weV9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShsX25ldywgbWFwLVx1MDAzZWtleV9zaXplKSwgdmFsdWUpO1xuK1x0Y29weV9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksIHZhbHVlKTtcbiBcbiBcdHJldCA9IGh0YWJfbG9ja19idWNrZXQoYiwgXHUwMDI2ZmxhZ3MpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBlcnJfbG9ja19idWNrZXQ7XG4gXG4tXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbitcdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuIFxuIFx0cmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7XG4gXHRpZiAocmV0KVxuQEAgLTEzMjUsMTAgKzE0MjMsMTAgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWVcbiBcdC8qIGFkZCBuZXcgZWxlbWVudCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdFxuIFx0ICogY29uY3VycmVudCBzZWFyY2ggd2lsbCBmaW5kIGl0IGJlZm9yZSBvbGQgZWxlbVxuIFx0ICovXG4tXHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXHUwMDI2bF9uZXctXHUwMDNlaGFzaF9ub2RlLCBoZWFkKTtcbitcdGhsaXN0X251bGxzX2FkZF9oZWFkX3JjdShcdTAwMjZsX25ldy1cdTAwM2Vub2RlLmhhc2hfbm9kZSwgaGVhZCk7XG4gXHRpZiAobF9vbGQpIHtcbi1cdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXHUwMDI2bF9uZXctXHUwMDNlbHJ1X25vZGUpO1xuLVx0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmxfb2xkLVx1MDAzZWhhc2hfbm9kZSk7XG4rXHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsX25ldykpO1xuK1x0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmxfb2xkLVx1MDAzZW5vZGUuaGFzaF9ub2RlKTtcbiBcdH1cbiBcdHJldCA9IDA7XG4gXG5AQCAtMTM4Myw3ICsxNDgxLDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW1faW5fcGxhY2Uoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuK1x0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4gXG4gXHRyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTtcbiBcdGlmIChyZXQpXG5AQCAtMTM5MiwxMCArMTQ5MCwxMCBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbV9pbl9wbGFjZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gXHRpZiAobF9vbGQpIHtcbiBcdFx0LyogVXBkYXRlIHZhbHVlIGluLXBsYWNlICovXG4gXHRcdGlmIChwZXJjcHUpIHtcbi1cdFx0XHRwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIobF9vbGQsIGtleV9zaXplKSxcbitcdFx0XHRwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9vbGQpLFxuIFx0XHRcdFx0XHR2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHZvaWQgKippbm5lcl9tYXBfcHB0ciA9IGh0YWJfZWxlbV92YWx1ZShsX29sZCwga2V5X3NpemUpO1xuK1x0XHRcdHZvaWQgKippbm5lcl9tYXBfcHB0ciA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX29sZCk7XG4gXG4gXHRcdFx0b2xkX21hcF9wdHIgPSAqaW5uZXJfbWFwX3BwdHI7XG4gXHRcdFx0V1JJVEVfT05DRSgqaW5uZXJfbWFwX3BwdHIsICoodm9pZCAqKil2YWx1ZSk7XG5AQCAtMTQwNyw3ICsxNTA1LDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW1faW5fcGxhY2Uoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFx0XHRcdHJldCA9IFBUUl9FUlIobF9uZXcpO1xuIFx0XHRcdGdvdG8gZXJyO1xuIFx0XHR9XG4tXHRcdGhsaXN0X251bGxzX2FkZF9oZWFkX3JjdShcdTAwMjZsX25ldy1cdTAwM2VoYXNoX25vZGUsIGhlYWQpO1xuK1x0XHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXHUwMDI2bF9uZXctXHUwMDNlbm9kZS5oYXNoX25vZGUsIGhlYWQpO1xuIFx0fVxuIGVycjpcbiBcdGh0YWJfdW5sb2NrX2J1Y2tldChiLCBmbGFncyk7XG5AQCAtMTQ1NiwyMiArMTU1NCwyMiBAQCBzdGF0aWMgbG9uZyBfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFx0aWYgKHJldClcbiBcdFx0Z290byBlcnJfbG9ja19idWNrZXQ7XG4gXG4tXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbitcdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuIFxuIFx0cmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIGVycjtcbiBcbiBcdGlmIChsX29sZCkge1xuLVx0XHRicGZfbHJ1X25vZGVfc2V0X3JlZihcdTAwMjZsX29sZC1cdTAwM2VscnVfbm9kZSk7XG4rXHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsX29sZCkpO1xuIFxuIFx0XHQvKiBwZXItY3B1IGhhc2ggbWFwIGNhbiB1cGRhdGUgdmFsdWUgaW4tcGxhY2UgKi9cbi1cdFx0cGNwdV9jb3B5X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGxfb2xkLCBrZXlfc2l6ZSksXG4rXHRcdHBjcHVfY29weV92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsX29sZCksXG4gXHRcdFx0XHR2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpO1xuIFx0fSBlbHNlIHtcbi1cdFx0cGNwdV9pbml0X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGxfbmV3LCBrZXlfc2l6ZSksXG4rXHRcdHBjcHVfaW5pdF92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsX25ldyksXG4gXHRcdFx0XHR2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpO1xuLVx0XHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXHUwMDI2bF9uZXctXHUwMDNlaGFzaF9ub2RlLCBoZWFkKTtcbitcdFx0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFx1MDAyNmxfbmV3LVx1MDAzZW5vZGUuaGFzaF9ub2RlLCBoZWFkKTtcbiBcdFx0bF9uZXcgPSBOVUxMO1xuIFx0fVxuIFx0cmV0ID0gMDtcbkBAIC0xNDgwLDcgKzE1NzgsNyBAQCBzdGF0aWMgbG9uZyBfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIGVycl9sb2NrX2J1Y2tldDpcbiBcdGlmIChsX25ldykge1xuIFx0XHRicGZfbWFwX2RlY19lbGVtX2NvdW50KFx1MDAyNmh0YWItXHUwMDNlbWFwKTtcbi1cdFx0YnBmX2xydV9wdXNoX2ZyZWUoXHUwMDI2aHRhYi1cdTAwM2VscnUsIFx1MDAyNmxfbmV3LVx1MDAzZWxydV9ub2RlKTtcbitcdFx0YnBmX2xydV9wdXNoX2ZyZWUoXHUwMDI2aHRhYi1cdTAwM2VscnUsIGh0YWJfZWxlbV9scnVfbm9kZShsX25ldykpO1xuIFx0fVxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMTUyMSw5ICsxNjE5LDkgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4rXHRsID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuIFx0aWYgKGwpXG4tXHRcdGhsaXN0X251bGxzX2RlbF9yY3UoXHUwMDI2bC1cdTAwM2VoYXNoX25vZGUpO1xuK1x0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmwtXHUwMDNlbm9kZS5oYXNoX25vZGUpO1xuIFx0ZWxzZVxuIFx0XHRyZXQgPSAtRU5PRU5UO1xuIFxuQEAgLTE1NTYsMTAgKzE2NTQsMTAgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRsID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuK1x0bCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiBcbiBcdGlmIChsKVxuLVx0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmwtXHUwMDNlaGFzaF9ub2RlKTtcbitcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZW5vZGUuaGFzaF9ub2RlKTtcbiBcdGVsc2VcbiBcdFx0cmV0ID0gLUVOT0VOVDtcbiBcbkBAIC0xNTgxLDggKzE2NzksOCBAQCBzdGF0aWMgdm9pZCBkZWxldGVfYWxsX2VsZW1lbnRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47XG4gXHRcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4tXHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XG4tXHRcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZWhhc2hfbm9kZSk7XG4rXHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpIHtcbitcdFx0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmwtXHUwMDNlbm9kZS5oYXNoX25vZGUpO1xuIFx0XHRcdGh0YWJfZWxlbV9mcmVlKGh0YWIsIGwpO1xuIFx0XHR9XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuQEAgLTE1OTksMTAgKzE2OTcsMTAgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX21hbGxvY2VkX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0XHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjtcbiBcdFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcbiBcbi1cdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnkobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XG4rXHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKSB7XG4gXHRcdFx0LyogV2Ugb25seSBmcmVlIGludGVybmFsIHN0cnVjdHMgb24gdXJlZiBkcm9wcGluZyB0byB6ZXJvICovXG4gXHRcdFx0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsXG4tXHRcdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGwsIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4rXHRcdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpKTtcbiBcdFx0fVxuIFx0XHRjb25kX3Jlc2NoZWRfcmN1KCk7XG4gXHR9XG5AQCAtMTY5Nyw3ICsxNzk1LDcgQEAgc3RhdGljIGludCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4rXHRsID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuIFx0aWYgKCFsKSB7XG4gXHRcdHJldCA9IC1FTk9FTlQ7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbkBAIC0xNzA4LDE0ICsxODA2LDE0IEBAIHN0YXRpYyBpbnQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcdFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcbiBcdFx0aW50IG9mZiA9IDAsIGNwdTtcbiBcbi1cdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGwsIGtleV9zaXplKTtcbitcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xuIFx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4gXHRcdFx0Y29weV9tYXBfdmFsdWVfbG9uZyhcdTAwMjZodGFiLVx1MDAzZW1hcCwgdmFsdWUgKyBvZmYsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuIFx0XHRcdGNoZWNrX2FuZF9pbml0X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgdmFsdWUgKyBvZmYpO1xuIFx0XHRcdG9mZiArPSByb3VuZHVwX3ZhbHVlX3NpemU7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4tXHRcdHZvaWQgKnNyYyA9IGh0YWJfZWxlbV92YWx1ZShsLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuK1x0XHR2b2lkICpzcmMgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XG4gXG4gXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfTE9DSylcbiBcdFx0XHRjb3B5X21hcF92YWx1ZV9sb2NrZWQobWFwLCB2YWx1ZSwgc3JjLCB0cnVlKTtcbkBAIC0xNzI0LDcgKzE4MjIsNyBAQCBzdGF0aWMgaW50IF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gXHRcdC8qIFplcm9pbmcgc3BlY2lhbCBmaWVsZHMgaW4gdGhlIHRlbXAgYnVmZmVyICovXG4gXHRcdGNoZWNrX2FuZF9pbml0X21hcF92YWx1ZShtYXAsIHZhbHVlKTtcbiBcdH1cbi1cdGhsaXN0X251bGxzX2RlbF9yY3UoXHUwMDI2bC1cdTAwM2VoYXNoX25vZGUpO1xuK1x0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZW5vZGUuaGFzaF9ub2RlKTtcbiBcbiBvdXRfdW5sb2NrOlxuIFx0aHRhYl91bmxvY2tfYnVja2V0KGIsIGJmbGFncyk7XG5AQCAtMTg2MCw3ICsxOTU4LDcgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0fVxuIFxuIFx0YnVja2V0X2NudCA9IDA7XG4tXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxuK1x0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKVxuIFx0XHRidWNrZXRfY250Kys7XG4gXG4gXHRpZiAoYnVja2V0X2NudCBcdTAwMjZcdTAwMjYgIWxvY2tlZCkge1xuQEAgLTE4OTcsMTQgKzE5OTUsMTQgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0aWYgKCFsb2NrZWQpXG4gXHRcdGdvdG8gbmV4dF9iYXRjaDtcbiBcbi1cdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XG4tXHRcdG1lbWNweShkc3Rfa2V5LCBsLVx1MDAzZWtleSwga2V5X3NpemUpO1xuK1x0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShsLCBuLCBoZWFkLCBub2RlLmhhc2hfbm9kZSkge1xuK1x0XHRtZW1jcHkoZHN0X2tleSwgaHRhYl9lbGVtX2tleShodGFiLCBsKSwga2V5X3NpemUpO1xuIFxuIFx0XHRpZiAoaXNfcGVyY3B1KSB7XG4gXHRcdFx0aW50IG9mZiA9IDAsIGNwdTtcbiBcdFx0XHR2b2lkIF9fcGVyY3B1ICpwcHRyO1xuIFxuLVx0XHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuK1x0XHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKTtcbiBcdFx0XHRpZiAoZWxlbV9tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX0NQVSkge1xuIFx0XHRcdFx0Y3B1ID0gZWxlbV9tYXBfZmxhZ3MgXHUwMDNlXHUwMDNlIDMyO1xuIFx0XHRcdFx0Y29weV9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGRzdF92YWwsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuQEAgLTE5MTgsNyArMjAxNiw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0dmFsdWUgPSBodGFiX2VsZW1fdmFsdWUobCwga2V5X3NpemUpO1xuK1x0XHRcdHZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpO1xuIFx0XHRcdGlmIChpc19mZF9odGFiKGh0YWIpKSB7XG4gXHRcdFx0XHRzdHJ1Y3QgYnBmX21hcCAqKmlubmVyX21hcCA9IHZhbHVlO1xuIFxuQEAgLTE5MzYsNyArMjAzNCw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUobWFwLCBkc3RfdmFsKTtcbiBcdFx0fVxuIFx0XHRpZiAoZG9fZGVsZXRlKSB7XG4tXHRcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZWhhc2hfbm9kZSk7XG4rXHRcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZW5vZGUuaGFzaF9ub2RlKTtcbiBcbiBcdFx0XHQvKiBicGZfbHJ1X3B1c2hfZnJlZSgpIHdpbGwgYWNxdWlyZSBscnVfbG9jaywgd2hpY2hcbiBcdFx0XHQgKiBtYXkgY2F1c2UgZGVhZGxvY2suIFNlZSBjb21tZW50cyBpbiBmdW5jdGlvblxuQEAgLTE5NDgsNyArMjA0Niw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHQgKiBsb2NrIGJlaW5nIGhlbGQgYW5kIGl0IHZpb2xhdGVzIHRoZSBsb2NrIHJ1bGUsIHNvXG4gXHRcdFx0ICogaW52b2tlIGZyZWVfaHRhYl9lbGVtKCkgYWZ0ZXIgdW5sb2NrIGFzIHdlbGwuXG4gXHRcdFx0ICovXG4tXHRcdFx0bC1cdTAwM2ViYXRjaF9mbGluayA9IG5vZGVfdG9fZnJlZTtcbitcdFx0XHRsLVx1MDAzZW5vZGUuYmF0Y2hfZmxpbmsgPSBub2RlX3RvX2ZyZWU7XG4gXHRcdFx0bm9kZV90b19mcmVlID0gbDtcbiBcdFx0fVxuIFx0XHRkc3Rfa2V5ICs9IGtleV9zaXplO1xuQEAgLTE5NjAsNyArMjA1OCw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcbiBcdHdoaWxlIChub2RlX3RvX2ZyZWUpIHtcbiBcdFx0bCA9IG5vZGVfdG9fZnJlZTtcbi1cdFx0bm9kZV90b19mcmVlID0gbm9kZV90b19mcmVlLVx1MDAzZWJhdGNoX2ZsaW5rO1xuK1x0XHRub2RlX3RvX2ZyZWUgPSBub2RlX3RvX2ZyZWUtXHUwMDNlbm9kZS5iYXRjaF9mbGluaztcbiBcdFx0aWYgKGlzX2xydV9tYXApXG4gXHRcdFx0aHRhYl9scnVfcHVzaF9mcmVlKGh0YWIsIGwpO1xuIFx0XHRlbHNlXG5AQCAtMjEwOCw4ICsyMjA2LDggQEAgYnBmX2hhc2hfbWFwX3NlcV9maW5kX25leHQoc3RydWN0IGJwZl9pdGVyX3NlcV9oYXNoX21hcF9pbmZvICppbmZvLFxuIFx0XHQvKiBubyB1cGRhdGUvZGVsZXRpb24gb24gdGhpcyBidWNrZXQsIHByZXZfZWxlbSBzaG91bGQgYmUgc3RpbGwgdmFsaWRcbiBcdFx0ICogYW5kIHdlIHdvbid0IHNraXAgZWxlbWVudHMuXG4gXHRcdCAqL1xuLVx0XHRuID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhobGlzdF9udWxsc19uZXh0X3JjdShcdTAwMjZwcmV2X2VsZW0tXHUwMDNlaGFzaF9ub2RlKSk7XG4tXHRcdGVsZW0gPSBobGlzdF9udWxsc19lbnRyeV9zYWZlKG4sIHN0cnVjdCBodGFiX2VsZW0sIGhhc2hfbm9kZSk7XG4rXHRcdG4gPSByY3VfZGVyZWZlcmVuY2VfcmF3KGhsaXN0X251bGxzX25leHRfcmN1KFx1MDAyNnByZXZfZWxlbS1cdTAwM2Vub2RlLmhhc2hfbm9kZSkpO1xuK1x0XHRlbGVtID0gaGxpc3RfbnVsbHNfZW50cnlfc2FmZShuLCBzdHJ1Y3QgaHRhYl9lbGVtLCBub2RlLmhhc2hfbm9kZSk7XG4gXHRcdGlmIChlbGVtKVxuIFx0XHRcdHJldHVybiBlbGVtO1xuIFxuQEAgLTIxMjUsNyArMjIyMyw3IEBAIGJwZl9oYXNoX21hcF9zZXFfZmluZF9uZXh0KHN0cnVjdCBicGZfaXRlcl9zZXFfaGFzaF9tYXBfaW5mbyAqaW5mbyxcbiBcbiBcdFx0Y291bnQgPSAwO1xuIFx0XHRoZWFkID0gXHUwMDI2Yi1cdTAwM2VoZWFkO1xuLVx0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UoZWxlbSwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XG4rXHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShlbGVtLCBuLCBoZWFkLCBub2RlLmhhc2hfbm9kZSkge1xuIFx0XHRcdGlmIChjb3VudCBcdTAwM2U9IHNraXBfZWxlbXMpIHtcbiBcdFx0XHRcdGluZm8tXHUwMDNlYnVja2V0X2lkID0gaTtcbiBcdFx0XHRcdGluZm8tXHUwMDNlc2tpcF9lbGVtcyA9IGNvdW50O1xuQEAgLTIxODMsMTIgKzIyODEsMTIgQEAgc3RhdGljIGludCBfX2JwZl9oYXNoX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGh0YWJfZWxlbSAqZWxlbSlcbiBcdFx0Y3R4Lm1ldGEgPSBcdTAwMjZtZXRhO1xuIFx0XHRjdHgubWFwID0gaW5mby1cdTAwM2VtYXA7XG4gXHRcdGlmIChlbGVtKSB7XG4tXHRcdFx0Y3R4LmtleSA9IGVsZW0tXHUwMDNla2V5O1xuK1x0XHRcdGN0eC5rZXkgPSBodGFiX2VsZW1fa2V5KGluZm8tXHUwMDNlaHRhYiwgZWxlbSk7XG4gXHRcdFx0aWYgKCFpbmZvLVx1MDAzZXBlcmNwdV92YWx1ZV9idWYpIHtcbi1cdFx0XHRcdGN0eC52YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShlbGVtLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuK1x0XHRcdFx0Y3R4LnZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGluZm8tXHUwMDNlaHRhYiwgZWxlbSk7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdHJvdW5kdXBfdmFsdWVfc2l6ZSA9IHJvdW5kX3VwKG1hcC1cdTAwM2V2YWx1ZV9zaXplLCA4KTtcbi1cdFx0XHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuK1x0XHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGluZm8tXHUwMDNlaHRhYiwgZWxlbSk7XG4gXHRcdFx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4gXHRcdFx0XHRcdGNvcHlfbWFwX3ZhbHVlX2xvbmcobWFwLCBpbmZvLVx1MDAzZXBlcmNwdV92YWx1ZV9idWYgKyBvZmYsXG4gXHRcdFx0XHRcdFx0XHQgICAgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7XG5AQCAtMjI5MiwxNCArMjM5MCwxNCBAQCBzdGF0aWMgbG9uZyBicGZfZm9yX2VhY2hfaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX1xuIFx0XHRiID0gXHUwMDI2aHRhYi1cdTAwM2VidWNrZXRzW2ldO1xuIFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdGhlYWQgPSBcdTAwMjZiLVx1MDAzZWhlYWQ7XG4tXHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUoZWxlbSwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XG4tXHRcdFx0a2V5ID0gZWxlbS1cdTAwM2VrZXk7XG4rXHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUoZWxlbSwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpIHtcbitcdFx0XHRrZXkgPSBodGFiX2VsZW1fa2V5KGh0YWIsIGVsZW0pO1xuIFx0XHRcdGlmIChpc19wZXJjcHUpIHtcbiBcdFx0XHRcdC8qIGN1cnJlbnQgY3B1IHZhbHVlIGZvciBwZXJjcHUgbWFwICovXG4tXHRcdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZWxlbSwgbWFwLVx1MDAzZWtleV9zaXplKTtcbitcdFx0XHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBlbGVtKTtcbiBcdFx0XHRcdHZhbCA9IHRoaXNfY3B1X3B0cihwcHRyKTtcbiBcdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0dmFsID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRcdFx0XHR2YWwgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgZWxlbSk7XG4gXHRcdFx0fVxuIFx0XHRcdG51bV9lbGVtcysrO1xuIFx0XHRcdHJldCA9IGNhbGxiYWNrX2ZuKCh1NjQpKGxvbmcpbWFwLCAodTY0KShsb25nKWtleSxcbkBAIC0yNDAzLDEwICsyNTAxLDExIEBAIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xuIC8qIENhbGxlZCBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xuIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcbiBcdGlmIChsKVxuLVx0XHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSkpO1xuK1x0XHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpKTtcbiBcdGVsc2VcbiBcdFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTI0MTQsNiArMjUxMyw3IEBAIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIC8qIGlubGluZSBicGZfbWFwX2xvb2t1cF9lbGVtKCkgY2FsbCBmb3IgcGVyLUNQVSBoYXNobWFwICovXG4gc3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xuIFxuIFx0aWYgKCFicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKCkpXG5AQCAtMjQyNCw3ICsyNTI0LDcgQEAgc3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25cbiBcdCppbnNuKysgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pO1xuIFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIEJQRl9SRUdfMCwgMCwgMyk7XG4gXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCBCUEZfUkVHXzAsXG4tXHRcdFx0XHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICsgcm91bmR1cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbitcdFx0XHRcdGh0YWItXHUwMDNla2V5X29mZnNldCArIHJvdW5kdXAobWFwLVx1MDAzZWtleV9zaXplLCA4KSk7XG4gXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XG4gXHQqaW5zbisrID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xuIFxuQEAgLTI0MzMsNiArMjUzMyw3IEBAIHN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuXG4gXG4gc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1MzIgY3B1KVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4gXHRpZiAoY3B1IFx1MDAzZT0gbnJfY3B1X2lkcylcbkBAIC0yNDQwLDE4ICsyNTQxLDE5IEBAIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcbiBcdGwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcdGlmIChsKVxuLVx0XHRyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVx1MDAzZWtleV9zaXplKSwgY3B1KTtcbitcdFx0cmV0dXJuIHBlcl9jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpLCBjcHUpO1xuIFx0ZWxzZVxuIFx0XHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcbiBcdGlmIChsKSB7XG4tXHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKFx1MDAyNmwtXHUwMDNlbHJ1X25vZGUpO1xuLVx0XHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSkpO1xuK1x0XHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobCkpO1xuK1x0XHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpKTtcbiBcdH1cbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTI0NTksNiArMjU2MSw3IEBAIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcbiBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1MzIgY3B1KVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4gXHRpZiAoY3B1IFx1MDAzZT0gbnJfY3B1X2lkcylcbkBAIC0yNDY2LDggKzI1NjksOCBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa1xuIFxuIFx0bCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xuIFx0aWYgKGwpIHtcbi1cdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXHUwMDI2bC1cdTAwM2VscnVfbm9kZSk7XG4tXHRcdHJldHVybiBwZXJfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXHUwMDNla2V5X3NpemUpLCBjcHUpO1xuK1x0XHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobCkpO1xuK1x0XHRyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCksIGNwdSk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gTlVMTDtcbkBAIC0yNDc1LDYgKzI1NzgsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa1xuIFxuIGludCBicGZfcGVyY3B1X2hhc2hfY29weShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXHR2b2lkIF9fcGVyY3B1ICpwcHRyO1xuIFx0aW50IHJldCA9IC1FTk9FTlQ7XG5AQCAtMjQ5NCw3ICsyNTk4LDcgQEAgaW50IGJwZl9wZXJjcHVfaGFzaF9jb3B5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxcbiBcdC8qIFdlIGRvIG5vdCBtYXJrIExSVSBtYXAgZWxlbWVudCBoZXJlIGluIG9yZGVyIHRvIG5vdCBtZXNzIHVwXG4gXHQgKiBldmljdGlvbiBoZXVyaXN0aWNzIHdoZW4gdXNlciBzcGFjZSBkb2VzIGEgbWFwIHdhbGsuXG4gXHQgKi9cbi1cdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuK1x0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xuIFx0aWYgKG1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfQ1BVKSB7XG4gXHRcdGNwdSA9IG1hcF9mbGFncyBcdTAwM2VcdTAwM2UgMzI7XG4gXHRcdGNvcHlfbWFwX3ZhbHVlKG1hcCwgdmFsdWUsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuQEAgLTI1MzIsNiArMjYzNiw3IEBAIGludCBicGZfcGVyY3B1X2hhc2hfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4gc3RhdGljIHZvaWQgaHRhYl9wZXJjcHVfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBzZXFfZmlsZSAqbSlcbiB7XG4rXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsO1xuIFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcbiBcdGludCBjcHU7XG5AQCAtMjU0Niw3ICsyNjUxLDcgQEAgc3RhdGljIHZvaWQgaHRhYl9wZXJjcHVfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFxuIFx0YnRmX3R5cGVfc2VxX3Nob3cobWFwLVx1MDAzZWJ0ZiwgbWFwLVx1MDAzZWJ0Zl9rZXlfdHlwZV9pZCwga2V5LCBtKTtcbiBcdHNlcV9wdXRzKG0sIFwiOiB7XFxuXCIpO1xuLVx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCk7XG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4gXHRcdHNlcV9wcmludGYobSwgXCJcXHRjcHUlZDogXCIsIGNwdSk7XG4gXHRcdGJ0Zl90eXBlX3NlcV9zaG93KG1hcC1cdTAwM2VidGYsIG1hcC1cdTAwM2VidGZfdmFsdWVfdHlwZV9pZCxcbkBAIC0yNjE5LDggKzI3MjQsOCBAQCBzdGF0aWMgdm9pZCBmZF9odGFiX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBodGFiLVx1MDAzZW5fYnVja2V0czsgaSsrKSB7XG4gXHRcdGhlYWQgPSBzZWxlY3RfYnVja2V0KGh0YWIsIGkpO1xuIFxuLVx0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xuLVx0XHRcdHZvaWQgKnB0ciA9IGZkX2h0YWJfbWFwX2dldF9wdHIobWFwLCBsKTtcbitcdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShsLCBuLCBoZWFkLCBub2RlLmhhc2hfbm9kZSkge1xuK1x0XHRcdHZvaWQgKnB0ciA9IGZkX2h0YWJfbWFwX2dldF9wdHIoaHRhYiwgbCk7XG4gXG4gXHRcdFx0bWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfZmRfcHV0X3B0cihtYXAsIHB0ciwgZmFsc2UpO1xuIFx0XHR9XG5AQCAtMjcwNSw2ICsyODEwLDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfb2ZfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBzdGF0aWMgaW50IGh0YWJfb2ZfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdCAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiB7XG4rXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjtcbiBcdGNvbnN0IGludCByZXQgPSBCUEZfUkVHXzA7XG4gXG5AQCAtMjcxMyw3ICsyODE5LDcgQEAgc3RhdGljIGludCBodGFiX29mX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHQqaW5zbisrID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTtcbiBcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCByZXQsIDAsIDIpO1xuIFx0Kmluc24rKyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgcmV0LFxuLVx0XHRcdFx0b2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwga2V5KSArXG4rXHRcdFx0XHRodGFiLVx1MDAzZWtleV9vZmZzZXQgK1xuIFx0XHRcdFx0cm91bmRfdXAobWFwLVx1MDAzZWtleV9zaXplLCA4KSk7XG4gXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX0RXLCByZXQsIHJldCwgMCk7XG4gXG5AQCAtMzExMiw3ICszMjE4LDcgQEAgc3RhdGljIGludCByaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiB7XG4gXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XG4gXG4tXHRyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgXHUwMDI2cmh0YWItXHUwMDNlbWEsIHJodGFiX21lbV9kdG9yKTtcbitcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZyaHRhYi1cdTAwM2VtYSwgcmh0YWJfbWVtX2R0b3IsIG9mZnNldG9mKHN0cnVjdCByaHRhYl9lbGVtLCBkYXRhKSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcClcbkBAIC0zNTMzLDMgKzM2MzksMTYgQEAgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XG4gXHQubWFwX2J0Zl9pZCA9IFx1MDAyNnJodGFiX21hcF9idGZfaWRzWzBdLFxuIFx0Lml0ZXJfc2VxX2luZm8gPSBcdTAwMjZyaGFzaF9pdGVyX3NlcV9pbmZvLFxuIH07XG4rXG4rc2l6ZV90IGJwZl9odGFiX21hcF9tZXRhX3NpemUodm9pZClcbit7XG4rXHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBicGZfaHRhYik7XG4rfVxuK1xuK3ZvaWQgYnBmX2h0YWJfbWFwX21ldGFfaW5pdChzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwX21ldGEsIHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXApXG4re1xuK1x0c3RydWN0IGJwZl9odGFiICppbm5lcl9odGFiX21ldGEgPSBjb250YWluZXJfb2YoaW5uZXJfbWFwX21ldGEsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbitcdHN0cnVjdCBicGZfaHRhYiAqaW5uZXJfaHRhYiA9IGNvbnRhaW5lcl9vZihpbm5lcl9tYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbitcbitcdGlubmVyX2h0YWJfbWV0YS1cdTAwM2VrZXlfb2Zmc2V0ID0gaW5uZXJfaHRhYi1cdTAwM2VrZXlfb2Zmc2V0O1xuK31cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21hcF9pbl9tYXAuYyBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5jXG5pbmRleCBkMmNiYWI0YmRmNjQ0Li5iMmRiNWQwYzk4YmVlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9tYXBfaW5fbWFwLmNcbisrKyBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5jXG5AQCAtNyw2ICs3LDE1IEBAXG4gXG4gI2luY2x1ZGUgXCJtYXBfaW5fbWFwLmhcIlxuIFxuK3N0YXRpYyBib29sIGJwZl9tYXBfdHlwZV9pc19odGFiKGVudW0gYnBmX21hcF90eXBlIHR5cGUpXG4re1xuK1x0cmV0dXJuIHR5cGUgPT0gQlBGX01BUF9UWVBFX0hBU0ggfHxcbitcdCAgICAgICB0eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSCB8fFxuK1x0ICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX0xSVV9IQVNIIHx8XG4rXHQgICAgICAgdHlwZSA9PSBCUEZfTUFQX1RZUEVfTFJVX1BFUkNQVV9IQVNIIHx8XG4rXHQgICAgICAgdHlwZSA9PSBCUEZfTUFQX1RZUEVfSEFTSF9PRl9NQVBTO1xuK31cbitcbiBzdHJ1Y3QgYnBmX21hcCAqYnBmX21hcF9tZXRhX2FsbG9jKGludCBpbm5lcl9tYXBfdWZkKVxuIHtcbiBcdHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXAsICppbm5lcl9tYXBfbWV0YTtcbkBAIC0yOSw2ICszOCw4IEBAIHN0cnVjdCBicGZfbWFwICpicGZfbWFwX21ldGFfYWxsb2MoaW50IGlubmVyX21hcF91ZmQpXG4gXHQvKiBJbiBzb21lIGNhc2VzIHZlcmlmaWVyIG5lZWRzIHRvIGFjY2VzcyBiZXlvbmQganVzdCBiYXNlIG1hcC4gKi9cbiBcdGlmIChpbm5lcl9tYXAtXHUwMDNlb3BzID09IFx1MDAyNmFycmF5X21hcF9vcHMgfHwgaW5uZXJfbWFwLVx1MDAzZW9wcyA9PSBcdTAwMjZwZXJjcHVfYXJyYXlfbWFwX29wcylcbiBcdFx0aW5uZXJfbWFwX21ldGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2FycmF5KTtcbitcdGVsc2UgaWYgKGJwZl9tYXBfdHlwZV9pc19odGFiKGlubmVyX21hcC1cdTAwM2VtYXBfdHlwZSkpXG4rXHRcdGlubmVyX21hcF9tZXRhX3NpemUgPSBicGZfaHRhYl9tYXBfbWV0YV9zaXplKCk7XG4gXG4gXHRpbm5lcl9tYXBfbWV0YSA9IGt6YWxsb2MoaW5uZXJfbWFwX21ldGFfc2l6ZSwgR0ZQX1VTRVIpO1xuIFx0aWYgKCFpbm5lcl9tYXBfbWV0YSlcbkBAIC03MCw2ICs4MSw4IEBAIHN0cnVjdCBicGZfbWFwICpicGZfbWFwX21ldGFfYWxsb2MoaW50IGlubmVyX21hcF91ZmQpXG4gXHRcdGlubmVyX2FycmF5X21ldGEtXHUwMDNlaW5kZXhfbWFzayA9IGlubmVyX2FycmF5LVx1MDAzZWluZGV4X21hc2s7XG4gXHRcdGlubmVyX2FycmF5X21ldGEtXHUwMDNlZWxlbV9zaXplID0gaW5uZXJfYXJyYXktXHUwMDNlZWxlbV9zaXplO1xuIFx0XHRpbm5lcl9tYXBfbWV0YS1cdTAwM2VieXBhc3Nfc3BlY192MSA9IGlubmVyX21hcC1cdTAwM2VieXBhc3Nfc3BlY192MTtcbitcdH0gZWxzZSBpZiAoYnBmX21hcF90eXBlX2lzX2h0YWIoaW5uZXJfbWFwLVx1MDAzZW1hcF90eXBlKSkge1xuK1x0XHRicGZfaHRhYl9tYXBfbWV0YV9pbml0KGlubmVyX21hcF9tZXRhLCBpbm5lcl9tYXApO1xuIFx0fVxuIFx0cmV0dXJuIGlubmVyX21hcF9tZXRhO1xuIH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21hcF9pbl9tYXAuaCBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5oXG5pbmRleCA3ZDYxNjAyMzU0ZGU4Li4xZWRjMjA1NzcyZDhjIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9tYXBfaW5fbWFwLmhcbisrKyBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5oXG5AQCAtMTUsNSArMTUsNyBAQCB2b2lkICpicGZfbWFwX2ZkX2dldF9wdHIoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxuIFx0XHRcdCBpbnQgdWZkKTtcbiB2b2lkIGJwZl9tYXBfZmRfcHV0X3B0cihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpwdHIsIGJvb2wgbmVlZF9kZWZlcik7XG4gdTMyIGJwZl9tYXBfZmRfc3lzX2xvb2t1cF9lbGVtKHZvaWQgKnB0cik7XG4rc2l6ZV90IGJwZl9odGFiX21hcF9tZXRhX3NpemUodm9pZCk7XG4rdm9pZCBicGZfaHRhYl9tYXBfbWV0YV9pbml0KHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXBfbWV0YSwgc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcCk7XG4gXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jXG5pbmRleCAzNzNjOGQxN2VhNTU3Li42YmQ0Y2I2OGMyMGMxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmNcbkBAIC0xMTQsNyArMTE0LDcgQEAgc3RhdGljIGlubGluZSBpbnQgY2hlY2tfaGFzaCh2b2lkKVxuIFx0VkVSSUZZKGNoZWNrX2RlZmF1bHRfbm9pbmxpbmUoXHUwMDI2aGFzaC1cdTAwM2VtYXAsIG1hcCkpO1xuIFxuIFx0VkVSSUZZKGhhc2gtXHUwMDNlbl9idWNrZXRzID09IE1BWF9FTlRSSUVTKTtcbi1cdFZFUklGWShoYXNoLVx1MDAzZWVsZW1fc2l6ZSA9PSA2NCk7XG4rXHRWRVJJRlkoaGFzaC1cdTAwM2VlbGVtX3NpemUgPT0gMzIpO1xuIFxuIFx0VkVSSUZZKGhhc2gtXHUwMDNlY291bnQuY291bnRlciA9PSAwKTtcbiBcdFZFUklGWShicGZfbWFwX3N1bV9lbGVtX2NvdW50KG1hcCkgPT0gMCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMDo0MzozMy4wMjA2Nzk5NTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDcyMjA5MzYwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgSGFzaCBNYXAgT3B0aW1pemF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgY2hhbmdlcyB0aGUgbGF5b3V0IG9mIGVsZW1lbnRzIHdpdGhpbiBCUEYgaGFzaCBtYXBzLCBzcGVjaWZpY2FsbHkgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBhbmQgYGtlcm5lbC9icGYvbWFwX2luX21hcC5jYC4gVGhlIGNvcmUgaWRlYSBpcyB0byAqY29uZGl0aW9uYWxseSogZHJvcCB0aGUgYGhhc2hgIGZpZWxkIGZyb20gdGhlIGVsZW1lbnQgc3RydWN0dXJlLCB3aGljaCBtYWtlcyBzZW5zZTsgaWYga2V5IGNvbXBhcmlzb25zIGFyZSBhdG9taWMgKHNtYWxsIGtleXMpIGFuZCBpdCdzIG5vdCBhbiBMUlUgbWFwLCB3aHkgYm90aGVyIHN0b3JpbmcgaXQ/IFRoaXMgb3B0aW1pemF0aW9uIGludHJvZHVjZXMgYGtleV9vZmZzZXRgIHRvIGBzdHJ1Y3QgYnBmX2h0YWJgLCBhbGxvd2luZyBmb3IgZHluYW1pYyBjb21wdXRhdGlvbiBvZiBrZXkgYW5kIHZhbHVlIG9mZnNldHMgd2l0aGluIHRoZSBlbGVtZW50LiBUaGUgcGF0Y2ggYWxzbyBwcm9wYWdhdGVzIGBrZXlfb2Zmc2V0YCBpbnRvIHRoZSBpbm5lciBtYXAgbWV0YWRhdGEgZm9yIGhhc2ggbWFwcyB3aXRoaW4gbWFwLWluLW1hcCBzdHJ1Y3R1cmVzLCB3aGljaCBpcyBleHBlY3RlZC5cblxuR2l2ZW4gdGhlIGRlcHRoIG9mIHRoaXMgY2hhbmdlIHRvIHRoZSBjb3JlIGhhc2ggbWFwIGltcGxlbWVudGF0aW9uLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgKmFic29sdXRlbHkqIGRlbWFuZHMgdGhvcm91Z2ggZnV6emluZy4gVGhpcyBpcyB0aGUga2luZCBvZiBjaGFuZ2UgdGhhdCBjYW4gaW50cm9kdWNlIHN1YnRsZSBidXQgY3JpdGljYWwgYnVncy5cblxuTXkgZm9jdXMgaGFzIHNoaWZ0ZWQgdG8gaWRlbnRpZnlpbmcgdGhlIGtleSBmdW5jdGlvbnMgYW5kIEFQSSBlbnRyeSBwb2ludHMuIEkndmUgaW5pdGlhbGx5IHNwb3R0ZWQgdGhlIGZvbGxvd2luZyBhcyBiZWluZyBpbXBvcnRhbnQgdG8gY2hlY2sgZm9yIGZ1bmN0aW9uYWxpdHk6XG5cbiogICBgaHRhYl9tYXBfYWxsb2NgXG4qICAgYGh0YWJfbWFwX3VwZGF0ZV9lbGVtYFxuKiAgIGBodGFiX2xydV9tYXBfdXBkYXRlX2VsZW1gXG4qICAgYGh0YWJfbWFwX2RlbGV0ZV9lbGVtYFxuKiAgIGBodGFiX2xydV9tYXBfZGVsZXRlX2VsZW1gXG4qICAgYGh0YWJfbWFwX2xvb2t1cF9lbGVtYFxuKiAgIGBodGFiX2xydV9tYXBfbG9va3VwX2VsZW1gXG4qICAgYGh0YWJfcGVyY3B1X21hcF9sb29rdXBfZWxlbWBcbiogICBgaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfZWxlbWBcbiogICBgaHRhYl9tYXBfZ2V0X25leHRfa2V5YFxuKiAgIGBodGFiX21hcF9nZW5fbG9va3VwYFxuKiAgIGBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cGBcbiogICBgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXBgXG4qICAgYGh0YWJfb2ZfbWFwX2dlbl9sb29rdXBgXG4qICAgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWBcbiogICBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGBcbiogICBgYnBmX21hcF9tZXRhX2FsbG9jYFxuXG5UaG91Z2ggaXQgc2VlbXMgYGh0YWJfbWFwX3VwZGF0ZV9lbGVtYCBpcyBzdGF0aWMsIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGl0J3MgYXNzaWduZWQgdG8gYG1hcF9vcHNgLiBJJ20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgKndoaWNoKiBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGV4cG9zZWQgYXMgdGhlIEFQSSwgYW5kIHdoYXQgYXJlIGdvb2QgdGFyZ2V0cyBmb3IgZnV6emluZy5cblxuQWZ0ZXIgYSBsaXR0bGUgcmV2aWV3LCBpdCBsb29rcyBsaWtlIGBodGFiX21hcF9hbGxvY2AgaXMgYWxzbyBzdGF0aWMsIHNvIEkgd2lsbCBub3cgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzIG9uIG90aGVyIGV4cG9ydHM6XG5cbiogICBgYnBmX3BlcmNwdV9oYXNoX2NvcHlgXG4qICAgYGJwZl9wZXJjcHVfaGFzaF91cGRhdGVgXG4qICAgYGJwZl9odGFiX21hcF9tZXRhX3NpemVgXG4qICAgYGJwZl9odGFiX21hcF9tZXRhX2luaXRgXG4qICAgYGJwZl9tYXBfbWV0YV9hbGxvY2BcblxuVGltZSB0byBjaGVjayBob3cgdGhlc2UgYXJlIGRlZmluZWQgdXNpbmcgYGRlZmF1bHRfYXBpOmdyZXBwZXJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgQVBJcyBhcmUgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4MTAsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMDo0Mzo0My43NDI3NzY2MjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcyNDA4NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8oaW50fHZvaWR8c3RydWN0IGJwZl9tYXAgXFxcXCopIGh0YWJfbWFwX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jPTQ1MD1zdGF0aWMgaW50IGFsbG9jX2V4dHJhX2VsZW1zKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTQ3My0vKiBDYWxsZWQgZnJvbSBzeXNjYWxsICovXFxua2VybmVsL2JwZi9oYXNodGFiLmM6NDc0OnN0YXRpYyBpbnQgaHRhYl9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtNDc1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTA6NDM6NDMuODIwMDIxMTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzUxMjk4MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipUaGlua2luZyBUaHJvdWdoIEhhc2ggVGFibGUgQWxsb2NhdGlvbioqXG5cblJpZ2h0LCBzbyBgaHRhYl9tYXBfYWxsb2NgIGlzIHN0YXRpYywgd2hpY2ggaXMgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgd2hlbiB0cmFja2luZyB0aGlzLiBUaGUgc2NvcGUgb2YgdGhpcyBpcyBsaW1pdGVkLCBhIGRldGFpbCB0aGF0IGlzIG9mIHNpZ25pZmljYW5jZSB0byBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGJlaW5nIGRvbmUuXG5cbk5vdywgbGV0J3MgcGl2b3QgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBgaHRhYl9tYXBfdXBkYXRlX2VsZW1gIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIGhvdyBlbGVtZW50cyBhcmUgdXBkYXRlZCBpcyBrZXkgaGVyZS4gVGhhdCB3aWxsIGluZm9ybSBhIGdyZWF0IGRlYWwgYWJvdXQgdGhlIG92ZXJhbGwgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTA0LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTA6NDM6NDYuNTcxMzIxNzc5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NzA3MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KGxvbmd8aW50fHZvaWQpIGh0YWJfbWFwX3VwZGF0ZV9lbGVtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jPTEyNTc9c3RhdGljIGludCBjaGVja19mbGFncyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmxfb2xkLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTI3MS0vKiBDYWxsZWQgZnJvbSBzeXNjYWxsIG9yIGZyb20gZUJQRiBwcm9ncmFtICovXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTI3MjpzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEyNzMtXFx0XFx0XFx0XFx0IHU2NCBtYXBfZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xNDQ1PXN0YXRpYyBpbnQgaHRhYl9tYXBfY2hlY2tfdXBkYXRlX2ZsYWdzKGJvb2wgb25hbGxjcHVzLCB1NjQgbWFwX2ZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTQ1My1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxNDU0OnN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtX2luX3BsYWNlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNDU1LVxcdFxcdFxcdFxcdFxcdCAgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEwOjQzOjQ2LjYzNjAzMjk4OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MjYwNzE4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBNYXAgT3BlcmF0aW9ucyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIEJQRiBtYXAgb3BlcmF0aW9uIGltcGxlbWVudGF0aW9ucy4gVGhleSdyZSBhbGwgZGVjbGFyZWQgYXMgYHN0YXRpY2AgZnVuY3Rpb25zLCB3aGljaCBpcyB0eXBpY2FsIGZvciBjb3JlIGxvZ2ljIHdpdGhpbiBhIGtlcm5lbCBtb2R1bGUsIGJ1dCB0aGV5J3JlIHRoZSBvbmVzIGRyaXZpbmcgdGhlIGBicGZfbWFwX29wc2AuICBUaGF0J3Mgd2hlcmUgdGhlIGltcG9ydGFudCBzdHVmZiBoYXBwZW5zLiBUaGUgYGJwZl9tYXBfb3BzYCBzdHJ1Y3QsIGluIHBhcnRpY3VsYXIsIGhvbGRzIHBvaW50ZXJzIHRvIHRoZXNlIGZ1bmN0aW9ucywgd2hpY2ggaXMga2V5IGZvciBob3cgdGhlc2UgbWFwcyBiZWhhdmUuXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIGZ1enppbmcuIElmIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgZW5jYXBzdWxhdGUgdGhlIGNvcmUgbG9naWMsIHRoZXkgc2VlbSBsaWtlIHByaW1lIHRhcmdldHMuIEJ1dCB3YWl0Li4udGhlIGluc3RydWN0aW9ucyBhcmUgdGVsbGluZyBtZSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBtZWFucyBhdm9pZGluZyBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBsaWtlbHkgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFRoZXNlIGhlbHBlcnMgd29uJ3QgaGF2ZSB0aGVpciBvd24gZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBmb3IgZnV6emluZyB0b29scyB0byB0YXJnZXQgZWZmZWN0aXZlbHkuXG5cblRoaW5raW5nIGFib3V0IHRoYXQsIGBodGFiX21hcF91cGRhdGVfZWxlbWAgaXNuJ3QgYW4gaW50ZXJuYWwgaGVscGVyLiBJdCdzIGEgY2FsbGJhY2sgZm9yIGEgbWFwIG9wZXJhdGlvbiwgc28gaXRzIGFkZHJlc3MgaXMgZGVmaW5pdGVseSB0YWtlbiBhbmQgaXQgc2hvdWxkbid0IGJlIGlubGluZWQuIFRoYXQncyBhIGdvb2QgZmluZCEgSXQgc2hvdWxkIGJlIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbkxldCBtZSB0YWtlIGEgbG9vayBhdCBgYnBmX21hcF9tZXRhX2FsbG9jYCBuZXh0IHRvIHNlZSBpZiBpdCBmb2xsb3dzIHRoaXMgcGF0dGVybi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5ODcsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTA6NDM6NTEuMDYyMTA4MDYzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNjAzNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/c3RydWN0IGJwZl9tYXAgXFxcXCpicGZfbWFwX21ldGFfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9tYXBfaW5fbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9tYXBfaW5fbWFwLmM9MTA9c3RhdGljIGJvb2wgYnBmX21hcF90eXBlX2lzX2h0YWIoZW51bSBicGZfbWFwX3R5cGUgdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvbWFwX2luX21hcC5jLTE4LVxcbmtlcm5lbC9icGYvbWFwX2luX21hcC5jOjE5OnN0cnVjdCBicGZfbWFwICpicGZfbWFwX21ldGFfYWxsb2MoaW50IGlubmVyX21hcF91ZmQpXFxua2VybmVsL2JwZi9tYXBfaW5fbWFwLmMtMjAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMDo0Mzo1MS4xMjM3MTU0ODJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODYyMTQ3NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEhhc2ggVGFibGUgT3BlcmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIG5haWwgZG93biBvdXIga2V5IGZvY3VzIGFyZWFzLiBJIG5lZWQgdG8gbGlzdCBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBhcmUgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uIHdlJ3JlIGRlYWxpbmcgd2l0aC4gVGhpbmtpbmcgaXQgdGhyb3VnaCwgdGhlIGZ1bmN0aW9ucyB0aGF0IGp1bXAgb3V0IGF0IG1lIGFzIG1vc3QgcmVsZXZhbnQgYXJlOiBgaHRhYl9tYXBfYWxsb2NgLCBvYnZpb3VzbHk7IHRoZW4gaG93IHdlIHVwZGF0ZSBhbmQgZGVsZXRlIGVsZW1lbnRzIHdpdGggYGh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbWAsIGFuZCBgaHRhYl9tYXBfZGVsZXRlX2VsZW1gOyBhbmQsIG9mIGNvdXJzZSwgbG9va3VwcyBhbmQgaXRlcmF0aW9ucyB3aXRoIGBodGFiX21hcF9sb29rdXBfZWxlbWAgYW5kIGBodGFiX21hcF9nZXRfbmV4dF9rZXlgLiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aG9zZSBmdW5jdGlvbnMgdGhhdCBhcmUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb25zIGxpa2UgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAgYW5kIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gRmluYWxseSwgSSdsbCBuZWVkIHRvIHJlbWVtYmVyIGBicGZfbWFwX21ldGFfYWxsb2NgLlxuXG5Ob3csIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGh0YWJfbWFwX2FsbG9jYCBpcyBhY3R1YWxseSAqZGVmaW5lZCogd2l0aGluIHRoaXMgY29udGV4dC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1OTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTA6NDM6NTQuOTg1ODY1NDk1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjY2MDI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodGFiX21hcF9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuYz00NTA9c3RhdGljIGludCBhbGxvY19leHRyYV9lbGVtcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy00NzMtLyogQ2FsbGVkIGZyb20gc3lzY2FsbCAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjQ3NDpzdGF0aWMgaW50IGh0YWJfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTQ3NS17XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz01OTE9c3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtNTk5LVxcdCAqIFdlIG11c3Qgc2V0IHRoZSBkdG9yIHVzaW5nIHRoaXMgY2FsbGJhY2ssIGFzIG1hcCdzIEJURiByZWNvcmQgaXMgbm90XFxua2VybmVsL2JwZi9oYXNodGFiLmM6NjAwOlxcdCAqIHBvcHVsYXRlZCBpbiBodGFiX21hcF9hbGxvYygpLCBzbyBpdCB3aWxsIGFsd2F5cyBhcHBlYXIgYXMgTlVMTC5cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy02MDEtXFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy02MDctXFxua2VybmVsL2JwZi9oYXNodGFiLmM6NjA4OnN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtNjA5LXtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI0NTY9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbWFwX29wcyA9IHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDU3LVxcdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDU4OlxcdC5tYXBfYWxsb2NfY2hlY2sgPSBodGFiX21hcF9hbGxvY19jaGVjayxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDU5OlxcdC5tYXBfYWxsb2MgPSBodGFiX21hcF9hbGxvYyxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDYwLVxcdC5tYXBfZnJlZSA9IGh0YWJfbWFwX2ZyZWUsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNDc4PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0NzktXFx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI0ODA6XFx0Lm1hcF9hbGxvY19jaGVjayA9IGh0YWJfbWFwX2FsbG9jX2NoZWNrLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI0ODE6XFx0Lm1hcF9hbGxvYyA9IGh0YWJfbWFwX2FsbG9jLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0ODItXFx0Lm1hcF9mcmVlID0gaHRhYl9tYXBfZnJlZSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI2NjY9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfcGVyY3B1X21hcF9vcHMgPSB7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjY2Ny1cXHQubWFwX21ldGFfZXF1YWwgPSBicGZfbWFwX21ldGFfZXF1YWwsXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjY2ODpcXHQubWFwX2FsbG9jX2NoZWNrID0gaHRhYl9tYXBfYWxsb2NfY2hlY2ssXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjY2OTpcXHQubWFwX2FsbG9jID0gaHRhYl9tYXBfYWxsb2MsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjY3MC1cXHQubWFwX2ZyZWUgPSBodGFiX21hcF9mcmVlLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjY4OD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9scnVfcGVyY3B1X21hcF9vcHMgPSB7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjY4OS1cXHQubWFwX21ldGFfZXF1YWwgPSBicGZfbWFwX21ldGFfZXF1YWwsXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjY5MDpcXHQubWFwX2FsbG9jX2NoZWNrID0gaHRhYl9tYXBfYWxsb2NfY2hlY2ssXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjY5MTpcXHQubWFwX2FsbG9jID0gaHRhYl9tYXBfYWxsb2MsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjY5Mi1cXHQubWFwX2ZyZWUgPSBodGFiX21hcF9mcmVlLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjcwOC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzA5OnN0YXRpYyBpbnQgZmRfaHRhYl9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjcxMC17XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzEyLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3MTM6XFx0cmV0dXJuIGh0YWJfbWFwX2FsbG9jX2NoZWNrKGF0dHIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3MTQtfVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjc4MT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfb2ZfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc4OC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzg5OlxcdG1hcCA9IGh0YWJfbWFwX2FsbG9jKGF0dHIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3OTAtXFx0aWYgKElTX0VSUihtYXApKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yODM1PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX29mX21hcHNfbWFwX29wcyA9IHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyODM2OlxcdC5tYXBfYWxsb2NfY2hlY2sgPSBmZF9odGFiX21hcF9hbGxvY19jaGVjayxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODM3LVxcdC5tYXBfYWxsb2MgPSBodGFiX29mX21hcF9hbGxvYyxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI4OTM9c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyByaHRhYl9wYXJhbXNfbG9uZyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MDAtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjkwMTpzdGF0aWMgc3RydWN0IGJwZl9tYXAgKnJodGFiX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTAyLXtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NTAtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk1MTpzdGF0aWMgaW50IHJodGFiX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTUyLXtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NzAtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk3MTpcXHRyZXR1cm4gaHRhYl9tYXBfYWxsb2NfY2hlY2soYXR0cik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk3Mi19XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNjIxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM2MjItXFx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM2MjM6XFx0Lm1hcF9hbGxvY19jaGVjayA9IHJodGFiX21hcF9hbGxvY19jaGVjayxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNjI0OlxcdC5tYXBfYWxsb2MgPSByaHRhYl9tYXBfYWxsb2MsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzYyNS1cXHQubWFwX2ZyZWUgPSByaHRhYl9tYXBfZnJlZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTA6NDM6NTUuMDM4NTMwNDQ0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Njg0ODkwNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydDpcblxuKipSZWZsZWN0aW5nIG9uIGEgQlBGIEhhc2ggTWFwIEltcGxlbWVudGF0aW9uIFBhdGNoKipcblxuQWxyaWdodCwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIEJQRiBoYXNoIG1hcCBpbXBsZW1lbnRhdGlvbi4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIGNvdXBsZSBvZiB0aGluZ3MuIEZpcnN0LCB0aGlzIGlzIGEgY29yZSBwaWVjZSBvZiBCUEYgaW5mcmFzdHJ1Y3R1cmUsIG1lYW5pbmcgYW55IGNoYW5nZXMgaGVyZSBoYXZlIHRoZSBwb3RlbnRpYWwgZm9yIHNpZ25pZmljYW50IGltcGFjdCBvbiBwZXJmb3JtYW5jZSwgc3RhYmlsaXR5LCBhbmQgZXZlbiBzZWN1cml0eSBhY3Jvc3MgYSB3aWRlIHJhbmdlIG9mIEJQRi1iYXNlZCBhcHBsaWNhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIG1vZGlmaWNhdGlvbiBkZWVwbHkuIFNlY29uZCwgSSBuZWVkIHRvIGtlZXAgdGhlIGdyZWF0ZXIgY29udGV4dCBvZiB0aGUgd2hvbGUgc3lzdGVtIGluIG1pbmQsIGhvdyB0aGlzIG1vZGlmaWNhdGlvbiB3aWxsIGFmZmVjdCBhbmQgaW50ZXJhY3Qgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLlxuXG5UaGUgbWVudGlvbiBvZiBgQlBGX1NZU0NBTExgIG1ha2VzIG15IGV5ZWJyb3dzIHJhaXNlIGEgYml0LiBUaGlzIGxpa2VseSBpbmRpY2F0ZXMgdGhhdCB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIHN5c3RlbSBjYWxsIGludGVyZmFjZSByZWxhdGVkIHRvIEJQRiwgd2hpY2ggaXMgYW4gYXJlYSB0aGF0J3MgYmVlbiB1bmRlciBzY3J1dGlueS4gVGhpcyBjb3VsZCBtZWFuIGNoYW5nZXMgdG8gaG93IEJQRiBwcm9ncmFtcyBhcmUgbG9hZGVkLCB2ZXJpZmllZCwgb3IgZXhlY3V0ZWQuIEdpdmVuIHRoYXQgdGhlIGtlcm5lbCBhbmQgQlBGIHN1YnN5c3RlbSBpcyBjb25zdGFudGx5IGV2b2x2aW5nLCBJIG5lZWQgdG8ga2VlcCB0aGUgYmlnZ2VyIHBpY3R1cmUgaW4gbWluZC5cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYEJQRl9TWVNDQUxMYCBpcyBhY3R1YWxseSBlbmFibGVkIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcyBhbmQgZG91YmxlLWNoZWNrIGl0cyBzdGF0dXMuIEkgbmVlZCB0byBrbm93IGV4YWN0bHkgaG93IGl0IGlzIGNvbmZpZ3VyZWQgYXMgdGhlIGBLY29uZmlnYCBmaWxlcyB3aWxsIGdpdmUgbWUgaW5mb3JtYXRpb24gYWJvdXQgZGVwZW5kZW5jeSBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgY3VycmVudCBzeXN0ZW0uIFRoaXMgd2lsbCBnaXZlIG1lIGEgY3JpdGljYWwgYmFzZWxpbmUgZm9yIGFzc2Vzc2luZyB0aGUgcGF0Y2gncyBvdmVyYWxsIGltcGFjdCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIHdpZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjc1NCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEwOjQzOjU5LjAwNzAyMzcwNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyMjI1OTEzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTA6NDQ6MDEuMzI5Mjg3MjcxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTM3MTM2MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqQWRkaW5nIGBCUEZfU1lTQ0FMTGAgdG8gRW5hYmxlQ29uZmlncyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBhZGRpbmcgYEJQRl9TWVNDQUxMYCB0byBgRW5hYmxlQ29uZmlnc2AuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgc28gZmFyLiBKdXN0IG5lZWQgdG8gaW50ZWdyYXRlIHRoYXQgZmxhZy4gTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGlzIGFkZGl0aW9uIGRvZXNuJ3QgY3JlYXRlIGFueSBjb25mbGljdHMgb3IgZWRnZSBjYXNlcyBJJ20gbm90IGltbWVkaWF0ZWx5IHRoaW5raW5nIG9mLCBlc3BlY2lhbGx5IHdpdGggZXhpc3RpbmcgY29uZmlndXJhdGlvbnMuIEFsd2F5cyB3b3J0aCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBhdm9pZCB1bmV4cGVjdGVkIGJlaGF2aW9yIGRvd24gdGhlIGxpbmUuXG5cbk5vdywgbGV0IG1lIHNlZSB3aGljaCBmaWxlcyBhcmUgYmVpbmcgdG91Y2hlZCBieSB0aGlzIGNoYW5nZS4gQWhhLCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBga2VybmVsL2JwZi9oYXNodGFiLmNgIGFuZCBga2VybmVsL2JwZi9tYXBfaW5fbWFwLmNgLiBUaG9zZSBhcmUgKmRlZmluaXRlbHkqIGludGVyZXN0aW5nIGFyZWFzLiBUaG9zZSBmaWxlcyBhcmUgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQsIHdoaWNoIG1lYW5zIHRoZSBmdW5jdGlvbnMgaW4gdGhlc2UgZmlsZXMgYXJlIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBjb25maWcgaXMgc2V0LiBDb25zaWRlcmluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBpbnRlcmFjdGlvbnMgdGhvc2UgZmlsZXMgZW5hYmxlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gY29tZm9ydGFibGUgd2l0aCB0aGF0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJIHdvdWxkIGxpa2UgdG8gZG8gc29tZSBhZGRpdGlvbmFsIGNvZGUgcmV2aWV3cyB3aGVuIHRpbWUgcGVybWl0cyB0byBwcmV2ZW50IHJlZ3Jlc3Npb25zIGFuZCBzZWN1cml0eSBpc3N1ZXMgdGhhdCBtaWdodCBiZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgY29uZmlnIGNoYW5nZS4gSSdsbCBuZWVkIHRvIGRvIGEgZGVlcCBkaXZlIHRoZXJlIGFzIHBhcnQgb2YgbXkgZHVlIGRpbGlnZW5jZS4gT2theSwgdGhhdCdzIHRoZSBzY29wZSBvZiB0aGUgaW1tZWRpYXRlIGNoYW5nZSB1bmRlcnN0b29kLiBMZXQncyBzZWUgaWYgdGhlIGJ1aWxkIHN5c3RlbSBoYW5kbGVzIHRoZSBkZXBlbmRlbmN5IGNvcnJlY3RseS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzIzMiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEwOjQ0OjA1LjIyMzAwNDEzNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NjI3ODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhc2h0YWJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGxvY2FsX3N0b3JhZ2UubyBxdWV1ZV9zdGFja19tYXBzLm8gcmluZ2J1Zi5vIGJwZl9pbnNuX2FycmF5Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTA6NDQ6MDUuMzMyNjM1OTgyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTg0OTcyMDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEJQRiBIYXNoIE1hcCBFbGVtZW50IFN0cnVjdHVyZSBDaGFuZ2VzKipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGludG8gdGhpcyBwYXRjaC4gVGhlIGtleSBoZXJlIGlzIGRlZmluaXRlbHkgYENPTkZJR19CUEZfU1lTQ0FMTGAsIHRoYXQncyB0aGUgbWFpbiBlbmFibGVyLiBMZXQncyBnZXQgdGhlIGZvY3VzIHJpZ2h0LiBTaW5jZSB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgaGFzaCBtYXAgZWxlbWVudHMgYXJlIHN0cnVjdHVyZWQgaW50ZXJuYWxseSwgd2UgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIHRob3NlIGVsZW1lbnRzLiBUaGUgb25lcyB0aGF0IGRvIHRoZSBhbGxvY2F0aW5nLCB1cGRhdGluZywgbG9va2luZyB1cCwgYW5kIGRlbGV0aW5nLiBUaG9zZSBhcmUgdGhlIGhpZ2gtdmFsdWUgdGFyZ2V0cyBmb3IgZnV6emluZy5cblxuTXkgaW5pdGlhbCBsaXN0IGluY2x1ZGVzOlxuXG4qICAgYGh0YWJfbWFwX2FsbG9jYFxuKiAgIGBodGFiX21hcF91cGRhdGVfZWxlbWBcbiogICBgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtYFxuKiAgIGBodGFiX21hcF9kZWxldGVfZWxlbWBcbiogICBgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtYFxuKiAgIGBodGFiX21hcF9sb29rdXBfZWxlbWBcbiogICBgaHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtYFxuKiAgIGBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW1gXG4qICAgYGh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW1gXG4qICAgYGh0YWJfbWFwX2dldF9uZXh0X2tleWBcbiogICBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYFxuKiAgIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYFxuKiAgIGBicGZfbWFwX21ldGFfYWxsb2NgXG4qICAgYGJwZl9odGFiX21hcF9tZXRhX2luaXRgXG5cbldhaXQgYSBzZWNvbmQsIGBodGFiX21hcF9hbGxvY2AgaXMgc3RhdGljLCByaWdodD8gQnV0IGl0J3MgcGFydCBvZiB0aGUgbWFwIG9wZXJhdGlvbnMgY2FsbGJhY2sgc3RydWN0dXJlLiBUaGF0IG1lYW5zIHRoZSBjb21waWxlciB3b24ndCBuZWNlc3NhcmlseSBpbmxpbmUgaXQsIGFuZCB3ZSAqY2FuKiB0YXJnZXQgaXQsIGFuZCB0aGUgc2FtZSBnb2VzIGZvciBvdGhlciBzdGF0aWMgZnVuY3Rpb25zIHdoaWNoIGFyZSBhc3NpZ25lZCBhcyBgYnBmX21hcF9vcHNgIGNhbGxiYWNrcy4gUGVyZmVjdC4gR29vZCBjYXRjaC4gTGV0J3MgcmVmaW5lIHRoZSBsaXN0LiBTbywgaW5jbHVkaW5nIHRob3NlLCBsZXQncyBhbHNvIGFkZCBgYnBmX2h0YWJfbWFwX21ldGFfaW5pdGAgYW5kIGBicGZfaHRhYl9tYXBfbWV0YV9zaXplYCBzaW5jZSB0aGV5J3JlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0J3MgdmVyaWZ5IHRob3NlIGZ1bmN0aW9uIG5hbWVzIG9uZSBsYXN0IHRpbWU6XG5cbiogICBgaHRhYl9tYXBfYWxsb2NgXG4qICAgYGh0YWJfbWFwX3VwZGF0ZV9lbGVtYFxuKiAgIGBodGFiX2xydV9tYXBfdXBkYXRlX2VsZW1gXG4qICAgYGh0YWJfbWFwX2RlbGV0ZV9lbGVtYFxuKiAgIGBodGFiX2xydV9tYXBfZGVsZXRlX2VsZW1gXG4qICAgYGh0YWJfbWFwX2xvb2t1cF9lbGVtYFxuKiAgIGBodGFiX2xydV9tYXBfbG9va3VwX2VsZW1gXG4qICAgYGh0YWJfcGVyY3B1X21hcF9sb29rdXBfZWxlbWBcbiogICBgaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfZWxlbWBcbiogICBgaHRhYl9tYXBfZ2V0X25leHRfa2V5YFxuKiAgIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gXG4qICAgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgXG4qICAgYGJwZl9tYXBfbWV0YV9hbGxvY2BcbiogICBgYnBmX2h0YWJfbWFwX21ldGFfaW5pdGBcbiogICBgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZWBcblxuQWxyaWdodC4gQ29uZmlndXJhdGlvbi13aXNlLCBpdCdzIGp1c3QgYEJQRl9TWVNDQUxMYCwgZ29vZC5cblxuTm93LCB0aGUgcmVhc29uaW5nOiBUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCBvcHRpbWl6aW5nIGhhc2ggbWFwIGVsZW1lbnQgbWVtb3J5IGxheW91dC4gU3BlY2lmaWNhbGx5LCBjb25kaXRpb25hbGx5IHJlbW92aW5nIHRoZSBoYXNoIHZhbHVlIGZpZWxkIGJhc2VkIG9uIHRoZSBrZXkgc2l6ZSBhbmQgdGhlIG1hcCB0eXBlLiBJdOKAmXMgYWxzbyBpbnRyb2R1Y2luZyBga2V5X29mZnNldGAgZm9yIGR5bmFtaWMga2V5L3ZhbHVlIG9mZnNldCBjYWxjdWxhdGlvbnMuIFRoaXMgY2hhbmdlIGlzIGNvcmUgdG8gdGhlIEJQRiBoYXNoIG1hcCBpbXBsZW1lbnRhdGlvbi4gVGhlcmVmb3JlLCBmdXp6aW5nIGlzIGNyaXRpY2FsIHRvIGV4cG9zZSBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0aWVzIG9yIGxvZ2ljYWwgZXJyb3JzIHJlc3VsdGluZyBmcm9tIHRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UuIE5lZWQgdG8gY2hlY2sgYGJwZl9odGFiX21hcF9tZXRhX2luaXRgIGFuZCBgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZWAgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzgxNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMDo0NDoxNi4zMTc2MTA3N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAxODM5NjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9odGFiX21hcF9tZXRhX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9oYXNodGFiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oYXNodGFiLmM9MzY0Mz1zaXplX3QgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSh2b2lkKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzY0Ny1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNjQ4OnZvaWQgYnBmX2h0YWJfbWFwX21ldGFfaW5pdChzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwX21ldGEsIHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXApXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzY0OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEwOjQ0OjE2LjYxOTQ1NTI0NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDAxMjM3NjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4ZWN1dGluZyB0aGUgUHJvY2VkdXJlKipcblxuT2theSwgdGhlIHByZWxpbWluYXJ5IGNoZWNrcyBhbGwgc2VlbSBzb3VuZC4gVGhlIGludGVybmFsIHN0YXRlIGFwcGVhcnMgYXMgZXhwZWN0ZWQsIGFuZCB0aGUgaW5wdXQgZGF0YSB2YWxpZGF0ZXMgYWdhaW5zdCBteSBrbm93biBjb25zdHJhaW50cy4gTm8gcmVkIGZsYWdzIGFyZSB3YXZpbmcuIEknbSBzYXRpc2ZpZWQgdGhhdCBwcm9jZWVkaW5nIHdpdGggdGhlIGNvcmUgZXhlY3V0aW9uIGlzIHdhcnJhbnRlZC5cblxuVGhlcmVmb3JlLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBUaGlzIGZ1bmN0aW9uIGVuY2Fwc3VsYXRlcyB0aGUgZmluYWwgc3RhZ2Ugb2YgdGhpcyBwcm9jZXNzIC0gdGhlIGRlZmluaXRpdmUgYWN0aW9uIHdoaWNoIGNvbmZpcm1zIHRoZSBwcm9jZXNzIGV4ZWN1dGlvbiBpcyBjb21wbGV0ZS4gSSdtIGNvbmZpZGVudCB0aGF0IGludm9raW5nIGBzZXQtcmVzdWx0c2AgYXQgdGhpcyBqdW5jdHVyZSB3aWxsIHlpZWxkIHRoZSBjb3JyZWN0IGFuZCBkZXNpcmVkIG91dHB1dCwgZWZmZWN0aXZlbHkgY29tcGxldGluZyB0aGlzIHBhcnRpY3VsYXIgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk2NTYsIk91dHB1dFRva2VucyI6MzM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTA6NDQ6MjEuMDIwNjk1OTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM3NDU2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHRhYl9tYXBfYWxsb2NcIixcbiAgICBcImh0YWJfbWFwX3VwZGF0ZV9lbGVtXCIsXG4gICAgXCJodGFiX2xydV9tYXBfdXBkYXRlX2VsZW1cIixcbiAgICBcImh0YWJfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJodGFiX2xydV9tYXBfZGVsZXRlX2VsZW1cIixcbiAgICBcImh0YWJfbWFwX2xvb2t1cF9lbGVtXCIsXG4gICAgXCJodGFiX2xydV9tYXBfbG9va3VwX2VsZW1cIixcbiAgICBcImh0YWJfcGVyY3B1X21hcF9sb29rdXBfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfZWxlbVwiLFxuICAgIFwiaHRhYl9tYXBfZ2V0X25leHRfa2V5XCIsXG4gICAgXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1cIixcbiAgICBcIl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImJwZl9tYXBfbWV0YV9hbGxvY1wiLFxuICAgIFwiYnBmX2h0YWJfbWFwX21ldGFfaW5pdFwiLFxuICAgIFwiYnBmX2h0YWJfbWFwX21ldGFfc2l6ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyB0aGUgbWVtb3J5IGxheW91dCBvZiBCUEYgaGFzaCBtYXAgZWxlbWVudHMgYnkgY29uZGl0aW9uYWxseSByZW1vdmluZyB0aGUgaGFzaCB2YWx1ZSBmaWVsZCB3aGVuIGl0J3Mgbm90IG5lZWRlZC4gSXQgaW50cm9kdWNlcyBga2V5X29mZnNldGAgdG8gZHluYW1pY2FsbHkgY29tcHV0ZSB0aGUgb2Zmc2V0IG9mIHRoZSBrZXkgYW5kIHZhbHVlIHdpdGhpbiB0aGUgZWxlbWVudC4gSXQgYWxzbyBtb2RpZmllcyBgbWFwX2luX21hcC5jYCB0byBwcm9wYWdhdGUgdGhpcyBvZmZzZXQgZm9yIGlubmVyIG1hcHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgaGFzaCBtYXAgaW1wbGVtZW50YXRpb24gYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh0YWJfbWFwX2FsbG9jXCIsXG4gICAgXCJodGFiX21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtXCIsXG4gICAgXCJodGFiX21hcF9kZWxldGVfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtXCIsXG4gICAgXCJodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW1cIixcbiAgICBcImh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW1cIixcbiAgICBcImh0YWJfbWFwX2dldF9uZXh0X2tleVwiLFxuICAgIFwiX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJicGZfbWFwX21ldGFfYWxsb2NcIixcbiAgICBcImJwZl9odGFiX21hcF9tZXRhX2luaXRcIixcbiAgICBcImJwZl9odGFiX21hcF9tZXRhX3NpemVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgdGhlIG1lbW9yeSBsYXlvdXQgb2YgQlBGIGhhc2ggbWFwIGVsZW1lbnRzIGJ5IGNvbmRpdGlvbmFsbHkgcmVtb3ZpbmcgdGhlIGhhc2ggdmFsdWUgZmllbGQgd2hlbiBpdCdzIG5vdCBuZWVkZWQuIEl0IGludHJvZHVjZXMgYGtleV9vZmZzZXRgIHRvIGR5bmFtaWNhbGx5IGNvbXB1dGUgdGhlIG9mZnNldCBvZiB0aGUga2V5IGFuZCB2YWx1ZSB3aXRoaW4gdGhlIGVsZW1lbnQuIEl0IGFsc28gbW9kaWZpZXMgYG1hcF9pbl9tYXAuY2AgdG8gcHJvcGFnYXRlIHRoaXMgb2Zmc2V0IGZvciBpbm5lciBtYXBzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIGhhc2ggbWFwIGltcGxlbWVudGF0aW9uIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowl9tqv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-01 10:41:33 +0000 UTC FinishedAt: 2026-08-01 10:44:22 +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": "cfce77b63375dac81d53f2f85593c548415206b7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "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": "cfce77b63375dac81d53f2f85593c548415206b7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BPF_SYSCALL" ], "series_id": "f44ec010-4f69-4776-9bf9-15526781c8fa" }, "track": "KASAN", "fuzz": { "focus": [ "bpf" ], "focus_symbols": [ "htab_map_alloc", "htab_map_update_elem", "htab_lru_map_update_elem", "htab_map_delete_elem", "htab_lru_map_delete_elem", "htab_map_lookup_elem", "htab_lru_map_lookup_elem", "htab_percpu_map_lookup_elem", "htab_lru_percpu_map_lookup_elem", "htab_map_get_next_key", "__htab_map_lookup_and_delete_elem", "__htab_map_lookup_and_delete_batch", "bpf_map_meta_alloc", "bpf_htab_map_meta_init", "bpf_htab_map_meta_size" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEwOjQzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JQRl9TWVNDQUxMJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHRhYl9tYXBfYWxsb2MmIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfdXBkYXRlX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2RlbGV0ZV9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9sb29rdXBfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9tYXBfbG9va3VwX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfZ2V0X25leHRfa2V5JiMzNDssCiAgICAmIzM0O19faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoJiMzNDssCiAgICAmIzM0O2JwZl9tYXBfbWV0YV9hbGxvYyYjMzQ7LAogICAgJiMzNDticGZfaHRhYl9tYXBfbWV0YV9pbml0JiMzNDssCiAgICAmIzM0O2JwZl9odGFiX21hcF9tZXRhX3NpemUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb3B0aW1pemVzIHRoZSBtZW1vcnkgbGF5b3V0IG9mIEJQRiBoYXNoIG1hcCBlbGVtZW50cyBieSBjb25kaXRpb25hbGx5IHJlbW92aW5nIHRoZSBoYXNoIHZhbHVlIGZpZWxkIHdoZW4gaXQmIzM5O3Mgbm90IG5lZWRlZC4gSXQgaW50cm9kdWNlcyBga2V5X29mZnNldGAgdG8gZHluYW1pY2FsbHkgY29tcHV0ZSB0aGUgb2Zmc2V0IG9mIHRoZSBrZXkgYW5kIHZhbHVlIHdpdGhpbiB0aGUgZWxlbWVudC4gSXQgYWxzbyBtb2RpZmllcyBgbWFwX2luX21hcC5jYCB0byBwcm9wYWdhdGUgdGhpcyBvZmZzZXQgZm9yIGlubmVyIG1hcHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgaGFzaCBtYXAgaW1wbGVtZW50YXRpb24gYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycyBhcmUgaW50cm9kdWNlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMDo0MzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDFiN2NiNjY3ZmYyNzA0YjZiOTg1OGY5ZDZiMzAxYTU1NGVmMmViMDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDEwOjQzOjMxIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcbmluZGV4IDlmMzk0ZTFhYTJlODUuLjgyYjE5YmQ1NDMxMDkgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oYXNodGFiLmNcbkBAIC0xMDAsMTMgJiM0MzsxMDAsMTYgQEAgc3RydWN0IGJwZl9odGFiIHtcbiBcdHN0cnVjdCBwZXJjcHVfY291bnRlciBwY291bnQ7XG4gXHRhdG9taWNfdCBjb3VudDtcbiBcdGJvb2wgdXNlX3BlcmNwdV9jb3VudGVyO1xuJiM0MztcdGJvb2wgaGFzX2hhc2g7XG4gXHR1MzIgbl9idWNrZXRzO1x0LyogbnVtYmVyIG9mIGhhc2ggYnVja2V0cyAqL1xuIFx0dTMyIGVsZW1fc2l6ZTtcdC8qIHNpemUgb2YgZWFjaCBlbGVtZW50IGluIGJ5dGVzICovXG4mIzQzO1x0dTMyIGtleV9vZmZzZXQ7XHQvKiBvZmZzZXQgb2Yga2V5IGluIGJ5dGVzICovXG4gXHR1MzIgaGFzaHJuZDtcbiB9O1xuIFxuIC8qIGVhY2ggaHRhYiBlbGVtZW50IGlzIHN0cnVjdCBodGFiX2VsZW0gJiM0Mzsga2V5ICYjNDM7IHZhbHVlICovXG4tc3RydWN0IGh0YWJfZWxlbSB7XG4mIzQzO3N0cnVjdCBodGFiX2VsZW07XG4mIzQzO3N0cnVjdCBodGFiX25vZGUge1xuIFx0dW5pb24ge1xuIFx0XHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSBoYXNoX25vZGU7XG4gXHRcdHN0cnVjdCB7XG5AQCAtMTE3LDE4ICYjNDM7MTIwLDMyIEBAIHN0cnVjdCBodGFiX2VsZW0ge1xuIFx0XHRcdH07XG4gXHRcdH07XG4gXHR9O1xuLVx0dW5pb24ge1xuLVx0XHQvKiBwb2ludGVyIHRvIHBlci1jcHUgcG9pbnRlciAqL1xuLVx0XHR2b2lkICpwdHJfdG9fcHB0cjtcbi1cdFx0c3RydWN0IGJwZl9scnVfbm9kZSBscnVfbm9kZTtcbi1cdH07XG4tXHR1MzIgaGFzaDtcbi1cdGNoYXIga2V5W10gX19hbGlnbmVkKDgpO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RydWN0IGh0YWJfZWxlbSB7XG4mIzQzO1x0c3RydWN0IGh0YWJfbm9kZSBub2RlO1xuJiM0MztcdHU4IGRhdGFbXSBfX2FsaWduZWQoOCk7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdHJ1Y3QgaHRhYl9lbGVtX2xydSB7XG4mIzQzO1x0c3RydWN0IGh0YWJfbm9kZSBub2RlO1xuJiM0MztcdHN0cnVjdCBicGZfbHJ1X25vZGUgbHJ1X25vZGU7XG4mIzQzO1x0dTggZGF0YVtdIF9fYWxpZ25lZCg4KTtcbiYjNDM7fTtcbiYjNDM7XG4mIzQzOy8qIE9ubHkgZm9yIG5vbi1wcmVhbGxvY2F0ZWQgUENQVSBtYXBzLiBQcmVhbGxvY2F0ZWQgUENQVSBtYXBzIGRvbiYjMzk7dCBuZWVkXG4mIzQzOyAqIHB0cl90b19wcHRyLCBhbmQgdXNlIGh0YWJfZWxlbS5cbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBodGFiX2VsZW1fcGNwdSB7XG4mIzQzO1x0c3RydWN0IGh0YWJfbm9kZSBub2RlO1xuJiM0MztcdHZvaWQgKnB0cl90b19wcHRyO1xuJiM0MztcdHU4IGRhdGFbXSBfX2FsaWduZWQoOCk7XG4gfTtcbiBcbiBzdHJ1Y3QgaHRhYl9idGZfcmVjb3JkIHtcbiBcdHN0cnVjdCBidGZfcmVjb3JkICpyZWNvcmQ7XG4gXHR1MzIga2V5X3NpemU7XG4mIzQzO1x0dTMyIGtleV9vZmZzZXQ7XG4gfTtcbiBcbiBzdGF0aWMgaW5saW5lIGJvb2wgaHRhYl9pc19wcmVhbGxvYyhjb25zdCBzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG5AQCAtMTM2LDYgJiM0MzsxNTMsMjEgQEAgc3RhdGljIGlubGluZSBib29sIGh0YWJfaXNfcHJlYWxsb2MoY29uc3Qgc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0cmV0dXJuICEoaHRhYi1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9OT19QUkVBTExPQyk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfbHJ1X25vZGUgKmh0YWJfZWxlbV9scnVfbm9kZShzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIFx1MDAyNigoc3RydWN0IGh0YWJfZWxlbV9scnUgKilsKS1cdTAwM2VscnVfbm9kZTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkICpodGFiX2VsZW1fZ2V0X3B0cl90b19wcHRyKHN0cnVjdCBodGFiX2VsZW0gKmwpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS1cdTAwM2VwdHJfdG9fcHB0cjtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfcHRyX3RvX3BwdHIoc3RydWN0IGh0YWJfZWxlbSAqbCwgdm9pZCAqcHRyKVxuJiM0Mzt7XG4mIzQzO1x0KChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS1cdTAwM2VwdHJfdG9fcHB0ciA9IHB0cjtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCBodGFiX2luaXRfYnVja2V0cyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4ge1xuIFx0dW5zaWduZWQgaW50IGk7XG5AQCAtMTgzLDI1ICYjNDM7MjE1LDMwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19mZF9odGFiKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdHJldHVybiBodGFiLVx1MDAzZW1hcC5tYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfSEFTSF9PRl9NQVBTO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV92YWx1ZShzdHJ1Y3QgaHRhYl9lbGVtICpsLCB1MzIga2V5X3NpemUpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqaHRhYl9lbGVtX2tleShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHZvaWQgKilsICYjNDM7IGh0YWItXHUwMDNla2V5X29mZnNldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkICpodGFiX2VsZW1fdmFsdWUoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuIHtcbi1cdHJldHVybiBsLVx1MDAzZWtleSAmIzQzOyByb3VuZF91cChrZXlfc2l6ZSwgOCk7XG4mIzQzO1x0cmV0dXJuIGh0YWJfZWxlbV9rZXkoaHRhYiwgbCkgJiM0Mzsgcm91bmRfdXAoaHRhYi1cdTAwM2VtYXAua2V5X3NpemUsIDgpO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9wdHIoc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGtleV9zaXplLFxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9wdHIoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsLFxuIFx0XHRcdFx0ICAgICB2b2lkIF9fcGVyY3B1ICpwcHRyKVxuIHtcbi1cdCoodm9pZCBfX3BlcmNwdSAqKilodGFiX2VsZW1fdmFsdWUobCwga2V5X3NpemUpID0gcHB0cjtcbiYjNDM7XHQqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpID0gcHB0cjtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIF9fcGVyY3B1ICpodGFiX2VsZW1fZ2V0X3B0cihzdHJ1Y3QgaHRhYl9lbGVtICpsLCB1MzIga2V5X3NpemUpXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BlcmNwdSAqaHRhYl9lbGVtX2dldF9wdHIoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuIHtcbi1cdHJldHVybiAqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGwsIGtleV9zaXplKTtcbiYjNDM7XHRyZXR1cm4gKih2b2lkIF9fcGVyY3B1ICoqKWh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgKmZkX2h0YWJfbWFwX2dldF9wdHIoY29uc3Qgc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiYjNDM7c3RhdGljIHZvaWQgKmZkX2h0YWJfbWFwX2dldF9wdHIoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuIHtcbi1cdHJldHVybiAqKHZvaWQgKiopaHRhYl9lbGVtX3ZhbHVlKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4mIzQzO1x0cmV0dXJuICoodm9pZCAqKilodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpnZXRfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgaW50IGkpXG5AQCAtMjA5LDYgJiM0MzsyNDYsMzMgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmdldF9odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCBpbnQgaSlcbiBcdHJldHVybiAoc3RydWN0IGh0YWJfZWxlbSAqKSAoaHRhYi1cdTAwM2VlbGVtcyAmIzQzOyBpICogKHU2NClodGFiLVx1MDAzZWVsZW1fc2l6ZSk7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaHRhYl9oYXNfaGFzaChjb25zdCBzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gaHRhYi1cdTAwM2VoYXNfaGFzaDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB1MzIgaHRhYl9lbGVtX2hhc2goc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGh0YWJfaXNfbHJ1KGh0YWIpKVxuJiM0MztcdFx0cmV0dXJuICoodTMyICopKChzdHJ1Y3QgaHRhYl9lbGVtX2xydSAqKWwpLVx1MDAzZWRhdGE7XG4mIzQzO1x0ZWxzZSBpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikgXHUwMDI2XHUwMDI2ICFodGFiX2lzX3ByZWFsbG9jKGh0YWIpKVxuJiM0MztcdFx0cmV0dXJuICoodTMyICopKChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS1cdTAwM2VkYXRhO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHJldHVybiAqKHUzMiAqKWwtXHUwMDNlZGF0YTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfaGFzaChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwsIHUzMiBoYXNoKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFodGFiX2hhc19oYXNoKGh0YWIpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdGlmIChodGFiX2lzX2xydShodGFiKSlcbiYjNDM7XHRcdCoodTMyICopKChzdHJ1Y3QgaHRhYl9lbGVtX2xydSAqKWwpLVx1MDAzZWRhdGEgPSBoYXNoO1xuJiM0MztcdGVsc2UgaWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpIFx1MDAyNlx1MDAyNiAhaHRhYl9pc19wcmVhbGxvYyhodGFiKSlcbiYjNDM7XHRcdCoodTMyICopKChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS1cdTAwM2VkYXRhID0gaGFzaDtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHQqKHUzMiAqKWwtXHUwMDNlZGF0YSA9IGhhc2g7XG4mIzQzO31cbiYjNDM7XG4gLyogQm90aCBwZXJjcHUgYW5kIGZkIGh0YWIgc3VwcG9ydCBpbi1wbGFjZSB1cGRhdGUsIHNvIG5vIG5lZWQgZm9yXG4gICogZXh0cmEgZWxlbS4gTFJVIGl0c2VsZiBjYW4gcmVtb3ZlIHRoZSBsZWFzdCB1c2VkIGVsZW1lbnQsIHNvXG4gICogdGhlcmUgaXMgbm8gbmVlZCBmb3IgYW4gZXh0cmEgZWxlbSBkdXJpbmcgbWFwX3VwZGF0ZS5cbkBAIC0yMzEsNyAmIzQzOzI5NSw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZnJlZV9wcmVhbGxvY2VkX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFxuIFx0XHRlbGVtID0gZ2V0X2h0YWJfZWxlbShodGFiLCBpKTtcbiBcdFx0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsXG4tXHRcdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShlbGVtLCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xuJiM0MztcdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pKTtcbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG4gXHR9XG4gfVxuQEAgLTI1NCw3ICYjNDM7MzE4LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcbiBcdFx0ZWxlbSA9IGdldF9odGFiX2VsZW0oaHRhYiwgaSk7XG4gXHRcdGlmIChodGFiX2lzX3BlcmNwdShodGFiKSkge1xuLVx0XHRcdHZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSk7XG4mIzQzO1x0XHRcdHZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBlbGVtKTtcbiBcdFx0XHRpbnQgY3B1O1xuIFxuIFx0XHRcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbkBAIC0yNjMsNyAmIzQzOzMyNyw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZnJlZV9wcmVhbGxvY2VkX2ZpZWxkcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4gXHRcdFx0fVxuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdGJwZl9vYmpfZnJlZV9maWVsZHMoaHRhYi1cdTAwM2VtYXAucmVjb3JkLFxuLVx0XHRcdFx0XHQgICAgaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4mIzQzO1x0XHRcdFx0XHQgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pKTtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdFx0fVxuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbkBAIC0yODAsOCAmIzQzOzM0NCw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZnJlZV9lbGVtcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBodGFiLVx1MDAzZW1hcC5tYXhfZW50cmllczsgaSYjNDM7JiM0MzspIHtcbiBcdFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcbiBcbi1cdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGdldF9odGFiX2VsZW0oaHRhYiwgaSksXG4tXHRcdFx0XHRcdCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSk7XG4mIzQzO1x0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgZ2V0X2h0YWJfZWxlbShodGFiLCBpKSk7XG4gXHRcdGZyZWVfcGVyY3B1KHBwdHIpO1xuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdH1cbkBAIC0zMDgsOCAmIzQzOzM3MSw4IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpwcmVhbGxvY19scnVfcG9wKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgdm9pZCAqa2V5LFxuIFxuIFx0aWYgKG5vZGUpIHtcbiBcdFx0YnBmX21hcF9pbmNfZWxlbV9jb3VudChcdTAwMjZodGFiLVx1MDAzZW1hcCk7XG4tXHRcdGwgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpO1xuLVx0XHRtZW1jcHkobC1cdTAwM2VrZXksIGtleSwgaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpO1xuJiM0MztcdFx0bCA9IChzdHJ1Y3QgaHRhYl9lbGVtICopY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSk7XG4mIzQzO1x0XHRtZW1jcHkoaHRhYl9lbGVtX2tleShodGFiLCBsKSwga2V5LCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSk7XG4gXHRcdHJldHVybiBsO1xuIFx0fVxuIFxuQEAgLTM0MCw4ICYjNDM7NDAzLDcgQEAgc3RhdGljIGludCBwcmVhbGxvY19pbml0KHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdFx0XHRcdFx0ICAgIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTtcbiBcdFx0aWYgKCFwcHRyKVxuIFx0XHRcdGdvdG8gZnJlZV9lbGVtcztcbi1cdFx0aHRhYl9lbGVtX3NldF9wdHIoZ2V0X2h0YWJfZWxlbShodGFiLCBpKSwgaHRhYi1cdTAwM2VtYXAua2V5X3NpemUsXG4tXHRcdFx0XHQgIHBwdHIpO1xuJiM0MztcdFx0aHRhYl9lbGVtX3NldF9wdHIoaHRhYiwgZ2V0X2h0YWJfZWxlbShodGFiLCBpKSwgcHB0cik7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuIFxuQEAgLTM0OSw4ICYjNDM7NDExLDggQEAgc3RhdGljIGludCBwcmVhbGxvY19pbml0KHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdGlmIChodGFiX2lzX2xydShodGFiKSlcbiBcdFx0ZXJyID0gYnBmX2xydV9pbml0KFx1MDAyNmh0YWItXHUwMDNlbHJ1LFxuIFx0XHRcdFx0ICAgaHRhYi1cdTAwM2VtYXAubWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9OT19DT01NT05fTFJVLFxuLVx0XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgaGFzaCkgLVxuLVx0XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpLFxuJiM0MztcdFx0XHRcdCAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBkYXRhKSAtXG4mIzQzO1x0XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSxcbiBcdFx0XHRcdCAgIGh0YWJfbHJ1X21hcF9kZWxldGVfbm9kZSxcbiBcdFx0XHRcdCAgIGh0YWIpO1xuIFx0ZWxzZVxuQEAgLTM2MSwxMSAmIzQzOzQyMywxMSBAQCBzdGF0aWMgaW50IHByZWFsbG9jX2luaXQoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFxuIFx0aWYgKGh0YWJfaXNfbHJ1KGh0YWIpKVxuIFx0XHRicGZfbHJ1X3BvcHVsYXRlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBodGFiLVx1MDAzZWVsZW1zLFxuLVx0XHRcdFx0IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSxcbiYjNDM7XHRcdFx0XHQgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSxcbiBcdFx0XHRcdCBodGFiLVx1MDAzZWVsZW1fc2l6ZSwgbnVtX2VudHJpZXMpO1xuIFx0ZWxzZVxuIFx0XHRwY3B1X2ZyZWVsaXN0X3BvcHVsYXRlKFx1MDAyNmh0YWItXHUwMDNlZnJlZWxpc3QsXG4tXHRcdFx0XHQgICAgICAgaHRhYi1cdTAwM2VlbGVtcyAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZSksXG4mIzQzO1x0XHRcdFx0ICAgICAgIGh0YWItXHUwMDNlZWxlbXMgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgbm9kZS5mbm9kZSksXG4gXHRcdFx0XHQgICAgICAgaHRhYi1cdTAwM2VlbGVtX3NpemUsIG51bV9lbnRyaWVzKTtcbiBcbiBcdHJldHVybiAwO1xuQEAgLTQwMSw3ICYjNDM7NDYzLDcgQEAgc3RhdGljIGludCBhbGxvY19leHRyYV9lbGVtcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4gXHRcdC8qIHBvcCB3aWxsIHN1Y2NlZWQsIHNpbmNlIHByZWFsbG9jX2luaXQoKVxuIFx0XHQgKiBwcmVhbGxvY2F0ZWQgZXh0cmEgbnVtX3Bvc3NpYmxlX2NwdXMgZWxlbWVudHNcbiBcdFx0ICovXG4tXHRcdGxfbmV3ID0gY29udGFpbmVyX29mKGwsIHN0cnVjdCBodGFiX2VsZW0sIGZub2RlKTtcbiYjNDM7XHRcdGxfbmV3ID0gY29udGFpbmVyX29mKGwsIHN0cnVjdCBodGFiX2VsZW0sIG5vZGUuZm5vZGUpO1xuIFx0XHQqcGVyX2NwdV9wdHIocHB0ciwgY3B1KSA9IGxfbmV3O1xuIFx0fVxuIFx0aHRhYi1cdTAwM2VleHRyYV9lbGVtcyA9IHBwdHI7XG5AQCAtNDI1LDggJiM0Mzs0ODcsOCBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuIFx0Ym9vbCB6ZXJvX3NlZWQgPSAoYXR0ci1cdTAwM2VtYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX1pFUk9fU0VFRCk7XG4gXHRpbnQgbnVtYV9ub2RlID0gYnBmX21hcF9hdHRyX251bWFfbm9kZShhdHRyKTtcbiBcbi1cdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZS5uZXh0KSAhPVxuLVx0XHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGhhc2hfbm9kZS5wcHJldikpO1xuJiM0MztcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9ub2RlLCBmbm9kZS5uZXh0KSAhPVxuJiM0MztcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9ub2RlLCBoYXNoX25vZGUucHByZXYpKTtcbiBcbiBcdGlmICh6ZXJvX3NlZWQgXHUwMDI2XHUwMDI2ICFjYXBhYmxlKENBUF9TWVNfQURNSU4pKVxuIFx0XHQvKiBHdWFyZCBhZ2FpbnN0IGxvY2FsIERvUywgYW5kIGRpc2NvdXJhZ2UgcHJvZHVjdGlvbiB1c2UuICovXG5AQCAtNDc2LDcgJiM0Mzs1MzgsNyBAQCBzdGF0aWMgdm9pZCBodGFiX21lbV9kdG9yKHZvaWQgKm9iaiwgdm9pZCAqY3R4KVxuIFx0aWYgKElTX0VSUl9PUl9OVUxMKGhyZWMtXHUwMDNlcmVjb3JkKSlcbiBcdFx0cmV0dXJuO1xuIFxuLVx0bWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGhyZWMtXHUwMDNla2V5X3NpemUpO1xuJiM0MztcdG1hcF92YWx1ZSA9ICh2b2lkICopZWxlbSAmIzQzOyBocmVjLVx1MDAzZWtleV9vZmZzZXQgJiM0Mzsgcm91bmRfdXAoaHJlYy1cdTAwM2VrZXlfc2l6ZSwgOCk7XG4gXHRicGZfb2JqX2ZyZWVfZmllbGRzKGhyZWMtXHUwMDNlcmVjb3JkLCBtYXBfdmFsdWUpO1xuIH1cbiBcbkBAIC01MDIsNyAmIzQzOzU2NCw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZHRvcl9jdHhfZnJlZSh2b2lkICpjdHgpXG4gfVxuIFxuIHN0YXRpYyBpbnQgYnBmX21hX3NldF9kdG9yKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSxcbi1cdFx0XHQgICB2b2lkICgqZHRvcikodm9pZCAqLCB2b2lkICopKVxuJiM0MztcdFx0XHQgICB2b2lkICgqZHRvcikodm9pZCAqLCB2b2lkICopLCB1MzIga2V5X29mZnNldClcbiB7XG4gXHRzdHJ1Y3QgaHRhYl9idGZfcmVjb3JkICpocmVjO1xuIFx0aW50IGVycjtcbkBAIC01MTUsNiAmIzQzOzU3Nyw3IEBAIHN0YXRpYyBpbnQgYnBmX21hX3NldF9kdG9yKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSxcbiBcdGlmICghaHJlYylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXHRocmVjLVx1MDAzZWtleV9zaXplID0gbWFwLVx1MDAzZWtleV9zaXplO1xuJiM0MztcdGhyZWMtXHUwMDNla2V5X29mZnNldCA9IGtleV9vZmZzZXQ7XG4gXHRocmVjLVx1MDAzZXJlY29yZCA9IGJ0Zl9yZWNvcmRfZHVwKG1hcC1cdTAwM2VyZWNvcmQpO1xuIFx0aWYgKElTX0VSUihocmVjLVx1MDAzZXJlY29yZCkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihocmVjLVx1MDAzZXJlY29yZCk7XG5AQCAtNTM3LDkgJiM0Mzs2MDAsOSBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXG4gXHQgKiBwb3B1bGF0ZWQgaW4gaHRhYl9tYXBfYWxsb2MoKSwgc28gaXQgd2lsbCBhbHdheXMgYXBwZWFyIGFzIE5VTEwuXG4gXHQgKi9cbiBcdGlmIChodGFiX2lzX3BlcmNwdShodGFiKSlcbi1cdFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFx1MDAyNmh0YWItXHUwMDNlcGNwdV9tYSwgaHRhYl9wY3B1X21lbV9kdG9yKTtcbiYjNDM7XHRcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZodGFiLVx1MDAzZXBjcHVfbWEsIGh0YWJfcGNwdV9tZW1fZHRvciwgaHRhYi1cdTAwM2VrZXlfb2Zmc2V0KTtcbiBcdGVsc2Vcbi1cdFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFx1MDAyNmh0YWItXHUwMDNlbWEsIGh0YWJfbWVtX2R0b3IpO1xuJiM0MztcdFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFx1MDAyNmh0YWItXHUwMDNlbWEsIGh0YWJfbWVtX2R0b3IsIGh0YWItXHUwMDNla2V5X29mZnNldCk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG5AQCAtNTYyLDYgJiM0Mzs2MjUsMTIgQEAgc3RhdGljIHN0cnVjdCBicGZfbWFwICpodGFiX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcbiBcdGJwZl9tYXBfaW5pdF9mcm9tX2F0dHIoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGF0dHIpO1xuIFxuJiM0MztcdC8qIEF2b2lkIGhhc2ggbWVtb3J5IHVzZSBhbmQgY29tcGFyaXNvbnMgd2hlcmUgdW5uZWNlc3NhcnkuXG4mIzQzO1x0ICogdTMyIGhhc2ggcmVhZHMgYXJlIGFsd2F5cyBhdG9taWMuIElmIHdlIGVsaWRlIHRoZW0sIGtleSBjb21wYXJpc29ucyBtdXN0IGFsc28gYmUgYXRvbWljXG4mIzQzO1x0ICogdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmUga2V5IG1hdGNoZXMgZHVlIHRvIHRvcm4ga2V5IHJlYWRzIC8gd3JpdGVzLiBTbyBjaGVjayBrZXlfc2l6ZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRodGFiLVx1MDAzZWhhc19oYXNoID0gaHRhYl9pc19scnUoaHRhYikgfHwgaHRhYi1cdTAwM2VtYXAua2V5X3NpemUgXHUwMDNlIHNpemVvZih1bnNpZ25lZCBsb25nKTtcbiYjNDM7XG4gXHRpZiAocGVyY3B1X2xydSkge1xuIFx0XHQvKiBlbnN1cmUgZWFjaCBDUFUmIzM5O3MgbHJ1IGxpc3QgaGFzIFx1MDAzZT0xIGVsZW1lbnRzLlxuIFx0XHQgKiBzaW5jZSB3ZSBhcmUgYXQgaXQsIG1ha2UgZWFjaCBscnUgbGlzdCBoYXMgdGhlIHNhbWVcbkBAIC01ODMsOCAmIzQzOzY1MiwxNiBAQCBzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuIFxuIFx0aHRhYi1cdTAwM2VuX2J1Y2tldHMgPSByb3VuZHVwX3Bvd19vZl90d28oaHRhYi1cdTAwM2VtYXAubWF4X2VudHJpZXMpO1xuIFxuLVx0aHRhYi1cdTAwM2VlbGVtX3NpemUgPSBzaXplb2Yoc3RydWN0IGh0YWJfZWxlbSkgJiM0Mztcbi1cdFx0XHQgIHJvdW5kX3VwKGh0YWItXHUwMDNlbWFwLmtleV9zaXplLCA4KTtcbiYjNDM7XHRpZiAoaHRhYl9pc19scnUoaHRhYikpXG4mIzQzO1x0XHRodGFiLVx1MDAzZWtleV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgZGF0YSkgJiM0MzsgODtcbiYjNDM7XHRlbHNlIGlmIChwZXJjcHUgXHUwMDI2XHUwMDI2ICFwcmVhbGxvYylcbiYjNDM7XHRcdGh0YWItXHUwMDNla2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fcGNwdSwgZGF0YSkgJiM0MztcbiYjNDM7XHRcdFx0XHQgICAoaHRhYl9oYXNfaGFzaChodGFiKSA/IDggOiAwKTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHRodGFiLVx1MDAzZWtleV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBkYXRhKSAmIzQzO1xuJiM0MztcdFx0XHRcdCAgIChodGFiX2hhc19oYXNoKGh0YWIpID8gOCA6IDApO1xuJiM0MztcbiYjNDM7XHRodGFiLVx1MDAzZWVsZW1fc2l6ZSA9IGh0YWItXHUwMDNla2V5X29mZnNldCAmIzQzOyByb3VuZF91cChodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSwgOCk7XG4gXHRpZiAocGVyY3B1KVxuIFx0XHRodGFiLVx1MDAzZWVsZW1fc2l6ZSAmIzQzOz0gc2l6ZW9mKHZvaWQgKik7XG4gXHRlbHNlXG5AQCAtNjkyLDE1ICYjNDM7NzY5LDIzIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKnNlbGVjdF9idWNrZXQoc3RydWN0IGJwZl9odGFiICpodGFiLCB1MzJcbiB9XG4gXG4gLyogdGhpcyBsb29rdXAgZnVuY3Rpb24gY2FuIG9ubHkgYmUgY2FsbGVkIHdpdGggYnVja2V0IGxvY2sgdGFrZW4gKi9cbi1zdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLCB1MzIgaGFzaCxcbiYjNDM7c3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9lbGVtX3JhdyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsXG4mIzQzO1x0XHRcdFx0XHQgc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsIHUzMiBoYXNoLFxuIFx0XHRcdFx0XHQgdm9pZCAqa2V5LCB1MzIga2V5X3NpemUpXG4ge1xuIFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsO1xuIFxuLVx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSlcbi1cdFx0aWYgKGwtXHUwMDNlaGFzaCA9PSBoYXNoIFx1MDAyNlx1MDAyNiAhbWVtY21wKFx1MDAyNmwtXHUwMDNla2V5LCBrZXksIGtleV9zaXplKSlcbi1cdFx0XHRyZXR1cm4gbDtcbiYjNDM7XHRpZiAoaHRhYl9oYXNfaGFzaChodGFiKSkge1xuJiM0MztcdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKVxuJiM0MztcdFx0XHRpZiAoaHRhYl9lbGVtX2hhc2goaHRhYiwgbCkgPT0gaGFzaCBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdFx0ICAgICFtZW1jbXAoaHRhYl9lbGVtX2tleShodGFiLCBsKSwga2V5LCBrZXlfc2l6ZSkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGw7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShsLCBuLCBoZWFkLCBub2RlLmhhc2hfbm9kZSlcbiYjNDM7XHRcdFx0aWYgKCFtZW1jbXAoaHRhYl9lbGVtX2tleShodGFiLCBsKSwga2V5LCBrZXlfc2l6ZSkpXG4mIzQzO1x0XHRcdFx0cmV0dXJuIGw7XG4mIzQzO1x0fVxuIFxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTcwOSw3ICYjNDM7Nzk0LDggQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCwgdTMyIGhhc2hcbiAgKiB0aGUgdW5saWtlbHkgZXZlbnQgd2hlbiBlbGVtZW50cyBtb3ZlZCBmcm9tIG9uZSBidWNrZXQgaW50byBhbm90aGVyXG4gICogd2hpbGUgbGluayBsaXN0IGlzIGJlaW5nIHdhbGtlZFxuICAqL1xuLXN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGJwZl9odGFiICpodGFiLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLFxuIFx0XHRcdFx0XHQgICAgICAgdTMyIGhhc2gsIHZvaWQgKmtleSxcbiBcdFx0XHRcdFx0ICAgICAgIHUzMiBrZXlfc2l6ZSwgdTMyIG5fYnVja2V0cylcbiB7XG5AQCAtNzE3LDkgJiM0Mzs4MDMsMTYgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9udWxsc19lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCxcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4gYWdhaW46XG4tXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxuLVx0XHRpZiAobC1cdTAwM2VoYXNoID09IGhhc2ggXHUwMDI2XHUwMDI2ICFtZW1jbXAoXHUwMDI2bC1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpKVxuLVx0XHRcdHJldHVybiBsO1xuJiM0MztcdGlmIChodGFiX2hhc19oYXNoKGh0YWIpKSB7XG4mIzQzO1x0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpXG4mIzQzO1x0XHRcdGlmIChodGFiX2VsZW1faGFzaChodGFiLCBsKSA9PSBoYXNoIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgICAgIW1lbWNtcChodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGtleV9zaXplKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gbDtcbiYjNDM7XHR9IGVsc2Uge1xuJiM0MztcdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKVxuJiM0MztcdFx0XHRpZiAoIW1lbWNtcChodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGtleV9zaXplKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gbDtcbiYjNDM7XHR9XG4gXG4gXHRpZiAodW5saWtlbHkoZ2V0X251bGxzX3ZhbHVlKG4pICE9IChoYXNoIFx1MDAyNiAobl9idWNrZXRzIC0gMSkpKSlcbiBcdFx0Z290byBhZ2FpbjtcbkBAIC03NDcsMTcgJiM0Mzs4NDAsMTggQEAgc3RhdGljIHZvaWQgKl9faHRhYl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIFxuIFx0aGVhZCA9IHNlbGVjdF9idWNrZXQoaHRhYiwgaGFzaCk7XG4gXG4tXHRsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItXHUwMDNlbl9idWNrZXRzKTtcbiYjNDM7XHRsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItXHUwMDNlbl9idWNrZXRzKTtcbiBcbiBcdHJldHVybiBsO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCAqaHRhYl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsID0gX19odGFiX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG4gXG4gXHRpZiAobClcbi1cdFx0cmV0dXJuIGh0YWJfZWxlbV92YWx1ZShsLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuJiM0MztcdFx0cmV0dXJuIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcbiBcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC03NzUsNiAmIzQzOzg2OSw3IEBAIHN0YXRpYyB2b2lkICpodGFiX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gICovXG4gc3RhdGljIGludCBodGFiX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG4ge1xuJiM0MztcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xuIFx0Y29uc3QgaW50IHJldCA9IEJQRl9SRUdfMDtcbiBcbkBAIC03ODMsNyAmIzQzOzg3OCw3IEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHJldCwgMCwgMSk7XG4gXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfSU1NKEJQRl9BREQsIHJldCxcbi1cdFx0XHRcdG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGtleSkgJiM0MztcbiYjNDM7XHRcdFx0XHRodGFiLVx1MDAzZWtleV9vZmZzZXQgJiM0MztcbiBcdFx0XHRcdHJvdW5kX3VwKG1hcC1cdTAwM2VrZXlfc2l6ZSwgOCkpO1xuIFx0cmV0dXJuIGluc24gLSBpbnNuX2J1ZjtcbiB9XG5AQCAtNzkxLDEyICYjNDM7ODg2LDEzIEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqX19odGFiX2xydV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdFx0XHRcdHZvaWQgKmtleSwgY29uc3QgYm9vbCBtYXJrKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsID0gX19odGFiX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG4gXG4gXHRpZiAobCkge1xuIFx0XHRpZiAobWFyaylcbi1cdFx0XHRicGZfbHJ1X25vZGVfc2V0X3JlZihcdTAwMjZsLVx1MDAzZWxydV9ub2RlKTtcbi1cdFx0cmV0dXJuIGh0YWJfZWxlbV92YWx1ZShsLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuJiM0MztcdFx0XHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobCkpO1xuJiM0MztcdFx0cmV0dXJuIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcbiBcdH1cbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTgxNSw2ICYjNDM7OTExLDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfbHJ1X21hcF9sb29rdXBfZWxlbV9zeXMoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIHN0YXRpYyBpbnQgaHRhYl9scnVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG4ge1xuJiM0MztcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xuIFx0Y29uc3QgaW50IHJldCA9IEJQRl9SRUdfMDtcbiBcdGNvbnN0IGludCByZWZfcmVnID0gQlBGX1JFR18xO1xuQEAgLTgyNCwxNSAmIzQzOzkyMSwxNSBAQCBzdGF0aWMgaW50IGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pO1xuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgcmV0LCAwLCA0KTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9CLCByZWZfcmVnLCByZXQsXG4tXHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpICYjNDM7XG4mIzQzO1x0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSkgJiM0MztcbiBcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX2xydV9ub2RlLCByZWYpKTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KTkUsIHJlZl9yZWcsIDAsIDEpO1xuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX1NUX01FTShCUEZfQiwgcmV0LFxuLVx0XHRcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpICYjNDM7XG4mIzQzO1x0XHRcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSAmIzQzO1xuIFx0XHRcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9scnVfbm9kZSwgcmVmKSxcbiBcdFx0XHQgICAgIDEpO1xuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCByZXQsXG4tXHRcdFx0XHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICYjNDM7XG4mIzQzO1x0XHRcdFx0aHRhYi1cdTAwM2VrZXlfb2Zmc2V0ICYjNDM7XG4gXHRcdFx0XHRyb3VuZF91cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbiBcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XG4gfVxuQEAgLTg0NCwxMyAmIzQzOzk0MSwxMyBAQCBzdGF0aWMgdm9pZCBjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmIChodGFiX2lzX3BlcmNwdShodGFiKSkge1xuLVx0XHR2b2lkIF9fcGVyY3B1ICpwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZWxlbSwgaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpO1xuJiM0MztcdFx0dm9pZCBfX3BlcmNwdSAqcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGVsZW0pO1xuIFx0XHRpbnQgY3B1O1xuIFxuIFx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KVxuIFx0XHRcdGJwZl9vYmpfY2FuY2VsX2ZpZWxkcyhcdTAwMjZodGFiLVx1MDAzZW1hcCwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7XG4gXHR9IGVsc2Uge1xuLVx0XHR2b2lkICptYXBfdmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoZWxlbSwgaHRhYi1cdTAwM2VtYXAua2V5X3NpemUpO1xuJiM0MztcdFx0dm9pZCAqbWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pO1xuIFxuIFx0XHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIG1hcF92YWx1ZSk7XG4gXHR9XG5AQCAtODY5LDE3ICYjNDM7OTY2LDE3IEBAIHN0YXRpYyBib29sIGh0YWJfbHJ1X21hcF9kZWxldGVfbm9kZSh2b2lkICphcmcsIHN0cnVjdCBicGZfbHJ1X25vZGUgKm5vZGUpXG4gXHRzdHJ1Y3QgYnVja2V0ICpiO1xuIFx0aW50IHJldDtcbiBcbi1cdHRndF9sID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKTtcbi1cdGIgPSBfX3NlbGVjdF9idWNrZXQoaHRhYiwgdGd0X2wtXHUwMDNlaGFzaCk7XG4mIzQzO1x0dGd0X2wgPSAoc3RydWN0IGh0YWJfZWxlbSAqKWNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpO1xuJiM0MztcdGIgPSBfX3NlbGVjdF9idWNrZXQoaHRhYiwgaHRhYl9lbGVtX2hhc2goaHRhYiwgdGd0X2wpKTtcbiBcdGhlYWQgPSBcdTAwMjZiLVx1MDAzZWhlYWQ7XG4gXG4gXHRyZXQgPSBodGFiX2xvY2tfYnVja2V0KGIsIFx1MDAyNmZsYWdzKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShsLCBuLCBoZWFkLCBoYXNoX25vZGUpXG4mIzQzO1x0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKVxuIFx0XHRpZiAobCA9PSB0Z3RfbCkge1xuLVx0XHRcdGhsaXN0X251bGxzX2RlbF9yY3UoXHUwMDI2bC1cdTAwM2VoYXNoX25vZGUpO1xuJiM0MztcdFx0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmwtXHUwMDNlbm9kZS5oYXNoX25vZGUpO1xuIFx0XHRcdGJwZl9tYXBfZGVjX2VsZW1fY291bnQoXHUwMDI2aHRhYi1cdTAwM2VtYXApO1xuIFx0XHRcdGJyZWFrO1xuIFx0XHR9XG5AQCAtOTEyLDE4ICYjNDM7MTAwOSwxOSBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxuIFx0aGVhZCA9IHNlbGVjdF9idWNrZXQoaHRhYiwgaGFzaCk7XG4gXG4gXHQvKiBsb29rdXAgdGhlIGtleSAqL1xuLVx0bCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLVx1MDAzZW5fYnVja2V0cyk7XG4mIzQzO1x0bCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLVx1MDAzZW5fYnVja2V0cyk7XG4gXG4gXHRpZiAoIWwpXG4gXHRcdGdvdG8gZmluZF9maXJzdF9lbGVtO1xuIFxuIFx0Lyoga2V5IHdhcyBmb3VuZCwgZ2V0IG5leHQga2V5IGluIHRoZSBzYW1lIGJ1Y2tldCAqL1xuLVx0bmV4dF9sID0gaGxpc3RfbnVsbHNfZW50cnlfc2FmZShyY3VfZGVyZWZlcmVuY2VfcmF3KGhsaXN0X251bGxzX25leHRfcmN1KFx1MDAyNmwtXHUwMDNlaGFzaF9ub2RlKSksXG4tXHRcdFx0XHQgIHN0cnVjdCBodGFiX2VsZW0sIGhhc2hfbm9kZSk7XG4mIzQzO1x0bmV4dF9sID0gaGxpc3RfbnVsbHNfZW50cnlfc2FmZShcbiYjNDM7XHRcdFx0cmN1X2RlcmVmZXJlbmNlX3JhdyhobGlzdF9udWxsc19uZXh0X3JjdShcdTAwMjZsLVx1MDAzZW5vZGUuaGFzaF9ub2RlKSksXG4mIzQzO1x0XHRcdHN0cnVjdCBodGFiX2VsZW0sIG5vZGUuaGFzaF9ub2RlKTtcbiBcbiBcdGlmIChuZXh0X2wpIHtcbiBcdFx0LyogaWYgbmV4dCBlbGVtIGluIHRoaXMgaGFzaCBsaXN0IGlzIG5vbi16ZXJvLCBqdXN0IHJldHVybiBpdCAqL1xuLVx0XHRtZW1jcHkobmV4dF9rZXksIG5leHRfbC1cdTAwM2VrZXksIGtleV9zaXplKTtcbiYjNDM7XHRcdG1lbWNweShuZXh0X2tleSwgaHRhYl9lbGVtX2tleShodGFiLCBuZXh0X2wpLCBrZXlfc2l6ZSk7XG4gXHRcdHJldHVybiAwO1xuIFx0fVxuIFxuQEAgLTkzOCwxMCAmIzQzOzEwMzYsMTAgQEAgc3RhdGljIGludCBodGFiX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcbiBcbiBcdFx0LyogcGljayBmaXJzdCBlbGVtZW50IGluIHRoZSBidWNrZXQgKi9cbiBcdFx0bmV4dF9sID0gaGxpc3RfbnVsbHNfZW50cnlfc2FmZShyY3VfZGVyZWZlcmVuY2VfcmF3KGhsaXN0X251bGxzX2ZpcnN0X3JjdShoZWFkKSksXG4tXHRcdFx0XHRcdCAgc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKTtcbiYjNDM7XHRcdFx0XHRcdCAgc3RydWN0IGh0YWJfZWxlbSwgbm9kZS5oYXNoX25vZGUpO1xuIFx0XHRpZiAobmV4dF9sKSB7XG4gXHRcdFx0LyogaWYgaXQmIzM5O3Mgbm90IGVtcHR5LCBqdXN0IHJldHVybiBpdCAqL1xuLVx0XHRcdG1lbWNweShuZXh0X2tleSwgbmV4dF9sLVx1MDAzZWtleSwga2V5X3NpemUpO1xuJiM0MztcdFx0XHRtZW1jcHkobmV4dF9rZXksIGh0YWJfZWxlbV9rZXkoaHRhYiwgbmV4dF9sKSwga2V5X3NpemUpO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHR9XG5AQCAtOTU1LDcgJiM0MzsxMDUzLDcgQEAgc3RhdGljIHZvaWQgaHRhYl9lbGVtX2ZyZWUoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuIFx0Y2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoaHRhYiwgbCk7XG4gXG4gXHRpZiAoaHRhYi1cdTAwM2VtYXAubWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX1BFUkNQVV9IQVNIKVxuLVx0XHRicGZfbWVtX2NhY2hlX2ZyZWUoXHUwMDI2aHRhYi1cdTAwM2VwY3B1X21hLCBsLVx1MDAzZXB0cl90b19wcHRyKTtcbiYjNDM7XHRcdGJwZl9tZW1fY2FjaGVfZnJlZShcdTAwMjZodGFiLVx1MDAzZXBjcHVfbWEsIGh0YWJfZWxlbV9nZXRfcHRyX3RvX3BwdHIobCkpO1xuIFx0YnBmX21lbV9jYWNoZV9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbWEsIGwpO1xuIH1cbiBcbkBAIC05NjUsNyAmIzQzOzEwNjMsNyBAQCBzdGF0aWMgdm9pZCBodGFiX3B1dF9mZF92YWx1ZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4gXHR2b2lkICpwdHI7XG4gXG4gXHRpZiAobWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfZmRfcHV0X3B0cikge1xuLVx0XHRwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKG1hcCwgbCk7XG4mIzQzO1x0XHRwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKGh0YWIsIGwpO1xuIFx0XHRtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9mZF9wdXRfcHRyKG1hcCwgcHRyLCB0cnVlKTtcbiBcdH1cbiB9XG5AQCAtMTAwNiw3ICYjNDM7MTEwNCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbiBcdGlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKSB7XG4gXHRcdGJwZl9tYXBfZGVjX2VsZW1fY291bnQoXHUwMDI2aHRhYi1cdTAwM2VtYXApO1xuIFx0XHRjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhodGFiLCBsKTtcbi1cdFx0cGNwdV9mcmVlbGlzdF9wdXNoKFx1MDAyNmh0YWItXHUwMDNlZnJlZWxpc3QsIFx1MDAyNmwtXHUwMDNlZm5vZGUpO1xuJiM0MztcdFx0cGNwdV9mcmVlbGlzdF9wdXNoKFx1MDAyNmh0YWItXHUwMDNlZnJlZWxpc3QsIFx1MDAyNmwtXHUwMDNlbm9kZS5mbm9kZSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRkZWNfZWxlbV9jb3VudChodGFiKTtcbiBcdFx0aHRhYl9lbGVtX2ZyZWUoaHRhYiwgbCk7XG5AQCAtMTA5Nyw3ICYjNDM7MTE5NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksXG4gXHRcdFx0bCA9IF9fcGNwdV9mcmVlbGlzdF9wb3AoXHUwMDI2aHRhYi1cdTAwM2VmcmVlbGlzdCk7XG4gXHRcdFx0aWYgKCFsKVxuIFx0XHRcdFx0cmV0dXJuIEVSUl9QVFIoLUUyQklHKTtcbi1cdFx0XHRsX25ldyA9IGNvbnRhaW5lcl9vZihsLCBzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZSk7XG4mIzQzO1x0XHRcdGxfbmV3ID0gY29udGFpbmVyX29mKGwsIHN0cnVjdCBodGFiX2VsZW0sIG5vZGUuZm5vZGUpO1xuIFx0XHRcdGJwZl9tYXBfaW5jX2VsZW1fY291bnQoXHUwMDI2aHRhYi1cdTAwM2VtYXApO1xuIFx0XHR9XG4gXHR9IGVsc2Uge1xuQEAgLTExMTcsMTAgJiM0MzsxMjE1LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksXG4gXHRcdH1cbiBcdH1cbiBcbi1cdG1lbWNweShsX25ldy1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpO1xuJiM0MztcdG1lbWNweShodGFiX2VsZW1fa2V5KGh0YWIsIGxfbmV3KSwga2V5LCBrZXlfc2l6ZSk7XG4gXHRpZiAocGVyY3B1KSB7XG4gXHRcdGlmIChwcmVhbGxvYykge1xuLVx0XHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsX25ldywga2V5X3NpemUpO1xuJiM0MztcdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9uZXcpO1xuIFx0XHR9IGVsc2Uge1xuIFx0XHRcdC8qIGFsbG9jX3BlcmNwdSB6ZXJvLWZpbGxzICovXG4gXHRcdFx0dm9pZCAqcHRyID0gYnBmX21lbV9jYWNoZV9hbGxvYyhcdTAwMjZodGFiLVx1MDAzZXBjcHVfbWEpO1xuQEAgLTExMzAsMjYgJiM0MzsxMjI4LDI2IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksXG4gXHRcdFx0XHRsX25ldyA9IEVSUl9QVFIoLUVOT01FTSk7XG4gXHRcdFx0XHRnb3RvIGRlY19jb3VudDtcbiBcdFx0XHR9XG4tXHRcdFx0bF9uZXctXHUwMDNlcHRyX3RvX3BwdHIgPSBwdHI7XG4mIzQzO1x0XHRcdGh0YWJfZWxlbV9zZXRfcHRyX3RvX3BwdHIobF9uZXcsIHB0cik7XG4gXHRcdFx0cHB0ciA9ICoodm9pZCBfX3BlcmNwdSAqKilwdHI7XG4gXHRcdH1cbiBcbiBcdFx0cGNwdV9pbml0X3ZhbHVlKGh0YWIsIHBwdHIsIHZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7XG4gXG4gXHRcdGlmICghcHJlYWxsb2MpXG4tXHRcdFx0aHRhYl9lbGVtX3NldF9wdHIobF9uZXcsIGtleV9zaXplLCBwcHRyKTtcbiYjNDM7XHRcdFx0aHRhYl9lbGVtX3NldF9wdHIoaHRhYiwgbF9uZXcsIHBwdHIpO1xuIFx0fSBlbHNlIGlmIChmZF9odGFiX21hcF9uZWVkc19hZGp1c3QoaHRhYikpIHtcbiBcdFx0c2l6ZSA9IHJvdW5kX3VwKHNpemUsIDgpO1xuLVx0XHRtZW1jcHkoaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBrZXlfc2l6ZSksIHZhbHVlLCBzaXplKTtcbiYjNDM7XHRcdG1lbWNweShodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLCB2YWx1ZSwgc2l6ZSk7XG4gXHR9IGVsc2UgaWYgKG1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfTE9DSykge1xuIFx0XHRjb3B5X21hcF92YWx1ZV9sb2NrZWQoXHUwMDI2aHRhYi1cdTAwM2VtYXAsXG4tXHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUobF9uZXcsIGtleV9zaXplKSxcbiYjNDM7XHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLFxuIFx0XHRcdFx0ICAgICAgdmFsdWUsIGZhbHNlKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGNvcHlfbWFwX3ZhbHVlKFx1MDAyNmh0YWItXHUwMDNlbWFwLCBodGFiX2VsZW1fdmFsdWUobF9uZXcsIGtleV9zaXplKSwgdmFsdWUpO1xuJiM0MztcdFx0Y29weV9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksIHZhbHVlKTtcbiBcdH1cbiBcbi1cdGxfbmV3LVx1MDAzZWhhc2ggPSBoYXNoO1xuJiM0MztcdGh0YWJfZWxlbV9zZXRfaGFzaChodGFiLCBsX25ldywgaGFzaCk7XG4gXHRyZXR1cm4gbF9uZXc7XG4gZGVjX2NvdW50OlxuIFx0ZGVjX2VsZW1fY291bnQoaHRhYik7XG5AQCAtMTE5OSw3ICYjNDM7MTI5Nyw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4gXHRcdGlmICh1bmxpa2VseSghYnRmX3JlY29yZF9oYXNfZmllbGQobWFwLVx1MDAzZXJlY29yZCwgQlBGX1NQSU5fTE9DSykpKVxuIFx0XHRcdHJldHVybiAtRUlOVkFMO1xuIFx0XHQvKiBmaW5kIGFuIGVsZW1lbnQgd2l0aG91dCB0YWtpbmcgdGhlIGJ1Y2tldCBsb2NrICovXG4tXHRcdGxfb2xkID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsXG4mIzQzO1x0XHRsX29sZCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLFxuIFx0XHRcdFx0XHQgICAgICBodGFiLVx1MDAzZW5fYnVja2V0cyk7XG4gXHRcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xuIFx0XHRpZiAocmV0KVxuQEAgLTEyMDcsNyAmIzQzOzEzMDUsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIFx0XHRpZiAobF9vbGQpIHtcbiBcdFx0XHQvKiBncmFiIHRoZSBlbGVtZW50IGxvY2sgYW5kIHVwZGF0ZSB2YWx1ZSBpbiBwbGFjZSAqL1xuIFx0XHRcdGNvcHlfbWFwX3ZhbHVlX2xvY2tlZChtYXAsXG4tXHRcdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShsX29sZCwga2V5X3NpemUpLFxuJiM0MztcdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfb2xkKSxcbiBcdFx0XHRcdFx0ICAgICAgdmFsdWUsIGZhbHNlKTtcbiBcdFx0XHRyZXR1cm4gMDtcbiBcdFx0fVxuQEAgLTEyMjEsNyAmIzQzOzEzMTksNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuJiM0MztcdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuIFxuIFx0cmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7XG4gXHRpZiAocmV0KVxuQEAgLTEyMzUsNyAmIzQzOzEzMzMsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIFx0XHQgKiBhbmQgdXBkYXRlIGVsZW1lbnQgaW4gcGxhY2VcbiBcdFx0ICovXG4gXHRcdGNvcHlfbWFwX3ZhbHVlX2xvY2tlZChtYXAsXG4tXHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUobF9vbGQsIGtleV9zaXplKSxcbiYjNDM7XHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9vbGQpLFxuIFx0XHRcdFx0ICAgICAgdmFsdWUsIGZhbHNlKTtcbiBcdFx0cmV0ID0gMDtcbiBcdFx0Z290byBlcnI7XG5AQCAtMTI1Miw5ICYjNDM7MTM1MCw5IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4gXHQvKiBhZGQgbmV3IGVsZW1lbnQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QsIHNvIHRoYXRcbiBcdCAqIGNvbmN1cnJlbnQgc2VhcmNoIHdpbGwgZmluZCBpdCBiZWZvcmUgb2xkIGVsZW1cbiBcdCAqL1xuLVx0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFx1MDAyNmxfbmV3LVx1MDAzZWhhc2hfbm9kZSwgaGVhZCk7XG4mIzQzO1x0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFx1MDAyNmxfbmV3LVx1MDAzZW5vZGUuaGFzaF9ub2RlLCBoZWFkKTtcbiBcdGlmIChsX29sZCkge1xuLVx0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmxfb2xkLVx1MDAzZWhhc2hfbm9kZSk7XG4mIzQzO1x0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmxfb2xkLVx1MDAzZW5vZGUuaGFzaF9ub2RlKTtcbiBcbiBcdFx0LyogbF9vbGQgaGFzIGFscmVhZHkgYmVlbiBzdGFzaGVkIGluIGh0YWItXHUwMDNlZXh0cmFfZWxlbXMsIGNhbmNlbFxuIFx0XHQgKiBpdHMgcmV1c2FibGUgc3BlY2lhbCBmaWVsZHMgYmVmb3JlIGl0IGlzIGF2YWlsYWJsZSBmb3IgcmV1c2UuXG5AQCAtMTI3NSw3ICYjNDM7MTM3Myw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfbHJ1X3B1c2hfZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmVsZW0pXG4ge1xuIFx0Y2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoaHRhYiwgZWxlbSk7XG4gXHRicGZfbWFwX2RlY19lbGVtX2NvdW50KFx1MDAyNmh0YWItXHUwMDNlbWFwKTtcbi1cdGJwZl9scnVfcHVzaF9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBcdTAwMjZlbGVtLVx1MDAzZWxydV9ub2RlKTtcbiYjNDM7XHRicGZfbHJ1X3B1c2hfZnJlZShcdTAwMjZodGFiLVx1MDAzZWxydSwgaHRhYl9lbGVtX2xydV9ub2RlKGVsZW0pKTtcbiB9XG4gXG4gc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG5AQCAtMTMxMCwxMyAmIzQzOzE0MDgsMTMgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWVcbiBcdGxfbmV3ID0gcHJlYWxsb2NfbHJ1X3BvcChodGFiLCBrZXksIGhhc2gpO1xuIFx0aWYgKCFsX25ldylcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRjb3B5X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBtYXAtXHUwMDNla2V5X3NpemUpLCB2YWx1ZSk7XG4mIzQzO1x0Y29weV9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksIHZhbHVlKTtcbiBcbiBcdHJldCA9IGh0YWJfbG9ja19idWNrZXQoYiwgXHUwMDI2ZmxhZ3MpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBlcnJfbG9ja19idWNrZXQ7XG4gXG4tXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiYjNDM7XHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiBcbiBcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xuIFx0aWYgKHJldClcbkBAIC0xMzI1LDEwICYjNDM7MTQyMywxMCBAQCBzdGF0aWMgbG9uZyBodGFiX2xydV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZVxuIFx0LyogYWRkIG5ldyBlbGVtZW50IHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0LCBzbyB0aGF0XG4gXHQgKiBjb25jdXJyZW50IHNlYXJjaCB3aWxsIGZpbmQgaXQgYmVmb3JlIG9sZCBlbGVtXG4gXHQgKi9cbi1cdGhsaXN0X251bGxzX2FkZF9oZWFkX3JjdShcdTAwMjZsX25ldy1cdTAwM2VoYXNoX25vZGUsIGhlYWQpO1xuJiM0MztcdGhsaXN0X251bGxzX2FkZF9oZWFkX3JjdShcdTAwMjZsX25ldy1cdTAwM2Vub2RlLmhhc2hfbm9kZSwgaGVhZCk7XG4gXHRpZiAobF9vbGQpIHtcbi1cdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXHUwMDI2bF9uZXctXHUwMDNlbHJ1X25vZGUpO1xuLVx0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmxfb2xkLVx1MDAzZWhhc2hfbm9kZSk7XG4mIzQzO1x0XHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobF9uZXcpKTtcbiYjNDM7XHRcdGhsaXN0X251bGxzX2RlbF9yY3UoXHUwMDI2bF9vbGQtXHUwMDNlbm9kZS5oYXNoX25vZGUpO1xuIFx0fVxuIFx0cmV0ID0gMDtcbiBcbkBAIC0xMzgzLDcgJiM0MzsxNDgxLDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW1faW5fcGxhY2Uoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuJiM0MztcdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuIFxuIFx0cmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7XG4gXHRpZiAocmV0KVxuQEAgLTEzOTIsMTAgJiM0MzsxNDkwLDEwIEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtX2luX3BsYWNlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcdGlmIChsX29sZCkge1xuIFx0XHQvKiBVcGRhdGUgdmFsdWUgaW4tcGxhY2UgKi9cbiBcdFx0aWYgKHBlcmNwdSkge1xuLVx0XHRcdHBjcHVfY29weV92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihsX29sZCwga2V5X3NpemUpLFxuJiM0MztcdFx0XHRwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9vbGQpLFxuIFx0XHRcdFx0XHR2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHZvaWQgKippbm5lcl9tYXBfcHB0ciA9IGh0YWJfZWxlbV92YWx1ZShsX29sZCwga2V5X3NpemUpO1xuJiM0MztcdFx0XHR2b2lkICoqaW5uZXJfbWFwX3BwdHIgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9vbGQpO1xuIFxuIFx0XHRcdG9sZF9tYXBfcHRyID0gKmlubmVyX21hcF9wcHRyO1xuIFx0XHRcdFdSSVRFX09OQ0UoKmlubmVyX21hcF9wcHRyLCAqKHZvaWQgKiopdmFsdWUpO1xuQEAgLTE0MDcsNyAmIzQzOzE1MDUsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbV9pbl9wbGFjZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gXHRcdFx0cmV0ID0gUFRSX0VSUihsX25ldyk7XG4gXHRcdFx0Z290byBlcnI7XG4gXHRcdH1cbi1cdFx0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFx1MDAyNmxfbmV3LVx1MDAzZWhhc2hfbm9kZSwgaGVhZCk7XG4mIzQzO1x0XHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXHUwMDI2bF9uZXctXHUwMDNlbm9kZS5oYXNoX25vZGUsIGhlYWQpO1xuIFx0fVxuIGVycjpcbiBcdGh0YWJfdW5sb2NrX2J1Y2tldChiLCBmbGFncyk7XG5AQCAtMTQ1NiwyMiAmIzQzOzE1NTQsMjIgQEAgc3RhdGljIGxvbmcgX19odGFiX2xydV9wZXJjcHVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gZXJyX2xvY2tfYnVja2V0O1xuIFxuLVx0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4mIzQzO1x0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4gXG4gXHRyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTtcbiBcdGlmIChyZXQpXG4gXHRcdGdvdG8gZXJyO1xuIFxuIFx0aWYgKGxfb2xkKSB7XG4tXHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKFx1MDAyNmxfb2xkLVx1MDAzZWxydV9ub2RlKTtcbiYjNDM7XHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsX29sZCkpO1xuIFxuIFx0XHQvKiBwZXItY3B1IGhhc2ggbWFwIGNhbiB1cGRhdGUgdmFsdWUgaW4tcGxhY2UgKi9cbi1cdFx0cGNwdV9jb3B5X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGxfb2xkLCBrZXlfc2l6ZSksXG4mIzQzO1x0XHRwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9vbGQpLFxuIFx0XHRcdFx0dmFsdWUsIG9uYWxsY3B1cywgbWFwX2ZsYWdzKTtcbiBcdH0gZWxzZSB7XG4tXHRcdHBjcHVfaW5pdF92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihsX25ldywga2V5X3NpemUpLFxuJiM0MztcdFx0cGNwdV9pbml0X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGxfbmV3KSxcbiBcdFx0XHRcdHZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7XG4tXHRcdGhsaXN0X251bGxzX2FkZF9oZWFkX3JjdShcdTAwMjZsX25ldy1cdTAwM2VoYXNoX25vZGUsIGhlYWQpO1xuJiM0MztcdFx0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFx1MDAyNmxfbmV3LVx1MDAzZW5vZGUuaGFzaF9ub2RlLCBoZWFkKTtcbiBcdFx0bF9uZXcgPSBOVUxMO1xuIFx0fVxuIFx0cmV0ID0gMDtcbkBAIC0xNDgwLDcgJiM0MzsxNTc4LDcgQEAgc3RhdGljIGxvbmcgX19odGFiX2xydV9wZXJjcHVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBlcnJfbG9ja19idWNrZXQ6XG4gXHRpZiAobF9uZXcpIHtcbiBcdFx0YnBmX21hcF9kZWNfZWxlbV9jb3VudChcdTAwMjZodGFiLVx1MDAzZW1hcCk7XG4tXHRcdGJwZl9scnVfcHVzaF9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBcdTAwMjZsX25ldy1cdTAwM2VscnVfbm9kZSk7XG4mIzQzO1x0XHRicGZfbHJ1X3B1c2hfZnJlZShcdTAwMjZodGFiLVx1MDAzZWxydSwgaHRhYl9lbGVtX2xydV9ub2RlKGxfbmV3KSk7XG4gXHR9XG4gXHRyZXR1cm4gcmV0O1xuIH1cbkBAIC0xNTIxLDkgJiM0MzsxNjE5LDkgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4mIzQzO1x0bCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiBcdGlmIChsKVxuLVx0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmwtXHUwMDNlaGFzaF9ub2RlKTtcbiYjNDM7XHRcdGhsaXN0X251bGxzX2RlbF9yY3UoXHUwMDI2bC1cdTAwM2Vub2RlLmhhc2hfbm9kZSk7XG4gXHRlbHNlXG4gXHRcdHJldCA9IC1FTk9FTlQ7XG4gXG5AQCAtMTU1NiwxMCAmIzQzOzE2NTQsMTAgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRsID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuJiM0MztcdGwgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4gXG4gXHRpZiAobClcbi1cdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZWhhc2hfbm9kZSk7XG4mIzQzO1x0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmwtXHUwMDNlbm9kZS5oYXNoX25vZGUpO1xuIFx0ZWxzZVxuIFx0XHRyZXQgPSAtRU5PRU5UO1xuIFxuQEAgLTE1ODEsOCAmIzQzOzE2NzksOCBAQCBzdGF0aWMgdm9pZCBkZWxldGVfYWxsX2VsZW1lbnRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47XG4gXHRcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4tXHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XG4tXHRcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZWhhc2hfbm9kZSk7XG4mIzQzO1x0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKSB7XG4mIzQzO1x0XHRcdGhsaXN0X251bGxzX2RlbF9yY3UoXHUwMDI2bC1cdTAwM2Vub2RlLmhhc2hfbm9kZSk7XG4gXHRcdFx0aHRhYl9lbGVtX2ZyZWUoaHRhYiwgbCk7XG4gXHRcdH1cbiBcdFx0Y29uZF9yZXNjaGVkKCk7XG5AQCAtMTU5OSwxMCAmIzQzOzE2OTcsMTAgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX21hbGxvY2VkX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0XHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjtcbiBcdFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcbiBcbi1cdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnkobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XG4mIzQzO1x0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeShsLCBuLCBoZWFkLCBub2RlLmhhc2hfbm9kZSkge1xuIFx0XHRcdC8qIFdlIG9ubHkgZnJlZSBpbnRlcm5hbCBzdHJ1Y3RzIG9uIHVyZWYgZHJvcHBpbmcgdG8gemVybyAqL1xuIFx0XHRcdGJwZl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKFx1MDAyNmh0YWItXHUwMDNlbWFwLFxuLVx0XHRcdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShsLCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xuJiM0MztcdFx0XHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCkpO1xuIFx0XHR9XG4gXHRcdGNvbmRfcmVzY2hlZF9yY3UoKTtcbiBcdH1cbkBAIC0xNjk3LDcgJiM0MzsxNzk1LDcgQEAgc3RhdGljIGludCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4mIzQzO1x0bCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiBcdGlmICghbCkge1xuIFx0XHRyZXQgPSAtRU5PRU5UO1xuIFx0XHRnb3RvIG91dF91bmxvY2s7XG5AQCAtMTcwOCwxNCAmIzQzOzE4MDYsMTQgQEAgc3RhdGljIGludCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFx0XHR2b2lkIF9fcGVyY3B1ICpwcHRyO1xuIFx0XHRpbnQgb2ZmID0gMCwgY3B1O1xuIFxuLVx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwga2V5X3NpemUpO1xuJiM0MztcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xuIFx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4gXHRcdFx0Y29weV9tYXBfdmFsdWVfbG9uZyhcdTAwMjZodGFiLVx1MDAzZW1hcCwgdmFsdWUgJiM0Mzsgb2ZmLCBwZXJfY3B1X3B0cihwcHRyLCBjcHUpKTtcbiBcdFx0XHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIHZhbHVlICYjNDM7IG9mZik7XG4gXHRcdFx0b2ZmICYjNDM7PSByb3VuZHVwX3ZhbHVlX3NpemU7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4tXHRcdHZvaWQgKnNyYyA9IGh0YWJfZWxlbV92YWx1ZShsLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuJiM0MztcdFx0dm9pZCAqc3JjID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpO1xuIFxuIFx0XHRpZiAoZmxhZ3MgXHUwMDI2IEJQRl9GX0xPQ0spXG4gXHRcdFx0Y29weV9tYXBfdmFsdWVfbG9ja2VkKG1hcCwgdmFsdWUsIHNyYywgdHJ1ZSk7XG5AQCAtMTcyNCw3ICYjNDM7MTgyMiw3IEBAIHN0YXRpYyBpbnQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcdFx0LyogWmVyb2luZyBzcGVjaWFsIGZpZWxkcyBpbiB0aGUgdGVtcCBidWZmZXIgKi9cbiBcdFx0Y2hlY2tfYW5kX2luaXRfbWFwX3ZhbHVlKG1hcCwgdmFsdWUpO1xuIFx0fVxuLVx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZWhhc2hfbm9kZSk7XG4mIzQzO1x0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZW5vZGUuaGFzaF9ub2RlKTtcbiBcbiBvdXRfdW5sb2NrOlxuIFx0aHRhYl91bmxvY2tfYnVja2V0KGIsIGJmbGFncyk7XG5AQCAtMTg2MCw3ICYjNDM7MTk1OCw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdH1cbiBcbiBcdGJ1Y2tldF9jbnQgPSAwO1xuLVx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSlcbiYjNDM7XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpXG4gXHRcdGJ1Y2tldF9jbnQmIzQzOyYjNDM7O1xuIFxuIFx0aWYgKGJ1Y2tldF9jbnQgXHUwMDI2XHUwMDI2ICFsb2NrZWQpIHtcbkBAIC0xODk3LDE0ICYjNDM7MTk5NSwxNCBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHRpZiAoIWxvY2tlZClcbiBcdFx0Z290byBuZXh0X2JhdGNoO1xuIFxuLVx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShsLCBuLCBoZWFkLCBoYXNoX25vZGUpIHtcbi1cdFx0bWVtY3B5KGRzdF9rZXksIGwtXHUwMDNla2V5LCBrZXlfc2l6ZSk7XG4mIzQzO1x0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShsLCBuLCBoZWFkLCBub2RlLmhhc2hfbm9kZSkge1xuJiM0MztcdFx0bWVtY3B5KGRzdF9rZXksIGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleV9zaXplKTtcbiBcbiBcdFx0aWYgKGlzX3BlcmNwdSkge1xuIFx0XHRcdGludCBvZmYgPSAwLCBjcHU7XG4gXHRcdFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcbiBcbi1cdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVx1MDAzZWtleV9zaXplKTtcbiYjNDM7XHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xuIFx0XHRcdGlmIChlbGVtX21hcF9mbGFncyBcdTAwMjYgQlBGX0ZfQ1BVKSB7XG4gXHRcdFx0XHRjcHUgPSBlbGVtX21hcF9mbGFncyBcdTAwM2VcdTAwM2UgMzI7XG4gXHRcdFx0XHRjb3B5X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgZHN0X3ZhbCwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7XG5AQCAtMTkxOCw3ICYjNDM7MjAxNiw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0dmFsdWUgPSBodGFiX2VsZW1fdmFsdWUobCwga2V5X3NpemUpO1xuJiM0MztcdFx0XHR2YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcbiBcdFx0XHRpZiAoaXNfZmRfaHRhYihodGFiKSkge1xuIFx0XHRcdFx0c3RydWN0IGJwZl9tYXAgKippbm5lcl9tYXAgPSB2YWx1ZTtcbiBcbkBAIC0xOTM2LDcgJiM0MzsyMDM0LDcgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHRcdGNoZWNrX2FuZF9pbml0X21hcF92YWx1ZShtYXAsIGRzdF92YWwpO1xuIFx0XHR9XG4gXHRcdGlmIChkb19kZWxldGUpIHtcbi1cdFx0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmwtXHUwMDNlaGFzaF9ub2RlKTtcbiYjNDM7XHRcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZW5vZGUuaGFzaF9ub2RlKTtcbiBcbiBcdFx0XHQvKiBicGZfbHJ1X3B1c2hfZnJlZSgpIHdpbGwgYWNxdWlyZSBscnVfbG9jaywgd2hpY2hcbiBcdFx0XHQgKiBtYXkgY2F1c2UgZGVhZGxvY2suIFNlZSBjb21tZW50cyBpbiBmdW5jdGlvblxuQEAgLTE5NDgsNyAmIzQzOzIwNDYsNyBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHRcdFx0ICogbG9jayBiZWluZyBoZWxkIGFuZCBpdCB2aW9sYXRlcyB0aGUgbG9jayBydWxlLCBzb1xuIFx0XHRcdCAqIGludm9rZSBmcmVlX2h0YWJfZWxlbSgpIGFmdGVyIHVubG9jayBhcyB3ZWxsLlxuIFx0XHRcdCAqL1xuLVx0XHRcdGwtXHUwMDNlYmF0Y2hfZmxpbmsgPSBub2RlX3RvX2ZyZWU7XG4mIzQzO1x0XHRcdGwtXHUwMDNlbm9kZS5iYXRjaF9mbGluayA9IG5vZGVfdG9fZnJlZTtcbiBcdFx0XHRub2RlX3RvX2ZyZWUgPSBsO1xuIFx0XHR9XG4gXHRcdGRzdF9rZXkgJiM0Mzs9IGtleV9zaXplO1xuQEAgLTE5NjAsNyAmIzQzOzIwNTgsNyBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXG4gXHR3aGlsZSAobm9kZV90b19mcmVlKSB7XG4gXHRcdGwgPSBub2RlX3RvX2ZyZWU7XG4tXHRcdG5vZGVfdG9fZnJlZSA9IG5vZGVfdG9fZnJlZS1cdTAwM2ViYXRjaF9mbGluaztcbiYjNDM7XHRcdG5vZGVfdG9fZnJlZSA9IG5vZGVfdG9fZnJlZS1cdTAwM2Vub2RlLmJhdGNoX2ZsaW5rO1xuIFx0XHRpZiAoaXNfbHJ1X21hcClcbiBcdFx0XHRodGFiX2xydV9wdXNoX2ZyZWUoaHRhYiwgbCk7XG4gXHRcdGVsc2VcbkBAIC0yMTA4LDggJiM0MzsyMjA2LDggQEAgYnBmX2hhc2hfbWFwX3NlcV9maW5kX25leHQoc3RydWN0IGJwZl9pdGVyX3NlcV9oYXNoX21hcF9pbmZvICppbmZvLFxuIFx0XHQvKiBubyB1cGRhdGUvZGVsZXRpb24gb24gdGhpcyBidWNrZXQsIHByZXZfZWxlbSBzaG91bGQgYmUgc3RpbGwgdmFsaWRcbiBcdFx0ICogYW5kIHdlIHdvbiYjMzk7dCBza2lwIGVsZW1lbnRzLlxuIFx0XHQgKi9cbi1cdFx0biA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoaGxpc3RfbnVsbHNfbmV4dF9yY3UoXHUwMDI2cHJldl9lbGVtLVx1MDAzZWhhc2hfbm9kZSkpO1xuLVx0XHRlbGVtID0gaGxpc3RfbnVsbHNfZW50cnlfc2FmZShuLCBzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoX25vZGUpO1xuJiM0MztcdFx0biA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoaGxpc3RfbnVsbHNfbmV4dF9yY3UoXHUwMDI2cHJldl9lbGVtLVx1MDAzZW5vZGUuaGFzaF9ub2RlKSk7XG4mIzQzO1x0XHRlbGVtID0gaGxpc3RfbnVsbHNfZW50cnlfc2FmZShuLCBzdHJ1Y3QgaHRhYl9lbGVtLCBub2RlLmhhc2hfbm9kZSk7XG4gXHRcdGlmIChlbGVtKVxuIFx0XHRcdHJldHVybiBlbGVtO1xuIFxuQEAgLTIxMjUsNyAmIzQzOzIyMjMsNyBAQCBicGZfaGFzaF9tYXBfc2VxX2ZpbmRfbmV4dChzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2hhc2hfbWFwX2luZm8gKmluZm8sXG4gXG4gXHRcdGNvdW50ID0gMDtcbiBcdFx0aGVhZCA9IFx1MDAyNmItXHUwMDNlaGVhZDtcbi1cdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGVsZW0sIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xuJiM0MztcdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGVsZW0sIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKSB7XG4gXHRcdFx0aWYgKGNvdW50IFx1MDAzZT0gc2tpcF9lbGVtcykge1xuIFx0XHRcdFx0aW5mby1cdTAwM2VidWNrZXRfaWQgPSBpO1xuIFx0XHRcdFx0aW5mby1cdTAwM2Vza2lwX2VsZW1zID0gY291bnQ7XG5AQCAtMjE4MywxMiAmIzQzOzIyODEsMTIgQEAgc3RhdGljIGludCBfX2JwZl9oYXNoX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGh0YWJfZWxlbSAqZWxlbSlcbiBcdFx0Y3R4Lm1ldGEgPSBcdTAwMjZtZXRhO1xuIFx0XHRjdHgubWFwID0gaW5mby1cdTAwM2VtYXA7XG4gXHRcdGlmIChlbGVtKSB7XG4tXHRcdFx0Y3R4LmtleSA9IGVsZW0tXHUwMDNla2V5O1xuJiM0MztcdFx0XHRjdHgua2V5ID0gaHRhYl9lbGVtX2tleShpbmZvLVx1MDAzZWh0YWIsIGVsZW0pO1xuIFx0XHRcdGlmICghaW5mby1cdTAwM2VwZXJjcHVfdmFsdWVfYnVmKSB7XG4tXHRcdFx0XHRjdHgudmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoZWxlbSwgbWFwLVx1MDAzZWtleV9zaXplKTtcbiYjNDM7XHRcdFx0XHRjdHgudmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoaW5mby1cdTAwM2VodGFiLCBlbGVtKTtcbiBcdFx0XHR9IGVsc2Uge1xuIFx0XHRcdFx0cm91bmR1cF92YWx1ZV9zaXplID0gcm91bmRfdXAobWFwLVx1MDAzZXZhbHVlX3NpemUsIDgpO1xuLVx0XHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGVsZW0sIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4mIzQzO1x0XHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGluZm8tXHUwMDNlaHRhYiwgZWxlbSk7XG4gXHRcdFx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4gXHRcdFx0XHRcdGNvcHlfbWFwX3ZhbHVlX2xvbmcobWFwLCBpbmZvLVx1MDAzZXBlcmNwdV92YWx1ZV9idWYgJiM0Mzsgb2ZmLFxuIFx0XHRcdFx0XHRcdFx0ICAgIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuQEAgLTIyOTIsMTQgJiM0MzsyMzkwLDE0IEBAIHN0YXRpYyBsb25nIGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgYnBmX2NhbGxiYWNrX3QgY2FsbGJhY2tfXG4gXHRcdGIgPSBcdTAwMjZodGFiLVx1MDAzZWJ1Y2tldHNbaV07XG4gXHRcdHJjdV9yZWFkX2xvY2soKTtcbiBcdFx0aGVhZCA9IFx1MDAyNmItXHUwMDNlaGVhZDtcbi1cdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShlbGVtLCBuLCBoZWFkLCBoYXNoX25vZGUpIHtcbi1cdFx0XHRrZXkgPSBlbGVtLVx1MDAzZWtleTtcbiYjNDM7XHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUoZWxlbSwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpIHtcbiYjNDM7XHRcdFx0a2V5ID0gaHRhYl9lbGVtX2tleShodGFiLCBlbGVtKTtcbiBcdFx0XHRpZiAoaXNfcGVyY3B1KSB7XG4gXHRcdFx0XHQvKiBjdXJyZW50IGNwdSB2YWx1ZSBmb3IgcGVyY3B1IG1hcCAqL1xuLVx0XHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGVsZW0sIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4mIzQzO1x0XHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGVsZW0pO1xuIFx0XHRcdFx0dmFsID0gdGhpc19jcHVfcHRyKHBwdHIpO1xuIFx0XHRcdH0gZWxzZSB7XG4tXHRcdFx0XHR2YWwgPSBodGFiX2VsZW1fdmFsdWUoZWxlbSwgbWFwLVx1MDAzZWtleV9zaXplKTtcbiYjNDM7XHRcdFx0XHR2YWwgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgZWxlbSk7XG4gXHRcdFx0fVxuIFx0XHRcdG51bV9lbGVtcyYjNDM7JiM0Mzs7XG4gXHRcdFx0cmV0ID0gY2FsbGJhY2tfZm4oKHU2NCkobG9uZyltYXAsICh1NjQpKGxvbmcpa2V5LFxuQEAgLTI0MDMsMTAgJiM0MzsyNTAxLDExIEBAIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xuIC8qIENhbGxlZCBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xuIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsID0gX19odGFiX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XG4gXG4gXHRpZiAobClcbi1cdFx0cmV0dXJuIHRoaXNfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXHUwMDNla2V5X3NpemUpKTtcbiYjNDM7XHRcdHJldHVybiB0aGlzX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCkpO1xuIFx0ZWxzZVxuIFx0XHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtMjQxNCw2ICYjNDM7MjUxMyw3IEBAIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIC8qIGlubGluZSBicGZfbWFwX2xvb2t1cF9lbGVtKCkgY2FsbCBmb3IgcGVyLUNQVSBoYXNobWFwICovXG4gc3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjtcbiBcbiBcdGlmICghYnBmX2ppdF9zdXBwb3J0c19wZXJjcHVfaW5zbigpKVxuQEAgLTI0MjQsNyAmIzQzOzI1MjQsNyBAQCBzdGF0aWMgaW50IGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zblxuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIEJQRl9SRUdfMCwgMCwgMyk7XG4gXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfSU1NKEJQRl9BREQsIEJQRl9SRUdfMCxcbi1cdFx0XHRcdG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGtleSkgJiM0Mzsgcm91bmR1cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbiYjNDM7XHRcdFx0XHRodGFiLVx1MDAzZWtleV9vZmZzZXQgJiM0Mzsgcm91bmR1cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9EVywgQlBGX1JFR18wLCBCUEZfUkVHXzAsIDApO1xuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xuIFxuQEAgLTI0MzMsNiAmIzQzOzI1MzMsNyBAQCBzdGF0aWMgaW50IGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zblxuIFxuIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdTMyIGNwdSlcbiB7XG4mIzQzO1x0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuIFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcbiBcbiBcdGlmIChjcHUgXHUwMDNlPSBucl9jcHVfaWRzKVxuQEAgLTI0NDAsMTggJiM0MzsyNTQxLDE5IEBAIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcbiBcdGwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcdGlmIChsKVxuLVx0XHRyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVx1MDAzZWtleV9zaXplKSwgY3B1KTtcbiYjNDM7XHRcdHJldHVybiBwZXJfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKSwgY3B1KTtcbiBcdGVsc2VcbiBcdFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiB7XG4mIzQzO1x0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuIFx0c3RydWN0IGh0YWJfZWxlbSAqbCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xuIFxuIFx0aWYgKGwpIHtcbi1cdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXHUwMDI2bC1cdTAwM2VscnVfbm9kZSk7XG4tXHRcdHJldHVybiB0aGlzX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVx1MDAzZWtleV9zaXplKSk7XG4mIzQzO1x0XHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobCkpO1xuJiM0MztcdFx0cmV0dXJuIHRoaXNfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKSk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gTlVMTDtcbkBAIC0yNDU5LDYgJiM0MzsyNTYxLDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIFxuIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHUzMiBjcHUpXG4ge1xuJiM0MztcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4gXHRpZiAoY3B1IFx1MDAzZT0gbnJfY3B1X2lkcylcbkBAIC0yNDY2LDggJiM0MzsyNTY5LDggQEAgc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtcbiBcbiBcdGwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcdGlmIChsKSB7XG4tXHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKFx1MDAyNmwtXHUwMDNlbHJ1X25vZGUpO1xuLVx0XHRyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVx1MDAzZWtleV9zaXplKSwgY3B1KTtcbiYjNDM7XHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsKSk7XG4mIzQzO1x0XHRyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCksIGNwdSk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gTlVMTDtcbkBAIC0yNDc1LDYgJiM0MzsyNTc4LDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtcbiBcbiBpbnQgYnBmX3BlcmNwdV9oYXNoX2NvcHkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncylcbiB7XG4mIzQzO1x0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuIFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcbiBcdHZvaWQgX19wZXJjcHUgKnBwdHI7XG4gXHRpbnQgcmV0ID0gLUVOT0VOVDtcbkBAIC0yNDk0LDcgJiM0MzsyNTk4LDcgQEAgaW50IGJwZl9wZXJjcHVfaGFzaF9jb3B5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxcbiBcdC8qIFdlIGRvIG5vdCBtYXJrIExSVSBtYXAgZWxlbWVudCBoZXJlIGluIG9yZGVyIHRvIG5vdCBtZXNzIHVwXG4gXHQgKiBldmljdGlvbiBoZXVyaXN0aWNzIHdoZW4gdXNlciBzcGFjZSBkb2VzIGEgbWFwIHdhbGsuXG4gXHQgKi9cbi1cdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuJiM0MztcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKTtcbiBcdGlmIChtYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX0NQVSkge1xuIFx0XHRjcHUgPSBtYXBfZmxhZ3MgXHUwMDNlXHUwMDNlIDMyO1xuIFx0XHRjb3B5X21hcF92YWx1ZShtYXAsIHZhbHVlLCBwZXJfY3B1X3B0cihwcHRyLCBjcHUpKTtcbkBAIC0yNTMyLDYgJiM0MzsyNjM2LDcgQEAgaW50IGJwZl9wZXJjcHVfaGFzaF91cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbiBzdGF0aWMgdm9pZCBodGFiX3BlcmNwdV9tYXBfc2VxX3Nob3dfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gXHRcdFx0XHRcdCAgc3RydWN0IHNlcV9maWxlICptKVxuIHtcbiYjNDM7XHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsO1xuIFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcbiBcdGludCBjcHU7XG5AQCAtMjU0Niw3ICYjNDM7MjY1MSw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfcGVyY3B1X21hcF9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcbiBcdGJ0Zl90eXBlX3NlcV9zaG93KG1hcC1cdTAwM2VidGYsIG1hcC1cdTAwM2VidGZfa2V5X3R5cGVfaWQsIGtleSwgbSk7XG4gXHRzZXFfcHV0cyhtLCBcJiMzNDs6IHtcXG5cJiMzNDspO1xuLVx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4mIzQzO1x0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xuIFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuIFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0O1xcdGNwdSVkOiBcJiMzNDssIGNwdSk7XG4gXHRcdGJ0Zl90eXBlX3NlcV9zaG93KG1hcC1cdTAwM2VidGYsIG1hcC1cdTAwM2VidGZfdmFsdWVfdHlwZV9pZCxcbkBAIC0yNjE5LDggJiM0MzsyNzI0LDggQEAgc3RhdGljIHZvaWQgZmRfaHRhYl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgaHRhYi1cdTAwM2VuX2J1Y2tldHM7IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGhlYWQgPSBzZWxlY3RfYnVja2V0KGh0YWIsIGkpO1xuIFxuLVx0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xuLVx0XHRcdHZvaWQgKnB0ciA9IGZkX2h0YWJfbWFwX2dldF9wdHIobWFwLCBsKTtcbiYjNDM7XHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpIHtcbiYjNDM7XHRcdFx0dm9pZCAqcHRyID0gZmRfaHRhYl9tYXBfZ2V0X3B0cihodGFiLCBsKTtcbiBcbiBcdFx0XHRtYXAtXHUwMDNlb3BzLVx1MDAzZW1hcF9mZF9wdXRfcHRyKG1hcCwgcHRyLCBmYWxzZSk7XG4gXHRcdH1cbkBAIC0yNzA1LDYgJiM0MzsyODEwLDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfb2ZfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBzdGF0aWMgaW50IGh0YWJfb2ZfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdCAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiB7XG4mIzQzO1x0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XG4gXHRjb25zdCBpbnQgcmV0ID0gQlBGX1JFR18wO1xuIFxuQEAgLTI3MTMsNyAmIzQzOzI4MTksNyBAQCBzdGF0aWMgaW50IGh0YWJfb2ZfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9FTUlUX0NBTEwoX19odGFiX21hcF9sb29rdXBfZWxlbSk7XG4gXHQqaW5zbiYjNDM7JiM0MzsgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCByZXQsIDAsIDIpO1xuIFx0Kmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCByZXQsXG4tXHRcdFx0XHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICYjNDM7XG4mIzQzO1x0XHRcdFx0aHRhYi1cdTAwM2VrZXlfb2Zmc2V0ICYjNDM7XG4gXHRcdFx0XHRyb3VuZF91cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbiBcdCppbnNuJiM0MzsmIzQzOyA9IEJQRl9MRFhfTUVNKEJQRl9EVywgcmV0LCByZXQsIDApO1xuIFxuQEAgLTMxMTIsNyAmIzQzOzMyMTgsNyBAQCBzdGF0aWMgaW50IHJodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuIHtcbiBcdHN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTtcbiBcbi1cdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZyaHRhYi1cdTAwM2VtYSwgcmh0YWJfbWVtX2R0b3IpO1xuJiM0MztcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZyaHRhYi1cdTAwM2VtYSwgcmh0YWJfbWVtX2R0b3IsIG9mZnNldG9mKHN0cnVjdCByaHRhYl9lbGVtLCBkYXRhKSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcClcbkBAIC0zNTMzLDMgJiM0MzszNjM5LDE2IEBAIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xuIFx0Lm1hcF9idGZfaWQgPSBcdTAwMjZyaHRhYl9tYXBfYnRmX2lkc1swXSxcbiBcdC5pdGVyX3NlcV9pbmZvID0gXHUwMDI2cmhhc2hfaXRlcl9zZXFfaW5mbyxcbiB9O1xuJiM0MztcbiYjNDM7c2l6ZV90IGJwZl9odGFiX21hcF9tZXRhX3NpemUodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiBzaXplb2Yoc3RydWN0IGJwZl9odGFiKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7dm9pZCBicGZfaHRhYl9tYXBfbWV0YV9pbml0KHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXBfbWV0YSwgc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBicGZfaHRhYiAqaW5uZXJfaHRhYl9tZXRhID0gY29udGFpbmVyX29mKGlubmVyX21hcF9tZXRhLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4mIzQzO1x0c3RydWN0IGJwZl9odGFiICppbm5lcl9odGFiID0gY29udGFpbmVyX29mKGlubmVyX21hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuJiM0MztcbiYjNDM7XHRpbm5lcl9odGFiX21ldGEtXHUwMDNla2V5X29mZnNldCA9IGlubmVyX2h0YWItXHUwMDNla2V5X29mZnNldDtcbiYjNDM7fVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWFwX2luX21hcC5jIGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmNcbmluZGV4IGQyY2JhYjRiZGY2NDQuLmIyZGI1ZDBjOThiZWUgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL21hcF9pbl9tYXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmNcbkBAIC03LDYgJiM0Mzs3LDE1IEBAXG4gXG4gI2luY2x1ZGUgXCYjMzQ7bWFwX2luX21hcC5oXCYjMzQ7XG4gXG4mIzQzO3N0YXRpYyBib29sIGJwZl9tYXBfdHlwZV9pc19odGFiKGVudW0gYnBmX21hcF90eXBlIHR5cGUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gdHlwZSA9PSBCUEZfTUFQX1RZUEVfSEFTSCB8fFxuJiM0MztcdCAgICAgICB0eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSCB8fFxuJiM0MztcdCAgICAgICB0eXBlID09IEJQRl9NQVBfVFlQRV9MUlVfSEFTSCB8fFxuJiM0MztcdCAgICAgICB0eXBlID09IEJQRl9NQVBfVFlQRV9MUlVfUEVSQ1BVX0hBU0ggfHxcbiYjNDM7XHQgICAgICAgdHlwZSA9PSBCUEZfTUFQX1RZUEVfSEFTSF9PRl9NQVBTO1xuJiM0Mzt9XG4mIzQzO1xuIHN0cnVjdCBicGZfbWFwICpicGZfbWFwX21ldGFfYWxsb2MoaW50IGlubmVyX21hcF91ZmQpXG4ge1xuIFx0c3RydWN0IGJwZl9tYXAgKmlubmVyX21hcCwgKmlubmVyX21hcF9tZXRhO1xuQEAgLTI5LDYgJiM0MzszOCw4IEBAIHN0cnVjdCBicGZfbWFwICpicGZfbWFwX21ldGFfYWxsb2MoaW50IGlubmVyX21hcF91ZmQpXG4gXHQvKiBJbiBzb21lIGNhc2VzIHZlcmlmaWVyIG5lZWRzIHRvIGFjY2VzcyBiZXlvbmQganVzdCBiYXNlIG1hcC4gKi9cbiBcdGlmIChpbm5lcl9tYXAtXHUwMDNlb3BzID09IFx1MDAyNmFycmF5X21hcF9vcHMgfHwgaW5uZXJfbWFwLVx1MDAzZW9wcyA9PSBcdTAwMjZwZXJjcHVfYXJyYXlfbWFwX29wcylcbiBcdFx0aW5uZXJfbWFwX21ldGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2FycmF5KTtcbiYjNDM7XHRlbHNlIGlmIChicGZfbWFwX3R5cGVfaXNfaHRhYihpbm5lcl9tYXAtXHUwMDNlbWFwX3R5cGUpKVxuJiM0MztcdFx0aW5uZXJfbWFwX21ldGFfc2l6ZSA9IGJwZl9odGFiX21hcF9tZXRhX3NpemUoKTtcbiBcbiBcdGlubmVyX21hcF9tZXRhID0ga3phbGxvYyhpbm5lcl9tYXBfbWV0YV9zaXplLCBHRlBfVVNFUik7XG4gXHRpZiAoIWlubmVyX21hcF9tZXRhKVxuQEAgLTcwLDYgJiM0Mzs4MSw4IEBAIHN0cnVjdCBicGZfbWFwICpicGZfbWFwX21ldGFfYWxsb2MoaW50IGlubmVyX21hcF91ZmQpXG4gXHRcdGlubmVyX2FycmF5X21ldGEtXHUwMDNlaW5kZXhfbWFzayA9IGlubmVyX2FycmF5LVx1MDAzZWluZGV4X21hc2s7XG4gXHRcdGlubmVyX2FycmF5X21ldGEtXHUwMDNlZWxlbV9zaXplID0gaW5uZXJfYXJyYXktXHUwMDNlZWxlbV9zaXplO1xuIFx0XHRpbm5lcl9tYXBfbWV0YS1cdTAwM2VieXBhc3Nfc3BlY192MSA9IGlubmVyX21hcC1cdTAwM2VieXBhc3Nfc3BlY192MTtcbiYjNDM7XHR9IGVsc2UgaWYgKGJwZl9tYXBfdHlwZV9pc19odGFiKGlubmVyX21hcC1cdTAwM2VtYXBfdHlwZSkpIHtcbiYjNDM7XHRcdGJwZl9odGFiX21hcF9tZXRhX2luaXQoaW5uZXJfbWFwX21ldGEsIGlubmVyX21hcCk7XG4gXHR9XG4gXHRyZXR1cm4gaW5uZXJfbWFwX21ldGE7XG4gfVxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWFwX2luX21hcC5oIGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmhcbmluZGV4IDdkNjE2MDIzNTRkZTguLjFlZGMyMDU3NzJkOGMgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvYnBmL21hcF9pbl9tYXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmhcbkBAIC0xNSw1ICYjNDM7MTUsNyBAQCB2b2lkICpicGZfbWFwX2ZkX2dldF9wdHIoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxuIFx0XHRcdCBpbnQgdWZkKTtcbiB2b2lkIGJwZl9tYXBfZmRfcHV0X3B0cihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpwdHIsIGJvb2wgbmVlZF9kZWZlcik7XG4gdTMyIGJwZl9tYXBfZmRfc3lzX2xvb2t1cF9lbGVtKHZvaWQgKnB0cik7XG4mIzQzO3NpemVfdCBicGZfaHRhYl9tYXBfbWV0YV9zaXplKHZvaWQpO1xuJiM0Mzt2b2lkIGJwZl9odGFiX21hcF9tZXRhX2luaXQoc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcF9tZXRhLCBzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwKTtcbiBcbiAjZW5kaWZcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmNcbmluZGV4IDM3M2M4ZDE3ZWE1NTcuLjZiZDRjYjY4YzIwYzEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uY1xuQEAgLTExNCw3ICYjNDM7MTE0LDcgQEAgc3RhdGljIGlubGluZSBpbnQgY2hlY2tfaGFzaCh2b2lkKVxuIFx0VkVSSUZZKGNoZWNrX2RlZmF1bHRfbm9pbmxpbmUoXHUwMDI2aGFzaC1cdTAwM2VtYXAsIG1hcCkpO1xuIFxuIFx0VkVSSUZZKGhhc2gtXHUwMDNlbl9idWNrZXRzID09IE1BWF9FTlRSSUVTKTtcbi1cdFZFUklGWShoYXNoLVx1MDAzZWVsZW1fc2l6ZSA9PSA2NCk7XG4mIzQzO1x0VkVSSUZZKGhhc2gtXHUwMDNlZWxlbV9zaXplID09IDMyKTtcbiBcbiBcdFZFUklGWShoYXNoLVx1MDAzZWNvdW50LmNvdW50ZXIgPT0gMCk7XG4gXHRWRVJJRlkoYnBmX21hcF9zdW1fZWxlbV9jb3VudChtYXApID09IDApO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEwOjQzPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h0YWJfbWFwX2FsbG9jJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X21hcF91cGRhdGVfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9tYXBfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfcGVyY3B1X21hcF9sb29rdXBfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2dldF9uZXh0X2tleSYjMzQ7LAogICAgJiMzNDtfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7LAogICAgJiMzNDticGZfbWFwX21ldGFfYWxsb2MmIzM0OywKICAgICYjMzQ7YnBmX2h0YWJfbWFwX21ldGFfaW5pdCYjMzQ7LAogICAgJiMzNDticGZfaHRhYl9tYXBfbWV0YV9zaXplJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyB0aGUgbWVtb3J5IGxheW91dCBvZiBCUEYgaGFzaCBtYXAgZWxlbWVudHMgYnkgY29uZGl0aW9uYWxseSByZW1vdmluZyB0aGUgaGFzaCB2YWx1ZSBmaWVsZCB3aGVuIGl0JiMzOTtzIG5vdCBuZWVkZWQuIEl0IGludHJvZHVjZXMgYGtleV9vZmZzZXRgIHRvIGR5bmFtaWNhbGx5IGNvbXB1dGUgdGhlIG9mZnNldCBvZiB0aGUga2V5IGFuZCB2YWx1ZSB3aXRoaW4gdGhlIGVsZW1lbnQuIEl0IGFsc28gbW9kaWZpZXMgYG1hcF9pbl9tYXAuY2AgdG8gcHJvcGFnYXRlIHRoaXMgb2Zmc2V0IGZvciBpbm5lciBtYXBzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIGhhc2ggbWFwIGltcGxlbWVudGF0aW9uIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAxYjdjYjY2N2ZmMjcwNGI2Yjk4NThmOWQ2YjMwMWE1NTRlZjJlYjAzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMSAxMDo0MzozMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmMKaW5kZXggOWYzOTRlMWFhMmU4NS4uODJiMTliZDU0MzEwOSAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9oYXNodGFiLmMKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9oYXNodGFiLmMKQEAgLTEwMCwxMyAmIzQzOzEwMCwxNiBAQCBzdHJ1Y3QgYnBmX2h0YWIgewogCXN0cnVjdCBwZXJjcHVfY291bnRlciBwY291bnQ7CiAJYXRvbWljX3QgY291bnQ7CiAJYm9vbCB1c2VfcGVyY3B1X2NvdW50ZXI7CiYjNDM7CWJvb2wgaGFzX2hhc2g7CiAJdTMyIG5fYnVja2V0czsJLyogbnVtYmVyIG9mIGhhc2ggYnVja2V0cyAqLwogCXUzMiBlbGVtX3NpemU7CS8qIHNpemUgb2YgZWFjaCBlbGVtZW50IGluIGJ5dGVzICovCiYjNDM7CXUzMiBrZXlfb2Zmc2V0OwkvKiBvZmZzZXQgb2Yga2V5IGluIGJ5dGVzICovCiAJdTMyIGhhc2hybmQ7CiB9OwogCiAvKiBlYWNoIGh0YWIgZWxlbWVudCBpcyBzdHJ1Y3QgaHRhYl9lbGVtICYjNDM7IGtleSAmIzQzOyB2YWx1ZSAqLwotc3RydWN0IGh0YWJfZWxlbSB7CiYjNDM7c3RydWN0IGh0YWJfZWxlbTsKJiM0MztzdHJ1Y3QgaHRhYl9ub2RlIHsKIAl1bmlvbiB7CiAJCXN0cnVjdCBobGlzdF9udWxsc19ub2RlIGhhc2hfbm9kZTsKIAkJc3RydWN0IHsKQEAgLTExNywxOCAmIzQzOzEyMCwzMiBAQCBzdHJ1Y3QgaHRhYl9lbGVtIHsKIAkJCX07CiAJCX07CiAJfTsKLQl1bmlvbiB7Ci0JCS8qIHBvaW50ZXIgdG8gcGVyLWNwdSBwb2ludGVyICovCi0JCXZvaWQgKnB0cl90b19wcHRyOwotCQlzdHJ1Y3QgYnBmX2xydV9ub2RlIGxydV9ub2RlOwotCX07Ci0JdTMyIGhhc2g7Ci0JY2hhciBrZXlbXSBfX2FsaWduZWQoOCk7CiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3QgaHRhYl9lbGVtIHsKJiM0MzsJc3RydWN0IGh0YWJfbm9kZSBub2RlOwomIzQzOwl1OCBkYXRhW10gX19hbGlnbmVkKDgpOwomIzQzO307CiYjNDM7CiYjNDM7c3RydWN0IGh0YWJfZWxlbV9scnUgewomIzQzOwlzdHJ1Y3QgaHRhYl9ub2RlIG5vZGU7CiYjNDM7CXN0cnVjdCBicGZfbHJ1X25vZGUgbHJ1X25vZGU7CiYjNDM7CXU4IGRhdGFbXSBfX2FsaWduZWQoOCk7CiYjNDM7fTsKJiM0MzsKJiM0MzsvKiBPbmx5IGZvciBub24tcHJlYWxsb2NhdGVkIFBDUFUgbWFwcy4gUHJlYWxsb2NhdGVkIFBDUFUgbWFwcyBkb24mIzM5O3QgbmVlZAomIzQzOyAqIHB0cl90b19wcHRyLCBhbmQgdXNlIGh0YWJfZWxlbS4KJiM0MzsgKi8KJiM0MztzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgewomIzQzOwlzdHJ1Y3QgaHRhYl9ub2RlIG5vZGU7CiYjNDM7CXZvaWQgKnB0cl90b19wcHRyOwomIzQzOwl1OCBkYXRhW10gX19hbGlnbmVkKDgpOwogfTsKIAogc3RydWN0IGh0YWJfYnRmX3JlY29yZCB7CiAJc3RydWN0IGJ0Zl9yZWNvcmQgKnJlY29yZDsKIAl1MzIga2V5X3NpemU7CiYjNDM7CXUzMiBrZXlfb2Zmc2V0OwogfTsKIAogc3RhdGljIGlubGluZSBib29sIGh0YWJfaXNfcHJlYWxsb2MoY29uc3Qgc3RydWN0IGJwZl9odGFiICpodGFiKQpAQCAtMTM2LDYgJiM0MzsxNTMsMjEgQEAgc3RhdGljIGlubGluZSBib29sIGh0YWJfaXNfcHJlYWxsb2MoY29uc3Qgc3RydWN0IGJwZl9odGFiICpodGFiKQogCXJldHVybiAhKGh0YWItJmd0O21hcC5tYXBfZmxhZ3MgJmFtcDsgQlBGX0ZfTk9fUFJFQUxMT0MpOwogfQogCiYjNDM7c3RhdGljIGlubGluZSBzdHJ1Y3QgYnBmX2xydV9ub2RlICpodGFiX2VsZW1fbHJ1X25vZGUoc3RydWN0IGh0YWJfZWxlbSAqbCkKJiM0Mzt7CiYjNDM7CXJldHVybiAmYW1wOygoc3RydWN0IGh0YWJfZWxlbV9scnUgKilsKS0mZ3Q7bHJ1X25vZGU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqaHRhYl9lbGVtX2dldF9wdHJfdG9fcHB0cihzdHJ1Y3QgaHRhYl9lbGVtICpsKQomIzQzO3sKJiM0MzsJcmV0dXJuICgoc3RydWN0IGh0YWJfZWxlbV9wY3B1ICopbCktJmd0O3B0cl90b19wcHRyOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9wdHJfdG9fcHB0cihzdHJ1Y3QgaHRhYl9lbGVtICpsLCB2b2lkICpwdHIpCiYjNDM7ewomIzQzOwkoKHN0cnVjdCBodGFiX2VsZW1fcGNwdSAqKWwpLSZndDtwdHJfdG9fcHB0ciA9IHB0cjsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCBodGFiX2luaXRfYnVja2V0cyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpCiB7CiAJdW5zaWduZWQgaW50IGk7CkBAIC0xODMsMjUgJiM0MzsyMTUsMzAgQEAgc3RhdGljIGlubGluZSBib29sIGlzX2ZkX2h0YWIoY29uc3Qgc3RydWN0IGJwZl9odGFiICpodGFiKQogCXJldHVybiBodGFiLSZndDttYXAubWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0hBU0hfT0ZfTUFQUzsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkICpodGFiX2VsZW1fdmFsdWUoc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGtleV9zaXplKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqaHRhYl9lbGVtX2tleShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpCiYjNDM7ewomIzQzOwlyZXR1cm4gKHZvaWQgKilsICYjNDM7IGh0YWItJmd0O2tleV9vZmZzZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCAqaHRhYl9lbGVtX3ZhbHVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCkKIHsKLQlyZXR1cm4gbC0mZ3Q7a2V5ICYjNDM7IHJvdW5kX3VwKGtleV9zaXplLCA4KTsKJiM0MzsJcmV0dXJuIGh0YWJfZWxlbV9rZXkoaHRhYiwgbCkgJiM0Mzsgcm91bmRfdXAoaHRhYi0mZ3Q7bWFwLmtleV9zaXplLCA4KTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfcHRyKHN0cnVjdCBodGFiX2VsZW0gKmwsIHUzMiBrZXlfc2l6ZSwKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9wdHIoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsLAogCQkJCSAgICAgdm9pZCBfX3BlcmNwdSAqcHB0cikKIHsKLQkqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGwsIGtleV9zaXplKSA9IHBwdHI7CiYjNDM7CSoodm9pZCBfX3BlcmNwdSAqKilodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCkgPSBwcHRyOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgX19wZXJjcHUgKmh0YWJfZWxlbV9nZXRfcHRyKHN0cnVjdCBodGFiX2VsZW0gKmwsIHUzMiBrZXlfc2l6ZSkKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgX19wZXJjcHUgKmh0YWJfZWxlbV9nZXRfcHRyKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCkKIHsKLQlyZXR1cm4gKih2b2lkIF9fcGVyY3B1ICoqKWh0YWJfZWxlbV92YWx1ZShsLCBrZXlfc2l6ZSk7CiYjNDM7CXJldHVybiAqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpOwogfQogCi1zdGF0aWMgdm9pZCAqZmRfaHRhYl9tYXBfZ2V0X3B0cihjb25zdCBzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKQomIzQzO3N0YXRpYyB2b2lkICpmZF9odGFiX21hcF9nZXRfcHRyKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCkKIHsKLQlyZXR1cm4gKih2b2lkICoqKWh0YWJfZWxlbV92YWx1ZShsLCBtYXAtJmd0O2tleV9zaXplKTsKJiM0MzsJcmV0dXJuICoodm9pZCAqKilodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7CiB9CiAKIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpnZXRfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgaW50IGkpCkBAIC0yMDksNiAmIzQzOzI0NiwzMyBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqZ2V0X2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIGludCBpKQogCXJldHVybiAoc3RydWN0IGh0YWJfZWxlbSAqKSAoaHRhYi0mZ3Q7ZWxlbXMgJiM0MzsgaSAqICh1NjQpaHRhYi0mZ3Q7ZWxlbV9zaXplKTsKIH0KIAomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBodGFiX2hhc19oYXNoKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYikKJiM0Mzt7CiYjNDM7CXJldHVybiBodGFiLSZndDtoYXNfaGFzaDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB1MzIgaHRhYl9lbGVtX2hhc2goc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKQomIzQzO3sKJiM0MzsJaWYgKGh0YWJfaXNfbHJ1KGh0YWIpKQomIzQzOwkJcmV0dXJuICoodTMyICopKChzdHJ1Y3QgaHRhYl9lbGVtX2xydSAqKWwpLSZndDtkYXRhOwomIzQzOwllbHNlIGlmIChodGFiX2lzX3BlcmNwdShodGFiKSAmYW1wOyZhbXA7ICFodGFiX2lzX3ByZWFsbG9jKGh0YWIpKQomIzQzOwkJcmV0dXJuICoodTMyICopKChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS0mZ3Q7ZGF0YTsKJiM0MzsJZWxzZQomIzQzOwkJcmV0dXJuICoodTMyICopbC0mZ3Q7ZGF0YTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfaGFzaChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwsIHUzMiBoYXNoKQomIzQzO3sKJiM0MzsJaWYgKCFodGFiX2hhc19oYXNoKGh0YWIpKQomIzQzOwkJcmV0dXJuOwomIzQzOwlpZiAoaHRhYl9pc19scnUoaHRhYikpCiYjNDM7CQkqKHUzMiAqKSgoc3RydWN0IGh0YWJfZWxlbV9scnUgKilsKS0mZ3Q7ZGF0YSA9IGhhc2g7CiYjNDM7CWVsc2UgaWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpICZhbXA7JmFtcDsgIWh0YWJfaXNfcHJlYWxsb2MoaHRhYikpCiYjNDM7CQkqKHUzMiAqKSgoc3RydWN0IGh0YWJfZWxlbV9wY3B1ICopbCktJmd0O2RhdGEgPSBoYXNoOwomIzQzOwllbHNlCiYjNDM7CQkqKHUzMiAqKWwtJmd0O2RhdGEgPSBoYXNoOwomIzQzO30KJiM0MzsKIC8qIEJvdGggcGVyY3B1IGFuZCBmZCBodGFiIHN1cHBvcnQgaW4tcGxhY2UgdXBkYXRlLCBzbyBubyBuZWVkIGZvcgogICogZXh0cmEgZWxlbS4gTFJVIGl0c2VsZiBjYW4gcmVtb3ZlIHRoZSBsZWFzdCB1c2VkIGVsZW1lbnQsIHNvCiAgKiB0aGVyZSBpcyBubyBuZWVkIGZvciBhbiBleHRyYSBlbGVtIGR1cmluZyBtYXBfdXBkYXRlLgpAQCAtMjMxLDcgJiM0MzsyOTUsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2ZyZWVfcHJlYWxsb2NlZF9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfaHRhYiAqaHRhYikKIAogCQllbGVtID0gZ2V0X2h0YWJfZWxlbShodGFiLCBpKTsKIAkJYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoJmFtcDtodGFiLSZndDttYXAsCi0JCQkJCSAgICAgIGh0YWJfZWxlbV92YWx1ZShlbGVtLCBodGFiLSZndDttYXAua2V5X3NpemUpKTsKJiM0MzsJCQkJCSAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBlbGVtKSk7CiAJCWNvbmRfcmVzY2hlZCgpOwogCX0KIH0KQEAgLTI1NCw3ICYjNDM7MzE4LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYikKIAogCQllbGVtID0gZ2V0X2h0YWJfZWxlbShodGFiLCBpKTsKIAkJaWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpKSB7Ci0JCQl2b2lkIF9fcGVyY3B1ICpwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZWxlbSwgaHRhYi0mZ3Q7bWFwLmtleV9zaXplKTsKJiM0MzsJCQl2b2lkIF9fcGVyY3B1ICpwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgZWxlbSk7CiAJCQlpbnQgY3B1OwogCiAJCQlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CkBAIC0yNjMsNyAmIzQzOzMyNyw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZnJlZV9wcmVhbGxvY2VkX2ZpZWxkcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpCiAJCQl9CiAJCX0gZWxzZSB7CiAJCQlicGZfb2JqX2ZyZWVfZmllbGRzKGh0YWItJmd0O21hcC5yZWNvcmQsCi0JCQkJCSAgICBodGFiX2VsZW1fdmFsdWUoZWxlbSwgaHRhYi0mZ3Q7bWFwLmtleV9zaXplKSk7CiYjNDM7CQkJCQkgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pKTsKIAkJCWNvbmRfcmVzY2hlZCgpOwogCQl9CiAJCWNvbmRfcmVzY2hlZCgpOwpAQCAtMjgwLDggJiM0MzszNDQsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2ZyZWVfZWxlbXMoc3RydWN0IGJwZl9odGFiICpodGFiKQogCWZvciAoaSA9IDA7IGkgJmx0OyBodGFiLSZndDttYXAubWF4X2VudHJpZXM7IGkmIzQzOyYjNDM7KSB7CiAJCXZvaWQgX19wZXJjcHUgKnBwdHI7CiAKLQkJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGdldF9odGFiX2VsZW0oaHRhYiwgaSksCi0JCQkJCSBodGFiLSZndDttYXAua2V5X3NpemUpOwomIzQzOwkJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGdldF9odGFiX2VsZW0oaHRhYiwgaSkpOwogCQlmcmVlX3BlcmNwdShwcHRyKTsKIAkJY29uZF9yZXNjaGVkKCk7CiAJfQpAQCAtMzA4LDggJiM0MzszNzEsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqcHJlYWxsb2NfbHJ1X3BvcChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSwKIAogCWlmIChub2RlKSB7CiAJCWJwZl9tYXBfaW5jX2VsZW1fY291bnQoJmFtcDtodGFiLSZndDttYXApOwotCQlsID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKTsKLQkJbWVtY3B5KGwtJmd0O2tleSwga2V5LCBodGFiLSZndDttYXAua2V5X3NpemUpOwomIzQzOwkJbCA9IChzdHJ1Y3QgaHRhYl9lbGVtICopY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSk7CiYjNDM7CQltZW1jcHkoaHRhYl9lbGVtX2tleShodGFiLCBsKSwga2V5LCBodGFiLSZndDttYXAua2V5X3NpemUpOwogCQlyZXR1cm4gbDsKIAl9CiAKQEAgLTM0MCw4ICYjNDM7NDAzLDcgQEAgc3RhdGljIGludCBwcmVhbGxvY19pbml0KHN0cnVjdCBicGZfaHRhYiAqaHRhYikKIAkJCQkJICAgIEdGUF9VU0VSIHwgX19HRlBfTk9XQVJOKTsKIAkJaWYgKCFwcHRyKQogCQkJZ290byBmcmVlX2VsZW1zOwotCQlodGFiX2VsZW1fc2V0X3B0cihnZXRfaHRhYl9lbGVtKGh0YWIsIGkpLCBodGFiLSZndDttYXAua2V5X3NpemUsCi0JCQkJICBwcHRyKTsKJiM0MzsJCWh0YWJfZWxlbV9zZXRfcHRyKGh0YWIsIGdldF9odGFiX2VsZW0oaHRhYiwgaSksIHBwdHIpOwogCQljb25kX3Jlc2NoZWQoKTsKIAl9CiAKQEAgLTM0OSw4ICYjNDM7NDExLDggQEAgc3RhdGljIGludCBwcmVhbGxvY19pbml0KHN0cnVjdCBicGZfaHRhYiAqaHRhYikKIAlpZiAoaHRhYl9pc19scnUoaHRhYikpCiAJCWVyciA9IGJwZl9scnVfaW5pdCgmYW1wO2h0YWItJmd0O2xydSwKIAkJCQkgICBodGFiLSZndDttYXAubWFwX2ZsYWdzICZhbXA7IEJQRl9GX05PX0NPTU1PTl9MUlUsCi0JCQkJICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgaGFzaCkgLQotCQkJCSAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSwKJiM0MzsJCQkJICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGRhdGEpIC0KJiM0MzsJCQkJICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSwKIAkJCQkgICBodGFiX2xydV9tYXBfZGVsZXRlX25vZGUsCiAJCQkJICAgaHRhYik7CiAJZWxzZQpAQCAtMzYxLDExICYjNDM7NDIzLDExIEBAIHN0YXRpYyBpbnQgcHJlYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpCiAKIAlpZiAoaHRhYl9pc19scnUoaHRhYikpCiAJCWJwZl9scnVfcG9wdWxhdGUoJmFtcDtodGFiLSZndDtscnUsIGh0YWItJmd0O2VsZW1zLAotCQkJCSBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBscnVfbm9kZSksCiYjNDM7CQkJCSBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpLAogCQkJCSBodGFiLSZndDtlbGVtX3NpemUsIG51bV9lbnRyaWVzKTsKIAllbHNlCiAJCXBjcHVfZnJlZWxpc3RfcG9wdWxhdGUoJmFtcDtodGFiLSZndDtmcmVlbGlzdCwKLQkJCQkgICAgICAgaHRhYi0mZ3Q7ZWxlbXMgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgZm5vZGUpLAomIzQzOwkJCQkgICAgICAgaHRhYi0mZ3Q7ZWxlbXMgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgbm9kZS5mbm9kZSksCiAJCQkJICAgICAgIGh0YWItJmd0O2VsZW1fc2l6ZSwgbnVtX2VudHJpZXMpOwogCiAJcmV0dXJuIDA7CkBAIC00MDEsNyAmIzQzOzQ2Myw3IEBAIHN0YXRpYyBpbnQgYWxsb2NfZXh0cmFfZWxlbXMoc3RydWN0IGJwZl9odGFiICpodGFiKQogCQkvKiBwb3Agd2lsbCBzdWNjZWVkLCBzaW5jZSBwcmVhbGxvY19pbml0KCkKIAkJICogcHJlYWxsb2NhdGVkIGV4dHJhIG51bV9wb3NzaWJsZV9jcHVzIGVsZW1lbnRzCiAJCSAqLwotCQlsX25ldyA9IGNvbnRhaW5lcl9vZihsLCBzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZSk7CiYjNDM7CQlsX25ldyA9IGNvbnRhaW5lcl9vZihsLCBzdHJ1Y3QgaHRhYl9lbGVtLCBub2RlLmZub2RlKTsKIAkJKnBlcl9jcHVfcHRyKHBwdHIsIGNwdSkgPSBsX25ldzsKIAl9CiAJaHRhYi0mZ3Q7ZXh0cmFfZWxlbXMgPSBwcHRyOwpAQCAtNDI1LDggJiM0Mzs0ODcsOCBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKQogCWJvb2wgemVyb19zZWVkID0gKGF0dHItJmd0O21hcF9mbGFncyAmYW1wOyBCUEZfRl9aRVJPX1NFRUQpOwogCWludCBudW1hX25vZGUgPSBicGZfbWFwX2F0dHJfbnVtYV9ub2RlKGF0dHIpOwogCi0JQlVJTERfQlVHX09OKG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGZub2RlLm5leHQpICE9Ci0JCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlLnBwcmV2KSk7CiYjNDM7CUJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9ub2RlLCBmbm9kZS5uZXh0KSAhPQomIzQzOwkJICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9ub2RlLCBoYXNoX25vZGUucHByZXYpKTsKIAogCWlmICh6ZXJvX3NlZWQgJmFtcDsmYW1wOyAhY2FwYWJsZShDQVBfU1lTX0FETUlOKSkKIAkJLyogR3VhcmQgYWdhaW5zdCBsb2NhbCBEb1MsIGFuZCBkaXNjb3VyYWdlIHByb2R1Y3Rpb24gdXNlLiAqLwpAQCAtNDc2LDcgJiM0Mzs1MzgsNyBAQCBzdGF0aWMgdm9pZCBodGFiX21lbV9kdG9yKHZvaWQgKm9iaiwgdm9pZCAqY3R4KQogCWlmIChJU19FUlJfT1JfTlVMTChocmVjLSZndDtyZWNvcmQpKQogCQlyZXR1cm47CiAKLQltYXBfdmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoZWxlbSwgaHJlYy0mZ3Q7a2V5X3NpemUpOwomIzQzOwltYXBfdmFsdWUgPSAodm9pZCAqKWVsZW0gJiM0MzsgaHJlYy0mZ3Q7a2V5X29mZnNldCAmIzQzOyByb3VuZF91cChocmVjLSZndDtrZXlfc2l6ZSwgOCk7CiAJYnBmX29ial9mcmVlX2ZpZWxkcyhocmVjLSZndDtyZWNvcmQsIG1hcF92YWx1ZSk7CiB9CiAKQEAgLTUwMiw3ICYjNDM7NTY0LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9kdG9yX2N0eF9mcmVlKHZvaWQgKmN0eCkKIH0KIAogc3RhdGljIGludCBicGZfbWFfc2V0X2R0b3Ioc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9tZW1fYWxsb2MgKm1hLAotCQkJICAgdm9pZCAoKmR0b3IpKHZvaWQgKiwgdm9pZCAqKSkKJiM0MzsJCQkgICB2b2lkICgqZHRvcikodm9pZCAqLCB2b2lkICopLCB1MzIga2V5X29mZnNldCkKIHsKIAlzdHJ1Y3QgaHRhYl9idGZfcmVjb3JkICpocmVjOwogCWludCBlcnI7CkBAIC01MTUsNiAmIzQzOzU3Nyw3IEBAIHN0YXRpYyBpbnQgYnBmX21hX3NldF9kdG9yKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSwKIAlpZiAoIWhyZWMpCiAJCXJldHVybiAtRU5PTUVNOwogCWhyZWMtJmd0O2tleV9zaXplID0gbWFwLSZndDtrZXlfc2l6ZTsKJiM0MzsJaHJlYy0mZ3Q7a2V5X29mZnNldCA9IGtleV9vZmZzZXQ7CiAJaHJlYy0mZ3Q7cmVjb3JkID0gYnRmX3JlY29yZF9kdXAobWFwLSZndDtyZWNvcmQpOwogCWlmIChJU19FUlIoaHJlYy0mZ3Q7cmVjb3JkKSkgewogCQllcnIgPSBQVFJfRVJSKGhyZWMtJmd0O3JlY29yZCk7CkBAIC01MzcsOSAmIzQzOzYwMCw5IEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZiwKIAkgKiBwb3B1bGF0ZWQgaW4gaHRhYl9tYXBfYWxsb2MoKSwgc28gaXQgd2lsbCBhbHdheXMgYXBwZWFyIGFzIE5VTEwuCiAJICovCiAJaWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpKQotCQlyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgJmFtcDtodGFiLSZndDtwY3B1X21hLCBodGFiX3BjcHVfbWVtX2R0b3IpOwomIzQzOwkJcmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsICZhbXA7aHRhYi0mZ3Q7cGNwdV9tYSwgaHRhYl9wY3B1X21lbV9kdG9yLCBodGFiLSZndDtrZXlfb2Zmc2V0KTsKIAllbHNlCi0JCXJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCAmYW1wO2h0YWItJmd0O21hLCBodGFiX21lbV9kdG9yKTsKJiM0MzsJCXJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCAmYW1wO2h0YWItJmd0O21hLCBodGFiX21lbV9kdG9yLCBodGFiLSZndDtrZXlfb2Zmc2V0KTsKIH0KIAogc3RhdGljIHN0cnVjdCBicGZfbWFwICpodGFiX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cikKQEAgLTU2Miw2ICYjNDM7NjI1LDEyIEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpCiAKIAlicGZfbWFwX2luaXRfZnJvbV9hdHRyKCZhbXA7aHRhYi0mZ3Q7bWFwLCBhdHRyKTsKIAomIzQzOwkvKiBBdm9pZCBoYXNoIG1lbW9yeSB1c2UgYW5kIGNvbXBhcmlzb25zIHdoZXJlIHVubmVjZXNzYXJ5LgomIzQzOwkgKiB1MzIgaGFzaCByZWFkcyBhcmUgYWx3YXlzIGF0b21pYy4gSWYgd2UgZWxpZGUgdGhlbSwga2V5IGNvbXBhcmlzb25zIG11c3QgYWxzbyBiZSBhdG9taWMKJiM0MzsJICogdG8gYXZvaWQgZmFsc2UgcG9zaXRpdmUga2V5IG1hdGNoZXMgZHVlIHRvIHRvcm4ga2V5IHJlYWRzIC8gd3JpdGVzLiBTbyBjaGVjayBrZXlfc2l6ZS4KJiM0MzsJICovCiYjNDM7CWh0YWItJmd0O2hhc19oYXNoID0gaHRhYl9pc19scnUoaHRhYikgfHwgaHRhYi0mZ3Q7bWFwLmtleV9zaXplICZndDsgc2l6ZW9mKHVuc2lnbmVkIGxvbmcpOwomIzQzOwogCWlmIChwZXJjcHVfbHJ1KSB7CiAJCS8qIGVuc3VyZSBlYWNoIENQVSYjMzk7cyBscnUgbGlzdCBoYXMgJmd0Oz0xIGVsZW1lbnRzLgogCQkgKiBzaW5jZSB3ZSBhcmUgYXQgaXQsIG1ha2UgZWFjaCBscnUgbGlzdCBoYXMgdGhlIHNhbWUKQEAgLTU4Myw4ICYjNDM7NjUyLDE2IEBAIHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpCiAKIAlodGFiLSZndDtuX2J1Y2tldHMgPSByb3VuZHVwX3Bvd19vZl90d28oaHRhYi0mZ3Q7bWFwLm1heF9lbnRyaWVzKTsKIAotCWh0YWItJmd0O2VsZW1fc2l6ZSA9IHNpemVvZihzdHJ1Y3QgaHRhYl9lbGVtKSAmIzQzOwotCQkJICByb3VuZF91cChodGFiLSZndDttYXAua2V5X3NpemUsIDgpOwomIzQzOwlpZiAoaHRhYl9pc19scnUoaHRhYikpCiYjNDM7CQlodGFiLSZndDtrZXlfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGRhdGEpICYjNDM7IDg7CiYjNDM7CWVsc2UgaWYgKHBlcmNwdSAmYW1wOyZhbXA7ICFwcmVhbGxvYykKJiM0MzsJCWh0YWItJmd0O2tleV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUsIGRhdGEpICYjNDM7CiYjNDM7CQkJCSAgIChodGFiX2hhc19oYXNoKGh0YWIpID8gOCA6IDApOwomIzQzOwllbHNlCiYjNDM7CQlodGFiLSZndDtrZXlfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgZGF0YSkgJiM0MzsKJiM0MzsJCQkJICAgKGh0YWJfaGFzX2hhc2goaHRhYikgPyA4IDogMCk7CiYjNDM7CiYjNDM7CWh0YWItJmd0O2VsZW1fc2l6ZSA9IGh0YWItJmd0O2tleV9vZmZzZXQgJiM0Mzsgcm91bmRfdXAoaHRhYi0mZ3Q7bWFwLmtleV9zaXplLCA4KTsKIAlpZiAocGVyY3B1KQogCQlodGFiLSZndDtlbGVtX3NpemUgJiM0Mzs9IHNpemVvZih2b2lkICopOwogCWVsc2UKQEAgLTY5MiwxNSAmIzQzOzc2OSwyMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpzZWxlY3RfYnVja2V0KHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgdTMyCiB9CiAKIC8qIHRoaXMgbG9va3VwIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIGNhbGxlZCB3aXRoIGJ1Y2tldCBsb2NrIHRha2VuICovCi1zdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLCB1MzIgaGFzaCwKJiM0MztzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBicGZfaHRhYiAqaHRhYiwKJiM0MzsJCQkJCSBzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCwgdTMyIGhhc2gsCiAJCQkJCSB2b2lkICprZXksIHUzMiBrZXlfc2l6ZSkKIHsKIAlzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjsKIAlzdHJ1Y3QgaHRhYl9lbGVtICpsOwogCi0JaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkKLQkJaWYgKGwtJmd0O2hhc2ggPT0gaGFzaCAmYW1wOyZhbXA7ICFtZW1jbXAoJmFtcDtsLSZndDtrZXksIGtleSwga2V5X3NpemUpKQotCQkJcmV0dXJuIGw7CiYjNDM7CWlmIChodGFiX2hhc19oYXNoKGh0YWIpKSB7CiYjNDM7CQlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpCiYjNDM7CQkJaWYgKGh0YWJfZWxlbV9oYXNoKGh0YWIsIGwpID09IGhhc2ggJmFtcDsmYW1wOwomIzQzOwkJCSAgICAhbWVtY21wKGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleSwga2V5X3NpemUpKQomIzQzOwkJCQlyZXR1cm4gbDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShsLCBuLCBoZWFkLCBub2RlLmhhc2hfbm9kZSkKJiM0MzsJCQlpZiAoIW1lbWNtcChodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGtleV9zaXplKSkKJiM0MzsJCQkJcmV0dXJuIGw7CiYjNDM7CX0KIAogCXJldHVybiBOVUxMOwogfQpAQCAtNzA5LDcgJiM0Mzs3OTQsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLCB1MzIgaGFzaAogICogdGhlIHVubGlrZWx5IGV2ZW50IHdoZW4gZWxlbWVudHMgbW92ZWQgZnJvbSBvbmUgYnVja2V0IGludG8gYW5vdGhlcgogICogd2hpbGUgbGluayBsaXN0IGlzIGJlaW5nIHdhbGtlZAogICovCi1zdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX251bGxzX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLAomIzQzO3N0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGJwZl9odGFiICpodGFiLAomIzQzOwkJCQkJICAgICAgIHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLAogCQkJCQkgICAgICAgdTMyIGhhc2gsIHZvaWQgKmtleSwKIAkJCQkJICAgICAgIHUzMiBrZXlfc2l6ZSwgdTMyIG5fYnVja2V0cykKIHsKQEAgLTcxNyw5ICYjNDM7ODAzLDE2IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsCiAJc3RydWN0IGh0YWJfZWxlbSAqbDsKIAogYWdhaW46Ci0JaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkKLQkJaWYgKGwtJmd0O2hhc2ggPT0gaGFzaCAmYW1wOyZhbXA7ICFtZW1jbXAoJmFtcDtsLSZndDtrZXksIGtleSwga2V5X3NpemUpKQotCQkJcmV0dXJuIGw7CiYjNDM7CWlmIChodGFiX2hhc19oYXNoKGh0YWIpKSB7CiYjNDM7CQlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpCiYjNDM7CQkJaWYgKGh0YWJfZWxlbV9oYXNoKGh0YWIsIGwpID09IGhhc2ggJmFtcDsmYW1wOwomIzQzOwkJCSAgICAhbWVtY21wKGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleSwga2V5X3NpemUpKQomIzQzOwkJCQlyZXR1cm4gbDsKJiM0MzsJfSBlbHNlIHsKJiM0MzsJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShsLCBuLCBoZWFkLCBub2RlLmhhc2hfbm9kZSkKJiM0MzsJCQlpZiAoIW1lbWNtcChodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGtleV9zaXplKSkKJiM0MzsJCQkJcmV0dXJuIGw7CiYjNDM7CX0KIAogCWlmICh1bmxpa2VseShnZXRfbnVsbHNfdmFsdWUobikgIT0gKGhhc2ggJmFtcDsgKG5fYnVja2V0cyAtIDEpKSkpCiAJCWdvdG8gYWdhaW47CkBAIC03NDcsMTcgJiM0Mzs4NDAsMTggQEAgc3RhdGljIHZvaWQgKl9faHRhYl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQogCiAJaGVhZCA9IHNlbGVjdF9idWNrZXQoaHRhYiwgaGFzaCk7CiAKLQlsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItJmd0O25fYnVja2V0cyk7CiYjNDM7CWwgPSBsb29rdXBfbnVsbHNfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSwgaHRhYi0mZ3Q7bl9idWNrZXRzKTsKIAogCXJldHVybiBsOwogfQogCiBzdGF0aWMgdm9pZCAqaHRhYl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQogewomIzQzOwlzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7CiAJc3RydWN0IGh0YWJfZWxlbSAqbCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpOwogCiAJaWYgKGwpCi0JCXJldHVybiBodGFiX2VsZW1fdmFsdWUobCwgbWFwLSZndDtrZXlfc2l6ZSk7CiYjNDM7CQlyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpOwogCiAJcmV0dXJuIE5VTEw7CiB9CkBAIC03NzUsNiAmIzQzOzg2OSw3IEBAIHN0YXRpYyB2b2lkICpodGFiX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpCiAgKi8KIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKQogewomIzQzOwlzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7CiAJc3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7CiAJY29uc3QgaW50IHJldCA9IEJQRl9SRUdfMDsKIApAQCAtNzgzLDcgJiM0Mzs4NzgsNyBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZikKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pOwogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHJldCwgMCwgMSk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCByZXQsCi0JCQkJb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwga2V5KSAmIzQzOwomIzQzOwkJCQlodGFiLSZndDtrZXlfb2Zmc2V0ICYjNDM7CiAJCQkJcm91bmRfdXAobWFwLSZndDtrZXlfc2l6ZSwgOCkpOwogCXJldHVybiBpbnNuIC0gaW5zbl9idWY7CiB9CkBAIC03OTEsMTIgJiM0Mzs4ODYsMTMgQEAgc3RhdGljIGludCBodGFiX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpCiBzdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgKl9faHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsCiAJCQkJCQkJdm9pZCAqa2V5LCBjb25zdCBib29sIG1hcmspCiB7CiYjNDM7CXN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKIAlzdHJ1Y3QgaHRhYl9lbGVtICpsID0gX19odGFiX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7CiAKIAlpZiAobCkgewogCQlpZiAobWFyaykKLQkJCWJwZl9scnVfbm9kZV9zZXRfcmVmKCZhbXA7bC0mZ3Q7bHJ1X25vZGUpOwotCQlyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGwsIG1hcC0mZ3Q7a2V5X3NpemUpOwomIzQzOwkJCWJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsKSk7CiYjNDM7CQlyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpOwogCX0KIAogCXJldHVybiBOVUxMOwpAQCAtODE1LDYgJiM0Mzs5MTEsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpCiBzdGF0aWMgaW50IGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsCiAJCQkJICAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZikKIHsKJiM0MzsJc3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApOwogCXN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmOwogCWNvbnN0IGludCByZXQgPSBCUEZfUkVHXzA7CiAJY29uc3QgaW50IHJlZl9yZWcgPSBCUEZfUkVHXzE7CkBAIC04MjQsMTUgJiM0Mzs5MjEsMTUgQEAgc3RhdGljIGludCBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9FTUlUX0NBTEwoX19odGFiX21hcF9sb29rdXBfZWxlbSk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgcmV0LCAwLCA0KTsKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfQiwgcmVmX3JlZywgcmV0LAotCQkJICAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpICYjNDM7CiYjNDM7CQkJICAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSAmIzQzOwogCQkJICAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9scnVfbm9kZSwgcmVmKSk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pORSwgcmVmX3JlZywgMCwgMSk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX1NUX01FTShCUEZfQiwgcmV0LAotCQkJICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBscnVfbm9kZSkgJiM0MzsKJiM0MzsJCQkgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSkgJiM0MzsKIAkJCSAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9scnVfbm9kZSwgcmVmKSwKIAkJCSAgICAgMSk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCByZXQsCi0JCQkJb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwga2V5KSAmIzQzOwomIzQzOwkJCQlodGFiLSZndDtrZXlfb2Zmc2V0ICYjNDM7CiAJCQkJcm91bmRfdXAobWFwLSZndDtrZXlfc2l6ZSwgOCkpOwogCXJldHVybiBpbnNuIC0gaW5zbl9idWY7CiB9CkBAIC04NDQsMTMgJiM0Mzs5NDEsMTMgQEAgc3RhdGljIHZvaWQgY2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoc3RydWN0IGJwZl9odGFiICpodGFiLAogCQlyZXR1cm47CiAKIAlpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikpIHsKLQkJdm9pZCBfX3BlcmNwdSAqcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGVsZW0sIGh0YWItJmd0O21hcC5rZXlfc2l6ZSk7CiYjNDM7CQl2b2lkIF9fcGVyY3B1ICpwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgZWxlbSk7CiAJCWludCBjcHU7CiAKIAkJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkKIAkJCWJwZl9vYmpfY2FuY2VsX2ZpZWxkcygmYW1wO2h0YWItJmd0O21hcCwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7CiAJfSBlbHNlIHsKLQkJdm9pZCAqbWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGh0YWItJmd0O21hcC5rZXlfc2l6ZSk7CiYjNDM7CQl2b2lkICptYXBfdmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgZWxlbSk7CiAKIAkJYnBmX29ial9jYW5jZWxfZmllbGRzKCZhbXA7aHRhYi0mZ3Q7bWFwLCBtYXBfdmFsdWUpOwogCX0KQEAgLTg2OSwxNyAmIzQzOzk2NiwxNyBAQCBzdGF0aWMgYm9vbCBodGFiX2xydV9tYXBfZGVsZXRlX25vZGUodm9pZCAqYXJnLCBzdHJ1Y3QgYnBmX2xydV9ub2RlICpub2RlKQogCXN0cnVjdCBidWNrZXQgKmI7CiAJaW50IHJldDsKIAotCXRndF9sID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKTsKLQliID0gX19zZWxlY3RfYnVja2V0KGh0YWIsIHRndF9sLSZndDtoYXNoKTsKJiM0MzsJdGd0X2wgPSAoc3RydWN0IGh0YWJfZWxlbSAqKWNvbnRhaW5lcl9vZihub2RlLCBzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpOwomIzQzOwliID0gX19zZWxlY3RfYnVja2V0KGh0YWIsIGh0YWJfZWxlbV9oYXNoKGh0YWIsIHRndF9sKSk7CiAJaGVhZCA9ICZhbXA7Yi0mZ3Q7aGVhZDsKIAogCXJldCA9IGh0YWJfbG9ja19idWNrZXQoYiwgJmFtcDtmbGFncyk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIGZhbHNlOwogCi0JaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkKJiM0MzsJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKQogCQlpZiAobCA9PSB0Z3RfbCkgewotCQkJaGxpc3RfbnVsbHNfZGVsX3JjdSgmYW1wO2wtJmd0O2hhc2hfbm9kZSk7CiYjNDM7CQkJaGxpc3RfbnVsbHNfZGVsX3JjdSgmYW1wO2wtJmd0O25vZGUuaGFzaF9ub2RlKTsKIAkJCWJwZl9tYXBfZGVjX2VsZW1fY291bnQoJmFtcDtodGFiLSZndDttYXApOwogCQkJYnJlYWs7CiAJCX0KQEAgLTkxMiwxOCAmIzQzOzEwMDksMTkgQEAgc3RhdGljIGludCBodGFiX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSkKIAloZWFkID0gc2VsZWN0X2J1Y2tldChodGFiLCBoYXNoKTsKIAogCS8qIGxvb2t1cCB0aGUga2V5ICovCi0JbCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLSZndDtuX2J1Y2tldHMpOwomIzQzOwlsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItJmd0O25fYnVja2V0cyk7CiAKIAlpZiAoIWwpCiAJCWdvdG8gZmluZF9maXJzdF9lbGVtOwogCiAJLyoga2V5IHdhcyBmb3VuZCwgZ2V0IG5leHQga2V5IGluIHRoZSBzYW1lIGJ1Y2tldCAqLwotCW5leHRfbCA9IGhsaXN0X251bGxzX2VudHJ5X3NhZmUocmN1X2RlcmVmZXJlbmNlX3JhdyhobGlzdF9udWxsc19uZXh0X3JjdSgmYW1wO2wtJmd0O2hhc2hfbm9kZSkpLAotCQkJCSAgc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKTsKJiM0MzsJbmV4dF9sID0gaGxpc3RfbnVsbHNfZW50cnlfc2FmZSgKJiM0MzsJCQlyY3VfZGVyZWZlcmVuY2VfcmF3KGhsaXN0X251bGxzX25leHRfcmN1KCZhbXA7bC0mZ3Q7bm9kZS5oYXNoX25vZGUpKSwKJiM0MzsJCQlzdHJ1Y3QgaHRhYl9lbGVtLCBub2RlLmhhc2hfbm9kZSk7CiAKIAlpZiAobmV4dF9sKSB7CiAJCS8qIGlmIG5leHQgZWxlbSBpbiB0aGlzIGhhc2ggbGlzdCBpcyBub24temVybywganVzdCByZXR1cm4gaXQgKi8KLQkJbWVtY3B5KG5leHRfa2V5LCBuZXh0X2wtJmd0O2tleSwga2V5X3NpemUpOwomIzQzOwkJbWVtY3B5KG5leHRfa2V5LCBodGFiX2VsZW1fa2V5KGh0YWIsIG5leHRfbCksIGtleV9zaXplKTsKIAkJcmV0dXJuIDA7CiAJfQogCkBAIC05MzgsMTAgJiM0MzsxMDM2LDEwIEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2V0X25leHRfa2V5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqbmV4dF9rZXkpCiAKIAkJLyogcGljayBmaXJzdCBlbGVtZW50IGluIHRoZSBidWNrZXQgKi8KIAkJbmV4dF9sID0gaGxpc3RfbnVsbHNfZW50cnlfc2FmZShyY3VfZGVyZWZlcmVuY2VfcmF3KGhsaXN0X251bGxzX2ZpcnN0X3JjdShoZWFkKSksCi0JCQkJCSAgc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKTsKJiM0MzsJCQkJCSAgc3RydWN0IGh0YWJfZWxlbSwgbm9kZS5oYXNoX25vZGUpOwogCQlpZiAobmV4dF9sKSB7CiAJCQkvKiBpZiBpdCYjMzk7cyBub3QgZW1wdHksIGp1c3QgcmV0dXJuIGl0ICovCi0JCQltZW1jcHkobmV4dF9rZXksIG5leHRfbC0mZ3Q7a2V5LCBrZXlfc2l6ZSk7CiYjNDM7CQkJbWVtY3B5KG5leHRfa2V5LCBodGFiX2VsZW1fa2V5KGh0YWIsIG5leHRfbCksIGtleV9zaXplKTsKIAkJCXJldHVybiAwOwogCQl9CiAJfQpAQCAtOTU1LDcgJiM0MzsxMDUzLDcgQEAgc3RhdGljIHZvaWQgaHRhYl9lbGVtX2ZyZWUoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKQogCWNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGwpOwogCiAJaWYgKGh0YWItJmd0O21hcC5tYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0gpCi0JCWJwZl9tZW1fY2FjaGVfZnJlZSgmYW1wO2h0YWItJmd0O3BjcHVfbWEsIGwtJmd0O3B0cl90b19wcHRyKTsKJiM0MzsJCWJwZl9tZW1fY2FjaGVfZnJlZSgmYW1wO2h0YWItJmd0O3BjcHVfbWEsIGh0YWJfZWxlbV9nZXRfcHRyX3RvX3BwdHIobCkpOwogCWJwZl9tZW1fY2FjaGVfZnJlZSgmYW1wO2h0YWItJmd0O21hLCBsKTsKIH0KIApAQCAtOTY1LDcgJiM0MzsxMDYzLDcgQEAgc3RhdGljIHZvaWQgaHRhYl9wdXRfZmRfdmFsdWUoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKQogCXZvaWQgKnB0cjsKIAogCWlmIChtYXAtJmd0O29wcy0mZ3Q7bWFwX2ZkX3B1dF9wdHIpIHsKLQkJcHRyID0gZmRfaHRhYl9tYXBfZ2V0X3B0cihtYXAsIGwpOwomIzQzOwkJcHRyID0gZmRfaHRhYl9tYXBfZ2V0X3B0cihodGFiLCBsKTsKIAkJbWFwLSZndDtvcHMtJmd0O21hcF9mZF9wdXRfcHRyKG1hcCwgcHRyLCB0cnVlKTsKIAl9CiB9CkBAIC0xMDA2LDcgJiM0MzsxMTA0LDcgQEAgc3RhdGljIHZvaWQgZnJlZV9odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKQogCWlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKSB7CiAJCWJwZl9tYXBfZGVjX2VsZW1fY291bnQoJmFtcDtodGFiLSZndDttYXApOwogCQljaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhodGFiLCBsKTsKLQkJcGNwdV9mcmVlbGlzdF9wdXNoKCZhbXA7aHRhYi0mZ3Q7ZnJlZWxpc3QsICZhbXA7bC0mZ3Q7Zm5vZGUpOwomIzQzOwkJcGNwdV9mcmVlbGlzdF9wdXNoKCZhbXA7aHRhYi0mZ3Q7ZnJlZWxpc3QsICZhbXA7bC0mZ3Q7bm9kZS5mbm9kZSk7CiAJfSBlbHNlIHsKIAkJZGVjX2VsZW1fY291bnQoaHRhYik7CiAJCWh0YWJfZWxlbV9mcmVlKGh0YWIsIGwpOwpAQCAtMTA5Nyw3ICYjNDM7MTE5NSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksCiAJCQlsID0gX19wY3B1X2ZyZWVsaXN0X3BvcCgmYW1wO2h0YWItJmd0O2ZyZWVsaXN0KTsKIAkJCWlmICghbCkKIAkJCQlyZXR1cm4gRVJSX1BUUigtRTJCSUcpOwotCQkJbF9uZXcgPSBjb250YWluZXJfb2YobCwgc3RydWN0IGh0YWJfZWxlbSwgZm5vZGUpOwomIzQzOwkJCWxfbmV3ID0gY29udGFpbmVyX29mKGwsIHN0cnVjdCBodGFiX2VsZW0sIG5vZGUuZm5vZGUpOwogCQkJYnBmX21hcF9pbmNfZWxlbV9jb3VudCgmYW1wO2h0YWItJmd0O21hcCk7CiAJCX0KIAl9IGVsc2UgewpAQCAtMTExNywxMCAmIzQzOzEyMTUsMTAgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmFsbG9jX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSwKIAkJfQogCX0KIAotCW1lbWNweShsX25ldy0mZ3Q7a2V5LCBrZXksIGtleV9zaXplKTsKJiM0MzsJbWVtY3B5KGh0YWJfZWxlbV9rZXkoaHRhYiwgbF9uZXcpLCBrZXksIGtleV9zaXplKTsKIAlpZiAocGVyY3B1KSB7CiAJCWlmIChwcmVhbGxvYykgewotCQkJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGxfbmV3LCBrZXlfc2l6ZSk7CiYjNDM7CQkJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGxfbmV3KTsKIAkJfSBlbHNlIHsKIAkJCS8qIGFsbG9jX3BlcmNwdSB6ZXJvLWZpbGxzICovCiAJCQl2b2lkICpwdHIgPSBicGZfbWVtX2NhY2hlX2FsbG9jKCZhbXA7aHRhYi0mZ3Q7cGNwdV9tYSk7CkBAIC0xMTMwLDI2ICYjNDM7MTIyOCwyNiBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqYWxsb2NfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgdm9pZCAqa2V5LAogCQkJCWxfbmV3ID0gRVJSX1BUUigtRU5PTUVNKTsKIAkJCQlnb3RvIGRlY19jb3VudDsKIAkJCX0KLQkJCWxfbmV3LSZndDtwdHJfdG9fcHB0ciA9IHB0cjsKJiM0MzsJCQlodGFiX2VsZW1fc2V0X3B0cl90b19wcHRyKGxfbmV3LCBwdHIpOwogCQkJcHB0ciA9ICoodm9pZCBfX3BlcmNwdSAqKilwdHI7CiAJCX0KIAogCQlwY3B1X2luaXRfdmFsdWUoaHRhYiwgcHB0ciwgdmFsdWUsIG9uYWxsY3B1cywgbWFwX2ZsYWdzKTsKIAogCQlpZiAoIXByZWFsbG9jKQotCQkJaHRhYl9lbGVtX3NldF9wdHIobF9uZXcsIGtleV9zaXplLCBwcHRyKTsKJiM0MzsJCQlodGFiX2VsZW1fc2V0X3B0cihodGFiLCBsX25ldywgcHB0cik7CiAJfSBlbHNlIGlmIChmZF9odGFiX21hcF9uZWVkc19hZGp1c3QoaHRhYikpIHsKIAkJc2l6ZSA9IHJvdW5kX3VwKHNpemUsIDgpOwotCQltZW1jcHkoaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBrZXlfc2l6ZSksIHZhbHVlLCBzaXplKTsKJiM0MzsJCW1lbWNweShodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLCB2YWx1ZSwgc2l6ZSk7CiAJfSBlbHNlIGlmIChtYXBfZmxhZ3MgJmFtcDsgQlBGX0ZfTE9DSykgewogCQljb3B5X21hcF92YWx1ZV9sb2NrZWQoJmFtcDtodGFiLSZndDttYXAsCi0JCQkJICAgICAgaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBrZXlfc2l6ZSksCiYjNDM7CQkJCSAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksCiAJCQkJICAgICAgdmFsdWUsIGZhbHNlKTsKIAl9IGVsc2UgewotCQljb3B5X21hcF92YWx1ZSgmYW1wO2h0YWItJmd0O21hcCwgaHRhYl9lbGVtX3ZhbHVlKGxfbmV3LCBrZXlfc2l6ZSksIHZhbHVlKTsKJiM0MzsJCWNvcHlfbWFwX3ZhbHVlKCZhbXA7aHRhYi0mZ3Q7bWFwLCBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLCB2YWx1ZSk7CiAJfQogCi0JbF9uZXctJmd0O2hhc2ggPSBoYXNoOwomIzQzOwlodGFiX2VsZW1fc2V0X2hhc2goaHRhYiwgbF9uZXcsIGhhc2gpOwogCXJldHVybiBsX25ldzsKIGRlY19jb3VudDoKIAlkZWNfZWxlbV9jb3VudChodGFiKTsKQEAgLTExOTksNyAmIzQzOzEyOTcsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLAogCQlpZiAodW5saWtlbHkoIWJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKG1hcC0mZ3Q7cmVjb3JkLCBCUEZfU1BJTl9MT0NLKSkpCiAJCQlyZXR1cm4gLUVJTlZBTDsKIAkJLyogZmluZCBhbiBlbGVtZW50IHdpdGhvdXQgdGFraW5nIHRoZSBidWNrZXQgbG9jayAqLwotCQlsX29sZCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLAomIzQzOwkJbF9vbGQgPSBsb29rdXBfbnVsbHNfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSwKIAkJCQkJICAgICAgaHRhYi0mZ3Q7bl9idWNrZXRzKTsKIAkJcmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7CiAJCWlmIChyZXQpCkBAIC0xMjA3LDcgJiM0MzsxMzA1LDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwKIAkJaWYgKGxfb2xkKSB7CiAJCQkvKiBncmFiIHRoZSBlbGVtZW50IGxvY2sgYW5kIHVwZGF0ZSB2YWx1ZSBpbiBwbGFjZSAqLwogCQkJY29weV9tYXBfdmFsdWVfbG9ja2VkKG1hcCwKLQkJCQkJICAgICAgaHRhYl9lbGVtX3ZhbHVlKGxfb2xkLCBrZXlfc2l6ZSksCiYjNDM7CQkJCQkgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9vbGQpLAogCQkJCQkgICAgICB2YWx1ZSwgZmFsc2UpOwogCQkJcmV0dXJuIDA7CiAJCX0KQEAgLTEyMjEsNyAmIzQzOzEzMTksNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLAogCWlmIChyZXQpCiAJCXJldHVybiByZXQ7CiAKLQlsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKJiM0MzsJbF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7CiAKIAlyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTsKIAlpZiAocmV0KQpAQCAtMTIzNSw3ICYjNDM7MTMzMyw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsCiAJCSAqIGFuZCB1cGRhdGUgZWxlbWVudCBpbiBwbGFjZQogCQkgKi8KIAkJY29weV9tYXBfdmFsdWVfbG9ja2VkKG1hcCwKLQkJCQkgICAgICBodGFiX2VsZW1fdmFsdWUobF9vbGQsIGtleV9zaXplKSwKJiM0MzsJCQkJICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfb2xkKSwKIAkJCQkgICAgICB2YWx1ZSwgZmFsc2UpOwogCQlyZXQgPSAwOwogCQlnb3RvIGVycjsKQEAgLTEyNTIsOSAmIzQzOzEzNTAsOSBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLAogCS8qIGFkZCBuZXcgZWxlbWVudCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdAogCSAqIGNvbmN1cnJlbnQgc2VhcmNoIHdpbGwgZmluZCBpdCBiZWZvcmUgb2xkIGVsZW0KIAkgKi8KLQlobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoJmFtcDtsX25ldy0mZ3Q7aGFzaF9ub2RlLCBoZWFkKTsKJiM0MzsJaGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KCZhbXA7bF9uZXctJmd0O25vZGUuaGFzaF9ub2RlLCBoZWFkKTsKIAlpZiAobF9vbGQpIHsKLQkJaGxpc3RfbnVsbHNfZGVsX3JjdSgmYW1wO2xfb2xkLSZndDtoYXNoX25vZGUpOwomIzQzOwkJaGxpc3RfbnVsbHNfZGVsX3JjdSgmYW1wO2xfb2xkLSZndDtub2RlLmhhc2hfbm9kZSk7CiAKIAkJLyogbF9vbGQgaGFzIGFscmVhZHkgYmVlbiBzdGFzaGVkIGluIGh0YWItJmd0O2V4dHJhX2VsZW1zLCBjYW5jZWwKIAkJICogaXRzIHJldXNhYmxlIHNwZWNpYWwgZmllbGRzIGJlZm9yZSBpdCBpcyBhdmFpbGFibGUgZm9yIHJldXNlLgpAQCAtMTI3NSw3ICYjNDM7MTM3Myw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfbHJ1X3B1c2hfZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmVsZW0pCiB7CiAJY2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoaHRhYiwgZWxlbSk7CiAJYnBmX21hcF9kZWNfZWxlbV9jb3VudCgmYW1wO2h0YWItJmd0O21hcCk7Ci0JYnBmX2xydV9wdXNoX2ZyZWUoJmFtcDtodGFiLSZndDtscnUsICZhbXA7ZWxlbS0mZ3Q7bHJ1X25vZGUpOwomIzQzOwlicGZfbHJ1X3B1c2hfZnJlZSgmYW1wO2h0YWItJmd0O2xydSwgaHRhYl9lbGVtX2xydV9ub2RlKGVsZW0pKTsKIH0KIAogc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsCkBAIC0xMzEwLDEzICYjNDM7MTQwOCwxMyBAQCBzdGF0aWMgbG9uZyBodGFiX2xydV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZQogCWxfbmV3ID0gcHJlYWxsb2NfbHJ1X3BvcChodGFiLCBrZXksIGhhc2gpOwogCWlmICghbF9uZXcpCiAJCXJldHVybiAtRU5PTUVNOwotCWNvcHlfbWFwX3ZhbHVlKCZhbXA7aHRhYi0mZ3Q7bWFwLCBodGFiX2VsZW1fdmFsdWUobF9uZXcsIG1hcC0mZ3Q7a2V5X3NpemUpLCB2YWx1ZSk7CiYjNDM7CWNvcHlfbWFwX3ZhbHVlKCZhbXA7aHRhYi0mZ3Q7bWFwLCBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLCB2YWx1ZSk7CiAKIAlyZXQgPSBodGFiX2xvY2tfYnVja2V0KGIsICZhbXA7ZmxhZ3MpOwogCWlmIChyZXQpCiAJCWdvdG8gZXJyX2xvY2tfYnVja2V0OwogCi0JbF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7CiYjNDM7CWxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpOwogCiAJcmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7CiAJaWYgKHJldCkKQEAgLTEzMjUsMTAgJiM0MzsxNDIzLDEwIEBAIHN0YXRpYyBsb25nIGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlCiAJLyogYWRkIG5ldyBlbGVtZW50IHRvIHRoZSBoZWFkIG9mIHRoZSBsaXN0LCBzbyB0aGF0CiAJICogY29uY3VycmVudCBzZWFyY2ggd2lsbCBmaW5kIGl0IGJlZm9yZSBvbGQgZWxlbQogCSAqLwotCWhsaXN0X251bGxzX2FkZF9oZWFkX3JjdSgmYW1wO2xfbmV3LSZndDtoYXNoX25vZGUsIGhlYWQpOwomIzQzOwlobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoJmFtcDtsX25ldy0mZ3Q7bm9kZS5oYXNoX25vZGUsIGhlYWQpOwogCWlmIChsX29sZCkgewotCQlicGZfbHJ1X25vZGVfc2V0X3JlZigmYW1wO2xfbmV3LSZndDtscnVfbm9kZSk7Ci0JCWhsaXN0X251bGxzX2RlbF9yY3UoJmFtcDtsX29sZC0mZ3Q7aGFzaF9ub2RlKTsKJiM0MzsJCWJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsX25ldykpOwomIzQzOwkJaGxpc3RfbnVsbHNfZGVsX3JjdSgmYW1wO2xfb2xkLSZndDtub2RlLmhhc2hfbm9kZSk7CiAJfQogCXJldCA9IDA7CiAKQEAgLTEzODMsNyAmIzQzOzE0ODEsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbV9pbl9wbGFjZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksCiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIAotCWxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpOwomIzQzOwlsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKIAogCXJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpOwogCWlmIChyZXQpCkBAIC0xMzkyLDEwICYjNDM7MTQ5MCwxMCBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbV9pbl9wbGFjZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksCiAJaWYgKGxfb2xkKSB7CiAJCS8qIFVwZGF0ZSB2YWx1ZSBpbi1wbGFjZSAqLwogCQlpZiAocGVyY3B1KSB7Ci0JCQlwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIobF9vbGQsIGtleV9zaXplKSwKJiM0MzsJCQlwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9vbGQpLAogCQkJCQl2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpOwogCQl9IGVsc2UgewotCQkJdm9pZCAqKmlubmVyX21hcF9wcHRyID0gaHRhYl9lbGVtX3ZhbHVlKGxfb2xkLCBrZXlfc2l6ZSk7CiYjNDM7CQkJdm9pZCAqKmlubmVyX21hcF9wcHRyID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfb2xkKTsKIAogCQkJb2xkX21hcF9wdHIgPSAqaW5uZXJfbWFwX3BwdHI7CiAJCQlXUklURV9PTkNFKCppbm5lcl9tYXBfcHB0ciwgKih2b2lkICoqKXZhbHVlKTsKQEAgLTE0MDcsNyAmIzQzOzE1MDUsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbV9pbl9wbGFjZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksCiAJCQlyZXQgPSBQVFJfRVJSKGxfbmV3KTsKIAkJCWdvdG8gZXJyOwogCQl9Ci0JCWhsaXN0X251bGxzX2FkZF9oZWFkX3JjdSgmYW1wO2xfbmV3LSZndDtoYXNoX25vZGUsIGhlYWQpOwomIzQzOwkJaGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KCZhbXA7bF9uZXctJmd0O25vZGUuaGFzaF9ub2RlLCBoZWFkKTsKIAl9CiBlcnI6CiAJaHRhYl91bmxvY2tfYnVja2V0KGIsIGZsYWdzKTsKQEAgLTE0NTYsMjIgJiM0MzsxNTU0LDIyIEBAIHN0YXRpYyBsb25nIF9faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksCiAJaWYgKHJldCkKIAkJZ290byBlcnJfbG9ja19idWNrZXQ7CiAKLQlsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKJiM0MzsJbF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7CiAKIAlyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTsKIAlpZiAocmV0KQogCQlnb3RvIGVycjsKIAogCWlmIChsX29sZCkgewotCQlicGZfbHJ1X25vZGVfc2V0X3JlZigmYW1wO2xfb2xkLSZndDtscnVfbm9kZSk7CiYjNDM7CQlicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobF9vbGQpKTsKIAogCQkvKiBwZXItY3B1IGhhc2ggbWFwIGNhbiB1cGRhdGUgdmFsdWUgaW4tcGxhY2UgKi8KLQkJcGNwdV9jb3B5X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGxfb2xkLCBrZXlfc2l6ZSksCiYjNDM7CQlwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9vbGQpLAogCQkJCXZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7CiAJfSBlbHNlIHsKLQkJcGNwdV9pbml0X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGxfbmV3LCBrZXlfc2l6ZSksCiYjNDM7CQlwY3B1X2luaXRfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9uZXcpLAogCQkJCXZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7Ci0JCWhsaXN0X251bGxzX2FkZF9oZWFkX3JjdSgmYW1wO2xfbmV3LSZndDtoYXNoX25vZGUsIGhlYWQpOwomIzQzOwkJaGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KCZhbXA7bF9uZXctJmd0O25vZGUuaGFzaF9ub2RlLCBoZWFkKTsKIAkJbF9uZXcgPSBOVUxMOwogCX0KIAlyZXQgPSAwOwpAQCAtMTQ4MCw3ICYjNDM7MTU3OCw3IEBAIHN0YXRpYyBsb25nIF9faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksCiBlcnJfbG9ja19idWNrZXQ6CiAJaWYgKGxfbmV3KSB7CiAJCWJwZl9tYXBfZGVjX2VsZW1fY291bnQoJmFtcDtodGFiLSZndDttYXApOwotCQlicGZfbHJ1X3B1c2hfZnJlZSgmYW1wO2h0YWItJmd0O2xydSwgJmFtcDtsX25ldy0mZ3Q7bHJ1X25vZGUpOwomIzQzOwkJYnBmX2xydV9wdXNoX2ZyZWUoJmFtcDtodGFiLSZndDtscnUsIGh0YWJfZWxlbV9scnVfbm9kZShsX25ldykpOwogCX0KIAlyZXR1cm4gcmV0OwogfQpAQCAtMTUyMSw5ICYjNDM7MTYxOSw5IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JbCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKJiM0MzsJbCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKIAlpZiAobCkKLQkJaGxpc3RfbnVsbHNfZGVsX3JjdSgmYW1wO2wtJmd0O2hhc2hfbm9kZSk7CiYjNDM7CQlobGlzdF9udWxsc19kZWxfcmN1KCZhbXA7bC0mZ3Q7bm9kZS5oYXNoX25vZGUpOwogCWVsc2UKIAkJcmV0ID0gLUVOT0VOVDsKIApAQCAtMTU1NiwxMCAmIzQzOzE2NTQsMTAgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JbCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKJiM0MzsJbCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKIAogCWlmIChsKQotCQlobGlzdF9udWxsc19kZWxfcmN1KCZhbXA7bC0mZ3Q7aGFzaF9ub2RlKTsKJiM0MzsJCWhsaXN0X251bGxzX2RlbF9yY3UoJmFtcDtsLSZndDtub2RlLmhhc2hfbm9kZSk7CiAJZWxzZQogCQlyZXQgPSAtRU5PRU5UOwogCkBAIC0xNTgxLDggJiM0MzsxNjc5LDggQEAgc3RhdGljIHZvaWQgZGVsZXRlX2FsbF9lbGVtZW50cyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpCiAJCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuOwogCQlzdHJ1Y3QgaHRhYl9lbGVtICpsOwogCi0JCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7Ci0JCQlobGlzdF9udWxsc19kZWxfcmN1KCZhbXA7bC0mZ3Q7aGFzaF9ub2RlKTsKJiM0MzsJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpIHsKJiM0MzsJCQlobGlzdF9udWxsc19kZWxfcmN1KCZhbXA7bC0mZ3Q7bm9kZS5oYXNoX25vZGUpOwogCQkJaHRhYl9lbGVtX2ZyZWUoaHRhYiwgbCk7CiAJCX0KIAkJY29uZF9yZXNjaGVkKCk7CkBAIC0xNTk5LDEwICYjNDM7MTY5NywxMCBAQCBzdGF0aWMgdm9pZCBodGFiX2ZyZWVfbWFsbG9jZWRfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpCiAJCXN0cnVjdCBobGlzdF9udWxsc19ub2RlICpuOwogCQlzdHJ1Y3QgaHRhYl9lbGVtICpsOwogCi0JCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkgewomIzQzOwkJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnkobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpIHsKIAkJCS8qIFdlIG9ubHkgZnJlZSBpbnRlcm5hbCBzdHJ1Y3RzIG9uIHVyZWYgZHJvcHBpbmcgdG8gemVybyAqLwogCQkJYnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoJmFtcDtodGFiLSZndDttYXAsCi0JCQkJCQkgICAgICBodGFiX2VsZW1fdmFsdWUobCwgaHRhYi0mZ3Q7bWFwLmtleV9zaXplKSk7CiYjNDM7CQkJCQkJICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpKTsKIAkJfQogCQljb25kX3Jlc2NoZWRfcmN1KCk7CiAJfQpAQCAtMTY5Nyw3ICYjNDM7MTc5NSw3IEBAIHN0YXRpYyBpbnQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwKIAlpZiAocmV0KQogCQlyZXR1cm4gcmV0OwogCi0JbCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKJiM0MzsJbCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTsKIAlpZiAoIWwpIHsKIAkJcmV0ID0gLUVOT0VOVDsKIAkJZ290byBvdXRfdW5sb2NrOwpAQCAtMTcwOCwxNCAmIzQzOzE4MDYsMTQgQEAgc3RhdGljIGludCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LAogCQl2b2lkIF9fcGVyY3B1ICpwcHRyOwogCQlpbnQgb2ZmID0gMCwgY3B1OwogCi0JCXBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBrZXlfc2l6ZSk7CiYjNDM7CQlwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCk7CiAJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJCWNvcHlfbWFwX3ZhbHVlX2xvbmcoJmFtcDtodGFiLSZndDttYXAsIHZhbHVlICYjNDM7IG9mZiwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7CiAJCQljaGVja19hbmRfaW5pdF9tYXBfdmFsdWUoJmFtcDtodGFiLSZndDttYXAsIHZhbHVlICYjNDM7IG9mZik7CiAJCQlvZmYgJiM0Mzs9IHJvdW5kdXBfdmFsdWVfc2l6ZTsKIAkJfQogCX0gZWxzZSB7Ci0JCXZvaWQgKnNyYyA9IGh0YWJfZWxlbV92YWx1ZShsLCBtYXAtJmd0O2tleV9zaXplKTsKJiM0MzsJCXZvaWQgKnNyYyA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTsKIAogCQlpZiAoZmxhZ3MgJmFtcDsgQlBGX0ZfTE9DSykKIAkJCWNvcHlfbWFwX3ZhbHVlX2xvY2tlZChtYXAsIHZhbHVlLCBzcmMsIHRydWUpOwpAQCAtMTcyNCw3ICYjNDM7MTgyMiw3IEBAIHN0YXRpYyBpbnQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwKIAkJLyogWmVyb2luZyBzcGVjaWFsIGZpZWxkcyBpbiB0aGUgdGVtcCBidWZmZXIgKi8KIAkJY2hlY2tfYW5kX2luaXRfbWFwX3ZhbHVlKG1hcCwgdmFsdWUpOwogCX0KLQlobGlzdF9udWxsc19kZWxfcmN1KCZhbXA7bC0mZ3Q7aGFzaF9ub2RlKTsKJiM0MzsJaGxpc3RfbnVsbHNfZGVsX3JjdSgmYW1wO2wtJmd0O25vZGUuaGFzaF9ub2RlKTsKIAogb3V0X3VubG9jazoKIAlodGFiX3VubG9ja19idWNrZXQoYiwgYmZsYWdzKTsKQEAgLTE4NjAsNyAmIzQzOzE5NTgsNyBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsCiAJfQogCiAJYnVja2V0X2NudCA9IDA7Ci0JaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkKJiM0MzsJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKQogCQlidWNrZXRfY250JiM0MzsmIzQzOzsKIAogCWlmIChidWNrZXRfY250ICZhbXA7JmFtcDsgIWxvY2tlZCkgewpAQCAtMTg5NywxNCAmIzQzOzE5OTUsMTQgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCWlmICghbG9ja2VkKQogCQlnb3RvIG5leHRfYmF0Y2g7CiAKLQlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkgewotCQltZW1jcHkoZHN0X2tleSwgbC0mZ3Q7a2V5LCBrZXlfc2l6ZSk7CiYjNDM7CWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpIHsKJiM0MzsJCW1lbWNweShkc3Rfa2V5LCBodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXlfc2l6ZSk7CiAKIAkJaWYgKGlzX3BlcmNwdSkgewogCQkJaW50IG9mZiA9IDAsIGNwdTsKIAkJCXZvaWQgX19wZXJjcHUgKnBwdHI7CiAKLQkJCXBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtJmd0O2tleV9zaXplKTsKJiM0MzsJCQlwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCk7CiAJCQlpZiAoZWxlbV9tYXBfZmxhZ3MgJmFtcDsgQlBGX0ZfQ1BVKSB7CiAJCQkJY3B1ID0gZWxlbV9tYXBfZmxhZ3MgJmd0OyZndDsgMzI7CiAJCQkJY29weV9tYXBfdmFsdWUoJmFtcDtodGFiLSZndDttYXAsIGRzdF92YWwsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpOwpAQCAtMTkxOCw3ICYjNDM7MjAxNiw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwKIAkJCQl9CiAJCQl9CiAJCX0gZWxzZSB7Ci0JCQl2YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShsLCBrZXlfc2l6ZSk7CiYjNDM7CQkJdmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7CiAJCQlpZiAoaXNfZmRfaHRhYihodGFiKSkgewogCQkJCXN0cnVjdCBicGZfbWFwICoqaW5uZXJfbWFwID0gdmFsdWU7CiAKQEAgLTE5MzYsNyAmIzQzOzIwMzQsNyBAQCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoKHN0cnVjdCBicGZfbWFwICptYXAsCiAJCQljaGVja19hbmRfaW5pdF9tYXBfdmFsdWUobWFwLCBkc3RfdmFsKTsKIAkJfQogCQlpZiAoZG9fZGVsZXRlKSB7Ci0JCQlobGlzdF9udWxsc19kZWxfcmN1KCZhbXA7bC0mZ3Q7aGFzaF9ub2RlKTsKJiM0MzsJCQlobGlzdF9udWxsc19kZWxfcmN1KCZhbXA7bC0mZ3Q7bm9kZS5oYXNoX25vZGUpOwogCiAJCQkvKiBicGZfbHJ1X3B1c2hfZnJlZSgpIHdpbGwgYWNxdWlyZSBscnVfbG9jaywgd2hpY2gKIAkJCSAqIG1heSBjYXVzZSBkZWFkbG9jay4gU2VlIGNvbW1lbnRzIGluIGZ1bmN0aW9uCkBAIC0xOTQ4LDcgJiM0MzsyMDQ2LDcgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCQkJICogbG9jayBiZWluZyBoZWxkIGFuZCBpdCB2aW9sYXRlcyB0aGUgbG9jayBydWxlLCBzbwogCQkJICogaW52b2tlIGZyZWVfaHRhYl9lbGVtKCkgYWZ0ZXIgdW5sb2NrIGFzIHdlbGwuCiAJCQkgKi8KLQkJCWwtJmd0O2JhdGNoX2ZsaW5rID0gbm9kZV90b19mcmVlOwomIzQzOwkJCWwtJmd0O25vZGUuYmF0Y2hfZmxpbmsgPSBub2RlX3RvX2ZyZWU7CiAJCQlub2RlX3RvX2ZyZWUgPSBsOwogCQl9CiAJCWRzdF9rZXkgJiM0Mzs9IGtleV9zaXplOwpAQCAtMTk2MCw3ICYjNDM7MjA1OCw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCwKIAogCXdoaWxlIChub2RlX3RvX2ZyZWUpIHsKIAkJbCA9IG5vZGVfdG9fZnJlZTsKLQkJbm9kZV90b19mcmVlID0gbm9kZV90b19mcmVlLSZndDtiYXRjaF9mbGluazsKJiM0MzsJCW5vZGVfdG9fZnJlZSA9IG5vZGVfdG9fZnJlZS0mZ3Q7bm9kZS5iYXRjaF9mbGluazsKIAkJaWYgKGlzX2xydV9tYXApCiAJCQlodGFiX2xydV9wdXNoX2ZyZWUoaHRhYiwgbCk7CiAJCWVsc2UKQEAgLTIxMDgsOCAmIzQzOzIyMDYsOCBAQCBicGZfaGFzaF9tYXBfc2VxX2ZpbmRfbmV4dChzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2hhc2hfbWFwX2luZm8gKmluZm8sCiAJCS8qIG5vIHVwZGF0ZS9kZWxldGlvbiBvbiB0aGlzIGJ1Y2tldCwgcHJldl9lbGVtIHNob3VsZCBiZSBzdGlsbCB2YWxpZAogCQkgKiBhbmQgd2Ugd29uJiMzOTt0IHNraXAgZWxlbWVudHMuCiAJCSAqLwotCQluID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhobGlzdF9udWxsc19uZXh0X3JjdSgmYW1wO3ByZXZfZWxlbS0mZ3Q7aGFzaF9ub2RlKSk7Ci0JCWVsZW0gPSBobGlzdF9udWxsc19lbnRyeV9zYWZlKG4sIHN0cnVjdCBodGFiX2VsZW0sIGhhc2hfbm9kZSk7CiYjNDM7CQluID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhobGlzdF9udWxsc19uZXh0X3JjdSgmYW1wO3ByZXZfZWxlbS0mZ3Q7bm9kZS5oYXNoX25vZGUpKTsKJiM0MzsJCWVsZW0gPSBobGlzdF9udWxsc19lbnRyeV9zYWZlKG4sIHN0cnVjdCBodGFiX2VsZW0sIG5vZGUuaGFzaF9ub2RlKTsKIAkJaWYgKGVsZW0pCiAJCQlyZXR1cm4gZWxlbTsKIApAQCAtMjEyNSw3ICYjNDM7MjIyMyw3IEBAIGJwZl9oYXNoX21hcF9zZXFfZmluZF9uZXh0KHN0cnVjdCBicGZfaXRlcl9zZXFfaGFzaF9tYXBfaW5mbyAqaW5mbywKIAogCQljb3VudCA9IDA7CiAJCWhlYWQgPSAmYW1wO2ItJmd0O2hlYWQ7Ci0JCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShlbGVtLCBuLCBoZWFkLCBoYXNoX25vZGUpIHsKJiM0MzsJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShlbGVtLCBuLCBoZWFkLCBub2RlLmhhc2hfbm9kZSkgewogCQkJaWYgKGNvdW50ICZndDs9IHNraXBfZWxlbXMpIHsKIAkJCQlpbmZvLSZndDtidWNrZXRfaWQgPSBpOwogCQkJCWluZm8tJmd0O3NraXBfZWxlbXMgPSBjb3VudDsKQEAgLTIxODMsMTIgJiM0MzsyMjgxLDEyIEBAIHN0YXRpYyBpbnQgX19icGZfaGFzaF9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBodGFiX2VsZW0gKmVsZW0pCiAJCWN0eC5tZXRhID0gJmFtcDttZXRhOwogCQljdHgubWFwID0gaW5mby0mZ3Q7bWFwOwogCQlpZiAoZWxlbSkgewotCQkJY3R4LmtleSA9IGVsZW0tJmd0O2tleTsKJiM0MzsJCQljdHgua2V5ID0gaHRhYl9lbGVtX2tleShpbmZvLSZndDtodGFiLCBlbGVtKTsKIAkJCWlmICghaW5mby0mZ3Q7cGVyY3B1X3ZhbHVlX2J1ZikgewotCQkJCWN0eC52YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShlbGVtLCBtYXAtJmd0O2tleV9zaXplKTsKJiM0MzsJCQkJY3R4LnZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGluZm8tJmd0O2h0YWIsIGVsZW0pOwogCQkJfSBlbHNlIHsKIAkJCQlyb3VuZHVwX3ZhbHVlX3NpemUgPSByb3VuZF91cChtYXAtJmd0O3ZhbHVlX3NpemUsIDgpOwotCQkJCXBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBtYXAtJmd0O2tleV9zaXplKTsKJiM0MzsJCQkJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGluZm8tJmd0O2h0YWIsIGVsZW0pOwogCQkJCWZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHsKIAkJCQkJY29weV9tYXBfdmFsdWVfbG9uZyhtYXAsIGluZm8tJmd0O3BlcmNwdV92YWx1ZV9idWYgJiM0Mzsgb2ZmLAogCQkJCQkJCSAgICBwZXJfY3B1X3B0cihwcHRyLCBjcHUpKTsKQEAgLTIyOTIsMTQgJiM0MzsyMzkwLDE0IEBAIHN0YXRpYyBsb25nIGJwZl9mb3JfZWFjaF9oYXNoX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgYnBmX2NhbGxiYWNrX3QgY2FsbGJhY2tfCiAJCWIgPSAmYW1wO2h0YWItJmd0O2J1Y2tldHNbaV07CiAJCXJjdV9yZWFkX2xvY2soKTsKIAkJaGVhZCA9ICZhbXA7Yi0mZ3Q7aGVhZDsKLQkJaGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShlbGVtLCBuLCBoZWFkLCBoYXNoX25vZGUpIHsKLQkJCWtleSA9IGVsZW0tJmd0O2tleTsKJiM0MzsJCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUoZWxlbSwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpIHsKJiM0MzsJCQlrZXkgPSBodGFiX2VsZW1fa2V5KGh0YWIsIGVsZW0pOwogCQkJaWYgKGlzX3BlcmNwdSkgewogCQkJCS8qIGN1cnJlbnQgY3B1IHZhbHVlIGZvciBwZXJjcHUgbWFwICovCi0JCQkJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGVsZW0sIG1hcC0mZ3Q7a2V5X3NpemUpOwomIzQzOwkJCQlwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgZWxlbSk7CiAJCQkJdmFsID0gdGhpc19jcHVfcHRyKHBwdHIpOwogCQkJfSBlbHNlIHsKLQkJCQl2YWwgPSBodGFiX2VsZW1fdmFsdWUoZWxlbSwgbWFwLSZndDtrZXlfc2l6ZSk7CiYjNDM7CQkJCXZhbCA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBlbGVtKTsKIAkJCX0KIAkJCW51bV9lbGVtcyYjNDM7JiM0Mzs7CiAJCQlyZXQgPSBjYWxsYmFja19mbigodTY0KShsb25nKW1hcCwgKHU2NCkobG9uZylrZXksCkBAIC0yNDAzLDEwICYjNDM7MjUwMSwxMSBAQCBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9scnVfbWFwX29wcyA9IHsKIC8qIENhbGxlZCBmcm9tIGVCUEYgcHJvZ3JhbSAqLwogc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpCiB7CiYjNDM7CXN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKIAlzdHJ1Y3QgaHRhYl9lbGVtICpsID0gX19odGFiX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7CiAKIAlpZiAobCkKLQkJcmV0dXJuIHRoaXNfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtJmd0O2tleV9zaXplKSk7CiYjNDM7CQlyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpKTsKIAllbHNlCiAJCXJldHVybiBOVUxMOwogfQpAQCAtMjQxNCw2ICYjNDM7MjUxMyw3IEBAIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQogLyogaW5saW5lIGJwZl9tYXBfbG9va3VwX2VsZW0oKSBjYWxsIGZvciBwZXItQ1BVIGhhc2htYXAgKi8KIHN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZikKIHsKJiM0MzsJc3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApOwogCXN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmOwogCiAJaWYgKCFicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKCkpCkBAIC0yNDI0LDcgJiM0MzsyNTI0LDcgQEAgc3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc24KIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pOwogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIEJQRl9SRUdfMCwgMCwgMyk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCBCUEZfUkVHXzAsCi0JCQkJb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwga2V5KSAmIzQzOyByb3VuZHVwKG1hcC0mZ3Q7a2V5X3NpemUsIDgpKTsKJiM0MzsJCQkJaHRhYi0mZ3Q7a2V5X29mZnNldCAmIzQzOyByb3VuZHVwKG1hcC0mZ3Q7a2V5X3NpemUsIDgpKTsKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTERYX01FTShCUEZfRFcsIEJQRl9SRUdfMCwgQlBGX1JFR18wLCAwKTsKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7CiAKQEAgLTI0MzMsNiAmIzQzOzI1MzMsNyBAQCBzdGF0aWMgaW50IGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbgogCiBzdGF0aWMgdm9pZCAqaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHUzMiBjcHUpCiB7CiYjNDM7CXN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKIAlzdHJ1Y3QgaHRhYl9lbGVtICpsOwogCiAJaWYgKGNwdSAmZ3Q7PSBucl9jcHVfaWRzKQpAQCAtMjQ0MCwxOCAmIzQzOzI1NDEsMTkgQEAgc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LAogCiAJbCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpOwogCWlmIChsKQotCQlyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLSZndDtrZXlfc2l6ZSksIGNwdSk7CiYjNDM7CQlyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCksIGNwdSk7CiAJZWxzZQogCQlyZXR1cm4gTlVMTDsKIH0KIAogc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQogewomIzQzOwlzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7CiAJc3RydWN0IGh0YWJfZWxlbSAqbCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpOwogCiAJaWYgKGwpIHsKLQkJYnBmX2xydV9ub2RlX3NldF9yZWYoJmFtcDtsLSZndDtscnVfbm9kZSk7Ci0JCXJldHVybiB0aGlzX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLSZndDtrZXlfc2l6ZSkpOwomIzQzOwkJYnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGwpKTsKJiM0MzsJCXJldHVybiB0aGlzX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCkpOwogCX0KIAogCXJldHVybiBOVUxMOwpAQCAtMjQ1OSw2ICYjNDM7MjU2MSw3IEBAIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSkKIAogc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdTMyIGNwdSkKIHsKJiM0MzsJc3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApOwogCXN0cnVjdCBodGFiX2VsZW0gKmw7CiAKIAlpZiAoY3B1ICZndDs9IG5yX2NwdV9pZHMpCkBAIC0yNDY2LDggJiM0MzsyNTY5LDggQEAgc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmsKIAogCWwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTsKIAlpZiAobCkgewotCQlicGZfbHJ1X25vZGVfc2V0X3JlZigmYW1wO2wtJmd0O2xydV9ub2RlKTsKLQkJcmV0dXJuIHBlcl9jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC0mZ3Q7a2V5X3NpemUpLCBjcHUpOwomIzQzOwkJYnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGwpKTsKJiM0MzsJCXJldHVybiBwZXJfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKSwgY3B1KTsKIAl9CiAKIAlyZXR1cm4gTlVMTDsKQEAgLTI0NzUsNiAmIzQzOzI1NzgsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqawogCiBpbnQgYnBmX3BlcmNwdV9oYXNoX2NvcHkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncykKIHsKJiM0MzsJc3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApOwogCXN0cnVjdCBodGFiX2VsZW0gKmw7CiAJdm9pZCBfX3BlcmNwdSAqcHB0cjsKIAlpbnQgcmV0ID0gLUVOT0VOVDsKQEAgLTI0OTQsNyAmIzQzOzI1OTgsNyBAQCBpbnQgYnBmX3BlcmNwdV9oYXNoX2NvcHkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbAogCS8qIFdlIGRvIG5vdCBtYXJrIExSVSBtYXAgZWxlbWVudCBoZXJlIGluIG9yZGVyIHRvIG5vdCBtZXNzIHVwCiAJICogZXZpY3Rpb24gaGV1cmlzdGljcyB3aGVuIHVzZXIgc3BhY2UgZG9lcyBhIG1hcCB3YWxrLgogCSAqLwotCXBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtJmd0O2tleV9zaXplKTsKJiM0MzsJcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpOwogCWlmIChtYXBfZmxhZ3MgJmFtcDsgQlBGX0ZfQ1BVKSB7CiAJCWNwdSA9IG1hcF9mbGFncyAmZ3Q7Jmd0OyAzMjsKIAkJY29weV9tYXBfdmFsdWUobWFwLCB2YWx1ZSwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7CkBAIC0yNTMyLDYgJiM0MzsyNjM2LDcgQEAgaW50IGJwZl9wZXJjcHVfaGFzaF91cGRhdGUoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSwKIHN0YXRpYyB2b2lkIGh0YWJfcGVyY3B1X21hcF9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwKIAkJCQkJICBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pCiB7CiYjNDM7CXN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKIAlzdHJ1Y3QgaHRhYl9lbGVtICpsOwogCXZvaWQgX19wZXJjcHUgKnBwdHI7CiAJaW50IGNwdTsKQEAgLTI1NDYsNyAmIzQzOzI2NTEsNyBAQCBzdGF0aWMgdm9pZCBodGFiX3BlcmNwdV9tYXBfc2VxX3Nob3dfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksCiAKIAlidGZfdHlwZV9zZXFfc2hvdyhtYXAtJmd0O2J0ZiwgbWFwLSZndDtidGZfa2V5X3R5cGVfaWQsIGtleSwgbSk7CiAJc2VxX3B1dHMobSwgJiMzNDs6IHtcbiYjMzQ7KTsKLQlwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLSZndDtrZXlfc2l6ZSk7CiYjNDM7CXBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKTsKIAlmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7CiAJCXNlcV9wcmludGYobSwgJiMzNDtcdGNwdSVkOiAmIzM0OywgY3B1KTsKIAkJYnRmX3R5cGVfc2VxX3Nob3cobWFwLSZndDtidGYsIG1hcC0mZ3Q7YnRmX3ZhbHVlX3R5cGVfaWQsCkBAIC0yNjE5LDggJiM0MzsyNzI0LDggQEAgc3RhdGljIHZvaWQgZmRfaHRhYl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKQogCWZvciAoaSA9IDA7IGkgJmx0OyBodGFiLSZndDtuX2J1Y2tldHM7IGkmIzQzOyYjNDM7KSB7CiAJCWhlYWQgPSBzZWxlY3RfYnVja2V0KGh0YWIsIGkpOwogCi0JCWhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7Ci0JCQl2b2lkICpwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKG1hcCwgbCk7CiYjNDM7CQlobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKSB7CiYjNDM7CQkJdm9pZCAqcHRyID0gZmRfaHRhYl9tYXBfZ2V0X3B0cihodGFiLCBsKTsKIAogCQkJbWFwLSZndDtvcHMtJmd0O21hcF9mZF9wdXRfcHRyKG1hcCwgcHRyLCBmYWxzZSk7CiAJCX0KQEAgLTI3MDUsNiAmIzQzOzI4MTAsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9vZl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KQogc3RhdGljIGludCBodGFiX29mX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsCiAJCQkJICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKQogewomIzQzOwlzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7CiAJc3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7CiAJY29uc3QgaW50IHJldCA9IEJQRl9SRUdfMDsKIApAQCAtMjcxMyw3ICYjNDM7MjgxOSw3IEBAIHN0YXRpYyBpbnQgaHRhYl9vZl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLAogCSppbnNuJiM0MzsmIzQzOyA9IEJQRl9FTUlUX0NBTEwoX19odGFiX21hcF9sb29rdXBfZWxlbSk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgcmV0LCAwLCAyKTsKIAkqaW5zbiYjNDM7JiM0MzsgPSBCUEZfQUxVNjRfSU1NKEJQRl9BREQsIHJldCwKLQkJCQlvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICYjNDM7CiYjNDM7CQkJCWh0YWItJmd0O2tleV9vZmZzZXQgJiM0MzsKIAkJCQlyb3VuZF91cChtYXAtJmd0O2tleV9zaXplLCA4KSk7CiAJKmluc24mIzQzOyYjNDM7ID0gQlBGX0xEWF9NRU0oQlBGX0RXLCByZXQsIHJldCwgMCk7CiAKQEAgLTMxMTIsNyAmIzQzOzMyMTgsNyBAQCBzdGF0aWMgaW50IHJodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLAogewogCXN0cnVjdCBicGZfcmh0YWIgKnJodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9yaHRhYiwgbWFwKTsKIAotCXJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCAmYW1wO3JodGFiLSZndDttYSwgcmh0YWJfbWVtX2R0b3IpOwomIzQzOwlyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgJmFtcDtyaHRhYi0mZ3Q7bWEsIHJodGFiX21lbV9kdG9yLCBvZmZzZXRvZihzdHJ1Y3Qgcmh0YWJfZWxlbSwgZGF0YSkpOwogfQogCiBzdGF0aWMgdm9pZCByaHRhYl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXApCkBAIC0zNTMzLDMgJiM0MzszNjM5LDE2IEBAIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0gewogCS5tYXBfYnRmX2lkID0gJmFtcDtyaHRhYl9tYXBfYnRmX2lkc1swXSwKIAkuaXRlcl9zZXFfaW5mbyA9ICZhbXA7cmhhc2hfaXRlcl9zZXFfaW5mbywKIH07CiYjNDM7CiYjNDM7c2l6ZV90IGJwZl9odGFiX21hcF9tZXRhX3NpemUodm9pZCkKJiM0Mzt7CiYjNDM7CXJldHVybiBzaXplb2Yoc3RydWN0IGJwZl9odGFiKTsKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBicGZfaHRhYl9tYXBfbWV0YV9pbml0KHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXBfbWV0YSwgc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcCkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBicGZfaHRhYiAqaW5uZXJfaHRhYl9tZXRhID0gY29udGFpbmVyX29mKGlubmVyX21hcF9tZXRhLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7CiYjNDM7CXN0cnVjdCBicGZfaHRhYiAqaW5uZXJfaHRhYiA9IGNvbnRhaW5lcl9vZihpbm5lcl9tYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTsKJiM0MzsKJiM0MzsJaW5uZXJfaHRhYl9tZXRhLSZndDtrZXlfb2Zmc2V0ID0gaW5uZXJfaHRhYi0mZ3Q7a2V5X29mZnNldDsKJiM0Mzt9CmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21hcF9pbl9tYXAuYyBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5jCmluZGV4IGQyY2JhYjRiZGY2NDQuLmIyZGI1ZDBjOThiZWUgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9icGYvbWFwX2luX21hcC5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5jCkBAIC03LDYgJiM0Mzs3LDE1IEBACiAKICNpbmNsdWRlICYjMzQ7bWFwX2luX21hcC5oJiMzNDsKIAomIzQzO3N0YXRpYyBib29sIGJwZl9tYXBfdHlwZV9pc19odGFiKGVudW0gYnBmX21hcF90eXBlIHR5cGUpCiYjNDM7ewomIzQzOwlyZXR1cm4gdHlwZSA9PSBCUEZfTUFQX1RZUEVfSEFTSCB8fAomIzQzOwkgICAgICAgdHlwZSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0ggfHwKJiM0MzsJICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX0xSVV9IQVNIIHx8CiYjNDM7CSAgICAgICB0eXBlID09IEJQRl9NQVBfVFlQRV9MUlVfUEVSQ1BVX0hBU0ggfHwKJiM0MzsJICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX0hBU0hfT0ZfTUFQUzsKJiM0Mzt9CiYjNDM7CiBzdHJ1Y3QgYnBmX21hcCAqYnBmX21hcF9tZXRhX2FsbG9jKGludCBpbm5lcl9tYXBfdWZkKQogewogCXN0cnVjdCBicGZfbWFwICppbm5lcl9tYXAsICppbm5lcl9tYXBfbWV0YTsKQEAgLTI5LDYgJiM0MzszOCw4IEBAIHN0cnVjdCBicGZfbWFwICpicGZfbWFwX21ldGFfYWxsb2MoaW50IGlubmVyX21hcF91ZmQpCiAJLyogSW4gc29tZSBjYXNlcyB2ZXJpZmllciBuZWVkcyB0byBhY2Nlc3MgYmV5b25kIGp1c3QgYmFzZSBtYXAuICovCiAJaWYgKGlubmVyX21hcC0mZ3Q7b3BzID09ICZhbXA7YXJyYXlfbWFwX29wcyB8fCBpbm5lcl9tYXAtJmd0O29wcyA9PSAmYW1wO3BlcmNwdV9hcnJheV9tYXBfb3BzKQogCQlpbm5lcl9tYXBfbWV0YV9zaXplID0gc2l6ZW9mKHN0cnVjdCBicGZfYXJyYXkpOwomIzQzOwllbHNlIGlmIChicGZfbWFwX3R5cGVfaXNfaHRhYihpbm5lcl9tYXAtJmd0O21hcF90eXBlKSkKJiM0MzsJCWlubmVyX21hcF9tZXRhX3NpemUgPSBicGZfaHRhYl9tYXBfbWV0YV9zaXplKCk7CiAKIAlpbm5lcl9tYXBfbWV0YSA9IGt6YWxsb2MoaW5uZXJfbWFwX21ldGFfc2l6ZSwgR0ZQX1VTRVIpOwogCWlmICghaW5uZXJfbWFwX21ldGEpCkBAIC03MCw2ICYjNDM7ODEsOCBAQCBzdHJ1Y3QgYnBmX21hcCAqYnBmX21hcF9tZXRhX2FsbG9jKGludCBpbm5lcl9tYXBfdWZkKQogCQlpbm5lcl9hcnJheV9tZXRhLSZndDtpbmRleF9tYXNrID0gaW5uZXJfYXJyYXktJmd0O2luZGV4X21hc2s7CiAJCWlubmVyX2FycmF5X21ldGEtJmd0O2VsZW1fc2l6ZSA9IGlubmVyX2FycmF5LSZndDtlbGVtX3NpemU7CiAJCWlubmVyX21hcF9tZXRhLSZndDtieXBhc3Nfc3BlY192MSA9IGlubmVyX21hcC0mZ3Q7YnlwYXNzX3NwZWNfdjE7CiYjNDM7CX0gZWxzZSBpZiAoYnBmX21hcF90eXBlX2lzX2h0YWIoaW5uZXJfbWFwLSZndDttYXBfdHlwZSkpIHsKJiM0MzsJCWJwZl9odGFiX21hcF9tZXRhX2luaXQoaW5uZXJfbWFwX21ldGEsIGlubmVyX21hcCk7CiAJfQogCXJldHVybiBpbm5lcl9tYXBfbWV0YTsKIH0KZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWFwX2luX21hcC5oIGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmgKaW5kZXggN2Q2MTYwMjM1NGRlOC4uMWVkYzIwNTc3MmQ4YyAxMDA2NDQKLS0tIGEva2VybmVsL2JwZi9tYXBfaW5fbWFwLmgKJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmgKQEAgLTE1LDUgJiM0MzsxNSw3IEBAIHZvaWQgKmJwZl9tYXBfZmRfZ2V0X3B0cihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsCiAJCQkgaW50IHVmZCk7CiB2b2lkIGJwZl9tYXBfZmRfcHV0X3B0cihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpwdHIsIGJvb2wgbmVlZF9kZWZlcik7CiB1MzIgYnBmX21hcF9mZF9zeXNfbG9va3VwX2VsZW0odm9pZCAqcHRyKTsKJiM0MztzaXplX3QgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSh2b2lkKTsKJiM0Mzt2b2lkIGJwZl9odGFiX21hcF9tZXRhX2luaXQoc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcF9tZXRhLCBzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwKTsKIAogI2VuZGlmCmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmMKaW5kZXggMzczYzhkMTdlYTU1Ny4uNmJkNGNiNjhjMjBjMSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYwpAQCAtMTE0LDcgJiM0MzsxMTQsNyBAQCBzdGF0aWMgaW5saW5lIGludCBjaGVja19oYXNoKHZvaWQpCiAJVkVSSUZZKGNoZWNrX2RlZmF1bHRfbm9pbmxpbmUoJmFtcDtoYXNoLSZndDttYXAsIG1hcCkpOwogCiAJVkVSSUZZKGhhc2gtJmd0O25fYnVja2V0cyA9PSBNQVhfRU5UUklFUyk7Ci0JVkVSSUZZKGhhc2gtJmd0O2VsZW1fc2l6ZSA9PSA2NCk7CiYjNDM7CVZFUklGWShoYXNoLSZndDtlbGVtX3NpemUgPT0gMzIpOwogCiAJVkVSSUZZKGhhc2gtJmd0O2NvdW50LmNvdW50ZXIgPT0gMCk7CiAJVkVSSUZZKGJwZl9tYXBfc3VtX2VsZW1fY291bnQobWFwKSA9PSAwKTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTA6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE4MTAKCQkJCQkJCW91dHB1dDogNTAKCQkJCQkJCXRob3VnaHRzOiA4MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgQlBGIEhhc2ggTWFwIE9wdGltaXphdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgY2hhbmdlcyB0aGUgbGF5b3V0IG9mIGVsZW1lbnRzIHdpdGhpbiBCUEYgaGFzaCBtYXBzLCBzcGVjaWZpY2FsbHkgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBhbmQgYGtlcm5lbC9icGYvbWFwX2luX21hcC5jYC4gVGhlIGNvcmUgaWRlYSBpcyB0byAqY29uZGl0aW9uYWxseSogZHJvcCB0aGUgYGhhc2hgIGZpZWxkIGZyb20gdGhlIGVsZW1lbnQgc3RydWN0dXJlLCB3aGljaCBtYWtlcyBzZW5zZTsgaWYga2V5IGNvbXBhcmlzb25zIGFyZSBhdG9taWMgKHNtYWxsIGtleXMpIGFuZCBpdCYjMzk7cyBub3QgYW4gTFJVIG1hcCwgd2h5IGJvdGhlciBzdG9yaW5nIGl0PyBUaGlzIG9wdGltaXphdGlvbiBpbnRyb2R1Y2VzIGBrZXlfb2Zmc2V0YCB0byBgc3RydWN0IGJwZl9odGFiYCwgYWxsb3dpbmcgZm9yIGR5bmFtaWMgY29tcHV0YXRpb24gb2Yga2V5IGFuZCB2YWx1ZSBvZmZzZXRzIHdpdGhpbiB0aGUgZWxlbWVudC4gVGhlIHBhdGNoIGFsc28gcHJvcGFnYXRlcyBga2V5X29mZnNldGAgaW50byB0aGUgaW5uZXIgbWFwIG1ldGFkYXRhIGZvciBoYXNoIG1hcHMgd2l0aGluIG1hcC1pbi1tYXAgc3RydWN0dXJlcywgd2hpY2ggaXMgZXhwZWN0ZWQuCgpHaXZlbiB0aGUgZGVwdGggb2YgdGhpcyBjaGFuZ2UgdG8gdGhlIGNvcmUgaGFzaCBtYXAgaW1wbGVtZW50YXRpb24sIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRoYXQgdGhpcyAqYWJzb2x1dGVseSogZGVtYW5kcyB0aG9yb3VnaCBmdXp6aW5nLiBUaGlzIGlzIHRoZSBraW5kIG9mIGNoYW5nZSB0aGF0IGNhbiBpbnRyb2R1Y2Ugc3VidGxlIGJ1dCBjcml0aWNhbCBidWdzLgoKTXkgZm9jdXMgaGFzIHNoaWZ0ZWQgdG8gaWRlbnRpZnlpbmcgdGhlIGtleSBmdW5jdGlvbnMgYW5kIEFQSSBlbnRyeSBwb2ludHMuIEkmIzM5O3ZlIGluaXRpYWxseSBzcG90dGVkIHRoZSBmb2xsb3dpbmcgYXMgYmVpbmcgaW1wb3J0YW50IHRvIGNoZWNrIGZvciBmdW5jdGlvbmFsaXR5OgoKKiAgIGBodGFiX21hcF9hbGxvY2AKKiAgIGBodGFiX21hcF91cGRhdGVfZWxlbWAKKiAgIGBodGFiX2xydV9tYXBfdXBkYXRlX2VsZW1gCiogICBgaHRhYl9tYXBfZGVsZXRlX2VsZW1gCiogICBgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtYAoqICAgYGh0YWJfbWFwX2xvb2t1cF9lbGVtYAoqICAgYGh0YWJfbHJ1X21hcF9sb29rdXBfZWxlbWAKKiAgIGBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW1gCiogICBgaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfZWxlbWAKKiAgIGBodGFiX21hcF9nZXRfbmV4dF9rZXlgCiogICBgaHRhYl9tYXBfZ2VuX2xvb2t1cGAKKiAgIGBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cGAKKiAgIGBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cGAKKiAgIGBodGFiX29mX21hcF9nZW5fbG9va3VwYAoqICAgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAKKiAgIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYAoqICAgYGJwZl9tYXBfbWV0YV9hbGxvY2AKClRob3VnaCBpdCBzZWVtcyBgaHRhYl9tYXBfdXBkYXRlX2VsZW1gIGlzIHN0YXRpYywgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGl0JiMzOTtzIGFzc2lnbmVkIHRvIGBtYXBfb3BzYC4gSSYjMzk7bSBzdGFydGluZyB0byB0aGluayBhYm91dCAqd2hpY2gqIGZ1bmN0aW9ucyBhcmUgYWN0dWFsbHkgZXhwb3NlZCBhcyB0aGUgQVBJLCBhbmQgd2hhdCBhcmUgZ29vZCB0YXJnZXRzIGZvciBmdXp6aW5nLgoKQWZ0ZXIgYSBsaXR0bGUgcmV2aWV3LCBpdCBsb29rcyBsaWtlIGBodGFiX21hcF9hbGxvY2AgaXMgYWxzbyBzdGF0aWMsIHNvIEkgd2lsbCBub3cgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzIG9uIG90aGVyIGV4cG9ydHM6CgoqICAgYGJwZl9wZXJjcHVfaGFzaF9jb3B5YAoqICAgYGJwZl9wZXJjcHVfaGFzaF91cGRhdGVgCiogICBgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZWAKKiAgIGBicGZfaHRhYl9tYXBfbWV0YV9pbml0YAoqICAgYGJwZl9tYXBfbWV0YV9hbGxvY2AKClRpbWUgdG8gY2hlY2sgaG93IHRoZXNlIGFyZSBkZWZpbmVkIHVzaW5nIGBkZWZhdWx0X2FwaTpncmVwcGVyYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIEFQSXMgYXJlIGJlaW5nIHVzZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XihzdGF0aWMgKT8oaW50fHZvaWR8c3RydWN0IGJwZl9tYXAgXFwqKSBodGFiX21hcF9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jPTQ1MD1zdGF0aWMgaW50IGFsbG9jX2V4dHJhX2VsZW1zKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy00NzMtLyogQ2FsbGVkIGZyb20gc3lzY2FsbCAqL1xua2VybmVsL2JwZi9oYXNodGFiLmM6NDc0OnN0YXRpYyBpbnQgaHRhYl9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy00NzUte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTA0CgkJCQkJCQlvdXRwdXQ6IDQ3CgkJCQkJCQl0aG91Z2h0czogMjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKlRoaW5raW5nIFRocm91Z2ggSGFzaCBUYWJsZSBBbGxvY2F0aW9uKioKClJpZ2h0LCBzbyBgaHRhYl9tYXBfYWxsb2NgIGlzIHN0YXRpYywgd2hpY2ggaXMgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgd2hlbiB0cmFja2luZyB0aGlzLiBUaGUgc2NvcGUgb2YgdGhpcyBpcyBsaW1pdGVkLCBhIGRldGFpbCB0aGF0IGlzIG9mIHNpZ25pZmljYW5jZSB0byBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGJlaW5nIGRvbmUuCgpOb3csIGxldCYjMzk7cyBwaXZvdCBhbmQgdGFrZSBhIGxvb2sgYXQgdGhlIGBodGFiX21hcF91cGRhdGVfZWxlbWAgZnVuY3Rpb24uIFVuZGVyc3RhbmRpbmcgaG93IGVsZW1lbnRzIGFyZSB1cGRhdGVkIGlzIGtleSBoZXJlLiBUaGF0IHdpbGwgaW5mb3JtIGEgZ3JlYXQgZGVhbCBhYm91dCB0aGUgb3ZlcmFsbCBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApPyhsb25nfGludHx2b2lkKSBodGFiX21hcF91cGRhdGVfZWxlbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvaGFzaHRhYi5jPTEyNTc9c3RhdGljIGludCBjaGVja19mbGFncyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmxfb2xkLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEyNzEtLyogQ2FsbGVkIGZyb20gc3lzY2FsbCBvciBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xua2VybmVsL2JwZi9oYXNodGFiLmM6MTI3MjpzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTI3My1cdFx0XHRcdCB1NjQgbWFwX2ZsYWdzKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTE0NDU9c3RhdGljIGludCBodGFiX21hcF9jaGVja191cGRhdGVfZmxhZ3MoYm9vbCBvbmFsbGNwdXMsIHU2NCBtYXBfZmxhZ3MpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMTQ1My1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjE0NTQ6c3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW1faW5fcGxhY2Uoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTQ1NS1cdFx0XHRcdFx0ICB2b2lkICp2YWx1ZSwgdTY0IG1hcF9mbGFncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMzk4NwoJCQkJCQkJb3V0cHV0OiA1MAoJCQkJCQkJdGhvdWdodHM6IDE0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgQlBGIE1hcCBPcGVyYXRpb25zIGZvciBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBCUEYgbWFwIG9wZXJhdGlvbiBpbXBsZW1lbnRhdGlvbnMuIFRoZXkmIzM5O3JlIGFsbCBkZWNsYXJlZCBhcyBgc3RhdGljYCBmdW5jdGlvbnMsIHdoaWNoIGlzIHR5cGljYWwgZm9yIGNvcmUgbG9naWMgd2l0aGluIGEga2VybmVsIG1vZHVsZSwgYnV0IHRoZXkmIzM5O3JlIHRoZSBvbmVzIGRyaXZpbmcgdGhlIGBicGZfbWFwX29wc2AuICBUaGF0JiMzOTtzIHdoZXJlIHRoZSBpbXBvcnRhbnQgc3R1ZmYgaGFwcGVucy4gVGhlIGBicGZfbWFwX29wc2Agc3RydWN0LCBpbiBwYXJ0aWN1bGFyLCBob2xkcyBwb2ludGVycyB0byB0aGVzZSBmdW5jdGlvbnMsIHdoaWNoIGlzIGtleSBmb3IgaG93IHRoZXNlIG1hcHMgYmVoYXZlLgoKTm93LCBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBhcHByb2FjaCBmb3IgZnV6emluZy4gSWYgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucyBlbmNhcHN1bGF0ZSB0aGUgY29yZSBsb2dpYywgdGhleSBzZWVtIGxpa2UgcHJpbWUgdGFyZ2V0cy4gQnV0IHdhaXQuLi50aGUgaW5zdHJ1Y3Rpb25zIGFyZSB0ZWxsaW5nIG1lIHRvIHByaW9yaXRpemUgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnRzLiBUaGF0IG1lYW5zIGF2b2lkaW5nIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zIHRoYXQgYXJlIGxpa2VseSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gVGhlc2UgaGVscGVycyB3b24mIzM5O3QgaGF2ZSB0aGVpciBvd24gZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBmb3IgZnV6emluZyB0b29scyB0byB0YXJnZXQgZWZmZWN0aXZlbHkuCgpUaGlua2luZyBhYm91dCB0aGF0LCBgaHRhYl9tYXBfdXBkYXRlX2VsZW1gIGlzbiYjMzk7dCBhbiBpbnRlcm5hbCBoZWxwZXIuIEl0JiMzOTtzIGEgY2FsbGJhY2sgZm9yIGEgbWFwIG9wZXJhdGlvbiwgc28gaXRzIGFkZHJlc3MgaXMgZGVmaW5pdGVseSB0YWtlbiBhbmQgaXQgc2hvdWxkbiYjMzk7dCBiZSBpbmxpbmVkLiBUaGF0JiMzOTtzIGEgZ29vZCBmaW5kISBJdCBzaG91bGQgYmUgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4KCkxldCBtZSB0YWtlIGEgbG9vayBhdCBgYnBmX21hcF9tZXRhX2FsbG9jYCBuZXh0IHRvIHNlZSBpZiBpdCBmb2xsb3dzIHRoaXMgcGF0dGVybi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteKHN0YXRpYyApP3N0cnVjdCBicGZfbWFwIFxcKmJwZl9tYXBfbWV0YV9hbGxvYyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbWFwX2luX21hcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC9icGYvbWFwX2luX21hcC5jPTEwPXN0YXRpYyBib29sIGJwZl9tYXBfdHlwZV9pc19odGFiKGVudW0gYnBmX21hcF90eXBlIHR5cGUpXG4tLVxua2VybmVsL2JwZi9tYXBfaW5fbWFwLmMtMTgtXG5rZXJuZWwvYnBmL21hcF9pbl9tYXAuYzoxOTpzdHJ1Y3QgYnBmX21hcCAqYnBmX21hcF9tZXRhX2FsbG9jKGludCBpbm5lcl9tYXBfdWZkKVxua2VybmVsL2JwZi9tYXBfaW5fbWFwLmMtMjAte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEwOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTk2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEhhc2ggVGFibGUgT3BlcmF0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgbmFpbCBkb3duIG91ciBrZXkgZm9jdXMgYXJlYXMuIEkgbmVlZCB0byBsaXN0IGEgc2V0IG9mIGZ1bmN0aW9ucyB0aGF0IGFyZSBjcnVjaWFsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGhhc2ggdGFibGUgaW1wbGVtZW50YXRpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gVGhpbmtpbmcgaXQgdGhyb3VnaCwgdGhlIGZ1bmN0aW9ucyB0aGF0IGp1bXAgb3V0IGF0IG1lIGFzIG1vc3QgcmVsZXZhbnQgYXJlOiBgaHRhYl9tYXBfYWxsb2NgLCBvYnZpb3VzbHk7IHRoZW4gaG93IHdlIHVwZGF0ZSBhbmQgZGVsZXRlIGVsZW1lbnRzIHdpdGggYGh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbWAsIGFuZCBgaHRhYl9tYXBfZGVsZXRlX2VsZW1gOyBhbmQsIG9mIGNvdXJzZSwgbG9va3VwcyBhbmQgaXRlcmF0aW9ucyB3aXRoIGBodGFiX21hcF9sb29rdXBfZWxlbWAgYW5kIGBodGFiX21hcF9nZXRfbmV4dF9rZXlgLiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aG9zZSBmdW5jdGlvbnMgdGhhdCBhcmUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb25zIGxpa2UgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAgYW5kIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gRmluYWxseSwgSSYjMzk7bGwgbmVlZCB0byByZW1lbWJlciBgYnBmX21hcF9tZXRhX2FsbG9jYC4KCk5vdywgYmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBgaHRhYl9tYXBfYWxsb2NgIGlzIGFjdHVhbGx5ICpkZWZpbmVkKiB3aXRoaW4gdGhpcyBjb250ZXh0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTA6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHRhYl9tYXBfYWxsb2MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL2hhc2h0YWIuYz00NTA9c3RhdGljIGludCBhbGxvY19leHRyYV9lbGVtcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtNDczLS8qIENhbGxlZCBmcm9tIHN5c2NhbGwgKi9cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjQ3NDpzdGF0aWMgaW50IGh0YWJfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL2JwZi9oYXNodGFiLmMtNDc1LXtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz01OTE9c3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTU5OS1cdCAqIFdlIG11c3Qgc2V0IHRoZSBkdG9yIHVzaW5nIHRoaXMgY2FsbGJhY2ssIGFzIG1hcCYjMzk7cyBCVEYgcmVjb3JkIGlzIG5vdFxua2VybmVsL2JwZi9oYXNodGFiLmM6NjAwOlx0ICogcG9wdWxhdGVkIGluIGh0YWJfbWFwX2FsbG9jKCksIHNvIGl0IHdpbGwgYWx3YXlzIGFwcGVhciBhcyBOVUxMLlxua2VybmVsL2JwZi9oYXNodGFiLmMtNjAxLVx0ICovXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtNjA3LVxua2VybmVsL2JwZi9oYXNodGFiLmM6NjA4OnN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy02MDkte1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI0NTY9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbWFwX29wcyA9IHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0NTctXHQubWFwX21ldGFfZXF1YWwgPSBicGZfbWFwX21ldGFfZXF1YWwsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDU4Olx0Lm1hcF9hbGxvY19jaGVjayA9IGh0YWJfbWFwX2FsbG9jX2NoZWNrLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjQ1OTpcdC5tYXBfYWxsb2MgPSBodGFiX21hcF9hbGxvYyxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0NjAtXHQubWFwX2ZyZWUgPSBodGFiX21hcF9mcmVlLFxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI0Nzg9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbHJ1X21hcF9vcHMgPSB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDc5LVx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjQ4MDpcdC5tYXBfYWxsb2NfY2hlY2sgPSBodGFiX21hcF9hbGxvY19jaGVjayxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI0ODE6XHQubWFwX2FsbG9jID0gaHRhYl9tYXBfYWxsb2MsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDgyLVx0Lm1hcF9mcmVlID0gaHRhYl9tYXBfZnJlZSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNjY2PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX3BlcmNwdV9tYXBfb3BzID0ge1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjY2Ny1cdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI2Njg6XHQubWFwX2FsbG9jX2NoZWNrID0gaHRhYl9tYXBfYWxsb2NfY2hlY2ssXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNjY5Olx0Lm1hcF9hbGxvYyA9IGh0YWJfbWFwX2FsbG9jLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjY3MC1cdC5tYXBfZnJlZSA9IGh0YWJfbWFwX2ZyZWUsXG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjY4OD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9scnVfcGVyY3B1X21hcF9vcHMgPSB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNjg5LVx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjY5MDpcdC5tYXBfYWxsb2NfY2hlY2sgPSBodGFiX21hcF9hbGxvY19jaGVjayxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI2OTE6XHQubWFwX2FsbG9jID0gaHRhYl9tYXBfYWxsb2MsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNjkyLVx0Lm1hcF9mcmVlID0gaHRhYl9tYXBfZnJlZSxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzA4LVxua2VybmVsL2JwZi9oYXNodGFiLmM6MjcwOTpzdGF0aWMgaW50IGZkX2h0YWJfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjcxMC17XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjcxMi1cdFx0cmV0dXJuIC1FSU5WQUw7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzEzOlx0cmV0dXJuIGh0YWJfbWFwX2FsbG9jX2NoZWNrKGF0dHIpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjcxNC19XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjc4MT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfb2ZfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3ODgtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzg5Olx0bWFwID0gaHRhYl9tYXBfYWxsb2MoYXR0cik7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzkwLVx0aWYgKElTX0VSUihtYXApKSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MjgzNT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9vZl9tYXBzX21hcF9vcHMgPSB7XG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyODM2Olx0Lm1hcF9hbGxvY19jaGVjayA9IGZkX2h0YWJfbWFwX2FsbG9jX2NoZWNrLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjgzNy1cdC5tYXBfYWxsb2MgPSBodGFiX29mX21hcF9hbGxvYyxcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yODkzPXN0YXRpYyBjb25zdCBzdHJ1Y3Qgcmhhc2h0YWJsZV9wYXJhbXMgcmh0YWJfcGFyYW1zX2xvbmcgPSB7XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmMtMjkwMC1cbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI5MDE6c3RhdGljIHN0cnVjdCBicGZfbWFwICpyaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTAyLXtcbi0tXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTUwLVxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk1MTpzdGF0aWMgaW50IHJodGFiX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NTIte1xuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NzAtXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyOTcxOlx0cmV0dXJuIGh0YWJfbWFwX2FsbG9jX2NoZWNrKGF0dHIpO1xua2VybmVsL2JwZi9oYXNodGFiLmMtMjk3Mi19XG4tLVxua2VybmVsL2JwZi9oYXNodGFiLmM9MzYyMT1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM2MjItXHQubWFwX21ldGFfZXF1YWwgPSBicGZfbWFwX21ldGFfZXF1YWwsXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNjIzOlx0Lm1hcF9hbGxvY19jaGVjayA9IHJodGFiX21hcF9hbGxvY19jaGVjayxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM2MjQ6XHQubWFwX2FsbG9jID0gcmh0YWJfbWFwX2FsbG9jLFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzYyNS1cdC5tYXBfZnJlZSA9IHJodGFiX21hcF9mcmVlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMDo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjc1NAoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd24gbWVudGFsIHByb2Nlc3NpbmcgYXMgYW4gZXhwZXJ0OgoKKipSZWZsZWN0aW5nIG9uIGEgQlBGIEhhc2ggTWFwIEltcGxlbWVudGF0aW9uIFBhdGNoKioKCkFscmlnaHQsIHNvIHRoaXMgcGF0Y2ggaXMgZGlnZ2luZyBpbnRvIHRoZSBCUEYgaGFzaCBtYXAgaW1wbGVtZW50YXRpb24uIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBjb3VwbGUgb2YgdGhpbmdzLiBGaXJzdCwgdGhpcyBpcyBhIGNvcmUgcGllY2Ugb2YgQlBGIGluZnJhc3RydWN0dXJlLCBtZWFuaW5nIGFueSBjaGFuZ2VzIGhlcmUgaGF2ZSB0aGUgcG90ZW50aWFsIGZvciBzaWduaWZpY2FudCBpbXBhY3Qgb24gcGVyZm9ybWFuY2UsIHN0YWJpbGl0eSwgYW5kIGV2ZW4gc2VjdXJpdHkgYWNyb3NzIGEgd2lkZSByYW5nZSBvZiBCUEYtYmFzZWQgYXBwbGljYXRpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIHRoZSBtb2RpZmljYXRpb24gZGVlcGx5LiBTZWNvbmQsIEkgbmVlZCB0byBrZWVwIHRoZSBncmVhdGVyIGNvbnRleHQgb2YgdGhlIHdob2xlIHN5c3RlbSBpbiBtaW5kLCBob3cgdGhpcyBtb2RpZmljYXRpb24gd2lsbCBhZmZlY3QgYW5kIGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4KClRoZSBtZW50aW9uIG9mIGBCUEZfU1lTQ0FMTGAgbWFrZXMgbXkgZXllYnJvd3MgcmFpc2UgYSBiaXQuIFRoaXMgbGlrZWx5IGluZGljYXRlcyB0aGF0IHRoZSBwYXRjaCBpcyB0b3VjaGluZyB0aGUgc3lzdGVtIGNhbGwgaW50ZXJmYWNlIHJlbGF0ZWQgdG8gQlBGLCB3aGljaCBpcyBhbiBhcmVhIHRoYXQmIzM5O3MgYmVlbiB1bmRlciBzY3J1dGlueS4gVGhpcyBjb3VsZCBtZWFuIGNoYW5nZXMgdG8gaG93IEJQRiBwcm9ncmFtcyBhcmUgbG9hZGVkLCB2ZXJpZmllZCwgb3IgZXhlY3V0ZWQuIEdpdmVuIHRoYXQgdGhlIGtlcm5lbCBhbmQgQlBGIHN1YnN5c3RlbSBpcyBjb25zdGFudGx5IGV2b2x2aW5nLCBJIG5lZWQgdG8ga2VlcCB0aGUgYmlnZ2VyIHBpY3R1cmUgaW4gbWluZC4KCk15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBCUEZfU1lTQ0FMTGAgaXMgYWN0dWFsbHkgZW5hYmxlZCBpbiB0aGUgY3VycmVudCBjb25maWd1cmF0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYEtjb25maWdgIGZpbGVzIGFuZCBkb3VibGUtY2hlY2sgaXRzIHN0YXR1cy4gSSBuZWVkIHRvIGtub3cgZXhhY3RseSBob3cgaXQgaXMgY29uZmlndXJlZCBhcyB0aGUgYEtjb25maWdgIGZpbGVzIHdpbGwgZ2l2ZSBtZSBpbmZvcm1hdGlvbiBhYm91dCBkZXBlbmRlbmN5IGFuZCBjb25maWd1cmF0aW9uIG9mIHRoZSBjdXJyZW50IHN5c3RlbS4gVGhpcyB3aWxsIGdpdmUgbWUgYSBjcml0aWNhbCBiYXNlbGluZSBmb3IgYXNzZXNzaW5nIHRoZSBwYXRjaCYjMzk7cyBvdmVyYWxsIGltcGFjdCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIHdpZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMDo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgQlBGX1NZU0NBTEwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9LY29uZmlnPTI1PW1lbnUgXCYjMzQ7QlBGIHN1YnN5c3RlbVwmIzM0O1xua2VybmVsL2JwZi9LY29uZmlnLTI2LVxua2VybmVsL2JwZi9LY29uZmlnOjI3OmNvbmZpZyBCUEZfU1lTQ0FMTFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnBmKCkgc3lzdGVtIGNhbGxcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjcyMzIKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6CgoqKkFkZGluZyBgQlBGX1NZU0NBTExgIHRvIEVuYWJsZUNvbmZpZ3MqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSBhZGRpbmcgYEJQRl9TWVNDQUxMYCB0byBgRW5hYmxlQ29uZmlnc2AuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgc28gZmFyLiBKdXN0IG5lZWQgdG8gaW50ZWdyYXRlIHRoYXQgZmxhZy4gTm93LCBsZXQmIzM5O3MganVzdCBtYWtlIHN1cmUgdGhpcyBhZGRpdGlvbiBkb2VzbiYjMzk7dCBjcmVhdGUgYW55IGNvbmZsaWN0cyBvciBlZGdlIGNhc2VzIEkmIzM5O20gbm90IGltbWVkaWF0ZWx5IHRoaW5raW5nIG9mLCBlc3BlY2lhbGx5IHdpdGggZXhpc3RpbmcgY29uZmlndXJhdGlvbnMuIEFsd2F5cyB3b3J0aCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBhdm9pZCB1bmV4cGVjdGVkIGJlaGF2aW9yIGRvd24gdGhlIGxpbmUuCgpOb3csIGxldCBtZSBzZWUgd2hpY2ggZmlsZXMgYXJlIGJlaW5nIHRvdWNoZWQgYnkgdGhpcyBjaGFuZ2UuIEFoYSwgbG9va3MgbGlrZSB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBrZXJuZWwvYnBmL2hhc2h0YWIuY2AgYW5kIGBrZXJuZWwvYnBmL21hcF9pbl9tYXAuY2AuIFRob3NlIGFyZSAqZGVmaW5pdGVseSogaW50ZXJlc3RpbmcgYXJlYXMuIFRob3NlIGZpbGVzIGFyZSBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19CUEZfU1lTQ0FMTGAgaXMgZW5hYmxlZCwgd2hpY2ggbWVhbnMgdGhlIGZ1bmN0aW9ucyBpbiB0aGVzZSBmaWxlcyBhcmUgb25seSBhdmFpbGFibGUgaWYgdGhlIGNvbmZpZyBpcyBzZXQuIENvbnNpZGVyaW5nIHRoZSBkYXRhIHN0cnVjdHVyZXMgYW5kIGludGVyYWN0aW9ucyB0aG9zZSBmaWxlcyBlbmFibGUsIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBjb21mb3J0YWJsZSB3aXRoIHRoYXQgY29uZGl0aW9uYWwgY29tcGlsYXRpb24uIEkgd291bGQgbGlrZSB0byBkbyBzb21lIGFkZGl0aW9uYWwgY29kZSByZXZpZXdzIHdoZW4gdGltZSBwZXJtaXRzIHRvIHByZXZlbnQgcmVncmVzc2lvbnMgYW5kIHNlY3VyaXR5IGlzc3VlcyB0aGF0IG1pZ2h0IGJlIGludHJvZHVjZWQgYnkgdGhpcyBjb25maWcgY2hhbmdlLiBJJiMzOTtsbCBuZWVkIHRvIGRvIGEgZGVlcCBkaXZlIHRoZXJlIGFzIHBhcnQgb2YgbXkgZHVlIGRpbGlnZW5jZS4gT2theSwgdGhhdCYjMzk7cyB0aGUgc2NvcGUgb2YgdGhlIGltbWVkaWF0ZSBjaGFuZ2UgdW5kZXJzdG9vZC4gTGV0JiMzOTtzIHNlZSBpZiB0aGUgYnVpbGQgc3lzdGVtIGhhbmRsZXMgdGhlIGRlcGVuZGVuY3kgY29ycmVjdGx5Li4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEwOjQ0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hhc2h0YWJcXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvYnBmL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgJiM0Mzs9IGJwZl9pdGVyLm8gbWFwX2l0ZXIubyB0YXNrX2l0ZXIubyBwcm9nX2l0ZXIubyBsaW5rX2l0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBoYXNodGFiLm8gYXJyYXltYXAubyBwZXJjcHVfZnJlZWxpc3QubyBicGZfbHJ1X2xpc3QubyBscG1fdHJpZS5vIG1hcF9pbl9tYXAubyBibG9vbV9maWx0ZXIub1xua2VybmVsL2JwZi9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICYjNDM7PSBsb2NhbF9zdG9yYWdlLm8gcXVldWVfc3RhY2tfbWFwcy5vIHJpbmdidWYubyBicGZfaW5zbl9hcnJheS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzAxIDEwOjQ0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3ODE3CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogODI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEJQRiBIYXNoIE1hcCBFbGVtZW50IFN0cnVjdHVyZSBDaGFuZ2VzKioKCk9rYXksIHNvIHdlJiMzOTtyZSBkaXZpbmcgaW50byB0aGlzIHBhdGNoLiBUaGUga2V5IGhlcmUgaXMgZGVmaW5pdGVseSBgQ09ORklHX0JQRl9TWVNDQUxMYCwgdGhhdCYjMzk7cyB0aGUgbWFpbiBlbmFibGVyLiBMZXQmIzM5O3MgZ2V0IHRoZSBmb2N1cyByaWdodC4gU2luY2UgdGhpcyBwYXRjaCBmdW5kYW1lbnRhbGx5IGNoYW5nZXMgaG93IGhhc2ggbWFwIGVsZW1lbnRzIGFyZSBzdHJ1Y3R1cmVkIGludGVybmFsbHksIHdlIG5lZWQgdG8gemVybyBpbiBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aG9zZSBlbGVtZW50cy4gVGhlIG9uZXMgdGhhdCBkbyB0aGUgYWxsb2NhdGluZywgdXBkYXRpbmcsIGxvb2tpbmcgdXAsIGFuZCBkZWxldGluZy4gVGhvc2UgYXJlIHRoZSBoaWdoLXZhbHVlIHRhcmdldHMgZm9yIGZ1enppbmcuCgpNeSBpbml0aWFsIGxpc3QgaW5jbHVkZXM6CgoqICAgYGh0YWJfbWFwX2FsbG9jYAoqICAgYGh0YWJfbWFwX3VwZGF0ZV9lbGVtYAoqICAgYGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbWAKKiAgIGBodGFiX21hcF9kZWxldGVfZWxlbWAKKiAgIGBodGFiX2xydV9tYXBfZGVsZXRlX2VsZW1gCiogICBgaHRhYl9tYXBfbG9va3VwX2VsZW1gCiogICBgaHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtYAoqICAgYGh0YWJfcGVyY3B1X21hcF9sb29rdXBfZWxlbWAKKiAgIGBodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtYAoqICAgYGh0YWJfbWFwX2dldF9uZXh0X2tleWAKKiAgIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gCiogICBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGAKKiAgIGBicGZfbWFwX21ldGFfYWxsb2NgCiogICBgYnBmX2h0YWJfbWFwX21ldGFfaW5pdGAKCldhaXQgYSBzZWNvbmQsIGBodGFiX21hcF9hbGxvY2AgaXMgc3RhdGljLCByaWdodD8gQnV0IGl0JiMzOTtzIHBhcnQgb2YgdGhlIG1hcCBvcGVyYXRpb25zIGNhbGxiYWNrIHN0cnVjdHVyZS4gVGhhdCBtZWFucyB0aGUgY29tcGlsZXIgd29uJiMzOTt0IG5lY2Vzc2FyaWx5IGlubGluZSBpdCwgYW5kIHdlICpjYW4qIHRhcmdldCBpdCwgYW5kIHRoZSBzYW1lIGdvZXMgZm9yIG90aGVyIHN0YXRpYyBmdW5jdGlvbnMgd2hpY2ggYXJlIGFzc2lnbmVkIGFzIGBicGZfbWFwX29wc2AgY2FsbGJhY2tzLiBQZXJmZWN0LiBHb29kIGNhdGNoLiBMZXQmIzM5O3MgcmVmaW5lIHRoZSBsaXN0LiBTbywgaW5jbHVkaW5nIHRob3NlLCBsZXQmIzM5O3MgYWxzbyBhZGQgYGJwZl9odGFiX21hcF9tZXRhX2luaXRgIGFuZCBgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZWAgc2luY2UgdGhleSYjMzk7cmUgbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMuCgpKdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0JiMzOTtzIHZlcmlmeSB0aG9zZSBmdW5jdGlvbiBuYW1lcyBvbmUgbGFzdCB0aW1lOgoKKiAgIGBodGFiX21hcF9hbGxvY2AKKiAgIGBodGFiX21hcF91cGRhdGVfZWxlbWAKKiAgIGBodGFiX2xydV9tYXBfdXBkYXRlX2VsZW1gCiogICBgaHRhYl9tYXBfZGVsZXRlX2VsZW1gCiogICBgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtYAoqICAgYGh0YWJfbWFwX2xvb2t1cF9lbGVtYAoqICAgYGh0YWJfbHJ1X21hcF9sb29rdXBfZWxlbWAKKiAgIGBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW1gCiogICBgaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfZWxlbWAKKiAgIGBodGFiX21hcF9nZXRfbmV4dF9rZXlgCiogICBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYAoqICAgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgCiogICBgYnBmX21hcF9tZXRhX2FsbG9jYAoqICAgYGJwZl9odGFiX21hcF9tZXRhX2luaXRgCiogICBgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZWAKCkFscmlnaHQuIENvbmZpZ3VyYXRpb24td2lzZSwgaXQmIzM5O3MganVzdCBgQlBGX1NZU0NBTExgLCBnb29kLgoKTm93LCB0aGUgcmVhc29uaW5nOiBUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCBvcHRpbWl6aW5nIGhhc2ggbWFwIGVsZW1lbnQgbWVtb3J5IGxheW91dC4gU3BlY2lmaWNhbGx5LCBjb25kaXRpb25hbGx5IHJlbW92aW5nIHRoZSBoYXNoIHZhbHVlIGZpZWxkIGJhc2VkIG9uIHRoZSBrZXkgc2l6ZSBhbmQgdGhlIG1hcCB0eXBlLiBJdOKAmXMgYWxzbyBpbnRyb2R1Y2luZyBga2V5X29mZnNldGAgZm9yIGR5bmFtaWMga2V5L3ZhbHVlIG9mZnNldCBjYWxjdWxhdGlvbnMuIFRoaXMgY2hhbmdlIGlzIGNvcmUgdG8gdGhlIEJQRiBoYXNoIG1hcCBpbXBsZW1lbnRhdGlvbi4gVGhlcmVmb3JlLCBmdXp6aW5nIGlzIGNyaXRpY2FsIHRvIGV4cG9zZSBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0aWVzIG9yIGxvZ2ljYWwgZXJyb3JzIHJlc3VsdGluZyBmcm9tIHRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UuIE5lZWQgdG8gY2hlY2sgYGJwZl9odGFiX21hcF9tZXRhX2luaXRgIGFuZCBgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZWAgdG9vLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDticGZfaHRhYl9tYXBfbWV0YV9pbml0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oYXNodGFiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7a2VybmVsL2JwZi9oYXNodGFiLmM9MzY0Mz1zaXplX3QgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSh2b2lkKVxuLS1cbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM2NDctXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNjQ4OnZvaWQgYnBmX2h0YWJfbWFwX21ldGFfaW5pdChzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwX21ldGEsIHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXApXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0zNjQ5LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDEgMTA6NDQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk2NTYKCQkJCQkJCW91dHB1dDogMzM0CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGVjdXRpbmcgdGhlIFByb2NlZHVyZSoqCgpPa2F5LCB0aGUgcHJlbGltaW5hcnkgY2hlY2tzIGFsbCBzZWVtIHNvdW5kLiBUaGUgaW50ZXJuYWwgc3RhdGUgYXBwZWFycyBhcyBleHBlY3RlZCwgYW5kIHRoZSBpbnB1dCBkYXRhIHZhbGlkYXRlcyBhZ2FpbnN0IG15IGtub3duIGNvbnN0cmFpbnRzLiBObyByZWQgZmxhZ3MgYXJlIHdhdmluZy4gSSYjMzk7bSBzYXRpc2ZpZWQgdGhhdCBwcm9jZWVkaW5nIHdpdGggdGhlIGNvcmUgZXhlY3V0aW9uIGlzIHdhcnJhbnRlZC4KClRoZXJlZm9yZSwgdGhlIG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4gVGhpcyBmdW5jdGlvbiBlbmNhcHN1bGF0ZXMgdGhlIGZpbmFsIHN0YWdlIG9mIHRoaXMgcHJvY2VzcyAtIHRoZSBkZWZpbml0aXZlIGFjdGlvbiB3aGljaCBjb25maXJtcyB0aGUgcHJvY2VzcyBleGVjdXRpb24gaXMgY29tcGxldGUuIEkmIzM5O20gY29uZmlkZW50IHRoYXQgaW52b2tpbmcgYHNldC1yZXN1bHRzYCBhdCB0aGlzIGp1bmN0dXJlIHdpbGwgeWllbGQgdGhlIGNvcnJlY3QgYW5kIGRlc2lyZWQgb3V0cHV0LCBlZmZlY3RpdmVseSBjb21wbGV0aW5nIHRoaXMgcGFydGljdWxhciBwcm9jZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wMSAxMDo0NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QlBGX1NZU0NBTEwmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtodGFiX21hcF9hbGxvYyYjMzQ7LAogICAgJiMzNDtodGFiX21hcF91cGRhdGVfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9tYXBfdXBkYXRlX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2xvb2t1cF9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X21hcF9sb29rdXBfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9nZXRfbmV4dF9rZXkmIzM0OywKICAgICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtJiMzNDssCiAgICAmIzM0O19faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2gmIzM0OywKICAgICYjMzQ7YnBmX21hcF9tZXRhX2FsbG9jJiMzNDssCiAgICAmIzM0O2JwZl9odGFiX21hcF9tZXRhX2luaXQmIzM0OywKICAgICYjMzQ7YnBmX2h0YWJfbWFwX21ldGFfc2l6ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBvcHRpbWl6ZXMgdGhlIG1lbW9yeSBsYXlvdXQgb2YgQlBGIGhhc2ggbWFwIGVsZW1lbnRzIGJ5IGNvbmRpdGlvbmFsbHkgcmVtb3ZpbmcgdGhlIGhhc2ggdmFsdWUgZmllbGQgd2hlbiBpdCYjMzk7cyBub3QgbmVlZGVkLiBJdCBpbnRyb2R1Y2VzIGBrZXlfb2Zmc2V0YCB0byBkeW5hbWljYWxseSBjb21wdXRlIHRoZSBvZmZzZXQgb2YgdGhlIGtleSBhbmQgdmFsdWUgd2l0aGluIHRoZSBlbGVtZW50LiBJdCBhbHNvIG1vZGlmaWVzIGBtYXBfaW5fbWFwLmNgIHRvIHByb3BhZ2F0ZSB0aGlzIG9mZnNldCBmb3IgaW5uZXIgbWFwcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIEJQRiBoYXNoIG1hcCBpbXBsZW1lbnRhdGlvbiBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gbWVtb3J5IGNvcnJ1cHRpb24gb3IgbG9naWMgZXJyb3JzIGFyZSBpbnRyb2R1Y2VkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtCUEZfU1lTQ0FMTCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h0YWJfbWFwX2FsbG9jJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX3VwZGF0ZV9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbHJ1X21hcF91cGRhdGVfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX21hcF9kZWxldGVfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9tYXBfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9tYXBfbG9va3VwX2VsZW0mIzM0OywKICAgICYjMzQ7aHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfcGVyY3B1X21hcF9sb29rdXBfZWxlbSYjMzQ7LAogICAgJiMzNDtodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtJiMzNDssCiAgICAmIzM0O2h0YWJfbWFwX2dldF9uZXh0X2tleSYjMzQ7LAogICAgJiMzNDtfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0mIzM0OywKICAgICYjMzQ7X19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaCYjMzQ7LAogICAgJiMzNDticGZfbWFwX21ldGFfYWxsb2MmIzM0OywKICAgICYjMzQ7YnBmX2h0YWJfbWFwX21ldGFfaW5pdCYjMzQ7LAogICAgJiMzNDticGZfaHRhYl9tYXBfbWV0YV9zaXplJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9wdGltaXplcyB0aGUgbWVtb3J5IGxheW91dCBvZiBCUEYgaGFzaCBtYXAgZWxlbWVudHMgYnkgY29uZGl0aW9uYWxseSByZW1vdmluZyB0aGUgaGFzaCB2YWx1ZSBmaWVsZCB3aGVuIGl0JiMzOTtzIG5vdCBuZWVkZWQuIEl0IGludHJvZHVjZXMgYGtleV9vZmZzZXRgIHRvIGR5bmFtaWNhbGx5IGNvbXB1dGUgdGhlIG9mZnNldCBvZiB0aGUga2V5IGFuZCB2YWx1ZSB3aXRoaW4gdGhlIGVsZW1lbnQuIEl0IGFsc28gbW9kaWZpZXMgYG1hcF9pbl9tYXAuY2AgdG8gcHJvcGFnYXRlIHRoaXMgb2Zmc2V0IGZvciBpbm5lciBtYXBzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIGhhc2ggbWFwIGltcGxlbWVudGF0aW9uIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgYXJlIGludHJvZHVjZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMDo0MzozMi41MzEyMTkyOTZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODYwMzIzNDMzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh0YWJfbWFwX2FsbG9jXCIsXG4gICAgXCJodGFiX21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtXCIsXG4gICAgXCJodGFiX21hcF9kZWxldGVfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtXCIsXG4gICAgXCJodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW1cIixcbiAgICBcImh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW1cIixcbiAgICBcImh0YWJfbWFwX2dldF9uZXh0X2tleVwiLFxuICAgIFwiX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJicGZfbWFwX21ldGFfYWxsb2NcIixcbiAgICBcImJwZl9odGFiX21hcF9tZXRhX2luaXRcIixcbiAgICBcImJwZl9odGFiX21hcF9tZXRhX3NpemVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgdGhlIG1lbW9yeSBsYXlvdXQgb2YgQlBGIGhhc2ggbWFwIGVsZW1lbnRzIGJ5IGNvbmRpdGlvbmFsbHkgcmVtb3ZpbmcgdGhlIGhhc2ggdmFsdWUgZmllbGQgd2hlbiBpdCdzIG5vdCBuZWVkZWQuIEl0IGludHJvZHVjZXMgYGtleV9vZmZzZXRgIHRvIGR5bmFtaWNhbGx5IGNvbXB1dGUgdGhlIG9mZnNldCBvZiB0aGUga2V5IGFuZCB2YWx1ZSB3aXRoaW4gdGhlIGVsZW1lbnQuIEl0IGFsc28gbW9kaWZpZXMgYG1hcF9pbl9tYXAuY2AgdG8gcHJvcGFnYXRlIHRoaXMgb2Zmc2V0IGZvciBpbm5lciBtYXBzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIGhhc2ggbWFwIGltcGxlbWVudGF0aW9uIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEwOjQzOjMyLjUzMTIyNTc4NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4ODI5MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMWI3Y2I2NjdmZjI3MDRiNmI5ODU4ZjlkNmIzMDFhNTU0ZWYyZWIwM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEF1ZyAxIDEwOjQzOjMxIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvaGFzaHRhYi5jIGIva2VybmVsL2JwZi9oYXNodGFiLmNcXG5pbmRleCA5ZjM5NGUxYWEyZTg1Li44MmIxOWJkNTQzMTA5IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXFxuKysrIGIva2VybmVsL2JwZi9oYXNodGFiLmNcXG5AQCAtMTAwLDEzICsxMDAsMTYgQEAgc3RydWN0IGJwZl9odGFiIHtcXG4gXFx0c3RydWN0IHBlcmNwdV9jb3VudGVyIHBjb3VudDtcXG4gXFx0YXRvbWljX3QgY291bnQ7XFxuIFxcdGJvb2wgdXNlX3BlcmNwdV9jb3VudGVyO1xcbitcXHRib29sIGhhc19oYXNoO1xcbiBcXHR1MzIgbl9idWNrZXRzO1xcdC8qIG51bWJlciBvZiBoYXNoIGJ1Y2tldHMgKi9cXG4gXFx0dTMyIGVsZW1fc2l6ZTtcXHQvKiBzaXplIG9mIGVhY2ggZWxlbWVudCBpbiBieXRlcyAqL1xcbitcXHR1MzIga2V5X29mZnNldDtcXHQvKiBvZmZzZXQgb2Yga2V5IGluIGJ5dGVzICovXFxuIFxcdHUzMiBoYXNocm5kO1xcbiB9O1xcbiBcXG4gLyogZWFjaCBodGFiIGVsZW1lbnQgaXMgc3RydWN0IGh0YWJfZWxlbSArIGtleSArIHZhbHVlICovXFxuLXN0cnVjdCBodGFiX2VsZW0ge1xcbitzdHJ1Y3QgaHRhYl9lbGVtO1xcbitzdHJ1Y3QgaHRhYl9ub2RlIHtcXG4gXFx0dW5pb24ge1xcbiBcXHRcXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSBoYXNoX25vZGU7XFxuIFxcdFxcdHN0cnVjdCB7XFxuQEAgLTExNywxOCArMTIwLDMyIEBAIHN0cnVjdCBodGFiX2VsZW0ge1xcbiBcXHRcXHRcXHR9O1xcbiBcXHRcXHR9O1xcbiBcXHR9O1xcbi1cXHR1bmlvbiB7XFxuLVxcdFxcdC8qIHBvaW50ZXIgdG8gcGVyLWNwdSBwb2ludGVyICovXFxuLVxcdFxcdHZvaWQgKnB0cl90b19wcHRyO1xcbi1cXHRcXHRzdHJ1Y3QgYnBmX2xydV9ub2RlIGxydV9ub2RlO1xcbi1cXHR9O1xcbi1cXHR1MzIgaGFzaDtcXG4tXFx0Y2hhciBrZXlbXSBfX2FsaWduZWQoOCk7XFxuK307XFxuK1xcbitzdHJ1Y3QgaHRhYl9lbGVtIHtcXG4rXFx0c3RydWN0IGh0YWJfbm9kZSBub2RlO1xcbitcXHR1OCBkYXRhW10gX19hbGlnbmVkKDgpO1xcbit9O1xcbitcXG4rc3RydWN0IGh0YWJfZWxlbV9scnUge1xcbitcXHRzdHJ1Y3QgaHRhYl9ub2RlIG5vZGU7XFxuK1xcdHN0cnVjdCBicGZfbHJ1X25vZGUgbHJ1X25vZGU7XFxuK1xcdHU4IGRhdGFbXSBfX2FsaWduZWQoOCk7XFxuK307XFxuK1xcbisvKiBPbmx5IGZvciBub24tcHJlYWxsb2NhdGVkIFBDUFUgbWFwcy4gUHJlYWxsb2NhdGVkIFBDUFUgbWFwcyBkb24ndCBuZWVkXFxuKyAqIHB0cl90b19wcHRyLCBhbmQgdXNlIGh0YWJfZWxlbS5cXG4rICovXFxuK3N0cnVjdCBodGFiX2VsZW1fcGNwdSB7XFxuK1xcdHN0cnVjdCBodGFiX25vZGUgbm9kZTtcXG4rXFx0dm9pZCAqcHRyX3RvX3BwdHI7XFxuK1xcdHU4IGRhdGFbXSBfX2FsaWduZWQoOCk7XFxuIH07XFxuIFxcbiBzdHJ1Y3QgaHRhYl9idGZfcmVjb3JkIHtcXG4gXFx0c3RydWN0IGJ0Zl9yZWNvcmQgKnJlY29yZDtcXG4gXFx0dTMyIGtleV9zaXplO1xcbitcXHR1MzIga2V5X29mZnNldDtcXG4gfTtcXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBodGFiX2lzX3ByZWFsbG9jKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG5AQCAtMTM2LDYgKzE1MywyMSBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaHRhYl9pc19wcmVhbGxvYyhjb25zdCBzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuIFxcdHJldHVybiAhKGh0YWItXFx1MDAzZW1hcC5tYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9OT19QUkVBTExPQyk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IGJwZl9scnVfbm9kZSAqaHRhYl9lbGVtX2xydV9ub2RlKHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuK3tcXG4rXFx0cmV0dXJuIFxcdTAwMjYoKHN0cnVjdCBodGFiX2VsZW1fbHJ1ICopbCktXFx1MDAzZWxydV9ub2RlO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV9nZXRfcHRyX3RvX3BwdHIoc3RydWN0IGh0YWJfZWxlbSAqbClcXG4re1xcbitcXHRyZXR1cm4gKChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS1cXHUwMDNlcHRyX3RvX3BwdHI7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBodGFiX2VsZW1fc2V0X3B0cl90b19wcHRyKHN0cnVjdCBodGFiX2VsZW0gKmwsIHZvaWQgKnB0cilcXG4re1xcbitcXHQoKHN0cnVjdCBodGFiX2VsZW1fcGNwdSAqKWwpLVxcdTAwM2VwdHJfdG9fcHB0ciA9IHB0cjtcXG4rfVxcbitcXG4gc3RhdGljIHZvaWQgaHRhYl9pbml0X2J1Y2tldHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxcbiB7XFxuIFxcdHVuc2lnbmVkIGludCBpO1xcbkBAIC0xODMsMjUgKzIxNSwzMCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNfZmRfaHRhYihjb25zdCBzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuIFxcdHJldHVybiBodGFiLVxcdTAwM2VtYXAubWFwX3R5cGUgPT0gQlBGX01BUF9UWVBFX0hBU0hfT0ZfTUFQUztcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkICpodGFiX2VsZW1fdmFsdWUoc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGtleV9zaXplKVxcbitzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV9rZXkoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxcbit7XFxuK1xcdHJldHVybiAodm9pZCAqKWwgKyBodGFiLVxcdTAwM2VrZXlfb2Zmc2V0O1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV92YWx1ZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuIHtcXG4tXFx0cmV0dXJuIGwtXFx1MDAzZWtleSArIHJvdW5kX3VwKGtleV9zaXplLCA4KTtcXG4rXFx0cmV0dXJuIGh0YWJfZWxlbV9rZXkoaHRhYiwgbCkgKyByb3VuZF91cChodGFiLVxcdTAwM2VtYXAua2V5X3NpemUsIDgpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9wdHIoc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGtleV9zaXplLFxcbitzdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9wdHIoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsLFxcbiBcXHRcXHRcXHRcXHQgICAgIHZvaWQgX19wZXJjcHUgKnBwdHIpXFxuIHtcXG4tXFx0Kih2b2lkIF9fcGVyY3B1ICoqKWh0YWJfZWxlbV92YWx1ZShsLCBrZXlfc2l6ZSkgPSBwcHRyO1xcbitcXHQqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpID0gcHB0cjtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSB2b2lkIF9fcGVyY3B1ICpodGFiX2VsZW1fZ2V0X3B0cihzdHJ1Y3QgaHRhYl9lbGVtICpsLCB1MzIga2V5X3NpemUpXFxuK3N0YXRpYyBpbmxpbmUgdm9pZCBfX3BlcmNwdSAqaHRhYl9lbGVtX2dldF9wdHIoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxcbiB7XFxuLVxcdHJldHVybiAqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGwsIGtleV9zaXplKTtcXG4rXFx0cmV0dXJuICoodm9pZCBfX3BlcmNwdSAqKilodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkICpmZF9odGFiX21hcF9nZXRfcHRyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuK3N0YXRpYyB2b2lkICpmZF9odGFiX21hcF9nZXRfcHRyKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcXG4ge1xcbi1cXHRyZXR1cm4gKih2b2lkICoqKWh0YWJfZWxlbV92YWx1ZShsLCBtYXAtXFx1MDAzZWtleV9zaXplKTtcXG4rXFx0cmV0dXJuICoodm9pZCAqKilodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpnZXRfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgaW50IGkpXFxuQEAgLTIwOSw2ICsyNDYsMzMgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmdldF9odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCBpbnQgaSlcXG4gXFx0cmV0dXJuIChzdHJ1Y3QgaHRhYl9lbGVtICopIChodGFiLVxcdTAwM2VlbGVtcyArIGkgKiAodTY0KWh0YWItXFx1MDAzZWVsZW1fc2l6ZSk7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBodGFiX2hhc19oYXNoKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4re1xcbitcXHRyZXR1cm4gaHRhYi1cXHUwMDNlaGFzX2hhc2g7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgdTMyIGh0YWJfZWxlbV9oYXNoKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcXG4re1xcbitcXHRpZiAoaHRhYl9pc19scnUoaHRhYikpXFxuK1xcdFxcdHJldHVybiAqKHUzMiAqKSgoc3RydWN0IGh0YWJfZWxlbV9scnUgKilsKS1cXHUwMDNlZGF0YTtcXG4rXFx0ZWxzZSBpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikgXFx1MDAyNlxcdTAwMjYgIWh0YWJfaXNfcHJlYWxsb2MoaHRhYikpXFxuK1xcdFxcdHJldHVybiAqKHUzMiAqKSgoc3RydWN0IGh0YWJfZWxlbV9wY3B1ICopbCktXFx1MDAzZWRhdGE7XFxuK1xcdGVsc2VcXG4rXFx0XFx0cmV0dXJuICoodTMyICopbC1cXHUwMDNlZGF0YTtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfaGFzaChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwsIHUzMiBoYXNoKVxcbit7XFxuK1xcdGlmICghaHRhYl9oYXNfaGFzaChodGFiKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRpZiAoaHRhYl9pc19scnUoaHRhYikpXFxuK1xcdFxcdCoodTMyICopKChzdHJ1Y3QgaHRhYl9lbGVtX2xydSAqKWwpLVxcdTAwM2VkYXRhID0gaGFzaDtcXG4rXFx0ZWxzZSBpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikgXFx1MDAyNlxcdTAwMjYgIWh0YWJfaXNfcHJlYWxsb2MoaHRhYikpXFxuK1xcdFxcdCoodTMyICopKChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS1cXHUwMDNlZGF0YSA9IGhhc2g7XFxuK1xcdGVsc2VcXG4rXFx0XFx0Kih1MzIgKilsLVxcdTAwM2VkYXRhID0gaGFzaDtcXG4rfVxcbitcXG4gLyogQm90aCBwZXJjcHUgYW5kIGZkIGh0YWIgc3VwcG9ydCBpbi1wbGFjZSB1cGRhdGUsIHNvIG5vIG5lZWQgZm9yXFxuICAqIGV4dHJhIGVsZW0uIExSVSBpdHNlbGYgY2FuIHJlbW92ZSB0aGUgbGVhc3QgdXNlZCBlbGVtZW50LCBzb1xcbiAgKiB0aGVyZSBpcyBubyBuZWVkIGZvciBhbiBleHRyYSBlbGVtIGR1cmluZyBtYXBfdXBkYXRlLlxcbkBAIC0yMzEsNyArMjk1LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuIFxcbiBcXHRcXHRlbGVtID0gZ2V0X2h0YWJfZWxlbShodGFiLCBpKTtcXG4gXFx0XFx0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xcbitcXHRcXHRcXHRcXHRcXHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgZWxlbSkpO1xcbiBcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFx0fVxcbiB9XFxuQEAgLTI1NCw3ICszMTgsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2ZyZWVfcHJlYWxsb2NlZF9maWVsZHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxcbiBcXG4gXFx0XFx0ZWxlbSA9IGdldF9odGFiX2VsZW0oaHRhYiwgaSk7XFxuIFxcdFxcdGlmIChodGFiX2lzX3BlcmNwdShodGFiKSkge1xcbi1cXHRcXHRcXHR2b2lkIF9fcGVyY3B1ICpwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZWxlbSwgaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplKTtcXG4rXFx0XFx0XFx0dm9pZCBfX3BlcmNwdSAqcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGVsZW0pO1xcbiBcXHRcXHRcXHRpbnQgY3B1O1xcbiBcXG4gXFx0XFx0XFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbkBAIC0yNjMsNyArMzI3LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4gXFx0XFx0XFx0fVxcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHRicGZfb2JqX2ZyZWVfZmllbGRzKGh0YWItXFx1MDAzZW1hcC5yZWNvcmQsXFxuLVxcdFxcdFxcdFxcdFxcdCAgICBodGFiX2VsZW1fdmFsdWUoZWxlbSwgaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplKSk7XFxuK1xcdFxcdFxcdFxcdFxcdCAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgZWxlbSkpO1xcbiBcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG5AQCAtMjgwLDggKzM0NCw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZnJlZV9lbGVtcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBodGFiLVxcdTAwM2VtYXAubWF4X2VudHJpZXM7IGkrKykge1xcbiBcXHRcXHR2b2lkIF9fcGVyY3B1ICpwcHRyO1xcbiBcXG4tXFx0XFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGdldF9odGFiX2VsZW0oaHRhYiwgaSksXFxuLVxcdFxcdFxcdFxcdFxcdCBodGFiLVxcdTAwM2VtYXAua2V5X3NpemUpO1xcbitcXHRcXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgZ2V0X2h0YWJfZWxlbShodGFiLCBpKSk7XFxuIFxcdFxcdGZyZWVfcGVyY3B1KHBwdHIpO1xcbiBcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gXFx0fVxcbkBAIC0zMDgsOCArMzcxLDggQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKnByZWFsbG9jX2xydV9wb3Aoc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksXFxuIFxcbiBcXHRpZiAobm9kZSkge1xcbiBcXHRcXHRicGZfbWFwX2luY19lbGVtX2NvdW50KFxcdTAwMjZodGFiLVxcdTAwM2VtYXApO1xcbi1cXHRcXHRsID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKTtcXG4tXFx0XFx0bWVtY3B5KGwtXFx1MDAzZWtleSwga2V5LCBodGFiLVxcdTAwM2VtYXAua2V5X3NpemUpO1xcbitcXHRcXHRsID0gKHN0cnVjdCBodGFiX2VsZW0gKiljb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKTtcXG4rXFx0XFx0bWVtY3B5KGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleSwgaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplKTtcXG4gXFx0XFx0cmV0dXJuIGw7XFxuIFxcdH1cXG4gXFxuQEAgLTM0MCw4ICs0MDMsNyBAQCBzdGF0aWMgaW50IHByZWFsbG9jX2luaXQoc3RydWN0IGJwZl9odGFiICpodGFiKVxcbiBcXHRcXHRcXHRcXHRcXHQgICAgR0ZQX1VTRVIgfCBfX0dGUF9OT1dBUk4pO1xcbiBcXHRcXHRpZiAoIXBwdHIpXFxuIFxcdFxcdFxcdGdvdG8gZnJlZV9lbGVtcztcXG4tXFx0XFx0aHRhYl9lbGVtX3NldF9wdHIoZ2V0X2h0YWJfZWxlbShodGFiLCBpKSwgaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplLFxcbi1cXHRcXHRcXHRcXHQgIHBwdHIpO1xcbitcXHRcXHRodGFiX2VsZW1fc2V0X3B0cihodGFiLCBnZXRfaHRhYl9lbGVtKGh0YWIsIGkpLCBwcHRyKTtcXG4gXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuIFxcdH1cXG4gXFxuQEAgLTM0OSw4ICs0MTEsOCBAQCBzdGF0aWMgaW50IHByZWFsbG9jX2luaXQoc3RydWN0IGJwZl9odGFiICpodGFiKVxcbiBcXHRpZiAoaHRhYl9pc19scnUoaHRhYikpXFxuIFxcdFxcdGVyciA9IGJwZl9scnVfaW5pdChcXHUwMDI2aHRhYi1cXHUwMDNlbHJ1LFxcbiBcXHRcXHRcXHRcXHQgICBodGFiLVxcdTAwM2VtYXAubWFwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfTk9fQ09NTU9OX0xSVSxcXG4tXFx0XFx0XFx0XFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgaGFzaCkgLVxcbi1cXHRcXHRcXHRcXHQgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBscnVfbm9kZSksXFxuK1xcdFxcdFxcdFxcdCAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBkYXRhKSAtXFxuK1xcdFxcdFxcdFxcdCAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSksXFxuIFxcdFxcdFxcdFxcdCAgIGh0YWJfbHJ1X21hcF9kZWxldGVfbm9kZSxcXG4gXFx0XFx0XFx0XFx0ICAgaHRhYik7XFxuIFxcdGVsc2VcXG5AQCAtMzYxLDExICs0MjMsMTEgQEAgc3RhdGljIGludCBwcmVhbGxvY19pbml0KHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4gXFxuIFxcdGlmIChodGFiX2lzX2xydShodGFiKSlcXG4gXFx0XFx0YnBmX2xydV9wb3B1bGF0ZShcXHUwMDI2aHRhYi1cXHUwMDNlbHJ1LCBodGFiLVxcdTAwM2VlbGVtcyxcXG4tXFx0XFx0XFx0XFx0IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSxcXG4rXFx0XFx0XFx0XFx0IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSksXFxuIFxcdFxcdFxcdFxcdCBodGFiLVxcdTAwM2VlbGVtX3NpemUsIG51bV9lbnRyaWVzKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRwY3B1X2ZyZWVsaXN0X3BvcHVsYXRlKFxcdTAwMjZodGFiLVxcdTAwM2VmcmVlbGlzdCxcXG4tXFx0XFx0XFx0XFx0ICAgICAgIGh0YWItXFx1MDAzZWVsZW1zICsgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgZm5vZGUpLFxcbitcXHRcXHRcXHRcXHQgICAgICAgaHRhYi1cXHUwMDNlZWxlbXMgKyBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBub2RlLmZub2RlKSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGh0YWItXFx1MDAzZWVsZW1fc2l6ZSwgbnVtX2VudHJpZXMpO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTQwMSw3ICs0NjMsNyBAQCBzdGF0aWMgaW50IGFsbG9jX2V4dHJhX2VsZW1zKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4gXFx0XFx0LyogcG9wIHdpbGwgc3VjY2VlZCwgc2luY2UgcHJlYWxsb2NfaW5pdCgpXFxuIFxcdFxcdCAqIHByZWFsbG9jYXRlZCBleHRyYSBudW1fcG9zc2libGVfY3B1cyBlbGVtZW50c1xcbiBcXHRcXHQgKi9cXG4tXFx0XFx0bF9uZXcgPSBjb250YWluZXJfb2YobCwgc3RydWN0IGh0YWJfZWxlbSwgZm5vZGUpO1xcbitcXHRcXHRsX25ldyA9IGNvbnRhaW5lcl9vZihsLCBzdHJ1Y3QgaHRhYl9lbGVtLCBub2RlLmZub2RlKTtcXG4gXFx0XFx0KnBlcl9jcHVfcHRyKHBwdHIsIGNwdSkgPSBsX25ldztcXG4gXFx0fVxcbiBcXHRodGFiLVxcdTAwM2VleHRyYV9lbGVtcyA9IHBwdHI7XFxuQEAgLTQyNSw4ICs0ODcsOCBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbiBcXHRib29sIHplcm9fc2VlZCA9IChhdHRyLVxcdTAwM2VtYXBfZmxhZ3MgXFx1MDAyNiBCUEZfRl9aRVJPX1NFRUQpO1xcbiBcXHRpbnQgbnVtYV9ub2RlID0gYnBmX21hcF9hdHRyX251bWFfbm9kZShhdHRyKTtcXG4gXFxuLVxcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZS5uZXh0KSAhPVxcbi1cXHRcXHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGhhc2hfbm9kZS5wcHJldikpO1xcbitcXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGh0YWJfbm9kZSwgZm5vZGUubmV4dCkgIT1cXG4rXFx0XFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9ub2RlLCBoYXNoX25vZGUucHByZXYpKTtcXG4gXFxuIFxcdGlmICh6ZXJvX3NlZWQgXFx1MDAyNlxcdTAwMjYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpXFxuIFxcdFxcdC8qIEd1YXJkIGFnYWluc3QgbG9jYWwgRG9TLCBhbmQgZGlzY291cmFnZSBwcm9kdWN0aW9uIHVzZS4gKi9cXG5AQCAtNDc2LDcgKzUzOCw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfbWVtX2R0b3Iodm9pZCAqb2JqLCB2b2lkICpjdHgpXFxuIFxcdGlmIChJU19FUlJfT1JfTlVMTChocmVjLVxcdTAwM2VyZWNvcmQpKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcbi1cXHRtYXBfdmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoZWxlbSwgaHJlYy1cXHUwMDNla2V5X3NpemUpO1xcbitcXHRtYXBfdmFsdWUgPSAodm9pZCAqKWVsZW0gKyBocmVjLVxcdTAwM2VrZXlfb2Zmc2V0ICsgcm91bmRfdXAoaHJlYy1cXHUwMDNla2V5X3NpemUsIDgpO1xcbiBcXHRicGZfb2JqX2ZyZWVfZmllbGRzKGhyZWMtXFx1MDAzZXJlY29yZCwgbWFwX3ZhbHVlKTtcXG4gfVxcbiBcXG5AQCAtNTAyLDcgKzU2NCw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZHRvcl9jdHhfZnJlZSh2b2lkICpjdHgpXFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgYnBmX21hX3NldF9kdG9yKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSxcXG4tXFx0XFx0XFx0ICAgdm9pZCAoKmR0b3IpKHZvaWQgKiwgdm9pZCAqKSlcXG4rXFx0XFx0XFx0ICAgdm9pZCAoKmR0b3IpKHZvaWQgKiwgdm9pZCAqKSwgdTMyIGtleV9vZmZzZXQpXFxuIHtcXG4gXFx0c3RydWN0IGh0YWJfYnRmX3JlY29yZCAqaHJlYztcXG4gXFx0aW50IGVycjtcXG5AQCAtNTE1LDYgKzU3Nyw3IEBAIHN0YXRpYyBpbnQgYnBmX21hX3NldF9kdG9yKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSxcXG4gXFx0aWYgKCFocmVjKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFx0aHJlYy1cXHUwMDNla2V5X3NpemUgPSBtYXAtXFx1MDAzZWtleV9zaXplO1xcbitcXHRocmVjLVxcdTAwM2VrZXlfb2Zmc2V0ID0ga2V5X29mZnNldDtcXG4gXFx0aHJlYy1cXHUwMDNlcmVjb3JkID0gYnRmX3JlY29yZF9kdXAobWFwLVxcdTAwM2VyZWNvcmQpO1xcbiBcXHRpZiAoSVNfRVJSKGhyZWMtXFx1MDAzZXJlY29yZCkpIHtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUihocmVjLVxcdTAwM2VyZWNvcmQpO1xcbkBAIC01MzcsOSArNjAwLDkgQEAgc3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbiBcXHQgKiBwb3B1bGF0ZWQgaW4gaHRhYl9tYXBfYWxsb2MoKSwgc28gaXQgd2lsbCBhbHdheXMgYXBwZWFyIGFzIE5VTEwuXFxuIFxcdCAqL1xcbiBcXHRpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikpXFxuLVxcdFxcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcXHUwMDI2aHRhYi1cXHUwMDNlcGNwdV9tYSwgaHRhYl9wY3B1X21lbV9kdG9yKTtcXG4rXFx0XFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFxcdTAwMjZodGFiLVxcdTAwM2VwY3B1X21hLCBodGFiX3BjcHVfbWVtX2R0b3IsIGh0YWItXFx1MDAzZWtleV9vZmZzZXQpO1xcbiBcXHRlbHNlXFxuLVxcdFxcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcXHUwMDI2aHRhYi1cXHUwMDNlbWEsIGh0YWJfbWVtX2R0b3IpO1xcbitcXHRcXHRyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgXFx1MDAyNmh0YWItXFx1MDAzZW1hLCBodGFiX21lbV9kdG9yLCBodGFiLVxcdTAwM2VrZXlfb2Zmc2V0KTtcXG4gfVxcbiBcXG4gc3RhdGljIHN0cnVjdCBicGZfbWFwICpodGFiX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5AQCAtNTYyLDYgKzYyNSwxMiBAQCBzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbiBcXG4gXFx0YnBmX21hcF9pbml0X2Zyb21fYXR0cihcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBhdHRyKTtcXG4gXFxuK1xcdC8qIEF2b2lkIGhhc2ggbWVtb3J5IHVzZSBhbmQgY29tcGFyaXNvbnMgd2hlcmUgdW5uZWNlc3NhcnkuXFxuK1xcdCAqIHUzMiBoYXNoIHJlYWRzIGFyZSBhbHdheXMgYXRvbWljLiBJZiB3ZSBlbGlkZSB0aGVtLCBrZXkgY29tcGFyaXNvbnMgbXVzdCBhbHNvIGJlIGF0b21pY1xcbitcXHQgKiB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZSBrZXkgbWF0Y2hlcyBkdWUgdG8gdG9ybiBrZXkgcmVhZHMgLyB3cml0ZXMuIFNvIGNoZWNrIGtleV9zaXplLlxcbitcXHQgKi9cXG4rXFx0aHRhYi1cXHUwMDNlaGFzX2hhc2ggPSBodGFiX2lzX2xydShodGFiKSB8fCBodGFiLVxcdTAwM2VtYXAua2V5X3NpemUgXFx1MDAzZSBzaXplb2YodW5zaWduZWQgbG9uZyk7XFxuK1xcbiBcXHRpZiAocGVyY3B1X2xydSkge1xcbiBcXHRcXHQvKiBlbnN1cmUgZWFjaCBDUFUncyBscnUgbGlzdCBoYXMgXFx1MDAzZT0xIGVsZW1lbnRzLlxcbiBcXHRcXHQgKiBzaW5jZSB3ZSBhcmUgYXQgaXQsIG1ha2UgZWFjaCBscnUgbGlzdCBoYXMgdGhlIHNhbWVcXG5AQCAtNTgzLDggKzY1MiwxNiBAQCBzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbiBcXG4gXFx0aHRhYi1cXHUwMDNlbl9idWNrZXRzID0gcm91bmR1cF9wb3dfb2ZfdHdvKGh0YWItXFx1MDAzZW1hcC5tYXhfZW50cmllcyk7XFxuIFxcbi1cXHRodGFiLVxcdTAwM2VlbGVtX3NpemUgPSBzaXplb2Yoc3RydWN0IGh0YWJfZWxlbSkgK1xcbi1cXHRcXHRcXHQgIHJvdW5kX3VwKGh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSwgOCk7XFxuK1xcdGlmIChodGFiX2lzX2xydShodGFiKSlcXG4rXFx0XFx0aHRhYi1cXHUwMDNla2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBkYXRhKSArIDg7XFxuK1xcdGVsc2UgaWYgKHBlcmNwdSBcXHUwMDI2XFx1MDAyNiAhcHJlYWxsb2MpXFxuK1xcdFxcdGh0YWItXFx1MDAzZWtleV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUsIGRhdGEpICtcXG4rXFx0XFx0XFx0XFx0ICAgKGh0YWJfaGFzX2hhc2goaHRhYikgPyA4IDogMCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0aHRhYi1cXHUwMDNla2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGRhdGEpICtcXG4rXFx0XFx0XFx0XFx0ICAgKGh0YWJfaGFzX2hhc2goaHRhYikgPyA4IDogMCk7XFxuK1xcbitcXHRodGFiLVxcdTAwM2VlbGVtX3NpemUgPSBodGFiLVxcdTAwM2VrZXlfb2Zmc2V0ICsgcm91bmRfdXAoaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplLCA4KTtcXG4gXFx0aWYgKHBlcmNwdSlcXG4gXFx0XFx0aHRhYi1cXHUwMDNlZWxlbV9zaXplICs9IHNpemVvZih2b2lkICopO1xcbiBcXHRlbHNlXFxuQEAgLTY5MiwxNSArNzY5LDIzIEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKnNlbGVjdF9idWNrZXQoc3RydWN0IGJwZl9odGFiICpodGFiLCB1MzJcXG4gfVxcbiBcXG4gLyogdGhpcyBsb29rdXAgZnVuY3Rpb24gY2FuIG9ubHkgYmUgY2FsbGVkIHdpdGggYnVja2V0IGxvY2sgdGFrZW4gKi9cXG4tc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCwgdTMyIGhhc2gsXFxuK3N0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfZWxlbV9yYXcoc3RydWN0IGJwZl9odGFiICpodGFiLFxcbitcXHRcXHRcXHRcXHRcXHQgc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsIHUzMiBoYXNoLFxcbiBcXHRcXHRcXHRcXHRcXHQgdm9pZCAqa2V5LCB1MzIga2V5X3NpemUpXFxuIHtcXG4gXFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47XFxuIFxcdHN0cnVjdCBodGFiX2VsZW0gKmw7XFxuIFxcbi1cXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxcbi1cXHRcXHRpZiAobC1cXHUwMDNlaGFzaCA9PSBoYXNoIFxcdTAwMjZcXHUwMDI2ICFtZW1jbXAoXFx1MDAyNmwtXFx1MDAzZWtleSwga2V5LCBrZXlfc2l6ZSkpXFxuLVxcdFxcdFxcdHJldHVybiBsO1xcbitcXHRpZiAoaHRhYl9oYXNfaGFzaChodGFiKSkge1xcbitcXHRcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpXFxuK1xcdFxcdFxcdGlmIChodGFiX2VsZW1faGFzaChodGFiLCBsKSA9PSBoYXNoIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAhbWVtY21wKGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleSwga2V5X3NpemUpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gbDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKVxcbitcXHRcXHRcXHRpZiAoIW1lbWNtcChodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGtleV9zaXplKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGw7XFxuK1xcdH1cXG4gXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuQEAgLTcwOSw3ICs3OTQsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqbG9va3VwX2VsZW1fcmF3KHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpoZWFkLCB1MzIgaGFzaFxcbiAgKiB0aGUgdW5saWtlbHkgZXZlbnQgd2hlbiBlbGVtZW50cyBtb3ZlZCBmcm9tIG9uZSBidWNrZXQgaW50byBhbm90aGVyXFxuICAqIHdoaWxlIGxpbmsgbGlzdCBpcyBiZWluZyB3YWxrZWRcXG4gICovXFxuLXN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsXFxuK3N0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGJwZl9odGFiICpodGFiLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgICB1MzIgaGFzaCwgdm9pZCAqa2V5LFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICAgdTMyIGtleV9zaXplLCB1MzIgbl9idWNrZXRzKVxcbiB7XFxuQEAgLTcxNyw5ICs4MDMsMTYgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9udWxsc19lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCxcXG4gXFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcXG4gXFxuIGFnYWluOlxcbi1cXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxcbi1cXHRcXHRpZiAobC1cXHUwMDNlaGFzaCA9PSBoYXNoIFxcdTAwMjZcXHUwMDI2ICFtZW1jbXAoXFx1MDAyNmwtXFx1MDAzZWtleSwga2V5LCBrZXlfc2l6ZSkpXFxuLVxcdFxcdFxcdHJldHVybiBsO1xcbitcXHRpZiAoaHRhYl9oYXNfaGFzaChodGFiKSkge1xcbitcXHRcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpXFxuK1xcdFxcdFxcdGlmIChodGFiX2VsZW1faGFzaChodGFiLCBsKSA9PSBoYXNoIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgICAhbWVtY21wKGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleSwga2V5X3NpemUpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gbDtcXG4rXFx0fSBlbHNlIHtcXG4rXFx0XFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKVxcbitcXHRcXHRcXHRpZiAoIW1lbWNtcChodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGtleV9zaXplKSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIGw7XFxuK1xcdH1cXG4gXFxuIFxcdGlmICh1bmxpa2VseShnZXRfbnVsbHNfdmFsdWUobikgIT0gKGhhc2ggXFx1MDAyNiAobl9idWNrZXRzIC0gMSkpKSlcXG4gXFx0XFx0Z290byBhZ2FpbjtcXG5AQCAtNzQ3LDE3ICs4NDAsMTggQEAgc3RhdGljIHZvaWQgKl9faHRhYl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbiBcXG4gXFx0aGVhZCA9IHNlbGVjdF9idWNrZXQoaHRhYiwgaGFzaCk7XFxuIFxcbi1cXHRsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItXFx1MDAzZW5fYnVja2V0cyk7XFxuK1xcdGwgPSBsb29rdXBfbnVsbHNfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSwgaHRhYi1cXHUwMDNlbl9idWNrZXRzKTtcXG4gXFxuIFxcdHJldHVybiBsO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCAqaHRhYl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4gXFx0c3RydWN0IGh0YWJfZWxlbSAqbCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbiBcXG4gXFx0aWYgKGwpXFxuLVxcdFxcdHJldHVybiBodGFiX2VsZW1fdmFsdWUobCwgbWFwLVxcdTAwM2VrZXlfc2l6ZSk7XFxuK1xcdFxcdHJldHVybiBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XFxuIFxcbiBcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbkBAIC03NzUsNiArODY5LDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4gICovXFxuIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4gXFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XFxuIFxcdGNvbnN0IGludCByZXQgPSBCUEZfUkVHXzA7XFxuIFxcbkBAIC03ODMsNyArODc4LDcgQEAgc3RhdGljIGludCBodGFiX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXFxuIFxcdCppbnNuKysgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pO1xcbiBcXHQqaW5zbisrID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgcmV0LCAwLCAxKTtcXG4gXFx0Kmluc24rKyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgcmV0LFxcbi1cXHRcXHRcXHRcXHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICtcXG4rXFx0XFx0XFx0XFx0aHRhYi1cXHUwMDNla2V5X29mZnNldCArXFxuIFxcdFxcdFxcdFxcdHJvdW5kX3VwKG1hcC1cXHUwMDNla2V5X3NpemUsIDgpKTtcXG4gXFx0cmV0dXJuIGluc24gLSBpbnNuX2J1ZjtcXG4gfVxcbkBAIC03OTEsMTIgKzg4NiwxMyBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcXG4gc3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkICpfX2h0YWJfbHJ1X21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHR2b2lkICprZXksIGNvbnN0IGJvb2wgbWFyaylcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuIFxcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcXG4gXFxuIFxcdGlmIChsKSB7XFxuIFxcdFxcdGlmIChtYXJrKVxcbi1cXHRcXHRcXHRicGZfbHJ1X25vZGVfc2V0X3JlZihcXHUwMDI2bC1cXHUwMDNlbHJ1X25vZGUpO1xcbi1cXHRcXHRyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGwsIG1hcC1cXHUwMDNla2V5X3NpemUpO1xcbitcXHRcXHRcXHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobCkpO1xcbitcXHRcXHRyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gTlVMTDtcXG5AQCAtODE1LDYgKzkxMSw3IEBAIHN0YXRpYyB2b2lkICpodGFiX2xydV9tYXBfbG9va3VwX2VsZW1fc3lzKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4gc3RhdGljIGludCBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4gXFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XFxuIFxcdGNvbnN0IGludCByZXQgPSBCUEZfUkVHXzA7XFxuIFxcdGNvbnN0IGludCByZWZfcmVnID0gQlBGX1JFR18xO1xcbkBAIC04MjQsMTUgKzkyMSwxNSBAQCBzdGF0aWMgaW50IGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsXFxuIFxcdCppbnNuKysgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pO1xcbiBcXHQqaW5zbisrID0gQlBGX0pNUF9JTU0oQlBGX0pFUSwgcmV0LCAwLCA0KTtcXG4gXFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9CLCByZWZfcmVnLCByZXQsXFxuLVxcdFxcdFxcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSArXFxuK1xcdFxcdFxcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSkgK1xcbiBcXHRcXHRcXHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX2xydV9ub2RlLCByZWYpKTtcXG4gXFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KTkUsIHJlZl9yZWcsIDAsIDEpO1xcbiBcXHQqaW5zbisrID0gQlBGX1NUX01FTShCUEZfQiwgcmV0LFxcbi1cXHRcXHRcXHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKSArXFxuK1xcdFxcdFxcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSArXFxuIFxcdFxcdFxcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGJwZl9scnVfbm9kZSwgcmVmKSxcXG4gXFx0XFx0XFx0ICAgICAxKTtcXG4gXFx0Kmluc24rKyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgcmV0LFxcbi1cXHRcXHRcXHRcXHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICtcXG4rXFx0XFx0XFx0XFx0aHRhYi1cXHUwMDNla2V5X29mZnNldCArXFxuIFxcdFxcdFxcdFxcdHJvdW5kX3VwKG1hcC1cXHUwMDNla2V5X3NpemUsIDgpKTtcXG4gXFx0cmV0dXJuIGluc24gLSBpbnNuX2J1ZjtcXG4gfVxcbkBAIC04NDQsMTMgKzk0MSwxMyBAQCBzdGF0aWMgdm9pZCBjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmIChodGFiX2lzX3BlcmNwdShodGFiKSkge1xcbi1cXHRcXHR2b2lkIF9fcGVyY3B1ICpwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZWxlbSwgaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplKTtcXG4rXFx0XFx0dm9pZCBfX3BlcmNwdSAqcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGVsZW0pO1xcbiBcXHRcXHRpbnQgY3B1O1xcbiBcXG4gXFx0XFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcXG4gXFx0XFx0XFx0YnBmX29ial9jYW5jZWxfZmllbGRzKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHR2b2lkICptYXBfdmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoZWxlbSwgaHRhYi1cXHUwMDNlbWFwLmtleV9zaXplKTtcXG4rXFx0XFx0dm9pZCAqbWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pO1xcbiBcXG4gXFx0XFx0YnBmX29ial9jYW5jZWxfZmllbGRzKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIG1hcF92YWx1ZSk7XFxuIFxcdH1cXG5AQCAtODY5LDE3ICs5NjYsMTcgQEAgc3RhdGljIGJvb2wgaHRhYl9scnVfbWFwX2RlbGV0ZV9ub2RlKHZvaWQgKmFyZywgc3RydWN0IGJwZl9scnVfbm9kZSAqbm9kZSlcXG4gXFx0c3RydWN0IGJ1Y2tldCAqYjtcXG4gXFx0aW50IHJldDtcXG4gXFxuLVxcdHRndF9sID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKTtcXG4tXFx0YiA9IF9fc2VsZWN0X2J1Y2tldChodGFiLCB0Z3RfbC1cXHUwMDNlaGFzaCk7XFxuK1xcdHRndF9sID0gKHN0cnVjdCBodGFiX2VsZW0gKiljb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKTtcXG4rXFx0YiA9IF9fc2VsZWN0X2J1Y2tldChodGFiLCBodGFiX2VsZW1faGFzaChodGFiLCB0Z3RfbCkpO1xcbiBcXHRoZWFkID0gXFx1MDAyNmItXFx1MDAzZWhlYWQ7XFxuIFxcbiBcXHRyZXQgPSBodGFiX2xvY2tfYnVja2V0KGIsIFxcdTAwMjZmbGFncyk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuLVxcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShsLCBuLCBoZWFkLCBoYXNoX25vZGUpXFxuK1xcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShsLCBuLCBoZWFkLCBub2RlLmhhc2hfbm9kZSlcXG4gXFx0XFx0aWYgKGwgPT0gdGd0X2wpIHtcXG4tXFx0XFx0XFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcXHUwMDI2bC1cXHUwMDNlaGFzaF9ub2RlKTtcXG4rXFx0XFx0XFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcXHUwMDI2bC1cXHUwMDNlbm9kZS5oYXNoX25vZGUpO1xcbiBcXHRcXHRcXHRicGZfbWFwX2RlY19lbGVtX2NvdW50KFxcdTAwMjZodGFiLVxcdTAwM2VtYXApO1xcbiBcXHRcXHRcXHRicmVhaztcXG4gXFx0XFx0fVxcbkBAIC05MTIsMTggKzEwMDksMTkgQEAgc3RhdGljIGludCBodGFiX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcXG4gXFx0aGVhZCA9IHNlbGVjdF9idWNrZXQoaHRhYiwgaGFzaCk7XFxuIFxcbiBcXHQvKiBsb29rdXAgdGhlIGtleSAqL1xcbi1cXHRsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItXFx1MDAzZW5fYnVja2V0cyk7XFxuK1xcdGwgPSBsb29rdXBfbnVsbHNfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSwgaHRhYi1cXHUwMDNlbl9idWNrZXRzKTtcXG4gXFxuIFxcdGlmICghbClcXG4gXFx0XFx0Z290byBmaW5kX2ZpcnN0X2VsZW07XFxuIFxcbiBcXHQvKiBrZXkgd2FzIGZvdW5kLCBnZXQgbmV4dCBrZXkgaW4gdGhlIHNhbWUgYnVja2V0ICovXFxuLVxcdG5leHRfbCA9IGhsaXN0X251bGxzX2VudHJ5X3NhZmUocmN1X2RlcmVmZXJlbmNlX3JhdyhobGlzdF9udWxsc19uZXh0X3JjdShcXHUwMDI2bC1cXHUwMDNlaGFzaF9ub2RlKSksXFxuLVxcdFxcdFxcdFxcdCAgc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKTtcXG4rXFx0bmV4dF9sID0gaGxpc3RfbnVsbHNfZW50cnlfc2FmZShcXG4rXFx0XFx0XFx0cmN1X2RlcmVmZXJlbmNlX3JhdyhobGlzdF9udWxsc19uZXh0X3JjdShcXHUwMDI2bC1cXHUwMDNlbm9kZS5oYXNoX25vZGUpKSxcXG4rXFx0XFx0XFx0c3RydWN0IGh0YWJfZWxlbSwgbm9kZS5oYXNoX25vZGUpO1xcbiBcXG4gXFx0aWYgKG5leHRfbCkge1xcbiBcXHRcXHQvKiBpZiBuZXh0IGVsZW0gaW4gdGhpcyBoYXNoIGxpc3QgaXMgbm9uLXplcm8sIGp1c3QgcmV0dXJuIGl0ICovXFxuLVxcdFxcdG1lbWNweShuZXh0X2tleSwgbmV4dF9sLVxcdTAwM2VrZXksIGtleV9zaXplKTtcXG4rXFx0XFx0bWVtY3B5KG5leHRfa2V5LCBodGFiX2VsZW1fa2V5KGh0YWIsIG5leHRfbCksIGtleV9zaXplKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcdH1cXG4gXFxuQEAgLTkzOCwxMCArMTAzNiwxMCBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxcbiBcXG4gXFx0XFx0LyogcGljayBmaXJzdCBlbGVtZW50IGluIHRoZSBidWNrZXQgKi9cXG4gXFx0XFx0bmV4dF9sID0gaGxpc3RfbnVsbHNfZW50cnlfc2FmZShyY3VfZGVyZWZlcmVuY2VfcmF3KGhsaXN0X251bGxzX2ZpcnN0X3JjdShoZWFkKSksXFxuLVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKTtcXG4rXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgaHRhYl9lbGVtLCBub2RlLmhhc2hfbm9kZSk7XFxuIFxcdFxcdGlmIChuZXh0X2wpIHtcXG4gXFx0XFx0XFx0LyogaWYgaXQncyBub3QgZW1wdHksIGp1c3QgcmV0dXJuIGl0ICovXFxuLVxcdFxcdFxcdG1lbWNweShuZXh0X2tleSwgbmV4dF9sLVxcdTAwM2VrZXksIGtleV9zaXplKTtcXG4rXFx0XFx0XFx0bWVtY3B5KG5leHRfa2V5LCBodGFiX2VsZW1fa2V5KGh0YWIsIG5leHRfbCksIGtleV9zaXplKTtcXG4gXFx0XFx0XFx0cmV0dXJuIDA7XFxuIFxcdFxcdH1cXG4gXFx0fVxcbkBAIC05NTUsNyArMTA1Myw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZWxlbV9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcXG4gXFx0Y2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoaHRhYiwgbCk7XFxuIFxcbiBcXHRpZiAoaHRhYi1cXHUwMDNlbWFwLm1hcF90eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSClcXG4tXFx0XFx0YnBmX21lbV9jYWNoZV9mcmVlKFxcdTAwMjZodGFiLVxcdTAwM2VwY3B1X21hLCBsLVxcdTAwM2VwdHJfdG9fcHB0cik7XFxuK1xcdFxcdGJwZl9tZW1fY2FjaGVfZnJlZShcXHUwMDI2aHRhYi1cXHUwMDNlcGNwdV9tYSwgaHRhYl9lbGVtX2dldF9wdHJfdG9fcHB0cihsKSk7XFxuIFxcdGJwZl9tZW1fY2FjaGVfZnJlZShcXHUwMDI2aHRhYi1cXHUwMDNlbWEsIGwpO1xcbiB9XFxuIFxcbkBAIC05NjUsNyArMTA2Myw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfcHV0X2ZkX3ZhbHVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcXG4gXFx0dm9pZCAqcHRyO1xcbiBcXG4gXFx0aWYgKG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfZmRfcHV0X3B0cikge1xcbi1cXHRcXHRwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKG1hcCwgbCk7XFxuK1xcdFxcdHB0ciA9IGZkX2h0YWJfbWFwX2dldF9wdHIoaHRhYiwgbCk7XFxuIFxcdFxcdG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfZmRfcHV0X3B0cihtYXAsIHB0ciwgdHJ1ZSk7XFxuIFxcdH1cXG4gfVxcbkBAIC0xMDA2LDcgKzExMDQsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXFxuIFxcdGlmIChodGFiX2lzX3ByZWFsbG9jKGh0YWIpKSB7XFxuIFxcdFxcdGJwZl9tYXBfZGVjX2VsZW1fY291bnQoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCk7XFxuIFxcdFxcdGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKGh0YWIsIGwpO1xcbi1cXHRcXHRwY3B1X2ZyZWVsaXN0X3B1c2goXFx1MDAyNmh0YWItXFx1MDAzZWZyZWVsaXN0LCBcXHUwMDI2bC1cXHUwMDNlZm5vZGUpO1xcbitcXHRcXHRwY3B1X2ZyZWVsaXN0X3B1c2goXFx1MDAyNmh0YWItXFx1MDAzZWZyZWVsaXN0LCBcXHUwMDI2bC1cXHUwMDNlbm9kZS5mbm9kZSk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGRlY19lbGVtX2NvdW50KGh0YWIpO1xcbiBcXHRcXHRodGFiX2VsZW1fZnJlZShodGFiLCBsKTtcXG5AQCAtMTA5Nyw3ICsxMTk1LDcgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmFsbG9jX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcXG4gXFx0XFx0XFx0bCA9IF9fcGNwdV9mcmVlbGlzdF9wb3AoXFx1MDAyNmh0YWItXFx1MDAzZWZyZWVsaXN0KTtcXG4gXFx0XFx0XFx0aWYgKCFsKVxcbiBcXHRcXHRcXHRcXHRyZXR1cm4gRVJSX1BUUigtRTJCSUcpO1xcbi1cXHRcXHRcXHRsX25ldyA9IGNvbnRhaW5lcl9vZihsLCBzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZSk7XFxuK1xcdFxcdFxcdGxfbmV3ID0gY29udGFpbmVyX29mKGwsIHN0cnVjdCBodGFiX2VsZW0sIG5vZGUuZm5vZGUpO1xcbiBcXHRcXHRcXHRicGZfbWFwX2luY19lbGVtX2NvdW50KFxcdTAwMjZodGFiLVxcdTAwM2VtYXApO1xcbiBcXHRcXHR9XFxuIFxcdH0gZWxzZSB7XFxuQEAgLTExMTcsMTAgKzEyMTUsMTAgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmFsbG9jX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcXG4gXFx0XFx0fVxcbiBcXHR9XFxuIFxcbi1cXHRtZW1jcHkobF9uZXctXFx1MDAzZWtleSwga2V5LCBrZXlfc2l6ZSk7XFxuK1xcdG1lbWNweShodGFiX2VsZW1fa2V5KGh0YWIsIGxfbmV3KSwga2V5LCBrZXlfc2l6ZSk7XFxuIFxcdGlmIChwZXJjcHUpIHtcXG4gXFx0XFx0aWYgKHByZWFsbG9jKSB7XFxuLVxcdFxcdFxcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsX25ldywga2V5X3NpemUpO1xcbitcXHRcXHRcXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9uZXcpO1xcbiBcXHRcXHR9IGVsc2Uge1xcbiBcXHRcXHRcXHQvKiBhbGxvY19wZXJjcHUgemVyby1maWxscyAqL1xcbiBcXHRcXHRcXHR2b2lkICpwdHIgPSBicGZfbWVtX2NhY2hlX2FsbG9jKFxcdTAwMjZodGFiLVxcdTAwM2VwY3B1X21hKTtcXG5AQCAtMTEzMCwyNiArMTIyOCwyNiBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqYWxsb2NfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgdm9pZCAqa2V5LFxcbiBcXHRcXHRcXHRcXHRsX25ldyA9IEVSUl9QVFIoLUVOT01FTSk7XFxuIFxcdFxcdFxcdFxcdGdvdG8gZGVjX2NvdW50O1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGxfbmV3LVxcdTAwM2VwdHJfdG9fcHB0ciA9IHB0cjtcXG4rXFx0XFx0XFx0aHRhYl9lbGVtX3NldF9wdHJfdG9fcHB0cihsX25ldywgcHRyKTtcXG4gXFx0XFx0XFx0cHB0ciA9ICoodm9pZCBfX3BlcmNwdSAqKilwdHI7XFxuIFxcdFxcdH1cXG4gXFxuIFxcdFxcdHBjcHVfaW5pdF92YWx1ZShodGFiLCBwcHRyLCB2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpO1xcbiBcXG4gXFx0XFx0aWYgKCFwcmVhbGxvYylcXG4tXFx0XFx0XFx0aHRhYl9lbGVtX3NldF9wdHIobF9uZXcsIGtleV9zaXplLCBwcHRyKTtcXG4rXFx0XFx0XFx0aHRhYl9lbGVtX3NldF9wdHIoaHRhYiwgbF9uZXcsIHBwdHIpO1xcbiBcXHR9IGVsc2UgaWYgKGZkX2h0YWJfbWFwX25lZWRzX2FkanVzdChodGFiKSkge1xcbiBcXHRcXHRzaXplID0gcm91bmRfdXAoc2l6ZSwgOCk7XFxuLVxcdFxcdG1lbWNweShodGFiX2VsZW1fdmFsdWUobF9uZXcsIGtleV9zaXplKSwgdmFsdWUsIHNpemUpO1xcbitcXHRcXHRtZW1jcHkoaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfbmV3KSwgdmFsdWUsIHNpemUpO1xcbiBcXHR9IGVsc2UgaWYgKG1hcF9mbGFncyBcXHUwMDI2IEJQRl9GX0xPQ0spIHtcXG4gXFx0XFx0Y29weV9tYXBfdmFsdWVfbG9ja2VkKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsXFxuLVxcdFxcdFxcdFxcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShsX25ldywga2V5X3NpemUpLFxcbitcXHRcXHRcXHRcXHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLFxcbiBcXHRcXHRcXHRcXHQgICAgICB2YWx1ZSwgZmFsc2UpO1xcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHRjb3B5X21hcF92YWx1ZShcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBodGFiX2VsZW1fdmFsdWUobF9uZXcsIGtleV9zaXplKSwgdmFsdWUpO1xcbitcXHRcXHRjb3B5X21hcF92YWx1ZShcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLCB2YWx1ZSk7XFxuIFxcdH1cXG4gXFxuLVxcdGxfbmV3LVxcdTAwM2VoYXNoID0gaGFzaDtcXG4rXFx0aHRhYl9lbGVtX3NldF9oYXNoKGh0YWIsIGxfbmV3LCBoYXNoKTtcXG4gXFx0cmV0dXJuIGxfbmV3O1xcbiBkZWNfY291bnQ6XFxuIFxcdGRlY19lbGVtX2NvdW50KGh0YWIpO1xcbkBAIC0xMTk5LDcgKzEyOTcsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbiBcXHRcXHRpZiAodW5saWtlbHkoIWJ0Zl9yZWNvcmRfaGFzX2ZpZWxkKG1hcC1cXHUwMDNlcmVjb3JkLCBCUEZfU1BJTl9MT0NLKSkpXFxuIFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiBcXHRcXHQvKiBmaW5kIGFuIGVsZW1lbnQgd2l0aG91dCB0YWtpbmcgdGhlIGJ1Y2tldCBsb2NrICovXFxuLVxcdFxcdGxfb2xkID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsXFxuK1xcdFxcdGxfb2xkID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIGh0YWItXFx1MDAzZW5fYnVja2V0cyk7XFxuIFxcdFxcdHJldCA9IGNoZWNrX2ZsYWdzKGh0YWIsIGxfb2xkLCBtYXBfZmxhZ3MpO1xcbiBcXHRcXHRpZiAocmV0KVxcbkBAIC0xMjA3LDcgKzEzMDUsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbiBcXHRcXHRpZiAobF9vbGQpIHtcXG4gXFx0XFx0XFx0LyogZ3JhYiB0aGUgZWxlbWVudCBsb2NrIGFuZCB1cGRhdGUgdmFsdWUgaW4gcGxhY2UgKi9cXG4gXFx0XFx0XFx0Y29weV9tYXBfdmFsdWVfbG9ja2VkKG1hcCxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGxfb2xkLCBrZXlfc2l6ZSksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX29sZCksXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIHZhbHVlLCBmYWxzZSk7XFxuIFxcdFxcdFxcdHJldHVybiAwO1xcbiBcXHRcXHR9XFxuQEAgLTEyMjEsNyArMTMxOSw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcXG4rXFx0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuIFxcbiBcXHRyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTtcXG4gXFx0aWYgKHJldClcXG5AQCAtMTIzNSw3ICsxMzMzLDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcXG4gXFx0XFx0ICogYW5kIHVwZGF0ZSBlbGVtZW50IGluIHBsYWNlXFxuIFxcdFxcdCAqL1xcbiBcXHRcXHRjb3B5X21hcF92YWx1ZV9sb2NrZWQobWFwLFxcbi1cXHRcXHRcXHRcXHQgICAgICBodGFiX2VsZW1fdmFsdWUobF9vbGQsIGtleV9zaXplKSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfb2xkKSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgdmFsdWUsIGZhbHNlKTtcXG4gXFx0XFx0cmV0ID0gMDtcXG4gXFx0XFx0Z290byBlcnI7XFxuQEAgLTEyNTIsOSArMTM1MCw5IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuIFxcdC8qIGFkZCBuZXcgZWxlbWVudCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdFxcbiBcXHQgKiBjb25jdXJyZW50IHNlYXJjaCB3aWxsIGZpbmQgaXQgYmVmb3JlIG9sZCBlbGVtXFxuIFxcdCAqL1xcbi1cXHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXFx1MDAyNmxfbmV3LVxcdTAwM2VoYXNoX25vZGUsIGhlYWQpO1xcbitcXHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXFx1MDAyNmxfbmV3LVxcdTAwM2Vub2RlLmhhc2hfbm9kZSwgaGVhZCk7XFxuIFxcdGlmIChsX29sZCkge1xcbi1cXHRcXHRobGlzdF9udWxsc19kZWxfcmN1KFxcdTAwMjZsX29sZC1cXHUwMDNlaGFzaF9ub2RlKTtcXG4rXFx0XFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcXHUwMDI2bF9vbGQtXFx1MDAzZW5vZGUuaGFzaF9ub2RlKTtcXG4gXFxuIFxcdFxcdC8qIGxfb2xkIGhhcyBhbHJlYWR5IGJlZW4gc3Rhc2hlZCBpbiBodGFiLVxcdTAwM2VleHRyYV9lbGVtcywgY2FuY2VsXFxuIFxcdFxcdCAqIGl0cyByZXVzYWJsZSBzcGVjaWFsIGZpZWxkcyBiZWZvcmUgaXQgaXMgYXZhaWxhYmxlIGZvciByZXVzZS5cXG5AQCAtMTI3NSw3ICsxMzczLDcgQEAgc3RhdGljIHZvaWQgaHRhYl9scnVfcHVzaF9mcmVlKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqZWxlbSlcXG4ge1xcbiBcXHRjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhodGFiLCBlbGVtKTtcXG4gXFx0YnBmX21hcF9kZWNfZWxlbV9jb3VudChcXHUwMDI2aHRhYi1cXHUwMDNlbWFwKTtcXG4tXFx0YnBmX2xydV9wdXNoX2ZyZWUoXFx1MDAyNmh0YWItXFx1MDAzZWxydSwgXFx1MDAyNmVsZW0tXFx1MDAzZWxydV9ub2RlKTtcXG4rXFx0YnBmX2xydV9wdXNoX2ZyZWUoXFx1MDAyNmh0YWItXFx1MDAzZWxydSwgaHRhYl9lbGVtX2xydV9ub2RlKGVsZW0pKTtcXG4gfVxcbiBcXG4gc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuQEAgLTEzMTAsMTMgKzE0MDgsMTMgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWVcXG4gXFx0bF9uZXcgPSBwcmVhbGxvY19scnVfcG9wKGh0YWIsIGtleSwgaGFzaCk7XFxuIFxcdGlmICghbF9uZXcpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHRjb3B5X21hcF92YWx1ZShcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBodGFiX2VsZW1fdmFsdWUobF9uZXcsIG1hcC1cXHUwMDNla2V5X3NpemUpLCB2YWx1ZSk7XFxuK1xcdGNvcHlfbWFwX3ZhbHVlKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksIHZhbHVlKTtcXG4gXFxuIFxcdHJldCA9IGh0YWJfbG9ja19idWNrZXQoYiwgXFx1MDAyNmZsYWdzKTtcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0Z290byBlcnJfbG9ja19idWNrZXQ7XFxuIFxcbi1cXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcXG4rXFx0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuIFxcbiBcXHRyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTtcXG4gXFx0aWYgKHJldClcXG5AQCAtMTMyNSwxMCArMTQyMywxMCBAQCBzdGF0aWMgbG9uZyBodGFiX2xydV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZVxcbiBcXHQvKiBhZGQgbmV3IGVsZW1lbnQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QsIHNvIHRoYXRcXG4gXFx0ICogY29uY3VycmVudCBzZWFyY2ggd2lsbCBmaW5kIGl0IGJlZm9yZSBvbGQgZWxlbVxcbiBcXHQgKi9cXG4tXFx0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFxcdTAwMjZsX25ldy1cXHUwMDNlaGFzaF9ub2RlLCBoZWFkKTtcXG4rXFx0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFxcdTAwMjZsX25ldy1cXHUwMDNlbm9kZS5oYXNoX25vZGUsIGhlYWQpO1xcbiBcXHRpZiAobF9vbGQpIHtcXG4tXFx0XFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXFx1MDAyNmxfbmV3LVxcdTAwM2VscnVfbm9kZSk7XFxuLVxcdFxcdGhsaXN0X251bGxzX2RlbF9yY3UoXFx1MDAyNmxfb2xkLVxcdTAwM2VoYXNoX25vZGUpO1xcbitcXHRcXHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobF9uZXcpKTtcXG4rXFx0XFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcXHUwMDI2bF9vbGQtXFx1MDAzZW5vZGUuaGFzaF9ub2RlKTtcXG4gXFx0fVxcbiBcXHRyZXQgPSAwO1xcbiBcXG5AQCAtMTM4Myw3ICsxNDgxLDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW1faW5fcGxhY2Uoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbiBcXG4tXFx0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuK1xcdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbiBcXG4gXFx0cmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7XFxuIFxcdGlmIChyZXQpXFxuQEAgLTEzOTIsMTAgKzE0OTAsMTAgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW1faW5fcGxhY2Uoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxcbiBcXHRpZiAobF9vbGQpIHtcXG4gXFx0XFx0LyogVXBkYXRlIHZhbHVlIGluLXBsYWNlICovXFxuIFxcdFxcdGlmIChwZXJjcHUpIHtcXG4tXFx0XFx0XFx0cGNwdV9jb3B5X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGxfb2xkLCBrZXlfc2l6ZSksXFxuK1xcdFxcdFxcdHBjcHVfY29weV92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsX29sZCksXFxuIFxcdFxcdFxcdFxcdFxcdHZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7XFxuIFxcdFxcdH0gZWxzZSB7XFxuLVxcdFxcdFxcdHZvaWQgKippbm5lcl9tYXBfcHB0ciA9IGh0YWJfZWxlbV92YWx1ZShsX29sZCwga2V5X3NpemUpO1xcbitcXHRcXHRcXHR2b2lkICoqaW5uZXJfbWFwX3BwdHIgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9vbGQpO1xcbiBcXG4gXFx0XFx0XFx0b2xkX21hcF9wdHIgPSAqaW5uZXJfbWFwX3BwdHI7XFxuIFxcdFxcdFxcdFdSSVRFX09OQ0UoKmlubmVyX21hcF9wcHRyLCAqKHZvaWQgKiopdmFsdWUpO1xcbkBAIC0xNDA3LDcgKzE1MDUsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbV9pbl9wbGFjZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuIFxcdFxcdFxcdHJldCA9IFBUUl9FUlIobF9uZXcpO1xcbiBcXHRcXHRcXHRnb3RvIGVycjtcXG4gXFx0XFx0fVxcbi1cXHRcXHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXFx1MDAyNmxfbmV3LVxcdTAwM2VoYXNoX25vZGUsIGhlYWQpO1xcbitcXHRcXHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXFx1MDAyNmxfbmV3LVxcdTAwM2Vub2RlLmhhc2hfbm9kZSwgaGVhZCk7XFxuIFxcdH1cXG4gZXJyOlxcbiBcXHRodGFiX3VubG9ja19idWNrZXQoYiwgZmxhZ3MpO1xcbkBAIC0xNDU2LDIyICsxNTU0LDIyIEBAIHN0YXRpYyBsb25nIF9faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gZXJyX2xvY2tfYnVja2V0O1xcbiBcXG4tXFx0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuK1xcdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbiBcXG4gXFx0cmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdGdvdG8gZXJyO1xcbiBcXG4gXFx0aWYgKGxfb2xkKSB7XFxuLVxcdFxcdGJwZl9scnVfbm9kZV9zZXRfcmVmKFxcdTAwMjZsX29sZC1cXHUwMDNlbHJ1X25vZGUpO1xcbitcXHRcXHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobF9vbGQpKTtcXG4gXFxuIFxcdFxcdC8qIHBlci1jcHUgaGFzaCBtYXAgY2FuIHVwZGF0ZSB2YWx1ZSBpbi1wbGFjZSAqL1xcbi1cXHRcXHRwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIobF9vbGQsIGtleV9zaXplKSxcXG4rXFx0XFx0cGNwdV9jb3B5X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGxfb2xkKSxcXG4gXFx0XFx0XFx0XFx0dmFsdWUsIG9uYWxsY3B1cywgbWFwX2ZsYWdzKTtcXG4gXFx0fSBlbHNlIHtcXG4tXFx0XFx0cGNwdV9pbml0X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGxfbmV3LCBrZXlfc2l6ZSksXFxuK1xcdFxcdHBjcHVfaW5pdF92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsX25ldyksXFxuIFxcdFxcdFxcdFxcdHZhbHVlLCBvbmFsbGNwdXMsIG1hcF9mbGFncyk7XFxuLVxcdFxcdGhsaXN0X251bGxzX2FkZF9oZWFkX3JjdShcXHUwMDI2bF9uZXctXFx1MDAzZWhhc2hfbm9kZSwgaGVhZCk7XFxuK1xcdFxcdGhsaXN0X251bGxzX2FkZF9oZWFkX3JjdShcXHUwMDI2bF9uZXctXFx1MDAzZW5vZGUuaGFzaF9ub2RlLCBoZWFkKTtcXG4gXFx0XFx0bF9uZXcgPSBOVUxMO1xcbiBcXHR9XFxuIFxcdHJldCA9IDA7XFxuQEAgLTE0ODAsNyArMTU3OCw3IEBAIHN0YXRpYyBsb25nIF9faHRhYl9scnVfcGVyY3B1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuIGVycl9sb2NrX2J1Y2tldDpcXG4gXFx0aWYgKGxfbmV3KSB7XFxuIFxcdFxcdGJwZl9tYXBfZGVjX2VsZW1fY291bnQoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCk7XFxuLVxcdFxcdGJwZl9scnVfcHVzaF9mcmVlKFxcdTAwMjZodGFiLVxcdTAwM2VscnUsIFxcdTAwMjZsX25ldy1cXHUwMDNlbHJ1X25vZGUpO1xcbitcXHRcXHRicGZfbHJ1X3B1c2hfZnJlZShcXHUwMDI2aHRhYi1cXHUwMDNlbHJ1LCBodGFiX2VsZW1fbHJ1X25vZGUobF9uZXcpKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gcmV0O1xcbiB9XFxuQEAgLTE1MjEsOSArMTYxOSw5IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuK1xcdGwgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuIFxcdGlmIChsKVxcbi1cXHRcXHRobGlzdF9udWxsc19kZWxfcmN1KFxcdTAwMjZsLVxcdTAwM2VoYXNoX25vZGUpO1xcbitcXHRcXHRobGlzdF9udWxsc19kZWxfcmN1KFxcdTAwMjZsLVxcdTAwM2Vub2RlLmhhc2hfbm9kZSk7XFxuIFxcdGVsc2VcXG4gXFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4gXFxuQEAgLTE1NTYsMTAgKzE2NTQsMTAgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4gXFx0aWYgKHJldClcXG4gXFx0XFx0cmV0dXJuIHJldDtcXG4gXFxuLVxcdGwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuK1xcdGwgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XFxuIFxcbiBcXHRpZiAobClcXG4tXFx0XFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcXHUwMDI2bC1cXHUwMDNlaGFzaF9ub2RlKTtcXG4rXFx0XFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcXHUwMDI2bC1cXHUwMDNlbm9kZS5oYXNoX25vZGUpO1xcbiBcXHRlbHNlXFxuIFxcdFxcdHJldCA9IC1FTk9FTlQ7XFxuIFxcbkBAIC0xNTgxLDggKzE2NzksOCBAQCBzdGF0aWMgdm9pZCBkZWxldGVfYWxsX2VsZW1lbnRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4gXFx0XFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47XFxuIFxcdFxcdHN0cnVjdCBodGFiX2VsZW0gKmw7XFxuIFxcbi1cXHRcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xcbi1cXHRcXHRcXHRobGlzdF9udWxsc19kZWxfcmN1KFxcdTAwMjZsLVxcdTAwM2VoYXNoX25vZGUpO1xcbitcXHRcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKSB7XFxuK1xcdFxcdFxcdGhsaXN0X251bGxzX2RlbF9yY3UoXFx1MDAyNmwtXFx1MDAzZW5vZGUuaGFzaF9ub2RlKTtcXG4gXFx0XFx0XFx0aHRhYl9lbGVtX2ZyZWUoaHRhYiwgbCk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0Y29uZF9yZXNjaGVkKCk7XFxuQEAgLTE1OTksMTAgKzE2OTcsMTAgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX21hbGxvY2VkX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxcbiBcXHRcXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjtcXG4gXFx0XFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcXG4gXFxuLVxcdFxcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xcbitcXHRcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeShsLCBuLCBoZWFkLCBub2RlLmhhc2hfbm9kZSkge1xcbiBcXHRcXHRcXHQvKiBXZSBvbmx5IGZyZWUgaW50ZXJuYWwgc3RydWN0cyBvbiB1cmVmIGRyb3BwaW5nIHRvIHplcm8gKi9cXG4gXFx0XFx0XFx0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoXFx1MDAyNmh0YWItXFx1MDAzZW1hcCxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGwsIGh0YWItXFx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xcbitcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCkpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGNvbmRfcmVzY2hlZF9yY3UoKTtcXG4gXFx0fVxcbkBAIC0xNjk3LDcgKzE3OTUsNyBAQCBzdGF0aWMgaW50IF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbi1cXHRsID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbitcXHRsID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xcbiBcXHRpZiAoIWwpIHtcXG4gXFx0XFx0cmV0ID0gLUVOT0VOVDtcXG4gXFx0XFx0Z290byBvdXRfdW5sb2NrO1xcbkBAIC0xNzA4LDE0ICsxODA2LDE0IEBAIHN0YXRpYyBpbnQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4gXFx0XFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcXG4gXFx0XFx0aW50IG9mZiA9IDAsIGNwdTtcXG4gXFxuLVxcdFxcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBrZXlfc2l6ZSk7XFxuK1xcdFxcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKTtcXG4gXFx0XFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbiBcXHRcXHRcXHRjb3B5X21hcF92YWx1ZV9sb25nKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIHZhbHVlICsgb2ZmLCBwZXJfY3B1X3B0cihwcHRyLCBjcHUpKTtcXG4gXFx0XFx0XFx0Y2hlY2tfYW5kX2luaXRfbWFwX3ZhbHVlKFxcdTAwMjZodGFiLVxcdTAwM2VtYXAsIHZhbHVlICsgb2ZmKTtcXG4gXFx0XFx0XFx0b2ZmICs9IHJvdW5kdXBfdmFsdWVfc2l6ZTtcXG4gXFx0XFx0fVxcbiBcXHR9IGVsc2Uge1xcbi1cXHRcXHR2b2lkICpzcmMgPSBodGFiX2VsZW1fdmFsdWUobCwgbWFwLVxcdTAwM2VrZXlfc2l6ZSk7XFxuK1xcdFxcdHZvaWQgKnNyYyA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcXG4gXFxuIFxcdFxcdGlmIChmbGFncyBcXHUwMDI2IEJQRl9GX0xPQ0spXFxuIFxcdFxcdFxcdGNvcHlfbWFwX3ZhbHVlX2xvY2tlZChtYXAsIHZhbHVlLCBzcmMsIHRydWUpO1xcbkBAIC0xNzI0LDcgKzE4MjIsNyBAQCBzdGF0aWMgaW50IF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuIFxcdFxcdC8qIFplcm9pbmcgc3BlY2lhbCBmaWVsZHMgaW4gdGhlIHRlbXAgYnVmZmVyICovXFxuIFxcdFxcdGNoZWNrX2FuZF9pbml0X21hcF92YWx1ZShtYXAsIHZhbHVlKTtcXG4gXFx0fVxcbi1cXHRobGlzdF9udWxsc19kZWxfcmN1KFxcdTAwMjZsLVxcdTAwM2VoYXNoX25vZGUpO1xcbitcXHRobGlzdF9udWxsc19kZWxfcmN1KFxcdTAwMjZsLVxcdTAwM2Vub2RlLmhhc2hfbm9kZSk7XFxuIFxcbiBvdXRfdW5sb2NrOlxcbiBcXHRodGFiX3VubG9ja19idWNrZXQoYiwgYmZsYWdzKTtcXG5AQCAtMTg2MCw3ICsxOTU4LDcgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHR9XFxuIFxcbiBcXHRidWNrZXRfY250ID0gMDtcXG4tXFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIGhhc2hfbm9kZSlcXG4rXFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKVxcbiBcXHRcXHRidWNrZXRfY250Kys7XFxuIFxcbiBcXHRpZiAoYnVja2V0X2NudCBcXHUwMDI2XFx1MDAyNiAhbG9ja2VkKSB7XFxuQEAgLTE4OTcsMTQgKzE5OTUsMTQgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRpZiAoIWxvY2tlZClcXG4gXFx0XFx0Z290byBuZXh0X2JhdGNoO1xcbiBcXG4tXFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShsLCBuLCBoZWFkLCBoYXNoX25vZGUpIHtcXG4tXFx0XFx0bWVtY3B5KGRzdF9rZXksIGwtXFx1MDAzZWtleSwga2V5X3NpemUpO1xcbitcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKSB7XFxuK1xcdFxcdG1lbWNweShkc3Rfa2V5LCBodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXlfc2l6ZSk7XFxuIFxcbiBcXHRcXHRpZiAoaXNfcGVyY3B1KSB7XFxuIFxcdFxcdFxcdGludCBvZmYgPSAwLCBjcHU7XFxuIFxcdFxcdFxcdHZvaWQgX19wZXJjcHUgKnBwdHI7XFxuIFxcbi1cXHRcXHRcXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVxcdTAwM2VrZXlfc2l6ZSk7XFxuK1xcdFxcdFxcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKTtcXG4gXFx0XFx0XFx0aWYgKGVsZW1fbWFwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfQ1BVKSB7XFxuIFxcdFxcdFxcdFxcdGNwdSA9IGVsZW1fbWFwX2ZsYWdzIFxcdTAwM2VcXHUwMDNlIDMyO1xcbiBcXHRcXHRcXHRcXHRjb3B5X21hcF92YWx1ZShcXHUwMDI2aHRhYi1cXHUwMDNlbWFwLCBkc3RfdmFsLCBwZXJfY3B1X3B0cihwcHRyLCBjcHUpKTtcXG5AQCAtMTkxOCw3ICsyMDE2LDcgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0dmFsdWUgPSBodGFiX2VsZW1fdmFsdWUobCwga2V5X3NpemUpO1xcbitcXHRcXHRcXHR2YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcXG4gXFx0XFx0XFx0aWYgKGlzX2ZkX2h0YWIoaHRhYikpIHtcXG4gXFx0XFx0XFx0XFx0c3RydWN0IGJwZl9tYXAgKippbm5lcl9tYXAgPSB2YWx1ZTtcXG4gXFxuQEAgLTE5MzYsNyArMjAzNCw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcXG4gXFx0XFx0XFx0Y2hlY2tfYW5kX2luaXRfbWFwX3ZhbHVlKG1hcCwgZHN0X3ZhbCk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKGRvX2RlbGV0ZSkge1xcbi1cXHRcXHRcXHRobGlzdF9udWxsc19kZWxfcmN1KFxcdTAwMjZsLVxcdTAwM2VoYXNoX25vZGUpO1xcbitcXHRcXHRcXHRobGlzdF9udWxsc19kZWxfcmN1KFxcdTAwMjZsLVxcdTAwM2Vub2RlLmhhc2hfbm9kZSk7XFxuIFxcbiBcXHRcXHRcXHQvKiBicGZfbHJ1X3B1c2hfZnJlZSgpIHdpbGwgYWNxdWlyZSBscnVfbG9jaywgd2hpY2hcXG4gXFx0XFx0XFx0ICogbWF5IGNhdXNlIGRlYWRsb2NrLiBTZWUgY29tbWVudHMgaW4gZnVuY3Rpb25cXG5AQCAtMTk0OCw3ICsyMDQ2LDcgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRcXHRcXHQgKiBsb2NrIGJlaW5nIGhlbGQgYW5kIGl0IHZpb2xhdGVzIHRoZSBsb2NrIHJ1bGUsIHNvXFxuIFxcdFxcdFxcdCAqIGludm9rZSBmcmVlX2h0YWJfZWxlbSgpIGFmdGVyIHVubG9jayBhcyB3ZWxsLlxcbiBcXHRcXHRcXHQgKi9cXG4tXFx0XFx0XFx0bC1cXHUwMDNlYmF0Y2hfZmxpbmsgPSBub2RlX3RvX2ZyZWU7XFxuK1xcdFxcdFxcdGwtXFx1MDAzZW5vZGUuYmF0Y2hfZmxpbmsgPSBub2RlX3RvX2ZyZWU7XFxuIFxcdFxcdFxcdG5vZGVfdG9fZnJlZSA9IGw7XFxuIFxcdFxcdH1cXG4gXFx0XFx0ZHN0X2tleSArPSBrZXlfc2l6ZTtcXG5AQCAtMTk2MCw3ICsyMDU4LDcgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXG4gXFx0d2hpbGUgKG5vZGVfdG9fZnJlZSkge1xcbiBcXHRcXHRsID0gbm9kZV90b19mcmVlO1xcbi1cXHRcXHRub2RlX3RvX2ZyZWUgPSBub2RlX3RvX2ZyZWUtXFx1MDAzZWJhdGNoX2ZsaW5rO1xcbitcXHRcXHRub2RlX3RvX2ZyZWUgPSBub2RlX3RvX2ZyZWUtXFx1MDAzZW5vZGUuYmF0Y2hfZmxpbms7XFxuIFxcdFxcdGlmIChpc19scnVfbWFwKVxcbiBcXHRcXHRcXHRodGFiX2xydV9wdXNoX2ZyZWUoaHRhYiwgbCk7XFxuIFxcdFxcdGVsc2VcXG5AQCAtMjEwOCw4ICsyMjA2LDggQEAgYnBmX2hhc2hfbWFwX3NlcV9maW5kX25leHQoc3RydWN0IGJwZl9pdGVyX3NlcV9oYXNoX21hcF9pbmZvICppbmZvLFxcbiBcXHRcXHQvKiBubyB1cGRhdGUvZGVsZXRpb24gb24gdGhpcyBidWNrZXQsIHByZXZfZWxlbSBzaG91bGQgYmUgc3RpbGwgdmFsaWRcXG4gXFx0XFx0ICogYW5kIHdlIHdvbid0IHNraXAgZWxlbWVudHMuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRuID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhobGlzdF9udWxsc19uZXh0X3JjdShcXHUwMDI2cHJldl9lbGVtLVxcdTAwM2VoYXNoX25vZGUpKTtcXG4tXFx0XFx0ZWxlbSA9IGhsaXN0X251bGxzX2VudHJ5X3NhZmUobiwgc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKTtcXG4rXFx0XFx0biA9IHJjdV9kZXJlZmVyZW5jZV9yYXcoaGxpc3RfbnVsbHNfbmV4dF9yY3UoXFx1MDAyNnByZXZfZWxlbS1cXHUwMDNlbm9kZS5oYXNoX25vZGUpKTtcXG4rXFx0XFx0ZWxlbSA9IGhsaXN0X251bGxzX2VudHJ5X3NhZmUobiwgc3RydWN0IGh0YWJfZWxlbSwgbm9kZS5oYXNoX25vZGUpO1xcbiBcXHRcXHRpZiAoZWxlbSlcXG4gXFx0XFx0XFx0cmV0dXJuIGVsZW07XFxuIFxcbkBAIC0yMTI1LDcgKzIyMjMsNyBAQCBicGZfaGFzaF9tYXBfc2VxX2ZpbmRfbmV4dChzdHJ1Y3QgYnBmX2l0ZXJfc2VxX2hhc2hfbWFwX2luZm8gKmluZm8sXFxuIFxcbiBcXHRcXHRjb3VudCA9IDA7XFxuIFxcdFxcdGhlYWQgPSBcXHUwMDI2Yi1cXHUwMDNlaGVhZDtcXG4tXFx0XFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGVsZW0sIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xcbitcXHRcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UoZWxlbSwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpIHtcXG4gXFx0XFx0XFx0aWYgKGNvdW50IFxcdTAwM2U9IHNraXBfZWxlbXMpIHtcXG4gXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlYnVja2V0X2lkID0gaTtcXG4gXFx0XFx0XFx0XFx0aW5mby1cXHUwMDNlc2tpcF9lbGVtcyA9IGNvdW50O1xcbkBAIC0yMTgzLDEyICsyMjgxLDEyIEBAIHN0YXRpYyBpbnQgX19icGZfaGFzaF9tYXBfc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHN0cnVjdCBodGFiX2VsZW0gKmVsZW0pXFxuIFxcdFxcdGN0eC5tZXRhID0gXFx1MDAyNm1ldGE7XFxuIFxcdFxcdGN0eC5tYXAgPSBpbmZvLVxcdTAwM2VtYXA7XFxuIFxcdFxcdGlmIChlbGVtKSB7XFxuLVxcdFxcdFxcdGN0eC5rZXkgPSBlbGVtLVxcdTAwM2VrZXk7XFxuK1xcdFxcdFxcdGN0eC5rZXkgPSBodGFiX2VsZW1fa2V5KGluZm8tXFx1MDAzZWh0YWIsIGVsZW0pO1xcbiBcXHRcXHRcXHRpZiAoIWluZm8tXFx1MDAzZXBlcmNwdV92YWx1ZV9idWYpIHtcXG4tXFx0XFx0XFx0XFx0Y3R4LnZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIG1hcC1cXHUwMDNla2V5X3NpemUpO1xcbitcXHRcXHRcXHRcXHRjdHgudmFsdWUgPSBodGFiX2VsZW1fdmFsdWUoaW5mby1cXHUwMDNlaHRhYiwgZWxlbSk7XFxuIFxcdFxcdFxcdH0gZWxzZSB7XFxuIFxcdFxcdFxcdFxcdHJvdW5kdXBfdmFsdWVfc2l6ZSA9IHJvdW5kX3VwKG1hcC1cXHUwMDNldmFsdWVfc2l6ZSwgOCk7XFxuLVxcdFxcdFxcdFxcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBtYXAtXFx1MDAzZWtleV9zaXplKTtcXG4rXFx0XFx0XFx0XFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGluZm8tXFx1MDAzZWh0YWIsIGVsZW0pO1xcbiBcXHRcXHRcXHRcXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XFxuIFxcdFxcdFxcdFxcdFxcdGNvcHlfbWFwX3ZhbHVlX2xvbmcobWFwLCBpbmZvLVxcdTAwM2VwZXJjcHVfdmFsdWVfYnVmICsgb2ZmLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7XFxuQEAgLTIyOTIsMTQgKzIzOTAsMTQgQEAgc3RhdGljIGxvbmcgYnBmX2Zvcl9lYWNoX2hhc2hfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCBicGZfY2FsbGJhY2tfdCBjYWxsYmFja19cXG4gXFx0XFx0YiA9IFxcdTAwMjZodGFiLVxcdTAwM2VidWNrZXRzW2ldO1xcbiBcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIFxcdFxcdGhlYWQgPSBcXHUwMDI2Yi1cXHUwMDNlaGVhZDtcXG4tXFx0XFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShlbGVtLCBuLCBoZWFkLCBoYXNoX25vZGUpIHtcXG4tXFx0XFx0XFx0a2V5ID0gZWxlbS1cXHUwMDNla2V5O1xcbitcXHRcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGVsZW0sIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKSB7XFxuK1xcdFxcdFxcdGtleSA9IGh0YWJfZWxlbV9rZXkoaHRhYiwgZWxlbSk7XFxuIFxcdFxcdFxcdGlmIChpc19wZXJjcHUpIHtcXG4gXFx0XFx0XFx0XFx0LyogY3VycmVudCBjcHUgdmFsdWUgZm9yIHBlcmNwdSBtYXAgKi9cXG4tXFx0XFx0XFx0XFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGVsZW0sIG1hcC1cXHUwMDNla2V5X3NpemUpO1xcbitcXHRcXHRcXHRcXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgZWxlbSk7XFxuIFxcdFxcdFxcdFxcdHZhbCA9IHRoaXNfY3B1X3B0cihwcHRyKTtcXG4gXFx0XFx0XFx0fSBlbHNlIHtcXG4tXFx0XFx0XFx0XFx0dmFsID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIG1hcC1cXHUwMDNla2V5X3NpemUpO1xcbitcXHRcXHRcXHRcXHR2YWwgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgZWxlbSk7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0XFx0bnVtX2VsZW1zKys7XFxuIFxcdFxcdFxcdHJldCA9IGNhbGxiYWNrX2ZuKCh1NjQpKGxvbmcpbWFwLCAodTY0KShsb25nKWtleSxcXG5AQCAtMjQwMywxMCArMjUwMSwxMSBAQCBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9scnVfbWFwX29wcyA9IHtcXG4gLyogQ2FsbGVkIGZyb20gZUJQRiBwcm9ncmFtICovXFxuIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4gXFx0c3RydWN0IGh0YWJfZWxlbSAqbCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbiBcXG4gXFx0aWYgKGwpXFxuLVxcdFxcdHJldHVybiB0aGlzX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVxcdTAwM2VrZXlfc2l6ZSkpO1xcbitcXHRcXHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpKTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbkBAIC0yNDE0LDYgKzI1MTMsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcXG4gLyogaW5saW5lIGJwZl9tYXBfbG9va3VwX2VsZW0oKSBjYWxsIGZvciBwZXItQ1BVIGhhc2htYXAgKi9cXG4gc3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4gXFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XFxuIFxcbiBcXHRpZiAoIWJwZl9qaXRfc3VwcG9ydHNfcGVyY3B1X2luc24oKSlcXG5AQCAtMjQyNCw3ICsyNTI0LDcgQEAgc3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25cXG4gXFx0Kmluc24rKyA9IEJQRl9FTUlUX0NBTEwoX19odGFiX21hcF9sb29rdXBfZWxlbSk7XFxuIFxcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCBCUEZfUkVHXzAsIDAsIDMpO1xcbiBcXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCBCUEZfUkVHXzAsXFxuLVxcdFxcdFxcdFxcdG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGtleSkgKyByb3VuZHVwKG1hcC1cXHUwMDNla2V5X3NpemUsIDgpKTtcXG4rXFx0XFx0XFx0XFx0aHRhYi1cXHUwMDNla2V5X29mZnNldCArIHJvdW5kdXAobWFwLVxcdTAwM2VrZXlfc2l6ZSwgOCkpO1xcbiBcXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XFxuIFxcdCppbnNuKysgPSBCUEZfTU9WNjRfUEVSQ1BVX1JFRyhCUEZfUkVHXzAsIEJQRl9SRUdfMCk7XFxuIFxcbkBAIC0yNDMzLDYgKzI1MzMsNyBAQCBzdGF0aWMgaW50IGh0YWJfcGVyY3B1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zblxcbiBcXG4gc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1MzIgY3B1KVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4gXFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcXG4gXFxuIFxcdGlmIChjcHUgXFx1MDAzZT0gbnJfY3B1X2lkcylcXG5AQCAtMjQ0MCwxOCArMjU0MSwxOSBAQCBzdGF0aWMgdm9pZCAqaHRhYl9wZXJjcHVfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuIFxcbiBcXHRsID0gX19odGFiX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxuIFxcdGlmIChsKVxcbi1cXHRcXHRyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVxcdTAwM2VrZXlfc2l6ZSksIGNwdSk7XFxuK1xcdFxcdHJldHVybiBwZXJfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKSwgY3B1KTtcXG4gXFx0ZWxzZVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4gXFx0c3RydWN0IGh0YWJfZWxlbSAqbCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xcbiBcXG4gXFx0aWYgKGwpIHtcXG4tXFx0XFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXFx1MDAyNmwtXFx1MDAzZWxydV9ub2RlKTtcXG4tXFx0XFx0cmV0dXJuIHRoaXNfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXFx1MDAzZWtleV9zaXplKSk7XFxuK1xcdFxcdGJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsKSk7XFxuK1xcdFxcdHJldHVybiB0aGlzX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCkpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gTlVMTDtcXG5AQCAtMjQ1OSw2ICsyNTYxLDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxcbiBcXG4gc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdTMyIGNwdSlcXG4ge1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuIFxcdHN0cnVjdCBodGFiX2VsZW0gKmw7XFxuIFxcbiBcXHRpZiAoY3B1IFxcdTAwM2U9IG5yX2NwdV9pZHMpXFxuQEAgLTI0NjYsOCArMjU2OSw4IEBAIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9wZXJjcHVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprXFxuIFxcbiBcXHRsID0gX19odGFiX21hcF9sb29rdXBfZWxlbShtYXAsIGtleSk7XFxuIFxcdGlmIChsKSB7XFxuLVxcdFxcdGJwZl9scnVfbm9kZV9zZXRfcmVmKFxcdTAwMjZsLVxcdTAwM2VscnVfbm9kZSk7XFxuLVxcdFxcdHJldHVybiBwZXJfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXFx1MDAzZWtleV9zaXplKSwgY3B1KTtcXG4rXFx0XFx0YnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGwpKTtcXG4rXFx0XFx0cmV0dXJuIHBlcl9jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpLCBjcHUpO1xcbiBcXHR9XFxuIFxcbiBcXHRyZXR1cm4gTlVMTDtcXG5AQCAtMjQ3NSw2ICsyNTc4LDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtcXG4gXFxuIGludCBicGZfcGVyY3B1X2hhc2hfY29weShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxcbiB7XFxuK1xcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcXG4gXFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcXG4gXFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcXG4gXFx0aW50IHJldCA9IC1FTk9FTlQ7XFxuQEAgLTI0OTQsNyArMjU5OCw3IEBAIGludCBicGZfcGVyY3B1X2hhc2hfY29weShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsXFxuIFxcdC8qIFdlIGRvIG5vdCBtYXJrIExSVSBtYXAgZWxlbWVudCBoZXJlIGluIG9yZGVyIHRvIG5vdCBtZXNzIHVwXFxuIFxcdCAqIGV2aWN0aW9uIGhldXJpc3RpY3Mgd2hlbiB1c2VyIHNwYWNlIGRvZXMgYSBtYXAgd2Fsay5cXG4gXFx0ICovXFxuLVxcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXFx1MDAzZWtleV9zaXplKTtcXG4rXFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xcbiBcXHRpZiAobWFwX2ZsYWdzIFxcdTAwMjYgQlBGX0ZfQ1BVKSB7XFxuIFxcdFxcdGNwdSA9IG1hcF9mbGFncyBcXHUwMDNlXFx1MDAzZSAzMjtcXG4gXFx0XFx0Y29weV9tYXBfdmFsdWUobWFwLCB2YWx1ZSwgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7XFxuQEAgLTI1MzIsNiArMjYzNiw3IEBAIGludCBicGZfcGVyY3B1X2hhc2hfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXFxuIHN0YXRpYyB2b2lkIGh0YWJfcGVyY3B1X21hcF9zZXFfc2hvd19lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG4gXFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3Qgc2VxX2ZpbGUgKm0pXFxuIHtcXG4rXFx0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xcbiBcXHRzdHJ1Y3QgaHRhYl9lbGVtICpsO1xcbiBcXHR2b2lkIF9fcGVyY3B1ICpwcHRyO1xcbiBcXHRpbnQgY3B1O1xcbkBAIC0yNTQ2LDcgKzI2NTEsNyBAQCBzdGF0aWMgdm9pZCBodGFiX3BlcmNwdV9tYXBfc2VxX3Nob3dfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXFxuIFxcbiBcXHRidGZfdHlwZV9zZXFfc2hvdyhtYXAtXFx1MDAzZWJ0ZiwgbWFwLVxcdTAwM2VidGZfa2V5X3R5cGVfaWQsIGtleSwgbSk7XFxuIFxcdHNlcV9wdXRzKG0sIFxcXCI6IHtcXFxcblxcXCIpO1xcbi1cXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVxcdTAwM2VrZXlfc2l6ZSk7XFxuK1xcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKTtcXG4gXFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xcbiBcXHRcXHRzZXFfcHJpbnRmKG0sIFxcXCJcXFxcdGNwdSVkOiBcXFwiLCBjcHUpO1xcbiBcXHRcXHRidGZfdHlwZV9zZXFfc2hvdyhtYXAtXFx1MDAzZWJ0ZiwgbWFwLVxcdTAwM2VidGZfdmFsdWVfdHlwZV9pZCxcXG5AQCAtMjYxOSw4ICsyNzI0LDggQEAgc3RhdGljIHZvaWQgZmRfaHRhYl9tYXBfZnJlZShzdHJ1Y3QgYnBmX21hcCAqbWFwKVxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgaHRhYi1cXHUwMDNlbl9idWNrZXRzOyBpKyspIHtcXG4gXFx0XFx0aGVhZCA9IHNlbGVjdF9idWNrZXQoaHRhYiwgaSk7XFxuIFxcbi1cXHRcXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xcbi1cXHRcXHRcXHR2b2lkICpwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKG1hcCwgbCk7XFxuK1xcdFxcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpIHtcXG4rXFx0XFx0XFx0dm9pZCAqcHRyID0gZmRfaHRhYl9tYXBfZ2V0X3B0cihodGFiLCBsKTtcXG4gXFxuIFxcdFxcdFxcdG1hcC1cXHUwMDNlb3BzLVxcdTAwM2VtYXBfZmRfcHV0X3B0cihtYXAsIHB0ciwgZmFsc2UpO1xcbiBcXHRcXHR9XFxuQEAgLTI3MDUsNiArMjgxMCw3IEBAIHN0YXRpYyB2b2lkICpodGFiX29mX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXFxuIHN0YXRpYyBpbnQgaHRhYl9vZl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHRcXHRcXHRcXHQgIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXFxuIHtcXG4rXFx0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xcbiBcXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjtcXG4gXFx0Y29uc3QgaW50IHJldCA9IEJQRl9SRUdfMDtcXG4gXFxuQEAgLTI3MTMsNyArMjgxOSw3IEBAIHN0YXRpYyBpbnQgaHRhYl9vZl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxcbiBcXHQqaW5zbisrID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTtcXG4gXFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHJldCwgMCwgMik7XFxuIFxcdCppbnNuKysgPSBCUEZfQUxVNjRfSU1NKEJQRl9BREQsIHJldCxcXG4tXFx0XFx0XFx0XFx0b2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwga2V5KSArXFxuK1xcdFxcdFxcdFxcdGh0YWItXFx1MDAzZWtleV9vZmZzZXQgK1xcbiBcXHRcXHRcXHRcXHRyb3VuZF91cChtYXAtXFx1MDAzZWtleV9zaXplLCA4KSk7XFxuIFxcdCppbnNuKysgPSBCUEZfTERYX01FTShCUEZfRFcsIHJldCwgcmV0LCAwKTtcXG4gXFxuQEAgLTMxMTIsNyArMzIxOCw3IEBAIHN0YXRpYyBpbnQgcmh0YWJfbWFwX2NoZWNrX2J0ZihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBjb25zdCBzdHJ1Y3QgYnRmICpidGYsXFxuIHtcXG4gXFx0c3RydWN0IGJwZl9yaHRhYiAqcmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX3JodGFiLCBtYXApO1xcbiBcXG4tXFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFxcdTAwMjZyaHRhYi1cXHUwMDNlbWEsIHJodGFiX21lbV9kdG9yKTtcXG4rXFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFxcdTAwMjZyaHRhYi1cXHUwMDNlbWEsIHJodGFiX21lbV9kdG9yLCBvZmZzZXRvZihzdHJ1Y3Qgcmh0YWJfZWxlbSwgZGF0YSkpO1xcbiB9XFxuIFxcbiBzdGF0aWMgdm9pZCByaHRhYl9tYXBfZnJlZV9pbnRlcm5hbF9zdHJ1Y3RzKHN0cnVjdCBicGZfbWFwICptYXApXFxuQEAgLTM1MzMsMyArMzYzOSwxNiBAQCBjb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgcmh0YWJfbWFwX29wcyA9IHtcXG4gXFx0Lm1hcF9idGZfaWQgPSBcXHUwMDI2cmh0YWJfbWFwX2J0Zl9pZHNbMF0sXFxuIFxcdC5pdGVyX3NlcV9pbmZvID0gXFx1MDAyNnJoYXNoX2l0ZXJfc2VxX2luZm8sXFxuIH07XFxuK1xcbitzaXplX3QgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSh2b2lkKVxcbit7XFxuK1xcdHJldHVybiBzaXplb2Yoc3RydWN0IGJwZl9odGFiKTtcXG4rfVxcbitcXG4rdm9pZCBicGZfaHRhYl9tYXBfbWV0YV9pbml0KHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXBfbWV0YSwgc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcClcXG4re1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmlubmVyX2h0YWJfbWV0YSA9IGNvbnRhaW5lcl9vZihpbm5lcl9tYXBfbWV0YSwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xcbitcXHRzdHJ1Y3QgYnBmX2h0YWIgKmlubmVyX2h0YWIgPSBjb250YWluZXJfb2YoaW5uZXJfbWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XFxuK1xcbitcXHRpbm5lcl9odGFiX21ldGEtXFx1MDAzZWtleV9vZmZzZXQgPSBpbm5lcl9odGFiLVxcdTAwM2VrZXlfb2Zmc2V0O1xcbit9XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9icGYvbWFwX2luX21hcC5jIGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmNcXG5pbmRleCBkMmNiYWI0YmRmNjQ0Li5iMmRiNWQwYzk4YmVlIDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9icGYvbWFwX2luX21hcC5jXFxuKysrIGIva2VybmVsL2JwZi9tYXBfaW5fbWFwLmNcXG5AQCAtNyw2ICs3LDE1IEBAXFxuIFxcbiAjaW5jbHVkZSBcXFwibWFwX2luX21hcC5oXFxcIlxcbiBcXG4rc3RhdGljIGJvb2wgYnBmX21hcF90eXBlX2lzX2h0YWIoZW51bSBicGZfbWFwX3R5cGUgdHlwZSlcXG4re1xcbitcXHRyZXR1cm4gdHlwZSA9PSBCUEZfTUFQX1RZUEVfSEFTSCB8fFxcbitcXHQgICAgICAgdHlwZSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0ggfHxcXG4rXFx0ICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX0xSVV9IQVNIIHx8XFxuK1xcdCAgICAgICB0eXBlID09IEJQRl9NQVBfVFlQRV9MUlVfUEVSQ1BVX0hBU0ggfHxcXG4rXFx0ICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX0hBU0hfT0ZfTUFQUztcXG4rfVxcbitcXG4gc3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfbWV0YV9hbGxvYyhpbnQgaW5uZXJfbWFwX3VmZClcXG4ge1xcbiBcXHRzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwLCAqaW5uZXJfbWFwX21ldGE7XFxuQEAgLTI5LDYgKzM4LDggQEAgc3RydWN0IGJwZl9tYXAgKmJwZl9tYXBfbWV0YV9hbGxvYyhpbnQgaW5uZXJfbWFwX3VmZClcXG4gXFx0LyogSW4gc29tZSBjYXNlcyB2ZXJpZmllciBuZWVkcyB0byBhY2Nlc3MgYmV5b25kIGp1c3QgYmFzZSBtYXAuICovXFxuIFxcdGlmIChpbm5lcl9tYXAtXFx1MDAzZW9wcyA9PSBcXHUwMDI2YXJyYXlfbWFwX29wcyB8fCBpbm5lcl9tYXAtXFx1MDAzZW9wcyA9PSBcXHUwMDI2cGVyY3B1X2FycmF5X21hcF9vcHMpXFxuIFxcdFxcdGlubmVyX21hcF9tZXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IGJwZl9hcnJheSk7XFxuK1xcdGVsc2UgaWYgKGJwZl9tYXBfdHlwZV9pc19odGFiKGlubmVyX21hcC1cXHUwMDNlbWFwX3R5cGUpKVxcbitcXHRcXHRpbm5lcl9tYXBfbWV0YV9zaXplID0gYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSgpO1xcbiBcXG4gXFx0aW5uZXJfbWFwX21ldGEgPSBremFsbG9jKGlubmVyX21hcF9tZXRhX3NpemUsIEdGUF9VU0VSKTtcXG4gXFx0aWYgKCFpbm5lcl9tYXBfbWV0YSlcXG5AQCAtNzAsNiArODEsOCBAQCBzdHJ1Y3QgYnBmX21hcCAqYnBmX21hcF9tZXRhX2FsbG9jKGludCBpbm5lcl9tYXBfdWZkKVxcbiBcXHRcXHRpbm5lcl9hcnJheV9tZXRhLVxcdTAwM2VpbmRleF9tYXNrID0gaW5uZXJfYXJyYXktXFx1MDAzZWluZGV4X21hc2s7XFxuIFxcdFxcdGlubmVyX2FycmF5X21ldGEtXFx1MDAzZWVsZW1fc2l6ZSA9IGlubmVyX2FycmF5LVxcdTAwM2VlbGVtX3NpemU7XFxuIFxcdFxcdGlubmVyX21hcF9tZXRhLVxcdTAwM2VieXBhc3Nfc3BlY192MSA9IGlubmVyX21hcC1cXHUwMDNlYnlwYXNzX3NwZWNfdjE7XFxuK1xcdH0gZWxzZSBpZiAoYnBmX21hcF90eXBlX2lzX2h0YWIoaW5uZXJfbWFwLVxcdTAwM2VtYXBfdHlwZSkpIHtcXG4rXFx0XFx0YnBmX2h0YWJfbWFwX21ldGFfaW5pdChpbm5lcl9tYXBfbWV0YSwgaW5uZXJfbWFwKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gaW5uZXJfbWFwX21ldGE7XFxuIH1cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9tYXBfaW5fbWFwLmggYi9rZXJuZWwvYnBmL21hcF9pbl9tYXAuaFxcbmluZGV4IDdkNjE2MDIzNTRkZTguLjFlZGMyMDU3NzJkOGMgMTAwNjQ0XFxuLS0tIGEva2VybmVsL2JwZi9tYXBfaW5fbWFwLmhcXG4rKysgYi9rZXJuZWwvYnBmL21hcF9pbl9tYXAuaFxcbkBAIC0xNSw1ICsxNSw3IEBAIHZvaWQgKmJwZl9tYXBfZmRfZ2V0X3B0cihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgZmlsZSAqbWFwX2ZpbGUsXFxuIFxcdFxcdFxcdCBpbnQgdWZkKTtcXG4gdm9pZCBicGZfbWFwX2ZkX3B1dF9wdHIoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqcHRyLCBib29sIG5lZWRfZGVmZXIpO1xcbiB1MzIgYnBmX21hcF9mZF9zeXNfbG9va3VwX2VsZW0odm9pZCAqcHRyKTtcXG4rc2l6ZV90IGJwZl9odGFiX21hcF9tZXRhX3NpemUodm9pZCk7XFxuK3ZvaWQgYnBmX2h0YWJfbWFwX21ldGFfaW5pdChzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwX21ldGEsIHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXApO1xcbiBcXG4gI2VuZGlmXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL2JwZi9wcm9ncy9tYXBfcHRyX2tlcm4uY1xcbmluZGV4IDM3M2M4ZDE3ZWE1NTcuLjZiZDRjYjY4YzIwYzEgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jXFxuQEAgLTExNCw3ICsxMTQsNyBAQCBzdGF0aWMgaW5saW5lIGludCBjaGVja19oYXNoKHZvaWQpXFxuIFxcdFZFUklGWShjaGVja19kZWZhdWx0X25vaW5saW5lKFxcdTAwMjZoYXNoLVxcdTAwM2VtYXAsIG1hcCkpO1xcbiBcXG4gXFx0VkVSSUZZKGhhc2gtXFx1MDAzZW5fYnVja2V0cyA9PSBNQVhfRU5UUklFUyk7XFxuLVxcdFZFUklGWShoYXNoLVxcdTAwM2VlbGVtX3NpemUgPT0gNjQpO1xcbitcXHRWRVJJRlkoaGFzaC1cXHUwMDNlZWxlbV9zaXplID09IDMyKTtcXG4gXFxuIFxcdFZFUklGWShoYXNoLVxcdTAwM2Vjb3VudC5jb3VudGVyID09IDApO1xcbiBcXHRWRVJJRlkoYnBmX21hcF9zdW1fZWxlbV9jb3VudChtYXApID09IDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMDo0MzozMy4wMjA2Nzg1NjlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0ODExMzc2NjYwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh0YWJfbWFwX2FsbG9jXCIsXG4gICAgXCJodGFiX21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtXCIsXG4gICAgXCJodGFiX21hcF9kZWxldGVfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtXCIsXG4gICAgXCJodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW1cIixcbiAgICBcImh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW1cIixcbiAgICBcImh0YWJfbWFwX2dldF9uZXh0X2tleVwiLFxuICAgIFwiX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJicGZfbWFwX21ldGFfYWxsb2NcIixcbiAgICBcImJwZl9odGFiX21hcF9tZXRhX2luaXRcIixcbiAgICBcImJwZl9odGFiX21hcF9tZXRhX3NpemVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgdGhlIG1lbW9yeSBsYXlvdXQgb2YgQlBGIGhhc2ggbWFwIGVsZW1lbnRzIGJ5IGNvbmRpdGlvbmFsbHkgcmVtb3ZpbmcgdGhlIGhhc2ggdmFsdWUgZmllbGQgd2hlbiBpdCdzIG5vdCBuZWVkZWQuIEl0IGludHJvZHVjZXMgYGtleV9vZmZzZXRgIHRvIGR5bmFtaWNhbGx5IGNvbXB1dGUgdGhlIG9mZnNldCBvZiB0aGUga2V5IGFuZCB2YWx1ZSB3aXRoaW4gdGhlIGVsZW1lbnQuIEl0IGFsc28gbW9kaWZpZXMgYG1hcF9pbl9tYXAuY2AgdG8gcHJvcGFnYXRlIHRoaXMgb2Zmc2V0IGZvciBpbm5lciBtYXBzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIGhhc2ggbWFwIGltcGxlbWVudGF0aW9uIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDFiN2NiNjY3ZmYyNzA0YjZiOTg1OGY5ZDZiMzAxYTU1NGVmMmViMDNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAxIDEwOjQzOjMxIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEva2VybmVsL2JwZi9oYXNodGFiLmMgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuaW5kZXggOWYzOTRlMWFhMmU4NS4uODJiMTliZDU0MzEwOSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9icGYvaGFzaHRhYi5jXG4rKysgYi9rZXJuZWwvYnBmL2hhc2h0YWIuY1xuQEAgLTEwMCwxMyArMTAwLDE2IEBAIHN0cnVjdCBicGZfaHRhYiB7XG4gXHRzdHJ1Y3QgcGVyY3B1X2NvdW50ZXIgcGNvdW50O1xuIFx0YXRvbWljX3QgY291bnQ7XG4gXHRib29sIHVzZV9wZXJjcHVfY291bnRlcjtcbitcdGJvb2wgaGFzX2hhc2g7XG4gXHR1MzIgbl9idWNrZXRzO1x0LyogbnVtYmVyIG9mIGhhc2ggYnVja2V0cyAqL1xuIFx0dTMyIGVsZW1fc2l6ZTtcdC8qIHNpemUgb2YgZWFjaCBlbGVtZW50IGluIGJ5dGVzICovXG4rXHR1MzIga2V5X29mZnNldDtcdC8qIG9mZnNldCBvZiBrZXkgaW4gYnl0ZXMgKi9cbiBcdHUzMiBoYXNocm5kO1xuIH07XG4gXG4gLyogZWFjaCBodGFiIGVsZW1lbnQgaXMgc3RydWN0IGh0YWJfZWxlbSArIGtleSArIHZhbHVlICovXG4tc3RydWN0IGh0YWJfZWxlbSB7XG4rc3RydWN0IGh0YWJfZWxlbTtcbitzdHJ1Y3QgaHRhYl9ub2RlIHtcbiBcdHVuaW9uIHtcbiBcdFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgaGFzaF9ub2RlO1xuIFx0XHRzdHJ1Y3Qge1xuQEAgLTExNywxOCArMTIwLDMyIEBAIHN0cnVjdCBodGFiX2VsZW0ge1xuIFx0XHRcdH07XG4gXHRcdH07XG4gXHR9O1xuLVx0dW5pb24ge1xuLVx0XHQvKiBwb2ludGVyIHRvIHBlci1jcHUgcG9pbnRlciAqL1xuLVx0XHR2b2lkICpwdHJfdG9fcHB0cjtcbi1cdFx0c3RydWN0IGJwZl9scnVfbm9kZSBscnVfbm9kZTtcbi1cdH07XG4tXHR1MzIgaGFzaDtcbi1cdGNoYXIga2V5W10gX19hbGlnbmVkKDgpO1xuK307XG4rXG4rc3RydWN0IGh0YWJfZWxlbSB7XG4rXHRzdHJ1Y3QgaHRhYl9ub2RlIG5vZGU7XG4rXHR1OCBkYXRhW10gX19hbGlnbmVkKDgpO1xuK307XG4rXG4rc3RydWN0IGh0YWJfZWxlbV9scnUge1xuK1x0c3RydWN0IGh0YWJfbm9kZSBub2RlO1xuK1x0c3RydWN0IGJwZl9scnVfbm9kZSBscnVfbm9kZTtcbitcdHU4IGRhdGFbXSBfX2FsaWduZWQoOCk7XG4rfTtcbitcbisvKiBPbmx5IGZvciBub24tcHJlYWxsb2NhdGVkIFBDUFUgbWFwcy4gUHJlYWxsb2NhdGVkIFBDUFUgbWFwcyBkb24ndCBuZWVkXG4rICogcHRyX3RvX3BwdHIsIGFuZCB1c2UgaHRhYl9lbGVtLlxuKyAqL1xuK3N0cnVjdCBodGFiX2VsZW1fcGNwdSB7XG4rXHRzdHJ1Y3QgaHRhYl9ub2RlIG5vZGU7XG4rXHR2b2lkICpwdHJfdG9fcHB0cjtcbitcdHU4IGRhdGFbXSBfX2FsaWduZWQoOCk7XG4gfTtcbiBcbiBzdHJ1Y3QgaHRhYl9idGZfcmVjb3JkIHtcbiBcdHN0cnVjdCBidGZfcmVjb3JkICpyZWNvcmQ7XG4gXHR1MzIga2V5X3NpemU7XG4rXHR1MzIga2V5X29mZnNldDtcbiB9O1xuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCBodGFiX2lzX3ByZWFsbG9jKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbkBAIC0xMzYsNiArMTUzLDIxIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBodGFiX2lzX3ByZWFsbG9jKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdHJldHVybiAhKGh0YWItXHUwMDNlbWFwLm1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfTk9fUFJFQUxMT0MpO1xuIH1cbiBcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBicGZfbHJ1X25vZGUgKmh0YWJfZWxlbV9scnVfbm9kZShzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuK3tcbitcdHJldHVybiBcdTAwMjYoKHN0cnVjdCBodGFiX2VsZW1fbHJ1ICopbCktXHUwMDNlbHJ1X25vZGU7XG4rfVxuK1xuK3N0YXRpYyBpbmxpbmUgdm9pZCAqaHRhYl9lbGVtX2dldF9wdHJfdG9fcHB0cihzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuK3tcbitcdHJldHVybiAoKHN0cnVjdCBodGFiX2VsZW1fcGNwdSAqKWwpLVx1MDAzZXB0cl90b19wcHRyO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9wdHJfdG9fcHB0cihzdHJ1Y3QgaHRhYl9lbGVtICpsLCB2b2lkICpwdHIpXG4re1xuK1x0KChzdHJ1Y3QgaHRhYl9lbGVtX3BjcHUgKilsKS1cdTAwM2VwdHJfdG9fcHB0ciA9IHB0cjtcbit9XG4rXG4gc3RhdGljIHZvaWQgaHRhYl9pbml0X2J1Y2tldHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIHtcbiBcdHVuc2lnbmVkIGludCBpO1xuQEAgLTE4MywyNSArMjE1LDMwIEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBpc19mZF9odGFiKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdHJldHVybiBodGFiLVx1MDAzZW1hcC5tYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfSEFTSF9PRl9NQVBTO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV92YWx1ZShzdHJ1Y3QgaHRhYl9lbGVtICpsLCB1MzIga2V5X3NpemUpXG4rc3RhdGljIGlubGluZSB2b2lkICpodGFiX2VsZW1fa2V5KHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbClcbit7XG4rXHRyZXR1cm4gKHZvaWQgKilsICsgaHRhYi1cdTAwM2VrZXlfb2Zmc2V0O1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgKmh0YWJfZWxlbV92YWx1ZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4ge1xuLVx0cmV0dXJuIGwtXHUwMDNla2V5ICsgcm91bmRfdXAoa2V5X3NpemUsIDgpO1xuK1x0cmV0dXJuIGh0YWJfZWxlbV9rZXkoaHRhYiwgbCkgKyByb3VuZF91cChodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSwgOCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBodGFiX2VsZW1fc2V0X3B0cihzdHJ1Y3QgaHRhYl9lbGVtICpsLCB1MzIga2V5X3NpemUsXG4rc3RhdGljIGlubGluZSB2b2lkIGh0YWJfZWxlbV9zZXRfcHRyKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCxcbiBcdFx0XHRcdCAgICAgdm9pZCBfX3BlcmNwdSAqcHB0cilcbiB7XG4tXHQqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGwsIGtleV9zaXplKSA9IHBwdHI7XG4rXHQqKHZvaWQgX19wZXJjcHUgKiopaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpID0gcHB0cjtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIF9fcGVyY3B1ICpodGFiX2VsZW1fZ2V0X3B0cihzdHJ1Y3QgaHRhYl9lbGVtICpsLCB1MzIga2V5X3NpemUpXG4rc3RhdGljIGlubGluZSB2b2lkIF9fcGVyY3B1ICpodGFiX2VsZW1fZ2V0X3B0cihzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4ge1xuLVx0cmV0dXJuICoodm9pZCBfX3BlcmNwdSAqKilodGFiX2VsZW1fdmFsdWUobCwga2V5X3NpemUpO1xuK1x0cmV0dXJuICoodm9pZCBfX3BlcmNwdSAqKilodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkICpmZF9odGFiX21hcF9nZXRfcHRyKGNvbnN0IHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4rc3RhdGljIHZvaWQgKmZkX2h0YWJfbWFwX2dldF9wdHIoc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuIHtcbi1cdHJldHVybiAqKHZvaWQgKiopaHRhYl9lbGVtX3ZhbHVlKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRyZXR1cm4gKih2b2lkICoqKWh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcbiB9XG4gXG4gc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmdldF9odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCBpbnQgaSlcbkBAIC0yMDksNiArMjQ2LDMzIEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpnZXRfaHRhYl9lbGVtKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgaW50IGkpXG4gXHRyZXR1cm4gKHN0cnVjdCBodGFiX2VsZW0gKikgKGh0YWItXHUwMDNlZWxlbXMgKyBpICogKHU2NClodGFiLVx1MDAzZWVsZW1fc2l6ZSk7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBodGFiX2hhc19oYXNoKGNvbnN0IHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbit7XG4rXHRyZXR1cm4gaHRhYi1cdTAwM2VoYXNfaGFzaDtcbit9XG4rXG4rc3RhdGljIGlubGluZSB1MzIgaHRhYl9lbGVtX2hhc2goc3RydWN0IGJwZl9odGFiICpodGFiLCBzdHJ1Y3QgaHRhYl9lbGVtICpsKVxuK3tcbitcdGlmIChodGFiX2lzX2xydShodGFiKSlcbitcdFx0cmV0dXJuICoodTMyICopKChzdHJ1Y3QgaHRhYl9lbGVtX2xydSAqKWwpLVx1MDAzZWRhdGE7XG4rXHRlbHNlIGlmIChodGFiX2lzX3BlcmNwdShodGFiKSBcdTAwMjZcdTAwMjYgIWh0YWJfaXNfcHJlYWxsb2MoaHRhYikpXG4rXHRcdHJldHVybiAqKHUzMiAqKSgoc3RydWN0IGh0YWJfZWxlbV9wY3B1ICopbCktXHUwMDNlZGF0YTtcbitcdGVsc2VcbitcdFx0cmV0dXJuICoodTMyICopbC1cdTAwM2VkYXRhO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgaHRhYl9lbGVtX3NldF9oYXNoKHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgc3RydWN0IGh0YWJfZWxlbSAqbCwgdTMyIGhhc2gpXG4re1xuK1x0aWYgKCFodGFiX2hhc19oYXNoKGh0YWIpKVxuK1x0XHRyZXR1cm47XG4rXHRpZiAoaHRhYl9pc19scnUoaHRhYikpXG4rXHRcdCoodTMyICopKChzdHJ1Y3QgaHRhYl9lbGVtX2xydSAqKWwpLVx1MDAzZWRhdGEgPSBoYXNoO1xuK1x0ZWxzZSBpZiAoaHRhYl9pc19wZXJjcHUoaHRhYikgXHUwMDI2XHUwMDI2ICFodGFiX2lzX3ByZWFsbG9jKGh0YWIpKVxuK1x0XHQqKHUzMiAqKSgoc3RydWN0IGh0YWJfZWxlbV9wY3B1ICopbCktXHUwMDNlZGF0YSA9IGhhc2g7XG4rXHRlbHNlXG4rXHRcdCoodTMyICopbC1cdTAwM2VkYXRhID0gaGFzaDtcbit9XG4rXG4gLyogQm90aCBwZXJjcHUgYW5kIGZkIGh0YWIgc3VwcG9ydCBpbi1wbGFjZSB1cGRhdGUsIHNvIG5vIG5lZWQgZm9yXG4gICogZXh0cmEgZWxlbS4gTFJVIGl0c2VsZiBjYW4gcmVtb3ZlIHRoZSBsZWFzdCB1c2VkIGVsZW1lbnQsIHNvXG4gICogdGhlcmUgaXMgbm8gbmVlZCBmb3IgYW4gZXh0cmEgZWxlbSBkdXJpbmcgbWFwX3VwZGF0ZS5cbkBAIC0yMzEsNyArMjk1LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfaW50ZXJuYWxfc3RydWN0cyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4gXG4gXHRcdGVsZW0gPSBnZXRfaHRhYl9lbGVtKGh0YWIsIGkpO1xuIFx0XHRicGZfbWFwX2ZyZWVfaW50ZXJuYWxfc3RydWN0cyhcdTAwMjZodGFiLVx1MDAzZW1hcCxcbi1cdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4rXHRcdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBlbGVtKSk7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuIH1cbkBAIC0yNTQsNyArMzE4LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX3ByZWFsbG9jZWRfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcbiBcdFx0ZWxlbSA9IGdldF9odGFiX2VsZW0oaHRhYiwgaSk7XG4gXHRcdGlmIChodGFiX2lzX3BlcmNwdShodGFiKSkge1xuLVx0XHRcdHZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSk7XG4rXHRcdFx0dm9pZCBfX3BlcmNwdSAqcHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGVsZW0pO1xuIFx0XHRcdGludCBjcHU7XG4gXG4gXHRcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuQEAgLTI2Myw3ICszMjcsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2ZyZWVfcHJlYWxsb2NlZF9maWVsZHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0XHRcdH1cbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHRicGZfb2JqX2ZyZWVfZmllbGRzKGh0YWItXHUwMDNlbWFwLnJlY29yZCxcbi1cdFx0XHRcdFx0ICAgIGh0YWJfZWxlbV92YWx1ZShlbGVtLCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSkpO1xuK1x0XHRcdFx0XHQgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pKTtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiBcdFx0fVxuIFx0XHRjb25kX3Jlc2NoZWQoKTtcbkBAIC0yODAsOCArMzQ0LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX2VsZW1zKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGh0YWItXHUwMDNlbWFwLm1heF9lbnRyaWVzOyBpKyspIHtcbiBcdFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcbiBcbi1cdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGdldF9odGFiX2VsZW0oaHRhYiwgaSksXG4tXHRcdFx0XHRcdCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSk7XG4rXHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBnZXRfaHRhYl9lbGVtKGh0YWIsIGkpKTtcbiBcdFx0ZnJlZV9wZXJjcHUocHB0cik7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuQEAgLTMwOCw4ICszNzEsOCBAQCBzdGF0aWMgc3RydWN0IGh0YWJfZWxlbSAqcHJlYWxsb2NfbHJ1X3BvcChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcbiBcbiBcdGlmIChub2RlKSB7XG4gXHRcdGJwZl9tYXBfaW5jX2VsZW1fY291bnQoXHUwMDI2aHRhYi1cdTAwM2VtYXApO1xuLVx0XHRsID0gY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW0sIGxydV9ub2RlKTtcbi1cdFx0bWVtY3B5KGwtXHUwMDNla2V5LCBrZXksIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKTtcbitcdFx0bCA9IChzdHJ1Y3QgaHRhYl9lbGVtICopY29udGFpbmVyX29mKG5vZGUsIHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSk7XG4rXHRcdG1lbWNweShodGFiX2VsZW1fa2V5KGh0YWIsIGwpLCBrZXksIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKTtcbiBcdFx0cmV0dXJuIGw7XG4gXHR9XG4gXG5AQCAtMzQwLDggKzQwMyw3IEBAIHN0YXRpYyBpbnQgcHJlYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4gXHRcdFx0XHRcdCAgICBHRlBfVVNFUiB8IF9fR0ZQX05PV0FSTik7XG4gXHRcdGlmICghcHB0cilcbiBcdFx0XHRnb3RvIGZyZWVfZWxlbXM7XG4tXHRcdGh0YWJfZWxlbV9zZXRfcHRyKGdldF9odGFiX2VsZW0oaHRhYiwgaSksIGh0YWItXHUwMDNlbWFwLmtleV9zaXplLFxuLVx0XHRcdFx0ICBwcHRyKTtcbitcdFx0aHRhYl9lbGVtX3NldF9wdHIoaHRhYiwgZ2V0X2h0YWJfZWxlbShodGFiLCBpKSwgcHB0cik7XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuIFx0fVxuIFxuQEAgLTM0OSw4ICs0MTEsOCBAQCBzdGF0aWMgaW50IHByZWFsbG9jX2luaXQoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0aWYgKGh0YWJfaXNfbHJ1KGh0YWIpKVxuIFx0XHRlcnIgPSBicGZfbHJ1X2luaXQoXHUwMDI2aHRhYi1cdTAwM2VscnUsXG4gXHRcdFx0XHQgICBodGFiLVx1MDAzZW1hcC5tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX05PX0NPTU1PTl9MUlUsXG4tXHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoKSAtXG4tXHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBscnVfbm9kZSksXG4rXHRcdFx0XHQgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgZGF0YSkgLVxuK1x0XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSxcbiBcdFx0XHRcdCAgIGh0YWJfbHJ1X21hcF9kZWxldGVfbm9kZSxcbiBcdFx0XHRcdCAgIGh0YWIpO1xuIFx0ZWxzZVxuQEAgLTM2MSwxMSArNDIzLDExIEBAIHN0YXRpYyBpbnQgcHJlYWxsb2NfaW5pdChzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4gXG4gXHRpZiAoaHRhYl9pc19scnUoaHRhYikpXG4gXHRcdGJwZl9scnVfcG9wdWxhdGUoXHUwMDI2aHRhYi1cdTAwM2VscnUsIGh0YWItXHUwMDNlZWxlbXMsXG4tXHRcdFx0XHQgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpLFxuK1x0XHRcdFx0IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fbHJ1LCBscnVfbm9kZSksXG4gXHRcdFx0XHQgaHRhYi1cdTAwM2VlbGVtX3NpemUsIG51bV9lbnRyaWVzKTtcbiBcdGVsc2VcbiBcdFx0cGNwdV9mcmVlbGlzdF9wb3B1bGF0ZShcdTAwMjZodGFiLVx1MDAzZWZyZWVsaXN0LFxuLVx0XHRcdFx0ICAgICAgIGh0YWItXHUwMDNlZWxlbXMgKyBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBmbm9kZSksXG4rXHRcdFx0XHQgICAgICAgaHRhYi1cdTAwM2VlbGVtcyArIG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIG5vZGUuZm5vZGUpLFxuIFx0XHRcdFx0ICAgICAgIGh0YWItXHUwMDNlZWxlbV9zaXplLCBudW1fZW50cmllcyk7XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC00MDEsNyArNDYzLDcgQEAgc3RhdGljIGludCBhbGxvY19leHRyYV9lbGVtcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXG4gXHRcdC8qIHBvcCB3aWxsIHN1Y2NlZWQsIHNpbmNlIHByZWFsbG9jX2luaXQoKVxuIFx0XHQgKiBwcmVhbGxvY2F0ZWQgZXh0cmEgbnVtX3Bvc3NpYmxlX2NwdXMgZWxlbWVudHNcbiBcdFx0ICovXG4tXHRcdGxfbmV3ID0gY29udGFpbmVyX29mKGwsIHN0cnVjdCBodGFiX2VsZW0sIGZub2RlKTtcbitcdFx0bF9uZXcgPSBjb250YWluZXJfb2YobCwgc3RydWN0IGh0YWJfZWxlbSwgbm9kZS5mbm9kZSk7XG4gXHRcdCpwZXJfY3B1X3B0cihwcHRyLCBjcHUpID0gbF9uZXc7XG4gXHR9XG4gXHRodGFiLVx1MDAzZWV4dHJhX2VsZW1zID0gcHB0cjtcbkBAIC00MjUsOCArNDg3LDggQEAgc3RhdGljIGludCBodGFiX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcbiBcdGJvb2wgemVyb19zZWVkID0gKGF0dHItXHUwMDNlbWFwX2ZsYWdzIFx1MDAyNiBCUEZfRl9aRVJPX1NFRUQpO1xuIFx0aW50IG51bWFfbm9kZSA9IGJwZl9tYXBfYXR0cl9udW1hX25vZGUoYXR0cik7XG4gXG4tXHRCVUlMRF9CVUdfT04ob2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgZm5vZGUubmV4dCkgIT1cbi1cdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBoYXNoX25vZGUucHByZXYpKTtcbitcdEJVSUxEX0JVR19PTihvZmZzZXRvZihzdHJ1Y3QgaHRhYl9ub2RlLCBmbm9kZS5uZXh0KSAhPVxuK1x0XHQgICAgIG9mZnNldG9mKHN0cnVjdCBodGFiX25vZGUsIGhhc2hfbm9kZS5wcHJldikpO1xuIFxuIFx0aWYgKHplcm9fc2VlZCBcdTAwMjZcdTAwMjYgIWNhcGFibGUoQ0FQX1NZU19BRE1JTikpXG4gXHRcdC8qIEd1YXJkIGFnYWluc3QgbG9jYWwgRG9TLCBhbmQgZGlzY291cmFnZSBwcm9kdWN0aW9uIHVzZS4gKi9cbkBAIC00NzYsNyArNTM4LDcgQEAgc3RhdGljIHZvaWQgaHRhYl9tZW1fZHRvcih2b2lkICpvYmosIHZvaWQgKmN0eClcbiBcdGlmIChJU19FUlJfT1JfTlVMTChocmVjLVx1MDAzZXJlY29yZCkpXG4gXHRcdHJldHVybjtcbiBcbi1cdG1hcF92YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShlbGVtLCBocmVjLVx1MDAzZWtleV9zaXplKTtcbitcdG1hcF92YWx1ZSA9ICh2b2lkICopZWxlbSArIGhyZWMtXHUwMDNla2V5X29mZnNldCArIHJvdW5kX3VwKGhyZWMtXHUwMDNla2V5X3NpemUsIDgpO1xuIFx0YnBmX29ial9mcmVlX2ZpZWxkcyhocmVjLVx1MDAzZXJlY29yZCwgbWFwX3ZhbHVlKTtcbiB9XG4gXG5AQCAtNTAyLDcgKzU2NCw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfZHRvcl9jdHhfZnJlZSh2b2lkICpjdHgpXG4gfVxuIFxuIHN0YXRpYyBpbnQgYnBmX21hX3NldF9kdG9yKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfbWVtX2FsbG9jICptYSxcbi1cdFx0XHQgICB2b2lkICgqZHRvcikodm9pZCAqLCB2b2lkICopKVxuK1x0XHRcdCAgIHZvaWQgKCpkdG9yKSh2b2lkICosIHZvaWQgKiksIHUzMiBrZXlfb2Zmc2V0KVxuIHtcbiBcdHN0cnVjdCBodGFiX2J0Zl9yZWNvcmQgKmhyZWM7XG4gXHRpbnQgZXJyO1xuQEAgLTUxNSw2ICs1NzcsNyBAQCBzdGF0aWMgaW50IGJwZl9tYV9zZXRfZHRvcihzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX21lbV9hbGxvYyAqbWEsXG4gXHRpZiAoIWhyZWMpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFx0aHJlYy1cdTAwM2VrZXlfc2l6ZSA9IG1hcC1cdTAwM2VrZXlfc2l6ZTtcbitcdGhyZWMtXHUwMDNla2V5X29mZnNldCA9IGtleV9vZmZzZXQ7XG4gXHRocmVjLVx1MDAzZXJlY29yZCA9IGJ0Zl9yZWNvcmRfZHVwKG1hcC1cdTAwM2VyZWNvcmQpO1xuIFx0aWYgKElTX0VSUihocmVjLVx1MDAzZXJlY29yZCkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUihocmVjLVx1MDAzZXJlY29yZCk7XG5AQCAtNTM3LDkgKzYwMCw5IEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiBcdCAqIHBvcHVsYXRlZCBpbiBodGFiX21hcF9hbGxvYygpLCBzbyBpdCB3aWxsIGFsd2F5cyBhcHBlYXIgYXMgTlVMTC5cbiBcdCAqL1xuIFx0aWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpKVxuLVx0XHRyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgXHUwMDI2aHRhYi1cdTAwM2VwY3B1X21hLCBodGFiX3BjcHVfbWVtX2R0b3IpO1xuK1x0XHRyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgXHUwMDI2aHRhYi1cdTAwM2VwY3B1X21hLCBodGFiX3BjcHVfbWVtX2R0b3IsIGh0YWItXHUwMDNla2V5X29mZnNldCk7XG4gXHRlbHNlXG4tXHRcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZodGFiLVx1MDAzZW1hLCBodGFiX21lbV9kdG9yKTtcbitcdFx0cmV0dXJuIGJwZl9tYV9zZXRfZHRvcihtYXAsIFx1MDAyNmh0YWItXHUwMDNlbWEsIGh0YWJfbWVtX2R0b3IsIGh0YWItXHUwMDNla2V5X29mZnNldCk7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXG5AQCAtNTYyLDYgKzYyNSwxMiBAQCBzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuIFxuIFx0YnBmX21hcF9pbml0X2Zyb21fYXR0cihcdTAwMjZodGFiLVx1MDAzZW1hcCwgYXR0cik7XG4gXG4rXHQvKiBBdm9pZCBoYXNoIG1lbW9yeSB1c2UgYW5kIGNvbXBhcmlzb25zIHdoZXJlIHVubmVjZXNzYXJ5LlxuK1x0ICogdTMyIGhhc2ggcmVhZHMgYXJlIGFsd2F5cyBhdG9taWMuIElmIHdlIGVsaWRlIHRoZW0sIGtleSBjb21wYXJpc29ucyBtdXN0IGFsc28gYmUgYXRvbWljXG4rXHQgKiB0byBhdm9pZCBmYWxzZSBwb3NpdGl2ZSBrZXkgbWF0Y2hlcyBkdWUgdG8gdG9ybiBrZXkgcmVhZHMgLyB3cml0ZXMuIFNvIGNoZWNrIGtleV9zaXplLlxuK1x0ICovXG4rXHRodGFiLVx1MDAzZWhhc19oYXNoID0gaHRhYl9pc19scnUoaHRhYikgfHwgaHRhYi1cdTAwM2VtYXAua2V5X3NpemUgXHUwMDNlIHNpemVvZih1bnNpZ25lZCBsb25nKTtcbitcbiBcdGlmIChwZXJjcHVfbHJ1KSB7XG4gXHRcdC8qIGVuc3VyZSBlYWNoIENQVSdzIGxydSBsaXN0IGhhcyBcdTAwM2U9MSBlbGVtZW50cy5cbiBcdFx0ICogc2luY2Ugd2UgYXJlIGF0IGl0LCBtYWtlIGVhY2ggbHJ1IGxpc3QgaGFzIHRoZSBzYW1lXG5AQCAtNTgzLDggKzY1MiwxNiBAQCBzdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxuIFxuIFx0aHRhYi1cdTAwM2VuX2J1Y2tldHMgPSByb3VuZHVwX3Bvd19vZl90d28oaHRhYi1cdTAwM2VtYXAubWF4X2VudHJpZXMpO1xuIFxuLVx0aHRhYi1cdTAwM2VlbGVtX3NpemUgPSBzaXplb2Yoc3RydWN0IGh0YWJfZWxlbSkgK1xuLVx0XHRcdCAgcm91bmRfdXAoaHRhYi1cdTAwM2VtYXAua2V5X3NpemUsIDgpO1xuK1x0aWYgKGh0YWJfaXNfbHJ1KGh0YWIpKVxuK1x0XHRodGFiLVx1MDAzZWtleV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgZGF0YSkgKyA4O1xuK1x0ZWxzZSBpZiAocGVyY3B1IFx1MDAyNlx1MDAyNiAhcHJlYWxsb2MpXG4rXHRcdGh0YWItXHUwMDNla2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW1fcGNwdSwgZGF0YSkgK1xuK1x0XHRcdFx0ICAgKGh0YWJfaGFzX2hhc2goaHRhYikgPyA4IDogMCk7XG4rXHRlbHNlXG4rXHRcdGh0YWItXHUwMDNla2V5X29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBodGFiX2VsZW0sIGRhdGEpICtcbitcdFx0XHRcdCAgIChodGFiX2hhc19oYXNoKGh0YWIpID8gOCA6IDApO1xuK1xuK1x0aHRhYi1cdTAwM2VlbGVtX3NpemUgPSBodGFiLVx1MDAzZWtleV9vZmZzZXQgKyByb3VuZF91cChodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSwgOCk7XG4gXHRpZiAocGVyY3B1KVxuIFx0XHRodGFiLVx1MDAzZWVsZW1fc2l6ZSArPSBzaXplb2Yodm9pZCAqKTtcbiBcdGVsc2VcbkBAIC02OTIsMTUgKzc2OSwyMyBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBobGlzdF9udWxsc19oZWFkICpzZWxlY3RfYnVja2V0KHN0cnVjdCBicGZfaHRhYiAqaHRhYiwgdTMyXG4gfVxuIFxuIC8qIHRoaXMgbG9va3VwIGZ1bmN0aW9uIGNhbiBvbmx5IGJlIGNhbGxlZCB3aXRoIGJ1Y2tldCBsb2NrIHRha2VuICovXG4tc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCwgdTMyIGhhc2gsXG4rc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9lbGVtX3JhdyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsXG4rXHRcdFx0XHRcdCBzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCwgdTMyIGhhc2gsXG4gXHRcdFx0XHRcdCB2b2lkICprZXksIHUzMiBrZXlfc2l6ZSlcbiB7XG4gXHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4tXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxuLVx0XHRpZiAobC1cdTAwM2VoYXNoID09IGhhc2ggXHUwMDI2XHUwMDI2ICFtZW1jbXAoXHUwMDI2bC1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpKVxuLVx0XHRcdHJldHVybiBsO1xuK1x0aWYgKGh0YWJfaGFzX2hhc2goaHRhYikpIHtcbitcdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKVxuK1x0XHRcdGlmIChodGFiX2VsZW1faGFzaChodGFiLCBsKSA9PSBoYXNoIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAhbWVtY21wKGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleSwga2V5X3NpemUpKVxuK1x0XHRcdFx0cmV0dXJuIGw7XG4rXHR9IGVsc2Uge1xuK1x0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpXG4rXHRcdFx0aWYgKCFtZW1jbXAoaHRhYl9lbGVtX2tleShodGFiLCBsKSwga2V5LCBrZXlfc2l6ZSkpXG4rXHRcdFx0XHRyZXR1cm4gbDtcbitcdH1cbiBcbiBcdHJldHVybiBOVUxMO1xuIH1cbkBAIC03MDksNyArNzk0LDggQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCwgdTMyIGhhc2hcbiAgKiB0aGUgdW5saWtlbHkgZXZlbnQgd2hlbiBlbGVtZW50cyBtb3ZlZCBmcm9tIG9uZSBidWNrZXQgaW50byBhbm90aGVyXG4gICogd2hpbGUgbGluayBsaXN0IGlzIGJlaW5nIHdhbGtlZFxuICAqL1xuLXN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICpsb29rdXBfbnVsbHNfZWxlbV9yYXcoc3RydWN0IGhsaXN0X251bGxzX2hlYWQgKmhlYWQsXG4rc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9udWxsc19lbGVtX3JhdyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsXG4rXHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCxcbiBcdFx0XHRcdFx0ICAgICAgIHUzMiBoYXNoLCB2b2lkICprZXksXG4gXHRcdFx0XHRcdCAgICAgICB1MzIga2V5X3NpemUsIHUzMiBuX2J1Y2tldHMpXG4ge1xuQEAgLTcxNyw5ICs4MDMsMTYgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmxvb2t1cF9udWxsc19lbGVtX3JhdyhzdHJ1Y3QgaGxpc3RfbnVsbHNfaGVhZCAqaGVhZCxcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4gYWdhaW46XG4tXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxuLVx0XHRpZiAobC1cdTAwM2VoYXNoID09IGhhc2ggXHUwMDI2XHUwMDI2ICFtZW1jbXAoXHUwMDI2bC1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpKVxuLVx0XHRcdHJldHVybiBsO1xuK1x0aWYgKGh0YWJfaGFzX2hhc2goaHRhYikpIHtcbitcdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKVxuK1x0XHRcdGlmIChodGFiX2VsZW1faGFzaChodGFiLCBsKSA9PSBoYXNoIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgICAhbWVtY21wKGh0YWJfZWxlbV9rZXkoaHRhYiwgbCksIGtleSwga2V5X3NpemUpKVxuK1x0XHRcdFx0cmV0dXJuIGw7XG4rXHR9IGVsc2Uge1xuK1x0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpXG4rXHRcdFx0aWYgKCFtZW1jbXAoaHRhYl9lbGVtX2tleShodGFiLCBsKSwga2V5LCBrZXlfc2l6ZSkpXG4rXHRcdFx0XHRyZXR1cm4gbDtcbitcdH1cbiBcbiBcdGlmICh1bmxpa2VseShnZXRfbnVsbHNfdmFsdWUobikgIT0gKGhhc2ggXHUwMDI2IChuX2J1Y2tldHMgLSAxKSkpKVxuIFx0XHRnb3RvIGFnYWluO1xuQEAgLTc0NywxNyArODQwLDE4IEBAIHN0YXRpYyB2b2lkICpfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcbiBcdGhlYWQgPSBzZWxlY3RfYnVja2V0KGh0YWIsIGhhc2gpO1xuIFxuLVx0bCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLVx1MDAzZW5fYnVja2V0cyk7XG4rXHRsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItXHUwMDNlbl9idWNrZXRzKTtcbiBcbiBcdHJldHVybiBsO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCAqaHRhYl9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcbiBcdGlmIChsKVxuLVx0XHRyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRcdHJldHVybiBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XG4gXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG5AQCAtNzc1LDYgKzg2OSw3IEBAIHN0YXRpYyB2b2lkICpodGFiX21hcF9sb29rdXBfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gICovXG4gc3RhdGljIGludCBodGFiX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsIHN0cnVjdCBicGZfaW5zbiAqaW5zbl9idWYpXG4ge1xuK1x0c3RydWN0IGJwZl9odGFiICpodGFiID0gY29udGFpbmVyX29mKG1hcCwgc3RydWN0IGJwZl9odGFiLCBtYXApO1xuIFx0c3RydWN0IGJwZl9pbnNuICppbnNuID0gaW5zbl9idWY7XG4gXHRjb25zdCBpbnQgcmV0ID0gQlBGX1JFR18wO1xuIFxuQEAgLTc4Myw3ICs4NzgsNyBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiBcdCppbnNuKysgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pO1xuIFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIHJldCwgMCwgMSk7XG4gXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCByZXQsXG4tXHRcdFx0XHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICtcbitcdFx0XHRcdGh0YWItXHUwMDNla2V5X29mZnNldCArXG4gXHRcdFx0XHRyb3VuZF91cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbiBcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XG4gfVxuQEAgLTc5MSwxMiArODg2LDEzIEBAIHN0YXRpYyBpbnQgaHRhYl9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIHN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCAqX19odGFiX2xydV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdFx0XHRcdHZvaWQgKmtleSwgY29uc3QgYm9vbCBtYXJrKVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcbiBcdGlmIChsKSB7XG4gXHRcdGlmIChtYXJrKVxuLVx0XHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKFx1MDAyNmwtXHUwMDNlbHJ1X25vZGUpO1xuLVx0XHRyZXR1cm4gaHRhYl9lbGVtX3ZhbHVlKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRcdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoaHRhYl9lbGVtX2xydV9ub2RlKGwpKTtcbitcdFx0cmV0dXJuIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsKTtcbiBcdH1cbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTgxNSw2ICs5MTEsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtX3N5cyhzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXkpXG4gc3RhdGljIGludCBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0XHRcdFx0ICAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiB7XG4rXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjtcbiBcdGNvbnN0IGludCByZXQgPSBCUEZfUkVHXzA7XG4gXHRjb25zdCBpbnQgcmVmX3JlZyA9IEJQRl9SRUdfMTtcbkBAIC04MjQsMTUgKzkyMSwxNSBAQCBzdGF0aWMgaW50IGh0YWJfbHJ1X21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHQqaW5zbisrID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTtcbiBcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCByZXQsIDAsIDQpO1xuIFx0Kmluc24rKyA9IEJQRl9MRFhfTUVNKEJQRl9CLCByZWZfcmVnLCByZXQsXG4tXHRcdFx0ICAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpICtcbitcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtX2xydSwgbHJ1X25vZGUpICtcbiBcdFx0XHQgICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX2xydV9ub2RlLCByZWYpKTtcbiBcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSk5FLCByZWZfcmVnLCAwLCAxKTtcbiBcdCppbnNuKysgPSBCUEZfU1RfTUVNKEJQRl9CLCByZXQsXG4tXHRcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBscnVfbm9kZSkgK1xuK1x0XHRcdCAgICAgb2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKSArXG4gXHRcdFx0ICAgICBvZmZzZXRvZihzdHJ1Y3QgYnBmX2xydV9ub2RlLCByZWYpLFxuIFx0XHRcdCAgICAgMSk7XG4gXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCByZXQsXG4tXHRcdFx0XHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICtcbitcdFx0XHRcdGh0YWItXHUwMDNla2V5X29mZnNldCArXG4gXHRcdFx0XHRyb3VuZF91cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbiBcdHJldHVybiBpbnNuIC0gaW5zbl9idWY7XG4gfVxuQEAgLTg0NCwxMyArOTQxLDEzIEBAIHN0YXRpYyB2b2lkIGNoZWNrX2FuZF9jYW5jZWxfZmllbGRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYixcbiBcdFx0cmV0dXJuO1xuIFxuIFx0aWYgKGh0YWJfaXNfcGVyY3B1KGh0YWIpKSB7XG4tXHRcdHZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBodGFiLVx1MDAzZW1hcC5rZXlfc2l6ZSk7XG4rXHRcdHZvaWQgX19wZXJjcHUgKnBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBlbGVtKTtcbiBcdFx0aW50IGNwdTtcbiBcbiBcdFx0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSlcbiBcdFx0XHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuIFx0fSBlbHNlIHtcbi1cdFx0dm9pZCAqbWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKTtcbitcdFx0dm9pZCAqbWFwX3ZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGVsZW0pO1xuIFxuIFx0XHRicGZfb2JqX2NhbmNlbF9maWVsZHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIG1hcF92YWx1ZSk7XG4gXHR9XG5AQCAtODY5LDE3ICs5NjYsMTcgQEAgc3RhdGljIGJvb2wgaHRhYl9scnVfbWFwX2RlbGV0ZV9ub2RlKHZvaWQgKmFyZywgc3RydWN0IGJwZl9scnVfbm9kZSAqbm9kZSlcbiBcdHN0cnVjdCBidWNrZXQgKmI7XG4gXHRpbnQgcmV0O1xuIFxuLVx0dGd0X2wgPSBjb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbSwgbHJ1X25vZGUpO1xuLVx0YiA9IF9fc2VsZWN0X2J1Y2tldChodGFiLCB0Z3RfbC1cdTAwM2VoYXNoKTtcbitcdHRndF9sID0gKHN0cnVjdCBodGFiX2VsZW0gKiljb250YWluZXJfb2Yobm9kZSwgc3RydWN0IGh0YWJfZWxlbV9scnUsIGxydV9ub2RlKTtcbitcdGIgPSBfX3NlbGVjdF9idWNrZXQoaHRhYiwgaHRhYl9lbGVtX2hhc2goaHRhYiwgdGd0X2wpKTtcbiBcdGhlYWQgPSBcdTAwMjZiLVx1MDAzZWhlYWQ7XG4gXG4gXHRyZXQgPSBodGFiX2xvY2tfYnVja2V0KGIsIFx1MDAyNmZsYWdzKTtcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShsLCBuLCBoZWFkLCBoYXNoX25vZGUpXG4rXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpXG4gXHRcdGlmIChsID09IHRndF9sKSB7XG4tXHRcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZWhhc2hfbm9kZSk7XG4rXHRcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZW5vZGUuaGFzaF9ub2RlKTtcbiBcdFx0XHRicGZfbWFwX2RlY19lbGVtX2NvdW50KFx1MDAyNmh0YWItXHUwMDNlbWFwKTtcbiBcdFx0XHRicmVhaztcbiBcdFx0fVxuQEAgLTkxMiwxOCArMTAwOSwxOSBAQCBzdGF0aWMgaW50IGh0YWJfbWFwX2dldF9uZXh0X2tleShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKm5leHRfa2V5KVxuIFx0aGVhZCA9IHNlbGVjdF9idWNrZXQoaHRhYiwgaGFzaCk7XG4gXG4gXHQvKiBsb29rdXAgdGhlIGtleSAqL1xuLVx0bCA9IGxvb2t1cF9udWxsc19lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplLCBodGFiLVx1MDAzZW5fYnVja2V0cyk7XG4rXHRsID0gbG9va3VwX251bGxzX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUsIGh0YWItXHUwMDNlbl9idWNrZXRzKTtcbiBcbiBcdGlmICghbClcbiBcdFx0Z290byBmaW5kX2ZpcnN0X2VsZW07XG4gXG4gXHQvKiBrZXkgd2FzIGZvdW5kLCBnZXQgbmV4dCBrZXkgaW4gdGhlIHNhbWUgYnVja2V0ICovXG4tXHRuZXh0X2wgPSBobGlzdF9udWxsc19lbnRyeV9zYWZlKHJjdV9kZXJlZmVyZW5jZV9yYXcoaGxpc3RfbnVsbHNfbmV4dF9yY3UoXHUwMDI2bC1cdTAwM2VoYXNoX25vZGUpKSxcbi1cdFx0XHRcdCAgc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKTtcbitcdG5leHRfbCA9IGhsaXN0X251bGxzX2VudHJ5X3NhZmUoXG4rXHRcdFx0cmN1X2RlcmVmZXJlbmNlX3JhdyhobGlzdF9udWxsc19uZXh0X3JjdShcdTAwMjZsLVx1MDAzZW5vZGUuaGFzaF9ub2RlKSksXG4rXHRcdFx0c3RydWN0IGh0YWJfZWxlbSwgbm9kZS5oYXNoX25vZGUpO1xuIFxuIFx0aWYgKG5leHRfbCkge1xuIFx0XHQvKiBpZiBuZXh0IGVsZW0gaW4gdGhpcyBoYXNoIGxpc3QgaXMgbm9uLXplcm8sIGp1c3QgcmV0dXJuIGl0ICovXG4tXHRcdG1lbWNweShuZXh0X2tleSwgbmV4dF9sLVx1MDAzZWtleSwga2V5X3NpemUpO1xuK1x0XHRtZW1jcHkobmV4dF9rZXksIGh0YWJfZWxlbV9rZXkoaHRhYiwgbmV4dF9sKSwga2V5X3NpemUpO1xuIFx0XHRyZXR1cm4gMDtcbiBcdH1cbiBcbkBAIC05MzgsMTAgKzEwMzYsMTAgQEAgc3RhdGljIGludCBodGFiX21hcF9nZXRfbmV4dF9rZXkoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICpuZXh0X2tleSlcbiBcbiBcdFx0LyogcGljayBmaXJzdCBlbGVtZW50IGluIHRoZSBidWNrZXQgKi9cbiBcdFx0bmV4dF9sID0gaGxpc3RfbnVsbHNfZW50cnlfc2FmZShyY3VfZGVyZWZlcmVuY2VfcmF3KGhsaXN0X251bGxzX2ZpcnN0X3JjdShoZWFkKSksXG4tXHRcdFx0XHRcdCAgc3RydWN0IGh0YWJfZWxlbSwgaGFzaF9ub2RlKTtcbitcdFx0XHRcdFx0ICBzdHJ1Y3QgaHRhYl9lbGVtLCBub2RlLmhhc2hfbm9kZSk7XG4gXHRcdGlmIChuZXh0X2wpIHtcbiBcdFx0XHQvKiBpZiBpdCdzIG5vdCBlbXB0eSwganVzdCByZXR1cm4gaXQgKi9cbi1cdFx0XHRtZW1jcHkobmV4dF9rZXksIG5leHRfbC1cdTAwM2VrZXksIGtleV9zaXplKTtcbitcdFx0XHRtZW1jcHkobmV4dF9rZXksIGh0YWJfZWxlbV9rZXkoaHRhYiwgbmV4dF9sKSwga2V5X3NpemUpO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG4gXHR9XG5AQCAtOTU1LDcgKzEwNTMsNyBAQCBzdGF0aWMgdm9pZCBodGFiX2VsZW1fZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4gXHRjaGVja19hbmRfY2FuY2VsX2ZpZWxkcyhodGFiLCBsKTtcbiBcbiBcdGlmIChodGFiLVx1MDAzZW1hcC5tYXBfdHlwZSA9PSBCUEZfTUFQX1RZUEVfUEVSQ1BVX0hBU0gpXG4tXHRcdGJwZl9tZW1fY2FjaGVfZnJlZShcdTAwMjZodGFiLVx1MDAzZXBjcHVfbWEsIGwtXHUwMDNlcHRyX3RvX3BwdHIpO1xuK1x0XHRicGZfbWVtX2NhY2hlX2ZyZWUoXHUwMDI2aHRhYi1cdTAwM2VwY3B1X21hLCBodGFiX2VsZW1fZ2V0X3B0cl90b19wcHRyKGwpKTtcbiBcdGJwZl9tZW1fY2FjaGVfZnJlZShcdTAwMjZodGFiLVx1MDAzZW1hLCBsKTtcbiB9XG4gXG5AQCAtOTY1LDcgKzEwNjMsNyBAQCBzdGF0aWMgdm9pZCBodGFiX3B1dF9mZF92YWx1ZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4gXHR2b2lkICpwdHI7XG4gXG4gXHRpZiAobWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfZmRfcHV0X3B0cikge1xuLVx0XHRwdHIgPSBmZF9odGFiX21hcF9nZXRfcHRyKG1hcCwgbCk7XG4rXHRcdHB0ciA9IGZkX2h0YWJfbWFwX2dldF9wdHIoaHRhYiwgbCk7XG4gXHRcdG1hcC1cdTAwM2VvcHMtXHUwMDNlbWFwX2ZkX3B1dF9wdHIobWFwLCBwdHIsIHRydWUpO1xuIFx0fVxuIH1cbkBAIC0xMDA2LDcgKzExMDQsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmwpXG4gXHRpZiAoaHRhYl9pc19wcmVhbGxvYyhodGFiKSkge1xuIFx0XHRicGZfbWFwX2RlY19lbGVtX2NvdW50KFx1MDAyNmh0YWItXHUwMDNlbWFwKTtcbiBcdFx0Y2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoaHRhYiwgbCk7XG4tXHRcdHBjcHVfZnJlZWxpc3RfcHVzaChcdTAwMjZodGFiLVx1MDAzZWZyZWVsaXN0LCBcdTAwMjZsLVx1MDAzZWZub2RlKTtcbitcdFx0cGNwdV9mcmVlbGlzdF9wdXNoKFx1MDAyNmh0YWItXHUwMDNlZnJlZWxpc3QsIFx1MDAyNmwtXHUwMDNlbm9kZS5mbm9kZSk7XG4gXHR9IGVsc2Uge1xuIFx0XHRkZWNfZWxlbV9jb3VudChodGFiKTtcbiBcdFx0aHRhYl9lbGVtX2ZyZWUoaHRhYiwgbCk7XG5AQCAtMTA5Nyw3ICsxMTk1LDcgQEAgc3RhdGljIHN0cnVjdCBodGFiX2VsZW0gKmFsbG9jX2h0YWJfZWxlbShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHZvaWQgKmtleSxcbiBcdFx0XHRsID0gX19wY3B1X2ZyZWVsaXN0X3BvcChcdTAwMjZodGFiLVx1MDAzZWZyZWVsaXN0KTtcbiBcdFx0XHRpZiAoIWwpXG4gXHRcdFx0XHRyZXR1cm4gRVJSX1BUUigtRTJCSUcpO1xuLVx0XHRcdGxfbmV3ID0gY29udGFpbmVyX29mKGwsIHN0cnVjdCBodGFiX2VsZW0sIGZub2RlKTtcbitcdFx0XHRsX25ldyA9IGNvbnRhaW5lcl9vZihsLCBzdHJ1Y3QgaHRhYl9lbGVtLCBub2RlLmZub2RlKTtcbiBcdFx0XHRicGZfbWFwX2luY19lbGVtX2NvdW50KFx1MDAyNmh0YWItXHUwMDNlbWFwKTtcbiBcdFx0fVxuIFx0fSBlbHNlIHtcbkBAIC0xMTE3LDEwICsxMjE1LDEwIEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksXG4gXHRcdH1cbiBcdH1cbiBcbi1cdG1lbWNweShsX25ldy1cdTAwM2VrZXksIGtleSwga2V5X3NpemUpO1xuK1x0bWVtY3B5KGh0YWJfZWxlbV9rZXkoaHRhYiwgbF9uZXcpLCBrZXksIGtleV9zaXplKTtcbiBcdGlmIChwZXJjcHUpIHtcbiBcdFx0aWYgKHByZWFsbG9jKSB7XG4tXHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGxfbmV3LCBrZXlfc2l6ZSk7XG4rXHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGxfbmV3KTtcbiBcdFx0fSBlbHNlIHtcbiBcdFx0XHQvKiBhbGxvY19wZXJjcHUgemVyby1maWxscyAqL1xuIFx0XHRcdHZvaWQgKnB0ciA9IGJwZl9tZW1fY2FjaGVfYWxsb2MoXHUwMDI2aHRhYi1cdTAwM2VwY3B1X21hKTtcbkBAIC0xMTMwLDI2ICsxMjI4LDI2IEBAIHN0YXRpYyBzdHJ1Y3QgaHRhYl9lbGVtICphbGxvY19odGFiX2VsZW0oc3RydWN0IGJwZl9odGFiICpodGFiLCB2b2lkICprZXksXG4gXHRcdFx0XHRsX25ldyA9IEVSUl9QVFIoLUVOT01FTSk7XG4gXHRcdFx0XHRnb3RvIGRlY19jb3VudDtcbiBcdFx0XHR9XG4tXHRcdFx0bF9uZXctXHUwMDNlcHRyX3RvX3BwdHIgPSBwdHI7XG4rXHRcdFx0aHRhYl9lbGVtX3NldF9wdHJfdG9fcHB0cihsX25ldywgcHRyKTtcbiBcdFx0XHRwcHRyID0gKih2b2lkIF9fcGVyY3B1ICoqKXB0cjtcbiBcdFx0fVxuIFxuIFx0XHRwY3B1X2luaXRfdmFsdWUoaHRhYiwgcHB0ciwgdmFsdWUsIG9uYWxsY3B1cywgbWFwX2ZsYWdzKTtcbiBcbiBcdFx0aWYgKCFwcmVhbGxvYylcbi1cdFx0XHRodGFiX2VsZW1fc2V0X3B0cihsX25ldywga2V5X3NpemUsIHBwdHIpO1xuK1x0XHRcdGh0YWJfZWxlbV9zZXRfcHRyKGh0YWIsIGxfbmV3LCBwcHRyKTtcbiBcdH0gZWxzZSBpZiAoZmRfaHRhYl9tYXBfbmVlZHNfYWRqdXN0KGh0YWIpKSB7XG4gXHRcdHNpemUgPSByb3VuZF91cChzaXplLCA4KTtcbi1cdFx0bWVtY3B5KGh0YWJfZWxlbV92YWx1ZShsX25ldywga2V5X3NpemUpLCB2YWx1ZSwgc2l6ZSk7XG4rXHRcdG1lbWNweShodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLCB2YWx1ZSwgc2l6ZSk7XG4gXHR9IGVsc2UgaWYgKG1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfTE9DSykge1xuIFx0XHRjb3B5X21hcF92YWx1ZV9sb2NrZWQoXHUwMDI2aHRhYi1cdTAwM2VtYXAsXG4tXHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUobF9uZXcsIGtleV9zaXplKSxcbitcdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksXG4gXHRcdFx0XHQgICAgICB2YWx1ZSwgZmFsc2UpO1xuIFx0fSBlbHNlIHtcbi1cdFx0Y29weV9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShsX25ldywga2V5X3NpemUpLCB2YWx1ZSk7XG4rXHRcdGNvcHlfbWFwX3ZhbHVlKFx1MDAyNmh0YWItXHUwMDNlbWFwLCBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9uZXcpLCB2YWx1ZSk7XG4gXHR9XG4gXG4tXHRsX25ldy1cdTAwM2VoYXNoID0gaGFzaDtcbitcdGh0YWJfZWxlbV9zZXRfaGFzaChodGFiLCBsX25ldywgaGFzaCk7XG4gXHRyZXR1cm4gbF9uZXc7XG4gZGVjX2NvdW50OlxuIFx0ZGVjX2VsZW1fY291bnQoaHRhYik7XG5AQCAtMTE5OSw3ICsxMjk3LDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbiBcdFx0aWYgKHVubGlrZWx5KCFidGZfcmVjb3JkX2hhc19maWVsZChtYXAtXHUwMDNlcmVjb3JkLCBCUEZfU1BJTl9MT0NLKSkpXG4gXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXHRcdC8qIGZpbmQgYW4gZWxlbWVudCB3aXRob3V0IHRha2luZyB0aGUgYnVja2V0IGxvY2sgKi9cbi1cdFx0bF9vbGQgPSBsb29rdXBfbnVsbHNfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSxcbitcdFx0bF9vbGQgPSBsb29rdXBfbnVsbHNfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSxcbiBcdFx0XHRcdFx0ICAgICAgaHRhYi1cdTAwM2VuX2J1Y2tldHMpO1xuIFx0XHRyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTtcbiBcdFx0aWYgKHJldClcbkBAIC0xMjA3LDcgKzEzMDUsNyBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxuIFx0XHRpZiAobF9vbGQpIHtcbiBcdFx0XHQvKiBncmFiIHRoZSBlbGVtZW50IGxvY2sgYW5kIHVwZGF0ZSB2YWx1ZSBpbiBwbGFjZSAqL1xuIFx0XHRcdGNvcHlfbWFwX3ZhbHVlX2xvY2tlZChtYXAsXG4tXHRcdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShsX29sZCwga2V5X3NpemUpLFxuK1x0XHRcdFx0XHQgICAgICBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbF9vbGQpLFxuIFx0XHRcdFx0XHQgICAgICB2YWx1ZSwgZmFsc2UpO1xuIFx0XHRcdHJldHVybiAwO1xuIFx0XHR9XG5AQCAtMTIyMSw3ICsxMzE5LDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbitcdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuIFxuIFx0cmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7XG4gXHRpZiAocmV0KVxuQEAgLTEyMzUsNyArMTMzMyw3IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4gXHRcdCAqIGFuZCB1cGRhdGUgZWxlbWVudCBpbiBwbGFjZVxuIFx0XHQgKi9cbiBcdFx0Y29weV9tYXBfdmFsdWVfbG9ja2VkKG1hcCxcbi1cdFx0XHRcdCAgICAgIGh0YWJfZWxlbV92YWx1ZShsX29sZCwga2V5X3NpemUpLFxuK1x0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGxfb2xkKSxcbiBcdFx0XHRcdCAgICAgIHZhbHVlLCBmYWxzZSk7XG4gXHRcdHJldCA9IDA7XG4gXHRcdGdvdG8gZXJyO1xuQEAgLTEyNTIsOSArMTM1MCw5IEBAIHN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4gXHQvKiBhZGQgbmV3IGVsZW1lbnQgdG8gdGhlIGhlYWQgb2YgdGhlIGxpc3QsIHNvIHRoYXRcbiBcdCAqIGNvbmN1cnJlbnQgc2VhcmNoIHdpbGwgZmluZCBpdCBiZWZvcmUgb2xkIGVsZW1cbiBcdCAqL1xuLVx0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFx1MDAyNmxfbmV3LVx1MDAzZWhhc2hfbm9kZSwgaGVhZCk7XG4rXHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXHUwMDI2bF9uZXctXHUwMDNlbm9kZS5oYXNoX25vZGUsIGhlYWQpO1xuIFx0aWYgKGxfb2xkKSB7XG4tXHRcdGhsaXN0X251bGxzX2RlbF9yY3UoXHUwMDI2bF9vbGQtXHUwMDNlaGFzaF9ub2RlKTtcbitcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsX29sZC1cdTAwM2Vub2RlLmhhc2hfbm9kZSk7XG4gXG4gXHRcdC8qIGxfb2xkIGhhcyBhbHJlYWR5IGJlZW4gc3Rhc2hlZCBpbiBodGFiLVx1MDAzZWV4dHJhX2VsZW1zLCBjYW5jZWxcbiBcdFx0ICogaXRzIHJldXNhYmxlIHNwZWNpYWwgZmllbGRzIGJlZm9yZSBpdCBpcyBhdmFpbGFibGUgZm9yIHJldXNlLlxuQEAgLTEyNzUsNyArMTM3Myw3IEBAIHN0YXRpYyB2b2lkIGh0YWJfbHJ1X3B1c2hfZnJlZShzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmVsZW0pXG4ge1xuIFx0Y2hlY2tfYW5kX2NhbmNlbF9maWVsZHMoaHRhYiwgZWxlbSk7XG4gXHRicGZfbWFwX2RlY19lbGVtX2NvdW50KFx1MDAyNmh0YWItXHUwMDNlbWFwKTtcbi1cdGJwZl9scnVfcHVzaF9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBcdTAwMjZlbGVtLVx1MDAzZWxydV9ub2RlKTtcbitcdGJwZl9scnVfcHVzaF9mcmVlKFx1MDAyNmh0YWItXHUwMDNlbHJ1LCBodGFiX2VsZW1fbHJ1X25vZGUoZWxlbSkpO1xuIH1cbiBcbiBzdGF0aWMgbG9uZyBodGFiX2xydV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB2b2lkICp2YWx1ZSxcbkBAIC0xMzEwLDEzICsxNDA4LDEzIEBAIHN0YXRpYyBsb25nIGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlXG4gXHRsX25ldyA9IHByZWFsbG9jX2xydV9wb3AoaHRhYiwga2V5LCBoYXNoKTtcbiBcdGlmICghbF9uZXcpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuLVx0Y29weV9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShsX25ldywgbWFwLVx1MDAzZWtleV9zaXplKSwgdmFsdWUpO1xuK1x0Y29weV9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX25ldyksIHZhbHVlKTtcbiBcbiBcdHJldCA9IGh0YWJfbG9ja19idWNrZXQoYiwgXHUwMDI2ZmxhZ3MpO1xuIFx0aWYgKHJldClcbiBcdFx0Z290byBlcnJfbG9ja19idWNrZXQ7XG4gXG4tXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbitcdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuIFxuIFx0cmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7XG4gXHRpZiAocmV0KVxuQEAgLTEzMjUsMTAgKzE0MjMsMTAgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWVcbiBcdC8qIGFkZCBuZXcgZWxlbWVudCB0byB0aGUgaGVhZCBvZiB0aGUgbGlzdCwgc28gdGhhdFxuIFx0ICogY29uY3VycmVudCBzZWFyY2ggd2lsbCBmaW5kIGl0IGJlZm9yZSBvbGQgZWxlbVxuIFx0ICovXG4tXHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXHUwMDI2bF9uZXctXHUwMDNlaGFzaF9ub2RlLCBoZWFkKTtcbitcdGhsaXN0X251bGxzX2FkZF9oZWFkX3JjdShcdTAwMjZsX25ldy1cdTAwM2Vub2RlLmhhc2hfbm9kZSwgaGVhZCk7XG4gXHRpZiAobF9vbGQpIHtcbi1cdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXHUwMDI2bF9uZXctXHUwMDNlbHJ1X25vZGUpO1xuLVx0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmxfb2xkLVx1MDAzZWhhc2hfbm9kZSk7XG4rXHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsX25ldykpO1xuK1x0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmxfb2xkLVx1MDAzZW5vZGUuaGFzaF9ub2RlKTtcbiBcdH1cbiBcdHJldCA9IDA7XG4gXG5AQCAtMTM4Myw3ICsxNDgxLDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW1faW5fcGxhY2Uoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuK1x0bF9vbGQgPSBsb29rdXBfZWxlbV9yYXcoaHRhYiwgaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4gXG4gXHRyZXQgPSBjaGVja19mbGFncyhodGFiLCBsX29sZCwgbWFwX2ZsYWdzKTtcbiBcdGlmIChyZXQpXG5AQCAtMTM5MiwxMCArMTQ5MCwxMCBAQCBzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbV9pbl9wbGFjZShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gXHRpZiAobF9vbGQpIHtcbiBcdFx0LyogVXBkYXRlIHZhbHVlIGluLXBsYWNlICovXG4gXHRcdGlmIChwZXJjcHUpIHtcbi1cdFx0XHRwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIobF9vbGQsIGtleV9zaXplKSxcbitcdFx0XHRwY3B1X2NvcHlfdmFsdWUoaHRhYiwgaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbF9vbGQpLFxuIFx0XHRcdFx0XHR2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpO1xuIFx0XHR9IGVsc2Uge1xuLVx0XHRcdHZvaWQgKippbm5lcl9tYXBfcHB0ciA9IGh0YWJfZWxlbV92YWx1ZShsX29sZCwga2V5X3NpemUpO1xuK1x0XHRcdHZvaWQgKippbm5lcl9tYXBfcHB0ciA9IGh0YWJfZWxlbV92YWx1ZShodGFiLCBsX29sZCk7XG4gXG4gXHRcdFx0b2xkX21hcF9wdHIgPSAqaW5uZXJfbWFwX3BwdHI7XG4gXHRcdFx0V1JJVEVfT05DRSgqaW5uZXJfbWFwX3BwdHIsICoodm9pZCAqKil2YWx1ZSk7XG5AQCAtMTQwNyw3ICsxNTA1LDcgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfdXBkYXRlX2VsZW1faW5fcGxhY2Uoc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFx0XHRcdHJldCA9IFBUUl9FUlIobF9uZXcpO1xuIFx0XHRcdGdvdG8gZXJyO1xuIFx0XHR9XG4tXHRcdGhsaXN0X251bGxzX2FkZF9oZWFkX3JjdShcdTAwMjZsX25ldy1cdTAwM2VoYXNoX25vZGUsIGhlYWQpO1xuK1x0XHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXHUwMDI2bF9uZXctXHUwMDNlbm9kZS5oYXNoX25vZGUsIGhlYWQpO1xuIFx0fVxuIGVycjpcbiBcdGh0YWJfdW5sb2NrX2J1Y2tldChiLCBmbGFncyk7XG5AQCAtMTQ1NiwyMiArMTU1NCwyMiBAQCBzdGF0aWMgbG9uZyBfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFx0aWYgKHJldClcbiBcdFx0Z290byBlcnJfbG9ja19idWNrZXQ7XG4gXG4tXHRsX29sZCA9IGxvb2t1cF9lbGVtX3JhdyhoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbitcdGxfb2xkID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuIFxuIFx0cmV0ID0gY2hlY2tfZmxhZ3MoaHRhYiwgbF9vbGQsIG1hcF9mbGFncyk7XG4gXHRpZiAocmV0KVxuIFx0XHRnb3RvIGVycjtcbiBcbiBcdGlmIChsX29sZCkge1xuLVx0XHRicGZfbHJ1X25vZGVfc2V0X3JlZihcdTAwMjZsX29sZC1cdTAwM2VscnVfbm9kZSk7XG4rXHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKGh0YWJfZWxlbV9scnVfbm9kZShsX29sZCkpO1xuIFxuIFx0XHQvKiBwZXItY3B1IGhhc2ggbWFwIGNhbiB1cGRhdGUgdmFsdWUgaW4tcGxhY2UgKi9cbi1cdFx0cGNwdV9jb3B5X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGxfb2xkLCBrZXlfc2l6ZSksXG4rXHRcdHBjcHVfY29weV92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsX29sZCksXG4gXHRcdFx0XHR2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpO1xuIFx0fSBlbHNlIHtcbi1cdFx0cGNwdV9pbml0X3ZhbHVlKGh0YWIsIGh0YWJfZWxlbV9nZXRfcHRyKGxfbmV3LCBrZXlfc2l6ZSksXG4rXHRcdHBjcHVfaW5pdF92YWx1ZShodGFiLCBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsX25ldyksXG4gXHRcdFx0XHR2YWx1ZSwgb25hbGxjcHVzLCBtYXBfZmxhZ3MpO1xuLVx0XHRobGlzdF9udWxsc19hZGRfaGVhZF9yY3UoXHUwMDI2bF9uZXctXHUwMDNlaGFzaF9ub2RlLCBoZWFkKTtcbitcdFx0aGxpc3RfbnVsbHNfYWRkX2hlYWRfcmN1KFx1MDAyNmxfbmV3LVx1MDAzZW5vZGUuaGFzaF9ub2RlLCBoZWFkKTtcbiBcdFx0bF9uZXcgPSBOVUxMO1xuIFx0fVxuIFx0cmV0ID0gMDtcbkBAIC0xNDgwLDcgKzE1NzgsNyBAQCBzdGF0aWMgbG9uZyBfX2h0YWJfbHJ1X3BlcmNwdV9tYXBfdXBkYXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIGVycl9sb2NrX2J1Y2tldDpcbiBcdGlmIChsX25ldykge1xuIFx0XHRicGZfbWFwX2RlY19lbGVtX2NvdW50KFx1MDAyNmh0YWItXHUwMDNlbWFwKTtcbi1cdFx0YnBmX2xydV9wdXNoX2ZyZWUoXHUwMDI2aHRhYi1cdTAwM2VscnUsIFx1MDAyNmxfbmV3LVx1MDAzZWxydV9ub2RlKTtcbitcdFx0YnBmX2xydV9wdXNoX2ZyZWUoXHUwMDI2aHRhYi1cdTAwM2VscnUsIGh0YWJfZWxlbV9scnVfbm9kZShsX25ldykpO1xuIFx0fVxuIFx0cmV0dXJuIHJldDtcbiB9XG5AQCAtMTUyMSw5ICsxNjE5LDkgQEAgc3RhdGljIGxvbmcgaHRhYl9tYXBfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4rXHRsID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuIFx0aWYgKGwpXG4tXHRcdGhsaXN0X251bGxzX2RlbF9yY3UoXHUwMDI2bC1cdTAwM2VoYXNoX25vZGUpO1xuK1x0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmwtXHUwMDNlbm9kZS5oYXNoX25vZGUpO1xuIFx0ZWxzZVxuIFx0XHRyZXQgPSAtRU5PRU5UO1xuIFxuQEAgLTE1NTYsMTAgKzE2NTQsMTAgQEAgc3RhdGljIGxvbmcgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcdGlmIChyZXQpXG4gXHRcdHJldHVybiByZXQ7XG4gXG4tXHRsID0gbG9va3VwX2VsZW1fcmF3KGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuK1x0bCA9IGxvb2t1cF9lbGVtX3JhdyhodGFiLCBoZWFkLCBoYXNoLCBrZXksIGtleV9zaXplKTtcbiBcbiBcdGlmIChsKVxuLVx0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmwtXHUwMDNlaGFzaF9ub2RlKTtcbitcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZW5vZGUuaGFzaF9ub2RlKTtcbiBcdGVsc2VcbiBcdFx0cmV0ID0gLUVOT0VOVDtcbiBcbkBAIC0xNTgxLDggKzE2NzksOCBAQCBzdGF0aWMgdm9pZCBkZWxldGVfYWxsX2VsZW1lbnRzKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcbiBcdFx0c3RydWN0IGhsaXN0X251bGxzX25vZGUgKm47XG4gXHRcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4tXHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XG4tXHRcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZWhhc2hfbm9kZSk7XG4rXHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpIHtcbitcdFx0XHRobGlzdF9udWxsc19kZWxfcmN1KFx1MDAyNmwtXHUwMDNlbm9kZS5oYXNoX25vZGUpO1xuIFx0XHRcdGh0YWJfZWxlbV9mcmVlKGh0YWIsIGwpO1xuIFx0XHR9XG4gXHRcdGNvbmRfcmVzY2hlZCgpO1xuQEAgLTE1OTksMTAgKzE2OTcsMTAgQEAgc3RhdGljIHZvaWQgaHRhYl9mcmVlX21hbGxvY2VkX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9odGFiICpodGFiKVxuIFx0XHRzdHJ1Y3QgaGxpc3RfbnVsbHNfbm9kZSAqbjtcbiBcdFx0c3RydWN0IGh0YWJfZWxlbSAqbDtcbiBcbi1cdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnkobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XG4rXHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKSB7XG4gXHRcdFx0LyogV2Ugb25seSBmcmVlIGludGVybmFsIHN0cnVjdHMgb24gdXJlZiBkcm9wcGluZyB0byB6ZXJvICovXG4gXHRcdFx0YnBmX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoXHUwMDI2aHRhYi1cdTAwM2VtYXAsXG4tXHRcdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGwsIGh0YWItXHUwMDNlbWFwLmtleV9zaXplKSk7XG4rXHRcdFx0XHRcdFx0ICAgICAgaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpKTtcbiBcdFx0fVxuIFx0XHRjb25kX3Jlc2NoZWRfcmN1KCk7XG4gXHR9XG5AQCAtMTY5Nyw3ICsxNzk1LDcgQEAgc3RhdGljIGludCBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbi1cdGwgPSBsb29rdXBfZWxlbV9yYXcoaGVhZCwgaGFzaCwga2V5LCBrZXlfc2l6ZSk7XG4rXHRsID0gbG9va3VwX2VsZW1fcmF3KGh0YWIsIGhlYWQsIGhhc2gsIGtleSwga2V5X3NpemUpO1xuIFx0aWYgKCFsKSB7XG4gXHRcdHJldCA9IC1FTk9FTlQ7XG4gXHRcdGdvdG8gb3V0X3VubG9jaztcbkBAIC0xNzA4LDE0ICsxODA2LDE0IEBAIHN0YXRpYyBpbnQgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcdFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcbiBcdFx0aW50IG9mZiA9IDAsIGNwdTtcbiBcbi1cdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGwsIGtleV9zaXplKTtcbitcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xuIFx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4gXHRcdFx0Y29weV9tYXBfdmFsdWVfbG9uZyhcdTAwMjZodGFiLVx1MDAzZW1hcCwgdmFsdWUgKyBvZmYsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuIFx0XHRcdGNoZWNrX2FuZF9pbml0X21hcF92YWx1ZShcdTAwMjZodGFiLVx1MDAzZW1hcCwgdmFsdWUgKyBvZmYpO1xuIFx0XHRcdG9mZiArPSByb3VuZHVwX3ZhbHVlX3NpemU7XG4gXHRcdH1cbiBcdH0gZWxzZSB7XG4tXHRcdHZvaWQgKnNyYyA9IGh0YWJfZWxlbV92YWx1ZShsLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuK1x0XHR2b2lkICpzcmMgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgbCk7XG4gXG4gXHRcdGlmIChmbGFncyBcdTAwMjYgQlBGX0ZfTE9DSylcbiBcdFx0XHRjb3B5X21hcF92YWx1ZV9sb2NrZWQobWFwLCB2YWx1ZSwgc3JjLCB0cnVlKTtcbkBAIC0xNzI0LDcgKzE4MjIsNyBAQCBzdGF0aWMgaW50IF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksXG4gXHRcdC8qIFplcm9pbmcgc3BlY2lhbCBmaWVsZHMgaW4gdGhlIHRlbXAgYnVmZmVyICovXG4gXHRcdGNoZWNrX2FuZF9pbml0X21hcF92YWx1ZShtYXAsIHZhbHVlKTtcbiBcdH1cbi1cdGhsaXN0X251bGxzX2RlbF9yY3UoXHUwMDI2bC1cdTAwM2VoYXNoX25vZGUpO1xuK1x0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZW5vZGUuaGFzaF9ub2RlKTtcbiBcbiBvdXRfdW5sb2NrOlxuIFx0aHRhYl91bmxvY2tfYnVja2V0KGIsIGJmbGFncyk7XG5AQCAtMTg2MCw3ICsxOTU4LDcgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0fVxuIFxuIFx0YnVja2V0X2NudCA9IDA7XG4tXHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UobCwgbiwgaGVhZCwgaGFzaF9ub2RlKVxuK1x0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfcmN1KGwsIG4sIGhlYWQsIG5vZGUuaGFzaF9ub2RlKVxuIFx0XHRidWNrZXRfY250Kys7XG4gXG4gXHRpZiAoYnVja2V0X2NudCBcdTAwMjZcdTAwMjYgIWxvY2tlZCkge1xuQEAgLTE4OTcsMTQgKzE5OTUsMTQgQEAgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaChzdHJ1Y3QgYnBmX21hcCAqbWFwLFxuIFx0aWYgKCFsb2NrZWQpXG4gXHRcdGdvdG8gbmV4dF9iYXRjaDtcbiBcbi1cdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUobCwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XG4tXHRcdG1lbWNweShkc3Rfa2V5LCBsLVx1MDAzZWtleSwga2V5X3NpemUpO1xuK1x0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShsLCBuLCBoZWFkLCBub2RlLmhhc2hfbm9kZSkge1xuK1x0XHRtZW1jcHkoZHN0X2tleSwgaHRhYl9lbGVtX2tleShodGFiLCBsKSwga2V5X3NpemUpO1xuIFxuIFx0XHRpZiAoaXNfcGVyY3B1KSB7XG4gXHRcdFx0aW50IG9mZiA9IDAsIGNwdTtcbiBcdFx0XHR2b2lkIF9fcGVyY3B1ICpwcHRyO1xuIFxuLVx0XHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuK1x0XHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBsKTtcbiBcdFx0XHRpZiAoZWxlbV9tYXBfZmxhZ3MgXHUwMDI2IEJQRl9GX0NQVSkge1xuIFx0XHRcdFx0Y3B1ID0gZWxlbV9tYXBfZmxhZ3MgXHUwMDNlXHUwMDNlIDMyO1xuIFx0XHRcdFx0Y29weV9tYXBfdmFsdWUoXHUwMDI2aHRhYi1cdTAwM2VtYXAsIGRzdF92YWwsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuQEAgLTE5MTgsNyArMjAxNiw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdH1cbiBcdFx0XHR9XG4gXHRcdH0gZWxzZSB7XG4tXHRcdFx0dmFsdWUgPSBodGFiX2VsZW1fdmFsdWUobCwga2V5X3NpemUpO1xuK1x0XHRcdHZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGh0YWIsIGwpO1xuIFx0XHRcdGlmIChpc19mZF9odGFiKGh0YWIpKSB7XG4gXHRcdFx0XHRzdHJ1Y3QgYnBmX21hcCAqKmlubmVyX21hcCA9IHZhbHVlO1xuIFxuQEAgLTE5MzYsNyArMjAzNCw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRjaGVja19hbmRfaW5pdF9tYXBfdmFsdWUobWFwLCBkc3RfdmFsKTtcbiBcdFx0fVxuIFx0XHRpZiAoZG9fZGVsZXRlKSB7XG4tXHRcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZWhhc2hfbm9kZSk7XG4rXHRcdFx0aGxpc3RfbnVsbHNfZGVsX3JjdShcdTAwMjZsLVx1MDAzZW5vZGUuaGFzaF9ub2RlKTtcbiBcbiBcdFx0XHQvKiBicGZfbHJ1X3B1c2hfZnJlZSgpIHdpbGwgYWNxdWlyZSBscnVfbG9jaywgd2hpY2hcbiBcdFx0XHQgKiBtYXkgY2F1c2UgZGVhZGxvY2suIFNlZSBjb21tZW50cyBpbiBmdW5jdGlvblxuQEAgLTE5NDgsNyArMjA0Niw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHQgKiBsb2NrIGJlaW5nIGhlbGQgYW5kIGl0IHZpb2xhdGVzIHRoZSBsb2NrIHJ1bGUsIHNvXG4gXHRcdFx0ICogaW52b2tlIGZyZWVfaHRhYl9lbGVtKCkgYWZ0ZXIgdW5sb2NrIGFzIHdlbGwuXG4gXHRcdFx0ICovXG4tXHRcdFx0bC1cdTAwM2ViYXRjaF9mbGluayA9IG5vZGVfdG9fZnJlZTtcbitcdFx0XHRsLVx1MDAzZW5vZGUuYmF0Y2hfZmxpbmsgPSBub2RlX3RvX2ZyZWU7XG4gXHRcdFx0bm9kZV90b19mcmVlID0gbDtcbiBcdFx0fVxuIFx0XHRkc3Rfa2V5ICs9IGtleV9zaXplO1xuQEAgLTE5NjAsNyArMjA1OCw3IEBAIF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2goc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcbiBcdHdoaWxlIChub2RlX3RvX2ZyZWUpIHtcbiBcdFx0bCA9IG5vZGVfdG9fZnJlZTtcbi1cdFx0bm9kZV90b19mcmVlID0gbm9kZV90b19mcmVlLVx1MDAzZWJhdGNoX2ZsaW5rO1xuK1x0XHRub2RlX3RvX2ZyZWUgPSBub2RlX3RvX2ZyZWUtXHUwMDNlbm9kZS5iYXRjaF9mbGluaztcbiBcdFx0aWYgKGlzX2xydV9tYXApXG4gXHRcdFx0aHRhYl9scnVfcHVzaF9mcmVlKGh0YWIsIGwpO1xuIFx0XHRlbHNlXG5AQCAtMjEwOCw4ICsyMjA2LDggQEAgYnBmX2hhc2hfbWFwX3NlcV9maW5kX25leHQoc3RydWN0IGJwZl9pdGVyX3NlcV9oYXNoX21hcF9pbmZvICppbmZvLFxuIFx0XHQvKiBubyB1cGRhdGUvZGVsZXRpb24gb24gdGhpcyBidWNrZXQsIHByZXZfZWxlbSBzaG91bGQgYmUgc3RpbGwgdmFsaWRcbiBcdFx0ICogYW5kIHdlIHdvbid0IHNraXAgZWxlbWVudHMuXG4gXHRcdCAqL1xuLVx0XHRuID0gcmN1X2RlcmVmZXJlbmNlX3JhdyhobGlzdF9udWxsc19uZXh0X3JjdShcdTAwMjZwcmV2X2VsZW0tXHUwMDNlaGFzaF9ub2RlKSk7XG4tXHRcdGVsZW0gPSBobGlzdF9udWxsc19lbnRyeV9zYWZlKG4sIHN0cnVjdCBodGFiX2VsZW0sIGhhc2hfbm9kZSk7XG4rXHRcdG4gPSByY3VfZGVyZWZlcmVuY2VfcmF3KGhsaXN0X251bGxzX25leHRfcmN1KFx1MDAyNnByZXZfZWxlbS1cdTAwM2Vub2RlLmhhc2hfbm9kZSkpO1xuK1x0XHRlbGVtID0gaGxpc3RfbnVsbHNfZW50cnlfc2FmZShuLCBzdHJ1Y3QgaHRhYl9lbGVtLCBub2RlLmhhc2hfbm9kZSk7XG4gXHRcdGlmIChlbGVtKVxuIFx0XHRcdHJldHVybiBlbGVtO1xuIFxuQEAgLTIxMjUsNyArMjIyMyw3IEBAIGJwZl9oYXNoX21hcF9zZXFfZmluZF9uZXh0KHN0cnVjdCBicGZfaXRlcl9zZXFfaGFzaF9tYXBfaW5mbyAqaW5mbyxcbiBcbiBcdFx0Y291bnQgPSAwO1xuIFx0XHRoZWFkID0gXHUwMDI2Yi1cdTAwM2VoZWFkO1xuLVx0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9yY3UoZWxlbSwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XG4rXHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3JjdShlbGVtLCBuLCBoZWFkLCBub2RlLmhhc2hfbm9kZSkge1xuIFx0XHRcdGlmIChjb3VudCBcdTAwM2U9IHNraXBfZWxlbXMpIHtcbiBcdFx0XHRcdGluZm8tXHUwMDNlYnVja2V0X2lkID0gaTtcbiBcdFx0XHRcdGluZm8tXHUwMDNlc2tpcF9lbGVtcyA9IGNvdW50O1xuQEAgLTIxODMsMTIgKzIyODEsMTIgQEAgc3RhdGljIGludCBfX2JwZl9oYXNoX21hcF9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNlcSwgc3RydWN0IGh0YWJfZWxlbSAqZWxlbSlcbiBcdFx0Y3R4Lm1ldGEgPSBcdTAwMjZtZXRhO1xuIFx0XHRjdHgubWFwID0gaW5mby1cdTAwM2VtYXA7XG4gXHRcdGlmIChlbGVtKSB7XG4tXHRcdFx0Y3R4LmtleSA9IGVsZW0tXHUwMDNla2V5O1xuK1x0XHRcdGN0eC5rZXkgPSBodGFiX2VsZW1fa2V5KGluZm8tXHUwMDNlaHRhYiwgZWxlbSk7XG4gXHRcdFx0aWYgKCFpbmZvLVx1MDAzZXBlcmNwdV92YWx1ZV9idWYpIHtcbi1cdFx0XHRcdGN0eC52YWx1ZSA9IGh0YWJfZWxlbV92YWx1ZShlbGVtLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuK1x0XHRcdFx0Y3R4LnZhbHVlID0gaHRhYl9lbGVtX3ZhbHVlKGluZm8tXHUwMDNlaHRhYiwgZWxlbSk7XG4gXHRcdFx0fSBlbHNlIHtcbiBcdFx0XHRcdHJvdW5kdXBfdmFsdWVfc2l6ZSA9IHJvdW5kX3VwKG1hcC1cdTAwM2V2YWx1ZV9zaXplLCA4KTtcbi1cdFx0XHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihlbGVtLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuK1x0XHRcdFx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGluZm8tXHUwMDNlaHRhYiwgZWxlbSk7XG4gXHRcdFx0XHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4gXHRcdFx0XHRcdGNvcHlfbWFwX3ZhbHVlX2xvbmcobWFwLCBpbmZvLVx1MDAzZXBlcmNwdV92YWx1ZV9idWYgKyBvZmYsXG4gXHRcdFx0XHRcdFx0XHQgICAgcGVyX2NwdV9wdHIocHB0ciwgY3B1KSk7XG5AQCAtMjI5MiwxNCArMjM5MCwxNCBAQCBzdGF0aWMgbG9uZyBicGZfZm9yX2VhY2hfaGFzaF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIGJwZl9jYWxsYmFja190IGNhbGxiYWNrX1xuIFx0XHRiID0gXHUwMDI2aHRhYi1cdTAwM2VidWNrZXRzW2ldO1xuIFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4gXHRcdGhlYWQgPSBcdTAwMjZiLVx1MDAzZWhlYWQ7XG4tXHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUoZWxlbSwgbiwgaGVhZCwgaGFzaF9ub2RlKSB7XG4tXHRcdFx0a2V5ID0gZWxlbS1cdTAwM2VrZXk7XG4rXHRcdGhsaXN0X251bGxzX2Zvcl9lYWNoX2VudHJ5X3NhZmUoZWxlbSwgbiwgaGVhZCwgbm9kZS5oYXNoX25vZGUpIHtcbitcdFx0XHRrZXkgPSBodGFiX2VsZW1fa2V5KGh0YWIsIGVsZW0pO1xuIFx0XHRcdGlmIChpc19wZXJjcHUpIHtcbiBcdFx0XHRcdC8qIGN1cnJlbnQgY3B1IHZhbHVlIGZvciBwZXJjcHUgbWFwICovXG4tXHRcdFx0XHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoZWxlbSwgbWFwLVx1MDAzZWtleV9zaXplKTtcbitcdFx0XHRcdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihodGFiLCBlbGVtKTtcbiBcdFx0XHRcdHZhbCA9IHRoaXNfY3B1X3B0cihwcHRyKTtcbiBcdFx0XHR9IGVsc2Uge1xuLVx0XHRcdFx0dmFsID0gaHRhYl9lbGVtX3ZhbHVlKGVsZW0sIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRcdFx0XHR2YWwgPSBodGFiX2VsZW1fdmFsdWUoaHRhYiwgZWxlbSk7XG4gXHRcdFx0fVxuIFx0XHRcdG51bV9lbGVtcysrO1xuIFx0XHRcdHJldCA9IGNhbGxiYWNrX2ZuKCh1NjQpKGxvbmcpbWFwLCAodTY0KShsb25nKWtleSxcbkBAIC0yNDAzLDEwICsyNTAxLDExIEBAIGNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xuIC8qIENhbGxlZCBmcm9tIGVCUEYgcHJvZ3JhbSAqL1xuIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcbiBcdGlmIChsKVxuLVx0XHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSkpO1xuK1x0XHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpKTtcbiBcdGVsc2VcbiBcdFx0cmV0dXJuIE5VTEw7XG4gfVxuQEAgLTI0MTQsNiArMjUxMyw3IEBAIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIC8qIGlubGluZSBicGZfbWFwX2xvb2t1cF9lbGVtKCkgY2FsbCBmb3IgcGVyLUNQVSBoYXNobWFwICovXG4gc3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25fYnVmKVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBicGZfaW5zbiAqaW5zbiA9IGluc25fYnVmO1xuIFxuIFx0aWYgKCFicGZfaml0X3N1cHBvcnRzX3BlcmNwdV9pbnNuKCkpXG5AQCAtMjQyNCw3ICsyNTI0LDcgQEAgc3RhdGljIGludCBodGFiX3BlcmNwdV9tYXBfZ2VuX2xvb2t1cChzdHJ1Y3QgYnBmX21hcCAqbWFwLCBzdHJ1Y3QgYnBmX2luc24gKmluc25cbiBcdCppbnNuKysgPSBCUEZfRU1JVF9DQUxMKF9faHRhYl9tYXBfbG9va3VwX2VsZW0pO1xuIFx0Kmluc24rKyA9IEJQRl9KTVBfSU1NKEJQRl9KRVEsIEJQRl9SRUdfMCwgMCwgMyk7XG4gXHQqaW5zbisrID0gQlBGX0FMVTY0X0lNTShCUEZfQURELCBCUEZfUkVHXzAsXG4tXHRcdFx0XHRvZmZzZXRvZihzdHJ1Y3QgaHRhYl9lbGVtLCBrZXkpICsgcm91bmR1cChtYXAtXHUwMDNla2V5X3NpemUsIDgpKTtcbitcdFx0XHRcdGh0YWItXHUwMDNla2V5X29mZnNldCArIHJvdW5kdXAobWFwLVx1MDAzZWtleV9zaXplLCA4KSk7XG4gXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX0RXLCBCUEZfUkVHXzAsIEJQRl9SRUdfMCwgMCk7XG4gXHQqaW5zbisrID0gQlBGX01PVjY0X1BFUkNQVV9SRUcoQlBGX1JFR18wLCBCUEZfUkVHXzApO1xuIFxuQEAgLTI0MzMsNiArMjUzMyw3IEBAIHN0YXRpYyBpbnQgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGJwZl9pbnNuICppbnNuXG4gXG4gc3RhdGljIHZvaWQgKmh0YWJfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1MzIgY3B1KVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4gXHRpZiAoY3B1IFx1MDAzZT0gbnJfY3B1X2lkcylcbkBAIC0yNDQwLDE4ICsyNTQxLDE5IEBAIHN0YXRpYyB2b2lkICpodGFiX3BlcmNwdV9tYXBfbG9va3VwX3BlcmNwdV9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcbiBcbiBcdGwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcdGlmIChsKVxuLVx0XHRyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIobCwgbWFwLVx1MDAzZWtleV9zaXplKSwgY3B1KTtcbitcdFx0cmV0dXJuIHBlcl9jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpLCBjcHUpO1xuIFx0ZWxzZVxuIFx0XHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4gc3RhdGljIHZvaWQgKmh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5KVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmwgPSBfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKG1hcCwga2V5KTtcbiBcbiBcdGlmIChsKSB7XG4tXHRcdGJwZl9scnVfbm9kZV9zZXRfcmVmKFx1MDAyNmwtXHUwMDNlbHJ1X25vZGUpO1xuLVx0XHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSkpO1xuK1x0XHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobCkpO1xuK1x0XHRyZXR1cm4gdGhpc19jcHVfcHRyKGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpKTtcbiBcdH1cbiBcbiBcdHJldHVybiBOVUxMO1xuQEAgLTI0NTksNiArMjU2MSw3IEBAIHN0YXRpYyB2b2lkICpodGFiX2xydV9wZXJjcHVfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBcbiBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LCB1MzIgY3B1KVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXG4gXHRpZiAoY3B1IFx1MDAzZT0gbnJfY3B1X2lkcylcbkBAIC0yNDY2LDggKzI1NjksOCBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa1xuIFxuIFx0bCA9IF9faHRhYl9tYXBfbG9va3VwX2VsZW0obWFwLCBrZXkpO1xuIFx0aWYgKGwpIHtcbi1cdFx0YnBmX2xydV9ub2RlX3NldF9yZWYoXHUwMDI2bC1cdTAwM2VscnVfbm9kZSk7XG4tXHRcdHJldHVybiBwZXJfY3B1X3B0cihodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXHUwMDNla2V5X3NpemUpLCBjcHUpO1xuK1x0XHRicGZfbHJ1X25vZGVfc2V0X3JlZihodGFiX2VsZW1fbHJ1X25vZGUobCkpO1xuK1x0XHRyZXR1cm4gcGVyX2NwdV9wdHIoaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCksIGNwdSk7XG4gXHR9XG4gXG4gXHRyZXR1cm4gTlVMTDtcbkBAIC0yNDc1LDYgKzI1NzgsNyBAQCBzdGF0aWMgdm9pZCAqaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfcGVyY3B1X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa1xuIFxuIGludCBicGZfcGVyY3B1X2hhc2hfY29weShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLCB1NjQgbWFwX2ZsYWdzKVxuIHtcbitcdHN0cnVjdCBicGZfaHRhYiAqaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbiBcdHN0cnVjdCBodGFiX2VsZW0gKmw7XG4gXHR2b2lkIF9fcGVyY3B1ICpwcHRyO1xuIFx0aW50IHJldCA9IC1FTk9FTlQ7XG5AQCAtMjQ5NCw3ICsyNTk4LDcgQEAgaW50IGJwZl9wZXJjcHVfaGFzaF9jb3B5KHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxcbiBcdC8qIFdlIGRvIG5vdCBtYXJrIExSVSBtYXAgZWxlbWVudCBoZXJlIGluIG9yZGVyIHRvIG5vdCBtZXNzIHVwXG4gXHQgKiBldmljdGlvbiBoZXVyaXN0aWNzIHdoZW4gdXNlciBzcGFjZSBkb2VzIGEgbWFwIHdhbGsuXG4gXHQgKi9cbi1cdHBwdHIgPSBodGFiX2VsZW1fZ2V0X3B0cihsLCBtYXAtXHUwMDNla2V5X3NpemUpO1xuK1x0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGh0YWIsIGwpO1xuIFx0aWYgKG1hcF9mbGFncyBcdTAwMjYgQlBGX0ZfQ1BVKSB7XG4gXHRcdGNwdSA9IG1hcF9mbGFncyBcdTAwM2VcdTAwM2UgMzI7XG4gXHRcdGNvcHlfbWFwX3ZhbHVlKG1hcCwgdmFsdWUsIHBlcl9jcHVfcHRyKHBwdHIsIGNwdSkpO1xuQEAgLTI1MzIsNiArMjYzNiw3IEBAIGludCBicGZfcGVyY3B1X2hhc2hfdXBkYXRlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSwgdm9pZCAqdmFsdWUsXG4gc3RhdGljIHZvaWQgaHRhYl9wZXJjcHVfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFx0XHRcdFx0XHQgIHN0cnVjdCBzZXFfZmlsZSAqbSlcbiB7XG4rXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgaHRhYl9lbGVtICpsO1xuIFx0dm9pZCBfX3BlcmNwdSAqcHB0cjtcbiBcdGludCBjcHU7XG5AQCAtMjU0Niw3ICsyNjUxLDcgQEAgc3RhdGljIHZvaWQgaHRhYl9wZXJjcHVfbWFwX3NlcV9zaG93X2VsZW0oc3RydWN0IGJwZl9tYXAgKm1hcCwgdm9pZCAqa2V5LFxuIFxuIFx0YnRmX3R5cGVfc2VxX3Nob3cobWFwLVx1MDAzZWJ0ZiwgbWFwLVx1MDAzZWJ0Zl9rZXlfdHlwZV9pZCwga2V5LCBtKTtcbiBcdHNlcV9wdXRzKG0sIFwiOiB7XFxuXCIpO1xuLVx0cHB0ciA9IGh0YWJfZWxlbV9nZXRfcHRyKGwsIG1hcC1cdTAwM2VrZXlfc2l6ZSk7XG4rXHRwcHRyID0gaHRhYl9lbGVtX2dldF9wdHIoaHRhYiwgbCk7XG4gXHRmb3JfZWFjaF9wb3NzaWJsZV9jcHUoY3B1KSB7XG4gXHRcdHNlcV9wcmludGYobSwgXCJcXHRjcHUlZDogXCIsIGNwdSk7XG4gXHRcdGJ0Zl90eXBlX3NlcV9zaG93KG1hcC1cdTAwM2VidGYsIG1hcC1cdTAwM2VidGZfdmFsdWVfdHlwZV9pZCxcbkBAIC0yNjE5LDggKzI3MjQsOCBAQCBzdGF0aWMgdm9pZCBmZF9odGFiX21hcF9mcmVlKHN0cnVjdCBicGZfbWFwICptYXApXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBodGFiLVx1MDAzZW5fYnVja2V0czsgaSsrKSB7XG4gXHRcdGhlYWQgPSBzZWxlY3RfYnVja2V0KGh0YWIsIGkpO1xuIFxuLVx0XHRobGlzdF9udWxsc19mb3JfZWFjaF9lbnRyeV9zYWZlKGwsIG4sIGhlYWQsIGhhc2hfbm9kZSkge1xuLVx0XHRcdHZvaWQgKnB0ciA9IGZkX2h0YWJfbWFwX2dldF9wdHIobWFwLCBsKTtcbitcdFx0aGxpc3RfbnVsbHNfZm9yX2VhY2hfZW50cnlfc2FmZShsLCBuLCBoZWFkLCBub2RlLmhhc2hfbm9kZSkge1xuK1x0XHRcdHZvaWQgKnB0ciA9IGZkX2h0YWJfbWFwX2dldF9wdHIoaHRhYiwgbCk7XG4gXG4gXHRcdFx0bWFwLVx1MDAzZW9wcy1cdTAwM2VtYXBfZmRfcHV0X3B0cihtYXAsIHB0ciwgZmFsc2UpO1xuIFx0XHR9XG5AQCAtMjcwNSw2ICsyODEwLDcgQEAgc3RhdGljIHZvaWQgKmh0YWJfb2ZfbWFwX2xvb2t1cF9lbGVtKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSlcbiBzdGF0aWMgaW50IGh0YWJfb2ZfbWFwX2dlbl9sb29rdXAoc3RydWN0IGJwZl9tYXAgKm1hcCxcbiBcdFx0XHRcdCAgc3RydWN0IGJwZl9pbnNuICppbnNuX2J1ZilcbiB7XG4rXHRzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIgPSBjb250YWluZXJfb2YobWFwLCBzdHJ1Y3QgYnBmX2h0YWIsIG1hcCk7XG4gXHRzdHJ1Y3QgYnBmX2luc24gKmluc24gPSBpbnNuX2J1ZjtcbiBcdGNvbnN0IGludCByZXQgPSBCUEZfUkVHXzA7XG4gXG5AQCAtMjcxMyw3ICsyODE5LDcgQEAgc3RhdGljIGludCBodGFiX29mX21hcF9nZW5fbG9va3VwKHN0cnVjdCBicGZfbWFwICptYXAsXG4gXHQqaW5zbisrID0gQlBGX0VNSVRfQ0FMTChfX2h0YWJfbWFwX2xvb2t1cF9lbGVtKTtcbiBcdCppbnNuKysgPSBCUEZfSk1QX0lNTShCUEZfSkVRLCByZXQsIDAsIDIpO1xuIFx0Kmluc24rKyA9IEJQRl9BTFU2NF9JTU0oQlBGX0FERCwgcmV0LFxuLVx0XHRcdFx0b2Zmc2V0b2Yoc3RydWN0IGh0YWJfZWxlbSwga2V5KSArXG4rXHRcdFx0XHRodGFiLVx1MDAzZWtleV9vZmZzZXQgK1xuIFx0XHRcdFx0cm91bmRfdXAobWFwLVx1MDAzZWtleV9zaXplLCA4KSk7XG4gXHQqaW5zbisrID0gQlBGX0xEWF9NRU0oQlBGX0RXLCByZXQsIHJldCwgMCk7XG4gXG5AQCAtMzExMiw3ICszMjE4LDcgQEAgc3RhdGljIGludCByaHRhYl9tYXBfY2hlY2tfYnRmKHN0cnVjdCBicGZfbWFwICptYXAsIGNvbnN0IHN0cnVjdCBidGYgKmJ0ZixcbiB7XG4gXHRzdHJ1Y3QgYnBmX3JodGFiICpyaHRhYiA9IGNvbnRhaW5lcl9vZihtYXAsIHN0cnVjdCBicGZfcmh0YWIsIG1hcCk7XG4gXG4tXHRyZXR1cm4gYnBmX21hX3NldF9kdG9yKG1hcCwgXHUwMDI2cmh0YWItXHUwMDNlbWEsIHJodGFiX21lbV9kdG9yKTtcbitcdHJldHVybiBicGZfbWFfc2V0X2R0b3IobWFwLCBcdTAwMjZyaHRhYi1cdTAwM2VtYSwgcmh0YWJfbWVtX2R0b3IsIG9mZnNldG9mKHN0cnVjdCByaHRhYl9lbGVtLCBkYXRhKSk7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIHJodGFiX21hcF9mcmVlX2ludGVybmFsX3N0cnVjdHMoc3RydWN0IGJwZl9tYXAgKm1hcClcbkBAIC0zNTMzLDMgKzM2MzksMTYgQEAgY29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIHJodGFiX21hcF9vcHMgPSB7XG4gXHQubWFwX2J0Zl9pZCA9IFx1MDAyNnJodGFiX21hcF9idGZfaWRzWzBdLFxuIFx0Lml0ZXJfc2VxX2luZm8gPSBcdTAwMjZyaGFzaF9pdGVyX3NlcV9pbmZvLFxuIH07XG4rXG4rc2l6ZV90IGJwZl9odGFiX21hcF9tZXRhX3NpemUodm9pZClcbit7XG4rXHRyZXR1cm4gc2l6ZW9mKHN0cnVjdCBicGZfaHRhYik7XG4rfVxuK1xuK3ZvaWQgYnBmX2h0YWJfbWFwX21ldGFfaW5pdChzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwX21ldGEsIHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXApXG4re1xuK1x0c3RydWN0IGJwZl9odGFiICppbm5lcl9odGFiX21ldGEgPSBjb250YWluZXJfb2YoaW5uZXJfbWFwX21ldGEsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbitcdHN0cnVjdCBicGZfaHRhYiAqaW5uZXJfaHRhYiA9IGNvbnRhaW5lcl9vZihpbm5lcl9tYXAsIHN0cnVjdCBicGZfaHRhYiwgbWFwKTtcbitcbitcdGlubmVyX2h0YWJfbWV0YS1cdTAwM2VrZXlfb2Zmc2V0ID0gaW5uZXJfaHRhYi1cdTAwM2VrZXlfb2Zmc2V0O1xuK31cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21hcF9pbl9tYXAuYyBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5jXG5pbmRleCBkMmNiYWI0YmRmNjQ0Li5iMmRiNWQwYzk4YmVlIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9tYXBfaW5fbWFwLmNcbisrKyBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5jXG5AQCAtNyw2ICs3LDE1IEBAXG4gXG4gI2luY2x1ZGUgXCJtYXBfaW5fbWFwLmhcIlxuIFxuK3N0YXRpYyBib29sIGJwZl9tYXBfdHlwZV9pc19odGFiKGVudW0gYnBmX21hcF90eXBlIHR5cGUpXG4re1xuK1x0cmV0dXJuIHR5cGUgPT0gQlBGX01BUF9UWVBFX0hBU0ggfHxcbitcdCAgICAgICB0eXBlID09IEJQRl9NQVBfVFlQRV9QRVJDUFVfSEFTSCB8fFxuK1x0ICAgICAgIHR5cGUgPT0gQlBGX01BUF9UWVBFX0xSVV9IQVNIIHx8XG4rXHQgICAgICAgdHlwZSA9PSBCUEZfTUFQX1RZUEVfTFJVX1BFUkNQVV9IQVNIIHx8XG4rXHQgICAgICAgdHlwZSA9PSBCUEZfTUFQX1RZUEVfSEFTSF9PRl9NQVBTO1xuK31cbitcbiBzdHJ1Y3QgYnBmX21hcCAqYnBmX21hcF9tZXRhX2FsbG9jKGludCBpbm5lcl9tYXBfdWZkKVxuIHtcbiBcdHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXAsICppbm5lcl9tYXBfbWV0YTtcbkBAIC0yOSw2ICszOCw4IEBAIHN0cnVjdCBicGZfbWFwICpicGZfbWFwX21ldGFfYWxsb2MoaW50IGlubmVyX21hcF91ZmQpXG4gXHQvKiBJbiBzb21lIGNhc2VzIHZlcmlmaWVyIG5lZWRzIHRvIGFjY2VzcyBiZXlvbmQganVzdCBiYXNlIG1hcC4gKi9cbiBcdGlmIChpbm5lcl9tYXAtXHUwMDNlb3BzID09IFx1MDAyNmFycmF5X21hcF9vcHMgfHwgaW5uZXJfbWFwLVx1MDAzZW9wcyA9PSBcdTAwMjZwZXJjcHVfYXJyYXlfbWFwX29wcylcbiBcdFx0aW5uZXJfbWFwX21ldGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgYnBmX2FycmF5KTtcbitcdGVsc2UgaWYgKGJwZl9tYXBfdHlwZV9pc19odGFiKGlubmVyX21hcC1cdTAwM2VtYXBfdHlwZSkpXG4rXHRcdGlubmVyX21hcF9tZXRhX3NpemUgPSBicGZfaHRhYl9tYXBfbWV0YV9zaXplKCk7XG4gXG4gXHRpbm5lcl9tYXBfbWV0YSA9IGt6YWxsb2MoaW5uZXJfbWFwX21ldGFfc2l6ZSwgR0ZQX1VTRVIpO1xuIFx0aWYgKCFpbm5lcl9tYXBfbWV0YSlcbkBAIC03MCw2ICs4MSw4IEBAIHN0cnVjdCBicGZfbWFwICpicGZfbWFwX21ldGFfYWxsb2MoaW50IGlubmVyX21hcF91ZmQpXG4gXHRcdGlubmVyX2FycmF5X21ldGEtXHUwMDNlaW5kZXhfbWFzayA9IGlubmVyX2FycmF5LVx1MDAzZWluZGV4X21hc2s7XG4gXHRcdGlubmVyX2FycmF5X21ldGEtXHUwMDNlZWxlbV9zaXplID0gaW5uZXJfYXJyYXktXHUwMDNlZWxlbV9zaXplO1xuIFx0XHRpbm5lcl9tYXBfbWV0YS1cdTAwM2VieXBhc3Nfc3BlY192MSA9IGlubmVyX21hcC1cdTAwM2VieXBhc3Nfc3BlY192MTtcbitcdH0gZWxzZSBpZiAoYnBmX21hcF90eXBlX2lzX2h0YWIoaW5uZXJfbWFwLVx1MDAzZW1hcF90eXBlKSkge1xuK1x0XHRicGZfaHRhYl9tYXBfbWV0YV9pbml0KGlubmVyX21hcF9tZXRhLCBpbm5lcl9tYXApO1xuIFx0fVxuIFx0cmV0dXJuIGlubmVyX21hcF9tZXRhO1xuIH1cbmRpZmYgLS1naXQgYS9rZXJuZWwvYnBmL21hcF9pbl9tYXAuaCBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5oXG5pbmRleCA3ZDYxNjAyMzU0ZGU4Li4xZWRjMjA1NzcyZDhjIDEwMDY0NFxuLS0tIGEva2VybmVsL2JwZi9tYXBfaW5fbWFwLmhcbisrKyBiL2tlcm5lbC9icGYvbWFwX2luX21hcC5oXG5AQCAtMTUsNSArMTUsNyBAQCB2b2lkICpicGZfbWFwX2ZkX2dldF9wdHIoc3RydWN0IGJwZl9tYXAgKm1hcCwgc3RydWN0IGZpbGUgKm1hcF9maWxlLFxuIFx0XHRcdCBpbnQgdWZkKTtcbiB2b2lkIGJwZl9tYXBfZmRfcHV0X3B0cihzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICpwdHIsIGJvb2wgbmVlZF9kZWZlcik7XG4gdTMyIGJwZl9tYXBfZmRfc3lzX2xvb2t1cF9lbGVtKHZvaWQgKnB0cik7XG4rc2l6ZV90IGJwZl9odGFiX21hcF9tZXRhX3NpemUodm9pZCk7XG4rdm9pZCBicGZfaHRhYl9tYXBfbWV0YV9pbml0KHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXBfbWV0YSwgc3RydWN0IGJwZl9tYXAgKmlubmVyX21hcCk7XG4gXG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jXG5pbmRleCAzNzNjOGQxN2VhNTU3Li42YmQ0Y2I2OGMyMGMxIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvYnBmL3Byb2dzL21hcF9wdHJfa2Vybi5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9icGYvcHJvZ3MvbWFwX3B0cl9rZXJuLmNcbkBAIC0xMTQsNyArMTE0LDcgQEAgc3RhdGljIGlubGluZSBpbnQgY2hlY2tfaGFzaCh2b2lkKVxuIFx0VkVSSUZZKGNoZWNrX2RlZmF1bHRfbm9pbmxpbmUoXHUwMDI2aGFzaC1cdTAwM2VtYXAsIG1hcCkpO1xuIFxuIFx0VkVSSUZZKGhhc2gtXHUwMDNlbl9idWNrZXRzID09IE1BWF9FTlRSSUVTKTtcbi1cdFZFUklGWShoYXNoLVx1MDAzZWVsZW1fc2l6ZSA9PSA2NCk7XG4rXHRWRVJJRlkoaGFzaC1cdTAwM2VlbGVtX3NpemUgPT0gMzIpO1xuIFxuIFx0VkVSSUZZKGhhc2gtXHUwMDNlY291bnQuY291bnRlciA9PSAwKTtcbiBcdFZFUklGWShicGZfbWFwX3N1bV9lbGVtX2NvdW50KG1hcCkgPT0gMCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMDo0MzozMy4wMjA2Nzk5NTlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDcyMjA5MzYwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBCUEYgSGFzaCBNYXAgT3B0aW1pemF0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGZ1bmRhbWVudGFsbHkgY2hhbmdlcyB0aGUgbGF5b3V0IG9mIGVsZW1lbnRzIHdpdGhpbiBCUEYgaGFzaCBtYXBzLCBzcGVjaWZpY2FsbHkgaW4gYGtlcm5lbC9icGYvaGFzaHRhYi5jYCBhbmQgYGtlcm5lbC9icGYvbWFwX2luX21hcC5jYC4gVGhlIGNvcmUgaWRlYSBpcyB0byAqY29uZGl0aW9uYWxseSogZHJvcCB0aGUgYGhhc2hgIGZpZWxkIGZyb20gdGhlIGVsZW1lbnQgc3RydWN0dXJlLCB3aGljaCBtYWtlcyBzZW5zZTsgaWYga2V5IGNvbXBhcmlzb25zIGFyZSBhdG9taWMgKHNtYWxsIGtleXMpIGFuZCBpdCdzIG5vdCBhbiBMUlUgbWFwLCB3aHkgYm90aGVyIHN0b3JpbmcgaXQ/IFRoaXMgb3B0aW1pemF0aW9uIGludHJvZHVjZXMgYGtleV9vZmZzZXRgIHRvIGBzdHJ1Y3QgYnBmX2h0YWJgLCBhbGxvd2luZyBmb3IgZHluYW1pYyBjb21wdXRhdGlvbiBvZiBrZXkgYW5kIHZhbHVlIG9mZnNldHMgd2l0aGluIHRoZSBlbGVtZW50LiBUaGUgcGF0Y2ggYWxzbyBwcm9wYWdhdGVzIGBrZXlfb2Zmc2V0YCBpbnRvIHRoZSBpbm5lciBtYXAgbWV0YWRhdGEgZm9yIGhhc2ggbWFwcyB3aXRoaW4gbWFwLWluLW1hcCBzdHJ1Y3R1cmVzLCB3aGljaCBpcyBleHBlY3RlZC5cblxuR2l2ZW4gdGhlIGRlcHRoIG9mIHRoaXMgY2hhbmdlIHRvIHRoZSBjb3JlIGhhc2ggbWFwIGltcGxlbWVudGF0aW9uLCBteSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0aGF0IHRoaXMgKmFic29sdXRlbHkqIGRlbWFuZHMgdGhvcm91Z2ggZnV6emluZy4gVGhpcyBpcyB0aGUga2luZCBvZiBjaGFuZ2UgdGhhdCBjYW4gaW50cm9kdWNlIHN1YnRsZSBidXQgY3JpdGljYWwgYnVncy5cblxuTXkgZm9jdXMgaGFzIHNoaWZ0ZWQgdG8gaWRlbnRpZnlpbmcgdGhlIGtleSBmdW5jdGlvbnMgYW5kIEFQSSBlbnRyeSBwb2ludHMuIEkndmUgaW5pdGlhbGx5IHNwb3R0ZWQgdGhlIGZvbGxvd2luZyBhcyBiZWluZyBpbXBvcnRhbnQgdG8gY2hlY2sgZm9yIGZ1bmN0aW9uYWxpdHk6XG5cbiogICBgaHRhYl9tYXBfYWxsb2NgXG4qICAgYGh0YWJfbWFwX3VwZGF0ZV9lbGVtYFxuKiAgIGBodGFiX2xydV9tYXBfdXBkYXRlX2VsZW1gXG4qICAgYGh0YWJfbWFwX2RlbGV0ZV9lbGVtYFxuKiAgIGBodGFiX2xydV9tYXBfZGVsZXRlX2VsZW1gXG4qICAgYGh0YWJfbWFwX2xvb2t1cF9lbGVtYFxuKiAgIGBodGFiX2xydV9tYXBfbG9va3VwX2VsZW1gXG4qICAgYGh0YWJfcGVyY3B1X21hcF9sb29rdXBfZWxlbWBcbiogICBgaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfZWxlbWBcbiogICBgaHRhYl9tYXBfZ2V0X25leHRfa2V5YFxuKiAgIGBodGFiX21hcF9nZW5fbG9va3VwYFxuKiAgIGBodGFiX2xydV9tYXBfZ2VuX2xvb2t1cGBcbiogICBgaHRhYl9wZXJjcHVfbWFwX2dlbl9sb29rdXBgXG4qICAgYGh0YWJfb2ZfbWFwX2dlbl9sb29rdXBgXG4qICAgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWBcbiogICBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9iYXRjaGBcbiogICBgYnBmX21hcF9tZXRhX2FsbG9jYFxuXG5UaG91Z2ggaXQgc2VlbXMgYGh0YWJfbWFwX3VwZGF0ZV9lbGVtYCBpcyBzdGF0aWMsIEknbGwgbmVlZCB0byByZW1lbWJlciB0aGF0IGl0J3MgYXNzaWduZWQgdG8gYG1hcF9vcHNgLiBJJ20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgKndoaWNoKiBmdW5jdGlvbnMgYXJlIGFjdHVhbGx5IGV4cG9zZWQgYXMgdGhlIEFQSSwgYW5kIHdoYXQgYXJlIGdvb2QgdGFyZ2V0cyBmb3IgZnV6emluZy5cblxuQWZ0ZXIgYSBsaXR0bGUgcmV2aWV3LCBpdCBsb29rcyBsaWtlIGBodGFiX21hcF9hbGxvY2AgaXMgYWxzbyBzdGF0aWMsIHNvIEkgd2lsbCBub3cgbmVlZCB0byBmb2N1cyBteSBlZmZvcnRzIG9uIG90aGVyIGV4cG9ydHM6XG5cbiogICBgYnBmX3BlcmNwdV9oYXNoX2NvcHlgXG4qICAgYGJwZl9wZXJjcHVfaGFzaF91cGRhdGVgXG4qICAgYGJwZl9odGFiX21hcF9tZXRhX3NpemVgXG4qICAgYGJwZl9odGFiX21hcF9tZXRhX2luaXRgXG4qICAgYGJwZl9tYXBfbWV0YV9hbGxvY2BcblxuVGltZSB0byBjaGVjayBob3cgdGhlc2UgYXJlIGRlZmluZWQgdXNpbmcgYGRlZmF1bHRfYXBpOmdyZXBwZXJgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhlc2UgQVBJcyBhcmUgYmVpbmcgdXNlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE4MTAsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MzMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMDo0Mzo0My43NDI3NzY2MjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcyNDA4NTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXihzdGF0aWMgKT8oaW50fHZvaWR8c3RydWN0IGJwZl9tYXAgXFxcXCopIGh0YWJfbWFwX2FsbG9jXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jPTQ1MD1zdGF0aWMgaW50IGFsbG9jX2V4dHJhX2VsZW1zKHN0cnVjdCBicGZfaHRhYiAqaHRhYilcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTQ3My0vKiBDYWxsZWQgZnJvbSBzeXNjYWxsICovXFxua2VybmVsL2JwZi9oYXNodGFiLmM6NDc0OnN0YXRpYyBpbnQgaHRhYl9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtNDc1LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTA6NDM6NDMuODIwMDIxMTVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzUxMjk4MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipUaGlua2luZyBUaHJvdWdoIEhhc2ggVGFibGUgQWxsb2NhdGlvbioqXG5cblJpZ2h0LCBzbyBgaHRhYl9tYXBfYWxsb2NgIGlzIHN0YXRpYywgd2hpY2ggaXMgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgd2hlbiB0cmFja2luZyB0aGlzLiBUaGUgc2NvcGUgb2YgdGhpcyBpcyBsaW1pdGVkLCBhIGRldGFpbCB0aGF0IGlzIG9mIHNpZ25pZmljYW5jZSB0byBob3cgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGlzIGJlaW5nIGRvbmUuXG5cbk5vdywgbGV0J3MgcGl2b3QgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBgaHRhYl9tYXBfdXBkYXRlX2VsZW1gIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIGhvdyBlbGVtZW50cyBhcmUgdXBkYXRlZCBpcyBrZXkgaGVyZS4gVGhhdCB3aWxsIGluZm9ybSBhIGdyZWF0IGRlYWwgYWJvdXQgdGhlIG92ZXJhbGwgbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzNTA0LCJPdXRwdXRUb2tlbnMiOjQ3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTA6NDM6NDYuNTcxMzIxNzc5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0NzA3MzI5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/KGxvbmd8aW50fHZvaWQpIGh0YWJfbWFwX3VwZGF0ZV9lbGVtXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvaGFzaHRhYi5jPTEyNTc9c3RhdGljIGludCBjaGVja19mbGFncyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIsIHN0cnVjdCBodGFiX2VsZW0gKmxfb2xkLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTI3MS0vKiBDYWxsZWQgZnJvbSBzeXNjYWxsIG9yIGZyb20gZUJQRiBwcm9ncmFtICovXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MTI3MjpzdGF0aWMgbG9uZyBodGFiX21hcF91cGRhdGVfZWxlbShzdHJ1Y3QgYnBmX21hcCAqbWFwLCB2b2lkICprZXksIHZvaWQgKnZhbHVlLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTEyNzMtXFx0XFx0XFx0XFx0IHU2NCBtYXBfZmxhZ3MpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0xNDQ1PXN0YXRpYyBpbnQgaHRhYl9tYXBfY2hlY2tfdXBkYXRlX2ZsYWdzKGJvb2wgb25hbGxjcHVzLCB1NjQgbWFwX2ZsYWdzKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMTQ1My1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoxNDU0OnN0YXRpYyBsb25nIGh0YWJfbWFwX3VwZGF0ZV9lbGVtX2luX3BsYWNlKHN0cnVjdCBicGZfbWFwICptYXAsIHZvaWQgKmtleSxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0xNDU1LVxcdFxcdFxcdFxcdFxcdCAgdm9pZCAqdmFsdWUsIHU2NCBtYXBfZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEwOjQzOjQ2LjYzNjAzMjk4OFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MjYwNzE4NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEJQRiBNYXAgT3BlcmF0aW9ucyBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIEJQRiBtYXAgb3BlcmF0aW9uIGltcGxlbWVudGF0aW9ucy4gVGhleSdyZSBhbGwgZGVjbGFyZWQgYXMgYHN0YXRpY2AgZnVuY3Rpb25zLCB3aGljaCBpcyB0eXBpY2FsIGZvciBjb3JlIGxvZ2ljIHdpdGhpbiBhIGtlcm5lbCBtb2R1bGUsIGJ1dCB0aGV5J3JlIHRoZSBvbmVzIGRyaXZpbmcgdGhlIGBicGZfbWFwX29wc2AuICBUaGF0J3Mgd2hlcmUgdGhlIGltcG9ydGFudCBzdHVmZiBoYXBwZW5zLiBUaGUgYGJwZl9tYXBfb3BzYCBzdHJ1Y3QsIGluIHBhcnRpY3VsYXIsIGhvbGRzIHBvaW50ZXJzIHRvIHRoZXNlIGZ1bmN0aW9ucywgd2hpY2ggaXMga2V5IGZvciBob3cgdGhlc2UgbWFwcyBiZWhhdmUuXG5cbk5vdywgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIGZ1enppbmcuIElmIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgZW5jYXBzdWxhdGUgdGhlIGNvcmUgbG9naWMsIHRoZXkgc2VlbSBsaWtlIHByaW1lIHRhcmdldHMuIEJ1dCB3YWl0Li4udGhlIGluc3RydWN0aW9ucyBhcmUgdGVsbGluZyBtZSB0byBwcmlvcml0aXplIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cy4gVGhhdCBtZWFucyBhdm9pZGluZyBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucyB0aGF0IGFyZSBsaWtlbHkgaW5saW5lZCBieSB0aGUgY29tcGlsZXIuIFRoZXNlIGhlbHBlcnMgd29uJ3QgaGF2ZSB0aGVpciBvd24gZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBmb3IgZnV6emluZyB0b29scyB0byB0YXJnZXQgZWZmZWN0aXZlbHkuXG5cblRoaW5raW5nIGFib3V0IHRoYXQsIGBodGFiX21hcF91cGRhdGVfZWxlbWAgaXNuJ3QgYW4gaW50ZXJuYWwgaGVscGVyLiBJdCdzIGEgY2FsbGJhY2sgZm9yIGEgbWFwIG9wZXJhdGlvbiwgc28gaXRzIGFkZHJlc3MgaXMgZGVmaW5pdGVseSB0YWtlbiBhbmQgaXQgc2hvdWxkbid0IGJlIGlubGluZWQuIFRoYXQncyBhIGdvb2QgZmluZCEgSXQgc2hvdWxkIGJlIGEgZ29vZCBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbkxldCBtZSB0YWtlIGEgbG9vayBhdCBgYnBmX21hcF9tZXRhX2FsbG9jYCBuZXh0IHRvIHNlZSBpZiBpdCBmb2xsb3dzIHRoaXMgcGF0dGVybi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM5ODcsIk91dHB1dFRva2VucyI6NTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTA6NDM6NTEuMDYyMTA4MDYzWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxNjAzNzA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4oc3RhdGljICk/c3RydWN0IGJwZl9tYXAgXFxcXCpicGZfbWFwX21ldGFfYWxsb2NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9tYXBfaW5fbWFwLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9tYXBfaW5fbWFwLmM9MTA9c3RhdGljIGJvb2wgYnBmX21hcF90eXBlX2lzX2h0YWIoZW51bSBicGZfbWFwX3R5cGUgdHlwZSlcXG4tLVxcbmtlcm5lbC9icGYvbWFwX2luX21hcC5jLTE4LVxcbmtlcm5lbC9icGYvbWFwX2luX21hcC5jOjE5OnN0cnVjdCBicGZfbWFwICpicGZfbWFwX21ldGFfYWxsb2MoaW50IGlubmVyX21hcF91ZmQpXFxua2VybmVsL2JwZi9tYXBfaW5fbWFwLmMtMjAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMDo0Mzo1MS4xMjM3MTU0ODJaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODYyMTQ3NjIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEhhc2ggVGFibGUgT3BlcmF0aW9ucyoqXG5cbk9rYXksIGxldCdzIG5haWwgZG93biBvdXIga2V5IGZvY3VzIGFyZWFzLiBJIG5lZWQgdG8gbGlzdCBhIHNldCBvZiBmdW5jdGlvbnMgdGhhdCBhcmUgY3J1Y2lhbCB0byB1bmRlcnN0YW5kaW5nIHRoZSBoYXNoIHRhYmxlIGltcGxlbWVudGF0aW9uIHdlJ3JlIGRlYWxpbmcgd2l0aC4gVGhpbmtpbmcgaXQgdGhyb3VnaCwgdGhlIGZ1bmN0aW9ucyB0aGF0IGp1bXAgb3V0IGF0IG1lIGFzIG1vc3QgcmVsZXZhbnQgYXJlOiBgaHRhYl9tYXBfYWxsb2NgLCBvYnZpb3VzbHk7IHRoZW4gaG93IHdlIHVwZGF0ZSBhbmQgZGVsZXRlIGVsZW1lbnRzIHdpdGggYGh0YWJfbWFwX3VwZGF0ZV9lbGVtYCwgYGh0YWJfbHJ1X21hcF91cGRhdGVfZWxlbWAsIGFuZCBgaHRhYl9tYXBfZGVsZXRlX2VsZW1gOyBhbmQsIG9mIGNvdXJzZSwgbG9va3VwcyBhbmQgaXRlcmF0aW9ucyB3aXRoIGBodGFiX21hcF9sb29rdXBfZWxlbWAgYW5kIGBodGFiX21hcF9nZXRfbmV4dF9rZXlgLiBJIGFsc28gbmVlZCB0byBtYWtlIHN1cmUgdG8gaW5jbHVkZSB0aG9zZSBmdW5jdGlvbnMgdGhhdCBhcmUgaW50ZXJuYWwgaW1wbGVtZW50YXRpb25zIGxpa2UgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfZWxlbWAgYW5kIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYC4gRmluYWxseSwgSSdsbCBuZWVkIHRvIHJlbWVtYmVyIGBicGZfbWFwX21ldGFfYWxsb2NgLlxuXG5Ob3csIGJlZm9yZSBJIGdvIGFueSBmdXJ0aGVyLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYGh0YWJfbWFwX2FsbG9jYCBpcyBhY3R1YWxseSAqZGVmaW5lZCogd2l0aGluIHRoaXMgY29udGV4dC4gSSdsbCBuZWVkIHRvIGNoZWNrIHRoZSBzY29wZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1OTYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTA6NDM6NTQuOTg1ODY1NDk1WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjY2MDI5OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodGFiX21hcF9hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL2hhc2h0YWIuYz00NTA9c3RhdGljIGludCBhbGxvY19leHRyYV9lbGVtcyhzdHJ1Y3QgYnBmX2h0YWIgKmh0YWIpXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy00NzMtLyogQ2FsbGVkIGZyb20gc3lzY2FsbCAqL1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjQ3NDpzdGF0aWMgaW50IGh0YWJfbWFwX2FsbG9jX2NoZWNrKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTQ3NS17XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz01OTE9c3RhdGljIGludCBodGFiX21hcF9jaGVja19idGYoc3RydWN0IGJwZl9tYXAgKm1hcCwgY29uc3Qgc3RydWN0IGJ0ZiAqYnRmLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtNTk5LVxcdCAqIFdlIG11c3Qgc2V0IHRoZSBkdG9yIHVzaW5nIHRoaXMgY2FsbGJhY2ssIGFzIG1hcCdzIEJURiByZWNvcmQgaXMgbm90XFxua2VybmVsL2JwZi9oYXNodGFiLmM6NjAwOlxcdCAqIHBvcHVsYXRlZCBpbiBodGFiX21hcF9hbGxvYygpLCBzbyBpdCB3aWxsIGFsd2F5cyBhcHBlYXIgYXMgTlVMTC5cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy02MDEtXFx0ICovXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy02MDctXFxua2VybmVsL2JwZi9oYXNodGFiLmM6NjA4OnN0YXRpYyBzdHJ1Y3QgYnBmX21hcCAqaHRhYl9tYXBfYWxsb2ModW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtNjA5LXtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI0NTY9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfbWFwX29wcyA9IHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDU3LVxcdC5tYXBfbWV0YV9lcXVhbCA9IGJwZl9tYXBfbWV0YV9lcXVhbCxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDU4OlxcdC5tYXBfYWxsb2NfY2hlY2sgPSBodGFiX21hcF9hbGxvY19jaGVjayxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNDU5OlxcdC5tYXBfYWxsb2MgPSBodGFiX21hcF9hbGxvYyxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNDYwLVxcdC5tYXBfZnJlZSA9IGh0YWJfbWFwX2ZyZWUsXFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yNDc4PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX2xydV9tYXBfb3BzID0ge1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0NzktXFx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI0ODA6XFx0Lm1hcF9hbGxvY19jaGVjayA9IGh0YWJfbWFwX2FsbG9jX2NoZWNrLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI0ODE6XFx0Lm1hcF9hbGxvYyA9IGh0YWJfbWFwX2FsbG9jLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI0ODItXFx0Lm1hcF9mcmVlID0gaHRhYl9tYXBfZnJlZSxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI2NjY9Y29uc3Qgc3RydWN0IGJwZl9tYXBfb3BzIGh0YWJfcGVyY3B1X21hcF9vcHMgPSB7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjY2Ny1cXHQubWFwX21ldGFfZXF1YWwgPSBicGZfbWFwX21ldGFfZXF1YWwsXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjY2ODpcXHQubWFwX2FsbG9jX2NoZWNrID0gaHRhYl9tYXBfYWxsb2NfY2hlY2ssXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjY2OTpcXHQubWFwX2FsbG9jID0gaHRhYl9tYXBfYWxsb2MsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjY3MC1cXHQubWFwX2ZyZWUgPSBodGFiX21hcF9mcmVlLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9MjY4OD1jb25zdCBzdHJ1Y3QgYnBmX21hcF9vcHMgaHRhYl9scnVfcGVyY3B1X21hcF9vcHMgPSB7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjY4OS1cXHQubWFwX21ldGFfZXF1YWwgPSBicGZfbWFwX21ldGFfZXF1YWwsXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjY5MDpcXHQubWFwX2FsbG9jX2NoZWNrID0gaHRhYl9tYXBfYWxsb2NfY2hlY2ssXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjY5MTpcXHQubWFwX2FsbG9jID0gaHRhYl9tYXBfYWxsb2MsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjY5Mi1cXHQubWFwX2ZyZWUgPSBodGFiX21hcF9mcmVlLFxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjcwOC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzA5OnN0YXRpYyBpbnQgZmRfaHRhYl9tYXBfYWxsb2NfY2hlY2sodW5pb24gYnBmX2F0dHIgKmF0dHIpXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjcxMC17XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yNzEyLVxcdFxcdHJldHVybiAtRUlOVkFMO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjI3MTM6XFx0cmV0dXJuIGh0YWJfbWFwX2FsbG9jX2NoZWNrKGF0dHIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3MTQtfVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmM9Mjc4MT1zdGF0aWMgc3RydWN0IGJwZl9tYXAgKmh0YWJfb2ZfbWFwX2FsbG9jKHVuaW9uIGJwZl9hdHRyICphdHRyKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjc4OC1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyNzg5OlxcdG1hcCA9IGh0YWJfbWFwX2FsbG9jKGF0dHIpO1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI3OTAtXFx0aWYgKElTX0VSUihtYXApKSB7XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0yODM1PWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyBodGFiX29mX21hcHNfbWFwX29wcyA9IHtcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzoyODM2OlxcdC5tYXBfYWxsb2NfY2hlY2sgPSBmZF9odGFiX21hcF9hbGxvY19jaGVjayxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yODM3LVxcdC5tYXBfYWxsb2MgPSBodGFiX29mX21hcF9hbGxvYyxcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jPTI4OTM9c3RhdGljIGNvbnN0IHN0cnVjdCByaGFzaHRhYmxlX3BhcmFtcyByaHRhYl9wYXJhbXNfbG9uZyA9IHtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5MDAtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6MjkwMTpzdGF0aWMgc3RydWN0IGJwZl9tYXAgKnJodGFiX21hcF9hbGxvYyh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTAyLXtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NTAtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk1MTpzdGF0aWMgaW50IHJodGFiX21hcF9hbGxvY19jaGVjayh1bmlvbiBicGZfYXR0ciAqYXR0cilcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYy0yOTUyLXtcXG4tLVxcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTI5NzAtXFxua2VybmVsL2JwZi9oYXNodGFiLmM6Mjk3MTpcXHRyZXR1cm4gaHRhYl9tYXBfYWxsb2NfY2hlY2soYXR0cik7XFxua2VybmVsL2JwZi9oYXNodGFiLmMtMjk3Mi19XFxuLS1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYz0zNjIxPWNvbnN0IHN0cnVjdCBicGZfbWFwX29wcyByaHRhYl9tYXBfb3BzID0ge1xcbmtlcm5lbC9icGYvaGFzaHRhYi5jLTM2MjItXFx0Lm1hcF9tZXRhX2VxdWFsID0gYnBmX21hcF9tZXRhX2VxdWFsLFxcbmtlcm5lbC9icGYvaGFzaHRhYi5jOjM2MjM6XFx0Lm1hcF9hbGxvY19jaGVjayA9IHJodGFiX21hcF9hbGxvY19jaGVjayxcXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNjI0OlxcdC5tYXBfYWxsb2MgPSByaHRhYl9tYXBfYWxsb2MsXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzYyNS1cXHQubWFwX2ZyZWUgPSByaHRhYl9tYXBfZnJlZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTA6NDM6NTUuMDM4NTMwNDQ0WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Njg0ODkwNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duIG1lbnRhbCBwcm9jZXNzaW5nIGFzIGFuIGV4cGVydDpcblxuKipSZWZsZWN0aW5nIG9uIGEgQlBGIEhhc2ggTWFwIEltcGxlbWVudGF0aW9uIFBhdGNoKipcblxuQWxyaWdodCwgc28gdGhpcyBwYXRjaCBpcyBkaWdnaW5nIGludG8gdGhlIEJQRiBoYXNoIG1hcCBpbXBsZW1lbnRhdGlvbi4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIGNvdXBsZSBvZiB0aGluZ3MuIEZpcnN0LCB0aGlzIGlzIGEgY29yZSBwaWVjZSBvZiBCUEYgaW5mcmFzdHJ1Y3R1cmUsIG1lYW5pbmcgYW55IGNoYW5nZXMgaGVyZSBoYXZlIHRoZSBwb3RlbnRpYWwgZm9yIHNpZ25pZmljYW50IGltcGFjdCBvbiBwZXJmb3JtYW5jZSwgc3RhYmlsaXR5LCBhbmQgZXZlbiBzZWN1cml0eSBhY3Jvc3MgYSB3aWRlIHJhbmdlIG9mIEJQRi1iYXNlZCBhcHBsaWNhdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgdGhlIG1vZGlmaWNhdGlvbiBkZWVwbHkuIFNlY29uZCwgSSBuZWVkIHRvIGtlZXAgdGhlIGdyZWF0ZXIgY29udGV4dCBvZiB0aGUgd2hvbGUgc3lzdGVtIGluIG1pbmQsIGhvdyB0aGlzIG1vZGlmaWNhdGlvbiB3aWxsIGFmZmVjdCBhbmQgaW50ZXJhY3Qgd2l0aCBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLlxuXG5UaGUgbWVudGlvbiBvZiBgQlBGX1NZU0NBTExgIG1ha2VzIG15IGV5ZWJyb3dzIHJhaXNlIGEgYml0LiBUaGlzIGxpa2VseSBpbmRpY2F0ZXMgdGhhdCB0aGUgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIHN5c3RlbSBjYWxsIGludGVyZmFjZSByZWxhdGVkIHRvIEJQRiwgd2hpY2ggaXMgYW4gYXJlYSB0aGF0J3MgYmVlbiB1bmRlciBzY3J1dGlueS4gVGhpcyBjb3VsZCBtZWFuIGNoYW5nZXMgdG8gaG93IEJQRiBwcm9ncmFtcyBhcmUgbG9hZGVkLCB2ZXJpZmllZCwgb3IgZXhlY3V0ZWQuIEdpdmVuIHRoYXQgdGhlIGtlcm5lbCBhbmQgQlBGIHN1YnN5c3RlbSBpcyBjb25zdGFudGx5IGV2b2x2aW5nLCBJIG5lZWQgdG8ga2VlcCB0aGUgYmlnZ2VyIHBpY3R1cmUgaW4gbWluZC5cblxuTXkgbmV4dCBzdGVwIGlzIGNsZWFyOiBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYEJQRl9TWVNDQUxMYCBpcyBhY3R1YWxseSBlbmFibGVkIGluIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24uIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBLY29uZmlnYCBmaWxlcyBhbmQgZG91YmxlLWNoZWNrIGl0cyBzdGF0dXMuIEkgbmVlZCB0byBrbm93IGV4YWN0bHkgaG93IGl0IGlzIGNvbmZpZ3VyZWQgYXMgdGhlIGBLY29uZmlnYCBmaWxlcyB3aWxsIGdpdmUgbWUgaW5mb3JtYXRpb24gYWJvdXQgZGVwZW5kZW5jeSBhbmQgY29uZmlndXJhdGlvbiBvZiB0aGUgY3VycmVudCBzeXN0ZW0uIFRoaXMgd2lsbCBnaXZlIG1lIGEgY3JpdGljYWwgYmFzZWxpbmUgZm9yIGFzc2Vzc2luZyB0aGUgcGF0Y2gncyBvdmVyYWxsIGltcGFjdCBhbmQgaG93IGl0IHJlbGF0ZXMgdG8gdGhlIHdpZGVyIGtlcm5lbCBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjc1NCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEwOjQzOjU5LjAwNzAyMzcwNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMyMjI1OTEzNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQlBGX1NZU0NBTExcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC9icGYvS2NvbmZpZz0yNT1tZW51IFxcXCJCUEYgc3Vic3lzdGVtXFxcIlxcbmtlcm5lbC9icGYvS2NvbmZpZy0yNi1cXG5rZXJuZWwvYnBmL0tjb25maWc6Mjc6Y29uZmlnIEJQRl9TWVNDQUxMXFxua2VybmVsL2JwZi9LY29uZmlnLTI4LVxcdGJvb2wgXFxcIkVuYWJsZSBicGYoKSBzeXN0ZW0gY2FsbFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTA6NDQ6MDEuMzI5Mjg3MjcxWiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4OTM3MTM2MzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqQWRkaW5nIGBCUEZfU1lTQ0FMTGAgdG8gRW5hYmxlQ29uZmlncyoqXG5cblJpZ2h0LCBzbyB3ZSdyZSBhZGRpbmcgYEJQRl9TWVNDQUxMYCB0byBgRW5hYmxlQ29uZmlnc2AuIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgc28gZmFyLiBKdXN0IG5lZWQgdG8gaW50ZWdyYXRlIHRoYXQgZmxhZy4gTm93LCBsZXQncyBqdXN0IG1ha2Ugc3VyZSB0aGlzIGFkZGl0aW9uIGRvZXNuJ3QgY3JlYXRlIGFueSBjb25mbGljdHMgb3IgZWRnZSBjYXNlcyBJJ20gbm90IGltbWVkaWF0ZWx5IHRoaW5raW5nIG9mLCBlc3BlY2lhbGx5IHdpdGggZXhpc3RpbmcgY29uZmlndXJhdGlvbnMuIEFsd2F5cyB3b3J0aCBhIHF1aWNrIHNhbml0eSBjaGVjayB0byBhdm9pZCB1bmV4cGVjdGVkIGJlaGF2aW9yIGRvd24gdGhlIGxpbmUuXG5cbk5vdywgbGV0IG1lIHNlZSB3aGljaCBmaWxlcyBhcmUgYmVpbmcgdG91Y2hlZCBieSB0aGlzIGNoYW5nZS4gQWhhLCBsb29rcyBsaWtlIHdlJ3JlIGRlYWxpbmcgd2l0aCBga2VybmVsL2JwZi9oYXNodGFiLmNgIGFuZCBga2VybmVsL2JwZi9tYXBfaW5fbWFwLmNgLiBUaG9zZSBhcmUgKmRlZmluaXRlbHkqIGludGVyZXN0aW5nIGFyZWFzLiBUaG9zZSBmaWxlcyBhcmUgb25seSBjb21waWxlZCB3aGVuIGBDT05GSUdfQlBGX1NZU0NBTExgIGlzIGVuYWJsZWQsIHdoaWNoIG1lYW5zIHRoZSBmdW5jdGlvbnMgaW4gdGhlc2UgZmlsZXMgYXJlIG9ubHkgYXZhaWxhYmxlIGlmIHRoZSBjb25maWcgaXMgc2V0LiBDb25zaWRlcmluZyB0aGUgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBpbnRlcmFjdGlvbnMgdGhvc2UgZmlsZXMgZW5hYmxlLCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gY29tZm9ydGFibGUgd2l0aCB0aGF0IGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uLiBJIHdvdWxkIGxpa2UgdG8gZG8gc29tZSBhZGRpdGlvbmFsIGNvZGUgcmV2aWV3cyB3aGVuIHRpbWUgcGVybWl0cyB0byBwcmV2ZW50IHJlZ3Jlc3Npb25zIGFuZCBzZWN1cml0eSBpc3N1ZXMgdGhhdCBtaWdodCBiZSBpbnRyb2R1Y2VkIGJ5IHRoaXMgY29uZmlnIGNoYW5nZS4gSSdsbCBuZWVkIHRvIGRvIGEgZGVlcCBkaXZlIHRoZXJlIGFzIHBhcnQgb2YgbXkgZHVlIGRpbGlnZW5jZS4gT2theSwgdGhhdCdzIHRoZSBzY29wZSBvZiB0aGUgaW1tZWRpYXRlIGNoYW5nZSB1bmRlcnN0b29kLiBMZXQncyBzZWUgaWYgdGhlIGJ1aWxkIHN5c3RlbSBoYW5kbGVzIHRoZSBkZXBlbmRlbmN5IGNvcnJlY3RseS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzIzMiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEwOjQ0OjA1LjIyMzAwNDEzNFoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTA5NjI3ODU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhhc2h0YWJcXFxcLm9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJrZXJuZWwvYnBmL01ha2VmaWxlPTEwPW9iai0kKENPTkZJR19CUEZfU1lTQ0FMTCkgKz0gYnBmX2l0ZXIubyBtYXBfaXRlci5vIHRhc2tfaXRlci5vIHByb2dfaXRlci5vIGxpbmtfaXRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZToxMTpvYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGhhc2h0YWIubyBhcnJheW1hcC5vIHBlcmNwdV9mcmVlbGlzdC5vIGJwZl9scnVfbGlzdC5vIGxwbV90cmllLm8gbWFwX2luX21hcC5vIGJsb29tX2ZpbHRlci5vXFxua2VybmVsL2JwZi9NYWtlZmlsZS0xMi1vYmotJChDT05GSUdfQlBGX1NZU0NBTEwpICs9IGxvY2FsX3N0b3JhZ2UubyBxdWV1ZV9zdGFja19tYXBzLm8gcmluZ2J1Zi5vIGJwZl9pbnNuX2FycmF5Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTA6NDQ6MDUuMzMyNjM1OTgyWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEwOTg0OTcyMDA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEJQRiBIYXNoIE1hcCBFbGVtZW50IFN0cnVjdHVyZSBDaGFuZ2VzKipcblxuT2theSwgc28gd2UncmUgZGl2aW5nIGludG8gdGhpcyBwYXRjaC4gVGhlIGtleSBoZXJlIGlzIGRlZmluaXRlbHkgYENPTkZJR19CUEZfU1lTQ0FMTGAsIHRoYXQncyB0aGUgbWFpbiBlbmFibGVyLiBMZXQncyBnZXQgdGhlIGZvY3VzIHJpZ2h0LiBTaW5jZSB0aGlzIHBhdGNoIGZ1bmRhbWVudGFsbHkgY2hhbmdlcyBob3cgaGFzaCBtYXAgZWxlbWVudHMgYXJlIHN0cnVjdHVyZWQgaW50ZXJuYWxseSwgd2UgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBpbnRlcmFjdCB3aXRoIHRob3NlIGVsZW1lbnRzLiBUaGUgb25lcyB0aGF0IGRvIHRoZSBhbGxvY2F0aW5nLCB1cGRhdGluZywgbG9va2luZyB1cCwgYW5kIGRlbGV0aW5nLiBUaG9zZSBhcmUgdGhlIGhpZ2gtdmFsdWUgdGFyZ2V0cyBmb3IgZnV6emluZy5cblxuTXkgaW5pdGlhbCBsaXN0IGluY2x1ZGVzOlxuXG4qICAgYGh0YWJfbWFwX2FsbG9jYFxuKiAgIGBodGFiX21hcF91cGRhdGVfZWxlbWBcbiogICBgaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtYFxuKiAgIGBodGFiX21hcF9kZWxldGVfZWxlbWBcbiogICBgaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtYFxuKiAgIGBodGFiX21hcF9sb29rdXBfZWxlbWBcbiogICBgaHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtYFxuKiAgIGBodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW1gXG4qICAgYGh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW1gXG4qICAgYGh0YWJfbWFwX2dldF9uZXh0X2tleWBcbiogICBgX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtYFxuKiAgIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoYFxuKiAgIGBicGZfbWFwX21ldGFfYWxsb2NgXG4qICAgYGJwZl9odGFiX21hcF9tZXRhX2luaXRgXG5cbldhaXQgYSBzZWNvbmQsIGBodGFiX21hcF9hbGxvY2AgaXMgc3RhdGljLCByaWdodD8gQnV0IGl0J3MgcGFydCBvZiB0aGUgbWFwIG9wZXJhdGlvbnMgY2FsbGJhY2sgc3RydWN0dXJlLiBUaGF0IG1lYW5zIHRoZSBjb21waWxlciB3b24ndCBuZWNlc3NhcmlseSBpbmxpbmUgaXQsIGFuZCB3ZSAqY2FuKiB0YXJnZXQgaXQsIGFuZCB0aGUgc2FtZSBnb2VzIGZvciBvdGhlciBzdGF0aWMgZnVuY3Rpb25zIHdoaWNoIGFyZSBhc3NpZ25lZCBhcyBgYnBmX21hcF9vcHNgIGNhbGxiYWNrcy4gUGVyZmVjdC4gR29vZCBjYXRjaC4gTGV0J3MgcmVmaW5lIHRoZSBsaXN0LiBTbywgaW5jbHVkaW5nIHRob3NlLCBsZXQncyBhbHNvIGFkZCBgYnBmX2h0YWJfbWFwX21ldGFfaW5pdGAgYW5kIGBicGZfaHRhYl9tYXBfbWV0YV9zaXplYCBzaW5jZSB0aGV5J3JlIG5vbi1zdGF0aWMgZW50cnkgcG9pbnRzLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0J3MgdmVyaWZ5IHRob3NlIGZ1bmN0aW9uIG5hbWVzIG9uZSBsYXN0IHRpbWU6XG5cbiogICBgaHRhYl9tYXBfYWxsb2NgXG4qICAgYGh0YWJfbWFwX3VwZGF0ZV9lbGVtYFxuKiAgIGBodGFiX2xydV9tYXBfdXBkYXRlX2VsZW1gXG4qICAgYGh0YWJfbWFwX2RlbGV0ZV9lbGVtYFxuKiAgIGBodGFiX2xydV9tYXBfZGVsZXRlX2VsZW1gXG4qICAgYGh0YWJfbWFwX2xvb2t1cF9lbGVtYFxuKiAgIGBodGFiX2xydV9tYXBfbG9va3VwX2VsZW1gXG4qICAgYGh0YWJfcGVyY3B1X21hcF9sb29rdXBfZWxlbWBcbiogICBgaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfZWxlbWBcbiogICBgaHRhYl9tYXBfZ2V0X25leHRfa2V5YFxuKiAgIGBfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1gXG4qICAgYF9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hgXG4qICAgYGJwZl9tYXBfbWV0YV9hbGxvY2BcbiogICBgYnBmX2h0YWJfbWFwX21ldGFfaW5pdGBcbiogICBgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZWBcblxuQWxyaWdodC4gQ29uZmlndXJhdGlvbi13aXNlLCBpdCdzIGp1c3QgYEJQRl9TWVNDQUxMYCwgZ29vZC5cblxuTm93LCB0aGUgcmVhc29uaW5nOiBUaGlzIHBhdGNoIGlzIGFsbCBhYm91dCBvcHRpbWl6aW5nIGhhc2ggbWFwIGVsZW1lbnQgbWVtb3J5IGxheW91dC4gU3BlY2lmaWNhbGx5LCBjb25kaXRpb25hbGx5IHJlbW92aW5nIHRoZSBoYXNoIHZhbHVlIGZpZWxkIGJhc2VkIG9uIHRoZSBrZXkgc2l6ZSBhbmQgdGhlIG1hcCB0eXBlLiBJdOKAmXMgYWxzbyBpbnRyb2R1Y2luZyBga2V5X29mZnNldGAgZm9yIGR5bmFtaWMga2V5L3ZhbHVlIG9mZnNldCBjYWxjdWxhdGlvbnMuIFRoaXMgY2hhbmdlIGlzIGNvcmUgdG8gdGhlIEJQRiBoYXNoIG1hcCBpbXBsZW1lbnRhdGlvbi4gVGhlcmVmb3JlLCBmdXp6aW5nIGlzIGNyaXRpY2FsIHRvIGV4cG9zZSBhbnkgbWVtb3J5IGNvcnJ1cHRpb24gdnVsbmVyYWJpbGl0aWVzIG9yIGxvZ2ljYWwgZXJyb3JzIHJlc3VsdGluZyBmcm9tIHRoaXMgZnVuY3Rpb25hbCBjaGFuZ2UuIE5lZWQgdG8gY2hlY2sgYGJwZl9odGFiX21hcF9tZXRhX2luaXRgIGFuZCBgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZWAgdG9vLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzgxNywiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wMVQxMDo0NDoxNi4zMTc2MTA3N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzAxODM5NjA2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJwZl9odGFiX21hcF9tZXRhX2luaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL2JwZi9oYXNodGFiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2JwZi9oYXNodGFiLmM9MzY0Mz1zaXplX3QgYnBmX2h0YWJfbWFwX21ldGFfc2l6ZSh2b2lkKVxcbi0tXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzY0Ny1cXG5rZXJuZWwvYnBmL2hhc2h0YWIuYzozNjQ4OnZvaWQgYnBmX2h0YWJfbWFwX21ldGFfaW5pdChzdHJ1Y3QgYnBmX21hcCAqaW5uZXJfbWFwX21ldGEsIHN0cnVjdCBicGZfbWFwICppbm5lcl9tYXApXFxua2VybmVsL2JwZi9oYXNodGFiLmMtMzY0OS17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTAxVDEwOjQ0OjE2LjYxOTQ1NTI0NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDAxMjM3NjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkV4ZWN1dGluZyB0aGUgUHJvY2VkdXJlKipcblxuT2theSwgdGhlIHByZWxpbWluYXJ5IGNoZWNrcyBhbGwgc2VlbSBzb3VuZC4gVGhlIGludGVybmFsIHN0YXRlIGFwcGVhcnMgYXMgZXhwZWN0ZWQsIGFuZCB0aGUgaW5wdXQgZGF0YSB2YWxpZGF0ZXMgYWdhaW5zdCBteSBrbm93biBjb25zdHJhaW50cy4gTm8gcmVkIGZsYWdzIGFyZSB3YXZpbmcuIEknbSBzYXRpc2ZpZWQgdGhhdCBwcm9jZWVkaW5nIHdpdGggdGhlIGNvcmUgZXhlY3V0aW9uIGlzIHdhcnJhbnRlZC5cblxuVGhlcmVmb3JlLCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLiBUaGlzIGZ1bmN0aW9uIGVuY2Fwc3VsYXRlcyB0aGUgZmluYWwgc3RhZ2Ugb2YgdGhpcyBwcm9jZXNzIC0gdGhlIGRlZmluaXRpdmUgYWN0aW9uIHdoaWNoIGNvbmZpcm1zIHRoZSBwcm9jZXNzIGV4ZWN1dGlvbiBpcyBjb21wbGV0ZS4gSSdtIGNvbmZpZGVudCB0aGF0IGludm9raW5nIGBzZXQtcmVzdWx0c2AgYXQgdGhpcyBqdW5jdHVyZSB3aWxsIHlpZWxkIHRoZSBjb3JyZWN0IGFuZCBkZXNpcmVkIG91dHB1dCwgZWZmZWN0aXZlbHkgY29tcGxldGluZyB0aGlzIHBhcnRpY3VsYXIgcHJvY2Vzcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk2NTYsIk91dHB1dFRva2VucyI6MzM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDFUMTA6NDQ6MjEuMDIwNjk1OTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTM3NDU2MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJQRl9TWVNDQUxMXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiaHRhYl9tYXBfYWxsb2NcIixcbiAgICBcImh0YWJfbWFwX3VwZGF0ZV9lbGVtXCIsXG4gICAgXCJodGFiX2xydV9tYXBfdXBkYXRlX2VsZW1cIixcbiAgICBcImh0YWJfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJodGFiX2xydV9tYXBfZGVsZXRlX2VsZW1cIixcbiAgICBcImh0YWJfbWFwX2xvb2t1cF9lbGVtXCIsXG4gICAgXCJodGFiX2xydV9tYXBfbG9va3VwX2VsZW1cIixcbiAgICBcImh0YWJfcGVyY3B1X21hcF9sb29rdXBfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfcGVyY3B1X21hcF9sb29rdXBfZWxlbVwiLFxuICAgIFwiaHRhYl9tYXBfZ2V0X25leHRfa2V5XCIsXG4gICAgXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2VsZW1cIixcbiAgICBcIl9faHRhYl9tYXBfbG9va3VwX2FuZF9kZWxldGVfYmF0Y2hcIixcbiAgICBcImJwZl9tYXBfbWV0YV9hbGxvY1wiLFxuICAgIFwiYnBmX2h0YWJfbWFwX21ldGFfaW5pdFwiLFxuICAgIFwiYnBmX2h0YWJfbWFwX21ldGFfc2l6ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9wdGltaXplcyB0aGUgbWVtb3J5IGxheW91dCBvZiBCUEYgaGFzaCBtYXAgZWxlbWVudHMgYnkgY29uZGl0aW9uYWxseSByZW1vdmluZyB0aGUgaGFzaCB2YWx1ZSBmaWVsZCB3aGVuIGl0J3Mgbm90IG5lZWRlZC4gSXQgaW50cm9kdWNlcyBga2V5X29mZnNldGAgdG8gZHluYW1pY2FsbHkgY29tcHV0ZSB0aGUgb2Zmc2V0IG9mIHRoZSBrZXkgYW5kIHZhbHVlIHdpdGhpbiB0aGUgZWxlbWVudC4gSXQgYWxzbyBtb2RpZmllcyBgbWFwX2luX21hcC5jYCB0byBwcm9wYWdhdGUgdGhpcyBvZmZzZXQgZm9yIGlubmVyIG1hcHMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBCUEYgaGFzaCBtYXAgaW1wbGVtZW50YXRpb24gYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIG1lbW9yeSBjb3JydXB0aW9uIG9yIGxvZ2ljIGVycm9ycyBhcmUgaW50cm9kdWNlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCUEZfU1lTQ0FMTFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh0YWJfbWFwX2FsbG9jXCIsXG4gICAgXCJodGFiX21hcF91cGRhdGVfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX3VwZGF0ZV9lbGVtXCIsXG4gICAgXCJodGFiX21hcF9kZWxldGVfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJodGFiX21hcF9sb29rdXBfZWxlbVwiLFxuICAgIFwiaHRhYl9scnVfbWFwX2xvb2t1cF9lbGVtXCIsXG4gICAgXCJodGFiX3BlcmNwdV9tYXBfbG9va3VwX2VsZW1cIixcbiAgICBcImh0YWJfbHJ1X3BlcmNwdV9tYXBfbG9va3VwX2VsZW1cIixcbiAgICBcImh0YWJfbWFwX2dldF9uZXh0X2tleVwiLFxuICAgIFwiX19odGFiX21hcF9sb29rdXBfYW5kX2RlbGV0ZV9lbGVtXCIsXG4gICAgXCJfX2h0YWJfbWFwX2xvb2t1cF9hbmRfZGVsZXRlX2JhdGNoXCIsXG4gICAgXCJicGZfbWFwX21ldGFfYWxsb2NcIixcbiAgICBcImJwZl9odGFiX21hcF9tZXRhX2luaXRcIixcbiAgICBcImJwZl9odGFiX21hcF9tZXRhX3NpemVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBvcHRpbWl6ZXMgdGhlIG1lbW9yeSBsYXlvdXQgb2YgQlBGIGhhc2ggbWFwIGVsZW1lbnRzIGJ5IGNvbmRpdGlvbmFsbHkgcmVtb3ZpbmcgdGhlIGhhc2ggdmFsdWUgZmllbGQgd2hlbiBpdCdzIG5vdCBuZWVkZWQuIEl0IGludHJvZHVjZXMgYGtleV9vZmZzZXRgIHRvIGR5bmFtaWNhbGx5IGNvbXB1dGUgdGhlIG9mZnNldCBvZiB0aGUga2V5IGFuZCB2YWx1ZSB3aXRoaW4gdGhlIGVsZW1lbnQuIEl0IGFsc28gbW9kaWZpZXMgYG1hcF9pbl9tYXAuY2AgdG8gcHJvcGFnYXRlIHRoaXMgb2Zmc2V0IGZvciBpbm5lciBtYXBzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgQlBGIGhhc2ggbWFwIGltcGxlbWVudGF0aW9uIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyBtZW1vcnkgY29ycnVwdGlvbiBvciBsb2dpYyBlcnJvcnMgYXJlIGludHJvZHVjZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowl9tqv[1] Phase: Succeeded StartedAt: 2026-08-01 10:44:32 +0000 UTC FinishedAt: 2026-08-01 10:44:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-01 10:44:32 +0000 UTC FinishedAt: 2026-08-01 10:44:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[2] Phase: Succeeded StartedAt: 2026-08-01 10:44:32 +0000 UTC FinishedAt: 2026-08-01 14:26:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-01 10:44:32 +0000 UTC FinishedAt: 2026-08-01 14:26:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-01 10:44:32 +0000 UTC FinishedAt: 2026-08-01 10:44:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-01 10:44:32 +0000 UTC FinishedAt: 2026-08-01 10:44:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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-workflowl9tqv/series-workflowl9tqv-convert-artifact-3121765662/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-01 10:44:42 +0000 UTC FinishedAt: 2026-08-01 11:03:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-01 10:44:42 +0000 UTC FinishedAt: 2026-08-01 11:03:44 +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:*4aff192b-b50e-4702-9c7a-307039b0dac6,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-workflowl9tqv/series-workflowl9tqv-convert-artifact-3121765662/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": "02c607e1-669d-458c-9ce6-e573708aeb58", "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-workflowl9tqv/series-workflowl9tqv-build-action-3630178820/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-01 10:44:42 +0000 UTC FinishedAt: 2026-08-01 11:03:34 +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:*4aff192b-b50e-4702-9c7a-307039b0dac6,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-workflowl9tqv/series-workflowl9tqv-convert-artifact-3121765662/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": "02c607e1-669d-458c-9ce6-e573708aeb58", "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-workflowl9tqv/series-workflowl9tqv-build-action-3630178820/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-01 11:03:44 +0000 UTC FinishedAt: 2026-08-01 11:03:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-01 11:03:44 +0000 UTC FinishedAt: 2026-08-01 11:03:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-01 11:03:44 +0000 UTC FinishedAt: 2026-08-01 11:03:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-01 11:03:44 +0000 UTC FinishedAt: 2026-08-01 11:03:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","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-workflowl9tqv/series-workflowl9tqv-convert-artifact-4183164369/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-01 11:03:54 +0000 UTC FinishedAt: 2026-08-01 11:05:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-01 11:03:54 +0000 UTC FinishedAt: 2026-08-01 11:05:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*02c607e1-669d-458c-9ce6-e573708aeb58,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-workflowl9tqv/series-workflowl9tqv-build-action-3630178820/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-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-01 11:05:41 +0000 UTC FinishedAt: 2026-08-01 11:05:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-01 11:05:41 +0000 UTC FinishedAt: 2026-08-01 11:05:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-01 11:05:41 +0000 UTC FinishedAt: 2026-08-01 11:21:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-01 11:05:41 +0000 UTC FinishedAt: 2026-08-01 11:21:57 +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:*4aff192b-b50e-4702-9c7a-307039b0dac6,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-workflowl9tqv/series-workflowl9tqv-convert-artifact-4183164369/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": "ed000efe-8979-463b-a576-34e92c2f2903", "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-workflowl9tqv/series-workflowl9tqv-build-action-241167261/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-01 11:05:41 +0000 UTC FinishedAt: 2026-08-01 11:21:47 +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:*4aff192b-b50e-4702-9c7a-307039b0dac6,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-workflowl9tqv/series-workflowl9tqv-convert-artifact-4183164369/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": "ed000efe-8979-463b-a576-34e92c2f2903", "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-workflowl9tqv/series-workflowl9tqv-build-action-241167261/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-01 11:21:57 +0000 UTC FinishedAt: 2026-08-01 11:21:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-01 11:21:57 +0000 UTC FinishedAt: 2026-08-01 11:21:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-01 11:21:57 +0000 UTC FinishedAt: 2026-08-01 11:23:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-01 11:21:57 +0000 UTC FinishedAt: 2026-08-01 11:23:47 +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:*ed000efe-8979-463b-a576-34e92c2f2903,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-workflowl9tqv/series-workflowl9tqv-build-action-241167261/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-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-01 11:23:58 +0000 UTC FinishedAt: 2026-08-01 14:26:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-01 11:23:58 +0000 UTC FinishedAt: 2026-08-01 14:26:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"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:*02c607e1-669d-458c-9ce6-e573708aeb58,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ed000efe-8979-463b-a576-34e92c2f2903,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-workflowl9tqv/series-workflowl9tqv-build-action-3630178820/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-workflowl9tqv/series-workflowl9tqv-build-action-241167261/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-01 11:23:58 +0000 UTC FinishedAt: 2026-08-01 11:24:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-01 11:23:58 +0000 UTC FinishedAt: 2026-08-01 11:24:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"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-workflowl9tqv/series-workflowl9tqv-convert-artifact-52193542/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-01 11:23:58 +0000 UTC FinishedAt: 2026-08-01 11:23:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-01 11:23:58 +0000 UTC FinishedAt: 2026-08-01 11:23:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-01 11:23:58 +0000 UTC FinishedAt: 2026-08-01 11:23:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-01 11:24:08 +0000 UTC FinishedAt: 2026-08-01 14:26:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowl9tqv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"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/ci-upstream-bpf-kasan-gce-corpus.db"],"focus":["bpf"],"focus_symbols":["htab_map_alloc","htab_map_update_elem","htab_lru_map_update_elem","htab_map_delete_elem","htab_lru_map_delete_elem","htab_map_lookup_elem","htab_lru_map_lookup_elem","htab_percpu_map_lookup_elem","htab_lru_percpu_map_lookup_elem","htab_map_get_next_key","__htab_map_lookup_and_delete_elem","__htab_map_lookup_and_delete_batch","bpf_map_meta_alloc","bpf_htab_map_meta_init","bpf_htab_map_meta_size"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"cfce77b63375dac81d53f2f85593c548415206b7","config_name":"upstream-apparmor-kasan.config","enable_configs":["BPF_SYSCALL"],"series_id":"f44ec010-4f69-4776-9bf9-15526781c8fa","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-01 11:24:08 +0000 UTC FinishedAt: 2026-08-01 14:26:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*02c607e1-669d-458c-9ce6-e573708aeb58,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ed000efe-8979-463b-a576-34e92c2f2903,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-workflowl9tqv/series-workflowl9tqv-build-action-3630178820/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-workflowl9tqv/series-workflowl9tqv-build-action-241167261/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-workflowl9tqv/series-workflowl9tqv-convert-artifact-52193542/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,}