Name: series-workflowmfb7f Phase: Succeeded StartedAt: 2026-07-06 13:12:19 +0000 UTC FinishedAt: 2026-07-06 18:34:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[0] Phase: Succeeded StartedAt: 2026-07-06 13:12:19 +0000 UTC FinishedAt: 2026-07-06 13:44:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[0].run-triage Phase: Succeeded StartedAt: 2026-07-06 13:12:19 +0000 UTC FinishedAt: 2026-07-06 13:44:30 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d7a8d500d7e42837bd8dce40cb52c97c6e8706a9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d7a8d500d7e42837bd8dce40cb52c97c6e8706a9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "af025c52-5aab-4e59-8e36-060667fa2a57" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "validate_and_copy_sample", "validate_and_copy_dec_ttl", "validate_and_copy_clone", "validate_and_copy_set_tun", "validate_set", "validate_and_copy_check_pkt_len", "__ovs_nla_copy_actions" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmFsaWRhdGVfYW5kX2NvcHlfc2FtcGxlJiMzNDssCiAgICAmIzM0O3ZhbGlkYXRlX2FuZF9jb3B5X2RlY190dGwmIzM0OywKICAgICYjMzQ7dmFsaWRhdGVfYW5kX2NvcHlfY2xvbmUmIzM0OywKICAgICYjMzQ7dmFsaWRhdGVfYW5kX2NvcHlfc2V0X3R1biYjMzQ7LAogICAgJiMzNDt2YWxpZGF0ZV9zZXQmIzM0OywKICAgICYjMzQ7dmFsaWRhdGVfYW5kX2NvcHlfY2hlY2tfcGt0X2xlbiYjMzQ7LAogICAgJiMzNDtfX292c19ubGFfY29weV9hY3Rpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgbGVha3MgaW4gT3BlbiB2U3dpdGNoIG5ldGxpbmsgYWN0aW9uIHBhcnNpbmcgKGBfX292c19ubGFfY29weV9hY3Rpb25zYCBhbmQgcmVsYXRlZCBgdmFsaWRhdGVfYW5kX2NvcHlfKmAgZnVuY3Rpb25zKS4gSXQgZW5zdXJlcyB0aGF0IHdoZW4gbmVzdGVkIGFjdGlvbiBwYXJzaW5nIGZhaWxzLCB0aGUgZ2VuZXJhdGVkIGFjdGlvbiBsaXN0IGlzIHByb3Blcmx5IHRydW5jYXRlZCBhbmQgZnJlZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBPVlMgbG9naWMgdGhhdCBwcm9jZXNzZXMgdXNlcnNwYWNlIGlucHV0LCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTRkZDM0NjI4Zjk3MzllNjczYTg1OWVjNjc0MzMyYzJjZWI5ODU0MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTM6NDI6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jXG5pbmRleCAxMzA1MjQwOGExMzJmNC4uZDgwNzlkZWU3MDBlZGMgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuY1xuQEAgLTI0OTYsMTMgJiM0MzsyNDk2LDU2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFkZF9uZXN0ZWRfYWN0aW9uX3N0YXJ0KHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKipzZmEsXG4gXHRyZXR1cm4gdXNlZDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGFkZF9uZXN0ZWRfYWN0aW9uX2VuZChzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICpzZmEsXG4tXHRcdFx0XHRcdCBpbnQgc3Rfb2Zmc2V0KVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBhZGRfbmVzdGVkX2FjdGlvbl9lbmQoc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqc2ZhLFxuJiM0MztcdFx0XHRcdFx0aW50IHN0X29mZnNldClcbiB7XG4tXHRzdHJ1Y3QgbmxhdHRyICphID0gKHN0cnVjdCBubGF0dHIgKikgKCh1bnNpZ25lZCBjaGFyICopc2ZhLVx1MDAzZWFjdGlvbnMgJiM0Mztcbi1cdFx0XHRcdFx0XHRcdCAgICAgICBzdF9vZmZzZXQpO1xuJiM0MztcdHN0cnVjdCBubGF0dHIgKmE7XG4mIzQzO1x0dTMyIGF0dHJfbGVuO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKHN0X29mZnNldCBcdTAwM2MgMCB8fFxuJiM0MztcdFx0XHQgKHUzMilzdF9vZmZzZXQgXHUwMDNlIHNmYS1cdTAwM2VhY3Rpb25zX2xlbikpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0YXR0cl9sZW4gPSBzZmEtXHUwMDNlYWN0aW9uc19sZW4gLSAodTMyKXN0X29mZnNldDtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKGF0dHJfbGVuIFx1MDAzYyBOTEFfSERSTEVOKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0YS1cdTAwM2VubGFfbGVuID0gc2ZhLVx1MDAzZWFjdGlvbnNfbGVuIC0gc3Rfb2Zmc2V0O1xuJiM0MztcdGlmIChhdHRyX2xlbiBcdTAwM2UgVTE2X01BWClcbiYjNDM7XHRcdHJldHVybiAtRU1TR1NJWkU7XG4mIzQzO1xuJiM0MztcdGEgPSAoc3RydWN0IG5sYXR0ciAqKSgodTggKilzZmEtXHUwMDNlYWN0aW9ucyAmIzQzOyBzdF9vZmZzZXQpO1xuJiM0MztcdGEtXHUwMDNlbmxhX2xlbiA9IGF0dHJfbGVuO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBGcmVlIHRoZSBnZW5lcmF0ZWQgYWN0aW9uLWxpc3QgdGFpbCBhdCBAc3RhcnQgYW5kIHRydW5jYXRlIGl0LlxuJiM0MzsgKiBJZiBAbmVzdGVkLCBAc3RhcnQgcG9pbnRzIHRvIGl0cyBjb250YWluaW5nIG5sYXR0ciBoZWFkZXIuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBvdnNfbmxhX3RyaW0oc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqc2ZhLCBpbnQgc3RhcnQsIGJvb2wgbmVzdGVkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG5sYXR0ciAqYWN0aW9ucztcbiYjNDM7XHR1MzIgbGVuO1xuJiM0MztcbiYjNDM7XHRpZiAoc3RhcnQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoKHUzMilzdGFydCBcdTAwM2Ugc2ZhLVx1MDAzZWFjdGlvbnNfbGVuKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0YWN0aW9ucyA9IChjb25zdCBzdHJ1Y3QgbmxhdHRyICopKCh1OCAqKXNmYS1cdTAwM2VhY3Rpb25zICYjNDM7IHN0YXJ0KTtcbiYjNDM7XHRsZW4gPSBzZmEtXHUwMDNlYWN0aW9uc19sZW4gLSAodTMyKXN0YXJ0O1xuJiM0MztcbiYjNDM7XHRpZiAobmVzdGVkKSB7XG4mIzQzO1x0XHRpZiAobGVuIFx1MDAzYyBOTEFfSERSTEVOKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRhY3Rpb25zID0gKGNvbnN0IHN0cnVjdCBubGF0dHIgKikoKHU4ICopYWN0aW9ucyAmIzQzOyBOTEFfSERSTEVOKTtcbiYjNDM7XHRcdGxlbiAtPSBOTEFfSERSTEVOO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b3ZzX25sYV9mcmVlX25lc3RlZF9hY3Rpb25zKGFjdGlvbnMsIGxlbik7XG4mIzQzO291dDpcbiYjNDM7XHRzZmEtXHUwMDNlYWN0aW9uc19sZW4gPSBzdGFydDtcbiB9XG4gXG4gc3RhdGljIGludCBfX292c19ubGFfY29weV9hY3Rpb25zKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbkBAIC0yNTIyLDYgJiM0MzsyNTY1LDcgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9zYW1wbGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cnNbT1ZTX1NBTVBMRV9BVFRSX01BWCAmIzQzOyAxXTtcbiBcdGNvbnN0IHN0cnVjdCBubGF0dHIgKnByb2JhYmlsaXR5LCAqYWN0aW9ucztcbiBcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmE7XG4mIzQzO1x0aW50IGFjdGlvbnNfc3RhcnQ7XG4gXHRpbnQgcmVtLCBzdGFydCwgZXJyO1xuIFx0c3RydWN0IHNhbXBsZV9hcmcgYXJnO1xuIFxuQEAgLTI1NjUsMTggJiM0MzsyNjA5LDI3IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfc2FtcGxlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbiBcdGVyciA9IG92c19ubGFfYWRkX2FjdGlvbihzZmEsIE9WU19TQU1QTEVfQVRUUl9BUkcsIFx1MDAyNmFyZywgc2l6ZW9mKGFyZyksXG4gXHRcdFx0XHQgbG9nKTtcbiBcdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRnb3RvIGVycjtcbiBcbiYjNDM7XHRhY3Rpb25zX3N0YXJ0ID0gKCpzZmEpLVx1MDAzZWFjdGlvbnNfbGVuO1xuIFx0ZXJyID0gX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhuZXQsIGFjdGlvbnMsIGtleSwgc2ZhLFxuIFx0XHRcdFx0ICAgICBldGhfdHlwZSwgdmxhbl90Y2ksIG1wbHNfbGFiZWxfY291bnQsIGxvZyxcbiBcdFx0XHRcdCAgICAgZGVwdGggJiM0MzsgMSk7XG4gXG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0Z290byBlcnJfZnJlZTtcbiBcbi1cdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XG4mIzQzO1x0ZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZTtcbiBcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2ZyZWU6XG4mIzQzO1x0b3ZzX25sYV90cmltKCpzZmEsIGFjdGlvbnNfc3RhcnQsIGZhbHNlKTtcbiYjNDM7ZXJyOlxuJiM0MztcdCgqc2ZhKS1cdTAwM2VhY3Rpb25zX2xlbiA9IHN0YXJ0O1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfZGVjX3R0bChzdHJ1Y3QgbmV0ICpuZXQsXG5AQCAtMjYyNCwxOCAmIzQzOzI2NzcsMzEgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9kZWNfdHRsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0cmV0dXJuIHN0YXJ0O1xuIFxuIFx0YWN0aW9uX3N0YXJ0ID0gYWRkX25lc3RlZF9hY3Rpb25fc3RhcnQoc2ZhLCBPVlNfREVDX1RUTF9BVFRSX0FDVElPTiwgbG9nKTtcbi1cdGlmIChhY3Rpb25fc3RhcnQgXHUwMDNjIDApXG4tXHRcdHJldHVybiBhY3Rpb25fc3RhcnQ7XG4mIzQzO1x0aWYgKGFjdGlvbl9zdGFydCBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZXJyID0gYWN0aW9uX3N0YXJ0O1xuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuIFxuIFx0ZXJyID0gX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhuZXQsIGFjdGlvbnMsIGtleSwgc2ZhLCBldGhfdHlwZSxcbiBcdFx0XHRcdCAgICAgdmxhbl90Y2ksIG1wbHNfbGFiZWxfY291bnQsIGxvZyxcbiBcdFx0XHRcdCAgICAgZGVwdGggJiM0MzsgMSk7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0Z290byBlcnJfZnJlZTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIGFjdGlvbl9zdGFydCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWU7XG4gXG4tXHRhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgYWN0aW9uX3N0YXJ0KTtcbi1cdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XG4mIzQzO1x0ZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZTtcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2ZyZWU6XG4mIzQzO1x0b3ZzX25sYV90cmltKCpzZmEsIGFjdGlvbl9zdGFydCwgdHJ1ZSk7XG4mIzQzO2VycjpcbiYjNDM7XHQoKnNmYSktXHUwMDNlYWN0aW9uc19sZW4gPSBzdGFydDtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X2Nsb25lKHN0cnVjdCBuZXQgKm5ldCxcbkBAIC0yNjQ2LDYgJiM0MzsyNzEyLDcgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9jbG9uZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICB1MzIgbXBsc19sYWJlbF9jb3VudCwgYm9vbCBsb2csIGJvb2wgbGFzdCxcbiBcdFx0XHRcdCAgIHUzMiBkZXB0aClcbiB7XG4mIzQzO1x0aW50IGFjdGlvbnNfc3RhcnQ7XG4gXHRpbnQgc3RhcnQsIGVycjtcbiBcdHUzMiBleGVjO1xuIFxuQEAgLTI2NjEsMTcgJiM0MzsyNzI4LDI2IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfY2xvbmUoc3RydWN0IG5ldCAqbmV0LFxuIFx0ZXJyID0gb3ZzX25sYV9hZGRfYWN0aW9uKHNmYSwgT1ZTX0NMT05FX0FUVFJfRVhFQywgXHUwMDI2ZXhlYyxcbiBcdFx0XHRcdCBzaXplb2YoZXhlYyksIGxvZyk7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0Z290byBlcnI7XG4gXG4mIzQzO1x0YWN0aW9uc19zdGFydCA9ICgqc2ZhKS1cdTAwM2VhY3Rpb25zX2xlbjtcbiBcdGVyciA9IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMobmV0LCBhdHRyLCBrZXksIHNmYSxcbiBcdFx0XHRcdCAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXG4gXHRcdFx0XHQgICAgIGRlcHRoICYjNDM7IDEpO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWU7XG4gXG4tXHRhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgc3RhcnQpO1xuJiM0MztcdGVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWU7XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9mcmVlOlxuJiM0MztcdG92c19ubGFfdHJpbSgqc2ZhLCBhY3Rpb25zX3N0YXJ0LCBmYWxzZSk7XG4mIzQzO2VycjpcbiYjNDM7XHQoKnNmYSktXHUwMDNlYWN0aW9uc19sZW4gPSBzdGFydDtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiB2b2lkIG92c19tYXRjaF9pbml0KHN0cnVjdCBzd19mbG93X21hdGNoICptYXRjaCxcbkBAIC0yNzYzLDIwICYjNDM7MjgzOSwyMCBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X3NldF90dW4oY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbiBcdHR1bl9kc3QgPSBtZXRhZGF0YV9kc3RfYWxsb2Moa2V5LnR1bl9vcHRzX2xlbiwgTUVUQURBVEFfSVBfVFVOTkVMLFxuIFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbiBcbi1cdGlmICghdHVuX2RzdClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0aWYgKCF0dW5fZHN0KSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuIFxuIFx0ZXJyID0gZHN0X2NhY2hlX2luaXQoXHUwMDI2dHVuX2RzdC1cdTAwM2V1LnR1bl9pbmZvLmRzdF9jYWNoZSwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGRzdF9yZWxlYXNlKChzdHJ1Y3QgZHN0X2VudHJ5ICopdHVuX2RzdCk7XG4tXHRcdHJldHVybiBlcnI7XG4tXHR9XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfdHVuX2RzdDtcbiBcbiBcdGEgPSBfX2FkZF9hY3Rpb24oc2ZhLCBPVlNfS0VZX0FUVFJfVFVOTkVMX0lORk8sIE5VTEwsXG4gXHRcdFx0IHNpemVvZigqb3ZzX3R1biksIGxvZyk7XG4gXHRpZiAoSVNfRVJSKGEpKSB7XG4tXHRcdGRzdF9yZWxlYXNlKChzdHJ1Y3QgZHN0X2VudHJ5ICopdHVuX2RzdCk7XG4tXHRcdHJldHVybiBQVFJfRVJSKGEpO1xuJiM0MztcdFx0ZXJyID0gUFRSX0VSUihhKTtcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfdHVuX2RzdDtcbiBcdH1cbiBcbiBcdG92c190dW4gPSBubGFfZGF0YShhKTtcbkBAIC0yNzk3LDggJiM0MzsyODczLDE2IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfc2V0X3R1bihjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIFx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQodHVuX2luZm8sXG4gXHRcdFx0XHRUVU5fTUVUQURBVEFfT1BUUyhcdTAwMjZrZXksIGtleS50dW5fb3B0c19sZW4pLFxuIFx0XHRcdFx0a2V5LnR1bl9vcHRzX2xlbiwgZHN0X29wdF90eXBlKTtcbi1cdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XG4mIzQzO1x0ZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKGVycikpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX3R1bl9kc3Q7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuIFxuJiM0MztlcnJfZnJlZV90dW5fZHN0OlxuJiM0MztcdGRzdF9yZWxlYXNlKChzdHJ1Y3QgZHN0X2VudHJ5ICopdHVuX2RzdCk7XG4mIzQzO2VycjpcbiYjNDM7XHQoKnNmYSktXHUwMDNlYWN0aW9uc19sZW4gPSBzdGFydDtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTI5NzEsNyAmIzQzOzMwNTUsNyBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX3NldChjb25zdCBzdHJ1Y3QgbmxhdHRyICphLFxuIFxuIFx0LyogQ29udmVydCBub24tbWFza2VkIG5vbi10dW5uZWwgc2V0IGFjdGlvbnMgdG8gbWFza2VkIHNldCBhY3Rpb25zLiAqL1xuIFx0aWYgKCFtYXNrZWQgXHUwMDI2XHUwMDI2IGtleV90eXBlICE9IE9WU19LRVlfQVRUUl9UVU5ORUwpIHtcbi1cdFx0aW50IHN0YXJ0LCBsZW4gPSBrZXlfbGVuICogMjtcbiYjNDM7XHRcdGludCBlcnIsIHN0YXJ0LCBsZW4gPSBrZXlfbGVuICogMjtcbiBcdFx0c3RydWN0IG5sYXR0ciAqYXQ7XG4gXG4gXHRcdCpza2lwX2NvcHkgPSB0cnVlO1xuQEAgLTI5ODMsOCAmIzQzOzMwNjcsMTEgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9zZXQoY29uc3Qgc3RydWN0IG5sYXR0ciAqYSxcbiBcdFx0XHRyZXR1cm4gc3RhcnQ7XG4gXG4gXHRcdGF0ID0gX19hZGRfYWN0aW9uKHNmYSwga2V5X3R5cGUsIE5VTEwsIGxlbiwgbG9nKTtcbi1cdFx0aWYgKElTX0VSUihhdCkpXG4tXHRcdFx0cmV0dXJuIFBUUl9FUlIoYXQpO1xuJiM0MztcdFx0aWYgKElTX0VSUihhdCkpIHtcbiYjNDM7XHRcdFx0ZXJyID0gUFRSX0VSUihhdCk7XG4mIzQzO1x0XHRcdCgqc2ZhKS1cdTAwM2VhY3Rpb25zX2xlbiA9IHN0YXJ0O1xuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRtZW1jcHkobmxhX2RhdGEoYXQpLCBubGFfZGF0YShvdnNfa2V5KSwga2V5X2xlbik7IC8qIEtleS4gKi9cbiBcdFx0bWVtc2V0KG5sYV9kYXRhKGF0KSAmIzQzOyBrZXlfbGVuLCAweGZmLCBrZXlfbGVuKTsgICAgLyogTWFzay4gKi9cbkBAIC0yOTk0LDcgJiM0MzszMDgxLDExIEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfc2V0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmEsXG4gXG4gXHRcdFx0bWFzay1cdTAwM2VpcHY2X2xhYmVsIFx1MDAyNj0gaHRvbmwoMHgwMDBGRkZGRik7XG4gXHRcdH1cbi1cdFx0YWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcbiYjNDM7XHRcdGVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFKGVycikpIHtcbiYjNDM7XHRcdFx0KCpzZmEpLVx1MDAzZWFjdGlvbnNfbGVuID0gc3RhcnQ7XG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0zMDQwLDcgJiM0MzszMTMxLDggQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9jaGVja19wa3RfbGVuKHN0cnVjdCBuZXQgKm5ldCxcbiBcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmFjdHNfaWZfZ3JlYXRlciwgKmFjdHNfaWZfbGVzc2VyX2VxO1xuIFx0c3RydWN0IG5sYXR0ciAqYVtPVlNfQ0hFQ0tfUEtUX0xFTl9BVFRSX01BWCAmIzQzOyAxXTtcbiBcdHN0cnVjdCBjaGVja19wa3RfbGVuX2FyZyBhcmc7XG4tXHRpbnQgbmVzdGVkX2FjdHNfc3RhcnQ7XG4mIzQzO1x0aW50IGdyZWF0ZXJfYWN0c19zdGFydCA9IC0xO1xuJiM0MztcdGludCBsZXNzZXJfYWN0c19zdGFydCA9IC0xO1xuIFx0aW50IHN0YXJ0LCBlcnI7XG4gXG4gXHRlcnIgPSBubGFfcGFyc2VfZGVwcmVjYXRlZF9zdHJpY3QoYSwgT1ZTX0NIRUNLX1BLVF9MRU5fQVRUUl9NQVgsXG5AQCAtMzA3NSwzNyAmIzQzOzMxNjcsNTggQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9jaGVja19wa3RfbGVuKHN0cnVjdCBuZXQgKm5ldCxcbiBcdGVyciA9IG92c19ubGFfYWRkX2FjdGlvbihzZmEsIE9WU19DSEVDS19QS1RfTEVOX0FUVFJfQVJHLCBcdTAwMjZhcmcsXG4gXHRcdFx0XHQgc2l6ZW9mKGFyZyksIGxvZyk7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0Z290byBlcnJfZnJlZTtcbiBcbi1cdG5lc3RlZF9hY3RzX3N0YXJ0ID0gYWRkX25lc3RlZF9hY3Rpb25fc3RhcnQoc2ZhLFxuLVx0XHRPVlNfQ0hFQ0tfUEtUX0xFTl9BVFRSX0FDVElPTlNfSUZfTEVTU19FUVVBTCwgbG9nKTtcbi1cdGlmIChuZXN0ZWRfYWN0c19zdGFydCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIG5lc3RlZF9hY3RzX3N0YXJ0O1xuJiM0MztcdGxlc3Nlcl9hY3RzX3N0YXJ0ID1cbiYjNDM7XHRcdGFkZF9uZXN0ZWRfYWN0aW9uX3N0YXJ0KHNmYSxcbiYjNDM7XHRcdFx0XHRcdE9WU19DSEVDS19QS1RfTEVOX0FUVFJfQUNUSU9OU19JRl9MRVNTX0VRVUFMLFxuJiM0MztcdFx0XHRcdFx0bG9nKTtcbiYjNDM7XHRpZiAobGVzc2VyX2FjdHNfc3RhcnQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGVyciA9IGxlc3Nlcl9hY3RzX3N0YXJ0O1xuJiM0MztcdFx0Z290byBlcnJfZnJlZTtcbiYjNDM7XHR9XG4gXG4gXHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYWN0c19pZl9sZXNzZXJfZXEsIGtleSwgc2ZhLFxuIFx0XHRcdFx0ICAgICBldGhfdHlwZSwgdmxhbl90Y2ksIG1wbHNfbGFiZWxfY291bnQsIGxvZyxcbiBcdFx0XHRcdCAgICAgZGVwdGggJiM0MzsgMSk7XG4gXG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0Z290byBlcnJfZnJlZTtcbiBcbi1cdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBuZXN0ZWRfYWN0c19zdGFydCk7XG4mIzQzO1x0ZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIGxlc3Nlcl9hY3RzX3N0YXJ0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZTtcbiBcbi1cdG5lc3RlZF9hY3RzX3N0YXJ0ID0gYWRkX25lc3RlZF9hY3Rpb25fc3RhcnQoc2ZhLFxuLVx0XHRPVlNfQ0hFQ0tfUEtUX0xFTl9BVFRSX0FDVElPTlNfSUZfR1JFQVRFUiwgbG9nKTtcbi1cdGlmIChuZXN0ZWRfYWN0c19zdGFydCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIG5lc3RlZF9hY3RzX3N0YXJ0O1xuJiM0MztcdGdyZWF0ZXJfYWN0c19zdGFydCA9XG4mIzQzO1x0XHRhZGRfbmVzdGVkX2FjdGlvbl9zdGFydChzZmEsXG4mIzQzO1x0XHRcdFx0XHRPVlNfQ0hFQ0tfUEtUX0xFTl9BVFRSX0FDVElPTlNfSUZfR1JFQVRFUixcbiYjNDM7XHRcdFx0XHRcdGxvZyk7XG4mIzQzO1x0aWYgKGdyZWF0ZXJfYWN0c19zdGFydCBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZXJyID0gZ3JlYXRlcl9hY3RzX3N0YXJ0O1xuJiM0MztcdFx0Z290byBlcnJfZnJlZTtcbiYjNDM7XHR9XG4gXG4gXHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYWN0c19pZl9ncmVhdGVyLCBrZXksIHNmYSxcbiBcdFx0XHRcdCAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXG4gXHRcdFx0XHQgICAgIGRlcHRoICYjNDM7IDEpO1xuIFxuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWU7XG4mIzQzO1xuJiM0MztcdGVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBncmVhdGVyX2FjdHNfc3RhcnQpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlO1xuIFxuLVx0YWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIG5lc3RlZF9hY3RzX3N0YXJ0KTtcbi1cdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XG4mIzQzO1x0ZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZTtcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2ZyZWU6XG4mIzQzO1x0b3ZzX25sYV90cmltKCpzZmEsIGdyZWF0ZXJfYWN0c19zdGFydCwgdHJ1ZSk7XG4mIzQzO1x0b3ZzX25sYV90cmltKCpzZmEsIGxlc3Nlcl9hY3RzX3N0YXJ0LCB0cnVlKTtcbiYjNDM7XHRvdnNfbmxhX3RyaW0oKnNmYSwgc3RhcnQsIGZhbHNlKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZhbGlkYXRlX3BzYW1wbGUoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxMzo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZhbGlkYXRlX2FuZF9jb3B5X3NhbXBsZSYjMzQ7LAogICAgJiMzNDt2YWxpZGF0ZV9hbmRfY29weV9kZWNfdHRsJiMzNDssCiAgICAmIzM0O3ZhbGlkYXRlX2FuZF9jb3B5X2Nsb25lJiMzNDssCiAgICAmIzM0O3ZhbGlkYXRlX2FuZF9jb3B5X3NldF90dW4mIzM0OywKICAgICYjMzQ7dmFsaWRhdGVfc2V0JiMzNDssCiAgICAmIzM0O3ZhbGlkYXRlX2FuZF9jb3B5X2NoZWNrX3BrdF9sZW4mIzM0OywKICAgICYjMzQ7X19vdnNfbmxhX2NvcHlfYWN0aW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IGxlYWtzIGluIE9wZW4gdlN3aXRjaCBuZXRsaW5rIGFjdGlvbiBwYXJzaW5nIChgX19vdnNfbmxhX2NvcHlfYWN0aW9uc2AgYW5kIHJlbGF0ZWQgYHZhbGlkYXRlX2FuZF9jb3B5XypgIGZ1bmN0aW9ucykuIEl0IGVuc3VyZXMgdGhhdCB3aGVuIG5lc3RlZCBhY3Rpb24gcGFyc2luZyBmYWlscywgdGhlIGdlbmVyYXRlZCBhY3Rpb24gbGlzdCBpcyBwcm9wZXJseSB0cnVuY2F0ZWQgYW5kIGZyZWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgT1ZTIGxvZ2ljIHRoYXQgcHJvY2Vzc2VzIHVzZXJzcGFjZSBpbnB1dCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTRkZDM0NjI4Zjk3MzllNjczYTg1OWVjNjc0MzMyYzJjZWI5ODU0MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDYgMTM6NDI6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMKaW5kZXggMTMwNTI0MDhhMTMyZjQuLmQ4MDc5ZGVlNzAwZWRjIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jCkBAIC0yNDk2LDEzICYjNDM7MjQ5Niw1NiBAQCBzdGF0aWMgaW5saW5lIGludCBhZGRfbmVzdGVkX2FjdGlvbl9zdGFydChzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICoqc2ZhLAogCXJldHVybiB1c2VkOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkX25lc3RlZF9hY3Rpb25fZW5kKHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKnNmYSwKLQkJCQkJIGludCBzdF9vZmZzZXQpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgYWRkX25lc3RlZF9hY3Rpb25fZW5kKHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKnNmYSwKJiM0MzsJCQkJCWludCBzdF9vZmZzZXQpCiB7Ci0Jc3RydWN0IG5sYXR0ciAqYSA9IChzdHJ1Y3QgbmxhdHRyICopICgodW5zaWduZWQgY2hhciAqKXNmYS0mZ3Q7YWN0aW9ucyAmIzQzOwotCQkJCQkJCSAgICAgICBzdF9vZmZzZXQpOwomIzQzOwlzdHJ1Y3QgbmxhdHRyICphOwomIzQzOwl1MzIgYXR0cl9sZW47CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0Uoc3Rfb2Zmc2V0ICZsdDsgMCB8fAomIzQzOwkJCSAodTMyKXN0X29mZnNldCAmZ3Q7IHNmYS0mZ3Q7YWN0aW9uc19sZW4pKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWF0dHJfbGVuID0gc2ZhLSZndDthY3Rpb25zX2xlbiAtICh1MzIpc3Rfb2Zmc2V0OwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKGF0dHJfbGVuICZsdDsgTkxBX0hEUkxFTikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAotCWEtJmd0O25sYV9sZW4gPSBzZmEtJmd0O2FjdGlvbnNfbGVuIC0gc3Rfb2Zmc2V0OwomIzQzOwlpZiAoYXR0cl9sZW4gJmd0OyBVMTZfTUFYKQomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsKJiM0MzsJYSA9IChzdHJ1Y3QgbmxhdHRyICopKCh1OCAqKXNmYS0mZ3Q7YWN0aW9ucyAmIzQzOyBzdF9vZmZzZXQpOwomIzQzOwlhLSZndDtubGFfbGVuID0gYXR0cl9sZW47CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBGcmVlIHRoZSBnZW5lcmF0ZWQgYWN0aW9uLWxpc3QgdGFpbCBhdCBAc3RhcnQgYW5kIHRydW5jYXRlIGl0LgomIzQzOyAqIElmIEBuZXN0ZWQsIEBzdGFydCBwb2ludHMgdG8gaXRzIGNvbnRhaW5pbmcgbmxhdHRyIGhlYWRlci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBvdnNfbmxhX3RyaW0oc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqc2ZhLCBpbnQgc3RhcnQsIGJvb2wgbmVzdGVkKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IG5sYXR0ciAqYWN0aW9uczsKJiM0MzsJdTMyIGxlbjsKJiM0MzsKJiM0MzsJaWYgKHN0YXJ0ICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSgodTMyKXN0YXJ0ICZndDsgc2ZhLSZndDthY3Rpb25zX2xlbikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWFjdGlvbnMgPSAoY29uc3Qgc3RydWN0IG5sYXR0ciAqKSgodTggKilzZmEtJmd0O2FjdGlvbnMgJiM0Mzsgc3RhcnQpOwomIzQzOwlsZW4gPSBzZmEtJmd0O2FjdGlvbnNfbGVuIC0gKHUzMilzdGFydDsKJiM0MzsKJiM0MzsJaWYgKG5lc3RlZCkgewomIzQzOwkJaWYgKGxlbiAmbHQ7IE5MQV9IRFJMRU4pCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQlhY3Rpb25zID0gKGNvbnN0IHN0cnVjdCBubGF0dHIgKikoKHU4ICopYWN0aW9ucyAmIzQzOyBOTEFfSERSTEVOKTsKJiM0MzsJCWxlbiAtPSBOTEFfSERSTEVOOwomIzQzOwl9CiYjNDM7CiYjNDM7CW92c19ubGFfZnJlZV9uZXN0ZWRfYWN0aW9ucyhhY3Rpb25zLCBsZW4pOwomIzQzO291dDoKJiM0MzsJc2ZhLSZndDthY3Rpb25zX2xlbiA9IHN0YXJ0OwogfQogCiBzdGF0aWMgaW50IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLApAQCAtMjUyMiw2ICYjNDM7MjU2NSw3IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfc2FtcGxlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwKIAljb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyc1tPVlNfU0FNUExFX0FUVFJfTUFYICYjNDM7IDFdOwogCWNvbnN0IHN0cnVjdCBubGF0dHIgKnByb2JhYmlsaXR5LCAqYWN0aW9uczsKIAljb25zdCBzdHJ1Y3QgbmxhdHRyICphOwomIzQzOwlpbnQgYWN0aW9uc19zdGFydDsKIAlpbnQgcmVtLCBzdGFydCwgZXJyOwogCXN0cnVjdCBzYW1wbGVfYXJnIGFyZzsKIApAQCAtMjU2NSwxOCAmIzQzOzI2MDksMjcgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9zYW1wbGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLAogCWVyciA9IG92c19ubGFfYWRkX2FjdGlvbihzZmEsIE9WU19TQU1QTEVfQVRUUl9BUkcsICZhbXA7YXJnLCBzaXplb2YoYXJnKSwKIAkJCQkgbG9nKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwomIzQzOwkJZ290byBlcnI7CiAKJiM0MzsJYWN0aW9uc19zdGFydCA9ICgqc2ZhKS0mZ3Q7YWN0aW9uc19sZW47CiAJZXJyID0gX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhuZXQsIGFjdGlvbnMsIGtleSwgc2ZhLAogCQkJCSAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csCiAJCQkJICAgICBkZXB0aCAmIzQzOyAxKTsKIAogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CiYjNDM7CQlnb3RvIGVycl9mcmVlOwogCi0JYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTsKJiM0MzsJZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWU7CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfZnJlZToKJiM0MzsJb3ZzX25sYV90cmltKCpzZmEsIGFjdGlvbnNfc3RhcnQsIGZhbHNlKTsKJiM0MztlcnI6CiYjNDM7CSgqc2ZhKS0mZ3Q7YWN0aW9uc19sZW4gPSBzdGFydDsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9kZWNfdHRsKHN0cnVjdCBuZXQgKm5ldCwKQEAgLTI2MjQsMTggJiM0MzsyNjc3LDMxIEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfZGVjX3R0bChzdHJ1Y3QgbmV0ICpuZXQsCiAJCXJldHVybiBzdGFydDsKIAogCWFjdGlvbl9zdGFydCA9IGFkZF9uZXN0ZWRfYWN0aW9uX3N0YXJ0KHNmYSwgT1ZTX0RFQ19UVExfQVRUUl9BQ1RJT04sIGxvZyk7Ci0JaWYgKGFjdGlvbl9zdGFydCAmbHQ7IDApCi0JCXJldHVybiBhY3Rpb25fc3RhcnQ7CiYjNDM7CWlmIChhY3Rpb25fc3RhcnQgJmx0OyAwKSB7CiYjNDM7CQllcnIgPSBhY3Rpb25fc3RhcnQ7CiYjNDM7CQlnb3RvIGVycjsKJiM0MzsJfQogCiAJZXJyID0gX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhuZXQsIGFjdGlvbnMsIGtleSwgc2ZhLCBldGhfdHlwZSwKIAkJCQkgICAgIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csCiAJCQkJICAgICBkZXB0aCAmIzQzOyAxKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwomIzQzOwkJZ290byBlcnJfZnJlZTsKJiM0MzsKJiM0MzsJZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIGFjdGlvbl9zdGFydCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl9mcmVlOwogCi0JYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIGFjdGlvbl9zdGFydCk7Ci0JYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTsKJiM0MzsJZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWU7CiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX2ZyZWU6CiYjNDM7CW92c19ubGFfdHJpbSgqc2ZhLCBhY3Rpb25fc3RhcnQsIHRydWUpOwomIzQzO2VycjoKJiM0MzsJKCpzZmEpLSZndDthY3Rpb25zX2xlbiA9IHN0YXJ0OwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X2Nsb25lKHN0cnVjdCBuZXQgKm5ldCwKQEAgLTI2NDYsNiAmIzQzOzI3MTIsNyBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X2Nsb25lKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkgICB1MzIgbXBsc19sYWJlbF9jb3VudCwgYm9vbCBsb2csIGJvb2wgbGFzdCwKIAkJCQkgICB1MzIgZGVwdGgpCiB7CiYjNDM7CWludCBhY3Rpb25zX3N0YXJ0OwogCWludCBzdGFydCwgZXJyOwogCXUzMiBleGVjOwogCkBAIC0yNjYxLDE3ICYjNDM7MjcyOCwyNiBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X2Nsb25lKHN0cnVjdCBuZXQgKm5ldCwKIAllcnIgPSBvdnNfbmxhX2FkZF9hY3Rpb24oc2ZhLCBPVlNfQ0xPTkVfQVRUUl9FWEVDLCAmYW1wO2V4ZWMsCiAJCQkJIHNpemVvZihleGVjKSwgbG9nKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwomIzQzOwkJZ290byBlcnI7CiAKJiM0MzsJYWN0aW9uc19zdGFydCA9ICgqc2ZhKS0mZ3Q7YWN0aW9uc19sZW47CiAJZXJyID0gX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhuZXQsIGF0dHIsIGtleSwgc2ZhLAogCQkJCSAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csCiAJCQkJICAgICBkZXB0aCAmIzQzOyAxKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwomIzQzOwkJZ290byBlcnJfZnJlZTsKIAotCWFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7CiYjNDM7CWVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl9mcmVlOwogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX2ZyZWU6CiYjNDM7CW92c19ubGFfdHJpbSgqc2ZhLCBhY3Rpb25zX3N0YXJ0LCBmYWxzZSk7CiYjNDM7ZXJyOgomIzQzOwkoKnNmYSktJmd0O2FjdGlvbnNfbGVuID0gc3RhcnQ7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIHZvaWQgb3ZzX21hdGNoX2luaXQoc3RydWN0IHN3X2Zsb3dfbWF0Y2ggKm1hdGNoLApAQCAtMjc2MywyMCAmIzQzOzI4MzksMjAgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9zZXRfdHVuKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsCiAJdHVuX2RzdCA9IG1ldGFkYXRhX2RzdF9hbGxvYyhrZXkudHVuX29wdHNfbGVuLCBNRVRBREFUQV9JUF9UVU5ORUwsCiAJCQkJICAgICBHRlBfS0VSTkVMKTsKIAotCWlmICghdHVuX2RzdCkKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CWlmICghdHVuX2RzdCkgewomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwl9CiAKIAllcnIgPSBkc3RfY2FjaGVfaW5pdCgmYW1wO3R1bl9kc3QtJmd0O3UudHVuX2luZm8uZHN0X2NhY2hlLCBHRlBfS0VSTkVMKTsKLQlpZiAoZXJyKSB7Ci0JCWRzdF9yZWxlYXNlKChzdHJ1Y3QgZHN0X2VudHJ5ICopdHVuX2RzdCk7Ci0JCXJldHVybiBlcnI7Ci0JfQomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfZnJlZV90dW5fZHN0OwogCiAJYSA9IF9fYWRkX2FjdGlvbihzZmEsIE9WU19LRVlfQVRUUl9UVU5ORUxfSU5GTywgTlVMTCwKIAkJCSBzaXplb2YoKm92c190dW4pLCBsb2cpOwogCWlmIChJU19FUlIoYSkpIHsKLQkJZHN0X3JlbGVhc2UoKHN0cnVjdCBkc3RfZW50cnkgKil0dW5fZHN0KTsKLQkJcmV0dXJuIFBUUl9FUlIoYSk7CiYjNDM7CQllcnIgPSBQVFJfRVJSKGEpOwomIzQzOwkJZ290byBlcnJfZnJlZV90dW5fZHN0OwogCX0KIAogCW92c190dW4gPSBubGFfZGF0YShhKTsKQEAgLTI3OTcsOCAmIzQzOzI4NzMsMTYgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9zZXRfdHVuKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsCiAJaXBfdHVubmVsX2luZm9fb3B0c19zZXQodHVuX2luZm8sCiAJCQkJVFVOX01FVEFEQVRBX09QVFMoJmFtcDtrZXksIGtleS50dW5fb3B0c19sZW4pLAogCQkJCWtleS50dW5fb3B0c19sZW4sIGRzdF9vcHRfdHlwZSk7Ci0JYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTsKJiM0MzsJZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShlcnIpKQomIzQzOwkJZ290byBlcnJfZnJlZV90dW5fZHN0OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKIAomIzQzO2Vycl9mcmVlX3R1bl9kc3Q6CiYjNDM7CWRzdF9yZWxlYXNlKChzdHJ1Y3QgZHN0X2VudHJ5ICopdHVuX2RzdCk7CiYjNDM7ZXJyOgomIzQzOwkoKnNmYSktJmd0O2FjdGlvbnNfbGVuID0gc3RhcnQ7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjk3MSw3ICYjNDM7MzA1NSw3IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfc2V0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmEsCiAKIAkvKiBDb252ZXJ0IG5vbi1tYXNrZWQgbm9uLXR1bm5lbCBzZXQgYWN0aW9ucyB0byBtYXNrZWQgc2V0IGFjdGlvbnMuICovCiAJaWYgKCFtYXNrZWQgJmFtcDsmYW1wOyBrZXlfdHlwZSAhPSBPVlNfS0VZX0FUVFJfVFVOTkVMKSB7Ci0JCWludCBzdGFydCwgbGVuID0ga2V5X2xlbiAqIDI7CiYjNDM7CQlpbnQgZXJyLCBzdGFydCwgbGVuID0ga2V5X2xlbiAqIDI7CiAJCXN0cnVjdCBubGF0dHIgKmF0OwogCiAJCSpza2lwX2NvcHkgPSB0cnVlOwpAQCAtMjk4Myw4ICYjNDM7MzA2NywxMSBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX3NldChjb25zdCBzdHJ1Y3QgbmxhdHRyICphLAogCQkJcmV0dXJuIHN0YXJ0OwogCiAJCWF0ID0gX19hZGRfYWN0aW9uKHNmYSwga2V5X3R5cGUsIE5VTEwsIGxlbiwgbG9nKTsKLQkJaWYgKElTX0VSUihhdCkpCi0JCQlyZXR1cm4gUFRSX0VSUihhdCk7CiYjNDM7CQlpZiAoSVNfRVJSKGF0KSkgewomIzQzOwkJCWVyciA9IFBUUl9FUlIoYXQpOwomIzQzOwkJCSgqc2ZhKS0mZ3Q7YWN0aW9uc19sZW4gPSBzdGFydDsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQogCiAJCW1lbWNweShubGFfZGF0YShhdCksIG5sYV9kYXRhKG92c19rZXkpLCBrZXlfbGVuKTsgLyogS2V5LiAqLwogCQltZW1zZXQobmxhX2RhdGEoYXQpICYjNDM7IGtleV9sZW4sIDB4ZmYsIGtleV9sZW4pOyAgICAvKiBNYXNrLiAqLwpAQCAtMjk5NCw3ICYjNDM7MzA4MSwxMSBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX3NldChjb25zdCBzdHJ1Y3QgbmxhdHRyICphLAogCiAJCQltYXNrLSZndDtpcHY2X2xhYmVsICZhbXA7PSBodG9ubCgweDAwMEZGRkZGKTsKIAkJfQotCQlhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgc3RhcnQpOwomIzQzOwkJZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTsKJiM0MzsJCWlmIChXQVJOX09OX09OQ0UoZXJyKSkgewomIzQzOwkJCSgqc2ZhKS0mZ3Q7YWN0aW9uc19sZW4gPSBzdGFydDsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtMzA0MCw3ICYjNDM7MzEzMSw4IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfY2hlY2tfcGt0X2xlbihzdHJ1Y3QgbmV0ICpuZXQsCiAJY29uc3Qgc3RydWN0IG5sYXR0ciAqYWN0c19pZl9ncmVhdGVyLCAqYWN0c19pZl9sZXNzZXJfZXE7CiAJc3RydWN0IG5sYXR0ciAqYVtPVlNfQ0hFQ0tfUEtUX0xFTl9BVFRSX01BWCAmIzQzOyAxXTsKIAlzdHJ1Y3QgY2hlY2tfcGt0X2xlbl9hcmcgYXJnOwotCWludCBuZXN0ZWRfYWN0c19zdGFydDsKJiM0MzsJaW50IGdyZWF0ZXJfYWN0c19zdGFydCA9IC0xOwomIzQzOwlpbnQgbGVzc2VyX2FjdHNfc3RhcnQgPSAtMTsKIAlpbnQgc3RhcnQsIGVycjsKIAogCWVyciA9IG5sYV9wYXJzZV9kZXByZWNhdGVkX3N0cmljdChhLCBPVlNfQ0hFQ0tfUEtUX0xFTl9BVFRSX01BWCwKQEAgLTMwNzUsMzcgJiM0MzszMTY3LDU4IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfY2hlY2tfcGt0X2xlbihzdHJ1Y3QgbmV0ICpuZXQsCiAJZXJyID0gb3ZzX25sYV9hZGRfYWN0aW9uKHNmYSwgT1ZTX0NIRUNLX1BLVF9MRU5fQVRUUl9BUkcsICZhbXA7YXJnLAogCQkJCSBzaXplb2YoYXJnKSwgbG9nKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwomIzQzOwkJZ290byBlcnJfZnJlZTsKIAotCW5lc3RlZF9hY3RzX3N0YXJ0ID0gYWRkX25lc3RlZF9hY3Rpb25fc3RhcnQoc2ZhLAotCQlPVlNfQ0hFQ0tfUEtUX0xFTl9BVFRSX0FDVElPTlNfSUZfTEVTU19FUVVBTCwgbG9nKTsKLQlpZiAobmVzdGVkX2FjdHNfc3RhcnQgJmx0OyAwKQotCQlyZXR1cm4gbmVzdGVkX2FjdHNfc3RhcnQ7CiYjNDM7CWxlc3Nlcl9hY3RzX3N0YXJ0ID0KJiM0MzsJCWFkZF9uZXN0ZWRfYWN0aW9uX3N0YXJ0KHNmYSwKJiM0MzsJCQkJCU9WU19DSEVDS19QS1RfTEVOX0FUVFJfQUNUSU9OU19JRl9MRVNTX0VRVUFMLAomIzQzOwkJCQkJbG9nKTsKJiM0MzsJaWYgKGxlc3Nlcl9hY3RzX3N0YXJ0ICZsdDsgMCkgewomIzQzOwkJZXJyID0gbGVzc2VyX2FjdHNfc3RhcnQ7CiYjNDM7CQlnb3RvIGVycl9mcmVlOwomIzQzOwl9CiAKIAllcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYWN0c19pZl9sZXNzZXJfZXEsIGtleSwgc2ZhLAogCQkJCSAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csCiAJCQkJICAgICBkZXB0aCAmIzQzOyAxKTsKIAogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CiYjNDM7CQlnb3RvIGVycl9mcmVlOwogCi0JYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIG5lc3RlZF9hY3RzX3N0YXJ0KTsKJiM0MzsJZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIGxlc3Nlcl9hY3RzX3N0YXJ0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWU7CiAKLQluZXN0ZWRfYWN0c19zdGFydCA9IGFkZF9uZXN0ZWRfYWN0aW9uX3N0YXJ0KHNmYSwKLQkJT1ZTX0NIRUNLX1BLVF9MRU5fQVRUUl9BQ1RJT05TX0lGX0dSRUFURVIsIGxvZyk7Ci0JaWYgKG5lc3RlZF9hY3RzX3N0YXJ0ICZsdDsgMCkKLQkJcmV0dXJuIG5lc3RlZF9hY3RzX3N0YXJ0OwomIzQzOwlncmVhdGVyX2FjdHNfc3RhcnQgPQomIzQzOwkJYWRkX25lc3RlZF9hY3Rpb25fc3RhcnQoc2ZhLAomIzQzOwkJCQkJT1ZTX0NIRUNLX1BLVF9MRU5fQVRUUl9BQ1RJT05TX0lGX0dSRUFURVIsCiYjNDM7CQkJCQlsb2cpOwomIzQzOwlpZiAoZ3JlYXRlcl9hY3RzX3N0YXJ0ICZsdDsgMCkgewomIzQzOwkJZXJyID0gZ3JlYXRlcl9hY3RzX3N0YXJ0OwomIzQzOwkJZ290byBlcnJfZnJlZTsKJiM0MzsJfQogCiAJZXJyID0gX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhuZXQsIGFjdHNfaWZfZ3JlYXRlciwga2V5LCBzZmEsCiAJCQkJICAgICBldGhfdHlwZSwgdmxhbl90Y2ksIG1wbHNfbGFiZWxfY291bnQsIGxvZywKIAkJCQkgICAgIGRlcHRoICYjNDM7IDEpOwogCiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKJiM0MzsJCWdvdG8gZXJyX2ZyZWU7CiYjNDM7CiYjNDM7CWVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBncmVhdGVyX2FjdHNfc3RhcnQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfZnJlZTsKIAotCWFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBuZXN0ZWRfYWN0c19zdGFydCk7Ci0JYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTsKJiM0MzsJZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWU7CiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX2ZyZWU6CiYjNDM7CW92c19ubGFfdHJpbSgqc2ZhLCBncmVhdGVyX2FjdHNfc3RhcnQsIHRydWUpOwomIzQzOwlvdnNfbmxhX3RyaW0oKnNmYSwgbGVzc2VyX2FjdHNfc3RhcnQsIHRydWUpOwomIzQzOwlvdnNfbmxhX3RyaW0oKnNmYSwgc3RhcnQsIGZhbHNlKTsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCB2YWxpZGF0ZV9wc2FtcGxlKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2OTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggaW4gT1ZTIE5ldGxpbmsgQWN0aW9uIFBhcnNpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBwYXRjaCBhcHBsaWVkIHRvIGBuZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmNgLCBhbmQgaXQmIzM5O3MgbWFraW5nIHNvbWUgY3JpdGljYWwgY2hhbmdlcyB0byBob3cgT1ZTIGhhbmRsZXMgbmV0bGluayBhY3Rpb25zLiBNeSBpbml0aWFsIGltcHJlc3Npb24/IFRoaXMgaXMgYSBzb2xpZCBwaWVjZSBvZiB3b3JrIHRoYXQgYWRkcmVzc2VzIHNvbWUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBmaXhpbmcgbWVtb3J5IGxlYWtzIGFuZCBpbnZhbGlkIHN0YXRlcyB0aGF0IGFyaXNlIHdoZW4gbmVzdGVkIGFjdGlvbiBwYXJzaW5nIGdvZXMgd3JvbmcuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgYWRkX25lc3RlZF9hY3Rpb25fZW5kYCBub3cgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgaW5zdGVhZCBvZiBiZWluZyB2b2lkLiBUaGF0JiMzOTtzIGEgZ29vZCBtb3ZlLCBnaXZpbmcgdGhlIGNhbGxlciBhIGNsZWFyIHNpZ25hbCBhYm91dCBzdWNjZXNzIG9yIGZhaWx1cmUuICBJdCBhbHNvIGluY2x1ZGVzIHRoZSBhZGRpdGlvbiBvZiBgb3ZzX25sYV90cmltYCwgd2hpY2ggaXMgZGVzaWduZWQgdG8gY2xlYW4gdXAgYW5kIHRydW5jYXRlIGFueSBwYXJ0aWFsbHkgYnVpbHQgYWN0aW9uIGxpc3RzIHdoZW4gdGhlcmUmIzM5O3MgYW4gZXJyb3IuICBUaGF0JiMzOTtzIHByZWNpc2VseSB3aGF0JiMzOTtzIG5lZWRlZCB0byBwcmV2ZW50IG1lbW9yeSBpc3N1ZXMuCgpUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIG90aGVyIGZ1bmN0aW9ucywgYW5kIEkgc2hvdWxkIHJlYWxseSB6ZXJvIGluIG9uIHRoZXNlIGZvciBhIGNsb3NlciBsb29rOiBgdmFsaWRhdGVfYW5kX2NvcHlfc2FtcGxlYCwgYHZhbGlkYXRlX2FuZF9jb3B5X2RlY190dGxgLCBgdmFsaWRhdGVfYW5kX2NvcHlfY2xvbmVgLCBgdmFsaWRhdGVfYW5kX2NvcHlfc2V0X3R1bmAsIGB2YWxpZGF0ZV9zZXRgLCBhbmQgYHZhbGlkYXRlX2FuZF9jb3B5X2NoZWNrX3BrdF9sZW5gLiAgVGhlIHBhdHRlcm4gaGVyZSBpcyB0aGF0IHRoZXkmIzM5O3JlIGFsbCBiZWluZyBtb2RpZmllZCB0byBwcm9wZXJseSBoYW5kbGUgZXJyb3JzIHRoYXQgbWlnaHQgY29tZSBmcm9tIGBhZGRfbmVzdGVkX2FjdGlvbl9lbmRgIGFuZCB0byB1c2UgYG92c19ubGFfdHJpbWAgb3IgdHJ1bmNhdGUgYGFjdGlvbnNfbGVuYCB0byBjbGVhbiB1cC4gIEl0JiMzOTtzIGFsbCBhYm91dCBlbnN1cmluZyB0aGF0IGV2ZW4gYSBmYWlsZWQgcGFyc2luZyBhdHRlbXB0IGRvZXNuJiMzOTt0IGxlYXZlIHRoZSBzeXN0ZW0gaW4gYSBjb3JydXB0ZWQgc3RhdGUuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIG1lYW5zIEkgc2hvdWxkIGRlZmluaXRlbHkgcHJpb3JpdGl6ZSBmdXp6aW5nIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiAgVGhlIGltcG9ydGFudCB0aGluZyBpcyBmaW5kaW5nIHRoZSBlbnRyeSBwb2ludHMuCgpJIHNlZSB0aGF0IHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgYWxsIGNhbGxlZCBmcm9tIGBfX292c19ubGFfY29weV9hY3Rpb25zYCwgd2hpY2ggaXMgdGhlbiBjYWxsZWQgZnJvbSBgb3ZzX25sYV9jb3B5X2FjdGlvbnNgLiBBbmQgdGhhdCYjMzk7cyByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29uZmlndXJhdGlvbiBvZiBPVlMgZmxvd3MuIEdvb2QuCgpJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZvciBPcGVuIHZTd2l0Y2ggKGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2ApIGFuZCBjb25maXJtIHRoYXQgYENPTkZJR19PUEVOVlNXSVRDSGAgaXMgZW5hYmxlZC4gVGltZSB0byB1c2UgbXkgdG9vbHMgdG8gdmVyaWZ5IHRoYXQgSSYjMzk7dmUgZm91bmQgYWxsIHRoZSBlbnRyeSBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9QRU5WU1dJVENIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NDQ6Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR1JFIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTYtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03MC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODgwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT3BlbiB2U3dpdGNoIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gSSYjMzk7bSBkZWFsaW5nIHdpdGggaGVyZSBpcyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgT1BFTlZTV0lUQ0hgLiBUaGF0JiMzOTtzIHRoZSBwcmltYXJ5IGZvY3VzLCB0aGUgYW5jaG9yLCBhcyBmYXIgYXMgSSBjYW4gc2VlLiBNeSBvYmplY3RpdmUgaXMgdG8gZGlzc2VjdCB0aGVzZSBwYXJ0aWN1bGFyIGZ1bmN0aW9ucyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBhY3Rpb24gaGFuZGxpbmcgYW5kIHZhbGlkYXRpb24gcm91dGluZXMgd2l0aGluIHRoaXMgY29uZmlndXJhdGlvbi4KClNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHJlYWxseSBkaWcgaW50byBgdmFsaWRhdGVfYW5kX2NvcHlfc2FtcGxlYCwgYHZhbGlkYXRlX2FuZF9jb3B5X2RlY190dGxgLCBgdmFsaWRhdGVfYW5kX2NvcHlfY2xvbmVgLCBgdmFsaWRhdGVfYW5kX2NvcHlfc2V0X3R1bmAsIGB2YWxpZGF0ZV9zZXRgLCBgdmFsaWRhdGVfYW5kX2NvcHlfY2hlY2tfcGt0X2xlbmAsIGFuZCwgY3JpdGljYWxseSwgYF9fb3ZzX25sYV9jb3B5X2FjdGlvbnNgLiBNeSBndXQgdGVsbHMgbWUgYF9fb3ZzX25sYV9jb3B5X2FjdGlvbnNgIGlzIHRoZSBtb3N0IGltcG9ydGFudCBvZiB0aGUgYnVuY2guIFRoaXMgbGFzdCBvbmUgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgYWN0aW9uIGNvcHlpbmcgcmVzaWRlcywgc28gdGhhdCB3aWxsIHRha2UgdGhlIG1vc3Qgc2NydXRpbnkuCgpCZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgT1BFTlZTV0lUQ0hgIGlzIHRoZSBvbmx5IGFjdGl2ZSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IG90aGVyIHJlbGV2YW50IGNvbnRleHRzLiBZZXAsIGl0JiMzOTtzIHRoZSBtYWluIG9uZSwgc28gSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2suCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgbG9vayBhdCBgX19vdnNfbmxhX2NvcHlfYWN0aW9uc2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fb3ZzX25sYV9jb3B5X2FjdGlvbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jPTI1MjQ9c3RhdGljIHZvaWQgb3ZzX25sYV90cmltKHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKnNmYSwgaW50IHN0YXJ0LCBib29sIG5lc3RlZClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMjU1MC1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYzoyNTUxOnN0YXRpYyBpbnQgX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMjU1Mi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jPTI1NTg9c3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9zYW1wbGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0yNjE0LVx0YWN0aW9uc19zdGFydCA9ICgqc2ZhKS1cdTAwM2VhY3Rpb25zX2xlbjtcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYzoyNjE1Olx0ZXJyID0gX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhuZXQsIGFjdGlvbnMsIGtleSwgc2ZhLFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTI2MTYtXHRcdFx0XHQgICAgIGV0aF90eXBlLCB2bGFuX3RjaSwgbXBsc19sYWJlbF9jb3VudCwgbG9nLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYz0yNjM1PXN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfZGVjX3R0bChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTI2ODQtXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM6MjY4NTpcdGVyciA9IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMobmV0LCBhY3Rpb25zLCBrZXksIHNmYSwgZXRoX3R5cGUsXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMjY4Ni1cdFx0XHRcdCAgICAgdmxhbl90Y2ksIG1wbHNfbGFiZWxfY291bnQsIGxvZyxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM9MjcwNz1zdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X2Nsb25lKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMjczMy1cdGFjdGlvbnNfc3RhcnQgPSAoKnNmYSktXHUwMDNlYWN0aW9uc19sZW47XG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM6MjczNDpcdGVyciA9IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMobmV0LCBhdHRyLCBrZXksIHNmYSxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0yNzM1LVx0XHRcdFx0ICAgICBldGhfdHlwZSwgdmxhbl90Y2ksIG1wbHNfbGFiZWxfY291bnQsIGxvZyxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM9MzEyMz1zdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X2NoZWNrX3BrdF9sZW4oc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0zMTgwLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jOjMxODE6XHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYWN0c19pZl9sZXNzZXJfZXEsIGtleSwgc2ZhLFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTMxODItXHRcdFx0XHQgICAgIGV0aF90eXBlLCB2bGFuX3RjaSwgbXBsc19sYWJlbF9jb3VudCwgbG9nLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0zMjAwLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jOjMyMDE6XHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYWN0c19pZl9ncmVhdGVyLCBrZXksIHNmYSxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0zMjAyLVx0XHRcdFx0ICAgICBldGhfdHlwZSwgdmxhbl90Y2ksIG1wbHNfbGFiZWxfY291bnQsIGxvZyxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM9MzI0Nj1zdGF0aWMgaW50IGNvcHlfYWN0aW9uKGNvbnN0IHN0cnVjdCBubGF0dHIgKmZyb20sXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTMyNTktXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM6MzI2MDpzdGF0aWMgaW50IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTMyNjEtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYz0zNjA0PWludCBvdnNfbmxhX2NvcHlfYWN0aW9ucyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTM2MTgtXHQoKnNmYSktXHUwMDNlb3JpZ19sZW4gPSBubGFfbGVuKGF0dHIpO1xubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jOjM2MTk6XHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYXR0ciwga2V5LCBzZmEsIGtleS1cdTAwM2VldGgudHlwZSxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0zNjIwLVx0XHRcdFx0ICAgICBrZXktXHUwMDNlZXRoLnZsYW4udGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUxMQoJCQkJCQkJb3V0cHV0OiAxOTcKCQkJCQkJCXRob3VnaHRzOiAzNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBPcGVuIHZTd2l0Y2ggTmV0bGluayBBY3Rpb24gUGFyc2luZyBGaXgqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIFRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbiBgbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jYCwgc3BlY2lmaWNhbGx5IGFkZHJlc3Npbmcgc29tZSBjcml0aWNhbCBmdW5jdGlvbnM6IGB2YWxpZGF0ZV9hbmRfY29weV9zYW1wbGVgLCBgdmFsaWRhdGVfYW5kX2NvcHlfZGVjX3R0bGAsIGB2YWxpZGF0ZV9hbmRfY29weV9jbG9uZWAsIGB2YWxpZGF0ZV9hbmRfY29weV9zZXRfdHVuYCwgYHZhbGlkYXRlX3NldGAsIGB2YWxpZGF0ZV9hbmRfY29weV9jaGVja19wa3RfbGVuYCwgYW5kIGNyaXRpY2FsbHksIGBfX292c19ubGFfY29weV9hY3Rpb25zYC4gVGhlc2UgYXJlIGFsbCByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgYW5kIHZhbGlkYXRpbmcgT3BlbiB2U3dpdGNoIGFjdGlvbnMgdGhhdCBjb21lIGluIHZpYSBuZXRsaW5rIG1lc3NhZ2VzLgoKVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIGFyb3VuZCBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IGxlYWtzIGR1cmluZyBuZXN0ZWQgYWN0aW9uIHBhcnNpbmcuIEVzc2VudGlhbGx5LCBpZiB0aGluZ3MgZ28gd3Jvbmcgd2hpbGUgcGFyc2luZyBjb21wbGV4LCBuZXN0ZWQgYWN0aW9ucywgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgcmVzdWx0aW5nIGFjdGlvbiBsaXN0IGlzIHRydW5jYXRlZCBjb3JyZWN0bHkgYW5kIGFueSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyZWVkIHByb3Blcmx5LiBUaGlzIGlzIGEgc29saWQsIGZ1bmN0aW9uYWwgZml4LgoKU2luY2UgdGhpcyB0b3VjaGVzIHRoZSBjb3JlIE9WUyBuZXRsaW5rIGludGVyZmFjZSwgd2hpY2ggaXMgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSwgbXkgaW50dWl0aW9uIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgYSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEl04oCZcyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGV4cG9zZSBzdWJ0bGUgYnVncyByZWxhdGVkIHRvIG1hbGZvcm1lZCBpbnB1dC4gVGhpcyBpcyBpbXBvcnRhbnQ6IHVzZXJzcGFjZSBpbnB1dCB0byBjb3JlIGxvZ2ljLgoKVGhlcmVmb3JlLCBJJiMzOTttIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC4gSSBuZWVkIHRvIGJlIGZvY3VzZWQgb24gdGhvc2Uga2V5IGZ1bmN0aW9ucyBtZW50aW9uZWQgYWJvdmUuIEkmIzM5O2xsIGZsYWcgdGhvc2UgYXMgdGhlIGBGb2N1c1N5bWJvbHNgLiBBbmQgZ2l2ZW4gdGhpcyBpcyBPcGVuIHZTd2l0Y2ggc3BlY2lmaWMsIEnigJlsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYE9QRU5WU1dJVENIYCBjb25maWcgaXMgZW5hYmxlZC4gSSBuZWVkIHRvIGJlIHJlYWR5IHRvIHJ1biBmdXp6ZXIgb3ZlciB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZhbGlkYXRlX2FuZF9jb3B5X3NhbXBsZSYjMzQ7LAogICAgJiMzNDt2YWxpZGF0ZV9hbmRfY29weV9kZWNfdHRsJiMzNDssCiAgICAmIzM0O3ZhbGlkYXRlX2FuZF9jb3B5X2Nsb25lJiMzNDssCiAgICAmIzM0O3ZhbGlkYXRlX2FuZF9jb3B5X3NldF90dW4mIzM0OywKICAgICYjMzQ7dmFsaWRhdGVfc2V0JiMzNDssCiAgICAmIzM0O3ZhbGlkYXRlX2FuZF9jb3B5X2NoZWNrX3BrdF9sZW4mIzM0OywKICAgICYjMzQ7X19vdnNfbmxhX2NvcHlfYWN0aW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IGxlYWtzIGluIE9wZW4gdlN3aXRjaCBuZXRsaW5rIGFjdGlvbiBwYXJzaW5nIChgX19vdnNfbmxhX2NvcHlfYWN0aW9uc2AgYW5kIHJlbGF0ZWQgYHZhbGlkYXRlX2FuZF9jb3B5XypgIGZ1bmN0aW9ucykuIEl0IGVuc3VyZXMgdGhhdCB3aGVuIG5lc3RlZCBhY3Rpb24gcGFyc2luZyBmYWlscywgdGhlIGdlbmVyYXRlZCBhY3Rpb24gbGlzdCBpcyBwcm9wZXJseSB0cnVuY2F0ZWQgYW5kIGZyZWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgT1ZTIGxvZ2ljIHRoYXQgcHJvY2Vzc2VzIHVzZXJzcGFjZSBpbnB1dCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2YWxpZGF0ZV9hbmRfY29weV9zYW1wbGUmIzM0OywKICAgICYjMzQ7dmFsaWRhdGVfYW5kX2NvcHlfZGVjX3R0bCYjMzQ7LAogICAgJiMzNDt2YWxpZGF0ZV9hbmRfY29weV9jbG9uZSYjMzQ7LAogICAgJiMzNDt2YWxpZGF0ZV9hbmRfY29weV9zZXRfdHVuJiMzNDssCiAgICAmIzM0O3ZhbGlkYXRlX3NldCYjMzQ7LAogICAgJiMzNDt2YWxpZGF0ZV9hbmRfY29weV9jaGVja19wa3RfbGVuJiMzNDssCiAgICAmIzM0O19fb3ZzX25sYV9jb3B5X2FjdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBsZWFrcyBpbiBPcGVuIHZTd2l0Y2ggbmV0bGluayBhY3Rpb24gcGFyc2luZyAoYF9fb3ZzX25sYV9jb3B5X2FjdGlvbnNgIGFuZCByZWxhdGVkIGB2YWxpZGF0ZV9hbmRfY29weV8qYCBmdW5jdGlvbnMpLiBJdCBlbnN1cmVzIHRoYXQgd2hlbiBuZXN0ZWQgYWN0aW9uIHBhcnNpbmcgZmFpbHMsIHRoZSBnZW5lcmF0ZWQgYWN0aW9uIGxpc3QgaXMgcHJvcGVybHkgdHJ1bmNhdGVkIGFuZCBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIE9WUyBsb2dpYyB0aGF0IHByb2Nlc3NlcyB1c2Vyc3BhY2UgaW5wdXQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0MjoxMy44ODgwNDkwNjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI2NTEwNDUzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2YWxpZGF0ZV9hbmRfY29weV9zYW1wbGVcIixcbiAgICBcInZhbGlkYXRlX2FuZF9jb3B5X2RlY190dGxcIixcbiAgICBcInZhbGlkYXRlX2FuZF9jb3B5X2Nsb25lXCIsXG4gICAgXCJ2YWxpZGF0ZV9hbmRfY29weV9zZXRfdHVuXCIsXG4gICAgXCJ2YWxpZGF0ZV9zZXRcIixcbiAgICBcInZhbGlkYXRlX2FuZF9jb3B5X2NoZWNrX3BrdF9sZW5cIixcbiAgICBcIl9fb3ZzX25sYV9jb3B5X2FjdGlvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IGxlYWtzIGluIE9wZW4gdlN3aXRjaCBuZXRsaW5rIGFjdGlvbiBwYXJzaW5nIChgX19vdnNfbmxhX2NvcHlfYWN0aW9uc2AgYW5kIHJlbGF0ZWQgYHZhbGlkYXRlX2FuZF9jb3B5XypgIGZ1bmN0aW9ucykuIEl0IGVuc3VyZXMgdGhhdCB3aGVuIG5lc3RlZCBhY3Rpb24gcGFyc2luZyBmYWlscywgdGhlIGdlbmVyYXRlZCBhY3Rpb24gbGlzdCBpcyBwcm9wZXJseSB0cnVuY2F0ZWQgYW5kIGZyZWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgT1ZTIGxvZ2ljIHRoYXQgcHJvY2Vzc2VzIHVzZXJzcGFjZSBpbnB1dCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDI6MTMuODg4MDg1NDM3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTI3MzUzOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NGRkMzQ2MjhmOTczOWU2NzNhODU5ZWM2NzQzMzJjMmNlYjk4NTQwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDYgMTM6NDI6MTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jXFxuaW5kZXggMTMwNTI0MDhhMTMyZjQuLmQ4MDc5ZGVlNzAwZWRjIDEwMDY0NFxcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuY1xcbisrKyBiL25ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuY1xcbkBAIC0yNDk2LDEzICsyNDk2LDU2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFkZF9uZXN0ZWRfYWN0aW9uX3N0YXJ0KHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKipzZmEsXFxuIFxcdHJldHVybiB1c2VkO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkX25lc3RlZF9hY3Rpb25fZW5kKHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKnNmYSxcXG4tXFx0XFx0XFx0XFx0XFx0IGludCBzdF9vZmZzZXQpXFxuK3N0YXRpYyBpbmxpbmUgaW50IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZChzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICpzZmEsXFxuK1xcdFxcdFxcdFxcdFxcdGludCBzdF9vZmZzZXQpXFxuIHtcXG4tXFx0c3RydWN0IG5sYXR0ciAqYSA9IChzdHJ1Y3QgbmxhdHRyICopICgodW5zaWduZWQgY2hhciAqKXNmYS1cXHUwMDNlYWN0aW9ucyArXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdF9vZmZzZXQpO1xcbitcXHRzdHJ1Y3QgbmxhdHRyICphO1xcbitcXHR1MzIgYXR0cl9sZW47XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKHN0X29mZnNldCBcXHUwMDNjIDAgfHxcXG4rXFx0XFx0XFx0ICh1MzIpc3Rfb2Zmc2V0IFxcdTAwM2Ugc2ZhLVxcdTAwM2VhY3Rpb25zX2xlbikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0YXR0cl9sZW4gPSBzZmEtXFx1MDAzZWFjdGlvbnNfbGVuIC0gKHUzMilzdF9vZmZzZXQ7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoYXR0cl9sZW4gXFx1MDAzYyBOTEFfSERSTEVOKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRhLVxcdTAwM2VubGFfbGVuID0gc2ZhLVxcdTAwM2VhY3Rpb25zX2xlbiAtIHN0X29mZnNldDtcXG4rXFx0aWYgKGF0dHJfbGVuIFxcdTAwM2UgVTE2X01BWClcXG4rXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4rXFxuK1xcdGEgPSAoc3RydWN0IG5sYXR0ciAqKSgodTggKilzZmEtXFx1MDAzZWFjdGlvbnMgKyBzdF9vZmZzZXQpO1xcbitcXHRhLVxcdTAwM2VubGFfbGVuID0gYXR0cl9sZW47XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBGcmVlIHRoZSBnZW5lcmF0ZWQgYWN0aW9uLWxpc3QgdGFpbCBhdCBAc3RhcnQgYW5kIHRydW5jYXRlIGl0LlxcbisgKiBJZiBAbmVzdGVkLCBAc3RhcnQgcG9pbnRzIHRvIGl0cyBjb250YWluaW5nIG5sYXR0ciBoZWFkZXIuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBvdnNfbmxhX3RyaW0oc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqc2ZhLCBpbnQgc3RhcnQsIGJvb2wgbmVzdGVkKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmFjdGlvbnM7XFxuK1xcdHUzMiBsZW47XFxuK1xcbitcXHRpZiAoc3RhcnQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCh1MzIpc3RhcnQgXFx1MDAzZSBzZmEtXFx1MDAzZWFjdGlvbnNfbGVuKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0YWN0aW9ucyA9IChjb25zdCBzdHJ1Y3QgbmxhdHRyICopKCh1OCAqKXNmYS1cXHUwMDNlYWN0aW9ucyArIHN0YXJ0KTtcXG4rXFx0bGVuID0gc2ZhLVxcdTAwM2VhY3Rpb25zX2xlbiAtICh1MzIpc3RhcnQ7XFxuK1xcbitcXHRpZiAobmVzdGVkKSB7XFxuK1xcdFxcdGlmIChsZW4gXFx1MDAzYyBOTEFfSERSTEVOKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdFxcdGFjdGlvbnMgPSAoY29uc3Qgc3RydWN0IG5sYXR0ciAqKSgodTggKilhY3Rpb25zICsgTkxBX0hEUkxFTik7XFxuK1xcdFxcdGxlbiAtPSBOTEFfSERSTEVOO1xcbitcXHR9XFxuK1xcbitcXHRvdnNfbmxhX2ZyZWVfbmVzdGVkX2FjdGlvbnMoYWN0aW9ucywgbGVuKTtcXG4rb3V0OlxcbitcXHRzZmEtXFx1MDAzZWFjdGlvbnNfbGVuID0gc3RhcnQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuQEAgLTI1MjIsNiArMjU2NSw3IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfc2FtcGxlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4gXFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cnNbT1ZTX1NBTVBMRV9BVFRSX01BWCArIDFdO1xcbiBcXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICpwcm9iYWJpbGl0eSwgKmFjdGlvbnM7XFxuIFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmE7XFxuK1xcdGludCBhY3Rpb25zX3N0YXJ0O1xcbiBcXHRpbnQgcmVtLCBzdGFydCwgZXJyO1xcbiBcXHRzdHJ1Y3Qgc2FtcGxlX2FyZyBhcmc7XFxuIFxcbkBAIC0yNTY1LDE4ICsyNjA5LDI3IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfc2FtcGxlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4gXFx0ZXJyID0gb3ZzX25sYV9hZGRfYWN0aW9uKHNmYSwgT1ZTX1NBTVBMRV9BVFRSX0FSRywgXFx1MDAyNmFyZywgc2l6ZW9mKGFyZyksXFxuIFxcdFxcdFxcdFxcdCBsb2cpO1xcbiBcXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRnb3RvIGVycjtcXG4gXFxuK1xcdGFjdGlvbnNfc3RhcnQgPSAoKnNmYSktXFx1MDAzZWFjdGlvbnNfbGVuO1xcbiBcXHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYWN0aW9ucywga2V5LCBzZmEsXFxuIFxcdFxcdFxcdFxcdCAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXFxuIFxcdFxcdFxcdFxcdCAgICAgZGVwdGggKyAxKTtcXG4gXFxuIFxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIFxcbi1cXHRhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgc3RhcnQpO1xcbitcXHRlcnIgPSBhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgc3RhcnQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfZnJlZTpcXG4rXFx0b3ZzX25sYV90cmltKCpzZmEsIGFjdGlvbnNfc3RhcnQsIGZhbHNlKTtcXG4rZXJyOlxcbitcXHQoKnNmYSktXFx1MDAzZWFjdGlvbnNfbGVuID0gc3RhcnQ7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfZGVjX3R0bChzdHJ1Y3QgbmV0ICpuZXQsXFxuQEAgLTI2MjQsMTggKzI2NzcsMzEgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9kZWNfdHRsKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0cmV0dXJuIHN0YXJ0O1xcbiBcXG4gXFx0YWN0aW9uX3N0YXJ0ID0gYWRkX25lc3RlZF9hY3Rpb25fc3RhcnQoc2ZhLCBPVlNfREVDX1RUTF9BVFRSX0FDVElPTiwgbG9nKTtcXG4tXFx0aWYgKGFjdGlvbl9zdGFydCBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiBhY3Rpb25fc3RhcnQ7XFxuK1xcdGlmIChhY3Rpb25fc3RhcnQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGVyciA9IGFjdGlvbl9zdGFydDtcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4gXFxuIFxcdGVyciA9IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMobmV0LCBhY3Rpb25zLCBrZXksIHNmYSwgZXRoX3R5cGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgdmxhbl90Y2ksIG1wbHNfbGFiZWxfY291bnQsIGxvZyxcXG4gXFx0XFx0XFx0XFx0ICAgICBkZXB0aCArIDEpO1xcbiBcXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRnb3RvIGVycl9mcmVlO1xcbitcXG4rXFx0ZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIGFjdGlvbl9zdGFydCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIFxcbi1cXHRhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgYWN0aW9uX3N0YXJ0KTtcXG4tXFx0YWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcXG4rXFx0ZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfZnJlZTpcXG4rXFx0b3ZzX25sYV90cmltKCpzZmEsIGFjdGlvbl9zdGFydCwgdHJ1ZSk7XFxuK2VycjpcXG4rXFx0KCpzZmEpLVxcdTAwM2VhY3Rpb25zX2xlbiA9IHN0YXJ0O1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X2Nsb25lKHN0cnVjdCBuZXQgKm5ldCxcXG5AQCAtMjY0Niw2ICsyNzEyLDcgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9jbG9uZShzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdFxcdCAgIHUzMiBtcGxzX2xhYmVsX2NvdW50LCBib29sIGxvZywgYm9vbCBsYXN0LFxcbiBcXHRcXHRcXHRcXHQgICB1MzIgZGVwdGgpXFxuIHtcXG4rXFx0aW50IGFjdGlvbnNfc3RhcnQ7XFxuIFxcdGludCBzdGFydCwgZXJyO1xcbiBcXHR1MzIgZXhlYztcXG4gXFxuQEAgLTI2NjEsMTcgKzI3MjgsMjYgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9jbG9uZShzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdGVyciA9IG92c19ubGFfYWRkX2FjdGlvbihzZmEsIE9WU19DTE9ORV9BVFRSX0VYRUMsIFxcdTAwMjZleGVjLFxcbiBcXHRcXHRcXHRcXHQgc2l6ZW9mKGV4ZWMpLCBsb2cpO1xcbiBcXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRnb3RvIGVycjtcXG4gXFxuK1xcdGFjdGlvbnNfc3RhcnQgPSAoKnNmYSktXFx1MDAzZWFjdGlvbnNfbGVuO1xcbiBcXHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYXR0ciwga2V5LCBzZmEsXFxuIFxcdFxcdFxcdFxcdCAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXFxuIFxcdFxcdFxcdFxcdCAgICAgZGVwdGggKyAxKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4gXFxuLVxcdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XFxuK1xcdGVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9mcmVlOlxcbitcXHRvdnNfbmxhX3RyaW0oKnNmYSwgYWN0aW9uc19zdGFydCwgZmFsc2UpO1xcbitlcnI6XFxuK1xcdCgqc2ZhKS1cXHUwMDNlYWN0aW9uc19sZW4gPSBzdGFydDtcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gdm9pZCBvdnNfbWF0Y2hfaW5pdChzdHJ1Y3Qgc3dfZmxvd19tYXRjaCAqbWF0Y2gsXFxuQEAgLTI3NjMsMjAgKzI4MzksMjAgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9zZXRfdHVuKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuIFxcdHR1bl9kc3QgPSBtZXRhZGF0YV9kc3RfYWxsb2Moa2V5LnR1bl9vcHRzX2xlbiwgTUVUQURBVEFfSVBfVFVOTkVMLFxcbiBcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbiBcXG4tXFx0aWYgKCF0dW5fZHN0KVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0aWYgKCF0dW5fZHN0KSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXHR9XFxuIFxcbiBcXHRlcnIgPSBkc3RfY2FjaGVfaW5pdChcXHUwMDI2dHVuX2RzdC1cXHUwMDNldS50dW5faW5mby5kc3RfY2FjaGUsIEdGUF9LRVJORUwpO1xcbi1cXHRpZiAoZXJyKSB7XFxuLVxcdFxcdGRzdF9yZWxlYXNlKChzdHJ1Y3QgZHN0X2VudHJ5ICopdHVuX2RzdCk7XFxuLVxcdFxcdHJldHVybiBlcnI7XFxuLVxcdH1cXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfZnJlZV90dW5fZHN0O1xcbiBcXG4gXFx0YSA9IF9fYWRkX2FjdGlvbihzZmEsIE9WU19LRVlfQVRUUl9UVU5ORUxfSU5GTywgTlVMTCxcXG4gXFx0XFx0XFx0IHNpemVvZigqb3ZzX3R1biksIGxvZyk7XFxuIFxcdGlmIChJU19FUlIoYSkpIHtcXG4tXFx0XFx0ZHN0X3JlbGVhc2UoKHN0cnVjdCBkc3RfZW50cnkgKil0dW5fZHN0KTtcXG4tXFx0XFx0cmV0dXJuIFBUUl9FUlIoYSk7XFxuK1xcdFxcdGVyciA9IFBUUl9FUlIoYSk7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfdHVuX2RzdDtcXG4gXFx0fVxcbiBcXG4gXFx0b3ZzX3R1biA9IG5sYV9kYXRhKGEpO1xcbkBAIC0yNzk3LDggKzI4NzMsMTYgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9zZXRfdHVuKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuIFxcdGlwX3R1bm5lbF9pbmZvX29wdHNfc2V0KHR1bl9pbmZvLFxcbiBcXHRcXHRcXHRcXHRUVU5fTUVUQURBVEFfT1BUUyhcXHUwMDI2a2V5LCBrZXkudHVuX29wdHNfbGVuKSxcXG4gXFx0XFx0XFx0XFx0a2V5LnR1bl9vcHRzX2xlbiwgZHN0X29wdF90eXBlKTtcXG4tXFx0YWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcXG4rXFx0ZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRShlcnIpKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX3R1bl9kc3Q7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gXFxuK2Vycl9mcmVlX3R1bl9kc3Q6XFxuK1xcdGRzdF9yZWxlYXNlKChzdHJ1Y3QgZHN0X2VudHJ5ICopdHVuX2RzdCk7XFxuK2VycjpcXG4rXFx0KCpzZmEpLVxcdTAwM2VhY3Rpb25zX2xlbiA9IHN0YXJ0O1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbkBAIC0yOTcxLDcgKzMwNTUsNyBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX3NldChjb25zdCBzdHJ1Y3QgbmxhdHRyICphLFxcbiBcXG4gXFx0LyogQ29udmVydCBub24tbWFza2VkIG5vbi10dW5uZWwgc2V0IGFjdGlvbnMgdG8gbWFza2VkIHNldCBhY3Rpb25zLiAqL1xcbiBcXHRpZiAoIW1hc2tlZCBcXHUwMDI2XFx1MDAyNiBrZXlfdHlwZSAhPSBPVlNfS0VZX0FUVFJfVFVOTkVMKSB7XFxuLVxcdFxcdGludCBzdGFydCwgbGVuID0ga2V5X2xlbiAqIDI7XFxuK1xcdFxcdGludCBlcnIsIHN0YXJ0LCBsZW4gPSBrZXlfbGVuICogMjtcXG4gXFx0XFx0c3RydWN0IG5sYXR0ciAqYXQ7XFxuIFxcbiBcXHRcXHQqc2tpcF9jb3B5ID0gdHJ1ZTtcXG5AQCAtMjk4Myw4ICszMDY3LDExIEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfc2V0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmEsXFxuIFxcdFxcdFxcdHJldHVybiBzdGFydDtcXG4gXFxuIFxcdFxcdGF0ID0gX19hZGRfYWN0aW9uKHNmYSwga2V5X3R5cGUsIE5VTEwsIGxlbiwgbG9nKTtcXG4tXFx0XFx0aWYgKElTX0VSUihhdCkpXFxuLVxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGF0KTtcXG4rXFx0XFx0aWYgKElTX0VSUihhdCkpIHtcXG4rXFx0XFx0XFx0ZXJyID0gUFRSX0VSUihhdCk7XFxuK1xcdFxcdFxcdCgqc2ZhKS1cXHUwMDNlYWN0aW9uc19sZW4gPSBzdGFydDtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0bWVtY3B5KG5sYV9kYXRhKGF0KSwgbmxhX2RhdGEob3ZzX2tleSksIGtleV9sZW4pOyAvKiBLZXkuICovXFxuIFxcdFxcdG1lbXNldChubGFfZGF0YShhdCkgKyBrZXlfbGVuLCAweGZmLCBrZXlfbGVuKTsgICAgLyogTWFzay4gKi9cXG5AQCAtMjk5NCw3ICszMDgxLDExIEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfc2V0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmEsXFxuIFxcbiBcXHRcXHRcXHRtYXNrLVxcdTAwM2VpcHY2X2xhYmVsIFxcdTAwMjY9IGh0b25sKDB4MDAwRkZGRkYpO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XFxuK1xcdFxcdGVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0UoZXJyKSkge1xcbitcXHRcXHRcXHQoKnNmYSktXFx1MDAzZWFjdGlvbnNfbGVuID0gc3RhcnQ7XFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTMwNDAsNyArMzEzMSw4IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfY2hlY2tfcGt0X2xlbihzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmFjdHNfaWZfZ3JlYXRlciwgKmFjdHNfaWZfbGVzc2VyX2VxO1xcbiBcXHRzdHJ1Y3QgbmxhdHRyICphW09WU19DSEVDS19QS1RfTEVOX0FUVFJfTUFYICsgMV07XFxuIFxcdHN0cnVjdCBjaGVja19wa3RfbGVuX2FyZyBhcmc7XFxuLVxcdGludCBuZXN0ZWRfYWN0c19zdGFydDtcXG4rXFx0aW50IGdyZWF0ZXJfYWN0c19zdGFydCA9IC0xO1xcbitcXHRpbnQgbGVzc2VyX2FjdHNfc3RhcnQgPSAtMTtcXG4gXFx0aW50IHN0YXJ0LCBlcnI7XFxuIFxcbiBcXHRlcnIgPSBubGFfcGFyc2VfZGVwcmVjYXRlZF9zdHJpY3QoYSwgT1ZTX0NIRUNLX1BLVF9MRU5fQVRUUl9NQVgsXFxuQEAgLTMwNzUsMzcgKzMxNjcsNTggQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9jaGVja19wa3RfbGVuKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0ZXJyID0gb3ZzX25sYV9hZGRfYWN0aW9uKHNmYSwgT1ZTX0NIRUNLX1BLVF9MRU5fQVRUUl9BUkcsIFxcdTAwMjZhcmcsXFxuIFxcdFxcdFxcdFxcdCBzaXplb2YoYXJnKSwgbG9nKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4gXFxuLVxcdG5lc3RlZF9hY3RzX3N0YXJ0ID0gYWRkX25lc3RlZF9hY3Rpb25fc3RhcnQoc2ZhLFxcbi1cXHRcXHRPVlNfQ0hFQ0tfUEtUX0xFTl9BVFRSX0FDVElPTlNfSUZfTEVTU19FUVVBTCwgbG9nKTtcXG4tXFx0aWYgKG5lc3RlZF9hY3RzX3N0YXJ0IFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIG5lc3RlZF9hY3RzX3N0YXJ0O1xcbitcXHRsZXNzZXJfYWN0c19zdGFydCA9XFxuK1xcdFxcdGFkZF9uZXN0ZWRfYWN0aW9uX3N0YXJ0KHNmYSxcXG4rXFx0XFx0XFx0XFx0XFx0T1ZTX0NIRUNLX1BLVF9MRU5fQVRUUl9BQ1RJT05TX0lGX0xFU1NfRVFVQUwsXFxuK1xcdFxcdFxcdFxcdFxcdGxvZyk7XFxuK1xcdGlmIChsZXNzZXJfYWN0c19zdGFydCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZXJyID0gbGVzc2VyX2FjdHNfc3RhcnQ7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuK1xcdH1cXG4gXFxuIFxcdGVyciA9IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMobmV0LCBhY3RzX2lmX2xlc3Nlcl9lcSwga2V5LCBzZmEsXFxuIFxcdFxcdFxcdFxcdCAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXFxuIFxcdFxcdFxcdFxcdCAgICAgZGVwdGggKyAxKTtcXG4gXFxuIFxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIFxcbi1cXHRhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgbmVzdGVkX2FjdHNfc3RhcnQpO1xcbitcXHRlcnIgPSBhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgbGVzc2VyX2FjdHNfc3RhcnQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlO1xcbiBcXG4tXFx0bmVzdGVkX2FjdHNfc3RhcnQgPSBhZGRfbmVzdGVkX2FjdGlvbl9zdGFydChzZmEsXFxuLVxcdFxcdE9WU19DSEVDS19QS1RfTEVOX0FUVFJfQUNUSU9OU19JRl9HUkVBVEVSLCBsb2cpO1xcbi1cXHRpZiAobmVzdGVkX2FjdHNfc3RhcnQgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gbmVzdGVkX2FjdHNfc3RhcnQ7XFxuK1xcdGdyZWF0ZXJfYWN0c19zdGFydCA9XFxuK1xcdFxcdGFkZF9uZXN0ZWRfYWN0aW9uX3N0YXJ0KHNmYSxcXG4rXFx0XFx0XFx0XFx0XFx0T1ZTX0NIRUNLX1BLVF9MRU5fQVRUUl9BQ1RJT05TX0lGX0dSRUFURVIsXFxuK1xcdFxcdFxcdFxcdFxcdGxvZyk7XFxuK1xcdGlmIChncmVhdGVyX2FjdHNfc3RhcnQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGVyciA9IGdyZWF0ZXJfYWN0c19zdGFydDtcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4rXFx0fVxcbiBcXG4gXFx0ZXJyID0gX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhuZXQsIGFjdHNfaWZfZ3JlYXRlciwga2V5LCBzZmEsXFxuIFxcdFxcdFxcdFxcdCAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXFxuIFxcdFxcdFxcdFxcdCAgICAgZGVwdGggKyAxKTtcXG4gXFxuIFxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuK1xcbitcXHRlcnIgPSBhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgZ3JlYXRlcl9hY3RzX3N0YXJ0KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4gXFxuLVxcdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBuZXN0ZWRfYWN0c19zdGFydCk7XFxuLVxcdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XFxuK1xcdGVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIFxcdHJldHVybiAwO1xcbitcXG4rZXJyX2ZyZWU6XFxuK1xcdG92c19ubGFfdHJpbSgqc2ZhLCBncmVhdGVyX2FjdHNfc3RhcnQsIHRydWUpO1xcbitcXHRvdnNfbmxhX3RyaW0oKnNmYSwgbGVzc2VyX2FjdHNfc3RhcnQsIHRydWUpO1xcbitcXHRvdnNfbmxhX3RyaW0oKnNmYSwgc3RhcnQsIGZhbHNlKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB2YWxpZGF0ZV9wc2FtcGxlKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQyOjE0LjQ4MTgzNzA3OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyMDU3MjQ5MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmFsaWRhdGVfYW5kX2NvcHlfc2FtcGxlXCIsXG4gICAgXCJ2YWxpZGF0ZV9hbmRfY29weV9kZWNfdHRsXCIsXG4gICAgXCJ2YWxpZGF0ZV9hbmRfY29weV9jbG9uZVwiLFxuICAgIFwidmFsaWRhdGVfYW5kX2NvcHlfc2V0X3R1blwiLFxuICAgIFwidmFsaWRhdGVfc2V0XCIsXG4gICAgXCJ2YWxpZGF0ZV9hbmRfY29weV9jaGVja19wa3RfbGVuXCIsXG4gICAgXCJfX292c19ubGFfY29weV9hY3Rpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBsZWFrcyBpbiBPcGVuIHZTd2l0Y2ggbmV0bGluayBhY3Rpb24gcGFyc2luZyAoYF9fb3ZzX25sYV9jb3B5X2FjdGlvbnNgIGFuZCByZWxhdGVkIGB2YWxpZGF0ZV9hbmRfY29weV8qYCBmdW5jdGlvbnMpLiBJdCBlbnN1cmVzIHRoYXQgd2hlbiBuZXN0ZWQgYWN0aW9uIHBhcnNpbmcgZmFpbHMsIHRoZSBnZW5lcmF0ZWQgYWN0aW9uIGxpc3QgaXMgcHJvcGVybHkgdHJ1bmNhdGVkIGFuZCBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIE9WUyBsb2dpYyB0aGF0IHByb2Nlc3NlcyB1c2Vyc3BhY2UgaW5wdXQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTRkZDM0NjI4Zjk3MzllNjczYTg1OWVjNjc0MzMyYzJjZWI5ODU0MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTM6NDI6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmNcbmluZGV4IDEzMDUyNDA4YTEzMmY0Li5kODA3OWRlZTcwMGVkYyAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jXG5AQCAtMjQ5NiwxMyArMjQ5Niw1NiBAQCBzdGF0aWMgaW5saW5lIGludCBhZGRfbmVzdGVkX2FjdGlvbl9zdGFydChzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICoqc2ZhLFxuIFx0cmV0dXJuIHVzZWQ7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRfbmVzdGVkX2FjdGlvbl9lbmQoc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqc2ZhLFxuLVx0XHRcdFx0XHQgaW50IHN0X29mZnNldClcbitzdGF0aWMgaW5saW5lIGludCBhZGRfbmVzdGVkX2FjdGlvbl9lbmQoc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqc2ZhLFxuK1x0XHRcdFx0XHRpbnQgc3Rfb2Zmc2V0KVxuIHtcbi1cdHN0cnVjdCBubGF0dHIgKmEgPSAoc3RydWN0IG5sYXR0ciAqKSAoKHVuc2lnbmVkIGNoYXIgKilzZmEtXHUwMDNlYWN0aW9ucyArXG4tXHRcdFx0XHRcdFx0XHQgICAgICAgc3Rfb2Zmc2V0KTtcbitcdHN0cnVjdCBubGF0dHIgKmE7XG4rXHR1MzIgYXR0cl9sZW47XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKHN0X29mZnNldCBcdTAwM2MgMCB8fFxuK1x0XHRcdCAodTMyKXN0X29mZnNldCBcdTAwM2Ugc2ZhLVx1MDAzZWFjdGlvbnNfbGVuKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRhdHRyX2xlbiA9IHNmYS1cdTAwM2VhY3Rpb25zX2xlbiAtICh1MzIpc3Rfb2Zmc2V0O1xuK1x0aWYgKFdBUk5fT05fT05DRShhdHRyX2xlbiBcdTAwM2MgTkxBX0hEUkxFTikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0YS1cdTAwM2VubGFfbGVuID0gc2ZhLVx1MDAzZWFjdGlvbnNfbGVuIC0gc3Rfb2Zmc2V0O1xuK1x0aWYgKGF0dHJfbGVuIFx1MDAzZSBVMTZfTUFYKVxuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuK1xuK1x0YSA9IChzdHJ1Y3QgbmxhdHRyICopKCh1OCAqKXNmYS1cdTAwM2VhY3Rpb25zICsgc3Rfb2Zmc2V0KTtcbitcdGEtXHUwMDNlbmxhX2xlbiA9IGF0dHJfbGVuO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIEZyZWUgdGhlIGdlbmVyYXRlZCBhY3Rpb24tbGlzdCB0YWlsIGF0IEBzdGFydCBhbmQgdHJ1bmNhdGUgaXQuXG4rICogSWYgQG5lc3RlZCwgQHN0YXJ0IHBvaW50cyB0byBpdHMgY29udGFpbmluZyBubGF0dHIgaGVhZGVyLlxuKyAqL1xuK3N0YXRpYyB2b2lkIG92c19ubGFfdHJpbShzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICpzZmEsIGludCBzdGFydCwgYm9vbCBuZXN0ZWQpXG4re1xuK1x0Y29uc3Qgc3RydWN0IG5sYXR0ciAqYWN0aW9ucztcbitcdHUzMiBsZW47XG4rXG4rXHRpZiAoc3RhcnQgXHUwMDNjIDApXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChXQVJOX09OX09OQ0UoKHUzMilzdGFydCBcdTAwM2Ugc2ZhLVx1MDAzZWFjdGlvbnNfbGVuKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0YWN0aW9ucyA9IChjb25zdCBzdHJ1Y3QgbmxhdHRyICopKCh1OCAqKXNmYS1cdTAwM2VhY3Rpb25zICsgc3RhcnQpO1xuK1x0bGVuID0gc2ZhLVx1MDAzZWFjdGlvbnNfbGVuIC0gKHUzMilzdGFydDtcbitcbitcdGlmIChuZXN0ZWQpIHtcbitcdFx0aWYgKGxlbiBcdTAwM2MgTkxBX0hEUkxFTilcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0YWN0aW9ucyA9IChjb25zdCBzdHJ1Y3QgbmxhdHRyICopKCh1OCAqKWFjdGlvbnMgKyBOTEFfSERSTEVOKTtcbitcdFx0bGVuIC09IE5MQV9IRFJMRU47XG4rXHR9XG4rXG4rXHRvdnNfbmxhX2ZyZWVfbmVzdGVkX2FjdGlvbnMoYWN0aW9ucywgbGVuKTtcbitvdXQ6XG4rXHRzZmEtXHUwMDNlYWN0aW9uc19sZW4gPSBzdGFydDtcbiB9XG4gXG4gc3RhdGljIGludCBfX292c19ubGFfY29weV9hY3Rpb25zKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbkBAIC0yNTIyLDYgKzI1NjUsNyBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X3NhbXBsZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyc1tPVlNfU0FNUExFX0FUVFJfTUFYICsgMV07XG4gXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICpwcm9iYWJpbGl0eSwgKmFjdGlvbnM7XG4gXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICphO1xuK1x0aW50IGFjdGlvbnNfc3RhcnQ7XG4gXHRpbnQgcmVtLCBzdGFydCwgZXJyO1xuIFx0c3RydWN0IHNhbXBsZV9hcmcgYXJnO1xuIFxuQEAgLTI1NjUsMTggKzI2MDksMjcgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9zYW1wbGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIFx0ZXJyID0gb3ZzX25sYV9hZGRfYWN0aW9uKHNmYSwgT1ZTX1NBTVBMRV9BVFRSX0FSRywgXHUwMDI2YXJnLCBzaXplb2YoYXJnKSxcbiBcdFx0XHRcdCBsb2cpO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbitcdFx0Z290byBlcnI7XG4gXG4rXHRhY3Rpb25zX3N0YXJ0ID0gKCpzZmEpLVx1MDAzZWFjdGlvbnNfbGVuO1xuIFx0ZXJyID0gX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhuZXQsIGFjdGlvbnMsIGtleSwgc2ZhLFxuIFx0XHRcdFx0ICAgICBldGhfdHlwZSwgdmxhbl90Y2ksIG1wbHNfbGFiZWxfY291bnQsIGxvZyxcbiBcdFx0XHRcdCAgICAgZGVwdGggKyAxKTtcbiBcbiBcdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4rXHRcdGdvdG8gZXJyX2ZyZWU7XG4gXG4tXHRhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgc3RhcnQpO1xuK1x0ZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyX2ZyZWU7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitlcnJfZnJlZTpcbitcdG92c19ubGFfdHJpbSgqc2ZhLCBhY3Rpb25zX3N0YXJ0LCBmYWxzZSk7XG4rZXJyOlxuK1x0KCpzZmEpLVx1MDAzZWFjdGlvbnNfbGVuID0gc3RhcnQ7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X2RlY190dGwoc3RydWN0IG5ldCAqbmV0LFxuQEAgLTI2MjQsMTggKzI2NzcsMzEgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9kZWNfdHRsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0cmV0dXJuIHN0YXJ0O1xuIFxuIFx0YWN0aW9uX3N0YXJ0ID0gYWRkX25lc3RlZF9hY3Rpb25fc3RhcnQoc2ZhLCBPVlNfREVDX1RUTF9BVFRSX0FDVElPTiwgbG9nKTtcbi1cdGlmIChhY3Rpb25fc3RhcnQgXHUwMDNjIDApXG4tXHRcdHJldHVybiBhY3Rpb25fc3RhcnQ7XG4rXHRpZiAoYWN0aW9uX3N0YXJ0IFx1MDAzYyAwKSB7XG4rXHRcdGVyciA9IGFjdGlvbl9zdGFydDtcbitcdFx0Z290byBlcnI7XG4rXHR9XG4gXG4gXHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYWN0aW9ucywga2V5LCBzZmEsIGV0aF90eXBlLFxuIFx0XHRcdFx0ICAgICB2bGFuX3RjaSwgbXBsc19sYWJlbF9jb3VudCwgbG9nLFxuIFx0XHRcdFx0ICAgICBkZXB0aCArIDEpO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbitcdFx0Z290byBlcnJfZnJlZTtcbitcbitcdGVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBhY3Rpb25fc3RhcnQpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfZnJlZTtcbiBcbi1cdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBhY3Rpb25fc3RhcnQpO1xuLVx0YWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcbitcdGVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9mcmVlO1xuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX2ZyZWU6XG4rXHRvdnNfbmxhX3RyaW0oKnNmYSwgYWN0aW9uX3N0YXJ0LCB0cnVlKTtcbitlcnI6XG4rXHQoKnNmYSktXHUwMDNlYWN0aW9uc19sZW4gPSBzdGFydDtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfY2xvbmUoc3RydWN0IG5ldCAqbmV0LFxuQEAgLTI2NDYsNiArMjcxMiw3IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfY2xvbmUoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0ICAgdTMyIG1wbHNfbGFiZWxfY291bnQsIGJvb2wgbG9nLCBib29sIGxhc3QsXG4gXHRcdFx0XHQgICB1MzIgZGVwdGgpXG4ge1xuK1x0aW50IGFjdGlvbnNfc3RhcnQ7XG4gXHRpbnQgc3RhcnQsIGVycjtcbiBcdHUzMiBleGVjO1xuIFxuQEAgLTI2NjEsMTcgKzI3MjgsMjYgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9jbG9uZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRlcnIgPSBvdnNfbmxhX2FkZF9hY3Rpb24oc2ZhLCBPVlNfQ0xPTkVfQVRUUl9FWEVDLCBcdTAwMjZleGVjLFxuIFx0XHRcdFx0IHNpemVvZihleGVjKSwgbG9nKTtcbiBcdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4rXHRcdGdvdG8gZXJyO1xuIFxuK1x0YWN0aW9uc19zdGFydCA9ICgqc2ZhKS1cdTAwM2VhY3Rpb25zX2xlbjtcbiBcdGVyciA9IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMobmV0LCBhdHRyLCBrZXksIHNmYSxcbiBcdFx0XHRcdCAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXG4gXHRcdFx0XHQgICAgIGRlcHRoICsgMSk7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHRnb3RvIGVycl9mcmVlO1xuIFxuLVx0YWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcbitcdGVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9mcmVlO1xuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX2ZyZWU6XG4rXHRvdnNfbmxhX3RyaW0oKnNmYSwgYWN0aW9uc19zdGFydCwgZmFsc2UpO1xuK2VycjpcbitcdCgqc2ZhKS1cdTAwM2VhY3Rpb25zX2xlbiA9IHN0YXJ0O1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gdm9pZCBvdnNfbWF0Y2hfaW5pdChzdHJ1Y3Qgc3dfZmxvd19tYXRjaCAqbWF0Y2gsXG5AQCAtMjc2MywyMCArMjgzOSwyMCBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X3NldF90dW4oY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbiBcdHR1bl9kc3QgPSBtZXRhZGF0YV9kc3RfYWxsb2Moa2V5LnR1bl9vcHRzX2xlbiwgTUVUQURBVEFfSVBfVFVOTkVMLFxuIFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbiBcbi1cdGlmICghdHVuX2RzdClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRpZiAoIXR1bl9kc3QpIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byBlcnI7XG4rXHR9XG4gXG4gXHRlcnIgPSBkc3RfY2FjaGVfaW5pdChcdTAwMjZ0dW5fZHN0LVx1MDAzZXUudHVuX2luZm8uZHN0X2NhY2hlLCBHRlBfS0VSTkVMKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0ZHN0X3JlbGVhc2UoKHN0cnVjdCBkc3RfZW50cnkgKil0dW5fZHN0KTtcbi1cdFx0cmV0dXJuIGVycjtcbi1cdH1cbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyX2ZyZWVfdHVuX2RzdDtcbiBcbiBcdGEgPSBfX2FkZF9hY3Rpb24oc2ZhLCBPVlNfS0VZX0FUVFJfVFVOTkVMX0lORk8sIE5VTEwsXG4gXHRcdFx0IHNpemVvZigqb3ZzX3R1biksIGxvZyk7XG4gXHRpZiAoSVNfRVJSKGEpKSB7XG4tXHRcdGRzdF9yZWxlYXNlKChzdHJ1Y3QgZHN0X2VudHJ5ICopdHVuX2RzdCk7XG4tXHRcdHJldHVybiBQVFJfRVJSKGEpO1xuK1x0XHRlcnIgPSBQVFJfRVJSKGEpO1xuK1x0XHRnb3RvIGVycl9mcmVlX3R1bl9kc3Q7XG4gXHR9XG4gXG4gXHRvdnNfdHVuID0gbmxhX2RhdGEoYSk7XG5AQCAtMjc5Nyw4ICsyODczLDE2IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfc2V0X3R1bihjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIFx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQodHVuX2luZm8sXG4gXHRcdFx0XHRUVU5fTUVUQURBVEFfT1BUUyhcdTAwMjZrZXksIGtleS50dW5fb3B0c19sZW4pLFxuIFx0XHRcdFx0a2V5LnR1bl9vcHRzX2xlbiwgZHN0X29wdF90eXBlKTtcbi1cdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XG4rXHRlcnIgPSBhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgc3RhcnQpO1xuK1x0aWYgKFdBUk5fT05fT05DRShlcnIpKVxuK1x0XHRnb3RvIGVycl9mcmVlX3R1bl9kc3Q7XG4rXG4rXHRyZXR1cm4gMDtcbiBcbitlcnJfZnJlZV90dW5fZHN0OlxuK1x0ZHN0X3JlbGVhc2UoKHN0cnVjdCBkc3RfZW50cnkgKil0dW5fZHN0KTtcbitlcnI6XG4rXHQoKnNmYSktXHUwMDNlYWN0aW9uc19sZW4gPSBzdGFydDtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTI5NzEsNyArMzA1NSw3IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfc2V0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmEsXG4gXG4gXHQvKiBDb252ZXJ0IG5vbi1tYXNrZWQgbm9uLXR1bm5lbCBzZXQgYWN0aW9ucyB0byBtYXNrZWQgc2V0IGFjdGlvbnMuICovXG4gXHRpZiAoIW1hc2tlZCBcdTAwMjZcdTAwMjYga2V5X3R5cGUgIT0gT1ZTX0tFWV9BVFRSX1RVTk5FTCkge1xuLVx0XHRpbnQgc3RhcnQsIGxlbiA9IGtleV9sZW4gKiAyO1xuK1x0XHRpbnQgZXJyLCBzdGFydCwgbGVuID0ga2V5X2xlbiAqIDI7XG4gXHRcdHN0cnVjdCBubGF0dHIgKmF0O1xuIFxuIFx0XHQqc2tpcF9jb3B5ID0gdHJ1ZTtcbkBAIC0yOTgzLDggKzMwNjcsMTEgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9zZXQoY29uc3Qgc3RydWN0IG5sYXR0ciAqYSxcbiBcdFx0XHRyZXR1cm4gc3RhcnQ7XG4gXG4gXHRcdGF0ID0gX19hZGRfYWN0aW9uKHNmYSwga2V5X3R5cGUsIE5VTEwsIGxlbiwgbG9nKTtcbi1cdFx0aWYgKElTX0VSUihhdCkpXG4tXHRcdFx0cmV0dXJuIFBUUl9FUlIoYXQpO1xuK1x0XHRpZiAoSVNfRVJSKGF0KSkge1xuK1x0XHRcdGVyciA9IFBUUl9FUlIoYXQpO1xuK1x0XHRcdCgqc2ZhKS1cdTAwM2VhY3Rpb25zX2xlbiA9IHN0YXJ0O1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbiBcbiBcdFx0bWVtY3B5KG5sYV9kYXRhKGF0KSwgbmxhX2RhdGEob3ZzX2tleSksIGtleV9sZW4pOyAvKiBLZXkuICovXG4gXHRcdG1lbXNldChubGFfZGF0YShhdCkgKyBrZXlfbGVuLCAweGZmLCBrZXlfbGVuKTsgICAgLyogTWFzay4gKi9cbkBAIC0yOTk0LDcgKzMwODEsMTEgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9zZXQoY29uc3Qgc3RydWN0IG5sYXR0ciAqYSxcbiBcbiBcdFx0XHRtYXNrLVx1MDAzZWlwdjZfbGFiZWwgXHUwMDI2PSBodG9ubCgweDAwMEZGRkZGKTtcbiBcdFx0fVxuLVx0XHRhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgc3RhcnQpO1xuK1x0XHRlcnIgPSBhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgc3RhcnQpO1xuK1x0XHRpZiAoV0FSTl9PTl9PTkNFKGVycikpIHtcbitcdFx0XHQoKnNmYSktXHUwMDNlYWN0aW9uc19sZW4gPSBzdGFydDtcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0zMDQwLDcgKzMxMzEsOCBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X2NoZWNrX3BrdF9sZW4oc3RydWN0IG5ldCAqbmV0LFxuIFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqYWN0c19pZl9ncmVhdGVyLCAqYWN0c19pZl9sZXNzZXJfZXE7XG4gXHRzdHJ1Y3QgbmxhdHRyICphW09WU19DSEVDS19QS1RfTEVOX0FUVFJfTUFYICsgMV07XG4gXHRzdHJ1Y3QgY2hlY2tfcGt0X2xlbl9hcmcgYXJnO1xuLVx0aW50IG5lc3RlZF9hY3RzX3N0YXJ0O1xuK1x0aW50IGdyZWF0ZXJfYWN0c19zdGFydCA9IC0xO1xuK1x0aW50IGxlc3Nlcl9hY3RzX3N0YXJ0ID0gLTE7XG4gXHRpbnQgc3RhcnQsIGVycjtcbiBcbiBcdGVyciA9IG5sYV9wYXJzZV9kZXByZWNhdGVkX3N0cmljdChhLCBPVlNfQ0hFQ0tfUEtUX0xFTl9BVFRSX01BWCxcbkBAIC0zMDc1LDM3ICszMTY3LDU4IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfY2hlY2tfcGt0X2xlbihzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRlcnIgPSBvdnNfbmxhX2FkZF9hY3Rpb24oc2ZhLCBPVlNfQ0hFQ0tfUEtUX0xFTl9BVFRSX0FSRywgXHUwMDI2YXJnLFxuIFx0XHRcdFx0IHNpemVvZihhcmcpLCBsb2cpO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbitcdFx0Z290byBlcnJfZnJlZTtcbiBcbi1cdG5lc3RlZF9hY3RzX3N0YXJ0ID0gYWRkX25lc3RlZF9hY3Rpb25fc3RhcnQoc2ZhLFxuLVx0XHRPVlNfQ0hFQ0tfUEtUX0xFTl9BVFRSX0FDVElPTlNfSUZfTEVTU19FUVVBTCwgbG9nKTtcbi1cdGlmIChuZXN0ZWRfYWN0c19zdGFydCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIG5lc3RlZF9hY3RzX3N0YXJ0O1xuK1x0bGVzc2VyX2FjdHNfc3RhcnQgPVxuK1x0XHRhZGRfbmVzdGVkX2FjdGlvbl9zdGFydChzZmEsXG4rXHRcdFx0XHRcdE9WU19DSEVDS19QS1RfTEVOX0FUVFJfQUNUSU9OU19JRl9MRVNTX0VRVUFMLFxuK1x0XHRcdFx0XHRsb2cpO1xuK1x0aWYgKGxlc3Nlcl9hY3RzX3N0YXJ0IFx1MDAzYyAwKSB7XG4rXHRcdGVyciA9IGxlc3Nlcl9hY3RzX3N0YXJ0O1xuK1x0XHRnb3RvIGVycl9mcmVlO1xuK1x0fVxuIFxuIFx0ZXJyID0gX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhuZXQsIGFjdHNfaWZfbGVzc2VyX2VxLCBrZXksIHNmYSxcbiBcdFx0XHRcdCAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXG4gXHRcdFx0XHQgICAgIGRlcHRoICsgMSk7XG4gXG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHRnb3RvIGVycl9mcmVlO1xuIFxuLVx0YWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIG5lc3RlZF9hY3RzX3N0YXJ0KTtcbitcdGVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBsZXNzZXJfYWN0c19zdGFydCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9mcmVlO1xuIFxuLVx0bmVzdGVkX2FjdHNfc3RhcnQgPSBhZGRfbmVzdGVkX2FjdGlvbl9zdGFydChzZmEsXG4tXHRcdE9WU19DSEVDS19QS1RfTEVOX0FUVFJfQUNUSU9OU19JRl9HUkVBVEVSLCBsb2cpO1xuLVx0aWYgKG5lc3RlZF9hY3RzX3N0YXJ0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gbmVzdGVkX2FjdHNfc3RhcnQ7XG4rXHRncmVhdGVyX2FjdHNfc3RhcnQgPVxuK1x0XHRhZGRfbmVzdGVkX2FjdGlvbl9zdGFydChzZmEsXG4rXHRcdFx0XHRcdE9WU19DSEVDS19QS1RfTEVOX0FUVFJfQUNUSU9OU19JRl9HUkVBVEVSLFxuK1x0XHRcdFx0XHRsb2cpO1xuK1x0aWYgKGdyZWF0ZXJfYWN0c19zdGFydCBcdTAwM2MgMCkge1xuK1x0XHRlcnIgPSBncmVhdGVyX2FjdHNfc3RhcnQ7XG4rXHRcdGdvdG8gZXJyX2ZyZWU7XG4rXHR9XG4gXG4gXHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYWN0c19pZl9ncmVhdGVyLCBrZXksIHNmYSxcbiBcdFx0XHRcdCAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXG4gXHRcdFx0XHQgICAgIGRlcHRoICsgMSk7XG4gXG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHRnb3RvIGVycl9mcmVlO1xuK1xuK1x0ZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIGdyZWF0ZXJfYWN0c19zdGFydCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9mcmVlO1xuIFxuLVx0YWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIG5lc3RlZF9hY3RzX3N0YXJ0KTtcbi1cdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XG4rXHRlcnIgPSBhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgc3RhcnQpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfZnJlZTtcbiBcdHJldHVybiAwO1xuK1xuK2Vycl9mcmVlOlxuK1x0b3ZzX25sYV90cmltKCpzZmEsIGdyZWF0ZXJfYWN0c19zdGFydCwgdHJ1ZSk7XG4rXHRvdnNfbmxhX3RyaW0oKnNmYSwgbGVzc2VyX2FjdHNfc3RhcnQsIHRydWUpO1xuK1x0b3ZzX25sYV90cmltKCpzZmEsIHN0YXJ0LCBmYWxzZSk7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZhbGlkYXRlX3BzYW1wbGUoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQyOjE0LjQ4MTgzODg3OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNTE2ODA0NTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIGluIE9WUyBOZXRsaW5rIEFjdGlvbiBQYXJzaW5nKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgb3ZlciB0aGlzIHBhdGNoIGFwcGxpZWQgdG8gYG5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuY2AsIGFuZCBpdCdzIG1ha2luZyBzb21lIGNyaXRpY2FsIGNoYW5nZXMgdG8gaG93IE9WUyBoYW5kbGVzIG5ldGxpbmsgYWN0aW9ucy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uPyBUaGlzIGlzIGEgc29saWQgcGllY2Ugb2Ygd29yayB0aGF0IGFkZHJlc3NlcyBzb21lIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgZml4aW5nIG1lbW9yeSBsZWFrcyBhbmQgaW52YWxpZCBzdGF0ZXMgdGhhdCBhcmlzZSB3aGVuIG5lc3RlZCBhY3Rpb24gcGFyc2luZyBnb2VzIHdyb25nLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgYWRkX25lc3RlZF9hY3Rpb25fZW5kYCBub3cgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgaW5zdGVhZCBvZiBiZWluZyB2b2lkLiBUaGF0J3MgYSBnb29kIG1vdmUsIGdpdmluZyB0aGUgY2FsbGVyIGEgY2xlYXIgc2lnbmFsIGFib3V0IHN1Y2Nlc3Mgb3IgZmFpbHVyZS4gIEl0IGFsc28gaW5jbHVkZXMgdGhlIGFkZGl0aW9uIG9mIGBvdnNfbmxhX3RyaW1gLCB3aGljaCBpcyBkZXNpZ25lZCB0byBjbGVhbiB1cCBhbmQgdHJ1bmNhdGUgYW55IHBhcnRpYWxseSBidWlsdCBhY3Rpb24gbGlzdHMgd2hlbiB0aGVyZSdzIGFuIGVycm9yLiAgVGhhdCdzIHByZWNpc2VseSB3aGF0J3MgbmVlZGVkIHRvIHByZXZlbnQgbWVtb3J5IGlzc3Vlcy5cblxuVGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnMsIGFuZCBJIHNob3VsZCByZWFsbHkgemVybyBpbiBvbiB0aGVzZSBmb3IgYSBjbG9zZXIgbG9vazogYHZhbGlkYXRlX2FuZF9jb3B5X3NhbXBsZWAsIGB2YWxpZGF0ZV9hbmRfY29weV9kZWNfdHRsYCwgYHZhbGlkYXRlX2FuZF9jb3B5X2Nsb25lYCwgYHZhbGlkYXRlX2FuZF9jb3B5X3NldF90dW5gLCBgdmFsaWRhdGVfc2V0YCwgYW5kIGB2YWxpZGF0ZV9hbmRfY29weV9jaGVja19wa3RfbGVuYC4gIFRoZSBwYXR0ZXJuIGhlcmUgaXMgdGhhdCB0aGV5J3JlIGFsbCBiZWluZyBtb2RpZmllZCB0byBwcm9wZXJseSBoYW5kbGUgZXJyb3JzIHRoYXQgbWlnaHQgY29tZSBmcm9tIGBhZGRfbmVzdGVkX2FjdGlvbl9lbmRgIGFuZCB0byB1c2UgYG92c19ubGFfdHJpbWAgb3IgdHJ1bmNhdGUgYGFjdGlvbnNfbGVuYCB0byBjbGVhbiB1cC4gIEl0J3MgYWxsIGFib3V0IGVuc3VyaW5nIHRoYXQgZXZlbiBhIGZhaWxlZCBwYXJzaW5nIGF0dGVtcHQgZG9lc24ndCBsZWF2ZSB0aGUgc3lzdGVtIGluIGEgY29ycnVwdGVkIHN0YXRlLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIG1lYW5zIEkgc2hvdWxkIGRlZmluaXRlbHkgcHJpb3JpdGl6ZSBmdXp6aW5nIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiAgVGhlIGltcG9ydGFudCB0aGluZyBpcyBmaW5kaW5nIHRoZSBlbnRyeSBwb2ludHMuXG5cbkkgc2VlIHRoYXQgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBhbGwgY2FsbGVkIGZyb20gYF9fb3ZzX25sYV9jb3B5X2FjdGlvbnNgLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBmcm9tIGBvdnNfbmxhX2NvcHlfYWN0aW9uc2AuIEFuZCB0aGF0J3MgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gb2YgT1ZTIGZsb3dzLiBHb29kLlxuXG5JJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZm9yIE9wZW4gdlN3aXRjaCAoYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYCkgYW5kIGNvbmZpcm0gdGhhdCBgQ09ORklHX09QRU5WU1dJVENIYCBpcyBlbmFibGVkLiBUaW1lIHRvIHVzZSBteSB0b29scyB0byB2ZXJpZnkgdGhhdCBJJ3ZlIGZvdW5kIGFsbCB0aGUgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Njk5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDM6MDUuOTk4NjQ1NjExWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NjIyNDc3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT1BFTlZTV0lUQ0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NDpjb25maWcgT1BFTlZTV0lUQ0hfR1JFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01Ni1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0MzowNi4yNTQ4NzUyMDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzE5MDQ4ODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT3BlbiB2U3dpdGNoIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBJJ20gZGVhbGluZyB3aXRoIGhlcmUgaXMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYE9QRU5WU1dJVENIYC4gVGhhdCdzIHRoZSBwcmltYXJ5IGZvY3VzLCB0aGUgYW5jaG9yLCBhcyBmYXIgYXMgSSBjYW4gc2VlLiBNeSBvYmplY3RpdmUgaXMgdG8gZGlzc2VjdCB0aGVzZSBwYXJ0aWN1bGFyIGZ1bmN0aW9ucyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBhY3Rpb24gaGFuZGxpbmcgYW5kIHZhbGlkYXRpb24gcm91dGluZXMgd2l0aGluIHRoaXMgY29uZmlndXJhdGlvbi5cblxuU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gcmVhbGx5IGRpZyBpbnRvIGB2YWxpZGF0ZV9hbmRfY29weV9zYW1wbGVgLCBgdmFsaWRhdGVfYW5kX2NvcHlfZGVjX3R0bGAsIGB2YWxpZGF0ZV9hbmRfY29weV9jbG9uZWAsIGB2YWxpZGF0ZV9hbmRfY29weV9zZXRfdHVuYCwgYHZhbGlkYXRlX3NldGAsIGB2YWxpZGF0ZV9hbmRfY29weV9jaGVja19wa3RfbGVuYCwgYW5kLCBjcml0aWNhbGx5LCBgX19vdnNfbmxhX2NvcHlfYWN0aW9uc2AuIE15IGd1dCB0ZWxscyBtZSBgX19vdnNfbmxhX2NvcHlfYWN0aW9uc2AgaXMgdGhlIG1vc3QgaW1wb3J0YW50IG9mIHRoZSBidW5jaC4gVGhpcyBsYXN0IG9uZSBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiBhY3Rpb24gY29weWluZyByZXNpZGVzLCBzbyB0aGF0IHdpbGwgdGFrZSB0aGUgbW9zdCBzY3J1dGlueS5cblxuQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgT1BFTlZTV0lUQ0hgIGlzIHRoZSBvbmx5IGFjdGl2ZSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgb3RoZXIgcmVsZXZhbnQgY29udGV4dHMuIFllcCwgaXQncyB0aGUgbWFpbiBvbmUsIHNvIEknbSBvbiB0aGUgcmlnaHQgdHJhY2suXG5cbkFscmlnaHQsIGxldCdzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGxvb2sgYXQgYF9fb3ZzX25sYV9jb3B5X2FjdGlvbnNgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODgwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQzOjExLjU3MzkyNjAzNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk3MjEzODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19vdnNfbmxhX2NvcHlfYWN0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jPTI1MjQ9c3RhdGljIHZvaWQgb3ZzX25sYV90cmltKHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKnNmYSwgaW50IHN0YXJ0LCBib29sIG5lc3RlZClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0yNTUwLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYzoyNTUxOnN0YXRpYyBpbnQgX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTI1NTItXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYz0yNTU4PXN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfc2FtcGxlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0yNjE0LVxcdGFjdGlvbnNfc3RhcnQgPSAoKnNmYSktXFx1MDAzZWFjdGlvbnNfbGVuO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYzoyNjE1OlxcdGVyciA9IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMobmV0LCBhY3Rpb25zLCBrZXksIHNmYSxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMjYxNi1cXHRcXHRcXHRcXHQgICAgIGV0aF90eXBlLCB2bGFuX3RjaSwgbXBsc19sYWJlbF9jb3VudCwgbG9nLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jPTI2MzU9c3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9kZWNfdHRsKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0yNjg0LVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYzoyNjg1OlxcdGVyciA9IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMobmV0LCBhY3Rpb25zLCBrZXksIHNmYSwgZXRoX3R5cGUsXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTI2ODYtXFx0XFx0XFx0XFx0ICAgICB2bGFuX3RjaSwgbXBsc19sYWJlbF9jb3VudCwgbG9nLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jPTI3MDc9c3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9jbG9uZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMjczMy1cXHRhY3Rpb25zX3N0YXJ0ID0gKCpzZmEpLVxcdTAwM2VhY3Rpb25zX2xlbjtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM6MjczNDpcXHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYXR0ciwga2V5LCBzZmEsXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTI3MzUtXFx0XFx0XFx0XFx0ICAgICBldGhfdHlwZSwgdmxhbl90Y2ksIG1wbHNfbGFiZWxfY291bnQsIGxvZyxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYz0zMTIzPXN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfY2hlY2tfcGt0X2xlbihzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMzE4MC1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM6MzE4MTpcXHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYWN0c19pZl9sZXNzZXJfZXEsIGtleSwgc2ZhLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0zMTgyLVxcdFxcdFxcdFxcdCAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMzIwMC1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM6MzIwMTpcXHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYWN0c19pZl9ncmVhdGVyLCBrZXksIHNmYSxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMzIwMi1cXHRcXHRcXHRcXHQgICAgIGV0aF90eXBlLCB2bGFuX3RjaSwgbXBsc19sYWJlbF9jb3VudCwgbG9nLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jPTMyNDY9c3RhdGljIGludCBjb3B5X2FjdGlvbihjb25zdCBzdHJ1Y3QgbmxhdHRyICpmcm9tLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTMyNTktXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jOjMyNjA6c3RhdGljIGludCBfX292c19ubGFfY29weV9hY3Rpb25zKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMzI2MS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jPTM2MDQ9aW50IG92c19ubGFfY29weV9hY3Rpb25zKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0zNjE4LVxcdCgqc2ZhKS1cXHUwMDNlb3JpZ19sZW4gPSBubGFfbGVuKGF0dHIpO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYzozNjE5OlxcdGVyciA9IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMobmV0LCBhdHRyLCBrZXksIHNmYSwga2V5LVxcdTAwM2VldGgudHlwZSxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMzYyMC1cXHRcXHRcXHRcXHQgICAgIGtleS1cXHUwMDNlZXRoLnZsYW4udGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQzOjExLjc3MzY1MzIwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0Njg3NDgzNDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT3BlbiB2U3dpdGNoIE5ldGxpbmsgQWN0aW9uIFBhcnNpbmcgRml4KipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gYG5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuY2AsIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIHNvbWUgY3JpdGljYWwgZnVuY3Rpb25zOiBgdmFsaWRhdGVfYW5kX2NvcHlfc2FtcGxlYCwgYHZhbGlkYXRlX2FuZF9jb3B5X2RlY190dGxgLCBgdmFsaWRhdGVfYW5kX2NvcHlfY2xvbmVgLCBgdmFsaWRhdGVfYW5kX2NvcHlfc2V0X3R1bmAsIGB2YWxpZGF0ZV9zZXRgLCBgdmFsaWRhdGVfYW5kX2NvcHlfY2hlY2tfcGt0X2xlbmAsIGFuZCBjcml0aWNhbGx5LCBgX19vdnNfbmxhX2NvcHlfYWN0aW9uc2AuIFRoZXNlIGFyZSBhbGwgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGFuZCB2YWxpZGF0aW5nIE9wZW4gdlN3aXRjaCBhY3Rpb25zIHRoYXQgY29tZSBpbiB2aWEgbmV0bGluayBtZXNzYWdlcy5cblxuVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIGFyb3VuZCBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IGxlYWtzIGR1cmluZyBuZXN0ZWQgYWN0aW9uIHBhcnNpbmcuIEVzc2VudGlhbGx5LCBpZiB0aGluZ3MgZ28gd3Jvbmcgd2hpbGUgcGFyc2luZyBjb21wbGV4LCBuZXN0ZWQgYWN0aW9ucywgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgcmVzdWx0aW5nIGFjdGlvbiBsaXN0IGlzIHRydW5jYXRlZCBjb3JyZWN0bHkgYW5kIGFueSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyZWVkIHByb3Blcmx5LiBUaGlzIGlzIGEgc29saWQsIGZ1bmN0aW9uYWwgZml4LlxuXG5TaW5jZSB0aGlzIHRvdWNoZXMgdGhlIGNvcmUgT1ZTIG5ldGxpbmsgaW50ZXJmYWNlLCB3aGljaCBpcyBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLCBteSBpbnR1aXRpb24gaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBhIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSXTigJlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjYW4gZXhwb3NlIHN1YnRsZSBidWdzIHJlbGF0ZWQgdG8gbWFsZm9ybWVkIGlucHV0LiBUaGlzIGlzIGltcG9ydGFudDogdXNlcnNwYWNlIGlucHV0IHRvIGNvcmUgbG9naWMuXG5cblRoZXJlZm9yZSwgSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC4gSSBuZWVkIHRvIGJlIGZvY3VzZWQgb24gdGhvc2Uga2V5IGZ1bmN0aW9ucyBtZW50aW9uZWQgYWJvdmUuIEknbGwgZmxhZyB0aG9zZSBhcyB0aGUgYEZvY3VzU3ltYm9sc2AuIEFuZCBnaXZlbiB0aGlzIGlzIE9wZW4gdlN3aXRjaCBzcGVjaWZpYywgSeKAmWxsIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBgT1BFTlZTV0lUQ0hgIGNvbmZpZyBpcyBlbmFibGVkLiBJIG5lZWQgdG8gYmUgcmVhZHkgdG8gcnVuIGZ1enplciBvdmVyIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MTEsIk91dHB1dFRva2VucyI6MTk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQzOjU2LjQ2MTEzODgxM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc5NDQzNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmFsaWRhdGVfYW5kX2NvcHlfc2FtcGxlXCIsXG4gICAgXCJ2YWxpZGF0ZV9hbmRfY29weV9kZWNfdHRsXCIsXG4gICAgXCJ2YWxpZGF0ZV9hbmRfY29weV9jbG9uZVwiLFxuICAgIFwidmFsaWRhdGVfYW5kX2NvcHlfc2V0X3R1blwiLFxuICAgIFwidmFsaWRhdGVfc2V0XCIsXG4gICAgXCJ2YWxpZGF0ZV9hbmRfY29weV9jaGVja19wa3RfbGVuXCIsXG4gICAgXCJfX292c19ubGFfY29weV9hY3Rpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBsZWFrcyBpbiBPcGVuIHZTd2l0Y2ggbmV0bGluayBhY3Rpb24gcGFyc2luZyAoYF9fb3ZzX25sYV9jb3B5X2FjdGlvbnNgIGFuZCByZWxhdGVkIGB2YWxpZGF0ZV9hbmRfY29weV8qYCBmdW5jdGlvbnMpLiBJdCBlbnN1cmVzIHRoYXQgd2hlbiBuZXN0ZWQgYWN0aW9uIHBhcnNpbmcgZmFpbHMsIHRoZSBnZW5lcmF0ZWQgYWN0aW9uIGxpc3QgaXMgcHJvcGVybHkgdHJ1bmNhdGVkIGFuZCBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIE9WUyBsb2dpYyB0aGF0IHByb2Nlc3NlcyB1c2Vyc3BhY2UgaW5wdXQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2YWxpZGF0ZV9hbmRfY29weV9zYW1wbGVcIixcbiAgICBcInZhbGlkYXRlX2FuZF9jb3B5X2RlY190dGxcIixcbiAgICBcInZhbGlkYXRlX2FuZF9jb3B5X2Nsb25lXCIsXG4gICAgXCJ2YWxpZGF0ZV9hbmRfY29weV9zZXRfdHVuXCIsXG4gICAgXCJ2YWxpZGF0ZV9zZXRcIixcbiAgICBcInZhbGlkYXRlX2FuZF9jb3B5X2NoZWNrX3BrdF9sZW5cIixcbiAgICBcIl9fb3ZzX25sYV9jb3B5X2FjdGlvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IGxlYWtzIGluIE9wZW4gdlN3aXRjaCBuZXRsaW5rIGFjdGlvbiBwYXJzaW5nIChgX19vdnNfbmxhX2NvcHlfYWN0aW9uc2AgYW5kIHJlbGF0ZWQgYHZhbGlkYXRlX2FuZF9jb3B5XypgIGZ1bmN0aW9ucykuIEl0IGVuc3VyZXMgdGhhdCB3aGVuIG5lc3RlZCBhY3Rpb24gcGFyc2luZyBmYWlscywgdGhlIGdlbmVyYXRlZCBhY3Rpb24gbGlzdCBpcyBwcm9wZXJseSB0cnVuY2F0ZWQgYW5kIGZyZWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgT1ZTIGxvZ2ljIHRoYXQgcHJvY2Vzc2VzIHVzZXJzcGFjZSBpbnB1dCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmfb7f[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-06 13:12:19 +0000 UTC FinishedAt: 2026-07-06 13:43:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d7a8d500d7e42837bd8dce40cb52c97c6e8706a9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "net", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git", "commit_hash": "d7a8d500d7e42837bd8dce40cb52c97c6e8706a9", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "OPENVSWITCH" ], "series_id": "af025c52-5aab-4e59-8e36-060667fa2a57" }, "track": "KASAN", "fuzz": { "focus": [ "net" ], "focus_symbols": [ "validate_and_copy_sample", "validate_and_copy_dec_ttl", "validate_and_copy_clone", "validate_and_copy_set_tun", "validate_set", "validate_and_copy_check_pkt_len", "__ovs_nla_copy_actions" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O09QRU5WU1dJVENIJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7dmFsaWRhdGVfYW5kX2NvcHlfc2FtcGxlJiMzNDssCiAgICAmIzM0O3ZhbGlkYXRlX2FuZF9jb3B5X2RlY190dGwmIzM0OywKICAgICYjMzQ7dmFsaWRhdGVfYW5kX2NvcHlfY2xvbmUmIzM0OywKICAgICYjMzQ7dmFsaWRhdGVfYW5kX2NvcHlfc2V0X3R1biYjMzQ7LAogICAgJiMzNDt2YWxpZGF0ZV9zZXQmIzM0OywKICAgICYjMzQ7dmFsaWRhdGVfYW5kX2NvcHlfY2hlY2tfcGt0X2xlbiYjMzQ7LAogICAgJiMzNDtfX292c19ubGFfY29weV9hY3Rpb25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGVycm9yIGhhbmRsaW5nIGFuZCBtZW1vcnkgbGVha3MgaW4gT3BlbiB2U3dpdGNoIG5ldGxpbmsgYWN0aW9uIHBhcnNpbmcgKGBfX292c19ubGFfY29weV9hY3Rpb25zYCBhbmQgcmVsYXRlZCBgdmFsaWRhdGVfYW5kX2NvcHlfKmAgZnVuY3Rpb25zKS4gSXQgZW5zdXJlcyB0aGF0IHdoZW4gbmVzdGVkIGFjdGlvbiBwYXJzaW5nIGZhaWxzLCB0aGUgZ2VuZXJhdGVkIGFjdGlvbiBsaXN0IGlzIHByb3Blcmx5IHRydW5jYXRlZCBhbmQgZnJlZWQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBPVlMgbG9naWMgdGhhdCBwcm9jZXNzZXMgdXNlcnNwYWNlIGlucHV0LCBtYWtpbmcgaXQgaGlnaGx5IHJlbGV2YW50IGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQyPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNTRkZDM0NjI4Zjk3MzllNjczYTg1OWVjNjc0MzMyYzJjZWI5ODU0MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTM6NDI6MTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jXG5pbmRleCAxMzA1MjQwOGExMzJmNC4uZDgwNzlkZWU3MDBlZGMgMTAwNjQ0XG4tLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmNcbiYjNDM7JiM0MzsmIzQzOyBiL25ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuY1xuQEAgLTI0OTYsMTMgJiM0MzsyNDk2LDU2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFkZF9uZXN0ZWRfYWN0aW9uX3N0YXJ0KHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKipzZmEsXG4gXHRyZXR1cm4gdXNlZDtcbiB9XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIGFkZF9uZXN0ZWRfYWN0aW9uX2VuZChzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICpzZmEsXG4tXHRcdFx0XHRcdCBpbnQgc3Rfb2Zmc2V0KVxuJiM0MztzdGF0aWMgaW5saW5lIGludCBhZGRfbmVzdGVkX2FjdGlvbl9lbmQoc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqc2ZhLFxuJiM0MztcdFx0XHRcdFx0aW50IHN0X29mZnNldClcbiB7XG4tXHRzdHJ1Y3QgbmxhdHRyICphID0gKHN0cnVjdCBubGF0dHIgKikgKCh1bnNpZ25lZCBjaGFyICopc2ZhLVx1MDAzZWFjdGlvbnMgJiM0Mztcbi1cdFx0XHRcdFx0XHRcdCAgICAgICBzdF9vZmZzZXQpO1xuJiM0MztcdHN0cnVjdCBubGF0dHIgKmE7XG4mIzQzO1x0dTMyIGF0dHJfbGVuO1xuJiM0MztcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKHN0X29mZnNldCBcdTAwM2MgMCB8fFxuJiM0MztcdFx0XHQgKHUzMilzdF9vZmZzZXQgXHUwMDNlIHNmYS1cdTAwM2VhY3Rpb25zX2xlbikpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XG4mIzQzO1x0YXR0cl9sZW4gPSBzZmEtXHUwMDNlYWN0aW9uc19sZW4gLSAodTMyKXN0X29mZnNldDtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKGF0dHJfbGVuIFx1MDAzYyBOTEFfSERSTEVOKSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0YS1cdTAwM2VubGFfbGVuID0gc2ZhLVx1MDAzZWFjdGlvbnNfbGVuIC0gc3Rfb2Zmc2V0O1xuJiM0MztcdGlmIChhdHRyX2xlbiBcdTAwM2UgVTE2X01BWClcbiYjNDM7XHRcdHJldHVybiAtRU1TR1NJWkU7XG4mIzQzO1xuJiM0MztcdGEgPSAoc3RydWN0IG5sYXR0ciAqKSgodTggKilzZmEtXHUwMDNlYWN0aW9ucyAmIzQzOyBzdF9vZmZzZXQpO1xuJiM0MztcdGEtXHUwMDNlbmxhX2xlbiA9IGF0dHJfbGVuO1xuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBGcmVlIHRoZSBnZW5lcmF0ZWQgYWN0aW9uLWxpc3QgdGFpbCBhdCBAc3RhcnQgYW5kIHRydW5jYXRlIGl0LlxuJiM0MzsgKiBJZiBAbmVzdGVkLCBAc3RhcnQgcG9pbnRzIHRvIGl0cyBjb250YWluaW5nIG5sYXR0ciBoZWFkZXIuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBvdnNfbmxhX3RyaW0oc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqc2ZhLCBpbnQgc3RhcnQsIGJvb2wgbmVzdGVkKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG5sYXR0ciAqYWN0aW9ucztcbiYjNDM7XHR1MzIgbGVuO1xuJiM0MztcbiYjNDM7XHRpZiAoc3RhcnQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1xuJiM0MztcdGlmIChXQVJOX09OX09OQ0UoKHUzMilzdGFydCBcdTAwM2Ugc2ZhLVx1MDAzZWFjdGlvbnNfbGVuKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0YWN0aW9ucyA9IChjb25zdCBzdHJ1Y3QgbmxhdHRyICopKCh1OCAqKXNmYS1cdTAwM2VhY3Rpb25zICYjNDM7IHN0YXJ0KTtcbiYjNDM7XHRsZW4gPSBzZmEtXHUwMDNlYWN0aW9uc19sZW4gLSAodTMyKXN0YXJ0O1xuJiM0MztcbiYjNDM7XHRpZiAobmVzdGVkKSB7XG4mIzQzO1x0XHRpZiAobGVuIFx1MDAzYyBOTEFfSERSTEVOKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRhY3Rpb25zID0gKGNvbnN0IHN0cnVjdCBubGF0dHIgKikoKHU4ICopYWN0aW9ucyAmIzQzOyBOTEFfSERSTEVOKTtcbiYjNDM7XHRcdGxlbiAtPSBOTEFfSERSTEVOO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0b3ZzX25sYV9mcmVlX25lc3RlZF9hY3Rpb25zKGFjdGlvbnMsIGxlbik7XG4mIzQzO291dDpcbiYjNDM7XHRzZmEtXHUwMDNlYWN0aW9uc19sZW4gPSBzdGFydDtcbiB9XG4gXG4gc3RhdGljIGludCBfX292c19ubGFfY29weV9hY3Rpb25zKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbkBAIC0yNTIyLDYgJiM0MzsyNTY1LDcgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9zYW1wbGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cnNbT1ZTX1NBTVBMRV9BVFRSX01BWCAmIzQzOyAxXTtcbiBcdGNvbnN0IHN0cnVjdCBubGF0dHIgKnByb2JhYmlsaXR5LCAqYWN0aW9ucztcbiBcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmE7XG4mIzQzO1x0aW50IGFjdGlvbnNfc3RhcnQ7XG4gXHRpbnQgcmVtLCBzdGFydCwgZXJyO1xuIFx0c3RydWN0IHNhbXBsZV9hcmcgYXJnO1xuIFxuQEAgLTI1NjUsMTggJiM0MzsyNjA5LDI3IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfc2FtcGxlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbiBcdGVyciA9IG92c19ubGFfYWRkX2FjdGlvbihzZmEsIE9WU19TQU1QTEVfQVRUUl9BUkcsIFx1MDAyNmFyZywgc2l6ZW9mKGFyZyksXG4gXHRcdFx0XHQgbG9nKTtcbiBcdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHRnb3RvIGVycjtcbiBcbiYjNDM7XHRhY3Rpb25zX3N0YXJ0ID0gKCpzZmEpLVx1MDAzZWFjdGlvbnNfbGVuO1xuIFx0ZXJyID0gX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhuZXQsIGFjdGlvbnMsIGtleSwgc2ZhLFxuIFx0XHRcdFx0ICAgICBldGhfdHlwZSwgdmxhbl90Y2ksIG1wbHNfbGFiZWxfY291bnQsIGxvZyxcbiBcdFx0XHRcdCAgICAgZGVwdGggJiM0MzsgMSk7XG4gXG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0Z290byBlcnJfZnJlZTtcbiBcbi1cdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XG4mIzQzO1x0ZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZTtcbiBcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2ZyZWU6XG4mIzQzO1x0b3ZzX25sYV90cmltKCpzZmEsIGFjdGlvbnNfc3RhcnQsIGZhbHNlKTtcbiYjNDM7ZXJyOlxuJiM0MztcdCgqc2ZhKS1cdTAwM2VhY3Rpb25zX2xlbiA9IHN0YXJ0O1xuJiM0MztcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfZGVjX3R0bChzdHJ1Y3QgbmV0ICpuZXQsXG5AQCAtMjYyNCwxOCAmIzQzOzI2NzcsMzEgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9kZWNfdHRsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0cmV0dXJuIHN0YXJ0O1xuIFxuIFx0YWN0aW9uX3N0YXJ0ID0gYWRkX25lc3RlZF9hY3Rpb25fc3RhcnQoc2ZhLCBPVlNfREVDX1RUTF9BVFRSX0FDVElPTiwgbG9nKTtcbi1cdGlmIChhY3Rpb25fc3RhcnQgXHUwMDNjIDApXG4tXHRcdHJldHVybiBhY3Rpb25fc3RhcnQ7XG4mIzQzO1x0aWYgKGFjdGlvbl9zdGFydCBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZXJyID0gYWN0aW9uX3N0YXJ0O1xuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuIFxuIFx0ZXJyID0gX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhuZXQsIGFjdGlvbnMsIGtleSwgc2ZhLCBldGhfdHlwZSxcbiBcdFx0XHRcdCAgICAgdmxhbl90Y2ksIG1wbHNfbGFiZWxfY291bnQsIGxvZyxcbiBcdFx0XHRcdCAgICAgZGVwdGggJiM0MzsgMSk7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0Z290byBlcnJfZnJlZTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIGFjdGlvbl9zdGFydCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWU7XG4gXG4tXHRhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgYWN0aW9uX3N0YXJ0KTtcbi1cdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XG4mIzQzO1x0ZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZTtcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2ZyZWU6XG4mIzQzO1x0b3ZzX25sYV90cmltKCpzZmEsIGFjdGlvbl9zdGFydCwgdHJ1ZSk7XG4mIzQzO2VycjpcbiYjNDM7XHQoKnNmYSktXHUwMDNlYWN0aW9uc19sZW4gPSBzdGFydDtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X2Nsb25lKHN0cnVjdCBuZXQgKm5ldCxcbkBAIC0yNjQ2LDYgJiM0MzsyNzEyLDcgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9jbG9uZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRcdFx0XHQgICB1MzIgbXBsc19sYWJlbF9jb3VudCwgYm9vbCBsb2csIGJvb2wgbGFzdCxcbiBcdFx0XHRcdCAgIHUzMiBkZXB0aClcbiB7XG4mIzQzO1x0aW50IGFjdGlvbnNfc3RhcnQ7XG4gXHRpbnQgc3RhcnQsIGVycjtcbiBcdHUzMiBleGVjO1xuIFxuQEAgLTI2NjEsMTcgJiM0MzsyNzI4LDI2IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfY2xvbmUoc3RydWN0IG5ldCAqbmV0LFxuIFx0ZXJyID0gb3ZzX25sYV9hZGRfYWN0aW9uKHNmYSwgT1ZTX0NMT05FX0FUVFJfRVhFQywgXHUwMDI2ZXhlYyxcbiBcdFx0XHRcdCBzaXplb2YoZXhlYyksIGxvZyk7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0Z290byBlcnI7XG4gXG4mIzQzO1x0YWN0aW9uc19zdGFydCA9ICgqc2ZhKS1cdTAwM2VhY3Rpb25zX2xlbjtcbiBcdGVyciA9IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMobmV0LCBhdHRyLCBrZXksIHNmYSxcbiBcdFx0XHRcdCAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXG4gXHRcdFx0XHQgICAgIGRlcHRoICYjNDM7IDEpO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWU7XG4gXG4tXHRhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgc3RhcnQpO1xuJiM0MztcdGVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWU7XG4gXG4gXHRyZXR1cm4gMDtcbiYjNDM7XG4mIzQzO2Vycl9mcmVlOlxuJiM0MztcdG92c19ubGFfdHJpbSgqc2ZhLCBhY3Rpb25zX3N0YXJ0LCBmYWxzZSk7XG4mIzQzO2VycjpcbiYjNDM7XHQoKnNmYSktXHUwMDNlYWN0aW9uc19sZW4gPSBzdGFydDtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiB2b2lkIG92c19tYXRjaF9pbml0KHN0cnVjdCBzd19mbG93X21hdGNoICptYXRjaCxcbkBAIC0yNzYzLDIwICYjNDM7MjgzOSwyMCBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X3NldF90dW4oY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbiBcdHR1bl9kc3QgPSBtZXRhZGF0YV9kc3RfYWxsb2Moa2V5LnR1bl9vcHRzX2xlbiwgTUVUQURBVEFfSVBfVFVOTkVMLFxuIFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbiBcbi1cdGlmICghdHVuX2RzdClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4mIzQzO1x0aWYgKCF0dW5fZHN0KSB7XG4mIzQzO1x0XHRlcnIgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byBlcnI7XG4mIzQzO1x0fVxuIFxuIFx0ZXJyID0gZHN0X2NhY2hlX2luaXQoXHUwMDI2dHVuX2RzdC1cdTAwM2V1LnR1bl9pbmZvLmRzdF9jYWNoZSwgR0ZQX0tFUk5FTCk7XG4tXHRpZiAoZXJyKSB7XG4tXHRcdGRzdF9yZWxlYXNlKChzdHJ1Y3QgZHN0X2VudHJ5ICopdHVuX2RzdCk7XG4tXHRcdHJldHVybiBlcnI7XG4tXHR9XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfdHVuX2RzdDtcbiBcbiBcdGEgPSBfX2FkZF9hY3Rpb24oc2ZhLCBPVlNfS0VZX0FUVFJfVFVOTkVMX0lORk8sIE5VTEwsXG4gXHRcdFx0IHNpemVvZigqb3ZzX3R1biksIGxvZyk7XG4gXHRpZiAoSVNfRVJSKGEpKSB7XG4tXHRcdGRzdF9yZWxlYXNlKChzdHJ1Y3QgZHN0X2VudHJ5ICopdHVuX2RzdCk7XG4tXHRcdHJldHVybiBQVFJfRVJSKGEpO1xuJiM0MztcdFx0ZXJyID0gUFRSX0VSUihhKTtcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWVfdHVuX2RzdDtcbiBcdH1cbiBcbiBcdG92c190dW4gPSBubGFfZGF0YShhKTtcbkBAIC0yNzk3LDggJiM0MzsyODczLDE2IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfc2V0X3R1bihjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIFx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQodHVuX2luZm8sXG4gXHRcdFx0XHRUVU5fTUVUQURBVEFfT1BUUyhcdTAwMjZrZXksIGtleS50dW5fb3B0c19sZW4pLFxuIFx0XHRcdFx0a2V5LnR1bl9vcHRzX2xlbiwgZHN0X29wdF90eXBlKTtcbi1cdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XG4mIzQzO1x0ZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcbiYjNDM7XHRpZiAoV0FSTl9PTl9PTkNFKGVycikpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlX3R1bl9kc3Q7XG4mIzQzO1xuJiM0MztcdHJldHVybiAwO1xuIFxuJiM0MztlcnJfZnJlZV90dW5fZHN0OlxuJiM0MztcdGRzdF9yZWxlYXNlKChzdHJ1Y3QgZHN0X2VudHJ5ICopdHVuX2RzdCk7XG4mIzQzO2VycjpcbiYjNDM7XHQoKnNmYSktXHUwMDNlYWN0aW9uc19sZW4gPSBzdGFydDtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTI5NzEsNyAmIzQzOzMwNTUsNyBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX3NldChjb25zdCBzdHJ1Y3QgbmxhdHRyICphLFxuIFxuIFx0LyogQ29udmVydCBub24tbWFza2VkIG5vbi10dW5uZWwgc2V0IGFjdGlvbnMgdG8gbWFza2VkIHNldCBhY3Rpb25zLiAqL1xuIFx0aWYgKCFtYXNrZWQgXHUwMDI2XHUwMDI2IGtleV90eXBlICE9IE9WU19LRVlfQVRUUl9UVU5ORUwpIHtcbi1cdFx0aW50IHN0YXJ0LCBsZW4gPSBrZXlfbGVuICogMjtcbiYjNDM7XHRcdGludCBlcnIsIHN0YXJ0LCBsZW4gPSBrZXlfbGVuICogMjtcbiBcdFx0c3RydWN0IG5sYXR0ciAqYXQ7XG4gXG4gXHRcdCpza2lwX2NvcHkgPSB0cnVlO1xuQEAgLTI5ODMsOCAmIzQzOzMwNjcsMTEgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9zZXQoY29uc3Qgc3RydWN0IG5sYXR0ciAqYSxcbiBcdFx0XHRyZXR1cm4gc3RhcnQ7XG4gXG4gXHRcdGF0ID0gX19hZGRfYWN0aW9uKHNmYSwga2V5X3R5cGUsIE5VTEwsIGxlbiwgbG9nKTtcbi1cdFx0aWYgKElTX0VSUihhdCkpXG4tXHRcdFx0cmV0dXJuIFBUUl9FUlIoYXQpO1xuJiM0MztcdFx0aWYgKElTX0VSUihhdCkpIHtcbiYjNDM7XHRcdFx0ZXJyID0gUFRSX0VSUihhdCk7XG4mIzQzO1x0XHRcdCgqc2ZhKS1cdTAwM2VhY3Rpb25zX2xlbiA9IHN0YXJ0O1xuJiM0MztcdFx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0fVxuIFxuIFx0XHRtZW1jcHkobmxhX2RhdGEoYXQpLCBubGFfZGF0YShvdnNfa2V5KSwga2V5X2xlbik7IC8qIEtleS4gKi9cbiBcdFx0bWVtc2V0KG5sYV9kYXRhKGF0KSAmIzQzOyBrZXlfbGVuLCAweGZmLCBrZXlfbGVuKTsgICAgLyogTWFzay4gKi9cbkBAIC0yOTk0LDcgJiM0MzszMDgxLDExIEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfc2V0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmEsXG4gXG4gXHRcdFx0bWFzay1cdTAwM2VpcHY2X2xhYmVsIFx1MDAyNj0gaHRvbmwoMHgwMDBGRkZGRik7XG4gXHRcdH1cbi1cdFx0YWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcbiYjNDM7XHRcdGVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XG4mIzQzO1x0XHRpZiAoV0FSTl9PTl9PTkNFKGVycikpIHtcbiYjNDM7XHRcdFx0KCpzZmEpLVx1MDAzZWFjdGlvbnNfbGVuID0gc3RhcnQ7XG4mIzQzO1x0XHRcdHJldHVybiBlcnI7XG4mIzQzO1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0zMDQwLDcgJiM0MzszMTMxLDggQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9jaGVja19wa3RfbGVuKHN0cnVjdCBuZXQgKm5ldCxcbiBcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmFjdHNfaWZfZ3JlYXRlciwgKmFjdHNfaWZfbGVzc2VyX2VxO1xuIFx0c3RydWN0IG5sYXR0ciAqYVtPVlNfQ0hFQ0tfUEtUX0xFTl9BVFRSX01BWCAmIzQzOyAxXTtcbiBcdHN0cnVjdCBjaGVja19wa3RfbGVuX2FyZyBhcmc7XG4tXHRpbnQgbmVzdGVkX2FjdHNfc3RhcnQ7XG4mIzQzO1x0aW50IGdyZWF0ZXJfYWN0c19zdGFydCA9IC0xO1xuJiM0MztcdGludCBsZXNzZXJfYWN0c19zdGFydCA9IC0xO1xuIFx0aW50IHN0YXJ0LCBlcnI7XG4gXG4gXHRlcnIgPSBubGFfcGFyc2VfZGVwcmVjYXRlZF9zdHJpY3QoYSwgT1ZTX0NIRUNLX1BLVF9MRU5fQVRUUl9NQVgsXG5AQCAtMzA3NSwzNyAmIzQzOzMxNjcsNTggQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9jaGVja19wa3RfbGVuKHN0cnVjdCBuZXQgKm5ldCxcbiBcdGVyciA9IG92c19ubGFfYWRkX2FjdGlvbihzZmEsIE9WU19DSEVDS19QS1RfTEVOX0FUVFJfQVJHLCBcdTAwMjZhcmcsXG4gXHRcdFx0XHQgc2l6ZW9mKGFyZyksIGxvZyk7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0Z290byBlcnJfZnJlZTtcbiBcbi1cdG5lc3RlZF9hY3RzX3N0YXJ0ID0gYWRkX25lc3RlZF9hY3Rpb25fc3RhcnQoc2ZhLFxuLVx0XHRPVlNfQ0hFQ0tfUEtUX0xFTl9BVFRSX0FDVElPTlNfSUZfTEVTU19FUVVBTCwgbG9nKTtcbi1cdGlmIChuZXN0ZWRfYWN0c19zdGFydCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIG5lc3RlZF9hY3RzX3N0YXJ0O1xuJiM0MztcdGxlc3Nlcl9hY3RzX3N0YXJ0ID1cbiYjNDM7XHRcdGFkZF9uZXN0ZWRfYWN0aW9uX3N0YXJ0KHNmYSxcbiYjNDM7XHRcdFx0XHRcdE9WU19DSEVDS19QS1RfTEVOX0FUVFJfQUNUSU9OU19JRl9MRVNTX0VRVUFMLFxuJiM0MztcdFx0XHRcdFx0bG9nKTtcbiYjNDM7XHRpZiAobGVzc2VyX2FjdHNfc3RhcnQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGVyciA9IGxlc3Nlcl9hY3RzX3N0YXJ0O1xuJiM0MztcdFx0Z290byBlcnJfZnJlZTtcbiYjNDM7XHR9XG4gXG4gXHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYWN0c19pZl9sZXNzZXJfZXEsIGtleSwgc2ZhLFxuIFx0XHRcdFx0ICAgICBldGhfdHlwZSwgdmxhbl90Y2ksIG1wbHNfbGFiZWxfY291bnQsIGxvZyxcbiBcdFx0XHRcdCAgICAgZGVwdGggJiM0MzsgMSk7XG4gXG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuJiM0MztcdFx0Z290byBlcnJfZnJlZTtcbiBcbi1cdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBuZXN0ZWRfYWN0c19zdGFydCk7XG4mIzQzO1x0ZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIGxlc3Nlcl9hY3RzX3N0YXJ0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZTtcbiBcbi1cdG5lc3RlZF9hY3RzX3N0YXJ0ID0gYWRkX25lc3RlZF9hY3Rpb25fc3RhcnQoc2ZhLFxuLVx0XHRPVlNfQ0hFQ0tfUEtUX0xFTl9BVFRSX0FDVElPTlNfSUZfR1JFQVRFUiwgbG9nKTtcbi1cdGlmIChuZXN0ZWRfYWN0c19zdGFydCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIG5lc3RlZF9hY3RzX3N0YXJ0O1xuJiM0MztcdGdyZWF0ZXJfYWN0c19zdGFydCA9XG4mIzQzO1x0XHRhZGRfbmVzdGVkX2FjdGlvbl9zdGFydChzZmEsXG4mIzQzO1x0XHRcdFx0XHRPVlNfQ0hFQ0tfUEtUX0xFTl9BVFRSX0FDVElPTlNfSUZfR1JFQVRFUixcbiYjNDM7XHRcdFx0XHRcdGxvZyk7XG4mIzQzO1x0aWYgKGdyZWF0ZXJfYWN0c19zdGFydCBcdTAwM2MgMCkge1xuJiM0MztcdFx0ZXJyID0gZ3JlYXRlcl9hY3RzX3N0YXJ0O1xuJiM0MztcdFx0Z290byBlcnJfZnJlZTtcbiYjNDM7XHR9XG4gXG4gXHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYWN0c19pZl9ncmVhdGVyLCBrZXksIHNmYSxcbiBcdFx0XHRcdCAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXG4gXHRcdFx0XHQgICAgIGRlcHRoICYjNDM7IDEpO1xuIFxuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbiYjNDM7XHRcdGdvdG8gZXJyX2ZyZWU7XG4mIzQzO1xuJiM0MztcdGVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBncmVhdGVyX2FjdHNfc3RhcnQpO1xuJiM0MztcdGlmIChlcnIpXG4mIzQzO1x0XHRnb3RvIGVycl9mcmVlO1xuIFxuLVx0YWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIG5lc3RlZF9hY3RzX3N0YXJ0KTtcbi1cdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XG4mIzQzO1x0ZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcbiYjNDM7XHRpZiAoZXJyKVxuJiM0MztcdFx0Z290byBlcnJfZnJlZTtcbiBcdHJldHVybiAwO1xuJiM0MztcbiYjNDM7ZXJyX2ZyZWU6XG4mIzQzO1x0b3ZzX25sYV90cmltKCpzZmEsIGdyZWF0ZXJfYWN0c19zdGFydCwgdHJ1ZSk7XG4mIzQzO1x0b3ZzX25sYV90cmltKCpzZmEsIGxlc3Nlcl9hY3RzX3N0YXJ0LCB0cnVlKTtcbiYjNDM7XHRvdnNfbmxhX3RyaW0oKnNmYSwgc3RhcnQsIGZhbHNlKTtcbiYjNDM7XHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZhbGlkYXRlX3BzYW1wbGUoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxMzo0MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZhbGlkYXRlX2FuZF9jb3B5X3NhbXBsZSYjMzQ7LAogICAgJiMzNDt2YWxpZGF0ZV9hbmRfY29weV9kZWNfdHRsJiMzNDssCiAgICAmIzM0O3ZhbGlkYXRlX2FuZF9jb3B5X2Nsb25lJiMzNDssCiAgICAmIzM0O3ZhbGlkYXRlX2FuZF9jb3B5X3NldF90dW4mIzM0OywKICAgICYjMzQ7dmFsaWRhdGVfc2V0JiMzNDssCiAgICAmIzM0O3ZhbGlkYXRlX2FuZF9jb3B5X2NoZWNrX3BrdF9sZW4mIzM0OywKICAgICYjMzQ7X19vdnNfbmxhX2NvcHlfYWN0aW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IGxlYWtzIGluIE9wZW4gdlN3aXRjaCBuZXRsaW5rIGFjdGlvbiBwYXJzaW5nIChgX19vdnNfbmxhX2NvcHlfYWN0aW9uc2AgYW5kIHJlbGF0ZWQgYHZhbGlkYXRlX2FuZF9jb3B5XypgIGZ1bmN0aW9ucykuIEl0IGVuc3VyZXMgdGhhdCB3aGVuIG5lc3RlZCBhY3Rpb24gcGFyc2luZyBmYWlscywgdGhlIGdlbmVyYXRlZCBhY3Rpb24gbGlzdCBpcyBwcm9wZXJseSB0cnVuY2F0ZWQgYW5kIGZyZWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgT1ZTIGxvZ2ljIHRoYXQgcHJvY2Vzc2VzIHVzZXJzcGFjZSBpbnB1dCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNTRkZDM0NjI4Zjk3MzllNjczYTg1OWVjNjc0MzMyYzJjZWI5ODU0MApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBNb24gSnVsIDYgMTM6NDI6MTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMKaW5kZXggMTMwNTI0MDhhMTMyZjQuLmQ4MDc5ZGVlNzAwZWRjIDEwMDY0NAotLS0gYS9uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMKJiM0MzsmIzQzOyYjNDM7IGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jCkBAIC0yNDk2LDEzICYjNDM7MjQ5Niw1NiBAQCBzdGF0aWMgaW5saW5lIGludCBhZGRfbmVzdGVkX2FjdGlvbl9zdGFydChzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICoqc2ZhLAogCXJldHVybiB1c2VkOwogfQogCi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkX25lc3RlZF9hY3Rpb25fZW5kKHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKnNmYSwKLQkJCQkJIGludCBzdF9vZmZzZXQpCiYjNDM7c3RhdGljIGlubGluZSBpbnQgYWRkX25lc3RlZF9hY3Rpb25fZW5kKHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKnNmYSwKJiM0MzsJCQkJCWludCBzdF9vZmZzZXQpCiB7Ci0Jc3RydWN0IG5sYXR0ciAqYSA9IChzdHJ1Y3QgbmxhdHRyICopICgodW5zaWduZWQgY2hhciAqKXNmYS0mZ3Q7YWN0aW9ucyAmIzQzOwotCQkJCQkJCSAgICAgICBzdF9vZmZzZXQpOwomIzQzOwlzdHJ1Y3QgbmxhdHRyICphOwomIzQzOwl1MzIgYXR0cl9sZW47CiYjNDM7CiYjNDM7CWlmIChXQVJOX09OX09OQ0Uoc3Rfb2Zmc2V0ICZsdDsgMCB8fAomIzQzOwkJCSAodTMyKXN0X29mZnNldCAmZ3Q7IHNmYS0mZ3Q7YWN0aW9uc19sZW4pKQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CWF0dHJfbGVuID0gc2ZhLSZndDthY3Rpb25zX2xlbiAtICh1MzIpc3Rfb2Zmc2V0OwomIzQzOwlpZiAoV0FSTl9PTl9PTkNFKGF0dHJfbGVuICZsdDsgTkxBX0hEUkxFTikpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKIAotCWEtJmd0O25sYV9sZW4gPSBzZmEtJmd0O2FjdGlvbnNfbGVuIC0gc3Rfb2Zmc2V0OwomIzQzOwlpZiAoYXR0cl9sZW4gJmd0OyBVMTZfTUFYKQomIzQzOwkJcmV0dXJuIC1FTVNHU0laRTsKJiM0MzsKJiM0MzsJYSA9IChzdHJ1Y3QgbmxhdHRyICopKCh1OCAqKXNmYS0mZ3Q7YWN0aW9ucyAmIzQzOyBzdF9vZmZzZXQpOwomIzQzOwlhLSZndDtubGFfbGVuID0gYXR0cl9sZW47CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MzsvKiBGcmVlIHRoZSBnZW5lcmF0ZWQgYWN0aW9uLWxpc3QgdGFpbCBhdCBAc3RhcnQgYW5kIHRydW5jYXRlIGl0LgomIzQzOyAqIElmIEBuZXN0ZWQsIEBzdGFydCBwb2ludHMgdG8gaXRzIGNvbnRhaW5pbmcgbmxhdHRyIGhlYWRlci4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBvdnNfbmxhX3RyaW0oc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqc2ZhLCBpbnQgc3RhcnQsIGJvb2wgbmVzdGVkKQomIzQzO3sKJiM0MzsJY29uc3Qgc3RydWN0IG5sYXR0ciAqYWN0aW9uczsKJiM0MzsJdTMyIGxlbjsKJiM0MzsKJiM0MzsJaWYgKHN0YXJ0ICZsdDsgMCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJaWYgKFdBUk5fT05fT05DRSgodTMyKXN0YXJ0ICZndDsgc2ZhLSZndDthY3Rpb25zX2xlbikpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiYjNDM7CWFjdGlvbnMgPSAoY29uc3Qgc3RydWN0IG5sYXR0ciAqKSgodTggKilzZmEtJmd0O2FjdGlvbnMgJiM0Mzsgc3RhcnQpOwomIzQzOwlsZW4gPSBzZmEtJmd0O2FjdGlvbnNfbGVuIC0gKHUzMilzdGFydDsKJiM0MzsKJiM0MzsJaWYgKG5lc3RlZCkgewomIzQzOwkJaWYgKGxlbiAmbHQ7IE5MQV9IRFJMRU4pCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQlhY3Rpb25zID0gKGNvbnN0IHN0cnVjdCBubGF0dHIgKikoKHU4ICopYWN0aW9ucyAmIzQzOyBOTEFfSERSTEVOKTsKJiM0MzsJCWxlbiAtPSBOTEFfSERSTEVOOwomIzQzOwl9CiYjNDM7CiYjNDM7CW92c19ubGFfZnJlZV9uZXN0ZWRfYWN0aW9ucyhhY3Rpb25zLCBsZW4pOwomIzQzO291dDoKJiM0MzsJc2ZhLSZndDthY3Rpb25zX2xlbiA9IHN0YXJ0OwogfQogCiBzdGF0aWMgaW50IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLApAQCAtMjUyMiw2ICYjNDM7MjU2NSw3IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfc2FtcGxlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0ciwKIAljb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyc1tPVlNfU0FNUExFX0FUVFJfTUFYICYjNDM7IDFdOwogCWNvbnN0IHN0cnVjdCBubGF0dHIgKnByb2JhYmlsaXR5LCAqYWN0aW9uczsKIAljb25zdCBzdHJ1Y3QgbmxhdHRyICphOwomIzQzOwlpbnQgYWN0aW9uc19zdGFydDsKIAlpbnQgcmVtLCBzdGFydCwgZXJyOwogCXN0cnVjdCBzYW1wbGVfYXJnIGFyZzsKIApAQCAtMjU2NSwxOCAmIzQzOzI2MDksMjcgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9zYW1wbGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLAogCWVyciA9IG92c19ubGFfYWRkX2FjdGlvbihzZmEsIE9WU19TQU1QTEVfQVRUUl9BUkcsICZhbXA7YXJnLCBzaXplb2YoYXJnKSwKIAkJCQkgbG9nKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwomIzQzOwkJZ290byBlcnI7CiAKJiM0MzsJYWN0aW9uc19zdGFydCA9ICgqc2ZhKS0mZ3Q7YWN0aW9uc19sZW47CiAJZXJyID0gX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhuZXQsIGFjdGlvbnMsIGtleSwgc2ZhLAogCQkJCSAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csCiAJCQkJICAgICBkZXB0aCAmIzQzOyAxKTsKIAogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CiYjNDM7CQlnb3RvIGVycl9mcmVlOwogCi0JYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTsKJiM0MzsJZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWU7CiAKIAlyZXR1cm4gMDsKJiM0MzsKJiM0MztlcnJfZnJlZToKJiM0MzsJb3ZzX25sYV90cmltKCpzZmEsIGFjdGlvbnNfc3RhcnQsIGZhbHNlKTsKJiM0MztlcnI6CiYjNDM7CSgqc2ZhKS0mZ3Q7YWN0aW9uc19sZW4gPSBzdGFydDsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9kZWNfdHRsKHN0cnVjdCBuZXQgKm5ldCwKQEAgLTI2MjQsMTggJiM0MzsyNjc3LDMxIEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfZGVjX3R0bChzdHJ1Y3QgbmV0ICpuZXQsCiAJCXJldHVybiBzdGFydDsKIAogCWFjdGlvbl9zdGFydCA9IGFkZF9uZXN0ZWRfYWN0aW9uX3N0YXJ0KHNmYSwgT1ZTX0RFQ19UVExfQVRUUl9BQ1RJT04sIGxvZyk7Ci0JaWYgKGFjdGlvbl9zdGFydCAmbHQ7IDApCi0JCXJldHVybiBhY3Rpb25fc3RhcnQ7CiYjNDM7CWlmIChhY3Rpb25fc3RhcnQgJmx0OyAwKSB7CiYjNDM7CQllcnIgPSBhY3Rpb25fc3RhcnQ7CiYjNDM7CQlnb3RvIGVycjsKJiM0MzsJfQogCiAJZXJyID0gX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhuZXQsIGFjdGlvbnMsIGtleSwgc2ZhLCBldGhfdHlwZSwKIAkJCQkgICAgIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csCiAJCQkJICAgICBkZXB0aCAmIzQzOyAxKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwomIzQzOwkJZ290byBlcnJfZnJlZTsKJiM0MzsKJiM0MzsJZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIGFjdGlvbl9zdGFydCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl9mcmVlOwogCi0JYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIGFjdGlvbl9zdGFydCk7Ci0JYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTsKJiM0MzsJZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWU7CiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX2ZyZWU6CiYjNDM7CW92c19ubGFfdHJpbSgqc2ZhLCBhY3Rpb25fc3RhcnQsIHRydWUpOwomIzQzO2VycjoKJiM0MzsJKCpzZmEpLSZndDthY3Rpb25zX2xlbiA9IHN0YXJ0OwomIzQzOwlyZXR1cm4gZXJyOwogfQogCiBzdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X2Nsb25lKHN0cnVjdCBuZXQgKm5ldCwKQEAgLTI2NDYsNiAmIzQzOzI3MTIsNyBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X2Nsb25lKHN0cnVjdCBuZXQgKm5ldCwKIAkJCQkgICB1MzIgbXBsc19sYWJlbF9jb3VudCwgYm9vbCBsb2csIGJvb2wgbGFzdCwKIAkJCQkgICB1MzIgZGVwdGgpCiB7CiYjNDM7CWludCBhY3Rpb25zX3N0YXJ0OwogCWludCBzdGFydCwgZXJyOwogCXUzMiBleGVjOwogCkBAIC0yNjYxLDE3ICYjNDM7MjcyOCwyNiBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X2Nsb25lKHN0cnVjdCBuZXQgKm5ldCwKIAllcnIgPSBvdnNfbmxhX2FkZF9hY3Rpb24oc2ZhLCBPVlNfQ0xPTkVfQVRUUl9FWEVDLCAmYW1wO2V4ZWMsCiAJCQkJIHNpemVvZihleGVjKSwgbG9nKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwomIzQzOwkJZ290byBlcnI7CiAKJiM0MzsJYWN0aW9uc19zdGFydCA9ICgqc2ZhKS0mZ3Q7YWN0aW9uc19sZW47CiAJZXJyID0gX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhuZXQsIGF0dHIsIGtleSwgc2ZhLAogCQkJCSAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csCiAJCQkJICAgICBkZXB0aCAmIzQzOyAxKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwomIzQzOwkJZ290byBlcnJfZnJlZTsKIAotCWFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7CiYjNDM7CWVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7CiYjNDM7CWlmIChlcnIpCiYjNDM7CQlnb3RvIGVycl9mcmVlOwogCiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX2ZyZWU6CiYjNDM7CW92c19ubGFfdHJpbSgqc2ZhLCBhY3Rpb25zX3N0YXJ0LCBmYWxzZSk7CiYjNDM7ZXJyOgomIzQzOwkoKnNmYSktJmd0O2FjdGlvbnNfbGVuID0gc3RhcnQ7CiYjNDM7CXJldHVybiBlcnI7CiB9CiAKIHZvaWQgb3ZzX21hdGNoX2luaXQoc3RydWN0IHN3X2Zsb3dfbWF0Y2ggKm1hdGNoLApAQCAtMjc2MywyMCAmIzQzOzI4MzksMjAgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9zZXRfdHVuKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsCiAJdHVuX2RzdCA9IG1ldGFkYXRhX2RzdF9hbGxvYyhrZXkudHVuX29wdHNfbGVuLCBNRVRBREFUQV9JUF9UVU5ORUwsCiAJCQkJICAgICBHRlBfS0VSTkVMKTsKIAotCWlmICghdHVuX2RzdCkKLQkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CWlmICghdHVuX2RzdCkgewomIzQzOwkJZXJyID0gLUVOT01FTTsKJiM0MzsJCWdvdG8gZXJyOwomIzQzOwl9CiAKIAllcnIgPSBkc3RfY2FjaGVfaW5pdCgmYW1wO3R1bl9kc3QtJmd0O3UudHVuX2luZm8uZHN0X2NhY2hlLCBHRlBfS0VSTkVMKTsKLQlpZiAoZXJyKSB7Ci0JCWRzdF9yZWxlYXNlKChzdHJ1Y3QgZHN0X2VudHJ5ICopdHVuX2RzdCk7Ci0JCXJldHVybiBlcnI7Ci0JfQomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfZnJlZV90dW5fZHN0OwogCiAJYSA9IF9fYWRkX2FjdGlvbihzZmEsIE9WU19LRVlfQVRUUl9UVU5ORUxfSU5GTywgTlVMTCwKIAkJCSBzaXplb2YoKm92c190dW4pLCBsb2cpOwogCWlmIChJU19FUlIoYSkpIHsKLQkJZHN0X3JlbGVhc2UoKHN0cnVjdCBkc3RfZW50cnkgKil0dW5fZHN0KTsKLQkJcmV0dXJuIFBUUl9FUlIoYSk7CiYjNDM7CQllcnIgPSBQVFJfRVJSKGEpOwomIzQzOwkJZ290byBlcnJfZnJlZV90dW5fZHN0OwogCX0KIAogCW92c190dW4gPSBubGFfZGF0YShhKTsKQEAgLTI3OTcsOCAmIzQzOzI4NzMsMTYgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9zZXRfdHVuKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsCiAJaXBfdHVubmVsX2luZm9fb3B0c19zZXQodHVuX2luZm8sCiAJCQkJVFVOX01FVEFEQVRBX09QVFMoJmFtcDtrZXksIGtleS50dW5fb3B0c19sZW4pLAogCQkJCWtleS50dW5fb3B0c19sZW4sIGRzdF9vcHRfdHlwZSk7Ci0JYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTsKJiM0MzsJZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTsKJiM0MzsJaWYgKFdBUk5fT05fT05DRShlcnIpKQomIzQzOwkJZ290byBlcnJfZnJlZV90dW5fZHN0OwomIzQzOwomIzQzOwlyZXR1cm4gMDsKIAomIzQzO2Vycl9mcmVlX3R1bl9kc3Q6CiYjNDM7CWRzdF9yZWxlYXNlKChzdHJ1Y3QgZHN0X2VudHJ5ICopdHVuX2RzdCk7CiYjNDM7ZXJyOgomIzQzOwkoKnNmYSktJmd0O2FjdGlvbnNfbGVuID0gc3RhcnQ7CiAJcmV0dXJuIGVycjsKIH0KIApAQCAtMjk3MSw3ICYjNDM7MzA1NSw3IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfc2V0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmEsCiAKIAkvKiBDb252ZXJ0IG5vbi1tYXNrZWQgbm9uLXR1bm5lbCBzZXQgYWN0aW9ucyB0byBtYXNrZWQgc2V0IGFjdGlvbnMuICovCiAJaWYgKCFtYXNrZWQgJmFtcDsmYW1wOyBrZXlfdHlwZSAhPSBPVlNfS0VZX0FUVFJfVFVOTkVMKSB7Ci0JCWludCBzdGFydCwgbGVuID0ga2V5X2xlbiAqIDI7CiYjNDM7CQlpbnQgZXJyLCBzdGFydCwgbGVuID0ga2V5X2xlbiAqIDI7CiAJCXN0cnVjdCBubGF0dHIgKmF0OwogCiAJCSpza2lwX2NvcHkgPSB0cnVlOwpAQCAtMjk4Myw4ICYjNDM7MzA2NywxMSBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX3NldChjb25zdCBzdHJ1Y3QgbmxhdHRyICphLAogCQkJcmV0dXJuIHN0YXJ0OwogCiAJCWF0ID0gX19hZGRfYWN0aW9uKHNmYSwga2V5X3R5cGUsIE5VTEwsIGxlbiwgbG9nKTsKLQkJaWYgKElTX0VSUihhdCkpCi0JCQlyZXR1cm4gUFRSX0VSUihhdCk7CiYjNDM7CQlpZiAoSVNfRVJSKGF0KSkgewomIzQzOwkJCWVyciA9IFBUUl9FUlIoYXQpOwomIzQzOwkJCSgqc2ZhKS0mZ3Q7YWN0aW9uc19sZW4gPSBzdGFydDsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQogCiAJCW1lbWNweShubGFfZGF0YShhdCksIG5sYV9kYXRhKG92c19rZXkpLCBrZXlfbGVuKTsgLyogS2V5LiAqLwogCQltZW1zZXQobmxhX2RhdGEoYXQpICYjNDM7IGtleV9sZW4sIDB4ZmYsIGtleV9sZW4pOyAgICAvKiBNYXNrLiAqLwpAQCAtMjk5NCw3ICYjNDM7MzA4MSwxMSBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX3NldChjb25zdCBzdHJ1Y3QgbmxhdHRyICphLAogCiAJCQltYXNrLSZndDtpcHY2X2xhYmVsICZhbXA7PSBodG9ubCgweDAwMEZGRkZGKTsKIAkJfQotCQlhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgc3RhcnQpOwomIzQzOwkJZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTsKJiM0MzsJCWlmIChXQVJOX09OX09OQ0UoZXJyKSkgewomIzQzOwkJCSgqc2ZhKS0mZ3Q7YWN0aW9uc19sZW4gPSBzdGFydDsKJiM0MzsJCQlyZXR1cm4gZXJyOwomIzQzOwkJfQogCX0KIAogCXJldHVybiAwOwpAQCAtMzA0MCw3ICYjNDM7MzEzMSw4IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfY2hlY2tfcGt0X2xlbihzdHJ1Y3QgbmV0ICpuZXQsCiAJY29uc3Qgc3RydWN0IG5sYXR0ciAqYWN0c19pZl9ncmVhdGVyLCAqYWN0c19pZl9sZXNzZXJfZXE7CiAJc3RydWN0IG5sYXR0ciAqYVtPVlNfQ0hFQ0tfUEtUX0xFTl9BVFRSX01BWCAmIzQzOyAxXTsKIAlzdHJ1Y3QgY2hlY2tfcGt0X2xlbl9hcmcgYXJnOwotCWludCBuZXN0ZWRfYWN0c19zdGFydDsKJiM0MzsJaW50IGdyZWF0ZXJfYWN0c19zdGFydCA9IC0xOwomIzQzOwlpbnQgbGVzc2VyX2FjdHNfc3RhcnQgPSAtMTsKIAlpbnQgc3RhcnQsIGVycjsKIAogCWVyciA9IG5sYV9wYXJzZV9kZXByZWNhdGVkX3N0cmljdChhLCBPVlNfQ0hFQ0tfUEtUX0xFTl9BVFRSX01BWCwKQEAgLTMwNzUsMzcgJiM0MzszMTY3LDU4IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfY2hlY2tfcGt0X2xlbihzdHJ1Y3QgbmV0ICpuZXQsCiAJZXJyID0gb3ZzX25sYV9hZGRfYWN0aW9uKHNmYSwgT1ZTX0NIRUNLX1BLVF9MRU5fQVRUUl9BUkcsICZhbXA7YXJnLAogCQkJCSBzaXplb2YoYXJnKSwgbG9nKTsKIAlpZiAoZXJyKQotCQlyZXR1cm4gZXJyOwomIzQzOwkJZ290byBlcnJfZnJlZTsKIAotCW5lc3RlZF9hY3RzX3N0YXJ0ID0gYWRkX25lc3RlZF9hY3Rpb25fc3RhcnQoc2ZhLAotCQlPVlNfQ0hFQ0tfUEtUX0xFTl9BVFRSX0FDVElPTlNfSUZfTEVTU19FUVVBTCwgbG9nKTsKLQlpZiAobmVzdGVkX2FjdHNfc3RhcnQgJmx0OyAwKQotCQlyZXR1cm4gbmVzdGVkX2FjdHNfc3RhcnQ7CiYjNDM7CWxlc3Nlcl9hY3RzX3N0YXJ0ID0KJiM0MzsJCWFkZF9uZXN0ZWRfYWN0aW9uX3N0YXJ0KHNmYSwKJiM0MzsJCQkJCU9WU19DSEVDS19QS1RfTEVOX0FUVFJfQUNUSU9OU19JRl9MRVNTX0VRVUFMLAomIzQzOwkJCQkJbG9nKTsKJiM0MzsJaWYgKGxlc3Nlcl9hY3RzX3N0YXJ0ICZsdDsgMCkgewomIzQzOwkJZXJyID0gbGVzc2VyX2FjdHNfc3RhcnQ7CiYjNDM7CQlnb3RvIGVycl9mcmVlOwomIzQzOwl9CiAKIAllcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYWN0c19pZl9sZXNzZXJfZXEsIGtleSwgc2ZhLAogCQkJCSAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csCiAJCQkJICAgICBkZXB0aCAmIzQzOyAxKTsKIAogCWlmIChlcnIpCi0JCXJldHVybiBlcnI7CiYjNDM7CQlnb3RvIGVycl9mcmVlOwogCi0JYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIG5lc3RlZF9hY3RzX3N0YXJ0KTsKJiM0MzsJZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIGxlc3Nlcl9hY3RzX3N0YXJ0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWU7CiAKLQluZXN0ZWRfYWN0c19zdGFydCA9IGFkZF9uZXN0ZWRfYWN0aW9uX3N0YXJ0KHNmYSwKLQkJT1ZTX0NIRUNLX1BLVF9MRU5fQVRUUl9BQ1RJT05TX0lGX0dSRUFURVIsIGxvZyk7Ci0JaWYgKG5lc3RlZF9hY3RzX3N0YXJ0ICZsdDsgMCkKLQkJcmV0dXJuIG5lc3RlZF9hY3RzX3N0YXJ0OwomIzQzOwlncmVhdGVyX2FjdHNfc3RhcnQgPQomIzQzOwkJYWRkX25lc3RlZF9hY3Rpb25fc3RhcnQoc2ZhLAomIzQzOwkJCQkJT1ZTX0NIRUNLX1BLVF9MRU5fQVRUUl9BQ1RJT05TX0lGX0dSRUFURVIsCiYjNDM7CQkJCQlsb2cpOwomIzQzOwlpZiAoZ3JlYXRlcl9hY3RzX3N0YXJ0ICZsdDsgMCkgewomIzQzOwkJZXJyID0gZ3JlYXRlcl9hY3RzX3N0YXJ0OwomIzQzOwkJZ290byBlcnJfZnJlZTsKJiM0MzsJfQogCiAJZXJyID0gX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhuZXQsIGFjdHNfaWZfZ3JlYXRlciwga2V5LCBzZmEsCiAJCQkJICAgICBldGhfdHlwZSwgdmxhbl90Y2ksIG1wbHNfbGFiZWxfY291bnQsIGxvZywKIAkJCQkgICAgIGRlcHRoICYjNDM7IDEpOwogCiAJaWYgKGVycikKLQkJcmV0dXJuIGVycjsKJiM0MzsJCWdvdG8gZXJyX2ZyZWU7CiYjNDM7CiYjNDM7CWVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBncmVhdGVyX2FjdHNfc3RhcnQpOwomIzQzOwlpZiAoZXJyKQomIzQzOwkJZ290byBlcnJfZnJlZTsKIAotCWFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBuZXN0ZWRfYWN0c19zdGFydCk7Ci0JYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTsKJiM0MzsJZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCWdvdG8gZXJyX2ZyZWU7CiAJcmV0dXJuIDA7CiYjNDM7CiYjNDM7ZXJyX2ZyZWU6CiYjNDM7CW92c19ubGFfdHJpbSgqc2ZhLCBncmVhdGVyX2FjdHNfc3RhcnQsIHRydWUpOwomIzQzOwlvdnNfbmxhX3RyaW0oKnNmYSwgbGVzc2VyX2FjdHNfc3RhcnQsIHRydWUpOwomIzQzOwlvdnNfbmxhX3RyaW0oKnNmYSwgc3RhcnQsIGZhbHNlKTsKJiM0MzsJcmV0dXJuIGVycjsKIH0KIAogc3RhdGljIGludCB2YWxpZGF0ZV9wc2FtcGxlKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIpCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2OTkKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0MTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2ggaW4gT1ZTIE5ldGxpbmsgQWN0aW9uIFBhcnNpbmcqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIG92ZXIgdGhpcyBwYXRjaCBhcHBsaWVkIHRvIGBuZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmNgLCBhbmQgaXQmIzM5O3MgbWFraW5nIHNvbWUgY3JpdGljYWwgY2hhbmdlcyB0byBob3cgT1ZTIGhhbmRsZXMgbmV0bGluayBhY3Rpb25zLiBNeSBpbml0aWFsIGltcHJlc3Npb24/IFRoaXMgaXMgYSBzb2xpZCBwaWVjZSBvZiB3b3JrIHRoYXQgYWRkcmVzc2VzIHNvbWUgcG90ZW50aWFsIHZ1bG5lcmFiaWxpdGllcy4gU3BlY2lmaWNhbGx5LCBpdCBzZWVtcyB0byBiZSBmaXhpbmcgbWVtb3J5IGxlYWtzIGFuZCBpbnZhbGlkIHN0YXRlcyB0aGF0IGFyaXNlIHdoZW4gbmVzdGVkIGFjdGlvbiBwYXJzaW5nIGdvZXMgd3JvbmcuCgpUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgYWRkX25lc3RlZF9hY3Rpb25fZW5kYCBub3cgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgaW5zdGVhZCBvZiBiZWluZyB2b2lkLiBUaGF0JiMzOTtzIGEgZ29vZCBtb3ZlLCBnaXZpbmcgdGhlIGNhbGxlciBhIGNsZWFyIHNpZ25hbCBhYm91dCBzdWNjZXNzIG9yIGZhaWx1cmUuICBJdCBhbHNvIGluY2x1ZGVzIHRoZSBhZGRpdGlvbiBvZiBgb3ZzX25sYV90cmltYCwgd2hpY2ggaXMgZGVzaWduZWQgdG8gY2xlYW4gdXAgYW5kIHRydW5jYXRlIGFueSBwYXJ0aWFsbHkgYnVpbHQgYWN0aW9uIGxpc3RzIHdoZW4gdGhlcmUmIzM5O3MgYW4gZXJyb3IuICBUaGF0JiMzOTtzIHByZWNpc2VseSB3aGF0JiMzOTtzIG5lZWRlZCB0byBwcmV2ZW50IG1lbW9yeSBpc3N1ZXMuCgpUaGUgcGF0Y2ggdG91Y2hlcyBzZXZlcmFsIG90aGVyIGZ1bmN0aW9ucywgYW5kIEkgc2hvdWxkIHJlYWxseSB6ZXJvIGluIG9uIHRoZXNlIGZvciBhIGNsb3NlciBsb29rOiBgdmFsaWRhdGVfYW5kX2NvcHlfc2FtcGxlYCwgYHZhbGlkYXRlX2FuZF9jb3B5X2RlY190dGxgLCBgdmFsaWRhdGVfYW5kX2NvcHlfY2xvbmVgLCBgdmFsaWRhdGVfYW5kX2NvcHlfc2V0X3R1bmAsIGB2YWxpZGF0ZV9zZXRgLCBhbmQgYHZhbGlkYXRlX2FuZF9jb3B5X2NoZWNrX3BrdF9sZW5gLiAgVGhlIHBhdHRlcm4gaGVyZSBpcyB0aGF0IHRoZXkmIzM5O3JlIGFsbCBiZWluZyBtb2RpZmllZCB0byBwcm9wZXJseSBoYW5kbGUgZXJyb3JzIHRoYXQgbWlnaHQgY29tZSBmcm9tIGBhZGRfbmVzdGVkX2FjdGlvbl9lbmRgIGFuZCB0byB1c2UgYG92c19ubGFfdHJpbWAgb3IgdHJ1bmNhdGUgYGFjdGlvbnNfbGVuYCB0byBjbGVhbiB1cC4gIEl0JiMzOTtzIGFsbCBhYm91dCBlbnN1cmluZyB0aGF0IGV2ZW4gYSBmYWlsZWQgcGFyc2luZyBhdHRlbXB0IGRvZXNuJiMzOTt0IGxlYXZlIHRoZSBzeXN0ZW0gaW4gYSBjb3JydXB0ZWQgc3RhdGUuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIG1lYW5zIEkgc2hvdWxkIGRlZmluaXRlbHkgcHJpb3JpdGl6ZSBmdXp6aW5nIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiAgVGhlIGltcG9ydGFudCB0aGluZyBpcyBmaW5kaW5nIHRoZSBlbnRyeSBwb2ludHMuCgpJIHNlZSB0aGF0IHRoZXNlIG1vZGlmaWVkIGZ1bmN0aW9ucyBhcmUgYWxsIGNhbGxlZCBmcm9tIGBfX292c19ubGFfY29weV9hY3Rpb25zYCwgd2hpY2ggaXMgdGhlbiBjYWxsZWQgZnJvbSBgb3ZzX25sYV9jb3B5X2FjdGlvbnNgLiBBbmQgdGhhdCYjMzk7cyByZWFjaGFibGUgdmlhIG5ldGxpbmsgY29uZmlndXJhdGlvbiBvZiBPVlMgZmxvd3MuIEdvb2QuCgpJJiMzOTtsbCBxdWlja2x5IGNoZWNrIHRoZSBLY29uZmlnIGZvciBPcGVuIHZTd2l0Y2ggKGBuZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZ2ApIGFuZCBjb25maXJtIHRoYXQgYENPTkZJR19PUEVOVlNXSVRDSGAgaXMgZW5hYmxlZC4gVGltZSB0byB1c2UgbXkgdG9vbHMgdG8gdmVyaWZ5IHRoYXQgSSYjMzk7dmUgZm91bmQgYWxsIHRoZSBlbnRyeSBwb2ludHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE9QRU5WU1dJVENIJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OmNvbmZpZyBPUEVOVlNXSVRDSFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNy1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaFwmIzM0O1xuLS1cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTQzLVxubmV0L29wZW52c3dpdGNoL0tjb25maWc6NDQ6Y29uZmlnIE9QRU5WU1dJVENIX0dSRVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXHR0cmlzdGF0ZSBcJiMzNDtPcGVuIHZTd2l0Y2ggR1JFIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNTYtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTU4LVx0dHJpc3RhdGUgXCYjMzQ7T3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XCYjMzQ7XG4tLVxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo2OTpjb25maWcgT1BFTlZTV0lUQ0hfR0VORVZFXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03MC1cdHRyaXN0YXRlIFwmIzM0O09wZW4gdlN3aXRjaCBHZW5ldmUgdHVubmVsaW5nIHN1cHBvcnRcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wNiAxMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2ODgwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMTQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgT3BlbiB2U3dpdGNoIENvbmZpZ3VyYXRpb24qKgoKT2theSwgc28gdGhlIGNvbmZpZ3VyYXRpb24gSSYjMzk7bSBkZWFsaW5nIHdpdGggaGVyZSBpcyBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBgT1BFTlZTV0lUQ0hgLiBUaGF0JiMzOTtzIHRoZSBwcmltYXJ5IGZvY3VzLCB0aGUgYW5jaG9yLCBhcyBmYXIgYXMgSSBjYW4gc2VlLiBNeSBvYmplY3RpdmUgaXMgdG8gZGlzc2VjdCB0aGVzZSBwYXJ0aWN1bGFyIGZ1bmN0aW9ucyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBhY3Rpb24gaGFuZGxpbmcgYW5kIHZhbGlkYXRpb24gcm91dGluZXMgd2l0aGluIHRoaXMgY29uZmlndXJhdGlvbi4KClNwZWNpZmljYWxseSwgSSBuZWVkIHRvIHJlYWxseSBkaWcgaW50byBgdmFsaWRhdGVfYW5kX2NvcHlfc2FtcGxlYCwgYHZhbGlkYXRlX2FuZF9jb3B5X2RlY190dGxgLCBgdmFsaWRhdGVfYW5kX2NvcHlfY2xvbmVgLCBgdmFsaWRhdGVfYW5kX2NvcHlfc2V0X3R1bmAsIGB2YWxpZGF0ZV9zZXRgLCBgdmFsaWRhdGVfYW5kX2NvcHlfY2hlY2tfcGt0X2xlbmAsIGFuZCwgY3JpdGljYWxseSwgYF9fb3ZzX25sYV9jb3B5X2FjdGlvbnNgLiBNeSBndXQgdGVsbHMgbWUgYF9fb3ZzX25sYV9jb3B5X2FjdGlvbnNgIGlzIHRoZSBtb3N0IGltcG9ydGFudCBvZiB0aGUgYnVuY2guIFRoaXMgbGFzdCBvbmUgaXMgd2hlcmUgdGhlIGNvcmUgbG9naWMgb2YgYWN0aW9uIGNvcHlpbmcgcmVzaWRlcywgc28gdGhhdCB3aWxsIHRha2UgdGhlIG1vc3Qgc2NydXRpbnkuCgpCZWZvcmUgSSBnbyBhbnkgZnVydGhlciwgSSYjMzk7bGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgT1BFTlZTV0lUQ0hgIGlzIHRoZSBvbmx5IGFjdGl2ZSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55IG90aGVyIHJlbGV2YW50IGNvbnRleHRzLiBZZXAsIGl0JiMzOTtzIHRoZSBtYWluIG9uZSwgc28gSSYjMzk7bSBvbiB0aGUgcmlnaHQgdHJhY2suCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc3RhcnQgd2l0aCBhIGZvY3VzZWQgbG9vayBhdCBgX19vdnNfbmxhX2NvcHlfYWN0aW9uc2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O19fb3ZzX25sYV9jb3B5X2FjdGlvbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvb3BlbnZzd2l0Y2gmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jPTI1MjQ9c3RhdGljIHZvaWQgb3ZzX25sYV90cmltKHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKnNmYSwgaW50IHN0YXJ0LCBib29sIG5lc3RlZClcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMjU1MC1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYzoyNTUxOnN0YXRpYyBpbnQgX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMjU1Mi1cdFx0XHRcdCAgY29uc3Qgc3RydWN0IHN3X2Zsb3dfa2V5ICprZXksXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jPTI1NTg9c3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9zYW1wbGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0yNjE0LVx0YWN0aW9uc19zdGFydCA9ICgqc2ZhKS1cdTAwM2VhY3Rpb25zX2xlbjtcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYzoyNjE1Olx0ZXJyID0gX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhuZXQsIGFjdGlvbnMsIGtleSwgc2ZhLFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTI2MTYtXHRcdFx0XHQgICAgIGV0aF90eXBlLCB2bGFuX3RjaSwgbXBsc19sYWJlbF9jb3VudCwgbG9nLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYz0yNjM1PXN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfZGVjX3R0bChzdHJ1Y3QgbmV0ICpuZXQsXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTI2ODQtXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM6MjY4NTpcdGVyciA9IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMobmV0LCBhY3Rpb25zLCBrZXksIHNmYSwgZXRoX3R5cGUsXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMjY4Ni1cdFx0XHRcdCAgICAgdmxhbl90Y2ksIG1wbHNfbGFiZWxfY291bnQsIGxvZyxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM9MjcwNz1zdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X2Nsb25lKHN0cnVjdCBuZXQgKm5ldCxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMjczMy1cdGFjdGlvbnNfc3RhcnQgPSAoKnNmYSktXHUwMDNlYWN0aW9uc19sZW47XG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM6MjczNDpcdGVyciA9IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMobmV0LCBhdHRyLCBrZXksIHNmYSxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0yNzM1LVx0XHRcdFx0ICAgICBldGhfdHlwZSwgdmxhbl90Y2ksIG1wbHNfbGFiZWxfY291bnQsIGxvZyxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM9MzEyMz1zdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X2NoZWNrX3BrdF9sZW4oc3RydWN0IG5ldCAqbmV0LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0zMTgwLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jOjMxODE6XHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYWN0c19pZl9sZXNzZXJfZXEsIGtleSwgc2ZhLFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTMxODItXHRcdFx0XHQgICAgIGV0aF90eXBlLCB2bGFuX3RjaSwgbXBsc19sYWJlbF9jb3VudCwgbG9nLFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0zMjAwLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jOjMyMDE6XHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYWN0c19pZl9ncmVhdGVyLCBrZXksIHNmYSxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0zMjAyLVx0XHRcdFx0ICAgICBldGhfdHlwZSwgdmxhbl90Y2ksIG1wbHNfbGFiZWxfY291bnQsIGxvZyxcbi0tXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM9MzI0Nj1zdGF0aWMgaW50IGNvcHlfYWN0aW9uKGNvbnN0IHN0cnVjdCBubGF0dHIgKmZyb20sXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTMyNTktXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM6MzI2MDpzdGF0aWMgaW50IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTMyNjEtXHRcdFx0XHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxuLS1cbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYz0zNjA0PWludCBvdnNfbmxhX2NvcHlfYWN0aW9ucyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4tLVxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTM2MTgtXHQoKnNmYSktXHUwMDNlb3JpZ19sZW4gPSBubGFfbGVuKGF0dHIpO1xubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jOjM2MTk6XHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYXR0ciwga2V5LCBzZmEsIGtleS1cdTAwM2VldGgudHlwZSxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0zNjIwLVx0XHRcdFx0ICAgICBrZXktXHUwMDNlZXRoLnZsYW4udGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDYgMTM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUxMQoJCQkJCQkJb3V0cHV0OiAxOTcKCQkJCQkJCXRob3VnaHRzOiAzNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBPcGVuIHZTd2l0Y2ggTmV0bGluayBBY3Rpb24gUGFyc2luZyBGaXgqKgoKT2theSwgaGVyZSYjMzk7cyB3aGF0IEkmIzM5O20gdGhpbmtpbmcuIFRoaXMgcGF0Y2ggaXMgZm9jdXNlZCBvbiBgbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jYCwgc3BlY2lmaWNhbGx5IGFkZHJlc3Npbmcgc29tZSBjcml0aWNhbCBmdW5jdGlvbnM6IGB2YWxpZGF0ZV9hbmRfY29weV9zYW1wbGVgLCBgdmFsaWRhdGVfYW5kX2NvcHlfZGVjX3R0bGAsIGB2YWxpZGF0ZV9hbmRfY29weV9jbG9uZWAsIGB2YWxpZGF0ZV9hbmRfY29weV9zZXRfdHVuYCwgYHZhbGlkYXRlX3NldGAsIGB2YWxpZGF0ZV9hbmRfY29weV9jaGVja19wa3RfbGVuYCwgYW5kIGNyaXRpY2FsbHksIGBfX292c19ubGFfY29weV9hY3Rpb25zYC4gVGhlc2UgYXJlIGFsbCByZXNwb25zaWJsZSBmb3IgaGFuZGxpbmcgYW5kIHZhbGlkYXRpbmcgT3BlbiB2U3dpdGNoIGFjdGlvbnMgdGhhdCBjb21lIGluIHZpYSBuZXRsaW5rIG1lc3NhZ2VzLgoKVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIGFyb3VuZCBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IGxlYWtzIGR1cmluZyBuZXN0ZWQgYWN0aW9uIHBhcnNpbmcuIEVzc2VudGlhbGx5LCBpZiB0aGluZ3MgZ28gd3Jvbmcgd2hpbGUgcGFyc2luZyBjb21wbGV4LCBuZXN0ZWQgYWN0aW9ucywgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgcmVzdWx0aW5nIGFjdGlvbiBsaXN0IGlzIHRydW5jYXRlZCBjb3JyZWN0bHkgYW5kIGFueSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyZWVkIHByb3Blcmx5LiBUaGlzIGlzIGEgc29saWQsIGZ1bmN0aW9uYWwgZml4LgoKU2luY2UgdGhpcyB0b3VjaGVzIHRoZSBjb3JlIE9WUyBuZXRsaW5rIGludGVyZmFjZSwgd2hpY2ggaXMgZGlyZWN0bHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSwgbXkgaW50dWl0aW9uIGltbWVkaWF0ZWx5IGZsYWdzIHRoaXMgYXMgYSBjYW5kaWRhdGUgZm9yIGZ1enppbmcuIEl04oCZcyBleGFjdGx5IHRoZSBraW5kIG9mIHRoaW5nIHRoYXQgY2FuIGV4cG9zZSBzdWJ0bGUgYnVncyByZWxhdGVkIHRvIG1hbGZvcm1lZCBpbnB1dC4gVGhpcyBpcyBpbXBvcnRhbnQ6IHVzZXJzcGFjZSBpbnB1dCB0byBjb3JlIGxvZ2ljLgoKVGhlcmVmb3JlLCBJJiMzOTttIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC4gSSBuZWVkIHRvIGJlIGZvY3VzZWQgb24gdGhvc2Uga2V5IGZ1bmN0aW9ucyBtZW50aW9uZWQgYWJvdmUuIEkmIzM5O2xsIGZsYWcgdGhvc2UgYXMgdGhlIGBGb2N1c1N5bWJvbHNgLiBBbmQgZ2l2ZW4gdGhpcyBpcyBPcGVuIHZTd2l0Y2ggc3BlY2lmaWMsIEnigJlsbCBuZWVkIHRvIG1ha2Ugc3VyZSB0aGUgYE9QRU5WU1dJVENIYCBjb25maWcgaXMgZW5hYmxlZC4gSSBuZWVkIHRvIGJlIHJlYWR5IHRvIHJ1biBmdXp6ZXIgb3ZlciB0aGlzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA2IDEzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtPUEVOVlNXSVRDSCYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3ZhbGlkYXRlX2FuZF9jb3B5X3NhbXBsZSYjMzQ7LAogICAgJiMzNDt2YWxpZGF0ZV9hbmRfY29weV9kZWNfdHRsJiMzNDssCiAgICAmIzM0O3ZhbGlkYXRlX2FuZF9jb3B5X2Nsb25lJiMzNDssCiAgICAmIzM0O3ZhbGlkYXRlX2FuZF9jb3B5X3NldF90dW4mIzM0OywKICAgICYjMzQ7dmFsaWRhdGVfc2V0JiMzNDssCiAgICAmIzM0O3ZhbGlkYXRlX2FuZF9jb3B5X2NoZWNrX3BrdF9sZW4mIzM0OywKICAgICYjMzQ7X19vdnNfbmxhX2NvcHlfYWN0aW9ucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IGxlYWtzIGluIE9wZW4gdlN3aXRjaCBuZXRsaW5rIGFjdGlvbiBwYXJzaW5nIChgX19vdnNfbmxhX2NvcHlfYWN0aW9uc2AgYW5kIHJlbGF0ZWQgYHZhbGlkYXRlX2FuZF9jb3B5XypgIGZ1bmN0aW9ucykuIEl0IGVuc3VyZXMgdGhhdCB3aGVuIG5lc3RlZCBhY3Rpb24gcGFyc2luZyBmYWlscywgdGhlIGdlbmVyYXRlZCBhY3Rpb24gbGlzdCBpcyBwcm9wZXJseSB0cnVuY2F0ZWQgYW5kIGZyZWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgT1ZTIGxvZ2ljIHRoYXQgcHJvY2Vzc2VzIHVzZXJzcGFjZSBpbnB1dCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7T1BFTlZTV0lUQ0gmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt2YWxpZGF0ZV9hbmRfY29weV9zYW1wbGUmIzM0OywKICAgICYjMzQ7dmFsaWRhdGVfYW5kX2NvcHlfZGVjX3R0bCYjMzQ7LAogICAgJiMzNDt2YWxpZGF0ZV9hbmRfY29weV9jbG9uZSYjMzQ7LAogICAgJiMzNDt2YWxpZGF0ZV9hbmRfY29weV9zZXRfdHVuJiMzNDssCiAgICAmIzM0O3ZhbGlkYXRlX3NldCYjMzQ7LAogICAgJiMzNDt2YWxpZGF0ZV9hbmRfY29weV9jaGVja19wa3RfbGVuJiMzNDssCiAgICAmIzM0O19fb3ZzX25sYV9jb3B5X2FjdGlvbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBsZWFrcyBpbiBPcGVuIHZTd2l0Y2ggbmV0bGluayBhY3Rpb24gcGFyc2luZyAoYF9fb3ZzX25sYV9jb3B5X2FjdGlvbnNgIGFuZCByZWxhdGVkIGB2YWxpZGF0ZV9hbmRfY29weV8qYCBmdW5jdGlvbnMpLiBJdCBlbnN1cmVzIHRoYXQgd2hlbiBuZXN0ZWQgYWN0aW9uIHBhcnNpbmcgZmFpbHMsIHRoZSBnZW5lcmF0ZWQgYWN0aW9uIGxpc3QgaXMgcHJvcGVybHkgdHJ1bmNhdGVkIGFuZCBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIE9WUyBsb2dpYyB0aGF0IHByb2Nlc3NlcyB1c2Vyc3BhY2UgaW5wdXQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0MjoxMy44ODgwNDkwNjhaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI2NTEwNDUzNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2YWxpZGF0ZV9hbmRfY29weV9zYW1wbGVcIixcbiAgICBcInZhbGlkYXRlX2FuZF9jb3B5X2RlY190dGxcIixcbiAgICBcInZhbGlkYXRlX2FuZF9jb3B5X2Nsb25lXCIsXG4gICAgXCJ2YWxpZGF0ZV9hbmRfY29weV9zZXRfdHVuXCIsXG4gICAgXCJ2YWxpZGF0ZV9zZXRcIixcbiAgICBcInZhbGlkYXRlX2FuZF9jb3B5X2NoZWNrX3BrdF9sZW5cIixcbiAgICBcIl9fb3ZzX25sYV9jb3B5X2FjdGlvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IGxlYWtzIGluIE9wZW4gdlN3aXRjaCBuZXRsaW5rIGFjdGlvbiBwYXJzaW5nIChgX19vdnNfbmxhX2NvcHlfYWN0aW9uc2AgYW5kIHJlbGF0ZWQgYHZhbGlkYXRlX2FuZF9jb3B5XypgIGZ1bmN0aW9ucykuIEl0IGVuc3VyZXMgdGhhdCB3aGVuIG5lc3RlZCBhY3Rpb24gcGFyc2luZyBmYWlscywgdGhlIGdlbmVyYXRlZCBhY3Rpb24gbGlzdCBpcyBwcm9wZXJseSB0cnVuY2F0ZWQgYW5kIGZyZWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgT1ZTIGxvZ2ljIHRoYXQgcHJvY2Vzc2VzIHVzZXJzcGFjZSBpbnB1dCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDI6MTMuODg4MDg1NDM3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1OTI3MzUzOTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA1NGRkMzQ2MjhmOTczOWU2NzNhODU5ZWM2NzQzMzJjMmNlYjk4NTQwXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBNb24gSnVsIDYgMTM6NDI6MTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jXFxuaW5kZXggMTMwNTI0MDhhMTMyZjQuLmQ4MDc5ZGVlNzAwZWRjIDEwMDY0NFxcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuY1xcbisrKyBiL25ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuY1xcbkBAIC0yNDk2LDEzICsyNDk2LDU2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGFkZF9uZXN0ZWRfYWN0aW9uX3N0YXJ0KHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKipzZmEsXFxuIFxcdHJldHVybiB1c2VkO1xcbiB9XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgYWRkX25lc3RlZF9hY3Rpb25fZW5kKHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKnNmYSxcXG4tXFx0XFx0XFx0XFx0XFx0IGludCBzdF9vZmZzZXQpXFxuK3N0YXRpYyBpbmxpbmUgaW50IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZChzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICpzZmEsXFxuK1xcdFxcdFxcdFxcdFxcdGludCBzdF9vZmZzZXQpXFxuIHtcXG4tXFx0c3RydWN0IG5sYXR0ciAqYSA9IChzdHJ1Y3QgbmxhdHRyICopICgodW5zaWduZWQgY2hhciAqKXNmYS1cXHUwMDNlYWN0aW9ucyArXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdF9vZmZzZXQpO1xcbitcXHRzdHJ1Y3QgbmxhdHRyICphO1xcbitcXHR1MzIgYXR0cl9sZW47XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKHN0X29mZnNldCBcXHUwMDNjIDAgfHxcXG4rXFx0XFx0XFx0ICh1MzIpc3Rfb2Zmc2V0IFxcdTAwM2Ugc2ZhLVxcdTAwM2VhY3Rpb25zX2xlbikpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXG4rXFx0YXR0cl9sZW4gPSBzZmEtXFx1MDAzZWFjdGlvbnNfbGVuIC0gKHUzMilzdF9vZmZzZXQ7XFxuK1xcdGlmIChXQVJOX09OX09OQ0UoYXR0cl9sZW4gXFx1MDAzYyBOTEFfSERSTEVOKSlcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuIFxcbi1cXHRhLVxcdTAwM2VubGFfbGVuID0gc2ZhLVxcdTAwM2VhY3Rpb25zX2xlbiAtIHN0X29mZnNldDtcXG4rXFx0aWYgKGF0dHJfbGVuIFxcdTAwM2UgVTE2X01BWClcXG4rXFx0XFx0cmV0dXJuIC1FTVNHU0laRTtcXG4rXFxuK1xcdGEgPSAoc3RydWN0IG5sYXR0ciAqKSgodTggKilzZmEtXFx1MDAzZWFjdGlvbnMgKyBzdF9vZmZzZXQpO1xcbitcXHRhLVxcdTAwM2VubGFfbGVuID0gYXR0cl9sZW47XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbisvKiBGcmVlIHRoZSBnZW5lcmF0ZWQgYWN0aW9uLWxpc3QgdGFpbCBhdCBAc3RhcnQgYW5kIHRydW5jYXRlIGl0LlxcbisgKiBJZiBAbmVzdGVkLCBAc3RhcnQgcG9pbnRzIHRvIGl0cyBjb250YWluaW5nIG5sYXR0ciBoZWFkZXIuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBvdnNfbmxhX3RyaW0oc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqc2ZhLCBpbnQgc3RhcnQsIGJvb2wgbmVzdGVkKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmFjdGlvbnM7XFxuK1xcdHUzMiBsZW47XFxuK1xcbitcXHRpZiAoc3RhcnQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcbitcXHRpZiAoV0FSTl9PTl9PTkNFKCh1MzIpc3RhcnQgXFx1MDAzZSBzZmEtXFx1MDAzZWFjdGlvbnNfbGVuKSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0YWN0aW9ucyA9IChjb25zdCBzdHJ1Y3QgbmxhdHRyICopKCh1OCAqKXNmYS1cXHUwMDNlYWN0aW9ucyArIHN0YXJ0KTtcXG4rXFx0bGVuID0gc2ZhLVxcdTAwM2VhY3Rpb25zX2xlbiAtICh1MzIpc3RhcnQ7XFxuK1xcbitcXHRpZiAobmVzdGVkKSB7XFxuK1xcdFxcdGlmIChsZW4gXFx1MDAzYyBOTEFfSERSTEVOKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdFxcdGFjdGlvbnMgPSAoY29uc3Qgc3RydWN0IG5sYXR0ciAqKSgodTggKilhY3Rpb25zICsgTkxBX0hEUkxFTik7XFxuK1xcdFxcdGxlbiAtPSBOTEFfSERSTEVOO1xcbitcXHR9XFxuK1xcbitcXHRvdnNfbmxhX2ZyZWVfbmVzdGVkX2FjdGlvbnMoYWN0aW9ucywgbGVuKTtcXG4rb3V0OlxcbitcXHRzZmEtXFx1MDAzZWFjdGlvbnNfbGVuID0gc3RhcnQ7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuQEAgLTI1MjIsNiArMjU2NSw3IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfc2FtcGxlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4gXFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cnNbT1ZTX1NBTVBMRV9BVFRSX01BWCArIDFdO1xcbiBcXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICpwcm9iYWJpbGl0eSwgKmFjdGlvbnM7XFxuIFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmE7XFxuK1xcdGludCBhY3Rpb25zX3N0YXJ0O1xcbiBcXHRpbnQgcmVtLCBzdGFydCwgZXJyO1xcbiBcXHRzdHJ1Y3Qgc2FtcGxlX2FyZyBhcmc7XFxuIFxcbkBAIC0yNTY1LDE4ICsyNjA5LDI3IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfc2FtcGxlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4gXFx0ZXJyID0gb3ZzX25sYV9hZGRfYWN0aW9uKHNmYSwgT1ZTX1NBTVBMRV9BVFRSX0FSRywgXFx1MDAyNmFyZywgc2l6ZW9mKGFyZyksXFxuIFxcdFxcdFxcdFxcdCBsb2cpO1xcbiBcXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRnb3RvIGVycjtcXG4gXFxuK1xcdGFjdGlvbnNfc3RhcnQgPSAoKnNmYSktXFx1MDAzZWFjdGlvbnNfbGVuO1xcbiBcXHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYWN0aW9ucywga2V5LCBzZmEsXFxuIFxcdFxcdFxcdFxcdCAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXFxuIFxcdFxcdFxcdFxcdCAgICAgZGVwdGggKyAxKTtcXG4gXFxuIFxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIFxcbi1cXHRhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgc3RhcnQpO1xcbitcXHRlcnIgPSBhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgc3RhcnQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlO1xcbiBcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfZnJlZTpcXG4rXFx0b3ZzX25sYV90cmltKCpzZmEsIGFjdGlvbnNfc3RhcnQsIGZhbHNlKTtcXG4rZXJyOlxcbitcXHQoKnNmYSktXFx1MDAzZWFjdGlvbnNfbGVuID0gc3RhcnQ7XFxuK1xcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfZGVjX3R0bChzdHJ1Y3QgbmV0ICpuZXQsXFxuQEAgLTI2MjQsMTggKzI2NzcsMzEgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9kZWNfdHRsKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0XFx0cmV0dXJuIHN0YXJ0O1xcbiBcXG4gXFx0YWN0aW9uX3N0YXJ0ID0gYWRkX25lc3RlZF9hY3Rpb25fc3RhcnQoc2ZhLCBPVlNfREVDX1RUTF9BVFRSX0FDVElPTiwgbG9nKTtcXG4tXFx0aWYgKGFjdGlvbl9zdGFydCBcXHUwMDNjIDApXFxuLVxcdFxcdHJldHVybiBhY3Rpb25fc3RhcnQ7XFxuK1xcdGlmIChhY3Rpb25fc3RhcnQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGVyciA9IGFjdGlvbl9zdGFydDtcXG4rXFx0XFx0Z290byBlcnI7XFxuK1xcdH1cXG4gXFxuIFxcdGVyciA9IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMobmV0LCBhY3Rpb25zLCBrZXksIHNmYSwgZXRoX3R5cGUsXFxuIFxcdFxcdFxcdFxcdCAgICAgdmxhbl90Y2ksIG1wbHNfbGFiZWxfY291bnQsIGxvZyxcXG4gXFx0XFx0XFx0XFx0ICAgICBkZXB0aCArIDEpO1xcbiBcXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRnb3RvIGVycl9mcmVlO1xcbitcXG4rXFx0ZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIGFjdGlvbl9zdGFydCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIFxcbi1cXHRhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgYWN0aW9uX3N0YXJ0KTtcXG4tXFx0YWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcXG4rXFx0ZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4gXFx0cmV0dXJuIDA7XFxuK1xcbitlcnJfZnJlZTpcXG4rXFx0b3ZzX25sYV90cmltKCpzZmEsIGFjdGlvbl9zdGFydCwgdHJ1ZSk7XFxuK2VycjpcXG4rXFx0KCpzZmEpLVxcdTAwM2VhY3Rpb25zX2xlbiA9IHN0YXJ0O1xcbitcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbiBzdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X2Nsb25lKHN0cnVjdCBuZXQgKm5ldCxcXG5AQCAtMjY0Niw2ICsyNzEyLDcgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9jbG9uZShzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdFxcdFxcdFxcdCAgIHUzMiBtcGxzX2xhYmVsX2NvdW50LCBib29sIGxvZywgYm9vbCBsYXN0LFxcbiBcXHRcXHRcXHRcXHQgICB1MzIgZGVwdGgpXFxuIHtcXG4rXFx0aW50IGFjdGlvbnNfc3RhcnQ7XFxuIFxcdGludCBzdGFydCwgZXJyO1xcbiBcXHR1MzIgZXhlYztcXG4gXFxuQEAgLTI2NjEsMTcgKzI3MjgsMjYgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9jbG9uZShzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdGVyciA9IG92c19ubGFfYWRkX2FjdGlvbihzZmEsIE9WU19DTE9ORV9BVFRSX0VYRUMsIFxcdTAwMjZleGVjLFxcbiBcXHRcXHRcXHRcXHQgc2l6ZW9mKGV4ZWMpLCBsb2cpO1xcbiBcXHRpZiAoZXJyKVxcbi1cXHRcXHRyZXR1cm4gZXJyO1xcbitcXHRcXHRnb3RvIGVycjtcXG4gXFxuK1xcdGFjdGlvbnNfc3RhcnQgPSAoKnNmYSktXFx1MDAzZWFjdGlvbnNfbGVuO1xcbiBcXHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYXR0ciwga2V5LCBzZmEsXFxuIFxcdFxcdFxcdFxcdCAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXFxuIFxcdFxcdFxcdFxcdCAgICAgZGVwdGggKyAxKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4gXFxuLVxcdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XFxuK1xcdGVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIFxcbiBcXHRyZXR1cm4gMDtcXG4rXFxuK2Vycl9mcmVlOlxcbitcXHRvdnNfbmxhX3RyaW0oKnNmYSwgYWN0aW9uc19zdGFydCwgZmFsc2UpO1xcbitlcnI6XFxuK1xcdCgqc2ZhKS1cXHUwMDNlYWN0aW9uc19sZW4gPSBzdGFydDtcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gdm9pZCBvdnNfbWF0Y2hfaW5pdChzdHJ1Y3Qgc3dfZmxvd19tYXRjaCAqbWF0Y2gsXFxuQEAgLTI3NjMsMjAgKzI4MzksMjAgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9zZXRfdHVuKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuIFxcdHR1bl9kc3QgPSBtZXRhZGF0YV9kc3RfYWxsb2Moa2V5LnR1bl9vcHRzX2xlbiwgTUVUQURBVEFfSVBfVFVOTkVMLFxcbiBcXHRcXHRcXHRcXHQgICAgIEdGUF9LRVJORUwpO1xcbiBcXG4tXFx0aWYgKCF0dW5fZHN0KVxcbi1cXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4rXFx0aWYgKCF0dW5fZHN0KSB7XFxuK1xcdFxcdGVyciA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gZXJyO1xcbitcXHR9XFxuIFxcbiBcXHRlcnIgPSBkc3RfY2FjaGVfaW5pdChcXHUwMDI2dHVuX2RzdC1cXHUwMDNldS50dW5faW5mby5kc3RfY2FjaGUsIEdGUF9LRVJORUwpO1xcbi1cXHRpZiAoZXJyKSB7XFxuLVxcdFxcdGRzdF9yZWxlYXNlKChzdHJ1Y3QgZHN0X2VudHJ5ICopdHVuX2RzdCk7XFxuLVxcdFxcdHJldHVybiBlcnI7XFxuLVxcdH1cXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfZnJlZV90dW5fZHN0O1xcbiBcXG4gXFx0YSA9IF9fYWRkX2FjdGlvbihzZmEsIE9WU19LRVlfQVRUUl9UVU5ORUxfSU5GTywgTlVMTCxcXG4gXFx0XFx0XFx0IHNpemVvZigqb3ZzX3R1biksIGxvZyk7XFxuIFxcdGlmIChJU19FUlIoYSkpIHtcXG4tXFx0XFx0ZHN0X3JlbGVhc2UoKHN0cnVjdCBkc3RfZW50cnkgKil0dW5fZHN0KTtcXG4tXFx0XFx0cmV0dXJuIFBUUl9FUlIoYSk7XFxuK1xcdFxcdGVyciA9IFBUUl9FUlIoYSk7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWVfdHVuX2RzdDtcXG4gXFx0fVxcbiBcXG4gXFx0b3ZzX3R1biA9IG5sYV9kYXRhKGEpO1xcbkBAIC0yNzk3LDggKzI4NzMsMTYgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9zZXRfdHVuKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxuIFxcdGlwX3R1bm5lbF9pbmZvX29wdHNfc2V0KHR1bl9pbmZvLFxcbiBcXHRcXHRcXHRcXHRUVU5fTUVUQURBVEFfT1BUUyhcXHUwMDI2a2V5LCBrZXkudHVuX29wdHNfbGVuKSxcXG4gXFx0XFx0XFx0XFx0a2V5LnR1bl9vcHRzX2xlbiwgZHN0X29wdF90eXBlKTtcXG4tXFx0YWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcXG4rXFx0ZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcXG4rXFx0aWYgKFdBUk5fT05fT05DRShlcnIpKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlX3R1bl9kc3Q7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4gXFxuK2Vycl9mcmVlX3R1bl9kc3Q6XFxuK1xcdGRzdF9yZWxlYXNlKChzdHJ1Y3QgZHN0X2VudHJ5ICopdHVuX2RzdCk7XFxuK2VycjpcXG4rXFx0KCpzZmEpLVxcdTAwM2VhY3Rpb25zX2xlbiA9IHN0YXJ0O1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbkBAIC0yOTcxLDcgKzMwNTUsNyBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX3NldChjb25zdCBzdHJ1Y3QgbmxhdHRyICphLFxcbiBcXG4gXFx0LyogQ29udmVydCBub24tbWFza2VkIG5vbi10dW5uZWwgc2V0IGFjdGlvbnMgdG8gbWFza2VkIHNldCBhY3Rpb25zLiAqL1xcbiBcXHRpZiAoIW1hc2tlZCBcXHUwMDI2XFx1MDAyNiBrZXlfdHlwZSAhPSBPVlNfS0VZX0FUVFJfVFVOTkVMKSB7XFxuLVxcdFxcdGludCBzdGFydCwgbGVuID0ga2V5X2xlbiAqIDI7XFxuK1xcdFxcdGludCBlcnIsIHN0YXJ0LCBsZW4gPSBrZXlfbGVuICogMjtcXG4gXFx0XFx0c3RydWN0IG5sYXR0ciAqYXQ7XFxuIFxcbiBcXHRcXHQqc2tpcF9jb3B5ID0gdHJ1ZTtcXG5AQCAtMjk4Myw4ICszMDY3LDExIEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfc2V0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmEsXFxuIFxcdFxcdFxcdHJldHVybiBzdGFydDtcXG4gXFxuIFxcdFxcdGF0ID0gX19hZGRfYWN0aW9uKHNmYSwga2V5X3R5cGUsIE5VTEwsIGxlbiwgbG9nKTtcXG4tXFx0XFx0aWYgKElTX0VSUihhdCkpXFxuLVxcdFxcdFxcdHJldHVybiBQVFJfRVJSKGF0KTtcXG4rXFx0XFx0aWYgKElTX0VSUihhdCkpIHtcXG4rXFx0XFx0XFx0ZXJyID0gUFRSX0VSUihhdCk7XFxuK1xcdFxcdFxcdCgqc2ZhKS1cXHUwMDNlYWN0aW9uc19sZW4gPSBzdGFydDtcXG4rXFx0XFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0fVxcbiBcXG4gXFx0XFx0bWVtY3B5KG5sYV9kYXRhKGF0KSwgbmxhX2RhdGEob3ZzX2tleSksIGtleV9sZW4pOyAvKiBLZXkuICovXFxuIFxcdFxcdG1lbXNldChubGFfZGF0YShhdCkgKyBrZXlfbGVuLCAweGZmLCBrZXlfbGVuKTsgICAgLyogTWFzay4gKi9cXG5AQCAtMjk5NCw3ICszMDgxLDExIEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfc2V0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmEsXFxuIFxcbiBcXHRcXHRcXHRtYXNrLVxcdTAwM2VpcHY2X2xhYmVsIFxcdTAwMjY9IGh0b25sKDB4MDAwRkZGRkYpO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XFxuK1xcdFxcdGVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XFxuK1xcdFxcdGlmIChXQVJOX09OX09OQ0UoZXJyKSkge1xcbitcXHRcXHRcXHQoKnNmYSktXFx1MDAzZWFjdGlvbnNfbGVuID0gc3RhcnQ7XFxuK1xcdFxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdH1cXG4gXFx0fVxcbiBcXG4gXFx0cmV0dXJuIDA7XFxuQEAgLTMwNDAsNyArMzEzMSw4IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfY2hlY2tfcGt0X2xlbihzdHJ1Y3QgbmV0ICpuZXQsXFxuIFxcdGNvbnN0IHN0cnVjdCBubGF0dHIgKmFjdHNfaWZfZ3JlYXRlciwgKmFjdHNfaWZfbGVzc2VyX2VxO1xcbiBcXHRzdHJ1Y3QgbmxhdHRyICphW09WU19DSEVDS19QS1RfTEVOX0FUVFJfTUFYICsgMV07XFxuIFxcdHN0cnVjdCBjaGVja19wa3RfbGVuX2FyZyBhcmc7XFxuLVxcdGludCBuZXN0ZWRfYWN0c19zdGFydDtcXG4rXFx0aW50IGdyZWF0ZXJfYWN0c19zdGFydCA9IC0xO1xcbitcXHRpbnQgbGVzc2VyX2FjdHNfc3RhcnQgPSAtMTtcXG4gXFx0aW50IHN0YXJ0LCBlcnI7XFxuIFxcbiBcXHRlcnIgPSBubGFfcGFyc2VfZGVwcmVjYXRlZF9zdHJpY3QoYSwgT1ZTX0NIRUNLX1BLVF9MRU5fQVRUUl9NQVgsXFxuQEAgLTMwNzUsMzcgKzMxNjcsNTggQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9jaGVja19wa3RfbGVuKHN0cnVjdCBuZXQgKm5ldCxcXG4gXFx0ZXJyID0gb3ZzX25sYV9hZGRfYWN0aW9uKHNmYSwgT1ZTX0NIRUNLX1BLVF9MRU5fQVRUUl9BUkcsIFxcdTAwMjZhcmcsXFxuIFxcdFxcdFxcdFxcdCBzaXplb2YoYXJnKSwgbG9nKTtcXG4gXFx0aWYgKGVycilcXG4tXFx0XFx0cmV0dXJuIGVycjtcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4gXFxuLVxcdG5lc3RlZF9hY3RzX3N0YXJ0ID0gYWRkX25lc3RlZF9hY3Rpb25fc3RhcnQoc2ZhLFxcbi1cXHRcXHRPVlNfQ0hFQ0tfUEtUX0xFTl9BVFRSX0FDVElPTlNfSUZfTEVTU19FUVVBTCwgbG9nKTtcXG4tXFx0aWYgKG5lc3RlZF9hY3RzX3N0YXJ0IFxcdTAwM2MgMClcXG4tXFx0XFx0cmV0dXJuIG5lc3RlZF9hY3RzX3N0YXJ0O1xcbitcXHRsZXNzZXJfYWN0c19zdGFydCA9XFxuK1xcdFxcdGFkZF9uZXN0ZWRfYWN0aW9uX3N0YXJ0KHNmYSxcXG4rXFx0XFx0XFx0XFx0XFx0T1ZTX0NIRUNLX1BLVF9MRU5fQVRUUl9BQ1RJT05TX0lGX0xFU1NfRVFVQUwsXFxuK1xcdFxcdFxcdFxcdFxcdGxvZyk7XFxuK1xcdGlmIChsZXNzZXJfYWN0c19zdGFydCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZXJyID0gbGVzc2VyX2FjdHNfc3RhcnQ7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuK1xcdH1cXG4gXFxuIFxcdGVyciA9IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMobmV0LCBhY3RzX2lmX2xlc3Nlcl9lcSwga2V5LCBzZmEsXFxuIFxcdFxcdFxcdFxcdCAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXFxuIFxcdFxcdFxcdFxcdCAgICAgZGVwdGggKyAxKTtcXG4gXFxuIFxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIFxcbi1cXHRhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgbmVzdGVkX2FjdHNfc3RhcnQpO1xcbitcXHRlcnIgPSBhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgbGVzc2VyX2FjdHNfc3RhcnQpO1xcbitcXHRpZiAoZXJyKVxcbitcXHRcXHRnb3RvIGVycl9mcmVlO1xcbiBcXG4tXFx0bmVzdGVkX2FjdHNfc3RhcnQgPSBhZGRfbmVzdGVkX2FjdGlvbl9zdGFydChzZmEsXFxuLVxcdFxcdE9WU19DSEVDS19QS1RfTEVOX0FUVFJfQUNUSU9OU19JRl9HUkVBVEVSLCBsb2cpO1xcbi1cXHRpZiAobmVzdGVkX2FjdHNfc3RhcnQgXFx1MDAzYyAwKVxcbi1cXHRcXHRyZXR1cm4gbmVzdGVkX2FjdHNfc3RhcnQ7XFxuK1xcdGdyZWF0ZXJfYWN0c19zdGFydCA9XFxuK1xcdFxcdGFkZF9uZXN0ZWRfYWN0aW9uX3N0YXJ0KHNmYSxcXG4rXFx0XFx0XFx0XFx0XFx0T1ZTX0NIRUNLX1BLVF9MRU5fQVRUUl9BQ1RJT05TX0lGX0dSRUFURVIsXFxuK1xcdFxcdFxcdFxcdFxcdGxvZyk7XFxuK1xcdGlmIChncmVhdGVyX2FjdHNfc3RhcnQgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGVyciA9IGdyZWF0ZXJfYWN0c19zdGFydDtcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4rXFx0fVxcbiBcXG4gXFx0ZXJyID0gX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhuZXQsIGFjdHNfaWZfZ3JlYXRlciwga2V5LCBzZmEsXFxuIFxcdFxcdFxcdFxcdCAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXFxuIFxcdFxcdFxcdFxcdCAgICAgZGVwdGggKyAxKTtcXG4gXFxuIFxcdGlmIChlcnIpXFxuLVxcdFxcdHJldHVybiBlcnI7XFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuK1xcbitcXHRlcnIgPSBhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgZ3JlYXRlcl9hY3RzX3N0YXJ0KTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0Z290byBlcnJfZnJlZTtcXG4gXFxuLVxcdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBuZXN0ZWRfYWN0c19zdGFydCk7XFxuLVxcdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XFxuK1xcdGVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XFxuK1xcdGlmIChlcnIpXFxuK1xcdFxcdGdvdG8gZXJyX2ZyZWU7XFxuIFxcdHJldHVybiAwO1xcbitcXG4rZXJyX2ZyZWU6XFxuK1xcdG92c19ubGFfdHJpbSgqc2ZhLCBncmVhdGVyX2FjdHNfc3RhcnQsIHRydWUpO1xcbitcXHRvdnNfbmxhX3RyaW0oKnNmYSwgbGVzc2VyX2FjdHNfc3RhcnQsIHRydWUpO1xcbitcXHRvdnNfbmxhX3RyaW0oKnNmYSwgc3RhcnQsIGZhbHNlKTtcXG4rXFx0cmV0dXJuIGVycjtcXG4gfVxcbiBcXG4gc3RhdGljIGludCB2YWxpZGF0ZV9wc2FtcGxlKGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQyOjE0LjQ4MTgzNzA3OVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTAyMDU3MjQ5MjgwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmFsaWRhdGVfYW5kX2NvcHlfc2FtcGxlXCIsXG4gICAgXCJ2YWxpZGF0ZV9hbmRfY29weV9kZWNfdHRsXCIsXG4gICAgXCJ2YWxpZGF0ZV9hbmRfY29weV9jbG9uZVwiLFxuICAgIFwidmFsaWRhdGVfYW5kX2NvcHlfc2V0X3R1blwiLFxuICAgIFwidmFsaWRhdGVfc2V0XCIsXG4gICAgXCJ2YWxpZGF0ZV9hbmRfY29weV9jaGVja19wa3RfbGVuXCIsXG4gICAgXCJfX292c19ubGFfY29weV9hY3Rpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBsZWFrcyBpbiBPcGVuIHZTd2l0Y2ggbmV0bGluayBhY3Rpb24gcGFyc2luZyAoYF9fb3ZzX25sYV9jb3B5X2FjdGlvbnNgIGFuZCByZWxhdGVkIGB2YWxpZGF0ZV9hbmRfY29weV8qYCBmdW5jdGlvbnMpLiBJdCBlbnN1cmVzIHRoYXQgd2hlbiBuZXN0ZWQgYWN0aW9uIHBhcnNpbmcgZmFpbHMsIHRoZSBnZW5lcmF0ZWQgYWN0aW9uIGxpc3QgaXMgcHJvcGVybHkgdHJ1bmNhdGVkIGFuZCBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIE9WUyBsb2dpYyB0aGF0IHByb2Nlc3NlcyB1c2Vyc3BhY2UgaW5wdXQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNTRkZDM0NjI4Zjk3MzllNjczYTg1OWVjNjc0MzMyYzJjZWI5ODU0MFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVsIDYgMTM6NDI6MTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMgYi9uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmNcbmluZGV4IDEzMDUyNDA4YTEzMmY0Li5kODA3OWRlZTcwMGVkYyAxMDA2NDRcbi0tLSBhL25ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuY1xuKysrIGIvbmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jXG5AQCAtMjQ5NiwxMyArMjQ5Niw1NiBAQCBzdGF0aWMgaW5saW5lIGludCBhZGRfbmVzdGVkX2FjdGlvbl9zdGFydChzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICoqc2ZhLFxuIFx0cmV0dXJuIHVzZWQ7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCBhZGRfbmVzdGVkX2FjdGlvbl9lbmQoc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqc2ZhLFxuLVx0XHRcdFx0XHQgaW50IHN0X29mZnNldClcbitzdGF0aWMgaW5saW5lIGludCBhZGRfbmVzdGVkX2FjdGlvbl9lbmQoc3RydWN0IHN3X2Zsb3dfYWN0aW9ucyAqc2ZhLFxuK1x0XHRcdFx0XHRpbnQgc3Rfb2Zmc2V0KVxuIHtcbi1cdHN0cnVjdCBubGF0dHIgKmEgPSAoc3RydWN0IG5sYXR0ciAqKSAoKHVuc2lnbmVkIGNoYXIgKilzZmEtXHUwMDNlYWN0aW9ucyArXG4tXHRcdFx0XHRcdFx0XHQgICAgICAgc3Rfb2Zmc2V0KTtcbitcdHN0cnVjdCBubGF0dHIgKmE7XG4rXHR1MzIgYXR0cl9sZW47XG4rXG4rXHRpZiAoV0FSTl9PTl9PTkNFKHN0X29mZnNldCBcdTAwM2MgMCB8fFxuK1x0XHRcdCAodTMyKXN0X29mZnNldCBcdTAwM2Ugc2ZhLVx1MDAzZWFjdGlvbnNfbGVuKSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRhdHRyX2xlbiA9IHNmYS1cdTAwM2VhY3Rpb25zX2xlbiAtICh1MzIpc3Rfb2Zmc2V0O1xuK1x0aWYgKFdBUk5fT05fT05DRShhdHRyX2xlbiBcdTAwM2MgTkxBX0hEUkxFTikpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuIFxuLVx0YS1cdTAwM2VubGFfbGVuID0gc2ZhLVx1MDAzZWFjdGlvbnNfbGVuIC0gc3Rfb2Zmc2V0O1xuK1x0aWYgKGF0dHJfbGVuIFx1MDAzZSBVMTZfTUFYKVxuK1x0XHRyZXR1cm4gLUVNU0dTSVpFO1xuK1xuK1x0YSA9IChzdHJ1Y3QgbmxhdHRyICopKCh1OCAqKXNmYS1cdTAwM2VhY3Rpb25zICsgc3Rfb2Zmc2V0KTtcbitcdGEtXHUwMDNlbmxhX2xlbiA9IGF0dHJfbGVuO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuKy8qIEZyZWUgdGhlIGdlbmVyYXRlZCBhY3Rpb24tbGlzdCB0YWlsIGF0IEBzdGFydCBhbmQgdHJ1bmNhdGUgaXQuXG4rICogSWYgQG5lc3RlZCwgQHN0YXJ0IHBvaW50cyB0byBpdHMgY29udGFpbmluZyBubGF0dHIgaGVhZGVyLlxuKyAqL1xuK3N0YXRpYyB2b2lkIG92c19ubGFfdHJpbShzdHJ1Y3Qgc3dfZmxvd19hY3Rpb25zICpzZmEsIGludCBzdGFydCwgYm9vbCBuZXN0ZWQpXG4re1xuK1x0Y29uc3Qgc3RydWN0IG5sYXR0ciAqYWN0aW9ucztcbitcdHUzMiBsZW47XG4rXG4rXHRpZiAoc3RhcnQgXHUwMDNjIDApXG4rXHRcdHJldHVybjtcbitcbitcdGlmIChXQVJOX09OX09OQ0UoKHUzMilzdGFydCBcdTAwM2Ugc2ZhLVx1MDAzZWFjdGlvbnNfbGVuKSlcbitcdFx0cmV0dXJuO1xuK1xuK1x0YWN0aW9ucyA9IChjb25zdCBzdHJ1Y3QgbmxhdHRyICopKCh1OCAqKXNmYS1cdTAwM2VhY3Rpb25zICsgc3RhcnQpO1xuK1x0bGVuID0gc2ZhLVx1MDAzZWFjdGlvbnNfbGVuIC0gKHUzMilzdGFydDtcbitcbitcdGlmIChuZXN0ZWQpIHtcbitcdFx0aWYgKGxlbiBcdTAwM2MgTkxBX0hEUkxFTilcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0YWN0aW9ucyA9IChjb25zdCBzdHJ1Y3QgbmxhdHRyICopKCh1OCAqKWFjdGlvbnMgKyBOTEFfSERSTEVOKTtcbitcdFx0bGVuIC09IE5MQV9IRFJMRU47XG4rXHR9XG4rXG4rXHRvdnNfbmxhX2ZyZWVfbmVzdGVkX2FjdGlvbnMoYWN0aW9ucywgbGVuKTtcbitvdXQ6XG4rXHRzZmEtXHUwMDNlYWN0aW9uc19sZW4gPSBzdGFydDtcbiB9XG4gXG4gc3RhdGljIGludCBfX292c19ubGFfY29weV9hY3Rpb25zKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbkBAIC0yNTIyLDYgKzI1NjUsNyBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X3NhbXBsZShzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXG4gXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyc1tPVlNfU0FNUExFX0FUVFJfTUFYICsgMV07XG4gXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICpwcm9iYWJpbGl0eSwgKmFjdGlvbnM7XG4gXHRjb25zdCBzdHJ1Y3QgbmxhdHRyICphO1xuK1x0aW50IGFjdGlvbnNfc3RhcnQ7XG4gXHRpbnQgcmVtLCBzdGFydCwgZXJyO1xuIFx0c3RydWN0IHNhbXBsZV9hcmcgYXJnO1xuIFxuQEAgLTI1NjUsMTggKzI2MDksMjcgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9zYW1wbGUoc3RydWN0IG5ldCAqbmV0LCBjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIFx0ZXJyID0gb3ZzX25sYV9hZGRfYWN0aW9uKHNmYSwgT1ZTX1NBTVBMRV9BVFRSX0FSRywgXHUwMDI2YXJnLCBzaXplb2YoYXJnKSxcbiBcdFx0XHRcdCBsb2cpO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbitcdFx0Z290byBlcnI7XG4gXG4rXHRhY3Rpb25zX3N0YXJ0ID0gKCpzZmEpLVx1MDAzZWFjdGlvbnNfbGVuO1xuIFx0ZXJyID0gX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhuZXQsIGFjdGlvbnMsIGtleSwgc2ZhLFxuIFx0XHRcdFx0ICAgICBldGhfdHlwZSwgdmxhbl90Y2ksIG1wbHNfbGFiZWxfY291bnQsIGxvZyxcbiBcdFx0XHRcdCAgICAgZGVwdGggKyAxKTtcbiBcbiBcdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4rXHRcdGdvdG8gZXJyX2ZyZWU7XG4gXG4tXHRhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgc3RhcnQpO1xuK1x0ZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyX2ZyZWU7XG4gXG4gXHRyZXR1cm4gMDtcbitcbitlcnJfZnJlZTpcbitcdG92c19ubGFfdHJpbSgqc2ZhLCBhY3Rpb25zX3N0YXJ0LCBmYWxzZSk7XG4rZXJyOlxuK1x0KCpzZmEpLVx1MDAzZWFjdGlvbnNfbGVuID0gc3RhcnQ7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X2RlY190dGwoc3RydWN0IG5ldCAqbmV0LFxuQEAgLTI2MjQsMTggKzI2NzcsMzEgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9kZWNfdHRsKHN0cnVjdCBuZXQgKm5ldCxcbiBcdFx0cmV0dXJuIHN0YXJ0O1xuIFxuIFx0YWN0aW9uX3N0YXJ0ID0gYWRkX25lc3RlZF9hY3Rpb25fc3RhcnQoc2ZhLCBPVlNfREVDX1RUTF9BVFRSX0FDVElPTiwgbG9nKTtcbi1cdGlmIChhY3Rpb25fc3RhcnQgXHUwMDNjIDApXG4tXHRcdHJldHVybiBhY3Rpb25fc3RhcnQ7XG4rXHRpZiAoYWN0aW9uX3N0YXJ0IFx1MDAzYyAwKSB7XG4rXHRcdGVyciA9IGFjdGlvbl9zdGFydDtcbitcdFx0Z290byBlcnI7XG4rXHR9XG4gXG4gXHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYWN0aW9ucywga2V5LCBzZmEsIGV0aF90eXBlLFxuIFx0XHRcdFx0ICAgICB2bGFuX3RjaSwgbXBsc19sYWJlbF9jb3VudCwgbG9nLFxuIFx0XHRcdFx0ICAgICBkZXB0aCArIDEpO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbitcdFx0Z290byBlcnJfZnJlZTtcbitcbitcdGVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBhY3Rpb25fc3RhcnQpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfZnJlZTtcbiBcbi1cdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBhY3Rpb25fc3RhcnQpO1xuLVx0YWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcbitcdGVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9mcmVlO1xuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX2ZyZWU6XG4rXHRvdnNfbmxhX3RyaW0oKnNmYSwgYWN0aW9uX3N0YXJ0LCB0cnVlKTtcbitlcnI6XG4rXHQoKnNmYSktXHUwMDNlYWN0aW9uc19sZW4gPSBzdGFydDtcbitcdHJldHVybiBlcnI7XG4gfVxuIFxuIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfY2xvbmUoc3RydWN0IG5ldCAqbmV0LFxuQEAgLTI2NDYsNiArMjcxMiw3IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfY2xvbmUoc3RydWN0IG5ldCAqbmV0LFxuIFx0XHRcdFx0ICAgdTMyIG1wbHNfbGFiZWxfY291bnQsIGJvb2wgbG9nLCBib29sIGxhc3QsXG4gXHRcdFx0XHQgICB1MzIgZGVwdGgpXG4ge1xuK1x0aW50IGFjdGlvbnNfc3RhcnQ7XG4gXHRpbnQgc3RhcnQsIGVycjtcbiBcdHUzMiBleGVjO1xuIFxuQEAgLTI2NjEsMTcgKzI3MjgsMjYgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9jbG9uZShzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRlcnIgPSBvdnNfbmxhX2FkZF9hY3Rpb24oc2ZhLCBPVlNfQ0xPTkVfQVRUUl9FWEVDLCBcdTAwMjZleGVjLFxuIFx0XHRcdFx0IHNpemVvZihleGVjKSwgbG9nKTtcbiBcdGlmIChlcnIpXG4tXHRcdHJldHVybiBlcnI7XG4rXHRcdGdvdG8gZXJyO1xuIFxuK1x0YWN0aW9uc19zdGFydCA9ICgqc2ZhKS1cdTAwM2VhY3Rpb25zX2xlbjtcbiBcdGVyciA9IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMobmV0LCBhdHRyLCBrZXksIHNmYSxcbiBcdFx0XHRcdCAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXG4gXHRcdFx0XHQgICAgIGRlcHRoICsgMSk7XG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHRnb3RvIGVycl9mcmVlO1xuIFxuLVx0YWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIHN0YXJ0KTtcbitcdGVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9mcmVlO1xuIFxuIFx0cmV0dXJuIDA7XG4rXG4rZXJyX2ZyZWU6XG4rXHRvdnNfbmxhX3RyaW0oKnNmYSwgYWN0aW9uc19zdGFydCwgZmFsc2UpO1xuK2VycjpcbitcdCgqc2ZhKS1cdTAwM2VhY3Rpb25zX2xlbiA9IHN0YXJ0O1xuK1x0cmV0dXJuIGVycjtcbiB9XG4gXG4gdm9pZCBvdnNfbWF0Y2hfaW5pdChzdHJ1Y3Qgc3dfZmxvd19tYXRjaCAqbWF0Y2gsXG5AQCAtMjc2MywyMCArMjgzOSwyMCBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X3NldF90dW4oY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcbiBcdHR1bl9kc3QgPSBtZXRhZGF0YV9kc3RfYWxsb2Moa2V5LnR1bl9vcHRzX2xlbiwgTUVUQURBVEFfSVBfVFVOTkVMLFxuIFx0XHRcdFx0ICAgICBHRlBfS0VSTkVMKTtcbiBcbi1cdGlmICghdHVuX2RzdClcbi1cdFx0cmV0dXJuIC1FTk9NRU07XG4rXHRpZiAoIXR1bl9kc3QpIHtcbitcdFx0ZXJyID0gLUVOT01FTTtcbitcdFx0Z290byBlcnI7XG4rXHR9XG4gXG4gXHRlcnIgPSBkc3RfY2FjaGVfaW5pdChcdTAwMjZ0dW5fZHN0LVx1MDAzZXUudHVuX2luZm8uZHN0X2NhY2hlLCBHRlBfS0VSTkVMKTtcbi1cdGlmIChlcnIpIHtcbi1cdFx0ZHN0X3JlbGVhc2UoKHN0cnVjdCBkc3RfZW50cnkgKil0dW5fZHN0KTtcbi1cdFx0cmV0dXJuIGVycjtcbi1cdH1cbitcdGlmIChlcnIpXG4rXHRcdGdvdG8gZXJyX2ZyZWVfdHVuX2RzdDtcbiBcbiBcdGEgPSBfX2FkZF9hY3Rpb24oc2ZhLCBPVlNfS0VZX0FUVFJfVFVOTkVMX0lORk8sIE5VTEwsXG4gXHRcdFx0IHNpemVvZigqb3ZzX3R1biksIGxvZyk7XG4gXHRpZiAoSVNfRVJSKGEpKSB7XG4tXHRcdGRzdF9yZWxlYXNlKChzdHJ1Y3QgZHN0X2VudHJ5ICopdHVuX2RzdCk7XG4tXHRcdHJldHVybiBQVFJfRVJSKGEpO1xuK1x0XHRlcnIgPSBQVFJfRVJSKGEpO1xuK1x0XHRnb3RvIGVycl9mcmVlX3R1bl9kc3Q7XG4gXHR9XG4gXG4gXHRvdnNfdHVuID0gbmxhX2RhdGEoYSk7XG5AQCAtMjc5Nyw4ICsyODczLDE2IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfc2V0X3R1bihjb25zdCBzdHJ1Y3QgbmxhdHRyICphdHRyLFxuIFx0aXBfdHVubmVsX2luZm9fb3B0c19zZXQodHVuX2luZm8sXG4gXHRcdFx0XHRUVU5fTUVUQURBVEFfT1BUUyhcdTAwMjZrZXksIGtleS50dW5fb3B0c19sZW4pLFxuIFx0XHRcdFx0a2V5LnR1bl9vcHRzX2xlbiwgZHN0X29wdF90eXBlKTtcbi1cdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XG4rXHRlcnIgPSBhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgc3RhcnQpO1xuK1x0aWYgKFdBUk5fT05fT05DRShlcnIpKVxuK1x0XHRnb3RvIGVycl9mcmVlX3R1bl9kc3Q7XG4rXG4rXHRyZXR1cm4gMDtcbiBcbitlcnJfZnJlZV90dW5fZHN0OlxuK1x0ZHN0X3JlbGVhc2UoKHN0cnVjdCBkc3RfZW50cnkgKil0dW5fZHN0KTtcbitlcnI6XG4rXHQoKnNmYSktXHUwMDNlYWN0aW9uc19sZW4gPSBzdGFydDtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTI5NzEsNyArMzA1NSw3IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfc2V0KGNvbnN0IHN0cnVjdCBubGF0dHIgKmEsXG4gXG4gXHQvKiBDb252ZXJ0IG5vbi1tYXNrZWQgbm9uLXR1bm5lbCBzZXQgYWN0aW9ucyB0byBtYXNrZWQgc2V0IGFjdGlvbnMuICovXG4gXHRpZiAoIW1hc2tlZCBcdTAwMjZcdTAwMjYga2V5X3R5cGUgIT0gT1ZTX0tFWV9BVFRSX1RVTk5FTCkge1xuLVx0XHRpbnQgc3RhcnQsIGxlbiA9IGtleV9sZW4gKiAyO1xuK1x0XHRpbnQgZXJyLCBzdGFydCwgbGVuID0ga2V5X2xlbiAqIDI7XG4gXHRcdHN0cnVjdCBubGF0dHIgKmF0O1xuIFxuIFx0XHQqc2tpcF9jb3B5ID0gdHJ1ZTtcbkBAIC0yOTgzLDggKzMwNjcsMTEgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9zZXQoY29uc3Qgc3RydWN0IG5sYXR0ciAqYSxcbiBcdFx0XHRyZXR1cm4gc3RhcnQ7XG4gXG4gXHRcdGF0ID0gX19hZGRfYWN0aW9uKHNmYSwga2V5X3R5cGUsIE5VTEwsIGxlbiwgbG9nKTtcbi1cdFx0aWYgKElTX0VSUihhdCkpXG4tXHRcdFx0cmV0dXJuIFBUUl9FUlIoYXQpO1xuK1x0XHRpZiAoSVNfRVJSKGF0KSkge1xuK1x0XHRcdGVyciA9IFBUUl9FUlIoYXQpO1xuK1x0XHRcdCgqc2ZhKS1cdTAwM2VhY3Rpb25zX2xlbiA9IHN0YXJ0O1xuK1x0XHRcdHJldHVybiBlcnI7XG4rXHRcdH1cbiBcbiBcdFx0bWVtY3B5KG5sYV9kYXRhKGF0KSwgbmxhX2RhdGEob3ZzX2tleSksIGtleV9sZW4pOyAvKiBLZXkuICovXG4gXHRcdG1lbXNldChubGFfZGF0YShhdCkgKyBrZXlfbGVuLCAweGZmLCBrZXlfbGVuKTsgICAgLyogTWFzay4gKi9cbkBAIC0yOTk0LDcgKzMwODEsMTEgQEAgc3RhdGljIGludCB2YWxpZGF0ZV9zZXQoY29uc3Qgc3RydWN0IG5sYXR0ciAqYSxcbiBcbiBcdFx0XHRtYXNrLVx1MDAzZWlwdjZfbGFiZWwgXHUwMDI2PSBodG9ubCgweDAwMEZGRkZGKTtcbiBcdFx0fVxuLVx0XHRhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgc3RhcnQpO1xuK1x0XHRlcnIgPSBhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgc3RhcnQpO1xuK1x0XHRpZiAoV0FSTl9PTl9PTkNFKGVycikpIHtcbitcdFx0XHQoKnNmYSktXHUwMDNlYWN0aW9uc19sZW4gPSBzdGFydDtcbitcdFx0XHRyZXR1cm4gZXJyO1xuK1x0XHR9XG4gXHR9XG4gXG4gXHRyZXR1cm4gMDtcbkBAIC0zMDQwLDcgKzMxMzEsOCBAQCBzdGF0aWMgaW50IHZhbGlkYXRlX2FuZF9jb3B5X2NoZWNrX3BrdF9sZW4oc3RydWN0IG5ldCAqbmV0LFxuIFx0Y29uc3Qgc3RydWN0IG5sYXR0ciAqYWN0c19pZl9ncmVhdGVyLCAqYWN0c19pZl9sZXNzZXJfZXE7XG4gXHRzdHJ1Y3QgbmxhdHRyICphW09WU19DSEVDS19QS1RfTEVOX0FUVFJfTUFYICsgMV07XG4gXHRzdHJ1Y3QgY2hlY2tfcGt0X2xlbl9hcmcgYXJnO1xuLVx0aW50IG5lc3RlZF9hY3RzX3N0YXJ0O1xuK1x0aW50IGdyZWF0ZXJfYWN0c19zdGFydCA9IC0xO1xuK1x0aW50IGxlc3Nlcl9hY3RzX3N0YXJ0ID0gLTE7XG4gXHRpbnQgc3RhcnQsIGVycjtcbiBcbiBcdGVyciA9IG5sYV9wYXJzZV9kZXByZWNhdGVkX3N0cmljdChhLCBPVlNfQ0hFQ0tfUEtUX0xFTl9BVFRSX01BWCxcbkBAIC0zMDc1LDM3ICszMTY3LDU4IEBAIHN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfY2hlY2tfcGt0X2xlbihzdHJ1Y3QgbmV0ICpuZXQsXG4gXHRlcnIgPSBvdnNfbmxhX2FkZF9hY3Rpb24oc2ZhLCBPVlNfQ0hFQ0tfUEtUX0xFTl9BVFRSX0FSRywgXHUwMDI2YXJnLFxuIFx0XHRcdFx0IHNpemVvZihhcmcpLCBsb2cpO1xuIFx0aWYgKGVycilcbi1cdFx0cmV0dXJuIGVycjtcbitcdFx0Z290byBlcnJfZnJlZTtcbiBcbi1cdG5lc3RlZF9hY3RzX3N0YXJ0ID0gYWRkX25lc3RlZF9hY3Rpb25fc3RhcnQoc2ZhLFxuLVx0XHRPVlNfQ0hFQ0tfUEtUX0xFTl9BVFRSX0FDVElPTlNfSUZfTEVTU19FUVVBTCwgbG9nKTtcbi1cdGlmIChuZXN0ZWRfYWN0c19zdGFydCBcdTAwM2MgMClcbi1cdFx0cmV0dXJuIG5lc3RlZF9hY3RzX3N0YXJ0O1xuK1x0bGVzc2VyX2FjdHNfc3RhcnQgPVxuK1x0XHRhZGRfbmVzdGVkX2FjdGlvbl9zdGFydChzZmEsXG4rXHRcdFx0XHRcdE9WU19DSEVDS19QS1RfTEVOX0FUVFJfQUNUSU9OU19JRl9MRVNTX0VRVUFMLFxuK1x0XHRcdFx0XHRsb2cpO1xuK1x0aWYgKGxlc3Nlcl9hY3RzX3N0YXJ0IFx1MDAzYyAwKSB7XG4rXHRcdGVyciA9IGxlc3Nlcl9hY3RzX3N0YXJ0O1xuK1x0XHRnb3RvIGVycl9mcmVlO1xuK1x0fVxuIFxuIFx0ZXJyID0gX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhuZXQsIGFjdHNfaWZfbGVzc2VyX2VxLCBrZXksIHNmYSxcbiBcdFx0XHRcdCAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXG4gXHRcdFx0XHQgICAgIGRlcHRoICsgMSk7XG4gXG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHRnb3RvIGVycl9mcmVlO1xuIFxuLVx0YWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIG5lc3RlZF9hY3RzX3N0YXJ0KTtcbitcdGVyciA9IGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBsZXNzZXJfYWN0c19zdGFydCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9mcmVlO1xuIFxuLVx0bmVzdGVkX2FjdHNfc3RhcnQgPSBhZGRfbmVzdGVkX2FjdGlvbl9zdGFydChzZmEsXG4tXHRcdE9WU19DSEVDS19QS1RfTEVOX0FUVFJfQUNUSU9OU19JRl9HUkVBVEVSLCBsb2cpO1xuLVx0aWYgKG5lc3RlZF9hY3RzX3N0YXJ0IFx1MDAzYyAwKVxuLVx0XHRyZXR1cm4gbmVzdGVkX2FjdHNfc3RhcnQ7XG4rXHRncmVhdGVyX2FjdHNfc3RhcnQgPVxuK1x0XHRhZGRfbmVzdGVkX2FjdGlvbl9zdGFydChzZmEsXG4rXHRcdFx0XHRcdE9WU19DSEVDS19QS1RfTEVOX0FUVFJfQUNUSU9OU19JRl9HUkVBVEVSLFxuK1x0XHRcdFx0XHRsb2cpO1xuK1x0aWYgKGdyZWF0ZXJfYWN0c19zdGFydCBcdTAwM2MgMCkge1xuK1x0XHRlcnIgPSBncmVhdGVyX2FjdHNfc3RhcnQ7XG4rXHRcdGdvdG8gZXJyX2ZyZWU7XG4rXHR9XG4gXG4gXHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYWN0c19pZl9ncmVhdGVyLCBrZXksIHNmYSxcbiBcdFx0XHRcdCAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXG4gXHRcdFx0XHQgICAgIGRlcHRoICsgMSk7XG4gXG4gXHRpZiAoZXJyKVxuLVx0XHRyZXR1cm4gZXJyO1xuK1x0XHRnb3RvIGVycl9mcmVlO1xuK1xuK1x0ZXJyID0gYWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIGdyZWF0ZXJfYWN0c19zdGFydCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRnb3RvIGVycl9mcmVlO1xuIFxuLVx0YWRkX25lc3RlZF9hY3Rpb25fZW5kKCpzZmEsIG5lc3RlZF9hY3RzX3N0YXJ0KTtcbi1cdGFkZF9uZXN0ZWRfYWN0aW9uX2VuZCgqc2ZhLCBzdGFydCk7XG4rXHRlcnIgPSBhZGRfbmVzdGVkX2FjdGlvbl9lbmQoKnNmYSwgc3RhcnQpO1xuK1x0aWYgKGVycilcbitcdFx0Z290byBlcnJfZnJlZTtcbiBcdHJldHVybiAwO1xuK1xuK2Vycl9mcmVlOlxuK1x0b3ZzX25sYV90cmltKCpzZmEsIGdyZWF0ZXJfYWN0c19zdGFydCwgdHJ1ZSk7XG4rXHRvdnNfbmxhX3RyaW0oKnNmYSwgbGVzc2VyX2FjdHNfc3RhcnQsIHRydWUpO1xuK1x0b3ZzX25sYV90cmltKCpzZmEsIHN0YXJ0LCBmYWxzZSk7XG4rXHRyZXR1cm4gZXJyO1xuIH1cbiBcbiBzdGF0aWMgaW50IHZhbGlkYXRlX3BzYW1wbGUoY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cilcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQyOjE0LjQ4MTgzODg3OVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUxNTE2ODA0NTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFBhdGNoIGluIE9WUyBOZXRsaW5rIEFjdGlvbiBQYXJzaW5nKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgb3ZlciB0aGlzIHBhdGNoIGFwcGxpZWQgdG8gYG5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuY2AsIGFuZCBpdCdzIG1ha2luZyBzb21lIGNyaXRpY2FsIGNoYW5nZXMgdG8gaG93IE9WUyBoYW5kbGVzIG5ldGxpbmsgYWN0aW9ucy4gTXkgaW5pdGlhbCBpbXByZXNzaW9uPyBUaGlzIGlzIGEgc29saWQgcGllY2Ugb2Ygd29yayB0aGF0IGFkZHJlc3NlcyBzb21lIHBvdGVudGlhbCB2dWxuZXJhYmlsaXRpZXMuIFNwZWNpZmljYWxseSwgaXQgc2VlbXMgdG8gYmUgZml4aW5nIG1lbW9yeSBsZWFrcyBhbmQgaW52YWxpZCBzdGF0ZXMgdGhhdCBhcmlzZSB3aGVuIG5lc3RlZCBhY3Rpb24gcGFyc2luZyBnb2VzIHdyb25nLlxuXG5UaGUgY29yZSBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBgYWRkX25lc3RlZF9hY3Rpb25fZW5kYCBub3cgcmV0dXJuaW5nIGFuIGVycm9yIGNvZGUgaW5zdGVhZCBvZiBiZWluZyB2b2lkLiBUaGF0J3MgYSBnb29kIG1vdmUsIGdpdmluZyB0aGUgY2FsbGVyIGEgY2xlYXIgc2lnbmFsIGFib3V0IHN1Y2Nlc3Mgb3IgZmFpbHVyZS4gIEl0IGFsc28gaW5jbHVkZXMgdGhlIGFkZGl0aW9uIG9mIGBvdnNfbmxhX3RyaW1gLCB3aGljaCBpcyBkZXNpZ25lZCB0byBjbGVhbiB1cCBhbmQgdHJ1bmNhdGUgYW55IHBhcnRpYWxseSBidWlsdCBhY3Rpb24gbGlzdHMgd2hlbiB0aGVyZSdzIGFuIGVycm9yLiAgVGhhdCdzIHByZWNpc2VseSB3aGF0J3MgbmVlZGVkIHRvIHByZXZlbnQgbWVtb3J5IGlzc3Vlcy5cblxuVGhlIHBhdGNoIHRvdWNoZXMgc2V2ZXJhbCBvdGhlciBmdW5jdGlvbnMsIGFuZCBJIHNob3VsZCByZWFsbHkgemVybyBpbiBvbiB0aGVzZSBmb3IgYSBjbG9zZXIgbG9vazogYHZhbGlkYXRlX2FuZF9jb3B5X3NhbXBsZWAsIGB2YWxpZGF0ZV9hbmRfY29weV9kZWNfdHRsYCwgYHZhbGlkYXRlX2FuZF9jb3B5X2Nsb25lYCwgYHZhbGlkYXRlX2FuZF9jb3B5X3NldF90dW5gLCBgdmFsaWRhdGVfc2V0YCwgYW5kIGB2YWxpZGF0ZV9hbmRfY29weV9jaGVja19wa3RfbGVuYC4gIFRoZSBwYXR0ZXJuIGhlcmUgaXMgdGhhdCB0aGV5J3JlIGFsbCBiZWluZyBtb2RpZmllZCB0byBwcm9wZXJseSBoYW5kbGUgZXJyb3JzIHRoYXQgbWlnaHQgY29tZSBmcm9tIGBhZGRfbmVzdGVkX2FjdGlvbl9lbmRgIGFuZCB0byB1c2UgYG92c19ubGFfdHJpbWAgb3IgdHJ1bmNhdGUgYGFjdGlvbnNfbGVuYCB0byBjbGVhbiB1cC4gIEl0J3MgYWxsIGFib3V0IGVuc3VyaW5nIHRoYXQgZXZlbiBhIGZhaWxlZCBwYXJzaW5nIGF0dGVtcHQgZG9lc24ndCBsZWF2ZSB0aGUgc3lzdGVtIGluIGEgY29ycnVwdGVkIHN0YXRlLlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIHdoaWNoIG1lYW5zIEkgc2hvdWxkIGRlZmluaXRlbHkgcHJpb3JpdGl6ZSBmdXp6aW5nIHRoZSByZWxldmFudCBjb2RlIHBhdGhzLiAgVGhlIGltcG9ydGFudCB0aGluZyBpcyBmaW5kaW5nIHRoZSBlbnRyeSBwb2ludHMuXG5cbkkgc2VlIHRoYXQgdGhlc2UgbW9kaWZpZWQgZnVuY3Rpb25zIGFyZSBhbGwgY2FsbGVkIGZyb20gYF9fb3ZzX25sYV9jb3B5X2FjdGlvbnNgLCB3aGljaCBpcyB0aGVuIGNhbGxlZCBmcm9tIGBvdnNfbmxhX2NvcHlfYWN0aW9uc2AuIEFuZCB0aGF0J3MgcmVhY2hhYmxlIHZpYSBuZXRsaW5rIGNvbmZpZ3VyYXRpb24gb2YgT1ZTIGZsb3dzLiBHb29kLlxuXG5JJ2xsIHF1aWNrbHkgY2hlY2sgdGhlIEtjb25maWcgZm9yIE9wZW4gdlN3aXRjaCAoYG5ldC9vcGVudnN3aXRjaC9LY29uZmlnYCkgYW5kIGNvbmZpcm0gdGhhdCBgQ09ORklHX09QRU5WU1dJVENIYCBpcyBlbmFibGVkLiBUaW1lIHRvIHVzZSBteSB0b29scyB0byB2ZXJpZnkgdGhhdCBJJ3ZlIGZvdW5kIGFsbCB0aGUgZW50cnkgcG9pbnRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1Njk5LCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDE4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDZUMTM6NDM6MDUuOTk4NjQ1NjExWiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NjIyNDc3NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgT1BFTlZTV0lUQ0hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L29wZW52c3dpdGNoXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTUtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njpjb25maWcgT1BFTlZTV0lUQ0hcXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy03LVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2hcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy00My1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo0NDpjb25maWcgT1BFTlZTV0lUQ0hfR1JFXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNDUtXFx0dHJpc3RhdGUgXFxcIk9wZW4gdlN3aXRjaCBHUkUgdHVubmVsaW5nIHN1cHBvcnRcXFwiXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01Ni1cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZzo1Nzpjb25maWcgT1BFTlZTV0lUQ0hfVlhMQU5cXG5uZXQvb3BlbnZzd2l0Y2gvS2NvbmZpZy01OC1cXHR0cmlzdGF0ZSBcXFwiT3BlbiB2U3dpdGNoIFZYTEFOIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcbi0tXFxubmV0L29wZW52c3dpdGNoL0tjb25maWctNjgtXFxubmV0L29wZW52c3dpdGNoL0tjb25maWc6Njk6Y29uZmlnIE9QRU5WU1dJVENIX0dFTkVWRVxcbm5ldC9vcGVudnN3aXRjaC9LY29uZmlnLTcwLVxcdHRyaXN0YXRlIFxcXCJPcGVuIHZTd2l0Y2ggR2VuZXZlIHR1bm5lbGluZyBzdXBwb3J0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wNlQxMzo0MzowNi4yNTQ4NzUyMDRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MzE5MDQ4ODYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT3BlbiB2U3dpdGNoIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyB0aGUgY29uZmlndXJhdGlvbiBJJ20gZGVhbGluZyB3aXRoIGhlcmUgaXMgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gYE9QRU5WU1dJVENIYC4gVGhhdCdzIHRoZSBwcmltYXJ5IGZvY3VzLCB0aGUgYW5jaG9yLCBhcyBmYXIgYXMgSSBjYW4gc2VlLiBNeSBvYmplY3RpdmUgaXMgdG8gZGlzc2VjdCB0aGVzZSBwYXJ0aWN1bGFyIGZ1bmN0aW9ucyB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBhY3Rpb24gaGFuZGxpbmcgYW5kIHZhbGlkYXRpb24gcm91dGluZXMgd2l0aGluIHRoaXMgY29uZmlndXJhdGlvbi5cblxuU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gcmVhbGx5IGRpZyBpbnRvIGB2YWxpZGF0ZV9hbmRfY29weV9zYW1wbGVgLCBgdmFsaWRhdGVfYW5kX2NvcHlfZGVjX3R0bGAsIGB2YWxpZGF0ZV9hbmRfY29weV9jbG9uZWAsIGB2YWxpZGF0ZV9hbmRfY29weV9zZXRfdHVuYCwgYHZhbGlkYXRlX3NldGAsIGB2YWxpZGF0ZV9hbmRfY29weV9jaGVja19wa3RfbGVuYCwgYW5kLCBjcml0aWNhbGx5LCBgX19vdnNfbmxhX2NvcHlfYWN0aW9uc2AuIE15IGd1dCB0ZWxscyBtZSBgX19vdnNfbmxhX2NvcHlfYWN0aW9uc2AgaXMgdGhlIG1vc3QgaW1wb3J0YW50IG9mIHRoZSBidW5jaC4gVGhpcyBsYXN0IG9uZSBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiBhY3Rpb24gY29weWluZyByZXNpZGVzLCBzbyB0aGF0IHdpbGwgdGFrZSB0aGUgbW9zdCBzY3J1dGlueS5cblxuQmVmb3JlIEkgZ28gYW55IGZ1cnRoZXIsIEknbGwgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgT1BFTlZTV0lUQ0hgIGlzIHRoZSBvbmx5IGFjdGl2ZSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3QgbWlzc2luZyBhbnkgb3RoZXIgcmVsZXZhbnQgY29udGV4dHMuIFllcCwgaXQncyB0aGUgbWFpbiBvbmUsIHNvIEknbSBvbiB0aGUgcmlnaHQgdHJhY2suXG5cbkFscmlnaHQsIGxldCdzIHN0YXJ0IHdpdGggYSBmb2N1c2VkIGxvb2sgYXQgYF9fb3ZzX25sYV9jb3B5X2FjdGlvbnNgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo2ODgwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQzOjExLjU3MzkyNjAzNVoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTk3MjEzODIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19vdnNfbmxhX2NvcHlfYWN0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvb3BlbnZzd2l0Y2hcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jPTI1MjQ9c3RhdGljIHZvaWQgb3ZzX25sYV90cmltKHN0cnVjdCBzd19mbG93X2FjdGlvbnMgKnNmYSwgaW50IHN0YXJ0LCBib29sIG5lc3RlZClcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0yNTUwLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYzoyNTUxOnN0YXRpYyBpbnQgX19vdnNfbmxhX2NvcHlfYWN0aW9ucyhzdHJ1Y3QgbmV0ICpuZXQsIGNvbnN0IHN0cnVjdCBubGF0dHIgKmF0dHIsXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTI1NTItXFx0XFx0XFx0XFx0ICBjb25zdCBzdHJ1Y3Qgc3dfZmxvd19rZXkgKmtleSxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYz0yNTU4PXN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfc2FtcGxlKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0yNjE0LVxcdGFjdGlvbnNfc3RhcnQgPSAoKnNmYSktXFx1MDAzZWFjdGlvbnNfbGVuO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYzoyNjE1OlxcdGVyciA9IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMobmV0LCBhY3Rpb25zLCBrZXksIHNmYSxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMjYxNi1cXHRcXHRcXHRcXHQgICAgIGV0aF90eXBlLCB2bGFuX3RjaSwgbXBsc19sYWJlbF9jb3VudCwgbG9nLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jPTI2MzU9c3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9kZWNfdHRsKHN0cnVjdCBuZXQgKm5ldCxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0yNjg0LVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYzoyNjg1OlxcdGVyciA9IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMobmV0LCBhY3Rpb25zLCBrZXksIHNmYSwgZXRoX3R5cGUsXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTI2ODYtXFx0XFx0XFx0XFx0ICAgICB2bGFuX3RjaSwgbXBsc19sYWJlbF9jb3VudCwgbG9nLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jPTI3MDc9c3RhdGljIGludCB2YWxpZGF0ZV9hbmRfY29weV9jbG9uZShzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMjczMy1cXHRhY3Rpb25zX3N0YXJ0ID0gKCpzZmEpLVxcdTAwM2VhY3Rpb25zX2xlbjtcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM6MjczNDpcXHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYXR0ciwga2V5LCBzZmEsXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTI3MzUtXFx0XFx0XFx0XFx0ICAgICBldGhfdHlwZSwgdmxhbl90Y2ksIG1wbHNfbGFiZWxfY291bnQsIGxvZyxcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYz0zMTIzPXN0YXRpYyBpbnQgdmFsaWRhdGVfYW5kX2NvcHlfY2hlY2tfcGt0X2xlbihzdHJ1Y3QgbmV0ICpuZXQsXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMzE4MC1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM6MzE4MTpcXHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYWN0c19pZl9sZXNzZXJfZXEsIGtleSwgc2ZhLFxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0zMTgyLVxcdFxcdFxcdFxcdCAgICAgZXRoX3R5cGUsIHZsYW5fdGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXFxuLS1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMzIwMC1cXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmM6MzIwMTpcXHRlcnIgPSBfX292c19ubGFfY29weV9hY3Rpb25zKG5ldCwgYWN0c19pZl9ncmVhdGVyLCBrZXksIHNmYSxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMzIwMi1cXHRcXHRcXHRcXHQgICAgIGV0aF90eXBlLCB2bGFuX3RjaSwgbXBsc19sYWJlbF9jb3VudCwgbG9nLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jPTMyNDY9c3RhdGljIGludCBjb3B5X2FjdGlvbihjb25zdCBzdHJ1Y3QgbmxhdHRyICpmcm9tLFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jLTMyNTktXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jOjMyNjA6c3RhdGljIGludCBfX292c19ubGFfY29weV9hY3Rpb25zKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMzI2MS1cXHRcXHRcXHRcXHQgIGNvbnN0IHN0cnVjdCBzd19mbG93X2tleSAqa2V5LFxcbi0tXFxubmV0L29wZW52c3dpdGNoL2Zsb3dfbmV0bGluay5jPTM2MDQ9aW50IG92c19ubGFfY29weV9hY3Rpb25zKHN0cnVjdCBuZXQgKm5ldCwgY29uc3Qgc3RydWN0IG5sYXR0ciAqYXR0cixcXG4tLVxcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYy0zNjE4LVxcdCgqc2ZhKS1cXHUwMDNlb3JpZ19sZW4gPSBubGFfbGVuKGF0dHIpO1xcbm5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuYzozNjE5OlxcdGVyciA9IF9fb3ZzX25sYV9jb3B5X2FjdGlvbnMobmV0LCBhdHRyLCBrZXksIHNmYSwga2V5LVxcdTAwM2VldGgudHlwZSxcXG5uZXQvb3BlbnZzd2l0Y2gvZmxvd19uZXRsaW5rLmMtMzYyMC1cXHRcXHRcXHRcXHQgICAgIGtleS1cXHUwMDNlZXRoLnZsYW4udGNpLCBtcGxzX2xhYmVsX2NvdW50LCBsb2csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQzOjExLjc3MzY1MzIwN1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0Njg3NDgzNDY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgT3BlbiB2U3dpdGNoIE5ldGxpbmsgQWN0aW9uIFBhcnNpbmcgRml4KipcblxuT2theSwgaGVyZSdzIHdoYXQgSSdtIHRoaW5raW5nLiBUaGlzIHBhdGNoIGlzIGZvY3VzZWQgb24gYG5ldC9vcGVudnN3aXRjaC9mbG93X25ldGxpbmsuY2AsIHNwZWNpZmljYWxseSBhZGRyZXNzaW5nIHNvbWUgY3JpdGljYWwgZnVuY3Rpb25zOiBgdmFsaWRhdGVfYW5kX2NvcHlfc2FtcGxlYCwgYHZhbGlkYXRlX2FuZF9jb3B5X2RlY190dGxgLCBgdmFsaWRhdGVfYW5kX2NvcHlfY2xvbmVgLCBgdmFsaWRhdGVfYW5kX2NvcHlfc2V0X3R1bmAsIGB2YWxpZGF0ZV9zZXRgLCBgdmFsaWRhdGVfYW5kX2NvcHlfY2hlY2tfcGt0X2xlbmAsIGFuZCBjcml0aWNhbGx5LCBgX19vdnNfbmxhX2NvcHlfYWN0aW9uc2AuIFRoZXNlIGFyZSBhbGwgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGFuZCB2YWxpZGF0aW5nIE9wZW4gdlN3aXRjaCBhY3Rpb25zIHRoYXQgY29tZSBpbiB2aWEgbmV0bGluayBtZXNzYWdlcy5cblxuVGhlIGNvcmUgb2YgdGhlIGlzc3VlIGlzIGFyb3VuZCBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IGxlYWtzIGR1cmluZyBuZXN0ZWQgYWN0aW9uIHBhcnNpbmcuIEVzc2VudGlhbGx5LCBpZiB0aGluZ3MgZ28gd3Jvbmcgd2hpbGUgcGFyc2luZyBjb21wbGV4LCBuZXN0ZWQgYWN0aW9ucywgdGhlIHBhdGNoIGVuc3VyZXMgdGhhdCB0aGUgcmVzdWx0aW5nIGFjdGlvbiBsaXN0IGlzIHRydW5jYXRlZCBjb3JyZWN0bHkgYW5kIGFueSBhbGxvY2F0ZWQgbWVtb3J5IGlzIGZyZWVkIHByb3Blcmx5LiBUaGlzIGlzIGEgc29saWQsIGZ1bmN0aW9uYWwgZml4LlxuXG5TaW5jZSB0aGlzIHRvdWNoZXMgdGhlIGNvcmUgT1ZTIG5ldGxpbmsgaW50ZXJmYWNlLCB3aGljaCBpcyBkaXJlY3RseSBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlLCBteSBpbnR1aXRpb24gaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBhIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSXTigJlzIGV4YWN0bHkgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdCBjYW4gZXhwb3NlIHN1YnRsZSBidWdzIHJlbGF0ZWQgdG8gbWFsZm9ybWVkIGlucHV0LiBUaGlzIGlzIGltcG9ydGFudDogdXNlcnNwYWNlIGlucHV0IHRvIGNvcmUgbG9naWMuXG5cblRoZXJlZm9yZSwgSSdtIHNldHRpbmcgYFdvcnRoRnV6emluZz10cnVlYC4gSSBuZWVkIHRvIGJlIGZvY3VzZWQgb24gdGhvc2Uga2V5IGZ1bmN0aW9ucyBtZW50aW9uZWQgYWJvdmUuIEknbGwgZmxhZyB0aG9zZSBhcyB0aGUgYEZvY3VzU3ltYm9sc2AuIEFuZCBnaXZlbiB0aGlzIGlzIE9wZW4gdlN3aXRjaCBzcGVjaWZpYywgSeKAmWxsIG5lZWQgdG8gbWFrZSBzdXJlIHRoZSBgT1BFTlZTV0lUQ0hgIGNvbmZpZyBpcyBlbmFibGVkLiBJIG5lZWQgdG8gYmUgcmVhZHkgdG8gcnVuIGZ1enplciBvdmVyIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MTEsIk91dHB1dFRva2VucyI6MTk3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzY3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA2VDEzOjQzOjU2LjQ2MTEzODgxM1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Nzc5NDQzNTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk9QRU5WU1dJVENIXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwidmFsaWRhdGVfYW5kX2NvcHlfc2FtcGxlXCIsXG4gICAgXCJ2YWxpZGF0ZV9hbmRfY29weV9kZWNfdHRsXCIsXG4gICAgXCJ2YWxpZGF0ZV9hbmRfY29weV9jbG9uZVwiLFxuICAgIFwidmFsaWRhdGVfYW5kX2NvcHlfc2V0X3R1blwiLFxuICAgIFwidmFsaWRhdGVfc2V0XCIsXG4gICAgXCJ2YWxpZGF0ZV9hbmRfY29weV9jaGVja19wa3RfbGVuXCIsXG4gICAgXCJfX292c19ubGFfY29weV9hY3Rpb25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgZXJyb3IgaGFuZGxpbmcgYW5kIG1lbW9yeSBsZWFrcyBpbiBPcGVuIHZTd2l0Y2ggbmV0bGluayBhY3Rpb24gcGFyc2luZyAoYF9fb3ZzX25sYV9jb3B5X2FjdGlvbnNgIGFuZCByZWxhdGVkIGB2YWxpZGF0ZV9hbmRfY29weV8qYCBmdW5jdGlvbnMpLiBJdCBlbnN1cmVzIHRoYXQgd2hlbiBuZXN0ZWQgYWN0aW9uIHBhcnNpbmcgZmFpbHMsIHRoZSBnZW5lcmF0ZWQgYWN0aW9uIGxpc3QgaXMgcHJvcGVybHkgdHJ1bmNhdGVkIGFuZCBmcmVlZC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIE9WUyBsb2dpYyB0aGF0IHByb2Nlc3NlcyB1c2Vyc3BhY2UgaW5wdXQsIG1ha2luZyBpdCBoaWdobHkgcmVsZXZhbnQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiT1BFTlZTV0lUQ0hcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ2YWxpZGF0ZV9hbmRfY29weV9zYW1wbGVcIixcbiAgICBcInZhbGlkYXRlX2FuZF9jb3B5X2RlY190dGxcIixcbiAgICBcInZhbGlkYXRlX2FuZF9jb3B5X2Nsb25lXCIsXG4gICAgXCJ2YWxpZGF0ZV9hbmRfY29weV9zZXRfdHVuXCIsXG4gICAgXCJ2YWxpZGF0ZV9zZXRcIixcbiAgICBcInZhbGlkYXRlX2FuZF9jb3B5X2NoZWNrX3BrdF9sZW5cIixcbiAgICBcIl9fb3ZzX25sYV9jb3B5X2FjdGlvbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBlcnJvciBoYW5kbGluZyBhbmQgbWVtb3J5IGxlYWtzIGluIE9wZW4gdlN3aXRjaCBuZXRsaW5rIGFjdGlvbiBwYXJzaW5nIChgX19vdnNfbmxhX2NvcHlfYWN0aW9uc2AgYW5kIHJlbGF0ZWQgYHZhbGlkYXRlX2FuZF9jb3B5XypgIGZ1bmN0aW9ucykuIEl0IGVuc3VyZXMgdGhhdCB3aGVuIG5lc3RlZCBhY3Rpb24gcGFyc2luZyBmYWlscywgdGhlIGdlbmVyYXRlZCBhY3Rpb24gbGlzdCBpcyBwcm9wZXJseSB0cnVuY2F0ZWQgYW5kIGZyZWVkLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgT1ZTIGxvZ2ljIHRoYXQgcHJvY2Vzc2VzIHVzZXJzcGFjZSBpbnB1dCwgbWFraW5nIGl0IGhpZ2hseSByZWxldmFudCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowmfb7f[1] Phase: Succeeded StartedAt: 2026-07-06 13:44:30 +0000 UTC FinishedAt: 2026-07-06 13:44:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-06 13:44:30 +0000 UTC FinishedAt: 2026-07-06 13:44:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[2] Phase: Succeeded StartedAt: 2026-07-06 13:44:30 +0000 UTC FinishedAt: 2026-07-06 18:34:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-06 13:44:30 +0000 UTC FinishedAt: 2026-07-06 18:34:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-06 13:44:30 +0000 UTC FinishedAt: 2026-07-06 13:44:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-06 13:44:30 +0000 UTC FinishedAt: 2026-07-06 13:44:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmfb7f/series-workflowmfb7f-convert-artifact-1206418068/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-06 13:44:53 +0000 UTC FinishedAt: 2026-07-06 14:26:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-06 13:44:53 +0000 UTC FinishedAt: 2026-07-06 14:26:10 +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:*9020ee6a-ff36-4263-8605-d8bd13c6052d,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-workflowmfb7f/series-workflowmfb7f-convert-artifact-1206418068/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": "a971e9b9-e054-4c6f-ba50-f3f6b89d65b7", "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-workflowmfb7f/series-workflowmfb7f-build-action-3075213074/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-06 13:44:53 +0000 UTC FinishedAt: 2026-07-06 14:26:00 +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:*9020ee6a-ff36-4263-8605-d8bd13c6052d,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-workflowmfb7f/series-workflowmfb7f-convert-artifact-1206418068/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": "a971e9b9-e054-4c6f-ba50-f3f6b89d65b7", "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-workflowmfb7f/series-workflowmfb7f-build-action-3075213074/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-06 14:26:10 +0000 UTC FinishedAt: 2026-07-06 14:26:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-06 14:26:10 +0000 UTC FinishedAt: 2026-07-06 14:26:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-06 14:26:10 +0000 UTC FinishedAt: 2026-07-06 14:26:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-06 14:26:10 +0000 UTC FinishedAt: 2026-07-06 14:26:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmfb7f/series-workflowmfb7f-convert-artifact-491337555/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-06 14:26:31 +0000 UTC FinishedAt: 2026-07-06 14:28:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-06 14:26:31 +0000 UTC FinishedAt: 2026-07-06 14:28:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a971e9b9-e054-4c6f-ba50-f3f6b89d65b7,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-workflowmfb7f/series-workflowmfb7f-build-action-3075213074/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-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-06 14:28:32 +0000 UTC FinishedAt: 2026-07-06 14:28:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-06 14:28:32 +0000 UTC FinishedAt: 2026-07-06 14:28:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-06 14:28:32 +0000 UTC FinishedAt: 2026-07-06 15:30:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-06 14:28:32 +0000 UTC FinishedAt: 2026-07-06 15:30:19 +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:*9020ee6a-ff36-4263-8605-d8bd13c6052d,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-workflowmfb7f/series-workflowmfb7f-convert-artifact-491337555/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": "a2dfcd05-b9b5-4407-8f55-97f70df51793", "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-workflowmfb7f/series-workflowmfb7f-build-action-1379888263/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-06 14:28:32 +0000 UTC FinishedAt: 2026-07-06 15:30:09 +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:*9020ee6a-ff36-4263-8605-d8bd13c6052d,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-workflowmfb7f/series-workflowmfb7f-convert-artifact-491337555/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": "a2dfcd05-b9b5-4407-8f55-97f70df51793", "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-workflowmfb7f/series-workflowmfb7f-build-action-1379888263/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-06 15:30:19 +0000 UTC FinishedAt: 2026-07-06 15:30:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-06 15:30:19 +0000 UTC FinishedAt: 2026-07-06 15:30:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-06 15:30:19 +0000 UTC FinishedAt: 2026-07-06 15:32:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-06 15:30:19 +0000 UTC FinishedAt: 2026-07-06 15:32:40 +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:*a2dfcd05-b9b5-4407-8f55-97f70df51793,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-workflowmfb7f/series-workflowmfb7f-build-action-1379888263/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-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-06 15:32:50 +0000 UTC FinishedAt: 2026-07-06 18:34:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-06 15:32:50 +0000 UTC FinishedAt: 2026-07-06 18:34:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*a971e9b9-e054-4c6f-ba50-f3f6b89d65b7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a2dfcd05-b9b5-4407-8f55-97f70df51793,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-workflowmfb7f/series-workflowmfb7f-build-action-3075213074/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-workflowmfb7f/series-workflowmfb7f-build-action-1379888263/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-06 15:32:50 +0000 UTC FinishedAt: 2026-07-06 15:33:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-06 15:32:50 +0000 UTC FinishedAt: 2026-07-06 15:32:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowmfb7f/series-workflowmfb7f-convert-artifact-2306904012/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-06 15:32:50 +0000 UTC FinishedAt: 2026-07-06 15:32:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-06 15:32:50 +0000 UTC FinishedAt: 2026-07-06 15:32:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-06 15:32:50 +0000 UTC FinishedAt: 2026-07-06 15:32:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-06 15:33:00 +0000 UTC FinishedAt: 2026-07-06 18:34:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflowmfb7f[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-net-kasan-gce-corpus.db"],"focus":["net"],"focus_symbols":["validate_and_copy_sample","validate_and_copy_dec_ttl","validate_and_copy_clone","validate_and_copy_set_tun","validate_set","validate_and_copy_check_pkt_len","__ovs_nla_copy_actions"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"d7a8d500d7e42837bd8dce40cb52c97c6e8706a9","config_name":"upstream-apparmor-kasan.config","enable_configs":["OPENVSWITCH"],"series_id":"af025c52-5aab-4e59-8e36-060667fa2a57","tree_name":"net","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/netdev/net.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-06 15:33:00 +0000 UTC FinishedAt: 2026-07-06 18:34:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*a971e9b9-e054-4c6f-ba50-f3f6b89d65b7,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a2dfcd05-b9b5-4407-8f55-97f70df51793,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-workflowmfb7f/series-workflowmfb7f-build-action-3075213074/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-workflowmfb7f/series-workflowmfb7f-build-action-1379888263/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-workflowmfb7f/series-workflowmfb7f-convert-artifact-2306904012/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,}