Name: series-workflowhhldg Phase: Succeeded StartedAt: 2026-08-05 16:36:05 +0000 UTC FinishedAt: 2026-08-05 20:24:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[0] Phase: Succeeded StartedAt: 2026-08-05 16:36:05 +0000 UTC FinishedAt: 2026-08-05 16:39:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[0].run-triage Phase: Succeeded StartedAt: 2026-08-05 16:36:05 +0000 UTC FinishedAt: 2026-08-05 16:39:24 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP" ], "series_id": "d07d2ce1-3812-4686-9088-a07b564ad2b8" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "sys_swapoff" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzeXNfc3dhcG9mZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBpbiBgZmluZF9uZXh0X3RvX3VudXNlYCB1c2VkIGR1cmluZyBgc3dhcG9mZmAgdG8gc2tpcCBlbXB0eSBzd2FwIGNsdXN0ZXJzLiBUaGlzIGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgb2Ygc3dhcCBkZWFsbG9jYXRpb24gYW5kIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBzd2Fwb2ZmYCBzeXNjYWxsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzFlNDYyYzg2YzBlYjQ2YjY2Zjk2MTNhZGZlMDQwNDVhY2U2ODMwYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTY6Mzg6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggMmNiMWQyOTMwN2M1NC4uMmIxNGUyZTk2NzNiNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTI0Niw3ICYjNDM7MjQ2LDcgQEAgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3Qge1xuIFx0c3RydWN0IHBsaXN0X25vZGUgbGlzdDtcdFx0LyogZW50cnkgaW4gc3dhcF9hY3RpdmVfaGVhZCAqL1xuIFx0c2lnbmVkIGNoYXJcdHR5cGU7XHRcdC8qIHN0cmFuZ2UgbmFtZSBmb3IgYW4gaW5kZXggKi9cbiBcdHVuc2lnbmVkIGludFx0bWF4O1x0XHQvKiBzaXplIG9mIHRoaXMgc3dhcCBkZXZpY2UgKi9cbi1cdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvOyAvKiBjbHVzdGVyIGluZm8uIE9ubHkgZm9yIFNTRCAqL1xuJiM0MztcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvOyAvKiBhcnJheSwgb25lIGVudHJ5IHBlciBjbHVzdGVyICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfY2x1c3RlcnM7IC8qIGZyZWUgY2x1c3RlcnMgbGlzdCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBmdWxsX2NsdXN0ZXJzOyAvKiBmdWxsIGNsdXN0ZXJzIGxpc3QgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbm9uZnVsbF9jbHVzdGVyc1tTV0FQX05SX09SREVSU107XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IGRlYTJkM2IzNmUwNmYuLjM2ZTRlODg4NGI3NjQgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMzcwLDggJiM0MzszNzAsNiBAQCBzdGF0aWMgdm9pZCBkaXNjYXJkX3N3YXBfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHR9XG4gfVxuIFxuLSNkZWZpbmUgTEFURU5DWV9MSU1JVFx0XHQyNTZcbi1cbiBzdGF0aWMgaW5saW5lIGJvb2wgY2x1c3Rlcl9pc19lbXB0eShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmluZm8pXG4ge1xuIFx0cmV0dXJuIGluZm8tXHUwMDNlY291bnQgPT0gMDtcbkBAIC0yNzYzLDcgJiM0MzsyNzYxLDkgQEAgc3RhdGljIGludCB1bnVzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IHR5cGUpXG4gc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgcHJldilcbiB7XG4tXHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaSwgZW5kO1xuJiM0MztcdHVuc2lnbmVkIGludCBjaV9vZmY7XG4gXHR1bnNpZ25lZCBsb25nIHN3cF90YjtcbiBcbiBcdC8qXG5AQCAtMjc3MiwxOSAmIzQzOzI3NzIsMzQgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0ICogaGl0cyBhcmUgb2theSwgYW5kIHN5c19zd2Fwb2ZmKCkgaGFzIGFscmVhZHkgcHJldmVudGVkIG5ld1xuIFx0ICogYWxsb2NhdGlvbnMgZnJvbSB0aGlzIGFyZWEgKHdoaWxlIGhvbGRpbmcgc3dhcF9sb2NrKS5cbiBcdCAqL1xuLVx0Zm9yIChpID0gcHJldiAmIzQzOyAxOyBpIFx1MDAzYyBzaS1cdTAwM2VtYXg7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSksXG4tXHRcdFx0XHRcdGkgJSBTV0FQRklMRV9DTFVTVEVSKTtcbi1cdFx0aWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpIFx1MDAyNlx1MDAyNiAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRpZiAoKGkgJSBMQVRFTkNZX0xJTUlUKSA9PSAwKVxuJiM0MztcdGkgPSBwcmV2ICYjNDM7IDE7XG4mIzQzO1x0d2hpbGUgKGkgXHUwMDNjIHNpLVx1MDAzZW1heCkge1xuJiM0MztcdFx0Y2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpO1xuJiM0MztcdFx0Y2lfb2ZmID0gaSAlIFNXQVBGSUxFX0NMVVNURVI7XG4mIzQzO1x0XHRlbmQgPSBpIC0gY2lfb2ZmICYjNDM7IFNXQVBGSUxFX0NMVVNURVI7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEFuIGVtcHR5IGNsdXN0ZXIgaGFzIG5vIHNsb3QgaW4gdXNlLCBzbyBza2lwIGl0IHdob2xlLlxuJiM0MztcdFx0ICogQSBzbG90IGlzIHVuY291bnRlZCBvbmx5IGFmdGVyIGl0cyBmb2xpbyBsZWZ0IHRoZSBzd2FwXG4mIzQzO1x0XHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXG4mIzQzO1x0XHQgKiBDb3VudCBvbmx5IGRyb3BzIGhlcmUsIHNvIGEgUkVBRF9PTkNFKCkgd2l0aG91dCBjaS1cdTAwM2Vsb2NrIGlzXG4mIzQzO1x0XHQgKiBlbm91Z2gsIHVubGlrZSBpbiBldmVyeSBvdGhlciBjbHVzdGVyX2lzX2VtcHR5KCkgY2FsbGVyLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIVJFQURfT05DRShjaS1cdTAwM2Vjb3VudCkpIHtcbiYjNDM7XHRcdFx0aSA9IGVuZDtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbi1cdH1cbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4gXG4tXHRpZiAoaSA9PSBzaS1cdTAwM2VtYXgpXG4tXHRcdGkgPSAwO1xuJiM0MztcdFx0Zm9yICg7IGkgXHUwMDNjIGVuZDsgY2lfb2ZmJiM0MzsmIzQzOywgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3dwX3RiID0gc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7XG4mIzQzO1x0XHRcdGlmICghc3dwX3RiX2lzX251bGwoc3dwX3RiKSBcdTAwMjZcdTAwMjYgIXN3cF90Yl9pc19iYWQoc3dwX3RiKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gaTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGNvbmRfcmVzY2hlZCgpO1xuJiM0MztcdH1cbiBcbi1cdHJldHVybiBpO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N5c19zd2Fwb2ZmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIGluIGBmaW5kX25leHRfdG9fdW51c2VgIHVzZWQgZHVyaW5nIGBzd2Fwb2ZmYCB0byBza2lwIGVtcHR5IHN3YXAgY2x1c3RlcnMuIFRoaXMgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBvZiBzd2FwIGRlYWxsb2NhdGlvbiBhbmQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYHN3YXBvZmZgIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMWU0NjJjODZjMGViNDZiNjZmOTYxM2FkZmUwNDA0NWFjZTY4MzBhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgNSAxNjozODoyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggMmNiMWQyOTMwN2M1NC4uMmIxNGUyZTk2NzNiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTI0Niw3ICYjNDM7MjQ2LDcgQEAgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgewogCXN0cnVjdCBwbGlzdF9ub2RlIGxpc3Q7CQkvKiBlbnRyeSBpbiBzd2FwX2FjdGl2ZV9oZWFkICovCiAJc2lnbmVkIGNoYXIJdHlwZTsJCS8qIHN0cmFuZ2UgbmFtZSBmb3IgYW4gaW5kZXggKi8KIAl1bnNpZ25lZCBpbnQJbWF4OwkJLyogc2l6ZSBvZiB0aGlzIHN3YXAgZGV2aWNlICovCi0Jc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjbHVzdGVyX2luZm87IC8qIGNsdXN0ZXIgaW5mby4gT25seSBmb3IgU1NEICovCiYjNDM7CXN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvOyAvKiBhcnJheSwgb25lIGVudHJ5IHBlciBjbHVzdGVyICovCiAJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2NsdXN0ZXJzOyAvKiBmcmVlIGNsdXN0ZXJzIGxpc3QgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGZ1bGxfY2x1c3RlcnM7IC8qIGZ1bGwgY2x1c3RlcnMgbGlzdCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbm9uZnVsbF9jbHVzdGVyc1tTV0FQX05SX09SREVSU107CmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCBkZWEyZDNiMzZlMDZmLi4zNmU0ZTg4ODRiNzY0IDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmMKQEAgLTM3MCw4ICYjNDM7MzcwLDYgQEAgc3RhdGljIHZvaWQgZGlzY2FyZF9zd2FwX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLAogCX0KIH0KIAotI2RlZmluZSBMQVRFTkNZX0xJTUlUCQkyNTYKLQogc3RhdGljIGlubGluZSBib29sIGNsdXN0ZXJfaXNfZW1wdHkoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICppbmZvKQogewogCXJldHVybiBpbmZvLSZndDtjb3VudCA9PSAwOwpAQCAtMjc2Myw3ICYjNDM7Mjc2MSw5IEBAIHN0YXRpYyBpbnQgdW51c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCB0eXBlKQogc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLAogCQkJCQl1bnNpZ25lZCBpbnQgcHJldikKIHsKLQl1bnNpZ25lZCBpbnQgaTsKJiM0MzsJc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTsKJiM0MzsJdW5zaWduZWQgbG9uZyBpLCBlbmQ7CiYjNDM7CXVuc2lnbmVkIGludCBjaV9vZmY7CiAJdW5zaWduZWQgbG9uZyBzd3BfdGI7CiAKIAkvKgpAQCAtMjc3MiwxOSAmIzQzOzI3NzIsMzQgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLAogCSAqIGhpdHMgYXJlIG9rYXksIGFuZCBzeXNfc3dhcG9mZigpIGhhcyBhbHJlYWR5IHByZXZlbnRlZCBuZXcKIAkgKiBhbGxvY2F0aW9ucyBmcm9tIHRoaXMgYXJlYSAod2hpbGUgaG9sZGluZyBzd2FwX2xvY2spLgogCSAqLwotCWZvciAoaSA9IHByZXYgJiM0MzsgMTsgaSAmbHQ7IHNpLSZndDttYXg7IGkmIzQzOyYjNDM7KSB7Ci0JCXN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSksCi0JCQkJCWkgJSBTV0FQRklMRV9DTFVTVEVSKTsKLQkJaWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpICZhbXA7JmFtcDsgIXN3cF90Yl9pc19iYWQoc3dwX3RiKSkKLQkJCWJyZWFrOwotCQlpZiAoKGkgJSBMQVRFTkNZX0xJTUlUKSA9PSAwKQomIzQzOwlpID0gcHJldiAmIzQzOyAxOwomIzQzOwl3aGlsZSAoaSAmbHQ7IHNpLSZndDttYXgpIHsKJiM0MzsJCWNpID0gX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBpKTsKJiM0MzsJCWNpX29mZiA9IGkgJSBTV0FQRklMRV9DTFVTVEVSOwomIzQzOwkJZW5kID0gaSAtIGNpX29mZiAmIzQzOyBTV0FQRklMRV9DTFVTVEVSOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEFuIGVtcHR5IGNsdXN0ZXIgaGFzIG5vIHNsb3QgaW4gdXNlLCBzbyBza2lwIGl0IHdob2xlLgomIzQzOwkJICogQSBzbG90IGlzIHVuY291bnRlZCBvbmx5IGFmdGVyIGl0cyBmb2xpbyBsZWZ0IHRoZSBzd2FwCiYjNDM7CQkgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uCiYjNDM7CQkgKiBDb3VudCBvbmx5IGRyb3BzIGhlcmUsIHNvIGEgUkVBRF9PTkNFKCkgd2l0aG91dCBjaS0mZ3Q7bG9jayBpcwomIzQzOwkJICogZW5vdWdoLCB1bmxpa2UgaW4gZXZlcnkgb3RoZXIgY2x1c3Rlcl9pc19lbXB0eSgpIGNhbGxlci4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFSRUFEX09OQ0UoY2ktJmd0O2NvdW50KSkgewomIzQzOwkJCWkgPSBlbmQ7CiAJCQljb25kX3Jlc2NoZWQoKTsKLQl9CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiAKLQlpZiAoaSA9PSBzaS0mZ3Q7bWF4KQotCQlpID0gMDsKJiM0MzsJCWZvciAoOyBpICZsdDsgZW5kOyBjaV9vZmYmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykgewomIzQzOwkJCXN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpOwomIzQzOwkJCWlmICghc3dwX3RiX2lzX251bGwoc3dwX3RiKSAmYW1wOyZhbXA7ICFzd3BfdGJfaXNfYmFkKHN3cF90YikpCiYjNDM7CQkJCXJldHVybiBpOwomIzQzOwkJfQomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CX0KIAotCXJldHVybiBpOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB0cnlfdG9fdW51c2UodW5zaWduZWQgaW50IHR5cGUpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MjkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgU3dhcC1PZmYgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBgbW0vc3dhcGZpbGUuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAuIEl0JiMzOTtzIHByZXR0eSBmb2N1c2VkOyB0aGUga2V5IG1vZGlmaWNhdGlvbiBpcyB0byBgZmluZF9uZXh0X3RvX3VudXNlYCB3aXRoaW4gYG1tL3N3YXBmaWxlLmNgLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCBpdCBsb29rcyBsaWtlIGEgdGFyZ2V0ZWQgb3B0aW1pemF0aW9uIHRvIHNraXAgZW1wdHkgY2x1c3RlcnMgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBuZXh0IHN3YXAgZW50cnkgdG8gdW51c2UuIFRoaXMgZGlyZWN0bHkgaW1wYWN0cyB0aGUgc3dhcG9mZiBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgdGhlIGB0cnlfdG9fdW51c2VgIHBhdGguIERlZmluaXRlbHkgd29ydGggdGFraW5nIGEgY2xvc2UgbG9vayBhdCB0aGlzIHBhdGNoLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBjcml0aWNhbCBjb3JlIGtlcm5lbCBsb2dpYywgcGFydGljdWxhcmx5IGJlY2F1c2UgaXQmIzM5O3MgcmVsYXRlZCB0byBzd2Fwb2ZmLiBCZWNhdXNlIG9mIHRoaXMgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSwgdGhpcyBpcyBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgYSBiaXQgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGZpbmRfbmV4dF90b191bnVzZWAgYW5kIGB0cnlfdG9fdW51c2VgLiBJIHJlY2FsbCB0aGF0IGB0cnlfdG9fdW51c2VgIGlzIGludm9sdmVkIGluIHRoZSBgc3lzX3N3YXBvZmZgIChvciBga3N5c19zd2Fwb2ZmYCkgc3lzdGVtIGNhbGwgcGF0aC4gSSBzaG91bGQgcHJvYmFibHkgcXVpY2tseSB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggbW9yZSBkZXRhaWxlZCBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fdW51c2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmM9MTMxND1zdGF0aWMgdm9pZCBzd2FwX3JhbmdlX2ZyZWUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcbi0tXG5tbS9zd2FwZmlsZS5jLTEzMzYtXHQvKlxubW0vc3dhcGZpbGUuYzoxMzM3Olx0ICogTWFrZSBzdXJlIHRoYXQgdHJ5X3RvX3VudXNlKCkgb2JzZXJ2ZXMgc2ktXHUwMDNlaW51c2VfcGFnZXMgcmVhY2hpbmcgMFxubW0vc3dhcGZpbGUuYy0xMzM4LVx0ICogb25seSBhZnRlciB0aGUgYWJvdmUgY2xlYW51cHMgYXJlIGRvbmUuXG4tLVxubW0vc3dhcGZpbGUuYz0yNDcxPXN0YXRpYyBpbnQgdW51c2VfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxuLS1cbm1tL3N3YXBmaWxlLmMtMjQ4Mi1cdCAqIElmIHRoZSBmb2xpbyBpcyByZW1vdmVkIGZyb20gc3dhcCBjYWNoZSBieSBvdGhlcnMsIGNvbnRpbnVlIHRvXG5tbS9zd2FwZmlsZS5jOjI0ODM6XHQgKiB1bnVzZSBvdGhlciBQVEVzLiB0cnlfdG9fdW51c2UgbWF5IHRyeSBhZ2FpbiBpZiB3ZSBtaXNzZWQgdGhpcyBvbmUuXG5tbS9zd2FwZmlsZS5jLTI0ODQtXHQgKi9cbi0tXG5tbS9zd2FwZmlsZS5jPTI3NjE9c3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtMjc4My1cdFx0ICogQSBzbG90IGlzIHVuY291bnRlZCBvbmx5IGFmdGVyIGl0cyBmb2xpbyBsZWZ0IHRoZSBzd2FwXG5tbS9zd2FwZmlsZS5jOjI3ODQ6XHRcdCAqIGNhY2hlLCBzbyB0aGVyZSBpcyBub3RoaW5nIGhlcmUgZm9yIHRyeV90b191bnVzZSgpIHRvIGFjdCBvbi5cbm1tL3N3YXBmaWxlLmMtMjc4NS1cdFx0ICogQ291bnQgb25seSBkcm9wcyBoZXJlLCBzbyBhIFJFQURfT05DRSgpIHdpdGhvdXQgY2ktXHUwMDNlbG9jayBpc1xuLS1cbm1tL3N3YXBmaWxlLmMtMjgwNC1cbm1tL3N3YXBmaWxlLmM6MjgwNTpzdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcbm1tL3N3YXBmaWxlLmMtMjgwNi17XG4tLVxubW0vc3dhcGZpbGUuYy0yODk5LVx0Lypcbm1tL3N3YXBmaWxlLmM6MjkwMDpcdCAqIE1ha2Ugc3VyZSB0aGF0IGZ1cnRoZXIgY2xlYW51cHMgYWZ0ZXIgdHJ5X3RvX3VudXNlKCkgcmV0dXJucyBoYXBwZW5cbm1tL3N3YXBmaWxlLmMtMjkwMS1cdCAqIGFmdGVyIHN3YXBfcmFuZ2VfZnJlZSgpIHJlZHVjZXMgc2ktXHUwMDNlaW51c2VfcGFnZXMgdG8gMC5cbi0tXG5tbS9zd2FwZmlsZS5jLTI5MDctLypcbm1tL3N3YXBmaWxlLmM6MjkwODogKiBBZnRlciBhIHN1Y2Nlc3NmdWwgdHJ5X3RvX3VudXNlLCBpZiBubyBzd2FwIGlzIG5vdyBpbiB1c2UsIHdlIGtub3dcbm1tL3N3YXBmaWxlLmMtMjkwOS0gKiB3ZSBjYW4gZW1wdHkgdGhlIG1tbGlzdC4gIHN3YXBfbG9jayBtdXN0IGJlIGhlbGQgb24gZW50cnkgYW5kIGV4aXQuXG4tLVxubW0vc3dhcGZpbGUuYz0zMTUxPVNZU0NBTExfREVGSU5FMShzd2Fwb2ZmLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSlcbi0tXG5tbS9zd2FwZmlsZS5jLTMyMTEtXHRzZXRfY3VycmVudF9vb21fb3JpZ2luKCk7XG5tbS9zd2FwZmlsZS5jOjMyMTI6XHRlcnIgPSB0cnlfdG9fdW51c2UocC1cdTAwM2V0eXBlKTtcbm1tL3N3YXBmaWxlLmMtMzIxMy1cdGNsZWFyX2N1cnJlbnRfb29tX29yaWdpbigpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTd2Fwb2ZmIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0b3VjaGluZyB0aGUgY29kZSB0aGF0IGdvdmVybnMgaG93IHN3YXAgc3BhY2UgaXMgZGVhY3RpdmF0ZWQuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgY2hhbmdpbmcgYGZpbmRfbmV4dF90b191bnVzZWAsIHdoaWNoIGl0c2VsZiBmZWVkcyBpbnRvIGB0cnlfdG9fdW51c2VgLCBhbmQgdWx0aW1hdGVseSwgYHN5c19zd2Fwb2ZmYC4gRnJvbSBhIGZ1bmN0aW9uYWwgc3RhbmRwb2ludCwgdGhpcyBpcyBkZWZpbml0ZWx5IGEgcmVhY2hhYmxlIGNvZGUgcGF0aCwgc28gdGhhdCYjMzk7cyBnb29kLiBNeSBpbnN0aW5jdCBpcyB0aGF0IHRoaXMgYXJlYSB3YXJyYW50cyBhIGZ1enppbmcgY2FtcGFpZ24gZm9jdXNlZCBvbiB0aGUgYHN5c19zd2Fwb2ZmYCBhbmQgYHRyeV90b191bnVzZWAgZnVuY3Rpb25zLgoKV2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgY29ycmVjdGx5LiBTaW5jZSBgZmluZF9uZXh0X3RvX3VudXNlYCBhbmQgYHRyeV90b191bnVzZWAgYXJlIGJvdGggc3RhdGljLCB0aGUgYWN0dWFsIHN5c2NhbGwgaW50ZXJmYWNlIGhhcyB0byBiZSBgX194NjRfc3lzX3N3YXBvZmZgIG9yIGBzeXNfc3dhcG9mZmAuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IHRvIGludmVzdGlnYXRlIGZ1cnRoZXIsIGJ1dCBJIG5lZWQgdG8gZW5zdXJlIEkmIzM5O20gZ2V0dGluZyB0aGUgcmlnaHQgZW50cnlwb2ludC4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGNoZWNrIGBtbS9zd2FwZmlsZS5jYCBmb3IgYm90aCBgdHJ5X3RvX3VudXNlYCBhbmQgYGZpbmRfbmV4dF90b191bnVzZWAgdG8gYmUgc3VyZS4gVGhhdCYjMzk7cyB0aGUgbGlrZWx5IGxvY2F0aW9uIGZvciB0aGVzZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmluZF9uZXh0X3RvX3VudXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTI3MzM9c3RhdGljIGludCB1bnVzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IHR5cGUpXG4tLVxubW0vc3dhcGZpbGUuYy0yNzYwLSAqL1xubW0vc3dhcGZpbGUuYzoyNzYxOnN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbm1tL3N3YXBmaWxlLmMtMjc2Mi1cdFx0XHRcdFx0dW5zaWduZWQgaW50IHByZXYpXG4tLVxubW0vc3dhcGZpbGUuYz0yODA1PXN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxuLS1cbm1tL3N3YXBmaWxlLmMtMjg1OC1cdCAgICAgICAhc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgXHUwMDI2XHUwMDI2XG5tbS9zd2FwZmlsZS5jOjI4NTk6XHQgICAgICAgKGkgPSBmaW5kX25leHRfdG9fdW51c2Uoc2ksIGkpKSAhPSAwKSB7XG5tbS9zd2FwZmlsZS5jLTI4NjAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc2MQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyB0aGUgU3dhcCBEZWFjdGl2YXRpb24gRW50cnkgUG9pbnQqKgoKUmlnaHQsIHNvIGBzeXNfc3dhcG9mZmAgaXMgdGhlIGtleSBmdW5jdGlvbiB3ZSYjMzk7cmUgbG9va2luZyBhdCBoZXJlLCB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIGVudGlyZSBzd2FwIGRlYWN0aXZhdGlvbiBwcm9jZXNzLiBMZXQgbWUgcXVpY2tseSBzY2FuIGZvciBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGl0cyBiZWhhdmlvci4gV2UmIzM5O3JlIG9idmlvdXNseSBkZWFsaW5nIHdpdGggc3dhcCBpdHNlbGYsIGFuZCB0aGUgYmFzZSBlbmFibGluZyBjb25kaXRpb24gZm9yIGFsbCB0aGlzIGlzLCBhcyBleHBlY3RlZCwgYENPTkZJR19TV0FQYC4gR29vZCwgdGhhdCBtYWtlcyBzZW5zZS4gU28sIHdpdGggYENPTkZJR19TV0FQYCBlbmFibGVkIHdlJiMzOTtyZSBhdCBsZWFzdCBpbiB0aGUgcmlnaHQgYmFsbHBhcmsuIExldCYjMzk7cyBzZWUgd2hhdCBlbHNlIHdlIGNhbiB1bmNvdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbWlwcy9LY29uZmlnPTEyNjM9Y29uZmlnIE1JUFNfU1BSQU1cbi0tXG5hcmNoL21pcHMvS2NvbmZpZy0xMjY1LVxuYXJjaC9taXBzL0tjb25maWc6MTI2Njpjb25maWcgU1dBUF9JT19TUEFDRVxuYXJjaC9taXBzL0tjb25maWctMTI2Ny1cdGJvb2xcbi0tXG5hcmNoL3NoL0tjb25maWc9MTI2PWNvbmZpZyBJT19UUkFQUEVEXG4tLVxuYXJjaC9zaC9LY29uZmlnLTEyOC1cbmFyY2gvc2gvS2NvbmZpZzoxMjk6Y29uZmlnIFNXQVBfSU9fU1BBQ0VcbmFyY2gvc2gvS2NvbmZpZy0xMzAtXHRib29sXG4tLVxubW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcbi0tXG5tbS9LY29uZmlnLTExLVxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcbm1tL0tjb25maWctMTMtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTd2FwIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyBgQ09ORklHX1NXQVBgLiBJcyB0aGVyZSAqYW55dGhpbmcqIGVsc2UgY29uZmlndXJhdGlvbi13aXNlIHRoYXQmIzM5O3MgcmVsZXZhbnQgaGVyZT8gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBUaGUgY2hhbmdlcyBhcmUgaW4gYGluY2x1ZGUvbGludXgvc3dhcC5oYCBhbmQgYG1tL3N3YXBmaWxlLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSnVzdCB0byBiZSBzdXJlLCBJIHNob3VsZCB2ZXJpZnkgdGhhdCBgU1dBUGAgaXNuJiMzOTt0IGxpc3RlZCBhbmQgbWFrZSBzdXJlIGBDT05GSUdfU1dBUGAgaXMgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4gQWx0aG91Z2gsIGBTV0FQYCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgaXQgaXMgYWx3YXlzIHdpc2UgdG8gZXhwbGljaXRseSBkZWNsYXJlIGBDT05GSUdfU1dBUGAuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzLiBMZXQgbWUgc2VlLi4uIEkgc2VlIGBmaW5kX25leHRfdG9fdW51c2VgIGFuZCBgdHJ5X3RvX3VudXNlYCB3aGljaCBhcmUgc3RhdGljIGZ1bmN0aW9uczsgdGhvc2Ugd29uJiMzOTt0IGJlIGV4cG9zZWQgZGlyZWN0bHkuIFRoZSBrZXkgaGVyZSBzZWVtcyB0byBiZSBgc3lzX3N3YXBvZmZgLCB3aGljaCAqaXMqIGEgc3lzY2FsbC4gVGhhdCYjMzk7cyB0aGUgb25seSBkaXJlY3QgZW50cnkgcG9pbnQgSSBzZWUsIHNvIGl0IG1ha2VzIHNlbnNlIHRvIGNvbmZpcm0gdGhhdC4KCkFscmlnaHQsIGRvdWJsZS1jaGVja2luZywgeWVzLCBgc3lzX3N3YXBvZmZgIGlzIHRoZSBzeXN0ZW0gY2FsbC4gTm93LCBJIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgYG1tL3N3YXBmaWxlLmNgIHRvIHNlZSBwcmVjaXNlbHkgaG93IGBzeXNfc3dhcG9mZmAgaXMgaW1wbGVtZW50ZWQgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NZU0NBTExfREVGSU5FMVxcKHN3YXBvZmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmM9MzEzMz1zdGF0aWMgdm9pZCBmbHVzaF9wZXJjcHVfc3dhcF9jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSlcbi0tXG5tbS9zd2FwZmlsZS5jLTMxNTAtXG5tbS9zd2FwZmlsZS5jOjMxNTE6U1lTQ0FMTF9ERUZJTkUxKHN3YXBvZmYsIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlKVxubW0vc3dhcGZpbGUuYy0zMTUyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc5MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCYjMzk7cyBgc3lzX3N3YXBvZmZgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZm9jdXNpbmcgb24gYHN5c19zd2Fwb2ZmYC4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCYjMzk7cyBpbXBsZW1lbnRlZC4gQWhhLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlZmluZWQgdXNpbmcgYFNZU0NBTExfREVGSU5FMShzd2Fwb2ZmLCAuLi4pYC4gVGhhdCBtZWFucyB0aGUgcmVhbCBmdW5jdGlvbiBuYW1lIG1pZ2h0IGJlIGBfX3g2NF9zeXNfc3dhcG9mZmAsIGBfX3NlX3N5c19zd2Fwb2ZmYCwgb3IganVzdCBwbGFpbiBgc3lzX3N3YXBvZmZgLiBJbiBtb3N0IHN5emthbGxlciBjYXNlcywgc3BlY2lmeWluZyBgc3lzX3N3YXBvZmZgIG9yIGBfX3g2NF9zeXNfc3dhcG9mZmAgaXMgc3VmZmljaWVudC4gU28sIGBzeXNfc3dhcG9mZmAgc2hvdWxkIGJlIGp1c3QgZmluZSBoZXJlLgoKTm93LCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBzb3VyY2UgY29kZSByZXZlYWxzIHRoYXQgYHRyeV90b191bnVzZWAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBXYWl0IGEgbWludXRlLCBpdCYjMzk7cyBub3QgaW5saW5lZCwgYW5kIGl0JiMzOTtzIGEgcmVsYXRpdmVseSBsYXJnZSBmdW5jdGlvbi4gSSB3YW50IHRvIGNvbmZpcm0gd2hldGhlciBvciBub3QgaXQgaGFzIGJlZW4gaW5saW5lZC4gTGV0IG1lIGludmVzdGlnYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW50IHRyeV90b191bnVzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYz0yNzYxPXN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTI4MDQtXG5tbS9zd2FwZmlsZS5jOjI4MDU6c3RhdGljIGludCB0cnlfdG9fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXG5tbS9zd2FwZmlsZS5jLTI4MDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjk1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTd2Fwb2ZmIEZ1bmN0aW9uYWxpdHkgZm9yIFN5emthbGxlciBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdHJ5X3RvX3VudXNlYCBmdW5jdGlvbiDigJMgaXQmIzM5O3MgcHJldHR5IGhlZnR5LCBhbmQgbm90IG1hcmtlZCBpbmxpbmUsIHdoaWNoIGlzIGltbWVkaWF0ZWx5IGEgcmVkIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBtb3N0IGVmZmVjdGl2ZSB3YXkgdG8gaW50ZWdyYXRlIHRoaXMgZnVuY3Rpb25hbGl0eSB3aXRoIFN5emthbGxlciBmb3IgZnV6emluZy4gSSB3YXMgaW5pdGlhbGx5IGxlYW5pbmcgdG93YXJkIGluY2x1ZGluZyBib3RoIGB0cnlfdG9fdW51c2VgIGFuZCBgc3lzX3N3YXBvZmZgIGluIG15IGFuYWx5c2lzLgoKVGhlbiBJIHJlbWVtYmVyZWQgU3l6a2FsbGVyJiMzOTtzIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGlzIGNoYW5nZXMgdGhpbmdzLiBgc3lzX3N3YXBvZmZgIGlzIGxpa2VseSBhIGJldHRlciB0YXJnZXQuIEl0JiMzOTtzIGEgc3lzY2FsbCwgYW5kIFN5emthbGxlciBpcyBkZWZpbml0ZWx5IGZhbWlsaWFyIHdpdGggaXQgYXMgYHN5c19zd2Fwb2ZmYC4KCkkmIzM5O20gZG91YmxlLWNoZWNraW5nLiBJcyB0aGVyZSBhbnl0aGluZyBlbHNlPyBObywgYHN5c19zd2Fwb2ZmYCBsb29rcyBsaWtlIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQgaXMgYSBzeXN0ZW0gY2FsbC4KCk5vdywgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBgQ09ORklHX1NXQVBgIGlzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZnV6eiB0YXJnZXQgaXMgYXMgc3RyYWlnaHRmb3J3YXJkIGFzIHBvc3NpYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmotXFwkXFwoQ09ORklHX1NXQVBcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03Nj1lbmRpZlxubW0vTWFrZWZpbGUtNzctXG5tbS9NYWtlZmlsZTo3ODpvYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlLTc5LW9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NzAKCQkJCQkJCW91dHB1dDogOTAKCQkJCQkJCXRob3VnaHRzOiAyOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTd2Fwb2ZmIFBhdGNoKioKCk9rYXksIHNvIGBDT05GSUdfU1dBUGAgaXMgZGVmaW5pdGVseSBuZWVkZWQgZm9yIHRoaXMuIExldCYjMzk7cyByZXZpc2l0IHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gY2hhbmdlIGlzIGluIGBmaW5kX25leHRfdG9fdW51c2VgLCB3aGVyZSBpdCYjMzk7cyBiZWluZyBtb2RpZmllZCB0byBza2lwIGVtcHR5IGNsdXN0ZXJzLiBUaGlzIGlzIGEgcGVyZm9ybWFuY2UgdHdlYWssIGJ1dCBpdCBkaXJlY3RseSBpbXBhY3RzIHRoZSBjb3JlIGxvZ2ljIG9mIGhvdyBzd2FwIGVudHJpZXMgYXJlIGZvdW5kIGR1cmluZyBgc3dhcG9mZmAuIFRoaXMgbWVhbnMgaXQgKmNvdWxkKiBpbnRyb2R1Y2Ugc3VidGxlLCB1bmV4cGVjdGVkIGJlaGF2aW9yIGR1cmluZyBzd2FwIGRlYWxsb2NhdGlvbi4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBmdW5jdGlvbmFsbHkgY29ycmVjdCwgYW5kIHRoZXJlZm9yZSBJIG5lZWQgdG8gZnV6eiB0aGlzIHRob3JvdWdobHkuCgpNeSByZWFzb25pbmc/IFRoZSBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyB3ZSBmaW5kIHN3YXAgZW50cmllcyBkdXJpbmcgYHN3YXBvZmZgLiBUaGlzIGlzIGV4cG9zZWQgdGhyb3VnaCB0aGUgYHN3YXBvZmZgIHN5c3RlbSBjYWxsLiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgY2xlYXJseSBgc3lzX3N3YXBvZmZgLiBXZSBuZWVkIGBDT05GSUdfU1dBUGAgZW5hYmxlZC4KCk5vdywgYSBxdWljayBjaGVjay4gSXMgYHN5c19zd2Fwb2ZmYCB0aGUgY29ycmVjdCBzeW1ib2wgbmFtZT8gSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCBpcywgYnV0IGxldCYjMzk7cyBjb25maXJtLiBZZXMsIGBTWVNDQUxMX0RFRklORTEoc3dhcG9mZiwgLi4uKWAgZXhwYW5kcyB0byBgc3lzX3N3YXBvZmZgLCBhbmQgdGhlcmUgYXJlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB3cmFwcGVycy4gU3l6a2FsbGVyIGNhbiBoYW5kbGUgZWl0aGVyIGBzeXNfc3dhcG9mZmAgb3IgYF9feDY0X3N5c19zd2Fwb2ZmYC4gYHN5c19zd2Fwb2ZmYCBpcyB0aGUgY2Fub25pY2FsIG5hbWUsIGFuZCB0aGVyZWZvcmUgSSB3aWxsIHByb3ZpZGUgdGhhdC4KCkFoLCBhbmQgSSByZW1lbWJlciBmcm9tIHRoZSBwcm9tcHQ6ICYjMzQ7UHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zJiMzNDsuIGBzeXNfc3dhcG9mZmAgZml0cyB0aGF0IGRlc2NyaXB0aW9uIHBlcmZlY3RseS4gR3JlYXQuIEkgdGhpbmsgSSYjMzk7bSByZWFkeSB0byB3cml0ZSB0aGUgcmVzcG9uc2Ugbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N5c19zd2Fwb2ZmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIGluIGBmaW5kX25leHRfdG9fdW51c2VgIHVzZWQgZHVyaW5nIGBzd2Fwb2ZmYCB0byBza2lwIGVtcHR5IHN3YXAgY2x1c3RlcnMuIFRoaXMgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBvZiBzd2FwIGRlYWxsb2NhdGlvbiBhbmQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYHN3YXBvZmZgIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzeXNfc3dhcG9mZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBpbiBgZmluZF9uZXh0X3RvX3VudXNlYCB1c2VkIGR1cmluZyBgc3dhcG9mZmAgdG8gc2tpcCBlbXB0eSBzd2FwIGNsdXN0ZXJzLiBUaGlzIGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgb2Ygc3dhcCBkZWFsbG9jYXRpb24gYW5kIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBzd2Fwb2ZmYCBzeXNjYWxsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6Mzg6MjkuODExMzg2MDY2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyNDA3MTg5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN5c19zd2Fwb2ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgaW4gYGZpbmRfbmV4dF90b191bnVzZWAgdXNlZCBkdXJpbmcgYHN3YXBvZmZgIHRvIHNraXAgZW1wdHkgc3dhcCBjbHVzdGVycy4gVGhpcyBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHN3YXAgZGVhbGxvY2F0aW9uIGFuZCBpcyByZWFjaGFibGUgdmlhIHRoZSBgc3dhcG9mZmAgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6Mzg6MjkuODExMzkxNjE2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODgyNjcxMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzMWU0NjJjODZjMGViNDZiNjZmOTYxM2FkZmUwNDA0NWFjZTY4MzBhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMTY6Mzg6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxcbmluZGV4IDJjYjFkMjkzMDdjNTQuLjJiMTRlMmU5NjczYjQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxcbkBAIC0yNDYsNyArMjQ2LDcgQEAgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3Qge1xcbiBcXHRzdHJ1Y3QgcGxpc3Rfbm9kZSBsaXN0O1xcdFxcdC8qIGVudHJ5IGluIHN3YXBfYWN0aXZlX2hlYWQgKi9cXG4gXFx0c2lnbmVkIGNoYXJcXHR0eXBlO1xcdFxcdC8qIHN0cmFuZ2UgbmFtZSBmb3IgYW4gaW5kZXggKi9cXG4gXFx0dW5zaWduZWQgaW50XFx0bWF4O1xcdFxcdC8qIHNpemUgb2YgdGhpcyBzd2FwIGRldmljZSAqL1xcbi1cXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNsdXN0ZXJfaW5mbzsgLyogY2x1c3RlciBpbmZvLiBPbmx5IGZvciBTU0QgKi9cXG4rXFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjbHVzdGVyX2luZm87IC8qIGFycmF5LCBvbmUgZW50cnkgcGVyIGNsdXN0ZXIgKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBmcmVlX2NsdXN0ZXJzOyAvKiBmcmVlIGNsdXN0ZXJzIGxpc3QgKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBmdWxsX2NsdXN0ZXJzOyAvKiBmdWxsIGNsdXN0ZXJzIGxpc3QgKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBub25mdWxsX2NsdXN0ZXJzW1NXQVBfTlJfT1JERVJTXTtcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcXG5pbmRleCBkZWEyZDNiMzZlMDZmLi4zNmU0ZTg4ODRiNzY0IDEwMDY0NFxcbi0tLSBhL21tL3N3YXBmaWxlLmNcXG4rKysgYi9tbS9zd2FwZmlsZS5jXFxuQEAgLTM3MCw4ICszNzAsNiBAQCBzdGF0aWMgdm9pZCBkaXNjYXJkX3N3YXBfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuIFxcdH1cXG4gfVxcbiBcXG4tI2RlZmluZSBMQVRFTkNZX0xJTUlUXFx0XFx0MjU2XFxuLVxcbiBzdGF0aWMgaW5saW5lIGJvb2wgY2x1c3Rlcl9pc19lbXB0eShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0cmV0dXJuIGluZm8tXFx1MDAzZWNvdW50ID09IDA7XFxuQEAgLTI3NjMsNyArMjc2MSw5IEBAIHN0YXRpYyBpbnQgdW51c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCB0eXBlKVxcbiBzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuIFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBwcmV2KVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCBpO1xcbitcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xcbitcXHR1bnNpZ25lZCBsb25nIGksIGVuZDtcXG4rXFx0dW5zaWduZWQgaW50IGNpX29mZjtcXG4gXFx0dW5zaWduZWQgbG9uZyBzd3BfdGI7XFxuIFxcbiBcXHQvKlxcbkBAIC0yNzcyLDE5ICsyNzcyLDM0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4gXFx0ICogaGl0cyBhcmUgb2theSwgYW5kIHN5c19zd2Fwb2ZmKCkgaGFzIGFscmVhZHkgcHJldmVudGVkIG5ld1xcbiBcXHQgKiBhbGxvY2F0aW9ucyBmcm9tIHRoaXMgYXJlYSAod2hpbGUgaG9sZGluZyBzd2FwX2xvY2spLlxcbiBcXHQgKi9cXG4tXFx0Zm9yIChpID0gcHJldiArIDE7IGkgXFx1MDAzYyBzaS1cXHUwMDNlbWF4OyBpKyspIHtcXG4tXFx0XFx0c3dwX3RiID0gc3dhcF90YWJsZV9nZXQoX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBpKSxcXG4tXFx0XFx0XFx0XFx0XFx0aSAlIFNXQVBGSUxFX0NMVVNURVIpO1xcbi1cXHRcXHRpZiAoIXN3cF90Yl9pc19udWxsKHN3cF90YikgXFx1MDAyNlxcdTAwMjYgIXN3cF90Yl9pc19iYWQoc3dwX3RiKSlcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGlmICgoaSAlIExBVEVOQ1lfTElNSVQpID09IDApXFxuK1xcdGkgPSBwcmV2ICsgMTtcXG4rXFx0d2hpbGUgKGkgXFx1MDAzYyBzaS1cXHUwMDNlbWF4KSB7XFxuK1xcdFxcdGNpID0gX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBpKTtcXG4rXFx0XFx0Y2lfb2ZmID0gaSAlIFNXQVBGSUxFX0NMVVNURVI7XFxuK1xcdFxcdGVuZCA9IGkgLSBjaV9vZmYgKyBTV0FQRklMRV9DTFVTVEVSO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQW4gZW1wdHkgY2x1c3RlciBoYXMgbm8gc2xvdCBpbiB1c2UsIHNvIHNraXAgaXQgd2hvbGUuXFxuK1xcdFxcdCAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcFxcbitcXHRcXHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXFxuK1xcdFxcdCAqIENvdW50IG9ubHkgZHJvcHMgaGVyZSwgc28gYSBSRUFEX09OQ0UoKSB3aXRob3V0IGNpLVxcdTAwM2Vsb2NrIGlzXFxuK1xcdFxcdCAqIGVub3VnaCwgdW5saWtlIGluIGV2ZXJ5IG90aGVyIGNsdXN0ZXJfaXNfZW1wdHkoKSBjYWxsZXIuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoIVJFQURfT05DRShjaS1cXHUwMDNlY291bnQpKSB7XFxuK1xcdFxcdFxcdGkgPSBlbmQ7XFxuIFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi1cXHR9XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuIFxcbi1cXHRpZiAoaSA9PSBzaS1cXHUwMDNlbWF4KVxcbi1cXHRcXHRpID0gMDtcXG4rXFx0XFx0Zm9yICg7IGkgXFx1MDAzYyBlbmQ7IGNpX29mZisrLCBpKyspIHtcXG4rXFx0XFx0XFx0c3dwX3RiID0gc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7XFxuK1xcdFxcdFxcdGlmICghc3dwX3RiX2lzX251bGwoc3dwX3RiKSBcXHUwMDI2XFx1MDAyNiAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gaTtcXG4rXFx0XFx0fVxcbitcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4rXFx0fVxcbiBcXG4tXFx0cmV0dXJuIGk7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6Mzg6MzAuNDAwNDQxNzA4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDI2NTE2NTA5NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN5c19zd2Fwb2ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgaW4gYGZpbmRfbmV4dF90b191bnVzZWAgdXNlZCBkdXJpbmcgYHN3YXBvZmZgIHRvIHNraXAgZW1wdHkgc3dhcCBjbHVzdGVycy4gVGhpcyBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHN3YXAgZGVhbGxvY2F0aW9uIGFuZCBpcyByZWFjaGFibGUgdmlhIHRoZSBgc3dhcG9mZmAgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzFlNDYyYzg2YzBlYjQ2YjY2Zjk2MTNhZGZlMDQwNDVhY2U2ODMwYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTY6Mzg6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5pbmRleCAyY2IxZDI5MzA3YzU0Li4yYjE0ZTJlOTY3M2I0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtMjQ2LDcgKzI0Niw3IEBAIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0IHtcbiBcdHN0cnVjdCBwbGlzdF9ub2RlIGxpc3Q7XHRcdC8qIGVudHJ5IGluIHN3YXBfYWN0aXZlX2hlYWQgKi9cbiBcdHNpZ25lZCBjaGFyXHR0eXBlO1x0XHQvKiBzdHJhbmdlIG5hbWUgZm9yIGFuIGluZGV4ICovXG4gXHR1bnNpZ25lZCBpbnRcdG1heDtcdFx0Lyogc2l6ZSBvZiB0aGlzIHN3YXAgZGV2aWNlICovXG4tXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNsdXN0ZXJfaW5mbzsgLyogY2x1c3RlciBpbmZvLiBPbmx5IGZvciBTU0QgKi9cbitcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvOyAvKiBhcnJheSwgb25lIGVudHJ5IHBlciBjbHVzdGVyICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfY2x1c3RlcnM7IC8qIGZyZWUgY2x1c3RlcnMgbGlzdCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBmdWxsX2NsdXN0ZXJzOyAvKiBmdWxsIGNsdXN0ZXJzIGxpc3QgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbm9uZnVsbF9jbHVzdGVyc1tTV0FQX05SX09SREVSU107XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IGRlYTJkM2IzNmUwNmYuLjM2ZTRlODg4NGI3NjQgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4rKysgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMzcwLDggKzM3MCw2IEBAIHN0YXRpYyB2b2lkIGRpc2NhcmRfc3dhcF9jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdH1cbiB9XG4gXG4tI2RlZmluZSBMQVRFTkNZX0xJTUlUXHRcdDI1NlxuLVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBjbHVzdGVyX2lzX2VtcHR5KHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqaW5mbylcbiB7XG4gXHRyZXR1cm4gaW5mby1cdTAwM2Vjb3VudCA9PSAwO1xuQEAgLTI3NjMsNyArMjc2MSw5IEBAIHN0YXRpYyBpbnQgdW51c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCB0eXBlKVxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IHByZXYpXG4ge1xuLVx0dW5zaWduZWQgaW50IGk7XG4rXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xuK1x0dW5zaWduZWQgbG9uZyBpLCBlbmQ7XG4rXHR1bnNpZ25lZCBpbnQgY2lfb2ZmO1xuIFx0dW5zaWduZWQgbG9uZyBzd3BfdGI7XG4gXG4gXHQvKlxuQEAgLTI3NzIsMTkgKzI3NzIsMzQgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0ICogaGl0cyBhcmUgb2theSwgYW5kIHN5c19zd2Fwb2ZmKCkgaGFzIGFscmVhZHkgcHJldmVudGVkIG5ld1xuIFx0ICogYWxsb2NhdGlvbnMgZnJvbSB0aGlzIGFyZWEgKHdoaWxlIGhvbGRpbmcgc3dhcF9sb2NrKS5cbiBcdCAqL1xuLVx0Zm9yIChpID0gcHJldiArIDE7IGkgXHUwMDNjIHNpLVx1MDAzZW1heDsgaSsrKSB7XG4tXHRcdHN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSksXG4tXHRcdFx0XHRcdGkgJSBTV0FQRklMRV9DTFVTVEVSKTtcbi1cdFx0aWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpIFx1MDAyNlx1MDAyNiAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRpZiAoKGkgJSBMQVRFTkNZX0xJTUlUKSA9PSAwKVxuK1x0aSA9IHByZXYgKyAxO1xuK1x0d2hpbGUgKGkgXHUwMDNjIHNpLVx1MDAzZW1heCkge1xuK1x0XHRjaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSk7XG4rXHRcdGNpX29mZiA9IGkgJSBTV0FQRklMRV9DTFVTVEVSO1xuK1x0XHRlbmQgPSBpIC0gY2lfb2ZmICsgU1dBUEZJTEVfQ0xVU1RFUjtcbitcbitcdFx0LypcbitcdFx0ICogQW4gZW1wdHkgY2x1c3RlciBoYXMgbm8gc2xvdCBpbiB1c2UsIHNvIHNraXAgaXQgd2hvbGUuXG4rXHRcdCAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcFxuK1x0XHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXG4rXHRcdCAqIENvdW50IG9ubHkgZHJvcHMgaGVyZSwgc28gYSBSRUFEX09OQ0UoKSB3aXRob3V0IGNpLVx1MDAzZWxvY2sgaXNcbitcdFx0ICogZW5vdWdoLCB1bmxpa2UgaW4gZXZlcnkgb3RoZXIgY2x1c3Rlcl9pc19lbXB0eSgpIGNhbGxlci5cbitcdFx0ICovXG4rXHRcdGlmICghUkVBRF9PTkNFKGNpLVx1MDAzZWNvdW50KSkge1xuK1x0XHRcdGkgPSBlbmQ7XG4gXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4tXHR9XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbiBcbi1cdGlmIChpID09IHNpLVx1MDAzZW1heClcbi1cdFx0aSA9IDA7XG4rXHRcdGZvciAoOyBpIFx1MDAzYyBlbmQ7IGNpX29mZisrLCBpKyspIHtcbitcdFx0XHRzd3BfdGIgPSBzd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbitcdFx0XHRpZiAoIXN3cF90Yl9pc19udWxsKHN3cF90YikgXHUwMDI2XHUwMDI2ICFzd3BfdGJfaXNfYmFkKHN3cF90YikpXG4rXHRcdFx0XHRyZXR1cm4gaTtcbitcdFx0fVxuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbitcdH1cbiBcbi1cdHJldHVybiBpO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6Mzg6MzAuNDAwNDQyNzc4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc0MjgyNTc1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBTd2FwLU9mZiBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBgbW0vc3dhcGZpbGUuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAuIEl0J3MgcHJldHR5IGZvY3VzZWQ7IHRoZSBrZXkgbW9kaWZpY2F0aW9uIGlzIHRvIGBmaW5kX25leHRfdG9fdW51c2VgIHdpdGhpbiBgbW0vc3dhcGZpbGUuY2AuIEZyb20gYSBxdWljayBnbGFuY2UsIGl0IGxvb2tzIGxpa2UgYSB0YXJnZXRlZCBvcHRpbWl6YXRpb24gdG8gc2tpcCBlbXB0eSBjbHVzdGVycyB3aGVuIHNlYXJjaGluZyBmb3IgdGhlIG5leHQgc3dhcCBlbnRyeSB0byB1bnVzZS4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIHRoZSBzd2Fwb2ZmIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSB0aGUgYHRyeV90b191bnVzZWAgcGF0aC4gRGVmaW5pdGVseSB3b3J0aCB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoaXMgcGF0Y2guXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgY3JpdGljYWwgY29yZSBrZXJuZWwgbG9naWMsIHBhcnRpY3VsYXJseSBiZWNhdXNlIGl0J3MgcmVsYXRlZCB0byBzd2Fwb2ZmLiBCZWNhdXNlIG9mIHRoaXMgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSwgdGhpcyBpcyBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGEgYml0IGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBmaW5kX25leHRfdG9fdW51c2VgIGFuZCBgdHJ5X3RvX3VudXNlYC4gSSByZWNhbGwgdGhhdCBgdHJ5X3RvX3VudXNlYCBpcyBpbnZvbHZlZCBpbiB0aGUgYHN5c19zd2Fwb2ZmYCAob3IgYGtzeXNfc3dhcG9mZmApIHN5c3RlbSBjYWxsIHBhdGguIEkgc2hvdWxkIHByb2JhYmx5IHF1aWNrbHkgdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbiBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIG1vcmUgZGV0YWlsZWQgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjozODozNS4xNDMyNzIzNDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg4OTY3NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X3RvX3VudXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXBmaWxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz0xMzE0PXN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xMzM2LVxcdC8qXFxubW0vc3dhcGZpbGUuYzoxMzM3OlxcdCAqIE1ha2Ugc3VyZSB0aGF0IHRyeV90b191bnVzZSgpIG9ic2VydmVzIHNpLVxcdTAwM2VpbnVzZV9wYWdlcyByZWFjaGluZyAwXFxubW0vc3dhcGZpbGUuYy0xMzM4LVxcdCAqIG9ubHkgYWZ0ZXIgdGhlIGFib3ZlIGNsZWFudXBzIGFyZSBkb25lLlxcbi0tXFxubW0vc3dhcGZpbGUuYz0yNDcxPXN0YXRpYyBpbnQgdW51c2VfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0yNDgyLVxcdCAqIElmIHRoZSBmb2xpbyBpcyByZW1vdmVkIGZyb20gc3dhcCBjYWNoZSBieSBvdGhlcnMsIGNvbnRpbnVlIHRvXFxubW0vc3dhcGZpbGUuYzoyNDgzOlxcdCAqIHVudXNlIG90aGVyIFBURXMuIHRyeV90b191bnVzZSBtYXkgdHJ5IGFnYWluIGlmIHdlIG1pc3NlZCB0aGlzIG9uZS5cXG5tbS9zd2FwZmlsZS5jLTI0ODQtXFx0ICovXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTI3NjE9c3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0yNzgzLVxcdFxcdCAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcFxcbm1tL3N3YXBmaWxlLmM6Mjc4NDpcXHRcXHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXFxubW0vc3dhcGZpbGUuYy0yNzg1LVxcdFxcdCAqIENvdW50IG9ubHkgZHJvcHMgaGVyZSwgc28gYSBSRUFEX09OQ0UoKSB3aXRob3V0IGNpLVxcdTAwM2Vsb2NrIGlzXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTI4MDQtXFxubW0vc3dhcGZpbGUuYzoyODA1OnN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxcbm1tL3N3YXBmaWxlLmMtMjgwNi17XFxuLS1cXG5tbS9zd2FwZmlsZS5jLTI4OTktXFx0LypcXG5tbS9zd2FwZmlsZS5jOjI5MDA6XFx0ICogTWFrZSBzdXJlIHRoYXQgZnVydGhlciBjbGVhbnVwcyBhZnRlciB0cnlfdG9fdW51c2UoKSByZXR1cm5zIGhhcHBlblxcbm1tL3N3YXBmaWxlLmMtMjkwMS1cXHQgKiBhZnRlciBzd2FwX3JhbmdlX2ZyZWUoKSByZWR1Y2VzIHNpLVxcdTAwM2VpbnVzZV9wYWdlcyB0byAwLlxcbi0tXFxubW0vc3dhcGZpbGUuYy0yOTA3LS8qXFxubW0vc3dhcGZpbGUuYzoyOTA4OiAqIEFmdGVyIGEgc3VjY2Vzc2Z1bCB0cnlfdG9fdW51c2UsIGlmIG5vIHN3YXAgaXMgbm93IGluIHVzZSwgd2Uga25vd1xcbm1tL3N3YXBmaWxlLmMtMjkwOS0gKiB3ZSBjYW4gZW1wdHkgdGhlIG1tbGlzdC4gIHN3YXBfbG9jayBtdXN0IGJlIGhlbGQgb24gZW50cnkgYW5kIGV4aXQuXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTMxNTE9U1lTQ0FMTF9ERUZJTkUxKHN3YXBvZmYsIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0zMjExLVxcdHNldF9jdXJyZW50X29vbV9vcmlnaW4oKTtcXG5tbS9zd2FwZmlsZS5jOjMyMTI6XFx0ZXJyID0gdHJ5X3RvX3VudXNlKHAtXFx1MDAzZXR5cGUpO1xcbm1tL3N3YXBmaWxlLmMtMzIxMy1cXHRjbGVhcl9jdXJyZW50X29vbV9vcmlnaW4oKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6Mzg6MzUuMjEyMTc0MzgyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEzNjA5NDAwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN3YXBvZmYgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdG91Y2hpbmcgdGhlIGNvZGUgdGhhdCBnb3Zlcm5zIGhvdyBzd2FwIHNwYWNlIGlzIGRlYWN0aXZhdGVkLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGNoYW5naW5nIGBmaW5kX25leHRfdG9fdW51c2VgLCB3aGljaCBpdHNlbGYgZmVlZHMgaW50byBgdHJ5X3RvX3VudXNlYCwgYW5kIHVsdGltYXRlbHksIGBzeXNfc3dhcG9mZmAuIEZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQsIHRoaXMgaXMgZGVmaW5pdGVseSBhIHJlYWNoYWJsZSBjb2RlIHBhdGgsIHNvIHRoYXQncyBnb29kLiBNeSBpbnN0aW5jdCBpcyB0aGF0IHRoaXMgYXJlYSB3YXJyYW50cyBhIGZ1enppbmcgY2FtcGFpZ24gZm9jdXNlZCBvbiB0aGUgYHN5c19zd2Fwb2ZmYCBhbmQgYHRyeV90b191bnVzZWAgZnVuY3Rpb25zLlxuXG5XYWl0IGEgc2Vjb25kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGNvcnJlY3RseS4gU2luY2UgYGZpbmRfbmV4dF90b191bnVzZWAgYW5kIGB0cnlfdG9fdW51c2VgIGFyZSBib3RoIHN0YXRpYywgdGhlIGFjdHVhbCBzeXNjYWxsIGludGVyZmFjZSBoYXMgdG8gYmUgYF9feDY0X3N5c19zd2Fwb2ZmYCBvciBgc3lzX3N3YXBvZmZgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50IHRvIGludmVzdGlnYXRlIGZ1cnRoZXIsIGJ1dCBJIG5lZWQgdG8gZW5zdXJlIEknbSBnZXR0aW5nIHRoZSByaWdodCBlbnRyeXBvaW50LlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBjaGVjayBgbW0vc3dhcGZpbGUuY2AgZm9yIGJvdGggYHRyeV90b191bnVzZWAgYW5kIGBmaW5kX25leHRfdG9fdW51c2VgIHRvIGJlIHN1cmUuIFRoYXQncyB0aGUgbGlrZWx5IGxvY2F0aW9uIGZvciB0aGVzZSBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNjIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6Mzg6NDAuMzQ4MjcyMjY1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3OTA2MzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbmRfbmV4dF90b191bnVzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9MjczMz1zdGF0aWMgaW50IHVudXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgdHlwZSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjc2MC0gKi9cXG5tbS9zd2FwZmlsZS5jOjI3NjE6c3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbm1tL3N3YXBmaWxlLmMtMjc2Mi1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcHJldilcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjgwNT1zdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjg1OC1cXHQgICAgICAgIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIFxcdTAwMjZcXHUwMDI2XFxubW0vc3dhcGZpbGUuYzoyODU5OlxcdCAgICAgICAoaSA9IGZpbmRfbmV4dF90b191bnVzZShzaSwgaSkpICE9IDApIHtcXG5tbS9zd2FwZmlsZS5jLTI4NjAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjM4OjQwLjQxNjE5MzM1M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDI3NDg0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgU3dhcCBEZWFjdGl2YXRpb24gRW50cnkgUG9pbnQqKlxuXG5SaWdodCwgc28gYHN5c19zd2Fwb2ZmYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHdlJ3JlIGxvb2tpbmcgYXQgaGVyZSwgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBlbnRpcmUgc3dhcCBkZWFjdGl2YXRpb24gcHJvY2Vzcy4gTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW55IHBvdGVudGlhbCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IuIFdlJ3JlIG9idmlvdXNseSBkZWFsaW5nIHdpdGggc3dhcCBpdHNlbGYsIGFuZCB0aGUgYmFzZSBlbmFibGluZyBjb25kaXRpb24gZm9yIGFsbCB0aGlzIGlzLCBhcyBleHBlY3RlZCwgYENPTkZJR19TV0FQYC4gR29vZCwgdGhhdCBtYWtlcyBzZW5zZS4gU28sIHdpdGggYENPTkZJR19TV0FQYCBlbmFibGVkIHdlJ3JlIGF0IGxlYXN0IGluIHRoZSByaWdodCBiYWxscGFyay4gTGV0J3Mgc2VlIHdoYXQgZWxzZSB3ZSBjYW4gdW5jb3Zlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2MSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjM4OjQzLjY1ODk0NDM1M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU4NjUwMDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL21pcHMvS2NvbmZpZz0xMjYzPWNvbmZpZyBNSVBTX1NQUkFNXFxuLS1cXG5hcmNoL21pcHMvS2NvbmZpZy0xMjY1LVxcbmFyY2gvbWlwcy9LY29uZmlnOjEyNjY6Y29uZmlnIFNXQVBfSU9fU1BBQ0VcXG5hcmNoL21pcHMvS2NvbmZpZy0xMjY3LVxcdGJvb2xcXG4tLVxcbmFyY2gvc2gvS2NvbmZpZz0xMjY9Y29uZmlnIElPX1RSQVBQRURcXG4tLVxcbmFyY2gvc2gvS2NvbmZpZy0xMjgtXFxuYXJjaC9zaC9LY29uZmlnOjEyOTpjb25maWcgU1dBUF9JT19TUEFDRVxcbmFyY2gvc2gvS2NvbmZpZy0xMzAtXFx0Ym9vbFxcbi0tXFxubW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcXG4tLVxcbm1tL0tjb25maWctMTEtXFxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcXG5tbS9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6Mzg6NDYuMjE3NjAwMzA2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA2NDM4MTMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN3YXAgQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyBgQ09ORklHX1NXQVBgLiBJcyB0aGVyZSAqYW55dGhpbmcqIGVsc2UgY29uZmlndXJhdGlvbi13aXNlIHRoYXQncyByZWxldmFudCBoZXJlPyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIFRoZSBjaGFuZ2VzIGFyZSBpbiBgaW5jbHVkZS9saW51eC9zd2FwLmhgIGFuZCBgbW0vc3dhcGZpbGUuY2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBKdXN0IHRvIGJlIHN1cmUsIEkgc2hvdWxkIHZlcmlmeSB0aGF0IGBTV0FQYCBpc24ndCBsaXN0ZWQgYW5kIG1ha2Ugc3VyZSBgQ09ORklHX1NXQVBgIGlzIGRlZmluZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIEFsdGhvdWdoLCBgU1dBUGAgaXMgYWxtb3N0IGFsd2F5cyBlbmFibGVkIGJ5IGRlZmF1bHQsIGl0IGlzIGFsd2F5cyB3aXNlIHRvIGV4cGxpY2l0bHkgZGVjbGFyZSBgQ09ORklHX1NXQVBgLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzLiBMZXQgbWUgc2VlLi4uIEkgc2VlIGBmaW5kX25leHRfdG9fdW51c2VgIGFuZCBgdHJ5X3RvX3VudXNlYCB3aGljaCBhcmUgc3RhdGljIGZ1bmN0aW9uczsgdGhvc2Ugd29uJ3QgYmUgZXhwb3NlZCBkaXJlY3RseS4gVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIGBzeXNfc3dhcG9mZmAsIHdoaWNoICppcyogYSBzeXNjYWxsLiBUaGF0J3MgdGhlIG9ubHkgZGlyZWN0IGVudHJ5IHBvaW50IEkgc2VlLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBjb25maXJtIHRoYXQuXG5cbkFscmlnaHQsIGRvdWJsZS1jaGVja2luZywgeWVzLCBgc3lzX3N3YXBvZmZgIGlzIHRoZSBzeXN0ZW0gY2FsbC4gTm93LCBJIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgYG1tL3N3YXBmaWxlLmNgIHRvIHNlZSBwcmVjaXNlbHkgaG93IGBzeXNfc3dhcG9mZmAgaXMgaW1wbGVtZW50ZWQgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6Mzg6NTQuMjgxOTg0OTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNjg0NjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNZU0NBTExfREVGSU5FMVxcXFwoc3dhcG9mZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9MzEzMz1zdGF0aWMgdm9pZCBmbHVzaF9wZXJjcHVfc3dhcF9jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMzE1MC1cXG5tbS9zd2FwZmlsZS5jOjMxNTE6U1lTQ0FMTF9ERUZJTkUxKHN3YXBvZmYsIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlKVxcbm1tL3N3YXBmaWxlLmMtMzE1Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjM4OjU0LjM1NDY3Njg0N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTM5Nzc2MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsJ3MgYHN5c19zd2Fwb2ZmYCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIEknbSBnb2luZyB0byBzdGFydCBieSBmb2N1c2luZyBvbiBgc3lzX3N3YXBvZmZgLiBMZXQncyBzZWUgaG93IHRoYXQncyBpbXBsZW1lbnRlZC4gQWhhLCBpdCBsb29rcyBsaWtlIGl0J3MgZGVmaW5lZCB1c2luZyBgU1lTQ0FMTF9ERUZJTkUxKHN3YXBvZmYsIC4uLilgLiBUaGF0IG1lYW5zIHRoZSByZWFsIGZ1bmN0aW9uIG5hbWUgbWlnaHQgYmUgYF9feDY0X3N5c19zd2Fwb2ZmYCwgYF9fc2Vfc3lzX3N3YXBvZmZgLCBvciBqdXN0IHBsYWluIGBzeXNfc3dhcG9mZmAuIEluIG1vc3Qgc3l6a2FsbGVyIGNhc2VzLCBzcGVjaWZ5aW5nIGBzeXNfc3dhcG9mZmAgb3IgYF9feDY0X3N5c19zd2Fwb2ZmYCBpcyBzdWZmaWNpZW50LiBTbywgYHN5c19zd2Fwb2ZmYCBzaG91bGQgYmUganVzdCBmaW5lIGhlcmUuXG5cbk5vdywgYSBxdWljayBjaGVjayBvZiB0aGUgc291cmNlIGNvZGUgcmV2ZWFscyB0aGF0IGB0cnlfdG9fdW51c2VgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gV2FpdCBhIG1pbnV0ZSwgaXQncyBub3QgaW5saW5lZCwgYW5kIGl0J3MgYSByZWxhdGl2ZWx5IGxhcmdlIGZ1bmN0aW9uLiBJIHdhbnQgdG8gY29uZmlybSB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiBpbmxpbmVkLiBMZXQgbWUgaW52ZXN0aWdhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3OTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6Mzk6MDAuODk0NDU1NjU4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzU5NDAzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW50IHRyeV90b191bnVzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9Mjc2MT1zdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTI4MDQtXFxubW0vc3dhcGZpbGUuYzoyODA1OnN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxcbm1tL3N3YXBmaWxlLmMtMjgwNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjM5OjAwLjk5MjA1NDc1NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzA1MDQ4ODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTd2Fwb2ZmIEZ1bmN0aW9uYWxpdHkgZm9yIFN5emthbGxlciBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHRyeV90b191bnVzZWAgZnVuY3Rpb24g4oCTIGl0J3MgcHJldHR5IGhlZnR5LCBhbmQgbm90IG1hcmtlZCBpbmxpbmUsIHdoaWNoIGlzIGltbWVkaWF0ZWx5IGEgcmVkIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBtb3N0IGVmZmVjdGl2ZSB3YXkgdG8gaW50ZWdyYXRlIHRoaXMgZnVuY3Rpb25hbGl0eSB3aXRoIFN5emthbGxlciBmb3IgZnV6emluZy4gSSB3YXMgaW5pdGlhbGx5IGxlYW5pbmcgdG93YXJkIGluY2x1ZGluZyBib3RoIGB0cnlfdG9fdW51c2VgIGFuZCBgc3lzX3N3YXBvZmZgIGluIG15IGFuYWx5c2lzLlxuXG5UaGVuIEkgcmVtZW1iZXJlZCBTeXprYWxsZXIncyBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhpcyBjaGFuZ2VzIHRoaW5ncy4gYHN5c19zd2Fwb2ZmYCBpcyBsaWtlbHkgYSBiZXR0ZXIgdGFyZ2V0LiBJdCdzIGEgc3lzY2FsbCwgYW5kIFN5emthbGxlciBpcyBkZWZpbml0ZWx5IGZhbWlsaWFyIHdpdGggaXQgYXMgYHN5c19zd2Fwb2ZmYC5cblxuSSdtIGRvdWJsZS1jaGVja2luZy4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gTm8sIGBzeXNfc3dhcG9mZmAgbG9va3MgbGlrZSB0aGUgb25seSBmdW5jdGlvbiB0aGF0IGlzIGEgc3lzdGVtIGNhbGwuXG5cbk5vdywgSSdsbCBxdWlja2x5IGNoZWNrIGlmIGBDT05GSUdfU1dBUGAgaXMgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24uIE5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmdXp6IHRhcmdldCBpcyBhcyBzdHJhaWdodGZvcndhcmQgYXMgcG9zc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyOTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6Mzk6MDYuMjk3MTA2NDEzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI5NzM5NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqLVxcXFwkXFxcXChDT05GSUdfU1dBUFxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTc2PWVuZGlmXFxubW0vTWFrZWZpbGUtNzctXFxubW0vTWFrZWZpbGU6Nzg6b2JqLSQoQ09ORklHX1NXQVApXFx0Kz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXFxubW0vTWFrZWZpbGUtNzktb2JqLSQoQ09ORklHX1pTV0FQKVxcdCs9IHpzd2FwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6Mzk6MDYuNDEwMDg0NzlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ5ODU5NzAzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN3YXBvZmYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgQ09ORklHX1NXQVBgIGlzIGRlZmluaXRlbHkgbmVlZGVkIGZvciB0aGlzLiBMZXQncyByZXZpc2l0IHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gY2hhbmdlIGlzIGluIGBmaW5kX25leHRfdG9fdW51c2VgLCB3aGVyZSBpdCdzIGJlaW5nIG1vZGlmaWVkIHRvIHNraXAgZW1wdHkgY2x1c3RlcnMuIFRoaXMgaXMgYSBwZXJmb3JtYW5jZSB0d2VhaywgYnV0IGl0IGRpcmVjdGx5IGltcGFjdHMgdGhlIGNvcmUgbG9naWMgb2YgaG93IHN3YXAgZW50cmllcyBhcmUgZm91bmQgZHVyaW5nIGBzd2Fwb2ZmYC4gVGhpcyBtZWFucyBpdCAqY291bGQqIGludHJvZHVjZSBzdWJ0bGUsIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZHVyaW5nIHN3YXAgZGVhbGxvY2F0aW9uLiBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgZnVuY3Rpb25hbGx5IGNvcnJlY3QsIGFuZCB0aGVyZWZvcmUgSSBuZWVkIHRvIGZ1enogdGhpcyB0aG9yb3VnaGx5LlxuXG5NeSByZWFzb25pbmc/IFRoZSBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyB3ZSBmaW5kIHN3YXAgZW50cmllcyBkdXJpbmcgYHN3YXBvZmZgLiBUaGlzIGlzIGV4cG9zZWQgdGhyb3VnaCB0aGUgYHN3YXBvZmZgIHN5c3RlbSBjYWxsLiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgY2xlYXJseSBgc3lzX3N3YXBvZmZgLiBXZSBuZWVkIGBDT05GSUdfU1dBUGAgZW5hYmxlZC5cblxuTm93LCBhIHF1aWNrIGNoZWNrLiBJcyBgc3lzX3N3YXBvZmZgIHRoZSBjb3JyZWN0IHN5bWJvbCBuYW1lPyBJJ20gcHJldHR5IHN1cmUgaXQgaXMsIGJ1dCBsZXQncyBjb25maXJtLiBZZXMsIGBTWVNDQUxMX0RFRklORTEoc3dhcG9mZiwgLi4uKWAgZXhwYW5kcyB0byBgc3lzX3N3YXBvZmZgLCBhbmQgdGhlcmUgYXJlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB3cmFwcGVycy4gU3l6a2FsbGVyIGNhbiBoYW5kbGUgZWl0aGVyIGBzeXNfc3dhcG9mZmAgb3IgYF9feDY0X3N5c19zd2Fwb2ZmYC4gYHN5c19zd2Fwb2ZmYCBpcyB0aGUgY2Fub25pY2FsIG5hbWUsIGFuZCB0aGVyZWZvcmUgSSB3aWxsIHByb3ZpZGUgdGhhdC5cblxuQWgsIGFuZCBJIHJlbWVtYmVyIGZyb20gdGhlIHByb21wdDogXCJQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcIi4gYHN5c19zd2Fwb2ZmYCBmaXRzIHRoYXQgZGVzY3JpcHRpb24gcGVyZmVjdGx5LiBHcmVhdC4gSSB0aGluayBJJ20gcmVhZHkgdG8gd3JpdGUgdGhlIHJlc3BvbnNlIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc3MCwiT3V0cHV0VG9rZW5zIjo5MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjozOToxMi45MDg2ODM2NDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM0MDQ4MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzeXNfc3dhcG9mZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIGluIGBmaW5kX25leHRfdG9fdW51c2VgIHVzZWQgZHVyaW5nIGBzd2Fwb2ZmYCB0byBza2lwIGVtcHR5IHN3YXAgY2x1c3RlcnMuIFRoaXMgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBvZiBzd2FwIGRlYWxsb2NhdGlvbiBhbmQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYHN3YXBvZmZgIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN5c19zd2Fwb2ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgaW4gYGZpbmRfbmV4dF90b191bnVzZWAgdXNlZCBkdXJpbmcgYHN3YXBvZmZgIHRvIHNraXAgZW1wdHkgc3dhcCBjbHVzdGVycy4gVGhpcyBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHN3YXAgZGVhbGxvY2F0aW9uIGFuZCBpcyByZWFjaGFibGUgdmlhIHRoZSBgc3dhcG9mZmAgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowhhldg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-05 16:36:05 +0000 UTC FinishedAt: 2026-08-05 16:39:14 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "SWAP" ], "series_id": "d07d2ce1-3812-4686-9088-a07b564ad2b8" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "sys_swapoff" ], "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+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjM4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzeXNfc3dhcG9mZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBpbiBgZmluZF9uZXh0X3RvX3VudXNlYCB1c2VkIGR1cmluZyBgc3dhcG9mZmAgdG8gc2tpcCBlbXB0eSBzd2FwIGNsdXN0ZXJzLiBUaGlzIGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgb2Ygc3dhcCBkZWFsbG9jYXRpb24gYW5kIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBzd2Fwb2ZmYCBzeXNjYWxsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgMzFlNDYyYzg2YzBlYjQ2YjY2Zjk2MTNhZGZlMDQwNDVhY2U2ODMwYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTY6Mzg6MjggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuaW5kZXggMmNiMWQyOTMwN2M1NC4uMmIxNGUyZTk2NzNiNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvc3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxuQEAgLTI0Niw3ICYjNDM7MjQ2LDcgQEAgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3Qge1xuIFx0c3RydWN0IHBsaXN0X25vZGUgbGlzdDtcdFx0LyogZW50cnkgaW4gc3dhcF9hY3RpdmVfaGVhZCAqL1xuIFx0c2lnbmVkIGNoYXJcdHR5cGU7XHRcdC8qIHN0cmFuZ2UgbmFtZSBmb3IgYW4gaW5kZXggKi9cbiBcdHVuc2lnbmVkIGludFx0bWF4O1x0XHQvKiBzaXplIG9mIHRoaXMgc3dhcCBkZXZpY2UgKi9cbi1cdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvOyAvKiBjbHVzdGVyIGluZm8uIE9ubHkgZm9yIFNTRCAqL1xuJiM0MztcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvOyAvKiBhcnJheSwgb25lIGVudHJ5IHBlciBjbHVzdGVyICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfY2x1c3RlcnM7IC8qIGZyZWUgY2x1c3RlcnMgbGlzdCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBmdWxsX2NsdXN0ZXJzOyAvKiBmdWxsIGNsdXN0ZXJzIGxpc3QgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbm9uZnVsbF9jbHVzdGVyc1tTV0FQX05SX09SREVSU107XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IGRlYTJkM2IzNmUwNmYuLjM2ZTRlODg4NGI3NjQgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMzcwLDggJiM0MzszNzAsNiBAQCBzdGF0aWMgdm9pZCBkaXNjYXJkX3N3YXBfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXG4gXHR9XG4gfVxuIFxuLSNkZWZpbmUgTEFURU5DWV9MSU1JVFx0XHQyNTZcbi1cbiBzdGF0aWMgaW5saW5lIGJvb2wgY2x1c3Rlcl9pc19lbXB0eShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmluZm8pXG4ge1xuIFx0cmV0dXJuIGluZm8tXHUwMDNlY291bnQgPT0gMDtcbkBAIC0yNzYzLDcgJiM0MzsyNzYxLDkgQEAgc3RhdGljIGludCB1bnVzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IHR5cGUpXG4gc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgcHJldilcbiB7XG4tXHR1bnNpZ25lZCBpbnQgaTtcbiYjNDM7XHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgaSwgZW5kO1xuJiM0MztcdHVuc2lnbmVkIGludCBjaV9vZmY7XG4gXHR1bnNpZ25lZCBsb25nIHN3cF90YjtcbiBcbiBcdC8qXG5AQCAtMjc3MiwxOSAmIzQzOzI3NzIsMzQgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0ICogaGl0cyBhcmUgb2theSwgYW5kIHN5c19zd2Fwb2ZmKCkgaGFzIGFscmVhZHkgcHJldmVudGVkIG5ld1xuIFx0ICogYWxsb2NhdGlvbnMgZnJvbSB0aGlzIGFyZWEgKHdoaWxlIGhvbGRpbmcgc3dhcF9sb2NrKS5cbiBcdCAqL1xuLVx0Zm9yIChpID0gcHJldiAmIzQzOyAxOyBpIFx1MDAzYyBzaS1cdTAwM2VtYXg7IGkmIzQzOyYjNDM7KSB7XG4tXHRcdHN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSksXG4tXHRcdFx0XHRcdGkgJSBTV0FQRklMRV9DTFVTVEVSKTtcbi1cdFx0aWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpIFx1MDAyNlx1MDAyNiAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRpZiAoKGkgJSBMQVRFTkNZX0xJTUlUKSA9PSAwKVxuJiM0MztcdGkgPSBwcmV2ICYjNDM7IDE7XG4mIzQzO1x0d2hpbGUgKGkgXHUwMDNjIHNpLVx1MDAzZW1heCkge1xuJiM0MztcdFx0Y2kgPSBfX3N3YXBfb2Zmc2V0X3RvX2NsdXN0ZXIoc2ksIGkpO1xuJiM0MztcdFx0Y2lfb2ZmID0gaSAlIFNXQVBGSUxFX0NMVVNURVI7XG4mIzQzO1x0XHRlbmQgPSBpIC0gY2lfb2ZmICYjNDM7IFNXQVBGSUxFX0NMVVNURVI7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIEFuIGVtcHR5IGNsdXN0ZXIgaGFzIG5vIHNsb3QgaW4gdXNlLCBzbyBza2lwIGl0IHdob2xlLlxuJiM0MztcdFx0ICogQSBzbG90IGlzIHVuY291bnRlZCBvbmx5IGFmdGVyIGl0cyBmb2xpbyBsZWZ0IHRoZSBzd2FwXG4mIzQzO1x0XHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXG4mIzQzO1x0XHQgKiBDb3VudCBvbmx5IGRyb3BzIGhlcmUsIHNvIGEgUkVBRF9PTkNFKCkgd2l0aG91dCBjaS1cdTAwM2Vsb2NrIGlzXG4mIzQzO1x0XHQgKiBlbm91Z2gsIHVubGlrZSBpbiBldmVyeSBvdGhlciBjbHVzdGVyX2lzX2VtcHR5KCkgY2FsbGVyLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIVJFQURfT05DRShjaS1cdTAwM2Vjb3VudCkpIHtcbiYjNDM7XHRcdFx0aSA9IGVuZDtcbiBcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbi1cdH1cbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4gXG4tXHRpZiAoaSA9PSBzaS1cdTAwM2VtYXgpXG4tXHRcdGkgPSAwO1xuJiM0MztcdFx0Zm9yICg7IGkgXHUwMDNjIGVuZDsgY2lfb2ZmJiM0MzsmIzQzOywgaSYjNDM7JiM0MzspIHtcbiYjNDM7XHRcdFx0c3dwX3RiID0gc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7XG4mIzQzO1x0XHRcdGlmICghc3dwX3RiX2lzX251bGwoc3dwX3RiKSBcdTAwMjZcdTAwMjYgIXN3cF90Yl9pc19iYWQoc3dwX3RiKSlcbiYjNDM7XHRcdFx0XHRyZXR1cm4gaTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGNvbmRfcmVzY2hlZCgpO1xuJiM0MztcdH1cbiBcbi1cdHJldHVybiBpO1xuJiM0MztcdHJldHVybiAwO1xuIH1cbiBcbiBzdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjozODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N5c19zd2Fwb2ZmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIGluIGBmaW5kX25leHRfdG9fdW51c2VgIHVzZWQgZHVyaW5nIGBzd2Fwb2ZmYCB0byBza2lwIGVtcHR5IHN3YXAgY2x1c3RlcnMuIFRoaXMgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBvZiBzd2FwIGRlYWxsb2NhdGlvbiBhbmQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYHN3YXBvZmZgIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAzMWU0NjJjODZjMGViNDZiNjZmOTYxM2FkZmUwNDA0NWFjZTY4MzBhCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBBdWcgNSAxNjozODoyOCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvc3dhcC5oIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKaW5kZXggMmNiMWQyOTMwN2M1NC4uMmIxNGUyZTk2NzNiNCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9zd2FwLmgKQEAgLTI0Niw3ICYjNDM7MjQ2LDcgQEAgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgewogCXN0cnVjdCBwbGlzdF9ub2RlIGxpc3Q7CQkvKiBlbnRyeSBpbiBzd2FwX2FjdGl2ZV9oZWFkICovCiAJc2lnbmVkIGNoYXIJdHlwZTsJCS8qIHN0cmFuZ2UgbmFtZSBmb3IgYW4gaW5kZXggKi8KIAl1bnNpZ25lZCBpbnQJbWF4OwkJLyogc2l6ZSBvZiB0aGlzIHN3YXAgZGV2aWNlICovCi0Jc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjbHVzdGVyX2luZm87IC8qIGNsdXN0ZXIgaW5mby4gT25seSBmb3IgU1NEICovCiYjNDM7CXN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvOyAvKiBhcnJheSwgb25lIGVudHJ5IHBlciBjbHVzdGVyICovCiAJc3RydWN0IGxpc3RfaGVhZCBmcmVlX2NsdXN0ZXJzOyAvKiBmcmVlIGNsdXN0ZXJzIGxpc3QgKi8KIAlzdHJ1Y3QgbGlzdF9oZWFkIGZ1bGxfY2x1c3RlcnM7IC8qIGZ1bGwgY2x1c3RlcnMgbGlzdCAqLwogCXN0cnVjdCBsaXN0X2hlYWQgbm9uZnVsbF9jbHVzdGVyc1tTV0FQX05SX09SREVSU107CmRpZmYgLS1naXQgYS9tbS9zd2FwZmlsZS5jIGIvbW0vc3dhcGZpbGUuYwppbmRleCBkZWEyZDNiMzZlMDZmLi4zNmU0ZTg4ODRiNzY0IDEwMDY0NAotLS0gYS9tbS9zd2FwZmlsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBmaWxlLmMKQEAgLTM3MCw4ICYjNDM7MzcwLDYgQEAgc3RhdGljIHZvaWQgZGlzY2FyZF9zd2FwX2NsdXN0ZXIoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLAogCX0KIH0KIAotI2RlZmluZSBMQVRFTkNZX0xJTUlUCQkyNTYKLQogc3RhdGljIGlubGluZSBib29sIGNsdXN0ZXJfaXNfZW1wdHkoc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICppbmZvKQogewogCXJldHVybiBpbmZvLSZndDtjb3VudCA9PSAwOwpAQCAtMjc2Myw3ICYjNDM7Mjc2MSw5IEBAIHN0YXRpYyBpbnQgdW51c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCB0eXBlKQogc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLAogCQkJCQl1bnNpZ25lZCBpbnQgcHJldikKIHsKLQl1bnNpZ25lZCBpbnQgaTsKJiM0MzsJc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTsKJiM0MzsJdW5zaWduZWQgbG9uZyBpLCBlbmQ7CiYjNDM7CXVuc2lnbmVkIGludCBjaV9vZmY7CiAJdW5zaWduZWQgbG9uZyBzd3BfdGI7CiAKIAkvKgpAQCAtMjc3MiwxOSAmIzQzOzI3NzIsMzQgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLAogCSAqIGhpdHMgYXJlIG9rYXksIGFuZCBzeXNfc3dhcG9mZigpIGhhcyBhbHJlYWR5IHByZXZlbnRlZCBuZXcKIAkgKiBhbGxvY2F0aW9ucyBmcm9tIHRoaXMgYXJlYSAod2hpbGUgaG9sZGluZyBzd2FwX2xvY2spLgogCSAqLwotCWZvciAoaSA9IHByZXYgJiM0MzsgMTsgaSAmbHQ7IHNpLSZndDttYXg7IGkmIzQzOyYjNDM7KSB7Ci0JCXN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSksCi0JCQkJCWkgJSBTV0FQRklMRV9DTFVTVEVSKTsKLQkJaWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpICZhbXA7JmFtcDsgIXN3cF90Yl9pc19iYWQoc3dwX3RiKSkKLQkJCWJyZWFrOwotCQlpZiAoKGkgJSBMQVRFTkNZX0xJTUlUKSA9PSAwKQomIzQzOwlpID0gcHJldiAmIzQzOyAxOwomIzQzOwl3aGlsZSAoaSAmbHQ7IHNpLSZndDttYXgpIHsKJiM0MzsJCWNpID0gX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBpKTsKJiM0MzsJCWNpX29mZiA9IGkgJSBTV0FQRklMRV9DTFVTVEVSOwomIzQzOwkJZW5kID0gaSAtIGNpX29mZiAmIzQzOyBTV0FQRklMRV9DTFVTVEVSOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIEFuIGVtcHR5IGNsdXN0ZXIgaGFzIG5vIHNsb3QgaW4gdXNlLCBzbyBza2lwIGl0IHdob2xlLgomIzQzOwkJICogQSBzbG90IGlzIHVuY291bnRlZCBvbmx5IGFmdGVyIGl0cyBmb2xpbyBsZWZ0IHRoZSBzd2FwCiYjNDM7CQkgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uCiYjNDM7CQkgKiBDb3VudCBvbmx5IGRyb3BzIGhlcmUsIHNvIGEgUkVBRF9PTkNFKCkgd2l0aG91dCBjaS0mZ3Q7bG9jayBpcwomIzQzOwkJICogZW5vdWdoLCB1bmxpa2UgaW4gZXZlcnkgb3RoZXIgY2x1c3Rlcl9pc19lbXB0eSgpIGNhbGxlci4KJiM0MzsJCSAqLwomIzQzOwkJaWYgKCFSRUFEX09OQ0UoY2ktJmd0O2NvdW50KSkgewomIzQzOwkJCWkgPSBlbmQ7CiAJCQljb25kX3Jlc2NoZWQoKTsKLQl9CiYjNDM7CQkJY29udGludWU7CiYjNDM7CQl9CiAKLQlpZiAoaSA9PSBzaS0mZ3Q7bWF4KQotCQlpID0gMDsKJiM0MzsJCWZvciAoOyBpICZsdDsgZW5kOyBjaV9vZmYmIzQzOyYjNDM7LCBpJiM0MzsmIzQzOykgewomIzQzOwkJCXN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KGNpLCBjaV9vZmYpOwomIzQzOwkJCWlmICghc3dwX3RiX2lzX251bGwoc3dwX3RiKSAmYW1wOyZhbXA7ICFzd3BfdGJfaXNfYmFkKHN3cF90YikpCiYjNDM7CQkJCXJldHVybiBpOwomIzQzOwkJfQomIzQzOwkJY29uZF9yZXNjaGVkKCk7CiYjNDM7CX0KIAotCXJldHVybiBpOwomIzQzOwlyZXR1cm4gMDsKIH0KIAogc3RhdGljIGludCB0cnlfdG9fdW51c2UodW5zaWduZWQgaW50IHR5cGUpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI5MjkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyB0aGUgU3dhcC1PZmYgT3B0aW1pemF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBgbW0vc3dhcGZpbGUuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAuIEl0JiMzOTtzIHByZXR0eSBmb2N1c2VkOyB0aGUga2V5IG1vZGlmaWNhdGlvbiBpcyB0byBgZmluZF9uZXh0X3RvX3VudXNlYCB3aXRoaW4gYG1tL3N3YXBmaWxlLmNgLiBGcm9tIGEgcXVpY2sgZ2xhbmNlLCBpdCBsb29rcyBsaWtlIGEgdGFyZ2V0ZWQgb3B0aW1pemF0aW9uIHRvIHNraXAgZW1wdHkgY2x1c3RlcnMgd2hlbiBzZWFyY2hpbmcgZm9yIHRoZSBuZXh0IHN3YXAgZW50cnkgdG8gdW51c2UuIFRoaXMgZGlyZWN0bHkgaW1wYWN0cyB0aGUgc3dhcG9mZiBmdW5jdGlvbmFsaXR5LCBzcGVjaWZpY2FsbHkgdGhlIGB0cnlfdG9fdW51c2VgIHBhdGguIERlZmluaXRlbHkgd29ydGggdGFraW5nIGEgY2xvc2UgbG9vayBhdCB0aGlzIHBhdGNoLgoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhpcyBpcyBjcml0aWNhbCBjb3JlIGtlcm5lbCBsb2dpYywgcGFydGljdWxhcmx5IGJlY2F1c2UgaXQmIzM5O3MgcmVsYXRlZCB0byBzd2Fwb2ZmLiBCZWNhdXNlIG9mIHRoaXMgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSwgdGhpcyBpcyBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuCgpOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgYSBiaXQgZGVlcGVyLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gYGZpbmRfbmV4dF90b191bnVzZWAgYW5kIGB0cnlfdG9fdW51c2VgLiBJIHJlY2FsbCB0aGF0IGB0cnlfdG9fdW51c2VgIGlzIGludm9sdmVkIGluIHRoZSBgc3lzX3N3YXBvZmZgIChvciBga3N5c19zd2Fwb2ZmYCkgc3lzdGVtIGNhbGwgcGF0aC4gSSBzaG91bGQgcHJvYmFibHkgcXVpY2tseSB2ZXJpZnkgdGhhdCBhc3N1bXB0aW9uIGJlZm9yZSBwcm9jZWVkaW5nIHdpdGggbW9yZSBkZXRhaWxlZCBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0cnlfdG9fdW51c2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmM9MTMxND1zdGF0aWMgdm9pZCBzd2FwX3JhbmdlX2ZyZWUoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLCB1bnNpZ25lZCBsb25nIG9mZnNldCxcbi0tXG5tbS9zd2FwZmlsZS5jLTEzMzYtXHQvKlxubW0vc3dhcGZpbGUuYzoxMzM3Olx0ICogTWFrZSBzdXJlIHRoYXQgdHJ5X3RvX3VudXNlKCkgb2JzZXJ2ZXMgc2ktXHUwMDNlaW51c2VfcGFnZXMgcmVhY2hpbmcgMFxubW0vc3dhcGZpbGUuYy0xMzM4LVx0ICogb25seSBhZnRlciB0aGUgYWJvdmUgY2xlYW51cHMgYXJlIGRvbmUuXG4tLVxubW0vc3dhcGZpbGUuYz0yNDcxPXN0YXRpYyBpbnQgdW51c2VfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxuLS1cbm1tL3N3YXBmaWxlLmMtMjQ4Mi1cdCAqIElmIHRoZSBmb2xpbyBpcyByZW1vdmVkIGZyb20gc3dhcCBjYWNoZSBieSBvdGhlcnMsIGNvbnRpbnVlIHRvXG5tbS9zd2FwZmlsZS5jOjI0ODM6XHQgKiB1bnVzZSBvdGhlciBQVEVzLiB0cnlfdG9fdW51c2UgbWF5IHRyeSBhZ2FpbiBpZiB3ZSBtaXNzZWQgdGhpcyBvbmUuXG5tbS9zd2FwZmlsZS5jLTI0ODQtXHQgKi9cbi0tXG5tbS9zd2FwZmlsZS5jPTI3NjE9c3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuLS1cbm1tL3N3YXBmaWxlLmMtMjc4My1cdFx0ICogQSBzbG90IGlzIHVuY291bnRlZCBvbmx5IGFmdGVyIGl0cyBmb2xpbyBsZWZ0IHRoZSBzd2FwXG5tbS9zd2FwZmlsZS5jOjI3ODQ6XHRcdCAqIGNhY2hlLCBzbyB0aGVyZSBpcyBub3RoaW5nIGhlcmUgZm9yIHRyeV90b191bnVzZSgpIHRvIGFjdCBvbi5cbm1tL3N3YXBmaWxlLmMtMjc4NS1cdFx0ICogQ291bnQgb25seSBkcm9wcyBoZXJlLCBzbyBhIFJFQURfT05DRSgpIHdpdGhvdXQgY2ktXHUwMDNlbG9jayBpc1xuLS1cbm1tL3N3YXBmaWxlLmMtMjgwNC1cbm1tL3N3YXBmaWxlLmM6MjgwNTpzdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcbm1tL3N3YXBmaWxlLmMtMjgwNi17XG4tLVxubW0vc3dhcGZpbGUuYy0yODk5LVx0Lypcbm1tL3N3YXBmaWxlLmM6MjkwMDpcdCAqIE1ha2Ugc3VyZSB0aGF0IGZ1cnRoZXIgY2xlYW51cHMgYWZ0ZXIgdHJ5X3RvX3VudXNlKCkgcmV0dXJucyBoYXBwZW5cbm1tL3N3YXBmaWxlLmMtMjkwMS1cdCAqIGFmdGVyIHN3YXBfcmFuZ2VfZnJlZSgpIHJlZHVjZXMgc2ktXHUwMDNlaW51c2VfcGFnZXMgdG8gMC5cbi0tXG5tbS9zd2FwZmlsZS5jLTI5MDctLypcbm1tL3N3YXBmaWxlLmM6MjkwODogKiBBZnRlciBhIHN1Y2Nlc3NmdWwgdHJ5X3RvX3VudXNlLCBpZiBubyBzd2FwIGlzIG5vdyBpbiB1c2UsIHdlIGtub3dcbm1tL3N3YXBmaWxlLmMtMjkwOS0gKiB3ZSBjYW4gZW1wdHkgdGhlIG1tbGlzdC4gIHN3YXBfbG9jayBtdXN0IGJlIGhlbGQgb24gZW50cnkgYW5kIGV4aXQuXG4tLVxubW0vc3dhcGZpbGUuYz0zMTUxPVNZU0NBTExfREVGSU5FMShzd2Fwb2ZmLCBjb25zdCBjaGFyIF9fdXNlciAqLCBzcGVjaWFsZmlsZSlcbi0tXG5tbS9zd2FwZmlsZS5jLTMyMTEtXHRzZXRfY3VycmVudF9vb21fb3JpZ2luKCk7XG5tbS9zd2FwZmlsZS5jOjMyMTI6XHRlcnIgPSB0cnlfdG9fdW51c2UocC1cdTAwM2V0eXBlKTtcbm1tL3N3YXBmaWxlLmMtMzIxMy1cdGNsZWFyX2N1cnJlbnRfb29tX29yaWdpbigpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwNjIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxOTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTd2Fwb2ZmIEltcGxlbWVudGF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgY2xlYXJseSB0b3VjaGluZyB0aGUgY29kZSB0aGF0IGdvdmVybnMgaG93IHN3YXAgc3BhY2UgaXMgZGVhY3RpdmF0ZWQuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgY2hhbmdpbmcgYGZpbmRfbmV4dF90b191bnVzZWAsIHdoaWNoIGl0c2VsZiBmZWVkcyBpbnRvIGB0cnlfdG9fdW51c2VgLCBhbmQgdWx0aW1hdGVseSwgYHN5c19zd2Fwb2ZmYC4gRnJvbSBhIGZ1bmN0aW9uYWwgc3RhbmRwb2ludCwgdGhpcyBpcyBkZWZpbml0ZWx5IGEgcmVhY2hhYmxlIGNvZGUgcGF0aCwgc28gdGhhdCYjMzk7cyBnb29kLiBNeSBpbnN0aW5jdCBpcyB0aGF0IHRoaXMgYXJlYSB3YXJyYW50cyBhIGZ1enppbmcgY2FtcGFpZ24gZm9jdXNlZCBvbiB0aGUgYHN5c19zd2Fwb2ZmYCBhbmQgYHRyeV90b191bnVzZWAgZnVuY3Rpb25zLgoKV2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgY29ycmVjdGx5LiBTaW5jZSBgZmluZF9uZXh0X3RvX3VudXNlYCBhbmQgYHRyeV90b191bnVzZWAgYXJlIGJvdGggc3RhdGljLCB0aGUgYWN0dWFsIHN5c2NhbGwgaW50ZXJmYWNlIGhhcyB0byBiZSBgX194NjRfc3lzX3N3YXBvZmZgIG9yIGBzeXNfc3dhcG9mZmAuIFRoYXQmIzM5O3MgdGhlIGVudHJ5IHBvaW50IHRvIGludmVzdGlnYXRlIGZ1cnRoZXIsIGJ1dCBJIG5lZWQgdG8gZW5zdXJlIEkmIzM5O20gZ2V0dGluZyB0aGUgcmlnaHQgZW50cnlwb2ludC4KCkp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGNoZWNrIGBtbS9zd2FwZmlsZS5jYCBmb3IgYm90aCBgdHJ5X3RvX3VudXNlYCBhbmQgYGZpbmRfbmV4dF90b191bnVzZWAgdG8gYmUgc3VyZS4gVGhhdCYjMzk7cyB0aGUgbGlrZWx5IGxvY2F0aW9uIGZvciB0aGVzZSBmdW5jdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZmluZF9uZXh0X3RvX3VudXNlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jPTI3MzM9c3RhdGljIGludCB1bnVzZV9tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgdW5zaWduZWQgaW50IHR5cGUpXG4tLVxubW0vc3dhcGZpbGUuYy0yNzYwLSAqL1xubW0vc3dhcGZpbGUuYzoyNzYxOnN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbm1tL3N3YXBmaWxlLmMtMjc2Mi1cdFx0XHRcdFx0dW5zaWduZWQgaW50IHByZXYpXG4tLVxubW0vc3dhcGZpbGUuYz0yODA1PXN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxuLS1cbm1tL3N3YXBmaWxlLmMtMjg1OC1cdCAgICAgICAhc2lnbmFsX3BlbmRpbmcoY3VycmVudCkgXHUwMDI2XHUwMDI2XG5tbS9zd2FwZmlsZS5jOjI4NTk6XHQgICAgICAgKGkgPSBmaW5kX25leHRfdG9fdW51c2Uoc2ksIGkpKSAhPSAwKSB7XG5tbS9zd2FwZmlsZS5jLTI4NjAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDc2MQoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDM3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBteSBvd246CgoqKkFuYWx5emluZyB0aGUgU3dhcCBEZWFjdGl2YXRpb24gRW50cnkgUG9pbnQqKgoKUmlnaHQsIHNvIGBzeXNfc3dhcG9mZmAgaXMgdGhlIGtleSBmdW5jdGlvbiB3ZSYjMzk7cmUgbG9va2luZyBhdCBoZXJlLCB0aGUgbWFpbiBlbnRyeSBwb2ludCBmb3IgdGhlIGVudGlyZSBzd2FwIGRlYWN0aXZhdGlvbiBwcm9jZXNzLiBMZXQgbWUgcXVpY2tseSBzY2FuIGZvciBhbnkgcG90ZW50aWFsIGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgaW5mbHVlbmNlIGl0cyBiZWhhdmlvci4gV2UmIzM5O3JlIG9idmlvdXNseSBkZWFsaW5nIHdpdGggc3dhcCBpdHNlbGYsIGFuZCB0aGUgYmFzZSBlbmFibGluZyBjb25kaXRpb24gZm9yIGFsbCB0aGlzIGlzLCBhcyBleHBlY3RlZCwgYENPTkZJR19TV0FQYC4gR29vZCwgdGhhdCBtYWtlcyBzZW5zZS4gU28sIHdpdGggYENPTkZJR19TV0FQYCBlbmFibGVkIHdlJiMzOTtyZSBhdCBsZWFzdCBpbiB0aGUgcmlnaHQgYmFsbHBhcmsuIExldCYjMzk7cyBzZWUgd2hhdCBlbHNlIHdlIGNhbiB1bmNvdmVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBTV0FQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvbWlwcy9LY29uZmlnPTEyNjM9Y29uZmlnIE1JUFNfU1BSQU1cbi0tXG5hcmNoL21pcHMvS2NvbmZpZy0xMjY1LVxuYXJjaC9taXBzL0tjb25maWc6MTI2Njpjb25maWcgU1dBUF9JT19TUEFDRVxuYXJjaC9taXBzL0tjb25maWctMTI2Ny1cdGJvb2xcbi0tXG5hcmNoL3NoL0tjb25maWc9MTI2PWNvbmZpZyBJT19UUkFQUEVEXG4tLVxuYXJjaC9zaC9LY29uZmlnLTEyOC1cbmFyY2gvc2gvS2NvbmZpZzoxMjk6Y29uZmlnIFNXQVBfSU9fU1BBQ0VcbmFyY2gvc2gvS2NvbmZpZy0xMzAtXHRib29sXG4tLVxubW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcbi0tXG5tbS9LY29uZmlnLTExLVxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcbm1tL0tjb25maWctMTMtXHRib29sIFwmIzM0O1N1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxNzIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAxOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTd2FwIENvbmZpZ3VyYXRpb24gYW5kIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyBgQ09ORklHX1NXQVBgLiBJcyB0aGVyZSAqYW55dGhpbmcqIGVsc2UgY29uZmlndXJhdGlvbi13aXNlIHRoYXQmIzM5O3MgcmVsZXZhbnQgaGVyZT8gSSBuZWVkIHRvIGJlIHRob3JvdWdoLiBUaGUgY2hhbmdlcyBhcmUgaW4gYGluY2x1ZGUvbGludXgvc3dhcC5oYCBhbmQgYG1tL3N3YXBmaWxlLmNgLCB3aGljaCBtYWtlcyBzZW5zZS4gSnVzdCB0byBiZSBzdXJlLCBJIHNob3VsZCB2ZXJpZnkgdGhhdCBgU1dBUGAgaXNuJiMzOTt0IGxpc3RlZCBhbmQgbWFrZSBzdXJlIGBDT05GSUdfU1dBUGAgaXMgZGVmaW5lZCBpbiB0aGUgY29uZmlndXJhdGlvbi4gQWx0aG91Z2gsIGBTV0FQYCBpcyBhbG1vc3QgYWx3YXlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgaXQgaXMgYWx3YXlzIHdpc2UgdG8gZXhwbGljaXRseSBkZWNsYXJlIGBDT05GSUdfU1dBUGAuCgpOZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzLiBMZXQgbWUgc2VlLi4uIEkgc2VlIGBmaW5kX25leHRfdG9fdW51c2VgIGFuZCBgdHJ5X3RvX3VudXNlYCB3aGljaCBhcmUgc3RhdGljIGZ1bmN0aW9uczsgdGhvc2Ugd29uJiMzOTt0IGJlIGV4cG9zZWQgZGlyZWN0bHkuIFRoZSBrZXkgaGVyZSBzZWVtcyB0byBiZSBgc3lzX3N3YXBvZmZgLCB3aGljaCAqaXMqIGEgc3lzY2FsbC4gVGhhdCYjMzk7cyB0aGUgb25seSBkaXJlY3QgZW50cnkgcG9pbnQgSSBzZWUsIHNvIGl0IG1ha2VzIHNlbnNlIHRvIGNvbmZpcm0gdGhhdC4KCkFscmlnaHQsIGRvdWJsZS1jaGVja2luZywgeWVzLCBgc3lzX3N3YXBvZmZgIGlzIHRoZSBzeXN0ZW0gY2FsbC4gTm93LCBJIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgYG1tL3N3YXBmaWxlLmNgIHRvIHNlZSBwcmVjaXNlbHkgaG93IGBzeXNfc3dhcG9mZmAgaXMgaW1wbGVtZW50ZWQgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjM4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1NZU0NBTExfREVGSU5FMVxcKHN3YXBvZmYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zd2FwZmlsZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmM9MzEzMz1zdGF0aWMgdm9pZCBmbHVzaF9wZXJjcHVfc3dhcF9jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSlcbi0tXG5tbS9zd2FwZmlsZS5jLTMxNTAtXG5tbS9zd2FwZmlsZS5jOjMxNTE6U1lTQ0FMTF9ERUZJTkUxKHN3YXBvZmYsIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlKVxubW0vc3dhcGZpbGUuYy0zMTUyLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDUgMTY6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc5MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtlcm5lbCYjMzk7cyBgc3lzX3N3YXBvZmZgIEltcGxlbWVudGF0aW9uKioKCk9rYXksIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgZm9jdXNpbmcgb24gYHN5c19zd2Fwb2ZmYC4gTGV0JiMzOTtzIHNlZSBob3cgdGhhdCYjMzk7cyBpbXBsZW1lbnRlZC4gQWhhLCBpdCBsb29rcyBsaWtlIGl0JiMzOTtzIGRlZmluZWQgdXNpbmcgYFNZU0NBTExfREVGSU5FMShzd2Fwb2ZmLCAuLi4pYC4gVGhhdCBtZWFucyB0aGUgcmVhbCBmdW5jdGlvbiBuYW1lIG1pZ2h0IGJlIGBfX3g2NF9zeXNfc3dhcG9mZmAsIGBfX3NlX3N5c19zd2Fwb2ZmYCwgb3IganVzdCBwbGFpbiBgc3lzX3N3YXBvZmZgLiBJbiBtb3N0IHN5emthbGxlciBjYXNlcywgc3BlY2lmeWluZyBgc3lzX3N3YXBvZmZgIG9yIGBfX3g2NF9zeXNfc3dhcG9mZmAgaXMgc3VmZmljaWVudC4gU28sIGBzeXNfc3dhcG9mZmAgc2hvdWxkIGJlIGp1c3QgZmluZSBoZXJlLgoKTm93LCBhIHF1aWNrIGNoZWNrIG9mIHRoZSBzb3VyY2UgY29kZSByZXZlYWxzIHRoYXQgYHRyeV90b191bnVzZWAgaXMgZGVjbGFyZWQgYXMgYHN0YXRpY2AsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBXYWl0IGEgbWludXRlLCBpdCYjMzk7cyBub3QgaW5saW5lZCwgYW5kIGl0JiMzOTtzIGEgcmVsYXRpdmVseSBsYXJnZSBmdW5jdGlvbi4gSSB3YW50IHRvIGNvbmZpcm0gd2hldGhlciBvciBub3QgaXQgaGFzIGJlZW4gaW5saW5lZC4gTGV0IG1lIGludmVzdGlnYXRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGF0aWMgaW50IHRyeV90b191bnVzZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3N3YXBmaWxlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc3dhcGZpbGUuYz0yNzYxPXN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbi0tXG5tbS9zd2FwZmlsZS5jLTI4MDQtXG5tbS9zd2FwZmlsZS5jOjI4MDU6c3RhdGljIGludCB0cnlfdG9fdW51c2UodW5zaWduZWQgaW50IHR5cGUpXG5tbS9zd2FwZmlsZS5jLTI4MDYte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjozOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2Mjk1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBTd2Fwb2ZmIEZ1bmN0aW9uYWxpdHkgZm9yIFN5emthbGxlciBJbnRlZ3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgdHJ5X3RvX3VudXNlYCBmdW5jdGlvbiDigJMgaXQmIzM5O3MgcHJldHR5IGhlZnR5LCBhbmQgbm90IG1hcmtlZCBpbmxpbmUsIHdoaWNoIGlzIGltbWVkaWF0ZWx5IGEgcmVkIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBtb3N0IGVmZmVjdGl2ZSB3YXkgdG8gaW50ZWdyYXRlIHRoaXMgZnVuY3Rpb25hbGl0eSB3aXRoIFN5emthbGxlciBmb3IgZnV6emluZy4gSSB3YXMgaW5pdGlhbGx5IGxlYW5pbmcgdG93YXJkIGluY2x1ZGluZyBib3RoIGB0cnlfdG9fdW51c2VgIGFuZCBgc3lzX3N3YXBvZmZgIGluIG15IGFuYWx5c2lzLgoKVGhlbiBJIHJlbWVtYmVyZWQgU3l6a2FsbGVyJiMzOTtzIHByZWZlcmVuY2UgZm9yIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50cyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zLiBUaGlzIGNoYW5nZXMgdGhpbmdzLiBgc3lzX3N3YXBvZmZgIGlzIGxpa2VseSBhIGJldHRlciB0YXJnZXQuIEl0JiMzOTtzIGEgc3lzY2FsbCwgYW5kIFN5emthbGxlciBpcyBkZWZpbml0ZWx5IGZhbWlsaWFyIHdpdGggaXQgYXMgYHN5c19zd2Fwb2ZmYC4KCkkmIzM5O20gZG91YmxlLWNoZWNraW5nLiBJcyB0aGVyZSBhbnl0aGluZyBlbHNlPyBObywgYHN5c19zd2Fwb2ZmYCBsb29rcyBsaWtlIHRoZSBvbmx5IGZ1bmN0aW9uIHRoYXQgaXMgYSBzeXN0ZW0gY2FsbC4KCk5vdywgSSYjMzk7bGwgcXVpY2tseSBjaGVjayBpZiBgQ09ORklHX1NXQVBgIGlzIHRoZSBvbmx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGUgZnV6eiB0YXJnZXQgaXMgYXMgc3RyYWlnaHRmb3J3YXJkIGFzIHBvc3NpYmxlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtvYmotXFwkXFwoQ09ORklHX1NXQVBcXCkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03Nj1lbmRpZlxubW0vTWFrZWZpbGUtNzctXG5tbS9NYWtlZmlsZTo3ODpvYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlLTc5LW9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA1IDE2OjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY3NzAKCQkJCQkJCW91dHB1dDogOTAKCQkJCQkJCXRob3VnaHRzOiAyOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBTd2Fwb2ZmIFBhdGNoKioKCk9rYXksIHNvIGBDT05GSUdfU1dBUGAgaXMgZGVmaW5pdGVseSBuZWVkZWQgZm9yIHRoaXMuIExldCYjMzk7cyByZXZpc2l0IHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gY2hhbmdlIGlzIGluIGBmaW5kX25leHRfdG9fdW51c2VgLCB3aGVyZSBpdCYjMzk7cyBiZWluZyBtb2RpZmllZCB0byBza2lwIGVtcHR5IGNsdXN0ZXJzLiBUaGlzIGlzIGEgcGVyZm9ybWFuY2UgdHdlYWssIGJ1dCBpdCBkaXJlY3RseSBpbXBhY3RzIHRoZSBjb3JlIGxvZ2ljIG9mIGhvdyBzd2FwIGVudHJpZXMgYXJlIGZvdW5kIGR1cmluZyBgc3dhcG9mZmAuIFRoaXMgbWVhbnMgaXQgKmNvdWxkKiBpbnRyb2R1Y2Ugc3VidGxlLCB1bmV4cGVjdGVkIGJlaGF2aW9yIGR1cmluZyBzd2FwIGRlYWxsb2NhdGlvbi4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSBmdW5jdGlvbmFsbHkgY29ycmVjdCwgYW5kIHRoZXJlZm9yZSBJIG5lZWQgdG8gZnV6eiB0aGlzIHRob3JvdWdobHkuCgpNeSByZWFzb25pbmc/IFRoZSBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyB3ZSBmaW5kIHN3YXAgZW50cmllcyBkdXJpbmcgYHN3YXBvZmZgLiBUaGlzIGlzIGV4cG9zZWQgdGhyb3VnaCB0aGUgYHN3YXBvZmZgIHN5c3RlbSBjYWxsLiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgY2xlYXJseSBgc3lzX3N3YXBvZmZgLiBXZSBuZWVkIGBDT05GSUdfU1dBUGAgZW5hYmxlZC4KCk5vdywgYSBxdWljayBjaGVjay4gSXMgYHN5c19zd2Fwb2ZmYCB0aGUgY29ycmVjdCBzeW1ib2wgbmFtZT8gSSYjMzk7bSBwcmV0dHkgc3VyZSBpdCBpcywgYnV0IGxldCYjMzk7cyBjb25maXJtLiBZZXMsIGBTWVNDQUxMX0RFRklORTEoc3dhcG9mZiwgLi4uKWAgZXhwYW5kcyB0byBgc3lzX3N3YXBvZmZgLCBhbmQgdGhlcmUgYXJlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB3cmFwcGVycy4gU3l6a2FsbGVyIGNhbiBoYW5kbGUgZWl0aGVyIGBzeXNfc3dhcG9mZmAgb3IgYF9feDY0X3N5c19zd2Fwb2ZmYC4gYHN5c19zd2Fwb2ZmYCBpcyB0aGUgY2Fub25pY2FsIG5hbWUsIGFuZCB0aGVyZWZvcmUgSSB3aWxsIHByb3ZpZGUgdGhhdC4KCkFoLCBhbmQgSSByZW1lbWJlciBmcm9tIHRoZSBwcm9tcHQ6ICYjMzQ7UHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zJiMzNDsuIGBzeXNfc3dhcG9mZmAgZml0cyB0aGF0IGRlc2NyaXB0aW9uIHBlcmZlY3RseS4gR3JlYXQuIEkgdGhpbmsgSSYjMzk7bSByZWFkeSB0byB3cml0ZSB0aGUgcmVzcG9uc2Ugbm93LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNSAxNjozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3N5c19zd2Fwb2ZmJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIGluIGBmaW5kX25leHRfdG9fdW51c2VgIHVzZWQgZHVyaW5nIGBzd2Fwb2ZmYCB0byBza2lwIGVtcHR5IHN3YXAgY2x1c3RlcnMuIFRoaXMgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBvZiBzd2FwIGRlYWxsb2NhdGlvbiBhbmQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYHN3YXBvZmZgIHN5c2NhbGwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzeXNfc3dhcG9mZiYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBsb2dpYyBpbiBgZmluZF9uZXh0X3RvX3VudXNlYCB1c2VkIGR1cmluZyBgc3dhcG9mZmAgdG8gc2tpcCBlbXB0eSBzd2FwIGNsdXN0ZXJzLiBUaGlzIGFsdGVycyB0aGUgZXhlY3V0aW9uIGZsb3cgb2Ygc3dhcCBkZWFsbG9jYXRpb24gYW5kIGlzIHJlYWNoYWJsZSB2aWEgdGhlIGBzd2Fwb2ZmYCBzeXNjYWxsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6Mzg6MjkuODExMzg2MDY2WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMyNDA3MTg5ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN5c19zd2Fwb2ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgaW4gYGZpbmRfbmV4dF90b191bnVzZWAgdXNlZCBkdXJpbmcgYHN3YXBvZmZgIHRvIHNraXAgZW1wdHkgc3dhcCBjbHVzdGVycy4gVGhpcyBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHN3YXAgZGVhbGxvY2F0aW9uIGFuZCBpcyByZWFjaGFibGUgdmlhIHRoZSBgc3dhcG9mZmAgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6Mzg6MjkuODExMzkxNjE2WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1ODgyNjcxMzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCAzMWU0NjJjODZjMGViNDZiNjZmOTYxM2FkZmUwNDA0NWFjZTY4MzBhXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgQXVnIDUgMTY6Mzg6MjggMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxcbmluZGV4IDJjYjFkMjkzMDdjNTQuLjJiMTRlMmU5NjczYjQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3N3YXAuaFxcbkBAIC0yNDYsNyArMjQ2LDcgQEAgc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3Qge1xcbiBcXHRzdHJ1Y3QgcGxpc3Rfbm9kZSBsaXN0O1xcdFxcdC8qIGVudHJ5IGluIHN3YXBfYWN0aXZlX2hlYWQgKi9cXG4gXFx0c2lnbmVkIGNoYXJcXHR0eXBlO1xcdFxcdC8qIHN0cmFuZ2UgbmFtZSBmb3IgYW4gaW5kZXggKi9cXG4gXFx0dW5zaWduZWQgaW50XFx0bWF4O1xcdFxcdC8qIHNpemUgb2YgdGhpcyBzd2FwIGRldmljZSAqL1xcbi1cXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNsdXN0ZXJfaW5mbzsgLyogY2x1c3RlciBpbmZvLiBPbmx5IGZvciBTU0QgKi9cXG4rXFx0c3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjbHVzdGVyX2luZm87IC8qIGFycmF5LCBvbmUgZW50cnkgcGVyIGNsdXN0ZXIgKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBmcmVlX2NsdXN0ZXJzOyAvKiBmcmVlIGNsdXN0ZXJzIGxpc3QgKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBmdWxsX2NsdXN0ZXJzOyAvKiBmdWxsIGNsdXN0ZXJzIGxpc3QgKi9cXG4gXFx0c3RydWN0IGxpc3RfaGVhZCBub25mdWxsX2NsdXN0ZXJzW1NXQVBfTlJfT1JERVJTXTtcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcXG5pbmRleCBkZWEyZDNiMzZlMDZmLi4zNmU0ZTg4ODRiNzY0IDEwMDY0NFxcbi0tLSBhL21tL3N3YXBmaWxlLmNcXG4rKysgYi9tbS9zd2FwZmlsZS5jXFxuQEAgLTM3MCw4ICszNzAsNiBAQCBzdGF0aWMgdm9pZCBkaXNjYXJkX3N3YXBfY2x1c3RlcihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuIFxcdH1cXG4gfVxcbiBcXG4tI2RlZmluZSBMQVRFTkNZX0xJTUlUXFx0XFx0MjU2XFxuLVxcbiBzdGF0aWMgaW5saW5lIGJvb2wgY2x1c3Rlcl9pc19lbXB0eShzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmluZm8pXFxuIHtcXG4gXFx0cmV0dXJuIGluZm8tXFx1MDAzZWNvdW50ID09IDA7XFxuQEAgLTI3NjMsNyArMjc2MSw5IEBAIHN0YXRpYyBpbnQgdW51c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCB0eXBlKVxcbiBzdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuIFxcdFxcdFxcdFxcdFxcdHVuc2lnbmVkIGludCBwcmV2KVxcbiB7XFxuLVxcdHVuc2lnbmVkIGludCBpO1xcbitcXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xcbitcXHR1bnNpZ25lZCBsb25nIGksIGVuZDtcXG4rXFx0dW5zaWduZWQgaW50IGNpX29mZjtcXG4gXFx0dW5zaWduZWQgbG9uZyBzd3BfdGI7XFxuIFxcbiBcXHQvKlxcbkBAIC0yNzcyLDE5ICsyNzcyLDM0IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcXG4gXFx0ICogaGl0cyBhcmUgb2theSwgYW5kIHN5c19zd2Fwb2ZmKCkgaGFzIGFscmVhZHkgcHJldmVudGVkIG5ld1xcbiBcXHQgKiBhbGxvY2F0aW9ucyBmcm9tIHRoaXMgYXJlYSAod2hpbGUgaG9sZGluZyBzd2FwX2xvY2spLlxcbiBcXHQgKi9cXG4tXFx0Zm9yIChpID0gcHJldiArIDE7IGkgXFx1MDAzYyBzaS1cXHUwMDNlbWF4OyBpKyspIHtcXG4tXFx0XFx0c3dwX3RiID0gc3dhcF90YWJsZV9nZXQoX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBpKSxcXG4tXFx0XFx0XFx0XFx0XFx0aSAlIFNXQVBGSUxFX0NMVVNURVIpO1xcbi1cXHRcXHRpZiAoIXN3cF90Yl9pc19udWxsKHN3cF90YikgXFx1MDAyNlxcdTAwMjYgIXN3cF90Yl9pc19iYWQoc3dwX3RiKSlcXG4tXFx0XFx0XFx0YnJlYWs7XFxuLVxcdFxcdGlmICgoaSAlIExBVEVOQ1lfTElNSVQpID09IDApXFxuK1xcdGkgPSBwcmV2ICsgMTtcXG4rXFx0d2hpbGUgKGkgXFx1MDAzYyBzaS1cXHUwMDNlbWF4KSB7XFxuK1xcdFxcdGNpID0gX19zd2FwX29mZnNldF90b19jbHVzdGVyKHNpLCBpKTtcXG4rXFx0XFx0Y2lfb2ZmID0gaSAlIFNXQVBGSUxFX0NMVVNURVI7XFxuK1xcdFxcdGVuZCA9IGkgLSBjaV9vZmYgKyBTV0FQRklMRV9DTFVTVEVSO1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogQW4gZW1wdHkgY2x1c3RlciBoYXMgbm8gc2xvdCBpbiB1c2UsIHNvIHNraXAgaXQgd2hvbGUuXFxuK1xcdFxcdCAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcFxcbitcXHRcXHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXFxuK1xcdFxcdCAqIENvdW50IG9ubHkgZHJvcHMgaGVyZSwgc28gYSBSRUFEX09OQ0UoKSB3aXRob3V0IGNpLVxcdTAwM2Vsb2NrIGlzXFxuK1xcdFxcdCAqIGVub3VnaCwgdW5saWtlIGluIGV2ZXJ5IG90aGVyIGNsdXN0ZXJfaXNfZW1wdHkoKSBjYWxsZXIuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRpZiAoIVJFQURfT05DRShjaS1cXHUwMDNlY291bnQpKSB7XFxuK1xcdFxcdFxcdGkgPSBlbmQ7XFxuIFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbi1cXHR9XFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHR9XFxuIFxcbi1cXHRpZiAoaSA9PSBzaS1cXHUwMDNlbWF4KVxcbi1cXHRcXHRpID0gMDtcXG4rXFx0XFx0Zm9yICg7IGkgXFx1MDAzYyBlbmQ7IGNpX29mZisrLCBpKyspIHtcXG4rXFx0XFx0XFx0c3dwX3RiID0gc3dhcF90YWJsZV9nZXQoY2ksIGNpX29mZik7XFxuK1xcdFxcdFxcdGlmICghc3dwX3RiX2lzX251bGwoc3dwX3RiKSBcXHUwMDI2XFx1MDAyNiAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKVxcbitcXHRcXHRcXHRcXHRyZXR1cm4gaTtcXG4rXFx0XFx0fVxcbitcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4rXFx0fVxcbiBcXG4tXFx0cmV0dXJuIGk7XFxuK1xcdHJldHVybiAwO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6Mzg6MzAuNDAwNDQxNzA4WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NDI2NTE2NTA5NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN5c19zd2Fwb2ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgaW4gYGZpbmRfbmV4dF90b191bnVzZWAgdXNlZCBkdXJpbmcgYHN3YXBvZmZgIHRvIHNraXAgZW1wdHkgc3dhcCBjbHVzdGVycy4gVGhpcyBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHN3YXAgZGVhbGxvY2F0aW9uIGFuZCBpcyByZWFjaGFibGUgdmlhIHRoZSBgc3dhcG9mZmAgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMzFlNDYyYzg2YzBlYjQ2YjY2Zjk2MTNhZGZlMDQwNDVhY2U2ODMwYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgQXVnIDUgMTY6Mzg6MjggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3N3YXAuaCBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5pbmRleCAyY2IxZDI5MzA3YzU0Li4yYjE0ZTJlOTY3M2I0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9zd2FwLmhcbisrKyBiL2luY2x1ZGUvbGludXgvc3dhcC5oXG5AQCAtMjQ2LDcgKzI0Niw3IEBAIHN0cnVjdCBzd2FwX2luZm9fc3RydWN0IHtcbiBcdHN0cnVjdCBwbGlzdF9ub2RlIGxpc3Q7XHRcdC8qIGVudHJ5IGluIHN3YXBfYWN0aXZlX2hlYWQgKi9cbiBcdHNpZ25lZCBjaGFyXHR0eXBlO1x0XHQvKiBzdHJhbmdlIG5hbWUgZm9yIGFuIGluZGV4ICovXG4gXHR1bnNpZ25lZCBpbnRcdG1heDtcdFx0Lyogc2l6ZSBvZiB0aGlzIHN3YXAgZGV2aWNlICovXG4tXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNsdXN0ZXJfaW5mbzsgLyogY2x1c3RlciBpbmZvLiBPbmx5IGZvciBTU0QgKi9cbitcdHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2x1c3Rlcl9pbmZvOyAvKiBhcnJheSwgb25lIGVudHJ5IHBlciBjbHVzdGVyICovXG4gXHRzdHJ1Y3QgbGlzdF9oZWFkIGZyZWVfY2x1c3RlcnM7IC8qIGZyZWUgY2x1c3RlcnMgbGlzdCAqL1xuIFx0c3RydWN0IGxpc3RfaGVhZCBmdWxsX2NsdXN0ZXJzOyAvKiBmdWxsIGNsdXN0ZXJzIGxpc3QgKi9cbiBcdHN0cnVjdCBsaXN0X2hlYWQgbm9uZnVsbF9jbHVzdGVyc1tTV0FQX05SX09SREVSU107XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcGZpbGUuYyBiL21tL3N3YXBmaWxlLmNcbmluZGV4IGRlYTJkM2IzNmUwNmYuLjM2ZTRlODg4NGI3NjQgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwZmlsZS5jXG4rKysgYi9tbS9zd2FwZmlsZS5jXG5AQCAtMzcwLDggKzM3MCw2IEBAIHN0YXRpYyB2b2lkIGRpc2NhcmRfc3dhcF9jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdH1cbiB9XG4gXG4tI2RlZmluZSBMQVRFTkNZX0xJTUlUXHRcdDI1NlxuLVxuIHN0YXRpYyBpbmxpbmUgYm9vbCBjbHVzdGVyX2lzX2VtcHR5KHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqaW5mbylcbiB7XG4gXHRyZXR1cm4gaW5mby1cdTAwM2Vjb3VudCA9PSAwO1xuQEAgLTI3NjMsNyArMjc2MSw5IEBAIHN0YXRpYyBpbnQgdW51c2VfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGludCB0eXBlKVxuIHN0YXRpYyB1bnNpZ25lZCBpbnQgZmluZF9uZXh0X3RvX3VudXNlKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSxcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IHByZXYpXG4ge1xuLVx0dW5zaWduZWQgaW50IGk7XG4rXHRzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpO1xuK1x0dW5zaWduZWQgbG9uZyBpLCBlbmQ7XG4rXHR1bnNpZ25lZCBpbnQgY2lfb2ZmO1xuIFx0dW5zaWduZWQgbG9uZyBzd3BfdGI7XG4gXG4gXHQvKlxuQEAgLTI3NzIsMTkgKzI3NzIsMzQgQEAgc3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxuIFx0ICogaGl0cyBhcmUgb2theSwgYW5kIHN5c19zd2Fwb2ZmKCkgaGFzIGFscmVhZHkgcHJldmVudGVkIG5ld1xuIFx0ICogYWxsb2NhdGlvbnMgZnJvbSB0aGlzIGFyZWEgKHdoaWxlIGhvbGRpbmcgc3dhcF9sb2NrKS5cbiBcdCAqL1xuLVx0Zm9yIChpID0gcHJldiArIDE7IGkgXHUwMDNjIHNpLVx1MDAzZW1heDsgaSsrKSB7XG4tXHRcdHN3cF90YiA9IHN3YXBfdGFibGVfZ2V0KF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSksXG4tXHRcdFx0XHRcdGkgJSBTV0FQRklMRV9DTFVTVEVSKTtcbi1cdFx0aWYgKCFzd3BfdGJfaXNfbnVsbChzd3BfdGIpIFx1MDAyNlx1MDAyNiAhc3dwX3RiX2lzX2JhZChzd3BfdGIpKVxuLVx0XHRcdGJyZWFrO1xuLVx0XHRpZiAoKGkgJSBMQVRFTkNZX0xJTUlUKSA9PSAwKVxuK1x0aSA9IHByZXYgKyAxO1xuK1x0d2hpbGUgKGkgXHUwMDNjIHNpLVx1MDAzZW1heCkge1xuK1x0XHRjaSA9IF9fc3dhcF9vZmZzZXRfdG9fY2x1c3RlcihzaSwgaSk7XG4rXHRcdGNpX29mZiA9IGkgJSBTV0FQRklMRV9DTFVTVEVSO1xuK1x0XHRlbmQgPSBpIC0gY2lfb2ZmICsgU1dBUEZJTEVfQ0xVU1RFUjtcbitcbitcdFx0LypcbitcdFx0ICogQW4gZW1wdHkgY2x1c3RlciBoYXMgbm8gc2xvdCBpbiB1c2UsIHNvIHNraXAgaXQgd2hvbGUuXG4rXHRcdCAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcFxuK1x0XHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXG4rXHRcdCAqIENvdW50IG9ubHkgZHJvcHMgaGVyZSwgc28gYSBSRUFEX09OQ0UoKSB3aXRob3V0IGNpLVx1MDAzZWxvY2sgaXNcbitcdFx0ICogZW5vdWdoLCB1bmxpa2UgaW4gZXZlcnkgb3RoZXIgY2x1c3Rlcl9pc19lbXB0eSgpIGNhbGxlci5cbitcdFx0ICovXG4rXHRcdGlmICghUkVBRF9PTkNFKGNpLVx1MDAzZWNvdW50KSkge1xuK1x0XHRcdGkgPSBlbmQ7XG4gXHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4tXHR9XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbiBcbi1cdGlmIChpID09IHNpLVx1MDAzZW1heClcbi1cdFx0aSA9IDA7XG4rXHRcdGZvciAoOyBpIFx1MDAzYyBlbmQ7IGNpX29mZisrLCBpKyspIHtcbitcdFx0XHRzd3BfdGIgPSBzd2FwX3RhYmxlX2dldChjaSwgY2lfb2ZmKTtcbitcdFx0XHRpZiAoIXN3cF90Yl9pc19udWxsKHN3cF90YikgXHUwMDI2XHUwMDI2ICFzd3BfdGJfaXNfYmFkKHN3cF90YikpXG4rXHRcdFx0XHRyZXR1cm4gaTtcbitcdFx0fVxuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbitcdH1cbiBcbi1cdHJldHVybiBpO1xuK1x0cmV0dXJuIDA7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6Mzg6MzAuNDAwNDQyNzc4WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc0MjgyNTc1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIHRoZSBTd2FwLU9mZiBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGFmZmVjdGluZyBgbW0vc3dhcGZpbGUuY2AgYW5kIGBpbmNsdWRlL2xpbnV4L3N3YXAuaGAuIEl0J3MgcHJldHR5IGZvY3VzZWQ7IHRoZSBrZXkgbW9kaWZpY2F0aW9uIGlzIHRvIGBmaW5kX25leHRfdG9fdW51c2VgIHdpdGhpbiBgbW0vc3dhcGZpbGUuY2AuIEZyb20gYSBxdWljayBnbGFuY2UsIGl0IGxvb2tzIGxpa2UgYSB0YXJnZXRlZCBvcHRpbWl6YXRpb24gdG8gc2tpcCBlbXB0eSBjbHVzdGVycyB3aGVuIHNlYXJjaGluZyBmb3IgdGhlIG5leHQgc3dhcCBlbnRyeSB0byB1bnVzZS4gVGhpcyBkaXJlY3RseSBpbXBhY3RzIHRoZSBzd2Fwb2ZmIGZ1bmN0aW9uYWxpdHksIHNwZWNpZmljYWxseSB0aGUgYHRyeV90b191bnVzZWAgcGF0aC4gRGVmaW5pdGVseSB3b3J0aCB0YWtpbmcgYSBjbG9zZSBsb29rIGF0IHRoaXMgcGF0Y2guXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHRoaXMgaXMgY3JpdGljYWwgY29yZSBrZXJuZWwgbG9naWMsIHBhcnRpY3VsYXJseSBiZWNhdXNlIGl0J3MgcmVsYXRlZCB0byBzd2Fwb2ZmLiBCZWNhdXNlIG9mIHRoaXMgYW5kIHRoZSBuYXR1cmUgb2YgdGhlIGNoYW5nZSwgdGhpcyBpcyBwcmltZSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuXG5cbk5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGEgYml0IGRlZXBlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBmaW5kX25leHRfdG9fdW51c2VgIGFuZCBgdHJ5X3RvX3VudXNlYC4gSSByZWNhbGwgdGhhdCBgdHJ5X3RvX3VudXNlYCBpcyBpbnZvbHZlZCBpbiB0aGUgYHN5c19zd2Fwb2ZmYCAob3IgYGtzeXNfc3dhcG9mZmApIHN5c3RlbSBjYWxsIHBhdGguIEkgc2hvdWxkIHByb2JhYmx5IHF1aWNrbHkgdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbiBiZWZvcmUgcHJvY2VlZGluZyB3aXRoIG1vcmUgZGV0YWlsZWQgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5MjksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDcsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjozODozNS4xNDMyNzIzNDRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njg4OTY3NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidHJ5X3RvX3VudXNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3N3YXBmaWxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc3dhcGZpbGUuYz0xMzE0PXN0YXRpYyB2b2lkIHN3YXBfcmFuZ2VfZnJlZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LFxcbi0tXFxubW0vc3dhcGZpbGUuYy0xMzM2LVxcdC8qXFxubW0vc3dhcGZpbGUuYzoxMzM3OlxcdCAqIE1ha2Ugc3VyZSB0aGF0IHRyeV90b191bnVzZSgpIG9ic2VydmVzIHNpLVxcdTAwM2VpbnVzZV9wYWdlcyByZWFjaGluZyAwXFxubW0vc3dhcGZpbGUuYy0xMzM4LVxcdCAqIG9ubHkgYWZ0ZXIgdGhlIGFib3ZlIGNsZWFudXBzIGFyZSBkb25lLlxcbi0tXFxubW0vc3dhcGZpbGUuYz0yNDcxPXN0YXRpYyBpbnQgdW51c2VfcHRlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0yNDgyLVxcdCAqIElmIHRoZSBmb2xpbyBpcyByZW1vdmVkIGZyb20gc3dhcCBjYWNoZSBieSBvdGhlcnMsIGNvbnRpbnVlIHRvXFxubW0vc3dhcGZpbGUuYzoyNDgzOlxcdCAqIHVudXNlIG90aGVyIFBURXMuIHRyeV90b191bnVzZSBtYXkgdHJ5IGFnYWluIGlmIHdlIG1pc3NlZCB0aGlzIG9uZS5cXG5tbS9zd2FwZmlsZS5jLTI0ODQtXFx0ICovXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTI3NjE9c3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbi0tXFxubW0vc3dhcGZpbGUuYy0yNzgzLVxcdFxcdCAqIEEgc2xvdCBpcyB1bmNvdW50ZWQgb25seSBhZnRlciBpdHMgZm9saW8gbGVmdCB0aGUgc3dhcFxcbm1tL3N3YXBmaWxlLmM6Mjc4NDpcXHRcXHQgKiBjYWNoZSwgc28gdGhlcmUgaXMgbm90aGluZyBoZXJlIGZvciB0cnlfdG9fdW51c2UoKSB0byBhY3Qgb24uXFxubW0vc3dhcGZpbGUuYy0yNzg1LVxcdFxcdCAqIENvdW50IG9ubHkgZHJvcHMgaGVyZSwgc28gYSBSRUFEX09OQ0UoKSB3aXRob3V0IGNpLVxcdTAwM2Vsb2NrIGlzXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTI4MDQtXFxubW0vc3dhcGZpbGUuYzoyODA1OnN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxcbm1tL3N3YXBmaWxlLmMtMjgwNi17XFxuLS1cXG5tbS9zd2FwZmlsZS5jLTI4OTktXFx0LypcXG5tbS9zd2FwZmlsZS5jOjI5MDA6XFx0ICogTWFrZSBzdXJlIHRoYXQgZnVydGhlciBjbGVhbnVwcyBhZnRlciB0cnlfdG9fdW51c2UoKSByZXR1cm5zIGhhcHBlblxcbm1tL3N3YXBmaWxlLmMtMjkwMS1cXHQgKiBhZnRlciBzd2FwX3JhbmdlX2ZyZWUoKSByZWR1Y2VzIHNpLVxcdTAwM2VpbnVzZV9wYWdlcyB0byAwLlxcbi0tXFxubW0vc3dhcGZpbGUuYy0yOTA3LS8qXFxubW0vc3dhcGZpbGUuYzoyOTA4OiAqIEFmdGVyIGEgc3VjY2Vzc2Z1bCB0cnlfdG9fdW51c2UsIGlmIG5vIHN3YXAgaXMgbm93IGluIHVzZSwgd2Uga25vd1xcbm1tL3N3YXBmaWxlLmMtMjkwOS0gKiB3ZSBjYW4gZW1wdHkgdGhlIG1tbGlzdC4gIHN3YXBfbG9jayBtdXN0IGJlIGhlbGQgb24gZW50cnkgYW5kIGV4aXQuXFxuLS1cXG5tbS9zd2FwZmlsZS5jPTMxNTE9U1lTQ0FMTF9ERUZJTkUxKHN3YXBvZmYsIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlKVxcbi0tXFxubW0vc3dhcGZpbGUuYy0zMjExLVxcdHNldF9jdXJyZW50X29vbV9vcmlnaW4oKTtcXG5tbS9zd2FwZmlsZS5jOjMyMTI6XFx0ZXJyID0gdHJ5X3RvX3VudXNlKHAtXFx1MDAzZXR5cGUpO1xcbm1tL3N3YXBmaWxlLmMtMzIxMy1cXHRjbGVhcl9jdXJyZW50X29vbV9vcmlnaW4oKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6Mzg6MzUuMjEyMTc0MzgyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTEzNjA5NDAwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN3YXBvZmYgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGNsZWFybHkgdG91Y2hpbmcgdGhlIGNvZGUgdGhhdCBnb3Zlcm5zIGhvdyBzd2FwIHNwYWNlIGlzIGRlYWN0aXZhdGVkLiBTcGVjaWZpY2FsbHksIGl0IHNlZW1zIHRvIGJlIGNoYW5naW5nIGBmaW5kX25leHRfdG9fdW51c2VgLCB3aGljaCBpdHNlbGYgZmVlZHMgaW50byBgdHJ5X3RvX3VudXNlYCwgYW5kIHVsdGltYXRlbHksIGBzeXNfc3dhcG9mZmAuIEZyb20gYSBmdW5jdGlvbmFsIHN0YW5kcG9pbnQsIHRoaXMgaXMgZGVmaW5pdGVseSBhIHJlYWNoYWJsZSBjb2RlIHBhdGgsIHNvIHRoYXQncyBnb29kLiBNeSBpbnN0aW5jdCBpcyB0aGF0IHRoaXMgYXJlYSB3YXJyYW50cyBhIGZ1enppbmcgY2FtcGFpZ24gZm9jdXNlZCBvbiB0aGUgYHN5c19zd2Fwb2ZmYCBhbmQgYHRyeV90b191bnVzZWAgZnVuY3Rpb25zLlxuXG5XYWl0IGEgc2Vjb25kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGNvcnJlY3RseS4gU2luY2UgYGZpbmRfbmV4dF90b191bnVzZWAgYW5kIGB0cnlfdG9fdW51c2VgIGFyZSBib3RoIHN0YXRpYywgdGhlIGFjdHVhbCBzeXNjYWxsIGludGVyZmFjZSBoYXMgdG8gYmUgYF9feDY0X3N5c19zd2Fwb2ZmYCBvciBgc3lzX3N3YXBvZmZgLiBUaGF0J3MgdGhlIGVudHJ5IHBvaW50IHRvIGludmVzdGlnYXRlIGZ1cnRoZXIsIGJ1dCBJIG5lZWQgdG8gZW5zdXJlIEknbSBnZXR0aW5nIHRoZSByaWdodCBlbnRyeXBvaW50LlxuXG5KdXN0IHRvIGJlIHRob3JvdWdoLCBJIHNob3VsZCBjaGVjayBgbW0vc3dhcGZpbGUuY2AgZm9yIGJvdGggYHRyeV90b191bnVzZWAgYW5kIGBmaW5kX25leHRfdG9fdW51c2VgIHRvIGJlIHN1cmUuIFRoYXQncyB0aGUgbGlrZWx5IGxvY2F0aW9uIGZvciB0aGVzZSBmdW5jdGlvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwNjIsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6Mzg6NDAuMzQ4MjcyMjY1WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3OTA2MzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZpbmRfbmV4dF90b191bnVzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9MjczMz1zdGF0aWMgaW50IHVudXNlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNpZ25lZCBpbnQgdHlwZSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjc2MC0gKi9cXG5tbS9zd2FwZmlsZS5jOjI3NjE6c3RhdGljIHVuc2lnbmVkIGludCBmaW5kX25leHRfdG9fdW51c2Uoc3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpLFxcbm1tL3N3YXBmaWxlLmMtMjc2Mi1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcHJldilcXG4tLVxcbm1tL3N3YXBmaWxlLmM9MjgwNT1zdGF0aWMgaW50IHRyeV90b191bnVzZSh1bnNpZ25lZCBpbnQgdHlwZSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMjg1OC1cXHQgICAgICAgIXNpZ25hbF9wZW5kaW5nKGN1cnJlbnQpIFxcdTAwMjZcXHUwMDI2XFxubW0vc3dhcGZpbGUuYzoyODU5OlxcdCAgICAgICAoaSA9IGZpbmRfbmV4dF90b191bnVzZShzaSwgaSkpICE9IDApIHtcXG5tbS9zd2FwZmlsZS5jLTI4NjAtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjM4OjQwLjQxNjE5MzM1M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNDI3NDg0MDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgU3dhcCBEZWFjdGl2YXRpb24gRW50cnkgUG9pbnQqKlxuXG5SaWdodCwgc28gYHN5c19zd2Fwb2ZmYCBpcyB0aGUga2V5IGZ1bmN0aW9uIHdlJ3JlIGxvb2tpbmcgYXQgaGVyZSwgdGhlIG1haW4gZW50cnkgcG9pbnQgZm9yIHRoZSBlbnRpcmUgc3dhcCBkZWFjdGl2YXRpb24gcHJvY2Vzcy4gTGV0IG1lIHF1aWNrbHkgc2NhbiBmb3IgYW55IHBvdGVudGlhbCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IuIFdlJ3JlIG9idmlvdXNseSBkZWFsaW5nIHdpdGggc3dhcCBpdHNlbGYsIGFuZCB0aGUgYmFzZSBlbmFibGluZyBjb25kaXRpb24gZm9yIGFsbCB0aGlzIGlzLCBhcyBleHBlY3RlZCwgYENPTkZJR19TV0FQYC4gR29vZCwgdGhhdCBtYWtlcyBzZW5zZS4gU28sIHdpdGggYENPTkZJR19TV0FQYCBlbmFibGVkIHdlJ3JlIGF0IGxlYXN0IGluIHRoZSByaWdodCBiYWxscGFyay4gTGV0J3Mgc2VlIHdoYXQgZWxzZSB3ZSBjYW4gdW5jb3Zlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NDc2MSwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjM4OjQzLjY1ODk0NDM1M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTU4NjUwMDMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL21pcHMvS2NvbmZpZz0xMjYzPWNvbmZpZyBNSVBTX1NQUkFNXFxuLS1cXG5hcmNoL21pcHMvS2NvbmZpZy0xMjY1LVxcbmFyY2gvbWlwcy9LY29uZmlnOjEyNjY6Y29uZmlnIFNXQVBfSU9fU1BBQ0VcXG5hcmNoL21pcHMvS2NvbmZpZy0xMjY3LVxcdGJvb2xcXG4tLVxcbmFyY2gvc2gvS2NvbmZpZz0xMjY9Y29uZmlnIElPX1RSQVBQRURcXG4tLVxcbmFyY2gvc2gvS2NvbmZpZy0xMjgtXFxuYXJjaC9zaC9LY29uZmlnOjEyOTpjb25maWcgU1dBUF9JT19TUEFDRVxcbmFyY2gvc2gvS2NvbmZpZy0xMzAtXFx0Ym9vbFxcbi0tXFxubW0vS2NvbmZpZz05PWNvbmZpZyBBUkNIX05PX1NXQVBcXG4tLVxcbm1tL0tjb25maWctMTEtXFxubW0vS2NvbmZpZzoxMjptZW51Y29uZmlnIFNXQVBcXG5tbS9LY29uZmlnLTEzLVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIHBhZ2luZyBvZiBhbm9ueW1vdXMgbWVtb3J5IChzd2FwKVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6Mzg6NDYuMjE3NjAwMzA2WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6ODA2NDM4MTMwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN3YXAgQ29uZmlndXJhdGlvbiBhbmQgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyBgQ09ORklHX1NXQVBgLiBJcyB0aGVyZSAqYW55dGhpbmcqIGVsc2UgY29uZmlndXJhdGlvbi13aXNlIHRoYXQncyByZWxldmFudCBoZXJlPyBJIG5lZWQgdG8gYmUgdGhvcm91Z2guIFRoZSBjaGFuZ2VzIGFyZSBpbiBgaW5jbHVkZS9saW51eC9zd2FwLmhgIGFuZCBgbW0vc3dhcGZpbGUuY2AsIHdoaWNoIG1ha2VzIHNlbnNlLiBKdXN0IHRvIGJlIHN1cmUsIEkgc2hvdWxkIHZlcmlmeSB0aGF0IGBTV0FQYCBpc24ndCBsaXN0ZWQgYW5kIG1ha2Ugc3VyZSBgQ09ORklHX1NXQVBgIGlzIGRlZmluZWQgaW4gdGhlIGNvbmZpZ3VyYXRpb24uIEFsdGhvdWdoLCBgU1dBUGAgaXMgYWxtb3N0IGFsd2F5cyBlbmFibGVkIGJ5IGRlZmF1bHQsIGl0IGlzIGFsd2F5cyB3aXNlIHRvIGV4cGxpY2l0bHkgZGVjbGFyZSBgQ09ORklHX1NXQVBgLlxuXG5OZXh0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnRzLiBMZXQgbWUgc2VlLi4uIEkgc2VlIGBmaW5kX25leHRfdG9fdW51c2VgIGFuZCBgdHJ5X3RvX3VudXNlYCB3aGljaCBhcmUgc3RhdGljIGZ1bmN0aW9uczsgdGhvc2Ugd29uJ3QgYmUgZXhwb3NlZCBkaXJlY3RseS4gVGhlIGtleSBoZXJlIHNlZW1zIHRvIGJlIGBzeXNfc3dhcG9mZmAsIHdoaWNoICppcyogYSBzeXNjYWxsLiBUaGF0J3MgdGhlIG9ubHkgZGlyZWN0IGVudHJ5IHBvaW50IEkgc2VlLCBzbyBpdCBtYWtlcyBzZW5zZSB0byBjb25maXJtIHRoYXQuXG5cbkFscmlnaHQsIGRvdWJsZS1jaGVja2luZywgeWVzLCBgc3lzX3N3YXBvZmZgIGlzIHRoZSBzeXN0ZW0gY2FsbC4gTm93LCBJIG5lZWQgdG8gY2FyZWZ1bGx5IGV4YW1pbmUgYG1tL3N3YXBmaWxlLmNgIHRvIHNlZSBwcmVjaXNlbHkgaG93IGBzeXNfc3dhcG9mZmAgaXMgaW1wbGVtZW50ZWQgYW5kIHdoYXQgdGhlIGRlcGVuZGVuY2llcyBhcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxNzIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6Mzg6NTQuMjgxOTg0OTlaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyNjg0NjU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIlNZU0NBTExfREVGSU5FMVxcXFwoc3dhcG9mZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9MzEzMz1zdGF0aWMgdm9pZCBmbHVzaF9wZXJjcHVfc3dhcF9jbHVzdGVyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSlcXG4tLVxcbm1tL3N3YXBmaWxlLmMtMzE1MC1cXG5tbS9zd2FwZmlsZS5jOjMxNTE6U1lTQ0FMTF9ERUZJTkUxKHN3YXBvZmYsIGNvbnN0IGNoYXIgX191c2VyICosIHNwZWNpYWxmaWxlKVxcbm1tL3N3YXBmaWxlLmMtMzE1Mi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjM4OjU0LjM1NDY3Njg0N1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NTM5Nzc2MjkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsJ3MgYHN5c19zd2Fwb2ZmYCBJbXBsZW1lbnRhdGlvbioqXG5cbk9rYXksIEknbSBnb2luZyB0byBzdGFydCBieSBmb2N1c2luZyBvbiBgc3lzX3N3YXBvZmZgLiBMZXQncyBzZWUgaG93IHRoYXQncyBpbXBsZW1lbnRlZC4gQWhhLCBpdCBsb29rcyBsaWtlIGl0J3MgZGVmaW5lZCB1c2luZyBgU1lTQ0FMTF9ERUZJTkUxKHN3YXBvZmYsIC4uLilgLiBUaGF0IG1lYW5zIHRoZSByZWFsIGZ1bmN0aW9uIG5hbWUgbWlnaHQgYmUgYF9feDY0X3N5c19zd2Fwb2ZmYCwgYF9fc2Vfc3lzX3N3YXBvZmZgLCBvciBqdXN0IHBsYWluIGBzeXNfc3dhcG9mZmAuIEluIG1vc3Qgc3l6a2FsbGVyIGNhc2VzLCBzcGVjaWZ5aW5nIGBzeXNfc3dhcG9mZmAgb3IgYF9feDY0X3N5c19zd2Fwb2ZmYCBpcyBzdWZmaWNpZW50LiBTbywgYHN5c19zd2Fwb2ZmYCBzaG91bGQgYmUganVzdCBmaW5lIGhlcmUuXG5cbk5vdywgYSBxdWljayBjaGVjayBvZiB0aGUgc291cmNlIGNvZGUgcmV2ZWFscyB0aGF0IGB0cnlfdG9fdW51c2VgIGlzIGRlY2xhcmVkIGFzIGBzdGF0aWNgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gV2FpdCBhIG1pbnV0ZSwgaXQncyBub3QgaW5saW5lZCwgYW5kIGl0J3MgYSByZWxhdGl2ZWx5IGxhcmdlIGZ1bmN0aW9uLiBJIHdhbnQgdG8gY29uZmlybSB3aGV0aGVyIG9yIG5vdCBpdCBoYXMgYmVlbiBpbmxpbmVkLiBMZXQgbWUgaW52ZXN0aWdhdGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3OTAsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6Mzk6MDAuODk0NDU1NjU4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NzU5NDAzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGF0aWMgaW50IHRyeV90b191bnVzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zd2FwZmlsZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3N3YXBmaWxlLmM9Mjc2MT1zdGF0aWMgdW5zaWduZWQgaW50IGZpbmRfbmV4dF90b191bnVzZShzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksXFxuLS1cXG5tbS9zd2FwZmlsZS5jLTI4MDQtXFxubW0vc3dhcGZpbGUuYzoyODA1OnN0YXRpYyBpbnQgdHJ5X3RvX3VudXNlKHVuc2lnbmVkIGludCB0eXBlKVxcbm1tL3N3YXBmaWxlLmMtMjgwNi17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA1VDE2OjM5OjAwLjk5MjA1NDc1NVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzA1MDQ4ODM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTd2Fwb2ZmIEZ1bmN0aW9uYWxpdHkgZm9yIFN5emthbGxlciBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHRyeV90b191bnVzZWAgZnVuY3Rpb24g4oCTIGl0J3MgcHJldHR5IGhlZnR5LCBhbmQgbm90IG1hcmtlZCBpbmxpbmUsIHdoaWNoIGlzIGltbWVkaWF0ZWx5IGEgcmVkIGZsYWcuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBtb3N0IGVmZmVjdGl2ZSB3YXkgdG8gaW50ZWdyYXRlIHRoaXMgZnVuY3Rpb25hbGl0eSB3aXRoIFN5emthbGxlciBmb3IgZnV6emluZy4gSSB3YXMgaW5pdGlhbGx5IGxlYW5pbmcgdG93YXJkIGluY2x1ZGluZyBib3RoIGB0cnlfdG9fdW51c2VgIGFuZCBgc3lzX3N3YXBvZmZgIGluIG15IGFuYWx5c2lzLlxuXG5UaGVuIEkgcmVtZW1iZXJlZCBTeXprYWxsZXIncyBwcmVmZXJlbmNlIGZvciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludHMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucy4gVGhpcyBjaGFuZ2VzIHRoaW5ncy4gYHN5c19zd2Fwb2ZmYCBpcyBsaWtlbHkgYSBiZXR0ZXIgdGFyZ2V0LiBJdCdzIGEgc3lzY2FsbCwgYW5kIFN5emthbGxlciBpcyBkZWZpbml0ZWx5IGZhbWlsaWFyIHdpdGggaXQgYXMgYHN5c19zd2Fwb2ZmYC5cblxuSSdtIGRvdWJsZS1jaGVja2luZy4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZT8gTm8sIGBzeXNfc3dhcG9mZmAgbG9va3MgbGlrZSB0aGUgb25seSBmdW5jdGlvbiB0aGF0IGlzIGEgc3lzdGVtIGNhbGwuXG5cbk5vdywgSSdsbCBxdWlja2x5IGNoZWNrIGlmIGBDT05GSUdfU1dBUGAgaXMgdGhlIG9ubHkgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb24uIE5lZWQgdG8gbWFrZSBzdXJlIHRoZSBmdXp6IHRhcmdldCBpcyBhcyBzdHJhaWdodGZvcndhcmQgYXMgcG9zc2libGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYyOTUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6Mzk6MDYuMjk3MTA2NDEzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTI5NzM5NDcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwib2JqLVxcXFwkXFxcXChDT05GSUdfU1dBUFxcXFwpXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTc2PWVuZGlmXFxubW0vTWFrZWZpbGUtNzctXFxubW0vTWFrZWZpbGU6Nzg6b2JqLSQoQ09ORklHX1NXQVApXFx0Kz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXFxubW0vTWFrZWZpbGUtNzktb2JqLSQoQ09ORklHX1pTV0FQKVxcdCs9IHpzd2FwLm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMDVUMTY6Mzk6MDYuNDEwMDg0NzlaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQ5ODU5NzAzMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFN3YXBvZmYgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBgQ09ORklHX1NXQVBgIGlzIGRlZmluaXRlbHkgbmVlZGVkIGZvciB0aGlzLiBMZXQncyByZXZpc2l0IHRoaXMgcGF0Y2guIEl0IGxvb2tzIGxpa2UgdGhlIG1haW4gY2hhbmdlIGlzIGluIGBmaW5kX25leHRfdG9fdW51c2VgLCB3aGVyZSBpdCdzIGJlaW5nIG1vZGlmaWVkIHRvIHNraXAgZW1wdHkgY2x1c3RlcnMuIFRoaXMgaXMgYSBwZXJmb3JtYW5jZSB0d2VhaywgYnV0IGl0IGRpcmVjdGx5IGltcGFjdHMgdGhlIGNvcmUgbG9naWMgb2YgaG93IHN3YXAgZW50cmllcyBhcmUgZm91bmQgZHVyaW5nIGBzd2Fwb2ZmYC4gVGhpcyBtZWFucyBpdCAqY291bGQqIGludHJvZHVjZSBzdWJ0bGUsIHVuZXhwZWN0ZWQgYmVoYXZpb3IgZHVyaW5nIHN3YXAgZGVhbGxvY2F0aW9uLiBJdCdzIGFsbW9zdCBjZXJ0YWlubHkgZnVuY3Rpb25hbGx5IGNvcnJlY3QsIGFuZCB0aGVyZWZvcmUgSSBuZWVkIHRvIGZ1enogdGhpcyB0aG9yb3VnaGx5LlxuXG5NeSByZWFzb25pbmc/IFRoZSBwYXRjaCBpcyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyB3ZSBmaW5kIHN3YXAgZW50cmllcyBkdXJpbmcgYHN3YXBvZmZgLiBUaGlzIGlzIGV4cG9zZWQgdGhyb3VnaCB0aGUgYHN3YXBvZmZgIHN5c3RlbSBjYWxsLiBUaGUgZm9jdXMgc3ltYm9scyBhcmUgY2xlYXJseSBgc3lzX3N3YXBvZmZgLiBXZSBuZWVkIGBDT05GSUdfU1dBUGAgZW5hYmxlZC5cblxuTm93LCBhIHF1aWNrIGNoZWNrLiBJcyBgc3lzX3N3YXBvZmZgIHRoZSBjb3JyZWN0IHN5bWJvbCBuYW1lPyBJJ20gcHJldHR5IHN1cmUgaXQgaXMsIGJ1dCBsZXQncyBjb25maXJtLiBZZXMsIGBTWVNDQUxMX0RFRklORTEoc3dhcG9mZiwgLi4uKWAgZXhwYW5kcyB0byBgc3lzX3N3YXBvZmZgLCBhbmQgdGhlcmUgYXJlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyB3cmFwcGVycy4gU3l6a2FsbGVyIGNhbiBoYW5kbGUgZWl0aGVyIGBzeXNfc3dhcG9mZmAgb3IgYF9feDY0X3N5c19zd2Fwb2ZmYC4gYHN5c19zd2Fwb2ZmYCBpcyB0aGUgY2Fub25pY2FsIG5hbWUsIGFuZCB0aGVyZWZvcmUgSSB3aWxsIHByb3ZpZGUgdGhhdC5cblxuQWgsIGFuZCBJIHJlbWVtYmVyIGZyb20gdGhlIHByb21wdDogXCJQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcIi4gYHN5c19zd2Fwb2ZmYCBmaXRzIHRoYXQgZGVzY3JpcHRpb24gcGVyZmVjdGx5LiBHcmVhdC4gSSB0aGluayBJJ20gcmVhZHkgdG8gd3JpdGUgdGhlIHJlc3BvbnNlIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njc3MCwiT3V0cHV0VG9rZW5zIjo5MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wNVQxNjozOToxMi45MDg2ODM2NDJaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDM0MDQ4MDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzeXNfc3dhcG9mZlwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIGxvZ2ljIGluIGBmaW5kX25leHRfdG9fdW51c2VgIHVzZWQgZHVyaW5nIGBzd2Fwb2ZmYCB0byBza2lwIGVtcHR5IHN3YXAgY2x1c3RlcnMuIFRoaXMgYWx0ZXJzIHRoZSBleGVjdXRpb24gZmxvdyBvZiBzd2FwIGRlYWxsb2NhdGlvbiBhbmQgaXMgcmVhY2hhYmxlIHZpYSB0aGUgYHN3YXBvZmZgIHN5c2NhbGwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInN5c19zd2Fwb2ZmXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbG9naWMgaW4gYGZpbmRfbmV4dF90b191bnVzZWAgdXNlZCBkdXJpbmcgYHN3YXBvZmZgIHRvIHNraXAgZW1wdHkgc3dhcCBjbHVzdGVycy4gVGhpcyBhbHRlcnMgdGhlIGV4ZWN1dGlvbiBmbG93IG9mIHN3YXAgZGVhbGxvY2F0aW9uIGFuZCBpcyByZWFjaGFibGUgdmlhIHRoZSBgc3dhcG9mZmAgc3lzY2FsbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowhhldg[1] Phase: Succeeded StartedAt: 2026-08-05 16:39:24 +0000 UTC FinishedAt: 2026-08-05 16:39:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-05 16:39:24 +0000 UTC FinishedAt: 2026-08-05 16:39:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[2] Phase: Succeeded StartedAt: 2026-08-05 16:39:24 +0000 UTC FinishedAt: 2026-08-05 20:24:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-05 16:39:25 +0000 UTC FinishedAt: 2026-08-05 20:24:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-05 16:39:25 +0000 UTC FinishedAt: 2026-08-05 16:39:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-05 16:39:25 +0000 UTC FinishedAt: 2026-08-05 16:39:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhhldg/series-workflowhhldg-convert-artifact-253030685/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-05 16:39:35 +0000 UTC FinishedAt: 2026-08-05 17:00:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-05 16:39:35 +0000 UTC FinishedAt: 2026-08-05 17:00:05 +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:*87e6455f-f718-42bb-b91f-ecc6b2c93609,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-workflowhhldg/series-workflowhhldg-convert-artifact-253030685/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": "d59b0c05-1971-44dd-82f2-7efa5cf25c48", "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-workflowhhldg/series-workflowhhldg-build-action-264856147/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-05 16:39:35 +0000 UTC FinishedAt: 2026-08-05 16:59:55 +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:*87e6455f-f718-42bb-b91f-ecc6b2c93609,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-workflowhhldg/series-workflowhhldg-convert-artifact-253030685/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": "d59b0c05-1971-44dd-82f2-7efa5cf25c48", "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-workflowhhldg/series-workflowhhldg-build-action-264856147/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-05 17:00:05 +0000 UTC FinishedAt: 2026-08-05 17:00:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-05 17:00:05 +0000 UTC FinishedAt: 2026-08-05 17:00:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-05 17:00:05 +0000 UTC FinishedAt: 2026-08-05 17:00:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-05 17:00:05 +0000 UTC FinishedAt: 2026-08-05 17:00:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowhhldg/series-workflowhhldg-convert-artifact-4284956408/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-05 17:00:15 +0000 UTC FinishedAt: 2026-08-05 17:02:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-05 17:00:15 +0000 UTC FinishedAt: 2026-08-05 17:02:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d59b0c05-1971-44dd-82f2-7efa5cf25c48,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-workflowhhldg/series-workflowhhldg-build-action-264856147/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-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-05 17:02:15 +0000 UTC FinishedAt: 2026-08-05 17:02:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-05 17:02:15 +0000 UTC FinishedAt: 2026-08-05 17:02:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-05 17:02:15 +0000 UTC FinishedAt: 2026-08-05 17:18:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-05 17:02:15 +0000 UTC FinishedAt: 2026-08-05 17:18:34 +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:*87e6455f-f718-42bb-b91f-ecc6b2c93609,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-workflowhhldg/series-workflowhhldg-convert-artifact-4284956408/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": "8d461385-5382-47f4-8da0-b330905496f0", "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-workflowhhldg/series-workflowhhldg-build-action-2299585508/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-05 17:02:15 +0000 UTC FinishedAt: 2026-08-05 17:18:24 +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:*87e6455f-f718-42bb-b91f-ecc6b2c93609,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-workflowhhldg/series-workflowhhldg-convert-artifact-4284956408/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": "8d461385-5382-47f4-8da0-b330905496f0", "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-workflowhhldg/series-workflowhhldg-build-action-2299585508/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-05 17:18:34 +0000 UTC FinishedAt: 2026-08-05 17:18:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-05 17:18:34 +0000 UTC FinishedAt: 2026-08-05 17:18:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-05 17:18:34 +0000 UTC FinishedAt: 2026-08-05 17:20:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-05 17:18:34 +0000 UTC FinishedAt: 2026-08-05 17:20:41 +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:*8d461385-5382-47f4-8da0-b330905496f0,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-workflowhhldg/series-workflowhhldg-build-action-2299585508/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-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-05 17:20:51 +0000 UTC FinishedAt: 2026-08-05 20:24:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-05 17:20:51 +0000 UTC FinishedAt: 2026-08-05 20:24:20 +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":["sys_swapoff"],"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:*d59b0c05-1971-44dd-82f2-7efa5cf25c48,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8d461385-5382-47f4-8da0-b330905496f0,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-workflowhhldg/series-workflowhhldg-build-action-264856147/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-workflowhhldg/series-workflowhhldg-build-action-2299585508/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-05 17:20:51 +0000 UTC FinishedAt: 2026-08-05 17:21:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-05 17:20:51 +0000 UTC FinishedAt: 2026-08-05 17:20:56 +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":["sys_swapoff"],"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-workflowhhldg/series-workflowhhldg-convert-artifact-3161579857/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-05 17:20:51 +0000 UTC FinishedAt: 2026-08-05 17:20:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-05 17:20:51 +0000 UTC FinishedAt: 2026-08-05 17:20:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-05 17:20:52 +0000 UTC FinishedAt: 2026-08-05 17:20:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-05 17:21:02 +0000 UTC FinishedAt: 2026-08-05 20:24:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowhhldg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["sys_swapoff"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"0b53bff4fa05ff0d3ffbd3d3bb10fae69dfab498","config_name":"upstream-apparmor-kasan.config","enable_configs":["SWAP"],"series_id":"d07d2ce1-3812-4686-9088-a07b564ad2b8","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-05 17:21:02 +0000 UTC FinishedAt: 2026-08-05 20:24:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d59b0c05-1971-44dd-82f2-7efa5cf25c48,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8d461385-5382-47f4-8da0-b330905496f0,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-workflowhhldg/series-workflowhhldg-build-action-264856147/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-workflowhhldg/series-workflowhhldg-build-action-2299585508/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-workflowhhldg/series-workflowhhldg-convert-artifact-3161579857/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,}