Name: series-workflowgqgxw Phase: Succeeded StartedAt: 2026-07-18 09:53:19 +0000 UTC FinishedAt: 2026-07-18 14:21:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[0] Phase: Succeeded StartedAt: 2026-07-18 09:53:19 +0000 UTC FinishedAt: 2026-07-18 10:15:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[0].run-triage Phase: Succeeded StartedAt: 2026-07-18 09:53:19 +0000 UTC FinishedAt: 2026-07-18 10:15:39 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "94515f3a7d4256a5062176b7d6ed0471938cd51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "SWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "94515f3a7d4256a5062176b7d6ed0471938cd51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "SWAP" ], "series_id": "ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "zswap_writeback_dropbehind_folio", "zswap_dropbehind_workfn", "zswap_writeback_free_folio", "zswap_writeback_entry" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDEwOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyYjMzQ7LAogICAgJiMzNDt6c3dhcF9kcm9wYmVoaW5kX3dvcmtmbiYjMzQ7LAogICAgJiMzNDt6c3dhcF93cml0ZWJhY2tfZnJlZV9mb2xpbyYjMzQ7LAogICAgJiMzNDt6c3dhcF93cml0ZWJhY2tfZW50cnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtZWNoYW5pc20gZm9yIGhhbmRsaW5nIHpzd2FwIHdyaXRlYmFjayBkcm9wYmVoaW5kIGZvbGlvcywgaW5jbHVkaW5nIGEgbmV3IHdvcmtxdWV1ZSBhbmQgb2ZmLUxSVSBmb2xpbyBtYW5hZ2VtZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3dhcCBzdWJzeXN0ZW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDEwOjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDZkZjUyNjJkNWNhODFmZTlkMzY1NGM5YmVlYzAzNzIxNjBlYmQ4MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDE4IDEwOjE1OjA1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvenN3YXAuaCBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxuaW5kZXggMzBjMTkzYTEyMDdlMTYuLjIzZGNkZTI3NDk2NDdhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC96c3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbkBAIC0zNSw2ICYjNDM7MzUsNyBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG4gdm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpO1xuIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcbiYjNDM7dm9pZCB6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiAjZWxzZVxuIFxuIHN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge307XG5AQCAtNTgsNiAmIzQzOzU5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHpzd2FwX3N3YXBvZmYoaW50IHR5cGUpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIHpzd2FwX21lbWNnX29mZmxpbmVfY2xlYW51cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYykge31cbiBzdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pIHt9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKSB7fVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggNThlYjlkMjQwNjQzNDguLjk1ZDY0MDk3ODBmNGQ3IDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmNcbkBAIC0yMSw2ICYjNDM7MjEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC96c3dhcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGVhZm9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY2FsbHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYW4uaFx1MDAzZVxuQEAgLTE2ODAsNiAmIzQzOzE2ODEsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQpO1xuICAqL1xuIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiYjNDM7XHRib29sIHN3YXBfZHJvcGJlaGluZDtcbiYjNDM7XG4gXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pO1xuIFxuIFx0LypcbkBAIC0xNjg5LDcgJiM0MzsxNjkyLDI0IEBAIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0ICogcmV1c2VkIGJlZm9yZSB0aGUgZm9saW9fd2FrZV9iaXQoKS5cbiBcdCAqL1xuIFx0Zm9saW9fZ2V0KGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiB6c3dhcCB3cml0ZWJhY2sgZm9saW9zIGFyZSBvZmYtTFJVLCBzbyB3ZSBtdXN0IHByZXZlbnQgYSByYWNpbmdcbiYjNDM7XHQgKiBzd2FwaW4gZnJvbSByZW1vdmluZyB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQga2VlcGluZyBpdFxuJiM0MztcdCAqIG9mZi1MUlU6IHRoZSB3cml0ZWJhY2sgZmxhZyBhbGxvd3MgdGhhdC4gQWZ0ZXJ3YXJkcyBhIHN3YXBpbiBtYXkgd2luXG4mIzQzO1x0ICogdGhlIHJhY2UsIGJ1dCB0aGUgZm9saW8gaXMgYWxyZWFkeSBxdWV1ZWQgYW5kIHRoZSB3b3JrZXIgcHV0cyBpdCBiYWNrXG4mIzQzO1x0ICogb24gdGhlIExSVSBpbiB0aGF0IGNhc2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3dhcF9kcm9wYmVoaW5kID0gZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgIGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbyk7XG4mIzQzO1xuIFx0Zm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN3YXBfZHJvcGJlaGluZCkge1xuJiM0MztcdFx0enN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oZm9saW8pO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRmb2xpb19lbmRfZHJvcGJlaGluZChmb2xpbyk7XG4gXHRmb2xpb19wdXQoZm9saW8pO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDc3ZDJkMTRlZGE0MjFlLi5jNjE3ZTVhMDI1N2Y0NiAxMDA2NDRcbi0tLSBhL21tL3N3YXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcC5oXG5AQCAtMzA2LDcgJiM0MzszMDYsOCBAQCB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpO1xuIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi1cdFx0XHRcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpO1xuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsXG4mIzQzO1x0XHRcdFx0ICAgICBib29sIHNraXBfbHJ1KTtcbiAvKiBCZWxvdyBoZWxwZXJzIHJlcXVpcmUgdGhlIGNhbGxlciB0byBsb2NrIGFuZCBwYXNzIGluIHRoZSBzd2FwIGNsdXN0ZXIuICovXG4gdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDljM2E1Y2Y5OTc3ODYwLi4wNDhlZmM3Y2E2MTI0MCAxMDA2NDRcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jXG5AQCAtNDAzLDcgJiM0Mzs0MDMsOCBAQCB2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRcdFx0XHRcdHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi1cdFx0XHRcdFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCxcbiYjNDM7XHRcdFx0XHRcdGJvb2wgc2tpcF9scnUpXG4ge1xuIFx0aW50IGVycjtcbiBcdHN3cF9lbnRyeV90IGVudHJ5O1xuQEAgLTQ4NCw3ICYjNDM7NDg1LDggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpO1xuIFxuIFx0LyogQ2FsbGVyIHdpbGwgaW5pdGlhdGUgcmVhZCBpbnRvIGxvY2tlZCBuZXdfZm9saW8gKi9cbi1cdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuJiM0MztcdGlmICghc2tpcF9scnUpXG4mIzQzO1x0XHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHJldHVybiBmb2xpbztcbiB9XG4gXG5AQCAtNTA3LDcgJiM0Mzs1MDksOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKi9cbiBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuIFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsXG4mIzQzO1x0XHRcdFx0ICAgICBib29sIHNraXBfbHJ1KVxuIHtcbiBcdGludCBvcmRlciwgZXJyO1xuIFx0c3RydWN0IGZvbGlvICpyZXQ7XG5AQCAtNTIyLDcgJiM0Mzs1MjUsNyBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuIFxuIFx0ZG8ge1xuIFx0XHRyZXQgPSBfX3N3YXBfY2FjaGVfYWxsb2MoY2ksIHRhcmdfZW50cnksIGdmcCwgb3JkZXIsXG4tXHRcdFx0XHRcdCB2bWYsIG1wb2wsIGlseCk7XG4mIzQzO1x0XHRcdFx0XHQgdm1mLCBtcG9sLCBpbHgsIHNraXBfbHJ1KTtcbiBcdFx0aWYgKCFJU19FUlIocmV0KSlcbiBcdFx0XHRicmVhaztcbiBcdFx0ZXJyID0gUFRSX0VSUihyZXQpO1xuQEAgLTY0Myw3ICYjNDM7NjQ2LDggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xuJiM0MztcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGZhbHNlKTtcbiBcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuIFxuIFx0aWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSlcbkBAIC02ODMsNyAmIzQzOzY4Nyw4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4mIzQzO1x0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBmYWxzZSk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCA3NjFjZDY5OWUwYTNlNi4uZDE4NWRhODViYjY4ZWYgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jXG5AQCAtMzQsNiAmIzQzOzM0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93cml0ZWJhY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0X2xydS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvenNtYWxsb2MuaFx1MDAzZVxuIFxuQEAgLTk3Miw2ICYjNDM7OTczLDU3IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiB3cml0ZWJhY2sgY29kZVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4mIzQzO3N0YXRpYyB2b2lkIHpzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRmb2xpb19sb2NrKGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQgb2ZmIHRoZSBMUlUgYW5kIG5vdGhpbmcgcmUtYWRkcyBpdCBoZXJlLiAqL1xuJiM0MztcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBHYXRlIHJlbW92ZV9tYXBwaW5nKCkgb24gZm9saW9fdGVzdF9zd2FwY2FjaGUoKTogYSByYWNpbmcgc3dhcGluIG1heVxuJiM0MztcdCAqIGhhdmUgZnJlZWQgdGhlIHN3YXAgc2xvdCAoZm9saW9fZnJlZV9zd2FwKCkpIGFuZCBkcm9wcGVkIHRoZSBmb2xpbyBmcm9tXG4mIzQzO1x0ICogdGhlIGNhY2hlLCBhbmQgcmVtb3ZlX21hcHBpbmcoKSBtdXN0IG5vdCBydW4gb24gYSBub24tc3dhcGNhY2hlIGZvbGlvXG4mIzQzO1x0ICogKGl0IHdvdWxkIHRyaXAgX19yZW1vdmVfbWFwcGluZygpJiMzOTtzIG1hcHBpbmcgPT0gZm9saW9fbWFwcGluZygpIGNoZWNrKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICByZW1vdmVfbWFwcGluZyhzd2FwX2FkZHJlc3Nfc3BhY2UoZm9saW8tXHUwMDNlc3dhcCksIGZvbGlvKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKiBSYWNlZDogdGhlIGZvbGlvIGlzIG5vdyBvd25lZCBieSB0aGUgc3dhcGluOyBwdXQgaXQgYmFjayBvbiB0aGUgTFJVLiAqL1xuJiM0MztcdGZvbGlvX2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pO1xuJiM0MztcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuJiM0MztvdXQ6XG4mIzQzO1x0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiYjNDM7XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGxsaXN0X2hlYWQsIHpzd2FwX2Ryb3BiZWhpbmRfbGxpc3QpO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgenN3YXBfZHJvcGJlaGluZF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKnBvcywgKm5leHQ7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuJiM0MztcdFx0cG9zID0gbGxpc3RfZGVsX2FsbChwZXJfY3B1X3B0cihcdTAwMjZ6c3dhcF9kcm9wYmVoaW5kX2xsaXN0LCBjcHUpKTtcbiYjNDM7XHRcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCBwb3MpIHtcbiYjNDM7XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGNvbnRhaW5lcl9vZigoc3RydWN0IGxpc3RfaGVhZCAqKXBvcyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgZm9saW8sIGxydSk7XG4mIzQzO1x0XHRcdHpzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvKGZvbGlvKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBERUNMQVJFX1dPUksoenN3YXBfZHJvcGJlaGluZF93b3JrLCB6c3dhcF9kcm9wYmVoaW5kX3dvcmtmbik7XG4mIzQzO1xuJiM0Mzt2b2lkIHpzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LFxuJiM0MztcdFx0ICB0aGlzX2NwdV9wdHIoXHUwMDI2enN3YXBfZHJvcGJlaGluZF9sbGlzdCkpO1xuJiM0MztcdHNjaGVkdWxlX3dvcmsoXHUwMDI2enN3YXBfZHJvcGJlaGluZF93b3JrKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEF0dGVtcHRzIHRvIGZyZWUgYW4gZW50cnkgYnkgYWRkaW5nIGEgZm9saW8gdG8gdGhlIHN3YXAgY2FjaGUsXG4gICogZGVjb21wcmVzc2luZyB0aGUgZW50cnkgZGF0YSBpbnRvIHRoZSBmb2xpbywgYW5kIGlzc3VpbmcgYVxuQEAgLTk5MiwxNiAmIzQzOzEwNDQsMTggQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sO1xuIFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpO1xuJiM0MztcdGJvb2wgc3luYztcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KTtcbiBcdGlmICghc2kpXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuJiM0MztcdHN5bmMgPSBkYXRhX3JhY2Uoc2ktXHUwMDNlZmxhZ3MgXHUwMDI2IFNXUF9TWU5DSFJPTk9VU19JTyk7XG4gXG4gXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuIFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4tXHRcdFx0XHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4mIzQzO1x0XHRcdFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgsIHRydWUpO1xuIFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcbiBcbiBcdC8qXG5AQCAtMTA0NSwxMiAmIzQzOzEwOTksMTggQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdC8qIGZvbGlvIGlzIHVwIHRvIGRhdGUgKi9cbiBcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuIFxuLVx0LyogbW92ZSBpdCB0byB0aGUgdGFpbCBvZiB0aGUgaW5hY3RpdmUgbGlzdCBhZnRlciBlbmRfd3JpdGViYWNrICovXG4tXHRmb2xpb19zZXRfcmVjbGFpbShmb2xpbyk7XG4mIzQzO1x0LyogRnJlZSB0aGUgZm9saW8gb25jZSB3cml0ZWJhY2sgY29tcGxldGVzOyBzZWUgZm9saW9fZW5kX3dyaXRlYmFjaygpLiAqL1xuJiM0MztcdGlmICghc3luYylcbiYjNDM7XHRcdGZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTtcbiBcbiBcdC8qIHN0YXJ0IHdyaXRlYmFjayAqL1xuIFx0X19zd2FwX3dyaXRlcGFnZShmb2xpbywgTlVMTCk7XG4gXG4mIzQzO1x0aWYgKHN5bmMpIHtcbiYjNDM7XHRcdHpzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvKGZvbGlvKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4gb3V0OlxuIFx0aWYgKHJldCkge1xuIFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTA6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvJiMzNDssCiAgICAmIzM0O3pzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuJiMzNDssCiAgICAmIzM0O3pzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvJiMzNDssCiAgICAmIzM0O3pzd2FwX3dyaXRlYmFja19lbnRyeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgaGFuZGxpbmcgenN3YXAgd3JpdGViYWNrIGRyb3BiZWhpbmQgZm9saW9zLCBpbmNsdWRpbmcgYSBuZXcgd29ya3F1ZXVlIGFuZCBvZmYtTFJVIGZvbGlvIG1hbmFnZW1lbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIHN1YnN5c3RlbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ2ZGY1MjYyZDVjYTgxZmU5ZDM2NTRjOWJlZWMwMzcyMTYwZWJkODEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAxOCAxMDoxNTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvenN3YXAuaCBiL2luY2x1ZGUvbGludXgvenN3YXAuaAppbmRleCAzMGMxOTNhMTIwN2UxNi4uMjNkY2RlMjc0OTY0N2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvenN3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmgKQEAgLTM1LDYgJiM0MzszNSw3IEBAIHZvaWQgenN3YXBfbHJ1dmVjX3N0YXRlX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTsKIHZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpOwogYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpOwomIzQzO3ZvaWQgenN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7CiAjZWxzZQogCiBzdHJ1Y3QgenN3YXBfbHJ1dmVjX3N0YXRlIHt9OwpAQCAtNTgsNiAmIzQzOzU5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHpzd2FwX3N3YXBvZmYoaW50IHR5cGUpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge30KIHN0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pIHt9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHpzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pIHt9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggNThlYjlkMjQwNjQzNDguLjk1ZDY0MDk3ODBmNGQ3IDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZmlsZW1hcC5jCkBAIC0yMSw2ICYjNDM7MjEsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2dmcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3dhcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC96c3dhcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xlYWZvcHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zeXNjYWxscy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tYW4uaCZndDsKQEAgLTE2ODAsNiAmIzQzOzE2ODEsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQpOwogICovCiB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbykKIHsKJiM0MzsJYm9vbCBzd2FwX2Ryb3BiZWhpbmQ7CiYjNDM7CiAJVk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTsKIAogCS8qCkBAIC0xNjg5LDcgJiM0MzsxNjkyLDI0IEBAIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCSAqIHJldXNlZCBiZWZvcmUgdGhlIGZvbGlvX3dha2VfYml0KCkuCiAJICovCiAJZm9saW9fZ2V0KGZvbGlvKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogenN3YXAgd3JpdGViYWNrIGZvbGlvcyBhcmUgb2ZmLUxSVSwgc28gd2UgbXVzdCBwcmV2ZW50IGEgcmFjaW5nCiYjNDM7CSAqIHN3YXBpbiBmcm9tIHJlbW92aW5nIHRoZSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBrZWVwaW5nIGl0CiYjNDM7CSAqIG9mZi1MUlU6IHRoZSB3cml0ZWJhY2sgZmxhZyBhbGxvd3MgdGhhdC4gQWZ0ZXJ3YXJkcyBhIHN3YXBpbiBtYXkgd2luCiYjNDM7CSAqIHRoZSByYWNlLCBidXQgdGhlIGZvbGlvIGlzIGFscmVhZHkgcXVldWVkIGFuZCB0aGUgd29ya2VyIHB1dHMgaXQgYmFjawomIzQzOwkgKiBvbiB0aGUgTFJVIGluIHRoYXQgY2FzZS4KJiM0MzsJICovCiYjNDM7CXN3YXBfZHJvcGJlaGluZCA9IGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSAmYW1wOyZhbXA7CiYjNDM7CQkJICBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pOwomIzQzOwogCWZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7CiYjNDM7CiYjNDM7CWlmIChzd2FwX2Ryb3BiZWhpbmQpIHsKJiM0MzsJCXpzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKGZvbGlvKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCWZvbGlvX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTsKIAlmb2xpb19wdXQoZm9saW8pOwogfQpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oCmluZGV4IDc3ZDJkMTRlZGE0MjFlLi5jNjE3ZTVhMDI1N2Y0NiAxMDA2NDQKLS0tIGEvbW0vc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaApAQCAtMzA2LDcgJiM0MzszMDYsOCBAQCB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpOwogdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAotCQkJCSAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpOwomIzQzOwkJCQkgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LAomIzQzOwkJCQkgICAgIGJvb2wgc2tpcF9scnUpOwogLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqLwogdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IDljM2E1Y2Y5OTc3ODYwLi4wNDhlZmM3Y2E2MTI0MCAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtNDAzLDcgJiM0Mzs0MDMsOCBAQCB2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAkJCQkJc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAogCQkJCQl1bnNpZ25lZCBpbnQgb3JkZXIsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAotCQkJCQlzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCkKJiM0MzsJCQkJCXN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LAomIzQzOwkJCQkJYm9vbCBza2lwX2xydSkKIHsKIAlpbnQgZXJyOwogCXN3cF9lbnRyeV90IGVudHJ5OwpAQCAtNDg0LDcgJiM0Mzs0ODUsOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAlscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpOwogCiAJLyogQ2FsbGVyIHdpbGwgaW5pdGlhdGUgcmVhZCBpbnRvIGxvY2tlZCBuZXdfZm9saW8gKi8KLQlmb2xpb19hZGRfbHJ1KGZvbGlvKTsKJiM0MzsJaWYgKCFza2lwX2xydSkKJiM0MzsJCWZvbGlvX2FkZF9scnUoZm9saW8pOwogCXJldHVybiBmb2xpbzsKIH0KIApAQCAtNTA3LDcgJiM0Mzs1MDksOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKICAqLwogc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKLQkJCQkgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KQomIzQzOwkJCQkgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LAomIzQzOwkJCQkgICAgIGJvb2wgc2tpcF9scnUpCiB7CiAJaW50IG9yZGVyLCBlcnI7CiAJc3RydWN0IGZvbGlvICpyZXQ7CkBAIC01MjIsNyAmIzQzOzUyNSw3IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsCiAKIAlkbyB7CiAJCXJldCA9IF9fc3dhcF9jYWNoZV9hbGxvYyhjaSwgdGFyZ19lbnRyeSwgZ2ZwLCBvcmRlciwKLQkJCQkJIHZtZiwgbXBvbCwgaWx4KTsKJiM0MzsJCQkJCSB2bWYsIG1wb2wsIGlseCwgc2tpcF9scnUpOwogCQlpZiAoIUlTX0VSUihyZXQpKQogCQkJYnJlYWs7CiAJCWVyciA9IFBUUl9FUlIocmV0KTsKQEAgLTY0Myw3ICYjNDM7NjQ2LDggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsCiAJCWZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpOwogCQlpZiAoZm9saW8pCiAJCQlyZXR1cm4gZm9saW87Ci0JCWZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7CiYjNDM7CQlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgsCiYjNDM7CQkJCQkgICAgICAgZmFsc2UpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSkKQEAgLTY4Myw3ICYjNDM7Njg3LDggQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycywKIAkJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CiAJCWlmIChmb2xpbykKIAkJCXJldHVybiBmb2xpbzsKLQkJZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpOwomIzQzOwkJZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgsCiYjNDM7CQkJCQkgICAgICAgZmFsc2UpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUihmb2xpbykpCmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCA3NjFjZDY5OWUwYTNlNi4uZDE4NWRhODViYjY4ZWYgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtMzQsNiAmIzQzOzM0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC93cml0ZWJhY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYWdlbWFwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xsaXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdF9scnUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC96c21hbGxvYy5oJmd0OwogCkBAIC05NzIsNiAmIzQzOzk3Myw1NyBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIHdyaXRlYmFjayBjb2RlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwomIzQzO3N0YXRpYyB2b2lkIHpzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlmb2xpb19sb2NrKGZvbGlvKTsKJiM0MzsKJiM0MzsJLyogVGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQgb2ZmIHRoZSBMUlUgYW5kIG5vdGhpbmcgcmUtYWRkcyBpdCBoZXJlLiAqLwomIzQzOwlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEdhdGUgcmVtb3ZlX21hcHBpbmcoKSBvbiBmb2xpb190ZXN0X3N3YXBjYWNoZSgpOiBhIHJhY2luZyBzd2FwaW4gbWF5CiYjNDM7CSAqIGhhdmUgZnJlZWQgdGhlIHN3YXAgc2xvdCAoZm9saW9fZnJlZV9zd2FwKCkpIGFuZCBkcm9wcGVkIHRoZSBmb2xpbyBmcm9tCiYjNDM7CSAqIHRoZSBjYWNoZSwgYW5kIHJlbW92ZV9tYXBwaW5nKCkgbXVzdCBub3QgcnVuIG9uIGEgbm9uLXN3YXBjYWNoZSBmb2xpbwomIzQzOwkgKiAoaXQgd291bGQgdHJpcCBfX3JlbW92ZV9tYXBwaW5nKCkmIzM5O3MgbWFwcGluZyA9PSBmb2xpb19tYXBwaW5nKCkgY2hlY2spLgomIzQzOwkgKi8KJiM0MzsJaWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSAmYW1wOyZhbXA7CiYjNDM7CSAgICByZW1vdmVfbWFwcGluZyhzd2FwX2FkZHJlc3Nfc3BhY2UoZm9saW8tJmd0O3N3YXApLCBmb2xpbykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogUmFjZWQ6IHRoZSBmb2xpbyBpcyBub3cgb3duZWQgYnkgdGhlIHN3YXBpbjsgcHV0IGl0IGJhY2sgb24gdGhlIExSVS4gKi8KJiM0MzsJZm9saW9fY2xlYXJfZHJvcGJlaGluZChmb2xpbyk7CiYjNDM7CWZvbGlvX2FkZF9scnUoZm9saW8pOwomIzQzO291dDoKJiM0MzsJZm9saW9fdW5sb2NrKGZvbGlvKTsKJiM0MzsJZm9saW9fcHV0KGZvbGlvKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBsbGlzdF9oZWFkLCB6c3dhcF9kcm9wYmVoaW5kX2xsaXN0KTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB6c3dhcF9kcm9wYmVoaW5kX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqcG9zLCAqbmV4dDsKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewomIzQzOwkJcG9zID0gbGxpc3RfZGVsX2FsbChwZXJfY3B1X3B0cigmYW1wO3pzd2FwX2Ryb3BiZWhpbmRfbGxpc3QsIGNwdSkpOwomIzQzOwkJbGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIHBvcykgewomIzQzOwkJCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBjb250YWluZXJfb2YoKHN0cnVjdCBsaXN0X2hlYWQgKilwb3MsCiYjNDM7CQkJCQkJCSAgIHN0cnVjdCBmb2xpbywgbHJ1KTsKJiM0MzsJCQl6c3dhcF93cml0ZWJhY2tfZnJlZV9mb2xpbyhmb2xpbyk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIERFQ0xBUkVfV09SSyh6c3dhcF9kcm9wYmVoaW5kX3dvcmssIHpzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuKTsKJiM0MzsKJiM0Mzt2b2lkIHpzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopJmFtcDtmb2xpby0mZ3Q7bHJ1LAomIzQzOwkJICB0aGlzX2NwdV9wdHIoJmFtcDt6c3dhcF9kcm9wYmVoaW5kX2xsaXN0KSk7CiYjNDM7CXNjaGVkdWxlX3dvcmsoJmFtcDt6c3dhcF9kcm9wYmVoaW5kX3dvcmspOwomIzQzO30KJiM0MzsKIC8qCiAgKiBBdHRlbXB0cyB0byBmcmVlIGFuIGVudHJ5IGJ5IGFkZGluZyBhIGZvbGlvIHRvIHRoZSBzd2FwIGNhY2hlLAogICogZGVjb21wcmVzc2luZyB0aGUgZW50cnkgZGF0YSBpbnRvIHRoZSBmb2xpbywgYW5kIGlzc3VpbmcgYQpAQCAtOTkyLDE2ICYjNDM7MTA0NCwxOCBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IG1lbXBvbGljeSAqbXBvbDsKIAlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7CiYjNDM7CWJvb2wgc3luYzsKIAlpbnQgcmV0ID0gMDsKIAogCS8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpOwogCWlmICghc2kpCiAJCXJldHVybiAtRUVYSVNUOwomIzQzOwlzeW5jID0gZGF0YV9yYWNlKHNpLSZndDtmbGFncyAmYW1wOyBTV1BfU1lOQ0hST05PVVNfSU8pOwogCiAJbXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTsKIAlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCwKLQkJCQkgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7CiYjNDM7CQkJCSAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYLCB0cnVlKTsKIAlwdXRfc3dhcF9kZXZpY2Uoc2kpOwogCiAJLyoKQEAgLTEwNDUsMTIgJiM0MzsxMDk5LDE4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJLyogZm9saW8gaXMgdXAgdG8gZGF0ZSAqLwogCWZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pOwogCi0JLyogbW92ZSBpdCB0byB0aGUgdGFpbCBvZiB0aGUgaW5hY3RpdmUgbGlzdCBhZnRlciBlbmRfd3JpdGViYWNrICovCi0JZm9saW9fc2V0X3JlY2xhaW0oZm9saW8pOwomIzQzOwkvKiBGcmVlIHRoZSBmb2xpbyBvbmNlIHdyaXRlYmFjayBjb21wbGV0ZXM7IHNlZSBmb2xpb19lbmRfd3JpdGViYWNrKCkuICovCiYjNDM7CWlmICghc3luYykKJiM0MzsJCWZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTsKIAogCS8qIHN0YXJ0IHdyaXRlYmFjayAqLwogCV9fc3dhcF93cml0ZXBhZ2UoZm9saW8sIE5VTEwpOwogCiYjNDM7CWlmIChzeW5jKSB7CiYjNDM7CQl6c3dhcF93cml0ZWJhY2tfZnJlZV9mb2xpbyhmb2xpbyk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwogb3V0OgogCWlmIChyZXQpIHsKIAkJc3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDAzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFpzd2FwIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBwb2tpbmcgYXJvdW5kIGluIHRoZSB6c3dhcCBhbmQgc3dhcCBzdWJzeXN0ZW1zLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHRvdWNoaW5nIGBtbS96c3dhcC5jYCwgYG1tL2ZpbGVtYXAuY2AsIGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L3pzd2FwLmhgLiBUaGF0JiMzOTtzIGEgZGVjZW50IHNwcmVhZCwgaW5kaWNhdGluZyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIG1pbm9yIHR3ZWFrLiBUaGUgaW50cm9kdWN0aW9uIG9mIGB6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgYW5kIHRoZSBtb2RpZmljYXRpb24gb2YgYGZvbGlvX2VuZF93cml0ZWJhY2tgIHRvIGNhbGwgaXQgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBhdHRlbnRpb24uIFBsdXMsIHRoZSBhbHRlcmF0aW9uIG9mIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCB0byB0YWtlIGEgYHNraXBfbHJ1YCBwYXJhbWV0ZXIuLi4geWVhaCwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIHNvbWUgc2VyaW91cyBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyBmb3IgZnV6emluZy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGludGVyYWN0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHdoZXJlIGVkZ2UgY2FzZXMgYXJlIGxpa2VseSB0byBzdXJmYWNlLiBJJiMzOTttIHRoaW5raW5nIHRoZSBtYWluIHRhcmdldHMgd2lsbCBiZSBgenN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gLCBgenN3YXBfZHJvcGJlaGluZF93b3JrZm5gLCBgenN3YXBfd3JpdGViYWNrX2ZyZWVfZm9saW9gLCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgYW5kIG9mIGNvdXJzZSBgZm9saW9fZW5kX3dyaXRlYmFja2Agc2luY2UgaXQmIzM5O3MgdGhlIGdhdGV3YXkgZm9yIHRoZSBuZXcgbG9naWMuIEFsc28sIEkgY2FuJiMzOTt0IGZvcmdldCBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGVzcGVjaWFsbHkgd2l0aCB0aGF0IG5ldyBwYXJhbWV0ZXIuCgpOb3csIGxldCYjMzk7cyBzZWUgYWJvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIE9idmlvdXNseSwgYENPTkZJR19aU1dBUGAgaXMgYSBtdXN0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgdmVyeSBjbG9zZWx5IHRvIGVuc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGVudmlyb25tZW50IHNldCB1cCBmb3IgY29tcHJlaGVuc2l2ZSB0ZXN0aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3JpdGljYWwgZm9yIHJlcHJvZHVjaW5nIHRoZSBhZmZlY3RlZCBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfWlNXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Nzg9b2JqLSQoQ09ORklHX1NXQVApXHQmIzQzOz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXG5tbS9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfWlNXQVApXHQmIzQzOz0genN3YXAub1xubW0vTWFrZWZpbGUtODAtb2JqLSQoQ09ORklHX0hBU19ETUEpXHQmIzQzOz0gZG1hcG9vbC5vXG4tLVxubW0vbWVtY29udHJvbC5jPTU1Mz1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTY5LSNlbmRpZlxubW0vbWVtY29udHJvbC5jOjU3MDojaWZkZWYgQ09ORklHX1pTV0FQXG5tbS9tZW1jb250cm9sLmMtNTcxLVx0WlNXUElOLFxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNTQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3N0YXQgbWVtb3J5X3N0YXRzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTE1NTYtXHR7IFwmIzM0O3NobWVtXCYjMzQ7LFx0XHRcdE5SX1NITUVNXHRcdFx0fSxcbm1tL21lbWNvbnRyb2wuYzoxNTU3OiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy0xNTU4LVx0eyBcJiMzNDt6c3dhcFwmIzM0OyxcdFx0XHRNRU1DR19aU1dBUF9CXHRcdFx0fSxcbi0tXG5tbS9tZW1jb250cm9sLmM9NDE1Nz1tZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2Nzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDE3MC1cdG1lbWNnMV9zb2Z0X2xpbWl0X3Jlc2V0KG1lbWNnKTtcbm1tL21lbWNvbnRyb2wuYzo0MTcxOiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy00MTcyLVx0bWVtY2ctXHUwMDNlenN3YXBfbWF4ID0gUEFHRV9DT1VOVEVSX01BWDtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTc4OT1zdGF0aWMgc3RydWN0IGNmdHlwZSBzd2FwX2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTU4MjMtXG5tbS9tZW1jb250cm9sLmM6NTgyNDojaWZkZWYgQ09ORklHX1pTV0FQXG5tbS9tZW1jb250cm9sLmMtNTgyNS0vKipcbi0tXG5tbS9tZW1jb250cm9sLmM9NjAwMT1zdGF0aWMgc3RydWN0IGNmdHlwZSB6c3dhcF9maWxlc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy02MDE5LX07XG5tbS9tZW1jb250cm9sLmM6NjAyMDojZW5kaWYgLyogQ09ORklHX1pTV0FQICovXG5tbS9tZW1jb250cm9sLmMtNjAyMS1cbm1tL21lbWNvbnRyb2wuYz02MDIyPXN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfc3dhcF9pbml0KHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTYwMzAtI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NjAzMTojaWZkZWYgQ09ORklHX1pTV0FQXG5tbS9tZW1jb250cm9sLmMtNjAzMi1cdFdBUk5fT04oY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHpzd2FwX2ZpbGVzKSk7XG4tLVxubW0vdm1zdGF0LmM9MTE4Nz1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcbi0tXG5tbS92bXN0YXQuYy0xNDUwLSNlbmRpZlxubW0vdm1zdGF0LmM6MTQ1MTojaWZkZWYgQ09ORklHX1pTV0FQXG5tbS92bXN0YXQuYy0xNDUyLVx0W0koWlNXUElOKV1cdFx0XHRcdD0gXCYjMzQ7enN3cGluXCYjMzQ7LFxuLS1cbm1tL3pzd2FwLmM9ODc9c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKTtcbi0tXG5tbS96c3dhcC5jLTg5LS8qIEVuYWJsZS9kaXNhYmxlIHpzd2FwICovXG5tbS96c3dhcC5jOjkwOnN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfWlNXQVBfREVGQVVMVF9PTiwgenN3YXBfZXZlcl9lbmFibGVkKTtcbm1tL3pzd2FwLmM6OTE6c3RhdGljIGJvb2wgenN3YXBfZW5hYmxlZCA9IElTX0VOQUJMRUQoQ09ORklHX1pTV0FQX0RFRkFVTFRfT04pO1xubW0venN3YXAuYy05Mi1zdGF0aWMgaW50IHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKixcbi0tXG5tbS96c3dhcC5jPTk4PW1vZHVsZV9wYXJhbV9jYihlbmFibGVkLCBcdTAwMjZ6c3dhcF9lbmFibGVkX3BhcmFtX29wcywgXHUwMDI2enN3YXBfZW5hYmxlZCwgMDY0NCk7XG4tLVxubW0venN3YXAuYy0xMDAtLyogQ3J5cHRvIGNvbXByZXNzb3IgdG8gdXNlICovXG5tbS96c3dhcC5jOjEwMTpzdGF0aWMgY2hhciAqenN3YXBfY29tcHJlc3NvciA9IENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQ7XG5tbS96c3dhcC5jLTEwMi1zdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKixcbi0tXG5tbS96c3dhcC5jPTEyMj1zdGF0aWMgYm9vbCB6c3dhcF9zaHJpbmtlcl9lbmFibGVkID0gSVNfRU5BQkxFRChcbm1tL3pzd2FwLmM6MTIzOlx0XHRDT05GSUdfWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTik7XG5tbS96c3dhcC5jLTEyNC1tb2R1bGVfcGFyYW1fbmFtZWQoc2hyaW5rZXJfZW5hYmxlZCwgenN3YXBfc2hyaW5rZXJfZW5hYmxlZCwgYm9vbCwgMDY0NCk7XG4tLVxubW0venN3YXAuYz0xMzE9Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG5tbS96c3dhcC5jLTEzMi17XG5tbS96c3dhcC5jOjEzMzpcdHJldHVybiAhc3RhdGljX2JyYW5jaF9tYXliZShDT05GSUdfWlNXQVBfREVGQVVMVF9PTiwgXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcbm1tL3pzd2FwLmMtMTM0LX1cbi0tXG5tbS96c3dhcC5jPTM0NT1zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2sodm9pZClcbi0tXG5tbS96c3dhcC5jLTM0Ny1cdGlmICghY3J5cHRvX2hhc19hY29tcCh6c3dhcF9jb21wcmVzc29yLCAwLCAwKSBcdTAwMjZcdTAwMjZcbm1tL3pzd2FwLmM6MzQ4Olx0ICAgIHN0cmNtcCh6c3dhcF9jb21wcmVzc29yLCBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUKSkge1xubW0venN3YXAuYy0zNDktXHRcdHByX2VycihcJiMzNDtjb21wcmVzc29yICVzIG5vdCBhdmFpbGFibGUsIHVzaW5nIGRlZmF1bHQgJXNcXG5cJiMzNDssXG5tbS96c3dhcC5jOjM1MDpcdFx0ICAgICAgIHpzd2FwX2NvbXByZXNzb3IsIENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQpO1xubW0venN3YXAuYy0zNTEtXHRcdHBhcmFtX2ZyZWVfY2hhcnAoXHUwMDI2enN3YXBfY29tcHJlc3Nvcik7XG5tbS96c3dhcC5jOjM1MjpcdFx0enN3YXBfY29tcHJlc3NvciA9IENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQ7XG5tbS96c3dhcC5jLTM1My1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDY3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBTaXR1YXRpb24qKgoKT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBzZXR0aW5nIHRoYXQmIzM5O3Mgc3RhbmRpbmcgb3V0IHRvIG1lIGlzIGBaU1dBUGAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGFzc2VzcyBpZiB0aGF0JiMzOTtzIHRoZSAqb25seSogY29uZmlndXJhdGlvbiBhdCBwbGF5LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiBmb3IgYW55IG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgaW4gZWZmZWN0LiBJIG5lZWQgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUgYmVmb3JlIGp1bXBpbmcgdG8gYW55IGNvbmNsdXNpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZWxzZSBpcyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03Nj1lbmRpZlxubW0vTWFrZWZpbGUtNzctXG5tbS9NYWtlZmlsZTo3ODpvYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlLTc5LW9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG4tLVxubW0vZmlsZW1hcC5jPTQ2MjI9c3RhdGljIHZvaWQgZmlsZW1hcF9jYWNoZXN0YXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vZmlsZW1hcC5jLTQ2NjktXG5tbS9maWxlbWFwLmM6NDY3MDojaWZkZWYgQ09ORklHX1NXQVAgLyogaW1wbGllcyBDT05GSUdfTU1VICovXG5tbS9maWxlbWFwLmMtNDY3MS1cdFx0XHRpZiAoc2htZW1fbWFwcGluZyhtYXBwaW5nKSkge1xuLS1cbm1tL2tzbS5jPTMxMDc9c3RydWN0IGZvbGlvICprc21fbWlnaHRfbmVlZF90b19jb3B5KHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0va3NtLmMtMzE0Ni1cdFx0X19mb2xpb19zZXRfbG9ja2VkKG5ld19mb2xpbyk7XG5tbS9rc20uYzozMTQ3OiNpZmRlZiBDT05GSUdfU1dBUFxubW0va3NtLmMtMzE0OC1cdFx0Y291bnRfdm1fZXZlbnQoS1NNX1NXUElOX0NPUFkpO1xuLS1cbm1tL21hZHZpc2UuYz0xNTA9c3RhdGljIGludCBtYWR2aXNlX3VwZGF0ZV92bWEodm1fZmxhZ3NfdCBuZXdfZmxhZ3MsXG4tLVxubW0vbWFkdmlzZS5jLTE4NS1cbm1tL21hZHZpc2UuYzoxODY6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tYWR2aXNlLmMtMTg3LXN0YXRpYyBpbnQgc3dhcGluX3dhbGtfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vbWFkdmlzZS5jPTIzND1zdGF0aWMgdm9pZCBzaG1lbV9zd2FwaW5fcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWFkdmlzZS5jLTI2OS19XG5tbS9tYWR2aXNlLmM6MjcwOiNlbmRpZlx0XHQvKiBDT05GSUdfU1dBUCAqL1xubW0vbWFkdmlzZS5jLTI3MS1cbi0tXG5tbS9tYWR2aXNlLmM9MjgxPXN0YXRpYyBsb25nIG1hZHZpc2Vfd2lsbG5lZWQoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTI4OS1cbm1tL21hZHZpc2UuYzoyOTA6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tYWR2aXNlLmMtMjkxLVx0aWYgKCFmaWxlKSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTU5Nj12b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtNjA1LVxubW0vbWVtY29udHJvbC12MS5jOjYwNjojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wtdjEuYy02MDctLyoqXG4tLVxubW0vbWVtY29udHJvbC12MS5jPTE4NjY9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZzFfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTg3Ny1cdFdPUktJTkdTRVRfUkVGQVVMVF9GSUxFLFxubW0vbWVtY29udHJvbC12MS5jOjE4Nzg6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tZW1jb250cm9sLXYxLmMtMTg3OS1cdE1FTUNHX1NXQVAsXG4tLVxubW0vbWVtY29udHJvbC12MS5jPTE4ODQ9c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG1lbWNnMV9zdGF0X25hbWVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE4OTUtXHRcJiMzNDt3b3JraW5nc2V0X3JlZmF1bHRfZmlsZVwmIzM0Oyxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODk2OiNpZmRlZiBDT05GSUdfU1dBUFxubW0vbWVtY29udHJvbC12MS5jLTE4OTctXHRcJiMzNDtzd2FwXCYjMzQ7LFxuLS1cbm1tL21lbWNvbnRyb2wuYz0zNzI9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19ub2RlX3N0YXRfaXRlbXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtMzk5LVx0TlJfU0VDT05EQVJZX1BBR0VUQUJMRSxcbm1tL21lbWNvbnRyb2wuYzo0MDA6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tZW1jb250cm9sLmMtNDAxLVx0TlJfU1dBUENBQ0hFLFxuLS1cbm1tL21lbWNvbnRyb2wuYz01NTM9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTU2NS1cdFBHTEFaWUZSRUVELFxubW0vbWVtY29udHJvbC5jOjU2NjojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy01NjctXHRTV1BJTl9aRVJPLFxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNTQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3N0YXQgbWVtb3J5X3N0YXRzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTE1NjQtXHR7IFwmIzM0O2ZpbGVfd3JpdGViYWNrXCYjMzQ7LFx0XHROUl9XUklURUJBQ0tcdFx0XHR9LFxubW0vbWVtY29udHJvbC5jOjE1NjU6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tZW1jb250cm9sLmMtMTU2Ni1cdHsgXCYjMzQ7c3dhcGNhY2hlZFwmIzM0OyxcdFx0XHROUl9TV0FQQ0FDSEVcdFx0XHR9LFxuLS1cbm1tL21lbWNvbnRyb2wuYz01NTM3PWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTU1NzItXG5tbS9tZW1jb250cm9sLmM6NTU3MzojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy01NTc0LS8qKlxuLS1cbm1tL21lbWNvbnRyb2wuYz02MDM2PXN1YnN5c19pbml0Y2FsbChtZW1fY2dyb3VwX3N3YXBfaW5pdCk7XG5tbS9tZW1jb250cm9sLmMtNjAzNy1cbm1tL21lbWNvbnRyb2wuYzo2MDM4OiNlbmRpZiAvKiBDT05GSUdfU1dBUCAqL1xubW0vbWVtY29udHJvbC5jLTYwMzktXG4tLVxubW0vbWlncmF0ZS5jPTU3MT1zdGF0aWMgaW50IF9fZm9saW9fbWlncmF0ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL21pZ3JhdGUuYy02OTAtXHRcdH1cbm1tL21pZ3JhdGUuYzo2OTE6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9taWdyYXRlLmMtNjkyLVx0XHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XG4tLVxubW0vbWluY29yZS5jPTYxPXN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfc3dhcChzd3BfZW50cnlfdCBlbnRyeSwgYm9vbCBzaG1lbSlcbi0tXG5tbS9taW5jb3JlLmMtNzQtXG5tbS9taW5jb3JlLmM6NzU6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1NXQVApKSB7XG5tbS9taW5jb3JlLmMtNzYtXHRcdFdBUk5fT04oMSk7XG4tLVxubW0vc3dhcC5oPTY5PWVudW0gc3dhcF9jbHVzdGVyX2ZsYWdzIHtcbi0tXG5tbS9zd2FwLmgtODAtXG5tbS9zd2FwLmg6ODE6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9zd2FwLmgtODItI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcG9wcy5oXHUwMDNlIC8qIGZvciBzd3Bfb2Zmc2V0ICovXG4tLVxubW0vc3dhcC5oPTMzMz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb19zd2FwX2ZsYWdzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc3dhcC5oLTMzNy1cbm1tL3N3YXAuaDozMzg6I2Vsc2UgLyogQ09ORklHX1NXQVAgKi9cbm1tL3N3YXAuaC0zMzktc3RydWN0IHN3YXBfaW9jYjtcbi0tXG5tbS9zd2FwLmg9NDcxPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3N3YXBfZmxhZ3Moc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwLmgtNDc1LVxubW0vc3dhcC5oOjQ3NjojZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cbm1tL3N3YXAuaC00NzctI2VuZGlmIC8qIF9NTV9TV0FQX0ggKi9cbi0tXG5tbS92bWFfaW5pdC5jPTQxPXN0YXRpYyB2b2lkIHZtX2FyZWFfaW5pdF9mcm9tKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxuLS1cbm1tL3ZtYV9pbml0LmMtNjQtI2VuZGlmXG5tbS92bWFfaW5pdC5jOjY1OiNpZmRlZiBDT05GSUdfU1dBUFxubW0vdm1hX2luaXQuYy02Ni1cdG1lbWNweShcdTAwMjZkZXN0LVx1MDAzZXN3YXBfcmVhZGFoZWFkX2luZm8sIFx1MDAyNnNyYy1cdTAwM2Vzd2FwX3JlYWRhaGVhZF9pbmZvLFxuLS1cbm1tL3Ztc3RhdC5jPTExODc9Y29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XG4tLVxubW0vdm1zdGF0LmMtMTI2Ny0jZW5kaWZcbm1tL3Ztc3RhdC5jOjEyNjg6I2lmZGVmIENPTkZJR19TV0FQXG5tbS92bXN0YXQuYy0xMjY5LVx0W0koTlJfU1dBUENBQ0hFKV1cdFx0XHQ9IFwmIzM0O25yX3N3YXBjYWNoZWRcJiMzNDssXG4tLVxubW0vdm1zdGF0LmMtMTQzOC1cbm1tL3Ztc3RhdC5jOjE0Mzk6I2lmZGVmIENPTkZJR19TV0FQXG5tbS92bXN0YXQuYy0xNDQwLVx0W0koU1dBUF9SQSldXHRcdFx0XHQ9IFwmIzM0O3N3YXBfcmFcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE0NQoJCQkJCQkJb3V0cHV0OiAxMjkKCQkJCQkJCXRob3VnaHRzOiA5NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqWnN3YXAgV3JpdGViYWNrIERyb3BiZWhpbmQgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBgQ09ORklHX1pTV0FQYCwgYW5kIHNwZWNpZmljYWxseSwgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB3cml0ZWJhY2sgcHJvY2Vzcy4gVGhlIGtleSBmdW5jdGlvbiBoZXJlIGlzIGB6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AuIEl0IGFwcGVhcnMgdG8gYmUgdHJpZ2dlcmVkIGZyb20gYGZvbGlvX2VuZF93cml0ZWJhY2tgIHdpdGhpbiBgbW0vZmlsZW1hcC5jYC4gRXNzZW50aWFsbHksIHRoZSBsb2dpYyBpczogSWYgYSBmb2xpbyBpcyBpbiBzd2FwIGNhY2hlIGFuZCBtYXJrZWQgZm9yICYjMzQ7ZHJvcGJlaGluZCwmIzM0OyB3ZSBjYWxsIHRoaXMgbmV3IGZ1bmN0aW9uLgoKSW5zaWRlIGB6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgKGluIGBtbS96c3dhcC5jYCksIHRoZSBmb2xpbyBpcyBhZGRlZCB0byBhIGxvY2FsIGxpc3QgYW5kIGEgd29ya3F1ZXVlLCBgenN3YXBfZHJvcGJlaGluZF93b3JrYCwgaXMgc2NoZWR1bGVkLiBUaGUgd29yayBmdW5jdGlvbiwgYHpzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuYCwgdGhlbiBjYWxscyBgenN3YXBfd3JpdGViYWNrX2ZyZWVfZm9saW9gLgoKTm93LCBgenN3YXBfd3JpdGViYWNrX2ZyZWVfZm9saW9gIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuICBJdCBhdHRlbXB0cyB0byByZW1vdmUgdGhlIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUsIGJ1dCBjcnVjaWFsbHksIGl0IGNoZWNrcyBgZm9saW9fdGVzdF9zd2FwY2FjaGVgIGJlZm9yZSBjYWxsaW5nIGByZW1vdmVfbWFwcGluZ2AuIFRoZXJlJiMzOTtzIGFsc28gc29tZSBpbnRlcmVzdGluZyBsb2dpYyB0byBoYW5kbGUgcmFjZXMgd2l0aCBhIHN3YXBpbiBvcGVyYXRpb24sIHBvdGVudGlhbGx5IHB1dHRpbmcgdGhlIGZvbGlvIGJhY2sgb24gdGhlIExSVSBpZiBpdCYjMzk7cyBubyBsb25nZXIgYSBzd2FwIGNhY2hlIGZvbGlvLgoKTG9va2luZyBhdCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgdGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBmb2xpb3MgYXJlIGFsbG9jYXRlZCBhbmQgbWFya2VkIGZvciB0aGlzICYjMzQ7ZHJvcGJlaGluZCYjMzQ7IGJlaGF2aW9yLiAgSWYgdGhlIHdyaXRlYmFjayBpc24mIzM5O3Qgc3luY2hyb25vdXMgKGBzeW5jYCBpcyBmYWxzZSksIHRoZSBmb2xpbyBpcyBzZXQgd2l0aCBgZm9saW9fc2V0X2Ryb3BiZWhpbmRgLCBhbmQgd3JpdGViYWNrIGlzIGluaXRpYXRlZC4gVGhlIHBhdGNoIGFkZHMgYSBjb25kaXRpb25hbCBgenN3YXBfd3JpdGViYWNrX2ZyZWVfZm9saW9gIGNhbGwgYWZ0ZXIgdGhlIHdyaXRlYmFjay4gVGhpcyBpcyBhIGNydWNpYWwgZGlmZmVyZW5jZSBpbiBiZWhhdmlvci4KCkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIHRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Ugc3ltYm9sczogYHpzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCwgYHpzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuYCwgYHpzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvYCwgYW5kIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLiBUaGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYFpTV0FQYCBhbmQgYFNXQVBgLCB3aXRoIGBaU1dBUGAgZGVwZW5kZW50IG9uIGBTV0FQYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIHN1YnN5c3RlbXMgYW5kIHJlcHJlc2VudHMgYSBuZXcgbWV0aG9kIGZvciBoYW5kaW5nIHpzd2FwIHdyaXRlYmFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvJiMzNDssCiAgICAmIzM0O3pzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuJiMzNDssCiAgICAmIzM0O3pzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvJiMzNDssCiAgICAmIzM0O3pzd2FwX3dyaXRlYmFja19lbnRyeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgaGFuZGxpbmcgenN3YXAgd3JpdGViYWNrIGRyb3BiZWhpbmQgZm9saW9zLCBpbmNsdWRpbmcgYSBuZXcgd29ya3F1ZXVlIGFuZCBvZmYtTFJVIGZvbGlvIG1hbmFnZW1lbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIHN1YnN5c3RlbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyYjMzQ7LAogICAgJiMzNDt6c3dhcF9kcm9wYmVoaW5kX3dvcmtmbiYjMzQ7LAogICAgJiMzNDt6c3dhcF93cml0ZWJhY2tfZnJlZV9mb2xpbyYjMzQ7LAogICAgJiMzNDt6c3dhcF93cml0ZWJhY2tfZW50cnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtZWNoYW5pc20gZm9yIGhhbmRsaW5nIHpzd2FwIHdyaXRlYmFjayBkcm9wYmVoaW5kIGZvbGlvcywgaW5jbHVkaW5nIGEgbmV3IHdvcmtxdWV1ZSBhbmQgb2ZmLUxSVSBmb2xpbyBtYW5hZ2VtZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3dhcCBzdWJzeXN0ZW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMThUMTA6MTU6MDcuNDQ5MDUxMDAxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwNzU1MzM4NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNXQVBcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb1wiLFxuICAgIFwienN3YXBfZHJvcGJlaGluZF93b3JrZm5cIixcbiAgICBcInpzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvXCIsXG4gICAgXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgaGFuZGxpbmcgenN3YXAgd3JpdGViYWNrIGRyb3BiZWhpbmQgZm9saW9zLCBpbmNsdWRpbmcgYSBuZXcgd29ya3F1ZXVlIGFuZCBvZmYtTFJVIGZvbGlvIG1hbmFnZW1lbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIHN1YnN5c3RlbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDEwOjE1OjA3LjQ0OTA1NDY1MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEzOTQyMTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDZkZjUyNjJkNWNhODFmZTlkMzY1NGM5YmVlYzAzNzIxNjBlYmQ4MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxOCAxMDoxNTowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcXG5pbmRleCAzMGMxOTNhMTIwN2UxNi4uMjNkY2RlMjc0OTY0N2EgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC96c3dhcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXFxuQEAgLTM1LDYgKzM1LDcgQEAgdm9pZCB6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpO1xcbiB2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpO1xcbiBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZCk7XFxuK3ZvaWQgenN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuICNlbHNlXFxuIFxcbiBzdHJ1Y3QgenN3YXBfbHJ1dmVjX3N0YXRlIHt9O1xcbkBAIC01OCw2ICs1OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF9zd2Fwb2ZmKGludCB0eXBlKSB7fVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cXG4gc3RhdGljIGlubGluZSB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYykge31cXG4gc3RhdGljIGlubGluZSB2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKSB7fVxcbitzdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykge31cXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXFxuaW5kZXggNThlYjlkMjQwNjQzNDguLjk1ZDY0MDk3ODBmNGQ3IDEwMDY0NFxcbi0tLSBhL21tL2ZpbGVtYXAuY1xcbisrKyBiL21tL2ZpbGVtYXAuY1xcbkBAIC0yMSw2ICsyMSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9nZnAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zd2FwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC96c3dhcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGVhZm9wcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY2FsbHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYW4uaFxcdTAwM2VcXG5AQCAtMTY4MCw2ICsxNjgxLDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKTtcXG4gICovXFxuIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuK1xcdGJvb2wgc3dhcF9kcm9wYmVoaW5kO1xcbitcXG4gXFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcXG4gXFxuIFxcdC8qXFxuQEAgLTE2ODksNyArMTY5MiwyNCBAQCB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0ICogcmV1c2VkIGJlZm9yZSB0aGUgZm9saW9fd2FrZV9iaXQoKS5cXG4gXFx0ICovXFxuIFxcdGZvbGlvX2dldChmb2xpbyk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiB6c3dhcCB3cml0ZWJhY2sgZm9saW9zIGFyZSBvZmYtTFJVLCBzbyB3ZSBtdXN0IHByZXZlbnQgYSByYWNpbmdcXG4rXFx0ICogc3dhcGluIGZyb20gcmVtb3ZpbmcgdGhlIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgYW5kIGtlZXBpbmcgaXRcXG4rXFx0ICogb2ZmLUxSVTogdGhlIHdyaXRlYmFjayBmbGFnIGFsbG93cyB0aGF0LiBBZnRlcndhcmRzIGEgc3dhcGluIG1heSB3aW5cXG4rXFx0ICogdGhlIHJhY2UsIGJ1dCB0aGUgZm9saW8gaXMgYWxyZWFkeSBxdWV1ZWQgYW5kIHRoZSB3b3JrZXIgcHV0cyBpdCBiYWNrXFxuK1xcdCAqIG9uIHRoZSBMUlUgaW4gdGhhdCBjYXNlLlxcbitcXHQgKi9cXG4rXFx0c3dhcF9kcm9wYmVoaW5kID0gZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKTtcXG4rXFxuIFxcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XFxuK1xcbitcXHRpZiAoc3dhcF9kcm9wYmVoaW5kKSB7XFxuK1xcdFxcdHpzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKGZvbGlvKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRmb2xpb19lbmRfZHJvcGJlaGluZChmb2xpbyk7XFxuIFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXFxuaW5kZXggNzdkMmQxNGVkYTQyMWUuLmM2MTdlNWEwMjU3ZjQ2IDEwMDY0NFxcbi0tLSBhL21tL3N3YXAuaFxcbisrKyBiL21tL3N3YXAuaFxcbkBAIC0zMDYsNyArMzA2LDggQEAgdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTtcXG4gdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXFxuIFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTtcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCxcXG4rXFx0XFx0XFx0XFx0ICAgICBib29sIHNraXBfbHJ1KTtcXG4gLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqL1xcbiB2b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTtcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXFxuaW5kZXggOWMzYTVjZjk5Nzc4NjAuLjA0OGVmYzdjYTYxMjQwIDEwMDY0NFxcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xcbkBAIC00MDMsNyArNDAzLDggQEAgdm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbiBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gXFx0XFx0XFx0XFx0XFx0c3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxcbiBcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsXFxuK1xcdFxcdFxcdFxcdFxcdGJvb2wgc2tpcF9scnUpXFxuIHtcXG4gXFx0aW50IGVycjtcXG4gXFx0c3dwX2VudHJ5X3QgZW50cnk7XFxuQEAgLTQ4NCw3ICs0ODUsOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gXFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIG5yX3BhZ2VzKTtcXG4gXFxuIFxcdC8qIENhbGxlciB3aWxsIGluaXRpYXRlIHJlYWQgaW50byBsb2NrZWQgbmV3X2ZvbGlvICovXFxuLVxcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xcbitcXHRpZiAoIXNraXBfbHJ1KVxcbitcXHRcXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcXG4gXFx0cmV0dXJuIGZvbGlvO1xcbiB9XFxuIFxcbkBAIC01MDcsNyArNTA5LDggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuICAqL1xcbiBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxcbiBcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCxcXG4rXFx0XFx0XFx0XFx0ICAgICBib29sIHNraXBfbHJ1KVxcbiB7XFxuIFxcdGludCBvcmRlciwgZXJyO1xcbiBcXHRzdHJ1Y3QgZm9saW8gKnJldDtcXG5AQCAtNTIyLDcgKzUyNSw3IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXFxuIFxcbiBcXHRkbyB7XFxuIFxcdFxcdHJldCA9IF9fc3dhcF9jYWNoZV9hbGxvYyhjaSwgdGFyZ19lbnRyeSwgZ2ZwLCBvcmRlcixcXG4tXFx0XFx0XFx0XFx0XFx0IHZtZiwgbXBvbCwgaWx4KTtcXG4rXFx0XFx0XFx0XFx0XFx0IHZtZiwgbXBvbCwgaWx4LCBza2lwX2xydSk7XFxuIFxcdFxcdGlmICghSVNfRVJSKHJldCkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRlcnIgPSBQVFJfRVJSKHJldCk7XFxuQEAgLTY0Myw3ICs2NDYsOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCxcXG4gXFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XFxuIFxcdFxcdGlmIChmb2xpbylcXG4gXFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbi1cXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xcbitcXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBmYWxzZSk7XFxuIFxcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xcbiBcXG4gXFx0aWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSlcXG5AQCAtNjgzLDcgKzY4Nyw4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxuIFxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xcbiBcXHRcXHRpZiAoZm9saW8pXFxuIFxcdFxcdFxcdHJldHVybiBmb2xpbztcXG4tXFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xcbitcXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGZhbHNlKTtcXG4gXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuIFxcbiBcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcXG5pbmRleCA3NjFjZDY5OWUwYTNlNi4uZDE4NWRhODViYjY4ZWYgMTAwNjQ0XFxuLS0tIGEvbW0venN3YXAuY1xcbisrKyBiL21tL3pzd2FwLmNcXG5AQCAtMzQsNiArMzQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd3JpdGViYWNrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlbWFwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xsaXN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0X2xydS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvenNtYWxsb2MuaFxcdTAwM2VcXG4gXFxuQEAgLTk3Miw2ICs5NzMsNTcgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuICogd3JpdGViYWNrIGNvZGVcXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4rc3RhdGljIHZvaWQgenN3YXBfd3JpdGViYWNrX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRmb2xpb19sb2NrKGZvbGlvKTtcXG4rXFxuK1xcdC8qIFRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkIG9mZiB0aGUgTFJVIGFuZCBub3RoaW5nIHJlLWFkZHMgaXQgaGVyZS4gKi9cXG4rXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xcbitcXG4rXFx0LypcXG4rXFx0ICogR2F0ZSByZW1vdmVfbWFwcGluZygpIG9uIGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKCk6IGEgcmFjaW5nIHN3YXBpbiBtYXlcXG4rXFx0ICogaGF2ZSBmcmVlZCB0aGUgc3dhcCBzbG90IChmb2xpb19mcmVlX3N3YXAoKSkgYW5kIGRyb3BwZWQgdGhlIGZvbGlvIGZyb21cXG4rXFx0ICogdGhlIGNhY2hlLCBhbmQgcmVtb3ZlX21hcHBpbmcoKSBtdXN0IG5vdCBydW4gb24gYSBub24tc3dhcGNhY2hlIGZvbGlvXFxuK1xcdCAqIChpdCB3b3VsZCB0cmlwIF9fcmVtb3ZlX21hcHBpbmcoKSdzIG1hcHBpbmcgPT0gZm9saW9fbWFwcGluZygpIGNoZWNrKS5cXG4rXFx0ICovXFxuK1xcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHJlbW92ZV9tYXBwaW5nKHN3YXBfYWRkcmVzc19zcGFjZShmb2xpby1cXHUwMDNlc3dhcCksIGZvbGlvKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKiBSYWNlZDogdGhlIGZvbGlvIGlzIG5vdyBvd25lZCBieSB0aGUgc3dhcGluOyBwdXQgaXQgYmFjayBvbiB0aGUgTFJVLiAqL1xcbitcXHRmb2xpb19jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKTtcXG4rXFx0Zm9saW9fYWRkX2xydShmb2xpbyk7XFxuK291dDpcXG4rXFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4rXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rfVxcbitcXG4rc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBsbGlzdF9oZWFkLCB6c3dhcF9kcm9wYmVoaW5kX2xsaXN0KTtcXG4rXFxuK3N0YXRpYyB2b2lkIHpzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqcG9zLCAqbmV4dDtcXG4rXFx0aW50IGNwdTtcXG4rXFxuK1xcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4rXFx0XFx0cG9zID0gbGxpc3RfZGVsX2FsbChwZXJfY3B1X3B0cihcXHUwMDI2enN3YXBfZHJvcGJlaGluZF9sbGlzdCwgY3B1KSk7XFxuK1xcdFxcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCBwb3MpIHtcXG4rXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGNvbnRhaW5lcl9vZigoc3RydWN0IGxpc3RfaGVhZCAqKXBvcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGZvbGlvLCBscnUpO1xcbitcXHRcXHRcXHR6c3dhcF93cml0ZWJhY2tfZnJlZV9mb2xpbyhmb2xpbyk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgREVDTEFSRV9XT1JLKHpzd2FwX2Ryb3BiZWhpbmRfd29yaywgenN3YXBfZHJvcGJlaGluZF93b3JrZm4pO1xcbitcXG4rdm9pZCB6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSxcXG4rXFx0XFx0ICB0aGlzX2NwdV9wdHIoXFx1MDAyNnpzd2FwX2Ryb3BiZWhpbmRfbGxpc3QpKTtcXG4rXFx0c2NoZWR1bGVfd29yayhcXHUwMDI2enN3YXBfZHJvcGJlaGluZF93b3JrKTtcXG4rfVxcbitcXG4gLypcXG4gICogQXR0ZW1wdHMgdG8gZnJlZSBhbiBlbnRyeSBieSBhZGRpbmcgYSBmb2xpbyB0byB0aGUgc3dhcCBjYWNoZSxcXG4gICogZGVjb21wcmVzc2luZyB0aGUgZW50cnkgZGF0YSBpbnRvIHRoZSBmb2xpbywgYW5kIGlzc3VpbmcgYVxcbkBAIC05OTIsMTYgKzEwNDQsMTggQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gXFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcXG4gXFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpO1xcbitcXHRib29sIHN5bmM7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cXG4gXFx0c2kgPSBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpO1xcbiBcXHRpZiAoIXNpKVxcbiBcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4rXFx0c3luYyA9IGRhdGFfcmFjZShzaS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTV1BfU1lOQ0hST05PVVNfSU8pO1xcbiBcXG4gXFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcXG4gXFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgsIHRydWUpO1xcbiBcXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xcbiBcXG4gXFx0LypcXG5AQCAtMTA0NSwxMiArMTA5OSwxOCBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbiBcXHQvKiBmb2xpbyBpcyB1cCB0byBkYXRlICovXFxuIFxcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xcbiBcXG4tXFx0LyogbW92ZSBpdCB0byB0aGUgdGFpbCBvZiB0aGUgaW5hY3RpdmUgbGlzdCBhZnRlciBlbmRfd3JpdGViYWNrICovXFxuLVxcdGZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTtcXG4rXFx0LyogRnJlZSB0aGUgZm9saW8gb25jZSB3cml0ZWJhY2sgY29tcGxldGVzOyBzZWUgZm9saW9fZW5kX3dyaXRlYmFjaygpLiAqL1xcbitcXHRpZiAoIXN5bmMpXFxuK1xcdFxcdGZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTtcXG4gXFxuIFxcdC8qIHN0YXJ0IHdyaXRlYmFjayAqL1xcbiBcXHRfX3N3YXBfd3JpdGVwYWdlKGZvbGlvLCBOVUxMKTtcXG4gXFxuK1xcdGlmIChzeW5jKSB7XFxuK1xcdFxcdHpzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvKGZvbGlvKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuIG91dDpcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDEwOjE1OjA4LjI2MzY1NjM2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTI2MDkxNTQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvXCIsXG4gICAgXCJ6c3dhcF9kcm9wYmVoaW5kX3dvcmtmblwiLFxuICAgIFwienN3YXBfd3JpdGViYWNrX2ZyZWVfZm9saW9cIixcbiAgICBcInpzd2FwX3dyaXRlYmFja19lbnRyeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbWVjaGFuaXNtIGZvciBoYW5kbGluZyB6c3dhcCB3cml0ZWJhY2sgZHJvcGJlaGluZCBmb2xpb3MsIGluY2x1ZGluZyBhIG5ldyB3b3JrcXVldWUgYW5kIG9mZi1MUlUgZm9saW8gbWFuYWdlbWVudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAgc3Vic3lzdGVtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkNmRmNTI2MmQ1Y2E4MWZlOWQzNjU0YzliZWVjMDM3MjE2MGViZDgxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTggMTA6MTU6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbmluZGV4IDMwYzE5M2ExMjA3ZTE2Li4yM2RjZGUyNzQ5NjQ3YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvenN3YXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXG5AQCAtMzUsNiArMzUsNyBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG4gdm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpO1xuIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcbit2b2lkIHpzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuICNlbHNlXG4gXG4gc3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7fTtcbkBAIC01OCw2ICs1OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF9zd2Fwb2ZmKGludCB0eXBlKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF9tZW1jZ19vZmZsaW5lX2NsZWFudXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKSB7fVxuK3N0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKSB7fVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggNThlYjlkMjQwNjQzNDguLjk1ZDY0MDk3ODBmNGQ3IDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4rKysgYi9tbS9maWxlbWFwLmNcbkBAIC0yMSw2ICsyMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xlYWZvcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2NhbGxzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbWFuLmhcdTAwM2VcbkBAIC0xNjgwLDYgKzE2ODEsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQpO1xuICAqL1xuIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbitcdGJvb2wgc3dhcF9kcm9wYmVoaW5kO1xuK1xuIFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcbiBcbiBcdC8qXG5AQCAtMTY4OSw3ICsxNjkyLDI0IEBAIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0ICogcmV1c2VkIGJlZm9yZSB0aGUgZm9saW9fd2FrZV9iaXQoKS5cbiBcdCAqL1xuIFx0Zm9saW9fZ2V0KGZvbGlvKTtcbitcbitcdC8qXG4rXHQgKiB6c3dhcCB3cml0ZWJhY2sgZm9saW9zIGFyZSBvZmYtTFJVLCBzbyB3ZSBtdXN0IHByZXZlbnQgYSByYWNpbmdcbitcdCAqIHN3YXBpbiBmcm9tIHJlbW92aW5nIHRoZSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBrZWVwaW5nIGl0XG4rXHQgKiBvZmYtTFJVOiB0aGUgd3JpdGViYWNrIGZsYWcgYWxsb3dzIHRoYXQuIEFmdGVyd2FyZHMgYSBzd2FwaW4gbWF5IHdpblxuK1x0ICogdGhlIHJhY2UsIGJ1dCB0aGUgZm9saW8gaXMgYWxyZWFkeSBxdWV1ZWQgYW5kIHRoZSB3b3JrZXIgcHV0cyBpdCBiYWNrXG4rXHQgKiBvbiB0aGUgTFJVIGluIHRoYXQgY2FzZS5cbitcdCAqL1xuK1x0c3dhcF9kcm9wYmVoaW5kID0gZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKTtcbitcbiBcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XG4rXG4rXHRpZiAoc3dhcF9kcm9wYmVoaW5kKSB7XG4rXHRcdHpzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKGZvbGlvKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0Zm9saW9fZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xuIFx0Zm9saW9fcHV0KGZvbGlvKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCA3N2QyZDE0ZWRhNDIxZS4uYzYxN2U1YTAyNTdmNDYgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbisrKyBiL21tL3N3YXAuaFxuQEAgLTMwNiw3ICszMDYsOCBAQCB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpO1xuIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi1cdFx0XHRcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpO1xuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCxcbitcdFx0XHRcdCAgICAgYm9vbCBza2lwX2xydSk7XG4gLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqL1xuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCA5YzNhNWNmOTk3Nzg2MC4uMDQ4ZWZjN2NhNjEyNDAgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTQwMyw3ICs0MDMsOCBAQCB2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRcdFx0XHRcdHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi1cdFx0XHRcdFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXG4rXHRcdFx0XHRcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LFxuK1x0XHRcdFx0XHRib29sIHNraXBfbHJ1KVxuIHtcbiBcdGludCBlcnI7XG4gXHRzd3BfZW50cnlfdCBlbnRyeTtcbkBAIC00ODQsNyArNDg1LDggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpO1xuIFxuIFx0LyogQ2FsbGVyIHdpbGwgaW5pdGlhdGUgcmVhZCBpbnRvIGxvY2tlZCBuZXdfZm9saW8gKi9cbi1cdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuK1x0aWYgKCFza2lwX2xydSlcbitcdFx0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRyZXR1cm4gZm9saW87XG4gfVxuIFxuQEAgLTUwNyw3ICs1MDksOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKi9cbiBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuIFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCxcbitcdFx0XHRcdCAgICAgYm9vbCBza2lwX2xydSlcbiB7XG4gXHRpbnQgb3JkZXIsIGVycjtcbiBcdHN0cnVjdCBmb2xpbyAqcmV0O1xuQEAgLTUyMiw3ICs1MjUsNyBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuIFxuIFx0ZG8ge1xuIFx0XHRyZXQgPSBfX3N3YXBfY2FjaGVfYWxsb2MoY2ksIHRhcmdfZW50cnksIGdmcCwgb3JkZXIsXG4tXHRcdFx0XHRcdCB2bWYsIG1wb2wsIGlseCk7XG4rXHRcdFx0XHRcdCB2bWYsIG1wb2wsIGlseCwgc2tpcF9scnUpO1xuIFx0XHRpZiAoIUlTX0VSUihyZXQpKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRlcnIgPSBQVFJfRVJSKHJldCk7XG5AQCAtNjQzLDcgKzY0Niw4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLFxuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbiBcdFx0aWYgKGZvbGlvKVxuIFx0XHRcdHJldHVybiBmb2xpbztcbi1cdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcbitcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4LFxuK1x0XHRcdFx0XHQgICAgICAgZmFsc2UpO1xuIFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XG4gXG4gXHRpZiAoSVNfRVJSX09SX05VTEwoZm9saW8pKVxuQEAgLTY4Myw3ICs2ODcsOCBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbiBcdFx0aWYgKGZvbGlvKVxuIFx0XHRcdHJldHVybiBmb2xpbztcbi1cdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xuK1x0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCxcbitcdFx0XHRcdFx0ICAgICAgIGZhbHNlKTtcbiBcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuIFxuIFx0aWYgKElTX0VSUihmb2xpbykpXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IDc2MWNkNjk5ZTBhM2U2Li5kMTg1ZGE4NWJiNjhlZiAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbisrKyBiL21tL3pzd2FwLmNcbkBAIC0zNCw2ICszNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd3JpdGViYWNrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0X2xydS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvenNtYWxsb2MuaFx1MDAzZVxuIFxuQEAgLTk3Miw2ICs5NzMsNTcgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIHdyaXRlYmFjayBjb2RlXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbitzdGF0aWMgdm9pZCB6c3dhcF93cml0ZWJhY2tfZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGZvbGlvX2xvY2soZm9saW8pO1xuK1xuK1x0LyogVGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQgb2ZmIHRoZSBMUlUgYW5kIG5vdGhpbmcgcmUtYWRkcyBpdCBoZXJlLiAqL1xuK1x0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuK1xuK1x0LypcbitcdCAqIEdhdGUgcmVtb3ZlX21hcHBpbmcoKSBvbiBmb2xpb190ZXN0X3N3YXBjYWNoZSgpOiBhIHJhY2luZyBzd2FwaW4gbWF5XG4rXHQgKiBoYXZlIGZyZWVkIHRoZSBzd2FwIHNsb3QgKGZvbGlvX2ZyZWVfc3dhcCgpKSBhbmQgZHJvcHBlZCB0aGUgZm9saW8gZnJvbVxuK1x0ICogdGhlIGNhY2hlLCBhbmQgcmVtb3ZlX21hcHBpbmcoKSBtdXN0IG5vdCBydW4gb24gYSBub24tc3dhcGNhY2hlIGZvbGlvXG4rXHQgKiAoaXQgd291bGQgdHJpcCBfX3JlbW92ZV9tYXBwaW5nKCkncyBtYXBwaW5nID09IGZvbGlvX21hcHBpbmcoKSBjaGVjaykuXG4rXHQgKi9cbitcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykgXHUwMDI2XHUwMDI2XG4rXHQgICAgcmVtb3ZlX21hcHBpbmcoc3dhcF9hZGRyZXNzX3NwYWNlKGZvbGlvLVx1MDAzZXN3YXApLCBmb2xpbykpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogUmFjZWQ6IHRoZSBmb2xpbyBpcyBub3cgb3duZWQgYnkgdGhlIHN3YXBpbjsgcHV0IGl0IGJhY2sgb24gdGhlIExSVS4gKi9cbitcdGZvbGlvX2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pO1xuK1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4rb3V0OlxuK1x0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbitcdGZvbGlvX3B1dChmb2xpbyk7XG4rfVxuK1xuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbGxpc3RfaGVhZCwgenN3YXBfZHJvcGJlaGluZF9sbGlzdCk7XG4rXG4rc3RhdGljIHZvaWQgenN3YXBfZHJvcGJlaGluZF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpwb3MsICpuZXh0O1xuK1x0aW50IGNwdTtcbitcbitcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbitcdFx0cG9zID0gbGxpc3RfZGVsX2FsbChwZXJfY3B1X3B0cihcdTAwMjZ6c3dhcF9kcm9wYmVoaW5kX2xsaXN0LCBjcHUpKTtcbitcdFx0bGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIHBvcykge1xuK1x0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBjb250YWluZXJfb2YoKHN0cnVjdCBsaXN0X2hlYWQgKilwb3MsXG4rXHRcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgZm9saW8sIGxydSk7XG4rXHRcdFx0enN3YXBfd3JpdGViYWNrX2ZyZWVfZm9saW8oZm9saW8pO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBERUNMQVJFX1dPUksoenN3YXBfZHJvcGJlaGluZF93b3JrLCB6c3dhcF9kcm9wYmVoaW5kX3dvcmtmbik7XG4rXG4rdm9pZCB6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilcdTAwMjZmb2xpby1cdTAwM2VscnUsXG4rXHRcdCAgdGhpc19jcHVfcHRyKFx1MDAyNnpzd2FwX2Ryb3BiZWhpbmRfbGxpc3QpKTtcbitcdHNjaGVkdWxlX3dvcmsoXHUwMDI2enN3YXBfZHJvcGJlaGluZF93b3JrKTtcbit9XG4rXG4gLypcbiAgKiBBdHRlbXB0cyB0byBmcmVlIGFuIGVudHJ5IGJ5IGFkZGluZyBhIGZvbGlvIHRvIHRoZSBzd2FwIGNhY2hlLFxuICAqIGRlY29tcHJlc3NpbmcgdGhlIGVudHJ5IGRhdGEgaW50byB0aGUgZm9saW8sIGFuZCBpc3N1aW5nIGFcbkBAIC05OTIsMTYgKzEwNDQsMTggQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sO1xuIFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpO1xuK1x0Ym9vbCBzeW5jO1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHQvKiB0cnkgdG8gYWxsb2NhdGUgc3dhcCBjYWNoZSBmb2xpbyAqL1xuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpO1xuIFx0aWYgKCFzaSlcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXHRzeW5jID0gZGF0YV9yYWNlKHNpLVx1MDAzZWZsYWdzIFx1MDAyNiBTV1BfU1lOQ0hST05PVVNfSU8pO1xuIFxuIFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbiBcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxuLVx0XHRcdFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xuK1x0XHRcdFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgsIHRydWUpO1xuIFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcbiBcbiBcdC8qXG5AQCAtMTA0NSwxMiArMTA5OSwxOCBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0LyogZm9saW8gaXMgdXAgdG8gZGF0ZSAqL1xuIFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XG4gXG4tXHQvKiBtb3ZlIGl0IHRvIHRoZSB0YWlsIG9mIHRoZSBpbmFjdGl2ZSBsaXN0IGFmdGVyIGVuZF93cml0ZWJhY2sgKi9cbi1cdGZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTtcbitcdC8qIEZyZWUgdGhlIGZvbGlvIG9uY2Ugd3JpdGViYWNrIGNvbXBsZXRlczsgc2VlIGZvbGlvX2VuZF93cml0ZWJhY2soKS4gKi9cbitcdGlmICghc3luYylcbitcdFx0Zm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pO1xuIFxuIFx0Lyogc3RhcnQgd3JpdGViYWNrICovXG4gXHRfX3N3YXBfd3JpdGVwYWdlKGZvbGlvLCBOVUxMKTtcbiBcbitcdGlmIChzeW5jKSB7XG4rXHRcdHpzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvKGZvbGlvKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4gb3V0OlxuIFx0aWYgKHJldCkge1xuIFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxMDoxNTowOC4yNjM2NTc1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMzMTQxODc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBac3dhcCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgcG9raW5nIGFyb3VuZCBpbiB0aGUgenN3YXAgYW5kIHN3YXAgc3Vic3lzdGVtcy4gU3BlY2lmaWNhbGx5LCBpdCdzIHRvdWNoaW5nIGBtbS96c3dhcC5jYCwgYG1tL2ZpbGVtYXAuY2AsIGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L3pzd2FwLmhgLiBUaGF0J3MgYSBkZWNlbnQgc3ByZWFkLCBpbmRpY2F0aW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgbWlub3IgdHdlYWsuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYHpzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBhbmQgdGhlIG1vZGlmaWNhdGlvbiBvZiBgZm9saW9fZW5kX3dyaXRlYmFja2AgdG8gY2FsbCBpdCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGF0dGVudGlvbi4gUGx1cywgdGhlIGFsdGVyYXRpb24gb2YgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIHRvIHRha2UgYSBgc2tpcF9scnVgIHBhcmFtZXRlci4uLiB5ZWFoLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggc29tZSBzZXJpb3VzIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgbmVlZHMgdG8gYmUgb24gaWRlbnRpZnlpbmcgdGhlIGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBpbnRlcmFjdGlvbnMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCB3aGVyZSBlZGdlIGNhc2VzIGFyZSBsaWtlbHkgdG8gc3VyZmFjZS4gSSdtIHRoaW5raW5nIHRoZSBtYWluIHRhcmdldHMgd2lsbCBiZSBgenN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gLCBgenN3YXBfZHJvcGJlaGluZF93b3JrZm5gLCBgenN3YXBfd3JpdGViYWNrX2ZyZWVfZm9saW9gLCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgYW5kIG9mIGNvdXJzZSBgZm9saW9fZW5kX3dyaXRlYmFja2Agc2luY2UgaXQncyB0aGUgZ2F0ZXdheSBmb3IgdGhlIG5ldyBsb2dpYy4gQWxzbywgSSBjYW4ndCBmb3JnZXQgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBlc3BlY2lhbGx5IHdpdGggdGhhdCBuZXcgcGFyYW1ldGVyLlxuXG5Ob3csIGxldCdzIHNlZSBhYm91dCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gT2J2aW91c2x5LCBgQ09ORklHX1pTV0FQYCBpcyBhIG11c3QuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHZlcnkgY2xvc2VseSB0byBlbnN1cmUgSSBoYXZlIHRoZSByaWdodCBlbnZpcm9ubWVudCBzZXQgdXAgZm9yIGNvbXByZWhlbnNpdmUgdGVzdGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3JpdGljYWwgZm9yIHJlcHJvZHVjaW5nIHRoZSBhZmZlY3RlZCBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAwMywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDEwOjE1OjEzLjU5NTA3ODU3OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzExNTUyMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1pTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT03OD1vYmotJChDT05GSUdfU1dBUClcXHQrPSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cXG5tbS9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfWlNXQVApXFx0Kz0genN3YXAub1xcbm1tL01ha2VmaWxlLTgwLW9iai0kKENPTkZJR19IQVNfRE1BKVxcdCs9IGRtYXBvb2wub1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU1Mz1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NjktI2VuZGlmXFxubW0vbWVtY29udHJvbC5jOjU3MDojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTU3MS1cXHRaU1dQSU4sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTU0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG1lbW9yeV9zdGF0IG1lbW9yeV9zdGF0c1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTE1NTYtXFx0eyBcXFwic2htZW1cXFwiLFxcdFxcdFxcdE5SX1NITUVNXFx0XFx0XFx0fSxcXG5tbS9tZW1jb250cm9sLmM6MTU1NzojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTE1NTgtXFx0eyBcXFwienN3YXBcXFwiLFxcdFxcdFxcdE1FTUNHX1pTV0FQX0JcXHRcXHRcXHR9LFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQxNTc9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDE3MC1cXHRtZW1jZzFfc29mdF9saW1pdF9yZXNldChtZW1jZyk7XFxubW0vbWVtY29udHJvbC5jOjQxNzE6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy00MTcyLVxcdG1lbWNnLVxcdTAwM2V6c3dhcF9tYXggPSBQQUdFX0NPVU5URVJfTUFYO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU3ODk9c3RhdGljIHN0cnVjdCBjZnR5cGUgc3dhcF9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTU4MjMtXFxubW0vbWVtY29udHJvbC5jOjU4MjQ6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy01ODI1LS8qKlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTYwMDE9c3RhdGljIHN0cnVjdCBjZnR5cGUgenN3YXBfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MDE5LX07XFxubW0vbWVtY29udHJvbC5jOjYwMjA6I2VuZGlmIC8qIENPTkZJR19aU1dBUCAqL1xcbm1tL21lbWNvbnRyb2wuYy02MDIxLVxcbm1tL21lbWNvbnRyb2wuYz02MDIyPXN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfc3dhcF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjAzMC0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6NjAzMTojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTYwMzItXFx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHpzd2FwX2ZpbGVzKSk7XFxuLS1cXG5tbS92bXN0YXQuYz0xMTg3PWNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0ge1xcbi0tXFxubW0vdm1zdGF0LmMtMTQ1MC0jZW5kaWZcXG5tbS92bXN0YXQuYzoxNDUxOiNpZmRlZiBDT05GSUdfWlNXQVBcXG5tbS92bXN0YXQuYy0xNDUyLVxcdFtJKFpTV1BJTildXFx0XFx0XFx0XFx0PSBcXFwienN3cGluXFxcIixcXG4tLVxcbm1tL3pzd2FwLmM9ODc9c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKTtcXG4tLVxcbm1tL3pzd2FwLmMtODktLyogRW5hYmxlL2Rpc2FibGUgenN3YXAgKi9cXG5tbS96c3dhcC5jOjkwOnN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfWlNXQVBfREVGQVVMVF9PTiwgenN3YXBfZXZlcl9lbmFibGVkKTtcXG5tbS96c3dhcC5jOjkxOnN0YXRpYyBib29sIHpzd2FwX2VuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19aU1dBUF9ERUZBVUxUX09OKTtcXG5tbS96c3dhcC5jLTkyLXN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqLFxcbi0tXFxubW0venN3YXAuYz05OD1tb2R1bGVfcGFyYW1fY2IoZW5hYmxlZCwgXFx1MDAyNnpzd2FwX2VuYWJsZWRfcGFyYW1fb3BzLCBcXHUwMDI2enN3YXBfZW5hYmxlZCwgMDY0NCk7XFxuLS1cXG5tbS96c3dhcC5jLTEwMC0vKiBDcnlwdG8gY29tcHJlc3NvciB0byB1c2UgKi9cXG5tbS96c3dhcC5jOjEwMTpzdGF0aWMgY2hhciAqenN3YXBfY29tcHJlc3NvciA9IENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQ7XFxubW0venN3YXAuYy0xMDItc3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICosXFxuLS1cXG5tbS96c3dhcC5jPTEyMj1zdGF0aWMgYm9vbCB6c3dhcF9zaHJpbmtlcl9lbmFibGVkID0gSVNfRU5BQkxFRChcXG5tbS96c3dhcC5jOjEyMzpcXHRcXHRDT05GSUdfWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTik7XFxubW0venN3YXAuYy0xMjQtbW9kdWxlX3BhcmFtX25hbWVkKHNocmlua2VyX2VuYWJsZWQsIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQsIGJvb2wsIDA2NDQpO1xcbi0tXFxubW0venN3YXAuYz0xMzE9Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXFxubW0venN3YXAuYy0xMzIte1xcbm1tL3pzd2FwLmM6MTMzOlxcdHJldHVybiAhc3RhdGljX2JyYW5jaF9tYXliZShDT05GSUdfWlNXQVBfREVGQVVMVF9PTiwgXFx1MDAyNnpzd2FwX2V2ZXJfZW5hYmxlZCk7XFxubW0venN3YXAuYy0xMzQtfVxcbi0tXFxubW0venN3YXAuYz0zNDU9c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTM0Ny1cXHRpZiAoIWNyeXB0b19oYXNfYWNvbXAoenN3YXBfY29tcHJlc3NvciwgMCwgMCkgXFx1MDAyNlxcdTAwMjZcXG5tbS96c3dhcC5jOjM0ODpcXHQgICAgc3RyY21wKHpzd2FwX2NvbXByZXNzb3IsIENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQpKSB7XFxubW0venN3YXAuYy0zNDktXFx0XFx0cHJfZXJyKFxcXCJjb21wcmVzc29yICVzIG5vdCBhdmFpbGFibGUsIHVzaW5nIGRlZmF1bHQgJXNcXFxcblxcXCIsXFxubW0venN3YXAuYzozNTA6XFx0XFx0ICAgICAgIHpzd2FwX2NvbXByZXNzb3IsIENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQpO1xcbm1tL3pzd2FwLmMtMzUxLVxcdFxcdHBhcmFtX2ZyZWVfY2hhcnAoXFx1MDAyNnpzd2FwX2NvbXByZXNzb3IpO1xcbm1tL3pzd2FwLmM6MzUyOlxcdFxcdHpzd2FwX2NvbXByZXNzb3IgPSBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUO1xcbm1tL3pzd2FwLmMtMzUzLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTA6MTU6MTQuMDY2MjM4MjYzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ3NTkyODA1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFNpdHVhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZyB0aGF0J3Mgc3RhbmRpbmcgb3V0IHRvIG1lIGlzIGBaU1dBUGAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGFzc2VzcyBpZiB0aGF0J3MgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIGF0IHBsYXkuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGluIGVmZmVjdC4gSSBuZWVkIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlIGJlZm9yZSBqdW1waW5nIHRvIGFueSBjb25jbHVzaW9ucy4gTGV0J3Mgc2VlIHdoYXQgZWxzZSBpcyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA2NywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDEwOjE1OjE2LjU0MjE2NzgxN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYyMjA1MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1NXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTc2PWVuZGlmXFxubW0vTWFrZWZpbGUtNzctXFxubW0vTWFrZWZpbGU6Nzg6b2JqLSQoQ09ORklHX1NXQVApXFx0Kz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXFxubW0vTWFrZWZpbGUtNzktb2JqLSQoQ09ORklHX1pTV0FQKVxcdCs9IHpzd2FwLm9cXG4tLVxcbm1tL2ZpbGVtYXAuYz00NjIyPXN0YXRpYyB2b2lkIGZpbGVtYXBfY2FjaGVzdGF0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vZmlsZW1hcC5jLTQ2NjktXFxubW0vZmlsZW1hcC5jOjQ2NzA6I2lmZGVmIENPTkZJR19TV0FQIC8qIGltcGxpZXMgQ09ORklHX01NVSAqL1xcbm1tL2ZpbGVtYXAuYy00NjcxLVxcdFxcdFxcdGlmIChzaG1lbV9tYXBwaW5nKG1hcHBpbmcpKSB7XFxuLS1cXG5tbS9rc20uYz0zMTA3PXN0cnVjdCBmb2xpbyAqa3NtX21pZ2h0X25lZWRfdG9fY29weShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0va3NtLmMtMzE0Ni1cXHRcXHRfX2ZvbGlvX3NldF9sb2NrZWQobmV3X2ZvbGlvKTtcXG5tbS9rc20uYzozMTQ3OiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL2tzbS5jLTMxNDgtXFx0XFx0Y291bnRfdm1fZXZlbnQoS1NNX1NXUElOX0NPUFkpO1xcbi0tXFxubW0vbWFkdmlzZS5jPTE1MD1zdGF0aWMgaW50IG1hZHZpc2VfdXBkYXRlX3ZtYSh2bV9mbGFnc190IG5ld19mbGFncyxcXG4tLVxcbm1tL21hZHZpc2UuYy0xODUtXFxubW0vbWFkdmlzZS5jOjE4NjojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tYWR2aXNlLmMtMTg3LXN0YXRpYyBpbnQgc3dhcGluX3dhbGtfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9tYWR2aXNlLmM9MjM0PXN0YXRpYyB2b2lkIHNobWVtX3N3YXBpbl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21hZHZpc2UuYy0yNjktfVxcbm1tL21hZHZpc2UuYzoyNzA6I2VuZGlmXFx0XFx0LyogQ09ORklHX1NXQVAgKi9cXG5tbS9tYWR2aXNlLmMtMjcxLVxcbi0tXFxubW0vbWFkdmlzZS5jPTI4MT1zdGF0aWMgbG9uZyBtYWR2aXNlX3dpbGxuZWVkKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTI4OS1cXG5tbS9tYWR2aXNlLmM6MjkwOiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21hZHZpc2UuYy0yOTEtXFx0aWYgKCFmaWxlKSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9NTk2PXZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTYwNS1cXG5tbS9tZW1jb250cm9sLXYxLmM6NjA2OiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21lbWNvbnRyb2wtdjEuYy02MDctLyoqXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MTg2Nj1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnMV9zdGF0c1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4NzctXFx0V09SS0lOR1NFVF9SRUZBVUxUX0ZJTEUsXFxubW0vbWVtY29udHJvbC12MS5jOjE4Nzg6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vbWVtY29udHJvbC12MS5jLTE4NzktXFx0TUVNQ0dfU1dBUCxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xODg0PXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtZW1jZzFfc3RhdF9uYW1lc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4OTUtXFx0XFxcIndvcmtpbmdzZXRfcmVmYXVsdF9maWxlXFxcIixcXG5tbS9tZW1jb250cm9sLXYxLmM6MTg5NjojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLXYxLmMtMTg5Ny1cXHRcXFwic3dhcFxcXCIsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzcyPXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzk5LVxcdE5SX1NFQ09OREFSWV9QQUdFVEFCTEUsXFxubW0vbWVtY29udHJvbC5jOjQwMDojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLmMtNDAxLVxcdE5SX1NXQVBDQUNIRSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NTM9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTY1LVxcdFBHTEFaWUZSRUVELFxcbm1tL21lbWNvbnRyb2wuYzo1NjY6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vbWVtY29udHJvbC5jLTU2Ny1cXHRTV1BJTl9aRVJPLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE1NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNTY0LVxcdHsgXFxcImZpbGVfd3JpdGViYWNrXFxcIixcXHRcXHROUl9XUklURUJBQ0tcXHRcXHRcXHR9LFxcbm1tL21lbWNvbnRyb2wuYzoxNTY1OiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21lbWNvbnRyb2wuYy0xNTY2LVxcdHsgXFxcInN3YXBjYWNoZWRcXFwiLFxcdFxcdFxcdE5SX1NXQVBDQUNIRVxcdFxcdFxcdH0sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTUzNz1pbnQgX19pbml0IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU1NzItXFxubW0vbWVtY29udHJvbC5jOjU1NzM6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vbWVtY29udHJvbC5jLTU1NzQtLyoqXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NjAzNj1zdWJzeXNfaW5pdGNhbGwobWVtX2Nncm91cF9zd2FwX2luaXQpO1xcbm1tL21lbWNvbnRyb2wuYy02MDM3LVxcbm1tL21lbWNvbnRyb2wuYzo2MDM4OiNlbmRpZiAvKiBDT05GSUdfU1dBUCAqL1xcbm1tL21lbWNvbnRyb2wuYy02MDM5LVxcbi0tXFxubW0vbWlncmF0ZS5jPTU3MT1zdGF0aWMgaW50IF9fZm9saW9fbWlncmF0ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vbWlncmF0ZS5jLTY5MC1cXHRcXHR9XFxubW0vbWlncmF0ZS5jOjY5MTojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9taWdyYXRlLmMtNjkyLVxcdFxcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcXG4tLVxcbm1tL21pbmNvcmUuYz02MT1zdGF0aWMgdW5zaWduZWQgY2hhciBtaW5jb3JlX3N3YXAoc3dwX2VudHJ5X3QgZW50cnksIGJvb2wgc2htZW0pXFxuLS1cXG5tbS9taW5jb3JlLmMtNzQtXFxubW0vbWluY29yZS5jOjc1OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfU1dBUCkpIHtcXG5tbS9taW5jb3JlLmMtNzYtXFx0XFx0V0FSTl9PTigxKTtcXG4tLVxcbm1tL3N3YXAuaD02OT1lbnVtIHN3YXBfY2x1c3Rlcl9mbGFncyB7XFxuLS1cXG5tbS9zd2FwLmgtODAtXFxubW0vc3dhcC5oOjgxOiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL3N3YXAuaC04Mi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3dhcG9wcy5oXFx1MDAzZSAvKiBmb3Igc3dwX29mZnNldCAqL1xcbi0tXFxubW0vc3dhcC5oPTMzMz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb19zd2FwX2ZsYWdzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwLmgtMzM3LVxcbm1tL3N3YXAuaDozMzg6I2Vsc2UgLyogQ09ORklHX1NXQVAgKi9cXG5tbS9zd2FwLmgtMzM5LXN0cnVjdCBzd2FwX2lvY2I7XFxuLS1cXG5tbS9zd2FwLmg9NDcxPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3N3YXBfZmxhZ3Moc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXAuaC00NzUtXFxubW0vc3dhcC5oOjQ3NjojZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cXG5tbS9zd2FwLmgtNDc3LSNlbmRpZiAvKiBfTU1fU1dBUF9IICovXFxuLS1cXG5tbS92bWFfaW5pdC5jPTQxPXN0YXRpYyB2b2lkIHZtX2FyZWFfaW5pdF9mcm9tKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vdm1hX2luaXQuYy02NC0jZW5kaWZcXG5tbS92bWFfaW5pdC5jOjY1OiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL3ZtYV9pbml0LmMtNjYtXFx0bWVtY3B5KFxcdTAwMjZkZXN0LVxcdTAwM2Vzd2FwX3JlYWRhaGVhZF9pbmZvLCBcXHUwMDI2c3JjLVxcdTAwM2Vzd2FwX3JlYWRhaGVhZF9pbmZvLFxcbi0tXFxubW0vdm1zdGF0LmM9MTE4Nz1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcXG4tLVxcbm1tL3Ztc3RhdC5jLTEyNjctI2VuZGlmXFxubW0vdm1zdGF0LmM6MTI2ODojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS92bXN0YXQuYy0xMjY5LVxcdFtJKE5SX1NXQVBDQUNIRSldXFx0XFx0XFx0PSBcXFwibnJfc3dhcGNhY2hlZFxcXCIsXFxuLS1cXG5tbS92bXN0YXQuYy0xNDM4LVxcbm1tL3Ztc3RhdC5jOjE0Mzk6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vdm1zdGF0LmMtMTQ0MC1cXHRbSShTV0FQX1JBKV1cXHRcXHRcXHRcXHQ9IFxcXCJzd2FwX3JhXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTA6MTU6MTYuNjQ4Mzk0MDE5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3MDQyOTAyODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWnN3YXAgV3JpdGViYWNrIERyb3BiZWhpbmQgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gYENPTkZJR19aU1dBUGAsIGFuZCBzcGVjaWZpY2FsbHksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgd3JpdGViYWNrIHByb2Nlc3MuIFRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBgenN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gLiBJdCBhcHBlYXJzIHRvIGJlIHRyaWdnZXJlZCBmcm9tIGBmb2xpb19lbmRfd3JpdGViYWNrYCB3aXRoaW4gYG1tL2ZpbGVtYXAuY2AuIEVzc2VudGlhbGx5LCB0aGUgbG9naWMgaXM6IElmIGEgZm9saW8gaXMgaW4gc3dhcCBjYWNoZSBhbmQgbWFya2VkIGZvciBcImRyb3BiZWhpbmQsXCIgd2UgY2FsbCB0aGlzIG5ldyBmdW5jdGlvbi5cblxuSW5zaWRlIGB6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgKGluIGBtbS96c3dhcC5jYCksIHRoZSBmb2xpbyBpcyBhZGRlZCB0byBhIGxvY2FsIGxpc3QgYW5kIGEgd29ya3F1ZXVlLCBgenN3YXBfZHJvcGJlaGluZF93b3JrYCwgaXMgc2NoZWR1bGVkLiBUaGUgd29yayBmdW5jdGlvbiwgYHpzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuYCwgdGhlbiBjYWxscyBgenN3YXBfd3JpdGViYWNrX2ZyZWVfZm9saW9gLlxuXG5Ob3csIGB6c3dhcF93cml0ZWJhY2tfZnJlZV9mb2xpb2AgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gIEl0IGF0dGVtcHRzIHRvIHJlbW92ZSB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSwgYnV0IGNydWNpYWxseSwgaXQgY2hlY2tzIGBmb2xpb190ZXN0X3N3YXBjYWNoZWAgYmVmb3JlIGNhbGxpbmcgYHJlbW92ZV9tYXBwaW5nYC4gVGhlcmUncyBhbHNvIHNvbWUgaW50ZXJlc3RpbmcgbG9naWMgdG8gaGFuZGxlIHJhY2VzIHdpdGggYSBzd2FwaW4gb3BlcmF0aW9uLCBwb3RlbnRpYWxseSBwdXR0aW5nIHRoZSBmb2xpbyBiYWNrIG9uIHRoZSBMUlUgaWYgaXQncyBubyBsb25nZXIgYSBzd2FwIGNhY2hlIGZvbGlvLlxuXG5Mb29raW5nIGF0IGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCB0aGUgcGF0Y2ggbW9kaWZpZXMgaG93IGZvbGlvcyBhcmUgYWxsb2NhdGVkIGFuZCBtYXJrZWQgZm9yIHRoaXMgXCJkcm9wYmVoaW5kXCIgYmVoYXZpb3IuICBJZiB0aGUgd3JpdGViYWNrIGlzbid0IHN5bmNocm9ub3VzIChgc3luY2AgaXMgZmFsc2UpLCB0aGUgZm9saW8gaXMgc2V0IHdpdGggYGZvbGlvX3NldF9kcm9wYmVoaW5kYCwgYW5kIHdyaXRlYmFjayBpcyBpbml0aWF0ZWQuIFRoZSBwYXRjaCBhZGRzIGEgY29uZGl0aW9uYWwgYHpzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvYCBjYWxsIGFmdGVyIHRoZSB3cml0ZWJhY2suIFRoaXMgaXMgYSBjcnVjaWFsIGRpZmZlcmVuY2UgaW4gYmVoYXZpb3IuXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIHRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdvcnRoIGZ1enppbmcuIEknbGwgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzOiBgenN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gLCBgenN3YXBfZHJvcGJlaGluZF93b3JrZm5gLCBgenN3YXBfd3JpdGViYWNrX2ZyZWVfZm9saW9gLCBhbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAuIFRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBgWlNXQVBgIGFuZCBgU1dBUGAsIHdpdGggYFpTV0FQYCBkZXBlbmRlbnQgb24gYFNXQVBgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAgc3Vic3lzdGVtcyBhbmQgcmVwcmVzZW50cyBhIG5ldyBtZXRob2QgZm9yIGhhbmRpbmcgenN3YXAgd3JpdGViYWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTQ1LCJPdXRwdXRUb2tlbnMiOjEyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxMDoxNToyNy4zNTI2ODU3NzRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTg3OTMyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNXQVBcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb1wiLFxuICAgIFwienN3YXBfZHJvcGJlaGluZF93b3JrZm5cIixcbiAgICBcInpzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvXCIsXG4gICAgXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgaGFuZGxpbmcgenN3YXAgd3JpdGViYWNrIGRyb3BiZWhpbmQgZm9saW9zLCBpbmNsdWRpbmcgYSBuZXcgd29ya3F1ZXVlIGFuZCBvZmYtTFJVIGZvbGlvIG1hbmFnZW1lbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIHN1YnN5c3RlbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNXQVBcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb1wiLFxuICAgIFwienN3YXBfZHJvcGJlaGluZF93b3JrZm5cIixcbiAgICBcInpzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvXCIsXG4gICAgXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgaGFuZGxpbmcgenN3YXAgd3JpdGViYWNrIGRyb3BiZWhpbmQgZm9saW9zLCBpbmNsdWRpbmcgYSBuZXcgd29ya3F1ZXVlIGFuZCBvZmYtTFJVIGZvbGlvIG1hbmFnZW1lbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIHN1YnN5c3RlbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqgxw[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-18 09:53:19 +0000 UTC FinishedAt: 2026-07-18 10:15:29 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "94515f3a7d4256a5062176b7d6ed0471938cd51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "SWAP" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "94515f3a7d4256a5062176b7d6ed0471938cd51a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "ZSWAP", "SWAP" ], "series_id": "ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "zswap_writeback_dropbehind_folio", "zswap_dropbehind_workfn", "zswap_writeback_free_folio", "zswap_writeback_entry" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDEwOjE1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyYjMzQ7LAogICAgJiMzNDt6c3dhcF9kcm9wYmVoaW5kX3dvcmtmbiYjMzQ7LAogICAgJiMzNDt6c3dhcF93cml0ZWJhY2tfZnJlZV9mb2xpbyYjMzQ7LAogICAgJiMzNDt6c3dhcF93cml0ZWJhY2tfZW50cnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtZWNoYW5pc20gZm9yIGhhbmRsaW5nIHpzd2FwIHdyaXRlYmFjayBkcm9wYmVoaW5kIGZvbGlvcywgaW5jbHVkaW5nIGEgbmV3IHdvcmtxdWV1ZSBhbmQgb2ZmLUxSVSBmb2xpbyBtYW5hZ2VtZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3dhcCBzdWJzeXN0ZW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzE4IDEwOjE1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZDZkZjUyNjJkNWNhODFmZTlkMzY1NGM5YmVlYzAzNzIxNjBlYmQ4MVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDE4IDEwOjE1OjA1IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvenN3YXAuaCBiL2luY2x1ZGUvbGludXgvenN3YXAuaFxuaW5kZXggMzBjMTkzYTEyMDdlMTYuLjIzZGNkZTI3NDk2NDdhIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC96c3dhcC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbkBAIC0zNSw2ICYjNDM7MzUsNyBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG4gdm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpO1xuIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcbiYjNDM7dm9pZCB6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcbiAjZWxzZVxuIFxuIHN0cnVjdCB6c3dhcF9scnV2ZWNfc3RhdGUge307XG5AQCAtNTgsNiAmIzQzOzU5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHpzd2FwX3N3YXBvZmYoaW50IHR5cGUpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIHpzd2FwX21lbWNnX29mZmxpbmVfY2xlYW51cChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYykge31cbiBzdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pIHt9XG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKSB7fVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggNThlYjlkMjQwNjQzNDguLjk1ZDY0MDk3ODBmNGQ3IDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9maWxlbWFwLmNcbkBAIC0yMSw2ICYjNDM7MjEsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2dmcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbW0uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N3YXAuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC96c3dhcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGVhZm9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzY2FsbHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L21tYW4uaFx1MDAzZVxuQEAgLTE2ODAsNiAmIzQzOzE2ODEsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQpO1xuICAqL1xuIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbiYjNDM7XHRib29sIHN3YXBfZHJvcGJlaGluZDtcbiYjNDM7XG4gXHRWTV9CVUdfT05fRk9MSU8oIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSwgZm9saW8pO1xuIFxuIFx0LypcbkBAIC0xNjg5LDcgJiM0MzsxNjkyLDI0IEBAIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0ICogcmV1c2VkIGJlZm9yZSB0aGUgZm9saW9fd2FrZV9iaXQoKS5cbiBcdCAqL1xuIFx0Zm9saW9fZ2V0KGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiB6c3dhcCB3cml0ZWJhY2sgZm9saW9zIGFyZSBvZmYtTFJVLCBzbyB3ZSBtdXN0IHByZXZlbnQgYSByYWNpbmdcbiYjNDM7XHQgKiBzd2FwaW4gZnJvbSByZW1vdmluZyB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSBhbmQga2VlcGluZyBpdFxuJiM0MztcdCAqIG9mZi1MUlU6IHRoZSB3cml0ZWJhY2sgZmxhZyBhbGxvd3MgdGhhdC4gQWZ0ZXJ3YXJkcyBhIHN3YXBpbiBtYXkgd2luXG4mIzQzO1x0ICogdGhlIHJhY2UsIGJ1dCB0aGUgZm9saW8gaXMgYWxyZWFkeSBxdWV1ZWQgYW5kIHRoZSB3b3JrZXIgcHV0cyBpdCBiYWNrXG4mIzQzO1x0ICogb24gdGhlIExSVSBpbiB0aGF0IGNhc2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3dhcF9kcm9wYmVoaW5kID0gZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0XHQgIGZvbGlvX3Rlc3RfZHJvcGJlaGluZChmb2xpbyk7XG4mIzQzO1xuIFx0Zm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0aWYgKHN3YXBfZHJvcGJlaGluZCkge1xuJiM0MztcdFx0enN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oZm9saW8pO1xuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRmb2xpb19lbmRfZHJvcGJlaGluZChmb2xpbyk7XG4gXHRmb2xpb19wdXQoZm9saW8pO1xuIH1cbmRpZmYgLS1naXQgYS9tbS9zd2FwLmggYi9tbS9zd2FwLmhcbmluZGV4IDc3ZDJkMTRlZGE0MjFlLi5jNjE3ZTVhMDI1N2Y0NiAxMDA2NDRcbi0tLSBhL21tL3N3YXAuaFxuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcC5oXG5AQCAtMzA2LDcgJiM0MzszMDYsOCBAQCB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpO1xuIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi1cdFx0XHRcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpO1xuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsXG4mIzQzO1x0XHRcdFx0ICAgICBib29sIHNraXBfbHJ1KTtcbiAvKiBCZWxvdyBoZWxwZXJzIHJlcXVpcmUgdGhlIGNhbGxlciB0byBsb2NrIGFuZCBwYXNzIGluIHRoZSBzd2FwIGNsdXN0ZXIuICovXG4gdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRcdFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTtcbmRpZmYgLS1naXQgYS9tbS9zd2FwX3N0YXRlLmMgYi9tbS9zd2FwX3N0YXRlLmNcbmluZGV4IDljM2E1Y2Y5OTc3ODYwLi4wNDhlZmM3Y2E2MTI0MCAxMDA2NDRcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc3dhcF9zdGF0ZS5jXG5AQCAtNDAzLDcgJiM0Mzs0MDMsOCBAQCB2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRcdFx0XHRcdHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi1cdFx0XHRcdFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCxcbiYjNDM7XHRcdFx0XHRcdGJvb2wgc2tpcF9scnUpXG4ge1xuIFx0aW50IGVycjtcbiBcdHN3cF9lbnRyeV90IGVudHJ5O1xuQEAgLTQ4NCw3ICYjNDM7NDg1LDggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpO1xuIFxuIFx0LyogQ2FsbGVyIHdpbGwgaW5pdGlhdGUgcmVhZCBpbnRvIGxvY2tlZCBuZXdfZm9saW8gKi9cbi1cdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuJiM0MztcdGlmICghc2tpcF9scnUpXG4mIzQzO1x0XHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcbiBcdHJldHVybiBmb2xpbztcbiB9XG4gXG5AQCAtNTA3LDcgJiM0Mzs1MDksOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKi9cbiBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuIFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuJiM0MztcdFx0XHRcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsXG4mIzQzO1x0XHRcdFx0ICAgICBib29sIHNraXBfbHJ1KVxuIHtcbiBcdGludCBvcmRlciwgZXJyO1xuIFx0c3RydWN0IGZvbGlvICpyZXQ7XG5AQCAtNTIyLDcgJiM0Mzs1MjUsNyBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuIFxuIFx0ZG8ge1xuIFx0XHRyZXQgPSBfX3N3YXBfY2FjaGVfYWxsb2MoY2ksIHRhcmdfZW50cnksIGdmcCwgb3JkZXIsXG4tXHRcdFx0XHRcdCB2bWYsIG1wb2wsIGlseCk7XG4mIzQzO1x0XHRcdFx0XHQgdm1mLCBtcG9sLCBpbHgsIHNraXBfbHJ1KTtcbiBcdFx0aWYgKCFJU19FUlIocmV0KSlcbiBcdFx0XHRicmVhaztcbiBcdFx0ZXJyID0gUFRSX0VSUihyZXQpO1xuQEAgLTY0Myw3ICYjNDM7NjQ2LDggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsXG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xuJiM0MztcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4LFxuJiM0MztcdFx0XHRcdFx0ICAgICAgIGZhbHNlKTtcbiBcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuIFxuIFx0aWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSlcbkBAIC02ODMsNyAmIzQzOzY4Nyw4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXG4gXHRcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xuIFx0XHRpZiAoZm9saW8pXG4gXHRcdFx0cmV0dXJuIGZvbGlvO1xuLVx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCk7XG4mIzQzO1x0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgICBmYWxzZSk7XG4gXHR9IHdoaWxlIChQVFJfRVJSKGZvbGlvKSA9PSAtRUVYSVNUKTtcbiBcbiBcdGlmIChJU19FUlIoZm9saW8pKVxuZGlmZiAtLWdpdCBhL21tL3pzd2FwLmMgYi9tbS96c3dhcC5jXG5pbmRleCA3NjFjZDY5OWUwYTNlNi4uZDE4NWRhODViYjY4ZWYgMTAwNjQ0XG4tLS0gYS9tbS96c3dhcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS96c3dhcC5jXG5AQCAtMzQsNiAmIzQzOzM0LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93cml0ZWJhY2suaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0X2xydS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvenNtYWxsb2MuaFx1MDAzZVxuIFxuQEAgLTk3Miw2ICYjNDM7OTczLDU3IEBAIHN0YXRpYyBib29sIHpzd2FwX2RlY29tcHJlc3Moc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSwgc3RydWN0IGZvbGlvICpmb2xpbylcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4gKiB3cml0ZWJhY2sgY29kZVxuICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovXG4mIzQzO3N0YXRpYyB2b2lkIHpzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRmb2xpb19sb2NrKGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0LyogVGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQgb2ZmIHRoZSBMUlUgYW5kIG5vdGhpbmcgcmUtYWRkcyBpdCBoZXJlLiAqL1xuJiM0MztcdFZNX1dBUk5fT05fT05DRV9GT0xJTyhmb2xpb190ZXN0X2xydShmb2xpbyksIGZvbGlvKTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBHYXRlIHJlbW92ZV9tYXBwaW5nKCkgb24gZm9saW9fdGVzdF9zd2FwY2FjaGUoKTogYSByYWNpbmcgc3dhcGluIG1heVxuJiM0MztcdCAqIGhhdmUgZnJlZWQgdGhlIHN3YXAgc2xvdCAoZm9saW9fZnJlZV9zd2FwKCkpIGFuZCBkcm9wcGVkIHRoZSBmb2xpbyBmcm9tXG4mIzQzO1x0ICogdGhlIGNhY2hlLCBhbmQgcmVtb3ZlX21hcHBpbmcoKSBtdXN0IG5vdCBydW4gb24gYSBub24tc3dhcGNhY2hlIGZvbGlvXG4mIzQzO1x0ICogKGl0IHdvdWxkIHRyaXAgX19yZW1vdmVfbWFwcGluZygpJiMzOTtzIG1hcHBpbmcgPT0gZm9saW9fbWFwcGluZygpIGNoZWNrKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICByZW1vdmVfbWFwcGluZyhzd2FwX2FkZHJlc3Nfc3BhY2UoZm9saW8tXHUwMDNlc3dhcCksIGZvbGlvKSlcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHQvKiBSYWNlZDogdGhlIGZvbGlvIGlzIG5vdyBvd25lZCBieSB0aGUgc3dhcGluOyBwdXQgaXQgYmFjayBvbiB0aGUgTFJVLiAqL1xuJiM0MztcdGZvbGlvX2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pO1xuJiM0MztcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuJiM0MztvdXQ6XG4mIzQzO1x0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiYjNDM7XHRmb2xpb19wdXQoZm9saW8pO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IGxsaXN0X2hlYWQsIHpzd2FwX2Ryb3BiZWhpbmRfbGxpc3QpO1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgenN3YXBfZHJvcGJlaGluZF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKnBvcywgKm5leHQ7XG4mIzQzO1x0aW50IGNwdTtcbiYjNDM7XG4mIzQzO1x0Zm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkge1xuJiM0MztcdFx0cG9zID0gbGxpc3RfZGVsX2FsbChwZXJfY3B1X3B0cihcdTAwMjZ6c3dhcF9kcm9wYmVoaW5kX2xsaXN0LCBjcHUpKTtcbiYjNDM7XHRcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCBwb3MpIHtcbiYjNDM7XHRcdFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGNvbnRhaW5lcl9vZigoc3RydWN0IGxpc3RfaGVhZCAqKXBvcyxcbiYjNDM7XHRcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgZm9saW8sIGxydSk7XG4mIzQzO1x0XHRcdHpzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvKGZvbGlvKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBERUNMQVJFX1dPUksoenN3YXBfZHJvcGJlaGluZF93b3JrLCB6c3dhcF9kcm9wYmVoaW5kX3dvcmtmbik7XG4mIzQzO1xuJiM0Mzt2b2lkIHpzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4mIzQzO3tcbiYjNDM7XHRsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LFxuJiM0MztcdFx0ICB0aGlzX2NwdV9wdHIoXHUwMDI2enN3YXBfZHJvcGJlaGluZF9sbGlzdCkpO1xuJiM0MztcdHNjaGVkdWxlX3dvcmsoXHUwMDI2enN3YXBfZHJvcGJlaGluZF93b3JrKTtcbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIEF0dGVtcHRzIHRvIGZyZWUgYW4gZW50cnkgYnkgYWRkaW5nIGEgZm9saW8gdG8gdGhlIHN3YXAgY2FjaGUsXG4gICogZGVjb21wcmVzc2luZyB0aGUgZW50cnkgZGF0YSBpbnRvIHRoZSBmb2xpbywgYW5kIGlzc3VpbmcgYVxuQEAgLTk5MiwxNiAmIzQzOzEwNDQsMTggQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sO1xuIFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpO1xuJiM0MztcdGJvb2wgc3luYztcbiBcdGludCByZXQgPSAwO1xuIFxuIFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cbiBcdHNpID0gZ2V0X3N3YXBfZGV2aWNlKHN3cGVudHJ5KTtcbiBcdGlmICghc2kpXG4gXHRcdHJldHVybiAtRUVYSVNUO1xuJiM0MztcdHN5bmMgPSBkYXRhX3JhY2Uoc2ktXHUwMDNlZmxhZ3MgXHUwMDI2IFNXUF9TWU5DSFJPTk9VU19JTyk7XG4gXG4gXHRtcG9sID0gZ2V0X3Rhc2tfcG9saWN5KGN1cnJlbnQpO1xuIFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXG4tXHRcdFx0XHQgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7XG4mIzQzO1x0XHRcdFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgsIHRydWUpO1xuIFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcbiBcbiBcdC8qXG5AQCAtMTA0NSwxMiAmIzQzOzEwOTksMTggQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdC8qIGZvbGlvIGlzIHVwIHRvIGRhdGUgKi9cbiBcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xuIFxuLVx0LyogbW92ZSBpdCB0byB0aGUgdGFpbCBvZiB0aGUgaW5hY3RpdmUgbGlzdCBhZnRlciBlbmRfd3JpdGViYWNrICovXG4tXHRmb2xpb19zZXRfcmVjbGFpbShmb2xpbyk7XG4mIzQzO1x0LyogRnJlZSB0aGUgZm9saW8gb25jZSB3cml0ZWJhY2sgY29tcGxldGVzOyBzZWUgZm9saW9fZW5kX3dyaXRlYmFjaygpLiAqL1xuJiM0MztcdGlmICghc3luYylcbiYjNDM7XHRcdGZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTtcbiBcbiBcdC8qIHN0YXJ0IHdyaXRlYmFjayAqL1xuIFx0X19zd2FwX3dyaXRlcGFnZShmb2xpbywgTlVMTCk7XG4gXG4mIzQzO1x0aWYgKHN5bmMpIHtcbiYjNDM7XHRcdHpzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvKGZvbGlvKTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XG4gb3V0OlxuIFx0aWYgKHJldCkge1xuIFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTA6MTU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvJiMzNDssCiAgICAmIzM0O3pzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuJiMzNDssCiAgICAmIzM0O3pzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvJiMzNDssCiAgICAmIzM0O3pzd2FwX3dyaXRlYmFja19lbnRyeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgaGFuZGxpbmcgenN3YXAgd3JpdGViYWNrIGRyb3BiZWhpbmQgZm9saW9zLCBpbmNsdWRpbmcgYSBuZXcgd29ya3F1ZXVlIGFuZCBvZmYtTFJVIGZvbGlvIG1hbmFnZW1lbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIHN1YnN5c3RlbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGQ2ZGY1MjYyZDVjYTgxZmU5ZDM2NTRjOWJlZWMwMzcyMTYwZWJkODEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IEp1bCAxOCAxMDoxNTowNSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvenN3YXAuaCBiL2luY2x1ZGUvbGludXgvenN3YXAuaAppbmRleCAzMGMxOTNhMTIwN2UxNi4uMjNkY2RlMjc0OTY0N2EgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvenN3YXAuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmgKQEAgLTM1LDYgJiM0MzszNSw3IEBAIHZvaWQgenN3YXBfbHJ1dmVjX3N0YXRlX2luaXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKTsKIHZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pOwogYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpOwogYm9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpOwomIzQzO3ZvaWQgenN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7CiAjZWxzZQogCiBzdHJ1Y3QgenN3YXBfbHJ1dmVjX3N0YXRlIHt9OwpAQCAtNTgsNiAmIzQzOzU5LDcgQEAgc3RhdGljIGlubGluZSB2b2lkIHpzd2FwX3N3YXBvZmYoaW50IHR5cGUpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge30KIHN0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpIHt9CiBzdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfZm9saW9fc3dhcGluKHN0cnVjdCBmb2xpbyAqZm9saW8pIHt9CiYjNDM7c3RhdGljIGlubGluZSB2b2lkIHpzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pIHt9CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpCiB7CmRpZmYgLS1naXQgYS9tbS9maWxlbWFwLmMgYi9tbS9maWxlbWFwLmMKaW5kZXggNThlYjlkMjQwNjQzNDguLjk1ZDY0MDk3ODBmNGQ3IDEwMDY0NAotLS0gYS9tbS9maWxlbWFwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vZmlsZW1hcC5jCkBAIC0yMSw2ICYjNDM7MjEsNyBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2dmcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc3dhcC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC96c3dhcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2xlYWZvcHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zeXNjYWxscy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21tYW4uaCZndDsKQEAgLTE2ODAsNiAmIzQzOzE2ODEsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQpOwogICovCiB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbykKIHsKJiM0MzsJYm9vbCBzd2FwX2Ryb3BiZWhpbmQ7CiYjNDM7CiAJVk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTsKIAogCS8qCkBAIC0xNjg5LDcgJiM0MzsxNjkyLDI0IEBAIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKQogCSAqIHJldXNlZCBiZWZvcmUgdGhlIGZvbGlvX3dha2VfYml0KCkuCiAJICovCiAJZm9saW9fZ2V0KGZvbGlvKTsKJiM0MzsKJiM0MzsJLyoKJiM0MzsJICogenN3YXAgd3JpdGViYWNrIGZvbGlvcyBhcmUgb2ZmLUxSVSwgc28gd2UgbXVzdCBwcmV2ZW50IGEgcmFjaW5nCiYjNDM7CSAqIHN3YXBpbiBmcm9tIHJlbW92aW5nIHRoZSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBrZWVwaW5nIGl0CiYjNDM7CSAqIG9mZi1MUlU6IHRoZSB3cml0ZWJhY2sgZmxhZyBhbGxvd3MgdGhhdC4gQWZ0ZXJ3YXJkcyBhIHN3YXBpbiBtYXkgd2luCiYjNDM7CSAqIHRoZSByYWNlLCBidXQgdGhlIGZvbGlvIGlzIGFscmVhZHkgcXVldWVkIGFuZCB0aGUgd29ya2VyIHB1dHMgaXQgYmFjawomIzQzOwkgKiBvbiB0aGUgTFJVIGluIHRoYXQgY2FzZS4KJiM0MzsJICovCiYjNDM7CXN3YXBfZHJvcGJlaGluZCA9IGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSAmYW1wOyZhbXA7CiYjNDM7CQkJICBmb2xpb190ZXN0X2Ryb3BiZWhpbmQoZm9saW8pOwomIzQzOwogCWZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7CiYjNDM7CiYjNDM7CWlmIChzd2FwX2Ryb3BiZWhpbmQpIHsKJiM0MzsJCXpzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKGZvbGlvKTsKJiM0MzsJCXJldHVybjsKJiM0MzsJfQomIzQzOwogCWZvbGlvX2VuZF9kcm9wYmVoaW5kKGZvbGlvKTsKIAlmb2xpb19wdXQoZm9saW8pOwogfQpkaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oCmluZGV4IDc3ZDJkMTRlZGE0MjFlLi5jNjE3ZTVhMDI1N2Y0NiAxMDA2NDQKLS0tIGEvbW0vc3dhcC5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXAuaApAQCAtMzA2LDcgJiM0MzszMDYsOCBAQCB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpOwogdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTsKIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnZXRfZW50cnksIGdmcF90IGdmcF9tYXNrLAogCQkJCSAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAotCQkJCSAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpOwomIzQzOwkJCQkgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LAomIzQzOwkJCQkgICAgIGJvb2wgc2tpcF9scnUpOwogLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqLwogdm9pZCBfX3N3YXBfY2FjaGVfYWRkX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiAJCQkgICAgc3RydWN0IGZvbGlvICpmb2xpbywgc3dwX2VudHJ5X3QgZW50cnkpOwpkaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jCmluZGV4IDljM2E1Y2Y5OTc3ODYwLi4wNDhlZmM3Y2E2MTI0MCAxMDA2NDQKLS0tIGEvbW0vc3dhcF9zdGF0ZS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3N3YXBfc3RhdGUuYwpAQCAtNDAzLDcgJiM0Mzs0MDMsOCBAQCB2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksCiBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAkJCQkJc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLAogCQkJCQl1bnNpZ25lZCBpbnQgb3JkZXIsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLAotCQkJCQlzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCkKJiM0MzsJCQkJCXN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LAomIzQzOwkJCQkJYm9vbCBza2lwX2xydSkKIHsKIAlpbnQgZXJyOwogCXN3cF9lbnRyeV90IGVudHJ5OwpAQCAtNDg0LDcgJiM0Mzs0ODUsOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKIAlscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpOwogCiAJLyogQ2FsbGVyIHdpbGwgaW5pdGlhdGUgcmVhZCBpbnRvIGxvY2tlZCBuZXdfZm9saW8gKi8KLQlmb2xpb19hZGRfbHJ1KGZvbGlvKTsKJiM0MzsJaWYgKCFza2lwX2xydSkKJiM0MzsJCWZvbGlvX2FkZF9scnUoZm9saW8pOwogCXJldHVybiBmb2xpbzsKIH0KIApAQCAtNTA3LDcgJiM0Mzs1MDksOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSwKICAqLwogc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCwKIAkJCQkgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZiwKLQkJCQkgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KQomIzQzOwkJCQkgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LAomIzQzOwkJCQkgICAgIGJvb2wgc2tpcF9scnUpCiB7CiAJaW50IG9yZGVyLCBlcnI7CiAJc3RydWN0IGZvbGlvICpyZXQ7CkBAIC01MjIsNyAmIzQzOzUyNSw3IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsCiAKIAlkbyB7CiAJCXJldCA9IF9fc3dhcF9jYWNoZV9hbGxvYyhjaSwgdGFyZ19lbnRyeSwgZ2ZwLCBvcmRlciwKLQkJCQkJIHZtZiwgbXBvbCwgaWx4KTsKJiM0MzsJCQkJCSB2bWYsIG1wb2wsIGlseCwgc2tpcF9scnUpOwogCQlpZiAoIUlTX0VSUihyZXQpKQogCQkJYnJlYWs7CiAJCWVyciA9IFBUUl9FUlIocmV0KTsKQEAgLTY0Myw3ICYjNDM7NjQ2LDggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9yZWFkX2ZvbGlvKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsCiAJCWZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpOwogCQlpZiAoZm9saW8pCiAJCQlyZXR1cm4gZm9saW87Ci0JCWZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhlbnRyeSwgZ2ZwLCBCSVQoMCksIE5VTEwsIG1wb2wsIGlseCk7CiYjNDM7CQlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgsCiYjNDM7CQkJCQkgICAgICAgZmFsc2UpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSkKQEAgLTY4Myw3ICYjNDM7Njg3LDggQEAgc3RydWN0IGZvbGlvICpzd2FwaW5fc3luYyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBsb25nIG9yZGVycywKIAkJZm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7CiAJCWlmIChmb2xpbykKIAkJCXJldHVybiBmb2xpbzsKLQkJZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpOwomIzQzOwkJZm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgsCiYjNDM7CQkJCQkgICAgICAgZmFsc2UpOwogCX0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpOwogCiAJaWYgKElTX0VSUihmb2xpbykpCmRpZmYgLS1naXQgYS9tbS96c3dhcC5jIGIvbW0venN3YXAuYwppbmRleCA3NjFjZDY5OWUwYTNlNi4uZDE4NWRhODViYjY4ZWYgMTAwNjQ0Ci0tLSBhL21tL3pzd2FwLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0venN3YXAuYwpAQCAtMzQsNiAmIzQzOzM0LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC93cml0ZWJhY2suaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9wYWdlbWFwLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xsaXN0LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvbGlzdF9scnUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC96c21hbGxvYy5oJmd0OwogCkBAIC05NzIsNiAmIzQzOzk3Myw1NyBAQCBzdGF0aWMgYm9vbCB6c3dhcF9kZWNvbXByZXNzKHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksIHN0cnVjdCBmb2xpbyAqZm9saW8pCiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAqIHdyaXRlYmFjayBjb2RlCiAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwomIzQzO3N0YXRpYyB2b2lkIHpzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlmb2xpb19sb2NrKGZvbGlvKTsKJiM0MzsKJiM0MzsJLyogVGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQgb2ZmIHRoZSBMUlUgYW5kIG5vdGhpbmcgcmUtYWRkcyBpdCBoZXJlLiAqLwomIzQzOwlWTV9XQVJOX09OX09OQ0VfRk9MSU8oZm9saW9fdGVzdF9scnUoZm9saW8pLCBmb2xpbyk7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEdhdGUgcmVtb3ZlX21hcHBpbmcoKSBvbiBmb2xpb190ZXN0X3N3YXBjYWNoZSgpOiBhIHJhY2luZyBzd2FwaW4gbWF5CiYjNDM7CSAqIGhhdmUgZnJlZWQgdGhlIHN3YXAgc2xvdCAoZm9saW9fZnJlZV9zd2FwKCkpIGFuZCBkcm9wcGVkIHRoZSBmb2xpbyBmcm9tCiYjNDM7CSAqIHRoZSBjYWNoZSwgYW5kIHJlbW92ZV9tYXBwaW5nKCkgbXVzdCBub3QgcnVuIG9uIGEgbm9uLXN3YXBjYWNoZSBmb2xpbwomIzQzOwkgKiAoaXQgd291bGQgdHJpcCBfX3JlbW92ZV9tYXBwaW5nKCkmIzM5O3MgbWFwcGluZyA9PSBmb2xpb19tYXBwaW5nKCkgY2hlY2spLgomIzQzOwkgKi8KJiM0MzsJaWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSAmYW1wOyZhbXA7CiYjNDM7CSAgICByZW1vdmVfbWFwcGluZyhzd2FwX2FkZHJlc3Nfc3BhY2UoZm9saW8tJmd0O3N3YXApLCBmb2xpbykpCiYjNDM7CQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJLyogUmFjZWQ6IHRoZSBmb2xpbyBpcyBub3cgb3duZWQgYnkgdGhlIHN3YXBpbjsgcHV0IGl0IGJhY2sgb24gdGhlIExSVS4gKi8KJiM0MzsJZm9saW9fY2xlYXJfZHJvcGJlaGluZChmb2xpbyk7CiYjNDM7CWZvbGlvX2FkZF9scnUoZm9saW8pOwomIzQzO291dDoKJiM0MzsJZm9saW9fdW5sb2NrKGZvbGlvKTsKJiM0MzsJZm9saW9fcHV0KGZvbGlvKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBsbGlzdF9oZWFkLCB6c3dhcF9kcm9wYmVoaW5kX2xsaXN0KTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCB6c3dhcF9kcm9wYmVoaW5kX3dvcmtmbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqcG9zLCAqbmV4dDsKJiM0MzsJaW50IGNwdTsKJiM0MzsKJiM0MzsJZm9yX2VhY2hfcG9zc2libGVfY3B1KGNwdSkgewomIzQzOwkJcG9zID0gbGxpc3RfZGVsX2FsbChwZXJfY3B1X3B0cigmYW1wO3pzd2FwX2Ryb3BiZWhpbmRfbGxpc3QsIGNwdSkpOwomIzQzOwkJbGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIHBvcykgewomIzQzOwkJCXN0cnVjdCBmb2xpbyAqZm9saW8gPSBjb250YWluZXJfb2YoKHN0cnVjdCBsaXN0X2hlYWQgKilwb3MsCiYjNDM7CQkJCQkJCSAgIHN0cnVjdCBmb2xpbywgbHJ1KTsKJiM0MzsJCQl6c3dhcF93cml0ZWJhY2tfZnJlZV9mb2xpbyhmb2xpbyk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIERFQ0xBUkVfV09SSyh6c3dhcF9kcm9wYmVoaW5kX3dvcmssIHpzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuKTsKJiM0MzsKJiM0Mzt2b2lkIHpzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pCiYjNDM7ewomIzQzOwlsbGlzdF9hZGQoKHN0cnVjdCBsbGlzdF9ub2RlICopJmFtcDtmb2xpby0mZ3Q7bHJ1LAomIzQzOwkJICB0aGlzX2NwdV9wdHIoJmFtcDt6c3dhcF9kcm9wYmVoaW5kX2xsaXN0KSk7CiYjNDM7CXNjaGVkdWxlX3dvcmsoJmFtcDt6c3dhcF9kcm9wYmVoaW5kX3dvcmspOwomIzQzO30KJiM0MzsKIC8qCiAgKiBBdHRlbXB0cyB0byBmcmVlIGFuIGVudHJ5IGJ5IGFkZGluZyBhIGZvbGlvIHRvIHRoZSBzd2FwIGNhY2hlLAogICogZGVjb21wcmVzc2luZyB0aGUgZW50cnkgZGF0YSBpbnRvIHRoZSBmb2xpbywgYW5kIGlzc3VpbmcgYQpAQCAtOTkyLDE2ICYjNDM7MTA0NCwxOCBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LAogCXN0cnVjdCBmb2xpbyAqZm9saW87CiAJc3RydWN0IG1lbXBvbGljeSAqbXBvbDsKIAlzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2k7CiYjNDM7CWJvb2wgc3luYzsKIAlpbnQgcmV0ID0gMDsKIAogCS8qIHRyeSB0byBhbGxvY2F0ZSBzd2FwIGNhY2hlIGZvbGlvICovCiAJc2kgPSBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpOwogCWlmICghc2kpCiAJCXJldHVybiAtRUVYSVNUOwomIzQzOwlzeW5jID0gZGF0YV9yYWNlKHNpLSZndDtmbGFncyAmYW1wOyBTV1BfU1lOQ0hST05PVVNfSU8pOwogCiAJbXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTsKIAlmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwZW50cnksIEdGUF9LRVJORUwsIEJJVCgwKSwgTlVMTCwgbXBvbCwKLQkJCQkgICAgICAgTk9fSU5URVJMRUFWRV9JTkRFWCk7CiYjNDM7CQkJCSAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYLCB0cnVlKTsKIAlwdXRfc3dhcF9kZXZpY2Uoc2kpOwogCiAJLyoKQEAgLTEwNDUsMTIgJiM0MzsxMDk5LDE4IEBAIHN0YXRpYyBpbnQgenN3YXBfd3JpdGViYWNrX2VudHJ5KHN0cnVjdCB6c3dhcF9lbnRyeSAqZW50cnksCiAJLyogZm9saW8gaXMgdXAgdG8gZGF0ZSAqLwogCWZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pOwogCi0JLyogbW92ZSBpdCB0byB0aGUgdGFpbCBvZiB0aGUgaW5hY3RpdmUgbGlzdCBhZnRlciBlbmRfd3JpdGViYWNrICovCi0JZm9saW9fc2V0X3JlY2xhaW0oZm9saW8pOwomIzQzOwkvKiBGcmVlIHRoZSBmb2xpbyBvbmNlIHdyaXRlYmFjayBjb21wbGV0ZXM7IHNlZSBmb2xpb19lbmRfd3JpdGViYWNrKCkuICovCiYjNDM7CWlmICghc3luYykKJiM0MzsJCWZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTsKIAogCS8qIHN0YXJ0IHdyaXRlYmFjayAqLwogCV9fc3dhcF93cml0ZXBhZ2UoZm9saW8sIE5VTEwpOwogCiYjNDM7CWlmIChzeW5jKSB7CiYjNDM7CQl6c3dhcF93cml0ZWJhY2tfZnJlZV9mb2xpbyhmb2xpbyk7CiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJfQomIzQzOwogb3V0OgogCWlmIChyZXQpIHsKIAkJc3dhcF9jYWNoZV9kZWxfZm9saW8oZm9saW8pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MDAzCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMjUwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIFpzd2FwIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCBhIHBhdGNoIGhlcmUgdGhhdCYjMzk7cyBwb2tpbmcgYXJvdW5kIGluIHRoZSB6c3dhcCBhbmQgc3dhcCBzdWJzeXN0ZW1zLiBTcGVjaWZpY2FsbHksIGl0JiMzOTtzIHRvdWNoaW5nIGBtbS96c3dhcC5jYCwgYG1tL2ZpbGVtYXAuY2AsIGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L3pzd2FwLmhgLiBUaGF0JiMzOTtzIGEgZGVjZW50IHNwcmVhZCwgaW5kaWNhdGluZyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBub3QganVzdCBhIG1pbm9yIHR3ZWFrLiBUaGUgaW50cm9kdWN0aW9uIG9mIGB6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgYW5kIHRoZSBtb2RpZmljYXRpb24gb2YgYGZvbGlvX2VuZF93cml0ZWJhY2tgIHRvIGNhbGwgaXQgaW1tZWRpYXRlbHkgY2F0Y2hlcyBteSBhdHRlbnRpb24uIFBsdXMsIHRoZSBhbHRlcmF0aW9uIG9mIGBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvYCB0byB0YWtlIGEgYHNraXBfbHJ1YCBwYXJhbWV0ZXIuLi4geWVhaCwgdGhpcyBpcyBkZWZpbml0ZWx5IHdvcnRoIHNvbWUgc2VyaW91cyBmdXp6aW5nLgoKTXkgcHJpbWFyeSBmb2N1cyBuZWVkcyB0byBiZSBvbiBpZGVudGlmeWluZyB0aGUga2V5IGZ1bmN0aW9ucyBmb3IgZnV6emluZy4gSSBuZWVkIHRvIHplcm8gaW4gb24gdGhlIGludGVyYWN0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHdoZXJlIGVkZ2UgY2FzZXMgYXJlIGxpa2VseSB0byBzdXJmYWNlLiBJJiMzOTttIHRoaW5raW5nIHRoZSBtYWluIHRhcmdldHMgd2lsbCBiZSBgenN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gLCBgenN3YXBfZHJvcGJlaGluZF93b3JrZm5gLCBgenN3YXBfd3JpdGViYWNrX2ZyZWVfZm9saW9gLCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgYW5kIG9mIGNvdXJzZSBgZm9saW9fZW5kX3dyaXRlYmFja2Agc2luY2UgaXQmIzM5O3MgdGhlIGdhdGV3YXkgZm9yIHRoZSBuZXcgbG9naWMuIEFsc28sIEkgY2FuJiMzOTt0IGZvcmdldCBgc3dhcF9jYWNoZV9hbGxvY19mb2xpb2AsIGVzcGVjaWFsbHkgd2l0aCB0aGF0IG5ldyBwYXJhbWV0ZXIuCgpOb3csIGxldCYjMzk7cyBzZWUgYWJvdXQgdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIE9idmlvdXNseSwgYENPTkZJR19aU1dBUGAgaXMgYSBtdXN0LiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBLY29uZmlnIG9wdGlvbnMgdmVyeSBjbG9zZWx5IHRvIGVuc3VyZSBJIGhhdmUgdGhlIHJpZ2h0IGVudmlyb25tZW50IHNldCB1cCBmb3IgY29tcHJlaGVuc2l2ZSB0ZXN0aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3JpdGljYWwgZm9yIHJlcHJvZHVjaW5nIHRoZSBhZmZlY3RlZCBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfWlNXQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9Nzg9b2JqLSQoQ09ORklHX1NXQVApXHQmIzQzOz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXG5tbS9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfWlNXQVApXHQmIzQzOz0genN3YXAub1xubW0vTWFrZWZpbGUtODAtb2JqLSQoQ09ORklHX0hBU19ETUEpXHQmIzQzOz0gZG1hcG9vbC5vXG4tLVxubW0vbWVtY29udHJvbC5jPTU1Mz1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTY5LSNlbmRpZlxubW0vbWVtY29udHJvbC5jOjU3MDojaWZkZWYgQ09ORklHX1pTV0FQXG5tbS9tZW1jb250cm9sLmMtNTcxLVx0WlNXUElOLFxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNTQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3N0YXQgbWVtb3J5X3N0YXRzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTE1NTYtXHR7IFwmIzM0O3NobWVtXCYjMzQ7LFx0XHRcdE5SX1NITUVNXHRcdFx0fSxcbm1tL21lbWNvbnRyb2wuYzoxNTU3OiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy0xNTU4LVx0eyBcJiMzNDt6c3dhcFwmIzM0OyxcdFx0XHRNRU1DR19aU1dBUF9CXHRcdFx0fSxcbi0tXG5tbS9tZW1jb250cm9sLmM9NDE1Nz1tZW1fY2dyb3VwX2Nzc19hbGxvYyhzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqcGFyZW50X2Nzcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDE3MC1cdG1lbWNnMV9zb2Z0X2xpbWl0X3Jlc2V0KG1lbWNnKTtcbm1tL21lbWNvbnRyb2wuYzo0MTcxOiNpZmRlZiBDT05GSUdfWlNXQVBcbm1tL21lbWNvbnRyb2wuYy00MTcyLVx0bWVtY2ctXHUwMDNlenN3YXBfbWF4ID0gUEFHRV9DT1VOVEVSX01BWDtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTc4OT1zdGF0aWMgc3RydWN0IGNmdHlwZSBzd2FwX2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTU4MjMtXG5tbS9tZW1jb250cm9sLmM6NTgyNDojaWZkZWYgQ09ORklHX1pTV0FQXG5tbS9tZW1jb250cm9sLmMtNTgyNS0vKipcbi0tXG5tbS9tZW1jb250cm9sLmM9NjAwMT1zdGF0aWMgc3RydWN0IGNmdHlwZSB6c3dhcF9maWxlc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy02MDE5LX07XG5tbS9tZW1jb250cm9sLmM6NjAyMDojZW5kaWYgLyogQ09ORklHX1pTV0FQICovXG5tbS9tZW1jb250cm9sLmMtNjAyMS1cbm1tL21lbWNvbnRyb2wuYz02MDIyPXN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfc3dhcF9pbml0KHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTYwMzAtI2VuZGlmXG5tbS9tZW1jb250cm9sLmM6NjAzMTojaWZkZWYgQ09ORklHX1pTV0FQXG5tbS9tZW1jb250cm9sLmMtNjAzMi1cdFdBUk5fT04oY2dyb3VwX2FkZF9kZmxfY2Z0eXBlcyhcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHpzd2FwX2ZpbGVzKSk7XG4tLVxubW0vdm1zdGF0LmM9MTE4Nz1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcbi0tXG5tbS92bXN0YXQuYy0xNDUwLSNlbmRpZlxubW0vdm1zdGF0LmM6MTQ1MTojaWZkZWYgQ09ORklHX1pTV0FQXG5tbS92bXN0YXQuYy0xNDUyLVx0W0koWlNXUElOKV1cdFx0XHRcdD0gXCYjMzQ7enN3cGluXCYjMzQ7LFxuLS1cbm1tL3pzd2FwLmM9ODc9c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKTtcbi0tXG5tbS96c3dhcC5jLTg5LS8qIEVuYWJsZS9kaXNhYmxlIHpzd2FwICovXG5tbS96c3dhcC5jOjkwOnN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfWlNXQVBfREVGQVVMVF9PTiwgenN3YXBfZXZlcl9lbmFibGVkKTtcbm1tL3pzd2FwLmM6OTE6c3RhdGljIGJvb2wgenN3YXBfZW5hYmxlZCA9IElTX0VOQUJMRUQoQ09ORklHX1pTV0FQX0RFRkFVTFRfT04pO1xubW0venN3YXAuYy05Mi1zdGF0aWMgaW50IHpzd2FwX2VuYWJsZWRfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKixcbi0tXG5tbS96c3dhcC5jPTk4PW1vZHVsZV9wYXJhbV9jYihlbmFibGVkLCBcdTAwMjZ6c3dhcF9lbmFibGVkX3BhcmFtX29wcywgXHUwMDI2enN3YXBfZW5hYmxlZCwgMDY0NCk7XG4tLVxubW0venN3YXAuYy0xMDAtLyogQ3J5cHRvIGNvbXByZXNzb3IgdG8gdXNlICovXG5tbS96c3dhcC5jOjEwMTpzdGF0aWMgY2hhciAqenN3YXBfY29tcHJlc3NvciA9IENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQ7XG5tbS96c3dhcC5jLTEwMi1zdGF0aWMgaW50IHpzd2FwX2NvbXByZXNzb3JfcGFyYW1fc2V0KGNvbnN0IGNoYXIgKixcbi0tXG5tbS96c3dhcC5jPTEyMj1zdGF0aWMgYm9vbCB6c3dhcF9zaHJpbmtlcl9lbmFibGVkID0gSVNfRU5BQkxFRChcbm1tL3pzd2FwLmM6MTIzOlx0XHRDT05GSUdfWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTik7XG5tbS96c3dhcC5jLTEyNC1tb2R1bGVfcGFyYW1fbmFtZWQoc2hyaW5rZXJfZW5hYmxlZCwgenN3YXBfc2hyaW5rZXJfZW5hYmxlZCwgYm9vbCwgMDY0NCk7XG4tLVxubW0venN3YXAuYz0xMzE9Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXG5tbS96c3dhcC5jLTEzMi17XG5tbS96c3dhcC5jOjEzMzpcdHJldHVybiAhc3RhdGljX2JyYW5jaF9tYXliZShDT05GSUdfWlNXQVBfREVGQVVMVF9PTiwgXHUwMDI2enN3YXBfZXZlcl9lbmFibGVkKTtcbm1tL3pzd2FwLmMtMTM0LX1cbi0tXG5tbS96c3dhcC5jPTM0NT1zdGF0aWMgc3RydWN0IHpzd2FwX3Bvb2wgKl9fenN3YXBfcG9vbF9jcmVhdGVfZmFsbGJhY2sodm9pZClcbi0tXG5tbS96c3dhcC5jLTM0Ny1cdGlmICghY3J5cHRvX2hhc19hY29tcCh6c3dhcF9jb21wcmVzc29yLCAwLCAwKSBcdTAwMjZcdTAwMjZcbm1tL3pzd2FwLmM6MzQ4Olx0ICAgIHN0cmNtcCh6c3dhcF9jb21wcmVzc29yLCBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUKSkge1xubW0venN3YXAuYy0zNDktXHRcdHByX2VycihcJiMzNDtjb21wcmVzc29yICVzIG5vdCBhdmFpbGFibGUsIHVzaW5nIGRlZmF1bHQgJXNcXG5cJiMzNDssXG5tbS96c3dhcC5jOjM1MDpcdFx0ICAgICAgIHpzd2FwX2NvbXByZXNzb3IsIENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQpO1xubW0venN3YXAuYy0zNTEtXHRcdHBhcmFtX2ZyZWVfY2hhcnAoXHUwMDI2enN3YXBfY29tcHJlc3Nvcik7XG5tbS96c3dhcC5jOjM1MjpcdFx0enN3YXBfY29tcHJlc3NvciA9IENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQ7XG5tbS96c3dhcC5jLTM1My1cdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxMDoxNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDY3CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgSW5pdGlhbCBBc3Nlc3NtZW50IG9mIHRoZSBTaXR1YXRpb24qKgoKT2theSwgc28gdGhlIGN1cnJlbnQgY29uZmlndXJhdGlvbiBzZXR0aW5nIHRoYXQmIzM5O3Mgc3RhbmRpbmcgb3V0IHRvIG1lIGlzIGBaU1dBUGAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGFzc2VzcyBpZiB0aGF0JiMzOTtzIHRoZSAqb25seSogY29uZmlndXJhdGlvbiBhdCBwbGF5LiBJJiMzOTttIGdvaW5nIHRvIHF1aWNrbHkgc2NhbiBmb3IgYW55IG90aGVyIHBvdGVudGlhbGx5IHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHRoYXQgbWlnaHQgYmUgaW4gZWZmZWN0LiBJIG5lZWQgdG8gZ2V0IHRoZSBmdWxsIHBpY3R1cmUgYmVmb3JlIGp1bXBpbmcgdG8gYW55IGNvbmNsdXNpb25zLiBMZXQmIzM5O3Mgc2VlIHdoYXQgZWxzZSBpcyBnb2luZyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfU1dBUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03Nj1lbmRpZlxubW0vTWFrZWZpbGUtNzctXG5tbS9NYWtlZmlsZTo3ODpvYmotJChDT05GSUdfU1dBUClcdCYjNDM7PSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cbm1tL01ha2VmaWxlLTc5LW9iai0kKENPTkZJR19aU1dBUClcdCYjNDM7PSB6c3dhcC5vXG4tLVxubW0vZmlsZW1hcC5jPTQ2MjI9c3RhdGljIHZvaWQgZmlsZW1hcF9jYWNoZXN0YXQoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxubW0vZmlsZW1hcC5jLTQ2NjktXG5tbS9maWxlbWFwLmM6NDY3MDojaWZkZWYgQ09ORklHX1NXQVAgLyogaW1wbGllcyBDT05GSUdfTU1VICovXG5tbS9maWxlbWFwLmMtNDY3MS1cdFx0XHRpZiAoc2htZW1fbWFwcGluZyhtYXBwaW5nKSkge1xuLS1cbm1tL2tzbS5jPTMxMDc9c3RydWN0IGZvbGlvICprc21fbWlnaHRfbmVlZF90b19jb3B5KHN0cnVjdCBmb2xpbyAqZm9saW8sXG4tLVxubW0va3NtLmMtMzE0Ni1cdFx0X19mb2xpb19zZXRfbG9ja2VkKG5ld19mb2xpbyk7XG5tbS9rc20uYzozMTQ3OiNpZmRlZiBDT05GSUdfU1dBUFxubW0va3NtLmMtMzE0OC1cdFx0Y291bnRfdm1fZXZlbnQoS1NNX1NXUElOX0NPUFkpO1xuLS1cbm1tL21hZHZpc2UuYz0xNTA9c3RhdGljIGludCBtYWR2aXNlX3VwZGF0ZV92bWEodm1fZmxhZ3NfdCBuZXdfZmxhZ3MsXG4tLVxubW0vbWFkdmlzZS5jLTE4NS1cbm1tL21hZHZpc2UuYzoxODY6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tYWR2aXNlLmMtMTg3LXN0YXRpYyBpbnQgc3dhcGluX3dhbGtfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXG4tLVxubW0vbWFkdmlzZS5jPTIzND1zdGF0aWMgdm9pZCBzaG1lbV9zd2FwaW5fcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWFkdmlzZS5jLTI2OS19XG5tbS9tYWR2aXNlLmM6MjcwOiNlbmRpZlx0XHQvKiBDT05GSUdfU1dBUCAqL1xubW0vbWFkdmlzZS5jLTI3MS1cbi0tXG5tbS9tYWR2aXNlLmM9MjgxPXN0YXRpYyBsb25nIG1hZHZpc2Vfd2lsbG5lZWQoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTI4OS1cbm1tL21hZHZpc2UuYzoyOTA6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tYWR2aXNlLmMtMjkxLVx0aWYgKCFmaWxlKSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTU5Nj12b2lkIG1lbWNnMV9jb21taXRfY2hhcmdlKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtNjA1LVxubW0vbWVtY29udHJvbC12MS5jOjYwNjojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wtdjEuYy02MDctLyoqXG4tLVxubW0vbWVtY29udHJvbC12MS5jPTE4NjY9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZzFfc3RhdHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTg3Ny1cdFdPUktJTkdTRVRfUkVGQVVMVF9GSUxFLFxubW0vbWVtY29udHJvbC12MS5jOjE4Nzg6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tZW1jb250cm9sLXYxLmMtMTg3OS1cdE1FTUNHX1NXQVAsXG4tLVxubW0vbWVtY29udHJvbC12MS5jPTE4ODQ9c3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG1lbWNnMV9zdGF0X25hbWVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE4OTUtXHRcJiMzNDt3b3JraW5nc2V0X3JlZmF1bHRfZmlsZVwmIzM0Oyxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODk2OiNpZmRlZiBDT05GSUdfU1dBUFxubW0vbWVtY29udHJvbC12MS5jLTE4OTctXHRcJiMzNDtzd2FwXCYjMzQ7LFxuLS1cbm1tL21lbWNvbnRyb2wuYz0zNzI9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ19ub2RlX3N0YXRfaXRlbXNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLmMtMzk5LVx0TlJfU0VDT05EQVJZX1BBR0VUQUJMRSxcbm1tL21lbWNvbnRyb2wuYzo0MDA6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tZW1jb250cm9sLmMtNDAxLVx0TlJfU1dBUENBQ0hFLFxuLS1cbm1tL21lbWNvbnRyb2wuYz01NTM9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTU2NS1cdFBHTEFaWUZSRUVELFxubW0vbWVtY29udHJvbC5jOjU2NjojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy01NjctXHRTV1BJTl9aRVJPLFxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNTQ2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgbWVtb3J5X3N0YXQgbWVtb3J5X3N0YXRzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTE1NjQtXHR7IFwmIzM0O2ZpbGVfd3JpdGViYWNrXCYjMzQ7LFx0XHROUl9XUklURUJBQ0tcdFx0XHR9LFxubW0vbWVtY29udHJvbC5jOjE1NjU6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9tZW1jb250cm9sLmMtMTU2Ni1cdHsgXCYjMzQ7c3dhcGNhY2hlZFwmIzM0OyxcdFx0XHROUl9TV0FQQ0FDSEVcdFx0XHR9LFxuLS1cbm1tL21lbWNvbnRyb2wuYz01NTM3PWludCBfX2luaXQgbWVtX2Nncm91cF9pbml0KHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTU1NzItXG5tbS9tZW1jb250cm9sLmM6NTU3MzojaWZkZWYgQ09ORklHX1NXQVBcbm1tL21lbWNvbnRyb2wuYy01NTc0LS8qKlxuLS1cbm1tL21lbWNvbnRyb2wuYz02MDM2PXN1YnN5c19pbml0Y2FsbChtZW1fY2dyb3VwX3N3YXBfaW5pdCk7XG5tbS9tZW1jb250cm9sLmMtNjAzNy1cbm1tL21lbWNvbnRyb2wuYzo2MDM4OiNlbmRpZiAvKiBDT05GSUdfU1dBUCAqL1xubW0vbWVtY29udHJvbC5jLTYwMzktXG4tLVxubW0vbWlncmF0ZS5jPTU3MT1zdGF0aWMgaW50IF9fZm9saW9fbWlncmF0ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbm1tL21pZ3JhdGUuYy02OTAtXHRcdH1cbm1tL21pZ3JhdGUuYzo2OTE6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9taWdyYXRlLmMtNjkyLVx0XHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pKSB7XG4tLVxubW0vbWluY29yZS5jPTYxPXN0YXRpYyB1bnNpZ25lZCBjaGFyIG1pbmNvcmVfc3dhcChzd3BfZW50cnlfdCBlbnRyeSwgYm9vbCBzaG1lbSlcbi0tXG5tbS9taW5jb3JlLmMtNzQtXG5tbS9taW5jb3JlLmM6NzU6XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX1NXQVApKSB7XG5tbS9taW5jb3JlLmMtNzYtXHRcdFdBUk5fT04oMSk7XG4tLVxubW0vc3dhcC5oPTY5PWVudW0gc3dhcF9jbHVzdGVyX2ZsYWdzIHtcbi0tXG5tbS9zd2FwLmgtODAtXG5tbS9zd2FwLmg6ODE6I2lmZGVmIENPTkZJR19TV0FQXG5tbS9zd2FwLmgtODItI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcG9wcy5oXHUwMDNlIC8qIGZvciBzd3Bfb2Zmc2V0ICovXG4tLVxubW0vc3dhcC5oPTMzMz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb19zd2FwX2ZsYWdzKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vc3dhcC5oLTMzNy1cbm1tL3N3YXAuaDozMzg6I2Vsc2UgLyogQ09ORklHX1NXQVAgKi9cbm1tL3N3YXAuaC0zMzktc3RydWN0IHN3YXBfaW9jYjtcbi0tXG5tbS9zd2FwLmg9NDcxPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3N3YXBfZmxhZ3Moc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9zd2FwLmgtNDc1LVxubW0vc3dhcC5oOjQ3NjojZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cbm1tL3N3YXAuaC00NzctI2VuZGlmIC8qIF9NTV9TV0FQX0ggKi9cbi0tXG5tbS92bWFfaW5pdC5jPTQxPXN0YXRpYyB2b2lkIHZtX2FyZWFfaW5pdF9mcm9tKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxuLS1cbm1tL3ZtYV9pbml0LmMtNjQtI2VuZGlmXG5tbS92bWFfaW5pdC5jOjY1OiNpZmRlZiBDT05GSUdfU1dBUFxubW0vdm1hX2luaXQuYy02Ni1cdG1lbWNweShcdTAwMjZkZXN0LVx1MDAzZXN3YXBfcmVhZGFoZWFkX2luZm8sIFx1MDAyNnNyYy1cdTAwM2Vzd2FwX3JlYWRhaGVhZF9pbmZvLFxuLS1cbm1tL3Ztc3RhdC5jPTExODc9Y29uc3QgY2hhciAqIGNvbnN0IHZtc3RhdF90ZXh0W10gPSB7XG4tLVxubW0vdm1zdGF0LmMtMTI2Ny0jZW5kaWZcbm1tL3Ztc3RhdC5jOjEyNjg6I2lmZGVmIENPTkZJR19TV0FQXG5tbS92bXN0YXQuYy0xMjY5LVx0W0koTlJfU1dBUENBQ0hFKV1cdFx0XHQ9IFwmIzM0O25yX3N3YXBjYWNoZWRcJiMzNDssXG4tLVxubW0vdm1zdGF0LmMtMTQzOC1cbm1tL3Ztc3RhdC5jOjE0Mzk6I2lmZGVmIENPTkZJR19TV0FQXG5tbS92bXN0YXQuYy0xNDQwLVx0W0koU1dBUF9SQSldXHRcdFx0XHQ9IFwmIzM0O3N3YXBfcmFcJiMzNDssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMTggMTA6MTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE0NQoJCQkJCQkJb3V0cHV0OiAxMjkKCQkJCQkJCXRob3VnaHRzOiA5NDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqWnN3YXAgV3JpdGViYWNrIERyb3BiZWhpbmQgQW5hbHlzaXMqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggcmVsYXRlZCB0byBgQ09ORklHX1pTV0FQYCwgYW5kIHNwZWNpZmljYWxseSwgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSB3cml0ZWJhY2sgcHJvY2Vzcy4gVGhlIGtleSBmdW5jdGlvbiBoZXJlIGlzIGB6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AuIEl0IGFwcGVhcnMgdG8gYmUgdHJpZ2dlcmVkIGZyb20gYGZvbGlvX2VuZF93cml0ZWJhY2tgIHdpdGhpbiBgbW0vZmlsZW1hcC5jYC4gRXNzZW50aWFsbHksIHRoZSBsb2dpYyBpczogSWYgYSBmb2xpbyBpcyBpbiBzd2FwIGNhY2hlIGFuZCBtYXJrZWQgZm9yICYjMzQ7ZHJvcGJlaGluZCwmIzM0OyB3ZSBjYWxsIHRoaXMgbmV3IGZ1bmN0aW9uLgoKSW5zaWRlIGB6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgKGluIGBtbS96c3dhcC5jYCksIHRoZSBmb2xpbyBpcyBhZGRlZCB0byBhIGxvY2FsIGxpc3QgYW5kIGEgd29ya3F1ZXVlLCBgenN3YXBfZHJvcGJlaGluZF93b3JrYCwgaXMgc2NoZWR1bGVkLiBUaGUgd29yayBmdW5jdGlvbiwgYHpzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuYCwgdGhlbiBjYWxscyBgenN3YXBfd3JpdGViYWNrX2ZyZWVfZm9saW9gLgoKTm93LCBgenN3YXBfd3JpdGViYWNrX2ZyZWVfZm9saW9gIGlzIHdoZXJlIGl0IGdldHMgaW50ZXJlc3RpbmcuICBJdCBhdHRlbXB0cyB0byByZW1vdmUgdGhlIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUsIGJ1dCBjcnVjaWFsbHksIGl0IGNoZWNrcyBgZm9saW9fdGVzdF9zd2FwY2FjaGVgIGJlZm9yZSBjYWxsaW5nIGByZW1vdmVfbWFwcGluZ2AuIFRoZXJlJiMzOTtzIGFsc28gc29tZSBpbnRlcmVzdGluZyBsb2dpYyB0byBoYW5kbGUgcmFjZXMgd2l0aCBhIHN3YXBpbiBvcGVyYXRpb24sIHBvdGVudGlhbGx5IHB1dHRpbmcgdGhlIGZvbGlvIGJhY2sgb24gdGhlIExSVSBpZiBpdCYjMzk7cyBubyBsb25nZXIgYSBzd2FwIGNhY2hlIGZvbGlvLgoKTG9va2luZyBhdCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgdGhlIHBhdGNoIG1vZGlmaWVzIGhvdyBmb2xpb3MgYXJlIGFsbG9jYXRlZCBhbmQgbWFya2VkIGZvciB0aGlzICYjMzQ7ZHJvcGJlaGluZCYjMzQ7IGJlaGF2aW9yLiAgSWYgdGhlIHdyaXRlYmFjayBpc24mIzM5O3Qgc3luY2hyb25vdXMgKGBzeW5jYCBpcyBmYWxzZSksIHRoZSBmb2xpbyBpcyBzZXQgd2l0aCBgZm9saW9fc2V0X2Ryb3BiZWhpbmRgLCBhbmQgd3JpdGViYWNrIGlzIGluaXRpYXRlZC4gVGhlIHBhdGNoIGFkZHMgYSBjb25kaXRpb25hbCBgenN3YXBfd3JpdGViYWNrX2ZyZWVfZm9saW9gIGNhbGwgYWZ0ZXIgdGhlIHdyaXRlYmFjay4gVGhpcyBpcyBhIGNydWNpYWwgZGlmZmVyZW5jZSBpbiBiZWhhdmlvci4KCkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIHRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdvcnRoIGZ1enppbmcuIEkmIzM5O2xsIG5lZWQgdG8gZm9jdXMgb24gdGhlc2Ugc3ltYm9sczogYHpzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCwgYHpzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuYCwgYHpzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvYCwgYW5kIGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLiBUaGUgbmVjZXNzYXJ5IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgYFpTV0FQYCBhbmQgYFNXQVBgLCB3aXRoIGBaU1dBUGAgZGVwZW5kZW50IG9uIGBTV0FQYC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIHN1YnN5c3RlbXMgYW5kIHJlcHJlc2VudHMgYSBuZXcgbWV0aG9kIGZvciBoYW5kaW5nIHpzd2FwIHdyaXRlYmFjay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8xOCAxMDoxNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7WlNXQVAmIzM0OywKICAgICYjMzQ7U1dBUCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3pzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvJiMzNDssCiAgICAmIzM0O3pzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuJiMzNDssCiAgICAmIzM0O3pzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvJiMzNDssCiAgICAmIzM0O3pzd2FwX3dyaXRlYmFja19lbnRyeSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgaGFuZGxpbmcgenN3YXAgd3JpdGViYWNrIGRyb3BiZWhpbmQgZm9saW9zLCBpbmNsdWRpbmcgYSBuZXcgd29ya3F1ZXVlIGFuZCBvZmYtTFJVIGZvbGlvIG1hbmFnZW1lbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIHN1YnN5c3RlbXMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1pTV0FQJiMzNDssCiAgICAmIzM0O1NXQVAmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyYjMzQ7LAogICAgJiMzNDt6c3dhcF9kcm9wYmVoaW5kX3dvcmtmbiYjMzQ7LAogICAgJiMzNDt6c3dhcF93cml0ZWJhY2tfZnJlZV9mb2xpbyYjMzQ7LAogICAgJiMzNDt6c3dhcF93cml0ZWJhY2tfZW50cnkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBtZWNoYW5pc20gZm9yIGhhbmRsaW5nIHpzd2FwIHdyaXRlYmFjayBkcm9wYmVoaW5kIGZvbGlvcywgaW5jbHVkaW5nIGEgbmV3IHdvcmtxdWV1ZSBhbmQgb2ZmLUxSVSBmb2xpbyBtYW5hZ2VtZW50LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBtZW1vcnkgbWFuYWdlbWVudCBhbmQgc3dhcCBzdWJzeXN0ZW1zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMThUMTA6MTU6MDcuNDQ5MDUxMDAxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAwNzU1MzM4NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNXQVBcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb1wiLFxuICAgIFwienN3YXBfZHJvcGJlaGluZF93b3JrZm5cIixcbiAgICBcInpzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvXCIsXG4gICAgXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgaGFuZGxpbmcgenN3YXAgd3JpdGViYWNrIGRyb3BiZWhpbmQgZm9saW9zLCBpbmNsdWRpbmcgYSBuZXcgd29ya3F1ZXVlIGFuZCBvZmYtTFJVIGZvbGlvIG1hbmFnZW1lbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIHN1YnN5c3RlbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDEwOjE1OjA3LjQ0OTA1NDY1MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODEzOTQyMTg4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZDZkZjUyNjJkNWNhODFmZTlkMzY1NGM5YmVlYzAzNzIxNjBlYmQ4MVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAxOCAxMDoxNTowNSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcXG5pbmRleCAzMGMxOTNhMTIwN2UxNi4uMjNkY2RlMjc0OTY0N2EgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC96c3dhcC5oXFxuKysrIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXFxuQEAgLTM1LDYgKzM1LDcgQEAgdm9pZCB6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpO1xcbiB2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpO1xcbiBib29sIHpzd2FwX25ldmVyX2VuYWJsZWQodm9pZCk7XFxuK3ZvaWQgenN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XFxuICNlbHNlXFxuIFxcbiBzdHJ1Y3QgenN3YXBfbHJ1dmVjX3N0YXRlIHt9O1xcbkBAIC01OCw2ICs1OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF9zd2Fwb2ZmKGludCB0eXBlKSB7fVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfbWVtY2dfb2ZmbGluZV9jbGVhbnVwKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykge31cXG4gc3RhdGljIGlubGluZSB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYykge31cXG4gc3RhdGljIGlubGluZSB2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKSB7fVxcbitzdGF0aWMgaW5saW5lIHZvaWQgenN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbykge31cXG4gXFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpXFxuIHtcXG5kaWZmIC0tZ2l0IGEvbW0vZmlsZW1hcC5jIGIvbW0vZmlsZW1hcC5jXFxuaW5kZXggNThlYjlkMjQwNjQzNDguLjk1ZDY0MDk3ODBmNGQ3IDEwMDY0NFxcbi0tLSBhL21tL2ZpbGVtYXAuY1xcbisrKyBiL21tL2ZpbGVtYXAuY1xcbkBAIC0yMSw2ICsyMSw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9nZnAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zd2FwLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC96c3dhcC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvbGVhZm9wcy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc3lzY2FsbHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21tYW4uaFxcdTAwM2VcXG5AQCAtMTY4MCw2ICsxNjgxLDggQEAgRVhQT1JUX1NZTUJPTF9HUEwoZm9saW9fZW5kX3dyaXRlYmFja19ub19kcm9wYmVoaW5kKTtcXG4gICovXFxuIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiB7XFxuK1xcdGJvb2wgc3dhcF9kcm9wYmVoaW5kO1xcbitcXG4gXFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcXG4gXFxuIFxcdC8qXFxuQEAgLTE2ODksNyArMTY5MiwyNCBAQCB2b2lkIGZvbGlvX2VuZF93cml0ZWJhY2soc3RydWN0IGZvbGlvICpmb2xpbylcXG4gXFx0ICogcmV1c2VkIGJlZm9yZSB0aGUgZm9saW9fd2FrZV9iaXQoKS5cXG4gXFx0ICovXFxuIFxcdGZvbGlvX2dldChmb2xpbyk7XFxuK1xcbitcXHQvKlxcbitcXHQgKiB6c3dhcCB3cml0ZWJhY2sgZm9saW9zIGFyZSBvZmYtTFJVLCBzbyB3ZSBtdXN0IHByZXZlbnQgYSByYWNpbmdcXG4rXFx0ICogc3dhcGluIGZyb20gcmVtb3ZpbmcgdGhlIGZvbGlvIGZyb20gdGhlIHN3YXAgY2FjaGUgYW5kIGtlZXBpbmcgaXRcXG4rXFx0ICogb2ZmLUxSVTogdGhlIHdyaXRlYmFjayBmbGFnIGFsbG93cyB0aGF0LiBBZnRlcndhcmRzIGEgc3dhcGluIG1heSB3aW5cXG4rXFx0ICogdGhlIHJhY2UsIGJ1dCB0aGUgZm9saW8gaXMgYWxyZWFkeSBxdWV1ZWQgYW5kIHRoZSB3b3JrZXIgcHV0cyBpdCBiYWNrXFxuK1xcdCAqIG9uIHRoZSBMUlUgaW4gdGhhdCBjYXNlLlxcbitcXHQgKi9cXG4rXFx0c3dhcF9kcm9wYmVoaW5kID0gZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdFxcdCAgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKTtcXG4rXFxuIFxcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XFxuK1xcbitcXHRpZiAoc3dhcF9kcm9wYmVoaW5kKSB7XFxuK1xcdFxcdHpzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKGZvbGlvKTtcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHR9XFxuK1xcbiBcXHRmb2xpb19lbmRfZHJvcGJlaGluZChmb2xpbyk7XFxuIFxcdGZvbGlvX3B1dChmb2xpbyk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXFxuaW5kZXggNzdkMmQxNGVkYTQyMWUuLmM2MTdlNWEwMjU3ZjQ2IDEwMDY0NFxcbi0tLSBhL21tL3N3YXAuaFxcbisrKyBiL21tL3N3YXAuaFxcbkBAIC0zMDYsNyArMzA2LDggQEAgdm9pZCAqc3dhcF9jYWNoZV9nZXRfc2hhZG93KHN3cF9lbnRyeV90IGVudHJ5KTtcXG4gdm9pZCBzd2FwX2NhY2hlX2RlbF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKTtcXG4gc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXFxuIFxcdFxcdFxcdFxcdCAgICAgdW5zaWduZWQgbG9uZyBvcmRlcnMsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi1cXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KTtcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCxcXG4rXFx0XFx0XFx0XFx0ICAgICBib29sIHNraXBfbHJ1KTtcXG4gLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqL1xcbiB2b2lkIF9fc3dhcF9jYWNoZV9hZGRfZm9saW8oc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBmb2xpbyAqZm9saW8sIHN3cF9lbnRyeV90IGVudHJ5KTtcXG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXFxuaW5kZXggOWMzYTVjZjk5Nzc4NjAuLjA0OGVmYzdjYTYxMjQwIDEwMDY0NFxcbi0tLSBhL21tL3N3YXBfc3RhdGUuY1xcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xcbkBAIC00MDMsNyArNDAzLDggQEAgdm9pZCBfX3N3YXBfY2FjaGVfcmVwbGFjZV9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxcbiBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gXFx0XFx0XFx0XFx0XFx0c3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxcbiBcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgb3JkZXIsIHN0cnVjdCB2bV9mYXVsdCAqdm1mLFxcbi1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgsXFxuK1xcdFxcdFxcdFxcdFxcdGJvb2wgc2tpcF9scnUpXFxuIHtcXG4gXFx0aW50IGVycjtcXG4gXFx0c3dwX2VudHJ5X3QgZW50cnk7XFxuQEAgLTQ4NCw3ICs0ODUsOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcXG4gXFx0bHJ1dmVjX3N0YXRfbW9kX2ZvbGlvKGZvbGlvLCBOUl9TV0FQQ0FDSEUsIG5yX3BhZ2VzKTtcXG4gXFxuIFxcdC8qIENhbGxlciB3aWxsIGluaXRpYXRlIHJlYWQgaW50byBsb2NrZWQgbmV3X2ZvbGlvICovXFxuLVxcdGZvbGlvX2FkZF9scnUoZm9saW8pO1xcbitcXHRpZiAoIXNraXBfbHJ1KVxcbitcXHRcXHRmb2xpb19hZGRfbHJ1KGZvbGlvKTtcXG4gXFx0cmV0dXJuIGZvbGlvO1xcbiB9XFxuIFxcbkBAIC01MDcsNyArNTA5LDggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXFxuICAqL1xcbiBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxcbiBcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcXG4tXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseClcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCxcXG4rXFx0XFx0XFx0XFx0ICAgICBib29sIHNraXBfbHJ1KVxcbiB7XFxuIFxcdGludCBvcmRlciwgZXJyO1xcbiBcXHRzdHJ1Y3QgZm9saW8gKnJldDtcXG5AQCAtNTIyLDcgKzUyNSw3IEBAIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BfZW50cnlfdCB0YXJnX2VudHJ5LCBnZnBfdCBnZnAsXFxuIFxcbiBcXHRkbyB7XFxuIFxcdFxcdHJldCA9IF9fc3dhcF9jYWNoZV9hbGxvYyhjaSwgdGFyZ19lbnRyeSwgZ2ZwLCBvcmRlcixcXG4tXFx0XFx0XFx0XFx0XFx0IHZtZiwgbXBvbCwgaWx4KTtcXG4rXFx0XFx0XFx0XFx0XFx0IHZtZiwgbXBvbCwgaWx4LCBza2lwX2xydSk7XFxuIFxcdFxcdGlmICghSVNfRVJSKHJldCkpXFxuIFxcdFxcdFxcdGJyZWFrO1xcbiBcXHRcXHRlcnIgPSBQVFJfRVJSKHJldCk7XFxuQEAgLTY0Myw3ICs2NDYsOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX3JlYWRfZm9saW8oc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCxcXG4gXFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2dldF9mb2xpbyhlbnRyeSk7XFxuIFxcdFxcdGlmIChmb2xpbylcXG4gXFx0XFx0XFx0cmV0dXJuIGZvbGlvO1xcbi1cXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgpO1xcbitcXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgQklUKDApLCBOVUxMLCBtcG9sLCBpbHgsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBmYWxzZSk7XFxuIFxcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xcbiBcXG4gXFx0aWYgKElTX0VSUl9PUl9OVUxMKGZvbGlvKSlcXG5AQCAtNjgzLDcgKzY4Nyw4IEBAIHN0cnVjdCBmb2xpbyAqc3dhcGluX3N5bmMoc3dwX2VudHJ5X3QgZW50cnksIGdmcF90IGdmcCwgdW5zaWduZWQgbG9uZyBvcmRlcnMsXFxuIFxcdFxcdGZvbGlvID0gc3dhcF9jYWNoZV9nZXRfZm9saW8oZW50cnkpO1xcbiBcXHRcXHRpZiAoZm9saW8pXFxuIFxcdFxcdFxcdHJldHVybiBmb2xpbztcXG4tXFx0XFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xcbitcXHRcXHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICAgIGZhbHNlKTtcXG4gXFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XFxuIFxcbiBcXHRpZiAoSVNfRVJSKGZvbGlvKSlcXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcXG5pbmRleCA3NjFjZDY5OWUwYTNlNi4uZDE4NWRhODViYjY4ZWYgMTAwNjQ0XFxuLS0tIGEvbW0venN3YXAuY1xcbisrKyBiL21tL3pzd2FwLmNcXG5AQCAtMzQsNiArMzQsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvd3JpdGViYWNrLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wYWdlbWFwLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC93b3JrcXVldWUuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xsaXN0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9saXN0X2xydS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvenNtYWxsb2MuaFxcdTAwM2VcXG4gXFxuQEAgLTk3Miw2ICs5NzMsNTcgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbiAvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXFxuICogd3JpdGViYWNrIGNvZGVcXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cXG4rc3RhdGljIHZvaWQgenN3YXBfd3JpdGViYWNrX2ZyZWVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbylcXG4re1xcbitcXHRmb2xpb19sb2NrKGZvbGlvKTtcXG4rXFxuK1xcdC8qIFRoZSBmb2xpbyB3YXMgYWxsb2NhdGVkIG9mZiB0aGUgTFJVIGFuZCBub3RoaW5nIHJlLWFkZHMgaXQgaGVyZS4gKi9cXG4rXFx0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xcbitcXG4rXFx0LypcXG4rXFx0ICogR2F0ZSByZW1vdmVfbWFwcGluZygpIG9uIGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKCk6IGEgcmFjaW5nIHN3YXBpbiBtYXlcXG4rXFx0ICogaGF2ZSBmcmVlZCB0aGUgc3dhcCBzbG90IChmb2xpb19mcmVlX3N3YXAoKSkgYW5kIGRyb3BwZWQgdGhlIGZvbGlvIGZyb21cXG4rXFx0ICogdGhlIGNhY2hlLCBhbmQgcmVtb3ZlX21hcHBpbmcoKSBtdXN0IG5vdCBydW4gb24gYSBub24tc3dhcGNhY2hlIGZvbGlvXFxuK1xcdCAqIChpdCB3b3VsZCB0cmlwIF9fcmVtb3ZlX21hcHBpbmcoKSdzIG1hcHBpbmcgPT0gZm9saW9fbWFwcGluZygpIGNoZWNrKS5cXG4rXFx0ICovXFxuK1xcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIHJlbW92ZV9tYXBwaW5nKHN3YXBfYWRkcmVzc19zcGFjZShmb2xpby1cXHUwMDNlc3dhcCksIGZvbGlvKSlcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHQvKiBSYWNlZDogdGhlIGZvbGlvIGlzIG5vdyBvd25lZCBieSB0aGUgc3dhcGluOyBwdXQgaXQgYmFjayBvbiB0aGUgTFJVLiAqL1xcbitcXHRmb2xpb19jbGVhcl9kcm9wYmVoaW5kKGZvbGlvKTtcXG4rXFx0Zm9saW9fYWRkX2xydShmb2xpbyk7XFxuK291dDpcXG4rXFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4rXFx0Zm9saW9fcHV0KGZvbGlvKTtcXG4rfVxcbitcXG4rc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBsbGlzdF9oZWFkLCB6c3dhcF9kcm9wYmVoaW5kX2xsaXN0KTtcXG4rXFxuK3N0YXRpYyB2b2lkIHpzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4re1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqcG9zLCAqbmV4dDtcXG4rXFx0aW50IGNwdTtcXG4rXFxuK1xcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcXG4rXFx0XFx0cG9zID0gbGxpc3RfZGVsX2FsbChwZXJfY3B1X3B0cihcXHUwMDI2enN3YXBfZHJvcGJlaGluZF9sbGlzdCwgY3B1KSk7XFxuK1xcdFxcdGxsaXN0X2Zvcl9lYWNoX3NhZmUocG9zLCBuZXh0LCBwb3MpIHtcXG4rXFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbyA9IGNvbnRhaW5lcl9vZigoc3RydWN0IGxpc3RfaGVhZCAqKXBvcyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgc3RydWN0IGZvbGlvLCBscnUpO1xcbitcXHRcXHRcXHR6c3dhcF93cml0ZWJhY2tfZnJlZV9mb2xpbyhmb2xpbyk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgREVDTEFSRV9XT1JLKHpzd2FwX2Ryb3BiZWhpbmRfd29yaywgenN3YXBfZHJvcGJlaGluZF93b3JrZm4pO1xcbitcXG4rdm9pZCB6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbit7XFxuK1xcdGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSxcXG4rXFx0XFx0ICB0aGlzX2NwdV9wdHIoXFx1MDAyNnpzd2FwX2Ryb3BiZWhpbmRfbGxpc3QpKTtcXG4rXFx0c2NoZWR1bGVfd29yayhcXHUwMDI2enN3YXBfZHJvcGJlaGluZF93b3JrKTtcXG4rfVxcbitcXG4gLypcXG4gICogQXR0ZW1wdHMgdG8gZnJlZSBhbiBlbnRyeSBieSBhZGRpbmcgYSBmb2xpbyB0byB0aGUgc3dhcCBjYWNoZSxcXG4gICogZGVjb21wcmVzc2luZyB0aGUgZW50cnkgZGF0YSBpbnRvIHRoZSBmb2xpbywgYW5kIGlzc3VpbmcgYVxcbkBAIC05OTIsMTYgKzEwNDQsMTggQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4gXFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcXG4gXFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpO1xcbitcXHRib29sIHN5bmM7XFxuIFxcdGludCByZXQgPSAwO1xcbiBcXG4gXFx0LyogdHJ5IHRvIGFsbG9jYXRlIHN3YXAgY2FjaGUgZm9saW8gKi9cXG4gXFx0c2kgPSBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpO1xcbiBcXHRpZiAoIXNpKVxcbiBcXHRcXHRyZXR1cm4gLUVFWElTVDtcXG4rXFx0c3luYyA9IGRhdGFfcmFjZShzaS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBTV1BfU1lOQ0hST05PVVNfSU8pO1xcbiBcXG4gXFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcXG4gXFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cGVudHJ5LCBHRlBfS0VSTkVMLCBCSVQoMCksIE5VTEwsIG1wb2wsXFxuLVxcdFxcdFxcdFxcdCAgICAgICBOT19JTlRFUkxFQVZFX0lOREVYKTtcXG4rXFx0XFx0XFx0XFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgsIHRydWUpO1xcbiBcXHRwdXRfc3dhcF9kZXZpY2Uoc2kpO1xcbiBcXG4gXFx0LypcXG5AQCAtMTA0NSwxMiArMTA5OSwxOCBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxcbiBcXHQvKiBmb2xpbyBpcyB1cCB0byBkYXRlICovXFxuIFxcdGZvbGlvX21hcmtfdXB0b2RhdGUoZm9saW8pO1xcbiBcXG4tXFx0LyogbW92ZSBpdCB0byB0aGUgdGFpbCBvZiB0aGUgaW5hY3RpdmUgbGlzdCBhZnRlciBlbmRfd3JpdGViYWNrICovXFxuLVxcdGZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTtcXG4rXFx0LyogRnJlZSB0aGUgZm9saW8gb25jZSB3cml0ZWJhY2sgY29tcGxldGVzOyBzZWUgZm9saW9fZW5kX3dyaXRlYmFjaygpLiAqL1xcbitcXHRpZiAoIXN5bmMpXFxuK1xcdFxcdGZvbGlvX3NldF9kcm9wYmVoaW5kKGZvbGlvKTtcXG4gXFxuIFxcdC8qIHN0YXJ0IHdyaXRlYmFjayAqL1xcbiBcXHRfX3N3YXBfd3JpdGVwYWdlKGZvbGlvLCBOVUxMKTtcXG4gXFxuK1xcdGlmIChzeW5jKSB7XFxuK1xcdFxcdHpzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvKGZvbGlvKTtcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4rXFxuIG91dDpcXG4gXFx0aWYgKHJldCkge1xcbiBcXHRcXHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDEwOjE1OjA4LjI2MzY1NjM2WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxOTI2MDkxNTQ4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJaU1dBUFwiLFxuICAgIFwiU1dBUFwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInpzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvXCIsXG4gICAgXCJ6c3dhcF9kcm9wYmVoaW5kX3dvcmtmblwiLFxuICAgIFwienN3YXBfd3JpdGViYWNrX2ZyZWVfZm9saW9cIixcbiAgICBcInpzd2FwX3dyaXRlYmFja19lbnRyeVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgbWVjaGFuaXNtIGZvciBoYW5kbGluZyB6c3dhcCB3cml0ZWJhY2sgZHJvcGJlaGluZCBmb2xpb3MsIGluY2x1ZGluZyBhIG5ldyB3b3JrcXVldWUgYW5kIG9mZi1MUlUgZm9saW8gbWFuYWdlbWVudC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAgc3Vic3lzdGVtcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBkNmRmNTI2MmQ1Y2E4MWZlOWQzNjU0YzliZWVjMDM3MjE2MGViZDgxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMTggMTA6MTU6MDUgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3pzd2FwLmggYi9pbmNsdWRlL2xpbnV4L3pzd2FwLmhcbmluZGV4IDMwYzE5M2ExMjA3ZTE2Li4yM2RjZGUyNzQ5NjQ3YSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvenN3YXAuaFxuKysrIGIvaW5jbHVkZS9saW51eC96c3dhcC5oXG5AQCAtMzUsNiArMzUsNyBAQCB2b2lkIHpzd2FwX2xydXZlY19zdGF0ZV9pbml0KHN0cnVjdCBscnV2ZWMgKmxydXZlYyk7XG4gdm9pZCB6c3dhcF9mb2xpb19zd2FwaW4oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpO1xuIGJvb2wgenN3YXBfbmV2ZXJfZW5hYmxlZCh2b2lkKTtcbit2b2lkIHpzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pO1xuICNlbHNlXG4gXG4gc3RydWN0IHpzd2FwX2xydXZlY19zdGF0ZSB7fTtcbkBAIC01OCw2ICs1OSw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF9zd2Fwb2ZmKGludCB0eXBlKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF9tZW1jZ19vZmZsaW5lX2NsZWFudXAoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKSB7fVxuIHN0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF9scnV2ZWNfc3RhdGVfaW5pdChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpIHt9XG4gc3RhdGljIGlubGluZSB2b2lkIHpzd2FwX2ZvbGlvX3N3YXBpbihzdHJ1Y3QgZm9saW8gKmZvbGlvKSB7fVxuK3N0YXRpYyBpbmxpbmUgdm9pZCB6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKSB7fVxuIFxuIHN0YXRpYyBpbmxpbmUgYm9vbCB6c3dhcF9pc19lbmFibGVkKHZvaWQpXG4ge1xuZGlmZiAtLWdpdCBhL21tL2ZpbGVtYXAuYyBiL21tL2ZpbGVtYXAuY1xuaW5kZXggNThlYjlkMjQwNjQzNDguLjk1ZDY0MDk3ODBmNGQ3IDEwMDY0NFxuLS0tIGEvbW0vZmlsZW1hcC5jXG4rKysgYi9tbS9maWxlbWFwLmNcbkBAIC0yMSw2ICsyMSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZ2ZwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3dhcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvenN3YXAuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2xlYWZvcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2NhbGxzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9tbWFuLmhcdTAwM2VcbkBAIC0xNjgwLDYgKzE2ODEsOCBAQCBFWFBPUlRfU1lNQk9MX0dQTChmb2xpb19lbmRfd3JpdGViYWNrX25vX2Ryb3BiZWhpbmQpO1xuICAqL1xuIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIHtcbitcdGJvb2wgc3dhcF9kcm9wYmVoaW5kO1xuK1xuIFx0Vk1fQlVHX09OX0ZPTElPKCFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbyksIGZvbGlvKTtcbiBcbiBcdC8qXG5AQCAtMTY4OSw3ICsxNjkyLDI0IEBAIHZvaWQgZm9saW9fZW5kX3dyaXRlYmFjayhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIFx0ICogcmV1c2VkIGJlZm9yZSB0aGUgZm9saW9fd2FrZV9iaXQoKS5cbiBcdCAqL1xuIFx0Zm9saW9fZ2V0KGZvbGlvKTtcbitcbitcdC8qXG4rXHQgKiB6c3dhcCB3cml0ZWJhY2sgZm9saW9zIGFyZSBvZmYtTFJVLCBzbyB3ZSBtdXN0IHByZXZlbnQgYSByYWNpbmdcbitcdCAqIHN3YXBpbiBmcm9tIHJlbW92aW5nIHRoZSBmb2xpbyBmcm9tIHRoZSBzd2FwIGNhY2hlIGFuZCBrZWVwaW5nIGl0XG4rXHQgKiBvZmYtTFJVOiB0aGUgd3JpdGViYWNrIGZsYWcgYWxsb3dzIHRoYXQuIEFmdGVyd2FyZHMgYSBzd2FwaW4gbWF5IHdpblxuK1x0ICogdGhlIHJhY2UsIGJ1dCB0aGUgZm9saW8gaXMgYWxyZWFkeSBxdWV1ZWQgYW5kIHRoZSB3b3JrZXIgcHV0cyBpdCBiYWNrXG4rXHQgKiBvbiB0aGUgTFJVIGluIHRoYXQgY2FzZS5cbitcdCAqL1xuK1x0c3dhcF9kcm9wYmVoaW5kID0gZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIFx1MDAyNlx1MDAyNlxuK1x0XHRcdCAgZm9saW9fdGVzdF9kcm9wYmVoaW5kKGZvbGlvKTtcbitcbiBcdGZvbGlvX2VuZF93cml0ZWJhY2tfbm9fZHJvcGJlaGluZChmb2xpbyk7XG4rXG4rXHRpZiAoc3dhcF9kcm9wYmVoaW5kKSB7XG4rXHRcdHpzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvKGZvbGlvKTtcbitcdFx0cmV0dXJuO1xuK1x0fVxuK1xuIFx0Zm9saW9fZW5kX2Ryb3BiZWhpbmQoZm9saW8pO1xuIFx0Zm9saW9fcHV0KGZvbGlvKTtcbiB9XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcC5oIGIvbW0vc3dhcC5oXG5pbmRleCA3N2QyZDE0ZWRhNDIxZS4uYzYxN2U1YTAyNTdmNDYgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwLmhcbisrKyBiL21tL3N3YXAuaFxuQEAgLTMwNiw3ICszMDYsOCBAQCB2b2lkICpzd2FwX2NhY2hlX2dldF9zaGFkb3coc3dwX2VudHJ5X3QgZW50cnkpO1xuIHZvaWQgc3dhcF9jYWNoZV9kZWxfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyk7XG4gc3RydWN0IGZvbGlvICpzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKHN3cF9lbnRyeV90IHRhcmdldF9lbnRyeSwgZ2ZwX3QgZ2ZwX21hc2ssXG4gXHRcdFx0XHQgICAgIHVuc2lnbmVkIGxvbmcgb3JkZXJzLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi1cdFx0XHRcdCAgICAgc3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpO1xuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCxcbitcdFx0XHRcdCAgICAgYm9vbCBza2lwX2xydSk7XG4gLyogQmVsb3cgaGVscGVycyByZXF1aXJlIHRoZSBjYWxsZXIgdG8gbG9jayBhbmQgcGFzcyBpbiB0aGUgc3dhcCBjbHVzdGVyLiAqL1xuIHZvaWQgX19zd2FwX2NhY2hlX2FkZF9mb2xpbyhzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpLFxuIFx0XHRcdCAgICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzd3BfZW50cnlfdCBlbnRyeSk7XG5kaWZmIC0tZ2l0IGEvbW0vc3dhcF9zdGF0ZS5jIGIvbW0vc3dhcF9zdGF0ZS5jXG5pbmRleCA5YzNhNWNmOTk3Nzg2MC4uMDQ4ZWZjN2NhNjEyNDAgMTAwNjQ0XG4tLS0gYS9tbS9zd2FwX3N0YXRlLmNcbisrKyBiL21tL3N3YXBfc3RhdGUuY1xuQEAgLTQwMyw3ICs0MDMsOCBAQCB2b2lkIF9fc3dhcF9jYWNoZV9yZXBsYWNlX2ZvbGlvKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRcdFx0XHRcdHN3cF9lbnRyeV90IHRhcmdfZW50cnksIGdmcF90IGdmcCxcbiBcdFx0XHRcdFx0dW5zaWduZWQgaW50IG9yZGVyLCBzdHJ1Y3Qgdm1fZmF1bHQgKnZtZixcbi1cdFx0XHRcdFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbCwgcGdvZmZfdCBpbHgpXG4rXHRcdFx0XHRcdHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4LFxuK1x0XHRcdFx0XHRib29sIHNraXBfbHJ1KVxuIHtcbiBcdGludCBlcnI7XG4gXHRzd3BfZW50cnlfdCBlbnRyeTtcbkBAIC00ODQsNyArNDg1LDggQEAgc3RhdGljIHN0cnVjdCBmb2xpbyAqX19zd2FwX2NhY2hlX2FsbG9jKHN0cnVjdCBzd2FwX2NsdXN0ZXJfaW5mbyAqY2ksXG4gXHRscnV2ZWNfc3RhdF9tb2RfZm9saW8oZm9saW8sIE5SX1NXQVBDQUNIRSwgbnJfcGFnZXMpO1xuIFxuIFx0LyogQ2FsbGVyIHdpbGwgaW5pdGlhdGUgcmVhZCBpbnRvIGxvY2tlZCBuZXdfZm9saW8gKi9cbi1cdGZvbGlvX2FkZF9scnUoZm9saW8pO1xuK1x0aWYgKCFza2lwX2xydSlcbitcdFx0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4gXHRyZXR1cm4gZm9saW87XG4gfVxuIFxuQEAgLTUwNyw3ICs1MDksOCBAQCBzdGF0aWMgc3RydWN0IGZvbGlvICpfX3N3YXBfY2FjaGVfYWxsb2Moc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaSxcbiAgKi9cbiBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuIFx0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIG9yZGVycywgc3RydWN0IHZtX2ZhdWx0ICp2bWYsXG4tXHRcdFx0XHQgICAgIHN0cnVjdCBtZW1wb2xpY3kgKm1wb2wsIHBnb2ZmX3QgaWx4KVxuK1x0XHRcdFx0ICAgICBzdHJ1Y3QgbWVtcG9saWN5ICptcG9sLCBwZ29mZl90IGlseCxcbitcdFx0XHRcdCAgICAgYm9vbCBza2lwX2xydSlcbiB7XG4gXHRpbnQgb3JkZXIsIGVycjtcbiBcdHN0cnVjdCBmb2xpbyAqcmV0O1xuQEAgLTUyMiw3ICs1MjUsNyBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfYWxsb2NfZm9saW8oc3dwX2VudHJ5X3QgdGFyZ19lbnRyeSwgZ2ZwX3QgZ2ZwLFxuIFxuIFx0ZG8ge1xuIFx0XHRyZXQgPSBfX3N3YXBfY2FjaGVfYWxsb2MoY2ksIHRhcmdfZW50cnksIGdmcCwgb3JkZXIsXG4tXHRcdFx0XHRcdCB2bWYsIG1wb2wsIGlseCk7XG4rXHRcdFx0XHRcdCB2bWYsIG1wb2wsIGlseCwgc2tpcF9scnUpO1xuIFx0XHRpZiAoIUlTX0VSUihyZXQpKVxuIFx0XHRcdGJyZWFrO1xuIFx0XHRlcnIgPSBQVFJfRVJSKHJldCk7XG5AQCAtNjQzLDcgKzY0Niw4IEBAIHN0YXRpYyBzdHJ1Y3QgZm9saW8gKnN3YXBfY2FjaGVfcmVhZF9mb2xpbyhzd3BfZW50cnlfdCBlbnRyeSwgZ2ZwX3QgZ2ZwLFxuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbiBcdFx0aWYgKGZvbGlvKVxuIFx0XHRcdHJldHVybiBmb2xpbztcbi1cdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4KTtcbitcdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIEJJVCgwKSwgTlVMTCwgbXBvbCwgaWx4LFxuK1x0XHRcdFx0XHQgICAgICAgZmFsc2UpO1xuIFx0fSB3aGlsZSAoUFRSX0VSUihmb2xpbykgPT0gLUVFWElTVCk7XG4gXG4gXHRpZiAoSVNfRVJSX09SX05VTEwoZm9saW8pKVxuQEAgLTY4Myw3ICs2ODcsOCBAQCBzdHJ1Y3QgZm9saW8gKnN3YXBpbl9zeW5jKHN3cF9lbnRyeV90IGVudHJ5LCBnZnBfdCBnZnAsIHVuc2lnbmVkIGxvbmcgb3JkZXJzLFxuIFx0XHRmb2xpbyA9IHN3YXBfY2FjaGVfZ2V0X2ZvbGlvKGVudHJ5KTtcbiBcdFx0aWYgKGZvbGlvKVxuIFx0XHRcdHJldHVybiBmb2xpbztcbi1cdFx0Zm9saW8gPSBzd2FwX2NhY2hlX2FsbG9jX2ZvbGlvKGVudHJ5LCBnZnAsIG9yZGVycywgdm1mLCBtcG9sLCBpbHgpO1xuK1x0XHRmb2xpbyA9IHN3YXBfY2FjaGVfYWxsb2NfZm9saW8oZW50cnksIGdmcCwgb3JkZXJzLCB2bWYsIG1wb2wsIGlseCxcbitcdFx0XHRcdFx0ICAgICAgIGZhbHNlKTtcbiBcdH0gd2hpbGUgKFBUUl9FUlIoZm9saW8pID09IC1FRVhJU1QpO1xuIFxuIFx0aWYgKElTX0VSUihmb2xpbykpXG5kaWZmIC0tZ2l0IGEvbW0venN3YXAuYyBiL21tL3pzd2FwLmNcbmluZGV4IDc2MWNkNjk5ZTBhM2U2Li5kMTg1ZGE4NWJiNjhlZiAxMDA2NDRcbi0tLSBhL21tL3pzd2FwLmNcbisrKyBiL21tL3pzd2FwLmNcbkBAIC0zNCw2ICszNCw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd3JpdGViYWNrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xsaXN0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saXN0X2xydS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvenNtYWxsb2MuaFx1MDAzZVxuIFxuQEAgLTk3Miw2ICs5NzMsNTcgQEAgc3RhdGljIGJvb2wgenN3YXBfZGVjb21wcmVzcyhzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcbiAqIHdyaXRlYmFjayBjb2RlXG4gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi9cbitzdGF0aWMgdm9pZCB6c3dhcF93cml0ZWJhY2tfZnJlZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGZvbGlvX2xvY2soZm9saW8pO1xuK1xuK1x0LyogVGhlIGZvbGlvIHdhcyBhbGxvY2F0ZWQgb2ZmIHRoZSBMUlUgYW5kIG5vdGhpbmcgcmUtYWRkcyBpdCBoZXJlLiAqL1xuK1x0Vk1fV0FSTl9PTl9PTkNFX0ZPTElPKGZvbGlvX3Rlc3RfbHJ1KGZvbGlvKSwgZm9saW8pO1xuK1xuK1x0LypcbitcdCAqIEdhdGUgcmVtb3ZlX21hcHBpbmcoKSBvbiBmb2xpb190ZXN0X3N3YXBjYWNoZSgpOiBhIHJhY2luZyBzd2FwaW4gbWF5XG4rXHQgKiBoYXZlIGZyZWVkIHRoZSBzd2FwIHNsb3QgKGZvbGlvX2ZyZWVfc3dhcCgpKSBhbmQgZHJvcHBlZCB0aGUgZm9saW8gZnJvbVxuK1x0ICogdGhlIGNhY2hlLCBhbmQgcmVtb3ZlX21hcHBpbmcoKSBtdXN0IG5vdCBydW4gb24gYSBub24tc3dhcGNhY2hlIGZvbGlvXG4rXHQgKiAoaXQgd291bGQgdHJpcCBfX3JlbW92ZV9tYXBwaW5nKCkncyBtYXBwaW5nID09IGZvbGlvX21hcHBpbmcoKSBjaGVjaykuXG4rXHQgKi9cbitcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykgXHUwMDI2XHUwMDI2XG4rXHQgICAgcmVtb3ZlX21hcHBpbmcoc3dhcF9hZGRyZXNzX3NwYWNlKGZvbGlvLVx1MDAzZXN3YXApLCBmb2xpbykpXG4rXHRcdGdvdG8gb3V0O1xuK1xuK1x0LyogUmFjZWQ6IHRoZSBmb2xpbyBpcyBub3cgb3duZWQgYnkgdGhlIHN3YXBpbjsgcHV0IGl0IGJhY2sgb24gdGhlIExSVS4gKi9cbitcdGZvbGlvX2NsZWFyX2Ryb3BiZWhpbmQoZm9saW8pO1xuK1x0Zm9saW9fYWRkX2xydShmb2xpbyk7XG4rb3V0OlxuK1x0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbitcdGZvbGlvX3B1dChmb2xpbyk7XG4rfVxuK1xuK3N0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgbGxpc3RfaGVhZCwgenN3YXBfZHJvcGJlaGluZF9sbGlzdCk7XG4rXG4rc3RhdGljIHZvaWQgenN3YXBfZHJvcGJlaGluZF93b3JrZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuK3tcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpwb3MsICpuZXh0O1xuK1x0aW50IGNwdTtcbitcbitcdGZvcl9lYWNoX3Bvc3NpYmxlX2NwdShjcHUpIHtcbitcdFx0cG9zID0gbGxpc3RfZGVsX2FsbChwZXJfY3B1X3B0cihcdTAwMjZ6c3dhcF9kcm9wYmVoaW5kX2xsaXN0LCBjcHUpKTtcbitcdFx0bGxpc3RfZm9yX2VhY2hfc2FmZShwb3MsIG5leHQsIHBvcykge1xuK1x0XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBjb250YWluZXJfb2YoKHN0cnVjdCBsaXN0X2hlYWQgKilwb3MsXG4rXHRcdFx0XHRcdFx0XHQgICBzdHJ1Y3QgZm9saW8sIGxydSk7XG4rXHRcdFx0enN3YXBfd3JpdGViYWNrX2ZyZWVfZm9saW8oZm9saW8pO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBERUNMQVJFX1dPUksoenN3YXBfZHJvcGJlaGluZF93b3JrLCB6c3dhcF9kcm9wYmVoaW5kX3dvcmtmbik7XG4rXG4rdm9pZCB6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuK3tcbitcdGxsaXN0X2FkZCgoc3RydWN0IGxsaXN0X25vZGUgKilcdTAwMjZmb2xpby1cdTAwM2VscnUsXG4rXHRcdCAgdGhpc19jcHVfcHRyKFx1MDAyNnpzd2FwX2Ryb3BiZWhpbmRfbGxpc3QpKTtcbitcdHNjaGVkdWxlX3dvcmsoXHUwMDI2enN3YXBfZHJvcGJlaGluZF93b3JrKTtcbit9XG4rXG4gLypcbiAgKiBBdHRlbXB0cyB0byBmcmVlIGFuIGVudHJ5IGJ5IGFkZGluZyBhIGZvbGlvIHRvIHRoZSBzd2FwIGNhY2hlLFxuICAqIGRlY29tcHJlc3NpbmcgdGhlIGVudHJ5IGRhdGEgaW50byB0aGUgZm9saW8sIGFuZCBpc3N1aW5nIGFcbkBAIC05OTIsMTYgKzEwNDQsMTggQEAgc3RhdGljIGludCB6c3dhcF93cml0ZWJhY2tfZW50cnkoc3RydWN0IHpzd2FwX2VudHJ5ICplbnRyeSxcbiBcdHN0cnVjdCBmb2xpbyAqZm9saW87XG4gXHRzdHJ1Y3QgbWVtcG9saWN5ICptcG9sO1xuIFx0c3RydWN0IHN3YXBfaW5mb19zdHJ1Y3QgKnNpO1xuK1x0Ym9vbCBzeW5jO1xuIFx0aW50IHJldCA9IDA7XG4gXG4gXHQvKiB0cnkgdG8gYWxsb2NhdGUgc3dhcCBjYWNoZSBmb2xpbyAqL1xuIFx0c2kgPSBnZXRfc3dhcF9kZXZpY2Uoc3dwZW50cnkpO1xuIFx0aWYgKCFzaSlcbiBcdFx0cmV0dXJuIC1FRVhJU1Q7XG4rXHRzeW5jID0gZGF0YV9yYWNlKHNpLVx1MDAzZWZsYWdzIFx1MDAyNiBTV1BfU1lOQ0hST05PVVNfSU8pO1xuIFxuIFx0bXBvbCA9IGdldF90YXNrX3BvbGljeShjdXJyZW50KTtcbiBcdGZvbGlvID0gc3dhcF9jYWNoZV9hbGxvY19mb2xpbyhzd3BlbnRyeSwgR0ZQX0tFUk5FTCwgQklUKDApLCBOVUxMLCBtcG9sLFxuLVx0XHRcdFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgpO1xuK1x0XHRcdFx0ICAgICAgIE5PX0lOVEVSTEVBVkVfSU5ERVgsIHRydWUpO1xuIFx0cHV0X3N3YXBfZGV2aWNlKHNpKTtcbiBcbiBcdC8qXG5AQCAtMTA0NSwxMiArMTA5OSwxOCBAQCBzdGF0aWMgaW50IHpzd2FwX3dyaXRlYmFja19lbnRyeShzdHJ1Y3QgenN3YXBfZW50cnkgKmVudHJ5LFxuIFx0LyogZm9saW8gaXMgdXAgdG8gZGF0ZSAqL1xuIFx0Zm9saW9fbWFya191cHRvZGF0ZShmb2xpbyk7XG4gXG4tXHQvKiBtb3ZlIGl0IHRvIHRoZSB0YWlsIG9mIHRoZSBpbmFjdGl2ZSBsaXN0IGFmdGVyIGVuZF93cml0ZWJhY2sgKi9cbi1cdGZvbGlvX3NldF9yZWNsYWltKGZvbGlvKTtcbitcdC8qIEZyZWUgdGhlIGZvbGlvIG9uY2Ugd3JpdGViYWNrIGNvbXBsZXRlczsgc2VlIGZvbGlvX2VuZF93cml0ZWJhY2soKS4gKi9cbitcdGlmICghc3luYylcbitcdFx0Zm9saW9fc2V0X2Ryb3BiZWhpbmQoZm9saW8pO1xuIFxuIFx0Lyogc3RhcnQgd3JpdGViYWNrICovXG4gXHRfX3N3YXBfd3JpdGVwYWdlKGZvbGlvLCBOVUxMKTtcbiBcbitcdGlmIChzeW5jKSB7XG4rXHRcdHpzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvKGZvbGlvKTtcbitcdFx0cmV0dXJuIDA7XG4rXHR9XG4rXG4gb3V0OlxuIFx0aWYgKHJldCkge1xuIFx0XHRzd2FwX2NhY2hlX2RlbF9mb2xpbyhmb2xpbyk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxMDoxNTowOC4yNjM2NTc1WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMzMTQxODc3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBac3dhcCBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgZ290IGEgcGF0Y2ggaGVyZSB0aGF0J3MgcG9raW5nIGFyb3VuZCBpbiB0aGUgenN3YXAgYW5kIHN3YXAgc3Vic3lzdGVtcy4gU3BlY2lmaWNhbGx5LCBpdCdzIHRvdWNoaW5nIGBtbS96c3dhcC5jYCwgYG1tL2ZpbGVtYXAuY2AsIGBtbS9zd2FwLmhgLCBgbW0vc3dhcF9zdGF0ZS5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L3pzd2FwLmhgLiBUaGF0J3MgYSBkZWNlbnQgc3ByZWFkLCBpbmRpY2F0aW5nIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIG5vdCBqdXN0IGEgbWlub3IgdHdlYWsuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYHpzd2FwX3dyaXRlYmFja19kcm9wYmVoaW5kX2ZvbGlvYCBhbmQgdGhlIG1vZGlmaWNhdGlvbiBvZiBgZm9saW9fZW5kX3dyaXRlYmFja2AgdG8gY2FsbCBpdCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGF0dGVudGlvbi4gUGx1cywgdGhlIGFsdGVyYXRpb24gb2YgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gIHRvIHRha2UgYSBgc2tpcF9scnVgIHBhcmFtZXRlci4uLiB5ZWFoLCB0aGlzIGlzIGRlZmluaXRlbHkgd29ydGggc29tZSBzZXJpb3VzIGZ1enppbmcuXG5cbk15IHByaW1hcnkgZm9jdXMgbmVlZHMgdG8gYmUgb24gaWRlbnRpZnlpbmcgdGhlIGtleSBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIEkgbmVlZCB0byB6ZXJvIGluIG9uIHRoZSBpbnRlcmFjdGlvbnMgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCB3aGVyZSBlZGdlIGNhc2VzIGFyZSBsaWtlbHkgdG8gc3VyZmFjZS4gSSdtIHRoaW5raW5nIHRoZSBtYWluIHRhcmdldHMgd2lsbCBiZSBgenN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gLCBgenN3YXBfZHJvcGJlaGluZF93b3JrZm5gLCBgenN3YXBfd3JpdGViYWNrX2ZyZWVfZm9saW9gLCBgenN3YXBfd3JpdGViYWNrX2VudHJ5YCwgYW5kIG9mIGNvdXJzZSBgZm9saW9fZW5kX3dyaXRlYmFja2Agc2luY2UgaXQncyB0aGUgZ2F0ZXdheSBmb3IgdGhlIG5ldyBsb2dpYy4gQWxzbywgSSBjYW4ndCBmb3JnZXQgYHN3YXBfY2FjaGVfYWxsb2NfZm9saW9gLCBlc3BlY2lhbGx5IHdpdGggdGhhdCBuZXcgcGFyYW1ldGVyLlxuXG5Ob3csIGxldCdzIHNlZSBhYm91dCB0aGUgYnVpbGQgY29uZmlndXJhdGlvbi4gT2J2aW91c2x5LCBgQ09ORklHX1pTV0FQYCBpcyBhIG11c3QuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgS2NvbmZpZyBvcHRpb25zIHZlcnkgY2xvc2VseSB0byBlbnN1cmUgSSBoYXZlIHRoZSByaWdodCBlbnZpcm9ubWVudCBzZXQgdXAgZm9yIGNvbXByZWhlbnNpdmUgdGVzdGluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcgY3JpdGljYWwgZm9yIHJlcHJvZHVjaW5nIHRoZSBhZmZlY3RlZCBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTAwMywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDEwOjE1OjEzLjU5NTA3ODU3OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzExNTUyMzQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1pTV0FQXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT03OD1vYmotJChDT05GSUdfU1dBUClcXHQrPSBwYWdlX2lvLm8gc3dhcF9zdGF0ZS5vIHN3YXBmaWxlLm9cXG5tbS9NYWtlZmlsZTo3OTpvYmotJChDT05GSUdfWlNXQVApXFx0Kz0genN3YXAub1xcbm1tL01ha2VmaWxlLTgwLW9iai0kKENPTkZJR19IQVNfRE1BKVxcdCs9IGRtYXBvb2wub1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU1Mz1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NjktI2VuZGlmXFxubW0vbWVtY29udHJvbC5jOjU3MDojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTU3MS1cXHRaU1dQSU4sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTU0Nj1zdGF0aWMgY29uc3Qgc3RydWN0IG1lbW9yeV9zdGF0IG1lbW9yeV9zdGF0c1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTE1NTYtXFx0eyBcXFwic2htZW1cXFwiLFxcdFxcdFxcdE5SX1NITUVNXFx0XFx0XFx0fSxcXG5tbS9tZW1jb250cm9sLmM6MTU1NzojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTE1NTgtXFx0eyBcXFwienN3YXBcXFwiLFxcdFxcdFxcdE1FTUNHX1pTV0FQX0JcXHRcXHRcXHR9LFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQxNTc9bWVtX2Nncm91cF9jc3NfYWxsb2Moc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKnBhcmVudF9jc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDE3MC1cXHRtZW1jZzFfc29mdF9saW1pdF9yZXNldChtZW1jZyk7XFxubW0vbWVtY29udHJvbC5jOjQxNzE6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy00MTcyLVxcdG1lbWNnLVxcdTAwM2V6c3dhcF9tYXggPSBQQUdFX0NPVU5URVJfTUFYO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTU3ODk9c3RhdGljIHN0cnVjdCBjZnR5cGUgc3dhcF9maWxlc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTU4MjMtXFxubW0vbWVtY29udHJvbC5jOjU4MjQ6I2lmZGVmIENPTkZJR19aU1dBUFxcbm1tL21lbWNvbnRyb2wuYy01ODI1LS8qKlxcbi0tXFxubW0vbWVtY29udHJvbC5jPTYwMDE9c3RhdGljIHN0cnVjdCBjZnR5cGUgenN3YXBfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02MDE5LX07XFxubW0vbWVtY29udHJvbC5jOjYwMjA6I2VuZGlmIC8qIENPTkZJR19aU1dBUCAqL1xcbm1tL21lbWNvbnRyb2wuYy02MDIxLVxcbm1tL21lbWNvbnRyb2wuYz02MDIyPXN0YXRpYyBpbnQgX19pbml0IG1lbV9jZ3JvdXBfc3dhcF9pbml0KHZvaWQpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNjAzMC0jZW5kaWZcXG5tbS9tZW1jb250cm9sLmM6NjAzMTojaWZkZWYgQ09ORklHX1pTV0FQXFxubW0vbWVtY29udHJvbC5jLTYwMzItXFx0V0FSTl9PTihjZ3JvdXBfYWRkX2RmbF9jZnR5cGVzKFxcdTAwMjZtZW1vcnlfY2dycF9zdWJzeXMsIHpzd2FwX2ZpbGVzKSk7XFxuLS1cXG5tbS92bXN0YXQuYz0xMTg3PWNvbnN0IGNoYXIgKiBjb25zdCB2bXN0YXRfdGV4dFtdID0ge1xcbi0tXFxubW0vdm1zdGF0LmMtMTQ1MC0jZW5kaWZcXG5tbS92bXN0YXQuYzoxNDUxOiNpZmRlZiBDT05GSUdfWlNXQVBcXG5tbS92bXN0YXQuYy0xNDUyLVxcdFtJKFpTV1BJTildXFx0XFx0XFx0XFx0PSBcXFwienN3cGluXFxcIixcXG4tLVxcbm1tL3pzd2FwLmM9ODc9c3RhdGljIGludCB6c3dhcF9zZXR1cCh2b2lkKTtcXG4tLVxcbm1tL3pzd2FwLmMtODktLyogRW5hYmxlL2Rpc2FibGUgenN3YXAgKi9cXG5tbS96c3dhcC5jOjkwOnN0YXRpYyBERUZJTkVfU1RBVElDX0tFWV9NQVlCRShDT05GSUdfWlNXQVBfREVGQVVMVF9PTiwgenN3YXBfZXZlcl9lbmFibGVkKTtcXG5tbS96c3dhcC5jOjkxOnN0YXRpYyBib29sIHpzd2FwX2VuYWJsZWQgPSBJU19FTkFCTEVEKENPTkZJR19aU1dBUF9ERUZBVUxUX09OKTtcXG5tbS96c3dhcC5jLTkyLXN0YXRpYyBpbnQgenN3YXBfZW5hYmxlZF9wYXJhbV9zZXQoY29uc3QgY2hhciAqLFxcbi0tXFxubW0venN3YXAuYz05OD1tb2R1bGVfcGFyYW1fY2IoZW5hYmxlZCwgXFx1MDAyNnpzd2FwX2VuYWJsZWRfcGFyYW1fb3BzLCBcXHUwMDI2enN3YXBfZW5hYmxlZCwgMDY0NCk7XFxuLS1cXG5tbS96c3dhcC5jLTEwMC0vKiBDcnlwdG8gY29tcHJlc3NvciB0byB1c2UgKi9cXG5tbS96c3dhcC5jOjEwMTpzdGF0aWMgY2hhciAqenN3YXBfY29tcHJlc3NvciA9IENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQ7XFxubW0venN3YXAuYy0xMDItc3RhdGljIGludCB6c3dhcF9jb21wcmVzc29yX3BhcmFtX3NldChjb25zdCBjaGFyICosXFxuLS1cXG5tbS96c3dhcC5jPTEyMj1zdGF0aWMgYm9vbCB6c3dhcF9zaHJpbmtlcl9lbmFibGVkID0gSVNfRU5BQkxFRChcXG5tbS96c3dhcC5jOjEyMzpcXHRcXHRDT05GSUdfWlNXQVBfU0hSSU5LRVJfREVGQVVMVF9PTik7XFxubW0venN3YXAuYy0xMjQtbW9kdWxlX3BhcmFtX25hbWVkKHNocmlua2VyX2VuYWJsZWQsIHpzd2FwX3Nocmlua2VyX2VuYWJsZWQsIGJvb2wsIDA2NDQpO1xcbi0tXFxubW0venN3YXAuYz0xMzE9Ym9vbCB6c3dhcF9uZXZlcl9lbmFibGVkKHZvaWQpXFxubW0venN3YXAuYy0xMzIte1xcbm1tL3pzd2FwLmM6MTMzOlxcdHJldHVybiAhc3RhdGljX2JyYW5jaF9tYXliZShDT05GSUdfWlNXQVBfREVGQVVMVF9PTiwgXFx1MDAyNnpzd2FwX2V2ZXJfZW5hYmxlZCk7XFxubW0venN3YXAuYy0xMzQtfVxcbi0tXFxubW0venN3YXAuYz0zNDU9c3RhdGljIHN0cnVjdCB6c3dhcF9wb29sICpfX3pzd2FwX3Bvb2xfY3JlYXRlX2ZhbGxiYWNrKHZvaWQpXFxuLS1cXG5tbS96c3dhcC5jLTM0Ny1cXHRpZiAoIWNyeXB0b19oYXNfYWNvbXAoenN3YXBfY29tcHJlc3NvciwgMCwgMCkgXFx1MDAyNlxcdTAwMjZcXG5tbS96c3dhcC5jOjM0ODpcXHQgICAgc3RyY21wKHpzd2FwX2NvbXByZXNzb3IsIENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQpKSB7XFxubW0venN3YXAuYy0zNDktXFx0XFx0cHJfZXJyKFxcXCJjb21wcmVzc29yICVzIG5vdCBhdmFpbGFibGUsIHVzaW5nIGRlZmF1bHQgJXNcXFxcblxcXCIsXFxubW0venN3YXAuYzozNTA6XFx0XFx0ICAgICAgIHpzd2FwX2NvbXByZXNzb3IsIENPTkZJR19aU1dBUF9DT01QUkVTU09SX0RFRkFVTFQpO1xcbm1tL3pzd2FwLmMtMzUxLVxcdFxcdHBhcmFtX2ZyZWVfY2hhcnAoXFx1MDAyNnpzd2FwX2NvbXByZXNzb3IpO1xcbm1tL3pzd2FwLmM6MzUyOlxcdFxcdHpzd2FwX2NvbXByZXNzb3IgPSBDT05GSUdfWlNXQVBfQ09NUFJFU1NPUl9ERUZBVUxUO1xcbm1tL3pzd2FwLmMtMzUzLVxcdH1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTA6MTU6MTQuMDY2MjM4MjYzWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MjQ3NTkyODA1NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIFNpdHVhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBjdXJyZW50IGNvbmZpZ3VyYXRpb24gc2V0dGluZyB0aGF0J3Mgc3RhbmRpbmcgb3V0IHRvIG1lIGlzIGBaU1dBUGAuIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIGFzc2VzcyBpZiB0aGF0J3MgdGhlICpvbmx5KiBjb25maWd1cmF0aW9uIGF0IHBsYXkuIEknbSBnb2luZyB0byBxdWlja2x5IHNjYW4gZm9yIGFueSBvdGhlciBwb3RlbnRpYWxseSByZWxldmFudCBjb25maWd1cmF0aW9ucyB0aGF0IG1pZ2h0IGJlIGluIGVmZmVjdC4gSSBuZWVkIHRvIGdldCB0aGUgZnVsbCBwaWN0dXJlIGJlZm9yZSBqdW1waW5nIHRvIGFueSBjb25jbHVzaW9ucy4gTGV0J3Mgc2VlIHdoYXQgZWxzZSBpcyBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NzA2NywiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTE4VDEwOjE1OjE2LjU0MjE2NzgxN1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDYyMjA1MDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiQ09ORklHX1NXQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTc2PWVuZGlmXFxubW0vTWFrZWZpbGUtNzctXFxubW0vTWFrZWZpbGU6Nzg6b2JqLSQoQ09ORklHX1NXQVApXFx0Kz0gcGFnZV9pby5vIHN3YXBfc3RhdGUubyBzd2FwZmlsZS5vXFxubW0vTWFrZWZpbGUtNzktb2JqLSQoQ09ORklHX1pTV0FQKVxcdCs9IHpzd2FwLm9cXG4tLVxcbm1tL2ZpbGVtYXAuYz00NjIyPXN0YXRpYyB2b2lkIGZpbGVtYXBfY2FjaGVzdGF0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vZmlsZW1hcC5jLTQ2NjktXFxubW0vZmlsZW1hcC5jOjQ2NzA6I2lmZGVmIENPTkZJR19TV0FQIC8qIGltcGxpZXMgQ09ORklHX01NVSAqL1xcbm1tL2ZpbGVtYXAuYy00NjcxLVxcdFxcdFxcdGlmIChzaG1lbV9tYXBwaW5nKG1hcHBpbmcpKSB7XFxuLS1cXG5tbS9rc20uYz0zMTA3PXN0cnVjdCBmb2xpbyAqa3NtX21pZ2h0X25lZWRfdG9fY29weShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0va3NtLmMtMzE0Ni1cXHRcXHRfX2ZvbGlvX3NldF9sb2NrZWQobmV3X2ZvbGlvKTtcXG5tbS9rc20uYzozMTQ3OiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL2tzbS5jLTMxNDgtXFx0XFx0Y291bnRfdm1fZXZlbnQoS1NNX1NXUElOX0NPUFkpO1xcbi0tXFxubW0vbWFkdmlzZS5jPTE1MD1zdGF0aWMgaW50IG1hZHZpc2VfdXBkYXRlX3ZtYSh2bV9mbGFnc190IG5ld19mbGFncyxcXG4tLVxcbm1tL21hZHZpc2UuYy0xODUtXFxubW0vbWFkdmlzZS5jOjE4NjojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tYWR2aXNlLmMtMTg3LXN0YXRpYyBpbnQgc3dhcGluX3dhbGtfcG1kX2VudHJ5KHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsXFxuLS1cXG5tbS9tYWR2aXNlLmM9MjM0PXN0YXRpYyB2b2lkIHNobWVtX3N3YXBpbl9yYW5nZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21hZHZpc2UuYy0yNjktfVxcbm1tL21hZHZpc2UuYzoyNzA6I2VuZGlmXFx0XFx0LyogQ09ORklHX1NXQVAgKi9cXG5tbS9tYWR2aXNlLmMtMjcxLVxcbi0tXFxubW0vbWFkdmlzZS5jPTI4MT1zdGF0aWMgbG9uZyBtYWR2aXNlX3dpbGxuZWVkKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTI4OS1cXG5tbS9tYWR2aXNlLmM6MjkwOiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21hZHZpc2UuYy0yOTEtXFx0aWYgKCFmaWxlKSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9NTk2PXZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTYwNS1cXG5tbS9tZW1jb250cm9sLXYxLmM6NjA2OiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21lbWNvbnRyb2wtdjEuYy02MDctLyoqXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MTg2Nj1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnMV9zdGF0c1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4NzctXFx0V09SS0lOR1NFVF9SRUZBVUxUX0ZJTEUsXFxubW0vbWVtY29udHJvbC12MS5jOjE4Nzg6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vbWVtY29udHJvbC12MS5jLTE4NzktXFx0TUVNQ0dfU1dBUCxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xODg0PXN0YXRpYyBjb25zdCBjaGFyICpjb25zdCBtZW1jZzFfc3RhdF9uYW1lc1tdID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4OTUtXFx0XFxcIndvcmtpbmdzZXRfcmVmYXVsdF9maWxlXFxcIixcXG5tbS9tZW1jb250cm9sLXYxLmM6MTg5NjojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLXYxLmMtMTg5Ny1cXHRcXFwic3dhcFxcXCIsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MzcyPXN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfbm9kZV9zdGF0X2l0ZW1zW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzk5LVxcdE5SX1NFQ09OREFSWV9QQUdFVEFCTEUsXFxubW0vbWVtY29udHJvbC5jOjQwMDojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9tZW1jb250cm9sLmMtNDAxLVxcdE5SX1NXQVBDQUNIRSxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NTM9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTY1LVxcdFBHTEFaWUZSRUVELFxcbm1tL21lbWNvbnRyb2wuYzo1NjY6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vbWVtY29udHJvbC5jLTU2Ny1cXHRTV1BJTl9aRVJPLFxcbi0tXFxubW0vbWVtY29udHJvbC5jPTE1NDY9c3RhdGljIGNvbnN0IHN0cnVjdCBtZW1vcnlfc3RhdCBtZW1vcnlfc3RhdHNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNTY0LVxcdHsgXFxcImZpbGVfd3JpdGViYWNrXFxcIixcXHRcXHROUl9XUklURUJBQ0tcXHRcXHRcXHR9LFxcbm1tL21lbWNvbnRyb2wuYzoxNTY1OiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL21lbWNvbnRyb2wuYy0xNTY2LVxcdHsgXFxcInN3YXBjYWNoZWRcXFwiLFxcdFxcdFxcdE5SX1NXQVBDQUNIRVxcdFxcdFxcdH0sXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTUzNz1pbnQgX19pbml0IG1lbV9jZ3JvdXBfaW5pdCh2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU1NzItXFxubW0vbWVtY29udHJvbC5jOjU1NzM6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vbWVtY29udHJvbC5jLTU1NzQtLyoqXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NjAzNj1zdWJzeXNfaW5pdGNhbGwobWVtX2Nncm91cF9zd2FwX2luaXQpO1xcbm1tL21lbWNvbnRyb2wuYy02MDM3LVxcbm1tL21lbWNvbnRyb2wuYzo2MDM4OiNlbmRpZiAvKiBDT05GSUdfU1dBUCAqL1xcbm1tL21lbWNvbnRyb2wuYy02MDM5LVxcbi0tXFxubW0vbWlncmF0ZS5jPTU3MT1zdGF0aWMgaW50IF9fZm9saW9fbWlncmF0ZV9tYXBwaW5nKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxubW0vbWlncmF0ZS5jLTY5MC1cXHRcXHR9XFxubW0vbWlncmF0ZS5jOjY5MTojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS9taWdyYXRlLmMtNjkyLVxcdFxcdGlmIChmb2xpb190ZXN0X3N3YXBjYWNoZShmb2xpbykpIHtcXG4tLVxcbm1tL21pbmNvcmUuYz02MT1zdGF0aWMgdW5zaWduZWQgY2hhciBtaW5jb3JlX3N3YXAoc3dwX2VudHJ5X3QgZW50cnksIGJvb2wgc2htZW0pXFxuLS1cXG5tbS9taW5jb3JlLmMtNzQtXFxubW0vbWluY29yZS5jOjc1OlxcdGlmICghSVNfRU5BQkxFRChDT05GSUdfU1dBUCkpIHtcXG5tbS9taW5jb3JlLmMtNzYtXFx0XFx0V0FSTl9PTigxKTtcXG4tLVxcbm1tL3N3YXAuaD02OT1lbnVtIHN3YXBfY2x1c3Rlcl9mbGFncyB7XFxuLS1cXG5tbS9zd2FwLmgtODAtXFxubW0vc3dhcC5oOjgxOiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL3N3YXAuaC04Mi0jaW5jbHVkZSBcXHUwMDNjbGludXgvc3dhcG9wcy5oXFx1MDAzZSAvKiBmb3Igc3dwX29mZnNldCAqL1xcbi0tXFxubW0vc3dhcC5oPTMzMz1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBmb2xpb19zd2FwX2ZsYWdzKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9zd2FwLmgtMzM3LVxcbm1tL3N3YXAuaDozMzg6I2Vsc2UgLyogQ09ORklHX1NXQVAgKi9cXG5tbS9zd2FwLmgtMzM5LXN0cnVjdCBzd2FwX2lvY2I7XFxuLS1cXG5tbS9zd2FwLmg9NDcxPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGZvbGlvX3N3YXBfZmxhZ3Moc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL3N3YXAuaC00NzUtXFxubW0vc3dhcC5oOjQ3NjojZW5kaWYgLyogQ09ORklHX1NXQVAgKi9cXG5tbS9zd2FwLmgtNDc3LSNlbmRpZiAvKiBfTU1fU1dBUF9IICovXFxuLS1cXG5tbS92bWFfaW5pdC5jPTQxPXN0YXRpYyB2b2lkIHZtX2FyZWFfaW5pdF9mcm9tKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vdm1hX2luaXQuYy02NC0jZW5kaWZcXG5tbS92bWFfaW5pdC5jOjY1OiNpZmRlZiBDT05GSUdfU1dBUFxcbm1tL3ZtYV9pbml0LmMtNjYtXFx0bWVtY3B5KFxcdTAwMjZkZXN0LVxcdTAwM2Vzd2FwX3JlYWRhaGVhZF9pbmZvLCBcXHUwMDI2c3JjLVxcdTAwM2Vzd2FwX3JlYWRhaGVhZF9pbmZvLFxcbi0tXFxubW0vdm1zdGF0LmM9MTE4Nz1jb25zdCBjaGFyICogY29uc3Qgdm1zdGF0X3RleHRbXSA9IHtcXG4tLVxcbm1tL3Ztc3RhdC5jLTEyNjctI2VuZGlmXFxubW0vdm1zdGF0LmM6MTI2ODojaWZkZWYgQ09ORklHX1NXQVBcXG5tbS92bXN0YXQuYy0xMjY5LVxcdFtJKE5SX1NXQVBDQUNIRSldXFx0XFx0XFx0PSBcXFwibnJfc3dhcGNhY2hlZFxcXCIsXFxuLS1cXG5tbS92bXN0YXQuYy0xNDM4LVxcbm1tL3Ztc3RhdC5jOjE0Mzk6I2lmZGVmIENPTkZJR19TV0FQXFxubW0vdm1zdGF0LmMtMTQ0MC1cXHRbSShTV0FQX1JBKV1cXHRcXHRcXHRcXHQ9IFxcXCJzd2FwX3JhXFxcIixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMThUMTA6MTU6MTYuNjQ4Mzk0MDE5WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTA3MDQyOTAyODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqWnN3YXAgV3JpdGViYWNrIERyb3BiZWhpbmQgQW5hbHlzaXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGJlZW4gbG9va2luZyBhdCB0aGlzIHBhdGNoIHJlbGF0ZWQgdG8gYENPTkZJR19aU1dBUGAsIGFuZCBzcGVjaWZpY2FsbHksIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgd3JpdGViYWNrIHByb2Nlc3MuIFRoZSBrZXkgZnVuY3Rpb24gaGVyZSBpcyBgenN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gLiBJdCBhcHBlYXJzIHRvIGJlIHRyaWdnZXJlZCBmcm9tIGBmb2xpb19lbmRfd3JpdGViYWNrYCB3aXRoaW4gYG1tL2ZpbGVtYXAuY2AuIEVzc2VudGlhbGx5LCB0aGUgbG9naWMgaXM6IElmIGEgZm9saW8gaXMgaW4gc3dhcCBjYWNoZSBhbmQgbWFya2VkIGZvciBcImRyb3BiZWhpbmQsXCIgd2UgY2FsbCB0aGlzIG5ldyBmdW5jdGlvbi5cblxuSW5zaWRlIGB6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb2AgKGluIGBtbS96c3dhcC5jYCksIHRoZSBmb2xpbyBpcyBhZGRlZCB0byBhIGxvY2FsIGxpc3QgYW5kIGEgd29ya3F1ZXVlLCBgenN3YXBfZHJvcGJlaGluZF93b3JrYCwgaXMgc2NoZWR1bGVkLiBUaGUgd29yayBmdW5jdGlvbiwgYHpzd2FwX2Ryb3BiZWhpbmRfd29ya2ZuYCwgdGhlbiBjYWxscyBgenN3YXBfd3JpdGViYWNrX2ZyZWVfZm9saW9gLlxuXG5Ob3csIGB6c3dhcF93cml0ZWJhY2tfZnJlZV9mb2xpb2AgaXMgd2hlcmUgaXQgZ2V0cyBpbnRlcmVzdGluZy4gIEl0IGF0dGVtcHRzIHRvIHJlbW92ZSB0aGUgZm9saW8gZnJvbSB0aGUgc3dhcCBjYWNoZSwgYnV0IGNydWNpYWxseSwgaXQgY2hlY2tzIGBmb2xpb190ZXN0X3N3YXBjYWNoZWAgYmVmb3JlIGNhbGxpbmcgYHJlbW92ZV9tYXBwaW5nYC4gVGhlcmUncyBhbHNvIHNvbWUgaW50ZXJlc3RpbmcgbG9naWMgdG8gaGFuZGxlIHJhY2VzIHdpdGggYSBzd2FwaW4gb3BlcmF0aW9uLCBwb3RlbnRpYWxseSBwdXR0aW5nIHRoZSBmb2xpbyBiYWNrIG9uIHRoZSBMUlUgaWYgaXQncyBubyBsb25nZXIgYSBzd2FwIGNhY2hlIGZvbGlvLlxuXG5Mb29raW5nIGF0IGB6c3dhcF93cml0ZWJhY2tfZW50cnlgLCB0aGUgcGF0Y2ggbW9kaWZpZXMgaG93IGZvbGlvcyBhcmUgYWxsb2NhdGVkIGFuZCBtYXJrZWQgZm9yIHRoaXMgXCJkcm9wYmVoaW5kXCIgYmVoYXZpb3IuICBJZiB0aGUgd3JpdGViYWNrIGlzbid0IHN5bmNocm9ub3VzIChgc3luY2AgaXMgZmFsc2UpLCB0aGUgZm9saW8gaXMgc2V0IHdpdGggYGZvbGlvX3NldF9kcm9wYmVoaW5kYCwgYW5kIHdyaXRlYmFjayBpcyBpbml0aWF0ZWQuIFRoZSBwYXRjaCBhZGRzIGEgY29uZGl0aW9uYWwgYHpzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvYCBjYWxsIGFmdGVyIHRoZSB3cml0ZWJhY2suIFRoaXMgaXMgYSBjcnVjaWFsIGRpZmZlcmVuY2UgaW4gYmVoYXZpb3IuXG5cbkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIHRoaXMgaXMgZGVmaW5pdGVseSBhIGZ1bmN0aW9uYWwgY2hhbmdlIHdvcnRoIGZ1enppbmcuIEknbGwgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBzeW1ib2xzOiBgenN3YXBfd3JpdGViYWNrX2Ryb3BiZWhpbmRfZm9saW9gLCBgenN3YXBfZHJvcGJlaGluZF93b3JrZm5gLCBgenN3YXBfd3JpdGViYWNrX2ZyZWVfZm9saW9gLCBhbmQgYHpzd2FwX3dyaXRlYmFja19lbnRyeWAuIFRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zIGFyZSBgWlNXQVBgIGFuZCBgU1dBUGAsIHdpdGggYFpTV0FQYCBkZXBlbmRlbnQgb24gYFNXQVBgLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHN3YXAgc3Vic3lzdGVtcyBhbmQgcmVwcmVzZW50cyBhIG5ldyBtZXRob2QgZm9yIGhhbmRpbmcgenN3YXAgd3JpdGViYWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTQ1LCJPdXRwdXRUb2tlbnMiOjEyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0xOFQxMDoxNToyNy4zNTI2ODU3NzRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3MTg3OTMyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNXQVBcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb1wiLFxuICAgIFwienN3YXBfZHJvcGJlaGluZF93b3JrZm5cIixcbiAgICBcInpzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvXCIsXG4gICAgXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgaGFuZGxpbmcgenN3YXAgd3JpdGViYWNrIGRyb3BiZWhpbmQgZm9saW9zLCBpbmNsdWRpbmcgYSBuZXcgd29ya3F1ZXVlIGFuZCBvZmYtTFJVIGZvbGlvIG1hbmFnZW1lbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIHN1YnN5c3RlbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiWlNXQVBcIixcbiAgICBcIlNXQVBcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ6c3dhcF93cml0ZWJhY2tfZHJvcGJlaGluZF9mb2xpb1wiLFxuICAgIFwienN3YXBfZHJvcGJlaGluZF93b3JrZm5cIixcbiAgICBcInpzd2FwX3dyaXRlYmFja19mcmVlX2ZvbGlvXCIsXG4gICAgXCJ6c3dhcF93cml0ZWJhY2tfZW50cnlcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IG1lY2hhbmlzbSBmb3IgaGFuZGxpbmcgenN3YXAgd3JpdGViYWNrIGRyb3BiZWhpbmQgZm9saW9zLCBpbmNsdWRpbmcgYSBuZXcgd29ya3F1ZXVlIGFuZCBvZmYtTFJVIGZvbGlvIG1hbmFnZW1lbnQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBzd2FwIHN1YnN5c3RlbXMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqgxw[1] Phase: Succeeded StartedAt: 2026-07-18 10:15:39 +0000 UTC FinishedAt: 2026-07-18 10:15:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-18 10:15:39 +0000 UTC FinishedAt: 2026-07-18 10:15:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[2] Phase: Succeeded StartedAt: 2026-07-18 10:15:39 +0000 UTC FinishedAt: 2026-07-18 14:21:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-18 10:15:39 +0000 UTC FinishedAt: 2026-07-18 14:21:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-18 10:15:39 +0000 UTC FinishedAt: 2026-07-18 10:16:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-18 10:15:39 +0000 UTC FinishedAt: 2026-07-18 10:15:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowgqgxw/series-workflowgqgxw-convert-artifact-1130007290/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-18 10:16:00 +0000 UTC FinishedAt: 2026-07-18 10:43:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-18 10:16:00 +0000 UTC FinishedAt: 2026-07-18 10:43:17 +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:*402ef396-47f4-4a1d-b165-9d8110a330b6,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-workflowgqgxw/series-workflowgqgxw-convert-artifact-1130007290/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": "afe24bbd-7337-45e2-aa04-d2b5ee0bb6cc", "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-workflowgqgxw/series-workflowgqgxw-build-action-3464780712/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-18 10:16:00 +0000 UTC FinishedAt: 2026-07-18 10:43:07 +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:*402ef396-47f4-4a1d-b165-9d8110a330b6,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-workflowgqgxw/series-workflowgqgxw-convert-artifact-1130007290/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": "afe24bbd-7337-45e2-aa04-d2b5ee0bb6cc", "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-workflowgqgxw/series-workflowgqgxw-build-action-3464780712/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-18 10:43:17 +0000 UTC FinishedAt: 2026-07-18 10:43:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-18 10:43:17 +0000 UTC FinishedAt: 2026-07-18 10:43:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-18 10:43:17 +0000 UTC FinishedAt: 2026-07-18 10:43:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-18 10:43:17 +0000 UTC FinishedAt: 2026-07-18 10:43:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},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-workflowgqgxw/series-workflowgqgxw-convert-artifact-1112589653/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-18 10:43:27 +0000 UTC FinishedAt: 2026-07-18 10:45:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-18 10:43:27 +0000 UTC FinishedAt: 2026-07-18 10:45:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*afe24bbd-7337-45e2-aa04-d2b5ee0bb6cc,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-workflowgqgxw/series-workflowgqgxw-build-action-3464780712/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-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-18 10:45:54 +0000 UTC FinishedAt: 2026-07-18 10:45:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-18 10:45:54 +0000 UTC FinishedAt: 2026-07-18 10:45:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-18 10:45:54 +0000 UTC FinishedAt: 2026-07-18 11:13:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-18 10:45:54 +0000 UTC FinishedAt: 2026-07-18 11:13:56 +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:*402ef396-47f4-4a1d-b165-9d8110a330b6,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-workflowgqgxw/series-workflowgqgxw-convert-artifact-1112589653/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": "a26996f8-e72d-46cf-8e60-3129d048d41d", "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-workflowgqgxw/series-workflowgqgxw-build-action-2688673505/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-18 10:45:54 +0000 UTC FinishedAt: 2026-07-18 11:13:46 +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:*402ef396-47f4-4a1d-b165-9d8110a330b6,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-workflowgqgxw/series-workflowgqgxw-convert-artifact-1112589653/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": "a26996f8-e72d-46cf-8e60-3129d048d41d", "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-workflowgqgxw/series-workflowgqgxw-build-action-2688673505/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-18 11:13:56 +0000 UTC FinishedAt: 2026-07-18 11:13:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-18 11:13:56 +0000 UTC FinishedAt: 2026-07-18 11:13:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-18 11:13:56 +0000 UTC FinishedAt: 2026-07-18 11:16:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-18 11:13:56 +0000 UTC FinishedAt: 2026-07-18 11:15:58 +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:*a26996f8-e72d-46cf-8e60-3129d048d41d,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-workflowgqgxw/series-workflowgqgxw-build-action-2688673505/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-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-18 11:16:08 +0000 UTC FinishedAt: 2026-07-18 14:21:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-18 11:16:08 +0000 UTC FinishedAt: 2026-07-18 14:21:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"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:*afe24bbd-7337-45e2-aa04-d2b5ee0bb6cc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a26996f8-e72d-46cf-8e60-3129d048d41d,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-workflowgqgxw/series-workflowgqgxw-build-action-3464780712/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-workflowgqgxw/series-workflowgqgxw-build-action-2688673505/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-18 11:16:08 +0000 UTC FinishedAt: 2026-07-18 11:16:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-18 11:16:08 +0000 UTC FinishedAt: 2026-07-18 11:16:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"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-workflowgqgxw/series-workflowgqgxw-convert-artifact-2346831674/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-18 11:16:08 +0000 UTC FinishedAt: 2026-07-18 11:16:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-18 11:16:08 +0000 UTC FinishedAt: 2026-07-18 11:16:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-18 11:16:08 +0000 UTC FinishedAt: 2026-07-18 11:16:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-18 11:16:18 +0000 UTC FinishedAt: 2026-07-18 14:21:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowgqgxw[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["zswap_writeback_dropbehind_folio","zswap_dropbehind_workfn","zswap_writeback_free_folio","zswap_writeback_entry"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"94515f3a7d4256a5062176b7d6ed0471938cd51a","config_name":"upstream-apparmor-kasan.config","enable_configs":["ZSWAP","SWAP"],"series_id":"ac03de44-3a24-4b8d-8bb6-53a96b0ff7d1","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-18 11:16:18 +0000 UTC FinishedAt: 2026-07-18 14:21:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*afe24bbd-7337-45e2-aa04-d2b5ee0bb6cc,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a26996f8-e72d-46cf-8e60-3129d048d41d,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-workflowgqgxw/series-workflowgqgxw-build-action-3464780712/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-workflowgqgxw/series-workflowgqgxw-build-action-2688673505/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-workflowgqgxw/series-workflowgqgxw-convert-artifact-2346831674/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,}