Name: series-workflowhwqjv Phase: Succeeded StartedAt: 2026-08-05 17:28:57 +0000 UTC FinishedAt: 2026-08-05 21:17:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[0] Phase: Succeeded StartedAt: 2026-08-05 17:28:57 +0000 UTC FinishedAt: 2026-08-05 17:33:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 17:28:57 +0000 UTC FinishedAt: 2026-08-05 17:33:17 +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": "848acc8ffe1b7cd5f1bf427b93069becfebc2c9d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "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": "848acc8ffe1b7cd5f1bf427b93069becfebc2c9d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "23a3eda3-9bab-4c50-b136-d04b42410800" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vm_insert_pages", "io_uring_mmap", "tcp_zerocopy_receive", "ring_buffer_map", "mmap_action_complete" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1faW5zZXJ0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX21tYXAmIzM0OywKICAgICYjMzQ7dGNwX3plcm9jb3B5X3JlY2VpdmUmIzM0OywKICAgICYjMzQ7cmluZ19idWZmZXJfbWFwJiMzNDssCiAgICAmIzM0O21tYXBfYWN0aW9uX2NvbXBsZXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGluc2VydF9wYWdlc2Agd2hlbiBwYWdlIHRhYmxlIGFsbG9jYXRpb24gZmFpbHMsIHJldHVybmluZyBgLUVOT01FTWAgaW5zdGVhZCBvZiBgLUVGQVVMVGAuIEl0IGFsc28gcmVuYW1lcyBgd2Fsa190b19wbWRgIHRvIGBwb3B1bGF0ZV90b19wbWRgIHRvIGJldHRlciByZWZsZWN0IGl0cyBiZWhhdmlvci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIGNhbGxlcnMgb2YgYHZtX2luc2VydF9wYWdlc2Agc3VjaCBhcyBpb191cmluZywgdGNwIHplcm9jb3B5LCBhbmQgdHJhY2UgcmluZyBidWZmZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzM1ZWRjODQyYjIwNjA3ZjM0ZDc2OWM5ZTVmOTA4MDlmYjQ2YjE0MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTc6MzA6NDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZmYzMzhjMmFiZTkyMy4uMTYwOTM0NzlkMzQxMCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTIyNjgsNyAmIzQzOzIyNjgsNyBAQCB2b2lkIHphcF9zcGVjaWFsX3ZtYV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh6YXBfc3BlY2lhbF92bWFfcmFuZ2UpO1xuIFxuLXN0YXRpYyBwbWRfdCAqd2Fsa190b19wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbiYjNDM7c3RhdGljIHBtZF90ICpwb3B1bGF0ZV90b19wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRwZ2RfdCAqcGdkO1xuIFx0cDRkX3QgKnA0ZDtcbkBAIC0yMjkzLDcgJiM0MzsyMjkzLDcgQEAgc3RhdGljIHBtZF90ICp3YWxrX3RvX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHB0ZV90ICpnZXRfbG9ja2VkX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHQgICAgICBzcGlubG9ja190ICoqcHRsKVxuIHtcbi1cdHBtZF90ICpwbWQgPSB3YWxrX3RvX3BtZChtbSwgYWRkcik7XG4mIzQzO1x0cG1kX3QgKnBtZCA9IHBvcHVsYXRlX3RvX3BtZChtbSwgYWRkcik7XG4gXG4gXHRpZiAoIXBtZClcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtMjQzNCwyMCAmIzQzOzI0MzQsMjIgQEAgc3RhdGljIGludCBpbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdHVuc2lnbmVkIGxvbmcgY3Vycl9wYWdlX2lkeCA9IDA7XG4gXHR1bnNpZ25lZCBsb25nIHJlbWFpbmluZ19wYWdlc190b3RhbCA9ICpudW07XG4gXHR1bnNpZ25lZCBsb25nIHBhZ2VzX3RvX3dyaXRlX2luX3BtZDtcbi1cdGludCByZXQ7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4gbW9yZTpcbi1cdHJldCA9IC1FRkFVTFQ7XG4tXHRwbWQgPSB3YWxrX3RvX3BtZChtbSwgYWRkcik7XG4tXHRpZiAoIXBtZClcbiYjNDM7XHRwbWQgPSBwb3B1bGF0ZV90b19wbWQobW0sIGFkZHIpO1xuJiM0MztcdGlmICghcG1kKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4gXG4gXHRwYWdlc190b193cml0ZV9pbl9wbWQgPSBtaW5fdCh1bnNpZ25lZCBsb25nLFxuIFx0XHRyZW1haW5pbmdfcGFnZXNfdG90YWwsIFBUUlNfUEVSX1BURSAtIHB0ZV9pbmRleChhZGRyKSk7XG4gXG4gXHQvKiBBbGxvY2F0ZSB0aGUgUFRFIGlmIG5lY2Vzc2FyeTsgdGFrZXMgUE1EIGxvY2sgb25jZSBvbmx5LiAqL1xuLVx0cmV0ID0gLUVOT01FTTtcbi1cdGlmIChwdGVfYWxsb2MobW0sIHBtZCkpXG4mIzQzO1x0aWYgKHB0ZV9hbGxvYyhtbSwgcG1kKSkge1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuIFxuIFx0d2hpbGUgKHBhZ2VzX3RvX3dyaXRlX2luX3BtZCkge1xuIFx0XHRpbnQgcHRlX2lkeCA9IDA7XG5AQCAtMjQ1NSwxNSAmIzQzOzI0NTcsMTQgQEAgc3RhdGljIGludCBpbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcbiBcdFx0c3RhcnRfcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBhZGRyLCBcdTAwMjZwdGVfbG9jayk7XG4gXHRcdGlmICghc3RhcnRfcHRlKSB7XG4tXHRcdFx0cmV0ID0gLUVGQVVMVDtcbiYjNDM7XHRcdFx0ZXJyID0gLUVGQVVMVDtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFx0XHRmb3IgKHB0ZSA9IHN0YXJ0X3B0ZTsgcHRlX2lkeCBcdTAwM2MgYmF0Y2hfc2l6ZTsgJiM0MzsmIzQzO3B0ZSwgJiM0MzsmIzQzO3B0ZV9pZHgpIHtcbi1cdFx0XHRpbnQgZXJyID0gaW5zZXJ0X3BhZ2VfaW5fYmF0Y2hfbG9ja2VkKHZtYSwgcHRlLFxuLVx0XHRcdFx0YWRkciwgcGFnZXNbY3Vycl9wYWdlX2lkeF0sIHByb3QpO1xuJiM0MztcdFx0XHRlcnIgPSBpbnNlcnRfcGFnZV9pbl9iYXRjaF9sb2NrZWQodm1hLCBwdGUsIGFkZHIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBwYWdlc1tjdXJyX3BhZ2VfaWR4XSwgcHJvdCk7XG4gXHRcdFx0aWYgKHVubGlrZWx5KGVycikpIHtcbiBcdFx0XHRcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGVfbG9jayk7XG4tXHRcdFx0XHRyZXQgPSBlcnI7XG4gXHRcdFx0XHRyZW1haW5pbmdfcGFnZXNfdG90YWwgLT0gcHRlX2lkeDtcbiBcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRcdH1cbkBAIC0yNDc2LDEwICYjNDM7MjQ3Nyw5IEBAIHN0YXRpYyBpbnQgaW5zZXJ0X3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHR9XG4gXHRpZiAocmVtYWluaW5nX3BhZ2VzX3RvdGFsKVxuIFx0XHRnb3RvIG1vcmU7XG4tXHRyZXQgPSAwO1xuIG91dDpcbiBcdCpudW0gPSByZW1haW5pbmdfcGFnZXNfdG90YWw7XG4tXHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIC8qKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtX2luc2VydF9wYWdlcyYjMzQ7LAogICAgJiMzNDtpb191cmluZ19tbWFwJiMzNDssCiAgICAmIzM0O3RjcF96ZXJvY29weV9yZWNlaXZlJiMzNDssCiAgICAmIzM0O3JpbmdfYnVmZmVyX21hcCYjMzQ7LAogICAgJiMzNDttbWFwX2FjdGlvbl9jb21wbGV0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBpbnNlcnRfcGFnZXNgIHdoZW4gcGFnZSB0YWJsZSBhbGxvY2F0aW9uIGZhaWxzLCByZXR1cm5pbmcgYC1FTk9NRU1gIGluc3RlYWQgb2YgYC1FRkFVTFRgLiBJdCBhbHNvIHJlbmFtZXMgYHdhbGtfdG9fcG1kYCB0byBgcG9wdWxhdGVfdG9fcG1kYCB0byBiZXR0ZXIgcmVmbGVjdCBpdHMgYmVoYXZpb3IuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBjYWxsZXJzIG9mIGB2bV9pbnNlcnRfcGFnZXNgIHN1Y2ggYXMgaW9fdXJpbmcsIHRjcCB6ZXJvY29weSwgYW5kIHRyYWNlIHJpbmcgYnVmZmVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMzNWVkYzg0MmIyMDYwN2YzNGQ3NjljOWU1ZjkwODA5ZmI0NmIxNDEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyA1IDE3OjMwOjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCBmZjMzOGMyYWJlOTIzLi4xNjA5MzQ3OWQzNDEwIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtMjI2OCw3ICYjNDM7MjI2OCw3IEBAIHZvaWQgemFwX3NwZWNpYWxfdm1hX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh6YXBfc3BlY2lhbF92bWFfcmFuZ2UpOwogCi1zdGF0aWMgcG1kX3QgKndhbGtfdG9fcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7c3RhdGljIHBtZF90ICpwb3B1bGF0ZV90b19wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlwZ2RfdCAqcGdkOwogCXA0ZF90ICpwNGQ7CkBAIC0yMjkzLDcgJiM0MzsyMjkzLDcgQEAgc3RhdGljIHBtZF90ICp3YWxrX3RvX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogcHRlX3QgKmdldF9sb2NrZWRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCSAgICAgIHNwaW5sb2NrX3QgKipwdGwpCiB7Ci0JcG1kX3QgKnBtZCA9IHdhbGtfdG9fcG1kKG1tLCBhZGRyKTsKJiM0MzsJcG1kX3QgKnBtZCA9IHBvcHVsYXRlX3RvX3BtZChtbSwgYWRkcik7CiAKIAlpZiAoIXBtZCkKIAkJcmV0dXJuIE5VTEw7CkBAIC0yNDM0LDIwICYjNDM7MjQzNCwyMiBAQCBzdGF0aWMgaW50IGluc2VydF9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCXVuc2lnbmVkIGxvbmcgY3Vycl9wYWdlX2lkeCA9IDA7CiAJdW5zaWduZWQgbG9uZyByZW1haW5pbmdfcGFnZXNfdG90YWwgPSAqbnVtOwogCXVuc2lnbmVkIGxvbmcgcGFnZXNfdG9fd3JpdGVfaW5fcG1kOwotCWludCByZXQ7CiYjNDM7CWludCBlcnIgPSAwOwogbW9yZToKLQlyZXQgPSAtRUZBVUxUOwotCXBtZCA9IHdhbGtfdG9fcG1kKG1tLCBhZGRyKTsKLQlpZiAoIXBtZCkKJiM0MzsJcG1kID0gcG9wdWxhdGVfdG9fcG1kKG1tLCBhZGRyKTsKJiM0MzsJaWYgKCFwbWQpIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwomIzQzOwl9CiAKIAlwYWdlc190b193cml0ZV9pbl9wbWQgPSBtaW5fdCh1bnNpZ25lZCBsb25nLAogCQlyZW1haW5pbmdfcGFnZXNfdG90YWwsIFBUUlNfUEVSX1BURSAtIHB0ZV9pbmRleChhZGRyKSk7CiAKIAkvKiBBbGxvY2F0ZSB0aGUgUFRFIGlmIG5lY2Vzc2FyeTsgdGFrZXMgUE1EIGxvY2sgb25jZSBvbmx5LiAqLwotCXJldCA9IC1FTk9NRU07Ci0JaWYgKHB0ZV9hbGxvYyhtbSwgcG1kKSkKJiM0MzsJaWYgKHB0ZV9hbGxvYyhtbSwgcG1kKSkgewomIzQzOwkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiYjNDM7CX0KIAogCXdoaWxlIChwYWdlc190b193cml0ZV9pbl9wbWQpIHsKIAkJaW50IHB0ZV9pZHggPSAwOwpAQCAtMjQ1NSwxNSAmIzQzOzI0NTcsMTQgQEAgc3RhdGljIGludCBpbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAogCQlzdGFydF9wdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKG1tLCBwbWQsIGFkZHIsICZhbXA7cHRlX2xvY2spOwogCQlpZiAoIXN0YXJ0X3B0ZSkgewotCQkJcmV0ID0gLUVGQVVMVDsKJiM0MzsJCQllcnIgPSAtRUZBVUxUOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJZm9yIChwdGUgPSBzdGFydF9wdGU7IHB0ZV9pZHggJmx0OyBiYXRjaF9zaXplOyAmIzQzOyYjNDM7cHRlLCAmIzQzOyYjNDM7cHRlX2lkeCkgewotCQkJaW50IGVyciA9IGluc2VydF9wYWdlX2luX2JhdGNoX2xvY2tlZCh2bWEsIHB0ZSwKLQkJCQlhZGRyLCBwYWdlc1tjdXJyX3BhZ2VfaWR4XSwgcHJvdCk7CiYjNDM7CQkJZXJyID0gaW5zZXJ0X3BhZ2VfaW5fYmF0Y2hfbG9ja2VkKHZtYSwgcHRlLCBhZGRyLAomIzQzOwkJCQkJCQkgIHBhZ2VzW2N1cnJfcGFnZV9pZHhdLCBwcm90KTsKIAkJCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCQkJcHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0ZV9sb2NrKTsKLQkJCQlyZXQgPSBlcnI7CiAJCQkJcmVtYWluaW5nX3BhZ2VzX3RvdGFsIC09IHB0ZV9pZHg7CiAJCQkJZ290byBvdXQ7CiAJCQl9CkBAIC0yNDc2LDEwICYjNDM7MjQ3Nyw5IEBAIHN0YXRpYyBpbnQgaW5zZXJ0X3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJfQogCWlmIChyZW1haW5pbmdfcGFnZXNfdG90YWwpCiAJCWdvdG8gbW9yZTsKLQlyZXQgPSAwOwogb3V0OgogCSpudW0gPSByZW1haW5pbmdfcGFnZXNfdG90YWw7Ci0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogLyoqCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MDMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9tZW1vcnkuY2AuIEl0IHNlZW1zIHRoZXkmIzM5O3JlIHJlbmFtaW5nIGB3YWxrX3RvX3BtZGAgdG8gYHBvcHVsYXRlX3RvX3BtZGAsIHdoaWNoIGlzIGFuIGludGVyZXN0aW5nIHNlbWFudGljIHNoaWZ0LiBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCByZW5hbWUgbGF0ZXI7IGZvciBub3csIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUgcmV0dXJuIHZhbHVlcy4gSXQgYWxzbyBzZWVtcyB0aGV5JiMzOTt2ZSBjaGFuZ2VkIGhvdyBgaW5zZXJ0X3BhZ2VzYCBoYW5kbGVzIGVycm9ycyBmcm9tIGBwb3B1bGF0ZV90b19wbWRgIChvcmlnaW5hbGx5IGB3YWxrX3RvX3BtZGApLCBtYWtpbmcgaXQgcmV0dXJuIGAtRU5PTUVNYCBpbnN0ZWFkIG9mIGAtRUZBVUxUYCBvbiBmYWlsdXJlLiBUaGV5JiMzOTt2ZSBhbHNvIGNsZWFuZWQgdXAgdGhlIGVycm9yIHJldHVybnMgZnJvbSB0aGUgcGF0Y2gsIGFuZCBJJiMzOTt2ZSBxdWlja2x5IGNvbmZpcm1lZCB0aGF0IGBwdGVfYWxsb2NgIHNob3VsZCBiZSBgLUVOT01FTWAsIGFuZCBgcHRlX29mZnNldF9tYXBfbG9ja2Agc2hvdWxkIGJlIGAtRUZBVUxUYCAoYXMgaXQgb3JpZ2luYWxseSB3YXMpLgoKV2FpdCBhIHNlY29uZOKApiB0aGUgY2hhbmdlIGZyb20gYC1FRkFVTFRgIHRvIGAtRU5PTUVNYCBmb3IgdGhlIGBwb3B1bGF0ZV90b19wbWRgIGZhaWx1cmUuIFRoYXQmIzM5O3MgdGhlIGtleS4gV2h5IHRoZSBjaGFuZ2U/IElzIHRoaXMgYSBzdGFuZGFyZGlzYXRpb24gaXNzdWUsIG9yIGlzIGl0IHJlbGF0ZWQgdG8gbWVtb3J5IGV4aGF1c3Rpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBjaGFuZ2VkLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIG90aGVyIGNoYW5nZXMgaW4gdGhlIHBhdGNoIGFuZCBjb25zaWRlciBob3cgaXQgaW1wYWN0cyB0aGUgb3RoZXIgY29kZSB0aGF0IGNhbGxzIGBpbnNlcnRfcGFnZXNgLiBMZXQmIzM5O3Mgc2VlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgdXNlZCwgc28gSSYjMzk7bGwgZ3JhYiBgZ3JlcHBlcmAgYW5kIGdldCBhIGNhbGwgZ3JhcGguIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBub3RlIHRoaXMgY2hhbmdlIGluIHBhcnRpY3VsYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5zZXJ0X3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmM9MjQxMz1zdGF0aWMgaW50IGluc2VydF9wYWdlX2luX2JhdGNoX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcHRlX3QgKnB0ZSxcbi0tXG5tbS9tZW1vcnkuYy0yNDIzLVxubW0vbWVtb3J5LmM6MjQyNDovKiBpbnNlcnRfcGFnZXMoKSBhbW9ydGl6ZXMgdGhlIGNvc3Qgb2Ygc3BpbmxvY2sgb3BlcmF0aW9uc1xubW0vbWVtb3J5LmMtMjQyNS0gKiB3aGVuIGluc2VydGluZyBwYWdlcyBpbiBhIGxvb3AuXG5tbS9tZW1vcnkuYy0yNDI2LSAqL1xubW0vbWVtb3J5LmM6MjQyNzpzdGF0aWMgaW50IGluc2VydF9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vbWVtb3J5LmMtMjQyOC1cdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBsb25nICpudW0sIHBncHJvdF90IHByb3QpXG4tLVxubW0vbWVtb3J5LmMtMjQ4NS0vKipcbm1tL21lbW9yeS5jOjI0ODY6ICogdm1faW5zZXJ0X3BhZ2VzIC0gaW5zZXJ0IG11bHRpcGxlIHBhZ2VzIGludG8gdXNlciB2bWEsIGJhdGNoaW5nIHRoZSBwbWQgbG9jay5cbm1tL21lbW9yeS5jLTI0ODctICogQHZtYTogdXNlciB2bWEgdG8gbWFwIHRvXG4tLVxubW0vbWVtb3J5LmMtMjQ5OS0gKi9cbm1tL21lbW9yeS5jOjI1MDA6aW50IHZtX2luc2VydF9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vbWVtb3J5LmMtMjUwMS1cdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBsb25nICpudW0pXG4tLVxubW0vbWVtb3J5LmMtMjUxMy1cdC8qIERlZmVyIHBhZ2UgcmVmY291bnQgY2hlY2tpbmcgdGlsbCB3ZSYjMzk7cmUgYWJvdXQgdG8gbWFwIHRoYXQgcGFnZS4gKi9cbm1tL21lbW9yeS5jOjI1MTQ6XHRyZXR1cm4gaW5zZXJ0X3BhZ2VzKHZtYSwgYWRkciwgcGFnZXMsIG51bSwgdm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCk7XG5tbS9tZW1vcnkuYy0yNTE1LX1cbm1tL21lbW9yeS5jOjI1MTY6RVhQT1JUX1NZTUJPTCh2bV9pbnNlcnRfcGFnZXMpO1xubW0vbWVtb3J5LmMtMjUxNy1cbi0tXG5tbS9tZW1vcnkuYz0yNTM5PWludCBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbW9yeS5jLTI1NDQtXHRucl9wYWdlcyA9IGFjdGlvbi1cdTAwM2VtYXBfa2VybmVsLm5yX3BhZ2VzO1xubW0vbWVtb3J5LmM6MjU0NTpcdHJldHVybiBpbnNlcnRfcGFnZXModm1hLCBhY3Rpb24tXHUwMDNlbWFwX2tlcm5lbC5zdGFydCxcbm1tL21lbW9yeS5jLTI1NDYtXHRcdFx0ICAgIGFjdGlvbi1cdTAwM2VtYXBfa2VybmVsLnBhZ2VzLFxuLS1cbm1tL21lbW9yeS5jPTI2MDg9c3RhdGljIGludCBfX3ZtX21hcF9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKipwYWdlcyxcbi0tXG5tbS9tZW1vcnkuYy0yNjIxLVxubW0vbWVtb3J5LmM6MjYyMjpcdHJldHVybiB2bV9pbnNlcnRfcGFnZXModm1hLCB1YWRkciwgcGFnZXMgJiM0Mzsgb2Zmc2V0LCBcdTAwMjZjb3VudCk7XG5tbS9tZW1vcnkuYy0yNjIzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTQ4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKlRyYWNpbmcgdGhlIFVzYWdlIG9mIGB2bV9pbnNlcnRfcGFnZXNgKioKCk9rYXksIHNvIGBpbnNlcnRfcGFnZXNgIGdldHMgY2FsbGVkIGJ5IGB2bV9pbnNlcnRfcGFnZXNgIGFuZCBgbWFwX2tlcm5lbF9wYWdlc19jb21wbGV0ZWAuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBOb3csIHRoZSBpbnRlcmVzdGluZyB0aGluZyBoZXJlIGlzIHRoYXQgYHZtX2luc2VydF9wYWdlc2AgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIFRoaXMgaXMgYSBrZXkgZGV0YWlsLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGF2YWlsYWJsZSB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCBwb3RlbnRpYWxseSBldmVuIG1vZHVsZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aGVyZSogdGhhdCBleHBvcnRlZCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBXaGVyZSBhcmUgdGhlIGNhbGwgc2l0ZXMgb2YgYHZtX2luc2VydF9wYWdlc2AgaXRzZWxmPyBUaGF0JiMzOTtzIHRoZSBjb3JlIHF1ZXN0aW9uIG5vdy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmluZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1faW5zZXJ0X3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jPTQzOT1zdGF0aWMgaW50IGFtZHhkbmFfaW5zZXJ0X3BhZ2VzKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibyxcbi0tXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy00NTUtXHRcdHZtX2ZsYWdzX21vZCh2bWEsIFZNX01JWEVETUFQLCBWTV9QRk5NQVApO1xuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmM6NDU2Olx0XHRyZXQgPSB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIGFiby1cdTAwM2ViYXNlLnBhZ2VzLFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmMtNDU3LVx0XHRcdFx0ICAgICAgXHUwMDI2bnVtX3BhZ2VzKTtcbi0tXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYz01MjI9c3RhdGljIGludCBhbWR4ZG5hX2dlbV9kbWFidWZfbW1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Ziwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmMtNTM4LVx0dm1fZmxhZ3NfbW9kKHZtYSwgVk1fTUlYRURNQVAsIFZNX1BGTk1BUCk7XG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYzo1Mzk6XHRyZXQgPSB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIGFiby1cdTAwM2ViYXNlLnBhZ2VzLFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmMtNTQwLVx0XHRcdCAgICAgIFx1MDAyNm51bV9wYWdlcyk7XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTQ1MzU9aW50IHZtX2luc2VydF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBwYWdlICopO1xuaW5jbHVkZS9saW51eC9tbS5oOjQ1MzY6aW50IHZtX2luc2VydF9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuaW5jbHVkZS9saW51eC9tbS5oLTQ1MzctXHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgbG9uZyAqbnVtKTtcbi0tXG5pb191cmluZy9tZW1tYXAuYz0yODQ9c3RhdGljIGludCBpb19yZWdpb25fbW1hcChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9tZW1tYXAuYy0yOTEtXHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EKTtcbmlvX3VyaW5nL21lbW1hcC5jOjI5MjpcdHJldHVybiB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIG1yLVx1MDAzZXBhZ2VzLCBcdTAwMjZucl9wYWdlcyk7XG5pb191cmluZy9tZW1tYXAuYy0yOTMtfVxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTc2MTM9c3RhdGljIGludCBfX3JiX21hcF92bWEoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsXG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzcwMS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc3MDI6XHRlcnIgPSB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIHBhZ2VzLCBcdTAwMjZucl9wYWdlcyk7XG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03NzAzLVxuLS1cbm1tL21lbW9yeS5jPTI0Mjc9c3RhdGljIGludCBpbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1vcnkuYy0yNDg1LS8qKlxubW0vbWVtb3J5LmM6MjQ4NjogKiB2bV9pbnNlcnRfcGFnZXMgLSBpbnNlcnQgbXVsdGlwbGUgcGFnZXMgaW50byB1c2VyIHZtYSwgYmF0Y2hpbmcgdGhlIHBtZCBsb2NrLlxubW0vbWVtb3J5LmMtMjQ4Ny0gKiBAdm1hOiB1c2VyIHZtYSB0byBtYXAgdG9cbi0tXG5tbS9tZW1vcnkuYy0yNDk5LSAqL1xubW0vbWVtb3J5LmM6MjUwMDppbnQgdm1faW5zZXJ0X3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9tZW1vcnkuYy0yNTAxLVx0XHRcdHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGxvbmcgKm51bSlcbi0tXG5tbS9tZW1vcnkuYy0yNTE1LX1cbm1tL21lbW9yeS5jOjI1MTY6RVhQT1JUX1NZTUJPTCh2bV9pbnNlcnRfcGFnZXMpO1xubW0vbWVtb3J5LmMtMjUxNy1cbi0tXG5tbS9tZW1vcnkuYz0yNjA4PXN0YXRpYyBpbnQgX192bV9tYXBfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICoqcGFnZXMsXG4tLVxubW0vbWVtb3J5LmMtMjYyMS1cbm1tL21lbW9yeS5jOjI2MjI6XHRyZXR1cm4gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgdWFkZHIsIHBhZ2VzICYjNDM7IG9mZnNldCwgXHUwMDI2Y291bnQpO1xubW0vbWVtb3J5LmMtMjYyMy19XG4tLVxubW0vbm9tbXUuYz0zNTA9RVhQT1JUX1NZTUJPTCh2bV9pbnNlcnRfcGFnZSk7XG5tbS9ub21tdS5jLTM1MS1cbm1tL25vbW11LmM6MzUyOmludCB2bV9pbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL25vbW11LmMtMzUzLVx0XHRcdHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGxvbmcgKm51bSlcbi0tXG5tbS9ub21tdS5jLTM1Ni19XG5tbS9ub21tdS5jOjM1NzpFWFBPUlRfU1lNQk9MKHZtX2luc2VydF9wYWdlcyk7XG5tbS9ub21tdS5jLTM1OC1cbi0tXG5uZXQvaXB2NC90Y3AuYz0yMDYyPXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaF9lcnJvcihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5uZXQvaXB2NC90Y3AuYy0yMDg4LVx0XHQvKiBXZSBjYWxsZWQgemFwX3ZtYV9yYW5nZSwgdHJ5IHRvIHJlaW5zZXJ0LiAqL1xubmV0L2lwdjQvdGNwLmM6MjA4OTpcdFx0ZXJyID0gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgKmFkZHJlc3MsXG5uZXQvaXB2NC90Y3AuYy0yMDkwLVx0XHRcdFx0ICAgICAgcGVuZGluZ19wYWdlcyxcbi0tXG5uZXQvaXB2NC90Y3AuYz0yMTEwPXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5uZXQvaXB2NC90Y3AuYy0yMTIzLVxubmV0L2lwdjQvdGNwLmM6MjEyNDpcdGVyciA9IHZtX2luc2VydF9wYWdlcyh2bWEsICphZGRyZXNzLCBwYWdlcywgXHUwMDI2cGFnZXNfcmVtYWluaW5nKTtcbm5ldC9pcHY0L3RjcC5jLTIxMjUtXHRwYWdlc19tYXBwZWQgPSBwYWdlc190b19tYXAgLSAodW5zaWduZWQgaW50KXBhZ2VzX3JlbWFpbmluZztcbm5ldC9pcHY0L3RjcC5jLTIxMjYtXHRieXRlc19tYXBwZWQgPSBQQUdFX1NJWkUgKiBwYWdlc19tYXBwZWQ7XG5uZXQvaXB2NC90Y3AuYzoyMTI3Olx0LyogRXZlbiBpZiB2bV9pbnNlcnRfcGFnZXMgZmFpbHMsIGl0IG1heSBoYXZlIHBhcnRpYWxseSBzdWNjZWVkZWQgaW5cbm5ldC9pcHY0L3RjcC5jLTIxMjgtXHQgKiBtYXBwaW5nIChzb21lIGJ1dCBub3QgYWxsIG9mIHRoZSBwYWdlcykuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg3MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDk0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB2bV9pbnNlcnRfcGFnZXNgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgdm1faW5zZXJ0X3BhZ2VzYCwgYSBmdW5jdGlvbiB0aGF0JiMzOTtzIHVzZWQgaW4gc2V2ZXJhbCBrZXkgYXJlYXMg4oCTIGBpb191cmluZy9tZW1tYXAuY2AsIHRyYWNpbmcsIFRDUCB6ZXJvLWNvcHksIGFuZCBldmVuIEFNRCBHUFUgZHJpdmVycy4gVGhlIHBhdGNoIGZvY3VzZXMgb24gaG93IGBpbnNlcnRfcGFnZXNgIGhhbmRsZXMgZXJyb3JzLCBzcGVjaWZpY2FsbHkgd2hlbiBhbGxvY2F0aW5nIHBhZ2UgdGFibGUgZW50cmllcyAoUFRFcykuCgpJbml0aWFsbHksIHRoZSBmdW5jdGlvbiBzZWVtcyB0byBoYXZlIGEgYml0IG9mIGEgY29udm9sdXRlZCBlcnJvciBoYW5kbGluZyBzdHJhdGVneS4gVGhlIG9yaWdpbmFsIGNvZGUgc2V0cyBgcmV0YCB0byBgLUVOT01FTWAsIHRoZW4gY2hlY2tzIGlmIGBwdGVfYWxsb2NgIHN1Y2NlZWRzLiBJZiBub3QsIGl0IGp1bXBzIHRvIGBvdXRgLiBIb3dldmVyLCBpZiBgcHRlX29mZnNldF9tYXBfbG9ja2AgKmFsc28qIGZhaWxzIGxhdGVyLCBpdCBjaGFuZ2VzIGByZXRgIHRvIGAtRUZBVUxUYC4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHN0cmVhbWxpbmluZyB0aGlzLCBtb3ZpbmcgdGhlIGVycm9yIGNoZWNrIGZvciBgcHRlX2FsbG9jYCBpbmxpbmUgd2l0aCB0aGUgYWxsb2NhdGlvbiBpdHNlbGYgYW5kIGFzc2lnbmluZyB0aGUgZXJyb3IgY29kZSB0byBgZXJyYC4gVGhpcyBzZWVtcyBtb3JlIHN0cmFpZ2h0Zm9yd2FyZC4KCkhlcmUsIGluIHRoZSByZXZpc2VkIGNvZGUsIGBlcnJgIGlzIGluaXRpYWxpemVkIHRvIDAuIEluc2lkZSB0aGUgYHdoaWxlYCBsb29wLCBpZiBgaW5zZXJ0X3BhZ2VfaW5fYmF0Y2hfbG9ja2VkYCByZXR1cm5zIGFuIGVycm9yLCBpdCBpcyBzdG9yZWQgaW4gYGVycmAuCgpJIHRoZW4gc2VlIHRoYXQsIGluIHRoZSBvcmlnaW5hbCBjb2RlLCBgcmV0YCB3YXMgc2V0IHRvIGAtRUZBVUxUYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBgbW9yZTpgIGxhYmVsLiBIb3dldmVyLCBub3cgYGVycmAgaXMgaW5pdGlhbGl6ZWQgdG8gMC4gSW5zdGVhZCBvZiBgd2Fsa190b19wbWRgLCB0aGUgcGF0Y2hlZCBjb2RlIHVzZXMgYHBvcHVsYXRlX3RvX3BtZGAsIGFuZCwgaWYgYHBvcHVsYXRlX3RvX3BtZGAgZmFpbHMsIGAtRU5PTUVNYCBpcyBhc3NpZ25lZCB0byBgZXJyYC4KCkhvbGQgb24gYSBzZWMsIHdoYXQmIzM5O3MgdGhpcyBgcG9wdWxhdGVfdG9fcG1kYD8gSXQgbG9va3MgbGlrZSBhIHNpbXBsZSByZW5hbWUgb2YgYHdhbGtfdG9fcG1kYC4gTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQmIzM5O3MgYSBzaW1wbGUgcmVuYW1lLiBMZXQmIzM5O3MgZ28gbG9vayBhdCBgbW0vbWVtb3J5LmNgIGFyb3VuZCBsaW5lIDIyNjggdG8gY29uZmlybS4gSXQgbWlnaHQgbG9vayBsaWtlIGp1c3QgYSBuYW1lIGNoYW5nZSwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byBtYWtlIHN1cmUgaXQgZnVuY3Rpb25zIGFzIHRoZSBvbGQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI2ODpcdH1cbjIyNjk6XHRFWFBPUlRfU1lNQk9MX0dQTCh6YXBfc3BlY2lhbF92bWFfcmFuZ2UpO1xuMjI3MDpcdFxuMjI3MTpcdHN0YXRpYyBwbWRfdCAqcG9wdWxhdGVfdG9fcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4yMjcyOlx0e1xuMjI3MzpcdFx0cGdkX3QgKnBnZDtcbjIyNzQ6XHRcdHA0ZF90ICpwNGQ7XG4yMjc1Olx0XHRwdWRfdCAqcHVkO1xuMjI3NjpcdFx0cG1kX3QgKnBtZDtcbjIyNzc6XHRcbjIyNzg6XHRcdHBnZCA9IHBnZF9vZmZzZXQobW0sIGFkZHIpO1xuMjI3OTpcdFx0cDRkID0gcDRkX2FsbG9jKG1tLCBwZ2QsIGFkZHIpO1xuMjI4MDpcdFx0aWYgKCFwNGQpXG4yMjgxOlx0XHRcdHJldHVybiBOVUxMO1xuMjI4MjpcdFx0cHVkID0gcHVkX2FsbG9jKG1tLCBwNGQsIGFkZHIpO1xuMjI4MzpcdFx0aWYgKCFwdWQpXG4yMjg0Olx0XHRcdHJldHVybiBOVUxMO1xuMjI4NTpcdFx0cG1kID0gcG1kX2FsbG9jKG1tLCBwdWQsIGFkZHIpO1xuMjI4NjpcdFx0aWYgKCFwbWQpXG4yMjg3Olx0XHRcdHJldHVybiBOVUxMO1xuMjI4ODpcdFxuMjI4OTpcdFx0Vk1fQlVHX09OKHBtZF90cmFuc19odWdlKCpwbWQpKTtcbjIyOTA6XHRcdHJldHVybiBwbWQ7XG4yMjkxOlx0fVxuMjI5MjpcdFxuMjI5MzpcdHB0ZV90ICpnZXRfbG9ja2VkX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuMjI5NDpcdFx0XHQgICAgICBzcGlubG9ja190ICoqcHRsKVxuMjI5NTpcdHtcbjIyOTY6XHRcdHBtZF90ICpwbWQgPSBwb3B1bGF0ZV90b19wbWQobW0sIGFkZHIpO1xuMjI5NzpcdFxuMjI5ODpcdFx0aWYgKCFwbWQpXG4yMjk5Olx0XHRcdHJldHVybiBOVUxMO1xuMjMwMDpcdFx0cmV0dXJuIHB0ZV9hbGxvY19tYXBfbG9jayhtbSwgcG1kLCBhZGRyLCBwdGwpO1xuMjMwMTpcdH1cbjIzMDI6XHRcbjIzMDM6XHRzdGF0aWMgYm9vbCB2bV9taXhlZF96ZXJvcGFnZV9hbGxvd2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuMjMwNDpcdHtcbjIzMDU6XHRcdFZNX1dBUk5fT05fT05DRSh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1BGTk1BUCk7XG4yMzA2Olx0XHQvKlxuMjMwNzpcdFx0ICogV2hvZXZlciB3YW50cyB0byBmb3JiaWQgdGhlIHplcm9wYWdlIGFmdGVyIHNvbWUgemVyb3BhZ2VzXG4yMzA4Olx0XHQgKiBtaWdodCBhbHJlYWR5IGhhdmUgYmVlbiBtYXBwZWQgaGFzIHRvIHNjYW4gdGhlIHBhZ2UgdGFibGVzIGFuZFxuMjMwOTpcdFx0ICogYmFpbCBvdXQgb24gYW55IHplcm9wYWdlcy4gWmVyb3BhZ2VzIGluIENPVyBtYXBwaW5ncyBjYW5cbjIzMTA6XHRcdCAqIGJlIHVuc2hhcmVkIHVzaW5nIEZBVUxUX0ZMQUdfVU5TSEFSRSBmYXVsdHMuXG4yMzExOlx0XHQgKi9cbjIzMTI6XHRcdGlmIChtbV9mb3JiaWRzX3plcm9wYWdlKHZtYS1cdTAwM2V2bV9tbSkpXG4yMzEzOlx0XHRcdHJldHVybiBmYWxzZTtcbjIzMTQ6XHRcdC8qIHplcm9wYWdlcyBpbiBDT1cgbWFwcGluZ3MgYXJlIGNvbW1vbiBhbmQgdW5wcm9ibGVtYXRpYy4gKi9cbjIzMTU6XHRcdGlmIChpc19jb3dfbWFwcGluZyh2bWEtXHUwMDNldm1fZmxhZ3MpKVxuMjMxNjpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjIzMTc6XHRcdC8qIE1hcHBpbmdzIHRoYXQgZG8gbm90IGFsbG93IGZvciB3cml0YWJsZSBQVEVzIGFyZSB1bnByb2JsZW1hdGljLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwODEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYWdlIFRhYmxlIFBvcHVsYXRpb24gTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHBvcHVsYXRlX3RvX3BtZGAgZnVuY3Rpb24uIFRoZSBjb2RlJiMzOTtzIGFsbG9jYXRpbmcgcGFnZSB0YWJsZSBlbnRyaWVzIOKAkyBQR0QsIFA0RCwgUFVELCBhbmQgUE1ELiBJdCYjMzk7cyBjbGVhcmx5ICpwb3B1bGF0aW5nKiB0aGUgcGFnZSB0YWJsZXMsIG5vdCBqdXN0IHRyYXZlcnNpbmcgdGhlbS4gVGhlIHJlbmFtZSBpcyBzcG90IG9uOyBpdCByZWZsZWN0cyB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZy4gIEFuZCBzaW5jZSB3ZSYjMzk7cmUgYWxsb2NhdGluZyBtZW1vcnksIGlmIGFueSBvZiB0aGVzZSBhbGxvY2F0aW9ucyBmYWlsLCBpdCYjMzk7cyBhbiBPdXQtT2YtTWVtb3J5IChPT00pIHNpdHVhdGlvbi4gUmV0dXJuaW5nIGAtRU5PTUVNYCBpbnN0ZWFkIG9mIGAtRUZBVUxUYCBtYWtlcyBwZXJmZWN0IHNlbnNlIGluIHRoaXMgY29udGV4dCDigJMgbXVjaCBtb3JlIGFjY3VyYXRlIGVycm9yIHJlcG9ydGluZy4KClRoaXMgbWVhbnMgdGhlcmUmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgcmV0dXJuIHZhbHVlIG9mIGBpbnNlcnRfcGFnZXNgLiBgaW5zZXJ0X3BhZ2VzYCBpcyBjYWxsZWQgZnJvbSBgdm1faW5zZXJ0X3BhZ2VzYCBhbmQgYG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGVgLiAgSW50ZXJlc3RpbmcuIExldCBtZSBjaGVjayB0aGUgY2FsbGVycyBvZiBpbnNlcnRfcGFnZXMgdG8gc2VlIHdoYXQgbWlnaHQgYmUgcmVhY2hhYmxlLiBgdm1faW5zZXJ0X3BhZ2VzYCBpcyB1c2VkIGluIGBpb191cmluZy9tZW1tYXAuY2AsIGBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY2AsIGFuZCBgbmV0L2lwdjQvdGNwLmNgLiBPa2F5LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUuIEdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIE9PTSBzaXR1YXRpb25zLCBmdXp6aW5nIHRoZXNlIGNhbGwgc2l0ZXMgc291bmRzIGxpa2UgYSB2ZXJ5IGdvb2QgaWRlYS4gCgpMZXQmIzM5O3MgZm9jdXMgb24gYGlvX3VyaW5nL21lbW1hcC5jYCBhbmQgYG5ldC9pcHY0L3RjcC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGNhbGwgc2l0ZXMgY2FuIGJlIHRyaWdnZXJlZC4gYGlvX3JlZ2lvbl9tbWFwYCBpbiBgaW9fdXJpbmcvbWVtbWFwLmNgIGlzIHJlYWNoYWJsZSB2aWEgYG1tYXBgIG9uIGFuIGBpb191cmluZ2AgZmlsZSBkZXNjcmlwdG9yLCBhbmQgYHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2hgIGluIGBuZXQvaXB2NC90Y3AuY2AgaXMgdHJpZ2dlcmVkIGJ5IFRDUCB6ZXJvLWNvcHkgcmVjZWl2ZSBvcGVyYXRpb25zLgoKQWxyaWdodCwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYGlvX3VyaW5nL21lbW1hcC5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBpb19yZWdpb25fbW1hcGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3JlZ2lvbl9tbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL21lbW1hcC5jPTI3MT1zdGF0aWMgdm9pZCAqaW9fdXJpbmdfdmFsaWRhdGVfbW1hcF9yZXF1ZXN0KHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3QgcGdvZmYpXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmMtMjgzLVxuaW9fdXJpbmcvbWVtbWFwLmM6Mjg0OnN0YXRpYyBpbnQgaW9fcmVnaW9uX21tYXAoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG5pb191cmluZy9tZW1tYXAuYy0yODUtXHRcdFx0ICBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmM9Mjk1PV9fY29sZCBpbnQgaW9fdXJpbmdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmMtMzE3LVx0cmVnaW9uID0gaW9fbW1hcF9nZXRfcmVnaW9uKGN0eCwgdm1hLVx1MDAzZXZtX3Bnb2ZmKTtcbmlvX3VyaW5nL21lbW1hcC5jOjMxODpcdHJldHVybiBpb19yZWdpb25fbW1hcChjdHgsIHJlZ2lvbiwgdm1hLCBwYWdlX2xpbWl0KTtcbmlvX3VyaW5nL21lbW1hcC5jLTMxOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxODAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyB0aGUgYGlvX3VyaW5nX21tYXBgIFBhdGgqKgoKUmlnaHQsIHNvIGBpb191cmluZ19tbWFwYCBpcyBjYWxsaW5nIGBpb19yZWdpb25fbW1hcGAsIHdoaWNoLCBpbiB0dXJuLCBpcyBjYWxsaW5nIGB2bV9pbnNlcnRfcGFnZXNgLiBUaGF0JiMzOTtzIGEgcHJldHR5IGxvdy1sZXZlbCBmdW5jdGlvbiBjYWxsIHNlcXVlbmNlLiBHaXZlbiBob3cgZnVuZGFtZW50YWwgYHZtX2luc2VydF9wYWdlc2AgaXMsIGFuZCBjb25zaWRlcmluZyBob3cgb2Z0ZW4gSSYjMzk7dmUgc2VlbiBpdCB1c2VkIGluIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHRzLCBpdCYjMzk7cyBzYWZlIHRvIGFzc3VtZSB0aGlzIGBpb191cmluZ19tbWFwYCBwYXRoIGlzICpoaWdobHkqIHJlYWNoYWJsZS4gQSB2ZXJ5IGltcG9ydGFudCBjb21wb25lbnQgb2YgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgYmV0dGVyLgoKTm93LCB3aGVyZSBlbHNlIG1pZ2h0IHRoaXMgdGVjaG5pcXVlLCBvciBzb21ldGhpbmcgc2ltaWxhciwgYmUgZW1wbG95ZWQ/IFBlcmhhcHMgdGhlcmUgYXJlIG90aGVyIGludGVyZXN0aW5nIHBsYWNlcyB0byBsb29rIGZvciBhIHNpbWlsYXIgcGF0dGVybi4gU3BlY2lmaWNhbGx5LCBJIHJlY2FsbCB0aGUgemVyby1jb3B5IG9wZXJhdGlvbnMgb24gVENQIHNvY2tldHMuIExldCBtZSBjaGVjayB0aGUgY29kZSBmb3IgYHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2hgIGluIGBuZXQvaXB2NC90Y3AuY2AuIEl0JiMzOTtzIHBvc3NpYmxlIHRoZXJlIGlzIHNvbWUgY29tbW9uYWxpdHksIG9yIHBlcmhhcHMgSSBjYW4gc2VlIGhvdyB0aGV5IGFyZSBkaWZmZXJlbnQgaW4gdGhlaXIgcmVzcGVjdGl2ZSB1c2UgY2FzZXMuIEkmIzM5O2xsIHNlZSB3aGF0IEkgY2FuIGxlYXJuIGFib3V0IHRoZWlyIHJlbGF0aW9uIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGluIGdlbmVyYWwsIGFuZCBwb3RlbnRpYWxseSBsb29rIGZvciB3YXlzIHRvIG9wdGltaXplIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0yMDM1PXN0YXRpYyBpbnQgdGNwX3pjX2hhbmRsZV9sZWZ0b3ZlcihzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTIwNjEtXG5uZXQvaXB2NC90Y3AuYzoyMDYyOnN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaF9lcnJvcihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm5ldC9pcHY0L3RjcC5jLTIwNjMtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBwYWdlICoqcGVuZGluZ19wYWdlcyxcbi0tXG5uZXQvaXB2NC90Y3AuYy0yMTA5LVxubmV0L2lwdjQvdGNwLmM6MjExMDpzdGF0aWMgaW50IHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5uZXQvaXB2NC90Y3AuYy0yMTExLVx0XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTIxMzYtXHQvKiBFcnJvcjogbWF5YmUgemFwIGFuZCByZXRyeSAmIzQzOyByb2xsYmFjayBzdGF0ZSBmb3IgZmFpbGVkIGluc2VydHMuICovXG5uZXQvaXB2NC90Y3AuYzoyMTM3Olx0cmV0dXJuIHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2hfZXJyb3Iodm1hLCBwYWdlcyAmIzQzOyBwYWdlc19tYXBwZWQsXG5uZXQvaXB2NC90Y3AuYy0yMTM4LVx0XHRwYWdlc19yZW1haW5pbmcsIGFkZHJlc3MsIGxlbmd0aCwgc2VxLCB6YywgdG90YWxfYnl0ZXNfdG9fbWFwLFxuLS1cbm5ldC9pcHY0L3RjcC5jPTIxOTU9c3RhdGljIGludCB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwLmMtMjMwMS1cdFx0XHQgKi9cbm5ldC9pcHY0L3RjcC5jOjIzMDI6XHRcdFx0cmV0ID0gdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaCh2bWEsIHBhZ2VzLFxubmV0L2lwdjQvdGNwLmMtMjMwMy1cdFx0XHRcdFx0XHRcdCAgIHBhZ2VzX3RvX21hcCxcbi0tXG5uZXQvaXB2NC90Y3AuYy0yMzEyLVx0aWYgKHBhZ2VzX3RvX21hcCkge1xubmV0L2lwdjQvdGNwLmM6MjMxMzpcdFx0cmV0ID0gdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaCh2bWEsIHBhZ2VzLCBwYWdlc190b19tYXAsXG5uZXQvaXB2NC90Y3AuYy0yMzE0LVx0XHRcdFx0XHRcdCAgIFx1MDAyNmFkZHJlc3MsIFx1MDAyNmxlbmd0aCwgXHUwMDI2c2VxLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA2MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBaZXJvLUNvcHkgVENQIFJlY2VpdmUqKgoKT2theSwgc28gYHRjcF96ZXJvY29weV9yZWNlaXZlYCBpcyBleHBvc2VkIHRocm91Z2ggYGdldHNvY2tvcHQoVENQX1pFUk9DT1BZX1JFQ0VJVkUpYC4gVGhhdCYjMzk7cyB3aGVyZSB3ZSBzdGFydC4gVGhpcyBwYXRjaCBjaGFuZ2VzIGhvdyBgdm1faW5zZXJ0X3BhZ2VzYCBiZWhhdmVzIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUsIHJldHVybmluZyBgLUVOT01FTWAgaW5zdGVhZCBvZiBgLUVGQVVMVGAuIFRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc28gaXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGZ1bmN0aW9uczogYHZtX2luc2VydF9wYWdlc2AsIGBpb191cmluZ19tbWFwYCwgYW5kIG9mIGNvdXJzZSwgYHRjcF96ZXJvY29weV9yZWNlaXZlYCBpdHNlbGYuIFdhaXQgYSBtaW51dGUuLi4gYHZtX2luc2VydF9wYWdlc2AgaXMgZXhwb3J0ZWQ/IFRoYXQgbWFrZXMgaXQgYW4gZXZlbiBiZXR0ZXIgdGFyZ2V0ISBBbmQgaXQgbG9va3MgbGlrZSBgaW5zZXJ0X3BhZ2VzYCBpcyB0aGUgc3RhdGljIHZhcmlhbnQsIHdoaWNoIGlzIHRoZSBvbmUgYmVpbmcgZGlyZWN0bHkgbW9kaWZpZWQuIFBlcmZlY3QuIExldCYjMzk7cyBhZGQgYWxsIHRocmVlIHRvIHRoZSBmdXp6aW5nIHRhcmdldCBsaXN0LgoKTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBpb191cmluZ2AgcmVxdWlyZXMgYENPTkZJR19JT19VUklOR2AsIG9idmlvdXNseS4gYHRjcF96ZXJvY29weV9yZWNlaXZlYCBuZWVkcyBgQ09ORklHX0lORVRgLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQsIHNvIHdlJiMzOTtyZSBnb29kIHRoZXJlLiBBbmQgYHZtX2luc2VydF9wYWdlc2AgaXMgaW4gYG1tL21lbW9yeS5jYCwgd2hpY2ggaXMgYWx3YXlzIGNvbXBpbGVkIGluLCBzbyB0aGF0JiMzOTtzIGVhc3kuIFNvLCBlbmFibGluZyBgSU9fVVJJTkdgIHNlZW1zIGxpa2UgdGhlIHNtYXJ0IG1vdmUgaGVyZS4KCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgaW9fdXJpbmdfbW1hcGAgaW4gYGlvX3VyaW5nL21lbW1hcC5jYCBhbmQgYmVnaW4gY3JhZnRpbmcgc29tZSB0ZXN0IGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb191cmluZ19tbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvX3VyaW5nLmM9MjcwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpb191cmluZ19mb3BzID0ge1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzA5LVx0LnJlbGVhc2VcdD0gaW9fdXJpbmdfcmVsZWFzZSxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjcxMDpcdC5tbWFwXHRcdD0gaW9fdXJpbmdfbW1hcCxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjcxMS1cdC5nZXRfdW5tYXBwZWRfYXJlYSA9IGlvX3VyaW5nX2dldF91bm1hcHBlZF9hcmVhLFxuLS1cbmlvX3VyaW5nL21lbW1hcC5jPTI4ND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9tbWFwKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTI5NC1cbmlvX3VyaW5nL21lbW1hcC5jOjI5NTpfX2NvbGQgaW50IGlvX3VyaW5nX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuaW9fdXJpbmcvbWVtbWFwLmMtMjk2LXtcbi0tXG5pb191cmluZy9tZW1tYXAuYz0zMjE9dW5zaWduZWQgbG9uZyBpb191cmluZ19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTM3MC0gKiBEcm9wIHRoZSBwYWdlcyB0aGF0IHdlcmUgaW5pdGlhbGx5IHJlZmVyZW5jZWQgYW5kIGFkZGVkIGluXG5pb191cmluZy9tZW1tYXAuYzozNzE6ICogaW9fdXJpbmdfbW1hcCgpLiBXZSBjYW5ub3QgaGF2ZSBoYWQgYSBtcmVtYXAoKSBhcyB0aGF0IGlzbiYjMzk7dCBzdXBwb3J0ZWQsXG5pb191cmluZy9tZW1tYXAuYy0zNzItICogaGVuY2UgdGhlIHZtYSBzaG91bGQgYmUgaWRlbnRpY2FsIHRvIHRoZSBvbmUgd2UgaW5pdGlhbGx5IHJlZmVyZW5jZWQgYW5kXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmM9Mzg0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaW9fdXJpbmdfbm9tbXVfdm1fb3BzID0ge1xuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTM4Ny1cbmlvX3VyaW5nL21lbW1hcC5jOjM4ODppbnQgaW9fdXJpbmdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5pb191cmluZy9tZW1tYXAuYy0zODkte1xuLS1cbmlvX3VyaW5nL21lbW1hcC5oPTE1PXVuc2lnbmVkIGxvbmcgaW9fdXJpbmdfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5pb191cmluZy9tZW1tYXAuaC0xNy1cdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgZmxhZ3MpO1xuaW9fdXJpbmcvbWVtbWFwLmg6MTg6aW50IGlvX3VyaW5nX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbmlvX3VyaW5nL21lbW1hcC5oLTE5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI3NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKklPX1VSSU5HIGFuZCBaZXJvLUNvcHkgUmVjZXB0aW9uKioKCkFscmlnaHQsIHllcCwgY29uZmlybWVkOiBgaW9fdXJpbmdfbW1hcGAgaXMgKnRoZSogbW1hcCBoYW5kbGVyIGltcGxlbWVudGF0aW9uIHNwZWNpZmljYWxseSBmb3IgaW9fdXJpbmcuIFRoYXQmIzM5O3MgYSBnaXZlbi4gTm93LCBsZXQmIzM5O3MgcGl2b3QgYW5kIGRpZyBpbnRvIGB0Y3BfemVyb2NvcHlfcmVjZWl2ZWAuIFRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIHplcm8tY29weSBpbiB0aGUgVENQIHJlY2VpdmUgY29udGV4dC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGBpb191cmluZ19tbWFwYCBoYW5kbGVyIGZpdHMgaW50byB0aGF0IHBpY3R1cmU7IHRoZSBtZW1vcnktbWFwcGVkIHJlZ2lvbnMgaW4gcGxheSBhbmQgdGhlIGRhdGEgbW92ZW1lbnQsIG9yIGxhY2sgdGhlcmVvZiwgYXJlIHRoZSBrZXkgYXNwZWN0cyBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24uIFdlJiMzOTtsbCBiZSBsb29raW5nIGF0IGhvdyB3ZSYjMzk7cmUgbWFwcGluZyB0aGUgYnVmZmVycywgcGFzc2luZyB0aGVtIHRvIHRoZSBrZXJuZWwgYW5kIGhvdyB0aGUgZGF0YSBpcyByZWFkIGludG8gbWVtb3J5LiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBkb2VzbiYjMzk7dCwgZGVwZW5kaW5nIG9uIGhvdyBpdCBpcyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX3plcm9jb3B5X3JlY2VpdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0xOTM1PXN0YXRpYyB2b2lkIHRjcF96ZXJvY29weV9zZXRfaGludF9mb3Jfc2tiKHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcC5jOjE5MzY6XHRcdFx0XHRcdCAgc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6Yyxcbm5ldC9pcHY0L3RjcC5jLTE5MzctXHRcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZnNldClcbi0tXG5uZXQvaXB2NC90Y3AuYz0xOTc1PXN0YXRpYyBpbnQgcmVjZWl2ZV9mYWxsYmFja190b19jb3B5KHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcC5jOjE5NzY6XHRcdFx0XHQgICAgc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YywgaW50IGlucSxcbm5ldC9pcHY0L3RjcC5jLTE5NzctXHRcdFx0XHQgICAgc3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgKnRzcylcbi0tXG5uZXQvaXB2NC90Y3AuYy0yMDEwLVxubmV0L2lwdjQvdGNwLmM6MjAxMTpzdGF0aWMgaW50IHRjcF9jb3B5X3N0cmFnZ2xlcl9kYXRhKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsXG5uZXQvaXB2NC90Y3AuYy0yMDEyLVx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGNvcHlsZW4sXG4tLVxubmV0L2lwdjQvdGNwLmMtMjAzNC1cbm5ldC9pcHY0L3RjcC5jOjIwMzU6c3RhdGljIGludCB0Y3BfemNfaGFuZGxlX2xlZnRvdmVyKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsXG5uZXQvaXB2NC90Y3AuYy0yMDM2LVx0XHRcdFx0ICBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwLmM9MjA2Mj1zdGF0aWMgaW50IHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2hfZXJyb3Ioc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubmV0L2lwdjQvdGNwLmMtMjA2Ny1cdFx0XHRcdFx0ICAgICAgdTMyICpzZXEsXG5uZXQvaXB2NC90Y3AuYzoyMDY4Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLFxubmV0L2lwdjQvdGNwLmMtMjA2OS1cdFx0XHRcdFx0ICAgICAgdTMyIHRvdGFsX2J5dGVzX3RvX21hcCxcbi0tXG5uZXQvaXB2NC90Y3AuYz0yMTEwPXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5uZXQvaXB2NC90Y3AuYy0yMTE1LVx0XHRcdFx0XHR1MzIgKnNlcSxcbm5ldC9pcHY0L3RjcC5jOjIxMTY6XHRcdFx0XHRcdHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsXG5uZXQvaXB2NC90Y3AuYy0yMTE3LVx0XHRcdFx0XHR1MzIgdG90YWxfYnl0ZXNfdG9fbWFwKVxuLS1cbm5ldC9pcHY0L3RjcC5jPTIxNDM9c3RhdGljIHZvaWQgdGNwX3pjX2ZpbmFsaXplX3J4X3RzdGFtcChzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2NC90Y3AuYzoyMTQ0Olx0XHRcdFx0ICAgICAgc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6Yyxcbm5ldC9pcHY0L3RjcC5jLTIxNDUtXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZ19pbnRlcm5hbCAqdHNzKVxuLS1cbm5ldC9pcHY0L3RjcC5jPTIxNjk9c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF90Y3Bfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTIxOTQtI2RlZmluZSBUQ1BfWkVST0NPUFlfUEFHRV9CQVRDSF9TSVpFIDMyXG5uZXQvaXB2NC90Y3AuYzoyMTk1OnN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjQvdGNwLmM6MjE5NjpcdFx0XHRcdHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsXG5uZXQvaXB2NC90Y3AuYy0yMTk3LVx0XHRcdFx0c3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgKnRzcylcbi0tXG5uZXQvaXB2NC90Y3AuYz00NDgxPWludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbi0tXG5uZXQvaXB2NC90Y3AuYy00NzQzLVx0XHRzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZ19pbnRlcm5hbCB0c3M7XG5uZXQvaXB2NC90Y3AuYzo0NzQ0Olx0XHRzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgemMgPSB7fTtcbm5ldC9pcHY0L3RjcC5jLTQ3NDUtXHRcdGludCBlcnI7XG4tLVxubmV0L2lwdjQvdGNwLmMtNDc0OS1cdFx0aWYgKGxlbiBcdTAwM2MgMCB8fFxubmV0L2lwdjQvdGNwLmM6NDc1MDpcdFx0ICAgIGxlbiBcdTAwM2Mgb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBsZW5ndGgpKVxubmV0L2lwdjQvdGNwLmMtNDc1MS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvaXB2NC90Y3AuYy00NzY3LVx0XHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XG5uZXQvaXB2NC90Y3AuYzo0NzY4Olx0XHRlcnIgPSB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzaywgXHUwMDI2emMsIFx1MDAyNnRzcyk7XG5uZXQvaXB2NC90Y3AuYy00NzY5LVx0XHRlcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFRfS0VSTihzaywgbGV2ZWwsIG9wdG5hbWUsXG4tLVxubmV0L2lwdjQvdGNwLmMtNDc3MS1cdFx0c29ja29wdF9yZWxlYXNlX3NvY2soc2spO1xubmV0L2lwdjQvdGNwLmM6NDc3MjpcdFx0aWYgKGxlbiBcdTAwM2U9IG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgbXNnX2ZsYWdzKSlcbm5ldC9pcHY0L3RjcC5jLTQ3NzMtXHRcdFx0Z290byB6ZXJvY29weV9yY3ZfY21zZztcbm5ldC9pcHY0L3RjcC5jLTQ3NzQtXHRcdHN3aXRjaCAobGVuKSB7XG5uZXQvaXB2NC90Y3AuYzo0Nzc1Olx0XHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgbXNnX2ZsYWdzKTpcbm5ldC9pcHY0L3RjcC5jLTQ3NzYtXHRcdFx0Z290byB6ZXJvY29weV9yY3ZfY21zZztcbm5ldC9pcHY0L3RjcC5jOjQ3Nzc6XHRcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBtc2dfY29udHJvbGxlbik6XG5uZXQvaXB2NC90Y3AuYzo0Nzc4Olx0XHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgbXNnX2NvbnRyb2wpOlxubmV0L2lwdjQvdGNwLmM6NDc3OTpcdFx0Y2FzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIGZsYWdzKTpcbm5ldC9pcHY0L3RjcC5jOjQ3ODA6XHRcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBjb3B5YnVmX2xlbik6XG5uZXQvaXB2NC90Y3AuYzo0NzgxOlx0XHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgY29weWJ1Zl9hZGRyZXNzKTpcbm5ldC9pcHY0L3RjcC5jOjQ3ODI6XHRcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBlcnIpOlxubmV0L2lwdjQvdGNwLmMtNDc4My1cdFx0XHRnb3RvIHplcm9jb3B5X3Jjdl9za19lcnI7XG5uZXQvaXB2NC90Y3AuYzo0Nzg0Olx0XHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgaW5xKTpcbm5ldC9pcHY0L3RjcC5jLTQ3ODUtXHRcdFx0Z290byB6ZXJvY29weV9yY3ZfaW5xO1xubmV0L2lwdjQvdGNwLmM6NDc4NjpcdFx0Y2FzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIGxlbmd0aCk6XG5uZXQvaXB2NC90Y3AuYy00Nzg3LVx0XHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE5NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipaZXJvLUNvcHkgUmVjZWl2ZTogQSBQb3RlbnRpYWwgSG90c3BvdCoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYHRjcF96ZXJvY29weV9yZWNlaXZlYCBmdW5jdGlvbi4gSW50ZXJlc3RpbmcuLi4gbG9va3MgbGlrZSBgZG9fdGNwX2dldHNvY2tvcHRgIGlzIHRoZSBvbmUgY2FsbGluZyBpdCB3aGVuIGBUQ1BfWkVST0NPUFlfUkVDRUlWRWAgaXMgcmVxdWVzdGVkLiBUaGF0JiMzOTtzIGEgcHJldHR5IHN0YW5kYXJkIHBhdGgsIG1lYW5pbmcgdGhpcyB0aGluZyBjb3VsZCBnZXQgaGl0ICphIGxvdCouIElmIGBkb190Y3BfZ2V0c29ja29wdGAgaXMgY2FsbGVkIG9mdGVuLCB0aGVuIHNvIHdpbGwgdGhpcyBmdW5jdGlvbi4gU28sIGlmIHRoaXMgZnVuY3Rpb24gaXMgaW5lZmZpY2llbnQsIGl0IGNvdWxkIGludHJvZHVjZSBhIGJvdHRsZW5lY2suCgpHaXZlbiB0aGlzIGNvbnRleHQsIEkgbmVlZCB0byBjaGVjayB0aGUgcG90ZW50aWFsIGZvciBwZXJmb3JtYW5jZSBpc3N1ZXMgYW5kIHRoZSB3YXlzIGl0JiMzOTtzIHRyYWNlZC4KCkkmIzM5O20gdGhpbmtpbmcsIEkgc2hvdWxkIGltbWVkaWF0ZWx5IGxvb2sgYXQgYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYC4gSSYjMzk7bSBnb2luZyB0byBzZWUgaG93IHRyYWNpbmcgaXMgaGFuZGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWluZyBsb2dnZWQsIGhvdyB0aGUgb3ZlcmhlYWQgaXMsIGFuZCBob3cgaXQgaW1wYWN0cyBhbnkgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcmJfbWFwX3ZtYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTc1Njc9c3RhdGljIGludCBfX3JiX2luY19kZWNfbWFwcGVkKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLFxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc2MTItI2lmZGVmIENPTkZJR19NTVVcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc2MTM6c3RhdGljIGludCBfX3JiX21hcF92bWEoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03NjE0LVx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc3MDYtI2Vsc2Vcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc3MDc6c3RhdGljIGludCBfX3JiX21hcF92bWEoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03NzA4LVx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTc3MTQ9aW50IHJpbmdfYnVmZmVyX21hcChzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUsXG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzcyOS1cdGlmIChjcHVfYnVmZmVyLVx1MDAzZXVzZXJfbWFwcGVkKSB7XG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo3NzMwOlx0XHRlcnIgPSBfX3JiX21hcF92bWEoY3B1X2J1ZmZlciwgdm1hKTtcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc3MzEtXHRcdGlmICghZXJyKVxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc3NjAtXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo3NzYxOlx0ZXJyID0gX19yYl9tYXBfdm1hKGNwdV9idWZmZXIsIHZtYSk7XG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03NzYyLVx0aWYgKCFlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5MjMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqUmVhY2hpbmcgZm9yIHRoZSBSaW5nIEJ1ZmZlcioqCgpBbHJpZ2h0LCBzbyBgcmluZ19idWZmZXJfbWFwYCBpcyBhY2Nlc3NpYmxlIHNvbWVob3csIGxpa2VseSB0aHJvdWdoIGBtbWFwYCBhbmQgdGhlIHRyYWNlZnMgcmluZyBidWZmZXIg4oCTIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIE15IGluaXRpYWwgaW5zdGluY3QgcG9pbnRzIG1lIHRvd2FyZHMgdGhlIEFNRCBEbmEgYWNjZWxlcmF0b3IgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jYC4gVGhpcyBpcyB1c3VhbGx5IHdoZXJlIHlvdSYjMzk7ZCBmaW5kIHRoZSBjcnVjaWFsIGludGVyYWN0aW9uIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIGxpa2VseSBpbmNsdWRpbmcgYnVmZmVyIGNyZWF0aW9uLCBtYXBwaW5nLCBhbmQgcG90ZW50aWFsbHkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJpbmcgYnVmZmVyIGlmIERNQSBvciBjb250ZXh0IHN3aXRjaGluZyBpcyBpbnZvbHZlZC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGF0IGZpbGUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNhbGxzIHRoYXQgdG91Y2ggb24gdGhlIHJpbmcgYnVmZmVyLCBgbW1hcGAgdXNhZ2UsIG9yIGludGVyYWN0aW9ucyB3aXRoIHRoZSBETUEgZW5naW5lLiBJIHN1c3BlY3QgdGhpcyB3aWxsIGlsbHVtaW5hdGUgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHJpbmcgYnVmZmVyLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBhc3Nlc3MgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBhbmQgcGVyZm9ybWFuY2UgcmFtaWZpY2F0aW9ucyBvZiB0aGF0IHBhcnRpY3VsYXIgaW50ZXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbWR4ZG5hX2luc2VydF9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jPTQyND1zdGF0aWMgdm9pZCBhbWR4ZG5hX2dlbV9kZXZfb2JqX2ZyZWUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnb2JqKVxuLS1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jLTQzOC1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jOjQzOTpzdGF0aWMgaW50IGFtZHhkbmFfaW5zZXJ0X3BhZ2VzKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibyxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jLTQ0MC1cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jPTQ5NT1zdGF0aWMgaW50IGFtZHhkbmFfZ2VtX29ial9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ29iaixcbi0tXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy01MDUtXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYzo1MDY6XHRyZXQgPSBhbWR4ZG5hX2luc2VydF9wYWdlcyhhYm8sIHZtYSk7XG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy01MDctXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTIxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwgU3ltYm9sIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBmb3Igc2lnbmlmaWNhbnQgZW50cnkgcG9pbnRzLCBhbmQgYmFzZWQgb24gdGhlIGluaXRpYWwgYXNzZXNzbWVudCwgdGhlICYjMzQ7ZHJpdmVyJiMzNDsgYXNwZWN0IGlzIGEgYml0IG9mIGEgZGlzdHJhY3Rpb24g4oCTIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY29yZSBrZXJuZWwgdXNlcnMgaGVyZS4gTGV0JiMzOTtzIGZvY3VzIG9uIHRoZSBrZXkgc3ltYm9scyBpZGVudGlmaWVkOiBgdm1faW5zZXJ0X3BhZ2VzYCwgYGlvX3VyaW5nX21tYXBgLCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgLCBhbmQgYHJpbmdfYnVmZmVyX21hcGAuIFRoZXNlIHNob3VsZCBwcm92aWRlIGdvb2QgaG9va3MuCgpUaGUgYElPX1VSSU5HYCBjb25maWcgaXMgc29tZXRoaW5nIHdlIHNob3VsZCBub3RlLiBJdCYjMzk7cyBhIGtleSBpbmRpY2F0b3IgZm9yIGhvdyB0aGUga2VybmVsIGlzIGNvbmZpZ3VyZWQgaW4gdGhpcyBwYXJ0aWN1bGFyIGluc3RhbmNlLgoKV2FpdCwgbG9va2luZyBhdCBgdm1faW5zZXJ0X3BhZ2VzYCwgdGhhdCBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIHRhcmdldCBiZWNhdXNlIGl0JiMzOTtzIGV4cG9ydGVkLiBJdCBoYXMgdG8gYmUgYW4gZW50cnkgcG9pbnQuIFF1aWNrIGNoZWNrOiBJcyBgaW5zZXJ0X3BhZ2VzYCBzdGF0aWMgd2l0aGluIGBtbS9tZW1vcnkuY2A/IEdvb2QsIHRoYXQgbWFrZXMgYHZtX2luc2VydF9wYWdlc2AgdGhlIGV4dGVybmFsbHkgdmlzaWJsZSBlbnRyeS4gRXhjZWxsZW50LgoKTm93LCBsZXQmIzM5O3MganVzdCBkbyBhIHF1aWNrIHNjYW4gZm9yIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19UUkFDSU5HYCBhcmUgc3RhbmRhcmQsIGJ1dCB0aGUgYENPTkZJR19JT19VUklOR2AgaXMgZGVmaW5pdGVseSB3b3J0aCBpbmNsdWRpbmcgZXhwbGljaXRseS4KCkZpbmFsbHksIHdoaWxlIHdlJiMzOTtyZSBpbiB0aGUgbmVpZ2hib3Job29kLCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGVgIGluIGBtbS9tZW1vcnkuY2AuIEFsd2F5cyBnb29kIHRvIGhhdmUgYSBjb21wcmVoZW5zaXZlIHZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hcF9rZXJuZWxfcGFnZXNfY29tcGxldGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnkuYz0yNTM3PUVYUE9SVF9TWU1CT0wobWFwX2tlcm5lbF9wYWdlc19wcmVwYXJlKTtcbm1tL21lbW9yeS5jLTI1MzgtXG5tbS9tZW1vcnkuYzoyNTM5OmludCBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vbWVtb3J5LmMtMjU0MC1cdFx0XHQgICAgICBzdHJ1Y3QgbW1hcF9hY3Rpb24gKmFjdGlvbilcbi0tXG5tbS9tZW1vcnkuYy0yNTQ4LX1cbm1tL21lbW9yeS5jOjI1NDk6RVhQT1JUX1NZTUJPTChtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlKTtcbm1tL21lbW9yeS5jLTI1NTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTkzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgYG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGVgIFVzYWdlKioKCk9rYXksIHNvIHRoZSBxdWVzdGlvbiBvbiBteSBtaW5kIHJpZ2h0IG5vdyBpczogV2hlcmUgZXhhY3RseSBkb2VzIGBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlYCBjb21lIGludG8gcGxheSBpbiB0aGlzIHN5c3RlbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZC4gSXMgaXQgYSBjb3JlIGZ1bmN0aW9uLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gSXMgaXQgd2lkZWx5IHVzZWQsIG9yIGxpbWl0ZWQgdG8gc3BlY2lmaWMgY29udGV4dHM/IEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGZpbmQgdGhlIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayB0aHJvdWdoIHRoZSBzb3VyY2UgY29kZSB0byBnZXQgYSBoYW5kbGUgb24gdGhpczsgSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQmIzM5O3MgYmVpbmcgKmNhbGxlZCogdG8gZ3Jhc3AgaXRzIHB1cnBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hcF9rZXJuZWxfcGFnZXNfY29tcGxldGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbS5oPTQ1Mzg9aW50IG1hcF9rZXJuZWxfcGFnZXNfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKTtcbmluY2x1ZGUvbGludXgvbW0uaDo0NTM5OmludCBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9tbS5oLTQ1NDAtXHRcdFx0ICAgICAgc3RydWN0IG1tYXBfYWN0aW9uICphY3Rpb24pO1xuLS1cbm1tL21lbW9yeS5jPTI1Mzc9RVhQT1JUX1NZTUJPTChtYXBfa2VybmVsX3BhZ2VzX3ByZXBhcmUpO1xubW0vbWVtb3J5LmMtMjUzOC1cbm1tL21lbW9yeS5jOjI1Mzk6aW50IG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9tZW1vcnkuYy0yNTQwLVx0XHRcdCAgICAgIHN0cnVjdCBtbWFwX2FjdGlvbiAqYWN0aW9uKVxuLS1cbm1tL21lbW9yeS5jLTI1NDgtfVxubW0vbWVtb3J5LmM6MjU0OTpFWFBPUlRfU1lNQk9MKG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGUpO1xubW0vbWVtb3J5LmMtMjU1MC1cbi0tXG5tbS91dGlsLmM9MTQ3OD1pbnQgbW1hcF9hY3Rpb25fY29tcGxldGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vdXRpbC5jLTE0ODktXHRjYXNlIE1NQVBfTUFQX0tFUk5FTF9QQUdFUzpcbm1tL3V0aWwuYzoxNDkwOlx0XHRlcnIgPSBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlKHZtYSwgYWN0aW9uKTtcbm1tL3V0aWwuYy0xNDkxLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3MTEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKldoZXJlIERvZXMgYG1tYXBfYWN0aW9uX2NvbXBsZXRlYCBGaXQ/KioKCk9rYXksIHNvIGBtbWFwX2FjdGlvbl9jb21wbGV0ZWAuLi4gd2hlcmUgKmlzKiB0aGF0IHVzZWQ/IEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBtbWFwLXJlbGF0ZWQga2VybmVsIHN1YnN5c3RlbXMuIE15IGluaXRpYWwgZ3Vlc3MgaXMgdGhhdCBpdCYjMzk7cyBsaWtlbHkgcGFydCBvZiB0aGUgY29tcGxldGlvbiBwYXRoIGZvciBhbiBhc3luY2hyb25vdXMgbWVtb3J5IG1hcHBpbmcgb3BlcmF0aW9uLiBJdCB3b3VsZCBiZSBpbnZvbHZlZCBpbiBzaWduYWxpbmcgdGhlIGNvbXBsZXRpb24gb2YgYSBzcGVjaWZpYyBhY3Rpb24gcmVsYXRlZCB0byBtYXBwZWQgbWVtb3J5LCBwb3NzaWJseSB0byB1c2VyIHNwYWNlLCBvciBhbm90aGVyIGtlcm5lbCBwcm9jZXNzLiBJcyBpdCB0aWVkIHRvIGEgc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBsaWtlIHRoZSBwYWdlIGNhY2hlLCBvciBzb21ldGhpbmcgbW9yZSBnZW5lcmFsaXplZCB3aXRoaW4gdGhlIFZNPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGViYXNlIHRvIGRldGVybWluZSB0aGUgZXhhY3QgY2FsbCBzaXRlcyBhbmQgY29udGV4dHMsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uLgoKSXMgaXQgcmVsYXRlZCB0byBmaWxlLWJhY2tlZCBtYXBwaW5ncywgb3IgYW5vbnltb3VzIG1hcHBpbmdzPyBEb2VzIGl0IGhhbmRsZSB0aGUgZGlydHlpbmcsIGZsdXNoaW5nLCBvciBpbnZhbGlkYXRpbmcgb2YgcGFnZXM/IElzIHRoaXMgYWJvdXQgdGhlIHNpZ25hbHMgZ2VuZXJhdGVkIGJ5IHRoZSBrZXJuZWwsIG9yIHNvbWV0aGluZyBJJiMzOTttIG1pc3Npbmc/IEFuZCBkb2VzIGl0IGhhdmUgYW55IGFzc29jaWF0ZWQgbG9ja2luZz8KCkkmIzM5O20gdGhpbmtpbmcgSSBwcm9iYWJseSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgY2FsbHMgcmVsYXRlZCB0byBgbW1hcGAgc3lzY2FsbCBpbXBsZW1lbnRhdGlvbnMsIGxpa2UgYGRvX21tYXBgIG9yIHNpbWlsYXIuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biB0byBmaW5kIHdoZXJlIHRoaXMgc2lnbmFsIGlzIGJlaW5nIHNlbnQuIFBlcmhhcHMgSSYjMzk7bGwgdXNlIGBncmVwYCBvciBhIHNpbWlsYXIgdG9vbCB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWMgc291cmNlIGZpbGVzIGFuZCBmdW5jdGlvbnMgdGhhdCB1c2UgdGhhdCBzeW1ib2wuIFVuZGVyc3RhbmRpbmcgaXRzIHVzYWdlIHdpdGhpbiB0aG9zZSBmdW5jdGlvbnMgd2lsbCBwcm92aWRlIHRoZSBjbGVhcmVzdCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbWFwX2FjdGlvbl9jb21wbGV0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tLmg9NDQyNj1pbnQgbW1hcF9hY3Rpb25fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKTtcbmluY2x1ZGUvbGludXgvbW0uaDo0NDI3OmludCBtbWFwX2FjdGlvbl9jb21wbGV0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvbW0uaC00NDI4LVx0XHRcdCBzdHJ1Y3QgbW1hcF9hY3Rpb24gKmFjdGlvbiwgYm9vbCBpc19jb21wYXQpO1xuLS1cbm1tL3V0aWwuYz0xMjI0PWludCBfX2NvbXBhdF92bWFfbW1hcChzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjLFxuLS1cbm1tL3V0aWwuYy0xMjM1LVx0LyogQ29tcGxldGUgYW55IHNwZWNpZmllZCBtbWFwIGFjdGlvbnMuICovXG5tbS91dGlsLmM6MTIzNjpcdHJldHVybiBtbWFwX2FjdGlvbl9jb21wbGV0ZSh2bWEsIFx1MDAyNmRlc2MtXHUwMDNlYWN0aW9uLCAvKmlzX2NvbXBhdD0qL3RydWUpO1xubW0vdXRpbC5jLTEyMzctfVxuLS1cbm1tL3V0aWwuYz0xNDY1PUVYUE9SVF9TWU1CT0wobW1hcF9hY3Rpb25fcHJlcGFyZSk7XG4tLVxubW0vdXRpbC5jLTE0NjctLyoqXG5tbS91dGlsLmM6MTQ2ODogKiBtbWFwX2FjdGlvbl9jb21wbGV0ZSAtIEV4ZWN1dGUgVk1BIGRlc2NyaXB0b3IgYWN0aW9uLlxubW0vdXRpbC5jLTE0NjktICogQHZtYTogVGhlIFZNQSB0byBwZXJmb3JtIHRoZSBhY3Rpb24gdXBvbi5cbi0tXG5tbS91dGlsLmMtMTQ3Ny0gKi9cbm1tL3V0aWwuYzoxNDc4OmludCBtbWFwX2FjdGlvbl9jb21wbGV0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL3V0aWwuYy0xNDc5LVx0XHRcdCBzdHJ1Y3QgbW1hcF9hY3Rpb24gKmFjdGlvbiwgYm9vbCBpc19jb21wYXQpXG4tLVxubW0vdXRpbC5jLTE1MDEtfVxubW0vdXRpbC5jOjE1MDI6RVhQT1JUX1NZTUJPTChtbWFwX2FjdGlvbl9jb21wbGV0ZSk7XG5tbS91dGlsLmMtMTUwMy0jZWxzZVxuLS1cbm1tL3V0aWwuYz0xNTE5PUVYUE9SVF9TWU1CT0wobW1hcF9hY3Rpb25fcHJlcGFyZSk7XG5tbS91dGlsLmMtMTUyMC1cbm1tL3V0aWwuYzoxNTIxOmludCBtbWFwX2FjdGlvbl9jb21wbGV0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL3V0aWwuYy0xNTIyLVx0XHRcdCBzdHJ1Y3QgbW1hcF9hY3Rpb24gKmFjdGlvbixcbi0tXG5tbS91dGlsLmMtMTU0MS19XG5tbS91dGlsLmM6MTU0MjpFWFBPUlRfU1lNQk9MKG1tYXBfYWN0aW9uX2NvbXBsZXRlKTtcbm1tL3V0aWwuYy0xNTQzLSNlbmRpZlxuLS1cbm1tL3ZtYS5jPTI3MzQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19tbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL3ZtYS5jLTI3ODUtXHRpZiAoaGF2ZV9tbWFwX3ByZXBhcmUgXHUwMDI2XHUwMDI2IGFsbG9jYXRlZF9uZXcpIHtcbm1tL3ZtYS5jOjI3ODY6XHRcdGVycm9yID0gbW1hcF9hY3Rpb25fY29tcGxldGUodm1hLCBcdTAwMjZkZXNjLmFjdGlvbixcbm1tL3ZtYS5jLTI3ODctXHRcdFx0XHRcdCAgICAgLyppc19jb21wYXQ9Ki9mYWxzZSk7XG4tLVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaD0xMzA5PXN0YXRpYyBpbmxpbmUgaW50IF9fY29tcGF0X3ZtYV9tbWFwKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MsXG4tLVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC0xMzIwLVx0LyogQ29tcGxldGUgYW55IHNwZWNpZmllZCBtbWFwIGFjdGlvbnMuICovXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oOjEzMjE6XHRyZXR1cm4gbW1hcF9hY3Rpb25fY29tcGxldGUodm1hLCBcdTAwMjZkZXNjLVx1MDAzZWFjdGlvbiwgLyppc19jb21wYXQ9Ki90cnVlKTtcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgtMTMyMi19XG4tLVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oPTg0PXN0YXRpYyBpbmxpbmUgaW50IG1tYXBfYWN0aW9uX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmgtODgtXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmg6ODk6c3RhdGljIGlubGluZSBpbnQgbW1hcF9hY3Rpb25fY29tcGxldGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmgtOTAtXHRcdFx0XHQgICAgICAgc3RydWN0IG1tYXBfYWN0aW9uICphY3Rpb24sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTgzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkRpdmluZyBEZWVwIGludG8gTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyBtZW1vcnkgaXMgbWFwcGVkLiBJIHNlZSBgX19tbWFwX3JlZ2lvbmAgY2FsbHMgYG1tYXBfYWN0aW9uX2NvbXBsZXRlYC4gVGhhdCYjMzk7cyBhIHByZXR0eSBjZW50cmFsIHBvaW50LCByaWdodD8gVGhpcyBpcyBjb3JlIHN0dWZmLiBJbW1lZGlhdGVseSwgYHZtX2luc2VydF9wYWdlc2AgYW5kIGBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlYCBjb21lIHRvIG1pbmQgYXMgcG90ZW50aWFsbHkgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIHNjcnV0aW5pemUgZnVydGhlci4gVGhleSYjMzk7cmUgbGlrZWx5IGludm9sdmVkIGluIGNvbXBsZXRpbmcgdGhlIG1lbW9yeSBtYXBwaW5nIHByb2Nlc3MsIHNvIHRoZXkmIzM5O3JlIG9uIG15IHJhZGFyLgoKSG9sZCBvbi4uLiBJIG5lZWQgdG8gYmUgbW9yZSBjYXJlZnVsLCBJIG1pc3NlZCBzb21ldGhpbmcsIHRoZSBwYXRjaCB0b3VjaGVzIGBwb3B1bGF0ZV90b19wbWRgLCB3aGljaCwgSSBub3cgcmVtZW1iZXIsIGlzIGFsc28gdXNlZCBpbiBgZ2V0X2xvY2tlZF9wdGVgLiBSaWdodCwgdGhpcyBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBiZXlvbmQgdGhlIGltbWVkaWF0ZSBtbWFwIGNvbnRleHQuIEkgc2hvdWxkIHN3aXRjaCBnZWFycyBmb3IgYSBtb21lbnQgYW5kIGdvIGNoZWNrIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIGBnZXRfbG9ja2VkX3B0ZWAuIEdvdHRhIGVuc3VyZSB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gaXNzdWVzIGluIG90aGVyIHBhcnRzIG9mIHRoZSBtZW1vcnkgc3Vic3lzdGVtLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBwYWdlIHRhYmxlIG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9sb2NrZWRfcHRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmM9MjI3MT1zdGF0aWMgcG1kX3QgKnBvcHVsYXRlX3RvX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbm1tL21lbW9yeS5jLTIyOTItXG5tbS9tZW1vcnkuYzoyMjkzOnB0ZV90ICpnZXRfbG9ja2VkX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vbWVtb3J5LmMtMjI5NC1cdFx0ICAgICAgc3BpbmxvY2tfdCAqKnB0bClcbi0tXG5tbS9tZW1vcnkuYz0yMzkyPXN0YXRpYyBpbnQgaW5zZXJ0X3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1vcnkuYy0yNDAyLVx0cmV0dmFsID0gLUVOT01FTTtcbm1tL21lbW9yeS5jOjI0MDM6XHRwdGUgPSBnZXRfbG9ja2VkX3B0ZSh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIFx1MDAyNnB0bCk7XG5tbS9tZW1vcnkuYy0yNDA0LVx0aWYgKCFwdGUpXG4tLVxubW0vbWVtb3J5LmM9MjY3MD1zdGF0aWMgdm1fZmF1bHRfdCBpbnNlcnRfcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtb3J5LmMtMjY3Ni1cbm1tL21lbW9yeS5jOjI2Nzc6XHRwdGUgPSBnZXRfbG9ja2VkX3B0ZShtbSwgYWRkciwgXHUwMDI2cHRsKTtcbm1tL21lbW9yeS5jLTI2NzgtXHRpZiAoIXB0ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NTMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBgcG9wdWxhdGVfdG9fcG1kYCBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaG93IGl0JiMzOTtzIGNoYW5nZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2hhbmdlcy4gYGdldF9sb2NrZWRfcHRlYCBpcyB1c2VkIGluIGBpbnNlcnRfcGFnZWAgYW5kIGBpbnNlcnRfcGZuYC4gYGluc2VydF9wYWdlYCBpcyBjYWxsZWQgYnkgYHZtX2luc2VydF9wYWdlYC4gYGluc2VydF9wZm5gIGlzIGNhbGxlZCBieSBgdm1mX2luc2VydF9wZm5gLiBUaGF0IG1lYW5zIGB2bV9pbnNlcnRfcGFnZWAsIGB2bV9pbnNlcnRfcGFnZXNgLCBhbmQgYHZtZl9pbnNlcnRfcGZuYCBhcmUgYWxsIHBvdGVudGlhbGx5IGFmZmVjdGVkIGJ5IHRoaXMgY2hhbmdlLgoKSSBzZWUgdGhhdCBgcG9wdWxhdGVfdG9fcG1kYCBpcyB0aGUgbmV3IG5hbWUgZm9yIGB3YWxrX3RvX3BtZGAuIFRoZSBvbGQgaW1wbGVtZW50YXRpb24gb2YgYHdhbGtfdG9fcG1kYCB3YXMgaWRlbnRpY2FsIHRvIHRoZSBuZXcgYHBvcHVsYXRlX3RvX3BtZGAuIFRoZSBhY3R1YWwgY29kZSBoYXNuJiMzOTt0IGNoYW5nZWQsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBUaGUgb25seSBjaGFuZ2UgaXMgdGhlIHJldHVybiB2YWx1ZSBvZiBgaW5zZXJ0X3BhZ2VzYCB3aGVuIGBwb3B1bGF0ZV90b19wbWRgIGZhaWxzLiBJdCB1c2VkIHRvIHJldHVybiBgLUVGQVVMVGAsIG5vdyBpdCByZXR1cm5zIGAtRU5PTUVNYC4gSXQgYWxzbyBsb29rcyBsaWtlIHRoZXJlIHdhcyBhIGJ1ZyBpbiB0aGUgb2xkIGBpbnNlcnRfcGFnZXNgIGNvZGUsIHdoZXJlIGFuIGAtRUZBVUxUYCB3YXMgc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AsIGJ1dCBub3cgaGFzIGJlZW4gY29ycmVjdGVkLiBUaGlzIGNoYW5nZSB3aWxsIGFmZmVjdCBlcnJvciBoYW5kbGluZyBpbiB0aGUgY2FsbGVycyBvZiBgdm1faW5zZXJ0X3BhZ2VzYCwgYW5kIGFueSBwb3RlbnRpYWwgY2FsbGVycyBvZiBgbWFwX2tlcm5lbF9wYWdlc19jb21wbGV0ZWAuCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgb2xkIGFuZCBuZXcgY29kZSwgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGVycm9yIHBhdGhzOgoKSW4gdGhlIG9yaWdpbmFsIGBpbnNlcnRfcGFnZXNgOgoqICAgYHB0ZV9hbGxvY2AgZmFpbHVyZTogUmV0dXJucyBgLUVOT01FTWAKKiAgIGB3YWxrX3RvX3BtZGAgZmFpbHVyZTogUmV0dXJucyBgLUVGQVVMVGAKKiAgIGBwdGVfb2Zmc2V0X21hcF9sb2NrYCBmYWlsdXJlOiBSZXR1cm5zIGAtRUZBVUxUYAoqICAgYGluc2VydF9wYWdlX2luX2JhdGNoX2xvY2tlZGAgZmFpbHVyZTogUmV0dXJucyB0aGUgZXJyb3IgY29kZSBmcm9tIHRoYXQgZnVuY3Rpb24gKGBlcnJgKQoKSW4gdGhlIG5ldyBjb2RlLCB0aGUgb25seSAqZnVuY3Rpb25hbCogY2hhbmdlIGlzIHRoYXQgYHBvcHVsYXRlX3RvX3BtZGAgcmV0dXJuaW5nIGBOVUxMYCByZXN1bHRzIGluIGAtRU5PTUVNYCwgaW5zdGVhZCBvZiBgLUVGQVVMVGAgZnJvbSB0aGUgYHdhbGtfdG9fcG1kYCBmYWlsdXJlLiBJdCByZXR1cm5zIHRoZSBlcnJvciBjb2RlIGZyb20gYGluc2VydF9wYWdlX2luX2JhdGNoX2xvY2tlZGAgY29ycmVjdGx5LgoKU28sIHRoZSBjcml0aWNhbCBkaWZmZXJlbmNlIGlzIGB2bV9pbnNlcnRfcGFnZXNgIGFuZCBgbWFwX2tlcm5lbF9wYWdlc19jb21wbGV0ZWAgbm93IHJldHVybmluZyBgLUVOT01FTWAgd2hlbiBgcG9wdWxhdGVfdG9fcG1kYCBmYWlscyBpbnN0ZWFkIG9mIGAtRUZBVUxUYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY2FsbGVycyBhcmUgZ29pbmcgdG8gYmUgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIEl0JiMzOTtzIGEgc2VtYW50aWMgY2hhbmdlIGluIHRoZSBlcnJvciBjb2RlLCBhbmQgdGhleSBtaWdodCBoYXZlIGRpZmZlcmVudCBoYW5kbGluZyBmb3IgYC1FTk9NRU1gIHZlcnN1cyBgLUVGQVVMVGAuIEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBmb3IgcG90ZW50aWFsIGlzc3Vlcy4gU29tZXRoaW5nIGxpa2UgYHRjcF96ZXJvY29weV9yZWNlaXZlYCBjb3VsZCBiZSBhZmZlY3RlZC4KCk9rYXksIGxldCYjMzk7cyBsb29rIGF0IGB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoX2Vycm9yYCBpbiBgbmV0L2lwdjQvdGNwLmNgLCB0byBzZWUgaG93IGl0IGhhbmRsZXMgYW4gZXJyb3IgZnJvbSB0aGUgYHZtX2luc2VydF9wYWdlc2AgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2hfZXJyb3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0yMDM1PXN0YXRpYyBpbnQgdGNwX3pjX2hhbmRsZV9sZWZ0b3ZlcihzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTIwNjEtXG5uZXQvaXB2NC90Y3AuYzoyMDYyOnN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaF9lcnJvcihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm5ldC9pcHY0L3RjcC5jLTIwNjMtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBwYWdlICoqcGVuZGluZ19wYWdlcyxcbi0tXG5uZXQvaXB2NC90Y3AuYz0yMTEwPXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5uZXQvaXB2NC90Y3AuYy0yMTM2LVx0LyogRXJyb3I6IG1heWJlIHphcCBhbmQgcmV0cnkgJiM0Mzsgcm9sbGJhY2sgc3RhdGUgZm9yIGZhaWxlZCBpbnNlcnRzLiAqL1xubmV0L2lwdjQvdGNwLmM6MjEzNzpcdHJldHVybiB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoX2Vycm9yKHZtYSwgcGFnZXMgJiM0MzsgcGFnZXNfbWFwcGVkLFxubmV0L2lwdjQvdGNwLmMtMjEzOC1cdFx0cGFnZXNfcmVtYWluaW5nLCBhZGRyZXNzLCBsZW5ndGgsIHNlcSwgemMsIHRvdGFsX2J5dGVzX3RvX21hcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwOTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBOYW1lOiBgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaF9lcnJvcmAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIFRoZSBmdW5jdGlvbiBuYW1lIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGEgbG90LiBgdGNwX3plcm9jb3B5YCBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIFRDUCBuZXR3b3JraW5nIGFuZCwgbW9yZSBzcGVjaWZpY2FsbHksIGEgbWVjaGFuaXNtIHRvIGF2b2lkIHRoZSB0cmFkaXRpb25hbCBrZXJuZWwtdG8tdXNlci1zcGFjZSBjb3B5LiBFeGNlbGxlbnQsIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBnYWlucyBhcmUgYWxyZWFkeSBmbGFnZ2VkIGluIG15IG1pbmQuIFRoZSBtZW50aW9uIG9mIGB2bWAgKFZpcnR1YWwgTWFjaGluZSkgaW5kaWNhdGVzIHRoaXMgaXMgcHJvYmFibHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHdoaWNoIGFkZHMgYW5vdGhlciBsYXllciBvZiBjb21wbGV4aXR5IHRvIGNvbnNpZGVyIOKAkyBtZW1vcnkgbWFuYWdlbWVudCwgcG90ZW50aWFsIHZOSUMgaW50ZXJhY3Rpb25zLCBhbmQgaHlwZXJ2aXNvciBvdmVyaGVhZC4gVGhlbiwgYGluc2VydF9iYXRjaGAgcG9pbnRzIHRvIHNvbWUgZm9ybSBvZiBidWxrIG9wZXJhdGlvbiwgZGVhbGluZyB3aXRoIGEgZ3JvdXAgb2YgZGF0YSBvciBzdHJ1Y3R1cmVzLCBwZXJoYXBzIHBhY2tldHMgb3IgYnVmZmVycywgYW5kIHRoZSBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBwdXQgZGF0YSBpbnRvIHRoZSBWTS4gRmluYWxseSwgYGVycm9yYC4uLnRoYXQmIzM5O3MgdGhlIGtleS4gVGhpcyBpc24mIzM5O3QgYSBzdWNjZXNzIHBhdGg7IHRoaXMgaXMgd2hlcmUgdGhpbmdzICpnbyB3cm9uZyouIFdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSBlcnJvciBoYW5kbGluZyBmb3IgYSB6ZXJvLWNvcHksIGJhdGNoIGluc2VydGlvbiBwcm9jZXNzIHdpdGhpbiBhIHZpcnR1YWwgbWFjaGluZSBjb250ZXh0LiBUaGF0JiMzOTtzIGEgcHJldHR5IHNwZWNpZmljIGFuZCBsaWtlbHkgcGVyZm9ybWFuY2UtY3JpdGljYWwgcGllY2Ugb2YgY29kZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIGlzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA2MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDYyOlx0c3RhdGljIGludCB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoX2Vycm9yKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuMjA2MzpcdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgcGFnZSAqKnBlbmRpbmdfcGFnZXMsXG4yMDY0Olx0XHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgcGFnZXNfcmVtYWluaW5nLFxuMjA2NTpcdFx0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nICphZGRyZXNzLFxuMjA2NjpcdFx0XHRcdFx0XHQgICAgICB1MzIgKmxlbmd0aCxcbjIwNjc6XHRcdFx0XHRcdFx0ICAgICAgdTMyICpzZXEsXG4yMDY4Olx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsXG4yMDY5Olx0XHRcdFx0XHRcdCAgICAgIHUzMiB0b3RhbF9ieXRlc190b19tYXAsXG4yMDcwOlx0XHRcdFx0XHRcdCAgICAgIGludCBlcnIpXG4yMDcxOlx0e1xuMjA3MjpcdFx0LyogQXQgbGVhc3Qgb25lIHBhZ2UgZGlkIG5vdCBtYXAuIFRyeSB6YXBwaW5nIGlmIHdlIHNraXBwZWQgZWFybGllci4gKi9cbjIwNzM6XHRcdGlmIChlcnIgPT0gLUVCVVNZIFx1MDAyNlx1MDAyNlxuMjA3NDpcdFx0ICAgIHpjLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ1BfUkVDRUlWRV9aRVJPQ09QWV9GTEFHX1RMQl9DTEVBTl9ISU5UKSB7XG4yMDc1Olx0XHRcdHUzMiBtYXliZV96YXBfbGVuO1xuMjA3NjpcdFxuMjA3NzpcdFx0XHRtYXliZV96YXBfbGVuID0gdG90YWxfYnl0ZXNfdG9fbWFwIC0gIC8qIEFsbCBieXRlcyB0byBtYXAgKi9cbjIwNzg6XHRcdFx0XHRcdCpsZW5ndGggJiM0MzsgLyogTWFwcGVkIG9yIHBlbmRpbmcgKi9cbjIwNzk6XHRcdFx0XHRcdChwYWdlc19yZW1haW5pbmcgKiBQQUdFX1NJWkUpOyAvKiBGYWlsZWQgbWFwLiAqL1xuMjA4MDpcdFx0XHR6YXBfdm1hX3JhbmdlKHZtYSwgKmFkZHJlc3MsIG1heWJlX3phcF9sZW4pO1xuMjA4MTpcdFx0XHRlcnIgPSAwO1xuMjA4MjpcdFx0fVxuMjA4MzpcdFxuMjA4NDpcdFx0aWYgKCFlcnIpIHtcbjIwODU6XHRcdFx0dW5zaWduZWQgbG9uZyBsZWZ0b3Zlcl9wYWdlcyA9IHBhZ2VzX3JlbWFpbmluZztcbjIwODY6XHRcdFx0aW50IGJ5dGVzX21hcHBlZDtcbjIwODc6XHRcbjIwODg6XHRcdFx0LyogV2UgY2FsbGVkIHphcF92bWFfcmFuZ2UsIHRyeSB0byByZWluc2VydC4gKi9cbjIwODk6XHRcdFx0ZXJyID0gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgKmFkZHJlc3MsXG4yMDkwOlx0XHRcdFx0XHQgICAgICBwZW5kaW5nX3BhZ2VzLFxuMjA5MTpcdFx0XHRcdFx0ICAgICAgXHUwMDI2cGFnZXNfcmVtYWluaW5nKTtcbjIwOTI6XHRcdFx0Ynl0ZXNfbWFwcGVkID0gUEFHRV9TSVpFICogKGxlZnRvdmVyX3BhZ2VzIC0gcGFnZXNfcmVtYWluaW5nKTtcbjIwOTM6XHRcdFx0KnNlcSAmIzQzOz0gYnl0ZXNfbWFwcGVkO1xuMjA5NDpcdFx0XHQqYWRkcmVzcyAmIzQzOz0gYnl0ZXNfbWFwcGVkO1xuMjA5NTpcdFx0fVxuMjA5NjpcdFx0aWYgKGVycikge1xuMjA5NzpcdFx0XHQvKiBFaXRoZXIgd2Ugd2VyZSB1bmFibGUgdG8gemFwLCBPUiB3ZSB6YXBwZWQsIHJldHJpZWQgYW5cbjIwOTg6XHRcdFx0ICogaW5zZXJ0LCBhbmQgc3RpbGwgaGFkIGFuIGlzc3VlLiBFaXRoZXIgd2F5cywgcGFnZXNfcmVtYWluaW5nXG4yMDk5Olx0XHRcdCAqIGlzIHRoZSBudW1iZXIgb2YgcGFnZXMgd2Ugd2VyZSB1bmFibGUgdG8gbWFwLCBhbmQgd2UgdW5yb2xsXG4yMTAwOlx0XHRcdCAqIHNvbWUgc3RhdGUgd2Ugc3BlY3VsYXRpdmVseSB0b3VjaGVkIGJlZm9yZS5cbjIxMDE6XHRcdFx0ICovXG4yMTAyOlx0XHRcdGNvbnN0IGludCBieXRlc19ub3RfbWFwcGVkID0gUEFHRV9TSVpFICogcGFnZXNfcmVtYWluaW5nO1xuMjEwMzpcdFxuMjEwNDpcdFx0XHQqbGVuZ3RoIC09IGJ5dGVzX25vdF9tYXBwZWQ7XG4yMTA1Olx0XHRcdHpjLVx1MDAzZXJlY3Zfc2tpcF9oaW50ICYjNDM7PSBieXRlc19ub3RfbWFwcGVkO1xuMjEwNjpcdFx0fVxuMjEwNzpcdFx0cmV0dXJuIGVycjtcbjIxMDg6XHR9XG4yMTA5Olx0XG4yMTEwOlx0c3RhdGljIGludCB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuMjExMTpcdFx0XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIzNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYSBSZXR1cm5lZCBFcnJvciBDb2RlKioKClJpZ2h0LCBzbyB0aGUgZXJyb3IgY29kZSBpcyBiZWluZyByZXR1cm5lZCBkaXJlY3RseS4gVGhhdCYjMzk7cyB0aGUgaW1tZWRpYXRlIGluZm9ybWF0aW9uIEkgbmVlZCB0byB3b3JrIHdpdGguIE5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIGludmVzdGlnYXRlIHRoZSBgaW9fdXJpbmdfbW1hcGAgZnVuY3Rpb24uIE15IGd1dCB0ZWxscyBtZSB0aGF0JiMzOTtzIHRoZSBsaWtlbHkgc291cmNlIG9mIHRoaXMgZXJyb3IsIG9yIGF0IGxlYXN0IGEga2V5IGNvbXBvbmVudCBpbiB0aGUgcHJvYmxlbSBzcGFjZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBpb191cmluZ19tbWFwYCBpcyBpbnRlcmFjdGluZyB3aXRoIHdoYXRldmVyIGxvZ2ljIGlzIGdlbmVyYXRpbmcgdGhhdCBlcnJvciBjb2RlLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiB0aGVyZS4gTWF5YmUgdGhlcmUmIzM5O3MgYSBwcm9ibGVtIHdpdGggdGhlIGFyZ3VtZW50cywgdGhlIGFsbG9jYXRpb24sIHRoZSB1bmRlcmx5aW5nIHN5c3RlbSBjYWxscywgb3IgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHVzZXItc3BhY2UuIFRoYXQmIzM5O3MgdGhlIGxpa2VseSBjdWxwcml0IGdpdmVuIHRoYXQgY29kZSBpcyB3aGF0IHRoZSBpc3N1ZSByZWxhdGVzIHRvLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZG8gYSBkZWVwIGRpdmUgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9tZW1tYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjg0Olx0c3RhdGljIGludCBpb19yZWdpb25fbW1hcChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbiAyODU6XHRcdFx0XHQgIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbiAyODY6XHRcdFx0XHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIDI4NzpcdFx0XHRcdCAgdW5zaWduZWQgbWF4X3BhZ2VzKVxuIDI4ODpcdHtcbiAyODk6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBtaW4obXItXHUwMDNlbnJfcGFnZXMsIG1heF9wYWdlcyk7XG4gMjkwOlx0XG4gMjkxOlx0XHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EKTtcbiAyOTI6XHRcdHJldHVybiB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIG1yLVx1MDAzZXBhZ2VzLCBcdTAwMjZucl9wYWdlcyk7XG4gMjkzOlx0fVxuIDI5NDpcdFxuIDI5NTpcdF9fY29sZCBpbnQgaW9fdXJpbmdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gMjk2Olx0e1xuIDI5NzpcdFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiAyOTg6XHRcdHNpemVfdCBzeiA9IHZtYS1cdTAwM2V2bV9lbmQgLSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4gMjk5Olx0XHRsb25nIG9mZnNldCA9IHZtYS1cdTAwM2V2bV9wZ29mZiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiAzMDA6XHRcdHVuc2lnbmVkIGludCBwYWdlX2xpbWl0ID0gVUlOVF9NQVg7XG4gMzAxOlx0XHRzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqcmVnaW9uO1xuIDMwMjpcdFx0dm9pZCAqcHRyO1xuIDMwMzpcdFxuIDMwNDpcdFx0Z3VhcmQobXV0ZXgpKFx1MDAyNmN0eC1cdTAwM2VtbWFwX2xvY2spO1xuIDMwNTpcdFxuIDMwNjpcdFx0cHRyID0gaW9fdXJpbmdfdmFsaWRhdGVfbW1hcF9yZXF1ZXN0KGZpbGUsIHZtYS1cdTAwM2V2bV9wZ29mZik7XG4gMzA3Olx0XHRpZiAoSVNfRVJSKHB0cikpXG4gMzA4Olx0XHRcdHJldHVybiBQVFJfRVJSKHB0cik7XG4gMzA5Olx0XG4gMzEwOlx0XHRzd2l0Y2ggKG9mZnNldCBcdTAwMjYgSU9SSU5HX09GRl9NTUFQX01BU0spIHtcbiAzMTE6XHRcdGNhc2UgSU9SSU5HX09GRl9TUV9SSU5HOlxuIDMxMjpcdFx0Y2FzZSBJT1JJTkdfT0ZGX0NRX1JJTkc6XG4gMzEzOlx0XHRcdHBhZ2VfbGltaXQgPSAoc3ogJiM0MzsgUEFHRV9TSVpFIC0gMSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gMzE0Olx0XHRcdGJyZWFrO1xuIDMxNTpcdFx0fVxuIDMxNjpcdFxuIDMxNzpcdFx0cmVnaW9uID0gaW9fbW1hcF9nZXRfcmVnaW9uKGN0eCwgdm1hLVx1MDAzZXZtX3Bnb2ZmKTtcbiAzMTg6XHRcdHJldHVybiBpb19yZWdpb25fbW1hcChjdHgsIHJlZ2lvbiwgdm1hLCBwYWdlX2xpbWl0KTtcbiAzMTk6XHR9XG4gMzIwOlx0XG4gMzIxOlx0dW5zaWduZWQgbG9uZyBpb191cmluZ19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIDMyMjpcdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXG4gMzIzOlx0XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIDMyNDpcdHtcbiAzMjU6XHRcdHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4ID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gMzI2Olx0XHR2b2lkICpwdHI7XG4gMzI3Olx0XG4gMzI4Olx0XHQvKlxuIDMyOTpcdFx0ICogRG8gbm90IGFsbG93IHRvIG1hcCB0byB1c2VyLXByb3ZpZGVkIGFkZHJlc3MgdG8gYXZvaWQgYnJlYWtpbmcgdGhlXG4gMzMwOlx0XHQgKiBhbGlhc2luZyBydWxlcy4gVXNlcnNwYWNlIGlzIG5vdCBhYmxlIHRvIGd1ZXNzIHRoZSBvZmZzZXQgYWRkcmVzcyBvZlxuIDMzMTpcdFx0ICoga2VybmVsIGttYWxsb2MoKWVkIG1lbW9yeSBhcmVhLlxuIDMzMjpcdFx0ICovXG4gMzMzOlx0XHRpZiAoYWRkcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzMTAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IEFsbG9jYXRpb24gRml4KioKCk9rYXksIHNvIGBpb191cmluZ19tbWFwYCByZXR1cm5zIHRoZSBlcnJvciBjb2RlIGRpcmVjdGx5LCB3aGljaCBpcyBnb29kLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGB2bV9pbnNlcnRfcGFnZXNgIHdoZW4gYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscy4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBtYWtpbmcgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkmIzM5O3ZlIGdvdCB0byBydW4gdGhpcyB0aHJvdWdoIGl0cyBwYWNlcy4KCkFscmlnaHQsIGxldCYjMzk7cyBwcmVwIHRoZSByZXNwb25zZS4gRGVmaW5pdGVseSBgV29ydGhGdXp6aW5nOiB0cnVlYC4gVGhlIHByaW1hcnkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZSBgdm1faW5zZXJ0X3BhZ2VzYCwgYGlvX3VyaW5nX21tYXBgLCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgLCBgcmluZ19idWZmZXJfbWFwYCwgYW5kIGBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlYC4KCldhaXQgYSBtaW51dGUsIGBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlYCBpcyB1c2VkIHdpdGhpbiBgbW1hcF9hY3Rpb25fY29tcGxldGVgLCB3aGljaCBpbiB0dXJuIGlzIHVzZWQgaW4gYF9fbW1hcF9yZWdpb25gLiBUaGlua2luZyBvdXQgbG91ZCwgdGhlbiBgX19tbWFwX3JlZ2lvbmAgaXRzZWxmIGNvdWxkIGJlIGEgdmFsdWFibGUgdGFyZ2V0LCBob3dldmVyLCB0aGF0JiMzOTtzIGxpa2VseSBhIGhvdCBwYXRoLiBTbywgYG1tYXBfYWN0aW9uX2NvbXBsZXRlYCBtaWdodCBiZSB0aGUgYmV0dGVyIGJldC4gSG93ZXZlciwgdGhlIHJvb3QgY2F1c2UgaXMgd2l0aCBgdm1faW5zZXJ0X3BhZ2VzYCwgc28gSSBzdGlsbCBuZWVkIHRvIGdpdmUgaXQgdGhlIHByaW1hcnkgZm9jdXMuCgpOb3csIGxldCBtZSBtYWtlIHN1cmUgdGhhdCBgSU9fVVJJTkdgIGlzIHRoZSBvbmx5IGNvbmZpZyB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQuIEkgc2VlIHRoYXQgYENPTkZJR19JT19VUklOR2AsIGBDT05GSUdfSU5FVGAsIGFuZCBgQ09ORklHX1RSQUNJTkdgIGFyZSBzdGFuZGFyZCwgc28gbm8gbmVlZCB0byBvdmVydGhpbmsgaXQuCgpJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGBDT05GSUdfSU9fVVJJTkdgIGluIEtjb25maWcgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcsIGJ1dCBJJiMzOTttIGZlZWxpbmcgY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMgc28gZmFyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU9fVVJJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE5MTA9Y29uZmlnIEFJT1xuLS1cbmluaXQvS2NvbmZpZy0xOTE3LVxuaW5pdC9LY29uZmlnOjE5MTg6Y29uZmlnIElPX1VSSU5HXG5pbml0L0tjb25maWctMTkxOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4tLVxuaW5pdC9LY29uZmlnPTE5Mjc9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xuLS1cbmluaXQvS2NvbmZpZy0xOTM5LVxuaW5pdC9LY29uZmlnOjE5NDA6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxuaW5pdC9LY29uZmlnLTE5NDEtXHR0cmlzdGF0ZSBcJiMzNDtFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxMTMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSU9fVVJJTkcsIFplcm9jb3B5LCBhbmQgUmluZyBCdWZmZXJzOiBBIE1lbnRhbCBNYXAqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGBJT19VUklOR2AgYXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbi4gR290IGl0LiBOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIGB0Y3BfemVyb2NvcHlfcmVjZWl2ZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doZXJlIGRvZXMgdGhpcyBhY3R1YWxseSBsaXZlPyYjMzQ7IEFoLCB5ZXMsIGBuZXQvaXB2NC90Y3AuY2AuIFRoYXQmIzM5O3MgcmlnaHQsIHRoYXQmIzM5O3MgYSBjb3JlIGNvbXBvbmVudCwgYWx3YXlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gTm8gc3VycHJpc2VzIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gYHJpbmdfYnVmZmVyX21hcGAuIFRoYXQmIzM5O3MgaW4gYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYCwgYW5kIGlmIEkgcmVjYWxsIGNvcnJlY3RseSBmcm9tIHBhc3QgZXhwZXJpZW5jZXMsIHRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gWWVwLCBpdCYjMzk7cyBkZXBlbmRlbnQgb24gYENPTkZJR19UUkFDSU5HYC4gTWFrZXMgc2Vuc2UsIGFzIHJpbmcgYnVmZmVycyBhcmUgY3J1Y2lhbCBmb3IgdHJhY2luZyBhbmQgcGVyZm9ybWFuY2UgbW9uaXRvcmluZy4gU28sIGBJT19VUklOR2AsIGB0Y3BfemVyb2NvcHlfcmVjZWl2ZWAsIGFuZCBgQ09ORklHX1RSQUNJTkdgIGFyZSBhbGwgY29ubmVjdGVkIGluIHRoaXMgY29udGV4dCwgbm93IGxldCBtZSB0aGluayBhYm91dCBob3cgaXQgYWxsIHRpZXMgaW4uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRSQUNJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZz0xNjM9Y29uZmlnIFBSRUVNUFRJUlFfVFJBQ0VQT0lOVFNcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xNzgtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxNzk6Y29uZmlnIFRSQUNJTkdcbmtlcm5lbC90cmFjZS9LY29uZmlnLTE4MC1cdGJvb2xcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xOTA9Y29uZmlnIEdFTkVSSUNfVFJBQ0VSXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMTk3LSNcbmtlcm5lbC90cmFjZS9LY29uZmlnOjE5ODpjb25maWcgVFJBQ0lOR19TVVBQT1JUXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xOTktXHRib29sXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9NzA3PWVuZGNob2ljZVxua2VybmVsL3RyYWNlL0tjb25maWctNzA4LVxua2VybmVsL3RyYWNlL0tjb25maWc6NzA5OmNvbmZpZyBUUkFDSU5HX0JSQU5DSEVTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy03MTAtXHRib29sXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9ODk1PWNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9SRUNPUkRNQ09VTlRcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy05MDEtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo5MDI6Y29uZmlnIFRSQUNJTkdfTUFQXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy05MDMtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzIwCgkJCQkJCQlvdXRwdXQ6IDE3MgoJCQkJCQkJdGhvdWdodHM6IDE0ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgYHZtX2luc2VydF9wYWdlc2AqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBgVFJBQ0lOR2Agc2VlbXMgc3RhbmRhcmQgZW5vdWdoLCBub3RoaW5nIHRvIHdvcnJ5IGFib3V0IHRoZXJlLiBOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgYENPTkZJR19NTVVgIGRlcGVuZGVuY3kuIExvb2tpbmcgYXQgYG1tL21lbW9yeS5jYCwgdGhlIGRlZmluaXRpb24gb2YgYHZtX2luc2VydF9wYWdlc2AgaXMgY29uZGl0aW9uYWwgb24gYENPTkZJR19NTVVgLCB3aGljaCBpcyB3aGF0IEkgd291bGQgZXhwZWN0LiBIb3dldmVyLCBgbW0vbm9tbXUuY2AgYWxzbyBoYXMgYSBgdm1faW5zZXJ0X3BhZ2VzYCwgd2hpY2ggcmV0dXJucyBgLUVJTlZBTGAuIFRoaXMgbWVhbnMgdG8gcHJvcGVybHkgdGVzdCB0aGUgY2hhbmdlcywgSSYjMzk7bGwgbmVlZCBgQ09ORklHX01NVWAgZW5hYmxlZCwgd2hpY2ggaXNuJiMzOTt0IGEgcHJvYmxlbSBzaW5jZSBpdCYjMzk7cyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQgb24gbW9kZXJuIGFyY2hpdGVjdHVyZXMuCgpJJiMzOTtsbCBhZGQgYElPX1VSSU5HYCB0byBgRW5hYmxlQ29uZmlnc2AgdG8ga2VlcCB0cmFjayBvZiB0aGF0LgoKTXkga2V5IGZvY3VzIHN5bWJvbHMgaGVyZSBhcmUgYHZtX2luc2VydF9wYWdlc2AsIGBpb191cmluZ19tbWFwYCwgYHRjcF96ZXJvY29weV9yZWNlaXZlYCwgYHJpbmdfYnVmZmVyX21hcGAsIGFuZCBgbW1hcF9hY3Rpb25fY29tcGxldGVgLgoKV2FpdCwgYG1tYXBfYWN0aW9uX2NvbXBsZXRlYCBpcyBpbiBgbW0vdXRpbC5jYC4gR29vZCwgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgaXQmIzM5O3MgcmVhY2hhYmxlLiBZZXMsIGl0JiMzOTtzIGNhbGxlZCBieSBgX19tbWFwX3JlZ2lvbmAuCgpOb3csIGJhY2sgdG8gdGhlIHBhdGNoIGl0c2VsZi4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyB0byBlcnJvciBoYW5kbGluZyBpbiBgdm1faW5zZXJ0X3BhZ2VzYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBub3cgY29ycmVjdGx5IHJldHVybnMgYC1FTk9NRU1gIHdoZW4gcGFnZSB0YWJsZSBhbGxvY2F0aW9uIGZhaWxzIGFuZCBzZXRzIHRoZSBjb3JyZWN0IHJldHVybiBjb2RlcyB0aHJvdWdob3V0IHRoZSBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSBjb3VsZCByZXR1cm4gYC1FRkFVTFRgIGluIGNhc2VzIHdoZXJlIGAtRU5PTUVNYCB3YXMgbW9yZSBhcHByb3ByaWF0ZSwgZXNwZWNpYWxseSB3aGVuIGB3YWxrX3RvX3BtZGAgb3IgYHB0ZV9hbGxvY2AgZmFpbC4gVGhlIGNoYW5nZSBhbHNvIGluY2x1ZGVzIGEgcmVuYW1lIG9mIGB3YWxrX3RvX3BtZGAgdG8gYHBvcHVsYXRlX3RvX3BtZGAuCgpTbyB0aGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYC1FRkFVTFRgIHdhcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGAtRU5PTUVNYCBpbiBzZXZlcmFsIHNpdHVhdGlvbnMuIFNwZWNpZmljYWxseSwgaWYgYHdhbGtfdG9fcG1kYCBmYWlsZWQsIHRoZSBmdW5jdGlvbiBub3cgcmV0dXJucyBgLUVOT01FTWAgaW5zdGVhZCBvZiBgLUVGQVVMVGAuIFRoZSBzYW1lIGlzIHRydWUgZm9yIGBwdGVfYWxsb2NgLgoKTm93LCBpZiBhbGwgcGFnZXMgaW4gYSBiYXRjaCBhcmUgc3VjY2Vzc2Z1bGx5IGluc2VydGVkLCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtX2luc2VydF9wYWdlcyYjMzQ7LAogICAgJiMzNDtpb191cmluZ19tbWFwJiMzNDssCiAgICAmIzM0O3RjcF96ZXJvY29weV9yZWNlaXZlJiMzNDssCiAgICAmIzM0O3JpbmdfYnVmZmVyX21hcCYjMzQ7LAogICAgJiMzNDttbWFwX2FjdGlvbl9jb21wbGV0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBpbnNlcnRfcGFnZXNgIHdoZW4gcGFnZSB0YWJsZSBhbGxvY2F0aW9uIGZhaWxzLCByZXR1cm5pbmcgYC1FTk9NRU1gIGluc3RlYWQgb2YgYC1FRkFVTFRgLiBJdCBhbHNvIHJlbmFtZXMgYHdhbGtfdG9fcG1kYCB0byBgcG9wdWxhdGVfdG9fcG1kYCB0byBiZXR0ZXIgcmVmbGVjdCBpdHMgYmVoYXZpb3IuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBjYWxsZXJzIG9mIGB2bV9pbnNlcnRfcGFnZXNgIHN1Y2ggYXMgaW9fdXJpbmcsIHRjcCB6ZXJvY29weSwgYW5kIHRyYWNlIHJpbmcgYnVmZmVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bV9pbnNlcnRfcGFnZXMmIzM0OywKICAgICYjMzQ7aW9fdXJpbmdfbW1hcCYjMzQ7LAogICAgJiMzNDt0Y3BfemVyb2NvcHlfcmVjZWl2ZSYjMzQ7LAogICAgJiMzNDtyaW5nX2J1ZmZlcl9tYXAmIzM0OywKICAgICYjMzQ7bW1hcF9hY3Rpb25fY29tcGxldGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBgaW5zZXJ0X3BhZ2VzYCB3aGVuIHBhZ2UgdGFibGUgYWxsb2NhdGlvbiBmYWlscywgcmV0dXJuaW5nIGAtRU5PTUVNYCBpbnN0ZWFkIG9mIGAtRUZBVUxUYC4gSXQgYWxzbyByZW5hbWVzIGB3YWxrX3RvX3BtZGAgdG8gYHBvcHVsYXRlX3RvX3BtZGAgdG8gYmV0dGVyIHJlZmxlY3QgaXRzIGJlaGF2aW9yLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGFmZmVjdHMgY2FsbGVycyBvZiBgdm1faW5zZXJ0X3BhZ2VzYCBzdWNoIGFzIGlvX3VyaW5nLCB0Y3AgemVyb2NvcHksIGFuZCB0cmFjZSByaW5nIGJ1ZmZlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMDo0OC44NDI3NzQ2NDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc5MDIwMzYxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bV9pbnNlcnRfcGFnZXNcIixcbiAgICBcImlvX3VyaW5nX21tYXBcIixcbiAgICBcInRjcF96ZXJvY29weV9yZWNlaXZlXCIsXG4gICAgXCJyaW5nX2J1ZmZlcl9tYXBcIixcbiAgICBcIm1tYXBfYWN0aW9uX2NvbXBsZXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBgaW5zZXJ0X3BhZ2VzYCB3aGVuIHBhZ2UgdGFibGUgYWxsb2NhdGlvbiBmYWlscywgcmV0dXJuaW5nIGAtRU5PTUVNYCBpbnN0ZWFkIG9mIGAtRUZBVUxUYC4gSXQgYWxzbyByZW5hbWVzIGB3YWxrX3RvX3BtZGAgdG8gYHBvcHVsYXRlX3RvX3BtZGAgdG8gYmV0dGVyIHJlZmxlY3QgaXRzIGJlaGF2aW9yLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGFmZmVjdHMgY2FsbGVycyBvZiBgdm1faW5zZXJ0X3BhZ2VzYCBzdWNoIGFzIGlvX3VyaW5nLCB0Y3AgemVyb2NvcHksIGFuZCB0cmFjZSByaW5nIGJ1ZmZlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMwOjQ4Ljg0Mjc4NDAzOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE5MjE2NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzM1ZWRjODQyYjIwNjA3ZjM0ZDc2OWM5ZTVmOTA4MDlmYjQ2YjE0MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyA1IDE3OjMwOjQ3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCBmZjMzOGMyYWJlOTIzLi4xNjA5MzQ3OWQzNDEwIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtMjI2OCw3ICsyMjY4LDcgQEAgdm9pZCB6YXBfc3BlY2lhbF92bWFfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTCh6YXBfc3BlY2lhbF92bWFfcmFuZ2UpO1xcbiBcXG4tc3RhdGljIHBtZF90ICp3YWxrX3RvX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbitzdGF0aWMgcG1kX3QgKnBvcHVsYXRlX3RvX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbiB7XFxuIFxcdHBnZF90ICpwZ2Q7XFxuIFxcdHA0ZF90ICpwNGQ7XFxuQEAgLTIyOTMsNyArMjI5Myw3IEBAIHN0YXRpYyBwbWRfdCAqd2Fsa190b19wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gcHRlX3QgKmdldF9sb2NrZWRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdCAgICAgIHNwaW5sb2NrX3QgKipwdGwpXFxuIHtcXG4tXFx0cG1kX3QgKnBtZCA9IHdhbGtfdG9fcG1kKG1tLCBhZGRyKTtcXG4rXFx0cG1kX3QgKnBtZCA9IHBvcHVsYXRlX3RvX3BtZChtbSwgYWRkcik7XFxuIFxcbiBcXHRpZiAoIXBtZClcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuQEAgLTI0MzQsMjAgKzI0MzQsMjIgQEAgc3RhdGljIGludCBpbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0dW5zaWduZWQgbG9uZyBjdXJyX3BhZ2VfaWR4ID0gMDtcXG4gXFx0dW5zaWduZWQgbG9uZyByZW1haW5pbmdfcGFnZXNfdG90YWwgPSAqbnVtO1xcbiBcXHR1bnNpZ25lZCBsb25nIHBhZ2VzX3RvX3dyaXRlX2luX3BtZDtcXG4tXFx0aW50IHJldDtcXG4rXFx0aW50IGVyciA9IDA7XFxuIG1vcmU6XFxuLVxcdHJldCA9IC1FRkFVTFQ7XFxuLVxcdHBtZCA9IHdhbGtfdG9fcG1kKG1tLCBhZGRyKTtcXG4tXFx0aWYgKCFwbWQpXFxuK1xcdHBtZCA9IHBvcHVsYXRlX3RvX3BtZChtbSwgYWRkcik7XFxuK1xcdGlmICghcG1kKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuIFxcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcbiBcXHRwYWdlc190b193cml0ZV9pbl9wbWQgPSBtaW5fdCh1bnNpZ25lZCBsb25nLFxcbiBcXHRcXHRyZW1haW5pbmdfcGFnZXNfdG90YWwsIFBUUlNfUEVSX1BURSAtIHB0ZV9pbmRleChhZGRyKSk7XFxuIFxcbiBcXHQvKiBBbGxvY2F0ZSB0aGUgUFRFIGlmIG5lY2Vzc2FyeTsgdGFrZXMgUE1EIGxvY2sgb25jZSBvbmx5LiAqL1xcbi1cXHRyZXQgPSAtRU5PTUVNO1xcbi1cXHRpZiAocHRlX2FsbG9jKG1tLCBwbWQpKVxcbitcXHRpZiAocHRlX2FsbG9jKG1tLCBwbWQpKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuIFxcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcbiBcXHR3aGlsZSAocGFnZXNfdG9fd3JpdGVfaW5fcG1kKSB7XFxuIFxcdFxcdGludCBwdGVfaWR4ID0gMDtcXG5AQCAtMjQ1NSwxNSArMjQ1NywxNCBAQCBzdGF0aWMgaW50IGluc2VydF9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXG4gXFx0XFx0c3RhcnRfcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBhZGRyLCBcXHUwMDI2cHRlX2xvY2spO1xcbiBcXHRcXHRpZiAoIXN0YXJ0X3B0ZSkge1xcbi1cXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbitcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRmb3IgKHB0ZSA9IHN0YXJ0X3B0ZTsgcHRlX2lkeCBcXHUwMDNjIGJhdGNoX3NpemU7ICsrcHRlLCArK3B0ZV9pZHgpIHtcXG4tXFx0XFx0XFx0aW50IGVyciA9IGluc2VydF9wYWdlX2luX2JhdGNoX2xvY2tlZCh2bWEsIHB0ZSxcXG4tXFx0XFx0XFx0XFx0YWRkciwgcGFnZXNbY3Vycl9wYWdlX2lkeF0sIHByb3QpO1xcbitcXHRcXHRcXHRlcnIgPSBpbnNlcnRfcGFnZV9pbl9iYXRjaF9sb2NrZWQodm1hLCBwdGUsIGFkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgcGFnZXNbY3Vycl9wYWdlX2lkeF0sIHByb3QpO1xcbiBcXHRcXHRcXHRpZiAodW5saWtlbHkoZXJyKSkge1xcbiBcXHRcXHRcXHRcXHRwdGVfdW5tYXBfdW5sb2NrKHN0YXJ0X3B0ZSwgcHRlX2xvY2spO1xcbi1cXHRcXHRcXHRcXHRyZXQgPSBlcnI7XFxuIFxcdFxcdFxcdFxcdHJlbWFpbmluZ19wYWdlc190b3RhbCAtPSBwdGVfaWR4O1xcbiBcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0XFx0fVxcbkBAIC0yNDc2LDEwICsyNDc3LDkgQEAgc3RhdGljIGludCBpbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0fVxcbiBcXHRpZiAocmVtYWluaW5nX3BhZ2VzX3RvdGFsKVxcbiBcXHRcXHRnb3RvIG1vcmU7XFxuLVxcdHJldCA9IDA7XFxuIG91dDpcXG4gXFx0Km51bSA9IHJlbWFpbmluZ19wYWdlc190b3RhbDtcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gLyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMwOjQ5LjI2MjY0ODEyNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzNzQ4MjE1MzE5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtX2luc2VydF9wYWdlc1wiLFxuICAgIFwiaW9fdXJpbmdfbW1hcFwiLFxuICAgIFwidGNwX3plcm9jb3B5X3JlY2VpdmVcIixcbiAgICBcInJpbmdfYnVmZmVyX21hcFwiLFxuICAgIFwibW1hcF9hY3Rpb25fY29tcGxldGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBpbnNlcnRfcGFnZXNgIHdoZW4gcGFnZSB0YWJsZSBhbGxvY2F0aW9uIGZhaWxzLCByZXR1cm5pbmcgYC1FTk9NRU1gIGluc3RlYWQgb2YgYC1FRkFVTFRgLiBJdCBhbHNvIHJlbmFtZXMgYHdhbGtfdG9fcG1kYCB0byBgcG9wdWxhdGVfdG9fcG1kYCB0byBiZXR0ZXIgcmVmbGVjdCBpdHMgYmVoYXZpb3IuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBjYWxsZXJzIG9mIGB2bV9pbnNlcnRfcGFnZXNgIHN1Y2ggYXMgaW9fdXJpbmcsIHRjcCB6ZXJvY29weSwgYW5kIHRyYWNlIHJpbmcgYnVmZmVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzM1ZWRjODQyYjIwNjA3ZjM0ZDc2OWM5ZTVmOTA4MDlmYjQ2YjE0MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTc6MzA6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCBmZjMzOGMyYWJlOTIzLi4xNjA5MzQ3OWQzNDEwIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtMjI2OCw3ICsyMjY4LDcgQEAgdm9pZCB6YXBfc3BlY2lhbF92bWFfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoemFwX3NwZWNpYWxfdm1hX3JhbmdlKTtcbiBcbi1zdGF0aWMgcG1kX3QgKndhbGtfdG9fcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4rc3RhdGljIHBtZF90ICpwb3B1bGF0ZV90b19wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRwZ2RfdCAqcGdkO1xuIFx0cDRkX3QgKnA0ZDtcbkBAIC0yMjkzLDcgKzIyOTMsNyBAQCBzdGF0aWMgcG1kX3QgKndhbGtfdG9fcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gcHRlX3QgKmdldF9sb2NrZWRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdCAgICAgIHNwaW5sb2NrX3QgKipwdGwpXG4ge1xuLVx0cG1kX3QgKnBtZCA9IHdhbGtfdG9fcG1kKG1tLCBhZGRyKTtcbitcdHBtZF90ICpwbWQgPSBwb3B1bGF0ZV90b19wbWQobW0sIGFkZHIpO1xuIFxuIFx0aWYgKCFwbWQpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTI0MzQsMjAgKzI0MzQsMjIgQEAgc3RhdGljIGludCBpbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdHVuc2lnbmVkIGxvbmcgY3Vycl9wYWdlX2lkeCA9IDA7XG4gXHR1bnNpZ25lZCBsb25nIHJlbWFpbmluZ19wYWdlc190b3RhbCA9ICpudW07XG4gXHR1bnNpZ25lZCBsb25nIHBhZ2VzX3RvX3dyaXRlX2luX3BtZDtcbi1cdGludCByZXQ7XG4rXHRpbnQgZXJyID0gMDtcbiBtb3JlOlxuLVx0cmV0ID0gLUVGQVVMVDtcbi1cdHBtZCA9IHdhbGtfdG9fcG1kKG1tLCBhZGRyKTtcbi1cdGlmICghcG1kKVxuK1x0cG1kID0gcG9wdWxhdGVfdG9fcG1kKG1tLCBhZGRyKTtcbitcdGlmICghcG1kKSB7XG4rXHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0O1xuK1x0fVxuIFxuIFx0cGFnZXNfdG9fd3JpdGVfaW5fcG1kID0gbWluX3QodW5zaWduZWQgbG9uZyxcbiBcdFx0cmVtYWluaW5nX3BhZ2VzX3RvdGFsLCBQVFJTX1BFUl9QVEUgLSBwdGVfaW5kZXgoYWRkcikpO1xuIFxuIFx0LyogQWxsb2NhdGUgdGhlIFBURSBpZiBuZWNlc3Nhcnk7IHRha2VzIFBNRCBsb2NrIG9uY2Ugb25seS4gKi9cbi1cdHJldCA9IC1FTk9NRU07XG4tXHRpZiAocHRlX2FsbG9jKG1tLCBwbWQpKVxuK1x0aWYgKHB0ZV9hbGxvYyhtbSwgcG1kKSkge1xuK1x0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dDtcbitcdH1cbiBcbiBcdHdoaWxlIChwYWdlc190b193cml0ZV9pbl9wbWQpIHtcbiBcdFx0aW50IHB0ZV9pZHggPSAwO1xuQEAgLTI0NTUsMTUgKzI0NTcsMTQgQEAgc3RhdGljIGludCBpbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcbiBcdFx0c3RhcnRfcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBhZGRyLCBcdTAwMjZwdGVfbG9jayk7XG4gXHRcdGlmICghc3RhcnRfcHRlKSB7XG4tXHRcdFx0cmV0ID0gLUVGQVVMVDtcbitcdFx0XHRlcnIgPSAtRUZBVUxUO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXHRcdGZvciAocHRlID0gc3RhcnRfcHRlOyBwdGVfaWR4IFx1MDAzYyBiYXRjaF9zaXplOyArK3B0ZSwgKytwdGVfaWR4KSB7XG4tXHRcdFx0aW50IGVyciA9IGluc2VydF9wYWdlX2luX2JhdGNoX2xvY2tlZCh2bWEsIHB0ZSxcbi1cdFx0XHRcdGFkZHIsIHBhZ2VzW2N1cnJfcGFnZV9pZHhdLCBwcm90KTtcbitcdFx0XHRlcnIgPSBpbnNlcnRfcGFnZV9pbl9iYXRjaF9sb2NrZWQodm1hLCBwdGUsIGFkZHIsXG4rXHRcdFx0XHRcdFx0XHQgIHBhZ2VzW2N1cnJfcGFnZV9pZHhdLCBwcm90KTtcbiBcdFx0XHRpZiAodW5saWtlbHkoZXJyKSkge1xuIFx0XHRcdFx0cHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0ZV9sb2NrKTtcbi1cdFx0XHRcdHJldCA9IGVycjtcbiBcdFx0XHRcdHJlbWFpbmluZ19wYWdlc190b3RhbCAtPSBwdGVfaWR4O1xuIFx0XHRcdFx0Z290byBvdXQ7XG4gXHRcdFx0fVxuQEAgLTI0NzYsMTAgKzI0NzcsOSBAQCBzdGF0aWMgaW50IGluc2VydF9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0fVxuIFx0aWYgKHJlbWFpbmluZ19wYWdlc190b3RhbClcbiBcdFx0Z290byBtb3JlO1xuLVx0cmV0ID0gMDtcbiBvdXQ6XG4gXHQqbnVtID0gcmVtYWluaW5nX3BhZ2VzX3RvdGFsO1xuLVx0cmV0dXJuIHJldDtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIC8qKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6MzA6NDkuMjYyNjQ5NDY2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzcyNTU2NzQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9tZW1vcnkuY2AuIEl0IHNlZW1zIHRoZXkncmUgcmVuYW1pbmcgYHdhbGtfdG9fcG1kYCB0byBgcG9wdWxhdGVfdG9fcG1kYCwgd2hpY2ggaXMgYW4gaW50ZXJlc3Rpbmcgc2VtYW50aWMgc2hpZnQuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgcmVuYW1lIGxhdGVyOyBmb3Igbm93LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIHJldHVybiB2YWx1ZXMuIEl0IGFsc28gc2VlbXMgdGhleSd2ZSBjaGFuZ2VkIGhvdyBgaW5zZXJ0X3BhZ2VzYCBoYW5kbGVzIGVycm9ycyBmcm9tIGBwb3B1bGF0ZV90b19wbWRgIChvcmlnaW5hbGx5IGB3YWxrX3RvX3BtZGApLCBtYWtpbmcgaXQgcmV0dXJuIGAtRU5PTUVNYCBpbnN0ZWFkIG9mIGAtRUZBVUxUYCBvbiBmYWlsdXJlLiBUaGV5J3ZlIGFsc28gY2xlYW5lZCB1cCB0aGUgZXJyb3IgcmV0dXJucyBmcm9tIHRoZSBwYXRjaCwgYW5kIEkndmUgcXVpY2tseSBjb25maXJtZWQgdGhhdCBgcHRlX2FsbG9jYCBzaG91bGQgYmUgYC1FTk9NRU1gLCBhbmQgYHB0ZV9vZmZzZXRfbWFwX2xvY2tgIHNob3VsZCBiZSBgLUVGQVVMVGAgKGFzIGl0IG9yaWdpbmFsbHkgd2FzKS5cblxuV2FpdCBhIHNlY29uZOKApiB0aGUgY2hhbmdlIGZyb20gYC1FRkFVTFRgIHRvIGAtRU5PTUVNYCBmb3IgdGhlIGBwb3B1bGF0ZV90b19wbWRgIGZhaWx1cmUuIFRoYXQncyB0aGUga2V5LiBXaHkgdGhlIGNoYW5nZT8gSXMgdGhpcyBhIHN0YW5kYXJkaXNhdGlvbiBpc3N1ZSwgb3IgaXMgaXQgcmVsYXRlZCB0byBtZW1vcnkgZXhoYXVzdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgd2FzIGNoYW5nZWQuIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBvdGhlciBjaGFuZ2VzIGluIHRoZSBwYXRjaCBhbmQgY29uc2lkZXIgaG93IGl0IGltcGFjdHMgdGhlIG90aGVyIGNvZGUgdGhhdCBjYWxscyBgaW5zZXJ0X3BhZ2VzYC4gTGV0J3Mgc2VlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgdXNlZCwgc28gSSdsbCBncmFiIGBncmVwcGVyYCBhbmQgZ2V0IGEgY2FsbCBncmFwaC4gSSdsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGlzIGNoYW5nZSBpbiBwYXJ0aWN1bGFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTAzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6MzA6NTYuOTg4MjE5NjI2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODg2Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluc2VydF9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnkuYz0yNDEzPXN0YXRpYyBpbnQgaW5zZXJ0X3BhZ2VfaW5fYmF0Y2hfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdGVfdCAqcHRlLFxcbi0tXFxubW0vbWVtb3J5LmMtMjQyMy1cXG5tbS9tZW1vcnkuYzoyNDI0Oi8qIGluc2VydF9wYWdlcygpIGFtb3J0aXplcyB0aGUgY29zdCBvZiBzcGlubG9jayBvcGVyYXRpb25zXFxubW0vbWVtb3J5LmMtMjQyNS0gKiB3aGVuIGluc2VydGluZyBwYWdlcyBpbiBhIGxvb3AuXFxubW0vbWVtb3J5LmMtMjQyNi0gKi9cXG5tbS9tZW1vcnkuYzoyNDI3OnN0YXRpYyBpbnQgaW5zZXJ0X3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vbWVtb3J5LmMtMjQyOC1cXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBsb25nICpudW0sIHBncHJvdF90IHByb3QpXFxuLS1cXG5tbS9tZW1vcnkuYy0yNDg1LS8qKlxcbm1tL21lbW9yeS5jOjI0ODY6ICogdm1faW5zZXJ0X3BhZ2VzIC0gaW5zZXJ0IG11bHRpcGxlIHBhZ2VzIGludG8gdXNlciB2bWEsIGJhdGNoaW5nIHRoZSBwbWQgbG9jay5cXG5tbS9tZW1vcnkuYy0yNDg3LSAqIEB2bWE6IHVzZXIgdm1hIHRvIG1hcCB0b1xcbi0tXFxubW0vbWVtb3J5LmMtMjQ5OS0gKi9cXG5tbS9tZW1vcnkuYzoyNTAwOmludCB2bV9pbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9tZW1vcnkuYy0yNTAxLVxcdFxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGxvbmcgKm51bSlcXG4tLVxcbm1tL21lbW9yeS5jLTI1MTMtXFx0LyogRGVmZXIgcGFnZSByZWZjb3VudCBjaGVja2luZyB0aWxsIHdlJ3JlIGFib3V0IHRvIG1hcCB0aGF0IHBhZ2UuICovXFxubW0vbWVtb3J5LmM6MjUxNDpcXHRyZXR1cm4gaW5zZXJ0X3BhZ2VzKHZtYSwgYWRkciwgcGFnZXMsIG51bSwgdm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QpO1xcbm1tL21lbW9yeS5jLTI1MTUtfVxcbm1tL21lbW9yeS5jOjI1MTY6RVhQT1JUX1NZTUJPTCh2bV9pbnNlcnRfcGFnZXMpO1xcbm1tL21lbW9yeS5jLTI1MTctXFxuLS1cXG5tbS9tZW1vcnkuYz0yNTM5PWludCBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtMjU0NC1cXHRucl9wYWdlcyA9IGFjdGlvbi1cXHUwMDNlbWFwX2tlcm5lbC5ucl9wYWdlcztcXG5tbS9tZW1vcnkuYzoyNTQ1OlxcdHJldHVybiBpbnNlcnRfcGFnZXModm1hLCBhY3Rpb24tXFx1MDAzZW1hcF9rZXJuZWwuc3RhcnQsXFxubW0vbWVtb3J5LmMtMjU0Ni1cXHRcXHRcXHQgICAgYWN0aW9uLVxcdTAwM2VtYXBfa2VybmVsLnBhZ2VzLFxcbi0tXFxubW0vbWVtb3J5LmM9MjYwOD1zdGF0aWMgaW50IF9fdm1fbWFwX3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbi0tXFxubW0vbWVtb3J5LmMtMjYyMS1cXG5tbS9tZW1vcnkuYzoyNjIyOlxcdHJldHVybiB2bV9pbnNlcnRfcGFnZXModm1hLCB1YWRkciwgcGFnZXMgKyBvZmZzZXQsIFxcdTAwMjZjb3VudCk7XFxubW0vbWVtb3J5LmMtMjYyMy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMwOjU3LjAzODExMTg4MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTI4OTU0MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKlRyYWNpbmcgdGhlIFVzYWdlIG9mIGB2bV9pbnNlcnRfcGFnZXNgKipcblxuT2theSwgc28gYGluc2VydF9wYWdlc2AgZ2V0cyBjYWxsZWQgYnkgYHZtX2luc2VydF9wYWdlc2AgYW5kIGBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIE5vdywgdGhlIGludGVyZXN0aW5nIHRoaW5nIGhlcmUgaXMgdGhhdCBgdm1faW5zZXJ0X3BhZ2VzYCBpcyBhY3R1YWxseSBleHBvcnRlZC4gVGhpcyBpcyBhIGtleSBkZXRhaWwuIFRoYXQgbWVhbnMgaXQncyBhdmFpbGFibGUgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgcG90ZW50aWFsbHkgZXZlbiBtb2R1bGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hlcmUqIHRoYXQgZXhwb3J0ZWQgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gV2hlcmUgYXJlIHRoZSBjYWxsIHNpdGVzIG9mIGB2bV9pbnNlcnRfcGFnZXNgIGl0c2VsZj8gVGhhdCdzIHRoZSBjb3JlIHF1ZXN0aW9uIG5vdy4gTGV0J3MgZGlnIGluIGFuZCBmaW5kIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE0OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMwOjU5LjkzMTAwOTU1MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQwNDk5MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtX2luc2VydF9wYWdlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYz00Mzk9c3RhdGljIGludCBhbWR4ZG5hX2luc2VydF9wYWdlcyhzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8sXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy00NTUtXFx0XFx0dm1fZmxhZ3NfbW9kKHZtYSwgVk1fTUlYRURNQVAsIFZNX1BGTk1BUCk7XFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmM6NDU2OlxcdFxcdHJldCA9IHZtX2luc2VydF9wYWdlcyh2bWEsIHZtYS1cXHUwMDNldm1fc3RhcnQsIGFiby1cXHUwMDNlYmFzZS5wYWdlcyxcXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy00NTctXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm51bV9wYWdlcyk7XFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYz01MjI9c3RhdGljIGludCBhbWR4ZG5hX2dlbV9kbWFidWZfbW1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Ziwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy01MzgtXFx0dm1fZmxhZ3NfbW9kKHZtYSwgVk1fTUlYRURNQVAsIFZNX1BGTk1BUCk7XFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmM6NTM5OlxcdHJldCA9IHZtX2luc2VydF9wYWdlcyh2bWEsIHZtYS1cXHUwMDNldm1fc3RhcnQsIGFiby1cXHUwMDNlYmFzZS5wYWdlcyxcXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy01NDAtXFx0XFx0XFx0ICAgICAgXFx1MDAyNm51bV9wYWdlcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9NDUzNT1pbnQgdm1faW5zZXJ0X3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHBhZ2UgKik7XFxuaW5jbHVkZS9saW51eC9tbS5oOjQ1MzY6aW50IHZtX2luc2VydF9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmluY2x1ZGUvbGludXgvbW0uaC00NTM3LVxcdFxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGxvbmcgKm51bSk7XFxuLS1cXG5pb191cmluZy9tZW1tYXAuYz0yODQ9c3RhdGljIGludCBpb19yZWdpb25fbW1hcChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTI5MS1cXHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EKTtcXG5pb191cmluZy9tZW1tYXAuYzoyOTI6XFx0cmV0dXJuIHZtX2luc2VydF9wYWdlcyh2bWEsIHZtYS1cXHUwMDNldm1fc3RhcnQsIG1yLVxcdTAwM2VwYWdlcywgXFx1MDAyNm5yX3BhZ2VzKTtcXG5pb191cmluZy9tZW1tYXAuYy0yOTMtfVxcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM9NzYxMz1zdGF0aWMgaW50IF9fcmJfbWFwX3ZtYShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcixcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc3MDEtXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NzcwMjpcXHRlcnIgPSB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXFx1MDAzZXZtX3N0YXJ0LCBwYWdlcywgXFx1MDAyNm5yX3BhZ2VzKTtcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03NzAzLVxcbi0tXFxubW0vbWVtb3J5LmM9MjQyNz1zdGF0aWMgaW50IGluc2VydF9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtb3J5LmMtMjQ4NS0vKipcXG5tbS9tZW1vcnkuYzoyNDg2OiAqIHZtX2luc2VydF9wYWdlcyAtIGluc2VydCBtdWx0aXBsZSBwYWdlcyBpbnRvIHVzZXIgdm1hLCBiYXRjaGluZyB0aGUgcG1kIGxvY2suXFxubW0vbWVtb3J5LmMtMjQ4Ny0gKiBAdm1hOiB1c2VyIHZtYSB0byBtYXAgdG9cXG4tLVxcbm1tL21lbW9yeS5jLTI0OTktICovXFxubW0vbWVtb3J5LmM6MjUwMDppbnQgdm1faW5zZXJ0X3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vbWVtb3J5LmMtMjUwMS1cXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBsb25nICpudW0pXFxuLS1cXG5tbS9tZW1vcnkuYy0yNTE1LX1cXG5tbS9tZW1vcnkuYzoyNTE2OkVYUE9SVF9TWU1CT0wodm1faW5zZXJ0X3BhZ2VzKTtcXG5tbS9tZW1vcnkuYy0yNTE3LVxcbi0tXFxubW0vbWVtb3J5LmM9MjYwOD1zdGF0aWMgaW50IF9fdm1fbWFwX3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbi0tXFxubW0vbWVtb3J5LmMtMjYyMS1cXG5tbS9tZW1vcnkuYzoyNjIyOlxcdHJldHVybiB2bV9pbnNlcnRfcGFnZXModm1hLCB1YWRkciwgcGFnZXMgKyBvZmZzZXQsIFxcdTAwMjZjb3VudCk7XFxubW0vbWVtb3J5LmMtMjYyMy19XFxuLS1cXG5tbS9ub21tdS5jPTM1MD1FWFBPUlRfU1lNQk9MKHZtX2luc2VydF9wYWdlKTtcXG5tbS9ub21tdS5jLTM1MS1cXG5tbS9ub21tdS5jOjM1MjppbnQgdm1faW5zZXJ0X3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vbm9tbXUuYy0zNTMtXFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgbG9uZyAqbnVtKVxcbi0tXFxubW0vbm9tbXUuYy0zNTYtfVxcbm1tL25vbW11LmM6MzU3OkVYUE9SVF9TWU1CT0wodm1faW5zZXJ0X3BhZ2VzKTtcXG5tbS9ub21tdS5jLTM1OC1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTIwNjI9c3RhdGljIGludCB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoX2Vycm9yKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjA4OC1cXHRcXHQvKiBXZSBjYWxsZWQgemFwX3ZtYV9yYW5nZSwgdHJ5IHRvIHJlaW5zZXJ0LiAqL1xcbm5ldC9pcHY0L3RjcC5jOjIwODk6XFx0XFx0ZXJyID0gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgKmFkZHJlc3MsXFxubmV0L2lwdjQvdGNwLmMtMjA5MC1cXHRcXHRcXHRcXHQgICAgICBwZW5kaW5nX3BhZ2VzLFxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjExMD1zdGF0aWMgaW50IHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yMTIzLVxcbm5ldC9pcHY0L3RjcC5jOjIxMjQ6XFx0ZXJyID0gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgKmFkZHJlc3MsIHBhZ2VzLCBcXHUwMDI2cGFnZXNfcmVtYWluaW5nKTtcXG5uZXQvaXB2NC90Y3AuYy0yMTI1LVxcdHBhZ2VzX21hcHBlZCA9IHBhZ2VzX3RvX21hcCAtICh1bnNpZ25lZCBpbnQpcGFnZXNfcmVtYWluaW5nO1xcbm5ldC9pcHY0L3RjcC5jLTIxMjYtXFx0Ynl0ZXNfbWFwcGVkID0gUEFHRV9TSVpFICogcGFnZXNfbWFwcGVkO1xcbm5ldC9pcHY0L3RjcC5jOjIxMjc6XFx0LyogRXZlbiBpZiB2bV9pbnNlcnRfcGFnZXMgZmFpbHMsIGl0IG1heSBoYXZlIHBhcnRpYWxseSBzdWNjZWVkZWQgaW5cXG5uZXQvaXB2NC90Y3AuYy0yMTI4LVxcdCAqIG1hcHBpbmcgKHNvbWUgYnV0IG5vdCBhbGwgb2YgdGhlIHBhZ2VzKS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6MzE6MDEuNjcxNTE0NzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTAyMzcyODk2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB2bV9pbnNlcnRfcGFnZXNgIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYHZtX2luc2VydF9wYWdlc2AsIGEgZnVuY3Rpb24gdGhhdCdzIHVzZWQgaW4gc2V2ZXJhbCBrZXkgYXJlYXMg4oCTIGBpb191cmluZy9tZW1tYXAuY2AsIHRyYWNpbmcsIFRDUCB6ZXJvLWNvcHksIGFuZCBldmVuIEFNRCBHUFUgZHJpdmVycy4gVGhlIHBhdGNoIGZvY3VzZXMgb24gaG93IGBpbnNlcnRfcGFnZXNgIGhhbmRsZXMgZXJyb3JzLCBzcGVjaWZpY2FsbHkgd2hlbiBhbGxvY2F0aW5nIHBhZ2UgdGFibGUgZW50cmllcyAoUFRFcykuXG5cbkluaXRpYWxseSwgdGhlIGZ1bmN0aW9uIHNlZW1zIHRvIGhhdmUgYSBiaXQgb2YgYSBjb252b2x1dGVkIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5LiBUaGUgb3JpZ2luYWwgY29kZSBzZXRzIGByZXRgIHRvIGAtRU5PTUVNYCwgdGhlbiBjaGVja3MgaWYgYHB0ZV9hbGxvY2Agc3VjY2VlZHMuIElmIG5vdCwgaXQganVtcHMgdG8gYG91dGAuIEhvd2V2ZXIsIGlmIGBwdGVfb2Zmc2V0X21hcF9sb2NrYCAqYWxzbyogZmFpbHMgbGF0ZXIsIGl0IGNoYW5nZXMgYHJldGAgdG8gYC1FRkFVTFRgLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgc3RyZWFtbGluaW5nIHRoaXMsIG1vdmluZyB0aGUgZXJyb3IgY2hlY2sgZm9yIGBwdGVfYWxsb2NgIGlubGluZSB3aXRoIHRoZSBhbGxvY2F0aW9uIGl0c2VsZiBhbmQgYXNzaWduaW5nIHRoZSBlcnJvciBjb2RlIHRvIGBlcnJgLiBUaGlzIHNlZW1zIG1vcmUgc3RyYWlnaHRmb3J3YXJkLlxuXG5IZXJlLCBpbiB0aGUgcmV2aXNlZCBjb2RlLCBgZXJyYCBpcyBpbml0aWFsaXplZCB0byAwLiBJbnNpZGUgdGhlIGB3aGlsZWAgbG9vcCwgaWYgYGluc2VydF9wYWdlX2luX2JhdGNoX2xvY2tlZGAgcmV0dXJucyBhbiBlcnJvciwgaXQgaXMgc3RvcmVkIGluIGBlcnJgLlxuXG5JIHRoZW4gc2VlIHRoYXQsIGluIHRoZSBvcmlnaW5hbCBjb2RlLCBgcmV0YCB3YXMgc2V0IHRvIGAtRUZBVUxUYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBgbW9yZTpgIGxhYmVsLiBIb3dldmVyLCBub3cgYGVycmAgaXMgaW5pdGlhbGl6ZWQgdG8gMC4gSW5zdGVhZCBvZiBgd2Fsa190b19wbWRgLCB0aGUgcGF0Y2hlZCBjb2RlIHVzZXMgYHBvcHVsYXRlX3RvX3BtZGAsIGFuZCwgaWYgYHBvcHVsYXRlX3RvX3BtZGAgZmFpbHMsIGAtRU5PTUVNYCBpcyBhc3NpZ25lZCB0byBgZXJyYC5cblxuSG9sZCBvbiBhIHNlYywgd2hhdCdzIHRoaXMgYHBvcHVsYXRlX3RvX3BtZGA/IEl0IGxvb2tzIGxpa2UgYSBzaW1wbGUgcmVuYW1lIG9mIGB3YWxrX3RvX3BtZGAuIE5vdywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0J3MgYSBzaW1wbGUgcmVuYW1lLiBMZXQncyBnbyBsb29rIGF0IGBtbS9tZW1vcnkuY2AgYXJvdW5kIGxpbmUgMjI2OCB0byBjb25maXJtLiBJdCBtaWdodCBsb29rIGxpa2UganVzdCBhIG5hbWUgY2hhbmdlLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIGl0IGZ1bmN0aW9ucyBhcyB0aGUgb2xkIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODcyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMxOjEyLjY5NTI0NTk2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQyMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyNjgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyNjg6XFx0fVxcbjIyNjk6XFx0RVhQT1JUX1NZTUJPTF9HUEwoemFwX3NwZWNpYWxfdm1hX3JhbmdlKTtcXG4yMjcwOlxcdFxcbjIyNzE6XFx0c3RhdGljIHBtZF90ICpwb3B1bGF0ZV90b19wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4yMjcyOlxcdHtcXG4yMjczOlxcdFxcdHBnZF90ICpwZ2Q7XFxuMjI3NDpcXHRcXHRwNGRfdCAqcDRkO1xcbjIyNzU6XFx0XFx0cHVkX3QgKnB1ZDtcXG4yMjc2OlxcdFxcdHBtZF90ICpwbWQ7XFxuMjI3NzpcXHRcXG4yMjc4OlxcdFxcdHBnZCA9IHBnZF9vZmZzZXQobW0sIGFkZHIpO1xcbjIyNzk6XFx0XFx0cDRkID0gcDRkX2FsbG9jKG1tLCBwZ2QsIGFkZHIpO1xcbjIyODA6XFx0XFx0aWYgKCFwNGQpXFxuMjI4MTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4yMjgyOlxcdFxcdHB1ZCA9IHB1ZF9hbGxvYyhtbSwgcDRkLCBhZGRyKTtcXG4yMjgzOlxcdFxcdGlmICghcHVkKVxcbjIyODQ6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjI4NTpcXHRcXHRwbWQgPSBwbWRfYWxsb2MobW0sIHB1ZCwgYWRkcik7XFxuMjI4NjpcXHRcXHRpZiAoIXBtZClcXG4yMjg3OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjIyODg6XFx0XFxuMjI4OTpcXHRcXHRWTV9CVUdfT04ocG1kX3RyYW5zX2h1Z2UoKnBtZCkpO1xcbjIyOTA6XFx0XFx0cmV0dXJuIHBtZDtcXG4yMjkxOlxcdH1cXG4yMjkyOlxcdFxcbjIyOTM6XFx0cHRlX3QgKmdldF9sb2NrZWRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuMjI5NDpcXHRcXHRcXHQgICAgICBzcGlubG9ja190ICoqcHRsKVxcbjIyOTU6XFx0e1xcbjIyOTY6XFx0XFx0cG1kX3QgKnBtZCA9IHBvcHVsYXRlX3RvX3BtZChtbSwgYWRkcik7XFxuMjI5NzpcXHRcXG4yMjk4OlxcdFxcdGlmICghcG1kKVxcbjIyOTk6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjMwMDpcXHRcXHRyZXR1cm4gcHRlX2FsbG9jX21hcF9sb2NrKG1tLCBwbWQsIGFkZHIsIHB0bCk7XFxuMjMwMTpcXHR9XFxuMjMwMjpcXHRcXG4yMzAzOlxcdHN0YXRpYyBib29sIHZtX21peGVkX3plcm9wYWdlX2FsbG93ZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuMjMwNDpcXHR7XFxuMjMwNTpcXHRcXHRWTV9XQVJOX09OX09OQ0Uodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1BGTk1BUCk7XFxuMjMwNjpcXHRcXHQvKlxcbjIzMDc6XFx0XFx0ICogV2hvZXZlciB3YW50cyB0byBmb3JiaWQgdGhlIHplcm9wYWdlIGFmdGVyIHNvbWUgemVyb3BhZ2VzXFxuMjMwODpcXHRcXHQgKiBtaWdodCBhbHJlYWR5IGhhdmUgYmVlbiBtYXBwZWQgaGFzIHRvIHNjYW4gdGhlIHBhZ2UgdGFibGVzIGFuZFxcbjIzMDk6XFx0XFx0ICogYmFpbCBvdXQgb24gYW55IHplcm9wYWdlcy4gWmVyb3BhZ2VzIGluIENPVyBtYXBwaW5ncyBjYW5cXG4yMzEwOlxcdFxcdCAqIGJlIHVuc2hhcmVkIHVzaW5nIEZBVUxUX0ZMQUdfVU5TSEFSRSBmYXVsdHMuXFxuMjMxMTpcXHRcXHQgKi9cXG4yMzEyOlxcdFxcdGlmIChtbV9mb3JiaWRzX3plcm9wYWdlKHZtYS1cXHUwMDNldm1fbW0pKVxcbjIzMTM6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjIzMTQ6XFx0XFx0LyogemVyb3BhZ2VzIGluIENPVyBtYXBwaW5ncyBhcmUgY29tbW9uIGFuZCB1bnByb2JsZW1hdGljLiAqL1xcbjIzMTU6XFx0XFx0aWYgKGlzX2Nvd19tYXBwaW5nKHZtYS1cXHUwMDNldm1fZmxhZ3MpKVxcbjIzMTY6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMjMxNzpcXHRcXHQvKiBNYXBwaW5ncyB0aGF0IGRvIG5vdCBhbGxvdyBmb3Igd3JpdGFibGUgUFRFcyBhcmUgdW5wcm9ibGVtYXRpYy4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6MzE6MTIuNjk1NTg5NzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTYxNjk5NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGFnZSBUYWJsZSBQb3B1bGF0aW9uIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgcG9wdWxhdGVfdG9fcG1kYCBmdW5jdGlvbi4gVGhlIGNvZGUncyBhbGxvY2F0aW5nIHBhZ2UgdGFibGUgZW50cmllcyDigJMgUEdELCBQNEQsIFBVRCwgYW5kIFBNRC4gSXQncyBjbGVhcmx5ICpwb3B1bGF0aW5nKiB0aGUgcGFnZSB0YWJsZXMsIG5vdCBqdXN0IHRyYXZlcnNpbmcgdGhlbS4gVGhlIHJlbmFtZSBpcyBzcG90IG9uOyBpdCByZWZsZWN0cyB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nLiAgQW5kIHNpbmNlIHdlJ3JlIGFsbG9jYXRpbmcgbWVtb3J5LCBpZiBhbnkgb2YgdGhlc2UgYWxsb2NhdGlvbnMgZmFpbCwgaXQncyBhbiBPdXQtT2YtTWVtb3J5IChPT00pIHNpdHVhdGlvbi4gUmV0dXJuaW5nIGAtRU5PTUVNYCBpbnN0ZWFkIG9mIGAtRUZBVUxUYCBtYWtlcyBwZXJmZWN0IHNlbnNlIGluIHRoaXMgY29udGV4dCDigJMgbXVjaCBtb3JlIGFjY3VyYXRlIGVycm9yIHJlcG9ydGluZy5cblxuVGhpcyBtZWFucyB0aGVyZSdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHJldHVybiB2YWx1ZSBvZiBgaW5zZXJ0X3BhZ2VzYC4gYGluc2VydF9wYWdlc2AgaXMgY2FsbGVkIGZyb20gYHZtX2luc2VydF9wYWdlc2AgYW5kIGBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlYC4gIEludGVyZXN0aW5nLiBMZXQgbWUgY2hlY2sgdGhlIGNhbGxlcnMgb2YgaW5zZXJ0X3BhZ2VzIHRvIHNlZSB3aGF0IG1pZ2h0IGJlIHJlYWNoYWJsZS4gYHZtX2luc2VydF9wYWdlc2AgaXMgdXNlZCBpbiBgaW9fdXJpbmcvbWVtbWFwLmNgLCBga2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNgLCBhbmQgYG5ldC9pcHY0L3RjcC5jYC4gT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBPT00gc2l0dWF0aW9ucywgZnV6emluZyB0aGVzZSBjYWxsIHNpdGVzIHNvdW5kcyBsaWtlIGEgdmVyeSBnb29kIGlkZWEuIFxuXG5MZXQncyBmb2N1cyBvbiBgaW9fdXJpbmcvbWVtbWFwLmNgIGFuZCBgbmV0L2lwdjQvdGNwLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgY2FsbCBzaXRlcyBjYW4gYmUgdHJpZ2dlcmVkLiBgaW9fcmVnaW9uX21tYXBgIGluIGBpb191cmluZy9tZW1tYXAuY2AgaXMgcmVhY2hhYmxlIHZpYSBgbW1hcGAgb24gYW4gYGlvX3VyaW5nYCBmaWxlIGRlc2NyaXB0b3IsIGFuZCBgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaGAgaW4gYG5ldC9pcHY0L3RjcC5jYCBpcyB0cmlnZ2VyZWQgYnkgVENQIHplcm8tY29weSByZWNlaXZlIG9wZXJhdGlvbnMuXG5cbkFscmlnaHQsIGxldCdzIHN0YXJ0IHdpdGggYGlvX3VyaW5nL21lbW1hcC5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBpb19yZWdpb25fbW1hcGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMToxOS42NTcyOTI2MDlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NDE1MjQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19yZWdpb25fbW1hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbWVtbWFwLmM9MjcxPXN0YXRpYyB2b2lkICppb191cmluZ192YWxpZGF0ZV9tbWFwX3JlcXVlc3Qoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBwZ29mZilcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTI4My1cXG5pb191cmluZy9tZW1tYXAuYzoyODQ6c3RhdGljIGludCBpb19yZWdpb25fbW1hcChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG5pb191cmluZy9tZW1tYXAuYy0yODUtXFx0XFx0XFx0ICBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYz0yOTU9X19jb2xkIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTMxNy1cXHRyZWdpb24gPSBpb19tbWFwX2dldF9yZWdpb24oY3R4LCB2bWEtXFx1MDAzZXZtX3Bnb2ZmKTtcXG5pb191cmluZy9tZW1tYXAuYzozMTg6XFx0cmV0dXJuIGlvX3JlZ2lvbl9tbWFwKGN0eCwgcmVnaW9uLCB2bWEsIHBhZ2VfbGltaXQpO1xcbmlvX3VyaW5nL21lbW1hcC5jLTMxOS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMxOjE5Ljk1MTQ1MTQ3OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTM5NzY0OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGlvX3VyaW5nX21tYXBgIFBhdGgqKlxuXG5SaWdodCwgc28gYGlvX3VyaW5nX21tYXBgIGlzIGNhbGxpbmcgYGlvX3JlZ2lvbl9tbWFwYCwgd2hpY2gsIGluIHR1cm4sIGlzIGNhbGxpbmcgYHZtX2luc2VydF9wYWdlc2AuIFRoYXQncyBhIHByZXR0eSBsb3ctbGV2ZWwgZnVuY3Rpb24gY2FsbCBzZXF1ZW5jZS4gR2l2ZW4gaG93IGZ1bmRhbWVudGFsIGB2bV9pbnNlcnRfcGFnZXNgIGlzLCBhbmQgY29uc2lkZXJpbmcgaG93IG9mdGVuIEkndmUgc2VlbiBpdCB1c2VkIGluIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHRzLCBpdCdzIHNhZmUgdG8gYXNzdW1lIHRoaXMgYGlvX3VyaW5nX21tYXBgIHBhdGggaXMgKmhpZ2hseSogcmVhY2hhYmxlLiBBIHZlcnkgaW1wb3J0YW50IGNvbXBvbmVudCBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBiZXR0ZXIuXG5cbk5vdywgd2hlcmUgZWxzZSBtaWdodCB0aGlzIHRlY2huaXF1ZSwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGJlIGVtcGxveWVkPyBQZXJoYXBzIHRoZXJlIGFyZSBvdGhlciBpbnRlcmVzdGluZyBwbGFjZXMgdG8gbG9vayBmb3IgYSBzaW1pbGFyIHBhdHRlcm4uIFNwZWNpZmljYWxseSwgSSByZWNhbGwgdGhlIHplcm8tY29weSBvcGVyYXRpb25zIG9uIFRDUCBzb2NrZXRzLiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUgZm9yIGB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoYCBpbiBgbmV0L2lwdjQvdGNwLmNgLiBJdCdzIHBvc3NpYmxlIHRoZXJlIGlzIHNvbWUgY29tbW9uYWxpdHksIG9yIHBlcmhhcHMgSSBjYW4gc2VlIGhvdyB0aGV5IGFyZSBkaWZmZXJlbnQgaW4gdGhlaXIgcmVzcGVjdGl2ZSB1c2UgY2FzZXMuIEknbGwgc2VlIHdoYXQgSSBjYW4gbGVhcm4gYWJvdXQgdGhlaXIgcmVsYXRpb24gdG8gbWVtb3J5IG1hbmFnZW1lbnQgaW4gZ2VuZXJhbCwgYW5kIHBvdGVudGlhbGx5IGxvb2sgZm9yIHdheXMgdG8gb3B0aW1pemUgdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE4MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMxOjIzLjg5MTIxOTI5MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MjMzMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3AuYz0yMDM1PXN0YXRpYyBpbnQgdGNwX3pjX2hhbmRsZV9sZWZ0b3ZlcihzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjA2MS1cXG5uZXQvaXB2NC90Y3AuYzoyMDYyOnN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaF9lcnJvcihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5uZXQvaXB2NC90Y3AuYy0yMDYzLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBwYWdlICoqcGVuZGluZ19wYWdlcyxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTIxMDktXFxubmV0L2lwdjQvdGNwLmM6MjExMDpzdGF0aWMgaW50IHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubmV0L2lwdjQvdGNwLmMtMjExMS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjEzNi1cXHQvKiBFcnJvcjogbWF5YmUgemFwIGFuZCByZXRyeSArIHJvbGxiYWNrIHN0YXRlIGZvciBmYWlsZWQgaW5zZXJ0cy4gKi9cXG5uZXQvaXB2NC90Y3AuYzoyMTM3OlxcdHJldHVybiB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoX2Vycm9yKHZtYSwgcGFnZXMgKyBwYWdlc19tYXBwZWQsXFxubmV0L2lwdjQvdGNwLmMtMjEzOC1cXHRcXHRwYWdlc19yZW1haW5pbmcsIGFkZHJlc3MsIGxlbmd0aCwgc2VxLCB6YywgdG90YWxfYnl0ZXNfdG9fbWFwLFxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjE5NT1zdGF0aWMgaW50IHRjcF96ZXJvY29weV9yZWNlaXZlKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTIzMDEtXFx0XFx0XFx0ICovXFxubmV0L2lwdjQvdGNwLmM6MjMwMjpcXHRcXHRcXHRyZXQgPSB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoKHZtYSwgcGFnZXMsXFxubmV0L2lwdjQvdGNwLmMtMjMwMy1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBwYWdlc190b19tYXAsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yMzEyLVxcdGlmIChwYWdlc190b19tYXApIHtcXG5uZXQvaXB2NC90Y3AuYzoyMzEzOlxcdFxcdHJldCA9IHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2godm1hLCBwYWdlcywgcGFnZXNfdG9fbWFwLFxcbm5ldC9pcHY0L3RjcC5jLTIzMTQtXFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmFkZHJlc3MsIFxcdTAwMjZsZW5ndGgsIFxcdTAwMjZzZXEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMxOjIzLjkzNjA0OTUyNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDEyNTI3NDc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBaZXJvLUNvcHkgVENQIFJlY2VpdmUqKlxuXG5Pa2F5LCBzbyBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIGlzIGV4cG9zZWQgdGhyb3VnaCBgZ2V0c29ja29wdChUQ1BfWkVST0NPUFlfUkVDRUlWRSlgLiBUaGF0J3Mgd2hlcmUgd2Ugc3RhcnQuIFRoaXMgcGF0Y2ggY2hhbmdlcyBob3cgYHZtX2luc2VydF9wYWdlc2AgYmVoYXZlcyBvbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLCByZXR1cm5pbmcgYC1FTk9NRU1gIGluc3RlYWQgb2YgYC1FRkFVTFRgLiBUaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc28gaXQncyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBmdW5jdGlvbnM6IGB2bV9pbnNlcnRfcGFnZXNgLCBgaW9fdXJpbmdfbW1hcGAsIGFuZCBvZiBjb3Vyc2UsIGB0Y3BfemVyb2NvcHlfcmVjZWl2ZWAgaXRzZWxmLiBXYWl0IGEgbWludXRlLi4uIGB2bV9pbnNlcnRfcGFnZXNgIGlzIGV4cG9ydGVkPyBUaGF0IG1ha2VzIGl0IGFuIGV2ZW4gYmV0dGVyIHRhcmdldCEgQW5kIGl0IGxvb2tzIGxpa2UgYGluc2VydF9wYWdlc2AgaXMgdGhlIHN0YXRpYyB2YXJpYW50LCB3aGljaCBpcyB0aGUgb25lIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkLiBQZXJmZWN0LiBMZXQncyBhZGQgYWxsIHRocmVlIHRvIHRoZSBmdXp6aW5nIHRhcmdldCBsaXN0LlxuXG5Ob3csIGxldCBtZSBkb3VibGUtY2hlY2sgZm9yIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYGlvX3VyaW5nYCByZXF1aXJlcyBgQ09ORklHX0lPX1VSSU5HYCwgb2J2aW91c2x5LiBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIG5lZWRzIGBDT05GSUdfSU5FVGAsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCwgc28gd2UncmUgZ29vZCB0aGVyZS4gQW5kIGB2bV9pbnNlcnRfcGFnZXNgIGlzIGluIGBtbS9tZW1vcnkuY2AsIHdoaWNoIGlzIGFsd2F5cyBjb21waWxlZCBpbiwgc28gdGhhdCdzIGVhc3kuIFNvLCBlbmFibGluZyBgSU9fVVJJTkdgIHNlZW1zIGxpa2UgdGhlIHNtYXJ0IG1vdmUgaGVyZS5cblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYGlvX3VyaW5nX21tYXBgIGluIGBpb191cmluZy9tZW1tYXAuY2AgYW5kIGJlZ2luIGNyYWZ0aW5nIHNvbWUgdGVzdCBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNjEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6MzE6MzQuMDYxMzI3MTU3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODEyNjU4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb191cmluZ19tbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pb191cmluZy5jPTI3MDg9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW9fdXJpbmdfZm9wcyA9IHtcXG5pb191cmluZy9pb191cmluZy5jLTI3MDktXFx0LnJlbGVhc2VcXHQ9IGlvX3VyaW5nX3JlbGVhc2UsXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyNzEwOlxcdC5tbWFwXFx0XFx0PSBpb191cmluZ19tbWFwLFxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjcxMS1cXHQuZ2V0X3VubWFwcGVkX2FyZWEgPSBpb191cmluZ19nZXRfdW5tYXBwZWRfYXJlYSxcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jPTI4ND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9tbWFwKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmMtMjk0LVxcbmlvX3VyaW5nL21lbW1hcC5jOjI5NTpfX2NvbGQgaW50IGlvX3VyaW5nX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmlvX3VyaW5nL21lbW1hcC5jLTI5Ni17XFxuLS1cXG5pb191cmluZy9tZW1tYXAuYz0zMjE9dW5zaWduZWQgbG9uZyBpb191cmluZ19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmMtMzcwLSAqIERyb3AgdGhlIHBhZ2VzIHRoYXQgd2VyZSBpbml0aWFsbHkgcmVmZXJlbmNlZCBhbmQgYWRkZWQgaW5cXG5pb191cmluZy9tZW1tYXAuYzozNzE6ICogaW9fdXJpbmdfbW1hcCgpLiBXZSBjYW5ub3QgaGF2ZSBoYWQgYSBtcmVtYXAoKSBhcyB0aGF0IGlzbid0IHN1cHBvcnRlZCxcXG5pb191cmluZy9tZW1tYXAuYy0zNzItICogaGVuY2UgdGhlIHZtYSBzaG91bGQgYmUgaWRlbnRpY2FsIHRvIHRoZSBvbmUgd2UgaW5pdGlhbGx5IHJlZmVyZW5jZWQgYW5kXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYz0zODQ9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpb191cmluZ19ub21tdV92bV9vcHMgPSB7XFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy0zODctXFxuaW9fdXJpbmcvbWVtbWFwLmM6Mzg4OmludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5pb191cmluZy9tZW1tYXAuYy0zODkte1xcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmg9MTU9dW5zaWduZWQgbG9uZyBpb191cmluZ19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmgtMTctXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgZmxhZ3MpO1xcbmlvX3VyaW5nL21lbW1hcC5oOjE4OmludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuaW9fdXJpbmcvbWVtbWFwLmgtMTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMxOjM0LjEwOTQ1ODExMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjU4Mzc5MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJT19VUklORyBhbmQgWmVyby1Db3B5IFJlY2VwdGlvbioqXG5cbkFscmlnaHQsIHllcCwgY29uZmlybWVkOiBgaW9fdXJpbmdfbW1hcGAgaXMgKnRoZSogbW1hcCBoYW5kbGVyIGltcGxlbWVudGF0aW9uIHNwZWNpZmljYWxseSBmb3IgaW9fdXJpbmcuIFRoYXQncyBhIGdpdmVuLiBOb3csIGxldCdzIHBpdm90IGFuZCBkaWcgaW50byBgdGNwX3plcm9jb3B5X3JlY2VpdmVgLiBUaGUgaW1wbGljYXRpb24gaGVyZSBpcyB6ZXJvLWNvcHkgaW4gdGhlIFRDUCByZWNlaXZlIGNvbnRleHQuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBgaW9fdXJpbmdfbW1hcGAgaGFuZGxlciBmaXRzIGludG8gdGhhdCBwaWN0dXJlOyB0aGUgbWVtb3J5LW1hcHBlZCByZWdpb25zIGluIHBsYXkgYW5kIHRoZSBkYXRhIG1vdmVtZW50LCBvciBsYWNrIHRoZXJlb2YsIGFyZSB0aGUga2V5IGFzcGVjdHMgSSdtIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24uIFdlJ2xsIGJlIGxvb2tpbmcgYXQgaG93IHdlJ3JlIG1hcHBpbmcgdGhlIGJ1ZmZlcnMsIHBhc3NpbmcgdGhlbSB0byB0aGUga2VybmVsIGFuZCBob3cgdGhlIGRhdGEgaXMgcmVhZCBpbnRvIG1lbW9yeS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgZG9lc24ndCwgZGVwZW5kaW5nIG9uIGhvdyBpdCBpcyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMTozOC43Njc4Mzk3MTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzI5MjY4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfemVyb2NvcHlfcmVjZWl2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3AuYz0xOTM1PXN0YXRpYyB2b2lkIHRjcF96ZXJvY29weV9zZXRfaGludF9mb3Jfc2tiKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC90Y3AuYzoxOTM2OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YyxcXG5uZXQvaXB2NC90Y3AuYy0xOTM3LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZnNldClcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTE5NzU9c3RhdGljIGludCByZWNlaXZlX2ZhbGxiYWNrX3RvX2NvcHkoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcC5jOjE5NzY6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsIGludCBpbnEsXFxubmV0L2lwdjQvdGNwLmMtMTk3Ny1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgKnRzcylcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTIwMTAtXFxubmV0L2lwdjQvdGNwLmM6MjAxMTpzdGF0aWMgaW50IHRjcF9jb3B5X3N0cmFnZ2xlcl9kYXRhKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsXFxubmV0L2lwdjQvdGNwLmMtMjAxMi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgY29weWxlbixcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTIwMzQtXFxubmV0L2lwdjQvdGNwLmM6MjAzNTpzdGF0aWMgaW50IHRjcF96Y19oYW5kbGVfbGVmdG92ZXIoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YyxcXG5uZXQvaXB2NC90Y3AuYy0yMDM2LVxcdFxcdFxcdFxcdCAgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjA2Mj1zdGF0aWMgaW50IHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2hfZXJyb3Ioc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yMDY3LVxcdFxcdFxcdFxcdFxcdCAgICAgIHUzMiAqc2VxLFxcbm5ldC9pcHY0L3RjcC5jOjIwNjg6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YyxcXG5uZXQvaXB2NC90Y3AuYy0yMDY5LVxcdFxcdFxcdFxcdFxcdCAgICAgIHUzMiB0b3RhbF9ieXRlc190b19tYXAsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0yMTEwPXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTIxMTUtXFx0XFx0XFx0XFx0XFx0dTMyICpzZXEsXFxubmV0L2lwdjQvdGNwLmM6MjExNjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLFxcbm5ldC9pcHY0L3RjcC5jLTIxMTctXFx0XFx0XFx0XFx0XFx0dTMyIHRvdGFsX2J5dGVzX3RvX21hcClcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTIxNDM9c3RhdGljIHZvaWQgdGNwX3pjX2ZpbmFsaXplX3J4X3RzdGFtcChzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjQvdGNwLmM6MjE0NDpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLFxcbm5ldC9pcHY0L3RjcC5jLTIxNDUtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgKnRzcylcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTIxNjk9c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF90Y3Bfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjE5NC0jZGVmaW5lIFRDUF9aRVJPQ09QWV9QQUdFX0JBVENIX1NJWkUgMzJcXG5uZXQvaXB2NC90Y3AuYzoyMTk1OnN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcC5jOjIxOTY6XFx0XFx0XFx0XFx0c3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YyxcXG5uZXQvaXB2NC90Y3AuYy0yMTk3LVxcdFxcdFxcdFxcdHN0cnVjdCBzY21fdGltZXN0YW1waW5nX2ludGVybmFsICp0c3MpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz00NDgxPWludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQ3NDMtXFx0XFx0c3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgdHNzO1xcbm5ldC9pcHY0L3RjcC5jOjQ3NDQ6XFx0XFx0c3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlIHpjID0ge307XFxubmV0L2lwdjQvdGNwLmMtNDc0NS1cXHRcXHRpbnQgZXJyO1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDc0OS1cXHRcXHRpZiAobGVuIFxcdTAwM2MgMCB8fFxcbm5ldC9pcHY0L3RjcC5jOjQ3NTA6XFx0XFx0ICAgIGxlbiBcXHUwMDNjIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgbGVuZ3RoKSlcXG5uZXQvaXB2NC90Y3AuYy00NzUxLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDc2Ny1cXHRcXHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XFxubmV0L2lwdjQvdGNwLmM6NDc2ODpcXHRcXHRlcnIgPSB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzaywgXFx1MDAyNnpjLCBcXHUwMDI2dHNzKTtcXG5uZXQvaXB2NC90Y3AuYy00NzY5LVxcdFxcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVF9LRVJOKHNrLCBsZXZlbCwgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQ3NzEtXFx0XFx0c29ja29wdF9yZWxlYXNlX3NvY2soc2spO1xcbm5ldC9pcHY0L3RjcC5jOjQ3NzI6XFx0XFx0aWYgKGxlbiBcXHUwMDNlPSBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIG1zZ19mbGFncykpXFxubmV0L2lwdjQvdGNwLmMtNDc3My1cXHRcXHRcXHRnb3RvIHplcm9jb3B5X3Jjdl9jbXNnO1xcbm5ldC9pcHY0L3RjcC5jLTQ3NzQtXFx0XFx0c3dpdGNoIChsZW4pIHtcXG5uZXQvaXB2NC90Y3AuYzo0Nzc1OlxcdFxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBtc2dfZmxhZ3MpOlxcbm5ldC9pcHY0L3RjcC5jLTQ3NzYtXFx0XFx0XFx0Z290byB6ZXJvY29weV9yY3ZfY21zZztcXG5uZXQvaXB2NC90Y3AuYzo0Nzc3OlxcdFxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBtc2dfY29udHJvbGxlbik6XFxubmV0L2lwdjQvdGNwLmM6NDc3ODpcXHRcXHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgbXNnX2NvbnRyb2wpOlxcbm5ldC9pcHY0L3RjcC5jOjQ3Nzk6XFx0XFx0Y2FzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIGZsYWdzKTpcXG5uZXQvaXB2NC90Y3AuYzo0NzgwOlxcdFxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBjb3B5YnVmX2xlbik6XFxubmV0L2lwdjQvdGNwLmM6NDc4MTpcXHRcXHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgY29weWJ1Zl9hZGRyZXNzKTpcXG5uZXQvaXB2NC90Y3AuYzo0NzgyOlxcdFxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBlcnIpOlxcbm5ldC9pcHY0L3RjcC5jLTQ3ODMtXFx0XFx0XFx0Z290byB6ZXJvY29weV9yY3Zfc2tfZXJyO1xcbm5ldC9pcHY0L3RjcC5jOjQ3ODQ6XFx0XFx0Y2FzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIGlucSk6XFxubmV0L2lwdjQvdGNwLmMtNDc4NS1cXHRcXHRcXHRnb3RvIHplcm9jb3B5X3Jjdl9pbnE7XFxubmV0L2lwdjQvdGNwLmM6NDc4NjpcXHRcXHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgbGVuZ3RoKTpcXG5uZXQvaXB2NC90Y3AuYy00Nzg3LVxcdFxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMxOjM4LjkyMTEzNzk0NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzcxMjM3MjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqWmVyby1Db3B5IFJlY2VpdmU6IEEgUG90ZW50aWFsIEhvdHNwb3QqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIGZ1bmN0aW9uLiBJbnRlcmVzdGluZy4uLiBsb29rcyBsaWtlIGBkb190Y3BfZ2V0c29ja29wdGAgaXMgdGhlIG9uZSBjYWxsaW5nIGl0IHdoZW4gYFRDUF9aRVJPQ09QWV9SRUNFSVZFYCBpcyByZXF1ZXN0ZWQuIFRoYXQncyBhIHByZXR0eSBzdGFuZGFyZCBwYXRoLCBtZWFuaW5nIHRoaXMgdGhpbmcgY291bGQgZ2V0IGhpdCAqYSBsb3QqLiBJZiBgZG9fdGNwX2dldHNvY2tvcHRgIGlzIGNhbGxlZCBvZnRlbiwgdGhlbiBzbyB3aWxsIHRoaXMgZnVuY3Rpb24uIFNvLCBpZiB0aGlzIGZ1bmN0aW9uIGlzIGluZWZmaWNpZW50LCBpdCBjb3VsZCBpbnRyb2R1Y2UgYSBib3R0bGVuZWNrLlxuXG5HaXZlbiB0aGlzIGNvbnRleHQsIEkgbmVlZCB0byBjaGVjayB0aGUgcG90ZW50aWFsIGZvciBwZXJmb3JtYW5jZSBpc3N1ZXMgYW5kIHRoZSB3YXlzIGl0J3MgdHJhY2VkLlxuXG5JJ20gdGhpbmtpbmcsIEkgc2hvdWxkIGltbWVkaWF0ZWx5IGxvb2sgYXQgYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYC4gSSdtIGdvaW5nIHRvIHNlZSBob3cgdHJhY2luZyBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVpbmcgbG9nZ2VkLCBob3cgdGhlIG92ZXJoZWFkIGlzLCBhbmQgaG93IGl0IGltcGFjdHMgYW55IHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE5NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMxOjQ0LjY5MjM3Nzk2OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwNjM3NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19yYl9tYXBfdm1hXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTc1Njc9c3RhdGljIGludCBfX3JiX2luY19kZWNfbWFwcGVkKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLFxcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzYxMi0jaWZkZWYgQ09ORklHX01NVVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc2MTM6c3RhdGljIGludCBfX3JiX21hcF92bWEoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzYxNC1cXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc3MDYtI2Vsc2VcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo3NzA3OnN0YXRpYyBpbnQgX19yYl9tYXBfdm1hKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLFxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc3MDgtXFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYz03NzE0PWludCByaW5nX2J1ZmZlcl9tYXAoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1LFxcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzcyOS1cXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNldXNlcl9tYXBwZWQpIHtcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo3NzMwOlxcdFxcdGVyciA9IF9fcmJfbWFwX3ZtYShjcHVfYnVmZmVyLCB2bWEpO1xcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc3MzEtXFx0XFx0aWYgKCFlcnIpXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03NzYwLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc3NjE6XFx0ZXJyID0gX19yYl9tYXBfdm1hKGNwdV9idWZmZXIsIHZtYSk7XFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzc2Mi1cXHRpZiAoIWVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMTo0NC43Mzg0NTAxNjRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5NDkwMTcyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlJlYWNoaW5nIGZvciB0aGUgUmluZyBCdWZmZXIqKlxuXG5BbHJpZ2h0LCBzbyBgcmluZ19idWZmZXJfbWFwYCBpcyBhY2Nlc3NpYmxlIHNvbWVob3csIGxpa2VseSB0aHJvdWdoIGBtbWFwYCBhbmQgdGhlIHRyYWNlZnMgcmluZyBidWZmZXIg4oCTIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCdzIGJlaW5nIHVzZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki4gTXkgaW5pdGlhbCBpbnN0aW5jdCBwb2ludHMgbWUgdG93YXJkcyB0aGUgQU1EIERuYSBhY2NlbGVyYXRvciBkcml2ZXIsIHNwZWNpZmljYWxseSBgZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmNgLiBUaGlzIGlzIHVzdWFsbHkgd2hlcmUgeW91J2QgZmluZCB0aGUgY3J1Y2lhbCBpbnRlcmFjdGlvbiB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCBsaWtlbHkgaW5jbHVkaW5nIGJ1ZmZlciBjcmVhdGlvbiwgbWFwcGluZywgYW5kIHBvdGVudGlhbGx5IGludGVyYWN0aW9ucyB3aXRoIHRoZSByaW5nIGJ1ZmZlciBpZiBETUEgb3IgY29udGV4dCBzd2l0Y2hpbmcgaXMgaW52b2x2ZWQuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGF0IGZpbGUuIEknbSBsb29raW5nIGZvciB0aGUgY2FsbHMgdGhhdCB0b3VjaCBvbiB0aGUgcmluZyBidWZmZXIsIGBtbWFwYCB1c2FnZSwgb3IgaW50ZXJhY3Rpb25zIHdpdGggdGhlIERNQSBlbmdpbmUuIEkgc3VzcGVjdCB0aGlzIHdpbGwgaWxsdW1pbmF0ZSB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmluZyBidWZmZXIuIEZyb20gdGhlcmUsIEknbGwgYXNzZXNzIHRoZSBwb3RlbnRpYWwgc2VjdXJpdHkgYW5kIHBlcmZvcm1hbmNlIHJhbWlmaWNhdGlvbnMgb2YgdGhhdCBwYXJ0aWN1bGFyIGludGVyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5MjMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMTo0OS4wMzMzNTQxMzlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjY0MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFtZHhkbmFfaW5zZXJ0X3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jPTQyND1zdGF0aWMgdm9pZCBhbWR4ZG5hX2dlbV9kZXZfb2JqX2ZyZWUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnb2JqKVxcbi0tXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmMtNDM4LVxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jOjQzOTpzdGF0aWMgaW50IGFtZHhkbmFfaW5zZXJ0X3BhZ2VzKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibyxcXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy00NDAtXFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYz00OTU9c3RhdGljIGludCBhbWR4ZG5hX2dlbV9vYmpfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdvYmosXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy01MDUtXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmM6NTA2OlxcdHJldCA9IGFtZHhkbmFfaW5zZXJ0X3BhZ2VzKGFibywgdm1hKTtcXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy01MDctXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMTo0OS4wODAwMjQ4MjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI0NjU4NTk5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2VybmVsIFN5bWJvbCBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGZvciBzaWduaWZpY2FudCBlbnRyeSBwb2ludHMsIGFuZCBiYXNlZCBvbiB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50LCB0aGUgXCJkcml2ZXJcIiBhc3BlY3QgaXMgYSBiaXQgb2YgYSBkaXN0cmFjdGlvbiDigJMgd2UncmUgZGVhbGluZyB3aXRoIGNvcmUga2VybmVsIHVzZXJzIGhlcmUuIExldCdzIGZvY3VzIG9uIHRoZSBrZXkgc3ltYm9scyBpZGVudGlmaWVkOiBgdm1faW5zZXJ0X3BhZ2VzYCwgYGlvX3VyaW5nX21tYXBgLCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgLCBhbmQgYHJpbmdfYnVmZmVyX21hcGAuIFRoZXNlIHNob3VsZCBwcm92aWRlIGdvb2QgaG9va3MuXG5cblRoZSBgSU9fVVJJTkdgIGNvbmZpZyBpcyBzb21ldGhpbmcgd2Ugc2hvdWxkIG5vdGUuIEl0J3MgYSBrZXkgaW5kaWNhdG9yIGZvciBob3cgdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIGluIHRoaXMgcGFydGljdWxhciBpbnN0YW5jZS5cblxuV2FpdCwgbG9va2luZyBhdCBgdm1faW5zZXJ0X3BhZ2VzYCwgdGhhdCBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIHRhcmdldCBiZWNhdXNlIGl0J3MgZXhwb3J0ZWQuIEl0IGhhcyB0byBiZSBhbiBlbnRyeSBwb2ludC4gUXVpY2sgY2hlY2s6IElzIGBpbnNlcnRfcGFnZXNgIHN0YXRpYyB3aXRoaW4gYG1tL21lbW9yeS5jYD8gR29vZCwgdGhhdCBtYWtlcyBgdm1faW5zZXJ0X3BhZ2VzYCB0aGUgZXh0ZXJuYWxseSB2aXNpYmxlIGVudHJ5LiBFeGNlbGxlbnQuXG5cbk5vdywgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNjYW4gZm9yIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19UUkFDSU5HYCBhcmUgc3RhbmRhcmQsIGJ1dCB0aGUgYENPTkZJR19JT19VUklOR2AgaXMgZGVmaW5pdGVseSB3b3J0aCBpbmNsdWRpbmcgZXhwbGljaXRseS5cblxuRmluYWxseSwgd2hpbGUgd2UncmUgaW4gdGhlIG5laWdoYm9yaG9vZCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGVgIGluIGBtbS9tZW1vcnkuY2AuIEFsd2F5cyBnb29kIHRvIGhhdmUgYSBjb21wcmVoZW5zaXZlIHZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTIxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMxOjU0LjMyNjYxMzg3MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyMDAxNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFwX2tlcm5lbF9wYWdlc19jb21wbGV0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnkuYz0yNTM3PUVYUE9SVF9TWU1CT0wobWFwX2tlcm5lbF9wYWdlc19wcmVwYXJlKTtcXG5tbS9tZW1vcnkuYy0yNTM4LVxcbm1tL21lbW9yeS5jOjI1Mzk6aW50IG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vbWVtb3J5LmMtMjU0MC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbW1hcF9hY3Rpb24gKmFjdGlvbilcXG4tLVxcbm1tL21lbW9yeS5jLTI1NDgtfVxcbm1tL21lbW9yeS5jOjI1NDk6RVhQT1JUX1NZTUJPTChtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlKTtcXG5tbS9tZW1vcnkuYy0yNTUwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMTo1NC4zNzE4MTk0NjZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3MDg3MzIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgYG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGVgIFVzYWdlKipcblxuT2theSwgc28gdGhlIHF1ZXN0aW9uIG9uIG15IG1pbmQgcmlnaHQgbm93IGlzOiBXaGVyZSBleGFjdGx5IGRvZXMgYG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGVgIGNvbWUgaW50byBwbGF5IGluIHRoaXMgc3lzdGVtPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGhvdyBpdCdzIGludGVncmF0ZWQuIElzIGl0IGEgY29yZSBmdW5jdGlvbiwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IElzIGl0IHdpZGVseSB1c2VkLCBvciBsaW1pdGVkIHRvIHNwZWNpZmljIGNvbnRleHRzPyBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIGZpbmQgdGhlIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBsb29rIHRocm91Z2ggdGhlIHNvdXJjZSBjb2RlIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzOyBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCdzIGJlaW5nICpjYWxsZWQqIHRvIGdyYXNwIGl0cyBwdXJwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE5MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMxOjU3LjY0MjY5NTg5NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyOTM0OTMzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW0uaD00NTM4PWludCBtYXBfa2VybmVsX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYyk7XFxuaW5jbHVkZS9saW51eC9tbS5oOjQ1Mzk6aW50IG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9tbS5oLTQ1NDAtXFx0XFx0XFx0ICAgICAgc3RydWN0IG1tYXBfYWN0aW9uICphY3Rpb24pO1xcbi0tXFxubW0vbWVtb3J5LmM9MjUzNz1FWFBPUlRfU1lNQk9MKG1hcF9rZXJuZWxfcGFnZXNfcHJlcGFyZSk7XFxubW0vbWVtb3J5LmMtMjUzOC1cXG5tbS9tZW1vcnkuYzoyNTM5OmludCBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL21lbW9yeS5jLTI1NDAtXFx0XFx0XFx0ICAgICAgc3RydWN0IG1tYXBfYWN0aW9uICphY3Rpb24pXFxuLS1cXG5tbS9tZW1vcnkuYy0yNTQ4LX1cXG5tbS9tZW1vcnkuYzoyNTQ5OkVYUE9SVF9TWU1CT0wobWFwX2tlcm5lbF9wYWdlc19jb21wbGV0ZSk7XFxubW0vbWVtb3J5LmMtMjU1MC1cXG4tLVxcbm1tL3V0aWwuYz0xNDc4PWludCBtbWFwX2FjdGlvbl9jb21wbGV0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3V0aWwuYy0xNDg5LVxcdGNhc2UgTU1BUF9NQVBfS0VSTkVMX1BBR0VTOlxcbm1tL3V0aWwuYzoxNDkwOlxcdFxcdGVyciA9IG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGUodm1hLCBhY3Rpb24pO1xcbm1tL3V0aWwuYy0xNDkxLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMTo1OS40NzIwNTE0NjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyNjc4ODcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipXaGVyZSBEb2VzIGBtbWFwX2FjdGlvbl9jb21wbGV0ZWAgRml0PyoqXG5cbk9rYXksIHNvIGBtbWFwX2FjdGlvbl9jb21wbGV0ZWAuLi4gd2hlcmUgKmlzKiB0aGF0IHVzZWQ/IEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBtbWFwLXJlbGF0ZWQga2VybmVsIHN1YnN5c3RlbXMuIE15IGluaXRpYWwgZ3Vlc3MgaXMgdGhhdCBpdCdzIGxpa2VseSBwYXJ0IG9mIHRoZSBjb21wbGV0aW9uIHBhdGggZm9yIGFuIGFzeW5jaHJvbm91cyBtZW1vcnkgbWFwcGluZyBvcGVyYXRpb24uIEl0IHdvdWxkIGJlIGludm9sdmVkIGluIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbiBvZiBhIHNwZWNpZmljIGFjdGlvbiByZWxhdGVkIHRvIG1hcHBlZCBtZW1vcnksIHBvc3NpYmx5IHRvIHVzZXIgc3BhY2UsIG9yIGFub3RoZXIga2VybmVsIHByb2Nlc3MuIElzIGl0IHRpZWQgdG8gYSBzcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGxpa2UgdGhlIHBhZ2UgY2FjaGUsIG9yIHNvbWV0aGluZyBtb3JlIGdlbmVyYWxpemVkIHdpdGhpbiB0aGUgVk0/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UgdG8gZGV0ZXJtaW5lIHRoZSBleGFjdCBjYWxsIHNpdGVzIGFuZCBjb250ZXh0cywgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24uXG5cbklzIGl0IHJlbGF0ZWQgdG8gZmlsZS1iYWNrZWQgbWFwcGluZ3MsIG9yIGFub255bW91cyBtYXBwaW5ncz8gRG9lcyBpdCBoYW5kbGUgdGhlIGRpcnR5aW5nLCBmbHVzaGluZywgb3IgaW52YWxpZGF0aW5nIG9mIHBhZ2VzPyBJcyB0aGlzIGFib3V0IHRoZSBzaWduYWxzIGdlbmVyYXRlZCBieSB0aGUga2VybmVsLCBvciBzb21ldGhpbmcgSSdtIG1pc3Npbmc/IEFuZCBkb2VzIGl0IGhhdmUgYW55IGFzc29jaWF0ZWQgbG9ja2luZz9cblxuSSdtIHRoaW5raW5nIEkgcHJvYmFibHkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGNhbGxzIHJlbGF0ZWQgdG8gYG1tYXBgIHN5c2NhbGwgaW1wbGVtZW50YXRpb25zLCBsaWtlIGBkb19tbWFwYCBvciBzaW1pbGFyLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biB0byBmaW5kIHdoZXJlIHRoaXMgc2lnbmFsIGlzIGJlaW5nIHNlbnQuIFBlcmhhcHMgSSdsbCB1c2UgYGdyZXBgIG9yIGEgc2ltaWxhciB0b29sIHRvIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBzb3VyY2UgZmlsZXMgYW5kIGZ1bmN0aW9ucyB0aGF0IHVzZSB0aGF0IHN5bWJvbC4gVW5kZXJzdGFuZGluZyBpdHMgdXNhZ2Ugd2l0aGluIHRob3NlIGZ1bmN0aW9ucyB3aWxsIHByb3ZpZGUgdGhlIGNsZWFyZXN0IHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzExLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6MzI6MDQuMTk4ODQzMDE2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjczODYzNDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tYXBfYWN0aW9uX2NvbXBsZXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW0uaD00NDI2PWludCBtbWFwX2FjdGlvbl9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpO1xcbmluY2x1ZGUvbGludXgvbW0uaDo0NDI3OmludCBtbWFwX2FjdGlvbl9jb21wbGV0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L21tLmgtNDQyOC1cXHRcXHRcXHQgc3RydWN0IG1tYXBfYWN0aW9uICphY3Rpb24sIGJvb2wgaXNfY29tcGF0KTtcXG4tLVxcbm1tL3V0aWwuYz0xMjI0PWludCBfX2NvbXBhdF92bWFfbW1hcChzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjLFxcbi0tXFxubW0vdXRpbC5jLTEyMzUtXFx0LyogQ29tcGxldGUgYW55IHNwZWNpZmllZCBtbWFwIGFjdGlvbnMuICovXFxubW0vdXRpbC5jOjEyMzY6XFx0cmV0dXJuIG1tYXBfYWN0aW9uX2NvbXBsZXRlKHZtYSwgXFx1MDAyNmRlc2MtXFx1MDAzZWFjdGlvbiwgLyppc19jb21wYXQ9Ki90cnVlKTtcXG5tbS91dGlsLmMtMTIzNy19XFxuLS1cXG5tbS91dGlsLmM9MTQ2NT1FWFBPUlRfU1lNQk9MKG1tYXBfYWN0aW9uX3ByZXBhcmUpO1xcbi0tXFxubW0vdXRpbC5jLTE0NjctLyoqXFxubW0vdXRpbC5jOjE0Njg6ICogbW1hcF9hY3Rpb25fY29tcGxldGUgLSBFeGVjdXRlIFZNQSBkZXNjcmlwdG9yIGFjdGlvbi5cXG5tbS91dGlsLmMtMTQ2OS0gKiBAdm1hOiBUaGUgVk1BIHRvIHBlcmZvcm0gdGhlIGFjdGlvbiB1cG9uLlxcbi0tXFxubW0vdXRpbC5jLTE0NzctICovXFxubW0vdXRpbC5jOjE0Nzg6aW50IG1tYXBfYWN0aW9uX2NvbXBsZXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL3V0aWwuYy0xNDc5LVxcdFxcdFxcdCBzdHJ1Y3QgbW1hcF9hY3Rpb24gKmFjdGlvbiwgYm9vbCBpc19jb21wYXQpXFxuLS1cXG5tbS91dGlsLmMtMTUwMS19XFxubW0vdXRpbC5jOjE1MDI6RVhQT1JUX1NZTUJPTChtbWFwX2FjdGlvbl9jb21wbGV0ZSk7XFxubW0vdXRpbC5jLTE1MDMtI2Vsc2VcXG4tLVxcbm1tL3V0aWwuYz0xNTE5PUVYUE9SVF9TWU1CT0wobW1hcF9hY3Rpb25fcHJlcGFyZSk7XFxubW0vdXRpbC5jLTE1MjAtXFxubW0vdXRpbC5jOjE1MjE6aW50IG1tYXBfYWN0aW9uX2NvbXBsZXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL3V0aWwuYy0xNTIyLVxcdFxcdFxcdCBzdHJ1Y3QgbW1hcF9hY3Rpb24gKmFjdGlvbixcXG4tLVxcbm1tL3V0aWwuYy0xNTQxLX1cXG5tbS91dGlsLmM6MTU0MjpFWFBPUlRfU1lNQk9MKG1tYXBfYWN0aW9uX2NvbXBsZXRlKTtcXG5tbS91dGlsLmMtMTU0My0jZW5kaWZcXG4tLVxcbm1tL3ZtYS5jPTI3MzQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19tbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vdm1hLmMtMjc4NS1cXHRpZiAoaGF2ZV9tbWFwX3ByZXBhcmUgXFx1MDAyNlxcdTAwMjYgYWxsb2NhdGVkX25ldykge1xcbm1tL3ZtYS5jOjI3ODY6XFx0XFx0ZXJyb3IgPSBtbWFwX2FjdGlvbl9jb21wbGV0ZSh2bWEsIFxcdTAwMjZkZXNjLmFjdGlvbixcXG5tbS92bWEuYy0yNzg3LVxcdFxcdFxcdFxcdFxcdCAgICAgLyppc19jb21wYXQ9Ki9mYWxzZSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oPTEzMDk9c3RhdGljIGlubGluZSBpbnQgX19jb21wYXRfdm1hX21tYXAoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgtMTMyMC1cXHQvKiBDb21wbGV0ZSBhbnkgc3BlY2lmaWVkIG1tYXAgYWN0aW9ucy4gKi9cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oOjEzMjE6XFx0cmV0dXJuIG1tYXBfYWN0aW9uX2NvbXBsZXRlKHZtYSwgXFx1MDAyNmRlc2MtXFx1MDAzZWFjdGlvbiwgLyppc19jb21wYXQ9Ki90cnVlKTtcXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTEzMjItfVxcbi0tXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oPTg0PXN0YXRpYyBpbmxpbmUgaW50IG1tYXBfYWN0aW9uX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaC04OC1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmg6ODk6c3RhdGljIGlubGluZSBpbnQgbW1hcF9hY3Rpb25fY29tcGxldGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oLTkwLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbW1hcF9hY3Rpb24gKmFjdGlvbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6MzI6MDUuODcyNzQzODIxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMTI4MTUyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipEaXZpbmcgRGVlcCBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IG1lbW9yeSBpcyBtYXBwZWQuIEkgc2VlIGBfX21tYXBfcmVnaW9uYCBjYWxscyBgbW1hcF9hY3Rpb25fY29tcGxldGVgLiBUaGF0J3MgYSBwcmV0dHkgY2VudHJhbCBwb2ludCwgcmlnaHQ/IFRoaXMgaXMgY29yZSBzdHVmZi4gSW1tZWRpYXRlbHksIGB2bV9pbnNlcnRfcGFnZXNgIGFuZCBgbWFwX2tlcm5lbF9wYWdlc19jb21wbGV0ZWAgY29tZSB0byBtaW5kIGFzIHBvdGVudGlhbGx5IHJlbGV2YW50IGZ1bmN0aW9ucyB0byBzY3J1dGluaXplIGZ1cnRoZXIuIFRoZXkncmUgbGlrZWx5IGludm9sdmVkIGluIGNvbXBsZXRpbmcgdGhlIG1lbW9yeSBtYXBwaW5nIHByb2Nlc3MsIHNvIHRoZXkncmUgb24gbXkgcmFkYXIuXG5cbkhvbGQgb24uLi4gSSBuZWVkIHRvIGJlIG1vcmUgY2FyZWZ1bCwgSSBtaXNzZWQgc29tZXRoaW5nLCB0aGUgcGF0Y2ggdG91Y2hlcyBgcG9wdWxhdGVfdG9fcG1kYCwgd2hpY2gsIEkgbm93IHJlbWVtYmVyLCBpcyBhbHNvIHVzZWQgaW4gYGdldF9sb2NrZWRfcHRlYC4gUmlnaHQsIHRoaXMgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgYmV5b25kIHRoZSBpbW1lZGlhdGUgbW1hcCBjb250ZXh0LiBJIHNob3VsZCBzd2l0Y2ggZ2VhcnMgZm9yIGEgbW9tZW50IGFuZCBnbyBjaGVjayBvdXQgd2hhdCdzIGdvaW5nIG9uIGluIGBnZXRfbG9ja2VkX3B0ZWAuIEdvdHRhIGVuc3VyZSB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBpc3N1ZXMgaW4gb3RoZXIgcGFydHMgb2YgdGhlIG1lbW9yeSBzdWJzeXN0ZW0sIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIHBhZ2UgdGFibGUgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5ODMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMjoxMS4wODU1NjE5NDFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NTUzMDA5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfbG9ja2VkX3B0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnkuYz0yMjcxPXN0YXRpYyBwbWRfdCAqcG9wdWxhdGVfdG9fcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS9tZW1vcnkuYy0yMjkyLVxcbm1tL21lbW9yeS5jOjIyOTM6cHRlX3QgKmdldF9sb2NrZWRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vbWVtb3J5LmMtMjI5NC1cXHRcXHQgICAgICBzcGlubG9ja190ICoqcHRsKVxcbi0tXFxubW0vbWVtb3J5LmM9MjM5Mj1zdGF0aWMgaW50IGluc2VydF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tZW1vcnkuYy0yNDAyLVxcdHJldHZhbCA9IC1FTk9NRU07XFxubW0vbWVtb3J5LmM6MjQwMzpcXHRwdGUgPSBnZXRfbG9ja2VkX3B0ZSh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBcXHUwMDI2cHRsKTtcXG5tbS9tZW1vcnkuYy0yNDA0LVxcdGlmICghcHRlKVxcbi0tXFxubW0vbWVtb3J5LmM9MjY3MD1zdGF0aWMgdm1fZmF1bHRfdCBpbnNlcnRfcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tZW1vcnkuYy0yNjc2LVxcbm1tL21lbW9yeS5jOjI2Nzc6XFx0cHRlID0gZ2V0X2xvY2tlZF9wdGUobW0sIGFkZHIsIFxcdTAwMjZwdGwpO1xcbm1tL21lbW9yeS5jLTI2NzgtXFx0aWYgKCFwdGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMyOjExLjM3MTA5NzMzMloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTQzMzE5MTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgYHBvcHVsYXRlX3RvX3BtZGAgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBob3cgaXQncyBjaGFuZ2VkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGNoYW5nZXMuIGBnZXRfbG9ja2VkX3B0ZWAgaXMgdXNlZCBpbiBgaW5zZXJ0X3BhZ2VgIGFuZCBgaW5zZXJ0X3BmbmAuIGBpbnNlcnRfcGFnZWAgaXMgY2FsbGVkIGJ5IGB2bV9pbnNlcnRfcGFnZWAuIGBpbnNlcnRfcGZuYCBpcyBjYWxsZWQgYnkgYHZtZl9pbnNlcnRfcGZuYC4gVGhhdCBtZWFucyBgdm1faW5zZXJ0X3BhZ2VgLCBgdm1faW5zZXJ0X3BhZ2VzYCwgYW5kIGB2bWZfaW5zZXJ0X3BmbmAgYXJlIGFsbCBwb3RlbnRpYWxseSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS5cblxuSSBzZWUgdGhhdCBgcG9wdWxhdGVfdG9fcG1kYCBpcyB0aGUgbmV3IG5hbWUgZm9yIGB3YWxrX3RvX3BtZGAuIFRoZSBvbGQgaW1wbGVtZW50YXRpb24gb2YgYHdhbGtfdG9fcG1kYCB3YXMgaWRlbnRpY2FsIHRvIHRoZSBuZXcgYHBvcHVsYXRlX3RvX3BtZGAuIFRoZSBhY3R1YWwgY29kZSBoYXNuJ3QgY2hhbmdlZCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIFRoZSBvbmx5IGNoYW5nZSBpcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBpbnNlcnRfcGFnZXNgIHdoZW4gYHBvcHVsYXRlX3RvX3BtZGAgZmFpbHMuIEl0IHVzZWQgdG8gcmV0dXJuIGAtRUZBVUxUYCwgbm93IGl0IHJldHVybnMgYC1FTk9NRU1gLiBJdCBhbHNvIGxvb2tzIGxpa2UgdGhlcmUgd2FzIGEgYnVnIGluIHRoZSBvbGQgYGluc2VydF9wYWdlc2AgY29kZSwgd2hlcmUgYW4gYC1FRkFVTFRgIHdhcyBzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcCwgYnV0IG5vdyBoYXMgYmVlbiBjb3JyZWN0ZWQuIFRoaXMgY2hhbmdlIHdpbGwgYWZmZWN0IGVycm9yIGhhbmRsaW5nIGluIHRoZSBjYWxsZXJzIG9mIGB2bV9pbnNlcnRfcGFnZXNgLCBhbmQgYW55IHBvdGVudGlhbCBjYWxsZXJzIG9mIGBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlYC5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUgb2xkIGFuZCBuZXcgY29kZSwgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGVycm9yIHBhdGhzOlxuXG5JbiB0aGUgb3JpZ2luYWwgYGluc2VydF9wYWdlc2A6XG4qICAgYHB0ZV9hbGxvY2AgZmFpbHVyZTogUmV0dXJucyBgLUVOT01FTWBcbiogICBgd2Fsa190b19wbWRgIGZhaWx1cmU6IFJldHVybnMgYC1FRkFVTFRgXG4qICAgYHB0ZV9vZmZzZXRfbWFwX2xvY2tgIGZhaWx1cmU6IFJldHVybnMgYC1FRkFVTFRgXG4qICAgYGluc2VydF9wYWdlX2luX2JhdGNoX2xvY2tlZGAgZmFpbHVyZTogUmV0dXJucyB0aGUgZXJyb3IgY29kZSBmcm9tIHRoYXQgZnVuY3Rpb24gKGBlcnJgKVxuXG5JbiB0aGUgbmV3IGNvZGUsIHRoZSBvbmx5ICpmdW5jdGlvbmFsKiBjaGFuZ2UgaXMgdGhhdCBgcG9wdWxhdGVfdG9fcG1kYCByZXR1cm5pbmcgYE5VTExgIHJlc3VsdHMgaW4gYC1FTk9NRU1gLCBpbnN0ZWFkIG9mIGAtRUZBVUxUYCBmcm9tIHRoZSBgd2Fsa190b19wbWRgIGZhaWx1cmUuIEl0IHJldHVybnMgdGhlIGVycm9yIGNvZGUgZnJvbSBgaW5zZXJ0X3BhZ2VfaW5fYmF0Y2hfbG9ja2VkYCBjb3JyZWN0bHkuXG5cblNvLCB0aGUgY3JpdGljYWwgZGlmZmVyZW5jZSBpcyBgdm1faW5zZXJ0X3BhZ2VzYCBhbmQgYG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGVgIG5vdyByZXR1cm5pbmcgYC1FTk9NRU1gIHdoZW4gYHBvcHVsYXRlX3RvX3BtZGAgZmFpbHMgaW5zdGVhZCBvZiBgLUVGQVVMVGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNhbGxlcnMgYXJlIGdvaW5nIHRvIGJlIGFmZmVjdGVkIGJ5IHRoaXMgY2hhbmdlLiBJdCdzIGEgc2VtYW50aWMgY2hhbmdlIGluIHRoZSBlcnJvciBjb2RlLCBhbmQgdGhleSBtaWdodCBoYXZlIGRpZmZlcmVudCBoYW5kbGluZyBmb3IgYC1FTk9NRU1gIHZlcnN1cyBgLUVGQVVMVGAuIEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBmb3IgcG90ZW50aWFsIGlzc3Vlcy4gU29tZXRoaW5nIGxpa2UgYHRjcF96ZXJvY29weV9yZWNlaXZlYCBjb3VsZCBiZSBhZmZlY3RlZC5cblxuT2theSwgbGV0J3MgbG9vayBhdCBgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaF9lcnJvcmAgaW4gYG5ldC9pcHY0L3RjcC5jYCwgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIGFuIGVycm9yIGZyb20gdGhlIGB2bV9pbnNlcnRfcGFnZXNgIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY1MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6MzI6MjYuODA0MjkwMjYyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDk2MjU5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoX2Vycm9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcC5jPTIwMzU9c3RhdGljIGludCB0Y3BfemNfaGFuZGxlX2xlZnRvdmVyKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yMDYxLVxcbm5ldC9pcHY0L3RjcC5jOjIwNjI6c3RhdGljIGludCB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoX2Vycm9yKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm5ldC9pcHY0L3RjcC5jLTIwNjMtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBhZ2UgKipwZW5kaW5nX3BhZ2VzLFxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjExMD1zdGF0aWMgaW50IHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yMTM2LVxcdC8qIEVycm9yOiBtYXliZSB6YXAgYW5kIHJldHJ5ICsgcm9sbGJhY2sgc3RhdGUgZm9yIGZhaWxlZCBpbnNlcnRzLiAqL1xcbm5ldC9pcHY0L3RjcC5jOjIxMzc6XFx0cmV0dXJuIHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2hfZXJyb3Iodm1hLCBwYWdlcyArIHBhZ2VzX21hcHBlZCxcXG5uZXQvaXB2NC90Y3AuYy0yMTM4LVxcdFxcdHBhZ2VzX3JlbWFpbmluZywgYWRkcmVzcywgbGVuZ3RoLCBzZXEsIHpjLCB0b3RhbF9ieXRlc190b19tYXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMyOjI2Ljg1NTI2MTkwN1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ0ODEwOTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBOYW1lOiBgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaF9lcnJvcmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBUaGUgZnVuY3Rpb24gbmFtZSBpbW1lZGlhdGVseSB0ZWxscyBtZSBhIGxvdC4gYHRjcF96ZXJvY29weWAgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIFRDUCBuZXR3b3JraW5nIGFuZCwgbW9yZSBzcGVjaWZpY2FsbHksIGEgbWVjaGFuaXNtIHRvIGF2b2lkIHRoZSB0cmFkaXRpb25hbCBrZXJuZWwtdG8tdXNlci1zcGFjZSBjb3B5LiBFeGNlbGxlbnQsIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBnYWlucyBhcmUgYWxyZWFkeSBmbGFnZ2VkIGluIG15IG1pbmQuIFRoZSBtZW50aW9uIG9mIGB2bWAgKFZpcnR1YWwgTWFjaGluZSkgaW5kaWNhdGVzIHRoaXMgaXMgcHJvYmFibHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHdoaWNoIGFkZHMgYW5vdGhlciBsYXllciBvZiBjb21wbGV4aXR5IHRvIGNvbnNpZGVyIOKAkyBtZW1vcnkgbWFuYWdlbWVudCwgcG90ZW50aWFsIHZOSUMgaW50ZXJhY3Rpb25zLCBhbmQgaHlwZXJ2aXNvciBvdmVyaGVhZC4gVGhlbiwgYGluc2VydF9iYXRjaGAgcG9pbnRzIHRvIHNvbWUgZm9ybSBvZiBidWxrIG9wZXJhdGlvbiwgZGVhbGluZyB3aXRoIGEgZ3JvdXAgb2YgZGF0YSBvciBzdHJ1Y3R1cmVzLCBwZXJoYXBzIHBhY2tldHMgb3IgYnVmZmVycywgYW5kIHRoZSBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBwdXQgZGF0YSBpbnRvIHRoZSBWTS4gRmluYWxseSwgYGVycm9yYC4uLnRoYXQncyB0aGUga2V5LiBUaGlzIGlzbid0IGEgc3VjY2VzcyBwYXRoOyB0aGlzIGlzIHdoZXJlIHRoaW5ncyAqZ28gd3JvbmcqLiBXZSdyZSBsb29raW5nIGF0IHRoZSBlcnJvciBoYW5kbGluZyBmb3IgYSB6ZXJvLWNvcHksIGJhdGNoIGluc2VydGlvbiBwcm9jZXNzIHdpdGhpbiBhIHZpcnR1YWwgbWFjaGluZSBjb250ZXh0LiBUaGF0J3MgYSBwcmV0dHkgc3BlY2lmaWMgYW5kIGxpa2VseSBwZXJmb3JtYW5jZS1jcml0aWNhbCBwaWVjZSBvZiBjb2RlLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBpcyBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwOTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMjozMS40MDAwNzU0ODdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNjIsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwNjI6XFx0c3RhdGljIGludCB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoX2Vycm9yKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjIwNjM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBhZ2UgKipwZW5kaW5nX3BhZ2VzLFxcbjIwNjQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBwYWdlc19yZW1haW5pbmcsXFxuMjA2NTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nICphZGRyZXNzLFxcbjIwNjY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdTMyICpsZW5ndGgsXFxuMjA2NzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICB1MzIgKnNlcSxcXG4yMDY4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsXFxuMjA2OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICB1MzIgdG90YWxfYnl0ZXNfdG9fbWFwLFxcbjIwNzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaW50IGVycilcXG4yMDcxOlxcdHtcXG4yMDcyOlxcdFxcdC8qIEF0IGxlYXN0IG9uZSBwYWdlIGRpZCBub3QgbWFwLiBUcnkgemFwcGluZyBpZiB3ZSBza2lwcGVkIGVhcmxpZXIuICovXFxuMjA3MzpcXHRcXHRpZiAoZXJyID09IC1FQlVTWSBcXHUwMDI2XFx1MDAyNlxcbjIwNzQ6XFx0XFx0ICAgIHpjLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDUF9SRUNFSVZFX1pFUk9DT1BZX0ZMQUdfVExCX0NMRUFOX0hJTlQpIHtcXG4yMDc1OlxcdFxcdFxcdHUzMiBtYXliZV96YXBfbGVuO1xcbjIwNzY6XFx0XFxuMjA3NzpcXHRcXHRcXHRtYXliZV96YXBfbGVuID0gdG90YWxfYnl0ZXNfdG9fbWFwIC0gIC8qIEFsbCBieXRlcyB0byBtYXAgKi9cXG4yMDc4OlxcdFxcdFxcdFxcdFxcdCpsZW5ndGggKyAvKiBNYXBwZWQgb3IgcGVuZGluZyAqL1xcbjIwNzk6XFx0XFx0XFx0XFx0XFx0KHBhZ2VzX3JlbWFpbmluZyAqIFBBR0VfU0laRSk7IC8qIEZhaWxlZCBtYXAuICovXFxuMjA4MDpcXHRcXHRcXHR6YXBfdm1hX3JhbmdlKHZtYSwgKmFkZHJlc3MsIG1heWJlX3phcF9sZW4pO1xcbjIwODE6XFx0XFx0XFx0ZXJyID0gMDtcXG4yMDgyOlxcdFxcdH1cXG4yMDgzOlxcdFxcbjIwODQ6XFx0XFx0aWYgKCFlcnIpIHtcXG4yMDg1OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbGVmdG92ZXJfcGFnZXMgPSBwYWdlc19yZW1haW5pbmc7XFxuMjA4NjpcXHRcXHRcXHRpbnQgYnl0ZXNfbWFwcGVkO1xcbjIwODc6XFx0XFxuMjA4ODpcXHRcXHRcXHQvKiBXZSBjYWxsZWQgemFwX3ZtYV9yYW5nZSwgdHJ5IHRvIHJlaW5zZXJ0LiAqL1xcbjIwODk6XFx0XFx0XFx0ZXJyID0gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgKmFkZHJlc3MsXFxuMjA5MDpcXHRcXHRcXHRcXHRcXHQgICAgICBwZW5kaW5nX3BhZ2VzLFxcbjIwOTE6XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnBhZ2VzX3JlbWFpbmluZyk7XFxuMjA5MjpcXHRcXHRcXHRieXRlc19tYXBwZWQgPSBQQUdFX1NJWkUgKiAobGVmdG92ZXJfcGFnZXMgLSBwYWdlc19yZW1haW5pbmcpO1xcbjIwOTM6XFx0XFx0XFx0KnNlcSArPSBieXRlc19tYXBwZWQ7XFxuMjA5NDpcXHRcXHRcXHQqYWRkcmVzcyArPSBieXRlc19tYXBwZWQ7XFxuMjA5NTpcXHRcXHR9XFxuMjA5NjpcXHRcXHRpZiAoZXJyKSB7XFxuMjA5NzpcXHRcXHRcXHQvKiBFaXRoZXIgd2Ugd2VyZSB1bmFibGUgdG8gemFwLCBPUiB3ZSB6YXBwZWQsIHJldHJpZWQgYW5cXG4yMDk4OlxcdFxcdFxcdCAqIGluc2VydCwgYW5kIHN0aWxsIGhhZCBhbiBpc3N1ZS4gRWl0aGVyIHdheXMsIHBhZ2VzX3JlbWFpbmluZ1xcbjIwOTk6XFx0XFx0XFx0ICogaXMgdGhlIG51bWJlciBvZiBwYWdlcyB3ZSB3ZXJlIHVuYWJsZSB0byBtYXAsIGFuZCB3ZSB1bnJvbGxcXG4yMTAwOlxcdFxcdFxcdCAqIHNvbWUgc3RhdGUgd2Ugc3BlY3VsYXRpdmVseSB0b3VjaGVkIGJlZm9yZS5cXG4yMTAxOlxcdFxcdFxcdCAqL1xcbjIxMDI6XFx0XFx0XFx0Y29uc3QgaW50IGJ5dGVzX25vdF9tYXBwZWQgPSBQQUdFX1NJWkUgKiBwYWdlc19yZW1haW5pbmc7XFxuMjEwMzpcXHRcXG4yMTA0OlxcdFxcdFxcdCpsZW5ndGggLT0gYnl0ZXNfbm90X21hcHBlZDtcXG4yMTA1OlxcdFxcdFxcdHpjLVxcdTAwM2VyZWN2X3NraXBfaGludCArPSBieXRlc19ub3RfbWFwcGVkO1xcbjIxMDY6XFx0XFx0fVxcbjIxMDc6XFx0XFx0cmV0dXJuIGVycjtcXG4yMTA4OlxcdH1cXG4yMTA5OlxcdFxcbjIxMTA6XFx0c3RhdGljIGludCB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjIxMTE6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6MzI6MzEuNDAwMjYzNjc3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMjU5NzEwMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYSBSZXR1cm5lZCBFcnJvciBDb2RlKipcblxuUmlnaHQsIHNvIHRoZSBlcnJvciBjb2RlIGlzIGJlaW5nIHJldHVybmVkIGRpcmVjdGx5LiBUaGF0J3MgdGhlIGltbWVkaWF0ZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gd29yayB3aXRoLiBOb3csIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgYGlvX3VyaW5nX21tYXBgIGZ1bmN0aW9uLiBNeSBndXQgdGVsbHMgbWUgdGhhdCdzIHRoZSBsaWtlbHkgc291cmNlIG9mIHRoaXMgZXJyb3IsIG9yIGF0IGxlYXN0IGEga2V5IGNvbXBvbmVudCBpbiB0aGUgcHJvYmxlbSBzcGFjZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBpb191cmluZ19tbWFwYCBpcyBpbnRlcmFjdGluZyB3aXRoIHdoYXRldmVyIGxvZ2ljIGlzIGdlbmVyYXRpbmcgdGhhdCBlcnJvciBjb2RlLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgaW4gdGhlcmUuIE1heWJlIHRoZXJlJ3MgYSBwcm9ibGVtIHdpdGggdGhlIGFyZ3VtZW50cywgdGhlIGFsbG9jYXRpb24sIHRoZSB1bmRlcmx5aW5nIHN5c3RlbSBjYWxscywgb3IgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHVzZXItc3BhY2UuIFRoYXQncyB0aGUgbGlrZWx5IGN1bHByaXQgZ2l2ZW4gdGhhdCBjb2RlIGlzIHdoYXQgdGhlIGlzc3VlIHJlbGF0ZXMgdG8uIEknbSBnb2luZyB0byBoYXZlIHRvIGRvIGEgZGVlcCBkaXZlIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjM3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMjozOS41MjYyMzgwNTRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvbWVtbWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjg0OlxcdHN0YXRpYyBpbnQgaW9fcmVnaW9uX21tYXAoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuIDI4NTpcXHRcXHRcXHRcXHQgIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcXG4gMjg2OlxcdFxcdFxcdFxcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIDI4NzpcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIG1heF9wYWdlcylcXG4gMjg4OlxcdHtcXG4gMjg5OlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBtaW4obXItXFx1MDAzZW5yX3BhZ2VzLCBtYXhfcGFnZXMpO1xcbiAyOTA6XFx0XFxuIDI5MTpcXHRcXHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EKTtcXG4gMjkyOlxcdFxcdHJldHVybiB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXFx1MDAzZXZtX3N0YXJ0LCBtci1cXHUwMDNlcGFnZXMsIFxcdTAwMjZucl9wYWdlcyk7XFxuIDI5MzpcXHR9XFxuIDI5NDpcXHRcXG4gMjk1OlxcdF9fY29sZCBpbnQgaW9fdXJpbmdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIDI5NjpcXHR7XFxuIDI5NzpcXHRcXHRzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gMjk4OlxcdFxcdHNpemVfdCBzeiA9IHZtYS1cXHUwMDNldm1fZW5kIC0gdm1hLVxcdTAwM2V2bV9zdGFydDtcXG4gMjk5OlxcdFxcdGxvbmcgb2Zmc2V0ID0gdm1hLVxcdTAwM2V2bV9wZ29mZiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbiAzMDA6XFx0XFx0dW5zaWduZWQgaW50IHBhZ2VfbGltaXQgPSBVSU5UX01BWDtcXG4gMzAxOlxcdFxcdHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICpyZWdpb247XFxuIDMwMjpcXHRcXHR2b2lkICpwdHI7XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdGd1YXJkKG11dGV4KShcXHUwMDI2Y3R4LVxcdTAwM2VtbWFwX2xvY2spO1xcbiAzMDU6XFx0XFxuIDMwNjpcXHRcXHRwdHIgPSBpb191cmluZ192YWxpZGF0ZV9tbWFwX3JlcXVlc3QoZmlsZSwgdm1hLVxcdTAwM2V2bV9wZ29mZik7XFxuIDMwNzpcXHRcXHRpZiAoSVNfRVJSKHB0cikpXFxuIDMwODpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwdHIpO1xcbiAzMDk6XFx0XFxuIDMxMDpcXHRcXHRzd2l0Y2ggKG9mZnNldCBcXHUwMDI2IElPUklOR19PRkZfTU1BUF9NQVNLKSB7XFxuIDMxMTpcXHRcXHRjYXNlIElPUklOR19PRkZfU1FfUklORzpcXG4gMzEyOlxcdFxcdGNhc2UgSU9SSU5HX09GRl9DUV9SSU5HOlxcbiAzMTM6XFx0XFx0XFx0cGFnZV9saW1pdCA9IChzeiArIFBBR0VfU0laRSAtIDEpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIDMxNDpcXHRcXHRcXHRicmVhaztcXG4gMzE1OlxcdFxcdH1cXG4gMzE2OlxcdFxcbiAzMTc6XFx0XFx0cmVnaW9uID0gaW9fbW1hcF9nZXRfcmVnaW9uKGN0eCwgdm1hLVxcdTAwM2V2bV9wZ29mZik7XFxuIDMxODpcXHRcXHRyZXR1cm4gaW9fcmVnaW9uX21tYXAoY3R4LCByZWdpb24sIHZtYSwgcGFnZV9saW1pdCk7XFxuIDMxOTpcXHR9XFxuIDMyMDpcXHRcXG4gMzIxOlxcdHVuc2lnbmVkIGxvbmcgaW9fdXJpbmdfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gMzIyOlxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcXG4gMzIzOlxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbiAzMjQ6XFx0e1xcbiAzMjU6XFx0XFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDMyNjpcXHRcXHR2b2lkICpwdHI7XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdC8qXFxuIDMyOTpcXHRcXHQgKiBEbyBub3QgYWxsb3cgdG8gbWFwIHRvIHVzZXItcHJvdmlkZWQgYWRkcmVzcyB0byBhdm9pZCBicmVha2luZyB0aGVcXG4gMzMwOlxcdFxcdCAqIGFsaWFzaW5nIHJ1bGVzLiBVc2Vyc3BhY2UgaXMgbm90IGFibGUgdG8gZ3Vlc3MgdGhlIG9mZnNldCBhZGRyZXNzIG9mXFxuIDMzMTpcXHRcXHQgKiBrZXJuZWwga21hbGxvYygpZWQgbWVtb3J5IGFyZWEuXFxuIDMzMjpcXHRcXHQgKi9cXG4gMzMzOlxcdFxcdGlmIChhZGRyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMjozOS41MjYzMTc2NDNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk5MDgxMjI5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgQWxsb2NhdGlvbiBGaXgqKlxuXG5Pa2F5LCBzbyBgaW9fdXJpbmdfbW1hcGAgcmV0dXJucyB0aGUgZXJyb3IgY29kZSBkaXJlY3RseSwgd2hpY2ggaXMgZ29vZC4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBgdm1faW5zZXJ0X3BhZ2VzYCB3aGVuIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgbWFraW5nIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJJ3ZlIGdvdCB0byBydW4gdGhpcyB0aHJvdWdoIGl0cyBwYWNlcy5cblxuQWxyaWdodCwgbGV0J3MgcHJlcCB0aGUgcmVzcG9uc2UuIERlZmluaXRlbHkgYFdvcnRoRnV6emluZzogdHJ1ZWAuIFRoZSBwcmltYXJ5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgYHZtX2luc2VydF9wYWdlc2AsIGBpb191cmluZ19tbWFwYCwgYHRjcF96ZXJvY29weV9yZWNlaXZlYCwgYHJpbmdfYnVmZmVyX21hcGAsIGFuZCBgbWFwX2tlcm5lbF9wYWdlc19jb21wbGV0ZWAuXG5cbldhaXQgYSBtaW51dGUsIGBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlYCBpcyB1c2VkIHdpdGhpbiBgbW1hcF9hY3Rpb25fY29tcGxldGVgLCB3aGljaCBpbiB0dXJuIGlzIHVzZWQgaW4gYF9fbW1hcF9yZWdpb25gLiBUaGlua2luZyBvdXQgbG91ZCwgdGhlbiBgX19tbWFwX3JlZ2lvbmAgaXRzZWxmIGNvdWxkIGJlIGEgdmFsdWFibGUgdGFyZ2V0LCBob3dldmVyLCB0aGF0J3MgbGlrZWx5IGEgaG90IHBhdGguIFNvLCBgbW1hcF9hY3Rpb25fY29tcGxldGVgIG1pZ2h0IGJlIHRoZSBiZXR0ZXIgYmV0LiBIb3dldmVyLCB0aGUgcm9vdCBjYXVzZSBpcyB3aXRoIGB2bV9pbnNlcnRfcGFnZXNgLCBzbyBJIHN0aWxsIG5lZWQgdG8gZ2l2ZSBpdCB0aGUgcHJpbWFyeSBmb2N1cy5cblxuTm93LCBsZXQgbWUgbWFrZSBzdXJlIHRoYXQgYElPX1VSSU5HYCBpcyB0aGUgb25seSBjb25maWcgdGhhdCBuZWVkcyB0byBiZSBlbmFibGVkLiBJIHNlZSB0aGF0IGBDT05GSUdfSU9fVVJJTkdgLCBgQ09ORklHX0lORVRgLCBhbmQgYENPTkZJR19UUkFDSU5HYCBhcmUgc3RhbmRhcmQsIHNvIG5vIG5lZWQgdG8gb3ZlcnRoaW5rIGl0LlxuXG5JJ2xsIHF1aWNrbHkgY2hlY2sgYENPTkZJR19JT19VUklOR2AgaW4gS2NvbmZpZyB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBidXQgSSdtIGZlZWxpbmcgY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMgc28gZmFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjMxMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMyOjQ1LjUxNzEzMjM0MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0MjUyNTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19VUklOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5MTA9Y29uZmlnIEFJT1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MTctXFxuaW5pdC9LY29uZmlnOjE5MTg6Y29uZmlnIElPX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5MTktXFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnPTE5Mjc9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MzktXFxuaW5pdC9LY29uZmlnOjE5NDA6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxcbmluaXQvS2NvbmZpZy0xOTQxLVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMyOjQ1LjY4MTM5MDE2NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjY3Mjk1Njk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSU9fVVJJTkcsIFplcm9jb3B5LCBhbmQgUmluZyBCdWZmZXJzOiBBIE1lbnRhbCBNYXAqKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBgSU9fVVJJTkdgIGFzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24uIEdvdCBpdC4gTm93LCBsZXQncyB6ZXJvIGluIG9uIGB0Y3BfemVyb2NvcHlfcmVjZWl2ZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoZXJlIGRvZXMgdGhpcyBhY3R1YWxseSBsaXZlP1wiIEFoLCB5ZXMsIGBuZXQvaXB2NC90Y3AuY2AuIFRoYXQncyByaWdodCwgdGhhdCdzIGEgY29yZSBjb21wb25lbnQsIGFsd2F5cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIE5vIHN1cnByaXNlcyB0aGVyZS5cblxuTm93LCBsZXQncyBjaXJjbGUgYmFjayB0byBgcmluZ19idWZmZXJfbWFwYC4gVGhhdCdzIGluIGBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY2AsIGFuZCBpZiBJIHJlY2FsbCBjb3JyZWN0bHkgZnJvbSBwYXN0IGV4cGVyaWVuY2VzLCB0aGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gWWVwLCBpdCdzIGRlcGVuZGVudCBvbiBgQ09ORklHX1RSQUNJTkdgLiBNYWtlcyBzZW5zZSwgYXMgcmluZyBidWZmZXJzIGFyZSBjcnVjaWFsIGZvciB0cmFjaW5nIGFuZCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nLiBTbywgYElPX1VSSU5HYCwgYHRjcF96ZXJvY29weV9yZWNlaXZlYCwgYW5kIGBDT05GSUdfVFJBQ0lOR2AgYXJlIGFsbCBjb25uZWN0ZWQgaW4gdGhpcyBjb250ZXh0LCBub3cgbGV0IG1lIHRoaW5rIGFib3V0IGhvdyBpdCBhbGwgdGllcyBpbi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzExMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMyOjQ5Ljk0ODY4OTQ4MVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0ODIwODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQUNJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9MTYzPWNvbmZpZyBQUkVFTVBUSVJRX1RSQUNFUE9JTlRTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xNzgtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTc5OmNvbmZpZyBUUkFDSU5HXFxua2VybmVsL3RyYWNlL0tjb25maWctMTgwLVxcdGJvb2xcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTE5MD1jb25maWcgR0VORVJJQ19UUkFDRVJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTE5Ny0jXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTk4OmNvbmZpZyBUUkFDSU5HX1NVUFBPUlRcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xOTktXFx0Ym9vbFxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9NzA3PWVuZGNob2ljZVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTcwOC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo3MDk6Y29uZmlnIFRSQUNJTkdfQlJBTkNIRVNcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy03MTAtXFx0Ym9vbFxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9ODk1PWNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9SRUNPUkRNQ09VTlRcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTkwMS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo5MDI6Y29uZmlnIFRSQUNJTkdfTUFQXFxua2VybmVsL3RyYWNlL0tjb25maWctOTAzLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6MzI6NDkuOTk1MTc2MDE2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NjczMzQ4MzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIGB2bV9pbnNlcnRfcGFnZXNgKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBgVFJBQ0lOR2Agc2VlbXMgc3RhbmRhcmQgZW5vdWdoLCBub3RoaW5nIHRvIHdvcnJ5IGFib3V0IHRoZXJlLiBOb3csIGxldCdzIGNvbnNpZGVyIHRoZSBgQ09ORklHX01NVWAgZGVwZW5kZW5jeS4gTG9va2luZyBhdCBgbW0vbWVtb3J5LmNgLCB0aGUgZGVmaW5pdGlvbiBvZiBgdm1faW5zZXJ0X3BhZ2VzYCBpcyBjb25kaXRpb25hbCBvbiBgQ09ORklHX01NVWAsIHdoaWNoIGlzIHdoYXQgSSB3b3VsZCBleHBlY3QuIEhvd2V2ZXIsIGBtbS9ub21tdS5jYCBhbHNvIGhhcyBhIGB2bV9pbnNlcnRfcGFnZXNgLCB3aGljaCByZXR1cm5zIGAtRUlOVkFMYC4gVGhpcyBtZWFucyB0byBwcm9wZXJseSB0ZXN0IHRoZSBjaGFuZ2VzLCBJJ2xsIG5lZWQgYENPTkZJR19NTVVgIGVuYWJsZWQsIHdoaWNoIGlzbid0IGEgcHJvYmxlbSBzaW5jZSBpdCdzIGFsbW9zdCBhbHdheXMgZW5hYmxlZCBvbiBtb2Rlcm4gYXJjaGl0ZWN0dXJlcy5cblxuSSdsbCBhZGQgYElPX1VSSU5HYCB0byBgRW5hYmxlQ29uZmlnc2AgdG8ga2VlcCB0cmFjayBvZiB0aGF0LlxuXG5NeSBrZXkgZm9jdXMgc3ltYm9scyBoZXJlIGFyZSBgdm1faW5zZXJ0X3BhZ2VzYCwgYGlvX3VyaW5nX21tYXBgLCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgLCBgcmluZ19idWZmZXJfbWFwYCwgYW5kIGBtbWFwX2FjdGlvbl9jb21wbGV0ZWAuXG5cbldhaXQsIGBtbWFwX2FjdGlvbl9jb21wbGV0ZWAgaXMgaW4gYG1tL3V0aWwuY2AuIEdvb2QsIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGl0J3MgcmVhY2hhYmxlLiBZZXMsIGl0J3MgY2FsbGVkIGJ5IGBfX21tYXBfcmVnaW9uYC5cblxuTm93LCBiYWNrIHRvIHRoZSBwYXRjaCBpdHNlbGYuIEknbSBzZWVpbmcgY2hhbmdlcyB0byBlcnJvciBoYW5kbGluZyBpbiBgdm1faW5zZXJ0X3BhZ2VzYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBub3cgY29ycmVjdGx5IHJldHVybnMgYC1FTk9NRU1gIHdoZW4gcGFnZSB0YWJsZSBhbGxvY2F0aW9uIGZhaWxzIGFuZCBzZXRzIHRoZSBjb3JyZWN0IHJldHVybiBjb2RlcyB0aHJvdWdob3V0IHRoZSBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSBjb3VsZCByZXR1cm4gYC1FRkFVTFRgIGluIGNhc2VzIHdoZXJlIGAtRU5PTUVNYCB3YXMgbW9yZSBhcHByb3ByaWF0ZSwgZXNwZWNpYWxseSB3aGVuIGB3YWxrX3RvX3BtZGAgb3IgYHB0ZV9hbGxvY2AgZmFpbC4gVGhlIGNoYW5nZSBhbHNvIGluY2x1ZGVzIGEgcmVuYW1lIG9mIGB3YWxrX3RvX3BtZGAgdG8gYHBvcHVsYXRlX3RvX3BtZGAuXG5cblNvIHRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgLUVGQVVMVGAgd2FzIHJldHVybmVkIGluc3RlYWQgb2YgYC1FTk9NRU1gIGluIHNldmVyYWwgc2l0dWF0aW9ucy4gU3BlY2lmaWNhbGx5LCBpZiBgd2Fsa190b19wbWRgIGZhaWxlZCwgdGhlIGZ1bmN0aW9uIG5vdyByZXR1cm5zIGAtRU5PTUVNYCBpbnN0ZWFkIG9mIGAtRUZBVUxUYC4gVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgYHB0ZV9hbGxvY2AuXG5cbk5vdywgaWYgYWxsIHBhZ2VzIGluIGEgYmF0Y2ggYXJlIHN1Y2Nlc3NmdWxseSBpbnNlcnRlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgMC5cblxuQmFzZWQgb24gdGhpcyBhbmFseXNpcywgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5JJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzcyMCwiT3V0cHV0VG9rZW5zIjoxNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMzOjA2LjY2ODUyNzQ4N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MjcwNTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtX2luc2VydF9wYWdlc1wiLFxuICAgIFwiaW9fdXJpbmdfbW1hcFwiLFxuICAgIFwidGNwX3plcm9jb3B5X3JlY2VpdmVcIixcbiAgICBcInJpbmdfYnVmZmVyX21hcFwiLFxuICAgIFwibW1hcF9hY3Rpb25fY29tcGxldGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBpbnNlcnRfcGFnZXNgIHdoZW4gcGFnZSB0YWJsZSBhbGxvY2F0aW9uIGZhaWxzLCByZXR1cm5pbmcgYC1FTk9NRU1gIGluc3RlYWQgb2YgYC1FRkFVTFRgLiBJdCBhbHNvIHJlbmFtZXMgYHdhbGtfdG9fcG1kYCB0byBgcG9wdWxhdGVfdG9fcG1kYCB0byBiZXR0ZXIgcmVmbGVjdCBpdHMgYmVoYXZpb3IuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBjYWxsZXJzIG9mIGB2bV9pbnNlcnRfcGFnZXNgIHN1Y2ggYXMgaW9fdXJpbmcsIHRjcCB6ZXJvY29weSwgYW5kIHRyYWNlIHJpbmcgYnVmZmVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtX2luc2VydF9wYWdlc1wiLFxuICAgIFwiaW9fdXJpbmdfbW1hcFwiLFxuICAgIFwidGNwX3plcm9jb3B5X3JlY2VpdmVcIixcbiAgICBcInJpbmdfYnVmZmVyX21hcFwiLFxuICAgIFwibW1hcF9hY3Rpb25fY29tcGxldGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBpbnNlcnRfcGFnZXNgIHdoZW4gcGFnZSB0YWJsZSBhbGxvY2F0aW9uIGZhaWxzLCByZXR1cm5pbmcgYC1FTk9NRU1gIGluc3RlYWQgb2YgYC1FRkFVTFRgLiBJdCBhbHNvIHJlbmFtZXMgYHdhbGtfdG9fcG1kYCB0byBgcG9wdWxhdGVfdG9fcG1kYCB0byBiZXR0ZXIgcmVmbGVjdCBpdHMgYmVoYXZpb3IuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBjYWxsZXJzIG9mIGB2bV9pbnNlcnRfcGFnZXNgIHN1Y2ggYXMgaW9fdXJpbmcsIHRjcCB6ZXJvY29weSwgYW5kIHRyYWNlIHJpbmcgYnVmZmVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowhwqjv[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 17:28:57 +0000 UTC FinishedAt: 2026-08-05 17:33:07 +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": "848acc8ffe1b7cd5f1bf427b93069becfebc2c9d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "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": "848acc8ffe1b7cd5f1bf427b93069becfebc2c9d", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "IO_URING" ], "series_id": "23a3eda3-9bab-4c50-b136-d04b42410800" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "vm_insert_pages", "io_uring_mmap", "tcp_zerocopy_receive", "ring_buffer_map", "mmap_action_complete" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0lPX1VSSU5HJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dm1faW5zZXJ0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2lvX3VyaW5nX21tYXAmIzM0OywKICAgICYjMzQ7dGNwX3plcm9jb3B5X3JlY2VpdmUmIzM0OywKICAgICYjMzQ7cmluZ19idWZmZXJfbWFwJiMzNDssCiAgICAmIzM0O21tYXBfYWN0aW9uX2NvbXBsZXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIHRoZSByZXR1cm4gdmFsdWUgb2YgYGluc2VydF9wYWdlc2Agd2hlbiBwYWdlIHRhYmxlIGFsbG9jYXRpb24gZmFpbHMsIHJldHVybmluZyBgLUVOT01FTWAgaW5zdGVhZCBvZiBgLUVGQVVMVGAuIEl0IGFsc28gcmVuYW1lcyBgd2Fsa190b19wbWRgIHRvIGBwb3B1bGF0ZV90b19wbWRgIHRvIGJldHRlciByZWZsZWN0IGl0cyBiZWhhdmlvci4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgdGhhdCBhZmZlY3RzIGNhbGxlcnMgb2YgYHZtX2luc2VydF9wYWdlc2Agc3VjaCBhcyBpb191cmluZywgdGNwIHplcm9jb3B5LCBhbmQgdHJhY2UgcmluZyBidWZmZXJzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzM1ZWRjODQyYjIwNjA3ZjM0ZDc2OWM5ZTVmOTA4MDlmYjQ2YjE0MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTc6MzA6NDcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuY1xuaW5kZXggZmYzMzhjMmFiZTkyMy4uMTYwOTM0NzlkMzQxMCAxMDA2NDRcbi0tLSBhL21tL21lbW9yeS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuY1xuQEAgLTIyNjgsNyAmIzQzOzIyNjgsNyBAQCB2b2lkIHphcF9zcGVjaWFsX3ZtYV9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIH1cbiBFWFBPUlRfU1lNQk9MX0dQTCh6YXBfc3BlY2lhbF92bWFfcmFuZ2UpO1xuIFxuLXN0YXRpYyBwbWRfdCAqd2Fsa190b19wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbiYjNDM7c3RhdGljIHBtZF90ICpwb3B1bGF0ZV90b19wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRwZ2RfdCAqcGdkO1xuIFx0cDRkX3QgKnA0ZDtcbkBAIC0yMjkzLDcgJiM0MzsyMjkzLDcgQEAgc3RhdGljIHBtZF90ICp3YWxrX3RvX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHB0ZV90ICpnZXRfbG9ja2VkX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0XHQgICAgICBzcGlubG9ja190ICoqcHRsKVxuIHtcbi1cdHBtZF90ICpwbWQgPSB3YWxrX3RvX3BtZChtbSwgYWRkcik7XG4mIzQzO1x0cG1kX3QgKnBtZCA9IHBvcHVsYXRlX3RvX3BtZChtbSwgYWRkcik7XG4gXG4gXHRpZiAoIXBtZClcbiBcdFx0cmV0dXJuIE5VTEw7XG5AQCAtMjQzNCwyMCAmIzQzOzI0MzQsMjIgQEAgc3RhdGljIGludCBpbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdHVuc2lnbmVkIGxvbmcgY3Vycl9wYWdlX2lkeCA9IDA7XG4gXHR1bnNpZ25lZCBsb25nIHJlbWFpbmluZ19wYWdlc190b3RhbCA9ICpudW07XG4gXHR1bnNpZ25lZCBsb25nIHBhZ2VzX3RvX3dyaXRlX2luX3BtZDtcbi1cdGludCByZXQ7XG4mIzQzO1x0aW50IGVyciA9IDA7XG4gbW9yZTpcbi1cdHJldCA9IC1FRkFVTFQ7XG4tXHRwbWQgPSB3YWxrX3RvX3BtZChtbSwgYWRkcik7XG4tXHRpZiAoIXBtZClcbiYjNDM7XHRwbWQgPSBwb3B1bGF0ZV90b19wbWQobW0sIGFkZHIpO1xuJiM0MztcdGlmICghcG1kKSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dDtcbiYjNDM7XHR9XG4gXG4gXHRwYWdlc190b193cml0ZV9pbl9wbWQgPSBtaW5fdCh1bnNpZ25lZCBsb25nLFxuIFx0XHRyZW1haW5pbmdfcGFnZXNfdG90YWwsIFBUUlNfUEVSX1BURSAtIHB0ZV9pbmRleChhZGRyKSk7XG4gXG4gXHQvKiBBbGxvY2F0ZSB0aGUgUFRFIGlmIG5lY2Vzc2FyeTsgdGFrZXMgUE1EIGxvY2sgb25jZSBvbmx5LiAqL1xuLVx0cmV0ID0gLUVOT01FTTtcbi1cdGlmIChwdGVfYWxsb2MobW0sIHBtZCkpXG4mIzQzO1x0aWYgKHB0ZV9hbGxvYyhtbSwgcG1kKSkge1xuJiM0MztcdFx0ZXJyID0gLUVOT01FTTtcbiBcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuIFxuIFx0d2hpbGUgKHBhZ2VzX3RvX3dyaXRlX2luX3BtZCkge1xuIFx0XHRpbnQgcHRlX2lkeCA9IDA7XG5AQCAtMjQ1NSwxNSAmIzQzOzI0NTcsMTQgQEAgc3RhdGljIGludCBpbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcbiBcdFx0c3RhcnRfcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBhZGRyLCBcdTAwMjZwdGVfbG9jayk7XG4gXHRcdGlmICghc3RhcnRfcHRlKSB7XG4tXHRcdFx0cmV0ID0gLUVGQVVMVDtcbiYjNDM7XHRcdFx0ZXJyID0gLUVGQVVMVDtcbiBcdFx0XHRnb3RvIG91dDtcbiBcdFx0fVxuIFx0XHRmb3IgKHB0ZSA9IHN0YXJ0X3B0ZTsgcHRlX2lkeCBcdTAwM2MgYmF0Y2hfc2l6ZTsgJiM0MzsmIzQzO3B0ZSwgJiM0MzsmIzQzO3B0ZV9pZHgpIHtcbi1cdFx0XHRpbnQgZXJyID0gaW5zZXJ0X3BhZ2VfaW5fYmF0Y2hfbG9ja2VkKHZtYSwgcHRlLFxuLVx0XHRcdFx0YWRkciwgcGFnZXNbY3Vycl9wYWdlX2lkeF0sIHByb3QpO1xuJiM0MztcdFx0XHRlcnIgPSBpbnNlcnRfcGFnZV9pbl9iYXRjaF9sb2NrZWQodm1hLCBwdGUsIGFkZHIsXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICBwYWdlc1tjdXJyX3BhZ2VfaWR4XSwgcHJvdCk7XG4gXHRcdFx0aWYgKHVubGlrZWx5KGVycikpIHtcbiBcdFx0XHRcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGVfbG9jayk7XG4tXHRcdFx0XHRyZXQgPSBlcnI7XG4gXHRcdFx0XHRyZW1haW5pbmdfcGFnZXNfdG90YWwgLT0gcHRlX2lkeDtcbiBcdFx0XHRcdGdvdG8gb3V0O1xuIFx0XHRcdH1cbkBAIC0yNDc2LDEwICYjNDM7MjQ3Nyw5IEBAIHN0YXRpYyBpbnQgaW5zZXJ0X3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHR9XG4gXHRpZiAocmVtYWluaW5nX3BhZ2VzX3RvdGFsKVxuIFx0XHRnb3RvIG1vcmU7XG4tXHRyZXQgPSAwO1xuIG91dDpcbiBcdCpudW0gPSByZW1haW5pbmdfcGFnZXNfdG90YWw7XG4tXHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIC8qKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtX2luc2VydF9wYWdlcyYjMzQ7LAogICAgJiMzNDtpb191cmluZ19tbWFwJiMzNDssCiAgICAmIzM0O3RjcF96ZXJvY29weV9yZWNlaXZlJiMzNDssCiAgICAmIzM0O3JpbmdfYnVmZmVyX21hcCYjMzQ7LAogICAgJiMzNDttbWFwX2FjdGlvbl9jb21wbGV0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBpbnNlcnRfcGFnZXNgIHdoZW4gcGFnZSB0YWJsZSBhbGxvY2F0aW9uIGZhaWxzLCByZXR1cm5pbmcgYC1FTk9NRU1gIGluc3RlYWQgb2YgYC1FRkFVTFRgLiBJdCBhbHNvIHJlbmFtZXMgYHdhbGtfdG9fcG1kYCB0byBgcG9wdWxhdGVfdG9fcG1kYCB0byBiZXR0ZXIgcmVmbGVjdCBpdHMgYmVoYXZpb3IuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBjYWxsZXJzIG9mIGB2bV9pbnNlcnRfcGFnZXNgIHN1Y2ggYXMgaW9fdXJpbmcsIHRjcCB6ZXJvY29weSwgYW5kIHRyYWNlIHJpbmcgYnVmZmVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDMzNWVkYzg0MmIyMDYwN2YzNGQ3NjljOWU1ZjkwODA5ZmI0NmIxNDEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyA1IDE3OjMwOjQ3IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtb3J5LmMgYi9tbS9tZW1vcnkuYwppbmRleCBmZjMzOGMyYWJlOTIzLi4xNjA5MzQ3OWQzNDEwIDEwMDY0NAotLS0gYS9tbS9tZW1vcnkuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1vcnkuYwpAQCAtMjI2OCw3ICYjNDM7MjI2OCw3IEBAIHZvaWQgemFwX3NwZWNpYWxfdm1hX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh6YXBfc3BlY2lhbF92bWFfcmFuZ2UpOwogCi1zdGF0aWMgcG1kX3QgKndhbGtfdG9fcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7c3RhdGljIHBtZF90ICpwb3B1bGF0ZV90b19wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcikKIHsKIAlwZ2RfdCAqcGdkOwogCXA0ZF90ICpwNGQ7CkBAIC0yMjkzLDcgJiM0MzsyMjkzLDcgQEAgc3RhdGljIHBtZF90ICp3YWxrX3RvX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKQogcHRlX3QgKmdldF9sb2NrZWRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJCSAgICAgIHNwaW5sb2NrX3QgKipwdGwpCiB7Ci0JcG1kX3QgKnBtZCA9IHdhbGtfdG9fcG1kKG1tLCBhZGRyKTsKJiM0MzsJcG1kX3QgKnBtZCA9IHBvcHVsYXRlX3RvX3BtZChtbSwgYWRkcik7CiAKIAlpZiAoIXBtZCkKIAkJcmV0dXJuIE5VTEw7CkBAIC0yNDM0LDIwICYjNDM7MjQzNCwyMiBAQCBzdGF0aWMgaW50IGluc2VydF9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLAogCXVuc2lnbmVkIGxvbmcgY3Vycl9wYWdlX2lkeCA9IDA7CiAJdW5zaWduZWQgbG9uZyByZW1haW5pbmdfcGFnZXNfdG90YWwgPSAqbnVtOwogCXVuc2lnbmVkIGxvbmcgcGFnZXNfdG9fd3JpdGVfaW5fcG1kOwotCWludCByZXQ7CiYjNDM7CWludCBlcnIgPSAwOwogbW9yZToKLQlyZXQgPSAtRUZBVUxUOwotCXBtZCA9IHdhbGtfdG9fcG1kKG1tLCBhZGRyKTsKLQlpZiAoIXBtZCkKJiM0MzsJcG1kID0gcG9wdWxhdGVfdG9fcG1kKG1tLCBhZGRyKTsKJiM0MzsJaWYgKCFwbWQpIHsKJiM0MzsJCWVyciA9IC1FTk9NRU07CiAJCWdvdG8gb3V0OwomIzQzOwl9CiAKIAlwYWdlc190b193cml0ZV9pbl9wbWQgPSBtaW5fdCh1bnNpZ25lZCBsb25nLAogCQlyZW1haW5pbmdfcGFnZXNfdG90YWwsIFBUUlNfUEVSX1BURSAtIHB0ZV9pbmRleChhZGRyKSk7CiAKIAkvKiBBbGxvY2F0ZSB0aGUgUFRFIGlmIG5lY2Vzc2FyeTsgdGFrZXMgUE1EIGxvY2sgb25jZSBvbmx5LiAqLwotCXJldCA9IC1FTk9NRU07Ci0JaWYgKHB0ZV9hbGxvYyhtbSwgcG1kKSkKJiM0MzsJaWYgKHB0ZV9hbGxvYyhtbSwgcG1kKSkgewomIzQzOwkJZXJyID0gLUVOT01FTTsKIAkJZ290byBvdXQ7CiYjNDM7CX0KIAogCXdoaWxlIChwYWdlc190b193cml0ZV9pbl9wbWQpIHsKIAkJaW50IHB0ZV9pZHggPSAwOwpAQCAtMjQ1NSwxNSAmIzQzOzI0NTcsMTQgQEAgc3RhdGljIGludCBpbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAogCQlzdGFydF9wdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKG1tLCBwbWQsIGFkZHIsICZhbXA7cHRlX2xvY2spOwogCQlpZiAoIXN0YXJ0X3B0ZSkgewotCQkJcmV0ID0gLUVGQVVMVDsKJiM0MzsJCQllcnIgPSAtRUZBVUxUOwogCQkJZ290byBvdXQ7CiAJCX0KIAkJZm9yIChwdGUgPSBzdGFydF9wdGU7IHB0ZV9pZHggJmx0OyBiYXRjaF9zaXplOyAmIzQzOyYjNDM7cHRlLCAmIzQzOyYjNDM7cHRlX2lkeCkgewotCQkJaW50IGVyciA9IGluc2VydF9wYWdlX2luX2JhdGNoX2xvY2tlZCh2bWEsIHB0ZSwKLQkJCQlhZGRyLCBwYWdlc1tjdXJyX3BhZ2VfaWR4XSwgcHJvdCk7CiYjNDM7CQkJZXJyID0gaW5zZXJ0X3BhZ2VfaW5fYmF0Y2hfbG9ja2VkKHZtYSwgcHRlLCBhZGRyLAomIzQzOwkJCQkJCQkgIHBhZ2VzW2N1cnJfcGFnZV9pZHhdLCBwcm90KTsKIAkJCWlmICh1bmxpa2VseShlcnIpKSB7CiAJCQkJcHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0ZV9sb2NrKTsKLQkJCQlyZXQgPSBlcnI7CiAJCQkJcmVtYWluaW5nX3BhZ2VzX3RvdGFsIC09IHB0ZV9pZHg7CiAJCQkJZ290byBvdXQ7CiAJCQl9CkBAIC0yNDc2LDEwICYjNDM7MjQ3Nyw5IEBAIHN0YXRpYyBpbnQgaW5zZXJ0X3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsCiAJfQogCWlmIChyZW1haW5pbmdfcGFnZXNfdG90YWwpCiAJCWdvdG8gbW9yZTsKLQlyZXQgPSAwOwogb3V0OgogCSpudW0gPSByZW1haW5pbmdfcGFnZXNfdG90YWw7Ci0JcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogLyoqCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MDMKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9tZW1vcnkuY2AuIEl0IHNlZW1zIHRoZXkmIzM5O3JlIHJlbmFtaW5nIGB3YWxrX3RvX3BtZGAgdG8gYHBvcHVsYXRlX3RvX3BtZGAsIHdoaWNoIGlzIGFuIGludGVyZXN0aW5nIHNlbWFudGljIHNoaWZ0LiBJJiMzOTtsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhhdCByZW5hbWUgbGF0ZXI7IGZvciBub3csIEkgbmVlZCB0byBmb2N1cyBvbiB0aGUgcmV0dXJuIHZhbHVlcy4gSXQgYWxzbyBzZWVtcyB0aGV5JiMzOTt2ZSBjaGFuZ2VkIGhvdyBgaW5zZXJ0X3BhZ2VzYCBoYW5kbGVzIGVycm9ycyBmcm9tIGBwb3B1bGF0ZV90b19wbWRgIChvcmlnaW5hbGx5IGB3YWxrX3RvX3BtZGApLCBtYWtpbmcgaXQgcmV0dXJuIGAtRU5PTUVNYCBpbnN0ZWFkIG9mIGAtRUZBVUxUYCBvbiBmYWlsdXJlLiBUaGV5JiMzOTt2ZSBhbHNvIGNsZWFuZWQgdXAgdGhlIGVycm9yIHJldHVybnMgZnJvbSB0aGUgcGF0Y2gsIGFuZCBJJiMzOTt2ZSBxdWlja2x5IGNvbmZpcm1lZCB0aGF0IGBwdGVfYWxsb2NgIHNob3VsZCBiZSBgLUVOT01FTWAsIGFuZCBgcHRlX29mZnNldF9tYXBfbG9ja2Agc2hvdWxkIGJlIGAtRUZBVUxUYCAoYXMgaXQgb3JpZ2luYWxseSB3YXMpLgoKV2FpdCBhIHNlY29uZOKApiB0aGUgY2hhbmdlIGZyb20gYC1FRkFVTFRgIHRvIGAtRU5PTUVNYCBmb3IgdGhlIGBwb3B1bGF0ZV90b19wbWRgIGZhaWx1cmUuIFRoYXQmIzM5O3MgdGhlIGtleS4gV2h5IHRoZSBjaGFuZ2U/IElzIHRoaXMgYSBzdGFuZGFyZGlzYXRpb24gaXNzdWUsIG9yIGlzIGl0IHJlbGF0ZWQgdG8gbWVtb3J5IGV4aGF1c3Rpb24/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoeSB0aGlzIHdhcyBjaGFuZ2VkLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgYXQgdGhlIG90aGVyIGNoYW5nZXMgaW4gdGhlIHBhdGNoIGFuZCBjb25zaWRlciBob3cgaXQgaW1wYWN0cyB0aGUgb3RoZXIgY29kZSB0aGF0IGNhbGxzIGBpbnNlcnRfcGFnZXNgLiBMZXQmIzM5O3Mgc2VlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgdXNlZCwgc28gSSYjMzk7bGwgZ3JhYiBgZ3JlcHBlcmAgYW5kIGdldCBhIGNhbGwgZ3JhcGguIEkmIzM5O2xsIG1ha2Ugc3VyZSB0byBub3RlIHRoaXMgY2hhbmdlIGluIHBhcnRpY3VsYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aW5zZXJ0X3BhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmM9MjQxMz1zdGF0aWMgaW50IGluc2VydF9wYWdlX2luX2JhdGNoX2xvY2tlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgcHRlX3QgKnB0ZSxcbi0tXG5tbS9tZW1vcnkuYy0yNDIzLVxubW0vbWVtb3J5LmM6MjQyNDovKiBpbnNlcnRfcGFnZXMoKSBhbW9ydGl6ZXMgdGhlIGNvc3Qgb2Ygc3BpbmxvY2sgb3BlcmF0aW9uc1xubW0vbWVtb3J5LmMtMjQyNS0gKiB3aGVuIGluc2VydGluZyBwYWdlcyBpbiBhIGxvb3AuXG5tbS9tZW1vcnkuYy0yNDI2LSAqL1xubW0vbWVtb3J5LmM6MjQyNzpzdGF0aWMgaW50IGluc2VydF9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vbWVtb3J5LmMtMjQyOC1cdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBsb25nICpudW0sIHBncHJvdF90IHByb3QpXG4tLVxubW0vbWVtb3J5LmMtMjQ4NS0vKipcbm1tL21lbW9yeS5jOjI0ODY6ICogdm1faW5zZXJ0X3BhZ2VzIC0gaW5zZXJ0IG11bHRpcGxlIHBhZ2VzIGludG8gdXNlciB2bWEsIGJhdGNoaW5nIHRoZSBwbWQgbG9jay5cbm1tL21lbW9yeS5jLTI0ODctICogQHZtYTogdXNlciB2bWEgdG8gbWFwIHRvXG4tLVxubW0vbWVtb3J5LmMtMjQ5OS0gKi9cbm1tL21lbW9yeS5jOjI1MDA6aW50IHZtX2luc2VydF9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vbWVtb3J5LmMtMjUwMS1cdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBsb25nICpudW0pXG4tLVxubW0vbWVtb3J5LmMtMjUxMy1cdC8qIERlZmVyIHBhZ2UgcmVmY291bnQgY2hlY2tpbmcgdGlsbCB3ZSYjMzk7cmUgYWJvdXQgdG8gbWFwIHRoYXQgcGFnZS4gKi9cbm1tL21lbW9yeS5jOjI1MTQ6XHRyZXR1cm4gaW5zZXJ0X3BhZ2VzKHZtYSwgYWRkciwgcGFnZXMsIG51bSwgdm1hLVx1MDAzZXZtX3BhZ2VfcHJvdCk7XG5tbS9tZW1vcnkuYy0yNTE1LX1cbm1tL21lbW9yeS5jOjI1MTY6RVhQT1JUX1NZTUJPTCh2bV9pbnNlcnRfcGFnZXMpO1xubW0vbWVtb3J5LmMtMjUxNy1cbi0tXG5tbS9tZW1vcnkuYz0yNTM5PWludCBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL21lbW9yeS5jLTI1NDQtXHRucl9wYWdlcyA9IGFjdGlvbi1cdTAwM2VtYXBfa2VybmVsLm5yX3BhZ2VzO1xubW0vbWVtb3J5LmM6MjU0NTpcdHJldHVybiBpbnNlcnRfcGFnZXModm1hLCBhY3Rpb24tXHUwMDNlbWFwX2tlcm5lbC5zdGFydCxcbm1tL21lbW9yeS5jLTI1NDYtXHRcdFx0ICAgIGFjdGlvbi1cdTAwM2VtYXBfa2VybmVsLnBhZ2VzLFxuLS1cbm1tL21lbW9yeS5jPTI2MDg9c3RhdGljIGludCBfX3ZtX21hcF9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgc3RydWN0IHBhZ2UgKipwYWdlcyxcbi0tXG5tbS9tZW1vcnkuYy0yNjIxLVxubW0vbWVtb3J5LmM6MjYyMjpcdHJldHVybiB2bV9pbnNlcnRfcGFnZXModm1hLCB1YWRkciwgcGFnZXMgJiM0Mzsgb2Zmc2V0LCBcdTAwMjZjb3VudCk7XG5tbS9tZW1vcnkuYy0yNjIzLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzozMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MTQ4CgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKlRyYWNpbmcgdGhlIFVzYWdlIG9mIGB2bV9pbnNlcnRfcGFnZXNgKioKCk9rYXksIHNvIGBpbnNlcnRfcGFnZXNgIGdldHMgY2FsbGVkIGJ5IGB2bV9pbnNlcnRfcGFnZXNgIGFuZCBgbWFwX2tlcm5lbF9wYWdlc19jb21wbGV0ZWAuIFRoYXQgc2VlbXMgc3RyYWlnaHRmb3J3YXJkLiBOb3csIHRoZSBpbnRlcmVzdGluZyB0aGluZyBoZXJlIGlzIHRoYXQgYHZtX2luc2VydF9wYWdlc2AgaXMgYWN0dWFsbHkgZXhwb3J0ZWQuIFRoaXMgaXMgYSBrZXkgZGV0YWlsLiBUaGF0IG1lYW5zIGl0JiMzOTtzIGF2YWlsYWJsZSB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCBwb3RlbnRpYWxseSBldmVuIG1vZHVsZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aGVyZSogdGhhdCBleHBvcnRlZCBmdW5jdGlvbiBpcyBiZWluZyB1c2VkLiBXaGVyZSBhcmUgdGhlIGNhbGwgc2l0ZXMgb2YgYHZtX2luc2VydF9wYWdlc2AgaXRzZWxmPyBUaGF0JiMzOTtzIHRoZSBjb3JlIHF1ZXN0aW9uIG5vdy4gTGV0JiMzOTtzIGRpZyBpbiBhbmQgZmluZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1faW5zZXJ0X3BhZ2VzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jPTQzOT1zdGF0aWMgaW50IGFtZHhkbmFfaW5zZXJ0X3BhZ2VzKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibyxcbi0tXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy00NTUtXHRcdHZtX2ZsYWdzX21vZCh2bWEsIFZNX01JWEVETUFQLCBWTV9QRk5NQVApO1xuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmM6NDU2Olx0XHRyZXQgPSB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIGFiby1cdTAwM2ViYXNlLnBhZ2VzLFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmMtNDU3LVx0XHRcdFx0ICAgICAgXHUwMDI2bnVtX3BhZ2VzKTtcbi0tXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYz01MjI9c3RhdGljIGludCBhbWR4ZG5hX2dlbV9kbWFidWZfbW1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Ziwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmMtNTM4LVx0dm1fZmxhZ3NfbW9kKHZtYSwgVk1fTUlYRURNQVAsIFZNX1BGTk1BUCk7XG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYzo1Mzk6XHRyZXQgPSB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIGFiby1cdTAwM2ViYXNlLnBhZ2VzLFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmMtNTQwLVx0XHRcdCAgICAgIFx1MDAyNm51bV9wYWdlcyk7XG4tLVxuaW5jbHVkZS9saW51eC9tbS5oPTQ1MzU9aW50IHZtX2luc2VydF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nIGFkZHIsIHN0cnVjdCBwYWdlICopO1xuaW5jbHVkZS9saW51eC9tbS5oOjQ1MzY6aW50IHZtX2luc2VydF9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuaW5jbHVkZS9saW51eC9tbS5oLTQ1MzctXHRcdFx0c3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgbG9uZyAqbnVtKTtcbi0tXG5pb191cmluZy9tZW1tYXAuYz0yODQ9c3RhdGljIGludCBpb19yZWdpb25fbW1hcChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbi0tXG5pb191cmluZy9tZW1tYXAuYy0yOTEtXHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EKTtcbmlvX3VyaW5nL21lbW1hcC5jOjI5MjpcdHJldHVybiB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIG1yLVx1MDAzZXBhZ2VzLCBcdTAwMjZucl9wYWdlcyk7XG5pb191cmluZy9tZW1tYXAuYy0yOTMtfVxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTc2MTM9c3RhdGljIGludCBfX3JiX21hcF92bWEoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsXG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzcwMS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc3MDI6XHRlcnIgPSB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIHBhZ2VzLCBcdTAwMjZucl9wYWdlcyk7XG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03NzAzLVxuLS1cbm1tL21lbW9yeS5jPTI0Mjc9c3RhdGljIGludCBpbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1vcnkuYy0yNDg1LS8qKlxubW0vbWVtb3J5LmM6MjQ4NjogKiB2bV9pbnNlcnRfcGFnZXMgLSBpbnNlcnQgbXVsdGlwbGUgcGFnZXMgaW50byB1c2VyIHZtYSwgYmF0Y2hpbmcgdGhlIHBtZCBsb2NrLlxubW0vbWVtb3J5LmMtMjQ4Ny0gKiBAdm1hOiB1c2VyIHZtYSB0byBtYXAgdG9cbi0tXG5tbS9tZW1vcnkuYy0yNDk5LSAqL1xubW0vbWVtb3J5LmM6MjUwMDppbnQgdm1faW5zZXJ0X3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG5tbS9tZW1vcnkuYy0yNTAxLVx0XHRcdHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGxvbmcgKm51bSlcbi0tXG5tbS9tZW1vcnkuYy0yNTE1LX1cbm1tL21lbW9yeS5jOjI1MTY6RVhQT1JUX1NZTUJPTCh2bV9pbnNlcnRfcGFnZXMpO1xubW0vbWVtb3J5LmMtMjUxNy1cbi0tXG5tbS9tZW1vcnkuYz0yNjA4PXN0YXRpYyBpbnQgX192bV9tYXBfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHN0cnVjdCBwYWdlICoqcGFnZXMsXG4tLVxubW0vbWVtb3J5LmMtMjYyMS1cbm1tL21lbW9yeS5jOjI2MjI6XHRyZXR1cm4gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgdWFkZHIsIHBhZ2VzICYjNDM7IG9mZnNldCwgXHUwMDI2Y291bnQpO1xubW0vbWVtb3J5LmMtMjYyMy19XG4tLVxubW0vbm9tbXUuYz0zNTA9RVhQT1JUX1NZTUJPTCh2bV9pbnNlcnRfcGFnZSk7XG5tbS9ub21tdS5jLTM1MS1cbm1tL25vbW11LmM6MzUyOmludCB2bV9pbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbm1tL25vbW11LmMtMzUzLVx0XHRcdHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGxvbmcgKm51bSlcbi0tXG5tbS9ub21tdS5jLTM1Ni19XG5tbS9ub21tdS5jOjM1NzpFWFBPUlRfU1lNQk9MKHZtX2luc2VydF9wYWdlcyk7XG5tbS9ub21tdS5jLTM1OC1cbi0tXG5uZXQvaXB2NC90Y3AuYz0yMDYyPXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaF9lcnJvcihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5uZXQvaXB2NC90Y3AuYy0yMDg4LVx0XHQvKiBXZSBjYWxsZWQgemFwX3ZtYV9yYW5nZSwgdHJ5IHRvIHJlaW5zZXJ0LiAqL1xubmV0L2lwdjQvdGNwLmM6MjA4OTpcdFx0ZXJyID0gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgKmFkZHJlc3MsXG5uZXQvaXB2NC90Y3AuYy0yMDkwLVx0XHRcdFx0ICAgICAgcGVuZGluZ19wYWdlcyxcbi0tXG5uZXQvaXB2NC90Y3AuYz0yMTEwPXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5uZXQvaXB2NC90Y3AuYy0yMTIzLVxubmV0L2lwdjQvdGNwLmM6MjEyNDpcdGVyciA9IHZtX2luc2VydF9wYWdlcyh2bWEsICphZGRyZXNzLCBwYWdlcywgXHUwMDI2cGFnZXNfcmVtYWluaW5nKTtcbm5ldC9pcHY0L3RjcC5jLTIxMjUtXHRwYWdlc19tYXBwZWQgPSBwYWdlc190b19tYXAgLSAodW5zaWduZWQgaW50KXBhZ2VzX3JlbWFpbmluZztcbm5ldC9pcHY0L3RjcC5jLTIxMjYtXHRieXRlc19tYXBwZWQgPSBQQUdFX1NJWkUgKiBwYWdlc19tYXBwZWQ7XG5uZXQvaXB2NC90Y3AuYzoyMTI3Olx0LyogRXZlbiBpZiB2bV9pbnNlcnRfcGFnZXMgZmFpbHMsIGl0IG1heSBoYXZlIHBhcnRpYWxseSBzdWNjZWVkZWQgaW5cbm5ldC9pcHY0L3RjcC5jLTIxMjgtXHQgKiBtYXBwaW5nIChzb21lIGJ1dCBub3QgYWxsIG9mIHRoZSBwYWdlcykuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg3MgoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDk0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIGB2bV9pbnNlcnRfcGFnZXNgIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdG91Y2hlcyBgdm1faW5zZXJ0X3BhZ2VzYCwgYSBmdW5jdGlvbiB0aGF0JiMzOTtzIHVzZWQgaW4gc2V2ZXJhbCBrZXkgYXJlYXMg4oCTIGBpb191cmluZy9tZW1tYXAuY2AsIHRyYWNpbmcsIFRDUCB6ZXJvLWNvcHksIGFuZCBldmVuIEFNRCBHUFUgZHJpdmVycy4gVGhlIHBhdGNoIGZvY3VzZXMgb24gaG93IGBpbnNlcnRfcGFnZXNgIGhhbmRsZXMgZXJyb3JzLCBzcGVjaWZpY2FsbHkgd2hlbiBhbGxvY2F0aW5nIHBhZ2UgdGFibGUgZW50cmllcyAoUFRFcykuCgpJbml0aWFsbHksIHRoZSBmdW5jdGlvbiBzZWVtcyB0byBoYXZlIGEgYml0IG9mIGEgY29udm9sdXRlZCBlcnJvciBoYW5kbGluZyBzdHJhdGVneS4gVGhlIG9yaWdpbmFsIGNvZGUgc2V0cyBgcmV0YCB0byBgLUVOT01FTWAsIHRoZW4gY2hlY2tzIGlmIGBwdGVfYWxsb2NgIHN1Y2NlZWRzLiBJZiBub3QsIGl0IGp1bXBzIHRvIGBvdXRgLiBIb3dldmVyLCBpZiBgcHRlX29mZnNldF9tYXBfbG9ja2AgKmFsc28qIGZhaWxzIGxhdGVyLCBpdCBjaGFuZ2VzIGByZXRgIHRvIGAtRUZBVUxUYC4gVGhlIHBhdGNoIHNlZW1zIHRvIGJlIHN0cmVhbWxpbmluZyB0aGlzLCBtb3ZpbmcgdGhlIGVycm9yIGNoZWNrIGZvciBgcHRlX2FsbG9jYCBpbmxpbmUgd2l0aCB0aGUgYWxsb2NhdGlvbiBpdHNlbGYgYW5kIGFzc2lnbmluZyB0aGUgZXJyb3IgY29kZSB0byBgZXJyYC4gVGhpcyBzZWVtcyBtb3JlIHN0cmFpZ2h0Zm9yd2FyZC4KCkhlcmUsIGluIHRoZSByZXZpc2VkIGNvZGUsIGBlcnJgIGlzIGluaXRpYWxpemVkIHRvIDAuIEluc2lkZSB0aGUgYHdoaWxlYCBsb29wLCBpZiBgaW5zZXJ0X3BhZ2VfaW5fYmF0Y2hfbG9ja2VkYCByZXR1cm5zIGFuIGVycm9yLCBpdCBpcyBzdG9yZWQgaW4gYGVycmAuCgpJIHRoZW4gc2VlIHRoYXQsIGluIHRoZSBvcmlnaW5hbCBjb2RlLCBgcmV0YCB3YXMgc2V0IHRvIGAtRUZBVUxUYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBgbW9yZTpgIGxhYmVsLiBIb3dldmVyLCBub3cgYGVycmAgaXMgaW5pdGlhbGl6ZWQgdG8gMC4gSW5zdGVhZCBvZiBgd2Fsa190b19wbWRgLCB0aGUgcGF0Y2hlZCBjb2RlIHVzZXMgYHBvcHVsYXRlX3RvX3BtZGAsIGFuZCwgaWYgYHBvcHVsYXRlX3RvX3BtZGAgZmFpbHMsIGAtRU5PTUVNYCBpcyBhc3NpZ25lZCB0byBgZXJyYC4KCkhvbGQgb24gYSBzZWMsIHdoYXQmIzM5O3MgdGhpcyBgcG9wdWxhdGVfdG9fcG1kYD8gSXQgbG9va3MgbGlrZSBhIHNpbXBsZSByZW5hbWUgb2YgYHdhbGtfdG9fcG1kYC4gTm93LCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgaXQmIzM5O3MgYSBzaW1wbGUgcmVuYW1lLiBMZXQmIzM5O3MgZ28gbG9vayBhdCBgbW0vbWVtb3J5LmNgIGFyb3VuZCBsaW5lIDIyNjggdG8gY29uZmlybS4gSXQgbWlnaHQgbG9vayBsaWtlIGp1c3QgYSBuYW1lIGNoYW5nZSwgYnV0IGl0JiMzOTtzIGltcG9ydGFudCB0byBtYWtlIHN1cmUgaXQgZnVuY3Rpb25zIGFzIHRoZSBvbGQgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1vcnkuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyNjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI2ODpcdH1cbjIyNjk6XHRFWFBPUlRfU1lNQk9MX0dQTCh6YXBfc3BlY2lhbF92bWFfcmFuZ2UpO1xuMjI3MDpcdFxuMjI3MTpcdHN0YXRpYyBwbWRfdCAqcG9wdWxhdGVfdG9fcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4yMjcyOlx0e1xuMjI3MzpcdFx0cGdkX3QgKnBnZDtcbjIyNzQ6XHRcdHA0ZF90ICpwNGQ7XG4yMjc1Olx0XHRwdWRfdCAqcHVkO1xuMjI3NjpcdFx0cG1kX3QgKnBtZDtcbjIyNzc6XHRcbjIyNzg6XHRcdHBnZCA9IHBnZF9vZmZzZXQobW0sIGFkZHIpO1xuMjI3OTpcdFx0cDRkID0gcDRkX2FsbG9jKG1tLCBwZ2QsIGFkZHIpO1xuMjI4MDpcdFx0aWYgKCFwNGQpXG4yMjgxOlx0XHRcdHJldHVybiBOVUxMO1xuMjI4MjpcdFx0cHVkID0gcHVkX2FsbG9jKG1tLCBwNGQsIGFkZHIpO1xuMjI4MzpcdFx0aWYgKCFwdWQpXG4yMjg0Olx0XHRcdHJldHVybiBOVUxMO1xuMjI4NTpcdFx0cG1kID0gcG1kX2FsbG9jKG1tLCBwdWQsIGFkZHIpO1xuMjI4NjpcdFx0aWYgKCFwbWQpXG4yMjg3Olx0XHRcdHJldHVybiBOVUxMO1xuMjI4ODpcdFxuMjI4OTpcdFx0Vk1fQlVHX09OKHBtZF90cmFuc19odWdlKCpwbWQpKTtcbjIyOTA6XHRcdHJldHVybiBwbWQ7XG4yMjkxOlx0fVxuMjI5MjpcdFxuMjI5MzpcdHB0ZV90ICpnZXRfbG9ja2VkX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuMjI5NDpcdFx0XHQgICAgICBzcGlubG9ja190ICoqcHRsKVxuMjI5NTpcdHtcbjIyOTY6XHRcdHBtZF90ICpwbWQgPSBwb3B1bGF0ZV90b19wbWQobW0sIGFkZHIpO1xuMjI5NzpcdFxuMjI5ODpcdFx0aWYgKCFwbWQpXG4yMjk5Olx0XHRcdHJldHVybiBOVUxMO1xuMjMwMDpcdFx0cmV0dXJuIHB0ZV9hbGxvY19tYXBfbG9jayhtbSwgcG1kLCBhZGRyLCBwdGwpO1xuMjMwMTpcdH1cbjIzMDI6XHRcbjIzMDM6XHRzdGF0aWMgYm9vbCB2bV9taXhlZF96ZXJvcGFnZV9hbGxvd2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuMjMwNDpcdHtcbjIzMDU6XHRcdFZNX1dBUk5fT05fT05DRSh2bWEtXHUwMDNldm1fZmxhZ3MgXHUwMDI2IFZNX1BGTk1BUCk7XG4yMzA2Olx0XHQvKlxuMjMwNzpcdFx0ICogV2hvZXZlciB3YW50cyB0byBmb3JiaWQgdGhlIHplcm9wYWdlIGFmdGVyIHNvbWUgemVyb3BhZ2VzXG4yMzA4Olx0XHQgKiBtaWdodCBhbHJlYWR5IGhhdmUgYmVlbiBtYXBwZWQgaGFzIHRvIHNjYW4gdGhlIHBhZ2UgdGFibGVzIGFuZFxuMjMwOTpcdFx0ICogYmFpbCBvdXQgb24gYW55IHplcm9wYWdlcy4gWmVyb3BhZ2VzIGluIENPVyBtYXBwaW5ncyBjYW5cbjIzMTA6XHRcdCAqIGJlIHVuc2hhcmVkIHVzaW5nIEZBVUxUX0ZMQUdfVU5TSEFSRSBmYXVsdHMuXG4yMzExOlx0XHQgKi9cbjIzMTI6XHRcdGlmIChtbV9mb3JiaWRzX3plcm9wYWdlKHZtYS1cdTAwM2V2bV9tbSkpXG4yMzEzOlx0XHRcdHJldHVybiBmYWxzZTtcbjIzMTQ6XHRcdC8qIHplcm9wYWdlcyBpbiBDT1cgbWFwcGluZ3MgYXJlIGNvbW1vbiBhbmQgdW5wcm9ibGVtYXRpYy4gKi9cbjIzMTU6XHRcdGlmIChpc19jb3dfbWFwcGluZyh2bWEtXHUwMDNldm1fZmxhZ3MpKVxuMjMxNjpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjIzMTc6XHRcdC8qIE1hcHBpbmdzIHRoYXQgZG8gbm90IGFsbG93IGZvciB3cml0YWJsZSBQVEVzIGFyZSB1bnByb2JsZW1hdGljLiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwODEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYWdlIFRhYmxlIFBvcHVsYXRpb24gTG9naWMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYHBvcHVsYXRlX3RvX3BtZGAgZnVuY3Rpb24uIFRoZSBjb2RlJiMzOTtzIGFsbG9jYXRpbmcgcGFnZSB0YWJsZSBlbnRyaWVzIOKAkyBQR0QsIFA0RCwgUFVELCBhbmQgUE1ELiBJdCYjMzk7cyBjbGVhcmx5ICpwb3B1bGF0aW5nKiB0aGUgcGFnZSB0YWJsZXMsIG5vdCBqdXN0IHRyYXZlcnNpbmcgdGhlbS4gVGhlIHJlbmFtZSBpcyBzcG90IG9uOyBpdCByZWZsZWN0cyB3aGF0JiMzOTtzIGFjdHVhbGx5IGhhcHBlbmluZy4gIEFuZCBzaW5jZSB3ZSYjMzk7cmUgYWxsb2NhdGluZyBtZW1vcnksIGlmIGFueSBvZiB0aGVzZSBhbGxvY2F0aW9ucyBmYWlsLCBpdCYjMzk7cyBhbiBPdXQtT2YtTWVtb3J5IChPT00pIHNpdHVhdGlvbi4gUmV0dXJuaW5nIGAtRU5PTUVNYCBpbnN0ZWFkIG9mIGAtRUZBVUxUYCBtYWtlcyBwZXJmZWN0IHNlbnNlIGluIHRoaXMgY29udGV4dCDigJMgbXVjaCBtb3JlIGFjY3VyYXRlIGVycm9yIHJlcG9ydGluZy4KClRoaXMgbWVhbnMgdGhlcmUmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgcmV0dXJuIHZhbHVlIG9mIGBpbnNlcnRfcGFnZXNgLiBgaW5zZXJ0X3BhZ2VzYCBpcyBjYWxsZWQgZnJvbSBgdm1faW5zZXJ0X3BhZ2VzYCBhbmQgYG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGVgLiAgSW50ZXJlc3RpbmcuIExldCBtZSBjaGVjayB0aGUgY2FsbGVycyBvZiBpbnNlcnRfcGFnZXMgdG8gc2VlIHdoYXQgbWlnaHQgYmUgcmVhY2hhYmxlLiBgdm1faW5zZXJ0X3BhZ2VzYCBpcyB1c2VkIGluIGBpb191cmluZy9tZW1tYXAuY2AsIGBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY2AsIGFuZCBgbmV0L2lwdjQvdGNwLmNgLiBPa2F5LCBzbyB0aGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGNvZGUuIEdpdmVuIHRoZSBwb3RlbnRpYWwgZm9yIE9PTSBzaXR1YXRpb25zLCBmdXp6aW5nIHRoZXNlIGNhbGwgc2l0ZXMgc291bmRzIGxpa2UgYSB2ZXJ5IGdvb2QgaWRlYS4gCgpMZXQmIzM5O3MgZm9jdXMgb24gYGlvX3VyaW5nL21lbW1hcC5jYCBhbmQgYG5ldC9pcHY0L3RjcC5jYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGNhbGwgc2l0ZXMgY2FuIGJlIHRyaWdnZXJlZC4gYGlvX3JlZ2lvbl9tbWFwYCBpbiBgaW9fdXJpbmcvbWVtbWFwLmNgIGlzIHJlYWNoYWJsZSB2aWEgYG1tYXBgIG9uIGFuIGBpb191cmluZ2AgZmlsZSBkZXNjcmlwdG9yLCBhbmQgYHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2hgIGluIGBuZXQvaXB2NC90Y3AuY2AgaXMgdHJpZ2dlcmVkIGJ5IFRDUCB6ZXJvLWNvcHkgcmVjZWl2ZSBvcGVyYXRpb25zLgoKQWxyaWdodCwgbGV0JiMzOTtzIHN0YXJ0IHdpdGggYGlvX3VyaW5nL21lbW1hcC5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBpb19yZWdpb25fbW1hcGAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lvX3JlZ2lvbl9tbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL21lbW1hcC5jPTI3MT1zdGF0aWMgdm9pZCAqaW9fdXJpbmdfdmFsaWRhdGVfbW1hcF9yZXF1ZXN0KHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3QgcGdvZmYpXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmMtMjgzLVxuaW9fdXJpbmcvbWVtbWFwLmM6Mjg0OnN0YXRpYyBpbnQgaW9fcmVnaW9uX21tYXAoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXG5pb191cmluZy9tZW1tYXAuYy0yODUtXHRcdFx0ICBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmM9Mjk1PV9fY29sZCBpbnQgaW9fdXJpbmdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmMtMzE3LVx0cmVnaW9uID0gaW9fbW1hcF9nZXRfcmVnaW9uKGN0eCwgdm1hLVx1MDAzZXZtX3Bnb2ZmKTtcbmlvX3VyaW5nL21lbW1hcC5jOjMxODpcdHJldHVybiBpb19yZWdpb25fbW1hcChjdHgsIHJlZ2lvbiwgdm1hLCBwYWdlX2xpbWl0KTtcbmlvX3VyaW5nL21lbW1hcC5jLTMxOS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxODAKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiA2MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSW52ZXN0aWdhdGluZyB0aGUgYGlvX3VyaW5nX21tYXBgIFBhdGgqKgoKUmlnaHQsIHNvIGBpb191cmluZ19tbWFwYCBpcyBjYWxsaW5nIGBpb19yZWdpb25fbW1hcGAsIHdoaWNoLCBpbiB0dXJuLCBpcyBjYWxsaW5nIGB2bV9pbnNlcnRfcGFnZXNgLiBUaGF0JiMzOTtzIGEgcHJldHR5IGxvdy1sZXZlbCBmdW5jdGlvbiBjYWxsIHNlcXVlbmNlLiBHaXZlbiBob3cgZnVuZGFtZW50YWwgYHZtX2luc2VydF9wYWdlc2AgaXMsIGFuZCBjb25zaWRlcmluZyBob3cgb2Z0ZW4gSSYjMzk7dmUgc2VlbiBpdCB1c2VkIGluIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHRzLCBpdCYjMzk7cyBzYWZlIHRvIGFzc3VtZSB0aGlzIGBpb191cmluZ19tbWFwYCBwYXRoIGlzICpoaWdobHkqIHJlYWNoYWJsZS4gQSB2ZXJ5IGltcG9ydGFudCBjb21wb25lbnQgb2YgdGhlIHN5c3RlbS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXQgYmV0dGVyLgoKTm93LCB3aGVyZSBlbHNlIG1pZ2h0IHRoaXMgdGVjaG5pcXVlLCBvciBzb21ldGhpbmcgc2ltaWxhciwgYmUgZW1wbG95ZWQ/IFBlcmhhcHMgdGhlcmUgYXJlIG90aGVyIGludGVyZXN0aW5nIHBsYWNlcyB0byBsb29rIGZvciBhIHNpbWlsYXIgcGF0dGVybi4gU3BlY2lmaWNhbGx5LCBJIHJlY2FsbCB0aGUgemVyby1jb3B5IG9wZXJhdGlvbnMgb24gVENQIHNvY2tldHMuIExldCBtZSBjaGVjayB0aGUgY29kZSBmb3IgYHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2hgIGluIGBuZXQvaXB2NC90Y3AuY2AuIEl0JiMzOTtzIHBvc3NpYmxlIHRoZXJlIGlzIHNvbWUgY29tbW9uYWxpdHksIG9yIHBlcmhhcHMgSSBjYW4gc2VlIGhvdyB0aGV5IGFyZSBkaWZmZXJlbnQgaW4gdGhlaXIgcmVzcGVjdGl2ZSB1c2UgY2FzZXMuIEkmIzM5O2xsIHNlZSB3aGF0IEkgY2FuIGxlYXJuIGFib3V0IHRoZWlyIHJlbGF0aW9uIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGluIGdlbmVyYWwsIGFuZCBwb3RlbnRpYWxseSBsb29rIGZvciB3YXlzIHRvIG9wdGltaXplIHRoZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0yMDM1PXN0YXRpYyBpbnQgdGNwX3pjX2hhbmRsZV9sZWZ0b3ZlcihzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTIwNjEtXG5uZXQvaXB2NC90Y3AuYzoyMDYyOnN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaF9lcnJvcihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm5ldC9pcHY0L3RjcC5jLTIwNjMtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBwYWdlICoqcGVuZGluZ19wYWdlcyxcbi0tXG5uZXQvaXB2NC90Y3AuYy0yMTA5LVxubmV0L2lwdjQvdGNwLmM6MjExMDpzdGF0aWMgaW50IHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5uZXQvaXB2NC90Y3AuYy0yMTExLVx0XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTIxMzYtXHQvKiBFcnJvcjogbWF5YmUgemFwIGFuZCByZXRyeSAmIzQzOyByb2xsYmFjayBzdGF0ZSBmb3IgZmFpbGVkIGluc2VydHMuICovXG5uZXQvaXB2NC90Y3AuYzoyMTM3Olx0cmV0dXJuIHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2hfZXJyb3Iodm1hLCBwYWdlcyAmIzQzOyBwYWdlc19tYXBwZWQsXG5uZXQvaXB2NC90Y3AuYy0yMTM4LVx0XHRwYWdlc19yZW1haW5pbmcsIGFkZHJlc3MsIGxlbmd0aCwgc2VxLCB6YywgdG90YWxfYnl0ZXNfdG9fbWFwLFxuLS1cbm5ldC9pcHY0L3RjcC5jPTIxOTU9c3RhdGljIGludCB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwLmMtMjMwMS1cdFx0XHQgKi9cbm5ldC9pcHY0L3RjcC5jOjIzMDI6XHRcdFx0cmV0ID0gdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaCh2bWEsIHBhZ2VzLFxubmV0L2lwdjQvdGNwLmMtMjMwMy1cdFx0XHRcdFx0XHRcdCAgIHBhZ2VzX3RvX21hcCxcbi0tXG5uZXQvaXB2NC90Y3AuYy0yMzEyLVx0aWYgKHBhZ2VzX3RvX21hcCkge1xubmV0L2lwdjQvdGNwLmM6MjMxMzpcdFx0cmV0ID0gdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaCh2bWEsIHBhZ2VzLCBwYWdlc190b19tYXAsXG5uZXQvaXB2NC90Y3AuYy0yMzE0LVx0XHRcdFx0XHRcdCAgIFx1MDAyNmFkZHJlc3MsIFx1MDAyNmxlbmd0aCwgXHUwMDI2c2VxLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDA2MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBaZXJvLUNvcHkgVENQIFJlY2VpdmUqKgoKT2theSwgc28gYHRjcF96ZXJvY29weV9yZWNlaXZlYCBpcyBleHBvc2VkIHRocm91Z2ggYGdldHNvY2tvcHQoVENQX1pFUk9DT1BZX1JFQ0VJVkUpYC4gVGhhdCYjMzk7cyB3aGVyZSB3ZSBzdGFydC4gVGhpcyBwYXRjaCBjaGFuZ2VzIGhvdyBgdm1faW5zZXJ0X3BhZ2VzYCBiZWhhdmVzIG9uIG1lbW9yeSBhbGxvY2F0aW9uIGZhaWx1cmUsIHJldHVybmluZyBgLUVOT01FTWAgaW5zdGVhZCBvZiBgLUVGQVVMVGAuIFRoYXQmIzM5O3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc28gaXQmIzM5O3MgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuCgpNeSBwcmltYXJ5IGZvY3VzIG5lZWRzIHRvIGJlIG9uIHRoZXNlIGZ1bmN0aW9uczogYHZtX2luc2VydF9wYWdlc2AsIGBpb191cmluZ19tbWFwYCwgYW5kIG9mIGNvdXJzZSwgYHRjcF96ZXJvY29weV9yZWNlaXZlYCBpdHNlbGYuIFdhaXQgYSBtaW51dGUuLi4gYHZtX2luc2VydF9wYWdlc2AgaXMgZXhwb3J0ZWQ/IFRoYXQgbWFrZXMgaXQgYW4gZXZlbiBiZXR0ZXIgdGFyZ2V0ISBBbmQgaXQgbG9va3MgbGlrZSBgaW5zZXJ0X3BhZ2VzYCBpcyB0aGUgc3RhdGljIHZhcmlhbnQsIHdoaWNoIGlzIHRoZSBvbmUgYmVpbmcgZGlyZWN0bHkgbW9kaWZpZWQuIFBlcmZlY3QuIExldCYjMzk7cyBhZGQgYWxsIHRocmVlIHRvIHRoZSBmdXp6aW5nIHRhcmdldCBsaXN0LgoKTm93LCBsZXQgbWUgZG91YmxlLWNoZWNrIGZvciBhbnkgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMuIGBpb191cmluZ2AgcmVxdWlyZXMgYENPTkZJR19JT19VUklOR2AsIG9idmlvdXNseS4gYHRjcF96ZXJvY29weV9yZWNlaXZlYCBuZWVkcyBgQ09ORklHX0lORVRgLCB3aGljaCBpcyBwcmV0dHkgc3RhbmRhcmQsIHNvIHdlJiMzOTtyZSBnb29kIHRoZXJlLiBBbmQgYHZtX2luc2VydF9wYWdlc2AgaXMgaW4gYG1tL21lbW9yeS5jYCwgd2hpY2ggaXMgYWx3YXlzIGNvbXBpbGVkIGluLCBzbyB0aGF0JiMzOTtzIGVhc3kuIFNvLCBlbmFibGluZyBgSU9fVVJJTkdgIHNlZW1zIGxpa2UgdGhlIHNtYXJ0IG1vdmUgaGVyZS4KCkFscmlnaHQsIGxldCYjMzk7cyB0YWtlIGEgbG9vayBhdCBgaW9fdXJpbmdfbW1hcGAgaW4gYGlvX3VyaW5nL21lbW1hcC5jYCBhbmQgYmVnaW4gY3JhZnRpbmcgc29tZSB0ZXN0IGNhc2VzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtpb191cmluZ19tbWFwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7aW9fdXJpbmcvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2lvX3VyaW5nL2lvX3VyaW5nLmM9MjcwOD1zdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBpb191cmluZ19mb3BzID0ge1xuaW9fdXJpbmcvaW9fdXJpbmcuYy0yNzA5LVx0LnJlbGVhc2VcdD0gaW9fdXJpbmdfcmVsZWFzZSxcbmlvX3VyaW5nL2lvX3VyaW5nLmM6MjcxMDpcdC5tbWFwXHRcdD0gaW9fdXJpbmdfbW1hcCxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjcxMS1cdC5nZXRfdW5tYXBwZWRfYXJlYSA9IGlvX3VyaW5nX2dldF91bm1hcHBlZF9hcmVhLFxuLS1cbmlvX3VyaW5nL21lbW1hcC5jPTI4ND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9tbWFwKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTI5NC1cbmlvX3VyaW5nL21lbW1hcC5jOjI5NTpfX2NvbGQgaW50IGlvX3VyaW5nX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuaW9fdXJpbmcvbWVtbWFwLmMtMjk2LXtcbi0tXG5pb191cmluZy9tZW1tYXAuYz0zMjE9dW5zaWduZWQgbG9uZyBpb191cmluZ19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTM3MC0gKiBEcm9wIHRoZSBwYWdlcyB0aGF0IHdlcmUgaW5pdGlhbGx5IHJlZmVyZW5jZWQgYW5kIGFkZGVkIGluXG5pb191cmluZy9tZW1tYXAuYzozNzE6ICogaW9fdXJpbmdfbW1hcCgpLiBXZSBjYW5ub3QgaGF2ZSBoYWQgYSBtcmVtYXAoKSBhcyB0aGF0IGlzbiYjMzk7dCBzdXBwb3J0ZWQsXG5pb191cmluZy9tZW1tYXAuYy0zNzItICogaGVuY2UgdGhlIHZtYSBzaG91bGQgYmUgaWRlbnRpY2FsIHRvIHRoZSBvbmUgd2UgaW5pdGlhbGx5IHJlZmVyZW5jZWQgYW5kXG4tLVxuaW9fdXJpbmcvbWVtbWFwLmM9Mzg0PXN0YXRpYyBjb25zdCBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgaW9fdXJpbmdfbm9tbXVfdm1fb3BzID0ge1xuLS1cbmlvX3VyaW5nL21lbW1hcC5jLTM4Ny1cbmlvX3VyaW5nL21lbW1hcC5jOjM4ODppbnQgaW9fdXJpbmdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5pb191cmluZy9tZW1tYXAuYy0zODkte1xuLS1cbmlvX3VyaW5nL21lbW1hcC5oPTE1PXVuc2lnbmVkIGxvbmcgaW9fdXJpbmdfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbGUsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5pb191cmluZy9tZW1tYXAuaC0xNy1cdFx0XHRcdFx0IHVuc2lnbmVkIGxvbmcgZmxhZ3MpO1xuaW9fdXJpbmcvbWVtbWFwLmg6MTg6aW50IGlvX3VyaW5nX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTtcbmlvX3VyaW5nL21lbW1hcC5oLTE5LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTI3NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKklPX1VSSU5HIGFuZCBaZXJvLUNvcHkgUmVjZXB0aW9uKioKCkFscmlnaHQsIHllcCwgY29uZmlybWVkOiBgaW9fdXJpbmdfbW1hcGAgaXMgKnRoZSogbW1hcCBoYW5kbGVyIGltcGxlbWVudGF0aW9uIHNwZWNpZmljYWxseSBmb3IgaW9fdXJpbmcuIFRoYXQmIzM5O3MgYSBnaXZlbi4gTm93LCBsZXQmIzM5O3MgcGl2b3QgYW5kIGRpZyBpbnRvIGB0Y3BfemVyb2NvcHlfcmVjZWl2ZWAuIFRoZSBpbXBsaWNhdGlvbiBoZXJlIGlzIHplcm8tY29weSBpbiB0aGUgVENQIHJlY2VpdmUgY29udGV4dC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgZXhhY3RseSBob3cgdGhlIGBpb191cmluZ19tbWFwYCBoYW5kbGVyIGZpdHMgaW50byB0aGF0IHBpY3R1cmU7IHRoZSBtZW1vcnktbWFwcGVkIHJlZ2lvbnMgaW4gcGxheSBhbmQgdGhlIGRhdGEgbW92ZW1lbnQsIG9yIGxhY2sgdGhlcmVvZiwgYXJlIHRoZSBrZXkgYXNwZWN0cyBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24uIFdlJiMzOTtsbCBiZSBsb29raW5nIGF0IGhvdyB3ZSYjMzk7cmUgbWFwcGluZyB0aGUgYnVmZmVycywgcGFzc2luZyB0aGVtIHRvIHRoZSBrZXJuZWwgYW5kIGhvdyB0aGUgZGF0YSBpcyByZWFkIGludG8gbWVtb3J5LiBUaGlzIGlzIHdoZXJlIHRoZSBtYWdpYyBoYXBwZW5zLCBvciBkb2VzbiYjMzk7dCwgZGVwZW5kaW5nIG9uIGhvdyBpdCBpcyBpbXBsZW1lbnRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dGNwX3plcm9jb3B5X3JlY2VpdmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0xOTM1PXN0YXRpYyB2b2lkIHRjcF96ZXJvY29weV9zZXRfaGludF9mb3Jfc2tiKHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcC5jOjE5MzY6XHRcdFx0XHRcdCAgc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6Yyxcbm5ldC9pcHY0L3RjcC5jLTE5MzctXHRcdFx0XHRcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZnNldClcbi0tXG5uZXQvaXB2NC90Y3AuYz0xOTc1PXN0YXRpYyBpbnQgcmVjZWl2ZV9mYWxsYmFja190b19jb3B5KHN0cnVjdCBzb2NrICpzayxcbm5ldC9pcHY0L3RjcC5jOjE5NzY6XHRcdFx0XHQgICAgc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YywgaW50IGlucSxcbm5ldC9pcHY0L3RjcC5jLTE5NzctXHRcdFx0XHQgICAgc3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgKnRzcylcbi0tXG5uZXQvaXB2NC90Y3AuYy0yMDEwLVxubmV0L2lwdjQvdGNwLmM6MjAxMTpzdGF0aWMgaW50IHRjcF9jb3B5X3N0cmFnZ2xlcl9kYXRhKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsXG5uZXQvaXB2NC90Y3AuYy0yMDEyLVx0XHRcdFx0ICAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIGNvcHlsZW4sXG4tLVxubmV0L2lwdjQvdGNwLmMtMjAzNC1cbm5ldC9pcHY0L3RjcC5jOjIwMzU6c3RhdGljIGludCB0Y3BfemNfaGFuZGxlX2xlZnRvdmVyKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsXG5uZXQvaXB2NC90Y3AuYy0yMDM2LVx0XHRcdFx0ICBzdHJ1Y3Qgc29jayAqc2ssXG4tLVxubmV0L2lwdjQvdGNwLmM9MjA2Mj1zdGF0aWMgaW50IHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2hfZXJyb3Ioc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubmV0L2lwdjQvdGNwLmMtMjA2Ny1cdFx0XHRcdFx0ICAgICAgdTMyICpzZXEsXG5uZXQvaXB2NC90Y3AuYzoyMDY4Olx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLFxubmV0L2lwdjQvdGNwLmMtMjA2OS1cdFx0XHRcdFx0ICAgICAgdTMyIHRvdGFsX2J5dGVzX3RvX21hcCxcbi0tXG5uZXQvaXB2NC90Y3AuYz0yMTEwPXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5uZXQvaXB2NC90Y3AuYy0yMTE1LVx0XHRcdFx0XHR1MzIgKnNlcSxcbm5ldC9pcHY0L3RjcC5jOjIxMTY6XHRcdFx0XHRcdHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsXG5uZXQvaXB2NC90Y3AuYy0yMTE3LVx0XHRcdFx0XHR1MzIgdG90YWxfYnl0ZXNfdG9fbWFwKVxuLS1cbm5ldC9pcHY0L3RjcC5jPTIxNDM9c3RhdGljIHZvaWQgdGNwX3pjX2ZpbmFsaXplX3J4X3RzdGFtcChzdHJ1Y3Qgc29jayAqc2ssXG5uZXQvaXB2NC90Y3AuYzoyMTQ0Olx0XHRcdFx0ICAgICAgc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6Yyxcbm5ldC9pcHY0L3RjcC5jLTIxNDUtXHRcdFx0XHQgICAgICBzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZ19pbnRlcm5hbCAqdHNzKVxuLS1cbm5ldC9pcHY0L3RjcC5jPTIxNjk9c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF90Y3Bfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTIxOTQtI2RlZmluZSBUQ1BfWkVST0NPUFlfUEFHRV9CQVRDSF9TSVpFIDMyXG5uZXQvaXB2NC90Y3AuYzoyMTk1OnN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxubmV0L2lwdjQvdGNwLmM6MjE5NjpcdFx0XHRcdHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsXG5uZXQvaXB2NC90Y3AuYy0yMTk3LVx0XHRcdFx0c3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgKnRzcylcbi0tXG5uZXQvaXB2NC90Y3AuYz00NDgxPWludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcbi0tXG5uZXQvaXB2NC90Y3AuYy00NzQzLVx0XHRzdHJ1Y3Qgc2NtX3RpbWVzdGFtcGluZ19pbnRlcm5hbCB0c3M7XG5uZXQvaXB2NC90Y3AuYzo0NzQ0Olx0XHRzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgemMgPSB7fTtcbm5ldC9pcHY0L3RjcC5jLTQ3NDUtXHRcdGludCBlcnI7XG4tLVxubmV0L2lwdjQvdGNwLmMtNDc0OS1cdFx0aWYgKGxlbiBcdTAwM2MgMCB8fFxubmV0L2lwdjQvdGNwLmM6NDc1MDpcdFx0ICAgIGxlbiBcdTAwM2Mgb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBsZW5ndGgpKVxubmV0L2lwdjQvdGNwLmMtNDc1MS1cdFx0XHRyZXR1cm4gLUVJTlZBTDtcbi0tXG5uZXQvaXB2NC90Y3AuYy00NzY3LVx0XHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XG5uZXQvaXB2NC90Y3AuYzo0NzY4Olx0XHRlcnIgPSB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzaywgXHUwMDI2emMsIFx1MDAyNnRzcyk7XG5uZXQvaXB2NC90Y3AuYy00NzY5LVx0XHRlcnIgPSBCUEZfQ0dST1VQX1JVTl9QUk9HX0dFVFNPQ0tPUFRfS0VSTihzaywgbGV2ZWwsIG9wdG5hbWUsXG4tLVxubmV0L2lwdjQvdGNwLmMtNDc3MS1cdFx0c29ja29wdF9yZWxlYXNlX3NvY2soc2spO1xubmV0L2lwdjQvdGNwLmM6NDc3MjpcdFx0aWYgKGxlbiBcdTAwM2U9IG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgbXNnX2ZsYWdzKSlcbm5ldC9pcHY0L3RjcC5jLTQ3NzMtXHRcdFx0Z290byB6ZXJvY29weV9yY3ZfY21zZztcbm5ldC9pcHY0L3RjcC5jLTQ3NzQtXHRcdHN3aXRjaCAobGVuKSB7XG5uZXQvaXB2NC90Y3AuYzo0Nzc1Olx0XHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgbXNnX2ZsYWdzKTpcbm5ldC9pcHY0L3RjcC5jLTQ3NzYtXHRcdFx0Z290byB6ZXJvY29weV9yY3ZfY21zZztcbm5ldC9pcHY0L3RjcC5jOjQ3Nzc6XHRcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBtc2dfY29udHJvbGxlbik6XG5uZXQvaXB2NC90Y3AuYzo0Nzc4Olx0XHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgbXNnX2NvbnRyb2wpOlxubmV0L2lwdjQvdGNwLmM6NDc3OTpcdFx0Y2FzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIGZsYWdzKTpcbm5ldC9pcHY0L3RjcC5jOjQ3ODA6XHRcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBjb3B5YnVmX2xlbik6XG5uZXQvaXB2NC90Y3AuYzo0NzgxOlx0XHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgY29weWJ1Zl9hZGRyZXNzKTpcbm5ldC9pcHY0L3RjcC5jOjQ3ODI6XHRcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBlcnIpOlxubmV0L2lwdjQvdGNwLmMtNDc4My1cdFx0XHRnb3RvIHplcm9jb3B5X3Jjdl9za19lcnI7XG5uZXQvaXB2NC90Y3AuYzo0Nzg0Olx0XHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgaW5xKTpcbm5ldC9pcHY0L3RjcC5jLTQ3ODUtXHRcdFx0Z290byB6ZXJvY29weV9yY3ZfaW5xO1xubmV0L2lwdjQvdGNwLmM6NDc4NjpcdFx0Y2FzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIGxlbmd0aCk6XG5uZXQvaXB2NC90Y3AuYy00Nzg3LVx0XHRkZWZhdWx0OlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzozMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzE5NgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipaZXJvLUNvcHkgUmVjZWl2ZTogQSBQb3RlbnRpYWwgSG90c3BvdCoqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgYHRjcF96ZXJvY29weV9yZWNlaXZlYCBmdW5jdGlvbi4gSW50ZXJlc3RpbmcuLi4gbG9va3MgbGlrZSBgZG9fdGNwX2dldHNvY2tvcHRgIGlzIHRoZSBvbmUgY2FsbGluZyBpdCB3aGVuIGBUQ1BfWkVST0NPUFlfUkVDRUlWRWAgaXMgcmVxdWVzdGVkLiBUaGF0JiMzOTtzIGEgcHJldHR5IHN0YW5kYXJkIHBhdGgsIG1lYW5pbmcgdGhpcyB0aGluZyBjb3VsZCBnZXQgaGl0ICphIGxvdCouIElmIGBkb190Y3BfZ2V0c29ja29wdGAgaXMgY2FsbGVkIG9mdGVuLCB0aGVuIHNvIHdpbGwgdGhpcyBmdW5jdGlvbi4gU28sIGlmIHRoaXMgZnVuY3Rpb24gaXMgaW5lZmZpY2llbnQsIGl0IGNvdWxkIGludHJvZHVjZSBhIGJvdHRsZW5lY2suCgpHaXZlbiB0aGlzIGNvbnRleHQsIEkgbmVlZCB0byBjaGVjayB0aGUgcG90ZW50aWFsIGZvciBwZXJmb3JtYW5jZSBpc3N1ZXMgYW5kIHRoZSB3YXlzIGl0JiMzOTtzIHRyYWNlZC4KCkkmIzM5O20gdGhpbmtpbmcsIEkgc2hvdWxkIGltbWVkaWF0ZWx5IGxvb2sgYXQgYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYC4gSSYjMzk7bSBnb2luZyB0byBzZWUgaG93IHRyYWNpbmcgaXMgaGFuZGxlZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWluZyBsb2dnZWQsIGhvdyB0aGUgb3ZlcmhlYWQgaXMsIGFuZCBob3cgaXQgaW1wYWN0cyBhbnkgcGVyZm9ybWFuY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fcmJfbWFwX3ZtYSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2tlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTc1Njc9c3RhdGljIGludCBfX3JiX2luY19kZWNfbWFwcGVkKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLFxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc2MTItI2lmZGVmIENPTkZJR19NTVVcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc2MTM6c3RhdGljIGludCBfX3JiX21hcF92bWEoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03NjE0LVx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc3MDYtI2Vsc2Vcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc3MDc6c3RhdGljIGludCBfX3JiX21hcF92bWEoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03NzA4LVx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTc3MTQ9aW50IHJpbmdfYnVmZmVyX21hcChzdHJ1Y3QgdHJhY2VfYnVmZmVyICpidWZmZXIsIGludCBjcHUsXG4tLVxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzcyOS1cdGlmIChjcHVfYnVmZmVyLVx1MDAzZXVzZXJfbWFwcGVkKSB7XG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo3NzMwOlx0XHRlcnIgPSBfX3JiX21hcF92bWEoY3B1X2J1ZmZlciwgdm1hKTtcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc3MzEtXHRcdGlmICghZXJyKVxuLS1cbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc3NjAtXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo3NzYxOlx0ZXJyID0gX19yYl9tYXBfdm1hKGNwdV9idWZmZXIsIHZtYSk7XG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03NzYyLVx0aWYgKCFlcnIpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM5MjMKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqUmVhY2hpbmcgZm9yIHRoZSBSaW5nIEJ1ZmZlcioqCgpBbHJpZ2h0LCBzbyBgcmluZ19idWZmZXJfbWFwYCBpcyBhY2Nlc3NpYmxlIHNvbWVob3csIGxpa2VseSB0aHJvdWdoIGBtbWFwYCBhbmQgdGhlIHRyYWNlZnMgcmluZyBidWZmZXIg4oCTIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgKndoeSouIE15IGluaXRpYWwgaW5zdGluY3QgcG9pbnRzIG1lIHRvd2FyZHMgdGhlIEFNRCBEbmEgYWNjZWxlcmF0b3IgZHJpdmVyLCBzcGVjaWZpY2FsbHkgYGRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jYC4gVGhpcyBpcyB1c3VhbGx5IHdoZXJlIHlvdSYjMzk7ZCBmaW5kIHRoZSBjcnVjaWFsIGludGVyYWN0aW9uIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIGxpa2VseSBpbmNsdWRpbmcgYnVmZmVyIGNyZWF0aW9uLCBtYXBwaW5nLCBhbmQgcG90ZW50aWFsbHkgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHJpbmcgYnVmZmVyIGlmIERNQSBvciBjb250ZXh0IHN3aXRjaGluZyBpcyBpbnZvbHZlZC4gSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGF0IGZpbGUuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGNhbGxzIHRoYXQgdG91Y2ggb24gdGhlIHJpbmcgYnVmZmVyLCBgbW1hcGAgdXNhZ2UsIG9yIGludGVyYWN0aW9ucyB3aXRoIHRoZSBETUEgZW5naW5lLiBJIHN1c3BlY3QgdGhpcyB3aWxsIGlsbHVtaW5hdGUgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHJpbmcgYnVmZmVyLiBGcm9tIHRoZXJlLCBJJiMzOTtsbCBhc3Nlc3MgdGhlIHBvdGVudGlhbCBzZWN1cml0eSBhbmQgcGVyZm9ybWFuY2UgcmFtaWZpY2F0aW9ucyBvZiB0aGF0IHBhcnRpY3VsYXIgaW50ZXJmYWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzozMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbWR4ZG5hX2luc2VydF9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jPTQyND1zdGF0aWMgdm9pZCBhbWR4ZG5hX2dlbV9kZXZfb2JqX2ZyZWUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnb2JqKVxuLS1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jLTQzOC1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jOjQzOTpzdGF0aWMgaW50IGFtZHhkbmFfaW5zZXJ0X3BhZ2VzKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibyxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jLTQ0MC1cdFx0XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jPTQ5NT1zdGF0aWMgaW50IGFtZHhkbmFfZ2VtX29ial9tbWFwKHN0cnVjdCBkcm1fZ2VtX29iamVjdCAqZ29iaixcbi0tXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy01MDUtXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYzo1MDY6XHRyZXQgPSBhbWR4ZG5hX2luc2VydF9wYWdlcyhhYm8sIHZtYSk7XG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy01MDctXHRpZiAocmV0KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTIxCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjAwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwgU3ltYm9sIEVudHJ5IFBvaW50cyoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBmb3Igc2lnbmlmaWNhbnQgZW50cnkgcG9pbnRzLCBhbmQgYmFzZWQgb24gdGhlIGluaXRpYWwgYXNzZXNzbWVudCwgdGhlICYjMzQ7ZHJpdmVyJiMzNDsgYXNwZWN0IGlzIGEgYml0IG9mIGEgZGlzdHJhY3Rpb24g4oCTIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY29yZSBrZXJuZWwgdXNlcnMgaGVyZS4gTGV0JiMzOTtzIGZvY3VzIG9uIHRoZSBrZXkgc3ltYm9scyBpZGVudGlmaWVkOiBgdm1faW5zZXJ0X3BhZ2VzYCwgYGlvX3VyaW5nX21tYXBgLCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgLCBhbmQgYHJpbmdfYnVmZmVyX21hcGAuIFRoZXNlIHNob3VsZCBwcm92aWRlIGdvb2QgaG9va3MuCgpUaGUgYElPX1VSSU5HYCBjb25maWcgaXMgc29tZXRoaW5nIHdlIHNob3VsZCBub3RlLiBJdCYjMzk7cyBhIGtleSBpbmRpY2F0b3IgZm9yIGhvdyB0aGUga2VybmVsIGlzIGNvbmZpZ3VyZWQgaW4gdGhpcyBwYXJ0aWN1bGFyIGluc3RhbmNlLgoKV2FpdCwgbG9va2luZyBhdCBgdm1faW5zZXJ0X3BhZ2VzYCwgdGhhdCBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIHRhcmdldCBiZWNhdXNlIGl0JiMzOTtzIGV4cG9ydGVkLiBJdCBoYXMgdG8gYmUgYW4gZW50cnkgcG9pbnQuIFF1aWNrIGNoZWNrOiBJcyBgaW5zZXJ0X3BhZ2VzYCBzdGF0aWMgd2l0aGluIGBtbS9tZW1vcnkuY2A/IEdvb2QsIHRoYXQgbWFrZXMgYHZtX2luc2VydF9wYWdlc2AgdGhlIGV4dGVybmFsbHkgdmlzaWJsZSBlbnRyeS4gRXhjZWxsZW50LgoKTm93LCBsZXQmIzM5O3MganVzdCBkbyBhIHF1aWNrIHNjYW4gZm9yIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19UUkFDSU5HYCBhcmUgc3RhbmRhcmQsIGJ1dCB0aGUgYENPTkZJR19JT19VUklOR2AgaXMgZGVmaW5pdGVseSB3b3J0aCBpbmNsdWRpbmcgZXhwbGljaXRseS4KCkZpbmFsbHksIHdoaWxlIHdlJiMzOTtyZSBpbiB0aGUgbmVpZ2hib3Job29kLCBsZXQmIzM5O3MgdGFrZSBhIGxvb2sgYXQgYG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGVgIGluIGBtbS9tZW1vcnkuY2AuIEFsd2F5cyBnb29kIHRvIGhhdmUgYSBjb21wcmVoZW5zaXZlIHZpZXcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hcF9rZXJuZWxfcGFnZXNfY29tcGxldGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1vcnkuYz0yNTM3PUVYUE9SVF9TWU1CT0wobWFwX2tlcm5lbF9wYWdlc19wcmVwYXJlKTtcbm1tL21lbW9yeS5jLTI1MzgtXG5tbS9tZW1vcnkuYzoyNTM5OmludCBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vbWVtb3J5LmMtMjU0MC1cdFx0XHQgICAgICBzdHJ1Y3QgbW1hcF9hY3Rpb24gKmFjdGlvbilcbi0tXG5tbS9tZW1vcnkuYy0yNTQ4LX1cbm1tL21lbW9yeS5jOjI1NDk6RVhQT1JUX1NZTUJPTChtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlKTtcbm1tL21lbW9yeS5jLTI1NTAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE1MTkzCgkJCQkJCQlvdXRwdXQ6IDIxCgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgYG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGVgIFVzYWdlKioKCk9rYXksIHNvIHRoZSBxdWVzdGlvbiBvbiBteSBtaW5kIHJpZ2h0IG5vdyBpczogV2hlcmUgZXhhY3RseSBkb2VzIGBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlYCBjb21lIGludG8gcGxheSBpbiB0aGlzIHN5c3RlbT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHNjb3BlIGFuZCBob3cgaXQmIzM5O3MgaW50ZWdyYXRlZC4gSXMgaXQgYSBjb3JlIGZ1bmN0aW9uLCBvciBzb21ldGhpbmcgbW9yZSBzcGVjaWFsaXplZD8gSXMgaXQgd2lkZWx5IHVzZWQsIG9yIGxpbWl0ZWQgdG8gc3BlY2lmaWMgY29udGV4dHM/IEkmIzM5O20gdGhpbmtpbmcgSSBuZWVkIHRvIGZpbmQgdGhlIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayB0aHJvdWdoIHRoZSBzb3VyY2UgY29kZSB0byBnZXQgYSBoYW5kbGUgb24gdGhpczsgSSBuZWVkIHRvIGtub3cgd2hlcmUgaXQmIzM5O3MgYmVpbmcgKmNhbGxlZCogdG8gZ3Jhc3AgaXRzIHB1cnBvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hcF9rZXJuZWxfcGFnZXNfY29tcGxldGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9tbS5oPTQ1Mzg9aW50IG1hcF9rZXJuZWxfcGFnZXNfcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKTtcbmluY2x1ZGUvbGludXgvbW0uaDo0NTM5OmludCBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9tbS5oLTQ1NDAtXHRcdFx0ICAgICAgc3RydWN0IG1tYXBfYWN0aW9uICphY3Rpb24pO1xuLS1cbm1tL21lbW9yeS5jPTI1Mzc9RVhQT1JUX1NZTUJPTChtYXBfa2VybmVsX3BhZ2VzX3ByZXBhcmUpO1xubW0vbWVtb3J5LmMtMjUzOC1cbm1tL21lbW9yeS5jOjI1Mzk6aW50IG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9tZW1vcnkuYy0yNTQwLVx0XHRcdCAgICAgIHN0cnVjdCBtbWFwX2FjdGlvbiAqYWN0aW9uKVxuLS1cbm1tL21lbW9yeS5jLTI1NDgtfVxubW0vbWVtb3J5LmM6MjU0OTpFWFBPUlRfU1lNQk9MKG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGUpO1xubW0vbWVtb3J5LmMtMjU1MC1cbi0tXG5tbS91dGlsLmM9MTQ3OD1pbnQgbW1hcF9hY3Rpb25fY29tcGxldGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vdXRpbC5jLTE0ODktXHRjYXNlIE1NQVBfTUFQX0tFUk5FTF9QQUdFUzpcbm1tL3V0aWwuYzoxNDkwOlx0XHRlcnIgPSBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlKHZtYSwgYWN0aW9uKTtcbm1tL3V0aWwuYy0xNDkxLVx0XHRicmVhaztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3MTEKCQkJCQkJCW91dHB1dDogMjAKCQkJCQkJCXRob3VnaHRzOiAxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKldoZXJlIERvZXMgYG1tYXBfYWN0aW9uX2NvbXBsZXRlYCBGaXQ/KioKCk9rYXksIHNvIGBtbWFwX2FjdGlvbl9jb21wbGV0ZWAuLi4gd2hlcmUgKmlzKiB0aGF0IHVzZWQ/IEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBtbWFwLXJlbGF0ZWQga2VybmVsIHN1YnN5c3RlbXMuIE15IGluaXRpYWwgZ3Vlc3MgaXMgdGhhdCBpdCYjMzk7cyBsaWtlbHkgcGFydCBvZiB0aGUgY29tcGxldGlvbiBwYXRoIGZvciBhbiBhc3luY2hyb25vdXMgbWVtb3J5IG1hcHBpbmcgb3BlcmF0aW9uLiBJdCB3b3VsZCBiZSBpbnZvbHZlZCBpbiBzaWduYWxpbmcgdGhlIGNvbXBsZXRpb24gb2YgYSBzcGVjaWZpYyBhY3Rpb24gcmVsYXRlZCB0byBtYXBwZWQgbWVtb3J5LCBwb3NzaWJseSB0byB1c2VyIHNwYWNlLCBvciBhbm90aGVyIGtlcm5lbCBwcm9jZXNzLiBJcyBpdCB0aWVkIHRvIGEgc3BlY2lmaWMgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLCBsaWtlIHRoZSBwYWdlIGNhY2hlLCBvciBzb21ldGhpbmcgbW9yZSBnZW5lcmFsaXplZCB3aXRoaW4gdGhlIFZNPyBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGViYXNlIHRvIGRldGVybWluZSB0aGUgZXhhY3QgY2FsbCBzaXRlcyBhbmQgY29udGV4dHMsIHRvIGZ1bGx5IHVuZGVyc3RhbmQgaXRzIGZ1bmN0aW9uLgoKSXMgaXQgcmVsYXRlZCB0byBmaWxlLWJhY2tlZCBtYXBwaW5ncywgb3IgYW5vbnltb3VzIG1hcHBpbmdzPyBEb2VzIGl0IGhhbmRsZSB0aGUgZGlydHlpbmcsIGZsdXNoaW5nLCBvciBpbnZhbGlkYXRpbmcgb2YgcGFnZXM/IElzIHRoaXMgYWJvdXQgdGhlIHNpZ25hbHMgZ2VuZXJhdGVkIGJ5IHRoZSBrZXJuZWwsIG9yIHNvbWV0aGluZyBJJiMzOTttIG1pc3Npbmc/IEFuZCBkb2VzIGl0IGhhdmUgYW55IGFzc29jaWF0ZWQgbG9ja2luZz8KCkkmIzM5O20gdGhpbmtpbmcgSSBwcm9iYWJseSBzaG91bGQgc3RhcnQgYnkgbG9va2luZyBhdCB0aGUgY2FsbHMgcmVsYXRlZCB0byBgbW1hcGAgc3lzY2FsbCBpbXBsZW1lbnRhdGlvbnMsIGxpa2UgYGRvX21tYXBgIG9yIHNpbWlsYXIuIEkmIzM5O2xsIG5lZWQgdG8gZHJpbGwgZG93biB0byBmaW5kIHdoZXJlIHRoaXMgc2lnbmFsIGlzIGJlaW5nIHNlbnQuIFBlcmhhcHMgSSYjMzk7bGwgdXNlIGBncmVwYCBvciBhIHNpbWlsYXIgdG9vbCB0byBwaW5wb2ludCB0aGUgc3BlY2lmaWMgc291cmNlIGZpbGVzIGFuZCBmdW5jdGlvbnMgdGhhdCB1c2UgdGhhdCBzeW1ib2wuIFVuZGVyc3RhbmRpbmcgaXRzIHVzYWdlIHdpdGhpbiB0aG9zZSBmdW5jdGlvbnMgd2lsbCBwcm92aWRlIHRoZSBjbGVhcmVzdCBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttbWFwX2FjdGlvbl9jb21wbGV0ZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L21tLmg9NDQyNj1pbnQgbW1hcF9hY3Rpb25fcHJlcGFyZShzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjKTtcbmluY2x1ZGUvbGludXgvbW0uaDo0NDI3OmludCBtbWFwX2FjdGlvbl9jb21wbGV0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvbW0uaC00NDI4LVx0XHRcdCBzdHJ1Y3QgbW1hcF9hY3Rpb24gKmFjdGlvbiwgYm9vbCBpc19jb21wYXQpO1xuLS1cbm1tL3V0aWwuYz0xMjI0PWludCBfX2NvbXBhdF92bWFfbW1hcChzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjLFxuLS1cbm1tL3V0aWwuYy0xMjM1LVx0LyogQ29tcGxldGUgYW55IHNwZWNpZmllZCBtbWFwIGFjdGlvbnMuICovXG5tbS91dGlsLmM6MTIzNjpcdHJldHVybiBtbWFwX2FjdGlvbl9jb21wbGV0ZSh2bWEsIFx1MDAyNmRlc2MtXHUwMDNlYWN0aW9uLCAvKmlzX2NvbXBhdD0qL3RydWUpO1xubW0vdXRpbC5jLTEyMzctfVxuLS1cbm1tL3V0aWwuYz0xNDY1PUVYUE9SVF9TWU1CT0wobW1hcF9hY3Rpb25fcHJlcGFyZSk7XG4tLVxubW0vdXRpbC5jLTE0NjctLyoqXG5tbS91dGlsLmM6MTQ2ODogKiBtbWFwX2FjdGlvbl9jb21wbGV0ZSAtIEV4ZWN1dGUgVk1BIGRlc2NyaXB0b3IgYWN0aW9uLlxubW0vdXRpbC5jLTE0NjktICogQHZtYTogVGhlIFZNQSB0byBwZXJmb3JtIHRoZSBhY3Rpb24gdXBvbi5cbi0tXG5tbS91dGlsLmMtMTQ3Ny0gKi9cbm1tL3V0aWwuYzoxNDc4OmludCBtbWFwX2FjdGlvbl9jb21wbGV0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL3V0aWwuYy0xNDc5LVx0XHRcdCBzdHJ1Y3QgbW1hcF9hY3Rpb24gKmFjdGlvbiwgYm9vbCBpc19jb21wYXQpXG4tLVxubW0vdXRpbC5jLTE1MDEtfVxubW0vdXRpbC5jOjE1MDI6RVhQT1JUX1NZTUJPTChtbWFwX2FjdGlvbl9jb21wbGV0ZSk7XG5tbS91dGlsLmMtMTUwMy0jZWxzZVxuLS1cbm1tL3V0aWwuYz0xNTE5PUVYUE9SVF9TWU1CT0wobW1hcF9hY3Rpb25fcHJlcGFyZSk7XG5tbS91dGlsLmMtMTUyMC1cbm1tL3V0aWwuYzoxNTIxOmludCBtbWFwX2FjdGlvbl9jb21wbGV0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL3V0aWwuYy0xNTIyLVx0XHRcdCBzdHJ1Y3QgbW1hcF9hY3Rpb24gKmFjdGlvbixcbi0tXG5tbS91dGlsLmMtMTU0MS19XG5tbS91dGlsLmM6MTU0MjpFWFBPUlRfU1lNQk9MKG1tYXBfYWN0aW9uX2NvbXBsZXRlKTtcbm1tL3V0aWwuYy0xNTQzLSNlbmRpZlxuLS1cbm1tL3ZtYS5jPTI3MzQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19tbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbm1tL3ZtYS5jLTI3ODUtXHRpZiAoaGF2ZV9tbWFwX3ByZXBhcmUgXHUwMDI2XHUwMDI2IGFsbG9jYXRlZF9uZXcpIHtcbm1tL3ZtYS5jOjI3ODY6XHRcdGVycm9yID0gbW1hcF9hY3Rpb25fY29tcGxldGUodm1hLCBcdTAwMjZkZXNjLmFjdGlvbixcbm1tL3ZtYS5jLTI3ODctXHRcdFx0XHRcdCAgICAgLyppc19jb21wYXQ9Ki9mYWxzZSk7XG4tLVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaD0xMzA5PXN0YXRpYyBpbmxpbmUgaW50IF9fY29tcGF0X3ZtYV9tbWFwKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MsXG4tLVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9kdXAuaC0xMzIwLVx0LyogQ29tcGxldGUgYW55IHNwZWNpZmllZCBtbWFwIGFjdGlvbnMuICovXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oOjEzMjE6XHRyZXR1cm4gbW1hcF9hY3Rpb25fY29tcGxldGUodm1hLCBcdTAwMjZkZXNjLVx1MDAzZWFjdGlvbiwgLyppc19jb21wYXQ9Ki90cnVlKTtcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgtMTMyMi19XG4tLVxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oPTg0PXN0YXRpYyBpbmxpbmUgaW50IG1tYXBfYWN0aW9uX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcbi0tXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmgtODgtXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmg6ODk6c3RhdGljIGlubGluZSBpbnQgbW1hcF9hY3Rpb25fY29tcGxldGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmgtOTAtXHRcdFx0XHQgICAgICAgc3RydWN0IG1tYXBfYWN0aW9uICphY3Rpb24sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2OTgzCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpdCBzdGFuZHM6CgoqKkRpdmluZyBEZWVwIGludG8gTWVtb3J5IE1hbmFnZW1lbnQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIGhvdyBtZW1vcnkgaXMgbWFwcGVkLiBJIHNlZSBgX19tbWFwX3JlZ2lvbmAgY2FsbHMgYG1tYXBfYWN0aW9uX2NvbXBsZXRlYC4gVGhhdCYjMzk7cyBhIHByZXR0eSBjZW50cmFsIHBvaW50LCByaWdodD8gVGhpcyBpcyBjb3JlIHN0dWZmLiBJbW1lZGlhdGVseSwgYHZtX2luc2VydF9wYWdlc2AgYW5kIGBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlYCBjb21lIHRvIG1pbmQgYXMgcG90ZW50aWFsbHkgcmVsZXZhbnQgZnVuY3Rpb25zIHRvIHNjcnV0aW5pemUgZnVydGhlci4gVGhleSYjMzk7cmUgbGlrZWx5IGludm9sdmVkIGluIGNvbXBsZXRpbmcgdGhlIG1lbW9yeSBtYXBwaW5nIHByb2Nlc3MsIHNvIHRoZXkmIzM5O3JlIG9uIG15IHJhZGFyLgoKSG9sZCBvbi4uLiBJIG5lZWQgdG8gYmUgbW9yZSBjYXJlZnVsLCBJIG1pc3NlZCBzb21ldGhpbmcsIHRoZSBwYXRjaCB0b3VjaGVzIGBwb3B1bGF0ZV90b19wbWRgLCB3aGljaCwgSSBub3cgcmVtZW1iZXIsIGlzIGFsc28gdXNlZCBpbiBgZ2V0X2xvY2tlZF9wdGVgLiBSaWdodCwgdGhpcyBjb3VsZCBoYXZlIGltcGxpY2F0aW9ucyBiZXlvbmQgdGhlIGltbWVkaWF0ZSBtbWFwIGNvbnRleHQuIEkgc2hvdWxkIHN3aXRjaCBnZWFycyBmb3IgYSBtb21lbnQgYW5kIGdvIGNoZWNrIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uIGluIGBnZXRfbG9ja2VkX3B0ZWAuIEdvdHRhIGVuc3VyZSB0aGlzIGNoYW5nZSBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuZm9yZXNlZW4gaXNzdWVzIGluIG90aGVyIHBhcnRzIG9mIHRoZSBtZW1vcnkgc3Vic3lzdGVtLCBwYXJ0aWN1bGFybHkgcmVsYXRlZCB0byBwYWdlIHRhYmxlIG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9sb2NrZWRfcHRlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtb3J5LmM9MjI3MT1zdGF0aWMgcG1kX3QgKnBvcHVsYXRlX3RvX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbm1tL21lbW9yeS5jLTIyOTItXG5tbS9tZW1vcnkuYzoyMjkzOnB0ZV90ICpnZXRfbG9ja2VkX3B0ZShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyLFxubW0vbWVtb3J5LmMtMjI5NC1cdFx0ICAgICAgc3BpbmxvY2tfdCAqKnB0bClcbi0tXG5tbS9tZW1vcnkuYz0yMzkyPXN0YXRpYyBpbnQgaW5zZXJ0X3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tZW1vcnkuYy0yNDAyLVx0cmV0dmFsID0gLUVOT01FTTtcbm1tL21lbW9yeS5jOjI0MDM6XHRwdGUgPSBnZXRfbG9ja2VkX3B0ZSh2bWEtXHUwMDNldm1fbW0sIGFkZHIsIFx1MDAyNnB0bCk7XG5tbS9tZW1vcnkuYy0yNDA0LVx0aWYgKCFwdGUpXG4tLVxubW0vbWVtb3J5LmM9MjY3MD1zdGF0aWMgdm1fZmF1bHRfdCBpbnNlcnRfcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxubW0vbWVtb3J5LmMtMjY3Ni1cbm1tL21lbW9yeS5jOjI2Nzc6XHRwdGUgPSBnZXRfbG9ja2VkX3B0ZShtbSwgYWRkciwgXHUwMDI2cHRsKTtcbm1tL21lbW9yeS5jLTI2NzgtXHRpZiAoIXB0ZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NTMKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxNDY0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIHRoZSBgcG9wdWxhdGVfdG9fcG1kYCBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaG93IGl0JiMzOTtzIGNoYW5nZWQuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byB0cmFjZSB0aGUgY2hhbmdlcy4gYGdldF9sb2NrZWRfcHRlYCBpcyB1c2VkIGluIGBpbnNlcnRfcGFnZWAgYW5kIGBpbnNlcnRfcGZuYC4gYGluc2VydF9wYWdlYCBpcyBjYWxsZWQgYnkgYHZtX2luc2VydF9wYWdlYC4gYGluc2VydF9wZm5gIGlzIGNhbGxlZCBieSBgdm1mX2luc2VydF9wZm5gLiBUaGF0IG1lYW5zIGB2bV9pbnNlcnRfcGFnZWAsIGB2bV9pbnNlcnRfcGFnZXNgLCBhbmQgYHZtZl9pbnNlcnRfcGZuYCBhcmUgYWxsIHBvdGVudGlhbGx5IGFmZmVjdGVkIGJ5IHRoaXMgY2hhbmdlLgoKSSBzZWUgdGhhdCBgcG9wdWxhdGVfdG9fcG1kYCBpcyB0aGUgbmV3IG5hbWUgZm9yIGB3YWxrX3RvX3BtZGAuIFRoZSBvbGQgaW1wbGVtZW50YXRpb24gb2YgYHdhbGtfdG9fcG1kYCB3YXMgaWRlbnRpY2FsIHRvIHRoZSBuZXcgYHBvcHVsYXRlX3RvX3BtZGAuIFRoZSBhY3R1YWwgY29kZSBoYXNuJiMzOTt0IGNoYW5nZWQsIHdoaWNoIHNpbXBsaWZpZXMgdGhpbmdzLiBUaGUgb25seSBjaGFuZ2UgaXMgdGhlIHJldHVybiB2YWx1ZSBvZiBgaW5zZXJ0X3BhZ2VzYCB3aGVuIGBwb3B1bGF0ZV90b19wbWRgIGZhaWxzLiBJdCB1c2VkIHRvIHJldHVybiBgLUVGQVVMVGAsIG5vdyBpdCByZXR1cm5zIGAtRU5PTUVNYC4gSXQgYWxzbyBsb29rcyBsaWtlIHRoZXJlIHdhcyBhIGJ1ZyBpbiB0aGUgb2xkIGBpbnNlcnRfcGFnZXNgIGNvZGUsIHdoZXJlIGFuIGAtRUZBVUxUYCB3YXMgc2V0IGF0IHRoZSBiZWdpbm5pbmcgb2YgdGhlIGxvb3AsIGJ1dCBub3cgaGFzIGJlZW4gY29ycmVjdGVkLiBUaGlzIGNoYW5nZSB3aWxsIGFmZmVjdCBlcnJvciBoYW5kbGluZyBpbiB0aGUgY2FsbGVycyBvZiBgdm1faW5zZXJ0X3BhZ2VzYCwgYW5kIGFueSBwb3RlbnRpYWwgY2FsbGVycyBvZiBgbWFwX2tlcm5lbF9wYWdlc19jb21wbGV0ZWAuCgpMZXQmIzM5O3MgYnJlYWsgZG93biB0aGUgb2xkIGFuZCBuZXcgY29kZSwgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGVycm9yIHBhdGhzOgoKSW4gdGhlIG9yaWdpbmFsIGBpbnNlcnRfcGFnZXNgOgoqICAgYHB0ZV9hbGxvY2AgZmFpbHVyZTogUmV0dXJucyBgLUVOT01FTWAKKiAgIGB3YWxrX3RvX3BtZGAgZmFpbHVyZTogUmV0dXJucyBgLUVGQVVMVGAKKiAgIGBwdGVfb2Zmc2V0X21hcF9sb2NrYCBmYWlsdXJlOiBSZXR1cm5zIGAtRUZBVUxUYAoqICAgYGluc2VydF9wYWdlX2luX2JhdGNoX2xvY2tlZGAgZmFpbHVyZTogUmV0dXJucyB0aGUgZXJyb3IgY29kZSBmcm9tIHRoYXQgZnVuY3Rpb24gKGBlcnJgKQoKSW4gdGhlIG5ldyBjb2RlLCB0aGUgb25seSAqZnVuY3Rpb25hbCogY2hhbmdlIGlzIHRoYXQgYHBvcHVsYXRlX3RvX3BtZGAgcmV0dXJuaW5nIGBOVUxMYCByZXN1bHRzIGluIGAtRU5PTUVNYCwgaW5zdGVhZCBvZiBgLUVGQVVMVGAgZnJvbSB0aGUgYHdhbGtfdG9fcG1kYCBmYWlsdXJlLiBJdCByZXR1cm5zIHRoZSBlcnJvciBjb2RlIGZyb20gYGluc2VydF9wYWdlX2luX2JhdGNoX2xvY2tlZGAgY29ycmVjdGx5LgoKU28sIHRoZSBjcml0aWNhbCBkaWZmZXJlbmNlIGlzIGB2bV9pbnNlcnRfcGFnZXNgIGFuZCBgbWFwX2tlcm5lbF9wYWdlc19jb21wbGV0ZWAgbm93IHJldHVybmluZyBgLUVOT01FTWAgd2hlbiBgcG9wdWxhdGVfdG9fcG1kYCBmYWlscyBpbnN0ZWFkIG9mIGAtRUZBVUxUYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggY2FsbGVycyBhcmUgZ29pbmcgdG8gYmUgYWZmZWN0ZWQgYnkgdGhpcyBjaGFuZ2UuIEl0JiMzOTtzIGEgc2VtYW50aWMgY2hhbmdlIGluIHRoZSBlcnJvciBjb2RlLCBhbmQgdGhleSBtaWdodCBoYXZlIGRpZmZlcmVudCBoYW5kbGluZyBmb3IgYC1FTk9NRU1gIHZlcnN1cyBgLUVGQVVMVGAuIEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBmb3IgcG90ZW50aWFsIGlzc3Vlcy4gU29tZXRoaW5nIGxpa2UgYHRjcF96ZXJvY29weV9yZWNlaXZlYCBjb3VsZCBiZSBhZmZlY3RlZC4KCk9rYXksIGxldCYjMzk7cyBsb29rIGF0IGB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoX2Vycm9yYCBpbiBgbmV0L2lwdjQvdGNwLmNgLCB0byBzZWUgaG93IGl0IGhhbmRsZXMgYW4gZXJyb3IgZnJvbSB0aGUgYHZtX2luc2VydF9wYWdlc2AgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3RjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2hfZXJyb3ImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvaXB2NC90Y3AuYz0yMDM1PXN0YXRpYyBpbnQgdGNwX3pjX2hhbmRsZV9sZWZ0b3ZlcihzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLFxuLS1cbm5ldC9pcHY0L3RjcC5jLTIwNjEtXG5uZXQvaXB2NC90Y3AuYzoyMDYyOnN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaF9lcnJvcihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm5ldC9pcHY0L3RjcC5jLTIwNjMtXHRcdFx0XHRcdCAgICAgIHN0cnVjdCBwYWdlICoqcGVuZGluZ19wYWdlcyxcbi0tXG5uZXQvaXB2NC90Y3AuYz0yMTEwPXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5uZXQvaXB2NC90Y3AuYy0yMTM2LVx0LyogRXJyb3I6IG1heWJlIHphcCBhbmQgcmV0cnkgJiM0Mzsgcm9sbGJhY2sgc3RhdGUgZm9yIGZhaWxlZCBpbnNlcnRzLiAqL1xubmV0L2lwdjQvdGNwLmM6MjEzNzpcdHJldHVybiB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoX2Vycm9yKHZtYSwgcGFnZXMgJiM0MzsgcGFnZXNfbWFwcGVkLFxubmV0L2lwdjQvdGNwLmMtMjEzOC1cdFx0cGFnZXNfcmVtYWluaW5nLCBhZGRyZXNzLCBsZW5ndGgsIHNlcSwgemMsIHRvdGFsX2J5dGVzX3RvX21hcCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAwOTIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBOYW1lOiBgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaF9lcnJvcmAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW4uIFRoZSBmdW5jdGlvbiBuYW1lIGltbWVkaWF0ZWx5IHRlbGxzIG1lIGEgbG90LiBgdGNwX3plcm9jb3B5YCBzdWdnZXN0cyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIFRDUCBuZXR3b3JraW5nIGFuZCwgbW9yZSBzcGVjaWZpY2FsbHksIGEgbWVjaGFuaXNtIHRvIGF2b2lkIHRoZSB0cmFkaXRpb25hbCBrZXJuZWwtdG8tdXNlci1zcGFjZSBjb3B5LiBFeGNlbGxlbnQsIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBnYWlucyBhcmUgYWxyZWFkeSBmbGFnZ2VkIGluIG15IG1pbmQuIFRoZSBtZW50aW9uIG9mIGB2bWAgKFZpcnR1YWwgTWFjaGluZSkgaW5kaWNhdGVzIHRoaXMgaXMgcHJvYmFibHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHdoaWNoIGFkZHMgYW5vdGhlciBsYXllciBvZiBjb21wbGV4aXR5IHRvIGNvbnNpZGVyIOKAkyBtZW1vcnkgbWFuYWdlbWVudCwgcG90ZW50aWFsIHZOSUMgaW50ZXJhY3Rpb25zLCBhbmQgaHlwZXJ2aXNvciBvdmVyaGVhZC4gVGhlbiwgYGluc2VydF9iYXRjaGAgcG9pbnRzIHRvIHNvbWUgZm9ybSBvZiBidWxrIG9wZXJhdGlvbiwgZGVhbGluZyB3aXRoIGEgZ3JvdXAgb2YgZGF0YSBvciBzdHJ1Y3R1cmVzLCBwZXJoYXBzIHBhY2tldHMgb3IgYnVmZmVycywgYW5kIHRoZSBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBwdXQgZGF0YSBpbnRvIHRoZSBWTS4gRmluYWxseSwgYGVycm9yYC4uLnRoYXQmIzM5O3MgdGhlIGtleS4gVGhpcyBpc24mIzM5O3QgYSBzdWNjZXNzIHBhdGg7IHRoaXMgaXMgd2hlcmUgdGhpbmdzICpnbyB3cm9uZyouIFdlJiMzOTtyZSBsb29raW5nIGF0IHRoZSBlcnJvciBoYW5kbGluZyBmb3IgYSB6ZXJvLWNvcHksIGJhdGNoIGluc2VydGlvbiBwcm9jZXNzIHdpdGhpbiBhIHZpcnR1YWwgbWFjaGluZSBjb250ZXh0LiBUaGF0JiMzOTtzIGEgcHJldHR5IHNwZWNpZmljIGFuZCBsaWtlbHkgcGVyZm9ybWFuY2UtY3JpdGljYWwgcGllY2Ugb2YgY29kZS4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIGlzIGRvaW5nLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9pcHY0L3RjcC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA2MiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDYyOlx0c3RhdGljIGludCB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoX2Vycm9yKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuMjA2MzpcdFx0XHRcdFx0XHQgICAgICBzdHJ1Y3QgcGFnZSAqKnBlbmRpbmdfcGFnZXMsXG4yMDY0Olx0XHRcdFx0XHRcdCAgICAgIHVuc2lnbmVkIGxvbmcgcGFnZXNfcmVtYWluaW5nLFxuMjA2NTpcdFx0XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nICphZGRyZXNzLFxuMjA2NjpcdFx0XHRcdFx0XHQgICAgICB1MzIgKmxlbmd0aCxcbjIwNjc6XHRcdFx0XHRcdFx0ICAgICAgdTMyICpzZXEsXG4yMDY4Olx0XHRcdFx0XHRcdCAgICAgIHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsXG4yMDY5Olx0XHRcdFx0XHRcdCAgICAgIHUzMiB0b3RhbF9ieXRlc190b19tYXAsXG4yMDcwOlx0XHRcdFx0XHRcdCAgICAgIGludCBlcnIpXG4yMDcxOlx0e1xuMjA3MjpcdFx0LyogQXQgbGVhc3Qgb25lIHBhZ2UgZGlkIG5vdCBtYXAuIFRyeSB6YXBwaW5nIGlmIHdlIHNraXBwZWQgZWFybGllci4gKi9cbjIwNzM6XHRcdGlmIChlcnIgPT0gLUVCVVNZIFx1MDAyNlx1MDAyNlxuMjA3NDpcdFx0ICAgIHpjLVx1MDAzZWZsYWdzIFx1MDAyNiBUQ1BfUkVDRUlWRV9aRVJPQ09QWV9GTEFHX1RMQl9DTEVBTl9ISU5UKSB7XG4yMDc1Olx0XHRcdHUzMiBtYXliZV96YXBfbGVuO1xuMjA3NjpcdFxuMjA3NzpcdFx0XHRtYXliZV96YXBfbGVuID0gdG90YWxfYnl0ZXNfdG9fbWFwIC0gIC8qIEFsbCBieXRlcyB0byBtYXAgKi9cbjIwNzg6XHRcdFx0XHRcdCpsZW5ndGggJiM0MzsgLyogTWFwcGVkIG9yIHBlbmRpbmcgKi9cbjIwNzk6XHRcdFx0XHRcdChwYWdlc19yZW1haW5pbmcgKiBQQUdFX1NJWkUpOyAvKiBGYWlsZWQgbWFwLiAqL1xuMjA4MDpcdFx0XHR6YXBfdm1hX3JhbmdlKHZtYSwgKmFkZHJlc3MsIG1heWJlX3phcF9sZW4pO1xuMjA4MTpcdFx0XHRlcnIgPSAwO1xuMjA4MjpcdFx0fVxuMjA4MzpcdFxuMjA4NDpcdFx0aWYgKCFlcnIpIHtcbjIwODU6XHRcdFx0dW5zaWduZWQgbG9uZyBsZWZ0b3Zlcl9wYWdlcyA9IHBhZ2VzX3JlbWFpbmluZztcbjIwODY6XHRcdFx0aW50IGJ5dGVzX21hcHBlZDtcbjIwODc6XHRcbjIwODg6XHRcdFx0LyogV2UgY2FsbGVkIHphcF92bWFfcmFuZ2UsIHRyeSB0byByZWluc2VydC4gKi9cbjIwODk6XHRcdFx0ZXJyID0gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgKmFkZHJlc3MsXG4yMDkwOlx0XHRcdFx0XHQgICAgICBwZW5kaW5nX3BhZ2VzLFxuMjA5MTpcdFx0XHRcdFx0ICAgICAgXHUwMDI2cGFnZXNfcmVtYWluaW5nKTtcbjIwOTI6XHRcdFx0Ynl0ZXNfbWFwcGVkID0gUEFHRV9TSVpFICogKGxlZnRvdmVyX3BhZ2VzIC0gcGFnZXNfcmVtYWluaW5nKTtcbjIwOTM6XHRcdFx0KnNlcSAmIzQzOz0gYnl0ZXNfbWFwcGVkO1xuMjA5NDpcdFx0XHQqYWRkcmVzcyAmIzQzOz0gYnl0ZXNfbWFwcGVkO1xuMjA5NTpcdFx0fVxuMjA5NjpcdFx0aWYgKGVycikge1xuMjA5NzpcdFx0XHQvKiBFaXRoZXIgd2Ugd2VyZSB1bmFibGUgdG8gemFwLCBPUiB3ZSB6YXBwZWQsIHJldHJpZWQgYW5cbjIwOTg6XHRcdFx0ICogaW5zZXJ0LCBhbmQgc3RpbGwgaGFkIGFuIGlzc3VlLiBFaXRoZXIgd2F5cywgcGFnZXNfcmVtYWluaW5nXG4yMDk5Olx0XHRcdCAqIGlzIHRoZSBudW1iZXIgb2YgcGFnZXMgd2Ugd2VyZSB1bmFibGUgdG8gbWFwLCBhbmQgd2UgdW5yb2xsXG4yMTAwOlx0XHRcdCAqIHNvbWUgc3RhdGUgd2Ugc3BlY3VsYXRpdmVseSB0b3VjaGVkIGJlZm9yZS5cbjIxMDE6XHRcdFx0ICovXG4yMTAyOlx0XHRcdGNvbnN0IGludCBieXRlc19ub3RfbWFwcGVkID0gUEFHRV9TSVpFICogcGFnZXNfcmVtYWluaW5nO1xuMjEwMzpcdFxuMjEwNDpcdFx0XHQqbGVuZ3RoIC09IGJ5dGVzX25vdF9tYXBwZWQ7XG4yMTA1Olx0XHRcdHpjLVx1MDAzZXJlY3Zfc2tpcF9oaW50ICYjNDM7PSBieXRlc19ub3RfbWFwcGVkO1xuMjEwNjpcdFx0fVxuMjEwNzpcdFx0cmV0dXJuIGVycjtcbjIxMDg6XHR9XG4yMTA5Olx0XG4yMTEwOlx0c3RhdGljIGludCB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuMjExMTpcdFx0XHRcdFx0XHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzozMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTIzNwoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYSBSZXR1cm5lZCBFcnJvciBDb2RlKioKClJpZ2h0LCBzbyB0aGUgZXJyb3IgY29kZSBpcyBiZWluZyByZXR1cm5lZCBkaXJlY3RseS4gVGhhdCYjMzk7cyB0aGUgaW1tZWRpYXRlIGluZm9ybWF0aW9uIEkgbmVlZCB0byB3b3JrIHdpdGguIE5vdywgdGhlIG5hdHVyYWwgbmV4dCBzdGVwIGlzIHRvIGludmVzdGlnYXRlIHRoZSBgaW9fdXJpbmdfbW1hcGAgZnVuY3Rpb24uIE15IGd1dCB0ZWxscyBtZSB0aGF0JiMzOTtzIHRoZSBsaWtlbHkgc291cmNlIG9mIHRoaXMgZXJyb3IsIG9yIGF0IGxlYXN0IGEga2V5IGNvbXBvbmVudCBpbiB0aGUgcHJvYmxlbSBzcGFjZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBpb191cmluZ19tbWFwYCBpcyBpbnRlcmFjdGluZyB3aXRoIHdoYXRldmVyIGxvZ2ljIGlzIGdlbmVyYXRpbmcgdGhhdCBlcnJvciBjb2RlLiBJJiMzOTttIGdvaW5nIHRvIGRpZyBpbnRvIHRoZSBzb3VyY2UgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyBpbiB0aGVyZS4gTWF5YmUgdGhlcmUmIzM5O3MgYSBwcm9ibGVtIHdpdGggdGhlIGFyZ3VtZW50cywgdGhlIGFsbG9jYXRpb24sIHRoZSB1bmRlcmx5aW5nIHN5c3RlbSBjYWxscywgb3IgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHVzZXItc3BhY2UuIFRoYXQmIzM5O3MgdGhlIGxpa2VseSBjdWxwcml0IGdpdmVuIHRoYXQgY29kZSBpcyB3aGF0IHRoZSBpc3N1ZSByZWxhdGVzIHRvLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZG8gYSBkZWVwIGRpdmUgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtpb191cmluZy9tZW1tYXAuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI4NCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjg0Olx0c3RhdGljIGludCBpb19yZWdpb25fbW1hcChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcbiAyODU6XHRcdFx0XHQgIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcbiAyODY6XHRcdFx0XHQgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIDI4NzpcdFx0XHRcdCAgdW5zaWduZWQgbWF4X3BhZ2VzKVxuIDI4ODpcdHtcbiAyODk6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBtaW4obXItXHUwMDNlbnJfcGFnZXMsIG1heF9wYWdlcyk7XG4gMjkwOlx0XG4gMjkxOlx0XHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EKTtcbiAyOTI6XHRcdHJldHVybiB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXHUwMDNldm1fc3RhcnQsIG1yLVx1MDAzZXBhZ2VzLCBcdTAwMjZucl9wYWdlcyk7XG4gMjkzOlx0fVxuIDI5NDpcdFxuIDI5NTpcdF9fY29sZCBpbnQgaW9fdXJpbmdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4gMjk2Olx0e1xuIDI5NzpcdFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSBmaWxlLVx1MDAzZXByaXZhdGVfZGF0YTtcbiAyOTg6XHRcdHNpemVfdCBzeiA9IHZtYS1cdTAwM2V2bV9lbmQgLSB2bWEtXHUwMDNldm1fc3RhcnQ7XG4gMjk5Olx0XHRsb25nIG9mZnNldCA9IHZtYS1cdTAwM2V2bV9wZ29mZiBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVDtcbiAzMDA6XHRcdHVuc2lnbmVkIGludCBwYWdlX2xpbWl0ID0gVUlOVF9NQVg7XG4gMzAxOlx0XHRzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqcmVnaW9uO1xuIDMwMjpcdFx0dm9pZCAqcHRyO1xuIDMwMzpcdFxuIDMwNDpcdFx0Z3VhcmQobXV0ZXgpKFx1MDAyNmN0eC1cdTAwM2VtbWFwX2xvY2spO1xuIDMwNTpcdFxuIDMwNjpcdFx0cHRyID0gaW9fdXJpbmdfdmFsaWRhdGVfbW1hcF9yZXF1ZXN0KGZpbGUsIHZtYS1cdTAwM2V2bV9wZ29mZik7XG4gMzA3Olx0XHRpZiAoSVNfRVJSKHB0cikpXG4gMzA4Olx0XHRcdHJldHVybiBQVFJfRVJSKHB0cik7XG4gMzA5Olx0XG4gMzEwOlx0XHRzd2l0Y2ggKG9mZnNldCBcdTAwMjYgSU9SSU5HX09GRl9NTUFQX01BU0spIHtcbiAzMTE6XHRcdGNhc2UgSU9SSU5HX09GRl9TUV9SSU5HOlxuIDMxMjpcdFx0Y2FzZSBJT1JJTkdfT0ZGX0NRX1JJTkc6XG4gMzEzOlx0XHRcdHBhZ2VfbGltaXQgPSAoc3ogJiM0MzsgUEFHRV9TSVpFIC0gMSkgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gMzE0Olx0XHRcdGJyZWFrO1xuIDMxNTpcdFx0fVxuIDMxNjpcdFxuIDMxNzpcdFx0cmVnaW9uID0gaW9fbW1hcF9nZXRfcmVnaW9uKGN0eCwgdm1hLVx1MDAzZXZtX3Bnb2ZmKTtcbiAzMTg6XHRcdHJldHVybiBpb19yZWdpb25fbW1hcChjdHgsIHJlZ2lvbiwgdm1hLCBwYWdlX2xpbWl0KTtcbiAzMTk6XHR9XG4gMzIwOlx0XG4gMzIxOlx0dW5zaWduZWQgbG9uZyBpb191cmluZ19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIDMyMjpcdFx0XHRcdFx0XHQgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcGdvZmYsXG4gMzIzOlx0XHRcdFx0XHRcdCB1bnNpZ25lZCBsb25nIGZsYWdzKVxuIDMyNDpcdHtcbiAzMjU6XHRcdHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4ID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gMzI2Olx0XHR2b2lkICpwdHI7XG4gMzI3Olx0XG4gMzI4Olx0XHQvKlxuIDMyOTpcdFx0ICogRG8gbm90IGFsbG93IHRvIG1hcCB0byB1c2VyLXByb3ZpZGVkIGFkZHJlc3MgdG8gYXZvaWQgYnJlYWtpbmcgdGhlXG4gMzMwOlx0XHQgKiBhbGlhc2luZyBydWxlcy4gVXNlcnNwYWNlIGlzIG5vdCBhYmxlIHRvIGd1ZXNzIHRoZSBvZmZzZXQgYWRkcmVzcyBvZlxuIDMzMTpcdFx0ICoga2VybmVsIGttYWxsb2MoKWVkIG1lbW9yeSBhcmVhLlxuIDMzMjpcdFx0ICovXG4gMzMzOlx0XHRpZiAoYWRkcilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIzMTAKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAyNjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgTWVtb3J5IEFsbG9jYXRpb24gRml4KioKCk9rYXksIHNvIGBpb191cmluZ19tbWFwYCByZXR1cm5zIHRoZSBlcnJvciBjb2RlIGRpcmVjdGx5LCB3aGljaCBpcyBnb29kLiBUaGUgcGF0Y2ggc3BlY2lmaWNhbGx5IGFkZHJlc3NlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGB2bV9pbnNlcnRfcGFnZXNgIHdoZW4gYSBtZW1vcnkgYWxsb2NhdGlvbiBmYWlscy4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBtYWtpbmcgaXQgYSBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEkmIzM5O3ZlIGdvdCB0byBydW4gdGhpcyB0aHJvdWdoIGl0cyBwYWNlcy4KCkFscmlnaHQsIGxldCYjMzk7cyBwcmVwIHRoZSByZXNwb25zZS4gRGVmaW5pdGVseSBgV29ydGhGdXp6aW5nOiB0cnVlYC4gVGhlIHByaW1hcnkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uIGFyZSBgdm1faW5zZXJ0X3BhZ2VzYCwgYGlvX3VyaW5nX21tYXBgLCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgLCBgcmluZ19idWZmZXJfbWFwYCwgYW5kIGBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlYC4KCldhaXQgYSBtaW51dGUsIGBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlYCBpcyB1c2VkIHdpdGhpbiBgbW1hcF9hY3Rpb25fY29tcGxldGVgLCB3aGljaCBpbiB0dXJuIGlzIHVzZWQgaW4gYF9fbW1hcF9yZWdpb25gLiBUaGlua2luZyBvdXQgbG91ZCwgdGhlbiBgX19tbWFwX3JlZ2lvbmAgaXRzZWxmIGNvdWxkIGJlIGEgdmFsdWFibGUgdGFyZ2V0LCBob3dldmVyLCB0aGF0JiMzOTtzIGxpa2VseSBhIGhvdCBwYXRoLiBTbywgYG1tYXBfYWN0aW9uX2NvbXBsZXRlYCBtaWdodCBiZSB0aGUgYmV0dGVyIGJldC4gSG93ZXZlciwgdGhlIHJvb3QgY2F1c2UgaXMgd2l0aCBgdm1faW5zZXJ0X3BhZ2VzYCwgc28gSSBzdGlsbCBuZWVkIHRvIGdpdmUgaXQgdGhlIHByaW1hcnkgZm9jdXMuCgpOb3csIGxldCBtZSBtYWtlIHN1cmUgdGhhdCBgSU9fVVJJTkdgIGlzIHRoZSBvbmx5IGNvbmZpZyB0aGF0IG5lZWRzIHRvIGJlIGVuYWJsZWQuIEkgc2VlIHRoYXQgYENPTkZJR19JT19VUklOR2AsIGBDT05GSUdfSU5FVGAsIGFuZCBgQ09ORklHX1RSQUNJTkdgIGFyZSBzdGFuZGFyZCwgc28gbm8gbmVlZCB0byBvdmVydGhpbmsgaXQuCgpJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGBDT05GSUdfSU9fVVJJTkdgIGluIEtjb25maWcgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcsIGJ1dCBJJiMzOTttIGZlZWxpbmcgY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMgc28gZmFyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNzozMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSU9fVVJJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE5MTA9Y29uZmlnIEFJT1xuLS1cbmluaXQvS2NvbmZpZy0xOTE3LVxuaW5pdC9LY29uZmlnOjE5MTg6Y29uZmlnIElPX1VSSU5HXG5pbml0L0tjb25maWctMTkxOS1cdGJvb2wgXCYjMzQ7RW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcJiMzNDsgaWYgRVhQRVJUXG4tLVxuaW5pdC9LY29uZmlnPTE5Mjc9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xuLS1cbmluaXQvS2NvbmZpZy0xOTM5LVxuaW5pdC9LY29uZmlnOjE5NDA6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxuaW5pdC9LY29uZmlnLTE5NDEtXHR0cmlzdGF0ZSBcJiMzNDtFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVwmIzM0OyBpZiBFWFBFUlRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxMTMKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4KCioqSU9fVVJJTkcsIFplcm9jb3B5LCBhbmQgUmluZyBCdWZmZXJzOiBBIE1lbnRhbCBNYXAqKgoKUmlnaHQsIHNvIHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGBJT19VUklOR2AgYXMgdGhlIGNvcmUgY29uZmlndXJhdGlvbi4gR290IGl0LiBOb3csIGxldCYjMzk7cyB6ZXJvIGluIG9uIGB0Y3BfemVyb2NvcHlfcmVjZWl2ZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O1doZXJlIGRvZXMgdGhpcyBhY3R1YWxseSBsaXZlPyYjMzQ7IEFoLCB5ZXMsIGBuZXQvaXB2NC90Y3AuY2AuIFRoYXQmIzM5O3MgcmlnaHQsIHRoYXQmIzM5O3MgYSBjb3JlIGNvbXBvbmVudCwgYWx3YXlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gTm8gc3VycHJpc2VzIHRoZXJlLgoKTm93LCBsZXQmIzM5O3MgY2lyY2xlIGJhY2sgdG8gYHJpbmdfYnVmZmVyX21hcGAuIFRoYXQmIzM5O3MgaW4gYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYCwgYW5kIGlmIEkgcmVjYWxsIGNvcnJlY3RseSBmcm9tIHBhc3QgZXhwZXJpZW5jZXMsIHRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gWWVwLCBpdCYjMzk7cyBkZXBlbmRlbnQgb24gYENPTkZJR19UUkFDSU5HYC4gTWFrZXMgc2Vuc2UsIGFzIHJpbmcgYnVmZmVycyBhcmUgY3J1Y2lhbCBmb3IgdHJhY2luZyBhbmQgcGVyZm9ybWFuY2UgbW9uaXRvcmluZy4gU28sIGBJT19VUklOR2AsIGB0Y3BfemVyb2NvcHlfcmVjZWl2ZWAsIGFuZCBgQ09ORklHX1RSQUNJTkdgIGFyZSBhbGwgY29ubmVjdGVkIGluIHRoaXMgY29udGV4dCwgbm93IGxldCBtZSB0aGluayBhYm91dCBob3cgaXQgYWxsIHRpZXMgaW4uLi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTc6MzI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFRSQUNJTkcmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtrZXJuZWwvdHJhY2UvS2NvbmZpZz0xNjM9Y29uZmlnIFBSRUVNUFRJUlFfVFJBQ0VQT0lOVFNcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xNzgtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzoxNzk6Y29uZmlnIFRSQUNJTkdcbmtlcm5lbC90cmFjZS9LY29uZmlnLTE4MC1cdGJvb2xcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZz0xOTA9Y29uZmlnIEdFTkVSSUNfVFJBQ0VSXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWctMTk3LSNcbmtlcm5lbC90cmFjZS9LY29uZmlnOjE5ODpjb25maWcgVFJBQ0lOR19TVVBQT1JUXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xOTktXHRib29sXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9NzA3PWVuZGNob2ljZVxua2VybmVsL3RyYWNlL0tjb25maWctNzA4LVxua2VybmVsL3RyYWNlL0tjb25maWc6NzA5OmNvbmZpZyBUUkFDSU5HX0JSQU5DSEVTXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy03MTAtXHRib29sXG4tLVxua2VybmVsL3RyYWNlL0tjb25maWc9ODk1PWNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9SRUNPUkRNQ09VTlRcbi0tXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy05MDEtXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo5MDI6Y29uZmlnIFRSQUNJTkdfTUFQXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy05MDMtXHRib29sXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNzIwCgkJCQkJCQlvdXRwdXQ6IDE3MgoJCQkJCQkJdGhvdWdodHM6IDE0ODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQYXRjaCBmb3IgYHZtX2luc2VydF9wYWdlc2AqKgoKT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBgVFJBQ0lOR2Agc2VlbXMgc3RhbmRhcmQgZW5vdWdoLCBub3RoaW5nIHRvIHdvcnJ5IGFib3V0IHRoZXJlLiBOb3csIGxldCYjMzk7cyBjb25zaWRlciB0aGUgYENPTkZJR19NTVVgIGRlcGVuZGVuY3kuIExvb2tpbmcgYXQgYG1tL21lbW9yeS5jYCwgdGhlIGRlZmluaXRpb24gb2YgYHZtX2luc2VydF9wYWdlc2AgaXMgY29uZGl0aW9uYWwgb24gYENPTkZJR19NTVVgLCB3aGljaCBpcyB3aGF0IEkgd291bGQgZXhwZWN0LiBIb3dldmVyLCBgbW0vbm9tbXUuY2AgYWxzbyBoYXMgYSBgdm1faW5zZXJ0X3BhZ2VzYCwgd2hpY2ggcmV0dXJucyBgLUVJTlZBTGAuIFRoaXMgbWVhbnMgdG8gcHJvcGVybHkgdGVzdCB0aGUgY2hhbmdlcywgSSYjMzk7bGwgbmVlZCBgQ09ORklHX01NVWAgZW5hYmxlZCwgd2hpY2ggaXNuJiMzOTt0IGEgcHJvYmxlbSBzaW5jZSBpdCYjMzk7cyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQgb24gbW9kZXJuIGFyY2hpdGVjdHVyZXMuCgpJJiMzOTtsbCBhZGQgYElPX1VSSU5HYCB0byBgRW5hYmxlQ29uZmlnc2AgdG8ga2VlcCB0cmFjayBvZiB0aGF0LgoKTXkga2V5IGZvY3VzIHN5bWJvbHMgaGVyZSBhcmUgYHZtX2luc2VydF9wYWdlc2AsIGBpb191cmluZ19tbWFwYCwgYHRjcF96ZXJvY29weV9yZWNlaXZlYCwgYHJpbmdfYnVmZmVyX21hcGAsIGFuZCBgbW1hcF9hY3Rpb25fY29tcGxldGVgLgoKV2FpdCwgYG1tYXBfYWN0aW9uX2NvbXBsZXRlYCBpcyBpbiBgbW0vdXRpbC5jYC4gR29vZCwgbGV0IG1lIGp1c3QgcXVpY2tseSBjb25maXJtIHRoYXQgaXQmIzM5O3MgcmVhY2hhYmxlLiBZZXMsIGl0JiMzOTtzIGNhbGxlZCBieSBgX19tbWFwX3JlZ2lvbmAuCgpOb3csIGJhY2sgdG8gdGhlIHBhdGNoIGl0c2VsZi4gSSYjMzk7bSBzZWVpbmcgY2hhbmdlcyB0byBlcnJvciBoYW5kbGluZyBpbiBgdm1faW5zZXJ0X3BhZ2VzYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBub3cgY29ycmVjdGx5IHJldHVybnMgYC1FTk9NRU1gIHdoZW4gcGFnZSB0YWJsZSBhbGxvY2F0aW9uIGZhaWxzIGFuZCBzZXRzIHRoZSBjb3JyZWN0IHJldHVybiBjb2RlcyB0aHJvdWdob3V0IHRoZSBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSBjb3VsZCByZXR1cm4gYC1FRkFVTFRgIGluIGNhc2VzIHdoZXJlIGAtRU5PTUVNYCB3YXMgbW9yZSBhcHByb3ByaWF0ZSwgZXNwZWNpYWxseSB3aGVuIGB3YWxrX3RvX3BtZGAgb3IgYHB0ZV9hbGxvY2AgZmFpbC4gVGhlIGNoYW5nZSBhbHNvIGluY2x1ZGVzIGEgcmVuYW1lIG9mIGB3YWxrX3RvX3BtZGAgdG8gYHBvcHVsYXRlX3RvX3BtZGAuCgpTbyB0aGUgcGF0Y2ggZml4ZXMgYSBidWcgd2hlcmUgYC1FRkFVTFRgIHdhcyByZXR1cm5lZCBpbnN0ZWFkIG9mIGAtRU5PTUVNYCBpbiBzZXZlcmFsIHNpdHVhdGlvbnMuIFNwZWNpZmljYWxseSwgaWYgYHdhbGtfdG9fcG1kYCBmYWlsZWQsIHRoZSBmdW5jdGlvbiBub3cgcmV0dXJucyBgLUVOT01FTWAgaW5zdGVhZCBvZiBgLUVGQVVMVGAuIFRoZSBzYW1lIGlzIHRydWUgZm9yIGBwdGVfYWxsb2NgLgoKTm93LCBpZiBhbGwgcGFnZXMgaW4gYSBiYXRjaCBhcmUgc3VjY2Vzc2Z1bGx5IGluc2VydGVkLCB0aGUgZnVuY3Rpb24gcmV0dXJucyAwLgoKQmFzZWQgb24gdGhpcyBhbmFseXNpcywgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLgoKSSYjMzk7bSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE3OjMzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtJT19VUklORyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZtX2luc2VydF9wYWdlcyYjMzQ7LAogICAgJiMzNDtpb191cmluZ19tbWFwJiMzNDssCiAgICAmIzM0O3RjcF96ZXJvY29weV9yZWNlaXZlJiMzNDssCiAgICAmIzM0O3JpbmdfYnVmZmVyX21hcCYjMzQ7LAogICAgJiMzNDttbWFwX2FjdGlvbl9jb21wbGV0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBpbnNlcnRfcGFnZXNgIHdoZW4gcGFnZSB0YWJsZSBhbGxvY2F0aW9uIGZhaWxzLCByZXR1cm5pbmcgYC1FTk9NRU1gIGluc3RlYWQgb2YgYC1FRkFVTFRgLiBJdCBhbHNvIHJlbmFtZXMgYHdhbGtfdG9fcG1kYCB0byBgcG9wdWxhdGVfdG9fcG1kYCB0byBiZXR0ZXIgcmVmbGVjdCBpdHMgYmVoYXZpb3IuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBjYWxsZXJzIG9mIGB2bV9pbnNlcnRfcGFnZXNgIHN1Y2ggYXMgaW9fdXJpbmcsIHRjcCB6ZXJvY29weSwgYW5kIHRyYWNlIHJpbmcgYnVmZmVycy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SU9fVVJJTkcmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2bV9pbnNlcnRfcGFnZXMmIzM0OywKICAgICYjMzQ7aW9fdXJpbmdfbW1hcCYjMzQ7LAogICAgJiMzNDt0Y3BfemVyb2NvcHlfcmVjZWl2ZSYjMzQ7LAogICAgJiMzNDtyaW5nX2J1ZmZlcl9tYXAmIzM0OywKICAgICYjMzQ7bW1hcF9hY3Rpb25fY29tcGxldGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBgaW5zZXJ0X3BhZ2VzYCB3aGVuIHBhZ2UgdGFibGUgYWxsb2NhdGlvbiBmYWlscywgcmV0dXJuaW5nIGAtRU5PTUVNYCBpbnN0ZWFkIG9mIGAtRUZBVUxUYC4gSXQgYWxzbyByZW5hbWVzIGB3YWxrX3RvX3BtZGAgdG8gYHBvcHVsYXRlX3RvX3BtZGAgdG8gYmV0dGVyIHJlZmxlY3QgaXRzIGJlaGF2aW9yLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGFmZmVjdHMgY2FsbGVycyBvZiBgdm1faW5zZXJ0X3BhZ2VzYCBzdWNoIGFzIGlvX3VyaW5nLCB0Y3AgemVyb2NvcHksIGFuZCB0cmFjZSByaW5nIGJ1ZmZlcnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMDo0OC44NDI3NzQ2NDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzc5MDIwMzYxNjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiSU9fVVJJTkdcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2bV9pbnNlcnRfcGFnZXNcIixcbiAgICBcImlvX3VyaW5nX21tYXBcIixcbiAgICBcInRjcF96ZXJvY29weV9yZWNlaXZlXCIsXG4gICAgXCJyaW5nX2J1ZmZlcl9tYXBcIixcbiAgICBcIm1tYXBfYWN0aW9uX2NvbXBsZXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBgaW5zZXJ0X3BhZ2VzYCB3aGVuIHBhZ2UgdGFibGUgYWxsb2NhdGlvbiBmYWlscywgcmV0dXJuaW5nIGAtRU5PTUVNYCBpbnN0ZWFkIG9mIGAtRUZBVUxUYC4gSXQgYWxzbyByZW5hbWVzIGB3YWxrX3RvX3BtZGAgdG8gYHBvcHVsYXRlX3RvX3BtZGAgdG8gYmV0dGVyIHJlZmxlY3QgaXRzIGJlaGF2aW9yLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBtZW1vcnkgbWFuYWdlbWVudCB0aGF0IGFmZmVjdHMgY2FsbGVycyBvZiBgdm1faW5zZXJ0X3BhZ2VzYCBzdWNoIGFzIGlvX3VyaW5nLCB0Y3AgemVyb2NvcHksIGFuZCB0cmFjZSByaW5nIGJ1ZmZlcnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMwOjQ4Ljg0Mjc4NDAzOVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE5MjE2NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMzM1ZWRjODQyYjIwNjA3ZjM0ZDc2OWM5ZTVmOTA4MDlmYjQ2YjE0MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyA1IDE3OjMwOjQ3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmNcXG5pbmRleCBmZjMzOGMyYWJlOTIzLi4xNjA5MzQ3OWQzNDEwIDEwMDY0NFxcbi0tLSBhL21tL21lbW9yeS5jXFxuKysrIGIvbW0vbWVtb3J5LmNcXG5AQCAtMjI2OCw3ICsyMjY4LDcgQEAgdm9pZCB6YXBfc3BlY2lhbF92bWFfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTCh6YXBfc3BlY2lhbF92bWFfcmFuZ2UpO1xcbiBcXG4tc3RhdGljIHBtZF90ICp3YWxrX3RvX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbitzdGF0aWMgcG1kX3QgKnBvcHVsYXRlX3RvX3BtZChzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbiB7XFxuIFxcdHBnZF90ICpwZ2Q7XFxuIFxcdHA0ZF90ICpwNGQ7XFxuQEAgLTIyOTMsNyArMjI5Myw3IEBAIHN0YXRpYyBwbWRfdCAqd2Fsa190b19wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4gcHRlX3QgKmdldF9sb2NrZWRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuIFxcdFxcdCAgICAgIHNwaW5sb2NrX3QgKipwdGwpXFxuIHtcXG4tXFx0cG1kX3QgKnBtZCA9IHdhbGtfdG9fcG1kKG1tLCBhZGRyKTtcXG4rXFx0cG1kX3QgKnBtZCA9IHBvcHVsYXRlX3RvX3BtZChtbSwgYWRkcik7XFxuIFxcbiBcXHRpZiAoIXBtZClcXG4gXFx0XFx0cmV0dXJuIE5VTEw7XFxuQEAgLTI0MzQsMjAgKzI0MzQsMjIgQEAgc3RhdGljIGludCBpbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0dW5zaWduZWQgbG9uZyBjdXJyX3BhZ2VfaWR4ID0gMDtcXG4gXFx0dW5zaWduZWQgbG9uZyByZW1haW5pbmdfcGFnZXNfdG90YWwgPSAqbnVtO1xcbiBcXHR1bnNpZ25lZCBsb25nIHBhZ2VzX3RvX3dyaXRlX2luX3BtZDtcXG4tXFx0aW50IHJldDtcXG4rXFx0aW50IGVyciA9IDA7XFxuIG1vcmU6XFxuLVxcdHJldCA9IC1FRkFVTFQ7XFxuLVxcdHBtZCA9IHdhbGtfdG9fcG1kKG1tLCBhZGRyKTtcXG4tXFx0aWYgKCFwbWQpXFxuK1xcdHBtZCA9IHBvcHVsYXRlX3RvX3BtZChtbSwgYWRkcik7XFxuK1xcdGlmICghcG1kKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuIFxcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcbiBcXHRwYWdlc190b193cml0ZV9pbl9wbWQgPSBtaW5fdCh1bnNpZ25lZCBsb25nLFxcbiBcXHRcXHRyZW1haW5pbmdfcGFnZXNfdG90YWwsIFBUUlNfUEVSX1BURSAtIHB0ZV9pbmRleChhZGRyKSk7XFxuIFxcbiBcXHQvKiBBbGxvY2F0ZSB0aGUgUFRFIGlmIG5lY2Vzc2FyeTsgdGFrZXMgUE1EIGxvY2sgb25jZSBvbmx5LiAqL1xcbi1cXHRyZXQgPSAtRU5PTUVNO1xcbi1cXHRpZiAocHRlX2FsbG9jKG1tLCBwbWQpKVxcbitcXHRpZiAocHRlX2FsbG9jKG1tLCBwbWQpKSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuIFxcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuIFxcbiBcXHR3aGlsZSAocGFnZXNfdG9fd3JpdGVfaW5fcG1kKSB7XFxuIFxcdFxcdGludCBwdGVfaWR4ID0gMDtcXG5AQCAtMjQ1NSwxNSArMjQ1NywxNCBAQCBzdGF0aWMgaW50IGluc2VydF9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbiBcXG4gXFx0XFx0c3RhcnRfcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBhZGRyLCBcXHUwMDI2cHRlX2xvY2spO1xcbiBcXHRcXHRpZiAoIXN0YXJ0X3B0ZSkge1xcbi1cXHRcXHRcXHRyZXQgPSAtRUZBVUxUO1xcbitcXHRcXHRcXHRlcnIgPSAtRUZBVUxUO1xcbiBcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0fVxcbiBcXHRcXHRmb3IgKHB0ZSA9IHN0YXJ0X3B0ZTsgcHRlX2lkeCBcXHUwMDNjIGJhdGNoX3NpemU7ICsrcHRlLCArK3B0ZV9pZHgpIHtcXG4tXFx0XFx0XFx0aW50IGVyciA9IGluc2VydF9wYWdlX2luX2JhdGNoX2xvY2tlZCh2bWEsIHB0ZSxcXG4tXFx0XFx0XFx0XFx0YWRkciwgcGFnZXNbY3Vycl9wYWdlX2lkeF0sIHByb3QpO1xcbitcXHRcXHRcXHRlcnIgPSBpbnNlcnRfcGFnZV9pbl9iYXRjaF9sb2NrZWQodm1hLCBwdGUsIGFkZHIsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdFxcdCAgcGFnZXNbY3Vycl9wYWdlX2lkeF0sIHByb3QpO1xcbiBcXHRcXHRcXHRpZiAodW5saWtlbHkoZXJyKSkge1xcbiBcXHRcXHRcXHRcXHRwdGVfdW5tYXBfdW5sb2NrKHN0YXJ0X3B0ZSwgcHRlX2xvY2spO1xcbi1cXHRcXHRcXHRcXHRyZXQgPSBlcnI7XFxuIFxcdFxcdFxcdFxcdHJlbWFpbmluZ19wYWdlc190b3RhbCAtPSBwdGVfaWR4O1xcbiBcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4gXFx0XFx0XFx0fVxcbkBAIC0yNDc2LDEwICsyNDc3LDkgQEAgc3RhdGljIGludCBpbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0fVxcbiBcXHRpZiAocmVtYWluaW5nX3BhZ2VzX3RvdGFsKVxcbiBcXHRcXHRnb3RvIG1vcmU7XFxuLVxcdHJldCA9IDA7XFxuIG91dDpcXG4gXFx0Km51bSA9IHJlbWFpbmluZ19wYWdlc190b3RhbDtcXG4tXFx0cmV0dXJuIHJldDtcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gLyoqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMwOjQ5LjI2MjY0ODEyNloiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjEzNzQ4MjE1MzE5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtX2luc2VydF9wYWdlc1wiLFxuICAgIFwiaW9fdXJpbmdfbW1hcFwiLFxuICAgIFwidGNwX3plcm9jb3B5X3JlY2VpdmVcIixcbiAgICBcInJpbmdfYnVmZmVyX21hcFwiLFxuICAgIFwibW1hcF9hY3Rpb25fY29tcGxldGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBpbnNlcnRfcGFnZXNgIHdoZW4gcGFnZSB0YWJsZSBhbGxvY2F0aW9uIGZhaWxzLCByZXR1cm5pbmcgYC1FTk9NRU1gIGluc3RlYWQgb2YgYC1FRkFVTFRgLiBJdCBhbHNvIHJlbmFtZXMgYHdhbGtfdG9fcG1kYCB0byBgcG9wdWxhdGVfdG9fcG1kYCB0byBiZXR0ZXIgcmVmbGVjdCBpdHMgYmVoYXZpb3IuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBjYWxsZXJzIG9mIGB2bV9pbnNlcnRfcGFnZXNgIHN1Y2ggYXMgaW9fdXJpbmcsIHRjcCB6ZXJvY29weSwgYW5kIHRyYWNlIHJpbmcgYnVmZmVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzM1ZWRjODQyYjIwNjA3ZjM0ZDc2OWM5ZTVmOTA4MDlmYjQ2YjE0MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTc6MzA6NDcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1vcnkuYyBiL21tL21lbW9yeS5jXG5pbmRleCBmZjMzOGMyYWJlOTIzLi4xNjA5MzQ3OWQzNDEwIDEwMDY0NFxuLS0tIGEvbW0vbWVtb3J5LmNcbisrKyBiL21tL21lbW9yeS5jXG5AQCAtMjI2OCw3ICsyMjY4LDcgQEAgdm9pZCB6YXBfc3BlY2lhbF92bWFfcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoemFwX3NwZWNpYWxfdm1hX3JhbmdlKTtcbiBcbi1zdGF0aWMgcG1kX3QgKndhbGtfdG9fcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4rc3RhdGljIHBtZF90ICpwb3B1bGF0ZV90b19wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcbiB7XG4gXHRwZ2RfdCAqcGdkO1xuIFx0cDRkX3QgKnA0ZDtcbkBAIC0yMjkzLDcgKzIyOTMsNyBAQCBzdGF0aWMgcG1kX3QgKndhbGtfdG9fcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4gcHRlX3QgKmdldF9sb2NrZWRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRcdCAgICAgIHNwaW5sb2NrX3QgKipwdGwpXG4ge1xuLVx0cG1kX3QgKnBtZCA9IHdhbGtfdG9fcG1kKG1tLCBhZGRyKTtcbitcdHBtZF90ICpwbWQgPSBwb3B1bGF0ZV90b19wbWQobW0sIGFkZHIpO1xuIFxuIFx0aWYgKCFwbWQpXG4gXHRcdHJldHVybiBOVUxMO1xuQEAgLTI0MzQsMjAgKzI0MzQsMjIgQEAgc3RhdGljIGludCBpbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcdHVuc2lnbmVkIGxvbmcgY3Vycl9wYWdlX2lkeCA9IDA7XG4gXHR1bnNpZ25lZCBsb25nIHJlbWFpbmluZ19wYWdlc190b3RhbCA9ICpudW07XG4gXHR1bnNpZ25lZCBsb25nIHBhZ2VzX3RvX3dyaXRlX2luX3BtZDtcbi1cdGludCByZXQ7XG4rXHRpbnQgZXJyID0gMDtcbiBtb3JlOlxuLVx0cmV0ID0gLUVGQVVMVDtcbi1cdHBtZCA9IHdhbGtfdG9fcG1kKG1tLCBhZGRyKTtcbi1cdGlmICghcG1kKVxuK1x0cG1kID0gcG9wdWxhdGVfdG9fcG1kKG1tLCBhZGRyKTtcbitcdGlmICghcG1kKSB7XG4rXHRcdGVyciA9IC1FTk9NRU07XG4gXHRcdGdvdG8gb3V0O1xuK1x0fVxuIFxuIFx0cGFnZXNfdG9fd3JpdGVfaW5fcG1kID0gbWluX3QodW5zaWduZWQgbG9uZyxcbiBcdFx0cmVtYWluaW5nX3BhZ2VzX3RvdGFsLCBQVFJTX1BFUl9QVEUgLSBwdGVfaW5kZXgoYWRkcikpO1xuIFxuIFx0LyogQWxsb2NhdGUgdGhlIFBURSBpZiBuZWNlc3Nhcnk7IHRha2VzIFBNRCBsb2NrIG9uY2Ugb25seS4gKi9cbi1cdHJldCA9IC1FTk9NRU07XG4tXHRpZiAocHRlX2FsbG9jKG1tLCBwbWQpKVxuK1x0aWYgKHB0ZV9hbGxvYyhtbSwgcG1kKSkge1xuK1x0XHRlcnIgPSAtRU5PTUVNO1xuIFx0XHRnb3RvIG91dDtcbitcdH1cbiBcbiBcdHdoaWxlIChwYWdlc190b193cml0ZV9pbl9wbWQpIHtcbiBcdFx0aW50IHB0ZV9pZHggPSAwO1xuQEAgLTI0NTUsMTUgKzI0NTcsMTQgQEAgc3RhdGljIGludCBpbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcbiBcbiBcdFx0c3RhcnRfcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayhtbSwgcG1kLCBhZGRyLCBcdTAwMjZwdGVfbG9jayk7XG4gXHRcdGlmICghc3RhcnRfcHRlKSB7XG4tXHRcdFx0cmV0ID0gLUVGQVVMVDtcbitcdFx0XHRlcnIgPSAtRUZBVUxUO1xuIFx0XHRcdGdvdG8gb3V0O1xuIFx0XHR9XG4gXHRcdGZvciAocHRlID0gc3RhcnRfcHRlOyBwdGVfaWR4IFx1MDAzYyBiYXRjaF9zaXplOyArK3B0ZSwgKytwdGVfaWR4KSB7XG4tXHRcdFx0aW50IGVyciA9IGluc2VydF9wYWdlX2luX2JhdGNoX2xvY2tlZCh2bWEsIHB0ZSxcbi1cdFx0XHRcdGFkZHIsIHBhZ2VzW2N1cnJfcGFnZV9pZHhdLCBwcm90KTtcbitcdFx0XHRlcnIgPSBpbnNlcnRfcGFnZV9pbl9iYXRjaF9sb2NrZWQodm1hLCBwdGUsIGFkZHIsXG4rXHRcdFx0XHRcdFx0XHQgIHBhZ2VzW2N1cnJfcGFnZV9pZHhdLCBwcm90KTtcbiBcdFx0XHRpZiAodW5saWtlbHkoZXJyKSkge1xuIFx0XHRcdFx0cHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0ZV9sb2NrKTtcbi1cdFx0XHRcdHJldCA9IGVycjtcbiBcdFx0XHRcdHJlbWFpbmluZ19wYWdlc190b3RhbCAtPSBwdGVfaWR4O1xuIFx0XHRcdFx0Z290byBvdXQ7XG4gXHRcdFx0fVxuQEAgLTI0NzYsMTAgKzI0NzcsOSBAQCBzdGF0aWMgaW50IGluc2VydF9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuIFx0fVxuIFx0aWYgKHJlbWFpbmluZ19wYWdlc190b3RhbClcbiBcdFx0Z290byBtb3JlO1xuLVx0cmV0ID0gMDtcbiBvdXQ6XG4gXHQqbnVtID0gcmVtYWluaW5nX3BhZ2VzX3RvdGFsO1xuLVx0cmV0dXJuIHJldDtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIC8qKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6MzA6NDkuMjYyNjQ5NDY2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzcyNTU2NzQ1MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggZm9yIGBtbS9tZW1vcnkuY2AuIEl0IHNlZW1zIHRoZXkncmUgcmVuYW1pbmcgYHdhbGtfdG9fcG1kYCB0byBgcG9wdWxhdGVfdG9fcG1kYCwgd2hpY2ggaXMgYW4gaW50ZXJlc3Rpbmcgc2VtYW50aWMgc2hpZnQuIEknbGwgbmVlZCB0byB0aGluayBhYm91dCB0aGUgaW1wbGljYXRpb25zIG9mIHRoYXQgcmVuYW1lIGxhdGVyOyBmb3Igbm93LCBJIG5lZWQgdG8gZm9jdXMgb24gdGhlIHJldHVybiB2YWx1ZXMuIEl0IGFsc28gc2VlbXMgdGhleSd2ZSBjaGFuZ2VkIGhvdyBgaW5zZXJ0X3BhZ2VzYCBoYW5kbGVzIGVycm9ycyBmcm9tIGBwb3B1bGF0ZV90b19wbWRgIChvcmlnaW5hbGx5IGB3YWxrX3RvX3BtZGApLCBtYWtpbmcgaXQgcmV0dXJuIGAtRU5PTUVNYCBpbnN0ZWFkIG9mIGAtRUZBVUxUYCBvbiBmYWlsdXJlLiBUaGV5J3ZlIGFsc28gY2xlYW5lZCB1cCB0aGUgZXJyb3IgcmV0dXJucyBmcm9tIHRoZSBwYXRjaCwgYW5kIEkndmUgcXVpY2tseSBjb25maXJtZWQgdGhhdCBgcHRlX2FsbG9jYCBzaG91bGQgYmUgYC1FTk9NRU1gLCBhbmQgYHB0ZV9vZmZzZXRfbWFwX2xvY2tgIHNob3VsZCBiZSBgLUVGQVVMVGAgKGFzIGl0IG9yaWdpbmFsbHkgd2FzKS5cblxuV2FpdCBhIHNlY29uZOKApiB0aGUgY2hhbmdlIGZyb20gYC1FRkFVTFRgIHRvIGAtRU5PTUVNYCBmb3IgdGhlIGBwb3B1bGF0ZV90b19wbWRgIGZhaWx1cmUuIFRoYXQncyB0aGUga2V5LiBXaHkgdGhlIGNoYW5nZT8gSXMgdGhpcyBhIHN0YW5kYXJkaXNhdGlvbiBpc3N1ZSwgb3IgaXMgaXQgcmVsYXRlZCB0byBtZW1vcnkgZXhoYXVzdGlvbj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2h5IHRoaXMgd2FzIGNoYW5nZWQuIEknbSBnb2luZyB0byBsb29rIGF0IHRoZSBvdGhlciBjaGFuZ2VzIGluIHRoZSBwYXRjaCBhbmQgY29uc2lkZXIgaG93IGl0IGltcGFjdHMgdGhlIG90aGVyIGNvZGUgdGhhdCBjYWxscyBgaW5zZXJ0X3BhZ2VzYC4gTGV0J3Mgc2VlIHdoZXJlIHRoYXQgZnVuY3Rpb24gaXMgYWN0dWFsbHkgdXNlZCwgc28gSSdsbCBncmFiIGBncmVwcGVyYCBhbmQgZ2V0IGEgY2FsbCBncmFwaC4gSSdsbCBtYWtlIHN1cmUgdG8gbm90ZSB0aGlzIGNoYW5nZSBpbiBwYXJ0aWN1bGFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyOTAzLCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQ1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6MzA6NTYuOTg4MjE5NjI2WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5ODg2Nzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImluc2VydF9wYWdlc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnkuYz0yNDEzPXN0YXRpYyBpbnQgaW5zZXJ0X3BhZ2VfaW5fYmF0Y2hfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwdGVfdCAqcHRlLFxcbi0tXFxubW0vbWVtb3J5LmMtMjQyMy1cXG5tbS9tZW1vcnkuYzoyNDI0Oi8qIGluc2VydF9wYWdlcygpIGFtb3J0aXplcyB0aGUgY29zdCBvZiBzcGlubG9jayBvcGVyYXRpb25zXFxubW0vbWVtb3J5LmMtMjQyNS0gKiB3aGVuIGluc2VydGluZyBwYWdlcyBpbiBhIGxvb3AuXFxubW0vbWVtb3J5LmMtMjQyNi0gKi9cXG5tbS9tZW1vcnkuYzoyNDI3OnN0YXRpYyBpbnQgaW5zZXJ0X3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vbWVtb3J5LmMtMjQyOC1cXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBsb25nICpudW0sIHBncHJvdF90IHByb3QpXFxuLS1cXG5tbS9tZW1vcnkuYy0yNDg1LS8qKlxcbm1tL21lbW9yeS5jOjI0ODY6ICogdm1faW5zZXJ0X3BhZ2VzIC0gaW5zZXJ0IG11bHRpcGxlIHBhZ2VzIGludG8gdXNlciB2bWEsIGJhdGNoaW5nIHRoZSBwbWQgbG9jay5cXG5tbS9tZW1vcnkuYy0yNDg3LSAqIEB2bWE6IHVzZXIgdm1hIHRvIG1hcCB0b1xcbi0tXFxubW0vbWVtb3J5LmMtMjQ5OS0gKi9cXG5tbS9tZW1vcnkuYzoyNTAwOmludCB2bV9pbnNlcnRfcGFnZXMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5tbS9tZW1vcnkuYy0yNTAxLVxcdFxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGxvbmcgKm51bSlcXG4tLVxcbm1tL21lbW9yeS5jLTI1MTMtXFx0LyogRGVmZXIgcGFnZSByZWZjb3VudCBjaGVja2luZyB0aWxsIHdlJ3JlIGFib3V0IHRvIG1hcCB0aGF0IHBhZ2UuICovXFxubW0vbWVtb3J5LmM6MjUxNDpcXHRyZXR1cm4gaW5zZXJ0X3BhZ2VzKHZtYSwgYWRkciwgcGFnZXMsIG51bSwgdm1hLVxcdTAwM2V2bV9wYWdlX3Byb3QpO1xcbm1tL21lbW9yeS5jLTI1MTUtfVxcbm1tL21lbW9yeS5jOjI1MTY6RVhQT1JUX1NZTUJPTCh2bV9pbnNlcnRfcGFnZXMpO1xcbm1tL21lbW9yeS5jLTI1MTctXFxuLS1cXG5tbS9tZW1vcnkuYz0yNTM5PWludCBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vbWVtb3J5LmMtMjU0NC1cXHRucl9wYWdlcyA9IGFjdGlvbi1cXHUwMDNlbWFwX2tlcm5lbC5ucl9wYWdlcztcXG5tbS9tZW1vcnkuYzoyNTQ1OlxcdHJldHVybiBpbnNlcnRfcGFnZXModm1hLCBhY3Rpb24tXFx1MDAzZW1hcF9rZXJuZWwuc3RhcnQsXFxubW0vbWVtb3J5LmMtMjU0Ni1cXHRcXHRcXHQgICAgYWN0aW9uLVxcdTAwM2VtYXBfa2VybmVsLnBhZ2VzLFxcbi0tXFxubW0vbWVtb3J5LmM9MjYwOD1zdGF0aWMgaW50IF9fdm1fbWFwX3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbi0tXFxubW0vbWVtb3J5LmMtMjYyMS1cXG5tbS9tZW1vcnkuYzoyNjIyOlxcdHJldHVybiB2bV9pbnNlcnRfcGFnZXModm1hLCB1YWRkciwgcGFnZXMgKyBvZmZzZXQsIFxcdTAwMjZjb3VudCk7XFxubW0vbWVtb3J5LmMtMjYyMy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMwOjU3LjAzODExMTg4MVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI4OTI4OTU0MDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOlxuXG4qKlRyYWNpbmcgdGhlIFVzYWdlIG9mIGB2bV9pbnNlcnRfcGFnZXNgKipcblxuT2theSwgc28gYGluc2VydF9wYWdlc2AgZ2V0cyBjYWxsZWQgYnkgYHZtX2luc2VydF9wYWdlc2AgYW5kIGBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlYC4gVGhhdCBzZWVtcyBzdHJhaWdodGZvcndhcmQuIE5vdywgdGhlIGludGVyZXN0aW5nIHRoaW5nIGhlcmUgaXMgdGhhdCBgdm1faW5zZXJ0X3BhZ2VzYCBpcyBhY3R1YWxseSBleHBvcnRlZC4gVGhpcyBpcyBhIGtleSBkZXRhaWwuIFRoYXQgbWVhbnMgaXQncyBhdmFpbGFibGUgdG8gb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCwgcG90ZW50aWFsbHkgZXZlbiBtb2R1bGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hlcmUqIHRoYXQgZXhwb3J0ZWQgZnVuY3Rpb24gaXMgYmVpbmcgdXNlZC4gV2hlcmUgYXJlIHRoZSBjYWxsIHNpdGVzIG9mIGB2bV9pbnNlcnRfcGFnZXNgIGl0c2VsZj8gVGhhdCdzIHRoZSBjb3JlIHF1ZXN0aW9uIG5vdy4gTGV0J3MgZGlnIGluIGFuZCBmaW5kIG91dC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDE0OCwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMwOjU5LjkzMTAwOTU1MVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzQwNDk5MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtX2luc2VydF9wYWdlc1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYz00Mzk9c3RhdGljIGludCBhbWR4ZG5hX2luc2VydF9wYWdlcyhzdHJ1Y3QgYW1keGRuYV9nZW1fb2JqICphYm8sXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy00NTUtXFx0XFx0dm1fZmxhZ3NfbW9kKHZtYSwgVk1fTUlYRURNQVAsIFZNX1BGTk1BUCk7XFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmM6NDU2OlxcdFxcdHJldCA9IHZtX2luc2VydF9wYWdlcyh2bWEsIHZtYS1cXHUwMDNldm1fc3RhcnQsIGFiby1cXHUwMDNlYmFzZS5wYWdlcyxcXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy00NTctXFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNm51bV9wYWdlcyk7XFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYz01MjI9c3RhdGljIGludCBhbWR4ZG5hX2dlbV9kbWFidWZfbW1hcChzdHJ1Y3QgZG1hX2J1ZiAqZG1hX2J1Ziwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy01MzgtXFx0dm1fZmxhZ3NfbW9kKHZtYSwgVk1fTUlYRURNQVAsIFZNX1BGTk1BUCk7XFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmM6NTM5OlxcdHJldCA9IHZtX2luc2VydF9wYWdlcyh2bWEsIHZtYS1cXHUwMDNldm1fc3RhcnQsIGFiby1cXHUwMDNlYmFzZS5wYWdlcyxcXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy01NDAtXFx0XFx0XFx0ICAgICAgXFx1MDAyNm51bV9wYWdlcyk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21tLmg9NDUzNT1pbnQgdm1faW5zZXJ0X3BhZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IHBhZ2UgKik7XFxuaW5jbHVkZS9saW51eC9tbS5oOjQ1MzY6aW50IHZtX2luc2VydF9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbmluY2x1ZGUvbGludXgvbW0uaC00NTM3LVxcdFxcdFxcdHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGxvbmcgKm51bSk7XFxuLS1cXG5pb191cmluZy9tZW1tYXAuYz0yODQ9c3RhdGljIGludCBpb19yZWdpb25fbW1hcChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTI5MS1cXHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EKTtcXG5pb191cmluZy9tZW1tYXAuYzoyOTI6XFx0cmV0dXJuIHZtX2luc2VydF9wYWdlcyh2bWEsIHZtYS1cXHUwMDNldm1fc3RhcnQsIG1yLVxcdTAwM2VwYWdlcywgXFx1MDAyNm5yX3BhZ2VzKTtcXG5pb191cmluZy9tZW1tYXAuYy0yOTMtfVxcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM9NzYxMz1zdGF0aWMgaW50IF9fcmJfbWFwX3ZtYShzdHJ1Y3QgcmluZ19idWZmZXJfcGVyX2NwdSAqY3B1X2J1ZmZlcixcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc3MDEtXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmM6NzcwMjpcXHRlcnIgPSB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXFx1MDAzZXZtX3N0YXJ0LCBwYWdlcywgXFx1MDAyNm5yX3BhZ2VzKTtcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03NzAzLVxcbi0tXFxubW0vbWVtb3J5LmM9MjQyNz1zdGF0aWMgaW50IGluc2VydF9wYWdlcyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vbWVtb3J5LmMtMjQ4NS0vKipcXG5tbS9tZW1vcnkuYzoyNDg2OiAqIHZtX2luc2VydF9wYWdlcyAtIGluc2VydCBtdWx0aXBsZSBwYWdlcyBpbnRvIHVzZXIgdm1hLCBiYXRjaGluZyB0aGUgcG1kIGxvY2suXFxubW0vbWVtb3J5LmMtMjQ4Ny0gKiBAdm1hOiB1c2VyIHZtYSB0byBtYXAgdG9cXG4tLVxcbm1tL21lbW9yeS5jLTI0OTktICovXFxubW0vbWVtb3J5LmM6MjUwMDppbnQgdm1faW5zZXJ0X3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vbWVtb3J5LmMtMjUwMS1cXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzLCB1bnNpZ25lZCBsb25nICpudW0pXFxuLS1cXG5tbS9tZW1vcnkuYy0yNTE1LX1cXG5tbS9tZW1vcnkuYzoyNTE2OkVYUE9SVF9TWU1CT0wodm1faW5zZXJ0X3BhZ2VzKTtcXG5tbS9tZW1vcnkuYy0yNTE3LVxcbi0tXFxubW0vbWVtb3J5LmM9MjYwOD1zdGF0aWMgaW50IF9fdm1fbWFwX3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbi0tXFxubW0vbWVtb3J5LmMtMjYyMS1cXG5tbS9tZW1vcnkuYzoyNjIyOlxcdHJldHVybiB2bV9pbnNlcnRfcGFnZXModm1hLCB1YWRkciwgcGFnZXMgKyBvZmZzZXQsIFxcdTAwMjZjb3VudCk7XFxubW0vbWVtb3J5LmMtMjYyMy19XFxuLS1cXG5tbS9ub21tdS5jPTM1MD1FWFBPUlRfU1lNQk9MKHZtX2luc2VydF9wYWdlKTtcXG5tbS9ub21tdS5jLTM1MS1cXG5tbS9ub21tdS5jOjM1MjppbnQgdm1faW5zZXJ0X3BhZ2VzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vbm9tbXUuYy0zNTMtXFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlcywgdW5zaWduZWQgbG9uZyAqbnVtKVxcbi0tXFxubW0vbm9tbXUuYy0zNTYtfVxcbm1tL25vbW11LmM6MzU3OkVYUE9SVF9TWU1CT0wodm1faW5zZXJ0X3BhZ2VzKTtcXG5tbS9ub21tdS5jLTM1OC1cXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTIwNjI9c3RhdGljIGludCB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoX2Vycm9yKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjA4OC1cXHRcXHQvKiBXZSBjYWxsZWQgemFwX3ZtYV9yYW5nZSwgdHJ5IHRvIHJlaW5zZXJ0LiAqL1xcbm5ldC9pcHY0L3RjcC5jOjIwODk6XFx0XFx0ZXJyID0gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgKmFkZHJlc3MsXFxubmV0L2lwdjQvdGNwLmMtMjA5MC1cXHRcXHRcXHRcXHQgICAgICBwZW5kaW5nX3BhZ2VzLFxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjExMD1zdGF0aWMgaW50IHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yMTIzLVxcbm5ldC9pcHY0L3RjcC5jOjIxMjQ6XFx0ZXJyID0gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgKmFkZHJlc3MsIHBhZ2VzLCBcXHUwMDI2cGFnZXNfcmVtYWluaW5nKTtcXG5uZXQvaXB2NC90Y3AuYy0yMTI1LVxcdHBhZ2VzX21hcHBlZCA9IHBhZ2VzX3RvX21hcCAtICh1bnNpZ25lZCBpbnQpcGFnZXNfcmVtYWluaW5nO1xcbm5ldC9pcHY0L3RjcC5jLTIxMjYtXFx0Ynl0ZXNfbWFwcGVkID0gUEFHRV9TSVpFICogcGFnZXNfbWFwcGVkO1xcbm5ldC9pcHY0L3RjcC5jOjIxMjc6XFx0LyogRXZlbiBpZiB2bV9pbnNlcnRfcGFnZXMgZmFpbHMsIGl0IG1heSBoYXZlIHBhcnRpYWxseSBzdWNjZWVkZWQgaW5cXG5uZXQvaXB2NC90Y3AuYy0yMTI4LVxcdCAqIG1hcHBpbmcgKHNvbWUgYnV0IG5vdCBhbGwgb2YgdGhlIHBhZ2VzKS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6MzE6MDEuNjcxNTE0NzhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTAyMzcyODk2MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGB2bV9pbnNlcnRfcGFnZXNgIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHRvdWNoZXMgYHZtX2luc2VydF9wYWdlc2AsIGEgZnVuY3Rpb24gdGhhdCdzIHVzZWQgaW4gc2V2ZXJhbCBrZXkgYXJlYXMg4oCTIGBpb191cmluZy9tZW1tYXAuY2AsIHRyYWNpbmcsIFRDUCB6ZXJvLWNvcHksIGFuZCBldmVuIEFNRCBHUFUgZHJpdmVycy4gVGhlIHBhdGNoIGZvY3VzZXMgb24gaG93IGBpbnNlcnRfcGFnZXNgIGhhbmRsZXMgZXJyb3JzLCBzcGVjaWZpY2FsbHkgd2hlbiBhbGxvY2F0aW5nIHBhZ2UgdGFibGUgZW50cmllcyAoUFRFcykuXG5cbkluaXRpYWxseSwgdGhlIGZ1bmN0aW9uIHNlZW1zIHRvIGhhdmUgYSBiaXQgb2YgYSBjb252b2x1dGVkIGVycm9yIGhhbmRsaW5nIHN0cmF0ZWd5LiBUaGUgb3JpZ2luYWwgY29kZSBzZXRzIGByZXRgIHRvIGAtRU5PTUVNYCwgdGhlbiBjaGVja3MgaWYgYHB0ZV9hbGxvY2Agc3VjY2VlZHMuIElmIG5vdCwgaXQganVtcHMgdG8gYG91dGAuIEhvd2V2ZXIsIGlmIGBwdGVfb2Zmc2V0X21hcF9sb2NrYCAqYWxzbyogZmFpbHMgbGF0ZXIsIGl0IGNoYW5nZXMgYHJldGAgdG8gYC1FRkFVTFRgLiBUaGUgcGF0Y2ggc2VlbXMgdG8gYmUgc3RyZWFtbGluaW5nIHRoaXMsIG1vdmluZyB0aGUgZXJyb3IgY2hlY2sgZm9yIGBwdGVfYWxsb2NgIGlubGluZSB3aXRoIHRoZSBhbGxvY2F0aW9uIGl0c2VsZiBhbmQgYXNzaWduaW5nIHRoZSBlcnJvciBjb2RlIHRvIGBlcnJgLiBUaGlzIHNlZW1zIG1vcmUgc3RyYWlnaHRmb3J3YXJkLlxuXG5IZXJlLCBpbiB0aGUgcmV2aXNlZCBjb2RlLCBgZXJyYCBpcyBpbml0aWFsaXplZCB0byAwLiBJbnNpZGUgdGhlIGB3aGlsZWAgbG9vcCwgaWYgYGluc2VydF9wYWdlX2luX2JhdGNoX2xvY2tlZGAgcmV0dXJucyBhbiBlcnJvciwgaXQgaXMgc3RvcmVkIGluIGBlcnJgLlxuXG5JIHRoZW4gc2VlIHRoYXQsIGluIHRoZSBvcmlnaW5hbCBjb2RlLCBgcmV0YCB3YXMgc2V0IHRvIGAtRUZBVUxUYCBhdCB0aGUgYmVnaW5uaW5nIG9mIHRoZSBgbW9yZTpgIGxhYmVsLiBIb3dldmVyLCBub3cgYGVycmAgaXMgaW5pdGlhbGl6ZWQgdG8gMC4gSW5zdGVhZCBvZiBgd2Fsa190b19wbWRgLCB0aGUgcGF0Y2hlZCBjb2RlIHVzZXMgYHBvcHVsYXRlX3RvX3BtZGAsIGFuZCwgaWYgYHBvcHVsYXRlX3RvX3BtZGAgZmFpbHMsIGAtRU5PTUVNYCBpcyBhc3NpZ25lZCB0byBgZXJyYC5cblxuSG9sZCBvbiBhIHNlYywgd2hhdCdzIHRoaXMgYHBvcHVsYXRlX3RvX3BtZGA/IEl0IGxvb2tzIGxpa2UgYSBzaW1wbGUgcmVuYW1lIG9mIGB3YWxrX3RvX3BtZGAuIE5vdywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGl0J3MgYSBzaW1wbGUgcmVuYW1lLiBMZXQncyBnbyBsb29rIGF0IGBtbS9tZW1vcnkuY2AgYXJvdW5kIGxpbmUgMjI2OCB0byBjb25maXJtLiBJdCBtaWdodCBsb29rIGxpa2UganVzdCBhIG5hbWUgY2hhbmdlLCBidXQgaXQncyBpbXBvcnRhbnQgdG8gbWFrZSBzdXJlIGl0IGZ1bmN0aW9ucyBhcyB0aGUgb2xkIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1ODcyLCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMxOjEyLjY5NTI0NTk2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzQyMjQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbW9yeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIyNjgsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIyNjg6XFx0fVxcbjIyNjk6XFx0RVhQT1JUX1NZTUJPTF9HUEwoemFwX3NwZWNpYWxfdm1hX3JhbmdlKTtcXG4yMjcwOlxcdFxcbjIyNzE6XFx0c3RhdGljIHBtZF90ICpwb3B1bGF0ZV90b19wbWQoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4yMjcyOlxcdHtcXG4yMjczOlxcdFxcdHBnZF90ICpwZ2Q7XFxuMjI3NDpcXHRcXHRwNGRfdCAqcDRkO1xcbjIyNzU6XFx0XFx0cHVkX3QgKnB1ZDtcXG4yMjc2OlxcdFxcdHBtZF90ICpwbWQ7XFxuMjI3NzpcXHRcXG4yMjc4OlxcdFxcdHBnZCA9IHBnZF9vZmZzZXQobW0sIGFkZHIpO1xcbjIyNzk6XFx0XFx0cDRkID0gcDRkX2FsbG9jKG1tLCBwZ2QsIGFkZHIpO1xcbjIyODA6XFx0XFx0aWYgKCFwNGQpXFxuMjI4MTpcXHRcXHRcXHRyZXR1cm4gTlVMTDtcXG4yMjgyOlxcdFxcdHB1ZCA9IHB1ZF9hbGxvYyhtbSwgcDRkLCBhZGRyKTtcXG4yMjgzOlxcdFxcdGlmICghcHVkKVxcbjIyODQ6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjI4NTpcXHRcXHRwbWQgPSBwbWRfYWxsb2MobW0sIHB1ZCwgYWRkcik7XFxuMjI4NjpcXHRcXHRpZiAoIXBtZClcXG4yMjg3OlxcdFxcdFxcdHJldHVybiBOVUxMO1xcbjIyODg6XFx0XFxuMjI4OTpcXHRcXHRWTV9CVUdfT04ocG1kX3RyYW5zX2h1Z2UoKnBtZCkpO1xcbjIyOTA6XFx0XFx0cmV0dXJuIHBtZDtcXG4yMjkxOlxcdH1cXG4yMjkyOlxcdFxcbjIyOTM6XFx0cHRlX3QgKmdldF9sb2NrZWRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuMjI5NDpcXHRcXHRcXHQgICAgICBzcGlubG9ja190ICoqcHRsKVxcbjIyOTU6XFx0e1xcbjIyOTY6XFx0XFx0cG1kX3QgKnBtZCA9IHBvcHVsYXRlX3RvX3BtZChtbSwgYWRkcik7XFxuMjI5NzpcXHRcXG4yMjk4OlxcdFxcdGlmICghcG1kKVxcbjIyOTk6XFx0XFx0XFx0cmV0dXJuIE5VTEw7XFxuMjMwMDpcXHRcXHRyZXR1cm4gcHRlX2FsbG9jX21hcF9sb2NrKG1tLCBwbWQsIGFkZHIsIHB0bCk7XFxuMjMwMTpcXHR9XFxuMjMwMjpcXHRcXG4yMzAzOlxcdHN0YXRpYyBib29sIHZtX21peGVkX3plcm9wYWdlX2FsbG93ZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuMjMwNDpcXHR7XFxuMjMwNTpcXHRcXHRWTV9XQVJOX09OX09OQ0Uodm1hLVxcdTAwM2V2bV9mbGFncyBcXHUwMDI2IFZNX1BGTk1BUCk7XFxuMjMwNjpcXHRcXHQvKlxcbjIzMDc6XFx0XFx0ICogV2hvZXZlciB3YW50cyB0byBmb3JiaWQgdGhlIHplcm9wYWdlIGFmdGVyIHNvbWUgemVyb3BhZ2VzXFxuMjMwODpcXHRcXHQgKiBtaWdodCBhbHJlYWR5IGhhdmUgYmVlbiBtYXBwZWQgaGFzIHRvIHNjYW4gdGhlIHBhZ2UgdGFibGVzIGFuZFxcbjIzMDk6XFx0XFx0ICogYmFpbCBvdXQgb24gYW55IHplcm9wYWdlcy4gWmVyb3BhZ2VzIGluIENPVyBtYXBwaW5ncyBjYW5cXG4yMzEwOlxcdFxcdCAqIGJlIHVuc2hhcmVkIHVzaW5nIEZBVUxUX0ZMQUdfVU5TSEFSRSBmYXVsdHMuXFxuMjMxMTpcXHRcXHQgKi9cXG4yMzEyOlxcdFxcdGlmIChtbV9mb3JiaWRzX3plcm9wYWdlKHZtYS1cXHUwMDNldm1fbW0pKVxcbjIzMTM6XFx0XFx0XFx0cmV0dXJuIGZhbHNlO1xcbjIzMTQ6XFx0XFx0LyogemVyb3BhZ2VzIGluIENPVyBtYXBwaW5ncyBhcmUgY29tbW9uIGFuZCB1bnByb2JsZW1hdGljLiAqL1xcbjIzMTU6XFx0XFx0aWYgKGlzX2Nvd19tYXBwaW5nKHZtYS1cXHUwMDNldm1fZmxhZ3MpKVxcbjIzMTY6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMjMxNzpcXHRcXHQvKiBNYXBwaW5ncyB0aGF0IGRvIG5vdCBhbGxvdyBmb3Igd3JpdGFibGUgUFRFcyBhcmUgdW5wcm9ibGVtYXRpYy4gKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6MzE6MTIuNjk1NTg5NzFaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2OTYxNjk5NDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGFnZSBUYWJsZSBQb3B1bGF0aW9uIExvZ2ljKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgcG9wdWxhdGVfdG9fcG1kYCBmdW5jdGlvbi4gVGhlIGNvZGUncyBhbGxvY2F0aW5nIHBhZ2UgdGFibGUgZW50cmllcyDigJMgUEdELCBQNEQsIFBVRCwgYW5kIFBNRC4gSXQncyBjbGVhcmx5ICpwb3B1bGF0aW5nKiB0aGUgcGFnZSB0YWJsZXMsIG5vdCBqdXN0IHRyYXZlcnNpbmcgdGhlbS4gVGhlIHJlbmFtZSBpcyBzcG90IG9uOyBpdCByZWZsZWN0cyB3aGF0J3MgYWN0dWFsbHkgaGFwcGVuaW5nLiAgQW5kIHNpbmNlIHdlJ3JlIGFsbG9jYXRpbmcgbWVtb3J5LCBpZiBhbnkgb2YgdGhlc2UgYWxsb2NhdGlvbnMgZmFpbCwgaXQncyBhbiBPdXQtT2YtTWVtb3J5IChPT00pIHNpdHVhdGlvbi4gUmV0dXJuaW5nIGAtRU5PTUVNYCBpbnN0ZWFkIG9mIGAtRUZBVUxUYCBtYWtlcyBwZXJmZWN0IHNlbnNlIGluIHRoaXMgY29udGV4dCDigJMgbXVjaCBtb3JlIGFjY3VyYXRlIGVycm9yIHJlcG9ydGluZy5cblxuVGhpcyBtZWFucyB0aGVyZSdzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIHJldHVybiB2YWx1ZSBvZiBgaW5zZXJ0X3BhZ2VzYC4gYGluc2VydF9wYWdlc2AgaXMgY2FsbGVkIGZyb20gYHZtX2luc2VydF9wYWdlc2AgYW5kIGBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlYC4gIEludGVyZXN0aW5nLiBMZXQgbWUgY2hlY2sgdGhlIGNhbGxlcnMgb2YgaW5zZXJ0X3BhZ2VzIHRvIHNlZSB3aGF0IG1pZ2h0IGJlIHJlYWNoYWJsZS4gYHZtX2luc2VydF9wYWdlc2AgaXMgdXNlZCBpbiBgaW9fdXJpbmcvbWVtbWFwLmNgLCBga2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmNgLCBhbmQgYG5ldC9pcHY0L3RjcC5jYC4gT2theSwgc28gdGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSBjb2RlLiBHaXZlbiB0aGUgcG90ZW50aWFsIGZvciBPT00gc2l0dWF0aW9ucywgZnV6emluZyB0aGVzZSBjYWxsIHNpdGVzIHNvdW5kcyBsaWtlIGEgdmVyeSBnb29kIGlkZWEuIFxuXG5MZXQncyBmb2N1cyBvbiBgaW9fdXJpbmcvbWVtbWFwLmNgIGFuZCBgbmV0L2lwdjQvdGNwLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgY2FsbCBzaXRlcyBjYW4gYmUgdHJpZ2dlcmVkLiBgaW9fcmVnaW9uX21tYXBgIGluIGBpb191cmluZy9tZW1tYXAuY2AgaXMgcmVhY2hhYmxlIHZpYSBgbW1hcGAgb24gYW4gYGlvX3VyaW5nYCBmaWxlIGRlc2NyaXB0b3IsIGFuZCBgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaGAgaW4gYG5ldC9pcHY0L3RjcC5jYCBpcyB0cmlnZ2VyZWQgYnkgVENQIHplcm8tY29weSByZWNlaXZlIG9wZXJhdGlvbnMuXG5cbkFscmlnaHQsIGxldCdzIHN0YXJ0IHdpdGggYGlvX3VyaW5nL21lbW1hcC5jYCBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBpb19yZWdpb25fbW1hcGAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwODEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOTgsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMToxOS42NTcyOTI2MDlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI5NDE1MjQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb19yZWdpb25fbW1hcFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpb191cmluZy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW9fdXJpbmcvbWVtbWFwLmM9MjcxPXN0YXRpYyB2b2lkICppb191cmluZ192YWxpZGF0ZV9tbWFwX3JlcXVlc3Qoc3RydWN0IGZpbGUgKmZpbGUsIGxvZmZfdCBwZ29mZilcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTI4My1cXG5pb191cmluZy9tZW1tYXAuYzoyODQ6c3RhdGljIGludCBpb19yZWdpb25fbW1hcChzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCxcXG5pb191cmluZy9tZW1tYXAuYy0yODUtXFx0XFx0XFx0ICBzdHJ1Y3QgaW9fbWFwcGVkX3JlZ2lvbiAqbXIsXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYz0yOTU9X19jb2xkIGludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jLTMxNy1cXHRyZWdpb24gPSBpb19tbWFwX2dldF9yZWdpb24oY3R4LCB2bWEtXFx1MDAzZXZtX3Bnb2ZmKTtcXG5pb191cmluZy9tZW1tYXAuYzozMTg6XFx0cmV0dXJuIGlvX3JlZ2lvbl9tbWFwKGN0eCwgcmVnaW9uLCB2bWEsIHBhZ2VfbGltaXQpO1xcbmlvX3VyaW5nL21lbW1hcC5jLTMxOS19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMxOjE5Ljk1MTQ1MTQ3OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTM5NzY0OTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSW52ZXN0aWdhdGluZyB0aGUgYGlvX3VyaW5nX21tYXBgIFBhdGgqKlxuXG5SaWdodCwgc28gYGlvX3VyaW5nX21tYXBgIGlzIGNhbGxpbmcgYGlvX3JlZ2lvbl9tbWFwYCwgd2hpY2gsIGluIHR1cm4sIGlzIGNhbGxpbmcgYHZtX2luc2VydF9wYWdlc2AuIFRoYXQncyBhIHByZXR0eSBsb3ctbGV2ZWwgZnVuY3Rpb24gY2FsbCBzZXF1ZW5jZS4gR2l2ZW4gaG93IGZ1bmRhbWVudGFsIGB2bV9pbnNlcnRfcGFnZXNgIGlzLCBhbmQgY29uc2lkZXJpbmcgaG93IG9mdGVuIEkndmUgc2VlbiBpdCB1c2VkIGluIG1lbW9yeSBtYW5hZ2VtZW50IGNvbnRleHRzLCBpdCdzIHNhZmUgdG8gYXNzdW1lIHRoaXMgYGlvX3VyaW5nX21tYXBgIHBhdGggaXMgKmhpZ2hseSogcmVhY2hhYmxlLiBBIHZlcnkgaW1wb3J0YW50IGNvbXBvbmVudCBvZiB0aGUgc3lzdGVtLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdCBiZXR0ZXIuXG5cbk5vdywgd2hlcmUgZWxzZSBtaWdodCB0aGlzIHRlY2huaXF1ZSwgb3Igc29tZXRoaW5nIHNpbWlsYXIsIGJlIGVtcGxveWVkPyBQZXJoYXBzIHRoZXJlIGFyZSBvdGhlciBpbnRlcmVzdGluZyBwbGFjZXMgdG8gbG9vayBmb3IgYSBzaW1pbGFyIHBhdHRlcm4uIFNwZWNpZmljYWxseSwgSSByZWNhbGwgdGhlIHplcm8tY29weSBvcGVyYXRpb25zIG9uIFRDUCBzb2NrZXRzLiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUgZm9yIGB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoYCBpbiBgbmV0L2lwdjQvdGNwLmNgLiBJdCdzIHBvc3NpYmxlIHRoZXJlIGlzIHNvbWUgY29tbW9uYWxpdHksIG9yIHBlcmhhcHMgSSBjYW4gc2VlIGhvdyB0aGV5IGFyZSBkaWZmZXJlbnQgaW4gdGhlaXIgcmVzcGVjdGl2ZSB1c2UgY2FzZXMuIEknbGwgc2VlIHdoYXQgSSBjYW4gbGVhcm4gYWJvdXQgdGhlaXIgcmVsYXRpb24gdG8gbWVtb3J5IG1hbmFnZW1lbnQgaW4gZ2VuZXJhbCwgYW5kIHBvdGVudGlhbGx5IGxvb2sgZm9yIHdheXMgdG8gb3B0aW1pemUgdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTE4MCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMxOjIzLjg5MTIxOTI5MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQ4MjMzMjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3AuYz0yMDM1PXN0YXRpYyBpbnQgdGNwX3pjX2hhbmRsZV9sZWZ0b3ZlcihzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjA2MS1cXG5uZXQvaXB2NC90Y3AuYzoyMDYyOnN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaF9lcnJvcihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5uZXQvaXB2NC90Y3AuYy0yMDYzLVxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBwYWdlICoqcGVuZGluZ19wYWdlcyxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTIxMDktXFxubmV0L2lwdjQvdGNwLmM6MjExMDpzdGF0aWMgaW50IHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubmV0L2lwdjQvdGNwLmMtMjExMS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgcGFnZSAqKnBhZ2VzLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjEzNi1cXHQvKiBFcnJvcjogbWF5YmUgemFwIGFuZCByZXRyeSArIHJvbGxiYWNrIHN0YXRlIGZvciBmYWlsZWQgaW5zZXJ0cy4gKi9cXG5uZXQvaXB2NC90Y3AuYzoyMTM3OlxcdHJldHVybiB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoX2Vycm9yKHZtYSwgcGFnZXMgKyBwYWdlc19tYXBwZWQsXFxubmV0L2lwdjQvdGNwLmMtMjEzOC1cXHRcXHRwYWdlc19yZW1haW5pbmcsIGFkZHJlc3MsIGxlbmd0aCwgc2VxLCB6YywgdG90YWxfYnl0ZXNfdG9fbWFwLFxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjE5NT1zdGF0aWMgaW50IHRjcF96ZXJvY29weV9yZWNlaXZlKHN0cnVjdCBzb2NrICpzayxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTIzMDEtXFx0XFx0XFx0ICovXFxubmV0L2lwdjQvdGNwLmM6MjMwMjpcXHRcXHRcXHRyZXQgPSB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoKHZtYSwgcGFnZXMsXFxubmV0L2lwdjQvdGNwLmMtMjMwMy1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBwYWdlc190b19tYXAsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yMzEyLVxcdGlmIChwYWdlc190b19tYXApIHtcXG5uZXQvaXB2NC90Y3AuYzoyMzEzOlxcdFxcdHJldCA9IHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2godm1hLCBwYWdlcywgcGFnZXNfdG9fbWFwLFxcbm5ldC9pcHY0L3RjcC5jLTIzMTQtXFx0XFx0XFx0XFx0XFx0XFx0ICAgXFx1MDAyNmFkZHJlc3MsIFxcdTAwMjZsZW5ndGgsIFxcdTAwMjZzZXEsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMxOjIzLjkzNjA0OTUyNloiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDEyNTI3NDc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBaZXJvLUNvcHkgVENQIFJlY2VpdmUqKlxuXG5Pa2F5LCBzbyBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIGlzIGV4cG9zZWQgdGhyb3VnaCBgZ2V0c29ja29wdChUQ1BfWkVST0NPUFlfUkVDRUlWRSlgLiBUaGF0J3Mgd2hlcmUgd2Ugc3RhcnQuIFRoaXMgcGF0Y2ggY2hhbmdlcyBob3cgYHZtX2luc2VydF9wYWdlc2AgYmVoYXZlcyBvbiBtZW1vcnkgYWxsb2NhdGlvbiBmYWlsdXJlLCByZXR1cm5pbmcgYC1FTk9NRU1gIGluc3RlYWQgb2YgYC1FRkFVTFRgLiBUaGF0J3MgYSBmdW5jdGlvbmFsIGNoYW5nZSwgc28gaXQncyBhIHByaW1lIHRhcmdldCBmb3IgZnV6emluZy5cblxuTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiB0aGVzZSBmdW5jdGlvbnM6IGB2bV9pbnNlcnRfcGFnZXNgLCBgaW9fdXJpbmdfbW1hcGAsIGFuZCBvZiBjb3Vyc2UsIGB0Y3BfemVyb2NvcHlfcmVjZWl2ZWAgaXRzZWxmLiBXYWl0IGEgbWludXRlLi4uIGB2bV9pbnNlcnRfcGFnZXNgIGlzIGV4cG9ydGVkPyBUaGF0IG1ha2VzIGl0IGFuIGV2ZW4gYmV0dGVyIHRhcmdldCEgQW5kIGl0IGxvb2tzIGxpa2UgYGluc2VydF9wYWdlc2AgaXMgdGhlIHN0YXRpYyB2YXJpYW50LCB3aGljaCBpcyB0aGUgb25lIGJlaW5nIGRpcmVjdGx5IG1vZGlmaWVkLiBQZXJmZWN0LiBMZXQncyBhZGQgYWxsIHRocmVlIHRvIHRoZSBmdXp6aW5nIHRhcmdldCBsaXN0LlxuXG5Ob3csIGxldCBtZSBkb3VibGUtY2hlY2sgZm9yIGFueSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYGlvX3VyaW5nYCByZXF1aXJlcyBgQ09ORklHX0lPX1VSSU5HYCwgb2J2aW91c2x5LiBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIG5lZWRzIGBDT05GSUdfSU5FVGAsIHdoaWNoIGlzIHByZXR0eSBzdGFuZGFyZCwgc28gd2UncmUgZ29vZCB0aGVyZS4gQW5kIGB2bV9pbnNlcnRfcGFnZXNgIGlzIGluIGBtbS9tZW1vcnkuY2AsIHdoaWNoIGlzIGFsd2F5cyBjb21waWxlZCBpbiwgc28gdGhhdCdzIGVhc3kuIFNvLCBlbmFibGluZyBgSU9fVVJJTkdgIHNlZW1zIGxpa2UgdGhlIHNtYXJ0IG1vdmUgaGVyZS5cblxuQWxyaWdodCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYGlvX3VyaW5nX21tYXBgIGluIGBpb191cmluZy9tZW1tYXAuY2AgYW5kIGJlZ2luIGNyYWZ0aW5nIHNvbWUgdGVzdCBjYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAwNjEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6MzE6MzQuMDYxMzI3MTU3WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODEyNjU4NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpb191cmluZ19tbWFwXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImlvX3VyaW5nL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpb191cmluZy9pb191cmluZy5jPTI3MDg9c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaW9fdXJpbmdfZm9wcyA9IHtcXG5pb191cmluZy9pb191cmluZy5jLTI3MDktXFx0LnJlbGVhc2VcXHQ9IGlvX3VyaW5nX3JlbGVhc2UsXFxuaW9fdXJpbmcvaW9fdXJpbmcuYzoyNzEwOlxcdC5tbWFwXFx0XFx0PSBpb191cmluZ19tbWFwLFxcbmlvX3VyaW5nL2lvX3VyaW5nLmMtMjcxMS1cXHQuZ2V0X3VubWFwcGVkX2FyZWEgPSBpb191cmluZ19nZXRfdW5tYXBwZWRfYXJlYSxcXG4tLVxcbmlvX3VyaW5nL21lbW1hcC5jPTI4ND1zdGF0aWMgaW50IGlvX3JlZ2lvbl9tbWFwKHN0cnVjdCBpb19yaW5nX2N0eCAqY3R4LFxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmMtMjk0LVxcbmlvX3VyaW5nL21lbW1hcC5jOjI5NTpfX2NvbGQgaW50IGlvX3VyaW5nX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmlvX3VyaW5nL21lbW1hcC5jLTI5Ni17XFxuLS1cXG5pb191cmluZy9tZW1tYXAuYz0zMjE9dW5zaWduZWQgbG9uZyBpb191cmluZ19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmMtMzcwLSAqIERyb3AgdGhlIHBhZ2VzIHRoYXQgd2VyZSBpbml0aWFsbHkgcmVmZXJlbmNlZCBhbmQgYWRkZWQgaW5cXG5pb191cmluZy9tZW1tYXAuYzozNzE6ICogaW9fdXJpbmdfbW1hcCgpLiBXZSBjYW5ub3QgaGF2ZSBoYWQgYSBtcmVtYXAoKSBhcyB0aGF0IGlzbid0IHN1cHBvcnRlZCxcXG5pb191cmluZy9tZW1tYXAuYy0zNzItICogaGVuY2UgdGhlIHZtYSBzaG91bGQgYmUgaWRlbnRpY2FsIHRvIHRoZSBvbmUgd2UgaW5pdGlhbGx5IHJlZmVyZW5jZWQgYW5kXFxuLS1cXG5pb191cmluZy9tZW1tYXAuYz0zODQ9c3RhdGljIGNvbnN0IHN0cnVjdCB2bV9vcGVyYXRpb25zX3N0cnVjdCBpb191cmluZ19ub21tdV92bV9vcHMgPSB7XFxuLS1cXG5pb191cmluZy9tZW1tYXAuYy0zODctXFxuaW9fdXJpbmcvbWVtbWFwLmM6Mzg4OmludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG5pb191cmluZy9tZW1tYXAuYy0zODkte1xcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmg9MTU9dW5zaWduZWQgbG9uZyBpb191cmluZ19nZXRfdW5tYXBwZWRfYXJlYShzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuaW9fdXJpbmcvbWVtbWFwLmgtMTctXFx0XFx0XFx0XFx0XFx0IHVuc2lnbmVkIGxvbmcgZmxhZ3MpO1xcbmlvX3VyaW5nL21lbW1hcC5oOjE4OmludCBpb191cmluZ19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxuaW9fdXJpbmcvbWVtbWFwLmgtMTktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMxOjM0LjEwOTQ1ODExMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjU4Mzc5MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJT19VUklORyBhbmQgWmVyby1Db3B5IFJlY2VwdGlvbioqXG5cbkFscmlnaHQsIHllcCwgY29uZmlybWVkOiBgaW9fdXJpbmdfbW1hcGAgaXMgKnRoZSogbW1hcCBoYW5kbGVyIGltcGxlbWVudGF0aW9uIHNwZWNpZmljYWxseSBmb3IgaW9fdXJpbmcuIFRoYXQncyBhIGdpdmVuLiBOb3csIGxldCdzIHBpdm90IGFuZCBkaWcgaW50byBgdGNwX3plcm9jb3B5X3JlY2VpdmVgLiBUaGUgaW1wbGljYXRpb24gaGVyZSBpcyB6ZXJvLWNvcHkgaW4gdGhlIFRDUCByZWNlaXZlIGNvbnRleHQuIEkgd2FudCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoZSBgaW9fdXJpbmdfbW1hcGAgaGFuZGxlciBmaXRzIGludG8gdGhhdCBwaWN0dXJlOyB0aGUgbWVtb3J5LW1hcHBlZCByZWdpb25zIGluIHBsYXkgYW5kIHRoZSBkYXRhIG1vdmVtZW50LCBvciBsYWNrIHRoZXJlb2YsIGFyZSB0aGUga2V5IGFzcGVjdHMgSSdtIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24uIFdlJ2xsIGJlIGxvb2tpbmcgYXQgaG93IHdlJ3JlIG1hcHBpbmcgdGhlIGJ1ZmZlcnMsIHBhc3NpbmcgdGhlbSB0byB0aGUga2VybmVsIGFuZCBob3cgdGhlIGRhdGEgaXMgcmVhZCBpbnRvIG1lbW9yeS4gVGhpcyBpcyB3aGVyZSB0aGUgbWFnaWMgaGFwcGVucywgb3IgZG9lc24ndCwgZGVwZW5kaW5nIG9uIGhvdyBpdCBpcyBpbXBsZW1lbnRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEyNzcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMTozOC43Njc4Mzk3MTJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MzI5MjY4NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfemVyb2NvcHlfcmVjZWl2ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvaXB2NC90Y3AuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvaXB2NC90Y3AuYz0xOTM1PXN0YXRpYyB2b2lkIHRjcF96ZXJvY29weV9zZXRfaGludF9mb3Jfc2tiKHN0cnVjdCBzb2NrICpzayxcXG5uZXQvaXB2NC90Y3AuYzoxOTM2OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YyxcXG5uZXQvaXB2NC90Y3AuYy0xOTM3LVxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTMyIG9mZnNldClcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTE5NzU9c3RhdGljIGludCByZWNlaXZlX2ZhbGxiYWNrX3RvX2NvcHkoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcC5jOjE5NzY6XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsIGludCBpbnEsXFxubmV0L2lwdjQvdGNwLmMtMTk3Ny1cXHRcXHRcXHRcXHQgICAgc3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgKnRzcylcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTIwMTAtXFxubmV0L2lwdjQvdGNwLmM6MjAxMTpzdGF0aWMgaW50IHRjcF9jb3B5X3N0cmFnZ2xlcl9kYXRhKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsXFxubmV0L2lwdjQvdGNwLmMtMjAxMi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgY29weWxlbixcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTIwMzQtXFxubmV0L2lwdjQvdGNwLmM6MjAzNTpzdGF0aWMgaW50IHRjcF96Y19oYW5kbGVfbGVmdG92ZXIoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YyxcXG5uZXQvaXB2NC90Y3AuYy0yMDM2LVxcdFxcdFxcdFxcdCAgc3RydWN0IHNvY2sgKnNrLFxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjA2Mj1zdGF0aWMgaW50IHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2hfZXJyb3Ioc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yMDY3LVxcdFxcdFxcdFxcdFxcdCAgICAgIHUzMiAqc2VxLFxcbm5ldC9pcHY0L3RjcC5jOjIwNjg6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YyxcXG5uZXQvaXB2NC90Y3AuYy0yMDY5LVxcdFxcdFxcdFxcdFxcdCAgICAgIHUzMiB0b3RhbF9ieXRlc190b19tYXAsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz0yMTEwPXN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTIxMTUtXFx0XFx0XFx0XFx0XFx0dTMyICpzZXEsXFxubmV0L2lwdjQvdGNwLmM6MjExNjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLFxcbm5ldC9pcHY0L3RjcC5jLTIxMTctXFx0XFx0XFx0XFx0XFx0dTMyIHRvdGFsX2J5dGVzX3RvX21hcClcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTIxNDM9c3RhdGljIHZvaWQgdGNwX3pjX2ZpbmFsaXplX3J4X3RzdGFtcChzdHJ1Y3Qgc29jayAqc2ssXFxubmV0L2lwdjQvdGNwLmM6MjE0NDpcXHRcXHRcXHRcXHQgICAgICBzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUgKnpjLFxcbm5ldC9pcHY0L3RjcC5jLTIxNDUtXFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgKnRzcylcXG4tLVxcbm5ldC9pcHY0L3RjcC5jPTIxNjk9c3RhdGljIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqZmluZF90Y3Bfdm1hKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbi0tXFxubmV0L2lwdjQvdGNwLmMtMjE5NC0jZGVmaW5lIFRDUF9aRVJPQ09QWV9QQUdFX0JBVENIX1NJWkUgMzJcXG5uZXQvaXB2NC90Y3AuYzoyMTk1OnN0YXRpYyBpbnQgdGNwX3plcm9jb3B5X3JlY2VpdmUoc3RydWN0IHNvY2sgKnNrLFxcbm5ldC9pcHY0L3RjcC5jOjIxOTY6XFx0XFx0XFx0XFx0c3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlICp6YyxcXG5uZXQvaXB2NC90Y3AuYy0yMTk3LVxcdFxcdFxcdFxcdHN0cnVjdCBzY21fdGltZXN0YW1waW5nX2ludGVybmFsICp0c3MpXFxuLS1cXG5uZXQvaXB2NC90Y3AuYz00NDgxPWludCBkb190Y3BfZ2V0c29ja29wdChzdHJ1Y3Qgc29jayAqc2ssIGludCBsZXZlbCxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQ3NDMtXFx0XFx0c3RydWN0IHNjbV90aW1lc3RhbXBpbmdfaW50ZXJuYWwgdHNzO1xcbm5ldC9pcHY0L3RjcC5jOjQ3NDQ6XFx0XFx0c3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlIHpjID0ge307XFxubmV0L2lwdjQvdGNwLmMtNDc0NS1cXHRcXHRpbnQgZXJyO1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDc0OS1cXHRcXHRpZiAobGVuIFxcdTAwM2MgMCB8fFxcbm5ldC9pcHY0L3RjcC5jOjQ3NTA6XFx0XFx0ICAgIGxlbiBcXHUwMDNjIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgbGVuZ3RoKSlcXG5uZXQvaXB2NC90Y3AuYy00NzUxLVxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbi0tXFxubmV0L2lwdjQvdGNwLmMtNDc2Ny1cXHRcXHRzb2Nrb3B0X2xvY2tfc29jayhzayk7XFxubmV0L2lwdjQvdGNwLmM6NDc2ODpcXHRcXHRlcnIgPSB0Y3BfemVyb2NvcHlfcmVjZWl2ZShzaywgXFx1MDAyNnpjLCBcXHUwMDI2dHNzKTtcXG5uZXQvaXB2NC90Y3AuYy00NzY5LVxcdFxcdGVyciA9IEJQRl9DR1JPVVBfUlVOX1BST0dfR0VUU09DS09QVF9LRVJOKHNrLCBsZXZlbCwgb3B0bmFtZSxcXG4tLVxcbm5ldC9pcHY0L3RjcC5jLTQ3NzEtXFx0XFx0c29ja29wdF9yZWxlYXNlX3NvY2soc2spO1xcbm5ldC9pcHY0L3RjcC5jOjQ3NzI6XFx0XFx0aWYgKGxlbiBcXHUwMDNlPSBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIG1zZ19mbGFncykpXFxubmV0L2lwdjQvdGNwLmMtNDc3My1cXHRcXHRcXHRnb3RvIHplcm9jb3B5X3Jjdl9jbXNnO1xcbm5ldC9pcHY0L3RjcC5jLTQ3NzQtXFx0XFx0c3dpdGNoIChsZW4pIHtcXG5uZXQvaXB2NC90Y3AuYzo0Nzc1OlxcdFxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBtc2dfZmxhZ3MpOlxcbm5ldC9pcHY0L3RjcC5jLTQ3NzYtXFx0XFx0XFx0Z290byB6ZXJvY29weV9yY3ZfY21zZztcXG5uZXQvaXB2NC90Y3AuYzo0Nzc3OlxcdFxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBtc2dfY29udHJvbGxlbik6XFxubmV0L2lwdjQvdGNwLmM6NDc3ODpcXHRcXHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgbXNnX2NvbnRyb2wpOlxcbm5ldC9pcHY0L3RjcC5jOjQ3Nzk6XFx0XFx0Y2FzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIGZsYWdzKTpcXG5uZXQvaXB2NC90Y3AuYzo0NzgwOlxcdFxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBjb3B5YnVmX2xlbik6XFxubmV0L2lwdjQvdGNwLmM6NDc4MTpcXHRcXHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgY29weWJ1Zl9hZGRyZXNzKTpcXG5uZXQvaXB2NC90Y3AuYzo0NzgyOlxcdFxcdGNhc2Ugb2Zmc2V0b2ZlbmQoc3RydWN0IHRjcF96ZXJvY29weV9yZWNlaXZlLCBlcnIpOlxcbm5ldC9pcHY0L3RjcC5jLTQ3ODMtXFx0XFx0XFx0Z290byB6ZXJvY29weV9yY3Zfc2tfZXJyO1xcbm5ldC9pcHY0L3RjcC5jOjQ3ODQ6XFx0XFx0Y2FzZSBvZmZzZXRvZmVuZChzdHJ1Y3QgdGNwX3plcm9jb3B5X3JlY2VpdmUsIGlucSk6XFxubmV0L2lwdjQvdGNwLmMtNDc4NS1cXHRcXHRcXHRnb3RvIHplcm9jb3B5X3Jjdl9pbnE7XFxubmV0L2lwdjQvdGNwLmM6NDc4NjpcXHRcXHRjYXNlIG9mZnNldG9mZW5kKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSwgbGVuZ3RoKTpcXG5uZXQvaXB2NC90Y3AuYy00Nzg3LVxcdFxcdGRlZmF1bHQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMxOjM4LjkyMTEzNzk0NloiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzcxMjM3MjYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqWmVyby1Db3B5IFJlY2VpdmU6IEEgUG90ZW50aWFsIEhvdHNwb3QqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhpcyBgdGNwX3plcm9jb3B5X3JlY2VpdmVgIGZ1bmN0aW9uLiBJbnRlcmVzdGluZy4uLiBsb29rcyBsaWtlIGBkb190Y3BfZ2V0c29ja29wdGAgaXMgdGhlIG9uZSBjYWxsaW5nIGl0IHdoZW4gYFRDUF9aRVJPQ09QWV9SRUNFSVZFYCBpcyByZXF1ZXN0ZWQuIFRoYXQncyBhIHByZXR0eSBzdGFuZGFyZCBwYXRoLCBtZWFuaW5nIHRoaXMgdGhpbmcgY291bGQgZ2V0IGhpdCAqYSBsb3QqLiBJZiBgZG9fdGNwX2dldHNvY2tvcHRgIGlzIGNhbGxlZCBvZnRlbiwgdGhlbiBzbyB3aWxsIHRoaXMgZnVuY3Rpb24uIFNvLCBpZiB0aGlzIGZ1bmN0aW9uIGlzIGluZWZmaWNpZW50LCBpdCBjb3VsZCBpbnRyb2R1Y2UgYSBib3R0bGVuZWNrLlxuXG5HaXZlbiB0aGlzIGNvbnRleHQsIEkgbmVlZCB0byBjaGVjayB0aGUgcG90ZW50aWFsIGZvciBwZXJmb3JtYW5jZSBpc3N1ZXMgYW5kIHRoZSB3YXlzIGl0J3MgdHJhY2VkLlxuXG5JJ20gdGhpbmtpbmcsIEkgc2hvdWxkIGltbWVkaWF0ZWx5IGxvb2sgYXQgYGtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jYC4gSSdtIGdvaW5nIHRvIHNlZSBob3cgdHJhY2luZyBpcyBoYW5kbGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVpbmcgbG9nZ2VkLCBob3cgdGhlIG92ZXJoZWFkIGlzLCBhbmQgaG93IGl0IGltcGFjdHMgYW55IHBlcmZvcm1hbmNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzE5NiwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMxOjQ0LjY5MjM3Nzk2OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDYwNjM3NjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19yYl9tYXBfdm1hXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jPTc1Njc9c3RhdGljIGludCBfX3JiX2luY19kZWNfbWFwcGVkKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLFxcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzYxMi0jaWZkZWYgQ09ORklHX01NVVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc2MTM6c3RhdGljIGludCBfX3JiX21hcF92bWEoc3RydWN0IHJpbmdfYnVmZmVyX3Blcl9jcHUgKmNwdV9idWZmZXIsXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzYxNC1cXHRcXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc3MDYtI2Vsc2VcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo3NzA3OnN0YXRpYyBpbnQgX19yYl9tYXBfdm1hKHN0cnVjdCByaW5nX2J1ZmZlcl9wZXJfY3B1ICpjcHVfYnVmZmVyLFxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc3MDgtXFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYz03NzE0PWludCByaW5nX2J1ZmZlcl9tYXAoc3RydWN0IHRyYWNlX2J1ZmZlciAqYnVmZmVyLCBpbnQgY3B1LFxcbi0tXFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzcyOS1cXHRpZiAoY3B1X2J1ZmZlci1cXHUwMDNldXNlcl9tYXBwZWQpIHtcXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYzo3NzMwOlxcdFxcdGVyciA9IF9fcmJfbWFwX3ZtYShjcHVfYnVmZmVyLCB2bWEpO1xcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jLTc3MzEtXFx0XFx0aWYgKCFlcnIpXFxuLS1cXG5rZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuYy03NzYwLVxcbmtlcm5lbC90cmFjZS9yaW5nX2J1ZmZlci5jOjc3NjE6XFx0ZXJyID0gX19yYl9tYXBfdm1hKGNwdV9idWZmZXIsIHZtYSk7XFxua2VybmVsL3RyYWNlL3JpbmdfYnVmZmVyLmMtNzc2Mi1cXHRpZiAoIWVycikge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMTo0NC43Mzg0NTAxNjRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI5NDkwMTcyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKlJlYWNoaW5nIGZvciB0aGUgUmluZyBCdWZmZXIqKlxuXG5BbHJpZ2h0LCBzbyBgcmluZ19idWZmZXJfbWFwYCBpcyBhY2Nlc3NpYmxlIHNvbWVob3csIGxpa2VseSB0aHJvdWdoIGBtbWFwYCBhbmQgdGhlIHRyYWNlZnMgcmluZyBidWZmZXIg4oCTIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqaG93KiBpdCdzIGJlaW5nIHVzZWQgYW5kLCBtb3JlIGltcG9ydGFudGx5LCAqd2h5Ki4gTXkgaW5pdGlhbCBpbnN0aW5jdCBwb2ludHMgbWUgdG93YXJkcyB0aGUgQU1EIERuYSBhY2NlbGVyYXRvciBkcml2ZXIsIHNwZWNpZmljYWxseSBgZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmNgLiBUaGlzIGlzIHVzdWFsbHkgd2hlcmUgeW91J2QgZmluZCB0aGUgY3J1Y2lhbCBpbnRlcmFjdGlvbiB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCBsaWtlbHkgaW5jbHVkaW5nIGJ1ZmZlciBjcmVhdGlvbiwgbWFwcGluZywgYW5kIHBvdGVudGlhbGx5IGludGVyYWN0aW9ucyB3aXRoIHRoZSByaW5nIGJ1ZmZlciBpZiBETUEgb3IgY29udGV4dCBzd2l0Y2hpbmcgaXMgaW52b2x2ZWQuIEknbGwgbmVlZCB0byBkaWcgaW50byB0aGF0IGZpbGUuIEknbSBsb29raW5nIGZvciB0aGUgY2FsbHMgdGhhdCB0b3VjaCBvbiB0aGUgcmluZyBidWZmZXIsIGBtbWFwYCB1c2FnZSwgb3IgaW50ZXJhY3Rpb25zIHdpdGggdGhlIERNQSBlbmdpbmUuIEkgc3VzcGVjdCB0aGlzIHdpbGwgaWxsdW1pbmF0ZSB0aGUgaW50ZXJhY3Rpb24gd2l0aCB0aGUgcmluZyBidWZmZXIuIEZyb20gdGhlcmUsIEknbGwgYXNzZXNzIHRoZSBwb3RlbnRpYWwgc2VjdXJpdHkgYW5kIHBlcmZvcm1hbmNlIHJhbWlmaWNhdGlvbnMgb2YgdGhhdCBwYXJ0aWN1bGFyIGludGVyZmFjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM5MjMsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMTo0OS4wMzMzNTQxMzlaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NjY0MTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFtZHhkbmFfaW5zZXJ0X3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jPTQyND1zdGF0aWMgdm9pZCBhbWR4ZG5hX2dlbV9kZXZfb2JqX2ZyZWUoc3RydWN0IGRybV9nZW1fb2JqZWN0ICpnb2JqKVxcbi0tXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmMtNDM4LVxcbmRyaXZlcnMvYWNjZWwvYW1keGRuYS9hbWR4ZG5hX2dlbS5jOjQzOTpzdGF0aWMgaW50IGFtZHhkbmFfaW5zZXJ0X3BhZ2VzKHN0cnVjdCBhbWR4ZG5hX2dlbV9vYmogKmFibyxcXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy00NDAtXFx0XFx0XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYz00OTU9c3RhdGljIGludCBhbWR4ZG5hX2dlbV9vYmpfbW1hcChzdHJ1Y3QgZHJtX2dlbV9vYmplY3QgKmdvYmosXFxuLS1cXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy01MDUtXFxuZHJpdmVycy9hY2NlbC9hbWR4ZG5hL2FtZHhkbmFfZ2VtLmM6NTA2OlxcdHJldCA9IGFtZHhkbmFfaW5zZXJ0X3BhZ2VzKGFibywgdm1hKTtcXG5kcml2ZXJzL2FjY2VsL2FtZHhkbmEvYW1keGRuYV9nZW0uYy01MDctXFx0aWYgKHJldCkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMTo0OS4wODAwMjQ4MjRaIiwiU2VxIjoyMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTI0NjU4NTk5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2VybmVsIFN5bWJvbCBFbnRyeSBQb2ludHMqKlxuXG5Pa2F5LCBzbyB3ZSdyZSBsb29raW5nIGZvciBzaWduaWZpY2FudCBlbnRyeSBwb2ludHMsIGFuZCBiYXNlZCBvbiB0aGUgaW5pdGlhbCBhc3Nlc3NtZW50LCB0aGUgXCJkcml2ZXJcIiBhc3BlY3QgaXMgYSBiaXQgb2YgYSBkaXN0cmFjdGlvbiDigJMgd2UncmUgZGVhbGluZyB3aXRoIGNvcmUga2VybmVsIHVzZXJzIGhlcmUuIExldCdzIGZvY3VzIG9uIHRoZSBrZXkgc3ltYm9scyBpZGVudGlmaWVkOiBgdm1faW5zZXJ0X3BhZ2VzYCwgYGlvX3VyaW5nX21tYXBgLCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgLCBhbmQgYHJpbmdfYnVmZmVyX21hcGAuIFRoZXNlIHNob3VsZCBwcm92aWRlIGdvb2QgaG9va3MuXG5cblRoZSBgSU9fVVJJTkdgIGNvbmZpZyBpcyBzb21ldGhpbmcgd2Ugc2hvdWxkIG5vdGUuIEl0J3MgYSBrZXkgaW5kaWNhdG9yIGZvciBob3cgdGhlIGtlcm5lbCBpcyBjb25maWd1cmVkIGluIHRoaXMgcGFydGljdWxhciBpbnN0YW5jZS5cblxuV2FpdCwgbG9va2luZyBhdCBgdm1faW5zZXJ0X3BhZ2VzYCwgdGhhdCBsb29rcyBsaWtlIGEgcHJvbWlzaW5nIHRhcmdldCBiZWNhdXNlIGl0J3MgZXhwb3J0ZWQuIEl0IGhhcyB0byBiZSBhbiBlbnRyeSBwb2ludC4gUXVpY2sgY2hlY2s6IElzIGBpbnNlcnRfcGFnZXNgIHN0YXRpYyB3aXRoaW4gYG1tL21lbW9yeS5jYD8gR29vZCwgdGhhdCBtYWtlcyBgdm1faW5zZXJ0X3BhZ2VzYCB0aGUgZXh0ZXJuYWxseSB2aXNpYmxlIGVudHJ5LiBFeGNlbGxlbnQuXG5cbk5vdywgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNjYW4gZm9yIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucy4gYENPTkZJR19JTkVUYCBhbmQgYENPTkZJR19UUkFDSU5HYCBhcmUgc3RhbmRhcmQsIGJ1dCB0aGUgYENPTkZJR19JT19VUklOR2AgaXMgZGVmaW5pdGVseSB3b3J0aCBpbmNsdWRpbmcgZXhwbGljaXRseS5cblxuRmluYWxseSwgd2hpbGUgd2UncmUgaW4gdGhlIG5laWdoYm9yaG9vZCwgbGV0J3MgdGFrZSBhIGxvb2sgYXQgYG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGVgIGluIGBtbS9tZW1vcnkuY2AuIEFsd2F5cyBnb29kIHRvIGhhdmUgYSBjb21wcmVoZW5zaXZlIHZpZXcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NTIxLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMxOjU0LjMyNjYxMzg3MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDUyMDAxNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFwX2tlcm5lbF9wYWdlc19jb21wbGV0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnkuYz0yNTM3PUVYUE9SVF9TWU1CT0wobWFwX2tlcm5lbF9wYWdlc19wcmVwYXJlKTtcXG5tbS9tZW1vcnkuYy0yNTM4LVxcbm1tL21lbW9yeS5jOjI1Mzk6aW50IG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vbWVtb3J5LmMtMjU0MC1cXHRcXHRcXHQgICAgICBzdHJ1Y3QgbW1hcF9hY3Rpb24gKmFjdGlvbilcXG4tLVxcbm1tL21lbW9yeS5jLTI1NDgtfVxcbm1tL21lbW9yeS5jOjI1NDk6RVhQT1JUX1NZTUJPTChtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlKTtcXG5tbS9tZW1vcnkuYy0yNTUwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMTo1NC4zNzE4MTk0NjZaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzI3MDg3MzIwMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgYG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGVgIFVzYWdlKipcblxuT2theSwgc28gdGhlIHF1ZXN0aW9uIG9uIG15IG1pbmQgcmlnaHQgbm93IGlzOiBXaGVyZSBleGFjdGx5IGRvZXMgYG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGVgIGNvbWUgaW50byBwbGF5IGluIHRoaXMgc3lzdGVtPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgc2NvcGUgYW5kIGhvdyBpdCdzIGludGVncmF0ZWQuIElzIGl0IGEgY29yZSBmdW5jdGlvbiwgb3Igc29tZXRoaW5nIG1vcmUgc3BlY2lhbGl6ZWQ/IElzIGl0IHdpZGVseSB1c2VkLCBvciBsaW1pdGVkIHRvIHNwZWNpZmljIGNvbnRleHRzPyBJJ20gdGhpbmtpbmcgSSBuZWVkIHRvIGZpbmQgdGhlIGNhbGxzIHRvIHRoaXMgZnVuY3Rpb24uIEknbGwgbmVlZCB0byBsb29rIHRocm91Z2ggdGhlIHNvdXJjZSBjb2RlIHRvIGdldCBhIGhhbmRsZSBvbiB0aGlzOyBJIG5lZWQgdG8ga25vdyB3aGVyZSBpdCdzIGJlaW5nICpjYWxsZWQqIHRvIGdyYXNwIGl0cyBwdXJwb3NlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTE5MywiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMxOjU3LjY0MjY5NTg5NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgyOTM0OTMzMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW0uaD00NTM4PWludCBtYXBfa2VybmVsX3BhZ2VzX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYyk7XFxuaW5jbHVkZS9saW51eC9tbS5oOjQ1Mzk6aW50IG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9tbS5oLTQ1NDAtXFx0XFx0XFx0ICAgICAgc3RydWN0IG1tYXBfYWN0aW9uICphY3Rpb24pO1xcbi0tXFxubW0vbWVtb3J5LmM9MjUzNz1FWFBPUlRfU1lNQk9MKG1hcF9rZXJuZWxfcGFnZXNfcHJlcGFyZSk7XFxubW0vbWVtb3J5LmMtMjUzOC1cXG5tbS9tZW1vcnkuYzoyNTM5OmludCBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL21lbW9yeS5jLTI1NDAtXFx0XFx0XFx0ICAgICAgc3RydWN0IG1tYXBfYWN0aW9uICphY3Rpb24pXFxuLS1cXG5tbS9tZW1vcnkuYy0yNTQ4LX1cXG5tbS9tZW1vcnkuYzoyNTQ5OkVYUE9SVF9TWU1CT0wobWFwX2tlcm5lbF9wYWdlc19jb21wbGV0ZSk7XFxubW0vbWVtb3J5LmMtMjU1MC1cXG4tLVxcbm1tL3V0aWwuYz0xNDc4PWludCBtbWFwX2FjdGlvbl9jb21wbGV0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL3V0aWwuYy0xNDg5LVxcdGNhc2UgTU1BUF9NQVBfS0VSTkVMX1BBR0VTOlxcbm1tL3V0aWwuYzoxNDkwOlxcdFxcdGVyciA9IG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGUodm1hLCBhY3Rpb24pO1xcbm1tL3V0aWwuYy0xNDkxLVxcdFxcdGJyZWFrO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMTo1OS40NzIwNTE0NjdaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyNjc4ODcyOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipXaGVyZSBEb2VzIGBtbWFwX2FjdGlvbl9jb21wbGV0ZWAgRml0PyoqXG5cbk9rYXksIHNvIGBtbWFwX2FjdGlvbl9jb21wbGV0ZWAuLi4gd2hlcmUgKmlzKiB0aGF0IHVzZWQ/IEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVudGFsIG1vZGVsIG9mIHRoZSBtbWFwLXJlbGF0ZWQga2VybmVsIHN1YnN5c3RlbXMuIE15IGluaXRpYWwgZ3Vlc3MgaXMgdGhhdCBpdCdzIGxpa2VseSBwYXJ0IG9mIHRoZSBjb21wbGV0aW9uIHBhdGggZm9yIGFuIGFzeW5jaHJvbm91cyBtZW1vcnkgbWFwcGluZyBvcGVyYXRpb24uIEl0IHdvdWxkIGJlIGludm9sdmVkIGluIHNpZ25hbGluZyB0aGUgY29tcGxldGlvbiBvZiBhIHNwZWNpZmljIGFjdGlvbiByZWxhdGVkIHRvIG1hcHBlZCBtZW1vcnksIHBvc3NpYmx5IHRvIHVzZXIgc3BhY2UsIG9yIGFub3RoZXIga2VybmVsIHByb2Nlc3MuIElzIGl0IHRpZWQgdG8gYSBzcGVjaWZpYyBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0sIGxpa2UgdGhlIHBhZ2UgY2FjaGUsIG9yIHNvbWV0aGluZyBtb3JlIGdlbmVyYWxpemVkIHdpdGhpbiB0aGUgVk0/IEkgbmVlZCB0byBjaGVjayB0aGUgY29kZWJhc2UgdG8gZGV0ZXJtaW5lIHRoZSBleGFjdCBjYWxsIHNpdGVzIGFuZCBjb250ZXh0cywgdG8gZnVsbHkgdW5kZXJzdGFuZCBpdHMgZnVuY3Rpb24uXG5cbklzIGl0IHJlbGF0ZWQgdG8gZmlsZS1iYWNrZWQgbWFwcGluZ3MsIG9yIGFub255bW91cyBtYXBwaW5ncz8gRG9lcyBpdCBoYW5kbGUgdGhlIGRpcnR5aW5nLCBmbHVzaGluZywgb3IgaW52YWxpZGF0aW5nIG9mIHBhZ2VzPyBJcyB0aGlzIGFib3V0IHRoZSBzaWduYWxzIGdlbmVyYXRlZCBieSB0aGUga2VybmVsLCBvciBzb21ldGhpbmcgSSdtIG1pc3Npbmc/IEFuZCBkb2VzIGl0IGhhdmUgYW55IGFzc29jaWF0ZWQgbG9ja2luZz9cblxuSSdtIHRoaW5raW5nIEkgcHJvYmFibHkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGNhbGxzIHJlbGF0ZWQgdG8gYG1tYXBgIHN5c2NhbGwgaW1wbGVtZW50YXRpb25zLCBsaWtlIGBkb19tbWFwYCBvciBzaW1pbGFyLiBJJ2xsIG5lZWQgdG8gZHJpbGwgZG93biB0byBmaW5kIHdoZXJlIHRoaXMgc2lnbmFsIGlzIGJlaW5nIHNlbnQuIFBlcmhhcHMgSSdsbCB1c2UgYGdyZXBgIG9yIGEgc2ltaWxhciB0b29sIHRvIHBpbnBvaW50IHRoZSBzcGVjaWZpYyBzb3VyY2UgZmlsZXMgYW5kIGZ1bmN0aW9ucyB0aGF0IHVzZSB0aGF0IHN5bWJvbC4gVW5kZXJzdGFuZGluZyBpdHMgdXNhZ2Ugd2l0aGluIHRob3NlIGZ1bmN0aW9ucyB3aWxsIHByb3ZpZGUgdGhlIGNsZWFyZXN0IHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1NzExLCJPdXRwdXRUb2tlbnMiOjIwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6MzI6MDQuMTk4ODQzMDE2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjczODYzNDg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1tYXBfYWN0aW9uX2NvbXBsZXRlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvbW0uaD00NDI2PWludCBtbWFwX2FjdGlvbl9wcmVwYXJlKHN0cnVjdCB2bV9hcmVhX2Rlc2MgKmRlc2MpO1xcbmluY2x1ZGUvbGludXgvbW0uaDo0NDI3OmludCBtbWFwX2FjdGlvbl9jb21wbGV0ZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5pbmNsdWRlL2xpbnV4L21tLmgtNDQyOC1cXHRcXHRcXHQgc3RydWN0IG1tYXBfYWN0aW9uICphY3Rpb24sIGJvb2wgaXNfY29tcGF0KTtcXG4tLVxcbm1tL3V0aWwuYz0xMjI0PWludCBfX2NvbXBhdF92bWFfbW1hcChzdHJ1Y3Qgdm1fYXJlYV9kZXNjICpkZXNjLFxcbi0tXFxubW0vdXRpbC5jLTEyMzUtXFx0LyogQ29tcGxldGUgYW55IHNwZWNpZmllZCBtbWFwIGFjdGlvbnMuICovXFxubW0vdXRpbC5jOjEyMzY6XFx0cmV0dXJuIG1tYXBfYWN0aW9uX2NvbXBsZXRlKHZtYSwgXFx1MDAyNmRlc2MtXFx1MDAzZWFjdGlvbiwgLyppc19jb21wYXQ9Ki90cnVlKTtcXG5tbS91dGlsLmMtMTIzNy19XFxuLS1cXG5tbS91dGlsLmM9MTQ2NT1FWFBPUlRfU1lNQk9MKG1tYXBfYWN0aW9uX3ByZXBhcmUpO1xcbi0tXFxubW0vdXRpbC5jLTE0NjctLyoqXFxubW0vdXRpbC5jOjE0Njg6ICogbW1hcF9hY3Rpb25fY29tcGxldGUgLSBFeGVjdXRlIFZNQSBkZXNjcmlwdG9yIGFjdGlvbi5cXG5tbS91dGlsLmMtMTQ2OS0gKiBAdm1hOiBUaGUgVk1BIHRvIHBlcmZvcm0gdGhlIGFjdGlvbiB1cG9uLlxcbi0tXFxubW0vdXRpbC5jLTE0NzctICovXFxubW0vdXRpbC5jOjE0Nzg6aW50IG1tYXBfYWN0aW9uX2NvbXBsZXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL3V0aWwuYy0xNDc5LVxcdFxcdFxcdCBzdHJ1Y3QgbW1hcF9hY3Rpb24gKmFjdGlvbiwgYm9vbCBpc19jb21wYXQpXFxuLS1cXG5tbS91dGlsLmMtMTUwMS19XFxubW0vdXRpbC5jOjE1MDI6RVhQT1JUX1NZTUJPTChtbWFwX2FjdGlvbl9jb21wbGV0ZSk7XFxubW0vdXRpbC5jLTE1MDMtI2Vsc2VcXG4tLVxcbm1tL3V0aWwuYz0xNTE5PUVYUE9SVF9TWU1CT0wobW1hcF9hY3Rpb25fcHJlcGFyZSk7XFxubW0vdXRpbC5jLTE1MjAtXFxubW0vdXRpbC5jOjE1MjE6aW50IG1tYXBfYWN0aW9uX2NvbXBsZXRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm1tL3V0aWwuYy0xNTIyLVxcdFxcdFxcdCBzdHJ1Y3QgbW1hcF9hY3Rpb24gKmFjdGlvbixcXG4tLVxcbm1tL3V0aWwuYy0xNTQxLX1cXG5tbS91dGlsLmM6MTU0MjpFWFBPUlRfU1lNQk9MKG1tYXBfYWN0aW9uX2NvbXBsZXRlKTtcXG5tbS91dGlsLmMtMTU0My0jZW5kaWZcXG4tLVxcbm1tL3ZtYS5jPTI3MzQ9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19tbWFwX3JlZ2lvbihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxubW0vdm1hLmMtMjc4NS1cXHRpZiAoaGF2ZV9tbWFwX3ByZXBhcmUgXFx1MDAyNlxcdTAwMjYgYWxsb2NhdGVkX25ldykge1xcbm1tL3ZtYS5jOjI3ODY6XFx0XFx0ZXJyb3IgPSBtbWFwX2FjdGlvbl9jb21wbGV0ZSh2bWEsIFxcdTAwMjZkZXNjLmFjdGlvbixcXG5tbS92bWEuYy0yNzg3LVxcdFxcdFxcdFxcdFxcdCAgICAgLyppc19jb21wYXQ9Ki9mYWxzZSk7XFxuLS1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oPTEzMDk9c3RhdGljIGlubGluZSBpbnQgX19jb21wYXRfdm1hX21tYXAoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYyxcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvZHVwLmgtMTMyMC1cXHQvKiBDb21wbGV0ZSBhbnkgc3BlY2lmaWVkIG1tYXAgYWN0aW9ucy4gKi9cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oOjEzMjE6XFx0cmV0dXJuIG1tYXBfYWN0aW9uX2NvbXBsZXRlKHZtYSwgXFx1MDAyNmRlc2MtXFx1MDAzZWFjdGlvbiwgLyppc19jb21wYXQ9Ki90cnVlKTtcXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL2R1cC5oLTEzMjItfVxcbi0tXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oPTg0PXN0YXRpYyBpbmxpbmUgaW50IG1tYXBfYWN0aW9uX3ByZXBhcmUoc3RydWN0IHZtX2FyZWFfZGVzYyAqZGVzYylcXG4tLVxcbnRvb2xzL3Rlc3Rpbmcvdm1hL2luY2x1ZGUvc3R1YnMuaC04OC1cXG50b29scy90ZXN0aW5nL3ZtYS9pbmNsdWRlL3N0dWJzLmg6ODk6c3RhdGljIGlubGluZSBpbnQgbW1hcF9hY3Rpb25fY29tcGxldGUoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxudG9vbHMvdGVzdGluZy92bWEvaW5jbHVkZS9zdHVicy5oLTkwLVxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbW1hcF9hY3Rpb24gKmFjdGlvbixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6MzI6MDUuODcyNzQzODIxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyMTI4MTUyODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipEaXZpbmcgRGVlcCBpbnRvIE1lbW9yeSBNYW5hZ2VtZW50KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gaG93IG1lbW9yeSBpcyBtYXBwZWQuIEkgc2VlIGBfX21tYXBfcmVnaW9uYCBjYWxscyBgbW1hcF9hY3Rpb25fY29tcGxldGVgLiBUaGF0J3MgYSBwcmV0dHkgY2VudHJhbCBwb2ludCwgcmlnaHQ/IFRoaXMgaXMgY29yZSBzdHVmZi4gSW1tZWRpYXRlbHksIGB2bV9pbnNlcnRfcGFnZXNgIGFuZCBgbWFwX2tlcm5lbF9wYWdlc19jb21wbGV0ZWAgY29tZSB0byBtaW5kIGFzIHBvdGVudGlhbGx5IHJlbGV2YW50IGZ1bmN0aW9ucyB0byBzY3J1dGluaXplIGZ1cnRoZXIuIFRoZXkncmUgbGlrZWx5IGludm9sdmVkIGluIGNvbXBsZXRpbmcgdGhlIG1lbW9yeSBtYXBwaW5nIHByb2Nlc3MsIHNvIHRoZXkncmUgb24gbXkgcmFkYXIuXG5cbkhvbGQgb24uLi4gSSBuZWVkIHRvIGJlIG1vcmUgY2FyZWZ1bCwgSSBtaXNzZWQgc29tZXRoaW5nLCB0aGUgcGF0Y2ggdG91Y2hlcyBgcG9wdWxhdGVfdG9fcG1kYCwgd2hpY2gsIEkgbm93IHJlbWVtYmVyLCBpcyBhbHNvIHVzZWQgaW4gYGdldF9sb2NrZWRfcHRlYC4gUmlnaHQsIHRoaXMgY291bGQgaGF2ZSBpbXBsaWNhdGlvbnMgYmV5b25kIHRoZSBpbW1lZGlhdGUgbW1hcCBjb250ZXh0LiBJIHNob3VsZCBzd2l0Y2ggZ2VhcnMgZm9yIGEgbW9tZW50IGFuZCBnbyBjaGVjayBvdXQgd2hhdCdzIGdvaW5nIG9uIGluIGBnZXRfbG9ja2VkX3B0ZWAuIEdvdHRhIGVuc3VyZSB0aGlzIGNoYW5nZSBkb2Vzbid0IGludHJvZHVjZSBhbnkgdW5mb3Jlc2VlbiBpc3N1ZXMgaW4gb3RoZXIgcGFydHMgb2YgdGhlIG1lbW9yeSBzdWJzeXN0ZW0sIHBhcnRpY3VsYXJseSByZWxhdGVkIHRvIHBhZ2UgdGFibGUgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY5ODMsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMjoxMS4wODU1NjE5NDFaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI4NTUzMDA5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJnZXRfbG9ja2VkX3B0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1vcnkuYz0yMjcxPXN0YXRpYyBwbWRfdCAqcG9wdWxhdGVfdG9fcG1kKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS9tZW1vcnkuYy0yMjkyLVxcbm1tL21lbW9yeS5jOjIyOTM6cHRlX3QgKmdldF9sb2NrZWRfcHRlKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxubW0vbWVtb3J5LmMtMjI5NC1cXHRcXHQgICAgICBzcGlubG9ja190ICoqcHRsKVxcbi0tXFxubW0vbWVtb3J5LmM9MjM5Mj1zdGF0aWMgaW50IGluc2VydF9wYWdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tZW1vcnkuYy0yNDAyLVxcdHJldHZhbCA9IC1FTk9NRU07XFxubW0vbWVtb3J5LmM6MjQwMzpcXHRwdGUgPSBnZXRfbG9ja2VkX3B0ZSh2bWEtXFx1MDAzZXZtX21tLCBhZGRyLCBcXHUwMDI2cHRsKTtcXG5tbS9tZW1vcnkuYy0yNDA0LVxcdGlmICghcHRlKVxcbi0tXFxubW0vbWVtb3J5LmM9MjY3MD1zdGF0aWMgdm1fZmF1bHRfdCBpbnNlcnRfcGZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tZW1vcnkuYy0yNjc2LVxcbm1tL21lbW9yeS5jOjI2Nzc6XFx0cHRlID0gZ2V0X2xvY2tlZF9wdGUobW0sIGFkZHIsIFxcdTAwMjZwdGwpO1xcbm1tL21lbW9yeS5jLTI2NzgtXFx0aWYgKCFwdGUpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMyOjExLjM3MTA5NzMzMloiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNTQzMzE5MTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiB0aGUgYHBvcHVsYXRlX3RvX3BtZGAgQ2hhbmdlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBob3cgaXQncyBjaGFuZ2VkLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gdHJhY2UgdGhlIGNoYW5nZXMuIGBnZXRfbG9ja2VkX3B0ZWAgaXMgdXNlZCBpbiBgaW5zZXJ0X3BhZ2VgIGFuZCBgaW5zZXJ0X3BmbmAuIGBpbnNlcnRfcGFnZWAgaXMgY2FsbGVkIGJ5IGB2bV9pbnNlcnRfcGFnZWAuIGBpbnNlcnRfcGZuYCBpcyBjYWxsZWQgYnkgYHZtZl9pbnNlcnRfcGZuYC4gVGhhdCBtZWFucyBgdm1faW5zZXJ0X3BhZ2VgLCBgdm1faW5zZXJ0X3BhZ2VzYCwgYW5kIGB2bWZfaW5zZXJ0X3BmbmAgYXJlIGFsbCBwb3RlbnRpYWxseSBhZmZlY3RlZCBieSB0aGlzIGNoYW5nZS5cblxuSSBzZWUgdGhhdCBgcG9wdWxhdGVfdG9fcG1kYCBpcyB0aGUgbmV3IG5hbWUgZm9yIGB3YWxrX3RvX3BtZGAuIFRoZSBvbGQgaW1wbGVtZW50YXRpb24gb2YgYHdhbGtfdG9fcG1kYCB3YXMgaWRlbnRpY2FsIHRvIHRoZSBuZXcgYHBvcHVsYXRlX3RvX3BtZGAuIFRoZSBhY3R1YWwgY29kZSBoYXNuJ3QgY2hhbmdlZCwgd2hpY2ggc2ltcGxpZmllcyB0aGluZ3MuIFRoZSBvbmx5IGNoYW5nZSBpcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBpbnNlcnRfcGFnZXNgIHdoZW4gYHBvcHVsYXRlX3RvX3BtZGAgZmFpbHMuIEl0IHVzZWQgdG8gcmV0dXJuIGAtRUZBVUxUYCwgbm93IGl0IHJldHVybnMgYC1FTk9NRU1gLiBJdCBhbHNvIGxvb2tzIGxpa2UgdGhlcmUgd2FzIGEgYnVnIGluIHRoZSBvbGQgYGluc2VydF9wYWdlc2AgY29kZSwgd2hlcmUgYW4gYC1FRkFVTFRgIHdhcyBzZXQgYXQgdGhlIGJlZ2lubmluZyBvZiB0aGUgbG9vcCwgYnV0IG5vdyBoYXMgYmVlbiBjb3JyZWN0ZWQuIFRoaXMgY2hhbmdlIHdpbGwgYWZmZWN0IGVycm9yIGhhbmRsaW5nIGluIHRoZSBjYWxsZXJzIG9mIGB2bV9pbnNlcnRfcGFnZXNgLCBhbmQgYW55IHBvdGVudGlhbCBjYWxsZXJzIG9mIGBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlYC5cblxuTGV0J3MgYnJlYWsgZG93biB0aGUgb2xkIGFuZCBuZXcgY29kZSwgdG8gYmUgc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGVycm9yIHBhdGhzOlxuXG5JbiB0aGUgb3JpZ2luYWwgYGluc2VydF9wYWdlc2A6XG4qICAgYHB0ZV9hbGxvY2AgZmFpbHVyZTogUmV0dXJucyBgLUVOT01FTWBcbiogICBgd2Fsa190b19wbWRgIGZhaWx1cmU6IFJldHVybnMgYC1FRkFVTFRgXG4qICAgYHB0ZV9vZmZzZXRfbWFwX2xvY2tgIGZhaWx1cmU6IFJldHVybnMgYC1FRkFVTFRgXG4qICAgYGluc2VydF9wYWdlX2luX2JhdGNoX2xvY2tlZGAgZmFpbHVyZTogUmV0dXJucyB0aGUgZXJyb3IgY29kZSBmcm9tIHRoYXQgZnVuY3Rpb24gKGBlcnJgKVxuXG5JbiB0aGUgbmV3IGNvZGUsIHRoZSBvbmx5ICpmdW5jdGlvbmFsKiBjaGFuZ2UgaXMgdGhhdCBgcG9wdWxhdGVfdG9fcG1kYCByZXR1cm5pbmcgYE5VTExgIHJlc3VsdHMgaW4gYC1FTk9NRU1gLCBpbnN0ZWFkIG9mIGAtRUZBVUxUYCBmcm9tIHRoZSBgd2Fsa190b19wbWRgIGZhaWx1cmUuIEl0IHJldHVybnMgdGhlIGVycm9yIGNvZGUgZnJvbSBgaW5zZXJ0X3BhZ2VfaW5fYmF0Y2hfbG9ja2VkYCBjb3JyZWN0bHkuXG5cblNvLCB0aGUgY3JpdGljYWwgZGlmZmVyZW5jZSBpcyBgdm1faW5zZXJ0X3BhZ2VzYCBhbmQgYG1hcF9rZXJuZWxfcGFnZXNfY29tcGxldGVgIG5vdyByZXR1cm5pbmcgYC1FTk9NRU1gIHdoZW4gYHBvcHVsYXRlX3RvX3BtZGAgZmFpbHMgaW5zdGVhZCBvZiBgLUVGQVVMVGAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNhbGxlcnMgYXJlIGdvaW5nIHRvIGJlIGFmZmVjdGVkIGJ5IHRoaXMgY2hhbmdlLiBJdCdzIGEgc2VtYW50aWMgY2hhbmdlIGluIHRoZSBlcnJvciBjb2RlLCBhbmQgdGhleSBtaWdodCBoYXZlIGRpZmZlcmVudCBoYW5kbGluZyBmb3IgYC1FTk9NRU1gIHZlcnN1cyBgLUVGQVVMVGAuIEkgbmVlZCB0byBjaGVjayB0aGUgY2FsbGVycyBmb3IgcG90ZW50aWFsIGlzc3Vlcy4gU29tZXRoaW5nIGxpa2UgYHRjcF96ZXJvY29weV9yZWNlaXZlYCBjb3VsZCBiZSBhZmZlY3RlZC5cblxuT2theSwgbGV0J3MgbG9vayBhdCBgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaF9lcnJvcmAgaW4gYG5ldC9pcHY0L3RjcC5jYCwgdG8gc2VlIGhvdyBpdCBoYW5kbGVzIGFuIGVycm9yIGZyb20gdGhlIGB2bV9pbnNlcnRfcGFnZXNgIGZ1bmN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzY1MywiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6MzI6MjYuODA0MjkwMjYyWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDk2MjU5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoX2Vycm9yXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm5ldC9pcHY0L3RjcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9pcHY0L3RjcC5jPTIwMzU9c3RhdGljIGludCB0Y3BfemNfaGFuZGxlX2xlZnRvdmVyKHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yMDYxLVxcbm5ldC9pcHY0L3RjcC5jOjIwNjI6c3RhdGljIGludCB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoX2Vycm9yKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbm5ldC9pcHY0L3RjcC5jLTIwNjMtXFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBhZ2UgKipwZW5kaW5nX3BhZ2VzLFxcbi0tXFxubmV0L2lwdjQvdGNwLmM9MjExMD1zdGF0aWMgaW50IHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2goc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5uZXQvaXB2NC90Y3AuYy0yMTM2LVxcdC8qIEVycm9yOiBtYXliZSB6YXAgYW5kIHJldHJ5ICsgcm9sbGJhY2sgc3RhdGUgZm9yIGZhaWxlZCBpbnNlcnRzLiAqL1xcbm5ldC9pcHY0L3RjcC5jOjIxMzc6XFx0cmV0dXJuIHRjcF96ZXJvY29weV92bV9pbnNlcnRfYmF0Y2hfZXJyb3Iodm1hLCBwYWdlcyArIHBhZ2VzX21hcHBlZCxcXG5uZXQvaXB2NC90Y3AuYy0yMTM4LVxcdFxcdHBhZ2VzX3JlbWFpbmluZywgYWRkcmVzcywgbGVuZ3RoLCBzZXEsIHpjLCB0b3RhbF9ieXRlc190b19tYXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMyOjI2Ljg1NTI2MTkwN1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTQ0ODEwOTgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQW5hbHl6aW5nIHRoZSBGdW5jdGlvbiBOYW1lOiBgdGNwX3plcm9jb3B5X3ZtX2luc2VydF9iYXRjaF9lcnJvcmAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBUaGUgZnVuY3Rpb24gbmFtZSBpbW1lZGlhdGVseSB0ZWxscyBtZSBhIGxvdC4gYHRjcF96ZXJvY29weWAgc3VnZ2VzdHMgd2UncmUgZGVhbGluZyB3aXRoIFRDUCBuZXR3b3JraW5nIGFuZCwgbW9yZSBzcGVjaWZpY2FsbHksIGEgbWVjaGFuaXNtIHRvIGF2b2lkIHRoZSB0cmFkaXRpb25hbCBrZXJuZWwtdG8tdXNlci1zcGFjZSBjb3B5LiBFeGNlbGxlbnQsIHBvdGVudGlhbCBwZXJmb3JtYW5jZSBnYWlucyBhcmUgYWxyZWFkeSBmbGFnZ2VkIGluIG15IG1pbmQuIFRoZSBtZW50aW9uIG9mIGB2bWAgKFZpcnR1YWwgTWFjaGluZSkgaW5kaWNhdGVzIHRoaXMgaXMgcHJvYmFibHkgd2l0aGluIHRoZSBjb250ZXh0IG9mIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHdoaWNoIGFkZHMgYW5vdGhlciBsYXllciBvZiBjb21wbGV4aXR5IHRvIGNvbnNpZGVyIOKAkyBtZW1vcnkgbWFuYWdlbWVudCwgcG90ZW50aWFsIHZOSUMgaW50ZXJhY3Rpb25zLCBhbmQgaHlwZXJ2aXNvciBvdmVyaGVhZC4gVGhlbiwgYGluc2VydF9iYXRjaGAgcG9pbnRzIHRvIHNvbWUgZm9ybSBvZiBidWxrIG9wZXJhdGlvbiwgZGVhbGluZyB3aXRoIGEgZ3JvdXAgb2YgZGF0YSBvciBzdHJ1Y3R1cmVzLCBwZXJoYXBzIHBhY2tldHMgb3IgYnVmZmVycywgYW5kIHRoZSBmdW5jdGlvbiBpcyBkZXNpZ25lZCB0byBwdXQgZGF0YSBpbnRvIHRoZSBWTS4gRmluYWxseSwgYGVycm9yYC4uLnRoYXQncyB0aGUga2V5LiBUaGlzIGlzbid0IGEgc3VjY2VzcyBwYXRoOyB0aGlzIGlzIHdoZXJlIHRoaW5ncyAqZ28gd3JvbmcqLiBXZSdyZSBsb29raW5nIGF0IHRoZSBlcnJvciBoYW5kbGluZyBmb3IgYSB6ZXJvLWNvcHksIGJhdGNoIGluc2VydGlvbiBwcm9jZXNzIHdpdGhpbiBhIHZpcnR1YWwgbWFjaGluZSBjb250ZXh0LiBUaGF0J3MgYSBwcmV0dHkgc3BlY2lmaWMgYW5kIGxpa2VseSBwZXJmb3JtYW5jZS1jcml0aWNhbCBwaWVjZSBvZiBjb2RlLiBMZXQncyBzZWUgd2hhdCB0aGUgY29kZSBpcyBkb2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAwOTIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMjozMS40MDAwNzU0ODdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg2ODUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9pcHY0L3RjcC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNjIsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwNjI6XFx0c3RhdGljIGludCB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoX2Vycm9yKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjIwNjM6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgc3RydWN0IHBhZ2UgKipwZW5kaW5nX3BhZ2VzLFxcbjIwNjQ6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdW5zaWduZWQgbG9uZyBwYWdlc19yZW1haW5pbmcsXFxuMjA2NTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nICphZGRyZXNzLFxcbjIwNjY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgdTMyICpsZW5ndGgsXFxuMjA2NzpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICB1MzIgKnNlcSxcXG4yMDY4OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCB0Y3BfemVyb2NvcHlfcmVjZWl2ZSAqemMsXFxuMjA2OTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICB1MzIgdG90YWxfYnl0ZXNfdG9fbWFwLFxcbjIwNzA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgaW50IGVycilcXG4yMDcxOlxcdHtcXG4yMDcyOlxcdFxcdC8qIEF0IGxlYXN0IG9uZSBwYWdlIGRpZCBub3QgbWFwLiBUcnkgemFwcGluZyBpZiB3ZSBza2lwcGVkIGVhcmxpZXIuICovXFxuMjA3MzpcXHRcXHRpZiAoZXJyID09IC1FQlVTWSBcXHUwMDI2XFx1MDAyNlxcbjIwNzQ6XFx0XFx0ICAgIHpjLVxcdTAwM2VmbGFncyBcXHUwMDI2IFRDUF9SRUNFSVZFX1pFUk9DT1BZX0ZMQUdfVExCX0NMRUFOX0hJTlQpIHtcXG4yMDc1OlxcdFxcdFxcdHUzMiBtYXliZV96YXBfbGVuO1xcbjIwNzY6XFx0XFxuMjA3NzpcXHRcXHRcXHRtYXliZV96YXBfbGVuID0gdG90YWxfYnl0ZXNfdG9fbWFwIC0gIC8qIEFsbCBieXRlcyB0byBtYXAgKi9cXG4yMDc4OlxcdFxcdFxcdFxcdFxcdCpsZW5ndGggKyAvKiBNYXBwZWQgb3IgcGVuZGluZyAqL1xcbjIwNzk6XFx0XFx0XFx0XFx0XFx0KHBhZ2VzX3JlbWFpbmluZyAqIFBBR0VfU0laRSk7IC8qIEZhaWxlZCBtYXAuICovXFxuMjA4MDpcXHRcXHRcXHR6YXBfdm1hX3JhbmdlKHZtYSwgKmFkZHJlc3MsIG1heWJlX3phcF9sZW4pO1xcbjIwODE6XFx0XFx0XFx0ZXJyID0gMDtcXG4yMDgyOlxcdFxcdH1cXG4yMDgzOlxcdFxcbjIwODQ6XFx0XFx0aWYgKCFlcnIpIHtcXG4yMDg1OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbGVmdG92ZXJfcGFnZXMgPSBwYWdlc19yZW1haW5pbmc7XFxuMjA4NjpcXHRcXHRcXHRpbnQgYnl0ZXNfbWFwcGVkO1xcbjIwODc6XFx0XFxuMjA4ODpcXHRcXHRcXHQvKiBXZSBjYWxsZWQgemFwX3ZtYV9yYW5nZSwgdHJ5IHRvIHJlaW5zZXJ0LiAqL1xcbjIwODk6XFx0XFx0XFx0ZXJyID0gdm1faW5zZXJ0X3BhZ2VzKHZtYSwgKmFkZHJlc3MsXFxuMjA5MDpcXHRcXHRcXHRcXHRcXHQgICAgICBwZW5kaW5nX3BhZ2VzLFxcbjIwOTE6XFx0XFx0XFx0XFx0XFx0ICAgICAgXFx1MDAyNnBhZ2VzX3JlbWFpbmluZyk7XFxuMjA5MjpcXHRcXHRcXHRieXRlc19tYXBwZWQgPSBQQUdFX1NJWkUgKiAobGVmdG92ZXJfcGFnZXMgLSBwYWdlc19yZW1haW5pbmcpO1xcbjIwOTM6XFx0XFx0XFx0KnNlcSArPSBieXRlc19tYXBwZWQ7XFxuMjA5NDpcXHRcXHRcXHQqYWRkcmVzcyArPSBieXRlc19tYXBwZWQ7XFxuMjA5NTpcXHRcXHR9XFxuMjA5NjpcXHRcXHRpZiAoZXJyKSB7XFxuMjA5NzpcXHRcXHRcXHQvKiBFaXRoZXIgd2Ugd2VyZSB1bmFibGUgdG8gemFwLCBPUiB3ZSB6YXBwZWQsIHJldHJpZWQgYW5cXG4yMDk4OlxcdFxcdFxcdCAqIGluc2VydCwgYW5kIHN0aWxsIGhhZCBhbiBpc3N1ZS4gRWl0aGVyIHdheXMsIHBhZ2VzX3JlbWFpbmluZ1xcbjIwOTk6XFx0XFx0XFx0ICogaXMgdGhlIG51bWJlciBvZiBwYWdlcyB3ZSB3ZXJlIHVuYWJsZSB0byBtYXAsIGFuZCB3ZSB1bnJvbGxcXG4yMTAwOlxcdFxcdFxcdCAqIHNvbWUgc3RhdGUgd2Ugc3BlY3VsYXRpdmVseSB0b3VjaGVkIGJlZm9yZS5cXG4yMTAxOlxcdFxcdFxcdCAqL1xcbjIxMDI6XFx0XFx0XFx0Y29uc3QgaW50IGJ5dGVzX25vdF9tYXBwZWQgPSBQQUdFX1NJWkUgKiBwYWdlc19yZW1haW5pbmc7XFxuMjEwMzpcXHRcXG4yMTA0OlxcdFxcdFxcdCpsZW5ndGggLT0gYnl0ZXNfbm90X21hcHBlZDtcXG4yMTA1OlxcdFxcdFxcdHpjLVxcdTAwM2VyZWN2X3NraXBfaGludCArPSBieXRlc19ub3RfbWFwcGVkO1xcbjIxMDY6XFx0XFx0fVxcbjIxMDc6XFx0XFx0cmV0dXJuIGVycjtcXG4yMTA4OlxcdH1cXG4yMTA5OlxcdFxcbjIxMTA6XFx0c3RhdGljIGludCB0Y3BfemVyb2NvcHlfdm1faW5zZXJ0X2JhdGNoKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjIxMTE6XFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IHBhZ2UgKipwYWdlcyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6MzI6MzEuNDAwMjYzNjc3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMjU5NzEwMzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYSBSZXR1cm5lZCBFcnJvciBDb2RlKipcblxuUmlnaHQsIHNvIHRoZSBlcnJvciBjb2RlIGlzIGJlaW5nIHJldHVybmVkIGRpcmVjdGx5LiBUaGF0J3MgdGhlIGltbWVkaWF0ZSBpbmZvcm1hdGlvbiBJIG5lZWQgdG8gd29yayB3aXRoLiBOb3csIHRoZSBuYXR1cmFsIG5leHQgc3RlcCBpcyB0byBpbnZlc3RpZ2F0ZSB0aGUgYGlvX3VyaW5nX21tYXBgIGZ1bmN0aW9uLiBNeSBndXQgdGVsbHMgbWUgdGhhdCdzIHRoZSBsaWtlbHkgc291cmNlIG9mIHRoaXMgZXJyb3IsIG9yIGF0IGxlYXN0IGEga2V5IGNvbXBvbmVudCBpbiB0aGUgcHJvYmxlbSBzcGFjZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBpb191cmluZ19tbWFwYCBpcyBpbnRlcmFjdGluZyB3aXRoIHdoYXRldmVyIGxvZ2ljIGlzIGdlbmVyYXRpbmcgdGhhdCBlcnJvciBjb2RlLiBJJ20gZ29pbmcgdG8gZGlnIGludG8gdGhlIHNvdXJjZSBhbmQgc2VlIHdoYXQncyBoYXBwZW5pbmcgaW4gdGhlcmUuIE1heWJlIHRoZXJlJ3MgYSBwcm9ibGVtIHdpdGggdGhlIGFyZ3VtZW50cywgdGhlIGFsbG9jYXRpb24sIHRoZSB1bmRlcmx5aW5nIHN5c3RlbSBjYWxscywgb3IgdGhlIGludGVyYWN0aW9uIHdpdGggdGhlIHVzZXItc3BhY2UuIFRoYXQncyB0aGUgbGlrZWx5IGN1bHByaXQgZ2l2ZW4gdGhhdCBjb2RlIGlzIHdoYXQgdGhlIGlzc3VlIHJlbGF0ZXMgdG8uIEknbSBnb2luZyB0byBoYXZlIHRvIGRvIGEgZGVlcCBkaXZlIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMjM3LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjEsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMjozOS41MjYyMzgwNTRaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzY3MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiaW9fdXJpbmcvbWVtbWFwLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjg0LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjg0OlxcdHN0YXRpYyBpbnQgaW9fcmVnaW9uX21tYXAoc3RydWN0IGlvX3JpbmdfY3R4ICpjdHgsXFxuIDI4NTpcXHRcXHRcXHRcXHQgIHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICptcixcXG4gMjg2OlxcdFxcdFxcdFxcdCAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIDI4NzpcXHRcXHRcXHRcXHQgIHVuc2lnbmVkIG1heF9wYWdlcylcXG4gMjg4OlxcdHtcXG4gMjg5OlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMgPSBtaW4obXItXFx1MDAzZW5yX3BhZ2VzLCBtYXhfcGFnZXMpO1xcbiAyOTA6XFx0XFxuIDI5MTpcXHRcXHR2bV9mbGFnc19zZXQodm1hLCBWTV9ET05URVhQQU5EKTtcXG4gMjkyOlxcdFxcdHJldHVybiB2bV9pbnNlcnRfcGFnZXModm1hLCB2bWEtXFx1MDAzZXZtX3N0YXJ0LCBtci1cXHUwMDNlcGFnZXMsIFxcdTAwMjZucl9wYWdlcyk7XFxuIDI5MzpcXHR9XFxuIDI5NDpcXHRcXG4gMjk1OlxcdF9fY29sZCBpbnQgaW9fdXJpbmdfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuIDI5NjpcXHR7XFxuIDI5NzpcXHRcXHRzdHJ1Y3QgaW9fcmluZ19jdHggKmN0eCA9IGZpbGUtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gMjk4OlxcdFxcdHNpemVfdCBzeiA9IHZtYS1cXHUwMDNldm1fZW5kIC0gdm1hLVxcdTAwM2V2bV9zdGFydDtcXG4gMjk5OlxcdFxcdGxvbmcgb2Zmc2V0ID0gdm1hLVxcdTAwM2V2bV9wZ29mZiBcXHUwMDNjXFx1MDAzYyBQQUdFX1NISUZUO1xcbiAzMDA6XFx0XFx0dW5zaWduZWQgaW50IHBhZ2VfbGltaXQgPSBVSU5UX01BWDtcXG4gMzAxOlxcdFxcdHN0cnVjdCBpb19tYXBwZWRfcmVnaW9uICpyZWdpb247XFxuIDMwMjpcXHRcXHR2b2lkICpwdHI7XFxuIDMwMzpcXHRcXG4gMzA0OlxcdFxcdGd1YXJkKG11dGV4KShcXHUwMDI2Y3R4LVxcdTAwM2VtbWFwX2xvY2spO1xcbiAzMDU6XFx0XFxuIDMwNjpcXHRcXHRwdHIgPSBpb191cmluZ192YWxpZGF0ZV9tbWFwX3JlcXVlc3QoZmlsZSwgdm1hLVxcdTAwM2V2bV9wZ29mZik7XFxuIDMwNzpcXHRcXHRpZiAoSVNfRVJSKHB0cikpXFxuIDMwODpcXHRcXHRcXHRyZXR1cm4gUFRSX0VSUihwdHIpO1xcbiAzMDk6XFx0XFxuIDMxMDpcXHRcXHRzd2l0Y2ggKG9mZnNldCBcXHUwMDI2IElPUklOR19PRkZfTU1BUF9NQVNLKSB7XFxuIDMxMTpcXHRcXHRjYXNlIElPUklOR19PRkZfU1FfUklORzpcXG4gMzEyOlxcdFxcdGNhc2UgSU9SSU5HX09GRl9DUV9SSU5HOlxcbiAzMTM6XFx0XFx0XFx0cGFnZV9saW1pdCA9IChzeiArIFBBR0VfU0laRSAtIDEpIFxcdTAwM2VcXHUwMDNlIFBBR0VfU0hJRlQ7XFxuIDMxNDpcXHRcXHRcXHRicmVhaztcXG4gMzE1OlxcdFxcdH1cXG4gMzE2OlxcdFxcbiAzMTc6XFx0XFx0cmVnaW9uID0gaW9fbW1hcF9nZXRfcmVnaW9uKGN0eCwgdm1hLVxcdTAwM2V2bV9wZ29mZik7XFxuIDMxODpcXHRcXHRyZXR1cm4gaW9fcmVnaW9uX21tYXAoY3R4LCByZWdpb24sIHZtYSwgcGFnZV9saW1pdCk7XFxuIDMxOTpcXHR9XFxuIDMyMDpcXHRcXG4gMzIxOlxcdHVuc2lnbmVkIGxvbmcgaW9fdXJpbmdfZ2V0X3VubWFwcGVkX2FyZWEoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gMzIyOlxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGxlbiwgdW5zaWduZWQgbG9uZyBwZ29mZixcXG4gMzIzOlxcdFxcdFxcdFxcdFxcdFxcdCB1bnNpZ25lZCBsb25nIGZsYWdzKVxcbiAzMjQ6XFx0e1xcbiAzMjU6XFx0XFx0c3RydWN0IGlvX3JpbmdfY3R4ICpjdHggPSBmaWxwLVxcdTAwM2Vwcml2YXRlX2RhdGE7XFxuIDMyNjpcXHRcXHR2b2lkICpwdHI7XFxuIDMyNzpcXHRcXG4gMzI4OlxcdFxcdC8qXFxuIDMyOTpcXHRcXHQgKiBEbyBub3QgYWxsb3cgdG8gbWFwIHRvIHVzZXItcHJvdmlkZWQgYWRkcmVzcyB0byBhdm9pZCBicmVha2luZyB0aGVcXG4gMzMwOlxcdFxcdCAqIGFsaWFzaW5nIHJ1bGVzLiBVc2Vyc3BhY2UgaXMgbm90IGFibGUgdG8gZ3Vlc3MgdGhlIG9mZnNldCBhZGRyZXNzIG9mXFxuIDMzMTpcXHRcXHQgKiBrZXJuZWwga21hbGxvYygpZWQgbWVtb3J5IGFyZWEuXFxuIDMzMjpcXHRcXHQgKi9cXG4gMzMzOlxcdFxcdGlmIChhZGRyKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNzozMjozOS41MjYzMTc2NDNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk5MDgxMjI5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgQWxsb2NhdGlvbiBGaXgqKlxuXG5Pa2F5LCBzbyBgaW9fdXJpbmdfbW1hcGAgcmV0dXJucyB0aGUgZXJyb3IgY29kZSBkaXJlY3RseSwgd2hpY2ggaXMgZ29vZC4gVGhlIHBhdGNoIHNwZWNpZmljYWxseSBhZGRyZXNzZXMgdGhlIHJldHVybiB2YWx1ZSBvZiBgdm1faW5zZXJ0X3BhZ2VzYCB3aGVuIGEgbWVtb3J5IGFsbG9jYXRpb24gZmFpbHMuIFRoaXMgaXMgYSBjbGVhciBmdW5jdGlvbmFsIGNoYW5nZSwgbWFraW5nIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJJ3ZlIGdvdCB0byBydW4gdGhpcyB0aHJvdWdoIGl0cyBwYWNlcy5cblxuQWxyaWdodCwgbGV0J3MgcHJlcCB0aGUgcmVzcG9uc2UuIERlZmluaXRlbHkgYFdvcnRoRnV6emluZzogdHJ1ZWAuIFRoZSBwcmltYXJ5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbiBhcmUgYHZtX2luc2VydF9wYWdlc2AsIGBpb191cmluZ19tbWFwYCwgYHRjcF96ZXJvY29weV9yZWNlaXZlYCwgYHJpbmdfYnVmZmVyX21hcGAsIGFuZCBgbWFwX2tlcm5lbF9wYWdlc19jb21wbGV0ZWAuXG5cbldhaXQgYSBtaW51dGUsIGBtYXBfa2VybmVsX3BhZ2VzX2NvbXBsZXRlYCBpcyB1c2VkIHdpdGhpbiBgbW1hcF9hY3Rpb25fY29tcGxldGVgLCB3aGljaCBpbiB0dXJuIGlzIHVzZWQgaW4gYF9fbW1hcF9yZWdpb25gLiBUaGlua2luZyBvdXQgbG91ZCwgdGhlbiBgX19tbWFwX3JlZ2lvbmAgaXRzZWxmIGNvdWxkIGJlIGEgdmFsdWFibGUgdGFyZ2V0LCBob3dldmVyLCB0aGF0J3MgbGlrZWx5IGEgaG90IHBhdGguIFNvLCBgbW1hcF9hY3Rpb25fY29tcGxldGVgIG1pZ2h0IGJlIHRoZSBiZXR0ZXIgYmV0LiBIb3dldmVyLCB0aGUgcm9vdCBjYXVzZSBpcyB3aXRoIGB2bV9pbnNlcnRfcGFnZXNgLCBzbyBJIHN0aWxsIG5lZWQgdG8gZ2l2ZSBpdCB0aGUgcHJpbWFyeSBmb2N1cy5cblxuTm93LCBsZXQgbWUgbWFrZSBzdXJlIHRoYXQgYElPX1VSSU5HYCBpcyB0aGUgb25seSBjb25maWcgdGhhdCBuZWVkcyB0byBiZSBlbmFibGVkLiBJIHNlZSB0aGF0IGBDT05GSUdfSU9fVVJJTkdgLCBgQ09ORklHX0lORVRgLCBhbmQgYENPTkZJR19UUkFDSU5HYCBhcmUgc3RhbmRhcmQsIHNvIG5vIG5lZWQgdG8gb3ZlcnRoaW5rIGl0LlxuXG5JJ2xsIHF1aWNrbHkgY2hlY2sgYENPTkZJR19JT19VUklOR2AgaW4gS2NvbmZpZyB0byBtYWtlIHN1cmUgSSdtIG5vdCBtaXNzaW5nIGFueXRoaW5nLCBidXQgSSdtIGZlZWxpbmcgY29uZmlkZW50IGluIHRoaXMgYW5hbHlzaXMgc28gZmFyLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMjMxMCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMyOjQ1LjUxNzEzMjM0MVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY0MjUyNTkzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBJT19VUklOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbml0L0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5pdC9LY29uZmlnPTE5MTA9Y29uZmlnIEFJT1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MTctXFxuaW5pdC9LY29uZmlnOjE5MTg6Y29uZmlnIElPX1VSSU5HXFxuaW5pdC9LY29uZmlnLTE5MTktXFx0Ym9vbCBcXFwiRW5hYmxlIElPIHVyaW5nIHN1cHBvcnRcXFwiIGlmIEVYUEVSVFxcbi0tXFxuaW5pdC9LY29uZmlnPTE5Mjc9Y29uZmlnIEdDT1ZfUFJPRklMRV9VUklOR1xcbi0tXFxuaW5pdC9LY29uZmlnLTE5MzktXFxuaW5pdC9LY29uZmlnOjE5NDA6Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxcbmluaXQvS2NvbmZpZy0xOTQxLVxcdHRyaXN0YXRlIFxcXCJFbmFibGUgaW9fdXJpbmcgbW9jayBmaWxlcyAoRXhwZXJpbWVudGFsKVxcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMyOjQ1LjY4MTM5MDE2NFoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MjY3Mjk1Njk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqSU9fVVJJTkcsIFplcm9jb3B5LCBhbmQgUmluZyBCdWZmZXJzOiBBIE1lbnRhbCBNYXAqKlxuXG5SaWdodCwgc28gd2UncmUgdGFsa2luZyBhYm91dCBgSU9fVVJJTkdgIGFzIHRoZSBjb3JlIGNvbmZpZ3VyYXRpb24uIEdvdCBpdC4gTm93LCBsZXQncyB6ZXJvIGluIG9uIGB0Y3BfemVyb2NvcHlfcmVjZWl2ZWAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIldoZXJlIGRvZXMgdGhpcyBhY3R1YWxseSBsaXZlP1wiIEFoLCB5ZXMsIGBuZXQvaXB2NC90Y3AuY2AuIFRoYXQncyByaWdodCwgdGhhdCdzIGEgY29yZSBjb21wb25lbnQsIGFsd2F5cyBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIE5vIHN1cnByaXNlcyB0aGVyZS5cblxuTm93LCBsZXQncyBjaXJjbGUgYmFjayB0byBgcmluZ19idWZmZXJfbWFwYC4gVGhhdCdzIGluIGBrZXJuZWwvdHJhY2UvcmluZ19idWZmZXIuY2AsIGFuZCBpZiBJIHJlY2FsbCBjb3JyZWN0bHkgZnJvbSBwYXN0IGV4cGVyaWVuY2VzLCB0aGF0J3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZy4gWWVwLCBpdCdzIGRlcGVuZGVudCBvbiBgQ09ORklHX1RSQUNJTkdgLiBNYWtlcyBzZW5zZSwgYXMgcmluZyBidWZmZXJzIGFyZSBjcnVjaWFsIGZvciB0cmFjaW5nIGFuZCBwZXJmb3JtYW5jZSBtb25pdG9yaW5nLiBTbywgYElPX1VSSU5HYCwgYHRjcF96ZXJvY29weV9yZWNlaXZlYCwgYW5kIGBDT05GSUdfVFJBQ0lOR2AgYXJlIGFsbCBjb25uZWN0ZWQgaW4gdGhpcyBjb250ZXh0LCBub3cgbGV0IG1lIHRoaW5rIGFib3V0IGhvdyBpdCBhbGwgdGllcyBpbi4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzExMywiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMyOjQ5Ljk0ODY4OTQ4MVoiLCJTZXEiOjM4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY0ODIwODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQUNJTkdcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwia2VybmVsL3RyYWNlL0tjb25maWc9MTYzPWNvbmZpZyBQUkVFTVBUSVJRX1RSQUNFUE9JTlRTXFxuLS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xNzgtXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTc5OmNvbmZpZyBUUkFDSU5HXFxua2VybmVsL3RyYWNlL0tjb25maWctMTgwLVxcdGJvb2xcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnPTE5MD1jb25maWcgR0VORVJJQ19UUkFDRVJcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTE5Ny0jXFxua2VybmVsL3RyYWNlL0tjb25maWc6MTk4OmNvbmZpZyBUUkFDSU5HX1NVUFBPUlRcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy0xOTktXFx0Ym9vbFxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9NzA3PWVuZGNob2ljZVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTcwOC1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo3MDk6Y29uZmlnIFRSQUNJTkdfQlJBTkNIRVNcXG5rZXJuZWwvdHJhY2UvS2NvbmZpZy03MTAtXFx0Ym9vbFxcbi0tXFxua2VybmVsL3RyYWNlL0tjb25maWc9ODk1PWNvbmZpZyBGVFJBQ0VfTUNPVU5UX1VTRV9SRUNPUkRNQ09VTlRcXG4tLVxcbmtlcm5lbC90cmFjZS9LY29uZmlnLTkwMS1cXG5rZXJuZWwvdHJhY2UvS2NvbmZpZzo5MDI6Y29uZmlnIFRSQUNJTkdfTUFQXFxua2VybmVsL3RyYWNlL0tjb25maWctOTAzLVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTc6MzI6NDkuOTk1MTc2MDE2WiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE2NjczMzQ4MzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIGB2bV9pbnNlcnRfcGFnZXNgKipcblxuT2theSwgZmlyc3QgdGhpbmdzIGZpcnN0LCBgVFJBQ0lOR2Agc2VlbXMgc3RhbmRhcmQgZW5vdWdoLCBub3RoaW5nIHRvIHdvcnJ5IGFib3V0IHRoZXJlLiBOb3csIGxldCdzIGNvbnNpZGVyIHRoZSBgQ09ORklHX01NVWAgZGVwZW5kZW5jeS4gTG9va2luZyBhdCBgbW0vbWVtb3J5LmNgLCB0aGUgZGVmaW5pdGlvbiBvZiBgdm1faW5zZXJ0X3BhZ2VzYCBpcyBjb25kaXRpb25hbCBvbiBgQ09ORklHX01NVWAsIHdoaWNoIGlzIHdoYXQgSSB3b3VsZCBleHBlY3QuIEhvd2V2ZXIsIGBtbS9ub21tdS5jYCBhbHNvIGhhcyBhIGB2bV9pbnNlcnRfcGFnZXNgLCB3aGljaCByZXR1cm5zIGAtRUlOVkFMYC4gVGhpcyBtZWFucyB0byBwcm9wZXJseSB0ZXN0IHRoZSBjaGFuZ2VzLCBJJ2xsIG5lZWQgYENPTkZJR19NTVVgIGVuYWJsZWQsIHdoaWNoIGlzbid0IGEgcHJvYmxlbSBzaW5jZSBpdCdzIGFsbW9zdCBhbHdheXMgZW5hYmxlZCBvbiBtb2Rlcm4gYXJjaGl0ZWN0dXJlcy5cblxuSSdsbCBhZGQgYElPX1VSSU5HYCB0byBgRW5hYmxlQ29uZmlnc2AgdG8ga2VlcCB0cmFjayBvZiB0aGF0LlxuXG5NeSBrZXkgZm9jdXMgc3ltYm9scyBoZXJlIGFyZSBgdm1faW5zZXJ0X3BhZ2VzYCwgYGlvX3VyaW5nX21tYXBgLCBgdGNwX3plcm9jb3B5X3JlY2VpdmVgLCBgcmluZ19idWZmZXJfbWFwYCwgYW5kIGBtbWFwX2FjdGlvbl9jb21wbGV0ZWAuXG5cbldhaXQsIGBtbWFwX2FjdGlvbl9jb21wbGV0ZWAgaXMgaW4gYG1tL3V0aWwuY2AuIEdvb2QsIGxldCBtZSBqdXN0IHF1aWNrbHkgY29uZmlybSB0aGF0IGl0J3MgcmVhY2hhYmxlLiBZZXMsIGl0J3MgY2FsbGVkIGJ5IGBfX21tYXBfcmVnaW9uYC5cblxuTm93LCBiYWNrIHRvIHRoZSBwYXRjaCBpdHNlbGYuIEknbSBzZWVpbmcgY2hhbmdlcyB0byBlcnJvciBoYW5kbGluZyBpbiBgdm1faW5zZXJ0X3BhZ2VzYC4gU3BlY2lmaWNhbGx5LCB0aGUgY29kZSBub3cgY29ycmVjdGx5IHJldHVybnMgYC1FTk9NRU1gIHdoZW4gcGFnZSB0YWJsZSBhbGxvY2F0aW9uIGZhaWxzIGFuZCBzZXRzIHRoZSBjb3JyZWN0IHJldHVybiBjb2RlcyB0aHJvdWdob3V0IHRoZSBmdW5jdGlvbi4gSXQgbG9va3MgbGlrZSB0aGUgb3JpZ2luYWwgY29kZSBjb3VsZCByZXR1cm4gYC1FRkFVTFRgIGluIGNhc2VzIHdoZXJlIGAtRU5PTUVNYCB3YXMgbW9yZSBhcHByb3ByaWF0ZSwgZXNwZWNpYWxseSB3aGVuIGB3YWxrX3RvX3BtZGAgb3IgYHB0ZV9hbGxvY2AgZmFpbC4gVGhlIGNoYW5nZSBhbHNvIGluY2x1ZGVzIGEgcmVuYW1lIG9mIGB3YWxrX3RvX3BtZGAgdG8gYHBvcHVsYXRlX3RvX3BtZGAuXG5cblNvIHRoZSBwYXRjaCBmaXhlcyBhIGJ1ZyB3aGVyZSBgLUVGQVVMVGAgd2FzIHJldHVybmVkIGluc3RlYWQgb2YgYC1FTk9NRU1gIGluIHNldmVyYWwgc2l0dWF0aW9ucy4gU3BlY2lmaWNhbGx5LCBpZiBgd2Fsa190b19wbWRgIGZhaWxlZCwgdGhlIGZ1bmN0aW9uIG5vdyByZXR1cm5zIGAtRU5PTUVNYCBpbnN0ZWFkIG9mIGAtRUZBVUxUYC4gVGhlIHNhbWUgaXMgdHJ1ZSBmb3IgYHB0ZV9hbGxvY2AuXG5cbk5vdywgaWYgYWxsIHBhZ2VzIGluIGEgYmF0Y2ggYXJlIHN1Y2Nlc3NmdWxseSBpbnNlcnRlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgMC5cblxuQmFzZWQgb24gdGhpcyBhbmFseXNpcywgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLlxuXG5JJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzcyMCwiT3V0cHV0VG9rZW5zIjoxNzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDg1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE3OjMzOjA2LjY2ODUyNzQ4N1oiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc2MjcwNTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtX2luc2VydF9wYWdlc1wiLFxuICAgIFwiaW9fdXJpbmdfbW1hcFwiLFxuICAgIFwidGNwX3plcm9jb3B5X3JlY2VpdmVcIixcbiAgICBcInJpbmdfYnVmZmVyX21hcFwiLFxuICAgIFwibW1hcF9hY3Rpb25fY29tcGxldGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBpbnNlcnRfcGFnZXNgIHdoZW4gcGFnZSB0YWJsZSBhbGxvY2F0aW9uIGZhaWxzLCByZXR1cm5pbmcgYC1FTk9NRU1gIGluc3RlYWQgb2YgYC1FRkFVTFRgLiBJdCBhbHNvIHJlbmFtZXMgYHdhbGtfdG9fcG1kYCB0byBgcG9wdWxhdGVfdG9fcG1kYCB0byBiZXR0ZXIgcmVmbGVjdCBpdHMgYmVoYXZpb3IuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBjYWxsZXJzIG9mIGB2bV9pbnNlcnRfcGFnZXNgIHN1Y2ggYXMgaW9fdXJpbmcsIHRjcCB6ZXJvY29weSwgYW5kIHRyYWNlIHJpbmcgYnVmZmVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJJT19VUklOR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInZtX2luc2VydF9wYWdlc1wiLFxuICAgIFwiaW9fdXJpbmdfbW1hcFwiLFxuICAgIFwidGNwX3plcm9jb3B5X3JlY2VpdmVcIixcbiAgICBcInJpbmdfYnVmZmVyX21hcFwiLFxuICAgIFwibW1hcF9hY3Rpb25fY29tcGxldGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyB0aGUgcmV0dXJuIHZhbHVlIG9mIGBpbnNlcnRfcGFnZXNgIHdoZW4gcGFnZSB0YWJsZSBhbGxvY2F0aW9uIGZhaWxzLCByZXR1cm5pbmcgYC1FTk9NRU1gIGluc3RlYWQgb2YgYC1FRkFVTFRgLiBJdCBhbHNvIHJlbmFtZXMgYHdhbGtfdG9fcG1kYCB0byBgcG9wdWxhdGVfdG9fcG1kYCB0byBiZXR0ZXIgcmVmbGVjdCBpdHMgYmVoYXZpb3IuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IHRoYXQgYWZmZWN0cyBjYWxsZXJzIG9mIGB2bV9pbnNlcnRfcGFnZXNgIHN1Y2ggYXMgaW9fdXJpbmcsIHRjcCB6ZXJvY29weSwgYW5kIHRyYWNlIHJpbmcgYnVmZmVycy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },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-workflowhwqjv[1] Phase: Succeeded StartedAt: 2026-08-05 17:33:17 +0000 UTC FinishedAt: 2026-08-05 17:33:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 17:33:17 +0000 UTC FinishedAt: 2026-08-05 17:33:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[2] Phase: Succeeded StartedAt: 2026-08-05 17:33:17 +0000 UTC FinishedAt: 2026-08-05 21:17:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 17:33:17 +0000 UTC FinishedAt: 2026-08-05 21:17:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 17:33:17 +0000 UTC FinishedAt: 2026-08-05 17:33:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 17:33:17 +0000 UTC FinishedAt: 2026-08-05 17:33:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-workflowhwqjv/series-workflowhwqjv-convert-artifact-183803201/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 17:33:27 +0000 UTC FinishedAt: 2026-08-05 17:49:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 17:33:27 +0000 UTC FinishedAt: 2026-08-05 17:49: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:*b50e39ee-0e67-479f-975d-e4eed49ac933,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-workflowhwqjv/series-workflowhwqjv-convert-artifact-183803201/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": "d60d7eac-c6f0-40d0-9ba0-97b1bf5db685", "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-workflowhwqjv/series-workflowhwqjv-build-action-3305227119/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 17:33:27 +0000 UTC FinishedAt: 2026-08-05 17:49: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:*b50e39ee-0e67-479f-975d-e4eed49ac933,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-workflowhwqjv/series-workflowhwqjv-convert-artifact-183803201/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": "d60d7eac-c6f0-40d0-9ba0-97b1bf5db685", "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-workflowhwqjv/series-workflowhwqjv-build-action-3305227119/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 17:49:45 +0000 UTC FinishedAt: 2026-08-05 17:49:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 17:49:45 +0000 UTC FinishedAt: 2026-08-05 17:49:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 17:49:45 +0000 UTC FinishedAt: 2026-08-05 17:49:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 17:49:45 +0000 UTC FinishedAt: 2026-08-05 17:49:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-workflowhwqjv/series-workflowhwqjv-convert-artifact-1253553940/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 17:49:55 +0000 UTC FinishedAt: 2026-08-05 17:52:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 17:49:55 +0000 UTC FinishedAt: 2026-08-05 17:51:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d60d7eac-c6f0-40d0-9ba0-97b1bf5db685,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-workflowhwqjv/series-workflowhwqjv-build-action-3305227119/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-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 17:52:02 +0000 UTC FinishedAt: 2026-08-05 17:52:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 17:52:02 +0000 UTC FinishedAt: 2026-08-05 17:52:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 17:52:02 +0000 UTC FinishedAt: 2026-08-05 18:13:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 17:52:02 +0000 UTC FinishedAt: 2026-08-05 18:13:53 +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:*b50e39ee-0e67-479f-975d-e4eed49ac933,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-workflowhwqjv/series-workflowhwqjv-convert-artifact-1253553940/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": "4e2879b0-c0e8-46d1-ad60-2a7235148d46", "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-workflowhwqjv/series-workflowhwqjv-build-action-3221233632/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 17:52:02 +0000 UTC FinishedAt: 2026-08-05 18:13:43 +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:*b50e39ee-0e67-479f-975d-e4eed49ac933,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-workflowhwqjv/series-workflowhwqjv-convert-artifact-1253553940/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": "4e2879b0-c0e8-46d1-ad60-2a7235148d46", "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-workflowhwqjv/series-workflowhwqjv-build-action-3221233632/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 18:13:53 +0000 UTC FinishedAt: 2026-08-05 18:13:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 18:13:53 +0000 UTC FinishedAt: 2026-08-05 18:13:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 18:13:53 +0000 UTC FinishedAt: 2026-08-05 18:15:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 18:13:53 +0000 UTC FinishedAt: 2026-08-05 18:15:32 +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:*4e2879b0-c0e8-46d1-ad60-2a7235148d46,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-workflowhwqjv/series-workflowhwqjv-build-action-3221233632/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-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 18:15:42 +0000 UTC FinishedAt: 2026-08-05 21:17:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 18:15:42 +0000 UTC FinishedAt: 2026-08-05 21:17:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*d60d7eac-c6f0-40d0-9ba0-97b1bf5db685,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4e2879b0-c0e8-46d1-ad60-2a7235148d46,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-workflowhwqjv/series-workflowhwqjv-build-action-3305227119/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-workflowhwqjv/series-workflowhwqjv-build-action-3221233632/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 18:15:42 +0000 UTC FinishedAt: 2026-08-05 18:15:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 18:15:42 +0000 UTC FinishedAt: 2026-08-05 18:15:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhwqjv/series-workflowhwqjv-convert-artifact-3192216381/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 18:15:42 +0000 UTC FinishedAt: 2026-08-05 18:15:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 18:15:42 +0000 UTC FinishedAt: 2026-08-05 18:15:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 18:15:42 +0000 UTC FinishedAt: 2026-08-05 18:15:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 18:15:52 +0000 UTC FinishedAt: 2026-08-05 21:17:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhwqjv[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"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-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["vm_insert_pages","io_uring_mmap","tcp_zerocopy_receive","ring_buffer_map","mmap_action_complete"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"848acc8ffe1b7cd5f1bf427b93069becfebc2c9d","config_name":"upstream-apparmor-kasan.config","enable_configs":["IO_URING"],"series_id":"23a3eda3-9bab-4c50-b136-d04b42410800","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-05 18:15:52 +0000 UTC FinishedAt: 2026-08-05 21:17:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d60d7eac-c6f0-40d0-9ba0-97b1bf5db685,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4e2879b0-c0e8-46d1-ad60-2a7235148d46,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-workflowhwqjv/series-workflowhwqjv-build-action-3305227119/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-workflowhwqjv/series-workflowhwqjv-build-action-3221233632/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-workflowhwqjv/series-workflowhwqjv-convert-artifact-3192216381/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,}