Name: series-workflowtxtsh Phase: Succeeded StartedAt: 2026-09-07 09:16:40 +0000 UTC FinishedAt: 2026-09-07 13:29:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[0] Phase: Succeeded StartedAt: 2026-09-07 09:16:40 +0000 UTC FinishedAt: 2026-09-07 09:39:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[0].run-triage Phase: Succeeded StartedAt: 2026-09-07 09:16:40 +0000 UTC FinishedAt: 2026-09-07 09:39:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_FS", "PROC_PAGE_MONITOR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_FS", "PROC_PAGE_MONITOR" ], "series_id": "08471fc9-5154-4594-bf2b-2328fee6364a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "show_smaps_rollup", "smap_gather_stats", "show_smap", "do_procmap_query" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfRlMmIzM0OywKICAgICYjMzQ7UFJPQ19QQUdFX01PTklUT1ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaG93X3NtYXBzX3JvbGx1cCYjMzQ7LAogICAgJiMzNDtzbWFwX2dhdGhlcl9zdGF0cyYjMzQ7LAogICAgJiMzNDtzaG93X3NtYXAmIzM0OywKICAgICYjMzQ7ZG9fcHJvY21hcF9xdWVyeSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBsb2NraW5nIGFuZCBpdGVyYXRpb24gbG9naWMgaW4gL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3NtYXBzX3JvbGx1cCBhbmQgcmVsYXRlZCB0YXNrX21tdS5jIGZ1bmN0aW9ucyAobWlncmF0aW5nIHNob3dfc21hcHNfcm9sbHVwIHRvIHVzZSBwZXItVk1BIGxvY2tpbmcgdmlhIHByb2NfZ2V0X3ZtYSBhbmQgc2ltcGxpZnlpbmcgbG9ja2luZyBjb250ZXh0IGhlbHBlciBmdW5jdGlvbnMpLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzdGF0aXN0aWNzIHN0cnVjdHVyZXMgKGUuZy4sIHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyBtc3MgPSB7fSkgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgb3V0cHV0IGlzIGZvcm1hdHRlZCBhcyBBU0NJSSB0ZXh0IGludG8gc2VxX2ZpbGUgYnVmZmVycy4gVGhlcmUgYXJlIG5vIG5ldyBvciBtb2RpZmllZCByYXcgc3RydWN0IGNvcGllcyB0byB1c2VyIHNwYWNlLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgcGFkZGluZywgYW5kIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgaXNzdWVzIGludHJvZHVjZWQgYnkgY2hhbmdlcyB0byBWTUEgbG9ja2luZy9SQ1UgdHJhdmVyc2FsIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIC9wcm9jL1x1MDAzY3BpZFx1MDAzZS9zbWFwc19yb2xsdXAgYW5kIHNtYXBzIGl0ZXJhdGlvbiBsb2dpYyBpbiB0YXNrX21tdS5jIHRvIHVzZSBwZXItVk1BIGxvY2tzIHVuZGVyIFJDVSBpbnN0ZWFkIG9mIGFjcXVpcmluZyBtbWFwX2xvY2sgdXBmcm9udCwgYWRqdXN0cyBwYXJ0aWFsIFZNQSBzdGF0IGdhdGhlcmluZyBpbiBzbWFwX2dhdGhlcl9zdGF0cygpLCBhbmQgc2ltcGxpZmllcyBwcm9jX21hcHMgbG9ja2luZyBoZWxwZXJzLiBUaGlzIHJlYWNoYWJsZSBjb3JlIE1NL3Byb2NmcyBsb2dpYyBpcyB3b3J0aCBmdXp6aW5nIGZvciBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNTVhN2FjYmE3YjhiZjFiNzQ4N2ZiMTU5MDc2MDA2MGU0Nzg5MGI0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwOTozODowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbmluZGV4IGU2NzFiNGZkOGRlZGQuLjY0MWExNTViMGM2MTMgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvdGFza19tbXUuY1xuQEAgLTEzMCwyOCAmIzQzOzEzMCwxMiBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX3Rhc2tfbWVtcG9saWN5KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbiB9XG4gI2VuZGlmXG4gXG4tc3RhdGljIGlubGluZSBpbnQgbG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4te1xuLVx0aW50IHJldCA9IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKGxvY2tfY3R4LVx1MDAzZW1tKTtcbi1cbi1cdGlmICghcmV0KVxuLVx0XHRsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZCA9IHRydWU7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX2N0eF9tbShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbiYjNDM7c3RhdGljIHZvaWQgdW5sb2NrX2N0eF9tbShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbiB7XG4gXHRtbWFwX3JlYWRfdW5sb2NrKGxvY2tfY3R4LVx1MDAzZW1tKTtcbiBcdGxvY2tfY3R4LVx1MDAzZW1tYXBfbG9ja2VkID0gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJlc2V0X2xvY2tfY3R4KHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdGxvY2tfY3R4LVx1MDAzZWxvY2tlZF92bWEgPSBOVUxMO1xuLVx0bG9ja19jdHgtXHUwMDNlbW1hcF9sb2NrZWQgPSBmYWxzZTtcbi19XG4tXG4gc3RhdGljIHZvaWQgdW5sb2NrX2N0eF92bWEoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4ge1xuIFx0aWYgKGxvY2tfY3R4LVx1MDAzZWxvY2tlZF92bWEpIHtcbkBAIC0xNjAsMjMgJiM0MzsxNDQsMTAgQEAgc3RhdGljIHZvaWQgdW5sb2NrX2N0eF92bWEoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBsb2NrX3ZtYV9yYW5nZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4tXHRcdFx0XHQgIHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcbi1cbi1cdHJldHVybiB0cnVlO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX3ZtYV9yYW5nZShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbiYjNDM7c3RhdGljIHZvaWQgcmVzZXRfbG9ja19jdHgoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4ge1xuLVx0aWYgKGxvY2tfY3R4LVx1MDAzZW1tYXBfbG9ja2VkKSB7XG4tXHRcdHVubG9ja19jdHhfbW0obG9ja19jdHgpO1xuLVx0fSBlbHNlIHtcbi1cdFx0dW5sb2NrX2N0eF92bWEobG9ja19jdHgpO1xuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdH1cbiYjNDM7XHRsb2NrX2N0eC1cdTAwM2Vsb2NrZWRfdm1hID0gTlVMTDtcbiYjNDM7XHRsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZCA9IGZhbHNlO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnZXRfbmV4dF92bWEoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxuQEAgLTE5Niw3ICYjNDM7MTY3LDcgQEAgc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZ2V0X25leHRfdm1hKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcbiBcdHJldHVybiB2bWE7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBmYWxsYmFja190b19tbWFwX2xvY2soc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxuJiM0MztzdGF0aWMgYm9vbCBmYWxsYmFja190b19tbWFwX2xvY2soc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxuIFx0XHRcdFx0XHQgbG9mZl90IHBvcylcbiB7XG4gXHRzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCA9IFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHg7XG5AQCAtMjEzLDcgJiM0MzsxODQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmFsbGJhY2tfdG9fbW1hcF9sb2NrKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgZHJvcF9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuJiM0MztzdGF0aWMgdm9pZCBkcm9wX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4ge1xuIFx0aWYgKHByaXYtXHUwMDNlbG9ja19jdHgubW1hcF9sb2NrZWQpXG4gXHRcdHJldHVybjtcbkBAIC0yMjEsNyAmIzQzOzE5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkcm9wX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHJlYWNxdWlyZV9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuJiM0MztzdGF0aWMgdm9pZCByZWFjcXVpcmVfcmN1KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbiB7XG4gXHRpZiAocHJpdi1cdTAwM2Vsb2NrX2N0eC5tbWFwX2xvY2tlZClcbiBcdFx0cmV0dXJuO1xuQEAgLTI4NiwxMyAmIzQzOzI1Nyw4IEBAIHN0YXRpYyB2b2lkICptX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwcG9zKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdGlmICghbG9ja192bWFfcmFuZ2UobSwgbG9ja19jdHgpKSB7XG4tXHRcdG1tcHV0KG1tKTtcbi1cdFx0cHV0X3Rhc2tfc3RydWN0KHByaXYtXHUwMDNldGFzayk7XG4tXHRcdHByaXYtXHUwMDNldGFzayA9IE5VTEw7XG4tXHRcdHJldHVybiBFUlJfUFRSKC1FSU5UUik7XG4tXHR9XG4tXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcbiBcdC8qXG4gXHQgKiBSZXNldCBjdXJyZW50IHBvc2l0aW9uIGlmIGxhc3RfYWRkciB3YXMgc2V0IGJlZm9yZVxuIFx0ICogYW5kIGl0JiMzOTtzIG5vdCBhIHNlbnRpbmVsLlxuQEAgLTMyNSw3ICYjNDM7MjkxLDEyIEBAIHN0YXRpYyB2b2lkIG1fc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4gXHRcdHJldHVybjtcbiBcbiBcdHJlbGVhc2VfdGFza19tZW1wb2xpY3kocHJpdik7XG4tXHR1bmxvY2tfdm1hX3JhbmdlKFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHgpO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKSB7XG4mIzQzO1x0XHR1bmxvY2tfY3R4X21tKFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHgpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHR1bmxvY2tfY3R4X3ZtYShcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4KTtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdH1cbiBcdG1tcHV0KG1tKTtcbiBcdHB1dF90YXNrX3N0cnVjdChwcml2LVx1MDAzZXRhc2spO1xuIFx0cHJpdi1cdTAwM2V0YXNrID0gTlVMTDtcbkBAIC01MTgsMjEgJiM0Mzs0ODksNiBAQCBzdGF0aWMgaW50IHBpZF9tYXBzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRcdFBST0NNQVBfUVVFUllfVk1BX0ZMQUdTXHRcdFx0XHRcXFxuIClcbiBcbi1zdGF0aWMgaW50IHF1ZXJ5X3ZtYV9zZXR1cChzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbi17XG4tXHRyZXNldF9sb2NrX2N0eChsb2NrX2N0eCk7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIHZvaWQgcXVlcnlfdm1hX3RlYXJkb3duKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdGlmIChsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZClcbi1cdFx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XG4tXHRlbHNlXG4tXHRcdHVubG9ja19jdHhfdm1hKGxvY2tfY3R4KTtcbi19XG4tXG4gc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcXVlcnlfdm1hX2ZpbmRfYnlfYWRkcihzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCxcbiBcdFx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG5AQCAtNjUzLDEyICYjNDM7NjA5LDcgQEAgc3RhdGljIGludCBkb19wcm9jbWFwX3F1ZXJ5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB2b2lkIF9fdXNlciAqdWFyZylcbiBcdGlmICghbW0gfHwgIW1tZ2V0X25vdF96ZXJvKG1tKSlcbiBcdFx0cmV0dXJuIC1FU1JDSDtcbiBcbi1cdGVyciA9IHF1ZXJ5X3ZtYV9zZXR1cChcdTAwMjZsb2NrX2N0eCk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdG1tcHV0KG1tKTtcbi1cdFx0cmV0dXJuIGVycjtcbi1cdH1cbi1cbiYjNDM7XHRyZXNldF9sb2NrX2N0eChcdTAwMjZsb2NrX2N0eCk7XG4gXHR2bWEgPSBxdWVyeV9tYXRjaGluZ192bWEoXHUwMDI2bG9ja19jdHgsIGthcmcucXVlcnlfYWRkciwga2FyZy5xdWVyeV9mbGFncyk7XG4gXHRpZiAoSVNfRVJSKHZtYSkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUih2bWEpO1xuQEAgLTczMiw3ICYjNDM7NjgzLDEwIEBAIHN0YXRpYyBpbnQgZG9fcHJvY21hcF9xdWVyeShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdm9pZCBfX3VzZXIgKnVhcmcpXG4gXHRcdHZtX2ZpbGUgPSBnZXRfZmlsZSh2bWEtXHUwMDNldm1fZmlsZSk7XG4gXG4gXHQvKiB1bmxvY2sgdm1hIG9yIG1tYXBfbG9jaywgYW5kIHB1dCBtbV9zdHJ1Y3QgYmVmb3JlIGNvcHlpbmcgZGF0YSB0byB1c2VyICovXG4tXHRxdWVyeV92bWFfdGVhcmRvd24oXHUwMDI2bG9ja19jdHgpO1xuJiM0MztcdGlmIChsb2NrX2N0eC5tbWFwX2xvY2tlZClcbiYjNDM7XHRcdHVubG9ja19jdHhfbW0oXHUwMDI2bG9ja19jdHgpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHVubG9ja19jdHhfdm1hKFx1MDAyNmxvY2tfY3R4KTtcbiBcdG1tcHV0KG1tKTtcbiBcbiBcdGlmIChrYXJnLmJ1aWxkX2lkX3NpemUpIHtcbkBAIC03NzMsNyAmIzQzOzcyNywxMCBAQCBzdGF0aWMgaW50IGRvX3Byb2NtYXBfcXVlcnkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHZvaWQgX191c2VyICp1YXJnKVxuIFx0cmV0dXJuIDA7XG4gXG4gb3V0OlxuLVx0cXVlcnlfdm1hX3RlYXJkb3duKFx1MDAyNmxvY2tfY3R4KTtcbiYjNDM7XHRpZiAobG9ja19jdHgubW1hcF9sb2NrZWQpXG4mIzQzO1x0XHR1bmxvY2tfY3R4X21tKFx1MDAyNmxvY2tfY3R4KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR1bmxvY2tfY3R4X3ZtYShcdTAwMjZsb2NrX2N0eCk7XG4gXHRtbXB1dChtbSk7XG4gb3V0X2ZpbGU6XG4gXHRpZiAodm1fZmlsZSlcbkBAIC0xMjYzLDcgJiM0MzsxMjIwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBzbWFwc19zaG1lbV93YWxrX3ZtYV9sb2NrX29wcyA9IHtcbiBcdC53YWxrX2xvY2tcdFx0PSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksXG4gfTtcbiBcbi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKlxuIGdldF9zbWFwc193YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4ge1xuIFx0aWYgKHByaXYtXHUwMDNlbG9ja19jdHgubW1hcF9sb2NrZWQpXG5AQCAtMTI3MSw3ICYjNDM7MTIyOCw3IEBAIGdldF9zbWFwc193YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4gXHRyZXR1cm4gXHUwMDI2c21hcHNfd2Fsa192bWFfbG9ja19vcHM7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqXG4gZ2V0X3NtYXBzX3NobWVtX3dhbGtfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbiB7XG4gXHRpZiAocHJpdi1cdTAwM2Vsb2NrX2N0eC5tbWFwX2xvY2tlZClcbkBAIC0xMjc5LDIwICYjNDM7MTIzNiwyNyBAQCBnZXRfc21hcHNfc2htZW1fd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuIFx0cmV0dXJuIFx1MDAyNnNtYXBzX3NobWVtX3dhbGtfdm1hX2xvY2tfb3BzO1xuIH1cbiBcbi0vKlxuLSAqIEdhdGhlciBtZW0gc3RhdHMgZnJvbSBAdm1hIHdpdGggdGhlIGluZGljYXRlZCBiZWdpbm5pbmdcbi0gKiBhZGRyZXNzIEBzdGFydCwgYW5kIGtlZXAgdGhlbSBpbiBAbXNzLlxuJiM0MzsvKipcbiYjNDM7ICogc21hcF9nYXRoZXJfc3RhdHMoKSAtIEdhdGhlciBtZW0gc3RhdHMgZnJvbSBAdm1hLlxuJiM0MzsgKiBAcHJpdjogcHJvYyBtYXBzIHByaXZhdGUgc3RhdGUuXG4mIzQzOyAqIEB2bWE6IFRoZSBWTUEgdG8gZ2F0aGVyIHN0YXRzIGZvci5cbiYjNDM7ICogQG1zczogVGhlIGFjY3VtdWxhdGVkIHN0YXRzLlxuJiM0MzsgKiBAc3RhcnQ6IFRoZSBhZGRyZXNzIGZyb20gd2hpY2ggdG8gc3RhcnQuXG4gICpcbi0gKiBVc2Ugdm1fc3RhcnQgb2YgQHZtYSBhcyB0aGUgYmVnaW5uaW5nIGFkZHJlc3MgaWYgQHN0YXJ0IGlzIDAuXG4mIzQzOyAqIFRoaXMgZ2F0aGVycyBzdGF0cyBmb3IgdGhlIHdob2xlIG9mIHRoZSBWTUEgdW5sZXNzIHRoZSBsb2NrIHdhcyBkcm9wcGVkXG4mIzQzOyAqIGFuZCBWTUEgZ3JldyBvciBnb3QgbWVyZ2VkIGFuZCB3ZSBmb3VuZCBpdCBhZ2FpbiwgaW4gd2hpY2ggY2FzZSB3ZSBvbmx5XG4mIzQzOyAqIGdhdGhlciBzdGF0cyBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgVk1BIHJhbmdlLlxuICAqL1xuIHN0YXRpYyB2b2lkIHNtYXBfZ2F0aGVyX3N0YXRzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcbiBcdFx0XHQgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0XHQgICAgICBzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgKm1zcywgdW5zaWduZWQgbG9uZyBzdGFydClcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IG1lbV9zaXplX3N0YXRzICptc3MsXG4mIzQzO1x0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMgPSBnZXRfc21hcHNfd2Fsa19vcHMocHJpdik7XG4mIzQzO1x0Y29uc3QgYm9vbCBpc19wYXJ0aWFsID0gc3RhcnQgXHUwMDNlIHZtYS1cdTAwM2V2bV9zdGFydDtcbiBcbiBcdC8qIEludmFsaWQgc3RhcnQgKi9cbi1cdGlmIChzdGFydCBcdTAwM2U9IHZtYS1cdTAwM2V2bV9lbmQpXG4mIzQzO1x0aWYgKHN0YXJ0IFx1MDAzYyB2bWEtXHUwMDNldm1fc3RhcnQgfHwgc3RhcnQgXHUwMDNlPSB2bWEtXHUwMDNldm1fZW5kKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAodm1hID09IGdldF9nYXRlX3ZtYShwcml2LVx1MDAzZWxvY2tfY3R4Lm1tKSlcbkBAIC0xMzEyLDIwICYjNDM7MTI3NiwxNyBAQCBzdGF0aWMgdm9pZCBzbWFwX2dhdGhlcl9zdGF0cyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXG4gXHRcdCAqIFVubGVzcyB3ZSBrbm93IHRoYXQgdGhlIHNobWVtIG9iamVjdCAob3IgdGhlIHBhcnQgbWFwcGVkIGJ5XG4gXHRcdCAqIG91ciBWTUEpIGhhcyBubyBzd2FwcGVkIG91dCBwYWdlcyBhdCBhbGwuXG4gXHRcdCAqL1xuLVx0XHR1bnNpZ25lZCBsb25nIHNobWVtX3N3YXBwZWQgPSBzaG1lbV9zd2FwX3VzYWdlKHZtYSk7XG4mIzQzO1x0XHRjb25zdCB1bnNpZ25lZCBsb25nIHNobWVtX3N3YXBwZWQgPSBzaG1lbV9zd2FwX3VzYWdlKHZtYSk7XG4mIzQzO1x0XHRjb25zdCBib29sIHNoYXJlZF9vcl9ybyA9IHZtYV90ZXN0KHZtYSwgVk1BX1NIQVJFRF9CSVQpIHx8XG4mIzQzO1x0XHRcdFx0XHQgICF2bWFfdGVzdCh2bWEsIFZNQV9XUklURV9CSVQpO1xuIFxuLVx0XHRpZiAoIXN0YXJ0IFx1MDAyNlx1MDAyNiAoIXNobWVtX3N3YXBwZWQgfHwgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fU0hBUkVEKSB8fFxuLVx0XHRcdFx0XHQhKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fV1JJVEUpKSkge1xuJiM0MztcdFx0aWYgKCFpc19wYXJ0aWFsIFx1MDAyNlx1MDAyNiAoIXNobWVtX3N3YXBwZWQgfHwgc2hhcmVkX29yX3JvKSlcbiBcdFx0XHRtc3MtXHUwMDNlc3dhcCAmIzQzOz0gc2htZW1fc3dhcHBlZDtcbi1cdFx0fSBlbHNlIHtcbiYjNDM7XHRcdGVsc2VcbiBcdFx0XHRvcHMgPSBnZXRfc21hcHNfc2htZW1fd2Fsa19vcHMocHJpdik7XG4tXHRcdH1cbiBcdH1cbiBcbi1cdGlmICghc3RhcnQpXG4tXHRcdHdhbGtfcGFnZV92bWEodm1hLCBvcHMsIG1zcyk7XG4tXHRlbHNlXG4tXHRcdHdhbGtfcGFnZV9yYW5nZSh2bWEtXHUwMDNldm1fbW0sIHN0YXJ0LCB2bWEtXHUwMDNldm1fZW5kLCBvcHMsIG1zcyk7XG4mIzQzO1x0d2Fsa19wYWdlX3JhbmdlX3ZtYSh2bWEsIHN0YXJ0LCB2bWEtXHUwMDNldm1fZW5kLCBvcHMsIG1zcyk7XG4gXG4gXHRyZWFjcXVpcmVfcmN1KHByaXYpO1xuIH1cbkBAIC0xMzgwLDcgJiM0MzsxMzQxLDcgQEAgc3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2O1xuIFx0c3RydWN0IG1lbV9zaXplX3N0YXRzIG1zcyA9IHt9O1xuIFxuLVx0c21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCBcdTAwMjZtc3MsIDApO1xuJiM0MztcdHNtYXBfZ2F0aGVyX3N0YXRzKHByaXYsIHZtYSwgXHUwMDI2bXNzLCB2bWEtXHUwMDNldm1fc3RhcnQpO1xuIFxuIFx0c2hvd19tYXBfdm1hKG0sIHZtYSk7XG4gXG5AQCAtMTQwNSwxMiAmIzQzOzEzNjYsMTQgQEAgc3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIHN0YXRpYyBpbnQgc2hvd19zbWFwc19yb2xsdXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIHtcbiBcdHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tXHUwMDNlcHJpdmF0ZTtcbiYjNDM7XHRzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCA9IFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHg7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBsb2NrX2N0eC1cdTAwM2VtbTtcbiBcdHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyBtc3MgPSB7fTtcbi1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcHJpdi1cdTAwM2Vsb2NrX2N0eC5tbTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGxhc3Rfdm1hX2VuZCA9IDA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB2bWFfc3RhcnQgPSAwO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4tXHR1bnNpZ25lZCBsb25nIHZtYV9zdGFydCA9IDAsIGxhc3Rfdm1hX2VuZCA9IDA7XG4mIzQzO1x0bG9mZl90IHBvcyA9IDA7XG4gXHRpbnQgcmV0ID0gMDtcbi1cdFZNQV9JVEVSQVRPUih2bWksIG1tLCAwKTtcbiBcbiBcdHByaXYtXHUwMDNldGFzayA9IGdldF9wcm9jX3Rhc2socHJpdi1cdTAwM2Vpbm9kZSk7XG4gXHRpZiAoIXByaXYtXHUwMDNldGFzaylcbkBAIC0xNDIxLDg5ICYjNDM7MTM4NCw2MCBAQCBzdGF0aWMgaW50IHNob3dfc21hcHNfcm9sbHVwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiBcdFx0Z290byBvdXRfcHV0X3Rhc2s7XG4gXHR9XG4gXG4tXHRyZXQgPSBsb2NrX2N0eF9tbShcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4KTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0X3B1dF9tbTtcbi1cbiBcdGhvbGRfdGFza19tZW1wb2xpY3kocHJpdik7XG4tXHR2bWEgPSB2bWFfbmV4dChcdTAwMjZ2bWkpO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRyZXNldF9sb2NrX2N0eChsb2NrX2N0eCk7XG4gXG4mIzQzO1x0dm1hX2l0ZXJfaW5pdChcdTAwMjZwcml2LVx1MDAzZWl0ZXIsIG1tLCAwKTtcbiYjNDM7XHR2bWEgPSBwcm9jX2dldF92bWEobSwgXHUwMDI2cG9zKTtcbiBcdGlmICh1bmxpa2VseSghdm1hKSlcbiBcdFx0Z290byBlbXB0eV9zZXQ7XG4gXG4tXHR2bWFfc3RhcnQgPSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4tXHRkbyB7XG4tXHRcdHNtYXBfZ2F0aGVyX3N0YXRzKHByaXYsIHZtYSwgXHUwMDI2bXNzLCAwKTtcbi1cdFx0bGFzdF92bWFfZW5kID0gdm1hLVx1MDAzZXZtX2VuZDtcbiYjNDM7XHRpZiAoIUlTX0VSUih2bWEpIFx1MDAyNlx1MDAyNiB2bWEgIT0gZ2V0X2dhdGVfdm1hKGxvY2tfY3R4LVx1MDAzZW1tKSlcbiYjNDM7XHRcdHZtYV9zdGFydCA9IHZtYS1cdTAwM2V2bV9zdGFydDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKHZtYSkge1xuJiM0MztcdFx0aWYgKElTX0VSUih2bWEpKSB7XG4mIzQzO1x0XHRcdHJldCA9IFBUUl9FUlIodm1hKTtcbiYjNDM7XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICh2bWEgPT0gZ2V0X2dhdGVfdm1hKGxvY2tfY3R4LVx1MDAzZW1tKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXG4gXHRcdC8qXG4tXHRcdCAqIFJlbGVhc2UgbW1hcF9sb2NrIHRlbXBvcmFyaWx5IGlmIHNvbWVvbmUgd2FudHMgdG9cbi1cdFx0ICogYWNjZXNzIGl0IGZvciB3cml0ZSByZXF1ZXN0LlxuJiM0MztcdFx0ICogSWYgYWZ0ZXIgcmV0YWtpbmcgdGhlIGxvY2ssIGFscmVhZHkgcmVwb3J0ZWQgVk1BIGdyZXcgb3JcbiYjNDM7XHRcdCAqIG1lcmdlZCB3aXRoIHRoZSBuZXh0IG9uZSwgc21hcF9nYXRoZXJfc3RhdHMoKSB3aWxsIGdhdGhlclxuJiM0MztcdFx0ICogc3RhdHMgZm9yIHRoZSByZW1haW5pbmcgcG9ydGlvbiBieSBzdGFydGluZyBhdCBsYXN0X3ZtYV9lbmQuXG4gXHRcdCAqL1xuLVx0XHRpZiAobW1hcF9sb2NrX2lzX2NvbnRlbmRlZChtbSkpIHtcbi1cdFx0XHR2bWFfaXRlcl9pbnZhbGlkYXRlKFx1MDAyNnZtaSk7XG4tXHRcdFx0dW5sb2NrX2N0eF9tbShcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4KTtcbi1cdFx0XHRyZXQgPSBsb2NrX2N0eF9tbShcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4KTtcbi1cdFx0XHRpZiAocmV0KSB7XG4tXHRcdFx0XHRyZWxlYXNlX3Rhc2tfbWVtcG9saWN5KHByaXYpO1xuLVx0XHRcdFx0Z290byBvdXRfcHV0X21tO1xuLVx0XHRcdH1cbiYjNDM7XHRcdHNtYXBfZ2F0aGVyX3N0YXRzKHByaXYsIHZtYSwgXHUwMDI2bXNzLCBsYXN0X3ZtYV9lbmQpO1xuJiM0MztcdFx0bGFzdF92bWFfZW5kID0gdm1hLVx1MDAzZXZtX2VuZDtcbiBcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJZiB0aGUgVk1BIGxvY2sgaXMgbm90IHRha2VuLCB3ZSBob2xkIHRoZSBvZnRlbiBjb250ZW5kZWRcbiYjNDM7XHRcdCAqIG1tYXAgbG9jay4gVGhpcyBjYW4gaGFwcGVuIGlmIHdlIGhhZCB0byBmYWxsIGJhY2sgdG8gdGhlXG4mIzQzO1x0XHQgKiBtbWFwIGxvY2suXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogVG8gcmVsaWV2ZSBwcmVzc3VyZSwgY2hlY2sgaWYgaXQgaXMgaW5kZWVkIGNvbnRlbmRlZCwgdGhlblxuJiM0MztcdFx0ICogdGVtcG9yYXJpbHkgcmVsZWFzZSBpdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGxvY2tfY3R4LVx1MDAzZW1tYXBfbG9ja2VkIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIG1tYXBfbG9ja19pc19jb250ZW5kZWQobG9ja19jdHgtXHUwMDNlbW0pKSB7XG4mIzQzO1x0XHRcdHVubG9ja19jdHhfbW0obG9ja19jdHgpO1xuIFx0XHRcdC8qXG4tXHRcdFx0ICogQWZ0ZXIgZHJvcHBpbmcgdGhlIGxvY2ssIHRoZXJlIGFyZSBmb3VyIGNhc2VzIHRvXG4tXHRcdFx0ICogY29uc2lkZXIuIFNlZSB0aGUgZm9sbG93aW5nIGV4YW1wbGUgZm9yIGV4cGxhbmF0aW9uLlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogICAmIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7XG4tXHRcdFx0ICogICB8IFZNQTEgfCBWTUEyIHwgVk1BMyAgICAgIHxcbi1cdFx0XHQgKiAgICYjNDM7LS0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0Mztcbi1cdFx0XHQgKiAgIHwgICAgICB8ICAgICAgfCAgICAgICAgICAgfFxuLVx0XHRcdCAqICA0ayAgICAgOGsgICAgIDE2ayAgICAgICAgIDQwMGtcbi1cdFx0XHQgKlxuLVx0XHRcdCAqIFN1cHBvc2Ugd2UgZHJvcCB0aGUgbG9jayBhZnRlciByZWFkaW5nIFZNQTIgZHVlIHRvXG4tXHRcdFx0ICogY29udGVudGlvbiwgdGhlbiB3ZSBnZXQ6XG4tXHRcdFx0ICpcbi1cdFx0XHQgKlx0bGFzdF92bWFfZW5kID0gMTZrXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAxKSBWTUEyIGlzIGZyZWVkLCBidXQgVk1BMyBleGlzdHM6XG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAgICB2bWFfbmV4dCh2bWkpIHdpbGwgcmV0dXJuIFZNQTMuXG4tXHRcdFx0ICogICAgSW4gdGhpcyBjYXNlLCBqdXN0IGNvbnRpbnVlIGZyb20gVk1BMy5cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIDIpIFZNQTIgc3RpbGwgZXhpc3RzOlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBWTUEzLlxuLVx0XHRcdCAqICAgIEluIHRoaXMgY2FzZSwganVzdCBjb250aW51ZSBmcm9tIFZNQTMuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAzKSBObyBtb3JlIFZNQXMgY2FuIGJlIGZvdW5kOlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBOVUxMLlxuLVx0XHRcdCAqICAgIE5vIG1vcmUgdGhpbmdzIHRvIGRvLCBqdXN0IGJyZWFrLlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogNCkgKGxhc3Rfdm1hX2VuZCAtIDEpIGlzIHRoZSBtaWRkbGUgb2YgYSB2bWEgKFZNQSYjMzk7KTpcbi1cdFx0XHQgKlxuLVx0XHRcdCAqICAgIHZtYV9uZXh0KHZtaSkgd2lsbCByZXR1cm4gVk1BJiMzOTsgd2hvc2UgcmFuZ2Vcbi1cdFx0XHQgKiAgICBjb250YWlucyBsYXN0X3ZtYV9lbmQuXG4tXHRcdFx0ICogICAgSXRlcmF0ZSBWTUEmIzM5OyBmcm9tIGxhc3Rfdm1hX2VuZC5cbiYjNDM7XHRcdFx0ICogRXZlbiB0aG91Z2ggd2UgcHJldmlvdXNseSBmZWxsIGJhY2sgdG8gbW1hcCBsb2NrLFxuJiM0MztcdFx0XHQgKiB3ZSB0cnkgdGFraW5nIFZNQSBsb2NrIGZvciB0aGUgbmV4dCBWTUEsIHNpbmNlIGl0XG4mIzQzO1x0XHRcdCAqIG1pZ2h0IG5vdCBiZSB1bmRlciBtb2RpZmljYXRpb24uIEluIHRoZSB3b3JzdCBjYXNlXG4mIzQzO1x0XHRcdCAqIHdlIHdpbGwgZmFsbCBiYWNrIHRvIG1tYXAgbG9jayBhZ2Fpbi5cbiBcdFx0XHQgKi9cbi1cdFx0XHR2bWEgPSB2bWFfbmV4dChcdTAwMjZ2bWkpO1xuLVx0XHRcdC8qIENhc2UgMyBhYm92ZSAqL1xuLVx0XHRcdGlmICghdm1hKVxuLVx0XHRcdFx0YnJlYWs7XG4tXG4tXHRcdFx0LyogQ2FzZSAxIGFuZCAyIGFib3ZlICovXG4tXHRcdFx0aWYgKHZtYS1cdTAwM2V2bV9zdGFydCBcdTAwM2U9IGxhc3Rfdm1hX2VuZCkge1xuLVx0XHRcdFx0c21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCBcdTAwMjZtc3MsIDApO1xuLVx0XHRcdFx0bGFzdF92bWFfZW5kID0gdm1hLVx1MDAzZXZtX2VuZDtcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHQvKiBDYXNlIDQgYWJvdmUgKi9cbi1cdFx0XHRpZiAodm1hLVx1MDAzZXZtX2VuZCBcdTAwM2UgbGFzdF92bWFfZW5kKSB7XG4tXHRcdFx0XHRzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsIFx1MDAyNm1zcywgbGFzdF92bWFfZW5kKTtcbi1cdFx0XHRcdGxhc3Rfdm1hX2VuZCA9IHZtYS1cdTAwM2V2bV9lbmQ7XG4tXHRcdFx0fVxuJiM0MztcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0XHRcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcbiYjNDM7XHRcdFx0LyogUmVzdW1lIGZyb20gdGhlIGxhc3QgcG9zaXRpb24uICovXG4mIzQzO1x0XHRcdHBvcyA9IGxhc3Rfdm1hX2VuZDtcbiYjNDM7XHRcdFx0dm1hX2l0ZXJfaW5pdChcdTAwMjZwcml2LVx1MDAzZWl0ZXIsIG1tLCBwb3MpO1xuIFx0XHR9XG4tXHR9IGZvcl9lYWNoX3ZtYSh2bWksIHZtYSk7XG4mIzQzO1x0XHR2bWEgPSBwcm9jX2dldF92bWEobSwgXHUwMDI2cG9zKTtcbiYjNDM7XHR9XG4gXG4gZW1wdHlfc2V0OlxuIFx0c2hvd192bWFfaGVhZGVyX3ByZWZpeChtLCB2bWFfc3RhcnQsIGxhc3Rfdm1hX2VuZCwgMCwgMCwgMCwgMCk7XG5AQCAtMTUxMiwxMCAmIzQzOzE0NDYsMTQgQEAgc3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4gXG4gXHRfX3Nob3dfc21hcChtLCBcdTAwMjZtc3MsIHRydWUpO1xuIFxuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdGlmIChsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZCkge1xuJiM0MztcdFx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHVubG9ja19jdHhfdm1hKGxvY2tfY3R4KTtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdH1cbiBcdHJlbGVhc2VfdGFza19tZW1wb2xpY3kocHJpdik7XG4tXHR1bmxvY2tfY3R4X21tKFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHgpO1xuLVxuLW91dF9wdXRfbW06XG4gXHRtbXB1dChtbSk7XG4gb3V0X3B1dF90YXNrOlxuIFx0cHV0X3Rhc2tfc3RydWN0KHByaXYtXHUwMDNldGFzayk7XG5AQCAtMTYwNSw3ICYjNDM7MTU0Myw3IEBAIHN0cnVjdCBjbGVhcl9yZWZzX3ByaXZhdGUge1xuIFx0ZW51bSBjbGVhcl9yZWZzX3R5cGVzIHR5cGU7XG4gfTtcbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgcHRlX2lzX3Bpbm5lZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCBwdGUpXG4mIzQzO3N0YXRpYyBib29sIHB0ZV9pc19waW5uZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG5AQCAtMTYyMSw4ICYjNDM7MTU1OSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfaXNfcGlubmVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRyZXR1cm4gZm9saW9fbWF5YmVfZG1hX3Bpbm5lZChmb2xpbyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLVx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGUpXG4mIzQzO3N0YXRpYyB2b2lkIGNsZWFyX3NvZnRfZGlydHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0ICAgICBwdGVfdCAqcHRlKVxuIHtcbiBcdGlmICghcGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpXG4gXHRcdHJldHVybjtcbkBAIC0xNjUzLDggJiM0MzsxNTkxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gfVxuIFxuICNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcbi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHApXG4mIzQzO3N0YXRpYyB2b2lkIGNsZWFyX3NvZnRfZGlydHlfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKVxuIHtcbiBcdHBtZF90IG9sZCwgcG1kID0gKnBtZHA7XG4gXG5AQCAtMTY3OSw4ICYjNDM7MTYxNyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5X3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdH1cbiB9XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHApXG4mIzQzO3N0YXRpYyB2b2lkIGNsZWFyX3NvZnRfZGlydHlfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKVxuIHtcbiB9XG4gI2VuZGlmXG5AQCAtMTg3OSw3ICYjNDM7MTgxNyw3IEBAIHN0cnVjdCBwYWdlbWFwcmVhZCB7XG4gXG4gI2RlZmluZSBQTV9FTkRfT0ZfQlVGRkVSICAgIDFcbiBcbi1zdGF0aWMgaW5saW5lIHBhZ2VtYXBfZW50cnlfdCBtYWtlX3BtZSh1NjQgZnJhbWUsIHU2NCBmbGFncylcbiYjNDM7c3RhdGljIHBhZ2VtYXBfZW50cnlfdCBtYWtlX3BtZSh1NjQgZnJhbWUsIHU2NCBmbGFncylcbiB7XG4gXHRyZXR1cm4gKHBhZ2VtYXBfZW50cnlfdCkgeyAucG1lID0gKGZyYW1lIFx1MDAyNiBQTV9QRlJBTUVfTUFTSykgfCBmbGFncyB9O1xuIH1cbkBAIC0zNDIxLDcgJiM0MzszMzU5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBzaG93X251bWFfdm1hX2xvY2tfb3BzID0ge1xuIFx0LndhbGtfbG9jayA9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSxcbiB9O1xuIFxuLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqXG4gZ2V0X3Nob3dfbnVtYV9vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuIHtcbiBcdGlmIChwcml2LVx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuY1xuaW5kZXggNDE1ZWNjYjcwNDY4NC4uOGQwMGQ3ZGIxYzY1MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLW1hcHMtcmFjZS5jXG5AQCAtODAsNiAmIzQzOzgwLDYxIEBAIGVudW0gbWFwc19maWxlIHtcbiBcbiBzdHJ1Y3Qgdm1hX21vZGlmaWVyX2luZm87XG4gXG4mIzQzO2VudW0gc21hcHNfcm9sbHVwX3N0YXQge1xuJiM0MztcdFJzcyxcbiYjNDM7XHRQc3MsXG4mIzQzO1x0UHNzX0RpcnR5LFxuJiM0MztcdFBzc19Bbm9uLFxuJiM0MztcdFBzc19GaWxlLFxuJiM0MztcdFBzc19TaG1lbSxcbiYjNDM7XHRTaGFyZWRfQ2xlYW4sXG4mIzQzO1x0U2hhcmVkX0RpcnR5LFxuJiM0MztcdFByaXZhdGVfQ2xlYW4sXG4mIzQzO1x0UHJpdmF0ZV9EaXJ0eSxcbiYjNDM7XHRSZWZlcmVuY2VkLFxuJiM0MztcdEFub255bW91cyxcbiYjNDM7XHRLU00sXG4mIzQzO1x0TGF6eUZyZWUsXG4mIzQzO1x0QW5vbkh1Z2VQYWdlcyxcbiYjNDM7XHRTaG1lbVBtZE1hcHBlZCxcbiYjNDM7XHRGaWxlUG1kTWFwcGVkLFxuJiM0MztcdFNoYXJlZF9IdWdldGxiLFxuJiM0MztcdFByaXZhdGVfSHVnZXRsYixcbiYjNDM7XHRTd2FwLFxuJiM0MztcdFN3YXBQc3MsXG4mIzQzO1x0TG9ja2VkLFxuJiM0MztcdFJvbGx1cEZpZWxkQ291bnRcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyICpzbWFwc19yb2xsdXBfc3RhdF9uYW1lc1tSb2xsdXBGaWVsZENvdW50XSA9IHtcbiYjNDM7XHRcJiMzNDtSc3NcJiMzNDssXG4mIzQzO1x0XCYjMzQ7UHNzXCYjMzQ7LFxuJiM0MztcdFwmIzM0O1Bzc19EaXJ0eVwmIzM0OyxcbiYjNDM7XHRcJiMzNDtQc3NfQW5vblwmIzM0OyxcbiYjNDM7XHRcJiMzNDtQc3NfRmlsZVwmIzM0OyxcbiYjNDM7XHRcJiMzNDtQc3NfU2htZW1cJiMzNDssXG4mIzQzO1x0XCYjMzQ7U2hhcmVkX0NsZWFuXCYjMzQ7LFxuJiM0MztcdFwmIzM0O1NoYXJlZF9EaXJ0eVwmIzM0OyxcbiYjNDM7XHRcJiMzNDtQcml2YXRlX0NsZWFuXCYjMzQ7LFxuJiM0MztcdFwmIzM0O1ByaXZhdGVfRGlydHlcJiMzNDssXG4mIzQzO1x0XCYjMzQ7UmVmZXJlbmNlZFwmIzM0OyxcbiYjNDM7XHRcJiMzNDtBbm9ueW1vdXNcJiMzNDssXG4mIzQzO1x0XCYjMzQ7S1NNXCYjMzQ7LFxuJiM0MztcdFwmIzM0O0xhenlGcmVlXCYjMzQ7LFxuJiM0MztcdFwmIzM0O0Fub25IdWdlUGFnZXNcJiMzNDssXG4mIzQzO1x0XCYjMzQ7U2htZW1QbWRNYXBwZWRcJiMzNDssXG4mIzQzO1x0XCYjMzQ7RmlsZVBtZE1hcHBlZFwmIzM0OyxcbiYjNDM7XHRcJiMzNDtTaGFyZWRfSHVnZXRsYlwmIzM0OyxcbiYjNDM7XHRcJiMzNDtQcml2YXRlX0h1Z2V0bGJcJiMzNDssXG4mIzQzO1x0XCYjMzQ7U3dhcFwmIzM0OyxcbiYjNDM7XHRcJiMzNDtTd2FwUHNzXCYjMzQ7LFxuJiM0MztcdFwmIzM0O0xvY2tlZFwmIzM0OyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdmFsdWVzW1JvbGx1cEZpZWxkQ291bnRdO1xuJiM0Mzt9O1xuJiM0MztcbiBGSVhUVVJFKHByb2NfbWFwc19yYWNlKVxuIHtcbiBcdHN0cnVjdCB2bWFfbW9kaWZpZXJfaW5mbyAqbW9kX2luZm87XG5AQCAtOTEsNiAmIzQzOzE0Niw3IEBAIEZJWFRVUkUocHJvY19tYXBzX3JhY2UpXG4gXHRlbnVtIG1hcHNfZmlsZSBtYXBzX2ZpbGU7XG4gXHRpbnQgc2hhcmVkX21lbV9zaXplO1xuIFx0aW50IHNraXBfcGFnZXM7XG4mIzQzO1x0aW50IHJvbGx1cF9mZDtcbiBcdGludCBwYWdlX3NpemU7XG4gXHRpbnQgdm1hX2NvdW50O1xuIFx0Ym9vbCB2ZXJib3NlO1xuQEAgLTEzMiwxMiAmIzQzOzE4OCwxMiBAQCBzdHJ1Y3Qgdm1hX21vZGlmaWVyX2luZm8ge1xuIFx0dm9pZCAqY2hpbGRfbWFwcGVkX2FkZHJbXTtcbiB9O1xuIFxuLXN0YXRpYyBib29sIHJlYWRfcGFnZShGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmLFxuJiM0MztzdGF0aWMgYm9vbCByZWFkX3BhZ2UoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZiwgaW50IGZkLFxuIFx0XHQgICAgICBzdHJ1Y3QgcGFnZV9jb250ZW50ICpwYWdlKVxuIHtcbiBcdHNzaXplX3QgIGJ5dGVzX3JlYWQ7XG4gXG4tXHRieXRlc19yZWFkID0gcmVhZChzZWxmLVx1MDAzZW1hcHNfZmQsIHBhZ2UtXHUwMDNlZGF0YSwgc2VsZi1cdTAwM2VwYWdlX3NpemUpO1xuJiM0MztcdGJ5dGVzX3JlYWQgPSByZWFkKGZkLCBwYWdlLVx1MDAzZWRhdGEsIHNlbGYtXHUwMDNlcGFnZV9zaXplKTtcbiBcdGlmIChieXRlc19yZWFkIFx1MDAzYz0gMClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuQEAgLTE3NSw3ICYjNDM7MjMxLDcgQEAgc3RhdGljIGludCBsb2NhdGVfY29udGFpbmluZ19wYWdlKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsXG4gXHRcdGNoYXIgKmN1cnJfcG9zO1xuIFx0XHRjaGFyICplbmRfcG9zO1xuIFxuLVx0XHRpZiAoIXJlYWRfcGFnZShzZWxmLCBcdTAwMjZzZWxmLVx1MDAzZXBhZ2UxKSlcbiYjNDM7XHRcdGlmICghcmVhZF9wYWdlKHNlbGYsIHNlbGYtXHUwMDNlbWFwc19mZCwgXHUwMDI2c2VsZi1cdTAwM2VwYWdlMSkpXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFxuIFx0XHRjdXJyX3BvcyA9IHNlbGYtXHUwMDNlcGFnZTEuZGF0YTtcbkBAIC0yMDUsMTAgJiM0MzsyNjEsMTEgQEAgc3RhdGljIGJvb2wgcmVhZF90d29fcGFnZXMoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHNlbGYtXHUwMDNlc2tpcF9wYWdlczsgaSYjNDM7JiM0MzspXG4tXHRcdGlmICghcmVhZF9wYWdlKHNlbGYsIFx1MDAyNnNlbGYtXHUwMDNlcGFnZTEpKVxuJiM0MztcdFx0aWYgKCFyZWFkX3BhZ2Uoc2VsZiwgc2VsZi1cdTAwM2VtYXBzX2ZkLCBcdTAwMjZzZWxmLVx1MDAzZXBhZ2UxKSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRyZXR1cm4gcmVhZF9wYWdlKHNlbGYsIFx1MDAyNnNlbGYtXHUwMDNlcGFnZTEpIFx1MDAyNlx1MDAyNiByZWFkX3BhZ2Uoc2VsZiwgXHUwMDI2c2VsZi1cdTAwM2VwYWdlMik7XG4mIzQzO1x0cmV0dXJuIHJlYWRfcGFnZShzZWxmLCBzZWxmLVx1MDAzZW1hcHNfZmQsIFx1MDAyNnNlbGYtXHUwMDNlcGFnZTEpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICByZWFkX3BhZ2Uoc2VsZiwgc2VsZi1cdTAwM2VtYXBzX2ZkLCBcdTAwMjZzZWxmLVx1MDAzZXBhZ2UyKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgY29weV9saW5lKGNvbnN0IGNoYXIgKmxpbmVfc3RhcnQsIGNvbnN0IGNoYXIgKmxpbmVfZW5kLFxuQEAgLTMxNyw2ICYjNDM7Mzc0LDYxIEBAIHN0YXRpYyBib29sIHJlYWRfYm91bmRhcnlfbGluZXMoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZixcbiBcdFx0ICAgICAgXHUwMDI2Zmlyc3RfbGluZS1cdTAwM2VlbmRfYWRkcikgPT0gMjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIHBhcnNlX3NtYXBzX3JvbGx1cChGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyAqc3RhdHMpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZGV2X21haiwgZGV2X21pbiwgaW5vZGU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCBvZmZzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdmFsdWU7XG4mIzQzO1x0Y2hhciBuYW1lWzMyXSwgcGVybVs1XTtcbiYjNDM7XHRjaGFyICpjdXJyX3BvcztcbiYjNDM7XHRjaGFyICplbmRfcG9zO1xuJiM0MztcdGNoYXIgKmxpbmVfZW5kO1xuJiM0MztcbiYjNDM7XHRpZiAobHNlZWsoc2VsZi1cdTAwM2Vyb2xsdXBfZmQsIDAsIFNFRUtfU0VUKSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZWFkX3BhZ2Uoc2VsZiwgc2VsZi1cdTAwM2Vyb2xsdXBfZmQsIFx1MDAyNnNlbGYtXHUwMDNlcGFnZTEpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRjdXJyX3BvcyA9IHNlbGYtXHUwMDNlcGFnZTEuZGF0YTtcbiYjNDM7XHRlbmRfcG9zID0gc2VsZi1cdTAwM2VwYWdlMS5kYXRhICYjNDM7IHNlbGYtXHUwMDNlcGFnZTEuc2l6ZTtcbiYjNDM7XG4mIzQzO1x0bGluZV9lbmQgPSBzdHJjaHIoY3Vycl9wb3MsICYjMzk7XFxuJiMzOTspO1xuJiM0MztcdGlmICghbGluZV9lbmQpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChzc2NhbmYoY3Vycl9wb3MsIFwmIzM0OyVseC0lbHggJTRzICVseCAldToldSAldSAlMzFzXCYjMzQ7LFxuJiM0MztcdFx0XHUwMDI2c3RhcnQsIFx1MDAyNmVuZCwgcGVybSwgXHUwMDI2b2ZmcywgXHUwMDI2ZGV2X21haiwgXHUwMDI2ZGV2X21pbiwgXHUwMDI2aW5vZGUsIG5hbWUpICE9IDgpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChzdHJjbXAobmFtZSwgXCYjMzQ7W3JvbGx1cF1cJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBzdGF0ID0gMDsgc3RhdCBcdTAwM2MgQVJSQVlfU0laRShzbWFwc19yb2xsdXBfc3RhdF9uYW1lcyk7IHN0YXQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpbnQgbGVuO1xuJiM0MztcbiYjNDM7XHRcdGN1cnJfcG9zID0gbGluZV9lbmQgJiM0MzsgMTtcbiYjNDM7XHRcdGlmIChjdXJyX3BvcyBcdTAwM2U9IGVuZF9wb3MpXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0XHRsaW5lX2VuZCA9IHN0cmNocihjdXJyX3BvcywgJiMzOTtcXG4mIzM5Oyk7XG4mIzQzO1x0XHRpZiAoIWxpbmVfZW5kKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNzY2FuZihjdXJyX3BvcywgXCYjMzQ7JTMxcyAlbHUga0JcJiMzNDssIG5hbWUsIFx1MDAyNnZhbHVlKSAhPSAyKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0bGVuID0gc3RybGVuKG5hbWUpO1xuJiM0MztcdFx0aWYgKG5hbWVbbGVuIC0gMV0gIT0gJiMzOTs6JiMzOTsgfHwgc3RybmNtcChuYW1lLCBzbWFwc19yb2xsdXBfc3RhdF9uYW1lc1tzdGF0XSwgbGVuIC0gMSkpXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2V2YWx1ZXNbc3RhdF0gPSB2YWx1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIFRocmVhZCBzeW5jaHJvbml6YXRpb24gcm91dGluZXMgKi9cbiBzdGF0aWMgdm9pZCB3YWl0X2Zvcl9zdGF0ZShzdHJ1Y3Qgdm1hX21vZGlmaWVyX2luZm8gKm1vZF9pbmZvLCBlbnVtIHRlc3Rfc3RhdGUgc3RhdGUpXG4ge1xuQEAgLTM5Nyw2ICYjNDM7NTA5LDQxIEBAIHN0YXRpYyBib29sIHByaW50X2JvdW5kYXJpZXNfb24oYm9vbCBjb25kaXRpb24sIGNvbnN0IGNoYXIgKnRpdGxlLFxuIFx0cmV0dXJuIGNvbmRpdGlvbjtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHByaW50X3NtYXBzX3JvbGx1cF9zdGF0cyhjb25zdCBjaGFyICp0aXRsZSwgRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKnN0YXRzKVxuJiM0Mzt7XG4mIzQzO1x0cHJpbnRmKFwmIzM0OyVzXCYjMzQ7LCB0aXRsZSk7XG4mIzQzO1x0Zm9yIChpbnQgc3RhdCA9IDA7IHN0YXQgXHUwMDNjIEFSUkFZX1NJWkUoc21hcHNfcm9sbHVwX3N0YXRfbmFtZXMpOyBzdGF0JiM0MzsmIzQzOylcbiYjNDM7XHRcdHByaW50ZihcJiMzNDslNjRzICVsdSBrQlxcblwmIzM0Oywgc21hcHNfcm9sbHVwX3N0YXRfbmFtZXNbc3RhdF0sIHN0YXRzLVx1MDAzZXZhbHVlc1tzdGF0XSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGNtcF9zbWFwc19yb2xsdXBfc3RhdChzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpzMSxcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKnMyLFxuJiM0MztcdFx0XHRcdCAgZW51bSBzbWFwc19yb2xsdXBfc3RhdCBzdGF0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHMxLVx1MDAzZXZhbHVlc1tzdGF0XSA9PSBzMi1cdTAwM2V2YWx1ZXNbc3RhdF07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGNvbXBhcmVfc21hcHNfcm9sbHVwKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKmV4cGVjdGVkLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICphY3R1YWwpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENsZWFuL2RpcnR5IG1ldHJpY3MgbWlnaHQgY2hhbmdlIGJ1dCBQc3MtcmVsYXRlZCBvbmVzXG4mIzQzO1x0ICogc2hvdWxkIHN0YXkgY29uc3RhbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGNtcF9zbWFwc19yb2xsdXBfc3RhdChleHBlY3RlZCwgYWN0dWFsLCBQc3MpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBjbXBfc21hcHNfcm9sbHVwX3N0YXQoZXhwZWN0ZWQsIGFjdHVhbCwgUHNzX0Fub24pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBjbXBfc21hcHNfcm9sbHVwX3N0YXQoZXhwZWN0ZWQsIGFjdHVhbCwgUHNzX0ZpbGUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBjbXBfc21hcHNfcm9sbHVwX3N0YXQoZXhwZWN0ZWQsIGFjdHVhbCwgUHNzX1NobWVtKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRwcmludF9zbWFwc19yb2xsdXBfc3RhdHMoXCYjMzQ7RXhwZWN0ZWQgc3RhdHM6XCYjMzQ7LCBzZWxmLCBleHBlY3RlZCk7XG4mIzQzO1x0cHJpbnRfc21hcHNfcm9sbHVwX3N0YXRzKFwmIzM0O0FjdHVhbCBzdGF0czpcJiMzNDssIHNlbGYsIGFjdHVhbCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCByZXBvcnRfdGVzdF9zdGFydChjb25zdCBjaGFyICpuYW1lLCBib29sIHZlcmJvc2UpXG4ge1xuIFx0aWYgKHZlcmJvc2UpXG5AQCAtNTcyLDYgJiM0Mzs3MTksNyBAQCBGSVhUVVJFX1NFVFVQKHByb2NfbWFwc19yYWNlKVxuIFx0dW5zaWduZWQgbG9uZyBmaXJzdF9tYXBfYWRkcjtcbiBcdHVuc2lnbmVkIGxvbmcgbGFzdF9tYXBfYWRkcjtcbiBcdHVuc2lnbmVkIGxvbmcgZHVyYXRpb25fc2VjO1xuJiM0MztcdGNoYXIgcm9sbHVwX2ZuYW1lWzMyXTtcbiBcdGNoYXIgZm5hbWVbMzJdO1xuIFxuIFx0c2VsZi1cdTAwM2VwYWdlX3NpemUgPSAodW5zaWduZWQgbG9uZylzeXNjb25mKF9TQ19QQUdFU0laRSk7XG5AQCAtNjQ5LDYgJiM0Mzs3OTcsOSBAQCBGSVhUVVJFX1NFVFVQKHByb2NfbWFwc19yYWNlKVxuIFx0XHRicmVhaztcbiBcdGNhc2UgU01BUFM6XG4gXHRcdHNwcmludGYoZm5hbWUsIFwmIzM0Oy9wcm9jLyVkL3NtYXBzXCYjMzQ7LCBzZWxmLVx1MDAzZXBpZCk7XG4mIzQzO1x0XHRzcHJpbnRmKHJvbGx1cF9mbmFtZSwgXCYjMzQ7L3Byb2MvJWQvc21hcHNfcm9sbHVwXCYjMzQ7LCBzZWxmLVx1MDAzZXBpZCk7XG4mIzQzO1x0XHRzZWxmLVx1MDAzZXJvbGx1cF9mZCA9IG9wZW4ocm9sbHVwX2ZuYW1lLCBPX1JET05MWSk7XG4mIzQzO1x0XHRBU1NFUlRfTkUoc2VsZi1cdTAwM2Vyb2xsdXBfZmQsIC0xKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRrc2Z0X2V4aXRfZmFpbCgpO1xuQEAgLTcxMSw2ICYjNDM7ODYyLDggQEAgRklYVFVSRV9URUFSRE9XTihwcm9jX21hcHNfcmFjZSlcbiBcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBzZWxmLVx1MDAzZXZtYV9jb3VudDsgaSYjNDM7JiM0MzspXG4gXHRcdG11bm1hcChzZWxmLVx1MDAzZW1vZF9pbmZvLVx1MDAzZWNoaWxkX21hcHBlZF9hZGRyW2ldLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4gXHRjbG9zZShzZWxmLVx1MDAzZW1hcHNfZmQpO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZW1hcHNfZmlsZSA9PSBTTUFQUylcbiYjNDM7XHRcdGNsb3NlKHNlbGYtXHUwMDNlcm9sbHVwX2ZkKTtcbiBcdHdhaXRwaWQoc2VsZi1cdTAwM2VwaWQsIFx1MDAyNnN0YXR1cywgMCk7XG4gXHRtdW5tYXAoc2VsZi1cdTAwM2Vtb2RfaW5mbywgc2VsZi1cdTAwM2VzaGFyZWRfbWVtX3NpemUpO1xuIH1cbkBAIC03MjMsNiAmIzQzOzg3Niw3IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9zcGxpdClcbiBcdHN0cnVjdCBsaW5lX2NvbnRlbnQgc3BsaXRfZmlyc3RfbGluZTtcbiBcdHN0cnVjdCBsaW5lX2NvbnRlbnQgcmVzdG9yZWRfbGFzdF9saW5lO1xuIFx0c3RydWN0IGxpbmVfY29udGVudCByZXN0b3JlZF9maXJzdF9saW5lO1xuJiM0MztcdHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgb3JpZ19zdGF0cztcbiBcbiBcdHdhaXRfZm9yX3N0YXRlKG1vZF9pbmZvLCBTRVRVUF9SRUFEWSk7XG4gXG5AQCAtNzM2LDYgJiM0Mzs4OTAsOCBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fc3BsaXQpXG4gXHRyZXBvcnRfdGVzdF9zdGFydChcJiMzNDtUZWFyaW5nIGZyb20gc3BsaXRcJiMzNDssIHNlbGYtXHUwMDNldmVyYm9zZSk7XG4gXHRBU1NFUlRfVFJVRShjYXB0dXJlX21vZF9wYXR0ZXJuKHNlbGYsIFx1MDAyNnNwbGl0X2xhc3RfbGluZSwgXHUwMDI2c3BsaXRfZmlyc3RfbGluZSxcbiBcdFx0XHRcdFx0XHUwMDI2cmVzdG9yZWRfbGFzdF9saW5lLCBcdTAwMjZyZXN0b3JlZF9maXJzdF9saW5lKSk7XG4mIzQzO1x0aWYgKHNlbGYtXHUwMDNlbWFwc19maWxlID09IFNNQVBTKVxuJiM0MztcdFx0QVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsIFx1MDAyNm9yaWdfc3RhdHMpKTtcbiBcbiBcdC8qIE5vdyBzdGFydCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZm9yIHNlbGYtXHUwMDNlZHVyYXRpb25fc2VjICovXG4gXHRzaWduYWxfc3RhdGUobW9kX2luZm8sIFRFU1RfUkVBRFkpO1xuQEAgLTc5OSw2ICYjNDM7OTU1LDExIEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9zcGxpdClcbiBcdFx0XHRcdCAgICAgdm1hX2VuZCA9PSBzZWxmLVx1MDAzZWxhc3RfbGluZS5lbmRfYWRkcikgfHxcbiBcdFx0XHRcdCAgICAodm1hX3N0YXJ0ID09IHNwbGl0X2ZpcnN0X2xpbmUuc3RhcnRfYWRkciBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgICAgdm1hX2VuZCA9PSBzcGxpdF9maXJzdF9saW5lLmVuZF9hZGRyKSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIHN0YXRzO1xuJiM0MztcbiYjNDM7XHRcdFx0QVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsIFx1MDAyNnN0YXRzKSk7XG4mIzQzO1x0XHRcdEFTU0VSVF9UUlVFKGNvbXBhcmVfc21hcHNfcm9sbHVwKHNlbGYsIFx1MDAyNm9yaWdfc3RhdHMsIFx1MDAyNnN0YXRzKSk7XG4gXHRcdH1cbiBcdFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUNfQ09BUlNFLCBcdTAwMjZlbmRfdHMpO1xuIFx0XHRlbmRfdGVzdF9pdGVyYXRpb24oXHUwMDI2ZW5kX3RzLCBzZWxmLVx1MDAzZXZlcmJvc2UpO1xuQEAgLTgxNyw2ICYjNDM7OTc4LDcgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3Jlc2l6ZSlcbiBcdHN0cnVjdCBsaW5lX2NvbnRlbnQgc2hydW5rX2ZpcnN0X2xpbmU7XG4gXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2xhc3RfbGluZTtcbiBcdHN0cnVjdCBsaW5lX2NvbnRlbnQgcmVzdG9yZWRfZmlyc3RfbGluZTtcbiYjNDM7XHRzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIG9yaWdfc3RhdHM7XG4gXG4gXHR3YWl0X2Zvcl9zdGF0ZShtb2RfaW5mbywgU0VUVVBfUkVBRFkpO1xuIFxuQEAgLTgzMCw2ICYjNDM7OTkyLDggQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3Jlc2l6ZSlcbiBcdHJlcG9ydF90ZXN0X3N0YXJ0KFwmIzM0O1RlYXJpbmcgZnJvbSByZXNpemVcJiMzNDssIHNlbGYtXHUwMDNldmVyYm9zZSk7XG4gXHRBU1NFUlRfVFJVRShjYXB0dXJlX21vZF9wYXR0ZXJuKHNlbGYsIFx1MDAyNnNocnVua19sYXN0X2xpbmUsIFx1MDAyNnNocnVua19maXJzdF9saW5lLFxuIFx0XHRcdFx0XHRcdTAwMjZyZXN0b3JlZF9sYXN0X2xpbmUsIFx1MDAyNnJlc3RvcmVkX2ZpcnN0X2xpbmUpKTtcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2VtYXBzX2ZpbGUgPT0gU01BUFMpXG4mIzQzO1x0XHRBU1NFUlRfVFJVRShwYXJzZV9zbWFwc19yb2xsdXAoc2VsZiwgXHUwMDI2b3JpZ19zdGF0cykpO1xuIFxuIFx0LyogTm93IHN0YXJ0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBmb3Igc2VsZi1cdTAwM2VkdXJhdGlvbl9zZWMgKi9cbiBcdHNpZ25hbF9zdGF0ZShtb2RfaW5mbywgVEVTVF9SRUFEWSk7XG5AQCAtODgwLDYgJiM0MzsxMDQ0LDExIEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9yZXNpemUpXG4gXHRcdFx0QVNTRVJUX1RSVUUodm1hX3N0YXJ0ID09IHNlbGYtXHUwMDNlbGFzdF9saW5lLnN0YXJ0X2FkZHIgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgICAgKHZtYV9lbmQgLSB2bWFfc3RhcnQgPT0gc2VsZi1cdTAwM2VwYWdlX3NpemUgKiAzIHx8XG4gXHRcdFx0XHQgICAgIHZtYV9lbmQgLSB2bWFfc3RhcnQgPT0gc2VsZi1cdTAwM2VwYWdlX3NpemUpKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgc3RhdHM7XG4mIzQzO1xuJiM0MztcdFx0XHRBU1NFUlRfVFJVRShwYXJzZV9zbWFwc19yb2xsdXAoc2VsZiwgXHUwMDI2c3RhdHMpKTtcbiYjNDM7XHRcdFx0QVNTRVJUX1RSVUUoY29tcGFyZV9zbWFwc19yb2xsdXAoc2VsZiwgXHUwMDI2b3JpZ19zdGF0cywgXHUwMDI2c3RhdHMpKTtcbiBcdFx0fVxuIFx0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQ19DT0FSU0UsIFx1MDAyNmVuZF90cyk7XG4gXHRcdGVuZF90ZXN0X2l0ZXJhdGlvbihcdTAwMjZlbmRfdHMsIHNlbGYtXHUwMDNldmVyYm9zZSk7XG5AQCAtODk4LDYgJiM0MzsxMDY3LDcgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3JlbWFwKVxuIFx0c3RydWN0IGxpbmVfY29udGVudCByZW1hcHBlZF9maXJzdF9saW5lO1xuIFx0c3RydWN0IGxpbmVfY29udGVudCByZXN0b3JlZF9sYXN0X2xpbmU7XG4gXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2ZpcnN0X2xpbmU7XG4mIzQzO1x0c3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyBvcmlnX3N0YXRzO1xuIFxuIFx0d2FpdF9mb3Jfc3RhdGUobW9kX2luZm8sIFNFVFVQX1JFQURZKTtcbiBcbkBAIC05MTEsNiAmIzQzOzEwODEsOCBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fcmVtYXApXG4gXHRyZXBvcnRfdGVzdF9zdGFydChcJiMzNDtUZWFyaW5nIGZyb20gcmVtYXBcJiMzNDssIHNlbGYtXHUwMDNldmVyYm9zZSk7XG4gXHRBU1NFUlRfVFJVRShjYXB0dXJlX21vZF9wYXR0ZXJuKHNlbGYsIFx1MDAyNnJlbWFwcGVkX2xhc3RfbGluZSwgXHUwMDI2cmVtYXBwZWRfZmlyc3RfbGluZSxcbiBcdFx0XHRcdFx0XHUwMDI2cmVzdG9yZWRfbGFzdF9saW5lLCBcdTAwMjZyZXN0b3JlZF9maXJzdF9saW5lKSk7XG4mIzQzO1x0aWYgKHNlbGYtXHUwMDNlbWFwc19maWxlID09IFNNQVBTKVxuJiM0MztcdFx0QVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsIFx1MDAyNm9yaWdfc3RhdHMpKTtcbiBcbiBcdC8qIE5vdyBzdGFydCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZm9yIHNlbGYtXHUwMDNlZHVyYXRpb25fc2VjICovXG4gXHRzaWduYWxfc3RhdGUobW9kX2luZm8sIFRFU1RfUkVBRFkpO1xuQEAgLTk2Myw2ICYjNDM7MTEzNSwxMSBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fcmVtYXApXG4gXHRcdFx0XHQgICAgIHZtYV9lbmQgLSB2bWFfc3RhcnQgPT0gc2VsZi1cdTAwM2VwYWdlX3NpemUgKiAzKSB8fFxuIFx0XHRcdFx0ICAgICh2bWFfc3RhcnQgPT0gc2VsZi1cdTAwM2VsYXN0X2xpbmUuc3RhcnRfYWRkciAmIzQzOyBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgICAgdm1hX2VuZCAtIHZtYV9zdGFydCA9PSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSkpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0c3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyBzdGF0cztcbiYjNDM7XG4mIzQzO1x0XHRcdEFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCBcdTAwMjZzdGF0cykpO1xuJiM0MztcdFx0XHRBU1NFUlRfVFJVRShjb21wYXJlX3NtYXBzX3JvbGx1cChzZWxmLCBcdTAwMjZvcmlnX3N0YXRzLCBcdTAwMjZzdGF0cykpO1xuIFx0XHR9XG4gXHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDX0NPQVJTRSwgXHUwMDI2ZW5kX3RzKTtcbiBcdFx0ZW5kX3Rlc3RfaXRlcmF0aW9uKFx1MDAyNmVuZF90cywgc2VsZi1cdTAwM2V2ZXJib3NlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOTozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUk9DX0ZTJiMzNDssCiAgICAmIzM0O1BST0NfUEFHRV9NT05JVE9SJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2hvd19zbWFwc19yb2xsdXAmIzM0OywKICAgICYjMzQ7c21hcF9nYXRoZXJfc3RhdHMmIzM0OywKICAgICYjMzQ7c2hvd19zbWFwJiMzNDssCiAgICAmIzM0O2RvX3Byb2NtYXBfcXVlcnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3NtYXBzX3JvbGx1cCBhbmQgc21hcHMgaXRlcmF0aW9uIGxvZ2ljIGluIHRhc2tfbW11LmMgdG8gdXNlIHBlci1WTUEgbG9ja3MgdW5kZXIgUkNVIGluc3RlYWQgb2YgYWNxdWlyaW5nIG1tYXBfbG9jayB1cGZyb250LCBhZGp1c3RzIHBhcnRpYWwgVk1BIHN0YXQgZ2F0aGVyaW5nIGluIHNtYXBfZ2F0aGVyX3N0YXRzKCksIGFuZCBzaW1wbGlmaWVzIHByb2NfbWFwcyBsb2NraW5nIGhlbHBlcnMuIFRoaXMgcmVhY2hhYmxlIGNvcmUgTU0vcHJvY2ZzIGxvZ2ljIGlzIHdvcnRoIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI1NWE3YWNiYTdiOGJmMWI3NDg3ZmIxNTkwNzYwMDYwZTQ3ODkwYjQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDA5OjM4OjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jCmluZGV4IGU2NzFiNGZkOGRlZGQuLjY0MWExNTViMGM2MTMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvdGFza19tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jL3Rhc2tfbW11LmMKQEAgLTEzMCwyOCAmIzQzOzEzMCwxMiBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX3Rhc2tfbWVtcG9saWN5KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdikKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIGludCBsb2NrX2N0eF9tbShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKLXsKLQlpbnQgcmV0ID0gbW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobG9ja19jdHgtJmd0O21tKTsKLQotCWlmICghcmV0KQotCQlsb2NrX2N0eC0mZ3Q7bW1hcF9sb2NrZWQgPSB0cnVlOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpCiYjNDM7c3RhdGljIHZvaWQgdW5sb2NrX2N0eF9tbShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKIHsKIAltbWFwX3JlYWRfdW5sb2NrKGxvY2tfY3R4LSZndDttbSk7CiAJbG9ja19jdHgtJmd0O21tYXBfbG9ja2VkID0gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIHJlc2V0X2xvY2tfY3R4KHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KQotewotCWxvY2tfY3R4LSZndDtsb2NrZWRfdm1hID0gTlVMTDsKLQlsb2NrX2N0eC0mZ3Q7bW1hcF9sb2NrZWQgPSBmYWxzZTsKLX0KLQogc3RhdGljIHZvaWQgdW5sb2NrX2N0eF92bWEoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpCiB7CiAJaWYgKGxvY2tfY3R4LSZndDtsb2NrZWRfdm1hKSB7CkBAIC0xNjAsMjMgJiM0MzsxNDQsMTAgQEAgc3RhdGljIHZvaWQgdW5sb2NrX2N0eF92bWEoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpCiAJfQogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgbG9ja192bWFfcmFuZ2Uoc3RydWN0IHNlcV9maWxlICptLAotCQkJCSAgc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpCi17Ci0JcmN1X3JlYWRfbG9jaygpOwotCXJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTsKLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX3ZtYV9yYW5nZShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKJiM0MztzdGF0aWMgdm9pZCByZXNldF9sb2NrX2N0eChzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKIHsKLQlpZiAobG9ja19jdHgtJmd0O21tYXBfbG9ja2VkKSB7Ci0JCXVubG9ja19jdHhfbW0obG9ja19jdHgpOwotCX0gZWxzZSB7Ci0JCXVubG9ja19jdHhfdm1hKGxvY2tfY3R4KTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JfQomIzQzOwlsb2NrX2N0eC0mZ3Q7bG9ja2VkX3ZtYSA9IE5VTEw7CiYjNDM7CWxvY2tfY3R4LSZndDttbWFwX2xvY2tlZCA9IGZhbHNlOwogfQogCiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnZXRfbmV4dF92bWEoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LApAQCAtMTk2LDcgJiM0MzsxNjcsNyBAQCBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnZXRfbmV4dF92bWEoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LAogCXJldHVybiB2bWE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBmYWxsYmFja190b19tbWFwX2xvY2soc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LAomIzQzO3N0YXRpYyBib29sIGZhbGxiYWNrX3RvX21tYXBfbG9jayhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsCiAJCQkJCSBsb2ZmX3QgcG9zKQogewogCXN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4ID0gJmFtcDtwcml2LSZndDtsb2NrX2N0eDsKQEAgLTIxMyw3ICYjNDM7MTg0LDcgQEAgc3RhdGljIGlubGluZSBib29sIGZhbGxiYWNrX3RvX21tYXBfbG9jayhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkcm9wX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiYjNDM7c3RhdGljIHZvaWQgZHJvcF9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KQogewogCWlmIChwcml2LSZndDtsb2NrX2N0eC5tbWFwX2xvY2tlZCkKIAkJcmV0dXJuOwpAQCAtMjIxLDcgJiM0MzsxOTIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHJvcF9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KQogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhY3F1aXJlX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiYjNDM7c3RhdGljIHZvaWQgcmVhY3F1aXJlX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiB7CiAJaWYgKHByaXYtJmd0O2xvY2tfY3R4Lm1tYXBfbG9ja2VkKQogCQlyZXR1cm47CkBAIC0yODYsMTMgJiM0MzsyNTcsOCBAQCBzdGF0aWMgdm9pZCAqbV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcHBvcykKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKCFsb2NrX3ZtYV9yYW5nZShtLCBsb2NrX2N0eCkpIHsKLQkJbW1wdXQobW0pOwotCQlwdXRfdGFza19zdHJ1Y3QocHJpdi0mZ3Q7dGFzayk7Ci0JCXByaXYtJmd0O3Rhc2sgPSBOVUxMOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVFIpOwotCX0KLQomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTsKIAkvKgogCSAqIFJlc2V0IGN1cnJlbnQgcG9zaXRpb24gaWYgbGFzdF9hZGRyIHdhcyBzZXQgYmVmb3JlCiAJICogYW5kIGl0JiMzOTtzIG5vdCBhIHNlbnRpbmVsLgpAQCAtMzI1LDcgJiM0MzsyOTEsMTIgQEAgc3RhdGljIHZvaWQgbV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIAkJcmV0dXJuOwogCiAJcmVsZWFzZV90YXNrX21lbXBvbGljeShwcml2KTsKLQl1bmxvY2tfdm1hX3JhbmdlKCZhbXA7cHJpdi0mZ3Q7bG9ja19jdHgpOwomIzQzOwlpZiAocHJpdi0mZ3Q7bG9ja19jdHgubW1hcF9sb2NrZWQpIHsKJiM0MzsJCXVubG9ja19jdHhfbW0oJmFtcDtwcml2LSZndDtsb2NrX2N0eCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl1bmxvY2tfY3R4X3ZtYSgmYW1wO3ByaXYtJmd0O2xvY2tfY3R4KTsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwl9CiAJbW1wdXQobW0pOwogCXB1dF90YXNrX3N0cnVjdChwcml2LSZndDt0YXNrKTsKIAlwcml2LSZndDt0YXNrID0gTlVMTDsKQEAgLTUxOCwyMSAmIzQzOzQ4OSw2IEBAIHN0YXRpYyBpbnQgcGlkX21hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAkJUFJPQ01BUF9RVUVSWV9WTUFfRkxBR1MJCQkJXAogKQogCi1zdGF0aWMgaW50IHF1ZXJ5X3ZtYV9zZXR1cChzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKLXsKLQlyZXNldF9sb2NrX2N0eChsb2NrX2N0eCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcXVlcnlfdm1hX3RlYXJkb3duKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KQotewotCWlmIChsb2NrX2N0eC0mZ3Q7bW1hcF9sb2NrZWQpCi0JCXVubG9ja19jdHhfbW0obG9ja19jdHgpOwotCWVsc2UKLQkJdW5sb2NrX2N0eF92bWEobG9ja19jdHgpOwotfQotCiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpxdWVyeV92bWFfZmluZF9ieV9hZGRyKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4LAogCQkJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CkBAIC02NTMsMTIgJiM0Mzs2MDksNyBAQCBzdGF0aWMgaW50IGRvX3Byb2NtYXBfcXVlcnkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHZvaWQgX191c2VyICp1YXJnKQogCWlmICghbW0gfHwgIW1tZ2V0X25vdF96ZXJvKG1tKSkKIAkJcmV0dXJuIC1FU1JDSDsKIAotCWVyciA9IHF1ZXJ5X3ZtYV9zZXR1cCgmYW1wO2xvY2tfY3R4KTsKLQlpZiAoZXJyKSB7Ci0JCW1tcHV0KG1tKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KJiM0MzsJcmVzZXRfbG9ja19jdHgoJmFtcDtsb2NrX2N0eCk7CiAJdm1hID0gcXVlcnlfbWF0Y2hpbmdfdm1hKCZhbXA7bG9ja19jdHgsIGthcmcucXVlcnlfYWRkciwga2FyZy5xdWVyeV9mbGFncyk7CiAJaWYgKElTX0VSUih2bWEpKSB7CiAJCWVyciA9IFBUUl9FUlIodm1hKTsKQEAgLTczMiw3ICYjNDM7NjgzLDEwIEBAIHN0YXRpYyBpbnQgZG9fcHJvY21hcF9xdWVyeShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdm9pZCBfX3VzZXIgKnVhcmcpCiAJCXZtX2ZpbGUgPSBnZXRfZmlsZSh2bWEtJmd0O3ZtX2ZpbGUpOwogCiAJLyogdW5sb2NrIHZtYSBvciBtbWFwX2xvY2ssIGFuZCBwdXQgbW1fc3RydWN0IGJlZm9yZSBjb3B5aW5nIGRhdGEgdG8gdXNlciAqLwotCXF1ZXJ5X3ZtYV90ZWFyZG93bigmYW1wO2xvY2tfY3R4KTsKJiM0MzsJaWYgKGxvY2tfY3R4Lm1tYXBfbG9ja2VkKQomIzQzOwkJdW5sb2NrX2N0eF9tbSgmYW1wO2xvY2tfY3R4KTsKJiM0MzsJZWxzZQomIzQzOwkJdW5sb2NrX2N0eF92bWEoJmFtcDtsb2NrX2N0eCk7CiAJbW1wdXQobW0pOwogCiAJaWYgKGthcmcuYnVpbGRfaWRfc2l6ZSkgewpAQCAtNzczLDcgJiM0Mzs3MjcsMTAgQEAgc3RhdGljIGludCBkb19wcm9jbWFwX3F1ZXJ5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB2b2lkIF9fdXNlciAqdWFyZykKIAlyZXR1cm4gMDsKIAogb3V0OgotCXF1ZXJ5X3ZtYV90ZWFyZG93bigmYW1wO2xvY2tfY3R4KTsKJiM0MzsJaWYgKGxvY2tfY3R4Lm1tYXBfbG9ja2VkKQomIzQzOwkJdW5sb2NrX2N0eF9tbSgmYW1wO2xvY2tfY3R4KTsKJiM0MzsJZWxzZQomIzQzOwkJdW5sb2NrX2N0eF92bWEoJmFtcDtsb2NrX2N0eCk7CiAJbW1wdXQobW0pOwogb3V0X2ZpbGU6CiAJaWYgKHZtX2ZpbGUpCkBAIC0xMjYzLDcgJiM0MzsxMjIwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBzbWFwc19zaG1lbV93YWxrX3ZtYV9sb2NrX29wcyA9IHsKIAkud2Fsa19sb2NrCQk9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSwKIH07CiAKLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICoKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICoKIGdldF9zbWFwc193YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiB7CiAJaWYgKHByaXYtJmd0O2xvY2tfY3R4Lm1tYXBfbG9ja2VkKQpAQCAtMTI3MSw3ICYjNDM7MTIyOCw3IEBAIGdldF9zbWFwc193YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiAJcmV0dXJuICZhbXA7c21hcHNfd2Fsa192bWFfbG9ja19vcHM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICoKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICoKIGdldF9zbWFwc19zaG1lbV93YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiB7CiAJaWYgKHByaXYtJmd0O2xvY2tfY3R4Lm1tYXBfbG9ja2VkKQpAQCAtMTI3OSwyMCAmIzQzOzEyMzYsMjcgQEAgZ2V0X3NtYXBzX3NobWVtX3dhbGtfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdikKIAlyZXR1cm4gJmFtcDtzbWFwc19zaG1lbV93YWxrX3ZtYV9sb2NrX29wczsKIH0KIAotLyoKLSAqIEdhdGhlciBtZW0gc3RhdHMgZnJvbSBAdm1hIHdpdGggdGhlIGluZGljYXRlZCBiZWdpbm5pbmcKLSAqIGFkZHJlc3MgQHN0YXJ0LCBhbmQga2VlcCB0aGVtIGluIEBtc3MuCiYjNDM7LyoqCiYjNDM7ICogc21hcF9nYXRoZXJfc3RhdHMoKSAtIEdhdGhlciBtZW0gc3RhdHMgZnJvbSBAdm1hLgomIzQzOyAqIEBwcml2OiBwcm9jIG1hcHMgcHJpdmF0ZSBzdGF0ZS4KJiM0MzsgKiBAdm1hOiBUaGUgVk1BIHRvIGdhdGhlciBzdGF0cyBmb3IuCiYjNDM7ICogQG1zczogVGhlIGFjY3VtdWxhdGVkIHN0YXRzLgomIzQzOyAqIEBzdGFydDogVGhlIGFkZHJlc3MgZnJvbSB3aGljaCB0byBzdGFydC4KICAqCi0gKiBVc2Ugdm1fc3RhcnQgb2YgQHZtYSBhcyB0aGUgYmVnaW5uaW5nIGFkZHJlc3MgaWYgQHN0YXJ0IGlzIDAuCiYjNDM7ICogVGhpcyBnYXRoZXJzIHN0YXRzIGZvciB0aGUgd2hvbGUgb2YgdGhlIFZNQSB1bmxlc3MgdGhlIGxvY2sgd2FzIGRyb3BwZWQKJiM0MzsgKiBhbmQgVk1BIGdyZXcgb3IgZ290IG1lcmdlZCBhbmQgd2UgZm91bmQgaXQgYWdhaW4sIGluIHdoaWNoIGNhc2Ugd2Ugb25seQomIzQzOyAqIGdhdGhlciBzdGF0cyBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgVk1BIHJhbmdlLgogICovCiBzdGF0aWMgdm9pZCBzbWFwX2dhdGhlcl9zdGF0cyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsCiAJCQkgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCSAgICAgIHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyAqbXNzLCB1bnNpZ25lZCBsb25nIHN0YXJ0KQomIzQzOwkJCSAgICAgIHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyAqbXNzLAomIzQzOwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQpCiB7CiAJY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMgPSBnZXRfc21hcHNfd2Fsa19vcHMocHJpdik7CiYjNDM7CWNvbnN0IGJvb2wgaXNfcGFydGlhbCA9IHN0YXJ0ICZndDsgdm1hLSZndDt2bV9zdGFydDsKIAogCS8qIEludmFsaWQgc3RhcnQgKi8KLQlpZiAoc3RhcnQgJmd0Oz0gdm1hLSZndDt2bV9lbmQpCiYjNDM7CWlmIChzdGFydCAmbHQ7IHZtYS0mZ3Q7dm1fc3RhcnQgfHwgc3RhcnQgJmd0Oz0gdm1hLSZndDt2bV9lbmQpCiAJCXJldHVybjsKIAogCWlmICh2bWEgPT0gZ2V0X2dhdGVfdm1hKHByaXYtJmd0O2xvY2tfY3R4Lm1tKSkKQEAgLTEzMTIsMjAgJiM0MzsxMjc2LDE3IEBAIHN0YXRpYyB2b2lkIHNtYXBfZ2F0aGVyX3N0YXRzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiwKIAkJICogVW5sZXNzIHdlIGtub3cgdGhhdCB0aGUgc2htZW0gb2JqZWN0IChvciB0aGUgcGFydCBtYXBwZWQgYnkKIAkJICogb3VyIFZNQSkgaGFzIG5vIHN3YXBwZWQgb3V0IHBhZ2VzIGF0IGFsbC4KIAkJICovCi0JCXVuc2lnbmVkIGxvbmcgc2htZW1fc3dhcHBlZCA9IHNobWVtX3N3YXBfdXNhZ2Uodm1hKTsKJiM0MzsJCWNvbnN0IHVuc2lnbmVkIGxvbmcgc2htZW1fc3dhcHBlZCA9IHNobWVtX3N3YXBfdXNhZ2Uodm1hKTsKJiM0MzsJCWNvbnN0IGJvb2wgc2hhcmVkX29yX3JvID0gdm1hX3Rlc3Qodm1hLCBWTUFfU0hBUkVEX0JJVCkgfHwKJiM0MzsJCQkJCSAgIXZtYV90ZXN0KHZtYSwgVk1BX1dSSVRFX0JJVCk7CiAKLQkJaWYgKCFzdGFydCAmYW1wOyZhbXA7ICghc2htZW1fc3dhcHBlZCB8fCAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9TSEFSRUQpIHx8Ci0JCQkJCSEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9XUklURSkpKSB7CiYjNDM7CQlpZiAoIWlzX3BhcnRpYWwgJmFtcDsmYW1wOyAoIXNobWVtX3N3YXBwZWQgfHwgc2hhcmVkX29yX3JvKSkKIAkJCW1zcy0mZ3Q7c3dhcCAmIzQzOz0gc2htZW1fc3dhcHBlZDsKLQkJfSBlbHNlIHsKJiM0MzsJCWVsc2UKIAkJCW9wcyA9IGdldF9zbWFwc19zaG1lbV93YWxrX29wcyhwcml2KTsKLQkJfQogCX0KIAotCWlmICghc3RhcnQpCi0JCXdhbGtfcGFnZV92bWEodm1hLCBvcHMsIG1zcyk7Ci0JZWxzZQotCQl3YWxrX3BhZ2VfcmFuZ2Uodm1hLSZndDt2bV9tbSwgc3RhcnQsIHZtYS0mZ3Q7dm1fZW5kLCBvcHMsIG1zcyk7CiYjNDM7CXdhbGtfcGFnZV9yYW5nZV92bWEodm1hLCBzdGFydCwgdm1hLSZndDt2bV9lbmQsIG9wcywgbXNzKTsKIAogCXJlYWNxdWlyZV9yY3UocHJpdik7CiB9CkBAIC0xMzgwLDcgJiM0MzsxMzQxLDcgQEAgc3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdjsKIAlzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgbXNzID0ge307CiAKLQlzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsICZhbXA7bXNzLCAwKTsKJiM0MzsJc21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCAmYW1wO21zcywgdm1hLSZndDt2bV9zdGFydCk7CiAKIAlzaG93X21hcF92bWEobSwgdm1hKTsKIApAQCAtMTQwNSwxMiAmIzQzOzEzNjYsMTQgQEAgc3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogc3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2ID0gbS0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHggPSAmYW1wO3ByaXYtJmd0O2xvY2tfY3R4OwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGxvY2tfY3R4LSZndDttbTsKIAlzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgbXNzID0ge307Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LSZndDtsb2NrX2N0eC5tbTsKJiM0MzsJdW5zaWduZWQgbG9uZyBsYXN0X3ZtYV9lbmQgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIHZtYV9zdGFydCA9IDA7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0JdW5zaWduZWQgbG9uZyB2bWFfc3RhcnQgPSAwLCBsYXN0X3ZtYV9lbmQgPSAwOwomIzQzOwlsb2ZmX3QgcG9zID0gMDsKIAlpbnQgcmV0ID0gMDsKLQlWTUFfSVRFUkFUT1Iodm1pLCBtbSwgMCk7CiAKIAlwcml2LSZndDt0YXNrID0gZ2V0X3Byb2NfdGFzayhwcml2LSZndDtpbm9kZSk7CiAJaWYgKCFwcml2LSZndDt0YXNrKQpAQCAtMTQyMSw4OSAmIzQzOzEzODQsNjAgQEAgc3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiAJCWdvdG8gb3V0X3B1dF90YXNrOwogCX0KIAotCXJldCA9IGxvY2tfY3R4X21tKCZhbXA7cHJpdi0mZ3Q7bG9ja19jdHgpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X3B1dF9tbTsKLQogCWhvbGRfdGFza19tZW1wb2xpY3kocHJpdik7Ci0Jdm1hID0gdm1hX25leHQoJmFtcDt2bWkpOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTsKIAomIzQzOwl2bWFfaXRlcl9pbml0KCZhbXA7cHJpdi0mZ3Q7aXRlciwgbW0sIDApOwomIzQzOwl2bWEgPSBwcm9jX2dldF92bWEobSwgJmFtcDtwb3MpOwogCWlmICh1bmxpa2VseSghdm1hKSkKIAkJZ290byBlbXB0eV9zZXQ7CiAKLQl2bWFfc3RhcnQgPSB2bWEtJmd0O3ZtX3N0YXJ0OwotCWRvIHsKLQkJc21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCAmYW1wO21zcywgMCk7Ci0JCWxhc3Rfdm1hX2VuZCA9IHZtYS0mZ3Q7dm1fZW5kOwomIzQzOwlpZiAoIUlTX0VSUih2bWEpICZhbXA7JmFtcDsgdm1hICE9IGdldF9nYXRlX3ZtYShsb2NrX2N0eC0mZ3Q7bW0pKQomIzQzOwkJdm1hX3N0YXJ0ID0gdm1hLSZndDt2bV9zdGFydDsKJiM0MzsKJiM0MzsJd2hpbGUgKHZtYSkgewomIzQzOwkJaWYgKElTX0VSUih2bWEpKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUih2bWEpOwomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICh2bWEgPT0gZ2V0X2dhdGVfdm1hKGxvY2tfY3R4LSZndDttbSkpCiYjNDM7CQkJYnJlYWs7CiAKIAkJLyoKLQkJICogUmVsZWFzZSBtbWFwX2xvY2sgdGVtcG9yYXJpbHkgaWYgc29tZW9uZSB3YW50cyB0bwotCQkgKiBhY2Nlc3MgaXQgZm9yIHdyaXRlIHJlcXVlc3QuCiYjNDM7CQkgKiBJZiBhZnRlciByZXRha2luZyB0aGUgbG9jaywgYWxyZWFkeSByZXBvcnRlZCBWTUEgZ3JldyBvcgomIzQzOwkJICogbWVyZ2VkIHdpdGggdGhlIG5leHQgb25lLCBzbWFwX2dhdGhlcl9zdGF0cygpIHdpbGwgZ2F0aGVyCiYjNDM7CQkgKiBzdGF0cyBmb3IgdGhlIHJlbWFpbmluZyBwb3J0aW9uIGJ5IHN0YXJ0aW5nIGF0IGxhc3Rfdm1hX2VuZC4KIAkJICovCi0JCWlmIChtbWFwX2xvY2tfaXNfY29udGVuZGVkKG1tKSkgewotCQkJdm1hX2l0ZXJfaW52YWxpZGF0ZSgmYW1wO3ZtaSk7Ci0JCQl1bmxvY2tfY3R4X21tKCZhbXA7cHJpdi0mZ3Q7bG9ja19jdHgpOwotCQkJcmV0ID0gbG9ja19jdHhfbW0oJmFtcDtwcml2LSZndDtsb2NrX2N0eCk7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJcmVsZWFzZV90YXNrX21lbXBvbGljeShwcml2KTsKLQkJCQlnb3RvIG91dF9wdXRfbW07Ci0JCQl9CiYjNDM7CQlzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsICZhbXA7bXNzLCBsYXN0X3ZtYV9lbmQpOwomIzQzOwkJbGFzdF92bWFfZW5kID0gdm1hLSZndDt2bV9lbmQ7CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBJZiB0aGUgVk1BIGxvY2sgaXMgbm90IHRha2VuLCB3ZSBob2xkIHRoZSBvZnRlbiBjb250ZW5kZWQKJiM0MzsJCSAqIG1tYXAgbG9jay4gVGhpcyBjYW4gaGFwcGVuIGlmIHdlIGhhZCB0byBmYWxsIGJhY2sgdG8gdGhlCiYjNDM7CQkgKiBtbWFwIGxvY2suCiYjNDM7CQkgKgomIzQzOwkJICogVG8gcmVsaWV2ZSBwcmVzc3VyZSwgY2hlY2sgaWYgaXQgaXMgaW5kZWVkIGNvbnRlbmRlZCwgdGhlbgomIzQzOwkJICogdGVtcG9yYXJpbHkgcmVsZWFzZSBpdC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGxvY2tfY3R4LSZndDttbWFwX2xvY2tlZCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbW1hcF9sb2NrX2lzX2NvbnRlbmRlZChsb2NrX2N0eC0mZ3Q7bW0pKSB7CiYjNDM7CQkJdW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7CiAJCQkvKgotCQkJICogQWZ0ZXIgZHJvcHBpbmcgdGhlIGxvY2ssIHRoZXJlIGFyZSBmb3VyIGNhc2VzIHRvCi0JCQkgKiBjb25zaWRlci4gU2VlIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSBmb3IgZXhwbGFuYXRpb24uCi0JCQkgKgotCQkJICogICAmIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7Ci0JCQkgKiAgIHwgVk1BMSB8IFZNQTIgfCBWTUEzICAgICAgfAotCQkJICogICAmIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7Ci0JCQkgKiAgIHwgICAgICB8ICAgICAgfCAgICAgICAgICAgfAotCQkJICogIDRrICAgICA4ayAgICAgMTZrICAgICAgICAgNDAwawotCQkJICoKLQkJCSAqIFN1cHBvc2Ugd2UgZHJvcCB0aGUgbG9jayBhZnRlciByZWFkaW5nIFZNQTIgZHVlIHRvCi0JCQkgKiBjb250ZW50aW9uLCB0aGVuIHdlIGdldDoKLQkJCSAqCi0JCQkgKglsYXN0X3ZtYV9lbmQgPSAxNmsKLQkJCSAqCi0JCQkgKiAxKSBWTUEyIGlzIGZyZWVkLCBidXQgVk1BMyBleGlzdHM6Ci0JCQkgKgotCQkJICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBWTUEzLgotCQkJICogICAgSW4gdGhpcyBjYXNlLCBqdXN0IGNvbnRpbnVlIGZyb20gVk1BMy4KLQkJCSAqCi0JCQkgKiAyKSBWTUEyIHN0aWxsIGV4aXN0czoKLQkJCSAqCi0JCQkgKiAgICB2bWFfbmV4dCh2bWkpIHdpbGwgcmV0dXJuIFZNQTMuCi0JCQkgKiAgICBJbiB0aGlzIGNhc2UsIGp1c3QgY29udGludWUgZnJvbSBWTUEzLgotCQkJICoKLQkJCSAqIDMpIE5vIG1vcmUgVk1BcyBjYW4gYmUgZm91bmQ6Ci0JCQkgKgotCQkJICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBOVUxMLgotCQkJICogICAgTm8gbW9yZSB0aGluZ3MgdG8gZG8sIGp1c3QgYnJlYWsuCi0JCQkgKgotCQkJICogNCkgKGxhc3Rfdm1hX2VuZCAtIDEpIGlzIHRoZSBtaWRkbGUgb2YgYSB2bWEgKFZNQSYjMzk7KToKLQkJCSAqCi0JCQkgKiAgICB2bWFfbmV4dCh2bWkpIHdpbGwgcmV0dXJuIFZNQSYjMzk7IHdob3NlIHJhbmdlCi0JCQkgKiAgICBjb250YWlucyBsYXN0X3ZtYV9lbmQuCi0JCQkgKiAgICBJdGVyYXRlIFZNQSYjMzk7IGZyb20gbGFzdF92bWFfZW5kLgomIzQzOwkJCSAqIEV2ZW4gdGhvdWdoIHdlIHByZXZpb3VzbHkgZmVsbCBiYWNrIHRvIG1tYXAgbG9jaywKJiM0MzsJCQkgKiB3ZSB0cnkgdGFraW5nIFZNQSBsb2NrIGZvciB0aGUgbmV4dCBWTUEsIHNpbmNlIGl0CiYjNDM7CQkJICogbWlnaHQgbm90IGJlIHVuZGVyIG1vZGlmaWNhdGlvbi4gSW4gdGhlIHdvcnN0IGNhc2UKJiM0MzsJCQkgKiB3ZSB3aWxsIGZhbGwgYmFjayB0byBtbWFwIGxvY2sgYWdhaW4uCiAJCQkgKi8KLQkJCXZtYSA9IHZtYV9uZXh0KCZhbXA7dm1pKTsKLQkJCS8qIENhc2UgMyBhYm92ZSAqLwotCQkJaWYgKCF2bWEpCi0JCQkJYnJlYWs7Ci0KLQkJCS8qIENhc2UgMSBhbmQgMiBhYm92ZSAqLwotCQkJaWYgKHZtYS0mZ3Q7dm1fc3RhcnQgJmd0Oz0gbGFzdF92bWFfZW5kKSB7Ci0JCQkJc21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCAmYW1wO21zcywgMCk7Ci0JCQkJbGFzdF92bWFfZW5kID0gdm1hLSZndDt2bV9lbmQ7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qIENhc2UgNCBhYm92ZSAqLwotCQkJaWYgKHZtYS0mZ3Q7dm1fZW5kICZndDsgbGFzdF92bWFfZW5kKSB7Ci0JCQkJc21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCAmYW1wO21zcywgbGFzdF92bWFfZW5kKTsKLQkJCQlsYXN0X3ZtYV9lbmQgPSB2bWEtJmd0O3ZtX2VuZDsKLQkJCX0KJiM0MzsJCQlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CQkJcmVzZXRfbG9ja19jdHgobG9ja19jdHgpOwomIzQzOwkJCS8qIFJlc3VtZSBmcm9tIHRoZSBsYXN0IHBvc2l0aW9uLiAqLwomIzQzOwkJCXBvcyA9IGxhc3Rfdm1hX2VuZDsKJiM0MzsJCQl2bWFfaXRlcl9pbml0KCZhbXA7cHJpdi0mZ3Q7aXRlciwgbW0sIHBvcyk7CiAJCX0KLQl9IGZvcl9lYWNoX3ZtYSh2bWksIHZtYSk7CiYjNDM7CQl2bWEgPSBwcm9jX2dldF92bWEobSwgJmFtcDtwb3MpOwomIzQzOwl9CiAKIGVtcHR5X3NldDoKIAlzaG93X3ZtYV9oZWFkZXJfcHJlZml4KG0sIHZtYV9zdGFydCwgbGFzdF92bWFfZW5kLCAwLCAwLCAwLCAwKTsKQEAgLTE1MTIsMTAgJiM0MzsxNDQ2LDE0IEBAIHN0YXRpYyBpbnQgc2hvd19zbWFwc19yb2xsdXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogCiAJX19zaG93X3NtYXAobSwgJmFtcDttc3MsIHRydWUpOwogCiYjNDM7b3V0X3VubG9jazoKJiM0MzsJaWYgKGxvY2tfY3R4LSZndDttbWFwX2xvY2tlZCkgewomIzQzOwkJdW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl1bmxvY2tfY3R4X3ZtYShsb2NrX2N0eCk7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJfQogCXJlbGVhc2VfdGFza19tZW1wb2xpY3kocHJpdik7Ci0JdW5sb2NrX2N0eF9tbSgmYW1wO3ByaXYtJmd0O2xvY2tfY3R4KTsKLQotb3V0X3B1dF9tbToKIAltbXB1dChtbSk7CiBvdXRfcHV0X3Rhc2s6CiAJcHV0X3Rhc2tfc3RydWN0KHByaXYtJmd0O3Rhc2spOwpAQCAtMTYwNSw3ICYjNDM7MTU0Myw3IEBAIHN0cnVjdCBjbGVhcl9yZWZzX3ByaXZhdGUgewogCWVudW0gY2xlYXJfcmVmc190eXBlcyB0eXBlOwogfTsKIAotc3RhdGljIGlubGluZSBib29sIHB0ZV9pc19waW5uZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKQomIzQzO3N0YXRpYyBib29sIHB0ZV9pc19waW5uZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKQogewogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAKQEAgLTE2MjEsOCAmIzQzOzE1NTksOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHRlX2lzX3Bpbm5lZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCXJldHVybiBmb2xpb19tYXliZV9kbWFfcGlubmVkKGZvbGlvKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZSkKJiM0MztzdGF0aWMgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJICAgICBwdGVfdCAqcHRlKQogewogCWlmICghcGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpCiAJCXJldHVybjsKQEAgLTE2NTMsOCAmIzQzOzE1OTEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKQotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHlfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQl1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKQomIzQzO3N0YXRpYyB2b2lkIGNsZWFyX3NvZnRfZGlydHlfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJCQkgdW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kcCkKIHsKIAlwbWRfdCBvbGQsIHBtZCA9ICpwbWRwOwogCkBAIC0xNjc5LDggJiM0MzsxNjE3LDggQEAgc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHlfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCX0KIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHApCiYjNDM7c3RhdGljIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQkJCSB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKQogewogfQogI2VuZGlmCkBAIC0xODc5LDcgJiM0MzsxODE3LDcgQEAgc3RydWN0IHBhZ2VtYXByZWFkIHsKIAogI2RlZmluZSBQTV9FTkRfT0ZfQlVGRkVSICAgIDEKIAotc3RhdGljIGlubGluZSBwYWdlbWFwX2VudHJ5X3QgbWFrZV9wbWUodTY0IGZyYW1lLCB1NjQgZmxhZ3MpCiYjNDM7c3RhdGljIHBhZ2VtYXBfZW50cnlfdCBtYWtlX3BtZSh1NjQgZnJhbWUsIHU2NCBmbGFncykKIHsKIAlyZXR1cm4gKHBhZ2VtYXBfZW50cnlfdCkgeyAucG1lID0gKGZyYW1lICZhbXA7IFBNX1BGUkFNRV9NQVNLKSB8IGZsYWdzIH07CiB9CkBAIC0zNDIxLDcgJiM0MzszMzU5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBzaG93X251bWFfdm1hX2xvY2tfb3BzID0gewogCS53YWxrX2xvY2sgPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksCiB9OwogCi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqCiBnZXRfc2hvd19udW1hX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiB7CiAJaWYgKHByaXYtJmd0O2xvY2tfY3R4Lm1tYXBfbG9ja2VkKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLW1hcHMtcmFjZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLW1hcHMtcmFjZS5jCmluZGV4IDQxNWVjY2I3MDQ2ODQuLjhkMDBkN2RiMWM2NTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2MtbWFwcy1yYWNlLmMKQEAgLTgwLDYgJiM0Mzs4MCw2MSBAQCBlbnVtIG1hcHNfZmlsZSB7CiAKIHN0cnVjdCB2bWFfbW9kaWZpZXJfaW5mbzsKIAomIzQzO2VudW0gc21hcHNfcm9sbHVwX3N0YXQgewomIzQzOwlSc3MsCiYjNDM7CVBzcywKJiM0MzsJUHNzX0RpcnR5LAomIzQzOwlQc3NfQW5vbiwKJiM0MzsJUHNzX0ZpbGUsCiYjNDM7CVBzc19TaG1lbSwKJiM0MzsJU2hhcmVkX0NsZWFuLAomIzQzOwlTaGFyZWRfRGlydHksCiYjNDM7CVByaXZhdGVfQ2xlYW4sCiYjNDM7CVByaXZhdGVfRGlydHksCiYjNDM7CVJlZmVyZW5jZWQsCiYjNDM7CUFub255bW91cywKJiM0MzsJS1NNLAomIzQzOwlMYXp5RnJlZSwKJiM0MzsJQW5vbkh1Z2VQYWdlcywKJiM0MzsJU2htZW1QbWRNYXBwZWQsCiYjNDM7CUZpbGVQbWRNYXBwZWQsCiYjNDM7CVNoYXJlZF9IdWdldGxiLAomIzQzOwlQcml2YXRlX0h1Z2V0bGIsCiYjNDM7CVN3YXAsCiYjNDM7CVN3YXBQc3MsCiYjNDM7CUxvY2tlZCwKJiM0MzsJUm9sbHVwRmllbGRDb3VudAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKnNtYXBzX3JvbGx1cF9zdGF0X25hbWVzW1JvbGx1cEZpZWxkQ291bnRdID0gewomIzQzOwkmIzM0O1JzcyYjMzQ7LAomIzQzOwkmIzM0O1BzcyYjMzQ7LAomIzQzOwkmIzM0O1Bzc19EaXJ0eSYjMzQ7LAomIzQzOwkmIzM0O1Bzc19Bbm9uJiMzNDssCiYjNDM7CSYjMzQ7UHNzX0ZpbGUmIzM0OywKJiM0MzsJJiMzNDtQc3NfU2htZW0mIzM0OywKJiM0MzsJJiMzNDtTaGFyZWRfQ2xlYW4mIzM0OywKJiM0MzsJJiMzNDtTaGFyZWRfRGlydHkmIzM0OywKJiM0MzsJJiMzNDtQcml2YXRlX0NsZWFuJiMzNDssCiYjNDM7CSYjMzQ7UHJpdmF0ZV9EaXJ0eSYjMzQ7LAomIzQzOwkmIzM0O1JlZmVyZW5jZWQmIzM0OywKJiM0MzsJJiMzNDtBbm9ueW1vdXMmIzM0OywKJiM0MzsJJiMzNDtLU00mIzM0OywKJiM0MzsJJiMzNDtMYXp5RnJlZSYjMzQ7LAomIzQzOwkmIzM0O0Fub25IdWdlUGFnZXMmIzM0OywKJiM0MzsJJiMzNDtTaG1lbVBtZE1hcHBlZCYjMzQ7LAomIzQzOwkmIzM0O0ZpbGVQbWRNYXBwZWQmIzM0OywKJiM0MzsJJiMzNDtTaGFyZWRfSHVnZXRsYiYjMzQ7LAomIzQzOwkmIzM0O1ByaXZhdGVfSHVnZXRsYiYjMzQ7LAomIzQzOwkmIzM0O1N3YXAmIzM0OywKJiM0MzsJJiMzNDtTd2FwUHNzJiMzNDssCiYjNDM7CSYjMzQ7TG9ja2VkJiMzNDssCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIHsKJiM0MzsJdW5zaWduZWQgbG9uZyB2YWx1ZXNbUm9sbHVwRmllbGRDb3VudF07CiYjNDM7fTsKJiM0MzsKIEZJWFRVUkUocHJvY19tYXBzX3JhY2UpCiB7CiAJc3RydWN0IHZtYV9tb2RpZmllcl9pbmZvICptb2RfaW5mbzsKQEAgLTkxLDYgJiM0MzsxNDYsNyBAQCBGSVhUVVJFKHByb2NfbWFwc19yYWNlKQogCWVudW0gbWFwc19maWxlIG1hcHNfZmlsZTsKIAlpbnQgc2hhcmVkX21lbV9zaXplOwogCWludCBza2lwX3BhZ2VzOwomIzQzOwlpbnQgcm9sbHVwX2ZkOwogCWludCBwYWdlX3NpemU7CiAJaW50IHZtYV9jb3VudDsKIAlib29sIHZlcmJvc2U7CkBAIC0xMzIsMTIgJiM0MzsxODgsMTIgQEAgc3RydWN0IHZtYV9tb2RpZmllcl9pbmZvIHsKIAl2b2lkICpjaGlsZF9tYXBwZWRfYWRkcltdOwogfTsKIAotc3RhdGljIGJvb2wgcmVhZF9wYWdlKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsCiYjNDM7c3RhdGljIGJvb2wgcmVhZF9wYWdlKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsIGludCBmZCwKIAkJICAgICAgc3RydWN0IHBhZ2VfY29udGVudCAqcGFnZSkKIHsKIAlzc2l6ZV90ICBieXRlc19yZWFkOwogCi0JYnl0ZXNfcmVhZCA9IHJlYWQoc2VsZi0mZ3Q7bWFwc19mZCwgcGFnZS0mZ3Q7ZGF0YSwgc2VsZi0mZ3Q7cGFnZV9zaXplKTsKJiM0MzsJYnl0ZXNfcmVhZCA9IHJlYWQoZmQsIHBhZ2UtJmd0O2RhdGEsIHNlbGYtJmd0O3BhZ2Vfc2l6ZSk7CiAJaWYgKGJ5dGVzX3JlYWQgJmx0Oz0gMCkKIAkJcmV0dXJuIGZhbHNlOwogCkBAIC0xNzUsNyAmIzQzOzIzMSw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX2NvbnRhaW5pbmdfcGFnZShGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmLAogCQljaGFyICpjdXJyX3BvczsKIAkJY2hhciAqZW5kX3BvczsKIAotCQlpZiAoIXJlYWRfcGFnZShzZWxmLCAmYW1wO3NlbGYtJmd0O3BhZ2UxKSkKJiM0MzsJCWlmICghcmVhZF9wYWdlKHNlbGYsIHNlbGYtJmd0O21hcHNfZmQsICZhbXA7c2VsZi0mZ3Q7cGFnZTEpKQogCQkJcmV0dXJuIC0xOwogCiAJCWN1cnJfcG9zID0gc2VsZi0mZ3Q7cGFnZTEuZGF0YTsKQEAgLTIwNSwxMCAmIzQzOzI2MSwxMSBAQCBzdGF0aWMgYm9vbCByZWFkX3R3b19wYWdlcyhGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHNlbGYtJmd0O3NraXBfcGFnZXM7IGkmIzQzOyYjNDM7KQotCQlpZiAoIXJlYWRfcGFnZShzZWxmLCAmYW1wO3NlbGYtJmd0O3BhZ2UxKSkKJiM0MzsJCWlmICghcmVhZF9wYWdlKHNlbGYsIHNlbGYtJmd0O21hcHNfZmQsICZhbXA7c2VsZi0mZ3Q7cGFnZTEpKQogCQkJcmV0dXJuIGZhbHNlOwogCi0JcmV0dXJuIHJlYWRfcGFnZShzZWxmLCAmYW1wO3NlbGYtJmd0O3BhZ2UxKSAmYW1wOyZhbXA7IHJlYWRfcGFnZShzZWxmLCAmYW1wO3NlbGYtJmd0O3BhZ2UyKTsKJiM0MzsJcmV0dXJuIHJlYWRfcGFnZShzZWxmLCBzZWxmLSZndDttYXBzX2ZkLCAmYW1wO3NlbGYtJmd0O3BhZ2UxKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICByZWFkX3BhZ2Uoc2VsZiwgc2VsZi0mZ3Q7bWFwc19mZCwgJmFtcDtzZWxmLSZndDtwYWdlMik7CiB9CiAKIHN0YXRpYyB2b2lkIGNvcHlfbGluZShjb25zdCBjaGFyICpsaW5lX3N0YXJ0LCBjb25zdCBjaGFyICpsaW5lX2VuZCwKQEAgLTMxNyw2ICYjNDM7Mzc0LDYxIEBAIHN0YXRpYyBib29sIHJlYWRfYm91bmRhcnlfbGluZXMoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZiwKIAkJICAgICAgJmFtcDtmaXJzdF9saW5lLSZndDtlbmRfYWRkcikgPT0gMjsKIH0KIAomIzQzO3N0YXRpYyBib29sIHBhcnNlX3NtYXBzX3JvbGx1cChGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmLAomIzQzOwkJCSAgICAgICBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpzdGF0cykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBkZXZfbWFqLCBkZXZfbWluLCBpbm9kZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCBvZmZzOwomIzQzOwl1bnNpZ25lZCBsb25nIHZhbHVlOwomIzQzOwljaGFyIG5hbWVbMzJdLCBwZXJtWzVdOwomIzQzOwljaGFyICpjdXJyX3BvczsKJiM0MzsJY2hhciAqZW5kX3BvczsKJiM0MzsJY2hhciAqbGluZV9lbmQ7CiYjNDM7CiYjNDM7CWlmIChsc2VlayhzZWxmLSZndDtyb2xsdXBfZmQsIDAsIFNFRUtfU0VUKSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghcmVhZF9wYWdlKHNlbGYsIHNlbGYtJmd0O3JvbGx1cF9mZCwgJmFtcDtzZWxmLSZndDtwYWdlMSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWN1cnJfcG9zID0gc2VsZi0mZ3Q7cGFnZTEuZGF0YTsKJiM0MzsJZW5kX3BvcyA9IHNlbGYtJmd0O3BhZ2UxLmRhdGEgJiM0Mzsgc2VsZi0mZ3Q7cGFnZTEuc2l6ZTsKJiM0MzsKJiM0MzsJbGluZV9lbmQgPSBzdHJjaHIoY3Vycl9wb3MsICYjMzk7XG4mIzM5Oyk7CiYjNDM7CWlmICghbGluZV9lbmQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChzc2NhbmYoY3Vycl9wb3MsICYjMzQ7JWx4LSVseCAlNHMgJWx4ICV1OiV1ICV1ICUzMXMmIzM0OywKJiM0MzsJCSZhbXA7c3RhcnQsICZhbXA7ZW5kLCBwZXJtLCAmYW1wO29mZnMsICZhbXA7ZGV2X21haiwgJmFtcDtkZXZfbWluLCAmYW1wO2lub2RlLCBuYW1lKSAhPSA4KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoc3RyY21wKG5hbWUsICYjMzQ7W3JvbGx1cF0mIzM0OykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaW50IHN0YXQgPSAwOyBzdGF0ICZsdDsgQVJSQVlfU0laRShzbWFwc19yb2xsdXBfc3RhdF9uYW1lcyk7IHN0YXQmIzQzOyYjNDM7KSB7CiYjNDM7CQlpbnQgbGVuOwomIzQzOwomIzQzOwkJY3Vycl9wb3MgPSBsaW5lX2VuZCAmIzQzOyAxOwomIzQzOwkJaWYgKGN1cnJfcG9zICZndDs9IGVuZF9wb3MpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkJbGluZV9lbmQgPSBzdHJjaHIoY3Vycl9wb3MsICYjMzk7XG4mIzM5Oyk7CiYjNDM7CQlpZiAoIWxpbmVfZW5kKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCWlmIChzc2NhbmYoY3Vycl9wb3MsICYjMzQ7JTMxcyAlbHUga0ImIzM0OywgbmFtZSwgJmFtcDt2YWx1ZSkgIT0gMikKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQlsZW4gPSBzdHJsZW4obmFtZSk7CiYjNDM7CQlpZiAobmFtZVtsZW4gLSAxXSAhPSAmIzM5OzomIzM5OyB8fCBzdHJuY21wKG5hbWUsIHNtYXBzX3JvbGx1cF9zdGF0X25hbWVzW3N0YXRdLCBsZW4gLSAxKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQlzdGF0cy0mZ3Q7dmFsdWVzW3N0YXRdID0gdmFsdWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogLyogVGhyZWFkIHN5bmNocm9uaXphdGlvbiByb3V0aW5lcyAqLwogc3RhdGljIHZvaWQgd2FpdF9mb3Jfc3RhdGUoc3RydWN0IHZtYV9tb2RpZmllcl9pbmZvICptb2RfaW5mbywgZW51bSB0ZXN0X3N0YXRlIHN0YXRlKQogewpAQCAtMzk3LDYgJiM0Mzs1MDksNDEgQEAgc3RhdGljIGJvb2wgcHJpbnRfYm91bmRhcmllc19vbihib29sIGNvbmRpdGlvbiwgY29uc3QgY2hhciAqdGl0bGUsCiAJcmV0dXJuIGNvbmRpdGlvbjsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHByaW50X3NtYXBzX3JvbGx1cF9zdGF0cyhjb25zdCBjaGFyICp0aXRsZSwgRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZiwKJiM0MzsJCQkJICAgICBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpzdGF0cykKJiM0Mzt7CiYjNDM7CXByaW50ZigmIzM0OyVzJiMzNDssIHRpdGxlKTsKJiM0MzsJZm9yIChpbnQgc3RhdCA9IDA7IHN0YXQgJmx0OyBBUlJBWV9TSVpFKHNtYXBzX3JvbGx1cF9zdGF0X25hbWVzKTsgc3RhdCYjNDM7JiM0MzspCiYjNDM7CQlwcmludGYoJiMzNDslNjRzICVsdSBrQlxuJiMzNDssIHNtYXBzX3JvbGx1cF9zdGF0X25hbWVzW3N0YXRdLCBzdGF0cy0mZ3Q7dmFsdWVzW3N0YXRdKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgY21wX3NtYXBzX3JvbGx1cF9zdGF0KHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKnMxLAomIzQzOwkJCQkgIHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKnMyLAomIzQzOwkJCQkgIGVudW0gc21hcHNfcm9sbHVwX3N0YXQgc3RhdCkKJiM0Mzt7CiYjNDM7CXJldHVybiBzMS0mZ3Q7dmFsdWVzW3N0YXRdID09IHMyLSZndDt2YWx1ZXNbc3RhdF07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGNvbXBhcmVfc21hcHNfcm9sbHVwKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsCiYjNDM7CQkJCSBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpleHBlY3RlZCwKJiM0MzsJCQkJIHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKmFjdHVhbCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIENsZWFuL2RpcnR5IG1ldHJpY3MgbWlnaHQgY2hhbmdlIGJ1dCBQc3MtcmVsYXRlZCBvbmVzCiYjNDM7CSAqIHNob3VsZCBzdGF5IGNvbnN0YW50LgomIzQzOwkgKi8KJiM0MzsJaWYgKGNtcF9zbWFwc19yb2xsdXBfc3RhdChleHBlY3RlZCwgYWN0dWFsLCBQc3MpICZhbXA7JmFtcDsKJiM0MzsJICAgIGNtcF9zbWFwc19yb2xsdXBfc3RhdChleHBlY3RlZCwgYWN0dWFsLCBQc3NfQW5vbikgJmFtcDsmYW1wOwomIzQzOwkgICAgY21wX3NtYXBzX3JvbGx1cF9zdGF0KGV4cGVjdGVkLCBhY3R1YWwsIFBzc19GaWxlKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBjbXBfc21hcHNfcm9sbHVwX3N0YXQoZXhwZWN0ZWQsIGFjdHVhbCwgUHNzX1NobWVtKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlwcmludF9zbWFwc19yb2xsdXBfc3RhdHMoJiMzNDtFeHBlY3RlZCBzdGF0czomIzM0Oywgc2VsZiwgZXhwZWN0ZWQpOwomIzQzOwlwcmludF9zbWFwc19yb2xsdXBfc3RhdHMoJiMzNDtBY3R1YWwgc3RhdHM6JiMzNDssIHNlbGYsIGFjdHVhbCk7CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCByZXBvcnRfdGVzdF9zdGFydChjb25zdCBjaGFyICpuYW1lLCBib29sIHZlcmJvc2UpCiB7CiAJaWYgKHZlcmJvc2UpCkBAIC01NzIsNiAmIzQzOzcxOSw3IEBAIEZJWFRVUkVfU0VUVVAocHJvY19tYXBzX3JhY2UpCiAJdW5zaWduZWQgbG9uZyBmaXJzdF9tYXBfYWRkcjsKIAl1bnNpZ25lZCBsb25nIGxhc3RfbWFwX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBkdXJhdGlvbl9zZWM7CiYjNDM7CWNoYXIgcm9sbHVwX2ZuYW1lWzMyXTsKIAljaGFyIGZuYW1lWzMyXTsKIAogCXNlbGYtJmd0O3BhZ2Vfc2l6ZSA9ICh1bnNpZ25lZCBsb25nKXN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKQEAgLTY0OSw2ICYjNDM7Nzk3LDkgQEAgRklYVFVSRV9TRVRVUChwcm9jX21hcHNfcmFjZSkKIAkJYnJlYWs7CiAJY2FzZSBTTUFQUzoKIAkJc3ByaW50ZihmbmFtZSwgJiMzNDsvcHJvYy8lZC9zbWFwcyYjMzQ7LCBzZWxmLSZndDtwaWQpOwomIzQzOwkJc3ByaW50Zihyb2xsdXBfZm5hbWUsICYjMzQ7L3Byb2MvJWQvc21hcHNfcm9sbHVwJiMzNDssIHNlbGYtJmd0O3BpZCk7CiYjNDM7CQlzZWxmLSZndDtyb2xsdXBfZmQgPSBvcGVuKHJvbGx1cF9mbmFtZSwgT19SRE9OTFkpOwomIzQzOwkJQVNTRVJUX05FKHNlbGYtJmd0O3JvbGx1cF9mZCwgLTEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlrc2Z0X2V4aXRfZmFpbCgpOwpAQCAtNzExLDYgJiM0Mzs4NjIsOCBAQCBGSVhUVVJFX1RFQVJET1dOKHByb2NfbWFwc19yYWNlKQogCWZvciAoaW50IGkgPSAwOyBpICZsdDsgc2VsZi0mZ3Q7dm1hX2NvdW50OyBpJiM0MzsmIzQzOykKIAkJbXVubWFwKHNlbGYtJmd0O21vZF9pbmZvLSZndDtjaGlsZF9tYXBwZWRfYWRkcltpXSwgc2VsZi0mZ3Q7cGFnZV9zaXplKTsKIAljbG9zZShzZWxmLSZndDttYXBzX2ZkKTsKJiM0MzsJaWYgKHNlbGYtJmd0O21hcHNfZmlsZSA9PSBTTUFQUykKJiM0MzsJCWNsb3NlKHNlbGYtJmd0O3JvbGx1cF9mZCk7CiAJd2FpdHBpZChzZWxmLSZndDtwaWQsICZhbXA7c3RhdHVzLCAwKTsKIAltdW5tYXAoc2VsZi0mZ3Q7bW9kX2luZm8sIHNlbGYtJmd0O3NoYXJlZF9tZW1fc2l6ZSk7CiB9CkBAIC03MjMsNiAmIzQzOzg3Niw3IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9zcGxpdCkKIAlzdHJ1Y3QgbGluZV9jb250ZW50IHNwbGl0X2ZpcnN0X2xpbmU7CiAJc3RydWN0IGxpbmVfY29udGVudCByZXN0b3JlZF9sYXN0X2xpbmU7CiAJc3RydWN0IGxpbmVfY29udGVudCByZXN0b3JlZF9maXJzdF9saW5lOwomIzQzOwlzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIG9yaWdfc3RhdHM7CiAKIAl3YWl0X2Zvcl9zdGF0ZShtb2RfaW5mbywgU0VUVVBfUkVBRFkpOwogCkBAIC03MzYsNiAmIzQzOzg5MCw4IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9zcGxpdCkKIAlyZXBvcnRfdGVzdF9zdGFydCgmIzM0O1RlYXJpbmcgZnJvbSBzcGxpdCYjMzQ7LCBzZWxmLSZndDt2ZXJib3NlKTsKIAlBU1NFUlRfVFJVRShjYXB0dXJlX21vZF9wYXR0ZXJuKHNlbGYsICZhbXA7c3BsaXRfbGFzdF9saW5lLCAmYW1wO3NwbGl0X2ZpcnN0X2xpbmUsCiAJCQkJCSZhbXA7cmVzdG9yZWRfbGFzdF9saW5lLCAmYW1wO3Jlc3RvcmVkX2ZpcnN0X2xpbmUpKTsKJiM0MzsJaWYgKHNlbGYtJmd0O21hcHNfZmlsZSA9PSBTTUFQUykKJiM0MzsJCUFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCAmYW1wO29yaWdfc3RhdHMpKTsKIAogCS8qIE5vdyBzdGFydCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZm9yIHNlbGYtJmd0O2R1cmF0aW9uX3NlYyAqLwogCXNpZ25hbF9zdGF0ZShtb2RfaW5mbywgVEVTVF9SRUFEWSk7CkBAIC03OTksNiAmIzQzOzk1NSwxMSBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fc3BsaXQpCiAJCQkJICAgICB2bWFfZW5kID09IHNlbGYtJmd0O2xhc3RfbGluZS5lbmRfYWRkcikgfHwKIAkJCQkgICAgKHZtYV9zdGFydCA9PSBzcGxpdF9maXJzdF9saW5lLnN0YXJ0X2FkZHIgJmFtcDsmYW1wOwogCQkJCSAgICAgdm1hX2VuZCA9PSBzcGxpdF9maXJzdF9saW5lLmVuZF9hZGRyKSk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgc3RhdHM7CiYjNDM7CiYjNDM7CQkJQVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsICZhbXA7c3RhdHMpKTsKJiM0MzsJCQlBU1NFUlRfVFJVRShjb21wYXJlX3NtYXBzX3JvbGx1cChzZWxmLCAmYW1wO29yaWdfc3RhdHMsICZhbXA7c3RhdHMpKTsKIAkJfQogCQljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQ19DT0FSU0UsICZhbXA7ZW5kX3RzKTsKIAkJZW5kX3Rlc3RfaXRlcmF0aW9uKCZhbXA7ZW5kX3RzLCBzZWxmLSZndDt2ZXJib3NlKTsKQEAgLTgxNyw2ICYjNDM7OTc4LDcgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3Jlc2l6ZSkKIAlzdHJ1Y3QgbGluZV9jb250ZW50IHNocnVua19maXJzdF9saW5lOwogCXN0cnVjdCBsaW5lX2NvbnRlbnQgcmVzdG9yZWRfbGFzdF9saW5lOwogCXN0cnVjdCBsaW5lX2NvbnRlbnQgcmVzdG9yZWRfZmlyc3RfbGluZTsKJiM0MzsJc3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyBvcmlnX3N0YXRzOwogCiAJd2FpdF9mb3Jfc3RhdGUobW9kX2luZm8sIFNFVFVQX1JFQURZKTsKIApAQCAtODMwLDYgJiM0Mzs5OTIsOCBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fcmVzaXplKQogCXJlcG9ydF90ZXN0X3N0YXJ0KCYjMzQ7VGVhcmluZyBmcm9tIHJlc2l6ZSYjMzQ7LCBzZWxmLSZndDt2ZXJib3NlKTsKIAlBU1NFUlRfVFJVRShjYXB0dXJlX21vZF9wYXR0ZXJuKHNlbGYsICZhbXA7c2hydW5rX2xhc3RfbGluZSwgJmFtcDtzaHJ1bmtfZmlyc3RfbGluZSwKIAkJCQkJJmFtcDtyZXN0b3JlZF9sYXN0X2xpbmUsICZhbXA7cmVzdG9yZWRfZmlyc3RfbGluZSkpOwomIzQzOwlpZiAoc2VsZi0mZ3Q7bWFwc19maWxlID09IFNNQVBTKQomIzQzOwkJQVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsICZhbXA7b3JpZ19zdGF0cykpOwogCiAJLyogTm93IHN0YXJ0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBmb3Igc2VsZi0mZ3Q7ZHVyYXRpb25fc2VjICovCiAJc2lnbmFsX3N0YXRlKG1vZF9pbmZvLCBURVNUX1JFQURZKTsKQEAgLTg4MCw2ICYjNDM7MTA0NCwxMSBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fcmVzaXplKQogCQkJQVNTRVJUX1RSVUUodm1hX3N0YXJ0ID09IHNlbGYtJmd0O2xhc3RfbGluZS5zdGFydF9hZGRyICZhbXA7JmFtcDsKIAkJCQkgICAgKHZtYV9lbmQgLSB2bWFfc3RhcnQgPT0gc2VsZi0mZ3Q7cGFnZV9zaXplICogMyB8fAogCQkJCSAgICAgdm1hX2VuZCAtIHZtYV9zdGFydCA9PSBzZWxmLSZndDtwYWdlX3NpemUpKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJc3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyBzdGF0czsKJiM0MzsKJiM0MzsJCQlBU1NFUlRfVFJVRShwYXJzZV9zbWFwc19yb2xsdXAoc2VsZiwgJmFtcDtzdGF0cykpOwomIzQzOwkJCUFTU0VSVF9UUlVFKGNvbXBhcmVfc21hcHNfcm9sbHVwKHNlbGYsICZhbXA7b3JpZ19zdGF0cywgJmFtcDtzdGF0cykpOwogCQl9CiAJCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDX0NPQVJTRSwgJmFtcDtlbmRfdHMpOwogCQllbmRfdGVzdF9pdGVyYXRpb24oJmFtcDtlbmRfdHMsIHNlbGYtJmd0O3ZlcmJvc2UpOwpAQCAtODk4LDYgJiM0MzsxMDY3LDcgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3JlbWFwKQogCXN0cnVjdCBsaW5lX2NvbnRlbnQgcmVtYXBwZWRfZmlyc3RfbGluZTsKIAlzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2xhc3RfbGluZTsKIAlzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2ZpcnN0X2xpbmU7CiYjNDM7CXN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgb3JpZ19zdGF0czsKIAogCXdhaXRfZm9yX3N0YXRlKG1vZF9pbmZvLCBTRVRVUF9SRUFEWSk7CiAKQEAgLTkxMSw2ICYjNDM7MTA4MSw4IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9yZW1hcCkKIAlyZXBvcnRfdGVzdF9zdGFydCgmIzM0O1RlYXJpbmcgZnJvbSByZW1hcCYjMzQ7LCBzZWxmLSZndDt2ZXJib3NlKTsKIAlBU1NFUlRfVFJVRShjYXB0dXJlX21vZF9wYXR0ZXJuKHNlbGYsICZhbXA7cmVtYXBwZWRfbGFzdF9saW5lLCAmYW1wO3JlbWFwcGVkX2ZpcnN0X2xpbmUsCiAJCQkJCSZhbXA7cmVzdG9yZWRfbGFzdF9saW5lLCAmYW1wO3Jlc3RvcmVkX2ZpcnN0X2xpbmUpKTsKJiM0MzsJaWYgKHNlbGYtJmd0O21hcHNfZmlsZSA9PSBTTUFQUykKJiM0MzsJCUFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCAmYW1wO29yaWdfc3RhdHMpKTsKIAogCS8qIE5vdyBzdGFydCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZm9yIHNlbGYtJmd0O2R1cmF0aW9uX3NlYyAqLwogCXNpZ25hbF9zdGF0ZShtb2RfaW5mbywgVEVTVF9SRUFEWSk7CkBAIC05NjMsNiAmIzQzOzExMzUsMTEgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3JlbWFwKQogCQkJCSAgICAgdm1hX2VuZCAtIHZtYV9zdGFydCA9PSBzZWxmLSZndDtwYWdlX3NpemUgKiAzKSB8fAogCQkJCSAgICAodm1hX3N0YXJ0ID09IHNlbGYtJmd0O2xhc3RfbGluZS5zdGFydF9hZGRyICYjNDM7IHNlbGYtJmd0O3BhZ2Vfc2l6ZSAmYW1wOyZhbXA7CiAJCQkJICAgICB2bWFfZW5kIC0gdm1hX3N0YXJ0ID09IHNlbGYtJmd0O3BhZ2Vfc2l6ZSkpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIHN0YXRzOwomIzQzOwomIzQzOwkJCUFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCAmYW1wO3N0YXRzKSk7CiYjNDM7CQkJQVNTRVJUX1RSVUUoY29tcGFyZV9zbWFwc19yb2xsdXAoc2VsZiwgJmFtcDtvcmlnX3N0YXRzLCAmYW1wO3N0YXRzKSk7CiAJCX0KIAkJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUNfQ09BUlNFLCAmYW1wO2VuZF90cyk7CiAJCWVuZF90ZXN0X2l0ZXJhdGlvbigmYW1wO2VuZF90cywgc2VsZi0mZ3Q7dmVyYm9zZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTc2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IC9wcm9jL3Rhc2tfbW11LmMgYW5kIHNlbGZ0ZXN0cyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIGl0IHRvdWNoZXMgYGZzL3Byb2MvdGFza19tbXUuY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2MtbWFwcy1yYWNlLmNgLCBzbyBsZXQmIzM5O3MgZm9jdXMgb24gdGhlIGtlcm5lbCBzaWRlLCBzcGVjaWZpY2FsbHkgYGZzL3Byb2MvdGFza19tbXUuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBjb250ZXh0LgoKRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZXJlJiMzOTtzIHNvbWUgc2VyaW91cyByZWZhY3RvcmluZyBnb2luZyBvbiB3aXRoIHRoZSBsb2NraW5nIGhlbHBlcnMuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgcmVsYXRlZCB0bzogYGxvY2tfY3R4X21tYCwgYHVubG9ja19jdHhfbW1gLCBgcmVzZXRfbG9ja19jdHhgLCBgdW5sb2NrX2N0eF92bWFgLCBgbG9ja192bWFfcmFuZ2VgLCBgdW5sb2NrX3ZtYV9yYW5nZWAsIGBmYWxsYmFja190b19tbWFwX2xvY2tgLCBgZHJvcF9yY3VgLCBhbmQgYHJlYWNxdWlyZV9yY3VgLiBDbGVhcmx5LCB0aGV5JiMzOTtyZSByZXRoaW5raW5nIGhvdyBsb2NraW5nIGlzIGhhbmRsZWQgaW4gdGhpcyBhcmVhLiBUaGVyZSBhcmUgYWxzbyBjaGFuZ2VzIHRvIHRoZSB2YXJpYWJsZXMgYG1fc3RhcnRgLCBgbV9zdG9wYCwgYW5kIGBkb19wcm9jbWFwX3F1ZXJ5YCwgd2hpY2ggd2FycmFudHMgY2xvc2VyIGV4YW1pbmF0aW9uLgoKU3BlY2lmaWNhbGx5LCBpbiBgc21hcF9nYXRoZXJfc3RhdHNgLCBJIG5vdGljZSBhIGNoYW5nZSB0byBob3cgdGhlIGBzdGFydGAgcGFyYW1ldGVyIGlzIGhhbmRsZWQsIGluY2x1ZGluZyBgaXNfcGFydGlhbCA9IHN0YXJ0ICZndDsgdm1hLSZndDt2bV9zdGFydGAgbG9naWMgYW5kIHRoZSB1c2Ugb2YgYHdhbGtfcGFnZV9yYW5nZV92bWFgIGluc3RlYWQgb2YgYHdhbGtfcGFnZV92bWFgIG9yIGB3YWxrX3BhZ2VfcmFuZ2VgLiBUaGlzIGlzIGxpa2VseSB0byByZWZpbmUgdGhlIHJhbmdlIG9mIG1lbW9yeSBiZWluZyBhbmFseXplZC4KClRoZSBtb3N0IHNpZ25pZmljYW50IGNoYW5nZSwgaG93ZXZlciwgc2VlbXMgdG8gYmUgaW4gYHNob3dfc21hcHNfcm9sbHVwYC4gSXQgYXBwZWFycyB0aGV5JiMzOTtyZSBtb3ZpbmcgYXdheSBmcm9tIGEgc2luZ2xlIGBtbWFwX3JlYWRfbG9ja2AgYXQgdGhlIGJlZ2lubmluZyAoYGxvY2tfY3R4X21tYCkgYW5kIGFyZSBub3cgdXRpbGl6aW5nIGByY3VfcmVhZF9sb2NrKClgIGFsb25nIHdpdGggYHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KWAsIGVtcGxveWluZyBgcHJvY19nZXRfdm1hYCBhbmQgcGVyLVZNQSBsb2NraW5nIChWTUEgbG9ja3MpIHVuZGVyIFJDVS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGV5IGFyZSBhaW1pbmcgZm9yIGltcHJvdmVkIGNvbmN1cnJlbmN5LCBzaW1pbGFyIHRvIGhvdyBgL3Byb2MvcGlkL3NtYXBzYCBhbmQgYC9wcm9jL3BpZC9tYXBzYCB3b3JrLiBJdCYjMzk7cyBsaWtlbHkgdHJ5aW5nIHRvIHJlZHVjZSBjb250ZW50aW9uIG9uIHRoZSBnbG9iYWwgbW1hcCBsb2NrLCB1c2luZyBSQ1UgZm9yIHJlYWQgb3BlcmF0aW9ucy4gVGhleSYjMzk7dmUgYWxzbyBhY2NvdW50ZWQgZm9yIGhhbmRsaW5nIGNvbnRlbnRpb25zIG9yIGZhbGxiYWNrcyBpZiBgbW1hcF9sb2NrYCBpcyBuZWVkZWQuIEluIGFkZGl0aW9uLCB0aGUgYHNob3dfc21hcGAgZnVuY3Rpb24gbm93IGNhbGxzIGBzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsICZhbXA7bXNzLCB2bWEtJmd0O3ZtX3N0YXJ0KWAgaW5zdGVhZCBvZiBwYXNzaW5nIDAsIHdoaWNoIGFsc28gd2FycmFudHMgaW52ZXN0aWdhdGlvbi4KClRpbWUgdG8gY29uc3VsdCB0aGUgc291cmNlLiBMZXQmIzM5O3MgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSB3aXRoaW4gYGZzL3Byb2MvdGFza19tbXUuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hvd19zbWFwc19yb2xsdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jPTEzMzg9c3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xMzY1LVxuZnMvcHJvYy90YXNrX21tdS5jOjEzNjY6c3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTM2Ny17XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTE0Nzg9c3RhdGljIGludCBzbWFwc19yb2xsdXBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTQ4Ni1cbmZzL3Byb2MvdGFza19tbXUuYzoxNDg3Olx0cmV0ID0gc2luZ2xlX29wZW4oZmlsZSwgc2hvd19zbWFwc19yb2xsdXAsIHByaXYpO1xuZnMvcHJvYy90YXNrX21tdS5jLTE0ODgtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjgxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gYGZzL3Byb2MvdGFza19tbXUuY2AgZm9yIE1lbW9yeSBNYXBwaW5nIERlZXAgRGl2ZXMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgbWVtb3J5IG1hcHBpbmdzLCBzcGVjaWZpY2FsbHkgaG93IHRoZXkmIzM5O3JlIGV4cG9zZWQgdGhyb3VnaCBgL3Byb2MvW3BpZF0vc21hcHNgLiBUaGUgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgbWFkZSBhcm91bmQgYHNob3dfc21hcHNfcm9sbHVwYCBhbmQgc2ltaWxhciBmdW5jdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYGZzL3Byb2MvdGFza19tbXUuY2AgZmlsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGtlcm5lbCBnYXRoZXJzIGFuZCBwcmVzZW50cyBwZXItdGFzayBtZW1vcnkgaW5mb3JtYXRpb24uIFRoYXQgYHNob3dfc21hcHNfcm9sbHVwYCBmdW5jdGlvbiBpcyBhIGtleSBlbnRyeSBwb2ludCwgYW5kIHdoYXRldmVyIHN1cnJvdW5kaW5nIGNvZGUgZ290IHRvdWNoZWQgbGlrZWx5IGhvbGRzIGluc2lnaHRzIGludG8gcmVjZW50IGltcHJvdmVtZW50cywgYnVnIGZpeGVzLCBvciBuZXcgZmVhdHVyZXMgaW4gdGhlIHZpcnR1YWwgbWVtb3J5IHJlcG9ydGluZy4gSSB3YW50IHRvIGNoZWNrIGhvdyB0aGV5IGFyZSBnZXR0aW5nIHRoZSB0b3RhbCBvZiB0aGUgcHJpdmF0ZSwgc2hhcmVkLCBzd2FwcGVkLCBldGMgbWVtb3J5IGluZm8uIEkmIzM5O20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgdGhlIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgcGFnZSBzaXplcywgTlVNQSBjb25maWd1cmF0aW9ucywgYW5kIHBlcmhhcHMgZXZlbiBtZW1vcnktdGllcmluZyB0ZWNobm9sb2dpZXMgaWYgdGhleSBhcmUgZXhwb3NlZCBpbiB0aGUgYHNtYXBzYCBvdXRwdXQuIEkgYW50aWNpcGF0ZSBzb21lIGludGVyZXN0aW5nIHVzZXMgb2YgYHB0ZWBzIGFuZCBgcG1kYHMuIFRpbWUgdG8gZGlnIGluIGFuZCBnZXQgYSBncmlwIG9uIHRob3NlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzYwOlx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7UHJvdGVjdGlvbktleTogICU4dVxcblwmIzM0Oywgdm1hX3BrZXkodm1hKSk7XG4xMzYxOlx0XHRzaG93X3NtYXBfdm1hX2ZsYWdzKG0sIHZtYSk7XG4xMzYyOlx0XG4xMzYzOlx0XHRyZXR1cm4gMDtcbjEzNjQ6XHR9XG4xMzY1Olx0XG4xMzY2Olx0c3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4xMzY3Olx0e1xuMTM2ODpcdFx0c3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2ID0gbS1cdTAwM2Vwcml2YXRlO1xuMTM2OTpcdFx0c3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHggPSBcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4O1xuMTM3MDpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBsb2NrX2N0eC1cdTAwM2VtbTtcbjEzNzE6XHRcdHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyBtc3MgPSB7fTtcbjEzNzI6XHRcdHVuc2lnbmVkIGxvbmcgbGFzdF92bWFfZW5kID0gMDtcbjEzNzM6XHRcdHVuc2lnbmVkIGxvbmcgdm1hX3N0YXJ0ID0gMDtcbjEzNzQ6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuMTM3NTpcdFx0bG9mZl90IHBvcyA9IDA7XG4xMzc2Olx0XHRpbnQgcmV0ID0gMDtcbjEzNzc6XHRcbjEzNzg6XHRcdHByaXYtXHUwMDNldGFzayA9IGdldF9wcm9jX3Rhc2socHJpdi1cdTAwM2Vpbm9kZSk7XG4xMzc5Olx0XHRpZiAoIXByaXYtXHUwMDNldGFzaylcbjEzODA6XHRcdFx0cmV0dXJuIC1FU1JDSDtcbjEzODE6XHRcbjEzODI6XHRcdGlmICghbW0gfHwgIW1tZ2V0X25vdF96ZXJvKG1tKSkge1xuMTM4MzpcdFx0XHRyZXQgPSAtRVNSQ0g7XG4xMzg0Olx0XHRcdGdvdG8gb3V0X3B1dF90YXNrO1xuMTM4NTpcdFx0fVxuMTM4NjpcdFxuMTM4NzpcdFx0aG9sZF90YXNrX21lbXBvbGljeShwcml2KTtcbjEzODg6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjEzODk6XHRcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcbjEzOTA6XHRcbjEzOTE6XHRcdHZtYV9pdGVyX2luaXQoXHUwMDI2cHJpdi1cdTAwM2VpdGVyLCBtbSwgMCk7XG4xMzkyOlx0XHR2bWEgPSBwcm9jX2dldF92bWEobSwgXHUwMDI2cG9zKTtcbjEzOTM6XHRcdGlmICh1bmxpa2VseSghdm1hKSlcbjEzOTQ6XHRcdFx0Z290byBlbXB0eV9zZXQ7XG4xMzk1Olx0XG4xMzk2Olx0XHRpZiAoIUlTX0VSUih2bWEpIFx1MDAyNlx1MDAyNiB2bWEgIT0gZ2V0X2dhdGVfdm1hKGxvY2tfY3R4LVx1MDAzZW1tKSlcbjEzOTc6XHRcdFx0dm1hX3N0YXJ0ID0gdm1hLVx1MDAzZXZtX3N0YXJ0O1xuMTM5ODpcdFxuMTM5OTpcdFx0d2hpbGUgKHZtYSkge1xuMTQwMDpcdFx0XHRpZiAoSVNfRVJSKHZtYSkpIHtcbjE0MDE6XHRcdFx0XHRyZXQgPSBQVFJfRVJSKHZtYSk7XG4xNDAyOlx0XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTQwMzpcdFx0XHR9XG4xNDA0Olx0XG4xNDA1Olx0XHRcdGlmICh2bWEgPT0gZ2V0X2dhdGVfdm1hKGxvY2tfY3R4LVx1MDAzZW1tKSlcbjE0MDY6XHRcdFx0XHRicmVhaztcbjE0MDc6XHRcbjE0MDg6XHRcdFx0LypcbjE0MDk6XHRcdFx0ICogSWYgYWZ0ZXIgcmV0YWtpbmcgdGhlIGxvY2ssIGFscmVhZHkgcmVwb3J0ZWQgVk1BIGdyZXcgb3JcbjE0MTA6XHRcdFx0ICogbWVyZ2VkIHdpdGggdGhlIG5leHQgb25lLCBzbWFwX2dhdGhlcl9zdGF0cygpIHdpbGwgZ2F0aGVyXG4xNDExOlx0XHRcdCAqIHN0YXRzIGZvciB0aGUgcmVtYWluaW5nIHBvcnRpb24gYnkgc3RhcnRpbmcgYXQgbGFzdF92bWFfZW5kLlxuMTQxMjpcdFx0XHQgKi9cbjE0MTM6XHRcdFx0c21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCBcdTAwMjZtc3MsIGxhc3Rfdm1hX2VuZCk7XG4xNDE0Olx0XHRcdGxhc3Rfdm1hX2VuZCA9IHZtYS1cdTAwM2V2bV9lbmQ7XG4xNDE1Olx0XG4xNDE2Olx0XHRcdC8qXG4xNDE3Olx0XHRcdCAqIElmIHRoZSBWTUEgbG9jayBpcyBub3QgdGFrZW4sIHdlIGhvbGQgdGhlIG9mdGVuIGNvbnRlbmRlZFxuMTQxODpcdFx0XHQgKiBtbWFwIGxvY2suIFRoaXMgY2FuIGhhcHBlbiBpZiB3ZSBoYWQgdG8gZmFsbCBiYWNrIHRvIHRoZVxuMTQxOTpcdFx0XHQgKiBtbWFwIGxvY2suXG4xNDIwOlx0XHRcdCAqXG4xNDIxOlx0XHRcdCAqIFRvIHJlbGlldmUgcHJlc3N1cmUsIGNoZWNrIGlmIGl0IGlzIGluZGVlZCBjb250ZW5kZWQsIHRoZW5cbjE0MjI6XHRcdFx0ICogdGVtcG9yYXJpbHkgcmVsZWFzZSBpdC5cbjE0MjM6XHRcdFx0ICovXG4xNDI0Olx0XHRcdGlmIChsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZCBcdTAwMjZcdTAwMjZcbjE0MjU6XHRcdFx0ICAgIG1tYXBfbG9ja19pc19jb250ZW5kZWQobG9ja19jdHgtXHUwMDNlbW0pKSB7XG4xNDI2Olx0XHRcdFx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XG4xNDI3Olx0XHRcdFx0LypcbjE0Mjg6XHRcdFx0XHQgKiBFdmVuIHRob3VnaCB3ZSBwcmV2aW91c2x5IGZlbGwgYmFjayB0byBtbWFwIGxvY2ssXG4xNDI5Olx0XHRcdFx0ICogd2UgdHJ5IHRha2luZyBWTUEgbG9jayBmb3IgdGhlIG5leHQgVk1BLCBzaW5jZSBpdFxuMTQzMDpcdFx0XHRcdCAqIG1pZ2h0IG5vdCBiZSB1bmRlciBtb2RpZmljYXRpb24uIEluIHRoZSB3b3JzdCBjYXNlXG4xNDMxOlx0XHRcdFx0ICogd2Ugd2lsbCBmYWxsIGJhY2sgdG8gbW1hcCBsb2NrIGFnYWluLlxuMTQzMjpcdFx0XHRcdCAqL1xuMTQzMzpcdFx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbjE0MzQ6XHRcdFx0XHRyZXNldF9sb2NrX2N0eChsb2NrX2N0eCk7XG4xNDM1Olx0XHRcdFx0LyogUmVzdW1lIGZyb20gdGhlIGxhc3QgcG9zaXRpb24uICovXG4xNDM2Olx0XHRcdFx0cG9zID0gbGFzdF92bWFfZW5kO1xuMTQzNzpcdFx0XHRcdHZtYV9pdGVyX2luaXQoXHUwMDI2cHJpdi1cdTAwM2VpdGVyLCBtbSwgcG9zKTtcbjE0Mzg6XHRcdFx0fVxuMTQzOTpcdFx0XHR2bWEgPSBwcm9jX2dldF92bWEobSwgXHUwMDI2cG9zKTtcbjE0NDA6XHRcdH1cbjE0NDE6XHRcbjE0NDI6XHRlbXB0eV9zZXQ6XG4xNDQzOlx0XHRzaG93X3ZtYV9oZWFkZXJfcHJlZml4KG0sIHZtYV9zdGFydCwgbGFzdF92bWFfZW5kLCAwLCAwLCAwLCAwKTtcbjE0NDQ6XHRcdHNlcV9wYWQobSwgJiMzOTsgJiMzOTspO1xuMTQ0NTpcdFx0c2VxX3B1dHMobSwgXCYjMzQ7W3JvbGx1cF1cXG5cJiMzNDspO1xuMTQ0NjpcdFxuMTQ0NzpcdFx0X19zaG93X3NtYXAobSwgXHUwMDI2bXNzLCB0cnVlKTtcbjE0NDg6XHRcbjE0NDk6XHRvdXRfdW5sb2NrOlxuMTQ1MDpcdFx0aWYgKGxvY2tfY3R4LVx1MDAzZW1tYXBfbG9ja2VkKSB7XG4xNDUxOlx0XHRcdHVubG9ja19jdHhfbW0obG9ja19jdHgpO1xuMTQ1MjpcdFx0fSBlbHNlIHtcbjE0NTM6XHRcdFx0dW5sb2NrX2N0eF92bWEobG9ja19jdHgpO1xuMTQ1NDpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjE0NTU6XHRcdH1cbjE0NTY6XHRcdHJlbGVhc2VfdGFza19tZW1wb2xpY3kocHJpdik7XG4xNDU3Olx0XHRtbXB1dChtbSk7XG4xNDU4Olx0b3V0X3B1dF90YXNrOlxuMTQ1OTpcdFx0cHV0X3Rhc2tfc3RydWN0KHByaXYtXHUwMDNldGFzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxNTIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgRnVydGhlciBNb2RpZmljYXRpb25zIGluIGBmcy9wcm9jL3Rhc2tfbW11LmNgKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBhZGRyZXNzZWQgdGhlIHByaW1hcnkgaXNzdWUsIGJ1dCB3ZSBuZWVkIHRvIGVuc3VyZSB3ZSBoYXZlbiYjMzk7dCBpbnRyb2R1Y2VkIGFueSB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBvciBtaXNzZWQgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMuIE15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdlcmUgdG91Y2hlZCB3aXRoaW4gYGZzL3Byb2MvdGFza19tbXUuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIHNlY3Rpb25zIGJldHdlZW4gbGluZXMgMTIwIGFuZCAzNTAsIGFzIHdlbGwgYXMgbGluZXMgNjAwIHRocm91Z2ggNzUwLiBUaGlzIGlzIHdoZXJlIHRoZSBjb2RlIGNoYW5nZXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhcmUgbGlrZWx5IHRvIGJlIG1vc3QgY29uY2VudHJhdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgbmF0dXJlIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMgYW5kIGhvdyB0aGV5IHBvdGVudGlhbGx5IGltcGFjdCB0aGUgb3ZlcmFsbCBzdGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIG9yIGRldmlhdGlvbnMgZnJvbSBleHBlY3RlZCBiZWhhdmlvci4gVGhpcyBpcyBjcnVjaWFsIGZvciBhIGNvbXBsZXRlIGFuZCByb2J1c3QgYXNzZXNzbWVudCBvZiB0aGUgY2hhbmdlcy4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTMwOlx0fVxuIDEzMTpcdCNlbmRpZlxuIDEzMjpcdFxuIDEzMzpcdHN0YXRpYyB2b2lkIHVubG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4gMTM0Olx0e1xuIDEzNTpcdFx0bW1hcF9yZWFkX3VubG9jayhsb2NrX2N0eC1cdTAwM2VtbSk7XG4gMTM2Olx0XHRsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZCA9IGZhbHNlO1xuIDEzNzpcdH1cbiAxMzg6XHRcbiAxMzk6XHRzdGF0aWMgdm9pZCB1bmxvY2tfY3R4X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbiAxNDA6XHR7XG4gMTQxOlx0XHRpZiAobG9ja19jdHgtXHUwMDNlbG9ja2VkX3ZtYSkge1xuIDE0MjpcdFx0XHR2bWFfZW5kX3JlYWQobG9ja19jdHgtXHUwMDNlbG9ja2VkX3ZtYSk7XG4gMTQzOlx0XHRcdGxvY2tfY3R4LVx1MDAzZWxvY2tlZF92bWEgPSBOVUxMO1xuIDE0NDpcdFx0fVxuIDE0NTpcdH1cbiAxNDY6XHRcbiAxNDc6XHRzdGF0aWMgdm9pZCByZXNldF9sb2NrX2N0eChzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbiAxNDg6XHR7XG4gMTQ5Olx0XHRsb2NrX2N0eC1cdTAwM2Vsb2NrZWRfdm1hID0gTlVMTDtcbiAxNTA6XHRcdGxvY2tfY3R4LVx1MDAzZW1tYXBfbG9ja2VkID0gZmFsc2U7XG4gMTUxOlx0fVxuIDE1MjpcdFxuIDE1MzpcdHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmdldF9uZXh0X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXG4gMTU0Olx0XHRcdFx0XHRcdCAgIGxvZmZfdCBsYXN0X3BvcylcbiAxNTU6XHR7XG4gMTU2Olx0XHRzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCA9IFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHg7XG4gMTU3Olx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiAxNTg6XHRcbiAxNTk6XHRcdGlmIChsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZClcbiAxNjA6XHRcdFx0cmV0dXJuIHZtYV9uZXh0KFx1MDAyNnByaXYtXHUwMDNlaXRlcik7XG4gMTYxOlx0XG4gMTYyOlx0XHR1bmxvY2tfY3R4X3ZtYShsb2NrX2N0eCk7XG4gMTYzOlx0XHR2bWEgPSBsb2NrX25leHRfdm1hKGxvY2tfY3R4LVx1MDAzZW1tLCBcdTAwMjZwcml2LVx1MDAzZWl0ZXIsIGxhc3RfcG9zKTtcbiAxNjQ6XHRcdGlmICghSVNfRVJSX09SX05VTEwodm1hKSlcbiAxNjU6XHRcdFx0bG9ja19jdHgtXHUwMDNlbG9ja2VkX3ZtYSA9IHZtYTtcbiAxNjY6XHRcbiAxNjc6XHRcdHJldHVybiB2bWE7XG4gMTY4Olx0fVxuIDE2OTpcdFxuIDE3MDpcdHN0YXRpYyBib29sIGZhbGxiYWNrX3RvX21tYXBfbG9jayhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXG4gMTcxOlx0XHRcdFx0XHRcdCBsb2ZmX3QgcG9zKVxuIDE3MjpcdHtcbiAxNzM6XHRcdHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4ID0gXHUwMDI2cHJpdi1cdTAwM2Vsb2NrX2N0eDtcbiAxNzQ6XHRcbiAxNzU6XHRcdGlmIChsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZClcbiAxNzY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDE3NzpcdFxuIDE3ODpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMTc5Olx0XHRtbWFwX3JlYWRfbG9jayhsb2NrX2N0eC1cdTAwM2VtbSk7XG4gMTgwOlx0XHQvKiBSZWluaXRpYWxpemUgdGhlIGl0ZXJhdG9yIGFmdGVyIHRha2luZyBtbWFwX2xvY2sgKi9cbiAxODE6XHRcdHZtYV9pdGVyX3NldChcdTAwMjZwcml2LVx1MDAzZWl0ZXIsIHBvcyk7XG4gMTgyOlx0XHRsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZCA9IHRydWU7XG4gMTgzOlx0XG4gMTg0Olx0XHRyZXR1cm4gdHJ1ZTtcbiAxODU6XHR9XG4gMTg2Olx0XG4gMTg3Olx0c3RhdGljIHZvaWQgZHJvcF9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuIDE4ODpcdHtcbiAxODk6XHRcdGlmIChwcml2LVx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxuIDE5MDpcdFx0XHRyZXR1cm47XG4gMTkxOlx0XG4gMTkyOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAxOTM6XHR9XG4gMTk0Olx0XG4gMTk1Olx0c3RhdGljIHZvaWQgcmVhY3F1aXJlX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4gMTk2Olx0e1xuIDE5NzpcdFx0aWYgKHByaXYtXHUwMDNlbG9ja19jdHgubW1hcF9sb2NrZWQpXG4gMTk4Olx0XHRcdHJldHVybjtcbiAxOTk6XHRcbiAyMDA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAyMDE6XHRcdC8qIFJlaW5pdGlhbGl6ZSB0aGUgaXRlcmF0b3IuICovXG4gMjAyOlx0XHR2bWFfaXRlcl9zZXQoXHUwMDI2cHJpdi1cdTAwM2VpdGVyLCBwcml2LVx1MDAzZWxvY2tfY3R4LmxvY2tlZF92bWEtXHUwMDNldm1fZW5kKTtcbiAyMDM6XHR9XG4gMjA0Olx0XG4gMjA1Olx0c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJvY19nZXRfdm1hKHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwcG9zKVxuIDIwNjpcdHtcbiAyMDc6XHRcdHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tXHUwMDNlcHJpdmF0ZTtcbiAyMDg6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuIDIwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjA2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgYHRhc2tfbW11LmNgIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYHRhc2tfbW11LmNgIGlzIHRoZSBoZWFydCBvZiB0aGUga2VybmVsJiMzOTtzIGludGVyYWN0aW9uIHdpdGggdGhlIHZpcnR1YWwgbWVtb3J5IHN5c3RlbSB2aWEgcHJvY2ZzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGhhbmRsaW5nIHRoaW5ncyBsaWtlIGAvcHJvYy8mbHQ7cGlkJmd0Oy9tYXBzYCwgYC9wcm9jLyZsdDtwaWQmZ3Q7L3NtYXBzYCwgYW5kIHRoZSBtb3JlIHJlY2VudCBgL3Byb2MvJmx0O3BpZCZndDsvc21hcHNfcm9sbHVwYCwgYC9wcm9jLyZsdDtwaWQmZ3Q7L2NsZWFyX3JlZnNgLCBgL3Byb2MvJmx0O3BpZCZndDsvcGFnZW1hcGAsIGAvcHJvYy8mbHQ7cGlkJmd0Oy9udW1hX21hcHNgLCBhbmQgdGhlIGBQUk9DTUFQX1FVRVJZYCBpb2N0bC4gVGhpcyBzY3JlYW1zICpjb3JlKiBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFZpcnR1YWwgRmlsZSBTeXN0ZW0gKFZGUykgcHJvY2ZzIGNvZGUuCgpUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHM/IFRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcy4gRmlsZXMgbGlrZSBgL3Byb2MvJmx0O3BpZCZndDsvc21hcHNfcm9sbHVwYCwgYC9wcm9jLyZsdDtwaWQmZ3Q7L3NtYXBzYCwgYW5kIGAvcHJvYy8mbHQ7cGlkJmd0Oy9tYXBzYCBhcmUgY29tcGxldGVseSBzdGFuZGFyZCBwcm9jZnMgZW50cmllcyB0aGF0IHVzZXJzcGFjZSB0b29scyByZWd1bGFybHkgdXNlLiBUaGlzIGluc3RhbnRseSBmbGFncyBpdCBhcyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZy4KCk5vdywgdGhlIGNvZGUgY2hhbmdlcyBpbiBgc2hvd19zbWFwc19yb2xsdXBgIGFyZSB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIG1vdmVkIGZyb20gZ3JhYmJpbmcgdGhlIGBtbWFwX3JlYWRfbG9ja2AgdXBmcm9udCB0byB1c2luZyBSQ1UtYmFzZWQgcGVyLVZNQSBsb2Nrcy4gVGhpcyBpbnRyb2R1Y2VzIFJDVSBpbnRvIHRoZSBlcXVhdGlvbiwgd2hpY2ggY2FuIGFsd2F5cyBsZWFkIHRvIGludGVyZXN0aW5nIGNvbmN1cnJlbmN5IGJ1Z3MuIFRoZXkmIzM5O3JlIHVzaW5nIGBwcm9jX2dldF92bWFgLCBgdm1hX2VuZF9yZWFkYCwgYHNtYXBfZ2F0aGVyX3N0YXRzYCwgZHJvcHBpbmcgYW5kIHJldGFraW5nIFJDVS9tbWFwIGxvY2sgb24gY29udGVudGlvbiwgZXRjLiBUaGUgbG9ja2luZyBzdHJhdGVneSBoYXMgc2lnbmlmaWNhbnRseSBjaGFuZ2VkLgoKRnVydGhlcm1vcmUsIGBzbWFwX2dhdGhlcl9zdGF0c2AgaXMgYWx0ZXJpbmcgYHdhbGtfcGFnZV9yYW5nZV92bWFgIGFuZCBzdGFydCBib3VuZCBoYW5kbGluZy4gV2UgYWxzbyBzZWUgYWRqdXN0bWVudHMgdG8gYGRvX3Byb2NtYXBfcXVlcnlgIGxvY2tpbmcgaGVscGVycywgYWxvbmcgd2l0aCB1bi1pbmxpbmluZyBvZiBzZXZlcmFsIHN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgcHRlX2lzX3Bpbm5lZGAsIGBjbGVhcl9zb2Z0X2RpcnR5YCwgZXRjLgoKVGhlIGNyaXRpY2FsIHRha2Vhd2F5IGlzIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgdG91Y2hpbmcgKnJlYWNoYWJsZSogY29yZSBleGVjdXRhYmxlIGNvZGUgaW4gbW0vcHJvY2ZzIGFuZCBtb2RpZnlpbmcgZnVuZGFtZW50YWwgc3luY2hyb25pemF0aW9uIGFuZCBsb2NraW5nIGFzIHdlbGwgYXMgaXRlcmF0aW9uIGxvZ2ljIHdpdGhpbiBgc2hvd19zbWFwc19yb2xsdXBgIGFuZCBgc21hcF9nYXRoZXJfc3RhdHNgLiBUaGlzIGlzIGEgY2xhc3NpYyByZWNpcGUgZm9yIGludHJvZHVjaW5nIHN1YnRsZSBjb25jdXJyZW5jeSB2dWxuZXJhYmlsaXRpZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gYnVncy4gVGhlcmVmb3JlLCB3aXRob3V0IGEgZG91YnQ6IGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCk15IG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgYW55IGRlcGVuZGVuY2llczogSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMuIERvZXMgYHNtYXBzX3JvbGx1cGAgaGF2ZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXM/IEkmIzM5O2xsIGNoZWNrIEtjb25maWcgZm9yIGBQUk9DX1BBR0VfTU9OSVRPUmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtYXBzX3JvbGx1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvYmFzZS5jPTMyODM9c3RhdGljIGNvbnN0IHN0cnVjdCBwaWRfZW50cnkgdGdpZF9iYXNlX3N0dWZmW10gPSB7XG4tLVxuZnMvcHJvYy9iYXNlLmMtMzMyNC1cdFJFRyhcJiMzNDtzbWFwc1wmIzM0OywgICAgICBTX0lSVUdPLCBwcm9jX3BpZF9zbWFwc19vcGVyYXRpb25zKSxcbmZzL3Byb2MvYmFzZS5jOjMzMjU6XHRSRUcoXCYjMzQ7c21hcHNfcm9sbHVwXCYjMzQ7LCBTX0lSVUdPLCBwcm9jX3BpZF9zbWFwc19yb2xsdXBfb3BlcmF0aW9ucyksXG5mcy9wcm9jL2Jhc2UuYy0zMzI2LVx0UkVHKFwmIzM0O3BhZ2VtYXBcJiMzNDssICAgIFNfSVJVU1IsIHByb2NfcGFnZW1hcF9vcGVyYXRpb25zKSxcbi0tXG5mcy9wcm9jL2Jhc2UuYz0zNjQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlkX2VudHJ5IHRpZF9iYXNlX3N0dWZmW10gPSB7XG4tLVxuZnMvcHJvYy9iYXNlLmMtMzY3OS1cdFJFRyhcJiMzNDtzbWFwc1wmIzM0OywgICAgIFNfSVJVR08sIHByb2NfcGlkX3NtYXBzX29wZXJhdGlvbnMpLFxuZnMvcHJvYy9iYXNlLmM6MzY4MDpcdFJFRyhcJiMzNDtzbWFwc19yb2xsdXBcJiMzNDssIFNfSVJVR08sIHByb2NfcGlkX3NtYXBzX3JvbGx1cF9vcGVyYXRpb25zKSxcbmZzL3Byb2MvYmFzZS5jLTM2ODEtXHRSRUcoXCYjMzQ7cGFnZW1hcFwmIzM0OywgICAgU19JUlVTUiwgcHJvY19wYWdlbWFwX29wZXJhdGlvbnMpLFxuLS1cbmZzL3Byb2MvaW50ZXJuYWwuaD00MDc9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19waWRfc21hcHNfb3BlcmF0aW9ucztcbmZzL3Byb2MvaW50ZXJuYWwuaDo0MDg6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19waWRfc21hcHNfcm9sbHVwX29wZXJhdGlvbnM7XG5mcy9wcm9jL2ludGVybmFsLmgtNDA5LWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2xlYXJfcmVmc19vcGVyYXRpb25zO1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYz0xMjUwPXN0YXRpYyB2b2lkIHNtYXBfZ2F0aGVyX3N0YXRzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTI5Ni1cbmZzL3Byb2MvdGFza19tbXUuYzoxMjk3Oi8qIFNob3cgdGhlIGNvbnRlbnRzIGNvbW1vbiBmb3Igc21hcHMgYW5kIHNtYXBzX3JvbGx1cCAqL1xuZnMvcHJvYy90YXNrX21tdS5jLTEyOTgtc3RhdGljIHZvaWQgX19zaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCBjb25zdCBzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgKm1zcyxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTMwNS1cdFx0LypcbmZzL3Byb2MvdGFza19tbXUuYzoxMzA2Olx0XHQgKiBUaGVzZSBhcmUgbWVhbmluZ2Z1bCBvbmx5IGZvciBzbWFwc19yb2xsdXAsIG90aGVyd2lzZSB0d28gb2ZcbmZzL3Byb2MvdGFza19tbXUuYy0xMzA3LVx0XHQgKiB0aGVtIGFyZSB6ZXJvLCBhbmQgdGhlIG90aGVyIG9uZSBpcyB0aGUgc2FtZSBhcyBQc3MuXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTEzMzg9c3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xMzY1LVxuZnMvcHJvYy90YXNrX21tdS5jOjEzNjY6c3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTM2Ny17XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTE0NzM9c3RhdGljIGludCBwaWRfc21hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTQ3Ny1cbmZzL3Byb2MvdGFza19tbXUuYzoxNDc4OnN0YXRpYyBpbnQgc21hcHNfcm9sbHVwX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTQ3OS17XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTE0ODYtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTQ4NzpcdHJldCA9IHNpbmdsZV9vcGVuKGZpbGUsIHNob3dfc21hcHNfcm9sbHVwLCBwcml2KTtcbmZzL3Byb2MvdGFza19tbXUuYy0xNDg4LVx0aWYgKHJldClcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTUwNi1cbmZzL3Byb2MvdGFza19tbXUuYzoxNTA3OnN0YXRpYyBpbnQgc21hcHNfcm9sbHVwX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTUwOC17XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTE1MTk9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BpZF9zbWFwc19vcGVyYXRpb25zID0ge1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xNTI1LVxuZnMvcHJvYy90YXNrX21tdS5jOjE1MjY6Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BpZF9zbWFwc19yb2xsdXBfb3BlcmF0aW9ucyA9IHtcbmZzL3Byb2MvdGFza19tbXUuYzoxNTI3Olx0Lm9wZW5cdFx0PSBzbWFwc19yb2xsdXBfb3BlbixcbmZzL3Byb2MvdGFza19tbXUuYy0xNTI4LVx0LnJlYWRcdFx0PSBzZXFfcmVhZCxcbmZzL3Byb2MvdGFza19tbXUuYy0xNTI5LVx0Lmxsc2Vla1x0XHQ9IHNlcV9sc2VlayxcbmZzL3Byb2MvdGFza19tbXUuYzoxNTMwOlx0LnJlbGVhc2VcdD0gc21hcHNfcm9sbHVwX3JlbGVhc2UsXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTUzMS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc0NAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIFRhc2sgTU1VIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBpbGF0aW9uIGNvbmRpdGlvbnMgZm9yIGB0YXNrX21tdS5jYC4gVGhlIG1vc3QgZGlyZWN0IHJvdXRlIHRvIHRoYXQgaW5mb3JtYXRpb24gaXMsIG9mIGNvdXJzZSwgdGhlIGBmcy9wcm9jL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBsYXlzIG91dCB0aGUgcnVsZXMgZm9yIHdoaWNoIHNvdXJjZSBmaWxlcyBnZXQgY29tcGlsZWQgYW5kIGxpbmtlZCwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgYmFzZWQgb24gdGhlIHVzdWFsIHN1c3BlY3RzIOKAkyB0aG9zZSBgQ09ORklHX2Agb3B0aW9ucyB0aGF0IGdvdmVybiB2YXJpb3VzIGtlcm5lbCBmZWF0dXJlcy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgcHJlY2lzZSBjb25maWd1cmF0aW9uIGtub2JzIHRoYXQgZW5hYmxlIG9yIGRpc2FibGUgdGhlIGluY2x1c2lvbiBvZiBgdGFza19tbXUuY2AgaW4gdGhlIGZpbmFsIGJ1aWxkLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hlbiBhbmQgd2h5IHRoZSBrZXJuZWwgaW5jb3Jwb3JhdGVzIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGFza19tbXUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL01ha2VmaWxlPTY9b2JqLXkgICAmIzQzOz0gcHJvYy5vXG5mcy9wcm9jL01ha2VmaWxlLTctXG5mcy9wcm9jL01ha2VmaWxlOjg6Q0ZMQUdTX3Rhc2tfbW11Lm9cdCYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXRcbmZzL3Byb2MvTWFrZWZpbGUtOS1wcm9jLXlcdFx0XHQ6PSBub21tdS5vIHRhc2tfbm9tbXUub1xuZnMvcHJvYy9NYWtlZmlsZToxMDpwcm9jLSQoQ09ORklHX01NVSlcdDo9IHRhc2tfbW11Lm9cbmZzL3Byb2MvTWFrZWZpbGUtMTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTA0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIGEgY291cGxlIG9mIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYmVmb3JlIEkgcHJvY2VlZC4gTGV0IG1lIHN0YXJ0IGJ5IGNoZWNraW5nIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGFuZCBgQ09ORklHX1BST0NfRlNgLiBUaGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aG9zZSB3b3VsZCBiZSB3aXRoaW4gYGZzL3Byb2MvS2NvbmZpZ2AuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLCBhbmQgbWFrZSBzdXJlIHRoYXQgdGhleSBhcmUgY29ycmVjdGx5IGVuYWJsZWQgaW4gbXkgY3VycmVudCBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBmbGFncyBhbmQgaG93IHRoZXkgYXJlIHVzZWQgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHByb2MgZmlsZXN5c3RlbS4gSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQsIHNpbmNlIHRoaXMgZGlyZWN0bHkgaW1wYWN0cyB0aGUgYXZhaWxhYmlsaXR5IG9mIHZhcmlvdXMgbWV0cmljcyBhbmQgZGVidWcgY2FwYWJpbGl0aWVzIGluIHRoZSBwcm9jIGZpbGVzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BST0NfUEFHRV9NT05JVE9SJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvS2NvbmZpZz04Mz1jb25maWcgU1lTQ1RMXG4tLVxuZnMvcHJvYy9LY29uZmlnLTEwMC1cbmZzL3Byb2MvS2NvbmZpZzoxMDE6Y29uZmlnIFBST0NfUEFHRV9NT05JVE9SXG5mcy9wcm9jL0tjb25maWctMTAyLSBcdGRlZmF1bHQgeVxuLS1cbmZzL3Byb2MvTWFrZWZpbGU9MzY9cHJvYy0kKENPTkZJR19QUklOVEspXHQmIzQzOz0ga21zZy5vXG5mcy9wcm9jL01ha2VmaWxlOjM3OnByb2MtJChDT05GSUdfUFJPQ19QQUdFX01PTklUT1IpXHQmIzQzOz0gcGFnZS5vXG5mcy9wcm9jL01ha2VmaWxlLTM4LXByb2MtJChDT05GSUdfQk9PVF9DT05GSUcpXHQmIzQzOz0gYm9vdGNvbmZpZy5vXG4tLVxuZnMvcHJvYy9iYXNlLmM9MzI4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0Z2lkX2Jhc2Vfc3R1ZmZbXSA9IHtcbi0tXG5mcy9wcm9jL2Jhc2UuYy0zMzIxLVx0UkVHKFwmIzM0O21vdW50c3RhdHNcJiMzNDssIFNfSVJVU1IsIHByb2NfbW91bnRzdGF0c19vcGVyYXRpb25zKSxcbmZzL3Byb2MvYmFzZS5jOjMzMjI6I2lmZGVmIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUlxuZnMvcHJvYy9iYXNlLmMtMzMyMy1cdFJFRyhcJiMzNDtjbGVhcl9yZWZzXCYjMzQ7LCBTX0lXVVNSLCBwcm9jX2NsZWFyX3JlZnNfb3BlcmF0aW9ucyksXG4tLVxuZnMvcHJvYy9iYXNlLmM9MzY0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0aWRfYmFzZV9zdHVmZltdID0ge1xuLS1cbmZzL3Byb2MvYmFzZS5jLTM2NzYtXHRSRUcoXCYjMzQ7bW91bnRpbmZvXCYjMzQ7LCAgU19JUlVHTywgcHJvY19tb3VudGluZm9fb3BlcmF0aW9ucyksXG5mcy9wcm9jL2Jhc2UuYzozNjc3OiNpZmRlZiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JcbmZzL3Byb2MvYmFzZS5jLTM2NzgtXHRSRUcoXCYjMzQ7Y2xlYXJfcmVmc1wmIzM0OywgU19JV1VTUiwgcHJvY19jbGVhcl9yZWZzX29wZXJhdGlvbnMpLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYz03NTY9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BpZF9tYXBzX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTc4My1cbmZzL3Byb2MvdGFza19tbXUuYzo3ODQ6I2lmZGVmIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUlxuZnMvcHJvYy90YXNrX21tdS5jLTc4NS1zdHJ1Y3QgbWVtX3NpemVfc3RhdHMge1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYz0zMTcwPWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19wYWdlbWFwX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMxNzctfTtcbmZzL3Byb2MvdGFza19tbXUuYzozMTc4OiNlbmRpZiAvKiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgKi9cbmZzL3Byb2MvdGFza19tbXUuYy0zMTc5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDkyOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIEtjb25maWcgQ29uZmlndXJhdGlvbiBmb3IgQ29udGV4dCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgZmlsZSBzeXN0ZW0mIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCBwcm9jZXNzZXMsIHJpZ2h0PyBUaGUgYGZzL3Byb2NgIHBhcnQgYWxyZWFkeSBnaXZlcyBtZSBhIHByZXR0eSBnb29kIGhpbnQgdGhhdCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgYC9wcm9jYCBmaWxlc3lzdGVtIGFuZCBpdHMga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGluc3RpbmN0IHNheXMgYSBwb3RlbnRpYWwgaXNzdWUgY291bGQgYmUgcmVsYXRlZCB0byBzb21lIGNvbnRyb2wgb3IgZmVhdHVyZSB3aGljaCBpcyBub3QgZXhwb3NlZCB0aGUgc3RhbmRhcmQgd2F5LCBhbmQgaXMgZXhwb3NlZCwgaW5zdGVhZCwgYnkgYSBoaWRkZW4gY29uZmlndXJhdGlvbiBvcHRpb24uIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBmcy9wcm9jL0tjb25maWdgIG5lYXIgbGluZSAxMDAuIEdvaW5nIGRpcmVjdGx5IHRvIHRoYXQgbG9jYXRpb24sIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjb25kaXRpb25hbCBkZWZpbml0aW9uIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmljIGZlYXR1cmUgSSYjMzk7bSB0aGlua2luZyBhYm91dCwgb3IgcGVyaGFwcyBzb21lIHN1cnJvdW5kaW5nIGNvbnRleHQgdGhhdCBwcm92aWRlcyBjbHVlcy4gSSBtaWdodCBiZSBsb29raW5nIGZvciBhIGRlcGVuZGVuY3kgdGhhdCBJJiMzOTttIG1pc3NpbmcsIGEgcG90ZW50aWFsbHkgZGlzYWJsZWQgb3B0aW9uLCBvciBhIGdlbmVyYWwgYXJlYSBvZiBjb25jZXJuIHdpdGhpbiB0aGUgcHJvYyBmaWxlc3lzdGVtIHRoYXQgbGluZXMgdXAgd2l0aCB0aGUgY3VycmVudCBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSB0ZWxscyB1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDk1Olx0XHQgIG9wdGlvbiB3aWxsIGVubGFyZ2UgdGhlIGtlcm5lbCBieSBhdCBsZWFzdCA4IEtCLlxuICA5NjpcdFxuICA5NzpcdFx0ICBBcyBpdCBpcyBnZW5lcmFsbHkgYSBnb29kIHRoaW5nLCB5b3Ugc2hvdWxkIHNheSBZIGhlcmUgdW5sZXNzXG4gIDk4Olx0XHQgIGJ1aWxkaW5nIGEga2VybmVsIGZvciBpbnN0YWxsL3Jlc2N1ZSBkaXNrcyBvciB5b3VyIHN5c3RlbSBpcyB2ZXJ5XG4gIDk5Olx0XHQgIGxpbWl0ZWQgaW4gbWVtb3J5LlxuIDEwMDpcdFxuIDEwMTpcdGNvbmZpZyBQUk9DX1BBR0VfTU9OSVRPUlxuIDEwMjpcdCBcdGRlZmF1bHQgeVxuIDEwMzpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTIFx1MDAyNlx1MDAyNiBNTVVcbiAxMDQ6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIC9wcm9jIHBhZ2UgbW9uaXRvcmluZ1wmIzM0OyBpZiBFWFBFUlRcbiAxMDU6XHQgXHRoZWxwXG4gMTA2Olx0XHQgIFZhcmlvdXMgL3Byb2MgZmlsZXMgZXhpc3QgdG8gbW9uaXRvciBwcm9jZXNzIG1lbW9yeSB1dGlsaXphdGlvbjpcbiAxMDc6XHRcdCAgL3Byb2MvcGlkL3NtYXBzLCAvcHJvYy9waWQvY2xlYXJfcmVmcywgL3Byb2MvcGlkL3BhZ2VtYXAsXG4gMTA4Olx0XHQgIC9wcm9jL2twYWdlY291bnQsIGFuZCAvcHJvYy9rcGFnZWZsYWdzLiBEaXNhYmxpbmcgdGhlc2VcbiAxMDk6XHRcdCAgaW50ZXJmYWNlcyB3aWxsIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUga2VybmVsIGJ5IGFwcHJveGltYXRlbHkgNGtiLlxuIDExMDpcdFxuIDExMTpcdGNvbmZpZyBQUk9DX0NISUxEUkVOXG4gMTEyOlx0XHRib29sIFwmIzM0O0luY2x1ZGUgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3Rhc2svXHUwMDNjdGlkXHUwMDNlL2NoaWxkcmVuIGZpbGVcJiMzNDtcbiAxMTM6XHRcdGRlcGVuZHMgb24gUFJPQ19GU1xuIDExNDpcdFx0ZGVmYXVsdCBuXG4gMTE1Olx0XHRoZWxwXG4gMTE2Olx0XHQgIFByb3ZpZGVzIGEgZmFzdCB3YXkgdG8gcmV0cmlldmUgZmlyc3QgbGV2ZWwgY2hpbGRyZW4gcGlkcyBvZiBhIHRhc2suIFNlZVxuIDExNzpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3RcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gMTE4Olx0XG4gMTE5Olx0XHQgIFNheSBZIGlmIHlvdSBhcmUgcnVubmluZyBhbnkgdXNlci1zcGFjZSBzb2Z0d2FyZSB3aGljaCB0YWtlcyBiZW5lZml0IGZyb21cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2MTMKCQkJCQkJCW91dHB1dDogMTYxCgkJCQkJCQl0aG91Z2h0czogNTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGFuZCBpdCBzZWVtcyBsaWtlIGBQUk9DX0ZTYCwgYFBST0NfUEFHRV9NT05JVE9SYCwgYW5kIHBvc3NpYmx5IGBNTVVgIGFyZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBhcmVhIEkmIzM5O20gY29uc2lkZXJpbmcuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuCgpMZXQmIzM5O3MgY2FyZWZ1bGx5IGV4YW1pbmUgYEZvY3VzU3ltYm9sc2AgdG8gY29uZmlybSBteSB0aGlua2luZy4gSXQgbG9va3MgbGlrZSB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIHdpdGhpbiBgZnMvcHJvYy90YXNrX21tdS5jYCBhcmUgd2hhdCBJIG5lZWQgdG8gY29uY2VudHJhdGUgb24uIFNwZWNpZmljYWxseSwgSSBzZWUgY2hhbmdlcyB0bzoKCiogICBgc2hvd19zbWFwc19yb2xsdXBgOiBUaGUgbWFpbiBsb2dpYyBoZXJlIGhhcyBiZWVuIHJlZmFjdG9yZWQsIHNwZWNpZmljYWxseSBpbnZvbHZpbmcgVk1BIGxvY2tzLCBgcHJvY19nZXRfdm1hYCwgYW5kIHBvdGVudGlhbCBjb250ZW50aW9uIHJldHJ5IG1lY2hhbmlzbXMuCiogICBgc21hcF9nYXRoZXJfc3RhdHNgOiBUaGlzIG9uZSBoYXMgc2VlbiBjaGFuZ2VzIHRvIGl0cyBib3VuZHMgY2hlY2ssIHBhcnRpYWwgVk1BIGdhdGhlcmluZywgYW5kIHRoZSBjYWxsIHRvIGB3YWxrX3BhZ2VfcmFuZ2Vfdm1hYC4KKiAgIGBzaG93X3NtYXBgOiBUaGlzIGFjdHMgYXMgYSBjYWxsZXIgdG8gYHNtYXBfZ2F0aGVyX3N0YXRzYCBhbmQgdXNlcyBgdm1hLSZndDt2bV9zdGFydGAuCiogICBgbV9zdGFydGAsIGBtX3N0b3BgOiBTaW1wbGlmaWVkIGxvY2tpbmcgbG9naWMuCiogICBgZG9fcHJvY21hcF9xdWVyeWA6IFRoaXMgaGFzIHNpbXBsaWZpZWQgdGVhcmRvd24vbG9jayBsb2dpYy4KKiAgIFRoZXJlJiMzOTtzIGFsc28gc29tZSBzdXBwb3J0aW5nIGZ1bmN0aW9ucyBzdWNoIGFzIGBmYWxsYmFja190b19tbWFwX2xvY2tgLCBgZHJvcF9yY3VgLCBgcmVhY3F1aXJlX3JjdWAsIGB1bmxvY2tfY3R4X21tYCwgYHVubG9ja19jdHhfdm1hYCwgYHJlc2V0X2xvY2tfY3R4YCwgYGNsZWFyX3NvZnRfZGlydHlgLCBgY2xlYXJfc29mdF9kaXJ0eV9wbWRgLCBgcHRlX2lzX3Bpbm5lZGAgYW5kIGBtYWtlX3BtZWAgKHVuLWlubGluZWQpLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGNob29zZSB0aGUgbGVhc3QgdWJpcXVpdG91cyBmdW5jdGlvbnMgdGhhdCBhcmUgcmVsYXRlZCB0byBzcGVjaWZpYyBmZWF0dXJlcy4gTG9va2luZyBhdCB0aGF0IGxpc3QsIEkmIzM5O20gZmFpcmx5IGNlcnRhaW4gdGhlIGZvbGxvd2luZyBmaXQgdGhlIGJpbGwsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIHBhcnRzIG9mIHRoZSBrZXJuZWwgdXN1YWxseSB3b3JrOgoKKiAgIGBzaG93X3NtYXBzX3JvbGx1cGAKKiAgIGBzbWFwX2dhdGhlcl9zdGF0c2AKKiAgIGBzaG93X3NtYXBgCiogICBgZG9fcHJvY21hcF9xdWVyeWAKCk5vdywgYW0gSSByaWdodD8gQXJlIHRoZXNlIHJlYWxseSBub24tdWJpcXVpdG91cz8gQmluZ28sIHllcyEgVGhlc2UgZnVuY3Rpb25zIGFyZSB2ZXJ5IHNwZWNpZmljIHRvIHRoZSByb3V0aW5lcyB0aGF0IGFyZSBpbnZvbHZlZCBpbiByZWFkaW5nIGAvcHJvYy8mbHQ7cGlkJmd0Oy9zbWFwc19yb2xsdXBgLCBgL3Byb2MvJmx0O3BpZCZndDsvc21hcHNgLCBhbmQgdGhlIGBQUk9DTUFQX1FVRVJZYCBpb2N0bC4KClNvLCBsZXQgbWUgcmV2aWV3IGV2ZXJ5dGhpbmcgdG8gbWFrZSBzdXJlIEkmIzM5O20gc29saWQ6CgoqICAgKipXb3J0aEZ1enppbmcqKjogRGVmaW5pdGVseSB0cnVlLiBXZSBoYXZlIHJlZmFjdG9yZWQgYW5kIG1vZGlmaWVkIGNvZGUgd2l0aGluIGBtbS9wcm9jZnNgLCBhbmQgd2UgYXJlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBjaGFuZ2VzIGluIGBzaG93X3NtYXBzX3JvbGx1cGAgYW5kIFZNQSB3YWxraW5nIGluIGBzbWFwX2dhdGhlcl9zdGF0c2AuIFRoZXNlIGFyZSBwZXJmZWN0LgoqICAgKipFbmFibGVDb25maWdzKio6IEkmIzM5O20gZ29pbmcgd2l0aCBgWyYjMzQ7UFJPQ19GUyYjMzQ7LCAmIzM0O1BST0NfUEFHRV9NT05JVE9SJiMzNDtdYCBoZXJlLiBgTU1VYCBtaWdodCBiZSByZXF1aXJlZCwgYnV0IHRoZXNlIHR3byBhcmUgcHJldHR5IHN0YW5kYXJkLgoqICAgKipGb2N1c1N5bWJvbHMqKjogYFsmIzM0O3Nob3dfc21hcHNfcm9sbHVwJiMzNDssICYjMzQ7c21hcF9nYXRoZXJfc3RhdHMmIzM0OywgJiMzNDtzaG93X3NtYXAmIzM0OywgJiMzNDtkb19wcm9jbWFwX3F1ZXJ5JiMzNDtdYC4KKiAgICoqUmVhc29uaW5nKio6IEkgdGhpbmsgdGhpcyBleHBsYW5hdGlvbiBzaG91bGQgYmUgc3VmZmljaWVudC4KCkkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19GUyYjMzQ7LAogICAgJiMzNDtQUk9DX1BBR0VfTU9OSVRPUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nob3dfc21hcHNfcm9sbHVwJiMzNDssCiAgICAmIzM0O3NtYXBfZ2F0aGVyX3N0YXRzJiMzNDssCiAgICAmIzM0O3Nob3dfc21hcCYjMzQ7LAogICAgJiMzNDtkb19wcm9jbWFwX3F1ZXJ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIC9wcm9jL1x1MDAzY3BpZFx1MDAzZS9zbWFwc19yb2xsdXAgYW5kIHNtYXBzIGl0ZXJhdGlvbiBsb2dpYyBpbiB0YXNrX21tdS5jIHRvIHVzZSBwZXItVk1BIGxvY2tzIHVuZGVyIFJDVSBpbnN0ZWFkIG9mIGFjcXVpcmluZyBtbWFwX2xvY2sgdXBmcm9udCwgYWRqdXN0cyBwYXJ0aWFsIFZNQSBzdGF0IGdhdGhlcmluZyBpbiBzbWFwX2dhdGhlcl9zdGF0cygpLCBhbmQgc2ltcGxpZmllcyBwcm9jX21hcHMgbG9ja2luZyBoZWxwZXJzLiBUaGlzIHJlYWNoYWJsZSBjb3JlIE1NL3Byb2NmcyBsb2dpYyBpcyB3b3J0aCBmdXp6aW5nIGZvciBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfRlMmIzM0OywKICAgICYjMzQ7UFJPQ19QQUdFX01PTklUT1ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaG93X3NtYXBzX3JvbGx1cCYjMzQ7LAogICAgJiMzNDtzbWFwX2dhdGhlcl9zdGF0cyYjMzQ7LAogICAgJiMzNDtzaG93X3NtYXAmIzM0OywKICAgICYjMzQ7ZG9fcHJvY21hcF9xdWVyeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyAvcHJvYy9cdTAwM2NwaWRcdTAwM2Uvc21hcHNfcm9sbHVwIGFuZCBzbWFwcyBpdGVyYXRpb24gbG9naWMgaW4gdGFza19tbXUuYyB0byB1c2UgcGVyLVZNQSBsb2NrcyB1bmRlciBSQ1UgaW5zdGVhZCBvZiBhY3F1aXJpbmcgbW1hcF9sb2NrIHVwZnJvbnQsIGFkanVzdHMgcGFydGlhbCBWTUEgc3RhdCBnYXRoZXJpbmcgaW4gc21hcF9nYXRoZXJfc3RhdHMoKSwgYW5kIHNpbXBsaWZpZXMgcHJvY19tYXBzIGxvY2tpbmcgaGVscGVycy4gVGhpcyByZWFjaGFibGUgY29yZSBNTS9wcm9jZnMgbG9naWMgaXMgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOTozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGxvY2tpbmcgYW5kIGl0ZXJhdGlvbiBsb2dpYyBpbiAvcHJvYy9cdTAwM2NwaWRcdTAwM2Uvc21hcHNfcm9sbHVwIGFuZCByZWxhdGVkIHRhc2tfbW11LmMgZnVuY3Rpb25zIChtaWdyYXRpbmcgc2hvd19zbWFwc19yb2xsdXAgdG8gdXNlIHBlci1WTUEgbG9ja2luZyB2aWEgcHJvY19nZXRfdm1hIGFuZCBzaW1wbGlmeWluZyBsb2NraW5nIGNvbnRleHQgaGVscGVyIGZ1bmN0aW9ucykuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHN0YXRpc3RpY3Mgc3RydWN0dXJlcyAoZS5nLiwgc3RydWN0IG1lbV9zaXplX3N0YXRzIG1zcyA9IHt9KSBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGFuZCBvdXRwdXQgaXMgZm9ybWF0dGVkIGFzIEFTQ0lJIHRleHQgaW50byBzZXFfZmlsZSBidWZmZXJzLiBUaGVyZSBhcmUgbm8gbmV3IG9yIG1vZGlmaWVkIHJhdyBzdHJ1Y3QgY29waWVzIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBvciBwYWRkaW5nLCBhbmQgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBjb25jdXJyZW5jeSBvciBsaWZldGltZSBpc3N1ZXMgaW50cm9kdWNlZCBieSBjaGFuZ2VzIHRvIFZNQSBsb2NraW5nL1JDVSB0cmF2ZXJzYWwgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI1NWE3YWNiYTdiOGJmMWI3NDg3ZmIxNTkwNzYwMDYwZTQ3ODkwYjQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDA5OjM4OjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jCmluZGV4IGU2NzFiNGZkOGRlZGQuLjY0MWExNTViMGM2MTMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvdGFza19tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jL3Rhc2tfbW11LmMKQEAgLTEzMCwyOCAmIzQzOzEzMCwxMiBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX3Rhc2tfbWVtcG9saWN5KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdikKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIGludCBsb2NrX2N0eF9tbShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKLXsKLQlpbnQgcmV0ID0gbW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobG9ja19jdHgtJmd0O21tKTsKLQotCWlmICghcmV0KQotCQlsb2NrX2N0eC0mZ3Q7bW1hcF9sb2NrZWQgPSB0cnVlOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpCiYjNDM7c3RhdGljIHZvaWQgdW5sb2NrX2N0eF9tbShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKIHsKIAltbWFwX3JlYWRfdW5sb2NrKGxvY2tfY3R4LSZndDttbSk7CiAJbG9ja19jdHgtJmd0O21tYXBfbG9ja2VkID0gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIHJlc2V0X2xvY2tfY3R4KHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KQotewotCWxvY2tfY3R4LSZndDtsb2NrZWRfdm1hID0gTlVMTDsKLQlsb2NrX2N0eC0mZ3Q7bW1hcF9sb2NrZWQgPSBmYWxzZTsKLX0KLQogc3RhdGljIHZvaWQgdW5sb2NrX2N0eF92bWEoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpCiB7CiAJaWYgKGxvY2tfY3R4LSZndDtsb2NrZWRfdm1hKSB7CkBAIC0xNjAsMjMgJiM0MzsxNDQsMTAgQEAgc3RhdGljIHZvaWQgdW5sb2NrX2N0eF92bWEoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpCiAJfQogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgbG9ja192bWFfcmFuZ2Uoc3RydWN0IHNlcV9maWxlICptLAotCQkJCSAgc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpCi17Ci0JcmN1X3JlYWRfbG9jaygpOwotCXJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTsKLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX3ZtYV9yYW5nZShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKJiM0MztzdGF0aWMgdm9pZCByZXNldF9sb2NrX2N0eChzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKIHsKLQlpZiAobG9ja19jdHgtJmd0O21tYXBfbG9ja2VkKSB7Ci0JCXVubG9ja19jdHhfbW0obG9ja19jdHgpOwotCX0gZWxzZSB7Ci0JCXVubG9ja19jdHhfdm1hKGxvY2tfY3R4KTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JfQomIzQzOwlsb2NrX2N0eC0mZ3Q7bG9ja2VkX3ZtYSA9IE5VTEw7CiYjNDM7CWxvY2tfY3R4LSZndDttbWFwX2xvY2tlZCA9IGZhbHNlOwogfQogCiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnZXRfbmV4dF92bWEoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LApAQCAtMTk2LDcgJiM0MzsxNjcsNyBAQCBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnZXRfbmV4dF92bWEoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LAogCXJldHVybiB2bWE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBmYWxsYmFja190b19tbWFwX2xvY2soc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LAomIzQzO3N0YXRpYyBib29sIGZhbGxiYWNrX3RvX21tYXBfbG9jayhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsCiAJCQkJCSBsb2ZmX3QgcG9zKQogewogCXN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4ID0gJmFtcDtwcml2LSZndDtsb2NrX2N0eDsKQEAgLTIxMyw3ICYjNDM7MTg0LDcgQEAgc3RhdGljIGlubGluZSBib29sIGZhbGxiYWNrX3RvX21tYXBfbG9jayhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkcm9wX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiYjNDM7c3RhdGljIHZvaWQgZHJvcF9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KQogewogCWlmIChwcml2LSZndDtsb2NrX2N0eC5tbWFwX2xvY2tlZCkKIAkJcmV0dXJuOwpAQCAtMjIxLDcgJiM0MzsxOTIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHJvcF9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KQogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhY3F1aXJlX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiYjNDM7c3RhdGljIHZvaWQgcmVhY3F1aXJlX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiB7CiAJaWYgKHByaXYtJmd0O2xvY2tfY3R4Lm1tYXBfbG9ja2VkKQogCQlyZXR1cm47CkBAIC0yODYsMTMgJiM0MzsyNTcsOCBAQCBzdGF0aWMgdm9pZCAqbV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcHBvcykKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKCFsb2NrX3ZtYV9yYW5nZShtLCBsb2NrX2N0eCkpIHsKLQkJbW1wdXQobW0pOwotCQlwdXRfdGFza19zdHJ1Y3QocHJpdi0mZ3Q7dGFzayk7Ci0JCXByaXYtJmd0O3Rhc2sgPSBOVUxMOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVFIpOwotCX0KLQomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTsKIAkvKgogCSAqIFJlc2V0IGN1cnJlbnQgcG9zaXRpb24gaWYgbGFzdF9hZGRyIHdhcyBzZXQgYmVmb3JlCiAJICogYW5kIGl0JiMzOTtzIG5vdCBhIHNlbnRpbmVsLgpAQCAtMzI1LDcgJiM0MzsyOTEsMTIgQEAgc3RhdGljIHZvaWQgbV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIAkJcmV0dXJuOwogCiAJcmVsZWFzZV90YXNrX21lbXBvbGljeShwcml2KTsKLQl1bmxvY2tfdm1hX3JhbmdlKCZhbXA7cHJpdi0mZ3Q7bG9ja19jdHgpOwomIzQzOwlpZiAocHJpdi0mZ3Q7bG9ja19jdHgubW1hcF9sb2NrZWQpIHsKJiM0MzsJCXVubG9ja19jdHhfbW0oJmFtcDtwcml2LSZndDtsb2NrX2N0eCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl1bmxvY2tfY3R4X3ZtYSgmYW1wO3ByaXYtJmd0O2xvY2tfY3R4KTsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwl9CiAJbW1wdXQobW0pOwogCXB1dF90YXNrX3N0cnVjdChwcml2LSZndDt0YXNrKTsKIAlwcml2LSZndDt0YXNrID0gTlVMTDsKQEAgLTUxOCwyMSAmIzQzOzQ4OSw2IEBAIHN0YXRpYyBpbnQgcGlkX21hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAkJUFJPQ01BUF9RVUVSWV9WTUFfRkxBR1MJCQkJXAogKQogCi1zdGF0aWMgaW50IHF1ZXJ5X3ZtYV9zZXR1cChzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKLXsKLQlyZXNldF9sb2NrX2N0eChsb2NrX2N0eCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcXVlcnlfdm1hX3RlYXJkb3duKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KQotewotCWlmIChsb2NrX2N0eC0mZ3Q7bW1hcF9sb2NrZWQpCi0JCXVubG9ja19jdHhfbW0obG9ja19jdHgpOwotCWVsc2UKLQkJdW5sb2NrX2N0eF92bWEobG9ja19jdHgpOwotfQotCiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpxdWVyeV92bWFfZmluZF9ieV9hZGRyKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4LAogCQkJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CkBAIC02NTMsMTIgJiM0Mzs2MDksNyBAQCBzdGF0aWMgaW50IGRvX3Byb2NtYXBfcXVlcnkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHZvaWQgX191c2VyICp1YXJnKQogCWlmICghbW0gfHwgIW1tZ2V0X25vdF96ZXJvKG1tKSkKIAkJcmV0dXJuIC1FU1JDSDsKIAotCWVyciA9IHF1ZXJ5X3ZtYV9zZXR1cCgmYW1wO2xvY2tfY3R4KTsKLQlpZiAoZXJyKSB7Ci0JCW1tcHV0KG1tKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KJiM0MzsJcmVzZXRfbG9ja19jdHgoJmFtcDtsb2NrX2N0eCk7CiAJdm1hID0gcXVlcnlfbWF0Y2hpbmdfdm1hKCZhbXA7bG9ja19jdHgsIGthcmcucXVlcnlfYWRkciwga2FyZy5xdWVyeV9mbGFncyk7CiAJaWYgKElTX0VSUih2bWEpKSB7CiAJCWVyciA9IFBUUl9FUlIodm1hKTsKQEAgLTczMiw3ICYjNDM7NjgzLDEwIEBAIHN0YXRpYyBpbnQgZG9fcHJvY21hcF9xdWVyeShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdm9pZCBfX3VzZXIgKnVhcmcpCiAJCXZtX2ZpbGUgPSBnZXRfZmlsZSh2bWEtJmd0O3ZtX2ZpbGUpOwogCiAJLyogdW5sb2NrIHZtYSBvciBtbWFwX2xvY2ssIGFuZCBwdXQgbW1fc3RydWN0IGJlZm9yZSBjb3B5aW5nIGRhdGEgdG8gdXNlciAqLwotCXF1ZXJ5X3ZtYV90ZWFyZG93bigmYW1wO2xvY2tfY3R4KTsKJiM0MzsJaWYgKGxvY2tfY3R4Lm1tYXBfbG9ja2VkKQomIzQzOwkJdW5sb2NrX2N0eF9tbSgmYW1wO2xvY2tfY3R4KTsKJiM0MzsJZWxzZQomIzQzOwkJdW5sb2NrX2N0eF92bWEoJmFtcDtsb2NrX2N0eCk7CiAJbW1wdXQobW0pOwogCiAJaWYgKGthcmcuYnVpbGRfaWRfc2l6ZSkgewpAQCAtNzczLDcgJiM0Mzs3MjcsMTAgQEAgc3RhdGljIGludCBkb19wcm9jbWFwX3F1ZXJ5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB2b2lkIF9fdXNlciAqdWFyZykKIAlyZXR1cm4gMDsKIAogb3V0OgotCXF1ZXJ5X3ZtYV90ZWFyZG93bigmYW1wO2xvY2tfY3R4KTsKJiM0MzsJaWYgKGxvY2tfY3R4Lm1tYXBfbG9ja2VkKQomIzQzOwkJdW5sb2NrX2N0eF9tbSgmYW1wO2xvY2tfY3R4KTsKJiM0MzsJZWxzZQomIzQzOwkJdW5sb2NrX2N0eF92bWEoJmFtcDtsb2NrX2N0eCk7CiAJbW1wdXQobW0pOwogb3V0X2ZpbGU6CiAJaWYgKHZtX2ZpbGUpCkBAIC0xMjYzLDcgJiM0MzsxMjIwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBzbWFwc19zaG1lbV93YWxrX3ZtYV9sb2NrX29wcyA9IHsKIAkud2Fsa19sb2NrCQk9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSwKIH07CiAKLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICoKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICoKIGdldF9zbWFwc193YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiB7CiAJaWYgKHByaXYtJmd0O2xvY2tfY3R4Lm1tYXBfbG9ja2VkKQpAQCAtMTI3MSw3ICYjNDM7MTIyOCw3IEBAIGdldF9zbWFwc193YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiAJcmV0dXJuICZhbXA7c21hcHNfd2Fsa192bWFfbG9ja19vcHM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICoKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICoKIGdldF9zbWFwc19zaG1lbV93YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiB7CiAJaWYgKHByaXYtJmd0O2xvY2tfY3R4Lm1tYXBfbG9ja2VkKQpAQCAtMTI3OSwyMCAmIzQzOzEyMzYsMjcgQEAgZ2V0X3NtYXBzX3NobWVtX3dhbGtfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdikKIAlyZXR1cm4gJmFtcDtzbWFwc19zaG1lbV93YWxrX3ZtYV9sb2NrX29wczsKIH0KIAotLyoKLSAqIEdhdGhlciBtZW0gc3RhdHMgZnJvbSBAdm1hIHdpdGggdGhlIGluZGljYXRlZCBiZWdpbm5pbmcKLSAqIGFkZHJlc3MgQHN0YXJ0LCBhbmQga2VlcCB0aGVtIGluIEBtc3MuCiYjNDM7LyoqCiYjNDM7ICogc21hcF9nYXRoZXJfc3RhdHMoKSAtIEdhdGhlciBtZW0gc3RhdHMgZnJvbSBAdm1hLgomIzQzOyAqIEBwcml2OiBwcm9jIG1hcHMgcHJpdmF0ZSBzdGF0ZS4KJiM0MzsgKiBAdm1hOiBUaGUgVk1BIHRvIGdhdGhlciBzdGF0cyBmb3IuCiYjNDM7ICogQG1zczogVGhlIGFjY3VtdWxhdGVkIHN0YXRzLgomIzQzOyAqIEBzdGFydDogVGhlIGFkZHJlc3MgZnJvbSB3aGljaCB0byBzdGFydC4KICAqCi0gKiBVc2Ugdm1fc3RhcnQgb2YgQHZtYSBhcyB0aGUgYmVnaW5uaW5nIGFkZHJlc3MgaWYgQHN0YXJ0IGlzIDAuCiYjNDM7ICogVGhpcyBnYXRoZXJzIHN0YXRzIGZvciB0aGUgd2hvbGUgb2YgdGhlIFZNQSB1bmxlc3MgdGhlIGxvY2sgd2FzIGRyb3BwZWQKJiM0MzsgKiBhbmQgVk1BIGdyZXcgb3IgZ290IG1lcmdlZCBhbmQgd2UgZm91bmQgaXQgYWdhaW4sIGluIHdoaWNoIGNhc2Ugd2Ugb25seQomIzQzOyAqIGdhdGhlciBzdGF0cyBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgVk1BIHJhbmdlLgogICovCiBzdGF0aWMgdm9pZCBzbWFwX2dhdGhlcl9zdGF0cyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsCiAJCQkgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCSAgICAgIHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyAqbXNzLCB1bnNpZ25lZCBsb25nIHN0YXJ0KQomIzQzOwkJCSAgICAgIHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyAqbXNzLAomIzQzOwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQpCiB7CiAJY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMgPSBnZXRfc21hcHNfd2Fsa19vcHMocHJpdik7CiYjNDM7CWNvbnN0IGJvb2wgaXNfcGFydGlhbCA9IHN0YXJ0ICZndDsgdm1hLSZndDt2bV9zdGFydDsKIAogCS8qIEludmFsaWQgc3RhcnQgKi8KLQlpZiAoc3RhcnQgJmd0Oz0gdm1hLSZndDt2bV9lbmQpCiYjNDM7CWlmIChzdGFydCAmbHQ7IHZtYS0mZ3Q7dm1fc3RhcnQgfHwgc3RhcnQgJmd0Oz0gdm1hLSZndDt2bV9lbmQpCiAJCXJldHVybjsKIAogCWlmICh2bWEgPT0gZ2V0X2dhdGVfdm1hKHByaXYtJmd0O2xvY2tfY3R4Lm1tKSkKQEAgLTEzMTIsMjAgJiM0MzsxMjc2LDE3IEBAIHN0YXRpYyB2b2lkIHNtYXBfZ2F0aGVyX3N0YXRzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiwKIAkJICogVW5sZXNzIHdlIGtub3cgdGhhdCB0aGUgc2htZW0gb2JqZWN0IChvciB0aGUgcGFydCBtYXBwZWQgYnkKIAkJICogb3VyIFZNQSkgaGFzIG5vIHN3YXBwZWQgb3V0IHBhZ2VzIGF0IGFsbC4KIAkJICovCi0JCXVuc2lnbmVkIGxvbmcgc2htZW1fc3dhcHBlZCA9IHNobWVtX3N3YXBfdXNhZ2Uodm1hKTsKJiM0MzsJCWNvbnN0IHVuc2lnbmVkIGxvbmcgc2htZW1fc3dhcHBlZCA9IHNobWVtX3N3YXBfdXNhZ2Uodm1hKTsKJiM0MzsJCWNvbnN0IGJvb2wgc2hhcmVkX29yX3JvID0gdm1hX3Rlc3Qodm1hLCBWTUFfU0hBUkVEX0JJVCkgfHwKJiM0MzsJCQkJCSAgIXZtYV90ZXN0KHZtYSwgVk1BX1dSSVRFX0JJVCk7CiAKLQkJaWYgKCFzdGFydCAmYW1wOyZhbXA7ICghc2htZW1fc3dhcHBlZCB8fCAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9TSEFSRUQpIHx8Ci0JCQkJCSEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9XUklURSkpKSB7CiYjNDM7CQlpZiAoIWlzX3BhcnRpYWwgJmFtcDsmYW1wOyAoIXNobWVtX3N3YXBwZWQgfHwgc2hhcmVkX29yX3JvKSkKIAkJCW1zcy0mZ3Q7c3dhcCAmIzQzOz0gc2htZW1fc3dhcHBlZDsKLQkJfSBlbHNlIHsKJiM0MzsJCWVsc2UKIAkJCW9wcyA9IGdldF9zbWFwc19zaG1lbV93YWxrX29wcyhwcml2KTsKLQkJfQogCX0KIAotCWlmICghc3RhcnQpCi0JCXdhbGtfcGFnZV92bWEodm1hLCBvcHMsIG1zcyk7Ci0JZWxzZQotCQl3YWxrX3BhZ2VfcmFuZ2Uodm1hLSZndDt2bV9tbSwgc3RhcnQsIHZtYS0mZ3Q7dm1fZW5kLCBvcHMsIG1zcyk7CiYjNDM7CXdhbGtfcGFnZV9yYW5nZV92bWEodm1hLCBzdGFydCwgdm1hLSZndDt2bV9lbmQsIG9wcywgbXNzKTsKIAogCXJlYWNxdWlyZV9yY3UocHJpdik7CiB9CkBAIC0xMzgwLDcgJiM0MzsxMzQxLDcgQEAgc3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdjsKIAlzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgbXNzID0ge307CiAKLQlzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsICZhbXA7bXNzLCAwKTsKJiM0MzsJc21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCAmYW1wO21zcywgdm1hLSZndDt2bV9zdGFydCk7CiAKIAlzaG93X21hcF92bWEobSwgdm1hKTsKIApAQCAtMTQwNSwxMiAmIzQzOzEzNjYsMTQgQEAgc3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogc3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2ID0gbS0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHggPSAmYW1wO3ByaXYtJmd0O2xvY2tfY3R4OwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGxvY2tfY3R4LSZndDttbTsKIAlzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgbXNzID0ge307Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LSZndDtsb2NrX2N0eC5tbTsKJiM0MzsJdW5zaWduZWQgbG9uZyBsYXN0X3ZtYV9lbmQgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIHZtYV9zdGFydCA9IDA7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0JdW5zaWduZWQgbG9uZyB2bWFfc3RhcnQgPSAwLCBsYXN0X3ZtYV9lbmQgPSAwOwomIzQzOwlsb2ZmX3QgcG9zID0gMDsKIAlpbnQgcmV0ID0gMDsKLQlWTUFfSVRFUkFUT1Iodm1pLCBtbSwgMCk7CiAKIAlwcml2LSZndDt0YXNrID0gZ2V0X3Byb2NfdGFzayhwcml2LSZndDtpbm9kZSk7CiAJaWYgKCFwcml2LSZndDt0YXNrKQpAQCAtMTQyMSw4OSAmIzQzOzEzODQsNjAgQEAgc3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiAJCWdvdG8gb3V0X3B1dF90YXNrOwogCX0KIAotCXJldCA9IGxvY2tfY3R4X21tKCZhbXA7cHJpdi0mZ3Q7bG9ja19jdHgpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X3B1dF9tbTsKLQogCWhvbGRfdGFza19tZW1wb2xpY3kocHJpdik7Ci0Jdm1hID0gdm1hX25leHQoJmFtcDt2bWkpOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTsKIAomIzQzOwl2bWFfaXRlcl9pbml0KCZhbXA7cHJpdi0mZ3Q7aXRlciwgbW0sIDApOwomIzQzOwl2bWEgPSBwcm9jX2dldF92bWEobSwgJmFtcDtwb3MpOwogCWlmICh1bmxpa2VseSghdm1hKSkKIAkJZ290byBlbXB0eV9zZXQ7CiAKLQl2bWFfc3RhcnQgPSB2bWEtJmd0O3ZtX3N0YXJ0OwotCWRvIHsKLQkJc21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCAmYW1wO21zcywgMCk7Ci0JCWxhc3Rfdm1hX2VuZCA9IHZtYS0mZ3Q7dm1fZW5kOwomIzQzOwlpZiAoIUlTX0VSUih2bWEpICZhbXA7JmFtcDsgdm1hICE9IGdldF9nYXRlX3ZtYShsb2NrX2N0eC0mZ3Q7bW0pKQomIzQzOwkJdm1hX3N0YXJ0ID0gdm1hLSZndDt2bV9zdGFydDsKJiM0MzsKJiM0MzsJd2hpbGUgKHZtYSkgewomIzQzOwkJaWYgKElTX0VSUih2bWEpKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUih2bWEpOwomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICh2bWEgPT0gZ2V0X2dhdGVfdm1hKGxvY2tfY3R4LSZndDttbSkpCiYjNDM7CQkJYnJlYWs7CiAKIAkJLyoKLQkJICogUmVsZWFzZSBtbWFwX2xvY2sgdGVtcG9yYXJpbHkgaWYgc29tZW9uZSB3YW50cyB0bwotCQkgKiBhY2Nlc3MgaXQgZm9yIHdyaXRlIHJlcXVlc3QuCiYjNDM7CQkgKiBJZiBhZnRlciByZXRha2luZyB0aGUgbG9jaywgYWxyZWFkeSByZXBvcnRlZCBWTUEgZ3JldyBvcgomIzQzOwkJICogbWVyZ2VkIHdpdGggdGhlIG5leHQgb25lLCBzbWFwX2dhdGhlcl9zdGF0cygpIHdpbGwgZ2F0aGVyCiYjNDM7CQkgKiBzdGF0cyBmb3IgdGhlIHJlbWFpbmluZyBwb3J0aW9uIGJ5IHN0YXJ0aW5nIGF0IGxhc3Rfdm1hX2VuZC4KIAkJICovCi0JCWlmIChtbWFwX2xvY2tfaXNfY29udGVuZGVkKG1tKSkgewotCQkJdm1hX2l0ZXJfaW52YWxpZGF0ZSgmYW1wO3ZtaSk7Ci0JCQl1bmxvY2tfY3R4X21tKCZhbXA7cHJpdi0mZ3Q7bG9ja19jdHgpOwotCQkJcmV0ID0gbG9ja19jdHhfbW0oJmFtcDtwcml2LSZndDtsb2NrX2N0eCk7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJcmVsZWFzZV90YXNrX21lbXBvbGljeShwcml2KTsKLQkJCQlnb3RvIG91dF9wdXRfbW07Ci0JCQl9CiYjNDM7CQlzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsICZhbXA7bXNzLCBsYXN0X3ZtYV9lbmQpOwomIzQzOwkJbGFzdF92bWFfZW5kID0gdm1hLSZndDt2bV9lbmQ7CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBJZiB0aGUgVk1BIGxvY2sgaXMgbm90IHRha2VuLCB3ZSBob2xkIHRoZSBvZnRlbiBjb250ZW5kZWQKJiM0MzsJCSAqIG1tYXAgbG9jay4gVGhpcyBjYW4gaGFwcGVuIGlmIHdlIGhhZCB0byBmYWxsIGJhY2sgdG8gdGhlCiYjNDM7CQkgKiBtbWFwIGxvY2suCiYjNDM7CQkgKgomIzQzOwkJICogVG8gcmVsaWV2ZSBwcmVzc3VyZSwgY2hlY2sgaWYgaXQgaXMgaW5kZWVkIGNvbnRlbmRlZCwgdGhlbgomIzQzOwkJICogdGVtcG9yYXJpbHkgcmVsZWFzZSBpdC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGxvY2tfY3R4LSZndDttbWFwX2xvY2tlZCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbW1hcF9sb2NrX2lzX2NvbnRlbmRlZChsb2NrX2N0eC0mZ3Q7bW0pKSB7CiYjNDM7CQkJdW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7CiAJCQkvKgotCQkJICogQWZ0ZXIgZHJvcHBpbmcgdGhlIGxvY2ssIHRoZXJlIGFyZSBmb3VyIGNhc2VzIHRvCi0JCQkgKiBjb25zaWRlci4gU2VlIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSBmb3IgZXhwbGFuYXRpb24uCi0JCQkgKgotCQkJICogICAmIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7Ci0JCQkgKiAgIHwgVk1BMSB8IFZNQTIgfCBWTUEzICAgICAgfAotCQkJICogICAmIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7Ci0JCQkgKiAgIHwgICAgICB8ICAgICAgfCAgICAgICAgICAgfAotCQkJICogIDRrICAgICA4ayAgICAgMTZrICAgICAgICAgNDAwawotCQkJICoKLQkJCSAqIFN1cHBvc2Ugd2UgZHJvcCB0aGUgbG9jayBhZnRlciByZWFkaW5nIFZNQTIgZHVlIHRvCi0JCQkgKiBjb250ZW50aW9uLCB0aGVuIHdlIGdldDoKLQkJCSAqCi0JCQkgKglsYXN0X3ZtYV9lbmQgPSAxNmsKLQkJCSAqCi0JCQkgKiAxKSBWTUEyIGlzIGZyZWVkLCBidXQgVk1BMyBleGlzdHM6Ci0JCQkgKgotCQkJICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBWTUEzLgotCQkJICogICAgSW4gdGhpcyBjYXNlLCBqdXN0IGNvbnRpbnVlIGZyb20gVk1BMy4KLQkJCSAqCi0JCQkgKiAyKSBWTUEyIHN0aWxsIGV4aXN0czoKLQkJCSAqCi0JCQkgKiAgICB2bWFfbmV4dCh2bWkpIHdpbGwgcmV0dXJuIFZNQTMuCi0JCQkgKiAgICBJbiB0aGlzIGNhc2UsIGp1c3QgY29udGludWUgZnJvbSBWTUEzLgotCQkJICoKLQkJCSAqIDMpIE5vIG1vcmUgVk1BcyBjYW4gYmUgZm91bmQ6Ci0JCQkgKgotCQkJICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBOVUxMLgotCQkJICogICAgTm8gbW9yZSB0aGluZ3MgdG8gZG8sIGp1c3QgYnJlYWsuCi0JCQkgKgotCQkJICogNCkgKGxhc3Rfdm1hX2VuZCAtIDEpIGlzIHRoZSBtaWRkbGUgb2YgYSB2bWEgKFZNQSYjMzk7KToKLQkJCSAqCi0JCQkgKiAgICB2bWFfbmV4dCh2bWkpIHdpbGwgcmV0dXJuIFZNQSYjMzk7IHdob3NlIHJhbmdlCi0JCQkgKiAgICBjb250YWlucyBsYXN0X3ZtYV9lbmQuCi0JCQkgKiAgICBJdGVyYXRlIFZNQSYjMzk7IGZyb20gbGFzdF92bWFfZW5kLgomIzQzOwkJCSAqIEV2ZW4gdGhvdWdoIHdlIHByZXZpb3VzbHkgZmVsbCBiYWNrIHRvIG1tYXAgbG9jaywKJiM0MzsJCQkgKiB3ZSB0cnkgdGFraW5nIFZNQSBsb2NrIGZvciB0aGUgbmV4dCBWTUEsIHNpbmNlIGl0CiYjNDM7CQkJICogbWlnaHQgbm90IGJlIHVuZGVyIG1vZGlmaWNhdGlvbi4gSW4gdGhlIHdvcnN0IGNhc2UKJiM0MzsJCQkgKiB3ZSB3aWxsIGZhbGwgYmFjayB0byBtbWFwIGxvY2sgYWdhaW4uCiAJCQkgKi8KLQkJCXZtYSA9IHZtYV9uZXh0KCZhbXA7dm1pKTsKLQkJCS8qIENhc2UgMyBhYm92ZSAqLwotCQkJaWYgKCF2bWEpCi0JCQkJYnJlYWs7Ci0KLQkJCS8qIENhc2UgMSBhbmQgMiBhYm92ZSAqLwotCQkJaWYgKHZtYS0mZ3Q7dm1fc3RhcnQgJmd0Oz0gbGFzdF92bWFfZW5kKSB7Ci0JCQkJc21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCAmYW1wO21zcywgMCk7Ci0JCQkJbGFzdF92bWFfZW5kID0gdm1hLSZndDt2bV9lbmQ7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qIENhc2UgNCBhYm92ZSAqLwotCQkJaWYgKHZtYS0mZ3Q7dm1fZW5kICZndDsgbGFzdF92bWFfZW5kKSB7Ci0JCQkJc21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCAmYW1wO21zcywgbGFzdF92bWFfZW5kKTsKLQkJCQlsYXN0X3ZtYV9lbmQgPSB2bWEtJmd0O3ZtX2VuZDsKLQkJCX0KJiM0MzsJCQlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CQkJcmVzZXRfbG9ja19jdHgobG9ja19jdHgpOwomIzQzOwkJCS8qIFJlc3VtZSBmcm9tIHRoZSBsYXN0IHBvc2l0aW9uLiAqLwomIzQzOwkJCXBvcyA9IGxhc3Rfdm1hX2VuZDsKJiM0MzsJCQl2bWFfaXRlcl9pbml0KCZhbXA7cHJpdi0mZ3Q7aXRlciwgbW0sIHBvcyk7CiAJCX0KLQl9IGZvcl9lYWNoX3ZtYSh2bWksIHZtYSk7CiYjNDM7CQl2bWEgPSBwcm9jX2dldF92bWEobSwgJmFtcDtwb3MpOwomIzQzOwl9CiAKIGVtcHR5X3NldDoKIAlzaG93X3ZtYV9oZWFkZXJfcHJlZml4KG0sIHZtYV9zdGFydCwgbGFzdF92bWFfZW5kLCAwLCAwLCAwLCAwKTsKQEAgLTE1MTIsMTAgJiM0MzsxNDQ2LDE0IEBAIHN0YXRpYyBpbnQgc2hvd19zbWFwc19yb2xsdXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogCiAJX19zaG93X3NtYXAobSwgJmFtcDttc3MsIHRydWUpOwogCiYjNDM7b3V0X3VubG9jazoKJiM0MzsJaWYgKGxvY2tfY3R4LSZndDttbWFwX2xvY2tlZCkgewomIzQzOwkJdW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl1bmxvY2tfY3R4X3ZtYShsb2NrX2N0eCk7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJfQogCXJlbGVhc2VfdGFza19tZW1wb2xpY3kocHJpdik7Ci0JdW5sb2NrX2N0eF9tbSgmYW1wO3ByaXYtJmd0O2xvY2tfY3R4KTsKLQotb3V0X3B1dF9tbToKIAltbXB1dChtbSk7CiBvdXRfcHV0X3Rhc2s6CiAJcHV0X3Rhc2tfc3RydWN0KHByaXYtJmd0O3Rhc2spOwpAQCAtMTYwNSw3ICYjNDM7MTU0Myw3IEBAIHN0cnVjdCBjbGVhcl9yZWZzX3ByaXZhdGUgewogCWVudW0gY2xlYXJfcmVmc190eXBlcyB0eXBlOwogfTsKIAotc3RhdGljIGlubGluZSBib29sIHB0ZV9pc19waW5uZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKQomIzQzO3N0YXRpYyBib29sIHB0ZV9pc19waW5uZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKQogewogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAKQEAgLTE2MjEsOCAmIzQzOzE1NTksOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHRlX2lzX3Bpbm5lZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCXJldHVybiBmb2xpb19tYXliZV9kbWFfcGlubmVkKGZvbGlvKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZSkKJiM0MztzdGF0aWMgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJICAgICBwdGVfdCAqcHRlKQogewogCWlmICghcGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpCiAJCXJldHVybjsKQEAgLTE2NTMsOCAmIzQzOzE1OTEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKQotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHlfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQl1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKQomIzQzO3N0YXRpYyB2b2lkIGNsZWFyX3NvZnRfZGlydHlfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJCQkgdW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kcCkKIHsKIAlwbWRfdCBvbGQsIHBtZCA9ICpwbWRwOwogCkBAIC0xNjc5LDggJiM0MzsxNjE3LDggQEAgc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHlfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCX0KIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHApCiYjNDM7c3RhdGljIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQkJCSB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKQogewogfQogI2VuZGlmCkBAIC0xODc5LDcgJiM0MzsxODE3LDcgQEAgc3RydWN0IHBhZ2VtYXByZWFkIHsKIAogI2RlZmluZSBQTV9FTkRfT0ZfQlVGRkVSICAgIDEKIAotc3RhdGljIGlubGluZSBwYWdlbWFwX2VudHJ5X3QgbWFrZV9wbWUodTY0IGZyYW1lLCB1NjQgZmxhZ3MpCiYjNDM7c3RhdGljIHBhZ2VtYXBfZW50cnlfdCBtYWtlX3BtZSh1NjQgZnJhbWUsIHU2NCBmbGFncykKIHsKIAlyZXR1cm4gKHBhZ2VtYXBfZW50cnlfdCkgeyAucG1lID0gKGZyYW1lICZhbXA7IFBNX1BGUkFNRV9NQVNLKSB8IGZsYWdzIH07CiB9CkBAIC0zNDIxLDcgJiM0MzszMzU5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBzaG93X251bWFfdm1hX2xvY2tfb3BzID0gewogCS53YWxrX2xvY2sgPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksCiB9OwogCi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqCiBnZXRfc2hvd19udW1hX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiB7CiAJaWYgKHByaXYtJmd0O2xvY2tfY3R4Lm1tYXBfbG9ja2VkKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLW1hcHMtcmFjZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLW1hcHMtcmFjZS5jCmluZGV4IDQxNWVjY2I3MDQ2ODQuLjhkMDBkN2RiMWM2NTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2MtbWFwcy1yYWNlLmMKQEAgLTgwLDYgJiM0Mzs4MCw2MSBAQCBlbnVtIG1hcHNfZmlsZSB7CiAKIHN0cnVjdCB2bWFfbW9kaWZpZXJfaW5mbzsKIAomIzQzO2VudW0gc21hcHNfcm9sbHVwX3N0YXQgewomIzQzOwlSc3MsCiYjNDM7CVBzcywKJiM0MzsJUHNzX0RpcnR5LAomIzQzOwlQc3NfQW5vbiwKJiM0MzsJUHNzX0ZpbGUsCiYjNDM7CVBzc19TaG1lbSwKJiM0MzsJU2hhcmVkX0NsZWFuLAomIzQzOwlTaGFyZWRfRGlydHksCiYjNDM7CVByaXZhdGVfQ2xlYW4sCiYjNDM7CVByaXZhdGVfRGlydHksCiYjNDM7CVJlZmVyZW5jZWQsCiYjNDM7CUFub255bW91cywKJiM0MzsJS1NNLAomIzQzOwlMYXp5RnJlZSwKJiM0MzsJQW5vbkh1Z2VQYWdlcywKJiM0MzsJU2htZW1QbWRNYXBwZWQsCiYjNDM7CUZpbGVQbWRNYXBwZWQsCiYjNDM7CVNoYXJlZF9IdWdldGxiLAomIzQzOwlQcml2YXRlX0h1Z2V0bGIsCiYjNDM7CVN3YXAsCiYjNDM7CVN3YXBQc3MsCiYjNDM7CUxvY2tlZCwKJiM0MzsJUm9sbHVwRmllbGRDb3VudAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKnNtYXBzX3JvbGx1cF9zdGF0X25hbWVzW1JvbGx1cEZpZWxkQ291bnRdID0gewomIzQzOwkmIzM0O1JzcyYjMzQ7LAomIzQzOwkmIzM0O1BzcyYjMzQ7LAomIzQzOwkmIzM0O1Bzc19EaXJ0eSYjMzQ7LAomIzQzOwkmIzM0O1Bzc19Bbm9uJiMzNDssCiYjNDM7CSYjMzQ7UHNzX0ZpbGUmIzM0OywKJiM0MzsJJiMzNDtQc3NfU2htZW0mIzM0OywKJiM0MzsJJiMzNDtTaGFyZWRfQ2xlYW4mIzM0OywKJiM0MzsJJiMzNDtTaGFyZWRfRGlydHkmIzM0OywKJiM0MzsJJiMzNDtQcml2YXRlX0NsZWFuJiMzNDssCiYjNDM7CSYjMzQ7UHJpdmF0ZV9EaXJ0eSYjMzQ7LAomIzQzOwkmIzM0O1JlZmVyZW5jZWQmIzM0OywKJiM0MzsJJiMzNDtBbm9ueW1vdXMmIzM0OywKJiM0MzsJJiMzNDtLU00mIzM0OywKJiM0MzsJJiMzNDtMYXp5RnJlZSYjMzQ7LAomIzQzOwkmIzM0O0Fub25IdWdlUGFnZXMmIzM0OywKJiM0MzsJJiMzNDtTaG1lbVBtZE1hcHBlZCYjMzQ7LAomIzQzOwkmIzM0O0ZpbGVQbWRNYXBwZWQmIzM0OywKJiM0MzsJJiMzNDtTaGFyZWRfSHVnZXRsYiYjMzQ7LAomIzQzOwkmIzM0O1ByaXZhdGVfSHVnZXRsYiYjMzQ7LAomIzQzOwkmIzM0O1N3YXAmIzM0OywKJiM0MzsJJiMzNDtTd2FwUHNzJiMzNDssCiYjNDM7CSYjMzQ7TG9ja2VkJiMzNDssCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIHsKJiM0MzsJdW5zaWduZWQgbG9uZyB2YWx1ZXNbUm9sbHVwRmllbGRDb3VudF07CiYjNDM7fTsKJiM0MzsKIEZJWFRVUkUocHJvY19tYXBzX3JhY2UpCiB7CiAJc3RydWN0IHZtYV9tb2RpZmllcl9pbmZvICptb2RfaW5mbzsKQEAgLTkxLDYgJiM0MzsxNDYsNyBAQCBGSVhUVVJFKHByb2NfbWFwc19yYWNlKQogCWVudW0gbWFwc19maWxlIG1hcHNfZmlsZTsKIAlpbnQgc2hhcmVkX21lbV9zaXplOwogCWludCBza2lwX3BhZ2VzOwomIzQzOwlpbnQgcm9sbHVwX2ZkOwogCWludCBwYWdlX3NpemU7CiAJaW50IHZtYV9jb3VudDsKIAlib29sIHZlcmJvc2U7CkBAIC0xMzIsMTIgJiM0MzsxODgsMTIgQEAgc3RydWN0IHZtYV9tb2RpZmllcl9pbmZvIHsKIAl2b2lkICpjaGlsZF9tYXBwZWRfYWRkcltdOwogfTsKIAotc3RhdGljIGJvb2wgcmVhZF9wYWdlKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsCiYjNDM7c3RhdGljIGJvb2wgcmVhZF9wYWdlKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsIGludCBmZCwKIAkJICAgICAgc3RydWN0IHBhZ2VfY29udGVudCAqcGFnZSkKIHsKIAlzc2l6ZV90ICBieXRlc19yZWFkOwogCi0JYnl0ZXNfcmVhZCA9IHJlYWQoc2VsZi0mZ3Q7bWFwc19mZCwgcGFnZS0mZ3Q7ZGF0YSwgc2VsZi0mZ3Q7cGFnZV9zaXplKTsKJiM0MzsJYnl0ZXNfcmVhZCA9IHJlYWQoZmQsIHBhZ2UtJmd0O2RhdGEsIHNlbGYtJmd0O3BhZ2Vfc2l6ZSk7CiAJaWYgKGJ5dGVzX3JlYWQgJmx0Oz0gMCkKIAkJcmV0dXJuIGZhbHNlOwogCkBAIC0xNzUsNyAmIzQzOzIzMSw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX2NvbnRhaW5pbmdfcGFnZShGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmLAogCQljaGFyICpjdXJyX3BvczsKIAkJY2hhciAqZW5kX3BvczsKIAotCQlpZiAoIXJlYWRfcGFnZShzZWxmLCAmYW1wO3NlbGYtJmd0O3BhZ2UxKSkKJiM0MzsJCWlmICghcmVhZF9wYWdlKHNlbGYsIHNlbGYtJmd0O21hcHNfZmQsICZhbXA7c2VsZi0mZ3Q7cGFnZTEpKQogCQkJcmV0dXJuIC0xOwogCiAJCWN1cnJfcG9zID0gc2VsZi0mZ3Q7cGFnZTEuZGF0YTsKQEAgLTIwNSwxMCAmIzQzOzI2MSwxMSBAQCBzdGF0aWMgYm9vbCByZWFkX3R3b19wYWdlcyhGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHNlbGYtJmd0O3NraXBfcGFnZXM7IGkmIzQzOyYjNDM7KQotCQlpZiAoIXJlYWRfcGFnZShzZWxmLCAmYW1wO3NlbGYtJmd0O3BhZ2UxKSkKJiM0MzsJCWlmICghcmVhZF9wYWdlKHNlbGYsIHNlbGYtJmd0O21hcHNfZmQsICZhbXA7c2VsZi0mZ3Q7cGFnZTEpKQogCQkJcmV0dXJuIGZhbHNlOwogCi0JcmV0dXJuIHJlYWRfcGFnZShzZWxmLCAmYW1wO3NlbGYtJmd0O3BhZ2UxKSAmYW1wOyZhbXA7IHJlYWRfcGFnZShzZWxmLCAmYW1wO3NlbGYtJmd0O3BhZ2UyKTsKJiM0MzsJcmV0dXJuIHJlYWRfcGFnZShzZWxmLCBzZWxmLSZndDttYXBzX2ZkLCAmYW1wO3NlbGYtJmd0O3BhZ2UxKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICByZWFkX3BhZ2Uoc2VsZiwgc2VsZi0mZ3Q7bWFwc19mZCwgJmFtcDtzZWxmLSZndDtwYWdlMik7CiB9CiAKIHN0YXRpYyB2b2lkIGNvcHlfbGluZShjb25zdCBjaGFyICpsaW5lX3N0YXJ0LCBjb25zdCBjaGFyICpsaW5lX2VuZCwKQEAgLTMxNyw2ICYjNDM7Mzc0LDYxIEBAIHN0YXRpYyBib29sIHJlYWRfYm91bmRhcnlfbGluZXMoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZiwKIAkJICAgICAgJmFtcDtmaXJzdF9saW5lLSZndDtlbmRfYWRkcikgPT0gMjsKIH0KIAomIzQzO3N0YXRpYyBib29sIHBhcnNlX3NtYXBzX3JvbGx1cChGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmLAomIzQzOwkJCSAgICAgICBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpzdGF0cykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBkZXZfbWFqLCBkZXZfbWluLCBpbm9kZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCBvZmZzOwomIzQzOwl1bnNpZ25lZCBsb25nIHZhbHVlOwomIzQzOwljaGFyIG5hbWVbMzJdLCBwZXJtWzVdOwomIzQzOwljaGFyICpjdXJyX3BvczsKJiM0MzsJY2hhciAqZW5kX3BvczsKJiM0MzsJY2hhciAqbGluZV9lbmQ7CiYjNDM7CiYjNDM7CWlmIChsc2VlayhzZWxmLSZndDtyb2xsdXBfZmQsIDAsIFNFRUtfU0VUKSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghcmVhZF9wYWdlKHNlbGYsIHNlbGYtJmd0O3JvbGx1cF9mZCwgJmFtcDtzZWxmLSZndDtwYWdlMSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWN1cnJfcG9zID0gc2VsZi0mZ3Q7cGFnZTEuZGF0YTsKJiM0MzsJZW5kX3BvcyA9IHNlbGYtJmd0O3BhZ2UxLmRhdGEgJiM0Mzsgc2VsZi0mZ3Q7cGFnZTEuc2l6ZTsKJiM0MzsKJiM0MzsJbGluZV9lbmQgPSBzdHJjaHIoY3Vycl9wb3MsICYjMzk7XG4mIzM5Oyk7CiYjNDM7CWlmICghbGluZV9lbmQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChzc2NhbmYoY3Vycl9wb3MsICYjMzQ7JWx4LSVseCAlNHMgJWx4ICV1OiV1ICV1ICUzMXMmIzM0OywKJiM0MzsJCSZhbXA7c3RhcnQsICZhbXA7ZW5kLCBwZXJtLCAmYW1wO29mZnMsICZhbXA7ZGV2X21haiwgJmFtcDtkZXZfbWluLCAmYW1wO2lub2RlLCBuYW1lKSAhPSA4KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoc3RyY21wKG5hbWUsICYjMzQ7W3JvbGx1cF0mIzM0OykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaW50IHN0YXQgPSAwOyBzdGF0ICZsdDsgQVJSQVlfU0laRShzbWFwc19yb2xsdXBfc3RhdF9uYW1lcyk7IHN0YXQmIzQzOyYjNDM7KSB7CiYjNDM7CQlpbnQgbGVuOwomIzQzOwomIzQzOwkJY3Vycl9wb3MgPSBsaW5lX2VuZCAmIzQzOyAxOwomIzQzOwkJaWYgKGN1cnJfcG9zICZndDs9IGVuZF9wb3MpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkJbGluZV9lbmQgPSBzdHJjaHIoY3Vycl9wb3MsICYjMzk7XG4mIzM5Oyk7CiYjNDM7CQlpZiAoIWxpbmVfZW5kKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCWlmIChzc2NhbmYoY3Vycl9wb3MsICYjMzQ7JTMxcyAlbHUga0ImIzM0OywgbmFtZSwgJmFtcDt2YWx1ZSkgIT0gMikKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQlsZW4gPSBzdHJsZW4obmFtZSk7CiYjNDM7CQlpZiAobmFtZVtsZW4gLSAxXSAhPSAmIzM5OzomIzM5OyB8fCBzdHJuY21wKG5hbWUsIHNtYXBzX3JvbGx1cF9zdGF0X25hbWVzW3N0YXRdLCBsZW4gLSAxKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQlzdGF0cy0mZ3Q7dmFsdWVzW3N0YXRdID0gdmFsdWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogLyogVGhyZWFkIHN5bmNocm9uaXphdGlvbiByb3V0aW5lcyAqLwogc3RhdGljIHZvaWQgd2FpdF9mb3Jfc3RhdGUoc3RydWN0IHZtYV9tb2RpZmllcl9pbmZvICptb2RfaW5mbywgZW51bSB0ZXN0X3N0YXRlIHN0YXRlKQogewpAQCAtMzk3LDYgJiM0Mzs1MDksNDEgQEAgc3RhdGljIGJvb2wgcHJpbnRfYm91bmRhcmllc19vbihib29sIGNvbmRpdGlvbiwgY29uc3QgY2hhciAqdGl0bGUsCiAJcmV0dXJuIGNvbmRpdGlvbjsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHByaW50X3NtYXBzX3JvbGx1cF9zdGF0cyhjb25zdCBjaGFyICp0aXRsZSwgRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZiwKJiM0MzsJCQkJICAgICBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpzdGF0cykKJiM0Mzt7CiYjNDM7CXByaW50ZigmIzM0OyVzJiMzNDssIHRpdGxlKTsKJiM0MzsJZm9yIChpbnQgc3RhdCA9IDA7IHN0YXQgJmx0OyBBUlJBWV9TSVpFKHNtYXBzX3JvbGx1cF9zdGF0X25hbWVzKTsgc3RhdCYjNDM7JiM0MzspCiYjNDM7CQlwcmludGYoJiMzNDslNjRzICVsdSBrQlxuJiMzNDssIHNtYXBzX3JvbGx1cF9zdGF0X25hbWVzW3N0YXRdLCBzdGF0cy0mZ3Q7dmFsdWVzW3N0YXRdKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgY21wX3NtYXBzX3JvbGx1cF9zdGF0KHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKnMxLAomIzQzOwkJCQkgIHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKnMyLAomIzQzOwkJCQkgIGVudW0gc21hcHNfcm9sbHVwX3N0YXQgc3RhdCkKJiM0Mzt7CiYjNDM7CXJldHVybiBzMS0mZ3Q7dmFsdWVzW3N0YXRdID09IHMyLSZndDt2YWx1ZXNbc3RhdF07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGNvbXBhcmVfc21hcHNfcm9sbHVwKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsCiYjNDM7CQkJCSBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpleHBlY3RlZCwKJiM0MzsJCQkJIHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKmFjdHVhbCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIENsZWFuL2RpcnR5IG1ldHJpY3MgbWlnaHQgY2hhbmdlIGJ1dCBQc3MtcmVsYXRlZCBvbmVzCiYjNDM7CSAqIHNob3VsZCBzdGF5IGNvbnN0YW50LgomIzQzOwkgKi8KJiM0MzsJaWYgKGNtcF9zbWFwc19yb2xsdXBfc3RhdChleHBlY3RlZCwgYWN0dWFsLCBQc3MpICZhbXA7JmFtcDsKJiM0MzsJICAgIGNtcF9zbWFwc19yb2xsdXBfc3RhdChleHBlY3RlZCwgYWN0dWFsLCBQc3NfQW5vbikgJmFtcDsmYW1wOwomIzQzOwkgICAgY21wX3NtYXBzX3JvbGx1cF9zdGF0KGV4cGVjdGVkLCBhY3R1YWwsIFBzc19GaWxlKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBjbXBfc21hcHNfcm9sbHVwX3N0YXQoZXhwZWN0ZWQsIGFjdHVhbCwgUHNzX1NobWVtKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlwcmludF9zbWFwc19yb2xsdXBfc3RhdHMoJiMzNDtFeHBlY3RlZCBzdGF0czomIzM0Oywgc2VsZiwgZXhwZWN0ZWQpOwomIzQzOwlwcmludF9zbWFwc19yb2xsdXBfc3RhdHMoJiMzNDtBY3R1YWwgc3RhdHM6JiMzNDssIHNlbGYsIGFjdHVhbCk7CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCByZXBvcnRfdGVzdF9zdGFydChjb25zdCBjaGFyICpuYW1lLCBib29sIHZlcmJvc2UpCiB7CiAJaWYgKHZlcmJvc2UpCkBAIC01NzIsNiAmIzQzOzcxOSw3IEBAIEZJWFRVUkVfU0VUVVAocHJvY19tYXBzX3JhY2UpCiAJdW5zaWduZWQgbG9uZyBmaXJzdF9tYXBfYWRkcjsKIAl1bnNpZ25lZCBsb25nIGxhc3RfbWFwX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBkdXJhdGlvbl9zZWM7CiYjNDM7CWNoYXIgcm9sbHVwX2ZuYW1lWzMyXTsKIAljaGFyIGZuYW1lWzMyXTsKIAogCXNlbGYtJmd0O3BhZ2Vfc2l6ZSA9ICh1bnNpZ25lZCBsb25nKXN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKQEAgLTY0OSw2ICYjNDM7Nzk3LDkgQEAgRklYVFVSRV9TRVRVUChwcm9jX21hcHNfcmFjZSkKIAkJYnJlYWs7CiAJY2FzZSBTTUFQUzoKIAkJc3ByaW50ZihmbmFtZSwgJiMzNDsvcHJvYy8lZC9zbWFwcyYjMzQ7LCBzZWxmLSZndDtwaWQpOwomIzQzOwkJc3ByaW50Zihyb2xsdXBfZm5hbWUsICYjMzQ7L3Byb2MvJWQvc21hcHNfcm9sbHVwJiMzNDssIHNlbGYtJmd0O3BpZCk7CiYjNDM7CQlzZWxmLSZndDtyb2xsdXBfZmQgPSBvcGVuKHJvbGx1cF9mbmFtZSwgT19SRE9OTFkpOwomIzQzOwkJQVNTRVJUX05FKHNlbGYtJmd0O3JvbGx1cF9mZCwgLTEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlrc2Z0X2V4aXRfZmFpbCgpOwpAQCAtNzExLDYgJiM0Mzs4NjIsOCBAQCBGSVhUVVJFX1RFQVJET1dOKHByb2NfbWFwc19yYWNlKQogCWZvciAoaW50IGkgPSAwOyBpICZsdDsgc2VsZi0mZ3Q7dm1hX2NvdW50OyBpJiM0MzsmIzQzOykKIAkJbXVubWFwKHNlbGYtJmd0O21vZF9pbmZvLSZndDtjaGlsZF9tYXBwZWRfYWRkcltpXSwgc2VsZi0mZ3Q7cGFnZV9zaXplKTsKIAljbG9zZShzZWxmLSZndDttYXBzX2ZkKTsKJiM0MzsJaWYgKHNlbGYtJmd0O21hcHNfZmlsZSA9PSBTTUFQUykKJiM0MzsJCWNsb3NlKHNlbGYtJmd0O3JvbGx1cF9mZCk7CiAJd2FpdHBpZChzZWxmLSZndDtwaWQsICZhbXA7c3RhdHVzLCAwKTsKIAltdW5tYXAoc2VsZi0mZ3Q7bW9kX2luZm8sIHNlbGYtJmd0O3NoYXJlZF9tZW1fc2l6ZSk7CiB9CkBAIC03MjMsNiAmIzQzOzg3Niw3IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9zcGxpdCkKIAlzdHJ1Y3QgbGluZV9jb250ZW50IHNwbGl0X2ZpcnN0X2xpbmU7CiAJc3RydWN0IGxpbmVfY29udGVudCByZXN0b3JlZF9sYXN0X2xpbmU7CiAJc3RydWN0IGxpbmVfY29udGVudCByZXN0b3JlZF9maXJzdF9saW5lOwomIzQzOwlzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIG9yaWdfc3RhdHM7CiAKIAl3YWl0X2Zvcl9zdGF0ZShtb2RfaW5mbywgU0VUVVBfUkVBRFkpOwogCkBAIC03MzYsNiAmIzQzOzg5MCw4IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9zcGxpdCkKIAlyZXBvcnRfdGVzdF9zdGFydCgmIzM0O1RlYXJpbmcgZnJvbSBzcGxpdCYjMzQ7LCBzZWxmLSZndDt2ZXJib3NlKTsKIAlBU1NFUlRfVFJVRShjYXB0dXJlX21vZF9wYXR0ZXJuKHNlbGYsICZhbXA7c3BsaXRfbGFzdF9saW5lLCAmYW1wO3NwbGl0X2ZpcnN0X2xpbmUsCiAJCQkJCSZhbXA7cmVzdG9yZWRfbGFzdF9saW5lLCAmYW1wO3Jlc3RvcmVkX2ZpcnN0X2xpbmUpKTsKJiM0MzsJaWYgKHNlbGYtJmd0O21hcHNfZmlsZSA9PSBTTUFQUykKJiM0MzsJCUFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCAmYW1wO29yaWdfc3RhdHMpKTsKIAogCS8qIE5vdyBzdGFydCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZm9yIHNlbGYtJmd0O2R1cmF0aW9uX3NlYyAqLwogCXNpZ25hbF9zdGF0ZShtb2RfaW5mbywgVEVTVF9SRUFEWSk7CkBAIC03OTksNiAmIzQzOzk1NSwxMSBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fc3BsaXQpCiAJCQkJICAgICB2bWFfZW5kID09IHNlbGYtJmd0O2xhc3RfbGluZS5lbmRfYWRkcikgfHwKIAkJCQkgICAgKHZtYV9zdGFydCA9PSBzcGxpdF9maXJzdF9saW5lLnN0YXJ0X2FkZHIgJmFtcDsmYW1wOwogCQkJCSAgICAgdm1hX2VuZCA9PSBzcGxpdF9maXJzdF9saW5lLmVuZF9hZGRyKSk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgc3RhdHM7CiYjNDM7CiYjNDM7CQkJQVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsICZhbXA7c3RhdHMpKTsKJiM0MzsJCQlBU1NFUlRfVFJVRShjb21wYXJlX3NtYXBzX3JvbGx1cChzZWxmLCAmYW1wO29yaWdfc3RhdHMsICZhbXA7c3RhdHMpKTsKIAkJfQogCQljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQ19DT0FSU0UsICZhbXA7ZW5kX3RzKTsKIAkJZW5kX3Rlc3RfaXRlcmF0aW9uKCZhbXA7ZW5kX3RzLCBzZWxmLSZndDt2ZXJib3NlKTsKQEAgLTgxNyw2ICYjNDM7OTc4LDcgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3Jlc2l6ZSkKIAlzdHJ1Y3QgbGluZV9jb250ZW50IHNocnVua19maXJzdF9saW5lOwogCXN0cnVjdCBsaW5lX2NvbnRlbnQgcmVzdG9yZWRfbGFzdF9saW5lOwogCXN0cnVjdCBsaW5lX2NvbnRlbnQgcmVzdG9yZWRfZmlyc3RfbGluZTsKJiM0MzsJc3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyBvcmlnX3N0YXRzOwogCiAJd2FpdF9mb3Jfc3RhdGUobW9kX2luZm8sIFNFVFVQX1JFQURZKTsKIApAQCAtODMwLDYgJiM0Mzs5OTIsOCBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fcmVzaXplKQogCXJlcG9ydF90ZXN0X3N0YXJ0KCYjMzQ7VGVhcmluZyBmcm9tIHJlc2l6ZSYjMzQ7LCBzZWxmLSZndDt2ZXJib3NlKTsKIAlBU1NFUlRfVFJVRShjYXB0dXJlX21vZF9wYXR0ZXJuKHNlbGYsICZhbXA7c2hydW5rX2xhc3RfbGluZSwgJmFtcDtzaHJ1bmtfZmlyc3RfbGluZSwKIAkJCQkJJmFtcDtyZXN0b3JlZF9sYXN0X2xpbmUsICZhbXA7cmVzdG9yZWRfZmlyc3RfbGluZSkpOwomIzQzOwlpZiAoc2VsZi0mZ3Q7bWFwc19maWxlID09IFNNQVBTKQomIzQzOwkJQVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsICZhbXA7b3JpZ19zdGF0cykpOwogCiAJLyogTm93IHN0YXJ0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBmb3Igc2VsZi0mZ3Q7ZHVyYXRpb25fc2VjICovCiAJc2lnbmFsX3N0YXRlKG1vZF9pbmZvLCBURVNUX1JFQURZKTsKQEAgLTg4MCw2ICYjNDM7MTA0NCwxMSBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fcmVzaXplKQogCQkJQVNTRVJUX1RSVUUodm1hX3N0YXJ0ID09IHNlbGYtJmd0O2xhc3RfbGluZS5zdGFydF9hZGRyICZhbXA7JmFtcDsKIAkJCQkgICAgKHZtYV9lbmQgLSB2bWFfc3RhcnQgPT0gc2VsZi0mZ3Q7cGFnZV9zaXplICogMyB8fAogCQkJCSAgICAgdm1hX2VuZCAtIHZtYV9zdGFydCA9PSBzZWxmLSZndDtwYWdlX3NpemUpKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJc3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyBzdGF0czsKJiM0MzsKJiM0MzsJCQlBU1NFUlRfVFJVRShwYXJzZV9zbWFwc19yb2xsdXAoc2VsZiwgJmFtcDtzdGF0cykpOwomIzQzOwkJCUFTU0VSVF9UUlVFKGNvbXBhcmVfc21hcHNfcm9sbHVwKHNlbGYsICZhbXA7b3JpZ19zdGF0cywgJmFtcDtzdGF0cykpOwogCQl9CiAJCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDX0NPQVJTRSwgJmFtcDtlbmRfdHMpOwogCQllbmRfdGVzdF9pdGVyYXRpb24oJmFtcDtlbmRfdHMsIHNlbGYtJmd0O3ZlcmJvc2UpOwpAQCAtODk4LDYgJiM0MzsxMDY3LDcgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3JlbWFwKQogCXN0cnVjdCBsaW5lX2NvbnRlbnQgcmVtYXBwZWRfZmlyc3RfbGluZTsKIAlzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2xhc3RfbGluZTsKIAlzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2ZpcnN0X2xpbmU7CiYjNDM7CXN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgb3JpZ19zdGF0czsKIAogCXdhaXRfZm9yX3N0YXRlKG1vZF9pbmZvLCBTRVRVUF9SRUFEWSk7CiAKQEAgLTkxMSw2ICYjNDM7MTA4MSw4IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9yZW1hcCkKIAlyZXBvcnRfdGVzdF9zdGFydCgmIzM0O1RlYXJpbmcgZnJvbSByZW1hcCYjMzQ7LCBzZWxmLSZndDt2ZXJib3NlKTsKIAlBU1NFUlRfVFJVRShjYXB0dXJlX21vZF9wYXR0ZXJuKHNlbGYsICZhbXA7cmVtYXBwZWRfbGFzdF9saW5lLCAmYW1wO3JlbWFwcGVkX2ZpcnN0X2xpbmUsCiAJCQkJCSZhbXA7cmVzdG9yZWRfbGFzdF9saW5lLCAmYW1wO3Jlc3RvcmVkX2ZpcnN0X2xpbmUpKTsKJiM0MzsJaWYgKHNlbGYtJmd0O21hcHNfZmlsZSA9PSBTTUFQUykKJiM0MzsJCUFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCAmYW1wO29yaWdfc3RhdHMpKTsKIAogCS8qIE5vdyBzdGFydCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZm9yIHNlbGYtJmd0O2R1cmF0aW9uX3NlYyAqLwogCXNpZ25hbF9zdGF0ZShtb2RfaW5mbywgVEVTVF9SRUFEWSk7CkBAIC05NjMsNiAmIzQzOzExMzUsMTEgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3JlbWFwKQogCQkJCSAgICAgdm1hX2VuZCAtIHZtYV9zdGFydCA9PSBzZWxmLSZndDtwYWdlX3NpemUgKiAzKSB8fAogCQkJCSAgICAodm1hX3N0YXJ0ID09IHNlbGYtJmd0O2xhc3RfbGluZS5zdGFydF9hZGRyICYjNDM7IHNlbGYtJmd0O3BhZ2Vfc2l6ZSAmYW1wOyZhbXA7CiAJCQkJICAgICB2bWFfZW5kIC0gdm1hX3N0YXJ0ID09IHNlbGYtJmd0O3BhZ2Vfc2l6ZSkpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIHN0YXRzOwomIzQzOwomIzQzOwkJCUFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCAmYW1wO3N0YXRzKSk7CiYjNDM7CQkJQVNTRVJUX1RSVUUoY29tcGFyZV9zbWFwc19yb2xsdXAoc2VsZiwgJmFtcDtvcmlnX3N0YXRzLCAmYW1wO3N0YXRzKSk7CiAJCX0KIAkJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUNfQ09BUlNFLCAmYW1wO2VuZF90cyk7CiAJCWVuZF90ZXN0X2l0ZXJhdGlvbigmYW1wO2VuZF90cywgc2VsZi0mZ3Q7dmVyYm9zZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE4OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFdmFsdWF0aW5nIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzIGluIHRoZSBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gZHVlIHRvIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMuIExldCYjMzk7cyBkaWcgaW4uCgpUaGUgcGF0Y2ggdG91Y2hlcyBgZnMvcHJvYy90YXNrX21tdS5jYCBhbmQgYSBzZWxmdGVzdCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuY2AuIFRoZSBjb3JlIGNoYW5nZXMgc2VlbSB0byBiZSBpbiBgZnMvcHJvYy90YXNrX21tdS5jYC4gTXkgaW5pdGlhbCByZWFkIHNob3dzOgoKKiAgIEEgbG90IG9mIHJlZmFjdG9yaW5nIGFuZCBjbGVhbnVwIHdpdGhpbiB0aGUgYHByb2NfbWFwc19sb2NraW5nX2N0eGAgaGVscGVyIGZ1bmN0aW9ucy4gVGhleSYjMzk7dmUgYmVlbiBzaW1wbGlmaWVkLCBpbmxpbmVkLCBhbmQgc29tZSByZW1vdmVkLiBUaGlzIGRvZXNuJiMzOTt0IHNjcmVhbSAmIzM0O3VuaW5pdGlhbGl6ZWQgbWVtb3J5LCYjMzQ7IGJ1dCBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBzdWJ0bGUgZWZmZWN0cyBvZiB0aGUgcmVmYWN0b3JpbmcuCgoqICAgYHNtYXBfZ2F0aGVyX3N0YXRzYCBoYXMgc2VlbiBzb21lIGNoYW5nZXMsIG5vdGFibHkgdG8gaG93IHRoZSBgc3RhcnRgIHBhcmFtZXRlciBpcyBoYW5kbGVkLiBUaGVyZSYjMzk7cyBsb2dpYyB0byBjaGVjayBpZiBgc3RhcnRgIGlzIHdpdGhpbiB0aGUgVk1BIHJhbmdlLiBUaGlzIGlzIGludGVyZXN0aW5nOiBgY29uc3QgYm9vbCBpc19wYXJ0aWFsID0gc3RhcnQgJmd0OyB2bWEtJmd0O3ZtX3N0YXJ0O2AgYW5kIHRoZSBjaGVja3MgYGlmIChzdGFydCAmbHQ7IHZtYS0mZ3Q7dm1fc3RhcnQgfHwgc3RhcnQgJmd0Oz0gdm1hLSZndDt2bV9lbmQpIHJldHVybjtgIFRoZSB1c2Ugb2YgYHdhbGtfcGFnZV9yYW5nZV92bWFgIHdpdGggYSBwb3RlbnRpYWxseSBzaGlmdGVkIGBzdGFydGAgaXMgc29tZXRoaW5nIEkgbmVlZCB0byBjYXJlZnVsbHkgY29uc2lkZXI7IGFueSBhc3N1bXB0aW9ucyBhYm91dCBpbml0aWFsIG1lbW9yeSBzdGF0ZSBpbiB0aGF0IGZ1bmN0aW9uIGNvdWxkIGJlIGFmZmVjdGVkLgoKKiAgIGBzaG93X3NtYXBzX3JvbGx1cGAgaXMgc3dpdGNoaW5nIHRvIGBwcm9jX2dldF92bWFgIGFuZCBWTUEgbG9ja2luZy9SQ1UgbG9ja2luZywgbW92aW5nIGF3YXkgZnJvbSBob2xkaW5nIHRoZSBgbW1hcF9yZWFkX2xvY2tgIGFjcm9zcyB0aGUgZW50aXJlIHJvbGx1cC4gVGhpcyBpcyBhIGdvb2QgbW92ZSBmb3IgY29uY3VycmVuY3ksIGJ1dCBWTUEgbG9ja2luZyBoYXMgYSBoaXN0b3J5IG9mIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMuIEl0IGluaXRpYWxpemVzIGBzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgbXNzID0ge307YCwgd2hpY2ggaXMgZ29vZCB0byBzZWUgYXMgaXQgemVyb3MgaXQgb3V0LiBPdXRwdXR0aW5nIHdpdGggYF9fc2hvd19zbWFwKG0sICZhbXA7bXNzLCB0cnVlKTtgIHNob3VsZCBiZSBmaW5lLiBUaGUgbW92ZSB0byBhIG1vcmUgZ3JhbnVsYXIgbG9ja2luZyBzY2hlbWUgaXMgcHJvbWlzaW5nIGJ1dCBuZWVkcyBhIHRob3JvdWdoIGluc3BlY3Rpb24uCgoqICAgVmFyaW91cyBgc3RhdGljIGlubGluZWAgZnVuY3Rpb25zIGhhdmUgYmVlbiBjaGFuZ2VkIHRvIGBzdGF0aWNgLiBUaGlzIGlzIGEgY29kZSBzdHlsZSBjaGFuZ2UsIHByb2JhYmx5IG5vdCByZWxldmFudC4KCiogICBUaGUgc2VsZnRlc3RzIGFyZSB1cGRhdGVkIGZvciBjb25jdXJyZW50IHJhY2VzIGludm9sdmluZyBgc21hcHNfcm9sbHVwYC4gR29vZCwgdGhlIHRlc3RpbmcgaXMgYmVpbmcgaW1wcm92ZWQsIGJ1dCBpdCBpbmRpY2F0ZXMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3ZXJlIGlkZW50aWZpZWQ7IHRoaXMgd2FycmFudHMgYSBjbG9zZXIgbG9vayBhdCB0aGUgbG9ja2luZyBjaGFuZ2VzLgoKVG8gY29uZmlybSB0aGUgcG90ZW50aWFsIHJpc2tzLCBJIG5lZWQgdG8gZGVsdmUgaW50byBgc2hvd19zbWFwc19yb2xsdXBgLCBgc21hcF9nYXRoZXJfc3RhdHNgLCBhbmQgYHByb2NfZ2V0X3ZtYWAgaW4gZGV0YWlsLiBJJiMzOTtsbCB1c2UgY29kZXNlYXJjaCwgZ3JlcHBlciwgb3IgZGlyZWN0bHkgcmVhZCB0aGUgZmlsZXMgaWYgbmVjZXNzYXJ5LCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBtZW1vcnkgb3BlcmF0aW9ucywgbG9ja2luZyBzY2hlbWVzLCBhbmQgYXNzdW1wdGlvbnMgYWJvdXQgaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSBhbnkgYXJlYXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBleHBvc2VkIGR1ZSB0byB0aGUgY2hhbmdlcywgZXNwZWNpYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGNvbmN1cnJlbnQgYWNjZXNzIGhpZ2hsaWdodGVkIGJ5IHRoZSBzZWxmdGVzdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2NfZ2V0X3ZtYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYz0xOTU9c3RhdGljIHZvaWQgcmVhY3F1aXJlX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTIwNC1cbmZzL3Byb2MvdGFza19tbXUuYzoyMDU6c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJvY19nZXRfdm1hKHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwcG9zKVxuZnMvcHJvYy90YXNrX21tdS5jLTIwNi17XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTIzNz1zdGF0aWMgdm9pZCAqbV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcHBvcylcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjcyLVxuZnMvcHJvYy90YXNrX21tdS5jOjI3MzpcdHJldHVybiBwcm9jX2dldF92bWEobSwgcHBvcyk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjc0LX1cbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9Mjc2PXN0YXRpYyB2b2lkICptX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI4MS1cdH1cbmZzL3Byb2MvdGFza19tbXUuYzoyODI6XHRyZXR1cm4gcHJvY19nZXRfdm1hKG0sIHBwb3MpO1xuZnMvcHJvYy90YXNrX21tdS5jLTI4My19XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTEzNjY9c3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTEzOTEtXHR2bWFfaXRlcl9pbml0KFx1MDAyNnByaXYtXHUwMDNlaXRlciwgbW0sIDApO1xuZnMvcHJvYy90YXNrX21tdS5jOjEzOTI6XHR2bWEgPSBwcm9jX2dldF92bWEobSwgXHUwMDI2cG9zKTtcbmZzL3Byb2MvdGFza19tbXUuYy0xMzkzLVx0aWYgKHVubGlrZWx5KCF2bWEpKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xNDM4LVx0XHR9XG5mcy9wcm9jL3Rhc2tfbW11LmM6MTQzOTpcdFx0dm1hID0gcHJvY19nZXRfdm1hKG0sIFx1MDAyNnBvcyk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMTQ0MC1cdH1cbi0tXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYz0xNzM9c3RhdGljIGludCBzaG93X21hcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKl9wKVxuLS1cbmZzL3Byb2MvdGFza19ub21tdS5jLTE3Ny1cbmZzL3Byb2MvdGFza19ub21tdS5jOjE3ODpzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcm9jX2dldF92bWEoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxuZnMvcHJvYy90YXNrX25vbW11LmMtMTc5LVx0XHRcdFx0XHRcdGxvZmZfdCAqcHBvcylcbi0tXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYz0xOTI9c3RhdGljIHZvaWQgKm1fc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBwb3MpXG4tLVxuZnMvcHJvYy90YXNrX25vbW11LmMtMTk3LVxuZnMvcHJvYy90YXNrX25vbW11LmM6MTk4Olx0LyogU2VlIHByb2NfZ2V0X3ZtYSgpLiBaZXJvIGF0IHRoZSBzdGFydCBvciBhZnRlciBsc2Vlay4gKi9cbmZzL3Byb2MvdGFza19ub21tdS5jLTE5OS1cdGlmIChsYXN0X2FkZHIgPT0gLTFVTClcbi0tXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYy0yMjItXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYzoyMjM6XHRyZXR1cm4gcHJvY19nZXRfdm1hKHByaXYsIHBwb3MpO1xuZnMvcHJvYy90YXNrX25vbW11LmMtMjI0LX1cbi0tXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYz0yNDA9c3RhdGljIHZvaWQgKm1fbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKl9wLCBsb2ZmX3QgKnBwb3MpXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYy0yNDEte1xuZnMvcHJvYy90YXNrX25vbW11LmM6MjQyOlx0cmV0dXJuIHByb2NfZ2V0X3ZtYShtLVx1MDAzZXByaXZhdGUsIHBwb3MpO1xuZnMvcHJvYy90YXNrX25vbW11LmMtMjQzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNDMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IEFjY291bnRpbmcgaW4gYGZzL3Byb2MvdGFza19tbXUuY2AqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBkaWdnaW5nIGludG8gdGhlIG1lbW9yeSBhY2NvdW50aW5nIGRldGFpbHMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBwcm9jZXNzIGluZm9ybWF0aW9uIGhhbmRsaW5nLiBNeSBndXQgdGVsbHMgbWUgdGhlIGtleSBwaWVjZXMgYXJlIGdvaW5nIHRvIGJlIGFyb3VuZCB0aGUgYHNob3dfc21hcHNfcm9sbHVwYCBmdW5jdGlvbiBhbmQgdGhlIGBwcm9jX2dldF92bWFgIGZ1bmN0aW9uIGluIGBmcy9wcm9jL3Rhc2tfbW11LmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBmdW5jdGlvbnMgaW50ZXJhY3QgdG8gY2FsY3VsYXRlIGFuZCBwcmVzZW50IHRoZSBwZXItcHJvY2VzcyBtZW1vcnkgc3RhdGlzdGljcyB2aWEgL3Byb2MvW3BpZF0vc21hcHMgYW5kIC9wcm9jL1twaWRdL21hcHMuIEkmIzM5O20gZXNwZWNpYWxseSBjdXJpb3VzIGFib3V0IHdoZXJlIHRoZSByb2xsLXVwIGxvZ2ljIGlzIGhhbmRsZWQuIEFtIEkgcmlnaHQgaW4gdGhpbmtpbmcgdGhlIGBzaG93X3NtYXBzX3JvbGx1cGAgZnVuY3Rpb24gd291bGQgYmUgd2hlcmUgbW9zdCBvZiB0aGUgd29yayBoYXBwZW5zIGFnZ3JlZ2F0aW5nIFZNQSBzdGF0cz8gQW5kIGBwcm9jX2dldF92bWFgIGlzIHRoZSBWTUEgaXRlcmF0b3IuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBwb3RlbnRpYWwgaW5hY2N1cmFjaWVzIGluIHRoZSBhY2NvdW50aW5nLCBvciBtYXliZSBzb21lIGxlc3MtdGhhbi1vYnZpb3VzIGVkZ2UgY2FzZXMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgaW50ZXJlc3RpbmcgdG8gdW5wYWNrLiBUaGlzIGZlZWxzIGxpa2UgdGhlIHJpZ2h0IHBsYWNlIHRvIGJlZ2luLCB0byBwaW5wb2ludCBzb21lIG1lbW9yeSBhY2NvdW50aW5nIG9kZGl0aWVzIHRoYXQgSSYjMzk7dmUgc2VlbiBpbiB0aGUgcGFzdC4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBzb3VyY2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTU6XHRzdGF0aWMgdm9pZCByZWFjcXVpcmVfcmN1KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbiAxOTY6XHR7XG4gMTk3Olx0XHRpZiAocHJpdi1cdTAwM2Vsb2NrX2N0eC5tbWFwX2xvY2tlZClcbiAxOTg6XHRcdFx0cmV0dXJuO1xuIDE5OTpcdFxuIDIwMDpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDIwMTpcdFx0LyogUmVpbml0aWFsaXplIHRoZSBpdGVyYXRvci4gKi9cbiAyMDI6XHRcdHZtYV9pdGVyX3NldChcdTAwMjZwcml2LVx1MDAzZWl0ZXIsIHByaXYtXHUwMDNlbG9ja19jdHgubG9ja2VkX3ZtYS1cdTAwM2V2bV9lbmQpO1xuIDIwMzpcdH1cbiAyMDQ6XHRcbiAyMDU6XHRzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcm9jX2dldF92bWEoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBwb3MpXG4gMjA2Olx0e1xuIDIwNzpcdFx0c3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2ID0gbS1cdTAwM2Vwcml2YXRlO1xuIDIwODpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gMjA5Olx0XG4gMjEwOlx0cmV0cnk6XG4gMjExOlx0XHR2bWEgPSBnZXRfbmV4dF92bWEocHJpdiwgKnBwb3MpO1xuIDIxMjpcdFx0LyogRUlOVFIgb2YgRUFHQUlOIGlzIHBvc3NpYmxlICovXG4gMjEzOlx0XHRpZiAoSVNfRVJSKHZtYSkpIHtcbiAyMTQ6XHRcdFx0aWYgKFBUUl9FUlIodm1hKSA9PSAtRUFHQUlOIFx1MDAyNlx1MDAyNiBmYWxsYmFja190b19tbWFwX2xvY2socHJpdiwgKnBwb3MpKVxuIDIxNTpcdFx0XHRcdGdvdG8gcmV0cnk7XG4gMjE2Olx0XG4gMjE3Olx0XHRcdHJldHVybiB2bWE7XG4gMjE4Olx0XHR9XG4gMjE5Olx0XG4gMjIwOlx0XHQvKiBTdG9yZSBwcmV2aW91cyBwb3NpdGlvbiB0byBiZSBhYmxlIHRvIHJlc3RhcnQgaWYgbmVlZGVkICovXG4gMjIxOlx0XHRwcml2LVx1MDAzZWxhc3RfcG9zID0gKnBwb3M7XG4gMjIyOlx0XHRpZiAodm1hKSB7XG4gMjIzOlx0XHRcdC8qXG4gMjI0Olx0XHRcdCAqIFRyYWNrIHRoZSBlbmQgb2YgdGhlIHJlcG9ydGVkIHZtYSB0byBlbnN1cmUgcG9zaXRpb24gY2hhbmdlc1xuIDIyNTpcdFx0XHQgKiBldmVuIGlmIHByZXZpb3VzIHZtYSB3YXMgbWVyZ2VkIHdpdGggdGhlIG5leHQgdm1hIGFuZCB3ZVxuIDIyNjpcdFx0XHQgKiBmb3VuZCB0aGUgZXh0ZW5kZWQgdm1hIHdpdGggdGhlIHNhbWUgdm1fc3RhcnQuXG4gMjI3Olx0XHRcdCAqL1xuIDIyODpcdFx0XHQqcHBvcyA9IHZtYS1cdTAwM2V2bV9lbmQ7XG4gMjI5Olx0XHR9IGVsc2Uge1xuIDIzMDpcdFx0XHQqcHBvcyA9IFNFTlRJTkVMX1ZNQV9HQVRFO1xuIDIzMTpcdFx0XHR2bWEgPSBnZXRfZ2F0ZV92bWEocHJpdi1cdTAwM2Vsb2NrX2N0eC5tbSk7XG4gMjMyOlx0XHR9XG4gMjMzOlx0XG4gMjM0Olx0XHRyZXR1cm4gdm1hO1xuIDIzNTpcdH1cbiAyMzY6XHRcbiAyMzc6XHRzdGF0aWMgdm9pZCAqbV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcHBvcylcbiAyMzg6XHR7XG4gMjM5Olx0XHRzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYgPSBtLVx1MDAzZXByaXZhdGU7XG4gMjQwOlx0XHRzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eDtcbiAyNDE6XHRcdGxvZmZfdCBsYXN0X2FkZHIgPSAqcHBvcztcbiAyNDI6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIDI0MzpcdFxuIDI0NDpcdFx0LyogU2VlIG1fbmV4dCgpLiBaZXJvIGF0IHRoZSBzdGFydCBvciBhZnRlciBsc2Vlay4gKi9cbiAyNDU6XHRcdGlmIChsYXN0X2FkZHIgPT0gU0VOVElORUxfVk1BX0VORClcbiAyNDY6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMjQ3Olx0XG4gMjQ4Olx0XHRwcml2LVx1MDAzZXRhc2sgPSBnZXRfcHJvY190YXNrKHByaXYtXHUwMDNlaW5vZGUpO1xuIDI0OTpcdFx0aWYgKCFwcml2LVx1MDAzZXRhc2spXG4gMjUwOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FU1JDSCk7XG4gMjUxOlx0XG4gMjUyOlx0XHRsb2NrX2N0eCA9IFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHg7XG4gMjUzOlx0XHRtbSA9IGxvY2tfY3R4LVx1MDAzZW1tO1xuIDI1NDpcdFx0aWYgKCFtbSB8fCAhbW1nZXRfbm90X3plcm8obW0pKSB7XG4gMjU1Olx0XHRcdHB1dF90YXNrX3N0cnVjdChwcml2LVx1MDAzZXRhc2spO1xuIDI1NjpcdFx0XHRwcml2LVx1MDAzZXRhc2sgPSBOVUxMO1xuIDI1NzpcdFx0XHRyZXR1cm4gTlVMTDtcbiAyNTg6XHRcdH1cbiAyNTk6XHRcbiAyNjA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAyNjE6XHRcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcbiAyNjI6XHRcdC8qXG4gMjYzOlx0XHQgKiBSZXNldCBjdXJyZW50IHBvc2l0aW9uIGlmIGxhc3RfYWRkciB3YXMgc2V0IGJlZm9yZVxuIDI2NDpcdFx0ICogYW5kIGl0JiMzOTtzIG5vdCBhIHNlbnRpbmVsLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY0OQoJCQkJCQkJb3V0cHV0OiAxOTUKCQkJCQkJCXRob3VnaHRzOiA3ODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGZvciBLTVNBTiBJbXBsaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZXhwZXJ0IGV5ZSBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBwb3RlbnRpYWwgZm9yIEtNU0FOIGlzc3VlcyDigJMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGggcmVnYXJkcyB0byBgL3Byb2MvJHBpZC9zbWFwc19yb2xsdXBgLCBhbmQgSSBuZWVkIHRvIGJlICpzdXJlKiB3ZSYjMzk7cmUgbm90IGludHJvZHVjaW5nIGEgdnVsbmVyYWJpbGl0eS4KCkZpcnN0LCBJJiMzOTttIG5vdGluZyB0aGUgbG9ja2luZyBjaGFuZ2VzIHdpdGhpbiBgdGFza19tbXUuY2AuIFRoZSByZWZhY3RvcmluZyBvZiBgcHJvY19tYXBzX2xvY2tpbmdfY3R4YCBzb3VuZHMgbGlrZSBhIGdvb2Qgb3B0aW1pemF0aW9uLCBidXQgSSBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZSByZW1vdmFsIG9mIHRoZXNlIHdyYXBwZXJzIGhhc24mIzM5O3QgbGVmdCBhbnkgZ2Fwcy4gVGhlIHByaW1hcnkgY29uY2VybiBoZXJlIGlzIHJhY2UgY29uZGl0aW9ucyBvciBVQUYgd2hpY2ggd2lsbCBiZSBjYXVnaHQgYnkgS0FTQU4vTE9DS0RFUCwgYnV0IG5lZWRzIHRvIGJlIGV2YWx1YXRlZCBhcyBhIGZpcnN0IHN0ZXAuCgpOZXh0LCB0aGUgYHNtYXBfZ2F0aGVyX3N0YXRzYCBmdW5jdGlvbi4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYm91bmRzIGNoZWNrLCB0aGUgdXNlIG9mIGB3YWxrX3BhZ2VfcmFuZ2Vfdm1hYCwgYW5kIHRoZSAqZXhwbGljaXQqIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIGBtc3NgIHN0cnVjdHVyZSAoIGBzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgbXNzID0ge307YCApLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduIOKAkyB0aGF0IHplcm8taW5pdGlhbGl6YXRpb24gKmd1YXJhbnRlZXMqIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoYXQgZnVuY3Rpb24uIEl0IGlzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IEtBU0FOIHdpbGwgYWxzbyBjYXRjaCBPT0IgaWYgc29tZXRoaW5nIGlzIHdyaXR0ZW4gdG8gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVnaW9uLgoKTm93LCBgc2hvd19zbWFwc19yb2xsdXBgOiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIHN3aXRjaGluZyB0byBwZXItVk1BIGxvY2tzIGlzIGEgcG90ZW50aWFsbHkgZ3JlYXQgb3B0aW1pemF0aW9uLCBidXQgSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgbG9ja2luZyBpcyBjb3JyZWN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByYWNlcy4gVGhlIGhhbmRsaW5nIG9mIGxvY2sgY29udGVudGlvbiBhbmQgZmFsbGJhY2sgaXMgYWxzbyBrZXkuIEFnYWluLCB0aGUgZXhwbGljaXQgemVyby1pbml0aWFsaXphdGlvbiBvZiBgbXNzYCBpcyBhIG1ham9yIHBvc2l0aXZlIGhlcmUuIEkmIzM5O20gYWxzbyByZXZpZXdpbmcgaG93IHRoZSBkYXRhIGlzIGJlaW5nIGZvcm1hdHRlZCBhbmQgd3JpdHRlbiB0byB0aGUgYHNlcV9maWxlYCBidWZmZXIsIGFuZCBpdCBhbGwgbG9va3Mgc2FmZSBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSB6ZXJvaW5nLgoKRmluYWxseSwgdGhlIHNlbGZ0ZXN0IGluIGBwcm9jLW1hcHMtcmFjZS5jYCBpcyB2ZXJ5IGltcG9ydGFudCB0byBlbnN1cmUgY29uY3VycmVudCBvcGVyYXRpb24gZG9lc24mIzM5O3QgaW50cm9kdWNlIHJhY2VzLCBlc3BlY2lhbGx5IHdpdGggVk1BIHNwbGl0cy9yZXNpemVzL3JlbWFwcy4gVGhpcyBpcyB0aGUgdGVzdGluZyB0aGF0IG5lZWRzIHRvIGNvbmZpcm0gbm8gZGF0YSByYWNlcyB3ZXJlIGludHJvZHVjZWQuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBhcmUgdGhlcmUgYW55ICp1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyo/IEkmIzM5O3ZlIHN5c3RlbWF0aWNhbGx5IHJldmlld2VkIHRoZSBwYXRjaC4gVGhlIGFuc3dlciBpcyAqbm8qLiBUaGVyZSBhcmUgKm5vKiBuZXcgYWxsb2NhdGlvbnMgb3Igc3RydWN0dXJlcyB0aGF0IGFyZW4mIzM5O3QgYmVpbmcgemVyb2VkLCB0aGUgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSBpcyBlaXRoZXIgZXhwbGljaXRseSBmb3JtYXR0ZWQgb3IgcGFzc2VzIHRocm91Z2ggYGNvcHlfdG9fdXNlcmAsIGFuZCB0aGVyZSYjMzk7cyBubyBldmlkZW5jZSBvZiB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgYnl0ZXMgYmVpbmcgY29waWVkLiBBbGwgY2hhbmdlcyBhcmUgYWJvdXQgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uLCBhbG9uZyB3aXRoIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMuIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBwYXJ0aWFsIHN0cnVjdCBjb3BpZXMsIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJpc2tzIHRoYXQgS01TQU4gaXMgdGFyZ2V0ZWQgYXQuCgpTbywgYWNjb3JkaW5nIHRvIHRoZSByZXF1aXJlbWVudHMsIG15IGp1ZGdtZW50IGlzIHRoYXQgYE5lZWRzS01TQU49ZmFsc2VgLiBNeSBhbmFseXNpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgY29kZSBjaGFuZ2VzIHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHdoaWNoIGFyZSBjYXVnaHQgYnkgS0FTQU4vTE9DS0RFUCksIGFuZCBhbGwgc3RydWN0dXJlcyBhcmUgYmVpbmcgZnVsbHkgaW5pdGlhbGl6ZWQuIEkmIzM5O20gcmVhZHkgdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGxvY2tpbmcgYW5kIGl0ZXJhdGlvbiBsb2dpYyBpbiAvcHJvYy9cdTAwM2NwaWRcdTAwM2Uvc21hcHNfcm9sbHVwIGFuZCByZWxhdGVkIHRhc2tfbW11LmMgZnVuY3Rpb25zIChtaWdyYXRpbmcgc2hvd19zbWFwc19yb2xsdXAgdG8gdXNlIHBlci1WTUEgbG9ja2luZyB2aWEgcHJvY19nZXRfdm1hIGFuZCBzaW1wbGlmeWluZyBsb2NraW5nIGNvbnRleHQgaGVscGVyIGZ1bmN0aW9ucykuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHN0YXRpc3RpY3Mgc3RydWN0dXJlcyAoZS5nLiwgc3RydWN0IG1lbV9zaXplX3N0YXRzIG1zcyA9IHt9KSBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGFuZCBvdXRwdXQgaXMgZm9ybWF0dGVkIGFzIEFTQ0lJIHRleHQgaW50byBzZXFfZmlsZSBidWZmZXJzLiBUaGVyZSBhcmUgbm8gbmV3IG9yIG1vZGlmaWVkIHJhdyBzdHJ1Y3QgY29waWVzIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBvciBwYWRkaW5nLCBhbmQgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBjb25jdXJyZW5jeSBvciBsaWZldGltZSBpc3N1ZXMgaW50cm9kdWNlZCBieSBjaGFuZ2VzIHRvIFZNQSBsb2NraW5nL1JDVSB0cmF2ZXJzYWwgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBsb2NraW5nIGFuZCBpdGVyYXRpb24gbG9naWMgaW4gL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3NtYXBzX3JvbGx1cCBhbmQgcmVsYXRlZCB0YXNrX21tdS5jIGZ1bmN0aW9ucyAobWlncmF0aW5nIHNob3dfc21hcHNfcm9sbHVwIHRvIHVzZSBwZXItVk1BIGxvY2tpbmcgdmlhIHByb2NfZ2V0X3ZtYSBhbmQgc2ltcGxpZnlpbmcgbG9ja2luZyBjb250ZXh0IGhlbHBlciBmdW5jdGlvbnMpLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzdGF0aXN0aWNzIHN0cnVjdHVyZXMgKGUuZy4sIHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyBtc3MgPSB7fSkgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgb3V0cHV0IGlzIGZvcm1hdHRlZCBhcyBBU0NJSSB0ZXh0IGludG8gc2VxX2ZpbGUgYnVmZmVycy4gVGhlcmUgYXJlIG5vIG5ldyBvciBtb2RpZmllZCByYXcgc3RydWN0IGNvcGllcyB0byB1c2VyIHNwYWNlLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgcGFkZGluZywgYW5kIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgaXNzdWVzIGludHJvZHVjZWQgYnkgY2hhbmdlcyB0byBWTUEgbG9ja2luZy9SQ1UgdHJhdmVyc2FsIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjM4OjA5LjY4NDIwMzYzMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTk3MTA0Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfRlNcIixcbiAgICBcIlBST0NfUEFHRV9NT05JVE9SXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2hvd19zbWFwc19yb2xsdXBcIixcbiAgICBcInNtYXBfZ2F0aGVyX3N0YXRzXCIsXG4gICAgXCJzaG93X3NtYXBcIixcbiAgICBcImRvX3Byb2NtYXBfcXVlcnlcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBsb2NraW5nIGFuZCBpdGVyYXRpb24gbG9naWMgaW4gL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2Uvc21hcHNfcm9sbHVwIGFuZCByZWxhdGVkIHRhc2tfbW11LmMgZnVuY3Rpb25zIChtaWdyYXRpbmcgc2hvd19zbWFwc19yb2xsdXAgdG8gdXNlIHBlci1WTUEgbG9ja2luZyB2aWEgcHJvY19nZXRfdm1hIGFuZCBzaW1wbGlmeWluZyBsb2NraW5nIGNvbnRleHQgaGVscGVyIGZ1bmN0aW9ucykuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHN0YXRpc3RpY3Mgc3RydWN0dXJlcyAoZS5nLiwgc3RydWN0IG1lbV9zaXplX3N0YXRzIG1zcyA9IHt9KSBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGFuZCBvdXRwdXQgaXMgZm9ybWF0dGVkIGFzIEFTQ0lJIHRleHQgaW50byBzZXFfZmlsZSBidWZmZXJzLiBUaGVyZSBhcmUgbm8gbmV3IG9yIG1vZGlmaWVkIHJhdyBzdHJ1Y3QgY29waWVzIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBvciBwYWRkaW5nLCBhbmQgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBjb25jdXJyZW5jeSBvciBsaWZldGltZSBpc3N1ZXMgaW50cm9kdWNlZCBieSBjaGFuZ2VzIHRvIFZNQSBsb2NraW5nL1JDVSB0cmF2ZXJzYWwgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyAvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS9zbWFwc19yb2xsdXAgYW5kIHNtYXBzIGl0ZXJhdGlvbiBsb2dpYyBpbiB0YXNrX21tdS5jIHRvIHVzZSBwZXItVk1BIGxvY2tzIHVuZGVyIFJDVSBpbnN0ZWFkIG9mIGFjcXVpcmluZyBtbWFwX2xvY2sgdXBmcm9udCwgYWRqdXN0cyBwYXJ0aWFsIFZNQSBzdGF0IGdhdGhlcmluZyBpbiBzbWFwX2dhdGhlcl9zdGF0cygpLCBhbmQgc2ltcGxpZmllcyBwcm9jX21hcHMgbG9ja2luZyBoZWxwZXJzLiBUaGlzIHJlYWNoYWJsZSBjb3JlIE1NL3Byb2NmcyBsb2dpYyBpcyB3b3J0aCBmdXp6aW5nIGZvciBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjM4OjA5LjY4NDIxMjk0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgwMzc3MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjU1YTdhY2JhN2I4YmYxYjc0ODdmYjE1OTA3NjAwNjBlNDc4OTBiNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDA5OjM4OjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuY1xcbmluZGV4IGU2NzFiNGZkOGRlZGQuLjY0MWExNTViMGM2MTMgMTAwNjQ0XFxuLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jXFxuKysrIGIvZnMvcHJvYy90YXNrX21tdS5jXFxuQEAgLTEzMCwyOCArMTMwLDEyIEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfdGFza19tZW1wb2xpY3koc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbiB9XFxuICNlbmRpZlxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgbG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXFxuLXtcXG4tXFx0aW50IHJldCA9IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKGxvY2tfY3R4LVxcdTAwM2VtbSk7XFxuLVxcbi1cXHRpZiAoIXJldClcXG4tXFx0XFx0bG9ja19jdHgtXFx1MDAzZW1tYXBfbG9ja2VkID0gdHJ1ZTtcXG4tXFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfY3R4X21tKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxcbitzdGF0aWMgdm9pZCB1bmxvY2tfY3R4X21tKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxcbiB7XFxuIFxcdG1tYXBfcmVhZF91bmxvY2sobG9ja19jdHgtXFx1MDAzZW1tKTtcXG4gXFx0bG9ja19jdHgtXFx1MDAzZW1tYXBfbG9ja2VkID0gZmFsc2U7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJlc2V0X2xvY2tfY3R4KHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxcbi17XFxuLVxcdGxvY2tfY3R4LVxcdTAwM2Vsb2NrZWRfdm1hID0gTlVMTDtcXG4tXFx0bG9ja19jdHgtXFx1MDAzZW1tYXBfbG9ja2VkID0gZmFsc2U7XFxuLX1cXG4tXFxuIHN0YXRpYyB2b2lkIHVubG9ja19jdHhfdm1hKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxcbiB7XFxuIFxcdGlmIChsb2NrX2N0eC1cXHUwMDNlbG9ja2VkX3ZtYSkge1xcbkBAIC0xNjAsMjMgKzE0NCwxMCBAQCBzdGF0aWMgdm9pZCB1bmxvY2tfY3R4X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgbG9ja192bWFfcmFuZ2Uoc3RydWN0IHNlcV9maWxlICptLFxcbi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxcbi17XFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0cmVzZXRfbG9ja19jdHgobG9ja19jdHgpO1xcbi1cXG4tXFx0cmV0dXJuIHRydWU7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfdm1hX3JhbmdlKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxcbitzdGF0aWMgdm9pZCByZXNldF9sb2NrX2N0eChzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcXG4ge1xcbi1cXHRpZiAobG9ja19jdHgtXFx1MDAzZW1tYXBfbG9ja2VkKSB7XFxuLVxcdFxcdHVubG9ja19jdHhfbW0obG9ja19jdHgpO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHR1bmxvY2tfY3R4X3ZtYShsb2NrX2N0eCk7XFxuLVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHR9XFxuK1xcdGxvY2tfY3R4LVxcdTAwM2Vsb2NrZWRfdm1hID0gTlVMTDtcXG4rXFx0bG9ja19jdHgtXFx1MDAzZW1tYXBfbG9ja2VkID0gZmFsc2U7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmdldF9uZXh0X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXFxuQEAgLTE5Niw3ICsxNjcsNyBAQCBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnZXRfbmV4dF92bWEoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxcbiBcXHRyZXR1cm4gdm1hO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgZmFsbGJhY2tfdG9fbW1hcF9sb2NrKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcXG4rc3RhdGljIGJvb2wgZmFsbGJhY2tfdG9fbW1hcF9sb2NrKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcXG4gXFx0XFx0XFx0XFx0XFx0IGxvZmZfdCBwb3MpXFxuIHtcXG4gXFx0c3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHggPSBcXHUwMDI2cHJpdi1cXHUwMDNlbG9ja19jdHg7XFxuQEAgLTIxMyw3ICsxODQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmFsbGJhY2tfdG9fbW1hcF9sb2NrKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBkcm9wX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXFxuK3N0YXRpYyB2b2lkIGRyb3BfcmN1KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcXG4ge1xcbiBcXHRpZiAocHJpdi1cXHUwMDNlbG9ja19jdHgubW1hcF9sb2NrZWQpXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMjIxLDcgKzE5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkcm9wX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhY3F1aXJlX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXFxuK3N0YXRpYyB2b2lkIHJlYWNxdWlyZV9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbiB7XFxuIFxcdGlmIChwcml2LVxcdTAwM2Vsb2NrX2N0eC5tbWFwX2xvY2tlZClcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0yODYsMTMgKzI1Nyw4IEBAIHN0YXRpYyB2b2lkICptX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwcG9zKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFsb2NrX3ZtYV9yYW5nZShtLCBsb2NrX2N0eCkpIHtcXG4tXFx0XFx0bW1wdXQobW0pO1xcbi1cXHRcXHRwdXRfdGFza19zdHJ1Y3QocHJpdi1cXHUwMDNldGFzayk7XFxuLVxcdFxcdHByaXYtXFx1MDAzZXRhc2sgPSBOVUxMO1xcbi1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVFIpO1xcbi1cXHR9XFxuLVxcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcXG4gXFx0LypcXG4gXFx0ICogUmVzZXQgY3VycmVudCBwb3NpdGlvbiBpZiBsYXN0X2FkZHIgd2FzIHNldCBiZWZvcmVcXG4gXFx0ICogYW5kIGl0J3Mgbm90IGEgc2VudGluZWwuXFxuQEAgLTMyNSw3ICsyOTEsMTIgQEAgc3RhdGljIHZvaWQgbV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0cmVsZWFzZV90YXNrX21lbXBvbGljeShwcml2KTtcXG4tXFx0dW5sb2NrX3ZtYV9yYW5nZShcXHUwMDI2cHJpdi1cXHUwMDNlbG9ja19jdHgpO1xcbitcXHRpZiAocHJpdi1cXHUwMDNlbG9ja19jdHgubW1hcF9sb2NrZWQpIHtcXG4rXFx0XFx0dW5sb2NrX2N0eF9tbShcXHUwMDI2cHJpdi1cXHUwMDNlbG9ja19jdHgpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR1bmxvY2tfY3R4X3ZtYShcXHUwMDI2cHJpdi1cXHUwMDNlbG9ja19jdHgpO1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0fVxcbiBcXHRtbXB1dChtbSk7XFxuIFxcdHB1dF90YXNrX3N0cnVjdChwcml2LVxcdTAwM2V0YXNrKTtcXG4gXFx0cHJpdi1cXHUwMDNldGFzayA9IE5VTEw7XFxuQEAgLTUxOCwyMSArNDg5LDYgQEAgc3RhdGljIGludCBwaWRfbWFwc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRcXHRQUk9DTUFQX1FVRVJZX1ZNQV9GTEFHU1xcdFxcdFxcdFxcdFxcXFxcXG4gKVxcbiBcXG4tc3RhdGljIGludCBxdWVyeV92bWFfc2V0dXAoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXFxuLXtcXG4tXFx0cmVzZXRfbG9ja19jdHgobG9ja19jdHgpO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIHF1ZXJ5X3ZtYV90ZWFyZG93bihzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcXG4te1xcbi1cXHRpZiAobG9ja19jdHgtXFx1MDAzZW1tYXBfbG9ja2VkKVxcbi1cXHRcXHR1bmxvY2tfY3R4X21tKGxvY2tfY3R4KTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHR1bmxvY2tfY3R4X3ZtYShsb2NrX2N0eCk7XFxuLX1cXG4tXFxuIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnF1ZXJ5X3ZtYV9maW5kX2J5X2FkZHIoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyKVxcbiB7XFxuQEAgLTY1MywxMiArNjA5LDcgQEAgc3RhdGljIGludCBkb19wcm9jbWFwX3F1ZXJ5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB2b2lkIF9fdXNlciAqdWFyZylcXG4gXFx0aWYgKCFtbSB8fCAhbW1nZXRfbm90X3plcm8obW0pKVxcbiBcXHRcXHRyZXR1cm4gLUVTUkNIO1xcbiBcXG4tXFx0ZXJyID0gcXVlcnlfdm1hX3NldHVwKFxcdTAwMjZsb2NrX2N0eCk7XFxuLVxcdGlmIChlcnIpIHtcXG4tXFx0XFx0bW1wdXQobW0pO1xcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHR9XFxuLVxcbitcXHRyZXNldF9sb2NrX2N0eChcXHUwMDI2bG9ja19jdHgpO1xcbiBcXHR2bWEgPSBxdWVyeV9tYXRjaGluZ192bWEoXFx1MDAyNmxvY2tfY3R4LCBrYXJnLnF1ZXJ5X2FkZHIsIGthcmcucXVlcnlfZmxhZ3MpO1xcbiBcXHRpZiAoSVNfRVJSKHZtYSkpIHtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUih2bWEpO1xcbkBAIC03MzIsNyArNjgzLDEwIEBAIHN0YXRpYyBpbnQgZG9fcHJvY21hcF9xdWVyeShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdm9pZCBfX3VzZXIgKnVhcmcpXFxuIFxcdFxcdHZtX2ZpbGUgPSBnZXRfZmlsZSh2bWEtXFx1MDAzZXZtX2ZpbGUpO1xcbiBcXG4gXFx0LyogdW5sb2NrIHZtYSBvciBtbWFwX2xvY2ssIGFuZCBwdXQgbW1fc3RydWN0IGJlZm9yZSBjb3B5aW5nIGRhdGEgdG8gdXNlciAqL1xcbi1cXHRxdWVyeV92bWFfdGVhcmRvd24oXFx1MDAyNmxvY2tfY3R4KTtcXG4rXFx0aWYgKGxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxcbitcXHRcXHR1bmxvY2tfY3R4X21tKFxcdTAwMjZsb2NrX2N0eCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dW5sb2NrX2N0eF92bWEoXFx1MDAyNmxvY2tfY3R4KTtcXG4gXFx0bW1wdXQobW0pO1xcbiBcXG4gXFx0aWYgKGthcmcuYnVpbGRfaWRfc2l6ZSkge1xcbkBAIC03NzMsNyArNzI3LDEwIEBAIHN0YXRpYyBpbnQgZG9fcHJvY21hcF9xdWVyeShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdm9pZCBfX3VzZXIgKnVhcmcpXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gb3V0Olxcbi1cXHRxdWVyeV92bWFfdGVhcmRvd24oXFx1MDAyNmxvY2tfY3R4KTtcXG4rXFx0aWYgKGxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxcbitcXHRcXHR1bmxvY2tfY3R4X21tKFxcdTAwMjZsb2NrX2N0eCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dW5sb2NrX2N0eF92bWEoXFx1MDAyNmxvY2tfY3R4KTtcXG4gXFx0bW1wdXQobW0pO1xcbiBvdXRfZmlsZTpcXG4gXFx0aWYgKHZtX2ZpbGUpXFxuQEAgLTEyNjMsNyArMTIyMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc21hcHNfc2htZW1fd2Fsa192bWFfbG9ja19vcHMgPSB7XFxuIFxcdC53YWxrX2xvY2tcXHRcXHQ9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSxcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqXFxuIGdldF9zbWFwc193YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXFxuIHtcXG4gXFx0aWYgKHByaXYtXFx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxcbkBAIC0xMjcxLDcgKzEyMjgsNyBAQCBnZXRfc21hcHNfd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbiBcXHRyZXR1cm4gXFx1MDAyNnNtYXBzX3dhbGtfdm1hX2xvY2tfb3BzO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKlxcbiBnZXRfc21hcHNfc2htZW1fd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbiB7XFxuIFxcdGlmIChwcml2LVxcdTAwM2Vsb2NrX2N0eC5tbWFwX2xvY2tlZClcXG5AQCAtMTI3OSwyMCArMTIzNiwyNyBAQCBnZXRfc21hcHNfc2htZW1fd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbiBcXHRyZXR1cm4gXFx1MDAyNnNtYXBzX3NobWVtX3dhbGtfdm1hX2xvY2tfb3BzO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBHYXRoZXIgbWVtIHN0YXRzIGZyb20gQHZtYSB3aXRoIHRoZSBpbmRpY2F0ZWQgYmVnaW5uaW5nXFxuLSAqIGFkZHJlc3MgQHN0YXJ0LCBhbmQga2VlcCB0aGVtIGluIEBtc3MuXFxuKy8qKlxcbisgKiBzbWFwX2dhdGhlcl9zdGF0cygpIC0gR2F0aGVyIG1lbSBzdGF0cyBmcm9tIEB2bWEuXFxuKyAqIEBwcml2OiBwcm9jIG1hcHMgcHJpdmF0ZSBzdGF0ZS5cXG4rICogQHZtYTogVGhlIFZNQSB0byBnYXRoZXIgc3RhdHMgZm9yLlxcbisgKiBAbXNzOiBUaGUgYWNjdW11bGF0ZWQgc3RhdHMuXFxuKyAqIEBzdGFydDogVGhlIGFkZHJlc3MgZnJvbSB3aGljaCB0byBzdGFydC5cXG4gICpcXG4tICogVXNlIHZtX3N0YXJ0IG9mIEB2bWEgYXMgdGhlIGJlZ2lubmluZyBhZGRyZXNzIGlmIEBzdGFydCBpcyAwLlxcbisgKiBUaGlzIGdhdGhlcnMgc3RhdHMgZm9yIHRoZSB3aG9sZSBvZiB0aGUgVk1BIHVubGVzcyB0aGUgbG9jayB3YXMgZHJvcHBlZFxcbisgKiBhbmQgVk1BIGdyZXcgb3IgZ290IG1lcmdlZCBhbmQgd2UgZm91bmQgaXQgYWdhaW4sIGluIHdoaWNoIGNhc2Ugd2Ugb25seVxcbisgKiBnYXRoZXIgc3RhdHMgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIFZNQSByYW5nZS5cXG4gICovXFxuIHN0YXRpYyB2b2lkIHNtYXBfZ2F0aGVyX3N0YXRzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcXG4gXFx0XFx0XFx0ICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyAqbXNzLCB1bnNpZ25lZCBsb25nIHN0YXJ0KVxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgKm1zcyxcXG4rXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBzdGFydClcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyA9IGdldF9zbWFwc193YWxrX29wcyhwcml2KTtcXG4rXFx0Y29uc3QgYm9vbCBpc19wYXJ0aWFsID0gc3RhcnQgXFx1MDAzZSB2bWEtXFx1MDAzZXZtX3N0YXJ0O1xcbiBcXG4gXFx0LyogSW52YWxpZCBzdGFydCAqL1xcbi1cXHRpZiAoc3RhcnQgXFx1MDAzZT0gdm1hLVxcdTAwM2V2bV9lbmQpXFxuK1xcdGlmIChzdGFydCBcXHUwMDNjIHZtYS1cXHUwMDNldm1fc3RhcnQgfHwgc3RhcnQgXFx1MDAzZT0gdm1hLVxcdTAwM2V2bV9lbmQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmICh2bWEgPT0gZ2V0X2dhdGVfdm1hKHByaXYtXFx1MDAzZWxvY2tfY3R4Lm1tKSlcXG5AQCAtMTMxMiwyMCArMTI3NiwxNyBAQCBzdGF0aWMgdm9pZCBzbWFwX2dhdGhlcl9zdGF0cyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXFxuIFxcdFxcdCAqIFVubGVzcyB3ZSBrbm93IHRoYXQgdGhlIHNobWVtIG9iamVjdCAob3IgdGhlIHBhcnQgbWFwcGVkIGJ5XFxuIFxcdFxcdCAqIG91ciBWTUEpIGhhcyBubyBzd2FwcGVkIG91dCBwYWdlcyBhdCBhbGwuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHR1bnNpZ25lZCBsb25nIHNobWVtX3N3YXBwZWQgPSBzaG1lbV9zd2FwX3VzYWdlKHZtYSk7XFxuK1xcdFxcdGNvbnN0IHVuc2lnbmVkIGxvbmcgc2htZW1fc3dhcHBlZCA9IHNobWVtX3N3YXBfdXNhZ2Uodm1hKTtcXG4rXFx0XFx0Y29uc3QgYm9vbCBzaGFyZWRfb3Jfcm8gPSB2bWFfdGVzdCh2bWEsIFZNQV9TSEFSRURfQklUKSB8fFxcbitcXHRcXHRcXHRcXHRcXHQgICF2bWFfdGVzdCh2bWEsIFZNQV9XUklURV9CSVQpO1xcbiBcXG4tXFx0XFx0aWYgKCFzdGFydCBcXHUwMDI2XFx1MDAyNiAoIXNobWVtX3N3YXBwZWQgfHwgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9TSEFSRUQpIHx8XFxuLVxcdFxcdFxcdFxcdFxcdCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1dSSVRFKSkpIHtcXG4rXFx0XFx0aWYgKCFpc19wYXJ0aWFsIFxcdTAwMjZcXHUwMDI2ICghc2htZW1fc3dhcHBlZCB8fCBzaGFyZWRfb3Jfcm8pKVxcbiBcXHRcXHRcXHRtc3MtXFx1MDAzZXN3YXAgKz0gc2htZW1fc3dhcHBlZDtcXG4tXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRvcHMgPSBnZXRfc21hcHNfc2htZW1fd2Fsa19vcHMocHJpdik7XFxuLVxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFzdGFydClcXG4tXFx0XFx0d2Fsa19wYWdlX3ZtYSh2bWEsIG9wcywgbXNzKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHR3YWxrX3BhZ2VfcmFuZ2Uodm1hLVxcdTAwM2V2bV9tbSwgc3RhcnQsIHZtYS1cXHUwMDNldm1fZW5kLCBvcHMsIG1zcyk7XFxuK1xcdHdhbGtfcGFnZV9yYW5nZV92bWEodm1hLCBzdGFydCwgdm1hLVxcdTAwM2V2bV9lbmQsIG9wcywgbXNzKTtcXG4gXFxuIFxcdHJlYWNxdWlyZV9yY3UocHJpdik7XFxuIH1cXG5AQCAtMTM4MCw3ICsxMzQxLDcgQEAgc3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHY7XFxuIFxcdHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyBtc3MgPSB7fTtcXG4gXFxuLVxcdHNtYXBfZ2F0aGVyX3N0YXRzKHByaXYsIHZtYSwgXFx1MDAyNm1zcywgMCk7XFxuK1xcdHNtYXBfZ2F0aGVyX3N0YXRzKHByaXYsIHZtYSwgXFx1MDAyNm1zcywgdm1hLVxcdTAwM2V2bV9zdGFydCk7XFxuIFxcbiBcXHRzaG93X21hcF92bWEobSwgdm1hKTtcXG4gXFxuQEAgLTE0MDUsMTIgKzEzNjYsMTQgQEAgc3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbiBzdGF0aWMgaW50IHNob3dfc21hcHNfcm9sbHVwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4ge1xcbiBcXHRzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYgPSBtLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrX2N0eDtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBsb2NrX2N0eC1cXHUwMDNlbW07XFxuIFxcdHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyBtc3MgPSB7fTtcXG4tXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LVxcdTAwM2Vsb2NrX2N0eC5tbTtcXG4rXFx0dW5zaWduZWQgbG9uZyBsYXN0X3ZtYV9lbmQgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIHZtYV9zdGFydCA9IDA7XFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbi1cXHR1bnNpZ25lZCBsb25nIHZtYV9zdGFydCA9IDAsIGxhc3Rfdm1hX2VuZCA9IDA7XFxuK1xcdGxvZmZfdCBwb3MgPSAwO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4tXFx0Vk1BX0lURVJBVE9SKHZtaSwgbW0sIDApO1xcbiBcXG4gXFx0cHJpdi1cXHUwMDNldGFzayA9IGdldF9wcm9jX3Rhc2socHJpdi1cXHUwMDNlaW5vZGUpO1xcbiBcXHRpZiAoIXByaXYtXFx1MDAzZXRhc2spXFxuQEAgLTE0MjEsODkgKzEzODQsNjAgQEAgc3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuIFxcdFxcdGdvdG8gb3V0X3B1dF90YXNrO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXQgPSBsb2NrX2N0eF9tbShcXHUwMDI2cHJpdi1cXHUwMDNlbG9ja19jdHgpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRnb3RvIG91dF9wdXRfbW07XFxuLVxcbiBcXHRob2xkX3Rhc2tfbWVtcG9saWN5KHByaXYpO1xcbi1cXHR2bWEgPSB2bWFfbmV4dChcXHUwMDI2dm1pKTtcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRyZXNldF9sb2NrX2N0eChsb2NrX2N0eCk7XFxuIFxcbitcXHR2bWFfaXRlcl9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VpdGVyLCBtbSwgMCk7XFxuK1xcdHZtYSA9IHByb2NfZ2V0X3ZtYShtLCBcXHUwMDI2cG9zKTtcXG4gXFx0aWYgKHVubGlrZWx5KCF2bWEpKVxcbiBcXHRcXHRnb3RvIGVtcHR5X3NldDtcXG4gXFxuLVxcdHZtYV9zdGFydCA9IHZtYS1cXHUwMDNldm1fc3RhcnQ7XFxuLVxcdGRvIHtcXG4tXFx0XFx0c21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCBcXHUwMDI2bXNzLCAwKTtcXG4tXFx0XFx0bGFzdF92bWFfZW5kID0gdm1hLVxcdTAwM2V2bV9lbmQ7XFxuK1xcdGlmICghSVNfRVJSKHZtYSkgXFx1MDAyNlxcdTAwMjYgdm1hICE9IGdldF9nYXRlX3ZtYShsb2NrX2N0eC1cXHUwMDNlbW0pKVxcbitcXHRcXHR2bWFfc3RhcnQgPSB2bWEtXFx1MDAzZXZtX3N0YXJ0O1xcbitcXG4rXFx0d2hpbGUgKHZtYSkge1xcbitcXHRcXHRpZiAoSVNfRVJSKHZtYSkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gUFRSX0VSUih2bWEpO1xcbitcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICh2bWEgPT0gZ2V0X2dhdGVfdm1hKGxvY2tfY3R4LVxcdTAwM2VtbSkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0LypcXG4tXFx0XFx0ICogUmVsZWFzZSBtbWFwX2xvY2sgdGVtcG9yYXJpbHkgaWYgc29tZW9uZSB3YW50cyB0b1xcbi1cXHRcXHQgKiBhY2Nlc3MgaXQgZm9yIHdyaXRlIHJlcXVlc3QuXFxuK1xcdFxcdCAqIElmIGFmdGVyIHJldGFraW5nIHRoZSBsb2NrLCBhbHJlYWR5IHJlcG9ydGVkIFZNQSBncmV3IG9yXFxuK1xcdFxcdCAqIG1lcmdlZCB3aXRoIHRoZSBuZXh0IG9uZSwgc21hcF9nYXRoZXJfc3RhdHMoKSB3aWxsIGdhdGhlclxcbitcXHRcXHQgKiBzdGF0cyBmb3IgdGhlIHJlbWFpbmluZyBwb3J0aW9uIGJ5IHN0YXJ0aW5nIGF0IGxhc3Rfdm1hX2VuZC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChtbWFwX2xvY2tfaXNfY29udGVuZGVkKG1tKSkge1xcbi1cXHRcXHRcXHR2bWFfaXRlcl9pbnZhbGlkYXRlKFxcdTAwMjZ2bWkpO1xcbi1cXHRcXHRcXHR1bmxvY2tfY3R4X21tKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrX2N0eCk7XFxuLVxcdFxcdFxcdHJldCA9IGxvY2tfY3R4X21tKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrX2N0eCk7XFxuLVxcdFxcdFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0XFx0XFx0cmVsZWFzZV90YXNrX21lbXBvbGljeShwcml2KTtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXRfcHV0X21tO1xcbi1cXHRcXHRcXHR9XFxuK1xcdFxcdHNtYXBfZ2F0aGVyX3N0YXRzKHByaXYsIHZtYSwgXFx1MDAyNm1zcywgbGFzdF92bWFfZW5kKTtcXG4rXFx0XFx0bGFzdF92bWFfZW5kID0gdm1hLVxcdTAwM2V2bV9lbmQ7XFxuIFxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBJZiB0aGUgVk1BIGxvY2sgaXMgbm90IHRha2VuLCB3ZSBob2xkIHRoZSBvZnRlbiBjb250ZW5kZWRcXG4rXFx0XFx0ICogbW1hcCBsb2NrLiBUaGlzIGNhbiBoYXBwZW4gaWYgd2UgaGFkIHRvIGZhbGwgYmFjayB0byB0aGVcXG4rXFx0XFx0ICogbW1hcCBsb2NrLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBUbyByZWxpZXZlIHByZXNzdXJlLCBjaGVjayBpZiBpdCBpcyBpbmRlZWQgY29udGVuZGVkLCB0aGVuXFxuK1xcdFxcdCAqIHRlbXBvcmFyaWx5IHJlbGVhc2UgaXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobG9ja19jdHgtXFx1MDAzZW1tYXBfbG9ja2VkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBtbWFwX2xvY2tfaXNfY29udGVuZGVkKGxvY2tfY3R4LVxcdTAwM2VtbSkpIHtcXG4rXFx0XFx0XFx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XFxuIFxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIEFmdGVyIGRyb3BwaW5nIHRoZSBsb2NrLCB0aGVyZSBhcmUgZm91ciBjYXNlcyB0b1xcbi1cXHRcXHRcXHQgKiBjb25zaWRlci4gU2VlIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSBmb3IgZXhwbGFuYXRpb24uXFxuLVxcdFxcdFxcdCAqXFxuLVxcdFxcdFxcdCAqICAgKy0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0rXFxuLVxcdFxcdFxcdCAqICAgfCBWTUExIHwgVk1BMiB8IFZNQTMgICAgICB8XFxuLVxcdFxcdFxcdCAqICAgKy0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0rXFxuLVxcdFxcdFxcdCAqICAgfCAgICAgIHwgICAgICB8ICAgICAgICAgICB8XFxuLVxcdFxcdFxcdCAqICA0ayAgICAgOGsgICAgIDE2ayAgICAgICAgIDQwMGtcXG4tXFx0XFx0XFx0ICpcXG4tXFx0XFx0XFx0ICogU3VwcG9zZSB3ZSBkcm9wIHRoZSBsb2NrIGFmdGVyIHJlYWRpbmcgVk1BMiBkdWUgdG9cXG4tXFx0XFx0XFx0ICogY29udGVudGlvbiwgdGhlbiB3ZSBnZXQ6XFxuLVxcdFxcdFxcdCAqXFxuLVxcdFxcdFxcdCAqXFx0bGFzdF92bWFfZW5kID0gMTZrXFxuLVxcdFxcdFxcdCAqXFxuLVxcdFxcdFxcdCAqIDEpIFZNQTIgaXMgZnJlZWQsIGJ1dCBWTUEzIGV4aXN0czpcXG4tXFx0XFx0XFx0ICpcXG4tXFx0XFx0XFx0ICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBWTUEzLlxcbi1cXHRcXHRcXHQgKiAgICBJbiB0aGlzIGNhc2UsIGp1c3QgY29udGludWUgZnJvbSBWTUEzLlxcbi1cXHRcXHRcXHQgKlxcbi1cXHRcXHRcXHQgKiAyKSBWTUEyIHN0aWxsIGV4aXN0czpcXG4tXFx0XFx0XFx0ICpcXG4tXFx0XFx0XFx0ICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBWTUEzLlxcbi1cXHRcXHRcXHQgKiAgICBJbiB0aGlzIGNhc2UsIGp1c3QgY29udGludWUgZnJvbSBWTUEzLlxcbi1cXHRcXHRcXHQgKlxcbi1cXHRcXHRcXHQgKiAzKSBObyBtb3JlIFZNQXMgY2FuIGJlIGZvdW5kOlxcbi1cXHRcXHRcXHQgKlxcbi1cXHRcXHRcXHQgKiAgICB2bWFfbmV4dCh2bWkpIHdpbGwgcmV0dXJuIE5VTEwuXFxuLVxcdFxcdFxcdCAqICAgIE5vIG1vcmUgdGhpbmdzIHRvIGRvLCBqdXN0IGJyZWFrLlxcbi1cXHRcXHRcXHQgKlxcbi1cXHRcXHRcXHQgKiA0KSAobGFzdF92bWFfZW5kIC0gMSkgaXMgdGhlIG1pZGRsZSBvZiBhIHZtYSAoVk1BJyk6XFxuLVxcdFxcdFxcdCAqXFxuLVxcdFxcdFxcdCAqICAgIHZtYV9uZXh0KHZtaSkgd2lsbCByZXR1cm4gVk1BJyB3aG9zZSByYW5nZVxcbi1cXHRcXHRcXHQgKiAgICBjb250YWlucyBsYXN0X3ZtYV9lbmQuXFxuLVxcdFxcdFxcdCAqICAgIEl0ZXJhdGUgVk1BJyBmcm9tIGxhc3Rfdm1hX2VuZC5cXG4rXFx0XFx0XFx0ICogRXZlbiB0aG91Z2ggd2UgcHJldmlvdXNseSBmZWxsIGJhY2sgdG8gbW1hcCBsb2NrLFxcbitcXHRcXHRcXHQgKiB3ZSB0cnkgdGFraW5nIFZNQSBsb2NrIGZvciB0aGUgbmV4dCBWTUEsIHNpbmNlIGl0XFxuK1xcdFxcdFxcdCAqIG1pZ2h0IG5vdCBiZSB1bmRlciBtb2RpZmljYXRpb24uIEluIHRoZSB3b3JzdCBjYXNlXFxuK1xcdFxcdFxcdCAqIHdlIHdpbGwgZmFsbCBiYWNrIHRvIG1tYXAgbG9jayBhZ2Fpbi5cXG4gXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdHZtYSA9IHZtYV9uZXh0KFxcdTAwMjZ2bWkpO1xcbi1cXHRcXHRcXHQvKiBDYXNlIDMgYWJvdmUgKi9cXG4tXFx0XFx0XFx0aWYgKCF2bWEpXFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXG4tXFx0XFx0XFx0LyogQ2FzZSAxIGFuZCAyIGFib3ZlICovXFxuLVxcdFxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX3N0YXJ0IFxcdTAwM2U9IGxhc3Rfdm1hX2VuZCkge1xcbi1cXHRcXHRcXHRcXHRzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsIFxcdTAwMjZtc3MsIDApO1xcbi1cXHRcXHRcXHRcXHRsYXN0X3ZtYV9lbmQgPSB2bWEtXFx1MDAzZXZtX2VuZDtcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdC8qIENhc2UgNCBhYm92ZSAqL1xcbi1cXHRcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9lbmQgXFx1MDAzZSBsYXN0X3ZtYV9lbmQpIHtcXG4tXFx0XFx0XFx0XFx0c21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCBcXHUwMDI2bXNzLCBsYXN0X3ZtYV9lbmQpO1xcbi1cXHRcXHRcXHRcXHRsYXN0X3ZtYV9lbmQgPSB2bWEtXFx1MDAzZXZtX2VuZDtcXG4tXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdFxcdFxcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcXG4rXFx0XFx0XFx0LyogUmVzdW1lIGZyb20gdGhlIGxhc3QgcG9zaXRpb24uICovXFxuK1xcdFxcdFxcdHBvcyA9IGxhc3Rfdm1hX2VuZDtcXG4rXFx0XFx0XFx0dm1hX2l0ZXJfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlaXRlciwgbW0sIHBvcyk7XFxuIFxcdFxcdH1cXG4tXFx0fSBmb3JfZWFjaF92bWEodm1pLCB2bWEpO1xcbitcXHRcXHR2bWEgPSBwcm9jX2dldF92bWEobSwgXFx1MDAyNnBvcyk7XFxuK1xcdH1cXG4gXFxuIGVtcHR5X3NldDpcXG4gXFx0c2hvd192bWFfaGVhZGVyX3ByZWZpeChtLCB2bWFfc3RhcnQsIGxhc3Rfdm1hX2VuZCwgMCwgMCwgMCwgMCk7XFxuQEAgLTE1MTIsMTAgKzE0NDYsMTQgQEAgc3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuIFxcbiBcXHRfX3Nob3dfc21hcChtLCBcXHUwMDI2bXNzLCB0cnVlKTtcXG4gXFxuK291dF91bmxvY2s6XFxuK1xcdGlmIChsb2NrX2N0eC1cXHUwMDNlbW1hcF9sb2NrZWQpIHtcXG4rXFx0XFx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHVubG9ja19jdHhfdm1hKGxvY2tfY3R4KTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdH1cXG4gXFx0cmVsZWFzZV90YXNrX21lbXBvbGljeShwcml2KTtcXG4tXFx0dW5sb2NrX2N0eF9tbShcXHUwMDI2cHJpdi1cXHUwMDNlbG9ja19jdHgpO1xcbi1cXG4tb3V0X3B1dF9tbTpcXG4gXFx0bW1wdXQobW0pO1xcbiBvdXRfcHV0X3Rhc2s6XFxuIFxcdHB1dF90YXNrX3N0cnVjdChwcml2LVxcdTAwM2V0YXNrKTtcXG5AQCAtMTYwNSw3ICsxNTQzLDcgQEAgc3RydWN0IGNsZWFyX3JlZnNfcHJpdmF0ZSB7XFxuIFxcdGVudW0gY2xlYXJfcmVmc190eXBlcyB0eXBlO1xcbiB9O1xcbiBcXG4tc3RhdGljIGlubGluZSBib29sIHB0ZV9pc19waW5uZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxcbitzdGF0aWMgYm9vbCBwdGVfaXNfcGlubmVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXG5AQCAtMTYyMSw4ICsxNTU5LDggQEAgc3RhdGljIGlubGluZSBib29sIHB0ZV9pc19waW5uZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0cmV0dXJuIGZvbGlvX21heWJlX2RtYV9waW5uZWQoZm9saW8pO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlKVxcbitzdGF0aWMgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdFxcdCAgICAgcHRlX3QgKnB0ZSlcXG4ge1xcbiBcXHRpZiAoIXBndGFibGVfc3VwcG9ydHNfc29mdF9kaXJ0eSgpKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTE2NTMsOCArMTU5MSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiB9XFxuIFxcbiAjaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5X3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kcClcXG4rc3RhdGljIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuK1xcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKVxcbiB7XFxuIFxcdHBtZF90IG9sZCwgcG1kID0gKnBtZHA7XFxuIFxcbkBAIC0xNjc5LDggKzE2MTcsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdH1cXG4gfVxcbiAjZWxzZVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHApXFxuK3N0YXRpYyB2b2lkIGNsZWFyX3NvZnRfZGlydHlfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kcClcXG4ge1xcbiB9XFxuICNlbmRpZlxcbkBAIC0xODc5LDcgKzE4MTcsNyBAQCBzdHJ1Y3QgcGFnZW1hcHJlYWQge1xcbiBcXG4gI2RlZmluZSBQTV9FTkRfT0ZfQlVGRkVSICAgIDFcXG4gXFxuLXN0YXRpYyBpbmxpbmUgcGFnZW1hcF9lbnRyeV90IG1ha2VfcG1lKHU2NCBmcmFtZSwgdTY0IGZsYWdzKVxcbitzdGF0aWMgcGFnZW1hcF9lbnRyeV90IG1ha2VfcG1lKHU2NCBmcmFtZSwgdTY0IGZsYWdzKVxcbiB7XFxuIFxcdHJldHVybiAocGFnZW1hcF9lbnRyeV90KSB7IC5wbWUgPSAoZnJhbWUgXFx1MDAyNiBQTV9QRlJBTUVfTUFTSykgfCBmbGFncyB9O1xcbiB9XFxuQEAgLTM0MjEsNyArMzM1OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc2hvd19udW1hX3ZtYV9sb2NrX29wcyA9IHtcXG4gXFx0LndhbGtfbG9jayA9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSxcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqXFxuIGdldF9zaG93X251bWFfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcXG4ge1xcbiBcXHRpZiAocHJpdi1cXHUwMDNlbG9ja19jdHgubW1hcF9sb2NrZWQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuY1xcbmluZGV4IDQxNWVjY2I3MDQ2ODQuLjhkMDBkN2RiMWM2NTIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLW1hcHMtcmFjZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLW1hcHMtcmFjZS5jXFxuQEAgLTgwLDYgKzgwLDYxIEBAIGVudW0gbWFwc19maWxlIHtcXG4gXFxuIHN0cnVjdCB2bWFfbW9kaWZpZXJfaW5mbztcXG4gXFxuK2VudW0gc21hcHNfcm9sbHVwX3N0YXQge1xcbitcXHRSc3MsXFxuK1xcdFBzcyxcXG4rXFx0UHNzX0RpcnR5LFxcbitcXHRQc3NfQW5vbixcXG4rXFx0UHNzX0ZpbGUsXFxuK1xcdFBzc19TaG1lbSxcXG4rXFx0U2hhcmVkX0NsZWFuLFxcbitcXHRTaGFyZWRfRGlydHksXFxuK1xcdFByaXZhdGVfQ2xlYW4sXFxuK1xcdFByaXZhdGVfRGlydHksXFxuK1xcdFJlZmVyZW5jZWQsXFxuK1xcdEFub255bW91cyxcXG4rXFx0S1NNLFxcbitcXHRMYXp5RnJlZSxcXG4rXFx0QW5vbkh1Z2VQYWdlcyxcXG4rXFx0U2htZW1QbWRNYXBwZWQsXFxuK1xcdEZpbGVQbWRNYXBwZWQsXFxuK1xcdFNoYXJlZF9IdWdldGxiLFxcbitcXHRQcml2YXRlX0h1Z2V0bGIsXFxuK1xcdFN3YXAsXFxuK1xcdFN3YXBQc3MsXFxuK1xcdExvY2tlZCxcXG4rXFx0Um9sbHVwRmllbGRDb3VudFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IGNoYXIgKnNtYXBzX3JvbGx1cF9zdGF0X25hbWVzW1JvbGx1cEZpZWxkQ291bnRdID0ge1xcbitcXHRcXFwiUnNzXFxcIixcXG4rXFx0XFxcIlBzc1xcXCIsXFxuK1xcdFxcXCJQc3NfRGlydHlcXFwiLFxcbitcXHRcXFwiUHNzX0Fub25cXFwiLFxcbitcXHRcXFwiUHNzX0ZpbGVcXFwiLFxcbitcXHRcXFwiUHNzX1NobWVtXFxcIixcXG4rXFx0XFxcIlNoYXJlZF9DbGVhblxcXCIsXFxuK1xcdFxcXCJTaGFyZWRfRGlydHlcXFwiLFxcbitcXHRcXFwiUHJpdmF0ZV9DbGVhblxcXCIsXFxuK1xcdFxcXCJQcml2YXRlX0RpcnR5XFxcIixcXG4rXFx0XFxcIlJlZmVyZW5jZWRcXFwiLFxcbitcXHRcXFwiQW5vbnltb3VzXFxcIixcXG4rXFx0XFxcIktTTVxcXCIsXFxuK1xcdFxcXCJMYXp5RnJlZVxcXCIsXFxuK1xcdFxcXCJBbm9uSHVnZVBhZ2VzXFxcIixcXG4rXFx0XFxcIlNobWVtUG1kTWFwcGVkXFxcIixcXG4rXFx0XFxcIkZpbGVQbWRNYXBwZWRcXFwiLFxcbitcXHRcXFwiU2hhcmVkX0h1Z2V0bGJcXFwiLFxcbitcXHRcXFwiUHJpdmF0ZV9IdWdldGxiXFxcIixcXG4rXFx0XFxcIlN3YXBcXFwiLFxcbitcXHRcXFwiU3dhcFBzc1xcXCIsXFxuK1xcdFxcXCJMb2NrZWRcXFwiLFxcbit9O1xcbitcXG4rc3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdmFsdWVzW1JvbGx1cEZpZWxkQ291bnRdO1xcbit9O1xcbitcXG4gRklYVFVSRShwcm9jX21hcHNfcmFjZSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgdm1hX21vZGlmaWVyX2luZm8gKm1vZF9pbmZvO1xcbkBAIC05MSw2ICsxNDYsNyBAQCBGSVhUVVJFKHByb2NfbWFwc19yYWNlKVxcbiBcXHRlbnVtIG1hcHNfZmlsZSBtYXBzX2ZpbGU7XFxuIFxcdGludCBzaGFyZWRfbWVtX3NpemU7XFxuIFxcdGludCBza2lwX3BhZ2VzO1xcbitcXHRpbnQgcm9sbHVwX2ZkO1xcbiBcXHRpbnQgcGFnZV9zaXplO1xcbiBcXHRpbnQgdm1hX2NvdW50O1xcbiBcXHRib29sIHZlcmJvc2U7XFxuQEAgLTEzMiwxMiArMTg4LDEyIEBAIHN0cnVjdCB2bWFfbW9kaWZpZXJfaW5mbyB7XFxuIFxcdHZvaWQgKmNoaWxkX21hcHBlZF9hZGRyW107XFxuIH07XFxuIFxcbi1zdGF0aWMgYm9vbCByZWFkX3BhZ2UoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZixcXG4rc3RhdGljIGJvb2wgcmVhZF9wYWdlKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsIGludCBmZCxcXG4gXFx0XFx0ICAgICAgc3RydWN0IHBhZ2VfY29udGVudCAqcGFnZSlcXG4ge1xcbiBcXHRzc2l6ZV90ICBieXRlc19yZWFkO1xcbiBcXG4tXFx0Ynl0ZXNfcmVhZCA9IHJlYWQoc2VsZi1cXHUwMDNlbWFwc19mZCwgcGFnZS1cXHUwMDNlZGF0YSwgc2VsZi1cXHUwMDNlcGFnZV9zaXplKTtcXG4rXFx0Ynl0ZXNfcmVhZCA9IHJlYWQoZmQsIHBhZ2UtXFx1MDAzZWRhdGEsIHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSk7XFxuIFxcdGlmIChieXRlc19yZWFkIFxcdTAwM2M9IDApXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuQEAgLTE3NSw3ICsyMzEsNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9jb250YWluaW5nX3BhZ2UoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZixcXG4gXFx0XFx0Y2hhciAqY3Vycl9wb3M7XFxuIFxcdFxcdGNoYXIgKmVuZF9wb3M7XFxuIFxcbi1cXHRcXHRpZiAoIXJlYWRfcGFnZShzZWxmLCBcXHUwMDI2c2VsZi1cXHUwMDNlcGFnZTEpKVxcbitcXHRcXHRpZiAoIXJlYWRfcGFnZShzZWxmLCBzZWxmLVxcdTAwM2VtYXBzX2ZkLCBcXHUwMDI2c2VsZi1cXHUwMDNlcGFnZTEpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbiBcXHRcXHRjdXJyX3BvcyA9IHNlbGYtXFx1MDAzZXBhZ2UxLmRhdGE7XFxuQEAgLTIwNSwxMCArMjYxLDExIEBAIHN0YXRpYyBib29sIHJlYWRfdHdvX3BhZ2VzKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mgc2VsZi1cXHUwMDNlc2tpcF9wYWdlczsgaSsrKVxcbi1cXHRcXHRpZiAoIXJlYWRfcGFnZShzZWxmLCBcXHUwMDI2c2VsZi1cXHUwMDNlcGFnZTEpKVxcbitcXHRcXHRpZiAoIXJlYWRfcGFnZShzZWxmLCBzZWxmLVxcdTAwM2VtYXBzX2ZkLCBcXHUwMDI2c2VsZi1cXHUwMDNlcGFnZTEpKVxcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRyZXR1cm4gcmVhZF9wYWdlKHNlbGYsIFxcdTAwMjZzZWxmLVxcdTAwM2VwYWdlMSkgXFx1MDAyNlxcdTAwMjYgcmVhZF9wYWdlKHNlbGYsIFxcdTAwMjZzZWxmLVxcdTAwM2VwYWdlMik7XFxuK1xcdHJldHVybiByZWFkX3BhZ2Uoc2VsZiwgc2VsZi1cXHUwMDNlbWFwc19mZCwgXFx1MDAyNnNlbGYtXFx1MDAzZXBhZ2UxKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgcmVhZF9wYWdlKHNlbGYsIHNlbGYtXFx1MDAzZW1hcHNfZmQsIFxcdTAwMjZzZWxmLVxcdTAwM2VwYWdlMik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGNvcHlfbGluZShjb25zdCBjaGFyICpsaW5lX3N0YXJ0LCBjb25zdCBjaGFyICpsaW5lX2VuZCxcXG5AQCAtMzE3LDYgKzM3NCw2MSBAQCBzdGF0aWMgYm9vbCByZWFkX2JvdW5kYXJ5X2xpbmVzKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsXFxuIFxcdFxcdCAgICAgIFxcdTAwMjZmaXJzdF9saW5lLVxcdTAwM2VlbmRfYWRkcikgPT0gMjtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgcGFyc2Vfc21hcHNfcm9sbHVwKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpzdGF0cylcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgZGV2X21haiwgZGV2X21pbiwgaW5vZGU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZCwgb2ZmcztcXG4rXFx0dW5zaWduZWQgbG9uZyB2YWx1ZTtcXG4rXFx0Y2hhciBuYW1lWzMyXSwgcGVybVs1XTtcXG4rXFx0Y2hhciAqY3Vycl9wb3M7XFxuK1xcdGNoYXIgKmVuZF9wb3M7XFxuK1xcdGNoYXIgKmxpbmVfZW5kO1xcbitcXG4rXFx0aWYgKGxzZWVrKHNlbGYtXFx1MDAzZXJvbGx1cF9mZCwgMCwgU0VFS19TRVQpIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKCFyZWFkX3BhZ2Uoc2VsZiwgc2VsZi1cXHUwMDNlcm9sbHVwX2ZkLCBcXHUwMDI2c2VsZi1cXHUwMDNlcGFnZTEpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRjdXJyX3BvcyA9IHNlbGYtXFx1MDAzZXBhZ2UxLmRhdGE7XFxuK1xcdGVuZF9wb3MgPSBzZWxmLVxcdTAwM2VwYWdlMS5kYXRhICsgc2VsZi1cXHUwMDNlcGFnZTEuc2l6ZTtcXG4rXFxuK1xcdGxpbmVfZW5kID0gc3RyY2hyKGN1cnJfcG9zLCAnXFxcXG4nKTtcXG4rXFx0aWYgKCFsaW5lX2VuZClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHNzY2FuZihjdXJyX3BvcywgXFxcIiVseC0lbHggJTRzICVseCAldToldSAldSAlMzFzXFxcIixcXG4rXFx0XFx0XFx1MDAyNnN0YXJ0LCBcXHUwMDI2ZW5kLCBwZXJtLCBcXHUwMDI2b2ZmcywgXFx1MDAyNmRldl9tYWosIFxcdTAwMjZkZXZfbWluLCBcXHUwMDI2aW5vZGUsIG5hbWUpICE9IDgpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChzdHJjbXAobmFtZSwgXFxcIltyb2xsdXBdXFxcIikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGZvciAoaW50IHN0YXQgPSAwOyBzdGF0IFxcdTAwM2MgQVJSQVlfU0laRShzbWFwc19yb2xsdXBfc3RhdF9uYW1lcyk7IHN0YXQrKykge1xcbitcXHRcXHRpbnQgbGVuO1xcbitcXG4rXFx0XFx0Y3Vycl9wb3MgPSBsaW5lX2VuZCArIDE7XFxuK1xcdFxcdGlmIChjdXJyX3BvcyBcXHUwMDNlPSBlbmRfcG9zKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRcXHRsaW5lX2VuZCA9IHN0cmNocihjdXJyX3BvcywgJ1xcXFxuJyk7XFxuK1xcdFxcdGlmICghbGluZV9lbmQpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdFxcdGlmIChzc2NhbmYoY3Vycl9wb3MsIFxcXCIlMzFzICVsdSBrQlxcXCIsIG5hbWUsIFxcdTAwMjZ2YWx1ZSkgIT0gMilcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0bGVuID0gc3RybGVuKG5hbWUpO1xcbitcXHRcXHRpZiAobmFtZVtsZW4gLSAxXSAhPSAnOicgfHwgc3RybmNtcChuYW1lLCBzbWFwc19yb2xsdXBfc3RhdF9uYW1lc1tzdGF0XSwgbGVuIC0gMSkpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdFxcdHN0YXRzLVxcdTAwM2V2YWx1ZXNbc3RhdF0gPSB2YWx1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIC8qIFRocmVhZCBzeW5jaHJvbml6YXRpb24gcm91dGluZXMgKi9cXG4gc3RhdGljIHZvaWQgd2FpdF9mb3Jfc3RhdGUoc3RydWN0IHZtYV9tb2RpZmllcl9pbmZvICptb2RfaW5mbywgZW51bSB0ZXN0X3N0YXRlIHN0YXRlKVxcbiB7XFxuQEAgLTM5Nyw2ICs1MDksNDEgQEAgc3RhdGljIGJvb2wgcHJpbnRfYm91bmRhcmllc19vbihib29sIGNvbmRpdGlvbiwgY29uc3QgY2hhciAqdGl0bGUsXFxuIFxcdHJldHVybiBjb25kaXRpb247XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHByaW50X3NtYXBzX3JvbGx1cF9zdGF0cyhjb25zdCBjaGFyICp0aXRsZSwgRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpzdGF0cylcXG4re1xcbitcXHRwcmludGYoXFxcIiVzXFxcIiwgdGl0bGUpO1xcbitcXHRmb3IgKGludCBzdGF0ID0gMDsgc3RhdCBcXHUwMDNjIEFSUkFZX1NJWkUoc21hcHNfcm9sbHVwX3N0YXRfbmFtZXMpOyBzdGF0KyspXFxuK1xcdFxcdHByaW50ZihcXFwiJTY0cyAlbHUga0JcXFxcblxcXCIsIHNtYXBzX3JvbGx1cF9zdGF0X25hbWVzW3N0YXRdLCBzdGF0cy1cXHUwMDNldmFsdWVzW3N0YXRdKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgY21wX3NtYXBzX3JvbGx1cF9zdGF0KHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKnMxLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKnMyLFxcbitcXHRcXHRcXHRcXHQgIGVudW0gc21hcHNfcm9sbHVwX3N0YXQgc3RhdClcXG4re1xcbitcXHRyZXR1cm4gczEtXFx1MDAzZXZhbHVlc1tzdGF0XSA9PSBzMi1cXHUwMDNldmFsdWVzW3N0YXRdO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBjb21wYXJlX3NtYXBzX3JvbGx1cChGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyAqZXhwZWN0ZWQsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICphY3R1YWwpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogQ2xlYW4vZGlydHkgbWV0cmljcyBtaWdodCBjaGFuZ2UgYnV0IFBzcy1yZWxhdGVkIG9uZXNcXG4rXFx0ICogc2hvdWxkIHN0YXkgY29uc3RhbnQuXFxuK1xcdCAqL1xcbitcXHRpZiAoY21wX3NtYXBzX3JvbGx1cF9zdGF0KGV4cGVjdGVkLCBhY3R1YWwsIFBzcykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGNtcF9zbWFwc19yb2xsdXBfc3RhdChleHBlY3RlZCwgYWN0dWFsLCBQc3NfQW5vbikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGNtcF9zbWFwc19yb2xsdXBfc3RhdChleHBlY3RlZCwgYWN0dWFsLCBQc3NfRmlsZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGNtcF9zbWFwc19yb2xsdXBfc3RhdChleHBlY3RlZCwgYWN0dWFsLCBQc3NfU2htZW0pKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdHByaW50X3NtYXBzX3JvbGx1cF9zdGF0cyhcXFwiRXhwZWN0ZWQgc3RhdHM6XFxcIiwgc2VsZiwgZXhwZWN0ZWQpO1xcbitcXHRwcmludF9zbWFwc19yb2xsdXBfc3RhdHMoXFxcIkFjdHVhbCBzdGF0czpcXFwiLCBzZWxmLCBhY3R1YWwpO1xcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCByZXBvcnRfdGVzdF9zdGFydChjb25zdCBjaGFyICpuYW1lLCBib29sIHZlcmJvc2UpXFxuIHtcXG4gXFx0aWYgKHZlcmJvc2UpXFxuQEAgLTU3Miw2ICs3MTksNyBAQCBGSVhUVVJFX1NFVFVQKHByb2NfbWFwc19yYWNlKVxcbiBcXHR1bnNpZ25lZCBsb25nIGZpcnN0X21hcF9hZGRyO1xcbiBcXHR1bnNpZ25lZCBsb25nIGxhc3RfbWFwX2FkZHI7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZHVyYXRpb25fc2VjO1xcbitcXHRjaGFyIHJvbGx1cF9mbmFtZVszMl07XFxuIFxcdGNoYXIgZm5hbWVbMzJdO1xcbiBcXG4gXFx0c2VsZi1cXHUwMDNlcGFnZV9zaXplID0gKHVuc2lnbmVkIGxvbmcpc3lzY29uZihfU0NfUEFHRVNJWkUpO1xcbkBAIC02NDksNiArNzk3LDkgQEAgRklYVFVSRV9TRVRVUChwcm9jX21hcHNfcmFjZSlcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgU01BUFM6XFxuIFxcdFxcdHNwcmludGYoZm5hbWUsIFxcXCIvcHJvYy8lZC9zbWFwc1xcXCIsIHNlbGYtXFx1MDAzZXBpZCk7XFxuK1xcdFxcdHNwcmludGYocm9sbHVwX2ZuYW1lLCBcXFwiL3Byb2MvJWQvc21hcHNfcm9sbHVwXFxcIiwgc2VsZi1cXHUwMDNlcGlkKTtcXG4rXFx0XFx0c2VsZi1cXHUwMDNlcm9sbHVwX2ZkID0gb3Blbihyb2xsdXBfZm5hbWUsIE9fUkRPTkxZKTtcXG4rXFx0XFx0QVNTRVJUX05FKHNlbGYtXFx1MDAzZXJvbGx1cF9mZCwgLTEpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWwoKTtcXG5AQCAtNzExLDYgKzg2Miw4IEBAIEZJWFRVUkVfVEVBUkRPV04ocHJvY19tYXBzX3JhY2UpXFxuIFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mgc2VsZi1cXHUwMDNldm1hX2NvdW50OyBpKyspXFxuIFxcdFxcdG11bm1hcChzZWxmLVxcdTAwM2Vtb2RfaW5mby1cXHUwMDNlY2hpbGRfbWFwcGVkX2FkZHJbaV0sIHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSk7XFxuIFxcdGNsb3NlKHNlbGYtXFx1MDAzZW1hcHNfZmQpO1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlbWFwc19maWxlID09IFNNQVBTKVxcbitcXHRcXHRjbG9zZShzZWxmLVxcdTAwM2Vyb2xsdXBfZmQpO1xcbiBcXHR3YWl0cGlkKHNlbGYtXFx1MDAzZXBpZCwgXFx1MDAyNnN0YXR1cywgMCk7XFxuIFxcdG11bm1hcChzZWxmLVxcdTAwM2Vtb2RfaW5mbywgc2VsZi1cXHUwMDNlc2hhcmVkX21lbV9zaXplKTtcXG4gfVxcbkBAIC03MjMsNiArODc2LDcgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3NwbGl0KVxcbiBcXHRzdHJ1Y3QgbGluZV9jb250ZW50IHNwbGl0X2ZpcnN0X2xpbmU7XFxuIFxcdHN0cnVjdCBsaW5lX2NvbnRlbnQgcmVzdG9yZWRfbGFzdF9saW5lO1xcbiBcXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2ZpcnN0X2xpbmU7XFxuK1xcdHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgb3JpZ19zdGF0cztcXG4gXFxuIFxcdHdhaXRfZm9yX3N0YXRlKG1vZF9pbmZvLCBTRVRVUF9SRUFEWSk7XFxuIFxcbkBAIC03MzYsNiArODkwLDggQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3NwbGl0KVxcbiBcXHRyZXBvcnRfdGVzdF9zdGFydChcXFwiVGVhcmluZyBmcm9tIHNwbGl0XFxcIiwgc2VsZi1cXHUwMDNldmVyYm9zZSk7XFxuIFxcdEFTU0VSVF9UUlVFKGNhcHR1cmVfbW9kX3BhdHRlcm4oc2VsZiwgXFx1MDAyNnNwbGl0X2xhc3RfbGluZSwgXFx1MDAyNnNwbGl0X2ZpcnN0X2xpbmUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZyZXN0b3JlZF9sYXN0X2xpbmUsIFxcdTAwMjZyZXN0b3JlZF9maXJzdF9saW5lKSk7XFxuK1xcdGlmIChzZWxmLVxcdTAwM2VtYXBzX2ZpbGUgPT0gU01BUFMpXFxuK1xcdFxcdEFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCBcXHUwMDI2b3JpZ19zdGF0cykpO1xcbiBcXG4gXFx0LyogTm93IHN0YXJ0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBmb3Igc2VsZi1cXHUwMDNlZHVyYXRpb25fc2VjICovXFxuIFxcdHNpZ25hbF9zdGF0ZShtb2RfaW5mbywgVEVTVF9SRUFEWSk7XFxuQEAgLTc5OSw2ICs5NTUsMTEgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3NwbGl0KVxcbiBcXHRcXHRcXHRcXHQgICAgIHZtYV9lbmQgPT0gc2VsZi1cXHUwMDNlbGFzdF9saW5lLmVuZF9hZGRyKSB8fFxcbiBcXHRcXHRcXHRcXHQgICAgKHZtYV9zdGFydCA9PSBzcGxpdF9maXJzdF9saW5lLnN0YXJ0X2FkZHIgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0ICAgICB2bWFfZW5kID09IHNwbGl0X2ZpcnN0X2xpbmUuZW5kX2FkZHIpKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0c3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyBzdGF0cztcXG4rXFxuK1xcdFxcdFxcdEFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCBcXHUwMDI2c3RhdHMpKTtcXG4rXFx0XFx0XFx0QVNTRVJUX1RSVUUoY29tcGFyZV9zbWFwc19yb2xsdXAoc2VsZiwgXFx1MDAyNm9yaWdfc3RhdHMsIFxcdTAwMjZzdGF0cykpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDX0NPQVJTRSwgXFx1MDAyNmVuZF90cyk7XFxuIFxcdFxcdGVuZF90ZXN0X2l0ZXJhdGlvbihcXHUwMDI2ZW5kX3RzLCBzZWxmLVxcdTAwM2V2ZXJib3NlKTtcXG5AQCAtODE3LDYgKzk3OCw3IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9yZXNpemUpXFxuIFxcdHN0cnVjdCBsaW5lX2NvbnRlbnQgc2hydW5rX2ZpcnN0X2xpbmU7XFxuIFxcdHN0cnVjdCBsaW5lX2NvbnRlbnQgcmVzdG9yZWRfbGFzdF9saW5lO1xcbiBcXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2ZpcnN0X2xpbmU7XFxuK1xcdHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgb3JpZ19zdGF0cztcXG4gXFxuIFxcdHdhaXRfZm9yX3N0YXRlKG1vZF9pbmZvLCBTRVRVUF9SRUFEWSk7XFxuIFxcbkBAIC04MzAsNiArOTkyLDggQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3Jlc2l6ZSlcXG4gXFx0cmVwb3J0X3Rlc3Rfc3RhcnQoXFxcIlRlYXJpbmcgZnJvbSByZXNpemVcXFwiLCBzZWxmLVxcdTAwM2V2ZXJib3NlKTtcXG4gXFx0QVNTRVJUX1RSVUUoY2FwdHVyZV9tb2RfcGF0dGVybihzZWxmLCBcXHUwMDI2c2hydW5rX2xhc3RfbGluZSwgXFx1MDAyNnNocnVua19maXJzdF9saW5lLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cmVzdG9yZWRfbGFzdF9saW5lLCBcXHUwMDI2cmVzdG9yZWRfZmlyc3RfbGluZSkpO1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlbWFwc19maWxlID09IFNNQVBTKVxcbitcXHRcXHRBU1NFUlRfVFJVRShwYXJzZV9zbWFwc19yb2xsdXAoc2VsZiwgXFx1MDAyNm9yaWdfc3RhdHMpKTtcXG4gXFxuIFxcdC8qIE5vdyBzdGFydCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZm9yIHNlbGYtXFx1MDAzZWR1cmF0aW9uX3NlYyAqL1xcbiBcXHRzaWduYWxfc3RhdGUobW9kX2luZm8sIFRFU1RfUkVBRFkpO1xcbkBAIC04ODAsNiArMTA0NCwxMSBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fcmVzaXplKVxcbiBcXHRcXHRcXHRBU1NFUlRfVFJVRSh2bWFfc3RhcnQgPT0gc2VsZi1cXHUwMDNlbGFzdF9saW5lLnN0YXJ0X2FkZHIgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0ICAgICh2bWFfZW5kIC0gdm1hX3N0YXJ0ID09IHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSAqIDMgfHxcXG4gXFx0XFx0XFx0XFx0ICAgICB2bWFfZW5kIC0gdm1hX3N0YXJ0ID09IHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSkpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIHN0YXRzO1xcbitcXG4rXFx0XFx0XFx0QVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsIFxcdTAwMjZzdGF0cykpO1xcbitcXHRcXHRcXHRBU1NFUlRfVFJVRShjb21wYXJlX3NtYXBzX3JvbGx1cChzZWxmLCBcXHUwMDI2b3JpZ19zdGF0cywgXFx1MDAyNnN0YXRzKSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUNfQ09BUlNFLCBcXHUwMDI2ZW5kX3RzKTtcXG4gXFx0XFx0ZW5kX3Rlc3RfaXRlcmF0aW9uKFxcdTAwMjZlbmRfdHMsIHNlbGYtXFx1MDAzZXZlcmJvc2UpO1xcbkBAIC04OTgsNiArMTA2Nyw3IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9yZW1hcClcXG4gXFx0c3RydWN0IGxpbmVfY29udGVudCByZW1hcHBlZF9maXJzdF9saW5lO1xcbiBcXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2xhc3RfbGluZTtcXG4gXFx0c3RydWN0IGxpbmVfY29udGVudCByZXN0b3JlZF9maXJzdF9saW5lO1xcbitcXHRzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIG9yaWdfc3RhdHM7XFxuIFxcbiBcXHR3YWl0X2Zvcl9zdGF0ZShtb2RfaW5mbywgU0VUVVBfUkVBRFkpO1xcbiBcXG5AQCAtOTExLDYgKzEwODEsOCBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fcmVtYXApXFxuIFxcdHJlcG9ydF90ZXN0X3N0YXJ0KFxcXCJUZWFyaW5nIGZyb20gcmVtYXBcXFwiLCBzZWxmLVxcdTAwM2V2ZXJib3NlKTtcXG4gXFx0QVNTRVJUX1RSVUUoY2FwdHVyZV9tb2RfcGF0dGVybihzZWxmLCBcXHUwMDI2cmVtYXBwZWRfbGFzdF9saW5lLCBcXHUwMDI2cmVtYXBwZWRfZmlyc3RfbGluZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx1MDAyNnJlc3RvcmVkX2xhc3RfbGluZSwgXFx1MDAyNnJlc3RvcmVkX2ZpcnN0X2xpbmUpKTtcXG4rXFx0aWYgKHNlbGYtXFx1MDAzZW1hcHNfZmlsZSA9PSBTTUFQUylcXG4rXFx0XFx0QVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsIFxcdTAwMjZvcmlnX3N0YXRzKSk7XFxuIFxcbiBcXHQvKiBOb3cgc3RhcnQgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGZvciBzZWxmLVxcdTAwM2VkdXJhdGlvbl9zZWMgKi9cXG4gXFx0c2lnbmFsX3N0YXRlKG1vZF9pbmZvLCBURVNUX1JFQURZKTtcXG5AQCAtOTYzLDYgKzExMzUsMTEgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3JlbWFwKVxcbiBcXHRcXHRcXHRcXHQgICAgIHZtYV9lbmQgLSB2bWFfc3RhcnQgPT0gc2VsZi1cXHUwMDNlcGFnZV9zaXplICogMykgfHxcXG4gXFx0XFx0XFx0XFx0ICAgICh2bWFfc3RhcnQgPT0gc2VsZi1cXHUwMDNlbGFzdF9saW5lLnN0YXJ0X2FkZHIgKyBzZWxmLVxcdTAwM2VwYWdlX3NpemUgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0ICAgICB2bWFfZW5kIC0gdm1hX3N0YXJ0ID09IHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSkpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIHN0YXRzO1xcbitcXG4rXFx0XFx0XFx0QVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsIFxcdTAwMjZzdGF0cykpO1xcbitcXHRcXHRcXHRBU1NFUlRfVFJVRShjb21wYXJlX3NtYXBzX3JvbGx1cChzZWxmLCBcXHUwMDI2b3JpZ19zdGF0cywgXFx1MDAyNnN0YXRzKSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUNfQ09BUlNFLCBcXHUwMDI2ZW5kX3RzKTtcXG4gXFx0XFx0ZW5kX3Rlc3RfaXRlcmF0aW9uKFxcdTAwMjZlbmRfdHMsIHNlbGYtXFx1MDAzZXZlcmJvc2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOTozODoxMC4yNjU0Nzg2NTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxMjgyNTcxNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfRlNcIixcbiAgICBcIlBST0NfUEFHRV9NT05JVE9SXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2hvd19zbWFwc19yb2xsdXBcIixcbiAgICBcInNtYXBfZ2F0aGVyX3N0YXRzXCIsXG4gICAgXCJzaG93X3NtYXBcIixcbiAgICBcImRvX3Byb2NtYXBfcXVlcnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyAvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS9zbWFwc19yb2xsdXAgYW5kIHNtYXBzIGl0ZXJhdGlvbiBsb2dpYyBpbiB0YXNrX21tdS5jIHRvIHVzZSBwZXItVk1BIGxvY2tzIHVuZGVyIFJDVSBpbnN0ZWFkIG9mIGFjcXVpcmluZyBtbWFwX2xvY2sgdXBmcm9udCwgYWRqdXN0cyBwYXJ0aWFsIFZNQSBzdGF0IGdhdGhlcmluZyBpbiBzbWFwX2dhdGhlcl9zdGF0cygpLCBhbmQgc2ltcGxpZmllcyBwcm9jX21hcHMgbG9ja2luZyBoZWxwZXJzLiBUaGlzIHJlYWNoYWJsZSBjb3JlIE1NL3Byb2NmcyBsb2dpYyBpcyB3b3J0aCBmdXp6aW5nIGZvciBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjU1YTdhY2JhN2I4YmYxYjc0ODdmYjE1OTA3NjAwNjBlNDc4OTBiNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDk6Mzg6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbmluZGV4IGU2NzFiNGZkOGRlZGQuLjY0MWExNTViMGM2MTMgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmNcbisrKyBiL2ZzL3Byb2MvdGFza19tbXUuY1xuQEAgLTEzMCwyOCArMTMwLDEyIEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfdGFza19tZW1wb2xpY3koc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuIH1cbiAjZW5kaWZcbiBcbi1zdGF0aWMgaW5saW5lIGludCBsb2NrX2N0eF9tbShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbi17XG4tXHRpbnQgcmV0ID0gbW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobG9ja19jdHgtXHUwMDNlbW0pO1xuLVxuLVx0aWYgKCFyZXQpXG4tXHRcdGxvY2tfY3R4LVx1MDAzZW1tYXBfbG9ja2VkID0gdHJ1ZTtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfY3R4X21tKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuK3N0YXRpYyB2b2lkIHVubG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4ge1xuIFx0bW1hcF9yZWFkX3VubG9jayhsb2NrX2N0eC1cdTAwM2VtbSk7XG4gXHRsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZCA9IGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCByZXNldF9sb2NrX2N0eChzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbi17XG4tXHRsb2NrX2N0eC1cdTAwM2Vsb2NrZWRfdm1hID0gTlVMTDtcbi1cdGxvY2tfY3R4LVx1MDAzZW1tYXBfbG9ja2VkID0gZmFsc2U7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIHVubG9ja19jdHhfdm1hKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuIHtcbiBcdGlmIChsb2NrX2N0eC1cdTAwM2Vsb2NrZWRfdm1hKSB7XG5AQCAtMTYwLDIzICsxNDQsMTAgQEAgc3RhdGljIHZvaWQgdW5sb2NrX2N0eF92bWEoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBsb2NrX3ZtYV9yYW5nZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4tXHRcdFx0XHQgIHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcbi1cbi1cdHJldHVybiB0cnVlO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX3ZtYV9yYW5nZShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbitzdGF0aWMgdm9pZCByZXNldF9sb2NrX2N0eChzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbiB7XG4tXHRpZiAobG9ja19jdHgtXHUwMDNlbW1hcF9sb2NrZWQpIHtcbi1cdFx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XG4tXHR9IGVsc2Uge1xuLVx0XHR1bmxvY2tfY3R4X3ZtYShsb2NrX2N0eCk7XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0fVxuK1x0bG9ja19jdHgtXHUwMDNlbG9ja2VkX3ZtYSA9IE5VTEw7XG4rXHRsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZCA9IGZhbHNlO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnZXRfbmV4dF92bWEoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxuQEAgLTE5Niw3ICsxNjcsNyBAQCBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnZXRfbmV4dF92bWEoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxuIFx0cmV0dXJuIHZtYTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGZhbGxiYWNrX3RvX21tYXBfbG9jayhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXG4rc3RhdGljIGJvb2wgZmFsbGJhY2tfdG9fbW1hcF9sb2NrKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcbiBcdFx0XHRcdFx0IGxvZmZfdCBwb3MpXG4ge1xuIFx0c3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHggPSBcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4O1xuQEAgLTIxMyw3ICsxODQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmFsbGJhY2tfdG9fbW1hcF9sb2NrKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgZHJvcF9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuK3N0YXRpYyB2b2lkIGRyb3BfcmN1KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbiB7XG4gXHRpZiAocHJpdi1cdTAwM2Vsb2NrX2N0eC5tbWFwX2xvY2tlZClcbiBcdFx0cmV0dXJuO1xuQEAgLTIyMSw3ICsxOTIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHJvcF9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCByZWFjcXVpcmVfcmN1KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbitzdGF0aWMgdm9pZCByZWFjcXVpcmVfcmN1KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbiB7XG4gXHRpZiAocHJpdi1cdTAwM2Vsb2NrX2N0eC5tbWFwX2xvY2tlZClcbiBcdFx0cmV0dXJuO1xuQEAgLTI4NiwxMyArMjU3LDggQEAgc3RhdGljIHZvaWQgKm1fc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBwb3MpXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLVx0aWYgKCFsb2NrX3ZtYV9yYW5nZShtLCBsb2NrX2N0eCkpIHtcbi1cdFx0bW1wdXQobW0pO1xuLVx0XHRwdXRfdGFza19zdHJ1Y3QocHJpdi1cdTAwM2V0YXNrKTtcbi1cdFx0cHJpdi1cdTAwM2V0YXNrID0gTlVMTDtcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlRSKTtcbi1cdH1cbi1cbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcbiBcdC8qXG4gXHQgKiBSZXNldCBjdXJyZW50IHBvc2l0aW9uIGlmIGxhc3RfYWRkciB3YXMgc2V0IGJlZm9yZVxuIFx0ICogYW5kIGl0J3Mgbm90IGEgc2VudGluZWwuXG5AQCAtMzI1LDcgKzI5MSwxMiBAQCBzdGF0aWMgdm9pZCBtX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIFx0XHRyZXR1cm47XG4gXG4gXHRyZWxlYXNlX3Rhc2tfbWVtcG9saWN5KHByaXYpO1xuLVx0dW5sb2NrX3ZtYV9yYW5nZShcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4KTtcbitcdGlmIChwcml2LVx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKSB7XG4rXHRcdHVubG9ja19jdHhfbW0oXHUwMDI2cHJpdi1cdTAwM2Vsb2NrX2N0eCk7XG4rXHR9IGVsc2Uge1xuK1x0XHR1bmxvY2tfY3R4X3ZtYShcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4KTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHR9XG4gXHRtbXB1dChtbSk7XG4gXHRwdXRfdGFza19zdHJ1Y3QocHJpdi1cdTAwM2V0YXNrKTtcbiBcdHByaXYtXHUwMDNldGFzayA9IE5VTEw7XG5AQCAtNTE4LDIxICs0ODksNiBAQCBzdGF0aWMgaW50IHBpZF9tYXBzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRcdFBST0NNQVBfUVVFUllfVk1BX0ZMQUdTXHRcdFx0XHRcXFxuIClcbiBcbi1zdGF0aWMgaW50IHF1ZXJ5X3ZtYV9zZXR1cChzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbi17XG4tXHRyZXNldF9sb2NrX2N0eChsb2NrX2N0eCk7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIHZvaWQgcXVlcnlfdm1hX3RlYXJkb3duKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdGlmIChsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZClcbi1cdFx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XG4tXHRlbHNlXG4tXHRcdHVubG9ja19jdHhfdm1hKGxvY2tfY3R4KTtcbi19XG4tXG4gc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcXVlcnlfdm1hX2ZpbmRfYnlfYWRkcihzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCxcbiBcdFx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG5AQCAtNjUzLDEyICs2MDksNyBAQCBzdGF0aWMgaW50IGRvX3Byb2NtYXBfcXVlcnkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHZvaWQgX191c2VyICp1YXJnKVxuIFx0aWYgKCFtbSB8fCAhbW1nZXRfbm90X3plcm8obW0pKVxuIFx0XHRyZXR1cm4gLUVTUkNIO1xuIFxuLVx0ZXJyID0gcXVlcnlfdm1hX3NldHVwKFx1MDAyNmxvY2tfY3R4KTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0bW1wdXQobW0pO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVxuK1x0cmVzZXRfbG9ja19jdHgoXHUwMDI2bG9ja19jdHgpO1xuIFx0dm1hID0gcXVlcnlfbWF0Y2hpbmdfdm1hKFx1MDAyNmxvY2tfY3R4LCBrYXJnLnF1ZXJ5X2FkZHIsIGthcmcucXVlcnlfZmxhZ3MpO1xuIFx0aWYgKElTX0VSUih2bWEpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIodm1hKTtcbkBAIC03MzIsNyArNjgzLDEwIEBAIHN0YXRpYyBpbnQgZG9fcHJvY21hcF9xdWVyeShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdm9pZCBfX3VzZXIgKnVhcmcpXG4gXHRcdHZtX2ZpbGUgPSBnZXRfZmlsZSh2bWEtXHUwMDNldm1fZmlsZSk7XG4gXG4gXHQvKiB1bmxvY2sgdm1hIG9yIG1tYXBfbG9jaywgYW5kIHB1dCBtbV9zdHJ1Y3QgYmVmb3JlIGNvcHlpbmcgZGF0YSB0byB1c2VyICovXG4tXHRxdWVyeV92bWFfdGVhcmRvd24oXHUwMDI2bG9ja19jdHgpO1xuK1x0aWYgKGxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxuK1x0XHR1bmxvY2tfY3R4X21tKFx1MDAyNmxvY2tfY3R4KTtcbitcdGVsc2VcbitcdFx0dW5sb2NrX2N0eF92bWEoXHUwMDI2bG9ja19jdHgpO1xuIFx0bW1wdXQobW0pO1xuIFxuIFx0aWYgKGthcmcuYnVpbGRfaWRfc2l6ZSkge1xuQEAgLTc3Myw3ICs3MjcsMTAgQEAgc3RhdGljIGludCBkb19wcm9jbWFwX3F1ZXJ5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB2b2lkIF9fdXNlciAqdWFyZylcbiBcdHJldHVybiAwO1xuIFxuIG91dDpcbi1cdHF1ZXJ5X3ZtYV90ZWFyZG93bihcdTAwMjZsb2NrX2N0eCk7XG4rXHRpZiAobG9ja19jdHgubW1hcF9sb2NrZWQpXG4rXHRcdHVubG9ja19jdHhfbW0oXHUwMDI2bG9ja19jdHgpO1xuK1x0ZWxzZVxuK1x0XHR1bmxvY2tfY3R4X3ZtYShcdTAwMjZsb2NrX2N0eCk7XG4gXHRtbXB1dChtbSk7XG4gb3V0X2ZpbGU6XG4gXHRpZiAodm1fZmlsZSlcbkBAIC0xMjYzLDcgKzEyMjAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHNtYXBzX3NobWVtX3dhbGtfdm1hX2xvY2tfb3BzID0ge1xuIFx0LndhbGtfbG9ja1x0XHQ9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSxcbiB9O1xuIFxuLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcbiBnZXRfc21hcHNfd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuIHtcbiBcdGlmIChwcml2LVx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxuQEAgLTEyNzEsNyArMTIyOCw3IEBAIGdldF9zbWFwc193YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4gXHRyZXR1cm4gXHUwMDI2c21hcHNfd2Fsa192bWFfbG9ja19vcHM7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcbiBnZXRfc21hcHNfc2htZW1fd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuIHtcbiBcdGlmIChwcml2LVx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxuQEAgLTEyNzksMjAgKzEyMzYsMjcgQEAgZ2V0X3NtYXBzX3NobWVtX3dhbGtfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbiBcdHJldHVybiBcdTAwMjZzbWFwc19zaG1lbV93YWxrX3ZtYV9sb2NrX29wcztcbiB9XG4gXG4tLypcbi0gKiBHYXRoZXIgbWVtIHN0YXRzIGZyb20gQHZtYSB3aXRoIHRoZSBpbmRpY2F0ZWQgYmVnaW5uaW5nXG4tICogYWRkcmVzcyBAc3RhcnQsIGFuZCBrZWVwIHRoZW0gaW4gQG1zcy5cbisvKipcbisgKiBzbWFwX2dhdGhlcl9zdGF0cygpIC0gR2F0aGVyIG1lbSBzdGF0cyBmcm9tIEB2bWEuXG4rICogQHByaXY6IHByb2MgbWFwcyBwcml2YXRlIHN0YXRlLlxuKyAqIEB2bWE6IFRoZSBWTUEgdG8gZ2F0aGVyIHN0YXRzIGZvci5cbisgKiBAbXNzOiBUaGUgYWNjdW11bGF0ZWQgc3RhdHMuXG4rICogQHN0YXJ0OiBUaGUgYWRkcmVzcyBmcm9tIHdoaWNoIHRvIHN0YXJ0LlxuICAqXG4tICogVXNlIHZtX3N0YXJ0IG9mIEB2bWEgYXMgdGhlIGJlZ2lubmluZyBhZGRyZXNzIGlmIEBzdGFydCBpcyAwLlxuKyAqIFRoaXMgZ2F0aGVycyBzdGF0cyBmb3IgdGhlIHdob2xlIG9mIHRoZSBWTUEgdW5sZXNzIHRoZSBsb2NrIHdhcyBkcm9wcGVkXG4rICogYW5kIFZNQSBncmV3IG9yIGdvdCBtZXJnZWQgYW5kIHdlIGZvdW5kIGl0IGFnYWluLCBpbiB3aGljaCBjYXNlIHdlIG9ubHlcbisgKiBnYXRoZXIgc3RhdHMgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIFZNQSByYW5nZS5cbiAgKi9cbiBzdGF0aWMgdm9pZCBzbWFwX2dhdGhlcl9zdGF0cyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXG4gXHRcdFx0ICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdFx0ICAgICAgc3RydWN0IG1lbV9zaXplX3N0YXRzICptc3MsIHVuc2lnbmVkIGxvbmcgc3RhcnQpXG4rXHRcdFx0ICAgICAgc3RydWN0IG1lbV9zaXplX3N0YXRzICptc3MsXG4rXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBzdGFydClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyA9IGdldF9zbWFwc193YWxrX29wcyhwcml2KTtcbitcdGNvbnN0IGJvb2wgaXNfcGFydGlhbCA9IHN0YXJ0IFx1MDAzZSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4gXG4gXHQvKiBJbnZhbGlkIHN0YXJ0ICovXG4tXHRpZiAoc3RhcnQgXHUwMDNlPSB2bWEtXHUwMDNldm1fZW5kKVxuK1x0aWYgKHN0YXJ0IFx1MDAzYyB2bWEtXHUwMDNldm1fc3RhcnQgfHwgc3RhcnQgXHUwMDNlPSB2bWEtXHUwMDNldm1fZW5kKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAodm1hID09IGdldF9nYXRlX3ZtYShwcml2LVx1MDAzZWxvY2tfY3R4Lm1tKSlcbkBAIC0xMzEyLDIwICsxMjc2LDE3IEBAIHN0YXRpYyB2b2lkIHNtYXBfZ2F0aGVyX3N0YXRzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcbiBcdFx0ICogVW5sZXNzIHdlIGtub3cgdGhhdCB0aGUgc2htZW0gb2JqZWN0IChvciB0aGUgcGFydCBtYXBwZWQgYnlcbiBcdFx0ICogb3VyIFZNQSkgaGFzIG5vIHN3YXBwZWQgb3V0IHBhZ2VzIGF0IGFsbC5cbiBcdFx0ICovXG4tXHRcdHVuc2lnbmVkIGxvbmcgc2htZW1fc3dhcHBlZCA9IHNobWVtX3N3YXBfdXNhZ2Uodm1hKTtcbitcdFx0Y29uc3QgdW5zaWduZWQgbG9uZyBzaG1lbV9zd2FwcGVkID0gc2htZW1fc3dhcF91c2FnZSh2bWEpO1xuK1x0XHRjb25zdCBib29sIHNoYXJlZF9vcl9ybyA9IHZtYV90ZXN0KHZtYSwgVk1BX1NIQVJFRF9CSVQpIHx8XG4rXHRcdFx0XHRcdCAgIXZtYV90ZXN0KHZtYSwgVk1BX1dSSVRFX0JJVCk7XG4gXG4tXHRcdGlmICghc3RhcnQgXHUwMDI2XHUwMDI2ICghc2htZW1fc3dhcHBlZCB8fCAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpIHx8XG4tXHRcdFx0XHRcdCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9XUklURSkpKSB7XG4rXHRcdGlmICghaXNfcGFydGlhbCBcdTAwMjZcdTAwMjYgKCFzaG1lbV9zd2FwcGVkIHx8IHNoYXJlZF9vcl9ybykpXG4gXHRcdFx0bXNzLVx1MDAzZXN3YXAgKz0gc2htZW1fc3dhcHBlZDtcbi1cdFx0fSBlbHNlIHtcbitcdFx0ZWxzZVxuIFx0XHRcdG9wcyA9IGdldF9zbWFwc19zaG1lbV93YWxrX29wcyhwcml2KTtcbi1cdFx0fVxuIFx0fVxuIFxuLVx0aWYgKCFzdGFydClcbi1cdFx0d2Fsa19wYWdlX3ZtYSh2bWEsIG9wcywgbXNzKTtcbi1cdGVsc2Vcbi1cdFx0d2Fsa19wYWdlX3JhbmdlKHZtYS1cdTAwM2V2bV9tbSwgc3RhcnQsIHZtYS1cdTAwM2V2bV9lbmQsIG9wcywgbXNzKTtcbitcdHdhbGtfcGFnZV9yYW5nZV92bWEodm1hLCBzdGFydCwgdm1hLVx1MDAzZXZtX2VuZCwgb3BzLCBtc3MpO1xuIFxuIFx0cmVhY3F1aXJlX3JjdShwcml2KTtcbiB9XG5AQCAtMTM4MCw3ICsxMzQxLDcgQEAgc3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2O1xuIFx0c3RydWN0IG1lbV9zaXplX3N0YXRzIG1zcyA9IHt9O1xuIFxuLVx0c21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCBcdTAwMjZtc3MsIDApO1xuK1x0c21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCBcdTAwMjZtc3MsIHZtYS1cdTAwM2V2bV9zdGFydCk7XG4gXG4gXHRzaG93X21hcF92bWEobSwgdm1hKTtcbiBcbkBAIC0xNDA1LDEyICsxMzY2LDE0IEBAIHN0YXRpYyBpbnQgc2hvd19zbWFwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiBzdGF0aWMgaW50IHNob3dfc21hcHNfcm9sbHVwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiB7XG4gXHRzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYgPSBtLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCA9IFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHg7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGxvY2tfY3R4LVx1MDAzZW1tO1xuIFx0c3RydWN0IG1lbV9zaXplX3N0YXRzIG1zcyA9IHt9O1xuLVx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LVx1MDAzZWxvY2tfY3R4Lm1tO1xuK1x0dW5zaWduZWQgbG9uZyBsYXN0X3ZtYV9lbmQgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyB2bWFfc3RhcnQgPSAwO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4tXHR1bnNpZ25lZCBsb25nIHZtYV9zdGFydCA9IDAsIGxhc3Rfdm1hX2VuZCA9IDA7XG4rXHRsb2ZmX3QgcG9zID0gMDtcbiBcdGludCByZXQgPSAwO1xuLVx0Vk1BX0lURVJBVE9SKHZtaSwgbW0sIDApO1xuIFxuIFx0cHJpdi1cdTAwM2V0YXNrID0gZ2V0X3Byb2NfdGFzayhwcml2LVx1MDAzZWlub2RlKTtcbiBcdGlmICghcHJpdi1cdTAwM2V0YXNrKVxuQEAgLTE0MjEsODkgKzEzODQsNjAgQEAgc3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4gXHRcdGdvdG8gb3V0X3B1dF90YXNrO1xuIFx0fVxuIFxuLVx0cmV0ID0gbG9ja19jdHhfbW0oXHUwMDI2cHJpdi1cdTAwM2Vsb2NrX2N0eCk7XG4tXHRpZiAocmV0KVxuLVx0XHRnb3RvIG91dF9wdXRfbW07XG4tXG4gXHRob2xkX3Rhc2tfbWVtcG9saWN5KHByaXYpO1xuLVx0dm1hID0gdm1hX25leHQoXHUwMDI2dm1pKTtcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcbiBcbitcdHZtYV9pdGVyX2luaXQoXHUwMDI2cHJpdi1cdTAwM2VpdGVyLCBtbSwgMCk7XG4rXHR2bWEgPSBwcm9jX2dldF92bWEobSwgXHUwMDI2cG9zKTtcbiBcdGlmICh1bmxpa2VseSghdm1hKSlcbiBcdFx0Z290byBlbXB0eV9zZXQ7XG4gXG4tXHR2bWFfc3RhcnQgPSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4tXHRkbyB7XG4tXHRcdHNtYXBfZ2F0aGVyX3N0YXRzKHByaXYsIHZtYSwgXHUwMDI2bXNzLCAwKTtcbi1cdFx0bGFzdF92bWFfZW5kID0gdm1hLVx1MDAzZXZtX2VuZDtcbitcdGlmICghSVNfRVJSKHZtYSkgXHUwMDI2XHUwMDI2IHZtYSAhPSBnZXRfZ2F0ZV92bWEobG9ja19jdHgtXHUwMDNlbW0pKVxuK1x0XHR2bWFfc3RhcnQgPSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4rXG4rXHR3aGlsZSAodm1hKSB7XG4rXHRcdGlmIChJU19FUlIodm1hKSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIodm1hKTtcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdH1cbitcbitcdFx0aWYgKHZtYSA9PSBnZXRfZ2F0ZV92bWEobG9ja19jdHgtXHUwMDNlbW0pKVxuK1x0XHRcdGJyZWFrO1xuIFxuIFx0XHQvKlxuLVx0XHQgKiBSZWxlYXNlIG1tYXBfbG9jayB0ZW1wb3JhcmlseSBpZiBzb21lb25lIHdhbnRzIHRvXG4tXHRcdCAqIGFjY2VzcyBpdCBmb3Igd3JpdGUgcmVxdWVzdC5cbitcdFx0ICogSWYgYWZ0ZXIgcmV0YWtpbmcgdGhlIGxvY2ssIGFscmVhZHkgcmVwb3J0ZWQgVk1BIGdyZXcgb3JcbitcdFx0ICogbWVyZ2VkIHdpdGggdGhlIG5leHQgb25lLCBzbWFwX2dhdGhlcl9zdGF0cygpIHdpbGwgZ2F0aGVyXG4rXHRcdCAqIHN0YXRzIGZvciB0aGUgcmVtYWluaW5nIHBvcnRpb24gYnkgc3RhcnRpbmcgYXQgbGFzdF92bWFfZW5kLlxuIFx0XHQgKi9cbi1cdFx0aWYgKG1tYXBfbG9ja19pc19jb250ZW5kZWQobW0pKSB7XG4tXHRcdFx0dm1hX2l0ZXJfaW52YWxpZGF0ZShcdTAwMjZ2bWkpO1xuLVx0XHRcdHVubG9ja19jdHhfbW0oXHUwMDI2cHJpdi1cdTAwM2Vsb2NrX2N0eCk7XG4tXHRcdFx0cmV0ID0gbG9ja19jdHhfbW0oXHUwMDI2cHJpdi1cdTAwM2Vsb2NrX2N0eCk7XG4tXHRcdFx0aWYgKHJldCkge1xuLVx0XHRcdFx0cmVsZWFzZV90YXNrX21lbXBvbGljeShwcml2KTtcbi1cdFx0XHRcdGdvdG8gb3V0X3B1dF9tbTtcbi1cdFx0XHR9XG4rXHRcdHNtYXBfZ2F0aGVyX3N0YXRzKHByaXYsIHZtYSwgXHUwMDI2bXNzLCBsYXN0X3ZtYV9lbmQpO1xuK1x0XHRsYXN0X3ZtYV9lbmQgPSB2bWEtXHUwMDNldm1fZW5kO1xuIFxuK1x0XHQvKlxuK1x0XHQgKiBJZiB0aGUgVk1BIGxvY2sgaXMgbm90IHRha2VuLCB3ZSBob2xkIHRoZSBvZnRlbiBjb250ZW5kZWRcbitcdFx0ICogbW1hcCBsb2NrLiBUaGlzIGNhbiBoYXBwZW4gaWYgd2UgaGFkIHRvIGZhbGwgYmFjayB0byB0aGVcbitcdFx0ICogbW1hcCBsb2NrLlxuK1x0XHQgKlxuK1x0XHQgKiBUbyByZWxpZXZlIHByZXNzdXJlLCBjaGVjayBpZiBpdCBpcyBpbmRlZWQgY29udGVuZGVkLCB0aGVuXG4rXHRcdCAqIHRlbXBvcmFyaWx5IHJlbGVhc2UgaXQuXG4rXHRcdCAqL1xuK1x0XHRpZiAobG9ja19jdHgtXHUwMDNlbW1hcF9sb2NrZWQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBtbWFwX2xvY2tfaXNfY29udGVuZGVkKGxvY2tfY3R4LVx1MDAzZW1tKSkge1xuK1x0XHRcdHVubG9ja19jdHhfbW0obG9ja19jdHgpO1xuIFx0XHRcdC8qXG4tXHRcdFx0ICogQWZ0ZXIgZHJvcHBpbmcgdGhlIGxvY2ssIHRoZXJlIGFyZSBmb3VyIGNhc2VzIHRvXG4tXHRcdFx0ICogY29uc2lkZXIuIFNlZSB0aGUgZm9sbG93aW5nIGV4YW1wbGUgZm9yIGV4cGxhbmF0aW9uLlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogICArLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLStcbi1cdFx0XHQgKiAgIHwgVk1BMSB8IFZNQTIgfCBWTUEzICAgICAgfFxuLVx0XHRcdCAqICAgKy0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0rXG4tXHRcdFx0ICogICB8ICAgICAgfCAgICAgIHwgICAgICAgICAgIHxcbi1cdFx0XHQgKiAgNGsgICAgIDhrICAgICAxNmsgICAgICAgICA0MDBrXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiBTdXBwb3NlIHdlIGRyb3AgdGhlIGxvY2sgYWZ0ZXIgcmVhZGluZyBWTUEyIGR1ZSB0b1xuLVx0XHRcdCAqIGNvbnRlbnRpb24sIHRoZW4gd2UgZ2V0OlxuLVx0XHRcdCAqXG4tXHRcdFx0ICpcdGxhc3Rfdm1hX2VuZCA9IDE2a1xuLVx0XHRcdCAqXG4tXHRcdFx0ICogMSkgVk1BMiBpcyBmcmVlZCwgYnV0IFZNQTMgZXhpc3RzOlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBWTUEzLlxuLVx0XHRcdCAqICAgIEluIHRoaXMgY2FzZSwganVzdCBjb250aW51ZSBmcm9tIFZNQTMuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAyKSBWTUEyIHN0aWxsIGV4aXN0czpcbi1cdFx0XHQgKlxuLVx0XHRcdCAqICAgIHZtYV9uZXh0KHZtaSkgd2lsbCByZXR1cm4gVk1BMy5cbi1cdFx0XHQgKiAgICBJbiB0aGlzIGNhc2UsIGp1c3QgY29udGludWUgZnJvbSBWTUEzLlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogMykgTm8gbW9yZSBWTUFzIGNhbiBiZSBmb3VuZDpcbi1cdFx0XHQgKlxuLVx0XHRcdCAqICAgIHZtYV9uZXh0KHZtaSkgd2lsbCByZXR1cm4gTlVMTC5cbi1cdFx0XHQgKiAgICBObyBtb3JlIHRoaW5ncyB0byBkbywganVzdCBicmVhay5cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIDQpIChsYXN0X3ZtYV9lbmQgLSAxKSBpcyB0aGUgbWlkZGxlIG9mIGEgdm1hIChWTUEnKTpcbi1cdFx0XHQgKlxuLVx0XHRcdCAqICAgIHZtYV9uZXh0KHZtaSkgd2lsbCByZXR1cm4gVk1BJyB3aG9zZSByYW5nZVxuLVx0XHRcdCAqICAgIGNvbnRhaW5zIGxhc3Rfdm1hX2VuZC5cbi1cdFx0XHQgKiAgICBJdGVyYXRlIFZNQScgZnJvbSBsYXN0X3ZtYV9lbmQuXG4rXHRcdFx0ICogRXZlbiB0aG91Z2ggd2UgcHJldmlvdXNseSBmZWxsIGJhY2sgdG8gbW1hcCBsb2NrLFxuK1x0XHRcdCAqIHdlIHRyeSB0YWtpbmcgVk1BIGxvY2sgZm9yIHRoZSBuZXh0IFZNQSwgc2luY2UgaXRcbitcdFx0XHQgKiBtaWdodCBub3QgYmUgdW5kZXIgbW9kaWZpY2F0aW9uLiBJbiB0aGUgd29yc3QgY2FzZVxuK1x0XHRcdCAqIHdlIHdpbGwgZmFsbCBiYWNrIHRvIG1tYXAgbG9jayBhZ2Fpbi5cbiBcdFx0XHQgKi9cbi1cdFx0XHR2bWEgPSB2bWFfbmV4dChcdTAwMjZ2bWkpO1xuLVx0XHRcdC8qIENhc2UgMyBhYm92ZSAqL1xuLVx0XHRcdGlmICghdm1hKVxuLVx0XHRcdFx0YnJlYWs7XG4tXG4tXHRcdFx0LyogQ2FzZSAxIGFuZCAyIGFib3ZlICovXG4tXHRcdFx0aWYgKHZtYS1cdTAwM2V2bV9zdGFydCBcdTAwM2U9IGxhc3Rfdm1hX2VuZCkge1xuLVx0XHRcdFx0c21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCBcdTAwMjZtc3MsIDApO1xuLVx0XHRcdFx0bGFzdF92bWFfZW5kID0gdm1hLVx1MDAzZXZtX2VuZDtcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHQvKiBDYXNlIDQgYWJvdmUgKi9cbi1cdFx0XHRpZiAodm1hLVx1MDAzZXZtX2VuZCBcdTAwM2UgbGFzdF92bWFfZW5kKSB7XG4tXHRcdFx0XHRzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsIFx1MDAyNm1zcywgbGFzdF92bWFfZW5kKTtcbi1cdFx0XHRcdGxhc3Rfdm1hX2VuZCA9IHZtYS1cdTAwM2V2bV9lbmQ7XG4tXHRcdFx0fVxuK1x0XHRcdHJjdV9yZWFkX2xvY2soKTtcbitcdFx0XHRyZXNldF9sb2NrX2N0eChsb2NrX2N0eCk7XG4rXHRcdFx0LyogUmVzdW1lIGZyb20gdGhlIGxhc3QgcG9zaXRpb24uICovXG4rXHRcdFx0cG9zID0gbGFzdF92bWFfZW5kO1xuK1x0XHRcdHZtYV9pdGVyX2luaXQoXHUwMDI2cHJpdi1cdTAwM2VpdGVyLCBtbSwgcG9zKTtcbiBcdFx0fVxuLVx0fSBmb3JfZWFjaF92bWEodm1pLCB2bWEpO1xuK1x0XHR2bWEgPSBwcm9jX2dldF92bWEobSwgXHUwMDI2cG9zKTtcbitcdH1cbiBcbiBlbXB0eV9zZXQ6XG4gXHRzaG93X3ZtYV9oZWFkZXJfcHJlZml4KG0sIHZtYV9zdGFydCwgbGFzdF92bWFfZW5kLCAwLCAwLCAwLCAwKTtcbkBAIC0xNTEyLDEwICsxNDQ2LDE0IEBAIHN0YXRpYyBpbnQgc2hvd19zbWFwc19yb2xsdXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIFxuIFx0X19zaG93X3NtYXAobSwgXHUwMDI2bXNzLCB0cnVlKTtcbiBcbitvdXRfdW5sb2NrOlxuK1x0aWYgKGxvY2tfY3R4LVx1MDAzZW1tYXBfbG9ja2VkKSB7XG4rXHRcdHVubG9ja19jdHhfbW0obG9ja19jdHgpO1xuK1x0fSBlbHNlIHtcbitcdFx0dW5sb2NrX2N0eF92bWEobG9ja19jdHgpO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdH1cbiBcdHJlbGVhc2VfdGFza19tZW1wb2xpY3kocHJpdik7XG4tXHR1bmxvY2tfY3R4X21tKFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHgpO1xuLVxuLW91dF9wdXRfbW06XG4gXHRtbXB1dChtbSk7XG4gb3V0X3B1dF90YXNrOlxuIFx0cHV0X3Rhc2tfc3RydWN0KHByaXYtXHUwMDNldGFzayk7XG5AQCAtMTYwNSw3ICsxNTQzLDcgQEAgc3RydWN0IGNsZWFyX3JlZnNfcHJpdmF0ZSB7XG4gXHRlbnVtIGNsZWFyX3JlZnNfdHlwZXMgdHlwZTtcbiB9O1xuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfaXNfcGlubmVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSlcbitzdGF0aWMgYm9vbCBwdGVfaXNfcGlubmVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSlcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFxuQEAgLTE2MjEsOCArMTU1OSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfaXNfcGlubmVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRyZXR1cm4gZm9saW9fbWF5YmVfZG1hX3Bpbm5lZChmb2xpbyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLVx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGUpXG4rc3RhdGljIHZvaWQgY2xlYXJfc29mdF9kaXJ0eShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCAgICAgcHRlX3QgKnB0ZSlcbiB7XG4gXHRpZiAoIXBndGFibGVfc3VwcG9ydHNfc29mdF9kaXJ0eSgpKVxuIFx0XHRyZXR1cm47XG5AQCAtMTY1Myw4ICsxNTkxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gfVxuIFxuICNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcbi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHApXG4rc3RhdGljIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kcClcbiB7XG4gXHRwbWRfdCBvbGQsIHBtZCA9ICpwbWRwO1xuIFxuQEAgLTE2NzksOCArMTYxNyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5X3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdH1cbiB9XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHApXG4rc3RhdGljIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kcClcbiB7XG4gfVxuICNlbmRpZlxuQEAgLTE4NzksNyArMTgxNyw3IEBAIHN0cnVjdCBwYWdlbWFwcmVhZCB7XG4gXG4gI2RlZmluZSBQTV9FTkRfT0ZfQlVGRkVSICAgIDFcbiBcbi1zdGF0aWMgaW5saW5lIHBhZ2VtYXBfZW50cnlfdCBtYWtlX3BtZSh1NjQgZnJhbWUsIHU2NCBmbGFncylcbitzdGF0aWMgcGFnZW1hcF9lbnRyeV90IG1ha2VfcG1lKHU2NCBmcmFtZSwgdTY0IGZsYWdzKVxuIHtcbiBcdHJldHVybiAocGFnZW1hcF9lbnRyeV90KSB7IC5wbWUgPSAoZnJhbWUgXHUwMDI2IFBNX1BGUkFNRV9NQVNLKSB8IGZsYWdzIH07XG4gfVxuQEAgLTM0MjEsNyArMzM1OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc2hvd19udW1hX3ZtYV9sb2NrX29wcyA9IHtcbiBcdC53YWxrX2xvY2sgPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksXG4gfTtcbiBcbi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqXG4gZ2V0X3Nob3dfbnVtYV9vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuIHtcbiBcdGlmIChwcml2LVx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuY1xuaW5kZXggNDE1ZWNjYjcwNDY4NC4uOGQwMGQ3ZGIxYzY1MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLW1hcHMtcmFjZS5jXG5AQCAtODAsNiArODAsNjEgQEAgZW51bSBtYXBzX2ZpbGUge1xuIFxuIHN0cnVjdCB2bWFfbW9kaWZpZXJfaW5mbztcbiBcbitlbnVtIHNtYXBzX3JvbGx1cF9zdGF0IHtcbitcdFJzcyxcbitcdFBzcyxcbitcdFBzc19EaXJ0eSxcbitcdFBzc19Bbm9uLFxuK1x0UHNzX0ZpbGUsXG4rXHRQc3NfU2htZW0sXG4rXHRTaGFyZWRfQ2xlYW4sXG4rXHRTaGFyZWRfRGlydHksXG4rXHRQcml2YXRlX0NsZWFuLFxuK1x0UHJpdmF0ZV9EaXJ0eSxcbitcdFJlZmVyZW5jZWQsXG4rXHRBbm9ueW1vdXMsXG4rXHRLU00sXG4rXHRMYXp5RnJlZSxcbitcdEFub25IdWdlUGFnZXMsXG4rXHRTaG1lbVBtZE1hcHBlZCxcbitcdEZpbGVQbWRNYXBwZWQsXG4rXHRTaGFyZWRfSHVnZXRsYixcbitcdFByaXZhdGVfSHVnZXRsYixcbitcdFN3YXAsXG4rXHRTd2FwUHNzLFxuK1x0TG9ja2VkLFxuK1x0Um9sbHVwRmllbGRDb3VudFxuK307XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgKnNtYXBzX3JvbGx1cF9zdGF0X25hbWVzW1JvbGx1cEZpZWxkQ291bnRdID0ge1xuK1x0XCJSc3NcIixcbitcdFwiUHNzXCIsXG4rXHRcIlBzc19EaXJ0eVwiLFxuK1x0XCJQc3NfQW5vblwiLFxuK1x0XCJQc3NfRmlsZVwiLFxuK1x0XCJQc3NfU2htZW1cIixcbitcdFwiU2hhcmVkX0NsZWFuXCIsXG4rXHRcIlNoYXJlZF9EaXJ0eVwiLFxuK1x0XCJQcml2YXRlX0NsZWFuXCIsXG4rXHRcIlByaXZhdGVfRGlydHlcIixcbitcdFwiUmVmZXJlbmNlZFwiLFxuK1x0XCJBbm9ueW1vdXNcIixcbitcdFwiS1NNXCIsXG4rXHRcIkxhenlGcmVlXCIsXG4rXHRcIkFub25IdWdlUGFnZXNcIixcbitcdFwiU2htZW1QbWRNYXBwZWRcIixcbitcdFwiRmlsZVBtZE1hcHBlZFwiLFxuK1x0XCJTaGFyZWRfSHVnZXRsYlwiLFxuK1x0XCJQcml2YXRlX0h1Z2V0bGJcIixcbitcdFwiU3dhcFwiLFxuK1x0XCJTd2FwUHNzXCIsXG4rXHRcIkxvY2tlZFwiLFxuK307XG4rXG4rc3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyB7XG4rXHR1bnNpZ25lZCBsb25nIHZhbHVlc1tSb2xsdXBGaWVsZENvdW50XTtcbit9O1xuK1xuIEZJWFRVUkUocHJvY19tYXBzX3JhY2UpXG4ge1xuIFx0c3RydWN0IHZtYV9tb2RpZmllcl9pbmZvICptb2RfaW5mbztcbkBAIC05MSw2ICsxNDYsNyBAQCBGSVhUVVJFKHByb2NfbWFwc19yYWNlKVxuIFx0ZW51bSBtYXBzX2ZpbGUgbWFwc19maWxlO1xuIFx0aW50IHNoYXJlZF9tZW1fc2l6ZTtcbiBcdGludCBza2lwX3BhZ2VzO1xuK1x0aW50IHJvbGx1cF9mZDtcbiBcdGludCBwYWdlX3NpemU7XG4gXHRpbnQgdm1hX2NvdW50O1xuIFx0Ym9vbCB2ZXJib3NlO1xuQEAgLTEzMiwxMiArMTg4LDEyIEBAIHN0cnVjdCB2bWFfbW9kaWZpZXJfaW5mbyB7XG4gXHR2b2lkICpjaGlsZF9tYXBwZWRfYWRkcltdO1xuIH07XG4gXG4tc3RhdGljIGJvb2wgcmVhZF9wYWdlKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsXG4rc3RhdGljIGJvb2wgcmVhZF9wYWdlKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsIGludCBmZCxcbiBcdFx0ICAgICAgc3RydWN0IHBhZ2VfY29udGVudCAqcGFnZSlcbiB7XG4gXHRzc2l6ZV90ICBieXRlc19yZWFkO1xuIFxuLVx0Ynl0ZXNfcmVhZCA9IHJlYWQoc2VsZi1cdTAwM2VtYXBzX2ZkLCBwYWdlLVx1MDAzZWRhdGEsIHNlbGYtXHUwMDNlcGFnZV9zaXplKTtcbitcdGJ5dGVzX3JlYWQgPSByZWFkKGZkLCBwYWdlLVx1MDAzZWRhdGEsIHNlbGYtXHUwMDNlcGFnZV9zaXplKTtcbiBcdGlmIChieXRlc19yZWFkIFx1MDAzYz0gMClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuQEAgLTE3NSw3ICsyMzEsNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9jb250YWluaW5nX3BhZ2UoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZixcbiBcdFx0Y2hhciAqY3Vycl9wb3M7XG4gXHRcdGNoYXIgKmVuZF9wb3M7XG4gXG4tXHRcdGlmICghcmVhZF9wYWdlKHNlbGYsIFx1MDAyNnNlbGYtXHUwMDNlcGFnZTEpKVxuK1x0XHRpZiAoIXJlYWRfcGFnZShzZWxmLCBzZWxmLVx1MDAzZW1hcHNfZmQsIFx1MDAyNnNlbGYtXHUwMDNlcGFnZTEpKVxuIFx0XHRcdHJldHVybiAtMTtcbiBcbiBcdFx0Y3Vycl9wb3MgPSBzZWxmLVx1MDAzZXBhZ2UxLmRhdGE7XG5AQCAtMjA1LDEwICsyNjEsMTEgQEAgc3RhdGljIGJvb2wgcmVhZF90d29fcGFnZXMoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHNlbGYtXHUwMDNlc2tpcF9wYWdlczsgaSsrKVxuLVx0XHRpZiAoIXJlYWRfcGFnZShzZWxmLCBcdTAwMjZzZWxmLVx1MDAzZXBhZ2UxKSlcbitcdFx0aWYgKCFyZWFkX3BhZ2Uoc2VsZiwgc2VsZi1cdTAwM2VtYXBzX2ZkLCBcdTAwMjZzZWxmLVx1MDAzZXBhZ2UxKSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRyZXR1cm4gcmVhZF9wYWdlKHNlbGYsIFx1MDAyNnNlbGYtXHUwMDNlcGFnZTEpIFx1MDAyNlx1MDAyNiByZWFkX3BhZ2Uoc2VsZiwgXHUwMDI2c2VsZi1cdTAwM2VwYWdlMik7XG4rXHRyZXR1cm4gcmVhZF9wYWdlKHNlbGYsIHNlbGYtXHUwMDNlbWFwc19mZCwgXHUwMDI2c2VsZi1cdTAwM2VwYWdlMSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgcmVhZF9wYWdlKHNlbGYsIHNlbGYtXHUwMDNlbWFwc19mZCwgXHUwMDI2c2VsZi1cdTAwM2VwYWdlMik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGNvcHlfbGluZShjb25zdCBjaGFyICpsaW5lX3N0YXJ0LCBjb25zdCBjaGFyICpsaW5lX2VuZCxcbkBAIC0zMTcsNiArMzc0LDYxIEBAIHN0YXRpYyBib29sIHJlYWRfYm91bmRhcnlfbGluZXMoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZixcbiBcdFx0ICAgICAgXHUwMDI2Zmlyc3RfbGluZS1cdTAwM2VlbmRfYWRkcikgPT0gMjtcbiB9XG4gXG4rc3RhdGljIGJvb2wgcGFyc2Vfc21hcHNfcm9sbHVwKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKnN0YXRzKVxuK3tcbitcdHVuc2lnbmVkIGludCBkZXZfbWFqLCBkZXZfbWluLCBpbm9kZTtcbitcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZCwgb2ZmcztcbitcdHVuc2lnbmVkIGxvbmcgdmFsdWU7XG4rXHRjaGFyIG5hbWVbMzJdLCBwZXJtWzVdO1xuK1x0Y2hhciAqY3Vycl9wb3M7XG4rXHRjaGFyICplbmRfcG9zO1xuK1x0Y2hhciAqbGluZV9lbmQ7XG4rXG4rXHRpZiAobHNlZWsoc2VsZi1cdTAwM2Vyb2xsdXBfZmQsIDAsIFNFRUtfU0VUKSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKCFyZWFkX3BhZ2Uoc2VsZiwgc2VsZi1cdTAwM2Vyb2xsdXBfZmQsIFx1MDAyNnNlbGYtXHUwMDNlcGFnZTEpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRjdXJyX3BvcyA9IHNlbGYtXHUwMDNlcGFnZTEuZGF0YTtcbitcdGVuZF9wb3MgPSBzZWxmLVx1MDAzZXBhZ2UxLmRhdGEgKyBzZWxmLVx1MDAzZXBhZ2UxLnNpemU7XG4rXG4rXHRsaW5lX2VuZCA9IHN0cmNocihjdXJyX3BvcywgJ1xcbicpO1xuK1x0aWYgKCFsaW5lX2VuZClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHNzY2FuZihjdXJyX3BvcywgXCIlbHgtJWx4ICU0cyAlbHggJXU6JXUgJXUgJTMxc1wiLFxuK1x0XHRcdTAwMjZzdGFydCwgXHUwMDI2ZW5kLCBwZXJtLCBcdTAwMjZvZmZzLCBcdTAwMjZkZXZfbWFqLCBcdTAwMjZkZXZfbWluLCBcdTAwMjZpbm9kZSwgbmFtZSkgIT0gOClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHN0cmNtcChuYW1lLCBcIltyb2xsdXBdXCIpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRmb3IgKGludCBzdGF0ID0gMDsgc3RhdCBcdTAwM2MgQVJSQVlfU0laRShzbWFwc19yb2xsdXBfc3RhdF9uYW1lcyk7IHN0YXQrKykge1xuK1x0XHRpbnQgbGVuO1xuK1xuK1x0XHRjdXJyX3BvcyA9IGxpbmVfZW5kICsgMTtcbitcdFx0aWYgKGN1cnJfcG9zIFx1MDAzZT0gZW5kX3BvcylcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRcdGxpbmVfZW5kID0gc3RyY2hyKGN1cnJfcG9zLCAnXFxuJyk7XG4rXHRcdGlmICghbGluZV9lbmQpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHRpZiAoc3NjYW5mKGN1cnJfcG9zLCBcIiUzMXMgJWx1IGtCXCIsIG5hbWUsIFx1MDAyNnZhbHVlKSAhPSAyKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0bGVuID0gc3RybGVuKG5hbWUpO1xuK1x0XHRpZiAobmFtZVtsZW4gLSAxXSAhPSAnOicgfHwgc3RybmNtcChuYW1lLCBzbWFwc19yb2xsdXBfc3RhdF9uYW1lc1tzdGF0XSwgbGVuIC0gMSkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHRzdGF0cy1cdTAwM2V2YWx1ZXNbc3RhdF0gPSB2YWx1ZTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiAvKiBUaHJlYWQgc3luY2hyb25pemF0aW9uIHJvdXRpbmVzICovXG4gc3RhdGljIHZvaWQgd2FpdF9mb3Jfc3RhdGUoc3RydWN0IHZtYV9tb2RpZmllcl9pbmZvICptb2RfaW5mbywgZW51bSB0ZXN0X3N0YXRlIHN0YXRlKVxuIHtcbkBAIC0zOTcsNiArNTA5LDQxIEBAIHN0YXRpYyBib29sIHByaW50X2JvdW5kYXJpZXNfb24oYm9vbCBjb25kaXRpb24sIGNvbnN0IGNoYXIgKnRpdGxlLFxuIFx0cmV0dXJuIGNvbmRpdGlvbjtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcHJpbnRfc21hcHNfcm9sbHVwX3N0YXRzKGNvbnN0IGNoYXIgKnRpdGxlLCBGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpzdGF0cylcbit7XG4rXHRwcmludGYoXCIlc1wiLCB0aXRsZSk7XG4rXHRmb3IgKGludCBzdGF0ID0gMDsgc3RhdCBcdTAwM2MgQVJSQVlfU0laRShzbWFwc19yb2xsdXBfc3RhdF9uYW1lcyk7IHN0YXQrKylcbitcdFx0cHJpbnRmKFwiJTY0cyAlbHUga0JcXG5cIiwgc21hcHNfcm9sbHVwX3N0YXRfbmFtZXNbc3RhdF0sIHN0YXRzLVx1MDAzZXZhbHVlc1tzdGF0XSk7XG4rfVxuK1xuK3N0YXRpYyBib29sIGNtcF9zbWFwc19yb2xsdXBfc3RhdChzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpzMSxcbitcdFx0XHRcdCAgc3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyAqczIsXG4rXHRcdFx0XHQgIGVudW0gc21hcHNfcm9sbHVwX3N0YXQgc3RhdClcbit7XG4rXHRyZXR1cm4gczEtXHUwMDNldmFsdWVzW3N0YXRdID09IHMyLVx1MDAzZXZhbHVlc1tzdGF0XTtcbit9XG4rXG4rc3RhdGljIGJvb2wgY29tcGFyZV9zbWFwc19yb2xsdXAoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZixcbitcdFx0XHRcdCBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpleHBlY3RlZCxcbitcdFx0XHRcdCBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICphY3R1YWwpXG4re1xuK1x0LypcbitcdCAqIENsZWFuL2RpcnR5IG1ldHJpY3MgbWlnaHQgY2hhbmdlIGJ1dCBQc3MtcmVsYXRlZCBvbmVzXG4rXHQgKiBzaG91bGQgc3RheSBjb25zdGFudC5cbitcdCAqL1xuK1x0aWYgKGNtcF9zbWFwc19yb2xsdXBfc3RhdChleHBlY3RlZCwgYWN0dWFsLCBQc3MpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGNtcF9zbWFwc19yb2xsdXBfc3RhdChleHBlY3RlZCwgYWN0dWFsLCBQc3NfQW5vbikgXHUwMDI2XHUwMDI2XG4rXHQgICAgY21wX3NtYXBzX3JvbGx1cF9zdGF0KGV4cGVjdGVkLCBhY3R1YWwsIFBzc19GaWxlKSBcdTAwMjZcdTAwMjZcbitcdCAgICBjbXBfc21hcHNfcm9sbHVwX3N0YXQoZXhwZWN0ZWQsIGFjdHVhbCwgUHNzX1NobWVtKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRwcmludF9zbWFwc19yb2xsdXBfc3RhdHMoXCJFeHBlY3RlZCBzdGF0czpcIiwgc2VsZiwgZXhwZWN0ZWQpO1xuK1x0cHJpbnRfc21hcHNfcm9sbHVwX3N0YXRzKFwiQWN0dWFsIHN0YXRzOlwiLCBzZWxmLCBhY3R1YWwpO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgdm9pZCByZXBvcnRfdGVzdF9zdGFydChjb25zdCBjaGFyICpuYW1lLCBib29sIHZlcmJvc2UpXG4ge1xuIFx0aWYgKHZlcmJvc2UpXG5AQCAtNTcyLDYgKzcxOSw3IEBAIEZJWFRVUkVfU0VUVVAocHJvY19tYXBzX3JhY2UpXG4gXHR1bnNpZ25lZCBsb25nIGZpcnN0X21hcF9hZGRyO1xuIFx0dW5zaWduZWQgbG9uZyBsYXN0X21hcF9hZGRyO1xuIFx0dW5zaWduZWQgbG9uZyBkdXJhdGlvbl9zZWM7XG4rXHRjaGFyIHJvbGx1cF9mbmFtZVszMl07XG4gXHRjaGFyIGZuYW1lWzMyXTtcbiBcbiBcdHNlbGYtXHUwMDNlcGFnZV9zaXplID0gKHVuc2lnbmVkIGxvbmcpc3lzY29uZihfU0NfUEFHRVNJWkUpO1xuQEAgLTY0OSw2ICs3OTcsOSBAQCBGSVhUVVJFX1NFVFVQKHByb2NfbWFwc19yYWNlKVxuIFx0XHRicmVhaztcbiBcdGNhc2UgU01BUFM6XG4gXHRcdHNwcmludGYoZm5hbWUsIFwiL3Byb2MvJWQvc21hcHNcIiwgc2VsZi1cdTAwM2VwaWQpO1xuK1x0XHRzcHJpbnRmKHJvbGx1cF9mbmFtZSwgXCIvcHJvYy8lZC9zbWFwc19yb2xsdXBcIiwgc2VsZi1cdTAwM2VwaWQpO1xuK1x0XHRzZWxmLVx1MDAzZXJvbGx1cF9mZCA9IG9wZW4ocm9sbHVwX2ZuYW1lLCBPX1JET05MWSk7XG4rXHRcdEFTU0VSVF9ORShzZWxmLVx1MDAzZXJvbGx1cF9mZCwgLTEpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGtzZnRfZXhpdF9mYWlsKCk7XG5AQCAtNzExLDYgKzg2Miw4IEBAIEZJWFRVUkVfVEVBUkRPV04ocHJvY19tYXBzX3JhY2UpXG4gXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mgc2VsZi1cdTAwM2V2bWFfY291bnQ7IGkrKylcbiBcdFx0bXVubWFwKHNlbGYtXHUwMDNlbW9kX2luZm8tXHUwMDNlY2hpbGRfbWFwcGVkX2FkZHJbaV0sIHNlbGYtXHUwMDNlcGFnZV9zaXplKTtcbiBcdGNsb3NlKHNlbGYtXHUwMDNlbWFwc19mZCk7XG4rXHRpZiAoc2VsZi1cdTAwM2VtYXBzX2ZpbGUgPT0gU01BUFMpXG4rXHRcdGNsb3NlKHNlbGYtXHUwMDNlcm9sbHVwX2ZkKTtcbiBcdHdhaXRwaWQoc2VsZi1cdTAwM2VwaWQsIFx1MDAyNnN0YXR1cywgMCk7XG4gXHRtdW5tYXAoc2VsZi1cdTAwM2Vtb2RfaW5mbywgc2VsZi1cdTAwM2VzaGFyZWRfbWVtX3NpemUpO1xuIH1cbkBAIC03MjMsNiArODc2LDcgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3NwbGl0KVxuIFx0c3RydWN0IGxpbmVfY29udGVudCBzcGxpdF9maXJzdF9saW5lO1xuIFx0c3RydWN0IGxpbmVfY29udGVudCByZXN0b3JlZF9sYXN0X2xpbmU7XG4gXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2ZpcnN0X2xpbmU7XG4rXHRzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIG9yaWdfc3RhdHM7XG4gXG4gXHR3YWl0X2Zvcl9zdGF0ZShtb2RfaW5mbywgU0VUVVBfUkVBRFkpO1xuIFxuQEAgLTczNiw2ICs4OTAsOCBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fc3BsaXQpXG4gXHRyZXBvcnRfdGVzdF9zdGFydChcIlRlYXJpbmcgZnJvbSBzcGxpdFwiLCBzZWxmLVx1MDAzZXZlcmJvc2UpO1xuIFx0QVNTRVJUX1RSVUUoY2FwdHVyZV9tb2RfcGF0dGVybihzZWxmLCBcdTAwMjZzcGxpdF9sYXN0X2xpbmUsIFx1MDAyNnNwbGl0X2ZpcnN0X2xpbmUsXG4gXHRcdFx0XHRcdFx1MDAyNnJlc3RvcmVkX2xhc3RfbGluZSwgXHUwMDI2cmVzdG9yZWRfZmlyc3RfbGluZSkpO1xuK1x0aWYgKHNlbGYtXHUwMDNlbWFwc19maWxlID09IFNNQVBTKVxuK1x0XHRBU1NFUlRfVFJVRShwYXJzZV9zbWFwc19yb2xsdXAoc2VsZiwgXHUwMDI2b3JpZ19zdGF0cykpO1xuIFxuIFx0LyogTm93IHN0YXJ0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBmb3Igc2VsZi1cdTAwM2VkdXJhdGlvbl9zZWMgKi9cbiBcdHNpZ25hbF9zdGF0ZShtb2RfaW5mbywgVEVTVF9SRUFEWSk7XG5AQCAtNzk5LDYgKzk1NSwxMSBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fc3BsaXQpXG4gXHRcdFx0XHQgICAgIHZtYV9lbmQgPT0gc2VsZi1cdTAwM2VsYXN0X2xpbmUuZW5kX2FkZHIpIHx8XG4gXHRcdFx0XHQgICAgKHZtYV9zdGFydCA9PSBzcGxpdF9maXJzdF9saW5lLnN0YXJ0X2FkZHIgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgICAgIHZtYV9lbmQgPT0gc3BsaXRfZmlyc3RfbGluZS5lbmRfYWRkcikpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgc3RhdHM7XG4rXG4rXHRcdFx0QVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsIFx1MDAyNnN0YXRzKSk7XG4rXHRcdFx0QVNTRVJUX1RSVUUoY29tcGFyZV9zbWFwc19yb2xsdXAoc2VsZiwgXHUwMDI2b3JpZ19zdGF0cywgXHUwMDI2c3RhdHMpKTtcbiBcdFx0fVxuIFx0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQ19DT0FSU0UsIFx1MDAyNmVuZF90cyk7XG4gXHRcdGVuZF90ZXN0X2l0ZXJhdGlvbihcdTAwMjZlbmRfdHMsIHNlbGYtXHUwMDNldmVyYm9zZSk7XG5AQCAtODE3LDYgKzk3OCw3IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9yZXNpemUpXG4gXHRzdHJ1Y3QgbGluZV9jb250ZW50IHNocnVua19maXJzdF9saW5lO1xuIFx0c3RydWN0IGxpbmVfY29udGVudCByZXN0b3JlZF9sYXN0X2xpbmU7XG4gXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2ZpcnN0X2xpbmU7XG4rXHRzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIG9yaWdfc3RhdHM7XG4gXG4gXHR3YWl0X2Zvcl9zdGF0ZShtb2RfaW5mbywgU0VUVVBfUkVBRFkpO1xuIFxuQEAgLTgzMCw2ICs5OTIsOCBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fcmVzaXplKVxuIFx0cmVwb3J0X3Rlc3Rfc3RhcnQoXCJUZWFyaW5nIGZyb20gcmVzaXplXCIsIHNlbGYtXHUwMDNldmVyYm9zZSk7XG4gXHRBU1NFUlRfVFJVRShjYXB0dXJlX21vZF9wYXR0ZXJuKHNlbGYsIFx1MDAyNnNocnVua19sYXN0X2xpbmUsIFx1MDAyNnNocnVua19maXJzdF9saW5lLFxuIFx0XHRcdFx0XHRcdTAwMjZyZXN0b3JlZF9sYXN0X2xpbmUsIFx1MDAyNnJlc3RvcmVkX2ZpcnN0X2xpbmUpKTtcbitcdGlmIChzZWxmLVx1MDAzZW1hcHNfZmlsZSA9PSBTTUFQUylcbitcdFx0QVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsIFx1MDAyNm9yaWdfc3RhdHMpKTtcbiBcbiBcdC8qIE5vdyBzdGFydCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZm9yIHNlbGYtXHUwMDNlZHVyYXRpb25fc2VjICovXG4gXHRzaWduYWxfc3RhdGUobW9kX2luZm8sIFRFU1RfUkVBRFkpO1xuQEAgLTg4MCw2ICsxMDQ0LDExIEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9yZXNpemUpXG4gXHRcdFx0QVNTRVJUX1RSVUUodm1hX3N0YXJ0ID09IHNlbGYtXHUwMDNlbGFzdF9saW5lLnN0YXJ0X2FkZHIgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgICAgKHZtYV9lbmQgLSB2bWFfc3RhcnQgPT0gc2VsZi1cdTAwM2VwYWdlX3NpemUgKiAzIHx8XG4gXHRcdFx0XHQgICAgIHZtYV9lbmQgLSB2bWFfc3RhcnQgPT0gc2VsZi1cdTAwM2VwYWdlX3NpemUpKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIHN0YXRzO1xuK1xuK1x0XHRcdEFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCBcdTAwMjZzdGF0cykpO1xuK1x0XHRcdEFTU0VSVF9UUlVFKGNvbXBhcmVfc21hcHNfcm9sbHVwKHNlbGYsIFx1MDAyNm9yaWdfc3RhdHMsIFx1MDAyNnN0YXRzKSk7XG4gXHRcdH1cbiBcdFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUNfQ09BUlNFLCBcdTAwMjZlbmRfdHMpO1xuIFx0XHRlbmRfdGVzdF9pdGVyYXRpb24oXHUwMDI2ZW5kX3RzLCBzZWxmLVx1MDAzZXZlcmJvc2UpO1xuQEAgLTg5OCw2ICsxMDY3LDcgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3JlbWFwKVxuIFx0c3RydWN0IGxpbmVfY29udGVudCByZW1hcHBlZF9maXJzdF9saW5lO1xuIFx0c3RydWN0IGxpbmVfY29udGVudCByZXN0b3JlZF9sYXN0X2xpbmU7XG4gXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2ZpcnN0X2xpbmU7XG4rXHRzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIG9yaWdfc3RhdHM7XG4gXG4gXHR3YWl0X2Zvcl9zdGF0ZShtb2RfaW5mbywgU0VUVVBfUkVBRFkpO1xuIFxuQEAgLTkxMSw2ICsxMDgxLDggQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3JlbWFwKVxuIFx0cmVwb3J0X3Rlc3Rfc3RhcnQoXCJUZWFyaW5nIGZyb20gcmVtYXBcIiwgc2VsZi1cdTAwM2V2ZXJib3NlKTtcbiBcdEFTU0VSVF9UUlVFKGNhcHR1cmVfbW9kX3BhdHRlcm4oc2VsZiwgXHUwMDI2cmVtYXBwZWRfbGFzdF9saW5lLCBcdTAwMjZyZW1hcHBlZF9maXJzdF9saW5lLFxuIFx0XHRcdFx0XHRcdTAwMjZyZXN0b3JlZF9sYXN0X2xpbmUsIFx1MDAyNnJlc3RvcmVkX2ZpcnN0X2xpbmUpKTtcbitcdGlmIChzZWxmLVx1MDAzZW1hcHNfZmlsZSA9PSBTTUFQUylcbitcdFx0QVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsIFx1MDAyNm9yaWdfc3RhdHMpKTtcbiBcbiBcdC8qIE5vdyBzdGFydCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZm9yIHNlbGYtXHUwMDNlZHVyYXRpb25fc2VjICovXG4gXHRzaWduYWxfc3RhdGUobW9kX2luZm8sIFRFU1RfUkVBRFkpO1xuQEAgLTk2Myw2ICsxMTM1LDExIEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9yZW1hcClcbiBcdFx0XHRcdCAgICAgdm1hX2VuZCAtIHZtYV9zdGFydCA9PSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSAqIDMpIHx8XG4gXHRcdFx0XHQgICAgKHZtYV9zdGFydCA9PSBzZWxmLVx1MDAzZWxhc3RfbGluZS5zdGFydF9hZGRyICsgc2VsZi1cdTAwM2VwYWdlX3NpemUgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgICAgIHZtYV9lbmQgLSB2bWFfc3RhcnQgPT0gc2VsZi1cdTAwM2VwYWdlX3NpemUpKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIHN0YXRzO1xuK1xuK1x0XHRcdEFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCBcdTAwMjZzdGF0cykpO1xuK1x0XHRcdEFTU0VSVF9UUlVFKGNvbXBhcmVfc21hcHNfcm9sbHVwKHNlbGYsIFx1MDAyNm9yaWdfc3RhdHMsIFx1MDAyNnN0YXRzKSk7XG4gXHRcdH1cbiBcdFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUNfQ09BUlNFLCBcdTAwMjZlbmRfdHMpO1xuIFx0XHRlbmRfdGVzdF9pdGVyYXRpb24oXHUwMDI2ZW5kX3RzLCBzZWxmLVx1MDAzZXZlcmJvc2UpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6Mzg6MTAuMjY1NDgxMTYxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI1MzM1OTA0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiAvcHJvYy90YXNrX21tdS5jIGFuZCBzZWxmdGVzdHMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgaXQgdG91Y2hlcyBgZnMvcHJvYy90YXNrX21tdS5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuY2AsIHNvIGxldCdzIGZvY3VzIG9uIHRoZSBrZXJuZWwgc2lkZSwgc3BlY2lmaWNhbGx5IGBmcy9wcm9jL3Rhc2tfbW11LmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgY29udGV4dC5cblxuRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZXJlJ3Mgc29tZSBzZXJpb3VzIHJlZmFjdG9yaW5nIGdvaW5nIG9uIHdpdGggdGhlIGxvY2tpbmcgaGVscGVycy4gSSdtIHNlZWluZyBjaGFuZ2VzIHJlbGF0ZWQgdG86IGBsb2NrX2N0eF9tbWAsIGB1bmxvY2tfY3R4X21tYCwgYHJlc2V0X2xvY2tfY3R4YCwgYHVubG9ja19jdHhfdm1hYCwgYGxvY2tfdm1hX3JhbmdlYCwgYHVubG9ja192bWFfcmFuZ2VgLCBgZmFsbGJhY2tfdG9fbW1hcF9sb2NrYCwgYGRyb3BfcmN1YCwgYW5kIGByZWFjcXVpcmVfcmN1YC4gQ2xlYXJseSwgdGhleSdyZSByZXRoaW5raW5nIGhvdyBsb2NraW5nIGlzIGhhbmRsZWQgaW4gdGhpcyBhcmVhLiBUaGVyZSBhcmUgYWxzbyBjaGFuZ2VzIHRvIHRoZSB2YXJpYWJsZXMgYG1fc3RhcnRgLCBgbV9zdG9wYCwgYW5kIGBkb19wcm9jbWFwX3F1ZXJ5YCwgd2hpY2ggd2FycmFudHMgY2xvc2VyIGV4YW1pbmF0aW9uLlxuXG5TcGVjaWZpY2FsbHksIGluIGBzbWFwX2dhdGhlcl9zdGF0c2AsIEkgbm90aWNlIGEgY2hhbmdlIHRvIGhvdyB0aGUgYHN0YXJ0YCBwYXJhbWV0ZXIgaXMgaGFuZGxlZCwgaW5jbHVkaW5nIGBpc19wYXJ0aWFsID0gc3RhcnQgXHUwMDNlIHZtYS1cdTAwM2V2bV9zdGFydGAgbG9naWMgYW5kIHRoZSB1c2Ugb2YgYHdhbGtfcGFnZV9yYW5nZV92bWFgIGluc3RlYWQgb2YgYHdhbGtfcGFnZV92bWFgIG9yIGB3YWxrX3BhZ2VfcmFuZ2VgLiBUaGlzIGlzIGxpa2VseSB0byByZWZpbmUgdGhlIHJhbmdlIG9mIG1lbW9yeSBiZWluZyBhbmFseXplZC5cblxuVGhlIG1vc3Qgc2lnbmlmaWNhbnQgY2hhbmdlLCBob3dldmVyLCBzZWVtcyB0byBiZSBpbiBgc2hvd19zbWFwc19yb2xsdXBgLiBJdCBhcHBlYXJzIHRoZXkncmUgbW92aW5nIGF3YXkgZnJvbSBhIHNpbmdsZSBgbW1hcF9yZWFkX2xvY2tgIGF0IHRoZSBiZWdpbm5pbmcgKGBsb2NrX2N0eF9tbWApIGFuZCBhcmUgbm93IHV0aWxpemluZyBgcmN1X3JlYWRfbG9jaygpYCBhbG9uZyB3aXRoIGByZXNldF9sb2NrX2N0eChsb2NrX2N0eClgLCBlbXBsb3lpbmcgYHByb2NfZ2V0X3ZtYWAgYW5kIHBlci1WTUEgbG9ja2luZyAoVk1BIGxvY2tzKSB1bmRlciBSQ1UuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhleSBhcmUgYWltaW5nIGZvciBpbXByb3ZlZCBjb25jdXJyZW5jeSwgc2ltaWxhciB0byBob3cgYC9wcm9jL3BpZC9zbWFwc2AgYW5kIGAvcHJvYy9waWQvbWFwc2Agd29yay4gSXQncyBsaWtlbHkgdHJ5aW5nIHRvIHJlZHVjZSBjb250ZW50aW9uIG9uIHRoZSBnbG9iYWwgbW1hcCBsb2NrLCB1c2luZyBSQ1UgZm9yIHJlYWQgb3BlcmF0aW9ucy4gVGhleSd2ZSBhbHNvIGFjY291bnRlZCBmb3IgaGFuZGxpbmcgY29udGVudGlvbnMgb3IgZmFsbGJhY2tzIGlmIGBtbWFwX2xvY2tgIGlzIG5lZWRlZC4gSW4gYWRkaXRpb24sIHRoZSBgc2hvd19zbWFwYCBmdW5jdGlvbiBub3cgY2FsbHMgYHNtYXBfZ2F0aGVyX3N0YXRzKHByaXYsIHZtYSwgXHUwMDI2bXNzLCB2bWEtXHUwMDNldm1fc3RhcnQpYCBpbnN0ZWFkIG9mIHBhc3NpbmcgMCwgd2hpY2ggYWxzbyB3YXJyYW50cyBpbnZlc3RpZ2F0aW9uLlxuXG5UaW1lIHRvIGNvbnN1bHQgdGhlIHNvdXJjZS4gTGV0J3MgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSB3aXRoaW4gYGZzL3Byb2MvdGFza19tbXUuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTc2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6Mzg6MTUuNTE4ODQzODM2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDg2NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNob3dfc21hcHNfcm9sbHVwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvdGFza19tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmM9MTMzOD1zdGF0aWMgaW50IHNob3dfc21hcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTM2NS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTM2NjpzdGF0aWMgaW50IHNob3dfc21hcHNfcm9sbHVwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTM2Ny17XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MTQ3OD1zdGF0aWMgaW50IHNtYXBzX3JvbGx1cF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTE0ODYtXFxuZnMvcHJvYy90YXNrX21tdS5jOjE0ODc6XFx0cmV0ID0gc2luZ2xlX29wZW4oZmlsZSwgc2hvd19zbWFwc19yb2xsdXAsIHByaXYpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0xNDg4LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjM4OjE1LjU2Nzk0NDAyNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NzA4NzU5OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIGBmcy9wcm9jL3Rhc2tfbW11LmNgIGZvciBNZW1vcnkgTWFwcGluZyBEZWVwIERpdmVzKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBtZW1vcnkgbWFwcGluZ3MsIHNwZWNpZmljYWxseSBob3cgdGhleSdyZSBleHBvc2VkIHRocm91Z2ggYC9wcm9jL1twaWRdL3NtYXBzYC4gVGhlIGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIG1hZGUgYXJvdW5kIGBzaG93X3NtYXBzX3JvbGx1cGAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsJ3MgYGZzL3Byb2MvdGFza19tbXUuY2AgZmlsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGtlcm5lbCBnYXRoZXJzIGFuZCBwcmVzZW50cyBwZXItdGFzayBtZW1vcnkgaW5mb3JtYXRpb24uIFRoYXQgYHNob3dfc21hcHNfcm9sbHVwYCBmdW5jdGlvbiBpcyBhIGtleSBlbnRyeSBwb2ludCwgYW5kIHdoYXRldmVyIHN1cnJvdW5kaW5nIGNvZGUgZ290IHRvdWNoZWQgbGlrZWx5IGhvbGRzIGluc2lnaHRzIGludG8gcmVjZW50IGltcHJvdmVtZW50cywgYnVnIGZpeGVzLCBvciBuZXcgZmVhdHVyZXMgaW4gdGhlIHZpcnR1YWwgbWVtb3J5IHJlcG9ydGluZy4gSSB3YW50IHRvIGNoZWNrIGhvdyB0aGV5IGFyZSBnZXR0aW5nIHRoZSB0b3RhbCBvZiB0aGUgcHJpdmF0ZSwgc2hhcmVkLCBzd2FwcGVkLCBldGMgbWVtb3J5IGluZm8uIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCBwYWdlIHNpemVzLCBOVU1BIGNvbmZpZ3VyYXRpb25zLCBhbmQgcGVyaGFwcyBldmVuIG1lbW9yeS10aWVyaW5nIHRlY2hub2xvZ2llcyBpZiB0aGV5IGFyZSBleHBvc2VkIGluIHRoZSBgc21hcHNgIG91dHB1dC4gSSBhbnRpY2lwYXRlIHNvbWUgaW50ZXJlc3RpbmcgdXNlcyBvZiBgcHRlYHMgYW5kIGBwbWRgcy4gVGltZSB0byBkaWcgaW4gYW5kIGdldCBhIGdyaXAgb24gdGhvc2UgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyODEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOTozODoxOS4wMzg4MjI0MDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIxNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvcHJvYy90YXNrX21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNjAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzYwOlxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIlByb3RlY3Rpb25LZXk6ICAlOHVcXFxcblxcXCIsIHZtYV9wa2V5KHZtYSkpO1xcbjEzNjE6XFx0XFx0c2hvd19zbWFwX3ZtYV9mbGFncyhtLCB2bWEpO1xcbjEzNjI6XFx0XFxuMTM2MzpcXHRcXHRyZXR1cm4gMDtcXG4xMzY0OlxcdH1cXG4xMzY1OlxcdFxcbjEzNjY6XFx0c3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuMTM2NzpcXHR7XFxuMTM2ODpcXHRcXHRzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYgPSBtLVxcdTAwM2Vwcml2YXRlO1xcbjEzNjk6XFx0XFx0c3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHggPSBcXHUwMDI2cHJpdi1cXHUwMDNlbG9ja19jdHg7XFxuMTM3MDpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGxvY2tfY3R4LVxcdTAwM2VtbTtcXG4xMzcxOlxcdFxcdHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyBtc3MgPSB7fTtcXG4xMzcyOlxcdFxcdHVuc2lnbmVkIGxvbmcgbGFzdF92bWFfZW5kID0gMDtcXG4xMzczOlxcdFxcdHVuc2lnbmVkIGxvbmcgdm1hX3N0YXJ0ID0gMDtcXG4xMzc0OlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbjEzNzU6XFx0XFx0bG9mZl90IHBvcyA9IDA7XFxuMTM3NjpcXHRcXHRpbnQgcmV0ID0gMDtcXG4xMzc3OlxcdFxcbjEzNzg6XFx0XFx0cHJpdi1cXHUwMDNldGFzayA9IGdldF9wcm9jX3Rhc2socHJpdi1cXHUwMDNlaW5vZGUpO1xcbjEzNzk6XFx0XFx0aWYgKCFwcml2LVxcdTAwM2V0YXNrKVxcbjEzODA6XFx0XFx0XFx0cmV0dXJuIC1FU1JDSDtcXG4xMzgxOlxcdFxcbjEzODI6XFx0XFx0aWYgKCFtbSB8fCAhbW1nZXRfbm90X3plcm8obW0pKSB7XFxuMTM4MzpcXHRcXHRcXHRyZXQgPSAtRVNSQ0g7XFxuMTM4NDpcXHRcXHRcXHRnb3RvIG91dF9wdXRfdGFzaztcXG4xMzg1OlxcdFxcdH1cXG4xMzg2OlxcdFxcbjEzODc6XFx0XFx0aG9sZF90YXNrX21lbXBvbGljeShwcml2KTtcXG4xMzg4OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4xMzg5OlxcdFxcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcXG4xMzkwOlxcdFxcbjEzOTE6XFx0XFx0dm1hX2l0ZXJfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlaXRlciwgbW0sIDApO1xcbjEzOTI6XFx0XFx0dm1hID0gcHJvY19nZXRfdm1hKG0sIFxcdTAwMjZwb3MpO1xcbjEzOTM6XFx0XFx0aWYgKHVubGlrZWx5KCF2bWEpKVxcbjEzOTQ6XFx0XFx0XFx0Z290byBlbXB0eV9zZXQ7XFxuMTM5NTpcXHRcXG4xMzk2OlxcdFxcdGlmICghSVNfRVJSKHZtYSkgXFx1MDAyNlxcdTAwMjYgdm1hICE9IGdldF9nYXRlX3ZtYShsb2NrX2N0eC1cXHUwMDNlbW0pKVxcbjEzOTc6XFx0XFx0XFx0dm1hX3N0YXJ0ID0gdm1hLVxcdTAwM2V2bV9zdGFydDtcXG4xMzk4OlxcdFxcbjEzOTk6XFx0XFx0d2hpbGUgKHZtYSkge1xcbjE0MDA6XFx0XFx0XFx0aWYgKElTX0VSUih2bWEpKSB7XFxuMTQwMTpcXHRcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKHZtYSk7XFxuMTQwMjpcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTQwMzpcXHRcXHRcXHR9XFxuMTQwNDpcXHRcXG4xNDA1OlxcdFxcdFxcdGlmICh2bWEgPT0gZ2V0X2dhdGVfdm1hKGxvY2tfY3R4LVxcdTAwM2VtbSkpXFxuMTQwNjpcXHRcXHRcXHRcXHRicmVhaztcXG4xNDA3OlxcdFxcbjE0MDg6XFx0XFx0XFx0LypcXG4xNDA5OlxcdFxcdFxcdCAqIElmIGFmdGVyIHJldGFraW5nIHRoZSBsb2NrLCBhbHJlYWR5IHJlcG9ydGVkIFZNQSBncmV3IG9yXFxuMTQxMDpcXHRcXHRcXHQgKiBtZXJnZWQgd2l0aCB0aGUgbmV4dCBvbmUsIHNtYXBfZ2F0aGVyX3N0YXRzKCkgd2lsbCBnYXRoZXJcXG4xNDExOlxcdFxcdFxcdCAqIHN0YXRzIGZvciB0aGUgcmVtYWluaW5nIHBvcnRpb24gYnkgc3RhcnRpbmcgYXQgbGFzdF92bWFfZW5kLlxcbjE0MTI6XFx0XFx0XFx0ICovXFxuMTQxMzpcXHRcXHRcXHRzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsIFxcdTAwMjZtc3MsIGxhc3Rfdm1hX2VuZCk7XFxuMTQxNDpcXHRcXHRcXHRsYXN0X3ZtYV9lbmQgPSB2bWEtXFx1MDAzZXZtX2VuZDtcXG4xNDE1OlxcdFxcbjE0MTY6XFx0XFx0XFx0LypcXG4xNDE3OlxcdFxcdFxcdCAqIElmIHRoZSBWTUEgbG9jayBpcyBub3QgdGFrZW4sIHdlIGhvbGQgdGhlIG9mdGVuIGNvbnRlbmRlZFxcbjE0MTg6XFx0XFx0XFx0ICogbW1hcCBsb2NrLiBUaGlzIGNhbiBoYXBwZW4gaWYgd2UgaGFkIHRvIGZhbGwgYmFjayB0byB0aGVcXG4xNDE5OlxcdFxcdFxcdCAqIG1tYXAgbG9jay5cXG4xNDIwOlxcdFxcdFxcdCAqXFxuMTQyMTpcXHRcXHRcXHQgKiBUbyByZWxpZXZlIHByZXNzdXJlLCBjaGVjayBpZiBpdCBpcyBpbmRlZWQgY29udGVuZGVkLCB0aGVuXFxuMTQyMjpcXHRcXHRcXHQgKiB0ZW1wb3JhcmlseSByZWxlYXNlIGl0LlxcbjE0MjM6XFx0XFx0XFx0ICovXFxuMTQyNDpcXHRcXHRcXHRpZiAobG9ja19jdHgtXFx1MDAzZW1tYXBfbG9ja2VkIFxcdTAwMjZcXHUwMDI2XFxuMTQyNTpcXHRcXHRcXHQgICAgbW1hcF9sb2NrX2lzX2NvbnRlbmRlZChsb2NrX2N0eC1cXHUwMDNlbW0pKSB7XFxuMTQyNjpcXHRcXHRcXHRcXHR1bmxvY2tfY3R4X21tKGxvY2tfY3R4KTtcXG4xNDI3OlxcdFxcdFxcdFxcdC8qXFxuMTQyODpcXHRcXHRcXHRcXHQgKiBFdmVuIHRob3VnaCB3ZSBwcmV2aW91c2x5IGZlbGwgYmFjayB0byBtbWFwIGxvY2ssXFxuMTQyOTpcXHRcXHRcXHRcXHQgKiB3ZSB0cnkgdGFraW5nIFZNQSBsb2NrIGZvciB0aGUgbmV4dCBWTUEsIHNpbmNlIGl0XFxuMTQzMDpcXHRcXHRcXHRcXHQgKiBtaWdodCBub3QgYmUgdW5kZXIgbW9kaWZpY2F0aW9uLiBJbiB0aGUgd29yc3QgY2FzZVxcbjE0MzE6XFx0XFx0XFx0XFx0ICogd2Ugd2lsbCBmYWxsIGJhY2sgdG8gbW1hcCBsb2NrIGFnYWluLlxcbjE0MzI6XFx0XFx0XFx0XFx0ICovXFxuMTQzMzpcXHRcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTQzNDpcXHRcXHRcXHRcXHRyZXNldF9sb2NrX2N0eChsb2NrX2N0eCk7XFxuMTQzNTpcXHRcXHRcXHRcXHQvKiBSZXN1bWUgZnJvbSB0aGUgbGFzdCBwb3NpdGlvbi4gKi9cXG4xNDM2OlxcdFxcdFxcdFxcdHBvcyA9IGxhc3Rfdm1hX2VuZDtcXG4xNDM3OlxcdFxcdFxcdFxcdHZtYV9pdGVyX2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZWl0ZXIsIG1tLCBwb3MpO1xcbjE0Mzg6XFx0XFx0XFx0fVxcbjE0Mzk6XFx0XFx0XFx0dm1hID0gcHJvY19nZXRfdm1hKG0sIFxcdTAwMjZwb3MpO1xcbjE0NDA6XFx0XFx0fVxcbjE0NDE6XFx0XFxuMTQ0MjpcXHRlbXB0eV9zZXQ6XFxuMTQ0MzpcXHRcXHRzaG93X3ZtYV9oZWFkZXJfcHJlZml4KG0sIHZtYV9zdGFydCwgbGFzdF92bWFfZW5kLCAwLCAwLCAwLCAwKTtcXG4xNDQ0OlxcdFxcdHNlcV9wYWQobSwgJyAnKTtcXG4xNDQ1OlxcdFxcdHNlcV9wdXRzKG0sIFxcXCJbcm9sbHVwXVxcXFxuXFxcIik7XFxuMTQ0NjpcXHRcXG4xNDQ3OlxcdFxcdF9fc2hvd19zbWFwKG0sIFxcdTAwMjZtc3MsIHRydWUpO1xcbjE0NDg6XFx0XFxuMTQ0OTpcXHRvdXRfdW5sb2NrOlxcbjE0NTA6XFx0XFx0aWYgKGxvY2tfY3R4LVxcdTAwM2VtbWFwX2xvY2tlZCkge1xcbjE0NTE6XFx0XFx0XFx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XFxuMTQ1MjpcXHRcXHR9IGVsc2Uge1xcbjE0NTM6XFx0XFx0XFx0dW5sb2NrX2N0eF92bWEobG9ja19jdHgpO1xcbjE0NTQ6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTQ1NTpcXHRcXHR9XFxuMTQ1NjpcXHRcXHRyZWxlYXNlX3Rhc2tfbWVtcG9saWN5KHByaXYpO1xcbjE0NTc6XFx0XFx0bW1wdXQobW0pO1xcbjE0NTg6XFx0b3V0X3B1dF90YXNrOlxcbjE0NTk6XFx0XFx0cHV0X3Rhc2tfc3RydWN0KHByaXYtXFx1MDAzZXRhc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOTozODoxOS4wMzg5ODgxNThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDcyMDkwMTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBGdXJ0aGVyIE1vZGlmaWNhdGlvbnMgaW4gYGZzL3Byb2MvdGFza19tbXUuY2AqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBhZGRyZXNzZWQgdGhlIHByaW1hcnkgaXNzdWUsIGJ1dCB3ZSBuZWVkIHRvIGVuc3VyZSB3ZSBoYXZlbid0IGludHJvZHVjZWQgYW55IHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzIG9yIG1pc3NlZCBhbnkgc3VidGxlIGludGVyYWN0aW9ucy4gTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgd2VyZSB0b3VjaGVkIHdpdGhpbiBgZnMvcHJvYy90YXNrX21tdS5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBzZWN0aW9ucyBiZXR3ZWVuIGxpbmVzIDEyMCBhbmQgMzUwLCBhcyB3ZWxsIGFzIGxpbmVzIDYwMCB0aHJvdWdoIDc1MC4gVGhpcyBpcyB3aGVyZSB0aGUgY29kZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYXJlIGxpa2VseSB0byBiZSBtb3N0IGNvbmNlbnRyYXRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG5hdHVyZSBvZiB0aGVzZSBtb2RpZmljYXRpb25zIGFuZCBob3cgdGhleSBwb3RlbnRpYWxseSBpbXBhY3QgdGhlIG92ZXJhbGwgc3RhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgc3lzdGVtLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIG9yIGRldmlhdGlvbnMgZnJvbSBleHBlY3RlZCBiZWhhdmlvci4gVGhpcyBpcyBjcnVjaWFsIGZvciBhIGNvbXBsZXRlIGFuZCByb2J1c3QgYXNzZXNzbWVudCBvZiB0aGUgY2hhbmdlcy4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE1MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6Mzg6MjQuNTExMDgwNDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE5OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvcHJvYy90YXNrX21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHR9XFxuIDEzMTpcXHQjZW5kaWZcXG4gMTMyOlxcdFxcbiAxMzM6XFx0c3RhdGljIHZvaWQgdW5sb2NrX2N0eF9tbShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcXG4gMTM0OlxcdHtcXG4gMTM1OlxcdFxcdG1tYXBfcmVhZF91bmxvY2sobG9ja19jdHgtXFx1MDAzZW1tKTtcXG4gMTM2OlxcdFxcdGxvY2tfY3R4LVxcdTAwM2VtbWFwX2xvY2tlZCA9IGZhbHNlO1xcbiAxMzc6XFx0fVxcbiAxMzg6XFx0XFxuIDEzOTpcXHRzdGF0aWMgdm9pZCB1bmxvY2tfY3R4X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcXG4gMTQwOlxcdHtcXG4gMTQxOlxcdFxcdGlmIChsb2NrX2N0eC1cXHUwMDNlbG9ja2VkX3ZtYSkge1xcbiAxNDI6XFx0XFx0XFx0dm1hX2VuZF9yZWFkKGxvY2tfY3R4LVxcdTAwM2Vsb2NrZWRfdm1hKTtcXG4gMTQzOlxcdFxcdFxcdGxvY2tfY3R4LVxcdTAwM2Vsb2NrZWRfdm1hID0gTlVMTDtcXG4gMTQ0OlxcdFxcdH1cXG4gMTQ1OlxcdH1cXG4gMTQ2OlxcdFxcbiAxNDc6XFx0c3RhdGljIHZvaWQgcmVzZXRfbG9ja19jdHgoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXFxuIDE0ODpcXHR7XFxuIDE0OTpcXHRcXHRsb2NrX2N0eC1cXHUwMDNlbG9ja2VkX3ZtYSA9IE5VTEw7XFxuIDE1MDpcXHRcXHRsb2NrX2N0eC1cXHUwMDNlbW1hcF9sb2NrZWQgPSBmYWxzZTtcXG4gMTUxOlxcdH1cXG4gMTUyOlxcdFxcbiAxNTM6XFx0c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZ2V0X25leHRfdm1hKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcXG4gMTU0OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGxvZmZfdCBsYXN0X3BvcylcXG4gMTU1OlxcdHtcXG4gMTU2OlxcdFxcdHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4ID0gXFx1MDAyNnByaXYtXFx1MDAzZWxvY2tfY3R4O1xcbiAxNTc6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuIDE1ODpcXHRcXG4gMTU5OlxcdFxcdGlmIChsb2NrX2N0eC1cXHUwMDNlbW1hcF9sb2NrZWQpXFxuIDE2MDpcXHRcXHRcXHRyZXR1cm4gdm1hX25leHQoXFx1MDAyNnByaXYtXFx1MDAzZWl0ZXIpO1xcbiAxNjE6XFx0XFxuIDE2MjpcXHRcXHR1bmxvY2tfY3R4X3ZtYShsb2NrX2N0eCk7XFxuIDE2MzpcXHRcXHR2bWEgPSBsb2NrX25leHRfdm1hKGxvY2tfY3R4LVxcdTAwM2VtbSwgXFx1MDAyNnByaXYtXFx1MDAzZWl0ZXIsIGxhc3RfcG9zKTtcXG4gMTY0OlxcdFxcdGlmICghSVNfRVJSX09SX05VTEwodm1hKSlcXG4gMTY1OlxcdFxcdFxcdGxvY2tfY3R4LVxcdTAwM2Vsb2NrZWRfdm1hID0gdm1hO1xcbiAxNjY6XFx0XFxuIDE2NzpcXHRcXHRyZXR1cm4gdm1hO1xcbiAxNjg6XFx0fVxcbiAxNjk6XFx0XFxuIDE3MDpcXHRzdGF0aWMgYm9vbCBmYWxsYmFja190b19tbWFwX2xvY2soc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxcbiAxNzE6XFx0XFx0XFx0XFx0XFx0XFx0IGxvZmZfdCBwb3MpXFxuIDE3MjpcXHR7XFxuIDE3MzpcXHRcXHRzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrX2N0eDtcXG4gMTc0OlxcdFxcbiAxNzU6XFx0XFx0aWYgKGxvY2tfY3R4LVxcdTAwM2VtbWFwX2xvY2tlZClcXG4gMTc2OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMTc3OlxcdFxcbiAxNzg6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDE3OTpcXHRcXHRtbWFwX3JlYWRfbG9jayhsb2NrX2N0eC1cXHUwMDNlbW0pO1xcbiAxODA6XFx0XFx0LyogUmVpbml0aWFsaXplIHRoZSBpdGVyYXRvciBhZnRlciB0YWtpbmcgbW1hcF9sb2NrICovXFxuIDE4MTpcXHRcXHR2bWFfaXRlcl9zZXQoXFx1MDAyNnByaXYtXFx1MDAzZWl0ZXIsIHBvcyk7XFxuIDE4MjpcXHRcXHRsb2NrX2N0eC1cXHUwMDNlbW1hcF9sb2NrZWQgPSB0cnVlO1xcbiAxODM6XFx0XFxuIDE4NDpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMTg1OlxcdH1cXG4gMTg2OlxcdFxcbiAxODc6XFx0c3RhdGljIHZvaWQgZHJvcF9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbiAxODg6XFx0e1xcbiAxODk6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxcbiAxOTA6XFx0XFx0XFx0cmV0dXJuO1xcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMTkzOlxcdH1cXG4gMTk0OlxcdFxcbiAxOTU6XFx0c3RhdGljIHZvaWQgcmVhY3F1aXJlX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXFxuIDE5NjpcXHR7XFxuIDE5NzpcXHRcXHRpZiAocHJpdi1cXHUwMDNlbG9ja19jdHgubW1hcF9sb2NrZWQpXFxuIDE5ODpcXHRcXHRcXHRyZXR1cm47XFxuIDE5OTpcXHRcXG4gMjAwOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMjAxOlxcdFxcdC8qIFJlaW5pdGlhbGl6ZSB0aGUgaXRlcmF0b3IuICovXFxuIDIwMjpcXHRcXHR2bWFfaXRlcl9zZXQoXFx1MDAyNnByaXYtXFx1MDAzZWl0ZXIsIHByaXYtXFx1MDAzZWxvY2tfY3R4LmxvY2tlZF92bWEtXFx1MDAzZXZtX2VuZCk7XFxuIDIwMzpcXHR9XFxuIDIwNDpcXHRcXG4gMjA1OlxcdHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByb2NfZ2V0X3ZtYShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcHBvcylcXG4gMjA2OlxcdHtcXG4gMjA3OlxcdFxcdHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tXFx1MDAzZXByaXZhdGU7XFxuIDIwODpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4gMjA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOTozODoyNC41MTEzMjQ3NjlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDM1ODc4MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgYHRhc2tfbW11LmNgIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYHRhc2tfbW11LmNgIGlzIHRoZSBoZWFydCBvZiB0aGUga2VybmVsJ3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdmlydHVhbCBtZW1vcnkgc3lzdGVtIHZpYSBwcm9jZnMuIFNwZWNpZmljYWxseSwgaXQncyBoYW5kbGluZyB0aGluZ3MgbGlrZSBgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL21hcHNgLCBgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3NtYXBzYCwgYW5kIHRoZSBtb3JlIHJlY2VudCBgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3NtYXBzX3JvbGx1cGAsIGAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvY2xlYXJfcmVmc2AsIGAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvcGFnZW1hcGAsIGAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvbnVtYV9tYXBzYCwgYW5kIHRoZSBgUFJPQ01BUF9RVUVSWWAgaW9jdGwuIFRoaXMgc2NyZWFtcyAqY29yZSoga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBWaXJ0dWFsIEZpbGUgU3lzdGVtIChWRlMpIHByb2NmcyBjb2RlLlxuXG5UaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHM/IFRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcy4gRmlsZXMgbGlrZSBgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3NtYXBzX3JvbGx1cGAsIGAvcHJvYy9cdTAwM2NwaWRcdTAwM2Uvc21hcHNgLCBhbmQgYC9wcm9jL1x1MDAzY3BpZFx1MDAzZS9tYXBzYCBhcmUgY29tcGxldGVseSBzdGFuZGFyZCBwcm9jZnMgZW50cmllcyB0aGF0IHVzZXJzcGFjZSB0b29scyByZWd1bGFybHkgdXNlLiBUaGlzIGluc3RhbnRseSBmbGFncyBpdCBhcyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZy5cblxuTm93LCB0aGUgY29kZSBjaGFuZ2VzIGluIGBzaG93X3NtYXBzX3JvbGx1cGAgYXJlIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBtb3ZlZCBmcm9tIGdyYWJiaW5nIHRoZSBgbW1hcF9yZWFkX2xvY2tgIHVwZnJvbnQgdG8gdXNpbmcgUkNVLWJhc2VkIHBlci1WTUEgbG9ja3MuIFRoaXMgaW50cm9kdWNlcyBSQ1UgaW50byB0aGUgZXF1YXRpb24sIHdoaWNoIGNhbiBhbHdheXMgbGVhZCB0byBpbnRlcmVzdGluZyBjb25jdXJyZW5jeSBidWdzLiBUaGV5J3JlIHVzaW5nIGBwcm9jX2dldF92bWFgLCBgdm1hX2VuZF9yZWFkYCwgYHNtYXBfZ2F0aGVyX3N0YXRzYCwgZHJvcHBpbmcgYW5kIHJldGFraW5nIFJDVS9tbWFwIGxvY2sgb24gY29udGVudGlvbiwgZXRjLiBUaGUgbG9ja2luZyBzdHJhdGVneSBoYXMgc2lnbmlmaWNhbnRseSBjaGFuZ2VkLlxuXG5GdXJ0aGVybW9yZSwgYHNtYXBfZ2F0aGVyX3N0YXRzYCBpcyBhbHRlcmluZyBgd2Fsa19wYWdlX3JhbmdlX3ZtYWAgYW5kIHN0YXJ0IGJvdW5kIGhhbmRsaW5nLiBXZSBhbHNvIHNlZSBhZGp1c3RtZW50cyB0byBgZG9fcHJvY21hcF9xdWVyeWAgbG9ja2luZyBoZWxwZXJzLCBhbG9uZyB3aXRoIHVuLWlubGluaW5nIG9mIHNldmVyYWwgc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGBwdGVfaXNfcGlubmVkYCwgYGNsZWFyX3NvZnRfZGlydHlgLCBldGMuXG5cblRoZSBjcml0aWNhbCB0YWtlYXdheSBpcyB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIHRvdWNoaW5nICpyZWFjaGFibGUqIGNvcmUgZXhlY3V0YWJsZSBjb2RlIGluIG1tL3Byb2NmcyBhbmQgbW9kaWZ5aW5nIGZ1bmRhbWVudGFsIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBhcyB3ZWxsIGFzIGl0ZXJhdGlvbiBsb2dpYyB3aXRoaW4gYHNob3dfc21hcHNfcm9sbHVwYCBhbmQgYHNtYXBfZ2F0aGVyX3N0YXRzYC4gVGhpcyBpcyBhIGNsYXNzaWMgcmVjaXBlIGZvciBpbnRyb2R1Y2luZyBzdWJ0bGUgY29uY3VycmVuY3kgdnVsbmVyYWJpbGl0aWVzIG9yIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MuIFRoZXJlZm9yZSwgd2l0aG91dCBhIGRvdWJ0OiBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbk15IG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgYW55IGRlcGVuZGVuY2llczogSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMuIERvZXMgYHNtYXBzX3JvbGx1cGAgaGF2ZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXM/IEknbGwgY2hlY2sgS2NvbmZpZyBmb3IgYFBST0NfUEFHRV9NT05JVE9SYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MDYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOTozODoyOC45NDcyMDYxMTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjU3NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtYXBzX3JvbGx1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9wcm9jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL2Jhc2UuYz0zMjgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlkX2VudHJ5IHRnaWRfYmFzZV9zdHVmZltdID0ge1xcbi0tXFxuZnMvcHJvYy9iYXNlLmMtMzMyNC1cXHRSRUcoXFxcInNtYXBzXFxcIiwgICAgICBTX0lSVUdPLCBwcm9jX3BpZF9zbWFwc19vcGVyYXRpb25zKSxcXG5mcy9wcm9jL2Jhc2UuYzozMzI1OlxcdFJFRyhcXFwic21hcHNfcm9sbHVwXFxcIiwgU19JUlVHTywgcHJvY19waWRfc21hcHNfcm9sbHVwX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jLTMzMjYtXFx0UkVHKFxcXCJwYWdlbWFwXFxcIiwgICAgU19JUlVTUiwgcHJvY19wYWdlbWFwX29wZXJhdGlvbnMpLFxcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MzY0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0aWRfYmFzZV9zdHVmZltdID0ge1xcbi0tXFxuZnMvcHJvYy9iYXNlLmMtMzY3OS1cXHRSRUcoXFxcInNtYXBzXFxcIiwgICAgIFNfSVJVR08sIHByb2NfcGlkX3NtYXBzX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jOjM2ODA6XFx0UkVHKFxcXCJzbWFwc19yb2xsdXBcXFwiLCBTX0lSVUdPLCBwcm9jX3BpZF9zbWFwc19yb2xsdXBfb3BlcmF0aW9ucyksXFxuZnMvcHJvYy9iYXNlLmMtMzY4MS1cXHRSRUcoXFxcInBhZ2VtYXBcXFwiLCAgICBTX0lSVVNSLCBwcm9jX3BhZ2VtYXBfb3BlcmF0aW9ucyksXFxuLS1cXG5mcy9wcm9jL2ludGVybmFsLmg9NDA3PWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfcGlkX3NtYXBzX29wZXJhdGlvbnM7XFxuZnMvcHJvYy9pbnRlcm5hbC5oOjQwODpleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BpZF9zbWFwc19yb2xsdXBfb3BlcmF0aW9ucztcXG5mcy9wcm9jL2ludGVybmFsLmgtNDA5LWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2xlYXJfcmVmc19vcGVyYXRpb25zO1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTEyNTA9c3RhdGljIHZvaWQgc21hcF9nYXRoZXJfc3RhdHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTEyOTYtXFxuZnMvcHJvYy90YXNrX21tdS5jOjEyOTc6LyogU2hvdyB0aGUgY29udGVudHMgY29tbW9uIGZvciBzbWFwcyBhbmQgc21hcHNfcm9sbHVwICovXFxuZnMvcHJvYy90YXNrX21tdS5jLTEyOTgtc3RhdGljIHZvaWQgX19zaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCBjb25zdCBzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgKm1zcyxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0xMzA1LVxcdFxcdC8qXFxuZnMvcHJvYy90YXNrX21tdS5jOjEzMDY6XFx0XFx0ICogVGhlc2UgYXJlIG1lYW5pbmdmdWwgb25seSBmb3Igc21hcHNfcm9sbHVwLCBvdGhlcndpc2UgdHdvIG9mXFxuZnMvcHJvYy90YXNrX21tdS5jLTEzMDctXFx0XFx0ICogdGhlbSBhcmUgemVybywgYW5kIHRoZSBvdGhlciBvbmUgaXMgdGhlIHNhbWUgYXMgUHNzLlxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTEzMzg9c3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTEzNjUtXFxuZnMvcHJvYy90YXNrX21tdS5jOjEzNjY6c3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuZnMvcHJvYy90YXNrX21tdS5jLTEzNjcte1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTE0NzM9c3RhdGljIGludCBwaWRfc21hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0xNDc3LVxcbmZzL3Byb2MvdGFza19tbXUuYzoxNDc4OnN0YXRpYyBpbnQgc21hcHNfcm9sbHVwX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZnMvcHJvYy90YXNrX21tdS5jLTE0Nzkte1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTE0ODYtXFxuZnMvcHJvYy90YXNrX21tdS5jOjE0ODc6XFx0cmV0ID0gc2luZ2xlX29wZW4oZmlsZSwgc2hvd19zbWFwc19yb2xsdXAsIHByaXYpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0xNDg4LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTUwNi1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTUwNzpzdGF0aWMgaW50IHNtYXBzX3JvbGx1cF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbmZzL3Byb2MvdGFza19tbXUuYy0xNTA4LXtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0xNTE5PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19waWRfc21hcHNfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0xNTI1LVxcbmZzL3Byb2MvdGFza19tbXUuYzoxNTI2OmNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19waWRfc21hcHNfcm9sbHVwX29wZXJhdGlvbnMgPSB7XFxuZnMvcHJvYy90YXNrX21tdS5jOjE1Mjc6XFx0Lm9wZW5cXHRcXHQ9IHNtYXBzX3JvbGx1cF9vcGVuLFxcbmZzL3Byb2MvdGFza19tbXUuYy0xNTI4LVxcdC5yZWFkXFx0XFx0PSBzZXFfcmVhZCxcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTUyOS1cXHQubGxzZWVrXFx0XFx0PSBzZXFfbHNlZWssXFxuZnMvcHJvYy90YXNrX21tdS5jOjE1MzA6XFx0LnJlbGVhc2VcXHQ9IHNtYXBzX3JvbGx1cF9yZWxlYXNlLFxcbmZzL3Byb2MvdGFza19tbXUuYy0xNTMxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjM4OjI4Ljk5NjQ3MzY0N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzU3NDIyMDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBUYXNrIE1NVSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9ucyBmb3IgYHRhc2tfbW11LmNgLiBUaGUgbW9zdCBkaXJlY3Qgcm91dGUgdG8gdGhhdCBpbmZvcm1hdGlvbiBpcywgb2YgY291cnNlLCB0aGUgYGZzL3Byb2MvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gbGF5cyBvdXQgdGhlIHJ1bGVzIGZvciB3aGljaCBzb3VyY2UgZmlsZXMgZ2V0IGNvbXBpbGVkIGFuZCBsaW5rZWQsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIFNwZWNpZmljYWxseSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgYmFzZWQgb24gdGhlIHVzdWFsIHN1c3BlY3RzIOKAkyB0aG9zZSBgQ09ORklHX2Agb3B0aW9ucyB0aGF0IGdvdmVybiB2YXJpb3VzIGtlcm5lbCBmZWF0dXJlcy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBwcmVjaXNlIGNvbmZpZ3VyYXRpb24ga25vYnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSB0aGUgaW5jbHVzaW9uIG9mIGB0YXNrX21tdS5jYCBpbiB0aGUgZmluYWwgYnVpbGQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB3aGVuIGFuZCB3aHkgdGhlIGtlcm5lbCBpbmNvcnBvcmF0ZXMgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc0NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjM4OjMwLjc1Mzg5ODQ1OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIyMzU3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFza19tbXVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy9NYWtlZmlsZT02PW9iai15ICAgKz0gcHJvYy5vXFxuZnMvcHJvYy9NYWtlZmlsZS03LVxcbmZzL3Byb2MvTWFrZWZpbGU6ODpDRkxBR1NfdGFza19tbXUub1xcdCs9IC1Xbm8tb3ZlcnJpZGUtaW5pdFxcbmZzL3Byb2MvTWFrZWZpbGUtOS1wcm9jLXlcXHRcXHRcXHQ6PSBub21tdS5vIHRhc2tfbm9tbXUub1xcbmZzL3Byb2MvTWFrZWZpbGU6MTA6cHJvYy0kKENPTkZJR19NTVUpXFx0Oj0gdGFza19tbXUub1xcbmZzL3Byb2MvTWFrZWZpbGUtMTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjM4OjMwLjgwNjEzOTQ0N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTIzNTM1NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIGEgY291cGxlIG9mIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYmVmb3JlIEkgcHJvY2VlZC4gTGV0IG1lIHN0YXJ0IGJ5IGNoZWNraW5nIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGFuZCBgQ09ORklHX1BST0NfRlNgLiBUaGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aG9zZSB3b3VsZCBiZSB3aXRoaW4gYGZzL3Byb2MvS2NvbmZpZ2AuIEknbGwgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUsIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGV5IGFyZSBjb3JyZWN0bHkgZW5hYmxlZCBpbiBteSBjdXJyZW50IGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGZsYWdzIGFuZCBob3cgdGhleSBhcmUgdXNlZCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgcHJvYyBmaWxlc3lzdGVtLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB3aGljaCBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgc2luY2UgdGhpcyBkaXJlY3RseSBpbXBhY3RzIHRoZSBhdmFpbGFiaWxpdHkgb2YgdmFyaW91cyBtZXRyaWNzIGFuZCBkZWJ1ZyBjYXBhYmlsaXRpZXMgaW4gdGhlIHByb2MgZmlsZXN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxMDQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOTozODozMi43Mjk2Nzk1MjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2Njc1NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBST0NfUEFHRV9NT05JVE9SXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL0tjb25maWc9ODM9Y29uZmlnIFNZU0NUTFxcbi0tXFxuZnMvcHJvYy9LY29uZmlnLTEwMC1cXG5mcy9wcm9jL0tjb25maWc6MTAxOmNvbmZpZyBQUk9DX1BBR0VfTU9OSVRPUlxcbmZzL3Byb2MvS2NvbmZpZy0xMDItIFxcdGRlZmF1bHQgeVxcbi0tXFxuZnMvcHJvYy9NYWtlZmlsZT0zNj1wcm9jLSQoQ09ORklHX1BSSU5USylcXHQrPSBrbXNnLm9cXG5mcy9wcm9jL01ha2VmaWxlOjM3OnByb2MtJChDT05GSUdfUFJPQ19QQUdFX01PTklUT1IpXFx0Kz0gcGFnZS5vXFxuZnMvcHJvYy9NYWtlZmlsZS0zOC1wcm9jLSQoQ09ORklHX0JPT1RfQ09ORklHKVxcdCs9IGJvb3Rjb25maWcub1xcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MzI4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0Z2lkX2Jhc2Vfc3R1ZmZbXSA9IHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTMzMjEtXFx0UkVHKFxcXCJtb3VudHN0YXRzXFxcIiwgU19JUlVTUiwgcHJvY19tb3VudHN0YXRzX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jOjMzMjI6I2lmZGVmIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUlxcbmZzL3Byb2MvYmFzZS5jLTMzMjMtXFx0UkVHKFxcXCJjbGVhcl9yZWZzXFxcIiwgU19JV1VTUiwgcHJvY19jbGVhcl9yZWZzX29wZXJhdGlvbnMpLFxcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MzY0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0aWRfYmFzZV9zdHVmZltdID0ge1xcbi0tXFxuZnMvcHJvYy9iYXNlLmMtMzY3Ni1cXHRSRUcoXFxcIm1vdW50aW5mb1xcXCIsICBTX0lSVUdPLCBwcm9jX21vdW50aW5mb19vcGVyYXRpb25zKSxcXG5mcy9wcm9jL2Jhc2UuYzozNjc3OiNpZmRlZiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JcXG5mcy9wcm9jL2Jhc2UuYy0zNjc4LVxcdFJFRyhcXFwiY2xlYXJfcmVmc1xcXCIsIFNfSVdVU1IsIHByb2NfY2xlYXJfcmVmc19vcGVyYXRpb25zKSxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz03NTY9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BpZF9tYXBzX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtNzgzLVxcbmZzL3Byb2MvdGFza19tbXUuYzo3ODQ6I2lmZGVmIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUlxcbmZzL3Byb2MvdGFza19tbXUuYy03ODUtc3RydWN0IG1lbV9zaXplX3N0YXRzIHtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0zMTcwPWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19wYWdlbWFwX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzE3Ny19O1xcbmZzL3Byb2MvdGFza19tbXUuYzozMTc4OiNlbmRpZiAvKiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgKi9cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzE3OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6Mzg6MzIuODA2MzU5OTM0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMjgwOTI5MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIEtjb25maWcgQ29uZmlndXJhdGlvbiBmb3IgQ29udGV4dCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBmaWxlIHN5c3RlbSdzIGludGVyYWN0aW9uIHdpdGggcHJvY2Vzc2VzLCByaWdodD8gVGhlIGBmcy9wcm9jYCBwYXJ0IGFscmVhZHkgZ2l2ZXMgbWUgYSBwcmV0dHkgZ29vZCBoaW50IHRoYXQgd2UncmUgdGFsa2luZyBhYm91dCB0aGUgYC9wcm9jYCBmaWxlc3lzdGVtIGFuZCBpdHMga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGluc3RpbmN0IHNheXMgYSBwb3RlbnRpYWwgaXNzdWUgY291bGQgYmUgcmVsYXRlZCB0byBzb21lIGNvbnRyb2wgb3IgZmVhdHVyZSB3aGljaCBpcyBub3QgZXhwb3NlZCB0aGUgc3RhbmRhcmQgd2F5LCBhbmQgaXMgZXhwb3NlZCwgaW5zdGVhZCwgYnkgYSBoaWRkZW4gY29uZmlndXJhdGlvbiBvcHRpb24uIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGZzL3Byb2MvS2NvbmZpZ2AgbmVhciBsaW5lIDEwMC4gR29pbmcgZGlyZWN0bHkgdG8gdGhhdCBsb2NhdGlvbiwgSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgY29uZGl0aW9uYWwgZGVmaW5pdGlvbiByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBmZWF0dXJlIEknbSB0aGlua2luZyBhYm91dCwgb3IgcGVyaGFwcyBzb21lIHN1cnJvdW5kaW5nIGNvbnRleHQgdGhhdCBwcm92aWRlcyBjbHVlcy4gSSBtaWdodCBiZSBsb29raW5nIGZvciBhIGRlcGVuZGVuY3kgdGhhdCBJJ20gbWlzc2luZywgYSBwb3RlbnRpYWxseSBkaXNhYmxlZCBvcHRpb24sIG9yIGEgZ2VuZXJhbCBhcmVhIG9mIGNvbmNlcm4gd2l0aGluIHRoZSBwcm9jIGZpbGVzeXN0ZW0gdGhhdCBsaW5lcyB1cCB3aXRoIHRoZSBjdXJyZW50IGNvbnRleHQuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgdGVsbHMgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTI4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6Mzg6MzYuMDM0NDU0OTkyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Byb2MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5NTpcXHRcXHQgIG9wdGlvbiB3aWxsIGVubGFyZ2UgdGhlIGtlcm5lbCBieSBhdCBsZWFzdCA4IEtCLlxcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHQgIEFzIGl0IGlzIGdlbmVyYWxseSBhIGdvb2QgdGhpbmcsIHlvdSBzaG91bGQgc2F5IFkgaGVyZSB1bmxlc3NcXG4gIDk4OlxcdFxcdCAgYnVpbGRpbmcgYSBrZXJuZWwgZm9yIGluc3RhbGwvcmVzY3VlIGRpc2tzIG9yIHlvdXIgc3lzdGVtIGlzIHZlcnlcXG4gIDk5OlxcdFxcdCAgbGltaXRlZCBpbiBtZW1vcnkuXFxuIDEwMDpcXHRcXG4gMTAxOlxcdGNvbmZpZyBQUk9DX1BBR0VfTU9OSVRPUlxcbiAxMDI6XFx0IFxcdGRlZmF1bHQgeVxcbiAxMDM6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAxMDQ6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIC9wcm9jIHBhZ2UgbW9uaXRvcmluZ1xcXCIgaWYgRVhQRVJUXFxuIDEwNTpcXHQgXFx0aGVscFxcbiAxMDY6XFx0XFx0ICBWYXJpb3VzIC9wcm9jIGZpbGVzIGV4aXN0IHRvIG1vbml0b3IgcHJvY2VzcyBtZW1vcnkgdXRpbGl6YXRpb246XFxuIDEwNzpcXHRcXHQgIC9wcm9jL3BpZC9zbWFwcywgL3Byb2MvcGlkL2NsZWFyX3JlZnMsIC9wcm9jL3BpZC9wYWdlbWFwLFxcbiAxMDg6XFx0XFx0ICAvcHJvYy9rcGFnZWNvdW50LCBhbmQgL3Byb2Mva3BhZ2VmbGFncy4gRGlzYWJsaW5nIHRoZXNlXFxuIDEwOTpcXHRcXHQgIGludGVyZmFjZXMgd2lsbCByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGtlcm5lbCBieSBhcHByb3hpbWF0ZWx5IDRrYi5cXG4gMTEwOlxcdFxcbiAxMTE6XFx0Y29uZmlnIFBST0NfQ0hJTERSRU5cXG4gMTEyOlxcdFxcdGJvb2wgXFxcIkluY2x1ZGUgL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2UvdGFzay9cXHUwMDNjdGlkXFx1MDAzZS9jaGlsZHJlbiBmaWxlXFxcIlxcbiAxMTM6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuIDExNDpcXHRcXHRkZWZhdWx0IG5cXG4gMTE1OlxcdFxcdGhlbHBcXG4gMTE2OlxcdFxcdCAgUHJvdmlkZXMgYSBmYXN0IHdheSB0byByZXRyaWV2ZSBmaXJzdCBsZXZlbCBjaGlsZHJlbiBwaWRzIG9mIGEgdGFzay4gU2VlXFxuIDExNzpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3RcXHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbiAxMTg6XFx0XFxuIDExOTpcXHRcXHQgIFNheSBZIGlmIHlvdSBhcmUgcnVubmluZyBhbnkgdXNlci1zcGFjZSBzb2Z0d2FyZSB3aGljaCB0YWtlcyBiZW5lZml0IGZyb21cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6Mzg6MzYuMDM0NTMzOTQyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0Mjc3Njc3NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGFuZCBpdCBzZWVtcyBsaWtlIGBQUk9DX0ZTYCwgYFBST0NfUEFHRV9NT05JVE9SYCwgYW5kIHBvc3NpYmx5IGBNTVVgIGFyZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBhcmVhIEknbSBjb25zaWRlcmluZy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgaGVyZS5cblxuTGV0J3MgY2FyZWZ1bGx5IGV4YW1pbmUgYEZvY3VzU3ltYm9sc2AgdG8gY29uZmlybSBteSB0aGlua2luZy4gSXQgbG9va3MgbGlrZSB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIHdpdGhpbiBgZnMvcHJvYy90YXNrX21tdS5jYCBhcmUgd2hhdCBJIG5lZWQgdG8gY29uY2VudHJhdGUgb24uIFNwZWNpZmljYWxseSwgSSBzZWUgY2hhbmdlcyB0bzpcblxuKiAgIGBzaG93X3NtYXBzX3JvbGx1cGA6IFRoZSBtYWluIGxvZ2ljIGhlcmUgaGFzIGJlZW4gcmVmYWN0b3JlZCwgc3BlY2lmaWNhbGx5IGludm9sdmluZyBWTUEgbG9ja3MsIGBwcm9jX2dldF92bWFgLCBhbmQgcG90ZW50aWFsIGNvbnRlbnRpb24gcmV0cnkgbWVjaGFuaXNtcy5cbiogICBgc21hcF9nYXRoZXJfc3RhdHNgOiBUaGlzIG9uZSBoYXMgc2VlbiBjaGFuZ2VzIHRvIGl0cyBib3VuZHMgY2hlY2ssIHBhcnRpYWwgVk1BIGdhdGhlcmluZywgYW5kIHRoZSBjYWxsIHRvIGB3YWxrX3BhZ2VfcmFuZ2Vfdm1hYC5cbiogICBgc2hvd19zbWFwYDogVGhpcyBhY3RzIGFzIGEgY2FsbGVyIHRvIGBzbWFwX2dhdGhlcl9zdGF0c2AgYW5kIHVzZXMgYHZtYS1cdTAwM2V2bV9zdGFydGAuXG4qICAgYG1fc3RhcnRgLCBgbV9zdG9wYDogU2ltcGxpZmllZCBsb2NraW5nIGxvZ2ljLlxuKiAgIGBkb19wcm9jbWFwX3F1ZXJ5YDogVGhpcyBoYXMgc2ltcGxpZmllZCB0ZWFyZG93bi9sb2NrIGxvZ2ljLlxuKiAgIFRoZXJlJ3MgYWxzbyBzb21lIHN1cHBvcnRpbmcgZnVuY3Rpb25zIHN1Y2ggYXMgYGZhbGxiYWNrX3RvX21tYXBfbG9ja2AsIGBkcm9wX3JjdWAsIGByZWFjcXVpcmVfcmN1YCwgYHVubG9ja19jdHhfbW1gLCBgdW5sb2NrX2N0eF92bWFgLCBgcmVzZXRfbG9ja19jdHhgLCBgY2xlYXJfc29mdF9kaXJ0eWAsIGBjbGVhcl9zb2Z0X2RpcnR5X3BtZGAsIGBwdGVfaXNfcGlubmVkYCBhbmQgYG1ha2VfcG1lYCAodW4taW5saW5lZCkuXG5cbk15IG5leHQgc3RlcCBpcyB0byBjaG9vc2UgdGhlIGxlYXN0IHViaXF1aXRvdXMgZnVuY3Rpb25zIHRoYXQgYXJlIHJlbGF0ZWQgdG8gc3BlY2lmaWMgZmVhdHVyZXMuIExvb2tpbmcgYXQgdGhhdCBsaXN0LCBJJ20gZmFpcmx5IGNlcnRhaW4gdGhlIGZvbGxvd2luZyBmaXQgdGhlIGJpbGwsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIHBhcnRzIG9mIHRoZSBrZXJuZWwgdXN1YWxseSB3b3JrOlxuXG4qICAgYHNob3dfc21hcHNfcm9sbHVwYFxuKiAgIGBzbWFwX2dhdGhlcl9zdGF0c2BcbiogICBgc2hvd19zbWFwYFxuKiAgIGBkb19wcm9jbWFwX3F1ZXJ5YFxuXG5Ob3csIGFtIEkgcmlnaHQ/IEFyZSB0aGVzZSByZWFsbHkgbm9uLXViaXF1aXRvdXM/IEJpbmdvLCB5ZXMhIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdmVyeSBzcGVjaWZpYyB0byB0aGUgcm91dGluZXMgdGhhdCBhcmUgaW52b2x2ZWQgaW4gcmVhZGluZyBgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3NtYXBzX3JvbGx1cGAsIGAvcHJvYy9cdTAwM2NwaWRcdTAwM2Uvc21hcHNgLCBhbmQgdGhlIGBQUk9DTUFQX1FVRVJZYCBpb2N0bC5cblxuU28sIGxldCBtZSByZXZpZXcgZXZlcnl0aGluZyB0byBtYWtlIHN1cmUgSSdtIHNvbGlkOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogRGVmaW5pdGVseSB0cnVlLiBXZSBoYXZlIHJlZmFjdG9yZWQgYW5kIG1vZGlmaWVkIGNvZGUgd2l0aGluIGBtbS9wcm9jZnNgLCBhbmQgd2UgYXJlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBjaGFuZ2VzIGluIGBzaG93X3NtYXBzX3JvbGx1cGAgYW5kIFZNQSB3YWxraW5nIGluIGBzbWFwX2dhdGhlcl9zdGF0c2AuIFRoZXNlIGFyZSBwZXJmZWN0LlxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBJJ20gZ29pbmcgd2l0aCBgW1wiUFJPQ19GU1wiLCBcIlBST0NfUEFHRV9NT05JVE9SXCJdYCBoZXJlLiBgTU1VYCBtaWdodCBiZSByZXF1aXJlZCwgYnV0IHRoZXNlIHR3byBhcmUgcHJldHR5IHN0YW5kYXJkLlxuKiAgICoqRm9jdXNTeW1ib2xzKio6IGBbXCJzaG93X3NtYXBzX3JvbGx1cFwiLCBcInNtYXBfZ2F0aGVyX3N0YXRzXCIsIFwic2hvd19zbWFwXCIsIFwiZG9fcHJvY21hcF9xdWVyeVwiXWAuXG4qICAgKipSZWFzb25pbmcqKjogSSB0aGluayB0aGlzIGV4cGxhbmF0aW9uIHNob3VsZCBiZSBzdWZmaWNpZW50LlxuXG5JJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTYxMywiT3V0cHV0VG9rZW5zIjoxNjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOTozODo0MS40NjIzMDQ0NzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTc0MDE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19GU1wiLFxuICAgIFwiUFJPQ19QQUdFX01PTklUT1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaG93X3NtYXBzX3JvbGx1cFwiLFxuICAgIFwic21hcF9nYXRoZXJfc3RhdHNcIixcbiAgICBcInNob3dfc21hcFwiLFxuICAgIFwiZG9fcHJvY21hcF9xdWVyeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIC9wcm9jL1xcdTAwM2NwaWRcXHUwMDNlL3NtYXBzX3JvbGx1cCBhbmQgc21hcHMgaXRlcmF0aW9uIGxvZ2ljIGluIHRhc2tfbW11LmMgdG8gdXNlIHBlci1WTUEgbG9ja3MgdW5kZXIgUkNVIGluc3RlYWQgb2YgYWNxdWlyaW5nIG1tYXBfbG9jayB1cGZyb250LCBhZGp1c3RzIHBhcnRpYWwgVk1BIHN0YXQgZ2F0aGVyaW5nIGluIHNtYXBfZ2F0aGVyX3N0YXRzKCksIGFuZCBzaW1wbGlmaWVzIHByb2NfbWFwcyBsb2NraW5nIGhlbHBlcnMuIFRoaXMgcmVhY2hhYmxlIGNvcmUgTU0vcHJvY2ZzIGxvZ2ljIGlzIHdvcnRoIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9DX0ZTXCIsXG4gICAgXCJQUk9DX1BBR0VfTU9OSVRPUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNob3dfc21hcHNfcm9sbHVwXCIsXG4gICAgXCJzbWFwX2dhdGhlcl9zdGF0c1wiLFxuICAgIFwic2hvd19zbWFwXCIsXG4gICAgXCJkb19wcm9jbWFwX3F1ZXJ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2Uvc21hcHNfcm9sbHVwIGFuZCBzbWFwcyBpdGVyYXRpb24gbG9naWMgaW4gdGFza19tbXUuYyB0byB1c2UgcGVyLVZNQSBsb2NrcyB1bmRlciBSQ1UgaW5zdGVhZCBvZiBhY3F1aXJpbmcgbW1hcF9sb2NrIHVwZnJvbnQsIGFkanVzdHMgcGFydGlhbCBWTUEgc3RhdCBnYXRoZXJpbmcgaW4gc21hcF9nYXRoZXJfc3RhdHMoKSwgYW5kIHNpbXBsaWZpZXMgcHJvY19tYXBzIGxvY2tpbmcgaGVscGVycy4gVGhpcyByZWFjaGFibGUgY29yZSBNTS9wcm9jZnMgbG9naWMgaXMgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOTozODo0MS41NDgwNTUzMzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzMzMjQwOTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6Mzg6NDEuNTQ4NjY0MzUyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTYzMzI2MjYxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBsb2NraW5nIGFuZCBpdGVyYXRpb24gbG9naWMgaW4gL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2Uvc21hcHNfcm9sbHVwIGFuZCByZWxhdGVkIHRhc2tfbW11LmMgZnVuY3Rpb25zIChtaWdyYXRpbmcgc2hvd19zbWFwc19yb2xsdXAgdG8gdXNlIHBlci1WTUEgbG9ja2luZyB2aWEgcHJvY19nZXRfdm1hIGFuZCBzaW1wbGlmeWluZyBsb2NraW5nIGNvbnRleHQgaGVscGVyIGZ1bmN0aW9ucykuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHN0YXRpc3RpY3Mgc3RydWN0dXJlcyAoZS5nLiwgc3RydWN0IG1lbV9zaXplX3N0YXRzIG1zcyA9IHt9KSBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGFuZCBvdXRwdXQgaXMgZm9ybWF0dGVkIGFzIEFTQ0lJIHRleHQgaW50byBzZXFfZmlsZSBidWZmZXJzLiBUaGVyZSBhcmUgbm8gbmV3IG9yIG1vZGlmaWVkIHJhdyBzdHJ1Y3QgY29waWVzIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBvciBwYWRkaW5nLCBhbmQgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBjb25jdXJyZW5jeSBvciBsaWZldGltZSBpc3N1ZXMgaW50cm9kdWNlZCBieSBjaGFuZ2VzIHRvIFZNQSBsb2NraW5nL1JDVSB0cmF2ZXJzYWwgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNTVhN2FjYmE3YjhiZjFiNzQ4N2ZiMTU5MDc2MDA2MGU0Nzg5MGI0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwOTozODowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuY1xuaW5kZXggZTY3MWI0ZmQ4ZGVkZC4uNjQxYTE1NWIwYzYxMyAxMDA2NDRcbi0tLSBhL2ZzL3Byb2MvdGFza19tbXUuY1xuKysrIGIvZnMvcHJvYy90YXNrX21tdS5jXG5AQCAtMTMwLDI4ICsxMzAsMTIgQEAgc3RhdGljIHZvaWQgcmVsZWFzZV90YXNrX21lbXBvbGljeShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4gfVxuICNlbmRpZlxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGxvY2tfY3R4X21tKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdGludCByZXQgPSBtbWFwX3JlYWRfbG9ja19raWxsYWJsZShsb2NrX2N0eC1cdTAwM2VtbSk7XG4tXG4tXHRpZiAoIXJldClcbi1cdFx0bG9ja19jdHgtXHUwMDNlbW1hcF9sb2NrZWQgPSB0cnVlO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4rc3RhdGljIHZvaWQgdW5sb2NrX2N0eF9tbShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbiB7XG4gXHRtbWFwX3JlYWRfdW5sb2NrKGxvY2tfY3R4LVx1MDAzZW1tKTtcbiBcdGxvY2tfY3R4LVx1MDAzZW1tYXBfbG9ja2VkID0gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJlc2V0X2xvY2tfY3R4KHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdGxvY2tfY3R4LVx1MDAzZWxvY2tlZF92bWEgPSBOVUxMO1xuLVx0bG9ja19jdHgtXHUwMDNlbW1hcF9sb2NrZWQgPSBmYWxzZTtcbi19XG4tXG4gc3RhdGljIHZvaWQgdW5sb2NrX2N0eF92bWEoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4ge1xuIFx0aWYgKGxvY2tfY3R4LVx1MDAzZWxvY2tlZF92bWEpIHtcbkBAIC0xNjAsMjMgKzE0NCwxMCBAQCBzdGF0aWMgdm9pZCB1bmxvY2tfY3R4X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGxvY2tfdm1hX3JhbmdlKHN0cnVjdCBzZXFfZmlsZSAqbSxcbi1cdFx0XHRcdCAgc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4te1xuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0cmVzZXRfbG9ja19jdHgobG9ja19jdHgpO1xuLVxuLVx0cmV0dXJuIHRydWU7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfdm1hX3JhbmdlKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuK3N0YXRpYyB2b2lkIHJlc2V0X2xvY2tfY3R4KHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuIHtcbi1cdGlmIChsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZCkge1xuLVx0XHR1bmxvY2tfY3R4X21tKGxvY2tfY3R4KTtcbi1cdH0gZWxzZSB7XG4tXHRcdHVubG9ja19jdHhfdm1hKGxvY2tfY3R4KTtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHR9XG4rXHRsb2NrX2N0eC1cdTAwM2Vsb2NrZWRfdm1hID0gTlVMTDtcbitcdGxvY2tfY3R4LVx1MDAzZW1tYXBfbG9ja2VkID0gZmFsc2U7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmdldF9uZXh0X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXG5AQCAtMTk2LDcgKzE2Nyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmdldF9uZXh0X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXG4gXHRyZXR1cm4gdm1hO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgZmFsbGJhY2tfdG9fbW1hcF9sb2NrKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcbitzdGF0aWMgYm9vbCBmYWxsYmFja190b19tbWFwX2xvY2soc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxuIFx0XHRcdFx0XHQgbG9mZl90IHBvcylcbiB7XG4gXHRzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCA9IFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHg7XG5AQCAtMjEzLDcgKzE4NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmYWxsYmFja190b19tbWFwX2xvY2soc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBkcm9wX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4rc3RhdGljIHZvaWQgZHJvcF9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuIHtcbiBcdGlmIChwcml2LVx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxuIFx0XHRyZXR1cm47XG5AQCAtMjIxLDcgKzE5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkcm9wX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHJlYWNxdWlyZV9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuK3N0YXRpYyB2b2lkIHJlYWNxdWlyZV9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuIHtcbiBcdGlmIChwcml2LVx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxuIFx0XHRyZXR1cm47XG5AQCAtMjg2LDEzICsyNTcsOCBAQCBzdGF0aWMgdm9pZCAqbV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcHBvcylcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRpZiAoIWxvY2tfdm1hX3JhbmdlKG0sIGxvY2tfY3R4KSkge1xuLVx0XHRtbXB1dChtbSk7XG4tXHRcdHB1dF90YXNrX3N0cnVjdChwcml2LVx1MDAzZXRhc2spO1xuLVx0XHRwcml2LVx1MDAzZXRhc2sgPSBOVUxMO1xuLVx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVFIpO1xuLVx0fVxuLVxuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0cmVzZXRfbG9ja19jdHgobG9ja19jdHgpO1xuIFx0LypcbiBcdCAqIFJlc2V0IGN1cnJlbnQgcG9zaXRpb24gaWYgbGFzdF9hZGRyIHdhcyBzZXQgYmVmb3JlXG4gXHQgKiBhbmQgaXQncyBub3QgYSBzZW50aW5lbC5cbkBAIC0zMjUsNyArMjkxLDEyIEBAIHN0YXRpYyB2b2lkIG1fc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4gXHRcdHJldHVybjtcbiBcbiBcdHJlbGVhc2VfdGFza19tZW1wb2xpY3kocHJpdik7XG4tXHR1bmxvY2tfdm1hX3JhbmdlKFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHgpO1xuK1x0aWYgKHByaXYtXHUwMDNlbG9ja19jdHgubW1hcF9sb2NrZWQpIHtcbitcdFx0dW5sb2NrX2N0eF9tbShcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4KTtcbitcdH0gZWxzZSB7XG4rXHRcdHVubG9ja19jdHhfdm1hKFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHgpO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdH1cbiBcdG1tcHV0KG1tKTtcbiBcdHB1dF90YXNrX3N0cnVjdChwcml2LVx1MDAzZXRhc2spO1xuIFx0cHJpdi1cdTAwM2V0YXNrID0gTlVMTDtcbkBAIC01MTgsMjEgKzQ4OSw2IEBAIHN0YXRpYyBpbnQgcGlkX21hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdFx0UFJPQ01BUF9RVUVSWV9WTUFfRkxBR1NcdFx0XHRcdFxcXG4gKVxuIFxuLXN0YXRpYyBpbnQgcXVlcnlfdm1hX3NldHVwKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBxdWVyeV92bWFfdGVhcmRvd24oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4te1xuLVx0aWYgKGxvY2tfY3R4LVx1MDAzZW1tYXBfbG9ja2VkKVxuLVx0XHR1bmxvY2tfY3R4X21tKGxvY2tfY3R4KTtcbi1cdGVsc2Vcbi1cdFx0dW5sb2NrX2N0eF92bWEobG9ja19jdHgpO1xuLX1cbi1cbiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpxdWVyeV92bWFfZmluZF9ieV9hZGRyKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4LFxuIFx0XHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbkBAIC02NTMsMTIgKzYwOSw3IEBAIHN0YXRpYyBpbnQgZG9fcHJvY21hcF9xdWVyeShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdm9pZCBfX3VzZXIgKnVhcmcpXG4gXHRpZiAoIW1tIHx8ICFtbWdldF9ub3RfemVybyhtbSkpXG4gXHRcdHJldHVybiAtRVNSQ0g7XG4gXG4tXHRlcnIgPSBxdWVyeV92bWFfc2V0dXAoXHUwMDI2bG9ja19jdHgpO1xuLVx0aWYgKGVycikge1xuLVx0XHRtbXB1dChtbSk7XG4tXHRcdHJldHVybiBlcnI7XG4tXHR9XG4tXG4rXHRyZXNldF9sb2NrX2N0eChcdTAwMjZsb2NrX2N0eCk7XG4gXHR2bWEgPSBxdWVyeV9tYXRjaGluZ192bWEoXHUwMDI2bG9ja19jdHgsIGthcmcucXVlcnlfYWRkciwga2FyZy5xdWVyeV9mbGFncyk7XG4gXHRpZiAoSVNfRVJSKHZtYSkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUih2bWEpO1xuQEAgLTczMiw3ICs2ODMsMTAgQEAgc3RhdGljIGludCBkb19wcm9jbWFwX3F1ZXJ5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB2b2lkIF9fdXNlciAqdWFyZylcbiBcdFx0dm1fZmlsZSA9IGdldF9maWxlKHZtYS1cdTAwM2V2bV9maWxlKTtcbiBcbiBcdC8qIHVubG9jayB2bWEgb3IgbW1hcF9sb2NrLCBhbmQgcHV0IG1tX3N0cnVjdCBiZWZvcmUgY29weWluZyBkYXRhIHRvIHVzZXIgKi9cbi1cdHF1ZXJ5X3ZtYV90ZWFyZG93bihcdTAwMjZsb2NrX2N0eCk7XG4rXHRpZiAobG9ja19jdHgubW1hcF9sb2NrZWQpXG4rXHRcdHVubG9ja19jdHhfbW0oXHUwMDI2bG9ja19jdHgpO1xuK1x0ZWxzZVxuK1x0XHR1bmxvY2tfY3R4X3ZtYShcdTAwMjZsb2NrX2N0eCk7XG4gXHRtbXB1dChtbSk7XG4gXG4gXHRpZiAoa2FyZy5idWlsZF9pZF9zaXplKSB7XG5AQCAtNzczLDcgKzcyNywxMCBAQCBzdGF0aWMgaW50IGRvX3Byb2NtYXBfcXVlcnkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHZvaWQgX191c2VyICp1YXJnKVxuIFx0cmV0dXJuIDA7XG4gXG4gb3V0OlxuLVx0cXVlcnlfdm1hX3RlYXJkb3duKFx1MDAyNmxvY2tfY3R4KTtcbitcdGlmIChsb2NrX2N0eC5tbWFwX2xvY2tlZClcbitcdFx0dW5sb2NrX2N0eF9tbShcdTAwMjZsb2NrX2N0eCk7XG4rXHRlbHNlXG4rXHRcdHVubG9ja19jdHhfdm1hKFx1MDAyNmxvY2tfY3R4KTtcbiBcdG1tcHV0KG1tKTtcbiBvdXRfZmlsZTpcbiBcdGlmICh2bV9maWxlKVxuQEAgLTEyNjMsNyArMTIyMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc21hcHNfc2htZW1fd2Fsa192bWFfbG9ja19vcHMgPSB7XG4gXHQud2Fsa19sb2NrXHRcdD0gUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZLFxuIH07XG4gXG4tc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKlxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKlxuIGdldF9zbWFwc193YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4ge1xuIFx0aWYgKHByaXYtXHUwMDNlbG9ja19jdHgubW1hcF9sb2NrZWQpXG5AQCAtMTI3MSw3ICsxMjI4LDcgQEAgZ2V0X3NtYXBzX3dhbGtfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbiBcdHJldHVybiBcdTAwMjZzbWFwc193YWxrX3ZtYV9sb2NrX29wcztcbiB9XG4gXG4tc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKlxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKlxuIGdldF9zbWFwc19zaG1lbV93YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4ge1xuIFx0aWYgKHByaXYtXHUwMDNlbG9ja19jdHgubW1hcF9sb2NrZWQpXG5AQCAtMTI3OSwyMCArMTIzNiwyNyBAQCBnZXRfc21hcHNfc2htZW1fd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuIFx0cmV0dXJuIFx1MDAyNnNtYXBzX3NobWVtX3dhbGtfdm1hX2xvY2tfb3BzO1xuIH1cbiBcbi0vKlxuLSAqIEdhdGhlciBtZW0gc3RhdHMgZnJvbSBAdm1hIHdpdGggdGhlIGluZGljYXRlZCBiZWdpbm5pbmdcbi0gKiBhZGRyZXNzIEBzdGFydCwgYW5kIGtlZXAgdGhlbSBpbiBAbXNzLlxuKy8qKlxuKyAqIHNtYXBfZ2F0aGVyX3N0YXRzKCkgLSBHYXRoZXIgbWVtIHN0YXRzIGZyb20gQHZtYS5cbisgKiBAcHJpdjogcHJvYyBtYXBzIHByaXZhdGUgc3RhdGUuXG4rICogQHZtYTogVGhlIFZNQSB0byBnYXRoZXIgc3RhdHMgZm9yLlxuKyAqIEBtc3M6IFRoZSBhY2N1bXVsYXRlZCBzdGF0cy5cbisgKiBAc3RhcnQ6IFRoZSBhZGRyZXNzIGZyb20gd2hpY2ggdG8gc3RhcnQuXG4gICpcbi0gKiBVc2Ugdm1fc3RhcnQgb2YgQHZtYSBhcyB0aGUgYmVnaW5uaW5nIGFkZHJlc3MgaWYgQHN0YXJ0IGlzIDAuXG4rICogVGhpcyBnYXRoZXJzIHN0YXRzIGZvciB0aGUgd2hvbGUgb2YgdGhlIFZNQSB1bmxlc3MgdGhlIGxvY2sgd2FzIGRyb3BwZWRcbisgKiBhbmQgVk1BIGdyZXcgb3IgZ290IG1lcmdlZCBhbmQgd2UgZm91bmQgaXQgYWdhaW4sIGluIHdoaWNoIGNhc2Ugd2Ugb25seVxuKyAqIGdhdGhlciBzdGF0cyBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgVk1BIHJhbmdlLlxuICAqL1xuIHN0YXRpYyB2b2lkIHNtYXBfZ2F0aGVyX3N0YXRzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcbiBcdFx0XHQgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0XHQgICAgICBzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgKm1zcywgdW5zaWduZWQgbG9uZyBzdGFydClcbitcdFx0XHQgICAgICBzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgKm1zcyxcbitcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzID0gZ2V0X3NtYXBzX3dhbGtfb3BzKHByaXYpO1xuK1x0Y29uc3QgYm9vbCBpc19wYXJ0aWFsID0gc3RhcnQgXHUwMDNlIHZtYS1cdTAwM2V2bV9zdGFydDtcbiBcbiBcdC8qIEludmFsaWQgc3RhcnQgKi9cbi1cdGlmIChzdGFydCBcdTAwM2U9IHZtYS1cdTAwM2V2bV9lbmQpXG4rXHRpZiAoc3RhcnQgXHUwMDNjIHZtYS1cdTAwM2V2bV9zdGFydCB8fCBzdGFydCBcdTAwM2U9IHZtYS1cdTAwM2V2bV9lbmQpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmICh2bWEgPT0gZ2V0X2dhdGVfdm1hKHByaXYtXHUwMDNlbG9ja19jdHgubW0pKVxuQEAgLTEzMTIsMjAgKzEyNzYsMTcgQEAgc3RhdGljIHZvaWQgc21hcF9nYXRoZXJfc3RhdHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxuIFx0XHQgKiBVbmxlc3Mgd2Uga25vdyB0aGF0IHRoZSBzaG1lbSBvYmplY3QgKG9yIHRoZSBwYXJ0IG1hcHBlZCBieVxuIFx0XHQgKiBvdXIgVk1BKSBoYXMgbm8gc3dhcHBlZCBvdXQgcGFnZXMgYXQgYWxsLlxuIFx0XHQgKi9cbi1cdFx0dW5zaWduZWQgbG9uZyBzaG1lbV9zd2FwcGVkID0gc2htZW1fc3dhcF91c2FnZSh2bWEpO1xuK1x0XHRjb25zdCB1bnNpZ25lZCBsb25nIHNobWVtX3N3YXBwZWQgPSBzaG1lbV9zd2FwX3VzYWdlKHZtYSk7XG4rXHRcdGNvbnN0IGJvb2wgc2hhcmVkX29yX3JvID0gdm1hX3Rlc3Qodm1hLCBWTUFfU0hBUkVEX0JJVCkgfHxcbitcdFx0XHRcdFx0ICAhdm1hX3Rlc3Qodm1hLCBWTUFfV1JJVEVfQklUKTtcbiBcbi1cdFx0aWYgKCFzdGFydCBcdTAwMjZcdTAwMjYgKCFzaG1lbV9zd2FwcGVkIHx8ICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRCkgfHxcbi1cdFx0XHRcdFx0ISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1dSSVRFKSkpIHtcbitcdFx0aWYgKCFpc19wYXJ0aWFsIFx1MDAyNlx1MDAyNiAoIXNobWVtX3N3YXBwZWQgfHwgc2hhcmVkX29yX3JvKSlcbiBcdFx0XHRtc3MtXHUwMDNlc3dhcCArPSBzaG1lbV9zd2FwcGVkO1xuLVx0XHR9IGVsc2Uge1xuK1x0XHRlbHNlXG4gXHRcdFx0b3BzID0gZ2V0X3NtYXBzX3NobWVtX3dhbGtfb3BzKHByaXYpO1xuLVx0XHR9XG4gXHR9XG4gXG4tXHRpZiAoIXN0YXJ0KVxuLVx0XHR3YWxrX3BhZ2Vfdm1hKHZtYSwgb3BzLCBtc3MpO1xuLVx0ZWxzZVxuLVx0XHR3YWxrX3BhZ2VfcmFuZ2Uodm1hLVx1MDAzZXZtX21tLCBzdGFydCwgdm1hLVx1MDAzZXZtX2VuZCwgb3BzLCBtc3MpO1xuK1x0d2Fsa19wYWdlX3JhbmdlX3ZtYSh2bWEsIHN0YXJ0LCB2bWEtXHUwMDNldm1fZW5kLCBvcHMsIG1zcyk7XG4gXG4gXHRyZWFjcXVpcmVfcmN1KHByaXYpO1xuIH1cbkBAIC0xMzgwLDcgKzEzNDEsNyBAQCBzdGF0aWMgaW50IHNob3dfc21hcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHY7XG4gXHRzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgbXNzID0ge307XG4gXG4tXHRzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsIFx1MDAyNm1zcywgMCk7XG4rXHRzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsIFx1MDAyNm1zcywgdm1hLVx1MDAzZXZtX3N0YXJ0KTtcbiBcbiBcdHNob3dfbWFwX3ZtYShtLCB2bWEpO1xuIFxuQEAgLTE0MDUsMTIgKzEzNjYsMTQgQEAgc3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIHN0YXRpYyBpbnQgc2hvd19zbWFwc19yb2xsdXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIHtcbiBcdHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4ID0gXHUwMDI2cHJpdi1cdTAwM2Vsb2NrX2N0eDtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gbG9ja19jdHgtXHUwMDNlbW07XG4gXHRzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgbXNzID0ge307XG4tXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHByaXYtXHUwMDNlbG9ja19jdHgubW07XG4rXHR1bnNpZ25lZCBsb25nIGxhc3Rfdm1hX2VuZCA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIHZtYV9zdGFydCA9IDA7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbi1cdHVuc2lnbmVkIGxvbmcgdm1hX3N0YXJ0ID0gMCwgbGFzdF92bWFfZW5kID0gMDtcbitcdGxvZmZfdCBwb3MgPSAwO1xuIFx0aW50IHJldCA9IDA7XG4tXHRWTUFfSVRFUkFUT1Iodm1pLCBtbSwgMCk7XG4gXG4gXHRwcml2LVx1MDAzZXRhc2sgPSBnZXRfcHJvY190YXNrKHByaXYtXHUwMDNlaW5vZGUpO1xuIFx0aWYgKCFwcml2LVx1MDAzZXRhc2spXG5AQCAtMTQyMSw4OSArMTM4NCw2MCBAQCBzdGF0aWMgaW50IHNob3dfc21hcHNfcm9sbHVwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiBcdFx0Z290byBvdXRfcHV0X3Rhc2s7XG4gXHR9XG4gXG4tXHRyZXQgPSBsb2NrX2N0eF9tbShcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4KTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0X3B1dF9tbTtcbi1cbiBcdGhvbGRfdGFza19tZW1wb2xpY3kocHJpdik7XG4tXHR2bWEgPSB2bWFfbmV4dChcdTAwMjZ2bWkpO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0cmVzZXRfbG9ja19jdHgobG9ja19jdHgpO1xuIFxuK1x0dm1hX2l0ZXJfaW5pdChcdTAwMjZwcml2LVx1MDAzZWl0ZXIsIG1tLCAwKTtcbitcdHZtYSA9IHByb2NfZ2V0X3ZtYShtLCBcdTAwMjZwb3MpO1xuIFx0aWYgKHVubGlrZWx5KCF2bWEpKVxuIFx0XHRnb3RvIGVtcHR5X3NldDtcbiBcbi1cdHZtYV9zdGFydCA9IHZtYS1cdTAwM2V2bV9zdGFydDtcbi1cdGRvIHtcbi1cdFx0c21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCBcdTAwMjZtc3MsIDApO1xuLVx0XHRsYXN0X3ZtYV9lbmQgPSB2bWEtXHUwMDNldm1fZW5kO1xuK1x0aWYgKCFJU19FUlIodm1hKSBcdTAwMjZcdTAwMjYgdm1hICE9IGdldF9nYXRlX3ZtYShsb2NrX2N0eC1cdTAwM2VtbSkpXG4rXHRcdHZtYV9zdGFydCA9IHZtYS1cdTAwM2V2bV9zdGFydDtcbitcbitcdHdoaWxlICh2bWEpIHtcbitcdFx0aWYgKElTX0VSUih2bWEpKSB7XG4rXHRcdFx0cmV0ID0gUFRSX0VSUih2bWEpO1xuK1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0fVxuK1xuK1x0XHRpZiAodm1hID09IGdldF9nYXRlX3ZtYShsb2NrX2N0eC1cdTAwM2VtbSkpXG4rXHRcdFx0YnJlYWs7XG4gXG4gXHRcdC8qXG4tXHRcdCAqIFJlbGVhc2UgbW1hcF9sb2NrIHRlbXBvcmFyaWx5IGlmIHNvbWVvbmUgd2FudHMgdG9cbi1cdFx0ICogYWNjZXNzIGl0IGZvciB3cml0ZSByZXF1ZXN0LlxuK1x0XHQgKiBJZiBhZnRlciByZXRha2luZyB0aGUgbG9jaywgYWxyZWFkeSByZXBvcnRlZCBWTUEgZ3JldyBvclxuK1x0XHQgKiBtZXJnZWQgd2l0aCB0aGUgbmV4dCBvbmUsIHNtYXBfZ2F0aGVyX3N0YXRzKCkgd2lsbCBnYXRoZXJcbitcdFx0ICogc3RhdHMgZm9yIHRoZSByZW1haW5pbmcgcG9ydGlvbiBieSBzdGFydGluZyBhdCBsYXN0X3ZtYV9lbmQuXG4gXHRcdCAqL1xuLVx0XHRpZiAobW1hcF9sb2NrX2lzX2NvbnRlbmRlZChtbSkpIHtcbi1cdFx0XHR2bWFfaXRlcl9pbnZhbGlkYXRlKFx1MDAyNnZtaSk7XG4tXHRcdFx0dW5sb2NrX2N0eF9tbShcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4KTtcbi1cdFx0XHRyZXQgPSBsb2NrX2N0eF9tbShcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4KTtcbi1cdFx0XHRpZiAocmV0KSB7XG4tXHRcdFx0XHRyZWxlYXNlX3Rhc2tfbWVtcG9saWN5KHByaXYpO1xuLVx0XHRcdFx0Z290byBvdXRfcHV0X21tO1xuLVx0XHRcdH1cbitcdFx0c21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCBcdTAwMjZtc3MsIGxhc3Rfdm1hX2VuZCk7XG4rXHRcdGxhc3Rfdm1hX2VuZCA9IHZtYS1cdTAwM2V2bV9lbmQ7XG4gXG4rXHRcdC8qXG4rXHRcdCAqIElmIHRoZSBWTUEgbG9jayBpcyBub3QgdGFrZW4sIHdlIGhvbGQgdGhlIG9mdGVuIGNvbnRlbmRlZFxuK1x0XHQgKiBtbWFwIGxvY2suIFRoaXMgY2FuIGhhcHBlbiBpZiB3ZSBoYWQgdG8gZmFsbCBiYWNrIHRvIHRoZVxuK1x0XHQgKiBtbWFwIGxvY2suXG4rXHRcdCAqXG4rXHRcdCAqIFRvIHJlbGlldmUgcHJlc3N1cmUsIGNoZWNrIGlmIGl0IGlzIGluZGVlZCBjb250ZW5kZWQsIHRoZW5cbitcdFx0ICogdGVtcG9yYXJpbHkgcmVsZWFzZSBpdC5cbitcdFx0ICovXG4rXHRcdGlmIChsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIG1tYXBfbG9ja19pc19jb250ZW5kZWQobG9ja19jdHgtXHUwMDNlbW0pKSB7XG4rXHRcdFx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XG4gXHRcdFx0Lypcbi1cdFx0XHQgKiBBZnRlciBkcm9wcGluZyB0aGUgbG9jaywgdGhlcmUgYXJlIGZvdXIgY2FzZXMgdG9cbi1cdFx0XHQgKiBjb25zaWRlci4gU2VlIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSBmb3IgZXhwbGFuYXRpb24uXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAgICstLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0tK1xuLVx0XHRcdCAqICAgfCBWTUExIHwgVk1BMiB8IFZNQTMgICAgICB8XG4tXHRcdFx0ICogICArLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLStcbi1cdFx0XHQgKiAgIHwgICAgICB8ICAgICAgfCAgICAgICAgICAgfFxuLVx0XHRcdCAqICA0ayAgICAgOGsgICAgIDE2ayAgICAgICAgIDQwMGtcbi1cdFx0XHQgKlxuLVx0XHRcdCAqIFN1cHBvc2Ugd2UgZHJvcCB0aGUgbG9jayBhZnRlciByZWFkaW5nIFZNQTIgZHVlIHRvXG4tXHRcdFx0ICogY29udGVudGlvbiwgdGhlbiB3ZSBnZXQ6XG4tXHRcdFx0ICpcbi1cdFx0XHQgKlx0bGFzdF92bWFfZW5kID0gMTZrXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAxKSBWTUEyIGlzIGZyZWVkLCBidXQgVk1BMyBleGlzdHM6XG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAgICB2bWFfbmV4dCh2bWkpIHdpbGwgcmV0dXJuIFZNQTMuXG4tXHRcdFx0ICogICAgSW4gdGhpcyBjYXNlLCBqdXN0IGNvbnRpbnVlIGZyb20gVk1BMy5cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIDIpIFZNQTIgc3RpbGwgZXhpc3RzOlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBWTUEzLlxuLVx0XHRcdCAqICAgIEluIHRoaXMgY2FzZSwganVzdCBjb250aW51ZSBmcm9tIFZNQTMuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAzKSBObyBtb3JlIFZNQXMgY2FuIGJlIGZvdW5kOlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBOVUxMLlxuLVx0XHRcdCAqICAgIE5vIG1vcmUgdGhpbmdzIHRvIGRvLCBqdXN0IGJyZWFrLlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogNCkgKGxhc3Rfdm1hX2VuZCAtIDEpIGlzIHRoZSBtaWRkbGUgb2YgYSB2bWEgKFZNQScpOlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBWTUEnIHdob3NlIHJhbmdlXG4tXHRcdFx0ICogICAgY29udGFpbnMgbGFzdF92bWFfZW5kLlxuLVx0XHRcdCAqICAgIEl0ZXJhdGUgVk1BJyBmcm9tIGxhc3Rfdm1hX2VuZC5cbitcdFx0XHQgKiBFdmVuIHRob3VnaCB3ZSBwcmV2aW91c2x5IGZlbGwgYmFjayB0byBtbWFwIGxvY2ssXG4rXHRcdFx0ICogd2UgdHJ5IHRha2luZyBWTUEgbG9jayBmb3IgdGhlIG5leHQgVk1BLCBzaW5jZSBpdFxuK1x0XHRcdCAqIG1pZ2h0IG5vdCBiZSB1bmRlciBtb2RpZmljYXRpb24uIEluIHRoZSB3b3JzdCBjYXNlXG4rXHRcdFx0ICogd2Ugd2lsbCBmYWxsIGJhY2sgdG8gbW1hcCBsb2NrIGFnYWluLlxuIFx0XHRcdCAqL1xuLVx0XHRcdHZtYSA9IHZtYV9uZXh0KFx1MDAyNnZtaSk7XG4tXHRcdFx0LyogQ2FzZSAzIGFib3ZlICovXG4tXHRcdFx0aWYgKCF2bWEpXG4tXHRcdFx0XHRicmVhaztcbi1cbi1cdFx0XHQvKiBDYXNlIDEgYW5kIDIgYWJvdmUgKi9cbi1cdFx0XHRpZiAodm1hLVx1MDAzZXZtX3N0YXJ0IFx1MDAzZT0gbGFzdF92bWFfZW5kKSB7XG4tXHRcdFx0XHRzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsIFx1MDAyNm1zcywgMCk7XG4tXHRcdFx0XHRsYXN0X3ZtYV9lbmQgPSB2bWEtXHUwMDNldm1fZW5kO1xuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdC8qIENhc2UgNCBhYm92ZSAqL1xuLVx0XHRcdGlmICh2bWEtXHUwMDNldm1fZW5kIFx1MDAzZSBsYXN0X3ZtYV9lbmQpIHtcbi1cdFx0XHRcdHNtYXBfZ2F0aGVyX3N0YXRzKHByaXYsIHZtYSwgXHUwMDI2bXNzLCBsYXN0X3ZtYV9lbmQpO1xuLVx0XHRcdFx0bGFzdF92bWFfZW5kID0gdm1hLVx1MDAzZXZtX2VuZDtcbi1cdFx0XHR9XG4rXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcbitcdFx0XHQvKiBSZXN1bWUgZnJvbSB0aGUgbGFzdCBwb3NpdGlvbi4gKi9cbitcdFx0XHRwb3MgPSBsYXN0X3ZtYV9lbmQ7XG4rXHRcdFx0dm1hX2l0ZXJfaW5pdChcdTAwMjZwcml2LVx1MDAzZWl0ZXIsIG1tLCBwb3MpO1xuIFx0XHR9XG4tXHR9IGZvcl9lYWNoX3ZtYSh2bWksIHZtYSk7XG4rXHRcdHZtYSA9IHByb2NfZ2V0X3ZtYShtLCBcdTAwMjZwb3MpO1xuK1x0fVxuIFxuIGVtcHR5X3NldDpcbiBcdHNob3dfdm1hX2hlYWRlcl9wcmVmaXgobSwgdm1hX3N0YXJ0LCBsYXN0X3ZtYV9lbmQsIDAsIDAsIDAsIDApO1xuQEAgLTE1MTIsMTAgKzE0NDYsMTQgQEAgc3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4gXG4gXHRfX3Nob3dfc21hcChtLCBcdTAwMjZtc3MsIHRydWUpO1xuIFxuK291dF91bmxvY2s6XG4rXHRpZiAobG9ja19jdHgtXHUwMDNlbW1hcF9sb2NrZWQpIHtcbitcdFx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XG4rXHR9IGVsc2Uge1xuK1x0XHR1bmxvY2tfY3R4X3ZtYShsb2NrX2N0eCk7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0fVxuIFx0cmVsZWFzZV90YXNrX21lbXBvbGljeShwcml2KTtcbi1cdHVubG9ja19jdHhfbW0oXHUwMDI2cHJpdi1cdTAwM2Vsb2NrX2N0eCk7XG4tXG4tb3V0X3B1dF9tbTpcbiBcdG1tcHV0KG1tKTtcbiBvdXRfcHV0X3Rhc2s6XG4gXHRwdXRfdGFza19zdHJ1Y3QocHJpdi1cdTAwM2V0YXNrKTtcbkBAIC0xNjA1LDcgKzE1NDMsNyBAQCBzdHJ1Y3QgY2xlYXJfcmVmc19wcml2YXRlIHtcbiBcdGVudW0gY2xlYXJfcmVmc190eXBlcyB0eXBlO1xuIH07XG4gXG4tc3RhdGljIGlubGluZSBib29sIHB0ZV9pc19waW5uZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxuK3N0YXRpYyBib29sIHB0ZV9pc19waW5uZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG5AQCAtMTYyMSw4ICsxNTU5LDggQEAgc3RhdGljIGlubGluZSBib29sIHB0ZV9pc19waW5uZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdHJldHVybiBmb2xpb19tYXliZV9kbWFfcGlubmVkKGZvbGlvKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZSlcbitzdGF0aWMgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdFx0ICAgICBwdGVfdCAqcHRlKVxuIHtcbiBcdGlmICghcGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpXG4gXHRcdHJldHVybjtcbkBAIC0xNjUzLDggKzE1OTEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiB9XG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5X3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kcClcbitzdGF0aWMgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5X3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKVxuIHtcbiBcdHBtZF90IG9sZCwgcG1kID0gKnBtZHA7XG4gXG5AQCAtMTY3OSw4ICsxNjE3LDggQEAgc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHlfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0fVxuIH1cbiAjZWxzZVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5X3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kcClcbitzdGF0aWMgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5X3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKVxuIHtcbiB9XG4gI2VuZGlmXG5AQCAtMTg3OSw3ICsxODE3LDcgQEAgc3RydWN0IHBhZ2VtYXByZWFkIHtcbiBcbiAjZGVmaW5lIFBNX0VORF9PRl9CVUZGRVIgICAgMVxuIFxuLXN0YXRpYyBpbmxpbmUgcGFnZW1hcF9lbnRyeV90IG1ha2VfcG1lKHU2NCBmcmFtZSwgdTY0IGZsYWdzKVxuK3N0YXRpYyBwYWdlbWFwX2VudHJ5X3QgbWFrZV9wbWUodTY0IGZyYW1lLCB1NjQgZmxhZ3MpXG4ge1xuIFx0cmV0dXJuIChwYWdlbWFwX2VudHJ5X3QpIHsgLnBtZSA9IChmcmFtZSBcdTAwMjYgUE1fUEZSQU1FX01BU0spIHwgZmxhZ3MgfTtcbiB9XG5AQCAtMzQyMSw3ICszMzU5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBzaG93X251bWFfdm1hX2xvY2tfb3BzID0ge1xuIFx0LndhbGtfbG9jayA9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSxcbiB9O1xuIFxuLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcbiBnZXRfc2hvd19udW1hX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4ge1xuIFx0aWYgKHByaXYtXHUwMDNlbG9ja19jdHgubW1hcF9sb2NrZWQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLW1hcHMtcmFjZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLW1hcHMtcmFjZS5jXG5pbmRleCA0MTVlY2NiNzA0Njg0Li44ZDAwZDdkYjFjNjUyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLW1hcHMtcmFjZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2MtbWFwcy1yYWNlLmNcbkBAIC04MCw2ICs4MCw2MSBAQCBlbnVtIG1hcHNfZmlsZSB7XG4gXG4gc3RydWN0IHZtYV9tb2RpZmllcl9pbmZvO1xuIFxuK2VudW0gc21hcHNfcm9sbHVwX3N0YXQge1xuK1x0UnNzLFxuK1x0UHNzLFxuK1x0UHNzX0RpcnR5LFxuK1x0UHNzX0Fub24sXG4rXHRQc3NfRmlsZSxcbitcdFBzc19TaG1lbSxcbitcdFNoYXJlZF9DbGVhbixcbitcdFNoYXJlZF9EaXJ0eSxcbitcdFByaXZhdGVfQ2xlYW4sXG4rXHRQcml2YXRlX0RpcnR5LFxuK1x0UmVmZXJlbmNlZCxcbitcdEFub255bW91cyxcbitcdEtTTSxcbitcdExhenlGcmVlLFxuK1x0QW5vbkh1Z2VQYWdlcyxcbitcdFNobWVtUG1kTWFwcGVkLFxuK1x0RmlsZVBtZE1hcHBlZCxcbitcdFNoYXJlZF9IdWdldGxiLFxuK1x0UHJpdmF0ZV9IdWdldGxiLFxuK1x0U3dhcCxcbitcdFN3YXBQc3MsXG4rXHRMb2NrZWQsXG4rXHRSb2xsdXBGaWVsZENvdW50XG4rfTtcbitcbitzdGF0aWMgY29uc3QgY2hhciAqc21hcHNfcm9sbHVwX3N0YXRfbmFtZXNbUm9sbHVwRmllbGRDb3VudF0gPSB7XG4rXHRcIlJzc1wiLFxuK1x0XCJQc3NcIixcbitcdFwiUHNzX0RpcnR5XCIsXG4rXHRcIlBzc19Bbm9uXCIsXG4rXHRcIlBzc19GaWxlXCIsXG4rXHRcIlBzc19TaG1lbVwiLFxuK1x0XCJTaGFyZWRfQ2xlYW5cIixcbitcdFwiU2hhcmVkX0RpcnR5XCIsXG4rXHRcIlByaXZhdGVfQ2xlYW5cIixcbitcdFwiUHJpdmF0ZV9EaXJ0eVwiLFxuK1x0XCJSZWZlcmVuY2VkXCIsXG4rXHRcIkFub255bW91c1wiLFxuK1x0XCJLU01cIixcbitcdFwiTGF6eUZyZWVcIixcbitcdFwiQW5vbkh1Z2VQYWdlc1wiLFxuK1x0XCJTaG1lbVBtZE1hcHBlZFwiLFxuK1x0XCJGaWxlUG1kTWFwcGVkXCIsXG4rXHRcIlNoYXJlZF9IdWdldGxiXCIsXG4rXHRcIlByaXZhdGVfSHVnZXRsYlwiLFxuK1x0XCJTd2FwXCIsXG4rXHRcIlN3YXBQc3NcIixcbitcdFwiTG9ja2VkXCIsXG4rfTtcbitcbitzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIHtcbitcdHVuc2lnbmVkIGxvbmcgdmFsdWVzW1JvbGx1cEZpZWxkQ291bnRdO1xuK307XG4rXG4gRklYVFVSRShwcm9jX21hcHNfcmFjZSlcbiB7XG4gXHRzdHJ1Y3Qgdm1hX21vZGlmaWVyX2luZm8gKm1vZF9pbmZvO1xuQEAgLTkxLDYgKzE0Niw3IEBAIEZJWFRVUkUocHJvY19tYXBzX3JhY2UpXG4gXHRlbnVtIG1hcHNfZmlsZSBtYXBzX2ZpbGU7XG4gXHRpbnQgc2hhcmVkX21lbV9zaXplO1xuIFx0aW50IHNraXBfcGFnZXM7XG4rXHRpbnQgcm9sbHVwX2ZkO1xuIFx0aW50IHBhZ2Vfc2l6ZTtcbiBcdGludCB2bWFfY291bnQ7XG4gXHRib29sIHZlcmJvc2U7XG5AQCAtMTMyLDEyICsxODgsMTIgQEAgc3RydWN0IHZtYV9tb2RpZmllcl9pbmZvIHtcbiBcdHZvaWQgKmNoaWxkX21hcHBlZF9hZGRyW107XG4gfTtcbiBcbi1zdGF0aWMgYm9vbCByZWFkX3BhZ2UoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZixcbitzdGF0aWMgYm9vbCByZWFkX3BhZ2UoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZiwgaW50IGZkLFxuIFx0XHQgICAgICBzdHJ1Y3QgcGFnZV9jb250ZW50ICpwYWdlKVxuIHtcbiBcdHNzaXplX3QgIGJ5dGVzX3JlYWQ7XG4gXG4tXHRieXRlc19yZWFkID0gcmVhZChzZWxmLVx1MDAzZW1hcHNfZmQsIHBhZ2UtXHUwMDNlZGF0YSwgc2VsZi1cdTAwM2VwYWdlX3NpemUpO1xuK1x0Ynl0ZXNfcmVhZCA9IHJlYWQoZmQsIHBhZ2UtXHUwMDNlZGF0YSwgc2VsZi1cdTAwM2VwYWdlX3NpemUpO1xuIFx0aWYgKGJ5dGVzX3JlYWQgXHUwMDNjPSAwKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG5AQCAtMTc1LDcgKzIzMSw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX2NvbnRhaW5pbmdfcGFnZShGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmLFxuIFx0XHRjaGFyICpjdXJyX3BvcztcbiBcdFx0Y2hhciAqZW5kX3BvcztcbiBcbi1cdFx0aWYgKCFyZWFkX3BhZ2Uoc2VsZiwgXHUwMDI2c2VsZi1cdTAwM2VwYWdlMSkpXG4rXHRcdGlmICghcmVhZF9wYWdlKHNlbGYsIHNlbGYtXHUwMDNlbWFwc19mZCwgXHUwMDI2c2VsZi1cdTAwM2VwYWdlMSkpXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFxuIFx0XHRjdXJyX3BvcyA9IHNlbGYtXHUwMDNlcGFnZTEuZGF0YTtcbkBAIC0yMDUsMTAgKzI2MSwxMSBAQCBzdGF0aWMgYm9vbCByZWFkX3R3b19wYWdlcyhGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mgc2VsZi1cdTAwM2Vza2lwX3BhZ2VzOyBpKyspXG4tXHRcdGlmICghcmVhZF9wYWdlKHNlbGYsIFx1MDAyNnNlbGYtXHUwMDNlcGFnZTEpKVxuK1x0XHRpZiAoIXJlYWRfcGFnZShzZWxmLCBzZWxmLVx1MDAzZW1hcHNfZmQsIFx1MDAyNnNlbGYtXHUwMDNlcGFnZTEpKVxuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiByZWFkX3BhZ2Uoc2VsZiwgXHUwMDI2c2VsZi1cdTAwM2VwYWdlMSkgXHUwMDI2XHUwMDI2IHJlYWRfcGFnZShzZWxmLCBcdTAwMjZzZWxmLVx1MDAzZXBhZ2UyKTtcbitcdHJldHVybiByZWFkX3BhZ2Uoc2VsZiwgc2VsZi1cdTAwM2VtYXBzX2ZkLCBcdTAwMjZzZWxmLVx1MDAzZXBhZ2UxKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICByZWFkX3BhZ2Uoc2VsZiwgc2VsZi1cdTAwM2VtYXBzX2ZkLCBcdTAwMjZzZWxmLVx1MDAzZXBhZ2UyKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgY29weV9saW5lKGNvbnN0IGNoYXIgKmxpbmVfc3RhcnQsIGNvbnN0IGNoYXIgKmxpbmVfZW5kLFxuQEAgLTMxNyw2ICszNzQsNjEgQEAgc3RhdGljIGJvb2wgcmVhZF9ib3VuZGFyeV9saW5lcyhGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmLFxuIFx0XHQgICAgICBcdTAwMjZmaXJzdF9saW5lLVx1MDAzZWVuZF9hZGRyKSA9PSAyO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBwYXJzZV9zbWFwc19yb2xsdXAoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZixcbitcdFx0XHQgICAgICAgc3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyAqc3RhdHMpXG4re1xuK1x0dW5zaWduZWQgaW50IGRldl9tYWosIGRldl9taW4sIGlub2RlO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCBvZmZzO1xuK1x0dW5zaWduZWQgbG9uZyB2YWx1ZTtcbitcdGNoYXIgbmFtZVszMl0sIHBlcm1bNV07XG4rXHRjaGFyICpjdXJyX3BvcztcbitcdGNoYXIgKmVuZF9wb3M7XG4rXHRjaGFyICpsaW5lX2VuZDtcbitcbitcdGlmIChsc2VlayhzZWxmLVx1MDAzZXJvbGx1cF9mZCwgMCwgU0VFS19TRVQpIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoIXJlYWRfcGFnZShzZWxmLCBzZWxmLVx1MDAzZXJvbGx1cF9mZCwgXHUwMDI2c2VsZi1cdTAwM2VwYWdlMSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGN1cnJfcG9zID0gc2VsZi1cdTAwM2VwYWdlMS5kYXRhO1xuK1x0ZW5kX3BvcyA9IHNlbGYtXHUwMDNlcGFnZTEuZGF0YSArIHNlbGYtXHUwMDNlcGFnZTEuc2l6ZTtcbitcbitcdGxpbmVfZW5kID0gc3RyY2hyKGN1cnJfcG9zLCAnXFxuJyk7XG4rXHRpZiAoIWxpbmVfZW5kKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoc3NjYW5mKGN1cnJfcG9zLCBcIiVseC0lbHggJTRzICVseCAldToldSAldSAlMzFzXCIsXG4rXHRcdFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQsIHBlcm0sIFx1MDAyNm9mZnMsIFx1MDAyNmRldl9tYWosIFx1MDAyNmRldl9taW4sIFx1MDAyNmlub2RlLCBuYW1lKSAhPSA4KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoc3RyY21wKG5hbWUsIFwiW3JvbGx1cF1cIikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaW50IHN0YXQgPSAwOyBzdGF0IFx1MDAzYyBBUlJBWV9TSVpFKHNtYXBzX3JvbGx1cF9zdGF0X25hbWVzKTsgc3RhdCsrKSB7XG4rXHRcdGludCBsZW47XG4rXG4rXHRcdGN1cnJfcG9zID0gbGluZV9lbmQgKyAxO1xuK1x0XHRpZiAoY3Vycl9wb3MgXHUwMDNlPSBlbmRfcG9zKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0bGluZV9lbmQgPSBzdHJjaHIoY3Vycl9wb3MsICdcXG4nKTtcbitcdFx0aWYgKCFsaW5lX2VuZClcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRcdGlmIChzc2NhbmYoY3Vycl9wb3MsIFwiJTMxcyAlbHUga0JcIiwgbmFtZSwgXHUwMDI2dmFsdWUpICE9IDIpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHRsZW4gPSBzdHJsZW4obmFtZSk7XG4rXHRcdGlmIChuYW1lW2xlbiAtIDFdICE9ICc6JyB8fCBzdHJuY21wKG5hbWUsIHNtYXBzX3JvbGx1cF9zdGF0X25hbWVzW3N0YXRdLCBsZW4gLSAxKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRcdHN0YXRzLVx1MDAzZXZhbHVlc1tzdGF0XSA9IHZhbHVlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIC8qIFRocmVhZCBzeW5jaHJvbml6YXRpb24gcm91dGluZXMgKi9cbiBzdGF0aWMgdm9pZCB3YWl0X2Zvcl9zdGF0ZShzdHJ1Y3Qgdm1hX21vZGlmaWVyX2luZm8gKm1vZF9pbmZvLCBlbnVtIHRlc3Rfc3RhdGUgc3RhdGUpXG4ge1xuQEAgLTM5Nyw2ICs1MDksNDEgQEAgc3RhdGljIGJvb2wgcHJpbnRfYm91bmRhcmllc19vbihib29sIGNvbmRpdGlvbiwgY29uc3QgY2hhciAqdGl0bGUsXG4gXHRyZXR1cm4gY29uZGl0aW9uO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBwcmludF9zbWFwc19yb2xsdXBfc3RhdHMoY29uc3QgY2hhciAqdGl0bGUsIEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKnN0YXRzKVxuK3tcbitcdHByaW50ZihcIiVzXCIsIHRpdGxlKTtcbitcdGZvciAoaW50IHN0YXQgPSAwOyBzdGF0IFx1MDAzYyBBUlJBWV9TSVpFKHNtYXBzX3JvbGx1cF9zdGF0X25hbWVzKTsgc3RhdCsrKVxuK1x0XHRwcmludGYoXCIlNjRzICVsdSBrQlxcblwiLCBzbWFwc19yb2xsdXBfc3RhdF9uYW1lc1tzdGF0XSwgc3RhdHMtXHUwMDNldmFsdWVzW3N0YXRdKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgY21wX3NtYXBzX3JvbGx1cF9zdGF0KHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKnMxLFxuK1x0XHRcdFx0ICBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpzMixcbitcdFx0XHRcdCAgZW51bSBzbWFwc19yb2xsdXBfc3RhdCBzdGF0KVxuK3tcbitcdHJldHVybiBzMS1cdTAwM2V2YWx1ZXNbc3RhdF0gPT0gczItXHUwMDNldmFsdWVzW3N0YXRdO1xuK31cbitcbitzdGF0aWMgYm9vbCBjb21wYXJlX3NtYXBzX3JvbGx1cChGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmLFxuK1x0XHRcdFx0IHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKmV4cGVjdGVkLFxuK1x0XHRcdFx0IHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKmFjdHVhbClcbit7XG4rXHQvKlxuK1x0ICogQ2xlYW4vZGlydHkgbWV0cmljcyBtaWdodCBjaGFuZ2UgYnV0IFBzcy1yZWxhdGVkIG9uZXNcbitcdCAqIHNob3VsZCBzdGF5IGNvbnN0YW50LlxuK1x0ICovXG4rXHRpZiAoY21wX3NtYXBzX3JvbGx1cF9zdGF0KGV4cGVjdGVkLCBhY3R1YWwsIFBzcykgXHUwMDI2XHUwMDI2XG4rXHQgICAgY21wX3NtYXBzX3JvbGx1cF9zdGF0KGV4cGVjdGVkLCBhY3R1YWwsIFBzc19Bbm9uKSBcdTAwMjZcdTAwMjZcbitcdCAgICBjbXBfc21hcHNfcm9sbHVwX3N0YXQoZXhwZWN0ZWQsIGFjdHVhbCwgUHNzX0ZpbGUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGNtcF9zbWFwc19yb2xsdXBfc3RhdChleHBlY3RlZCwgYWN0dWFsLCBQc3NfU2htZW0pKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHByaW50X3NtYXBzX3JvbGx1cF9zdGF0cyhcIkV4cGVjdGVkIHN0YXRzOlwiLCBzZWxmLCBleHBlY3RlZCk7XG4rXHRwcmludF9zbWFwc19yb2xsdXBfc3RhdHMoXCJBY3R1YWwgc3RhdHM6XCIsIHNlbGYsIGFjdHVhbCk7XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJlcG9ydF90ZXN0X3N0YXJ0KGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgdmVyYm9zZSlcbiB7XG4gXHRpZiAodmVyYm9zZSlcbkBAIC01NzIsNiArNzE5LDcgQEAgRklYVFVSRV9TRVRVUChwcm9jX21hcHNfcmFjZSlcbiBcdHVuc2lnbmVkIGxvbmcgZmlyc3RfbWFwX2FkZHI7XG4gXHR1bnNpZ25lZCBsb25nIGxhc3RfbWFwX2FkZHI7XG4gXHR1bnNpZ25lZCBsb25nIGR1cmF0aW9uX3NlYztcbitcdGNoYXIgcm9sbHVwX2ZuYW1lWzMyXTtcbiBcdGNoYXIgZm5hbWVbMzJdO1xuIFxuIFx0c2VsZi1cdTAwM2VwYWdlX3NpemUgPSAodW5zaWduZWQgbG9uZylzeXNjb25mKF9TQ19QQUdFU0laRSk7XG5AQCAtNjQ5LDYgKzc5Nyw5IEBAIEZJWFRVUkVfU0VUVVAocHJvY19tYXBzX3JhY2UpXG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBTTUFQUzpcbiBcdFx0c3ByaW50ZihmbmFtZSwgXCIvcHJvYy8lZC9zbWFwc1wiLCBzZWxmLVx1MDAzZXBpZCk7XG4rXHRcdHNwcmludGYocm9sbHVwX2ZuYW1lLCBcIi9wcm9jLyVkL3NtYXBzX3JvbGx1cFwiLCBzZWxmLVx1MDAzZXBpZCk7XG4rXHRcdHNlbGYtXHUwMDNlcm9sbHVwX2ZkID0gb3Blbihyb2xsdXBfZm5hbWUsIE9fUkRPTkxZKTtcbitcdFx0QVNTRVJUX05FKHNlbGYtXHUwMDNlcm9sbHVwX2ZkLCAtMSk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0a3NmdF9leGl0X2ZhaWwoKTtcbkBAIC03MTEsNiArODYyLDggQEAgRklYVFVSRV9URUFSRE9XTihwcm9jX21hcHNfcmFjZSlcbiBcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBzZWxmLVx1MDAzZXZtYV9jb3VudDsgaSsrKVxuIFx0XHRtdW5tYXAoc2VsZi1cdTAwM2Vtb2RfaW5mby1cdTAwM2VjaGlsZF9tYXBwZWRfYWRkcltpXSwgc2VsZi1cdTAwM2VwYWdlX3NpemUpO1xuIFx0Y2xvc2Uoc2VsZi1cdTAwM2VtYXBzX2ZkKTtcbitcdGlmIChzZWxmLVx1MDAzZW1hcHNfZmlsZSA9PSBTTUFQUylcbitcdFx0Y2xvc2Uoc2VsZi1cdTAwM2Vyb2xsdXBfZmQpO1xuIFx0d2FpdHBpZChzZWxmLVx1MDAzZXBpZCwgXHUwMDI2c3RhdHVzLCAwKTtcbiBcdG11bm1hcChzZWxmLVx1MDAzZW1vZF9pbmZvLCBzZWxmLVx1MDAzZXNoYXJlZF9tZW1fc2l6ZSk7XG4gfVxuQEAgLTcyMyw2ICs4NzYsNyBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fc3BsaXQpXG4gXHRzdHJ1Y3QgbGluZV9jb250ZW50IHNwbGl0X2ZpcnN0X2xpbmU7XG4gXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2xhc3RfbGluZTtcbiBcdHN0cnVjdCBsaW5lX2NvbnRlbnQgcmVzdG9yZWRfZmlyc3RfbGluZTtcbitcdHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgb3JpZ19zdGF0cztcbiBcbiBcdHdhaXRfZm9yX3N0YXRlKG1vZF9pbmZvLCBTRVRVUF9SRUFEWSk7XG4gXG5AQCAtNzM2LDYgKzg5MCw4IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9zcGxpdClcbiBcdHJlcG9ydF90ZXN0X3N0YXJ0KFwiVGVhcmluZyBmcm9tIHNwbGl0XCIsIHNlbGYtXHUwMDNldmVyYm9zZSk7XG4gXHRBU1NFUlRfVFJVRShjYXB0dXJlX21vZF9wYXR0ZXJuKHNlbGYsIFx1MDAyNnNwbGl0X2xhc3RfbGluZSwgXHUwMDI2c3BsaXRfZmlyc3RfbGluZSxcbiBcdFx0XHRcdFx0XHUwMDI2cmVzdG9yZWRfbGFzdF9saW5lLCBcdTAwMjZyZXN0b3JlZF9maXJzdF9saW5lKSk7XG4rXHRpZiAoc2VsZi1cdTAwM2VtYXBzX2ZpbGUgPT0gU01BUFMpXG4rXHRcdEFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCBcdTAwMjZvcmlnX3N0YXRzKSk7XG4gXG4gXHQvKiBOb3cgc3RhcnQgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGZvciBzZWxmLVx1MDAzZWR1cmF0aW9uX3NlYyAqL1xuIFx0c2lnbmFsX3N0YXRlKG1vZF9pbmZvLCBURVNUX1JFQURZKTtcbkBAIC03OTksNiArOTU1LDExIEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9zcGxpdClcbiBcdFx0XHRcdCAgICAgdm1hX2VuZCA9PSBzZWxmLVx1MDAzZWxhc3RfbGluZS5lbmRfYWRkcikgfHxcbiBcdFx0XHRcdCAgICAodm1hX3N0YXJ0ID09IHNwbGl0X2ZpcnN0X2xpbmUuc3RhcnRfYWRkciBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgICAgdm1hX2VuZCA9PSBzcGxpdF9maXJzdF9saW5lLmVuZF9hZGRyKSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0c3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyBzdGF0cztcbitcbitcdFx0XHRBU1NFUlRfVFJVRShwYXJzZV9zbWFwc19yb2xsdXAoc2VsZiwgXHUwMDI2c3RhdHMpKTtcbitcdFx0XHRBU1NFUlRfVFJVRShjb21wYXJlX3NtYXBzX3JvbGx1cChzZWxmLCBcdTAwMjZvcmlnX3N0YXRzLCBcdTAwMjZzdGF0cykpO1xuIFx0XHR9XG4gXHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDX0NPQVJTRSwgXHUwMDI2ZW5kX3RzKTtcbiBcdFx0ZW5kX3Rlc3RfaXRlcmF0aW9uKFx1MDAyNmVuZF90cywgc2VsZi1cdTAwM2V2ZXJib3NlKTtcbkBAIC04MTcsNiArOTc4LDcgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3Jlc2l6ZSlcbiBcdHN0cnVjdCBsaW5lX2NvbnRlbnQgc2hydW5rX2ZpcnN0X2xpbmU7XG4gXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2xhc3RfbGluZTtcbiBcdHN0cnVjdCBsaW5lX2NvbnRlbnQgcmVzdG9yZWRfZmlyc3RfbGluZTtcbitcdHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgb3JpZ19zdGF0cztcbiBcbiBcdHdhaXRfZm9yX3N0YXRlKG1vZF9pbmZvLCBTRVRVUF9SRUFEWSk7XG4gXG5AQCAtODMwLDYgKzk5Miw4IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9yZXNpemUpXG4gXHRyZXBvcnRfdGVzdF9zdGFydChcIlRlYXJpbmcgZnJvbSByZXNpemVcIiwgc2VsZi1cdTAwM2V2ZXJib3NlKTtcbiBcdEFTU0VSVF9UUlVFKGNhcHR1cmVfbW9kX3BhdHRlcm4oc2VsZiwgXHUwMDI2c2hydW5rX2xhc3RfbGluZSwgXHUwMDI2c2hydW5rX2ZpcnN0X2xpbmUsXG4gXHRcdFx0XHRcdFx1MDAyNnJlc3RvcmVkX2xhc3RfbGluZSwgXHUwMDI2cmVzdG9yZWRfZmlyc3RfbGluZSkpO1xuK1x0aWYgKHNlbGYtXHUwMDNlbWFwc19maWxlID09IFNNQVBTKVxuK1x0XHRBU1NFUlRfVFJVRShwYXJzZV9zbWFwc19yb2xsdXAoc2VsZiwgXHUwMDI2b3JpZ19zdGF0cykpO1xuIFxuIFx0LyogTm93IHN0YXJ0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBmb3Igc2VsZi1cdTAwM2VkdXJhdGlvbl9zZWMgKi9cbiBcdHNpZ25hbF9zdGF0ZShtb2RfaW5mbywgVEVTVF9SRUFEWSk7XG5AQCAtODgwLDYgKzEwNDQsMTEgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3Jlc2l6ZSlcbiBcdFx0XHRBU1NFUlRfVFJVRSh2bWFfc3RhcnQgPT0gc2VsZi1cdTAwM2VsYXN0X2xpbmUuc3RhcnRfYWRkciBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgICAodm1hX2VuZCAtIHZtYV9zdGFydCA9PSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSAqIDMgfHxcbiBcdFx0XHRcdCAgICAgdm1hX2VuZCAtIHZtYV9zdGFydCA9PSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSkpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgc3RhdHM7XG4rXG4rXHRcdFx0QVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsIFx1MDAyNnN0YXRzKSk7XG4rXHRcdFx0QVNTRVJUX1RSVUUoY29tcGFyZV9zbWFwc19yb2xsdXAoc2VsZiwgXHUwMDI2b3JpZ19zdGF0cywgXHUwMDI2c3RhdHMpKTtcbiBcdFx0fVxuIFx0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQ19DT0FSU0UsIFx1MDAyNmVuZF90cyk7XG4gXHRcdGVuZF90ZXN0X2l0ZXJhdGlvbihcdTAwMjZlbmRfdHMsIHNlbGYtXHUwMDNldmVyYm9zZSk7XG5AQCAtODk4LDYgKzEwNjcsNyBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fcmVtYXApXG4gXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlbWFwcGVkX2ZpcnN0X2xpbmU7XG4gXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2xhc3RfbGluZTtcbiBcdHN0cnVjdCBsaW5lX2NvbnRlbnQgcmVzdG9yZWRfZmlyc3RfbGluZTtcbitcdHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgb3JpZ19zdGF0cztcbiBcbiBcdHdhaXRfZm9yX3N0YXRlKG1vZF9pbmZvLCBTRVRVUF9SRUFEWSk7XG4gXG5AQCAtOTExLDYgKzEwODEsOCBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fcmVtYXApXG4gXHRyZXBvcnRfdGVzdF9zdGFydChcIlRlYXJpbmcgZnJvbSByZW1hcFwiLCBzZWxmLVx1MDAzZXZlcmJvc2UpO1xuIFx0QVNTRVJUX1RSVUUoY2FwdHVyZV9tb2RfcGF0dGVybihzZWxmLCBcdTAwMjZyZW1hcHBlZF9sYXN0X2xpbmUsIFx1MDAyNnJlbWFwcGVkX2ZpcnN0X2xpbmUsXG4gXHRcdFx0XHRcdFx1MDAyNnJlc3RvcmVkX2xhc3RfbGluZSwgXHUwMDI2cmVzdG9yZWRfZmlyc3RfbGluZSkpO1xuK1x0aWYgKHNlbGYtXHUwMDNlbWFwc19maWxlID09IFNNQVBTKVxuK1x0XHRBU1NFUlRfVFJVRShwYXJzZV9zbWFwc19yb2xsdXAoc2VsZiwgXHUwMDI2b3JpZ19zdGF0cykpO1xuIFxuIFx0LyogTm93IHN0YXJ0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBmb3Igc2VsZi1cdTAwM2VkdXJhdGlvbl9zZWMgKi9cbiBcdHNpZ25hbF9zdGF0ZShtb2RfaW5mbywgVEVTVF9SRUFEWSk7XG5AQCAtOTYzLDYgKzExMzUsMTEgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3JlbWFwKVxuIFx0XHRcdFx0ICAgICB2bWFfZW5kIC0gdm1hX3N0YXJ0ID09IHNlbGYtXHUwMDNlcGFnZV9zaXplICogMykgfHxcbiBcdFx0XHRcdCAgICAodm1hX3N0YXJ0ID09IHNlbGYtXHUwMDNlbGFzdF9saW5lLnN0YXJ0X2FkZHIgKyBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgICAgdm1hX2VuZCAtIHZtYV9zdGFydCA9PSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSkpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgc3RhdHM7XG4rXG4rXHRcdFx0QVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsIFx1MDAyNnN0YXRzKSk7XG4rXHRcdFx0QVNTRVJUX1RSVUUoY29tcGFyZV9zbWFwc19yb2xsdXAoc2VsZiwgXHUwMDI2b3JpZ19zdGF0cywgXHUwMDI2c3RhdHMpKTtcbiBcdFx0fVxuIFx0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQ19DT0FSU0UsIFx1MDAyNmVuZF90cyk7XG4gXHRcdGVuZF90ZXN0X2l0ZXJhdGlvbihcdTAwMjZlbmRfdHMsIHNlbGYtXHUwMDNldmVyYm9zZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOTozODo0MS41NDg2NjU0MTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTcyMzc4MzY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW5nIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzIGluIHRoZSBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBkdWUgdG8gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlcy4gTGV0J3MgZGlnIGluLlxuXG5UaGUgcGF0Y2ggdG91Y2hlcyBgZnMvcHJvYy90YXNrX21tdS5jYCBhbmQgYSBzZWxmdGVzdCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuY2AuIFRoZSBjb3JlIGNoYW5nZXMgc2VlbSB0byBiZSBpbiBgZnMvcHJvYy90YXNrX21tdS5jYC4gTXkgaW5pdGlhbCByZWFkIHNob3dzOlxuXG4qICAgQSBsb3Qgb2YgcmVmYWN0b3JpbmcgYW5kIGNsZWFudXAgd2l0aGluIHRoZSBgcHJvY19tYXBzX2xvY2tpbmdfY3R4YCBoZWxwZXIgZnVuY3Rpb25zLiBUaGV5J3ZlIGJlZW4gc2ltcGxpZmllZCwgaW5saW5lZCwgYW5kIHNvbWUgcmVtb3ZlZC4gVGhpcyBkb2Vzbid0IHNjcmVhbSBcInVuaW5pdGlhbGl6ZWQgbWVtb3J5LFwiIGJ1dCBJJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHN1YnRsZSBlZmZlY3RzIG9mIHRoZSByZWZhY3RvcmluZy5cblxuKiAgIGBzbWFwX2dhdGhlcl9zdGF0c2AgaGFzIHNlZW4gc29tZSBjaGFuZ2VzLCBub3RhYmx5IHRvIGhvdyB0aGUgYHN0YXJ0YCBwYXJhbWV0ZXIgaXMgaGFuZGxlZC4gVGhlcmUncyBsb2dpYyB0byBjaGVjayBpZiBgc3RhcnRgIGlzIHdpdGhpbiB0aGUgVk1BIHJhbmdlLiBUaGlzIGlzIGludGVyZXN0aW5nOiBgY29uc3QgYm9vbCBpc19wYXJ0aWFsID0gc3RhcnQgXHUwMDNlIHZtYS1cdTAwM2V2bV9zdGFydDtgIGFuZCB0aGUgY2hlY2tzIGBpZiAoc3RhcnQgXHUwMDNjIHZtYS1cdTAwM2V2bV9zdGFydCB8fCBzdGFydCBcdTAwM2U9IHZtYS1cdTAwM2V2bV9lbmQpIHJldHVybjtgIFRoZSB1c2Ugb2YgYHdhbGtfcGFnZV9yYW5nZV92bWFgIHdpdGggYSBwb3RlbnRpYWxseSBzaGlmdGVkIGBzdGFydGAgaXMgc29tZXRoaW5nIEkgbmVlZCB0byBjYXJlZnVsbHkgY29uc2lkZXI7IGFueSBhc3N1bXB0aW9ucyBhYm91dCBpbml0aWFsIG1lbW9yeSBzdGF0ZSBpbiB0aGF0IGZ1bmN0aW9uIGNvdWxkIGJlIGFmZmVjdGVkLlxuXG4qICAgYHNob3dfc21hcHNfcm9sbHVwYCBpcyBzd2l0Y2hpbmcgdG8gYHByb2NfZ2V0X3ZtYWAgYW5kIFZNQSBsb2NraW5nL1JDVSBsb2NraW5nLCBtb3ZpbmcgYXdheSBmcm9tIGhvbGRpbmcgdGhlIGBtbWFwX3JlYWRfbG9ja2AgYWNyb3NzIHRoZSBlbnRpcmUgcm9sbHVwLiBUaGlzIGlzIGEgZ29vZCBtb3ZlIGZvciBjb25jdXJyZW5jeSwgYnV0IFZNQSBsb2NraW5nIGhhcyBhIGhpc3Rvcnkgb2Ygc3VidGxlIHJhY2UgY29uZGl0aW9ucy4gSXQgaW5pdGlhbGl6ZXMgYHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyBtc3MgPSB7fTtgLCB3aGljaCBpcyBnb29kIHRvIHNlZSBhcyBpdCB6ZXJvcyBpdCBvdXQuIE91dHB1dHRpbmcgd2l0aCBgX19zaG93X3NtYXAobSwgXHUwMDI2bXNzLCB0cnVlKTtgIHNob3VsZCBiZSBmaW5lLiBUaGUgbW92ZSB0byBhIG1vcmUgZ3JhbnVsYXIgbG9ja2luZyBzY2hlbWUgaXMgcHJvbWlzaW5nIGJ1dCBuZWVkcyBhIHRob3JvdWdoIGluc3BlY3Rpb24uXG5cbiogICBWYXJpb3VzIGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbnMgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gYHN0YXRpY2AuIFRoaXMgaXMgYSBjb2RlIHN0eWxlIGNoYW5nZSwgcHJvYmFibHkgbm90IHJlbGV2YW50LlxuXG4qICAgVGhlIHNlbGZ0ZXN0cyBhcmUgdXBkYXRlZCBmb3IgY29uY3VycmVudCByYWNlcyBpbnZvbHZpbmcgYHNtYXBzX3JvbGx1cGAuIEdvb2QsIHRoZSB0ZXN0aW5nIGlzIGJlaW5nIGltcHJvdmVkLCBidXQgaXQgaW5kaWNhdGVzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2VyZSBpZGVudGlmaWVkOyB0aGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGxvY2tpbmcgY2hhbmdlcy5cblxuVG8gY29uZmlybSB0aGUgcG90ZW50aWFsIHJpc2tzLCBJIG5lZWQgdG8gZGVsdmUgaW50byBgc2hvd19zbWFwc19yb2xsdXBgLCBgc21hcF9nYXRoZXJfc3RhdHNgLCBhbmQgYHByb2NfZ2V0X3ZtYWAgaW4gZGV0YWlsLiBJJ2xsIHVzZSBjb2Rlc2VhcmNoLCBncmVwcGVyLCBvciBkaXJlY3RseSByZWFkIHRoZSBmaWxlcyBpZiBuZWNlc3NhcnksIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IG1lbW9yeSBvcGVyYXRpb25zLCBsb2NraW5nIHNjaGVtZXMsIGFuZCBhc3N1bXB0aW9ucyBhYm91dCBpbml0aWFsaXplZCBtZW1vcnkuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IGFueSBhcmVhcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGV4cG9zZWQgZHVlIHRvIHRoZSBjaGFuZ2VzLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgY29uY3VycmVudCBhY2Nlc3MgaGlnaGxpZ2h0ZWQgYnkgdGhlIHNlbGZ0ZXN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxODgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOTozODo0Ny4yNzI0NTMxNDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTA5NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2NfZ2V0X3ZtYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9wcm9jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmM9MTk1PXN0YXRpYyB2b2lkIHJlYWNxdWlyZV9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTIwNC1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjA1OnN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByb2NfZ2V0X3ZtYShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcHBvcylcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjA2LXtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0yMzc9c3RhdGljIHZvaWQgKm1fc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjcyLVxcbmZzL3Byb2MvdGFza19tbXUuYzoyNzM6XFx0cmV0dXJuIHByb2NfZ2V0X3ZtYShtLCBwcG9zKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjc0LX1cXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0yNzY9c3RhdGljIHZvaWQgKm1fbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcHBvcylcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yODEtXFx0fVxcbmZzL3Byb2MvdGFza19tbXUuYzoyODI6XFx0cmV0dXJuIHByb2NfZ2V0X3ZtYShtLCBwcG9zKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjgzLX1cXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0xMzY2PXN0YXRpYyBpbnQgc2hvd19zbWFwc19yb2xsdXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTEzOTEtXFx0dm1hX2l0ZXJfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlaXRlciwgbW0sIDApO1xcbmZzL3Byb2MvdGFza19tbXUuYzoxMzkyOlxcdHZtYSA9IHByb2NfZ2V0X3ZtYShtLCBcXHUwMDI2cG9zKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTM5My1cXHRpZiAodW5saWtlbHkoIXZtYSkpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTQzOC1cXHRcXHR9XFxuZnMvcHJvYy90YXNrX21tdS5jOjE0Mzk6XFx0XFx0dm1hID0gcHJvY19nZXRfdm1hKG0sIFxcdTAwMjZwb3MpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0xNDQwLVxcdH1cXG4tLVxcbmZzL3Byb2MvdGFza19ub21tdS5jPTE3Mz1zdGF0aWMgaW50IHNob3dfbWFwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqX3ApXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYy0xNzctXFxuZnMvcHJvYy90YXNrX25vbW11LmM6MTc4OnN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByb2NfZ2V0X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXFxuZnMvcHJvYy90YXNrX25vbW11LmMtMTc5LVxcdFxcdFxcdFxcdFxcdFxcdGxvZmZfdCAqcHBvcylcXG4tLVxcbmZzL3Byb2MvdGFza19ub21tdS5jPTE5Mj1zdGF0aWMgdm9pZCAqbV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcHBvcylcXG4tLVxcbmZzL3Byb2MvdGFza19ub21tdS5jLTE5Ny1cXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYzoxOTg6XFx0LyogU2VlIHByb2NfZ2V0X3ZtYSgpLiBaZXJvIGF0IHRoZSBzdGFydCBvciBhZnRlciBsc2Vlay4gKi9cXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYy0xOTktXFx0aWYgKGxhc3RfYWRkciA9PSAtMVVMKVxcbi0tXFxuZnMvcHJvYy90YXNrX25vbW11LmMtMjIyLVxcbmZzL3Byb2MvdGFza19ub21tdS5jOjIyMzpcXHRyZXR1cm4gcHJvY19nZXRfdm1hKHByaXYsIHBwb3MpO1xcbmZzL3Byb2MvdGFza19ub21tdS5jLTIyNC19XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYz0yNDA9c3RhdGljIHZvaWQgKm1fbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKl9wLCBsb2ZmX3QgKnBwb3MpXFxuZnMvcHJvYy90YXNrX25vbW11LmMtMjQxLXtcXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYzoyNDI6XFx0cmV0dXJuIHByb2NfZ2V0X3ZtYShtLVxcdTAwM2Vwcml2YXRlLCBwcG9zKTtcXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYy0yNDMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOTozODo0Ny4zMjA5NjgwODhaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc5MjU2MzU4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBBY2NvdW50aW5nIGluIGBmcy9wcm9jL3Rhc2tfbW11LmNgKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IGRpZ2dpbmcgaW50byB0aGUgbWVtb3J5IGFjY291bnRpbmcgZGV0YWlscywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUga2VybmVsJ3MgcHJvY2VzcyBpbmZvcm1hdGlvbiBoYW5kbGluZy4gTXkgZ3V0IHRlbGxzIG1lIHRoZSBrZXkgcGllY2VzIGFyZSBnb2luZyB0byBiZSBhcm91bmQgdGhlIGBzaG93X3NtYXBzX3JvbGx1cGAgZnVuY3Rpb24gYW5kIHRoZSBgcHJvY19nZXRfdm1hYCBmdW5jdGlvbiBpbiBgZnMvcHJvYy90YXNrX21tdS5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhvc2UgZnVuY3Rpb25zIGludGVyYWN0IHRvIGNhbGN1bGF0ZSBhbmQgcHJlc2VudCB0aGUgcGVyLXByb2Nlc3MgbWVtb3J5IHN0YXRpc3RpY3MgdmlhIC9wcm9jL1twaWRdL3NtYXBzIGFuZCAvcHJvYy9bcGlkXS9tYXBzLiBJJ20gZXNwZWNpYWxseSBjdXJpb3VzIGFib3V0IHdoZXJlIHRoZSByb2xsLXVwIGxvZ2ljIGlzIGhhbmRsZWQuIEFtIEkgcmlnaHQgaW4gdGhpbmtpbmcgdGhlIGBzaG93X3NtYXBzX3JvbGx1cGAgZnVuY3Rpb24gd291bGQgYmUgd2hlcmUgbW9zdCBvZiB0aGUgd29yayBoYXBwZW5zIGFnZ3JlZ2F0aW5nIFZNQSBzdGF0cz8gQW5kIGBwcm9jX2dldF92bWFgIGlzIHRoZSBWTUEgaXRlcmF0b3IuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBwb3RlbnRpYWwgaW5hY2N1cmFjaWVzIGluIHRoZSBhY2NvdW50aW5nLCBvciBtYXliZSBzb21lIGxlc3MtdGhhbi1vYnZpb3VzIGVkZ2UgY2FzZXMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIExldCdzIHNlZSBpZiB0aGVyZSdzIGFueXRoaW5nIGludGVyZXN0aW5nIHRvIHVucGFjay4gVGhpcyBmZWVscyBsaWtlIHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiwgdG8gcGlucG9pbnQgc29tZSBtZW1vcnkgYWNjb3VudGluZyBvZGRpdGllcyB0aGF0IEkndmUgc2VlbiBpbiB0aGUgcGFzdC4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBzb3VyY2UhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjQzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6Mzg6NTAuMTEzNTM1NTMyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTk1OlxcdHN0YXRpYyB2b2lkIHJlYWNxdWlyZV9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbiAxOTY6XFx0e1xcbiAxOTc6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxcbiAxOTg6XFx0XFx0XFx0cmV0dXJuO1xcbiAxOTk6XFx0XFxuIDIwMDpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDIwMTpcXHRcXHQvKiBSZWluaXRpYWxpemUgdGhlIGl0ZXJhdG9yLiAqL1xcbiAyMDI6XFx0XFx0dm1hX2l0ZXJfc2V0KFxcdTAwMjZwcml2LVxcdTAwM2VpdGVyLCBwcml2LVxcdTAwM2Vsb2NrX2N0eC5sb2NrZWRfdm1hLVxcdTAwM2V2bV9lbmQpO1xcbiAyMDM6XFx0fVxcbiAyMDQ6XFx0XFxuIDIwNTpcXHRzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcm9jX2dldF92bWEoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBwb3MpXFxuIDIwNjpcXHR7XFxuIDIwNzpcXHRcXHRzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYgPSBtLVxcdTAwM2Vwcml2YXRlO1xcbiAyMDg6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuIDIwOTpcXHRcXG4gMjEwOlxcdHJldHJ5OlxcbiAyMTE6XFx0XFx0dm1hID0gZ2V0X25leHRfdm1hKHByaXYsICpwcG9zKTtcXG4gMjEyOlxcdFxcdC8qIEVJTlRSIG9mIEVBR0FJTiBpcyBwb3NzaWJsZSAqL1xcbiAyMTM6XFx0XFx0aWYgKElTX0VSUih2bWEpKSB7XFxuIDIxNDpcXHRcXHRcXHRpZiAoUFRSX0VSUih2bWEpID09IC1FQUdBSU4gXFx1MDAyNlxcdTAwMjYgZmFsbGJhY2tfdG9fbW1hcF9sb2NrKHByaXYsICpwcG9zKSlcXG4gMjE1OlxcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuIDIxNjpcXHRcXG4gMjE3OlxcdFxcdFxcdHJldHVybiB2bWE7XFxuIDIxODpcXHRcXHR9XFxuIDIxOTpcXHRcXG4gMjIwOlxcdFxcdC8qIFN0b3JlIHByZXZpb3VzIHBvc2l0aW9uIHRvIGJlIGFibGUgdG8gcmVzdGFydCBpZiBuZWVkZWQgKi9cXG4gMjIxOlxcdFxcdHByaXYtXFx1MDAzZWxhc3RfcG9zID0gKnBwb3M7XFxuIDIyMjpcXHRcXHRpZiAodm1hKSB7XFxuIDIyMzpcXHRcXHRcXHQvKlxcbiAyMjQ6XFx0XFx0XFx0ICogVHJhY2sgdGhlIGVuZCBvZiB0aGUgcmVwb3J0ZWQgdm1hIHRvIGVuc3VyZSBwb3NpdGlvbiBjaGFuZ2VzXFxuIDIyNTpcXHRcXHRcXHQgKiBldmVuIGlmIHByZXZpb3VzIHZtYSB3YXMgbWVyZ2VkIHdpdGggdGhlIG5leHQgdm1hIGFuZCB3ZVxcbiAyMjY6XFx0XFx0XFx0ICogZm91bmQgdGhlIGV4dGVuZGVkIHZtYSB3aXRoIHRoZSBzYW1lIHZtX3N0YXJ0LlxcbiAyMjc6XFx0XFx0XFx0ICovXFxuIDIyODpcXHRcXHRcXHQqcHBvcyA9IHZtYS1cXHUwMDNldm1fZW5kO1xcbiAyMjk6XFx0XFx0fSBlbHNlIHtcXG4gMjMwOlxcdFxcdFxcdCpwcG9zID0gU0VOVElORUxfVk1BX0dBVEU7XFxuIDIzMTpcXHRcXHRcXHR2bWEgPSBnZXRfZ2F0ZV92bWEocHJpdi1cXHUwMDNlbG9ja19jdHgubW0pO1xcbiAyMzI6XFx0XFx0fVxcbiAyMzM6XFx0XFxuIDIzNDpcXHRcXHRyZXR1cm4gdm1hO1xcbiAyMzU6XFx0fVxcbiAyMzY6XFx0XFxuIDIzNzpcXHRzdGF0aWMgdm9pZCAqbV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcHBvcylcXG4gMjM4OlxcdHtcXG4gMjM5OlxcdFxcdHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tXFx1MDAzZXByaXZhdGU7XFxuIDI0MDpcXHRcXHRzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eDtcXG4gMjQxOlxcdFxcdGxvZmZfdCBsYXN0X2FkZHIgPSAqcHBvcztcXG4gMjQyOlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbiAyNDM6XFx0XFxuIDI0NDpcXHRcXHQvKiBTZWUgbV9uZXh0KCkuIFplcm8gYXQgdGhlIHN0YXJ0IG9yIGFmdGVyIGxzZWVrLiAqL1xcbiAyNDU6XFx0XFx0aWYgKGxhc3RfYWRkciA9PSBTRU5USU5FTF9WTUFfRU5EKVxcbiAyNDY6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDI0NzpcXHRcXG4gMjQ4OlxcdFxcdHByaXYtXFx1MDAzZXRhc2sgPSBnZXRfcHJvY190YXNrKHByaXYtXFx1MDAzZWlub2RlKTtcXG4gMjQ5OlxcdFxcdGlmICghcHJpdi1cXHUwMDNldGFzaylcXG4gMjUwOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FU1JDSCk7XFxuIDI1MTpcXHRcXG4gMjUyOlxcdFxcdGxvY2tfY3R4ID0gXFx1MDAyNnByaXYtXFx1MDAzZWxvY2tfY3R4O1xcbiAyNTM6XFx0XFx0bW0gPSBsb2NrX2N0eC1cXHUwMDNlbW07XFxuIDI1NDpcXHRcXHRpZiAoIW1tIHx8ICFtbWdldF9ub3RfemVybyhtbSkpIHtcXG4gMjU1OlxcdFxcdFxcdHB1dF90YXNrX3N0cnVjdChwcml2LVxcdTAwM2V0YXNrKTtcXG4gMjU2OlxcdFxcdFxcdHByaXYtXFx1MDAzZXRhc2sgPSBOVUxMO1xcbiAyNTc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDI1ODpcXHRcXHR9XFxuIDI1OTpcXHRcXG4gMjYwOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMjYxOlxcdFxcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcXG4gMjYyOlxcdFxcdC8qXFxuIDI2MzpcXHRcXHQgKiBSZXNldCBjdXJyZW50IHBvc2l0aW9uIGlmIGxhc3RfYWRkciB3YXMgc2V0IGJlZm9yZVxcbiAyNjQ6XFx0XFx0ICogYW5kIGl0J3Mgbm90IGEgc2VudGluZWwuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjM4OjUwLjExMzc1MzkyM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NzY3NTEyOTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgS01TQU4gSW1wbGljYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIHBvdGVudGlhbCBmb3IgS01TQU4gaXNzdWVzIOKAkyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aCByZWdhcmRzIHRvIGAvcHJvYy8kcGlkL3NtYXBzX3JvbGx1cGAsIGFuZCBJIG5lZWQgdG8gYmUgKnN1cmUqIHdlJ3JlIG5vdCBpbnRyb2R1Y2luZyBhIHZ1bG5lcmFiaWxpdHkuXG5cbkZpcnN0LCBJJ20gbm90aW5nIHRoZSBsb2NraW5nIGNoYW5nZXMgd2l0aGluIGB0YXNrX21tdS5jYC4gVGhlIHJlZmFjdG9yaW5nIG9mIGBwcm9jX21hcHNfbG9ja2luZ19jdHhgIHNvdW5kcyBsaWtlIGEgZ29vZCBvcHRpbWl6YXRpb24sIGJ1dCBJIGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlIHJlbW92YWwgb2YgdGhlc2Ugd3JhcHBlcnMgaGFzbid0IGxlZnQgYW55IGdhcHMuIFRoZSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBpcyByYWNlIGNvbmRpdGlvbnMgb3IgVUFGIHdoaWNoIHdpbGwgYmUgY2F1Z2h0IGJ5IEtBU0FOL0xPQ0tERVAsIGJ1dCBuZWVkcyB0byBiZSBldmFsdWF0ZWQgYXMgYSBmaXJzdCBzdGVwLlxuXG5OZXh0LCB0aGUgYHNtYXBfZ2F0aGVyX3N0YXRzYCBmdW5jdGlvbi4gSSdtIGZvY3VzaW5nIG9uIHRoZSBib3VuZHMgY2hlY2ssIHRoZSB1c2Ugb2YgYHdhbGtfcGFnZV9yYW5nZV92bWFgLCBhbmQgdGhlICpleHBsaWNpdCogemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgYG1zc2Agc3RydWN0dXJlICggYHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyBtc3MgPSB7fTtgICkuIFRoYXQncyBhIGdvb2Qgc2lnbiDigJMgdGhhdCB6ZXJvLWluaXRpYWxpemF0aW9uICpndWFyYW50ZWVzKiBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGF0IGZ1bmN0aW9uLiBJdCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCBLQVNBTiB3aWxsIGFsc28gY2F0Y2ggT09CIGlmIHNvbWV0aGluZyBpcyB3cml0dGVuIHRvIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlZ2lvbi5cblxuTm93LCBgc2hvd19zbWFwc19yb2xsdXBgOiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIHN3aXRjaGluZyB0byBwZXItVk1BIGxvY2tzIGlzIGEgcG90ZW50aWFsbHkgZ3JlYXQgb3B0aW1pemF0aW9uLCBidXQgSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgbG9ja2luZyBpcyBjb3JyZWN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJhY2VzLiBUaGUgaGFuZGxpbmcgb2YgbG9jayBjb250ZW50aW9uIGFuZCBmYWxsYmFjayBpcyBhbHNvIGtleS4gQWdhaW4sIHRoZSBleHBsaWNpdCB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIGBtc3NgIGlzIGEgbWFqb3IgcG9zaXRpdmUgaGVyZS4gSSdtIGFsc28gcmV2aWV3aW5nIGhvdyB0aGUgZGF0YSBpcyBiZWluZyBmb3JtYXR0ZWQgYW5kIHdyaXR0ZW4gdG8gdGhlIGBzZXFfZmlsZWAgYnVmZmVyLCBhbmQgaXQgYWxsIGxvb2tzIHNhZmUgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgemVyb2luZy5cblxuRmluYWxseSwgdGhlIHNlbGZ0ZXN0IGluIGBwcm9jLW1hcHMtcmFjZS5jYCBpcyB2ZXJ5IGltcG9ydGFudCB0byBlbnN1cmUgY29uY3VycmVudCBvcGVyYXRpb24gZG9lc24ndCBpbnRyb2R1Y2UgcmFjZXMsIGVzcGVjaWFsbHkgd2l0aCBWTUEgc3BsaXRzL3Jlc2l6ZXMvcmVtYXBzLiBUaGlzIGlzIHRoZSB0ZXN0aW5nIHRoYXQgbmVlZHMgdG8gY29uZmlybSBubyBkYXRhIHJhY2VzIHdlcmUgaW50cm9kdWNlZC5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogYXJlIHRoZXJlIGFueSAqdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MqPyBJJ3ZlIHN5c3RlbWF0aWNhbGx5IHJldmlld2VkIHRoZSBwYXRjaC4gVGhlIGFuc3dlciBpcyAqbm8qLiBUaGVyZSBhcmUgKm5vKiBuZXcgYWxsb2NhdGlvbnMgb3Igc3RydWN0dXJlcyB0aGF0IGFyZW4ndCBiZWluZyB6ZXJvZWQsIHRoZSBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIGlzIGVpdGhlciBleHBsaWNpdGx5IGZvcm1hdHRlZCBvciBwYXNzZXMgdGhyb3VnaCBgY29weV90b191c2VyYCwgYW5kIHRoZXJlJ3Mgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIGJ5dGVzIGJlaW5nIGNvcGllZC4gQWxsIGNoYW5nZXMgYXJlIGFib3V0IGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiwgYWxvbmcgd2l0aCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLiBUaGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBwYXJ0aWFsIHN0cnVjdCBjb3BpZXMsIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy4gSXQgZG9lc24ndCBpbnRyb2R1Y2Ugcmlza3MgdGhhdCBLTVNBTiBpcyB0YXJnZXRlZCBhdC5cblxuU28sIGFjY29yZGluZyB0byB0aGUgcmVxdWlyZW1lbnRzLCBteSBqdWRnbWVudCBpcyB0aGF0IGBOZWVkc0tNU0FOPWZhbHNlYC4gTXkgYW5hbHlzaXMgaW5kaWNhdGVzIHRoYXQgdGhlIGNvZGUgY2hhbmdlcyByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh3aGljaCBhcmUgY2F1Z2h0IGJ5IEtBU0FOL0xPQ0tERVApLCBhbmQgYWxsIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGZ1bGx5IGluaXRpYWxpemVkLiBJJ20gcmVhZHkgdG8gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NDksIk91dHB1dFRva2VucyI6MTk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6Mzg6NTcuODgxMjcwNDc2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgbG9ja2luZyBhbmQgaXRlcmF0aW9uIGxvZ2ljIGluIC9wcm9jL1xcdTAwM2NwaWRcXHUwMDNlL3NtYXBzX3JvbGx1cCBhbmQgcmVsYXRlZCB0YXNrX21tdS5jIGZ1bmN0aW9ucyAobWlncmF0aW5nIHNob3dfc21hcHNfcm9sbHVwIHRvIHVzZSBwZXItVk1BIGxvY2tpbmcgdmlhIHByb2NfZ2V0X3ZtYSBhbmQgc2ltcGxpZnlpbmcgbG9ja2luZyBjb250ZXh0IGhlbHBlciBmdW5jdGlvbnMpLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzdGF0aXN0aWNzIHN0cnVjdHVyZXMgKGUuZy4sIHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyBtc3MgPSB7fSkgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgb3V0cHV0IGlzIGZvcm1hdHRlZCBhcyBBU0NJSSB0ZXh0IGludG8gc2VxX2ZpbGUgYnVmZmVycy4gVGhlcmUgYXJlIG5vIG5ldyBvciBtb2RpZmllZCByYXcgc3RydWN0IGNvcGllcyB0byB1c2VyIHNwYWNlLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgcGFkZGluZywgYW5kIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgaXNzdWVzIGludHJvZHVjZWQgYnkgY2hhbmdlcyB0byBWTUEgbG9ja2luZy9SQ1UgdHJhdmVyc2FsIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGxvY2tpbmcgYW5kIGl0ZXJhdGlvbiBsb2dpYyBpbiAvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS9zbWFwc19yb2xsdXAgYW5kIHJlbGF0ZWQgdGFza19tbXUuYyBmdW5jdGlvbnMgKG1pZ3JhdGluZyBzaG93X3NtYXBzX3JvbGx1cCB0byB1c2UgcGVyLVZNQSBsb2NraW5nIHZpYSBwcm9jX2dldF92bWEgYW5kIHNpbXBsaWZ5aW5nIGxvY2tpbmcgY29udGV4dCBoZWxwZXIgZnVuY3Rpb25zKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgc3RhdGlzdGljcyBzdHJ1Y3R1cmVzIChlLmcuLCBzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgbXNzID0ge30pIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIG91dHB1dCBpcyBmb3JtYXR0ZWQgYXMgQVNDSUkgdGV4dCBpbnRvIHNlcV9maWxlIGJ1ZmZlcnMuIFRoZXJlIGFyZSBubyBuZXcgb3IgbW9kaWZpZWQgcmF3IHN0cnVjdCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIG9yIHBhZGRpbmcsIGFuZCBubyBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGNvbmN1cnJlbmN5IG9yIGxpZmV0aW1lIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IGNoYW5nZXMgdG8gVk1BIGxvY2tpbmcvUkNVIHRyYXZlcnNhbCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowtxtsh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-07 09:16:40 +0000 UTC FinishedAt: 2026-09-07 09:38:58 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_FS", "PROC_PAGE_MONITOR" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "9d3243fc689fef444f87e0a703b4c99653137e1b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROC_FS", "PROC_PAGE_MONITOR" ], "series_id": "08471fc9-5154-4594-bf2b-2328fee6364a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "show_smaps_rollup", "smap_gather_stats", "show_smap", "do_procmap_query" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfRlMmIzM0OywKICAgICYjMzQ7UFJPQ19QQUdFX01PTklUT1ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaG93X3NtYXBzX3JvbGx1cCYjMzQ7LAogICAgJiMzNDtzbWFwX2dhdGhlcl9zdGF0cyYjMzQ7LAogICAgJiMzNDtzaG93X3NtYXAmIzM0OywKICAgICYjMzQ7ZG9fcHJvY21hcF9xdWVyeSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBsb2NraW5nIGFuZCBpdGVyYXRpb24gbG9naWMgaW4gL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3NtYXBzX3JvbGx1cCBhbmQgcmVsYXRlZCB0YXNrX21tdS5jIGZ1bmN0aW9ucyAobWlncmF0aW5nIHNob3dfc21hcHNfcm9sbHVwIHRvIHVzZSBwZXItVk1BIGxvY2tpbmcgdmlhIHByb2NfZ2V0X3ZtYSBhbmQgc2ltcGxpZnlpbmcgbG9ja2luZyBjb250ZXh0IGhlbHBlciBmdW5jdGlvbnMpLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzdGF0aXN0aWNzIHN0cnVjdHVyZXMgKGUuZy4sIHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyBtc3MgPSB7fSkgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgb3V0cHV0IGlzIGZvcm1hdHRlZCBhcyBBU0NJSSB0ZXh0IGludG8gc2VxX2ZpbGUgYnVmZmVycy4gVGhlcmUgYXJlIG5vIG5ldyBvciBtb2RpZmllZCByYXcgc3RydWN0IGNvcGllcyB0byB1c2VyIHNwYWNlLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgcGFkZGluZywgYW5kIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgaXNzdWVzIGludHJvZHVjZWQgYnkgY2hhbmdlcyB0byBWTUEgbG9ja2luZy9SQ1UgdHJhdmVyc2FsIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIC9wcm9jL1x1MDAzY3BpZFx1MDAzZS9zbWFwc19yb2xsdXAgYW5kIHNtYXBzIGl0ZXJhdGlvbiBsb2dpYyBpbiB0YXNrX21tdS5jIHRvIHVzZSBwZXItVk1BIGxvY2tzIHVuZGVyIFJDVSBpbnN0ZWFkIG9mIGFjcXVpcmluZyBtbWFwX2xvY2sgdXBmcm9udCwgYWRqdXN0cyBwYXJ0aWFsIFZNQSBzdGF0IGdhdGhlcmluZyBpbiBzbWFwX2dhdGhlcl9zdGF0cygpLCBhbmQgc2ltcGxpZmllcyBwcm9jX21hcHMgbG9ja2luZyBoZWxwZXJzLiBUaGlzIHJlYWNoYWJsZSBjb3JlIE1NL3Byb2NmcyBsb2dpYyBpcyB3b3J0aCBmdXp6aW5nIGZvciBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6Mzg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyNTVhN2FjYmE3YjhiZjFiNzQ4N2ZiMTU5MDc2MDA2MGU0Nzg5MGI0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwOTozODowOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbmluZGV4IGU2NzFiNGZkOGRlZGQuLjY0MWExNTViMGM2MTMgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL3Byb2MvdGFza19tbXUuY1xuQEAgLTEzMCwyOCAmIzQzOzEzMCwxMiBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX3Rhc2tfbWVtcG9saWN5KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbiB9XG4gI2VuZGlmXG4gXG4tc3RhdGljIGlubGluZSBpbnQgbG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4te1xuLVx0aW50IHJldCA9IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKGxvY2tfY3R4LVx1MDAzZW1tKTtcbi1cbi1cdGlmICghcmV0KVxuLVx0XHRsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZCA9IHRydWU7XG4tXG4tXHRyZXR1cm4gcmV0O1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX2N0eF9tbShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbiYjNDM7c3RhdGljIHZvaWQgdW5sb2NrX2N0eF9tbShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbiB7XG4gXHRtbWFwX3JlYWRfdW5sb2NrKGxvY2tfY3R4LVx1MDAzZW1tKTtcbiBcdGxvY2tfY3R4LVx1MDAzZW1tYXBfbG9ja2VkID0gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJlc2V0X2xvY2tfY3R4KHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdGxvY2tfY3R4LVx1MDAzZWxvY2tlZF92bWEgPSBOVUxMO1xuLVx0bG9ja19jdHgtXHUwMDNlbW1hcF9sb2NrZWQgPSBmYWxzZTtcbi19XG4tXG4gc3RhdGljIHZvaWQgdW5sb2NrX2N0eF92bWEoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4ge1xuIFx0aWYgKGxvY2tfY3R4LVx1MDAzZWxvY2tlZF92bWEpIHtcbkBAIC0xNjAsMjMgJiM0MzsxNDQsMTAgQEAgc3RhdGljIHZvaWQgdW5sb2NrX2N0eF92bWEoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBsb2NrX3ZtYV9yYW5nZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4tXHRcdFx0XHQgIHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcbi1cbi1cdHJldHVybiB0cnVlO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX3ZtYV9yYW5nZShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbiYjNDM7c3RhdGljIHZvaWQgcmVzZXRfbG9ja19jdHgoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4ge1xuLVx0aWYgKGxvY2tfY3R4LVx1MDAzZW1tYXBfbG9ja2VkKSB7XG4tXHRcdHVubG9ja19jdHhfbW0obG9ja19jdHgpO1xuLVx0fSBlbHNlIHtcbi1cdFx0dW5sb2NrX2N0eF92bWEobG9ja19jdHgpO1xuLVx0XHRyY3VfcmVhZF91bmxvY2soKTtcbi1cdH1cbiYjNDM7XHRsb2NrX2N0eC1cdTAwM2Vsb2NrZWRfdm1hID0gTlVMTDtcbiYjNDM7XHRsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZCA9IGZhbHNlO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnZXRfbmV4dF92bWEoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxuQEAgLTE5Niw3ICYjNDM7MTY3LDcgQEAgc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZ2V0X25leHRfdm1hKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcbiBcdHJldHVybiB2bWE7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBmYWxsYmFja190b19tbWFwX2xvY2soc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxuJiM0MztzdGF0aWMgYm9vbCBmYWxsYmFja190b19tbWFwX2xvY2soc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxuIFx0XHRcdFx0XHQgbG9mZl90IHBvcylcbiB7XG4gXHRzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCA9IFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHg7XG5AQCAtMjEzLDcgJiM0MzsxODQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmFsbGJhY2tfdG9fbW1hcF9sb2NrKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgZHJvcF9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuJiM0MztzdGF0aWMgdm9pZCBkcm9wX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4ge1xuIFx0aWYgKHByaXYtXHUwMDNlbG9ja19jdHgubW1hcF9sb2NrZWQpXG4gXHRcdHJldHVybjtcbkBAIC0yMjEsNyAmIzQzOzE5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkcm9wX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHJlYWNxdWlyZV9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuJiM0MztzdGF0aWMgdm9pZCByZWFjcXVpcmVfcmN1KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbiB7XG4gXHRpZiAocHJpdi1cdTAwM2Vsb2NrX2N0eC5tbWFwX2xvY2tlZClcbiBcdFx0cmV0dXJuO1xuQEAgLTI4NiwxMyAmIzQzOzI1Nyw4IEBAIHN0YXRpYyB2b2lkICptX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwcG9zKVxuIFx0XHRyZXR1cm4gTlVMTDtcbiBcdH1cbiBcbi1cdGlmICghbG9ja192bWFfcmFuZ2UobSwgbG9ja19jdHgpKSB7XG4tXHRcdG1tcHV0KG1tKTtcbi1cdFx0cHV0X3Rhc2tfc3RydWN0KHByaXYtXHUwMDNldGFzayk7XG4tXHRcdHByaXYtXHUwMDNldGFzayA9IE5VTEw7XG4tXHRcdHJldHVybiBFUlJfUFRSKC1FSU5UUik7XG4tXHR9XG4tXG4mIzQzO1x0cmN1X3JlYWRfbG9jaygpO1xuJiM0MztcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcbiBcdC8qXG4gXHQgKiBSZXNldCBjdXJyZW50IHBvc2l0aW9uIGlmIGxhc3RfYWRkciB3YXMgc2V0IGJlZm9yZVxuIFx0ICogYW5kIGl0JiMzOTtzIG5vdCBhIHNlbnRpbmVsLlxuQEAgLTMyNSw3ICYjNDM7MjkxLDEyIEBAIHN0YXRpYyB2b2lkIG1fc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4gXHRcdHJldHVybjtcbiBcbiBcdHJlbGVhc2VfdGFza19tZW1wb2xpY3kocHJpdik7XG4tXHR1bmxvY2tfdm1hX3JhbmdlKFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHgpO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKSB7XG4mIzQzO1x0XHR1bmxvY2tfY3R4X21tKFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHgpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHR1bmxvY2tfY3R4X3ZtYShcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4KTtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdH1cbiBcdG1tcHV0KG1tKTtcbiBcdHB1dF90YXNrX3N0cnVjdChwcml2LVx1MDAzZXRhc2spO1xuIFx0cHJpdi1cdTAwM2V0YXNrID0gTlVMTDtcbkBAIC01MTgsMjEgJiM0Mzs0ODksNiBAQCBzdGF0aWMgaW50IHBpZF9tYXBzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRcdFBST0NNQVBfUVVFUllfVk1BX0ZMQUdTXHRcdFx0XHRcXFxuIClcbiBcbi1zdGF0aWMgaW50IHF1ZXJ5X3ZtYV9zZXR1cChzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbi17XG4tXHRyZXNldF9sb2NrX2N0eChsb2NrX2N0eCk7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIHZvaWQgcXVlcnlfdm1hX3RlYXJkb3duKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdGlmIChsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZClcbi1cdFx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XG4tXHRlbHNlXG4tXHRcdHVubG9ja19jdHhfdm1hKGxvY2tfY3R4KTtcbi19XG4tXG4gc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcXVlcnlfdm1hX2ZpbmRfYnlfYWRkcihzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCxcbiBcdFx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG5AQCAtNjUzLDEyICYjNDM7NjA5LDcgQEAgc3RhdGljIGludCBkb19wcm9jbWFwX3F1ZXJ5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB2b2lkIF9fdXNlciAqdWFyZylcbiBcdGlmICghbW0gfHwgIW1tZ2V0X25vdF96ZXJvKG1tKSlcbiBcdFx0cmV0dXJuIC1FU1JDSDtcbiBcbi1cdGVyciA9IHF1ZXJ5X3ZtYV9zZXR1cChcdTAwMjZsb2NrX2N0eCk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdG1tcHV0KG1tKTtcbi1cdFx0cmV0dXJuIGVycjtcbi1cdH1cbi1cbiYjNDM7XHRyZXNldF9sb2NrX2N0eChcdTAwMjZsb2NrX2N0eCk7XG4gXHR2bWEgPSBxdWVyeV9tYXRjaGluZ192bWEoXHUwMDI2bG9ja19jdHgsIGthcmcucXVlcnlfYWRkciwga2FyZy5xdWVyeV9mbGFncyk7XG4gXHRpZiAoSVNfRVJSKHZtYSkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUih2bWEpO1xuQEAgLTczMiw3ICYjNDM7NjgzLDEwIEBAIHN0YXRpYyBpbnQgZG9fcHJvY21hcF9xdWVyeShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdm9pZCBfX3VzZXIgKnVhcmcpXG4gXHRcdHZtX2ZpbGUgPSBnZXRfZmlsZSh2bWEtXHUwMDNldm1fZmlsZSk7XG4gXG4gXHQvKiB1bmxvY2sgdm1hIG9yIG1tYXBfbG9jaywgYW5kIHB1dCBtbV9zdHJ1Y3QgYmVmb3JlIGNvcHlpbmcgZGF0YSB0byB1c2VyICovXG4tXHRxdWVyeV92bWFfdGVhcmRvd24oXHUwMDI2bG9ja19jdHgpO1xuJiM0MztcdGlmIChsb2NrX2N0eC5tbWFwX2xvY2tlZClcbiYjNDM7XHRcdHVubG9ja19jdHhfbW0oXHUwMDI2bG9ja19jdHgpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdHVubG9ja19jdHhfdm1hKFx1MDAyNmxvY2tfY3R4KTtcbiBcdG1tcHV0KG1tKTtcbiBcbiBcdGlmIChrYXJnLmJ1aWxkX2lkX3NpemUpIHtcbkBAIC03NzMsNyAmIzQzOzcyNywxMCBAQCBzdGF0aWMgaW50IGRvX3Byb2NtYXBfcXVlcnkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHZvaWQgX191c2VyICp1YXJnKVxuIFx0cmV0dXJuIDA7XG4gXG4gb3V0OlxuLVx0cXVlcnlfdm1hX3RlYXJkb3duKFx1MDAyNmxvY2tfY3R4KTtcbiYjNDM7XHRpZiAobG9ja19jdHgubW1hcF9sb2NrZWQpXG4mIzQzO1x0XHR1bmxvY2tfY3R4X21tKFx1MDAyNmxvY2tfY3R4KTtcbiYjNDM7XHRlbHNlXG4mIzQzO1x0XHR1bmxvY2tfY3R4X3ZtYShcdTAwMjZsb2NrX2N0eCk7XG4gXHRtbXB1dChtbSk7XG4gb3V0X2ZpbGU6XG4gXHRpZiAodm1fZmlsZSlcbkBAIC0xMjYzLDcgJiM0MzsxMjIwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBzbWFwc19zaG1lbV93YWxrX3ZtYV9sb2NrX29wcyA9IHtcbiBcdC53YWxrX2xvY2tcdFx0PSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksXG4gfTtcbiBcbi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqXG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKlxuIGdldF9zbWFwc193YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4ge1xuIFx0aWYgKHByaXYtXHUwMDNlbG9ja19jdHgubW1hcF9sb2NrZWQpXG5AQCAtMTI3MSw3ICYjNDM7MTIyOCw3IEBAIGdldF9zbWFwc193YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4gXHRyZXR1cm4gXHUwMDI2c21hcHNfd2Fsa192bWFfbG9ja19vcHM7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqXG4gZ2V0X3NtYXBzX3NobWVtX3dhbGtfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbiB7XG4gXHRpZiAocHJpdi1cdTAwM2Vsb2NrX2N0eC5tbWFwX2xvY2tlZClcbkBAIC0xMjc5LDIwICYjNDM7MTIzNiwyNyBAQCBnZXRfc21hcHNfc2htZW1fd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuIFx0cmV0dXJuIFx1MDAyNnNtYXBzX3NobWVtX3dhbGtfdm1hX2xvY2tfb3BzO1xuIH1cbiBcbi0vKlxuLSAqIEdhdGhlciBtZW0gc3RhdHMgZnJvbSBAdm1hIHdpdGggdGhlIGluZGljYXRlZCBiZWdpbm5pbmdcbi0gKiBhZGRyZXNzIEBzdGFydCwgYW5kIGtlZXAgdGhlbSBpbiBAbXNzLlxuJiM0MzsvKipcbiYjNDM7ICogc21hcF9nYXRoZXJfc3RhdHMoKSAtIEdhdGhlciBtZW0gc3RhdHMgZnJvbSBAdm1hLlxuJiM0MzsgKiBAcHJpdjogcHJvYyBtYXBzIHByaXZhdGUgc3RhdGUuXG4mIzQzOyAqIEB2bWE6IFRoZSBWTUEgdG8gZ2F0aGVyIHN0YXRzIGZvci5cbiYjNDM7ICogQG1zczogVGhlIGFjY3VtdWxhdGVkIHN0YXRzLlxuJiM0MzsgKiBAc3RhcnQ6IFRoZSBhZGRyZXNzIGZyb20gd2hpY2ggdG8gc3RhcnQuXG4gICpcbi0gKiBVc2Ugdm1fc3RhcnQgb2YgQHZtYSBhcyB0aGUgYmVnaW5uaW5nIGFkZHJlc3MgaWYgQHN0YXJ0IGlzIDAuXG4mIzQzOyAqIFRoaXMgZ2F0aGVycyBzdGF0cyBmb3IgdGhlIHdob2xlIG9mIHRoZSBWTUEgdW5sZXNzIHRoZSBsb2NrIHdhcyBkcm9wcGVkXG4mIzQzOyAqIGFuZCBWTUEgZ3JldyBvciBnb3QgbWVyZ2VkIGFuZCB3ZSBmb3VuZCBpdCBhZ2FpbiwgaW4gd2hpY2ggY2FzZSB3ZSBvbmx5XG4mIzQzOyAqIGdhdGhlciBzdGF0cyBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgVk1BIHJhbmdlLlxuICAqL1xuIHN0YXRpYyB2b2lkIHNtYXBfZ2F0aGVyX3N0YXRzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcbiBcdFx0XHQgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0XHQgICAgICBzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgKm1zcywgdW5zaWduZWQgbG9uZyBzdGFydClcbiYjNDM7XHRcdFx0ICAgICAgc3RydWN0IG1lbV9zaXplX3N0YXRzICptc3MsXG4mIzQzO1x0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQpXG4ge1xuIFx0Y29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMgPSBnZXRfc21hcHNfd2Fsa19vcHMocHJpdik7XG4mIzQzO1x0Y29uc3QgYm9vbCBpc19wYXJ0aWFsID0gc3RhcnQgXHUwMDNlIHZtYS1cdTAwM2V2bV9zdGFydDtcbiBcbiBcdC8qIEludmFsaWQgc3RhcnQgKi9cbi1cdGlmIChzdGFydCBcdTAwM2U9IHZtYS1cdTAwM2V2bV9lbmQpXG4mIzQzO1x0aWYgKHN0YXJ0IFx1MDAzYyB2bWEtXHUwMDNldm1fc3RhcnQgfHwgc3RhcnQgXHUwMDNlPSB2bWEtXHUwMDNldm1fZW5kKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAodm1hID09IGdldF9nYXRlX3ZtYShwcml2LVx1MDAzZWxvY2tfY3R4Lm1tKSlcbkBAIC0xMzEyLDIwICYjNDM7MTI3NiwxNyBAQCBzdGF0aWMgdm9pZCBzbWFwX2dhdGhlcl9zdGF0cyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXG4gXHRcdCAqIFVubGVzcyB3ZSBrbm93IHRoYXQgdGhlIHNobWVtIG9iamVjdCAob3IgdGhlIHBhcnQgbWFwcGVkIGJ5XG4gXHRcdCAqIG91ciBWTUEpIGhhcyBubyBzd2FwcGVkIG91dCBwYWdlcyBhdCBhbGwuXG4gXHRcdCAqL1xuLVx0XHR1bnNpZ25lZCBsb25nIHNobWVtX3N3YXBwZWQgPSBzaG1lbV9zd2FwX3VzYWdlKHZtYSk7XG4mIzQzO1x0XHRjb25zdCB1bnNpZ25lZCBsb25nIHNobWVtX3N3YXBwZWQgPSBzaG1lbV9zd2FwX3VzYWdlKHZtYSk7XG4mIzQzO1x0XHRjb25zdCBib29sIHNoYXJlZF9vcl9ybyA9IHZtYV90ZXN0KHZtYSwgVk1BX1NIQVJFRF9CSVQpIHx8XG4mIzQzO1x0XHRcdFx0XHQgICF2bWFfdGVzdCh2bWEsIFZNQV9XUklURV9CSVQpO1xuIFxuLVx0XHRpZiAoIXN0YXJ0IFx1MDAyNlx1MDAyNiAoIXNobWVtX3N3YXBwZWQgfHwgKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fU0hBUkVEKSB8fFxuLVx0XHRcdFx0XHQhKHZtYS1cdTAwM2V2bV9mbGFncyBcdTAwMjYgVk1fV1JJVEUpKSkge1xuJiM0MztcdFx0aWYgKCFpc19wYXJ0aWFsIFx1MDAyNlx1MDAyNiAoIXNobWVtX3N3YXBwZWQgfHwgc2hhcmVkX29yX3JvKSlcbiBcdFx0XHRtc3MtXHUwMDNlc3dhcCAmIzQzOz0gc2htZW1fc3dhcHBlZDtcbi1cdFx0fSBlbHNlIHtcbiYjNDM7XHRcdGVsc2VcbiBcdFx0XHRvcHMgPSBnZXRfc21hcHNfc2htZW1fd2Fsa19vcHMocHJpdik7XG4tXHRcdH1cbiBcdH1cbiBcbi1cdGlmICghc3RhcnQpXG4tXHRcdHdhbGtfcGFnZV92bWEodm1hLCBvcHMsIG1zcyk7XG4tXHRlbHNlXG4tXHRcdHdhbGtfcGFnZV9yYW5nZSh2bWEtXHUwMDNldm1fbW0sIHN0YXJ0LCB2bWEtXHUwMDNldm1fZW5kLCBvcHMsIG1zcyk7XG4mIzQzO1x0d2Fsa19wYWdlX3JhbmdlX3ZtYSh2bWEsIHN0YXJ0LCB2bWEtXHUwMDNldm1fZW5kLCBvcHMsIG1zcyk7XG4gXG4gXHRyZWFjcXVpcmVfcmN1KHByaXYpO1xuIH1cbkBAIC0xMzgwLDcgJiM0MzsxMzQxLDcgQEAgc3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2O1xuIFx0c3RydWN0IG1lbV9zaXplX3N0YXRzIG1zcyA9IHt9O1xuIFxuLVx0c21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCBcdTAwMjZtc3MsIDApO1xuJiM0MztcdHNtYXBfZ2F0aGVyX3N0YXRzKHByaXYsIHZtYSwgXHUwMDI2bXNzLCB2bWEtXHUwMDNldm1fc3RhcnQpO1xuIFxuIFx0c2hvd19tYXBfdm1hKG0sIHZtYSk7XG4gXG5AQCAtMTQwNSwxMiAmIzQzOzEzNjYsMTQgQEAgc3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIHN0YXRpYyBpbnQgc2hvd19zbWFwc19yb2xsdXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIHtcbiBcdHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tXHUwMDNlcHJpdmF0ZTtcbiYjNDM7XHRzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCA9IFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHg7XG4mIzQzO1x0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBsb2NrX2N0eC1cdTAwM2VtbTtcbiBcdHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyBtc3MgPSB7fTtcbi1cdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gcHJpdi1cdTAwM2Vsb2NrX2N0eC5tbTtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGxhc3Rfdm1hX2VuZCA9IDA7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyB2bWFfc3RhcnQgPSAwO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4tXHR1bnNpZ25lZCBsb25nIHZtYV9zdGFydCA9IDAsIGxhc3Rfdm1hX2VuZCA9IDA7XG4mIzQzO1x0bG9mZl90IHBvcyA9IDA7XG4gXHRpbnQgcmV0ID0gMDtcbi1cdFZNQV9JVEVSQVRPUih2bWksIG1tLCAwKTtcbiBcbiBcdHByaXYtXHUwMDNldGFzayA9IGdldF9wcm9jX3Rhc2socHJpdi1cdTAwM2Vpbm9kZSk7XG4gXHRpZiAoIXByaXYtXHUwMDNldGFzaylcbkBAIC0xNDIxLDg5ICYjNDM7MTM4NCw2MCBAQCBzdGF0aWMgaW50IHNob3dfc21hcHNfcm9sbHVwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiBcdFx0Z290byBvdXRfcHV0X3Rhc2s7XG4gXHR9XG4gXG4tXHRyZXQgPSBsb2NrX2N0eF9tbShcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4KTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0X3B1dF9tbTtcbi1cbiBcdGhvbGRfdGFza19tZW1wb2xpY3kocHJpdik7XG4tXHR2bWEgPSB2bWFfbmV4dChcdTAwMjZ2bWkpO1xuJiM0MztcdHJjdV9yZWFkX2xvY2soKTtcbiYjNDM7XHRyZXNldF9sb2NrX2N0eChsb2NrX2N0eCk7XG4gXG4mIzQzO1x0dm1hX2l0ZXJfaW5pdChcdTAwMjZwcml2LVx1MDAzZWl0ZXIsIG1tLCAwKTtcbiYjNDM7XHR2bWEgPSBwcm9jX2dldF92bWEobSwgXHUwMDI2cG9zKTtcbiBcdGlmICh1bmxpa2VseSghdm1hKSlcbiBcdFx0Z290byBlbXB0eV9zZXQ7XG4gXG4tXHR2bWFfc3RhcnQgPSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4tXHRkbyB7XG4tXHRcdHNtYXBfZ2F0aGVyX3N0YXRzKHByaXYsIHZtYSwgXHUwMDI2bXNzLCAwKTtcbi1cdFx0bGFzdF92bWFfZW5kID0gdm1hLVx1MDAzZXZtX2VuZDtcbiYjNDM7XHRpZiAoIUlTX0VSUih2bWEpIFx1MDAyNlx1MDAyNiB2bWEgIT0gZ2V0X2dhdGVfdm1hKGxvY2tfY3R4LVx1MDAzZW1tKSlcbiYjNDM7XHRcdHZtYV9zdGFydCA9IHZtYS1cdTAwM2V2bV9zdGFydDtcbiYjNDM7XG4mIzQzO1x0d2hpbGUgKHZtYSkge1xuJiM0MztcdFx0aWYgKElTX0VSUih2bWEpKSB7XG4mIzQzO1x0XHRcdHJldCA9IFBUUl9FUlIodm1hKTtcbiYjNDM7XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdGlmICh2bWEgPT0gZ2V0X2dhdGVfdm1hKGxvY2tfY3R4LVx1MDAzZW1tKSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4gXG4gXHRcdC8qXG4tXHRcdCAqIFJlbGVhc2UgbW1hcF9sb2NrIHRlbXBvcmFyaWx5IGlmIHNvbWVvbmUgd2FudHMgdG9cbi1cdFx0ICogYWNjZXNzIGl0IGZvciB3cml0ZSByZXF1ZXN0LlxuJiM0MztcdFx0ICogSWYgYWZ0ZXIgcmV0YWtpbmcgdGhlIGxvY2ssIGFscmVhZHkgcmVwb3J0ZWQgVk1BIGdyZXcgb3JcbiYjNDM7XHRcdCAqIG1lcmdlZCB3aXRoIHRoZSBuZXh0IG9uZSwgc21hcF9nYXRoZXJfc3RhdHMoKSB3aWxsIGdhdGhlclxuJiM0MztcdFx0ICogc3RhdHMgZm9yIHRoZSByZW1haW5pbmcgcG9ydGlvbiBieSBzdGFydGluZyBhdCBsYXN0X3ZtYV9lbmQuXG4gXHRcdCAqL1xuLVx0XHRpZiAobW1hcF9sb2NrX2lzX2NvbnRlbmRlZChtbSkpIHtcbi1cdFx0XHR2bWFfaXRlcl9pbnZhbGlkYXRlKFx1MDAyNnZtaSk7XG4tXHRcdFx0dW5sb2NrX2N0eF9tbShcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4KTtcbi1cdFx0XHRyZXQgPSBsb2NrX2N0eF9tbShcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4KTtcbi1cdFx0XHRpZiAocmV0KSB7XG4tXHRcdFx0XHRyZWxlYXNlX3Rhc2tfbWVtcG9saWN5KHByaXYpO1xuLVx0XHRcdFx0Z290byBvdXRfcHV0X21tO1xuLVx0XHRcdH1cbiYjNDM7XHRcdHNtYXBfZ2F0aGVyX3N0YXRzKHByaXYsIHZtYSwgXHUwMDI2bXNzLCBsYXN0X3ZtYV9lbmQpO1xuJiM0MztcdFx0bGFzdF92bWFfZW5kID0gdm1hLVx1MDAzZXZtX2VuZDtcbiBcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBJZiB0aGUgVk1BIGxvY2sgaXMgbm90IHRha2VuLCB3ZSBob2xkIHRoZSBvZnRlbiBjb250ZW5kZWRcbiYjNDM7XHRcdCAqIG1tYXAgbG9jay4gVGhpcyBjYW4gaGFwcGVuIGlmIHdlIGhhZCB0byBmYWxsIGJhY2sgdG8gdGhlXG4mIzQzO1x0XHQgKiBtbWFwIGxvY2suXG4mIzQzO1x0XHQgKlxuJiM0MztcdFx0ICogVG8gcmVsaWV2ZSBwcmVzc3VyZSwgY2hlY2sgaWYgaXQgaXMgaW5kZWVkIGNvbnRlbmRlZCwgdGhlblxuJiM0MztcdFx0ICogdGVtcG9yYXJpbHkgcmVsZWFzZSBpdC5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKGxvY2tfY3R4LVx1MDAzZW1tYXBfbG9ja2VkIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIG1tYXBfbG9ja19pc19jb250ZW5kZWQobG9ja19jdHgtXHUwMDNlbW0pKSB7XG4mIzQzO1x0XHRcdHVubG9ja19jdHhfbW0obG9ja19jdHgpO1xuIFx0XHRcdC8qXG4tXHRcdFx0ICogQWZ0ZXIgZHJvcHBpbmcgdGhlIGxvY2ssIHRoZXJlIGFyZSBmb3VyIGNhc2VzIHRvXG4tXHRcdFx0ICogY29uc2lkZXIuIFNlZSB0aGUgZm9sbG93aW5nIGV4YW1wbGUgZm9yIGV4cGxhbmF0aW9uLlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogICAmIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7XG4tXHRcdFx0ICogICB8IFZNQTEgfCBWTUEyIHwgVk1BMyAgICAgIHxcbi1cdFx0XHQgKiAgICYjNDM7LS0tLS0tJiM0MzstLS0tLS0mIzQzOy0tLS0tLS0tLS0tJiM0Mztcbi1cdFx0XHQgKiAgIHwgICAgICB8ICAgICAgfCAgICAgICAgICAgfFxuLVx0XHRcdCAqICA0ayAgICAgOGsgICAgIDE2ayAgICAgICAgIDQwMGtcbi1cdFx0XHQgKlxuLVx0XHRcdCAqIFN1cHBvc2Ugd2UgZHJvcCB0aGUgbG9jayBhZnRlciByZWFkaW5nIFZNQTIgZHVlIHRvXG4tXHRcdFx0ICogY29udGVudGlvbiwgdGhlbiB3ZSBnZXQ6XG4tXHRcdFx0ICpcbi1cdFx0XHQgKlx0bGFzdF92bWFfZW5kID0gMTZrXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAxKSBWTUEyIGlzIGZyZWVkLCBidXQgVk1BMyBleGlzdHM6XG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAgICB2bWFfbmV4dCh2bWkpIHdpbGwgcmV0dXJuIFZNQTMuXG4tXHRcdFx0ICogICAgSW4gdGhpcyBjYXNlLCBqdXN0IGNvbnRpbnVlIGZyb20gVk1BMy5cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIDIpIFZNQTIgc3RpbGwgZXhpc3RzOlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBWTUEzLlxuLVx0XHRcdCAqICAgIEluIHRoaXMgY2FzZSwganVzdCBjb250aW51ZSBmcm9tIFZNQTMuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAzKSBObyBtb3JlIFZNQXMgY2FuIGJlIGZvdW5kOlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBOVUxMLlxuLVx0XHRcdCAqICAgIE5vIG1vcmUgdGhpbmdzIHRvIGRvLCBqdXN0IGJyZWFrLlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogNCkgKGxhc3Rfdm1hX2VuZCAtIDEpIGlzIHRoZSBtaWRkbGUgb2YgYSB2bWEgKFZNQSYjMzk7KTpcbi1cdFx0XHQgKlxuLVx0XHRcdCAqICAgIHZtYV9uZXh0KHZtaSkgd2lsbCByZXR1cm4gVk1BJiMzOTsgd2hvc2UgcmFuZ2Vcbi1cdFx0XHQgKiAgICBjb250YWlucyBsYXN0X3ZtYV9lbmQuXG4tXHRcdFx0ICogICAgSXRlcmF0ZSBWTUEmIzM5OyBmcm9tIGxhc3Rfdm1hX2VuZC5cbiYjNDM7XHRcdFx0ICogRXZlbiB0aG91Z2ggd2UgcHJldmlvdXNseSBmZWxsIGJhY2sgdG8gbW1hcCBsb2NrLFxuJiM0MztcdFx0XHQgKiB3ZSB0cnkgdGFraW5nIFZNQSBsb2NrIGZvciB0aGUgbmV4dCBWTUEsIHNpbmNlIGl0XG4mIzQzO1x0XHRcdCAqIG1pZ2h0IG5vdCBiZSB1bmRlciBtb2RpZmljYXRpb24uIEluIHRoZSB3b3JzdCBjYXNlXG4mIzQzO1x0XHRcdCAqIHdlIHdpbGwgZmFsbCBiYWNrIHRvIG1tYXAgbG9jayBhZ2Fpbi5cbiBcdFx0XHQgKi9cbi1cdFx0XHR2bWEgPSB2bWFfbmV4dChcdTAwMjZ2bWkpO1xuLVx0XHRcdC8qIENhc2UgMyBhYm92ZSAqL1xuLVx0XHRcdGlmICghdm1hKVxuLVx0XHRcdFx0YnJlYWs7XG4tXG4tXHRcdFx0LyogQ2FzZSAxIGFuZCAyIGFib3ZlICovXG4tXHRcdFx0aWYgKHZtYS1cdTAwM2V2bV9zdGFydCBcdTAwM2U9IGxhc3Rfdm1hX2VuZCkge1xuLVx0XHRcdFx0c21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCBcdTAwMjZtc3MsIDApO1xuLVx0XHRcdFx0bGFzdF92bWFfZW5kID0gdm1hLVx1MDAzZXZtX2VuZDtcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHQvKiBDYXNlIDQgYWJvdmUgKi9cbi1cdFx0XHRpZiAodm1hLVx1MDAzZXZtX2VuZCBcdTAwM2UgbGFzdF92bWFfZW5kKSB7XG4tXHRcdFx0XHRzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsIFx1MDAyNm1zcywgbGFzdF92bWFfZW5kKTtcbi1cdFx0XHRcdGxhc3Rfdm1hX2VuZCA9IHZtYS1cdTAwM2V2bV9lbmQ7XG4tXHRcdFx0fVxuJiM0MztcdFx0XHRyY3VfcmVhZF9sb2NrKCk7XG4mIzQzO1x0XHRcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcbiYjNDM7XHRcdFx0LyogUmVzdW1lIGZyb20gdGhlIGxhc3QgcG9zaXRpb24uICovXG4mIzQzO1x0XHRcdHBvcyA9IGxhc3Rfdm1hX2VuZDtcbiYjNDM7XHRcdFx0dm1hX2l0ZXJfaW5pdChcdTAwMjZwcml2LVx1MDAzZWl0ZXIsIG1tLCBwb3MpO1xuIFx0XHR9XG4tXHR9IGZvcl9lYWNoX3ZtYSh2bWksIHZtYSk7XG4mIzQzO1x0XHR2bWEgPSBwcm9jX2dldF92bWEobSwgXHUwMDI2cG9zKTtcbiYjNDM7XHR9XG4gXG4gZW1wdHlfc2V0OlxuIFx0c2hvd192bWFfaGVhZGVyX3ByZWZpeChtLCB2bWFfc3RhcnQsIGxhc3Rfdm1hX2VuZCwgMCwgMCwgMCwgMCk7XG5AQCAtMTUxMiwxMCAmIzQzOzE0NDYsMTQgQEAgc3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4gXG4gXHRfX3Nob3dfc21hcChtLCBcdTAwMjZtc3MsIHRydWUpO1xuIFxuJiM0MztvdXRfdW5sb2NrOlxuJiM0MztcdGlmIChsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZCkge1xuJiM0MztcdFx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdHVubG9ja19jdHhfdm1hKGxvY2tfY3R4KTtcbiYjNDM7XHRcdHJjdV9yZWFkX3VubG9jaygpO1xuJiM0MztcdH1cbiBcdHJlbGVhc2VfdGFza19tZW1wb2xpY3kocHJpdik7XG4tXHR1bmxvY2tfY3R4X21tKFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHgpO1xuLVxuLW91dF9wdXRfbW06XG4gXHRtbXB1dChtbSk7XG4gb3V0X3B1dF90YXNrOlxuIFx0cHV0X3Rhc2tfc3RydWN0KHByaXYtXHUwMDNldGFzayk7XG5AQCAtMTYwNSw3ICYjNDM7MTU0Myw3IEBAIHN0cnVjdCBjbGVhcl9yZWZzX3ByaXZhdGUge1xuIFx0ZW51bSBjbGVhcl9yZWZzX3R5cGVzIHR5cGU7XG4gfTtcbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgcHRlX2lzX3Bpbm5lZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCBwdGUpXG4mIzQzO3N0YXRpYyBib29sIHB0ZV9pc19waW5uZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG5AQCAtMTYyMSw4ICYjNDM7MTU1OSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfaXNfcGlubmVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRyZXR1cm4gZm9saW9fbWF5YmVfZG1hX3Bpbm5lZChmb2xpbyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLVx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGUpXG4mIzQzO3N0YXRpYyB2b2lkIGNsZWFyX3NvZnRfZGlydHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiYjNDM7XHRcdFx0ICAgICBwdGVfdCAqcHRlKVxuIHtcbiBcdGlmICghcGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpXG4gXHRcdHJldHVybjtcbkBAIC0xNjUzLDggJiM0MzsxNTkxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gfVxuIFxuICNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcbi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHApXG4mIzQzO3N0YXRpYyB2b2lkIGNsZWFyX3NvZnRfZGlydHlfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKVxuIHtcbiBcdHBtZF90IG9sZCwgcG1kID0gKnBtZHA7XG4gXG5AQCAtMTY3OSw4ICYjNDM7MTYxNyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5X3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdH1cbiB9XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHApXG4mIzQzO3N0YXRpYyB2b2lkIGNsZWFyX3NvZnRfZGlydHlfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuJiM0MztcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKVxuIHtcbiB9XG4gI2VuZGlmXG5AQCAtMTg3OSw3ICYjNDM7MTgxNyw3IEBAIHN0cnVjdCBwYWdlbWFwcmVhZCB7XG4gXG4gI2RlZmluZSBQTV9FTkRfT0ZfQlVGRkVSICAgIDFcbiBcbi1zdGF0aWMgaW5saW5lIHBhZ2VtYXBfZW50cnlfdCBtYWtlX3BtZSh1NjQgZnJhbWUsIHU2NCBmbGFncylcbiYjNDM7c3RhdGljIHBhZ2VtYXBfZW50cnlfdCBtYWtlX3BtZSh1NjQgZnJhbWUsIHU2NCBmbGFncylcbiB7XG4gXHRyZXR1cm4gKHBhZ2VtYXBfZW50cnlfdCkgeyAucG1lID0gKGZyYW1lIFx1MDAyNiBQTV9QRlJBTUVfTUFTSykgfCBmbGFncyB9O1xuIH1cbkBAIC0zNDIxLDcgJiM0MzszMzU5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBzaG93X251bWFfdm1hX2xvY2tfb3BzID0ge1xuIFx0LndhbGtfbG9jayA9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSxcbiB9O1xuIFxuLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqXG4gZ2V0X3Nob3dfbnVtYV9vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuIHtcbiBcdGlmIChwcml2LVx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuY1xuaW5kZXggNDE1ZWNjYjcwNDY4NC4uOGQwMGQ3ZGIxYzY1MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLW1hcHMtcmFjZS5jXG5AQCAtODAsNiAmIzQzOzgwLDYxIEBAIGVudW0gbWFwc19maWxlIHtcbiBcbiBzdHJ1Y3Qgdm1hX21vZGlmaWVyX2luZm87XG4gXG4mIzQzO2VudW0gc21hcHNfcm9sbHVwX3N0YXQge1xuJiM0MztcdFJzcyxcbiYjNDM7XHRQc3MsXG4mIzQzO1x0UHNzX0RpcnR5LFxuJiM0MztcdFBzc19Bbm9uLFxuJiM0MztcdFBzc19GaWxlLFxuJiM0MztcdFBzc19TaG1lbSxcbiYjNDM7XHRTaGFyZWRfQ2xlYW4sXG4mIzQzO1x0U2hhcmVkX0RpcnR5LFxuJiM0MztcdFByaXZhdGVfQ2xlYW4sXG4mIzQzO1x0UHJpdmF0ZV9EaXJ0eSxcbiYjNDM7XHRSZWZlcmVuY2VkLFxuJiM0MztcdEFub255bW91cyxcbiYjNDM7XHRLU00sXG4mIzQzO1x0TGF6eUZyZWUsXG4mIzQzO1x0QW5vbkh1Z2VQYWdlcyxcbiYjNDM7XHRTaG1lbVBtZE1hcHBlZCxcbiYjNDM7XHRGaWxlUG1kTWFwcGVkLFxuJiM0MztcdFNoYXJlZF9IdWdldGxiLFxuJiM0MztcdFByaXZhdGVfSHVnZXRsYixcbiYjNDM7XHRTd2FwLFxuJiM0MztcdFN3YXBQc3MsXG4mIzQzO1x0TG9ja2VkLFxuJiM0MztcdFJvbGx1cEZpZWxkQ291bnRcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBjaGFyICpzbWFwc19yb2xsdXBfc3RhdF9uYW1lc1tSb2xsdXBGaWVsZENvdW50XSA9IHtcbiYjNDM7XHRcJiMzNDtSc3NcJiMzNDssXG4mIzQzO1x0XCYjMzQ7UHNzXCYjMzQ7LFxuJiM0MztcdFwmIzM0O1Bzc19EaXJ0eVwmIzM0OyxcbiYjNDM7XHRcJiMzNDtQc3NfQW5vblwmIzM0OyxcbiYjNDM7XHRcJiMzNDtQc3NfRmlsZVwmIzM0OyxcbiYjNDM7XHRcJiMzNDtQc3NfU2htZW1cJiMzNDssXG4mIzQzO1x0XCYjMzQ7U2hhcmVkX0NsZWFuXCYjMzQ7LFxuJiM0MztcdFwmIzM0O1NoYXJlZF9EaXJ0eVwmIzM0OyxcbiYjNDM7XHRcJiMzNDtQcml2YXRlX0NsZWFuXCYjMzQ7LFxuJiM0MztcdFwmIzM0O1ByaXZhdGVfRGlydHlcJiMzNDssXG4mIzQzO1x0XCYjMzQ7UmVmZXJlbmNlZFwmIzM0OyxcbiYjNDM7XHRcJiMzNDtBbm9ueW1vdXNcJiMzNDssXG4mIzQzO1x0XCYjMzQ7S1NNXCYjMzQ7LFxuJiM0MztcdFwmIzM0O0xhenlGcmVlXCYjMzQ7LFxuJiM0MztcdFwmIzM0O0Fub25IdWdlUGFnZXNcJiMzNDssXG4mIzQzO1x0XCYjMzQ7U2htZW1QbWRNYXBwZWRcJiMzNDssXG4mIzQzO1x0XCYjMzQ7RmlsZVBtZE1hcHBlZFwmIzM0OyxcbiYjNDM7XHRcJiMzNDtTaGFyZWRfSHVnZXRsYlwmIzM0OyxcbiYjNDM7XHRcJiMzNDtQcml2YXRlX0h1Z2V0bGJcJiMzNDssXG4mIzQzO1x0XCYjMzQ7U3dhcFwmIzM0OyxcbiYjNDM7XHRcJiMzNDtTd2FwUHNzXCYjMzQ7LFxuJiM0MztcdFwmIzM0O0xvY2tlZFwmIzM0OyxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMge1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdmFsdWVzW1JvbGx1cEZpZWxkQ291bnRdO1xuJiM0Mzt9O1xuJiM0MztcbiBGSVhUVVJFKHByb2NfbWFwc19yYWNlKVxuIHtcbiBcdHN0cnVjdCB2bWFfbW9kaWZpZXJfaW5mbyAqbW9kX2luZm87XG5AQCAtOTEsNiAmIzQzOzE0Niw3IEBAIEZJWFRVUkUocHJvY19tYXBzX3JhY2UpXG4gXHRlbnVtIG1hcHNfZmlsZSBtYXBzX2ZpbGU7XG4gXHRpbnQgc2hhcmVkX21lbV9zaXplO1xuIFx0aW50IHNraXBfcGFnZXM7XG4mIzQzO1x0aW50IHJvbGx1cF9mZDtcbiBcdGludCBwYWdlX3NpemU7XG4gXHRpbnQgdm1hX2NvdW50O1xuIFx0Ym9vbCB2ZXJib3NlO1xuQEAgLTEzMiwxMiAmIzQzOzE4OCwxMiBAQCBzdHJ1Y3Qgdm1hX21vZGlmaWVyX2luZm8ge1xuIFx0dm9pZCAqY2hpbGRfbWFwcGVkX2FkZHJbXTtcbiB9O1xuIFxuLXN0YXRpYyBib29sIHJlYWRfcGFnZShGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmLFxuJiM0MztzdGF0aWMgYm9vbCByZWFkX3BhZ2UoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZiwgaW50IGZkLFxuIFx0XHQgICAgICBzdHJ1Y3QgcGFnZV9jb250ZW50ICpwYWdlKVxuIHtcbiBcdHNzaXplX3QgIGJ5dGVzX3JlYWQ7XG4gXG4tXHRieXRlc19yZWFkID0gcmVhZChzZWxmLVx1MDAzZW1hcHNfZmQsIHBhZ2UtXHUwMDNlZGF0YSwgc2VsZi1cdTAwM2VwYWdlX3NpemUpO1xuJiM0MztcdGJ5dGVzX3JlYWQgPSByZWFkKGZkLCBwYWdlLVx1MDAzZWRhdGEsIHNlbGYtXHUwMDNlcGFnZV9zaXplKTtcbiBcdGlmIChieXRlc19yZWFkIFx1MDAzYz0gMClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuQEAgLTE3NSw3ICYjNDM7MjMxLDcgQEAgc3RhdGljIGludCBsb2NhdGVfY29udGFpbmluZ19wYWdlKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsXG4gXHRcdGNoYXIgKmN1cnJfcG9zO1xuIFx0XHRjaGFyICplbmRfcG9zO1xuIFxuLVx0XHRpZiAoIXJlYWRfcGFnZShzZWxmLCBcdTAwMjZzZWxmLVx1MDAzZXBhZ2UxKSlcbiYjNDM7XHRcdGlmICghcmVhZF9wYWdlKHNlbGYsIHNlbGYtXHUwMDNlbWFwc19mZCwgXHUwMDI2c2VsZi1cdTAwM2VwYWdlMSkpXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFxuIFx0XHRjdXJyX3BvcyA9IHNlbGYtXHUwMDNlcGFnZTEuZGF0YTtcbkBAIC0yMDUsMTAgJiM0MzsyNjEsMTEgQEAgc3RhdGljIGJvb2wgcmVhZF90d29fcGFnZXMoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHNlbGYtXHUwMDNlc2tpcF9wYWdlczsgaSYjNDM7JiM0MzspXG4tXHRcdGlmICghcmVhZF9wYWdlKHNlbGYsIFx1MDAyNnNlbGYtXHUwMDNlcGFnZTEpKVxuJiM0MztcdFx0aWYgKCFyZWFkX3BhZ2Uoc2VsZiwgc2VsZi1cdTAwM2VtYXBzX2ZkLCBcdTAwMjZzZWxmLVx1MDAzZXBhZ2UxKSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRyZXR1cm4gcmVhZF9wYWdlKHNlbGYsIFx1MDAyNnNlbGYtXHUwMDNlcGFnZTEpIFx1MDAyNlx1MDAyNiByZWFkX3BhZ2Uoc2VsZiwgXHUwMDI2c2VsZi1cdTAwM2VwYWdlMik7XG4mIzQzO1x0cmV0dXJuIHJlYWRfcGFnZShzZWxmLCBzZWxmLVx1MDAzZW1hcHNfZmQsIFx1MDAyNnNlbGYtXHUwMDNlcGFnZTEpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICByZWFkX3BhZ2Uoc2VsZiwgc2VsZi1cdTAwM2VtYXBzX2ZkLCBcdTAwMjZzZWxmLVx1MDAzZXBhZ2UyKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgY29weV9saW5lKGNvbnN0IGNoYXIgKmxpbmVfc3RhcnQsIGNvbnN0IGNoYXIgKmxpbmVfZW5kLFxuQEAgLTMxNyw2ICYjNDM7Mzc0LDYxIEBAIHN0YXRpYyBib29sIHJlYWRfYm91bmRhcnlfbGluZXMoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZixcbiBcdFx0ICAgICAgXHUwMDI2Zmlyc3RfbGluZS1cdTAwM2VlbmRfYWRkcikgPT0gMjtcbiB9XG4gXG4mIzQzO3N0YXRpYyBib29sIHBhcnNlX3NtYXBzX3JvbGx1cChGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmLFxuJiM0MztcdFx0XHQgICAgICAgc3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyAqc3RhdHMpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZGV2X21haiwgZGV2X21pbiwgaW5vZGU7XG4mIzQzO1x0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCBvZmZzO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgdmFsdWU7XG4mIzQzO1x0Y2hhciBuYW1lWzMyXSwgcGVybVs1XTtcbiYjNDM7XHRjaGFyICpjdXJyX3BvcztcbiYjNDM7XHRjaGFyICplbmRfcG9zO1xuJiM0MztcdGNoYXIgKmxpbmVfZW5kO1xuJiM0MztcbiYjNDM7XHRpZiAobHNlZWsoc2VsZi1cdTAwM2Vyb2xsdXBfZmQsIDAsIFNFRUtfU0VUKSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZWFkX3BhZ2Uoc2VsZiwgc2VsZi1cdTAwM2Vyb2xsdXBfZmQsIFx1MDAyNnNlbGYtXHUwMDNlcGFnZTEpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRjdXJyX3BvcyA9IHNlbGYtXHUwMDNlcGFnZTEuZGF0YTtcbiYjNDM7XHRlbmRfcG9zID0gc2VsZi1cdTAwM2VwYWdlMS5kYXRhICYjNDM7IHNlbGYtXHUwMDNlcGFnZTEuc2l6ZTtcbiYjNDM7XG4mIzQzO1x0bGluZV9lbmQgPSBzdHJjaHIoY3Vycl9wb3MsICYjMzk7XFxuJiMzOTspO1xuJiM0MztcdGlmICghbGluZV9lbmQpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChzc2NhbmYoY3Vycl9wb3MsIFwmIzM0OyVseC0lbHggJTRzICVseCAldToldSAldSAlMzFzXCYjMzQ7LFxuJiM0MztcdFx0XHUwMDI2c3RhcnQsIFx1MDAyNmVuZCwgcGVybSwgXHUwMDI2b2ZmcywgXHUwMDI2ZGV2X21haiwgXHUwMDI2ZGV2X21pbiwgXHUwMDI2aW5vZGUsIG5hbWUpICE9IDgpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmIChzdHJjbXAobmFtZSwgXCYjMzQ7W3JvbGx1cF1cJiMzNDspKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRmb3IgKGludCBzdGF0ID0gMDsgc3RhdCBcdTAwM2MgQVJSQVlfU0laRShzbWFwc19yb2xsdXBfc3RhdF9uYW1lcyk7IHN0YXQmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHRpbnQgbGVuO1xuJiM0MztcbiYjNDM7XHRcdGN1cnJfcG9zID0gbGluZV9lbmQgJiM0MzsgMTtcbiYjNDM7XHRcdGlmIChjdXJyX3BvcyBcdTAwM2U9IGVuZF9wb3MpXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0XHRsaW5lX2VuZCA9IHN0cmNocihjdXJyX3BvcywgJiMzOTtcXG4mIzM5Oyk7XG4mIzQzO1x0XHRpZiAoIWxpbmVfZW5kKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0aWYgKHNzY2FuZihjdXJyX3BvcywgXCYjMzQ7JTMxcyAlbHUga0JcJiMzNDssIG5hbWUsIFx1MDAyNnZhbHVlKSAhPSAyKVxuJiM0MztcdFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdFx0bGVuID0gc3RybGVuKG5hbWUpO1xuJiM0MztcdFx0aWYgKG5hbWVbbGVuIC0gMV0gIT0gJiMzOTs6JiMzOTsgfHwgc3RybmNtcChuYW1lLCBzbWFwc19yb2xsdXBfc3RhdF9uYW1lc1tzdGF0XSwgbGVuIC0gMSkpXG4mIzQzO1x0XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0XHRzdGF0cy1cdTAwM2V2YWx1ZXNbc3RhdF0gPSB2YWx1ZTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldHVybiB0cnVlO1xuJiM0Mzt9XG4mIzQzO1xuIC8qIFRocmVhZCBzeW5jaHJvbml6YXRpb24gcm91dGluZXMgKi9cbiBzdGF0aWMgdm9pZCB3YWl0X2Zvcl9zdGF0ZShzdHJ1Y3Qgdm1hX21vZGlmaWVyX2luZm8gKm1vZF9pbmZvLCBlbnVtIHRlc3Rfc3RhdGUgc3RhdGUpXG4ge1xuQEAgLTM5Nyw2ICYjNDM7NTA5LDQxIEBAIHN0YXRpYyBib29sIHByaW50X2JvdW5kYXJpZXNfb24oYm9vbCBjb25kaXRpb24sIGNvbnN0IGNoYXIgKnRpdGxlLFxuIFx0cmV0dXJuIGNvbmRpdGlvbjtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIHByaW50X3NtYXBzX3JvbGx1cF9zdGF0cyhjb25zdCBjaGFyICp0aXRsZSwgRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZixcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKnN0YXRzKVxuJiM0Mzt7XG4mIzQzO1x0cHJpbnRmKFwmIzM0OyVzXCYjMzQ7LCB0aXRsZSk7XG4mIzQzO1x0Zm9yIChpbnQgc3RhdCA9IDA7IHN0YXQgXHUwMDNjIEFSUkFZX1NJWkUoc21hcHNfcm9sbHVwX3N0YXRfbmFtZXMpOyBzdGF0JiM0MzsmIzQzOylcbiYjNDM7XHRcdHByaW50ZihcJiMzNDslNjRzICVsdSBrQlxcblwmIzM0Oywgc21hcHNfcm9sbHVwX3N0YXRfbmFtZXNbc3RhdF0sIHN0YXRzLVx1MDAzZXZhbHVlc1tzdGF0XSk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGNtcF9zbWFwc19yb2xsdXBfc3RhdChzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpzMSxcbiYjNDM7XHRcdFx0XHQgIHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKnMyLFxuJiM0MztcdFx0XHRcdCAgZW51bSBzbWFwc19yb2xsdXBfc3RhdCBzdGF0KVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHMxLVx1MDAzZXZhbHVlc1tzdGF0XSA9PSBzMi1cdTAwM2V2YWx1ZXNbc3RhdF07XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBib29sIGNvbXBhcmVfc21hcHNfcm9sbHVwKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsXG4mIzQzO1x0XHRcdFx0IHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKmV4cGVjdGVkLFxuJiM0MztcdFx0XHRcdCBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICphY3R1YWwpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIENsZWFuL2RpcnR5IG1ldHJpY3MgbWlnaHQgY2hhbmdlIGJ1dCBQc3MtcmVsYXRlZCBvbmVzXG4mIzQzO1x0ICogc2hvdWxkIHN0YXkgY29uc3RhbnQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGNtcF9zbWFwc19yb2xsdXBfc3RhdChleHBlY3RlZCwgYWN0dWFsLCBQc3MpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBjbXBfc21hcHNfcm9sbHVwX3N0YXQoZXhwZWN0ZWQsIGFjdHVhbCwgUHNzX0Fub24pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBjbXBfc21hcHNfcm9sbHVwX3N0YXQoZXhwZWN0ZWQsIGFjdHVhbCwgUHNzX0ZpbGUpIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICBjbXBfc21hcHNfcm9sbHVwX3N0YXQoZXhwZWN0ZWQsIGFjdHVhbCwgUHNzX1NobWVtKSlcbiYjNDM7XHRcdHJldHVybiB0cnVlO1xuJiM0MztcbiYjNDM7XHRwcmludF9zbWFwc19yb2xsdXBfc3RhdHMoXCYjMzQ7RXhwZWN0ZWQgc3RhdHM6XCYjMzQ7LCBzZWxmLCBleHBlY3RlZCk7XG4mIzQzO1x0cHJpbnRfc21hcHNfcm9sbHVwX3N0YXRzKFwmIzM0O0FjdHVhbCBzdGF0czpcJiMzNDssIHNlbGYsIGFjdHVhbCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBmYWxzZTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZCByZXBvcnRfdGVzdF9zdGFydChjb25zdCBjaGFyICpuYW1lLCBib29sIHZlcmJvc2UpXG4ge1xuIFx0aWYgKHZlcmJvc2UpXG5AQCAtNTcyLDYgJiM0Mzs3MTksNyBAQCBGSVhUVVJFX1NFVFVQKHByb2NfbWFwc19yYWNlKVxuIFx0dW5zaWduZWQgbG9uZyBmaXJzdF9tYXBfYWRkcjtcbiBcdHVuc2lnbmVkIGxvbmcgbGFzdF9tYXBfYWRkcjtcbiBcdHVuc2lnbmVkIGxvbmcgZHVyYXRpb25fc2VjO1xuJiM0MztcdGNoYXIgcm9sbHVwX2ZuYW1lWzMyXTtcbiBcdGNoYXIgZm5hbWVbMzJdO1xuIFxuIFx0c2VsZi1cdTAwM2VwYWdlX3NpemUgPSAodW5zaWduZWQgbG9uZylzeXNjb25mKF9TQ19QQUdFU0laRSk7XG5AQCAtNjQ5LDYgJiM0Mzs3OTcsOSBAQCBGSVhUVVJFX1NFVFVQKHByb2NfbWFwc19yYWNlKVxuIFx0XHRicmVhaztcbiBcdGNhc2UgU01BUFM6XG4gXHRcdHNwcmludGYoZm5hbWUsIFwmIzM0Oy9wcm9jLyVkL3NtYXBzXCYjMzQ7LCBzZWxmLVx1MDAzZXBpZCk7XG4mIzQzO1x0XHRzcHJpbnRmKHJvbGx1cF9mbmFtZSwgXCYjMzQ7L3Byb2MvJWQvc21hcHNfcm9sbHVwXCYjMzQ7LCBzZWxmLVx1MDAzZXBpZCk7XG4mIzQzO1x0XHRzZWxmLVx1MDAzZXJvbGx1cF9mZCA9IG9wZW4ocm9sbHVwX2ZuYW1lLCBPX1JET05MWSk7XG4mIzQzO1x0XHRBU1NFUlRfTkUoc2VsZi1cdTAwM2Vyb2xsdXBfZmQsIC0xKTtcbiBcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRrc2Z0X2V4aXRfZmFpbCgpO1xuQEAgLTcxMSw2ICYjNDM7ODYyLDggQEAgRklYVFVSRV9URUFSRE9XTihwcm9jX21hcHNfcmFjZSlcbiBcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBzZWxmLVx1MDAzZXZtYV9jb3VudDsgaSYjNDM7JiM0MzspXG4gXHRcdG11bm1hcChzZWxmLVx1MDAzZW1vZF9pbmZvLVx1MDAzZWNoaWxkX21hcHBlZF9hZGRyW2ldLCBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSk7XG4gXHRjbG9zZShzZWxmLVx1MDAzZW1hcHNfZmQpO1xuJiM0MztcdGlmIChzZWxmLVx1MDAzZW1hcHNfZmlsZSA9PSBTTUFQUylcbiYjNDM7XHRcdGNsb3NlKHNlbGYtXHUwMDNlcm9sbHVwX2ZkKTtcbiBcdHdhaXRwaWQoc2VsZi1cdTAwM2VwaWQsIFx1MDAyNnN0YXR1cywgMCk7XG4gXHRtdW5tYXAoc2VsZi1cdTAwM2Vtb2RfaW5mbywgc2VsZi1cdTAwM2VzaGFyZWRfbWVtX3NpemUpO1xuIH1cbkBAIC03MjMsNiAmIzQzOzg3Niw3IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9zcGxpdClcbiBcdHN0cnVjdCBsaW5lX2NvbnRlbnQgc3BsaXRfZmlyc3RfbGluZTtcbiBcdHN0cnVjdCBsaW5lX2NvbnRlbnQgcmVzdG9yZWRfbGFzdF9saW5lO1xuIFx0c3RydWN0IGxpbmVfY29udGVudCByZXN0b3JlZF9maXJzdF9saW5lO1xuJiM0MztcdHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgb3JpZ19zdGF0cztcbiBcbiBcdHdhaXRfZm9yX3N0YXRlKG1vZF9pbmZvLCBTRVRVUF9SRUFEWSk7XG4gXG5AQCAtNzM2LDYgJiM0Mzs4OTAsOCBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fc3BsaXQpXG4gXHRyZXBvcnRfdGVzdF9zdGFydChcJiMzNDtUZWFyaW5nIGZyb20gc3BsaXRcJiMzNDssIHNlbGYtXHUwMDNldmVyYm9zZSk7XG4gXHRBU1NFUlRfVFJVRShjYXB0dXJlX21vZF9wYXR0ZXJuKHNlbGYsIFx1MDAyNnNwbGl0X2xhc3RfbGluZSwgXHUwMDI2c3BsaXRfZmlyc3RfbGluZSxcbiBcdFx0XHRcdFx0XHUwMDI2cmVzdG9yZWRfbGFzdF9saW5lLCBcdTAwMjZyZXN0b3JlZF9maXJzdF9saW5lKSk7XG4mIzQzO1x0aWYgKHNlbGYtXHUwMDNlbWFwc19maWxlID09IFNNQVBTKVxuJiM0MztcdFx0QVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsIFx1MDAyNm9yaWdfc3RhdHMpKTtcbiBcbiBcdC8qIE5vdyBzdGFydCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZm9yIHNlbGYtXHUwMDNlZHVyYXRpb25fc2VjICovXG4gXHRzaWduYWxfc3RhdGUobW9kX2luZm8sIFRFU1RfUkVBRFkpO1xuQEAgLTc5OSw2ICYjNDM7OTU1LDExIEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9zcGxpdClcbiBcdFx0XHRcdCAgICAgdm1hX2VuZCA9PSBzZWxmLVx1MDAzZWxhc3RfbGluZS5lbmRfYWRkcikgfHxcbiBcdFx0XHRcdCAgICAodm1hX3N0YXJ0ID09IHNwbGl0X2ZpcnN0X2xpbmUuc3RhcnRfYWRkciBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgICAgdm1hX2VuZCA9PSBzcGxpdF9maXJzdF9saW5lLmVuZF9hZGRyKSk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIHN0YXRzO1xuJiM0MztcbiYjNDM7XHRcdFx0QVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsIFx1MDAyNnN0YXRzKSk7XG4mIzQzO1x0XHRcdEFTU0VSVF9UUlVFKGNvbXBhcmVfc21hcHNfcm9sbHVwKHNlbGYsIFx1MDAyNm9yaWdfc3RhdHMsIFx1MDAyNnN0YXRzKSk7XG4gXHRcdH1cbiBcdFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUNfQ09BUlNFLCBcdTAwMjZlbmRfdHMpO1xuIFx0XHRlbmRfdGVzdF9pdGVyYXRpb24oXHUwMDI2ZW5kX3RzLCBzZWxmLVx1MDAzZXZlcmJvc2UpO1xuQEAgLTgxNyw2ICYjNDM7OTc4LDcgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3Jlc2l6ZSlcbiBcdHN0cnVjdCBsaW5lX2NvbnRlbnQgc2hydW5rX2ZpcnN0X2xpbmU7XG4gXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2xhc3RfbGluZTtcbiBcdHN0cnVjdCBsaW5lX2NvbnRlbnQgcmVzdG9yZWRfZmlyc3RfbGluZTtcbiYjNDM7XHRzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIG9yaWdfc3RhdHM7XG4gXG4gXHR3YWl0X2Zvcl9zdGF0ZShtb2RfaW5mbywgU0VUVVBfUkVBRFkpO1xuIFxuQEAgLTgzMCw2ICYjNDM7OTkyLDggQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3Jlc2l6ZSlcbiBcdHJlcG9ydF90ZXN0X3N0YXJ0KFwmIzM0O1RlYXJpbmcgZnJvbSByZXNpemVcJiMzNDssIHNlbGYtXHUwMDNldmVyYm9zZSk7XG4gXHRBU1NFUlRfVFJVRShjYXB0dXJlX21vZF9wYXR0ZXJuKHNlbGYsIFx1MDAyNnNocnVua19sYXN0X2xpbmUsIFx1MDAyNnNocnVua19maXJzdF9saW5lLFxuIFx0XHRcdFx0XHRcdTAwMjZyZXN0b3JlZF9sYXN0X2xpbmUsIFx1MDAyNnJlc3RvcmVkX2ZpcnN0X2xpbmUpKTtcbiYjNDM7XHRpZiAoc2VsZi1cdTAwM2VtYXBzX2ZpbGUgPT0gU01BUFMpXG4mIzQzO1x0XHRBU1NFUlRfVFJVRShwYXJzZV9zbWFwc19yb2xsdXAoc2VsZiwgXHUwMDI2b3JpZ19zdGF0cykpO1xuIFxuIFx0LyogTm93IHN0YXJ0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBmb3Igc2VsZi1cdTAwM2VkdXJhdGlvbl9zZWMgKi9cbiBcdHNpZ25hbF9zdGF0ZShtb2RfaW5mbywgVEVTVF9SRUFEWSk7XG5AQCAtODgwLDYgJiM0MzsxMDQ0LDExIEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9yZXNpemUpXG4gXHRcdFx0QVNTRVJUX1RSVUUodm1hX3N0YXJ0ID09IHNlbGYtXHUwMDNlbGFzdF9saW5lLnN0YXJ0X2FkZHIgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgICAgKHZtYV9lbmQgLSB2bWFfc3RhcnQgPT0gc2VsZi1cdTAwM2VwYWdlX3NpemUgKiAzIHx8XG4gXHRcdFx0XHQgICAgIHZtYV9lbmQgLSB2bWFfc3RhcnQgPT0gc2VsZi1cdTAwM2VwYWdlX3NpemUpKTtcbiYjNDM7XHRcdH0gZWxzZSB7XG4mIzQzO1x0XHRcdHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgc3RhdHM7XG4mIzQzO1xuJiM0MztcdFx0XHRBU1NFUlRfVFJVRShwYXJzZV9zbWFwc19yb2xsdXAoc2VsZiwgXHUwMDI2c3RhdHMpKTtcbiYjNDM7XHRcdFx0QVNTRVJUX1RSVUUoY29tcGFyZV9zbWFwc19yb2xsdXAoc2VsZiwgXHUwMDI2b3JpZ19zdGF0cywgXHUwMDI2c3RhdHMpKTtcbiBcdFx0fVxuIFx0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQ19DT0FSU0UsIFx1MDAyNmVuZF90cyk7XG4gXHRcdGVuZF90ZXN0X2l0ZXJhdGlvbihcdTAwMjZlbmRfdHMsIHNlbGYtXHUwMDNldmVyYm9zZSk7XG5AQCAtODk4LDYgJiM0MzsxMDY3LDcgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3JlbWFwKVxuIFx0c3RydWN0IGxpbmVfY29udGVudCByZW1hcHBlZF9maXJzdF9saW5lO1xuIFx0c3RydWN0IGxpbmVfY29udGVudCByZXN0b3JlZF9sYXN0X2xpbmU7XG4gXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2ZpcnN0X2xpbmU7XG4mIzQzO1x0c3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyBvcmlnX3N0YXRzO1xuIFxuIFx0d2FpdF9mb3Jfc3RhdGUobW9kX2luZm8sIFNFVFVQX1JFQURZKTtcbiBcbkBAIC05MTEsNiAmIzQzOzEwODEsOCBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fcmVtYXApXG4gXHRyZXBvcnRfdGVzdF9zdGFydChcJiMzNDtUZWFyaW5nIGZyb20gcmVtYXBcJiMzNDssIHNlbGYtXHUwMDNldmVyYm9zZSk7XG4gXHRBU1NFUlRfVFJVRShjYXB0dXJlX21vZF9wYXR0ZXJuKHNlbGYsIFx1MDAyNnJlbWFwcGVkX2xhc3RfbGluZSwgXHUwMDI2cmVtYXBwZWRfZmlyc3RfbGluZSxcbiBcdFx0XHRcdFx0XHUwMDI2cmVzdG9yZWRfbGFzdF9saW5lLCBcdTAwMjZyZXN0b3JlZF9maXJzdF9saW5lKSk7XG4mIzQzO1x0aWYgKHNlbGYtXHUwMDNlbWFwc19maWxlID09IFNNQVBTKVxuJiM0MztcdFx0QVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsIFx1MDAyNm9yaWdfc3RhdHMpKTtcbiBcbiBcdC8qIE5vdyBzdGFydCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZm9yIHNlbGYtXHUwMDNlZHVyYXRpb25fc2VjICovXG4gXHRzaWduYWxfc3RhdGUobW9kX2luZm8sIFRFU1RfUkVBRFkpO1xuQEAgLTk2Myw2ICYjNDM7MTEzNSwxMSBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fcmVtYXApXG4gXHRcdFx0XHQgICAgIHZtYV9lbmQgLSB2bWFfc3RhcnQgPT0gc2VsZi1cdTAwM2VwYWdlX3NpemUgKiAzKSB8fFxuIFx0XHRcdFx0ICAgICh2bWFfc3RhcnQgPT0gc2VsZi1cdTAwM2VsYXN0X2xpbmUuc3RhcnRfYWRkciAmIzQzOyBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgICAgdm1hX2VuZCAtIHZtYV9zdGFydCA9PSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSkpO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0c3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyBzdGF0cztcbiYjNDM7XG4mIzQzO1x0XHRcdEFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCBcdTAwMjZzdGF0cykpO1xuJiM0MztcdFx0XHRBU1NFUlRfVFJVRShjb21wYXJlX3NtYXBzX3JvbGx1cChzZWxmLCBcdTAwMjZvcmlnX3N0YXRzLCBcdTAwMjZzdGF0cykpO1xuIFx0XHR9XG4gXHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDX0NPQVJTRSwgXHUwMDI2ZW5kX3RzKTtcbiBcdFx0ZW5kX3Rlc3RfaXRlcmF0aW9uKFx1MDAyNmVuZF90cywgc2VsZi1cdTAwM2V2ZXJib3NlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOTozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUk9DX0ZTJiMzNDssCiAgICAmIzM0O1BST0NfUEFHRV9NT05JVE9SJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2hvd19zbWFwc19yb2xsdXAmIzM0OywKICAgICYjMzQ7c21hcF9nYXRoZXJfc3RhdHMmIzM0OywKICAgICYjMzQ7c2hvd19zbWFwJiMzNDssCiAgICAmIzM0O2RvX3Byb2NtYXBfcXVlcnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3NtYXBzX3JvbGx1cCBhbmQgc21hcHMgaXRlcmF0aW9uIGxvZ2ljIGluIHRhc2tfbW11LmMgdG8gdXNlIHBlci1WTUEgbG9ja3MgdW5kZXIgUkNVIGluc3RlYWQgb2YgYWNxdWlyaW5nIG1tYXBfbG9jayB1cGZyb250LCBhZGp1c3RzIHBhcnRpYWwgVk1BIHN0YXQgZ2F0aGVyaW5nIGluIHNtYXBfZ2F0aGVyX3N0YXRzKCksIGFuZCBzaW1wbGlmaWVzIHByb2NfbWFwcyBsb2NraW5nIGhlbHBlcnMuIFRoaXMgcmVhY2hhYmxlIGNvcmUgTU0vcHJvY2ZzIGxvZ2ljIGlzIHdvcnRoIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGlzc3Vlcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI1NWE3YWNiYTdiOGJmMWI3NDg3ZmIxNTkwNzYwMDYwZTQ3ODkwYjQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDA5OjM4OjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jCmluZGV4IGU2NzFiNGZkOGRlZGQuLjY0MWExNTViMGM2MTMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvdGFza19tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jL3Rhc2tfbW11LmMKQEAgLTEzMCwyOCAmIzQzOzEzMCwxMiBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX3Rhc2tfbWVtcG9saWN5KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdikKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIGludCBsb2NrX2N0eF9tbShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKLXsKLQlpbnQgcmV0ID0gbW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobG9ja19jdHgtJmd0O21tKTsKLQotCWlmICghcmV0KQotCQlsb2NrX2N0eC0mZ3Q7bW1hcF9sb2NrZWQgPSB0cnVlOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpCiYjNDM7c3RhdGljIHZvaWQgdW5sb2NrX2N0eF9tbShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKIHsKIAltbWFwX3JlYWRfdW5sb2NrKGxvY2tfY3R4LSZndDttbSk7CiAJbG9ja19jdHgtJmd0O21tYXBfbG9ja2VkID0gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIHJlc2V0X2xvY2tfY3R4KHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KQotewotCWxvY2tfY3R4LSZndDtsb2NrZWRfdm1hID0gTlVMTDsKLQlsb2NrX2N0eC0mZ3Q7bW1hcF9sb2NrZWQgPSBmYWxzZTsKLX0KLQogc3RhdGljIHZvaWQgdW5sb2NrX2N0eF92bWEoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpCiB7CiAJaWYgKGxvY2tfY3R4LSZndDtsb2NrZWRfdm1hKSB7CkBAIC0xNjAsMjMgJiM0MzsxNDQsMTAgQEAgc3RhdGljIHZvaWQgdW5sb2NrX2N0eF92bWEoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpCiAJfQogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgbG9ja192bWFfcmFuZ2Uoc3RydWN0IHNlcV9maWxlICptLAotCQkJCSAgc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpCi17Ci0JcmN1X3JlYWRfbG9jaygpOwotCXJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTsKLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX3ZtYV9yYW5nZShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKJiM0MztzdGF0aWMgdm9pZCByZXNldF9sb2NrX2N0eChzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKIHsKLQlpZiAobG9ja19jdHgtJmd0O21tYXBfbG9ja2VkKSB7Ci0JCXVubG9ja19jdHhfbW0obG9ja19jdHgpOwotCX0gZWxzZSB7Ci0JCXVubG9ja19jdHhfdm1hKGxvY2tfY3R4KTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JfQomIzQzOwlsb2NrX2N0eC0mZ3Q7bG9ja2VkX3ZtYSA9IE5VTEw7CiYjNDM7CWxvY2tfY3R4LSZndDttbWFwX2xvY2tlZCA9IGZhbHNlOwogfQogCiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnZXRfbmV4dF92bWEoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LApAQCAtMTk2LDcgJiM0MzsxNjcsNyBAQCBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnZXRfbmV4dF92bWEoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LAogCXJldHVybiB2bWE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBmYWxsYmFja190b19tbWFwX2xvY2soc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LAomIzQzO3N0YXRpYyBib29sIGZhbGxiYWNrX3RvX21tYXBfbG9jayhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsCiAJCQkJCSBsb2ZmX3QgcG9zKQogewogCXN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4ID0gJmFtcDtwcml2LSZndDtsb2NrX2N0eDsKQEAgLTIxMyw3ICYjNDM7MTg0LDcgQEAgc3RhdGljIGlubGluZSBib29sIGZhbGxiYWNrX3RvX21tYXBfbG9jayhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkcm9wX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiYjNDM7c3RhdGljIHZvaWQgZHJvcF9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KQogewogCWlmIChwcml2LSZndDtsb2NrX2N0eC5tbWFwX2xvY2tlZCkKIAkJcmV0dXJuOwpAQCAtMjIxLDcgJiM0MzsxOTIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHJvcF9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KQogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhY3F1aXJlX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiYjNDM7c3RhdGljIHZvaWQgcmVhY3F1aXJlX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiB7CiAJaWYgKHByaXYtJmd0O2xvY2tfY3R4Lm1tYXBfbG9ja2VkKQogCQlyZXR1cm47CkBAIC0yODYsMTMgJiM0MzsyNTcsOCBAQCBzdGF0aWMgdm9pZCAqbV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcHBvcykKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKCFsb2NrX3ZtYV9yYW5nZShtLCBsb2NrX2N0eCkpIHsKLQkJbW1wdXQobW0pOwotCQlwdXRfdGFza19zdHJ1Y3QocHJpdi0mZ3Q7dGFzayk7Ci0JCXByaXYtJmd0O3Rhc2sgPSBOVUxMOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVFIpOwotCX0KLQomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTsKIAkvKgogCSAqIFJlc2V0IGN1cnJlbnQgcG9zaXRpb24gaWYgbGFzdF9hZGRyIHdhcyBzZXQgYmVmb3JlCiAJICogYW5kIGl0JiMzOTtzIG5vdCBhIHNlbnRpbmVsLgpAQCAtMzI1LDcgJiM0MzsyOTEsMTIgQEAgc3RhdGljIHZvaWQgbV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIAkJcmV0dXJuOwogCiAJcmVsZWFzZV90YXNrX21lbXBvbGljeShwcml2KTsKLQl1bmxvY2tfdm1hX3JhbmdlKCZhbXA7cHJpdi0mZ3Q7bG9ja19jdHgpOwomIzQzOwlpZiAocHJpdi0mZ3Q7bG9ja19jdHgubW1hcF9sb2NrZWQpIHsKJiM0MzsJCXVubG9ja19jdHhfbW0oJmFtcDtwcml2LSZndDtsb2NrX2N0eCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl1bmxvY2tfY3R4X3ZtYSgmYW1wO3ByaXYtJmd0O2xvY2tfY3R4KTsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwl9CiAJbW1wdXQobW0pOwogCXB1dF90YXNrX3N0cnVjdChwcml2LSZndDt0YXNrKTsKIAlwcml2LSZndDt0YXNrID0gTlVMTDsKQEAgLTUxOCwyMSAmIzQzOzQ4OSw2IEBAIHN0YXRpYyBpbnQgcGlkX21hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAkJUFJPQ01BUF9RVUVSWV9WTUFfRkxBR1MJCQkJXAogKQogCi1zdGF0aWMgaW50IHF1ZXJ5X3ZtYV9zZXR1cChzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKLXsKLQlyZXNldF9sb2NrX2N0eChsb2NrX2N0eCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcXVlcnlfdm1hX3RlYXJkb3duKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KQotewotCWlmIChsb2NrX2N0eC0mZ3Q7bW1hcF9sb2NrZWQpCi0JCXVubG9ja19jdHhfbW0obG9ja19jdHgpOwotCWVsc2UKLQkJdW5sb2NrX2N0eF92bWEobG9ja19jdHgpOwotfQotCiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpxdWVyeV92bWFfZmluZF9ieV9hZGRyKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4LAogCQkJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CkBAIC02NTMsMTIgJiM0Mzs2MDksNyBAQCBzdGF0aWMgaW50IGRvX3Byb2NtYXBfcXVlcnkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHZvaWQgX191c2VyICp1YXJnKQogCWlmICghbW0gfHwgIW1tZ2V0X25vdF96ZXJvKG1tKSkKIAkJcmV0dXJuIC1FU1JDSDsKIAotCWVyciA9IHF1ZXJ5X3ZtYV9zZXR1cCgmYW1wO2xvY2tfY3R4KTsKLQlpZiAoZXJyKSB7Ci0JCW1tcHV0KG1tKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KJiM0MzsJcmVzZXRfbG9ja19jdHgoJmFtcDtsb2NrX2N0eCk7CiAJdm1hID0gcXVlcnlfbWF0Y2hpbmdfdm1hKCZhbXA7bG9ja19jdHgsIGthcmcucXVlcnlfYWRkciwga2FyZy5xdWVyeV9mbGFncyk7CiAJaWYgKElTX0VSUih2bWEpKSB7CiAJCWVyciA9IFBUUl9FUlIodm1hKTsKQEAgLTczMiw3ICYjNDM7NjgzLDEwIEBAIHN0YXRpYyBpbnQgZG9fcHJvY21hcF9xdWVyeShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdm9pZCBfX3VzZXIgKnVhcmcpCiAJCXZtX2ZpbGUgPSBnZXRfZmlsZSh2bWEtJmd0O3ZtX2ZpbGUpOwogCiAJLyogdW5sb2NrIHZtYSBvciBtbWFwX2xvY2ssIGFuZCBwdXQgbW1fc3RydWN0IGJlZm9yZSBjb3B5aW5nIGRhdGEgdG8gdXNlciAqLwotCXF1ZXJ5X3ZtYV90ZWFyZG93bigmYW1wO2xvY2tfY3R4KTsKJiM0MzsJaWYgKGxvY2tfY3R4Lm1tYXBfbG9ja2VkKQomIzQzOwkJdW5sb2NrX2N0eF9tbSgmYW1wO2xvY2tfY3R4KTsKJiM0MzsJZWxzZQomIzQzOwkJdW5sb2NrX2N0eF92bWEoJmFtcDtsb2NrX2N0eCk7CiAJbW1wdXQobW0pOwogCiAJaWYgKGthcmcuYnVpbGRfaWRfc2l6ZSkgewpAQCAtNzczLDcgJiM0Mzs3MjcsMTAgQEAgc3RhdGljIGludCBkb19wcm9jbWFwX3F1ZXJ5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB2b2lkIF9fdXNlciAqdWFyZykKIAlyZXR1cm4gMDsKIAogb3V0OgotCXF1ZXJ5X3ZtYV90ZWFyZG93bigmYW1wO2xvY2tfY3R4KTsKJiM0MzsJaWYgKGxvY2tfY3R4Lm1tYXBfbG9ja2VkKQomIzQzOwkJdW5sb2NrX2N0eF9tbSgmYW1wO2xvY2tfY3R4KTsKJiM0MzsJZWxzZQomIzQzOwkJdW5sb2NrX2N0eF92bWEoJmFtcDtsb2NrX2N0eCk7CiAJbW1wdXQobW0pOwogb3V0X2ZpbGU6CiAJaWYgKHZtX2ZpbGUpCkBAIC0xMjYzLDcgJiM0MzsxMjIwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBzbWFwc19zaG1lbV93YWxrX3ZtYV9sb2NrX29wcyA9IHsKIAkud2Fsa19sb2NrCQk9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSwKIH07CiAKLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICoKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICoKIGdldF9zbWFwc193YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiB7CiAJaWYgKHByaXYtJmd0O2xvY2tfY3R4Lm1tYXBfbG9ja2VkKQpAQCAtMTI3MSw3ICYjNDM7MTIyOCw3IEBAIGdldF9zbWFwc193YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiAJcmV0dXJuICZhbXA7c21hcHNfd2Fsa192bWFfbG9ja19vcHM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICoKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICoKIGdldF9zbWFwc19zaG1lbV93YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiB7CiAJaWYgKHByaXYtJmd0O2xvY2tfY3R4Lm1tYXBfbG9ja2VkKQpAQCAtMTI3OSwyMCAmIzQzOzEyMzYsMjcgQEAgZ2V0X3NtYXBzX3NobWVtX3dhbGtfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdikKIAlyZXR1cm4gJmFtcDtzbWFwc19zaG1lbV93YWxrX3ZtYV9sb2NrX29wczsKIH0KIAotLyoKLSAqIEdhdGhlciBtZW0gc3RhdHMgZnJvbSBAdm1hIHdpdGggdGhlIGluZGljYXRlZCBiZWdpbm5pbmcKLSAqIGFkZHJlc3MgQHN0YXJ0LCBhbmQga2VlcCB0aGVtIGluIEBtc3MuCiYjNDM7LyoqCiYjNDM7ICogc21hcF9nYXRoZXJfc3RhdHMoKSAtIEdhdGhlciBtZW0gc3RhdHMgZnJvbSBAdm1hLgomIzQzOyAqIEBwcml2OiBwcm9jIG1hcHMgcHJpdmF0ZSBzdGF0ZS4KJiM0MzsgKiBAdm1hOiBUaGUgVk1BIHRvIGdhdGhlciBzdGF0cyBmb3IuCiYjNDM7ICogQG1zczogVGhlIGFjY3VtdWxhdGVkIHN0YXRzLgomIzQzOyAqIEBzdGFydDogVGhlIGFkZHJlc3MgZnJvbSB3aGljaCB0byBzdGFydC4KICAqCi0gKiBVc2Ugdm1fc3RhcnQgb2YgQHZtYSBhcyB0aGUgYmVnaW5uaW5nIGFkZHJlc3MgaWYgQHN0YXJ0IGlzIDAuCiYjNDM7ICogVGhpcyBnYXRoZXJzIHN0YXRzIGZvciB0aGUgd2hvbGUgb2YgdGhlIFZNQSB1bmxlc3MgdGhlIGxvY2sgd2FzIGRyb3BwZWQKJiM0MzsgKiBhbmQgVk1BIGdyZXcgb3IgZ290IG1lcmdlZCBhbmQgd2UgZm91bmQgaXQgYWdhaW4sIGluIHdoaWNoIGNhc2Ugd2Ugb25seQomIzQzOyAqIGdhdGhlciBzdGF0cyBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgVk1BIHJhbmdlLgogICovCiBzdGF0aWMgdm9pZCBzbWFwX2dhdGhlcl9zdGF0cyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsCiAJCQkgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCSAgICAgIHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyAqbXNzLCB1bnNpZ25lZCBsb25nIHN0YXJ0KQomIzQzOwkJCSAgICAgIHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyAqbXNzLAomIzQzOwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQpCiB7CiAJY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMgPSBnZXRfc21hcHNfd2Fsa19vcHMocHJpdik7CiYjNDM7CWNvbnN0IGJvb2wgaXNfcGFydGlhbCA9IHN0YXJ0ICZndDsgdm1hLSZndDt2bV9zdGFydDsKIAogCS8qIEludmFsaWQgc3RhcnQgKi8KLQlpZiAoc3RhcnQgJmd0Oz0gdm1hLSZndDt2bV9lbmQpCiYjNDM7CWlmIChzdGFydCAmbHQ7IHZtYS0mZ3Q7dm1fc3RhcnQgfHwgc3RhcnQgJmd0Oz0gdm1hLSZndDt2bV9lbmQpCiAJCXJldHVybjsKIAogCWlmICh2bWEgPT0gZ2V0X2dhdGVfdm1hKHByaXYtJmd0O2xvY2tfY3R4Lm1tKSkKQEAgLTEzMTIsMjAgJiM0MzsxMjc2LDE3IEBAIHN0YXRpYyB2b2lkIHNtYXBfZ2F0aGVyX3N0YXRzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiwKIAkJICogVW5sZXNzIHdlIGtub3cgdGhhdCB0aGUgc2htZW0gb2JqZWN0IChvciB0aGUgcGFydCBtYXBwZWQgYnkKIAkJICogb3VyIFZNQSkgaGFzIG5vIHN3YXBwZWQgb3V0IHBhZ2VzIGF0IGFsbC4KIAkJICovCi0JCXVuc2lnbmVkIGxvbmcgc2htZW1fc3dhcHBlZCA9IHNobWVtX3N3YXBfdXNhZ2Uodm1hKTsKJiM0MzsJCWNvbnN0IHVuc2lnbmVkIGxvbmcgc2htZW1fc3dhcHBlZCA9IHNobWVtX3N3YXBfdXNhZ2Uodm1hKTsKJiM0MzsJCWNvbnN0IGJvb2wgc2hhcmVkX29yX3JvID0gdm1hX3Rlc3Qodm1hLCBWTUFfU0hBUkVEX0JJVCkgfHwKJiM0MzsJCQkJCSAgIXZtYV90ZXN0KHZtYSwgVk1BX1dSSVRFX0JJVCk7CiAKLQkJaWYgKCFzdGFydCAmYW1wOyZhbXA7ICghc2htZW1fc3dhcHBlZCB8fCAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9TSEFSRUQpIHx8Ci0JCQkJCSEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9XUklURSkpKSB7CiYjNDM7CQlpZiAoIWlzX3BhcnRpYWwgJmFtcDsmYW1wOyAoIXNobWVtX3N3YXBwZWQgfHwgc2hhcmVkX29yX3JvKSkKIAkJCW1zcy0mZ3Q7c3dhcCAmIzQzOz0gc2htZW1fc3dhcHBlZDsKLQkJfSBlbHNlIHsKJiM0MzsJCWVsc2UKIAkJCW9wcyA9IGdldF9zbWFwc19zaG1lbV93YWxrX29wcyhwcml2KTsKLQkJfQogCX0KIAotCWlmICghc3RhcnQpCi0JCXdhbGtfcGFnZV92bWEodm1hLCBvcHMsIG1zcyk7Ci0JZWxzZQotCQl3YWxrX3BhZ2VfcmFuZ2Uodm1hLSZndDt2bV9tbSwgc3RhcnQsIHZtYS0mZ3Q7dm1fZW5kLCBvcHMsIG1zcyk7CiYjNDM7CXdhbGtfcGFnZV9yYW5nZV92bWEodm1hLCBzdGFydCwgdm1hLSZndDt2bV9lbmQsIG9wcywgbXNzKTsKIAogCXJlYWNxdWlyZV9yY3UocHJpdik7CiB9CkBAIC0xMzgwLDcgJiM0MzsxMzQxLDcgQEAgc3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdjsKIAlzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgbXNzID0ge307CiAKLQlzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsICZhbXA7bXNzLCAwKTsKJiM0MzsJc21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCAmYW1wO21zcywgdm1hLSZndDt2bV9zdGFydCk7CiAKIAlzaG93X21hcF92bWEobSwgdm1hKTsKIApAQCAtMTQwNSwxMiAmIzQzOzEzNjYsMTQgQEAgc3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogc3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2ID0gbS0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHggPSAmYW1wO3ByaXYtJmd0O2xvY2tfY3R4OwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGxvY2tfY3R4LSZndDttbTsKIAlzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgbXNzID0ge307Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LSZndDtsb2NrX2N0eC5tbTsKJiM0MzsJdW5zaWduZWQgbG9uZyBsYXN0X3ZtYV9lbmQgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIHZtYV9zdGFydCA9IDA7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0JdW5zaWduZWQgbG9uZyB2bWFfc3RhcnQgPSAwLCBsYXN0X3ZtYV9lbmQgPSAwOwomIzQzOwlsb2ZmX3QgcG9zID0gMDsKIAlpbnQgcmV0ID0gMDsKLQlWTUFfSVRFUkFUT1Iodm1pLCBtbSwgMCk7CiAKIAlwcml2LSZndDt0YXNrID0gZ2V0X3Byb2NfdGFzayhwcml2LSZndDtpbm9kZSk7CiAJaWYgKCFwcml2LSZndDt0YXNrKQpAQCAtMTQyMSw4OSAmIzQzOzEzODQsNjAgQEAgc3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiAJCWdvdG8gb3V0X3B1dF90YXNrOwogCX0KIAotCXJldCA9IGxvY2tfY3R4X21tKCZhbXA7cHJpdi0mZ3Q7bG9ja19jdHgpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X3B1dF9tbTsKLQogCWhvbGRfdGFza19tZW1wb2xpY3kocHJpdik7Ci0Jdm1hID0gdm1hX25leHQoJmFtcDt2bWkpOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTsKIAomIzQzOwl2bWFfaXRlcl9pbml0KCZhbXA7cHJpdi0mZ3Q7aXRlciwgbW0sIDApOwomIzQzOwl2bWEgPSBwcm9jX2dldF92bWEobSwgJmFtcDtwb3MpOwogCWlmICh1bmxpa2VseSghdm1hKSkKIAkJZ290byBlbXB0eV9zZXQ7CiAKLQl2bWFfc3RhcnQgPSB2bWEtJmd0O3ZtX3N0YXJ0OwotCWRvIHsKLQkJc21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCAmYW1wO21zcywgMCk7Ci0JCWxhc3Rfdm1hX2VuZCA9IHZtYS0mZ3Q7dm1fZW5kOwomIzQzOwlpZiAoIUlTX0VSUih2bWEpICZhbXA7JmFtcDsgdm1hICE9IGdldF9nYXRlX3ZtYShsb2NrX2N0eC0mZ3Q7bW0pKQomIzQzOwkJdm1hX3N0YXJ0ID0gdm1hLSZndDt2bV9zdGFydDsKJiM0MzsKJiM0MzsJd2hpbGUgKHZtYSkgewomIzQzOwkJaWYgKElTX0VSUih2bWEpKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUih2bWEpOwomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICh2bWEgPT0gZ2V0X2dhdGVfdm1hKGxvY2tfY3R4LSZndDttbSkpCiYjNDM7CQkJYnJlYWs7CiAKIAkJLyoKLQkJICogUmVsZWFzZSBtbWFwX2xvY2sgdGVtcG9yYXJpbHkgaWYgc29tZW9uZSB3YW50cyB0bwotCQkgKiBhY2Nlc3MgaXQgZm9yIHdyaXRlIHJlcXVlc3QuCiYjNDM7CQkgKiBJZiBhZnRlciByZXRha2luZyB0aGUgbG9jaywgYWxyZWFkeSByZXBvcnRlZCBWTUEgZ3JldyBvcgomIzQzOwkJICogbWVyZ2VkIHdpdGggdGhlIG5leHQgb25lLCBzbWFwX2dhdGhlcl9zdGF0cygpIHdpbGwgZ2F0aGVyCiYjNDM7CQkgKiBzdGF0cyBmb3IgdGhlIHJlbWFpbmluZyBwb3J0aW9uIGJ5IHN0YXJ0aW5nIGF0IGxhc3Rfdm1hX2VuZC4KIAkJICovCi0JCWlmIChtbWFwX2xvY2tfaXNfY29udGVuZGVkKG1tKSkgewotCQkJdm1hX2l0ZXJfaW52YWxpZGF0ZSgmYW1wO3ZtaSk7Ci0JCQl1bmxvY2tfY3R4X21tKCZhbXA7cHJpdi0mZ3Q7bG9ja19jdHgpOwotCQkJcmV0ID0gbG9ja19jdHhfbW0oJmFtcDtwcml2LSZndDtsb2NrX2N0eCk7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJcmVsZWFzZV90YXNrX21lbXBvbGljeShwcml2KTsKLQkJCQlnb3RvIG91dF9wdXRfbW07Ci0JCQl9CiYjNDM7CQlzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsICZhbXA7bXNzLCBsYXN0X3ZtYV9lbmQpOwomIzQzOwkJbGFzdF92bWFfZW5kID0gdm1hLSZndDt2bV9lbmQ7CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBJZiB0aGUgVk1BIGxvY2sgaXMgbm90IHRha2VuLCB3ZSBob2xkIHRoZSBvZnRlbiBjb250ZW5kZWQKJiM0MzsJCSAqIG1tYXAgbG9jay4gVGhpcyBjYW4gaGFwcGVuIGlmIHdlIGhhZCB0byBmYWxsIGJhY2sgdG8gdGhlCiYjNDM7CQkgKiBtbWFwIGxvY2suCiYjNDM7CQkgKgomIzQzOwkJICogVG8gcmVsaWV2ZSBwcmVzc3VyZSwgY2hlY2sgaWYgaXQgaXMgaW5kZWVkIGNvbnRlbmRlZCwgdGhlbgomIzQzOwkJICogdGVtcG9yYXJpbHkgcmVsZWFzZSBpdC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGxvY2tfY3R4LSZndDttbWFwX2xvY2tlZCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbW1hcF9sb2NrX2lzX2NvbnRlbmRlZChsb2NrX2N0eC0mZ3Q7bW0pKSB7CiYjNDM7CQkJdW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7CiAJCQkvKgotCQkJICogQWZ0ZXIgZHJvcHBpbmcgdGhlIGxvY2ssIHRoZXJlIGFyZSBmb3VyIGNhc2VzIHRvCi0JCQkgKiBjb25zaWRlci4gU2VlIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSBmb3IgZXhwbGFuYXRpb24uCi0JCQkgKgotCQkJICogICAmIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7Ci0JCQkgKiAgIHwgVk1BMSB8IFZNQTIgfCBWTUEzICAgICAgfAotCQkJICogICAmIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7Ci0JCQkgKiAgIHwgICAgICB8ICAgICAgfCAgICAgICAgICAgfAotCQkJICogIDRrICAgICA4ayAgICAgMTZrICAgICAgICAgNDAwawotCQkJICoKLQkJCSAqIFN1cHBvc2Ugd2UgZHJvcCB0aGUgbG9jayBhZnRlciByZWFkaW5nIFZNQTIgZHVlIHRvCi0JCQkgKiBjb250ZW50aW9uLCB0aGVuIHdlIGdldDoKLQkJCSAqCi0JCQkgKglsYXN0X3ZtYV9lbmQgPSAxNmsKLQkJCSAqCi0JCQkgKiAxKSBWTUEyIGlzIGZyZWVkLCBidXQgVk1BMyBleGlzdHM6Ci0JCQkgKgotCQkJICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBWTUEzLgotCQkJICogICAgSW4gdGhpcyBjYXNlLCBqdXN0IGNvbnRpbnVlIGZyb20gVk1BMy4KLQkJCSAqCi0JCQkgKiAyKSBWTUEyIHN0aWxsIGV4aXN0czoKLQkJCSAqCi0JCQkgKiAgICB2bWFfbmV4dCh2bWkpIHdpbGwgcmV0dXJuIFZNQTMuCi0JCQkgKiAgICBJbiB0aGlzIGNhc2UsIGp1c3QgY29udGludWUgZnJvbSBWTUEzLgotCQkJICoKLQkJCSAqIDMpIE5vIG1vcmUgVk1BcyBjYW4gYmUgZm91bmQ6Ci0JCQkgKgotCQkJICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBOVUxMLgotCQkJICogICAgTm8gbW9yZSB0aGluZ3MgdG8gZG8sIGp1c3QgYnJlYWsuCi0JCQkgKgotCQkJICogNCkgKGxhc3Rfdm1hX2VuZCAtIDEpIGlzIHRoZSBtaWRkbGUgb2YgYSB2bWEgKFZNQSYjMzk7KToKLQkJCSAqCi0JCQkgKiAgICB2bWFfbmV4dCh2bWkpIHdpbGwgcmV0dXJuIFZNQSYjMzk7IHdob3NlIHJhbmdlCi0JCQkgKiAgICBjb250YWlucyBsYXN0X3ZtYV9lbmQuCi0JCQkgKiAgICBJdGVyYXRlIFZNQSYjMzk7IGZyb20gbGFzdF92bWFfZW5kLgomIzQzOwkJCSAqIEV2ZW4gdGhvdWdoIHdlIHByZXZpb3VzbHkgZmVsbCBiYWNrIHRvIG1tYXAgbG9jaywKJiM0MzsJCQkgKiB3ZSB0cnkgdGFraW5nIFZNQSBsb2NrIGZvciB0aGUgbmV4dCBWTUEsIHNpbmNlIGl0CiYjNDM7CQkJICogbWlnaHQgbm90IGJlIHVuZGVyIG1vZGlmaWNhdGlvbi4gSW4gdGhlIHdvcnN0IGNhc2UKJiM0MzsJCQkgKiB3ZSB3aWxsIGZhbGwgYmFjayB0byBtbWFwIGxvY2sgYWdhaW4uCiAJCQkgKi8KLQkJCXZtYSA9IHZtYV9uZXh0KCZhbXA7dm1pKTsKLQkJCS8qIENhc2UgMyBhYm92ZSAqLwotCQkJaWYgKCF2bWEpCi0JCQkJYnJlYWs7Ci0KLQkJCS8qIENhc2UgMSBhbmQgMiBhYm92ZSAqLwotCQkJaWYgKHZtYS0mZ3Q7dm1fc3RhcnQgJmd0Oz0gbGFzdF92bWFfZW5kKSB7Ci0JCQkJc21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCAmYW1wO21zcywgMCk7Ci0JCQkJbGFzdF92bWFfZW5kID0gdm1hLSZndDt2bV9lbmQ7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qIENhc2UgNCBhYm92ZSAqLwotCQkJaWYgKHZtYS0mZ3Q7dm1fZW5kICZndDsgbGFzdF92bWFfZW5kKSB7Ci0JCQkJc21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCAmYW1wO21zcywgbGFzdF92bWFfZW5kKTsKLQkJCQlsYXN0X3ZtYV9lbmQgPSB2bWEtJmd0O3ZtX2VuZDsKLQkJCX0KJiM0MzsJCQlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CQkJcmVzZXRfbG9ja19jdHgobG9ja19jdHgpOwomIzQzOwkJCS8qIFJlc3VtZSBmcm9tIHRoZSBsYXN0IHBvc2l0aW9uLiAqLwomIzQzOwkJCXBvcyA9IGxhc3Rfdm1hX2VuZDsKJiM0MzsJCQl2bWFfaXRlcl9pbml0KCZhbXA7cHJpdi0mZ3Q7aXRlciwgbW0sIHBvcyk7CiAJCX0KLQl9IGZvcl9lYWNoX3ZtYSh2bWksIHZtYSk7CiYjNDM7CQl2bWEgPSBwcm9jX2dldF92bWEobSwgJmFtcDtwb3MpOwomIzQzOwl9CiAKIGVtcHR5X3NldDoKIAlzaG93X3ZtYV9oZWFkZXJfcHJlZml4KG0sIHZtYV9zdGFydCwgbGFzdF92bWFfZW5kLCAwLCAwLCAwLCAwKTsKQEAgLTE1MTIsMTAgJiM0MzsxNDQ2LDE0IEBAIHN0YXRpYyBpbnQgc2hvd19zbWFwc19yb2xsdXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogCiAJX19zaG93X3NtYXAobSwgJmFtcDttc3MsIHRydWUpOwogCiYjNDM7b3V0X3VubG9jazoKJiM0MzsJaWYgKGxvY2tfY3R4LSZndDttbWFwX2xvY2tlZCkgewomIzQzOwkJdW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl1bmxvY2tfY3R4X3ZtYShsb2NrX2N0eCk7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJfQogCXJlbGVhc2VfdGFza19tZW1wb2xpY3kocHJpdik7Ci0JdW5sb2NrX2N0eF9tbSgmYW1wO3ByaXYtJmd0O2xvY2tfY3R4KTsKLQotb3V0X3B1dF9tbToKIAltbXB1dChtbSk7CiBvdXRfcHV0X3Rhc2s6CiAJcHV0X3Rhc2tfc3RydWN0KHByaXYtJmd0O3Rhc2spOwpAQCAtMTYwNSw3ICYjNDM7MTU0Myw3IEBAIHN0cnVjdCBjbGVhcl9yZWZzX3ByaXZhdGUgewogCWVudW0gY2xlYXJfcmVmc190eXBlcyB0eXBlOwogfTsKIAotc3RhdGljIGlubGluZSBib29sIHB0ZV9pc19waW5uZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKQomIzQzO3N0YXRpYyBib29sIHB0ZV9pc19waW5uZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKQogewogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAKQEAgLTE2MjEsOCAmIzQzOzE1NTksOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHRlX2lzX3Bpbm5lZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCXJldHVybiBmb2xpb19tYXliZV9kbWFfcGlubmVkKGZvbGlvKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZSkKJiM0MztzdGF0aWMgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJICAgICBwdGVfdCAqcHRlKQogewogCWlmICghcGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpCiAJCXJldHVybjsKQEAgLTE2NTMsOCAmIzQzOzE1OTEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKQotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHlfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQl1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKQomIzQzO3N0YXRpYyB2b2lkIGNsZWFyX3NvZnRfZGlydHlfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJCQkgdW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kcCkKIHsKIAlwbWRfdCBvbGQsIHBtZCA9ICpwbWRwOwogCkBAIC0xNjc5LDggJiM0MzsxNjE3LDggQEAgc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHlfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCX0KIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHApCiYjNDM7c3RhdGljIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQkJCSB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKQogewogfQogI2VuZGlmCkBAIC0xODc5LDcgJiM0MzsxODE3LDcgQEAgc3RydWN0IHBhZ2VtYXByZWFkIHsKIAogI2RlZmluZSBQTV9FTkRfT0ZfQlVGRkVSICAgIDEKIAotc3RhdGljIGlubGluZSBwYWdlbWFwX2VudHJ5X3QgbWFrZV9wbWUodTY0IGZyYW1lLCB1NjQgZmxhZ3MpCiYjNDM7c3RhdGljIHBhZ2VtYXBfZW50cnlfdCBtYWtlX3BtZSh1NjQgZnJhbWUsIHU2NCBmbGFncykKIHsKIAlyZXR1cm4gKHBhZ2VtYXBfZW50cnlfdCkgeyAucG1lID0gKGZyYW1lICZhbXA7IFBNX1BGUkFNRV9NQVNLKSB8IGZsYWdzIH07CiB9CkBAIC0zNDIxLDcgJiM0MzszMzU5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBzaG93X251bWFfdm1hX2xvY2tfb3BzID0gewogCS53YWxrX2xvY2sgPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksCiB9OwogCi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqCiBnZXRfc2hvd19udW1hX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiB7CiAJaWYgKHByaXYtJmd0O2xvY2tfY3R4Lm1tYXBfbG9ja2VkKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLW1hcHMtcmFjZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLW1hcHMtcmFjZS5jCmluZGV4IDQxNWVjY2I3MDQ2ODQuLjhkMDBkN2RiMWM2NTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2MtbWFwcy1yYWNlLmMKQEAgLTgwLDYgJiM0Mzs4MCw2MSBAQCBlbnVtIG1hcHNfZmlsZSB7CiAKIHN0cnVjdCB2bWFfbW9kaWZpZXJfaW5mbzsKIAomIzQzO2VudW0gc21hcHNfcm9sbHVwX3N0YXQgewomIzQzOwlSc3MsCiYjNDM7CVBzcywKJiM0MzsJUHNzX0RpcnR5LAomIzQzOwlQc3NfQW5vbiwKJiM0MzsJUHNzX0ZpbGUsCiYjNDM7CVBzc19TaG1lbSwKJiM0MzsJU2hhcmVkX0NsZWFuLAomIzQzOwlTaGFyZWRfRGlydHksCiYjNDM7CVByaXZhdGVfQ2xlYW4sCiYjNDM7CVByaXZhdGVfRGlydHksCiYjNDM7CVJlZmVyZW5jZWQsCiYjNDM7CUFub255bW91cywKJiM0MzsJS1NNLAomIzQzOwlMYXp5RnJlZSwKJiM0MzsJQW5vbkh1Z2VQYWdlcywKJiM0MzsJU2htZW1QbWRNYXBwZWQsCiYjNDM7CUZpbGVQbWRNYXBwZWQsCiYjNDM7CVNoYXJlZF9IdWdldGxiLAomIzQzOwlQcml2YXRlX0h1Z2V0bGIsCiYjNDM7CVN3YXAsCiYjNDM7CVN3YXBQc3MsCiYjNDM7CUxvY2tlZCwKJiM0MzsJUm9sbHVwRmllbGRDb3VudAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKnNtYXBzX3JvbGx1cF9zdGF0X25hbWVzW1JvbGx1cEZpZWxkQ291bnRdID0gewomIzQzOwkmIzM0O1JzcyYjMzQ7LAomIzQzOwkmIzM0O1BzcyYjMzQ7LAomIzQzOwkmIzM0O1Bzc19EaXJ0eSYjMzQ7LAomIzQzOwkmIzM0O1Bzc19Bbm9uJiMzNDssCiYjNDM7CSYjMzQ7UHNzX0ZpbGUmIzM0OywKJiM0MzsJJiMzNDtQc3NfU2htZW0mIzM0OywKJiM0MzsJJiMzNDtTaGFyZWRfQ2xlYW4mIzM0OywKJiM0MzsJJiMzNDtTaGFyZWRfRGlydHkmIzM0OywKJiM0MzsJJiMzNDtQcml2YXRlX0NsZWFuJiMzNDssCiYjNDM7CSYjMzQ7UHJpdmF0ZV9EaXJ0eSYjMzQ7LAomIzQzOwkmIzM0O1JlZmVyZW5jZWQmIzM0OywKJiM0MzsJJiMzNDtBbm9ueW1vdXMmIzM0OywKJiM0MzsJJiMzNDtLU00mIzM0OywKJiM0MzsJJiMzNDtMYXp5RnJlZSYjMzQ7LAomIzQzOwkmIzM0O0Fub25IdWdlUGFnZXMmIzM0OywKJiM0MzsJJiMzNDtTaG1lbVBtZE1hcHBlZCYjMzQ7LAomIzQzOwkmIzM0O0ZpbGVQbWRNYXBwZWQmIzM0OywKJiM0MzsJJiMzNDtTaGFyZWRfSHVnZXRsYiYjMzQ7LAomIzQzOwkmIzM0O1ByaXZhdGVfSHVnZXRsYiYjMzQ7LAomIzQzOwkmIzM0O1N3YXAmIzM0OywKJiM0MzsJJiMzNDtTd2FwUHNzJiMzNDssCiYjNDM7CSYjMzQ7TG9ja2VkJiMzNDssCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIHsKJiM0MzsJdW5zaWduZWQgbG9uZyB2YWx1ZXNbUm9sbHVwRmllbGRDb3VudF07CiYjNDM7fTsKJiM0MzsKIEZJWFRVUkUocHJvY19tYXBzX3JhY2UpCiB7CiAJc3RydWN0IHZtYV9tb2RpZmllcl9pbmZvICptb2RfaW5mbzsKQEAgLTkxLDYgJiM0MzsxNDYsNyBAQCBGSVhUVVJFKHByb2NfbWFwc19yYWNlKQogCWVudW0gbWFwc19maWxlIG1hcHNfZmlsZTsKIAlpbnQgc2hhcmVkX21lbV9zaXplOwogCWludCBza2lwX3BhZ2VzOwomIzQzOwlpbnQgcm9sbHVwX2ZkOwogCWludCBwYWdlX3NpemU7CiAJaW50IHZtYV9jb3VudDsKIAlib29sIHZlcmJvc2U7CkBAIC0xMzIsMTIgJiM0MzsxODgsMTIgQEAgc3RydWN0IHZtYV9tb2RpZmllcl9pbmZvIHsKIAl2b2lkICpjaGlsZF9tYXBwZWRfYWRkcltdOwogfTsKIAotc3RhdGljIGJvb2wgcmVhZF9wYWdlKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsCiYjNDM7c3RhdGljIGJvb2wgcmVhZF9wYWdlKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsIGludCBmZCwKIAkJICAgICAgc3RydWN0IHBhZ2VfY29udGVudCAqcGFnZSkKIHsKIAlzc2l6ZV90ICBieXRlc19yZWFkOwogCi0JYnl0ZXNfcmVhZCA9IHJlYWQoc2VsZi0mZ3Q7bWFwc19mZCwgcGFnZS0mZ3Q7ZGF0YSwgc2VsZi0mZ3Q7cGFnZV9zaXplKTsKJiM0MzsJYnl0ZXNfcmVhZCA9IHJlYWQoZmQsIHBhZ2UtJmd0O2RhdGEsIHNlbGYtJmd0O3BhZ2Vfc2l6ZSk7CiAJaWYgKGJ5dGVzX3JlYWQgJmx0Oz0gMCkKIAkJcmV0dXJuIGZhbHNlOwogCkBAIC0xNzUsNyAmIzQzOzIzMSw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX2NvbnRhaW5pbmdfcGFnZShGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmLAogCQljaGFyICpjdXJyX3BvczsKIAkJY2hhciAqZW5kX3BvczsKIAotCQlpZiAoIXJlYWRfcGFnZShzZWxmLCAmYW1wO3NlbGYtJmd0O3BhZ2UxKSkKJiM0MzsJCWlmICghcmVhZF9wYWdlKHNlbGYsIHNlbGYtJmd0O21hcHNfZmQsICZhbXA7c2VsZi0mZ3Q7cGFnZTEpKQogCQkJcmV0dXJuIC0xOwogCiAJCWN1cnJfcG9zID0gc2VsZi0mZ3Q7cGFnZTEuZGF0YTsKQEAgLTIwNSwxMCAmIzQzOzI2MSwxMSBAQCBzdGF0aWMgYm9vbCByZWFkX3R3b19wYWdlcyhGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHNlbGYtJmd0O3NraXBfcGFnZXM7IGkmIzQzOyYjNDM7KQotCQlpZiAoIXJlYWRfcGFnZShzZWxmLCAmYW1wO3NlbGYtJmd0O3BhZ2UxKSkKJiM0MzsJCWlmICghcmVhZF9wYWdlKHNlbGYsIHNlbGYtJmd0O21hcHNfZmQsICZhbXA7c2VsZi0mZ3Q7cGFnZTEpKQogCQkJcmV0dXJuIGZhbHNlOwogCi0JcmV0dXJuIHJlYWRfcGFnZShzZWxmLCAmYW1wO3NlbGYtJmd0O3BhZ2UxKSAmYW1wOyZhbXA7IHJlYWRfcGFnZShzZWxmLCAmYW1wO3NlbGYtJmd0O3BhZ2UyKTsKJiM0MzsJcmV0dXJuIHJlYWRfcGFnZShzZWxmLCBzZWxmLSZndDttYXBzX2ZkLCAmYW1wO3NlbGYtJmd0O3BhZ2UxKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICByZWFkX3BhZ2Uoc2VsZiwgc2VsZi0mZ3Q7bWFwc19mZCwgJmFtcDtzZWxmLSZndDtwYWdlMik7CiB9CiAKIHN0YXRpYyB2b2lkIGNvcHlfbGluZShjb25zdCBjaGFyICpsaW5lX3N0YXJ0LCBjb25zdCBjaGFyICpsaW5lX2VuZCwKQEAgLTMxNyw2ICYjNDM7Mzc0LDYxIEBAIHN0YXRpYyBib29sIHJlYWRfYm91bmRhcnlfbGluZXMoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZiwKIAkJICAgICAgJmFtcDtmaXJzdF9saW5lLSZndDtlbmRfYWRkcikgPT0gMjsKIH0KIAomIzQzO3N0YXRpYyBib29sIHBhcnNlX3NtYXBzX3JvbGx1cChGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmLAomIzQzOwkJCSAgICAgICBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpzdGF0cykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBkZXZfbWFqLCBkZXZfbWluLCBpbm9kZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCBvZmZzOwomIzQzOwl1bnNpZ25lZCBsb25nIHZhbHVlOwomIzQzOwljaGFyIG5hbWVbMzJdLCBwZXJtWzVdOwomIzQzOwljaGFyICpjdXJyX3BvczsKJiM0MzsJY2hhciAqZW5kX3BvczsKJiM0MzsJY2hhciAqbGluZV9lbmQ7CiYjNDM7CiYjNDM7CWlmIChsc2VlayhzZWxmLSZndDtyb2xsdXBfZmQsIDAsIFNFRUtfU0VUKSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghcmVhZF9wYWdlKHNlbGYsIHNlbGYtJmd0O3JvbGx1cF9mZCwgJmFtcDtzZWxmLSZndDtwYWdlMSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWN1cnJfcG9zID0gc2VsZi0mZ3Q7cGFnZTEuZGF0YTsKJiM0MzsJZW5kX3BvcyA9IHNlbGYtJmd0O3BhZ2UxLmRhdGEgJiM0Mzsgc2VsZi0mZ3Q7cGFnZTEuc2l6ZTsKJiM0MzsKJiM0MzsJbGluZV9lbmQgPSBzdHJjaHIoY3Vycl9wb3MsICYjMzk7XG4mIzM5Oyk7CiYjNDM7CWlmICghbGluZV9lbmQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChzc2NhbmYoY3Vycl9wb3MsICYjMzQ7JWx4LSVseCAlNHMgJWx4ICV1OiV1ICV1ICUzMXMmIzM0OywKJiM0MzsJCSZhbXA7c3RhcnQsICZhbXA7ZW5kLCBwZXJtLCAmYW1wO29mZnMsICZhbXA7ZGV2X21haiwgJmFtcDtkZXZfbWluLCAmYW1wO2lub2RlLCBuYW1lKSAhPSA4KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoc3RyY21wKG5hbWUsICYjMzQ7W3JvbGx1cF0mIzM0OykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaW50IHN0YXQgPSAwOyBzdGF0ICZsdDsgQVJSQVlfU0laRShzbWFwc19yb2xsdXBfc3RhdF9uYW1lcyk7IHN0YXQmIzQzOyYjNDM7KSB7CiYjNDM7CQlpbnQgbGVuOwomIzQzOwomIzQzOwkJY3Vycl9wb3MgPSBsaW5lX2VuZCAmIzQzOyAxOwomIzQzOwkJaWYgKGN1cnJfcG9zICZndDs9IGVuZF9wb3MpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkJbGluZV9lbmQgPSBzdHJjaHIoY3Vycl9wb3MsICYjMzk7XG4mIzM5Oyk7CiYjNDM7CQlpZiAoIWxpbmVfZW5kKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCWlmIChzc2NhbmYoY3Vycl9wb3MsICYjMzQ7JTMxcyAlbHUga0ImIzM0OywgbmFtZSwgJmFtcDt2YWx1ZSkgIT0gMikKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQlsZW4gPSBzdHJsZW4obmFtZSk7CiYjNDM7CQlpZiAobmFtZVtsZW4gLSAxXSAhPSAmIzM5OzomIzM5OyB8fCBzdHJuY21wKG5hbWUsIHNtYXBzX3JvbGx1cF9zdGF0X25hbWVzW3N0YXRdLCBsZW4gLSAxKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQlzdGF0cy0mZ3Q7dmFsdWVzW3N0YXRdID0gdmFsdWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogLyogVGhyZWFkIHN5bmNocm9uaXphdGlvbiByb3V0aW5lcyAqLwogc3RhdGljIHZvaWQgd2FpdF9mb3Jfc3RhdGUoc3RydWN0IHZtYV9tb2RpZmllcl9pbmZvICptb2RfaW5mbywgZW51bSB0ZXN0X3N0YXRlIHN0YXRlKQogewpAQCAtMzk3LDYgJiM0Mzs1MDksNDEgQEAgc3RhdGljIGJvb2wgcHJpbnRfYm91bmRhcmllc19vbihib29sIGNvbmRpdGlvbiwgY29uc3QgY2hhciAqdGl0bGUsCiAJcmV0dXJuIGNvbmRpdGlvbjsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHByaW50X3NtYXBzX3JvbGx1cF9zdGF0cyhjb25zdCBjaGFyICp0aXRsZSwgRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZiwKJiM0MzsJCQkJICAgICBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpzdGF0cykKJiM0Mzt7CiYjNDM7CXByaW50ZigmIzM0OyVzJiMzNDssIHRpdGxlKTsKJiM0MzsJZm9yIChpbnQgc3RhdCA9IDA7IHN0YXQgJmx0OyBBUlJBWV9TSVpFKHNtYXBzX3JvbGx1cF9zdGF0X25hbWVzKTsgc3RhdCYjNDM7JiM0MzspCiYjNDM7CQlwcmludGYoJiMzNDslNjRzICVsdSBrQlxuJiMzNDssIHNtYXBzX3JvbGx1cF9zdGF0X25hbWVzW3N0YXRdLCBzdGF0cy0mZ3Q7dmFsdWVzW3N0YXRdKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgY21wX3NtYXBzX3JvbGx1cF9zdGF0KHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKnMxLAomIzQzOwkJCQkgIHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKnMyLAomIzQzOwkJCQkgIGVudW0gc21hcHNfcm9sbHVwX3N0YXQgc3RhdCkKJiM0Mzt7CiYjNDM7CXJldHVybiBzMS0mZ3Q7dmFsdWVzW3N0YXRdID09IHMyLSZndDt2YWx1ZXNbc3RhdF07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGNvbXBhcmVfc21hcHNfcm9sbHVwKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsCiYjNDM7CQkJCSBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpleHBlY3RlZCwKJiM0MzsJCQkJIHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKmFjdHVhbCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIENsZWFuL2RpcnR5IG1ldHJpY3MgbWlnaHQgY2hhbmdlIGJ1dCBQc3MtcmVsYXRlZCBvbmVzCiYjNDM7CSAqIHNob3VsZCBzdGF5IGNvbnN0YW50LgomIzQzOwkgKi8KJiM0MzsJaWYgKGNtcF9zbWFwc19yb2xsdXBfc3RhdChleHBlY3RlZCwgYWN0dWFsLCBQc3MpICZhbXA7JmFtcDsKJiM0MzsJICAgIGNtcF9zbWFwc19yb2xsdXBfc3RhdChleHBlY3RlZCwgYWN0dWFsLCBQc3NfQW5vbikgJmFtcDsmYW1wOwomIzQzOwkgICAgY21wX3NtYXBzX3JvbGx1cF9zdGF0KGV4cGVjdGVkLCBhY3R1YWwsIFBzc19GaWxlKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBjbXBfc21hcHNfcm9sbHVwX3N0YXQoZXhwZWN0ZWQsIGFjdHVhbCwgUHNzX1NobWVtKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlwcmludF9zbWFwc19yb2xsdXBfc3RhdHMoJiMzNDtFeHBlY3RlZCBzdGF0czomIzM0Oywgc2VsZiwgZXhwZWN0ZWQpOwomIzQzOwlwcmludF9zbWFwc19yb2xsdXBfc3RhdHMoJiMzNDtBY3R1YWwgc3RhdHM6JiMzNDssIHNlbGYsIGFjdHVhbCk7CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCByZXBvcnRfdGVzdF9zdGFydChjb25zdCBjaGFyICpuYW1lLCBib29sIHZlcmJvc2UpCiB7CiAJaWYgKHZlcmJvc2UpCkBAIC01NzIsNiAmIzQzOzcxOSw3IEBAIEZJWFRVUkVfU0VUVVAocHJvY19tYXBzX3JhY2UpCiAJdW5zaWduZWQgbG9uZyBmaXJzdF9tYXBfYWRkcjsKIAl1bnNpZ25lZCBsb25nIGxhc3RfbWFwX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBkdXJhdGlvbl9zZWM7CiYjNDM7CWNoYXIgcm9sbHVwX2ZuYW1lWzMyXTsKIAljaGFyIGZuYW1lWzMyXTsKIAogCXNlbGYtJmd0O3BhZ2Vfc2l6ZSA9ICh1bnNpZ25lZCBsb25nKXN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKQEAgLTY0OSw2ICYjNDM7Nzk3LDkgQEAgRklYVFVSRV9TRVRVUChwcm9jX21hcHNfcmFjZSkKIAkJYnJlYWs7CiAJY2FzZSBTTUFQUzoKIAkJc3ByaW50ZihmbmFtZSwgJiMzNDsvcHJvYy8lZC9zbWFwcyYjMzQ7LCBzZWxmLSZndDtwaWQpOwomIzQzOwkJc3ByaW50Zihyb2xsdXBfZm5hbWUsICYjMzQ7L3Byb2MvJWQvc21hcHNfcm9sbHVwJiMzNDssIHNlbGYtJmd0O3BpZCk7CiYjNDM7CQlzZWxmLSZndDtyb2xsdXBfZmQgPSBvcGVuKHJvbGx1cF9mbmFtZSwgT19SRE9OTFkpOwomIzQzOwkJQVNTRVJUX05FKHNlbGYtJmd0O3JvbGx1cF9mZCwgLTEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlrc2Z0X2V4aXRfZmFpbCgpOwpAQCAtNzExLDYgJiM0Mzs4NjIsOCBAQCBGSVhUVVJFX1RFQVJET1dOKHByb2NfbWFwc19yYWNlKQogCWZvciAoaW50IGkgPSAwOyBpICZsdDsgc2VsZi0mZ3Q7dm1hX2NvdW50OyBpJiM0MzsmIzQzOykKIAkJbXVubWFwKHNlbGYtJmd0O21vZF9pbmZvLSZndDtjaGlsZF9tYXBwZWRfYWRkcltpXSwgc2VsZi0mZ3Q7cGFnZV9zaXplKTsKIAljbG9zZShzZWxmLSZndDttYXBzX2ZkKTsKJiM0MzsJaWYgKHNlbGYtJmd0O21hcHNfZmlsZSA9PSBTTUFQUykKJiM0MzsJCWNsb3NlKHNlbGYtJmd0O3JvbGx1cF9mZCk7CiAJd2FpdHBpZChzZWxmLSZndDtwaWQsICZhbXA7c3RhdHVzLCAwKTsKIAltdW5tYXAoc2VsZi0mZ3Q7bW9kX2luZm8sIHNlbGYtJmd0O3NoYXJlZF9tZW1fc2l6ZSk7CiB9CkBAIC03MjMsNiAmIzQzOzg3Niw3IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9zcGxpdCkKIAlzdHJ1Y3QgbGluZV9jb250ZW50IHNwbGl0X2ZpcnN0X2xpbmU7CiAJc3RydWN0IGxpbmVfY29udGVudCByZXN0b3JlZF9sYXN0X2xpbmU7CiAJc3RydWN0IGxpbmVfY29udGVudCByZXN0b3JlZF9maXJzdF9saW5lOwomIzQzOwlzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIG9yaWdfc3RhdHM7CiAKIAl3YWl0X2Zvcl9zdGF0ZShtb2RfaW5mbywgU0VUVVBfUkVBRFkpOwogCkBAIC03MzYsNiAmIzQzOzg5MCw4IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9zcGxpdCkKIAlyZXBvcnRfdGVzdF9zdGFydCgmIzM0O1RlYXJpbmcgZnJvbSBzcGxpdCYjMzQ7LCBzZWxmLSZndDt2ZXJib3NlKTsKIAlBU1NFUlRfVFJVRShjYXB0dXJlX21vZF9wYXR0ZXJuKHNlbGYsICZhbXA7c3BsaXRfbGFzdF9saW5lLCAmYW1wO3NwbGl0X2ZpcnN0X2xpbmUsCiAJCQkJCSZhbXA7cmVzdG9yZWRfbGFzdF9saW5lLCAmYW1wO3Jlc3RvcmVkX2ZpcnN0X2xpbmUpKTsKJiM0MzsJaWYgKHNlbGYtJmd0O21hcHNfZmlsZSA9PSBTTUFQUykKJiM0MzsJCUFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCAmYW1wO29yaWdfc3RhdHMpKTsKIAogCS8qIE5vdyBzdGFydCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZm9yIHNlbGYtJmd0O2R1cmF0aW9uX3NlYyAqLwogCXNpZ25hbF9zdGF0ZShtb2RfaW5mbywgVEVTVF9SRUFEWSk7CkBAIC03OTksNiAmIzQzOzk1NSwxMSBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fc3BsaXQpCiAJCQkJICAgICB2bWFfZW5kID09IHNlbGYtJmd0O2xhc3RfbGluZS5lbmRfYWRkcikgfHwKIAkJCQkgICAgKHZtYV9zdGFydCA9PSBzcGxpdF9maXJzdF9saW5lLnN0YXJ0X2FkZHIgJmFtcDsmYW1wOwogCQkJCSAgICAgdm1hX2VuZCA9PSBzcGxpdF9maXJzdF9saW5lLmVuZF9hZGRyKSk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgc3RhdHM7CiYjNDM7CiYjNDM7CQkJQVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsICZhbXA7c3RhdHMpKTsKJiM0MzsJCQlBU1NFUlRfVFJVRShjb21wYXJlX3NtYXBzX3JvbGx1cChzZWxmLCAmYW1wO29yaWdfc3RhdHMsICZhbXA7c3RhdHMpKTsKIAkJfQogCQljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQ19DT0FSU0UsICZhbXA7ZW5kX3RzKTsKIAkJZW5kX3Rlc3RfaXRlcmF0aW9uKCZhbXA7ZW5kX3RzLCBzZWxmLSZndDt2ZXJib3NlKTsKQEAgLTgxNyw2ICYjNDM7OTc4LDcgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3Jlc2l6ZSkKIAlzdHJ1Y3QgbGluZV9jb250ZW50IHNocnVua19maXJzdF9saW5lOwogCXN0cnVjdCBsaW5lX2NvbnRlbnQgcmVzdG9yZWRfbGFzdF9saW5lOwogCXN0cnVjdCBsaW5lX2NvbnRlbnQgcmVzdG9yZWRfZmlyc3RfbGluZTsKJiM0MzsJc3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyBvcmlnX3N0YXRzOwogCiAJd2FpdF9mb3Jfc3RhdGUobW9kX2luZm8sIFNFVFVQX1JFQURZKTsKIApAQCAtODMwLDYgJiM0Mzs5OTIsOCBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fcmVzaXplKQogCXJlcG9ydF90ZXN0X3N0YXJ0KCYjMzQ7VGVhcmluZyBmcm9tIHJlc2l6ZSYjMzQ7LCBzZWxmLSZndDt2ZXJib3NlKTsKIAlBU1NFUlRfVFJVRShjYXB0dXJlX21vZF9wYXR0ZXJuKHNlbGYsICZhbXA7c2hydW5rX2xhc3RfbGluZSwgJmFtcDtzaHJ1bmtfZmlyc3RfbGluZSwKIAkJCQkJJmFtcDtyZXN0b3JlZF9sYXN0X2xpbmUsICZhbXA7cmVzdG9yZWRfZmlyc3RfbGluZSkpOwomIzQzOwlpZiAoc2VsZi0mZ3Q7bWFwc19maWxlID09IFNNQVBTKQomIzQzOwkJQVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsICZhbXA7b3JpZ19zdGF0cykpOwogCiAJLyogTm93IHN0YXJ0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBmb3Igc2VsZi0mZ3Q7ZHVyYXRpb25fc2VjICovCiAJc2lnbmFsX3N0YXRlKG1vZF9pbmZvLCBURVNUX1JFQURZKTsKQEAgLTg4MCw2ICYjNDM7MTA0NCwxMSBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fcmVzaXplKQogCQkJQVNTRVJUX1RSVUUodm1hX3N0YXJ0ID09IHNlbGYtJmd0O2xhc3RfbGluZS5zdGFydF9hZGRyICZhbXA7JmFtcDsKIAkJCQkgICAgKHZtYV9lbmQgLSB2bWFfc3RhcnQgPT0gc2VsZi0mZ3Q7cGFnZV9zaXplICogMyB8fAogCQkJCSAgICAgdm1hX2VuZCAtIHZtYV9zdGFydCA9PSBzZWxmLSZndDtwYWdlX3NpemUpKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJc3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyBzdGF0czsKJiM0MzsKJiM0MzsJCQlBU1NFUlRfVFJVRShwYXJzZV9zbWFwc19yb2xsdXAoc2VsZiwgJmFtcDtzdGF0cykpOwomIzQzOwkJCUFTU0VSVF9UUlVFKGNvbXBhcmVfc21hcHNfcm9sbHVwKHNlbGYsICZhbXA7b3JpZ19zdGF0cywgJmFtcDtzdGF0cykpOwogCQl9CiAJCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDX0NPQVJTRSwgJmFtcDtlbmRfdHMpOwogCQllbmRfdGVzdF9pdGVyYXRpb24oJmFtcDtlbmRfdHMsIHNlbGYtJmd0O3ZlcmJvc2UpOwpAQCAtODk4LDYgJiM0MzsxMDY3LDcgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3JlbWFwKQogCXN0cnVjdCBsaW5lX2NvbnRlbnQgcmVtYXBwZWRfZmlyc3RfbGluZTsKIAlzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2xhc3RfbGluZTsKIAlzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2ZpcnN0X2xpbmU7CiYjNDM7CXN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgb3JpZ19zdGF0czsKIAogCXdhaXRfZm9yX3N0YXRlKG1vZF9pbmZvLCBTRVRVUF9SRUFEWSk7CiAKQEAgLTkxMSw2ICYjNDM7MTA4MSw4IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9yZW1hcCkKIAlyZXBvcnRfdGVzdF9zdGFydCgmIzM0O1RlYXJpbmcgZnJvbSByZW1hcCYjMzQ7LCBzZWxmLSZndDt2ZXJib3NlKTsKIAlBU1NFUlRfVFJVRShjYXB0dXJlX21vZF9wYXR0ZXJuKHNlbGYsICZhbXA7cmVtYXBwZWRfbGFzdF9saW5lLCAmYW1wO3JlbWFwcGVkX2ZpcnN0X2xpbmUsCiAJCQkJCSZhbXA7cmVzdG9yZWRfbGFzdF9saW5lLCAmYW1wO3Jlc3RvcmVkX2ZpcnN0X2xpbmUpKTsKJiM0MzsJaWYgKHNlbGYtJmd0O21hcHNfZmlsZSA9PSBTTUFQUykKJiM0MzsJCUFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCAmYW1wO29yaWdfc3RhdHMpKTsKIAogCS8qIE5vdyBzdGFydCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZm9yIHNlbGYtJmd0O2R1cmF0aW9uX3NlYyAqLwogCXNpZ25hbF9zdGF0ZShtb2RfaW5mbywgVEVTVF9SRUFEWSk7CkBAIC05NjMsNiAmIzQzOzExMzUsMTEgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3JlbWFwKQogCQkJCSAgICAgdm1hX2VuZCAtIHZtYV9zdGFydCA9PSBzZWxmLSZndDtwYWdlX3NpemUgKiAzKSB8fAogCQkJCSAgICAodm1hX3N0YXJ0ID09IHNlbGYtJmd0O2xhc3RfbGluZS5zdGFydF9hZGRyICYjNDM7IHNlbGYtJmd0O3BhZ2Vfc2l6ZSAmYW1wOyZhbXA7CiAJCQkJICAgICB2bWFfZW5kIC0gdm1hX3N0YXJ0ID09IHNlbGYtJmd0O3BhZ2Vfc2l6ZSkpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIHN0YXRzOwomIzQzOwomIzQzOwkJCUFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCAmYW1wO3N0YXRzKSk7CiYjNDM7CQkJQVNTRVJUX1RSVUUoY29tcGFyZV9zbWFwc19yb2xsdXAoc2VsZiwgJmFtcDtvcmlnX3N0YXRzLCAmYW1wO3N0YXRzKSk7CiAJCX0KIAkJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUNfQ09BUlNFLCAmYW1wO2VuZF90cyk7CiAJCWVuZF90ZXN0X2l0ZXJhdGlvbigmYW1wO2VuZF90cywgc2VsZi0mZ3Q7dmVyYm9zZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTc2CgkJCQkJCQlvdXRwdXQ6IDM2CgkJCQkJCQl0aG91Z2h0czogNDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2g6IC9wcm9jL3Rhc2tfbW11LmMgYW5kIHNlbGZ0ZXN0cyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIEkgc2VlIGl0IHRvdWNoZXMgYGZzL3Byb2MvdGFza19tbXUuY2AgYW5kIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2MtbWFwcy1yYWNlLmNgLCBzbyBsZXQmIzM5O3MgZm9jdXMgb24gdGhlIGtlcm5lbCBzaWRlLCBzcGVjaWZpY2FsbHkgYGZzL3Byb2MvdGFza19tbXUuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byByZWFkIHRoZSBzdXJyb3VuZGluZyBjb2RlIGZvciBjb250ZXh0LgoKRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZXJlJiMzOTtzIHNvbWUgc2VyaW91cyByZWZhY3RvcmluZyBnb2luZyBvbiB3aXRoIHRoZSBsb2NraW5nIGhlbHBlcnMuIEkmIzM5O20gc2VlaW5nIGNoYW5nZXMgcmVsYXRlZCB0bzogYGxvY2tfY3R4X21tYCwgYHVubG9ja19jdHhfbW1gLCBgcmVzZXRfbG9ja19jdHhgLCBgdW5sb2NrX2N0eF92bWFgLCBgbG9ja192bWFfcmFuZ2VgLCBgdW5sb2NrX3ZtYV9yYW5nZWAsIGBmYWxsYmFja190b19tbWFwX2xvY2tgLCBgZHJvcF9yY3VgLCBhbmQgYHJlYWNxdWlyZV9yY3VgLiBDbGVhcmx5LCB0aGV5JiMzOTtyZSByZXRoaW5raW5nIGhvdyBsb2NraW5nIGlzIGhhbmRsZWQgaW4gdGhpcyBhcmVhLiBUaGVyZSBhcmUgYWxzbyBjaGFuZ2VzIHRvIHRoZSB2YXJpYWJsZXMgYG1fc3RhcnRgLCBgbV9zdG9wYCwgYW5kIGBkb19wcm9jbWFwX3F1ZXJ5YCwgd2hpY2ggd2FycmFudHMgY2xvc2VyIGV4YW1pbmF0aW9uLgoKU3BlY2lmaWNhbGx5LCBpbiBgc21hcF9nYXRoZXJfc3RhdHNgLCBJIG5vdGljZSBhIGNoYW5nZSB0byBob3cgdGhlIGBzdGFydGAgcGFyYW1ldGVyIGlzIGhhbmRsZWQsIGluY2x1ZGluZyBgaXNfcGFydGlhbCA9IHN0YXJ0ICZndDsgdm1hLSZndDt2bV9zdGFydGAgbG9naWMgYW5kIHRoZSB1c2Ugb2YgYHdhbGtfcGFnZV9yYW5nZV92bWFgIGluc3RlYWQgb2YgYHdhbGtfcGFnZV92bWFgIG9yIGB3YWxrX3BhZ2VfcmFuZ2VgLiBUaGlzIGlzIGxpa2VseSB0byByZWZpbmUgdGhlIHJhbmdlIG9mIG1lbW9yeSBiZWluZyBhbmFseXplZC4KClRoZSBtb3N0IHNpZ25pZmljYW50IGNoYW5nZSwgaG93ZXZlciwgc2VlbXMgdG8gYmUgaW4gYHNob3dfc21hcHNfcm9sbHVwYC4gSXQgYXBwZWFycyB0aGV5JiMzOTtyZSBtb3ZpbmcgYXdheSBmcm9tIGEgc2luZ2xlIGBtbWFwX3JlYWRfbG9ja2AgYXQgdGhlIGJlZ2lubmluZyAoYGxvY2tfY3R4X21tYCkgYW5kIGFyZSBub3cgdXRpbGl6aW5nIGByY3VfcmVhZF9sb2NrKClgIGFsb25nIHdpdGggYHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KWAsIGVtcGxveWluZyBgcHJvY19nZXRfdm1hYCBhbmQgcGVyLVZNQSBsb2NraW5nIChWTUEgbG9ja3MpIHVuZGVyIFJDVS4gVGhpcyBzdHJvbmdseSBzdWdnZXN0cyB0aGV5IGFyZSBhaW1pbmcgZm9yIGltcHJvdmVkIGNvbmN1cnJlbmN5LCBzaW1pbGFyIHRvIGhvdyBgL3Byb2MvcGlkL3NtYXBzYCBhbmQgYC9wcm9jL3BpZC9tYXBzYCB3b3JrLiBJdCYjMzk7cyBsaWtlbHkgdHJ5aW5nIHRvIHJlZHVjZSBjb250ZW50aW9uIG9uIHRoZSBnbG9iYWwgbW1hcCBsb2NrLCB1c2luZyBSQ1UgZm9yIHJlYWQgb3BlcmF0aW9ucy4gVGhleSYjMzk7dmUgYWxzbyBhY2NvdW50ZWQgZm9yIGhhbmRsaW5nIGNvbnRlbnRpb25zIG9yIGZhbGxiYWNrcyBpZiBgbW1hcF9sb2NrYCBpcyBuZWVkZWQuIEluIGFkZGl0aW9uLCB0aGUgYHNob3dfc21hcGAgZnVuY3Rpb24gbm93IGNhbGxzIGBzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsICZhbXA7bXNzLCB2bWEtJmd0O3ZtX3N0YXJ0KWAgaW5zdGVhZCBvZiBwYXNzaW5nIDAsIHdoaWNoIGFsc28gd2FycmFudHMgaW52ZXN0aWdhdGlvbi4KClRpbWUgdG8gY29uc3VsdCB0aGUgc291cmNlLiBMZXQmIzM5O3MgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSB3aXRoaW4gYGZzL3Byb2MvdGFza19tbXUuY2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hvd19zbWFwc19yb2xsdXAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jPTEzMzg9c3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xMzY1LVxuZnMvcHJvYy90YXNrX21tdS5jOjEzNjY6c3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTM2Ny17XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTE0Nzg9c3RhdGljIGludCBzbWFwc19yb2xsdXBfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTQ4Ni1cbmZzL3Byb2MvdGFza19tbXUuYzoxNDg3Olx0cmV0ID0gc2luZ2xlX29wZW4oZmlsZSwgc2hvd19zbWFwc19yb2xsdXAsIHByaXYpO1xuZnMvcHJvYy90YXNrX21tdS5jLTE0ODgtXHRpZiAocmV0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MjgxCgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gYGZzL3Byb2MvdGFza19tbXUuY2AgZm9yIE1lbW9yeSBNYXBwaW5nIERlZXAgRGl2ZXMqKgoKT2theSwgc28gd2UmIzM5O3JlIGxvb2tpbmcgYXQgbWVtb3J5IG1hcHBpbmdzLCBzcGVjaWZpY2FsbHkgaG93IHRoZXkmIzM5O3JlIGV4cG9zZWQgdGhyb3VnaCBgL3Byb2MvW3BpZF0vc21hcHNgLiBUaGUgZ29hbCBoZXJlIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNoYW5nZXMgbWFkZSBhcm91bmQgYHNob3dfc21hcHNfcm9sbHVwYCBhbmQgc2ltaWxhciBmdW5jdGlvbnMgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgYGZzL3Byb2MvdGFza19tbXUuY2AgZmlsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGtlcm5lbCBnYXRoZXJzIGFuZCBwcmVzZW50cyBwZXItdGFzayBtZW1vcnkgaW5mb3JtYXRpb24uIFRoYXQgYHNob3dfc21hcHNfcm9sbHVwYCBmdW5jdGlvbiBpcyBhIGtleSBlbnRyeSBwb2ludCwgYW5kIHdoYXRldmVyIHN1cnJvdW5kaW5nIGNvZGUgZ290IHRvdWNoZWQgbGlrZWx5IGhvbGRzIGluc2lnaHRzIGludG8gcmVjZW50IGltcHJvdmVtZW50cywgYnVnIGZpeGVzLCBvciBuZXcgZmVhdHVyZXMgaW4gdGhlIHZpcnR1YWwgbWVtb3J5IHJlcG9ydGluZy4gSSB3YW50IHRvIGNoZWNrIGhvdyB0aGV5IGFyZSBnZXR0aW5nIHRoZSB0b3RhbCBvZiB0aGUgcHJpdmF0ZSwgc2hhcmVkLCBzd2FwcGVkLCBldGMgbWVtb3J5IGluZm8uIEkmIzM5O20gZXNwZWNpYWxseSBrZWVuIHRvIHNlZSBob3cgdGhlIGNvZGUgaGFuZGxlcyBkaWZmZXJlbnQgcGFnZSBzaXplcywgTlVNQSBjb25maWd1cmF0aW9ucywgYW5kIHBlcmhhcHMgZXZlbiBtZW1vcnktdGllcmluZyB0ZWNobm9sb2dpZXMgaWYgdGhleSBhcmUgZXhwb3NlZCBpbiB0aGUgYHNtYXBzYCBvdXRwdXQuIEkgYW50aWNpcGF0ZSBzb21lIGludGVyZXN0aW5nIHVzZXMgb2YgYHB0ZWBzIGFuZCBgcG1kYHMuIFRpbWUgdG8gZGlnIGluIGFuZCBnZXQgYSBncmlwIG9uIHRob3NlIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL3Rhc2tfbW11LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMzYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzYwOlx0XHRcdHNlcV9wcmludGYobSwgXCYjMzQ7UHJvdGVjdGlvbktleTogICU4dVxcblwmIzM0Oywgdm1hX3BrZXkodm1hKSk7XG4xMzYxOlx0XHRzaG93X3NtYXBfdm1hX2ZsYWdzKG0sIHZtYSk7XG4xMzYyOlx0XG4xMzYzOlx0XHRyZXR1cm4gMDtcbjEzNjQ6XHR9XG4xMzY1Olx0XG4xMzY2Olx0c3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4xMzY3Olx0e1xuMTM2ODpcdFx0c3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2ID0gbS1cdTAwM2Vwcml2YXRlO1xuMTM2OTpcdFx0c3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHggPSBcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4O1xuMTM3MDpcdFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBsb2NrX2N0eC1cdTAwM2VtbTtcbjEzNzE6XHRcdHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyBtc3MgPSB7fTtcbjEzNzI6XHRcdHVuc2lnbmVkIGxvbmcgbGFzdF92bWFfZW5kID0gMDtcbjEzNzM6XHRcdHVuc2lnbmVkIGxvbmcgdm1hX3N0YXJ0ID0gMDtcbjEzNzQ6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuMTM3NTpcdFx0bG9mZl90IHBvcyA9IDA7XG4xMzc2Olx0XHRpbnQgcmV0ID0gMDtcbjEzNzc6XHRcbjEzNzg6XHRcdHByaXYtXHUwMDNldGFzayA9IGdldF9wcm9jX3Rhc2socHJpdi1cdTAwM2Vpbm9kZSk7XG4xMzc5Olx0XHRpZiAoIXByaXYtXHUwMDNldGFzaylcbjEzODA6XHRcdFx0cmV0dXJuIC1FU1JDSDtcbjEzODE6XHRcbjEzODI6XHRcdGlmICghbW0gfHwgIW1tZ2V0X25vdF96ZXJvKG1tKSkge1xuMTM4MzpcdFx0XHRyZXQgPSAtRVNSQ0g7XG4xMzg0Olx0XHRcdGdvdG8gb3V0X3B1dF90YXNrO1xuMTM4NTpcdFx0fVxuMTM4NjpcdFxuMTM4NzpcdFx0aG9sZF90YXNrX21lbXBvbGljeShwcml2KTtcbjEzODg6XHRcdHJjdV9yZWFkX2xvY2soKTtcbjEzODk6XHRcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcbjEzOTA6XHRcbjEzOTE6XHRcdHZtYV9pdGVyX2luaXQoXHUwMDI2cHJpdi1cdTAwM2VpdGVyLCBtbSwgMCk7XG4xMzkyOlx0XHR2bWEgPSBwcm9jX2dldF92bWEobSwgXHUwMDI2cG9zKTtcbjEzOTM6XHRcdGlmICh1bmxpa2VseSghdm1hKSlcbjEzOTQ6XHRcdFx0Z290byBlbXB0eV9zZXQ7XG4xMzk1Olx0XG4xMzk2Olx0XHRpZiAoIUlTX0VSUih2bWEpIFx1MDAyNlx1MDAyNiB2bWEgIT0gZ2V0X2dhdGVfdm1hKGxvY2tfY3R4LVx1MDAzZW1tKSlcbjEzOTc6XHRcdFx0dm1hX3N0YXJ0ID0gdm1hLVx1MDAzZXZtX3N0YXJ0O1xuMTM5ODpcdFxuMTM5OTpcdFx0d2hpbGUgKHZtYSkge1xuMTQwMDpcdFx0XHRpZiAoSVNfRVJSKHZtYSkpIHtcbjE0MDE6XHRcdFx0XHRyZXQgPSBQVFJfRVJSKHZtYSk7XG4xNDAyOlx0XHRcdFx0Z290byBvdXRfdW5sb2NrO1xuMTQwMzpcdFx0XHR9XG4xNDA0Olx0XG4xNDA1Olx0XHRcdGlmICh2bWEgPT0gZ2V0X2dhdGVfdm1hKGxvY2tfY3R4LVx1MDAzZW1tKSlcbjE0MDY6XHRcdFx0XHRicmVhaztcbjE0MDc6XHRcbjE0MDg6XHRcdFx0LypcbjE0MDk6XHRcdFx0ICogSWYgYWZ0ZXIgcmV0YWtpbmcgdGhlIGxvY2ssIGFscmVhZHkgcmVwb3J0ZWQgVk1BIGdyZXcgb3JcbjE0MTA6XHRcdFx0ICogbWVyZ2VkIHdpdGggdGhlIG5leHQgb25lLCBzbWFwX2dhdGhlcl9zdGF0cygpIHdpbGwgZ2F0aGVyXG4xNDExOlx0XHRcdCAqIHN0YXRzIGZvciB0aGUgcmVtYWluaW5nIHBvcnRpb24gYnkgc3RhcnRpbmcgYXQgbGFzdF92bWFfZW5kLlxuMTQxMjpcdFx0XHQgKi9cbjE0MTM6XHRcdFx0c21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCBcdTAwMjZtc3MsIGxhc3Rfdm1hX2VuZCk7XG4xNDE0Olx0XHRcdGxhc3Rfdm1hX2VuZCA9IHZtYS1cdTAwM2V2bV9lbmQ7XG4xNDE1Olx0XG4xNDE2Olx0XHRcdC8qXG4xNDE3Olx0XHRcdCAqIElmIHRoZSBWTUEgbG9jayBpcyBub3QgdGFrZW4sIHdlIGhvbGQgdGhlIG9mdGVuIGNvbnRlbmRlZFxuMTQxODpcdFx0XHQgKiBtbWFwIGxvY2suIFRoaXMgY2FuIGhhcHBlbiBpZiB3ZSBoYWQgdG8gZmFsbCBiYWNrIHRvIHRoZVxuMTQxOTpcdFx0XHQgKiBtbWFwIGxvY2suXG4xNDIwOlx0XHRcdCAqXG4xNDIxOlx0XHRcdCAqIFRvIHJlbGlldmUgcHJlc3N1cmUsIGNoZWNrIGlmIGl0IGlzIGluZGVlZCBjb250ZW5kZWQsIHRoZW5cbjE0MjI6XHRcdFx0ICogdGVtcG9yYXJpbHkgcmVsZWFzZSBpdC5cbjE0MjM6XHRcdFx0ICovXG4xNDI0Olx0XHRcdGlmIChsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZCBcdTAwMjZcdTAwMjZcbjE0MjU6XHRcdFx0ICAgIG1tYXBfbG9ja19pc19jb250ZW5kZWQobG9ja19jdHgtXHUwMDNlbW0pKSB7XG4xNDI2Olx0XHRcdFx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XG4xNDI3Olx0XHRcdFx0LypcbjE0Mjg6XHRcdFx0XHQgKiBFdmVuIHRob3VnaCB3ZSBwcmV2aW91c2x5IGZlbGwgYmFjayB0byBtbWFwIGxvY2ssXG4xNDI5Olx0XHRcdFx0ICogd2UgdHJ5IHRha2luZyBWTUEgbG9jayBmb3IgdGhlIG5leHQgVk1BLCBzaW5jZSBpdFxuMTQzMDpcdFx0XHRcdCAqIG1pZ2h0IG5vdCBiZSB1bmRlciBtb2RpZmljYXRpb24uIEluIHRoZSB3b3JzdCBjYXNlXG4xNDMxOlx0XHRcdFx0ICogd2Ugd2lsbCBmYWxsIGJhY2sgdG8gbW1hcCBsb2NrIGFnYWluLlxuMTQzMjpcdFx0XHRcdCAqL1xuMTQzMzpcdFx0XHRcdHJjdV9yZWFkX2xvY2soKTtcbjE0MzQ6XHRcdFx0XHRyZXNldF9sb2NrX2N0eChsb2NrX2N0eCk7XG4xNDM1Olx0XHRcdFx0LyogUmVzdW1lIGZyb20gdGhlIGxhc3QgcG9zaXRpb24uICovXG4xNDM2Olx0XHRcdFx0cG9zID0gbGFzdF92bWFfZW5kO1xuMTQzNzpcdFx0XHRcdHZtYV9pdGVyX2luaXQoXHUwMDI2cHJpdi1cdTAwM2VpdGVyLCBtbSwgcG9zKTtcbjE0Mzg6XHRcdFx0fVxuMTQzOTpcdFx0XHR2bWEgPSBwcm9jX2dldF92bWEobSwgXHUwMDI2cG9zKTtcbjE0NDA6XHRcdH1cbjE0NDE6XHRcbjE0NDI6XHRlbXB0eV9zZXQ6XG4xNDQzOlx0XHRzaG93X3ZtYV9oZWFkZXJfcHJlZml4KG0sIHZtYV9zdGFydCwgbGFzdF92bWFfZW5kLCAwLCAwLCAwLCAwKTtcbjE0NDQ6XHRcdHNlcV9wYWQobSwgJiMzOTsgJiMzOTspO1xuMTQ0NTpcdFx0c2VxX3B1dHMobSwgXCYjMzQ7W3JvbGx1cF1cXG5cJiMzNDspO1xuMTQ0NjpcdFxuMTQ0NzpcdFx0X19zaG93X3NtYXAobSwgXHUwMDI2bXNzLCB0cnVlKTtcbjE0NDg6XHRcbjE0NDk6XHRvdXRfdW5sb2NrOlxuMTQ1MDpcdFx0aWYgKGxvY2tfY3R4LVx1MDAzZW1tYXBfbG9ja2VkKSB7XG4xNDUxOlx0XHRcdHVubG9ja19jdHhfbW0obG9ja19jdHgpO1xuMTQ1MjpcdFx0fSBlbHNlIHtcbjE0NTM6XHRcdFx0dW5sb2NrX2N0eF92bWEobG9ja19jdHgpO1xuMTQ1NDpcdFx0XHRyY3VfcmVhZF91bmxvY2soKTtcbjE0NTU6XHRcdH1cbjE0NTY6XHRcdHJlbGVhc2VfdGFza19tZW1wb2xpY3kocHJpdik7XG4xNDU3Olx0XHRtbXB1dChtbSk7XG4xNDU4Olx0b3V0X3B1dF90YXNrOlxuMTQ1OTpcdFx0cHV0X3Rhc2tfc3RydWN0KHByaXYtXHUwMDNldGFzayk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYxNTIKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFeGFtaW5pbmcgRnVydGhlciBNb2RpZmljYXRpb25zIGluIGBmcy9wcm9jL3Rhc2tfbW11LmNgKioKCk9rYXksIHNvIHdlJiMzOTt2ZSBhZGRyZXNzZWQgdGhlIHByaW1hcnkgaXNzdWUsIGJ1dCB3ZSBuZWVkIHRvIGVuc3VyZSB3ZSBoYXZlbiYjMzk7dCBpbnRyb2R1Y2VkIGFueSB1bmludGVuZGVkIHNpZGUgZWZmZWN0cyBvciBtaXNzZWQgYW55IHN1YnRsZSBpbnRlcmFjdGlvbnMuIE15IG5leHQgc3RlcCBpcyB0byBkcmlsbCBkb3duIGludG8gdGhlIG90aGVyIGZ1bmN0aW9ucyB0aGF0IHdlcmUgdG91Y2hlZCB3aXRoaW4gYGZzL3Byb2MvdGFza19tbXUuY2AuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gb24gdGhlIHNlY3Rpb25zIGJldHdlZW4gbGluZXMgMTIwIGFuZCAzNTAsIGFzIHdlbGwgYXMgbGluZXMgNjAwIHRocm91Z2ggNzUwLiBUaGlzIGlzIHdoZXJlIHRoZSBjb2RlIGNoYW5nZXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhcmUgbGlrZWx5IHRvIGJlIG1vc3QgY29uY2VudHJhdGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgbmF0dXJlIG9mIHRoZXNlIG1vZGlmaWNhdGlvbnMgYW5kIGhvdyB0aGV5IHBvdGVudGlhbGx5IGltcGFjdCB0aGUgb3ZlcmFsbCBzdGFiaWxpdHkgYW5kIHBlcmZvcm1hbmNlIG9mIHRoZSBzeXN0ZW0uIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIG9yIGRldmlhdGlvbnMgZnJvbSBleHBlY3RlZCBiZWhhdmlvci4gVGhpcyBpcyBjcnVjaWFsIGZvciBhIGNvbXBsZXRlIGFuZCByb2J1c3QgYXNzZXNzbWVudCBvZiB0aGUgY2hhbmdlcy4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEzMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTMwOlx0fVxuIDEzMTpcdCNlbmRpZlxuIDEzMjpcdFxuIDEzMzpcdHN0YXRpYyB2b2lkIHVubG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4gMTM0Olx0e1xuIDEzNTpcdFx0bW1hcF9yZWFkX3VubG9jayhsb2NrX2N0eC1cdTAwM2VtbSk7XG4gMTM2Olx0XHRsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZCA9IGZhbHNlO1xuIDEzNzpcdH1cbiAxMzg6XHRcbiAxMzk6XHRzdGF0aWMgdm9pZCB1bmxvY2tfY3R4X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbiAxNDA6XHR7XG4gMTQxOlx0XHRpZiAobG9ja19jdHgtXHUwMDNlbG9ja2VkX3ZtYSkge1xuIDE0MjpcdFx0XHR2bWFfZW5kX3JlYWQobG9ja19jdHgtXHUwMDNlbG9ja2VkX3ZtYSk7XG4gMTQzOlx0XHRcdGxvY2tfY3R4LVx1MDAzZWxvY2tlZF92bWEgPSBOVUxMO1xuIDE0NDpcdFx0fVxuIDE0NTpcdH1cbiAxNDY6XHRcbiAxNDc6XHRzdGF0aWMgdm9pZCByZXNldF9sb2NrX2N0eChzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbiAxNDg6XHR7XG4gMTQ5Olx0XHRsb2NrX2N0eC1cdTAwM2Vsb2NrZWRfdm1hID0gTlVMTDtcbiAxNTA6XHRcdGxvY2tfY3R4LVx1MDAzZW1tYXBfbG9ja2VkID0gZmFsc2U7XG4gMTUxOlx0fVxuIDE1MjpcdFxuIDE1MzpcdHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmdldF9uZXh0X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXG4gMTU0Olx0XHRcdFx0XHRcdCAgIGxvZmZfdCBsYXN0X3BvcylcbiAxNTU6XHR7XG4gMTU2Olx0XHRzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCA9IFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHg7XG4gMTU3Olx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbiAxNTg6XHRcbiAxNTk6XHRcdGlmIChsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZClcbiAxNjA6XHRcdFx0cmV0dXJuIHZtYV9uZXh0KFx1MDAyNnByaXYtXHUwMDNlaXRlcik7XG4gMTYxOlx0XG4gMTYyOlx0XHR1bmxvY2tfY3R4X3ZtYShsb2NrX2N0eCk7XG4gMTYzOlx0XHR2bWEgPSBsb2NrX25leHRfdm1hKGxvY2tfY3R4LVx1MDAzZW1tLCBcdTAwMjZwcml2LVx1MDAzZWl0ZXIsIGxhc3RfcG9zKTtcbiAxNjQ6XHRcdGlmICghSVNfRVJSX09SX05VTEwodm1hKSlcbiAxNjU6XHRcdFx0bG9ja19jdHgtXHUwMDNlbG9ja2VkX3ZtYSA9IHZtYTtcbiAxNjY6XHRcbiAxNjc6XHRcdHJldHVybiB2bWE7XG4gMTY4Olx0fVxuIDE2OTpcdFxuIDE3MDpcdHN0YXRpYyBib29sIGZhbGxiYWNrX3RvX21tYXBfbG9jayhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXG4gMTcxOlx0XHRcdFx0XHRcdCBsb2ZmX3QgcG9zKVxuIDE3MjpcdHtcbiAxNzM6XHRcdHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4ID0gXHUwMDI2cHJpdi1cdTAwM2Vsb2NrX2N0eDtcbiAxNzQ6XHRcbiAxNzU6XHRcdGlmIChsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZClcbiAxNzY6XHRcdFx0cmV0dXJuIGZhbHNlO1xuIDE3NzpcdFxuIDE3ODpcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gMTc5Olx0XHRtbWFwX3JlYWRfbG9jayhsb2NrX2N0eC1cdTAwM2VtbSk7XG4gMTgwOlx0XHQvKiBSZWluaXRpYWxpemUgdGhlIGl0ZXJhdG9yIGFmdGVyIHRha2luZyBtbWFwX2xvY2sgKi9cbiAxODE6XHRcdHZtYV9pdGVyX3NldChcdTAwMjZwcml2LVx1MDAzZWl0ZXIsIHBvcyk7XG4gMTgyOlx0XHRsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZCA9IHRydWU7XG4gMTgzOlx0XG4gMTg0Olx0XHRyZXR1cm4gdHJ1ZTtcbiAxODU6XHR9XG4gMTg2Olx0XG4gMTg3Olx0c3RhdGljIHZvaWQgZHJvcF9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuIDE4ODpcdHtcbiAxODk6XHRcdGlmIChwcml2LVx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxuIDE5MDpcdFx0XHRyZXR1cm47XG4gMTkxOlx0XG4gMTkyOlx0XHRyY3VfcmVhZF91bmxvY2soKTtcbiAxOTM6XHR9XG4gMTk0Olx0XG4gMTk1Olx0c3RhdGljIHZvaWQgcmVhY3F1aXJlX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4gMTk2Olx0e1xuIDE5NzpcdFx0aWYgKHByaXYtXHUwMDNlbG9ja19jdHgubW1hcF9sb2NrZWQpXG4gMTk4Olx0XHRcdHJldHVybjtcbiAxOTk6XHRcbiAyMDA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAyMDE6XHRcdC8qIFJlaW5pdGlhbGl6ZSB0aGUgaXRlcmF0b3IuICovXG4gMjAyOlx0XHR2bWFfaXRlcl9zZXQoXHUwMDI2cHJpdi1cdTAwM2VpdGVyLCBwcml2LVx1MDAzZWxvY2tfY3R4LmxvY2tlZF92bWEtXHUwMDNldm1fZW5kKTtcbiAyMDM6XHR9XG4gMjA0Olx0XG4gMjA1Olx0c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJvY19nZXRfdm1hKHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwcG9zKVxuIDIwNjpcdHtcbiAyMDc6XHRcdHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tXHUwMDNlcHJpdmF0ZTtcbiAyMDg6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xuIDIwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjA2CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzgyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgYHRhc2tfbW11LmNgIGZvciBGdXp6aW5nKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gd2hhdCBJJiMzOTttIHNlZWluZywgYHRhc2tfbW11LmNgIGlzIHRoZSBoZWFydCBvZiB0aGUga2VybmVsJiMzOTtzIGludGVyYWN0aW9uIHdpdGggdGhlIHZpcnR1YWwgbWVtb3J5IHN5c3RlbSB2aWEgcHJvY2ZzLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIGhhbmRsaW5nIHRoaW5ncyBsaWtlIGAvcHJvYy8mbHQ7cGlkJmd0Oy9tYXBzYCwgYC9wcm9jLyZsdDtwaWQmZ3Q7L3NtYXBzYCwgYW5kIHRoZSBtb3JlIHJlY2VudCBgL3Byb2MvJmx0O3BpZCZndDsvc21hcHNfcm9sbHVwYCwgYC9wcm9jLyZsdDtwaWQmZ3Q7L2NsZWFyX3JlZnNgLCBgL3Byb2MvJmx0O3BpZCZndDsvcGFnZW1hcGAsIGAvcHJvYy8mbHQ7cGlkJmd0Oy9udW1hX21hcHNgLCBhbmQgdGhlIGBQUk9DTUFQX1FVRVJZYCBpb2N0bC4gVGhpcyBzY3JlYW1zICpjb3JlKiBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIFZpcnR1YWwgRmlsZSBTeXN0ZW0gKFZGUykgcHJvY2ZzIGNvZGUuCgpUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHM/IFRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcy4gRmlsZXMgbGlrZSBgL3Byb2MvJmx0O3BpZCZndDsvc21hcHNfcm9sbHVwYCwgYC9wcm9jLyZsdDtwaWQmZ3Q7L3NtYXBzYCwgYW5kIGAvcHJvYy8mbHQ7cGlkJmd0Oy9tYXBzYCBhcmUgY29tcGxldGVseSBzdGFuZGFyZCBwcm9jZnMgZW50cmllcyB0aGF0IHVzZXJzcGFjZSB0b29scyByZWd1bGFybHkgdXNlLiBUaGlzIGluc3RhbnRseSBmbGFncyBpdCBhcyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZy4KCk5vdywgdGhlIGNvZGUgY2hhbmdlcyBpbiBgc2hvd19zbWFwc19yb2xsdXBgIGFyZSB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nLiBJdCBsb29rcyBsaWtlIHRoZXkmIzM5O3ZlIG1vdmVkIGZyb20gZ3JhYmJpbmcgdGhlIGBtbWFwX3JlYWRfbG9ja2AgdXBmcm9udCB0byB1c2luZyBSQ1UtYmFzZWQgcGVyLVZNQSBsb2Nrcy4gVGhpcyBpbnRyb2R1Y2VzIFJDVSBpbnRvIHRoZSBlcXVhdGlvbiwgd2hpY2ggY2FuIGFsd2F5cyBsZWFkIHRvIGludGVyZXN0aW5nIGNvbmN1cnJlbmN5IGJ1Z3MuIFRoZXkmIzM5O3JlIHVzaW5nIGBwcm9jX2dldF92bWFgLCBgdm1hX2VuZF9yZWFkYCwgYHNtYXBfZ2F0aGVyX3N0YXRzYCwgZHJvcHBpbmcgYW5kIHJldGFraW5nIFJDVS9tbWFwIGxvY2sgb24gY29udGVudGlvbiwgZXRjLiBUaGUgbG9ja2luZyBzdHJhdGVneSBoYXMgc2lnbmlmaWNhbnRseSBjaGFuZ2VkLgoKRnVydGhlcm1vcmUsIGBzbWFwX2dhdGhlcl9zdGF0c2AgaXMgYWx0ZXJpbmcgYHdhbGtfcGFnZV9yYW5nZV92bWFgIGFuZCBzdGFydCBib3VuZCBoYW5kbGluZy4gV2UgYWxzbyBzZWUgYWRqdXN0bWVudHMgdG8gYGRvX3Byb2NtYXBfcXVlcnlgIGxvY2tpbmcgaGVscGVycywgYWxvbmcgd2l0aCB1bi1pbmxpbmluZyBvZiBzZXZlcmFsIHN0YXRpYyBmdW5jdGlvbnMgbGlrZSBgcHRlX2lzX3Bpbm5lZGAsIGBjbGVhcl9zb2Z0X2RpcnR5YCwgZXRjLgoKVGhlIGNyaXRpY2FsIHRha2Vhd2F5IGlzIHRoYXQgdGhlc2UgY2hhbmdlcyBhcmUgdG91Y2hpbmcgKnJlYWNoYWJsZSogY29yZSBleGVjdXRhYmxlIGNvZGUgaW4gbW0vcHJvY2ZzIGFuZCBtb2RpZnlpbmcgZnVuZGFtZW50YWwgc3luY2hyb25pemF0aW9uIGFuZCBsb2NraW5nIGFzIHdlbGwgYXMgaXRlcmF0aW9uIGxvZ2ljIHdpdGhpbiBgc2hvd19zbWFwc19yb2xsdXBgIGFuZCBgc21hcF9nYXRoZXJfc3RhdHNgLiBUaGlzIGlzIGEgY2xhc3NpYyByZWNpcGUgZm9yIGludHJvZHVjaW5nIHN1YnRsZSBjb25jdXJyZW5jeSB2dWxuZXJhYmlsaXRpZXMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gYnVncy4gVGhlcmVmb3JlLCB3aXRob3V0IGEgZG91YnQ6IGBXb3J0aEZ1enppbmcgPSB0cnVlYC4KCk15IG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgYW55IGRlcGVuZGVuY2llczogSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMuIERvZXMgYHNtYXBzX3JvbGx1cGAgaGF2ZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXM/IEkmIzM5O2xsIGNoZWNrIEtjb25maWcgZm9yIGBQUk9DX1BBR0VfTU9OSVRPUmAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NtYXBzX3JvbGx1cCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvYmFzZS5jPTMyODM9c3RhdGljIGNvbnN0IHN0cnVjdCBwaWRfZW50cnkgdGdpZF9iYXNlX3N0dWZmW10gPSB7XG4tLVxuZnMvcHJvYy9iYXNlLmMtMzMyNC1cdFJFRyhcJiMzNDtzbWFwc1wmIzM0OywgICAgICBTX0lSVUdPLCBwcm9jX3BpZF9zbWFwc19vcGVyYXRpb25zKSxcbmZzL3Byb2MvYmFzZS5jOjMzMjU6XHRSRUcoXCYjMzQ7c21hcHNfcm9sbHVwXCYjMzQ7LCBTX0lSVUdPLCBwcm9jX3BpZF9zbWFwc19yb2xsdXBfb3BlcmF0aW9ucyksXG5mcy9wcm9jL2Jhc2UuYy0zMzI2LVx0UkVHKFwmIzM0O3BhZ2VtYXBcJiMzNDssICAgIFNfSVJVU1IsIHByb2NfcGFnZW1hcF9vcGVyYXRpb25zKSxcbi0tXG5mcy9wcm9jL2Jhc2UuYz0zNjQyPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlkX2VudHJ5IHRpZF9iYXNlX3N0dWZmW10gPSB7XG4tLVxuZnMvcHJvYy9iYXNlLmMtMzY3OS1cdFJFRyhcJiMzNDtzbWFwc1wmIzM0OywgICAgIFNfSVJVR08sIHByb2NfcGlkX3NtYXBzX29wZXJhdGlvbnMpLFxuZnMvcHJvYy9iYXNlLmM6MzY4MDpcdFJFRyhcJiMzNDtzbWFwc19yb2xsdXBcJiMzNDssIFNfSVJVR08sIHByb2NfcGlkX3NtYXBzX3JvbGx1cF9vcGVyYXRpb25zKSxcbmZzL3Byb2MvYmFzZS5jLTM2ODEtXHRSRUcoXCYjMzQ7cGFnZW1hcFwmIzM0OywgICAgU19JUlVTUiwgcHJvY19wYWdlbWFwX29wZXJhdGlvbnMpLFxuLS1cbmZzL3Byb2MvaW50ZXJuYWwuaD00MDc9ZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19waWRfc21hcHNfb3BlcmF0aW9ucztcbmZzL3Byb2MvaW50ZXJuYWwuaDo0MDg6ZXh0ZXJuIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19waWRfc21hcHNfcm9sbHVwX29wZXJhdGlvbnM7XG5mcy9wcm9jL2ludGVybmFsLmgtNDA5LWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2xlYXJfcmVmc19vcGVyYXRpb25zO1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYz0xMjUwPXN0YXRpYyB2b2lkIHNtYXBfZ2F0aGVyX3N0YXRzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTI5Ni1cbmZzL3Byb2MvdGFza19tbXUuYzoxMjk3Oi8qIFNob3cgdGhlIGNvbnRlbnRzIGNvbW1vbiBmb3Igc21hcHMgYW5kIHNtYXBzX3JvbGx1cCAqL1xuZnMvcHJvYy90YXNrX21tdS5jLTEyOTgtc3RhdGljIHZvaWQgX19zaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCBjb25zdCBzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgKm1zcyxcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTMwNS1cdFx0LypcbmZzL3Byb2MvdGFza19tbXUuYzoxMzA2Olx0XHQgKiBUaGVzZSBhcmUgbWVhbmluZ2Z1bCBvbmx5IGZvciBzbWFwc19yb2xsdXAsIG90aGVyd2lzZSB0d28gb2ZcbmZzL3Byb2MvdGFza19tbXUuYy0xMzA3LVx0XHQgKiB0aGVtIGFyZSB6ZXJvLCBhbmQgdGhlIG90aGVyIG9uZSBpcyB0aGUgc2FtZSBhcyBQc3MuXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTEzMzg9c3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xMzY1LVxuZnMvcHJvYy90YXNrX21tdS5jOjEzNjY6c3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTM2Ny17XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTE0NzM9c3RhdGljIGludCBwaWRfc21hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTQ3Ny1cbmZzL3Byb2MvdGFza19tbXUuYzoxNDc4OnN0YXRpYyBpbnQgc21hcHNfcm9sbHVwX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTQ3OS17XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTE0ODYtXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTQ4NzpcdHJldCA9IHNpbmdsZV9vcGVuKGZpbGUsIHNob3dfc21hcHNfcm9sbHVwLCBwcml2KTtcbmZzL3Byb2MvdGFza19tbXUuYy0xNDg4LVx0aWYgKHJldClcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTUwNi1cbmZzL3Byb2MvdGFza19tbXUuYzoxNTA3OnN0YXRpYyBpbnQgc21hcHNfcm9sbHVwX3JlbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTUwOC17XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTE1MTk9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BpZF9zbWFwc19vcGVyYXRpb25zID0ge1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xNTI1LVxuZnMvcHJvYy90YXNrX21tdS5jOjE1MjY6Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BpZF9zbWFwc19yb2xsdXBfb3BlcmF0aW9ucyA9IHtcbmZzL3Byb2MvdGFza19tbXUuYzoxNTI3Olx0Lm9wZW5cdFx0PSBzbWFwc19yb2xsdXBfb3BlbixcbmZzL3Byb2MvdGFza19tbXUuYy0xNTI4LVx0LnJlYWRcdFx0PSBzZXFfcmVhZCxcbmZzL3Byb2MvdGFza19tbXUuYy0xNTI5LVx0Lmxsc2Vla1x0XHQ9IHNlcV9sc2VlayxcbmZzL3Byb2MvdGFza19tbXUuYzoxNTMwOlx0LnJlbGVhc2VcdD0gc21hcHNfcm9sbHVwX3JlbGVhc2UsXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTUzMS19O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTc0NAoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhIGZpcnN0LXBlcnNvbiBleHBlcnQgc3VtbWFyeToKCioqRGlnZ2luZyBpbnRvIFRhc2sgTU1VIENvbmZpZ3VyYXRpb24qKgoKUmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbXBpbGF0aW9uIGNvbmRpdGlvbnMgZm9yIGB0YXNrX21tdS5jYC4gVGhlIG1vc3QgZGlyZWN0IHJvdXRlIHRvIHRoYXQgaW5mb3JtYXRpb24gaXMsIG9mIGNvdXJzZSwgdGhlIGBmcy9wcm9jL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBsYXlzIG91dCB0aGUgcnVsZXMgZm9yIHdoaWNoIHNvdXJjZSBmaWxlcyBnZXQgY29tcGlsZWQgYW5kIGxpbmtlZCwgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgYmFzZWQgb24gdGhlIHVzdWFsIHN1c3BlY3RzIOKAkyB0aG9zZSBgQ09ORklHX2Agb3B0aW9ucyB0aGF0IGdvdmVybiB2YXJpb3VzIGtlcm5lbCBmZWF0dXJlcy4gSSYjMzk7bSBsb29raW5nIGZvciB0aGUgcHJlY2lzZSBjb25maWd1cmF0aW9uIGtub2JzIHRoYXQgZW5hYmxlIG9yIGRpc2FibGUgdGhlIGluY2x1c2lvbiBvZiBgdGFza19tbXUuY2AgaW4gdGhlIGZpbmFsIGJ1aWxkLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hlbiBhbmQgd2h5IHRoZSBrZXJuZWwgaW5jb3Jwb3JhdGVzIHRoYXQgc3BlY2lmaWMgZnVuY3Rpb25hbGl0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGFza19tbXUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9wcm9jLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9wcm9jL01ha2VmaWxlPTY9b2JqLXkgICAmIzQzOz0gcHJvYy5vXG5mcy9wcm9jL01ha2VmaWxlLTctXG5mcy9wcm9jL01ha2VmaWxlOjg6Q0ZMQUdTX3Rhc2tfbW11Lm9cdCYjNDM7PSAtV25vLW92ZXJyaWRlLWluaXRcbmZzL3Byb2MvTWFrZWZpbGUtOS1wcm9jLXlcdFx0XHQ6PSBub21tdS5vIHRhc2tfbm9tbXUub1xuZnMvcHJvYy9NYWtlZmlsZToxMDpwcm9jLSQoQ09ORklHX01NVSlcdDo9IHRhc2tfbW11Lm9cbmZzL3Byb2MvTWFrZWZpbGUtMTEtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTA0CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMzAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkNoZWNraW5nIEtlcm5lbCBDb25maWd1cmF0aW9uIE9wdGlvbnMqKgoKQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIGEgY291cGxlIG9mIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYmVmb3JlIEkgcHJvY2VlZC4gTGV0IG1lIHN0YXJ0IGJ5IGNoZWNraW5nIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGFuZCBgQ09ORklHX1BST0NfRlNgLiBUaGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aG9zZSB3b3VsZCBiZSB3aXRoaW4gYGZzL3Byb2MvS2NvbmZpZ2AuIEkmIzM5O2xsIG5lZWQgdG8gY29uZmlybSB3aGF0IHRoZSBkZXBlbmRlbmNpZXMgYXJlLCBhbmQgbWFrZSBzdXJlIHRoYXQgdGhleSBhcmUgY29ycmVjdGx5IGVuYWJsZWQgaW4gbXkgY3VycmVudCBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBmbGFncyBhbmQgaG93IHRoZXkgYXJlIHVzZWQgd2l0aGluIHRoZSBicm9hZGVyIGNvbnRleHQgb2YgdGhlIHByb2MgZmlsZXN5c3RlbS4gSXQgaXMgaW1wb3J0YW50IHRvIGtub3cgd2hpY2ggZmVhdHVyZXMgYXJlIGVuYWJsZWQsIHNpbmNlIHRoaXMgZGlyZWN0bHkgaW1wYWN0cyB0aGUgYXZhaWxhYmlsaXR5IG9mIHZhcmlvdXMgbWV0cmljcyBhbmQgZGVidWcgY2FwYWJpbGl0aWVzIGluIHRoZSBwcm9jIGZpbGVzeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1BST0NfUEFHRV9NT05JVE9SJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvS2NvbmZpZz04Mz1jb25maWcgU1lTQ1RMXG4tLVxuZnMvcHJvYy9LY29uZmlnLTEwMC1cbmZzL3Byb2MvS2NvbmZpZzoxMDE6Y29uZmlnIFBST0NfUEFHRV9NT05JVE9SXG5mcy9wcm9jL0tjb25maWctMTAyLSBcdGRlZmF1bHQgeVxuLS1cbmZzL3Byb2MvTWFrZWZpbGU9MzY9cHJvYy0kKENPTkZJR19QUklOVEspXHQmIzQzOz0ga21zZy5vXG5mcy9wcm9jL01ha2VmaWxlOjM3OnByb2MtJChDT05GSUdfUFJPQ19QQUdFX01PTklUT1IpXHQmIzQzOz0gcGFnZS5vXG5mcy9wcm9jL01ha2VmaWxlLTM4LXByb2MtJChDT05GSUdfQk9PVF9DT05GSUcpXHQmIzQzOz0gYm9vdGNvbmZpZy5vXG4tLVxuZnMvcHJvYy9iYXNlLmM9MzI4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0Z2lkX2Jhc2Vfc3R1ZmZbXSA9IHtcbi0tXG5mcy9wcm9jL2Jhc2UuYy0zMzIxLVx0UkVHKFwmIzM0O21vdW50c3RhdHNcJiMzNDssIFNfSVJVU1IsIHByb2NfbW91bnRzdGF0c19vcGVyYXRpb25zKSxcbmZzL3Byb2MvYmFzZS5jOjMzMjI6I2lmZGVmIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUlxuZnMvcHJvYy9iYXNlLmMtMzMyMy1cdFJFRyhcJiMzNDtjbGVhcl9yZWZzXCYjMzQ7LCBTX0lXVVNSLCBwcm9jX2NsZWFyX3JlZnNfb3BlcmF0aW9ucyksXG4tLVxuZnMvcHJvYy9iYXNlLmM9MzY0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0aWRfYmFzZV9zdHVmZltdID0ge1xuLS1cbmZzL3Byb2MvYmFzZS5jLTM2NzYtXHRSRUcoXCYjMzQ7bW91bnRpbmZvXCYjMzQ7LCAgU19JUlVHTywgcHJvY19tb3VudGluZm9fb3BlcmF0aW9ucyksXG5mcy9wcm9jL2Jhc2UuYzozNjc3OiNpZmRlZiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JcbmZzL3Byb2MvYmFzZS5jLTM2NzgtXHRSRUcoXCYjMzQ7Y2xlYXJfcmVmc1wmIzM0OywgU19JV1VTUiwgcHJvY19jbGVhcl9yZWZzX29wZXJhdGlvbnMpLFxuLS1cbmZzL3Byb2MvdGFza19tbXUuYz03NTY9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BpZF9tYXBzX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTc4My1cbmZzL3Byb2MvdGFza19tbXUuYzo3ODQ6I2lmZGVmIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUlxuZnMvcHJvYy90YXNrX21tdS5jLTc4NS1zdHJ1Y3QgbWVtX3NpemVfc3RhdHMge1xuLS1cbmZzL3Byb2MvdGFza19tbXUuYz0zMTcwPWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19wYWdlbWFwX29wZXJhdGlvbnMgPSB7XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTMxNzctfTtcbmZzL3Byb2MvdGFza19tbXUuYzozMTc4OiNlbmRpZiAvKiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgKi9cbmZzL3Byb2MvdGFza19tbXUuYy0zMTc5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDkyOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRXhhbWluaW5nIEtjb25maWcgQ29uZmlndXJhdGlvbiBmb3IgQ29udGV4dCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBzb21ldGhpbmcgcmVsYXRlZCB0byB0aGUgZmlsZSBzeXN0ZW0mIzM5O3MgaW50ZXJhY3Rpb24gd2l0aCBwcm9jZXNzZXMsIHJpZ2h0PyBUaGUgYGZzL3Byb2NgIHBhcnQgYWxyZWFkeSBnaXZlcyBtZSBhIHByZXR0eSBnb29kIGhpbnQgdGhhdCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCB0aGUgYC9wcm9jYCBmaWxlc3lzdGVtIGFuZCBpdHMga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGluc3RpbmN0IHNheXMgYSBwb3RlbnRpYWwgaXNzdWUgY291bGQgYmUgcmVsYXRlZCB0byBzb21lIGNvbnRyb2wgb3IgZmVhdHVyZSB3aGljaCBpcyBub3QgZXhwb3NlZCB0aGUgc3RhbmRhcmQgd2F5LCBhbmQgaXMgZXhwb3NlZCwgaW5zdGVhZCwgYnkgYSBoaWRkZW4gY29uZmlndXJhdGlvbiBvcHRpb24uIExldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGF0IGBmcy9wcm9jL0tjb25maWdgIG5lYXIgbGluZSAxMDAuIEdvaW5nIGRpcmVjdGx5IHRvIHRoYXQgbG9jYXRpb24sIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgYSBjb25kaXRpb25hbCBkZWZpbml0aW9uIHJlbGF0ZWQgdG8gdGhlIHNwZWNpZmljIGZlYXR1cmUgSSYjMzk7bSB0aGlua2luZyBhYm91dCwgb3IgcGVyaGFwcyBzb21lIHN1cnJvdW5kaW5nIGNvbnRleHQgdGhhdCBwcm92aWRlcyBjbHVlcy4gSSBtaWdodCBiZSBsb29raW5nIGZvciBhIGRlcGVuZGVuY3kgdGhhdCBJJiMzOTttIG1pc3NpbmcsIGEgcG90ZW50aWFsbHkgZGlzYWJsZWQgb3B0aW9uLCBvciBhIGdlbmVyYWwgYXJlYSBvZiBjb25jZXJuIHdpdGhpbiB0aGUgcHJvYyBmaWxlc3lzdGVtIHRoYXQgbGluZXMgdXAgd2l0aCB0aGUgY3VycmVudCBjb250ZXh0LiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIEtjb25maWcgZmlsZSB0ZWxscyB1cy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtmcy9wcm9jL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA5NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDk1Olx0XHQgIG9wdGlvbiB3aWxsIGVubGFyZ2UgdGhlIGtlcm5lbCBieSBhdCBsZWFzdCA4IEtCLlxuICA5NjpcdFxuICA5NzpcdFx0ICBBcyBpdCBpcyBnZW5lcmFsbHkgYSBnb29kIHRoaW5nLCB5b3Ugc2hvdWxkIHNheSBZIGhlcmUgdW5sZXNzXG4gIDk4Olx0XHQgIGJ1aWxkaW5nIGEga2VybmVsIGZvciBpbnN0YWxsL3Jlc2N1ZSBkaXNrcyBvciB5b3VyIHN5c3RlbSBpcyB2ZXJ5XG4gIDk5Olx0XHQgIGxpbWl0ZWQgaW4gbWVtb3J5LlxuIDEwMDpcdFxuIDEwMTpcdGNvbmZpZyBQUk9DX1BBR0VfTU9OSVRPUlxuIDEwMjpcdCBcdGRlZmF1bHQgeVxuIDEwMzpcdFx0ZGVwZW5kcyBvbiBQUk9DX0ZTIFx1MDAyNlx1MDAyNiBNTVVcbiAxMDQ6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIC9wcm9jIHBhZ2UgbW9uaXRvcmluZ1wmIzM0OyBpZiBFWFBFUlRcbiAxMDU6XHQgXHRoZWxwXG4gMTA2Olx0XHQgIFZhcmlvdXMgL3Byb2MgZmlsZXMgZXhpc3QgdG8gbW9uaXRvciBwcm9jZXNzIG1lbW9yeSB1dGlsaXphdGlvbjpcbiAxMDc6XHRcdCAgL3Byb2MvcGlkL3NtYXBzLCAvcHJvYy9waWQvY2xlYXJfcmVmcywgL3Byb2MvcGlkL3BhZ2VtYXAsXG4gMTA4Olx0XHQgIC9wcm9jL2twYWdlY291bnQsIGFuZCAvcHJvYy9rcGFnZWZsYWdzLiBEaXNhYmxpbmcgdGhlc2VcbiAxMDk6XHRcdCAgaW50ZXJmYWNlcyB3aWxsIHJlZHVjZSB0aGUgc2l6ZSBvZiB0aGUga2VybmVsIGJ5IGFwcHJveGltYXRlbHkgNGtiLlxuIDExMDpcdFxuIDExMTpcdGNvbmZpZyBQUk9DX0NISUxEUkVOXG4gMTEyOlx0XHRib29sIFwmIzM0O0luY2x1ZGUgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3Rhc2svXHUwMDNjdGlkXHUwMDNlL2NoaWxkcmVuIGZpbGVcJiMzNDtcbiAxMTM6XHRcdGRlcGVuZHMgb24gUFJPQ19GU1xuIDExNDpcdFx0ZGVmYXVsdCBuXG4gMTE1Olx0XHRoZWxwXG4gMTE2Olx0XHQgIFByb3ZpZGVzIGEgZmFzdCB3YXkgdG8gcmV0cmlldmUgZmlyc3QgbGV2ZWwgY2hpbGRyZW4gcGlkcyBvZiBhIHRhc2suIFNlZVxuIDExNzpcdFx0ICBcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3RcdTAwM2UgZm9yIG1vcmUgaW5mb3JtYXRpb24uXG4gMTE4Olx0XG4gMTE5Olx0XHQgIFNheSBZIGlmIHlvdSBhcmUgcnVubmluZyBhbnkgdXNlci1zcGFjZSBzb2Z0d2FyZSB3aGljaCB0YWtlcyBiZW5lZml0IGZyb21cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2MTMKCQkJCQkJCW91dHB1dDogMTYxCgkJCQkJCQl0aG91Z2h0czogNTMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIGEgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0KioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGFuZCBpdCBzZWVtcyBsaWtlIGBQUk9DX0ZTYCwgYFBST0NfUEFHRV9NT05JVE9SYCwgYW5kIHBvc3NpYmx5IGBNTVVgIGFyZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBhcmVhIEkmIzM5O20gY29uc2lkZXJpbmcuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBrZXkgZnVuY3Rpb25zIGhlcmUuCgpMZXQmIzM5O3MgY2FyZWZ1bGx5IGV4YW1pbmUgYEZvY3VzU3ltYm9sc2AgdG8gY29uZmlybSBteSB0aGlua2luZy4gSXQgbG9va3MgbGlrZSB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIHdpdGhpbiBgZnMvcHJvYy90YXNrX21tdS5jYCBhcmUgd2hhdCBJIG5lZWQgdG8gY29uY2VudHJhdGUgb24uIFNwZWNpZmljYWxseSwgSSBzZWUgY2hhbmdlcyB0bzoKCiogICBgc2hvd19zbWFwc19yb2xsdXBgOiBUaGUgbWFpbiBsb2dpYyBoZXJlIGhhcyBiZWVuIHJlZmFjdG9yZWQsIHNwZWNpZmljYWxseSBpbnZvbHZpbmcgVk1BIGxvY2tzLCBgcHJvY19nZXRfdm1hYCwgYW5kIHBvdGVudGlhbCBjb250ZW50aW9uIHJldHJ5IG1lY2hhbmlzbXMuCiogICBgc21hcF9nYXRoZXJfc3RhdHNgOiBUaGlzIG9uZSBoYXMgc2VlbiBjaGFuZ2VzIHRvIGl0cyBib3VuZHMgY2hlY2ssIHBhcnRpYWwgVk1BIGdhdGhlcmluZywgYW5kIHRoZSBjYWxsIHRvIGB3YWxrX3BhZ2VfcmFuZ2Vfdm1hYC4KKiAgIGBzaG93X3NtYXBgOiBUaGlzIGFjdHMgYXMgYSBjYWxsZXIgdG8gYHNtYXBfZ2F0aGVyX3N0YXRzYCBhbmQgdXNlcyBgdm1hLSZndDt2bV9zdGFydGAuCiogICBgbV9zdGFydGAsIGBtX3N0b3BgOiBTaW1wbGlmaWVkIGxvY2tpbmcgbG9naWMuCiogICBgZG9fcHJvY21hcF9xdWVyeWA6IFRoaXMgaGFzIHNpbXBsaWZpZWQgdGVhcmRvd24vbG9jayBsb2dpYy4KKiAgIFRoZXJlJiMzOTtzIGFsc28gc29tZSBzdXBwb3J0aW5nIGZ1bmN0aW9ucyBzdWNoIGFzIGBmYWxsYmFja190b19tbWFwX2xvY2tgLCBgZHJvcF9yY3VgLCBgcmVhY3F1aXJlX3JjdWAsIGB1bmxvY2tfY3R4X21tYCwgYHVubG9ja19jdHhfdm1hYCwgYHJlc2V0X2xvY2tfY3R4YCwgYGNsZWFyX3NvZnRfZGlydHlgLCBgY2xlYXJfc29mdF9kaXJ0eV9wbWRgLCBgcHRlX2lzX3Bpbm5lZGAgYW5kIGBtYWtlX3BtZWAgKHVuLWlubGluZWQpLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGNob29zZSB0aGUgbGVhc3QgdWJpcXVpdG91cyBmdW5jdGlvbnMgdGhhdCBhcmUgcmVsYXRlZCB0byBzcGVjaWZpYyBmZWF0dXJlcy4gTG9va2luZyBhdCB0aGF0IGxpc3QsIEkmIzM5O20gZmFpcmx5IGNlcnRhaW4gdGhlIGZvbGxvd2luZyBmaXQgdGhlIGJpbGwsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIHBhcnRzIG9mIHRoZSBrZXJuZWwgdXN1YWxseSB3b3JrOgoKKiAgIGBzaG93X3NtYXBzX3JvbGx1cGAKKiAgIGBzbWFwX2dhdGhlcl9zdGF0c2AKKiAgIGBzaG93X3NtYXBgCiogICBgZG9fcHJvY21hcF9xdWVyeWAKCk5vdywgYW0gSSByaWdodD8gQXJlIHRoZXNlIHJlYWxseSBub24tdWJpcXVpdG91cz8gQmluZ28sIHllcyEgVGhlc2UgZnVuY3Rpb25zIGFyZSB2ZXJ5IHNwZWNpZmljIHRvIHRoZSByb3V0aW5lcyB0aGF0IGFyZSBpbnZvbHZlZCBpbiByZWFkaW5nIGAvcHJvYy8mbHQ7cGlkJmd0Oy9zbWFwc19yb2xsdXBgLCBgL3Byb2MvJmx0O3BpZCZndDsvc21hcHNgLCBhbmQgdGhlIGBQUk9DTUFQX1FVRVJZYCBpb2N0bC4KClNvLCBsZXQgbWUgcmV2aWV3IGV2ZXJ5dGhpbmcgdG8gbWFrZSBzdXJlIEkmIzM5O20gc29saWQ6CgoqICAgKipXb3J0aEZ1enppbmcqKjogRGVmaW5pdGVseSB0cnVlLiBXZSBoYXZlIHJlZmFjdG9yZWQgYW5kIG1vZGlmaWVkIGNvZGUgd2l0aGluIGBtbS9wcm9jZnNgLCBhbmQgd2UgYXJlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBjaGFuZ2VzIGluIGBzaG93X3NtYXBzX3JvbGx1cGAgYW5kIFZNQSB3YWxraW5nIGluIGBzbWFwX2dhdGhlcl9zdGF0c2AuIFRoZXNlIGFyZSBwZXJmZWN0LgoqICAgKipFbmFibGVDb25maWdzKio6IEkmIzM5O20gZ29pbmcgd2l0aCBgWyYjMzQ7UFJPQ19GUyYjMzQ7LCAmIzM0O1BST0NfUEFHRV9NT05JVE9SJiMzNDtdYCBoZXJlLiBgTU1VYCBtaWdodCBiZSByZXF1aXJlZCwgYnV0IHRoZXNlIHR3byBhcmUgcHJldHR5IHN0YW5kYXJkLgoqICAgKipGb2N1c1N5bWJvbHMqKjogYFsmIzM0O3Nob3dfc21hcHNfcm9sbHVwJiMzNDssICYjMzQ7c21hcF9nYXRoZXJfc3RhdHMmIzM0OywgJiMzNDtzaG93X3NtYXAmIzM0OywgJiMzNDtkb19wcm9jbWFwX3F1ZXJ5JiMzNDtdYC4KKiAgICoqUmVhc29uaW5nKio6IEkgdGhpbmsgdGhpcyBleHBsYW5hdGlvbiBzaG91bGQgYmUgc3VmZmljaWVudC4KCkkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOTozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPQ19GUyYjMzQ7LAogICAgJiMzNDtQUk9DX1BBR0VfTU9OSVRPUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nob3dfc21hcHNfcm9sbHVwJiMzNDssCiAgICAmIzM0O3NtYXBfZ2F0aGVyX3N0YXRzJiMzNDssCiAgICAmIzM0O3Nob3dfc21hcCYjMzQ7LAogICAgJiMzNDtkb19wcm9jbWFwX3F1ZXJ5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIC9wcm9jL1x1MDAzY3BpZFx1MDAzZS9zbWFwc19yb2xsdXAgYW5kIHNtYXBzIGl0ZXJhdGlvbiBsb2dpYyBpbiB0YXNrX21tdS5jIHRvIHVzZSBwZXItVk1BIGxvY2tzIHVuZGVyIFJDVSBpbnN0ZWFkIG9mIGFjcXVpcmluZyBtbWFwX2xvY2sgdXBmcm9udCwgYWRqdXN0cyBwYXJ0aWFsIFZNQSBzdGF0IGdhdGhlcmluZyBpbiBzbWFwX2dhdGhlcl9zdGF0cygpLCBhbmQgc2ltcGxpZmllcyBwcm9jX21hcHMgbG9ja2luZyBoZWxwZXJzLiBUaGlzIHJlYWNoYWJsZSBjb3JlIE1NL3Byb2NmcyBsb2dpYyBpcyB3b3J0aCBmdXp6aW5nIGZvciBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpc3N1ZXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1BST0NfRlMmIzM0OywKICAgICYjMzQ7UFJPQ19QQUdFX01PTklUT1ImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaG93X3NtYXBzX3JvbGx1cCYjMzQ7LAogICAgJiMzNDtzbWFwX2dhdGhlcl9zdGF0cyYjMzQ7LAogICAgJiMzNDtzaG93X3NtYXAmIzM0OywKICAgICYjMzQ7ZG9fcHJvY21hcF9xdWVyeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyAvcHJvYy9cdTAwM2NwaWRcdTAwM2Uvc21hcHNfcm9sbHVwIGFuZCBzbWFwcyBpdGVyYXRpb24gbG9naWMgaW4gdGFza19tbXUuYyB0byB1c2UgcGVyLVZNQSBsb2NrcyB1bmRlciBSQ1UgaW5zdGVhZCBvZiBhY3F1aXJpbmcgbW1hcF9sb2NrIHVwZnJvbnQsIGFkanVzdHMgcGFydGlhbCBWTUEgc3RhdCBnYXRoZXJpbmcgaW4gc21hcF9nYXRoZXJfc3RhdHMoKSwgYW5kIHNpbXBsaWZpZXMgcHJvY19tYXBzIGxvY2tpbmcgaGVscGVycy4gVGhpcyByZWFjaGFibGUgY29yZSBNTS9wcm9jZnMgbG9naWMgaXMgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgaXNzdWVzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOTozODwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjM4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGxvY2tpbmcgYW5kIGl0ZXJhdGlvbiBsb2dpYyBpbiAvcHJvYy9cdTAwM2NwaWRcdTAwM2Uvc21hcHNfcm9sbHVwIGFuZCByZWxhdGVkIHRhc2tfbW11LmMgZnVuY3Rpb25zIChtaWdyYXRpbmcgc2hvd19zbWFwc19yb2xsdXAgdG8gdXNlIHBlci1WTUEgbG9ja2luZyB2aWEgcHJvY19nZXRfdm1hIGFuZCBzaW1wbGlmeWluZyBsb2NraW5nIGNvbnRleHQgaGVscGVyIGZ1bmN0aW9ucykuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHN0YXRpc3RpY3Mgc3RydWN0dXJlcyAoZS5nLiwgc3RydWN0IG1lbV9zaXplX3N0YXRzIG1zcyA9IHt9KSBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGFuZCBvdXRwdXQgaXMgZm9ybWF0dGVkIGFzIEFTQ0lJIHRleHQgaW50byBzZXFfZmlsZSBidWZmZXJzLiBUaGVyZSBhcmUgbm8gbmV3IG9yIG1vZGlmaWVkIHJhdyBzdHJ1Y3QgY29waWVzIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBvciBwYWRkaW5nLCBhbmQgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBjb25jdXJyZW5jeSBvciBsaWZldGltZSBpc3N1ZXMgaW50cm9kdWNlZCBieSBjaGFuZ2VzIHRvIFZNQSBsb2NraW5nL1JDVSB0cmF2ZXJzYWwgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDI1NWE3YWNiYTdiOGJmMWI3NDg3ZmIxNTkwNzYwMDYwZTQ3ODkwYjQKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIFNlcCA3IDA5OjM4OjA4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvcHJvYy90YXNrX21tdS5jIGIvZnMvcHJvYy90YXNrX21tdS5jCmluZGV4IGU2NzFiNGZkOGRlZGQuLjY0MWExNTViMGM2MTMgMTAwNjQ0Ci0tLSBhL2ZzL3Byb2MvdGFza19tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9wcm9jL3Rhc2tfbW11LmMKQEAgLTEzMCwyOCAmIzQzOzEzMCwxMiBAQCBzdGF0aWMgdm9pZCByZWxlYXNlX3Rhc2tfbWVtcG9saWN5KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdikKIH0KICNlbmRpZgogCi1zdGF0aWMgaW5saW5lIGludCBsb2NrX2N0eF9tbShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKLXsKLQlpbnQgcmV0ID0gbW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobG9ja19jdHgtJmd0O21tKTsKLQotCWlmICghcmV0KQotCQlsb2NrX2N0eC0mZ3Q7bW1hcF9sb2NrZWQgPSB0cnVlOwotCi0JcmV0dXJuIHJldDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpCiYjNDM7c3RhdGljIHZvaWQgdW5sb2NrX2N0eF9tbShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKIHsKIAltbWFwX3JlYWRfdW5sb2NrKGxvY2tfY3R4LSZndDttbSk7CiAJbG9ja19jdHgtJmd0O21tYXBfbG9ja2VkID0gZmFsc2U7CiB9CiAKLXN0YXRpYyB2b2lkIHJlc2V0X2xvY2tfY3R4KHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KQotewotCWxvY2tfY3R4LSZndDtsb2NrZWRfdm1hID0gTlVMTDsKLQlsb2NrX2N0eC0mZ3Q7bW1hcF9sb2NrZWQgPSBmYWxzZTsKLX0KLQogc3RhdGljIHZvaWQgdW5sb2NrX2N0eF92bWEoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpCiB7CiAJaWYgKGxvY2tfY3R4LSZndDtsb2NrZWRfdm1hKSB7CkBAIC0xNjAsMjMgJiM0MzsxNDQsMTAgQEAgc3RhdGljIHZvaWQgdW5sb2NrX2N0eF92bWEoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpCiAJfQogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgbG9ja192bWFfcmFuZ2Uoc3RydWN0IHNlcV9maWxlICptLAotCQkJCSAgc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpCi17Ci0JcmN1X3JlYWRfbG9jaygpOwotCXJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTsKLQotCXJldHVybiB0cnVlOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX3ZtYV9yYW5nZShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKJiM0MztzdGF0aWMgdm9pZCByZXNldF9sb2NrX2N0eChzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKIHsKLQlpZiAobG9ja19jdHgtJmd0O21tYXBfbG9ja2VkKSB7Ci0JCXVubG9ja19jdHhfbW0obG9ja19jdHgpOwotCX0gZWxzZSB7Ci0JCXVubG9ja19jdHhfdm1hKGxvY2tfY3R4KTsKLQkJcmN1X3JlYWRfdW5sb2NrKCk7Ci0JfQomIzQzOwlsb2NrX2N0eC0mZ3Q7bG9ja2VkX3ZtYSA9IE5VTEw7CiYjNDM7CWxvY2tfY3R4LSZndDttbWFwX2xvY2tlZCA9IGZhbHNlOwogfQogCiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnZXRfbmV4dF92bWEoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LApAQCAtMTk2LDcgJiM0MzsxNjcsNyBAQCBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnZXRfbmV4dF92bWEoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LAogCXJldHVybiB2bWE7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBmYWxsYmFja190b19tbWFwX2xvY2soc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LAomIzQzO3N0YXRpYyBib29sIGZhbGxiYWNrX3RvX21tYXBfbG9jayhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsCiAJCQkJCSBsb2ZmX3QgcG9zKQogewogCXN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4ID0gJmFtcDtwcml2LSZndDtsb2NrX2N0eDsKQEAgLTIxMyw3ICYjNDM7MTg0LDcgQEAgc3RhdGljIGlubGluZSBib29sIGZhbGxiYWNrX3RvX21tYXBfbG9jayhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsCiAJcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBkcm9wX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiYjNDM7c3RhdGljIHZvaWQgZHJvcF9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KQogewogCWlmIChwcml2LSZndDtsb2NrX2N0eC5tbWFwX2xvY2tlZCkKIAkJcmV0dXJuOwpAQCAtMjIxLDcgJiM0MzsxOTIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHJvcF9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KQogCXJjdV9yZWFkX3VubG9jaygpOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhY3F1aXJlX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiYjNDM7c3RhdGljIHZvaWQgcmVhY3F1aXJlX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiB7CiAJaWYgKHByaXYtJmd0O2xvY2tfY3R4Lm1tYXBfbG9ja2VkKQogCQlyZXR1cm47CkBAIC0yODYsMTMgJiM0MzsyNTcsOCBAQCBzdGF0aWMgdm9pZCAqbV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcHBvcykKIAkJcmV0dXJuIE5VTEw7CiAJfQogCi0JaWYgKCFsb2NrX3ZtYV9yYW5nZShtLCBsb2NrX2N0eCkpIHsKLQkJbW1wdXQobW0pOwotCQlwdXRfdGFza19zdHJ1Y3QocHJpdi0mZ3Q7dGFzayk7Ci0JCXByaXYtJmd0O3Rhc2sgPSBOVUxMOwotCQlyZXR1cm4gRVJSX1BUUigtRUlOVFIpOwotCX0KLQomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTsKIAkvKgogCSAqIFJlc2V0IGN1cnJlbnQgcG9zaXRpb24gaWYgbGFzdF9hZGRyIHdhcyBzZXQgYmVmb3JlCiAJICogYW5kIGl0JiMzOTtzIG5vdCBhIHNlbnRpbmVsLgpAQCAtMzI1LDcgJiM0MzsyOTEsMTIgQEAgc3RhdGljIHZvaWQgbV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdikKIAkJcmV0dXJuOwogCiAJcmVsZWFzZV90YXNrX21lbXBvbGljeShwcml2KTsKLQl1bmxvY2tfdm1hX3JhbmdlKCZhbXA7cHJpdi0mZ3Q7bG9ja19jdHgpOwomIzQzOwlpZiAocHJpdi0mZ3Q7bG9ja19jdHgubW1hcF9sb2NrZWQpIHsKJiM0MzsJCXVubG9ja19jdHhfbW0oJmFtcDtwcml2LSZndDtsb2NrX2N0eCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl1bmxvY2tfY3R4X3ZtYSgmYW1wO3ByaXYtJmd0O2xvY2tfY3R4KTsKJiM0MzsJCXJjdV9yZWFkX3VubG9jaygpOwomIzQzOwl9CiAJbW1wdXQobW0pOwogCXB1dF90YXNrX3N0cnVjdChwcml2LSZndDt0YXNrKTsKIAlwcml2LSZndDt0YXNrID0gTlVMTDsKQEAgLTUxOCwyMSAmIzQzOzQ4OSw2IEBAIHN0YXRpYyBpbnQgcGlkX21hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSkKIAkJUFJPQ01BUF9RVUVSWV9WTUFfRkxBR1MJCQkJXAogKQogCi1zdGF0aWMgaW50IHF1ZXJ5X3ZtYV9zZXR1cChzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCkKLXsKLQlyZXNldF9sb2NrX2N0eChsb2NrX2N0eCk7Ci0KLQlyZXR1cm4gMDsKLX0KLQotc3RhdGljIHZvaWQgcXVlcnlfdm1hX3RlYXJkb3duKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KQotewotCWlmIChsb2NrX2N0eC0mZ3Q7bW1hcF9sb2NrZWQpCi0JCXVubG9ja19jdHhfbW0obG9ja19jdHgpOwotCWVsc2UKLQkJdW5sb2NrX2N0eF92bWEobG9ja19jdHgpOwotfQotCiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpxdWVyeV92bWFfZmluZF9ieV9hZGRyKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4LAogCQkJCQkJICAgICB1bnNpZ25lZCBsb25nIGFkZHIpCiB7CkBAIC02NTMsMTIgJiM0Mzs2MDksNyBAQCBzdGF0aWMgaW50IGRvX3Byb2NtYXBfcXVlcnkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHZvaWQgX191c2VyICp1YXJnKQogCWlmICghbW0gfHwgIW1tZ2V0X25vdF96ZXJvKG1tKSkKIAkJcmV0dXJuIC1FU1JDSDsKIAotCWVyciA9IHF1ZXJ5X3ZtYV9zZXR1cCgmYW1wO2xvY2tfY3R4KTsKLQlpZiAoZXJyKSB7Ci0JCW1tcHV0KG1tKTsKLQkJcmV0dXJuIGVycjsKLQl9Ci0KJiM0MzsJcmVzZXRfbG9ja19jdHgoJmFtcDtsb2NrX2N0eCk7CiAJdm1hID0gcXVlcnlfbWF0Y2hpbmdfdm1hKCZhbXA7bG9ja19jdHgsIGthcmcucXVlcnlfYWRkciwga2FyZy5xdWVyeV9mbGFncyk7CiAJaWYgKElTX0VSUih2bWEpKSB7CiAJCWVyciA9IFBUUl9FUlIodm1hKTsKQEAgLTczMiw3ICYjNDM7NjgzLDEwIEBAIHN0YXRpYyBpbnQgZG9fcHJvY21hcF9xdWVyeShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdm9pZCBfX3VzZXIgKnVhcmcpCiAJCXZtX2ZpbGUgPSBnZXRfZmlsZSh2bWEtJmd0O3ZtX2ZpbGUpOwogCiAJLyogdW5sb2NrIHZtYSBvciBtbWFwX2xvY2ssIGFuZCBwdXQgbW1fc3RydWN0IGJlZm9yZSBjb3B5aW5nIGRhdGEgdG8gdXNlciAqLwotCXF1ZXJ5X3ZtYV90ZWFyZG93bigmYW1wO2xvY2tfY3R4KTsKJiM0MzsJaWYgKGxvY2tfY3R4Lm1tYXBfbG9ja2VkKQomIzQzOwkJdW5sb2NrX2N0eF9tbSgmYW1wO2xvY2tfY3R4KTsKJiM0MzsJZWxzZQomIzQzOwkJdW5sb2NrX2N0eF92bWEoJmFtcDtsb2NrX2N0eCk7CiAJbW1wdXQobW0pOwogCiAJaWYgKGthcmcuYnVpbGRfaWRfc2l6ZSkgewpAQCAtNzczLDcgJiM0Mzs3MjcsMTAgQEAgc3RhdGljIGludCBkb19wcm9jbWFwX3F1ZXJ5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB2b2lkIF9fdXNlciAqdWFyZykKIAlyZXR1cm4gMDsKIAogb3V0OgotCXF1ZXJ5X3ZtYV90ZWFyZG93bigmYW1wO2xvY2tfY3R4KTsKJiM0MzsJaWYgKGxvY2tfY3R4Lm1tYXBfbG9ja2VkKQomIzQzOwkJdW5sb2NrX2N0eF9tbSgmYW1wO2xvY2tfY3R4KTsKJiM0MzsJZWxzZQomIzQzOwkJdW5sb2NrX2N0eF92bWEoJmFtcDtsb2NrX2N0eCk7CiAJbW1wdXQobW0pOwogb3V0X2ZpbGU6CiAJaWYgKHZtX2ZpbGUpCkBAIC0xMjYzLDcgJiM0MzsxMjIwLDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBzbWFwc19zaG1lbV93YWxrX3ZtYV9sb2NrX29wcyA9IHsKIAkud2Fsa19sb2NrCQk9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSwKIH07CiAKLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICoKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICoKIGdldF9zbWFwc193YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiB7CiAJaWYgKHByaXYtJmd0O2xvY2tfY3R4Lm1tYXBfbG9ja2VkKQpAQCAtMTI3MSw3ICYjNDM7MTIyOCw3IEBAIGdldF9zbWFwc193YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiAJcmV0dXJuICZhbXA7c21hcHNfd2Fsa192bWFfbG9ja19vcHM7CiB9CiAKLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICoKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICoKIGdldF9zbWFwc19zaG1lbV93YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiB7CiAJaWYgKHByaXYtJmd0O2xvY2tfY3R4Lm1tYXBfbG9ja2VkKQpAQCAtMTI3OSwyMCAmIzQzOzEyMzYsMjcgQEAgZ2V0X3NtYXBzX3NobWVtX3dhbGtfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdikKIAlyZXR1cm4gJmFtcDtzbWFwc19zaG1lbV93YWxrX3ZtYV9sb2NrX29wczsKIH0KIAotLyoKLSAqIEdhdGhlciBtZW0gc3RhdHMgZnJvbSBAdm1hIHdpdGggdGhlIGluZGljYXRlZCBiZWdpbm5pbmcKLSAqIGFkZHJlc3MgQHN0YXJ0LCBhbmQga2VlcCB0aGVtIGluIEBtc3MuCiYjNDM7LyoqCiYjNDM7ICogc21hcF9nYXRoZXJfc3RhdHMoKSAtIEdhdGhlciBtZW0gc3RhdHMgZnJvbSBAdm1hLgomIzQzOyAqIEBwcml2OiBwcm9jIG1hcHMgcHJpdmF0ZSBzdGF0ZS4KJiM0MzsgKiBAdm1hOiBUaGUgVk1BIHRvIGdhdGhlciBzdGF0cyBmb3IuCiYjNDM7ICogQG1zczogVGhlIGFjY3VtdWxhdGVkIHN0YXRzLgomIzQzOyAqIEBzdGFydDogVGhlIGFkZHJlc3MgZnJvbSB3aGljaCB0byBzdGFydC4KICAqCi0gKiBVc2Ugdm1fc3RhcnQgb2YgQHZtYSBhcyB0aGUgYmVnaW5uaW5nIGFkZHJlc3MgaWYgQHN0YXJ0IGlzIDAuCiYjNDM7ICogVGhpcyBnYXRoZXJzIHN0YXRzIGZvciB0aGUgd2hvbGUgb2YgdGhlIFZNQSB1bmxlc3MgdGhlIGxvY2sgd2FzIGRyb3BwZWQKJiM0MzsgKiBhbmQgVk1BIGdyZXcgb3IgZ290IG1lcmdlZCBhbmQgd2UgZm91bmQgaXQgYWdhaW4sIGluIHdoaWNoIGNhc2Ugd2Ugb25seQomIzQzOyAqIGdhdGhlciBzdGF0cyBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgVk1BIHJhbmdlLgogICovCiBzdGF0aWMgdm9pZCBzbWFwX2dhdGhlcl9zdGF0cyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsCiAJCQkgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKLQkJCSAgICAgIHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyAqbXNzLCB1bnNpZ25lZCBsb25nIHN0YXJ0KQomIzQzOwkJCSAgICAgIHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyAqbXNzLAomIzQzOwkJCSAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQpCiB7CiAJY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpvcHMgPSBnZXRfc21hcHNfd2Fsa19vcHMocHJpdik7CiYjNDM7CWNvbnN0IGJvb2wgaXNfcGFydGlhbCA9IHN0YXJ0ICZndDsgdm1hLSZndDt2bV9zdGFydDsKIAogCS8qIEludmFsaWQgc3RhcnQgKi8KLQlpZiAoc3RhcnQgJmd0Oz0gdm1hLSZndDt2bV9lbmQpCiYjNDM7CWlmIChzdGFydCAmbHQ7IHZtYS0mZ3Q7dm1fc3RhcnQgfHwgc3RhcnQgJmd0Oz0gdm1hLSZndDt2bV9lbmQpCiAJCXJldHVybjsKIAogCWlmICh2bWEgPT0gZ2V0X2dhdGVfdm1hKHByaXYtJmd0O2xvY2tfY3R4Lm1tKSkKQEAgLTEzMTIsMjAgJiM0MzsxMjc2LDE3IEBAIHN0YXRpYyB2b2lkIHNtYXBfZ2F0aGVyX3N0YXRzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiwKIAkJICogVW5sZXNzIHdlIGtub3cgdGhhdCB0aGUgc2htZW0gb2JqZWN0IChvciB0aGUgcGFydCBtYXBwZWQgYnkKIAkJICogb3VyIFZNQSkgaGFzIG5vIHN3YXBwZWQgb3V0IHBhZ2VzIGF0IGFsbC4KIAkJICovCi0JCXVuc2lnbmVkIGxvbmcgc2htZW1fc3dhcHBlZCA9IHNobWVtX3N3YXBfdXNhZ2Uodm1hKTsKJiM0MzsJCWNvbnN0IHVuc2lnbmVkIGxvbmcgc2htZW1fc3dhcHBlZCA9IHNobWVtX3N3YXBfdXNhZ2Uodm1hKTsKJiM0MzsJCWNvbnN0IGJvb2wgc2hhcmVkX29yX3JvID0gdm1hX3Rlc3Qodm1hLCBWTUFfU0hBUkVEX0JJVCkgfHwKJiM0MzsJCQkJCSAgIXZtYV90ZXN0KHZtYSwgVk1BX1dSSVRFX0JJVCk7CiAKLQkJaWYgKCFzdGFydCAmYW1wOyZhbXA7ICghc2htZW1fc3dhcHBlZCB8fCAodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9TSEFSRUQpIHx8Ci0JCQkJCSEodm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9XUklURSkpKSB7CiYjNDM7CQlpZiAoIWlzX3BhcnRpYWwgJmFtcDsmYW1wOyAoIXNobWVtX3N3YXBwZWQgfHwgc2hhcmVkX29yX3JvKSkKIAkJCW1zcy0mZ3Q7c3dhcCAmIzQzOz0gc2htZW1fc3dhcHBlZDsKLQkJfSBlbHNlIHsKJiM0MzsJCWVsc2UKIAkJCW9wcyA9IGdldF9zbWFwc19zaG1lbV93YWxrX29wcyhwcml2KTsKLQkJfQogCX0KIAotCWlmICghc3RhcnQpCi0JCXdhbGtfcGFnZV92bWEodm1hLCBvcHMsIG1zcyk7Ci0JZWxzZQotCQl3YWxrX3BhZ2VfcmFuZ2Uodm1hLSZndDt2bV9tbSwgc3RhcnQsIHZtYS0mZ3Q7dm1fZW5kLCBvcHMsIG1zcyk7CiYjNDM7CXdhbGtfcGFnZV9yYW5nZV92bWEodm1hLCBzdGFydCwgdm1hLSZndDt2bV9lbmQsIG9wcywgbXNzKTsKIAogCXJlYWNxdWlyZV9yY3UocHJpdik7CiB9CkBAIC0xMzgwLDcgJiM0MzsxMzQxLDcgQEAgc3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gdjsKIAlzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgbXNzID0ge307CiAKLQlzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsICZhbXA7bXNzLCAwKTsKJiM0MzsJc21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCAmYW1wO21zcywgdm1hLSZndDt2bV9zdGFydCk7CiAKIAlzaG93X21hcF92bWEobSwgdm1hKTsKIApAQCAtMTQwNSwxMiAmIzQzOzEzNjYsMTQgQEAgc3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogc3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiB7CiAJc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2ID0gbS0mZ3Q7cHJpdmF0ZTsKJiM0MzsJc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHggPSAmYW1wO3ByaXYtJmd0O2xvY2tfY3R4OwomIzQzOwlzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGxvY2tfY3R4LSZndDttbTsKIAlzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgbXNzID0ge307Ci0Jc3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LSZndDtsb2NrX2N0eC5tbTsKJiM0MzsJdW5zaWduZWQgbG9uZyBsYXN0X3ZtYV9lbmQgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIHZtYV9zdGFydCA9IDA7CiAJc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7Ci0JdW5zaWduZWQgbG9uZyB2bWFfc3RhcnQgPSAwLCBsYXN0X3ZtYV9lbmQgPSAwOwomIzQzOwlsb2ZmX3QgcG9zID0gMDsKIAlpbnQgcmV0ID0gMDsKLQlWTUFfSVRFUkFUT1Iodm1pLCBtbSwgMCk7CiAKIAlwcml2LSZndDt0YXNrID0gZ2V0X3Byb2NfdGFzayhwcml2LSZndDtpbm9kZSk7CiAJaWYgKCFwcml2LSZndDt0YXNrKQpAQCAtMTQyMSw4OSAmIzQzOzEzODQsNjAgQEAgc3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpCiAJCWdvdG8gb3V0X3B1dF90YXNrOwogCX0KIAotCXJldCA9IGxvY2tfY3R4X21tKCZhbXA7cHJpdi0mZ3Q7bG9ja19jdHgpOwotCWlmIChyZXQpCi0JCWdvdG8gb3V0X3B1dF9tbTsKLQogCWhvbGRfdGFza19tZW1wb2xpY3kocHJpdik7Ci0Jdm1hID0gdm1hX25leHQoJmFtcDt2bWkpOwomIzQzOwlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CXJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTsKIAomIzQzOwl2bWFfaXRlcl9pbml0KCZhbXA7cHJpdi0mZ3Q7aXRlciwgbW0sIDApOwomIzQzOwl2bWEgPSBwcm9jX2dldF92bWEobSwgJmFtcDtwb3MpOwogCWlmICh1bmxpa2VseSghdm1hKSkKIAkJZ290byBlbXB0eV9zZXQ7CiAKLQl2bWFfc3RhcnQgPSB2bWEtJmd0O3ZtX3N0YXJ0OwotCWRvIHsKLQkJc21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCAmYW1wO21zcywgMCk7Ci0JCWxhc3Rfdm1hX2VuZCA9IHZtYS0mZ3Q7dm1fZW5kOwomIzQzOwlpZiAoIUlTX0VSUih2bWEpICZhbXA7JmFtcDsgdm1hICE9IGdldF9nYXRlX3ZtYShsb2NrX2N0eC0mZ3Q7bW0pKQomIzQzOwkJdm1hX3N0YXJ0ID0gdm1hLSZndDt2bV9zdGFydDsKJiM0MzsKJiM0MzsJd2hpbGUgKHZtYSkgewomIzQzOwkJaWYgKElTX0VSUih2bWEpKSB7CiYjNDM7CQkJcmV0ID0gUFRSX0VSUih2bWEpOwomIzQzOwkJCWdvdG8gb3V0X3VubG9jazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCWlmICh2bWEgPT0gZ2V0X2dhdGVfdm1hKGxvY2tfY3R4LSZndDttbSkpCiYjNDM7CQkJYnJlYWs7CiAKIAkJLyoKLQkJICogUmVsZWFzZSBtbWFwX2xvY2sgdGVtcG9yYXJpbHkgaWYgc29tZW9uZSB3YW50cyB0bwotCQkgKiBhY2Nlc3MgaXQgZm9yIHdyaXRlIHJlcXVlc3QuCiYjNDM7CQkgKiBJZiBhZnRlciByZXRha2luZyB0aGUgbG9jaywgYWxyZWFkeSByZXBvcnRlZCBWTUEgZ3JldyBvcgomIzQzOwkJICogbWVyZ2VkIHdpdGggdGhlIG5leHQgb25lLCBzbWFwX2dhdGhlcl9zdGF0cygpIHdpbGwgZ2F0aGVyCiYjNDM7CQkgKiBzdGF0cyBmb3IgdGhlIHJlbWFpbmluZyBwb3J0aW9uIGJ5IHN0YXJ0aW5nIGF0IGxhc3Rfdm1hX2VuZC4KIAkJICovCi0JCWlmIChtbWFwX2xvY2tfaXNfY29udGVuZGVkKG1tKSkgewotCQkJdm1hX2l0ZXJfaW52YWxpZGF0ZSgmYW1wO3ZtaSk7Ci0JCQl1bmxvY2tfY3R4X21tKCZhbXA7cHJpdi0mZ3Q7bG9ja19jdHgpOwotCQkJcmV0ID0gbG9ja19jdHhfbW0oJmFtcDtwcml2LSZndDtsb2NrX2N0eCk7Ci0JCQlpZiAocmV0KSB7Ci0JCQkJcmVsZWFzZV90YXNrX21lbXBvbGljeShwcml2KTsKLQkJCQlnb3RvIG91dF9wdXRfbW07Ci0JCQl9CiYjNDM7CQlzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsICZhbXA7bXNzLCBsYXN0X3ZtYV9lbmQpOwomIzQzOwkJbGFzdF92bWFfZW5kID0gdm1hLSZndDt2bV9lbmQ7CiAKJiM0MzsJCS8qCiYjNDM7CQkgKiBJZiB0aGUgVk1BIGxvY2sgaXMgbm90IHRha2VuLCB3ZSBob2xkIHRoZSBvZnRlbiBjb250ZW5kZWQKJiM0MzsJCSAqIG1tYXAgbG9jay4gVGhpcyBjYW4gaGFwcGVuIGlmIHdlIGhhZCB0byBmYWxsIGJhY2sgdG8gdGhlCiYjNDM7CQkgKiBtbWFwIGxvY2suCiYjNDM7CQkgKgomIzQzOwkJICogVG8gcmVsaWV2ZSBwcmVzc3VyZSwgY2hlY2sgaWYgaXQgaXMgaW5kZWVkIGNvbnRlbmRlZCwgdGhlbgomIzQzOwkJICogdGVtcG9yYXJpbHkgcmVsZWFzZSBpdC4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKGxvY2tfY3R4LSZndDttbWFwX2xvY2tlZCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbW1hcF9sb2NrX2lzX2NvbnRlbmRlZChsb2NrX2N0eC0mZ3Q7bW0pKSB7CiYjNDM7CQkJdW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7CiAJCQkvKgotCQkJICogQWZ0ZXIgZHJvcHBpbmcgdGhlIGxvY2ssIHRoZXJlIGFyZSBmb3VyIGNhc2VzIHRvCi0JCQkgKiBjb25zaWRlci4gU2VlIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSBmb3IgZXhwbGFuYXRpb24uCi0JCQkgKgotCQkJICogICAmIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7Ci0JCQkgKiAgIHwgVk1BMSB8IFZNQTIgfCBWTUEzICAgICAgfAotCQkJICogICAmIzQzOy0tLS0tLSYjNDM7LS0tLS0tJiM0MzstLS0tLS0tLS0tLSYjNDM7Ci0JCQkgKiAgIHwgICAgICB8ICAgICAgfCAgICAgICAgICAgfAotCQkJICogIDRrICAgICA4ayAgICAgMTZrICAgICAgICAgNDAwawotCQkJICoKLQkJCSAqIFN1cHBvc2Ugd2UgZHJvcCB0aGUgbG9jayBhZnRlciByZWFkaW5nIFZNQTIgZHVlIHRvCi0JCQkgKiBjb250ZW50aW9uLCB0aGVuIHdlIGdldDoKLQkJCSAqCi0JCQkgKglsYXN0X3ZtYV9lbmQgPSAxNmsKLQkJCSAqCi0JCQkgKiAxKSBWTUEyIGlzIGZyZWVkLCBidXQgVk1BMyBleGlzdHM6Ci0JCQkgKgotCQkJICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBWTUEzLgotCQkJICogICAgSW4gdGhpcyBjYXNlLCBqdXN0IGNvbnRpbnVlIGZyb20gVk1BMy4KLQkJCSAqCi0JCQkgKiAyKSBWTUEyIHN0aWxsIGV4aXN0czoKLQkJCSAqCi0JCQkgKiAgICB2bWFfbmV4dCh2bWkpIHdpbGwgcmV0dXJuIFZNQTMuCi0JCQkgKiAgICBJbiB0aGlzIGNhc2UsIGp1c3QgY29udGludWUgZnJvbSBWTUEzLgotCQkJICoKLQkJCSAqIDMpIE5vIG1vcmUgVk1BcyBjYW4gYmUgZm91bmQ6Ci0JCQkgKgotCQkJICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBOVUxMLgotCQkJICogICAgTm8gbW9yZSB0aGluZ3MgdG8gZG8sIGp1c3QgYnJlYWsuCi0JCQkgKgotCQkJICogNCkgKGxhc3Rfdm1hX2VuZCAtIDEpIGlzIHRoZSBtaWRkbGUgb2YgYSB2bWEgKFZNQSYjMzk7KToKLQkJCSAqCi0JCQkgKiAgICB2bWFfbmV4dCh2bWkpIHdpbGwgcmV0dXJuIFZNQSYjMzk7IHdob3NlIHJhbmdlCi0JCQkgKiAgICBjb250YWlucyBsYXN0X3ZtYV9lbmQuCi0JCQkgKiAgICBJdGVyYXRlIFZNQSYjMzk7IGZyb20gbGFzdF92bWFfZW5kLgomIzQzOwkJCSAqIEV2ZW4gdGhvdWdoIHdlIHByZXZpb3VzbHkgZmVsbCBiYWNrIHRvIG1tYXAgbG9jaywKJiM0MzsJCQkgKiB3ZSB0cnkgdGFraW5nIFZNQSBsb2NrIGZvciB0aGUgbmV4dCBWTUEsIHNpbmNlIGl0CiYjNDM7CQkJICogbWlnaHQgbm90IGJlIHVuZGVyIG1vZGlmaWNhdGlvbi4gSW4gdGhlIHdvcnN0IGNhc2UKJiM0MzsJCQkgKiB3ZSB3aWxsIGZhbGwgYmFjayB0byBtbWFwIGxvY2sgYWdhaW4uCiAJCQkgKi8KLQkJCXZtYSA9IHZtYV9uZXh0KCZhbXA7dm1pKTsKLQkJCS8qIENhc2UgMyBhYm92ZSAqLwotCQkJaWYgKCF2bWEpCi0JCQkJYnJlYWs7Ci0KLQkJCS8qIENhc2UgMSBhbmQgMiBhYm92ZSAqLwotCQkJaWYgKHZtYS0mZ3Q7dm1fc3RhcnQgJmd0Oz0gbGFzdF92bWFfZW5kKSB7Ci0JCQkJc21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCAmYW1wO21zcywgMCk7Ci0JCQkJbGFzdF92bWFfZW5kID0gdm1hLSZndDt2bV9lbmQ7Ci0JCQkJY29udGludWU7Ci0JCQl9Ci0KLQkJCS8qIENhc2UgNCBhYm92ZSAqLwotCQkJaWYgKHZtYS0mZ3Q7dm1fZW5kICZndDsgbGFzdF92bWFfZW5kKSB7Ci0JCQkJc21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCAmYW1wO21zcywgbGFzdF92bWFfZW5kKTsKLQkJCQlsYXN0X3ZtYV9lbmQgPSB2bWEtJmd0O3ZtX2VuZDsKLQkJCX0KJiM0MzsJCQlyY3VfcmVhZF9sb2NrKCk7CiYjNDM7CQkJcmVzZXRfbG9ja19jdHgobG9ja19jdHgpOwomIzQzOwkJCS8qIFJlc3VtZSBmcm9tIHRoZSBsYXN0IHBvc2l0aW9uLiAqLwomIzQzOwkJCXBvcyA9IGxhc3Rfdm1hX2VuZDsKJiM0MzsJCQl2bWFfaXRlcl9pbml0KCZhbXA7cHJpdi0mZ3Q7aXRlciwgbW0sIHBvcyk7CiAJCX0KLQl9IGZvcl9lYWNoX3ZtYSh2bWksIHZtYSk7CiYjNDM7CQl2bWEgPSBwcm9jX2dldF92bWEobSwgJmFtcDtwb3MpOwomIzQzOwl9CiAKIGVtcHR5X3NldDoKIAlzaG93X3ZtYV9oZWFkZXJfcHJlZml4KG0sIHZtYV9zdGFydCwgbGFzdF92bWFfZW5kLCAwLCAwLCAwLCAwKTsKQEAgLTE1MTIsMTAgJiM0MzsxNDQ2LDE0IEBAIHN0YXRpYyBpbnQgc2hvd19zbWFwc19yb2xsdXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogCiAJX19zaG93X3NtYXAobSwgJmFtcDttc3MsIHRydWUpOwogCiYjNDM7b3V0X3VubG9jazoKJiM0MzsJaWYgKGxvY2tfY3R4LSZndDttbWFwX2xvY2tlZCkgewomIzQzOwkJdW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQl1bmxvY2tfY3R4X3ZtYShsb2NrX2N0eCk7CiYjNDM7CQlyY3VfcmVhZF91bmxvY2soKTsKJiM0MzsJfQogCXJlbGVhc2VfdGFza19tZW1wb2xpY3kocHJpdik7Ci0JdW5sb2NrX2N0eF9tbSgmYW1wO3ByaXYtJmd0O2xvY2tfY3R4KTsKLQotb3V0X3B1dF9tbToKIAltbXB1dChtbSk7CiBvdXRfcHV0X3Rhc2s6CiAJcHV0X3Rhc2tfc3RydWN0KHByaXYtJmd0O3Rhc2spOwpAQCAtMTYwNSw3ICYjNDM7MTU0Myw3IEBAIHN0cnVjdCBjbGVhcl9yZWZzX3ByaXZhdGUgewogCWVudW0gY2xlYXJfcmVmc190eXBlcyB0eXBlOwogfTsKIAotc3RhdGljIGlubGluZSBib29sIHB0ZV9pc19waW5uZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKQomIzQzO3N0YXRpYyBib29sIHB0ZV9pc19waW5uZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKQogewogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAKQEAgLTE2MjEsOCAmIzQzOzE1NTksOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcHRlX2lzX3Bpbm5lZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCXJldHVybiBmb2xpb19tYXliZV9kbWFfcGlubmVkKGZvbGlvKTsKIH0KIAotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZSkKJiM0MztzdGF0aWMgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiYjNDM7CQkJICAgICBwdGVfdCAqcHRlKQogewogCWlmICghcGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpCiAJCXJldHVybjsKQEAgLTE2NTMsOCAmIzQzOzE1OTEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIH0KIAogI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKQotc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHlfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAotCQl1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKQomIzQzO3N0YXRpYyB2b2lkIGNsZWFyX3NvZnRfZGlydHlfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAomIzQzOwkJCQkgdW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kcCkKIHsKIAlwbWRfdCBvbGQsIHBtZCA9ICpwbWRwOwogCkBAIC0xNjc5LDggJiM0MzsxNjE3LDggQEAgc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHlfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCX0KIH0KICNlbHNlCi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCXVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHApCiYjNDM7c3RhdGljIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiYjNDM7CQkJCSB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKQogewogfQogI2VuZGlmCkBAIC0xODc5LDcgJiM0MzsxODE3LDcgQEAgc3RydWN0IHBhZ2VtYXByZWFkIHsKIAogI2RlZmluZSBQTV9FTkRfT0ZfQlVGRkVSICAgIDEKIAotc3RhdGljIGlubGluZSBwYWdlbWFwX2VudHJ5X3QgbWFrZV9wbWUodTY0IGZyYW1lLCB1NjQgZmxhZ3MpCiYjNDM7c3RhdGljIHBhZ2VtYXBfZW50cnlfdCBtYWtlX3BtZSh1NjQgZnJhbWUsIHU2NCBmbGFncykKIHsKIAlyZXR1cm4gKHBhZ2VtYXBfZW50cnlfdCkgeyAucG1lID0gKGZyYW1lICZhbXA7IFBNX1BGUkFNRV9NQVNLKSB8IGZsYWdzIH07CiB9CkBAIC0zNDIxLDcgJiM0MzszMzU5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBzaG93X251bWFfdm1hX2xvY2tfb3BzID0gewogCS53YWxrX2xvY2sgPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksCiB9OwogCi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqCiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqCiBnZXRfc2hvd19udW1hX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpCiB7CiAJaWYgKHByaXYtJmd0O2xvY2tfY3R4Lm1tYXBfbG9ja2VkKQpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLW1hcHMtcmFjZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLW1hcHMtcmFjZS5jCmluZGV4IDQxNWVjY2I3MDQ2ODQuLjhkMDBkN2RiMWM2NTIgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2MtbWFwcy1yYWNlLmMKQEAgLTgwLDYgJiM0Mzs4MCw2MSBAQCBlbnVtIG1hcHNfZmlsZSB7CiAKIHN0cnVjdCB2bWFfbW9kaWZpZXJfaW5mbzsKIAomIzQzO2VudW0gc21hcHNfcm9sbHVwX3N0YXQgewomIzQzOwlSc3MsCiYjNDM7CVBzcywKJiM0MzsJUHNzX0RpcnR5LAomIzQzOwlQc3NfQW5vbiwKJiM0MzsJUHNzX0ZpbGUsCiYjNDM7CVBzc19TaG1lbSwKJiM0MzsJU2hhcmVkX0NsZWFuLAomIzQzOwlTaGFyZWRfRGlydHksCiYjNDM7CVByaXZhdGVfQ2xlYW4sCiYjNDM7CVByaXZhdGVfRGlydHksCiYjNDM7CVJlZmVyZW5jZWQsCiYjNDM7CUFub255bW91cywKJiM0MzsJS1NNLAomIzQzOwlMYXp5RnJlZSwKJiM0MzsJQW5vbkh1Z2VQYWdlcywKJiM0MzsJU2htZW1QbWRNYXBwZWQsCiYjNDM7CUZpbGVQbWRNYXBwZWQsCiYjNDM7CVNoYXJlZF9IdWdldGxiLAomIzQzOwlQcml2YXRlX0h1Z2V0bGIsCiYjNDM7CVN3YXAsCiYjNDM7CVN3YXBQc3MsCiYjNDM7CUxvY2tlZCwKJiM0MzsJUm9sbHVwRmllbGRDb3VudAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IGNoYXIgKnNtYXBzX3JvbGx1cF9zdGF0X25hbWVzW1JvbGx1cEZpZWxkQ291bnRdID0gewomIzQzOwkmIzM0O1JzcyYjMzQ7LAomIzQzOwkmIzM0O1BzcyYjMzQ7LAomIzQzOwkmIzM0O1Bzc19EaXJ0eSYjMzQ7LAomIzQzOwkmIzM0O1Bzc19Bbm9uJiMzNDssCiYjNDM7CSYjMzQ7UHNzX0ZpbGUmIzM0OywKJiM0MzsJJiMzNDtQc3NfU2htZW0mIzM0OywKJiM0MzsJJiMzNDtTaGFyZWRfQ2xlYW4mIzM0OywKJiM0MzsJJiMzNDtTaGFyZWRfRGlydHkmIzM0OywKJiM0MzsJJiMzNDtQcml2YXRlX0NsZWFuJiMzNDssCiYjNDM7CSYjMzQ7UHJpdmF0ZV9EaXJ0eSYjMzQ7LAomIzQzOwkmIzM0O1JlZmVyZW5jZWQmIzM0OywKJiM0MzsJJiMzNDtBbm9ueW1vdXMmIzM0OywKJiM0MzsJJiMzNDtLU00mIzM0OywKJiM0MzsJJiMzNDtMYXp5RnJlZSYjMzQ7LAomIzQzOwkmIzM0O0Fub25IdWdlUGFnZXMmIzM0OywKJiM0MzsJJiMzNDtTaG1lbVBtZE1hcHBlZCYjMzQ7LAomIzQzOwkmIzM0O0ZpbGVQbWRNYXBwZWQmIzM0OywKJiM0MzsJJiMzNDtTaGFyZWRfSHVnZXRsYiYjMzQ7LAomIzQzOwkmIzM0O1ByaXZhdGVfSHVnZXRsYiYjMzQ7LAomIzQzOwkmIzM0O1N3YXAmIzM0OywKJiM0MzsJJiMzNDtTd2FwUHNzJiMzNDssCiYjNDM7CSYjMzQ7TG9ja2VkJiMzNDssCiYjNDM7fTsKJiM0MzsKJiM0MztzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIHsKJiM0MzsJdW5zaWduZWQgbG9uZyB2YWx1ZXNbUm9sbHVwRmllbGRDb3VudF07CiYjNDM7fTsKJiM0MzsKIEZJWFRVUkUocHJvY19tYXBzX3JhY2UpCiB7CiAJc3RydWN0IHZtYV9tb2RpZmllcl9pbmZvICptb2RfaW5mbzsKQEAgLTkxLDYgJiM0MzsxNDYsNyBAQCBGSVhUVVJFKHByb2NfbWFwc19yYWNlKQogCWVudW0gbWFwc19maWxlIG1hcHNfZmlsZTsKIAlpbnQgc2hhcmVkX21lbV9zaXplOwogCWludCBza2lwX3BhZ2VzOwomIzQzOwlpbnQgcm9sbHVwX2ZkOwogCWludCBwYWdlX3NpemU7CiAJaW50IHZtYV9jb3VudDsKIAlib29sIHZlcmJvc2U7CkBAIC0xMzIsMTIgJiM0MzsxODgsMTIgQEAgc3RydWN0IHZtYV9tb2RpZmllcl9pbmZvIHsKIAl2b2lkICpjaGlsZF9tYXBwZWRfYWRkcltdOwogfTsKIAotc3RhdGljIGJvb2wgcmVhZF9wYWdlKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsCiYjNDM7c3RhdGljIGJvb2wgcmVhZF9wYWdlKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsIGludCBmZCwKIAkJICAgICAgc3RydWN0IHBhZ2VfY29udGVudCAqcGFnZSkKIHsKIAlzc2l6ZV90ICBieXRlc19yZWFkOwogCi0JYnl0ZXNfcmVhZCA9IHJlYWQoc2VsZi0mZ3Q7bWFwc19mZCwgcGFnZS0mZ3Q7ZGF0YSwgc2VsZi0mZ3Q7cGFnZV9zaXplKTsKJiM0MzsJYnl0ZXNfcmVhZCA9IHJlYWQoZmQsIHBhZ2UtJmd0O2RhdGEsIHNlbGYtJmd0O3BhZ2Vfc2l6ZSk7CiAJaWYgKGJ5dGVzX3JlYWQgJmx0Oz0gMCkKIAkJcmV0dXJuIGZhbHNlOwogCkBAIC0xNzUsNyAmIzQzOzIzMSw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX2NvbnRhaW5pbmdfcGFnZShGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmLAogCQljaGFyICpjdXJyX3BvczsKIAkJY2hhciAqZW5kX3BvczsKIAotCQlpZiAoIXJlYWRfcGFnZShzZWxmLCAmYW1wO3NlbGYtJmd0O3BhZ2UxKSkKJiM0MzsJCWlmICghcmVhZF9wYWdlKHNlbGYsIHNlbGYtJmd0O21hcHNfZmQsICZhbXA7c2VsZi0mZ3Q7cGFnZTEpKQogCQkJcmV0dXJuIC0xOwogCiAJCWN1cnJfcG9zID0gc2VsZi0mZ3Q7cGFnZTEuZGF0YTsKQEAgLTIwNSwxMCAmIzQzOzI2MSwxMSBAQCBzdGF0aWMgYm9vbCByZWFkX3R3b19wYWdlcyhGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmKQogCQlyZXR1cm4gZmFsc2U7CiAKIAlmb3IgKGludCBpID0gMDsgaSAmbHQ7IHNlbGYtJmd0O3NraXBfcGFnZXM7IGkmIzQzOyYjNDM7KQotCQlpZiAoIXJlYWRfcGFnZShzZWxmLCAmYW1wO3NlbGYtJmd0O3BhZ2UxKSkKJiM0MzsJCWlmICghcmVhZF9wYWdlKHNlbGYsIHNlbGYtJmd0O21hcHNfZmQsICZhbXA7c2VsZi0mZ3Q7cGFnZTEpKQogCQkJcmV0dXJuIGZhbHNlOwogCi0JcmV0dXJuIHJlYWRfcGFnZShzZWxmLCAmYW1wO3NlbGYtJmd0O3BhZ2UxKSAmYW1wOyZhbXA7IHJlYWRfcGFnZShzZWxmLCAmYW1wO3NlbGYtJmd0O3BhZ2UyKTsKJiM0MzsJcmV0dXJuIHJlYWRfcGFnZShzZWxmLCBzZWxmLSZndDttYXBzX2ZkLCAmYW1wO3NlbGYtJmd0O3BhZ2UxKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICByZWFkX3BhZ2Uoc2VsZiwgc2VsZi0mZ3Q7bWFwc19mZCwgJmFtcDtzZWxmLSZndDtwYWdlMik7CiB9CiAKIHN0YXRpYyB2b2lkIGNvcHlfbGluZShjb25zdCBjaGFyICpsaW5lX3N0YXJ0LCBjb25zdCBjaGFyICpsaW5lX2VuZCwKQEAgLTMxNyw2ICYjNDM7Mzc0LDYxIEBAIHN0YXRpYyBib29sIHJlYWRfYm91bmRhcnlfbGluZXMoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZiwKIAkJICAgICAgJmFtcDtmaXJzdF9saW5lLSZndDtlbmRfYWRkcikgPT0gMjsKIH0KIAomIzQzO3N0YXRpYyBib29sIHBhcnNlX3NtYXBzX3JvbGx1cChGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmLAomIzQzOwkJCSAgICAgICBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpzdGF0cykKJiM0Mzt7CiYjNDM7CXVuc2lnbmVkIGludCBkZXZfbWFqLCBkZXZfbWluLCBpbm9kZTsKJiM0MzsJdW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCBvZmZzOwomIzQzOwl1bnNpZ25lZCBsb25nIHZhbHVlOwomIzQzOwljaGFyIG5hbWVbMzJdLCBwZXJtWzVdOwomIzQzOwljaGFyICpjdXJyX3BvczsKJiM0MzsJY2hhciAqZW5kX3BvczsKJiM0MzsJY2hhciAqbGluZV9lbmQ7CiYjNDM7CiYjNDM7CWlmIChsc2VlayhzZWxmLSZndDtyb2xsdXBfZmQsIDAsIFNFRUtfU0VUKSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmICghcmVhZF9wYWdlKHNlbGYsIHNlbGYtJmd0O3JvbGx1cF9mZCwgJmFtcDtzZWxmLSZndDtwYWdlMSkpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWN1cnJfcG9zID0gc2VsZi0mZ3Q7cGFnZTEuZGF0YTsKJiM0MzsJZW5kX3BvcyA9IHNlbGYtJmd0O3BhZ2UxLmRhdGEgJiM0Mzsgc2VsZi0mZ3Q7cGFnZTEuc2l6ZTsKJiM0MzsKJiM0MzsJbGluZV9lbmQgPSBzdHJjaHIoY3Vycl9wb3MsICYjMzk7XG4mIzM5Oyk7CiYjNDM7CWlmICghbGluZV9lbmQpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWlmIChzc2NhbmYoY3Vycl9wb3MsICYjMzQ7JWx4LSVseCAlNHMgJWx4ICV1OiV1ICV1ICUzMXMmIzM0OywKJiM0MzsJCSZhbXA7c3RhcnQsICZhbXA7ZW5kLCBwZXJtLCAmYW1wO29mZnMsICZhbXA7ZGV2X21haiwgJmFtcDtkZXZfbWluLCAmYW1wO2lub2RlLCBuYW1lKSAhPSA4KQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAoc3RyY21wKG5hbWUsICYjMzQ7W3JvbGx1cF0mIzM0OykpCiYjNDM7CQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CWZvciAoaW50IHN0YXQgPSAwOyBzdGF0ICZsdDsgQVJSQVlfU0laRShzbWFwc19yb2xsdXBfc3RhdF9uYW1lcyk7IHN0YXQmIzQzOyYjNDM7KSB7CiYjNDM7CQlpbnQgbGVuOwomIzQzOwomIzQzOwkJY3Vycl9wb3MgPSBsaW5lX2VuZCAmIzQzOyAxOwomIzQzOwkJaWYgKGN1cnJfcG9zICZndDs9IGVuZF9wb3MpCiYjNDM7CQkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwkJbGluZV9lbmQgPSBzdHJjaHIoY3Vycl9wb3MsICYjMzk7XG4mIzM5Oyk7CiYjNDM7CQlpZiAoIWxpbmVfZW5kKQomIzQzOwkJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJCWlmIChzc2NhbmYoY3Vycl9wb3MsICYjMzQ7JTMxcyAlbHUga0ImIzM0OywgbmFtZSwgJmFtcDt2YWx1ZSkgIT0gMikKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQlsZW4gPSBzdHJsZW4obmFtZSk7CiYjNDM7CQlpZiAobmFtZVtsZW4gLSAxXSAhPSAmIzM5OzomIzM5OyB8fCBzdHJuY21wKG5hbWUsIHNtYXBzX3JvbGx1cF9zdGF0X25hbWVzW3N0YXRdLCBsZW4gLSAxKSkKJiM0MzsJCQlyZXR1cm4gZmFsc2U7CiYjNDM7CiYjNDM7CQlzdGF0cy0mZ3Q7dmFsdWVzW3N0YXRdID0gdmFsdWU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwogLyogVGhyZWFkIHN5bmNocm9uaXphdGlvbiByb3V0aW5lcyAqLwogc3RhdGljIHZvaWQgd2FpdF9mb3Jfc3RhdGUoc3RydWN0IHZtYV9tb2RpZmllcl9pbmZvICptb2RfaW5mbywgZW51bSB0ZXN0X3N0YXRlIHN0YXRlKQogewpAQCAtMzk3LDYgJiM0Mzs1MDksNDEgQEAgc3RhdGljIGJvb2wgcHJpbnRfYm91bmRhcmllc19vbihib29sIGNvbmRpdGlvbiwgY29uc3QgY2hhciAqdGl0bGUsCiAJcmV0dXJuIGNvbmRpdGlvbjsKIH0KIAomIzQzO3N0YXRpYyB2b2lkIHByaW50X3NtYXBzX3JvbGx1cF9zdGF0cyhjb25zdCBjaGFyICp0aXRsZSwgRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZiwKJiM0MzsJCQkJICAgICBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpzdGF0cykKJiM0Mzt7CiYjNDM7CXByaW50ZigmIzM0OyVzJiMzNDssIHRpdGxlKTsKJiM0MzsJZm9yIChpbnQgc3RhdCA9IDA7IHN0YXQgJmx0OyBBUlJBWV9TSVpFKHNtYXBzX3JvbGx1cF9zdGF0X25hbWVzKTsgc3RhdCYjNDM7JiM0MzspCiYjNDM7CQlwcmludGYoJiMzNDslNjRzICVsdSBrQlxuJiMzNDssIHNtYXBzX3JvbGx1cF9zdGF0X25hbWVzW3N0YXRdLCBzdGF0cy0mZ3Q7dmFsdWVzW3N0YXRdKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGJvb2wgY21wX3NtYXBzX3JvbGx1cF9zdGF0KHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKnMxLAomIzQzOwkJCQkgIHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKnMyLAomIzQzOwkJCQkgIGVudW0gc21hcHNfcm9sbHVwX3N0YXQgc3RhdCkKJiM0Mzt7CiYjNDM7CXJldHVybiBzMS0mZ3Q7dmFsdWVzW3N0YXRdID09IHMyLSZndDt2YWx1ZXNbc3RhdF07CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBib29sIGNvbXBhcmVfc21hcHNfcm9sbHVwKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsCiYjNDM7CQkJCSBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpleHBlY3RlZCwKJiM0MzsJCQkJIHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKmFjdHVhbCkKJiM0Mzt7CiYjNDM7CS8qCiYjNDM7CSAqIENsZWFuL2RpcnR5IG1ldHJpY3MgbWlnaHQgY2hhbmdlIGJ1dCBQc3MtcmVsYXRlZCBvbmVzCiYjNDM7CSAqIHNob3VsZCBzdGF5IGNvbnN0YW50LgomIzQzOwkgKi8KJiM0MzsJaWYgKGNtcF9zbWFwc19yb2xsdXBfc3RhdChleHBlY3RlZCwgYWN0dWFsLCBQc3MpICZhbXA7JmFtcDsKJiM0MzsJICAgIGNtcF9zbWFwc19yb2xsdXBfc3RhdChleHBlY3RlZCwgYWN0dWFsLCBQc3NfQW5vbikgJmFtcDsmYW1wOwomIzQzOwkgICAgY21wX3NtYXBzX3JvbGx1cF9zdGF0KGV4cGVjdGVkLCBhY3R1YWwsIFBzc19GaWxlKSAmYW1wOyZhbXA7CiYjNDM7CSAgICBjbXBfc21hcHNfcm9sbHVwX3N0YXQoZXhwZWN0ZWQsIGFjdHVhbCwgUHNzX1NobWVtKSkKJiM0MzsJCXJldHVybiB0cnVlOwomIzQzOwomIzQzOwlwcmludF9zbWFwc19yb2xsdXBfc3RhdHMoJiMzNDtFeHBlY3RlZCBzdGF0czomIzM0Oywgc2VsZiwgZXhwZWN0ZWQpOwomIzQzOwlwcmludF9zbWFwc19yb2xsdXBfc3RhdHMoJiMzNDtBY3R1YWwgc3RhdHM6JiMzNDssIHNlbGYsIGFjdHVhbCk7CiYjNDM7CiYjNDM7CXJldHVybiBmYWxzZTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgdm9pZCByZXBvcnRfdGVzdF9zdGFydChjb25zdCBjaGFyICpuYW1lLCBib29sIHZlcmJvc2UpCiB7CiAJaWYgKHZlcmJvc2UpCkBAIC01NzIsNiAmIzQzOzcxOSw3IEBAIEZJWFRVUkVfU0VUVVAocHJvY19tYXBzX3JhY2UpCiAJdW5zaWduZWQgbG9uZyBmaXJzdF9tYXBfYWRkcjsKIAl1bnNpZ25lZCBsb25nIGxhc3RfbWFwX2FkZHI7CiAJdW5zaWduZWQgbG9uZyBkdXJhdGlvbl9zZWM7CiYjNDM7CWNoYXIgcm9sbHVwX2ZuYW1lWzMyXTsKIAljaGFyIGZuYW1lWzMyXTsKIAogCXNlbGYtJmd0O3BhZ2Vfc2l6ZSA9ICh1bnNpZ25lZCBsb25nKXN5c2NvbmYoX1NDX1BBR0VTSVpFKTsKQEAgLTY0OSw2ICYjNDM7Nzk3LDkgQEAgRklYVFVSRV9TRVRVUChwcm9jX21hcHNfcmFjZSkKIAkJYnJlYWs7CiAJY2FzZSBTTUFQUzoKIAkJc3ByaW50ZihmbmFtZSwgJiMzNDsvcHJvYy8lZC9zbWFwcyYjMzQ7LCBzZWxmLSZndDtwaWQpOwomIzQzOwkJc3ByaW50Zihyb2xsdXBfZm5hbWUsICYjMzQ7L3Byb2MvJWQvc21hcHNfcm9sbHVwJiMzNDssIHNlbGYtJmd0O3BpZCk7CiYjNDM7CQlzZWxmLSZndDtyb2xsdXBfZmQgPSBvcGVuKHJvbGx1cF9mbmFtZSwgT19SRE9OTFkpOwomIzQzOwkJQVNTRVJUX05FKHNlbGYtJmd0O3JvbGx1cF9mZCwgLTEpOwogCQlicmVhazsKIAlkZWZhdWx0OgogCQlrc2Z0X2V4aXRfZmFpbCgpOwpAQCAtNzExLDYgJiM0Mzs4NjIsOCBAQCBGSVhUVVJFX1RFQVJET1dOKHByb2NfbWFwc19yYWNlKQogCWZvciAoaW50IGkgPSAwOyBpICZsdDsgc2VsZi0mZ3Q7dm1hX2NvdW50OyBpJiM0MzsmIzQzOykKIAkJbXVubWFwKHNlbGYtJmd0O21vZF9pbmZvLSZndDtjaGlsZF9tYXBwZWRfYWRkcltpXSwgc2VsZi0mZ3Q7cGFnZV9zaXplKTsKIAljbG9zZShzZWxmLSZndDttYXBzX2ZkKTsKJiM0MzsJaWYgKHNlbGYtJmd0O21hcHNfZmlsZSA9PSBTTUFQUykKJiM0MzsJCWNsb3NlKHNlbGYtJmd0O3JvbGx1cF9mZCk7CiAJd2FpdHBpZChzZWxmLSZndDtwaWQsICZhbXA7c3RhdHVzLCAwKTsKIAltdW5tYXAoc2VsZi0mZ3Q7bW9kX2luZm8sIHNlbGYtJmd0O3NoYXJlZF9tZW1fc2l6ZSk7CiB9CkBAIC03MjMsNiAmIzQzOzg3Niw3IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9zcGxpdCkKIAlzdHJ1Y3QgbGluZV9jb250ZW50IHNwbGl0X2ZpcnN0X2xpbmU7CiAJc3RydWN0IGxpbmVfY29udGVudCByZXN0b3JlZF9sYXN0X2xpbmU7CiAJc3RydWN0IGxpbmVfY29udGVudCByZXN0b3JlZF9maXJzdF9saW5lOwomIzQzOwlzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIG9yaWdfc3RhdHM7CiAKIAl3YWl0X2Zvcl9zdGF0ZShtb2RfaW5mbywgU0VUVVBfUkVBRFkpOwogCkBAIC03MzYsNiAmIzQzOzg5MCw4IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9zcGxpdCkKIAlyZXBvcnRfdGVzdF9zdGFydCgmIzM0O1RlYXJpbmcgZnJvbSBzcGxpdCYjMzQ7LCBzZWxmLSZndDt2ZXJib3NlKTsKIAlBU1NFUlRfVFJVRShjYXB0dXJlX21vZF9wYXR0ZXJuKHNlbGYsICZhbXA7c3BsaXRfbGFzdF9saW5lLCAmYW1wO3NwbGl0X2ZpcnN0X2xpbmUsCiAJCQkJCSZhbXA7cmVzdG9yZWRfbGFzdF9saW5lLCAmYW1wO3Jlc3RvcmVkX2ZpcnN0X2xpbmUpKTsKJiM0MzsJaWYgKHNlbGYtJmd0O21hcHNfZmlsZSA9PSBTTUFQUykKJiM0MzsJCUFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCAmYW1wO29yaWdfc3RhdHMpKTsKIAogCS8qIE5vdyBzdGFydCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZm9yIHNlbGYtJmd0O2R1cmF0aW9uX3NlYyAqLwogCXNpZ25hbF9zdGF0ZShtb2RfaW5mbywgVEVTVF9SRUFEWSk7CkBAIC03OTksNiAmIzQzOzk1NSwxMSBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fc3BsaXQpCiAJCQkJICAgICB2bWFfZW5kID09IHNlbGYtJmd0O2xhc3RfbGluZS5lbmRfYWRkcikgfHwKIAkJCQkgICAgKHZtYV9zdGFydCA9PSBzcGxpdF9maXJzdF9saW5lLnN0YXJ0X2FkZHIgJmFtcDsmYW1wOwogCQkJCSAgICAgdm1hX2VuZCA9PSBzcGxpdF9maXJzdF9saW5lLmVuZF9hZGRyKSk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCXN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgc3RhdHM7CiYjNDM7CiYjNDM7CQkJQVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsICZhbXA7c3RhdHMpKTsKJiM0MzsJCQlBU1NFUlRfVFJVRShjb21wYXJlX3NtYXBzX3JvbGx1cChzZWxmLCAmYW1wO29yaWdfc3RhdHMsICZhbXA7c3RhdHMpKTsKIAkJfQogCQljbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQ19DT0FSU0UsICZhbXA7ZW5kX3RzKTsKIAkJZW5kX3Rlc3RfaXRlcmF0aW9uKCZhbXA7ZW5kX3RzLCBzZWxmLSZndDt2ZXJib3NlKTsKQEAgLTgxNyw2ICYjNDM7OTc4LDcgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3Jlc2l6ZSkKIAlzdHJ1Y3QgbGluZV9jb250ZW50IHNocnVua19maXJzdF9saW5lOwogCXN0cnVjdCBsaW5lX2NvbnRlbnQgcmVzdG9yZWRfbGFzdF9saW5lOwogCXN0cnVjdCBsaW5lX2NvbnRlbnQgcmVzdG9yZWRfZmlyc3RfbGluZTsKJiM0MzsJc3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyBvcmlnX3N0YXRzOwogCiAJd2FpdF9mb3Jfc3RhdGUobW9kX2luZm8sIFNFVFVQX1JFQURZKTsKIApAQCAtODMwLDYgJiM0Mzs5OTIsOCBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fcmVzaXplKQogCXJlcG9ydF90ZXN0X3N0YXJ0KCYjMzQ7VGVhcmluZyBmcm9tIHJlc2l6ZSYjMzQ7LCBzZWxmLSZndDt2ZXJib3NlKTsKIAlBU1NFUlRfVFJVRShjYXB0dXJlX21vZF9wYXR0ZXJuKHNlbGYsICZhbXA7c2hydW5rX2xhc3RfbGluZSwgJmFtcDtzaHJ1bmtfZmlyc3RfbGluZSwKIAkJCQkJJmFtcDtyZXN0b3JlZF9sYXN0X2xpbmUsICZhbXA7cmVzdG9yZWRfZmlyc3RfbGluZSkpOwomIzQzOwlpZiAoc2VsZi0mZ3Q7bWFwc19maWxlID09IFNNQVBTKQomIzQzOwkJQVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsICZhbXA7b3JpZ19zdGF0cykpOwogCiAJLyogTm93IHN0YXJ0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBmb3Igc2VsZi0mZ3Q7ZHVyYXRpb25fc2VjICovCiAJc2lnbmFsX3N0YXRlKG1vZF9pbmZvLCBURVNUX1JFQURZKTsKQEAgLTg4MCw2ICYjNDM7MTA0NCwxMSBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fcmVzaXplKQogCQkJQVNTRVJUX1RSVUUodm1hX3N0YXJ0ID09IHNlbGYtJmd0O2xhc3RfbGluZS5zdGFydF9hZGRyICZhbXA7JmFtcDsKIAkJCQkgICAgKHZtYV9lbmQgLSB2bWFfc3RhcnQgPT0gc2VsZi0mZ3Q7cGFnZV9zaXplICogMyB8fAogCQkJCSAgICAgdm1hX2VuZCAtIHZtYV9zdGFydCA9PSBzZWxmLSZndDtwYWdlX3NpemUpKTsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJc3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyBzdGF0czsKJiM0MzsKJiM0MzsJCQlBU1NFUlRfVFJVRShwYXJzZV9zbWFwc19yb2xsdXAoc2VsZiwgJmFtcDtzdGF0cykpOwomIzQzOwkJCUFTU0VSVF9UUlVFKGNvbXBhcmVfc21hcHNfcm9sbHVwKHNlbGYsICZhbXA7b3JpZ19zdGF0cywgJmFtcDtzdGF0cykpOwogCQl9CiAJCWNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDX0NPQVJTRSwgJmFtcDtlbmRfdHMpOwogCQllbmRfdGVzdF9pdGVyYXRpb24oJmFtcDtlbmRfdHMsIHNlbGYtJmd0O3ZlcmJvc2UpOwpAQCAtODk4LDYgJiM0MzsxMDY3LDcgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3JlbWFwKQogCXN0cnVjdCBsaW5lX2NvbnRlbnQgcmVtYXBwZWRfZmlyc3RfbGluZTsKIAlzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2xhc3RfbGluZTsKIAlzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2ZpcnN0X2xpbmU7CiYjNDM7CXN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgb3JpZ19zdGF0czsKIAogCXdhaXRfZm9yX3N0YXRlKG1vZF9pbmZvLCBTRVRVUF9SRUFEWSk7CiAKQEAgLTkxMSw2ICYjNDM7MTA4MSw4IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9yZW1hcCkKIAlyZXBvcnRfdGVzdF9zdGFydCgmIzM0O1RlYXJpbmcgZnJvbSByZW1hcCYjMzQ7LCBzZWxmLSZndDt2ZXJib3NlKTsKIAlBU1NFUlRfVFJVRShjYXB0dXJlX21vZF9wYXR0ZXJuKHNlbGYsICZhbXA7cmVtYXBwZWRfbGFzdF9saW5lLCAmYW1wO3JlbWFwcGVkX2ZpcnN0X2xpbmUsCiAJCQkJCSZhbXA7cmVzdG9yZWRfbGFzdF9saW5lLCAmYW1wO3Jlc3RvcmVkX2ZpcnN0X2xpbmUpKTsKJiM0MzsJaWYgKHNlbGYtJmd0O21hcHNfZmlsZSA9PSBTTUFQUykKJiM0MzsJCUFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCAmYW1wO29yaWdfc3RhdHMpKTsKIAogCS8qIE5vdyBzdGFydCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZm9yIHNlbGYtJmd0O2R1cmF0aW9uX3NlYyAqLwogCXNpZ25hbF9zdGF0ZShtb2RfaW5mbywgVEVTVF9SRUFEWSk7CkBAIC05NjMsNiAmIzQzOzExMzUsMTEgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3JlbWFwKQogCQkJCSAgICAgdm1hX2VuZCAtIHZtYV9zdGFydCA9PSBzZWxmLSZndDtwYWdlX3NpemUgKiAzKSB8fAogCQkJCSAgICAodm1hX3N0YXJ0ID09IHNlbGYtJmd0O2xhc3RfbGluZS5zdGFydF9hZGRyICYjNDM7IHNlbGYtJmd0O3BhZ2Vfc2l6ZSAmYW1wOyZhbXA7CiAJCQkJICAgICB2bWFfZW5kIC0gdm1hX3N0YXJ0ID09IHNlbGYtJmd0O3BhZ2Vfc2l6ZSkpOwomIzQzOwkJfSBlbHNlIHsKJiM0MzsJCQlzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIHN0YXRzOwomIzQzOwomIzQzOwkJCUFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCAmYW1wO3N0YXRzKSk7CiYjNDM7CQkJQVNTRVJUX1RSVUUoY29tcGFyZV9zbWFwc19yb2xsdXAoc2VsZiwgJmFtcDtvcmlnX3N0YXRzLCAmYW1wO3N0YXRzKSk7CiAJCX0KIAkJY2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUNfQ09BUlNFLCAmYW1wO2VuZF90cyk7CiAJCWVuZF90ZXN0X2l0ZXJhdGlvbigmYW1wO2VuZF90cywgc2VsZi0mZ3Q7dmVyYm9zZSk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE4OAoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ0NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFdmFsdWF0aW5nIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzIGluIHRoZSBQYXRjaCBTZXJpZXMqKgoKT2theSwgc28gdGhlIHRhc2sgYXQgaGFuZCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBzZXJpZXMgbmVjZXNzaXRhdGVzIGEgZGVkaWNhdGVkIEtNU0FOIHNlc3Npb24gZHVlIHRvIHBvdGVudGlhbCB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZXMuIExldCYjMzk7cyBkaWcgaW4uCgpUaGUgcGF0Y2ggdG91Y2hlcyBgZnMvcHJvYy90YXNrX21tdS5jYCBhbmQgYSBzZWxmdGVzdCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuY2AuIFRoZSBjb3JlIGNoYW5nZXMgc2VlbSB0byBiZSBpbiBgZnMvcHJvYy90YXNrX21tdS5jYC4gTXkgaW5pdGlhbCByZWFkIHNob3dzOgoKKiAgIEEgbG90IG9mIHJlZmFjdG9yaW5nIGFuZCBjbGVhbnVwIHdpdGhpbiB0aGUgYHByb2NfbWFwc19sb2NraW5nX2N0eGAgaGVscGVyIGZ1bmN0aW9ucy4gVGhleSYjMzk7dmUgYmVlbiBzaW1wbGlmaWVkLCBpbmxpbmVkLCBhbmQgc29tZSByZW1vdmVkLiBUaGlzIGRvZXNuJiMzOTt0IHNjcmVhbSAmIzM0O3VuaW5pdGlhbGl6ZWQgbWVtb3J5LCYjMzQ7IGJ1dCBJJiMzOTtsbCBrZWVwIGFuIGV5ZSBvdXQgZm9yIGFueSBzdWJ0bGUgZWZmZWN0cyBvZiB0aGUgcmVmYWN0b3JpbmcuCgoqICAgYHNtYXBfZ2F0aGVyX3N0YXRzYCBoYXMgc2VlbiBzb21lIGNoYW5nZXMsIG5vdGFibHkgdG8gaG93IHRoZSBgc3RhcnRgIHBhcmFtZXRlciBpcyBoYW5kbGVkLiBUaGVyZSYjMzk7cyBsb2dpYyB0byBjaGVjayBpZiBgc3RhcnRgIGlzIHdpdGhpbiB0aGUgVk1BIHJhbmdlLiBUaGlzIGlzIGludGVyZXN0aW5nOiBgY29uc3QgYm9vbCBpc19wYXJ0aWFsID0gc3RhcnQgJmd0OyB2bWEtJmd0O3ZtX3N0YXJ0O2AgYW5kIHRoZSBjaGVja3MgYGlmIChzdGFydCAmbHQ7IHZtYS0mZ3Q7dm1fc3RhcnQgfHwgc3RhcnQgJmd0Oz0gdm1hLSZndDt2bV9lbmQpIHJldHVybjtgIFRoZSB1c2Ugb2YgYHdhbGtfcGFnZV9yYW5nZV92bWFgIHdpdGggYSBwb3RlbnRpYWxseSBzaGlmdGVkIGBzdGFydGAgaXMgc29tZXRoaW5nIEkgbmVlZCB0byBjYXJlZnVsbHkgY29uc2lkZXI7IGFueSBhc3N1bXB0aW9ucyBhYm91dCBpbml0aWFsIG1lbW9yeSBzdGF0ZSBpbiB0aGF0IGZ1bmN0aW9uIGNvdWxkIGJlIGFmZmVjdGVkLgoKKiAgIGBzaG93X3NtYXBzX3JvbGx1cGAgaXMgc3dpdGNoaW5nIHRvIGBwcm9jX2dldF92bWFgIGFuZCBWTUEgbG9ja2luZy9SQ1UgbG9ja2luZywgbW92aW5nIGF3YXkgZnJvbSBob2xkaW5nIHRoZSBgbW1hcF9yZWFkX2xvY2tgIGFjcm9zcyB0aGUgZW50aXJlIHJvbGx1cC4gVGhpcyBpcyBhIGdvb2QgbW92ZSBmb3IgY29uY3VycmVuY3ksIGJ1dCBWTUEgbG9ja2luZyBoYXMgYSBoaXN0b3J5IG9mIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMuIEl0IGluaXRpYWxpemVzIGBzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgbXNzID0ge307YCwgd2hpY2ggaXMgZ29vZCB0byBzZWUgYXMgaXQgemVyb3MgaXQgb3V0LiBPdXRwdXR0aW5nIHdpdGggYF9fc2hvd19zbWFwKG0sICZhbXA7bXNzLCB0cnVlKTtgIHNob3VsZCBiZSBmaW5lLiBUaGUgbW92ZSB0byBhIG1vcmUgZ3JhbnVsYXIgbG9ja2luZyBzY2hlbWUgaXMgcHJvbWlzaW5nIGJ1dCBuZWVkcyBhIHRob3JvdWdoIGluc3BlY3Rpb24uCgoqICAgVmFyaW91cyBgc3RhdGljIGlubGluZWAgZnVuY3Rpb25zIGhhdmUgYmVlbiBjaGFuZ2VkIHRvIGBzdGF0aWNgLiBUaGlzIGlzIGEgY29kZSBzdHlsZSBjaGFuZ2UsIHByb2JhYmx5IG5vdCByZWxldmFudC4KCiogICBUaGUgc2VsZnRlc3RzIGFyZSB1cGRhdGVkIGZvciBjb25jdXJyZW50IHJhY2VzIGludm9sdmluZyBgc21hcHNfcm9sbHVwYC4gR29vZCwgdGhlIHRlc3RpbmcgaXMgYmVpbmcgaW1wcm92ZWQsIGJ1dCBpdCBpbmRpY2F0ZXMgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyB3ZXJlIGlkZW50aWZpZWQ7IHRoaXMgd2FycmFudHMgYSBjbG9zZXIgbG9vayBhdCB0aGUgbG9ja2luZyBjaGFuZ2VzLgoKVG8gY29uZmlybSB0aGUgcG90ZW50aWFsIHJpc2tzLCBJIG5lZWQgdG8gZGVsdmUgaW50byBgc2hvd19zbWFwc19yb2xsdXBgLCBgc21hcF9nYXRoZXJfc3RhdHNgLCBhbmQgYHByb2NfZ2V0X3ZtYWAgaW4gZGV0YWlsLiBJJiMzOTtsbCB1c2UgY29kZXNlYXJjaCwgZ3JlcHBlciwgb3IgZGlyZWN0bHkgcmVhZCB0aGUgZmlsZXMgaWYgbmVjZXNzYXJ5LCBwYXlpbmcgY2xvc2UgYXR0ZW50aW9uIHRvIGFueSBtZW1vcnkgb3BlcmF0aW9ucywgbG9ja2luZyBzY2hlbWVzLCBhbmQgYXNzdW1wdGlvbnMgYWJvdXQgaW5pdGlhbGl6ZWQgbWVtb3J5LiBUaGUgZ29hbCBpcyB0byBpZGVudGlmeSBhbnkgYXJlYXMgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgcmVhZCBvciBleHBvc2VkIGR1ZSB0byB0aGUgY2hhbmdlcywgZXNwZWNpYWxseSB3aXRoaW4gdGhlIGNvbnRleHQgb2YgdGhlIGNvbmN1cnJlbnQgYWNjZXNzIGhpZ2hsaWdodGVkIGJ5IHRoZSBzZWxmdGVzdHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Byb2NfZ2V0X3ZtYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL3Byb2MvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL3Byb2MvdGFza19tbXUuYz0xOTU9c3RhdGljIHZvaWQgcmVhY3F1aXJlX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTIwNC1cbmZzL3Byb2MvdGFza19tbXUuYzoyMDU6c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcHJvY19nZXRfdm1hKHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwcG9zKVxuZnMvcHJvYy90YXNrX21tdS5jLTIwNi17XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTIzNz1zdGF0aWMgdm9pZCAqbV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcHBvcylcbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjcyLVxuZnMvcHJvYy90YXNrX21tdS5jOjI3MzpcdHJldHVybiBwcm9jX2dldF92bWEobSwgcHBvcyk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMjc0LX1cbi0tXG5mcy9wcm9jL3Rhc2tfbW11LmM9Mjc2PXN0YXRpYyB2b2lkICptX25leHQoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2LCBsb2ZmX3QgKnBwb3MpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTI4MS1cdH1cbmZzL3Byb2MvdGFza19tbXUuYzoyODI6XHRyZXR1cm4gcHJvY19nZXRfdm1hKG0sIHBwb3MpO1xuZnMvcHJvYy90YXNrX21tdS5jLTI4My19XG4tLVxuZnMvcHJvYy90YXNrX21tdS5jPTEzNjY9c3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxuZnMvcHJvYy90YXNrX21tdS5jLTEzOTEtXHR2bWFfaXRlcl9pbml0KFx1MDAyNnByaXYtXHUwMDNlaXRlciwgbW0sIDApO1xuZnMvcHJvYy90YXNrX21tdS5jOjEzOTI6XHR2bWEgPSBwcm9jX2dldF92bWEobSwgXHUwMDI2cG9zKTtcbmZzL3Byb2MvdGFza19tbXUuYy0xMzkzLVx0aWYgKHVubGlrZWx5KCF2bWEpKVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xNDM4LVx0XHR9XG5mcy9wcm9jL3Rhc2tfbW11LmM6MTQzOTpcdFx0dm1hID0gcHJvY19nZXRfdm1hKG0sIFx1MDAyNnBvcyk7XG5mcy9wcm9jL3Rhc2tfbW11LmMtMTQ0MC1cdH1cbi0tXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYz0xNzM9c3RhdGljIGludCBzaG93X21hcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKl9wKVxuLS1cbmZzL3Byb2MvdGFza19ub21tdS5jLTE3Ny1cbmZzL3Byb2MvdGFza19ub21tdS5jOjE3ODpzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcm9jX2dldF92bWEoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxuZnMvcHJvYy90YXNrX25vbW11LmMtMTc5LVx0XHRcdFx0XHRcdGxvZmZfdCAqcHBvcylcbi0tXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYz0xOTI9c3RhdGljIHZvaWQgKm1fc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBwb3MpXG4tLVxuZnMvcHJvYy90YXNrX25vbW11LmMtMTk3LVxuZnMvcHJvYy90YXNrX25vbW11LmM6MTk4Olx0LyogU2VlIHByb2NfZ2V0X3ZtYSgpLiBaZXJvIGF0IHRoZSBzdGFydCBvciBhZnRlciBsc2Vlay4gKi9cbmZzL3Byb2MvdGFza19ub21tdS5jLTE5OS1cdGlmIChsYXN0X2FkZHIgPT0gLTFVTClcbi0tXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYy0yMjItXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYzoyMjM6XHRyZXR1cm4gcHJvY19nZXRfdm1hKHByaXYsIHBwb3MpO1xuZnMvcHJvYy90YXNrX25vbW11LmMtMjI0LX1cbi0tXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYz0yNDA9c3RhdGljIHZvaWQgKm1fbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKl9wLCBsb2ZmX3QgKnBwb3MpXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYy0yNDEte1xuZnMvcHJvYy90YXNrX25vbW11LmM6MjQyOlx0cmV0dXJuIHByb2NfZ2V0X3ZtYShtLVx1MDAzZXByaXZhdGUsIHBwb3MpO1xuZnMvcHJvYy90YXNrX25vbW11LmMtMjQzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQyNDMKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IEFjY291bnRpbmcgaW4gYGZzL3Byb2MvdGFza19tbXUuY2AqKgoKQWxyaWdodCwgSSYjMzk7bSB0aGlua2luZyBhYm91dCBkaWdnaW5nIGludG8gdGhlIG1lbW9yeSBhY2NvdW50aW5nIGRldGFpbHMsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBwcm9jZXNzIGluZm9ybWF0aW9uIGhhbmRsaW5nLiBNeSBndXQgdGVsbHMgbWUgdGhlIGtleSBwaWVjZXMgYXJlIGdvaW5nIHRvIGJlIGFyb3VuZCB0aGUgYHNob3dfc21hcHNfcm9sbHVwYCBmdW5jdGlvbiBhbmQgdGhlIGBwcm9jX2dldF92bWFgIGZ1bmN0aW9uIGluIGBmcy9wcm9jL3Rhc2tfbW11LmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aG9zZSBmdW5jdGlvbnMgaW50ZXJhY3QgdG8gY2FsY3VsYXRlIGFuZCBwcmVzZW50IHRoZSBwZXItcHJvY2VzcyBtZW1vcnkgc3RhdGlzdGljcyB2aWEgL3Byb2MvW3BpZF0vc21hcHMgYW5kIC9wcm9jL1twaWRdL21hcHMuIEkmIzM5O20gZXNwZWNpYWxseSBjdXJpb3VzIGFib3V0IHdoZXJlIHRoZSByb2xsLXVwIGxvZ2ljIGlzIGhhbmRsZWQuIEFtIEkgcmlnaHQgaW4gdGhpbmtpbmcgdGhlIGBzaG93X3NtYXBzX3JvbGx1cGAgZnVuY3Rpb24gd291bGQgYmUgd2hlcmUgbW9zdCBvZiB0aGUgd29yayBoYXBwZW5zIGFnZ3JlZ2F0aW5nIFZNQSBzdGF0cz8gQW5kIGBwcm9jX2dldF92bWFgIGlzIHRoZSBWTUEgaXRlcmF0b3IuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBwb3RlbnRpYWwgaW5hY2N1cmFjaWVzIGluIHRoZSBhY2NvdW50aW5nLCBvciBtYXliZSBzb21lIGxlc3MtdGhhbi1vYnZpb3VzIGVkZ2UgY2FzZXMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUmIzM5O3MgYW55dGhpbmcgaW50ZXJlc3RpbmcgdG8gdW5wYWNrLiBUaGlzIGZlZWxzIGxpa2UgdGhlIHJpZ2h0IHBsYWNlIHRvIGJlZ2luLCB0byBwaW5wb2ludCBzb21lIG1lbW9yeSBhY2NvdW50aW5nIG9kZGl0aWVzIHRoYXQgSSYjMzk7dmUgc2VlbiBpbiB0aGUgcGFzdC4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBzb3VyY2UhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA3IDA5OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTk1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDcwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTU6XHRzdGF0aWMgdm9pZCByZWFjcXVpcmVfcmN1KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbiAxOTY6XHR7XG4gMTk3Olx0XHRpZiAocHJpdi1cdTAwM2Vsb2NrX2N0eC5tbWFwX2xvY2tlZClcbiAxOTg6XHRcdFx0cmV0dXJuO1xuIDE5OTpcdFxuIDIwMDpcdFx0cmN1X3JlYWRfbG9jaygpO1xuIDIwMTpcdFx0LyogUmVpbml0aWFsaXplIHRoZSBpdGVyYXRvci4gKi9cbiAyMDI6XHRcdHZtYV9pdGVyX3NldChcdTAwMjZwcml2LVx1MDAzZWl0ZXIsIHByaXYtXHUwMDNlbG9ja19jdHgubG9ja2VkX3ZtYS1cdTAwM2V2bV9lbmQpO1xuIDIwMzpcdH1cbiAyMDQ6XHRcbiAyMDU6XHRzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcm9jX2dldF92bWEoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBwb3MpXG4gMjA2Olx0e1xuIDIwNzpcdFx0c3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2ID0gbS1cdTAwM2Vwcml2YXRlO1xuIDIwODpcdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4gMjA5Olx0XG4gMjEwOlx0cmV0cnk6XG4gMjExOlx0XHR2bWEgPSBnZXRfbmV4dF92bWEocHJpdiwgKnBwb3MpO1xuIDIxMjpcdFx0LyogRUlOVFIgb2YgRUFHQUlOIGlzIHBvc3NpYmxlICovXG4gMjEzOlx0XHRpZiAoSVNfRVJSKHZtYSkpIHtcbiAyMTQ6XHRcdFx0aWYgKFBUUl9FUlIodm1hKSA9PSAtRUFHQUlOIFx1MDAyNlx1MDAyNiBmYWxsYmFja190b19tbWFwX2xvY2socHJpdiwgKnBwb3MpKVxuIDIxNTpcdFx0XHRcdGdvdG8gcmV0cnk7XG4gMjE2Olx0XG4gMjE3Olx0XHRcdHJldHVybiB2bWE7XG4gMjE4Olx0XHR9XG4gMjE5Olx0XG4gMjIwOlx0XHQvKiBTdG9yZSBwcmV2aW91cyBwb3NpdGlvbiB0byBiZSBhYmxlIHRvIHJlc3RhcnQgaWYgbmVlZGVkICovXG4gMjIxOlx0XHRwcml2LVx1MDAzZWxhc3RfcG9zID0gKnBwb3M7XG4gMjIyOlx0XHRpZiAodm1hKSB7XG4gMjIzOlx0XHRcdC8qXG4gMjI0Olx0XHRcdCAqIFRyYWNrIHRoZSBlbmQgb2YgdGhlIHJlcG9ydGVkIHZtYSB0byBlbnN1cmUgcG9zaXRpb24gY2hhbmdlc1xuIDIyNTpcdFx0XHQgKiBldmVuIGlmIHByZXZpb3VzIHZtYSB3YXMgbWVyZ2VkIHdpdGggdGhlIG5leHQgdm1hIGFuZCB3ZVxuIDIyNjpcdFx0XHQgKiBmb3VuZCB0aGUgZXh0ZW5kZWQgdm1hIHdpdGggdGhlIHNhbWUgdm1fc3RhcnQuXG4gMjI3Olx0XHRcdCAqL1xuIDIyODpcdFx0XHQqcHBvcyA9IHZtYS1cdTAwM2V2bV9lbmQ7XG4gMjI5Olx0XHR9IGVsc2Uge1xuIDIzMDpcdFx0XHQqcHBvcyA9IFNFTlRJTkVMX1ZNQV9HQVRFO1xuIDIzMTpcdFx0XHR2bWEgPSBnZXRfZ2F0ZV92bWEocHJpdi1cdTAwM2Vsb2NrX2N0eC5tbSk7XG4gMjMyOlx0XHR9XG4gMjMzOlx0XG4gMjM0Olx0XHRyZXR1cm4gdm1hO1xuIDIzNTpcdH1cbiAyMzY6XHRcbiAyMzc6XHRzdGF0aWMgdm9pZCAqbV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcHBvcylcbiAyMzg6XHR7XG4gMjM5Olx0XHRzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYgPSBtLVx1MDAzZXByaXZhdGU7XG4gMjQwOlx0XHRzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eDtcbiAyNDE6XHRcdGxvZmZfdCBsYXN0X2FkZHIgPSAqcHBvcztcbiAyNDI6XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xuIDI0MzpcdFxuIDI0NDpcdFx0LyogU2VlIG1fbmV4dCgpLiBaZXJvIGF0IHRoZSBzdGFydCBvciBhZnRlciBsc2Vlay4gKi9cbiAyNDU6XHRcdGlmIChsYXN0X2FkZHIgPT0gU0VOVElORUxfVk1BX0VORClcbiAyNDY6XHRcdFx0cmV0dXJuIE5VTEw7XG4gMjQ3Olx0XG4gMjQ4Olx0XHRwcml2LVx1MDAzZXRhc2sgPSBnZXRfcHJvY190YXNrKHByaXYtXHUwMDNlaW5vZGUpO1xuIDI0OTpcdFx0aWYgKCFwcml2LVx1MDAzZXRhc2spXG4gMjUwOlx0XHRcdHJldHVybiBFUlJfUFRSKC1FU1JDSCk7XG4gMjUxOlx0XG4gMjUyOlx0XHRsb2NrX2N0eCA9IFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHg7XG4gMjUzOlx0XHRtbSA9IGxvY2tfY3R4LVx1MDAzZW1tO1xuIDI1NDpcdFx0aWYgKCFtbSB8fCAhbW1nZXRfbm90X3plcm8obW0pKSB7XG4gMjU1Olx0XHRcdHB1dF90YXNrX3N0cnVjdChwcml2LVx1MDAzZXRhc2spO1xuIDI1NjpcdFx0XHRwcml2LVx1MDAzZXRhc2sgPSBOVUxMO1xuIDI1NzpcdFx0XHRyZXR1cm4gTlVMTDtcbiAyNTg6XHRcdH1cbiAyNTk6XHRcbiAyNjA6XHRcdHJjdV9yZWFkX2xvY2soKTtcbiAyNjE6XHRcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcbiAyNjI6XHRcdC8qXG4gMjYzOlx0XHQgKiBSZXNldCBjdXJyZW50IHBvc2l0aW9uIGlmIGxhc3RfYWRkciB3YXMgc2V0IGJlZm9yZVxuIDI2NDpcdFx0ICogYW5kIGl0JiMzOTtzIG5vdCBhIHNlbnRpbmVsLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wNyAwOTozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTY0OQoJCQkJCQkJb3V0cHV0OiAxOTUKCQkJCQkJCXRob3VnaHRzOiA3ODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFBhdGNoIGZvciBLTVNBTiBJbXBsaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgZXhwZXJ0IGV5ZSBpbW1lZGlhdGVseSBnb2VzIHRvIHRoZSBwb3RlbnRpYWwgZm9yIEtNU0FOIGlzc3VlcyDigJMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdpdGggcmVnYXJkcyB0byBgL3Byb2MvJHBpZC9zbWFwc19yb2xsdXBgLCBhbmQgSSBuZWVkIHRvIGJlICpzdXJlKiB3ZSYjMzk7cmUgbm90IGludHJvZHVjaW5nIGEgdnVsbmVyYWJpbGl0eS4KCkZpcnN0LCBJJiMzOTttIG5vdGluZyB0aGUgbG9ja2luZyBjaGFuZ2VzIHdpdGhpbiBgdGFza19tbXUuY2AuIFRoZSByZWZhY3RvcmluZyBvZiBgcHJvY19tYXBzX2xvY2tpbmdfY3R4YCBzb3VuZHMgbGlrZSBhIGdvb2Qgb3B0aW1pemF0aW9uLCBidXQgSSBoYXZlIHRvIGVuc3VyZSB0aGF0IHRoZSByZW1vdmFsIG9mIHRoZXNlIHdyYXBwZXJzIGhhc24mIzM5O3QgbGVmdCBhbnkgZ2Fwcy4gVGhlIHByaW1hcnkgY29uY2VybiBoZXJlIGlzIHJhY2UgY29uZGl0aW9ucyBvciBVQUYgd2hpY2ggd2lsbCBiZSBjYXVnaHQgYnkgS0FTQU4vTE9DS0RFUCwgYnV0IG5lZWRzIHRvIGJlIGV2YWx1YXRlZCBhcyBhIGZpcnN0IHN0ZXAuCgpOZXh0LCB0aGUgYHNtYXBfZ2F0aGVyX3N0YXRzYCBmdW5jdGlvbi4gSSYjMzk7bSBmb2N1c2luZyBvbiB0aGUgYm91bmRzIGNoZWNrLCB0aGUgdXNlIG9mIGB3YWxrX3BhZ2VfcmFuZ2Vfdm1hYCwgYW5kIHRoZSAqZXhwbGljaXQqIHplcm8taW5pdGlhbGl6YXRpb24gb2YgdGhlIGBtc3NgIHN0cnVjdHVyZSAoIGBzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgbXNzID0ge307YCApLiBUaGF0JiMzOTtzIGEgZ29vZCBzaWduIOKAkyB0aGF0IHplcm8taW5pdGlhbGl6YXRpb24gKmd1YXJhbnRlZXMqIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGluIHRoYXQgZnVuY3Rpb24uIEl0IGlzIGltcG9ydGFudCB0byByZW1lbWJlciB0aGF0IEtBU0FOIHdpbGwgYWxzbyBjYXRjaCBPT0IgaWYgc29tZXRoaW5nIGlzIHdyaXR0ZW4gdG8gYW4gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVnaW9uLgoKTm93LCBgc2hvd19zbWFwc19yb2xsdXBgOiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIHN3aXRjaGluZyB0byBwZXItVk1BIGxvY2tzIGlzIGEgcG90ZW50aWFsbHkgZ3JlYXQgb3B0aW1pemF0aW9uLCBidXQgSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgbG9ja2luZyBpcyBjb3JyZWN0IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IG5ldyByYWNlcy4gVGhlIGhhbmRsaW5nIG9mIGxvY2sgY29udGVudGlvbiBhbmQgZmFsbGJhY2sgaXMgYWxzbyBrZXkuIEFnYWluLCB0aGUgZXhwbGljaXQgemVyby1pbml0aWFsaXphdGlvbiBvZiBgbXNzYCBpcyBhIG1ham9yIHBvc2l0aXZlIGhlcmUuIEkmIzM5O20gYWxzbyByZXZpZXdpbmcgaG93IHRoZSBkYXRhIGlzIGJlaW5nIGZvcm1hdHRlZCBhbmQgd3JpdHRlbiB0byB0aGUgYHNlcV9maWxlYCBidWZmZXIsIGFuZCBpdCBhbGwgbG9va3Mgc2FmZSBpbiBjb21iaW5hdGlvbiB3aXRoIHRoZSB6ZXJvaW5nLgoKRmluYWxseSwgdGhlIHNlbGZ0ZXN0IGluIGBwcm9jLW1hcHMtcmFjZS5jYCBpcyB2ZXJ5IGltcG9ydGFudCB0byBlbnN1cmUgY29uY3VycmVudCBvcGVyYXRpb24gZG9lc24mIzM5O3QgaW50cm9kdWNlIHJhY2VzLCBlc3BlY2lhbGx5IHdpdGggVk1BIHNwbGl0cy9yZXNpemVzL3JlbWFwcy4gVGhpcyBpcyB0aGUgdGVzdGluZyB0aGF0IG5lZWRzIHRvIGNvbmZpcm0gbm8gZGF0YSByYWNlcyB3ZXJlIGludHJvZHVjZWQuCgpOb3csIHRoZSBjcnVjaWFsIHF1ZXN0aW9uOiBhcmUgdGhlcmUgYW55ICp1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyo/IEkmIzM5O3ZlIHN5c3RlbWF0aWNhbGx5IHJldmlld2VkIHRoZSBwYXRjaC4gVGhlIGFuc3dlciBpcyAqbm8qLiBUaGVyZSBhcmUgKm5vKiBuZXcgYWxsb2NhdGlvbnMgb3Igc3RydWN0dXJlcyB0aGF0IGFyZW4mIzM5O3QgYmVpbmcgemVyb2VkLCB0aGUgZGF0YSBjb3BpZWQgdG8gdXNlciBzcGFjZSBpcyBlaXRoZXIgZXhwbGljaXRseSBmb3JtYXR0ZWQgb3IgcGFzc2VzIHRocm91Z2ggYGNvcHlfdG9fdXNlcmAsIGFuZCB0aGVyZSYjMzk7cyBubyBldmlkZW5jZSBvZiB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgYnl0ZXMgYmVpbmcgY29waWVkLiBBbGwgY2hhbmdlcyBhcmUgYWJvdXQgbG9ja2luZyBhbmQgc3luY2hyb25pemF0aW9uLCBhbG9uZyB3aXRoIHBlcmZvcm1hbmNlIG9wdGltaXphdGlvbnMuIFRoaXMgcGF0Y2ggZG9lc24mIzM5O3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBwYXJ0aWFsIHN0cnVjdCBjb3BpZXMsIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy4gSXQgZG9lc24mIzM5O3QgaW50cm9kdWNlIHJpc2tzIHRoYXQgS01TQU4gaXMgdGFyZ2V0ZWQgYXQuCgpTbywgYWNjb3JkaW5nIHRvIHRoZSByZXF1aXJlbWVudHMsIG15IGp1ZGdtZW50IGlzIHRoYXQgYE5lZWRzS01TQU49ZmFsc2VgLiBNeSBhbmFseXNpcyBpbmRpY2F0ZXMgdGhhdCB0aGUgY29kZSBjaGFuZ2VzIHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHdoaWNoIGFyZSBjYXVnaHQgYnkgS0FTQU4vTE9DS0RFUCksIGFuZCBhbGwgc3RydWN0dXJlcyBhcmUgYmVpbmcgZnVsbHkgaW5pdGlhbGl6ZWQuIEkmIzM5O20gcmVhZHkgdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDcgMDk6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGxvY2tpbmcgYW5kIGl0ZXJhdGlvbiBsb2dpYyBpbiAvcHJvYy9cdTAwM2NwaWRcdTAwM2Uvc21hcHNfcm9sbHVwIGFuZCByZWxhdGVkIHRhc2tfbW11LmMgZnVuY3Rpb25zIChtaWdyYXRpbmcgc2hvd19zbWFwc19yb2xsdXAgdG8gdXNlIHBlci1WTUEgbG9ja2luZyB2aWEgcHJvY19nZXRfdm1hIGFuZCBzaW1wbGlmeWluZyBsb2NraW5nIGNvbnRleHQgaGVscGVyIGZ1bmN0aW9ucykuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHN0YXRpc3RpY3Mgc3RydWN0dXJlcyAoZS5nLiwgc3RydWN0IG1lbV9zaXplX3N0YXRzIG1zcyA9IHt9KSBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGFuZCBvdXRwdXQgaXMgZm9ybWF0dGVkIGFzIEFTQ0lJIHRleHQgaW50byBzZXFfZmlsZSBidWZmZXJzLiBUaGVyZSBhcmUgbm8gbmV3IG9yIG1vZGlmaWVkIHJhdyBzdHJ1Y3QgY29waWVzIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBvciBwYWRkaW5nLCBhbmQgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBjb25jdXJyZW5jeSBvciBsaWZldGltZSBpc3N1ZXMgaW50cm9kdWNlZCBieSBjaGFuZ2VzIHRvIFZNQSBsb2NraW5nL1JDVSB0cmF2ZXJzYWwgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBsb2NraW5nIGFuZCBpdGVyYXRpb24gbG9naWMgaW4gL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3NtYXBzX3JvbGx1cCBhbmQgcmVsYXRlZCB0YXNrX21tdS5jIGZ1bmN0aW9ucyAobWlncmF0aW5nIHNob3dfc21hcHNfcm9sbHVwIHRvIHVzZSBwZXItVk1BIGxvY2tpbmcgdmlhIHByb2NfZ2V0X3ZtYSBhbmQgc2ltcGxpZnlpbmcgbG9ja2luZyBjb250ZXh0IGhlbHBlciBmdW5jdGlvbnMpLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzdGF0aXN0aWNzIHN0cnVjdHVyZXMgKGUuZy4sIHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyBtc3MgPSB7fSkgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgb3V0cHV0IGlzIGZvcm1hdHRlZCBhcyBBU0NJSSB0ZXh0IGludG8gc2VxX2ZpbGUgYnVmZmVycy4gVGhlcmUgYXJlIG5vIG5ldyBvciBtb2RpZmllZCByYXcgc3RydWN0IGNvcGllcyB0byB1c2VyIHNwYWNlLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgcGFkZGluZywgYW5kIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgaXNzdWVzIGludHJvZHVjZWQgYnkgY2hhbmdlcyB0byBWTUEgbG9ja2luZy9SQ1UgdHJhdmVyc2FsIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjM4OjA5LjY4NDIwMzYzMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MTk3MTA0Nzc1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfRlNcIixcbiAgICBcIlBST0NfUEFHRV9NT05JVE9SXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2hvd19zbWFwc19yb2xsdXBcIixcbiAgICBcInNtYXBfZ2F0aGVyX3N0YXRzXCIsXG4gICAgXCJzaG93X3NtYXBcIixcbiAgICBcImRvX3Byb2NtYXBfcXVlcnlcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBsb2NraW5nIGFuZCBpdGVyYXRpb24gbG9naWMgaW4gL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2Uvc21hcHNfcm9sbHVwIGFuZCByZWxhdGVkIHRhc2tfbW11LmMgZnVuY3Rpb25zIChtaWdyYXRpbmcgc2hvd19zbWFwc19yb2xsdXAgdG8gdXNlIHBlci1WTUEgbG9ja2luZyB2aWEgcHJvY19nZXRfdm1hIGFuZCBzaW1wbGlmeWluZyBsb2NraW5nIGNvbnRleHQgaGVscGVyIGZ1bmN0aW9ucykuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHN0YXRpc3RpY3Mgc3RydWN0dXJlcyAoZS5nLiwgc3RydWN0IG1lbV9zaXplX3N0YXRzIG1zcyA9IHt9KSBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGFuZCBvdXRwdXQgaXMgZm9ybWF0dGVkIGFzIEFTQ0lJIHRleHQgaW50byBzZXFfZmlsZSBidWZmZXJzLiBUaGVyZSBhcmUgbm8gbmV3IG9yIG1vZGlmaWVkIHJhdyBzdHJ1Y3QgY29waWVzIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBvciBwYWRkaW5nLCBhbmQgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBjb25jdXJyZW5jeSBvciBsaWZldGltZSBpc3N1ZXMgaW50cm9kdWNlZCBieSBjaGFuZ2VzIHRvIFZNQSBsb2NraW5nL1JDVSB0cmF2ZXJzYWwgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyAvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS9zbWFwc19yb2xsdXAgYW5kIHNtYXBzIGl0ZXJhdGlvbiBsb2dpYyBpbiB0YXNrX21tdS5jIHRvIHVzZSBwZXItVk1BIGxvY2tzIHVuZGVyIFJDVSBpbnN0ZWFkIG9mIGFjcXVpcmluZyBtbWFwX2xvY2sgdXBmcm9udCwgYWRqdXN0cyBwYXJ0aWFsIFZNQSBzdGF0IGdhdGhlcmluZyBpbiBzbWFwX2dhdGhlcl9zdGF0cygpLCBhbmQgc2ltcGxpZmllcyBwcm9jX21hcHMgbG9ja2luZyBoZWxwZXJzLiBUaGlzIHJlYWNoYWJsZSBjb3JlIE1NL3Byb2NmcyBsb2dpYyBpcyB3b3J0aCBmdXp6aW5nIGZvciBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjM4OjA5LjY4NDIxMjk0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgwMzc3MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjU1YTdhY2JhN2I4YmYxYjc0ODdmYjE1OTA3NjAwNjBlNDc4OTBiNFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIFNlcCA3IDA5OjM4OjA4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuY1xcbmluZGV4IGU2NzFiNGZkOGRlZGQuLjY0MWExNTViMGM2MTMgMTAwNjQ0XFxuLS0tIGEvZnMvcHJvYy90YXNrX21tdS5jXFxuKysrIGIvZnMvcHJvYy90YXNrX21tdS5jXFxuQEAgLTEzMCwyOCArMTMwLDEyIEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfdGFza19tZW1wb2xpY3koc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbiB9XFxuICNlbmRpZlxcbiBcXG4tc3RhdGljIGlubGluZSBpbnQgbG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXFxuLXtcXG4tXFx0aW50IHJldCA9IG1tYXBfcmVhZF9sb2NrX2tpbGxhYmxlKGxvY2tfY3R4LVxcdTAwM2VtbSk7XFxuLVxcbi1cXHRpZiAoIXJldClcXG4tXFx0XFx0bG9ja19jdHgtXFx1MDAzZW1tYXBfbG9ja2VkID0gdHJ1ZTtcXG4tXFxuLVxcdHJldHVybiByZXQ7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfY3R4X21tKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxcbitzdGF0aWMgdm9pZCB1bmxvY2tfY3R4X21tKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxcbiB7XFxuIFxcdG1tYXBfcmVhZF91bmxvY2sobG9ja19jdHgtXFx1MDAzZW1tKTtcXG4gXFx0bG9ja19jdHgtXFx1MDAzZW1tYXBfbG9ja2VkID0gZmFsc2U7XFxuIH1cXG4gXFxuLXN0YXRpYyB2b2lkIHJlc2V0X2xvY2tfY3R4KHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxcbi17XFxuLVxcdGxvY2tfY3R4LVxcdTAwM2Vsb2NrZWRfdm1hID0gTlVMTDtcXG4tXFx0bG9ja19jdHgtXFx1MDAzZW1tYXBfbG9ja2VkID0gZmFsc2U7XFxuLX1cXG4tXFxuIHN0YXRpYyB2b2lkIHVubG9ja19jdHhfdm1hKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxcbiB7XFxuIFxcdGlmIChsb2NrX2N0eC1cXHUwMDNlbG9ja2VkX3ZtYSkge1xcbkBAIC0xNjAsMjMgKzE0NCwxMCBAQCBzdGF0aWMgdm9pZCB1bmxvY2tfY3R4X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcXG4gXFx0fVxcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgbG9ja192bWFfcmFuZ2Uoc3RydWN0IHNlcV9maWxlICptLFxcbi1cXHRcXHRcXHRcXHQgIHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxcbi17XFxuLVxcdHJjdV9yZWFkX2xvY2soKTtcXG4tXFx0cmVzZXRfbG9ja19jdHgobG9ja19jdHgpO1xcbi1cXG4tXFx0cmV0dXJuIHRydWU7XFxuLX1cXG4tXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfdm1hX3JhbmdlKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxcbitzdGF0aWMgdm9pZCByZXNldF9sb2NrX2N0eChzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcXG4ge1xcbi1cXHRpZiAobG9ja19jdHgtXFx1MDAzZW1tYXBfbG9ja2VkKSB7XFxuLVxcdFxcdHVubG9ja19jdHhfbW0obG9ja19jdHgpO1xcbi1cXHR9IGVsc2Uge1xcbi1cXHRcXHR1bmxvY2tfY3R4X3ZtYShsb2NrX2N0eCk7XFxuLVxcdFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbi1cXHR9XFxuK1xcdGxvY2tfY3R4LVxcdTAwM2Vsb2NrZWRfdm1hID0gTlVMTDtcXG4rXFx0bG9ja19jdHgtXFx1MDAzZW1tYXBfbG9ja2VkID0gZmFsc2U7XFxuIH1cXG4gXFxuIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmdldF9uZXh0X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXFxuQEAgLTE5Niw3ICsxNjcsNyBAQCBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnZXRfbmV4dF92bWEoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxcbiBcXHRyZXR1cm4gdm1hO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGJvb2wgZmFsbGJhY2tfdG9fbW1hcF9sb2NrKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcXG4rc3RhdGljIGJvb2wgZmFsbGJhY2tfdG9fbW1hcF9sb2NrKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcXG4gXFx0XFx0XFx0XFx0XFx0IGxvZmZfdCBwb3MpXFxuIHtcXG4gXFx0c3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHggPSBcXHUwMDI2cHJpdi1cXHUwMDNlbG9ja19jdHg7XFxuQEAgLTIxMyw3ICsxODQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmFsbGJhY2tfdG9fbW1hcF9sb2NrKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBkcm9wX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXFxuK3N0YXRpYyB2b2lkIGRyb3BfcmN1KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcXG4ge1xcbiBcXHRpZiAocHJpdi1cXHUwMDNlbG9ja19jdHgubW1hcF9sb2NrZWQpXFxuIFxcdFxcdHJldHVybjtcXG5AQCAtMjIxLDcgKzE5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkcm9wX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXFxuIFxcdHJjdV9yZWFkX3VubG9jaygpO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgcmVhY3F1aXJlX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXFxuK3N0YXRpYyB2b2lkIHJlYWNxdWlyZV9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbiB7XFxuIFxcdGlmIChwcml2LVxcdTAwM2Vsb2NrX2N0eC5tbWFwX2xvY2tlZClcXG4gXFx0XFx0cmV0dXJuO1xcbkBAIC0yODYsMTMgKzI1Nyw4IEBAIHN0YXRpYyB2b2lkICptX3N0YXJ0KHN0cnVjdCBzZXFfZmlsZSAqbSwgbG9mZl90ICpwcG9zKVxcbiBcXHRcXHRyZXR1cm4gTlVMTDtcXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFsb2NrX3ZtYV9yYW5nZShtLCBsb2NrX2N0eCkpIHtcXG4tXFx0XFx0bW1wdXQobW0pO1xcbi1cXHRcXHRwdXRfdGFza19zdHJ1Y3QocHJpdi1cXHUwMDNldGFzayk7XFxuLVxcdFxcdHByaXYtXFx1MDAzZXRhc2sgPSBOVUxMO1xcbi1cXHRcXHRyZXR1cm4gRVJSX1BUUigtRUlOVFIpO1xcbi1cXHR9XFxuLVxcbitcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcXG4gXFx0LypcXG4gXFx0ICogUmVzZXQgY3VycmVudCBwb3NpdGlvbiBpZiBsYXN0X2FkZHIgd2FzIHNldCBiZWZvcmVcXG4gXFx0ICogYW5kIGl0J3Mgbm90IGEgc2VudGluZWwuXFxuQEAgLTMyNSw3ICsyOTEsMTIgQEAgc3RhdGljIHZvaWQgbV9zdG9wKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4gXFx0XFx0cmV0dXJuO1xcbiBcXG4gXFx0cmVsZWFzZV90YXNrX21lbXBvbGljeShwcml2KTtcXG4tXFx0dW5sb2NrX3ZtYV9yYW5nZShcXHUwMDI2cHJpdi1cXHUwMDNlbG9ja19jdHgpO1xcbitcXHRpZiAocHJpdi1cXHUwMDNlbG9ja19jdHgubW1hcF9sb2NrZWQpIHtcXG4rXFx0XFx0dW5sb2NrX2N0eF9tbShcXHUwMDI2cHJpdi1cXHUwMDNlbG9ja19jdHgpO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHR1bmxvY2tfY3R4X3ZtYShcXHUwMDI2cHJpdi1cXHUwMDNlbG9ja19jdHgpO1xcbitcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4rXFx0fVxcbiBcXHRtbXB1dChtbSk7XFxuIFxcdHB1dF90YXNrX3N0cnVjdChwcml2LVxcdTAwM2V0YXNrKTtcXG4gXFx0cHJpdi1cXHUwMDNldGFzayA9IE5VTEw7XFxuQEAgLTUxOCwyMSArNDg5LDYgQEAgc3RhdGljIGludCBwaWRfbWFwc19vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbiBcXHRcXHRQUk9DTUFQX1FVRVJZX1ZNQV9GTEFHU1xcdFxcdFxcdFxcdFxcXFxcXG4gKVxcbiBcXG4tc3RhdGljIGludCBxdWVyeV92bWFfc2V0dXAoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXFxuLXtcXG4tXFx0cmVzZXRfbG9ja19jdHgobG9ja19jdHgpO1xcbi1cXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuLXN0YXRpYyB2b2lkIHF1ZXJ5X3ZtYV90ZWFyZG93bihzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcXG4te1xcbi1cXHRpZiAobG9ja19jdHgtXFx1MDAzZW1tYXBfbG9ja2VkKVxcbi1cXHRcXHR1bmxvY2tfY3R4X21tKGxvY2tfY3R4KTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHR1bmxvY2tfY3R4X3ZtYShsb2NrX2N0eCk7XFxuLX1cXG4tXFxuIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnF1ZXJ5X3ZtYV9maW5kX2J5X2FkZHIoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyKVxcbiB7XFxuQEAgLTY1MywxMiArNjA5LDcgQEAgc3RhdGljIGludCBkb19wcm9jbWFwX3F1ZXJ5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB2b2lkIF9fdXNlciAqdWFyZylcXG4gXFx0aWYgKCFtbSB8fCAhbW1nZXRfbm90X3plcm8obW0pKVxcbiBcXHRcXHRyZXR1cm4gLUVTUkNIO1xcbiBcXG4tXFx0ZXJyID0gcXVlcnlfdm1hX3NldHVwKFxcdTAwMjZsb2NrX2N0eCk7XFxuLVxcdGlmIChlcnIpIHtcXG4tXFx0XFx0bW1wdXQobW0pO1xcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbi1cXHR9XFxuLVxcbitcXHRyZXNldF9sb2NrX2N0eChcXHUwMDI2bG9ja19jdHgpO1xcbiBcXHR2bWEgPSBxdWVyeV9tYXRjaGluZ192bWEoXFx1MDAyNmxvY2tfY3R4LCBrYXJnLnF1ZXJ5X2FkZHIsIGthcmcucXVlcnlfZmxhZ3MpO1xcbiBcXHRpZiAoSVNfRVJSKHZtYSkpIHtcXG4gXFx0XFx0ZXJyID0gUFRSX0VSUih2bWEpO1xcbkBAIC03MzIsNyArNjgzLDEwIEBAIHN0YXRpYyBpbnQgZG9fcHJvY21hcF9xdWVyeShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdm9pZCBfX3VzZXIgKnVhcmcpXFxuIFxcdFxcdHZtX2ZpbGUgPSBnZXRfZmlsZSh2bWEtXFx1MDAzZXZtX2ZpbGUpO1xcbiBcXG4gXFx0LyogdW5sb2NrIHZtYSBvciBtbWFwX2xvY2ssIGFuZCBwdXQgbW1fc3RydWN0IGJlZm9yZSBjb3B5aW5nIGRhdGEgdG8gdXNlciAqL1xcbi1cXHRxdWVyeV92bWFfdGVhcmRvd24oXFx1MDAyNmxvY2tfY3R4KTtcXG4rXFx0aWYgKGxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxcbitcXHRcXHR1bmxvY2tfY3R4X21tKFxcdTAwMjZsb2NrX2N0eCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dW5sb2NrX2N0eF92bWEoXFx1MDAyNmxvY2tfY3R4KTtcXG4gXFx0bW1wdXQobW0pO1xcbiBcXG4gXFx0aWYgKGthcmcuYnVpbGRfaWRfc2l6ZSkge1xcbkBAIC03NzMsNyArNzI3LDEwIEBAIHN0YXRpYyBpbnQgZG9fcHJvY21hcF9xdWVyeShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdm9pZCBfX3VzZXIgKnVhcmcpXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gb3V0Olxcbi1cXHRxdWVyeV92bWFfdGVhcmRvd24oXFx1MDAyNmxvY2tfY3R4KTtcXG4rXFx0aWYgKGxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxcbitcXHRcXHR1bmxvY2tfY3R4X21tKFxcdTAwMjZsb2NrX2N0eCk7XFxuK1xcdGVsc2VcXG4rXFx0XFx0dW5sb2NrX2N0eF92bWEoXFx1MDAyNmxvY2tfY3R4KTtcXG4gXFx0bW1wdXQobW0pO1xcbiBvdXRfZmlsZTpcXG4gXFx0aWYgKHZtX2ZpbGUpXFxuQEAgLTEyNjMsNyArMTIyMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc21hcHNfc2htZW1fd2Fsa192bWFfbG9ja19vcHMgPSB7XFxuIFxcdC53YWxrX2xvY2tcXHRcXHQ9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSxcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqXFxuIGdldF9zbWFwc193YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXFxuIHtcXG4gXFx0aWYgKHByaXYtXFx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxcbkBAIC0xMjcxLDcgKzEyMjgsNyBAQCBnZXRfc21hcHNfd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbiBcXHRyZXR1cm4gXFx1MDAyNnNtYXBzX3dhbGtfdm1hX2xvY2tfb3BzO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqXFxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKlxcbiBnZXRfc21hcHNfc2htZW1fd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbiB7XFxuIFxcdGlmIChwcml2LVxcdTAwM2Vsb2NrX2N0eC5tbWFwX2xvY2tlZClcXG5AQCAtMTI3OSwyMCArMTIzNiwyNyBAQCBnZXRfc21hcHNfc2htZW1fd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbiBcXHRyZXR1cm4gXFx1MDAyNnNtYXBzX3NobWVtX3dhbGtfdm1hX2xvY2tfb3BzO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBHYXRoZXIgbWVtIHN0YXRzIGZyb20gQHZtYSB3aXRoIHRoZSBpbmRpY2F0ZWQgYmVnaW5uaW5nXFxuLSAqIGFkZHJlc3MgQHN0YXJ0LCBhbmQga2VlcCB0aGVtIGluIEBtc3MuXFxuKy8qKlxcbisgKiBzbWFwX2dhdGhlcl9zdGF0cygpIC0gR2F0aGVyIG1lbSBzdGF0cyBmcm9tIEB2bWEuXFxuKyAqIEBwcml2OiBwcm9jIG1hcHMgcHJpdmF0ZSBzdGF0ZS5cXG4rICogQHZtYTogVGhlIFZNQSB0byBnYXRoZXIgc3RhdHMgZm9yLlxcbisgKiBAbXNzOiBUaGUgYWNjdW11bGF0ZWQgc3RhdHMuXFxuKyAqIEBzdGFydDogVGhlIGFkZHJlc3MgZnJvbSB3aGljaCB0byBzdGFydC5cXG4gICpcXG4tICogVXNlIHZtX3N0YXJ0IG9mIEB2bWEgYXMgdGhlIGJlZ2lubmluZyBhZGRyZXNzIGlmIEBzdGFydCBpcyAwLlxcbisgKiBUaGlzIGdhdGhlcnMgc3RhdHMgZm9yIHRoZSB3aG9sZSBvZiB0aGUgVk1BIHVubGVzcyB0aGUgbG9jayB3YXMgZHJvcHBlZFxcbisgKiBhbmQgVk1BIGdyZXcgb3IgZ290IG1lcmdlZCBhbmQgd2UgZm91bmQgaXQgYWdhaW4sIGluIHdoaWNoIGNhc2Ugd2Ugb25seVxcbisgKiBnYXRoZXIgc3RhdHMgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIFZNQSByYW5nZS5cXG4gICovXFxuIHN0YXRpYyB2b2lkIHNtYXBfZ2F0aGVyX3N0YXRzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcXG4gXFx0XFx0XFx0ICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLVxcdFxcdFxcdCAgICAgIHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyAqbXNzLCB1bnNpZ25lZCBsb25nIHN0YXJ0KVxcbitcXHRcXHRcXHQgICAgICBzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgKm1zcyxcXG4rXFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBzdGFydClcXG4ge1xcbiBcXHRjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyA9IGdldF9zbWFwc193YWxrX29wcyhwcml2KTtcXG4rXFx0Y29uc3QgYm9vbCBpc19wYXJ0aWFsID0gc3RhcnQgXFx1MDAzZSB2bWEtXFx1MDAzZXZtX3N0YXJ0O1xcbiBcXG4gXFx0LyogSW52YWxpZCBzdGFydCAqL1xcbi1cXHRpZiAoc3RhcnQgXFx1MDAzZT0gdm1hLVxcdTAwM2V2bV9lbmQpXFxuK1xcdGlmIChzdGFydCBcXHUwMDNjIHZtYS1cXHUwMDNldm1fc3RhcnQgfHwgc3RhcnQgXFx1MDAzZT0gdm1hLVxcdTAwM2V2bV9lbmQpXFxuIFxcdFxcdHJldHVybjtcXG4gXFxuIFxcdGlmICh2bWEgPT0gZ2V0X2dhdGVfdm1hKHByaXYtXFx1MDAzZWxvY2tfY3R4Lm1tKSlcXG5AQCAtMTMxMiwyMCArMTI3NiwxNyBAQCBzdGF0aWMgdm9pZCBzbWFwX2dhdGhlcl9zdGF0cyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXFxuIFxcdFxcdCAqIFVubGVzcyB3ZSBrbm93IHRoYXQgdGhlIHNobWVtIG9iamVjdCAob3IgdGhlIHBhcnQgbWFwcGVkIGJ5XFxuIFxcdFxcdCAqIG91ciBWTUEpIGhhcyBubyBzd2FwcGVkIG91dCBwYWdlcyBhdCBhbGwuXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHR1bnNpZ25lZCBsb25nIHNobWVtX3N3YXBwZWQgPSBzaG1lbV9zd2FwX3VzYWdlKHZtYSk7XFxuK1xcdFxcdGNvbnN0IHVuc2lnbmVkIGxvbmcgc2htZW1fc3dhcHBlZCA9IHNobWVtX3N3YXBfdXNhZ2Uodm1hKTtcXG4rXFx0XFx0Y29uc3QgYm9vbCBzaGFyZWRfb3Jfcm8gPSB2bWFfdGVzdCh2bWEsIFZNQV9TSEFSRURfQklUKSB8fFxcbitcXHRcXHRcXHRcXHRcXHQgICF2bWFfdGVzdCh2bWEsIFZNQV9XUklURV9CSVQpO1xcbiBcXG4tXFx0XFx0aWYgKCFzdGFydCBcXHUwMDI2XFx1MDAyNiAoIXNobWVtX3N3YXBwZWQgfHwgKHZtYS1cXHUwMDNldm1fZmxhZ3MgXFx1MDAyNiBWTV9TSEFSRUQpIHx8XFxuLVxcdFxcdFxcdFxcdFxcdCEodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1dSSVRFKSkpIHtcXG4rXFx0XFx0aWYgKCFpc19wYXJ0aWFsIFxcdTAwMjZcXHUwMDI2ICghc2htZW1fc3dhcHBlZCB8fCBzaGFyZWRfb3Jfcm8pKVxcbiBcXHRcXHRcXHRtc3MtXFx1MDAzZXN3YXAgKz0gc2htZW1fc3dhcHBlZDtcXG4tXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0ZWxzZVxcbiBcXHRcXHRcXHRvcHMgPSBnZXRfc21hcHNfc2htZW1fd2Fsa19vcHMocHJpdik7XFxuLVxcdFxcdH1cXG4gXFx0fVxcbiBcXG4tXFx0aWYgKCFzdGFydClcXG4tXFx0XFx0d2Fsa19wYWdlX3ZtYSh2bWEsIG9wcywgbXNzKTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHR3YWxrX3BhZ2VfcmFuZ2Uodm1hLVxcdTAwM2V2bV9tbSwgc3RhcnQsIHZtYS1cXHUwMDNldm1fZW5kLCBvcHMsIG1zcyk7XFxuK1xcdHdhbGtfcGFnZV9yYW5nZV92bWEodm1hLCBzdGFydCwgdm1hLVxcdTAwM2V2bV9lbmQsIG9wcywgbXNzKTtcXG4gXFxuIFxcdHJlYWNxdWlyZV9yY3UocHJpdik7XFxuIH1cXG5AQCAtMTM4MCw3ICsxMzQxLDcgQEAgc3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbiBcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHY7XFxuIFxcdHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyBtc3MgPSB7fTtcXG4gXFxuLVxcdHNtYXBfZ2F0aGVyX3N0YXRzKHByaXYsIHZtYSwgXFx1MDAyNm1zcywgMCk7XFxuK1xcdHNtYXBfZ2F0aGVyX3N0YXRzKHByaXYsIHZtYSwgXFx1MDAyNm1zcywgdm1hLVxcdTAwM2V2bV9zdGFydCk7XFxuIFxcbiBcXHRzaG93X21hcF92bWEobSwgdm1hKTtcXG4gXFxuQEAgLTE0MDUsMTIgKzEzNjYsMTQgQEAgc3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbiBzdGF0aWMgaW50IHNob3dfc21hcHNfcm9sbHVwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4ge1xcbiBcXHRzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYgPSBtLVxcdTAwM2Vwcml2YXRlO1xcbitcXHRzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrX2N0eDtcXG4rXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBsb2NrX2N0eC1cXHUwMDNlbW07XFxuIFxcdHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyBtc3MgPSB7fTtcXG4tXFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LVxcdTAwM2Vsb2NrX2N0eC5tbTtcXG4rXFx0dW5zaWduZWQgbG9uZyBsYXN0X3ZtYV9lbmQgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIHZtYV9zdGFydCA9IDA7XFxuIFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbi1cXHR1bnNpZ25lZCBsb25nIHZtYV9zdGFydCA9IDAsIGxhc3Rfdm1hX2VuZCA9IDA7XFxuK1xcdGxvZmZfdCBwb3MgPSAwO1xcbiBcXHRpbnQgcmV0ID0gMDtcXG4tXFx0Vk1BX0lURVJBVE9SKHZtaSwgbW0sIDApO1xcbiBcXG4gXFx0cHJpdi1cXHUwMDNldGFzayA9IGdldF9wcm9jX3Rhc2socHJpdi1cXHUwMDNlaW5vZGUpO1xcbiBcXHRpZiAoIXByaXYtXFx1MDAzZXRhc2spXFxuQEAgLTE0MjEsODkgKzEzODQsNjAgQEAgc3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuIFxcdFxcdGdvdG8gb3V0X3B1dF90YXNrO1xcbiBcXHR9XFxuIFxcbi1cXHRyZXQgPSBsb2NrX2N0eF9tbShcXHUwMDI2cHJpdi1cXHUwMDNlbG9ja19jdHgpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRnb3RvIG91dF9wdXRfbW07XFxuLVxcbiBcXHRob2xkX3Rhc2tfbWVtcG9saWN5KHByaXYpO1xcbi1cXHR2bWEgPSB2bWFfbmV4dChcXHUwMDI2dm1pKTtcXG4rXFx0cmN1X3JlYWRfbG9jaygpO1xcbitcXHRyZXNldF9sb2NrX2N0eChsb2NrX2N0eCk7XFxuIFxcbitcXHR2bWFfaXRlcl9pbml0KFxcdTAwMjZwcml2LVxcdTAwM2VpdGVyLCBtbSwgMCk7XFxuK1xcdHZtYSA9IHByb2NfZ2V0X3ZtYShtLCBcXHUwMDI2cG9zKTtcXG4gXFx0aWYgKHVubGlrZWx5KCF2bWEpKVxcbiBcXHRcXHRnb3RvIGVtcHR5X3NldDtcXG4gXFxuLVxcdHZtYV9zdGFydCA9IHZtYS1cXHUwMDNldm1fc3RhcnQ7XFxuLVxcdGRvIHtcXG4tXFx0XFx0c21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCBcXHUwMDI2bXNzLCAwKTtcXG4tXFx0XFx0bGFzdF92bWFfZW5kID0gdm1hLVxcdTAwM2V2bV9lbmQ7XFxuK1xcdGlmICghSVNfRVJSKHZtYSkgXFx1MDAyNlxcdTAwMjYgdm1hICE9IGdldF9nYXRlX3ZtYShsb2NrX2N0eC1cXHUwMDNlbW0pKVxcbitcXHRcXHR2bWFfc3RhcnQgPSB2bWEtXFx1MDAzZXZtX3N0YXJ0O1xcbitcXG4rXFx0d2hpbGUgKHZtYSkge1xcbitcXHRcXHRpZiAoSVNfRVJSKHZtYSkpIHtcXG4rXFx0XFx0XFx0cmV0ID0gUFRSX0VSUih2bWEpO1xcbitcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdGlmICh2bWEgPT0gZ2V0X2dhdGVfdm1hKGxvY2tfY3R4LVxcdTAwM2VtbSkpXFxuK1xcdFxcdFxcdGJyZWFrO1xcbiBcXG4gXFx0XFx0LypcXG4tXFx0XFx0ICogUmVsZWFzZSBtbWFwX2xvY2sgdGVtcG9yYXJpbHkgaWYgc29tZW9uZSB3YW50cyB0b1xcbi1cXHRcXHQgKiBhY2Nlc3MgaXQgZm9yIHdyaXRlIHJlcXVlc3QuXFxuK1xcdFxcdCAqIElmIGFmdGVyIHJldGFraW5nIHRoZSBsb2NrLCBhbHJlYWR5IHJlcG9ydGVkIFZNQSBncmV3IG9yXFxuK1xcdFxcdCAqIG1lcmdlZCB3aXRoIHRoZSBuZXh0IG9uZSwgc21hcF9nYXRoZXJfc3RhdHMoKSB3aWxsIGdhdGhlclxcbitcXHRcXHQgKiBzdGF0cyBmb3IgdGhlIHJlbWFpbmluZyBwb3J0aW9uIGJ5IHN0YXJ0aW5nIGF0IGxhc3Rfdm1hX2VuZC5cXG4gXFx0XFx0ICovXFxuLVxcdFxcdGlmIChtbWFwX2xvY2tfaXNfY29udGVuZGVkKG1tKSkge1xcbi1cXHRcXHRcXHR2bWFfaXRlcl9pbnZhbGlkYXRlKFxcdTAwMjZ2bWkpO1xcbi1cXHRcXHRcXHR1bmxvY2tfY3R4X21tKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrX2N0eCk7XFxuLVxcdFxcdFxcdHJldCA9IGxvY2tfY3R4X21tKFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrX2N0eCk7XFxuLVxcdFxcdFxcdGlmIChyZXQpIHtcXG4tXFx0XFx0XFx0XFx0cmVsZWFzZV90YXNrX21lbXBvbGljeShwcml2KTtcXG4tXFx0XFx0XFx0XFx0Z290byBvdXRfcHV0X21tO1xcbi1cXHRcXHRcXHR9XFxuK1xcdFxcdHNtYXBfZ2F0aGVyX3N0YXRzKHByaXYsIHZtYSwgXFx1MDAyNm1zcywgbGFzdF92bWFfZW5kKTtcXG4rXFx0XFx0bGFzdF92bWFfZW5kID0gdm1hLVxcdTAwM2V2bV9lbmQ7XFxuIFxcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBJZiB0aGUgVk1BIGxvY2sgaXMgbm90IHRha2VuLCB3ZSBob2xkIHRoZSBvZnRlbiBjb250ZW5kZWRcXG4rXFx0XFx0ICogbW1hcCBsb2NrLiBUaGlzIGNhbiBoYXBwZW4gaWYgd2UgaGFkIHRvIGZhbGwgYmFjayB0byB0aGVcXG4rXFx0XFx0ICogbW1hcCBsb2NrLlxcbitcXHRcXHQgKlxcbitcXHRcXHQgKiBUbyByZWxpZXZlIHByZXNzdXJlLCBjaGVjayBpZiBpdCBpcyBpbmRlZWQgY29udGVuZGVkLCB0aGVuXFxuK1xcdFxcdCAqIHRlbXBvcmFyaWx5IHJlbGVhc2UgaXQuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAobG9ja19jdHgtXFx1MDAzZW1tYXBfbG9ja2VkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBtbWFwX2xvY2tfaXNfY29udGVuZGVkKGxvY2tfY3R4LVxcdTAwM2VtbSkpIHtcXG4rXFx0XFx0XFx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XFxuIFxcdFxcdFxcdC8qXFxuLVxcdFxcdFxcdCAqIEFmdGVyIGRyb3BwaW5nIHRoZSBsb2NrLCB0aGVyZSBhcmUgZm91ciBjYXNlcyB0b1xcbi1cXHRcXHRcXHQgKiBjb25zaWRlci4gU2VlIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSBmb3IgZXhwbGFuYXRpb24uXFxuLVxcdFxcdFxcdCAqXFxuLVxcdFxcdFxcdCAqICAgKy0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0rXFxuLVxcdFxcdFxcdCAqICAgfCBWTUExIHwgVk1BMiB8IFZNQTMgICAgICB8XFxuLVxcdFxcdFxcdCAqICAgKy0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0rXFxuLVxcdFxcdFxcdCAqICAgfCAgICAgIHwgICAgICB8ICAgICAgICAgICB8XFxuLVxcdFxcdFxcdCAqICA0ayAgICAgOGsgICAgIDE2ayAgICAgICAgIDQwMGtcXG4tXFx0XFx0XFx0ICpcXG4tXFx0XFx0XFx0ICogU3VwcG9zZSB3ZSBkcm9wIHRoZSBsb2NrIGFmdGVyIHJlYWRpbmcgVk1BMiBkdWUgdG9cXG4tXFx0XFx0XFx0ICogY29udGVudGlvbiwgdGhlbiB3ZSBnZXQ6XFxuLVxcdFxcdFxcdCAqXFxuLVxcdFxcdFxcdCAqXFx0bGFzdF92bWFfZW5kID0gMTZrXFxuLVxcdFxcdFxcdCAqXFxuLVxcdFxcdFxcdCAqIDEpIFZNQTIgaXMgZnJlZWQsIGJ1dCBWTUEzIGV4aXN0czpcXG4tXFx0XFx0XFx0ICpcXG4tXFx0XFx0XFx0ICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBWTUEzLlxcbi1cXHRcXHRcXHQgKiAgICBJbiB0aGlzIGNhc2UsIGp1c3QgY29udGludWUgZnJvbSBWTUEzLlxcbi1cXHRcXHRcXHQgKlxcbi1cXHRcXHRcXHQgKiAyKSBWTUEyIHN0aWxsIGV4aXN0czpcXG4tXFx0XFx0XFx0ICpcXG4tXFx0XFx0XFx0ICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBWTUEzLlxcbi1cXHRcXHRcXHQgKiAgICBJbiB0aGlzIGNhc2UsIGp1c3QgY29udGludWUgZnJvbSBWTUEzLlxcbi1cXHRcXHRcXHQgKlxcbi1cXHRcXHRcXHQgKiAzKSBObyBtb3JlIFZNQXMgY2FuIGJlIGZvdW5kOlxcbi1cXHRcXHRcXHQgKlxcbi1cXHRcXHRcXHQgKiAgICB2bWFfbmV4dCh2bWkpIHdpbGwgcmV0dXJuIE5VTEwuXFxuLVxcdFxcdFxcdCAqICAgIE5vIG1vcmUgdGhpbmdzIHRvIGRvLCBqdXN0IGJyZWFrLlxcbi1cXHRcXHRcXHQgKlxcbi1cXHRcXHRcXHQgKiA0KSAobGFzdF92bWFfZW5kIC0gMSkgaXMgdGhlIG1pZGRsZSBvZiBhIHZtYSAoVk1BJyk6XFxuLVxcdFxcdFxcdCAqXFxuLVxcdFxcdFxcdCAqICAgIHZtYV9uZXh0KHZtaSkgd2lsbCByZXR1cm4gVk1BJyB3aG9zZSByYW5nZVxcbi1cXHRcXHRcXHQgKiAgICBjb250YWlucyBsYXN0X3ZtYV9lbmQuXFxuLVxcdFxcdFxcdCAqICAgIEl0ZXJhdGUgVk1BJyBmcm9tIGxhc3Rfdm1hX2VuZC5cXG4rXFx0XFx0XFx0ICogRXZlbiB0aG91Z2ggd2UgcHJldmlvdXNseSBmZWxsIGJhY2sgdG8gbW1hcCBsb2NrLFxcbitcXHRcXHRcXHQgKiB3ZSB0cnkgdGFraW5nIFZNQSBsb2NrIGZvciB0aGUgbmV4dCBWTUEsIHNpbmNlIGl0XFxuK1xcdFxcdFxcdCAqIG1pZ2h0IG5vdCBiZSB1bmRlciBtb2RpZmljYXRpb24uIEluIHRoZSB3b3JzdCBjYXNlXFxuK1xcdFxcdFxcdCAqIHdlIHdpbGwgZmFsbCBiYWNrIHRvIG1tYXAgbG9jayBhZ2Fpbi5cXG4gXFx0XFx0XFx0ICovXFxuLVxcdFxcdFxcdHZtYSA9IHZtYV9uZXh0KFxcdTAwMjZ2bWkpO1xcbi1cXHRcXHRcXHQvKiBDYXNlIDMgYWJvdmUgKi9cXG4tXFx0XFx0XFx0aWYgKCF2bWEpXFxuLVxcdFxcdFxcdFxcdGJyZWFrO1xcbi1cXG4tXFx0XFx0XFx0LyogQ2FzZSAxIGFuZCAyIGFib3ZlICovXFxuLVxcdFxcdFxcdGlmICh2bWEtXFx1MDAzZXZtX3N0YXJ0IFxcdTAwM2U9IGxhc3Rfdm1hX2VuZCkge1xcbi1cXHRcXHRcXHRcXHRzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsIFxcdTAwMjZtc3MsIDApO1xcbi1cXHRcXHRcXHRcXHRsYXN0X3ZtYV9lbmQgPSB2bWEtXFx1MDAzZXZtX2VuZDtcXG4tXFx0XFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdFxcdH1cXG4tXFxuLVxcdFxcdFxcdC8qIENhc2UgNCBhYm92ZSAqL1xcbi1cXHRcXHRcXHRpZiAodm1hLVxcdTAwM2V2bV9lbmQgXFx1MDAzZSBsYXN0X3ZtYV9lbmQpIHtcXG4tXFx0XFx0XFx0XFx0c21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCBcXHUwMDI2bXNzLCBsYXN0X3ZtYV9lbmQpO1xcbi1cXHRcXHRcXHRcXHRsYXN0X3ZtYV9lbmQgPSB2bWEtXFx1MDAzZXZtX2VuZDtcXG4tXFx0XFx0XFx0fVxcbitcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuK1xcdFxcdFxcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcXG4rXFx0XFx0XFx0LyogUmVzdW1lIGZyb20gdGhlIGxhc3QgcG9zaXRpb24uICovXFxuK1xcdFxcdFxcdHBvcyA9IGxhc3Rfdm1hX2VuZDtcXG4rXFx0XFx0XFx0dm1hX2l0ZXJfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlaXRlciwgbW0sIHBvcyk7XFxuIFxcdFxcdH1cXG4tXFx0fSBmb3JfZWFjaF92bWEodm1pLCB2bWEpO1xcbitcXHRcXHR2bWEgPSBwcm9jX2dldF92bWEobSwgXFx1MDAyNnBvcyk7XFxuK1xcdH1cXG4gXFxuIGVtcHR5X3NldDpcXG4gXFx0c2hvd192bWFfaGVhZGVyX3ByZWZpeChtLCB2bWFfc3RhcnQsIGxhc3Rfdm1hX2VuZCwgMCwgMCwgMCwgMCk7XFxuQEAgLTE1MTIsMTAgKzE0NDYsMTQgQEAgc3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuIFxcbiBcXHRfX3Nob3dfc21hcChtLCBcXHUwMDI2bXNzLCB0cnVlKTtcXG4gXFxuK291dF91bmxvY2s6XFxuK1xcdGlmIChsb2NrX2N0eC1cXHUwMDNlbW1hcF9sb2NrZWQpIHtcXG4rXFx0XFx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdHVubG9ja19jdHhfdm1hKGxvY2tfY3R4KTtcXG4rXFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuK1xcdH1cXG4gXFx0cmVsZWFzZV90YXNrX21lbXBvbGljeShwcml2KTtcXG4tXFx0dW5sb2NrX2N0eF9tbShcXHUwMDI2cHJpdi1cXHUwMDNlbG9ja19jdHgpO1xcbi1cXG4tb3V0X3B1dF9tbTpcXG4gXFx0bW1wdXQobW0pO1xcbiBvdXRfcHV0X3Rhc2s6XFxuIFxcdHB1dF90YXNrX3N0cnVjdChwcml2LVxcdTAwM2V0YXNrKTtcXG5AQCAtMTYwNSw3ICsxNTQzLDcgQEAgc3RydWN0IGNsZWFyX3JlZnNfcHJpdmF0ZSB7XFxuIFxcdGVudW0gY2xlYXJfcmVmc190eXBlcyB0eXBlO1xcbiB9O1xcbiBcXG4tc3RhdGljIGlubGluZSBib29sIHB0ZV9pc19waW5uZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxcbitzdGF0aWMgYm9vbCBwdGVfaXNfcGlubmVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSlcXG4ge1xcbiBcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbiBcXG5AQCAtMTYyMSw4ICsxNTU5LDggQEAgc3RhdGljIGlubGluZSBib29sIHB0ZV9pc19waW5uZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0cmV0dXJuIGZvbGlvX21heWJlX2RtYV9waW5uZWQoZm9saW8pO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwdGVfdCAqcHRlKVxcbitzdGF0aWMgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuK1xcdFxcdFxcdCAgICAgcHRlX3QgKnB0ZSlcXG4ge1xcbiBcXHRpZiAoIXBndGFibGVfc3VwcG9ydHNfc29mdF9kaXJ0eSgpKVxcbiBcXHRcXHRyZXR1cm47XFxuQEAgLTE2NTMsOCArMTU5MSw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiB9XFxuIFxcbiAjaWYgZGVmaW5lZChDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UpXFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5X3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tXFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kcClcXG4rc3RhdGljIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuK1xcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKVxcbiB7XFxuIFxcdHBtZF90IG9sZCwgcG1kID0gKnBtZHA7XFxuIFxcbkBAIC0xNjc5LDggKzE2MTcsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdH1cXG4gfVxcbiAjZWxzZVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLVxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHApXFxuK3N0YXRpYyB2b2lkIGNsZWFyX3NvZnRfZGlydHlfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbitcXHRcXHRcXHRcXHQgdW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kcClcXG4ge1xcbiB9XFxuICNlbmRpZlxcbkBAIC0xODc5LDcgKzE4MTcsNyBAQCBzdHJ1Y3QgcGFnZW1hcHJlYWQge1xcbiBcXG4gI2RlZmluZSBQTV9FTkRfT0ZfQlVGRkVSICAgIDFcXG4gXFxuLXN0YXRpYyBpbmxpbmUgcGFnZW1hcF9lbnRyeV90IG1ha2VfcG1lKHU2NCBmcmFtZSwgdTY0IGZsYWdzKVxcbitzdGF0aWMgcGFnZW1hcF9lbnRyeV90IG1ha2VfcG1lKHU2NCBmcmFtZSwgdTY0IGZsYWdzKVxcbiB7XFxuIFxcdHJldHVybiAocGFnZW1hcF9lbnRyeV90KSB7IC5wbWUgPSAoZnJhbWUgXFx1MDAyNiBQTV9QRlJBTUVfTUFTSykgfCBmbGFncyB9O1xcbiB9XFxuQEAgLTM0MjEsNyArMzM1OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc2hvd19udW1hX3ZtYV9sb2NrX29wcyA9IHtcXG4gXFx0LndhbGtfbG9jayA9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSxcXG4gfTtcXG4gXFxuLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqXFxuIGdldF9zaG93X251bWFfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcXG4ge1xcbiBcXHRpZiAocHJpdi1cXHUwMDNlbG9ja19jdHgubW1hcF9sb2NrZWQpXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuY1xcbmluZGV4IDQxNWVjY2I3MDQ2ODQuLjhkMDBkN2RiMWM2NTIgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLW1hcHMtcmFjZS5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLW1hcHMtcmFjZS5jXFxuQEAgLTgwLDYgKzgwLDYxIEBAIGVudW0gbWFwc19maWxlIHtcXG4gXFxuIHN0cnVjdCB2bWFfbW9kaWZpZXJfaW5mbztcXG4gXFxuK2VudW0gc21hcHNfcm9sbHVwX3N0YXQge1xcbitcXHRSc3MsXFxuK1xcdFBzcyxcXG4rXFx0UHNzX0RpcnR5LFxcbitcXHRQc3NfQW5vbixcXG4rXFx0UHNzX0ZpbGUsXFxuK1xcdFBzc19TaG1lbSxcXG4rXFx0U2hhcmVkX0NsZWFuLFxcbitcXHRTaGFyZWRfRGlydHksXFxuK1xcdFByaXZhdGVfQ2xlYW4sXFxuK1xcdFByaXZhdGVfRGlydHksXFxuK1xcdFJlZmVyZW5jZWQsXFxuK1xcdEFub255bW91cyxcXG4rXFx0S1NNLFxcbitcXHRMYXp5RnJlZSxcXG4rXFx0QW5vbkh1Z2VQYWdlcyxcXG4rXFx0U2htZW1QbWRNYXBwZWQsXFxuK1xcdEZpbGVQbWRNYXBwZWQsXFxuK1xcdFNoYXJlZF9IdWdldGxiLFxcbitcXHRQcml2YXRlX0h1Z2V0bGIsXFxuK1xcdFN3YXAsXFxuK1xcdFN3YXBQc3MsXFxuK1xcdExvY2tlZCxcXG4rXFx0Um9sbHVwRmllbGRDb3VudFxcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IGNoYXIgKnNtYXBzX3JvbGx1cF9zdGF0X25hbWVzW1JvbGx1cEZpZWxkQ291bnRdID0ge1xcbitcXHRcXFwiUnNzXFxcIixcXG4rXFx0XFxcIlBzc1xcXCIsXFxuK1xcdFxcXCJQc3NfRGlydHlcXFwiLFxcbitcXHRcXFwiUHNzX0Fub25cXFwiLFxcbitcXHRcXFwiUHNzX0ZpbGVcXFwiLFxcbitcXHRcXFwiUHNzX1NobWVtXFxcIixcXG4rXFx0XFxcIlNoYXJlZF9DbGVhblxcXCIsXFxuK1xcdFxcXCJTaGFyZWRfRGlydHlcXFwiLFxcbitcXHRcXFwiUHJpdmF0ZV9DbGVhblxcXCIsXFxuK1xcdFxcXCJQcml2YXRlX0RpcnR5XFxcIixcXG4rXFx0XFxcIlJlZmVyZW5jZWRcXFwiLFxcbitcXHRcXFwiQW5vbnltb3VzXFxcIixcXG4rXFx0XFxcIktTTVxcXCIsXFxuK1xcdFxcXCJMYXp5RnJlZVxcXCIsXFxuK1xcdFxcXCJBbm9uSHVnZVBhZ2VzXFxcIixcXG4rXFx0XFxcIlNobWVtUG1kTWFwcGVkXFxcIixcXG4rXFx0XFxcIkZpbGVQbWRNYXBwZWRcXFwiLFxcbitcXHRcXFwiU2hhcmVkX0h1Z2V0bGJcXFwiLFxcbitcXHRcXFwiUHJpdmF0ZV9IdWdldGxiXFxcIixcXG4rXFx0XFxcIlN3YXBcXFwiLFxcbitcXHRcXFwiU3dhcFBzc1xcXCIsXFxuK1xcdFxcXCJMb2NrZWRcXFwiLFxcbit9O1xcbitcXG4rc3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyB7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdmFsdWVzW1JvbGx1cEZpZWxkQ291bnRdO1xcbit9O1xcbitcXG4gRklYVFVSRShwcm9jX21hcHNfcmFjZSlcXG4ge1xcbiBcXHRzdHJ1Y3Qgdm1hX21vZGlmaWVyX2luZm8gKm1vZF9pbmZvO1xcbkBAIC05MSw2ICsxNDYsNyBAQCBGSVhUVVJFKHByb2NfbWFwc19yYWNlKVxcbiBcXHRlbnVtIG1hcHNfZmlsZSBtYXBzX2ZpbGU7XFxuIFxcdGludCBzaGFyZWRfbWVtX3NpemU7XFxuIFxcdGludCBza2lwX3BhZ2VzO1xcbitcXHRpbnQgcm9sbHVwX2ZkO1xcbiBcXHRpbnQgcGFnZV9zaXplO1xcbiBcXHRpbnQgdm1hX2NvdW50O1xcbiBcXHRib29sIHZlcmJvc2U7XFxuQEAgLTEzMiwxMiArMTg4LDEyIEBAIHN0cnVjdCB2bWFfbW9kaWZpZXJfaW5mbyB7XFxuIFxcdHZvaWQgKmNoaWxkX21hcHBlZF9hZGRyW107XFxuIH07XFxuIFxcbi1zdGF0aWMgYm9vbCByZWFkX3BhZ2UoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZixcXG4rc3RhdGljIGJvb2wgcmVhZF9wYWdlKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsIGludCBmZCxcXG4gXFx0XFx0ICAgICAgc3RydWN0IHBhZ2VfY29udGVudCAqcGFnZSlcXG4ge1xcbiBcXHRzc2l6ZV90ICBieXRlc19yZWFkO1xcbiBcXG4tXFx0Ynl0ZXNfcmVhZCA9IHJlYWQoc2VsZi1cXHUwMDNlbWFwc19mZCwgcGFnZS1cXHUwMDNlZGF0YSwgc2VsZi1cXHUwMDNlcGFnZV9zaXplKTtcXG4rXFx0Ynl0ZXNfcmVhZCA9IHJlYWQoZmQsIHBhZ2UtXFx1MDAzZWRhdGEsIHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSk7XFxuIFxcdGlmIChieXRlc19yZWFkIFxcdTAwM2M9IDApXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuQEAgLTE3NSw3ICsyMzEsNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9jb250YWluaW5nX3BhZ2UoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZixcXG4gXFx0XFx0Y2hhciAqY3Vycl9wb3M7XFxuIFxcdFxcdGNoYXIgKmVuZF9wb3M7XFxuIFxcbi1cXHRcXHRpZiAoIXJlYWRfcGFnZShzZWxmLCBcXHUwMDI2c2VsZi1cXHUwMDNlcGFnZTEpKVxcbitcXHRcXHRpZiAoIXJlYWRfcGFnZShzZWxmLCBzZWxmLVxcdTAwM2VtYXBzX2ZkLCBcXHUwMDI2c2VsZi1cXHUwMDNlcGFnZTEpKVxcbiBcXHRcXHRcXHRyZXR1cm4gLTE7XFxuIFxcbiBcXHRcXHRjdXJyX3BvcyA9IHNlbGYtXFx1MDAzZXBhZ2UxLmRhdGE7XFxuQEAgLTIwNSwxMCArMjYxLDExIEBAIHN0YXRpYyBib29sIHJlYWRfdHdvX3BhZ2VzKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4gXFxuIFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mgc2VsZi1cXHUwMDNlc2tpcF9wYWdlczsgaSsrKVxcbi1cXHRcXHRpZiAoIXJlYWRfcGFnZShzZWxmLCBcXHUwMDI2c2VsZi1cXHUwMDNlcGFnZTEpKVxcbitcXHRcXHRpZiAoIXJlYWRfcGFnZShzZWxmLCBzZWxmLVxcdTAwM2VtYXBzX2ZkLCBcXHUwMDI2c2VsZi1cXHUwMDNlcGFnZTEpKVxcbiBcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcbi1cXHRyZXR1cm4gcmVhZF9wYWdlKHNlbGYsIFxcdTAwMjZzZWxmLVxcdTAwM2VwYWdlMSkgXFx1MDAyNlxcdTAwMjYgcmVhZF9wYWdlKHNlbGYsIFxcdTAwMjZzZWxmLVxcdTAwM2VwYWdlMik7XFxuK1xcdHJldHVybiByZWFkX3BhZ2Uoc2VsZiwgc2VsZi1cXHUwMDNlbWFwc19mZCwgXFx1MDAyNnNlbGYtXFx1MDAzZXBhZ2UxKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgICAgcmVhZF9wYWdlKHNlbGYsIHNlbGYtXFx1MDAzZW1hcHNfZmQsIFxcdTAwMjZzZWxmLVxcdTAwM2VwYWdlMik7XFxuIH1cXG4gXFxuIHN0YXRpYyB2b2lkIGNvcHlfbGluZShjb25zdCBjaGFyICpsaW5lX3N0YXJ0LCBjb25zdCBjaGFyICpsaW5lX2VuZCxcXG5AQCAtMzE3LDYgKzM3NCw2MSBAQCBzdGF0aWMgYm9vbCByZWFkX2JvdW5kYXJ5X2xpbmVzKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsXFxuIFxcdFxcdCAgICAgIFxcdTAwMjZmaXJzdF9saW5lLVxcdTAwM2VlbmRfYWRkcikgPT0gMjtcXG4gfVxcbiBcXG4rc3RhdGljIGJvb2wgcGFyc2Vfc21hcHNfcm9sbHVwKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsXFxuK1xcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpzdGF0cylcXG4re1xcbitcXHR1bnNpZ25lZCBpbnQgZGV2X21haiwgZGV2X21pbiwgaW5vZGU7XFxuK1xcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZCwgb2ZmcztcXG4rXFx0dW5zaWduZWQgbG9uZyB2YWx1ZTtcXG4rXFx0Y2hhciBuYW1lWzMyXSwgcGVybVs1XTtcXG4rXFx0Y2hhciAqY3Vycl9wb3M7XFxuK1xcdGNoYXIgKmVuZF9wb3M7XFxuK1xcdGNoYXIgKmxpbmVfZW5kO1xcbitcXG4rXFx0aWYgKGxzZWVrKHNlbGYtXFx1MDAzZXJvbGx1cF9mZCwgMCwgU0VFS19TRVQpIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKCFyZWFkX3BhZ2Uoc2VsZiwgc2VsZi1cXHUwMDNlcm9sbHVwX2ZkLCBcXHUwMDI2c2VsZi1cXHUwMDNlcGFnZTEpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRjdXJyX3BvcyA9IHNlbGYtXFx1MDAzZXBhZ2UxLmRhdGE7XFxuK1xcdGVuZF9wb3MgPSBzZWxmLVxcdTAwM2VwYWdlMS5kYXRhICsgc2VsZi1cXHUwMDNlcGFnZTEuc2l6ZTtcXG4rXFxuK1xcdGxpbmVfZW5kID0gc3RyY2hyKGN1cnJfcG9zLCAnXFxcXG4nKTtcXG4rXFx0aWYgKCFsaW5lX2VuZClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHNzY2FuZihjdXJyX3BvcywgXFxcIiVseC0lbHggJTRzICVseCAldToldSAldSAlMzFzXFxcIixcXG4rXFx0XFx0XFx1MDAyNnN0YXJ0LCBcXHUwMDI2ZW5kLCBwZXJtLCBcXHUwMDI2b2ZmcywgXFx1MDAyNmRldl9tYWosIFxcdTAwMjZkZXZfbWluLCBcXHUwMDI2aW5vZGUsIG5hbWUpICE9IDgpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmIChzdHJjbXAobmFtZSwgXFxcIltyb2xsdXBdXFxcIikpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGZvciAoaW50IHN0YXQgPSAwOyBzdGF0IFxcdTAwM2MgQVJSQVlfU0laRShzbWFwc19yb2xsdXBfc3RhdF9uYW1lcyk7IHN0YXQrKykge1xcbitcXHRcXHRpbnQgbGVuO1xcbitcXG4rXFx0XFx0Y3Vycl9wb3MgPSBsaW5lX2VuZCArIDE7XFxuK1xcdFxcdGlmIChjdXJyX3BvcyBcXHUwMDNlPSBlbmRfcG9zKVxcbitcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRcXHRsaW5lX2VuZCA9IHN0cmNocihjdXJyX3BvcywgJ1xcXFxuJyk7XFxuK1xcdFxcdGlmICghbGluZV9lbmQpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdFxcdGlmIChzc2NhbmYoY3Vycl9wb3MsIFxcXCIlMzFzICVsdSBrQlxcXCIsIG5hbWUsIFxcdTAwMjZ2YWx1ZSkgIT0gMilcXG4rXFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0XFx0bGVuID0gc3RybGVuKG5hbWUpO1xcbitcXHRcXHRpZiAobmFtZVtsZW4gLSAxXSAhPSAnOicgfHwgc3RybmNtcChuYW1lLCBzbWFwc19yb2xsdXBfc3RhdF9uYW1lc1tzdGF0XSwgbGVuIC0gMSkpXFxuK1xcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdFxcdHN0YXRzLVxcdTAwM2V2YWx1ZXNbc3RhdF0gPSB2YWx1ZTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuIC8qIFRocmVhZCBzeW5jaHJvbml6YXRpb24gcm91dGluZXMgKi9cXG4gc3RhdGljIHZvaWQgd2FpdF9mb3Jfc3RhdGUoc3RydWN0IHZtYV9tb2RpZmllcl9pbmZvICptb2RfaW5mbywgZW51bSB0ZXN0X3N0YXRlIHN0YXRlKVxcbiB7XFxuQEAgLTM5Nyw2ICs1MDksNDEgQEAgc3RhdGljIGJvb2wgcHJpbnRfYm91bmRhcmllc19vbihib29sIGNvbmRpdGlvbiwgY29uc3QgY2hhciAqdGl0bGUsXFxuIFxcdHJldHVybiBjb25kaXRpb247XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHByaW50X3NtYXBzX3JvbGx1cF9zdGF0cyhjb25zdCBjaGFyICp0aXRsZSwgRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZixcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpzdGF0cylcXG4re1xcbitcXHRwcmludGYoXFxcIiVzXFxcIiwgdGl0bGUpO1xcbitcXHRmb3IgKGludCBzdGF0ID0gMDsgc3RhdCBcXHUwMDNjIEFSUkFZX1NJWkUoc21hcHNfcm9sbHVwX3N0YXRfbmFtZXMpOyBzdGF0KyspXFxuK1xcdFxcdHByaW50ZihcXFwiJTY0cyAlbHUga0JcXFxcblxcXCIsIHNtYXBzX3JvbGx1cF9zdGF0X25hbWVzW3N0YXRdLCBzdGF0cy1cXHUwMDNldmFsdWVzW3N0YXRdKTtcXG4rfVxcbitcXG4rc3RhdGljIGJvb2wgY21wX3NtYXBzX3JvbGx1cF9zdGF0KHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKnMxLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKnMyLFxcbitcXHRcXHRcXHRcXHQgIGVudW0gc21hcHNfcm9sbHVwX3N0YXQgc3RhdClcXG4re1xcbitcXHRyZXR1cm4gczEtXFx1MDAzZXZhbHVlc1tzdGF0XSA9PSBzMi1cXHUwMDNldmFsdWVzW3N0YXRdO1xcbit9XFxuK1xcbitzdGF0aWMgYm9vbCBjb21wYXJlX3NtYXBzX3JvbGx1cChGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmLFxcbitcXHRcXHRcXHRcXHQgc3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyAqZXhwZWN0ZWQsXFxuK1xcdFxcdFxcdFxcdCBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICphY3R1YWwpXFxuK3tcXG4rXFx0LypcXG4rXFx0ICogQ2xlYW4vZGlydHkgbWV0cmljcyBtaWdodCBjaGFuZ2UgYnV0IFBzcy1yZWxhdGVkIG9uZXNcXG4rXFx0ICogc2hvdWxkIHN0YXkgY29uc3RhbnQuXFxuK1xcdCAqL1xcbitcXHRpZiAoY21wX3NtYXBzX3JvbGx1cF9zdGF0KGV4cGVjdGVkLCBhY3R1YWwsIFBzcykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGNtcF9zbWFwc19yb2xsdXBfc3RhdChleHBlY3RlZCwgYWN0dWFsLCBQc3NfQW5vbikgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGNtcF9zbWFwc19yb2xsdXBfc3RhdChleHBlY3RlZCwgYWN0dWFsLCBQc3NfRmlsZSkgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGNtcF9zbWFwc19yb2xsdXBfc3RhdChleHBlY3RlZCwgYWN0dWFsLCBQc3NfU2htZW0pKVxcbitcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4rXFxuK1xcdHByaW50X3NtYXBzX3JvbGx1cF9zdGF0cyhcXFwiRXhwZWN0ZWQgc3RhdHM6XFxcIiwgc2VsZiwgZXhwZWN0ZWQpO1xcbitcXHRwcmludF9zbWFwc19yb2xsdXBfc3RhdHMoXFxcIkFjdHVhbCBzdGF0czpcXFwiLCBzZWxmLCBhY3R1YWwpO1xcbitcXG4rXFx0cmV0dXJuIGZhbHNlO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCByZXBvcnRfdGVzdF9zdGFydChjb25zdCBjaGFyICpuYW1lLCBib29sIHZlcmJvc2UpXFxuIHtcXG4gXFx0aWYgKHZlcmJvc2UpXFxuQEAgLTU3Miw2ICs3MTksNyBAQCBGSVhUVVJFX1NFVFVQKHByb2NfbWFwc19yYWNlKVxcbiBcXHR1bnNpZ25lZCBsb25nIGZpcnN0X21hcF9hZGRyO1xcbiBcXHR1bnNpZ25lZCBsb25nIGxhc3RfbWFwX2FkZHI7XFxuIFxcdHVuc2lnbmVkIGxvbmcgZHVyYXRpb25fc2VjO1xcbitcXHRjaGFyIHJvbGx1cF9mbmFtZVszMl07XFxuIFxcdGNoYXIgZm5hbWVbMzJdO1xcbiBcXG4gXFx0c2VsZi1cXHUwMDNlcGFnZV9zaXplID0gKHVuc2lnbmVkIGxvbmcpc3lzY29uZihfU0NfUEFHRVNJWkUpO1xcbkBAIC02NDksNiArNzk3LDkgQEAgRklYVFVSRV9TRVRVUChwcm9jX21hcHNfcmFjZSlcXG4gXFx0XFx0YnJlYWs7XFxuIFxcdGNhc2UgU01BUFM6XFxuIFxcdFxcdHNwcmludGYoZm5hbWUsIFxcXCIvcHJvYy8lZC9zbWFwc1xcXCIsIHNlbGYtXFx1MDAzZXBpZCk7XFxuK1xcdFxcdHNwcmludGYocm9sbHVwX2ZuYW1lLCBcXFwiL3Byb2MvJWQvc21hcHNfcm9sbHVwXFxcIiwgc2VsZi1cXHUwMDNlcGlkKTtcXG4rXFx0XFx0c2VsZi1cXHUwMDNlcm9sbHVwX2ZkID0gb3Blbihyb2xsdXBfZm5hbWUsIE9fUkRPTkxZKTtcXG4rXFx0XFx0QVNTRVJUX05FKHNlbGYtXFx1MDAzZXJvbGx1cF9mZCwgLTEpO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0ZGVmYXVsdDpcXG4gXFx0XFx0a3NmdF9leGl0X2ZhaWwoKTtcXG5AQCAtNzExLDYgKzg2Miw4IEBAIEZJWFRVUkVfVEVBUkRPV04ocHJvY19tYXBzX3JhY2UpXFxuIFxcdGZvciAoaW50IGkgPSAwOyBpIFxcdTAwM2Mgc2VsZi1cXHUwMDNldm1hX2NvdW50OyBpKyspXFxuIFxcdFxcdG11bm1hcChzZWxmLVxcdTAwM2Vtb2RfaW5mby1cXHUwMDNlY2hpbGRfbWFwcGVkX2FkZHJbaV0sIHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSk7XFxuIFxcdGNsb3NlKHNlbGYtXFx1MDAzZW1hcHNfZmQpO1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlbWFwc19maWxlID09IFNNQVBTKVxcbitcXHRcXHRjbG9zZShzZWxmLVxcdTAwM2Vyb2xsdXBfZmQpO1xcbiBcXHR3YWl0cGlkKHNlbGYtXFx1MDAzZXBpZCwgXFx1MDAyNnN0YXR1cywgMCk7XFxuIFxcdG11bm1hcChzZWxmLVxcdTAwM2Vtb2RfaW5mbywgc2VsZi1cXHUwMDNlc2hhcmVkX21lbV9zaXplKTtcXG4gfVxcbkBAIC03MjMsNiArODc2LDcgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3NwbGl0KVxcbiBcXHRzdHJ1Y3QgbGluZV9jb250ZW50IHNwbGl0X2ZpcnN0X2xpbmU7XFxuIFxcdHN0cnVjdCBsaW5lX2NvbnRlbnQgcmVzdG9yZWRfbGFzdF9saW5lO1xcbiBcXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2ZpcnN0X2xpbmU7XFxuK1xcdHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgb3JpZ19zdGF0cztcXG4gXFxuIFxcdHdhaXRfZm9yX3N0YXRlKG1vZF9pbmZvLCBTRVRVUF9SRUFEWSk7XFxuIFxcbkBAIC03MzYsNiArODkwLDggQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3NwbGl0KVxcbiBcXHRyZXBvcnRfdGVzdF9zdGFydChcXFwiVGVhcmluZyBmcm9tIHNwbGl0XFxcIiwgc2VsZi1cXHUwMDNldmVyYm9zZSk7XFxuIFxcdEFTU0VSVF9UUlVFKGNhcHR1cmVfbW9kX3BhdHRlcm4oc2VsZiwgXFx1MDAyNnNwbGl0X2xhc3RfbGluZSwgXFx1MDAyNnNwbGl0X2ZpcnN0X2xpbmUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZyZXN0b3JlZF9sYXN0X2xpbmUsIFxcdTAwMjZyZXN0b3JlZF9maXJzdF9saW5lKSk7XFxuK1xcdGlmIChzZWxmLVxcdTAwM2VtYXBzX2ZpbGUgPT0gU01BUFMpXFxuK1xcdFxcdEFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCBcXHUwMDI2b3JpZ19zdGF0cykpO1xcbiBcXG4gXFx0LyogTm93IHN0YXJ0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBmb3Igc2VsZi1cXHUwMDNlZHVyYXRpb25fc2VjICovXFxuIFxcdHNpZ25hbF9zdGF0ZShtb2RfaW5mbywgVEVTVF9SRUFEWSk7XFxuQEAgLTc5OSw2ICs5NTUsMTEgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3NwbGl0KVxcbiBcXHRcXHRcXHRcXHQgICAgIHZtYV9lbmQgPT0gc2VsZi1cXHUwMDNlbGFzdF9saW5lLmVuZF9hZGRyKSB8fFxcbiBcXHRcXHRcXHRcXHQgICAgKHZtYV9zdGFydCA9PSBzcGxpdF9maXJzdF9saW5lLnN0YXJ0X2FkZHIgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0ICAgICB2bWFfZW5kID09IHNwbGl0X2ZpcnN0X2xpbmUuZW5kX2FkZHIpKTtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0c3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyBzdGF0cztcXG4rXFxuK1xcdFxcdFxcdEFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCBcXHUwMDI2c3RhdHMpKTtcXG4rXFx0XFx0XFx0QVNTRVJUX1RSVUUoY29tcGFyZV9zbWFwc19yb2xsdXAoc2VsZiwgXFx1MDAyNm9yaWdfc3RhdHMsIFxcdTAwMjZzdGF0cykpO1xcbiBcXHRcXHR9XFxuIFxcdFxcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDX0NPQVJTRSwgXFx1MDAyNmVuZF90cyk7XFxuIFxcdFxcdGVuZF90ZXN0X2l0ZXJhdGlvbihcXHUwMDI2ZW5kX3RzLCBzZWxmLVxcdTAwM2V2ZXJib3NlKTtcXG5AQCAtODE3LDYgKzk3OCw3IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9yZXNpemUpXFxuIFxcdHN0cnVjdCBsaW5lX2NvbnRlbnQgc2hydW5rX2ZpcnN0X2xpbmU7XFxuIFxcdHN0cnVjdCBsaW5lX2NvbnRlbnQgcmVzdG9yZWRfbGFzdF9saW5lO1xcbiBcXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2ZpcnN0X2xpbmU7XFxuK1xcdHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgb3JpZ19zdGF0cztcXG4gXFxuIFxcdHdhaXRfZm9yX3N0YXRlKG1vZF9pbmZvLCBTRVRVUF9SRUFEWSk7XFxuIFxcbkBAIC04MzAsNiArOTkyLDggQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3Jlc2l6ZSlcXG4gXFx0cmVwb3J0X3Rlc3Rfc3RhcnQoXFxcIlRlYXJpbmcgZnJvbSByZXNpemVcXFwiLCBzZWxmLVxcdTAwM2V2ZXJib3NlKTtcXG4gXFx0QVNTRVJUX1RSVUUoY2FwdHVyZV9tb2RfcGF0dGVybihzZWxmLCBcXHUwMDI2c2hydW5rX2xhc3RfbGluZSwgXFx1MDAyNnNocnVua19maXJzdF9saW5lLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHUwMDI2cmVzdG9yZWRfbGFzdF9saW5lLCBcXHUwMDI2cmVzdG9yZWRfZmlyc3RfbGluZSkpO1xcbitcXHRpZiAoc2VsZi1cXHUwMDNlbWFwc19maWxlID09IFNNQVBTKVxcbitcXHRcXHRBU1NFUlRfVFJVRShwYXJzZV9zbWFwc19yb2xsdXAoc2VsZiwgXFx1MDAyNm9yaWdfc3RhdHMpKTtcXG4gXFxuIFxcdC8qIE5vdyBzdGFydCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZm9yIHNlbGYtXFx1MDAzZWR1cmF0aW9uX3NlYyAqL1xcbiBcXHRzaWduYWxfc3RhdGUobW9kX2luZm8sIFRFU1RfUkVBRFkpO1xcbkBAIC04ODAsNiArMTA0NCwxMSBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fcmVzaXplKVxcbiBcXHRcXHRcXHRBU1NFUlRfVFJVRSh2bWFfc3RhcnQgPT0gc2VsZi1cXHUwMDNlbGFzdF9saW5lLnN0YXJ0X2FkZHIgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0ICAgICh2bWFfZW5kIC0gdm1hX3N0YXJ0ID09IHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSAqIDMgfHxcXG4gXFx0XFx0XFx0XFx0ICAgICB2bWFfZW5kIC0gdm1hX3N0YXJ0ID09IHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSkpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIHN0YXRzO1xcbitcXG4rXFx0XFx0XFx0QVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsIFxcdTAwMjZzdGF0cykpO1xcbitcXHRcXHRcXHRBU1NFUlRfVFJVRShjb21wYXJlX3NtYXBzX3JvbGx1cChzZWxmLCBcXHUwMDI2b3JpZ19zdGF0cywgXFx1MDAyNnN0YXRzKSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUNfQ09BUlNFLCBcXHUwMDI2ZW5kX3RzKTtcXG4gXFx0XFx0ZW5kX3Rlc3RfaXRlcmF0aW9uKFxcdTAwMjZlbmRfdHMsIHNlbGYtXFx1MDAzZXZlcmJvc2UpO1xcbkBAIC04OTgsNiArMTA2Nyw3IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9yZW1hcClcXG4gXFx0c3RydWN0IGxpbmVfY29udGVudCByZW1hcHBlZF9maXJzdF9saW5lO1xcbiBcXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2xhc3RfbGluZTtcXG4gXFx0c3RydWN0IGxpbmVfY29udGVudCByZXN0b3JlZF9maXJzdF9saW5lO1xcbitcXHRzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIG9yaWdfc3RhdHM7XFxuIFxcbiBcXHR3YWl0X2Zvcl9zdGF0ZShtb2RfaW5mbywgU0VUVVBfUkVBRFkpO1xcbiBcXG5AQCAtOTExLDYgKzEwODEsOCBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fcmVtYXApXFxuIFxcdHJlcG9ydF90ZXN0X3N0YXJ0KFxcXCJUZWFyaW5nIGZyb20gcmVtYXBcXFwiLCBzZWxmLVxcdTAwM2V2ZXJib3NlKTtcXG4gXFx0QVNTRVJUX1RSVUUoY2FwdHVyZV9tb2RfcGF0dGVybihzZWxmLCBcXHUwMDI2cmVtYXBwZWRfbGFzdF9saW5lLCBcXHUwMDI2cmVtYXBwZWRfZmlyc3RfbGluZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx1MDAyNnJlc3RvcmVkX2xhc3RfbGluZSwgXFx1MDAyNnJlc3RvcmVkX2ZpcnN0X2xpbmUpKTtcXG4rXFx0aWYgKHNlbGYtXFx1MDAzZW1hcHNfZmlsZSA9PSBTTUFQUylcXG4rXFx0XFx0QVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsIFxcdTAwMjZvcmlnX3N0YXRzKSk7XFxuIFxcbiBcXHQvKiBOb3cgc3RhcnQgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGZvciBzZWxmLVxcdTAwM2VkdXJhdGlvbl9zZWMgKi9cXG4gXFx0c2lnbmFsX3N0YXRlKG1vZF9pbmZvLCBURVNUX1JFQURZKTtcXG5AQCAtOTYzLDYgKzExMzUsMTEgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3JlbWFwKVxcbiBcXHRcXHRcXHRcXHQgICAgIHZtYV9lbmQgLSB2bWFfc3RhcnQgPT0gc2VsZi1cXHUwMDNlcGFnZV9zaXplICogMykgfHxcXG4gXFx0XFx0XFx0XFx0ICAgICh2bWFfc3RhcnQgPT0gc2VsZi1cXHUwMDNlbGFzdF9saW5lLnN0YXJ0X2FkZHIgKyBzZWxmLVxcdTAwM2VwYWdlX3NpemUgXFx1MDAyNlxcdTAwMjZcXG4gXFx0XFx0XFx0XFx0ICAgICB2bWFfZW5kIC0gdm1hX3N0YXJ0ID09IHNlbGYtXFx1MDAzZXBhZ2Vfc2l6ZSkpO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIHN0YXRzO1xcbitcXG4rXFx0XFx0XFx0QVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsIFxcdTAwMjZzdGF0cykpO1xcbitcXHRcXHRcXHRBU1NFUlRfVFJVRShjb21wYXJlX3NtYXBzX3JvbGx1cChzZWxmLCBcXHUwMDI2b3JpZ19zdGF0cywgXFx1MDAyNnN0YXRzKSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUNfQ09BUlNFLCBcXHUwMDI2ZW5kX3RzKTtcXG4gXFx0XFx0ZW5kX3Rlc3RfaXRlcmF0aW9uKFxcdTAwMjZlbmRfdHMsIHNlbGYtXFx1MDAzZXZlcmJvc2UpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOTozODoxMC4yNjU0Nzg2NTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjMxMjgyNTcxNzgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST0NfRlNcIixcbiAgICBcIlBST0NfUEFHRV9NT05JVE9SXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwic2hvd19zbWFwc19yb2xsdXBcIixcbiAgICBcInNtYXBfZ2F0aGVyX3N0YXRzXCIsXG4gICAgXCJzaG93X3NtYXBcIixcbiAgICBcImRvX3Byb2NtYXBfcXVlcnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyAvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS9zbWFwc19yb2xsdXAgYW5kIHNtYXBzIGl0ZXJhdGlvbiBsb2dpYyBpbiB0YXNrX21tdS5jIHRvIHVzZSBwZXItVk1BIGxvY2tzIHVuZGVyIFJDVSBpbnN0ZWFkIG9mIGFjcXVpcmluZyBtbWFwX2xvY2sgdXBmcm9udCwgYWRqdXN0cyBwYXJ0aWFsIFZNQSBzdGF0IGdhdGhlcmluZyBpbiBzbWFwX2dhdGhlcl9zdGF0cygpLCBhbmQgc2ltcGxpZmllcyBwcm9jX21hcHMgbG9ja2luZyBoZWxwZXJzLiBUaGlzIHJlYWNoYWJsZSBjb3JlIE1NL3Byb2NmcyBsb2dpYyBpcyB3b3J0aCBmdXp6aW5nIGZvciBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBpc3N1ZXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjU1YTdhY2JhN2I4YmYxYjc0ODdmYjE1OTA3NjAwNjBlNDc4OTBiNFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gU2VwIDcgMDk6Mzg6MDggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9wcm9jL3Rhc2tfbW11LmMgYi9mcy9wcm9jL3Rhc2tfbW11LmNcbmluZGV4IGU2NzFiNGZkOGRlZGQuLjY0MWExNTViMGM2MTMgMTAwNjQ0XG4tLS0gYS9mcy9wcm9jL3Rhc2tfbW11LmNcbisrKyBiL2ZzL3Byb2MvdGFza19tbXUuY1xuQEAgLTEzMCwyOCArMTMwLDEyIEBAIHN0YXRpYyB2b2lkIHJlbGVhc2VfdGFza19tZW1wb2xpY3koc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuIH1cbiAjZW5kaWZcbiBcbi1zdGF0aWMgaW5saW5lIGludCBsb2NrX2N0eF9tbShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbi17XG4tXHRpbnQgcmV0ID0gbW1hcF9yZWFkX2xvY2tfa2lsbGFibGUobG9ja19jdHgtXHUwMDNlbW0pO1xuLVxuLVx0aWYgKCFyZXQpXG4tXHRcdGxvY2tfY3R4LVx1MDAzZW1tYXBfbG9ja2VkID0gdHJ1ZTtcbi1cbi1cdHJldHVybiByZXQ7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfY3R4X21tKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuK3N0YXRpYyB2b2lkIHVubG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4ge1xuIFx0bW1hcF9yZWFkX3VubG9jayhsb2NrX2N0eC1cdTAwM2VtbSk7XG4gXHRsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZCA9IGZhbHNlO1xuIH1cbiBcbi1zdGF0aWMgdm9pZCByZXNldF9sb2NrX2N0eChzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbi17XG4tXHRsb2NrX2N0eC1cdTAwM2Vsb2NrZWRfdm1hID0gTlVMTDtcbi1cdGxvY2tfY3R4LVx1MDAzZW1tYXBfbG9ja2VkID0gZmFsc2U7XG4tfVxuLVxuIHN0YXRpYyB2b2lkIHVubG9ja19jdHhfdm1hKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuIHtcbiBcdGlmIChsb2NrX2N0eC1cdTAwM2Vsb2NrZWRfdm1hKSB7XG5AQCAtMTYwLDIzICsxNDQsMTAgQEAgc3RhdGljIHZvaWQgdW5sb2NrX2N0eF92bWEoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4gXHR9XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBsb2NrX3ZtYV9yYW5nZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXG4tXHRcdFx0XHQgIHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdHJjdV9yZWFkX2xvY2soKTtcbi1cdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcbi1cbi1cdHJldHVybiB0cnVlO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX3ZtYV9yYW5nZShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbitzdGF0aWMgdm9pZCByZXNldF9sb2NrX2N0eChzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbiB7XG4tXHRpZiAobG9ja19jdHgtXHUwMDNlbW1hcF9sb2NrZWQpIHtcbi1cdFx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XG4tXHR9IGVsc2Uge1xuLVx0XHR1bmxvY2tfY3R4X3ZtYShsb2NrX2N0eCk7XG4tXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuLVx0fVxuK1x0bG9ja19jdHgtXHUwMDNlbG9ja2VkX3ZtYSA9IE5VTEw7XG4rXHRsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZCA9IGZhbHNlO1xuIH1cbiBcbiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnZXRfbmV4dF92bWEoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxuQEAgLTE5Niw3ICsxNjcsNyBAQCBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpnZXRfbmV4dF92bWEoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxuIFx0cmV0dXJuIHZtYTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGZhbGxiYWNrX3RvX21tYXBfbG9jayhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXG4rc3RhdGljIGJvb2wgZmFsbGJhY2tfdG9fbW1hcF9sb2NrKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcbiBcdFx0XHRcdFx0IGxvZmZfdCBwb3MpXG4ge1xuIFx0c3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHggPSBcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4O1xuQEAgLTIxMyw3ICsxODQsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgZmFsbGJhY2tfdG9fbW1hcF9sb2NrKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgZHJvcF9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuK3N0YXRpYyB2b2lkIGRyb3BfcmN1KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbiB7XG4gXHRpZiAocHJpdi1cdTAwM2Vsb2NrX2N0eC5tbWFwX2xvY2tlZClcbiBcdFx0cmV0dXJuO1xuQEAgLTIyMSw3ICsxOTIsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZHJvcF9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuIFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCByZWFjcXVpcmVfcmN1KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbitzdGF0aWMgdm9pZCByZWFjcXVpcmVfcmN1KHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbiB7XG4gXHRpZiAocHJpdi1cdTAwM2Vsb2NrX2N0eC5tbWFwX2xvY2tlZClcbiBcdFx0cmV0dXJuO1xuQEAgLTI4NiwxMyArMjU3LDggQEAgc3RhdGljIHZvaWQgKm1fc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBwb3MpXG4gXHRcdHJldHVybiBOVUxMO1xuIFx0fVxuIFxuLVx0aWYgKCFsb2NrX3ZtYV9yYW5nZShtLCBsb2NrX2N0eCkpIHtcbi1cdFx0bW1wdXQobW0pO1xuLVx0XHRwdXRfdGFza19zdHJ1Y3QocHJpdi1cdTAwM2V0YXNrKTtcbi1cdFx0cHJpdi1cdTAwM2V0YXNrID0gTlVMTDtcbi1cdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlRSKTtcbi1cdH1cbi1cbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcbiBcdC8qXG4gXHQgKiBSZXNldCBjdXJyZW50IHBvc2l0aW9uIGlmIGxhc3RfYWRkciB3YXMgc2V0IGJlZm9yZVxuIFx0ICogYW5kIGl0J3Mgbm90IGEgc2VudGluZWwuXG5AQCAtMzI1LDcgKzI5MSwxMiBAQCBzdGF0aWMgdm9pZCBtX3N0b3Aoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIFx0XHRyZXR1cm47XG4gXG4gXHRyZWxlYXNlX3Rhc2tfbWVtcG9saWN5KHByaXYpO1xuLVx0dW5sb2NrX3ZtYV9yYW5nZShcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4KTtcbitcdGlmIChwcml2LVx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKSB7XG4rXHRcdHVubG9ja19jdHhfbW0oXHUwMDI2cHJpdi1cdTAwM2Vsb2NrX2N0eCk7XG4rXHR9IGVsc2Uge1xuK1x0XHR1bmxvY2tfY3R4X3ZtYShcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4KTtcbitcdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4rXHR9XG4gXHRtbXB1dChtbSk7XG4gXHRwdXRfdGFza19zdHJ1Y3QocHJpdi1cdTAwM2V0YXNrKTtcbiBcdHByaXYtXHUwMDNldGFzayA9IE5VTEw7XG5AQCAtNTE4LDIxICs0ODksNiBAQCBzdGF0aWMgaW50IHBpZF9tYXBzX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXG4gXHRcdFBST0NNQVBfUVVFUllfVk1BX0ZMQUdTXHRcdFx0XHRcXFxuIClcbiBcbi1zdGF0aWMgaW50IHF1ZXJ5X3ZtYV9zZXR1cChzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbi17XG4tXHRyZXNldF9sb2NrX2N0eChsb2NrX2N0eCk7XG4tXG4tXHRyZXR1cm4gMDtcbi19XG4tXG4tc3RhdGljIHZvaWQgcXVlcnlfdm1hX3RlYXJkb3duKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdGlmIChsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZClcbi1cdFx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XG4tXHRlbHNlXG4tXHRcdHVubG9ja19jdHhfdm1hKGxvY2tfY3R4KTtcbi19XG4tXG4gc3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqcXVlcnlfdm1hX2ZpbmRfYnlfYWRkcihzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCxcbiBcdFx0XHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG5AQCAtNjUzLDEyICs2MDksNyBAQCBzdGF0aWMgaW50IGRvX3Byb2NtYXBfcXVlcnkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHZvaWQgX191c2VyICp1YXJnKVxuIFx0aWYgKCFtbSB8fCAhbW1nZXRfbm90X3plcm8obW0pKVxuIFx0XHRyZXR1cm4gLUVTUkNIO1xuIFxuLVx0ZXJyID0gcXVlcnlfdm1hX3NldHVwKFx1MDAyNmxvY2tfY3R4KTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0bW1wdXQobW0pO1xuLVx0XHRyZXR1cm4gZXJyO1xuLVx0fVxuLVxuK1x0cmVzZXRfbG9ja19jdHgoXHUwMDI2bG9ja19jdHgpO1xuIFx0dm1hID0gcXVlcnlfbWF0Y2hpbmdfdm1hKFx1MDAyNmxvY2tfY3R4LCBrYXJnLnF1ZXJ5X2FkZHIsIGthcmcucXVlcnlfZmxhZ3MpO1xuIFx0aWYgKElTX0VSUih2bWEpKSB7XG4gXHRcdGVyciA9IFBUUl9FUlIodm1hKTtcbkBAIC03MzIsNyArNjgzLDEwIEBAIHN0YXRpYyBpbnQgZG9fcHJvY21hcF9xdWVyeShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdm9pZCBfX3VzZXIgKnVhcmcpXG4gXHRcdHZtX2ZpbGUgPSBnZXRfZmlsZSh2bWEtXHUwMDNldm1fZmlsZSk7XG4gXG4gXHQvKiB1bmxvY2sgdm1hIG9yIG1tYXBfbG9jaywgYW5kIHB1dCBtbV9zdHJ1Y3QgYmVmb3JlIGNvcHlpbmcgZGF0YSB0byB1c2VyICovXG4tXHRxdWVyeV92bWFfdGVhcmRvd24oXHUwMDI2bG9ja19jdHgpO1xuK1x0aWYgKGxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxuK1x0XHR1bmxvY2tfY3R4X21tKFx1MDAyNmxvY2tfY3R4KTtcbitcdGVsc2VcbitcdFx0dW5sb2NrX2N0eF92bWEoXHUwMDI2bG9ja19jdHgpO1xuIFx0bW1wdXQobW0pO1xuIFxuIFx0aWYgKGthcmcuYnVpbGRfaWRfc2l6ZSkge1xuQEAgLTc3Myw3ICs3MjcsMTAgQEAgc3RhdGljIGludCBkb19wcm9jbWFwX3F1ZXJ5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB2b2lkIF9fdXNlciAqdWFyZylcbiBcdHJldHVybiAwO1xuIFxuIG91dDpcbi1cdHF1ZXJ5X3ZtYV90ZWFyZG93bihcdTAwMjZsb2NrX2N0eCk7XG4rXHRpZiAobG9ja19jdHgubW1hcF9sb2NrZWQpXG4rXHRcdHVubG9ja19jdHhfbW0oXHUwMDI2bG9ja19jdHgpO1xuK1x0ZWxzZVxuK1x0XHR1bmxvY2tfY3R4X3ZtYShcdTAwMjZsb2NrX2N0eCk7XG4gXHRtbXB1dChtbSk7XG4gb3V0X2ZpbGU6XG4gXHRpZiAodm1fZmlsZSlcbkBAIC0xMjYzLDcgKzEyMjAsNyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIHNtYXBzX3NobWVtX3dhbGtfdm1hX2xvY2tfb3BzID0ge1xuIFx0LndhbGtfbG9ja1x0XHQ9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSxcbiB9O1xuIFxuLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcbiBnZXRfc21hcHNfd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuIHtcbiBcdGlmIChwcml2LVx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxuQEAgLTEyNzEsNyArMTIyOCw3IEBAIGdldF9zbWFwc193YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4gXHRyZXR1cm4gXHUwMDI2c21hcHNfd2Fsa192bWFfbG9ja19vcHM7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcbiBnZXRfc21hcHNfc2htZW1fd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuIHtcbiBcdGlmIChwcml2LVx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxuQEAgLTEyNzksMjAgKzEyMzYsMjcgQEAgZ2V0X3NtYXBzX3NobWVtX3dhbGtfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbiBcdHJldHVybiBcdTAwMjZzbWFwc19zaG1lbV93YWxrX3ZtYV9sb2NrX29wcztcbiB9XG4gXG4tLypcbi0gKiBHYXRoZXIgbWVtIHN0YXRzIGZyb20gQHZtYSB3aXRoIHRoZSBpbmRpY2F0ZWQgYmVnaW5uaW5nXG4tICogYWRkcmVzcyBAc3RhcnQsIGFuZCBrZWVwIHRoZW0gaW4gQG1zcy5cbisvKipcbisgKiBzbWFwX2dhdGhlcl9zdGF0cygpIC0gR2F0aGVyIG1lbSBzdGF0cyBmcm9tIEB2bWEuXG4rICogQHByaXY6IHByb2MgbWFwcyBwcml2YXRlIHN0YXRlLlxuKyAqIEB2bWE6IFRoZSBWTUEgdG8gZ2F0aGVyIHN0YXRzIGZvci5cbisgKiBAbXNzOiBUaGUgYWNjdW11bGF0ZWQgc3RhdHMuXG4rICogQHN0YXJ0OiBUaGUgYWRkcmVzcyBmcm9tIHdoaWNoIHRvIHN0YXJ0LlxuICAqXG4tICogVXNlIHZtX3N0YXJ0IG9mIEB2bWEgYXMgdGhlIGJlZ2lubmluZyBhZGRyZXNzIGlmIEBzdGFydCBpcyAwLlxuKyAqIFRoaXMgZ2F0aGVycyBzdGF0cyBmb3IgdGhlIHdob2xlIG9mIHRoZSBWTUEgdW5sZXNzIHRoZSBsb2NrIHdhcyBkcm9wcGVkXG4rICogYW5kIFZNQSBncmV3IG9yIGdvdCBtZXJnZWQgYW5kIHdlIGZvdW5kIGl0IGFnYWluLCBpbiB3aGljaCBjYXNlIHdlIG9ubHlcbisgKiBnYXRoZXIgc3RhdHMgZm9yIHRoZSByZW1haW5kZXIgb2YgdGhlIFZNQSByYW5nZS5cbiAgKi9cbiBzdGF0aWMgdm9pZCBzbWFwX2dhdGhlcl9zdGF0cyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXG4gXHRcdFx0ICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdFx0ICAgICAgc3RydWN0IG1lbV9zaXplX3N0YXRzICptc3MsIHVuc2lnbmVkIGxvbmcgc3RhcnQpXG4rXHRcdFx0ICAgICAgc3RydWN0IG1lbV9zaXplX3N0YXRzICptc3MsXG4rXHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyBzdGFydClcbiB7XG4gXHRjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKm9wcyA9IGdldF9zbWFwc193YWxrX29wcyhwcml2KTtcbitcdGNvbnN0IGJvb2wgaXNfcGFydGlhbCA9IHN0YXJ0IFx1MDAzZSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4gXG4gXHQvKiBJbnZhbGlkIHN0YXJ0ICovXG4tXHRpZiAoc3RhcnQgXHUwMDNlPSB2bWEtXHUwMDNldm1fZW5kKVxuK1x0aWYgKHN0YXJ0IFx1MDAzYyB2bWEtXHUwMDNldm1fc3RhcnQgfHwgc3RhcnQgXHUwMDNlPSB2bWEtXHUwMDNldm1fZW5kKVxuIFx0XHRyZXR1cm47XG4gXG4gXHRpZiAodm1hID09IGdldF9nYXRlX3ZtYShwcml2LVx1MDAzZWxvY2tfY3R4Lm1tKSlcbkBAIC0xMzEyLDIwICsxMjc2LDE3IEBAIHN0YXRpYyB2b2lkIHNtYXBfZ2F0aGVyX3N0YXRzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcbiBcdFx0ICogVW5sZXNzIHdlIGtub3cgdGhhdCB0aGUgc2htZW0gb2JqZWN0IChvciB0aGUgcGFydCBtYXBwZWQgYnlcbiBcdFx0ICogb3VyIFZNQSkgaGFzIG5vIHN3YXBwZWQgb3V0IHBhZ2VzIGF0IGFsbC5cbiBcdFx0ICovXG4tXHRcdHVuc2lnbmVkIGxvbmcgc2htZW1fc3dhcHBlZCA9IHNobWVtX3N3YXBfdXNhZ2Uodm1hKTtcbitcdFx0Y29uc3QgdW5zaWduZWQgbG9uZyBzaG1lbV9zd2FwcGVkID0gc2htZW1fc3dhcF91c2FnZSh2bWEpO1xuK1x0XHRjb25zdCBib29sIHNoYXJlZF9vcl9ybyA9IHZtYV90ZXN0KHZtYSwgVk1BX1NIQVJFRF9CSVQpIHx8XG4rXHRcdFx0XHRcdCAgIXZtYV90ZXN0KHZtYSwgVk1BX1dSSVRFX0JJVCk7XG4gXG4tXHRcdGlmICghc3RhcnQgXHUwMDI2XHUwMDI2ICghc2htZW1fc3dhcHBlZCB8fCAodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9TSEFSRUQpIHx8XG4tXHRcdFx0XHRcdCEodm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9XUklURSkpKSB7XG4rXHRcdGlmICghaXNfcGFydGlhbCBcdTAwMjZcdTAwMjYgKCFzaG1lbV9zd2FwcGVkIHx8IHNoYXJlZF9vcl9ybykpXG4gXHRcdFx0bXNzLVx1MDAzZXN3YXAgKz0gc2htZW1fc3dhcHBlZDtcbi1cdFx0fSBlbHNlIHtcbitcdFx0ZWxzZVxuIFx0XHRcdG9wcyA9IGdldF9zbWFwc19zaG1lbV93YWxrX29wcyhwcml2KTtcbi1cdFx0fVxuIFx0fVxuIFxuLVx0aWYgKCFzdGFydClcbi1cdFx0d2Fsa19wYWdlX3ZtYSh2bWEsIG9wcywgbXNzKTtcbi1cdGVsc2Vcbi1cdFx0d2Fsa19wYWdlX3JhbmdlKHZtYS1cdTAwM2V2bV9tbSwgc3RhcnQsIHZtYS1cdTAwM2V2bV9lbmQsIG9wcywgbXNzKTtcbitcdHdhbGtfcGFnZV9yYW5nZV92bWEodm1hLCBzdGFydCwgdm1hLVx1MDAzZXZtX2VuZCwgb3BzLCBtc3MpO1xuIFxuIFx0cmVhY3F1aXJlX3JjdShwcml2KTtcbiB9XG5AQCAtMTM4MCw3ICsxMzQxLDcgQEAgc3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB2O1xuIFx0c3RydWN0IG1lbV9zaXplX3N0YXRzIG1zcyA9IHt9O1xuIFxuLVx0c21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCBcdTAwMjZtc3MsIDApO1xuK1x0c21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCBcdTAwMjZtc3MsIHZtYS1cdTAwM2V2bV9zdGFydCk7XG4gXG4gXHRzaG93X21hcF92bWEobSwgdm1hKTtcbiBcbkBAIC0xNDA1LDEyICsxMzY2LDE0IEBAIHN0YXRpYyBpbnQgc2hvd19zbWFwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiBzdGF0aWMgaW50IHNob3dfc21hcHNfcm9sbHVwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiB7XG4gXHRzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYgPSBtLVx1MDAzZXByaXZhdGU7XG4rXHRzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCA9IFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHg7XG4rXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGxvY2tfY3R4LVx1MDAzZW1tO1xuIFx0c3RydWN0IG1lbV9zaXplX3N0YXRzIG1zcyA9IHt9O1xuLVx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSBwcml2LVx1MDAzZWxvY2tfY3R4Lm1tO1xuK1x0dW5zaWduZWQgbG9uZyBsYXN0X3ZtYV9lbmQgPSAwO1xuK1x0dW5zaWduZWQgbG9uZyB2bWFfc3RhcnQgPSAwO1xuIFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XG4tXHR1bnNpZ25lZCBsb25nIHZtYV9zdGFydCA9IDAsIGxhc3Rfdm1hX2VuZCA9IDA7XG4rXHRsb2ZmX3QgcG9zID0gMDtcbiBcdGludCByZXQgPSAwO1xuLVx0Vk1BX0lURVJBVE9SKHZtaSwgbW0sIDApO1xuIFxuIFx0cHJpdi1cdTAwM2V0YXNrID0gZ2V0X3Byb2NfdGFzayhwcml2LVx1MDAzZWlub2RlKTtcbiBcdGlmICghcHJpdi1cdTAwM2V0YXNrKVxuQEAgLTE0MjEsODkgKzEzODQsNjAgQEAgc3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4gXHRcdGdvdG8gb3V0X3B1dF90YXNrO1xuIFx0fVxuIFxuLVx0cmV0ID0gbG9ja19jdHhfbW0oXHUwMDI2cHJpdi1cdTAwM2Vsb2NrX2N0eCk7XG4tXHRpZiAocmV0KVxuLVx0XHRnb3RvIG91dF9wdXRfbW07XG4tXG4gXHRob2xkX3Rhc2tfbWVtcG9saWN5KHByaXYpO1xuLVx0dm1hID0gdm1hX25leHQoXHUwMDI2dm1pKTtcbitcdHJjdV9yZWFkX2xvY2soKTtcbitcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcbiBcbitcdHZtYV9pdGVyX2luaXQoXHUwMDI2cHJpdi1cdTAwM2VpdGVyLCBtbSwgMCk7XG4rXHR2bWEgPSBwcm9jX2dldF92bWEobSwgXHUwMDI2cG9zKTtcbiBcdGlmICh1bmxpa2VseSghdm1hKSlcbiBcdFx0Z290byBlbXB0eV9zZXQ7XG4gXG4tXHR2bWFfc3RhcnQgPSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4tXHRkbyB7XG4tXHRcdHNtYXBfZ2F0aGVyX3N0YXRzKHByaXYsIHZtYSwgXHUwMDI2bXNzLCAwKTtcbi1cdFx0bGFzdF92bWFfZW5kID0gdm1hLVx1MDAzZXZtX2VuZDtcbitcdGlmICghSVNfRVJSKHZtYSkgXHUwMDI2XHUwMDI2IHZtYSAhPSBnZXRfZ2F0ZV92bWEobG9ja19jdHgtXHUwMDNlbW0pKVxuK1x0XHR2bWFfc3RhcnQgPSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4rXG4rXHR3aGlsZSAodm1hKSB7XG4rXHRcdGlmIChJU19FUlIodm1hKSkge1xuK1x0XHRcdHJldCA9IFBUUl9FUlIodm1hKTtcbitcdFx0XHRnb3RvIG91dF91bmxvY2s7XG4rXHRcdH1cbitcbitcdFx0aWYgKHZtYSA9PSBnZXRfZ2F0ZV92bWEobG9ja19jdHgtXHUwMDNlbW0pKVxuK1x0XHRcdGJyZWFrO1xuIFxuIFx0XHQvKlxuLVx0XHQgKiBSZWxlYXNlIG1tYXBfbG9jayB0ZW1wb3JhcmlseSBpZiBzb21lb25lIHdhbnRzIHRvXG4tXHRcdCAqIGFjY2VzcyBpdCBmb3Igd3JpdGUgcmVxdWVzdC5cbitcdFx0ICogSWYgYWZ0ZXIgcmV0YWtpbmcgdGhlIGxvY2ssIGFscmVhZHkgcmVwb3J0ZWQgVk1BIGdyZXcgb3JcbitcdFx0ICogbWVyZ2VkIHdpdGggdGhlIG5leHQgb25lLCBzbWFwX2dhdGhlcl9zdGF0cygpIHdpbGwgZ2F0aGVyXG4rXHRcdCAqIHN0YXRzIGZvciB0aGUgcmVtYWluaW5nIHBvcnRpb24gYnkgc3RhcnRpbmcgYXQgbGFzdF92bWFfZW5kLlxuIFx0XHQgKi9cbi1cdFx0aWYgKG1tYXBfbG9ja19pc19jb250ZW5kZWQobW0pKSB7XG4tXHRcdFx0dm1hX2l0ZXJfaW52YWxpZGF0ZShcdTAwMjZ2bWkpO1xuLVx0XHRcdHVubG9ja19jdHhfbW0oXHUwMDI2cHJpdi1cdTAwM2Vsb2NrX2N0eCk7XG4tXHRcdFx0cmV0ID0gbG9ja19jdHhfbW0oXHUwMDI2cHJpdi1cdTAwM2Vsb2NrX2N0eCk7XG4tXHRcdFx0aWYgKHJldCkge1xuLVx0XHRcdFx0cmVsZWFzZV90YXNrX21lbXBvbGljeShwcml2KTtcbi1cdFx0XHRcdGdvdG8gb3V0X3B1dF9tbTtcbi1cdFx0XHR9XG4rXHRcdHNtYXBfZ2F0aGVyX3N0YXRzKHByaXYsIHZtYSwgXHUwMDI2bXNzLCBsYXN0X3ZtYV9lbmQpO1xuK1x0XHRsYXN0X3ZtYV9lbmQgPSB2bWEtXHUwMDNldm1fZW5kO1xuIFxuK1x0XHQvKlxuK1x0XHQgKiBJZiB0aGUgVk1BIGxvY2sgaXMgbm90IHRha2VuLCB3ZSBob2xkIHRoZSBvZnRlbiBjb250ZW5kZWRcbitcdFx0ICogbW1hcCBsb2NrLiBUaGlzIGNhbiBoYXBwZW4gaWYgd2UgaGFkIHRvIGZhbGwgYmFjayB0byB0aGVcbitcdFx0ICogbW1hcCBsb2NrLlxuK1x0XHQgKlxuK1x0XHQgKiBUbyByZWxpZXZlIHByZXNzdXJlLCBjaGVjayBpZiBpdCBpcyBpbmRlZWQgY29udGVuZGVkLCB0aGVuXG4rXHRcdCAqIHRlbXBvcmFyaWx5IHJlbGVhc2UgaXQuXG4rXHRcdCAqL1xuK1x0XHRpZiAobG9ja19jdHgtXHUwMDNlbW1hcF9sb2NrZWQgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICBtbWFwX2xvY2tfaXNfY29udGVuZGVkKGxvY2tfY3R4LVx1MDAzZW1tKSkge1xuK1x0XHRcdHVubG9ja19jdHhfbW0obG9ja19jdHgpO1xuIFx0XHRcdC8qXG4tXHRcdFx0ICogQWZ0ZXIgZHJvcHBpbmcgdGhlIGxvY2ssIHRoZXJlIGFyZSBmb3VyIGNhc2VzIHRvXG4tXHRcdFx0ICogY29uc2lkZXIuIFNlZSB0aGUgZm9sbG93aW5nIGV4YW1wbGUgZm9yIGV4cGxhbmF0aW9uLlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogICArLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLStcbi1cdFx0XHQgKiAgIHwgVk1BMSB8IFZNQTIgfCBWTUEzICAgICAgfFxuLVx0XHRcdCAqICAgKy0tLS0tLSstLS0tLS0rLS0tLS0tLS0tLS0rXG4tXHRcdFx0ICogICB8ICAgICAgfCAgICAgIHwgICAgICAgICAgIHxcbi1cdFx0XHQgKiAgNGsgICAgIDhrICAgICAxNmsgICAgICAgICA0MDBrXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiBTdXBwb3NlIHdlIGRyb3AgdGhlIGxvY2sgYWZ0ZXIgcmVhZGluZyBWTUEyIGR1ZSB0b1xuLVx0XHRcdCAqIGNvbnRlbnRpb24sIHRoZW4gd2UgZ2V0OlxuLVx0XHRcdCAqXG4tXHRcdFx0ICpcdGxhc3Rfdm1hX2VuZCA9IDE2a1xuLVx0XHRcdCAqXG4tXHRcdFx0ICogMSkgVk1BMiBpcyBmcmVlZCwgYnV0IFZNQTMgZXhpc3RzOlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBWTUEzLlxuLVx0XHRcdCAqICAgIEluIHRoaXMgY2FzZSwganVzdCBjb250aW51ZSBmcm9tIFZNQTMuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAyKSBWTUEyIHN0aWxsIGV4aXN0czpcbi1cdFx0XHQgKlxuLVx0XHRcdCAqICAgIHZtYV9uZXh0KHZtaSkgd2lsbCByZXR1cm4gVk1BMy5cbi1cdFx0XHQgKiAgICBJbiB0aGlzIGNhc2UsIGp1c3QgY29udGludWUgZnJvbSBWTUEzLlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogMykgTm8gbW9yZSBWTUFzIGNhbiBiZSBmb3VuZDpcbi1cdFx0XHQgKlxuLVx0XHRcdCAqICAgIHZtYV9uZXh0KHZtaSkgd2lsbCByZXR1cm4gTlVMTC5cbi1cdFx0XHQgKiAgICBObyBtb3JlIHRoaW5ncyB0byBkbywganVzdCBicmVhay5cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIDQpIChsYXN0X3ZtYV9lbmQgLSAxKSBpcyB0aGUgbWlkZGxlIG9mIGEgdm1hIChWTUEnKTpcbi1cdFx0XHQgKlxuLVx0XHRcdCAqICAgIHZtYV9uZXh0KHZtaSkgd2lsbCByZXR1cm4gVk1BJyB3aG9zZSByYW5nZVxuLVx0XHRcdCAqICAgIGNvbnRhaW5zIGxhc3Rfdm1hX2VuZC5cbi1cdFx0XHQgKiAgICBJdGVyYXRlIFZNQScgZnJvbSBsYXN0X3ZtYV9lbmQuXG4rXHRcdFx0ICogRXZlbiB0aG91Z2ggd2UgcHJldmlvdXNseSBmZWxsIGJhY2sgdG8gbW1hcCBsb2NrLFxuK1x0XHRcdCAqIHdlIHRyeSB0YWtpbmcgVk1BIGxvY2sgZm9yIHRoZSBuZXh0IFZNQSwgc2luY2UgaXRcbitcdFx0XHQgKiBtaWdodCBub3QgYmUgdW5kZXIgbW9kaWZpY2F0aW9uLiBJbiB0aGUgd29yc3QgY2FzZVxuK1x0XHRcdCAqIHdlIHdpbGwgZmFsbCBiYWNrIHRvIG1tYXAgbG9jayBhZ2Fpbi5cbiBcdFx0XHQgKi9cbi1cdFx0XHR2bWEgPSB2bWFfbmV4dChcdTAwMjZ2bWkpO1xuLVx0XHRcdC8qIENhc2UgMyBhYm92ZSAqL1xuLVx0XHRcdGlmICghdm1hKVxuLVx0XHRcdFx0YnJlYWs7XG4tXG4tXHRcdFx0LyogQ2FzZSAxIGFuZCAyIGFib3ZlICovXG4tXHRcdFx0aWYgKHZtYS1cdTAwM2V2bV9zdGFydCBcdTAwM2U9IGxhc3Rfdm1hX2VuZCkge1xuLVx0XHRcdFx0c21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCBcdTAwMjZtc3MsIDApO1xuLVx0XHRcdFx0bGFzdF92bWFfZW5kID0gdm1hLVx1MDAzZXZtX2VuZDtcbi1cdFx0XHRcdGNvbnRpbnVlO1xuLVx0XHRcdH1cbi1cbi1cdFx0XHQvKiBDYXNlIDQgYWJvdmUgKi9cbi1cdFx0XHRpZiAodm1hLVx1MDAzZXZtX2VuZCBcdTAwM2UgbGFzdF92bWFfZW5kKSB7XG4tXHRcdFx0XHRzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsIFx1MDAyNm1zcywgbGFzdF92bWFfZW5kKTtcbi1cdFx0XHRcdGxhc3Rfdm1hX2VuZCA9IHZtYS1cdTAwM2V2bV9lbmQ7XG4tXHRcdFx0fVxuK1x0XHRcdHJjdV9yZWFkX2xvY2soKTtcbitcdFx0XHRyZXNldF9sb2NrX2N0eChsb2NrX2N0eCk7XG4rXHRcdFx0LyogUmVzdW1lIGZyb20gdGhlIGxhc3QgcG9zaXRpb24uICovXG4rXHRcdFx0cG9zID0gbGFzdF92bWFfZW5kO1xuK1x0XHRcdHZtYV9pdGVyX2luaXQoXHUwMDI2cHJpdi1cdTAwM2VpdGVyLCBtbSwgcG9zKTtcbiBcdFx0fVxuLVx0fSBmb3JfZWFjaF92bWEodm1pLCB2bWEpO1xuK1x0XHR2bWEgPSBwcm9jX2dldF92bWEobSwgXHUwMDI2cG9zKTtcbitcdH1cbiBcbiBlbXB0eV9zZXQ6XG4gXHRzaG93X3ZtYV9oZWFkZXJfcHJlZml4KG0sIHZtYV9zdGFydCwgbGFzdF92bWFfZW5kLCAwLCAwLCAwLCAwKTtcbkBAIC0xNTEyLDEwICsxNDQ2LDE0IEBAIHN0YXRpYyBpbnQgc2hvd19zbWFwc19yb2xsdXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIFxuIFx0X19zaG93X3NtYXAobSwgXHUwMDI2bXNzLCB0cnVlKTtcbiBcbitvdXRfdW5sb2NrOlxuK1x0aWYgKGxvY2tfY3R4LVx1MDAzZW1tYXBfbG9ja2VkKSB7XG4rXHRcdHVubG9ja19jdHhfbW0obG9ja19jdHgpO1xuK1x0fSBlbHNlIHtcbitcdFx0dW5sb2NrX2N0eF92bWEobG9ja19jdHgpO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdH1cbiBcdHJlbGVhc2VfdGFza19tZW1wb2xpY3kocHJpdik7XG4tXHR1bmxvY2tfY3R4X21tKFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHgpO1xuLVxuLW91dF9wdXRfbW06XG4gXHRtbXB1dChtbSk7XG4gb3V0X3B1dF90YXNrOlxuIFx0cHV0X3Rhc2tfc3RydWN0KHByaXYtXHUwMDNldGFzayk7XG5AQCAtMTYwNSw3ICsxNTQzLDcgQEAgc3RydWN0IGNsZWFyX3JlZnNfcHJpdmF0ZSB7XG4gXHRlbnVtIGNsZWFyX3JlZnNfdHlwZXMgdHlwZTtcbiB9O1xuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfaXNfcGlubmVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSlcbitzdGF0aWMgYm9vbCBwdGVfaXNfcGlubmVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90IHB0ZSlcbiB7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuIFxuQEAgLTE2MjEsOCArMTU1OSw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwdGVfaXNfcGlubmVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRyZXR1cm4gZm9saW9fbWF5YmVfZG1hX3Bpbm5lZChmb2xpbyk7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLVx0XHR1bnNpZ25lZCBsb25nIGFkZHIsIHB0ZV90ICpwdGUpXG4rc3RhdGljIHZvaWQgY2xlYXJfc29mdF9kaXJ0eShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuK1x0XHRcdCAgICAgcHRlX3QgKnB0ZSlcbiB7XG4gXHRpZiAoIXBndGFibGVfc3VwcG9ydHNfc29mdF9kaXJ0eSgpKVxuIFx0XHRyZXR1cm47XG5AQCAtMTY1Myw4ICsxNTkxLDggQEAgc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gfVxuIFxuICNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSlcbi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHApXG4rc3RhdGljIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kcClcbiB7XG4gXHRwbWRfdCBvbGQsIHBtZCA9ICpwbWRwO1xuIFxuQEAgLTE2NzksOCArMTYxNyw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5X3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdH1cbiB9XG4gI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHApXG4rc3RhdGljIHZvaWQgY2xlYXJfc29mdF9kaXJ0eV9wbWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4rXHRcdFx0XHQgdW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kcClcbiB7XG4gfVxuICNlbmRpZlxuQEAgLTE4NzksNyArMTgxNyw3IEBAIHN0cnVjdCBwYWdlbWFwcmVhZCB7XG4gXG4gI2RlZmluZSBQTV9FTkRfT0ZfQlVGRkVSICAgIDFcbiBcbi1zdGF0aWMgaW5saW5lIHBhZ2VtYXBfZW50cnlfdCBtYWtlX3BtZSh1NjQgZnJhbWUsIHU2NCBmbGFncylcbitzdGF0aWMgcGFnZW1hcF9lbnRyeV90IG1ha2VfcG1lKHU2NCBmcmFtZSwgdTY0IGZsYWdzKVxuIHtcbiBcdHJldHVybiAocGFnZW1hcF9lbnRyeV90KSB7IC5wbWUgPSAoZnJhbWUgXHUwMDI2IFBNX1BGUkFNRV9NQVNLKSB8IGZsYWdzIH07XG4gfVxuQEAgLTM0MjEsNyArMzM1OSw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc2hvd19udW1hX3ZtYV9sb2NrX29wcyA9IHtcbiBcdC53YWxrX2xvY2sgPSBQR1dBTEtfVk1BX1JETE9DS19WRVJJRlksXG4gfTtcbiBcbi1zdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqXG4gZ2V0X3Nob3dfbnVtYV9vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuIHtcbiBcdGlmIChwcml2LVx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuY1xuaW5kZXggNDE1ZWNjYjcwNDY4NC4uOGQwMGQ3ZGIxYzY1MiAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLW1hcHMtcmFjZS5jXG5AQCAtODAsNiArODAsNjEgQEAgZW51bSBtYXBzX2ZpbGUge1xuIFxuIHN0cnVjdCB2bWFfbW9kaWZpZXJfaW5mbztcbiBcbitlbnVtIHNtYXBzX3JvbGx1cF9zdGF0IHtcbitcdFJzcyxcbitcdFBzcyxcbitcdFBzc19EaXJ0eSxcbitcdFBzc19Bbm9uLFxuK1x0UHNzX0ZpbGUsXG4rXHRQc3NfU2htZW0sXG4rXHRTaGFyZWRfQ2xlYW4sXG4rXHRTaGFyZWRfRGlydHksXG4rXHRQcml2YXRlX0NsZWFuLFxuK1x0UHJpdmF0ZV9EaXJ0eSxcbitcdFJlZmVyZW5jZWQsXG4rXHRBbm9ueW1vdXMsXG4rXHRLU00sXG4rXHRMYXp5RnJlZSxcbitcdEFub25IdWdlUGFnZXMsXG4rXHRTaG1lbVBtZE1hcHBlZCxcbitcdEZpbGVQbWRNYXBwZWQsXG4rXHRTaGFyZWRfSHVnZXRsYixcbitcdFByaXZhdGVfSHVnZXRsYixcbitcdFN3YXAsXG4rXHRTd2FwUHNzLFxuK1x0TG9ja2VkLFxuK1x0Um9sbHVwRmllbGRDb3VudFxuK307XG4rXG4rc3RhdGljIGNvbnN0IGNoYXIgKnNtYXBzX3JvbGx1cF9zdGF0X25hbWVzW1JvbGx1cEZpZWxkQ291bnRdID0ge1xuK1x0XCJSc3NcIixcbitcdFwiUHNzXCIsXG4rXHRcIlBzc19EaXJ0eVwiLFxuK1x0XCJQc3NfQW5vblwiLFxuK1x0XCJQc3NfRmlsZVwiLFxuK1x0XCJQc3NfU2htZW1cIixcbitcdFwiU2hhcmVkX0NsZWFuXCIsXG4rXHRcIlNoYXJlZF9EaXJ0eVwiLFxuK1x0XCJQcml2YXRlX0NsZWFuXCIsXG4rXHRcIlByaXZhdGVfRGlydHlcIixcbitcdFwiUmVmZXJlbmNlZFwiLFxuK1x0XCJBbm9ueW1vdXNcIixcbitcdFwiS1NNXCIsXG4rXHRcIkxhenlGcmVlXCIsXG4rXHRcIkFub25IdWdlUGFnZXNcIixcbitcdFwiU2htZW1QbWRNYXBwZWRcIixcbitcdFwiRmlsZVBtZE1hcHBlZFwiLFxuK1x0XCJTaGFyZWRfSHVnZXRsYlwiLFxuK1x0XCJQcml2YXRlX0h1Z2V0bGJcIixcbitcdFwiU3dhcFwiLFxuK1x0XCJTd2FwUHNzXCIsXG4rXHRcIkxvY2tlZFwiLFxuK307XG4rXG4rc3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyB7XG4rXHR1bnNpZ25lZCBsb25nIHZhbHVlc1tSb2xsdXBGaWVsZENvdW50XTtcbit9O1xuK1xuIEZJWFRVUkUocHJvY19tYXBzX3JhY2UpXG4ge1xuIFx0c3RydWN0IHZtYV9tb2RpZmllcl9pbmZvICptb2RfaW5mbztcbkBAIC05MSw2ICsxNDYsNyBAQCBGSVhUVVJFKHByb2NfbWFwc19yYWNlKVxuIFx0ZW51bSBtYXBzX2ZpbGUgbWFwc19maWxlO1xuIFx0aW50IHNoYXJlZF9tZW1fc2l6ZTtcbiBcdGludCBza2lwX3BhZ2VzO1xuK1x0aW50IHJvbGx1cF9mZDtcbiBcdGludCBwYWdlX3NpemU7XG4gXHRpbnQgdm1hX2NvdW50O1xuIFx0Ym9vbCB2ZXJib3NlO1xuQEAgLTEzMiwxMiArMTg4LDEyIEBAIHN0cnVjdCB2bWFfbW9kaWZpZXJfaW5mbyB7XG4gXHR2b2lkICpjaGlsZF9tYXBwZWRfYWRkcltdO1xuIH07XG4gXG4tc3RhdGljIGJvb2wgcmVhZF9wYWdlKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsXG4rc3RhdGljIGJvb2wgcmVhZF9wYWdlKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsIGludCBmZCxcbiBcdFx0ICAgICAgc3RydWN0IHBhZ2VfY29udGVudCAqcGFnZSlcbiB7XG4gXHRzc2l6ZV90ICBieXRlc19yZWFkO1xuIFxuLVx0Ynl0ZXNfcmVhZCA9IHJlYWQoc2VsZi1cdTAwM2VtYXBzX2ZkLCBwYWdlLVx1MDAzZWRhdGEsIHNlbGYtXHUwMDNlcGFnZV9zaXplKTtcbitcdGJ5dGVzX3JlYWQgPSByZWFkKGZkLCBwYWdlLVx1MDAzZWRhdGEsIHNlbGYtXHUwMDNlcGFnZV9zaXplKTtcbiBcdGlmIChieXRlc19yZWFkIFx1MDAzYz0gMClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuQEAgLTE3NSw3ICsyMzEsNyBAQCBzdGF0aWMgaW50IGxvY2F0ZV9jb250YWluaW5nX3BhZ2UoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZixcbiBcdFx0Y2hhciAqY3Vycl9wb3M7XG4gXHRcdGNoYXIgKmVuZF9wb3M7XG4gXG4tXHRcdGlmICghcmVhZF9wYWdlKHNlbGYsIFx1MDAyNnNlbGYtXHUwMDNlcGFnZTEpKVxuK1x0XHRpZiAoIXJlYWRfcGFnZShzZWxmLCBzZWxmLVx1MDAzZW1hcHNfZmQsIFx1MDAyNnNlbGYtXHUwMDNlcGFnZTEpKVxuIFx0XHRcdHJldHVybiAtMTtcbiBcbiBcdFx0Y3Vycl9wb3MgPSBzZWxmLVx1MDAzZXBhZ2UxLmRhdGE7XG5AQCAtMjA1LDEwICsyNjEsMTEgQEAgc3RhdGljIGJvb2wgcmVhZF90d29fcGFnZXMoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZilcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuIFx0Zm9yIChpbnQgaSA9IDA7IGkgXHUwMDNjIHNlbGYtXHUwMDNlc2tpcF9wYWdlczsgaSsrKVxuLVx0XHRpZiAoIXJlYWRfcGFnZShzZWxmLCBcdTAwMjZzZWxmLVx1MDAzZXBhZ2UxKSlcbitcdFx0aWYgKCFyZWFkX3BhZ2Uoc2VsZiwgc2VsZi1cdTAwM2VtYXBzX2ZkLCBcdTAwMjZzZWxmLVx1MDAzZXBhZ2UxKSlcbiBcdFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4tXHRyZXR1cm4gcmVhZF9wYWdlKHNlbGYsIFx1MDAyNnNlbGYtXHUwMDNlcGFnZTEpIFx1MDAyNlx1MDAyNiByZWFkX3BhZ2Uoc2VsZiwgXHUwMDI2c2VsZi1cdTAwM2VwYWdlMik7XG4rXHRyZXR1cm4gcmVhZF9wYWdlKHNlbGYsIHNlbGYtXHUwMDNlbWFwc19mZCwgXHUwMDI2c2VsZi1cdTAwM2VwYWdlMSkgXHUwMDI2XHUwMDI2XG4rXHQgICAgICAgcmVhZF9wYWdlKHNlbGYsIHNlbGYtXHUwMDNlbWFwc19mZCwgXHUwMDI2c2VsZi1cdTAwM2VwYWdlMik7XG4gfVxuIFxuIHN0YXRpYyB2b2lkIGNvcHlfbGluZShjb25zdCBjaGFyICpsaW5lX3N0YXJ0LCBjb25zdCBjaGFyICpsaW5lX2VuZCxcbkBAIC0zMTcsNiArMzc0LDYxIEBAIHN0YXRpYyBib29sIHJlYWRfYm91bmRhcnlfbGluZXMoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZixcbiBcdFx0ICAgICAgXHUwMDI2Zmlyc3RfbGluZS1cdTAwM2VlbmRfYWRkcikgPT0gMjtcbiB9XG4gXG4rc3RhdGljIGJvb2wgcGFyc2Vfc21hcHNfcm9sbHVwKEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsXG4rXHRcdFx0ICAgICAgIHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKnN0YXRzKVxuK3tcbitcdHVuc2lnbmVkIGludCBkZXZfbWFqLCBkZXZfbWluLCBpbm9kZTtcbitcdHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZCwgb2ZmcztcbitcdHVuc2lnbmVkIGxvbmcgdmFsdWU7XG4rXHRjaGFyIG5hbWVbMzJdLCBwZXJtWzVdO1xuK1x0Y2hhciAqY3Vycl9wb3M7XG4rXHRjaGFyICplbmRfcG9zO1xuK1x0Y2hhciAqbGluZV9lbmQ7XG4rXG4rXHRpZiAobHNlZWsoc2VsZi1cdTAwM2Vyb2xsdXBfZmQsIDAsIFNFRUtfU0VUKSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKCFyZWFkX3BhZ2Uoc2VsZiwgc2VsZi1cdTAwM2Vyb2xsdXBfZmQsIFx1MDAyNnNlbGYtXHUwMDNlcGFnZTEpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRjdXJyX3BvcyA9IHNlbGYtXHUwMDNlcGFnZTEuZGF0YTtcbitcdGVuZF9wb3MgPSBzZWxmLVx1MDAzZXBhZ2UxLmRhdGEgKyBzZWxmLVx1MDAzZXBhZ2UxLnNpemU7XG4rXG4rXHRsaW5lX2VuZCA9IHN0cmNocihjdXJyX3BvcywgJ1xcbicpO1xuK1x0aWYgKCFsaW5lX2VuZClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHNzY2FuZihjdXJyX3BvcywgXCIlbHgtJWx4ICU0cyAlbHggJXU6JXUgJXUgJTMxc1wiLFxuK1x0XHRcdTAwMjZzdGFydCwgXHUwMDI2ZW5kLCBwZXJtLCBcdTAwMjZvZmZzLCBcdTAwMjZkZXZfbWFqLCBcdTAwMjZkZXZfbWluLCBcdTAwMjZpbm9kZSwgbmFtZSkgIT0gOClcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHN0cmNtcChuYW1lLCBcIltyb2xsdXBdXCIpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRmb3IgKGludCBzdGF0ID0gMDsgc3RhdCBcdTAwM2MgQVJSQVlfU0laRShzbWFwc19yb2xsdXBfc3RhdF9uYW1lcyk7IHN0YXQrKykge1xuK1x0XHRpbnQgbGVuO1xuK1xuK1x0XHRjdXJyX3BvcyA9IGxpbmVfZW5kICsgMTtcbitcdFx0aWYgKGN1cnJfcG9zIFx1MDAzZT0gZW5kX3BvcylcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRcdGxpbmVfZW5kID0gc3RyY2hyKGN1cnJfcG9zLCAnXFxuJyk7XG4rXHRcdGlmICghbGluZV9lbmQpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHRpZiAoc3NjYW5mKGN1cnJfcG9zLCBcIiUzMXMgJWx1IGtCXCIsIG5hbWUsIFx1MDAyNnZhbHVlKSAhPSAyKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0bGVuID0gc3RybGVuKG5hbWUpO1xuK1x0XHRpZiAobmFtZVtsZW4gLSAxXSAhPSAnOicgfHwgc3RybmNtcChuYW1lLCBzbWFwc19yb2xsdXBfc3RhdF9uYW1lc1tzdGF0XSwgbGVuIC0gMSkpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHRzdGF0cy1cdTAwM2V2YWx1ZXNbc3RhdF0gPSB2YWx1ZTtcbitcdH1cbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiAvKiBUaHJlYWQgc3luY2hyb25pemF0aW9uIHJvdXRpbmVzICovXG4gc3RhdGljIHZvaWQgd2FpdF9mb3Jfc3RhdGUoc3RydWN0IHZtYV9tb2RpZmllcl9pbmZvICptb2RfaW5mbywgZW51bSB0ZXN0X3N0YXRlIHN0YXRlKVxuIHtcbkBAIC0zOTcsNiArNTA5LDQxIEBAIHN0YXRpYyBib29sIHByaW50X2JvdW5kYXJpZXNfb24oYm9vbCBjb25kaXRpb24sIGNvbnN0IGNoYXIgKnRpdGxlLFxuIFx0cmV0dXJuIGNvbmRpdGlvbjtcbiB9XG4gXG4rc3RhdGljIHZvaWQgcHJpbnRfc21hcHNfcm9sbHVwX3N0YXRzKGNvbnN0IGNoYXIgKnRpdGxlLCBGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmLFxuK1x0XHRcdFx0ICAgICBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpzdGF0cylcbit7XG4rXHRwcmludGYoXCIlc1wiLCB0aXRsZSk7XG4rXHRmb3IgKGludCBzdGF0ID0gMDsgc3RhdCBcdTAwM2MgQVJSQVlfU0laRShzbWFwc19yb2xsdXBfc3RhdF9uYW1lcyk7IHN0YXQrKylcbitcdFx0cHJpbnRmKFwiJTY0cyAlbHUga0JcXG5cIiwgc21hcHNfcm9sbHVwX3N0YXRfbmFtZXNbc3RhdF0sIHN0YXRzLVx1MDAzZXZhbHVlc1tzdGF0XSk7XG4rfVxuK1xuK3N0YXRpYyBib29sIGNtcF9zbWFwc19yb2xsdXBfc3RhdChzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpzMSxcbitcdFx0XHRcdCAgc3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyAqczIsXG4rXHRcdFx0XHQgIGVudW0gc21hcHNfcm9sbHVwX3N0YXQgc3RhdClcbit7XG4rXHRyZXR1cm4gczEtXHUwMDNldmFsdWVzW3N0YXRdID09IHMyLVx1MDAzZXZhbHVlc1tzdGF0XTtcbit9XG4rXG4rc3RhdGljIGJvb2wgY29tcGFyZV9zbWFwc19yb2xsdXAoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZixcbitcdFx0XHRcdCBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpleHBlY3RlZCxcbitcdFx0XHRcdCBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICphY3R1YWwpXG4re1xuK1x0LypcbitcdCAqIENsZWFuL2RpcnR5IG1ldHJpY3MgbWlnaHQgY2hhbmdlIGJ1dCBQc3MtcmVsYXRlZCBvbmVzXG4rXHQgKiBzaG91bGQgc3RheSBjb25zdGFudC5cbitcdCAqL1xuK1x0aWYgKGNtcF9zbWFwc19yb2xsdXBfc3RhdChleHBlY3RlZCwgYWN0dWFsLCBQc3MpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGNtcF9zbWFwc19yb2xsdXBfc3RhdChleHBlY3RlZCwgYWN0dWFsLCBQc3NfQW5vbikgXHUwMDI2XHUwMDI2XG4rXHQgICAgY21wX3NtYXBzX3JvbGx1cF9zdGF0KGV4cGVjdGVkLCBhY3R1YWwsIFBzc19GaWxlKSBcdTAwMjZcdTAwMjZcbitcdCAgICBjbXBfc21hcHNfcm9sbHVwX3N0YXQoZXhwZWN0ZWQsIGFjdHVhbCwgUHNzX1NobWVtKSlcbitcdFx0cmV0dXJuIHRydWU7XG4rXG4rXHRwcmludF9zbWFwc19yb2xsdXBfc3RhdHMoXCJFeHBlY3RlZCBzdGF0czpcIiwgc2VsZiwgZXhwZWN0ZWQpO1xuK1x0cHJpbnRfc21hcHNfcm9sbHVwX3N0YXRzKFwiQWN0dWFsIHN0YXRzOlwiLCBzZWxmLCBhY3R1YWwpO1xuK1xuK1x0cmV0dXJuIGZhbHNlO1xuK31cbitcbiBzdGF0aWMgdm9pZCByZXBvcnRfdGVzdF9zdGFydChjb25zdCBjaGFyICpuYW1lLCBib29sIHZlcmJvc2UpXG4ge1xuIFx0aWYgKHZlcmJvc2UpXG5AQCAtNTcyLDYgKzcxOSw3IEBAIEZJWFRVUkVfU0VUVVAocHJvY19tYXBzX3JhY2UpXG4gXHR1bnNpZ25lZCBsb25nIGZpcnN0X21hcF9hZGRyO1xuIFx0dW5zaWduZWQgbG9uZyBsYXN0X21hcF9hZGRyO1xuIFx0dW5zaWduZWQgbG9uZyBkdXJhdGlvbl9zZWM7XG4rXHRjaGFyIHJvbGx1cF9mbmFtZVszMl07XG4gXHRjaGFyIGZuYW1lWzMyXTtcbiBcbiBcdHNlbGYtXHUwMDNlcGFnZV9zaXplID0gKHVuc2lnbmVkIGxvbmcpc3lzY29uZihfU0NfUEFHRVNJWkUpO1xuQEAgLTY0OSw2ICs3OTcsOSBAQCBGSVhUVVJFX1NFVFVQKHByb2NfbWFwc19yYWNlKVxuIFx0XHRicmVhaztcbiBcdGNhc2UgU01BUFM6XG4gXHRcdHNwcmludGYoZm5hbWUsIFwiL3Byb2MvJWQvc21hcHNcIiwgc2VsZi1cdTAwM2VwaWQpO1xuK1x0XHRzcHJpbnRmKHJvbGx1cF9mbmFtZSwgXCIvcHJvYy8lZC9zbWFwc19yb2xsdXBcIiwgc2VsZi1cdTAwM2VwaWQpO1xuK1x0XHRzZWxmLVx1MDAzZXJvbGx1cF9mZCA9IG9wZW4ocm9sbHVwX2ZuYW1lLCBPX1JET05MWSk7XG4rXHRcdEFTU0VSVF9ORShzZWxmLVx1MDAzZXJvbGx1cF9mZCwgLTEpO1xuIFx0XHRicmVhaztcbiBcdGRlZmF1bHQ6XG4gXHRcdGtzZnRfZXhpdF9mYWlsKCk7XG5AQCAtNzExLDYgKzg2Miw4IEBAIEZJWFRVUkVfVEVBUkRPV04ocHJvY19tYXBzX3JhY2UpXG4gXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mgc2VsZi1cdTAwM2V2bWFfY291bnQ7IGkrKylcbiBcdFx0bXVubWFwKHNlbGYtXHUwMDNlbW9kX2luZm8tXHUwMDNlY2hpbGRfbWFwcGVkX2FkZHJbaV0sIHNlbGYtXHUwMDNlcGFnZV9zaXplKTtcbiBcdGNsb3NlKHNlbGYtXHUwMDNlbWFwc19mZCk7XG4rXHRpZiAoc2VsZi1cdTAwM2VtYXBzX2ZpbGUgPT0gU01BUFMpXG4rXHRcdGNsb3NlKHNlbGYtXHUwMDNlcm9sbHVwX2ZkKTtcbiBcdHdhaXRwaWQoc2VsZi1cdTAwM2VwaWQsIFx1MDAyNnN0YXR1cywgMCk7XG4gXHRtdW5tYXAoc2VsZi1cdTAwM2Vtb2RfaW5mbywgc2VsZi1cdTAwM2VzaGFyZWRfbWVtX3NpemUpO1xuIH1cbkBAIC03MjMsNiArODc2LDcgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3NwbGl0KVxuIFx0c3RydWN0IGxpbmVfY29udGVudCBzcGxpdF9maXJzdF9saW5lO1xuIFx0c3RydWN0IGxpbmVfY29udGVudCByZXN0b3JlZF9sYXN0X2xpbmU7XG4gXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2ZpcnN0X2xpbmU7XG4rXHRzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIG9yaWdfc3RhdHM7XG4gXG4gXHR3YWl0X2Zvcl9zdGF0ZShtb2RfaW5mbywgU0VUVVBfUkVBRFkpO1xuIFxuQEAgLTczNiw2ICs4OTAsOCBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fc3BsaXQpXG4gXHRyZXBvcnRfdGVzdF9zdGFydChcIlRlYXJpbmcgZnJvbSBzcGxpdFwiLCBzZWxmLVx1MDAzZXZlcmJvc2UpO1xuIFx0QVNTRVJUX1RSVUUoY2FwdHVyZV9tb2RfcGF0dGVybihzZWxmLCBcdTAwMjZzcGxpdF9sYXN0X2xpbmUsIFx1MDAyNnNwbGl0X2ZpcnN0X2xpbmUsXG4gXHRcdFx0XHRcdFx1MDAyNnJlc3RvcmVkX2xhc3RfbGluZSwgXHUwMDI2cmVzdG9yZWRfZmlyc3RfbGluZSkpO1xuK1x0aWYgKHNlbGYtXHUwMDNlbWFwc19maWxlID09IFNNQVBTKVxuK1x0XHRBU1NFUlRfVFJVRShwYXJzZV9zbWFwc19yb2xsdXAoc2VsZiwgXHUwMDI2b3JpZ19zdGF0cykpO1xuIFxuIFx0LyogTm93IHN0YXJ0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBmb3Igc2VsZi1cdTAwM2VkdXJhdGlvbl9zZWMgKi9cbiBcdHNpZ25hbF9zdGF0ZShtb2RfaW5mbywgVEVTVF9SRUFEWSk7XG5AQCAtNzk5LDYgKzk1NSwxMSBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fc3BsaXQpXG4gXHRcdFx0XHQgICAgIHZtYV9lbmQgPT0gc2VsZi1cdTAwM2VsYXN0X2xpbmUuZW5kX2FkZHIpIHx8XG4gXHRcdFx0XHQgICAgKHZtYV9zdGFydCA9PSBzcGxpdF9maXJzdF9saW5lLnN0YXJ0X2FkZHIgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgICAgIHZtYV9lbmQgPT0gc3BsaXRfZmlyc3RfbGluZS5lbmRfYWRkcikpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgc3RhdHM7XG4rXG4rXHRcdFx0QVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsIFx1MDAyNnN0YXRzKSk7XG4rXHRcdFx0QVNTRVJUX1RSVUUoY29tcGFyZV9zbWFwc19yb2xsdXAoc2VsZiwgXHUwMDI2b3JpZ19zdGF0cywgXHUwMDI2c3RhdHMpKTtcbiBcdFx0fVxuIFx0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQ19DT0FSU0UsIFx1MDAyNmVuZF90cyk7XG4gXHRcdGVuZF90ZXN0X2l0ZXJhdGlvbihcdTAwMjZlbmRfdHMsIHNlbGYtXHUwMDNldmVyYm9zZSk7XG5AQCAtODE3LDYgKzk3OCw3IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9yZXNpemUpXG4gXHRzdHJ1Y3QgbGluZV9jb250ZW50IHNocnVua19maXJzdF9saW5lO1xuIFx0c3RydWN0IGxpbmVfY29udGVudCByZXN0b3JlZF9sYXN0X2xpbmU7XG4gXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2ZpcnN0X2xpbmU7XG4rXHRzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIG9yaWdfc3RhdHM7XG4gXG4gXHR3YWl0X2Zvcl9zdGF0ZShtb2RfaW5mbywgU0VUVVBfUkVBRFkpO1xuIFxuQEAgLTgzMCw2ICs5OTIsOCBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fcmVzaXplKVxuIFx0cmVwb3J0X3Rlc3Rfc3RhcnQoXCJUZWFyaW5nIGZyb20gcmVzaXplXCIsIHNlbGYtXHUwMDNldmVyYm9zZSk7XG4gXHRBU1NFUlRfVFJVRShjYXB0dXJlX21vZF9wYXR0ZXJuKHNlbGYsIFx1MDAyNnNocnVua19sYXN0X2xpbmUsIFx1MDAyNnNocnVua19maXJzdF9saW5lLFxuIFx0XHRcdFx0XHRcdTAwMjZyZXN0b3JlZF9sYXN0X2xpbmUsIFx1MDAyNnJlc3RvcmVkX2ZpcnN0X2xpbmUpKTtcbitcdGlmIChzZWxmLVx1MDAzZW1hcHNfZmlsZSA9PSBTTUFQUylcbitcdFx0QVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsIFx1MDAyNm9yaWdfc3RhdHMpKTtcbiBcbiBcdC8qIE5vdyBzdGFydCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZm9yIHNlbGYtXHUwMDNlZHVyYXRpb25fc2VjICovXG4gXHRzaWduYWxfc3RhdGUobW9kX2luZm8sIFRFU1RfUkVBRFkpO1xuQEAgLTg4MCw2ICsxMDQ0LDExIEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9yZXNpemUpXG4gXHRcdFx0QVNTRVJUX1RSVUUodm1hX3N0YXJ0ID09IHNlbGYtXHUwMDNlbGFzdF9saW5lLnN0YXJ0X2FkZHIgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgICAgKHZtYV9lbmQgLSB2bWFfc3RhcnQgPT0gc2VsZi1cdTAwM2VwYWdlX3NpemUgKiAzIHx8XG4gXHRcdFx0XHQgICAgIHZtYV9lbmQgLSB2bWFfc3RhcnQgPT0gc2VsZi1cdTAwM2VwYWdlX3NpemUpKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIHN0YXRzO1xuK1xuK1x0XHRcdEFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCBcdTAwMjZzdGF0cykpO1xuK1x0XHRcdEFTU0VSVF9UUlVFKGNvbXBhcmVfc21hcHNfcm9sbHVwKHNlbGYsIFx1MDAyNm9yaWdfc3RhdHMsIFx1MDAyNnN0YXRzKSk7XG4gXHRcdH1cbiBcdFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUNfQ09BUlNFLCBcdTAwMjZlbmRfdHMpO1xuIFx0XHRlbmRfdGVzdF9pdGVyYXRpb24oXHUwMDI2ZW5kX3RzLCBzZWxmLVx1MDAzZXZlcmJvc2UpO1xuQEAgLTg5OCw2ICsxMDY3LDcgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3JlbWFwKVxuIFx0c3RydWN0IGxpbmVfY29udGVudCByZW1hcHBlZF9maXJzdF9saW5lO1xuIFx0c3RydWN0IGxpbmVfY29udGVudCByZXN0b3JlZF9sYXN0X2xpbmU7XG4gXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2ZpcnN0X2xpbmU7XG4rXHRzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIG9yaWdfc3RhdHM7XG4gXG4gXHR3YWl0X2Zvcl9zdGF0ZShtb2RfaW5mbywgU0VUVVBfUkVBRFkpO1xuIFxuQEAgLTkxMSw2ICsxMDgxLDggQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3JlbWFwKVxuIFx0cmVwb3J0X3Rlc3Rfc3RhcnQoXCJUZWFyaW5nIGZyb20gcmVtYXBcIiwgc2VsZi1cdTAwM2V2ZXJib3NlKTtcbiBcdEFTU0VSVF9UUlVFKGNhcHR1cmVfbW9kX3BhdHRlcm4oc2VsZiwgXHUwMDI2cmVtYXBwZWRfbGFzdF9saW5lLCBcdTAwMjZyZW1hcHBlZF9maXJzdF9saW5lLFxuIFx0XHRcdFx0XHRcdTAwMjZyZXN0b3JlZF9sYXN0X2xpbmUsIFx1MDAyNnJlc3RvcmVkX2ZpcnN0X2xpbmUpKTtcbitcdGlmIChzZWxmLVx1MDAzZW1hcHNfZmlsZSA9PSBTTUFQUylcbitcdFx0QVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsIFx1MDAyNm9yaWdfc3RhdHMpKTtcbiBcbiBcdC8qIE5vdyBzdGFydCBjb25jdXJyZW50IG1vZGlmaWNhdGlvbnMgZm9yIHNlbGYtXHUwMDNlZHVyYXRpb25fc2VjICovXG4gXHRzaWduYWxfc3RhdGUobW9kX2luZm8sIFRFU1RfUkVBRFkpO1xuQEAgLTk2Myw2ICsxMTM1LDExIEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9yZW1hcClcbiBcdFx0XHRcdCAgICAgdm1hX2VuZCAtIHZtYV9zdGFydCA9PSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSAqIDMpIHx8XG4gXHRcdFx0XHQgICAgKHZtYV9zdGFydCA9PSBzZWxmLVx1MDAzZWxhc3RfbGluZS5zdGFydF9hZGRyICsgc2VsZi1cdTAwM2VwYWdlX3NpemUgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHQgICAgIHZtYV9lbmQgLSB2bWFfc3RhcnQgPT0gc2VsZi1cdTAwM2VwYWdlX3NpemUpKTtcbitcdFx0fSBlbHNlIHtcbitcdFx0XHRzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIHN0YXRzO1xuK1xuK1x0XHRcdEFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCBcdTAwMjZzdGF0cykpO1xuK1x0XHRcdEFTU0VSVF9UUlVFKGNvbXBhcmVfc21hcHNfcm9sbHVwKHNlbGYsIFx1MDAyNm9yaWdfc3RhdHMsIFx1MDAyNnN0YXRzKSk7XG4gXHRcdH1cbiBcdFx0Y2xvY2tfZ2V0dGltZShDTE9DS19NT05PVE9OSUNfQ09BUlNFLCBcdTAwMjZlbmRfdHMpO1xuIFx0XHRlbmRfdGVzdF9pdGVyYXRpb24oXHUwMDI2ZW5kX3RzLCBzZWxmLVx1MDAzZXZlcmJvc2UpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6Mzg6MTAuMjY1NDgxMTYxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTI1MzM1OTA0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhdGNoOiAvcHJvYy90YXNrX21tdS5jIGFuZCBzZWxmdGVzdHMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaC4gSSBzZWUgaXQgdG91Y2hlcyBgZnMvcHJvYy90YXNrX21tdS5jYCBhbmQgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuY2AsIHNvIGxldCdzIGZvY3VzIG9uIHRoZSBrZXJuZWwgc2lkZSwgc3BlY2lmaWNhbGx5IGBmcy9wcm9jL3Rhc2tfbW11LmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gcmVhZCB0aGUgc3Vycm91bmRpbmcgY29kZSBmb3IgY29udGV4dC5cblxuRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoZXJlJ3Mgc29tZSBzZXJpb3VzIHJlZmFjdG9yaW5nIGdvaW5nIG9uIHdpdGggdGhlIGxvY2tpbmcgaGVscGVycy4gSSdtIHNlZWluZyBjaGFuZ2VzIHJlbGF0ZWQgdG86IGBsb2NrX2N0eF9tbWAsIGB1bmxvY2tfY3R4X21tYCwgYHJlc2V0X2xvY2tfY3R4YCwgYHVubG9ja19jdHhfdm1hYCwgYGxvY2tfdm1hX3JhbmdlYCwgYHVubG9ja192bWFfcmFuZ2VgLCBgZmFsbGJhY2tfdG9fbW1hcF9sb2NrYCwgYGRyb3BfcmN1YCwgYW5kIGByZWFjcXVpcmVfcmN1YC4gQ2xlYXJseSwgdGhleSdyZSByZXRoaW5raW5nIGhvdyBsb2NraW5nIGlzIGhhbmRsZWQgaW4gdGhpcyBhcmVhLiBUaGVyZSBhcmUgYWxzbyBjaGFuZ2VzIHRvIHRoZSB2YXJpYWJsZXMgYG1fc3RhcnRgLCBgbV9zdG9wYCwgYW5kIGBkb19wcm9jbWFwX3F1ZXJ5YCwgd2hpY2ggd2FycmFudHMgY2xvc2VyIGV4YW1pbmF0aW9uLlxuXG5TcGVjaWZpY2FsbHksIGluIGBzbWFwX2dhdGhlcl9zdGF0c2AsIEkgbm90aWNlIGEgY2hhbmdlIHRvIGhvdyB0aGUgYHN0YXJ0YCBwYXJhbWV0ZXIgaXMgaGFuZGxlZCwgaW5jbHVkaW5nIGBpc19wYXJ0aWFsID0gc3RhcnQgXHUwMDNlIHZtYS1cdTAwM2V2bV9zdGFydGAgbG9naWMgYW5kIHRoZSB1c2Ugb2YgYHdhbGtfcGFnZV9yYW5nZV92bWFgIGluc3RlYWQgb2YgYHdhbGtfcGFnZV92bWFgIG9yIGB3YWxrX3BhZ2VfcmFuZ2VgLiBUaGlzIGlzIGxpa2VseSB0byByZWZpbmUgdGhlIHJhbmdlIG9mIG1lbW9yeSBiZWluZyBhbmFseXplZC5cblxuVGhlIG1vc3Qgc2lnbmlmaWNhbnQgY2hhbmdlLCBob3dldmVyLCBzZWVtcyB0byBiZSBpbiBgc2hvd19zbWFwc19yb2xsdXBgLiBJdCBhcHBlYXJzIHRoZXkncmUgbW92aW5nIGF3YXkgZnJvbSBhIHNpbmdsZSBgbW1hcF9yZWFkX2xvY2tgIGF0IHRoZSBiZWdpbm5pbmcgKGBsb2NrX2N0eF9tbWApIGFuZCBhcmUgbm93IHV0aWxpemluZyBgcmN1X3JlYWRfbG9jaygpYCBhbG9uZyB3aXRoIGByZXNldF9sb2NrX2N0eChsb2NrX2N0eClgLCBlbXBsb3lpbmcgYHByb2NfZ2V0X3ZtYWAgYW5kIHBlci1WTUEgbG9ja2luZyAoVk1BIGxvY2tzKSB1bmRlciBSQ1UuIFRoaXMgc3Ryb25nbHkgc3VnZ2VzdHMgdGhleSBhcmUgYWltaW5nIGZvciBpbXByb3ZlZCBjb25jdXJyZW5jeSwgc2ltaWxhciB0byBob3cgYC9wcm9jL3BpZC9zbWFwc2AgYW5kIGAvcHJvYy9waWQvbWFwc2Agd29yay4gSXQncyBsaWtlbHkgdHJ5aW5nIHRvIHJlZHVjZSBjb250ZW50aW9uIG9uIHRoZSBnbG9iYWwgbW1hcCBsb2NrLCB1c2luZyBSQ1UgZm9yIHJlYWQgb3BlcmF0aW9ucy4gVGhleSd2ZSBhbHNvIGFjY291bnRlZCBmb3IgaGFuZGxpbmcgY29udGVudGlvbnMgb3IgZmFsbGJhY2tzIGlmIGBtbWFwX2xvY2tgIGlzIG5lZWRlZC4gSW4gYWRkaXRpb24sIHRoZSBgc2hvd19zbWFwYCBmdW5jdGlvbiBub3cgY2FsbHMgYHNtYXBfZ2F0aGVyX3N0YXRzKHByaXYsIHZtYSwgXHUwMDI2bXNzLCB2bWEtXHUwMDNldm1fc3RhcnQpYCBpbnN0ZWFkIG9mIHBhc3NpbmcgMCwgd2hpY2ggYWxzbyB3YXJyYW50cyBpbnZlc3RpZ2F0aW9uLlxuXG5UaW1lIHRvIGNvbnN1bHQgdGhlIHNvdXJjZS4gTGV0J3MgdXNlIGBncmVwcGVyYCBvciBgcmVhZC1maWxlYCB0byBnZXQgdGhlIGZ1bGwgcGljdHVyZSB3aXRoaW4gYGZzL3Byb2MvdGFza19tbXUuY2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTc2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDQ2LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6Mzg6MTUuNTE4ODQzODM2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDg2NjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNob3dfc21hcHNfcm9sbHVwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL3Byb2MvdGFza19tbXUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmM9MTMzOD1zdGF0aWMgaW50IHNob3dfc21hcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTM2NS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTM2NjpzdGF0aWMgaW50IHNob3dfc21hcHNfcm9sbHVwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTM2Ny17XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmM9MTQ3OD1zdGF0aWMgaW50IHNtYXBzX3JvbGx1cF9vcGVuKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTE0ODYtXFxuZnMvcHJvYy90YXNrX21tdS5jOjE0ODc6XFx0cmV0ID0gc2luZ2xlX29wZW4oZmlsZSwgc2hvd19zbWFwc19yb2xsdXAsIHByaXYpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0xNDg4LVxcdGlmIChyZXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjM4OjE1LjU2Nzk0NDAyNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM0NzA4NzU5OTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRoZSB0aG91Z2h0IHByb2Nlc3MsIGFzIGlmIGl0IHdlcmUgbXkgb3duOlxuXG4qKkRpdmluZyBpbnRvIGBmcy9wcm9jL3Rhc2tfbW11LmNgIGZvciBNZW1vcnkgTWFwcGluZyBEZWVwIERpdmVzKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBtZW1vcnkgbWFwcGluZ3MsIHNwZWNpZmljYWxseSBob3cgdGhleSdyZSBleHBvc2VkIHRocm91Z2ggYC9wcm9jL1twaWRdL3NtYXBzYC4gVGhlIGdvYWwgaGVyZSBpcyB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2VzIG1hZGUgYXJvdW5kIGBzaG93X3NtYXBzX3JvbGx1cGAgYW5kIHNpbWlsYXIgZnVuY3Rpb25zIHdpdGhpbiB0aGUga2VybmVsJ3MgYGZzL3Byb2MvdGFza19tbXUuY2AgZmlsZS4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGtlcm5lbCBnYXRoZXJzIGFuZCBwcmVzZW50cyBwZXItdGFzayBtZW1vcnkgaW5mb3JtYXRpb24uIFRoYXQgYHNob3dfc21hcHNfcm9sbHVwYCBmdW5jdGlvbiBpcyBhIGtleSBlbnRyeSBwb2ludCwgYW5kIHdoYXRldmVyIHN1cnJvdW5kaW5nIGNvZGUgZ290IHRvdWNoZWQgbGlrZWx5IGhvbGRzIGluc2lnaHRzIGludG8gcmVjZW50IGltcHJvdmVtZW50cywgYnVnIGZpeGVzLCBvciBuZXcgZmVhdHVyZXMgaW4gdGhlIHZpcnR1YWwgbWVtb3J5IHJlcG9ydGluZy4gSSB3YW50IHRvIGNoZWNrIGhvdyB0aGV5IGFyZSBnZXR0aW5nIHRoZSB0b3RhbCBvZiB0aGUgcHJpdmF0ZSwgc2hhcmVkLCBzd2FwcGVkLCBldGMgbWVtb3J5IGluZm8uIEknbSBlc3BlY2lhbGx5IGtlZW4gdG8gc2VlIGhvdyB0aGUgY29kZSBoYW5kbGVzIGRpZmZlcmVudCBwYWdlIHNpemVzLCBOVU1BIGNvbmZpZ3VyYXRpb25zLCBhbmQgcGVyaGFwcyBldmVuIG1lbW9yeS10aWVyaW5nIHRlY2hub2xvZ2llcyBpZiB0aGV5IGFyZSBleHBvc2VkIGluIHRoZSBgc21hcHNgIG91dHB1dC4gSSBhbnRpY2lwYXRlIHNvbWUgaW50ZXJlc3RpbmcgdXNlcyBvZiBgcHRlYHMgYW5kIGBwbWRgcy4gVGltZSB0byBkaWcgaW4gYW5kIGdldCBhIGdyaXAgb24gdGhvc2UgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQyODEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOTozODoxOS4wMzg4MjI0MDlaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjIxNzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvcHJvYy90YXNrX21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzNjAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMzYwOlxcdFxcdFxcdHNlcV9wcmludGYobSwgXFxcIlByb3RlY3Rpb25LZXk6ICAlOHVcXFxcblxcXCIsIHZtYV9wa2V5KHZtYSkpO1xcbjEzNjE6XFx0XFx0c2hvd19zbWFwX3ZtYV9mbGFncyhtLCB2bWEpO1xcbjEzNjI6XFx0XFxuMTM2MzpcXHRcXHRyZXR1cm4gMDtcXG4xMzY0OlxcdH1cXG4xMzY1OlxcdFxcbjEzNjY6XFx0c3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuMTM2NzpcXHR7XFxuMTM2ODpcXHRcXHRzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYgPSBtLVxcdTAwM2Vwcml2YXRlO1xcbjEzNjk6XFx0XFx0c3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHggPSBcXHUwMDI2cHJpdi1cXHUwMDNlbG9ja19jdHg7XFxuMTM3MDpcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IGxvY2tfY3R4LVxcdTAwM2VtbTtcXG4xMzcxOlxcdFxcdHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyBtc3MgPSB7fTtcXG4xMzcyOlxcdFxcdHVuc2lnbmVkIGxvbmcgbGFzdF92bWFfZW5kID0gMDtcXG4xMzczOlxcdFxcdHVuc2lnbmVkIGxvbmcgdm1hX3N0YXJ0ID0gMDtcXG4xMzc0OlxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hO1xcbjEzNzU6XFx0XFx0bG9mZl90IHBvcyA9IDA7XFxuMTM3NjpcXHRcXHRpbnQgcmV0ID0gMDtcXG4xMzc3OlxcdFxcbjEzNzg6XFx0XFx0cHJpdi1cXHUwMDNldGFzayA9IGdldF9wcm9jX3Rhc2socHJpdi1cXHUwMDNlaW5vZGUpO1xcbjEzNzk6XFx0XFx0aWYgKCFwcml2LVxcdTAwM2V0YXNrKVxcbjEzODA6XFx0XFx0XFx0cmV0dXJuIC1FU1JDSDtcXG4xMzgxOlxcdFxcbjEzODI6XFx0XFx0aWYgKCFtbSB8fCAhbW1nZXRfbm90X3plcm8obW0pKSB7XFxuMTM4MzpcXHRcXHRcXHRyZXQgPSAtRVNSQ0g7XFxuMTM4NDpcXHRcXHRcXHRnb3RvIG91dF9wdXRfdGFzaztcXG4xMzg1OlxcdFxcdH1cXG4xMzg2OlxcdFxcbjEzODc6XFx0XFx0aG9sZF90YXNrX21lbXBvbGljeShwcml2KTtcXG4xMzg4OlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4xMzg5OlxcdFxcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcXG4xMzkwOlxcdFxcbjEzOTE6XFx0XFx0dm1hX2l0ZXJfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlaXRlciwgbW0sIDApO1xcbjEzOTI6XFx0XFx0dm1hID0gcHJvY19nZXRfdm1hKG0sIFxcdTAwMjZwb3MpO1xcbjEzOTM6XFx0XFx0aWYgKHVubGlrZWx5KCF2bWEpKVxcbjEzOTQ6XFx0XFx0XFx0Z290byBlbXB0eV9zZXQ7XFxuMTM5NTpcXHRcXG4xMzk2OlxcdFxcdGlmICghSVNfRVJSKHZtYSkgXFx1MDAyNlxcdTAwMjYgdm1hICE9IGdldF9nYXRlX3ZtYShsb2NrX2N0eC1cXHUwMDNlbW0pKVxcbjEzOTc6XFx0XFx0XFx0dm1hX3N0YXJ0ID0gdm1hLVxcdTAwM2V2bV9zdGFydDtcXG4xMzk4OlxcdFxcbjEzOTk6XFx0XFx0d2hpbGUgKHZtYSkge1xcbjE0MDA6XFx0XFx0XFx0aWYgKElTX0VSUih2bWEpKSB7XFxuMTQwMTpcXHRcXHRcXHRcXHRyZXQgPSBQVFJfRVJSKHZtYSk7XFxuMTQwMjpcXHRcXHRcXHRcXHRnb3RvIG91dF91bmxvY2s7XFxuMTQwMzpcXHRcXHRcXHR9XFxuMTQwNDpcXHRcXG4xNDA1OlxcdFxcdFxcdGlmICh2bWEgPT0gZ2V0X2dhdGVfdm1hKGxvY2tfY3R4LVxcdTAwM2VtbSkpXFxuMTQwNjpcXHRcXHRcXHRcXHRicmVhaztcXG4xNDA3OlxcdFxcbjE0MDg6XFx0XFx0XFx0LypcXG4xNDA5OlxcdFxcdFxcdCAqIElmIGFmdGVyIHJldGFraW5nIHRoZSBsb2NrLCBhbHJlYWR5IHJlcG9ydGVkIFZNQSBncmV3IG9yXFxuMTQxMDpcXHRcXHRcXHQgKiBtZXJnZWQgd2l0aCB0aGUgbmV4dCBvbmUsIHNtYXBfZ2F0aGVyX3N0YXRzKCkgd2lsbCBnYXRoZXJcXG4xNDExOlxcdFxcdFxcdCAqIHN0YXRzIGZvciB0aGUgcmVtYWluaW5nIHBvcnRpb24gYnkgc3RhcnRpbmcgYXQgbGFzdF92bWFfZW5kLlxcbjE0MTI6XFx0XFx0XFx0ICovXFxuMTQxMzpcXHRcXHRcXHRzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsIFxcdTAwMjZtc3MsIGxhc3Rfdm1hX2VuZCk7XFxuMTQxNDpcXHRcXHRcXHRsYXN0X3ZtYV9lbmQgPSB2bWEtXFx1MDAzZXZtX2VuZDtcXG4xNDE1OlxcdFxcbjE0MTY6XFx0XFx0XFx0LypcXG4xNDE3OlxcdFxcdFxcdCAqIElmIHRoZSBWTUEgbG9jayBpcyBub3QgdGFrZW4sIHdlIGhvbGQgdGhlIG9mdGVuIGNvbnRlbmRlZFxcbjE0MTg6XFx0XFx0XFx0ICogbW1hcCBsb2NrLiBUaGlzIGNhbiBoYXBwZW4gaWYgd2UgaGFkIHRvIGZhbGwgYmFjayB0byB0aGVcXG4xNDE5OlxcdFxcdFxcdCAqIG1tYXAgbG9jay5cXG4xNDIwOlxcdFxcdFxcdCAqXFxuMTQyMTpcXHRcXHRcXHQgKiBUbyByZWxpZXZlIHByZXNzdXJlLCBjaGVjayBpZiBpdCBpcyBpbmRlZWQgY29udGVuZGVkLCB0aGVuXFxuMTQyMjpcXHRcXHRcXHQgKiB0ZW1wb3JhcmlseSByZWxlYXNlIGl0LlxcbjE0MjM6XFx0XFx0XFx0ICovXFxuMTQyNDpcXHRcXHRcXHRpZiAobG9ja19jdHgtXFx1MDAzZW1tYXBfbG9ja2VkIFxcdTAwMjZcXHUwMDI2XFxuMTQyNTpcXHRcXHRcXHQgICAgbW1hcF9sb2NrX2lzX2NvbnRlbmRlZChsb2NrX2N0eC1cXHUwMDNlbW0pKSB7XFxuMTQyNjpcXHRcXHRcXHRcXHR1bmxvY2tfY3R4X21tKGxvY2tfY3R4KTtcXG4xNDI3OlxcdFxcdFxcdFxcdC8qXFxuMTQyODpcXHRcXHRcXHRcXHQgKiBFdmVuIHRob3VnaCB3ZSBwcmV2aW91c2x5IGZlbGwgYmFjayB0byBtbWFwIGxvY2ssXFxuMTQyOTpcXHRcXHRcXHRcXHQgKiB3ZSB0cnkgdGFraW5nIFZNQSBsb2NrIGZvciB0aGUgbmV4dCBWTUEsIHNpbmNlIGl0XFxuMTQzMDpcXHRcXHRcXHRcXHQgKiBtaWdodCBub3QgYmUgdW5kZXIgbW9kaWZpY2F0aW9uLiBJbiB0aGUgd29yc3QgY2FzZVxcbjE0MzE6XFx0XFx0XFx0XFx0ICogd2Ugd2lsbCBmYWxsIGJhY2sgdG8gbW1hcCBsb2NrIGFnYWluLlxcbjE0MzI6XFx0XFx0XFx0XFx0ICovXFxuMTQzMzpcXHRcXHRcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuMTQzNDpcXHRcXHRcXHRcXHRyZXNldF9sb2NrX2N0eChsb2NrX2N0eCk7XFxuMTQzNTpcXHRcXHRcXHRcXHQvKiBSZXN1bWUgZnJvbSB0aGUgbGFzdCBwb3NpdGlvbi4gKi9cXG4xNDM2OlxcdFxcdFxcdFxcdHBvcyA9IGxhc3Rfdm1hX2VuZDtcXG4xNDM3OlxcdFxcdFxcdFxcdHZtYV9pdGVyX2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZWl0ZXIsIG1tLCBwb3MpO1xcbjE0Mzg6XFx0XFx0XFx0fVxcbjE0Mzk6XFx0XFx0XFx0dm1hID0gcHJvY19nZXRfdm1hKG0sIFxcdTAwMjZwb3MpO1xcbjE0NDA6XFx0XFx0fVxcbjE0NDE6XFx0XFxuMTQ0MjpcXHRlbXB0eV9zZXQ6XFxuMTQ0MzpcXHRcXHRzaG93X3ZtYV9oZWFkZXJfcHJlZml4KG0sIHZtYV9zdGFydCwgbGFzdF92bWFfZW5kLCAwLCAwLCAwLCAwKTtcXG4xNDQ0OlxcdFxcdHNlcV9wYWQobSwgJyAnKTtcXG4xNDQ1OlxcdFxcdHNlcV9wdXRzKG0sIFxcXCJbcm9sbHVwXVxcXFxuXFxcIik7XFxuMTQ0NjpcXHRcXG4xNDQ3OlxcdFxcdF9fc2hvd19zbWFwKG0sIFxcdTAwMjZtc3MsIHRydWUpO1xcbjE0NDg6XFx0XFxuMTQ0OTpcXHRvdXRfdW5sb2NrOlxcbjE0NTA6XFx0XFx0aWYgKGxvY2tfY3R4LVxcdTAwM2VtbWFwX2xvY2tlZCkge1xcbjE0NTE6XFx0XFx0XFx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XFxuMTQ1MjpcXHRcXHR9IGVsc2Uge1xcbjE0NTM6XFx0XFx0XFx0dW5sb2NrX2N0eF92bWEobG9ja19jdHgpO1xcbjE0NTQ6XFx0XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuMTQ1NTpcXHRcXHR9XFxuMTQ1NjpcXHRcXHRyZWxlYXNlX3Rhc2tfbWVtcG9saWN5KHByaXYpO1xcbjE0NTc6XFx0XFx0bW1wdXQobW0pO1xcbjE0NTg6XFx0b3V0X3B1dF90YXNrOlxcbjE0NTk6XFx0XFx0cHV0X3Rhc2tfc3RydWN0KHByaXYtXFx1MDAzZXRhc2spO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOTozODoxOS4wMzg5ODgxNThaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDcyMDkwMTUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkV4YW1pbmluZyBGdXJ0aGVyIE1vZGlmaWNhdGlvbnMgaW4gYGZzL3Byb2MvdGFza19tbXUuY2AqKlxuXG5Pa2F5LCBzbyB3ZSd2ZSBhZGRyZXNzZWQgdGhlIHByaW1hcnkgaXNzdWUsIGJ1dCB3ZSBuZWVkIHRvIGVuc3VyZSB3ZSBoYXZlbid0IGludHJvZHVjZWQgYW55IHVuaW50ZW5kZWQgc2lkZSBlZmZlY3RzIG9yIG1pc3NlZCBhbnkgc3VidGxlIGludGVyYWN0aW9ucy4gTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byB0aGUgb3RoZXIgZnVuY3Rpb25zIHRoYXQgd2VyZSB0b3VjaGVkIHdpdGhpbiBgZnMvcHJvYy90YXNrX21tdS5jYC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZm9jdXMgbXkgYXR0ZW50aW9uIG9uIHRoZSBzZWN0aW9ucyBiZXR3ZWVuIGxpbmVzIDEyMCBhbmQgMzUwLCBhcyB3ZWxsIGFzIGxpbmVzIDYwMCB0aHJvdWdoIDc1MC4gVGhpcyBpcyB3aGVyZSB0aGUgY29kZSBjaGFuZ2VzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgYXJlIGxpa2VseSB0byBiZSBtb3N0IGNvbmNlbnRyYXRlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IG5hdHVyZSBvZiB0aGVzZSBtb2RpZmljYXRpb25zIGFuZCBob3cgdGhleSBwb3RlbnRpYWxseSBpbXBhY3QgdGhlIG92ZXJhbGwgc3RhYmlsaXR5IGFuZCBwZXJmb3JtYW5jZSBvZiB0aGUgc3lzdGVtLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGFueSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIG9yIGRldmlhdGlvbnMgZnJvbSBleHBlY3RlZCBiZWhhdmlvci4gVGhpcyBpcyBjcnVjaWFsIGZvciBhIGNvbXBsZXRlIGFuZCByb2J1c3QgYXNzZXNzbWVudCBvZiB0aGUgY2hhbmdlcy4gTGV0J3MgZGlnIGluLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjE1MiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6Mzg6MjQuNTExMDgwNDJaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDE5OTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvcHJvYy90YXNrX21tdS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzMCxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDEzMDpcXHR9XFxuIDEzMTpcXHQjZW5kaWZcXG4gMTMyOlxcdFxcbiAxMzM6XFx0c3RhdGljIHZvaWQgdW5sb2NrX2N0eF9tbShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcXG4gMTM0OlxcdHtcXG4gMTM1OlxcdFxcdG1tYXBfcmVhZF91bmxvY2sobG9ja19jdHgtXFx1MDAzZW1tKTtcXG4gMTM2OlxcdFxcdGxvY2tfY3R4LVxcdTAwM2VtbWFwX2xvY2tlZCA9IGZhbHNlO1xcbiAxMzc6XFx0fVxcbiAxMzg6XFx0XFxuIDEzOTpcXHRzdGF0aWMgdm9pZCB1bmxvY2tfY3R4X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcXG4gMTQwOlxcdHtcXG4gMTQxOlxcdFxcdGlmIChsb2NrX2N0eC1cXHUwMDNlbG9ja2VkX3ZtYSkge1xcbiAxNDI6XFx0XFx0XFx0dm1hX2VuZF9yZWFkKGxvY2tfY3R4LVxcdTAwM2Vsb2NrZWRfdm1hKTtcXG4gMTQzOlxcdFxcdFxcdGxvY2tfY3R4LVxcdTAwM2Vsb2NrZWRfdm1hID0gTlVMTDtcXG4gMTQ0OlxcdFxcdH1cXG4gMTQ1OlxcdH1cXG4gMTQ2OlxcdFxcbiAxNDc6XFx0c3RhdGljIHZvaWQgcmVzZXRfbG9ja19jdHgoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXFxuIDE0ODpcXHR7XFxuIDE0OTpcXHRcXHRsb2NrX2N0eC1cXHUwMDNlbG9ja2VkX3ZtYSA9IE5VTEw7XFxuIDE1MDpcXHRcXHRsb2NrX2N0eC1cXHUwMDNlbW1hcF9sb2NrZWQgPSBmYWxzZTtcXG4gMTUxOlxcdH1cXG4gMTUyOlxcdFxcbiAxNTM6XFx0c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZ2V0X25leHRfdm1hKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcXG4gMTU0OlxcdFxcdFxcdFxcdFxcdFxcdCAgIGxvZmZfdCBsYXN0X3BvcylcXG4gMTU1OlxcdHtcXG4gMTU2OlxcdFxcdHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4ID0gXFx1MDAyNnByaXYtXFx1MDAzZWxvY2tfY3R4O1xcbiAxNTc6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuIDE1ODpcXHRcXG4gMTU5OlxcdFxcdGlmIChsb2NrX2N0eC1cXHUwMDNlbW1hcF9sb2NrZWQpXFxuIDE2MDpcXHRcXHRcXHRyZXR1cm4gdm1hX25leHQoXFx1MDAyNnByaXYtXFx1MDAzZWl0ZXIpO1xcbiAxNjE6XFx0XFxuIDE2MjpcXHRcXHR1bmxvY2tfY3R4X3ZtYShsb2NrX2N0eCk7XFxuIDE2MzpcXHRcXHR2bWEgPSBsb2NrX25leHRfdm1hKGxvY2tfY3R4LVxcdTAwM2VtbSwgXFx1MDAyNnByaXYtXFx1MDAzZWl0ZXIsIGxhc3RfcG9zKTtcXG4gMTY0OlxcdFxcdGlmICghSVNfRVJSX09SX05VTEwodm1hKSlcXG4gMTY1OlxcdFxcdFxcdGxvY2tfY3R4LVxcdTAwM2Vsb2NrZWRfdm1hID0gdm1hO1xcbiAxNjY6XFx0XFxuIDE2NzpcXHRcXHRyZXR1cm4gdm1hO1xcbiAxNjg6XFx0fVxcbiAxNjk6XFx0XFxuIDE3MDpcXHRzdGF0aWMgYm9vbCBmYWxsYmFja190b19tbWFwX2xvY2soc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxcbiAxNzE6XFx0XFx0XFx0XFx0XFx0XFx0IGxvZmZfdCBwb3MpXFxuIDE3MjpcXHR7XFxuIDE3MzpcXHRcXHRzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCA9IFxcdTAwMjZwcml2LVxcdTAwM2Vsb2NrX2N0eDtcXG4gMTc0OlxcdFxcbiAxNzU6XFx0XFx0aWYgKGxvY2tfY3R4LVxcdTAwM2VtbWFwX2xvY2tlZClcXG4gMTc2OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4gMTc3OlxcdFxcbiAxNzg6XFx0XFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIDE3OTpcXHRcXHRtbWFwX3JlYWRfbG9jayhsb2NrX2N0eC1cXHUwMDNlbW0pO1xcbiAxODA6XFx0XFx0LyogUmVpbml0aWFsaXplIHRoZSBpdGVyYXRvciBhZnRlciB0YWtpbmcgbW1hcF9sb2NrICovXFxuIDE4MTpcXHRcXHR2bWFfaXRlcl9zZXQoXFx1MDAyNnByaXYtXFx1MDAzZWl0ZXIsIHBvcyk7XFxuIDE4MjpcXHRcXHRsb2NrX2N0eC1cXHUwMDNlbW1hcF9sb2NrZWQgPSB0cnVlO1xcbiAxODM6XFx0XFxuIDE4NDpcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gMTg1OlxcdH1cXG4gMTg2OlxcdFxcbiAxODc6XFx0c3RhdGljIHZvaWQgZHJvcF9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbiAxODg6XFx0e1xcbiAxODk6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxcbiAxOTA6XFx0XFx0XFx0cmV0dXJuO1xcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHRyY3VfcmVhZF91bmxvY2soKTtcXG4gMTkzOlxcdH1cXG4gMTk0OlxcdFxcbiAxOTU6XFx0c3RhdGljIHZvaWQgcmVhY3F1aXJlX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXFxuIDE5NjpcXHR7XFxuIDE5NzpcXHRcXHRpZiAocHJpdi1cXHUwMDNlbG9ja19jdHgubW1hcF9sb2NrZWQpXFxuIDE5ODpcXHRcXHRcXHRyZXR1cm47XFxuIDE5OTpcXHRcXG4gMjAwOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMjAxOlxcdFxcdC8qIFJlaW5pdGlhbGl6ZSB0aGUgaXRlcmF0b3IuICovXFxuIDIwMjpcXHRcXHR2bWFfaXRlcl9zZXQoXFx1MDAyNnByaXYtXFx1MDAzZWl0ZXIsIHByaXYtXFx1MDAzZWxvY2tfY3R4LmxvY2tlZF92bWEtXFx1MDAzZXZtX2VuZCk7XFxuIDIwMzpcXHR9XFxuIDIwNDpcXHRcXG4gMjA1OlxcdHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByb2NfZ2V0X3ZtYShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcHBvcylcXG4gMjA2OlxcdHtcXG4gMjA3OlxcdFxcdHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tXFx1MDAzZXByaXZhdGU7XFxuIDIwODpcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcXG4gMjA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOTozODoyNC41MTEzMjQ3NjlaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NDM1ODc4MDM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgYHRhc2tfbW11LmNgIGZvciBGdXp6aW5nKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIHdoYXQgSSdtIHNlZWluZywgYHRhc2tfbW11LmNgIGlzIHRoZSBoZWFydCBvZiB0aGUga2VybmVsJ3MgaW50ZXJhY3Rpb24gd2l0aCB0aGUgdmlydHVhbCBtZW1vcnkgc3lzdGVtIHZpYSBwcm9jZnMuIFNwZWNpZmljYWxseSwgaXQncyBoYW5kbGluZyB0aGluZ3MgbGlrZSBgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL21hcHNgLCBgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3NtYXBzYCwgYW5kIHRoZSBtb3JlIHJlY2VudCBgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3NtYXBzX3JvbGx1cGAsIGAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvY2xlYXJfcmVmc2AsIGAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvcGFnZW1hcGAsIGAvcHJvYy9cdTAwM2NwaWRcdTAwM2UvbnVtYV9tYXBzYCwgYW5kIHRoZSBgUFJPQ01BUF9RVUVSWWAgaW9jdGwuIFRoaXMgc2NyZWFtcyAqY29yZSoga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBWaXJ0dWFsIEZpbGUgU3lzdGVtIChWRlMpIHByb2NmcyBjb2RlLlxuXG5UaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBpcyB0aGlzIHJlYWNoYWJsZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHM/IFRoZSBhbnN3ZXIgaXMgYSByZXNvdW5kaW5nIHllcy4gRmlsZXMgbGlrZSBgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3NtYXBzX3JvbGx1cGAsIGAvcHJvYy9cdTAwM2NwaWRcdTAwM2Uvc21hcHNgLCBhbmQgYC9wcm9jL1x1MDAzY3BpZFx1MDAzZS9tYXBzYCBhcmUgY29tcGxldGVseSBzdGFuZGFyZCBwcm9jZnMgZW50cmllcyB0aGF0IHVzZXJzcGFjZSB0b29scyByZWd1bGFybHkgdXNlLiBUaGlzIGluc3RhbnRseSBmbGFncyBpdCBhcyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZy5cblxuTm93LCB0aGUgY29kZSBjaGFuZ2VzIGluIGBzaG93X3NtYXBzX3JvbGx1cGAgYXJlIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcuIEl0IGxvb2tzIGxpa2UgdGhleSd2ZSBtb3ZlZCBmcm9tIGdyYWJiaW5nIHRoZSBgbW1hcF9yZWFkX2xvY2tgIHVwZnJvbnQgdG8gdXNpbmcgUkNVLWJhc2VkIHBlci1WTUEgbG9ja3MuIFRoaXMgaW50cm9kdWNlcyBSQ1UgaW50byB0aGUgZXF1YXRpb24sIHdoaWNoIGNhbiBhbHdheXMgbGVhZCB0byBpbnRlcmVzdGluZyBjb25jdXJyZW5jeSBidWdzLiBUaGV5J3JlIHVzaW5nIGBwcm9jX2dldF92bWFgLCBgdm1hX2VuZF9yZWFkYCwgYHNtYXBfZ2F0aGVyX3N0YXRzYCwgZHJvcHBpbmcgYW5kIHJldGFraW5nIFJDVS9tbWFwIGxvY2sgb24gY29udGVudGlvbiwgZXRjLiBUaGUgbG9ja2luZyBzdHJhdGVneSBoYXMgc2lnbmlmaWNhbnRseSBjaGFuZ2VkLlxuXG5GdXJ0aGVybW9yZSwgYHNtYXBfZ2F0aGVyX3N0YXRzYCBpcyBhbHRlcmluZyBgd2Fsa19wYWdlX3JhbmdlX3ZtYWAgYW5kIHN0YXJ0IGJvdW5kIGhhbmRsaW5nLiBXZSBhbHNvIHNlZSBhZGp1c3RtZW50cyB0byBgZG9fcHJvY21hcF9xdWVyeWAgbG9ja2luZyBoZWxwZXJzLCBhbG9uZyB3aXRoIHVuLWlubGluaW5nIG9mIHNldmVyYWwgc3RhdGljIGZ1bmN0aW9ucyBsaWtlIGBwdGVfaXNfcGlubmVkYCwgYGNsZWFyX3NvZnRfZGlydHlgLCBldGMuXG5cblRoZSBjcml0aWNhbCB0YWtlYXdheSBpcyB0aGF0IHRoZXNlIGNoYW5nZXMgYXJlIHRvdWNoaW5nICpyZWFjaGFibGUqIGNvcmUgZXhlY3V0YWJsZSBjb2RlIGluIG1tL3Byb2NmcyBhbmQgbW9kaWZ5aW5nIGZ1bmRhbWVudGFsIHN5bmNocm9uaXphdGlvbiBhbmQgbG9ja2luZyBhcyB3ZWxsIGFzIGl0ZXJhdGlvbiBsb2dpYyB3aXRoaW4gYHNob3dfc21hcHNfcm9sbHVwYCBhbmQgYHNtYXBfZ2F0aGVyX3N0YXRzYC4gVGhpcyBpcyBhIGNsYXNzaWMgcmVjaXBlIGZvciBpbnRyb2R1Y2luZyBzdWJ0bGUgY29uY3VycmVuY3kgdnVsbmVyYWJpbGl0aWVzIG9yIG1lbW9yeSBjb3JydXB0aW9uIGJ1Z3MuIFRoZXJlZm9yZSwgd2l0aG91dCBhIGRvdWJ0OiBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cbk15IG5leHQgc3RlcCBpcyB0byBkZXRlcm1pbmUgYW55IGRlcGVuZGVuY2llczogSSBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMuIERvZXMgYHNtYXBzX3JvbGx1cGAgaGF2ZSBhbnkgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXM/IEknbGwgY2hlY2sgS2NvbmZpZyBmb3IgYFBST0NfUEFHRV9NT05JVE9SYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2MDYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOTozODoyOC45NDcyMDYxMTdaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjU3NzQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNtYXBzX3JvbGx1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9wcm9jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL2Jhc2UuYz0zMjgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgcGlkX2VudHJ5IHRnaWRfYmFzZV9zdHVmZltdID0ge1xcbi0tXFxuZnMvcHJvYy9iYXNlLmMtMzMyNC1cXHRSRUcoXFxcInNtYXBzXFxcIiwgICAgICBTX0lSVUdPLCBwcm9jX3BpZF9zbWFwc19vcGVyYXRpb25zKSxcXG5mcy9wcm9jL2Jhc2UuYzozMzI1OlxcdFJFRyhcXFwic21hcHNfcm9sbHVwXFxcIiwgU19JUlVHTywgcHJvY19waWRfc21hcHNfcm9sbHVwX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jLTMzMjYtXFx0UkVHKFxcXCJwYWdlbWFwXFxcIiwgICAgU19JUlVTUiwgcHJvY19wYWdlbWFwX29wZXJhdGlvbnMpLFxcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MzY0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0aWRfYmFzZV9zdHVmZltdID0ge1xcbi0tXFxuZnMvcHJvYy9iYXNlLmMtMzY3OS1cXHRSRUcoXFxcInNtYXBzXFxcIiwgICAgIFNfSVJVR08sIHByb2NfcGlkX3NtYXBzX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jOjM2ODA6XFx0UkVHKFxcXCJzbWFwc19yb2xsdXBcXFwiLCBTX0lSVUdPLCBwcm9jX3BpZF9zbWFwc19yb2xsdXBfb3BlcmF0aW9ucyksXFxuZnMvcHJvYy9iYXNlLmMtMzY4MS1cXHRSRUcoXFxcInBhZ2VtYXBcXFwiLCAgICBTX0lSVVNSLCBwcm9jX3BhZ2VtYXBfb3BlcmF0aW9ucyksXFxuLS1cXG5mcy9wcm9jL2ludGVybmFsLmg9NDA3PWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfcGlkX3NtYXBzX29wZXJhdGlvbnM7XFxuZnMvcHJvYy9pbnRlcm5hbC5oOjQwODpleHRlcm4gY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BpZF9zbWFwc19yb2xsdXBfb3BlcmF0aW9ucztcXG5mcy9wcm9jL2ludGVybmFsLmgtNDA5LWV4dGVybiBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHByb2NfY2xlYXJfcmVmc19vcGVyYXRpb25zO1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTEyNTA9c3RhdGljIHZvaWQgc21hcF9nYXRoZXJfc3RhdHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTEyOTYtXFxuZnMvcHJvYy90YXNrX21tdS5jOjEyOTc6LyogU2hvdyB0aGUgY29udGVudHMgY29tbW9uIGZvciBzbWFwcyBhbmQgc21hcHNfcm9sbHVwICovXFxuZnMvcHJvYy90YXNrX21tdS5jLTEyOTgtc3RhdGljIHZvaWQgX19zaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCBjb25zdCBzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgKm1zcyxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0xMzA1LVxcdFxcdC8qXFxuZnMvcHJvYy90YXNrX21tdS5jOjEzMDY6XFx0XFx0ICogVGhlc2UgYXJlIG1lYW5pbmdmdWwgb25seSBmb3Igc21hcHNfcm9sbHVwLCBvdGhlcndpc2UgdHdvIG9mXFxuZnMvcHJvYy90YXNrX21tdS5jLTEzMDctXFx0XFx0ICogdGhlbSBhcmUgemVybywgYW5kIHRoZSBvdGhlciBvbmUgaXMgdGhlIHNhbWUgYXMgUHNzLlxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTEzMzg9c3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTEzNjUtXFxuZnMvcHJvYy90YXNrX21tdS5jOjEzNjY6c3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuZnMvcHJvYy90YXNrX21tdS5jLTEzNjcte1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jPTE0NzM9c3RhdGljIGludCBwaWRfc21hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0xNDc3LVxcbmZzL3Byb2MvdGFza19tbXUuYzoxNDc4OnN0YXRpYyBpbnQgc21hcHNfcm9sbHVwX29wZW4oc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGZpbGUgKmZpbGUpXFxuZnMvcHJvYy90YXNrX21tdS5jLTE0Nzkte1xcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTE0ODYtXFxuZnMvcHJvYy90YXNrX21tdS5jOjE0ODc6XFx0cmV0ID0gc2luZ2xlX29wZW4oZmlsZSwgc2hvd19zbWFwc19yb2xsdXAsIHByaXYpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0xNDg4LVxcdGlmIChyZXQpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTUwNi1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MTUwNzpzdGF0aWMgaW50IHNtYXBzX3JvbGx1cF9yZWxlYXNlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBmaWxlICpmaWxlKVxcbmZzL3Byb2MvdGFza19tbXUuYy0xNTA4LXtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0xNTE5PWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19waWRfc21hcHNfb3BlcmF0aW9ucyA9IHtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0xNTI1LVxcbmZzL3Byb2MvdGFza19tbXUuYzoxNTI2OmNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19waWRfc21hcHNfcm9sbHVwX29wZXJhdGlvbnMgPSB7XFxuZnMvcHJvYy90YXNrX21tdS5jOjE1Mjc6XFx0Lm9wZW5cXHRcXHQ9IHNtYXBzX3JvbGx1cF9vcGVuLFxcbmZzL3Byb2MvdGFza19tbXUuYy0xNTI4LVxcdC5yZWFkXFx0XFx0PSBzZXFfcmVhZCxcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTUyOS1cXHQubGxzZWVrXFx0XFx0PSBzZXFfbHNlZWssXFxuZnMvcHJvYy90YXNrX21tdS5jOjE1MzA6XFx0LnJlbGVhc2VcXHQ9IHNtYXBzX3JvbGx1cF9yZWxlYXNlLFxcbmZzL3Byb2MvdGFza19tbXUuYy0xNTMxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjM4OjI4Ljk5NjQ3MzY0N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxNzU3NDIyMDAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGEgZmlyc3QtcGVyc29uIGV4cGVydCBzdW1tYXJ5OlxuXG4qKkRpZ2dpbmcgaW50byBUYXNrIE1NVSBDb25maWd1cmF0aW9uKipcblxuUmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29tcGlsYXRpb24gY29uZGl0aW9ucyBmb3IgYHRhc2tfbW11LmNgLiBUaGUgbW9zdCBkaXJlY3Qgcm91dGUgdG8gdGhhdCBpbmZvcm1hdGlvbiBpcywgb2YgY291cnNlLCB0aGUgYGZzL3Byb2MvTWFrZWZpbGVgLiBUaGF0J3Mgd2hlcmUgdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gbGF5cyBvdXQgdGhlIHJ1bGVzIGZvciB3aGljaCBzb3VyY2UgZmlsZXMgZ2V0IGNvbXBpbGVkIGFuZCBsaW5rZWQsIGFuZCB1bmRlciB3aGF0IGNvbmRpdGlvbnMuIFNwZWNpZmljYWxseSwgSSdtIGV4cGVjdGluZyB0byBmaW5kIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMgYmFzZWQgb24gdGhlIHVzdWFsIHN1c3BlY3RzIOKAkyB0aG9zZSBgQ09ORklHX2Agb3B0aW9ucyB0aGF0IGdvdmVybiB2YXJpb3VzIGtlcm5lbCBmZWF0dXJlcy4gSSdtIGxvb2tpbmcgZm9yIHRoZSBwcmVjaXNlIGNvbmZpZ3VyYXRpb24ga25vYnMgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSB0aGUgaW5jbHVzaW9uIG9mIGB0YXNrX21tdS5jYCBpbiB0aGUgZmluYWwgYnVpbGQuIFRoaXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZSBvZiB3aGVuIGFuZCB3aHkgdGhlIGtlcm5lbCBpbmNvcnBvcmF0ZXMgdGhhdCBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTc0NCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjM4OjMwLjc1Mzg5ODQ1OFoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIyMzU3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGFza19tbXVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvcHJvYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvcHJvYy9NYWtlZmlsZT02PW9iai15ICAgKz0gcHJvYy5vXFxuZnMvcHJvYy9NYWtlZmlsZS03LVxcbmZzL3Byb2MvTWFrZWZpbGU6ODpDRkxBR1NfdGFza19tbXUub1xcdCs9IC1Xbm8tb3ZlcnJpZGUtaW5pdFxcbmZzL3Byb2MvTWFrZWZpbGUtOS1wcm9jLXlcXHRcXHRcXHQ6PSBub21tdS5vIHRhc2tfbm9tbXUub1xcbmZzL3Byb2MvTWFrZWZpbGU6MTA6cHJvYy0kKENPTkZJR19NTVUpXFx0Oj0gdGFza19tbXUub1xcbmZzL3Byb2MvTWFrZWZpbGUtMTEtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjM4OjMwLjgwNjEzOTQ0N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxOTIzNTM1NTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipDaGVja2luZyBLZXJuZWwgQ29uZmlndXJhdGlvbiBPcHRpb25zKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIGEgY291cGxlIG9mIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYmVmb3JlIEkgcHJvY2VlZC4gTGV0IG1lIHN0YXJ0IGJ5IGNoZWNraW5nIGBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JgIGFuZCBgQ09ORklHX1BST0NfRlNgLiBUaGUgbW9zdCBsaWtlbHkgcGxhY2UgdG8gZmluZCB0aG9zZSB3b3VsZCBiZSB3aXRoaW4gYGZzL3Byb2MvS2NvbmZpZ2AuIEknbGwgbmVlZCB0byBjb25maXJtIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUsIGFuZCBtYWtlIHN1cmUgdGhhdCB0aGV5IGFyZSBjb3JyZWN0bHkgZW5hYmxlZCBpbiBteSBjdXJyZW50IGtlcm5lbCBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoZXNlIGZsYWdzIGFuZCBob3cgdGhleSBhcmUgdXNlZCB3aXRoaW4gdGhlIGJyb2FkZXIgY29udGV4dCBvZiB0aGUgcHJvYyBmaWxlc3lzdGVtLiBJdCBpcyBpbXBvcnRhbnQgdG8ga25vdyB3aGljaCBmZWF0dXJlcyBhcmUgZW5hYmxlZCwgc2luY2UgdGhpcyBkaXJlY3RseSBpbXBhY3RzIHRoZSBhdmFpbGFiaWxpdHkgb2YgdmFyaW91cyBtZXRyaWNzIGFuZCBkZWJ1ZyBjYXBhYmlsaXRpZXMgaW4gdGhlIHByb2MgZmlsZXN5c3RlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxMDQsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOTozODozMi43Mjk2Nzk1MjZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2Njc1NjM4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlBST0NfUEFHRV9NT05JVE9SXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL0tjb25maWc9ODM9Y29uZmlnIFNZU0NUTFxcbi0tXFxuZnMvcHJvYy9LY29uZmlnLTEwMC1cXG5mcy9wcm9jL0tjb25maWc6MTAxOmNvbmZpZyBQUk9DX1BBR0VfTU9OSVRPUlxcbmZzL3Byb2MvS2NvbmZpZy0xMDItIFxcdGRlZmF1bHQgeVxcbi0tXFxuZnMvcHJvYy9NYWtlZmlsZT0zNj1wcm9jLSQoQ09ORklHX1BSSU5USylcXHQrPSBrbXNnLm9cXG5mcy9wcm9jL01ha2VmaWxlOjM3OnByb2MtJChDT05GSUdfUFJPQ19QQUdFX01PTklUT1IpXFx0Kz0gcGFnZS5vXFxuZnMvcHJvYy9NYWtlZmlsZS0zOC1wcm9jLSQoQ09ORklHX0JPT1RfQ09ORklHKVxcdCs9IGJvb3Rjb25maWcub1xcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MzI4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0Z2lkX2Jhc2Vfc3R1ZmZbXSA9IHtcXG4tLVxcbmZzL3Byb2MvYmFzZS5jLTMzMjEtXFx0UkVHKFxcXCJtb3VudHN0YXRzXFxcIiwgU19JUlVTUiwgcHJvY19tb3VudHN0YXRzX29wZXJhdGlvbnMpLFxcbmZzL3Byb2MvYmFzZS5jOjMzMjI6I2lmZGVmIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUlxcbmZzL3Byb2MvYmFzZS5jLTMzMjMtXFx0UkVHKFxcXCJjbGVhcl9yZWZzXFxcIiwgU19JV1VTUiwgcHJvY19jbGVhcl9yZWZzX29wZXJhdGlvbnMpLFxcbi0tXFxuZnMvcHJvYy9iYXNlLmM9MzY0Mj1zdGF0aWMgY29uc3Qgc3RydWN0IHBpZF9lbnRyeSB0aWRfYmFzZV9zdHVmZltdID0ge1xcbi0tXFxuZnMvcHJvYy9iYXNlLmMtMzY3Ni1cXHRSRUcoXFxcIm1vdW50aW5mb1xcXCIsICBTX0lSVUdPLCBwcm9jX21vdW50aW5mb19vcGVyYXRpb25zKSxcXG5mcy9wcm9jL2Jhc2UuYzozNjc3OiNpZmRlZiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1JcXG5mcy9wcm9jL2Jhc2UuYy0zNjc4LVxcdFJFRyhcXFwiY2xlYXJfcmVmc1xcXCIsIFNfSVdVU1IsIHByb2NfY2xlYXJfcmVmc19vcGVyYXRpb25zKSxcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz03NTY9Y29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBwcm9jX3BpZF9tYXBzX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtNzgzLVxcbmZzL3Byb2MvdGFza19tbXUuYzo3ODQ6I2lmZGVmIENPTkZJR19QUk9DX1BBR0VfTU9OSVRPUlxcbmZzL3Byb2MvdGFza19tbXUuYy03ODUtc3RydWN0IG1lbV9zaXplX3N0YXRzIHtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0zMTcwPWNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcHJvY19wYWdlbWFwX29wZXJhdGlvbnMgPSB7XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzE3Ny19O1xcbmZzL3Byb2MvdGFza19tbXUuYzozMTc4OiNlbmRpZiAvKiBDT05GSUdfUFJPQ19QQUdFX01PTklUT1IgKi9cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMzE3OS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6Mzg6MzIuODA2MzU5OTM0WiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMyMjgwOTI5MDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIEtjb25maWcgQ29uZmlndXJhdGlvbiBmb3IgQ29udGV4dCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHNvbWV0aGluZyByZWxhdGVkIHRvIHRoZSBmaWxlIHN5c3RlbSdzIGludGVyYWN0aW9uIHdpdGggcHJvY2Vzc2VzLCByaWdodD8gVGhlIGBmcy9wcm9jYCBwYXJ0IGFscmVhZHkgZ2l2ZXMgbWUgYSBwcmV0dHkgZ29vZCBoaW50IHRoYXQgd2UncmUgdGFsa2luZyBhYm91dCB0aGUgYC9wcm9jYCBmaWxlc3lzdGVtIGFuZCBpdHMga2VybmVsIGNvbmZpZ3VyYXRpb24uIE15IGluc3RpbmN0IHNheXMgYSBwb3RlbnRpYWwgaXNzdWUgY291bGQgYmUgcmVsYXRlZCB0byBzb21lIGNvbnRyb2wgb3IgZmVhdHVyZSB3aGljaCBpcyBub3QgZXhwb3NlZCB0aGUgc3RhbmRhcmQgd2F5LCBhbmQgaXMgZXhwb3NlZCwgaW5zdGVhZCwgYnkgYSBoaWRkZW4gY29uZmlndXJhdGlvbiBvcHRpb24uIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgYGZzL3Byb2MvS2NvbmZpZ2AgbmVhciBsaW5lIDEwMC4gR29pbmcgZGlyZWN0bHkgdG8gdGhhdCBsb2NhdGlvbiwgSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgY29uZGl0aW9uYWwgZGVmaW5pdGlvbiByZWxhdGVkIHRvIHRoZSBzcGVjaWZpYyBmZWF0dXJlIEknbSB0aGlua2luZyBhYm91dCwgb3IgcGVyaGFwcyBzb21lIHN1cnJvdW5kaW5nIGNvbnRleHQgdGhhdCBwcm92aWRlcyBjbHVlcy4gSSBtaWdodCBiZSBsb29raW5nIGZvciBhIGRlcGVuZGVuY3kgdGhhdCBJJ20gbWlzc2luZywgYSBwb3RlbnRpYWxseSBkaXNhYmxlZCBvcHRpb24sIG9yIGEgZ2VuZXJhbCBhcmVhIG9mIGNvbmNlcm4gd2l0aGluIHRoZSBwcm9jIGZpbGVzeXN0ZW0gdGhhdCBsaW5lcyB1cCB3aXRoIHRoZSBjdXJyZW50IGNvbnRleHQuIExldCdzIHNlZSB3aGF0IHRoZSBLY29uZmlnIGZpbGUgdGVsbHMgdXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTI4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6Mzg6MzYuMDM0NDU0OTkyWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc3MDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImZzL3Byb2MvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiA5NSxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICA5NTpcXHRcXHQgIG9wdGlvbiB3aWxsIGVubGFyZ2UgdGhlIGtlcm5lbCBieSBhdCBsZWFzdCA4IEtCLlxcbiAgOTY6XFx0XFxuICA5NzpcXHRcXHQgIEFzIGl0IGlzIGdlbmVyYWxseSBhIGdvb2QgdGhpbmcsIHlvdSBzaG91bGQgc2F5IFkgaGVyZSB1bmxlc3NcXG4gIDk4OlxcdFxcdCAgYnVpbGRpbmcgYSBrZXJuZWwgZm9yIGluc3RhbGwvcmVzY3VlIGRpc2tzIG9yIHlvdXIgc3lzdGVtIGlzIHZlcnlcXG4gIDk5OlxcdFxcdCAgbGltaXRlZCBpbiBtZW1vcnkuXFxuIDEwMDpcXHRcXG4gMTAxOlxcdGNvbmZpZyBQUk9DX1BBR0VfTU9OSVRPUlxcbiAxMDI6XFx0IFxcdGRlZmF1bHQgeVxcbiAxMDM6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTIFxcdTAwMjZcXHUwMDI2IE1NVVxcbiAxMDQ6XFx0XFx0Ym9vbCBcXFwiRW5hYmxlIC9wcm9jIHBhZ2UgbW9uaXRvcmluZ1xcXCIgaWYgRVhQRVJUXFxuIDEwNTpcXHQgXFx0aGVscFxcbiAxMDY6XFx0XFx0ICBWYXJpb3VzIC9wcm9jIGZpbGVzIGV4aXN0IHRvIG1vbml0b3IgcHJvY2VzcyBtZW1vcnkgdXRpbGl6YXRpb246XFxuIDEwNzpcXHRcXHQgIC9wcm9jL3BpZC9zbWFwcywgL3Byb2MvcGlkL2NsZWFyX3JlZnMsIC9wcm9jL3BpZC9wYWdlbWFwLFxcbiAxMDg6XFx0XFx0ICAvcHJvYy9rcGFnZWNvdW50LCBhbmQgL3Byb2Mva3BhZ2VmbGFncy4gRGlzYWJsaW5nIHRoZXNlXFxuIDEwOTpcXHRcXHQgIGludGVyZmFjZXMgd2lsbCByZWR1Y2UgdGhlIHNpemUgb2YgdGhlIGtlcm5lbCBieSBhcHByb3hpbWF0ZWx5IDRrYi5cXG4gMTEwOlxcdFxcbiAxMTE6XFx0Y29uZmlnIFBST0NfQ0hJTERSRU5cXG4gMTEyOlxcdFxcdGJvb2wgXFxcIkluY2x1ZGUgL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2UvdGFzay9cXHUwMDNjdGlkXFx1MDAzZS9jaGlsZHJlbiBmaWxlXFxcIlxcbiAxMTM6XFx0XFx0ZGVwZW5kcyBvbiBQUk9DX0ZTXFxuIDExNDpcXHRcXHRkZWZhdWx0IG5cXG4gMTE1OlxcdFxcdGhlbHBcXG4gMTE2OlxcdFxcdCAgUHJvdmlkZXMgYSBmYXN0IHdheSB0byByZXRyaWV2ZSBmaXJzdCBsZXZlbCBjaGlsZHJlbiBwaWRzIG9mIGEgdGFzay4gU2VlXFxuIDExNzpcXHRcXHQgIFxcdTAwM2NmaWxlOkRvY3VtZW50YXRpb24vZmlsZXN5c3RlbXMvcHJvYy5yc3RcXHUwMDNlIGZvciBtb3JlIGluZm9ybWF0aW9uLlxcbiAxMTg6XFx0XFxuIDExOTpcXHRcXHQgIFNheSBZIGlmIHlvdSBhcmUgcnVubmluZyBhbnkgdXNlci1zcGFjZSBzb2Z0d2FyZSB3aGljaCB0YWtlcyBiZW5lZml0IGZyb21cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6Mzg6MzYuMDM0NTMzOTQyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjU0Mjc3Njc3NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgYSBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXQqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIGFuZCBpdCBzZWVtcyBsaWtlIGBQUk9DX0ZTYCwgYFBST0NfUEFHRV9NT05JVE9SYCwgYW5kIHBvc3NpYmx5IGBNTVVgIGFyZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBhcmVhIEknbSBjb25zaWRlcmluZy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGtleSBmdW5jdGlvbnMgaGVyZS5cblxuTGV0J3MgY2FyZWZ1bGx5IGV4YW1pbmUgYEZvY3VzU3ltYm9sc2AgdG8gY29uZmlybSBteSB0aGlua2luZy4gSXQgbG9va3MgbGlrZSB0aGUgZnVuY3Rpb25zIHRoYXQgaGF2ZSBiZWVuIG1vZGlmaWVkIHdpdGhpbiBgZnMvcHJvYy90YXNrX21tdS5jYCBhcmUgd2hhdCBJIG5lZWQgdG8gY29uY2VudHJhdGUgb24uIFNwZWNpZmljYWxseSwgSSBzZWUgY2hhbmdlcyB0bzpcblxuKiAgIGBzaG93X3NtYXBzX3JvbGx1cGA6IFRoZSBtYWluIGxvZ2ljIGhlcmUgaGFzIGJlZW4gcmVmYWN0b3JlZCwgc3BlY2lmaWNhbGx5IGludm9sdmluZyBWTUEgbG9ja3MsIGBwcm9jX2dldF92bWFgLCBhbmQgcG90ZW50aWFsIGNvbnRlbnRpb24gcmV0cnkgbWVjaGFuaXNtcy5cbiogICBgc21hcF9nYXRoZXJfc3RhdHNgOiBUaGlzIG9uZSBoYXMgc2VlbiBjaGFuZ2VzIHRvIGl0cyBib3VuZHMgY2hlY2ssIHBhcnRpYWwgVk1BIGdhdGhlcmluZywgYW5kIHRoZSBjYWxsIHRvIGB3YWxrX3BhZ2VfcmFuZ2Vfdm1hYC5cbiogICBgc2hvd19zbWFwYDogVGhpcyBhY3RzIGFzIGEgY2FsbGVyIHRvIGBzbWFwX2dhdGhlcl9zdGF0c2AgYW5kIHVzZXMgYHZtYS1cdTAwM2V2bV9zdGFydGAuXG4qICAgYG1fc3RhcnRgLCBgbV9zdG9wYDogU2ltcGxpZmllZCBsb2NraW5nIGxvZ2ljLlxuKiAgIGBkb19wcm9jbWFwX3F1ZXJ5YDogVGhpcyBoYXMgc2ltcGxpZmllZCB0ZWFyZG93bi9sb2NrIGxvZ2ljLlxuKiAgIFRoZXJlJ3MgYWxzbyBzb21lIHN1cHBvcnRpbmcgZnVuY3Rpb25zIHN1Y2ggYXMgYGZhbGxiYWNrX3RvX21tYXBfbG9ja2AsIGBkcm9wX3JjdWAsIGByZWFjcXVpcmVfcmN1YCwgYHVubG9ja19jdHhfbW1gLCBgdW5sb2NrX2N0eF92bWFgLCBgcmVzZXRfbG9ja19jdHhgLCBgY2xlYXJfc29mdF9kaXJ0eWAsIGBjbGVhcl9zb2Z0X2RpcnR5X3BtZGAsIGBwdGVfaXNfcGlubmVkYCBhbmQgYG1ha2VfcG1lYCAodW4taW5saW5lZCkuXG5cbk15IG5leHQgc3RlcCBpcyB0byBjaG9vc2UgdGhlIGxlYXN0IHViaXF1aXRvdXMgZnVuY3Rpb25zIHRoYXQgYXJlIHJlbGF0ZWQgdG8gc3BlY2lmaWMgZmVhdHVyZXMuIExvb2tpbmcgYXQgdGhhdCBsaXN0LCBJJ20gZmFpcmx5IGNlcnRhaW4gdGhlIGZvbGxvd2luZyBmaXQgdGhlIGJpbGwsIGJhc2VkIG9uIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZXNlIHBhcnRzIG9mIHRoZSBrZXJuZWwgdXN1YWxseSB3b3JrOlxuXG4qICAgYHNob3dfc21hcHNfcm9sbHVwYFxuKiAgIGBzbWFwX2dhdGhlcl9zdGF0c2BcbiogICBgc2hvd19zbWFwYFxuKiAgIGBkb19wcm9jbWFwX3F1ZXJ5YFxuXG5Ob3csIGFtIEkgcmlnaHQ/IEFyZSB0aGVzZSByZWFsbHkgbm9uLXViaXF1aXRvdXM/IEJpbmdvLCB5ZXMhIFRoZXNlIGZ1bmN0aW9ucyBhcmUgdmVyeSBzcGVjaWZpYyB0byB0aGUgcm91dGluZXMgdGhhdCBhcmUgaW52b2x2ZWQgaW4gcmVhZGluZyBgL3Byb2MvXHUwMDNjcGlkXHUwMDNlL3NtYXBzX3JvbGx1cGAsIGAvcHJvYy9cdTAwM2NwaWRcdTAwM2Uvc21hcHNgLCBhbmQgdGhlIGBQUk9DTUFQX1FVRVJZYCBpb2N0bC5cblxuU28sIGxldCBtZSByZXZpZXcgZXZlcnl0aGluZyB0byBtYWtlIHN1cmUgSSdtIHNvbGlkOlxuXG4qICAgKipXb3J0aEZ1enppbmcqKjogRGVmaW5pdGVseSB0cnVlLiBXZSBoYXZlIHJlZmFjdG9yZWQgYW5kIG1vZGlmaWVkIGNvZGUgd2l0aGluIGBtbS9wcm9jZnNgLCBhbmQgd2UgYXJlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW5jeSBhbmQgbG9ja2luZyBjaGFuZ2VzIGluIGBzaG93X3NtYXBzX3JvbGx1cGAgYW5kIFZNQSB3YWxraW5nIGluIGBzbWFwX2dhdGhlcl9zdGF0c2AuIFRoZXNlIGFyZSBwZXJmZWN0LlxuKiAgICoqRW5hYmxlQ29uZmlncyoqOiBJJ20gZ29pbmcgd2l0aCBgW1wiUFJPQ19GU1wiLCBcIlBST0NfUEFHRV9NT05JVE9SXCJdYCBoZXJlLiBgTU1VYCBtaWdodCBiZSByZXF1aXJlZCwgYnV0IHRoZXNlIHR3byBhcmUgcHJldHR5IHN0YW5kYXJkLlxuKiAgICoqRm9jdXNTeW1ib2xzKio6IGBbXCJzaG93X3NtYXBzX3JvbGx1cFwiLCBcInNtYXBfZ2F0aGVyX3N0YXRzXCIsIFwic2hvd19zbWFwXCIsIFwiZG9fcHJvY21hcF9xdWVyeVwiXWAuXG4qICAgKipSZWFzb25pbmcqKjogSSB0aGluayB0aGlzIGV4cGxhbmF0aW9uIHNob3VsZCBiZSBzdWZmaWNpZW50LlxuXG5JJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTYxMywiT3V0cHV0VG9rZW5zIjoxNjEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MzIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOTozODo0MS40NjIzMDQ0NzNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NTc0MDE0OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPQ19GU1wiLFxuICAgIFwiUFJPQ19QQUdFX01PTklUT1JcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaG93X3NtYXBzX3JvbGx1cFwiLFxuICAgIFwic21hcF9nYXRoZXJfc3RhdHNcIixcbiAgICBcInNob3dfc21hcFwiLFxuICAgIFwiZG9fcHJvY21hcF9xdWVyeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIC9wcm9jL1xcdTAwM2NwaWRcXHUwMDNlL3NtYXBzX3JvbGx1cCBhbmQgc21hcHMgaXRlcmF0aW9uIGxvZ2ljIGluIHRhc2tfbW11LmMgdG8gdXNlIHBlci1WTUEgbG9ja3MgdW5kZXIgUkNVIGluc3RlYWQgb2YgYWNxdWlyaW5nIG1tYXBfbG9jayB1cGZyb250LCBhZGp1c3RzIHBhcnRpYWwgVk1BIHN0YXQgZ2F0aGVyaW5nIGluIHNtYXBfZ2F0aGVyX3N0YXRzKCksIGFuZCBzaW1wbGlmaWVzIHByb2NfbWFwcyBsb2NraW5nIGhlbHBlcnMuIFRoaXMgcmVhY2hhYmxlIGNvcmUgTU0vcHJvY2ZzIGxvZ2ljIGlzIHdvcnRoIGZ1enppbmcgZm9yIGNvbmN1cnJlbmN5IGFuZCBsb2NraW5nIGlzc3Vlcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9DX0ZTXCIsXG4gICAgXCJQUk9DX1BBR0VfTU9OSVRPUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNob3dfc21hcHNfcm9sbHVwXCIsXG4gICAgXCJzbWFwX2dhdGhlcl9zdGF0c1wiLFxuICAgIFwic2hvd19zbWFwXCIsXG4gICAgXCJkb19wcm9jbWFwX3F1ZXJ5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2Uvc21hcHNfcm9sbHVwIGFuZCBzbWFwcyBpdGVyYXRpb24gbG9naWMgaW4gdGFza19tbXUuYyB0byB1c2UgcGVyLVZNQSBsb2NrcyB1bmRlciBSQ1UgaW5zdGVhZCBvZiBhY3F1aXJpbmcgbW1hcF9sb2NrIHVwZnJvbnQsIGFkanVzdHMgcGFydGlhbCBWTUEgc3RhdCBnYXRoZXJpbmcgaW4gc21hcF9nYXRoZXJfc3RhdHMoKSwgYW5kIHNpbXBsaWZpZXMgcHJvY19tYXBzIGxvY2tpbmcgaGVscGVycy4gVGhpcyByZWFjaGFibGUgY29yZSBNTS9wcm9jZnMgbG9naWMgaXMgd29ydGggZnV6emluZyBmb3IgY29uY3VycmVuY3kgYW5kIGxvY2tpbmcgaXNzdWVzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOTozODo0MS41NDgwNTUzMzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2MzMzMjQwOTk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6Mzg6NDEuNTQ4NjY0MzUyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MTYzMzI2MjYxNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBsb2NraW5nIGFuZCBpdGVyYXRpb24gbG9naWMgaW4gL3Byb2MvXFx1MDAzY3BpZFxcdTAwM2Uvc21hcHNfcm9sbHVwIGFuZCByZWxhdGVkIHRhc2tfbW11LmMgZnVuY3Rpb25zIChtaWdyYXRpbmcgc2hvd19zbWFwc19yb2xsdXAgdG8gdXNlIHBlci1WTUEgbG9ja2luZyB2aWEgcHJvY19nZXRfdm1hIGFuZCBzaW1wbGlmeWluZyBsb2NraW5nIGNvbnRleHQgaGVscGVyIGZ1bmN0aW9ucykuIEFsbCBsb2NhbCB2YXJpYWJsZXMgYW5kIHN0YXRpc3RpY3Mgc3RydWN0dXJlcyAoZS5nLiwgc3RydWN0IG1lbV9zaXplX3N0YXRzIG1zcyA9IHt9KSBhcmUgZXhwbGljaXRseSB6ZXJvLWluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGFuZCBvdXRwdXQgaXMgZm9ybWF0dGVkIGFzIEFTQ0lJIHRleHQgaW50byBzZXFfZmlsZSBidWZmZXJzLiBUaGVyZSBhcmUgbm8gbmV3IG9yIG1vZGlmaWVkIHJhdyBzdHJ1Y3QgY29waWVzIHRvIHVzZXIgc3BhY2UsIG5vIHVuaW5pdGlhbGl6ZWQgc3RydWN0IGZpZWxkcyBvciBwYWRkaW5nLCBhbmQgbm8gY29uZGl0aW9uYWwgYnJhbmNoZXMgb24gdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBjb25jdXJyZW5jeSBvciBsaWZldGltZSBpc3N1ZXMgaW50cm9kdWNlZCBieSBjaGFuZ2VzIHRvIFZNQSBsb2NraW5nL1JDVSB0cmF2ZXJzYWwgd291bGQgYmUgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBMT0NLREVQLiBUaHVzLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyNTVhN2FjYmE3YjhiZjFiNzQ4N2ZiMTU5MDc2MDA2MGU0Nzg5MGI0XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBTZXAgNyAwOTozODowOCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL3Byb2MvdGFza19tbXUuYyBiL2ZzL3Byb2MvdGFza19tbXUuY1xuaW5kZXggZTY3MWI0ZmQ4ZGVkZC4uNjQxYTE1NWIwYzYxMyAxMDA2NDRcbi0tLSBhL2ZzL3Byb2MvdGFza19tbXUuY1xuKysrIGIvZnMvcHJvYy90YXNrX21tdS5jXG5AQCAtMTMwLDI4ICsxMzAsMTIgQEAgc3RhdGljIHZvaWQgcmVsZWFzZV90YXNrX21lbXBvbGljeShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4gfVxuICNlbmRpZlxuIFxuLXN0YXRpYyBpbmxpbmUgaW50IGxvY2tfY3R4X21tKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdGludCByZXQgPSBtbWFwX3JlYWRfbG9ja19raWxsYWJsZShsb2NrX2N0eC1cdTAwM2VtbSk7XG4tXG4tXHRpZiAoIXJldClcbi1cdFx0bG9ja19jdHgtXHUwMDNlbW1hcF9sb2NrZWQgPSB0cnVlO1xuLVxuLVx0cmV0dXJuIHJldDtcbi19XG4tXG4tc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19jdHhfbW0oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4rc3RhdGljIHZvaWQgdW5sb2NrX2N0eF9tbShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbiB7XG4gXHRtbWFwX3JlYWRfdW5sb2NrKGxvY2tfY3R4LVx1MDAzZW1tKTtcbiBcdGxvY2tfY3R4LVx1MDAzZW1tYXBfbG9ja2VkID0gZmFsc2U7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIHJlc2V0X2xvY2tfY3R4KHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdGxvY2tfY3R4LVx1MDAzZWxvY2tlZF92bWEgPSBOVUxMO1xuLVx0bG9ja19jdHgtXHUwMDNlbW1hcF9sb2NrZWQgPSBmYWxzZTtcbi19XG4tXG4gc3RhdGljIHZvaWQgdW5sb2NrX2N0eF92bWEoc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4ge1xuIFx0aWYgKGxvY2tfY3R4LVx1MDAzZWxvY2tlZF92bWEpIHtcbkBAIC0xNjAsMjMgKzE0NCwxMCBAQCBzdGF0aWMgdm9pZCB1bmxvY2tfY3R4X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eClcbiBcdH1cbiB9XG4gXG4tc3RhdGljIGlubGluZSBib29sIGxvY2tfdm1hX3JhbmdlKHN0cnVjdCBzZXFfZmlsZSAqbSxcbi1cdFx0XHRcdCAgc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4te1xuLVx0cmN1X3JlYWRfbG9jaygpO1xuLVx0cmVzZXRfbG9ja19jdHgobG9ja19jdHgpO1xuLVxuLVx0cmV0dXJuIHRydWU7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfdm1hX3JhbmdlKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuK3N0YXRpYyB2b2lkIHJlc2V0X2xvY2tfY3R4KHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuIHtcbi1cdGlmIChsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZCkge1xuLVx0XHR1bmxvY2tfY3R4X21tKGxvY2tfY3R4KTtcbi1cdH0gZWxzZSB7XG4tXHRcdHVubG9ja19jdHhfdm1hKGxvY2tfY3R4KTtcbi1cdFx0cmN1X3JlYWRfdW5sb2NrKCk7XG4tXHR9XG4rXHRsb2NrX2N0eC1cdTAwM2Vsb2NrZWRfdm1hID0gTlVMTDtcbitcdGxvY2tfY3R4LVx1MDAzZW1tYXBfbG9ja2VkID0gZmFsc2U7XG4gfVxuIFxuIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmdldF9uZXh0X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXG5AQCAtMTk2LDcgKzE2Nyw3IEBAIHN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKmdldF9uZXh0X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXG4gXHRyZXR1cm4gdm1hO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgZmFsbGJhY2tfdG9fbW1hcF9sb2NrKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcbitzdGF0aWMgYm9vbCBmYWxsYmFja190b19tbWFwX2xvY2soc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxuIFx0XHRcdFx0XHQgbG9mZl90IHBvcylcbiB7XG4gXHRzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eCA9IFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHg7XG5AQCAtMjEzLDcgKzE4NCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBmYWxsYmFja190b19tbWFwX2xvY2soc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBkcm9wX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4rc3RhdGljIHZvaWQgZHJvcF9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuIHtcbiBcdGlmIChwcml2LVx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxuIFx0XHRyZXR1cm47XG5AQCAtMjIxLDcgKzE5Miw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBkcm9wX3JjdShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHJlYWNxdWlyZV9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuK3N0YXRpYyB2b2lkIHJlYWNxdWlyZV9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuIHtcbiBcdGlmIChwcml2LVx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxuIFx0XHRyZXR1cm47XG5AQCAtMjg2LDEzICsyNTcsOCBAQCBzdGF0aWMgdm9pZCAqbV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcHBvcylcbiBcdFx0cmV0dXJuIE5VTEw7XG4gXHR9XG4gXG4tXHRpZiAoIWxvY2tfdm1hX3JhbmdlKG0sIGxvY2tfY3R4KSkge1xuLVx0XHRtbXB1dChtbSk7XG4tXHRcdHB1dF90YXNrX3N0cnVjdChwcml2LVx1MDAzZXRhc2spO1xuLVx0XHRwcml2LVx1MDAzZXRhc2sgPSBOVUxMO1xuLVx0XHRyZXR1cm4gRVJSX1BUUigtRUlOVFIpO1xuLVx0fVxuLVxuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0cmVzZXRfbG9ja19jdHgobG9ja19jdHgpO1xuIFx0LypcbiBcdCAqIFJlc2V0IGN1cnJlbnQgcG9zaXRpb24gaWYgbGFzdF9hZGRyIHdhcyBzZXQgYmVmb3JlXG4gXHQgKiBhbmQgaXQncyBub3QgYSBzZW50aW5lbC5cbkBAIC0zMjUsNyArMjkxLDEyIEBAIHN0YXRpYyB2b2lkIG1fc3RvcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4gXHRcdHJldHVybjtcbiBcbiBcdHJlbGVhc2VfdGFza19tZW1wb2xpY3kocHJpdik7XG4tXHR1bmxvY2tfdm1hX3JhbmdlKFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHgpO1xuK1x0aWYgKHByaXYtXHUwMDNlbG9ja19jdHgubW1hcF9sb2NrZWQpIHtcbitcdFx0dW5sb2NrX2N0eF9tbShcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4KTtcbitcdH0gZWxzZSB7XG4rXHRcdHVubG9ja19jdHhfdm1hKFx1MDAyNnByaXYtXHUwMDNlbG9ja19jdHgpO1xuK1x0XHRyY3VfcmVhZF91bmxvY2soKTtcbitcdH1cbiBcdG1tcHV0KG1tKTtcbiBcdHB1dF90YXNrX3N0cnVjdChwcml2LVx1MDAzZXRhc2spO1xuIFx0cHJpdi1cdTAwM2V0YXNrID0gTlVMTDtcbkBAIC01MTgsMjEgKzQ4OSw2IEBAIHN0YXRpYyBpbnQgcGlkX21hcHNfb3BlbihzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZmlsZSAqZmlsZSlcbiBcdFx0UFJPQ01BUF9RVUVSWV9WTUFfRkxBR1NcdFx0XHRcdFxcXG4gKVxuIFxuLXN0YXRpYyBpbnQgcXVlcnlfdm1hX3NldHVwKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4KVxuLXtcbi1cdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcbi1cbi1cdHJldHVybiAwO1xuLX1cbi1cbi1zdGF0aWMgdm9pZCBxdWVyeV92bWFfdGVhcmRvd24oc3RydWN0IHByb2NfbWFwc19sb2NraW5nX2N0eCAqbG9ja19jdHgpXG4te1xuLVx0aWYgKGxvY2tfY3R4LVx1MDAzZW1tYXBfbG9ja2VkKVxuLVx0XHR1bmxvY2tfY3R4X21tKGxvY2tfY3R4KTtcbi1cdGVsc2Vcbi1cdFx0dW5sb2NrX2N0eF92bWEobG9ja19jdHgpO1xuLX1cbi1cbiBzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpxdWVyeV92bWFfZmluZF9ieV9hZGRyKHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4LFxuIFx0XHRcdFx0XHRcdCAgICAgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbkBAIC02NTMsMTIgKzYwOSw3IEBAIHN0YXRpYyBpbnQgZG9fcHJvY21hcF9xdWVyeShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdm9pZCBfX3VzZXIgKnVhcmcpXG4gXHRpZiAoIW1tIHx8ICFtbWdldF9ub3RfemVybyhtbSkpXG4gXHRcdHJldHVybiAtRVNSQ0g7XG4gXG4tXHRlcnIgPSBxdWVyeV92bWFfc2V0dXAoXHUwMDI2bG9ja19jdHgpO1xuLVx0aWYgKGVycikge1xuLVx0XHRtbXB1dChtbSk7XG4tXHRcdHJldHVybiBlcnI7XG4tXHR9XG4tXG4rXHRyZXNldF9sb2NrX2N0eChcdTAwMjZsb2NrX2N0eCk7XG4gXHR2bWEgPSBxdWVyeV9tYXRjaGluZ192bWEoXHUwMDI2bG9ja19jdHgsIGthcmcucXVlcnlfYWRkciwga2FyZy5xdWVyeV9mbGFncyk7XG4gXHRpZiAoSVNfRVJSKHZtYSkpIHtcbiBcdFx0ZXJyID0gUFRSX0VSUih2bWEpO1xuQEAgLTczMiw3ICs2ODMsMTAgQEAgc3RhdGljIGludCBkb19wcm9jbWFwX3F1ZXJ5KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB2b2lkIF9fdXNlciAqdWFyZylcbiBcdFx0dm1fZmlsZSA9IGdldF9maWxlKHZtYS1cdTAwM2V2bV9maWxlKTtcbiBcbiBcdC8qIHVubG9jayB2bWEgb3IgbW1hcF9sb2NrLCBhbmQgcHV0IG1tX3N0cnVjdCBiZWZvcmUgY29weWluZyBkYXRhIHRvIHVzZXIgKi9cbi1cdHF1ZXJ5X3ZtYV90ZWFyZG93bihcdTAwMjZsb2NrX2N0eCk7XG4rXHRpZiAobG9ja19jdHgubW1hcF9sb2NrZWQpXG4rXHRcdHVubG9ja19jdHhfbW0oXHUwMDI2bG9ja19jdHgpO1xuK1x0ZWxzZVxuK1x0XHR1bmxvY2tfY3R4X3ZtYShcdTAwMjZsb2NrX2N0eCk7XG4gXHRtbXB1dChtbSk7XG4gXG4gXHRpZiAoa2FyZy5idWlsZF9pZF9zaXplKSB7XG5AQCAtNzczLDcgKzcyNywxMCBAQCBzdGF0aWMgaW50IGRvX3Byb2NtYXBfcXVlcnkoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHZvaWQgX191c2VyICp1YXJnKVxuIFx0cmV0dXJuIDA7XG4gXG4gb3V0OlxuLVx0cXVlcnlfdm1hX3RlYXJkb3duKFx1MDAyNmxvY2tfY3R4KTtcbitcdGlmIChsb2NrX2N0eC5tbWFwX2xvY2tlZClcbitcdFx0dW5sb2NrX2N0eF9tbShcdTAwMjZsb2NrX2N0eCk7XG4rXHRlbHNlXG4rXHRcdHVubG9ja19jdHhfdm1hKFx1MDAyNmxvY2tfY3R4KTtcbiBcdG1tcHV0KG1tKTtcbiBvdXRfZmlsZTpcbiBcdGlmICh2bV9maWxlKVxuQEAgLTEyNjMsNyArMTIyMCw3IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgc21hcHNfc2htZW1fd2Fsa192bWFfbG9ja19vcHMgPSB7XG4gXHQud2Fsa19sb2NrXHRcdD0gUEdXQUxLX1ZNQV9SRExPQ0tfVkVSSUZZLFxuIH07XG4gXG4tc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKlxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKlxuIGdldF9zbWFwc193YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4ge1xuIFx0aWYgKHByaXYtXHUwMDNlbG9ja19jdHgubW1hcF9sb2NrZWQpXG5AQCAtMTI3MSw3ICsxMjI4LDcgQEAgZ2V0X3NtYXBzX3dhbGtfb3BzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdilcbiBcdHJldHVybiBcdTAwMjZzbWFwc193YWxrX3ZtYV9sb2NrX29wcztcbiB9XG4gXG4tc3RhdGljIGlubGluZSBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKlxuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgKlxuIGdldF9zbWFwc19zaG1lbV93YWxrX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4ge1xuIFx0aWYgKHByaXYtXHUwMDNlbG9ja19jdHgubW1hcF9sb2NrZWQpXG5AQCAtMTI3OSwyMCArMTIzNiwyNyBAQCBnZXRfc21hcHNfc2htZW1fd2Fsa19vcHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxuIFx0cmV0dXJuIFx1MDAyNnNtYXBzX3NobWVtX3dhbGtfdm1hX2xvY2tfb3BzO1xuIH1cbiBcbi0vKlxuLSAqIEdhdGhlciBtZW0gc3RhdHMgZnJvbSBAdm1hIHdpdGggdGhlIGluZGljYXRlZCBiZWdpbm5pbmdcbi0gKiBhZGRyZXNzIEBzdGFydCwgYW5kIGtlZXAgdGhlbSBpbiBAbXNzLlxuKy8qKlxuKyAqIHNtYXBfZ2F0aGVyX3N0YXRzKCkgLSBHYXRoZXIgbWVtIHN0YXRzIGZyb20gQHZtYS5cbisgKiBAcHJpdjogcHJvYyBtYXBzIHByaXZhdGUgc3RhdGUuXG4rICogQHZtYTogVGhlIFZNQSB0byBnYXRoZXIgc3RhdHMgZm9yLlxuKyAqIEBtc3M6IFRoZSBhY2N1bXVsYXRlZCBzdGF0cy5cbisgKiBAc3RhcnQ6IFRoZSBhZGRyZXNzIGZyb20gd2hpY2ggdG8gc3RhcnQuXG4gICpcbi0gKiBVc2Ugdm1fc3RhcnQgb2YgQHZtYSBhcyB0aGUgYmVnaW5uaW5nIGFkZHJlc3MgaWYgQHN0YXJ0IGlzIDAuXG4rICogVGhpcyBnYXRoZXJzIHN0YXRzIGZvciB0aGUgd2hvbGUgb2YgdGhlIFZNQSB1bmxlc3MgdGhlIGxvY2sgd2FzIGRyb3BwZWRcbisgKiBhbmQgVk1BIGdyZXcgb3IgZ290IG1lcmdlZCBhbmQgd2UgZm91bmQgaXQgYWdhaW4sIGluIHdoaWNoIGNhc2Ugd2Ugb25seVxuKyAqIGdhdGhlciBzdGF0cyBmb3IgdGhlIHJlbWFpbmRlciBvZiB0aGUgVk1BIHJhbmdlLlxuICAqL1xuIHN0YXRpYyB2b2lkIHNtYXBfZ2F0aGVyX3N0YXRzKHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdixcbiBcdFx0XHQgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0XHQgICAgICBzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgKm1zcywgdW5zaWduZWQgbG9uZyBzdGFydClcbitcdFx0XHQgICAgICBzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgKm1zcyxcbitcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0KVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyAqb3BzID0gZ2V0X3NtYXBzX3dhbGtfb3BzKHByaXYpO1xuK1x0Y29uc3QgYm9vbCBpc19wYXJ0aWFsID0gc3RhcnQgXHUwMDNlIHZtYS1cdTAwM2V2bV9zdGFydDtcbiBcbiBcdC8qIEludmFsaWQgc3RhcnQgKi9cbi1cdGlmIChzdGFydCBcdTAwM2U9IHZtYS1cdTAwM2V2bV9lbmQpXG4rXHRpZiAoc3RhcnQgXHUwMDNjIHZtYS1cdTAwM2V2bV9zdGFydCB8fCBzdGFydCBcdTAwM2U9IHZtYS1cdTAwM2V2bV9lbmQpXG4gXHRcdHJldHVybjtcbiBcbiBcdGlmICh2bWEgPT0gZ2V0X2dhdGVfdm1hKHByaXYtXHUwMDNlbG9ja19jdHgubW0pKVxuQEAgLTEzMTIsMjAgKzEyNzYsMTcgQEAgc3RhdGljIHZvaWQgc21hcF9nYXRoZXJfc3RhdHMoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2LFxuIFx0XHQgKiBVbmxlc3Mgd2Uga25vdyB0aGF0IHRoZSBzaG1lbSBvYmplY3QgKG9yIHRoZSBwYXJ0IG1hcHBlZCBieVxuIFx0XHQgKiBvdXIgVk1BKSBoYXMgbm8gc3dhcHBlZCBvdXQgcGFnZXMgYXQgYWxsLlxuIFx0XHQgKi9cbi1cdFx0dW5zaWduZWQgbG9uZyBzaG1lbV9zd2FwcGVkID0gc2htZW1fc3dhcF91c2FnZSh2bWEpO1xuK1x0XHRjb25zdCB1bnNpZ25lZCBsb25nIHNobWVtX3N3YXBwZWQgPSBzaG1lbV9zd2FwX3VzYWdlKHZtYSk7XG4rXHRcdGNvbnN0IGJvb2wgc2hhcmVkX29yX3JvID0gdm1hX3Rlc3Qodm1hLCBWTUFfU0hBUkVEX0JJVCkgfHxcbitcdFx0XHRcdFx0ICAhdm1hX3Rlc3Qodm1hLCBWTUFfV1JJVEVfQklUKTtcbiBcbi1cdFx0aWYgKCFzdGFydCBcdTAwMjZcdTAwMjYgKCFzaG1lbV9zd2FwcGVkIHx8ICh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1NIQVJFRCkgfHxcbi1cdFx0XHRcdFx0ISh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1dSSVRFKSkpIHtcbitcdFx0aWYgKCFpc19wYXJ0aWFsIFx1MDAyNlx1MDAyNiAoIXNobWVtX3N3YXBwZWQgfHwgc2hhcmVkX29yX3JvKSlcbiBcdFx0XHRtc3MtXHUwMDNlc3dhcCArPSBzaG1lbV9zd2FwcGVkO1xuLVx0XHR9IGVsc2Uge1xuK1x0XHRlbHNlXG4gXHRcdFx0b3BzID0gZ2V0X3NtYXBzX3NobWVtX3dhbGtfb3BzKHByaXYpO1xuLVx0XHR9XG4gXHR9XG4gXG4tXHRpZiAoIXN0YXJ0KVxuLVx0XHR3YWxrX3BhZ2Vfdm1hKHZtYSwgb3BzLCBtc3MpO1xuLVx0ZWxzZVxuLVx0XHR3YWxrX3BhZ2VfcmFuZ2Uodm1hLVx1MDAzZXZtX21tLCBzdGFydCwgdm1hLVx1MDAzZXZtX2VuZCwgb3BzLCBtc3MpO1xuK1x0d2Fsa19wYWdlX3JhbmdlX3ZtYSh2bWEsIHN0YXJ0LCB2bWEtXHUwMDNldm1fZW5kLCBvcHMsIG1zcyk7XG4gXG4gXHRyZWFjcXVpcmVfcmN1KHByaXYpO1xuIH1cbkBAIC0xMzgwLDcgKzEzNDEsNyBAQCBzdGF0aWMgaW50IHNob3dfc21hcChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSA9IHY7XG4gXHRzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgbXNzID0ge307XG4gXG4tXHRzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsIFx1MDAyNm1zcywgMCk7XG4rXHRzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsIFx1MDAyNm1zcywgdm1hLVx1MDAzZXZtX3N0YXJ0KTtcbiBcbiBcdHNob3dfbWFwX3ZtYShtLCB2bWEpO1xuIFxuQEAgLTE0MDUsMTIgKzEzNjYsMTQgQEAgc3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIHN0YXRpYyBpbnQgc2hvd19zbWFwc19yb2xsdXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIHtcbiBcdHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tXHUwMDNlcHJpdmF0ZTtcbitcdHN0cnVjdCBwcm9jX21hcHNfbG9ja2luZ19jdHggKmxvY2tfY3R4ID0gXHUwMDI2cHJpdi1cdTAwM2Vsb2NrX2N0eDtcbitcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tID0gbG9ja19jdHgtXHUwMDNlbW07XG4gXHRzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgbXNzID0ge307XG4tXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHByaXYtXHUwMDNlbG9ja19jdHgubW07XG4rXHR1bnNpZ25lZCBsb25nIGxhc3Rfdm1hX2VuZCA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIHZtYV9zdGFydCA9IDA7XG4gXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYTtcbi1cdHVuc2lnbmVkIGxvbmcgdm1hX3N0YXJ0ID0gMCwgbGFzdF92bWFfZW5kID0gMDtcbitcdGxvZmZfdCBwb3MgPSAwO1xuIFx0aW50IHJldCA9IDA7XG4tXHRWTUFfSVRFUkFUT1Iodm1pLCBtbSwgMCk7XG4gXG4gXHRwcml2LVx1MDAzZXRhc2sgPSBnZXRfcHJvY190YXNrKHByaXYtXHUwMDNlaW5vZGUpO1xuIFx0aWYgKCFwcml2LVx1MDAzZXRhc2spXG5AQCAtMTQyMSw4OSArMTM4NCw2MCBAQCBzdGF0aWMgaW50IHNob3dfc21hcHNfcm9sbHVwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiBcdFx0Z290byBvdXRfcHV0X3Rhc2s7XG4gXHR9XG4gXG4tXHRyZXQgPSBsb2NrX2N0eF9tbShcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4KTtcbi1cdGlmIChyZXQpXG4tXHRcdGdvdG8gb3V0X3B1dF9tbTtcbi1cbiBcdGhvbGRfdGFza19tZW1wb2xpY3kocHJpdik7XG4tXHR2bWEgPSB2bWFfbmV4dChcdTAwMjZ2bWkpO1xuK1x0cmN1X3JlYWRfbG9jaygpO1xuK1x0cmVzZXRfbG9ja19jdHgobG9ja19jdHgpO1xuIFxuK1x0dm1hX2l0ZXJfaW5pdChcdTAwMjZwcml2LVx1MDAzZWl0ZXIsIG1tLCAwKTtcbitcdHZtYSA9IHByb2NfZ2V0X3ZtYShtLCBcdTAwMjZwb3MpO1xuIFx0aWYgKHVubGlrZWx5KCF2bWEpKVxuIFx0XHRnb3RvIGVtcHR5X3NldDtcbiBcbi1cdHZtYV9zdGFydCA9IHZtYS1cdTAwM2V2bV9zdGFydDtcbi1cdGRvIHtcbi1cdFx0c21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCBcdTAwMjZtc3MsIDApO1xuLVx0XHRsYXN0X3ZtYV9lbmQgPSB2bWEtXHUwMDNldm1fZW5kO1xuK1x0aWYgKCFJU19FUlIodm1hKSBcdTAwMjZcdTAwMjYgdm1hICE9IGdldF9nYXRlX3ZtYShsb2NrX2N0eC1cdTAwM2VtbSkpXG4rXHRcdHZtYV9zdGFydCA9IHZtYS1cdTAwM2V2bV9zdGFydDtcbitcbitcdHdoaWxlICh2bWEpIHtcbitcdFx0aWYgKElTX0VSUih2bWEpKSB7XG4rXHRcdFx0cmV0ID0gUFRSX0VSUih2bWEpO1xuK1x0XHRcdGdvdG8gb3V0X3VubG9jaztcbitcdFx0fVxuK1xuK1x0XHRpZiAodm1hID09IGdldF9nYXRlX3ZtYShsb2NrX2N0eC1cdTAwM2VtbSkpXG4rXHRcdFx0YnJlYWs7XG4gXG4gXHRcdC8qXG4tXHRcdCAqIFJlbGVhc2UgbW1hcF9sb2NrIHRlbXBvcmFyaWx5IGlmIHNvbWVvbmUgd2FudHMgdG9cbi1cdFx0ICogYWNjZXNzIGl0IGZvciB3cml0ZSByZXF1ZXN0LlxuK1x0XHQgKiBJZiBhZnRlciByZXRha2luZyB0aGUgbG9jaywgYWxyZWFkeSByZXBvcnRlZCBWTUEgZ3JldyBvclxuK1x0XHQgKiBtZXJnZWQgd2l0aCB0aGUgbmV4dCBvbmUsIHNtYXBfZ2F0aGVyX3N0YXRzKCkgd2lsbCBnYXRoZXJcbitcdFx0ICogc3RhdHMgZm9yIHRoZSByZW1haW5pbmcgcG9ydGlvbiBieSBzdGFydGluZyBhdCBsYXN0X3ZtYV9lbmQuXG4gXHRcdCAqL1xuLVx0XHRpZiAobW1hcF9sb2NrX2lzX2NvbnRlbmRlZChtbSkpIHtcbi1cdFx0XHR2bWFfaXRlcl9pbnZhbGlkYXRlKFx1MDAyNnZtaSk7XG4tXHRcdFx0dW5sb2NrX2N0eF9tbShcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4KTtcbi1cdFx0XHRyZXQgPSBsb2NrX2N0eF9tbShcdTAwMjZwcml2LVx1MDAzZWxvY2tfY3R4KTtcbi1cdFx0XHRpZiAocmV0KSB7XG4tXHRcdFx0XHRyZWxlYXNlX3Rhc2tfbWVtcG9saWN5KHByaXYpO1xuLVx0XHRcdFx0Z290byBvdXRfcHV0X21tO1xuLVx0XHRcdH1cbitcdFx0c21hcF9nYXRoZXJfc3RhdHMocHJpdiwgdm1hLCBcdTAwMjZtc3MsIGxhc3Rfdm1hX2VuZCk7XG4rXHRcdGxhc3Rfdm1hX2VuZCA9IHZtYS1cdTAwM2V2bV9lbmQ7XG4gXG4rXHRcdC8qXG4rXHRcdCAqIElmIHRoZSBWTUEgbG9jayBpcyBub3QgdGFrZW4sIHdlIGhvbGQgdGhlIG9mdGVuIGNvbnRlbmRlZFxuK1x0XHQgKiBtbWFwIGxvY2suIFRoaXMgY2FuIGhhcHBlbiBpZiB3ZSBoYWQgdG8gZmFsbCBiYWNrIHRvIHRoZVxuK1x0XHQgKiBtbWFwIGxvY2suXG4rXHRcdCAqXG4rXHRcdCAqIFRvIHJlbGlldmUgcHJlc3N1cmUsIGNoZWNrIGlmIGl0IGlzIGluZGVlZCBjb250ZW5kZWQsIHRoZW5cbitcdFx0ICogdGVtcG9yYXJpbHkgcmVsZWFzZSBpdC5cbitcdFx0ICovXG4rXHRcdGlmIChsb2NrX2N0eC1cdTAwM2VtbWFwX2xvY2tlZCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIG1tYXBfbG9ja19pc19jb250ZW5kZWQobG9ja19jdHgtXHUwMDNlbW0pKSB7XG4rXHRcdFx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XG4gXHRcdFx0Lypcbi1cdFx0XHQgKiBBZnRlciBkcm9wcGluZyB0aGUgbG9jaywgdGhlcmUgYXJlIGZvdXIgY2FzZXMgdG9cbi1cdFx0XHQgKiBjb25zaWRlci4gU2VlIHRoZSBmb2xsb3dpbmcgZXhhbXBsZSBmb3IgZXhwbGFuYXRpb24uXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAgICstLS0tLS0rLS0tLS0tKy0tLS0tLS0tLS0tK1xuLVx0XHRcdCAqICAgfCBWTUExIHwgVk1BMiB8IFZNQTMgICAgICB8XG4tXHRcdFx0ICogICArLS0tLS0tKy0tLS0tLSstLS0tLS0tLS0tLStcbi1cdFx0XHQgKiAgIHwgICAgICB8ICAgICAgfCAgICAgICAgICAgfFxuLVx0XHRcdCAqICA0ayAgICAgOGsgICAgIDE2ayAgICAgICAgIDQwMGtcbi1cdFx0XHQgKlxuLVx0XHRcdCAqIFN1cHBvc2Ugd2UgZHJvcCB0aGUgbG9jayBhZnRlciByZWFkaW5nIFZNQTIgZHVlIHRvXG4tXHRcdFx0ICogY29udGVudGlvbiwgdGhlbiB3ZSBnZXQ6XG4tXHRcdFx0ICpcbi1cdFx0XHQgKlx0bGFzdF92bWFfZW5kID0gMTZrXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAxKSBWTUEyIGlzIGZyZWVkLCBidXQgVk1BMyBleGlzdHM6XG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAgICB2bWFfbmV4dCh2bWkpIHdpbGwgcmV0dXJuIFZNQTMuXG4tXHRcdFx0ICogICAgSW4gdGhpcyBjYXNlLCBqdXN0IGNvbnRpbnVlIGZyb20gVk1BMy5cbi1cdFx0XHQgKlxuLVx0XHRcdCAqIDIpIFZNQTIgc3RpbGwgZXhpc3RzOlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBWTUEzLlxuLVx0XHRcdCAqICAgIEluIHRoaXMgY2FzZSwganVzdCBjb250aW51ZSBmcm9tIFZNQTMuXG4tXHRcdFx0ICpcbi1cdFx0XHQgKiAzKSBObyBtb3JlIFZNQXMgY2FuIGJlIGZvdW5kOlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBOVUxMLlxuLVx0XHRcdCAqICAgIE5vIG1vcmUgdGhpbmdzIHRvIGRvLCBqdXN0IGJyZWFrLlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogNCkgKGxhc3Rfdm1hX2VuZCAtIDEpIGlzIHRoZSBtaWRkbGUgb2YgYSB2bWEgKFZNQScpOlxuLVx0XHRcdCAqXG4tXHRcdFx0ICogICAgdm1hX25leHQodm1pKSB3aWxsIHJldHVybiBWTUEnIHdob3NlIHJhbmdlXG4tXHRcdFx0ICogICAgY29udGFpbnMgbGFzdF92bWFfZW5kLlxuLVx0XHRcdCAqICAgIEl0ZXJhdGUgVk1BJyBmcm9tIGxhc3Rfdm1hX2VuZC5cbitcdFx0XHQgKiBFdmVuIHRob3VnaCB3ZSBwcmV2aW91c2x5IGZlbGwgYmFjayB0byBtbWFwIGxvY2ssXG4rXHRcdFx0ICogd2UgdHJ5IHRha2luZyBWTUEgbG9jayBmb3IgdGhlIG5leHQgVk1BLCBzaW5jZSBpdFxuK1x0XHRcdCAqIG1pZ2h0IG5vdCBiZSB1bmRlciBtb2RpZmljYXRpb24uIEluIHRoZSB3b3JzdCBjYXNlXG4rXHRcdFx0ICogd2Ugd2lsbCBmYWxsIGJhY2sgdG8gbW1hcCBsb2NrIGFnYWluLlxuIFx0XHRcdCAqL1xuLVx0XHRcdHZtYSA9IHZtYV9uZXh0KFx1MDAyNnZtaSk7XG4tXHRcdFx0LyogQ2FzZSAzIGFib3ZlICovXG4tXHRcdFx0aWYgKCF2bWEpXG4tXHRcdFx0XHRicmVhaztcbi1cbi1cdFx0XHQvKiBDYXNlIDEgYW5kIDIgYWJvdmUgKi9cbi1cdFx0XHRpZiAodm1hLVx1MDAzZXZtX3N0YXJ0IFx1MDAzZT0gbGFzdF92bWFfZW5kKSB7XG4tXHRcdFx0XHRzbWFwX2dhdGhlcl9zdGF0cyhwcml2LCB2bWEsIFx1MDAyNm1zcywgMCk7XG4tXHRcdFx0XHRsYXN0X3ZtYV9lbmQgPSB2bWEtXHUwMDNldm1fZW5kO1xuLVx0XHRcdFx0Y29udGludWU7XG4tXHRcdFx0fVxuLVxuLVx0XHRcdC8qIENhc2UgNCBhYm92ZSAqL1xuLVx0XHRcdGlmICh2bWEtXHUwMDNldm1fZW5kIFx1MDAzZSBsYXN0X3ZtYV9lbmQpIHtcbi1cdFx0XHRcdHNtYXBfZ2F0aGVyX3N0YXRzKHByaXYsIHZtYSwgXHUwMDI2bXNzLCBsYXN0X3ZtYV9lbmQpO1xuLVx0XHRcdFx0bGFzdF92bWFfZW5kID0gdm1hLVx1MDAzZXZtX2VuZDtcbi1cdFx0XHR9XG4rXHRcdFx0cmN1X3JlYWRfbG9jaygpO1xuK1x0XHRcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcbitcdFx0XHQvKiBSZXN1bWUgZnJvbSB0aGUgbGFzdCBwb3NpdGlvbi4gKi9cbitcdFx0XHRwb3MgPSBsYXN0X3ZtYV9lbmQ7XG4rXHRcdFx0dm1hX2l0ZXJfaW5pdChcdTAwMjZwcml2LVx1MDAzZWl0ZXIsIG1tLCBwb3MpO1xuIFx0XHR9XG4tXHR9IGZvcl9lYWNoX3ZtYSh2bWksIHZtYSk7XG4rXHRcdHZtYSA9IHByb2NfZ2V0X3ZtYShtLCBcdTAwMjZwb3MpO1xuK1x0fVxuIFxuIGVtcHR5X3NldDpcbiBcdHNob3dfdm1hX2hlYWRlcl9wcmVmaXgobSwgdm1hX3N0YXJ0LCBsYXN0X3ZtYV9lbmQsIDAsIDAsIDAsIDApO1xuQEAgLTE1MTIsMTAgKzE0NDYsMTQgQEAgc3RhdGljIGludCBzaG93X3NtYXBzX3JvbGx1cChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4gXG4gXHRfX3Nob3dfc21hcChtLCBcdTAwMjZtc3MsIHRydWUpO1xuIFxuK291dF91bmxvY2s6XG4rXHRpZiAobG9ja19jdHgtXHUwMDNlbW1hcF9sb2NrZWQpIHtcbitcdFx0dW5sb2NrX2N0eF9tbShsb2NrX2N0eCk7XG4rXHR9IGVsc2Uge1xuK1x0XHR1bmxvY2tfY3R4X3ZtYShsb2NrX2N0eCk7XG4rXHRcdHJjdV9yZWFkX3VubG9jaygpO1xuK1x0fVxuIFx0cmVsZWFzZV90YXNrX21lbXBvbGljeShwcml2KTtcbi1cdHVubG9ja19jdHhfbW0oXHUwMDI2cHJpdi1cdTAwM2Vsb2NrX2N0eCk7XG4tXG4tb3V0X3B1dF9tbTpcbiBcdG1tcHV0KG1tKTtcbiBvdXRfcHV0X3Rhc2s6XG4gXHRwdXRfdGFza19zdHJ1Y3QocHJpdi1cdTAwM2V0YXNrKTtcbkBAIC0xNjA1LDcgKzE1NDMsNyBAQCBzdHJ1Y3QgY2xlYXJfcmVmc19wcml2YXRlIHtcbiBcdGVudW0gY2xlYXJfcmVmc190eXBlcyB0eXBlO1xuIH07XG4gXG4tc3RhdGljIGlubGluZSBib29sIHB0ZV9pc19waW5uZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxuK3N0YXRpYyBib29sIHB0ZV9pc19waW5uZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgcHRlKVxuIHtcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXG5AQCAtMTYyMSw4ICsxNTU5LDggQEAgc3RhdGljIGlubGluZSBib29sIHB0ZV9pc19waW5uZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdHJldHVybiBmb2xpb19tYXliZV9kbWFfcGlubmVkKGZvbGlvKTtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tXHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgcHRlX3QgKnB0ZSlcbitzdGF0aWMgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4rXHRcdFx0ICAgICBwdGVfdCAqcHRlKVxuIHtcbiBcdGlmICghcGd0YWJsZV9zdXBwb3J0c19zb2Z0X2RpcnR5KCkpXG4gXHRcdHJldHVybjtcbkBAIC0xNjUzLDggKzE1OTEsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfc29mdF9kaXJ0eShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiB9XG4gXG4gI2lmIGRlZmluZWQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5X3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kcClcbitzdGF0aWMgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5X3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKVxuIHtcbiBcdHBtZF90IG9sZCwgcG1kID0gKnBtZHA7XG4gXG5AQCAtMTY3OSw4ICsxNjE3LDggQEAgc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX3NvZnRfZGlydHlfcG1kKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0fVxuIH1cbiAjZWxzZVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5X3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi1cdFx0dW5zaWduZWQgbG9uZyBhZGRyLCBwbWRfdCAqcG1kcClcbitzdGF0aWMgdm9pZCBjbGVhcl9zb2Z0X2RpcnR5X3BtZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbitcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGFkZHIsIHBtZF90ICpwbWRwKVxuIHtcbiB9XG4gI2VuZGlmXG5AQCAtMTg3OSw3ICsxODE3LDcgQEAgc3RydWN0IHBhZ2VtYXByZWFkIHtcbiBcbiAjZGVmaW5lIFBNX0VORF9PRl9CVUZGRVIgICAgMVxuIFxuLXN0YXRpYyBpbmxpbmUgcGFnZW1hcF9lbnRyeV90IG1ha2VfcG1lKHU2NCBmcmFtZSwgdTY0IGZsYWdzKVxuK3N0YXRpYyBwYWdlbWFwX2VudHJ5X3QgbWFrZV9wbWUodTY0IGZyYW1lLCB1NjQgZmxhZ3MpXG4ge1xuIFx0cmV0dXJuIChwYWdlbWFwX2VudHJ5X3QpIHsgLnBtZSA9IChmcmFtZSBcdTAwMjYgUE1fUEZSQU1FX01BU0spIHwgZmxhZ3MgfTtcbiB9XG5AQCAtMzQyMSw3ICszMzU5LDcgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBzaG93X251bWFfdm1hX2xvY2tfb3BzID0ge1xuIFx0LndhbGtfbG9jayA9IFBHV0FMS19WTUFfUkRMT0NLX1ZFUklGWSxcbiB9O1xuIFxuLXN0YXRpYyBpbmxpbmUgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcbitzdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzICpcbiBnZXRfc2hvd19udW1hX29wcyhzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYpXG4ge1xuIFx0aWYgKHByaXYtXHUwMDNlbG9ja19jdHgubW1hcF9sb2NrZWQpXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLW1hcHMtcmFjZS5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLW1hcHMtcmFjZS5jXG5pbmRleCA0MTVlY2NiNzA0Njg0Li44ZDAwZDdkYjFjNjUyIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvcHJvYy9wcm9jLW1hcHMtcmFjZS5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9wcm9jL3Byb2MtbWFwcy1yYWNlLmNcbkBAIC04MCw2ICs4MCw2MSBAQCBlbnVtIG1hcHNfZmlsZSB7XG4gXG4gc3RydWN0IHZtYV9tb2RpZmllcl9pbmZvO1xuIFxuK2VudW0gc21hcHNfcm9sbHVwX3N0YXQge1xuK1x0UnNzLFxuK1x0UHNzLFxuK1x0UHNzX0RpcnR5LFxuK1x0UHNzX0Fub24sXG4rXHRQc3NfRmlsZSxcbitcdFBzc19TaG1lbSxcbitcdFNoYXJlZF9DbGVhbixcbitcdFNoYXJlZF9EaXJ0eSxcbitcdFByaXZhdGVfQ2xlYW4sXG4rXHRQcml2YXRlX0RpcnR5LFxuK1x0UmVmZXJlbmNlZCxcbitcdEFub255bW91cyxcbitcdEtTTSxcbitcdExhenlGcmVlLFxuK1x0QW5vbkh1Z2VQYWdlcyxcbitcdFNobWVtUG1kTWFwcGVkLFxuK1x0RmlsZVBtZE1hcHBlZCxcbitcdFNoYXJlZF9IdWdldGxiLFxuK1x0UHJpdmF0ZV9IdWdldGxiLFxuK1x0U3dhcCxcbitcdFN3YXBQc3MsXG4rXHRMb2NrZWQsXG4rXHRSb2xsdXBGaWVsZENvdW50XG4rfTtcbitcbitzdGF0aWMgY29uc3QgY2hhciAqc21hcHNfcm9sbHVwX3N0YXRfbmFtZXNbUm9sbHVwRmllbGRDb3VudF0gPSB7XG4rXHRcIlJzc1wiLFxuK1x0XCJQc3NcIixcbitcdFwiUHNzX0RpcnR5XCIsXG4rXHRcIlBzc19Bbm9uXCIsXG4rXHRcIlBzc19GaWxlXCIsXG4rXHRcIlBzc19TaG1lbVwiLFxuK1x0XCJTaGFyZWRfQ2xlYW5cIixcbitcdFwiU2hhcmVkX0RpcnR5XCIsXG4rXHRcIlByaXZhdGVfQ2xlYW5cIixcbitcdFwiUHJpdmF0ZV9EaXJ0eVwiLFxuK1x0XCJSZWZlcmVuY2VkXCIsXG4rXHRcIkFub255bW91c1wiLFxuK1x0XCJLU01cIixcbitcdFwiTGF6eUZyZWVcIixcbitcdFwiQW5vbkh1Z2VQYWdlc1wiLFxuK1x0XCJTaG1lbVBtZE1hcHBlZFwiLFxuK1x0XCJGaWxlUG1kTWFwcGVkXCIsXG4rXHRcIlNoYXJlZF9IdWdldGxiXCIsXG4rXHRcIlByaXZhdGVfSHVnZXRsYlwiLFxuK1x0XCJTd2FwXCIsXG4rXHRcIlN3YXBQc3NcIixcbitcdFwiTG9ja2VkXCIsXG4rfTtcbitcbitzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzIHtcbitcdHVuc2lnbmVkIGxvbmcgdmFsdWVzW1JvbGx1cEZpZWxkQ291bnRdO1xuK307XG4rXG4gRklYVFVSRShwcm9jX21hcHNfcmFjZSlcbiB7XG4gXHRzdHJ1Y3Qgdm1hX21vZGlmaWVyX2luZm8gKm1vZF9pbmZvO1xuQEAgLTkxLDYgKzE0Niw3IEBAIEZJWFRVUkUocHJvY19tYXBzX3JhY2UpXG4gXHRlbnVtIG1hcHNfZmlsZSBtYXBzX2ZpbGU7XG4gXHRpbnQgc2hhcmVkX21lbV9zaXplO1xuIFx0aW50IHNraXBfcGFnZXM7XG4rXHRpbnQgcm9sbHVwX2ZkO1xuIFx0aW50IHBhZ2Vfc2l6ZTtcbiBcdGludCB2bWFfY291bnQ7XG4gXHRib29sIHZlcmJvc2U7XG5AQCAtMTMyLDEyICsxODgsMTIgQEAgc3RydWN0IHZtYV9tb2RpZmllcl9pbmZvIHtcbiBcdHZvaWQgKmNoaWxkX21hcHBlZF9hZGRyW107XG4gfTtcbiBcbi1zdGF0aWMgYm9vbCByZWFkX3BhZ2UoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZixcbitzdGF0aWMgYm9vbCByZWFkX3BhZ2UoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZiwgaW50IGZkLFxuIFx0XHQgICAgICBzdHJ1Y3QgcGFnZV9jb250ZW50ICpwYWdlKVxuIHtcbiBcdHNzaXplX3QgIGJ5dGVzX3JlYWQ7XG4gXG4tXHRieXRlc19yZWFkID0gcmVhZChzZWxmLVx1MDAzZW1hcHNfZmQsIHBhZ2UtXHUwMDNlZGF0YSwgc2VsZi1cdTAwM2VwYWdlX3NpemUpO1xuK1x0Ynl0ZXNfcmVhZCA9IHJlYWQoZmQsIHBhZ2UtXHUwMDNlZGF0YSwgc2VsZi1cdTAwM2VwYWdlX3NpemUpO1xuIFx0aWYgKGJ5dGVzX3JlYWQgXHUwMDNjPSAwKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG5AQCAtMTc1LDcgKzIzMSw3IEBAIHN0YXRpYyBpbnQgbG9jYXRlX2NvbnRhaW5pbmdfcGFnZShGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmLFxuIFx0XHRjaGFyICpjdXJyX3BvcztcbiBcdFx0Y2hhciAqZW5kX3BvcztcbiBcbi1cdFx0aWYgKCFyZWFkX3BhZ2Uoc2VsZiwgXHUwMDI2c2VsZi1cdTAwM2VwYWdlMSkpXG4rXHRcdGlmICghcmVhZF9wYWdlKHNlbGYsIHNlbGYtXHUwMDNlbWFwc19mZCwgXHUwMDI2c2VsZi1cdTAwM2VwYWdlMSkpXG4gXHRcdFx0cmV0dXJuIC0xO1xuIFxuIFx0XHRjdXJyX3BvcyA9IHNlbGYtXHUwMDNlcGFnZTEuZGF0YTtcbkBAIC0yMDUsMTAgKzI2MSwxMSBAQCBzdGF0aWMgYm9vbCByZWFkX3R3b19wYWdlcyhGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4gXG4gXHRmb3IgKGludCBpID0gMDsgaSBcdTAwM2Mgc2VsZi1cdTAwM2Vza2lwX3BhZ2VzOyBpKyspXG4tXHRcdGlmICghcmVhZF9wYWdlKHNlbGYsIFx1MDAyNnNlbGYtXHUwMDNlcGFnZTEpKVxuK1x0XHRpZiAoIXJlYWRfcGFnZShzZWxmLCBzZWxmLVx1MDAzZW1hcHNfZmQsIFx1MDAyNnNlbGYtXHUwMDNlcGFnZTEpKVxuIFx0XHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHJldHVybiByZWFkX3BhZ2Uoc2VsZiwgXHUwMDI2c2VsZi1cdTAwM2VwYWdlMSkgXHUwMDI2XHUwMDI2IHJlYWRfcGFnZShzZWxmLCBcdTAwMjZzZWxmLVx1MDAzZXBhZ2UyKTtcbitcdHJldHVybiByZWFkX3BhZ2Uoc2VsZiwgc2VsZi1cdTAwM2VtYXBzX2ZkLCBcdTAwMjZzZWxmLVx1MDAzZXBhZ2UxKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICByZWFkX3BhZ2Uoc2VsZiwgc2VsZi1cdTAwM2VtYXBzX2ZkLCBcdTAwMjZzZWxmLVx1MDAzZXBhZ2UyKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgY29weV9saW5lKGNvbnN0IGNoYXIgKmxpbmVfc3RhcnQsIGNvbnN0IGNoYXIgKmxpbmVfZW5kLFxuQEAgLTMxNyw2ICszNzQsNjEgQEAgc3RhdGljIGJvb2wgcmVhZF9ib3VuZGFyeV9saW5lcyhGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmLFxuIFx0XHQgICAgICBcdTAwMjZmaXJzdF9saW5lLVx1MDAzZWVuZF9hZGRyKSA9PSAyO1xuIH1cbiBcbitzdGF0aWMgYm9vbCBwYXJzZV9zbWFwc19yb2xsdXAoRklYVFVSRV9EQVRBKHByb2NfbWFwc19yYWNlKSAqc2VsZixcbitcdFx0XHQgICAgICAgc3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyAqc3RhdHMpXG4re1xuK1x0dW5zaWduZWQgaW50IGRldl9tYWosIGRldl9taW4sIGlub2RlO1xuK1x0dW5zaWduZWQgbG9uZyBzdGFydCwgZW5kLCBvZmZzO1xuK1x0dW5zaWduZWQgbG9uZyB2YWx1ZTtcbitcdGNoYXIgbmFtZVszMl0sIHBlcm1bNV07XG4rXHRjaGFyICpjdXJyX3BvcztcbitcdGNoYXIgKmVuZF9wb3M7XG4rXHRjaGFyICpsaW5lX2VuZDtcbitcbitcdGlmIChsc2VlayhzZWxmLVx1MDAzZXJvbGx1cF9mZCwgMCwgU0VFS19TRVQpIFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoIXJlYWRfcGFnZShzZWxmLCBzZWxmLVx1MDAzZXJvbGx1cF9mZCwgXHUwMDI2c2VsZi1cdTAwM2VwYWdlMSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGN1cnJfcG9zID0gc2VsZi1cdTAwM2VwYWdlMS5kYXRhO1xuK1x0ZW5kX3BvcyA9IHNlbGYtXHUwMDNlcGFnZTEuZGF0YSArIHNlbGYtXHUwMDNlcGFnZTEuc2l6ZTtcbitcbitcdGxpbmVfZW5kID0gc3RyY2hyKGN1cnJfcG9zLCAnXFxuJyk7XG4rXHRpZiAoIWxpbmVfZW5kKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoc3NjYW5mKGN1cnJfcG9zLCBcIiVseC0lbHggJTRzICVseCAldToldSAldSAlMzFzXCIsXG4rXHRcdFx1MDAyNnN0YXJ0LCBcdTAwMjZlbmQsIHBlcm0sIFx1MDAyNm9mZnMsIFx1MDAyNmRldl9tYWosIFx1MDAyNmRldl9taW4sIFx1MDAyNmlub2RlLCBuYW1lKSAhPSA4KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAoc3RyY21wKG5hbWUsIFwiW3JvbGx1cF1cIikpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGZvciAoaW50IHN0YXQgPSAwOyBzdGF0IFx1MDAzYyBBUlJBWV9TSVpFKHNtYXBzX3JvbGx1cF9zdGF0X25hbWVzKTsgc3RhdCsrKSB7XG4rXHRcdGludCBsZW47XG4rXG4rXHRcdGN1cnJfcG9zID0gbGluZV9lbmQgKyAxO1xuK1x0XHRpZiAoY3Vycl9wb3MgXHUwMDNlPSBlbmRfcG9zKVxuK1x0XHRcdHJldHVybiBmYWxzZTtcbitcbitcdFx0bGluZV9lbmQgPSBzdHJjaHIoY3Vycl9wb3MsICdcXG4nKTtcbitcdFx0aWYgKCFsaW5lX2VuZClcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRcdGlmIChzc2NhbmYoY3Vycl9wb3MsIFwiJTMxcyAlbHUga0JcIiwgbmFtZSwgXHUwMDI2dmFsdWUpICE9IDIpXG4rXHRcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0XHRsZW4gPSBzdHJsZW4obmFtZSk7XG4rXHRcdGlmIChuYW1lW2xlbiAtIDFdICE9ICc6JyB8fCBzdHJuY21wKG5hbWUsIHNtYXBzX3JvbGx1cF9zdGF0X25hbWVzW3N0YXRdLCBsZW4gLSAxKSlcbitcdFx0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRcdHN0YXRzLVx1MDAzZXZhbHVlc1tzdGF0XSA9IHZhbHVlO1xuK1x0fVxuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIC8qIFRocmVhZCBzeW5jaHJvbml6YXRpb24gcm91dGluZXMgKi9cbiBzdGF0aWMgdm9pZCB3YWl0X2Zvcl9zdGF0ZShzdHJ1Y3Qgdm1hX21vZGlmaWVyX2luZm8gKm1vZF9pbmZvLCBlbnVtIHRlc3Rfc3RhdGUgc3RhdGUpXG4ge1xuQEAgLTM5Nyw2ICs1MDksNDEgQEAgc3RhdGljIGJvb2wgcHJpbnRfYm91bmRhcmllc19vbihib29sIGNvbmRpdGlvbiwgY29uc3QgY2hhciAqdGl0bGUsXG4gXHRyZXR1cm4gY29uZGl0aW9uO1xuIH1cbiBcbitzdGF0aWMgdm9pZCBwcmludF9zbWFwc19yb2xsdXBfc3RhdHMoY29uc3QgY2hhciAqdGl0bGUsIEZJWFRVUkVfREFUQShwcm9jX21hcHNfcmFjZSkgKnNlbGYsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKnN0YXRzKVxuK3tcbitcdHByaW50ZihcIiVzXCIsIHRpdGxlKTtcbitcdGZvciAoaW50IHN0YXQgPSAwOyBzdGF0IFx1MDAzYyBBUlJBWV9TSVpFKHNtYXBzX3JvbGx1cF9zdGF0X25hbWVzKTsgc3RhdCsrKVxuK1x0XHRwcmludGYoXCIlNjRzICVsdSBrQlxcblwiLCBzbWFwc19yb2xsdXBfc3RhdF9uYW1lc1tzdGF0XSwgc3RhdHMtXHUwMDNldmFsdWVzW3N0YXRdKTtcbit9XG4rXG4rc3RhdGljIGJvb2wgY21wX3NtYXBzX3JvbGx1cF9zdGF0KHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKnMxLFxuK1x0XHRcdFx0ICBzdHJ1Y3Qgc21hcHNfcm9sbHVwX3N0YXRzICpzMixcbitcdFx0XHRcdCAgZW51bSBzbWFwc19yb2xsdXBfc3RhdCBzdGF0KVxuK3tcbitcdHJldHVybiBzMS1cdTAwM2V2YWx1ZXNbc3RhdF0gPT0gczItXHUwMDNldmFsdWVzW3N0YXRdO1xuK31cbitcbitzdGF0aWMgYm9vbCBjb21wYXJlX3NtYXBzX3JvbGx1cChGSVhUVVJFX0RBVEEocHJvY19tYXBzX3JhY2UpICpzZWxmLFxuK1x0XHRcdFx0IHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKmV4cGVjdGVkLFxuK1x0XHRcdFx0IHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgKmFjdHVhbClcbit7XG4rXHQvKlxuK1x0ICogQ2xlYW4vZGlydHkgbWV0cmljcyBtaWdodCBjaGFuZ2UgYnV0IFBzcy1yZWxhdGVkIG9uZXNcbitcdCAqIHNob3VsZCBzdGF5IGNvbnN0YW50LlxuK1x0ICovXG4rXHRpZiAoY21wX3NtYXBzX3JvbGx1cF9zdGF0KGV4cGVjdGVkLCBhY3R1YWwsIFBzcykgXHUwMDI2XHUwMDI2XG4rXHQgICAgY21wX3NtYXBzX3JvbGx1cF9zdGF0KGV4cGVjdGVkLCBhY3R1YWwsIFBzc19Bbm9uKSBcdTAwMjZcdTAwMjZcbitcdCAgICBjbXBfc21hcHNfcm9sbHVwX3N0YXQoZXhwZWN0ZWQsIGFjdHVhbCwgUHNzX0ZpbGUpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGNtcF9zbWFwc19yb2xsdXBfc3RhdChleHBlY3RlZCwgYWN0dWFsLCBQc3NfU2htZW0pKVxuK1x0XHRyZXR1cm4gdHJ1ZTtcbitcbitcdHByaW50X3NtYXBzX3JvbGx1cF9zdGF0cyhcIkV4cGVjdGVkIHN0YXRzOlwiLCBzZWxmLCBleHBlY3RlZCk7XG4rXHRwcmludF9zbWFwc19yb2xsdXBfc3RhdHMoXCJBY3R1YWwgc3RhdHM6XCIsIHNlbGYsIGFjdHVhbCk7XG4rXG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHJlcG9ydF90ZXN0X3N0YXJ0KGNvbnN0IGNoYXIgKm5hbWUsIGJvb2wgdmVyYm9zZSlcbiB7XG4gXHRpZiAodmVyYm9zZSlcbkBAIC01NzIsNiArNzE5LDcgQEAgRklYVFVSRV9TRVRVUChwcm9jX21hcHNfcmFjZSlcbiBcdHVuc2lnbmVkIGxvbmcgZmlyc3RfbWFwX2FkZHI7XG4gXHR1bnNpZ25lZCBsb25nIGxhc3RfbWFwX2FkZHI7XG4gXHR1bnNpZ25lZCBsb25nIGR1cmF0aW9uX3NlYztcbitcdGNoYXIgcm9sbHVwX2ZuYW1lWzMyXTtcbiBcdGNoYXIgZm5hbWVbMzJdO1xuIFxuIFx0c2VsZi1cdTAwM2VwYWdlX3NpemUgPSAodW5zaWduZWQgbG9uZylzeXNjb25mKF9TQ19QQUdFU0laRSk7XG5AQCAtNjQ5LDYgKzc5Nyw5IEBAIEZJWFRVUkVfU0VUVVAocHJvY19tYXBzX3JhY2UpXG4gXHRcdGJyZWFrO1xuIFx0Y2FzZSBTTUFQUzpcbiBcdFx0c3ByaW50ZihmbmFtZSwgXCIvcHJvYy8lZC9zbWFwc1wiLCBzZWxmLVx1MDAzZXBpZCk7XG4rXHRcdHNwcmludGYocm9sbHVwX2ZuYW1lLCBcIi9wcm9jLyVkL3NtYXBzX3JvbGx1cFwiLCBzZWxmLVx1MDAzZXBpZCk7XG4rXHRcdHNlbGYtXHUwMDNlcm9sbHVwX2ZkID0gb3Blbihyb2xsdXBfZm5hbWUsIE9fUkRPTkxZKTtcbitcdFx0QVNTRVJUX05FKHNlbGYtXHUwMDNlcm9sbHVwX2ZkLCAtMSk7XG4gXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0a3NmdF9leGl0X2ZhaWwoKTtcbkBAIC03MTEsNiArODYyLDggQEAgRklYVFVSRV9URUFSRE9XTihwcm9jX21hcHNfcmFjZSlcbiBcdGZvciAoaW50IGkgPSAwOyBpIFx1MDAzYyBzZWxmLVx1MDAzZXZtYV9jb3VudDsgaSsrKVxuIFx0XHRtdW5tYXAoc2VsZi1cdTAwM2Vtb2RfaW5mby1cdTAwM2VjaGlsZF9tYXBwZWRfYWRkcltpXSwgc2VsZi1cdTAwM2VwYWdlX3NpemUpO1xuIFx0Y2xvc2Uoc2VsZi1cdTAwM2VtYXBzX2ZkKTtcbitcdGlmIChzZWxmLVx1MDAzZW1hcHNfZmlsZSA9PSBTTUFQUylcbitcdFx0Y2xvc2Uoc2VsZi1cdTAwM2Vyb2xsdXBfZmQpO1xuIFx0d2FpdHBpZChzZWxmLVx1MDAzZXBpZCwgXHUwMDI2c3RhdHVzLCAwKTtcbiBcdG11bm1hcChzZWxmLVx1MDAzZW1vZF9pbmZvLCBzZWxmLVx1MDAzZXNoYXJlZF9tZW1fc2l6ZSk7XG4gfVxuQEAgLTcyMyw2ICs4NzYsNyBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fc3BsaXQpXG4gXHRzdHJ1Y3QgbGluZV9jb250ZW50IHNwbGl0X2ZpcnN0X2xpbmU7XG4gXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2xhc3RfbGluZTtcbiBcdHN0cnVjdCBsaW5lX2NvbnRlbnQgcmVzdG9yZWRfZmlyc3RfbGluZTtcbitcdHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgb3JpZ19zdGF0cztcbiBcbiBcdHdhaXRfZm9yX3N0YXRlKG1vZF9pbmZvLCBTRVRVUF9SRUFEWSk7XG4gXG5AQCAtNzM2LDYgKzg5MCw4IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9zcGxpdClcbiBcdHJlcG9ydF90ZXN0X3N0YXJ0KFwiVGVhcmluZyBmcm9tIHNwbGl0XCIsIHNlbGYtXHUwMDNldmVyYm9zZSk7XG4gXHRBU1NFUlRfVFJVRShjYXB0dXJlX21vZF9wYXR0ZXJuKHNlbGYsIFx1MDAyNnNwbGl0X2xhc3RfbGluZSwgXHUwMDI2c3BsaXRfZmlyc3RfbGluZSxcbiBcdFx0XHRcdFx0XHUwMDI2cmVzdG9yZWRfbGFzdF9saW5lLCBcdTAwMjZyZXN0b3JlZF9maXJzdF9saW5lKSk7XG4rXHRpZiAoc2VsZi1cdTAwM2VtYXBzX2ZpbGUgPT0gU01BUFMpXG4rXHRcdEFTU0VSVF9UUlVFKHBhcnNlX3NtYXBzX3JvbGx1cChzZWxmLCBcdTAwMjZvcmlnX3N0YXRzKSk7XG4gXG4gXHQvKiBOb3cgc3RhcnQgY29uY3VycmVudCBtb2RpZmljYXRpb25zIGZvciBzZWxmLVx1MDAzZWR1cmF0aW9uX3NlYyAqL1xuIFx0c2lnbmFsX3N0YXRlKG1vZF9pbmZvLCBURVNUX1JFQURZKTtcbkBAIC03OTksNiArOTU1LDExIEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9zcGxpdClcbiBcdFx0XHRcdCAgICAgdm1hX2VuZCA9PSBzZWxmLVx1MDAzZWxhc3RfbGluZS5lbmRfYWRkcikgfHxcbiBcdFx0XHRcdCAgICAodm1hX3N0YXJ0ID09IHNwbGl0X2ZpcnN0X2xpbmUuc3RhcnRfYWRkciBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgICAgdm1hX2VuZCA9PSBzcGxpdF9maXJzdF9saW5lLmVuZF9hZGRyKSk7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0c3RydWN0IHNtYXBzX3JvbGx1cF9zdGF0cyBzdGF0cztcbitcbitcdFx0XHRBU1NFUlRfVFJVRShwYXJzZV9zbWFwc19yb2xsdXAoc2VsZiwgXHUwMDI2c3RhdHMpKTtcbitcdFx0XHRBU1NFUlRfVFJVRShjb21wYXJlX3NtYXBzX3JvbGx1cChzZWxmLCBcdTAwMjZvcmlnX3N0YXRzLCBcdTAwMjZzdGF0cykpO1xuIFx0XHR9XG4gXHRcdGNsb2NrX2dldHRpbWUoQ0xPQ0tfTU9OT1RPTklDX0NPQVJTRSwgXHUwMDI2ZW5kX3RzKTtcbiBcdFx0ZW5kX3Rlc3RfaXRlcmF0aW9uKFx1MDAyNmVuZF90cywgc2VsZi1cdTAwM2V2ZXJib3NlKTtcbkBAIC04MTcsNiArOTc4LDcgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3Jlc2l6ZSlcbiBcdHN0cnVjdCBsaW5lX2NvbnRlbnQgc2hydW5rX2ZpcnN0X2xpbmU7XG4gXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2xhc3RfbGluZTtcbiBcdHN0cnVjdCBsaW5lX2NvbnRlbnQgcmVzdG9yZWRfZmlyc3RfbGluZTtcbitcdHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgb3JpZ19zdGF0cztcbiBcbiBcdHdhaXRfZm9yX3N0YXRlKG1vZF9pbmZvLCBTRVRVUF9SRUFEWSk7XG4gXG5AQCAtODMwLDYgKzk5Miw4IEBAIFRFU1RfRihwcm9jX21hcHNfcmFjZSwgdGVzdF9tYXBzX3RlYXJpbmdfZnJvbV9yZXNpemUpXG4gXHRyZXBvcnRfdGVzdF9zdGFydChcIlRlYXJpbmcgZnJvbSByZXNpemVcIiwgc2VsZi1cdTAwM2V2ZXJib3NlKTtcbiBcdEFTU0VSVF9UUlVFKGNhcHR1cmVfbW9kX3BhdHRlcm4oc2VsZiwgXHUwMDI2c2hydW5rX2xhc3RfbGluZSwgXHUwMDI2c2hydW5rX2ZpcnN0X2xpbmUsXG4gXHRcdFx0XHRcdFx1MDAyNnJlc3RvcmVkX2xhc3RfbGluZSwgXHUwMDI2cmVzdG9yZWRfZmlyc3RfbGluZSkpO1xuK1x0aWYgKHNlbGYtXHUwMDNlbWFwc19maWxlID09IFNNQVBTKVxuK1x0XHRBU1NFUlRfVFJVRShwYXJzZV9zbWFwc19yb2xsdXAoc2VsZiwgXHUwMDI2b3JpZ19zdGF0cykpO1xuIFxuIFx0LyogTm93IHN0YXJ0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBmb3Igc2VsZi1cdTAwM2VkdXJhdGlvbl9zZWMgKi9cbiBcdHNpZ25hbF9zdGF0ZShtb2RfaW5mbywgVEVTVF9SRUFEWSk7XG5AQCAtODgwLDYgKzEwNDQsMTEgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3Jlc2l6ZSlcbiBcdFx0XHRBU1NFUlRfVFJVRSh2bWFfc3RhcnQgPT0gc2VsZi1cdTAwM2VsYXN0X2xpbmUuc3RhcnRfYWRkciBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgICAodm1hX2VuZCAtIHZtYV9zdGFydCA9PSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSAqIDMgfHxcbiBcdFx0XHRcdCAgICAgdm1hX2VuZCAtIHZtYV9zdGFydCA9PSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSkpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgc3RhdHM7XG4rXG4rXHRcdFx0QVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsIFx1MDAyNnN0YXRzKSk7XG4rXHRcdFx0QVNTRVJUX1RSVUUoY29tcGFyZV9zbWFwc19yb2xsdXAoc2VsZiwgXHUwMDI2b3JpZ19zdGF0cywgXHUwMDI2c3RhdHMpKTtcbiBcdFx0fVxuIFx0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQ19DT0FSU0UsIFx1MDAyNmVuZF90cyk7XG4gXHRcdGVuZF90ZXN0X2l0ZXJhdGlvbihcdTAwMjZlbmRfdHMsIHNlbGYtXHUwMDNldmVyYm9zZSk7XG5AQCAtODk4LDYgKzEwNjcsNyBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fcmVtYXApXG4gXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlbWFwcGVkX2ZpcnN0X2xpbmU7XG4gXHRzdHJ1Y3QgbGluZV9jb250ZW50IHJlc3RvcmVkX2xhc3RfbGluZTtcbiBcdHN0cnVjdCBsaW5lX2NvbnRlbnQgcmVzdG9yZWRfZmlyc3RfbGluZTtcbitcdHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgb3JpZ19zdGF0cztcbiBcbiBcdHdhaXRfZm9yX3N0YXRlKG1vZF9pbmZvLCBTRVRVUF9SRUFEWSk7XG4gXG5AQCAtOTExLDYgKzEwODEsOCBAQCBURVNUX0YocHJvY19tYXBzX3JhY2UsIHRlc3RfbWFwc190ZWFyaW5nX2Zyb21fcmVtYXApXG4gXHRyZXBvcnRfdGVzdF9zdGFydChcIlRlYXJpbmcgZnJvbSByZW1hcFwiLCBzZWxmLVx1MDAzZXZlcmJvc2UpO1xuIFx0QVNTRVJUX1RSVUUoY2FwdHVyZV9tb2RfcGF0dGVybihzZWxmLCBcdTAwMjZyZW1hcHBlZF9sYXN0X2xpbmUsIFx1MDAyNnJlbWFwcGVkX2ZpcnN0X2xpbmUsXG4gXHRcdFx0XHRcdFx1MDAyNnJlc3RvcmVkX2xhc3RfbGluZSwgXHUwMDI2cmVzdG9yZWRfZmlyc3RfbGluZSkpO1xuK1x0aWYgKHNlbGYtXHUwMDNlbWFwc19maWxlID09IFNNQVBTKVxuK1x0XHRBU1NFUlRfVFJVRShwYXJzZV9zbWFwc19yb2xsdXAoc2VsZiwgXHUwMDI2b3JpZ19zdGF0cykpO1xuIFxuIFx0LyogTm93IHN0YXJ0IGNvbmN1cnJlbnQgbW9kaWZpY2F0aW9ucyBmb3Igc2VsZi1cdTAwM2VkdXJhdGlvbl9zZWMgKi9cbiBcdHNpZ25hbF9zdGF0ZShtb2RfaW5mbywgVEVTVF9SRUFEWSk7XG5AQCAtOTYzLDYgKzExMzUsMTEgQEAgVEVTVF9GKHByb2NfbWFwc19yYWNlLCB0ZXN0X21hcHNfdGVhcmluZ19mcm9tX3JlbWFwKVxuIFx0XHRcdFx0ICAgICB2bWFfZW5kIC0gdm1hX3N0YXJ0ID09IHNlbGYtXHUwMDNlcGFnZV9zaXplICogMykgfHxcbiBcdFx0XHRcdCAgICAodm1hX3N0YXJ0ID09IHNlbGYtXHUwMDNlbGFzdF9saW5lLnN0YXJ0X2FkZHIgKyBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSBcdTAwMjZcdTAwMjZcbiBcdFx0XHRcdCAgICAgdm1hX2VuZCAtIHZtYV9zdGFydCA9PSBzZWxmLVx1MDAzZXBhZ2Vfc2l6ZSkpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdHN0cnVjdCBzbWFwc19yb2xsdXBfc3RhdHMgc3RhdHM7XG4rXG4rXHRcdFx0QVNTRVJUX1RSVUUocGFyc2Vfc21hcHNfcm9sbHVwKHNlbGYsIFx1MDAyNnN0YXRzKSk7XG4rXHRcdFx0QVNTRVJUX1RSVUUoY29tcGFyZV9zbWFwc19yb2xsdXAoc2VsZiwgXHUwMDI2b3JpZ19zdGF0cywgXHUwMDI2c3RhdHMpKTtcbiBcdFx0fVxuIFx0XHRjbG9ja19nZXR0aW1lKENMT0NLX01PTk9UT05JQ19DT0FSU0UsIFx1MDAyNmVuZF90cyk7XG4gXHRcdGVuZF90ZXN0X2l0ZXJhdGlvbihcdTAwMjZlbmRfdHMsIHNlbGYtXHUwMDNldmVyYm9zZSk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOTozODo0MS41NDg2NjU0MTJaIiwiU2VxIjoyMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTcyMzc4MzY1NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFdmFsdWF0aW5nIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IFJpc2tzIGluIHRoZSBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIHNlcmllcyBuZWNlc3NpdGF0ZXMgYSBkZWRpY2F0ZWQgS01TQU4gc2Vzc2lvbiBkdWUgdG8gcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGV4cG9zdXJlcy4gTGV0J3MgZGlnIGluLlxuXG5UaGUgcGF0Y2ggdG91Y2hlcyBgZnMvcHJvYy90YXNrX21tdS5jYCBhbmQgYSBzZWxmdGVzdCwgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL3Byb2MvcHJvYy1tYXBzLXJhY2UuY2AuIFRoZSBjb3JlIGNoYW5nZXMgc2VlbSB0byBiZSBpbiBgZnMvcHJvYy90YXNrX21tdS5jYC4gTXkgaW5pdGlhbCByZWFkIHNob3dzOlxuXG4qICAgQSBsb3Qgb2YgcmVmYWN0b3JpbmcgYW5kIGNsZWFudXAgd2l0aGluIHRoZSBgcHJvY19tYXBzX2xvY2tpbmdfY3R4YCBoZWxwZXIgZnVuY3Rpb25zLiBUaGV5J3ZlIGJlZW4gc2ltcGxpZmllZCwgaW5saW5lZCwgYW5kIHNvbWUgcmVtb3ZlZC4gVGhpcyBkb2Vzbid0IHNjcmVhbSBcInVuaW5pdGlhbGl6ZWQgbWVtb3J5LFwiIGJ1dCBJJ2xsIGtlZXAgYW4gZXllIG91dCBmb3IgYW55IHN1YnRsZSBlZmZlY3RzIG9mIHRoZSByZWZhY3RvcmluZy5cblxuKiAgIGBzbWFwX2dhdGhlcl9zdGF0c2AgaGFzIHNlZW4gc29tZSBjaGFuZ2VzLCBub3RhYmx5IHRvIGhvdyB0aGUgYHN0YXJ0YCBwYXJhbWV0ZXIgaXMgaGFuZGxlZC4gVGhlcmUncyBsb2dpYyB0byBjaGVjayBpZiBgc3RhcnRgIGlzIHdpdGhpbiB0aGUgVk1BIHJhbmdlLiBUaGlzIGlzIGludGVyZXN0aW5nOiBgY29uc3QgYm9vbCBpc19wYXJ0aWFsID0gc3RhcnQgXHUwMDNlIHZtYS1cdTAwM2V2bV9zdGFydDtgIGFuZCB0aGUgY2hlY2tzIGBpZiAoc3RhcnQgXHUwMDNjIHZtYS1cdTAwM2V2bV9zdGFydCB8fCBzdGFydCBcdTAwM2U9IHZtYS1cdTAwM2V2bV9lbmQpIHJldHVybjtgIFRoZSB1c2Ugb2YgYHdhbGtfcGFnZV9yYW5nZV92bWFgIHdpdGggYSBwb3RlbnRpYWxseSBzaGlmdGVkIGBzdGFydGAgaXMgc29tZXRoaW5nIEkgbmVlZCB0byBjYXJlZnVsbHkgY29uc2lkZXI7IGFueSBhc3N1bXB0aW9ucyBhYm91dCBpbml0aWFsIG1lbW9yeSBzdGF0ZSBpbiB0aGF0IGZ1bmN0aW9uIGNvdWxkIGJlIGFmZmVjdGVkLlxuXG4qICAgYHNob3dfc21hcHNfcm9sbHVwYCBpcyBzd2l0Y2hpbmcgdG8gYHByb2NfZ2V0X3ZtYWAgYW5kIFZNQSBsb2NraW5nL1JDVSBsb2NraW5nLCBtb3ZpbmcgYXdheSBmcm9tIGhvbGRpbmcgdGhlIGBtbWFwX3JlYWRfbG9ja2AgYWNyb3NzIHRoZSBlbnRpcmUgcm9sbHVwLiBUaGlzIGlzIGEgZ29vZCBtb3ZlIGZvciBjb25jdXJyZW5jeSwgYnV0IFZNQSBsb2NraW5nIGhhcyBhIGhpc3Rvcnkgb2Ygc3VidGxlIHJhY2UgY29uZGl0aW9ucy4gSXQgaW5pdGlhbGl6ZXMgYHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyBtc3MgPSB7fTtgLCB3aGljaCBpcyBnb29kIHRvIHNlZSBhcyBpdCB6ZXJvcyBpdCBvdXQuIE91dHB1dHRpbmcgd2l0aCBgX19zaG93X3NtYXAobSwgXHUwMDI2bXNzLCB0cnVlKTtgIHNob3VsZCBiZSBmaW5lLiBUaGUgbW92ZSB0byBhIG1vcmUgZ3JhbnVsYXIgbG9ja2luZyBzY2hlbWUgaXMgcHJvbWlzaW5nIGJ1dCBuZWVkcyBhIHRob3JvdWdoIGluc3BlY3Rpb24uXG5cbiogICBWYXJpb3VzIGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbnMgaGF2ZSBiZWVuIGNoYW5nZWQgdG8gYHN0YXRpY2AuIFRoaXMgaXMgYSBjb2RlIHN0eWxlIGNoYW5nZSwgcHJvYmFibHkgbm90IHJlbGV2YW50LlxuXG4qICAgVGhlIHNlbGZ0ZXN0cyBhcmUgdXBkYXRlZCBmb3IgY29uY3VycmVudCByYWNlcyBpbnZvbHZpbmcgYHNtYXBzX3JvbGx1cGAuIEdvb2QsIHRoZSB0ZXN0aW5nIGlzIGJlaW5nIGltcHJvdmVkLCBidXQgaXQgaW5kaWNhdGVzIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgd2VyZSBpZGVudGlmaWVkOyB0aGlzIHdhcnJhbnRzIGEgY2xvc2VyIGxvb2sgYXQgdGhlIGxvY2tpbmcgY2hhbmdlcy5cblxuVG8gY29uZmlybSB0aGUgcG90ZW50aWFsIHJpc2tzLCBJIG5lZWQgdG8gZGVsdmUgaW50byBgc2hvd19zbWFwc19yb2xsdXBgLCBgc21hcF9nYXRoZXJfc3RhdHNgLCBhbmQgYHByb2NfZ2V0X3ZtYWAgaW4gZGV0YWlsLiBJJ2xsIHVzZSBjb2Rlc2VhcmNoLCBncmVwcGVyLCBvciBkaXJlY3RseSByZWFkIHRoZSBmaWxlcyBpZiBuZWNlc3NhcnksIHBheWluZyBjbG9zZSBhdHRlbnRpb24gdG8gYW55IG1lbW9yeSBvcGVyYXRpb25zLCBsb2NraW5nIHNjaGVtZXMsIGFuZCBhc3N1bXB0aW9ucyBhYm91dCBpbml0aWFsaXplZCBtZW1vcnkuIFRoZSBnb2FsIGlzIHRvIGlkZW50aWZ5IGFueSBhcmVhcyB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSByZWFkIG9yIGV4cG9zZWQgZHVlIHRvIHRoZSBjaGFuZ2VzLCBlc3BlY2lhbGx5IHdpdGhpbiB0aGUgY29udGV4dCBvZiB0aGUgY29uY3VycmVudCBhY2Nlc3MgaGlnaGxpZ2h0ZWQgYnkgdGhlIHNlbGZ0ZXN0cy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIxODgsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDUsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOTozODo0Ny4yNzI0NTMxNDlaIiwiU2VxIjoyMiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4NTA5NDg5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInByb2NfZ2V0X3ZtYVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9wcm9jL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmM9MTk1PXN0YXRpYyB2b2lkIHJlYWNxdWlyZV9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTIwNC1cXG5mcy9wcm9jL3Rhc2tfbW11LmM6MjA1OnN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByb2NfZ2V0X3ZtYShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcHBvcylcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjA2LXtcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0yMzc9c3RhdGljIHZvaWQgKm1fc3RhcnQoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBwb3MpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjcyLVxcbmZzL3Byb2MvdGFza19tbXUuYzoyNzM6XFx0cmV0dXJuIHByb2NfZ2V0X3ZtYShtLCBwcG9zKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjc0LX1cXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0yNzY9c3RhdGljIHZvaWQgKm1fbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYsIGxvZmZfdCAqcHBvcylcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0yODEtXFx0fVxcbmZzL3Byb2MvdGFza19tbXUuYzoyODI6XFx0cmV0dXJuIHByb2NfZ2V0X3ZtYShtLCBwcG9zKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMjgzLX1cXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYz0xMzY2PXN0YXRpYyBpbnQgc2hvd19zbWFwc19yb2xsdXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxuZnMvcHJvYy90YXNrX21tdS5jLTEzOTEtXFx0dm1hX2l0ZXJfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlaXRlciwgbW0sIDApO1xcbmZzL3Byb2MvdGFza19tbXUuYzoxMzkyOlxcdHZtYSA9IHByb2NfZ2V0X3ZtYShtLCBcXHUwMDI2cG9zKTtcXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTM5My1cXHRpZiAodW5saWtlbHkoIXZtYSkpXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTQzOC1cXHRcXHR9XFxuZnMvcHJvYy90YXNrX21tdS5jOjE0Mzk6XFx0XFx0dm1hID0gcHJvY19nZXRfdm1hKG0sIFxcdTAwMjZwb3MpO1xcbmZzL3Byb2MvdGFza19tbXUuYy0xNDQwLVxcdH1cXG4tLVxcbmZzL3Byb2MvdGFza19ub21tdS5jPTE3Mz1zdGF0aWMgaW50IHNob3dfbWFwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqX3ApXFxuLS1cXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYy0xNzctXFxuZnMvcHJvYy90YXNrX25vbW11LmM6MTc4OnN0YXRpYyBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnByb2NfZ2V0X3ZtYShzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYsXFxuZnMvcHJvYy90YXNrX25vbW11LmMtMTc5LVxcdFxcdFxcdFxcdFxcdFxcdGxvZmZfdCAqcHBvcylcXG4tLVxcbmZzL3Byb2MvdGFza19ub21tdS5jPTE5Mj1zdGF0aWMgdm9pZCAqbV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcHBvcylcXG4tLVxcbmZzL3Byb2MvdGFza19ub21tdS5jLTE5Ny1cXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYzoxOTg6XFx0LyogU2VlIHByb2NfZ2V0X3ZtYSgpLiBaZXJvIGF0IHRoZSBzdGFydCBvciBhZnRlciBsc2Vlay4gKi9cXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYy0xOTktXFx0aWYgKGxhc3RfYWRkciA9PSAtMVVMKVxcbi0tXFxuZnMvcHJvYy90YXNrX25vbW11LmMtMjIyLVxcbmZzL3Byb2MvdGFza19ub21tdS5jOjIyMzpcXHRyZXR1cm4gcHJvY19nZXRfdm1hKHByaXYsIHBwb3MpO1xcbmZzL3Byb2MvdGFza19ub21tdS5jLTIyNC19XFxuLS1cXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYz0yNDA9c3RhdGljIHZvaWQgKm1fbmV4dChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKl9wLCBsb2ZmX3QgKnBwb3MpXFxuZnMvcHJvYy90YXNrX25vbW11LmMtMjQxLXtcXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYzoyNDI6XFx0cmV0dXJuIHByb2NfZ2V0X3ZtYShtLVxcdTAwM2Vwcml2YXRlLCBwcG9zKTtcXG5mcy9wcm9jL3Rhc2tfbm9tbXUuYy0yNDMtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wN1QwOTozODo0Ny4zMjA5NjgwODhaIiwiU2VxIjoyMywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjc5MjU2MzU4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBBY2NvdW50aW5nIGluIGBmcy9wcm9jL3Rhc2tfbW11LmNgKipcblxuQWxyaWdodCwgSSdtIHRoaW5raW5nIGFib3V0IGRpZ2dpbmcgaW50byB0aGUgbWVtb3J5IGFjY291bnRpbmcgZGV0YWlscywgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUga2VybmVsJ3MgcHJvY2VzcyBpbmZvcm1hdGlvbiBoYW5kbGluZy4gTXkgZ3V0IHRlbGxzIG1lIHRoZSBrZXkgcGllY2VzIGFyZSBnb2luZyB0byBiZSBhcm91bmQgdGhlIGBzaG93X3NtYXBzX3JvbGx1cGAgZnVuY3Rpb24gYW5kIHRoZSBgcHJvY19nZXRfdm1hYCBmdW5jdGlvbiBpbiBgZnMvcHJvYy90YXNrX21tdS5jYC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhvc2UgZnVuY3Rpb25zIGludGVyYWN0IHRvIGNhbGN1bGF0ZSBhbmQgcHJlc2VudCB0aGUgcGVyLXByb2Nlc3MgbWVtb3J5IHN0YXRpc3RpY3MgdmlhIC9wcm9jL1twaWRdL3NtYXBzIGFuZCAvcHJvYy9bcGlkXS9tYXBzLiBJJ20gZXNwZWNpYWxseSBjdXJpb3VzIGFib3V0IHdoZXJlIHRoZSByb2xsLXVwIGxvZ2ljIGlzIGhhbmRsZWQuIEFtIEkgcmlnaHQgaW4gdGhpbmtpbmcgdGhlIGBzaG93X3NtYXBzX3JvbGx1cGAgZnVuY3Rpb24gd291bGQgYmUgd2hlcmUgbW9zdCBvZiB0aGUgd29yayBoYXBwZW5zIGFnZ3JlZ2F0aW5nIFZNQSBzdGF0cz8gQW5kIGBwcm9jX2dldF92bWFgIGlzIHRoZSBWTUEgaXRlcmF0b3IuIEkgd29uZGVyIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBwb3RlbnRpYWwgaW5hY2N1cmFjaWVzIGluIHRoZSBhY2NvdW50aW5nLCBvciBtYXliZSBzb21lIGxlc3MtdGhhbi1vYnZpb3VzIGVkZ2UgY2FzZXMgSSBzaG91bGQgYmUgYXdhcmUgb2YuIExldCdzIHNlZSBpZiB0aGVyZSdzIGFueXRoaW5nIGludGVyZXN0aW5nIHRvIHVucGFjay4gVGhpcyBmZWVscyBsaWtlIHRoZSByaWdodCBwbGFjZSB0byBiZWdpbiwgdG8gcGlucG9pbnQgc29tZSBtZW1vcnkgYWNjb3VudGluZyBvZGRpdGllcyB0aGF0IEkndmUgc2VlbiBpbiB0aGUgcGFzdC4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBzb3VyY2UhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MjQzLCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6Mzg6NTAuMTEzNTM1NTMyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNjEyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJmcy9wcm9jL3Rhc2tfbW11LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTk1LFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTk1OlxcdHN0YXRpYyB2b2lkIHJlYWNxdWlyZV9yY3Uoc3RydWN0IHByb2NfbWFwc19wcml2YXRlICpwcml2KVxcbiAxOTY6XFx0e1xcbiAxOTc6XFx0XFx0aWYgKHByaXYtXFx1MDAzZWxvY2tfY3R4Lm1tYXBfbG9ja2VkKVxcbiAxOTg6XFx0XFx0XFx0cmV0dXJuO1xcbiAxOTk6XFx0XFxuIDIwMDpcXHRcXHRyY3VfcmVhZF9sb2NrKCk7XFxuIDIwMTpcXHRcXHQvKiBSZWluaXRpYWxpemUgdGhlIGl0ZXJhdG9yLiAqL1xcbiAyMDI6XFx0XFx0dm1hX2l0ZXJfc2V0KFxcdTAwMjZwcml2LVxcdTAwM2VpdGVyLCBwcml2LVxcdTAwM2Vsb2NrX2N0eC5sb2NrZWRfdm1hLVxcdTAwM2V2bV9lbmQpO1xcbiAyMDM6XFx0fVxcbiAyMDQ6XFx0XFxuIDIwNTpcXHRzdGF0aWMgc3RydWN0IHZtX2FyZWFfc3RydWN0ICpwcm9jX2dldF92bWEoc3RydWN0IHNlcV9maWxlICptLCBsb2ZmX3QgKnBwb3MpXFxuIDIwNjpcXHR7XFxuIDIwNzpcXHRcXHRzdHJ1Y3QgcHJvY19tYXBzX3ByaXZhdGUgKnByaXYgPSBtLVxcdTAwM2Vwcml2YXRlO1xcbiAyMDg6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWE7XFxuIDIwOTpcXHRcXG4gMjEwOlxcdHJldHJ5OlxcbiAyMTE6XFx0XFx0dm1hID0gZ2V0X25leHRfdm1hKHByaXYsICpwcG9zKTtcXG4gMjEyOlxcdFxcdC8qIEVJTlRSIG9mIEVBR0FJTiBpcyBwb3NzaWJsZSAqL1xcbiAyMTM6XFx0XFx0aWYgKElTX0VSUih2bWEpKSB7XFxuIDIxNDpcXHRcXHRcXHRpZiAoUFRSX0VSUih2bWEpID09IC1FQUdBSU4gXFx1MDAyNlxcdTAwMjYgZmFsbGJhY2tfdG9fbW1hcF9sb2NrKHByaXYsICpwcG9zKSlcXG4gMjE1OlxcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuIDIxNjpcXHRcXG4gMjE3OlxcdFxcdFxcdHJldHVybiB2bWE7XFxuIDIxODpcXHRcXHR9XFxuIDIxOTpcXHRcXG4gMjIwOlxcdFxcdC8qIFN0b3JlIHByZXZpb3VzIHBvc2l0aW9uIHRvIGJlIGFibGUgdG8gcmVzdGFydCBpZiBuZWVkZWQgKi9cXG4gMjIxOlxcdFxcdHByaXYtXFx1MDAzZWxhc3RfcG9zID0gKnBwb3M7XFxuIDIyMjpcXHRcXHRpZiAodm1hKSB7XFxuIDIyMzpcXHRcXHRcXHQvKlxcbiAyMjQ6XFx0XFx0XFx0ICogVHJhY2sgdGhlIGVuZCBvZiB0aGUgcmVwb3J0ZWQgdm1hIHRvIGVuc3VyZSBwb3NpdGlvbiBjaGFuZ2VzXFxuIDIyNTpcXHRcXHRcXHQgKiBldmVuIGlmIHByZXZpb3VzIHZtYSB3YXMgbWVyZ2VkIHdpdGggdGhlIG5leHQgdm1hIGFuZCB3ZVxcbiAyMjY6XFx0XFx0XFx0ICogZm91bmQgdGhlIGV4dGVuZGVkIHZtYSB3aXRoIHRoZSBzYW1lIHZtX3N0YXJ0LlxcbiAyMjc6XFx0XFx0XFx0ICovXFxuIDIyODpcXHRcXHRcXHQqcHBvcyA9IHZtYS1cXHUwMDNldm1fZW5kO1xcbiAyMjk6XFx0XFx0fSBlbHNlIHtcXG4gMjMwOlxcdFxcdFxcdCpwcG9zID0gU0VOVElORUxfVk1BX0dBVEU7XFxuIDIzMTpcXHRcXHRcXHR2bWEgPSBnZXRfZ2F0ZV92bWEocHJpdi1cXHUwMDNlbG9ja19jdHgubW0pO1xcbiAyMzI6XFx0XFx0fVxcbiAyMzM6XFx0XFxuIDIzNDpcXHRcXHRyZXR1cm4gdm1hO1xcbiAyMzU6XFx0fVxcbiAyMzY6XFx0XFxuIDIzNzpcXHRzdGF0aWMgdm9pZCAqbV9zdGFydChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIGxvZmZfdCAqcHBvcylcXG4gMjM4OlxcdHtcXG4gMjM5OlxcdFxcdHN0cnVjdCBwcm9jX21hcHNfcHJpdmF0ZSAqcHJpdiA9IG0tXFx1MDAzZXByaXZhdGU7XFxuIDI0MDpcXHRcXHRzdHJ1Y3QgcHJvY19tYXBzX2xvY2tpbmdfY3R4ICpsb2NrX2N0eDtcXG4gMjQxOlxcdFxcdGxvZmZfdCBsYXN0X2FkZHIgPSAqcHBvcztcXG4gMjQyOlxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tO1xcbiAyNDM6XFx0XFxuIDI0NDpcXHRcXHQvKiBTZWUgbV9uZXh0KCkuIFplcm8gYXQgdGhlIHN0YXJ0IG9yIGFmdGVyIGxzZWVrLiAqL1xcbiAyNDU6XFx0XFx0aWYgKGxhc3RfYWRkciA9PSBTRU5USU5FTF9WTUFfRU5EKVxcbiAyNDY6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDI0NzpcXHRcXG4gMjQ4OlxcdFxcdHByaXYtXFx1MDAzZXRhc2sgPSBnZXRfcHJvY190YXNrKHByaXYtXFx1MDAzZWlub2RlKTtcXG4gMjQ5OlxcdFxcdGlmICghcHJpdi1cXHUwMDNldGFzaylcXG4gMjUwOlxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FU1JDSCk7XFxuIDI1MTpcXHRcXG4gMjUyOlxcdFxcdGxvY2tfY3R4ID0gXFx1MDAyNnByaXYtXFx1MDAzZWxvY2tfY3R4O1xcbiAyNTM6XFx0XFx0bW0gPSBsb2NrX2N0eC1cXHUwMDNlbW07XFxuIDI1NDpcXHRcXHRpZiAoIW1tIHx8ICFtbWdldF9ub3RfemVybyhtbSkpIHtcXG4gMjU1OlxcdFxcdFxcdHB1dF90YXNrX3N0cnVjdChwcml2LVxcdTAwM2V0YXNrKTtcXG4gMjU2OlxcdFxcdFxcdHByaXYtXFx1MDAzZXRhc2sgPSBOVUxMO1xcbiAyNTc6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuIDI1ODpcXHRcXHR9XFxuIDI1OTpcXHRcXG4gMjYwOlxcdFxcdHJjdV9yZWFkX2xvY2soKTtcXG4gMjYxOlxcdFxcdHJlc2V0X2xvY2tfY3R4KGxvY2tfY3R4KTtcXG4gMjYyOlxcdFxcdC8qXFxuIDI2MzpcXHRcXHQgKiBSZXNldCBjdXJyZW50IHBvc2l0aW9uIGlmIGxhc3RfYWRkciB3YXMgc2V0IGJlZm9yZVxcbiAyNjQ6XFx0XFx0ICogYW5kIGl0J3Mgbm90IGEgc2VudGluZWwuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA3VDA5OjM4OjUwLjExMzc1MzkyM1oiLCJTZXEiOjI1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3NzY3NTEyOTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBQYXRjaCBmb3IgS01TQU4gSW1wbGljYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBleHBlcnQgZXllIGltbWVkaWF0ZWx5IGdvZXMgdG8gdGhlIHBvdGVudGlhbCBmb3IgS01TQU4gaXNzdWVzIOKAkyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50LCBzcGVjaWZpY2FsbHkgd2l0aCByZWdhcmRzIHRvIGAvcHJvYy8kcGlkL3NtYXBzX3JvbGx1cGAsIGFuZCBJIG5lZWQgdG8gYmUgKnN1cmUqIHdlJ3JlIG5vdCBpbnRyb2R1Y2luZyBhIHZ1bG5lcmFiaWxpdHkuXG5cbkZpcnN0LCBJJ20gbm90aW5nIHRoZSBsb2NraW5nIGNoYW5nZXMgd2l0aGluIGB0YXNrX21tdS5jYC4gVGhlIHJlZmFjdG9yaW5nIG9mIGBwcm9jX21hcHNfbG9ja2luZ19jdHhgIHNvdW5kcyBsaWtlIGEgZ29vZCBvcHRpbWl6YXRpb24sIGJ1dCBJIGhhdmUgdG8gZW5zdXJlIHRoYXQgdGhlIHJlbW92YWwgb2YgdGhlc2Ugd3JhcHBlcnMgaGFzbid0IGxlZnQgYW55IGdhcHMuIFRoZSBwcmltYXJ5IGNvbmNlcm4gaGVyZSBpcyByYWNlIGNvbmRpdGlvbnMgb3IgVUFGIHdoaWNoIHdpbGwgYmUgY2F1Z2h0IGJ5IEtBU0FOL0xPQ0tERVAsIGJ1dCBuZWVkcyB0byBiZSBldmFsdWF0ZWQgYXMgYSBmaXJzdCBzdGVwLlxuXG5OZXh0LCB0aGUgYHNtYXBfZ2F0aGVyX3N0YXRzYCBmdW5jdGlvbi4gSSdtIGZvY3VzaW5nIG9uIHRoZSBib3VuZHMgY2hlY2ssIHRoZSB1c2Ugb2YgYHdhbGtfcGFnZV9yYW5nZV92bWFgLCBhbmQgdGhlICpleHBsaWNpdCogemVyby1pbml0aWFsaXphdGlvbiBvZiB0aGUgYG1zc2Agc3RydWN0dXJlICggYHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyBtc3MgPSB7fTtgICkuIFRoYXQncyBhIGdvb2Qgc2lnbiDigJMgdGhhdCB6ZXJvLWluaXRpYWxpemF0aW9uICpndWFyYW50ZWVzKiBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBpbiB0aGF0IGZ1bmN0aW9uLiBJdCBpcyBpbXBvcnRhbnQgdG8gcmVtZW1iZXIgdGhhdCBLQVNBTiB3aWxsIGFsc28gY2F0Y2ggT09CIGlmIHNvbWV0aGluZyBpcyB3cml0dGVuIHRvIGFuIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlZ2lvbi5cblxuTm93LCBgc2hvd19zbWFwc19yb2xsdXBgOiBUaGlzIGlzIHdoZXJlIHRoaW5ncyBnZXQgaW50ZXJlc3RpbmcsIHN3aXRjaGluZyB0byBwZXItVk1BIGxvY2tzIGlzIGEgcG90ZW50aWFsbHkgZ3JlYXQgb3B0aW1pemF0aW9uLCBidXQgSSBoYXZlIHRvIG1ha2Ugc3VyZSB0aGUgbG9ja2luZyBpcyBjb3JyZWN0IGFuZCBkb2Vzbid0IGludHJvZHVjZSBhbnkgbmV3IHJhY2VzLiBUaGUgaGFuZGxpbmcgb2YgbG9jayBjb250ZW50aW9uIGFuZCBmYWxsYmFjayBpcyBhbHNvIGtleS4gQWdhaW4sIHRoZSBleHBsaWNpdCB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIGBtc3NgIGlzIGEgbWFqb3IgcG9zaXRpdmUgaGVyZS4gSSdtIGFsc28gcmV2aWV3aW5nIGhvdyB0aGUgZGF0YSBpcyBiZWluZyBmb3JtYXR0ZWQgYW5kIHdyaXR0ZW4gdG8gdGhlIGBzZXFfZmlsZWAgYnVmZmVyLCBhbmQgaXQgYWxsIGxvb2tzIHNhZmUgaW4gY29tYmluYXRpb24gd2l0aCB0aGUgemVyb2luZy5cblxuRmluYWxseSwgdGhlIHNlbGZ0ZXN0IGluIGBwcm9jLW1hcHMtcmFjZS5jYCBpcyB2ZXJ5IGltcG9ydGFudCB0byBlbnN1cmUgY29uY3VycmVudCBvcGVyYXRpb24gZG9lc24ndCBpbnRyb2R1Y2UgcmFjZXMsIGVzcGVjaWFsbHkgd2l0aCBWTUEgc3BsaXRzL3Jlc2l6ZXMvcmVtYXBzLiBUaGlzIGlzIHRoZSB0ZXN0aW5nIHRoYXQgbmVlZHMgdG8gY29uZmlybSBubyBkYXRhIHJhY2VzIHdlcmUgaW50cm9kdWNlZC5cblxuTm93LCB0aGUgY3J1Y2lhbCBxdWVzdGlvbjogYXJlIHRoZXJlIGFueSAqdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MqPyBJJ3ZlIHN5c3RlbWF0aWNhbGx5IHJldmlld2VkIHRoZSBwYXRjaC4gVGhlIGFuc3dlciBpcyAqbm8qLiBUaGVyZSBhcmUgKm5vKiBuZXcgYWxsb2NhdGlvbnMgb3Igc3RydWN0dXJlcyB0aGF0IGFyZW4ndCBiZWluZyB6ZXJvZWQsIHRoZSBkYXRhIGNvcGllZCB0byB1c2VyIHNwYWNlIGlzIGVpdGhlciBleHBsaWNpdGx5IGZvcm1hdHRlZCBvciBwYXNzZXMgdGhyb3VnaCBgY29weV90b191c2VyYCwgYW5kIHRoZXJlJ3Mgbm8gZXZpZGVuY2Ugb2YgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIGJ5dGVzIGJlaW5nIGNvcGllZC4gQWxsIGNoYW5nZXMgYXJlIGFib3V0IGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbiwgYWxvbmcgd2l0aCBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zLiBUaGlzIHBhdGNoIGRvZXNuJ3QgaW50cm9kdWNlIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCBwYXJ0aWFsIHN0cnVjdCBjb3BpZXMsIG9yIHVuaW5pdGlhbGl6ZWQgcGFkZGluZy4gSXQgZG9lc24ndCBpbnRyb2R1Y2Ugcmlza3MgdGhhdCBLTVNBTiBpcyB0YXJnZXRlZCBhdC5cblxuU28sIGFjY29yZGluZyB0byB0aGUgcmVxdWlyZW1lbnRzLCBteSBqdWRnbWVudCBpcyB0aGF0IGBOZWVkc0tNU0FOPWZhbHNlYC4gTXkgYW5hbHlzaXMgaW5kaWNhdGVzIHRoYXQgdGhlIGNvZGUgY2hhbmdlcyByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh3aGljaCBhcmUgY2F1Z2h0IGJ5IEtBU0FOL0xPQ0tERVApLCBhbmQgYWxsIHN0cnVjdHVyZXMgYXJlIGJlaW5nIGZ1bGx5IGluaXRpYWxpemVkLiBJJ20gcmVhZHkgdG8gcHJvY2VlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2NDksIk91dHB1dFRva2VucyI6MTk1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzgxLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDdUMDk6Mzg6NTcuODgxMjcwNDc2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgzOTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgbG9ja2luZyBhbmQgaXRlcmF0aW9uIGxvZ2ljIGluIC9wcm9jL1xcdTAwM2NwaWRcXHUwMDNlL3NtYXBzX3JvbGx1cCBhbmQgcmVsYXRlZCB0YXNrX21tdS5jIGZ1bmN0aW9ucyAobWlncmF0aW5nIHNob3dfc21hcHNfcm9sbHVwIHRvIHVzZSBwZXItVk1BIGxvY2tpbmcgdmlhIHByb2NfZ2V0X3ZtYSBhbmQgc2ltcGxpZnlpbmcgbG9ja2luZyBjb250ZXh0IGhlbHBlciBmdW5jdGlvbnMpLiBBbGwgbG9jYWwgdmFyaWFibGVzIGFuZCBzdGF0aXN0aWNzIHN0cnVjdHVyZXMgKGUuZy4sIHN0cnVjdCBtZW1fc2l6ZV9zdGF0cyBtc3MgPSB7fSkgYXJlIGV4cGxpY2l0bHkgemVyby1pbml0aWFsaXplZCBiZWZvcmUgdXNlLCBhbmQgb3V0cHV0IGlzIGZvcm1hdHRlZCBhcyBBU0NJSSB0ZXh0IGludG8gc2VxX2ZpbGUgYnVmZmVycy4gVGhlcmUgYXJlIG5vIG5ldyBvciBtb2RpZmllZCByYXcgc3RydWN0IGNvcGllcyB0byB1c2VyIHNwYWNlLCBubyB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgb3IgcGFkZGluZywgYW5kIG5vIGNvbmRpdGlvbmFsIGJyYW5jaGVzIG9uIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgY29uY3VycmVuY3kgb3IgbGlmZXRpbWUgaXNzdWVzIGludHJvZHVjZWQgYnkgY2hhbmdlcyB0byBWTUEgbG9ja2luZy9SQ1UgdHJhdmVyc2FsIHdvdWxkIGJlIGNhdWdodCBieSBLQVNBTiBhbmQgTE9DS0RFUC4gVGh1cywgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGxvY2tpbmcgYW5kIGl0ZXJhdGlvbiBsb2dpYyBpbiAvcHJvYy9cXHUwMDNjcGlkXFx1MDAzZS9zbWFwc19yb2xsdXAgYW5kIHJlbGF0ZWQgdGFza19tbXUuYyBmdW5jdGlvbnMgKG1pZ3JhdGluZyBzaG93X3NtYXBzX3JvbGx1cCB0byB1c2UgcGVyLVZNQSBsb2NraW5nIHZpYSBwcm9jX2dldF92bWEgYW5kIHNpbXBsaWZ5aW5nIGxvY2tpbmcgY29udGV4dCBoZWxwZXIgZnVuY3Rpb25zKS4gQWxsIGxvY2FsIHZhcmlhYmxlcyBhbmQgc3RhdGlzdGljcyBzdHJ1Y3R1cmVzIChlLmcuLCBzdHJ1Y3QgbWVtX3NpemVfc3RhdHMgbXNzID0ge30pIGFyZSBleHBsaWNpdGx5IHplcm8taW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSwgYW5kIG91dHB1dCBpcyBmb3JtYXR0ZWQgYXMgQVNDSUkgdGV4dCBpbnRvIHNlcV9maWxlIGJ1ZmZlcnMuIFRoZXJlIGFyZSBubyBuZXcgb3IgbW9kaWZpZWQgcmF3IHN0cnVjdCBjb3BpZXMgdG8gdXNlciBzcGFjZSwgbm8gdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIG9yIHBhZGRpbmcsIGFuZCBubyBjb25kaXRpb25hbCBicmFuY2hlcyBvbiB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IGNvbmN1cnJlbmN5IG9yIGxpZmV0aW1lIGlzc3VlcyBpbnRyb2R1Y2VkIGJ5IGNoYW5nZXMgdG8gVk1BIGxvY2tpbmcvUkNVIHRyYXZlcnNhbCB3b3VsZCBiZSBjYXVnaHQgYnkgS0FTQU4gYW5kIExPQ0tERVAuIFRodXMsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowtxtsh[1] Phase: Succeeded StartedAt: 2026-09-07 09:39:37 +0000 UTC FinishedAt: 2026-09-07 09:39:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-07 09:39:37 +0000 UTC FinishedAt: 2026-09-07 09:39:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[2] Phase: Succeeded StartedAt: 2026-09-07 09:39:37 +0000 UTC FinishedAt: 2026-09-07 13:29:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-07 09:39:37 +0000 UTC FinishedAt: 2026-09-07 13:29:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-07 09:39:37 +0000 UTC FinishedAt: 2026-09-07 09:40:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-07 09:39:37 +0000 UTC FinishedAt: 2026-09-07 09:39:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowtxtsh/series-workflowtxtsh-convert-artifact-1868484474/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-07 09:40:01 +0000 UTC FinishedAt: 2026-09-07 10:01:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-07 09:40:01 +0000 UTC FinishedAt: 2026-09-07 10:01:36 +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:*749f2130-5e8e-4133-a4f8-dc035502f100,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-workflowtxtsh/series-workflowtxtsh-convert-artifact-1868484474/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": "4a742d9a-f4a9-4e25-b355-077dbc6698fa", "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-workflowtxtsh/series-workflowtxtsh-build-action-4203257896/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-07 09:40:01 +0000 UTC FinishedAt: 2026-09-07 10:01:11 +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:*749f2130-5e8e-4133-a4f8-dc035502f100,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-workflowtxtsh/series-workflowtxtsh-convert-artifact-1868484474/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": "4a742d9a-f4a9-4e25-b355-077dbc6698fa", "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-workflowtxtsh/series-workflowtxtsh-build-action-4203257896/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-07 10:01:36 +0000 UTC FinishedAt: 2026-09-07 10:01:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-07 10:01:36 +0000 UTC FinishedAt: 2026-09-07 10:01:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-07 10:01:36 +0000 UTC FinishedAt: 2026-09-07 10:01:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-07 10:01:36 +0000 UTC FinishedAt: 2026-09-07 10:01:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowtxtsh/series-workflowtxtsh-convert-artifact-2926991061/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-07 10:01:46 +0000 UTC FinishedAt: 2026-09-07 10:03:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-07 10:01:46 +0000 UTC FinishedAt: 2026-09-07 10:03:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4a742d9a-f4a9-4e25-b355-077dbc6698fa,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-workflowtxtsh/series-workflowtxtsh-build-action-4203257896/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-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-07 10:03:41 +0000 UTC FinishedAt: 2026-09-07 10:03:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-07 10:03:41 +0000 UTC FinishedAt: 2026-09-07 10:03:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-07 10:03:41 +0000 UTC FinishedAt: 2026-09-07 10:24:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-07 10:03:41 +0000 UTC FinishedAt: 2026-09-07 10:24:13 +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:*749f2130-5e8e-4133-a4f8-dc035502f100,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-workflowtxtsh/series-workflowtxtsh-convert-artifact-2926991061/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": "75aeb090-87e0-41d5-888c-6a315fa437ac", "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-workflowtxtsh/series-workflowtxtsh-build-action-208107617/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-07 10:03:41 +0000 UTC FinishedAt: 2026-09-07 10:23:37 +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:*749f2130-5e8e-4133-a4f8-dc035502f100,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-workflowtxtsh/series-workflowtxtsh-convert-artifact-2926991061/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": "75aeb090-87e0-41d5-888c-6a315fa437ac", "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-workflowtxtsh/series-workflowtxtsh-build-action-208107617/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-07 10:24:13 +0000 UTC FinishedAt: 2026-09-07 10:24:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-07 10:24:13 +0000 UTC FinishedAt: 2026-09-07 10:24:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-07 10:24:13 +0000 UTC FinishedAt: 2026-09-07 10:26:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-07 10:24:13 +0000 UTC FinishedAt: 2026-09-07 10:25:59 +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:*75aeb090-87e0-41d5-888c-6a315fa437ac,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-workflowtxtsh/series-workflowtxtsh-build-action-208107617/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-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-07 10:26:09 +0000 UTC FinishedAt: 2026-09-07 13:29:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-07 10:26:09 +0000 UTC FinishedAt: 2026-09-07 13:29:38 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},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:*4a742d9a-f4a9-4e25-b355-077dbc6698fa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*75aeb090-87e0-41d5-888c-6a315fa437ac,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-workflowtxtsh/series-workflowtxtsh-build-action-4203257896/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-workflowtxtsh/series-workflowtxtsh-build-action-208107617/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-07 10:26:09 +0000 UTC FinishedAt: 2026-09-07 10:26:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-07 10:26:09 +0000 UTC FinishedAt: 2026-09-07 10:26:14 +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-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},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-workflowtxtsh/series-workflowtxtsh-convert-artifact-1027617722/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-07 10:26:09 +0000 UTC FinishedAt: 2026-09-07 10:26:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-07 10:26:09 +0000 UTC FinishedAt: 2026-09-07 10:26:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-07 10:26:09 +0000 UTC FinishedAt: 2026-09-07 10:26:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-07 10:26:19 +0000 UTC FinishedAt: 2026-09-07 13:29:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtxtsh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["show_smaps_rollup","smap_gather_stats","show_smap","do_procmap_query"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3243fc689fef444f87e0a703b4c99653137e1b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROC_FS","PROC_PAGE_MONITOR"],"series_id":"08471fc9-5154-4594-bf2b-2328fee6364a","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-07 10:26:19 +0000 UTC FinishedAt: 2026-09-07 13:29:28 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4a742d9a-f4a9-4e25-b355-077dbc6698fa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*75aeb090-87e0-41d5-888c-6a315fa437ac,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-workflowtxtsh/series-workflowtxtsh-build-action-4203257896/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-workflowtxtsh/series-workflowtxtsh-build-action-208107617/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-workflowtxtsh/series-workflowtxtsh-convert-artifact-1027617722/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,}