Name: series-workflowlmnq5 Phase: Succeeded StartedAt: 2026-08-24 18:18:41 +0000 UTC FinishedAt: 2026-08-24 22:44:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[0] Phase: Succeeded StartedAt: 2026-08-24 18:18:41 +0000 UTC FinishedAt: 2026-08-24 18:47:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[0].run-triage Phase: Succeeded StartedAt: 2026-08-24 18:18:41 +0000 UTC FinishedAt: 2026-08-24 18:47:12 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "0a0d1d55dad570724bf8c7ea83409639cfb4be9b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROVE_LOCKING", "LOCKDEP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "0a0d1d55dad570724bf8c7ea83409639cfb4be9b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROVE_LOCKING", "LOCKDEP" ], "series_id": "b56590b3-69b0-45ef-aa34-61e941851eba" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUk9WRV9MT0NLSU5HJiMzNDssCiAgICAmIzM0O0xPQ0tERVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsb2NrZGVwJiMzOTtzIGludGVybmFsIGNhY2hpbmcgbWVjaGFuaXNtIGZvciBsb2NrIGNsYXNzZXMgKGBsb2NrLVx1MDAzZWNsYXNzX2NhY2hlYCkuIEl0IGludHJvZHVjZXMgYSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkYCBhbmQgdXNlcyBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBlbnN1cmUgdGhlIGNhY2hlZCBjbGFzcyBwb2ludGVyIGlzIHZhbGlkIGJlZm9yZSB1c2UuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBpc3N1ZXMsIHN0YWxlIGNhY2hlIGVudHJpZXMsIG9yIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAod2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0NTQU4sIEtBU0FOLCBvciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9ja2RlcCBzdWJzeXN0ZW0gdG8gdmFsaWRhdGUgY2FjaGVkIGxvY2sgY2xhc3NlcyB1c2luZyBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKCkgYW5kIGFkZHMgUkVBRF9PTkNFL1dSSVRFX09OQ0UgdG8gcHJldmVudCBkYXRhIHJhY2VzIG9uIGxvY2stXHUwMDNlY2xhc3NfY2FjaGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNvcmUga2VybmVsIGRlYnVnZ2luZyBtZWNoYW5pc20gdGhhdCBpcyByZWFjaGFibGUgdmlhIGFueSBsb2NrIGFjcXVpc2l0aW9uLiBGdXp6aW5nIHdpdGggUFJPVkVfTE9DS0lORyBlbmFibGVkIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZXNlIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjA1MWNjY2JhMWJjYzJlMzk4NTE1MmZjYzgxNGQyMzEyNTAzYWNjYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDE4OjE5OjQ0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xuaW5kZXggMjVkNzdkNGExMDYxNC4uNzYzZjc5ODA2YmQ4ZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXG5AQCAtOTYzLDYgJiM0Mzs5NjMsMzQgQEAgbG9va191cF9sb2NrX2NsYXNzKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgbG9ja19jbGFzc19jYWNoZV9pc192YWxpZChjb25zdCBzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IHN1YmNsYXNzKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGNsYXNzX3N1YmNsYXNzO1xuJiM0MztcbiYjNDM7XHRpZiAoIWNsYXNzKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoY2xhc3MgXHUwMDNjIGxvY2tfY2xhc3NlcyB8fCBjbGFzcyBcdTAwM2U9IGxvY2tfY2xhc3NlcyAmIzQzOyBNQVhfTE9DS0RFUF9LRVlTKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KCFhcmNoX3Rlc3RfYml0KGNsYXNzIC0gbG9ja19jbGFzc2VzLCBsb2NrX2NsYXNzZXNfaW5fdXNlKSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghbG9jay1cdTAwM2VrZXkpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRjbGFzc19zdWJjbGFzcyA9IHN1YmNsYXNzID8gc3ViY2xhc3MgOiBjbGFzcy1cdTAwM2VzdWJjbGFzcztcbiYjNDM7XHRpZiAodW5saWtlbHkoY2xhc3Nfc3ViY2xhc3MgXHUwMDNlPSBNQVhfTE9DS0RFUF9TVUJDTEFTU0VTKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KFJFQURfT05DRShjbGFzcy1cdTAwM2VrZXkpICE9IGxvY2stXHUwMDNla2V5LVx1MDAzZXN1YmtleXMgJiM0MzsgY2xhc3Nfc3ViY2xhc3MpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFN0YXRpYyBsb2NrcyBkbyBub3QgaGF2ZSB0aGVpciBjbGFzcy1rZXlzIHlldCAtIGZvciB0aGVtIHRoZSBrZXkgaXNcbiAgKiB0aGUgbG9jayBvYmplY3QgaXRzZWxmLiBJZiB0aGUgbG9jayBpcyBpbiB0aGUgcGVyIGNwdSBhcmVhLCB0aGVcbkBAIC0xMzk1LDkgJiM0MzsxNDIzLDkgQEAgcmVnaXN0ZXJfbG9ja19jbGFzcyhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcywgaW50IGZvcmNlKVxuIFxuIG91dF9zZXRfY2xhc3NfY2FjaGU6XG4gXHRpZiAoIXN1YmNsYXNzIHx8IGZvcmNlKVxuLVx0XHRsb2NrLVx1MDAzZWNsYXNzX2NhY2hlWzBdID0gY2xhc3M7XG4mIzQzO1x0XHRXUklURV9PTkNFKGxvY2stXHUwMDNlY2xhc3NfY2FjaGVbMF0sIGNsYXNzKTtcbiBcdGVsc2UgaWYgKHN1YmNsYXNzIFx1MDAzYyBOUl9MT0NLREVQX0NBQ0hJTkdfQ0xBU1NFUylcbi1cdFx0bG9jay1cdTAwM2VjbGFzc19jYWNoZVtzdWJjbGFzc10gPSBjbGFzcztcbiYjNDM7XHRcdFdSSVRFX09OQ0UobG9jay1cdTAwM2VjbGFzc19jYWNoZVtzdWJjbGFzc10sIGNsYXNzKTtcbiBcbiBcdC8qXG4gXHQgKiBIYXNoIGNvbGxpc2lvbiwgZGlkIHdlIHNtb2tlIHNvbWU/IFdlIGZvdW5kIGEgY2xhc3Mgd2l0aCBhIG1hdGNoaW5nXG5AQCAtNDk1Nyw3ICYjNDM7NDk4NSw3IEBAIHZvaWQgbG9ja2RlcF9pbml0X21hcF90eXBlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgY29uc3QgY2hhciAqbmFtZSxcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfTE9DS0RFUF9DQUNISU5HX0NMQVNTRVM7IGkmIzQzOyYjNDM7KVxuLVx0XHRsb2NrLVx1MDAzZWNsYXNzX2NhY2hlW2ldID0gTlVMTDtcbiYjNDM7XHRcdFdSSVRFX09OQ0UobG9jay1cdTAwM2VjbGFzc19jYWNoZVtpXSwgTlVMTCk7XG4gXG4gI2lmZGVmIENPTkZJR19MT0NLX1NUQVRcbiBcdGxvY2stXHUwMDNlY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTtcbkBAIC01MDIyLDEyICYjNDM7NTA1MCwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChfX2xvY2tkZXBfbm9fdHJhY2tfXyk7XG4gdm9pZCBsb2NrZGVwX3NldF9sb2NrX2NtcF9mbihzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIGxvY2tfY21wX2ZuIGNtcF9mbixcbiBcdFx0XHQgICAgIGxvY2tfcHJpbnRfZm4gcHJpbnRfZm4pXG4ge1xuLVx0c3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gbG9jay1cdTAwM2VjbGFzc19jYWNoZVswXTtcbiYjNDM7XHRzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MgPSBSRUFEX09OQ0UobG9jay1cdTAwM2VjbGFzc19jYWNoZVswXSk7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0cmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiBcdGxvY2tkZXBfcmVjdXJzaW9uX2luYygpO1xuIFxuJiM0MztcdGlmICghbG9ja19jbGFzc19jYWNoZV9pc192YWxpZChsb2NrLCBjbGFzcywgMCkpXG4mIzQzO1x0XHRjbGFzcyA9IE5VTEw7XG4mIzQzO1xuIFx0aWYgKCFjbGFzcylcbiBcdFx0Y2xhc3MgPSByZWdpc3Rlcl9sb2NrX2NsYXNzKGxvY2ssIDAsIDApO1xuIFxuQEAgLTUxMTksOCAmIzQzOzUxNTAsMTEgQEAgc3RhdGljIGludCBfX2xvY2tfYWNxdWlyZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcyxcbiBcdGlmIChERUJVR19MT0NLU19XQVJOX09OKHN1YmNsYXNzIFx1MDAzZT0gTUFYX0xPQ0tERVBfU1VCQ0xBU1NFUykpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHN1YmNsYXNzIFx1MDAzYyBOUl9MT0NLREVQX0NBQ0hJTkdfQ0xBU1NFUylcbi1cdFx0Y2xhc3MgPSBsb2NrLVx1MDAzZWNsYXNzX2NhY2hlW3N1YmNsYXNzXTtcbiYjNDM7XHRpZiAoc3ViY2xhc3MgXHUwMDNjIE5SX0xPQ0tERVBfQ0FDSElOR19DTEFTU0VTKSB7XG4mIzQzO1x0XHRjbGFzcyA9IFJFQURfT05DRShsb2NrLVx1MDAzZWNsYXNzX2NhY2hlW3N1YmNsYXNzXSk7XG4mIzQzO1x0XHRpZiAoIWxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWQobG9jaywgY2xhc3MsIHN1YmNsYXNzKSlcbiYjNDM7XHRcdFx0Y2xhc3MgPSBOVUxMO1xuJiM0MztcdH1cbiBcdC8qXG4gXHQgKiBOb3QgY2FjaGVkP1xuIFx0ICovXG5AQCAtNTMyMyw5ICYjNDM7NTM1Nyw5IEBAIHN0YXRpYyBub2luc3RyIGludCBtYXRjaF9oZWxkX2xvY2soY29uc3Qgc3RydWN0IGhlbGRfbG9jayAqaGxvY2ssXG4gXHRcdHJldHVybiAxO1xuIFxuIFx0aWYgKGhsb2NrLVx1MDAzZXJlZmVyZW5jZXMpIHtcbi1cdFx0Y29uc3Qgc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gbG9jay1cdTAwM2VjbGFzc19jYWNoZVswXTtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IFJFQURfT05DRShsb2NrLVx1MDAzZWNsYXNzX2NhY2hlWzBdKTtcbiBcbi1cdFx0aWYgKCFjbGFzcylcbiYjNDM7XHRcdGlmICghbG9ja19jbGFzc19jYWNoZV9pc192YWxpZChsb2NrLCBjbGFzcywgMCkpXG4gXHRcdFx0Y2xhc3MgPSBsb29rX3VwX2xvY2tfY2xhc3MobG9jaywgMCk7XG4gXG4gXHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUk9WRV9MT0NLSU5HJiMzNDssCiAgICAmIzM0O0xPQ0tERVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9ja2RlcCBzdWJzeXN0ZW0gdG8gdmFsaWRhdGUgY2FjaGVkIGxvY2sgY2xhc3NlcyB1c2luZyBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKCkgYW5kIGFkZHMgUkVBRF9PTkNFL1dSSVRFX09OQ0UgdG8gcHJldmVudCBkYXRhIHJhY2VzIG9uIGxvY2stXHUwMDNlY2xhc3NfY2FjaGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNvcmUga2VybmVsIGRlYnVnZ2luZyBtZWNoYW5pc20gdGhhdCBpcyByZWFjaGFibGUgdmlhIGFueSBsb2NrIGFjcXVpc2l0aW9uLiBGdXp6aW5nIHdpdGggUFJPVkVfTE9DS0lORyBlbmFibGVkIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZXNlIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjA1MWNjY2JhMWJjYzJlMzk4NTE1MmZjYzgxNGQyMzEyNTAzYWNjYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDE4OjE5OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jCmluZGV4IDI1ZDc3ZDRhMTA2MTQuLjc2M2Y3OTgwNmJkOGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMKQEAgLTk2Myw2ICYjNDM7OTYzLDM0IEBAIGxvb2tfdXBfbG9ja19jbGFzcyhjb25zdCBzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcykKIAlyZXR1cm4gTlVMTDsKIH0KIAomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywKJiM0MzsJCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MsCiYjNDM7CQkJCQkJICAgICAgdW5zaWduZWQgaW50IHN1YmNsYXNzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGNsYXNzX3N1YmNsYXNzOwomIzQzOwomIzQzOwlpZiAoIWNsYXNzKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoY2xhc3MgJmx0OyBsb2NrX2NsYXNzZXMgfHwgY2xhc3MgJmd0Oz0gbG9ja19jbGFzc2VzICYjNDM7IE1BWF9MT0NLREVQX0tFWVMpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIWFyY2hfdGVzdF9iaXQoY2xhc3MgLSBsb2NrX2NsYXNzZXMsIGxvY2tfY2xhc3Nlc19pbl91c2UpKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KCFsb2NrLSZndDtrZXkpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwljbGFzc19zdWJjbGFzcyA9IHN1YmNsYXNzID8gc3ViY2xhc3MgOiBjbGFzcy0mZ3Q7c3ViY2xhc3M7CiYjNDM7CWlmICh1bmxpa2VseShjbGFzc19zdWJjbGFzcyAmZ3Q7PSBNQVhfTE9DS0RFUF9TVUJDTEFTU0VTKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KFJFQURfT05DRShjbGFzcy0mZ3Q7a2V5KSAhPSBsb2NrLSZndDtrZXktJmd0O3N1YmtleXMgJiM0MzsgY2xhc3Nfc3ViY2xhc3MpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogU3RhdGljIGxvY2tzIGRvIG5vdCBoYXZlIHRoZWlyIGNsYXNzLWtleXMgeWV0IC0gZm9yIHRoZW0gdGhlIGtleSBpcwogICogdGhlIGxvY2sgb2JqZWN0IGl0c2VsZi4gSWYgdGhlIGxvY2sgaXMgaW4gdGhlIHBlciBjcHUgYXJlYSwgdGhlCkBAIC0xMzk1LDkgJiM0MzsxNDIzLDkgQEAgcmVnaXN0ZXJfbG9ja19jbGFzcyhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcywgaW50IGZvcmNlKQogCiBvdXRfc2V0X2NsYXNzX2NhY2hlOgogCWlmICghc3ViY2xhc3MgfHwgZm9yY2UpCi0JCWxvY2stJmd0O2NsYXNzX2NhY2hlWzBdID0gY2xhc3M7CiYjNDM7CQlXUklURV9PTkNFKGxvY2stJmd0O2NsYXNzX2NhY2hlWzBdLCBjbGFzcyk7CiAJZWxzZSBpZiAoc3ViY2xhc3MgJmx0OyBOUl9MT0NLREVQX0NBQ0hJTkdfQ0xBU1NFUykKLQkJbG9jay0mZ3Q7Y2xhc3NfY2FjaGVbc3ViY2xhc3NdID0gY2xhc3M7CiYjNDM7CQlXUklURV9PTkNFKGxvY2stJmd0O2NsYXNzX2NhY2hlW3N1YmNsYXNzXSwgY2xhc3MpOwogCiAJLyoKIAkgKiBIYXNoIGNvbGxpc2lvbiwgZGlkIHdlIHNtb2tlIHNvbWU/IFdlIGZvdW5kIGEgY2xhc3Mgd2l0aCBhIG1hdGNoaW5nCkBAIC00OTU3LDcgJiM0Mzs0OTg1LDcgQEAgdm9pZCBsb2NrZGVwX2luaXRfbWFwX3R5cGUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBjb25zdCBjaGFyICpuYW1lLAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IE5SX0xPQ0tERVBfQ0FDSElOR19DTEFTU0VTOyBpJiM0MzsmIzQzOykKLQkJbG9jay0mZ3Q7Y2xhc3NfY2FjaGVbaV0gPSBOVUxMOwomIzQzOwkJV1JJVEVfT05DRShsb2NrLSZndDtjbGFzc19jYWNoZVtpXSwgTlVMTCk7CiAKICNpZmRlZiBDT05GSUdfTE9DS19TVEFUCiAJbG9jay0mZ3Q7Y3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTUwMjIsMTIgJiM0Mzs1MDUwLDE1IEBAIEVYUE9SVF9TWU1CT0xfR1BMKF9fbG9ja2RlcF9ub190cmFja19fKTsKIHZvaWQgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm4oc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBsb2NrX2NtcF9mbiBjbXBfZm4sCiAJCQkgICAgIGxvY2tfcHJpbnRfZm4gcHJpbnRfZm4pCiB7Ci0Jc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gbG9jay0mZ3Q7Y2xhc3NfY2FjaGVbMF07CiYjNDM7CXN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IFJFQURfT05DRShsb2NrLSZndDtjbGFzc19jYWNoZVswXSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJbG9ja2RlcF9yZWN1cnNpb25faW5jKCk7CiAKJiM0MzsJaWYgKCFsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGxvY2ssIGNsYXNzLCAwKSkKJiM0MzsJCWNsYXNzID0gTlVMTDsKJiM0MzsKIAlpZiAoIWNsYXNzKQogCQljbGFzcyA9IHJlZ2lzdGVyX2xvY2tfY2xhc3MobG9jaywgMCwgMCk7CiAKQEAgLTUxMTksOCAmIzQzOzUxNTAsMTEgQEAgc3RhdGljIGludCBfX2xvY2tfYWNxdWlyZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcywKIAlpZiAoREVCVUdfTE9DS1NfV0FSTl9PTihzdWJjbGFzcyAmZ3Q7PSBNQVhfTE9DS0RFUF9TVUJDTEFTU0VTKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoc3ViY2xhc3MgJmx0OyBOUl9MT0NLREVQX0NBQ0hJTkdfQ0xBU1NFUykKLQkJY2xhc3MgPSBsb2NrLSZndDtjbGFzc19jYWNoZVtzdWJjbGFzc107CiYjNDM7CWlmIChzdWJjbGFzcyAmbHQ7IE5SX0xPQ0tERVBfQ0FDSElOR19DTEFTU0VTKSB7CiYjNDM7CQljbGFzcyA9IFJFQURfT05DRShsb2NrLSZndDtjbGFzc19jYWNoZVtzdWJjbGFzc10pOwomIzQzOwkJaWYgKCFsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGxvY2ssIGNsYXNzLCBzdWJjbGFzcykpCiYjNDM7CQkJY2xhc3MgPSBOVUxMOwomIzQzOwl9CiAJLyoKIAkgKiBOb3QgY2FjaGVkPwogCSAqLwpAQCAtNTMyMyw5ICYjNDM7NTM1Nyw5IEBAIHN0YXRpYyBub2luc3RyIGludCBtYXRjaF9oZWxkX2xvY2soY29uc3Qgc3RydWN0IGhlbGRfbG9jayAqaGxvY2ssCiAJCXJldHVybiAxOwogCiAJaWYgKGhsb2NrLSZndDtyZWZlcmVuY2VzKSB7Ci0JCWNvbnN0IHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IGxvY2stJmd0O2NsYXNzX2NhY2hlWzBdOwomIzQzOwkJY29uc3Qgc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gUkVBRF9PTkNFKGxvY2stJmd0O2NsYXNzX2NhY2hlWzBdKTsKIAotCQlpZiAoIWNsYXNzKQomIzQzOwkJaWYgKCFsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGxvY2ssIGNsYXNzLCAwKSkKIAkJCWNsYXNzID0gbG9va191cF9sb2NrX2NsYXNzKGxvY2ssIDApOwogCiAJCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNjUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIExvY2tkZXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0aW5rZXJpbmcgd2l0aCBga2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBhcmVhLCByaWdodD8gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY29yZSBrZXJuZWwgbG9ja2luZywgc3BlY2lmaWNhbGx5IHRoZSBsb2NrIGRlcGVuZGVuY3kgY2hlY2tlci4KCkZpcnN0IG9mZiwgaXQgc2VlbXMgbGlrZSB0aGUgcHJpbWFyeSBjaGFuZ2VzIGludm9sdmUgaW50cm9kdWNpbmcgYSBuZXcgZnVuY3Rpb24sIGBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkYCwgYW5kIGluY29ycG9yYXRpbmcgYFJFQURfT05DRWAvYFdSSVRFX09OQ0VgIGZvciBgbG9jay0mZ3Q7Y2xhc3NfY2FjaGVgLiBUaGF0IHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgaW52YWxpZCBjYWNoZSB1c2FnZSB3aXRoaW4gdGhlIGxvY2sgY2xhc3MgY2FjaGluZyBtZWNoYW5pc20sIHdoaWNoIGlzIGdvb2QuIFdlIGFyZSB0YWxraW5nIGFib3V0IGEgc2FmZXR5IGltcHJvdmVtZW50IGhlcmUuCgpGdW5jdGlvbmFsbHksIHllcywgdGhpcyBkZWZpbml0ZWx5IGFsdGVycyBiZWhhdmlvci4gSXQgYWRkcyB2YWxpZGF0aW9uLiBTbywgdGhlIG5leHQgcXVlc3Rpb24gaXMsIHNob3VsZCB3ZSBmdXp6IGl0PyBBYnNvbHV0ZWx5ISBUaGlzIHRvdWNoZXMgY29yZSBrZXJuZWwgY29kZSwgYWNjZXNzaWJsZSB0aHJvdWdoICphbnkqIHN5c2NhbGwgdGhhdCBhY3F1aXJlcyBsb2Nrcy4gVGhhdCBtZWFucyB0aGUgYXR0YWNrIHN1cmZhY2UgaXMgaHVnZS4gTm93LCB0aGUgY2F0Y2ggaXMgdGhhdCBsb2NrZGVwIGlzIHByaW1hcmlseSBhICpkZWJ1Z2dpbmcqIHRvb2wsIGVuYWJsZWQgYnkgYENPTkZJR19MT0NLREVQYCBhbmQgYENPTkZJR19QUk9WRV9MT0NLSU5HYCwgbWVhbmluZyBpdCBtYXkgYmUgZGlmZmljdWx0IHRvIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGguCgpBbHJpZ2h0LCB3aGF0IHNwZWNpZmljYWxseSB0byBmb2N1cyBvbj8gVGhlIHBhdGNoIG1vZGlmaWVzIGBsb2NrZGVwX3NldF9sb2NrX2NtcF9mbmAsIGBfX2xvY2tfYWNxdWlyZWAsIGFuZCBgbWF0Y2hfaGVsZF9sb2NrYC4gYF9fbG9ja19hY3F1aXJlYCBpcyBhICp2ZXJ5KiBob3QgcGF0aCwgb2J2aW91c2x5LiBgbWF0Y2hfaGVsZF9sb2NrYCBpcyBhbHNvIHByZXR0eSBoaWdoLXRyYWZmaWMuIEJ1dCB3YWl04oCmIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBUaGF0JiMzOTtzIGEgZ29vZCBwb2ludCEgTG9ja2luZyBmdW5jdGlvbnMgYXJlLCBieSB0aGVpciB2ZXJ5IG5hdHVyZSwgZ2VuZXJpYyBhbmQgZnJlcXVlbnRseSBjYWxsZWQuCgpTbywgYW0gSSBzdXBwb3NlZCB0byBsZWF2ZSB0aGUgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBibGFuaz8gTGV0JiMzOTtzIGNoZWNrIGZvciBsZXNzIGhvdC1wYXRoIGZ1bmN0aW9ucy4gQWhhLCBgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm5gIGlzIGV4cG9ydGVkIGFuZCB1c2VkIGJ5IHNvbWUgZHJpdmVycy9zdWJzeXN0ZW1zLiBUaGF0JiMzOTtzIGEgc29saWQgY2FuZGlkYXRlLiBMZXQmIzM5O3MgZGlnIGludG8gd2hlcmUgZWxzZSBgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm5gIGlzIGJlaW5nIHVzZWQsIGJlY2F1c2UgaWYgaXQmIzM5O3MgdXNlZCBtb3JlIHRoYW4gb25jZSwgaXQgc3VnZ2VzdHMgdGhlcmUmIzM5O3Mgc29tZSB1c2VmdWwsIHRhcmdldGVkIGZvY3VzIGZvciBmdXp6aW5nLCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvY2tkZXBfc2V0X2xvY2tfY21wX2ZuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbG9ja2RlcC5oPTM4Nj1leHRlcm4gaW50IGxvY2tkZXBfaXNfaGVsZChjb25zdCB2b2lkICopO1xuLS1cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTQxMi0jaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkdcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjQxMzp2b2lkIGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuKHN0cnVjdCBsb2NrZGVwX21hcCAqLCBsb2NrX2NtcF9mbiwgbG9ja19wcmludF9mbik7XG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC00MTQtXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo0MTU6I2RlZmluZSBsb2NrX3NldF9jbXBfZm4obG9jaywgLi4uKVx0bG9ja2RlcF9zZXRfbG9ja19jbXBfZm4oXHUwMDI2KGxvY2spLVx1MDAzZWRlcF9tYXAsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNDE2LSNlbHNlXG4tLVxua2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jPTUwNDc9RVhQT1JUX1NZTUJPTF9HUEwoX19sb2NrZGVwX25vX3RyYWNrX18pO1xuLS1cbmtlcm5lbC9sb2NraW5nL2xvY2tkZXAuYy01MDQ5LSNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lOR1xua2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jOjUwNTA6dm9pZCBsb2NrZGVwX3NldF9sb2NrX2NtcF9mbihzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIGxvY2tfY21wX2ZuIGNtcF9mbixcbmtlcm5lbC9sb2NraW5nL2xvY2tkZXAuYy01MDUxLVx0XHRcdCAgICAgbG9ja19wcmludF9mbiBwcmludF9mbilcbi0tXG5rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMtNTA3NS19XG5rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmM6NTA3NjpFWFBPUlRfU1lNQk9MX0dQTChsb2NrZGVwX3NldF9sb2NrX2NtcF9mbik7XG5rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMtNTA3Ny0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzE0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqTG9ja2RlcCBGdW5jdGlvbiBVc2FnZSBBbmFseXNpcyoqCgpPa2F5LCBzbyBgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm5gIGlzIGV4cG9ydGVkLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzb21ldGhpbmcgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcsIGJ1dCBpdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBob3cgcHJldmFsZW50IGl0cyB1c2UgYWN0dWFsbHkgaXMuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3Mgb25seSBkZWZpbmVkIGluIGBsb2NrZGVwLmhgIGFuZCBgbG9ja2RlcC5jYCBtYWtlcyBtZSBzdXNwZWN0IGl0IG1pZ2h0IGJlIGludGVybmFsIHRvIHRoZSBsb2NrZGVwIHN1YnN5c3RlbSwgYnV0IHRoYXQgZXhwb3J0IGRlY2xhcmF0aW9uIHN1Z2dlc3RzIG90aGVyd2lzZS4gV2FpdCBhIHNlY29uZC4uLiBpc24mIzM5O3QgdGhhdCBmdW5jdGlvbiBhY3R1YWxseSB1c2VkIGluZGlyZWN0bHkgdGhyb3VnaCBgbG9ja19zZXRfY21wX2ZuYD8gVGhhdCBzZWVtcyBsaWtlbHkuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG15IHNlYXJjaCBvbiBgbG9ja19zZXRfY21wX2ZuYCBhbmQgc2VlIHdoZXJlIHRoYXQmIzM5O3MgY2FsbGVkIGluc3RlYWQuIFRoYXQmIzM5O2xsIHByb2JhYmx5IHRlbGwgdGhlIHJlYWwgc3RvcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9ja19zZXRfY21wX2ZuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvYmNhY2hlL2J0cmVlLmM9NTgxPXN0YXRpYyBzdHJ1Y3QgYnRyZWUgKm1jYV9idWNrZXRfYWxsb2Moc3RydWN0IGNhY2hlX3NldCAqYyxcbi0tXG5kcml2ZXJzL21kL2JjYWNoZS9idHJlZS5jLTU5My1cdGluaXRfcndzZW0oXHUwMDI2Yi1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvbWQvYmNhY2hlL2J0cmVlLmM6NTk0Olx0bG9ja19zZXRfY21wX2ZuKFx1MDAyNmItXHUwMDNlbG9jaywgYnRyZWVfbG9ja19jbXBfZm4sIGJ0cmVlX2xvY2tfcHJpbnRfZm4pO1xuZHJpdmVycy9tZC9iY2FjaGUvYnRyZWUuYy01OTUtXHRtdXRleF9pbml0KFx1MDAyNmItXHUwMDNld3JpdGVfbG9jayk7XG4tLVxuZnMvcGlwZS5jPTg3NT1zdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICphbGxvY19waXBlX2luZm8odm9pZClcbi0tXG5mcy9waXBlLmMtOTExLVx0XHRtdXRleF9pbml0KFx1MDAyNnBpcGUtXHUwMDNlbXV0ZXgpO1xuZnMvcGlwZS5jOjkxMjpcdFx0bG9ja19zZXRfY21wX2ZuKFx1MDAyNnBpcGUtXHUwMDNlbXV0ZXgsIHBpcGVfbG9ja19jbXBfZm4sIE5VTEwpO1xuZnMvcGlwZS5jLTkxMy1cdFx0cmV0dXJuIHBpcGU7XG4tLVxuZnMveGZzL2xpYnhmcy94ZnNfcnRncm91cC5jPTMyMz14ZnNfcnRnaW5vZGVfbG9ja2RlcF9zZXR1cChcbi0tXG5mcy94ZnMvbGlieGZzL3hmc19ydGdyb3VwLmMtMzI5LVx0XHRcdHR5cGUpO1xuZnMveGZzL2xpYnhmcy94ZnNfcnRncm91cC5jOjMzMDpcdGxvY2tfc2V0X2NtcF9mbihcdTAwMjZpcC1cdTAwM2VpX2xvY2ssIHhmc19ydGdpbm9kZV9pbG9ja19jbXBfZm4sXG5mcy94ZnMvbGlieGZzL3hmc19ydGdyb3VwLmMtMzMxLVx0XHRcdHhmc19ydGdpbm9kZV9pbG9ja19wcmludF9mbik7XG4tLVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg9NDEzPXZvaWQgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm4oc3RydWN0IGxvY2tkZXBfbWFwICosIGxvY2tfY21wX2ZuLCBsb2NrX3ByaW50X2ZuKTtcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTQxNC1cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjQxNTojZGVmaW5lIGxvY2tfc2V0X2NtcF9mbihsb2NrLCAuLi4pXHRsb2NrZGVwX3NldF9sb2NrX2NtcF9mbihcdTAwMjYobG9jayktXHUwMDNlZGVwX21hcCwgX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC00MTYtI2Vsc2VcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjQxNzojZGVmaW5lIGxvY2tfc2V0X2NtcF9mbihsb2NrLCAuLi4pXHRkbyB7IH0gd2hpbGUgKDApXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC00MTgtI2VuZGlmXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD0xMTM9c3RhdGljIGlubGluZSBpbnQgbmV0ZGV2X2xvY2tfY21wX2ZuKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqYSxcbi0tXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTEzOS1cdFx0XHQgIFx1MDAyNmRldl9pbnN0YW5jZV9sb2NrX2tleSk7XHRcdFxcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oOjE0MDpcdGxvY2tfc2V0X2NtcF9mbihcdTAwMjZkZXYtXHUwMDNlbG9jaywgbmV0ZGV2X2xvY2tfY21wX2ZuLCBOVUxMKTtcdFxcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTE0MS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIChkZXYpLVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVx0XHRcXFxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz00MDM9c3RhdGljIF9fbmV0X2luaXQgaW50IHByZWluaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zKVxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy00MjQtXHRtdXRleF9pbml0KFx1MDAyNm5ldC1cdTAwM2VydG5sX211dGV4KTtcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo0MjU6XHRsb2NrX3NldF9jbXBfZm4oXHUwMDI2bmV0LVx1MDAzZXJ0bmxfbXV0ZXgsIHJ0bmxfbmV0X2xvY2tfY21wX2ZuLCBOVUxMKTtcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy00MjYtXHRJTklUX1dPUksoXHUwMDI2bmV0LVx1MDAzZXJ0bmxfd29yaywgcnRubF9uZXRfd29ya19mdW5jKTtcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9MTA5ND1zdGF0aWMgc3RydWN0IHNvY2sgKnVuaXhfY3JlYXRlMShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBrZXJuLCBpbnQgdHlwZSlcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMTEyMy1cdHNrLVx1MDAzZXNrX2Rlc3RydWN0XHRcdD0gdW5peF9zb2NrX2Rlc3RydWN0b3I7XG5uZXQvdW5peC9hZl91bml4LmM6MTEyNDpcdGxvY2tfc2V0X2NtcF9mbihcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2ssIHVuaXhfcmVjdnFfbG9ja19jbXBfZm4sIE5VTEwpO1xubmV0L3VuaXgvYWZfdW5peC5jLTExMjUtXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTExMzEtXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ1LVx1MDAzZWxvY2spO1xubmV0L3VuaXgvYWZfdW5peC5jOjExMzI6XHRsb2NrX3NldF9jbXBfZm4oXHUwMDI2dS1cdTAwM2Vsb2NrLCB1bml4X3N0YXRlX2xvY2tfY21wX2ZuLCBOVUxMKTtcbm5ldC91bml4L2FmX3VuaXguYy0xMTMzLVx0bXV0ZXhfaW5pdChcdTAwMjZ1LVx1MDAzZWlvbG9jayk7IC8qIHNpbmdsZSB0YXNrIHJlYWRpbmcgbG9jayAqL1xuLS1cbm5ldC91bml4L2FmX3VuaXguYz0zODEzPXN0YXRpYyBpbnQgX19uZXRfaW5pdCB1bml4X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzgzNy1cdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bmV0LVx1MDAzZXVueC50YWJsZS5sb2Nrc1tpXSk7XG5uZXQvdW5peC9hZl91bml4LmM6MzgzODpcdFx0bG9ja19zZXRfY21wX2ZuKFx1MDAyNm5ldC1cdTAwM2V1bngudGFibGUubG9ja3NbaV0sIHVuaXhfdGFibGVfbG9ja19jbXBfZm4sIE5VTEwpO1xubmV0L3VuaXgvYWZfdW5peC5jLTM4MzktXHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZuZXQtXHUwMDNldW54LnRhYmxlLmJ1Y2tldHNbaV0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xMG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODMzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBvbiBPcHRpbWl6aW5nIExvY2tkZXAgU3ltYm9sIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbG9ja19zZXRfY21wX2ZuYCBhbmQgd2hlcmUgaXQmIzM5O3MgdXNlZCDigJMgcGlwZXMsIFVuaXggc29ja2V0cywgYW5kIG5ldCBuYW1lc3BhY2VzLiBUaGF0IG1lYW5zIGBsb2NrZGVwX3NldF9sb2NrX2NtcF9mbmAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIEhvd2V2ZXIsIHRoaXMgcGF0Y2ggaXMgcHJpbWFyaWx5IGFib3V0IG1vZGlmaWNhdGlvbnMgKndpdGhpbiogdGhlIGxvY2tkZXAgaW50ZXJuYWxzIHRoZW1zZWx2ZXMuIEl0JiMzOTtzIG5vdCBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGZ1bmN0aW9uOyBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIHRoZSAqaW5pdGlhbGl6YXRpb24qIG9mIHRoZXNlIHN0cnVjdHVyZXMsIG5vdCBpbiBhbnkgaG90IHBhdGguIGBfX2xvY2tfYWNxdWlyZWAgYW5kIGBtYXRjaF9oZWxkX2xvY2tgLCAqdGhvc2UqIGFyZSB0aGUgcmVhbGx5IGhvdCBhcmVhcy4KClNvLCBJIGNvdWxkIGluY2x1ZGUgYGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuYCBpbiBGb2N1c1N5bWJvbHMsIGJ1dCBJJiMzOTttIHRoaW5raW5nIG1heWJlIEkgKnNob3VsZG4mIzM5O3QqLiBJZiBJIGluY2x1ZGUgaXQsIGl0IGNvdWxkIHBvdGVudGlhbGx5IHNrZXcgdGhlIGZ1enppbmcgZWZmb3J0cyB0b3dhcmRzIHRoZSBjcmVhdGlvbiBvZiBwaXBlcyBvciBVbml4IHNvY2tldHMsIHdoZW4gdGhlIGFjdHVhbCBidWcgSSYjMzk7bSB0YXJnZXRpbmcgaXMgZGVlcGVyLCB3aXRoaW4gbG9ja2RlcC4gSSB3YW50IHRvIGtlZXAgdGhlIGZ1enppbmcgbW9yZSBnZW5lcmFsIHRvIGV4cG9zZSB0aGUgbG9ja2RlcCBpc3N1ZS4gQnV0IHRoZW4gYWdhaW4sIGlmIEkgKmRvbiYjMzk7dCogaW5jbHVkZSBpdCwgc3l6a2FsbGVyIHdpbGwganVzdCBmdXp6IG5vcm1hbGx5LgoKV2FpdCwgdGhlIGtleSBpcyB0aGUgY29uZmlndXJhdGlvbi4gTG9ja2RlcCBpcyBlbmFibGVkIGJ5IGBDT05GSUdfUFJPVkVfTE9DS0lOR2AgYW5kIGBDT05GSUdfTE9DS0RFUGAuIE9rYXksIHRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8gZm9jdXMgb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgdHdvIGNvbmZpZ3VyYXRpb25zIGFyZSBpbmNsdWRlZCBpbiBFbmFibGVDb25maWdzLiBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfUFJPVkVfTE9DS0lOR2AgaXMgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFJPVkVfTE9DS0lORyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0xNDE2PWNvbmZpZyBMT0NLX0RFQlVHR0lOR19TVVBQT1JUXG4tLVxubGliL0tjb25maWcuZGVidWctMTQyMC1cbmxpYi9LY29uZmlnLmRlYnVnOjE0MjE6Y29uZmlnIFBST1ZFX0xPQ0tJTkdcbmxpYi9LY29uZmlnLmRlYnVnLTE0MjItXHRib29sIFwmIzM0O0xvY2sgZGVidWdnaW5nOiBwcm92ZSBsb2NraW5nIGNvcnJlY3RuZXNzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUxMgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkxvY2tpbmcgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKioKCkFscmlnaHQsIHNvIGBQUk9WRV9MT0NLSU5HYCBpcyBkZWZpbml0ZWx5IHRoZSBrZXkgY29uZmlndXJhdGlvbiBpdGVtIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZSwgdGhhdCYjMzk7cyBjbGVhci4gQnV0IEkmIzM5O20gYSBiaXQgY3VyaW91cywgYXJlIHRoZXJlIGFueSAqb3RoZXIqIHJlbGF0ZWQgY29uZmlncyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50PyBTb21ldGhpbmcgbGlrZSBgREVCVUdfTE9DS19BTExPQ2AsIHBlcmhhcHM/IEl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS4KClRvIGdldCBhIGRlZmluaXRpdmUgYW5zd2VyIGFuZCB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMsIEkmIzM5O20gZ29pbmcgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIGBrZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNgLiBUaGF0JiMzOTtzIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGxvY2sgZGVwZW5kZW5jeSBjaGVja2VyLCBhbmQgaXQgc2hvdWxkIHJldmVhbCBleGFjdGx5IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSB0aWVkIHRvIGl0cyBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgb3RoZXIgbGV2ZXJzIHdlIGNhbiBwdWxsIHRvIGdldCB0aGUgZXhhY3QgbG9jayBkZWJ1Z2dpbmcgZmVhdHVyZXMgd2UgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqLVxcJFxcKENPTkZJR18uKmxvY2tkZXAubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvbG9ja2luZy9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfREVCVUdfTVVURVhFUykgJiM0Mzs9IG11dGV4LWRlYnVnLm9cbmtlcm5lbC9sb2NraW5nL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19MT0NLREVQKSAmIzQzOz0gbG9ja2RlcC5vXG5rZXJuZWwvbG9ja2luZy9NYWtlZmlsZS0yNi1pZmVxICgkKENPTkZJR19QUk9DX0ZTKSx5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODQzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqTG9ja2RlcCBEZWVwIERpdmUqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgbG9jayBkZWJ1Z2dpbmcuLi4gYW5kIHRoZSBjcnVjaWFsIHN0YXJ0aW5nIHBvaW50IGlzIGBDT05GSUdfTE9DS0RFUGAuIFRoYXQmIzM5O3MgdGhlIGJpZyBvbmUuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19QUk9WRV9MT0NLSU5HYCBkaXJlY3RseSBzZWxlY3RzIGBDT05GSUdfTE9DS0RFUGAsIG1ha2luZyBpdCBwcmV0dHkgY2VudHJhbCB0byB0aGUgd2hvbGUgbG9jayB2YWxpZGF0aW9uIHNjaGVtZS4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgUFJPVkVfTE9DS0lOR2AuIEkmIzM5O2xsIGdvIHN0cmFpZ2h0IHRvIGBsaWIvS2NvbmZpZy5kZWJ1Z2AgYW5kIHNlZSB3aGF0IGl0IHJldmVhbHMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoaXMgaXMgYWxsIHdpcmVkIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFJPVkVfTE9DS0lORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTE0MTY9Y29uZmlnIExPQ0tfREVCVUdHSU5HX1NVUFBPUlRcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNDIwLVxubGliL0tjb25maWcuZGVidWc6MTQyMTpjb25maWcgUFJPVkVfTE9DS0lOR1xubGliL0tjb25maWcuZGVidWctMTQyMi1cdGJvb2wgXCYjMzQ7TG9jayBkZWJ1Z2dpbmc6IHByb3ZlIGxvY2tpbmcgY29ycmVjdG5lc3NcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE1NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gRGVidWdnaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGRlYnVnZ2luZyBjb25maWd1cmF0aW9uIG9mIHRoaXMgcHJvamVjdC4gTXkgaW50dWl0aW9uIHN1Z2dlc3RzIHRoZSBpc3N1ZSBtaWdodCBiZSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgS2NvbmZpZyBvcHRpb24sIGFuZCBiYXNlZCBvbiBleHBlcmllbmNlLCBgbGliL0tjb25maWcuZGVidWdgIGlzIHVzdWFsbHkgdGhlIHJpZ2h0IHBsYWNlIHRvIGxvb2sgZm9yIHRoYXQgc29ydCBvZiB0aGluZy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDE0MjEuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50OyBpdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIG1vcmUgc3BlY2lmaWMgZGVidWcgb3B0aW9ucyBtaWdodCBiZSBkZWZpbmVkIG9yIHdoZXJlIHJlbGF0ZWQgZGVwZW5kZW5jaWVzIGFyZSBoYW5kbGVkLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBLY29uZmlnIHN5bWJvbHMsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSBkZWZhdWx0IHZhbHVlcyB0aGF0IG1pZ2h0IGdpdmUgbWUgYSBjbHVlIGFib3V0IHRoZSBiZWhhdmlvciBJJiMzOTttIHNlZWluZy4gV2l0aCBhIGJpdCBvZiBsdWNrLCB0aGUgYW5zd2VyIGlzIHJpZ2h0IHRoZXJlIGluIGZyb250IG9mIG1lLiBPdGhlcndpc2UsIEkgd2lsbCBoYXZlIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MTU6XHRcbjE0MTY6XHRjb25maWcgTE9DS19ERUJVR0dJTkdfU1VQUE9SVFxuMTQxNzpcdFx0Ym9vbFxuMTQxODpcdFx0ZGVwZW5kcyBvbiBUUkFDRV9JUlFGTEFHU19TVVBQT1JUIFx1MDAyNlx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlQgXHUwMDI2XHUwMDI2IExPQ0tERVBfU1VQUE9SVFxuMTQxOTpcdFx0ZGVmYXVsdCB5XG4xNDIwOlx0XG4xNDIxOlx0Y29uZmlnIFBST1ZFX0xPQ0tJTkdcbjE0MjI6XHRcdGJvb2wgXCYjMzQ7TG9jayBkZWJ1Z2dpbmc6IHByb3ZlIGxvY2tpbmcgY29ycmVjdG5lc3NcJiMzNDtcbjE0MjM6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiBMT0NLX0RFQlVHR0lOR19TVVBQT1JUXG4xNDI0Olx0XHRzZWxlY3QgTE9DS0RFUFxuMTQyNTpcdFx0c2VsZWN0IERFQlVHX1NQSU5MT0NLXG4xNDI2Olx0XHRzZWxlY3QgREVCVUdfTVVURVhFUyBpZiAhUFJFRU1QVF9SVFxuMTQyNzpcdFx0c2VsZWN0IERFQlVHX1JUX01VVEVYRVMgaWYgUlRfTVVURVhFU1xuMTQyODpcdFx0c2VsZWN0IERFQlVHX1JXU0VNUyBpZiAhUFJFRU1QVF9SVFxuMTQyOTpcdFx0c2VsZWN0IERFQlVHX1dXX01VVEVYX1NMT1dQQVRIXG4xNDMwOlx0XHRzZWxlY3QgREVCVUdfTE9DS19BTExPQ1xuMTQzMTpcdFx0c2VsZWN0IFBSRUVNUFRfQ09VTlQgaWYgIUFSQ0hfTk9fUFJFRU1QVFxuMTQzMjpcdFx0c2VsZWN0IFRSQUNFX0lSUUZMQUdTXG4xNDMzOlx0XHRkZWZhdWx0IG5cbjE0MzQ6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY5OQoJCQkJCQkJb3V0cHV0OiAxMjUKCQkJCQkJCXRob3VnaHRzOiA3NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIExvY2tkZXAgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBhY3RpdmF0ZXMgYExPQ0tERVBgIHRocm91Z2ggYFBST1ZFX0xPQ0tJTkdgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSYjMzk7bGwgZGVmaW5pdGVseSBpbmNsdWRlIGJvdGggYFBST1ZFX0xPQ0tJTkdgIGFuZCBgTE9DS0RFUGAgaW4gdGhlIGBFbmFibGVDb25maWdzYC4gVGhhdCYjMzk7cyBhIG5vLWJyYWluZXIuCgpOb3csIGxldCYjMzk7cyBzZWUsIGFyZSB0aGVyZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IGV4dHJhIGF0dGVudGlvbj8gVGhlIHBhdGNoIGludHJvZHVjZXMgYGxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWRgLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm5gLCBgX19sb2NrX2FjcXVpcmVgLCBhbmQgYG1hdGNoX2hlbGRfbG9ja2AuIEhtbSwgYF9fbG9ja19hY3F1aXJlYCBhbmQgYG1hdGNoX2hlbGRfbG9ja2AgYXJlIHN0YXRpYzsgdGhleSYjMzk7cmUgcHJvYmFibHkgaG90IHBhdGhzLCBzbyBub3QgYSBnb29kIGlkZWEgdG8gZm9jdXMgb24gdGhvc2Ugc3BlY2lmaWNhbGx5LiBgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm5gIGlzIGV4cG9ydGVkIGFuZCB1c2VkIHdoZW4gY3JlYXRpbmcgc29ja2V0cyBhbmQgcGlwZXMsIHdoaWNoIGlzbiYjMzk7dCAqc3VwZXIqIGNvbW1vbiwgYnV0IGl0JiMzOTtzIG5vdCByYXJlIGVpdGhlci4KClNob3VsZCBJIGxpc3QgYGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuYCBpbiBgRm9jdXNTeW1ib2xzYD8gSWYgSSBkaWQsIHN5emthbGxlciB3b3VsZCB0YXJnZXQgc29ja2V0L3BpcGUgY3JlYXRpb24uIEl0IGNvdWxkIGJlIGZpbmUsIGJ1dCB0aGUgZnVuY3Rpb24mIzM5O3Mgb25seSBlbmFibGVkIGlmIGBDT05GSUdfUFJPVkVfTE9DS0lOR2AgaXMgZW5hYmxlZC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgYGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuYCBpcyBldmVuIGRlZmluZWQgd2l0aG91dCBgUFJPVkVfTE9DS0lOR2AuIFllcCwgaW4gYGluY2x1ZGUvbGludXgvbG9ja2RlcC5oYCwgaXQmIzM5O3MgcHJvdGVjdGVkIGJ5IHRoZSBgI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HYC4KClNvLCBpdCYjMzk7cyBvbmx5IGFjdGl2ZSB3aXRoIGBQUk9WRV9MT0NLSU5HYC4gSSYjMzk7bGwgc3RpY2sgd2l0aCBhZGRpbmcgYFBST1ZFX0xPQ0tJTkdgIGFuZCBgTE9DS0RFUGAgdG8gYEVuYWJsZUNvbmZpZ3NgLiBJIHRoaW5rIGl0JiMzOTtzIGJldHRlciBub3QgdG8gcHV0IGFueSBmdW5jdGlvbnMgaW4gYEZvY3VzU3ltYm9sc2AgaGVyZSBiZWNhdXNlIGxvY2tkZXAgaXMgYSBnZW5lcmljIHN1YnN5c3RlbSwgYW5kIHRhcmdldGluZyBzcGVjaWZpYyBmdW5jdGlvbnMgbWlnaHQgbmFycm93IHRoZSBmdXp6aW5nIHNjb3BlIHRvbyBtdWNoLiBJIHdhbnQgdG8gdGVzdCBhbnkgbG9jayBhY3F1aXNpdGlvbiBmb3IgdGhlIGJ1ZyB0aGF0IHRoaXMgcGF0Y2ggZml4ZXMsIHdoaWNoIGlzIHRoZSByYWNlIGNvbmRpdGlvbiBvciBhbiBpbnZhbGlkIGNhY2hlIGluIGxvY2tkZXAgaXRzZWxmLiBHZW5lcmFsIGZ1enppbmcgd2l0aCBsb2NrZGVwIGVuYWJsZWQgaXMgdGhlIGJlc3QgYXBwcm9hY2guCgpKdXN0IHRvIGNvbmZpcm0sIHRoaXMgcGF0Y2ggYWRkcyBgbG9ja19jbGFzc19jYWNoZV9pc192YWxpZGAgdG8gY2hlY2sgdGhlIHZhbGlkaXR5IG9mIGEgY2FjaGVkIGxvY2sgY2xhc3MgYW5kIHVzZXMgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYCBmb3IgYGxvY2stJmd0O2NsYXNzX2NhY2hlYC4gVGhpcyAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gbG9ja2RlcDsgYSBjcnVjaWFsIGZpeCBmb3IgcG90ZW50aWFsIGJ1Z3Mgd2l0aCBpbnZhbGlkIGNhY2hlIHVzYWdlLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGNoYW5nZSBpbiBhIGNvcmUga2VybmVsIGRlYnVnZ2luZyBtZWNoYW5pc20gdGhhdCBpcyB1c2VkIGluIGV2ZXJ5IGxvY2sgYWNxdWlzaXRpb24sIHNvIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPVkVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtMT0NLREVQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvY2tkZXAgc3Vic3lzdGVtIHRvIHZhbGlkYXRlIGNhY2hlZCBsb2NrIGNsYXNzZXMgdXNpbmcgbG9ja19jbGFzc19jYWNoZV9pc192YWxpZCgpIGFuZCBhZGRzIFJFQURfT05DRS9XUklURV9PTkNFIHRvIHByZXZlbnQgZGF0YSByYWNlcyBvbiBsb2NrLVx1MDAzZWNsYXNzX2NhY2hlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjb3JlIGtlcm5lbCBkZWJ1Z2dpbmcgbWVjaGFuaXNtIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBhbnkgbG9jayBhY3F1aXNpdGlvbi4gRnV6emluZyB3aXRoIFBST1ZFX0xPQ0tJTkcgZW5hYmxlZCBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGVzZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPVkVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtMT0NLREVQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvY2tkZXAgc3Vic3lzdGVtIHRvIHZhbGlkYXRlIGNhY2hlZCBsb2NrIGNsYXNzZXMgdXNpbmcgbG9ja19jbGFzc19jYWNoZV9pc192YWxpZCgpIGFuZCBhZGRzIFJFQURfT05DRS9XUklURV9PTkNFIHRvIHByZXZlbnQgZGF0YSByYWNlcyBvbiBsb2NrLVx1MDAzZWNsYXNzX2NhY2hlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjb3JlIGtlcm5lbCBkZWJ1Z2dpbmcgbWVjaGFuaXNtIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBhbnkgbG9jayBhY3F1aXNpdGlvbi4gRnV6emluZyB3aXRoIFBST1ZFX0xPQ0tJTkcgZW5hYmxlZCBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGVzZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsb2NrZGVwJiMzOTtzIGludGVybmFsIGNhY2hpbmcgbWVjaGFuaXNtIGZvciBsb2NrIGNsYXNzZXMgKGBsb2NrLVx1MDAzZWNsYXNzX2NhY2hlYCkuIEl0IGludHJvZHVjZXMgYSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkYCBhbmQgdXNlcyBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBlbnN1cmUgdGhlIGNhY2hlZCBjbGFzcyBwb2ludGVyIGlzIHZhbGlkIGJlZm9yZSB1c2UuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBpc3N1ZXMsIHN0YWxlIGNhY2hlIGVudHJpZXMsIG9yIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAod2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0NTQU4sIEtBU0FOLCBvciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjA1MWNjY2JhMWJjYzJlMzk4NTE1MmZjYzgxNGQyMzEyNTAzYWNjYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDE4OjE5OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jCmluZGV4IDI1ZDc3ZDRhMTA2MTQuLjc2M2Y3OTgwNmJkOGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMKQEAgLTk2Myw2ICYjNDM7OTYzLDM0IEBAIGxvb2tfdXBfbG9ja19jbGFzcyhjb25zdCBzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcykKIAlyZXR1cm4gTlVMTDsKIH0KIAomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywKJiM0MzsJCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MsCiYjNDM7CQkJCQkJICAgICAgdW5zaWduZWQgaW50IHN1YmNsYXNzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGNsYXNzX3N1YmNsYXNzOwomIzQzOwomIzQzOwlpZiAoIWNsYXNzKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoY2xhc3MgJmx0OyBsb2NrX2NsYXNzZXMgfHwgY2xhc3MgJmd0Oz0gbG9ja19jbGFzc2VzICYjNDM7IE1BWF9MT0NLREVQX0tFWVMpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIWFyY2hfdGVzdF9iaXQoY2xhc3MgLSBsb2NrX2NsYXNzZXMsIGxvY2tfY2xhc3Nlc19pbl91c2UpKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KCFsb2NrLSZndDtrZXkpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwljbGFzc19zdWJjbGFzcyA9IHN1YmNsYXNzID8gc3ViY2xhc3MgOiBjbGFzcy0mZ3Q7c3ViY2xhc3M7CiYjNDM7CWlmICh1bmxpa2VseShjbGFzc19zdWJjbGFzcyAmZ3Q7PSBNQVhfTE9DS0RFUF9TVUJDTEFTU0VTKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KFJFQURfT05DRShjbGFzcy0mZ3Q7a2V5KSAhPSBsb2NrLSZndDtrZXktJmd0O3N1YmtleXMgJiM0MzsgY2xhc3Nfc3ViY2xhc3MpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogU3RhdGljIGxvY2tzIGRvIG5vdCBoYXZlIHRoZWlyIGNsYXNzLWtleXMgeWV0IC0gZm9yIHRoZW0gdGhlIGtleSBpcwogICogdGhlIGxvY2sgb2JqZWN0IGl0c2VsZi4gSWYgdGhlIGxvY2sgaXMgaW4gdGhlIHBlciBjcHUgYXJlYSwgdGhlCkBAIC0xMzk1LDkgJiM0MzsxNDIzLDkgQEAgcmVnaXN0ZXJfbG9ja19jbGFzcyhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcywgaW50IGZvcmNlKQogCiBvdXRfc2V0X2NsYXNzX2NhY2hlOgogCWlmICghc3ViY2xhc3MgfHwgZm9yY2UpCi0JCWxvY2stJmd0O2NsYXNzX2NhY2hlWzBdID0gY2xhc3M7CiYjNDM7CQlXUklURV9PTkNFKGxvY2stJmd0O2NsYXNzX2NhY2hlWzBdLCBjbGFzcyk7CiAJZWxzZSBpZiAoc3ViY2xhc3MgJmx0OyBOUl9MT0NLREVQX0NBQ0hJTkdfQ0xBU1NFUykKLQkJbG9jay0mZ3Q7Y2xhc3NfY2FjaGVbc3ViY2xhc3NdID0gY2xhc3M7CiYjNDM7CQlXUklURV9PTkNFKGxvY2stJmd0O2NsYXNzX2NhY2hlW3N1YmNsYXNzXSwgY2xhc3MpOwogCiAJLyoKIAkgKiBIYXNoIGNvbGxpc2lvbiwgZGlkIHdlIHNtb2tlIHNvbWU/IFdlIGZvdW5kIGEgY2xhc3Mgd2l0aCBhIG1hdGNoaW5nCkBAIC00OTU3LDcgJiM0Mzs0OTg1LDcgQEAgdm9pZCBsb2NrZGVwX2luaXRfbWFwX3R5cGUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBjb25zdCBjaGFyICpuYW1lLAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IE5SX0xPQ0tERVBfQ0FDSElOR19DTEFTU0VTOyBpJiM0MzsmIzQzOykKLQkJbG9jay0mZ3Q7Y2xhc3NfY2FjaGVbaV0gPSBOVUxMOwomIzQzOwkJV1JJVEVfT05DRShsb2NrLSZndDtjbGFzc19jYWNoZVtpXSwgTlVMTCk7CiAKICNpZmRlZiBDT05GSUdfTE9DS19TVEFUCiAJbG9jay0mZ3Q7Y3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTUwMjIsMTIgJiM0Mzs1MDUwLDE1IEBAIEVYUE9SVF9TWU1CT0xfR1BMKF9fbG9ja2RlcF9ub190cmFja19fKTsKIHZvaWQgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm4oc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBsb2NrX2NtcF9mbiBjbXBfZm4sCiAJCQkgICAgIGxvY2tfcHJpbnRfZm4gcHJpbnRfZm4pCiB7Ci0Jc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gbG9jay0mZ3Q7Y2xhc3NfY2FjaGVbMF07CiYjNDM7CXN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IFJFQURfT05DRShsb2NrLSZndDtjbGFzc19jYWNoZVswXSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJbG9ja2RlcF9yZWN1cnNpb25faW5jKCk7CiAKJiM0MzsJaWYgKCFsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGxvY2ssIGNsYXNzLCAwKSkKJiM0MzsJCWNsYXNzID0gTlVMTDsKJiM0MzsKIAlpZiAoIWNsYXNzKQogCQljbGFzcyA9IHJlZ2lzdGVyX2xvY2tfY2xhc3MobG9jaywgMCwgMCk7CiAKQEAgLTUxMTksOCAmIzQzOzUxNTAsMTEgQEAgc3RhdGljIGludCBfX2xvY2tfYWNxdWlyZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcywKIAlpZiAoREVCVUdfTE9DS1NfV0FSTl9PTihzdWJjbGFzcyAmZ3Q7PSBNQVhfTE9DS0RFUF9TVUJDTEFTU0VTKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoc3ViY2xhc3MgJmx0OyBOUl9MT0NLREVQX0NBQ0hJTkdfQ0xBU1NFUykKLQkJY2xhc3MgPSBsb2NrLSZndDtjbGFzc19jYWNoZVtzdWJjbGFzc107CiYjNDM7CWlmIChzdWJjbGFzcyAmbHQ7IE5SX0xPQ0tERVBfQ0FDSElOR19DTEFTU0VTKSB7CiYjNDM7CQljbGFzcyA9IFJFQURfT05DRShsb2NrLSZndDtjbGFzc19jYWNoZVtzdWJjbGFzc10pOwomIzQzOwkJaWYgKCFsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGxvY2ssIGNsYXNzLCBzdWJjbGFzcykpCiYjNDM7CQkJY2xhc3MgPSBOVUxMOwomIzQzOwl9CiAJLyoKIAkgKiBOb3QgY2FjaGVkPwogCSAqLwpAQCAtNTMyMyw5ICYjNDM7NTM1Nyw5IEBAIHN0YXRpYyBub2luc3RyIGludCBtYXRjaF9oZWxkX2xvY2soY29uc3Qgc3RydWN0IGhlbGRfbG9jayAqaGxvY2ssCiAJCXJldHVybiAxOwogCiAJaWYgKGhsb2NrLSZndDtyZWZlcmVuY2VzKSB7Ci0JCWNvbnN0IHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IGxvY2stJmd0O2NsYXNzX2NhY2hlWzBdOwomIzQzOwkJY29uc3Qgc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gUkVBRF9PTkNFKGxvY2stJmd0O2NsYXNzX2NhY2hlWzBdKTsKIAotCQlpZiAoIWNsYXNzKQomIzQzOwkJaWYgKCFsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGxvY2ssIGNsYXNzLCAwKSkKIAkJCWNsYXNzID0gbG9va191cF9sb2NrX2NsYXNzKGxvY2ssIDApOwogCiAJCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDYyCgkJCQkJCQlvdXRwdXQ6IDE1MwoJCQkJCQkJdGhvdWdodHM6IDYzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExvY2tkZXAgQ2FjaGUgVmFsaWRhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgc29sZWx5IG9uIGludGVybmFsIGxvY2tkZXAgbWVjaGFuaWNzLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGhvdyBpdCBjYWNoZXMgbG9jayBjbGFzc2VzIHdpdGhpbiB0aGUgYGtlcm5lbC9sb2NraW5nL2xvY2tkZXAuY2AgZmlsZS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWJvdXQgY29uY3VycmVuY3kgaXNzdWVzIG9uIGBsb2NrLSZndDtjbGFzc19jYWNoZWAuIEkgc2VlIGEgbmV3IGZ1bmN0aW9uLCBgbG9ja19jbGFzc19jYWNoZV9pc192YWxpZGAsIGhhcyBiZWVuIGFkZGVkIHRvIHZhbGlkYXRlIHRoZSBjYWNoZWQgY2xhc3MgcG9pbnRlciBiZWZvcmUgaXQmIzM5O3MgdXNlZC4gVGhpcyBpcyBzbWFydDsgdGhpcyBpcyBhYm91dCBwcmV2ZW50aW5nIHRoZSB1c2Ugb2YgYSBzdGFsZSBvciBjb3JydXB0ZWQgY2FjaGUsIGEgdGV4dGJvb2sgc29sdXRpb24gZm9yIGEgcmFjZSBjb25kaXRpb24uCgpJJiMzOTt2ZSBzcG90dGVkIHRoZSBjaGFuZ2VzIGludm9sdmUgYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCBmb3IgYWNjZXNzaW5nIGFuZCB1cGRhdGluZyB0aGUgYGxvY2stJmd0O2NsYXNzX2NhY2hlYCwgd2hpY2ggZnVydGhlciByZWluZm9yY2VzIHRoZSBkYXRhIHJhY2UgbWl0aWdhdGlvbiBhbmdsZS4gVGhlIGxvZ2ljIG9mIHZhbGlkYXRpbmcgdGhlIGNhY2hlZCBgY2xhc3NgIGJlZm9yZSB1c2FnZSBpcyBjbGVhciBhbmQgY29uY2lzZS4KClRoaW5raW5nIGFib3V0IGl0LCB0aGUgc2NvcGUgaXMgc3RyaWN0bHkgd2l0aGluIGxvY2tkZXAmIzM5O3MgaW50ZXJuYWwgc3RhdGUgdHJhY2tpbmcuIFRoZXJlJiMzOTtzIG5vdGhpbmcgaGVyZSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlIG9yIGludHJvZHVjZXMgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLCBub3IgYXJlIHRoZXJlIGFueSBhbGxvY2F0aW9ucy4gVGhhdCBtZWFucywgdGhlIHByb2JsZW0gYmVpbmcgZml4ZWQgaGFzIHRvIGJlIHNvbWV0aGluZyBsaWtlIGEgZGF0YSByYWNlIG9yIGEgbWVtb3J5IGNvcnJ1cHRpb24gcHJvYmxlbSB3aXRoaW4gbG9ja2RlcCwgbGlrZSBhIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgYSBsb2dpY2FsIGJ1ZyBkdWUgdG8gYSBzdGFsZSBjYWNoZS4KCk5vdywgS0FTQU4sIEtDU0FOLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHdvdWxkIGNhdGNoIGRhdGEgcmFjZXMgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMuIEtNU0FOIGlzIHRoZSB0b29sIGZvciBmaW5kaW5nIGlzc3VlcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBHaXZlbiB0aGF0IGBsb2NrLSZndDtjbGFzc19jYWNoZWAgaXMgaW5pdGlhbGl6ZWQgdG8gTlVMTCBpbiBgbG9ja2RlcF9pbml0X21hcF90eXBlYCwgSSBhbSBub3Qgc2VlaW5nIEtNU0FOIGJlaW5nIGFwcGxpY2FibGUgdG8gdGhpcyBwYXRjaDsgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoaXMgcGF0Y2ggaXMgbm90IGludHJvZHVjaW5nIG9yIGZpeGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gYGxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWRgIGNvbmZpcm1zIHRoaXMuIEl0IGNoZWNrczoKLSBUaGUgY2xhc3MgcG9pbnRlciBpcyBub3QgTlVMTAotIFRoZSBjbGFzcyBwb2ludGVyIGlzIHdpdGhpbiB0aGUgdmFsaWQgbG9jayBjbGFzc2VzIGFycmF5Ci0gVGhlIGNsYXNzIGlzIGluIHVzZSBiYXNlZCBvbiB0aGUgYGxvY2tfY2xhc3Nlc19pbl91c2VgIGJpdCBhcnJheQotIFRoZSBsb2NrJiMzOTtzIGtleSBpcyBub3QgTlVMTAotIFRoZSBjbGFzcyYjMzk7cyBzdWJjbGFzcyBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlCi0gVGhlIGNsYXNzJiMzOTtzIGtleSBtYXRjaGVzIHRoZSBsb2NrJiMzOTtzIGtleQoKVGhlcmVmb3JlLCB0aGUgY2hlY2tzIGluIHRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGFyZSB0byBlbnN1cmUgdGhhdCB0aGUgbG9jayBjbGFzcyBpcyB2YWxpZCBhbmQgbWF0Y2hlcyB0aGUgbG9jayYjMzk7cyBrZXksIGFuZCB0aGlzIGNvbmZpcm1zIHRoaXMgaXMgbm90IGFuIGlzc3VlIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsb2NrZGVwJiMzOTtzIGludGVybmFsIGNhY2hpbmcgbWVjaGFuaXNtIGZvciBsb2NrIGNsYXNzZXMgKGBsb2NrLVx1MDAzZWNsYXNzX2NhY2hlYCkuIEl0IGludHJvZHVjZXMgYSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkYCBhbmQgdXNlcyBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBlbnN1cmUgdGhlIGNhY2hlZCBjbGFzcyBwb2ludGVyIGlzIHZhbGlkIGJlZm9yZSB1c2UuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBpc3N1ZXMsIHN0YWxlIGNhY2hlIGVudHJpZXMsIG9yIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAod2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0NTQU4sIEtBU0FOLCBvciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tkZXAmIzM5O3MgaW50ZXJuYWwgY2FjaGluZyBtZWNoYW5pc20gZm9yIGxvY2sgY2xhc3NlcyAoYGxvY2stXHUwMDNlY2xhc3NfY2FjaGVgKS4gSXQgaW50cm9kdWNlcyBhIHZhbGlkYXRpb24gZnVuY3Rpb24gYGxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWRgIGFuZCB1c2VzIGBSRUFEX09OQ0VgL2BXUklURV9PTkNFYCB0byBwcmV2ZW50IGRhdGEgcmFjZXMgYW5kIGVuc3VyZSB0aGUgY2FjaGVkIGNsYXNzIHBvaW50ZXIgaXMgdmFsaWQgYmVmb3JlIHVzZS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGNvbmN1cnJlbmN5IGlzc3Vlcywgc3RhbGUgY2FjaGUgZW50cmllcywgb3IgcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzICh3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQ1NBTiwgS0FTQU4sIG9yIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29waWVzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoxOTo0NS44NTY2OTg4OTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM0MTEwMjQ1NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST1ZFX0xPQ0tJTkdcIixcbiAgICBcIkxPQ0tERVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb2NrZGVwJ3MgaW50ZXJuYWwgY2FjaGluZyBtZWNoYW5pc20gZm9yIGxvY2sgY2xhc3NlcyAoYGxvY2stXFx1MDAzZWNsYXNzX2NhY2hlYCkuIEl0IGludHJvZHVjZXMgYSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkYCBhbmQgdXNlcyBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBlbnN1cmUgdGhlIGNhY2hlZCBjbGFzcyBwb2ludGVyIGlzIHZhbGlkIGJlZm9yZSB1c2UuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBpc3N1ZXMsIHN0YWxlIGNhY2hlIGVudHJpZXMsIG9yIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAod2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0NTQU4sIEtBU0FOLCBvciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2NrZGVwIHN1YnN5c3RlbSB0byB2YWxpZGF0ZSBjYWNoZWQgbG9jayBjbGFzc2VzIHVzaW5nIGxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWQoKSBhbmQgYWRkcyBSRUFEX09OQ0UvV1JJVEVfT05DRSB0byBwcmV2ZW50IGRhdGEgcmFjZXMgb24gbG9jay1cXHUwMDNlY2xhc3NfY2FjaGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNvcmUga2VybmVsIGRlYnVnZ2luZyBtZWNoYW5pc20gdGhhdCBpcyByZWFjaGFibGUgdmlhIGFueSBsb2NrIGFjcXVpc2l0aW9uLiBGdXp6aW5nIHdpdGggUFJPVkVfTE9DS0lORyBlbmFibGVkIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZXNlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoxOTo0NS44NTY3MDQyNTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MzQyOTA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGYwNTFjY2NiYTFiY2MyZTM5ODUxNTJmY2M4MTRkMjMxMjUwM2FjY2FcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTg6MTk6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXFxuaW5kZXggMjVkNzdkNGExMDYxNC4uNzYzZjc5ODA2YmQ4ZiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcXG4rKysgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcXG5AQCAtOTYzLDYgKzk2MywzNCBAQCBsb29rX3VwX2xvY2tfY2xhc3MoY29uc3Qgc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MpXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgbG9ja19jbGFzc19jYWNoZV9pc192YWxpZChjb25zdCBzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHN1YmNsYXNzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBjbGFzc19zdWJjbGFzcztcXG4rXFxuK1xcdGlmICghY2xhc3MpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseShjbGFzcyBcXHUwMDNjIGxvY2tfY2xhc3NlcyB8fCBjbGFzcyBcXHUwMDNlPSBsb2NrX2NsYXNzZXMgKyBNQVhfTE9DS0RFUF9LRVlTKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KCFhcmNoX3Rlc3RfYml0KGNsYXNzIC0gbG9ja19jbGFzc2VzLCBsb2NrX2NsYXNzZXNfaW5fdXNlKSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseSghbG9jay1cXHUwMDNla2V5KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Y2xhc3Nfc3ViY2xhc3MgPSBzdWJjbGFzcyA/IHN1YmNsYXNzIDogY2xhc3MtXFx1MDAzZXN1YmNsYXNzO1xcbitcXHRpZiAodW5saWtlbHkoY2xhc3Nfc3ViY2xhc3MgXFx1MDAzZT0gTUFYX0xPQ0tERVBfU1VCQ0xBU1NFUykpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseShSRUFEX09OQ0UoY2xhc3MtXFx1MDAzZWtleSkgIT0gbG9jay1cXHUwMDNla2V5LVxcdTAwM2VzdWJrZXlzICsgY2xhc3Nfc3ViY2xhc3MpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gLypcXG4gICogU3RhdGljIGxvY2tzIGRvIG5vdCBoYXZlIHRoZWlyIGNsYXNzLWtleXMgeWV0IC0gZm9yIHRoZW0gdGhlIGtleSBpc1xcbiAgKiB0aGUgbG9jayBvYmplY3QgaXRzZWxmLiBJZiB0aGUgbG9jayBpcyBpbiB0aGUgcGVyIGNwdSBhcmVhLCB0aGVcXG5AQCAtMTM5NSw5ICsxNDIzLDkgQEAgcmVnaXN0ZXJfbG9ja19jbGFzcyhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcywgaW50IGZvcmNlKVxcbiBcXG4gb3V0X3NldF9jbGFzc19jYWNoZTpcXG4gXFx0aWYgKCFzdWJjbGFzcyB8fCBmb3JjZSlcXG4tXFx0XFx0bG9jay1cXHUwMDNlY2xhc3NfY2FjaGVbMF0gPSBjbGFzcztcXG4rXFx0XFx0V1JJVEVfT05DRShsb2NrLVxcdTAwM2VjbGFzc19jYWNoZVswXSwgY2xhc3MpO1xcbiBcXHRlbHNlIGlmIChzdWJjbGFzcyBcXHUwMDNjIE5SX0xPQ0tERVBfQ0FDSElOR19DTEFTU0VTKVxcbi1cXHRcXHRsb2NrLVxcdTAwM2VjbGFzc19jYWNoZVtzdWJjbGFzc10gPSBjbGFzcztcXG4rXFx0XFx0V1JJVEVfT05DRShsb2NrLVxcdTAwM2VjbGFzc19jYWNoZVtzdWJjbGFzc10sIGNsYXNzKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEhhc2ggY29sbGlzaW9uLCBkaWQgd2Ugc21va2Ugc29tZT8gV2UgZm91bmQgYSBjbGFzcyB3aXRoIGEgbWF0Y2hpbmdcXG5AQCAtNDk1Nyw3ICs0OTg1LDcgQEAgdm9pZCBsb2NrZGVwX2luaXRfbWFwX3R5cGUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBjb25zdCBjaGFyICpuYW1lLFxcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9MT0NLREVQX0NBQ0hJTkdfQ0xBU1NFUzsgaSsrKVxcbi1cXHRcXHRsb2NrLVxcdTAwM2VjbGFzc19jYWNoZVtpXSA9IE5VTEw7XFxuK1xcdFxcdFdSSVRFX09OQ0UobG9jay1cXHUwMDNlY2xhc3NfY2FjaGVbaV0sIE5VTEwpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19MT0NLX1NUQVRcXG4gXFx0bG9jay1cXHUwMDNlY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTtcXG5AQCAtNTAyMiwxMiArNTA1MCwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChfX2xvY2tkZXBfbm9fdHJhY2tfXyk7XFxuIHZvaWQgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm4oc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBsb2NrX2NtcF9mbiBjbXBfZm4sXFxuIFxcdFxcdFxcdCAgICAgbG9ja19wcmludF9mbiBwcmludF9mbilcXG4ge1xcbi1cXHRzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MgPSBsb2NrLVxcdTAwM2VjbGFzc19jYWNoZVswXTtcXG4rXFx0c3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gUkVBRF9PTkNFKGxvY2stXFx1MDAzZWNsYXNzX2NhY2hlWzBdKTtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuIFxcdHJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuIFxcdGxvY2tkZXBfcmVjdXJzaW9uX2luYygpO1xcbiBcXG4rXFx0aWYgKCFsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGxvY2ssIGNsYXNzLCAwKSlcXG4rXFx0XFx0Y2xhc3MgPSBOVUxMO1xcbitcXG4gXFx0aWYgKCFjbGFzcylcXG4gXFx0XFx0Y2xhc3MgPSByZWdpc3Rlcl9sb2NrX2NsYXNzKGxvY2ssIDAsIDApO1xcbiBcXG5AQCAtNTExOSw4ICs1MTUwLDExIEBAIHN0YXRpYyBpbnQgX19sb2NrX2FjcXVpcmUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsXFxuIFxcdGlmIChERUJVR19MT0NLU19XQVJOX09OKHN1YmNsYXNzIFxcdTAwM2U9IE1BWF9MT0NLREVQX1NVQkNMQVNTRVMpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChzdWJjbGFzcyBcXHUwMDNjIE5SX0xPQ0tERVBfQ0FDSElOR19DTEFTU0VTKVxcbi1cXHRcXHRjbGFzcyA9IGxvY2stXFx1MDAzZWNsYXNzX2NhY2hlW3N1YmNsYXNzXTtcXG4rXFx0aWYgKHN1YmNsYXNzIFxcdTAwM2MgTlJfTE9DS0RFUF9DQUNISU5HX0NMQVNTRVMpIHtcXG4rXFx0XFx0Y2xhc3MgPSBSRUFEX09OQ0UobG9jay1cXHUwMDNlY2xhc3NfY2FjaGVbc3ViY2xhc3NdKTtcXG4rXFx0XFx0aWYgKCFsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGxvY2ssIGNsYXNzLCBzdWJjbGFzcykpXFxuK1xcdFxcdFxcdGNsYXNzID0gTlVMTDtcXG4rXFx0fVxcbiBcXHQvKlxcbiBcXHQgKiBOb3QgY2FjaGVkP1xcbiBcXHQgKi9cXG5AQCAtNTMyMyw5ICs1MzU3LDkgQEAgc3RhdGljIG5vaW5zdHIgaW50IG1hdGNoX2hlbGRfbG9jayhjb25zdCBzdHJ1Y3QgaGVsZF9sb2NrICpobG9jayxcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcbiBcXHRpZiAoaGxvY2stXFx1MDAzZXJlZmVyZW5jZXMpIHtcXG4tXFx0XFx0Y29uc3Qgc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gbG9jay1cXHUwMDNlY2xhc3NfY2FjaGVbMF07XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IFJFQURfT05DRShsb2NrLVxcdTAwM2VjbGFzc19jYWNoZVswXSk7XFxuIFxcbi1cXHRcXHRpZiAoIWNsYXNzKVxcbitcXHRcXHRpZiAoIWxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWQobG9jaywgY2xhc3MsIDApKVxcbiBcXHRcXHRcXHRjbGFzcyA9IGxvb2tfdXBfbG9ja19jbGFzcyhsb2NrLCAwKTtcXG4gXFxuIFxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjE5OjQ2LjIyMDc1MTM4NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1OTk0MzMyNjI0NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPVkVfTE9DS0lOR1wiLFxuICAgIFwiTE9DS0RFUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2NrZGVwIHN1YnN5c3RlbSB0byB2YWxpZGF0ZSBjYWNoZWQgbG9jayBjbGFzc2VzIHVzaW5nIGxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWQoKSBhbmQgYWRkcyBSRUFEX09OQ0UvV1JJVEVfT05DRSB0byBwcmV2ZW50IGRhdGEgcmFjZXMgb24gbG9jay1cXHUwMDNlY2xhc3NfY2FjaGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNvcmUga2VybmVsIGRlYnVnZ2luZyBtZWNoYW5pc20gdGhhdCBpcyByZWFjaGFibGUgdmlhIGFueSBsb2NrIGFjcXVpc2l0aW9uLiBGdXp6aW5nIHdpdGggUFJPVkVfTE9DS0lORyBlbmFibGVkIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZXNlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMDUxY2NjYmExYmNjMmUzOTg1MTUyZmNjODE0ZDIzMTI1MDNhY2NhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTg6MTk6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcbmluZGV4IDI1ZDc3ZDRhMTA2MTQuLjc2M2Y3OTgwNmJkOGYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcbisrKyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xuQEAgLTk2Myw2ICs5NjMsMzQgQEAgbG9va191cF9sb2NrX2NsYXNzKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jayxcbitcdFx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MsXG4rXHRcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IHN1YmNsYXNzKVxuK3tcbitcdHVuc2lnbmVkIGludCBjbGFzc19zdWJjbGFzcztcbitcbitcdGlmICghY2xhc3MpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICh1bmxpa2VseShjbGFzcyBcdTAwM2MgbG9ja19jbGFzc2VzIHx8IGNsYXNzIFx1MDAzZT0gbG9ja19jbGFzc2VzICsgTUFYX0xPQ0tERVBfS0VZUykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICh1bmxpa2VseSghYXJjaF90ZXN0X2JpdChjbGFzcyAtIGxvY2tfY2xhc3NlcywgbG9ja19jbGFzc2VzX2luX3VzZSkpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAodW5saWtlbHkoIWxvY2stXHUwMDNla2V5KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Y2xhc3Nfc3ViY2xhc3MgPSBzdWJjbGFzcyA/IHN1YmNsYXNzIDogY2xhc3MtXHUwMDNlc3ViY2xhc3M7XG4rXHRpZiAodW5saWtlbHkoY2xhc3Nfc3ViY2xhc3MgXHUwMDNlPSBNQVhfTE9DS0RFUF9TVUJDTEFTU0VTKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHVubGlrZWx5KFJFQURfT05DRShjbGFzcy1cdTAwM2VrZXkpICE9IGxvY2stXHUwMDNla2V5LVx1MDAzZXN1YmtleXMgKyBjbGFzc19zdWJjbGFzcykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiAvKlxuICAqIFN0YXRpYyBsb2NrcyBkbyBub3QgaGF2ZSB0aGVpciBjbGFzcy1rZXlzIHlldCAtIGZvciB0aGVtIHRoZSBrZXkgaXNcbiAgKiB0aGUgbG9jayBvYmplY3QgaXRzZWxmLiBJZiB0aGUgbG9jayBpcyBpbiB0aGUgcGVyIGNwdSBhcmVhLCB0aGVcbkBAIC0xMzk1LDkgKzE0MjMsOSBAQCByZWdpc3Rlcl9sb2NrX2NsYXNzKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLCBpbnQgZm9yY2UpXG4gXG4gb3V0X3NldF9jbGFzc19jYWNoZTpcbiBcdGlmICghc3ViY2xhc3MgfHwgZm9yY2UpXG4tXHRcdGxvY2stXHUwMDNlY2xhc3NfY2FjaGVbMF0gPSBjbGFzcztcbitcdFx0V1JJVEVfT05DRShsb2NrLVx1MDAzZWNsYXNzX2NhY2hlWzBdLCBjbGFzcyk7XG4gXHRlbHNlIGlmIChzdWJjbGFzcyBcdTAwM2MgTlJfTE9DS0RFUF9DQUNISU5HX0NMQVNTRVMpXG4tXHRcdGxvY2stXHUwMDNlY2xhc3NfY2FjaGVbc3ViY2xhc3NdID0gY2xhc3M7XG4rXHRcdFdSSVRFX09OQ0UobG9jay1cdTAwM2VjbGFzc19jYWNoZVtzdWJjbGFzc10sIGNsYXNzKTtcbiBcbiBcdC8qXG4gXHQgKiBIYXNoIGNvbGxpc2lvbiwgZGlkIHdlIHNtb2tlIHNvbWU/IFdlIGZvdW5kIGEgY2xhc3Mgd2l0aCBhIG1hdGNoaW5nXG5AQCAtNDk1Nyw3ICs0OTg1LDcgQEAgdm9pZCBsb2NrZGVwX2luaXRfbWFwX3R5cGUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBjb25zdCBjaGFyICpuYW1lLFxuIFx0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9MT0NLREVQX0NBQ0hJTkdfQ0xBU1NFUzsgaSsrKVxuLVx0XHRsb2NrLVx1MDAzZWNsYXNzX2NhY2hlW2ldID0gTlVMTDtcbitcdFx0V1JJVEVfT05DRShsb2NrLVx1MDAzZWNsYXNzX2NhY2hlW2ldLCBOVUxMKTtcbiBcbiAjaWZkZWYgQ09ORklHX0xPQ0tfU1RBVFxuIFx0bG9jay1cdTAwM2VjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpO1xuQEAgLTUwMjIsMTIgKzUwNTAsMTUgQEAgRVhQT1JUX1NZTUJPTF9HUEwoX19sb2NrZGVwX25vX3RyYWNrX18pO1xuIHZvaWQgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm4oc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBsb2NrX2NtcF9mbiBjbXBfZm4sXG4gXHRcdFx0ICAgICBsb2NrX3ByaW50X2ZuIHByaW50X2ZuKVxuIHtcbi1cdHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IGxvY2stXHUwMDNlY2xhc3NfY2FjaGVbMF07XG4rXHRzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MgPSBSRUFEX09OQ0UobG9jay1cdTAwM2VjbGFzc19jYWNoZVswXSk7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0cmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiBcdGxvY2tkZXBfcmVjdXJzaW9uX2luYygpO1xuIFxuK1x0aWYgKCFsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGxvY2ssIGNsYXNzLCAwKSlcbitcdFx0Y2xhc3MgPSBOVUxMO1xuK1xuIFx0aWYgKCFjbGFzcylcbiBcdFx0Y2xhc3MgPSByZWdpc3Rlcl9sb2NrX2NsYXNzKGxvY2ssIDAsIDApO1xuIFxuQEAgLTUxMTksOCArNTE1MCwxMSBAQCBzdGF0aWMgaW50IF9fbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLFxuIFx0aWYgKERFQlVHX0xPQ0tTX1dBUk5fT04oc3ViY2xhc3MgXHUwMDNlPSBNQVhfTE9DS0RFUF9TVUJDTEFTU0VTKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAoc3ViY2xhc3MgXHUwMDNjIE5SX0xPQ0tERVBfQ0FDSElOR19DTEFTU0VTKVxuLVx0XHRjbGFzcyA9IGxvY2stXHUwMDNlY2xhc3NfY2FjaGVbc3ViY2xhc3NdO1xuK1x0aWYgKHN1YmNsYXNzIFx1MDAzYyBOUl9MT0NLREVQX0NBQ0hJTkdfQ0xBU1NFUykge1xuK1x0XHRjbGFzcyA9IFJFQURfT05DRShsb2NrLVx1MDAzZWNsYXNzX2NhY2hlW3N1YmNsYXNzXSk7XG4rXHRcdGlmICghbG9ja19jbGFzc19jYWNoZV9pc192YWxpZChsb2NrLCBjbGFzcywgc3ViY2xhc3MpKVxuK1x0XHRcdGNsYXNzID0gTlVMTDtcbitcdH1cbiBcdC8qXG4gXHQgKiBOb3QgY2FjaGVkP1xuIFx0ICovXG5AQCAtNTMyMyw5ICs1MzU3LDkgQEAgc3RhdGljIG5vaW5zdHIgaW50IG1hdGNoX2hlbGRfbG9jayhjb25zdCBzdHJ1Y3QgaGVsZF9sb2NrICpobG9jayxcbiBcdFx0cmV0dXJuIDE7XG4gXG4gXHRpZiAoaGxvY2stXHUwMDNlcmVmZXJlbmNlcykge1xuLVx0XHRjb25zdCBzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MgPSBsb2NrLVx1MDAzZWNsYXNzX2NhY2hlWzBdO1xuK1x0XHRjb25zdCBzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MgPSBSRUFEX09OQ0UobG9jay1cdTAwM2VjbGFzc19jYWNoZVswXSk7XG4gXG4tXHRcdGlmICghY2xhc3MpXG4rXHRcdGlmICghbG9ja19jbGFzc19jYWNoZV9pc192YWxpZChsb2NrLCBjbGFzcywgMCkpXG4gXHRcdFx0Y2xhc3MgPSBsb29rX3VwX2xvY2tfY2xhc3MobG9jaywgMCk7XG4gXG4gXHRcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoxOTo0Ni4yMjA3NTI3NTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTExMTI0OTU4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIExvY2tkZXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0aW5rZXJpbmcgd2l0aCBga2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBhcmVhLCByaWdodD8gV2UncmUgdGFsa2luZyBhYm91dCBjb3JlIGtlcm5lbCBsb2NraW5nLCBzcGVjaWZpY2FsbHkgdGhlIGxvY2sgZGVwZW5kZW5jeSBjaGVja2VyLlxuXG5GaXJzdCBvZmYsIGl0IHNlZW1zIGxpa2UgdGhlIHByaW1hcnkgY2hhbmdlcyBpbnZvbHZlIGludHJvZHVjaW5nIGEgbmV3IGZ1bmN0aW9uLCBgbG9ja19jbGFzc19jYWNoZV9pc192YWxpZGAsIGFuZCBpbmNvcnBvcmF0aW5nIGBSRUFEX09OQ0VgL2BXUklURV9PTkNFYCBmb3IgYGxvY2stXHUwMDNlY2xhc3NfY2FjaGVgLiBUaGF0IHN1Z2dlc3RzIHRoZXkncmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBpbnZhbGlkIGNhY2hlIHVzYWdlIHdpdGhpbiB0aGUgbG9jayBjbGFzcyBjYWNoaW5nIG1lY2hhbmlzbSwgd2hpY2ggaXMgZ29vZC4gV2UgYXJlIHRhbGtpbmcgYWJvdXQgYSBzYWZldHkgaW1wcm92ZW1lbnQgaGVyZS5cblxuRnVuY3Rpb25hbGx5LCB5ZXMsIHRoaXMgZGVmaW5pdGVseSBhbHRlcnMgYmVoYXZpb3IuIEl0IGFkZHMgdmFsaWRhdGlvbi4gU28sIHRoZSBuZXh0IHF1ZXN0aW9uIGlzLCBzaG91bGQgd2UgZnV6eiBpdD8gQWJzb2x1dGVseSEgVGhpcyB0b3VjaGVzIGNvcmUga2VybmVsIGNvZGUsIGFjY2Vzc2libGUgdGhyb3VnaCAqYW55KiBzeXNjYWxsIHRoYXQgYWNxdWlyZXMgbG9ja3MuIFRoYXQgbWVhbnMgdGhlIGF0dGFjayBzdXJmYWNlIGlzIGh1Z2UuIE5vdywgdGhlIGNhdGNoIGlzIHRoYXQgbG9ja2RlcCBpcyBwcmltYXJpbHkgYSAqZGVidWdnaW5nKiB0b29sLCBlbmFibGVkIGJ5IGBDT05GSUdfTE9DS0RFUGAgYW5kIGBDT05GSUdfUFJPVkVfTE9DS0lOR2AsIG1lYW5pbmcgaXQgbWF5IGJlIGRpZmZpY3VsdCB0byB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLlxuXG5BbHJpZ2h0LCB3aGF0IHNwZWNpZmljYWxseSB0byBmb2N1cyBvbj8gVGhlIHBhdGNoIG1vZGlmaWVzIGBsb2NrZGVwX3NldF9sb2NrX2NtcF9mbmAsIGBfX2xvY2tfYWNxdWlyZWAsIGFuZCBgbWF0Y2hfaGVsZF9sb2NrYC4gYF9fbG9ja19hY3F1aXJlYCBpcyBhICp2ZXJ5KiBob3QgcGF0aCwgb2J2aW91c2x5LiBgbWF0Y2hfaGVsZF9sb2NrYCBpcyBhbHNvIHByZXR0eSBoaWdoLXRyYWZmaWMuIEJ1dCB3YWl04oCmIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBUaGF0J3MgYSBnb29kIHBvaW50ISBMb2NraW5nIGZ1bmN0aW9ucyBhcmUsIGJ5IHRoZWlyIHZlcnkgbmF0dXJlLCBnZW5lcmljIGFuZCBmcmVxdWVudGx5IGNhbGxlZC5cblxuU28sIGFtIEkgc3VwcG9zZWQgdG8gbGVhdmUgdGhlIFwiRm9jdXNTeW1ib2xzXCIgYmxhbms/IExldCdzIGNoZWNrIGZvciBsZXNzIGhvdC1wYXRoIGZ1bmN0aW9ucy4gQWhhLCBgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm5gIGlzIGV4cG9ydGVkIGFuZCB1c2VkIGJ5IHNvbWUgZHJpdmVycy9zdWJzeXN0ZW1zLiBUaGF0J3MgYSBzb2xpZCBjYW5kaWRhdGUuIExldCdzIGRpZyBpbnRvIHdoZXJlIGVsc2UgYGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuYCBpcyBiZWluZyB1c2VkLCBiZWNhdXNlIGlmIGl0J3MgdXNlZCBtb3JlIHRoYW4gb25jZSwgaXQgc3VnZ2VzdHMgdGhlcmUncyBzb21lIHVzZWZ1bCwgdGFyZ2V0ZWQgZm9jdXMgZm9yIGZ1enppbmcsIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNjUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoyMzoxNy4zMzMyNTE2NDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MTk3MTY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb2NrZGVwX3NldF9sb2NrX2NtcF9mblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD0zODY9ZXh0ZXJuIGludCBsb2NrZGVwX2lzX2hlbGQoY29uc3Qgdm9pZCAqKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTQxMi0jaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkdcXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo0MTM6dm9pZCBsb2NrZGVwX3NldF9sb2NrX2NtcF9mbihzdHJ1Y3QgbG9ja2RlcF9tYXAgKiwgbG9ja19jbXBfZm4sIGxvY2tfcHJpbnRfZm4pO1xcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTQxNC1cXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo0MTU6I2RlZmluZSBsb2NrX3NldF9jbXBfZm4obG9jaywgLi4uKVxcdGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuKFxcdTAwMjYobG9jayktXFx1MDAzZWRlcF9tYXAsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTQxNi0jZWxzZVxcbi0tXFxua2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jPTUwNDc9RVhQT1JUX1NZTUJPTF9HUEwoX19sb2NrZGVwX25vX3RyYWNrX18pO1xcbi0tXFxua2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jLTUwNDktI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HXFxua2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jOjUwNTA6dm9pZCBsb2NrZGVwX3NldF9sb2NrX2NtcF9mbihzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIGxvY2tfY21wX2ZuIGNtcF9mbixcXG5rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMtNTA1MS1cXHRcXHRcXHQgICAgIGxvY2tfcHJpbnRfZm4gcHJpbnRfZm4pXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMtNTA3NS19XFxua2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jOjUwNzY6RVhQT1JUX1NZTUJPTF9HUEwobG9ja2RlcF9zZXRfbG9ja19jbXBfZm4pO1xcbmtlcm5lbC9sb2NraW5nL2xvY2tkZXAuYy01MDc3LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoyMzoxOS4yMDUyMjcyMzVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTIzNzc3MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipMb2NrZGVwIEZ1bmN0aW9uIFVzYWdlIEFuYWx5c2lzKipcblxuT2theSwgc28gYGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuYCBpcyBleHBvcnRlZCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIHBvdGVudGlhbGx5IGludGVyZXN0aW5nLCBidXQgaXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBob3cgcHJldmFsZW50IGl0cyB1c2UgYWN0dWFsbHkgaXMuIFRoZSBmYWN0IHRoYXQgaXQncyBvbmx5IGRlZmluZWQgaW4gYGxvY2tkZXAuaGAgYW5kIGBsb2NrZGVwLmNgIG1ha2VzIG1lIHN1c3BlY3QgaXQgbWlnaHQgYmUgaW50ZXJuYWwgdG8gdGhlIGxvY2tkZXAgc3Vic3lzdGVtLCBidXQgdGhhdCBleHBvcnQgZGVjbGFyYXRpb24gc3VnZ2VzdHMgb3RoZXJ3aXNlLiBXYWl0IGEgc2Vjb25kLi4uIGlzbid0IHRoYXQgZnVuY3Rpb24gYWN0dWFsbHkgdXNlZCBpbmRpcmVjdGx5IHRocm91Z2ggYGxvY2tfc2V0X2NtcF9mbmA/IFRoYXQgc2VlbXMgbGlrZWx5LiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBteSBzZWFyY2ggb24gYGxvY2tfc2V0X2NtcF9mbmAgYW5kIHNlZSB3aGVyZSB0aGF0J3MgY2FsbGVkIGluc3RlYWQuIFRoYXQnbGwgcHJvYmFibHkgdGVsbCB0aGUgcmVhbCBzdG9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMxNCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjIzOjIyLjMyOTAwNTg5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDAyMzYyMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9ja19zZXRfY21wX2ZuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWQvYmNhY2hlL2J0cmVlLmM9NTgxPXN0YXRpYyBzdHJ1Y3QgYnRyZWUgKm1jYV9idWNrZXRfYWxsb2Moc3RydWN0IGNhY2hlX3NldCAqYyxcXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL2J0cmVlLmMtNTkzLVxcdGluaXRfcndzZW0oXFx1MDAyNmItXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvbWQvYmNhY2hlL2J0cmVlLmM6NTk0OlxcdGxvY2tfc2V0X2NtcF9mbihcXHUwMDI2Yi1cXHUwMDNlbG9jaywgYnRyZWVfbG9ja19jbXBfZm4sIGJ0cmVlX2xvY2tfcHJpbnRfZm4pO1xcbmRyaXZlcnMvbWQvYmNhY2hlL2J0cmVlLmMtNTk1LVxcdG11dGV4X2luaXQoXFx1MDAyNmItXFx1MDAzZXdyaXRlX2xvY2spO1xcbi0tXFxuZnMvcGlwZS5jPTg3NT1zdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICphbGxvY19waXBlX2luZm8odm9pZClcXG4tLVxcbmZzL3BpcGUuYy05MTEtXFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2cGlwZS1cXHUwMDNlbXV0ZXgpO1xcbmZzL3BpcGUuYzo5MTI6XFx0XFx0bG9ja19zZXRfY21wX2ZuKFxcdTAwMjZwaXBlLVxcdTAwM2VtdXRleCwgcGlwZV9sb2NrX2NtcF9mbiwgTlVMTCk7XFxuZnMvcGlwZS5jLTkxMy1cXHRcXHRyZXR1cm4gcGlwZTtcXG4tLVxcbmZzL3hmcy9saWJ4ZnMveGZzX3J0Z3JvdXAuYz0zMjM9eGZzX3J0Z2lub2RlX2xvY2tkZXBfc2V0dXAoXFxuLS1cXG5mcy94ZnMvbGlieGZzL3hmc19ydGdyb3VwLmMtMzI5LVxcdFxcdFxcdHR5cGUpO1xcbmZzL3hmcy9saWJ4ZnMveGZzX3J0Z3JvdXAuYzozMzA6XFx0bG9ja19zZXRfY21wX2ZuKFxcdTAwMjZpcC1cXHUwMDNlaV9sb2NrLCB4ZnNfcnRnaW5vZGVfaWxvY2tfY21wX2ZuLFxcbmZzL3hmcy9saWJ4ZnMveGZzX3J0Z3JvdXAuYy0zMzEtXFx0XFx0XFx0eGZzX3J0Z2lub2RlX2lsb2NrX3ByaW50X2ZuKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oPTQxMz12b2lkIGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuKHN0cnVjdCBsb2NrZGVwX21hcCAqLCBsb2NrX2NtcF9mbiwgbG9ja19wcmludF9mbik7XFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNDE0LVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjQxNTojZGVmaW5lIGxvY2tfc2V0X2NtcF9mbihsb2NrLCAuLi4pXFx0bG9ja2RlcF9zZXRfbG9ja19jbXBfZm4oXFx1MDAyNihsb2NrKS1cXHUwMDNlZGVwX21hcCwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNDE2LSNlbHNlXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg6NDE3OiNkZWZpbmUgbG9ja19zZXRfY21wX2ZuKGxvY2ssIC4uLilcXHRkbyB7IH0gd2hpbGUgKDApXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNDE4LSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD0xMTM9c3RhdGljIGlubGluZSBpbnQgbmV0ZGV2X2xvY2tfY21wX2ZuKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqYSxcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtMTM5LVxcdFxcdFxcdCAgXFx1MDAyNmRldl9pbnN0YW5jZV9sb2NrX2tleSk7XFx0XFx0XFxcXFxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6MTQwOlxcdGxvY2tfc2V0X2NtcF9mbihcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrLCBuZXRkZXZfbG9ja19jbXBfZm4sIE5VTEwpO1xcdFxcXFxcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTE0MS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgKGRldiktXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcXHRcXHRcXFxcXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9NDAzPXN0YXRpYyBfX25ldF9pbml0IGludCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucylcXG4tLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy00MjQtXFx0bXV0ZXhfaW5pdChcXHUwMDI2bmV0LVxcdTAwM2VydG5sX211dGV4KTtcXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6NDI1OlxcdGxvY2tfc2V0X2NtcF9mbihcXHUwMDI2bmV0LVxcdTAwM2VydG5sX211dGV4LCBydG5sX25ldF9sb2NrX2NtcF9mbiwgTlVMTCk7XFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTQyNi1cXHRJTklUX1dPUksoXFx1MDAyNm5ldC1cXHUwMDNlcnRubF93b3JrLCBydG5sX25ldF93b3JrX2Z1bmMpO1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jPTEwOTQ9c3RhdGljIHN0cnVjdCBzb2NrICp1bml4X2NyZWF0ZTEoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQga2VybiwgaW50IHR5cGUpXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMTEyMy1cXHRzay1cXHUwMDNlc2tfZGVzdHJ1Y3RcXHRcXHQ9IHVuaXhfc29ja19kZXN0cnVjdG9yO1xcbm5ldC91bml4L2FmX3VuaXguYzoxMTI0OlxcdGxvY2tfc2V0X2NtcF9mbihcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jaywgdW5peF9yZWN2cV9sb2NrX2NtcF9mbiwgTlVMTCk7XFxubmV0L3VuaXgvYWZfdW5peC5jLTExMjUtXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMTEzMS1cXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2dS1cXHUwMDNlbG9jayk7XFxubmV0L3VuaXgvYWZfdW5peC5jOjExMzI6XFx0bG9ja19zZXRfY21wX2ZuKFxcdTAwMjZ1LVxcdTAwM2Vsb2NrLCB1bml4X3N0YXRlX2xvY2tfY21wX2ZuLCBOVUxMKTtcXG5uZXQvdW5peC9hZl91bml4LmMtMTEzMy1cXHRtdXRleF9pbml0KFxcdTAwMjZ1LVxcdTAwM2Vpb2xvY2spOyAvKiBzaW5nbGUgdGFzayByZWFkaW5nIGxvY2sgKi9cXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0zODEzPXN0YXRpYyBpbnQgX19uZXRfaW5pdCB1bml4X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zODM3LVxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZuZXQtXFx1MDAzZXVueC50YWJsZS5sb2Nrc1tpXSk7XFxubmV0L3VuaXgvYWZfdW5peC5jOjM4Mzg6XFx0XFx0bG9ja19zZXRfY21wX2ZuKFxcdTAwMjZuZXQtXFx1MDAzZXVueC50YWJsZS5sb2Nrc1tpXSwgdW5peF90YWJsZV9sb2NrX2NtcF9mbiwgTlVMTCk7XFxubmV0L3VuaXgvYWZfdW5peC5jLTM4MzktXFx0XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZuZXQtXFx1MDAzZXVueC50YWJsZS5idWNrZXRzW2ldKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6MjM6MjMuOTY5MjQ4MTA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA2MjUwNjE4Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiBPcHRpbWl6aW5nIExvY2tkZXAgU3ltYm9sIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGxvY2tfc2V0X2NtcF9mbmAgYW5kIHdoZXJlIGl0J3MgdXNlZCDigJMgcGlwZXMsIFVuaXggc29ja2V0cywgYW5kIG5ldCBuYW1lc3BhY2VzLiBUaGF0IG1lYW5zIGBsb2NrZGVwX3NldF9sb2NrX2NtcF9mbmAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIEhvd2V2ZXIsIHRoaXMgcGF0Y2ggaXMgcHJpbWFyaWx5IGFib3V0IG1vZGlmaWNhdGlvbnMgKndpdGhpbiogdGhlIGxvY2tkZXAgaW50ZXJuYWxzIHRoZW1zZWx2ZXMuIEl0J3Mgbm90IGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgZnVuY3Rpb247IGl0J3MgY2FsbGVkIGR1cmluZyB0aGUgKmluaXRpYWxpemF0aW9uKiBvZiB0aGVzZSBzdHJ1Y3R1cmVzLCBub3QgaW4gYW55IGhvdCBwYXRoLiBgX19sb2NrX2FjcXVpcmVgIGFuZCBgbWF0Y2hfaGVsZF9sb2NrYCwgKnRob3NlKiBhcmUgdGhlIHJlYWxseSBob3QgYXJlYXMuXG5cblNvLCBJIGNvdWxkIGluY2x1ZGUgYGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuYCBpbiBGb2N1c1N5bWJvbHMsIGJ1dCBJJ20gdGhpbmtpbmcgbWF5YmUgSSAqc2hvdWxkbid0Ki4gSWYgSSBpbmNsdWRlIGl0LCBpdCBjb3VsZCBwb3RlbnRpYWxseSBza2V3IHRoZSBmdXp6aW5nIGVmZm9ydHMgdG93YXJkcyB0aGUgY3JlYXRpb24gb2YgcGlwZXMgb3IgVW5peCBzb2NrZXRzLCB3aGVuIHRoZSBhY3R1YWwgYnVnIEknbSB0YXJnZXRpbmcgaXMgZGVlcGVyLCB3aXRoaW4gbG9ja2RlcC4gSSB3YW50IHRvIGtlZXAgdGhlIGZ1enppbmcgbW9yZSBnZW5lcmFsIHRvIGV4cG9zZSB0aGUgbG9ja2RlcCBpc3N1ZS4gQnV0IHRoZW4gYWdhaW4sIGlmIEkgKmRvbid0KiBpbmNsdWRlIGl0LCBzeXprYWxsZXIgd2lsbCBqdXN0IGZ1enogbm9ybWFsbHkuXG5cbldhaXQsIHRoZSBrZXkgaXMgdGhlIGNvbmZpZ3VyYXRpb24uIExvY2tkZXAgaXMgZW5hYmxlZCBieSBgQ09ORklHX1BST1ZFX0xPQ0tJTkdgIGFuZCBgQ09ORklHX0xPQ0tERVBgLiBPa2F5LCB0aGF0J3Mgd2hhdCBJIG5lZWQgdG8gZm9jdXMgb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgdHdvIGNvbmZpZ3VyYXRpb25zIGFyZSBpbmNsdWRlZCBpbiBFbmFibGVDb25maWdzLiBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfUFJPVkVfTE9DS0lOR2AgaXMgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgzMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozMzozMC4yMTk4NzA4NzRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMTU1ODQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFJPVkVfTE9DS0lOR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0xNDE2PWNvbmZpZyBMT0NLX0RFQlVHR0lOR19TVVBQT1JUXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNDIwLVxcbmxpYi9LY29uZmlnLmRlYnVnOjE0MjE6Y29uZmlnIFBST1ZFX0xPQ0tJTkdcXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNDIyLVxcdGJvb2wgXFxcIkxvY2sgZGVidWdnaW5nOiBwcm92ZSBsb2NraW5nIGNvcnJlY3RuZXNzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozMzozMS44MjE0MzU4ODFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjI5MDY0MTEyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkxvY2tpbmcgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgc28gYFBST1ZFX0xPQ0tJTkdgIGlzIGRlZmluaXRlbHkgdGhlIGtleSBjb25maWd1cmF0aW9uIGl0ZW0gd2UncmUgZGVhbGluZyB3aXRoIGhlcmUsIHRoYXQncyBjbGVhci4gQnV0IEknbSBhIGJpdCBjdXJpb3VzLCBhcmUgdGhlcmUgYW55ICpvdGhlciogcmVsYXRlZCBjb25maWdzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ/IFNvbWV0aGluZyBsaWtlIGBERUJVR19MT0NLX0FMTE9DYCwgcGVyaGFwcz8gSXQncyBhbHdheXMgZ29vZCB0byBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuXG5cblRvIGdldCBhIGRlZmluaXRpdmUgYW5zd2VyIGFuZCB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMsIEknbSBnb2luZyB0byBkaXZlIHN0cmFpZ2h0IGludG8gYGtlcm5lbC9sb2NraW5nL2xvY2tkZXAuY2AuIFRoYXQncyB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBsb2NrIGRlcGVuZGVuY3kgY2hlY2tlciwgYW5kIGl0IHNob3VsZCByZXZlYWwgZXhhY3RseSB3aGljaCBjb25maWd1cmF0aW9ucyBhcmUgdGllZCB0byBpdHMgZnVuY3Rpb25hbGl0eS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IG90aGVyIGxldmVycyB3ZSBjYW4gcHVsbCB0byBnZXQgdGhlIGV4YWN0IGxvY2sgZGVidWdnaW5nIGZlYXR1cmVzIHdlIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MTIsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0MDozNC43Mjc4NDkzNTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDM1MTA2MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqLVxcXFwkXFxcXChDT05GSUdfLipsb2NrZGVwLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xvY2tpbmcvTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX0RFQlVHX01VVEVYRVMpICs9IG11dGV4LWRlYnVnLm9cXG5rZXJuZWwvbG9ja2luZy9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfTE9DS0RFUCkgKz0gbG9ja2RlcC5vXFxua2VybmVsL2xvY2tpbmcvTWFrZWZpbGUtMjYtaWZlcSAoJChDT05GSUdfUFJPQ19GUykseSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6NDA6MzcuMDcxMzY1OTQyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NjEzNTI4NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkxvY2tkZXAgRGVlcCBEaXZlKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBsb2NrIGRlYnVnZ2luZy4uLiBhbmQgdGhlIGNydWNpYWwgc3RhcnRpbmcgcG9pbnQgaXMgYENPTkZJR19MT0NLREVQYC4gVGhhdCdzIHRoZSBiaWcgb25lLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfUFJPVkVfTE9DS0lOR2AgZGlyZWN0bHkgc2VsZWN0cyBgQ09ORklHX0xPQ0tERVBgLCBtYWtpbmcgaXQgcHJldHR5IGNlbnRyYWwgdG8gdGhlIHdob2xlIGxvY2sgdmFsaWRhdGlvbiBzY2hlbWUuIE1ha2VzIHNlbnNlLiBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYFBST1ZFX0xPQ0tJTkdgLiBJJ2xsIGdvIHN0cmFpZ2h0IHRvIGBsaWIvS2NvbmZpZy5kZWJ1Z2AgYW5kIHNlZSB3aGF0IGl0IHJldmVhbHMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoaXMgaXMgYWxsIHdpcmVkIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODQzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6NDA6NDEuNjMyNzIwNzczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTM3MTYwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFJPVkVfTE9DS0lOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0xNDE2PWNvbmZpZyBMT0NLX0RFQlVHR0lOR19TVVBQT1JUXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNDIwLVxcbmxpYi9LY29uZmlnLmRlYnVnOjE0MjE6Y29uZmlnIFBST1ZFX0xPQ0tJTkdcXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNDIyLVxcdGJvb2wgXFxcIkxvY2sgZGVidWdnaW5nOiBwcm92ZSBsb2NraW5nIGNvcnJlY3RuZXNzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0MDo0MS42ODIwOTcxMjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMjk0ODI5OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIERlYnVnZ2luZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGRlYnVnZ2luZyBjb25maWd1cmF0aW9uIG9mIHRoaXMgcHJvamVjdC4gTXkgaW50dWl0aW9uIHN1Z2dlc3RzIHRoZSBpc3N1ZSBtaWdodCBiZSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgS2NvbmZpZyBvcHRpb24sIGFuZCBiYXNlZCBvbiBleHBlcmllbmNlLCBgbGliL0tjb25maWcuZGVidWdgIGlzIHVzdWFsbHkgdGhlIHJpZ2h0IHBsYWNlIHRvIGxvb2sgZm9yIHRoYXQgc29ydCBvZiB0aGluZy4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gYXJvdW5kIGxpbmUgMTQyMS4gVGhhdCdzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludDsgaXQncyBsaWtlbHkgd2hlcmUgdGhlIG1vcmUgc3BlY2lmaWMgZGVidWcgb3B0aW9ucyBtaWdodCBiZSBkZWZpbmVkIG9yIHdoZXJlIHJlbGF0ZWQgZGVwZW5kZW5jaWVzIGFyZSBoYW5kbGVkLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IEtjb25maWcgc3ltYm9scywgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGRlZmF1bHQgdmFsdWVzIHRoYXQgbWlnaHQgZ2l2ZSBtZSBhIGNsdWUgYWJvdXQgdGhlIGJlaGF2aW9yIEknbSBzZWVpbmcuIFdpdGggYSBiaXQgb2YgbHVjaywgdGhlIGFuc3dlciBpcyByaWdodCB0aGVyZSBpbiBmcm9udCBvZiBtZS4gT3RoZXJ3aXNlLCBJIHdpbGwgaGF2ZSB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTU3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6NDY6MTIuOTc2OTI5NzI2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDE1OlxcdFxcbjE0MTY6XFx0Y29uZmlnIExPQ0tfREVCVUdHSU5HX1NVUFBPUlRcXG4xNDE3OlxcdFxcdGJvb2xcXG4xNDE4OlxcdFxcdGRlcGVuZHMgb24gVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVCBcXHUwMDI2XFx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlQgXFx1MDAyNlxcdTAwMjYgTE9DS0RFUF9TVVBQT1JUXFxuMTQxOTpcXHRcXHRkZWZhdWx0IHlcXG4xNDIwOlxcdFxcbjE0MjE6XFx0Y29uZmlnIFBST1ZFX0xPQ0tJTkdcXG4xNDIyOlxcdFxcdGJvb2wgXFxcIkxvY2sgZGVidWdnaW5nOiBwcm92ZSBsb2NraW5nIGNvcnJlY3RuZXNzXFxcIlxcbjE0MjM6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgTE9DS19ERUJVR0dJTkdfU1VQUE9SVFxcbjE0MjQ6XFx0XFx0c2VsZWN0IExPQ0tERVBcXG4xNDI1OlxcdFxcdHNlbGVjdCBERUJVR19TUElOTE9DS1xcbjE0MjY6XFx0XFx0c2VsZWN0IERFQlVHX01VVEVYRVMgaWYgIVBSRUVNUFRfUlRcXG4xNDI3OlxcdFxcdHNlbGVjdCBERUJVR19SVF9NVVRFWEVTIGlmIFJUX01VVEVYRVNcXG4xNDI4OlxcdFxcdHNlbGVjdCBERUJVR19SV1NFTVMgaWYgIVBSRUVNUFRfUlRcXG4xNDI5OlxcdFxcdHNlbGVjdCBERUJVR19XV19NVVRFWF9TTE9XUEFUSFxcbjE0MzA6XFx0XFx0c2VsZWN0IERFQlVHX0xPQ0tfQUxMT0NcXG4xNDMxOlxcdFxcdHNlbGVjdCBQUkVFTVBUX0NPVU5UIGlmICFBUkNIX05PX1BSRUVNUFRcXG4xNDMyOlxcdFxcdHNlbGVjdCBUUkFDRV9JUlFGTEFHU1xcbjE0MzM6XFx0XFx0ZGVmYXVsdCBuXFxuMTQzNDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ2OjEyLjk3NzA4OTA3NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjUwMjQwOTQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTG9ja2RlcCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggYWN0aXZhdGVzIGBMT0NLREVQYCB0aHJvdWdoIGBQUk9WRV9MT0NLSU5HYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEknbGwgZGVmaW5pdGVseSBpbmNsdWRlIGJvdGggYFBST1ZFX0xPQ0tJTkdgIGFuZCBgTE9DS0RFUGAgaW4gdGhlIGBFbmFibGVDb25maWdzYC4gVGhhdCdzIGEgbm8tYnJhaW5lci5cblxuTm93LCBsZXQncyBzZWUsIGFyZSB0aGVyZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IGV4dHJhIGF0dGVudGlvbj8gVGhlIHBhdGNoIGludHJvZHVjZXMgYGxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWRgLiBJdCdzIGNhbGxlZCBmcm9tIGBsb2NrZGVwX3NldF9sb2NrX2NtcF9mbmAsIGBfX2xvY2tfYWNxdWlyZWAsIGFuZCBgbWF0Y2hfaGVsZF9sb2NrYC4gSG1tLCBgX19sb2NrX2FjcXVpcmVgIGFuZCBgbWF0Y2hfaGVsZF9sb2NrYCBhcmUgc3RhdGljOyB0aGV5J3JlIHByb2JhYmx5IGhvdCBwYXRocywgc28gbm90IGEgZ29vZCBpZGVhIHRvIGZvY3VzIG9uIHRob3NlIHNwZWNpZmljYWxseS4gYGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuYCBpcyBleHBvcnRlZCBhbmQgdXNlZCB3aGVuIGNyZWF0aW5nIHNvY2tldHMgYW5kIHBpcGVzLCB3aGljaCBpc24ndCAqc3VwZXIqIGNvbW1vbiwgYnV0IGl0J3Mgbm90IHJhcmUgZWl0aGVyLlxuXG5TaG91bGQgSSBsaXN0IGBsb2NrZGVwX3NldF9sb2NrX2NtcF9mbmAgaW4gYEZvY3VzU3ltYm9sc2A/IElmIEkgZGlkLCBzeXprYWxsZXIgd291bGQgdGFyZ2V0IHNvY2tldC9waXBlIGNyZWF0aW9uLiBJdCBjb3VsZCBiZSBmaW5lLCBidXQgdGhlIGZ1bmN0aW9uJ3Mgb25seSBlbmFibGVkIGlmIGBDT05GSUdfUFJPVkVfTE9DS0lOR2AgaXMgZW5hYmxlZC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgYGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuYCBpcyBldmVuIGRlZmluZWQgd2l0aG91dCBgUFJPVkVfTE9DS0lOR2AuIFllcCwgaW4gYGluY2x1ZGUvbGludXgvbG9ja2RlcC5oYCwgaXQncyBwcm90ZWN0ZWQgYnkgdGhlIGAjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkdgLlxuXG5TbywgaXQncyBvbmx5IGFjdGl2ZSB3aXRoIGBQUk9WRV9MT0NLSU5HYC4gSSdsbCBzdGljayB3aXRoIGFkZGluZyBgUFJPVkVfTE9DS0lOR2AgYW5kIGBMT0NLREVQYCB0byBgRW5hYmxlQ29uZmlnc2AuIEkgdGhpbmsgaXQncyBiZXR0ZXIgbm90IHRvIHB1dCBhbnkgZnVuY3Rpb25zIGluIGBGb2N1c1N5bWJvbHNgIGhlcmUgYmVjYXVzZSBsb2NrZGVwIGlzIGEgZ2VuZXJpYyBzdWJzeXN0ZW0sIGFuZCB0YXJnZXRpbmcgc3BlY2lmaWMgZnVuY3Rpb25zIG1pZ2h0IG5hcnJvdyB0aGUgZnV6emluZyBzY29wZSB0b28gbXVjaC4gSSB3YW50IHRvIHRlc3QgYW55IGxvY2sgYWNxdWlzaXRpb24gZm9yIHRoZSBidWcgdGhhdCB0aGlzIHBhdGNoIGZpeGVzLCB3aGljaCBpcyB0aGUgcmFjZSBjb25kaXRpb24gb3IgYW4gaW52YWxpZCBjYWNoZSBpbiBsb2NrZGVwIGl0c2VsZi4gR2VuZXJhbCBmdXp6aW5nIHdpdGggbG9ja2RlcCBlbmFibGVkIGlzIHRoZSBiZXN0IGFwcHJvYWNoLlxuXG5KdXN0IHRvIGNvbmZpcm0sIHRoaXMgcGF0Y2ggYWRkcyBgbG9ja19jbGFzc19jYWNoZV9pc192YWxpZGAgdG8gY2hlY2sgdGhlIHZhbGlkaXR5IG9mIGEgY2FjaGVkIGxvY2sgY2xhc3MgYW5kIHVzZXMgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYCBmb3IgYGxvY2stXHUwMDNlY2xhc3NfY2FjaGVgLiBUaGlzICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBsb2NrZGVwOyBhIGNydWNpYWwgZml4IGZvciBwb3RlbnRpYWwgYnVncyB3aXRoIGludmFsaWQgY2FjaGUgdXNhZ2UuIEl0J3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gYSBjb3JlIGtlcm5lbCBkZWJ1Z2dpbmcgbWVjaGFuaXNtIHRoYXQgaXMgdXNlZCBpbiBldmVyeSBsb2NrIGFjcXVpc2l0aW9uLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY5OSwiT3V0cHV0VG9rZW5zIjoxMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0NjoyNS40Nzk1MDA3OTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ1MDk0ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST1ZFX0xPQ0tJTkdcIixcbiAgICBcIkxPQ0tERVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9ja2RlcCBzdWJzeXN0ZW0gdG8gdmFsaWRhdGUgY2FjaGVkIGxvY2sgY2xhc3NlcyB1c2luZyBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKCkgYW5kIGFkZHMgUkVBRF9PTkNFL1dSSVRFX09OQ0UgdG8gcHJldmVudCBkYXRhIHJhY2VzIG9uIGxvY2stXFx1MDAzZWNsYXNzX2NhY2hlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjb3JlIGtlcm5lbCBkZWJ1Z2dpbmcgbWVjaGFuaXNtIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBhbnkgbG9jayBhY3F1aXNpdGlvbi4gRnV6emluZyB3aXRoIFBST1ZFX0xPQ0tJTkcgZW5hYmxlZCBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGVzZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9WRV9MT0NLSU5HXCIsXG4gICAgXCJMT0NLREVQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvY2tkZXAgc3Vic3lzdGVtIHRvIHZhbGlkYXRlIGNhY2hlZCBsb2NrIGNsYXNzZXMgdXNpbmcgbG9ja19jbGFzc19jYWNoZV9pc192YWxpZCgpIGFuZCBhZGRzIFJFQURfT05DRS9XUklURV9PTkNFIHRvIHByZXZlbnQgZGF0YSByYWNlcyBvbiBsb2NrLVxcdTAwM2VjbGFzc19jYWNoZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgY29yZSBrZXJuZWwgZGVidWdnaW5nIG1lY2hhbmlzbSB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgYW55IGxvY2sgYWNxdWlzaXRpb24uIEZ1enppbmcgd2l0aCBQUk9WRV9MT0NLSU5HIGVuYWJsZWQgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlc2UgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ2OjI1LjY1NDAxODUwM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQzMTI5MTU4NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0NjoyNS42NTQ2NDM0MDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzQzMTIyODY4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tkZXAncyBpbnRlcm5hbCBjYWNoaW5nIG1lY2hhbmlzbSBmb3IgbG9jayBjbGFzc2VzIChgbG9jay1cXHUwMDNlY2xhc3NfY2FjaGVgKS4gSXQgaW50cm9kdWNlcyBhIHZhbGlkYXRpb24gZnVuY3Rpb24gYGxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWRgIGFuZCB1c2VzIGBSRUFEX09OQ0VgL2BXUklURV9PTkNFYCB0byBwcmV2ZW50IGRhdGEgcmFjZXMgYW5kIGVuc3VyZSB0aGUgY2FjaGVkIGNsYXNzIHBvaW50ZXIgaXMgdmFsaWQgYmVmb3JlIHVzZS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGNvbmN1cnJlbmN5IGlzc3Vlcywgc3RhbGUgY2FjaGUgZW50cmllcywgb3IgcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzICh3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQ1NBTiwgS0FTQU4sIG9yIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29waWVzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYwNTFjY2NiYTFiY2MyZTM5ODUxNTJmY2M4MTRkMjMxMjUwM2FjY2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxODoxOTo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xuaW5kZXggMjVkNzdkNGExMDYxNC4uNzYzZjc5ODA2YmQ4ZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xuKysrIGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXG5AQCAtOTYzLDYgKzk2MywzNCBAQCBsb29rX3VwX2xvY2tfY2xhc3MoY29uc3Qgc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWQoY29uc3Qgc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLFxuK1x0XHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyxcbitcdFx0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgc3ViY2xhc3MpXG4re1xuK1x0dW5zaWduZWQgaW50IGNsYXNzX3N1YmNsYXNzO1xuK1xuK1x0aWYgKCFjbGFzcylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHVubGlrZWx5KGNsYXNzIFx1MDAzYyBsb2NrX2NsYXNzZXMgfHwgY2xhc3MgXHUwMDNlPSBsb2NrX2NsYXNzZXMgKyBNQVhfTE9DS0RFUF9LRVlTKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHVubGlrZWx5KCFhcmNoX3Rlc3RfYml0KGNsYXNzIC0gbG9ja19jbGFzc2VzLCBsb2NrX2NsYXNzZXNfaW5fdXNlKSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICh1bmxpa2VseSghbG9jay1cdTAwM2VrZXkpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRjbGFzc19zdWJjbGFzcyA9IHN1YmNsYXNzID8gc3ViY2xhc3MgOiBjbGFzcy1cdTAwM2VzdWJjbGFzcztcbitcdGlmICh1bmxpa2VseShjbGFzc19zdWJjbGFzcyBcdTAwM2U9IE1BWF9MT0NLREVQX1NVQkNMQVNTRVMpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKGNsYXNzLVx1MDAzZWtleSkgIT0gbG9jay1cdTAwM2VrZXktXHUwMDNlc3Via2V5cyArIGNsYXNzX3N1YmNsYXNzKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIC8qXG4gICogU3RhdGljIGxvY2tzIGRvIG5vdCBoYXZlIHRoZWlyIGNsYXNzLWtleXMgeWV0IC0gZm9yIHRoZW0gdGhlIGtleSBpc1xuICAqIHRoZSBsb2NrIG9iamVjdCBpdHNlbGYuIElmIHRoZSBsb2NrIGlzIGluIHRoZSBwZXIgY3B1IGFyZWEsIHRoZVxuQEAgLTEzOTUsOSArMTQyMyw5IEBAIHJlZ2lzdGVyX2xvY2tfY2xhc3Moc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsIGludCBmb3JjZSlcbiBcbiBvdXRfc2V0X2NsYXNzX2NhY2hlOlxuIFx0aWYgKCFzdWJjbGFzcyB8fCBmb3JjZSlcbi1cdFx0bG9jay1cdTAwM2VjbGFzc19jYWNoZVswXSA9IGNsYXNzO1xuK1x0XHRXUklURV9PTkNFKGxvY2stXHUwMDNlY2xhc3NfY2FjaGVbMF0sIGNsYXNzKTtcbiBcdGVsc2UgaWYgKHN1YmNsYXNzIFx1MDAzYyBOUl9MT0NLREVQX0NBQ0hJTkdfQ0xBU1NFUylcbi1cdFx0bG9jay1cdTAwM2VjbGFzc19jYWNoZVtzdWJjbGFzc10gPSBjbGFzcztcbitcdFx0V1JJVEVfT05DRShsb2NrLVx1MDAzZWNsYXNzX2NhY2hlW3N1YmNsYXNzXSwgY2xhc3MpO1xuIFxuIFx0LypcbiBcdCAqIEhhc2ggY29sbGlzaW9uLCBkaWQgd2Ugc21va2Ugc29tZT8gV2UgZm91bmQgYSBjbGFzcyB3aXRoIGEgbWF0Y2hpbmdcbkBAIC00OTU3LDcgKzQ5ODUsNyBAQCB2b2lkIGxvY2tkZXBfaW5pdF9tYXBfdHlwZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsXG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0xPQ0tERVBfQ0FDSElOR19DTEFTU0VTOyBpKyspXG4tXHRcdGxvY2stXHUwMDNlY2xhc3NfY2FjaGVbaV0gPSBOVUxMO1xuK1x0XHRXUklURV9PTkNFKGxvY2stXHUwMDNlY2xhc3NfY2FjaGVbaV0sIE5VTEwpO1xuIFxuICNpZmRlZiBDT05GSUdfTE9DS19TVEFUXG4gXHRsb2NrLVx1MDAzZWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XG5AQCAtNTAyMiwxMiArNTA1MCwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChfX2xvY2tkZXBfbm9fdHJhY2tfXyk7XG4gdm9pZCBsb2NrZGVwX3NldF9sb2NrX2NtcF9mbihzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIGxvY2tfY21wX2ZuIGNtcF9mbixcbiBcdFx0XHQgICAgIGxvY2tfcHJpbnRfZm4gcHJpbnRfZm4pXG4ge1xuLVx0c3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gbG9jay1cdTAwM2VjbGFzc19jYWNoZVswXTtcbitcdHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IFJFQURfT05DRShsb2NrLVx1MDAzZWNsYXNzX2NhY2hlWzBdKTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuIFx0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XG4gXG4rXHRpZiAoIWxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWQobG9jaywgY2xhc3MsIDApKVxuK1x0XHRjbGFzcyA9IE5VTEw7XG4rXG4gXHRpZiAoIWNsYXNzKVxuIFx0XHRjbGFzcyA9IHJlZ2lzdGVyX2xvY2tfY2xhc3MobG9jaywgMCwgMCk7XG4gXG5AQCAtNTExOSw4ICs1MTUwLDExIEBAIHN0YXRpYyBpbnQgX19sb2NrX2FjcXVpcmUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsXG4gXHRpZiAoREVCVUdfTE9DS1NfV0FSTl9PTihzdWJjbGFzcyBcdTAwM2U9IE1BWF9MT0NLREVQX1NVQkNMQVNTRVMpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChzdWJjbGFzcyBcdTAwM2MgTlJfTE9DS0RFUF9DQUNISU5HX0NMQVNTRVMpXG4tXHRcdGNsYXNzID0gbG9jay1cdTAwM2VjbGFzc19jYWNoZVtzdWJjbGFzc107XG4rXHRpZiAoc3ViY2xhc3MgXHUwMDNjIE5SX0xPQ0tERVBfQ0FDSElOR19DTEFTU0VTKSB7XG4rXHRcdGNsYXNzID0gUkVBRF9PTkNFKGxvY2stXHUwMDNlY2xhc3NfY2FjaGVbc3ViY2xhc3NdKTtcbitcdFx0aWYgKCFsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGxvY2ssIGNsYXNzLCBzdWJjbGFzcykpXG4rXHRcdFx0Y2xhc3MgPSBOVUxMO1xuK1x0fVxuIFx0LypcbiBcdCAqIE5vdCBjYWNoZWQ/XG4gXHQgKi9cbkBAIC01MzIzLDkgKzUzNTcsOSBAQCBzdGF0aWMgbm9pbnN0ciBpbnQgbWF0Y2hfaGVsZF9sb2NrKGNvbnN0IHN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrLFxuIFx0XHRyZXR1cm4gMTtcbiBcbiBcdGlmIChobG9jay1cdTAwM2VyZWZlcmVuY2VzKSB7XG4tXHRcdGNvbnN0IHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IGxvY2stXHUwMDNlY2xhc3NfY2FjaGVbMF07XG4rXHRcdGNvbnN0IHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IFJFQURfT05DRShsb2NrLVx1MDAzZWNsYXNzX2NhY2hlWzBdKTtcbiBcbi1cdFx0aWYgKCFjbGFzcylcbitcdFx0aWYgKCFsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGxvY2ssIGNsYXNzLCAwKSlcbiBcdFx0XHRjbGFzcyA9IGxvb2tfdXBfbG9ja19jbGFzcyhsb2NrLCAwKTtcbiBcbiBcdFx0LypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ2OjI1LjY1NDY0NDUxNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDMxMjI2NzcxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExvY2tkZXAgQ2FjaGUgVmFsaWRhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIHNvbGVseSBvbiBpbnRlcm5hbCBsb2NrZGVwIG1lY2hhbmljcywgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBob3cgaXQgY2FjaGVzIGxvY2sgY2xhc3NlcyB3aXRoaW4gdGhlIGBrZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNgIGZpbGUuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFib3V0IGNvbmN1cnJlbmN5IGlzc3VlcyBvbiBgbG9jay1cdTAwM2VjbGFzc19jYWNoZWAuIEkgc2VlIGEgbmV3IGZ1bmN0aW9uLCBgbG9ja19jbGFzc19jYWNoZV9pc192YWxpZGAsIGhhcyBiZWVuIGFkZGVkIHRvIHZhbGlkYXRlIHRoZSBjYWNoZWQgY2xhc3MgcG9pbnRlciBiZWZvcmUgaXQncyB1c2VkLiBUaGlzIGlzIHNtYXJ0OyB0aGlzIGlzIGFib3V0IHByZXZlbnRpbmcgdGhlIHVzZSBvZiBhIHN0YWxlIG9yIGNvcnJ1cHRlZCBjYWNoZSwgYSB0ZXh0Ym9vayBzb2x1dGlvbiBmb3IgYSByYWNlIGNvbmRpdGlvbi5cblxuSSd2ZSBzcG90dGVkIHRoZSBjaGFuZ2VzIGludm9sdmUgYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCBmb3IgYWNjZXNzaW5nIGFuZCB1cGRhdGluZyB0aGUgYGxvY2stXHUwMDNlY2xhc3NfY2FjaGVgLCB3aGljaCBmdXJ0aGVyIHJlaW5mb3JjZXMgdGhlIGRhdGEgcmFjZSBtaXRpZ2F0aW9uIGFuZ2xlLiBUaGUgbG9naWMgb2YgdmFsaWRhdGluZyB0aGUgY2FjaGVkIGBjbGFzc2AgYmVmb3JlIHVzYWdlIGlzIGNsZWFyIGFuZCBjb25jaXNlLlxuXG5UaGlua2luZyBhYm91dCBpdCwgdGhlIHNjb3BlIGlzIHN0cmljdGx5IHdpdGhpbiBsb2NrZGVwJ3MgaW50ZXJuYWwgc3RhdGUgdHJhY2tpbmcuIFRoZXJlJ3Mgbm90aGluZyBoZXJlIHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2Ugb3IgaW50cm9kdWNlcyBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MsIG5vciBhcmUgdGhlcmUgYW55IGFsbG9jYXRpb25zLiBUaGF0IG1lYW5zLCB0aGUgcHJvYmxlbSBiZWluZyBmaXhlZCBoYXMgdG8gYmUgc29tZXRoaW5nIGxpa2UgYSBkYXRhIHJhY2Ugb3IgYSBtZW1vcnkgY29ycnVwdGlvbiBwcm9ibGVtIHdpdGhpbiBsb2NrZGVwLCBsaWtlIGEgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBhIGxvZ2ljYWwgYnVnIGR1ZSB0byBhIHN0YWxlIGNhY2hlLlxuXG5Ob3csIEtBU0FOLCBLQ1NBTiwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycyB3b3VsZCBjYXRjaCBkYXRhIHJhY2VzIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLiBLTVNBTiBpcyB0aGUgdG9vbCBmb3IgZmluZGluZyBpc3N1ZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gR2l2ZW4gdGhhdCBgbG9jay1cdTAwM2VjbGFzc19jYWNoZWAgaXMgaW5pdGlhbGl6ZWQgdG8gTlVMTCBpbiBgbG9ja2RlcF9pbml0X21hcF90eXBlYCwgSSBhbSBub3Qgc2VlaW5nIEtNU0FOIGJlaW5nIGFwcGxpY2FibGUgdG8gdGhpcyBwYXRjaDsgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoaXMgcGF0Y2ggaXMgbm90IGludHJvZHVjaW5nIG9yIGZpeGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gYGxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWRgIGNvbmZpcm1zIHRoaXMuIEl0IGNoZWNrczpcbi0gVGhlIGNsYXNzIHBvaW50ZXIgaXMgbm90IE5VTExcbi0gVGhlIGNsYXNzIHBvaW50ZXIgaXMgd2l0aGluIHRoZSB2YWxpZCBsb2NrIGNsYXNzZXMgYXJyYXlcbi0gVGhlIGNsYXNzIGlzIGluIHVzZSBiYXNlZCBvbiB0aGUgYGxvY2tfY2xhc3Nlc19pbl91c2VgIGJpdCBhcnJheVxuLSBUaGUgbG9jaydzIGtleSBpcyBub3QgTlVMTFxuLSBUaGUgY2xhc3MncyBzdWJjbGFzcyBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlXG4tIFRoZSBjbGFzcydzIGtleSBtYXRjaGVzIHRoZSBsb2NrJ3Mga2V5XG5cblRoZXJlZm9yZSwgdGhlIGNoZWNrcyBpbiB0aGUgdmFsaWRhdGlvbiBmdW5jdGlvbiBhcmUgdG8gZW5zdXJlIHRoYXQgdGhlIGxvY2sgY2xhc3MgaXMgdmFsaWQgYW5kIG1hdGNoZXMgdGhlIGxvY2sncyBrZXksIGFuZCB0aGlzIGNvbmZpcm1zIHRoaXMgaXMgbm90IGFuIGlzc3VlIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU5gIHRvIGBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNjIsIk91dHB1dFRva2VucyI6MTUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6NDY6NTkuOTY2OTE0NzYyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb2NrZGVwJ3MgaW50ZXJuYWwgY2FjaGluZyBtZWNoYW5pc20gZm9yIGxvY2sgY2xhc3NlcyAoYGxvY2stXFx1MDAzZWNsYXNzX2NhY2hlYCkuIEl0IGludHJvZHVjZXMgYSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkYCBhbmQgdXNlcyBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBlbnN1cmUgdGhlIGNhY2hlZCBjbGFzcyBwb2ludGVyIGlzIHZhbGlkIGJlZm9yZSB1c2UuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBpc3N1ZXMsIHN0YWxlIGNhY2hlIGVudHJpZXMsIG9yIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAod2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0NTQU4sIEtBU0FOLCBvciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb2NrZGVwJ3MgaW50ZXJuYWwgY2FjaGluZyBtZWNoYW5pc20gZm9yIGxvY2sgY2xhc3NlcyAoYGxvY2stXFx1MDAzZWNsYXNzX2NhY2hlYCkuIEl0IGludHJvZHVjZXMgYSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkYCBhbmQgdXNlcyBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBlbnN1cmUgdGhlIGNhY2hlZCBjbGFzcyBwb2ludGVyIGlzIHZhbGlkIGJlZm9yZSB1c2UuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBpc3N1ZXMsIHN0YWxlIGNhY2hlIGVudHJpZXMsIG9yIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAod2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0NTQU4sIEtBU0FOLCBvciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmnq5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-24 18:18:41 +0000 UTC FinishedAt: 2026-08-24 18:47:02 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "0a0d1d55dad570724bf8c7ea83409639cfb4be9b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROVE_LOCKING", "LOCKDEP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "0a0d1d55dad570724bf8c7ea83409639cfb4be9b", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "PROVE_LOCKING", "LOCKDEP" ], "series_id": "b56590b3-69b0-45ef-aa34-61e941851eba" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjE5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUk9WRV9MT0NLSU5HJiMzNDssCiAgICAmIzM0O0xPQ0tERVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsb2NrZGVwJiMzOTtzIGludGVybmFsIGNhY2hpbmcgbWVjaGFuaXNtIGZvciBsb2NrIGNsYXNzZXMgKGBsb2NrLVx1MDAzZWNsYXNzX2NhY2hlYCkuIEl0IGludHJvZHVjZXMgYSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkYCBhbmQgdXNlcyBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBlbnN1cmUgdGhlIGNhY2hlZCBjbGFzcyBwb2ludGVyIGlzIHZhbGlkIGJlZm9yZSB1c2UuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBpc3N1ZXMsIHN0YWxlIGNhY2hlIGVudHJpZXMsIG9yIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAod2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0NTQU4sIEtBU0FOLCBvciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9ja2RlcCBzdWJzeXN0ZW0gdG8gdmFsaWRhdGUgY2FjaGVkIGxvY2sgY2xhc3NlcyB1c2luZyBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKCkgYW5kIGFkZHMgUkVBRF9PTkNFL1dSSVRFX09OQ0UgdG8gcHJldmVudCBkYXRhIHJhY2VzIG9uIGxvY2stXHUwMDNlY2xhc3NfY2FjaGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNvcmUga2VybmVsIGRlYnVnZ2luZyBtZWNoYW5pc20gdGhhdCBpcyByZWFjaGFibGUgdmlhIGFueSBsb2NrIGFjcXVpc2l0aW9uLiBGdXp6aW5nIHdpdGggUFJPVkVfTE9DS0lORyBlbmFibGVkIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZXNlIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjE5PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZjA1MWNjY2JhMWJjYzJlMzk4NTE1MmZjYzgxNGQyMzEyNTAzYWNjYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gQXVnIDI0IDE4OjE5OjQ0IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xuaW5kZXggMjVkNzdkNGExMDYxNC4uNzYzZjc5ODA2YmQ4ZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xuJiM0MzsmIzQzOyYjNDM7IGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXG5AQCAtOTYzLDYgJiM0Mzs5NjMsMzQgQEAgbG9va191cF9sb2NrX2NsYXNzKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgbG9ja19jbGFzc19jYWNoZV9pc192YWxpZChjb25zdCBzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssXG4mIzQzO1x0XHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IHN1YmNsYXNzKVxuJiM0Mzt7XG4mIzQzO1x0dW5zaWduZWQgaW50IGNsYXNzX3N1YmNsYXNzO1xuJiM0MztcbiYjNDM7XHRpZiAoIWNsYXNzKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRpZiAodW5saWtlbHkoY2xhc3MgXHUwMDNjIGxvY2tfY2xhc3NlcyB8fCBjbGFzcyBcdTAwM2U9IGxvY2tfY2xhc3NlcyAmIzQzOyBNQVhfTE9DS0RFUF9LRVlTKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KCFhcmNoX3Rlc3RfYml0KGNsYXNzIC0gbG9ja19jbGFzc2VzLCBsb2NrX2NsYXNzZXNfaW5fdXNlKSkpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseSghbG9jay1cdTAwM2VrZXkpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRjbGFzc19zdWJjbGFzcyA9IHN1YmNsYXNzID8gc3ViY2xhc3MgOiBjbGFzcy1cdTAwM2VzdWJjbGFzcztcbiYjNDM7XHRpZiAodW5saWtlbHkoY2xhc3Nfc3ViY2xhc3MgXHUwMDNlPSBNQVhfTE9DS0RFUF9TVUJDTEFTU0VTKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0aWYgKHVubGlrZWx5KFJFQURfT05DRShjbGFzcy1cdTAwM2VrZXkpICE9IGxvY2stXHUwMDNla2V5LVx1MDAzZXN1YmtleXMgJiM0MzsgY2xhc3Nfc3ViY2xhc3MpKVxuJiM0MztcdFx0cmV0dXJuIGZhbHNlO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gdHJ1ZTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFN0YXRpYyBsb2NrcyBkbyBub3QgaGF2ZSB0aGVpciBjbGFzcy1rZXlzIHlldCAtIGZvciB0aGVtIHRoZSBrZXkgaXNcbiAgKiB0aGUgbG9jayBvYmplY3QgaXRzZWxmLiBJZiB0aGUgbG9jayBpcyBpbiB0aGUgcGVyIGNwdSBhcmVhLCB0aGVcbkBAIC0xMzk1LDkgJiM0MzsxNDIzLDkgQEAgcmVnaXN0ZXJfbG9ja19jbGFzcyhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcywgaW50IGZvcmNlKVxuIFxuIG91dF9zZXRfY2xhc3NfY2FjaGU6XG4gXHRpZiAoIXN1YmNsYXNzIHx8IGZvcmNlKVxuLVx0XHRsb2NrLVx1MDAzZWNsYXNzX2NhY2hlWzBdID0gY2xhc3M7XG4mIzQzO1x0XHRXUklURV9PTkNFKGxvY2stXHUwMDNlY2xhc3NfY2FjaGVbMF0sIGNsYXNzKTtcbiBcdGVsc2UgaWYgKHN1YmNsYXNzIFx1MDAzYyBOUl9MT0NLREVQX0NBQ0hJTkdfQ0xBU1NFUylcbi1cdFx0bG9jay1cdTAwM2VjbGFzc19jYWNoZVtzdWJjbGFzc10gPSBjbGFzcztcbiYjNDM7XHRcdFdSSVRFX09OQ0UobG9jay1cdTAwM2VjbGFzc19jYWNoZVtzdWJjbGFzc10sIGNsYXNzKTtcbiBcbiBcdC8qXG4gXHQgKiBIYXNoIGNvbGxpc2lvbiwgZGlkIHdlIHNtb2tlIHNvbWU/IFdlIGZvdW5kIGEgY2xhc3Mgd2l0aCBhIG1hdGNoaW5nXG5AQCAtNDk1Nyw3ICYjNDM7NDk4NSw3IEBAIHZvaWQgbG9ja2RlcF9pbml0X21hcF90eXBlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgY29uc3QgY2hhciAqbmFtZSxcbiBcdGludCBpO1xuIFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfTE9DS0RFUF9DQUNISU5HX0NMQVNTRVM7IGkmIzQzOyYjNDM7KVxuLVx0XHRsb2NrLVx1MDAzZWNsYXNzX2NhY2hlW2ldID0gTlVMTDtcbiYjNDM7XHRcdFdSSVRFX09OQ0UobG9jay1cdTAwM2VjbGFzc19jYWNoZVtpXSwgTlVMTCk7XG4gXG4gI2lmZGVmIENPTkZJR19MT0NLX1NUQVRcbiBcdGxvY2stXHUwMDNlY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTtcbkBAIC01MDIyLDEyICYjNDM7NTA1MCwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChfX2xvY2tkZXBfbm9fdHJhY2tfXyk7XG4gdm9pZCBsb2NrZGVwX3NldF9sb2NrX2NtcF9mbihzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIGxvY2tfY21wX2ZuIGNtcF9mbixcbiBcdFx0XHQgICAgIGxvY2tfcHJpbnRfZm4gcHJpbnRfZm4pXG4ge1xuLVx0c3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gbG9jay1cdTAwM2VjbGFzc19jYWNoZVswXTtcbiYjNDM7XHRzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MgPSBSRUFEX09OQ0UobG9jay1cdTAwM2VjbGFzc19jYWNoZVswXSk7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0cmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiBcdGxvY2tkZXBfcmVjdXJzaW9uX2luYygpO1xuIFxuJiM0MztcdGlmICghbG9ja19jbGFzc19jYWNoZV9pc192YWxpZChsb2NrLCBjbGFzcywgMCkpXG4mIzQzO1x0XHRjbGFzcyA9IE5VTEw7XG4mIzQzO1xuIFx0aWYgKCFjbGFzcylcbiBcdFx0Y2xhc3MgPSByZWdpc3Rlcl9sb2NrX2NsYXNzKGxvY2ssIDAsIDApO1xuIFxuQEAgLTUxMTksOCAmIzQzOzUxNTAsMTEgQEAgc3RhdGljIGludCBfX2xvY2tfYWNxdWlyZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcyxcbiBcdGlmIChERUJVR19MT0NLU19XQVJOX09OKHN1YmNsYXNzIFx1MDAzZT0gTUFYX0xPQ0tERVBfU1VCQ0xBU1NFUykpXG4gXHRcdHJldHVybiAwO1xuIFxuLVx0aWYgKHN1YmNsYXNzIFx1MDAzYyBOUl9MT0NLREVQX0NBQ0hJTkdfQ0xBU1NFUylcbi1cdFx0Y2xhc3MgPSBsb2NrLVx1MDAzZWNsYXNzX2NhY2hlW3N1YmNsYXNzXTtcbiYjNDM7XHRpZiAoc3ViY2xhc3MgXHUwMDNjIE5SX0xPQ0tERVBfQ0FDSElOR19DTEFTU0VTKSB7XG4mIzQzO1x0XHRjbGFzcyA9IFJFQURfT05DRShsb2NrLVx1MDAzZWNsYXNzX2NhY2hlW3N1YmNsYXNzXSk7XG4mIzQzO1x0XHRpZiAoIWxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWQobG9jaywgY2xhc3MsIHN1YmNsYXNzKSlcbiYjNDM7XHRcdFx0Y2xhc3MgPSBOVUxMO1xuJiM0MztcdH1cbiBcdC8qXG4gXHQgKiBOb3QgY2FjaGVkP1xuIFx0ICovXG5AQCAtNTMyMyw5ICYjNDM7NTM1Nyw5IEBAIHN0YXRpYyBub2luc3RyIGludCBtYXRjaF9oZWxkX2xvY2soY29uc3Qgc3RydWN0IGhlbGRfbG9jayAqaGxvY2ssXG4gXHRcdHJldHVybiAxO1xuIFxuIFx0aWYgKGhsb2NrLVx1MDAzZXJlZmVyZW5jZXMpIHtcbi1cdFx0Y29uc3Qgc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gbG9jay1cdTAwM2VjbGFzc19jYWNoZVswXTtcbiYjNDM7XHRcdGNvbnN0IHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IFJFQURfT05DRShsb2NrLVx1MDAzZWNsYXNzX2NhY2hlWzBdKTtcbiBcbi1cdFx0aWYgKCFjbGFzcylcbiYjNDM7XHRcdGlmICghbG9ja19jbGFzc19jYWNoZV9pc192YWxpZChsb2NrLCBjbGFzcywgMCkpXG4gXHRcdFx0Y2xhc3MgPSBsb29rX3VwX2xvY2tfY2xhc3MobG9jaywgMCk7XG4gXG4gXHRcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MTk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MjZtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtQUk9WRV9MT0NLSU5HJiMzNDssCiAgICAmIzM0O0xPQ0tERVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9ja2RlcCBzdWJzeXN0ZW0gdG8gdmFsaWRhdGUgY2FjaGVkIGxvY2sgY2xhc3NlcyB1c2luZyBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKCkgYW5kIGFkZHMgUkVBRF9PTkNFL1dSSVRFX09OQ0UgdG8gcHJldmVudCBkYXRhIHJhY2VzIG9uIGxvY2stXHUwMDNlY2xhc3NfY2FjaGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNvcmUga2VybmVsIGRlYnVnZ2luZyBtZWNoYW5pc20gdGhhdCBpcyByZWFjaGFibGUgdmlhIGFueSBsb2NrIGFjcXVpc2l0aW9uLiBGdXp6aW5nIHdpdGggUFJPVkVfTE9DS0lORyBlbmFibGVkIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZXNlIHBhdGhzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjA1MWNjY2JhMWJjYzJlMzk4NTE1MmZjYzgxNGQyMzEyNTAzYWNjYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDE4OjE5OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jCmluZGV4IDI1ZDc3ZDRhMTA2MTQuLjc2M2Y3OTgwNmJkOGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMKQEAgLTk2Myw2ICYjNDM7OTYzLDM0IEBAIGxvb2tfdXBfbG9ja19jbGFzcyhjb25zdCBzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcykKIAlyZXR1cm4gTlVMTDsKIH0KIAomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywKJiM0MzsJCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MsCiYjNDM7CQkJCQkJICAgICAgdW5zaWduZWQgaW50IHN1YmNsYXNzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGNsYXNzX3N1YmNsYXNzOwomIzQzOwomIzQzOwlpZiAoIWNsYXNzKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoY2xhc3MgJmx0OyBsb2NrX2NsYXNzZXMgfHwgY2xhc3MgJmd0Oz0gbG9ja19jbGFzc2VzICYjNDM7IE1BWF9MT0NLREVQX0tFWVMpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIWFyY2hfdGVzdF9iaXQoY2xhc3MgLSBsb2NrX2NsYXNzZXMsIGxvY2tfY2xhc3Nlc19pbl91c2UpKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KCFsb2NrLSZndDtrZXkpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwljbGFzc19zdWJjbGFzcyA9IHN1YmNsYXNzID8gc3ViY2xhc3MgOiBjbGFzcy0mZ3Q7c3ViY2xhc3M7CiYjNDM7CWlmICh1bmxpa2VseShjbGFzc19zdWJjbGFzcyAmZ3Q7PSBNQVhfTE9DS0RFUF9TVUJDTEFTU0VTKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KFJFQURfT05DRShjbGFzcy0mZ3Q7a2V5KSAhPSBsb2NrLSZndDtrZXktJmd0O3N1YmtleXMgJiM0MzsgY2xhc3Nfc3ViY2xhc3MpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogU3RhdGljIGxvY2tzIGRvIG5vdCBoYXZlIHRoZWlyIGNsYXNzLWtleXMgeWV0IC0gZm9yIHRoZW0gdGhlIGtleSBpcwogICogdGhlIGxvY2sgb2JqZWN0IGl0c2VsZi4gSWYgdGhlIGxvY2sgaXMgaW4gdGhlIHBlciBjcHUgYXJlYSwgdGhlCkBAIC0xMzk1LDkgJiM0MzsxNDIzLDkgQEAgcmVnaXN0ZXJfbG9ja19jbGFzcyhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcywgaW50IGZvcmNlKQogCiBvdXRfc2V0X2NsYXNzX2NhY2hlOgogCWlmICghc3ViY2xhc3MgfHwgZm9yY2UpCi0JCWxvY2stJmd0O2NsYXNzX2NhY2hlWzBdID0gY2xhc3M7CiYjNDM7CQlXUklURV9PTkNFKGxvY2stJmd0O2NsYXNzX2NhY2hlWzBdLCBjbGFzcyk7CiAJZWxzZSBpZiAoc3ViY2xhc3MgJmx0OyBOUl9MT0NLREVQX0NBQ0hJTkdfQ0xBU1NFUykKLQkJbG9jay0mZ3Q7Y2xhc3NfY2FjaGVbc3ViY2xhc3NdID0gY2xhc3M7CiYjNDM7CQlXUklURV9PTkNFKGxvY2stJmd0O2NsYXNzX2NhY2hlW3N1YmNsYXNzXSwgY2xhc3MpOwogCiAJLyoKIAkgKiBIYXNoIGNvbGxpc2lvbiwgZGlkIHdlIHNtb2tlIHNvbWU/IFdlIGZvdW5kIGEgY2xhc3Mgd2l0aCBhIG1hdGNoaW5nCkBAIC00OTU3LDcgJiM0Mzs0OTg1LDcgQEAgdm9pZCBsb2NrZGVwX2luaXRfbWFwX3R5cGUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBjb25zdCBjaGFyICpuYW1lLAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IE5SX0xPQ0tERVBfQ0FDSElOR19DTEFTU0VTOyBpJiM0MzsmIzQzOykKLQkJbG9jay0mZ3Q7Y2xhc3NfY2FjaGVbaV0gPSBOVUxMOwomIzQzOwkJV1JJVEVfT05DRShsb2NrLSZndDtjbGFzc19jYWNoZVtpXSwgTlVMTCk7CiAKICNpZmRlZiBDT05GSUdfTE9DS19TVEFUCiAJbG9jay0mZ3Q7Y3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTUwMjIsMTIgJiM0Mzs1MDUwLDE1IEBAIEVYUE9SVF9TWU1CT0xfR1BMKF9fbG9ja2RlcF9ub190cmFja19fKTsKIHZvaWQgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm4oc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBsb2NrX2NtcF9mbiBjbXBfZm4sCiAJCQkgICAgIGxvY2tfcHJpbnRfZm4gcHJpbnRfZm4pCiB7Ci0Jc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gbG9jay0mZ3Q7Y2xhc3NfY2FjaGVbMF07CiYjNDM7CXN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IFJFQURfT05DRShsb2NrLSZndDtjbGFzc19jYWNoZVswXSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJbG9ja2RlcF9yZWN1cnNpb25faW5jKCk7CiAKJiM0MzsJaWYgKCFsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGxvY2ssIGNsYXNzLCAwKSkKJiM0MzsJCWNsYXNzID0gTlVMTDsKJiM0MzsKIAlpZiAoIWNsYXNzKQogCQljbGFzcyA9IHJlZ2lzdGVyX2xvY2tfY2xhc3MobG9jaywgMCwgMCk7CiAKQEAgLTUxMTksOCAmIzQzOzUxNTAsMTEgQEAgc3RhdGljIGludCBfX2xvY2tfYWNxdWlyZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcywKIAlpZiAoREVCVUdfTE9DS1NfV0FSTl9PTihzdWJjbGFzcyAmZ3Q7PSBNQVhfTE9DS0RFUF9TVUJDTEFTU0VTKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoc3ViY2xhc3MgJmx0OyBOUl9MT0NLREVQX0NBQ0hJTkdfQ0xBU1NFUykKLQkJY2xhc3MgPSBsb2NrLSZndDtjbGFzc19jYWNoZVtzdWJjbGFzc107CiYjNDM7CWlmIChzdWJjbGFzcyAmbHQ7IE5SX0xPQ0tERVBfQ0FDSElOR19DTEFTU0VTKSB7CiYjNDM7CQljbGFzcyA9IFJFQURfT05DRShsb2NrLSZndDtjbGFzc19jYWNoZVtzdWJjbGFzc10pOwomIzQzOwkJaWYgKCFsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGxvY2ssIGNsYXNzLCBzdWJjbGFzcykpCiYjNDM7CQkJY2xhc3MgPSBOVUxMOwomIzQzOwl9CiAJLyoKIAkgKiBOb3QgY2FjaGVkPwogCSAqLwpAQCAtNTMyMyw5ICYjNDM7NTM1Nyw5IEBAIHN0YXRpYyBub2luc3RyIGludCBtYXRjaF9oZWxkX2xvY2soY29uc3Qgc3RydWN0IGhlbGRfbG9jayAqaGxvY2ssCiAJCXJldHVybiAxOwogCiAJaWYgKGhsb2NrLSZndDtyZWZlcmVuY2VzKSB7Ci0JCWNvbnN0IHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IGxvY2stJmd0O2NsYXNzX2NhY2hlWzBdOwomIzQzOwkJY29uc3Qgc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gUkVBRF9PTkNFKGxvY2stJmd0O2NsYXNzX2NhY2hlWzBdKTsKIAotCQlpZiAoIWNsYXNzKQomIzQzOwkJaWYgKCFsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGxvY2ssIGNsYXNzLCAwKSkKIAkJCWNsYXNzID0gbG9va191cF9sb2NrX2NsYXNzKGxvY2ssIDApOwogCiAJCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4zbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNjUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAzOTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIExvY2tkZXAgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCYjMzk7cyB0aW5rZXJpbmcgd2l0aCBga2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBhcmVhLCByaWdodD8gV2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgY29yZSBrZXJuZWwgbG9ja2luZywgc3BlY2lmaWNhbGx5IHRoZSBsb2NrIGRlcGVuZGVuY3kgY2hlY2tlci4KCkZpcnN0IG9mZiwgaXQgc2VlbXMgbGlrZSB0aGUgcHJpbWFyeSBjaGFuZ2VzIGludm9sdmUgaW50cm9kdWNpbmcgYSBuZXcgZnVuY3Rpb24sIGBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkYCwgYW5kIGluY29ycG9yYXRpbmcgYFJFQURfT05DRWAvYFdSSVRFX09OQ0VgIGZvciBgbG9jay0mZ3Q7Y2xhc3NfY2FjaGVgLiBUaGF0IHN1Z2dlc3RzIHRoZXkmIzM5O3JlIGFkZHJlc3NpbmcgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gb3IgaW52YWxpZCBjYWNoZSB1c2FnZSB3aXRoaW4gdGhlIGxvY2sgY2xhc3MgY2FjaGluZyBtZWNoYW5pc20sIHdoaWNoIGlzIGdvb2QuIFdlIGFyZSB0YWxraW5nIGFib3V0IGEgc2FmZXR5IGltcHJvdmVtZW50IGhlcmUuCgpGdW5jdGlvbmFsbHksIHllcywgdGhpcyBkZWZpbml0ZWx5IGFsdGVycyBiZWhhdmlvci4gSXQgYWRkcyB2YWxpZGF0aW9uLiBTbywgdGhlIG5leHQgcXVlc3Rpb24gaXMsIHNob3VsZCB3ZSBmdXp6IGl0PyBBYnNvbHV0ZWx5ISBUaGlzIHRvdWNoZXMgY29yZSBrZXJuZWwgY29kZSwgYWNjZXNzaWJsZSB0aHJvdWdoICphbnkqIHN5c2NhbGwgdGhhdCBhY3F1aXJlcyBsb2Nrcy4gVGhhdCBtZWFucyB0aGUgYXR0YWNrIHN1cmZhY2UgaXMgaHVnZS4gTm93LCB0aGUgY2F0Y2ggaXMgdGhhdCBsb2NrZGVwIGlzIHByaW1hcmlseSBhICpkZWJ1Z2dpbmcqIHRvb2wsIGVuYWJsZWQgYnkgYENPTkZJR19MT0NLREVQYCBhbmQgYENPTkZJR19QUk9WRV9MT0NLSU5HYCwgbWVhbmluZyBpdCBtYXkgYmUgZGlmZmljdWx0IHRvIHRyaWdnZXIgdGhpcyBjb2RlIHBhdGguCgpBbHJpZ2h0LCB3aGF0IHNwZWNpZmljYWxseSB0byBmb2N1cyBvbj8gVGhlIHBhdGNoIG1vZGlmaWVzIGBsb2NrZGVwX3NldF9sb2NrX2NtcF9mbmAsIGBfX2xvY2tfYWNxdWlyZWAsIGFuZCBgbWF0Y2hfaGVsZF9sb2NrYC4gYF9fbG9ja19hY3F1aXJlYCBpcyBhICp2ZXJ5KiBob3QgcGF0aCwgb2J2aW91c2x5LiBgbWF0Y2hfaGVsZF9sb2NrYCBpcyBhbHNvIHByZXR0eSBoaWdoLXRyYWZmaWMuIEJ1dCB3YWl04oCmIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBUaGF0JiMzOTtzIGEgZ29vZCBwb2ludCEgTG9ja2luZyBmdW5jdGlvbnMgYXJlLCBieSB0aGVpciB2ZXJ5IG5hdHVyZSwgZ2VuZXJpYyBhbmQgZnJlcXVlbnRseSBjYWxsZWQuCgpTbywgYW0gSSBzdXBwb3NlZCB0byBsZWF2ZSB0aGUgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OyBibGFuaz8gTGV0JiMzOTtzIGNoZWNrIGZvciBsZXNzIGhvdC1wYXRoIGZ1bmN0aW9ucy4gQWhhLCBgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm5gIGlzIGV4cG9ydGVkIGFuZCB1c2VkIGJ5IHNvbWUgZHJpdmVycy9zdWJzeXN0ZW1zLiBUaGF0JiMzOTtzIGEgc29saWQgY2FuZGlkYXRlLiBMZXQmIzM5O3MgZGlnIGludG8gd2hlcmUgZWxzZSBgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm5gIGlzIGJlaW5nIHVzZWQsIGJlY2F1c2UgaWYgaXQmIzM5O3MgdXNlZCBtb3JlIHRoYW4gb25jZSwgaXQgc3VnZ2VzdHMgdGhlcmUmIzM5O3Mgc29tZSB1c2VmdWwsIHRhcmdldGVkIGZvY3VzIGZvciBmdXp6aW5nLCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xvY2tkZXBfc2V0X2xvY2tfY21wX2ZuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvbG9ja2RlcC5oPTM4Nj1leHRlcm4gaW50IGxvY2tkZXBfaXNfaGVsZChjb25zdCB2b2lkICopO1xuLS1cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTQxMi0jaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkdcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjQxMzp2b2lkIGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuKHN0cnVjdCBsb2NrZGVwX21hcCAqLCBsb2NrX2NtcF9mbiwgbG9ja19wcmludF9mbik7XG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC00MTQtXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo0MTU6I2RlZmluZSBsb2NrX3NldF9jbXBfZm4obG9jaywgLi4uKVx0bG9ja2RlcF9zZXRfbG9ja19jbXBfZm4oXHUwMDI2KGxvY2spLVx1MDAzZWRlcF9tYXAsIF9fVkFfQVJHU19fKVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNDE2LSNlbHNlXG4tLVxua2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jPTUwNDc9RVhQT1JUX1NZTUJPTF9HUEwoX19sb2NrZGVwX25vX3RyYWNrX18pO1xuLS1cbmtlcm5lbC9sb2NraW5nL2xvY2tkZXAuYy01MDQ5LSNpZmRlZiBDT05GSUdfUFJPVkVfTE9DS0lOR1xua2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jOjUwNTA6dm9pZCBsb2NrZGVwX3NldF9sb2NrX2NtcF9mbihzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIGxvY2tfY21wX2ZuIGNtcF9mbixcbmtlcm5lbC9sb2NraW5nL2xvY2tkZXAuYy01MDUxLVx0XHRcdCAgICAgbG9ja19wcmludF9mbiBwcmludF9mbilcbi0tXG5rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMtNTA3NS19XG5rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmM6NTA3NjpFWFBPUlRfU1lNQk9MX0dQTChsb2NrZGVwX3NldF9sb2NrX2NtcF9mbik7XG5rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMtNTA3Ny0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MzE0CgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogNjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqTG9ja2RlcCBGdW5jdGlvbiBVc2FnZSBBbmFseXNpcyoqCgpPa2F5LCBzbyBgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm5gIGlzIGV4cG9ydGVkLCB3aGljaCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBzb21ldGhpbmcgcG90ZW50aWFsbHkgaW50ZXJlc3RpbmcsIGJ1dCBpdCYjMzk7cyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBob3cgcHJldmFsZW50IGl0cyB1c2UgYWN0dWFsbHkgaXMuIFRoZSBmYWN0IHRoYXQgaXQmIzM5O3Mgb25seSBkZWZpbmVkIGluIGBsb2NrZGVwLmhgIGFuZCBgbG9ja2RlcC5jYCBtYWtlcyBtZSBzdXNwZWN0IGl0IG1pZ2h0IGJlIGludGVybmFsIHRvIHRoZSBsb2NrZGVwIHN1YnN5c3RlbSwgYnV0IHRoYXQgZXhwb3J0IGRlY2xhcmF0aW9uIHN1Z2dlc3RzIG90aGVyd2lzZS4gV2FpdCBhIHNlY29uZC4uLiBpc24mIzM5O3QgdGhhdCBmdW5jdGlvbiBhY3R1YWxseSB1c2VkIGluZGlyZWN0bHkgdGhyb3VnaCBgbG9ja19zZXRfY21wX2ZuYD8gVGhhdCBzZWVtcyBsaWtlbHkuIEkgc2hvdWxkIHByb2JhYmx5IGZvY3VzIG15IHNlYXJjaCBvbiBgbG9ja19zZXRfY21wX2ZuYCBhbmQgc2VlIHdoZXJlIHRoYXQmIzM5O3MgY2FsbGVkIGluc3RlYWQuIFRoYXQmIzM5O2xsIHByb2JhYmx5IHRlbGwgdGhlIHJlYWwgc3RvcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bG9ja19zZXRfY21wX2ZuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbWQvYmNhY2hlL2J0cmVlLmM9NTgxPXN0YXRpYyBzdHJ1Y3QgYnRyZWUgKm1jYV9idWNrZXRfYWxsb2Moc3RydWN0IGNhY2hlX3NldCAqYyxcbi0tXG5kcml2ZXJzL21kL2JjYWNoZS9idHJlZS5jLTU5My1cdGluaXRfcndzZW0oXHUwMDI2Yi1cdTAwM2Vsb2NrKTtcbmRyaXZlcnMvbWQvYmNhY2hlL2J0cmVlLmM6NTk0Olx0bG9ja19zZXRfY21wX2ZuKFx1MDAyNmItXHUwMDNlbG9jaywgYnRyZWVfbG9ja19jbXBfZm4sIGJ0cmVlX2xvY2tfcHJpbnRfZm4pO1xuZHJpdmVycy9tZC9iY2FjaGUvYnRyZWUuYy01OTUtXHRtdXRleF9pbml0KFx1MDAyNmItXHUwMDNld3JpdGVfbG9jayk7XG4tLVxuZnMvcGlwZS5jPTg3NT1zdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICphbGxvY19waXBlX2luZm8odm9pZClcbi0tXG5mcy9waXBlLmMtOTExLVx0XHRtdXRleF9pbml0KFx1MDAyNnBpcGUtXHUwMDNlbXV0ZXgpO1xuZnMvcGlwZS5jOjkxMjpcdFx0bG9ja19zZXRfY21wX2ZuKFx1MDAyNnBpcGUtXHUwMDNlbXV0ZXgsIHBpcGVfbG9ja19jbXBfZm4sIE5VTEwpO1xuZnMvcGlwZS5jLTkxMy1cdFx0cmV0dXJuIHBpcGU7XG4tLVxuZnMveGZzL2xpYnhmcy94ZnNfcnRncm91cC5jPTMyMz14ZnNfcnRnaW5vZGVfbG9ja2RlcF9zZXR1cChcbi0tXG5mcy94ZnMvbGlieGZzL3hmc19ydGdyb3VwLmMtMzI5LVx0XHRcdHR5cGUpO1xuZnMveGZzL2xpYnhmcy94ZnNfcnRncm91cC5jOjMzMDpcdGxvY2tfc2V0X2NtcF9mbihcdTAwMjZpcC1cdTAwM2VpX2xvY2ssIHhmc19ydGdpbm9kZV9pbG9ja19jbXBfZm4sXG5mcy94ZnMvbGlieGZzL3hmc19ydGdyb3VwLmMtMzMxLVx0XHRcdHhmc19ydGdpbm9kZV9pbG9ja19wcmludF9mbik7XG4tLVxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg9NDEzPXZvaWQgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm4oc3RydWN0IGxvY2tkZXBfbWFwICosIGxvY2tfY21wX2ZuLCBsb2NrX3ByaW50X2ZuKTtcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTQxNC1cbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjQxNTojZGVmaW5lIGxvY2tfc2V0X2NtcF9mbihsb2NrLCAuLi4pXHRsb2NrZGVwX3NldF9sb2NrX2NtcF9mbihcdTAwMjYobG9jayktXHUwMDNlZGVwX21hcCwgX19WQV9BUkdTX18pXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC00MTYtI2Vsc2VcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjQxNzojZGVmaW5lIGxvY2tfc2V0X2NtcF9mbihsb2NrLCAuLi4pXHRkbyB7IH0gd2hpbGUgKDApXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaC00MTgtI2VuZGlmXG4tLVxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD0xMTM9c3RhdGljIGlubGluZSBpbnQgbmV0ZGV2X2xvY2tfY21wX2ZuKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqYSxcbi0tXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTEzOS1cdFx0XHQgIFx1MDAyNmRldl9pbnN0YW5jZV9sb2NrX2tleSk7XHRcdFxcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oOjE0MDpcdGxvY2tfc2V0X2NtcF9mbihcdTAwMjZkZXYtXHUwMDNlbG9jaywgbmV0ZGV2X2xvY2tfY21wX2ZuLCBOVUxMKTtcdFxcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTE0MS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIChkZXYpLVx1MDAzZW51bV90eF9xdWV1ZXM7IGkmIzQzOyYjNDM7KVx0XHRcXFxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYz00MDM9c3RhdGljIF9fbmV0X2luaXQgaW50IHByZWluaXRfbmV0KHN0cnVjdCBuZXQgKm5ldCwgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zKVxuLS1cbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy00MjQtXHRtdXRleF9pbml0KFx1MDAyNm5ldC1cdTAwM2VydG5sX211dGV4KTtcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYzo0MjU6XHRsb2NrX3NldF9jbXBfZm4oXHUwMDI2bmV0LVx1MDAzZXJ0bmxfbXV0ZXgsIHJ0bmxfbmV0X2xvY2tfY21wX2ZuLCBOVUxMKTtcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy00MjYtXHRJTklUX1dPUksoXHUwMDI2bmV0LVx1MDAzZXJ0bmxfd29yaywgcnRubF9uZXRfd29ya19mdW5jKTtcbi0tXG5uZXQvdW5peC9hZl91bml4LmM9MTA5ND1zdGF0aWMgc3RydWN0IHNvY2sgKnVuaXhfY3JlYXRlMShzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCBzb2NrZXQgKnNvY2ssIGludCBrZXJuLCBpbnQgdHlwZSlcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMTEyMy1cdHNrLVx1MDAzZXNrX2Rlc3RydWN0XHRcdD0gdW5peF9zb2NrX2Rlc3RydWN0b3I7XG5uZXQvdW5peC9hZl91bml4LmM6MTEyNDpcdGxvY2tfc2V0X2NtcF9mbihcdTAwMjZzay1cdTAwM2Vza19yZWNlaXZlX3F1ZXVlLmxvY2ssIHVuaXhfcmVjdnFfbG9ja19jbXBfZm4sIE5VTEwpO1xubmV0L3VuaXgvYWZfdW5peC5jLTExMjUtXG4tLVxubmV0L3VuaXgvYWZfdW5peC5jLTExMzEtXHRzcGluX2xvY2tfaW5pdChcdTAwMjZ1LVx1MDAzZWxvY2spO1xubmV0L3VuaXgvYWZfdW5peC5jOjExMzI6XHRsb2NrX3NldF9jbXBfZm4oXHUwMDI2dS1cdTAwM2Vsb2NrLCB1bml4X3N0YXRlX2xvY2tfY21wX2ZuLCBOVUxMKTtcbm5ldC91bml4L2FmX3VuaXguYy0xMTMzLVx0bXV0ZXhfaW5pdChcdTAwMjZ1LVx1MDAzZWlvbG9jayk7IC8qIHNpbmdsZSB0YXNrIHJlYWRpbmcgbG9jayAqL1xuLS1cbm5ldC91bml4L2FmX3VuaXguYz0zODEzPXN0YXRpYyBpbnQgX19uZXRfaW5pdCB1bml4X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcbi0tXG5uZXQvdW5peC9hZl91bml4LmMtMzgzNy1cdFx0c3Bpbl9sb2NrX2luaXQoXHUwMDI2bmV0LVx1MDAzZXVueC50YWJsZS5sb2Nrc1tpXSk7XG5uZXQvdW5peC9hZl91bml4LmM6MzgzODpcdFx0bG9ja19zZXRfY21wX2ZuKFx1MDAyNm5ldC1cdTAwM2V1bngudGFibGUubG9ja3NbaV0sIHVuaXhfdGFibGVfbG9ja19jbXBfZm4sIE5VTEwpO1xubmV0L3VuaXgvYWZfdW5peC5jLTM4MzktXHRcdElOSVRfSExJU1RfSEVBRChcdTAwMjZuZXQtXHUwMDNldW54LnRhYmxlLmJ1Y2tldHNbaV0pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xMG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODMzCgkJCQkJCQlvdXRwdXQ6IDIwCgkJCQkJCQl0aG91Z2h0czogMjQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IFJlYXNvbmluZyBvbiBPcHRpbWl6aW5nIExvY2tkZXAgU3ltYm9sIEFuYWx5c2lzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbG9ja19zZXRfY21wX2ZuYCBhbmQgd2hlcmUgaXQmIzM5O3MgdXNlZCDigJMgcGlwZXMsIFVuaXggc29ja2V0cywgYW5kIG5ldCBuYW1lc3BhY2VzLiBUaGF0IG1lYW5zIGBsb2NrZGVwX3NldF9sb2NrX2NtcF9mbmAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIEhvd2V2ZXIsIHRoaXMgcGF0Y2ggaXMgcHJpbWFyaWx5IGFib3V0IG1vZGlmaWNhdGlvbnMgKndpdGhpbiogdGhlIGxvY2tkZXAgaW50ZXJuYWxzIHRoZW1zZWx2ZXMuIEl0JiMzOTtzIG5vdCBhIHBlcmZvcm1hbmNlLWNyaXRpY2FsIGZ1bmN0aW9uOyBpdCYjMzk7cyBjYWxsZWQgZHVyaW5nIHRoZSAqaW5pdGlhbGl6YXRpb24qIG9mIHRoZXNlIHN0cnVjdHVyZXMsIG5vdCBpbiBhbnkgaG90IHBhdGguIGBfX2xvY2tfYWNxdWlyZWAgYW5kIGBtYXRjaF9oZWxkX2xvY2tgLCAqdGhvc2UqIGFyZSB0aGUgcmVhbGx5IGhvdCBhcmVhcy4KClNvLCBJIGNvdWxkIGluY2x1ZGUgYGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuYCBpbiBGb2N1c1N5bWJvbHMsIGJ1dCBJJiMzOTttIHRoaW5raW5nIG1heWJlIEkgKnNob3VsZG4mIzM5O3QqLiBJZiBJIGluY2x1ZGUgaXQsIGl0IGNvdWxkIHBvdGVudGlhbGx5IHNrZXcgdGhlIGZ1enppbmcgZWZmb3J0cyB0b3dhcmRzIHRoZSBjcmVhdGlvbiBvZiBwaXBlcyBvciBVbml4IHNvY2tldHMsIHdoZW4gdGhlIGFjdHVhbCBidWcgSSYjMzk7bSB0YXJnZXRpbmcgaXMgZGVlcGVyLCB3aXRoaW4gbG9ja2RlcC4gSSB3YW50IHRvIGtlZXAgdGhlIGZ1enppbmcgbW9yZSBnZW5lcmFsIHRvIGV4cG9zZSB0aGUgbG9ja2RlcCBpc3N1ZS4gQnV0IHRoZW4gYWdhaW4sIGlmIEkgKmRvbiYjMzk7dCogaW5jbHVkZSBpdCwgc3l6a2FsbGVyIHdpbGwganVzdCBmdXp6IG5vcm1hbGx5LgoKV2FpdCwgdGhlIGtleSBpcyB0aGUgY29uZmlndXJhdGlvbi4gTG9ja2RlcCBpcyBlbmFibGVkIGJ5IGBDT05GSUdfUFJPVkVfTE9DS0lOR2AgYW5kIGBDT05GSUdfTE9DS0RFUGAuIE9rYXksIHRoYXQmIzM5O3Mgd2hhdCBJIG5lZWQgdG8gZm9jdXMgb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgdHdvIGNvbmZpZ3VyYXRpb25zIGFyZSBpbmNsdWRlZCBpbiBFbmFibGVDb25maWdzLiBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfUFJPVkVfTE9DS0lOR2AgaXMgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODozMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFJPVkVfTE9DS0lORyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtsaWIvS2NvbmZpZy5kZWJ1Zz0xNDE2PWNvbmZpZyBMT0NLX0RFQlVHR0lOR19TVVBQT1JUXG4tLVxubGliL0tjb25maWcuZGVidWctMTQyMC1cbmxpYi9LY29uZmlnLmRlYnVnOjE0MjE6Y29uZmlnIFBST1ZFX0xPQ0tJTkdcbmxpYi9LY29uZmlnLmRlYnVnLTE0MjItXHRib29sIFwmIzM0O0xvY2sgZGVidWdnaW5nOiBwcm92ZSBsb2NraW5nIGNvcnJlY3RuZXNzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6MzM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjdtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjUxMgoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkxvY2tpbmcgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKioKCkFscmlnaHQsIHNvIGBQUk9WRV9MT0NLSU5HYCBpcyBkZWZpbml0ZWx5IHRoZSBrZXkgY29uZmlndXJhdGlvbiBpdGVtIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaGVyZSwgdGhhdCYjMzk7cyBjbGVhci4gQnV0IEkmIzM5O20gYSBiaXQgY3VyaW91cywgYXJlIHRoZXJlIGFueSAqb3RoZXIqIHJlbGF0ZWQgY29uZmlncyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50PyBTb21ldGhpbmcgbGlrZSBgREVCVUdfTE9DS19BTExPQ2AsIHBlcmhhcHM/IEl0JiMzOTtzIGFsd2F5cyBnb29kIHRvIGhhdmUgdGhlIGZ1bGwgcGljdHVyZS4KClRvIGdldCBhIGRlZmluaXRpdmUgYW5zd2VyIGFuZCB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMsIEkmIzM5O20gZ29pbmcgdG8gZGl2ZSBzdHJhaWdodCBpbnRvIGBrZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNgLiBUaGF0JiMzOTtzIHRoZSBzb3VyY2UgY29kZSBmb3IgdGhlIGxvY2sgZGVwZW5kZW5jeSBjaGVja2VyLCBhbmQgaXQgc2hvdWxkIHJldmVhbCBleGFjdGx5IHdoaWNoIGNvbmZpZ3VyYXRpb25zIGFyZSB0aWVkIHRvIGl0cyBmdW5jdGlvbmFsaXR5LiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIHdoYXQgb3RoZXIgbGV2ZXJzIHdlIGNhbiBwdWxsIHRvIGdldCB0aGUgZXhhY3QgbG9jayBkZWJ1Z2dpbmcgZmVhdHVyZXMgd2UgbmVlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqLVxcJFxcKENPTkZJR18uKmxvY2tkZXAubyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvbG9ja2luZy9NYWtlZmlsZT0yND1vYmotJChDT05GSUdfREVCVUdfTVVURVhFUykgJiM0Mzs9IG11dGV4LWRlYnVnLm9cbmtlcm5lbC9sb2NraW5nL01ha2VmaWxlOjI1Om9iai0kKENPTkZJR19MT0NLREVQKSAmIzQzOz0gbG9ja2RlcC5vXG5rZXJuZWwvbG9ja2luZy9NYWtlZmlsZS0yNi1pZmVxICgkKENPTkZJR19QUk9DX0ZTKSx5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODQzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjoKCioqTG9ja2RlcCBEZWVwIERpdmUqKgoKUmlnaHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgbG9jayBkZWJ1Z2dpbmcuLi4gYW5kIHRoZSBjcnVjaWFsIHN0YXJ0aW5nIHBvaW50IGlzIGBDT05GSUdfTE9DS0RFUGAuIFRoYXQmIzM5O3MgdGhlIGJpZyBvbmUuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19QUk9WRV9MT0NLSU5HYCBkaXJlY3RseSBzZWxlY3RzIGBDT05GSUdfTE9DS0RFUGAsIG1ha2luZyBpdCBwcmV0dHkgY2VudHJhbCB0byB0aGUgd2hvbGUgbG9jayB2YWxpZGF0aW9uIHNjaGVtZS4gTWFrZXMgc2Vuc2UuIE5vdywgbGV0IG1lIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBgUFJPVkVfTE9DS0lOR2AuIEkmIzM5O2xsIGdvIHN0cmFpZ2h0IHRvIGBsaWIvS2NvbmZpZy5kZWJ1Z2AgYW5kIHNlZSB3aGF0IGl0IHJldmVhbHMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoaXMgaXMgYWxsIHdpcmVkIHRvZ2V0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFJPVkVfTE9DS0lORyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTE0MTY9Y29uZmlnIExPQ0tfREVCVUdHSU5HX1NVUFBPUlRcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNDIwLVxubGliL0tjb25maWcuZGVidWc6MTQyMTpjb25maWcgUFJPVkVfTE9DS0lOR1xubGliL0tjb25maWcuZGVidWctMTQyMi1cdGJvb2wgXCYjMzQ7TG9jayBkZWJ1Z2dpbmc6IHByb3ZlIGxvY2tpbmcgY29ycmVjdG5lc3NcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjVtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzE1NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gRGVidWdnaW5nIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGRlYnVnZ2luZyBjb25maWd1cmF0aW9uIG9mIHRoaXMgcHJvamVjdC4gTXkgaW50dWl0aW9uIHN1Z2dlc3RzIHRoZSBpc3N1ZSBtaWdodCBiZSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgS2NvbmZpZyBvcHRpb24sIGFuZCBiYXNlZCBvbiBleHBlcmllbmNlLCBgbGliL0tjb25maWcuZGVidWdgIGlzIHVzdWFsbHkgdGhlIHJpZ2h0IHBsYWNlIHRvIGxvb2sgZm9yIHRoYXQgc29ydCBvZiB0aGluZy4gSSYjMzk7bSBnb2luZyB0byBqdW1wIHN0cmFpZ2h0IHRvIGFyb3VuZCBsaW5lIDE0MjEuIFRoYXQmIzM5O3MgYSByZWFzb25hYmxlIHN0YXJ0aW5nIHBvaW50OyBpdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIG1vcmUgc3BlY2lmaWMgZGVidWcgb3B0aW9ucyBtaWdodCBiZSBkZWZpbmVkIG9yIHdoZXJlIHJlbGF0ZWQgZGVwZW5kZW5jaWVzIGFyZSBoYW5kbGVkLiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBLY29uZmlnIHN5bWJvbHMsIHRoZWlyIGRlcGVuZGVuY2llcywgYW5kIGFueSBkZWZhdWx0IHZhbHVlcyB0aGF0IG1pZ2h0IGdpdmUgbWUgYSBjbHVlIGFib3V0IHRoZSBiZWhhdmlvciBJJiMzOTttIHNlZWluZy4gV2l0aCBhIGJpdCBvZiBsdWNrLCB0aGUgYW5zd2VyIGlzIHJpZ2h0IHRoZXJlIGluIGZyb250IG9mIG1lLiBPdGhlcndpc2UsIEkgd2lsbCBoYXZlIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI0IDE4OjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bGliL0tjb25maWcuZGVidWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxNDE1LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzE0MTU6XHRcbjE0MTY6XHRjb25maWcgTE9DS19ERUJVR0dJTkdfU1VQUE9SVFxuMTQxNzpcdFx0Ym9vbFxuMTQxODpcdFx0ZGVwZW5kcyBvbiBUUkFDRV9JUlFGTEFHU19TVVBQT1JUIFx1MDAyNlx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlQgXHUwMDI2XHUwMDI2IExPQ0tERVBfU1VQUE9SVFxuMTQxOTpcdFx0ZGVmYXVsdCB5XG4xNDIwOlx0XG4xNDIxOlx0Y29uZmlnIFBST1ZFX0xPQ0tJTkdcbjE0MjI6XHRcdGJvb2wgXCYjMzQ7TG9jayBkZWJ1Z2dpbmc6IHByb3ZlIGxvY2tpbmcgY29ycmVjdG5lc3NcJiMzNDtcbjE0MjM6XHRcdGRlcGVuZHMgb24gREVCVUdfS0VSTkVMIFx1MDAyNlx1MDAyNiBMT0NLX0RFQlVHR0lOR19TVVBQT1JUXG4xNDI0Olx0XHRzZWxlY3QgTE9DS0RFUFxuMTQyNTpcdFx0c2VsZWN0IERFQlVHX1NQSU5MT0NLXG4xNDI2Olx0XHRzZWxlY3QgREVCVUdfTVVURVhFUyBpZiAhUFJFRU1QVF9SVFxuMTQyNzpcdFx0c2VsZWN0IERFQlVHX1JUX01VVEVYRVMgaWYgUlRfTVVURVhFU1xuMTQyODpcdFx0c2VsZWN0IERFQlVHX1JXU0VNUyBpZiAhUFJFRU1QVF9SVFxuMTQyOTpcdFx0c2VsZWN0IERFQlVHX1dXX01VVEVYX1NMT1dQQVRIXG4xNDMwOlx0XHRzZWxlY3QgREVCVUdfTE9DS19BTExPQ1xuMTQzMTpcdFx0c2VsZWN0IFBSRUVNUFRfQ09VTlQgaWYgIUFSQ0hfTk9fUFJFRU1QVFxuMTQzMjpcdFx0c2VsZWN0IFRSQUNFX0lSUUZMQUdTXG4xNDMzOlx0XHRkZWZhdWx0IG5cbjE0MzQ6XHRcdGhlbHBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY5OQoJCQkJCQkJb3V0cHV0OiAxMjUKCQkJCQkJCXRob3VnaHRzOiA3NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIExvY2tkZXAgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBhY3RpdmF0ZXMgYExPQ0tERVBgIHRocm91Z2ggYFBST1ZFX0xPQ0tJTkdgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSYjMzk7bGwgZGVmaW5pdGVseSBpbmNsdWRlIGJvdGggYFBST1ZFX0xPQ0tJTkdgIGFuZCBgTE9DS0RFUGAgaW4gdGhlIGBFbmFibGVDb25maWdzYC4gVGhhdCYjMzk7cyBhIG5vLWJyYWluZXIuCgpOb3csIGxldCYjMzk7cyBzZWUsIGFyZSB0aGVyZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IGV4dHJhIGF0dGVudGlvbj8gVGhlIHBhdGNoIGludHJvZHVjZXMgYGxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWRgLiBJdCYjMzk7cyBjYWxsZWQgZnJvbSBgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm5gLCBgX19sb2NrX2FjcXVpcmVgLCBhbmQgYG1hdGNoX2hlbGRfbG9ja2AuIEhtbSwgYF9fbG9ja19hY3F1aXJlYCBhbmQgYG1hdGNoX2hlbGRfbG9ja2AgYXJlIHN0YXRpYzsgdGhleSYjMzk7cmUgcHJvYmFibHkgaG90IHBhdGhzLCBzbyBub3QgYSBnb29kIGlkZWEgdG8gZm9jdXMgb24gdGhvc2Ugc3BlY2lmaWNhbGx5LiBgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm5gIGlzIGV4cG9ydGVkIGFuZCB1c2VkIHdoZW4gY3JlYXRpbmcgc29ja2V0cyBhbmQgcGlwZXMsIHdoaWNoIGlzbiYjMzk7dCAqc3VwZXIqIGNvbW1vbiwgYnV0IGl0JiMzOTtzIG5vdCByYXJlIGVpdGhlci4KClNob3VsZCBJIGxpc3QgYGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuYCBpbiBgRm9jdXNTeW1ib2xzYD8gSWYgSSBkaWQsIHN5emthbGxlciB3b3VsZCB0YXJnZXQgc29ja2V0L3BpcGUgY3JlYXRpb24uIEl0IGNvdWxkIGJlIGZpbmUsIGJ1dCB0aGUgZnVuY3Rpb24mIzM5O3Mgb25seSBlbmFibGVkIGlmIGBDT05GSUdfUFJPVkVfTE9DS0lOR2AgaXMgZW5hYmxlZC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgYGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuYCBpcyBldmVuIGRlZmluZWQgd2l0aG91dCBgUFJPVkVfTE9DS0lOR2AuIFllcCwgaW4gYGluY2x1ZGUvbGludXgvbG9ja2RlcC5oYCwgaXQmIzM5O3MgcHJvdGVjdGVkIGJ5IHRoZSBgI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HYC4KClNvLCBpdCYjMzk7cyBvbmx5IGFjdGl2ZSB3aXRoIGBQUk9WRV9MT0NLSU5HYC4gSSYjMzk7bGwgc3RpY2sgd2l0aCBhZGRpbmcgYFBST1ZFX0xPQ0tJTkdgIGFuZCBgTE9DS0RFUGAgdG8gYEVuYWJsZUNvbmZpZ3NgLiBJIHRoaW5rIGl0JiMzOTtzIGJldHRlciBub3QgdG8gcHV0IGFueSBmdW5jdGlvbnMgaW4gYEZvY3VzU3ltYm9sc2AgaGVyZSBiZWNhdXNlIGxvY2tkZXAgaXMgYSBnZW5lcmljIHN1YnN5c3RlbSwgYW5kIHRhcmdldGluZyBzcGVjaWZpYyBmdW5jdGlvbnMgbWlnaHQgbmFycm93IHRoZSBmdXp6aW5nIHNjb3BlIHRvbyBtdWNoLiBJIHdhbnQgdG8gdGVzdCBhbnkgbG9jayBhY3F1aXNpdGlvbiBmb3IgdGhlIGJ1ZyB0aGF0IHRoaXMgcGF0Y2ggZml4ZXMsIHdoaWNoIGlzIHRoZSByYWNlIGNvbmRpdGlvbiBvciBhbiBpbnZhbGlkIGNhY2hlIGluIGxvY2tkZXAgaXRzZWxmLiBHZW5lcmFsIGZ1enppbmcgd2l0aCBsb2NrZGVwIGVuYWJsZWQgaXMgdGhlIGJlc3QgYXBwcm9hY2guCgpKdXN0IHRvIGNvbmZpcm0sIHRoaXMgcGF0Y2ggYWRkcyBgbG9ja19jbGFzc19jYWNoZV9pc192YWxpZGAgdG8gY2hlY2sgdGhlIHZhbGlkaXR5IG9mIGEgY2FjaGVkIGxvY2sgY2xhc3MgYW5kIHVzZXMgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYCBmb3IgYGxvY2stJmd0O2NsYXNzX2NhY2hlYC4gVGhpcyAqaXMqIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gbG9ja2RlcDsgYSBjcnVjaWFsIGZpeCBmb3IgcG90ZW50aWFsIGJ1Z3Mgd2l0aCBpbnZhbGlkIGNhY2hlIHVzYWdlLiBJdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGNoYW5nZSBpbiBhIGNvcmUga2VybmVsIGRlYnVnZ2luZyBtZWNoYW5pc20gdGhhdCBpcyB1c2VkIGluIGV2ZXJ5IGxvY2sgYWNxdWlzaXRpb24sIHNvIHRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPVkVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtMT0NLREVQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvY2tkZXAgc3Vic3lzdGVtIHRvIHZhbGlkYXRlIGNhY2hlZCBsb2NrIGNsYXNzZXMgdXNpbmcgbG9ja19jbGFzc19jYWNoZV9pc192YWxpZCgpIGFuZCBhZGRzIFJFQURfT05DRS9XUklURV9PTkNFIHRvIHByZXZlbnQgZGF0YSByYWNlcyBvbiBsb2NrLVx1MDAzZWNsYXNzX2NhY2hlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjb3JlIGtlcm5lbCBkZWJ1Z2dpbmcgbWVjaGFuaXNtIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBhbnkgbG9jayBhY3F1aXNpdGlvbi4gRnV6emluZyB3aXRoIFBST1ZFX0xPQ0tJTkcgZW5hYmxlZCBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGVzZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7UFJPVkVfTE9DS0lORyYjMzQ7LAogICAgJiMzNDtMT0NLREVQJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvY2tkZXAgc3Vic3lzdGVtIHRvIHZhbGlkYXRlIGNhY2hlZCBsb2NrIGNsYXNzZXMgdXNpbmcgbG9ja19jbGFzc19jYWNoZV9pc192YWxpZCgpIGFuZCBhZGRzIFJFQURfT05DRS9XUklURV9PTkNFIHRvIHByZXZlbnQgZGF0YSByYWNlcyBvbiBsb2NrLVx1MDAzZWNsYXNzX2NhY2hlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjb3JlIGtlcm5lbCBkZWJ1Z2dpbmcgbWVjaGFuaXNtIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBhbnkgbG9jayBhY3F1aXNpdGlvbi4gRnV6emluZyB3aXRoIFBST1ZFX0xPQ0tJTkcgZW5hYmxlZCBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGVzZSBwYXRocy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjQgMTg6NDY8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsb2NrZGVwJiMzOTtzIGludGVybmFsIGNhY2hpbmcgbWVjaGFuaXNtIGZvciBsb2NrIGNsYXNzZXMgKGBsb2NrLVx1MDAzZWNsYXNzX2NhY2hlYCkuIEl0IGludHJvZHVjZXMgYSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkYCBhbmQgdXNlcyBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBlbnN1cmUgdGhlIGNhY2hlZCBjbGFzcyBwb2ludGVyIGlzIHZhbGlkIGJlZm9yZSB1c2UuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBpc3N1ZXMsIHN0YWxlIGNhY2hlIGVudHJpZXMsIG9yIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAod2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0NTQU4sIEtBU0FOLCBvciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZjA1MWNjY2JhMWJjYzJlMzk4NTE1MmZjYzgxNGQyMzEyNTAzYWNjYQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gQXVnIDI0IDE4OjE5OjQ0IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jCmluZGV4IDI1ZDc3ZDRhMTA2MTQuLjc2M2Y3OTgwNmJkOGYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuYwomIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMKQEAgLTk2Myw2ICYjNDM7OTYzLDM0IEBAIGxvb2tfdXBfbG9ja19jbGFzcyhjb25zdCBzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcykKIAlyZXR1cm4gTlVMTDsKIH0KIAomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywKJiM0MzsJCQkJCQkgICAgICBjb25zdCBzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MsCiYjNDM7CQkJCQkJICAgICAgdW5zaWduZWQgaW50IHN1YmNsYXNzKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgaW50IGNsYXNzX3N1YmNsYXNzOwomIzQzOwomIzQzOwlpZiAoIWNsYXNzKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoY2xhc3MgJmx0OyBsb2NrX2NsYXNzZXMgfHwgY2xhc3MgJmd0Oz0gbG9ja19jbGFzc2VzICYjNDM7IE1BWF9MT0NLREVQX0tFWVMpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoIWFyY2hfdGVzdF9iaXQoY2xhc3MgLSBsb2NrX2NsYXNzZXMsIGxvY2tfY2xhc3Nlc19pbl91c2UpKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KCFsb2NrLSZndDtrZXkpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwljbGFzc19zdWJjbGFzcyA9IHN1YmNsYXNzID8gc3ViY2xhc3MgOiBjbGFzcy0mZ3Q7c3ViY2xhc3M7CiYjNDM7CWlmICh1bmxpa2VseShjbGFzc19zdWJjbGFzcyAmZ3Q7PSBNQVhfTE9DS0RFUF9TVUJDTEFTU0VTKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJaWYgKHVubGlrZWx5KFJFQURfT05DRShjbGFzcy0mZ3Q7a2V5KSAhPSBsb2NrLSZndDtrZXktJmd0O3N1YmtleXMgJiM0MzsgY2xhc3Nfc3ViY2xhc3MpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwomIzQzOwlyZXR1cm4gdHJ1ZTsKJiM0Mzt9CiYjNDM7CiAvKgogICogU3RhdGljIGxvY2tzIGRvIG5vdCBoYXZlIHRoZWlyIGNsYXNzLWtleXMgeWV0IC0gZm9yIHRoZW0gdGhlIGtleSBpcwogICogdGhlIGxvY2sgb2JqZWN0IGl0c2VsZi4gSWYgdGhlIGxvY2sgaXMgaW4gdGhlIHBlciBjcHUgYXJlYSwgdGhlCkBAIC0xMzk1LDkgJiM0MzsxNDIzLDkgQEAgcmVnaXN0ZXJfbG9ja19jbGFzcyhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcywgaW50IGZvcmNlKQogCiBvdXRfc2V0X2NsYXNzX2NhY2hlOgogCWlmICghc3ViY2xhc3MgfHwgZm9yY2UpCi0JCWxvY2stJmd0O2NsYXNzX2NhY2hlWzBdID0gY2xhc3M7CiYjNDM7CQlXUklURV9PTkNFKGxvY2stJmd0O2NsYXNzX2NhY2hlWzBdLCBjbGFzcyk7CiAJZWxzZSBpZiAoc3ViY2xhc3MgJmx0OyBOUl9MT0NLREVQX0NBQ0hJTkdfQ0xBU1NFUykKLQkJbG9jay0mZ3Q7Y2xhc3NfY2FjaGVbc3ViY2xhc3NdID0gY2xhc3M7CiYjNDM7CQlXUklURV9PTkNFKGxvY2stJmd0O2NsYXNzX2NhY2hlW3N1YmNsYXNzXSwgY2xhc3MpOwogCiAJLyoKIAkgKiBIYXNoIGNvbGxpc2lvbiwgZGlkIHdlIHNtb2tlIHNvbWU/IFdlIGZvdW5kIGEgY2xhc3Mgd2l0aCBhIG1hdGNoaW5nCkBAIC00OTU3LDcgJiM0Mzs0OTg1LDcgQEAgdm9pZCBsb2NrZGVwX2luaXRfbWFwX3R5cGUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBjb25zdCBjaGFyICpuYW1lLAogCWludCBpOwogCiAJZm9yIChpID0gMDsgaSAmbHQ7IE5SX0xPQ0tERVBfQ0FDSElOR19DTEFTU0VTOyBpJiM0MzsmIzQzOykKLQkJbG9jay0mZ3Q7Y2xhc3NfY2FjaGVbaV0gPSBOVUxMOwomIzQzOwkJV1JJVEVfT05DRShsb2NrLSZndDtjbGFzc19jYWNoZVtpXSwgTlVMTCk7CiAKICNpZmRlZiBDT05GSUdfTE9DS19TVEFUCiAJbG9jay0mZ3Q7Y3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTsKQEAgLTUwMjIsMTIgJiM0Mzs1MDUwLDE1IEBAIEVYUE9SVF9TWU1CT0xfR1BMKF9fbG9ja2RlcF9ub190cmFja19fKTsKIHZvaWQgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm4oc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBsb2NrX2NtcF9mbiBjbXBfZm4sCiAJCQkgICAgIGxvY2tfcHJpbnRfZm4gcHJpbnRfZm4pCiB7Ci0Jc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gbG9jay0mZ3Q7Y2xhc3NfY2FjaGVbMF07CiYjNDM7CXN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IFJFQURfT05DRShsb2NrLSZndDtjbGFzc19jYWNoZVswXSk7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKIAogCXJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7CiAJbG9ja2RlcF9yZWN1cnNpb25faW5jKCk7CiAKJiM0MzsJaWYgKCFsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGxvY2ssIGNsYXNzLCAwKSkKJiM0MzsJCWNsYXNzID0gTlVMTDsKJiM0MzsKIAlpZiAoIWNsYXNzKQogCQljbGFzcyA9IHJlZ2lzdGVyX2xvY2tfY2xhc3MobG9jaywgMCwgMCk7CiAKQEAgLTUxMTksOCAmIzQzOzUxNTAsMTEgQEAgc3RhdGljIGludCBfX2xvY2tfYWNxdWlyZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcywKIAlpZiAoREVCVUdfTE9DS1NfV0FSTl9PTihzdWJjbGFzcyAmZ3Q7PSBNQVhfTE9DS0RFUF9TVUJDTEFTU0VTKSkKIAkJcmV0dXJuIDA7CiAKLQlpZiAoc3ViY2xhc3MgJmx0OyBOUl9MT0NLREVQX0NBQ0hJTkdfQ0xBU1NFUykKLQkJY2xhc3MgPSBsb2NrLSZndDtjbGFzc19jYWNoZVtzdWJjbGFzc107CiYjNDM7CWlmIChzdWJjbGFzcyAmbHQ7IE5SX0xPQ0tERVBfQ0FDSElOR19DTEFTU0VTKSB7CiYjNDM7CQljbGFzcyA9IFJFQURfT05DRShsb2NrLSZndDtjbGFzc19jYWNoZVtzdWJjbGFzc10pOwomIzQzOwkJaWYgKCFsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGxvY2ssIGNsYXNzLCBzdWJjbGFzcykpCiYjNDM7CQkJY2xhc3MgPSBOVUxMOwomIzQzOwl9CiAJLyoKIAkgKiBOb3QgY2FjaGVkPwogCSAqLwpAQCAtNTMyMyw5ICYjNDM7NTM1Nyw5IEBAIHN0YXRpYyBub2luc3RyIGludCBtYXRjaF9oZWxkX2xvY2soY29uc3Qgc3RydWN0IGhlbGRfbG9jayAqaGxvY2ssCiAJCXJldHVybiAxOwogCiAJaWYgKGhsb2NrLSZndDtyZWZlcmVuY2VzKSB7Ci0JCWNvbnN0IHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IGxvY2stJmd0O2NsYXNzX2NhY2hlWzBdOwomIzQzOwkJY29uc3Qgc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gUkVBRF9PTkNFKGxvY2stJmd0O2NsYXNzX2NhY2hlWzBdKTsKIAotCQlpZiAoIWNsYXNzKQomIzQzOwkJaWYgKCFsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGxvY2ssIGNsYXNzLCAwKSkKIAkJCWNsYXNzID0gbG9va191cF9sb2NrX2NsYXNzKGxvY2ssIDApOwogCiAJCS8qCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMDYyCgkJCQkJCQlvdXRwdXQ6IDE1MwoJCQkJCQkJdGhvdWdodHM6IDYzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExvY2tkZXAgQ2FjaGUgVmFsaWRhdGlvbiBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgc29sZWx5IG9uIGludGVybmFsIGxvY2tkZXAgbWVjaGFuaWNzLCBzcGVjaWZpY2FsbHkgZGVhbGluZyB3aXRoIGhvdyBpdCBjYWNoZXMgbG9jayBjbGFzc2VzIHdpdGhpbiB0aGUgYGtlcm5lbC9sb2NraW5nL2xvY2tkZXAuY2AgZmlsZS4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgYWJvdXQgY29uY3VycmVuY3kgaXNzdWVzIG9uIGBsb2NrLSZndDtjbGFzc19jYWNoZWAuIEkgc2VlIGEgbmV3IGZ1bmN0aW9uLCBgbG9ja19jbGFzc19jYWNoZV9pc192YWxpZGAsIGhhcyBiZWVuIGFkZGVkIHRvIHZhbGlkYXRlIHRoZSBjYWNoZWQgY2xhc3MgcG9pbnRlciBiZWZvcmUgaXQmIzM5O3MgdXNlZC4gVGhpcyBpcyBzbWFydDsgdGhpcyBpcyBhYm91dCBwcmV2ZW50aW5nIHRoZSB1c2Ugb2YgYSBzdGFsZSBvciBjb3JydXB0ZWQgY2FjaGUsIGEgdGV4dGJvb2sgc29sdXRpb24gZm9yIGEgcmFjZSBjb25kaXRpb24uCgpJJiMzOTt2ZSBzcG90dGVkIHRoZSBjaGFuZ2VzIGludm9sdmUgYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCBmb3IgYWNjZXNzaW5nIGFuZCB1cGRhdGluZyB0aGUgYGxvY2stJmd0O2NsYXNzX2NhY2hlYCwgd2hpY2ggZnVydGhlciByZWluZm9yY2VzIHRoZSBkYXRhIHJhY2UgbWl0aWdhdGlvbiBhbmdsZS4gVGhlIGxvZ2ljIG9mIHZhbGlkYXRpbmcgdGhlIGNhY2hlZCBgY2xhc3NgIGJlZm9yZSB1c2FnZSBpcyBjbGVhciBhbmQgY29uY2lzZS4KClRoaW5raW5nIGFib3V0IGl0LCB0aGUgc2NvcGUgaXMgc3RyaWN0bHkgd2l0aGluIGxvY2tkZXAmIzM5O3MgaW50ZXJuYWwgc3RhdGUgdHJhY2tpbmcuIFRoZXJlJiMzOTtzIG5vdGhpbmcgaGVyZSB0aGF0IGV4cG9zZXMgdW5pbml0aWFsaXplZCBtZW1vcnkgdG8gdXNlcnNwYWNlIG9yIGludHJvZHVjZXMgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzLCBub3IgYXJlIHRoZXJlIGFueSBhbGxvY2F0aW9ucy4gVGhhdCBtZWFucywgdGhlIHByb2JsZW0gYmVpbmcgZml4ZWQgaGFzIHRvIGJlIHNvbWV0aGluZyBsaWtlIGEgZGF0YSByYWNlIG9yIGEgbWVtb3J5IGNvcnJ1cHRpb24gcHJvYmxlbSB3aXRoaW4gbG9ja2RlcCwgbGlrZSBhIHVzZS1hZnRlci1mcmVlLCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgYSBsb2dpY2FsIGJ1ZyBkdWUgdG8gYSBzdGFsZSBjYWNoZS4KCk5vdywgS0FTQU4sIEtDU0FOLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIHdvdWxkIGNhdGNoIGRhdGEgcmFjZXMgb3IgaW52YWxpZCBtZW1vcnkgYWNjZXNzZXMuIEtNU0FOIGlzIHRoZSB0b29sIGZvciBmaW5kaW5nIGlzc3VlcyByZWxhdGVkIHRvIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBHaXZlbiB0aGF0IGBsb2NrLSZndDtjbGFzc19jYWNoZWAgaXMgaW5pdGlhbGl6ZWQgdG8gTlVMTCBpbiBgbG9ja2RlcF9pbml0X21hcF90eXBlYCwgSSBhbSBub3Qgc2VlaW5nIEtNU0FOIGJlaW5nIGFwcGxpY2FibGUgdG8gdGhpcyBwYXRjaDsgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoaXMgcGF0Y2ggaXMgbm90IGludHJvZHVjaW5nIG9yIGZpeGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gYGxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWRgIGNvbmZpcm1zIHRoaXMuIEl0IGNoZWNrczoKLSBUaGUgY2xhc3MgcG9pbnRlciBpcyBub3QgTlVMTAotIFRoZSBjbGFzcyBwb2ludGVyIGlzIHdpdGhpbiB0aGUgdmFsaWQgbG9jayBjbGFzc2VzIGFycmF5Ci0gVGhlIGNsYXNzIGlzIGluIHVzZSBiYXNlZCBvbiB0aGUgYGxvY2tfY2xhc3Nlc19pbl91c2VgIGJpdCBhcnJheQotIFRoZSBsb2NrJiMzOTtzIGtleSBpcyBub3QgTlVMTAotIFRoZSBjbGFzcyYjMzk7cyBzdWJjbGFzcyBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlCi0gVGhlIGNsYXNzJiMzOTtzIGtleSBtYXRjaGVzIHRoZSBsb2NrJiMzOTtzIGtleQoKVGhlcmVmb3JlLCB0aGUgY2hlY2tzIGluIHRoZSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGFyZSB0byBlbnN1cmUgdGhhdCB0aGUgbG9jayBjbGFzcyBpcyB2YWxpZCBhbmQgbWF0Y2hlcyB0aGUgbG9jayYjMzk7cyBrZXksIGFuZCB0aGlzIGNvbmZpcm1zIHRoaXMgaXMgbm90IGFuIGlzc3VlIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBJJiMzOTttIGNvbmZpZGVudCBpbiBzZXR0aW5nIGBOZWVkc0tNU0FOYCB0byBgZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNCAxODo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBsb2NrZGVwJiMzOTtzIGludGVybmFsIGNhY2hpbmcgbWVjaGFuaXNtIGZvciBsb2NrIGNsYXNzZXMgKGBsb2NrLVx1MDAzZWNsYXNzX2NhY2hlYCkuIEl0IGludHJvZHVjZXMgYSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkYCBhbmQgdXNlcyBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBlbnN1cmUgdGhlIGNhY2hlZCBjbGFzcyBwb2ludGVyIGlzIHZhbGlkIGJlZm9yZSB1c2UuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBpc3N1ZXMsIHN0YWxlIGNhY2hlIGVudHJpZXMsIG9yIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAod2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0NTQU4sIEtBU0FOLCBvciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tkZXAmIzM5O3MgaW50ZXJuYWwgY2FjaGluZyBtZWNoYW5pc20gZm9yIGxvY2sgY2xhc3NlcyAoYGxvY2stXHUwMDNlY2xhc3NfY2FjaGVgKS4gSXQgaW50cm9kdWNlcyBhIHZhbGlkYXRpb24gZnVuY3Rpb24gYGxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWRgIGFuZCB1c2VzIGBSRUFEX09OQ0VgL2BXUklURV9PTkNFYCB0byBwcmV2ZW50IGRhdGEgcmFjZXMgYW5kIGVuc3VyZSB0aGUgY2FjaGVkIGNsYXNzIHBvaW50ZXIgaXMgdmFsaWQgYmVmb3JlIHVzZS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGNvbmN1cnJlbmN5IGlzc3Vlcywgc3RhbGUgY2FjaGUgZW50cmllcywgb3IgcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzICh3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQ1NBTiwgS0FTQU4sIG9yIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29waWVzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoxOTo0NS44NTY2OTg4OTlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjM0MTEwMjQ1NjEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST1ZFX0xPQ0tJTkdcIixcbiAgICBcIkxPQ0tERVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb2NrZGVwJ3MgaW50ZXJuYWwgY2FjaGluZyBtZWNoYW5pc20gZm9yIGxvY2sgY2xhc3NlcyAoYGxvY2stXFx1MDAzZWNsYXNzX2NhY2hlYCkuIEl0IGludHJvZHVjZXMgYSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkYCBhbmQgdXNlcyBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBlbnN1cmUgdGhlIGNhY2hlZCBjbGFzcyBwb2ludGVyIGlzIHZhbGlkIGJlZm9yZSB1c2UuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBpc3N1ZXMsIHN0YWxlIGNhY2hlIGVudHJpZXMsIG9yIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAod2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0NTQU4sIEtBU0FOLCBvciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2NrZGVwIHN1YnN5c3RlbSB0byB2YWxpZGF0ZSBjYWNoZWQgbG9jayBjbGFzc2VzIHVzaW5nIGxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWQoKSBhbmQgYWRkcyBSRUFEX09OQ0UvV1JJVEVfT05DRSB0byBwcmV2ZW50IGRhdGEgcmFjZXMgb24gbG9jay1cXHUwMDNlY2xhc3NfY2FjaGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNvcmUga2VybmVsIGRlYnVnZ2luZyBtZWNoYW5pc20gdGhhdCBpcyByZWFjaGFibGUgdmlhIGFueSBsb2NrIGFjcXVpc2l0aW9uLiBGdXp6aW5nIHdpdGggUFJPVkVfTE9DS0lORyBlbmFibGVkIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZXNlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoxOTo0NS44NTY3MDQyNTlaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MzQyOTA4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGYwNTFjY2NiYTFiY2MyZTM5ODUxNTJmY2M4MTRkMjMxMjUwM2FjY2FcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTg6MTk6NDQgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jIGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXFxuaW5kZXggMjVkNzdkNGExMDYxNC4uNzYzZjc5ODA2YmQ4ZiAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcXG4rKysgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcXG5AQCAtOTYzLDYgKzk2MywzNCBAQCBsb29rX3VwX2xvY2tfY2xhc3MoY29uc3Qgc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MpXFxuIFxcdHJldHVybiBOVUxMO1xcbiB9XFxuIFxcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgbG9ja19jbGFzc19jYWNoZV9pc192YWxpZChjb25zdCBzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgaW50IHN1YmNsYXNzKVxcbit7XFxuK1xcdHVuc2lnbmVkIGludCBjbGFzc19zdWJjbGFzcztcXG4rXFxuK1xcdGlmICghY2xhc3MpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseShjbGFzcyBcXHUwMDNjIGxvY2tfY2xhc3NlcyB8fCBjbGFzcyBcXHUwMDNlPSBsb2NrX2NsYXNzZXMgKyBNQVhfTE9DS0RFUF9LRVlTKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KCFhcmNoX3Rlc3RfYml0KGNsYXNzIC0gbG9ja19jbGFzc2VzLCBsb2NrX2NsYXNzZXNfaW5fdXNlKSkpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseSghbG9jay1cXHUwMDNla2V5KSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0Y2xhc3Nfc3ViY2xhc3MgPSBzdWJjbGFzcyA/IHN1YmNsYXNzIDogY2xhc3MtXFx1MDAzZXN1YmNsYXNzO1xcbitcXHRpZiAodW5saWtlbHkoY2xhc3Nfc3ViY2xhc3MgXFx1MDAzZT0gTUFYX0xPQ0tERVBfU1VCQ0xBU1NFUykpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFxuK1xcdGlmICh1bmxpa2VseShSRUFEX09OQ0UoY2xhc3MtXFx1MDAzZWtleSkgIT0gbG9jay1cXHUwMDNla2V5LVxcdTAwM2VzdWJrZXlzICsgY2xhc3Nfc3ViY2xhc3MpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcbitcXHRyZXR1cm4gdHJ1ZTtcXG4rfVxcbitcXG4gLypcXG4gICogU3RhdGljIGxvY2tzIGRvIG5vdCBoYXZlIHRoZWlyIGNsYXNzLWtleXMgeWV0IC0gZm9yIHRoZW0gdGhlIGtleSBpc1xcbiAgKiB0aGUgbG9jayBvYmplY3QgaXRzZWxmLiBJZiB0aGUgbG9jayBpcyBpbiB0aGUgcGVyIGNwdSBhcmVhLCB0aGVcXG5AQCAtMTM5NSw5ICsxNDIzLDkgQEAgcmVnaXN0ZXJfbG9ja19jbGFzcyhzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIHVuc2lnbmVkIGludCBzdWJjbGFzcywgaW50IGZvcmNlKVxcbiBcXG4gb3V0X3NldF9jbGFzc19jYWNoZTpcXG4gXFx0aWYgKCFzdWJjbGFzcyB8fCBmb3JjZSlcXG4tXFx0XFx0bG9jay1cXHUwMDNlY2xhc3NfY2FjaGVbMF0gPSBjbGFzcztcXG4rXFx0XFx0V1JJVEVfT05DRShsb2NrLVxcdTAwM2VjbGFzc19jYWNoZVswXSwgY2xhc3MpO1xcbiBcXHRlbHNlIGlmIChzdWJjbGFzcyBcXHUwMDNjIE5SX0xPQ0tERVBfQ0FDSElOR19DTEFTU0VTKVxcbi1cXHRcXHRsb2NrLVxcdTAwM2VjbGFzc19jYWNoZVtzdWJjbGFzc10gPSBjbGFzcztcXG4rXFx0XFx0V1JJVEVfT05DRShsb2NrLVxcdTAwM2VjbGFzc19jYWNoZVtzdWJjbGFzc10sIGNsYXNzKTtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIEhhc2ggY29sbGlzaW9uLCBkaWQgd2Ugc21va2Ugc29tZT8gV2UgZm91bmQgYSBjbGFzcyB3aXRoIGEgbWF0Y2hpbmdcXG5AQCAtNDk1Nyw3ICs0OTg1LDcgQEAgdm9pZCBsb2NrZGVwX2luaXRfbWFwX3R5cGUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBjb25zdCBjaGFyICpuYW1lLFxcbiBcXHRpbnQgaTtcXG4gXFxuIFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBOUl9MT0NLREVQX0NBQ0hJTkdfQ0xBU1NFUzsgaSsrKVxcbi1cXHRcXHRsb2NrLVxcdTAwM2VjbGFzc19jYWNoZVtpXSA9IE5VTEw7XFxuK1xcdFxcdFdSSVRFX09OQ0UobG9jay1cXHUwMDNlY2xhc3NfY2FjaGVbaV0sIE5VTEwpO1xcbiBcXG4gI2lmZGVmIENPTkZJR19MT0NLX1NUQVRcXG4gXFx0bG9jay1cXHUwMDNlY3B1ID0gcmF3X3NtcF9wcm9jZXNzb3JfaWQoKTtcXG5AQCAtNTAyMiwxMiArNTA1MCwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChfX2xvY2tkZXBfbm9fdHJhY2tfXyk7XFxuIHZvaWQgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm4oc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBsb2NrX2NtcF9mbiBjbXBfZm4sXFxuIFxcdFxcdFxcdCAgICAgbG9ja19wcmludF9mbiBwcmludF9mbilcXG4ge1xcbi1cXHRzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MgPSBsb2NrLVxcdTAwM2VjbGFzc19jYWNoZVswXTtcXG4rXFx0c3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gUkVBRF9PTkNFKGxvY2stXFx1MDAzZWNsYXNzX2NhY2hlWzBdKTtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4gXFxuIFxcdHJhd19sb2NhbF9pcnFfc2F2ZShmbGFncyk7XFxuIFxcdGxvY2tkZXBfcmVjdXJzaW9uX2luYygpO1xcbiBcXG4rXFx0aWYgKCFsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGxvY2ssIGNsYXNzLCAwKSlcXG4rXFx0XFx0Y2xhc3MgPSBOVUxMO1xcbitcXG4gXFx0aWYgKCFjbGFzcylcXG4gXFx0XFx0Y2xhc3MgPSByZWdpc3Rlcl9sb2NrX2NsYXNzKGxvY2ssIDAsIDApO1xcbiBcXG5AQCAtNTExOSw4ICs1MTUwLDExIEBAIHN0YXRpYyBpbnQgX19sb2NrX2FjcXVpcmUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsXFxuIFxcdGlmIChERUJVR19MT0NLU19XQVJOX09OKHN1YmNsYXNzIFxcdTAwM2U9IE1BWF9MT0NLREVQX1NVQkNMQVNTRVMpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuLVxcdGlmIChzdWJjbGFzcyBcXHUwMDNjIE5SX0xPQ0tERVBfQ0FDSElOR19DTEFTU0VTKVxcbi1cXHRcXHRjbGFzcyA9IGxvY2stXFx1MDAzZWNsYXNzX2NhY2hlW3N1YmNsYXNzXTtcXG4rXFx0aWYgKHN1YmNsYXNzIFxcdTAwM2MgTlJfTE9DS0RFUF9DQUNISU5HX0NMQVNTRVMpIHtcXG4rXFx0XFx0Y2xhc3MgPSBSRUFEX09OQ0UobG9jay1cXHUwMDNlY2xhc3NfY2FjaGVbc3ViY2xhc3NdKTtcXG4rXFx0XFx0aWYgKCFsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGxvY2ssIGNsYXNzLCBzdWJjbGFzcykpXFxuK1xcdFxcdFxcdGNsYXNzID0gTlVMTDtcXG4rXFx0fVxcbiBcXHQvKlxcbiBcXHQgKiBOb3QgY2FjaGVkP1xcbiBcXHQgKi9cXG5AQCAtNTMyMyw5ICs1MzU3LDkgQEAgc3RhdGljIG5vaW5zdHIgaW50IG1hdGNoX2hlbGRfbG9jayhjb25zdCBzdHJ1Y3QgaGVsZF9sb2NrICpobG9jayxcXG4gXFx0XFx0cmV0dXJuIDE7XFxuIFxcbiBcXHRpZiAoaGxvY2stXFx1MDAzZXJlZmVyZW5jZXMpIHtcXG4tXFx0XFx0Y29uc3Qgc3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gbG9jay1cXHUwMDNlY2xhc3NfY2FjaGVbMF07XFxuK1xcdFxcdGNvbnN0IHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IFJFQURfT05DRShsb2NrLVxcdTAwM2VjbGFzc19jYWNoZVswXSk7XFxuIFxcbi1cXHRcXHRpZiAoIWNsYXNzKVxcbitcXHRcXHRpZiAoIWxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWQobG9jaywgY2xhc3MsIDApKVxcbiBcXHRcXHRcXHRjbGFzcyA9IGxvb2tfdXBfbG9ja19jbGFzcyhsb2NrLCAwKTtcXG4gXFxuIFxcdFxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjE5OjQ2LjIyMDc1MTM4NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE1OTk0MzMyNjI0NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiUFJPVkVfTE9DS0lOR1wiLFxuICAgIFwiTE9DS0RFUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2NrZGVwIHN1YnN5c3RlbSB0byB2YWxpZGF0ZSBjYWNoZWQgbG9jayBjbGFzc2VzIHVzaW5nIGxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWQoKSBhbmQgYWRkcyBSRUFEX09OQ0UvV1JJVEVfT05DRSB0byBwcmV2ZW50IGRhdGEgcmFjZXMgb24gbG9jay1cXHUwMDNlY2xhc3NfY2FjaGUuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBhIGNvcmUga2VybmVsIGRlYnVnZ2luZyBtZWNoYW5pc20gdGhhdCBpcyByZWFjaGFibGUgdmlhIGFueSBsb2NrIGFjcXVpc2l0aW9uLiBGdXp6aW5nIHdpdGggUFJPVkVfTE9DS0lORyBlbmFibGVkIGlzIHJlcXVpcmVkIHRvIGV4ZXJjaXNlIHRoZXNlIHBhdGhzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBmMDUxY2NjYmExYmNjMmUzOTg1MTUyZmNjODE0ZDIzMTI1MDNhY2NhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBBdWcgMjQgMTg6MTk6NDQgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMgYi9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcbmluZGV4IDI1ZDc3ZDRhMTA2MTQuLjc2M2Y3OTgwNmJkOGYgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNcbisrKyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xuQEAgLTk2Myw2ICs5NjMsMzQgQEAgbG9va191cF9sb2NrX2NsYXNzKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzKVxuIFx0cmV0dXJuIE5VTEw7XG4gfVxuIFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgYm9vbCBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jayxcbitcdFx0XHRcdFx0XHQgICAgICBjb25zdCBzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MsXG4rXHRcdFx0XHRcdFx0ICAgICAgdW5zaWduZWQgaW50IHN1YmNsYXNzKVxuK3tcbitcdHVuc2lnbmVkIGludCBjbGFzc19zdWJjbGFzcztcbitcbitcdGlmICghY2xhc3MpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICh1bmxpa2VseShjbGFzcyBcdTAwM2MgbG9ja19jbGFzc2VzIHx8IGNsYXNzIFx1MDAzZT0gbG9ja19jbGFzc2VzICsgTUFYX0xPQ0tERVBfS0VZUykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICh1bmxpa2VseSghYXJjaF90ZXN0X2JpdChjbGFzcyAtIGxvY2tfY2xhc3NlcywgbG9ja19jbGFzc2VzX2luX3VzZSkpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAodW5saWtlbHkoIWxvY2stXHUwMDNla2V5KSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0Y2xhc3Nfc3ViY2xhc3MgPSBzdWJjbGFzcyA/IHN1YmNsYXNzIDogY2xhc3MtXHUwMDNlc3ViY2xhc3M7XG4rXHRpZiAodW5saWtlbHkoY2xhc3Nfc3ViY2xhc3MgXHUwMDNlPSBNQVhfTE9DS0RFUF9TVUJDTEFTU0VTKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHVubGlrZWx5KFJFQURfT05DRShjbGFzcy1cdTAwM2VrZXkpICE9IGxvY2stXHUwMDNla2V5LVx1MDAzZXN1YmtleXMgKyBjbGFzc19zdWJjbGFzcykpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdHJldHVybiB0cnVlO1xuK31cbitcbiAvKlxuICAqIFN0YXRpYyBsb2NrcyBkbyBub3QgaGF2ZSB0aGVpciBjbGFzcy1rZXlzIHlldCAtIGZvciB0aGVtIHRoZSBrZXkgaXNcbiAgKiB0aGUgbG9jayBvYmplY3QgaXRzZWxmLiBJZiB0aGUgbG9jayBpcyBpbiB0aGUgcGVyIGNwdSBhcmVhLCB0aGVcbkBAIC0xMzk1LDkgKzE0MjMsOSBAQCByZWdpc3Rlcl9sb2NrX2NsYXNzKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLCBpbnQgZm9yY2UpXG4gXG4gb3V0X3NldF9jbGFzc19jYWNoZTpcbiBcdGlmICghc3ViY2xhc3MgfHwgZm9yY2UpXG4tXHRcdGxvY2stXHUwMDNlY2xhc3NfY2FjaGVbMF0gPSBjbGFzcztcbitcdFx0V1JJVEVfT05DRShsb2NrLVx1MDAzZWNsYXNzX2NhY2hlWzBdLCBjbGFzcyk7XG4gXHRlbHNlIGlmIChzdWJjbGFzcyBcdTAwM2MgTlJfTE9DS0RFUF9DQUNISU5HX0NMQVNTRVMpXG4tXHRcdGxvY2stXHUwMDNlY2xhc3NfY2FjaGVbc3ViY2xhc3NdID0gY2xhc3M7XG4rXHRcdFdSSVRFX09OQ0UobG9jay1cdTAwM2VjbGFzc19jYWNoZVtzdWJjbGFzc10sIGNsYXNzKTtcbiBcbiBcdC8qXG4gXHQgKiBIYXNoIGNvbGxpc2lvbiwgZGlkIHdlIHNtb2tlIHNvbWU/IFdlIGZvdW5kIGEgY2xhc3Mgd2l0aCBhIG1hdGNoaW5nXG5AQCAtNDk1Nyw3ICs0OTg1LDcgQEAgdm9pZCBsb2NrZGVwX2luaXRfbWFwX3R5cGUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBjb25zdCBjaGFyICpuYW1lLFxuIFx0aW50IGk7XG4gXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9MT0NLREVQX0NBQ0hJTkdfQ0xBU1NFUzsgaSsrKVxuLVx0XHRsb2NrLVx1MDAzZWNsYXNzX2NhY2hlW2ldID0gTlVMTDtcbitcdFx0V1JJVEVfT05DRShsb2NrLVx1MDAzZWNsYXNzX2NhY2hlW2ldLCBOVUxMKTtcbiBcbiAjaWZkZWYgQ09ORklHX0xPQ0tfU1RBVFxuIFx0bG9jay1cdTAwM2VjcHUgPSByYXdfc21wX3Byb2Nlc3Nvcl9pZCgpO1xuQEAgLTUwMjIsMTIgKzUwNTAsMTUgQEAgRVhQT1JUX1NZTUJPTF9HUEwoX19sb2NrZGVwX25vX3RyYWNrX18pO1xuIHZvaWQgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm4oc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCBsb2NrX2NtcF9mbiBjbXBfZm4sXG4gXHRcdFx0ICAgICBsb2NrX3ByaW50X2ZuIHByaW50X2ZuKVxuIHtcbi1cdHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IGxvY2stXHUwMDNlY2xhc3NfY2FjaGVbMF07XG4rXHRzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MgPSBSRUFEX09OQ0UobG9jay1cdTAwM2VjbGFzc19jYWNoZVswXSk7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFxuIFx0cmF3X2xvY2FsX2lycV9zYXZlKGZsYWdzKTtcbiBcdGxvY2tkZXBfcmVjdXJzaW9uX2luYygpO1xuIFxuK1x0aWYgKCFsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGxvY2ssIGNsYXNzLCAwKSlcbitcdFx0Y2xhc3MgPSBOVUxMO1xuK1xuIFx0aWYgKCFjbGFzcylcbiBcdFx0Y2xhc3MgPSByZWdpc3Rlcl9sb2NrX2NsYXNzKGxvY2ssIDAsIDApO1xuIFxuQEAgLTUxMTksOCArNTE1MCwxMSBAQCBzdGF0aWMgaW50IF9fbG9ja19hY3F1aXJlKHN0cnVjdCBsb2NrZGVwX21hcCAqbG9jaywgdW5zaWduZWQgaW50IHN1YmNsYXNzLFxuIFx0aWYgKERFQlVHX0xPQ0tTX1dBUk5fT04oc3ViY2xhc3MgXHUwMDNlPSBNQVhfTE9DS0RFUF9TVUJDTEFTU0VTKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4tXHRpZiAoc3ViY2xhc3MgXHUwMDNjIE5SX0xPQ0tERVBfQ0FDSElOR19DTEFTU0VTKVxuLVx0XHRjbGFzcyA9IGxvY2stXHUwMDNlY2xhc3NfY2FjaGVbc3ViY2xhc3NdO1xuK1x0aWYgKHN1YmNsYXNzIFx1MDAzYyBOUl9MT0NLREVQX0NBQ0hJTkdfQ0xBU1NFUykge1xuK1x0XHRjbGFzcyA9IFJFQURfT05DRShsb2NrLVx1MDAzZWNsYXNzX2NhY2hlW3N1YmNsYXNzXSk7XG4rXHRcdGlmICghbG9ja19jbGFzc19jYWNoZV9pc192YWxpZChsb2NrLCBjbGFzcywgc3ViY2xhc3MpKVxuK1x0XHRcdGNsYXNzID0gTlVMTDtcbitcdH1cbiBcdC8qXG4gXHQgKiBOb3QgY2FjaGVkP1xuIFx0ICovXG5AQCAtNTMyMyw5ICs1MzU3LDkgQEAgc3RhdGljIG5vaW5zdHIgaW50IG1hdGNoX2hlbGRfbG9jayhjb25zdCBzdHJ1Y3QgaGVsZF9sb2NrICpobG9jayxcbiBcdFx0cmV0dXJuIDE7XG4gXG4gXHRpZiAoaGxvY2stXHUwMDNlcmVmZXJlbmNlcykge1xuLVx0XHRjb25zdCBzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MgPSBsb2NrLVx1MDAzZWNsYXNzX2NhY2hlWzBdO1xuK1x0XHRjb25zdCBzdHJ1Y3QgbG9ja19jbGFzcyAqY2xhc3MgPSBSRUFEX09OQ0UobG9jay1cdTAwM2VjbGFzc19jYWNoZVswXSk7XG4gXG4tXHRcdGlmICghY2xhc3MpXG4rXHRcdGlmICghbG9ja19jbGFzc19jYWNoZV9pc192YWxpZChsb2NrLCBjbGFzcywgMCkpXG4gXHRcdFx0Y2xhc3MgPSBsb29rX3VwX2xvY2tfY2xhc3MobG9jaywgMCk7XG4gXG4gXHRcdC8qXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoxOTo0Ni4yMjA3NTI3NTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyMTExMTI0OTU4MzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIExvY2tkZXAgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQncyB0aW5rZXJpbmcgd2l0aCBga2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBhcmVhLCByaWdodD8gV2UncmUgdGFsa2luZyBhYm91dCBjb3JlIGtlcm5lbCBsb2NraW5nLCBzcGVjaWZpY2FsbHkgdGhlIGxvY2sgZGVwZW5kZW5jeSBjaGVja2VyLlxuXG5GaXJzdCBvZmYsIGl0IHNlZW1zIGxpa2UgdGhlIHByaW1hcnkgY2hhbmdlcyBpbnZvbHZlIGludHJvZHVjaW5nIGEgbmV3IGZ1bmN0aW9uLCBgbG9ja19jbGFzc19jYWNoZV9pc192YWxpZGAsIGFuZCBpbmNvcnBvcmF0aW5nIGBSRUFEX09OQ0VgL2BXUklURV9PTkNFYCBmb3IgYGxvY2stXHUwMDNlY2xhc3NfY2FjaGVgLiBUaGF0IHN1Z2dlc3RzIHRoZXkncmUgYWRkcmVzc2luZyBhIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbiBvciBpbnZhbGlkIGNhY2hlIHVzYWdlIHdpdGhpbiB0aGUgbG9jayBjbGFzcyBjYWNoaW5nIG1lY2hhbmlzbSwgd2hpY2ggaXMgZ29vZC4gV2UgYXJlIHRhbGtpbmcgYWJvdXQgYSBzYWZldHkgaW1wcm92ZW1lbnQgaGVyZS5cblxuRnVuY3Rpb25hbGx5LCB5ZXMsIHRoaXMgZGVmaW5pdGVseSBhbHRlcnMgYmVoYXZpb3IuIEl0IGFkZHMgdmFsaWRhdGlvbi4gU28sIHRoZSBuZXh0IHF1ZXN0aW9uIGlzLCBzaG91bGQgd2UgZnV6eiBpdD8gQWJzb2x1dGVseSEgVGhpcyB0b3VjaGVzIGNvcmUga2VybmVsIGNvZGUsIGFjY2Vzc2libGUgdGhyb3VnaCAqYW55KiBzeXNjYWxsIHRoYXQgYWNxdWlyZXMgbG9ja3MuIFRoYXQgbWVhbnMgdGhlIGF0dGFjayBzdXJmYWNlIGlzIGh1Z2UuIE5vdywgdGhlIGNhdGNoIGlzIHRoYXQgbG9ja2RlcCBpcyBwcmltYXJpbHkgYSAqZGVidWdnaW5nKiB0b29sLCBlbmFibGVkIGJ5IGBDT05GSUdfTE9DS0RFUGAgYW5kIGBDT05GSUdfUFJPVkVfTE9DS0lOR2AsIG1lYW5pbmcgaXQgbWF5IGJlIGRpZmZpY3VsdCB0byB0cmlnZ2VyIHRoaXMgY29kZSBwYXRoLlxuXG5BbHJpZ2h0LCB3aGF0IHNwZWNpZmljYWxseSB0byBmb2N1cyBvbj8gVGhlIHBhdGNoIG1vZGlmaWVzIGBsb2NrZGVwX3NldF9sb2NrX2NtcF9mbmAsIGBfX2xvY2tfYWNxdWlyZWAsIGFuZCBgbWF0Y2hfaGVsZF9sb2NrYC4gYF9fbG9ja19hY3F1aXJlYCBpcyBhICp2ZXJ5KiBob3QgcGF0aCwgb2J2aW91c2x5LiBgbWF0Y2hfaGVsZF9sb2NrYCBpcyBhbHNvIHByZXR0eSBoaWdoLXRyYWZmaWMuIEJ1dCB3YWl04oCmIHRoZSBpbnN0cnVjdGlvbnMgc2F5IHRvIGF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLiBUaGF0J3MgYSBnb29kIHBvaW50ISBMb2NraW5nIGZ1bmN0aW9ucyBhcmUsIGJ5IHRoZWlyIHZlcnkgbmF0dXJlLCBnZW5lcmljIGFuZCBmcmVxdWVudGx5IGNhbGxlZC5cblxuU28sIGFtIEkgc3VwcG9zZWQgdG8gbGVhdmUgdGhlIFwiRm9jdXNTeW1ib2xzXCIgYmxhbms/IExldCdzIGNoZWNrIGZvciBsZXNzIGhvdC1wYXRoIGZ1bmN0aW9ucy4gQWhhLCBgbG9ja2RlcF9zZXRfbG9ja19jbXBfZm5gIGlzIGV4cG9ydGVkIGFuZCB1c2VkIGJ5IHNvbWUgZHJpdmVycy9zdWJzeXN0ZW1zLiBUaGF0J3MgYSBzb2xpZCBjYW5kaWRhdGUuIExldCdzIGRpZyBpbnRvIHdoZXJlIGVsc2UgYGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuYCBpcyBiZWluZyB1c2VkLCBiZWNhdXNlIGlmIGl0J3MgdXNlZCBtb3JlIHRoYW4gb25jZSwgaXQgc3VnZ2VzdHMgdGhlcmUncyBzb21lIHVzZWZ1bCwgdGFyZ2V0ZWQgZm9jdXMgZm9yIGZ1enppbmcsIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNjUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoyMzoxNy4zMzMyNTE2NDVaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MTk3MTY2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJsb2NrZGVwX3NldF9sb2NrX2NtcF9mblwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L2xvY2tkZXAuaD0zODY9ZXh0ZXJuIGludCBsb2NrZGVwX2lzX2hlbGQoY29uc3Qgdm9pZCAqKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTQxMi0jaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkdcXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo0MTM6dm9pZCBsb2NrZGVwX3NldF9sb2NrX2NtcF9mbihzdHJ1Y3QgbG9ja2RlcF9tYXAgKiwgbG9ja19jbXBfZm4sIGxvY2tfcHJpbnRfZm4pO1xcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTQxNC1cXG5pbmNsdWRlL2xpbnV4L2xvY2tkZXAuaDo0MTU6I2RlZmluZSBsb2NrX3NldF9jbXBfZm4obG9jaywgLi4uKVxcdGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuKFxcdTAwMjYobG9jayktXFx1MDAzZWRlcF9tYXAsIF9fVkFfQVJHU19fKVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oLTQxNi0jZWxzZVxcbi0tXFxua2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jPTUwNDc9RVhQT1JUX1NZTUJPTF9HUEwoX19sb2NrZGVwX25vX3RyYWNrX18pO1xcbi0tXFxua2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jLTUwNDktI2lmZGVmIENPTkZJR19QUk9WRV9MT0NLSU5HXFxua2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jOjUwNTA6dm9pZCBsb2NrZGVwX3NldF9sb2NrX2NtcF9mbihzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIGxvY2tfY21wX2ZuIGNtcF9mbixcXG5rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMtNTA1MS1cXHRcXHRcXHQgICAgIGxvY2tfcHJpbnRfZm4gcHJpbnRfZm4pXFxuLS1cXG5rZXJuZWwvbG9ja2luZy9sb2NrZGVwLmMtNTA3NS19XFxua2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jOjUwNzY6RVhQT1JUX1NZTUJPTF9HUEwobG9ja2RlcF9zZXRfbG9ja19jbXBfZm4pO1xcbmtlcm5lbC9sb2NraW5nL2xvY2tkZXAuYy01MDc3LSNlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODoyMzoxOS4yMDUyMjcyMzVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTIzNzc3MDM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipMb2NrZGVwIEZ1bmN0aW9uIFVzYWdlIEFuYWx5c2lzKipcblxuT2theSwgc28gYGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuYCBpcyBleHBvcnRlZCwgd2hpY2ggaW1tZWRpYXRlbHkgZmxhZ3MgaXQgYXMgc29tZXRoaW5nIHBvdGVudGlhbGx5IGludGVyZXN0aW5nLCBidXQgaXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyBob3cgcHJldmFsZW50IGl0cyB1c2UgYWN0dWFsbHkgaXMuIFRoZSBmYWN0IHRoYXQgaXQncyBvbmx5IGRlZmluZWQgaW4gYGxvY2tkZXAuaGAgYW5kIGBsb2NrZGVwLmNgIG1ha2VzIG1lIHN1c3BlY3QgaXQgbWlnaHQgYmUgaW50ZXJuYWwgdG8gdGhlIGxvY2tkZXAgc3Vic3lzdGVtLCBidXQgdGhhdCBleHBvcnQgZGVjbGFyYXRpb24gc3VnZ2VzdHMgb3RoZXJ3aXNlLiBXYWl0IGEgc2Vjb25kLi4uIGlzbid0IHRoYXQgZnVuY3Rpb24gYWN0dWFsbHkgdXNlZCBpbmRpcmVjdGx5IHRocm91Z2ggYGxvY2tfc2V0X2NtcF9mbmA/IFRoYXQgc2VlbXMgbGlrZWx5LiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBteSBzZWFyY2ggb24gYGxvY2tfc2V0X2NtcF9mbmAgYW5kIHNlZSB3aGVyZSB0aGF0J3MgY2FsbGVkIGluc3RlYWQuIFRoYXQnbGwgcHJvYmFibHkgdGVsbCB0aGUgcmVhbCBzdG9yeS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMxNCwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjIzOjIyLjMyOTAwNTg5WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NDAyMzYyMzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibG9ja19zZXRfY21wX2ZuXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbWQvYmNhY2hlL2J0cmVlLmM9NTgxPXN0YXRpYyBzdHJ1Y3QgYnRyZWUgKm1jYV9idWNrZXRfYWxsb2Moc3RydWN0IGNhY2hlX3NldCAqYyxcXG4tLVxcbmRyaXZlcnMvbWQvYmNhY2hlL2J0cmVlLmMtNTkzLVxcdGluaXRfcndzZW0oXFx1MDAyNmItXFx1MDAzZWxvY2spO1xcbmRyaXZlcnMvbWQvYmNhY2hlL2J0cmVlLmM6NTk0OlxcdGxvY2tfc2V0X2NtcF9mbihcXHUwMDI2Yi1cXHUwMDNlbG9jaywgYnRyZWVfbG9ja19jbXBfZm4sIGJ0cmVlX2xvY2tfcHJpbnRfZm4pO1xcbmRyaXZlcnMvbWQvYmNhY2hlL2J0cmVlLmMtNTk1LVxcdG11dGV4X2luaXQoXFx1MDAyNmItXFx1MDAzZXdyaXRlX2xvY2spO1xcbi0tXFxuZnMvcGlwZS5jPTg3NT1zdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvICphbGxvY19waXBlX2luZm8odm9pZClcXG4tLVxcbmZzL3BpcGUuYy05MTEtXFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2cGlwZS1cXHUwMDNlbXV0ZXgpO1xcbmZzL3BpcGUuYzo5MTI6XFx0XFx0bG9ja19zZXRfY21wX2ZuKFxcdTAwMjZwaXBlLVxcdTAwM2VtdXRleCwgcGlwZV9sb2NrX2NtcF9mbiwgTlVMTCk7XFxuZnMvcGlwZS5jLTkxMy1cXHRcXHRyZXR1cm4gcGlwZTtcXG4tLVxcbmZzL3hmcy9saWJ4ZnMveGZzX3J0Z3JvdXAuYz0zMjM9eGZzX3J0Z2lub2RlX2xvY2tkZXBfc2V0dXAoXFxuLS1cXG5mcy94ZnMvbGlieGZzL3hmc19ydGdyb3VwLmMtMzI5LVxcdFxcdFxcdHR5cGUpO1xcbmZzL3hmcy9saWJ4ZnMveGZzX3J0Z3JvdXAuYzozMzA6XFx0bG9ja19zZXRfY21wX2ZuKFxcdTAwMjZpcC1cXHUwMDNlaV9sb2NrLCB4ZnNfcnRnaW5vZGVfaWxvY2tfY21wX2ZuLFxcbmZzL3hmcy9saWJ4ZnMveGZzX3J0Z3JvdXAuYy0zMzEtXFx0XFx0XFx0eGZzX3J0Z2lub2RlX2lsb2NrX3ByaW50X2ZuKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oPTQxMz12b2lkIGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuKHN0cnVjdCBsb2NrZGVwX21hcCAqLCBsb2NrX2NtcF9mbiwgbG9ja19wcmludF9mbik7XFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNDE0LVxcbmluY2x1ZGUvbGludXgvbG9ja2RlcC5oOjQxNTojZGVmaW5lIGxvY2tfc2V0X2NtcF9mbihsb2NrLCAuLi4pXFx0bG9ja2RlcF9zZXRfbG9ja19jbXBfZm4oXFx1MDAyNihsb2NrKS1cXHUwMDNlZGVwX21hcCwgX19WQV9BUkdTX18pXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNDE2LSNlbHNlXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmg6NDE3OiNkZWZpbmUgbG9ja19zZXRfY21wX2ZuKGxvY2ssIC4uLilcXHRkbyB7IH0gd2hpbGUgKDApXFxuaW5jbHVkZS9saW51eC9sb2NrZGVwLmgtNDE4LSNlbmRpZlxcbi0tXFxuaW5jbHVkZS9uZXQvbmV0ZGV2X2xvY2suaD0xMTM9c3RhdGljIGlubGluZSBpbnQgbmV0ZGV2X2xvY2tfY21wX2ZuKGNvbnN0IHN0cnVjdCBsb2NrZGVwX21hcCAqYSxcXG4tLVxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmgtMTM5LVxcdFxcdFxcdCAgXFx1MDAyNmRldl9pbnN0YW5jZV9sb2NrX2tleSk7XFx0XFx0XFxcXFxcbmluY2x1ZGUvbmV0L25ldGRldl9sb2NrLmg6MTQwOlxcdGxvY2tfc2V0X2NtcF9mbihcXHUwMDI2ZGV2LVxcdTAwM2Vsb2NrLCBuZXRkZXZfbG9ja19jbXBfZm4sIE5VTEwpO1xcdFxcXFxcXG5pbmNsdWRlL25ldC9uZXRkZXZfbG9jay5oLTE0MS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgKGRldiktXFx1MDAzZW51bV90eF9xdWV1ZXM7IGkrKylcXHRcXHRcXFxcXFxuLS1cXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM9NDAzPXN0YXRpYyBfX25ldF9pbml0IGludCBwcmVpbml0X25ldChzdHJ1Y3QgbmV0ICpuZXQsIHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucylcXG4tLVxcbm5ldC9jb3JlL25ldF9uYW1lc3BhY2UuYy00MjQtXFx0bXV0ZXhfaW5pdChcXHUwMDI2bmV0LVxcdTAwM2VydG5sX211dGV4KTtcXG5uZXQvY29yZS9uZXRfbmFtZXNwYWNlLmM6NDI1OlxcdGxvY2tfc2V0X2NtcF9mbihcXHUwMDI2bmV0LVxcdTAwM2VydG5sX211dGV4LCBydG5sX25ldF9sb2NrX2NtcF9mbiwgTlVMTCk7XFxubmV0L2NvcmUvbmV0X25hbWVzcGFjZS5jLTQyNi1cXHRJTklUX1dPUksoXFx1MDAyNm5ldC1cXHUwMDNlcnRubF93b3JrLCBydG5sX25ldF93b3JrX2Z1bmMpO1xcbi0tXFxubmV0L3VuaXgvYWZfdW5peC5jPTEwOTQ9c3RhdGljIHN0cnVjdCBzb2NrICp1bml4X2NyZWF0ZTEoc3RydWN0IG5ldCAqbmV0LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQga2VybiwgaW50IHR5cGUpXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMTEyMy1cXHRzay1cXHUwMDNlc2tfZGVzdHJ1Y3RcXHRcXHQ9IHVuaXhfc29ja19kZXN0cnVjdG9yO1xcbm5ldC91bml4L2FmX3VuaXguYzoxMTI0OlxcdGxvY2tfc2V0X2NtcF9mbihcXHUwMDI2c2stXFx1MDAzZXNrX3JlY2VpdmVfcXVldWUubG9jaywgdW5peF9yZWN2cV9sb2NrX2NtcF9mbiwgTlVMTCk7XFxubmV0L3VuaXgvYWZfdW5peC5jLTExMjUtXFxuLS1cXG5uZXQvdW5peC9hZl91bml4LmMtMTEzMS1cXHRzcGluX2xvY2tfaW5pdChcXHUwMDI2dS1cXHUwMDNlbG9jayk7XFxubmV0L3VuaXgvYWZfdW5peC5jOjExMzI6XFx0bG9ja19zZXRfY21wX2ZuKFxcdTAwMjZ1LVxcdTAwM2Vsb2NrLCB1bml4X3N0YXRlX2xvY2tfY21wX2ZuLCBOVUxMKTtcXG5uZXQvdW5peC9hZl91bml4LmMtMTEzMy1cXHRtdXRleF9pbml0KFxcdTAwMjZ1LVxcdTAwM2Vpb2xvY2spOyAvKiBzaW5nbGUgdGFzayByZWFkaW5nIGxvY2sgKi9cXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYz0zODEzPXN0YXRpYyBpbnQgX19uZXRfaW5pdCB1bml4X25ldF9pbml0KHN0cnVjdCBuZXQgKm5ldClcXG4tLVxcbm5ldC91bml4L2FmX3VuaXguYy0zODM3LVxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZuZXQtXFx1MDAzZXVueC50YWJsZS5sb2Nrc1tpXSk7XFxubmV0L3VuaXgvYWZfdW5peC5jOjM4Mzg6XFx0XFx0bG9ja19zZXRfY21wX2ZuKFxcdTAwMjZuZXQtXFx1MDAzZXVueC50YWJsZS5sb2Nrc1tpXSwgdW5peF90YWJsZV9sb2NrX2NtcF9mbiwgTlVMTCk7XFxubmV0L3VuaXgvYWZfdW5peC5jLTM4MzktXFx0XFx0SU5JVF9ITElTVF9IRUFEKFxcdTAwMjZuZXQtXFx1MDAzZXVueC50YWJsZS5idWNrZXRzW2ldKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6MjM6MjMuOTY5MjQ4MTA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA2MjUwNjE4Njc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IFJlYXNvbmluZyBvbiBPcHRpbWl6aW5nIExvY2tkZXAgU3ltYm9sIEFuYWx5c2lzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgYGxvY2tfc2V0X2NtcF9mbmAgYW5kIHdoZXJlIGl0J3MgdXNlZCDigJMgcGlwZXMsIFVuaXggc29ja2V0cywgYW5kIG5ldCBuYW1lc3BhY2VzLiBUaGF0IG1lYW5zIGBsb2NrZGVwX3NldF9sb2NrX2NtcF9mbmAgaXMgZGVmaW5pdGVseSByZWFjaGFibGUuIEhvd2V2ZXIsIHRoaXMgcGF0Y2ggaXMgcHJpbWFyaWx5IGFib3V0IG1vZGlmaWNhdGlvbnMgKndpdGhpbiogdGhlIGxvY2tkZXAgaW50ZXJuYWxzIHRoZW1zZWx2ZXMuIEl0J3Mgbm90IGEgcGVyZm9ybWFuY2UtY3JpdGljYWwgZnVuY3Rpb247IGl0J3MgY2FsbGVkIGR1cmluZyB0aGUgKmluaXRpYWxpemF0aW9uKiBvZiB0aGVzZSBzdHJ1Y3R1cmVzLCBub3QgaW4gYW55IGhvdCBwYXRoLiBgX19sb2NrX2FjcXVpcmVgIGFuZCBgbWF0Y2hfaGVsZF9sb2NrYCwgKnRob3NlKiBhcmUgdGhlIHJlYWxseSBob3QgYXJlYXMuXG5cblNvLCBJIGNvdWxkIGluY2x1ZGUgYGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuYCBpbiBGb2N1c1N5bWJvbHMsIGJ1dCBJJ20gdGhpbmtpbmcgbWF5YmUgSSAqc2hvdWxkbid0Ki4gSWYgSSBpbmNsdWRlIGl0LCBpdCBjb3VsZCBwb3RlbnRpYWxseSBza2V3IHRoZSBmdXp6aW5nIGVmZm9ydHMgdG93YXJkcyB0aGUgY3JlYXRpb24gb2YgcGlwZXMgb3IgVW5peCBzb2NrZXRzLCB3aGVuIHRoZSBhY3R1YWwgYnVnIEknbSB0YXJnZXRpbmcgaXMgZGVlcGVyLCB3aXRoaW4gbG9ja2RlcC4gSSB3YW50IHRvIGtlZXAgdGhlIGZ1enppbmcgbW9yZSBnZW5lcmFsIHRvIGV4cG9zZSB0aGUgbG9ja2RlcCBpc3N1ZS4gQnV0IHRoZW4gYWdhaW4sIGlmIEkgKmRvbid0KiBpbmNsdWRlIGl0LCBzeXprYWxsZXIgd2lsbCBqdXN0IGZ1enogbm9ybWFsbHkuXG5cbldhaXQsIHRoZSBrZXkgaXMgdGhlIGNvbmZpZ3VyYXRpb24uIExvY2tkZXAgaXMgZW5hYmxlZCBieSBgQ09ORklHX1BST1ZFX0xPQ0tJTkdgIGFuZCBgQ09ORklHX0xPQ0tERVBgLiBPa2F5LCB0aGF0J3Mgd2hhdCBJIG5lZWQgdG8gZm9jdXMgb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhvc2UgdHdvIGNvbmZpZ3VyYXRpb25zIGFyZSBpbmNsdWRlZCBpbiBFbmFibGVDb25maWdzLiBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGF0IGBDT05GSUdfUFJPVkVfTE9DS0lOR2AgaXMgdGhlIGNvcnJlY3QgY29uZmlndXJhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NTgzMywiT3V0cHV0VG9rZW5zIjoyMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozMzozMC4yMTk4NzA4NzRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYwMTU1ODQ5NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFJPVkVfTE9DS0lOR1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0xNDE2PWNvbmZpZyBMT0NLX0RFQlVHR0lOR19TVVBQT1JUXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNDIwLVxcbmxpYi9LY29uZmlnLmRlYnVnOjE0MjE6Y29uZmlnIFBST1ZFX0xPQ0tJTkdcXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNDIyLVxcdGJvb2wgXFxcIkxvY2sgZGVidWdnaW5nOiBwcm92ZSBsb2NraW5nIGNvcnJlY3RuZXNzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODozMzozMS44MjE0MzU4ODFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjI5MDY0MTEyOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkxvY2tpbmcgQ29uZmlndXJhdGlvbiBJbnZlc3RpZ2F0aW9uKipcblxuQWxyaWdodCwgc28gYFBST1ZFX0xPQ0tJTkdgIGlzIGRlZmluaXRlbHkgdGhlIGtleSBjb25maWd1cmF0aW9uIGl0ZW0gd2UncmUgZGVhbGluZyB3aXRoIGhlcmUsIHRoYXQncyBjbGVhci4gQnV0IEknbSBhIGJpdCBjdXJpb3VzLCBhcmUgdGhlcmUgYW55ICpvdGhlciogcmVsYXRlZCBjb25maWdzIHRoYXQgbWlnaHQgYmUgcmVsZXZhbnQ/IFNvbWV0aGluZyBsaWtlIGBERUJVR19MT0NLX0FMTE9DYCwgcGVyaGFwcz8gSXQncyBhbHdheXMgZ29vZCB0byBoYXZlIHRoZSBmdWxsIHBpY3R1cmUuXG5cblRvIGdldCBhIGRlZmluaXRpdmUgYW5zd2VyIGFuZCB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMsIEknbSBnb2luZyB0byBkaXZlIHN0cmFpZ2h0IGludG8gYGtlcm5lbC9sb2NraW5nL2xvY2tkZXAuY2AuIFRoYXQncyB0aGUgc291cmNlIGNvZGUgZm9yIHRoZSBsb2NrIGRlcGVuZGVuY3kgY2hlY2tlciwgYW5kIGl0IHNob3VsZCByZXZlYWwgZXhhY3RseSB3aGljaCBjb25maWd1cmF0aW9ucyBhcmUgdGllZCB0byBpdHMgZnVuY3Rpb25hbGl0eS4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB3aGF0IG90aGVyIGxldmVycyB3ZSBjYW4gcHVsbCB0byBnZXQgdGhlIGV4YWN0IGxvY2sgZGVidWdnaW5nIGZlYXR1cmVzIHdlIG5lZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY1MTIsIk91dHB1dFRva2VucyI6MjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0MDozNC43Mjc4NDkzNTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzNDM1MTA2MTMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqLVxcXFwkXFxcXChDT05GSUdfLipsb2NrZGVwLm9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL2xvY2tpbmcvTWFrZWZpbGU9MjQ9b2JqLSQoQ09ORklHX0RFQlVHX01VVEVYRVMpICs9IG11dGV4LWRlYnVnLm9cXG5rZXJuZWwvbG9ja2luZy9NYWtlZmlsZToyNTpvYmotJChDT05GSUdfTE9DS0RFUCkgKz0gbG9ja2RlcC5vXFxua2VybmVsL2xvY2tpbmcvTWFrZWZpbGUtMjYtaWZlcSAoJChDT05GSUdfUFJPQ19GUykseSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6NDA6MzcuMDcxMzY1OTQyWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1NjEzNTI4NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkxvY2tkZXAgRGVlcCBEaXZlKipcblxuUmlnaHQsIHNvIEknbSB0aGlua2luZyBhYm91dCBsb2NrIGRlYnVnZ2luZy4uLiBhbmQgdGhlIGNydWNpYWwgc3RhcnRpbmcgcG9pbnQgaXMgYENPTkZJR19MT0NLREVQYC4gVGhhdCdzIHRoZSBiaWcgb25lLiBJdCBsb29rcyBsaWtlIGBDT05GSUdfUFJPVkVfTE9DS0lOR2AgZGlyZWN0bHkgc2VsZWN0cyBgQ09ORklHX0xPQ0tERVBgLCBtYWtpbmcgaXQgcHJldHR5IGNlbnRyYWwgdG8gdGhlIHdob2xlIGxvY2sgdmFsaWRhdGlvbiBzY2hlbWUuIE1ha2VzIHNlbnNlLiBOb3csIGxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gYFBST1ZFX0xPQ0tJTkdgLiBJJ2xsIGdvIHN0cmFpZ2h0IHRvIGBsaWIvS2NvbmZpZy5kZWJ1Z2AgYW5kIHNlZSB3aGF0IGl0IHJldmVhbHMuIFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBjbGVhcmVyIHBpY3R1cmUgb2YgaG93IHRoaXMgaXMgYWxsIHdpcmVkIHRvZ2V0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODQzLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6NDA6NDEuNjMyNzIwNzczWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTM3MTYwNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFJPVkVfTE9DS0lOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Zz0xNDE2PWNvbmZpZyBMT0NLX0RFQlVHR0lOR19TVVBQT1JUXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNDIwLVxcbmxpYi9LY29uZmlnLmRlYnVnOjE0MjE6Y29uZmlnIFBST1ZFX0xPQ0tJTkdcXG5saWIvS2NvbmZpZy5kZWJ1Zy0xNDIyLVxcdGJvb2wgXFxcIkxvY2sgZGVidWdnaW5nOiBwcm92ZSBsb2NraW5nIGNvcnJlY3RuZXNzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0MDo0MS42ODIwOTcxMjdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzMxMjk0ODI5OTc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIERlYnVnZ2luZyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgc29tZXRoaW5nIHJlbGF0ZWQgdG8gdGhlIGRlYnVnZ2luZyBjb25maWd1cmF0aW9uIG9mIHRoaXMgcHJvamVjdC4gTXkgaW50dWl0aW9uIHN1Z2dlc3RzIHRoZSBpc3N1ZSBtaWdodCBiZSByZWxhdGVkIHRvIGEgc3BlY2lmaWMgS2NvbmZpZyBvcHRpb24sIGFuZCBiYXNlZCBvbiBleHBlcmllbmNlLCBgbGliL0tjb25maWcuZGVidWdgIGlzIHVzdWFsbHkgdGhlIHJpZ2h0IHBsYWNlIHRvIGxvb2sgZm9yIHRoYXQgc29ydCBvZiB0aGluZy4gSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gYXJvdW5kIGxpbmUgMTQyMS4gVGhhdCdzIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludDsgaXQncyBsaWtlbHkgd2hlcmUgdGhlIG1vcmUgc3BlY2lmaWMgZGVidWcgb3B0aW9ucyBtaWdodCBiZSBkZWZpbmVkIG9yIHdoZXJlIHJlbGF0ZWQgZGVwZW5kZW5jaWVzIGFyZSBoYW5kbGVkLiBJJ20gaG9waW5nIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlIHJlbGV2YW50IEtjb25maWcgc3ltYm9scywgdGhlaXIgZGVwZW5kZW5jaWVzLCBhbmQgYW55IGRlZmF1bHQgdmFsdWVzIHRoYXQgbWlnaHQgZ2l2ZSBtZSBhIGNsdWUgYWJvdXQgdGhlIGJlaGF2aW9yIEknbSBzZWVpbmcuIFdpdGggYSBiaXQgb2YgbHVjaywgdGhlIGFuc3dlciBpcyByaWdodCB0aGVyZSBpbiBmcm9udCBvZiBtZS4gT3RoZXJ3aXNlLCBJIHdpbGwgaGF2ZSB0byBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MTU3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6NDY6MTIuOTc2OTI5NzI2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1ODA5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJsaWIvS2NvbmZpZy5kZWJ1Z1wiLFxuICBcIkZpcnN0TGluZVwiOiAxNDE1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxNDE1OlxcdFxcbjE0MTY6XFx0Y29uZmlnIExPQ0tfREVCVUdHSU5HX1NVUFBPUlRcXG4xNDE3OlxcdFxcdGJvb2xcXG4xNDE4OlxcdFxcdGRlcGVuZHMgb24gVFJBQ0VfSVJRRkxBR1NfU1VQUE9SVCBcXHUwMDI2XFx1MDAyNiBTVEFDS1RSQUNFX1NVUFBPUlQgXFx1MDAyNlxcdTAwMjYgTE9DS0RFUF9TVVBQT1JUXFxuMTQxOTpcXHRcXHRkZWZhdWx0IHlcXG4xNDIwOlxcdFxcbjE0MjE6XFx0Y29uZmlnIFBST1ZFX0xPQ0tJTkdcXG4xNDIyOlxcdFxcdGJvb2wgXFxcIkxvY2sgZGVidWdnaW5nOiBwcm92ZSBsb2NraW5nIGNvcnJlY3RuZXNzXFxcIlxcbjE0MjM6XFx0XFx0ZGVwZW5kcyBvbiBERUJVR19LRVJORUwgXFx1MDAyNlxcdTAwMjYgTE9DS19ERUJVR0dJTkdfU1VQUE9SVFxcbjE0MjQ6XFx0XFx0c2VsZWN0IExPQ0tERVBcXG4xNDI1OlxcdFxcdHNlbGVjdCBERUJVR19TUElOTE9DS1xcbjE0MjY6XFx0XFx0c2VsZWN0IERFQlVHX01VVEVYRVMgaWYgIVBSRUVNUFRfUlRcXG4xNDI3OlxcdFxcdHNlbGVjdCBERUJVR19SVF9NVVRFWEVTIGlmIFJUX01VVEVYRVNcXG4xNDI4OlxcdFxcdHNlbGVjdCBERUJVR19SV1NFTVMgaWYgIVBSRUVNUFRfUlRcXG4xNDI5OlxcdFxcdHNlbGVjdCBERUJVR19XV19NVVRFWF9TTE9XUEFUSFxcbjE0MzA6XFx0XFx0c2VsZWN0IERFQlVHX0xPQ0tfQUxMT0NcXG4xNDMxOlxcdFxcdHNlbGVjdCBQUkVFTVBUX0NPVU5UIGlmICFBUkNIX05PX1BSRUVNUFRcXG4xNDMyOlxcdFxcdHNlbGVjdCBUUkFDRV9JUlFGTEFHU1xcbjE0MzM6XFx0XFx0ZGVmYXVsdCBuXFxuMTQzNDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ2OjEyLjk3NzA4OTA3NloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjUwMjQwOTQ5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTG9ja2RlcCBQYXRjaCoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggYWN0aXZhdGVzIGBMT0NLREVQYCB0aHJvdWdoIGBQUk9WRV9MT0NLSU5HYCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEknbGwgZGVmaW5pdGVseSBpbmNsdWRlIGJvdGggYFBST1ZFX0xPQ0tJTkdgIGFuZCBgTE9DS0RFUGAgaW4gdGhlIGBFbmFibGVDb25maWdzYC4gVGhhdCdzIGEgbm8tYnJhaW5lci5cblxuTm93LCBsZXQncyBzZWUsIGFyZSB0aGVyZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCB3YXJyYW50IGV4dHJhIGF0dGVudGlvbj8gVGhlIHBhdGNoIGludHJvZHVjZXMgYGxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWRgLiBJdCdzIGNhbGxlZCBmcm9tIGBsb2NrZGVwX3NldF9sb2NrX2NtcF9mbmAsIGBfX2xvY2tfYWNxdWlyZWAsIGFuZCBgbWF0Y2hfaGVsZF9sb2NrYC4gSG1tLCBgX19sb2NrX2FjcXVpcmVgIGFuZCBgbWF0Y2hfaGVsZF9sb2NrYCBhcmUgc3RhdGljOyB0aGV5J3JlIHByb2JhYmx5IGhvdCBwYXRocywgc28gbm90IGEgZ29vZCBpZGVhIHRvIGZvY3VzIG9uIHRob3NlIHNwZWNpZmljYWxseS4gYGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuYCBpcyBleHBvcnRlZCBhbmQgdXNlZCB3aGVuIGNyZWF0aW5nIHNvY2tldHMgYW5kIHBpcGVzLCB3aGljaCBpc24ndCAqc3VwZXIqIGNvbW1vbiwgYnV0IGl0J3Mgbm90IHJhcmUgZWl0aGVyLlxuXG5TaG91bGQgSSBsaXN0IGBsb2NrZGVwX3NldF9sb2NrX2NtcF9mbmAgaW4gYEZvY3VzU3ltYm9sc2A/IElmIEkgZGlkLCBzeXprYWxsZXIgd291bGQgdGFyZ2V0IHNvY2tldC9waXBlIGNyZWF0aW9uLiBJdCBjb3VsZCBiZSBmaW5lLCBidXQgdGhlIGZ1bmN0aW9uJ3Mgb25seSBlbmFibGVkIGlmIGBDT05GSUdfUFJPVkVfTE9DS0lOR2AgaXMgZW5hYmxlZC4gTGV0IG1lIHF1aWNrbHkgY2hlY2sgaWYgYGxvY2tkZXBfc2V0X2xvY2tfY21wX2ZuYCBpcyBldmVuIGRlZmluZWQgd2l0aG91dCBgUFJPVkVfTE9DS0lOR2AuIFllcCwgaW4gYGluY2x1ZGUvbGludXgvbG9ja2RlcC5oYCwgaXQncyBwcm90ZWN0ZWQgYnkgdGhlIGAjaWZkZWYgQ09ORklHX1BST1ZFX0xPQ0tJTkdgLlxuXG5TbywgaXQncyBvbmx5IGFjdGl2ZSB3aXRoIGBQUk9WRV9MT0NLSU5HYC4gSSdsbCBzdGljayB3aXRoIGFkZGluZyBgUFJPVkVfTE9DS0lOR2AgYW5kIGBMT0NLREVQYCB0byBgRW5hYmxlQ29uZmlnc2AuIEkgdGhpbmsgaXQncyBiZXR0ZXIgbm90IHRvIHB1dCBhbnkgZnVuY3Rpb25zIGluIGBGb2N1c1N5bWJvbHNgIGhlcmUgYmVjYXVzZSBsb2NrZGVwIGlzIGEgZ2VuZXJpYyBzdWJzeXN0ZW0sIGFuZCB0YXJnZXRpbmcgc3BlY2lmaWMgZnVuY3Rpb25zIG1pZ2h0IG5hcnJvdyB0aGUgZnV6emluZyBzY29wZSB0b28gbXVjaC4gSSB3YW50IHRvIHRlc3QgYW55IGxvY2sgYWNxdWlzaXRpb24gZm9yIHRoZSBidWcgdGhhdCB0aGlzIHBhdGNoIGZpeGVzLCB3aGljaCBpcyB0aGUgcmFjZSBjb25kaXRpb24gb3IgYW4gaW52YWxpZCBjYWNoZSBpbiBsb2NrZGVwIGl0c2VsZi4gR2VuZXJhbCBmdXp6aW5nIHdpdGggbG9ja2RlcCBlbmFibGVkIGlzIHRoZSBiZXN0IGFwcHJvYWNoLlxuXG5KdXN0IHRvIGNvbmZpcm0sIHRoaXMgcGF0Y2ggYWRkcyBgbG9ja19jbGFzc19jYWNoZV9pc192YWxpZGAgdG8gY2hlY2sgdGhlIHZhbGlkaXR5IG9mIGEgY2FjaGVkIGxvY2sgY2xhc3MgYW5kIHVzZXMgYFJFQURfT05DRWAgYW5kIGBXUklURV9PTkNFYCBmb3IgYGxvY2stXHUwMDNlY2xhc3NfY2FjaGVgLiBUaGlzICppcyogYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBsb2NrZGVwOyBhIGNydWNpYWwgZml4IGZvciBwb3RlbnRpYWwgYnVncyB3aXRoIGludmFsaWQgY2FjaGUgdXNhZ2UuIEl0J3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gYSBjb3JlIGtlcm5lbCBkZWJ1Z2dpbmcgbWVjaGFuaXNtIHRoYXQgaXMgdXNlZCBpbiBldmVyeSBsb2NrIGFjcXVpc2l0aW9uLCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzY5OSwiT3V0cHV0VG9rZW5zIjoxMjUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NTEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0NjoyNS40Nzk1MDA3OTVaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQ1MDk0ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlBST1ZFX0xPQ0tJTkdcIixcbiAgICBcIkxPQ0tERVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9ja2RlcCBzdWJzeXN0ZW0gdG8gdmFsaWRhdGUgY2FjaGVkIGxvY2sgY2xhc3NlcyB1c2luZyBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKCkgYW5kIGFkZHMgUkVBRF9PTkNFL1dSSVRFX09OQ0UgdG8gcHJldmVudCBkYXRhIHJhY2VzIG9uIGxvY2stXFx1MDAzZWNsYXNzX2NhY2hlLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gYSBjb3JlIGtlcm5lbCBkZWJ1Z2dpbmcgbWVjaGFuaXNtIHRoYXQgaXMgcmVhY2hhYmxlIHZpYSBhbnkgbG9jayBhY3F1aXNpdGlvbi4gRnV6emluZyB3aXRoIFBST1ZFX0xPQ0tJTkcgZW5hYmxlZCBpcyByZXF1aXJlZCB0byBleGVyY2lzZSB0aGVzZSBwYXRocy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJQUk9WRV9MT0NLSU5HXCIsXG4gICAgXCJMT0NLREVQXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvY2tkZXAgc3Vic3lzdGVtIHRvIHZhbGlkYXRlIGNhY2hlZCBsb2NrIGNsYXNzZXMgdXNpbmcgbG9ja19jbGFzc19jYWNoZV9pc192YWxpZCgpIGFuZCBhZGRzIFJFQURfT05DRS9XUklURV9PTkNFIHRvIHByZXZlbnQgZGF0YSByYWNlcyBvbiBsb2NrLVxcdTAwM2VjbGFzc19jYWNoZS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGEgY29yZSBrZXJuZWwgZGVidWdnaW5nIG1lY2hhbmlzbSB0aGF0IGlzIHJlYWNoYWJsZSB2aWEgYW55IGxvY2sgYWNxdWlzaXRpb24uIEZ1enppbmcgd2l0aCBQUk9WRV9MT0NLSU5HIGVuYWJsZWQgaXMgcmVxdWlyZWQgdG8gZXhlcmNpc2UgdGhlc2UgcGF0aHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ2OjI1LjY1NDAxODUwM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQzMTI5MTU4NzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNFQxODo0NjoyNS42NTQ2NDM0MDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MzQzMTIyODY4MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGxvY2tkZXAncyBpbnRlcm5hbCBjYWNoaW5nIG1lY2hhbmlzbSBmb3IgbG9jayBjbGFzc2VzIChgbG9jay1cXHUwMDNlY2xhc3NfY2FjaGVgKS4gSXQgaW50cm9kdWNlcyBhIHZhbGlkYXRpb24gZnVuY3Rpb24gYGxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWRgIGFuZCB1c2VzIGBSRUFEX09OQ0VgL2BXUklURV9PTkNFYCB0byBwcmV2ZW50IGRhdGEgcmFjZXMgYW5kIGVuc3VyZSB0aGUgY2FjaGVkIGNsYXNzIHBvaW50ZXIgaXMgdmFsaWQgYmVmb3JlIHVzZS4gVGhlc2UgY2hhbmdlcyBhZGRyZXNzIGNvbmN1cnJlbmN5IGlzc3Vlcywgc3RhbGUgY2FjaGUgZW50cmllcywgb3IgcG90ZW50aWFsIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzICh3aGljaCBhcmUgdHlwaWNhbGx5IGNhdWdodCBieSBLQ1NBTiwgS0FTQU4sIG9yIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMpLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgYWxsb2NhdGlvbnMsIHVzZXItc3BhY2UgY29waWVzLCBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4gdG8gZGV0ZWN0LlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGYwNTFjY2NiYTFiY2MyZTM5ODUxNTJmY2M4MTRkMjMxMjUwM2FjY2FcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEF1ZyAyNCAxODoxOTo0NCAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuYyBiL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xuaW5kZXggMjVkNzdkNGExMDYxNC4uNzYzZjc5ODA2YmQ4ZiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9sb2NraW5nL2xvY2tkZXAuY1xuKysrIGIva2VybmVsL2xvY2tpbmcvbG9ja2RlcC5jXG5AQCAtOTYzLDYgKzk2MywzNCBAQCBsb29rX3VwX2xvY2tfY2xhc3MoY29uc3Qgc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MpXG4gXHRyZXR1cm4gTlVMTDtcbiB9XG4gXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWQoY29uc3Qgc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLFxuK1x0XHRcdFx0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyxcbitcdFx0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBpbnQgc3ViY2xhc3MpXG4re1xuK1x0dW5zaWduZWQgaW50IGNsYXNzX3N1YmNsYXNzO1xuK1xuK1x0aWYgKCFjbGFzcylcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHVubGlrZWx5KGNsYXNzIFx1MDAzYyBsb2NrX2NsYXNzZXMgfHwgY2xhc3MgXHUwMDNlPSBsb2NrX2NsYXNzZXMgKyBNQVhfTE9DS0RFUF9LRVlTKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0aWYgKHVubGlrZWx5KCFhcmNoX3Rlc3RfYml0KGNsYXNzIC0gbG9ja19jbGFzc2VzLCBsb2NrX2NsYXNzZXNfaW5fdXNlKSkpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcbitcdGlmICh1bmxpa2VseSghbG9jay1cdTAwM2VrZXkpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRjbGFzc19zdWJjbGFzcyA9IHN1YmNsYXNzID8gc3ViY2xhc3MgOiBjbGFzcy1cdTAwM2VzdWJjbGFzcztcbitcdGlmICh1bmxpa2VseShjbGFzc19zdWJjbGFzcyBcdTAwM2U9IE1BWF9MT0NLREVQX1NVQkNMQVNTRVMpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXG4rXHRpZiAodW5saWtlbHkoUkVBRF9PTkNFKGNsYXNzLVx1MDAzZWtleSkgIT0gbG9jay1cdTAwM2VrZXktXHUwMDNlc3Via2V5cyArIGNsYXNzX3N1YmNsYXNzKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuIC8qXG4gICogU3RhdGljIGxvY2tzIGRvIG5vdCBoYXZlIHRoZWlyIGNsYXNzLWtleXMgeWV0IC0gZm9yIHRoZW0gdGhlIGtleSBpc1xuICAqIHRoZSBsb2NrIG9iamVjdCBpdHNlbGYuIElmIHRoZSBsb2NrIGlzIGluIHRoZSBwZXIgY3B1IGFyZWEsIHRoZVxuQEAgLTEzOTUsOSArMTQyMyw5IEBAIHJlZ2lzdGVyX2xvY2tfY2xhc3Moc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsIGludCBmb3JjZSlcbiBcbiBvdXRfc2V0X2NsYXNzX2NhY2hlOlxuIFx0aWYgKCFzdWJjbGFzcyB8fCBmb3JjZSlcbi1cdFx0bG9jay1cdTAwM2VjbGFzc19jYWNoZVswXSA9IGNsYXNzO1xuK1x0XHRXUklURV9PTkNFKGxvY2stXHUwMDNlY2xhc3NfY2FjaGVbMF0sIGNsYXNzKTtcbiBcdGVsc2UgaWYgKHN1YmNsYXNzIFx1MDAzYyBOUl9MT0NLREVQX0NBQ0hJTkdfQ0xBU1NFUylcbi1cdFx0bG9jay1cdTAwM2VjbGFzc19jYWNoZVtzdWJjbGFzc10gPSBjbGFzcztcbitcdFx0V1JJVEVfT05DRShsb2NrLVx1MDAzZWNsYXNzX2NhY2hlW3N1YmNsYXNzXSwgY2xhc3MpO1xuIFxuIFx0LypcbiBcdCAqIEhhc2ggY29sbGlzaW9uLCBkaWQgd2Ugc21va2Ugc29tZT8gV2UgZm91bmQgYSBjbGFzcyB3aXRoIGEgbWF0Y2hpbmdcbkBAIC00OTU3LDcgKzQ5ODUsNyBAQCB2b2lkIGxvY2tkZXBfaW5pdF9tYXBfdHlwZShzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIGNvbnN0IGNoYXIgKm5hbWUsXG4gXHRpbnQgaTtcbiBcbiBcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0xPQ0tERVBfQ0FDSElOR19DTEFTU0VTOyBpKyspXG4tXHRcdGxvY2stXHUwMDNlY2xhc3NfY2FjaGVbaV0gPSBOVUxMO1xuK1x0XHRXUklURV9PTkNFKGxvY2stXHUwMDNlY2xhc3NfY2FjaGVbaV0sIE5VTEwpO1xuIFxuICNpZmRlZiBDT05GSUdfTE9DS19TVEFUXG4gXHRsb2NrLVx1MDAzZWNwdSA9IHJhd19zbXBfcHJvY2Vzc29yX2lkKCk7XG5AQCAtNTAyMiwxMiArNTA1MCwxNSBAQCBFWFBPUlRfU1lNQk9MX0dQTChfX2xvY2tkZXBfbm9fdHJhY2tfXyk7XG4gdm9pZCBsb2NrZGVwX3NldF9sb2NrX2NtcF9mbihzdHJ1Y3QgbG9ja2RlcF9tYXAgKmxvY2ssIGxvY2tfY21wX2ZuIGNtcF9mbixcbiBcdFx0XHQgICAgIGxvY2tfcHJpbnRfZm4gcHJpbnRfZm4pXG4ge1xuLVx0c3RydWN0IGxvY2tfY2xhc3MgKmNsYXNzID0gbG9jay1cdTAwM2VjbGFzc19jYWNoZVswXTtcbitcdHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IFJFQURfT05DRShsb2NrLVx1MDAzZWNsYXNzX2NhY2hlWzBdKTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4gXG4gXHRyYXdfbG9jYWxfaXJxX3NhdmUoZmxhZ3MpO1xuIFx0bG9ja2RlcF9yZWN1cnNpb25faW5jKCk7XG4gXG4rXHRpZiAoIWxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWQobG9jaywgY2xhc3MsIDApKVxuK1x0XHRjbGFzcyA9IE5VTEw7XG4rXG4gXHRpZiAoIWNsYXNzKVxuIFx0XHRjbGFzcyA9IHJlZ2lzdGVyX2xvY2tfY2xhc3MobG9jaywgMCwgMCk7XG4gXG5AQCAtNTExOSw4ICs1MTUwLDExIEBAIHN0YXRpYyBpbnQgX19sb2NrX2FjcXVpcmUoc3RydWN0IGxvY2tkZXBfbWFwICpsb2NrLCB1bnNpZ25lZCBpbnQgc3ViY2xhc3MsXG4gXHRpZiAoREVCVUdfTE9DS1NfV0FSTl9PTihzdWJjbGFzcyBcdTAwM2U9IE1BWF9MT0NLREVQX1NVQkNMQVNTRVMpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbi1cdGlmIChzdWJjbGFzcyBcdTAwM2MgTlJfTE9DS0RFUF9DQUNISU5HX0NMQVNTRVMpXG4tXHRcdGNsYXNzID0gbG9jay1cdTAwM2VjbGFzc19jYWNoZVtzdWJjbGFzc107XG4rXHRpZiAoc3ViY2xhc3MgXHUwMDNjIE5SX0xPQ0tERVBfQ0FDSElOR19DTEFTU0VTKSB7XG4rXHRcdGNsYXNzID0gUkVBRF9PTkNFKGxvY2stXHUwMDNlY2xhc3NfY2FjaGVbc3ViY2xhc3NdKTtcbitcdFx0aWYgKCFsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGxvY2ssIGNsYXNzLCBzdWJjbGFzcykpXG4rXHRcdFx0Y2xhc3MgPSBOVUxMO1xuK1x0fVxuIFx0LypcbiBcdCAqIE5vdCBjYWNoZWQ/XG4gXHQgKi9cbkBAIC01MzIzLDkgKzUzNTcsOSBAQCBzdGF0aWMgbm9pbnN0ciBpbnQgbWF0Y2hfaGVsZF9sb2NrKGNvbnN0IHN0cnVjdCBoZWxkX2xvY2sgKmhsb2NrLFxuIFx0XHRyZXR1cm4gMTtcbiBcbiBcdGlmIChobG9jay1cdTAwM2VyZWZlcmVuY2VzKSB7XG4tXHRcdGNvbnN0IHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IGxvY2stXHUwMDNlY2xhc3NfY2FjaGVbMF07XG4rXHRcdGNvbnN0IHN0cnVjdCBsb2NrX2NsYXNzICpjbGFzcyA9IFJFQURfT05DRShsb2NrLVx1MDAzZWNsYXNzX2NhY2hlWzBdKTtcbiBcbi1cdFx0aWYgKCFjbGFzcylcbitcdFx0aWYgKCFsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkKGxvY2ssIGNsYXNzLCAwKSlcbiBcdFx0XHRjbGFzcyA9IGxvb2tfdXBfbG9ja19jbGFzcyhsb2NrLCAwKTtcbiBcbiBcdFx0LypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI0VDE4OjQ2OjI1LjY1NDY0NDUxNFoiLCJTZXEiOjE5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDMxMjI2NzcxMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIExvY2tkZXAgQ2FjaGUgVmFsaWRhdGlvbiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gVGhpcyBwYXRjaCBpcyBmb2N1c2VkIHNvbGVseSBvbiBpbnRlcm5hbCBsb2NrZGVwIG1lY2hhbmljcywgc3BlY2lmaWNhbGx5IGRlYWxpbmcgd2l0aCBob3cgaXQgY2FjaGVzIGxvY2sgY2xhc3NlcyB3aXRoaW4gdGhlIGBrZXJuZWwvbG9ja2luZy9sb2NrZGVwLmNgIGZpbGUuIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGFib3V0IGNvbmN1cnJlbmN5IGlzc3VlcyBvbiBgbG9jay1cdTAwM2VjbGFzc19jYWNoZWAuIEkgc2VlIGEgbmV3IGZ1bmN0aW9uLCBgbG9ja19jbGFzc19jYWNoZV9pc192YWxpZGAsIGhhcyBiZWVuIGFkZGVkIHRvIHZhbGlkYXRlIHRoZSBjYWNoZWQgY2xhc3MgcG9pbnRlciBiZWZvcmUgaXQncyB1c2VkLiBUaGlzIGlzIHNtYXJ0OyB0aGlzIGlzIGFib3V0IHByZXZlbnRpbmcgdGhlIHVzZSBvZiBhIHN0YWxlIG9yIGNvcnJ1cHRlZCBjYWNoZSwgYSB0ZXh0Ym9vayBzb2x1dGlvbiBmb3IgYSByYWNlIGNvbmRpdGlvbi5cblxuSSd2ZSBzcG90dGVkIHRoZSBjaGFuZ2VzIGludm9sdmUgYFdSSVRFX09OQ0VgIGFuZCBgUkVBRF9PTkNFYCBmb3IgYWNjZXNzaW5nIGFuZCB1cGRhdGluZyB0aGUgYGxvY2stXHUwMDNlY2xhc3NfY2FjaGVgLCB3aGljaCBmdXJ0aGVyIHJlaW5mb3JjZXMgdGhlIGRhdGEgcmFjZSBtaXRpZ2F0aW9uIGFuZ2xlLiBUaGUgbG9naWMgb2YgdmFsaWRhdGluZyB0aGUgY2FjaGVkIGBjbGFzc2AgYmVmb3JlIHVzYWdlIGlzIGNsZWFyIGFuZCBjb25jaXNlLlxuXG5UaGlua2luZyBhYm91dCBpdCwgdGhlIHNjb3BlIGlzIHN0cmljdGx5IHdpdGhpbiBsb2NrZGVwJ3MgaW50ZXJuYWwgc3RhdGUgdHJhY2tpbmcuIFRoZXJlJ3Mgbm90aGluZyBoZXJlIHRoYXQgZXhwb3NlcyB1bmluaXRpYWxpemVkIG1lbW9yeSB0byB1c2Vyc3BhY2Ugb3IgaW50cm9kdWNlcyBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVha3MsIG5vciBhcmUgdGhlcmUgYW55IGFsbG9jYXRpb25zLiBUaGF0IG1lYW5zLCB0aGUgcHJvYmxlbSBiZWluZyBmaXhlZCBoYXMgdG8gYmUgc29tZXRoaW5nIGxpa2UgYSBkYXRhIHJhY2Ugb3IgYSBtZW1vcnkgY29ycnVwdGlvbiBwcm9ibGVtIHdpdGhpbiBsb2NrZGVwLCBsaWtlIGEgdXNlLWFmdGVyLWZyZWUsIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBvciBhIGxvZ2ljYWwgYnVnIGR1ZSB0byBhIHN0YWxlIGNhY2hlLlxuXG5Ob3csIEtBU0FOLCBLQ1NBTiwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycyB3b3VsZCBjYXRjaCBkYXRhIHJhY2VzIG9yIGludmFsaWQgbWVtb3J5IGFjY2Vzc2VzLiBLTVNBTiBpcyB0aGUgdG9vbCBmb3IgZmluZGluZyBpc3N1ZXMgcmVsYXRlZCB0byB1bmluaXRpYWxpemVkIG1lbW9yeS4gR2l2ZW4gdGhhdCBgbG9jay1cdTAwM2VjbGFzc19jYWNoZWAgaXMgaW5pdGlhbGl6ZWQgdG8gTlVMTCBpbiBgbG9ja2RlcF9pbml0X21hcF90eXBlYCwgSSBhbSBub3Qgc2VlaW5nIEtNU0FOIGJlaW5nIGFwcGxpY2FibGUgdG8gdGhpcyBwYXRjaDsgdGhlcmUgaXMgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2UuIFRoaXMgcGF0Y2ggaXMgbm90IGludHJvZHVjaW5nIG9yIGZpeGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhlIHZhbGlkYXRpb24gZnVuY3Rpb24gYGxvY2tfY2xhc3NfY2FjaGVfaXNfdmFsaWRgIGNvbmZpcm1zIHRoaXMuIEl0IGNoZWNrczpcbi0gVGhlIGNsYXNzIHBvaW50ZXIgaXMgbm90IE5VTExcbi0gVGhlIGNsYXNzIHBvaW50ZXIgaXMgd2l0aGluIHRoZSB2YWxpZCBsb2NrIGNsYXNzZXMgYXJyYXlcbi0gVGhlIGNsYXNzIGlzIGluIHVzZSBiYXNlZCBvbiB0aGUgYGxvY2tfY2xhc3Nlc19pbl91c2VgIGJpdCBhcnJheVxuLSBUaGUgbG9jaydzIGtleSBpcyBub3QgTlVMTFxuLSBUaGUgY2xhc3MncyBzdWJjbGFzcyBpcyB3aXRoaW4gdGhlIHZhbGlkIHJhbmdlXG4tIFRoZSBjbGFzcydzIGtleSBtYXRjaGVzIHRoZSBsb2NrJ3Mga2V5XG5cblRoZXJlZm9yZSwgdGhlIGNoZWNrcyBpbiB0aGUgdmFsaWRhdGlvbiBmdW5jdGlvbiBhcmUgdG8gZW5zdXJlIHRoYXQgdGhlIGxvY2sgY2xhc3MgaXMgdmFsaWQgYW5kIG1hdGNoZXMgdGhlIGxvY2sncyBrZXksIGFuZCB0aGlzIGNvbmZpcm1zIHRoaXMgaXMgbm90IGFuIGlzc3VlIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeS4gVGhlcmVmb3JlLCBJJ20gY29uZmlkZW50IGluIHNldHRpbmcgYE5lZWRzS01TQU5gIHRvIGBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNjIsIk91dHB1dFRva2VucyI6MTUzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjM1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjRUMTg6NDY6NTkuOTY2OTE0NzYyWiIsIlNlcSI6MjAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM3NjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb2NrZGVwJ3MgaW50ZXJuYWwgY2FjaGluZyBtZWNoYW5pc20gZm9yIGxvY2sgY2xhc3NlcyAoYGxvY2stXFx1MDAzZWNsYXNzX2NhY2hlYCkuIEl0IGludHJvZHVjZXMgYSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkYCBhbmQgdXNlcyBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBlbnN1cmUgdGhlIGNhY2hlZCBjbGFzcyBwb2ludGVyIGlzIHZhbGlkIGJlZm9yZSB1c2UuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBpc3N1ZXMsIHN0YWxlIGNhY2hlIGVudHJpZXMsIG9yIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAod2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0NTQU4sIEtBU0FOLCBvciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBsb2NrZGVwJ3MgaW50ZXJuYWwgY2FjaGluZyBtZWNoYW5pc20gZm9yIGxvY2sgY2xhc3NlcyAoYGxvY2stXFx1MDAzZWNsYXNzX2NhY2hlYCkuIEl0IGludHJvZHVjZXMgYSB2YWxpZGF0aW9uIGZ1bmN0aW9uIGBsb2NrX2NsYXNzX2NhY2hlX2lzX3ZhbGlkYCBhbmQgdXNlcyBgUkVBRF9PTkNFYC9gV1JJVEVfT05DRWAgdG8gcHJldmVudCBkYXRhIHJhY2VzIGFuZCBlbnN1cmUgdGhlIGNhY2hlZCBjbGFzcyBwb2ludGVyIGlzIHZhbGlkIGJlZm9yZSB1c2UuIFRoZXNlIGNoYW5nZXMgYWRkcmVzcyBjb25jdXJyZW5jeSBpc3N1ZXMsIHN0YWxlIGNhY2hlIGVudHJpZXMsIG9yIHBvdGVudGlhbCBpbnZhbGlkIG1lbW9yeSBhY2Nlc3NlcyAod2hpY2ggYXJlIHR5cGljYWxseSBjYXVnaHQgYnkgS0NTQU4sIEtBU0FOLCBvciBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzKS4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGFsbG9jYXRpb25zLCB1c2VyLXNwYWNlIGNvcGllcywgb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOIHRvIGRldGVjdC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmnq5[1] Phase: Succeeded StartedAt: 2026-08-24 18:47:12 +0000 UTC FinishedAt: 2026-08-24 18:47:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-24 18:47:12 +0000 UTC FinishedAt: 2026-08-24 18:47:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[2] Phase: Succeeded StartedAt: 2026-08-24 18:47:12 +0000 UTC FinishedAt: 2026-08-24 22:44:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-24 18:47:12 +0000 UTC FinishedAt: 2026-08-24 22:44:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-24 18:47:12 +0000 UTC FinishedAt: 2026-08-24 18:47:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-24 18:47:12 +0000 UTC FinishedAt: 2026-08-24 18:47:18 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowlmnq5/series-workflowlmnq5-convert-artifact-1179584892/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-24 18:47:22 +0000 UTC FinishedAt: 2026-08-24 19:16:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-24 18:47:22 +0000 UTC FinishedAt: 2026-08-24 19:16:45 +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:*c140d5e1-95bd-41a0-90b5-89341a278db8,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-workflowlmnq5/series-workflowlmnq5-convert-artifact-1179584892/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": "74df59dd-39cd-45a3-9aac-abd5168d8675", "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-workflowlmnq5/series-workflowlmnq5-build-action-3371893930/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-24 18:47:22 +0000 UTC FinishedAt: 2026-08-24 19:16:35 +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:*c140d5e1-95bd-41a0-90b5-89341a278db8,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-workflowlmnq5/series-workflowlmnq5-convert-artifact-1179584892/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": "74df59dd-39cd-45a3-9aac-abd5168d8675", "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-workflowlmnq5/series-workflowlmnq5-build-action-3371893930/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-24 19:16:45 +0000 UTC FinishedAt: 2026-08-24 19:16:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-24 19:16:45 +0000 UTC FinishedAt: 2026-08-24 19:16:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-24 19:16:45 +0000 UTC FinishedAt: 2026-08-24 19:16:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-24 19:16:45 +0000 UTC FinishedAt: 2026-08-24 19:16:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowlmnq5/series-workflowlmnq5-convert-artifact-930954683/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-24 19:16:55 +0000 UTC FinishedAt: 2026-08-24 19:19:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-24 19:16:55 +0000 UTC FinishedAt: 2026-08-24 19:19:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*74df59dd-39cd-45a3-9aac-abd5168d8675,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-workflowlmnq5/series-workflowlmnq5-build-action-3371893930/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-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-24 19:19:10 +0000 UTC FinishedAt: 2026-08-24 19:19:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-24 19:19:10 +0000 UTC FinishedAt: 2026-08-24 19:19:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-24 19:19:10 +0000 UTC FinishedAt: 2026-08-24 19:40:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-24 19:19:10 +0000 UTC FinishedAt: 2026-08-24 19:40:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c140d5e1-95bd-41a0-90b5-89341a278db8,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-workflowlmnq5/series-workflowlmnq5-convert-artifact-930954683/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": "abc9bf58-74a7-4338-8cd0-e4cd3d2fb71a", "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-workflowlmnq5/series-workflowlmnq5-build-action-244693215/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-24 19:19:10 +0000 UTC FinishedAt: 2026-08-24 19:39:54 +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:*c140d5e1-95bd-41a0-90b5-89341a278db8,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-workflowlmnq5/series-workflowlmnq5-convert-artifact-930954683/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": "abc9bf58-74a7-4338-8cd0-e4cd3d2fb71a", "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-workflowlmnq5/series-workflowlmnq5-build-action-244693215/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-24 19:40:06 +0000 UTC FinishedAt: 2026-08-24 19:40:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-24 19:40:06 +0000 UTC FinishedAt: 2026-08-24 19:40:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-24 19:40:06 +0000 UTC FinishedAt: 2026-08-24 19:42:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-24 19:40:06 +0000 UTC FinishedAt: 2026-08-24 19:42:00 +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:*abc9bf58-74a7-4338-8cd0-e4cd3d2fb71a,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-workflowlmnq5/series-workflowlmnq5-build-action-244693215/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-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-24 19:42:10 +0000 UTC FinishedAt: 2026-08-24 22:44:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-24 19:42:10 +0000 UTC FinishedAt: 2026-08-24 22:44:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*74df59dd-39cd-45a3-9aac-abd5168d8675,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*abc9bf58-74a7-4338-8cd0-e4cd3d2fb71a,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-workflowlmnq5/series-workflowlmnq5-build-action-3371893930/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-workflowlmnq5/series-workflowlmnq5-build-action-244693215/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-24 19:42:10 +0000 UTC FinishedAt: 2026-08-24 19:42:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-24 19:42:10 +0000 UTC FinishedAt: 2026-08-24 19:42:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlmnq5/series-workflowlmnq5-convert-artifact-2959502516/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-24 19:42:10 +0000 UTC FinishedAt: 2026-08-24 19:42:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-24 19:42:10 +0000 UTC FinishedAt: 2026-08-24 19:42:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-24 19:42:10 +0000 UTC FinishedAt: 2026-08-24 19:42:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-24 19:42:33 +0000 UTC FinishedAt: 2026-08-24 22:44:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlmnq5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":[],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"0a0d1d55dad570724bf8c7ea83409639cfb4be9b","config_name":"upstream-apparmor-kasan.config","enable_configs":["PROVE_LOCKING","LOCKDEP"],"series_id":"b56590b3-69b0-45ef-aa34-61e941851eba","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-24 19:42:33 +0000 UTC FinishedAt: 2026-08-24 22:44:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*74df59dd-39cd-45a3-9aac-abd5168d8675,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*abc9bf58-74a7-4338-8cd0-e4cd3d2fb71a,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-workflowlmnq5/series-workflowlmnq5-build-action-3371893930/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-workflowlmnq5/series-workflowlmnq5-build-action-244693215/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-workflowlmnq5/series-workflowlmnq5-convert-artifact-2959502516/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,}