Name: series-workflowllblz Phase: Succeeded StartedAt: 2026-06-29 11:21:29 +0000 UTC FinishedAt: 2026-06-29 15:42:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[0] Phase: Succeeded StartedAt: 2026-06-29 11:21:29 +0000 UTC FinishedAt: 2026-06-29 11:29:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[0].run-triage Phase: Succeeded StartedAt: 2026-06-29 11:21:29 +0000 UTC FinishedAt: 2026-06-29 11:29:13 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "series_id": "19598828-b970-4299-8a70-e9c30dcbcde0" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_xattr_inode_dec_ref_all", "ext4_xattr_delete_inode", "ext4_ea_inode_work", "ext4_put_ea_inode", "ext4_xattr_block_set", "ext4_xattr_ibody_set" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "9b2e3f5d-279a-469f-9f2a-05f96ea11587" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X2VhX2lub2RlX3dvcmsmIzM0OywKICAgICYjMzQ7ZXh0NF9wdXRfZWFfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9ibG9ja19zZXQmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pYm9keV9zZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIGZvciBleHQ0IEVBIChFeHRlbmRlZCBBdHRyaWJ1dGUpIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyBhbmQgZGVhZGxvY2tzLiBJdCBtb2RpZmllcyBjb3JlIGV4dDQgeGF0dHIgaGFuZGxpbmcgYW5kIGlub2RlIGV2aWN0aW9uIHBhdGhzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjI4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWYyZjVlNWY0MTcwNTkyMDBiODYwNGNlYTRiNWM0M2U4NmFlNmM4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDExOjI4OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcbmluZGV4IGIzN2MxMzZlYTNhYjMzLi5iOWIwYWRhNzc3NGJiNCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTEwNzAsOCAmIzQzOzEwNzAsMTQgQEAgc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XG4gXHQgKiBiZXR3ZWVuIHJlYWRlcnMgb2YgRUFzIGFuZCB3cml0ZXJzIG9mIHJlZ3VsYXIgZmlsZSBkYXRhLCBzb1xuIFx0ICogaW5zdGVhZCB3ZSBzeW5jaHJvbml6ZSBvbiB4YXR0cl9zZW0gd2hlbiByZWFkaW5nIG9yIGNoYW5naW5nXG4gXHQgKiBFQXMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBFQSBpbm9kZXMgKEVYVDRfRUFfSU5PREVfRkwpIGRvIG5vdCB1c2UgeGF0dHJfc2VtOyB0aGV5IHJldXNlXG4mIzQzO1x0ICogdGhlIHNwYWNlIGZvciBkZWZlcnJlZCBpcHV0IGxpbmthZ2UuXG4gXHQgKi9cbi1cdHN0cnVjdCByd19zZW1hcGhvcmUgeGF0dHJfc2VtO1xuJiM0MztcdHVuaW9uIHtcbiYjNDM7XHRcdHN0cnVjdCByd19zZW1hcGhvcmUgeGF0dHJfc2VtO1xuJiM0MztcdFx0c3RydWN0IGxsaXN0X25vZGUgaV9lYV9pcHV0X25vZGU7XG4mIzQzO1x0fTtcbiBcbiBcdC8qXG4gXHQgKiBJbm9kZXMgd2l0aCBFWFQ0X1NUQVRFX09SUEhBTl9GSUxFIHVzZSBpX29ycGhhbl9pZHguIE90aGVyd2lzZVxuQEAgLTE3NzAsNiAmIzQzOzE3NzYsMTEgQEAgc3RydWN0IGV4dDRfc2JfaW5mbyB7XG4gXHRzdHJ1Y3QgZXh0NF9lc19zdGF0cyBzX2VzX3N0YXRzO1xuIFx0c3RydWN0IG1iX2NhY2hlICpzX2VhX2Jsb2NrX2NhY2hlO1xuIFx0c3RydWN0IG1iX2NhY2hlICpzX2VhX2lub2RlX2NhY2hlO1xuJiM0MztcbiYjNDM7XHQvKiBEZWZlcnJlZCBpcHV0IGZvciBFQSBpbm9kZXMgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMgKi9cbiYjNDM7XHRzdHJ1Y3QgbGxpc3RfaGVhZCBzX2VhX2lub2RlX3RvX2ZyZWU7XG4mIzQzO1x0c3RydWN0IGRlbGF5ZWRfd29yayBzX2VhX2lub2RlX3dvcms7XG4mIzQzO1xuIFx0c3BpbmxvY2tfdCBzX2VzX2xvY2sgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcbiBcbiBcdC8qIEpvdXJuYWwgdHJpZ2dlcnMgZm9yIGNoZWNrc3VtIGNvbXB1dGF0aW9uICovXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXG5pbmRleCBjZTk5ODA3YzVmNWIyYy4uNzQ3YzUyYzIzMmNjMDMgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5vZGUuY1xuQEAgLTE3Niw3ICYjNDM7MTc2LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHQgKiAoeGF0dHIgYmxvY2sgZnJlZWluZyksIGJpdG1hcCwgZ3JvdXAgZGVzY3JpcHRvciAoaW5vZGUgZnJlZWluZylcbiBcdCAqL1xuIFx0aW50IGV4dHJhX2NyZWRpdHMgPSA2O1xuLVx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcbiBcdGJvb2wgZnJlZXplX3Byb3RlY3RlZCA9IGZhbHNlO1xuIFxuIFx0dHJhY2VfZXh0NF9ldmljdF9pbm9kZShpbm9kZSk7XG5AQCAtMjgxLDggJiM0MzsyODAsNyBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdH1cbiBcbiBcdC8qIFJlbW92ZSB4YXR0ciByZWZlcmVuY2VzLiAqL1xuLVx0ZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgXHUwMDI2ZWFfaW5vZGVfYXJyYXksXG4tXHRcdFx0XHQgICAgICBleHRyYV9jcmVkaXRzKTtcbiYjNDM7XHRlcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBleHRyYV9jcmVkaXRzKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZXh0NF93YXJuaW5nKGlub2RlLVx1MDAzZWlfc2IsIFwmIzM0O3hhdHRyIGRlbGV0ZSAoZXJyICVkKVwmIzM0OywgZXJyKTtcbiBzdG9wX2hhbmRsZTpcbkBAIC0yOTAsNyAmIzQzOzI4OCw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRleHQ0X29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpO1xuIFx0XHRpZiAoZnJlZXplX3Byb3RlY3RlZClcbiBcdFx0XHRzYl9lbmRfaW50d3JpdGUoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XG4gXHRcdGdvdG8gbm9fZGVsZXRlO1xuIFx0fVxuIFxuQEAgLTMyMCw3ICYjNDM7MzE3LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xuIFx0aWYgKGZyZWV6ZV9wcm90ZWN0ZWQpXG4gXHRcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XG4gXHRyZXR1cm47XG4gbm9fZGVsZXRlOlxuIFx0LypcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcbmluZGV4IDI0NWY2N2QxMGRlZDM0Li4zZWZhNWE4MTdiZWY0ZiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9zdXBlci5jXG5AQCAtMTMwMyw2ICYjNDM7MTMwMyw4IEBAIHN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRcdFx0IFx1MDAyNnNiLVx1MDAzZXNfdXVpZCk7XG4gXG4gXHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XG4mIzQzO1x0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgd2hpbGUgcXVvdGEgaXMgc3RpbGwgYWN0aXZlLiAqL1xuJiM0MztcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcbiBcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuIFxuIFx0ZGVzdHJveV93b3JrcXVldWUoc2JpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKTtcbkBAIC0xNDIzLDYgJiM0MzsxNDI1LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdG1lbXNldChcdTAwMjZlaS1cdTAwM2VpX2RxdW90LCAwLCBzaXplb2YoZWktXHUwMDNlaV9kcXVvdCkpO1xuICNlbmRpZlxuIFx0ZWktXHUwMDNlamlub2RlID0gTlVMTDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlaW5pdGlhbGl6ZSB4YXR0cl9zZW0gZXZlcnkgYWxsb2NhdGlvbiBiZWNhdXNlIEVBIGlub2Rlc1xuJiM0MztcdCAqIHNoYXJlIHRoaXMgc3BhY2Ugd2l0aCBpX2VhX2lwdXRfbm9kZSAodmlhIHVuaW9uKSB3aGljaCBtYXlcbiYjNDM7XHQgKiBoYXZlIG92ZXJ3cml0dGVuIHRoZSBzZW1hcGhvcmUgd2hlbiB0aGUgc2xhYiBvYmplY3Qgd2FzXG4mIzQzO1x0ICogcHJldmlvdXNseSB1c2VkIGFzIGFuIEVBIGlub2RlLlxuJiM0MztcdCAqL1xuJiM0MztcdGluaXRfcndzZW0oXHUwMDI2ZWktXHUwMDNleGF0dHJfc2VtKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmVpLVx1MDAzZWlfcnN2X2NvbnZlcnNpb25fbGlzdCk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZlaS1cdTAwM2VpX2NvbXBsZXRlZF9pb19sb2NrKTtcbiBcdGVpLVx1MDAzZWlfc3luY190aWQgPSAwO1xuQEAgLTE0ODgsNyAmIzQzOzE0OTcsNiBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxuIFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBmb287XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZlaS1cdTAwM2VpX29ycGhhbik7XG4tXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZXhhdHRyX3NlbSk7XG4gXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuIFx0aW5vZGVfaW5pdF9vbmNlKFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG4gXHRleHQ0X2ZjX2luaXRfaW5vZGUoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbkBAIC01NDk3LDYgJiM0Mzs1NTA1LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRcdFx0ICBleHQ0X2hhc19mZWF0dXJlX29ycGhhbl9wcmVzZW50KHNiKSB8fFxuIFx0XHRcdCAgZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsX25lZWRzX3JlY292ZXJ5KHNiKSk7XG4gXG4mIzQzO1x0ZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc2JpKTtcbiYjNDM7XG4gXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9tbXAoc2IpIFx1MDAyNlx1MDAyNiAhc2JfcmRvbmx5KHNiKSkge1xuIFx0XHRlcnIgPSBleHQ0X211bHRpX21vdW50X3Byb3RlY3Qoc2IsIGxlNjRfdG9fY3B1KGVzLVx1MDAzZXNfbW1wX2Jsb2NrKSk7XG4gXHRcdGlmIChlcnIpXG5AQCAtNTc0Nyw2ICYjNDM7NTc1Nyw4IEBAIHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0cmV0dXJuIDA7XG4gXG4gZmFpbGVkX21vdW50OTpcbiYjNDM7XHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgcXVvdGEgc2h1dGRvd24gKi9cbiYjNDM7XHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yayk7XG4gXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcbiBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0ZXh0NF9yZWxlYXNlX29ycGhhbl9pbmZvKHNiKTtcbkBAIC01NzY3LDYgJiM0Mzs1Nzc5LDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBcdGlmIChFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSlcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xuIGZhaWxlZF9tb3VudF93cTpcbiYjNDM7XHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgZnJlZWluZyBzdHJ1Y3R1cmVzICovXG4mIzQzO1x0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuIFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlKTtcbiBcdHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlID0gTlVMTDtcbiBcbkBAIC01Nzc3LDYgJiM0Mzs1NzkxLDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBcdFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXHUwMDNlc19qb3VybmFsKTtcbiBcdH1cbiBmYWlsZWRfbW91bnQzYTpcbiYjNDM7XHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBmcm9tIGpvdXJuYWwgcmVwbGF5ICovXG4mIzQzO1x0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuIFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XG4gZmFpbGVkX21vdW50MzpcbiBcdC8qIGZsdXNoIHNfc2JfdXBkX3dvcmsgYmVmb3JlIHNiaSBkZXN0cm95ICovXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXG5pbmRleCA5ODJhMWY4MzFlMjI4Mi4uODVhZDI1NjE0NzRiNmUgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3hhdHRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuY1xuQEAgLTExNCwxMCAmIzQzOzExNCw2IEBAIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyc1tdID0ge1xuICNkZWZpbmUgRUFfSU5PREVfQ0FDSEUoaW5vZGUpXHQoKChzdHJ1Y3QgZXh0NF9zYl9pbmZvICopIFxcXG4gXHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZnNfaW5mbyktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSlcbiBcbi1zdGF0aWMgaW50XG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbi1cbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXG4ge1xuQEAgLTU2Nyw3ICYjNDM7NTYzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LFxuIFx0XHRcdFx0XHRlYV9pbm9kZS1cdTAwM2VpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7XG4gXHR9XG4gb3V0OlxuLVx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTEwNCwxMCAmIzQzOzExMDAsMTAgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX2luY19yZWYoaGFuZGxlLCBlYV9pbm9kZSk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwmIzM0O2luYyByZWYgZXJyb3IgJWRcJiMzNDssIGVycik7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0Z290byBjbGVhbnVwO1xuIFx0XHR9XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIFxuQEAgLTExMzMsNyAmIzQzOzExMjksNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcJiMzNDtjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcJiMzNDssXG4gXHRcdFx0XHRcdCAgIGVycik7XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdH1cbiBcdHJldHVybiBzYXZlZF9lcnI7XG4gfVxuQEAgLTExNTYsMTEgJiM0MzsxMTUyLDI5IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9yZXN0YXJ0X2ZuKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qIFRyYWNrIGFuIEVBIGlub2RlIG51bWJlciBpbiB0aGUgZGVkdXAgYXJyYXksIGV4cGFuZGluZyBpZiBuZWVkZWQuICovXG4mIzQzO3N0YXRpYyB2b2lkIGVhX2lub19hcnJheV9hZGQodW5zaWduZWQgaW50ICoqZWFfaW5vcywgdW5zaWduZWQgaW50ICpucixcbiYjNDM7XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgKnNpemUsIHVuc2lnbmVkIGludCAqaW5saW5lX2FycixcbiYjNDM7XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgaW5vKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCpuciA9PSAqc2l6ZSkge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IG5ld19zaXplID0gKnNpemUgKiAyO1xuJiM0MztcdFx0dW5zaWduZWQgaW50ICpwO1xuJiM0MztcbiYjNDM7XHRcdHAgPSBrbWFsbG9jX2FycmF5KG5ld19zaXplLCBzaXplb2YoKnApLCBHRlBfTk9GUyB8IF9fR0ZQX05PRkFJTCk7XG4mIzQzO1x0XHRtZW1jcHkocCwgKmVhX2lub3MsICpuciAqIHNpemVvZigqcCkpO1xuJiM0MztcdFx0aWYgKCplYV9pbm9zICE9IGlubGluZV9hcnIpXG4mIzQzO1x0XHRcdGtmcmVlKCplYV9pbm9zKTtcbiYjNDM7XHRcdCplYV9pbm9zID0gcDtcbiYjNDM7XHRcdCpzaXplID0gbmV3X3NpemU7XG4mIzQzO1x0fVxuJiM0MztcdCgqZWFfaW5vcylbKCpucikmIzQzOyYjNDM7XSA9IGlubztcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZFxuIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuIFx0XHRcdCAgICAgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmZpcnN0LCBib29sIGJsb2NrX2NzdW0sXG4tXHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdCAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlO1xuQEAgLTExNzEsNiAmIzQzOzExODUsMTAgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdGludCBlcnI7XG4gXHRpbnQgY3JlZGl0cztcbiBcdHZvaWQgKmVuZDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZWFfaW5vc19pbmxpbmVbMzJdO1xuJiM0MztcdHVuc2lnbmVkIGludCAqZWFfaW5vcyA9IGVhX2lub3NfaW5saW5lO1xuJiM0MztcdHVuc2lnbmVkIGludCBucl9lYV9pbm9zID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZWFfaW5vc19zaXplID0gQVJSQVlfU0laRShlYV9pbm9zX2lubGluZSk7XG4gXG4gXHRpZiAoYmxvY2tfY3N1bSlcbiBcdFx0ZW5kID0gKHZvaWQgKiliaC1cdTAwM2ViX2RhdGEgJiM0MzsgYmgtXHUwMDNlYl9zaXplO1xuQEAgLTExODgsMjMgJiM0MzsxMjA2LDMwIEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXG4gXHRmb3IgKGVudHJ5ID0gZmlyc3Q7ICh2b2lkICopZW50cnkgXHUwMDNjIGVuZCBcdTAwMjZcdTAwMjYgIUlTX0xBU1RfRU5UUlkoZW50cnkpO1xuIFx0ICAgICBlbnRyeSA9IEVYVDRfWEFUVFJfTkVYVChlbnRyeSkpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcbiBcdFx0aWYgKCFlbnRyeS1cdTAwM2VlX3ZhbHVlX2ludW0pXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGVhX2lubyA9IGxlMzJfdG9fY3B1KGVudHJ5LVx1MDAzZWVfdmFsdWVfaW51bSk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFNraXAgRUEgaW5vZGVzIHdlIGFscmVhZHkgcHJvY2Vzc2VkLiAgT24gYSBjb3JydXB0ZWQgZnMsXG4mIzQzO1x0XHQgKiBkdXBsaWNhdGUgZW50cmllcyBtYXkgcG9pbnQgdG8gdGhlIHNhbWUgRUEgaW5vZGU7IHdpdGhvdXRcbiYjNDM7XHRcdCAqIHRoaXMgY2hlY2ssIHRoZSBzZWNvbmQgaWdldCBjb3VsZCBkZWFkbG9jayBvbiBJX0ZSRUVJTkdcbiYjNDM7XHRcdCAqIGlmIHRoZSBkZWZlcnJlZCB3b3JrZXIgYWxyZWFkeSBzdGFydGVkIGV2aWN0aW5nIGl0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lYV9pbm9zOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0aWYgKGVhX2lub3NbaV0gPT0gZWFfaW5vKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKGkgXHUwMDNjIG5yX2VhX2lub3MpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiBcdFx0ZXJyID0gZXh0NF94YXR0cl9pbm9kZV9pZ2V0KHBhcmVudCwgZWFfaW5vLFxuIFx0XHRcdFx0XHQgICAgbGUzMl90b19jcHUoZW50cnktXHUwMDNlZV9oYXNoKSxcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNmVhX2lub2RlKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0ZXJyID0gZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoZWFfaW5vZGVfYXJyYXksIGVhX2lub2RlKTtcbi1cdFx0aWYgKGVycikge1xuLVx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbi1cdFx0XHRcdFx0ICAgXCYjMzQ7RXhwYW5kIGlub2RlIGFycmF5IGVycj0lZFwmIzM0OywgZXJyKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuIFx0XHRlcnIgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNfZm4oaGFuZGxlLCBjcmVkaXRzLCBjcmVkaXRzLFxuIFx0XHRcdGV4dDRfZnJlZV9tZXRhZGF0YV9yZXZva2VfY3JlZGl0cyhwYXJlbnQtXHUwMDNlaV9zYiwgMSksXG4gXHRcdFx0ZXh0NF94YXR0cl9yZXN0YXJ0X2ZuKGhhbmRsZSwgcGFyZW50LCBiaCwgYmxvY2tfY3N1bSxcbkBAIC0xMjEyLDYgJiM0MzsxMjM3LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCYjMzQ7RW5zdXJlIGNyZWRpdHMgZXJyPSVkXCYjMzQ7LFxuIFx0XHRcdFx0XHQgICBlcnIpO1xuJiM0MztcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGlmIChlcnIgXHUwMDNlIDApIHtcbkBAIC0xMjIxLDYgJiM0MzsxMjQ3LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHRcJiMzNDtSZS1nZXQgd3JpdGUgYWNjZXNzIGVycj0lZFwmIzM0OyxcbiBcdFx0XHRcdFx0XHRlcnIpO1xuJiM0MztcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXHRcdH1cbkBAIC0xMjI5LDYgJiM0MzsxMjU2LDEyIEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwmIzM0O2VhX2lub2RlIGRlYyByZWYgZXJyPSVkXCYjMzQ7LFxuIFx0XHRcdFx0XHQgICBlcnIpO1xuJiM0MztcdFx0XHQvKiBUcmFjayBpZiBubGluaz09MCB0byBza2lwIGR1cGxpY2F0ZXMgKGV2aWN0aW9uIHJpc2spICovXG4mIzQzO1x0XHRcdGlmICghZWFfaW5vZGUtXHUwMDNlaV9ubGluaylcbiYjNDM7XHRcdFx0XHRlYV9pbm9fYXJyYXlfYWRkKFx1MDAyNmVhX2lub3MsIFx1MDAyNm5yX2VhX2lub3MsXG4mIzQzO1x0XHRcdFx0XHRcdCBcdTAwMjZlYV9pbm9zX3NpemUsIGVhX2lub3NfaW5saW5lLCBlYV9pbm8pO1xuJiM0MztcbiYjNDM7XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuQEAgLTEyNDUsOSAmIzQzOzEyNzgsMjIgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0ZW50cnktXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcbiBcdFx0ZW50cnktXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcbiBcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUcmFjayBubGluaz09MCBFQSBpbm9kZXMgdG8gc2tpcCBkdXBsaWNhdGVzIGxhdGVyIC0tXG4mIzQzO1x0XHQgKiB0aGV5IHJpc2sgSV9GUkVFSU5HIGRlYWRsb2NrIG9uIHJlLWlnZXQuXG4mIzQzO1x0XHQgKiBDaGVjayBubGluayBiZWZvcmUgcHV0IHNpbmNlIHB1dCByZWxlYXNlcyBvdXIgcmVmZXJlbmNlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIWVhX2lub2RlLVx1MDAzZWlfbmxpbmspXG4mIzQzO1x0XHRcdGVhX2lub19hcnJheV9hZGQoXHUwMDI2ZWFfaW5vcywgXHUwMDI2bnJfZWFfaW5vcyxcbiYjNDM7XHRcdFx0XHRcdCBcdTAwMjZlYV9pbm9zX3NpemUsIGVhX2lub3NfaW5saW5lLCBlYV9pbm8pO1xuJiM0MztcbiYjNDM7XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdGRpcnR5ID0gdHJ1ZTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoZWFfaW5vcyAhPSBlYV9pbm9zX2lubGluZSlcbiYjNDM7XHRcdGtmcmVlKGVhX2lub3MpO1xuJiM0MztcbiBcdGlmIChkaXJ0eSkge1xuIFx0XHQvKlxuIFx0XHQgKiBOb3RlIHRoYXQgd2UgYXJlIGRlbGliZXJhdGVseSBza2lwcGluZyBjc3VtIGNhbGN1bGF0aW9uIGZvclxuQEAgLTEyNzEsNyAmIzQzOzEzMTcsNiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIHN0YXRpYyB2b2lkXG4gZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4tXHRcdFx0IHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0IGludCBleHRyYV9jcmVkaXRzKVxuIHtcbiBcdHN0cnVjdCBtYl9jYWNoZSAqZWFfYmxvY2tfY2FjaGUgPSBFQV9CTE9DS19DQUNIRShpbm9kZSk7XG5AQCAtMTMxMyw3ICYjNDM7MTM1OCw2IEBAIGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgYmgsXG4gXHRcdFx0XHRcdFx0ICAgICBCRklSU1QoYmgpLFxuIFx0XHRcdFx0XHRcdCAgICAgdHJ1ZSAvKiBibG9ja19jc3VtICovLFxuLVx0XHRcdFx0XHRcdCAgICAgZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0XHRcdFx0ICAgICBleHRyYV9jcmVkaXRzLFxuIFx0XHRcdFx0XHRcdCAgICAgdHJ1ZSAvKiBza2lwX3F1b3RhICovKTtcbiBcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBiaCwgMCwgMSxcbkBAIC0xNTA1LDcgJiM0MzsxNTQ5LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRpZiAoZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpKVxuIFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcJiMzNDtjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcJiMzNDssIGVycik7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0XHR9XG4gXG5AQCAtMTU2NCw3ICYjNDM7MTYwOCw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSxcbiBcdFx0XHRrdmZyZWUoZWFfZGF0YSk7XG4gXHRcdFx0cmV0dXJuIGVhX2lub2RlO1xuIFx0XHR9XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0bmV4dF9lbnRyeTpcbiBcdFx0Y2UgPSBtYl9jYWNoZV9lbnRyeV9maW5kX25leHQoZWFfaW5vZGVfY2FjaGUsIGNlKTtcbiBcdH1cbkBAIC0xNjE1LDcgJiM0MzsxNjU5LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0XHQgICAgICBlYV9pbm9kZS1cdTAwM2VpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7XG4gXHRyZXR1cm4gZWFfaW5vZGU7XG4gb3V0X2Vycjpcbi1cdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgTlVMTCwgdmFsdWVfbGVuKTtcbiBcdHJldHVybiBFUlJfUFRSKGVycik7XG4gfVxuQEAgLTE4NDgsNyAmIzQzOzE4OTIsNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfc2V0X2VudHJ5KHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gKmksXG4gXG4gXHRyZXQgPSAwO1xuIG91dDpcbi1cdGlwdXQob2xkX2VhX2lub2RlKTtcbiYjNDM7XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBvbGRfZWFfaW5vZGUpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMjAxMCw3ICYjNDM7MjA1NCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRvbGRfZWFfaW5vZGVfcXVvdGEgPSBsZTMyX3RvX2NwdShcbiBcdFx0XHRcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9zaXplKTtcbiBcdFx0XHR9XG4tXHRcdFx0aXB1dCh0bXBfaW5vZGUpO1xuJiM0MztcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCB0bXBfaW5vZGUpO1xuIFxuIFx0XHRcdHMtXHUwMDNlaGVyZS1cdTAwM2VlX3ZhbHVlX2ludW0gPSAwO1xuIFx0XHRcdHMtXHUwMDNlaGVyZS1cdTAwM2VlX3ZhbHVlX3NpemUgPSAwO1xuQEAgLTIxNTAsNyAmIzQzOzIxOTQsNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFx0XHQgICBcJiMzNDtkZWMgcmVmIGVycm9yPSVkXCYjMzQ7LFxuIFx0XHRcdFx0XHRcdFx0ICAgZXJyb3IpO1xuLVx0XHRcdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdFx0ZWFfaW5vZGUgPSBOVUxMO1xuIFx0XHRcdH1cbiBcbkBAIC0yMTgyLDEyICYjNDM7MjIyNiw4IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXG4gXHQvKiBEcm9wIHRoZSBwcmV2aW91cyB4YXR0ciBibG9jay4gKi9cbiBcdGlmIChicy1cdTAwM2ViaCBcdTAwMjZcdTAwMjYgYnMtXHUwMDNlYmggIT0gbmV3X2JoKSB7XG4tXHRcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7XG4tXG4gXHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBicy1cdTAwM2ViaCxcbi1cdFx0XHRcdFx0IFx1MDAyNmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHQgMCAvKiBleHRyYV9jcmVkaXRzICovKTtcbi1cdFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiBcdH1cbiBcdGVycm9yID0gMDtcbiBcbkBAIC0yMjAzLDcgJiM0MzsyMjQzLDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdCAgICBpX3NpemVfcmVhZChlYV9pbm9kZSkpO1xuIFx0XHR9XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0fVxuIFx0aWYgKGNlKVxuIFx0XHRtYl9jYWNoZV9lbnRyeV9wdXQoZWFfYmxvY2tfY2FjaGUsIGNlKTtcbkBAIC0yMjg1LDcgJiM0MzsyMzI1LDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHR9XG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdH1cbkBAIC0yMjk3LDcgJiM0MzsyMzM3LDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdGhlYWRlci1cdTAwM2VoX21hZ2ljID0gY3B1X3RvX2xlMzIoMCk7XG4gXHRcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpO1xuIFx0fVxuLVx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTI4NjMsNDYgJiM0MzsyOTAzLDYgQEAgaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuLSNkZWZpbmUgRUlBX0lOQ1IgMTYgLyogbXVzdCBiZSAyXm4gKi9cbi0jZGVmaW5lIEVJQV9NQVNLIChFSUFfSU5DUiAtIDEpXG4tXG4tLyogQWRkIHRoZSBsYXJnZSB4YXR0ciBAaW5vZGUgaW50byBAZWFfaW5vZGVfYXJyYXkgZm9yIGRlZmVycmVkIGlwdXQoKS5cbi0gKiBJZiBAZWFfaW5vZGVfYXJyYXkgaXMgbmV3IG9yIGZ1bGwgaXQgd2lsbCBiZSBncm93biBhbmQgdGhlIG9sZFxuLSAqIGNvbnRlbnRzIGNvcGllZCBvdmVyLlxuLSAqL1xuLXN0YXRpYyBpbnRcbi1leHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuLVx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4te1xuLVx0aWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKSB7XG4tXHRcdC8qXG4tXHRcdCAqIFN0YXJ0IHdpdGggMTUgaW5vZGVzLCBzbyBpdCBmaXRzIGludG8gYSBwb3dlci1vZi10d28gc2l6ZS5cbi1cdFx0ICovXG4tXHRcdCgqZWFfaW5vZGVfYXJyYXkpID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2Rlcyxcbi1cdFx0XHRcdFx0XHQgRUlBX01BU0ssIEdGUF9OT0ZTKTtcbi1cdFx0aWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHQoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vjb3VudCA9IDA7XG4tXHR9IGVsc2UgaWYgKCgoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vjb3VudCBcdTAwMjYgRUlBX01BU0spID09IEVJQV9NQVNLKSB7XG4tXHRcdC8qIGV4cGFuZCB0aGUgYXJyYXkgb25jZSBhbGwgMTUgJiM0MzsgbiAqIDE2IHNsb3RzIGFyZSBmdWxsICovXG4tXHRcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICpuZXdfYXJyYXkgPSBOVUxMO1xuLVxuLVx0XHRuZXdfYXJyYXkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxuLVx0XHRcdFx0XHQgKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgJiM0MzsgRUlBX0lOQ1IsXG4tXHRcdFx0XHRcdCBHRlBfTk9GUyk7XG4tXHRcdGlmIChuZXdfYXJyYXkgPT0gTlVMTClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0bWVtY3B5KG5ld19hcnJheSwgKmVhX2lub2RlX2FycmF5LFxuLVx0XHQgICAgICAgc3RydWN0X3NpemUoKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXG4tXHRcdFx0XHQgICAoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vjb3VudCkpO1xuLVx0XHRrZnJlZSgqZWFfaW5vZGVfYXJyYXkpO1xuLVx0XHQqZWFfaW5vZGVfYXJyYXkgPSBuZXdfYXJyYXk7XG4tXHR9XG4tXHQoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vjb3VudCYjNDM7JiM0Mzs7XG4tXHQoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vpbm9kZXNbKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgLSAxXSA9IGlub2RlO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qXG4gICogZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoKVxuICAqXG5AQCAtMjkxMyw3ICYjNDM7MjkxMyw2IEBAIGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gICogcmVmZXJlbmNlcyBvbiB4YXR0ciBibG9jayBhbmQgeGF0dHIgaW5vZGVzLlxuICAqL1xuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdCAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdCAgICBpbnQgZXh0cmFfY3JlZGl0cylcbiB7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbkBAIC0yOTUyLDcgJiM0MzsyOTUxLDYgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBpbG9jLmJoLFxuIFx0XHRcdFx0XHRcdCAgICAgSUZJUlNUKGhlYWRlciksXG4gXHRcdFx0XHRcdFx0ICAgICBmYWxzZSAvKiBibG9ja19jc3VtICovLFxuLVx0XHRcdFx0XHRcdCAgICAgZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0XHRcdFx0ICAgICBleHRyYV9jcmVkaXRzLFxuIFx0XHRcdFx0XHRcdCAgICAgZmFsc2UgLyogc2tpcF9xdW90YSAqLyk7XG4gXHR9XG5AQCAtMjk4NiwxMiAmIzQzOzI5ODQsMTIgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0ICAgICAgbGUzMl90b19jcHUoZW50cnktXHUwMDNlZV92YWx1ZV9zaXplKSk7XG4tXHRcdFx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0fVxuIFxuIFx0XHR9XG4gXG4tXHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCwgZWFfaW5vZGVfYXJyYXksXG4mIzQzO1x0XHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsXG4gXHRcdFx0XHRcdCBleHRyYV9jcmVkaXRzKTtcbiBcdFx0LypcbiBcdFx0ICogVXBkYXRlIGlfZmlsZV9hY2wgdmFsdWUgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gdGhhdCByZWxlYXNlc1xuQEAgLTMwMTMsMTYgJiM0MzszMDExLDYzIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi12b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkpXG4mIzQzOy8qXG4mIzQzOyAqIFdvcmtlciBmdW5jdGlvbiBmb3IgZGVmZXJyZWQgRUEgaW5vZGUgaXB1dC4gIFByb2Nlc3NlcyBhbGwgaW5vZGVzIHF1ZXVlZFxuJiM0MzsgKiBvbiBzX2VhX2lub2RlX3RvX2ZyZWUgaW4gYSBjb250ZXh0IGZyZWUgb2YgeGF0dHJfc2VtL2piZDIgaGFuZGxlIGxvY2tzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgZXh0NF9lYV9pbm9kZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4tXHRpbnQgaWR4O1xuJiM0MztcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksXG4mIzQzO1x0XHRcdFx0XHRcdHN0cnVjdCBleHQ0X3NiX2luZm8sXG4mIzQzO1x0XHRcdFx0XHRcdHNfZWFfaW5vZGVfd29yayk7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuIFxuLVx0aWYgKGVhX2lub2RlX2FycmF5ID09IE5VTEwpXG4mIzQzO1x0d2hpbGUgKG5vZGUpIHtcbiYjNDM7XHRcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gY29udGFpbmVyX29mKG5vZGUsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvLCBpX2VhX2lwdXRfbm9kZSk7XG4mIzQzO1x0XHRub2RlID0gbm9kZS1cdTAwM2VuZXh0O1xuJiM0MztcdFx0aXB1dChcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVsZWFzZSBhIFZGUyByZWZlcmVuY2Ugb24gYW4gRUEgaW5vZGUuICBNdXN0IGJlIHVzZWQgaW5zdGVhZCBvZiBpcHV0KClcbiYjNDM7ICogaW4gYW55IGNvbnRleHQgd2hlcmUgeGF0dHJfc2VtIG9yIGEgamJkMiBoYW5kbGUgaXMgaGVsZC5cbiYjNDM7ICpcbiYjNDM7ICogSWYgdGhpcyBpcyBub3QgdGhlIGxhc3QgcmVmZXJlbmNlLCBkcm9wcyBpdCBpbW1lZGlhdGVseSB2aWFcbiYjNDM7ICogaXB1dF9pZl9ub3RfbGFzdCgpIHdpdGggbm8gZnVydGhlciBhY3Rpb24gbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHJlZmVyZW5jZSwgdGhlIGlub2RlIGlzIGxpbmtlZCBvbnRvIGEgcGVyLXNiXG4mIzQzOyAqIGxsaXN0IHZpYSBpX2VhX2lwdXRfbm9kZSAoZW1iZWRkZWQgaW4gZXh0NF9pbm9kZV9pbmZvLCBzaGFyaW5nIHNwYWNlXG4mIzQzOyAqIHdpdGggdGhlIHVudXNlZCB4YXR0cl9zZW0pIGFuZCBhIGRlbGF5ZWQgd29ya2VyIHBlcmZvcm1zIHRoZSBmaW5hbFxuJiM0MzsgKiBpcHV0KCkgaW4gYSBjbGVhbiBjb250ZXh0LlxuJiM0MzsgKlxuJiM0MzsgKiBOb3RlOiB3aGlsZSBhbiBpbm9kZSBpcyBvbiBzX2VhX2lub2RlX3RvX2ZyZWUsIHRoZSB1bmNvbnN1bWVkIGlfY291bnRcbiYjNDM7ICogcmVmZXJlbmNlIChzdGlsbCAxKSBrZWVwcyBpdCBpbiB0aGUgaW5vZGUgY2FjaGUsIHNvIGFueSBjb25jdXJyZW50XG4mIzQzOyAqIGlnZXQoKSBidW1wcyBpX2NvdW50IHRvIFx1MDAzZT0gMiBhbmQgaXB1dF9pZl9ub3RfbGFzdCgpIHdpbGwgc3VjY2VlZC5cbiYjNDM7ICogTm9ib2R5IHdpbGwgYWRkIHRoZSBpbm9kZSBhIHNlY29uZCB0aW1lIHVudGlsIGV4dDRfZWFfaW5vZGVfd29yaygpXG4mIzQzOyAqIGRyb3BzIHRoYXQgcmVmZXJlbmNlIHZpYSBpcHV0KCkuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWlub2RlKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdFdBUk5fT05fT05DRSghKEVYVDRfSShpbm9kZSktXHUwMDNlaV9mbGFncyBcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpO1xuJiM0MztcdGlmIChpcHV0X2lmX25vdF9sYXN0KGlub2RlKSlcbiBcdFx0cmV0dXJuO1xuJiM0MztcdGxsaXN0X2FkZChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZWFfaXB1dF9ub2RlLFxuJiM0MztcdFx0ICBcdTAwMjZFWFQ0X1NCKHNiKS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVXNlIGEgc2hvcnQgZGVsYXkgdG8gYWxsb3cgbXVsdGlwbGUgRUEgaW5vZGVzIHRvIGFjY3VtdWxhdGUsXG4mIzQzO1x0ICogcmVkdWNpbmcgd29ya3F1ZXVlIHdha2V1cHMgd2hlbiBzZXZlcmFsIGFyZSByZWxlYXNlZCB0b2dldGhlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2RVhUNF9TQihzYiktXHUwMDNlc19lYV9pbm9kZV93b3JrLCAxKTtcbiYjNDM7fVxuIFxuLVx0Zm9yIChpZHggPSAwOyBpZHggXHUwMDNjIGVhX2lub2RlX2FycmF5LVx1MDAzZWNvdW50OyAmIzQzOyYjNDM7aWR4KVxuLVx0XHRpcHV0KGVhX2lub2RlX2FycmF5LVx1MDAzZWlub2Rlc1tpZHhdKTtcbi1cdGtmcmVlKGVhX2lub2RlX2FycmF5KTtcbiYjNDM7dm9pZCBleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXG4mIzQzO3tcbiYjNDM7XHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XG4mIzQzO1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yaywgZXh0NF9lYV9pbm9kZV93b3JrKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmggYi9mcy9leHQ0L3hhdHRyLmhcbmluZGV4IDFmZWRmNDRkNGZiNjVlLi41MThmMDI4M2UxNzQ0NCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC94YXR0ci5oXG5AQCAtMTMxLDExICYjNDM7MTMxLDYgQEAgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCB7XG4gXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4gfTtcbiBcbi1zdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSB7XG4tXHR1bnNpZ25lZCBpbnQgY291bnQ7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2Rlc1tdIF9fY291bnRlZF9ieShjb3VudCk7XG4tfTtcbi1cbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXI7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXI7XG5AQCAtMTg3LDkgJiM0MzsxODIsOSBAQCBleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0Ym9vbCBpc19jcmVhdGUpO1xuIFxuIGV4dGVybiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdCAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqYXJyYXksXG4gXHRcdFx0XHQgICBpbnQgZXh0cmFfY3JlZGl0cyk7XG4tZXh0ZXJuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICphcnJheSk7XG4mIzQzO2V4dGVybiB2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSk7XG4mIzQzO2V4dGVybiB2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFxuIGV4dGVybiBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbiBcdFx0XHQgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCBkMTA4OTdiM2ExZTM1MC4uMDRmMGRlNzhmYTdhODUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaFxuQEAgLTI0MTMsNiAmIzQzOzI0MTMsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIHN1cGVyX3NldF9zeXNmc19uYW1lX2dlbmVyaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hcbiBleHRlcm4gdm9pZCBpaG9sZChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7XG4gZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7XG4gdm9pZCBpcHV0X25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpcHV0X2lmX25vdF9sYXN0IC0gZHJvcCBhbiBpbm9kZSByZWZlcmVuY2Ugb25seSBpZiBpdCBpcyBub3QgdGhlIGxhc3Qgb25lXG4mIzQzOyAqIEBpbm9kZTogaW5vZGUgdG8gcHV0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVmZXJlbmNlIHdhcyBkcm9wcGVkLCBmYWxzZSBpZiB0aGlzIHdhcyB0aGUgbGFzdFxuJiM0MzsgKiByZWZlcmVuY2UgYW5kIHRoZSBjYWxsZXIgbXVzdCBhcnJhbmdlIGZvciBmaW5hbCBpcHV0KCkgaW4gYSBzYWZlIGNvbnRleHQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGlwdXRfaWZfbm90X2xhc3Qoc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBhdG9taWNfYWRkX3VubGVzcyhcdTAwMjZpbm9kZS1cdTAwM2VpX2NvdW50LCAtMSwgMSk7XG4mIzQzO31cbiYjNDM7XG4gaW50IGlub2RlX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSxcbiBcdFx0dW5zaWduZWQgaW50IGZsYWdzKTtcbiBpbnQgZ2VuZXJpY191cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfZGVsZXRlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfZWFfaW5vZGVfd29yayYjMzQ7LAogICAgJiMzNDtleHQ0X3B1dF9lYV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2Jsb2NrX3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lib2R5X3NldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gZm9yIGV4dDQgRUEgKEV4dGVuZGVkIEF0dHJpYnV0ZSkgaW5vZGVzIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzIGFuZCBkZWFkbG9ja3MuIEl0IG1vZGlmaWVzIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZyBhbmQgaW5vZGUgZXZpY3Rpb24gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVmMmY1ZTVmNDE3MDU5MjAwYjg2MDRjZWE0YjVjNDNlODZhZTZjOGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyOSAxMToyODoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggYjM3YzEzNmVhM2FiMzMuLmI5YjBhZGE3Nzc0YmI0IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaApAQCAtMTA3MCw4ICYjNDM7MTA3MCwxNCBAQCBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHsKIAkgKiBiZXR3ZWVuIHJlYWRlcnMgb2YgRUFzIGFuZCB3cml0ZXJzIG9mIHJlZ3VsYXIgZmlsZSBkYXRhLCBzbwogCSAqIGluc3RlYWQgd2Ugc3luY2hyb25pemUgb24geGF0dHJfc2VtIHdoZW4gcmVhZGluZyBvciBjaGFuZ2luZwogCSAqIEVBcy4KJiM0MzsJICoKJiM0MzsJICogRUEgaW5vZGVzIChFWFQ0X0VBX0lOT0RFX0ZMKSBkbyBub3QgdXNlIHhhdHRyX3NlbTsgdGhleSByZXVzZQomIzQzOwkgKiB0aGUgc3BhY2UgZm9yIGRlZmVycmVkIGlwdXQgbGlua2FnZS4KIAkgKi8KLQlzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTsKJiM0MzsJdW5pb24gewomIzQzOwkJc3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07CiYjNDM7CQlzdHJ1Y3QgbGxpc3Rfbm9kZSBpX2VhX2lwdXRfbm9kZTsKJiM0MzsJfTsKIAogCS8qCiAJICogSW5vZGVzIHdpdGggRVhUNF9TVEFURV9PUlBIQU5fRklMRSB1c2UgaV9vcnBoYW5faWR4LiBPdGhlcndpc2UKQEAgLTE3NzAsNiAmIzQzOzE3NzYsMTEgQEAgc3RydWN0IGV4dDRfc2JfaW5mbyB7CiAJc3RydWN0IGV4dDRfZXNfc3RhdHMgc19lc19zdGF0czsKIAlzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfYmxvY2tfY2FjaGU7CiAJc3RydWN0IG1iX2NhY2hlICpzX2VhX2lub2RlX2NhY2hlOwomIzQzOwomIzQzOwkvKiBEZWZlcnJlZCBpcHV0IGZvciBFQSBpbm9kZXMgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMgKi8KJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQgc19lYV9pbm9kZV90b19mcmVlOwomIzQzOwlzdHJ1Y3QgZGVsYXllZF93b3JrIHNfZWFfaW5vZGVfd29yazsKJiM0MzsKIAlzcGlubG9ja190IHNfZXNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCiAJLyogSm91cm5hbCB0cmlnZ2VycyBmb3IgY2hlY2tzdW0gY29tcHV0YXRpb24gKi8KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCBjZTk5ODA3YzVmNWIyYy4uNzQ3YzUyYzIzMmNjMDMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTE3Niw3ICYjNDM7MTc2LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJICogKHhhdHRyIGJsb2NrIGZyZWVpbmcpLCBiaXRtYXAsIGdyb3VwIGRlc2NyaXB0b3IgKGlub2RlIGZyZWVpbmcpCiAJICovCiAJaW50IGV4dHJhX2NyZWRpdHMgPSA2OwotCXN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7CiAJYm9vbCBmcmVlemVfcHJvdGVjdGVkID0gZmFsc2U7CiAKIAl0cmFjZV9leHQ0X2V2aWN0X2lub2RlKGlub2RlKTsKQEAgLTI4MSw4ICYjNDM7MjgwLDcgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJfQogCiAJLyogUmVtb3ZlIHhhdHRyIHJlZmVyZW5jZXMuICovCi0JZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgJmFtcDtlYV9pbm9kZV9hcnJheSwKLQkJCQkgICAgICBleHRyYV9jcmVkaXRzKTsKJiM0MzsJZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgZXh0cmFfY3JlZGl0cyk7CiAJaWYgKGVycikgewogCQlleHQ0X3dhcm5pbmcoaW5vZGUtJmd0O2lfc2IsICYjMzQ7eGF0dHIgZGVsZXRlIChlcnIgJWQpJiMzNDssIGVycik7CiBzdG9wX2hhbmRsZToKQEAgLTI5MCw3ICYjNDM7Mjg4LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJCWV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7CiAJCWlmIChmcmVlemVfcHJvdGVjdGVkKQogCQkJc2JfZW5kX2ludHdyaXRlKGlub2RlLSZndDtpX3NiKTsKLQkJZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTsKIAkJZ290byBub19kZWxldGU7CiAJfQogCkBAIC0zMjAsNyAmIzQzOzMxNyw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CiAJaWYgKGZyZWV6ZV9wcm90ZWN0ZWQpCiAJCXNiX2VuZF9pbnR3cml0ZShpbm9kZS0mZ3Q7aV9zYik7Ci0JZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTsKIAlyZXR1cm47CiBub19kZWxldGU6CiAJLyoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCAyNDVmNjdkMTBkZWQzNC4uM2VmYTVhODE3YmVmNGYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTEzMDMsNiAmIzQzOzEzMDMsOCBAQCBzdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCQkJICZhbXA7c2ItJmd0O3NfdXVpZCk7CiAKIAlleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7CiYjNDM7CS8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIHdoaWxlIHF1b3RhIGlzIHN0aWxsIGFjdGl2ZS4gKi8KJiM0MzsJZmx1c2hfZGVsYXllZF93b3JrKCZhbXA7c2JpLSZndDtzX2VhX2lub2RlX3dvcmspOwogCWV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpOwogCiAJZGVzdHJveV93b3JrcXVldWUoc2JpLSZndDtyc3ZfY29udmVyc2lvbl93cSk7CkBAIC0xNDIzLDYgJiM0MzsxNDI1LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAltZW1zZXQoJmFtcDtlaS0mZ3Q7aV9kcXVvdCwgMCwgc2l6ZW9mKGVpLSZndDtpX2RxdW90KSk7CiAjZW5kaWYKIAllaS0mZ3Q7amlub2RlID0gTlVMTDsKJiM0MzsJLyoKJiM0MzsJICogUmVpbml0aWFsaXplIHhhdHRyX3NlbSBldmVyeSBhbGxvY2F0aW9uIGJlY2F1c2UgRUEgaW5vZGVzCiYjNDM7CSAqIHNoYXJlIHRoaXMgc3BhY2Ugd2l0aCBpX2VhX2lwdXRfbm9kZSAodmlhIHVuaW9uKSB3aGljaCBtYXkKJiM0MzsJICogaGF2ZSBvdmVyd3JpdHRlbiB0aGUgc2VtYXBob3JlIHdoZW4gdGhlIHNsYWIgb2JqZWN0IHdhcwomIzQzOwkgKiBwcmV2aW91c2x5IHVzZWQgYXMgYW4gRUEgaW5vZGUuCiYjNDM7CSAqLwomIzQzOwlpbml0X3J3c2VtKCZhbXA7ZWktJmd0O3hhdHRyX3NlbSk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtlaS0mZ3Q7aV9yc3ZfY29udmVyc2lvbl9saXN0KTsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2VpLSZndDtpX2NvbXBsZXRlZF9pb19sb2NrKTsKIAllaS0mZ3Q7aV9zeW5jX3RpZCA9IDA7CkBAIC0xNDg4LDcgJiM0MzsxNDk3LDYgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbykKIAlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGZvbzsKIAogCUlOSVRfTElTVF9IRUFEKCZhbXA7ZWktJmd0O2lfb3JwaGFuKTsKLQlpbml0X3J3c2VtKCZhbXA7ZWktJmd0O3hhdHRyX3NlbSk7CiAJaW5pdF9yd3NlbSgmYW1wO2VpLSZndDtpX2RhdGFfc2VtKTsKIAlpbm9kZV9pbml0X29uY2UoJmFtcDtlaS0mZ3Q7dmZzX2lub2RlKTsKIAlleHQ0X2ZjX2luaXRfaW5vZGUoJmFtcDtlaS0mZ3Q7dmZzX2lub2RlKTsKQEAgLTU0OTcsNiAmIzQzOzU1MDUsOCBAQCBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAkJCSAgZXh0NF9oYXNfZmVhdHVyZV9vcnBoYW5fcHJlc2VudChzYikgfHwKIAkJCSAgZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsX25lZWRzX3JlY292ZXJ5KHNiKSk7CiAKJiM0MzsJZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc2JpKTsKJiM0MzsKIAlpZiAoZXh0NF9oYXNfZmVhdHVyZV9tbXAoc2IpICZhbXA7JmFtcDsgIXNiX3Jkb25seShzYikpIHsKIAkJZXJyID0gZXh0NF9tdWx0aV9tb3VudF9wcm90ZWN0KHNiLCBsZTY0X3RvX2NwdShlcy0mZ3Q7c19tbXBfYmxvY2spKTsKIAkJaWYgKGVycikKQEAgLTU3NDcsNiAmIzQzOzU3NTcsOCBAQCBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAlyZXR1cm4gMDsKIAogZmFpbGVkX21vdW50OToKJiM0MzsJLyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIHF1b3RhIHNodXRkb3duICovCiYjNDM7CWZsdXNoX2RlbGF5ZWRfd29yaygmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV93b3JrKTsKIAlleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTsKIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkCiAJZXh0NF9yZWxlYXNlX29ycGhhbl9pbmZvKHNiKTsKQEAgLTU3NjcsNiAmIzQzOzU3NzksOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZAogCWlmIChFWFQ0X1NCKHNiKS0mZ3Q7cnN2X2NvbnZlcnNpb25fd3EpCiAJCWRlc3Ryb3lfd29ya3F1ZXVlKEVYVDRfU0Ioc2IpLSZndDtyc3ZfY29udmVyc2lvbl93cSk7CiBmYWlsZWRfbW91bnRfd3E6CiYjNDM7CS8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi8KJiM0MzsJZmx1c2hfZGVsYXllZF93b3JrKCZhbXA7c2JpLSZndDtzX2VhX2lub2RlX3dvcmspOwogCWV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktJmd0O3NfZWFfaW5vZGVfY2FjaGUpOwogCXNiaS0mZ3Q7c19lYV9pbm9kZV9jYWNoZSA9IE5VTEw7CiAKQEAgLTU3NzcsNiAmIzQzOzU3OTEsOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZAogCQlleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS0mZ3Q7c19qb3VybmFsKTsKIAl9CiBmYWlsZWRfbW91bnQzYToKJiM0MzsJLyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqLwomIzQzOwlmbHVzaF9kZWxheWVkX3dvcmsoJmFtcDtzYmktJmd0O3NfZWFfaW5vZGVfd29yayk7CiAJZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7CiBmYWlsZWRfbW91bnQzOgogCS8qIGZsdXNoIHNfc2JfdXBkX3dvcmsgYmVmb3JlIHNiaSBkZXN0cm95ICovCmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmMKaW5kZXggOTgyYTFmODMxZTIyODIuLjg1YWQyNTYxNDc0YjZlIDEwMDY0NAotLS0gYS9mcy9leHQ0L3hhdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC94YXR0ci5jCkBAIC0xMTQsMTAgJiM0MzsxMTQsNiBAQCBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHsKICNkZWZpbmUgRUFfSU5PREVfQ0FDSEUoaW5vZGUpCSgoKHN0cnVjdCBleHQ0X3NiX2luZm8gKikgXAogCQkJCWlub2RlLSZndDtpX3NiLSZndDtzX2ZzX2luZm8pLSZndDtzX2VhX2lub2RlX2NhY2hlKQogCi1zdGF0aWMgaW50Ci1leHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LAotCQkJc3RydWN0IGlub2RlICppbm9kZSk7Ci0KICNpZmRlZiBDT05GSUdfTE9DS0RFUAogdm9pZCBleHQ0X3hhdHRyX2lub2RlX3NldF9jbGFzcyhzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlKQogewpAQCAtNTY3LDcgJiM0Mzs1NjMsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZW50cnksCiAJCQkJCWVhX2lub2RlLSZndDtpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7CiAJfQogb3V0OgotCWlwdXQoZWFfaW5vZGUpOwomIzQzOwlleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTExMDQsMTAgJiM0MzsxMTAwLDEwIEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCwKIAkJZXJyID0gZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpOwogCQlpZiAoZXJyKSB7CiAJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsICYjMzQ7aW5jIHJlZiBlcnJvciAlZCYjMzQ7LCBlcnIpOwotCQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJCQlnb3RvIGNsZWFudXA7CiAJCX0KLQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQlleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAl9CiAJcmV0dXJuIDA7CiAKQEAgLTExMzMsNyAmIzQzOzExMjksNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWlmIChlcnIpCiAJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsICYjMzQ7Y2xlYW51cCBkZWMgcmVmIGVycm9yICVkJiMzNDssCiAJCQkJCSAgIGVycik7Ci0JCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJfQogCXJldHVybiBzYXZlZF9lcnI7CiB9CkBAIC0xMTU2LDExICYjNDM7MTE1MiwyOSBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfcmVzdGFydF9mbihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybiAwOwogfQogCiYjNDM7LyogVHJhY2sgYW4gRUEgaW5vZGUgbnVtYmVyIGluIHRoZSBkZWR1cCBhcnJheSwgZXhwYW5kaW5nIGlmIG5lZWRlZC4gKi8KJiM0MztzdGF0aWMgdm9pZCBlYV9pbm9fYXJyYXlfYWRkKHVuc2lnbmVkIGludCAqKmVhX2lub3MsIHVuc2lnbmVkIGludCAqbnIsCiYjNDM7CQkJICAgICB1bnNpZ25lZCBpbnQgKnNpemUsIHVuc2lnbmVkIGludCAqaW5saW5lX2FyciwKJiM0MzsJCQkgICAgIHVuc2lnbmVkIGludCBpbm8pCiYjNDM7ewomIzQzOwlpZiAoKm5yID09ICpzaXplKSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgbmV3X3NpemUgPSAqc2l6ZSAqIDI7CiYjNDM7CQl1bnNpZ25lZCBpbnQgKnA7CiYjNDM7CiYjNDM7CQlwID0ga21hbGxvY19hcnJheShuZXdfc2l6ZSwgc2l6ZW9mKCpwKSwgR0ZQX05PRlMgfCBfX0dGUF9OT0ZBSUwpOwomIzQzOwkJbWVtY3B5KHAsICplYV9pbm9zLCAqbnIgKiBzaXplb2YoKnApKTsKJiM0MzsJCWlmICgqZWFfaW5vcyAhPSBpbmxpbmVfYXJyKQomIzQzOwkJCWtmcmVlKCplYV9pbm9zKTsKJiM0MzsJCSplYV9pbm9zID0gcDsKJiM0MzsJCSpzaXplID0gbmV3X3NpemU7CiYjNDM7CX0KJiM0MzsJKCplYV9pbm9zKVsoKm5yKSYjNDM7JiM0MztdID0gaW5vOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkCiBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3QsIGJvb2wgYmxvY2tfY3N1bSwKLQkJCSAgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKIAkJCSAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlOwpAQCAtMTE3MSw2ICYjNDM7MTE4NSwxMCBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCWludCBlcnI7CiAJaW50IGNyZWRpdHM7CiAJdm9pZCAqZW5kOwomIzQzOwl1bnNpZ25lZCBpbnQgZWFfaW5vc19pbmxpbmVbMzJdOwomIzQzOwl1bnNpZ25lZCBpbnQgKmVhX2lub3MgPSBlYV9pbm9zX2lubGluZTsKJiM0MzsJdW5zaWduZWQgaW50IG5yX2VhX2lub3MgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgZWFfaW5vc19zaXplID0gQVJSQVlfU0laRShlYV9pbm9zX2lubGluZSk7CiAKIAlpZiAoYmxvY2tfY3N1bSkKIAkJZW5kID0gKHZvaWQgKiliaC0mZ3Q7Yl9kYXRhICYjNDM7IGJoLSZndDtiX3NpemU7CkBAIC0xMTg4LDIzICYjNDM7MTIwNiwzMCBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCiAJZm9yIChlbnRyeSA9IGZpcnN0OyAodm9pZCAqKWVudHJ5ICZsdDsgZW5kICZhbXA7JmFtcDsgIUlTX0xBU1RfRU5UUlkoZW50cnkpOwogCSAgICAgZW50cnkgPSBFWFQ0X1hBVFRSX05FWFQoZW50cnkpKSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgaTsKJiM0MzsKIAkJaWYgKCFlbnRyeS0mZ3Q7ZV92YWx1ZV9pbnVtKQogCQkJY29udGludWU7CiAJCWVhX2lubyA9IGxlMzJfdG9fY3B1KGVudHJ5LSZndDtlX3ZhbHVlX2ludW0pOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFNraXAgRUEgaW5vZGVzIHdlIGFscmVhZHkgcHJvY2Vzc2VkLiAgT24gYSBjb3JydXB0ZWQgZnMsCiYjNDM7CQkgKiBkdXBsaWNhdGUgZW50cmllcyBtYXkgcG9pbnQgdG8gdGhlIHNhbWUgRUEgaW5vZGU7IHdpdGhvdXQKJiM0MzsJCSAqIHRoaXMgY2hlY2ssIHRoZSBzZWNvbmQgaWdldCBjb3VsZCBkZWFkbG9jayBvbiBJX0ZSRUVJTkcKJiM0MzsJCSAqIGlmIHRoZSBkZWZlcnJlZCB3b3JrZXIgYWxyZWFkeSBzdGFydGVkIGV2aWN0aW5nIGl0LgomIzQzOwkJICovCiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgbnJfZWFfaW5vczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJaWYgKGVhX2lub3NbaV0gPT0gZWFfaW5vKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCWlmIChpICZsdDsgbnJfZWFfaW5vcykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKIAkJZXJyID0gZXh0NF94YXR0cl9pbm9kZV9pZ2V0KHBhcmVudCwgZWFfaW5vLAogCQkJCQkgICAgbGUzMl90b19jcHUoZW50cnktJmd0O2VfaGFzaCksCiAJCQkJCSAgICAmYW1wO2VhX2lub2RlKTsKIAkJaWYgKGVycikKIAkJCWNvbnRpbnVlOwogCi0JCWVyciA9IGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KGVhX2lub2RlX2FycmF5LCBlYV9pbm9kZSk7Ci0JCWlmIChlcnIpIHsKLQkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwKLQkJCQkJICAgJiMzNDtFeHBhbmQgaW5vZGUgYXJyYXkgZXJyPSVkJiMzNDssIGVycik7Ci0JCQlpcHV0KGVhX2lub2RlKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KIAkJZXJyID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzX2ZuKGhhbmRsZSwgY3JlZGl0cywgY3JlZGl0cywKIAkJCWV4dDRfZnJlZV9tZXRhZGF0YV9yZXZva2VfY3JlZGl0cyhwYXJlbnQtJmd0O2lfc2IsIDEpLAogCQkJZXh0NF94YXR0cl9yZXN0YXJ0X2ZuKGhhbmRsZSwgcGFyZW50LCBiaCwgYmxvY2tfY3N1bSwKQEAgLTEyMTIsNiAmIzQzOzEyMzcsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQlpZiAoZXJyICZsdDsgMCkgewogCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCAmIzM0O0Vuc3VyZSBjcmVkaXRzIGVycj0lZCYjMzQ7LAogCQkJCQkgICBlcnIpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKGVyciAmZ3Q7IDApIHsKQEAgLTEyMjEsNiAmIzQzOzEyNDcsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwKIAkJCQkJCSYjMzQ7UmUtZ2V0IHdyaXRlIGFjY2VzcyBlcnI9JWQmIzM0OywKIAkJCQkJCWVycik7CiYjNDM7CQkJCWV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQl9CkBAIC0xMjI5LDYgJiM0MzsxMjU2LDEyIEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWlmIChlcnIpIHsKIAkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgJiMzNDtlYV9pbm9kZSBkZWMgcmVmIGVycj0lZCYjMzQ7LAogCQkJCQkgICBlcnIpOwomIzQzOwkJCS8qIFRyYWNrIGlmIG5saW5rPT0wIHRvIHNraXAgZHVwbGljYXRlcyAoZXZpY3Rpb24gcmlzaykgKi8KJiM0MzsJCQlpZiAoIWVhX2lub2RlLSZndDtpX25saW5rKQomIzQzOwkJCQllYV9pbm9fYXJyYXlfYWRkKCZhbXA7ZWFfaW5vcywgJmFtcDtucl9lYV9pbm9zLAomIzQzOwkJCQkJCSAmYW1wO2VhX2lub3Nfc2l6ZSwgZWFfaW5vc19pbmxpbmUsIGVhX2lubyk7CiYjNDM7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0xMjQ1LDkgJiM0MzsxMjc4LDIyIEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWVudHJ5LSZndDtlX3ZhbHVlX2ludW0gPSAwOwogCQllbnRyeS0mZ3Q7ZV92YWx1ZV9zaXplID0gMDsKIAomIzQzOwkJLyoKJiM0MzsJCSAqIFRyYWNrIG5saW5rPT0wIEVBIGlub2RlcyB0byBza2lwIGR1cGxpY2F0ZXMgbGF0ZXIgLS0KJiM0MzsJCSAqIHRoZXkgcmlzayBJX0ZSRUVJTkcgZGVhZGxvY2sgb24gcmUtaWdldC4KJiM0MzsJCSAqIENoZWNrIG5saW5rIGJlZm9yZSBwdXQgc2luY2UgcHV0IHJlbGVhc2VzIG91ciByZWZlcmVuY2UuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghZWFfaW5vZGUtJmd0O2lfbmxpbmspCiYjNDM7CQkJZWFfaW5vX2FycmF5X2FkZCgmYW1wO2VhX2lub3MsICZhbXA7bnJfZWFfaW5vcywKJiM0MzsJCQkJCSAmYW1wO2VhX2lub3Nfc2l6ZSwgZWFfaW5vc19pbmxpbmUsIGVhX2lubyk7CiYjNDM7CiYjNDM7CQlleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAkJZGlydHkgPSB0cnVlOwogCX0KIAomIzQzOwlpZiAoZWFfaW5vcyAhPSBlYV9pbm9zX2lubGluZSkKJiM0MzsJCWtmcmVlKGVhX2lub3MpOwomIzQzOwogCWlmIChkaXJ0eSkgewogCQkvKgogCQkgKiBOb3RlIHRoYXQgd2UgYXJlIGRlbGliZXJhdGVseSBza2lwcGluZyBjc3VtIGNhbGN1bGF0aW9uIGZvcgpAQCAtMTI3MSw3ICYjNDM7MTMxNyw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiBzdGF0aWMgdm9pZAogZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKLQkJCSBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LAogCQkJIGludCBleHRyYV9jcmVkaXRzKQogewogCXN0cnVjdCBtYl9jYWNoZSAqZWFfYmxvY2tfY2FjaGUgPSBFQV9CTE9DS19DQUNIRShpbm9kZSk7CkBAIC0xMzEzLDcgJiM0MzsxMzU4LDYgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLAogCQkJCQkJICAgICBCRklSU1QoYmgpLAogCQkJCQkJICAgICB0cnVlIC8qIGJsb2NrX2NzdW0gKi8sCi0JCQkJCQkgICAgIGVhX2lub2RlX2FycmF5LAogCQkJCQkJICAgICBleHRyYV9jcmVkaXRzLAogCQkJCQkJICAgICB0cnVlIC8qIHNraXBfcXVvdGEgKi8pOwogCQlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGJoLCAwLCAxLApAQCAtMTUwNSw3ICYjNDM7MTU0OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsCiAJCQlpZiAoZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpKQogCQkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwKIAkJCQkJJiMzNDtjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWQmIzM0OywgZXJyKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGlub2RlLSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCQl9CiAKQEAgLTE1NjQsNyAmIzQzOzE2MDgsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqdmFsdWUsCiAJCQlrdmZyZWUoZWFfZGF0YSk7CiAJCQlyZXR1cm4gZWFfaW5vZGU7CiAJCX0KLQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQlleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCW5leHRfZW50cnk6CiAJCWNlID0gbWJfY2FjaGVfZW50cnlfZmluZF9uZXh0KGVhX2lub2RlX2NhY2hlLCBjZSk7CiAJfQpAQCAtMTYxNSw3ICYjNDM7MTY1OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLAogCQkJCSAgICAgIGVhX2lub2RlLSZndDtpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7CiAJcmV0dXJuIGVhX2lub2RlOwogb3V0X2VycjoKLQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAlleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIE5VTEwsIHZhbHVlX2xlbik7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KQEAgLTE4NDgsNyAmIzQzOzE4OTIsNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfc2V0X2VudHJ5KHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gKmksCiAKIAlyZXQgPSAwOwogb3V0OgotCWlwdXQob2xkX2VhX2lub2RlKTsKJiM0MzsJZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIG9sZF9lYV9pbm9kZSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjAxMCw3ICYjNDM7MjA1NCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJb2xkX2VhX2lub2RlX3F1b3RhID0gbGUzMl90b19jcHUoCiAJCQkJCQlzLSZndDtoZXJlLSZndDtlX3ZhbHVlX3NpemUpOwogCQkJfQotCQkJaXB1dCh0bXBfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGlub2RlLSZndDtpX3NiLCB0bXBfaW5vZGUpOwogCiAJCQlzLSZndDtoZXJlLSZndDtlX3ZhbHVlX2ludW0gPSAwOwogCQkJcy0mZ3Q7aGVyZS0mZ3Q7ZV92YWx1ZV9zaXplID0gMDsKQEAgLTIxNTAsNyAmIzQzOzIxOTQsNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsCiAJCQkJCQkJICAgJiMzNDtkZWMgcmVmIGVycm9yPSVkJiMzNDssCiAJCQkJCQkJICAgZXJyb3IpOwotCQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCQlleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCQkJCWVhX2lub2RlID0gTlVMTDsKIAkJCX0KIApAQCAtMjE4MiwxMiAmIzQzOzIyMjYsOCBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCiAJLyogRHJvcCB0aGUgcHJldmlvdXMgeGF0dHIgYmxvY2suICovCiAJaWYgKGJzLSZndDtiaCAmYW1wOyZhbXA7IGJzLSZndDtiaCAhPSBuZXdfYmgpIHsKLQkJc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDsKLQogCQlleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYnMtJmd0O2JoLAotCQkJCQkgJmFtcDtlYV9pbm9kZV9hcnJheSwKIAkJCQkJIDAgLyogZXh0cmFfY3JlZGl0cyAqLyk7Ci0JCWV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7CiAJfQogCWVycm9yID0gMDsKIApAQCAtMjIwMyw3ICYjNDM7MjI0Myw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLAogCQkJCQkJICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7CiAJCX0KLQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQlleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCX0KIAlpZiAoY2UpCiAJCW1iX2NhY2hlX2VudHJ5X3B1dChlYV9ibG9ja19jYWNoZSwgY2UpOwpAQCAtMjI4NSw3ICYjNDM7MjMyNSw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCiAJCQlleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLAogCQkJCQkJICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7Ci0JCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCQlleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCQl9CiAJCXJldHVybiBlcnJvcjsKIAl9CkBAIC0yMjk3LDcgJiM0MzsyMzM3LDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCWhlYWRlci0mZ3Q7aF9tYWdpYyA9IGNwdV90b19sZTMyKDApOwogCQlleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKTsKIAl9Ci0JaXB1dChlYV9pbm9kZSk7CiYjNDM7CWV4dDRfcHV0X2VhX2lub2RlKGlub2RlLSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4NjMsNDYgJiM0MzsyOTAzLDYgQEAgaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsCiAJcmV0dXJuIGVycm9yOwogfQogCi0jZGVmaW5lIEVJQV9JTkNSIDE2IC8qIG11c3QgYmUgMl5uICovCi0jZGVmaW5lIEVJQV9NQVNLIChFSUFfSU5DUiAtIDEpCi0KLS8qIEFkZCB0aGUgbGFyZ2UgeGF0dHIgQGlub2RlIGludG8gQGVhX2lub2RlX2FycmF5IGZvciBkZWZlcnJlZCBpcHV0KCkuCi0gKiBJZiBAZWFfaW5vZGVfYXJyYXkgaXMgbmV3IG9yIGZ1bGwgaXQgd2lsbCBiZSBncm93biBhbmQgdGhlIG9sZAotICogY29udGVudHMgY29waWVkIG92ZXIuCi0gKi8KLXN0YXRpYyBpbnQKLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCi0JCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkgewotCQkvKgotCQkgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuCi0JCSAqLwotCQkoKmVhX2lub2RlX2FycmF5KSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsCi0JCQkJCQkgRUlBX01BU0ssIEdGUF9OT0ZTKTsKLQkJaWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCSgqZWFfaW5vZGVfYXJyYXkpLSZndDtjb3VudCA9IDA7Ci0JfSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50ICZhbXA7IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykgewotCQkvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICYjNDM7IG4gKiAxNiBzbG90cyBhcmUgZnVsbCAqLwotCQlzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqbmV3X2FycmF5ID0gTlVMTDsKLQotCQluZXdfYXJyYXkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLAotCQkJCQkgKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50ICYjNDM7IEVJQV9JTkNSLAotCQkJCQkgR0ZQX05PRlMpOwotCQlpZiAobmV3X2FycmF5ID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJbWVtY3B5KG5ld19hcnJheSwgKmVhX2lub2RlX2FycmF5LAotCQkgICAgICAgc3RydWN0X3NpemUoKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsCi0JCQkJICAgKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50KSk7Ci0JCWtmcmVlKCplYV9pbm9kZV9hcnJheSk7Ci0JCSplYV9pbm9kZV9hcnJheSA9IG5ld19hcnJheTsKLQl9Ci0JKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50JiM0MzsmIzQzOzsKLQkoKmVhX2lub2RlX2FycmF5KS0mZ3Q7aW5vZGVzWygqZWFfaW5vZGVfYXJyYXkpLSZndDtjb3VudCAtIDFdID0gaW5vZGU7Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSgpCiAgKgpAQCAtMjkxMyw3ICYjNDM7MjkxMyw2IEBAIGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCiAgKiByZWZlcmVuY2VzIG9uIHhhdHRyIGJsb2NrIGFuZCB4YXR0ciBpbm9kZXMuCiAgKi8KIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCiAJCQkgICAgaW50IGV4dHJhX2NyZWRpdHMpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CkBAIC0yOTUyLDcgJiM0MzsyOTUxLDYgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGlsb2MuYmgsCiAJCQkJCQkgICAgIElGSVJTVChoZWFkZXIpLAogCQkJCQkJICAgICBmYWxzZSAvKiBibG9ja19jc3VtICovLAotCQkJCQkJICAgICBlYV9pbm9kZV9hcnJheSwKIAkJCQkJCSAgICAgZXh0cmFfY3JlZGl0cywKIAkJCQkJCSAgICAgZmFsc2UgLyogc2tpcF9xdW90YSAqLyk7CiAJfQpAQCAtMjk4NiwxMiAmIzQzOzI5ODQsMTIgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCWNvbnRpbnVlOwogCQkJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsCiAJCQkJCSAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LSZndDtlX3ZhbHVlX3NpemUpKTsKLQkJCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCQkJZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAkJCX0KIAogCQl9CiAKLQkJZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLCBlYV9pbm9kZV9hcnJheSwKJiM0MzsJCWV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCwKIAkJCQkJIGV4dHJhX2NyZWRpdHMpOwogCQkvKgogCQkgKiBVcGRhdGUgaV9maWxlX2FjbCB2YWx1ZSBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiB0aGF0IHJlbGVhc2VzCkBAIC0zMDEzLDE2ICYjNDM7MzAxMSw2MyBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSkKJiM0MzsvKgomIzQzOyAqIFdvcmtlciBmdW5jdGlvbiBmb3IgZGVmZXJyZWQgRUEgaW5vZGUgaXB1dC4gIFByb2Nlc3NlcyBhbGwgaW5vZGVzIHF1ZXVlZAomIzQzOyAqIG9uIHNfZWFfaW5vZGVfdG9fZnJlZSBpbiBhIGNvbnRleHQgZnJlZSBvZiB4YXR0cl9zZW0vamJkMiBoYW5kbGUgbG9ja3MuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZXh0NF9lYV9pbm9kZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlpbnQgaWR4OwomIzQzOwlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLAomIzQzOwkJCQkJCXN0cnVjdCBleHQ0X3NiX2luZm8sCiYjNDM7CQkJCQkJc19lYV9pbm9kZV93b3JrKTsKJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgKm5vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7c2JpLSZndDtzX2VhX2lub2RlX3RvX2ZyZWUpOwogCi0JaWYgKGVhX2lub2RlX2FycmF5ID09IE5VTEwpCiYjNDM7CXdoaWxlIChub2RlKSB7CiYjNDM7CQlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGNvbnRhaW5lcl9vZihub2RlLAomIzQzOwkJCQkJc3RydWN0IGV4dDRfaW5vZGVfaW5mbywgaV9lYV9pcHV0X25vZGUpOwomIzQzOwkJbm9kZSA9IG5vZGUtJmd0O25leHQ7CiYjNDM7CQlpcHV0KCZhbXA7ZWktJmd0O3Zmc19pbm9kZSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZWxlYXNlIGEgVkZTIHJlZmVyZW5jZSBvbiBhbiBFQSBpbm9kZS4gIE11c3QgYmUgdXNlZCBpbnN0ZWFkIG9mIGlwdXQoKQomIzQzOyAqIGluIGFueSBjb250ZXh0IHdoZXJlIHhhdHRyX3NlbSBvciBhIGpiZDIgaGFuZGxlIGlzIGhlbGQuCiYjNDM7ICoKJiM0MzsgKiBJZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCByZWZlcmVuY2UsIGRyb3BzIGl0IGltbWVkaWF0ZWx5IHZpYQomIzQzOyAqIGlwdXRfaWZfbm90X2xhc3QoKSB3aXRoIG5vIGZ1cnRoZXIgYWN0aW9uIG5lZWRlZC4KJiM0MzsgKgomIzQzOyAqIElmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLCB0aGUgaW5vZGUgaXMgbGlua2VkIG9udG8gYSBwZXItc2IKJiM0MzsgKiBsbGlzdCB2aWEgaV9lYV9pcHV0X25vZGUgKGVtYmVkZGVkIGluIGV4dDRfaW5vZGVfaW5mbywgc2hhcmluZyBzcGFjZQomIzQzOyAqIHdpdGggdGhlIHVudXNlZCB4YXR0cl9zZW0pIGFuZCBhIGRlbGF5ZWQgd29ya2VyIHBlcmZvcm1zIHRoZSBmaW5hbAomIzQzOyAqIGlwdXQoKSBpbiBhIGNsZWFuIGNvbnRleHQuCiYjNDM7ICoKJiM0MzsgKiBOb3RlOiB3aGlsZSBhbiBpbm9kZSBpcyBvbiBzX2VhX2lub2RlX3RvX2ZyZWUsIHRoZSB1bmNvbnN1bWVkIGlfY291bnQKJiM0MzsgKiByZWZlcmVuY2UgKHN0aWxsIDEpIGtlZXBzIGl0IGluIHRoZSBpbm9kZSBjYWNoZSwgc28gYW55IGNvbmN1cnJlbnQKJiM0MzsgKiBpZ2V0KCkgYnVtcHMgaV9jb3VudCB0byAmZ3Q7PSAyIGFuZCBpcHV0X2lmX25vdF9sYXN0KCkgd2lsbCBzdWNjZWVkLgomIzQzOyAqIE5vYm9keSB3aWxsIGFkZCB0aGUgaW5vZGUgYSBzZWNvbmQgdGltZSB1bnRpbCBleHQ0X2VhX2lub2RlX3dvcmsoKQomIzQzOyAqIGRyb3BzIHRoYXQgcmVmZXJlbmNlIHZpYSBpcHV0KCkuCiYjNDM7ICovCiYjNDM7dm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJaWYgKCFpbm9kZSkKJiM0MzsJCXJldHVybjsKJiM0MzsJV0FSTl9PTl9PTkNFKCEoRVhUNF9JKGlub2RlKS0mZ3Q7aV9mbGFncyAmYW1wOyBFWFQ0X0VBX0lOT0RFX0ZMKSk7CiYjNDM7CWlmIChpcHV0X2lmX25vdF9sYXN0KGlub2RlKSkKIAkJcmV0dXJuOwomIzQzOwlsbGlzdF9hZGQoJmFtcDtFWFQ0X0koaW5vZGUpLSZndDtpX2VhX2lwdXRfbm9kZSwKJiM0MzsJCSAgJmFtcDtFWFQ0X1NCKHNiKS0mZ3Q7c19lYV9pbm9kZV90b19mcmVlKTsKJiM0MzsJLyoKJiM0MzsJICogVXNlIGEgc2hvcnQgZGVsYXkgdG8gYWxsb3cgbXVsdGlwbGUgRUEgaW5vZGVzIHRvIGFjY3VtdWxhdGUsCiYjNDM7CSAqIHJlZHVjaW5nIHdvcmtxdWV1ZSB3YWtldXBzIHdoZW4gc2V2ZXJhbCBhcmUgcmVsZWFzZWQgdG9nZXRoZXIuCiYjNDM7CSAqLwomIzQzOwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFtcDtFWFQ0X1NCKHNiKS0mZ3Q7c19lYV9pbm9kZV93b3JrLCAxKTsKJiM0Mzt9CiAKLQlmb3IgKGlkeCA9IDA7IGlkeCAmbHQ7IGVhX2lub2RlX2FycmF5LSZndDtjb3VudDsgJiM0MzsmIzQzO2lkeCkKLQkJaXB1dChlYV9pbm9kZV9hcnJheS0mZ3Q7aW5vZGVzW2lkeF0pOwotCWtmcmVlKGVhX2lub2RlX2FycmF5KTsKJiM0Mzt2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSkKJiM0Mzt7CiYjNDM7CWluaXRfbGxpc3RfaGVhZCgmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV90b19mcmVlKTsKJiM0MzsJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDtzYmktJmd0O3NfZWFfaW5vZGVfd29yaywgZXh0NF9lYV9pbm9kZV93b3JrKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuaCBiL2ZzL2V4dDQveGF0dHIuaAppbmRleCAxZmVkZjQ0ZDRmYjY1ZS4uNTE4ZjAyODNlMTc0NDQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQveGF0dHIuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3hhdHRyLmgKQEAgLTEzMSwxMSAmIzQzOzEzMSw2IEBAIHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgewogCXN0cnVjdCBleHQ0X2lsb2MgaWxvYzsKIH07CiAKLXN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5IHsKLQl1bnNpZ25lZCBpbnQgY291bnQ7Ci0Jc3RydWN0IGlub2RlICppbm9kZXNbXSBfX2NvdW50ZWRfYnkoY291bnQpOwotfTsKLQogZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcjsKQEAgLTE4Nyw5ICYjNDM7MTgyLDkgQEAgZXh0ZXJuIGludCBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlib29sIGlzX2NyZWF0ZSk7CiAKIGV4dGVybiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmFycmF5LAogCQkJCSAgIGludCBleHRyYV9jcmVkaXRzKTsKLWV4dGVybiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqYXJyYXkpOwomIzQzO2V4dGVybiB2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSk7CiYjNDM7ZXh0ZXJuIHZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSk7CiAKIGV4dGVybiBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSwKIAkJCSAgICBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBoYW5kbGVfdCAqaGFuZGxlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCBkMTA4OTdiM2ExZTM1MC4uMDRmMGRlNzhmYTdhODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTI0MTMsNiAmIzQzOzI0MTMsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIHN1cGVyX3NldF9zeXNmc19uYW1lX2dlbmVyaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2gKIGV4dGVybiB2b2lkIGlob2xkKHN0cnVjdCBpbm9kZSAqIGlub2RlKTsKIGV4dGVybiB2b2lkIGlwdXQoc3RydWN0IGlub2RlICopOwogdm9pZCBpcHV0X25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBpcHV0X2lmX25vdF9sYXN0IC0gZHJvcCBhbiBpbm9kZSByZWZlcmVuY2Ugb25seSBpZiBpdCBpcyBub3QgdGhlIGxhc3Qgb25lCiYjNDM7ICogQGlub2RlOiBpbm9kZSB0byBwdXQKJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVmZXJlbmNlIHdhcyBkcm9wcGVkLCBmYWxzZSBpZiB0aGlzIHdhcyB0aGUgbGFzdAomIzQzOyAqIHJlZmVyZW5jZSBhbmQgdGhlIGNhbGxlciBtdXN0IGFycmFuZ2UgZm9yIGZpbmFsIGlwdXQoKSBpbiBhIHNhZmUgY29udGV4dC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGlwdXRfaWZfbm90X2xhc3Qoc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBhdG9taWNfYWRkX3VubGVzcygmYW1wO2lub2RlLSZndDtpX2NvdW50LCAtMSwgMSk7CiYjNDM7fQomIzQzOwogaW50IGlub2RlX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSwKIAkJdW5zaWduZWQgaW50IGZsYWdzKTsKIGludCBnZW5lcmljX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NjAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEV4dDQgWGF0dHIgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGRpdmluZyBkZWVwIGludG8gZXh0NCYjMzk7cyBleHRlbmRlZCBhdHRyaWJ1dGUgKHhhdHRyKSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGhvdyBFQSBpbm9kZXMgYXJlIGZyZWVkLiAgSXQgc2VlbXMgdG8gYmUgYSBzaWduaWZpY2FudCBjaGFuZ2UsIGludHJvZHVjaW5nIGEgZGVmZXJyZWQgYGlwdXRgIG1lY2hhbmlzbSBmb3IgRUEgaW5vZGVzIHRvIHNpZGVzdGVwIHNvbWUgbG9jayBvcmRlcmluZyBpc3N1ZXMuIFRoYXTigJlzIGEgZ29vZCBjbHVlIGl04oCZcyBmaXhpbmcgYSByZWFsIHByb2JsZW0sIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGNhcmVmdWwgc2NydXRpbnkuIFRoaXMgaXNuJiMzOTt0IHNvbWUgdHJpdmlhbCB0d2VhazsgaXQgdG91Y2hlcyBjb3JlIGZpbGVzeXN0ZW0gZnVuY3Rpb25hbGl0eS4KClRoZSBwYXRjaCBpdHNlbGYgaXMgdG91Y2hpbmcgc29tZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzLCBsaWtlIHVzaW5nIGEgdW5pb24gaW4gYHN0cnVjdCBleHQ0X2lub2RlX2luZm9gIGZvciBgeGF0dHJfc2VtYCBhbmQgYGlfZWFfaXB1dF9ub2RlYCBhbmQgYWRkaW5nIGZpZWxkcyAoYHNfZWFfaW5vZGVfdG9fZnJlZWAgYW5kIGBzX2VhX2lub2RlX3dvcmtgKSB0byBgc3RydWN0IGV4dDRfc2JfaW5mb2AuIEl0IGxvb2tzIGxpa2UgdGhleeKAmXJlIHRyeWluZyB0byBtYW5hZ2UgdGhlIGRlZmVycmVkIGlub2RlIHJlbGVhc2UgbW9yZSBlZmZlY3RpdmVseS4gQW5kIGl0JiMzOTtzIG5vdCBqdXN0IGEgbWlub3IgcmVmYWN0b3I7IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gc2V2ZXJhbCBpbXBvcnRhbnQgZnVuY3Rpb25zOiBgZXh0NF9ldmljdF9pbm9kZWAsIGBleHQ0X3B1dF9zdXBlcmAsIGBleHQ0X2FsbG9jX2lub2RlYCwgYF9fZXh0NF9maWxsX3N1cGVyYCwgYW5kIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGluIGBmcy9leHQ0L3hhdHRyLmNgLiBQbHVzLCB0aGVyZSBhcmUgc29tZSBicmFuZCBuZXcgZnVuY3Rpb25zIGJlaW5nIGludHJvZHVjZWQ6IGBleHQ0X3B1dF9lYV9pbm9kZWAsIGBleHQ0X2VhX2lub2RlX3dvcmtgLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBpcHV0X2lmX25vdF9sYXN0YCBpbiBgaW5jbHVkZS9saW51eC9mcy5oYC4gIFRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgY29kZSBhbmQgYSBjaGFuZ2Ugd29ydGggZnV6aW5nIGFzIGl0IGlzIHRvdWNoaW5nIGNvcmUgZXh0NCBmaWxlIHN5c3RlbSBmdW5jdGlvbmFsaXR5LgoKR2l2ZW4gYWxsIG9mIHRoaXMsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzICYjMzQ7V29ydGhGdXp6aW5nID0gdHJ1ZSYjMzQ7LgoKTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IHdoYXQmIzM5O3MgdGhlIG1vc3QgKmNyaXRpY2FsKiBjb2RlIHRvIHRhcmdldCB3aXRoIGZ1enppbmc/IExvb2tpbmcgYXQgdGhlIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgd2hlcmUgdGhlIGFjdGlvbiBpcy4gTXkgaW5pdGlhbCBmb2N1cyBzaG91bGQgYmUgb24gdGhlc2U6CgoqICAgYGV4dDRfZXZpY3RfaW5vZGVgCiogICBgZXh0NF9wdXRfc3VwZXJgCiogICBgZXh0NF9hbGxvY19pbm9kZWAKKiAgIGBfX2V4dDRfZmlsbF9zdXBlcmAKKiAgIFRoZSB4YXR0ci1yZWxhdGVkIGZ1bmN0aW9ucywgZXNwZWNpYWxseTogYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgLCBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgLCBgZXh0NF9lYV9pbm9kZV93b3JrYCwgYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBhbmQgYGV4dDRfeGF0dHJfaWJvZHlfc2V0YAoKVGhlc2UgYXJlIGxpa2VseSB0aGUgZnVuY3Rpb25zIG1vc3QgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGRlZmVycmVkIGlub2RlIG1hbmFnZW1lbnQgYW5kIHhhdHRyIG1hbmlwdWxhdGlvbnMuIFRoZXNlIHNob3VsZCBiZSB0aGUgYEZvY3VzU3ltYm9sc2AgZm9yIG91ciBmdXp6aW5nIGVmZm9ydHMuCgpGaW5hbGx5LCBhcmUgdGhlcmUgYW55IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gVGhpcyBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIEVBIGlub2RlcyBpbiBleHQ0LCB3aGljaCBpcyBhIGZhaXJseSBzdGFuZGFyZCBmZWF0dXJlLiAgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhhdCBJIGRvbiYjMzk7dCBuZWVkIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzZXQgaW4gdGhlIEtjb25maWcsIHNvIEkmIzM5O2xsIHNjYW4gZm9yIHRoaW5ncyBsaWtlIGBFWFQ0X0VBX0lOT0RFX0ZMYCBhbmQgc2ltaWxhciB0ZXJtcyB0byBlbnN1cmUgdGhlIGZlYXR1cmUgaXMgcHJvcGVybHkgZW5hYmxlZCBkdXJpbmcgdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFQ0X0VBX0lOT0RFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9NDQwPXN0cnVjdCBmbGV4X2dyb3VwcyB7XG4tLVxuZnMvZXh0NC9leHQ0LmgtNTA0LSNkZWZpbmUgRVhUNF9WRVJJVFlfRkxcdFx0XHQweDAwMTAwMDAwIC8qIFZlcml0eSBwcm90ZWN0ZWQgaW5vZGUgKi9cbmZzL2V4dDQvZXh0NC5oOjUwNTojZGVmaW5lIEVYVDRfRUFfSU5PREVfRkxcdCAgICAgICAgMHgwMDIwMDAwMCAvKiBJbm9kZSB1c2VkIGZvciBsYXJnZSBFQSAqL1xuZnMvZXh0NC9leHQ0LmgtNTA2LS8qIDB4MDA0MDAwMDAgd2FzIGZvcm1lcmx5IEVYVDRfRU9GQkxPQ0tTX0ZMICovXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MTA0OD1zdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcbi0tXG5mcy9leHQ0L2V4dDQuaC0xMDczLVx0ICpcbmZzL2V4dDQvZXh0NC5oOjEwNzQ6XHQgKiBFQSBpbm9kZXMgKEVYVDRfRUFfSU5PREVfRkwpIGRvIG5vdCB1c2UgeGF0dHJfc2VtOyB0aGV5IHJldXNlXG5mcy9leHQ0L2V4dDQuaC0xMDc1LVx0ICogdGhlIHNwYWNlIGZvciBkZWZlcnJlZCBpcHV0IGxpbmthZ2UuXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MjcwMj1zdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9pc19xdW90YV9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9leHQ0LmgtMjcwNC1cdHJldHVybiBJU19OT1FVT1RBKGlub2RlKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvZXh0NC5oOjI3MDU6XHQgICAgICAgIShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpO1xuZnMvZXh0NC9leHQ0LmgtMjcwNi19XG4tLVxuZnMvZXh0NC9pYWxsb2MuYz05MzM9c3RydWN0IGlub2RlICpfX2V4dDRfbmV3X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL2V4dDQvaWFsbG9jLmMtOTk1LVxuZnMvZXh0NC9pYWxsb2MuYzo5OTY6XHRpZiAoIShpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSkge1xuZnMvZXh0NC9pYWxsb2MuYy05OTctXHRcdGVyciA9IGZzY3J5cHRfcHJlcGFyZV9uZXdfaW5vZGUoZGlyLCBpbm9kZSwgXHUwMDI2ZW5jcnlwdCk7XG4tLVxuZnMvZXh0NC9pYWxsb2MuYy0xMDA1LVxuZnMvZXh0NC9pYWxsb2MuYzoxMDA2Olx0aWYgKCFoYW5kbGUgXHUwMDI2XHUwMDI2IHNiaS1cdTAwM2VzX2pvdXJuYWwgXHUwMDI2XHUwMDI2ICEoaV9mbGFncyBcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpIHtcbmZzL2V4dDQvaWFsbG9jLmMtMTAwNy1cdFx0cmV0MiA9IGV4dDRfeGF0dHJfY3JlZGl0c19mb3JfbmV3X2lub2RlKGRpciwgbW9kZSwgZW5jcnlwdCk7XG4tLVxuZnMvZXh0NC9pYWxsb2MuYy0xMzA4LVx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfaW5saW5lX2RhdGEoc2IpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9pYWxsb2MuYzoxMzA5Olx0ICAgICghKGVpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IChFWFQ0X0RBWF9GTHxFWFQ0X0VBX0lOT0RFX0ZMKSkgfHwgU19JU0RJUihtb2RlKSkpXG5mcy9leHQ0L2lhbGxvYy5jLTEzMTAtXHRcdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4tLVxuZnMvZXh0NC9pYWxsb2MuYy0xMzI2LVxuZnMvZXh0NC9pYWxsb2MuYzoxMzI3Olx0aWYgKCEoZWktXHUwMDNlaV9mbGFncyBcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpIHtcbmZzL2V4dDQvaWFsbG9jLmMtMTMyOC1cdFx0ZXJyID0gZXh0NF9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBkaXIpO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz0xNjk9dm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTE4NC1cbmZzL2V4dDQvaW5vZGUuYzoxODU6XHRpZiAoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKVxuZnMvZXh0NC9pbm9kZS5jLTE4Ni1cdFx0ZXh0NF9ldmljdF9lYV9pbm9kZShpbm9kZSk7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTQ2OTc9c3RhdGljIGlubGluZSB1NjQgZXh0NF9pbm9kZV9wZWVrX2l2ZXJzaW9uKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2lub2RlLmMtNDY5OC17XG5mcy9leHQ0L2lub2RlLmM6NDY5OTpcdGlmICh1bmxpa2VseShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKVxuZnMvZXh0NC9pbm9kZS5jLTQ3MDAtXHRcdHJldHVybiBpbm9kZV9wZWVrX2l2ZXJzaW9uX3Jhdyhpbm9kZSk7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTUxOTA9aW50IGV4dDRfZ2V0X3Byb2ppZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBrcHJvamlkX3QgKnByb2ppZClcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTE5OS0gKiBleHQ0IGhhcyBzZWxmLW1hbmFnZWQgaV92ZXJzaW9uIGZvciBlYSBpbm9kZXMsIGl0IHN0b3JlcyB0aGUgbG93ZXIgMzJiaXQgb2ZcbmZzL2V4dDQvaW5vZGUuYzo1MjAwOiAqIHJlZmNvdW50IGluIGlfdmVyc2lvbiwgc28gdXNlIHJhdyB2YWx1ZXMgaWYgaW5vZGUgaGFzIEVYVDRfRUFfSU5PREVfRkwgZmxhZ1xuZnMvZXh0NC9pbm9kZS5jLTUyMDEtICogc2V0LlxuLS1cbmZzL2V4dDQvaW5vZGUuYz01MjAzPXN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2lub2RlX3NldF9pdmVyc2lvbl9xdWVyaWVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCB2YWwpXG5mcy9leHQ0L2lub2RlLmMtNTIwNC17XG5mcy9leHQ0L2lub2RlLmM6NTIwNTpcdGlmICh1bmxpa2VseShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKVxuZnMvZXh0NC9pbm9kZS5jLTUyMDYtXHRcdGlub2RlX3NldF9pdmVyc2lvbl9yYXcoaW5vZGUsIHZhbCk7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTUyMTE9c3RhdGljIGludCBjaGVja19pZ290X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfaWdldF9mbGFncyBmbGFncyxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTIxNi1cdGlmIChmbGFncyBcdTAwMjYgRVhUNF9JR0VUX0VBX0lOT0RFKSB7XG5mcy9leHQ0L2lub2RlLmM6NTIxNzpcdFx0aWYgKCEoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSkge1xuZnMvZXh0NC9pbm9kZS5jLTUyMTgtXHRcdFx0ZXJyX3N0ciA9IFwmIzM0O21pc3NpbmcgRUFfSU5PREUgZmxhZ1wmIzM0Oztcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTIyNi1cdH0gZWxzZSB7XG5mcy9leHQ0L2lub2RlLmM6NTIyNzpcdFx0aWYgKChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKSB7XG5mcy9leHQ0L2lub2RlLmMtNTIyOC1cdFx0XHQvKlxuLS1cbmZzL2V4dDQveGF0dHIuYz0xNTE2PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTE1MzUtXHRcdFx0XHQgIFNfSUZSRUcgfCAwNjAwLCBOVUxMLCBpbm9kZS1cdTAwM2VpX2lubyAmIzQzOyAxLCBvd25lcixcbmZzL2V4dDQveGF0dHIuYzoxNTM2Olx0XHRcdFx0ICBFWFQ0X0VBX0lOT0RFX0ZMKTtcbmZzL2V4dDQveGF0dHIuYy0xNTM3LVx0aWYgKCFJU19FUlIoZWFfaW5vZGUpKSB7XG4tLVxuZnMvZXh0NC94YXR0ci5jPTMwNTE9dm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQveGF0dHIuYy0zMDU0LVx0XHRyZXR1cm47XG5mcy9leHQ0L3hhdHRyLmM6MzA1NTpcdFdBUk5fT05fT05DRSghKEVYVDRfSShpbm9kZSktXHUwMDNlaV9mbGFncyBcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpO1xuZnMvZXh0NC94YXR0ci5jLTMwNTYtXHRpZiAoaXB1dF9pZl9ub3RfbGFzdChpbm9kZSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MjkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIEV4dDQmIzM5O3MgRUEgSU5PREUgRmVhdHVyZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgRUEgSU5PREUgZmVhdHVyZSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gTXkgZmlyc3QgbW92ZSwgYXMgYWx3YXlzLCBpcyB0byBjaGVjayBmb3IgYSBLY29uZmlnIG9wdGlvbi4gS25vd2luZyB0aGlzLCBpZiB0aGVyZSBpcyBhIHdheSB0byBjb25maWd1cmUgdGhpcyBmZWF0dXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgY29udHJvbGxlZCBhbmQgd2hldGhlciBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIG9yIGlmIGl0IG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gRmluZGluZyB0aGUgS2NvbmZpZyBvcHRpb24gaXMgdGhlIGluaXRpYWwsIGFuZCBsaWtlbHkgbW9zdCBpbXBvcnRhbnQsIGZpcnN0IHN0ZXAsIGFzIGl0IHdpbGwgcmV2ZWFsIGhvdyB0aGUgZmVhdHVyZSBpcyBtYW5hZ2VkIGFuZCBjb250cm9sbGVkIGluIHRoaXMga2VybmVsIGNvbnRleHQuIExldCYjMzk7cyBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFQ0X0VBX0lOT0RFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg1MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVYVDQgRXh0ZW5kZWQgQXR0cmlidXRlcyBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgRVhUNCBleHRlbmRlZCBhdHRyaWJ1dGVzIHRoaW5nLCBzcGVjaWZpY2FsbHkgdGhlIGBFWFQ0X0VBX0lOT0RFYC4gSG1tLCB0aGVyZSBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGEgZGVkaWNhdGVkIEtjb25maWcgb3B0aW9uIGZvciBpdCBkaXJlY3RseS4gVGhhdCYjMzk7cyBhIGJpdCBzdXJwcmlzaW5nLiBVc3VhbGx5LCB0aGVyZSYjMzk7cyBhIGZsYWcgZm9yIGV2ZXJ5dGhpbmcuIFJpZ2h0LCBJIHJlY2FsbCBpdCBiZWluZyBlbmFibGVkIGltcGxpY2l0bHkgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2UgZXh0ZW5kZWQgYXR0cmlidXRlcy4gQnV0IGp1c3QgdG8gYmUgc3VyZSwgSSBzaG91bGQgdmVyaWZ5IHdoYXQgZW5hYmxlcyBpdC4KCldhaXQgYSBzZWNvbmQsIHRoZXJlICppcyogYW4gYEVYVDRfRlNgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvZiBjb3Vyc2UuIEJ1dCB0aGF0JiMzOTtzIHByZXR0eSBzdGFuZGFyZCwgdGhlIGdlbmVyYWwgZmlsZSBzeXN0ZW0gc3VwcG9ydC4gSSBuZWVkIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgRVhUNC1yZWxhdGVkIGNvbmZpZ3MgdGhhdCBtaWdodCBzaGVkIHNvbWUgbGlnaHQgb24gdGhpcy4uLiBJIGtub3cgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGFyb3VuZCBoZXJlIHNvbWV3aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVhUNCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXG5mcy9leHQ0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1RoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTM0LVxuZnMvZXh0NC9LY29uZmlnOjM1OmNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxuZnMvZXh0NC9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtVc2UgZXh0NCBmb3IgZXh0MiBmaWxlIHN5c3RlbXNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNDUtXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L0tjb25maWctNDctXHRib29sIFwmIzM0O0V4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNTUtXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQvS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7RXh0NCBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNjctXG5mcy9leHQ0L0tjb25maWc6Njg6Y29uZmlnIEVYVDRfREVCVUdcbmZzL2V4dDQvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7RXh0NCBkZWJ1Z2dpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy03Ni1cbmZzL2V4dDQvS2NvbmZpZzo3Nzpjb25maWcgRVhUNF9LVU5JVF9URVNUU1xuZnMvZXh0NC9LY29uZmlnLTc4LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIGV4dDRcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDk0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyBmb3IgTW9kaWZpZWQgZXh0NCBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBtb2RpZmljYXRpb25zIGluIHRoZSBleHQ0IGNvZGUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlbGV2YW50IHRvIGhpZ2hsaWdodC4gSSBpbml0aWFsbHkgdGhvdWdodCBJIG1pZ2h0IG5lZWQgdG8gZXhwbGljaXRseSBtZW50aW9uIGBFWFQ0X0ZTYCwgc2luY2UgaXQmIzM5O3MgdGhlIGNvcmUgZmlsZXN5c3RlbS4gQnV0IHRoZW4gSSByZS1yZWFkIHRoZSBpbnN0cnVjdGlvbnMsIGFuZCBpdOKAmXMgY2xlYXI6ICYjMzQ7RG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0IHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4mIzM0OyBSaWdodCwgdGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLCBzbyBJJiMzOTtsbCBsZWF2ZSBgRVhUNF9GU2Agb3V0OyBpdCYjMzk7cyBwcmFjdGljYWxseSBhIGdpdmVuLgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgdG8gYmUgY2VydGFpbiBJIGhhdmUgYSBmdWxsIHBpY3R1cmUuIE9rYXksIEkmIzM5O3ZlIGdvdDogYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgLCBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgLCBgZXh0NF9lYV9pbm9kZV93b3JrYCwgYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCwgYW5kIGBleHQ0X3hhdHRyX2lib2R5X3NldGAuIFRoZXNlIGFsbCBzb3VuZCBsaWtlIHRoZXkgYXJlIHdvcmtpbmcgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzICh4YXR0cikuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlIGNvbmZpZyBjb3JyZWN0LgoKTGV0JiMzOTtzIGRvIHRoaXMgcHJvcGVybHksIHRoZSBuZXh0IHN0ZXAgaXMgdG8gaGVhZCB0byBgZnMvZXh0NC9LY29uZmlnYCBhbmQgbG9vayBmb3IgYW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1hBVFRSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMjkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBleHQ0IEVBIElub2RlIFBhdGNoKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgeGF0dHIgaXMgYWx3YXlzIG9uIGZvciBleHQ0LCB3aGljaCBpcyBnb29kIHRvIGtlZXAgaW4gbWluZC4gTGV0JiMzOTtzIGRpZyBiYWNrIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBmb2N1c2luZyBvbiBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAsIGFuZCBJIHNlZSBpdCYjMzk7cyB0cnlpbmcgdG8gb3B0aW1pemUgRUEgaW5vZGUgaGFuZGxpbmcgYnkgdHJhY2tpbmcgdGhlbSBpbiBhbiBhcnJheSB0byBwcmV2ZW50IGR1cGxpY2F0ZSBwcm9jZXNzaW5nLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb247IHNtYXJ0IG1vdmUuIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgZXh0NF9wdXRfZWFfaW5vZGVgIHdoaWNoIHVzZXMgYHNfZWFfaW5vZGVfdG9fZnJlZWAgYW5kIGBzX2VhX2lub2RlX3dvcmtgLCBzbyBpdCBpcyBkZWZpbml0ZWx5IGRvaW5nIGRlZmVycmVkIGlwdXQuIFNvIGl0IHNlZW1zIGxpa2UgdGhpcyBpcyB0aGUgd29yayBxdWV1ZSBwYXJ0LiBBbmQsIG5vIGxvbmdlciB0YWtpbmcgdGhhdCBhcnJheSBpbiBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgYWxzbyBtb2RpZmllcyBgZXh0NF9ldmljdF9pbm9kZWAgYW5kIGBleHQ0X3B1dF9zdXBlcmAgdG8gZmx1c2ggdGhlIHdvcmtxdWV1ZSwgc3VnZ2VzdGluZyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggZGVmZXJyZWQgb3BlcmF0aW9ucyBhbmQgbmVlZGluZyB0byBndWFyYW50ZWUgY2xlYW51cCBhdCBjcml0aWNhbCBwb2ludHMuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2gmIzM5O3MgbG9naWMgaXMgY2xlYXI6IGl0JiMzOTtzIGludHJvZHVjaW5nIGEgZGVmZXJyZWQgYGlwdXRgIG1lY2hhbmlzbSBmb3IgZXh0NCBFQSBpbm9kZXMgdG8gZG9kZ2UgbG9jayBvcmRlcmluZyBpc3N1ZXMgYW5kIGRlYWRsb2Nrcy4gSSBuZWVkIHRvIGJlIGV4dHJhIGNhdXRpb3VzIGFuZCBsb29rIGF0IHRoZSBjb3JlIGV4dDQgeGF0dHIgaGFuZGxpbmcgYW5kIGlub2RlIGV2aWN0aW9uIHBhdGhzLiBJIHdvdWxkIGFsc28gYWRkIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgYW5kIGBleHQ0X3hhdHRyX2lib2R5X3NldGAgdG8gdGhlIHBvdGVudGlhbCBmdXp6aW5nIHN5bWJvbHMgYmVjYXVzZSBJJiMzOTttIGJldHRpbmcgdGhhdCB0aGUgb3JpZ2luYWwgcGF0Y2ggaXMgb25seSBwYXJ0IG9mIHRoZSBwdXp6bGUuCgpOb3csIHdhaXQsIGFtIEkgbWlzc2luZyBhbnl0aGluZyBjb25maWd1cmF0aW9uLXdpc2U/IEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMYCBhbmQgYENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZYCB0byBzZWUgaWYgdGhvc2UgY29tZSBpbnRvIHBsYXkgaGVyZS4gRUEgaW5vZGVzIGFyZSAqdHlwaWNhbGx5KiB1c2VkIGZvciAqbGFyZ2UqIHhhdHRycywgYW5kIEFDTHMgYW5kIFNFTGludXggbGFiZWxzIHVzZSB4YXR0cnMsIHNvIHRoZXJlIGlzIHNvbWUgb3ZlcmxhcC4gQnV0IGxhcmdlIHhhdHRycyBhcmUgdXN1YWxseSAqdXNlciogeGF0dHJzLCBub3QgQUNMcyBvciBzZWN1cml0eSBsYWJlbHMuIEhtbW0sIGlzIHRoZXJlIGEgYENPTkZJR19FWFQ0X0ZTX1hBVFRSYD8gVGhhdCYjMzk7cyB3aGF0IEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGluIGBmcy9leHQ0L01ha2VmaWxlYCB0byBtYWtlIHN1cmUgbm90aGluZyBpcyBtaXNzZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hhdHRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxuLS1cbmZzL2V4dDQvTWFrZWZpbGUtMTEtXHRcdG1tcC5vIG1vdmVfZXh0ZW50Lm8gbmFtZWkubyBwYWdlLWlvLm8gcmVhZHBhZ2UubyByZXNpemUubyBcXFxuZnMvZXh0NC9NYWtlZmlsZToxMjpcdFx0c3VwZXIubyBzeW1saW5rLm8gc3lzZnMubyB4YXR0ci5vIHhhdHRyX2h1cmQubyB4YXR0cl90cnVzdGVkLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTM6XHRcdHhhdHRyX3VzZXIubyBmYXN0X2NvbW1pdC5vIG9ycGhhbi5vXG5mcy9leHQ0L01ha2VmaWxlLTE0LVxuZnMvZXh0NC9NYWtlZmlsZT0xNT1leHQ0LSQoQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMKVx0JiM0Mzs9IGFjbC5vXG5mcy9leHQ0L01ha2VmaWxlOjE2OmV4dDQtJChDT05GSUdfRVhUNF9GU19TRUNVUklUWSlcdFx0JiM0Mzs9IHhhdHRyX3NlY3VyaXR5Lm9cbmZzL2V4dDQvTWFrZWZpbGUtMTctZXh0NC10ZXN0LW9ianNcdFx0XHRcdCYjNDM7PSBpbm9kZS10ZXN0Lm8gbWJhbGxvYy10ZXN0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyMDgKCQkJCQkJCW91dHB1dDogMTUwCgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBYYXR0ciBGb2N1cyoqCgpPa2F5LCBzbyBgeGF0dHIub2AgaXMgYSBjb25zdGFudCBjb21waWxlLiBObyBuZWVkIHRvIGZpZGRsZSB3aXRoIGFueSBjb25maWd1cmF0aW9uIHRoZXJlOyBpdCYjMzk7cyBhbHdheXMgaW5jbHVkZWQuIE5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIHRoZSBtZWF0IG9mIHJlZmluaW5nIHRoZXNlIGBGb2N1c1N5bWJvbHNgLiBJIG5lZWQgdG8gaG9uZSBpbiBvbiB0aGUgY29yZSBvcGVyYXRpb25zLgoKTG9va2luZyBhdCB0aGUgbGlzdCwgSSYjMzk7bSBnb2luZyB0byBzZWxlY3QgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXMgdGhlIG1vc3QgcmVsZXZhbnQ6IGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYCwgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYCwgYGV4dDRfZWFfaW5vZGVfd29ya2AsIGBleHQ0X3B1dF9lYV9pbm9kZWAsIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAsIGFuZCBgZXh0NF94YXR0cl9pYm9keV9zZXRgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8geGF0dHIgbWFuYWdlbWVudCB3aXRoaW4gZXh0NCwgdG91Y2hpbmcgb24gcmVmZXJlbmNlIGNvdW50aW5nLCBkZWxldGlvbiwgYW5kIGJvdGggYmxvY2stYmFzZWQgYW5kIGlub2RlLWJhc2VkIGV4dGVuZGVkIGF0dHJpYnV0ZSBzdG9yYWdlLiBOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGlzIHJlZmluZWQgc2VsZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X2VhX2lub2RlX3dvcmsmIzM0OywKICAgICYjMzQ7ZXh0NF9wdXRfZWFfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9ibG9ja19zZXQmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pYm9keV9zZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIGZvciBleHQ0IEVBIChFeHRlbmRlZCBBdHRyaWJ1dGUpIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyBhbmQgZGVhZGxvY2tzLiBJdCBtb2RpZmllcyBjb3JlIGV4dDQgeGF0dHIgaGFuZGxpbmcgYW5kIGlub2RlIGV2aWN0aW9uIHBhdGhzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9kZWxldGVfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF9lYV9pbm9kZV93b3JrJiMzNDssCiAgICAmIzM0O2V4dDRfcHV0X2VhX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfYmxvY2tfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaWJvZHlfc2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWZlcnJlZCBpcHV0IG1lY2hhbmlzbSBmb3IgZXh0NCBFQSAoRXh0ZW5kZWQgQXR0cmlidXRlKSBpbm9kZXMgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMgYW5kIGRlYWRsb2Nrcy4gSXQgbW9kaWZpZXMgY29yZSBleHQ0IHhhdHRyIGhhbmRsaW5nIGFuZCBpbm9kZSBldmljdGlvbiBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjI4OjI2LjQyMzIyNjUwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MzExNDk3ODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxcIixcbiAgICBcImV4dDRfeGF0dHJfZGVsZXRlX2lub2RlXCIsXG4gICAgXCJleHQ0X2VhX2lub2RlX3dvcmtcIixcbiAgICBcImV4dDRfcHV0X2VhX2lub2RlXCIsXG4gICAgXCJleHQ0X3hhdHRyX2Jsb2NrX3NldFwiLFxuICAgIFwiZXh0NF94YXR0cl9pYm9keV9zZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gZm9yIGV4dDQgRUEgKEV4dGVuZGVkIEF0dHJpYnV0ZSkgaW5vZGVzIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzIGFuZCBkZWFkbG9ja3MuIEl0IG1vZGlmaWVzIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZyBhbmQgaW5vZGUgZXZpY3Rpb24gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjI4OjI2LjQyMzIzNTQ0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMzMzQyNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWYyZjVlNWY0MTcwNTkyMDBiODYwNGNlYTRiNWM0M2U4NmFlNmM4YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyOSAxMToyODoyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXFxuaW5kZXggYjM3YzEzNmVhM2FiMzMuLmI5YjBhZGE3Nzc0YmI0IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcXG5AQCAtMTA3MCw4ICsxMDcwLDE0IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xcbiBcXHQgKiBiZXR3ZWVuIHJlYWRlcnMgb2YgRUFzIGFuZCB3cml0ZXJzIG9mIHJlZ3VsYXIgZmlsZSBkYXRhLCBzb1xcbiBcXHQgKiBpbnN0ZWFkIHdlIHN5bmNocm9uaXplIG9uIHhhdHRyX3NlbSB3aGVuIHJlYWRpbmcgb3IgY2hhbmdpbmdcXG4gXFx0ICogRUFzLlxcbitcXHQgKlxcbitcXHQgKiBFQSBpbm9kZXMgKEVYVDRfRUFfSU5PREVfRkwpIGRvIG5vdCB1c2UgeGF0dHJfc2VtOyB0aGV5IHJldXNlXFxuK1xcdCAqIHRoZSBzcGFjZSBmb3IgZGVmZXJyZWQgaXB1dCBsaW5rYWdlLlxcbiBcXHQgKi9cXG4tXFx0c3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0c3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07XFxuK1xcdFxcdHN0cnVjdCBsbGlzdF9ub2RlIGlfZWFfaXB1dF9ub2RlO1xcbitcXHR9O1xcbiBcXG4gXFx0LypcXG4gXFx0ICogSW5vZGVzIHdpdGggRVhUNF9TVEFURV9PUlBIQU5fRklMRSB1c2UgaV9vcnBoYW5faWR4LiBPdGhlcndpc2VcXG5AQCAtMTc3MCw2ICsxNzc2LDExIEBAIHN0cnVjdCBleHQ0X3NiX2luZm8ge1xcbiBcXHRzdHJ1Y3QgZXh0NF9lc19zdGF0cyBzX2VzX3N0YXRzO1xcbiBcXHRzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfYmxvY2tfY2FjaGU7XFxuIFxcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9pbm9kZV9jYWNoZTtcXG4rXFxuK1xcdC8qIERlZmVycmVkIGlwdXQgZm9yIEVBIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyAqL1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZCBzX2VhX2lub2RlX3RvX2ZyZWU7XFxuK1xcdHN0cnVjdCBkZWxheWVkX3dvcmsgc19lYV9pbm9kZV93b3JrO1xcbitcXG4gXFx0c3BpbmxvY2tfdCBzX2VzX2xvY2sgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcXG4gXFxuIFxcdC8qIEpvdXJuYWwgdHJpZ2dlcnMgZm9yIGNoZWNrc3VtIGNvbXB1dGF0aW9uICovXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi43NDdjNTJjMjMyY2MwMyAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcXG4rKysgYi9mcy9leHQ0L2lub2RlLmNcXG5AQCAtMTc2LDcgKzE3Niw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHQgKiAoeGF0dHIgYmxvY2sgZnJlZWluZyksIGJpdG1hcCwgZ3JvdXAgZGVzY3JpcHRvciAoaW5vZGUgZnJlZWluZylcXG4gXFx0ICovXFxuIFxcdGludCBleHRyYV9jcmVkaXRzID0gNjtcXG4tXFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcXG4gXFx0Ym9vbCBmcmVlemVfcHJvdGVjdGVkID0gZmFsc2U7XFxuIFxcbiBcXHR0cmFjZV9leHQ0X2V2aWN0X2lub2RlKGlub2RlKTtcXG5AQCAtMjgxLDggKzI4MCw3IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBSZW1vdmUgeGF0dHIgcmVmZXJlbmNlcy4gKi9cXG4tXFx0ZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgXFx1MDAyNmVhX2lub2RlX2FycmF5LFxcbi1cXHRcXHRcXHRcXHQgICAgICBleHRyYV9jcmVkaXRzKTtcXG4rXFx0ZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgZXh0cmFfY3JlZGl0cyk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0ZXh0NF93YXJuaW5nKGlub2RlLVxcdTAwM2VpX3NiLCBcXFwieGF0dHIgZGVsZXRlIChlcnIgJWQpXFxcIiwgZXJyKTtcXG4gc3RvcF9oYW5kbGU6XFxuQEAgLTI5MCw3ICsyODgsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0XFx0ZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTtcXG4gXFx0XFx0aWYgKGZyZWV6ZV9wcm90ZWN0ZWQpXFxuIFxcdFxcdFxcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cXHUwMDNlaV9zYik7XFxuLVxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XFxuIFxcdFxcdGdvdG8gbm9fZGVsZXRlO1xcbiBcXHR9XFxuIFxcbkBAIC0zMjAsNyArMzE3LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XFxuIFxcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxcbiBcXHRcXHRzYl9lbmRfaW50d3JpdGUoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbi1cXHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xcbiBcXHRyZXR1cm47XFxuIG5vX2RlbGV0ZTpcXG4gXFx0LypcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXFxuaW5kZXggMjQ1ZjY3ZDEwZGVkMzQuLjNlZmE1YTgxN2JlZjRmIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xcbisrKyBiL2ZzL2V4dDQvc3VwZXIuY1xcbkBAIC0xMzAzLDYgKzEzMDMsOCBAQCBzdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRcXHRcXHQgXFx1MDAyNnNiLVxcdTAwM2VzX3V1aWQpO1xcbiBcXG4gXFx0ZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpO1xcbitcXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyB3aGlsZSBxdW90YSBpcyBzdGlsbCBhY3RpdmUuICovXFxuK1xcdGZsdXNoX2RlbGF5ZWRfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmspO1xcbiBcXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcXG4gXFxuIFxcdGRlc3Ryb3lfd29ya3F1ZXVlKHNiaS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xcbkBAIC0xNDIzLDYgKzE0MjUsMTMgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRtZW1zZXQoXFx1MDAyNmVpLVxcdTAwM2VpX2RxdW90LCAwLCBzaXplb2YoZWktXFx1MDAzZWlfZHF1b3QpKTtcXG4gI2VuZGlmXFxuIFxcdGVpLVxcdTAwM2VqaW5vZGUgPSBOVUxMO1xcbitcXHQvKlxcbitcXHQgKiBSZWluaXRpYWxpemUgeGF0dHJfc2VtIGV2ZXJ5IGFsbG9jYXRpb24gYmVjYXVzZSBFQSBpbm9kZXNcXG4rXFx0ICogc2hhcmUgdGhpcyBzcGFjZSB3aXRoIGlfZWFfaXB1dF9ub2RlICh2aWEgdW5pb24pIHdoaWNoIG1heVxcbitcXHQgKiBoYXZlIG92ZXJ3cml0dGVuIHRoZSBzZW1hcGhvcmUgd2hlbiB0aGUgc2xhYiBvYmplY3Qgd2FzXFxuK1xcdCAqIHByZXZpb3VzbHkgdXNlZCBhcyBhbiBFQSBpbm9kZS5cXG4rXFx0ICovXFxuK1xcdGluaXRfcndzZW0oXFx1MDAyNmVpLVxcdTAwM2V4YXR0cl9zZW0pO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZWktXFx1MDAzZWlfcnN2X2NvbnZlcnNpb25fbGlzdCk7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZlaS1cXHUwMDNlaV9jb21wbGV0ZWRfaW9fbG9jayk7XFxuIFxcdGVpLVxcdTAwM2VpX3N5bmNfdGlkID0gMDtcXG5AQCAtMTQ4OCw3ICsxNDk3LDYgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcXG4gXFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBmb287XFxuIFxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZWktXFx1MDAzZWlfb3JwaGFuKTtcXG4tXFx0aW5pdF9yd3NlbShcXHUwMDI2ZWktXFx1MDAzZXhhdHRyX3NlbSk7XFxuIFxcdGluaXRfcndzZW0oXFx1MDAyNmVpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG4gXFx0aW5vZGVfaW5pdF9vbmNlKFxcdTAwMjZlaS1cXHUwMDNldmZzX2lub2RlKTtcXG4gXFx0ZXh0NF9mY19pbml0X2lub2RlKFxcdTAwMjZlaS1cXHUwMDNldmZzX2lub2RlKTtcXG5AQCAtNTQ5Nyw2ICs1NTA1LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdFxcdFxcdCAgZXh0NF9oYXNfZmVhdHVyZV9vcnBoYW5fcHJlc2VudChzYikgfHxcXG4gXFx0XFx0XFx0ICBleHQ0X2hhc19mZWF0dXJlX2pvdXJuYWxfbmVlZHNfcmVjb3Zlcnkoc2IpKTtcXG4gXFxuK1xcdGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHNiaSk7XFxuK1xcbiBcXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9tbXAoc2IpIFxcdTAwMjZcXHUwMDI2ICFzYl9yZG9ubHkoc2IpKSB7XFxuIFxcdFxcdGVyciA9IGV4dDRfbXVsdGlfbW91bnRfcHJvdGVjdChzYiwgbGU2NF90b19jcHUoZXMtXFx1MDAzZXNfbW1wX2Jsb2NrKSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuQEAgLTU3NDcsNiArNTc1Nyw4IEBAIHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGZhaWxlZF9tb3VudDk6XFxuK1xcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBxdW90YSBzaHV0ZG93biAqL1xcbitcXHRmbHVzaF9kZWxheWVkX3dvcmsoXFx1MDAyNnNiaS1cXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcXG4gXFx0ZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7XFxuIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuIFxcdGV4dDRfcmVsZWFzZV9vcnBoYW5faW5mbyhzYik7XFxuQEAgLTU3NjcsNiArNTc3OSw4IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuIFxcdGlmIChFWFQ0X1NCKHNiKS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpXFxuIFxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKEVYVDRfU0Ioc2IpLVxcdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XFxuIGZhaWxlZF9tb3VudF93cTpcXG4rXFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIGZyZWVpbmcgc3RydWN0dXJlcyAqL1xcbitcXHRmbHVzaF9kZWxheWVkX3dvcmsoXFx1MDAyNnNiaS1cXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcXG4gXFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XFxuIFxcdHNiaS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSA9IE5VTEw7XFxuIFxcbkBAIC01Nzc3LDYgKzU3OTEsOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxcbiBcXHRcXHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cXHUwMDNlc19qb3VybmFsKTtcXG4gXFx0fVxcbiBmYWlsZWRfbW91bnQzYTpcXG4rXFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xcbitcXHRmbHVzaF9kZWxheWVkX3dvcmsoXFx1MDAyNnNiaS1cXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcXG4gXFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XFxuIGZhaWxlZF9tb3VudDM6XFxuIFxcdC8qIGZsdXNoIHNfc2JfdXBkX3dvcmsgYmVmb3JlIHNiaSBkZXN0cm95ICovXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xcbmluZGV4IDk4MmExZjgzMWUyMjgyLi44NWFkMjU2MTQ3NGI2ZSAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3hhdHRyLmNcXG4rKysgYi9mcy9leHQ0L3hhdHRyLmNcXG5AQCAtMTE0LDEwICsxMTQsNiBAQCBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHtcXG4gI2RlZmluZSBFQV9JTk9ERV9DQUNIRShpbm9kZSlcXHQoKChzdHJ1Y3QgZXh0NF9zYl9pbmZvICopIFxcXFxcXG4gXFx0XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfZnNfaW5mbyktXFx1MDAzZXNfZWFfaW5vZGVfY2FjaGUpXFxuIFxcbi1zdGF0aWMgaW50XFxuLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXFxuLVxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbi1cXG4gI2lmZGVmIENPTkZJR19MT0NLREVQXFxuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9zZXRfY2xhc3Moc3RydWN0IGlub2RlICplYV9pbm9kZSlcXG4ge1xcbkBAIC01NjcsNyArNTYzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LFxcbiBcXHRcXHRcXHRcXHRcXHRlYV9pbm9kZS1cXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xcbiBcXHR9XFxuIG91dDpcXG4tXFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTExMDQsMTAgKzExMDAsMTAgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX2luY19yZWYoaGFuZGxlLCBlYV9pbm9kZSk7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcXFwiaW5jIHJlZiBlcnJvciAlZFxcXCIsIGVycik7XFxuLVxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTExMzMsNyArMTEyOSw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcXFwiY2xlYW51cCBkZWMgcmVmIGVycm9yICVkXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgZXJyKTtcXG4tXFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbiBcXHR9XFxuIFxcdHJldHVybiBzYXZlZF9lcnI7XFxuIH1cXG5AQCAtMTE1NiwxMSArMTE1MiwyOSBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfcmVzdGFydF9mbihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyogVHJhY2sgYW4gRUEgaW5vZGUgbnVtYmVyIGluIHRoZSBkZWR1cCBhcnJheSwgZXhwYW5kaW5nIGlmIG5lZWRlZC4gKi9cXG4rc3RhdGljIHZvaWQgZWFfaW5vX2FycmF5X2FkZCh1bnNpZ25lZCBpbnQgKiplYV9pbm9zLCB1bnNpZ25lZCBpbnQgKm5yLFxcbitcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCAqc2l6ZSwgdW5zaWduZWQgaW50ICppbmxpbmVfYXJyLFxcbitcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBpbm8pXFxuK3tcXG4rXFx0aWYgKCpuciA9PSAqc2l6ZSkge1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgbmV3X3NpemUgPSAqc2l6ZSAqIDI7XFxuK1xcdFxcdHVuc2lnbmVkIGludCAqcDtcXG4rXFxuK1xcdFxcdHAgPSBrbWFsbG9jX2FycmF5KG5ld19zaXplLCBzaXplb2YoKnApLCBHRlBfTk9GUyB8IF9fR0ZQX05PRkFJTCk7XFxuK1xcdFxcdG1lbWNweShwLCAqZWFfaW5vcywgKm5yICogc2l6ZW9mKCpwKSk7XFxuK1xcdFxcdGlmICgqZWFfaW5vcyAhPSBpbmxpbmVfYXJyKVxcbitcXHRcXHRcXHRrZnJlZSgqZWFfaW5vcyk7XFxuK1xcdFxcdCplYV9pbm9zID0gcDtcXG4rXFx0XFx0KnNpemUgPSBuZXdfc2l6ZTtcXG4rXFx0fVxcbitcXHQoKmVhX2lub3MpWygqbnIpKytdID0gaW5vO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZFxcbiBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmZpcnN0LCBib29sIGJsb2NrX2NzdW0sXFxuLVxcdFxcdFxcdCAgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcXG4gXFx0XFx0XFx0ICAgICBpbnQgZXh0cmFfY3JlZGl0cywgYm9vbCBza2lwX3F1b3RhKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqZWFfaW5vZGU7XFxuQEAgLTExNzEsNiArMTE4NSwxMCBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRpbnQgZXJyO1xcbiBcXHRpbnQgY3JlZGl0cztcXG4gXFx0dm9pZCAqZW5kO1xcbitcXHR1bnNpZ25lZCBpbnQgZWFfaW5vc19pbmxpbmVbMzJdO1xcbitcXHR1bnNpZ25lZCBpbnQgKmVhX2lub3MgPSBlYV9pbm9zX2lubGluZTtcXG4rXFx0dW5zaWduZWQgaW50IG5yX2VhX2lub3MgPSAwO1xcbitcXHR1bnNpZ25lZCBpbnQgZWFfaW5vc19zaXplID0gQVJSQVlfU0laRShlYV9pbm9zX2lubGluZSk7XFxuIFxcbiBcXHRpZiAoYmxvY2tfY3N1bSlcXG4gXFx0XFx0ZW5kID0gKHZvaWQgKiliaC1cXHUwMDNlYl9kYXRhICsgYmgtXFx1MDAzZWJfc2l6ZTtcXG5AQCAtMTE4OCwyMyArMTIwNiwzMCBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXG4gXFx0Zm9yIChlbnRyeSA9IGZpcnN0OyAodm9pZCAqKWVudHJ5IFxcdTAwM2MgZW5kIFxcdTAwMjZcXHUwMDI2ICFJU19MQVNUX0VOVFJZKGVudHJ5KTtcXG4gXFx0ICAgICBlbnRyeSA9IEVYVDRfWEFUVFJfTkVYVChlbnRyeSkpIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IGk7XFxuK1xcbiBcXHRcXHRpZiAoIWVudHJ5LVxcdTAwM2VlX3ZhbHVlX2ludW0pXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRlYV9pbm8gPSBsZTMyX3RvX2NwdShlbnRyeS1cXHUwMDNlZV92YWx1ZV9pbnVtKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFNraXAgRUEgaW5vZGVzIHdlIGFscmVhZHkgcHJvY2Vzc2VkLiAgT24gYSBjb3JydXB0ZWQgZnMsXFxuK1xcdFxcdCAqIGR1cGxpY2F0ZSBlbnRyaWVzIG1heSBwb2ludCB0byB0aGUgc2FtZSBFQSBpbm9kZTsgd2l0aG91dFxcbitcXHRcXHQgKiB0aGlzIGNoZWNrLCB0aGUgc2Vjb25kIGlnZXQgY291bGQgZGVhZGxvY2sgb24gSV9GUkVFSU5HXFxuK1xcdFxcdCAqIGlmIHRoZSBkZWZlcnJlZCB3b3JrZXIgYWxyZWFkeSBzdGFydGVkIGV2aWN0aW5nIGl0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2VhX2lub3M7IGkrKylcXG4rXFx0XFx0XFx0aWYgKGVhX2lub3NbaV0gPT0gZWFfaW5vKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0aWYgKGkgXFx1MDAzYyBucl9lYV9pbm9zKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuIFxcdFxcdGVyciA9IGV4dDRfeGF0dHJfaW5vZGVfaWdldChwYXJlbnQsIGVhX2lubyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIGxlMzJfdG9fY3B1KGVudHJ5LVxcdTAwM2VlX2hhc2gpLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmVhX2lub2RlKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRlcnIgPSBleHQ0X2V4cGFuZF9pbm9kZV9hcnJheShlYV9pbm9kZV9hcnJheSwgZWFfaW5vZGUpO1xcbi1cXHRcXHRpZiAoZXJyKSB7XFxuLVxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgXFxcIkV4cGFuZCBpbm9kZSBhcnJheSBlcnI9JWRcXFwiLCBlcnIpO1xcbi1cXHRcXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdH1cXG4tXFxuIFxcdFxcdGVyciA9IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0c19mbihoYW5kbGUsIGNyZWRpdHMsIGNyZWRpdHMsXFxuIFxcdFxcdFxcdGV4dDRfZnJlZV9tZXRhZGF0YV9yZXZva2VfY3JlZGl0cyhwYXJlbnQtXFx1MDAzZWlfc2IsIDEpLFxcbiBcXHRcXHRcXHRleHQ0X3hhdHRyX3Jlc3RhcnRfZm4oaGFuZGxlLCBwYXJlbnQsIGJoLCBibG9ja19jc3VtLFxcbkBAIC0xMjEyLDYgKzEyMzcsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFxcXCJFbnN1cmUgY3JlZGl0cyBlcnI9JWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBlcnIpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKGVyciBcXHUwMDNlIDApIHtcXG5AQCAtMTIyMSw2ICsxMjQ3LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXFwiUmUtZ2V0IHdyaXRlIGFjY2VzcyBlcnI9JWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRlcnIpO1xcbitcXHRcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbkBAIC0xMjI5LDYgKzEyNTYsMTIgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0aWYgKGVycikge1xcbiBcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFxcXCJlYV9pbm9kZSBkZWMgcmVmIGVycj0lZFxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGVycik7XFxuK1xcdFxcdFxcdC8qIFRyYWNrIGlmIG5saW5rPT0wIHRvIHNraXAgZHVwbGljYXRlcyAoZXZpY3Rpb24gcmlzaykgKi9cXG4rXFx0XFx0XFx0aWYgKCFlYV9pbm9kZS1cXHUwMDNlaV9ubGluaylcXG4rXFx0XFx0XFx0XFx0ZWFfaW5vX2FycmF5X2FkZChcXHUwMDI2ZWFfaW5vcywgXFx1MDAyNm5yX2VhX2lub3MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2ZWFfaW5vc19zaXplLCBlYV9pbm9zX2lubGluZSwgZWFfaW5vKTtcXG4rXFxuK1xcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMTI0NSw5ICsxMjc4LDIyIEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuIFxcdFxcdGVudHJ5LVxcdTAwM2VlX3ZhbHVlX2ludW0gPSAwO1xcbiBcXHRcXHRlbnRyeS1cXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcXG4gXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRyYWNrIG5saW5rPT0wIEVBIGlub2RlcyB0byBza2lwIGR1cGxpY2F0ZXMgbGF0ZXIgLS1cXG4rXFx0XFx0ICogdGhleSByaXNrIElfRlJFRUlORyBkZWFkbG9jayBvbiByZS1pZ2V0LlxcbitcXHRcXHQgKiBDaGVjayBubGluayBiZWZvcmUgcHV0IHNpbmNlIHB1dCByZWxlYXNlcyBvdXIgcmVmZXJlbmNlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFlYV9pbm9kZS1cXHUwMDNlaV9ubGluaylcXG4rXFx0XFx0XFx0ZWFfaW5vX2FycmF5X2FkZChcXHUwMDI2ZWFfaW5vcywgXFx1MDAyNm5yX2VhX2lub3MsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXHUwMDI2ZWFfaW5vc19zaXplLCBlYV9pbm9zX2lubGluZSwgZWFfaW5vKTtcXG4rXFxuK1xcdFxcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbiBcXHRcXHRkaXJ0eSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChlYV9pbm9zICE9IGVhX2lub3NfaW5saW5lKVxcbitcXHRcXHRrZnJlZShlYV9pbm9zKTtcXG4rXFxuIFxcdGlmIChkaXJ0eSkge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBOb3RlIHRoYXQgd2UgYXJlIGRlbGliZXJhdGVseSBza2lwcGluZyBjc3VtIGNhbGN1bGF0aW9uIGZvclxcbkBAIC0xMjcxLDcgKzEzMTcsNiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBzdGF0aWMgdm9pZFxcbiBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuLVxcdFxcdFxcdCBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxcbiBcXHRcXHRcXHQgaW50IGV4dHJhX2NyZWRpdHMpXFxuIHtcXG4gXFx0c3RydWN0IG1iX2NhY2hlICplYV9ibG9ja19jYWNoZSA9IEVBX0JMT0NLX0NBQ0hFKGlub2RlKTtcXG5AQCAtMTMxMyw3ICsxMzU4LDYgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgYmgsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgQkZJUlNUKGJoKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0cnVlIC8qIGJsb2NrX2NzdW0gKi8sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZWFfaW5vZGVfYXJyYXksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXh0cmFfY3JlZGl0cyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0cnVlIC8qIHNraXBfcXVvdGEgKi8pO1xcbiBcXHRcXHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGJoLCAwLCAxLFxcbkBAIC0xNTA1LDcgKzE1NDksNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxcbiBcXHRcXHRcXHRpZiAoZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpKVxcbiBcXHRcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcXCJjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcXFwiLCBlcnIpO1xcbi1cXHRcXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMTU2NCw3ICsxNjA4LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLFxcbiBcXHRcXHRcXHRrdmZyZWUoZWFfZGF0YSk7XFxuIFxcdFxcdFxcdHJldHVybiBlYV9pbm9kZTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0bmV4dF9lbnRyeTpcXG4gXFx0XFx0Y2UgPSBtYl9jYWNoZV9lbnRyeV9maW5kX25leHQoZWFfaW5vZGVfY2FjaGUsIGNlKTtcXG4gXFx0fVxcbkBAIC0xNjE1LDcgKzE2NTksNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgZWFfaW5vZGUtXFx1MDAzZWlfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTtcXG4gXFx0cmV0dXJuIGVhX2lub2RlO1xcbiBvdXRfZXJyOlxcbi1cXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBOVUxMLCB2YWx1ZV9sZW4pO1xcbiBcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbiB9XFxuQEAgLTE4NDgsNyArMTg5Miw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSxcXG4gXFxuIFxcdHJldCA9IDA7XFxuIG91dDpcXG4tXFx0aXB1dChvbGRfZWFfaW5vZGUpO1xcbitcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgb2xkX2VhX2lub2RlKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtMjAxMCw3ICsyMDU0LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0XFx0b2xkX2VhX2lub2RlX3F1b3RhID0gbGUzMl90b19jcHUoXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHMtXFx1MDAzZWhlcmUtXFx1MDAzZWVfdmFsdWVfc2l6ZSk7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aXB1dCh0bXBfaW5vZGUpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgdG1wX2lub2RlKTtcXG4gXFxuIFxcdFxcdFxcdHMtXFx1MDAzZWhlcmUtXFx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XFxuIFxcdFxcdFxcdHMtXFx1MDAzZWhlcmUtXFx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XFxuQEAgLTIxNTAsNyArMjE5NCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcImRlYyByZWYgZXJyb3I9JWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBlcnJvcik7XFxuLVxcdFxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbiBcXHRcXHRcXHRcXHRlYV9pbm9kZSA9IE5VTEw7XFxuIFxcdFxcdFxcdH1cXG4gXFxuQEAgLTIxODIsMTIgKzIyMjYsOCBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXG4gXFx0LyogRHJvcCB0aGUgcHJldmlvdXMgeGF0dHIgYmxvY2suICovXFxuIFxcdGlmIChicy1cXHUwMDNlYmggXFx1MDAyNlxcdTAwMjYgYnMtXFx1MDAzZWJoICE9IG5ld19iaCkge1xcbi1cXHRcXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xcbi1cXG4gXFx0XFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJzLVxcdTAwM2ViaCxcXG4tXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZlYV9pbm9kZV9hcnJheSxcXG4gXFx0XFx0XFx0XFx0XFx0IDAgLyogZXh0cmFfY3JlZGl0cyAqLyk7XFxuLVxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XFxuIFxcdH1cXG4gXFx0ZXJyb3IgPSAwO1xcbiBcXG5AQCAtMjIwMyw3ICsyMjQzLDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XFxuIFxcdFxcdH1cXG4tXFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdH1cXG4gXFx0aWYgKGNlKVxcbiBcXHRcXHRtYl9jYWNoZV9lbnRyeV9wdXQoZWFfYmxvY2tfY2FjaGUsIGNlKTtcXG5AQCAtMjI4NSw3ICsyMzI1LDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcbiBcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcXG4tXFx0XFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXHR9XFxuQEAgLTIyOTcsNyArMjMzNyw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRoZWFkZXItXFx1MDAzZWhfbWFnaWMgPSBjcHVfdG9fbGUzMigwKTtcXG4gXFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUik7XFxuIFxcdH1cXG4tXFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0yODYzLDQ2ICsyOTAzLDYgQEAgaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXFxuIFxcdHJldHVybiBlcnJvcjtcXG4gfVxcbiBcXG4tI2RlZmluZSBFSUFfSU5DUiAxNiAvKiBtdXN0IGJlIDJebiAqL1xcbi0jZGVmaW5lIEVJQV9NQVNLIChFSUFfSU5DUiAtIDEpXFxuLVxcbi0vKiBBZGQgdGhlIGxhcmdlIHhhdHRyIEBpbm9kZSBpbnRvIEBlYV9pbm9kZV9hcnJheSBmb3IgZGVmZXJyZWQgaXB1dCgpLlxcbi0gKiBJZiBAZWFfaW5vZGVfYXJyYXkgaXMgbmV3IG9yIGZ1bGwgaXQgd2lsbCBiZSBncm93biBhbmQgdGhlIG9sZFxcbi0gKiBjb250ZW50cyBjb3BpZWQgb3Zlci5cXG4tICovXFxuLXN0YXRpYyBpbnRcXG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcXG4tXFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSlcXG4te1xcbi1cXHRpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpIHtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogU3RhcnQgd2l0aCAxNSBpbm9kZXMsIHNvIGl0IGZpdHMgaW50byBhIHBvd2VyLW9mLXR3byBzaXplLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0KCplYV9pbm9kZV9hcnJheSkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgRUlBX01BU0ssIEdGUF9OT0ZTKTtcXG4tXFx0XFx0aWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0XFx0KCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWNvdW50ID0gMDtcXG4tXFx0fSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWNvdW50IFxcdTAwMjYgRUlBX01BU0spID09IEVJQV9NQVNLKSB7XFxuLVxcdFxcdC8qIGV4cGFuZCB0aGUgYXJyYXkgb25jZSBhbGwgMTUgKyBuICogMTYgc2xvdHMgYXJlIGZ1bGwgKi9cXG4tXFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKm5ld19hcnJheSA9IE5VTEw7XFxuLVxcbi1cXHRcXHRuZXdfYXJyYXkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxcbi1cXHRcXHRcXHRcXHRcXHQgKCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWNvdW50ICsgRUlBX0lOQ1IsXFxuLVxcdFxcdFxcdFxcdFxcdCBHRlBfTk9GUyk7XFxuLVxcdFxcdGlmIChuZXdfYXJyYXkgPT0gTlVMTClcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdFxcdG1lbWNweShuZXdfYXJyYXksICplYV9pbm9kZV9hcnJheSxcXG4tXFx0XFx0ICAgICAgIHN0cnVjdF9zaXplKCplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxcbi1cXHRcXHRcXHRcXHQgICAoKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlY291bnQpKTtcXG4tXFx0XFx0a2ZyZWUoKmVhX2lub2RlX2FycmF5KTtcXG4tXFx0XFx0KmVhX2lub2RlX2FycmF5ID0gbmV3X2FycmF5O1xcbi1cXHR9XFxuLVxcdCgqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCsrO1xcbi1cXHQoKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlaW5vZGVzWygqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCAtIDFdID0gaW5vZGU7XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSgpXFxuICAqXFxuQEAgLTI5MTMsNyArMjkxMyw2IEBAIGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXFxuICAqIHJlZmVyZW5jZXMgb24geGF0dHIgYmxvY2sgYW5kIHhhdHRyIGlub2Rlcy5cXG4gICovXFxuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHRcXHRcXHQgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcXG4gXFx0XFx0XFx0ICAgIGludCBleHRyYV9jcmVkaXRzKVxcbiB7XFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xcbkBAIC0yOTUyLDcgKzI5NTEsNiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBpbG9jLmJoLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIElGSVJTVChoZWFkZXIpLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGZhbHNlIC8qIGJsb2NrX2NzdW0gKi8sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZWFfaW5vZGVfYXJyYXksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXh0cmFfY3JlZGl0cyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBmYWxzZSAvKiBza2lwX3F1b3RhICovKTtcXG4gXFx0fVxcbkBAIC0yOTg2LDEyICsyOTg0LDEyIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgbGUzMl90b19jcHUoZW50cnktXFx1MDAzZWVfdmFsdWVfc2l6ZSkpO1xcbi1cXHRcXHRcXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLCBlYV9pbm9kZV9hcnJheSxcXG4rXFx0XFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxcbiBcXHRcXHRcXHRcXHRcXHQgZXh0cmFfY3JlZGl0cyk7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXNcXG5AQCAtMzAxMywxNiArMzAxMSw2MyBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0cmV0dXJuIGVycm9yO1xcbiB9XFxuIFxcbi12b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkpXFxuKy8qXFxuKyAqIFdvcmtlciBmdW5jdGlvbiBmb3IgZGVmZXJyZWQgRUEgaW5vZGUgaXB1dC4gIFByb2Nlc3NlcyBhbGwgaW5vZGVzIHF1ZXVlZFxcbisgKiBvbiBzX2VhX2lub2RlX3RvX2ZyZWUgaW4gYSBjb250ZXh0IGZyZWUgb2YgeGF0dHJfc2VtL2piZDIgaGFuZGxlIGxvY2tzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZXh0NF9lYV9pbm9kZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbi1cXHRpbnQgaWR4O1xcbitcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzX2VhX2lub2RlX3dvcmspO1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNnNiaS1cXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcXG4gXFxuLVxcdGlmIChlYV9pbm9kZV9hcnJheSA9PSBOVUxMKVxcbitcXHR3aGlsZSAobm9kZSkge1xcbitcXHRcXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGNvbnRhaW5lcl9vZihub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvLCBpX2VhX2lwdXRfbm9kZSk7XFxuK1xcdFxcdG5vZGUgPSBub2RlLVxcdTAwM2VuZXh0O1xcbitcXHRcXHRpcHV0KFxcdTAwMjZlaS1cXHUwMDNldmZzX2lub2RlKTtcXG4rXFx0fVxcbit9XFxuK1xcbisvKlxcbisgKiBSZWxlYXNlIGEgVkZTIHJlZmVyZW5jZSBvbiBhbiBFQSBpbm9kZS4gIE11c3QgYmUgdXNlZCBpbnN0ZWFkIG9mIGlwdXQoKVxcbisgKiBpbiBhbnkgY29udGV4dCB3aGVyZSB4YXR0cl9zZW0gb3IgYSBqYmQyIGhhbmRsZSBpcyBoZWxkLlxcbisgKlxcbisgKiBJZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCByZWZlcmVuY2UsIGRyb3BzIGl0IGltbWVkaWF0ZWx5IHZpYVxcbisgKiBpcHV0X2lmX25vdF9sYXN0KCkgd2l0aCBubyBmdXJ0aGVyIGFjdGlvbiBuZWVkZWQuXFxuKyAqXFxuKyAqIElmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLCB0aGUgaW5vZGUgaXMgbGlua2VkIG9udG8gYSBwZXItc2JcXG4rICogbGxpc3QgdmlhIGlfZWFfaXB1dF9ub2RlIChlbWJlZGRlZCBpbiBleHQ0X2lub2RlX2luZm8sIHNoYXJpbmcgc3BhY2VcXG4rICogd2l0aCB0aGUgdW51c2VkIHhhdHRyX3NlbSkgYW5kIGEgZGVsYXllZCB3b3JrZXIgcGVyZm9ybXMgdGhlIGZpbmFsXFxuKyAqIGlwdXQoKSBpbiBhIGNsZWFuIGNvbnRleHQuXFxuKyAqXFxuKyAqIE5vdGU6IHdoaWxlIGFuIGlub2RlIGlzIG9uIHNfZWFfaW5vZGVfdG9fZnJlZSwgdGhlIHVuY29uc3VtZWQgaV9jb3VudFxcbisgKiByZWZlcmVuY2UgKHN0aWxsIDEpIGtlZXBzIGl0IGluIHRoZSBpbm9kZSBjYWNoZSwgc28gYW55IGNvbmN1cnJlbnRcXG4rICogaWdldCgpIGJ1bXBzIGlfY291bnQgdG8gXFx1MDAzZT0gMiBhbmQgaXB1dF9pZl9ub3RfbGFzdCgpIHdpbGwgc3VjY2VlZC5cXG4rICogTm9ib2R5IHdpbGwgYWRkIHRoZSBpbm9kZSBhIHNlY29uZCB0aW1lIHVudGlsIGV4dDRfZWFfaW5vZGVfd29yaygpXFxuKyAqIGRyb3BzIHRoYXQgcmVmZXJlbmNlIHZpYSBpcHV0KCkuXFxuKyAqL1xcbit2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0aWYgKCFpbm9kZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpO1xcbitcXHRpZiAoaXB1dF9pZl9ub3RfbGFzdChpbm9kZSkpXFxuIFxcdFxcdHJldHVybjtcXG4rXFx0bGxpc3RfYWRkKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2VhX2lwdXRfbm9kZSxcXG4rXFx0XFx0ICBcXHUwMDI2RVhUNF9TQihzYiktXFx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XFxuK1xcdC8qXFxuK1xcdCAqIFVzZSBhIHNob3J0IGRlbGF5IHRvIGFsbG93IG11bHRpcGxlIEVBIGlub2RlcyB0byBhY2N1bXVsYXRlLFxcbitcXHQgKiByZWR1Y2luZyB3b3JrcXVldWUgd2FrZXVwcyB3aGVuIHNldmVyYWwgYXJlIHJlbGVhc2VkIHRvZ2V0aGVyLlxcbitcXHQgKi9cXG4rXFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZFWFQ0X1NCKHNiKS1cXHUwMDNlc19lYV9pbm9kZV93b3JrLCAxKTtcXG4rfVxcbiBcXG4tXFx0Zm9yIChpZHggPSAwOyBpZHggXFx1MDAzYyBlYV9pbm9kZV9hcnJheS1cXHUwMDNlY291bnQ7ICsraWR4KVxcbi1cXHRcXHRpcHV0KGVhX2lub2RlX2FycmF5LVxcdTAwM2Vpbm9kZXNbaWR4XSk7XFxuLVxcdGtmcmVlKGVhX2lub2RlX2FycmF5KTtcXG4rdm9pZCBleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXFxuK3tcXG4rXFx0aW5pdF9sbGlzdF9oZWFkKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XFxuK1xcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfd29yaywgZXh0NF9lYV9pbm9kZV93b3JrKTtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5oIGIvZnMvZXh0NC94YXR0ci5oXFxuaW5kZXggMWZlZGY0NGQ0ZmI2NWUuLjUxOGYwMjgzZTE3NDQ0IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQveGF0dHIuaFxcbisrKyBiL2ZzL2V4dDQveGF0dHIuaFxcbkBAIC0xMzEsMTEgKzEzMSw2IEBAIHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQge1xcbiBcXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XFxuIH07XFxuIFxcbi1zdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSB7XFxuLVxcdHVuc2lnbmVkIGludCBjb3VudDtcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZXNbXSBfX2NvdW50ZWRfYnkoY291bnQpO1xcbi19O1xcbi1cXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXI7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXI7XFxuQEAgLTE4Nyw5ICsxODIsOSBAQCBleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHRib29sIGlzX2NyZWF0ZSk7XFxuIFxcbiBleHRlcm4gaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqYXJyYXksXFxuIFxcdFxcdFxcdFxcdCAgIGludCBleHRyYV9jcmVkaXRzKTtcXG4tZXh0ZXJuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICphcnJheSk7XFxuK2V4dGVybiB2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSk7XFxuK2V4dGVybiB2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBcXG4gZXh0ZXJuIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaFxcbmluZGV4IGQxMDg5N2IzYTFlMzUwLi4wNGYwZGU3OGZhN2E4NSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcXG5AQCAtMjQxMyw2ICsyNDEzLDE5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcl9zZXRfc3lzZnNfbmFtZV9nZW5lcmljKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoXFxuIGV4dGVybiB2b2lkIGlob2xkKHN0cnVjdCBpbm9kZSAqIGlub2RlKTtcXG4gZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7XFxuIHZvaWQgaXB1dF9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKik7XFxuK1xcbisvKipcXG4rICogaXB1dF9pZl9ub3RfbGFzdCAtIGRyb3AgYW4gaW5vZGUgcmVmZXJlbmNlIG9ubHkgaWYgaXQgaXMgbm90IHRoZSBsYXN0IG9uZVxcbisgKiBAaW5vZGU6IGlub2RlIHRvIHB1dFxcbisgKlxcbisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlZmVyZW5jZSB3YXMgZHJvcHBlZCwgZmFsc2UgaWYgdGhpcyB3YXMgdGhlIGxhc3RcXG4rICogcmVmZXJlbmNlIGFuZCB0aGUgY2FsbGVyIG11c3QgYXJyYW5nZSBmb3IgZmluYWwgaXB1dCgpIGluIGEgc2FmZSBjb250ZXh0LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBpcHV0X2lmX25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0cmV0dXJuIGF0b21pY19hZGRfdW5sZXNzKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9jb3VudCwgLTEsIDEpO1xcbit9XFxuK1xcbiBpbnQgaW5vZGVfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLFxcbiBcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbiBpbnQgZ2VuZXJpY191cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjI4OjI2Ljk1NzYzMjkzMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3NzcwODA4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbFwiLFxuICAgIFwiZXh0NF94YXR0cl9kZWxldGVfaW5vZGVcIixcbiAgICBcImV4dDRfZWFfaW5vZGVfd29ya1wiLFxuICAgIFwiZXh0NF9wdXRfZWFfaW5vZGVcIixcbiAgICBcImV4dDRfeGF0dHJfYmxvY2tfc2V0XCIsXG4gICAgXCJleHQ0X3hhdHRyX2lib2R5X3NldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWZlcnJlZCBpcHV0IG1lY2hhbmlzbSBmb3IgZXh0NCBFQSAoRXh0ZW5kZWQgQXR0cmlidXRlKSBpbm9kZXMgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMgYW5kIGRlYWRsb2Nrcy4gSXQgbW9kaWZpZXMgY29yZSBleHQ0IHhhdHRyIGhhbmRsaW5nIGFuZCBpbm9kZSBldmljdGlvbiBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1ZjJmNWU1ZjQxNzA1OTIwMGI4NjA0Y2VhNGI1YzQzZTg2YWU2YzhhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTE6Mjg6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXG5pbmRleCBiMzdjMTM2ZWEzYWIzMy4uYjliMGFkYTc3NzRiYjQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dDQuaFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcbkBAIC0xMDcwLDggKzEwNzAsMTQgQEAgc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XG4gXHQgKiBiZXR3ZWVuIHJlYWRlcnMgb2YgRUFzIGFuZCB3cml0ZXJzIG9mIHJlZ3VsYXIgZmlsZSBkYXRhLCBzb1xuIFx0ICogaW5zdGVhZCB3ZSBzeW5jaHJvbml6ZSBvbiB4YXR0cl9zZW0gd2hlbiByZWFkaW5nIG9yIGNoYW5naW5nXG4gXHQgKiBFQXMuXG4rXHQgKlxuK1x0ICogRUEgaW5vZGVzIChFWFQ0X0VBX0lOT0RFX0ZMKSBkbyBub3QgdXNlIHhhdHRyX3NlbTsgdGhleSByZXVzZVxuK1x0ICogdGhlIHNwYWNlIGZvciBkZWZlcnJlZCBpcHV0IGxpbmthZ2UuXG4gXHQgKi9cbi1cdHN0cnVjdCByd19zZW1hcGhvcmUgeGF0dHJfc2VtO1xuK1x0dW5pb24ge1xuK1x0XHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcbitcdFx0c3RydWN0IGxsaXN0X25vZGUgaV9lYV9pcHV0X25vZGU7XG4rXHR9O1xuIFxuIFx0LypcbiBcdCAqIElub2RlcyB3aXRoIEVYVDRfU1RBVEVfT1JQSEFOX0ZJTEUgdXNlIGlfb3JwaGFuX2lkeC4gT3RoZXJ3aXNlXG5AQCAtMTc3MCw2ICsxNzc2LDExIEBAIHN0cnVjdCBleHQ0X3NiX2luZm8ge1xuIFx0c3RydWN0IGV4dDRfZXNfc3RhdHMgc19lc19zdGF0cztcbiBcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9ibG9ja19jYWNoZTtcbiBcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9pbm9kZV9jYWNoZTtcbitcbitcdC8qIERlZmVycmVkIGlwdXQgZm9yIEVBIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyAqL1xuK1x0c3RydWN0IGxsaXN0X2hlYWQgc19lYV9pbm9kZV90b19mcmVlO1xuK1x0c3RydWN0IGRlbGF5ZWRfd29yayBzX2VhX2lub2RlX3dvcms7XG4rXG4gXHRzcGlubG9ja190IHNfZXNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuIFxuIFx0LyogSm91cm5hbCB0cmlnZ2VycyBmb3IgY2hlY2tzdW0gY29tcHV0YXRpb24gKi9cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi43NDdjNTJjMjMyY2MwMyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtMTc2LDcgKzE3Niw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0ICogKHhhdHRyIGJsb2NrIGZyZWVpbmcpLCBiaXRtYXAsIGdyb3VwIGRlc2NyaXB0b3IgKGlub2RlIGZyZWVpbmcpXG4gXHQgKi9cbiBcdGludCBleHRyYV9jcmVkaXRzID0gNjtcbi1cdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7XG4gXHRib29sIGZyZWV6ZV9wcm90ZWN0ZWQgPSBmYWxzZTtcbiBcbiBcdHRyYWNlX2V4dDRfZXZpY3RfaW5vZGUoaW5vZGUpO1xuQEAgLTI4MSw4ICsyODAsNyBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdH1cbiBcbiBcdC8qIFJlbW92ZSB4YXR0ciByZWZlcmVuY2VzLiAqL1xuLVx0ZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgXHUwMDI2ZWFfaW5vZGVfYXJyYXksXG4tXHRcdFx0XHQgICAgICBleHRyYV9jcmVkaXRzKTtcbitcdGVyciA9IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUsIGV4dHJhX2NyZWRpdHMpO1xuIFx0aWYgKGVycikge1xuIFx0XHRleHQ0X3dhcm5pbmcoaW5vZGUtXHUwMDNlaV9zYiwgXCJ4YXR0ciBkZWxldGUgKGVyciAlZClcIiwgZXJyKTtcbiBzdG9wX2hhbmRsZTpcbkBAIC0yOTAsNyArMjg4LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdGV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7XG4gXHRcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxuIFx0XHRcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiBcdFx0Z290byBub19kZWxldGU7XG4gXHR9XG4gXG5AQCAtMzIwLDcgKzMxNyw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbiBcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxuIFx0XHRzYl9lbmRfaW50d3JpdGUoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0cmV0dXJuO1xuIG5vX2RlbGV0ZTpcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXG5pbmRleCAyNDVmNjdkMTBkZWQzNC4uM2VmYTVhODE3YmVmNGYgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcbisrKyBiL2ZzL2V4dDQvc3VwZXIuY1xuQEAgLTEzMDMsNiArMTMwMyw4IEBAIHN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRcdFx0IFx1MDAyNnNiLVx1MDAzZXNfdXVpZCk7XG4gXG4gXHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XG4rXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyB3aGlsZSBxdW90YSBpcyBzdGlsbCBhY3RpdmUuICovXG4rXHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yayk7XG4gXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcbiBcbiBcdGRlc3Ryb3lfd29ya3F1ZXVlKHNiaS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG5AQCAtMTQyMyw2ICsxNDI1LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdG1lbXNldChcdTAwMjZlaS1cdTAwM2VpX2RxdW90LCAwLCBzaXplb2YoZWktXHUwMDNlaV9kcXVvdCkpO1xuICNlbmRpZlxuIFx0ZWktXHUwMDNlamlub2RlID0gTlVMTDtcbitcdC8qXG4rXHQgKiBSZWluaXRpYWxpemUgeGF0dHJfc2VtIGV2ZXJ5IGFsbG9jYXRpb24gYmVjYXVzZSBFQSBpbm9kZXNcbitcdCAqIHNoYXJlIHRoaXMgc3BhY2Ugd2l0aCBpX2VhX2lwdXRfbm9kZSAodmlhIHVuaW9uKSB3aGljaCBtYXlcbitcdCAqIGhhdmUgb3ZlcndyaXR0ZW4gdGhlIHNlbWFwaG9yZSB3aGVuIHRoZSBzbGFiIG9iamVjdCB3YXNcbitcdCAqIHByZXZpb3VzbHkgdXNlZCBhcyBhbiBFQSBpbm9kZS5cbitcdCAqL1xuK1x0aW5pdF9yd3NlbShcdTAwMjZlaS1cdTAwM2V4YXR0cl9zZW0pO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZWktXHUwMDNlaV9yc3ZfY29udmVyc2lvbl9saXN0KTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmVpLVx1MDAzZWlfY29tcGxldGVkX2lvX2xvY2spO1xuIFx0ZWktXHUwMDNlaV9zeW5jX3RpZCA9IDA7XG5AQCAtMTQ4OCw3ICsxNDk3LDYgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcbiBcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gZm9vO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZWktXHUwMDNlaV9vcnBoYW4pO1xuLVx0aW5pdF9yd3NlbShcdTAwMjZlaS1cdTAwM2V4YXR0cl9zZW0pO1xuIFx0aW5pdF9yd3NlbShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbiBcdGlub2RlX2luaXRfb25jZShcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUpO1xuIFx0ZXh0NF9mY19pbml0X2lub2RlKFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG5AQCAtNTQ5Nyw2ICs1NTA1LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRcdFx0ICBleHQ0X2hhc19mZWF0dXJlX29ycGhhbl9wcmVzZW50KHNiKSB8fFxuIFx0XHRcdCAgZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsX25lZWRzX3JlY292ZXJ5KHNiKSk7XG4gXG4rXHRleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzYmkpO1xuK1xuIFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfbW1wKHNiKSBcdTAwMjZcdTAwMjYgIXNiX3Jkb25seShzYikpIHtcbiBcdFx0ZXJyID0gZXh0NF9tdWx0aV9tb3VudF9wcm90ZWN0KHNiLCBsZTY0X3RvX2NwdShlcy1cdTAwM2VzX21tcF9ibG9jaykpO1xuIFx0XHRpZiAoZXJyKVxuQEAgLTU3NDcsNiArNTc1Nyw4IEBAIHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0cmV0dXJuIDA7XG4gXG4gZmFpbGVkX21vdW50OTpcbitcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBxdW90YSBzaHV0ZG93biAqL1xuK1x0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuIFx0ZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7XG4gZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBcdGV4dDRfcmVsZWFzZV9vcnBoYW5faW5mbyhzYik7XG5AQCAtNTc2Nyw2ICs1Nzc5LDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBcdGlmIChFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSlcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xuIGZhaWxlZF9tb3VudF93cTpcbitcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cbitcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcbiBcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XG4gXHRzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSA9IE5VTEw7XG4gXG5AQCAtNTc3Nyw2ICs1NzkxLDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBcdFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXHUwMDNlc19qb3VybmFsKTtcbiBcdH1cbiBmYWlsZWRfbW91bnQzYTpcbitcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGZyb20gam91cm5hbCByZXBsYXkgKi9cbitcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcbiBcdGV4dDRfZXNfdW5yZWdpc3Rlcl9zaHJpbmtlcihzYmkpO1xuIGZhaWxlZF9tb3VudDM6XG4gXHQvKiBmbHVzaCBzX3NiX3VwZF93b3JrIGJlZm9yZSBzYmkgZGVzdHJveSAqL1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xuaW5kZXggOTgyYTFmODMxZTIyODIuLjg1YWQyNTYxNDc0YjZlIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC94YXR0ci5jXG4rKysgYi9mcy9leHQ0L3hhdHRyLmNcbkBAIC0xMTQsMTAgKzExNCw2IEBAIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyc1tdID0ge1xuICNkZWZpbmUgRUFfSU5PREVfQ0FDSEUoaW5vZGUpXHQoKChzdHJ1Y3QgZXh0NF9zYl9pbmZvICopIFxcXG4gXHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZnNfaW5mbyktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSlcbiBcbi1zdGF0aWMgaW50XG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbi1cbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXG4ge1xuQEAgLTU2Nyw3ICs1NjMsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZW50cnksXG4gXHRcdFx0XHRcdGVhX2lub2RlLVx1MDAzZWlfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTtcbiBcdH1cbiBvdXQ6XG4tXHRpcHV0KGVhX2lub2RlKTtcbitcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTExMDQsMTAgKzExMDAsMTAgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX2luY19yZWYoaGFuZGxlLCBlYV9pbm9kZSk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwiaW5jIHJlZiBlcnJvciAlZFwiLCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0Z290byBjbGVhbnVwO1xuIFx0XHR9XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTEzMyw3ICsxMTI5LDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCJjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcIixcbiBcdFx0XHRcdFx0ICAgZXJyKTtcbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHR9XG4gXHRyZXR1cm4gc2F2ZWRfZXJyO1xuIH1cbkBAIC0xMTU2LDExICsxMTUyLDI5IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9yZXN0YXJ0X2ZuKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyogVHJhY2sgYW4gRUEgaW5vZGUgbnVtYmVyIGluIHRoZSBkZWR1cCBhcnJheSwgZXhwYW5kaW5nIGlmIG5lZWRlZC4gKi9cbitzdGF0aWMgdm9pZCBlYV9pbm9fYXJyYXlfYWRkKHVuc2lnbmVkIGludCAqKmVhX2lub3MsIHVuc2lnbmVkIGludCAqbnIsXG4rXHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgKnNpemUsIHVuc2lnbmVkIGludCAqaW5saW5lX2FycixcbitcdFx0XHQgICAgIHVuc2lnbmVkIGludCBpbm8pXG4re1xuK1x0aWYgKCpuciA9PSAqc2l6ZSkge1xuK1x0XHR1bnNpZ25lZCBpbnQgbmV3X3NpemUgPSAqc2l6ZSAqIDI7XG4rXHRcdHVuc2lnbmVkIGludCAqcDtcbitcbitcdFx0cCA9IGttYWxsb2NfYXJyYXkobmV3X3NpemUsIHNpemVvZigqcCksIEdGUF9OT0ZTIHwgX19HRlBfTk9GQUlMKTtcbitcdFx0bWVtY3B5KHAsICplYV9pbm9zLCAqbnIgKiBzaXplb2YoKnApKTtcbitcdFx0aWYgKCplYV9pbm9zICE9IGlubGluZV9hcnIpXG4rXHRcdFx0a2ZyZWUoKmVhX2lub3MpO1xuK1x0XHQqZWFfaW5vcyA9IHA7XG4rXHRcdCpzaXplID0gbmV3X3NpemU7XG4rXHR9XG4rXHQoKmVhX2lub3MpWygqbnIpKytdID0gaW5vO1xuK31cbitcbiBzdGF0aWMgdm9pZFxuIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuIFx0XHRcdCAgICAgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmZpcnN0LCBib29sIGJsb2NrX2NzdW0sXG4tXHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdCAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlO1xuQEAgLTExNzEsNiArMTE4NSwxMCBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0aW50IGVycjtcbiBcdGludCBjcmVkaXRzO1xuIFx0dm9pZCAqZW5kO1xuK1x0dW5zaWduZWQgaW50IGVhX2lub3NfaW5saW5lWzMyXTtcbitcdHVuc2lnbmVkIGludCAqZWFfaW5vcyA9IGVhX2lub3NfaW5saW5lO1xuK1x0dW5zaWduZWQgaW50IG5yX2VhX2lub3MgPSAwO1xuK1x0dW5zaWduZWQgaW50IGVhX2lub3Nfc2l6ZSA9IEFSUkFZX1NJWkUoZWFfaW5vc19pbmxpbmUpO1xuIFxuIFx0aWYgKGJsb2NrX2NzdW0pXG4gXHRcdGVuZCA9ICh2b2lkICopYmgtXHUwMDNlYl9kYXRhICsgYmgtXHUwMDNlYl9zaXplO1xuQEAgLTExODgsMjMgKzEyMDYsMzAgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcbiBcdGZvciAoZW50cnkgPSBmaXJzdDsgKHZvaWQgKillbnRyeSBcdTAwM2MgZW5kIFx1MDAyNlx1MDAyNiAhSVNfTEFTVF9FTlRSWShlbnRyeSk7XG4gXHQgICAgIGVudHJ5ID0gRVhUNF9YQVRUUl9ORVhUKGVudHJ5KSkge1xuK1x0XHR1bnNpZ25lZCBpbnQgaTtcbitcbiBcdFx0aWYgKCFlbnRyeS1cdTAwM2VlX3ZhbHVlX2ludW0pXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGVhX2lubyA9IGxlMzJfdG9fY3B1KGVudHJ5LVx1MDAzZWVfdmFsdWVfaW51bSk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFNraXAgRUEgaW5vZGVzIHdlIGFscmVhZHkgcHJvY2Vzc2VkLiAgT24gYSBjb3JydXB0ZWQgZnMsXG4rXHRcdCAqIGR1cGxpY2F0ZSBlbnRyaWVzIG1heSBwb2ludCB0byB0aGUgc2FtZSBFQSBpbm9kZTsgd2l0aG91dFxuK1x0XHQgKiB0aGlzIGNoZWNrLCB0aGUgc2Vjb25kIGlnZXQgY291bGQgZGVhZGxvY2sgb24gSV9GUkVFSU5HXG4rXHRcdCAqIGlmIHRoZSBkZWZlcnJlZCB3b3JrZXIgYWxyZWFkeSBzdGFydGVkIGV2aWN0aW5nIGl0LlxuK1x0XHQgKi9cbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZWFfaW5vczsgaSsrKVxuK1x0XHRcdGlmIChlYV9pbm9zW2ldID09IGVhX2lubylcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRpZiAoaSBcdTAwM2MgbnJfZWFfaW5vcylcbitcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0ZXJyID0gZXh0NF94YXR0cl9pbm9kZV9pZ2V0KHBhcmVudCwgZWFfaW5vLFxuIFx0XHRcdFx0XHQgICAgbGUzMl90b19jcHUoZW50cnktXHUwMDNlZV9oYXNoKSxcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNmVhX2lub2RlKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0ZXJyID0gZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoZWFfaW5vZGVfYXJyYXksIGVhX2lub2RlKTtcbi1cdFx0aWYgKGVycikge1xuLVx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbi1cdFx0XHRcdFx0ICAgXCJFeHBhbmQgaW5vZGUgYXJyYXkgZXJyPSVkXCIsIGVycik7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cbiBcdFx0ZXJyID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzX2ZuKGhhbmRsZSwgY3JlZGl0cywgY3JlZGl0cyxcbiBcdFx0XHRleHQ0X2ZyZWVfbWV0YWRhdGFfcmV2b2tlX2NyZWRpdHMocGFyZW50LVx1MDAzZWlfc2IsIDEpLFxuIFx0XHRcdGV4dDRfeGF0dHJfcmVzdGFydF9mbihoYW5kbGUsIHBhcmVudCwgYmgsIGJsb2NrX2NzdW0sXG5AQCAtMTIxMiw2ICsxMjM3LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCJFbnN1cmUgY3JlZGl0cyBlcnI9JWRcIixcbiBcdFx0XHRcdFx0ICAgZXJyKTtcbitcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGlmIChlcnIgXHUwMDNlIDApIHtcbkBAIC0xMjIxLDYgKzEyNDcsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdFwiUmUtZ2V0IHdyaXRlIGFjY2VzcyBlcnI9JWRcIixcbiBcdFx0XHRcdFx0XHRlcnIpO1xuK1x0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiBcdFx0fVxuQEAgLTEyMjksNiArMTI1NiwxMiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcImVhX2lub2RlIGRlYyByZWYgZXJyPSVkXCIsXG4gXHRcdFx0XHRcdCAgIGVycik7XG4rXHRcdFx0LyogVHJhY2sgaWYgbmxpbms9PTAgdG8gc2tpcCBkdXBsaWNhdGVzIChldmljdGlvbiByaXNrKSAqL1xuK1x0XHRcdGlmICghZWFfaW5vZGUtXHUwMDNlaV9ubGluaylcbitcdFx0XHRcdGVhX2lub19hcnJheV9hZGQoXHUwMDI2ZWFfaW5vcywgXHUwMDI2bnJfZWFfaW5vcyxcbitcdFx0XHRcdFx0XHQgXHUwMDI2ZWFfaW5vc19zaXplLCBlYV9pbm9zX2lubGluZSwgZWFfaW5vKTtcbitcbitcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG5AQCAtMTI0NSw5ICsxMjc4LDIyIEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGVudHJ5LVx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XG4gXHRcdGVudHJ5LVx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XG4gXG4rXHRcdC8qXG4rXHRcdCAqIFRyYWNrIG5saW5rPT0wIEVBIGlub2RlcyB0byBza2lwIGR1cGxpY2F0ZXMgbGF0ZXIgLS1cbitcdFx0ICogdGhleSByaXNrIElfRlJFRUlORyBkZWFkbG9jayBvbiByZS1pZ2V0LlxuK1x0XHQgKiBDaGVjayBubGluayBiZWZvcmUgcHV0IHNpbmNlIHB1dCByZWxlYXNlcyBvdXIgcmVmZXJlbmNlLlxuK1x0XHQgKi9cbitcdFx0aWYgKCFlYV9pbm9kZS1cdTAwM2VpX25saW5rKVxuK1x0XHRcdGVhX2lub19hcnJheV9hZGQoXHUwMDI2ZWFfaW5vcywgXHUwMDI2bnJfZWFfaW5vcyxcbitcdFx0XHRcdFx0IFx1MDAyNmVhX2lub3Nfc2l6ZSwgZWFfaW5vc19pbmxpbmUsIGVhX2lubyk7XG4rXG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdGRpcnR5ID0gdHJ1ZTtcbiBcdH1cbiBcbitcdGlmIChlYV9pbm9zICE9IGVhX2lub3NfaW5saW5lKVxuK1x0XHRrZnJlZShlYV9pbm9zKTtcbitcbiBcdGlmIChkaXJ0eSkge1xuIFx0XHQvKlxuIFx0XHQgKiBOb3RlIHRoYXQgd2UgYXJlIGRlbGliZXJhdGVseSBza2lwcGluZyBjc3VtIGNhbGN1bGF0aW9uIGZvclxuQEAgLTEyNzEsNyArMTMxNyw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gc3RhdGljIHZvaWRcbiBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi1cdFx0XHQgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiBcdFx0XHQgaW50IGV4dHJhX2NyZWRpdHMpXG4ge1xuIFx0c3RydWN0IG1iX2NhY2hlICplYV9ibG9ja19jYWNoZSA9IEVBX0JMT0NLX0NBQ0hFKGlub2RlKTtcbkBAIC0xMzEzLDcgKzEzNTgsNiBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHRcdCAgICAgQkZJUlNUKGJoKSxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7XG4gXHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgYmgsIDAsIDEsXG5AQCAtMTUwNSw3ICsxNTQ5LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRpZiAoZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpKVxuIFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcImNsZWFudXAgZGVjIHJlZiBlcnJvciAlZFwiLCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0XHR9XG4gXG5AQCAtMTU2NCw3ICsxNjA4LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLFxuIFx0XHRcdGt2ZnJlZShlYV9kYXRhKTtcbiBcdFx0XHRyZXR1cm4gZWFfaW5vZGU7XG4gXHRcdH1cbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdG5leHRfZW50cnk6XG4gXHRcdGNlID0gbWJfY2FjaGVfZW50cnlfZmluZF9uZXh0KGVhX2lub2RlX2NhY2hlLCBjZSk7XG4gXHR9XG5AQCAtMTYxNSw3ICsxNjU5LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0XHQgICAgICBlYV9pbm9kZS1cdTAwM2VpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7XG4gXHRyZXR1cm4gZWFfaW5vZGU7XG4gb3V0X2Vycjpcbi1cdGlwdXQoZWFfaW5vZGUpO1xuK1x0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBOVUxMLCB2YWx1ZV9sZW4pO1xuIFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiB9XG5AQCAtMTg0OCw3ICsxODkyLDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuIFxuIFx0cmV0ID0gMDtcbiBvdXQ6XG4tXHRpcHV0KG9sZF9lYV9pbm9kZSk7XG4rXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBvbGRfZWFfaW5vZGUpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMjAxMCw3ICsyMDU0LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdG9sZF9lYV9pbm9kZV9xdW90YSA9IGxlMzJfdG9fY3B1KFxuIFx0XHRcdFx0XHRcdHMtXHUwMDNlaGVyZS1cdTAwM2VlX3ZhbHVlX3NpemUpO1xuIFx0XHRcdH1cbi1cdFx0XHRpcHV0KHRtcF9pbm9kZSk7XG4rXHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgdG1wX2lub2RlKTtcbiBcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcbkBAIC0yMTUwLDcgKzIxOTQsNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFx0XHQgICBcImRlYyByZWYgZXJyb3I9JWRcIixcbiBcdFx0XHRcdFx0XHRcdCAgIGVycm9yKTtcbi1cdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdFx0ZWFfaW5vZGUgPSBOVUxMO1xuIFx0XHRcdH1cbiBcbkBAIC0yMTgyLDEyICsyMjI2LDggQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBcdC8qIERyb3AgdGhlIHByZXZpb3VzIHhhdHRyIGJsb2NrLiAqL1xuIFx0aWYgKGJzLVx1MDAzZWJoIFx1MDAyNlx1MDAyNiBicy1cdTAwM2ViaCAhPSBuZXdfYmgpIHtcbi1cdFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcbi1cbiBcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJzLVx1MDAzZWJoLFxuLVx0XHRcdFx0XHQgXHUwMDI2ZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0XHRcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xuLVx0XHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0fVxuIFx0ZXJyb3IgPSAwO1xuIFxuQEAgLTIyMDMsNyArMjI0Myw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0fVxuIFx0aWYgKGNlKVxuIFx0XHRtYl9jYWNoZV9lbnRyeV9wdXQoZWFfYmxvY2tfY2FjaGUsIGNlKTtcbkBAIC0yMjg1LDcgKzIzMjUsNyBAQCBpbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdCAgICBpX3NpemVfcmVhZChlYV9pbm9kZSkpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0fVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHR9XG5AQCAtMjI5Nyw3ICsyMzM3LDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdGhlYWRlci1cdTAwM2VoX21hZ2ljID0gY3B1X3RvX2xlMzIoMCk7XG4gXHRcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpO1xuIFx0fVxuLVx0aXB1dChlYV9pbm9kZSk7XG4rXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjg2Myw0NiArMjkwMyw2IEBAIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi0jZGVmaW5lIEVJQV9JTkNSIDE2IC8qIG11c3QgYmUgMl5uICovXG4tI2RlZmluZSBFSUFfTUFTSyAoRUlBX0lOQ1IgLSAxKVxuLVxuLS8qIEFkZCB0aGUgbGFyZ2UgeGF0dHIgQGlub2RlIGludG8gQGVhX2lub2RlX2FycmF5IGZvciBkZWZlcnJlZCBpcHV0KCkuXG4tICogSWYgQGVhX2lub2RlX2FycmF5IGlzIG5ldyBvciBmdWxsIGl0IHdpbGwgYmUgZ3Jvd24gYW5kIHRoZSBvbGRcbi0gKiBjb250ZW50cyBjb3BpZWQgb3Zlci5cbi0gKi9cbi1zdGF0aWMgaW50XG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkge1xuLVx0XHQvKlxuLVx0XHQgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuXG4tXHRcdCAqL1xuLVx0XHQoKmVhX2lub2RlX2FycmF5KSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXG4tXHRcdFx0XHRcdFx0IEVJQV9NQVNLLCBHRlBfTk9GUyk7XG4tXHRcdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgPSAwO1xuLVx0fSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgXHUwMDI2IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykge1xuLVx0XHQvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICsgbiAqIDE2IHNsb3RzIGFyZSBmdWxsICovXG4tXHRcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICpuZXdfYXJyYXkgPSBOVUxMO1xuLVxuLVx0XHRuZXdfYXJyYXkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxuLVx0XHRcdFx0XHQgKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgKyBFSUFfSU5DUixcbi1cdFx0XHRcdFx0IEdGUF9OT0ZTKTtcbi1cdFx0aWYgKG5ld19hcnJheSA9PSBOVUxMKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHRtZW1jcHkobmV3X2FycmF5LCAqZWFfaW5vZGVfYXJyYXksXG4tXHRcdCAgICAgICBzdHJ1Y3Rfc2l6ZSgqZWFfaW5vZGVfYXJyYXksIGlub2Rlcyxcbi1cdFx0XHRcdCAgICgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50KSk7XG4tXHRcdGtmcmVlKCplYV9pbm9kZV9hcnJheSk7XG4tXHRcdCplYV9pbm9kZV9hcnJheSA9IG5ld19hcnJheTtcbi1cdH1cbi1cdCgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50Kys7XG4tXHQoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vpbm9kZXNbKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgLSAxXSA9IGlub2RlO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qXG4gICogZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoKVxuICAqXG5AQCAtMjkxMyw3ICsyOTEzLDYgQEAgZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiAgKiByZWZlcmVuY2VzIG9uIHhhdHRyIGJsb2NrIGFuZCB4YXR0ciBpbm9kZXMuXG4gICovXG4gaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0ICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0ICAgIGludCBleHRyYV9jcmVkaXRzKVxuIHtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xuQEAgLTI5NTIsNyArMjk1MSw2IEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgaWxvYy5iaCxcbiBcdFx0XHRcdFx0XHQgICAgIElGSVJTVChoZWFkZXIpLFxuIFx0XHRcdFx0XHRcdCAgICAgZmFsc2UgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIGZhbHNlIC8qIHNraXBfcXVvdGEgKi8pO1xuIFx0fVxuQEAgLTI5ODYsMTIgKzI5ODQsMTIgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0ICAgICAgbGUzMl90b19jcHUoZW50cnktXHUwMDNlZV92YWx1ZV9zaXplKSk7XG4tXHRcdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHR9XG4gXG4gXHRcdH1cbiBcbi1cdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLCBlYV9pbm9kZV9hcnJheSxcbitcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHQgZXh0cmFfY3JlZGl0cyk7XG4gXHRcdC8qXG4gXHRcdCAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXNcbkBAIC0zMDEzLDE2ICszMDExLDYzIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi12b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkpXG4rLypcbisgKiBXb3JrZXIgZnVuY3Rpb24gZm9yIGRlZmVycmVkIEVBIGlub2RlIGlwdXQuICBQcm9jZXNzZXMgYWxsIGlub2RlcyBxdWV1ZWRcbisgKiBvbiBzX2VhX2lub2RlX3RvX2ZyZWUgaW4gYSBjb250ZXh0IGZyZWUgb2YgeGF0dHJfc2VtL2piZDIgaGFuZGxlIGxvY2tzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGV4dDRfZWFfaW5vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuLVx0aW50IGlkeDtcbitcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksXG4rXHRcdFx0XHRcdFx0c3RydWN0IGV4dDRfc2JfaW5mbyxcbitcdFx0XHRcdFx0XHRzX2VhX2lub2RlX3dvcmspO1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuIFxuLVx0aWYgKGVhX2lub2RlX2FycmF5ID09IE5VTEwpXG4rXHR3aGlsZSAobm9kZSkge1xuK1x0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGNvbnRhaW5lcl9vZihub2RlLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvLCBpX2VhX2lwdXRfbm9kZSk7XG4rXHRcdG5vZGUgPSBub2RlLVx1MDAzZW5leHQ7XG4rXHRcdGlwdXQoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbitcdH1cbit9XG4rXG4rLypcbisgKiBSZWxlYXNlIGEgVkZTIHJlZmVyZW5jZSBvbiBhbiBFQSBpbm9kZS4gIE11c3QgYmUgdXNlZCBpbnN0ZWFkIG9mIGlwdXQoKVxuKyAqIGluIGFueSBjb250ZXh0IHdoZXJlIHhhdHRyX3NlbSBvciBhIGpiZDIgaGFuZGxlIGlzIGhlbGQuXG4rICpcbisgKiBJZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCByZWZlcmVuY2UsIGRyb3BzIGl0IGltbWVkaWF0ZWx5IHZpYVxuKyAqIGlwdXRfaWZfbm90X2xhc3QoKSB3aXRoIG5vIGZ1cnRoZXIgYWN0aW9uIG5lZWRlZC5cbisgKlxuKyAqIElmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLCB0aGUgaW5vZGUgaXMgbGlua2VkIG9udG8gYSBwZXItc2JcbisgKiBsbGlzdCB2aWEgaV9lYV9pcHV0X25vZGUgKGVtYmVkZGVkIGluIGV4dDRfaW5vZGVfaW5mbywgc2hhcmluZyBzcGFjZVxuKyAqIHdpdGggdGhlIHVudXNlZCB4YXR0cl9zZW0pIGFuZCBhIGRlbGF5ZWQgd29ya2VyIHBlcmZvcm1zIHRoZSBmaW5hbFxuKyAqIGlwdXQoKSBpbiBhIGNsZWFuIGNvbnRleHQuXG4rICpcbisgKiBOb3RlOiB3aGlsZSBhbiBpbm9kZSBpcyBvbiBzX2VhX2lub2RlX3RvX2ZyZWUsIHRoZSB1bmNvbnN1bWVkIGlfY291bnRcbisgKiByZWZlcmVuY2UgKHN0aWxsIDEpIGtlZXBzIGl0IGluIHRoZSBpbm9kZSBjYWNoZSwgc28gYW55IGNvbmN1cnJlbnRcbisgKiBpZ2V0KCkgYnVtcHMgaV9jb3VudCB0byBcdTAwM2U9IDIgYW5kIGlwdXRfaWZfbm90X2xhc3QoKSB3aWxsIHN1Y2NlZWQuXG4rICogTm9ib2R5IHdpbGwgYWRkIHRoZSBpbm9kZSBhIHNlY29uZCB0aW1lIHVudGlsIGV4dDRfZWFfaW5vZGVfd29yaygpXG4rICogZHJvcHMgdGhhdCByZWZlcmVuY2UgdmlhIGlwdXQoKS5cbisgKi9cbit2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4re1xuK1x0aWYgKCFpbm9kZSlcbitcdFx0cmV0dXJuO1xuK1x0V0FSTl9PTl9PTkNFKCEoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSk7XG4rXHRpZiAoaXB1dF9pZl9ub3RfbGFzdChpbm9kZSkpXG4gXHRcdHJldHVybjtcbitcdGxsaXN0X2FkZChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZWFfaXB1dF9ub2RlLFxuK1x0XHQgIFx1MDAyNkVYVDRfU0Ioc2IpLVx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XG4rXHQvKlxuK1x0ICogVXNlIGEgc2hvcnQgZGVsYXkgdG8gYWxsb3cgbXVsdGlwbGUgRUEgaW5vZGVzIHRvIGFjY3VtdWxhdGUsXG4rXHQgKiByZWR1Y2luZyB3b3JrcXVldWUgd2FrZXVwcyB3aGVuIHNldmVyYWwgYXJlIHJlbGVhc2VkIHRvZ2V0aGVyLlxuK1x0ICovXG4rXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2RVhUNF9TQihzYiktXHUwMDNlc19lYV9pbm9kZV93b3JrLCAxKTtcbit9XG4gXG4tXHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgZWFfaW5vZGVfYXJyYXktXHUwMDNlY291bnQ7ICsraWR4KVxuLVx0XHRpcHV0KGVhX2lub2RlX2FycmF5LVx1MDAzZWlub2Rlc1tpZHhdKTtcbi1cdGtmcmVlKGVhX2lub2RlX2FycmF5KTtcbit2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcbit7XG4rXHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XG4rXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrLCBleHQ0X2VhX2lub2RlX3dvcmspO1xuIH1cbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuaCBiL2ZzL2V4dDQveGF0dHIuaFxuaW5kZXggMWZlZGY0NGQ0ZmI2NWUuLjUxOGYwMjgzZTE3NDQ0IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC94YXR0ci5oXG4rKysgYi9mcy9leHQ0L3hhdHRyLmhcbkBAIC0xMzEsMTEgKzEzMSw2IEBAIHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQge1xuIFx0c3RydWN0IGV4dDRfaWxvYyBpbG9jO1xuIH07XG4gXG4tc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkge1xuLVx0dW5zaWduZWQgaW50IGNvdW50O1xuLVx0c3RydWN0IGlub2RlICppbm9kZXNbXSBfX2NvdW50ZWRfYnkoY291bnQpO1xuLX07XG4tXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3RydXN0ZWRfaGFuZGxlcjtcbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyO1xuQEAgLTE4Nyw5ICsxODIsOSBAQCBleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0Ym9vbCBpc19jcmVhdGUpO1xuIFxuIGV4dGVybiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdCAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqYXJyYXksXG4gXHRcdFx0XHQgICBpbnQgZXh0cmFfY3JlZGl0cyk7XG4tZXh0ZXJuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICphcnJheSk7XG4rZXh0ZXJuIHZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKTtcbitleHRlcm4gdm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiBleHRlcm4gaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXG4gXHRcdFx0ICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaFxuaW5kZXggZDEwODk3YjNhMWUzNTAuLjA0ZjBkZTc4ZmE3YTg1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbkBAIC0yNDEzLDYgKzI0MTMsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIHN1cGVyX3NldF9zeXNmc19uYW1lX2dlbmVyaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hcbiBleHRlcm4gdm9pZCBpaG9sZChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7XG4gZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7XG4gdm9pZCBpcHV0X25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqKTtcbitcbisvKipcbisgKiBpcHV0X2lmX25vdF9sYXN0IC0gZHJvcCBhbiBpbm9kZSByZWZlcmVuY2Ugb25seSBpZiBpdCBpcyBub3QgdGhlIGxhc3Qgb25lXG4rICogQGlub2RlOiBpbm9kZSB0byBwdXRcbisgKlxuKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVmZXJlbmNlIHdhcyBkcm9wcGVkLCBmYWxzZSBpZiB0aGlzIHdhcyB0aGUgbGFzdFxuKyAqIHJlZmVyZW5jZSBhbmQgdGhlIGNhbGxlciBtdXN0IGFycmFuZ2UgZm9yIGZpbmFsIGlwdXQoKSBpbiBhIHNhZmUgY29udGV4dC5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGlwdXRfaWZfbm90X2xhc3Qoc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRyZXR1cm4gYXRvbWljX2FkZF91bmxlc3MoXHUwMDI2aW5vZGUtXHUwMDNlaV9jb3VudCwgLTEsIDEpO1xuK31cbitcbiBpbnQgaW5vZGVfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLFxuIFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCBnZW5lcmljX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjI4OjI2Ljk1NzYzODExMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNTQwODY2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEV4dDQgWGF0dHIgUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIGRpdmluZyBkZWVwIGludG8gZXh0NCdzIGV4dGVuZGVkIGF0dHJpYnV0ZSAoeGF0dHIpIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgaG93IEVBIGlub2RlcyBhcmUgZnJlZWQuICBJdCBzZWVtcyB0byBiZSBhIHNpZ25pZmljYW50IGNoYW5nZSwgaW50cm9kdWNpbmcgYSBkZWZlcnJlZCBgaXB1dGAgbWVjaGFuaXNtIGZvciBFQSBpbm9kZXMgdG8gc2lkZXN0ZXAgc29tZSBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gVGhhdOKAmXMgYSBnb29kIGNsdWUgaXTigJlzIGZpeGluZyBhIHJlYWwgcHJvYmxlbSwgYW5kIGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBjYXJlZnVsIHNjcnV0aW55LiBUaGlzIGlzbid0IHNvbWUgdHJpdmlhbCB0d2VhazsgaXQgdG91Y2hlcyBjb3JlIGZpbGVzeXN0ZW0gZnVuY3Rpb25hbGl0eS5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyB0b3VjaGluZyBzb21lIGtleSBkYXRhIHN0cnVjdHVyZXMsIGxpa2UgdXNpbmcgYSB1bmlvbiBpbiBgc3RydWN0IGV4dDRfaW5vZGVfaW5mb2AgZm9yIGB4YXR0cl9zZW1gIGFuZCBgaV9lYV9pcHV0X25vZGVgIGFuZCBhZGRpbmcgZmllbGRzIChgc19lYV9pbm9kZV90b19mcmVlYCBhbmQgYHNfZWFfaW5vZGVfd29ya2ApIHRvIGBzdHJ1Y3QgZXh0NF9zYl9pbmZvYC4gSXQgbG9va3MgbGlrZSB0aGV54oCZcmUgdHJ5aW5nIHRvIG1hbmFnZSB0aGUgZGVmZXJyZWQgaW5vZGUgcmVsZWFzZSBtb3JlIGVmZmVjdGl2ZWx5LiBBbmQgaXQncyBub3QganVzdCBhIG1pbm9yIHJlZmFjdG9yOyB3ZSdyZSB0YWxraW5nIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gc2V2ZXJhbCBpbXBvcnRhbnQgZnVuY3Rpb25zOiBgZXh0NF9ldmljdF9pbm9kZWAsIGBleHQ0X3B1dF9zdXBlcmAsIGBleHQ0X2FsbG9jX2lub2RlYCwgYF9fZXh0NF9maWxsX3N1cGVyYCwgYW5kIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGluIGBmcy9leHQ0L3hhdHRyLmNgLiBQbHVzLCB0aGVyZSBhcmUgc29tZSBicmFuZCBuZXcgZnVuY3Rpb25zIGJlaW5nIGludHJvZHVjZWQ6IGBleHQ0X3B1dF9lYV9pbm9kZWAsIGBleHQ0X2VhX2lub2RlX3dvcmtgLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBpcHV0X2lmX25vdF9sYXN0YCBpbiBgaW5jbHVkZS9saW51eC9mcy5oYC4gIFRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgY29kZSBhbmQgYSBjaGFuZ2Ugd29ydGggZnV6aW5nIGFzIGl0IGlzIHRvdWNoaW5nIGNvcmUgZXh0NCBmaWxlIHN5c3RlbSBmdW5jdGlvbmFsaXR5LlxuXG5HaXZlbiBhbGwgb2YgdGhpcywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgXCJXb3J0aEZ1enppbmcgPSB0cnVlXCIuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IHdoYXQncyB0aGUgbW9zdCAqY3JpdGljYWwqIGNvZGUgdG8gdGFyZ2V0IHdpdGggZnV6emluZz8gTG9va2luZyBhdCB0aGUgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMsIGl0J3MgcHJldHR5IGNsZWFyIHdoZXJlIHRoZSBhY3Rpb24gaXMuIE15IGluaXRpYWwgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlOlxuXG4qICAgYGV4dDRfZXZpY3RfaW5vZGVgXG4qICAgYGV4dDRfcHV0X3N1cGVyYFxuKiAgIGBleHQ0X2FsbG9jX2lub2RlYFxuKiAgIGBfX2V4dDRfZmlsbF9zdXBlcmBcbiogICBUaGUgeGF0dHItcmVsYXRlZCBmdW5jdGlvbnMsIGVzcGVjaWFsbHk6IGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYCwgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYCwgYGV4dDRfZWFfaW5vZGVfd29ya2AsIGBleHQ0X3B1dF9lYV9pbm9kZWAsIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgYW5kIGBleHQ0X3hhdHRyX2lib2R5X3NldGBcblxuVGhlc2UgYXJlIGxpa2VseSB0aGUgZnVuY3Rpb25zIG1vc3QgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGRlZmVycmVkIGlub2RlIG1hbmFnZW1lbnQgYW5kIHhhdHRyIG1hbmlwdWxhdGlvbnMuIFRoZXNlIHNob3VsZCBiZSB0aGUgYEZvY3VzU3ltYm9sc2AgZm9yIG91ciBmdXp6aW5nIGVmZm9ydHMuXG5cbkZpbmFsbHksIGFyZSB0aGVyZSBhbnkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBUaGlzIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgRUEgaW5vZGVzIGluIGV4dDQsIHdoaWNoIGlzIGEgZmFpcmx5IHN0YW5kYXJkIGZlYXR1cmUuICBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoYXQgSSBkb24ndCBuZWVkIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzZXQgaW4gdGhlIEtjb25maWcsIHNvIEknbGwgc2NhbiBmb3IgdGhpbmdzIGxpa2UgYEVYVDRfRUFfSU5PREVfRkxgIGFuZCBzaW1pbGFyIHRlcm1zIHRvIGVuc3VyZSB0aGUgZmVhdHVyZSBpcyBwcm9wZXJseSBlbmFibGVkIGR1cmluZyB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ2MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjI4OjM2LjIxMTcyODg1M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg5MjEzMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhUNF9FQV9JTk9ERVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD00NDA9c3RydWN0IGZsZXhfZ3JvdXBzIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTUwNC0jZGVmaW5lIEVYVDRfVkVSSVRZX0ZMXFx0XFx0XFx0MHgwMDEwMDAwMCAvKiBWZXJpdHkgcHJvdGVjdGVkIGlub2RlICovXFxuZnMvZXh0NC9leHQ0Lmg6NTA1OiNkZWZpbmUgRVhUNF9FQV9JTk9ERV9GTFxcdCAgICAgICAgMHgwMDIwMDAwMCAvKiBJbm9kZSB1c2VkIGZvciBsYXJnZSBFQSAqL1xcbmZzL2V4dDQvZXh0NC5oLTUwNi0vKiAweDAwNDAwMDAwIHdhcyBmb3JtZXJseSBFWFQ0X0VPRkJMT0NLU19GTCAqL1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MTA0OD1zdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTEwNzMtXFx0ICpcXG5mcy9leHQ0L2V4dDQuaDoxMDc0OlxcdCAqIEVBIGlub2RlcyAoRVhUNF9FQV9JTk9ERV9GTCkgZG8gbm90IHVzZSB4YXR0cl9zZW07IHRoZXkgcmV1c2VcXG5mcy9leHQ0L2V4dDQuaC0xMDc1LVxcdCAqIHRoZSBzcGFjZSBmb3IgZGVmZXJyZWQgaXB1dCBsaW5rYWdlLlxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjcwMj1zdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9pc19xdW90YV9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0yNzA0LVxcdHJldHVybiBJU19OT1FVT1RBKGlub2RlKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvZXh0NC5oOjI3MDU6XFx0ICAgICAgICEoRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9mbGFncyBcXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpO1xcbmZzL2V4dDQvZXh0NC5oLTI3MDYtfVxcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYz05MzM9c3RydWN0IGlub2RlICpfX2V4dDRfbmV3X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYy05OTUtXFxuZnMvZXh0NC9pYWxsb2MuYzo5OTY6XFx0aWYgKCEoaV9mbGFncyBcXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKSB7XFxuZnMvZXh0NC9pYWxsb2MuYy05OTctXFx0XFx0ZXJyID0gZnNjcnlwdF9wcmVwYXJlX25ld19pbm9kZShkaXIsIGlub2RlLCBcXHUwMDI2ZW5jcnlwdCk7XFxuLS1cXG5mcy9leHQ0L2lhbGxvYy5jLTEwMDUtXFxuZnMvZXh0NC9pYWxsb2MuYzoxMDA2OlxcdGlmICghaGFuZGxlIFxcdTAwMjZcXHUwMDI2IHNiaS1cXHUwMDNlc19qb3VybmFsIFxcdTAwMjZcXHUwMDI2ICEoaV9mbGFncyBcXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKSB7XFxuZnMvZXh0NC9pYWxsb2MuYy0xMDA3LVxcdFxcdHJldDIgPSBleHQ0X3hhdHRyX2NyZWRpdHNfZm9yX25ld19pbm9kZShkaXIsIG1vZGUsIGVuY3J5cHQpO1xcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYy0xMzA4LVxcdGlmIChleHQ0X2hhc19mZWF0dXJlX2lubGluZV9kYXRhKHNiKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvaWFsbG9jLmM6MTMwOTpcXHQgICAgKCEoZWktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiAoRVhUNF9EQVhfRkx8RVhUNF9FQV9JTk9ERV9GTCkpIHx8IFNfSVNESVIobW9kZSkpKVxcbmZzL2V4dDQvaWFsbG9jLmMtMTMxMC1cXHRcXHRleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYy0xMzI2LVxcbmZzL2V4dDQvaWFsbG9jLmM6MTMyNzpcXHRpZiAoIShlaS1cXHUwMDNlaV9mbGFncyBcXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKSB7XFxuZnMvZXh0NC9pYWxsb2MuYy0xMzI4LVxcdFxcdGVyciA9IGV4dDRfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyKTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz0xNjk9dm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtMTg0LVxcbmZzL2V4dDQvaW5vZGUuYzoxODU6XFx0aWYgKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKVxcbmZzL2V4dDQvaW5vZGUuYy0xODYtXFx0XFx0ZXh0NF9ldmljdF9lYV9pbm9kZShpbm9kZSk7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NDY5Nz1zdGF0aWMgaW5saW5lIHU2NCBleHQ0X2lub2RlX3BlZWtfaXZlcnNpb24oY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9leHQ0L2lub2RlLmMtNDY5OC17XFxuZnMvZXh0NC9pbm9kZS5jOjQ2OTk6XFx0aWYgKHVubGlrZWx5KEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSlcXG5mcy9leHQ0L2lub2RlLmMtNDcwMC1cXHRcXHRyZXR1cm4gaW5vZGVfcGVla19pdmVyc2lvbl9yYXcoaW5vZGUpO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTUxOTA9aW50IGV4dDRfZ2V0X3Byb2ppZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBrcHJvamlkX3QgKnByb2ppZClcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy01MTk5LSAqIGV4dDQgaGFzIHNlbGYtbWFuYWdlZCBpX3ZlcnNpb24gZm9yIGVhIGlub2RlcywgaXQgc3RvcmVzIHRoZSBsb3dlciAzMmJpdCBvZlxcbmZzL2V4dDQvaW5vZGUuYzo1MjAwOiAqIHJlZmNvdW50IGluIGlfdmVyc2lvbiwgc28gdXNlIHJhdyB2YWx1ZXMgaWYgaW5vZGUgaGFzIEVYVDRfRUFfSU5PREVfRkwgZmxhZ1xcbmZzL2V4dDQvaW5vZGUuYy01MjAxLSAqIHNldC5cXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01MjAzPXN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2lub2RlX3NldF9pdmVyc2lvbl9xdWVyaWVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCB2YWwpXFxuZnMvZXh0NC9pbm9kZS5jLTUyMDQte1xcbmZzL2V4dDQvaW5vZGUuYzo1MjA1OlxcdGlmICh1bmxpa2VseShFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpXFxuZnMvZXh0NC9pbm9kZS5jLTUyMDYtXFx0XFx0aW5vZGVfc2V0X2l2ZXJzaW9uX3Jhdyhpbm9kZSwgdmFsKTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01MjExPXN0YXRpYyBpbnQgY2hlY2tfaWdvdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2lnZXRfZmxhZ3MgZmxhZ3MsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTIxNi1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBFWFQ0X0lHRVRfRUFfSU5PREUpIHtcXG5mcy9leHQ0L2lub2RlLmM6NTIxNzpcXHRcXHRpZiAoIShFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpIHtcXG5mcy9leHQ0L2lub2RlLmMtNTIxOC1cXHRcXHRcXHRlcnJfc3RyID0gXFxcIm1pc3NpbmcgRUFfSU5PREUgZmxhZ1xcXCI7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTIyNi1cXHR9IGVsc2Uge1xcbmZzL2V4dDQvaW5vZGUuYzo1MjI3OlxcdFxcdGlmICgoRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9mbGFncyBcXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKSB7XFxuZnMvZXh0NC9pbm9kZS5jLTUyMjgtXFx0XFx0XFx0LypcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xNTE2PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTUzNS1cXHRcXHRcXHRcXHQgIFNfSUZSRUcgfCAwNjAwLCBOVUxMLCBpbm9kZS1cXHUwMDNlaV9pbm8gKyAxLCBvd25lcixcXG5mcy9leHQ0L3hhdHRyLmM6MTUzNjpcXHRcXHRcXHRcXHQgIEVYVDRfRUFfSU5PREVfRkwpO1xcbmZzL2V4dDQveGF0dHIuYy0xNTM3LVxcdGlmICghSVNfRVJSKGVhX2lub2RlKSkge1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTMwNTE9dm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTMwNTQtXFx0XFx0cmV0dXJuO1xcbmZzL2V4dDQveGF0dHIuYzozMDU1OlxcdFdBUk5fT05fT05DRSghKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSk7XFxuZnMvZXh0NC94YXR0ci5jLTMwNTYtXFx0aWYgKGlwdXRfaWZfbm90X2xhc3QoaW5vZGUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMToyODozNi4zNzA2NjU0ODdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODc1NjE0MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIEV4dDQncyBFQSBJTk9ERSBGZWF0dXJlKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCB0aGUgRUEgSU5PREUgZmVhdHVyZSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gTXkgZmlyc3QgbW92ZSwgYXMgYWx3YXlzLCBpcyB0byBjaGVjayBmb3IgYSBLY29uZmlnIG9wdGlvbi4gS25vd2luZyB0aGlzLCBpZiB0aGVyZSBpcyBhIHdheSB0byBjb25maWd1cmUgdGhpcyBmZWF0dXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBjb250cm9sbGVkIGFuZCB3aGV0aGVyIGl0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCBvciBpZiBpdCBuZWVkcyB0byBiZSBleHBsaWNpdGx5IGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcuIEZpbmRpbmcgdGhlIEtjb25maWcgb3B0aW9uIGlzIHRoZSBpbml0aWFsLCBhbmQgbGlrZWx5IG1vc3QgaW1wb3J0YW50LCBmaXJzdCBzdGVwLCBhcyBpdCB3aWxsIHJldmVhbCBob3cgdGhlIGZlYXR1cmUgaXMgbWFuYWdlZCBhbmQgY29udHJvbGxlZCBpbiB0aGlzIGtlcm5lbCBjb250ZXh0LiBMZXQncyBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjI5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6Mjg6MzkuMjQ2Mjg0MDUzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNjE2MDIyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFQ0X0VBX0lOT0RFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6Mjg6MzkuMzI2OTEzNTk1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYyMDI0MjIxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFWFQ0IEV4dGVuZGVkIEF0dHJpYnV0ZXMgYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBFWFQ0IGV4dGVuZGVkIGF0dHJpYnV0ZXMgdGhpbmcsIHNwZWNpZmljYWxseSB0aGUgYEVYVDRfRUFfSU5PREVgLiBIbW0sIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGRlZGljYXRlZCBLY29uZmlnIG9wdGlvbiBmb3IgaXQgZGlyZWN0bHkuIFRoYXQncyBhIGJpdCBzdXJwcmlzaW5nLiBVc3VhbGx5LCB0aGVyZSdzIGEgZmxhZyBmb3IgZXZlcnl0aGluZy4gUmlnaHQsIEkgcmVjYWxsIGl0IGJlaW5nIGVuYWJsZWQgaW1wbGljaXRseSB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBleHRlbmRlZCBhdHRyaWJ1dGVzLiBCdXQganVzdCB0byBiZSBzdXJlLCBJIHNob3VsZCB2ZXJpZnkgd2hhdCBlbmFibGVzIGl0LlxuXG5XYWl0IGEgc2Vjb25kLCB0aGVyZSAqaXMqIGFuIGBFWFQ0X0ZTYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgb2YgY291cnNlLiBCdXQgdGhhdCdzIHByZXR0eSBzdGFuZGFyZCwgdGhlIGdlbmVyYWwgZmlsZSBzeXN0ZW0gc3VwcG9ydC4gSSBuZWVkIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljLiBMZXQncyBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBFWFQ0LXJlbGF0ZWQgY29uZmlncyB0aGF0IG1pZ2h0IHNoZWQgc29tZSBsaWdodCBvbiB0aGlzLi4uIEkga25vdyB0aGVyZSdzIHNvbWV0aGluZyBhcm91bmQgaGVyZSBzb21ld2hlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODUzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6Mjg6NDMuOTQ3MTU5NzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE3NjY4NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xcbmZzL2V4dDQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVxcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy0zNC1cXG5mcy9leHQ0L0tjb25maWc6MzU6Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuZnMvZXh0NC9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIlVzZSBleHQ0IGZvciBleHQyIGZpbGUgc3lzdGVtc1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy00NS1cXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIkV4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNTUtXFxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIkV4dDQgU2VjdXJpdHkgTGFiZWxzXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTY3LVxcbmZzL2V4dDQvS2NvbmZpZzo2ODpjb25maWcgRVhUNF9ERUJVR1xcbmZzL2V4dDQvS2NvbmZpZy02OS1cXHRib29sIFxcXCJFeHQ0IGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTc2LVxcbmZzL2V4dDQvS2NvbmZpZzo3Nzpjb25maWcgRVhUNF9LVU5JVF9URVNUU1xcbmZzL2V4dDQvS2NvbmZpZy03OC1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIGV4dDRcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6Mjg6NDQuMzY0ODM2MDExWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY5NjU5MzIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudHMgZm9yIE1vZGlmaWVkIGV4dDQgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG1vZGlmaWNhdGlvbnMgaW4gdGhlIGV4dDQgY29kZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVsZXZhbnQgdG8gaGlnaGxpZ2h0LiBJIGluaXRpYWxseSB0aG91Z2h0IEkgbWlnaHQgbmVlZCB0byBleHBsaWNpdGx5IG1lbnRpb24gYEVYVDRfRlNgLCBzaW5jZSBpdCdzIHRoZSBjb3JlIGZpbGVzeXN0ZW0uIEJ1dCB0aGVuIEkgcmUtcmVhZCB0aGUgaW5zdHJ1Y3Rpb25zLCBhbmQgaXTigJlzIGNsZWFyOiBcIkRvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdCBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuXCIgUmlnaHQsIHRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZSwgc28gSSdsbCBsZWF2ZSBgRVhUNF9GU2Agb3V0OyBpdCdzIHByYWN0aWNhbGx5IGEgZ2l2ZW4uXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgdG8gYmUgY2VydGFpbiBJIGhhdmUgYSBmdWxsIHBpY3R1cmUuIE9rYXksIEkndmUgZ290OiBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X2VhX2lub2RlX3dvcmtgLCBgZXh0NF9wdXRfZWFfaW5vZGVgLCBgZXh0NF94YXR0cl9ibG9ja19zZXRgLCBhbmQgYGV4dDRfeGF0dHJfaWJvZHlfc2V0YC4gVGhlc2UgYWxsIHNvdW5kIGxpa2UgdGhleSBhcmUgd29ya2luZyB3aXRoIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRyKS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgY29uZmlnIGNvcnJlY3QuXG5cbkxldCdzIGRvIHRoaXMgcHJvcGVybHksIHRoZSBuZXh0IHN0ZXAgaXMgdG8gaGVhZCB0byBgZnMvZXh0NC9LY29uZmlnYCBhbmQgbG9vayBmb3IgYW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ5NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMToyODo0OS4wNjE0MzI1NTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTA4MDM2MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWEFUVFJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMToyODo0OS4xNzA1MjQ1OTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI3OTYwNDkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIGV4dDQgRUEgSW5vZGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIHhhdHRyIGlzIGFsd2F5cyBvbiBmb3IgZXh0NCwgd2hpY2ggaXMgZ29vZCB0byBrZWVwIGluIG1pbmQuIExldCdzIGRpZyBiYWNrIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBpdCdzIGZvY3VzaW5nIG9uIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYCwgYW5kIEkgc2VlIGl0J3MgdHJ5aW5nIHRvIG9wdGltaXplIEVBIGlub2RlIGhhbmRsaW5nIGJ5IHRyYWNraW5nIHRoZW0gaW4gYW4gYXJyYXkgdG8gcHJldmVudCBkdXBsaWNhdGUgcHJvY2Vzc2luZy4gVGhhdCdzIGEgY2xhc3NpYyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb247IHNtYXJ0IG1vdmUuIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgZXh0NF9wdXRfZWFfaW5vZGVgIHdoaWNoIHVzZXMgYHNfZWFfaW5vZGVfdG9fZnJlZWAgYW5kIGBzX2VhX2lub2RlX3dvcmtgLCBzbyBpdCBpcyBkZWZpbml0ZWx5IGRvaW5nIGRlZmVycmVkIGlwdXQuIFNvIGl0IHNlZW1zIGxpa2UgdGhpcyBpcyB0aGUgd29yayBxdWV1ZSBwYXJ0LiBBbmQsIG5vIGxvbmdlciB0YWtpbmcgdGhhdCBhcnJheSBpbiBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgYWxzbyBtb2RpZmllcyBgZXh0NF9ldmljdF9pbm9kZWAgYW5kIGBleHQ0X3B1dF9zdXBlcmAgdG8gZmx1c2ggdGhlIHdvcmtxdWV1ZSwgc3VnZ2VzdGluZyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggZGVmZXJyZWQgb3BlcmF0aW9ucyBhbmQgbmVlZGluZyB0byBndWFyYW50ZWUgY2xlYW51cCBhdCBjcml0aWNhbCBwb2ludHMuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCdzIGxvZ2ljIGlzIGNsZWFyOiBpdCdzIGludHJvZHVjaW5nIGEgZGVmZXJyZWQgYGlwdXRgIG1lY2hhbmlzbSBmb3IgZXh0NCBFQSBpbm9kZXMgdG8gZG9kZ2UgbG9jayBvcmRlcmluZyBpc3N1ZXMgYW5kIGRlYWRsb2Nrcy4gSSBuZWVkIHRvIGJlIGV4dHJhIGNhdXRpb3VzIGFuZCBsb29rIGF0IHRoZSBjb3JlIGV4dDQgeGF0dHIgaGFuZGxpbmcgYW5kIGlub2RlIGV2aWN0aW9uIHBhdGhzLiBJIHdvdWxkIGFsc28gYWRkIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgYW5kIGBleHQ0X3hhdHRyX2lib2R5X3NldGAgdG8gdGhlIHBvdGVudGlhbCBmdXp6aW5nIHN5bWJvbHMgYmVjYXVzZSBJJ20gYmV0dGluZyB0aGF0IHRoZSBvcmlnaW5hbCBwYXRjaCBpcyBvbmx5IHBhcnQgb2YgdGhlIHB1enpsZS5cblxuTm93LCB3YWl0LCBhbSBJIG1pc3NpbmcgYW55dGhpbmcgY29uZmlndXJhdGlvbi13aXNlPyBJJ20gZ29pbmcgdG8gbG9vayBhdCBgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMYCBhbmQgYENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZYCB0byBzZWUgaWYgdGhvc2UgY29tZSBpbnRvIHBsYXkgaGVyZS4gRUEgaW5vZGVzIGFyZSAqdHlwaWNhbGx5KiB1c2VkIGZvciAqbGFyZ2UqIHhhdHRycywgYW5kIEFDTHMgYW5kIFNFTGludXggbGFiZWxzIHVzZSB4YXR0cnMsIHNvIHRoZXJlIGlzIHNvbWUgb3ZlcmxhcC4gQnV0IGxhcmdlIHhhdHRycyBhcmUgdXN1YWxseSAqdXNlciogeGF0dHJzLCBub3QgQUNMcyBvciBzZWN1cml0eSBsYWJlbHMuIEhtbW0sIGlzIHRoZXJlIGEgYENPTkZJR19FWFQ0X0ZTX1hBVFRSYD8gVGhhdCdzIHdoYXQgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBpbiBgZnMvZXh0NC9NYWtlZmlsZWAgdG8gbWFrZSBzdXJlIG5vdGhpbmcgaXMgbWlzc2VkIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAyOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMToyODo1Ni40NTAxMzI3NThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NjM4MjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhhdHRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVxcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXFxcXG4tLVxcbmZzL2V4dDQvTWFrZWZpbGUtMTEtXFx0XFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlOjEyOlxcdFxcdHN1cGVyLm8gc3ltbGluay5vIHN5c2ZzLm8geGF0dHIubyB4YXR0cl9odXJkLm8geGF0dHJfdHJ1c3RlZC5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlOjEzOlxcdFxcdHhhdHRyX3VzZXIubyBmYXN0X2NvbW1pdC5vIG9ycGhhbi5vXFxuZnMvZXh0NC9NYWtlZmlsZS0xNC1cXG5mcy9leHQ0L01ha2VmaWxlPTE1PWV4dDQtJChDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wpXFx0Kz0gYWNsLm9cXG5mcy9leHQ0L01ha2VmaWxlOjE2OmV4dDQtJChDT05GSUdfRVhUNF9GU19TRUNVUklUWSlcXHRcXHQrPSB4YXR0cl9zZWN1cml0eS5vXFxuZnMvZXh0NC9NYWtlZmlsZS0xNy1leHQ0LXRlc3Qtb2Jqc1xcdFxcdFxcdFxcdCs9IGlub2RlLXRlc3QubyBtYmFsbG9jLXRlc3QubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjI4OjU2LjU0ODc4Nzc0OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTg1ODU5NzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBYYXR0ciBGb2N1cyoqXG5cbk9rYXksIHNvIGB4YXR0ci5vYCBpcyBhIGNvbnN0YW50IGNvbXBpbGUuIE5vIG5lZWQgdG8gZmlkZGxlIHdpdGggYW55IGNvbmZpZ3VyYXRpb24gdGhlcmU7IGl0J3MgYWx3YXlzIGluY2x1ZGVkLiBOb3csIGxldCdzIGdldCBkb3duIHRvIHRoZSBtZWF0IG9mIHJlZmluaW5nIHRoZXNlIGBGb2N1c1N5bWJvbHNgLiBJIG5lZWQgdG8gaG9uZSBpbiBvbiB0aGUgY29yZSBvcGVyYXRpb25zLlxuXG5Mb29raW5nIGF0IHRoZSBsaXN0LCBJJ20gZ29pbmcgdG8gc2VsZWN0IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFzIHRoZSBtb3N0IHJlbGV2YW50OiBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X2VhX2lub2RlX3dvcmtgLCBgZXh0NF9wdXRfZWFfaW5vZGVgLCBgZXh0NF94YXR0cl9ibG9ja19zZXRgLCBhbmQgYGV4dDRfeGF0dHJfaWJvZHlfc2V0YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIHRvIHhhdHRyIG1hbmFnZW1lbnQgd2l0aGluIGV4dDQsIHRvdWNoaW5nIG9uIHJlZmVyZW5jZSBjb3VudGluZywgZGVsZXRpb24sIGFuZCBib3RoIGJsb2NrLWJhc2VkIGFuZCBpbm9kZS1iYXNlZCBleHRlbmRlZCBhdHRyaWJ1dGUgc3RvcmFnZS4gTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGlzIHJlZmluZWQgc2VsZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjIwOCwiT3V0cHV0VG9rZW5zIjoxNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6Mjk6MDEuNzM0NjUzMTUzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsXCIsXG4gICAgXCJleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZVwiLFxuICAgIFwiZXh0NF9lYV9pbm9kZV93b3JrXCIsXG4gICAgXCJleHQ0X3B1dF9lYV9pbm9kZVwiLFxuICAgIFwiZXh0NF94YXR0cl9ibG9ja19zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfaWJvZHlfc2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIGZvciBleHQ0IEVBIChFeHRlbmRlZCBBdHRyaWJ1dGUpIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyBhbmQgZGVhZGxvY2tzLiBJdCBtb2RpZmllcyBjb3JlIGV4dDQgeGF0dHIgaGFuZGxpbmcgYW5kIGlub2RlIGV2aWN0aW9uIHBhdGhzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxcIixcbiAgICBcImV4dDRfeGF0dHJfZGVsZXRlX2lub2RlXCIsXG4gICAgXCJleHQ0X2VhX2lub2RlX3dvcmtcIixcbiAgICBcImV4dDRfcHV0X2VhX2lub2RlXCIsXG4gICAgXCJleHQ0X3hhdHRyX2Jsb2NrX3NldFwiLFxuICAgIFwiZXh0NF94YXR0cl9pYm9keV9zZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gZm9yIGV4dDQgRUEgKEV4dGVuZGVkIEF0dHJpYnV0ZSkgaW5vZGVzIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzIGFuZCBkZWFkbG9ja3MuIEl0IG1vZGlmaWVzIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZyBhbmQgaW5vZGUgZXZpY3Rpb24gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowllblz[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-29 11:21:29 +0000 UTC FinishedAt: 2026-06-29 11:29:03 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "series_id": "19598828-b970-4299-8a70-e9c30dcbcde0" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_xattr_inode_dec_ref_all", "ext4_xattr_delete_inode", "ext4_ea_inode_work", "ext4_put_ea_inode", "ext4_xattr_block_set", "ext4_xattr_ibody_set" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": { "findings": [ "9b2e3f5d-279a-469f-9f2a-05f96ea11587" ] } } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjI4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X2VhX2lub2RlX3dvcmsmIzM0OywKICAgICYjMzQ7ZXh0NF9wdXRfZWFfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9ibG9ja19zZXQmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pYm9keV9zZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIGZvciBleHQ0IEVBIChFeHRlbmRlZCBBdHRyaWJ1dGUpIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyBhbmQgZGVhZGxvY2tzLiBJdCBtb2RpZmllcyBjb3JlIGV4dDQgeGF0dHIgaGFuZGxpbmcgYW5kIGlub2RlIGV2aWN0aW9uIHBhdGhzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjI4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNWYyZjVlNWY0MTcwNTkyMDBiODYwNGNlYTRiNWM0M2U4NmFlNmM4YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDExOjI4OjIyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcbmluZGV4IGIzN2MxMzZlYTNhYjMzLi5iOWIwYWRhNzc3NGJiNCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaFxuQEAgLTEwNzAsOCAmIzQzOzEwNzAsMTQgQEAgc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XG4gXHQgKiBiZXR3ZWVuIHJlYWRlcnMgb2YgRUFzIGFuZCB3cml0ZXJzIG9mIHJlZ3VsYXIgZmlsZSBkYXRhLCBzb1xuIFx0ICogaW5zdGVhZCB3ZSBzeW5jaHJvbml6ZSBvbiB4YXR0cl9zZW0gd2hlbiByZWFkaW5nIG9yIGNoYW5naW5nXG4gXHQgKiBFQXMuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBFQSBpbm9kZXMgKEVYVDRfRUFfSU5PREVfRkwpIGRvIG5vdCB1c2UgeGF0dHJfc2VtOyB0aGV5IHJldXNlXG4mIzQzO1x0ICogdGhlIHNwYWNlIGZvciBkZWZlcnJlZCBpcHV0IGxpbmthZ2UuXG4gXHQgKi9cbi1cdHN0cnVjdCByd19zZW1hcGhvcmUgeGF0dHJfc2VtO1xuJiM0MztcdHVuaW9uIHtcbiYjNDM7XHRcdHN0cnVjdCByd19zZW1hcGhvcmUgeGF0dHJfc2VtO1xuJiM0MztcdFx0c3RydWN0IGxsaXN0X25vZGUgaV9lYV9pcHV0X25vZGU7XG4mIzQzO1x0fTtcbiBcbiBcdC8qXG4gXHQgKiBJbm9kZXMgd2l0aCBFWFQ0X1NUQVRFX09SUEhBTl9GSUxFIHVzZSBpX29ycGhhbl9pZHguIE90aGVyd2lzZVxuQEAgLTE3NzAsNiAmIzQzOzE3NzYsMTEgQEAgc3RydWN0IGV4dDRfc2JfaW5mbyB7XG4gXHRzdHJ1Y3QgZXh0NF9lc19zdGF0cyBzX2VzX3N0YXRzO1xuIFx0c3RydWN0IG1iX2NhY2hlICpzX2VhX2Jsb2NrX2NhY2hlO1xuIFx0c3RydWN0IG1iX2NhY2hlICpzX2VhX2lub2RlX2NhY2hlO1xuJiM0MztcbiYjNDM7XHQvKiBEZWZlcnJlZCBpcHV0IGZvciBFQSBpbm9kZXMgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMgKi9cbiYjNDM7XHRzdHJ1Y3QgbGxpc3RfaGVhZCBzX2VhX2lub2RlX3RvX2ZyZWU7XG4mIzQzO1x0c3RydWN0IGRlbGF5ZWRfd29yayBzX2VhX2lub2RlX3dvcms7XG4mIzQzO1xuIFx0c3BpbmxvY2tfdCBzX2VzX2xvY2sgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcbiBcbiBcdC8qIEpvdXJuYWwgdHJpZ2dlcnMgZm9yIGNoZWNrc3VtIGNvbXB1dGF0aW9uICovXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXG5pbmRleCBjZTk5ODA3YzVmNWIyYy4uNzQ3YzUyYzIzMmNjMDMgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5vZGUuY1xuQEAgLTE3Niw3ICYjNDM7MTc2LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHQgKiAoeGF0dHIgYmxvY2sgZnJlZWluZyksIGJpdG1hcCwgZ3JvdXAgZGVzY3JpcHRvciAoaW5vZGUgZnJlZWluZylcbiBcdCAqL1xuIFx0aW50IGV4dHJhX2NyZWRpdHMgPSA2O1xuLVx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcbiBcdGJvb2wgZnJlZXplX3Byb3RlY3RlZCA9IGZhbHNlO1xuIFxuIFx0dHJhY2VfZXh0NF9ldmljdF9pbm9kZShpbm9kZSk7XG5AQCAtMjgxLDggJiM0MzsyODAsNyBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdH1cbiBcbiBcdC8qIFJlbW92ZSB4YXR0ciByZWZlcmVuY2VzLiAqL1xuLVx0ZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgXHUwMDI2ZWFfaW5vZGVfYXJyYXksXG4tXHRcdFx0XHQgICAgICBleHRyYV9jcmVkaXRzKTtcbiYjNDM7XHRlcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBleHRyYV9jcmVkaXRzKTtcbiBcdGlmIChlcnIpIHtcbiBcdFx0ZXh0NF93YXJuaW5nKGlub2RlLVx1MDAzZWlfc2IsIFwmIzM0O3hhdHRyIGRlbGV0ZSAoZXJyICVkKVwmIzM0OywgZXJyKTtcbiBzdG9wX2hhbmRsZTpcbkBAIC0yOTAsNyAmIzQzOzI4OCw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0XHRleHQ0X29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpO1xuIFx0XHRpZiAoZnJlZXplX3Byb3RlY3RlZClcbiBcdFx0XHRzYl9lbmRfaW50d3JpdGUoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XG4gXHRcdGdvdG8gbm9fZGVsZXRlO1xuIFx0fVxuIFxuQEAgLTMyMCw3ICYjNDM7MzE3LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRleHQ0X2pvdXJuYWxfc3RvcChoYW5kbGUpO1xuIFx0aWYgKGZyZWV6ZV9wcm90ZWN0ZWQpXG4gXHRcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XG4gXHRyZXR1cm47XG4gbm9fZGVsZXRlOlxuIFx0LypcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcbmluZGV4IDI0NWY2N2QxMGRlZDM0Li4zZWZhNWE4MTdiZWY0ZiAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9zdXBlci5jXG5AQCAtMTMwMyw2ICYjNDM7MTMwMyw4IEBAIHN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRcdFx0IFx1MDAyNnNiLVx1MDAzZXNfdXVpZCk7XG4gXG4gXHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XG4mIzQzO1x0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgd2hpbGUgcXVvdGEgaXMgc3RpbGwgYWN0aXZlLiAqL1xuJiM0MztcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcbiBcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuIFxuIFx0ZGVzdHJveV93b3JrcXVldWUoc2JpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKTtcbkBAIC0xNDIzLDYgJiM0MzsxNDI1LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdG1lbXNldChcdTAwMjZlaS1cdTAwM2VpX2RxdW90LCAwLCBzaXplb2YoZWktXHUwMDNlaV9kcXVvdCkpO1xuICNlbmRpZlxuIFx0ZWktXHUwMDNlamlub2RlID0gTlVMTDtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJlaW5pdGlhbGl6ZSB4YXR0cl9zZW0gZXZlcnkgYWxsb2NhdGlvbiBiZWNhdXNlIEVBIGlub2Rlc1xuJiM0MztcdCAqIHNoYXJlIHRoaXMgc3BhY2Ugd2l0aCBpX2VhX2lwdXRfbm9kZSAodmlhIHVuaW9uKSB3aGljaCBtYXlcbiYjNDM7XHQgKiBoYXZlIG92ZXJ3cml0dGVuIHRoZSBzZW1hcGhvcmUgd2hlbiB0aGUgc2xhYiBvYmplY3Qgd2FzXG4mIzQzO1x0ICogcHJldmlvdXNseSB1c2VkIGFzIGFuIEVBIGlub2RlLlxuJiM0MztcdCAqL1xuJiM0MztcdGluaXRfcndzZW0oXHUwMDI2ZWktXHUwMDNleGF0dHJfc2VtKTtcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmVpLVx1MDAzZWlfcnN2X2NvbnZlcnNpb25fbGlzdCk7XG4gXHRzcGluX2xvY2tfaW5pdChcdTAwMjZlaS1cdTAwM2VpX2NvbXBsZXRlZF9pb19sb2NrKTtcbiBcdGVpLVx1MDAzZWlfc3luY190aWQgPSAwO1xuQEAgLTE0ODgsNyAmIzQzOzE0OTcsNiBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxuIFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBmb287XG4gXG4gXHRJTklUX0xJU1RfSEVBRChcdTAwMjZlaS1cdTAwM2VpX29ycGhhbik7XG4tXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZXhhdHRyX3NlbSk7XG4gXHRpbml0X3J3c2VtKFx1MDAyNmVpLVx1MDAzZWlfZGF0YV9zZW0pO1xuIFx0aW5vZGVfaW5pdF9vbmNlKFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG4gXHRleHQ0X2ZjX2luaXRfaW5vZGUoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbkBAIC01NDk3LDYgJiM0Mzs1NTA1LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRcdFx0ICBleHQ0X2hhc19mZWF0dXJlX29ycGhhbl9wcmVzZW50KHNiKSB8fFxuIFx0XHRcdCAgZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsX25lZWRzX3JlY292ZXJ5KHNiKSk7XG4gXG4mIzQzO1x0ZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc2JpKTtcbiYjNDM7XG4gXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9tbXAoc2IpIFx1MDAyNlx1MDAyNiAhc2JfcmRvbmx5KHNiKSkge1xuIFx0XHRlcnIgPSBleHQ0X211bHRpX21vdW50X3Byb3RlY3Qoc2IsIGxlNjRfdG9fY3B1KGVzLVx1MDAzZXNfbW1wX2Jsb2NrKSk7XG4gXHRcdGlmIChlcnIpXG5AQCAtNTc0Nyw2ICYjNDM7NTc1Nyw4IEBAIHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0cmV0dXJuIDA7XG4gXG4gZmFpbGVkX21vdW50OTpcbiYjNDM7XHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgcXVvdGEgc2h1dGRvd24gKi9cbiYjNDM7XHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yayk7XG4gXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcbiBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0ZXh0NF9yZWxlYXNlX29ycGhhbl9pbmZvKHNiKTtcbkBAIC01NzY3LDYgJiM0Mzs1Nzc5LDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBcdGlmIChFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSlcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xuIGZhaWxlZF9tb3VudF93cTpcbiYjNDM7XHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgZnJlZWluZyBzdHJ1Y3R1cmVzICovXG4mIzQzO1x0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuIFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlKTtcbiBcdHNiaS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlID0gTlVMTDtcbiBcbkBAIC01Nzc3LDYgJiM0Mzs1NzkxLDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBcdFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXHUwMDNlc19qb3VybmFsKTtcbiBcdH1cbiBmYWlsZWRfbW91bnQzYTpcbiYjNDM7XHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBmcm9tIGpvdXJuYWwgcmVwbGF5ICovXG4mIzQzO1x0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuIFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XG4gZmFpbGVkX21vdW50MzpcbiBcdC8qIGZsdXNoIHNfc2JfdXBkX3dvcmsgYmVmb3JlIHNiaSBkZXN0cm95ICovXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXG5pbmRleCA5ODJhMWY4MzFlMjI4Mi4uODVhZDI1NjE0NzRiNmUgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3hhdHRyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuY1xuQEAgLTExNCwxMCAmIzQzOzExNCw2IEBAIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyc1tdID0ge1xuICNkZWZpbmUgRUFfSU5PREVfQ0FDSEUoaW5vZGUpXHQoKChzdHJ1Y3QgZXh0NF9zYl9pbmZvICopIFxcXG4gXHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZnNfaW5mbyktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSlcbiBcbi1zdGF0aWMgaW50XG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbi1cbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXG4ge1xuQEAgLTU2Nyw3ICYjNDM7NTYzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LFxuIFx0XHRcdFx0XHRlYV9pbm9kZS1cdTAwM2VpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7XG4gXHR9XG4gb3V0OlxuLVx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0cmV0dXJuIGVycjtcbiB9XG4gXG5AQCAtMTEwNCwxMCAmIzQzOzExMDAsMTAgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX2luY19yZWYoaGFuZGxlLCBlYV9pbm9kZSk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwmIzM0O2luYyByZWYgZXJyb3IgJWRcJiMzNDssIGVycik7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0Z290byBjbGVhbnVwO1xuIFx0XHR9XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIFxuQEAgLTExMzMsNyAmIzQzOzExMjksNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcJiMzNDtjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcJiMzNDssXG4gXHRcdFx0XHRcdCAgIGVycik7XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdH1cbiBcdHJldHVybiBzYXZlZF9lcnI7XG4gfVxuQEAgLTExNTYsMTEgJiM0MzsxMTUyLDI5IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9yZXN0YXJ0X2ZuKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4mIzQzOy8qIFRyYWNrIGFuIEVBIGlub2RlIG51bWJlciBpbiB0aGUgZGVkdXAgYXJyYXksIGV4cGFuZGluZyBpZiBuZWVkZWQuICovXG4mIzQzO3N0YXRpYyB2b2lkIGVhX2lub19hcnJheV9hZGQodW5zaWduZWQgaW50ICoqZWFfaW5vcywgdW5zaWduZWQgaW50ICpucixcbiYjNDM7XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgKnNpemUsIHVuc2lnbmVkIGludCAqaW5saW5lX2FycixcbiYjNDM7XHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgaW5vKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCpuciA9PSAqc2l6ZSkge1xuJiM0MztcdFx0dW5zaWduZWQgaW50IG5ld19zaXplID0gKnNpemUgKiAyO1xuJiM0MztcdFx0dW5zaWduZWQgaW50ICpwO1xuJiM0MztcbiYjNDM7XHRcdHAgPSBrbWFsbG9jX2FycmF5KG5ld19zaXplLCBzaXplb2YoKnApLCBHRlBfTk9GUyB8IF9fR0ZQX05PRkFJTCk7XG4mIzQzO1x0XHRtZW1jcHkocCwgKmVhX2lub3MsICpuciAqIHNpemVvZigqcCkpO1xuJiM0MztcdFx0aWYgKCplYV9pbm9zICE9IGlubGluZV9hcnIpXG4mIzQzO1x0XHRcdGtmcmVlKCplYV9pbm9zKTtcbiYjNDM7XHRcdCplYV9pbm9zID0gcDtcbiYjNDM7XHRcdCpzaXplID0gbmV3X3NpemU7XG4mIzQzO1x0fVxuJiM0MztcdCgqZWFfaW5vcylbKCpucikmIzQzOyYjNDM7XSA9IGlubztcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgdm9pZFxuIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuIFx0XHRcdCAgICAgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmZpcnN0LCBib29sIGJsb2NrX2NzdW0sXG4tXHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdCAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlO1xuQEAgLTExNzEsNiAmIzQzOzExODUsMTAgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdGludCBlcnI7XG4gXHRpbnQgY3JlZGl0cztcbiBcdHZvaWQgKmVuZDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZWFfaW5vc19pbmxpbmVbMzJdO1xuJiM0MztcdHVuc2lnbmVkIGludCAqZWFfaW5vcyA9IGVhX2lub3NfaW5saW5lO1xuJiM0MztcdHVuc2lnbmVkIGludCBucl9lYV9pbm9zID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgZWFfaW5vc19zaXplID0gQVJSQVlfU0laRShlYV9pbm9zX2lubGluZSk7XG4gXG4gXHRpZiAoYmxvY2tfY3N1bSlcbiBcdFx0ZW5kID0gKHZvaWQgKiliaC1cdTAwM2ViX2RhdGEgJiM0MzsgYmgtXHUwMDNlYl9zaXplO1xuQEAgLTExODgsMjMgJiM0MzsxMjA2LDMwIEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXG4gXHRmb3IgKGVudHJ5ID0gZmlyc3Q7ICh2b2lkICopZW50cnkgXHUwMDNjIGVuZCBcdTAwMjZcdTAwMjYgIUlTX0xBU1RfRU5UUlkoZW50cnkpO1xuIFx0ICAgICBlbnRyeSA9IEVYVDRfWEFUVFJfTkVYVChlbnRyeSkpIHtcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBpO1xuJiM0MztcbiBcdFx0aWYgKCFlbnRyeS1cdTAwM2VlX3ZhbHVlX2ludW0pXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGVhX2lubyA9IGxlMzJfdG9fY3B1KGVudHJ5LVx1MDAzZWVfdmFsdWVfaW51bSk7XG4mIzQzO1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFNraXAgRUEgaW5vZGVzIHdlIGFscmVhZHkgcHJvY2Vzc2VkLiAgT24gYSBjb3JydXB0ZWQgZnMsXG4mIzQzO1x0XHQgKiBkdXBsaWNhdGUgZW50cmllcyBtYXkgcG9pbnQgdG8gdGhlIHNhbWUgRUEgaW5vZGU7IHdpdGhvdXRcbiYjNDM7XHRcdCAqIHRoaXMgY2hlY2ssIHRoZSBzZWNvbmQgaWdldCBjb3VsZCBkZWFkbG9jayBvbiBJX0ZSRUVJTkdcbiYjNDM7XHRcdCAqIGlmIHRoZSBkZWZlcnJlZCB3b3JrZXIgYWxyZWFkeSBzdGFydGVkIGV2aWN0aW5nIGl0LlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBucl9lYV9pbm9zOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdFx0aWYgKGVhX2lub3NbaV0gPT0gZWFfaW5vKVxuJiM0MztcdFx0XHRcdGJyZWFrO1xuJiM0MztcdFx0aWYgKGkgXHUwMDNjIG5yX2VhX2lub3MpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcbiBcdFx0ZXJyID0gZXh0NF94YXR0cl9pbm9kZV9pZ2V0KHBhcmVudCwgZWFfaW5vLFxuIFx0XHRcdFx0XHQgICAgbGUzMl90b19jcHUoZW50cnktXHUwMDNlZV9oYXNoKSxcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNmVhX2lub2RlKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0ZXJyID0gZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoZWFfaW5vZGVfYXJyYXksIGVhX2lub2RlKTtcbi1cdFx0aWYgKGVycikge1xuLVx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbi1cdFx0XHRcdFx0ICAgXCYjMzQ7RXhwYW5kIGlub2RlIGFycmF5IGVycj0lZFwmIzM0OywgZXJyKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuIFx0XHRlcnIgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNfZm4oaGFuZGxlLCBjcmVkaXRzLCBjcmVkaXRzLFxuIFx0XHRcdGV4dDRfZnJlZV9tZXRhZGF0YV9yZXZva2VfY3JlZGl0cyhwYXJlbnQtXHUwMDNlaV9zYiwgMSksXG4gXHRcdFx0ZXh0NF94YXR0cl9yZXN0YXJ0X2ZuKGhhbmRsZSwgcGFyZW50LCBiaCwgYmxvY2tfY3N1bSxcbkBAIC0xMjEyLDYgJiM0MzsxMjM3LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCYjMzQ7RW5zdXJlIGNyZWRpdHMgZXJyPSVkXCYjMzQ7LFxuIFx0XHRcdFx0XHQgICBlcnIpO1xuJiM0MztcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGlmIChlcnIgXHUwMDNlIDApIHtcbkBAIC0xMjIxLDYgJiM0MzsxMjQ3LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHRcJiMzNDtSZS1nZXQgd3JpdGUgYWNjZXNzIGVycj0lZFwmIzM0OyxcbiBcdFx0XHRcdFx0XHRlcnIpO1xuJiM0MztcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXHRcdH1cbkBAIC0xMjI5LDYgJiM0MzsxMjU2LDEyIEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwmIzM0O2VhX2lub2RlIGRlYyByZWYgZXJyPSVkXCYjMzQ7LFxuIFx0XHRcdFx0XHQgICBlcnIpO1xuJiM0MztcdFx0XHQvKiBUcmFjayBpZiBubGluaz09MCB0byBza2lwIGR1cGxpY2F0ZXMgKGV2aWN0aW9uIHJpc2spICovXG4mIzQzO1x0XHRcdGlmICghZWFfaW5vZGUtXHUwMDNlaV9ubGluaylcbiYjNDM7XHRcdFx0XHRlYV9pbm9fYXJyYXlfYWRkKFx1MDAyNmVhX2lub3MsIFx1MDAyNm5yX2VhX2lub3MsXG4mIzQzO1x0XHRcdFx0XHRcdCBcdTAwMjZlYV9pbm9zX3NpemUsIGVhX2lub3NfaW5saW5lLCBlYV9pbm8pO1xuJiM0MztcbiYjNDM7XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuQEAgLTEyNDUsOSAmIzQzOzEyNzgsMjIgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0ZW50cnktXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcbiBcdFx0ZW50cnktXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcbiBcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBUcmFjayBubGluaz09MCBFQSBpbm9kZXMgdG8gc2tpcCBkdXBsaWNhdGVzIGxhdGVyIC0tXG4mIzQzO1x0XHQgKiB0aGV5IHJpc2sgSV9GUkVFSU5HIGRlYWRsb2NrIG9uIHJlLWlnZXQuXG4mIzQzO1x0XHQgKiBDaGVjayBubGluayBiZWZvcmUgcHV0IHNpbmNlIHB1dCByZWxlYXNlcyBvdXIgcmVmZXJlbmNlLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAoIWVhX2lub2RlLVx1MDAzZWlfbmxpbmspXG4mIzQzO1x0XHRcdGVhX2lub19hcnJheV9hZGQoXHUwMDI2ZWFfaW5vcywgXHUwMDI2bnJfZWFfaW5vcyxcbiYjNDM7XHRcdFx0XHRcdCBcdTAwMjZlYV9pbm9zX3NpemUsIGVhX2lub3NfaW5saW5lLCBlYV9pbm8pO1xuJiM0MztcbiYjNDM7XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdGRpcnR5ID0gdHJ1ZTtcbiBcdH1cbiBcbiYjNDM7XHRpZiAoZWFfaW5vcyAhPSBlYV9pbm9zX2lubGluZSlcbiYjNDM7XHRcdGtmcmVlKGVhX2lub3MpO1xuJiM0MztcbiBcdGlmIChkaXJ0eSkge1xuIFx0XHQvKlxuIFx0XHQgKiBOb3RlIHRoYXQgd2UgYXJlIGRlbGliZXJhdGVseSBza2lwcGluZyBjc3VtIGNhbGN1bGF0aW9uIGZvclxuQEAgLTEyNzEsNyAmIzQzOzEzMTcsNiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIHN0YXRpYyB2b2lkXG4gZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4tXHRcdFx0IHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0IGludCBleHRyYV9jcmVkaXRzKVxuIHtcbiBcdHN0cnVjdCBtYl9jYWNoZSAqZWFfYmxvY2tfY2FjaGUgPSBFQV9CTE9DS19DQUNIRShpbm9kZSk7XG5AQCAtMTMxMyw3ICYjNDM7MTM1OCw2IEBAIGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgYmgsXG4gXHRcdFx0XHRcdFx0ICAgICBCRklSU1QoYmgpLFxuIFx0XHRcdFx0XHRcdCAgICAgdHJ1ZSAvKiBibG9ja19jc3VtICovLFxuLVx0XHRcdFx0XHRcdCAgICAgZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0XHRcdFx0ICAgICBleHRyYV9jcmVkaXRzLFxuIFx0XHRcdFx0XHRcdCAgICAgdHJ1ZSAvKiBza2lwX3F1b3RhICovKTtcbiBcdFx0ZXh0NF9mcmVlX2Jsb2NrcyhoYW5kbGUsIGlub2RlLCBiaCwgMCwgMSxcbkBAIC0xNTA1LDcgJiM0MzsxNTQ5LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRpZiAoZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpKVxuIFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcJiMzNDtjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcJiMzNDssIGVycik7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0XHR9XG4gXG5AQCAtMTU2NCw3ICYjNDM7MTYwOCw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSxcbiBcdFx0XHRrdmZyZWUoZWFfZGF0YSk7XG4gXHRcdFx0cmV0dXJuIGVhX2lub2RlO1xuIFx0XHR9XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0bmV4dF9lbnRyeTpcbiBcdFx0Y2UgPSBtYl9jYWNoZV9lbnRyeV9maW5kX25leHQoZWFfaW5vZGVfY2FjaGUsIGNlKTtcbiBcdH1cbkBAIC0xNjE1LDcgJiM0MzsxNjU5LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0XHQgICAgICBlYV9pbm9kZS1cdTAwM2VpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7XG4gXHRyZXR1cm4gZWFfaW5vZGU7XG4gb3V0X2Vycjpcbi1cdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgTlVMTCwgdmFsdWVfbGVuKTtcbiBcdHJldHVybiBFUlJfUFRSKGVycik7XG4gfVxuQEAgLTE4NDgsNyAmIzQzOzE4OTIsNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfc2V0X2VudHJ5KHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gKmksXG4gXG4gXHRyZXQgPSAwO1xuIG91dDpcbi1cdGlwdXQob2xkX2VhX2lub2RlKTtcbiYjNDM7XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBvbGRfZWFfaW5vZGUpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMjAxMCw3ICYjNDM7MjA1NCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRvbGRfZWFfaW5vZGVfcXVvdGEgPSBsZTMyX3RvX2NwdShcbiBcdFx0XHRcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9zaXplKTtcbiBcdFx0XHR9XG4tXHRcdFx0aXB1dCh0bXBfaW5vZGUpO1xuJiM0MztcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCB0bXBfaW5vZGUpO1xuIFxuIFx0XHRcdHMtXHUwMDNlaGVyZS1cdTAwM2VlX3ZhbHVlX2ludW0gPSAwO1xuIFx0XHRcdHMtXHUwMDNlaGVyZS1cdTAwM2VlX3ZhbHVlX3NpemUgPSAwO1xuQEAgLTIxNTAsNyAmIzQzOzIxOTQsNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFx0XHQgICBcJiMzNDtkZWMgcmVmIGVycm9yPSVkXCYjMzQ7LFxuIFx0XHRcdFx0XHRcdFx0ICAgZXJyb3IpO1xuLVx0XHRcdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdFx0ZWFfaW5vZGUgPSBOVUxMO1xuIFx0XHRcdH1cbiBcbkBAIC0yMTgyLDEyICYjNDM7MjIyNiw4IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXG4gXHQvKiBEcm9wIHRoZSBwcmV2aW91cyB4YXR0ciBibG9jay4gKi9cbiBcdGlmIChicy1cdTAwM2ViaCBcdTAwMjZcdTAwMjYgYnMtXHUwMDNlYmggIT0gbmV3X2JoKSB7XG4tXHRcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7XG4tXG4gXHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBicy1cdTAwM2ViaCxcbi1cdFx0XHRcdFx0IFx1MDAyNmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHQgMCAvKiBleHRyYV9jcmVkaXRzICovKTtcbi1cdFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiBcdH1cbiBcdGVycm9yID0gMDtcbiBcbkBAIC0yMjAzLDcgJiM0MzsyMjQzLDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdCAgICBpX3NpemVfcmVhZChlYV9pbm9kZSkpO1xuIFx0XHR9XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0fVxuIFx0aWYgKGNlKVxuIFx0XHRtYl9jYWNoZV9lbnRyeV9wdXQoZWFfYmxvY2tfY2FjaGUsIGNlKTtcbkBAIC0yMjg1LDcgJiM0MzsyMzI1LDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHR9XG4gXHRcdHJldHVybiBlcnJvcjtcbiBcdH1cbkBAIC0yMjk3LDcgJiM0MzsyMzM3LDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdGhlYWRlci1cdTAwM2VoX21hZ2ljID0gY3B1X3RvX2xlMzIoMCk7XG4gXHRcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpO1xuIFx0fVxuLVx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTI4NjMsNDYgJiM0MzsyOTAzLDYgQEAgaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuLSNkZWZpbmUgRUlBX0lOQ1IgMTYgLyogbXVzdCBiZSAyXm4gKi9cbi0jZGVmaW5lIEVJQV9NQVNLIChFSUFfSU5DUiAtIDEpXG4tXG4tLyogQWRkIHRoZSBsYXJnZSB4YXR0ciBAaW5vZGUgaW50byBAZWFfaW5vZGVfYXJyYXkgZm9yIGRlZmVycmVkIGlwdXQoKS5cbi0gKiBJZiBAZWFfaW5vZGVfYXJyYXkgaXMgbmV3IG9yIGZ1bGwgaXQgd2lsbCBiZSBncm93biBhbmQgdGhlIG9sZFxuLSAqIGNvbnRlbnRzIGNvcGllZCBvdmVyLlxuLSAqL1xuLXN0YXRpYyBpbnRcbi1leHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuLVx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4te1xuLVx0aWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKSB7XG4tXHRcdC8qXG4tXHRcdCAqIFN0YXJ0IHdpdGggMTUgaW5vZGVzLCBzbyBpdCBmaXRzIGludG8gYSBwb3dlci1vZi10d28gc2l6ZS5cbi1cdFx0ICovXG4tXHRcdCgqZWFfaW5vZGVfYXJyYXkpID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2Rlcyxcbi1cdFx0XHRcdFx0XHQgRUlBX01BU0ssIEdGUF9OT0ZTKTtcbi1cdFx0aWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHQoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vjb3VudCA9IDA7XG4tXHR9IGVsc2UgaWYgKCgoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vjb3VudCBcdTAwMjYgRUlBX01BU0spID09IEVJQV9NQVNLKSB7XG4tXHRcdC8qIGV4cGFuZCB0aGUgYXJyYXkgb25jZSBhbGwgMTUgJiM0MzsgbiAqIDE2IHNsb3RzIGFyZSBmdWxsICovXG4tXHRcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICpuZXdfYXJyYXkgPSBOVUxMO1xuLVxuLVx0XHRuZXdfYXJyYXkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxuLVx0XHRcdFx0XHQgKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgJiM0MzsgRUlBX0lOQ1IsXG4tXHRcdFx0XHRcdCBHRlBfTk9GUyk7XG4tXHRcdGlmIChuZXdfYXJyYXkgPT0gTlVMTClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0bWVtY3B5KG5ld19hcnJheSwgKmVhX2lub2RlX2FycmF5LFxuLVx0XHQgICAgICAgc3RydWN0X3NpemUoKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXG4tXHRcdFx0XHQgICAoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vjb3VudCkpO1xuLVx0XHRrZnJlZSgqZWFfaW5vZGVfYXJyYXkpO1xuLVx0XHQqZWFfaW5vZGVfYXJyYXkgPSBuZXdfYXJyYXk7XG4tXHR9XG4tXHQoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vjb3VudCYjNDM7JiM0Mzs7XG4tXHQoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vpbm9kZXNbKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgLSAxXSA9IGlub2RlO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qXG4gICogZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoKVxuICAqXG5AQCAtMjkxMyw3ICYjNDM7MjkxMyw2IEBAIGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gICogcmVmZXJlbmNlcyBvbiB4YXR0ciBibG9jayBhbmQgeGF0dHIgaW5vZGVzLlxuICAqL1xuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdCAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdCAgICBpbnQgZXh0cmFfY3JlZGl0cylcbiB7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbkBAIC0yOTUyLDcgJiM0MzsyOTUxLDYgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBpbG9jLmJoLFxuIFx0XHRcdFx0XHRcdCAgICAgSUZJUlNUKGhlYWRlciksXG4gXHRcdFx0XHRcdFx0ICAgICBmYWxzZSAvKiBibG9ja19jc3VtICovLFxuLVx0XHRcdFx0XHRcdCAgICAgZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0XHRcdFx0ICAgICBleHRyYV9jcmVkaXRzLFxuIFx0XHRcdFx0XHRcdCAgICAgZmFsc2UgLyogc2tpcF9xdW90YSAqLyk7XG4gXHR9XG5AQCAtMjk4NiwxMiAmIzQzOzI5ODQsMTIgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0ICAgICAgbGUzMl90b19jcHUoZW50cnktXHUwMDNlZV92YWx1ZV9zaXplKSk7XG4tXHRcdFx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0fVxuIFxuIFx0XHR9XG4gXG4tXHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCwgZWFfaW5vZGVfYXJyYXksXG4mIzQzO1x0XHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsXG4gXHRcdFx0XHRcdCBleHRyYV9jcmVkaXRzKTtcbiBcdFx0LypcbiBcdFx0ICogVXBkYXRlIGlfZmlsZV9hY2wgdmFsdWUgaW4gdGhlIHNhbWUgdHJhbnNhY3Rpb24gdGhhdCByZWxlYXNlc1xuQEAgLTMwMTMsMTYgJiM0MzszMDExLDYzIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi12b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkpXG4mIzQzOy8qXG4mIzQzOyAqIFdvcmtlciBmdW5jdGlvbiBmb3IgZGVmZXJyZWQgRUEgaW5vZGUgaXB1dC4gIFByb2Nlc3NlcyBhbGwgaW5vZGVzIHF1ZXVlZFxuJiM0MzsgKiBvbiBzX2VhX2lub2RlX3RvX2ZyZWUgaW4gYSBjb250ZXh0IGZyZWUgb2YgeGF0dHJfc2VtL2piZDIgaGFuZGxlIGxvY2tzLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgZXh0NF9lYV9pbm9kZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiB7XG4tXHRpbnQgaWR4O1xuJiM0MztcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksXG4mIzQzO1x0XHRcdFx0XHRcdHN0cnVjdCBleHQ0X3NiX2luZm8sXG4mIzQzO1x0XHRcdFx0XHRcdHNfZWFfaW5vZGVfd29yayk7XG4mIzQzO1x0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuIFxuLVx0aWYgKGVhX2lub2RlX2FycmF5ID09IE5VTEwpXG4mIzQzO1x0d2hpbGUgKG5vZGUpIHtcbiYjNDM7XHRcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gY29udGFpbmVyX29mKG5vZGUsXG4mIzQzO1x0XHRcdFx0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvLCBpX2VhX2lwdXRfbm9kZSk7XG4mIzQzO1x0XHRub2RlID0gbm9kZS1cdTAwM2VuZXh0O1xuJiM0MztcdFx0aXB1dChcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7LypcbiYjNDM7ICogUmVsZWFzZSBhIFZGUyByZWZlcmVuY2Ugb24gYW4gRUEgaW5vZGUuICBNdXN0IGJlIHVzZWQgaW5zdGVhZCBvZiBpcHV0KClcbiYjNDM7ICogaW4gYW55IGNvbnRleHQgd2hlcmUgeGF0dHJfc2VtIG9yIGEgamJkMiBoYW5kbGUgaXMgaGVsZC5cbiYjNDM7ICpcbiYjNDM7ICogSWYgdGhpcyBpcyBub3QgdGhlIGxhc3QgcmVmZXJlbmNlLCBkcm9wcyBpdCBpbW1lZGlhdGVseSB2aWFcbiYjNDM7ICogaXB1dF9pZl9ub3RfbGFzdCgpIHdpdGggbm8gZnVydGhlciBhY3Rpb24gbmVlZGVkLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHJlZmVyZW5jZSwgdGhlIGlub2RlIGlzIGxpbmtlZCBvbnRvIGEgcGVyLXNiXG4mIzQzOyAqIGxsaXN0IHZpYSBpX2VhX2lwdXRfbm9kZSAoZW1iZWRkZWQgaW4gZXh0NF9pbm9kZV9pbmZvLCBzaGFyaW5nIHNwYWNlXG4mIzQzOyAqIHdpdGggdGhlIHVudXNlZCB4YXR0cl9zZW0pIGFuZCBhIGRlbGF5ZWQgd29ya2VyIHBlcmZvcm1zIHRoZSBmaW5hbFxuJiM0MzsgKiBpcHV0KCkgaW4gYSBjbGVhbiBjb250ZXh0LlxuJiM0MzsgKlxuJiM0MzsgKiBOb3RlOiB3aGlsZSBhbiBpbm9kZSBpcyBvbiBzX2VhX2lub2RlX3RvX2ZyZWUsIHRoZSB1bmNvbnN1bWVkIGlfY291bnRcbiYjNDM7ICogcmVmZXJlbmNlIChzdGlsbCAxKSBrZWVwcyBpdCBpbiB0aGUgaW5vZGUgY2FjaGUsIHNvIGFueSBjb25jdXJyZW50XG4mIzQzOyAqIGlnZXQoKSBidW1wcyBpX2NvdW50IHRvIFx1MDAzZT0gMiBhbmQgaXB1dF9pZl9ub3RfbGFzdCgpIHdpbGwgc3VjY2VlZC5cbiYjNDM7ICogTm9ib2R5IHdpbGwgYWRkIHRoZSBpbm9kZSBhIHNlY29uZCB0aW1lIHVudGlsIGV4dDRfZWFfaW5vZGVfd29yaygpXG4mIzQzOyAqIGRyb3BzIHRoYXQgcmVmZXJlbmNlIHZpYSBpcHV0KCkuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIWlub2RlKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcdFdBUk5fT05fT05DRSghKEVYVDRfSShpbm9kZSktXHUwMDNlaV9mbGFncyBcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpO1xuJiM0MztcdGlmIChpcHV0X2lmX25vdF9sYXN0KGlub2RlKSlcbiBcdFx0cmV0dXJuO1xuJiM0MztcdGxsaXN0X2FkZChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZWFfaXB1dF9ub2RlLFxuJiM0MztcdFx0ICBcdTAwMjZFWFQ0X1NCKHNiKS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVXNlIGEgc2hvcnQgZGVsYXkgdG8gYWxsb3cgbXVsdGlwbGUgRUEgaW5vZGVzIHRvIGFjY3VtdWxhdGUsXG4mIzQzO1x0ICogcmVkdWNpbmcgd29ya3F1ZXVlIHdha2V1cHMgd2hlbiBzZXZlcmFsIGFyZSByZWxlYXNlZCB0b2dldGhlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2RVhUNF9TQihzYiktXHUwMDNlc19lYV9pbm9kZV93b3JrLCAxKTtcbiYjNDM7fVxuIFxuLVx0Zm9yIChpZHggPSAwOyBpZHggXHUwMDNjIGVhX2lub2RlX2FycmF5LVx1MDAzZWNvdW50OyAmIzQzOyYjNDM7aWR4KVxuLVx0XHRpcHV0KGVhX2lub2RlX2FycmF5LVx1MDAzZWlub2Rlc1tpZHhdKTtcbi1cdGtmcmVlKGVhX2lub2RlX2FycmF5KTtcbiYjNDM7dm9pZCBleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXG4mIzQzO3tcbiYjNDM7XHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XG4mIzQzO1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yaywgZXh0NF9lYV9pbm9kZV93b3JrKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmggYi9mcy9leHQ0L3hhdHRyLmhcbmluZGV4IDFmZWRmNDRkNGZiNjVlLi41MThmMDI4M2UxNzQ0NCAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC94YXR0ci5oXG5AQCAtMTMxLDExICYjNDM7MTMxLDYgQEAgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCB7XG4gXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4gfTtcbiBcbi1zdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSB7XG4tXHR1bnNpZ25lZCBpbnQgY291bnQ7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2Rlc1tdIF9fY291bnRlZF9ieShjb3VudCk7XG4tfTtcbi1cbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXI7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXI7XG5AQCAtMTg3LDkgJiM0MzsxODIsOSBAQCBleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0Ym9vbCBpc19jcmVhdGUpO1xuIFxuIGV4dGVybiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdCAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqYXJyYXksXG4gXHRcdFx0XHQgICBpbnQgZXh0cmFfY3JlZGl0cyk7XG4tZXh0ZXJuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICphcnJheSk7XG4mIzQzO2V4dGVybiB2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSk7XG4mIzQzO2V4dGVybiB2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFxuIGV4dGVybiBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbiBcdFx0XHQgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCBkMTA4OTdiM2ExZTM1MC4uMDRmMGRlNzhmYTdhODUgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaFxuQEAgLTI0MTMsNiAmIzQzOzI0MTMsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIHN1cGVyX3NldF9zeXNmc19uYW1lX2dlbmVyaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hcbiBleHRlcm4gdm9pZCBpaG9sZChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7XG4gZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7XG4gdm9pZCBpcHV0X25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpcHV0X2lmX25vdF9sYXN0IC0gZHJvcCBhbiBpbm9kZSByZWZlcmVuY2Ugb25seSBpZiBpdCBpcyBub3QgdGhlIGxhc3Qgb25lXG4mIzQzOyAqIEBpbm9kZTogaW5vZGUgdG8gcHV0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVmZXJlbmNlIHdhcyBkcm9wcGVkLCBmYWxzZSBpZiB0aGlzIHdhcyB0aGUgbGFzdFxuJiM0MzsgKiByZWZlcmVuY2UgYW5kIHRoZSBjYWxsZXIgbXVzdCBhcnJhbmdlIGZvciBmaW5hbCBpcHV0KCkgaW4gYSBzYWZlIGNvbnRleHQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGlwdXRfaWZfbm90X2xhc3Qoc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBhdG9taWNfYWRkX3VubGVzcyhcdTAwMjZpbm9kZS1cdTAwM2VpX2NvdW50LCAtMSwgMSk7XG4mIzQzO31cbiYjNDM7XG4gaW50IGlub2RlX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSxcbiBcdFx0dW5zaWduZWQgaW50IGZsYWdzKTtcbiBpbnQgZ2VuZXJpY191cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6Mjg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfZGVsZXRlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfZWFfaW5vZGVfd29yayYjMzQ7LAogICAgJiMzNDtleHQ0X3B1dF9lYV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2Jsb2NrX3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lib2R5X3NldCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gZm9yIGV4dDQgRUEgKEV4dGVuZGVkIEF0dHJpYnV0ZSkgaW5vZGVzIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzIGFuZCBkZWFkbG9ja3MuIEl0IG1vZGlmaWVzIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZyBhbmQgaW5vZGUgZXZpY3Rpb24gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVmMmY1ZTVmNDE3MDU5MjAwYjg2MDRjZWE0YjVjNDNlODZhZTZjOGEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyOSAxMToyODoyMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmgKaW5kZXggYjM3YzEzNmVhM2FiMzMuLmI5YjBhZGE3Nzc0YmI0IDEwMDY0NAotLS0gYS9mcy9leHQ0L2V4dDQuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2V4dDQuaApAQCAtMTA3MCw4ICYjNDM7MTA3MCwxNCBAQCBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHsKIAkgKiBiZXR3ZWVuIHJlYWRlcnMgb2YgRUFzIGFuZCB3cml0ZXJzIG9mIHJlZ3VsYXIgZmlsZSBkYXRhLCBzbwogCSAqIGluc3RlYWQgd2Ugc3luY2hyb25pemUgb24geGF0dHJfc2VtIHdoZW4gcmVhZGluZyBvciBjaGFuZ2luZwogCSAqIEVBcy4KJiM0MzsJICoKJiM0MzsJICogRUEgaW5vZGVzIChFWFQ0X0VBX0lOT0RFX0ZMKSBkbyBub3QgdXNlIHhhdHRyX3NlbTsgdGhleSByZXVzZQomIzQzOwkgKiB0aGUgc3BhY2UgZm9yIGRlZmVycmVkIGlwdXQgbGlua2FnZS4KIAkgKi8KLQlzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTsKJiM0MzsJdW5pb24gewomIzQzOwkJc3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07CiYjNDM7CQlzdHJ1Y3QgbGxpc3Rfbm9kZSBpX2VhX2lwdXRfbm9kZTsKJiM0MzsJfTsKIAogCS8qCiAJICogSW5vZGVzIHdpdGggRVhUNF9TVEFURV9PUlBIQU5fRklMRSB1c2UgaV9vcnBoYW5faWR4LiBPdGhlcndpc2UKQEAgLTE3NzAsNiAmIzQzOzE3NzYsMTEgQEAgc3RydWN0IGV4dDRfc2JfaW5mbyB7CiAJc3RydWN0IGV4dDRfZXNfc3RhdHMgc19lc19zdGF0czsKIAlzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfYmxvY2tfY2FjaGU7CiAJc3RydWN0IG1iX2NhY2hlICpzX2VhX2lub2RlX2NhY2hlOwomIzQzOwomIzQzOwkvKiBEZWZlcnJlZCBpcHV0IGZvciBFQSBpbm9kZXMgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMgKi8KJiM0MzsJc3RydWN0IGxsaXN0X2hlYWQgc19lYV9pbm9kZV90b19mcmVlOwomIzQzOwlzdHJ1Y3QgZGVsYXllZF93b3JrIHNfZWFfaW5vZGVfd29yazsKJiM0MzsKIAlzcGlubG9ja190IHNfZXNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wOwogCiAJLyogSm91cm5hbCB0cmlnZ2VycyBmb3IgY2hlY2tzdW0gY29tcHV0YXRpb24gKi8KZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuYwppbmRleCBjZTk5ODA3YzVmNWIyYy4uNzQ3YzUyYzIzMmNjMDMgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L2lub2RlLmMKQEAgLTE3Niw3ICYjNDM7MTc2LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJICogKHhhdHRyIGJsb2NrIGZyZWVpbmcpLCBiaXRtYXAsIGdyb3VwIGRlc2NyaXB0b3IgKGlub2RlIGZyZWVpbmcpCiAJICovCiAJaW50IGV4dHJhX2NyZWRpdHMgPSA2OwotCXN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7CiAJYm9vbCBmcmVlemVfcHJvdGVjdGVkID0gZmFsc2U7CiAKIAl0cmFjZV9leHQ0X2V2aWN0X2lub2RlKGlub2RlKTsKQEAgLTI4MSw4ICYjNDM7MjgwLDcgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJfQogCiAJLyogUmVtb3ZlIHhhdHRyIHJlZmVyZW5jZXMuICovCi0JZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgJmFtcDtlYV9pbm9kZV9hcnJheSwKLQkJCQkgICAgICBleHRyYV9jcmVkaXRzKTsKJiM0MzsJZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgZXh0cmFfY3JlZGl0cyk7CiAJaWYgKGVycikgewogCQlleHQ0X3dhcm5pbmcoaW5vZGUtJmd0O2lfc2IsICYjMzQ7eGF0dHIgZGVsZXRlIChlcnIgJWQpJiMzNDssIGVycik7CiBzdG9wX2hhbmRsZToKQEAgLTI5MCw3ICYjNDM7Mjg4LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJCWV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7CiAJCWlmIChmcmVlemVfcHJvdGVjdGVkKQogCQkJc2JfZW5kX2ludHdyaXRlKGlub2RlLSZndDtpX3NiKTsKLQkJZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTsKIAkJZ290byBub19kZWxldGU7CiAJfQogCkBAIC0zMjAsNyAmIzQzOzMxNyw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKQogCWV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7CiAJaWYgKGZyZWV6ZV9wcm90ZWN0ZWQpCiAJCXNiX2VuZF9pbnR3cml0ZShpbm9kZS0mZ3Q7aV9zYik7Ci0JZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTsKIAlyZXR1cm47CiBub19kZWxldGU6CiAJLyoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuYwppbmRleCAyNDVmNjdkMTBkZWQzNC4uM2VmYTVhODE3YmVmNGYgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvc3VwZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3N1cGVyLmMKQEAgLTEzMDMsNiAmIzQzOzEzMDMsOCBAQCBzdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCQkJICZhbXA7c2ItJmd0O3NfdXVpZCk7CiAKIAlleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7CiYjNDM7CS8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIHdoaWxlIHF1b3RhIGlzIHN0aWxsIGFjdGl2ZS4gKi8KJiM0MzsJZmx1c2hfZGVsYXllZF93b3JrKCZhbXA7c2JpLSZndDtzX2VhX2lub2RlX3dvcmspOwogCWV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpOwogCiAJZGVzdHJveV93b3JrcXVldWUoc2JpLSZndDtyc3ZfY29udmVyc2lvbl93cSk7CkBAIC0xNDIzLDYgJiM0MzsxNDI1LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAltZW1zZXQoJmFtcDtlaS0mZ3Q7aV9kcXVvdCwgMCwgc2l6ZW9mKGVpLSZndDtpX2RxdW90KSk7CiAjZW5kaWYKIAllaS0mZ3Q7amlub2RlID0gTlVMTDsKJiM0MzsJLyoKJiM0MzsJICogUmVpbml0aWFsaXplIHhhdHRyX3NlbSBldmVyeSBhbGxvY2F0aW9uIGJlY2F1c2UgRUEgaW5vZGVzCiYjNDM7CSAqIHNoYXJlIHRoaXMgc3BhY2Ugd2l0aCBpX2VhX2lwdXRfbm9kZSAodmlhIHVuaW9uKSB3aGljaCBtYXkKJiM0MzsJICogaGF2ZSBvdmVyd3JpdHRlbiB0aGUgc2VtYXBob3JlIHdoZW4gdGhlIHNsYWIgb2JqZWN0IHdhcwomIzQzOwkgKiBwcmV2aW91c2x5IHVzZWQgYXMgYW4gRUEgaW5vZGUuCiYjNDM7CSAqLwomIzQzOwlpbml0X3J3c2VtKCZhbXA7ZWktJmd0O3hhdHRyX3NlbSk7CiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtlaS0mZ3Q7aV9yc3ZfY29udmVyc2lvbl9saXN0KTsKIAlzcGluX2xvY2tfaW5pdCgmYW1wO2VpLSZndDtpX2NvbXBsZXRlZF9pb19sb2NrKTsKIAllaS0mZ3Q7aV9zeW5jX3RpZCA9IDA7CkBAIC0xNDg4LDcgJiM0MzsxNDk3LDYgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbykKIAlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGZvbzsKIAogCUlOSVRfTElTVF9IRUFEKCZhbXA7ZWktJmd0O2lfb3JwaGFuKTsKLQlpbml0X3J3c2VtKCZhbXA7ZWktJmd0O3hhdHRyX3NlbSk7CiAJaW5pdF9yd3NlbSgmYW1wO2VpLSZndDtpX2RhdGFfc2VtKTsKIAlpbm9kZV9pbml0X29uY2UoJmFtcDtlaS0mZ3Q7dmZzX2lub2RlKTsKIAlleHQ0X2ZjX2luaXRfaW5vZGUoJmFtcDtlaS0mZ3Q7dmZzX2lub2RlKTsKQEAgLTU0OTcsNiAmIzQzOzU1MDUsOCBAQCBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAkJCSAgZXh0NF9oYXNfZmVhdHVyZV9vcnBoYW5fcHJlc2VudChzYikgfHwKIAkJCSAgZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsX25lZWRzX3JlY292ZXJ5KHNiKSk7CiAKJiM0MzsJZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc2JpKTsKJiM0MzsKIAlpZiAoZXh0NF9oYXNfZmVhdHVyZV9tbXAoc2IpICZhbXA7JmFtcDsgIXNiX3Jkb25seShzYikpIHsKIAkJZXJyID0gZXh0NF9tdWx0aV9tb3VudF9wcm90ZWN0KHNiLCBsZTY0X3RvX2NwdShlcy0mZ3Q7c19tbXBfYmxvY2spKTsKIAkJaWYgKGVycikKQEAgLTU3NDcsNiAmIzQzOzU3NTcsOCBAQCBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYikKIAlyZXR1cm4gMDsKIAogZmFpbGVkX21vdW50OToKJiM0MzsJLyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIHF1b3RhIHNodXRkb3duICovCiYjNDM7CWZsdXNoX2RlbGF5ZWRfd29yaygmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV93b3JrKTsKIAlleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTsKIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkCiAJZXh0NF9yZWxlYXNlX29ycGhhbl9pbmZvKHNiKTsKQEAgLTU3NjcsNiAmIzQzOzU3NzksOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZAogCWlmIChFWFQ0X1NCKHNiKS0mZ3Q7cnN2X2NvbnZlcnNpb25fd3EpCiAJCWRlc3Ryb3lfd29ya3F1ZXVlKEVYVDRfU0Ioc2IpLSZndDtyc3ZfY29udmVyc2lvbl93cSk7CiBmYWlsZWRfbW91bnRfd3E6CiYjNDM7CS8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi8KJiM0MzsJZmx1c2hfZGVsYXllZF93b3JrKCZhbXA7c2JpLSZndDtzX2VhX2lub2RlX3dvcmspOwogCWV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktJmd0O3NfZWFfaW5vZGVfY2FjaGUpOwogCXNiaS0mZ3Q7c19lYV9pbm9kZV9jYWNoZSA9IE5VTEw7CiAKQEAgLTU3NzcsNiAmIzQzOzU3OTEsOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZAogCQlleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS0mZ3Q7c19qb3VybmFsKTsKIAl9CiBmYWlsZWRfbW91bnQzYToKJiM0MzsJLyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqLwomIzQzOwlmbHVzaF9kZWxheWVkX3dvcmsoJmFtcDtzYmktJmd0O3NfZWFfaW5vZGVfd29yayk7CiAJZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7CiBmYWlsZWRfbW91bnQzOgogCS8qIGZsdXNoIHNfc2JfdXBkX3dvcmsgYmVmb3JlIHNiaSBkZXN0cm95ICovCmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmMKaW5kZXggOTgyYTFmODMxZTIyODIuLjg1YWQyNTYxNDc0YjZlIDEwMDY0NAotLS0gYS9mcy9leHQ0L3hhdHRyLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC94YXR0ci5jCkBAIC0xMTQsMTAgJiM0MzsxMTQsNiBAQCBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHsKICNkZWZpbmUgRUFfSU5PREVfQ0FDSEUoaW5vZGUpCSgoKHN0cnVjdCBleHQ0X3NiX2luZm8gKikgXAogCQkJCWlub2RlLSZndDtpX3NiLSZndDtzX2ZzX2luZm8pLSZndDtzX2VhX2lub2RlX2NhY2hlKQogCi1zdGF0aWMgaW50Ci1leHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LAotCQkJc3RydWN0IGlub2RlICppbm9kZSk7Ci0KICNpZmRlZiBDT05GSUdfTE9DS0RFUAogdm9pZCBleHQ0X3hhdHRyX2lub2RlX3NldF9jbGFzcyhzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlKQogewpAQCAtNTY3LDcgJiM0Mzs1NjMsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZW50cnksCiAJCQkJCWVhX2lub2RlLSZndDtpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7CiAJfQogb3V0OgotCWlwdXQoZWFfaW5vZGUpOwomIzQzOwlleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCXJldHVybiBlcnI7CiB9CiAKQEAgLTExMDQsMTAgJiM0MzsxMTAwLDEwIEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCwKIAkJZXJyID0gZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpOwogCQlpZiAoZXJyKSB7CiAJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsICYjMzQ7aW5jIHJlZiBlcnJvciAlZCYjMzQ7LCBlcnIpOwotCQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJCQlnb3RvIGNsZWFudXA7CiAJCX0KLQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQlleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAl9CiAJcmV0dXJuIDA7CiAKQEAgLTExMzMsNyAmIzQzOzExMjksNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWlmIChlcnIpCiAJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsICYjMzQ7Y2xlYW51cCBkZWMgcmVmIGVycm9yICVkJiMzNDssCiAJCQkJCSAgIGVycik7Ci0JCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJfQogCXJldHVybiBzYXZlZF9lcnI7CiB9CkBAIC0xMTU2LDExICYjNDM7MTE1MiwyOSBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfcmVzdGFydF9mbihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybiAwOwogfQogCiYjNDM7LyogVHJhY2sgYW4gRUEgaW5vZGUgbnVtYmVyIGluIHRoZSBkZWR1cCBhcnJheSwgZXhwYW5kaW5nIGlmIG5lZWRlZC4gKi8KJiM0MztzdGF0aWMgdm9pZCBlYV9pbm9fYXJyYXlfYWRkKHVuc2lnbmVkIGludCAqKmVhX2lub3MsIHVuc2lnbmVkIGludCAqbnIsCiYjNDM7CQkJICAgICB1bnNpZ25lZCBpbnQgKnNpemUsIHVuc2lnbmVkIGludCAqaW5saW5lX2FyciwKJiM0MzsJCQkgICAgIHVuc2lnbmVkIGludCBpbm8pCiYjNDM7ewomIzQzOwlpZiAoKm5yID09ICpzaXplKSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgbmV3X3NpemUgPSAqc2l6ZSAqIDI7CiYjNDM7CQl1bnNpZ25lZCBpbnQgKnA7CiYjNDM7CiYjNDM7CQlwID0ga21hbGxvY19hcnJheShuZXdfc2l6ZSwgc2l6ZW9mKCpwKSwgR0ZQX05PRlMgfCBfX0dGUF9OT0ZBSUwpOwomIzQzOwkJbWVtY3B5KHAsICplYV9pbm9zLCAqbnIgKiBzaXplb2YoKnApKTsKJiM0MzsJCWlmICgqZWFfaW5vcyAhPSBpbmxpbmVfYXJyKQomIzQzOwkJCWtmcmVlKCplYV9pbm9zKTsKJiM0MzsJCSplYV9pbm9zID0gcDsKJiM0MzsJCSpzaXplID0gbmV3X3NpemU7CiYjNDM7CX0KJiM0MzsJKCplYV9pbm9zKVsoKm5yKSYjNDM7JiM0MztdID0gaW5vOwomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkCiBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3QsIGJvb2wgYmxvY2tfY3N1bSwKLQkJCSAgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKIAkJCSAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlOwpAQCAtMTE3MSw2ICYjNDM7MTE4NSwxMCBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCWludCBlcnI7CiAJaW50IGNyZWRpdHM7CiAJdm9pZCAqZW5kOwomIzQzOwl1bnNpZ25lZCBpbnQgZWFfaW5vc19pbmxpbmVbMzJdOwomIzQzOwl1bnNpZ25lZCBpbnQgKmVhX2lub3MgPSBlYV9pbm9zX2lubGluZTsKJiM0MzsJdW5zaWduZWQgaW50IG5yX2VhX2lub3MgPSAwOwomIzQzOwl1bnNpZ25lZCBpbnQgZWFfaW5vc19zaXplID0gQVJSQVlfU0laRShlYV9pbm9zX2lubGluZSk7CiAKIAlpZiAoYmxvY2tfY3N1bSkKIAkJZW5kID0gKHZvaWQgKiliaC0mZ3Q7Yl9kYXRhICYjNDM7IGJoLSZndDtiX3NpemU7CkBAIC0xMTg4LDIzICYjNDM7MTIwNiwzMCBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCiAJZm9yIChlbnRyeSA9IGZpcnN0OyAodm9pZCAqKWVudHJ5ICZsdDsgZW5kICZhbXA7JmFtcDsgIUlTX0xBU1RfRU5UUlkoZW50cnkpOwogCSAgICAgZW50cnkgPSBFWFQ0X1hBVFRSX05FWFQoZW50cnkpKSB7CiYjNDM7CQl1bnNpZ25lZCBpbnQgaTsKJiM0MzsKIAkJaWYgKCFlbnRyeS0mZ3Q7ZV92YWx1ZV9pbnVtKQogCQkJY29udGludWU7CiAJCWVhX2lubyA9IGxlMzJfdG9fY3B1KGVudHJ5LSZndDtlX3ZhbHVlX2ludW0pOwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIFNraXAgRUEgaW5vZGVzIHdlIGFscmVhZHkgcHJvY2Vzc2VkLiAgT24gYSBjb3JydXB0ZWQgZnMsCiYjNDM7CQkgKiBkdXBsaWNhdGUgZW50cmllcyBtYXkgcG9pbnQgdG8gdGhlIHNhbWUgRUEgaW5vZGU7IHdpdGhvdXQKJiM0MzsJCSAqIHRoaXMgY2hlY2ssIHRoZSBzZWNvbmQgaWdldCBjb3VsZCBkZWFkbG9jayBvbiBJX0ZSRUVJTkcKJiM0MzsJCSAqIGlmIHRoZSBkZWZlcnJlZCB3b3JrZXIgYWxyZWFkeSBzdGFydGVkIGV2aWN0aW5nIGl0LgomIzQzOwkJICovCiYjNDM7CQlmb3IgKGkgPSAwOyBpICZsdDsgbnJfZWFfaW5vczsgaSYjNDM7JiM0MzspCiYjNDM7CQkJaWYgKGVhX2lub3NbaV0gPT0gZWFfaW5vKQomIzQzOwkJCQlicmVhazsKJiM0MzsJCWlmIChpICZsdDsgbnJfZWFfaW5vcykKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKIAkJZXJyID0gZXh0NF94YXR0cl9pbm9kZV9pZ2V0KHBhcmVudCwgZWFfaW5vLAogCQkJCQkgICAgbGUzMl90b19jcHUoZW50cnktJmd0O2VfaGFzaCksCiAJCQkJCSAgICAmYW1wO2VhX2lub2RlKTsKIAkJaWYgKGVycikKIAkJCWNvbnRpbnVlOwogCi0JCWVyciA9IGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KGVhX2lub2RlX2FycmF5LCBlYV9pbm9kZSk7Ci0JCWlmIChlcnIpIHsKLQkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwKLQkJCQkJICAgJiMzNDtFeHBhbmQgaW5vZGUgYXJyYXkgZXJyPSVkJiMzNDssIGVycik7Ci0JCQlpcHV0KGVhX2lub2RlKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KIAkJZXJyID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzX2ZuKGhhbmRsZSwgY3JlZGl0cywgY3JlZGl0cywKIAkJCWV4dDRfZnJlZV9tZXRhZGF0YV9yZXZva2VfY3JlZGl0cyhwYXJlbnQtJmd0O2lfc2IsIDEpLAogCQkJZXh0NF94YXR0cl9yZXN0YXJ0X2ZuKGhhbmRsZSwgcGFyZW50LCBiaCwgYmxvY2tfY3N1bSwKQEAgLTEyMTIsNiAmIzQzOzEyMzcsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQlpZiAoZXJyICZsdDsgMCkgewogCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCAmIzM0O0Vuc3VyZSBjcmVkaXRzIGVycj0lZCYjMzQ7LAogCQkJCQkgICBlcnIpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKGVyciAmZ3Q7IDApIHsKQEAgLTEyMjEsNiAmIzQzOzEyNDcsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwKIAkJCQkJCSYjMzQ7UmUtZ2V0IHdyaXRlIGFjY2VzcyBlcnI9JWQmIzM0OywKIAkJCQkJCWVycik7CiYjNDM7CQkJCWV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCQkJCWNvbnRpbnVlOwogCQkJfQogCQl9CkBAIC0xMjI5LDYgJiM0MzsxMjU2LDEyIEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWlmIChlcnIpIHsKIAkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgJiMzNDtlYV9pbm9kZSBkZWMgcmVmIGVycj0lZCYjMzQ7LAogCQkJCQkgICBlcnIpOwomIzQzOwkJCS8qIFRyYWNrIGlmIG5saW5rPT0wIHRvIHNraXAgZHVwbGljYXRlcyAoZXZpY3Rpb24gcmlzaykgKi8KJiM0MzsJCQlpZiAoIWVhX2lub2RlLSZndDtpX25saW5rKQomIzQzOwkJCQllYV9pbm9fYXJyYXlfYWRkKCZhbXA7ZWFfaW5vcywgJmFtcDtucl9lYV9pbm9zLAomIzQzOwkJCQkJCSAmYW1wO2VhX2lub3Nfc2l6ZSwgZWFfaW5vc19pbmxpbmUsIGVhX2lubyk7CiYjNDM7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJCQljb250aW51ZTsKIAkJfQogCkBAIC0xMjQ1LDkgJiM0MzsxMjc4LDIyIEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWVudHJ5LSZndDtlX3ZhbHVlX2ludW0gPSAwOwogCQllbnRyeS0mZ3Q7ZV92YWx1ZV9zaXplID0gMDsKIAomIzQzOwkJLyoKJiM0MzsJCSAqIFRyYWNrIG5saW5rPT0wIEVBIGlub2RlcyB0byBza2lwIGR1cGxpY2F0ZXMgbGF0ZXIgLS0KJiM0MzsJCSAqIHRoZXkgcmlzayBJX0ZSRUVJTkcgZGVhZGxvY2sgb24gcmUtaWdldC4KJiM0MzsJCSAqIENoZWNrIG5saW5rIGJlZm9yZSBwdXQgc2luY2UgcHV0IHJlbGVhc2VzIG91ciByZWZlcmVuY2UuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICghZWFfaW5vZGUtJmd0O2lfbmxpbmspCiYjNDM7CQkJZWFfaW5vX2FycmF5X2FkZCgmYW1wO2VhX2lub3MsICZhbXA7bnJfZWFfaW5vcywKJiM0MzsJCQkJCSAmYW1wO2VhX2lub3Nfc2l6ZSwgZWFfaW5vc19pbmxpbmUsIGVhX2lubyk7CiYjNDM7CiYjNDM7CQlleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAkJZGlydHkgPSB0cnVlOwogCX0KIAomIzQzOwlpZiAoZWFfaW5vcyAhPSBlYV9pbm9zX2lubGluZSkKJiM0MzsJCWtmcmVlKGVhX2lub3MpOwomIzQzOwogCWlmIChkaXJ0eSkgewogCQkvKgogCQkgKiBOb3RlIHRoYXQgd2UgYXJlIGRlbGliZXJhdGVseSBza2lwcGluZyBjc3VtIGNhbGN1bGF0aW9uIGZvcgpAQCAtMTI3MSw3ICYjNDM7MTMxNyw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiBzdGF0aWMgdm9pZAogZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKLQkJCSBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LAogCQkJIGludCBleHRyYV9jcmVkaXRzKQogewogCXN0cnVjdCBtYl9jYWNoZSAqZWFfYmxvY2tfY2FjaGUgPSBFQV9CTE9DS19DQUNIRShpbm9kZSk7CkBAIC0xMzEzLDcgJiM0MzsxMzU4LDYgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLAogCQkJCQkJICAgICBCRklSU1QoYmgpLAogCQkJCQkJICAgICB0cnVlIC8qIGJsb2NrX2NzdW0gKi8sCi0JCQkJCQkgICAgIGVhX2lub2RlX2FycmF5LAogCQkJCQkJICAgICBleHRyYV9jcmVkaXRzLAogCQkJCQkJICAgICB0cnVlIC8qIHNraXBfcXVvdGEgKi8pOwogCQlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGJoLCAwLCAxLApAQCAtMTUwNSw3ICYjNDM7MTU0OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsCiAJCQlpZiAoZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpKQogCQkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwKIAkJCQkJJiMzNDtjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWQmIzM0OywgZXJyKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGlub2RlLSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJCQlyZXR1cm4gRVJSX1BUUihlcnIpOwogCQl9CiAKQEAgLTE1NjQsNyAmIzQzOzE2MDgsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2NhY2hlX2ZpbmQoc3RydWN0IGlub2RlICppbm9kZSwgY29uc3Qgdm9pZCAqdmFsdWUsCiAJCQlrdmZyZWUoZWFfZGF0YSk7CiAJCQlyZXR1cm4gZWFfaW5vZGU7CiAJCX0KLQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQlleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCW5leHRfZW50cnk6CiAJCWNlID0gbWJfY2FjaGVfZW50cnlfZmluZF9uZXh0KGVhX2lub2RlX2NhY2hlLCBjZSk7CiAJfQpAQCAtMTYxNSw3ICYjNDM7MTY1OSw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLAogCQkJCSAgICAgIGVhX2lub2RlLSZndDtpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7CiAJcmV0dXJuIGVhX2lub2RlOwogb3V0X2VycjoKLQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAlleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIE5VTEwsIHZhbHVlX2xlbik7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KQEAgLTE4NDgsNyAmIzQzOzE4OTIsNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfc2V0X2VudHJ5KHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gKmksCiAKIAlyZXQgPSAwOwogb3V0OgotCWlwdXQob2xkX2VhX2lub2RlKTsKJiM0MzsJZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIG9sZF9lYV9pbm9kZSk7CiAJcmV0dXJuIHJldDsKIH0KIApAQCAtMjAxMCw3ICYjNDM7MjA1NCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJb2xkX2VhX2lub2RlX3F1b3RhID0gbGUzMl90b19jcHUoCiAJCQkJCQlzLSZndDtoZXJlLSZndDtlX3ZhbHVlX3NpemUpOwogCQkJfQotCQkJaXB1dCh0bXBfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGlub2RlLSZndDtpX3NiLCB0bXBfaW5vZGUpOwogCiAJCQlzLSZndDtoZXJlLSZndDtlX3ZhbHVlX2ludW0gPSAwOwogCQkJcy0mZ3Q7aGVyZS0mZ3Q7ZV92YWx1ZV9zaXplID0gMDsKQEAgLTIxNTAsNyAmIzQzOzIxOTQsNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsCiAJCQkJCQkJICAgJiMzNDtkZWMgcmVmIGVycm9yPSVkJiMzNDssCiAJCQkJCQkJICAgZXJyb3IpOwotCQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCQlleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCQkJCWVhX2lub2RlID0gTlVMTDsKIAkJCX0KIApAQCAtMjE4MiwxMiAmIzQzOzIyMjYsOCBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCiAJLyogRHJvcCB0aGUgcHJldmlvdXMgeGF0dHIgYmxvY2suICovCiAJaWYgKGJzLSZndDtiaCAmYW1wOyZhbXA7IGJzLSZndDtiaCAhPSBuZXdfYmgpIHsKLQkJc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDsKLQogCQlleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYnMtJmd0O2JoLAotCQkJCQkgJmFtcDtlYV9pbm9kZV9hcnJheSwKIAkJCQkJIDAgLyogZXh0cmFfY3JlZGl0cyAqLyk7Ci0JCWV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7CiAJfQogCWVycm9yID0gMDsKIApAQCAtMjIwMyw3ICYjNDM7MjI0Myw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLAogCQkJCQkJICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7CiAJCX0KLQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQlleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCX0KIAlpZiAoY2UpCiAJCW1iX2NhY2hlX2VudHJ5X3B1dChlYV9ibG9ja19jYWNoZSwgY2UpOwpAQCAtMjI4NSw3ICYjNDM7MjMyNSw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCiAJCQlleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLAogCQkJCQkJICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7Ci0JCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCQlleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS0mZ3Q7aV9zYiwgZWFfaW5vZGUpOwogCQl9CiAJCXJldHVybiBlcnJvcjsKIAl9CkBAIC0yMjk3LDcgJiM0MzsyMzM3LDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCWhlYWRlci0mZ3Q7aF9tYWdpYyA9IGNwdV90b19sZTMyKDApOwogCQlleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKTsKIAl9Ci0JaXB1dChlYV9pbm9kZSk7CiYjNDM7CWV4dDRfcHV0X2VhX2lub2RlKGlub2RlLSZndDtpX3NiLCBlYV9pbm9kZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4NjMsNDYgJiM0MzsyOTAzLDYgQEAgaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsCiAJcmV0dXJuIGVycm9yOwogfQogCi0jZGVmaW5lIEVJQV9JTkNSIDE2IC8qIG11c3QgYmUgMl5uICovCi0jZGVmaW5lIEVJQV9NQVNLIChFSUFfSU5DUiAtIDEpCi0KLS8qIEFkZCB0aGUgbGFyZ2UgeGF0dHIgQGlub2RlIGludG8gQGVhX2lub2RlX2FycmF5IGZvciBkZWZlcnJlZCBpcHV0KCkuCi0gKiBJZiBAZWFfaW5vZGVfYXJyYXkgaXMgbmV3IG9yIGZ1bGwgaXQgd2lsbCBiZSBncm93biBhbmQgdGhlIG9sZAotICogY29udGVudHMgY29waWVkIG92ZXIuCi0gKi8KLXN0YXRpYyBpbnQKLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCi0JCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkgewotCQkvKgotCQkgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuCi0JCSAqLwotCQkoKmVhX2lub2RlX2FycmF5KSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsCi0JCQkJCQkgRUlBX01BU0ssIEdGUF9OT0ZTKTsKLQkJaWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCSgqZWFfaW5vZGVfYXJyYXkpLSZndDtjb3VudCA9IDA7Ci0JfSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50ICZhbXA7IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykgewotCQkvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICYjNDM7IG4gKiAxNiBzbG90cyBhcmUgZnVsbCAqLwotCQlzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqbmV3X2FycmF5ID0gTlVMTDsKLQotCQluZXdfYXJyYXkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLAotCQkJCQkgKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50ICYjNDM7IEVJQV9JTkNSLAotCQkJCQkgR0ZQX05PRlMpOwotCQlpZiAobmV3X2FycmF5ID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJbWVtY3B5KG5ld19hcnJheSwgKmVhX2lub2RlX2FycmF5LAotCQkgICAgICAgc3RydWN0X3NpemUoKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsCi0JCQkJICAgKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50KSk7Ci0JCWtmcmVlKCplYV9pbm9kZV9hcnJheSk7Ci0JCSplYV9pbm9kZV9hcnJheSA9IG5ld19hcnJheTsKLQl9Ci0JKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50JiM0MzsmIzQzOzsKLQkoKmVhX2lub2RlX2FycmF5KS0mZ3Q7aW5vZGVzWygqZWFfaW5vZGVfYXJyYXkpLSZndDtjb3VudCAtIDFdID0gaW5vZGU7Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSgpCiAgKgpAQCAtMjkxMyw3ICYjNDM7MjkxMyw2IEBAIGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCiAgKiByZWZlcmVuY2VzIG9uIHhhdHRyIGJsb2NrIGFuZCB4YXR0ciBpbm9kZXMuCiAgKi8KIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCiAJCQkgICAgaW50IGV4dHJhX2NyZWRpdHMpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CkBAIC0yOTUyLDcgJiM0MzsyOTUxLDYgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGlsb2MuYmgsCiAJCQkJCQkgICAgIElGSVJTVChoZWFkZXIpLAogCQkJCQkJICAgICBmYWxzZSAvKiBibG9ja19jc3VtICovLAotCQkJCQkJICAgICBlYV9pbm9kZV9hcnJheSwKIAkJCQkJCSAgICAgZXh0cmFfY3JlZGl0cywKIAkJCQkJCSAgICAgZmFsc2UgLyogc2tpcF9xdW90YSAqLyk7CiAJfQpAQCAtMjk4NiwxMiAmIzQzOzI5ODQsMTIgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCWNvbnRpbnVlOwogCQkJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsCiAJCQkJCSAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LSZndDtlX3ZhbHVlX3NpemUpKTsKLQkJCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCQkJZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtJmd0O2lfc2IsIGVhX2lub2RlKTsKIAkJCX0KIAogCQl9CiAKLQkJZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLCBlYV9pbm9kZV9hcnJheSwKJiM0MzsJCWV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCwKIAkJCQkJIGV4dHJhX2NyZWRpdHMpOwogCQkvKgogCQkgKiBVcGRhdGUgaV9maWxlX2FjbCB2YWx1ZSBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiB0aGF0IHJlbGVhc2VzCkBAIC0zMDEzLDE2ICYjNDM7MzAxMSw2MyBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAlyZXR1cm4gZXJyb3I7CiB9CiAKLXZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSkKJiM0MzsvKgomIzQzOyAqIFdvcmtlciBmdW5jdGlvbiBmb3IgZGVmZXJyZWQgRUEgaW5vZGUgaXB1dC4gIFByb2Nlc3NlcyBhbGwgaW5vZGVzIHF1ZXVlZAomIzQzOyAqIG9uIHNfZWFfaW5vZGVfdG9fZnJlZSBpbiBhIGNvbnRleHQgZnJlZSBvZiB4YXR0cl9zZW0vamJkMiBoYW5kbGUgbG9ja3MuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZXh0NF9lYV9pbm9kZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaykKIHsKLQlpbnQgaWR4OwomIzQzOwlzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLAomIzQzOwkJCQkJCXN0cnVjdCBleHQ0X3NiX2luZm8sCiYjNDM7CQkJCQkJc19lYV9pbm9kZV93b3JrKTsKJiM0MzsJc3RydWN0IGxsaXN0X25vZGUgKm5vZGUgPSBsbGlzdF9kZWxfYWxsKCZhbXA7c2JpLSZndDtzX2VhX2lub2RlX3RvX2ZyZWUpOwogCi0JaWYgKGVhX2lub2RlX2FycmF5ID09IE5VTEwpCiYjNDM7CXdoaWxlIChub2RlKSB7CiYjNDM7CQlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGNvbnRhaW5lcl9vZihub2RlLAomIzQzOwkJCQkJc3RydWN0IGV4dDRfaW5vZGVfaW5mbywgaV9lYV9pcHV0X25vZGUpOwomIzQzOwkJbm9kZSA9IG5vZGUtJmd0O25leHQ7CiYjNDM7CQlpcHV0KCZhbXA7ZWktJmd0O3Zmc19pbm9kZSk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyoKJiM0MzsgKiBSZWxlYXNlIGEgVkZTIHJlZmVyZW5jZSBvbiBhbiBFQSBpbm9kZS4gIE11c3QgYmUgdXNlZCBpbnN0ZWFkIG9mIGlwdXQoKQomIzQzOyAqIGluIGFueSBjb250ZXh0IHdoZXJlIHhhdHRyX3NlbSBvciBhIGpiZDIgaGFuZGxlIGlzIGhlbGQuCiYjNDM7ICoKJiM0MzsgKiBJZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCByZWZlcmVuY2UsIGRyb3BzIGl0IGltbWVkaWF0ZWx5IHZpYQomIzQzOyAqIGlwdXRfaWZfbm90X2xhc3QoKSB3aXRoIG5vIGZ1cnRoZXIgYWN0aW9uIG5lZWRlZC4KJiM0MzsgKgomIzQzOyAqIElmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLCB0aGUgaW5vZGUgaXMgbGlua2VkIG9udG8gYSBwZXItc2IKJiM0MzsgKiBsbGlzdCB2aWEgaV9lYV9pcHV0X25vZGUgKGVtYmVkZGVkIGluIGV4dDRfaW5vZGVfaW5mbywgc2hhcmluZyBzcGFjZQomIzQzOyAqIHdpdGggdGhlIHVudXNlZCB4YXR0cl9zZW0pIGFuZCBhIGRlbGF5ZWQgd29ya2VyIHBlcmZvcm1zIHRoZSBmaW5hbAomIzQzOyAqIGlwdXQoKSBpbiBhIGNsZWFuIGNvbnRleHQuCiYjNDM7ICoKJiM0MzsgKiBOb3RlOiB3aGlsZSBhbiBpbm9kZSBpcyBvbiBzX2VhX2lub2RlX3RvX2ZyZWUsIHRoZSB1bmNvbnN1bWVkIGlfY291bnQKJiM0MzsgKiByZWZlcmVuY2UgKHN0aWxsIDEpIGtlZXBzIGl0IGluIHRoZSBpbm9kZSBjYWNoZSwgc28gYW55IGNvbmN1cnJlbnQKJiM0MzsgKiBpZ2V0KCkgYnVtcHMgaV9jb3VudCB0byAmZ3Q7PSAyIGFuZCBpcHV0X2lmX25vdF9sYXN0KCkgd2lsbCBzdWNjZWVkLgomIzQzOyAqIE5vYm9keSB3aWxsIGFkZCB0aGUgaW5vZGUgYSBzZWNvbmQgdGltZSB1bnRpbCBleHQ0X2VhX2lub2RlX3dvcmsoKQomIzQzOyAqIGRyb3BzIHRoYXQgcmVmZXJlbmNlIHZpYSBpcHV0KCkuCiYjNDM7ICovCiYjNDM7dm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJaWYgKCFpbm9kZSkKJiM0MzsJCXJldHVybjsKJiM0MzsJV0FSTl9PTl9PTkNFKCEoRVhUNF9JKGlub2RlKS0mZ3Q7aV9mbGFncyAmYW1wOyBFWFQ0X0VBX0lOT0RFX0ZMKSk7CiYjNDM7CWlmIChpcHV0X2lmX25vdF9sYXN0KGlub2RlKSkKIAkJcmV0dXJuOwomIzQzOwlsbGlzdF9hZGQoJmFtcDtFWFQ0X0koaW5vZGUpLSZndDtpX2VhX2lwdXRfbm9kZSwKJiM0MzsJCSAgJmFtcDtFWFQ0X1NCKHNiKS0mZ3Q7c19lYV9pbm9kZV90b19mcmVlKTsKJiM0MzsJLyoKJiM0MzsJICogVXNlIGEgc2hvcnQgZGVsYXkgdG8gYWxsb3cgbXVsdGlwbGUgRUEgaW5vZGVzIHRvIGFjY3VtdWxhdGUsCiYjNDM7CSAqIHJlZHVjaW5nIHdvcmtxdWV1ZSB3YWtldXBzIHdoZW4gc2V2ZXJhbCBhcmUgcmVsZWFzZWQgdG9nZXRoZXIuCiYjNDM7CSAqLwomIzQzOwlzY2hlZHVsZV9kZWxheWVkX3dvcmsoJmFtcDtFWFQ0X1NCKHNiKS0mZ3Q7c19lYV9pbm9kZV93b3JrLCAxKTsKJiM0Mzt9CiAKLQlmb3IgKGlkeCA9IDA7IGlkeCAmbHQ7IGVhX2lub2RlX2FycmF5LSZndDtjb3VudDsgJiM0MzsmIzQzO2lkeCkKLQkJaXB1dChlYV9pbm9kZV9hcnJheS0mZ3Q7aW5vZGVzW2lkeF0pOwotCWtmcmVlKGVhX2lub2RlX2FycmF5KTsKJiM0Mzt2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSkKJiM0Mzt7CiYjNDM7CWluaXRfbGxpc3RfaGVhZCgmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV90b19mcmVlKTsKJiM0MzsJSU5JVF9ERUxBWUVEX1dPUksoJmFtcDtzYmktJmd0O3NfZWFfaW5vZGVfd29yaywgZXh0NF9lYV9pbm9kZV93b3JrKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuaCBiL2ZzL2V4dDQveGF0dHIuaAppbmRleCAxZmVkZjQ0ZDRmYjY1ZS4uNTE4ZjAyODNlMTc0NDQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQveGF0dHIuaAomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3hhdHRyLmgKQEAgLTEzMSwxMSAmIzQzOzEzMSw2IEBAIHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQgewogCXN0cnVjdCBleHQ0X2lsb2MgaWxvYzsKIH07CiAKLXN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5IHsKLQl1bnNpZ25lZCBpbnQgY291bnQ7Ci0Jc3RydWN0IGlub2RlICppbm9kZXNbXSBfX2NvdW50ZWRfYnkoY291bnQpOwotfTsKLQogZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyOwogZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfc2VjdXJpdHlfaGFuZGxlcjsKQEAgLTE4Nyw5ICYjNDM7MTgyLDkgQEAgZXh0ZXJuIGludCBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlib29sIGlzX2NyZWF0ZSk7CiAKIGV4dGVybiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKLQkJCQkgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmFycmF5LAogCQkJCSAgIGludCBleHRyYV9jcmVkaXRzKTsKLWV4dGVybiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqYXJyYXkpOwomIzQzO2V4dGVybiB2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSk7CiYjNDM7ZXh0ZXJuIHZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSk7CiAKIGV4dGVybiBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSwKIAkJCSAgICBzdHJ1Y3QgZXh0NF9pbm9kZSAqcmF3X2lub2RlLCBoYW5kbGVfdCAqaGFuZGxlKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaAppbmRleCBkMTA4OTdiM2ExZTM1MC4uMDRmMGRlNzhmYTdhODUgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvZnMuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2ZzLmgKQEAgLTI0MTMsNiAmIzQzOzI0MTMsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIHN1cGVyX3NldF9zeXNmc19uYW1lX2dlbmVyaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2gKIGV4dGVybiB2b2lkIGlob2xkKHN0cnVjdCBpbm9kZSAqIGlub2RlKTsKIGV4dGVybiB2b2lkIGlwdXQoc3RydWN0IGlub2RlICopOwogdm9pZCBpcHV0X25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBpcHV0X2lmX25vdF9sYXN0IC0gZHJvcCBhbiBpbm9kZSByZWZlcmVuY2Ugb25seSBpZiBpdCBpcyBub3QgdGhlIGxhc3Qgb25lCiYjNDM7ICogQGlub2RlOiBpbm9kZSB0byBwdXQKJiM0MzsgKgomIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVmZXJlbmNlIHdhcyBkcm9wcGVkLCBmYWxzZSBpZiB0aGlzIHdhcyB0aGUgbGFzdAomIzQzOyAqIHJlZmVyZW5jZSBhbmQgdGhlIGNhbGxlciBtdXN0IGFycmFuZ2UgZm9yIGZpbmFsIGlwdXQoKSBpbiBhIHNhZmUgY29udGV4dC4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGlwdXRfaWZfbm90X2xhc3Qoc3RydWN0IGlub2RlICppbm9kZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBhdG9taWNfYWRkX3VubGVzcygmYW1wO2lub2RlLSZndDtpX2NvdW50LCAtMSwgMSk7CiYjNDM7fQomIzQzOwogaW50IGlub2RlX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSwKIAkJdW5zaWduZWQgaW50IGZsYWdzKTsKIGludCBnZW5lcmljX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSwKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0NjAKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA2MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIEV4dDQgWGF0dHIgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggaGVyZSB0aGF0JiMzOTtzIGRpdmluZyBkZWVwIGludG8gZXh0NCYjMzk7cyBleHRlbmRlZCBhdHRyaWJ1dGUgKHhhdHRyKSBoYW5kbGluZywgc3BlY2lmaWNhbGx5IGhvdyBFQSBpbm9kZXMgYXJlIGZyZWVkLiAgSXQgc2VlbXMgdG8gYmUgYSBzaWduaWZpY2FudCBjaGFuZ2UsIGludHJvZHVjaW5nIGEgZGVmZXJyZWQgYGlwdXRgIG1lY2hhbmlzbSBmb3IgRUEgaW5vZGVzIHRvIHNpZGVzdGVwIHNvbWUgbG9jayBvcmRlcmluZyBpc3N1ZXMuIFRoYXTigJlzIGEgZ29vZCBjbHVlIGl04oCZcyBmaXhpbmcgYSByZWFsIHByb2JsZW0sIGFuZCBpdCYjMzk7cyBkZWZpbml0ZWx5IHNvbWV0aGluZyB0aGF0IHdhcnJhbnRzIGNhcmVmdWwgc2NydXRpbnkuIFRoaXMgaXNuJiMzOTt0IHNvbWUgdHJpdmlhbCB0d2VhazsgaXQgdG91Y2hlcyBjb3JlIGZpbGVzeXN0ZW0gZnVuY3Rpb25hbGl0eS4KClRoZSBwYXRjaCBpdHNlbGYgaXMgdG91Y2hpbmcgc29tZSBrZXkgZGF0YSBzdHJ1Y3R1cmVzLCBsaWtlIHVzaW5nIGEgdW5pb24gaW4gYHN0cnVjdCBleHQ0X2lub2RlX2luZm9gIGZvciBgeGF0dHJfc2VtYCBhbmQgYGlfZWFfaXB1dF9ub2RlYCBhbmQgYWRkaW5nIGZpZWxkcyAoYHNfZWFfaW5vZGVfdG9fZnJlZWAgYW5kIGBzX2VhX2lub2RlX3dvcmtgKSB0byBgc3RydWN0IGV4dDRfc2JfaW5mb2AuIEl0IGxvb2tzIGxpa2UgdGhleeKAmXJlIHRyeWluZyB0byBtYW5hZ2UgdGhlIGRlZmVycmVkIGlub2RlIHJlbGVhc2UgbW9yZSBlZmZlY3RpdmVseS4gQW5kIGl0JiMzOTtzIG5vdCBqdXN0IGEgbWlub3IgcmVmYWN0b3I7IHdlJiMzOTtyZSB0YWxraW5nIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gc2V2ZXJhbCBpbXBvcnRhbnQgZnVuY3Rpb25zOiBgZXh0NF9ldmljdF9pbm9kZWAsIGBleHQ0X3B1dF9zdXBlcmAsIGBleHQ0X2FsbG9jX2lub2RlYCwgYF9fZXh0NF9maWxsX3N1cGVyYCwgYW5kIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGluIGBmcy9leHQ0L3hhdHRyLmNgLiBQbHVzLCB0aGVyZSBhcmUgc29tZSBicmFuZCBuZXcgZnVuY3Rpb25zIGJlaW5nIGludHJvZHVjZWQ6IGBleHQ0X3B1dF9lYV9pbm9kZWAsIGBleHQ0X2VhX2lub2RlX3dvcmtgLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBpcHV0X2lmX25vdF9sYXN0YCBpbiBgaW5jbHVkZS9saW51eC9mcy5oYC4gIFRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgY29kZSBhbmQgYSBjaGFuZ2Ugd29ydGggZnV6aW5nIGFzIGl0IGlzIHRvdWNoaW5nIGNvcmUgZXh0NCBmaWxlIHN5c3RlbSBmdW5jdGlvbmFsaXR5LgoKR2l2ZW4gYWxsIG9mIHRoaXMsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzICYjMzQ7V29ydGhGdXp6aW5nID0gdHJ1ZSYjMzQ7LgoKTm93LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IHdoYXQmIzM5O3MgdGhlIG1vc3QgKmNyaXRpY2FsKiBjb2RlIHRvIHRhcmdldCB3aXRoIGZ1enppbmc/IExvb2tpbmcgYXQgdGhlIGxpc3Qgb2YgbW9kaWZpZWQgZnVuY3Rpb25zLCBpdCYjMzk7cyBwcmV0dHkgY2xlYXIgd2hlcmUgdGhlIGFjdGlvbiBpcy4gTXkgaW5pdGlhbCBmb2N1cyBzaG91bGQgYmUgb24gdGhlc2U6CgoqICAgYGV4dDRfZXZpY3RfaW5vZGVgCiogICBgZXh0NF9wdXRfc3VwZXJgCiogICBgZXh0NF9hbGxvY19pbm9kZWAKKiAgIGBfX2V4dDRfZmlsbF9zdXBlcmAKKiAgIFRoZSB4YXR0ci1yZWxhdGVkIGZ1bmN0aW9ucywgZXNwZWNpYWxseTogYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgLCBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgLCBgZXh0NF9lYV9pbm9kZV93b3JrYCwgYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCBhbmQgYGV4dDRfeGF0dHJfaWJvZHlfc2V0YAoKVGhlc2UgYXJlIGxpa2VseSB0aGUgZnVuY3Rpb25zIG1vc3QgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGRlZmVycmVkIGlub2RlIG1hbmFnZW1lbnQgYW5kIHhhdHRyIG1hbmlwdWxhdGlvbnMuIFRoZXNlIHNob3VsZCBiZSB0aGUgYEZvY3VzU3ltYm9sc2AgZm9yIG91ciBmdXp6aW5nIGVmZm9ydHMuCgpGaW5hbGx5LCBhcmUgdGhlcmUgYW55IGNvbmZpZ3VyYXRpb25zIEkgbmVlZCB0byBiZSBhd2FyZSBvZj8gVGhpcyBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIEVBIGlub2RlcyBpbiBleHQ0LCB3aGljaCBpcyBhIGZhaXJseSBzdGFuZGFyZCBmZWF0dXJlLiAgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgdGhhdCBJIGRvbiYjMzk7dCBuZWVkIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzZXQgaW4gdGhlIEtjb25maWcsIHNvIEkmIzM5O2xsIHNjYW4gZm9yIHRoaW5ncyBsaWtlIGBFWFQ0X0VBX0lOT0RFX0ZMYCBhbmQgc2ltaWxhciB0ZXJtcyB0byBlbnN1cmUgdGhlIGZlYXR1cmUgaXMgcHJvcGVybHkgZW5hYmxlZCBkdXJpbmcgdGVzdGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFQ0X0VBX0lOT0RFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9NDQwPXN0cnVjdCBmbGV4X2dyb3VwcyB7XG4tLVxuZnMvZXh0NC9leHQ0LmgtNTA0LSNkZWZpbmUgRVhUNF9WRVJJVFlfRkxcdFx0XHQweDAwMTAwMDAwIC8qIFZlcml0eSBwcm90ZWN0ZWQgaW5vZGUgKi9cbmZzL2V4dDQvZXh0NC5oOjUwNTojZGVmaW5lIEVYVDRfRUFfSU5PREVfRkxcdCAgICAgICAgMHgwMDIwMDAwMCAvKiBJbm9kZSB1c2VkIGZvciBsYXJnZSBFQSAqL1xuZnMvZXh0NC9leHQ0LmgtNTA2LS8qIDB4MDA0MDAwMDAgd2FzIGZvcm1lcmx5IEVYVDRfRU9GQkxPQ0tTX0ZMICovXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MTA0OD1zdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcbi0tXG5mcy9leHQ0L2V4dDQuaC0xMDczLVx0ICpcbmZzL2V4dDQvZXh0NC5oOjEwNzQ6XHQgKiBFQSBpbm9kZXMgKEVYVDRfRUFfSU5PREVfRkwpIGRvIG5vdCB1c2UgeGF0dHJfc2VtOyB0aGV5IHJldXNlXG5mcy9leHQ0L2V4dDQuaC0xMDc1LVx0ICogdGhlIHNwYWNlIGZvciBkZWZlcnJlZCBpcHV0IGxpbmthZ2UuXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MjcwMj1zdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9pc19xdW90YV9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9leHQ0LmgtMjcwNC1cdHJldHVybiBJU19OT1FVT1RBKGlub2RlKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvZXh0NC5oOjI3MDU6XHQgICAgICAgIShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpO1xuZnMvZXh0NC9leHQ0LmgtMjcwNi19XG4tLVxuZnMvZXh0NC9pYWxsb2MuYz05MzM9c3RydWN0IGlub2RlICpfX2V4dDRfbmV3X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxuLS1cbmZzL2V4dDQvaWFsbG9jLmMtOTk1LVxuZnMvZXh0NC9pYWxsb2MuYzo5OTY6XHRpZiAoIShpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSkge1xuZnMvZXh0NC9pYWxsb2MuYy05OTctXHRcdGVyciA9IGZzY3J5cHRfcHJlcGFyZV9uZXdfaW5vZGUoZGlyLCBpbm9kZSwgXHUwMDI2ZW5jcnlwdCk7XG4tLVxuZnMvZXh0NC9pYWxsb2MuYy0xMDA1LVxuZnMvZXh0NC9pYWxsb2MuYzoxMDA2Olx0aWYgKCFoYW5kbGUgXHUwMDI2XHUwMDI2IHNiaS1cdTAwM2VzX2pvdXJuYWwgXHUwMDI2XHUwMDI2ICEoaV9mbGFncyBcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpIHtcbmZzL2V4dDQvaWFsbG9jLmMtMTAwNy1cdFx0cmV0MiA9IGV4dDRfeGF0dHJfY3JlZGl0c19mb3JfbmV3X2lub2RlKGRpciwgbW9kZSwgZW5jcnlwdCk7XG4tLVxuZnMvZXh0NC9pYWxsb2MuYy0xMzA4LVx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfaW5saW5lX2RhdGEoc2IpIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC9pYWxsb2MuYzoxMzA5Olx0ICAgICghKGVpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IChFWFQ0X0RBWF9GTHxFWFQ0X0VBX0lOT0RFX0ZMKSkgfHwgU19JU0RJUihtb2RlKSkpXG5mcy9leHQ0L2lhbGxvYy5jLTEzMTAtXHRcdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX01BWV9JTkxJTkVfREFUQSk7XG4tLVxuZnMvZXh0NC9pYWxsb2MuYy0xMzI2LVxuZnMvZXh0NC9pYWxsb2MuYzoxMzI3Olx0aWYgKCEoZWktXHUwMDNlaV9mbGFncyBcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpIHtcbmZzL2V4dDQvaWFsbG9jLmMtMTMyOC1cdFx0ZXJyID0gZXh0NF9pbml0X2FjbChoYW5kbGUsIGlub2RlLCBkaXIpO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz0xNjk9dm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTE4NC1cbmZzL2V4dDQvaW5vZGUuYzoxODU6XHRpZiAoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKVxuZnMvZXh0NC9pbm9kZS5jLTE4Ni1cdFx0ZXh0NF9ldmljdF9lYV9pbm9kZShpbm9kZSk7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTQ2OTc9c3RhdGljIGlubGluZSB1NjQgZXh0NF9pbm9kZV9wZWVrX2l2ZXJzaW9uKGNvbnN0IHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9leHQ0L2lub2RlLmMtNDY5OC17XG5mcy9leHQ0L2lub2RlLmM6NDY5OTpcdGlmICh1bmxpa2VseShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKVxuZnMvZXh0NC9pbm9kZS5jLTQ3MDAtXHRcdHJldHVybiBpbm9kZV9wZWVrX2l2ZXJzaW9uX3Jhdyhpbm9kZSk7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTUxOTA9aW50IGV4dDRfZ2V0X3Byb2ppZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBrcHJvamlkX3QgKnByb2ppZClcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTE5OS0gKiBleHQ0IGhhcyBzZWxmLW1hbmFnZWQgaV92ZXJzaW9uIGZvciBlYSBpbm9kZXMsIGl0IHN0b3JlcyB0aGUgbG93ZXIgMzJiaXQgb2ZcbmZzL2V4dDQvaW5vZGUuYzo1MjAwOiAqIHJlZmNvdW50IGluIGlfdmVyc2lvbiwgc28gdXNlIHJhdyB2YWx1ZXMgaWYgaW5vZGUgaGFzIEVYVDRfRUFfSU5PREVfRkwgZmxhZ1xuZnMvZXh0NC9pbm9kZS5jLTUyMDEtICogc2V0LlxuLS1cbmZzL2V4dDQvaW5vZGUuYz01MjAzPXN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2lub2RlX3NldF9pdmVyc2lvbl9xdWVyaWVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCB2YWwpXG5mcy9leHQ0L2lub2RlLmMtNTIwNC17XG5mcy9leHQ0L2lub2RlLmM6NTIwNTpcdGlmICh1bmxpa2VseShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKVxuZnMvZXh0NC9pbm9kZS5jLTUyMDYtXHRcdGlub2RlX3NldF9pdmVyc2lvbl9yYXcoaW5vZGUsIHZhbCk7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTUyMTE9c3RhdGljIGludCBjaGVja19pZ290X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfaWdldF9mbGFncyBmbGFncyxcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTIxNi1cdGlmIChmbGFncyBcdTAwMjYgRVhUNF9JR0VUX0VBX0lOT0RFKSB7XG5mcy9leHQ0L2lub2RlLmM6NTIxNzpcdFx0aWYgKCEoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSkge1xuZnMvZXh0NC9pbm9kZS5jLTUyMTgtXHRcdFx0ZXJyX3N0ciA9IFwmIzM0O21pc3NpbmcgRUFfSU5PREUgZmxhZ1wmIzM0Oztcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTIyNi1cdH0gZWxzZSB7XG5mcy9leHQ0L2lub2RlLmM6NTIyNzpcdFx0aWYgKChFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKSB7XG5mcy9leHQ0L2lub2RlLmMtNTIyOC1cdFx0XHQvKlxuLS1cbmZzL2V4dDQveGF0dHIuYz0xNTE2PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTE1MzUtXHRcdFx0XHQgIFNfSUZSRUcgfCAwNjAwLCBOVUxMLCBpbm9kZS1cdTAwM2VpX2lubyAmIzQzOyAxLCBvd25lcixcbmZzL2V4dDQveGF0dHIuYzoxNTM2Olx0XHRcdFx0ICBFWFQ0X0VBX0lOT0RFX0ZMKTtcbmZzL2V4dDQveGF0dHIuYy0xNTM3LVx0aWYgKCFJU19FUlIoZWFfaW5vZGUpKSB7XG4tLVxuZnMvZXh0NC94YXR0ci5jPTMwNTE9dm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQveGF0dHIuYy0zMDU0LVx0XHRyZXR1cm47XG5mcy9leHQ0L3hhdHRyLmM6MzA1NTpcdFdBUk5fT05fT05DRSghKEVYVDRfSShpbm9kZSktXHUwMDNlaV9mbGFncyBcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpO1xuZnMvZXh0NC94YXR0ci5jLTMwNTYtXHRpZiAoaXB1dF9pZl9ub3RfbGFzdChpbm9kZSkpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM2MjkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipJbnZlc3RpZ2F0aW5nIEV4dDQmIzM5O3MgRUEgSU5PREUgRmVhdHVyZSoqCgpPa2F5LCBzbyB3ZSYjMzk7cmUgbG9va2luZyBhdCB0aGUgRUEgSU5PREUgZmVhdHVyZSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gTXkgZmlyc3QgbW92ZSwgYXMgYWx3YXlzLCBpcyB0byBjaGVjayBmb3IgYSBLY29uZmlnIG9wdGlvbi4gS25vd2luZyB0aGlzLCBpZiB0aGVyZSBpcyBhIHdheSB0byBjb25maWd1cmUgdGhpcyBmZWF0dXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQmIzM5O3MgY29udHJvbGxlZCBhbmQgd2hldGhlciBpdCYjMzk7cyBlbmFibGVkIGJ5IGRlZmF1bHQsIG9yIGlmIGl0IG5lZWRzIHRvIGJlIGV4cGxpY2l0bHkgZW5hYmxlZCBpbiB0aGUga2VybmVsIGNvbmZpZy4gRmluZGluZyB0aGUgS2NvbmZpZyBvcHRpb24gaXMgdGhlIGluaXRpYWwsIGFuZCBsaWtlbHkgbW9zdCBpbXBvcnRhbnQsIGZpcnN0IHN0ZXAsIGFzIGl0IHdpbGwgcmV2ZWFsIGhvdyB0aGUgZmVhdHVyZSBpcyBtYW5hZ2VkIGFuZCBjb250cm9sbGVkIGluIHRoaXMga2VybmVsIGNvbnRleHQuIExldCYjMzk7cyBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6Mjg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtFWFQ0X0VBX0lOT0RFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMToyODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzg1MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkVYVDQgRXh0ZW5kZWQgQXR0cmlidXRlcyBhbmQgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpdmluZyBpbnRvIHRoaXMgRVhUNCBleHRlbmRlZCBhdHRyaWJ1dGVzIHRoaW5nLCBzcGVjaWZpY2FsbHkgdGhlIGBFWFQ0X0VBX0lOT0RFYC4gSG1tLCB0aGVyZSBkb2VzbiYjMzk7dCBzZWVtIHRvIGJlIGEgZGVkaWNhdGVkIEtjb25maWcgb3B0aW9uIGZvciBpdCBkaXJlY3RseS4gVGhhdCYjMzk7cyBhIGJpdCBzdXJwcmlzaW5nLiBVc3VhbGx5LCB0aGVyZSYjMzk7cyBhIGZsYWcgZm9yIGV2ZXJ5dGhpbmcuIFJpZ2h0LCBJIHJlY2FsbCBpdCBiZWluZyBlbmFibGVkIGltcGxpY2l0bHkgd2hlbiBkZWFsaW5nIHdpdGggbGFyZ2UgZXh0ZW5kZWQgYXR0cmlidXRlcy4gQnV0IGp1c3QgdG8gYmUgc3VyZSwgSSBzaG91bGQgdmVyaWZ5IHdoYXQgZW5hYmxlcyBpdC4KCldhaXQgYSBzZWNvbmQsIHRoZXJlICppcyogYW4gYEVYVDRfRlNgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBvZiBjb3Vyc2UuIEJ1dCB0aGF0JiMzOTtzIHByZXR0eSBzdGFuZGFyZCwgdGhlIGdlbmVyYWwgZmlsZSBzeXN0ZW0gc3VwcG9ydC4gSSBuZWVkIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljLiBMZXQmIzM5O3MgZGlnIGRlZXBlciBhbmQgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgRVhUNC1yZWxhdGVkIGNvbmZpZ3MgdGhhdCBtaWdodCBzaGVkIHNvbWUgbGlnaHQgb24gdGhpcy4uLiBJIGtub3cgdGhlcmUmIzM5O3Mgc29tZXRoaW5nIGFyb3VuZCBoZXJlIHNvbWV3aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgRVhUNCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2V4dDQvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXG5mcy9leHQ0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1RoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnLTM0LVxuZnMvZXh0NC9LY29uZmlnOjM1OmNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxuZnMvZXh0NC9LY29uZmlnLTM2LVx0Ym9vbCBcJiMzNDtVc2UgZXh0NCBmb3IgZXh0MiBmaWxlIHN5c3RlbXNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNDUtXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXG5mcy9leHQ0L0tjb25maWctNDctXHRib29sIFwmIzM0O0V4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNTUtXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcbmZzL2V4dDQvS2NvbmZpZy01Ny1cdGJvb2wgXCYjMzQ7RXh0NCBTZWN1cml0eSBMYWJlbHNcJiMzNDtcbi0tXG5mcy9leHQ0L0tjb25maWctNjctXG5mcy9leHQ0L0tjb25maWc6Njg6Y29uZmlnIEVYVDRfREVCVUdcbmZzL2V4dDQvS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7RXh0NCBkZWJ1Z2dpbmcgc3VwcG9ydFwmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy03Ni1cbmZzL2V4dDQvS2NvbmZpZzo3Nzpjb25maWcgRVhUNF9LVU5JVF9URVNUU1xuZnMvZXh0NC9LY29uZmlnLTc4LVx0dHJpc3RhdGUgXCYjMzQ7S1VuaXQgdGVzdHMgZm9yIGV4dDRcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjI4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDk0CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBDb25maWd1cmF0aW9uIFJlcXVpcmVtZW50cyBmb3IgTW9kaWZpZWQgZXh0NCBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBtb2RpZmljYXRpb25zIGluIHRoZSBleHQ0IGNvZGUsIGFuZCBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIHJlbGV2YW50IHRvIGhpZ2hsaWdodC4gSSBpbml0aWFsbHkgdGhvdWdodCBJIG1pZ2h0IG5lZWQgdG8gZXhwbGljaXRseSBtZW50aW9uIGBFWFQ0X0ZTYCwgc2luY2UgaXQmIzM5O3MgdGhlIGNvcmUgZmlsZXN5c3RlbS4gQnV0IHRoZW4gSSByZS1yZWFkIHRoZSBpbnN0cnVjdGlvbnMsIGFuZCBpdOKAmXMgY2xlYXI6ICYjMzQ7RG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0IHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4mIzM0OyBSaWdodCwgdGhhdCBtYWtlcyBwZXJmZWN0IHNlbnNlLCBzbyBJJiMzOTtsbCBsZWF2ZSBgRVhUNF9GU2Agb3V0OyBpdCYjMzk7cyBwcmFjdGljYWxseSBhIGdpdmVuLgoKTm93LCBsZXQmIzM5O3MgZG91YmxlLWNoZWNrIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgdG8gYmUgY2VydGFpbiBJIGhhdmUgYSBmdWxsIHBpY3R1cmUuIE9rYXksIEkmIzM5O3ZlIGdvdDogYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgLCBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgLCBgZXh0NF9lYV9pbm9kZV93b3JrYCwgYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCwgYW5kIGBleHQ0X3hhdHRyX2lib2R5X3NldGAuIFRoZXNlIGFsbCBzb3VuZCBsaWtlIHRoZXkgYXJlIHdvcmtpbmcgd2l0aCBleHRlbmRlZCBhdHRyaWJ1dGVzICh4YXR0cikuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlIGNvbmZpZyBjb3JyZWN0LgoKTGV0JiMzOTtzIGRvIHRoaXMgcHJvcGVybHksIHRoZSBuZXh0IHN0ZXAgaXMgdG8gaGVhZCB0byBgZnMvZXh0NC9LY29uZmlnYCBhbmQgbG9vayBmb3IgYW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMToyODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O1hBVFRSJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwMjkKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAzOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhpcyBleHQ0IEVBIElub2RlIFBhdGNoKioKCk9rYXksIHNvIGl0IGxvb2tzIGxpa2UgeGF0dHIgaXMgYWx3YXlzIG9uIGZvciBleHQ0LCB3aGljaCBpcyBnb29kIHRvIGtlZXAgaW4gbWluZC4gTGV0JiMzOTtzIGRpZyBiYWNrIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBpdCYjMzk7cyBmb2N1c2luZyBvbiBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAsIGFuZCBJIHNlZSBpdCYjMzk7cyB0cnlpbmcgdG8gb3B0aW1pemUgRUEgaW5vZGUgaGFuZGxpbmcgYnkgdHJhY2tpbmcgdGhlbSBpbiBhbiBhcnJheSB0byBwcmV2ZW50IGR1cGxpY2F0ZSBwcm9jZXNzaW5nLiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb247IHNtYXJ0IG1vdmUuIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgZXh0NF9wdXRfZWFfaW5vZGVgIHdoaWNoIHVzZXMgYHNfZWFfaW5vZGVfdG9fZnJlZWAgYW5kIGBzX2VhX2lub2RlX3dvcmtgLCBzbyBpdCBpcyBkZWZpbml0ZWx5IGRvaW5nIGRlZmVycmVkIGlwdXQuIFNvIGl0IHNlZW1zIGxpa2UgdGhpcyBpcyB0aGUgd29yayBxdWV1ZSBwYXJ0LiBBbmQsIG5vIGxvbmdlciB0YWtpbmcgdGhhdCBhcnJheSBpbiBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgYWxzbyBtb2RpZmllcyBgZXh0NF9ldmljdF9pbm9kZWAgYW5kIGBleHQ0X3B1dF9zdXBlcmAgdG8gZmx1c2ggdGhlIHdvcmtxdWV1ZSwgc3VnZ2VzdGluZyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggZGVmZXJyZWQgb3BlcmF0aW9ucyBhbmQgbmVlZGluZyB0byBndWFyYW50ZWUgY2xlYW51cCBhdCBjcml0aWNhbCBwb2ludHMuCgpUaGUgY29yZSBvZiB0aGUgcGF0Y2gmIzM5O3MgbG9naWMgaXMgY2xlYXI6IGl0JiMzOTtzIGludHJvZHVjaW5nIGEgZGVmZXJyZWQgYGlwdXRgIG1lY2hhbmlzbSBmb3IgZXh0NCBFQSBpbm9kZXMgdG8gZG9kZ2UgbG9jayBvcmRlcmluZyBpc3N1ZXMgYW5kIGRlYWRsb2Nrcy4gSSBuZWVkIHRvIGJlIGV4dHJhIGNhdXRpb3VzIGFuZCBsb29rIGF0IHRoZSBjb3JlIGV4dDQgeGF0dHIgaGFuZGxpbmcgYW5kIGlub2RlIGV2aWN0aW9uIHBhdGhzLiBJIHdvdWxkIGFsc28gYWRkIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgYW5kIGBleHQ0X3hhdHRyX2lib2R5X3NldGAgdG8gdGhlIHBvdGVudGlhbCBmdXp6aW5nIHN5bWJvbHMgYmVjYXVzZSBJJiMzOTttIGJldHRpbmcgdGhhdCB0aGUgb3JpZ2luYWwgcGF0Y2ggaXMgb25seSBwYXJ0IG9mIHRoZSBwdXp6bGUuCgpOb3csIHdhaXQsIGFtIEkgbWlzc2luZyBhbnl0aGluZyBjb25maWd1cmF0aW9uLXdpc2U/IEkmIzM5O20gZ29pbmcgdG8gbG9vayBhdCBgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMYCBhbmQgYENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZYCB0byBzZWUgaWYgdGhvc2UgY29tZSBpbnRvIHBsYXkgaGVyZS4gRUEgaW5vZGVzIGFyZSAqdHlwaWNhbGx5KiB1c2VkIGZvciAqbGFyZ2UqIHhhdHRycywgYW5kIEFDTHMgYW5kIFNFTGludXggbGFiZWxzIHVzZSB4YXR0cnMsIHNvIHRoZXJlIGlzIHNvbWUgb3ZlcmxhcC4gQnV0IGxhcmdlIHhhdHRycyBhcmUgdXN1YWxseSAqdXNlciogeGF0dHJzLCBub3QgQUNMcyBvciBzZWN1cml0eSBsYWJlbHMuIEhtbW0sIGlzIHRoZXJlIGEgYENPTkZJR19FWFQ0X0ZTX1hBVFRSYD8gVGhhdCYjMzk7cyB3aGF0IEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGluIGBmcy9leHQ0L01ha2VmaWxlYCB0byBtYWtlIHN1cmUgbm90aGluZyBpcyBtaXNzZWQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDExOjI4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3hhdHRyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L01ha2VmaWxlPTg9ZXh0NC15XHQ6PSBiYWxsb2MubyBiaXRtYXAubyBibG9ja192YWxpZGl0eS5vIGRpci5vIGV4dDRfamJkMi5vIGV4dGVudHMubyBcXFxuLS1cbmZzL2V4dDQvTWFrZWZpbGUtMTEtXHRcdG1tcC5vIG1vdmVfZXh0ZW50Lm8gbmFtZWkubyBwYWdlLWlvLm8gcmVhZHBhZ2UubyByZXNpemUubyBcXFxuZnMvZXh0NC9NYWtlZmlsZToxMjpcdFx0c3VwZXIubyBzeW1saW5rLm8gc3lzZnMubyB4YXR0ci5vIHhhdHRyX2h1cmQubyB4YXR0cl90cnVzdGVkLm8gXFxcbmZzL2V4dDQvTWFrZWZpbGU6MTM6XHRcdHhhdHRyX3VzZXIubyBmYXN0X2NvbW1pdC5vIG9ycGhhbi5vXG5mcy9leHQ0L01ha2VmaWxlLTE0LVxuZnMvZXh0NC9NYWtlZmlsZT0xNT1leHQ0LSQoQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMKVx0JiM0Mzs9IGFjbC5vXG5mcy9leHQ0L01ha2VmaWxlOjE2OmV4dDQtJChDT05GSUdfRVhUNF9GU19TRUNVUklUWSlcdFx0JiM0Mzs9IHhhdHRyX3NlY3VyaXR5Lm9cbmZzL2V4dDQvTWFrZWZpbGUtMTctZXh0NC10ZXN0LW9ianNcdFx0XHRcdCYjNDM7PSBpbm9kZS10ZXN0Lm8gbWJhbGxvYy10ZXN0Lm8gXFxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTE6Mjg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyMDgKCQkJCQkJCW91dHB1dDogMTUwCgkJCQkJCQl0aG91Z2h0czogMjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlJlZmluaW5nIHRoZSBYYXR0ciBGb2N1cyoqCgpPa2F5LCBzbyBgeGF0dHIub2AgaXMgYSBjb25zdGFudCBjb21waWxlLiBObyBuZWVkIHRvIGZpZGRsZSB3aXRoIGFueSBjb25maWd1cmF0aW9uIHRoZXJlOyBpdCYjMzk7cyBhbHdheXMgaW5jbHVkZWQuIE5vdywgbGV0JiMzOTtzIGdldCBkb3duIHRvIHRoZSBtZWF0IG9mIHJlZmluaW5nIHRoZXNlIGBGb2N1c1N5bWJvbHNgLiBJIG5lZWQgdG8gaG9uZSBpbiBvbiB0aGUgY29yZSBvcGVyYXRpb25zLgoKTG9va2luZyBhdCB0aGUgbGlzdCwgSSYjMzk7bSBnb2luZyB0byBzZWxlY3QgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnMgYXMgdGhlIG1vc3QgcmVsZXZhbnQ6IGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYCwgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYCwgYGV4dDRfZWFfaW5vZGVfd29ya2AsIGBleHQ0X3B1dF9lYV9pbm9kZWAsIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAsIGFuZCBgZXh0NF94YXR0cl9pYm9keV9zZXRgLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGNlbnRyYWwgdG8geGF0dHIgbWFuYWdlbWVudCB3aXRoaW4gZXh0NCwgdG91Y2hpbmcgb24gcmVmZXJlbmNlIGNvdW50aW5nLCBkZWxldGlvbiwgYW5kIGJvdGggYmxvY2stYmFzZWQgYW5kIGlub2RlLWJhc2VkIGV4dGVuZGVkIGF0dHJpYnV0ZSBzdG9yYWdlLiBOb3csIGxldCYjMzk7cyBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGlzIHJlZmluZWQgc2VsZWN0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMToyOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X2VhX2lub2RlX3dvcmsmIzM0OywKICAgICYjMzQ7ZXh0NF9wdXRfZWFfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9ibG9ja19zZXQmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pYm9keV9zZXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIGZvciBleHQ0IEVBIChFeHRlbmRlZCBBdHRyaWJ1dGUpIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyBhbmQgZGVhZGxvY2tzLiBJdCBtb2RpZmllcyBjb3JlIGV4dDQgeGF0dHIgaGFuZGxpbmcgYW5kIGlub2RlIGV2aWN0aW9uIHBhdGhzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogbnVsbCwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9kZWxldGVfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF9lYV9pbm9kZV93b3JrJiMzNDssCiAgICAmIzM0O2V4dDRfcHV0X2VhX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfYmxvY2tfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaWJvZHlfc2V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWZlcnJlZCBpcHV0IG1lY2hhbmlzbSBmb3IgZXh0NCBFQSAoRXh0ZW5kZWQgQXR0cmlidXRlKSBpbm9kZXMgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMgYW5kIGRlYWRsb2Nrcy4gSXQgbW9kaWZpZXMgY29yZSBleHQ0IHhhdHRyIGhhbmRsaW5nIGFuZCBpbm9kZSBldmljdGlvbiBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjI4OjI2LjQyMzIyNjUwMVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MzExNDk3ODgyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxcIixcbiAgICBcImV4dDRfeGF0dHJfZGVsZXRlX2lub2RlXCIsXG4gICAgXCJleHQ0X2VhX2lub2RlX3dvcmtcIixcbiAgICBcImV4dDRfcHV0X2VhX2lub2RlXCIsXG4gICAgXCJleHQ0X3hhdHRyX2Jsb2NrX3NldFwiLFxuICAgIFwiZXh0NF94YXR0cl9pYm9keV9zZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gZm9yIGV4dDQgRUEgKEV4dGVuZGVkIEF0dHJpYnV0ZSkgaW5vZGVzIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzIGFuZCBkZWFkbG9ja3MuIEl0IG1vZGlmaWVzIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZyBhbmQgaW5vZGUgZXZpY3Rpb24gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjI4OjI2LjQyMzIzNTQ0MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMzMzQyNTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWYyZjVlNWY0MTcwNTkyMDBiODYwNGNlYTRiNWM0M2U4NmFlNmM4YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyOSAxMToyODoyMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXFxuaW5kZXggYjM3YzEzNmVhM2FiMzMuLmI5YjBhZGE3Nzc0YmI0IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvZXh0NC5oXFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcXG5AQCAtMTA3MCw4ICsxMDcwLDE0IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xcbiBcXHQgKiBiZXR3ZWVuIHJlYWRlcnMgb2YgRUFzIGFuZCB3cml0ZXJzIG9mIHJlZ3VsYXIgZmlsZSBkYXRhLCBzb1xcbiBcXHQgKiBpbnN0ZWFkIHdlIHN5bmNocm9uaXplIG9uIHhhdHRyX3NlbSB3aGVuIHJlYWRpbmcgb3IgY2hhbmdpbmdcXG4gXFx0ICogRUFzLlxcbitcXHQgKlxcbitcXHQgKiBFQSBpbm9kZXMgKEVYVDRfRUFfSU5PREVfRkwpIGRvIG5vdCB1c2UgeGF0dHJfc2VtOyB0aGV5IHJldXNlXFxuK1xcdCAqIHRoZSBzcGFjZSBmb3IgZGVmZXJyZWQgaXB1dCBsaW5rYWdlLlxcbiBcXHQgKi9cXG4tXFx0c3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07XFxuK1xcdHVuaW9uIHtcXG4rXFx0XFx0c3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07XFxuK1xcdFxcdHN0cnVjdCBsbGlzdF9ub2RlIGlfZWFfaXB1dF9ub2RlO1xcbitcXHR9O1xcbiBcXG4gXFx0LypcXG4gXFx0ICogSW5vZGVzIHdpdGggRVhUNF9TVEFURV9PUlBIQU5fRklMRSB1c2UgaV9vcnBoYW5faWR4LiBPdGhlcndpc2VcXG5AQCAtMTc3MCw2ICsxNzc2LDExIEBAIHN0cnVjdCBleHQ0X3NiX2luZm8ge1xcbiBcXHRzdHJ1Y3QgZXh0NF9lc19zdGF0cyBzX2VzX3N0YXRzO1xcbiBcXHRzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfYmxvY2tfY2FjaGU7XFxuIFxcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9pbm9kZV9jYWNoZTtcXG4rXFxuK1xcdC8qIERlZmVycmVkIGlwdXQgZm9yIEVBIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyAqL1xcbitcXHRzdHJ1Y3QgbGxpc3RfaGVhZCBzX2VhX2lub2RlX3RvX2ZyZWU7XFxuK1xcdHN0cnVjdCBkZWxheWVkX3dvcmsgc19lYV9pbm9kZV93b3JrO1xcbitcXG4gXFx0c3BpbmxvY2tfdCBzX2VzX2xvY2sgX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcXG4gXFxuIFxcdC8qIEpvdXJuYWwgdHJpZ2dlcnMgZm9yIGNoZWNrc3VtIGNvbXB1dGF0aW9uICovXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvaW5vZGUuYyBiL2ZzL2V4dDQvaW5vZGUuY1xcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi43NDdjNTJjMjMyY2MwMyAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L2lub2RlLmNcXG4rKysgYi9mcy9leHQ0L2lub2RlLmNcXG5AQCAtMTc2LDcgKzE3Niw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHQgKiAoeGF0dHIgYmxvY2sgZnJlZWluZyksIGJpdG1hcCwgZ3JvdXAgZGVzY3JpcHRvciAoaW5vZGUgZnJlZWluZylcXG4gXFx0ICovXFxuIFxcdGludCBleHRyYV9jcmVkaXRzID0gNjtcXG4tXFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcXG4gXFx0Ym9vbCBmcmVlemVfcHJvdGVjdGVkID0gZmFsc2U7XFxuIFxcbiBcXHR0cmFjZV9leHQ0X2V2aWN0X2lub2RlKGlub2RlKTtcXG5AQCAtMjgxLDggKzI4MCw3IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHR9XFxuIFxcbiBcXHQvKiBSZW1vdmUgeGF0dHIgcmVmZXJlbmNlcy4gKi9cXG4tXFx0ZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgXFx1MDAyNmVhX2lub2RlX2FycmF5LFxcbi1cXHRcXHRcXHRcXHQgICAgICBleHRyYV9jcmVkaXRzKTtcXG4rXFx0ZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgZXh0cmFfY3JlZGl0cyk7XFxuIFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0ZXh0NF93YXJuaW5nKGlub2RlLVxcdTAwM2VpX3NiLCBcXFwieGF0dHIgZGVsZXRlIChlcnIgJWQpXFxcIiwgZXJyKTtcXG4gc3RvcF9oYW5kbGU6XFxuQEAgLTI5MCw3ICsyODgsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0XFx0ZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTtcXG4gXFx0XFx0aWYgKGZyZWV6ZV9wcm90ZWN0ZWQpXFxuIFxcdFxcdFxcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cXHUwMDNlaV9zYik7XFxuLVxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XFxuIFxcdFxcdGdvdG8gbm9fZGVsZXRlO1xcbiBcXHR9XFxuIFxcbkBAIC0zMjAsNyArMzE3LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XFxuIFxcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxcbiBcXHRcXHRzYl9lbmRfaW50d3JpdGUoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbi1cXHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xcbiBcXHRyZXR1cm47XFxuIG5vX2RlbGV0ZTpcXG4gXFx0LypcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXFxuaW5kZXggMjQ1ZjY3ZDEwZGVkMzQuLjNlZmE1YTgxN2JlZjRmIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvc3VwZXIuY1xcbisrKyBiL2ZzL2V4dDQvc3VwZXIuY1xcbkBAIC0xMzAzLDYgKzEzMDMsOCBAQCBzdGF0aWMgdm9pZCBleHQ0X3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRcXHRcXHQgXFx1MDAyNnNiLVxcdTAwM2VzX3V1aWQpO1xcbiBcXG4gXFx0ZXh0NF91bnJlZ2lzdGVyX2xpX3JlcXVlc3Qoc2IpO1xcbitcXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyB3aGlsZSBxdW90YSBpcyBzdGlsbCBhY3RpdmUuICovXFxuK1xcdGZsdXNoX2RlbGF5ZWRfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmspO1xcbiBcXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcXG4gXFxuIFxcdGRlc3Ryb3lfd29ya3F1ZXVlKHNiaS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xcbkBAIC0xNDIzLDYgKzE0MjUsMTMgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRtZW1zZXQoXFx1MDAyNmVpLVxcdTAwM2VpX2RxdW90LCAwLCBzaXplb2YoZWktXFx1MDAzZWlfZHF1b3QpKTtcXG4gI2VuZGlmXFxuIFxcdGVpLVxcdTAwM2VqaW5vZGUgPSBOVUxMO1xcbitcXHQvKlxcbitcXHQgKiBSZWluaXRpYWxpemUgeGF0dHJfc2VtIGV2ZXJ5IGFsbG9jYXRpb24gYmVjYXVzZSBFQSBpbm9kZXNcXG4rXFx0ICogc2hhcmUgdGhpcyBzcGFjZSB3aXRoIGlfZWFfaXB1dF9ub2RlICh2aWEgdW5pb24pIHdoaWNoIG1heVxcbitcXHQgKiBoYXZlIG92ZXJ3cml0dGVuIHRoZSBzZW1hcGhvcmUgd2hlbiB0aGUgc2xhYiBvYmplY3Qgd2FzXFxuK1xcdCAqIHByZXZpb3VzbHkgdXNlZCBhcyBhbiBFQSBpbm9kZS5cXG4rXFx0ICovXFxuK1xcdGluaXRfcndzZW0oXFx1MDAyNmVpLVxcdTAwM2V4YXR0cl9zZW0pO1xcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZWktXFx1MDAzZWlfcnN2X2NvbnZlcnNpb25fbGlzdCk7XFxuIFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZlaS1cXHUwMDNlaV9jb21wbGV0ZWRfaW9fbG9jayk7XFxuIFxcdGVpLVxcdTAwM2VpX3N5bmNfdGlkID0gMDtcXG5AQCAtMTQ4OCw3ICsxNDk3LDYgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcXG4gXFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBmb287XFxuIFxcbiBcXHRJTklUX0xJU1RfSEVBRChcXHUwMDI2ZWktXFx1MDAzZWlfb3JwaGFuKTtcXG4tXFx0aW5pdF9yd3NlbShcXHUwMDI2ZWktXFx1MDAzZXhhdHRyX3NlbSk7XFxuIFxcdGluaXRfcndzZW0oXFx1MDAyNmVpLVxcdTAwM2VpX2RhdGFfc2VtKTtcXG4gXFx0aW5vZGVfaW5pdF9vbmNlKFxcdTAwMjZlaS1cXHUwMDNldmZzX2lub2RlKTtcXG4gXFx0ZXh0NF9mY19pbml0X2lub2RlKFxcdTAwMjZlaS1cXHUwMDNldmZzX2lub2RlKTtcXG5AQCAtNTQ5Nyw2ICs1NTA1LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdFxcdFxcdCAgZXh0NF9oYXNfZmVhdHVyZV9vcnBoYW5fcHJlc2VudChzYikgfHxcXG4gXFx0XFx0XFx0ICBleHQ0X2hhc19mZWF0dXJlX2pvdXJuYWxfbmVlZHNfcmVjb3Zlcnkoc2IpKTtcXG4gXFxuK1xcdGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHNiaSk7XFxuK1xcbiBcXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9tbXAoc2IpIFxcdTAwMjZcXHUwMDI2ICFzYl9yZG9ubHkoc2IpKSB7XFxuIFxcdFxcdGVyciA9IGV4dDRfbXVsdGlfbW91bnRfcHJvdGVjdChzYiwgbGU2NF90b19jcHUoZXMtXFx1MDAzZXNfbW1wX2Jsb2NrKSk7XFxuIFxcdFxcdGlmIChlcnIpXFxuQEAgLTU3NDcsNiArNTc1Nyw4IEBAIHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuIGZhaWxlZF9tb3VudDk6XFxuK1xcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBxdW90YSBzaHV0ZG93biAqL1xcbitcXHRmbHVzaF9kZWxheWVkX3dvcmsoXFx1MDAyNnNiaS1cXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcXG4gXFx0ZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7XFxuIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuIFxcdGV4dDRfcmVsZWFzZV9vcnBoYW5faW5mbyhzYik7XFxuQEAgLTU3NjcsNiArNTc3OSw4IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuIFxcdGlmIChFWFQ0X1NCKHNiKS1cXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpXFxuIFxcdFxcdGRlc3Ryb3lfd29ya3F1ZXVlKEVYVDRfU0Ioc2IpLVxcdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XFxuIGZhaWxlZF9tb3VudF93cTpcXG4rXFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIGZyZWVpbmcgc3RydWN0dXJlcyAqL1xcbitcXHRmbHVzaF9kZWxheWVkX3dvcmsoXFx1MDAyNnNiaS1cXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcXG4gXFx0ZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XFxuIFxcdHNiaS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSA9IE5VTEw7XFxuIFxcbkBAIC01Nzc3LDYgKzU3OTEsOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxcbiBcXHRcXHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cXHUwMDNlc19qb3VybmFsKTtcXG4gXFx0fVxcbiBmYWlsZWRfbW91bnQzYTpcXG4rXFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgZnJvbSBqb3VybmFsIHJlcGxheSAqL1xcbitcXHRmbHVzaF9kZWxheWVkX3dvcmsoXFx1MDAyNnNiaS1cXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcXG4gXFx0ZXh0NF9lc191bnJlZ2lzdGVyX3Nocmlua2VyKHNiaSk7XFxuIGZhaWxlZF9tb3VudDM6XFxuIFxcdC8qIGZsdXNoIHNfc2JfdXBkX3dvcmsgYmVmb3JlIHNiaSBkZXN0cm95ICovXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xcbmluZGV4IDk4MmExZjgzMWUyMjgyLi44NWFkMjU2MTQ3NGI2ZSAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3hhdHRyLmNcXG4rKysgYi9mcy9leHQ0L3hhdHRyLmNcXG5AQCAtMTE0LDEwICsxMTQsNiBAQCBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciAqIGNvbnN0IGV4dDRfeGF0dHJfaGFuZGxlcnNbXSA9IHtcXG4gI2RlZmluZSBFQV9JTk9ERV9DQUNIRShpbm9kZSlcXHQoKChzdHJ1Y3QgZXh0NF9zYl9pbmZvICopIFxcXFxcXG4gXFx0XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfZnNfaW5mbyktXFx1MDAzZXNfZWFfaW5vZGVfY2FjaGUpXFxuIFxcbi1zdGF0aWMgaW50XFxuLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXFxuLVxcdFxcdFxcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbi1cXG4gI2lmZGVmIENPTkZJR19MT0NLREVQXFxuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9zZXRfY2xhc3Moc3RydWN0IGlub2RlICplYV9pbm9kZSlcXG4ge1xcbkBAIC01NjcsNyArNTYzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LFxcbiBcXHRcXHRcXHRcXHRcXHRlYV9pbm9kZS1cXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xcbiBcXHR9XFxuIG91dDpcXG4tXFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdHJldHVybiBlcnI7XFxuIH1cXG4gXFxuQEAgLTExMDQsMTAgKzExMDAsMTAgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX2luY19yZWYoaGFuZGxlLCBlYV9pbm9kZSk7XFxuIFxcdFxcdGlmIChlcnIpIHtcXG4gXFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcXFwiaW5jIHJlZiBlcnJvciAlZFxcXCIsIGVycik7XFxuLVxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0Z290byBjbGVhbnVwO1xcbiBcXHRcXHR9XFxuLVxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTExMzMsNyArMTEyOSw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcXFwiY2xlYW51cCBkZWMgcmVmIGVycm9yICVkXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgZXJyKTtcXG4tXFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbiBcXHR9XFxuIFxcdHJldHVybiBzYXZlZF9lcnI7XFxuIH1cXG5AQCAtMTE1NiwxMSArMTE1MiwyOSBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfcmVzdGFydF9mbihoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRyZXR1cm4gMDtcXG4gfVxcbiBcXG4rLyogVHJhY2sgYW4gRUEgaW5vZGUgbnVtYmVyIGluIHRoZSBkZWR1cCBhcnJheSwgZXhwYW5kaW5nIGlmIG5lZWRlZC4gKi9cXG4rc3RhdGljIHZvaWQgZWFfaW5vX2FycmF5X2FkZCh1bnNpZ25lZCBpbnQgKiplYV9pbm9zLCB1bnNpZ25lZCBpbnQgKm5yLFxcbitcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCAqc2l6ZSwgdW5zaWduZWQgaW50ICppbmxpbmVfYXJyLFxcbitcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGludCBpbm8pXFxuK3tcXG4rXFx0aWYgKCpuciA9PSAqc2l6ZSkge1xcbitcXHRcXHR1bnNpZ25lZCBpbnQgbmV3X3NpemUgPSAqc2l6ZSAqIDI7XFxuK1xcdFxcdHVuc2lnbmVkIGludCAqcDtcXG4rXFxuK1xcdFxcdHAgPSBrbWFsbG9jX2FycmF5KG5ld19zaXplLCBzaXplb2YoKnApLCBHRlBfTk9GUyB8IF9fR0ZQX05PRkFJTCk7XFxuK1xcdFxcdG1lbWNweShwLCAqZWFfaW5vcywgKm5yICogc2l6ZW9mKCpwKSk7XFxuK1xcdFxcdGlmICgqZWFfaW5vcyAhPSBpbmxpbmVfYXJyKVxcbitcXHRcXHRcXHRrZnJlZSgqZWFfaW5vcyk7XFxuK1xcdFxcdCplYV9pbm9zID0gcDtcXG4rXFx0XFx0KnNpemUgPSBuZXdfc2l6ZTtcXG4rXFx0fVxcbitcXHQoKmVhX2lub3MpWygqbnIpKytdID0gaW5vO1xcbit9XFxuK1xcbiBzdGF0aWMgdm9pZFxcbiBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRcXHQgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmZpcnN0LCBib29sIGJsb2NrX2NzdW0sXFxuLVxcdFxcdFxcdCAgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcXG4gXFx0XFx0XFx0ICAgICBpbnQgZXh0cmFfY3JlZGl0cywgYm9vbCBza2lwX3F1b3RhKVxcbiB7XFxuIFxcdHN0cnVjdCBpbm9kZSAqZWFfaW5vZGU7XFxuQEAgLTExNzEsNiArMTE4NSwxMCBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRpbnQgZXJyO1xcbiBcXHRpbnQgY3JlZGl0cztcXG4gXFx0dm9pZCAqZW5kO1xcbitcXHR1bnNpZ25lZCBpbnQgZWFfaW5vc19pbmxpbmVbMzJdO1xcbitcXHR1bnNpZ25lZCBpbnQgKmVhX2lub3MgPSBlYV9pbm9zX2lubGluZTtcXG4rXFx0dW5zaWduZWQgaW50IG5yX2VhX2lub3MgPSAwO1xcbitcXHR1bnNpZ25lZCBpbnQgZWFfaW5vc19zaXplID0gQVJSQVlfU0laRShlYV9pbm9zX2lubGluZSk7XFxuIFxcbiBcXHRpZiAoYmxvY2tfY3N1bSlcXG4gXFx0XFx0ZW5kID0gKHZvaWQgKiliaC1cXHUwMDNlYl9kYXRhICsgYmgtXFx1MDAzZWJfc2l6ZTtcXG5AQCAtMTE4OCwyMyArMTIwNiwzMCBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXG4gXFx0Zm9yIChlbnRyeSA9IGZpcnN0OyAodm9pZCAqKWVudHJ5IFxcdTAwM2MgZW5kIFxcdTAwMjZcXHUwMDI2ICFJU19MQVNUX0VOVFJZKGVudHJ5KTtcXG4gXFx0ICAgICBlbnRyeSA9IEVYVDRfWEFUVFJfTkVYVChlbnRyeSkpIHtcXG4rXFx0XFx0dW5zaWduZWQgaW50IGk7XFxuK1xcbiBcXHRcXHRpZiAoIWVudHJ5LVxcdTAwM2VlX3ZhbHVlX2ludW0pXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRlYV9pbm8gPSBsZTMyX3RvX2NwdShlbnRyeS1cXHUwMDNlZV92YWx1ZV9pbnVtKTtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFNraXAgRUEgaW5vZGVzIHdlIGFscmVhZHkgcHJvY2Vzc2VkLiAgT24gYSBjb3JydXB0ZWQgZnMsXFxuK1xcdFxcdCAqIGR1cGxpY2F0ZSBlbnRyaWVzIG1heSBwb2ludCB0byB0aGUgc2FtZSBFQSBpbm9kZTsgd2l0aG91dFxcbitcXHRcXHQgKiB0aGlzIGNoZWNrLCB0aGUgc2Vjb25kIGlnZXQgY291bGQgZGVhZGxvY2sgb24gSV9GUkVFSU5HXFxuK1xcdFxcdCAqIGlmIHRoZSBkZWZlcnJlZCB3b3JrZXIgYWxyZWFkeSBzdGFydGVkIGV2aWN0aW5nIGl0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG5yX2VhX2lub3M7IGkrKylcXG4rXFx0XFx0XFx0aWYgKGVhX2lub3NbaV0gPT0gZWFfaW5vKVxcbitcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0aWYgKGkgXFx1MDAzYyBucl9lYV9pbm9zKVxcbitcXHRcXHRcXHRjb250aW51ZTtcXG4rXFxuIFxcdFxcdGVyciA9IGV4dDRfeGF0dHJfaW5vZGVfaWdldChwYXJlbnQsIGVhX2lubyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIGxlMzJfdG9fY3B1KGVudHJ5LVxcdTAwM2VlX2hhc2gpLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmVhX2lub2RlKTtcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbi1cXHRcXHRlcnIgPSBleHQ0X2V4cGFuZF9pbm9kZV9hcnJheShlYV9pbm9kZV9hcnJheSwgZWFfaW5vZGUpO1xcbi1cXHRcXHRpZiAoZXJyKSB7XFxuLVxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG4tXFx0XFx0XFx0XFx0XFx0ICAgXFxcIkV4cGFuZCBpbm9kZSBhcnJheSBlcnI9JWRcXFwiLCBlcnIpO1xcbi1cXHRcXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4tXFx0XFx0XFx0Y29udGludWU7XFxuLVxcdFxcdH1cXG4tXFxuIFxcdFxcdGVyciA9IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0c19mbihoYW5kbGUsIGNyZWRpdHMsIGNyZWRpdHMsXFxuIFxcdFxcdFxcdGV4dDRfZnJlZV9tZXRhZGF0YV9yZXZva2VfY3JlZGl0cyhwYXJlbnQtXFx1MDAzZWlfc2IsIDEpLFxcbiBcXHRcXHRcXHRleHQ0X3hhdHRyX3Jlc3RhcnRfZm4oaGFuZGxlLCBwYXJlbnQsIGJoLCBibG9ja19jc3VtLFxcbkBAIC0xMjEyLDYgKzEyMzcsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMCkge1xcbiBcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFxcXCJFbnN1cmUgY3JlZGl0cyBlcnI9JWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHQgICBlcnIpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdH1cXG4gXFx0XFx0aWYgKGVyciBcXHUwMDNlIDApIHtcXG5AQCAtMTIyMSw2ICsxMjQ3LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXFwiUmUtZ2V0IHdyaXRlIGFjY2VzcyBlcnI9JWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRlcnIpO1xcbitcXHRcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbkBAIC0xMjI5LDYgKzEyNTYsMTIgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0aWYgKGVycikge1xcbiBcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFxcXCJlYV9pbm9kZSBkZWMgcmVmIGVycj0lZFxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdCAgIGVycik7XFxuK1xcdFxcdFxcdC8qIFRyYWNrIGlmIG5saW5rPT0wIHRvIHNraXAgZHVwbGljYXRlcyAoZXZpY3Rpb24gcmlzaykgKi9cXG4rXFx0XFx0XFx0aWYgKCFlYV9pbm9kZS1cXHUwMDNlaV9ubGluaylcXG4rXFx0XFx0XFx0XFx0ZWFfaW5vX2FycmF5X2FkZChcXHUwMDI2ZWFfaW5vcywgXFx1MDAyNm5yX2VhX2lub3MsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCBcXHUwMDI2ZWFfaW5vc19zaXplLCBlYV9pbm9zX2lubGluZSwgZWFfaW5vKTtcXG4rXFxuK1xcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMTI0NSw5ICsxMjc4LDIyIEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuIFxcdFxcdGVudHJ5LVxcdTAwM2VlX3ZhbHVlX2ludW0gPSAwO1xcbiBcXHRcXHRlbnRyeS1cXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcXG4gXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFRyYWNrIG5saW5rPT0wIEVBIGlub2RlcyB0byBza2lwIGR1cGxpY2F0ZXMgbGF0ZXIgLS1cXG4rXFx0XFx0ICogdGhleSByaXNrIElfRlJFRUlORyBkZWFkbG9jayBvbiByZS1pZ2V0LlxcbitcXHRcXHQgKiBDaGVjayBubGluayBiZWZvcmUgcHV0IHNpbmNlIHB1dCByZWxlYXNlcyBvdXIgcmVmZXJlbmNlLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKCFlYV9pbm9kZS1cXHUwMDNlaV9ubGluaylcXG4rXFx0XFx0XFx0ZWFfaW5vX2FycmF5X2FkZChcXHUwMDI2ZWFfaW5vcywgXFx1MDAyNm5yX2VhX2lub3MsXFxuK1xcdFxcdFxcdFxcdFxcdCBcXHUwMDI2ZWFfaW5vc19zaXplLCBlYV9pbm9zX2lubGluZSwgZWFfaW5vKTtcXG4rXFxuK1xcdFxcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbiBcXHRcXHRkaXJ0eSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuK1xcdGlmIChlYV9pbm9zICE9IGVhX2lub3NfaW5saW5lKVxcbitcXHRcXHRrZnJlZShlYV9pbm9zKTtcXG4rXFxuIFxcdGlmIChkaXJ0eSkge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBOb3RlIHRoYXQgd2UgYXJlIGRlbGliZXJhdGVseSBza2lwcGluZyBjc3VtIGNhbGN1bGF0aW9uIGZvclxcbkBAIC0xMjcxLDcgKzEzMTcsNiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBzdGF0aWMgdm9pZFxcbiBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXFxuLVxcdFxcdFxcdCBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxcbiBcXHRcXHRcXHQgaW50IGV4dHJhX2NyZWRpdHMpXFxuIHtcXG4gXFx0c3RydWN0IG1iX2NhY2hlICplYV9ibG9ja19jYWNoZSA9IEVBX0JMT0NLX0NBQ0hFKGlub2RlKTtcXG5AQCAtMTMxMyw3ICsxMzU4LDYgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgYmgsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgQkZJUlNUKGJoKSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0cnVlIC8qIGJsb2NrX2NzdW0gKi8sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZWFfaW5vZGVfYXJyYXksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXh0cmFfY3JlZGl0cyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICB0cnVlIC8qIHNraXBfcXVvdGEgKi8pO1xcbiBcXHRcXHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGJoLCAwLCAxLFxcbkBAIC0xNTA1LDcgKzE1NDksNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxcbiBcXHRcXHRcXHRpZiAoZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpKVxcbiBcXHRcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcXCJjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcXFwiLCBlcnIpO1xcbi1cXHRcXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMTU2NCw3ICsxNjA4LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLFxcbiBcXHRcXHRcXHRrdmZyZWUoZWFfZGF0YSk7XFxuIFxcdFxcdFxcdHJldHVybiBlYV9pbm9kZTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0bmV4dF9lbnRyeTpcXG4gXFx0XFx0Y2UgPSBtYl9jYWNoZV9lbnRyeV9maW5kX25leHQoZWFfaW5vZGVfY2FjaGUsIGNlKTtcXG4gXFx0fVxcbkBAIC0xNjE1LDcgKzE2NTksNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgZWFfaW5vZGUtXFx1MDAzZWlfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTtcXG4gXFx0cmV0dXJuIGVhX2lub2RlO1xcbiBvdXRfZXJyOlxcbi1cXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBOVUxMLCB2YWx1ZV9sZW4pO1xcbiBcXHRyZXR1cm4gRVJSX1BUUihlcnIpO1xcbiB9XFxuQEAgLTE4NDgsNyArMTg5Miw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSxcXG4gXFxuIFxcdHJldCA9IDA7XFxuIG91dDpcXG4tXFx0aXB1dChvbGRfZWFfaW5vZGUpO1xcbitcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgb2xkX2VhX2lub2RlKTtcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG5AQCAtMjAxMCw3ICsyMDU0LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0XFx0b2xkX2VhX2lub2RlX3F1b3RhID0gbGUzMl90b19jcHUoXFxuIFxcdFxcdFxcdFxcdFxcdFxcdHMtXFx1MDAzZWhlcmUtXFx1MDAzZWVfdmFsdWVfc2l6ZSk7XFxuIFxcdFxcdFxcdH1cXG4tXFx0XFx0XFx0aXB1dCh0bXBfaW5vZGUpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgdG1wX2lub2RlKTtcXG4gXFxuIFxcdFxcdFxcdHMtXFx1MDAzZWhlcmUtXFx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XFxuIFxcdFxcdFxcdHMtXFx1MDAzZWhlcmUtXFx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XFxuQEAgLTIxNTAsNyArMjE5NCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcImRlYyByZWYgZXJyb3I9JWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBlcnJvcik7XFxuLVxcdFxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xcbiBcXHRcXHRcXHRcXHRlYV9pbm9kZSA9IE5VTEw7XFxuIFxcdFxcdFxcdH1cXG4gXFxuQEAgLTIxODIsMTIgKzIyMjYsOCBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXG4gXFx0LyogRHJvcCB0aGUgcHJldmlvdXMgeGF0dHIgYmxvY2suICovXFxuIFxcdGlmIChicy1cXHUwMDNlYmggXFx1MDAyNlxcdTAwMjYgYnMtXFx1MDAzZWJoICE9IG5ld19iaCkge1xcbi1cXHRcXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xcbi1cXG4gXFx0XFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJzLVxcdTAwM2ViaCxcXG4tXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZlYV9pbm9kZV9hcnJheSxcXG4gXFx0XFx0XFx0XFx0XFx0IDAgLyogZXh0cmFfY3JlZGl0cyAqLyk7XFxuLVxcdFxcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XFxuIFxcdH1cXG4gXFx0ZXJyb3IgPSAwO1xcbiBcXG5AQCAtMjIwMyw3ICsyMjQzLDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XFxuIFxcdFxcdH1cXG4tXFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdH1cXG4gXFx0aWYgKGNlKVxcbiBcXHRcXHRtYl9jYWNoZV9lbnRyeV9wdXQoZWFfYmxvY2tfY2FjaGUsIGNlKTtcXG5AQCAtMjI4NSw3ICsyMzI1LDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcbiBcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcXG4tXFx0XFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXHR9XFxuQEAgLTIyOTcsNyArMjMzNyw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRoZWFkZXItXFx1MDAzZWhfbWFnaWMgPSBjcHVfdG9fbGUzMigwKTtcXG4gXFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUik7XFxuIFxcdH1cXG4tXFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVxcdTAwM2VpX3NiLCBlYV9pbm9kZSk7XFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIFxcbkBAIC0yODYzLDQ2ICsyOTAzLDYgQEAgaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXFxuIFxcdHJldHVybiBlcnJvcjtcXG4gfVxcbiBcXG4tI2RlZmluZSBFSUFfSU5DUiAxNiAvKiBtdXN0IGJlIDJebiAqL1xcbi0jZGVmaW5lIEVJQV9NQVNLIChFSUFfSU5DUiAtIDEpXFxuLVxcbi0vKiBBZGQgdGhlIGxhcmdlIHhhdHRyIEBpbm9kZSBpbnRvIEBlYV9pbm9kZV9hcnJheSBmb3IgZGVmZXJyZWQgaXB1dCgpLlxcbi0gKiBJZiBAZWFfaW5vZGVfYXJyYXkgaXMgbmV3IG9yIGZ1bGwgaXQgd2lsbCBiZSBncm93biBhbmQgdGhlIG9sZFxcbi0gKiBjb250ZW50cyBjb3BpZWQgb3Zlci5cXG4tICovXFxuLXN0YXRpYyBpbnRcXG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcXG4tXFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSlcXG4te1xcbi1cXHRpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpIHtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogU3RhcnQgd2l0aCAxNSBpbm9kZXMsIHNvIGl0IGZpdHMgaW50byBhIHBvd2VyLW9mLXR3byBzaXplLlxcbi1cXHRcXHQgKi9cXG4tXFx0XFx0KCplYV9pbm9kZV9hcnJheSkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxcbi1cXHRcXHRcXHRcXHRcXHRcXHQgRUlBX01BU0ssIEdGUF9OT0ZTKTtcXG4tXFx0XFx0aWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0XFx0KCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWNvdW50ID0gMDtcXG4tXFx0fSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWNvdW50IFxcdTAwMjYgRUlBX01BU0spID09IEVJQV9NQVNLKSB7XFxuLVxcdFxcdC8qIGV4cGFuZCB0aGUgYXJyYXkgb25jZSBhbGwgMTUgKyBuICogMTYgc2xvdHMgYXJlIGZ1bGwgKi9cXG4tXFx0XFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKm5ld19hcnJheSA9IE5VTEw7XFxuLVxcbi1cXHRcXHRuZXdfYXJyYXkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxcbi1cXHRcXHRcXHRcXHRcXHQgKCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWNvdW50ICsgRUlBX0lOQ1IsXFxuLVxcdFxcdFxcdFxcdFxcdCBHRlBfTk9GUyk7XFxuLVxcdFxcdGlmIChuZXdfYXJyYXkgPT0gTlVMTClcXG4tXFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuLVxcdFxcdG1lbWNweShuZXdfYXJyYXksICplYV9pbm9kZV9hcnJheSxcXG4tXFx0XFx0ICAgICAgIHN0cnVjdF9zaXplKCplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxcbi1cXHRcXHRcXHRcXHQgICAoKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlY291bnQpKTtcXG4tXFx0XFx0a2ZyZWUoKmVhX2lub2RlX2FycmF5KTtcXG4tXFx0XFx0KmVhX2lub2RlX2FycmF5ID0gbmV3X2FycmF5O1xcbi1cXHR9XFxuLVxcdCgqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCsrO1xcbi1cXHQoKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlaW5vZGVzWygqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCAtIDFdID0gaW5vZGU7XFxuLVxcdHJldHVybiAwO1xcbi19XFxuLVxcbiAvKlxcbiAgKiBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSgpXFxuICAqXFxuQEAgLTI5MTMsNyArMjkxMyw2IEBAIGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXFxuICAqIHJlZmVyZW5jZXMgb24geGF0dHIgYmxvY2sgYW5kIHhhdHRyIGlub2Rlcy5cXG4gICovXFxuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHRcXHRcXHQgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcXG4gXFx0XFx0XFx0ICAgIGludCBleHRyYV9jcmVkaXRzKVxcbiB7XFxuIFxcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xcbkBAIC0yOTUyLDcgKzI5NTEsNiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBpbG9jLmJoLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIElGSVJTVChoZWFkZXIpLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGZhbHNlIC8qIGJsb2NrX2NzdW0gKi8sXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZWFfaW5vZGVfYXJyYXksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZXh0cmFfY3JlZGl0cyxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBmYWxzZSAvKiBza2lwX3F1b3RhICovKTtcXG4gXFx0fVxcbkBAIC0yOTg2LDEyICsyOTg0LDEyIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0XFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgbGUzMl90b19jcHUoZW50cnktXFx1MDAzZWVfdmFsdWVfc2l6ZSkpO1xcbi1cXHRcXHRcXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXFx1MDAzZWlfc2IsIGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0fVxcbiBcXG4gXFx0XFx0fVxcbiBcXG4tXFx0XFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLCBlYV9pbm9kZV9hcnJheSxcXG4rXFx0XFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxcbiBcXHRcXHRcXHRcXHRcXHQgZXh0cmFfY3JlZGl0cyk7XFxuIFxcdFxcdC8qXFxuIFxcdFxcdCAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXNcXG5AQCAtMzAxMywxNiArMzAxMSw2MyBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0cmV0dXJuIGVycm9yO1xcbiB9XFxuIFxcbi12b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkpXFxuKy8qXFxuKyAqIFdvcmtlciBmdW5jdGlvbiBmb3IgZGVmZXJyZWQgRUEgaW5vZGUgaXB1dC4gIFByb2Nlc3NlcyBhbGwgaW5vZGVzIHF1ZXVlZFxcbisgKiBvbiBzX2VhX2lub2RlX3RvX2ZyZWUgaW4gYSBjb250ZXh0IGZyZWUgb2YgeGF0dHJfc2VtL2piZDIgaGFuZGxlIGxvY2tzLlxcbisgKi9cXG4rc3RhdGljIHZvaWQgZXh0NF9lYV9pbm9kZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcXG4ge1xcbi1cXHRpbnQgaWR4O1xcbitcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRzX2VhX2lub2RlX3dvcmspO1xcbitcXHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSA9IGxsaXN0X2RlbF9hbGwoXFx1MDAyNnNiaS1cXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcXG4gXFxuLVxcdGlmIChlYV9pbm9kZV9hcnJheSA9PSBOVUxMKVxcbitcXHR3aGlsZSAobm9kZSkge1xcbitcXHRcXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGNvbnRhaW5lcl9vZihub2RlLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvLCBpX2VhX2lwdXRfbm9kZSk7XFxuK1xcdFxcdG5vZGUgPSBub2RlLVxcdTAwM2VuZXh0O1xcbitcXHRcXHRpcHV0KFxcdTAwMjZlaS1cXHUwMDNldmZzX2lub2RlKTtcXG4rXFx0fVxcbit9XFxuK1xcbisvKlxcbisgKiBSZWxlYXNlIGEgVkZTIHJlZmVyZW5jZSBvbiBhbiBFQSBpbm9kZS4gIE11c3QgYmUgdXNlZCBpbnN0ZWFkIG9mIGlwdXQoKVxcbisgKiBpbiBhbnkgY29udGV4dCB3aGVyZSB4YXR0cl9zZW0gb3IgYSBqYmQyIGhhbmRsZSBpcyBoZWxkLlxcbisgKlxcbisgKiBJZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCByZWZlcmVuY2UsIGRyb3BzIGl0IGltbWVkaWF0ZWx5IHZpYVxcbisgKiBpcHV0X2lmX25vdF9sYXN0KCkgd2l0aCBubyBmdXJ0aGVyIGFjdGlvbiBuZWVkZWQuXFxuKyAqXFxuKyAqIElmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLCB0aGUgaW5vZGUgaXMgbGlua2VkIG9udG8gYSBwZXItc2JcXG4rICogbGxpc3QgdmlhIGlfZWFfaXB1dF9ub2RlIChlbWJlZGRlZCBpbiBleHQ0X2lub2RlX2luZm8sIHNoYXJpbmcgc3BhY2VcXG4rICogd2l0aCB0aGUgdW51c2VkIHhhdHRyX3NlbSkgYW5kIGEgZGVsYXllZCB3b3JrZXIgcGVyZm9ybXMgdGhlIGZpbmFsXFxuKyAqIGlwdXQoKSBpbiBhIGNsZWFuIGNvbnRleHQuXFxuKyAqXFxuKyAqIE5vdGU6IHdoaWxlIGFuIGlub2RlIGlzIG9uIHNfZWFfaW5vZGVfdG9fZnJlZSwgdGhlIHVuY29uc3VtZWQgaV9jb3VudFxcbisgKiByZWZlcmVuY2UgKHN0aWxsIDEpIGtlZXBzIGl0IGluIHRoZSBpbm9kZSBjYWNoZSwgc28gYW55IGNvbmN1cnJlbnRcXG4rICogaWdldCgpIGJ1bXBzIGlfY291bnQgdG8gXFx1MDAzZT0gMiBhbmQgaXB1dF9pZl9ub3RfbGFzdCgpIHdpbGwgc3VjY2VlZC5cXG4rICogTm9ib2R5IHdpbGwgYWRkIHRoZSBpbm9kZSBhIHNlY29uZCB0aW1lIHVudGlsIGV4dDRfZWFfaW5vZGVfd29yaygpXFxuKyAqIGRyb3BzIHRoYXQgcmVmZXJlbmNlIHZpYSBpcHV0KCkuXFxuKyAqL1xcbit2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0aWYgKCFpbm9kZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXHRXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpO1xcbitcXHRpZiAoaXB1dF9pZl9ub3RfbGFzdChpbm9kZSkpXFxuIFxcdFxcdHJldHVybjtcXG4rXFx0bGxpc3RfYWRkKFxcdTAwMjZFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2VhX2lwdXRfbm9kZSxcXG4rXFx0XFx0ICBcXHUwMDI2RVhUNF9TQihzYiktXFx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XFxuK1xcdC8qXFxuK1xcdCAqIFVzZSBhIHNob3J0IGRlbGF5IHRvIGFsbG93IG11bHRpcGxlIEVBIGlub2RlcyB0byBhY2N1bXVsYXRlLFxcbitcXHQgKiByZWR1Y2luZyB3b3JrcXVldWUgd2FrZXVwcyB3aGVuIHNldmVyYWwgYXJlIHJlbGVhc2VkIHRvZ2V0aGVyLlxcbitcXHQgKi9cXG4rXFx0c2NoZWR1bGVfZGVsYXllZF93b3JrKFxcdTAwMjZFWFQ0X1NCKHNiKS1cXHUwMDNlc19lYV9pbm9kZV93b3JrLCAxKTtcXG4rfVxcbiBcXG4tXFx0Zm9yIChpZHggPSAwOyBpZHggXFx1MDAzYyBlYV9pbm9kZV9hcnJheS1cXHUwMDNlY291bnQ7ICsraWR4KVxcbi1cXHRcXHRpcHV0KGVhX2lub2RlX2FycmF5LVxcdTAwM2Vpbm9kZXNbaWR4XSk7XFxuLVxcdGtmcmVlKGVhX2lub2RlX2FycmF5KTtcXG4rdm9pZCBleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXFxuK3tcXG4rXFx0aW5pdF9sbGlzdF9oZWFkKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XFxuK1xcdElOSVRfREVMQVlFRF9XT1JLKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfd29yaywgZXh0NF9lYV9pbm9kZV93b3JrKTtcXG4gfVxcbiBcXG4gLypcXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5oIGIvZnMvZXh0NC94YXR0ci5oXFxuaW5kZXggMWZlZGY0NGQ0ZmI2NWUuLjUxOGYwMjgzZTE3NDQ0IDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQveGF0dHIuaFxcbisrKyBiL2ZzL2V4dDQveGF0dHIuaFxcbkBAIC0xMzEsMTEgKzEzMSw2IEBAIHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQge1xcbiBcXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XFxuIH07XFxuIFxcbi1zdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSB7XFxuLVxcdHVuc2lnbmVkIGludCBjb3VudDtcXG4tXFx0c3RydWN0IGlub2RlICppbm9kZXNbXSBfX2NvdW50ZWRfYnkoY291bnQpO1xcbi19O1xcbi1cXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXI7XFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXI7XFxuQEAgLTE4Nyw5ICsxODIsOSBAQCBleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRcXHRib29sIGlzX2NyZWF0ZSk7XFxuIFxcbiBleHRlcm4gaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqYXJyYXksXFxuIFxcdFxcdFxcdFxcdCAgIGludCBleHRyYV9jcmVkaXRzKTtcXG4tZXh0ZXJuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICphcnJheSk7XFxuK2V4dGVybiB2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSk7XFxuK2V4dGVybiB2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xcbiBcXG4gZXh0ZXJuIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxcbiBcXHRcXHRcXHQgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSk7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaFxcbmluZGV4IGQxMDg5N2IzYTFlMzUwLi4wNGYwZGU3OGZhN2E4NSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcXG5AQCAtMjQxMyw2ICsyNDEzLDE5IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBzdXBlcl9zZXRfc3lzZnNfbmFtZV9nZW5lcmljKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIGNvbnN0IGNoXFxuIGV4dGVybiB2b2lkIGlob2xkKHN0cnVjdCBpbm9kZSAqIGlub2RlKTtcXG4gZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7XFxuIHZvaWQgaXB1dF9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKik7XFxuK1xcbisvKipcXG4rICogaXB1dF9pZl9ub3RfbGFzdCAtIGRyb3AgYW4gaW5vZGUgcmVmZXJlbmNlIG9ubHkgaWYgaXQgaXMgbm90IHRoZSBsYXN0IG9uZVxcbisgKiBAaW5vZGU6IGlub2RlIHRvIHB1dFxcbisgKlxcbisgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHJlZmVyZW5jZSB3YXMgZHJvcHBlZCwgZmFsc2UgaWYgdGhpcyB3YXMgdGhlIGxhc3RcXG4rICogcmVmZXJlbmNlIGFuZCB0aGUgY2FsbGVyIG11c3QgYXJyYW5nZSBmb3IgZmluYWwgaXB1dCgpIGluIGEgc2FmZSBjb250ZXh0LlxcbisgKi9cXG4rc3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBpcHV0X2lmX25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuK3tcXG4rXFx0cmV0dXJuIGF0b21pY19hZGRfdW5sZXNzKFxcdTAwMjZpbm9kZS1cXHUwMDNlaV9jb3VudCwgLTEsIDEpO1xcbit9XFxuK1xcbiBpbnQgaW5vZGVfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLFxcbiBcXHRcXHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xcbiBpbnQgZ2VuZXJpY191cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjI4OjI2Ljk1NzYzMjkzMVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ3NzcwODA4ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbFwiLFxuICAgIFwiZXh0NF94YXR0cl9kZWxldGVfaW5vZGVcIixcbiAgICBcImV4dDRfZWFfaW5vZGVfd29ya1wiLFxuICAgIFwiZXh0NF9wdXRfZWFfaW5vZGVcIixcbiAgICBcImV4dDRfeGF0dHJfYmxvY2tfc2V0XCIsXG4gICAgXCJleHQ0X3hhdHRyX2lib2R5X3NldFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBkZWZlcnJlZCBpcHV0IG1lY2hhbmlzbSBmb3IgZXh0NCBFQSAoRXh0ZW5kZWQgQXR0cmlidXRlKSBpbm9kZXMgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMgYW5kIGRlYWRsb2Nrcy4gSXQgbW9kaWZpZXMgY29yZSBleHQ0IHhhdHRyIGhhbmRsaW5nIGFuZCBpbm9kZSBldmljdGlvbiBwYXRocywgd2hpY2ggYXJlIHJlYWNoYWJsZSBhbmQgZnVuY3Rpb25hbC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA1ZjJmNWU1ZjQxNzA1OTIwMGI4NjA0Y2VhNGI1YzQzZTg2YWU2YzhhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTE6Mjg6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXG5pbmRleCBiMzdjMTM2ZWEzYWIzMy4uYjliMGFkYTc3NzRiYjQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dDQuaFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcbkBAIC0xMDcwLDggKzEwNzAsMTQgQEAgc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XG4gXHQgKiBiZXR3ZWVuIHJlYWRlcnMgb2YgRUFzIGFuZCB3cml0ZXJzIG9mIHJlZ3VsYXIgZmlsZSBkYXRhLCBzb1xuIFx0ICogaW5zdGVhZCB3ZSBzeW5jaHJvbml6ZSBvbiB4YXR0cl9zZW0gd2hlbiByZWFkaW5nIG9yIGNoYW5naW5nXG4gXHQgKiBFQXMuXG4rXHQgKlxuK1x0ICogRUEgaW5vZGVzIChFWFQ0X0VBX0lOT0RFX0ZMKSBkbyBub3QgdXNlIHhhdHRyX3NlbTsgdGhleSByZXVzZVxuK1x0ICogdGhlIHNwYWNlIGZvciBkZWZlcnJlZCBpcHV0IGxpbmthZ2UuXG4gXHQgKi9cbi1cdHN0cnVjdCByd19zZW1hcGhvcmUgeGF0dHJfc2VtO1xuK1x0dW5pb24ge1xuK1x0XHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcbitcdFx0c3RydWN0IGxsaXN0X25vZGUgaV9lYV9pcHV0X25vZGU7XG4rXHR9O1xuIFxuIFx0LypcbiBcdCAqIElub2RlcyB3aXRoIEVYVDRfU1RBVEVfT1JQSEFOX0ZJTEUgdXNlIGlfb3JwaGFuX2lkeC4gT3RoZXJ3aXNlXG5AQCAtMTc3MCw2ICsxNzc2LDExIEBAIHN0cnVjdCBleHQ0X3NiX2luZm8ge1xuIFx0c3RydWN0IGV4dDRfZXNfc3RhdHMgc19lc19zdGF0cztcbiBcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9ibG9ja19jYWNoZTtcbiBcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9pbm9kZV9jYWNoZTtcbitcbitcdC8qIERlZmVycmVkIGlwdXQgZm9yIEVBIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyAqL1xuK1x0c3RydWN0IGxsaXN0X2hlYWQgc19lYV9pbm9kZV90b19mcmVlO1xuK1x0c3RydWN0IGRlbGF5ZWRfd29yayBzX2VhX2lub2RlX3dvcms7XG4rXG4gXHRzcGlubG9ja190IHNfZXNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuIFxuIFx0LyogSm91cm5hbCB0cmlnZ2VycyBmb3IgY2hlY2tzdW0gY29tcHV0YXRpb24gKi9cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi43NDdjNTJjMjMyY2MwMyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtMTc2LDcgKzE3Niw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0ICogKHhhdHRyIGJsb2NrIGZyZWVpbmcpLCBiaXRtYXAsIGdyb3VwIGRlc2NyaXB0b3IgKGlub2RlIGZyZWVpbmcpXG4gXHQgKi9cbiBcdGludCBleHRyYV9jcmVkaXRzID0gNjtcbi1cdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7XG4gXHRib29sIGZyZWV6ZV9wcm90ZWN0ZWQgPSBmYWxzZTtcbiBcbiBcdHRyYWNlX2V4dDRfZXZpY3RfaW5vZGUoaW5vZGUpO1xuQEAgLTI4MSw4ICsyODAsNyBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdH1cbiBcbiBcdC8qIFJlbW92ZSB4YXR0ciByZWZlcmVuY2VzLiAqL1xuLVx0ZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgXHUwMDI2ZWFfaW5vZGVfYXJyYXksXG4tXHRcdFx0XHQgICAgICBleHRyYV9jcmVkaXRzKTtcbitcdGVyciA9IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUsIGV4dHJhX2NyZWRpdHMpO1xuIFx0aWYgKGVycikge1xuIFx0XHRleHQ0X3dhcm5pbmcoaW5vZGUtXHUwMDNlaV9zYiwgXCJ4YXR0ciBkZWxldGUgKGVyciAlZClcIiwgZXJyKTtcbiBzdG9wX2hhbmRsZTpcbkBAIC0yOTAsNyArMjg4LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdGV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7XG4gXHRcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxuIFx0XHRcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiBcdFx0Z290byBub19kZWxldGU7XG4gXHR9XG4gXG5AQCAtMzIwLDcgKzMxNyw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbiBcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxuIFx0XHRzYl9lbmRfaW50d3JpdGUoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0cmV0dXJuO1xuIG5vX2RlbGV0ZTpcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXG5pbmRleCAyNDVmNjdkMTBkZWQzNC4uM2VmYTVhODE3YmVmNGYgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcbisrKyBiL2ZzL2V4dDQvc3VwZXIuY1xuQEAgLTEzMDMsNiArMTMwMyw4IEBAIHN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRcdFx0IFx1MDAyNnNiLVx1MDAzZXNfdXVpZCk7XG4gXG4gXHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XG4rXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyB3aGlsZSBxdW90YSBpcyBzdGlsbCBhY3RpdmUuICovXG4rXHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yayk7XG4gXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcbiBcbiBcdGRlc3Ryb3lfd29ya3F1ZXVlKHNiaS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG5AQCAtMTQyMyw2ICsxNDI1LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdG1lbXNldChcdTAwMjZlaS1cdTAwM2VpX2RxdW90LCAwLCBzaXplb2YoZWktXHUwMDNlaV9kcXVvdCkpO1xuICNlbmRpZlxuIFx0ZWktXHUwMDNlamlub2RlID0gTlVMTDtcbitcdC8qXG4rXHQgKiBSZWluaXRpYWxpemUgeGF0dHJfc2VtIGV2ZXJ5IGFsbG9jYXRpb24gYmVjYXVzZSBFQSBpbm9kZXNcbitcdCAqIHNoYXJlIHRoaXMgc3BhY2Ugd2l0aCBpX2VhX2lwdXRfbm9kZSAodmlhIHVuaW9uKSB3aGljaCBtYXlcbitcdCAqIGhhdmUgb3ZlcndyaXR0ZW4gdGhlIHNlbWFwaG9yZSB3aGVuIHRoZSBzbGFiIG9iamVjdCB3YXNcbitcdCAqIHByZXZpb3VzbHkgdXNlZCBhcyBhbiBFQSBpbm9kZS5cbitcdCAqL1xuK1x0aW5pdF9yd3NlbShcdTAwMjZlaS1cdTAwM2V4YXR0cl9zZW0pO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZWktXHUwMDNlaV9yc3ZfY29udmVyc2lvbl9saXN0KTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmVpLVx1MDAzZWlfY29tcGxldGVkX2lvX2xvY2spO1xuIFx0ZWktXHUwMDNlaV9zeW5jX3RpZCA9IDA7XG5AQCAtMTQ4OCw3ICsxNDk3LDYgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcbiBcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gZm9vO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZWktXHUwMDNlaV9vcnBoYW4pO1xuLVx0aW5pdF9yd3NlbShcdTAwMjZlaS1cdTAwM2V4YXR0cl9zZW0pO1xuIFx0aW5pdF9yd3NlbShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbiBcdGlub2RlX2luaXRfb25jZShcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUpO1xuIFx0ZXh0NF9mY19pbml0X2lub2RlKFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG5AQCAtNTQ5Nyw2ICs1NTA1LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRcdFx0ICBleHQ0X2hhc19mZWF0dXJlX29ycGhhbl9wcmVzZW50KHNiKSB8fFxuIFx0XHRcdCAgZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsX25lZWRzX3JlY292ZXJ5KHNiKSk7XG4gXG4rXHRleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzYmkpO1xuK1xuIFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfbW1wKHNiKSBcdTAwMjZcdTAwMjYgIXNiX3Jkb25seShzYikpIHtcbiBcdFx0ZXJyID0gZXh0NF9tdWx0aV9tb3VudF9wcm90ZWN0KHNiLCBsZTY0X3RvX2NwdShlcy1cdTAwM2VzX21tcF9ibG9jaykpO1xuIFx0XHRpZiAoZXJyKVxuQEAgLTU3NDcsNiArNTc1Nyw4IEBAIHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0cmV0dXJuIDA7XG4gXG4gZmFpbGVkX21vdW50OTpcbitcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBxdW90YSBzaHV0ZG93biAqL1xuK1x0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuIFx0ZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7XG4gZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBcdGV4dDRfcmVsZWFzZV9vcnBoYW5faW5mbyhzYik7XG5AQCAtNTc2Nyw2ICs1Nzc5LDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBcdGlmIChFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSlcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xuIGZhaWxlZF9tb3VudF93cTpcbitcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cbitcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcbiBcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XG4gXHRzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSA9IE5VTEw7XG4gXG5AQCAtNTc3Nyw2ICs1NzkxLDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBcdFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXHUwMDNlc19qb3VybmFsKTtcbiBcdH1cbiBmYWlsZWRfbW91bnQzYTpcbitcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGZyb20gam91cm5hbCByZXBsYXkgKi9cbitcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcbiBcdGV4dDRfZXNfdW5yZWdpc3Rlcl9zaHJpbmtlcihzYmkpO1xuIGZhaWxlZF9tb3VudDM6XG4gXHQvKiBmbHVzaCBzX3NiX3VwZF93b3JrIGJlZm9yZSBzYmkgZGVzdHJveSAqL1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xuaW5kZXggOTgyYTFmODMxZTIyODIuLjg1YWQyNTYxNDc0YjZlIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC94YXR0ci5jXG4rKysgYi9mcy9leHQ0L3hhdHRyLmNcbkBAIC0xMTQsMTAgKzExNCw2IEBAIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyc1tdID0ge1xuICNkZWZpbmUgRUFfSU5PREVfQ0FDSEUoaW5vZGUpXHQoKChzdHJ1Y3QgZXh0NF9zYl9pbmZvICopIFxcXG4gXHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZnNfaW5mbyktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSlcbiBcbi1zdGF0aWMgaW50XG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbi1cbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXG4ge1xuQEAgLTU2Nyw3ICs1NjMsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZW50cnksXG4gXHRcdFx0XHRcdGVhX2lub2RlLVx1MDAzZWlfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTtcbiBcdH1cbiBvdXQ6XG4tXHRpcHV0KGVhX2lub2RlKTtcbitcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTExMDQsMTAgKzExMDAsMTAgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX2luY19yZWYoaGFuZGxlLCBlYV9pbm9kZSk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwiaW5jIHJlZiBlcnJvciAlZFwiLCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdFx0Z290byBjbGVhbnVwO1xuIFx0XHR9XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0fVxuIFx0cmV0dXJuIDA7XG4gXG5AQCAtMTEzMyw3ICsxMTI5LDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCJjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcIixcbiBcdFx0XHRcdFx0ICAgZXJyKTtcbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHR9XG4gXHRyZXR1cm4gc2F2ZWRfZXJyO1xuIH1cbkBAIC0xMTU2LDExICsxMTUyLDI5IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9yZXN0YXJ0X2ZuKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm4gMDtcbiB9XG4gXG4rLyogVHJhY2sgYW4gRUEgaW5vZGUgbnVtYmVyIGluIHRoZSBkZWR1cCBhcnJheSwgZXhwYW5kaW5nIGlmIG5lZWRlZC4gKi9cbitzdGF0aWMgdm9pZCBlYV9pbm9fYXJyYXlfYWRkKHVuc2lnbmVkIGludCAqKmVhX2lub3MsIHVuc2lnbmVkIGludCAqbnIsXG4rXHRcdFx0ICAgICB1bnNpZ25lZCBpbnQgKnNpemUsIHVuc2lnbmVkIGludCAqaW5saW5lX2FycixcbitcdFx0XHQgICAgIHVuc2lnbmVkIGludCBpbm8pXG4re1xuK1x0aWYgKCpuciA9PSAqc2l6ZSkge1xuK1x0XHR1bnNpZ25lZCBpbnQgbmV3X3NpemUgPSAqc2l6ZSAqIDI7XG4rXHRcdHVuc2lnbmVkIGludCAqcDtcbitcbitcdFx0cCA9IGttYWxsb2NfYXJyYXkobmV3X3NpemUsIHNpemVvZigqcCksIEdGUF9OT0ZTIHwgX19HRlBfTk9GQUlMKTtcbitcdFx0bWVtY3B5KHAsICplYV9pbm9zLCAqbnIgKiBzaXplb2YoKnApKTtcbitcdFx0aWYgKCplYV9pbm9zICE9IGlubGluZV9hcnIpXG4rXHRcdFx0a2ZyZWUoKmVhX2lub3MpO1xuK1x0XHQqZWFfaW5vcyA9IHA7XG4rXHRcdCpzaXplID0gbmV3X3NpemU7XG4rXHR9XG4rXHQoKmVhX2lub3MpWygqbnIpKytdID0gaW5vO1xuK31cbitcbiBzdGF0aWMgdm9pZFxuIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuIFx0XHRcdCAgICAgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmZpcnN0LCBib29sIGJsb2NrX2NzdW0sXG4tXHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdCAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlO1xuQEAgLTExNzEsNiArMTE4NSwxMCBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0aW50IGVycjtcbiBcdGludCBjcmVkaXRzO1xuIFx0dm9pZCAqZW5kO1xuK1x0dW5zaWduZWQgaW50IGVhX2lub3NfaW5saW5lWzMyXTtcbitcdHVuc2lnbmVkIGludCAqZWFfaW5vcyA9IGVhX2lub3NfaW5saW5lO1xuK1x0dW5zaWduZWQgaW50IG5yX2VhX2lub3MgPSAwO1xuK1x0dW5zaWduZWQgaW50IGVhX2lub3Nfc2l6ZSA9IEFSUkFZX1NJWkUoZWFfaW5vc19pbmxpbmUpO1xuIFxuIFx0aWYgKGJsb2NrX2NzdW0pXG4gXHRcdGVuZCA9ICh2b2lkICopYmgtXHUwMDNlYl9kYXRhICsgYmgtXHUwMDNlYl9zaXplO1xuQEAgLTExODgsMjMgKzEyMDYsMzAgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcbiBcdGZvciAoZW50cnkgPSBmaXJzdDsgKHZvaWQgKillbnRyeSBcdTAwM2MgZW5kIFx1MDAyNlx1MDAyNiAhSVNfTEFTVF9FTlRSWShlbnRyeSk7XG4gXHQgICAgIGVudHJ5ID0gRVhUNF9YQVRUUl9ORVhUKGVudHJ5KSkge1xuK1x0XHR1bnNpZ25lZCBpbnQgaTtcbitcbiBcdFx0aWYgKCFlbnRyeS1cdTAwM2VlX3ZhbHVlX2ludW0pXG4gXHRcdFx0Y29udGludWU7XG4gXHRcdGVhX2lubyA9IGxlMzJfdG9fY3B1KGVudHJ5LVx1MDAzZWVfdmFsdWVfaW51bSk7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIFNraXAgRUEgaW5vZGVzIHdlIGFscmVhZHkgcHJvY2Vzc2VkLiAgT24gYSBjb3JydXB0ZWQgZnMsXG4rXHRcdCAqIGR1cGxpY2F0ZSBlbnRyaWVzIG1heSBwb2ludCB0byB0aGUgc2FtZSBFQSBpbm9kZTsgd2l0aG91dFxuK1x0XHQgKiB0aGlzIGNoZWNrLCB0aGUgc2Vjb25kIGlnZXQgY291bGQgZGVhZGxvY2sgb24gSV9GUkVFSU5HXG4rXHRcdCAqIGlmIHRoZSBkZWZlcnJlZCB3b3JrZXIgYWxyZWFkeSBzdGFydGVkIGV2aWN0aW5nIGl0LlxuK1x0XHQgKi9cbitcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfZWFfaW5vczsgaSsrKVxuK1x0XHRcdGlmIChlYV9pbm9zW2ldID09IGVhX2lubylcbitcdFx0XHRcdGJyZWFrO1xuK1x0XHRpZiAoaSBcdTAwM2MgbnJfZWFfaW5vcylcbitcdFx0XHRjb250aW51ZTtcbitcbiBcdFx0ZXJyID0gZXh0NF94YXR0cl9pbm9kZV9pZ2V0KHBhcmVudCwgZWFfaW5vLFxuIFx0XHRcdFx0XHQgICAgbGUzMl90b19jcHUoZW50cnktXHUwMDNlZV9oYXNoKSxcbiBcdFx0XHRcdFx0ICAgIFx1MDAyNmVhX2lub2RlKTtcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRjb250aW51ZTtcbiBcbi1cdFx0ZXJyID0gZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoZWFfaW5vZGVfYXJyYXksIGVhX2lub2RlKTtcbi1cdFx0aWYgKGVycikge1xuLVx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbi1cdFx0XHRcdFx0ICAgXCJFeHBhbmQgaW5vZGUgYXJyYXkgZXJyPSVkXCIsIGVycik7XG4tXHRcdFx0aXB1dChlYV9pbm9kZSk7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cbiBcdFx0ZXJyID0gZXh0NF9qb3VybmFsX2Vuc3VyZV9jcmVkaXRzX2ZuKGhhbmRsZSwgY3JlZGl0cywgY3JlZGl0cyxcbiBcdFx0XHRleHQ0X2ZyZWVfbWV0YWRhdGFfcmV2b2tlX2NyZWRpdHMocGFyZW50LVx1MDAzZWlfc2IsIDEpLFxuIFx0XHRcdGV4dDRfeGF0dHJfcmVzdGFydF9mbihoYW5kbGUsIHBhcmVudCwgYmgsIGJsb2NrX2NzdW0sXG5AQCAtMTIxMiw2ICsxMjM3LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVyciBcdTAwM2MgMCkge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCJFbnN1cmUgY3JlZGl0cyBlcnI9JWRcIixcbiBcdFx0XHRcdFx0ICAgZXJyKTtcbitcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXHRcdGlmIChlcnIgXHUwMDNlIDApIHtcbkBAIC0xMjIxLDYgKzEyNDcsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdFwiUmUtZ2V0IHdyaXRlIGFjY2VzcyBlcnI9JWRcIixcbiBcdFx0XHRcdFx0XHRlcnIpO1xuK1x0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUocGFyZW50LVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiBcdFx0fVxuQEAgLTEyMjksNiArMTI1NiwxMiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRpZiAoZXJyKSB7XG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcImVhX2lub2RlIGRlYyByZWYgZXJyPSVkXCIsXG4gXHRcdFx0XHRcdCAgIGVycik7XG4rXHRcdFx0LyogVHJhY2sgaWYgbmxpbms9PTAgdG8gc2tpcCBkdXBsaWNhdGVzIChldmljdGlvbiByaXNrKSAqL1xuK1x0XHRcdGlmICghZWFfaW5vZGUtXHUwMDNlaV9ubGluaylcbitcdFx0XHRcdGVhX2lub19hcnJheV9hZGQoXHUwMDI2ZWFfaW5vcywgXHUwMDI2bnJfZWFfaW5vcyxcbitcdFx0XHRcdFx0XHQgXHUwMDI2ZWFfaW5vc19zaXplLCBlYV9pbm9zX2lubGluZSwgZWFfaW5vKTtcbitcbitcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShwYXJlbnQtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdGNvbnRpbnVlO1xuIFx0XHR9XG4gXG5AQCAtMTI0NSw5ICsxMjc4LDIyIEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGVudHJ5LVx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XG4gXHRcdGVudHJ5LVx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XG4gXG4rXHRcdC8qXG4rXHRcdCAqIFRyYWNrIG5saW5rPT0wIEVBIGlub2RlcyB0byBza2lwIGR1cGxpY2F0ZXMgbGF0ZXIgLS1cbitcdFx0ICogdGhleSByaXNrIElfRlJFRUlORyBkZWFkbG9jayBvbiByZS1pZ2V0LlxuK1x0XHQgKiBDaGVjayBubGluayBiZWZvcmUgcHV0IHNpbmNlIHB1dCByZWxlYXNlcyBvdXIgcmVmZXJlbmNlLlxuK1x0XHQgKi9cbitcdFx0aWYgKCFlYV9pbm9kZS1cdTAwM2VpX25saW5rKVxuK1x0XHRcdGVhX2lub19hcnJheV9hZGQoXHUwMDI2ZWFfaW5vcywgXHUwMDI2bnJfZWFfaW5vcyxcbitcdFx0XHRcdFx0IFx1MDAyNmVhX2lub3Nfc2l6ZSwgZWFfaW5vc19pbmxpbmUsIGVhX2lubyk7XG4rXG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRcdGRpcnR5ID0gdHJ1ZTtcbiBcdH1cbiBcbitcdGlmIChlYV9pbm9zICE9IGVhX2lub3NfaW5saW5lKVxuK1x0XHRrZnJlZShlYV9pbm9zKTtcbitcbiBcdGlmIChkaXJ0eSkge1xuIFx0XHQvKlxuIFx0XHQgKiBOb3RlIHRoYXQgd2UgYXJlIGRlbGliZXJhdGVseSBza2lwcGluZyBjc3VtIGNhbGN1bGF0aW9uIGZvclxuQEAgLTEyNzEsNyArMTMxNyw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gc3RhdGljIHZvaWRcbiBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi1cdFx0XHQgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiBcdFx0XHQgaW50IGV4dHJhX2NyZWRpdHMpXG4ge1xuIFx0c3RydWN0IG1iX2NhY2hlICplYV9ibG9ja19jYWNoZSA9IEVBX0JMT0NLX0NBQ0hFKGlub2RlKTtcbkBAIC0xMzEzLDcgKzEzNTgsNiBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHRcdCAgICAgQkZJUlNUKGJoKSxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7XG4gXHRcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgYmgsIDAsIDEsXG5AQCAtMTUwNSw3ICsxNTQ5LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRpZiAoZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpKVxuIFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcImNsZWFudXAgZGVjIHJlZiBlcnJvciAlZFwiLCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuIFx0XHR9XG4gXG5AQCAtMTU2NCw3ICsxNjA4LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLFxuIFx0XHRcdGt2ZnJlZShlYV9kYXRhKTtcbiBcdFx0XHRyZXR1cm4gZWFfaW5vZGU7XG4gXHRcdH1cbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdG5leHRfZW50cnk6XG4gXHRcdGNlID0gbWJfY2FjaGVfZW50cnlfZmluZF9uZXh0KGVhX2lub2RlX2NhY2hlLCBjZSk7XG4gXHR9XG5AQCAtMTYxNSw3ICsxNjU5LDcgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0XHQgICAgICBlYV9pbm9kZS1cdTAwM2VpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7XG4gXHRyZXR1cm4gZWFfaW5vZGU7XG4gb3V0X2Vycjpcbi1cdGlwdXQoZWFfaW5vZGUpO1xuK1x0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBOVUxMLCB2YWx1ZV9sZW4pO1xuIFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiB9XG5AQCAtMTg0OCw3ICsxODkyLDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxuIFxuIFx0cmV0ID0gMDtcbiBvdXQ6XG4tXHRpcHV0KG9sZF9lYV9pbm9kZSk7XG4rXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBvbGRfZWFfaW5vZGUpO1xuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG5AQCAtMjAxMCw3ICsyMDU0LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdG9sZF9lYV9pbm9kZV9xdW90YSA9IGxlMzJfdG9fY3B1KFxuIFx0XHRcdFx0XHRcdHMtXHUwMDNlaGVyZS1cdTAwM2VlX3ZhbHVlX3NpemUpO1xuIFx0XHRcdH1cbi1cdFx0XHRpcHV0KHRtcF9pbm9kZSk7XG4rXHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgdG1wX2lub2RlKTtcbiBcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9pbnVtID0gMDtcbiBcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9zaXplID0gMDtcbkBAIC0yMTUwLDcgKzIxOTQsNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFx0XHQgICBcImRlYyByZWYgZXJyb3I9JWRcIixcbiBcdFx0XHRcdFx0XHRcdCAgIGVycm9yKTtcbi1cdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0XHRcdFx0ZWFfaW5vZGUgPSBOVUxMO1xuIFx0XHRcdH1cbiBcbkBAIC0yMTgyLDEyICsyMjI2LDggQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBcdC8qIERyb3AgdGhlIHByZXZpb3VzIHhhdHRyIGJsb2NrLiAqL1xuIFx0aWYgKGJzLVx1MDAzZWJoIFx1MDAyNlx1MDAyNiBicy1cdTAwM2ViaCAhPSBuZXdfYmgpIHtcbi1cdFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcbi1cbiBcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJzLVx1MDAzZWJoLFxuLVx0XHRcdFx0XHQgXHUwMDI2ZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0XHRcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xuLVx0XHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0fVxuIFx0ZXJyb3IgPSAwO1xuIFxuQEAgLTIyMDMsNyArMjI0Myw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYiwgZWFfaW5vZGUpO1xuIFx0fVxuIFx0aWYgKGNlKVxuIFx0XHRtYl9jYWNoZV9lbnRyeV9wdXQoZWFfYmxvY2tfY2FjaGUsIGNlKTtcbkBAIC0yMjg1LDcgKzIzMjUsNyBAQCBpbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdCAgICBpX3NpemVfcmVhZChlYV9pbm9kZSkpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0fVxuIFx0XHRyZXR1cm4gZXJyb3I7XG4gXHR9XG5AQCAtMjI5Nyw3ICsyMzM3LDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdGhlYWRlci1cdTAwM2VoX21hZ2ljID0gY3B1X3RvX2xlMzIoMCk7XG4gXHRcdGV4dDRfY2xlYXJfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfWEFUVFIpO1xuIFx0fVxuLVx0aXB1dChlYV9pbm9kZSk7XG4rXHRleHQ0X3B1dF9lYV9pbm9kZShpbm9kZS1cdTAwM2VpX3NiLCBlYV9pbm9kZSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjg2Myw0NiArMjkwMyw2IEBAIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi0jZGVmaW5lIEVJQV9JTkNSIDE2IC8qIG11c3QgYmUgMl5uICovXG4tI2RlZmluZSBFSUFfTUFTSyAoRUlBX0lOQ1IgLSAxKVxuLVxuLS8qIEFkZCB0aGUgbGFyZ2UgeGF0dHIgQGlub2RlIGludG8gQGVhX2lub2RlX2FycmF5IGZvciBkZWZlcnJlZCBpcHV0KCkuXG4tICogSWYgQGVhX2lub2RlX2FycmF5IGlzIG5ldyBvciBmdWxsIGl0IHdpbGwgYmUgZ3Jvd24gYW5kIHRoZSBvbGRcbi0gKiBjb250ZW50cyBjb3BpZWQgb3Zlci5cbi0gKi9cbi1zdGF0aWMgaW50XG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLXtcbi1cdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkge1xuLVx0XHQvKlxuLVx0XHQgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuXG4tXHRcdCAqL1xuLVx0XHQoKmVhX2lub2RlX2FycmF5KSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXG4tXHRcdFx0XHRcdFx0IEVJQV9NQVNLLCBHRlBfTk9GUyk7XG4tXHRcdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgPSAwO1xuLVx0fSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgXHUwMDI2IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykge1xuLVx0XHQvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICsgbiAqIDE2IHNsb3RzIGFyZSBmdWxsICovXG4tXHRcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICpuZXdfYXJyYXkgPSBOVUxMO1xuLVxuLVx0XHRuZXdfYXJyYXkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxuLVx0XHRcdFx0XHQgKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgKyBFSUFfSU5DUixcbi1cdFx0XHRcdFx0IEdGUF9OT0ZTKTtcbi1cdFx0aWYgKG5ld19hcnJheSA9PSBOVUxMKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHRtZW1jcHkobmV3X2FycmF5LCAqZWFfaW5vZGVfYXJyYXksXG4tXHRcdCAgICAgICBzdHJ1Y3Rfc2l6ZSgqZWFfaW5vZGVfYXJyYXksIGlub2Rlcyxcbi1cdFx0XHRcdCAgICgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50KSk7XG4tXHRcdGtmcmVlKCplYV9pbm9kZV9hcnJheSk7XG4tXHRcdCplYV9pbm9kZV9hcnJheSA9IG5ld19hcnJheTtcbi1cdH1cbi1cdCgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50Kys7XG4tXHQoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vpbm9kZXNbKCplYV9pbm9kZV9hcnJheSktXHUwMDNlY291bnQgLSAxXSA9IGlub2RlO1xuLVx0cmV0dXJuIDA7XG4tfVxuLVxuIC8qXG4gICogZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoKVxuICAqXG5AQCAtMjkxMyw3ICsyOTEzLDYgQEAgZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiAgKiByZWZlcmVuY2VzIG9uIHhhdHRyIGJsb2NrIGFuZCB4YXR0ciBpbm9kZXMuXG4gICovXG4gaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0ICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0ICAgIGludCBleHRyYV9jcmVkaXRzKVxuIHtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xuQEAgLTI5NTIsNyArMjk1MSw2IEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlLCBpbm9kZSwgaWxvYy5iaCxcbiBcdFx0XHRcdFx0XHQgICAgIElGSVJTVChoZWFkZXIpLFxuIFx0XHRcdFx0XHRcdCAgICAgZmFsc2UgLyogYmxvY2tfY3N1bSAqLyxcbi1cdFx0XHRcdFx0XHQgICAgIGVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHRcdCAgICAgZXh0cmFfY3JlZGl0cyxcbiBcdFx0XHRcdFx0XHQgICAgIGZhbHNlIC8qIHNraXBfcXVvdGEgKi8pO1xuIFx0fVxuQEAgLTI5ODYsMTIgKzI5ODQsMTIgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0ICAgICAgbGUzMl90b19jcHUoZW50cnktXHUwMDNlZV92YWx1ZV9zaXplKSk7XG4tXHRcdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGlub2RlLVx1MDAzZWlfc2IsIGVhX2lub2RlKTtcbiBcdFx0XHR9XG4gXG4gXHRcdH1cbiBcbi1cdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLCBlYV9pbm9kZV9hcnJheSxcbitcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLFxuIFx0XHRcdFx0XHQgZXh0cmFfY3JlZGl0cyk7XG4gXHRcdC8qXG4gXHRcdCAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXNcbkBAIC0zMDEzLDE2ICszMDExLDYzIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0cmV0dXJuIGVycm9yO1xuIH1cbiBcbi12b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkpXG4rLypcbisgKiBXb3JrZXIgZnVuY3Rpb24gZm9yIGRlZmVycmVkIEVBIGlub2RlIGlwdXQuICBQcm9jZXNzZXMgYWxsIGlub2RlcyBxdWV1ZWRcbisgKiBvbiBzX2VhX2lub2RlX3RvX2ZyZWUgaW4gYSBjb250ZXh0IGZyZWUgb2YgeGF0dHJfc2VtL2piZDIgaGFuZGxlIGxvY2tzLlxuKyAqL1xuK3N0YXRpYyB2b2lkIGV4dDRfZWFfaW5vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4ge1xuLVx0aW50IGlkeDtcbitcdHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksXG4rXHRcdFx0XHRcdFx0c3RydWN0IGV4dDRfc2JfaW5mbyxcbitcdFx0XHRcdFx0XHRzX2VhX2lub2RlX3dvcmspO1xuK1x0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUgPSBsbGlzdF9kZWxfYWxsKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xuIFxuLVx0aWYgKGVhX2lub2RlX2FycmF5ID09IE5VTEwpXG4rXHR3aGlsZSAobm9kZSkge1xuK1x0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGNvbnRhaW5lcl9vZihub2RlLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvLCBpX2VhX2lwdXRfbm9kZSk7XG4rXHRcdG5vZGUgPSBub2RlLVx1MDAzZW5leHQ7XG4rXHRcdGlwdXQoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbitcdH1cbit9XG4rXG4rLypcbisgKiBSZWxlYXNlIGEgVkZTIHJlZmVyZW5jZSBvbiBhbiBFQSBpbm9kZS4gIE11c3QgYmUgdXNlZCBpbnN0ZWFkIG9mIGlwdXQoKVxuKyAqIGluIGFueSBjb250ZXh0IHdoZXJlIHhhdHRyX3NlbSBvciBhIGpiZDIgaGFuZGxlIGlzIGhlbGQuXG4rICpcbisgKiBJZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCByZWZlcmVuY2UsIGRyb3BzIGl0IGltbWVkaWF0ZWx5IHZpYVxuKyAqIGlwdXRfaWZfbm90X2xhc3QoKSB3aXRoIG5vIGZ1cnRoZXIgYWN0aW9uIG5lZWRlZC5cbisgKlxuKyAqIElmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLCB0aGUgaW5vZGUgaXMgbGlua2VkIG9udG8gYSBwZXItc2JcbisgKiBsbGlzdCB2aWEgaV9lYV9pcHV0X25vZGUgKGVtYmVkZGVkIGluIGV4dDRfaW5vZGVfaW5mbywgc2hhcmluZyBzcGFjZVxuKyAqIHdpdGggdGhlIHVudXNlZCB4YXR0cl9zZW0pIGFuZCBhIGRlbGF5ZWQgd29ya2VyIHBlcmZvcm1zIHRoZSBmaW5hbFxuKyAqIGlwdXQoKSBpbiBhIGNsZWFuIGNvbnRleHQuXG4rICpcbisgKiBOb3RlOiB3aGlsZSBhbiBpbm9kZSBpcyBvbiBzX2VhX2lub2RlX3RvX2ZyZWUsIHRoZSB1bmNvbnN1bWVkIGlfY291bnRcbisgKiByZWZlcmVuY2UgKHN0aWxsIDEpIGtlZXBzIGl0IGluIHRoZSBpbm9kZSBjYWNoZSwgc28gYW55IGNvbmN1cnJlbnRcbisgKiBpZ2V0KCkgYnVtcHMgaV9jb3VudCB0byBcdTAwM2U9IDIgYW5kIGlwdXRfaWZfbm90X2xhc3QoKSB3aWxsIHN1Y2NlZWQuXG4rICogTm9ib2R5IHdpbGwgYWRkIHRoZSBpbm9kZSBhIHNlY29uZCB0aW1lIHVudGlsIGV4dDRfZWFfaW5vZGVfd29yaygpXG4rICogZHJvcHMgdGhhdCByZWZlcmVuY2UgdmlhIGlwdXQoKS5cbisgKi9cbit2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4re1xuK1x0aWYgKCFpbm9kZSlcbitcdFx0cmV0dXJuO1xuK1x0V0FSTl9PTl9PTkNFKCEoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSk7XG4rXHRpZiAoaXB1dF9pZl9ub3RfbGFzdChpbm9kZSkpXG4gXHRcdHJldHVybjtcbitcdGxsaXN0X2FkZChcdTAwMjZFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZWFfaXB1dF9ub2RlLFxuK1x0XHQgIFx1MDAyNkVYVDRfU0Ioc2IpLVx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XG4rXHQvKlxuK1x0ICogVXNlIGEgc2hvcnQgZGVsYXkgdG8gYWxsb3cgbXVsdGlwbGUgRUEgaW5vZGVzIHRvIGFjY3VtdWxhdGUsXG4rXHQgKiByZWR1Y2luZyB3b3JrcXVldWUgd2FrZXVwcyB3aGVuIHNldmVyYWwgYXJlIHJlbGVhc2VkIHRvZ2V0aGVyLlxuK1x0ICovXG4rXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2RVhUNF9TQihzYiktXHUwMDNlc19lYV9pbm9kZV93b3JrLCAxKTtcbit9XG4gXG4tXHRmb3IgKGlkeCA9IDA7IGlkeCBcdTAwM2MgZWFfaW5vZGVfYXJyYXktXHUwMDNlY291bnQ7ICsraWR4KVxuLVx0XHRpcHV0KGVhX2lub2RlX2FycmF5LVx1MDAzZWlub2Rlc1tpZHhdKTtcbi1cdGtmcmVlKGVhX2lub2RlX2FycmF5KTtcbit2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSlcbit7XG4rXHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XG4rXHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrLCBleHQ0X2VhX2lub2RlX3dvcmspO1xuIH1cbiBcbiAvKlxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuaCBiL2ZzL2V4dDQveGF0dHIuaFxuaW5kZXggMWZlZGY0NGQ0ZmI2NWUuLjUxOGYwMjgzZTE3NDQ0IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC94YXR0ci5oXG4rKysgYi9mcy9leHQ0L3hhdHRyLmhcbkBAIC0xMzEsMTEgKzEzMSw2IEBAIHN0cnVjdCBleHQ0X3hhdHRyX2lib2R5X2ZpbmQge1xuIFx0c3RydWN0IGV4dDRfaWxvYyBpbG9jO1xuIH07XG4gXG4tc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkge1xuLVx0dW5zaWduZWQgaW50IGNvdW50O1xuLVx0c3RydWN0IGlub2RlICppbm9kZXNbXSBfX2NvdW50ZWRfYnkoY291bnQpO1xuLX07XG4tXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdXNlcl9oYW5kbGVyO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3RydXN0ZWRfaGFuZGxlcjtcbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyO1xuQEAgLTE4Nyw5ICsxODIsOSBAQCBleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0Ym9vbCBpc19jcmVhdGUpO1xuIFxuIGV4dGVybiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdCAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqYXJyYXksXG4gXHRcdFx0XHQgICBpbnQgZXh0cmFfY3JlZGl0cyk7XG4tZXh0ZXJuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICphcnJheSk7XG4rZXh0ZXJuIHZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKTtcbitleHRlcm4gdm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbiBcbiBleHRlcm4gaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsXG4gXHRcdFx0ICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUpO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZnMuaCBiL2luY2x1ZGUvbGludXgvZnMuaFxuaW5kZXggZDEwODk3YjNhMWUzNTAuLjA0ZjBkZTc4ZmE3YTg1IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2ZzLmhcbkBAIC0yNDEzLDYgKzI0MTMsMTkgQEAgc3RhdGljIGlubGluZSB2b2lkIHN1cGVyX3NldF9zeXNmc19uYW1lX2dlbmVyaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hcbiBleHRlcm4gdm9pZCBpaG9sZChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7XG4gZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7XG4gdm9pZCBpcHV0X25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqKTtcbitcbisvKipcbisgKiBpcHV0X2lmX25vdF9sYXN0IC0gZHJvcCBhbiBpbm9kZSByZWZlcmVuY2Ugb25seSBpZiBpdCBpcyBub3QgdGhlIGxhc3Qgb25lXG4rICogQGlub2RlOiBpbm9kZSB0byBwdXRcbisgKlxuKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVmZXJlbmNlIHdhcyBkcm9wcGVkLCBmYWxzZSBpZiB0aGlzIHdhcyB0aGUgbGFzdFxuKyAqIHJlZmVyZW5jZSBhbmQgdGhlIGNhbGxlciBtdXN0IGFycmFuZ2UgZm9yIGZpbmFsIGlwdXQoKSBpbiBhIHNhZmUgY29udGV4dC5cbisgKi9cbitzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGlwdXRfaWZfbm90X2xhc3Qoc3RydWN0IGlub2RlICppbm9kZSlcbit7XG4rXHRyZXR1cm4gYXRvbWljX2FkZF91bmxlc3MoXHUwMDI2aW5vZGUtXHUwMDNlaV9jb3VudCwgLTEsIDEpO1xuK31cbitcbiBpbnQgaW5vZGVfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLFxuIFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCBnZW5lcmljX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjI4OjI2Ljk1NzYzODExMVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkyNTQwODY2ODIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIEV4dDQgWGF0dHIgUGF0Y2ggZm9yIEZ1enppbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIHBhdGNoIGhlcmUgdGhhdCdzIGRpdmluZyBkZWVwIGludG8gZXh0NCdzIGV4dGVuZGVkIGF0dHJpYnV0ZSAoeGF0dHIpIGhhbmRsaW5nLCBzcGVjaWZpY2FsbHkgaG93IEVBIGlub2RlcyBhcmUgZnJlZWQuICBJdCBzZWVtcyB0byBiZSBhIHNpZ25pZmljYW50IGNoYW5nZSwgaW50cm9kdWNpbmcgYSBkZWZlcnJlZCBgaXB1dGAgbWVjaGFuaXNtIGZvciBFQSBpbm9kZXMgdG8gc2lkZXN0ZXAgc29tZSBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gVGhhdOKAmXMgYSBnb29kIGNsdWUgaXTigJlzIGZpeGluZyBhIHJlYWwgcHJvYmxlbSwgYW5kIGl0J3MgZGVmaW5pdGVseSBzb21ldGhpbmcgdGhhdCB3YXJyYW50cyBjYXJlZnVsIHNjcnV0aW55LiBUaGlzIGlzbid0IHNvbWUgdHJpdmlhbCB0d2VhazsgaXQgdG91Y2hlcyBjb3JlIGZpbGVzeXN0ZW0gZnVuY3Rpb25hbGl0eS5cblxuVGhlIHBhdGNoIGl0c2VsZiBpcyB0b3VjaGluZyBzb21lIGtleSBkYXRhIHN0cnVjdHVyZXMsIGxpa2UgdXNpbmcgYSB1bmlvbiBpbiBgc3RydWN0IGV4dDRfaW5vZGVfaW5mb2AgZm9yIGB4YXR0cl9zZW1gIGFuZCBgaV9lYV9pcHV0X25vZGVgIGFuZCBhZGRpbmcgZmllbGRzIChgc19lYV9pbm9kZV90b19mcmVlYCBhbmQgYHNfZWFfaW5vZGVfd29ya2ApIHRvIGBzdHJ1Y3QgZXh0NF9zYl9pbmZvYC4gSXQgbG9va3MgbGlrZSB0aGV54oCZcmUgdHJ5aW5nIHRvIG1hbmFnZSB0aGUgZGVmZXJyZWQgaW5vZGUgcmVsZWFzZSBtb3JlIGVmZmVjdGl2ZWx5LiBBbmQgaXQncyBub3QganVzdCBhIG1pbm9yIHJlZmFjdG9yOyB3ZSdyZSB0YWxraW5nIGFib3V0IG1vZGlmaWNhdGlvbnMgdG8gc2V2ZXJhbCBpbXBvcnRhbnQgZnVuY3Rpb25zOiBgZXh0NF9ldmljdF9pbm9kZWAsIGBleHQ0X3B1dF9zdXBlcmAsIGBleHQ0X2FsbG9jX2lub2RlYCwgYF9fZXh0NF9maWxsX3N1cGVyYCwgYW5kIGEgYnVuY2ggb2YgZnVuY3Rpb25zIGluIGBmcy9leHQ0L3hhdHRyLmNgLiBQbHVzLCB0aGVyZSBhcmUgc29tZSBicmFuZCBuZXcgZnVuY3Rpb25zIGJlaW5nIGludHJvZHVjZWQ6IGBleHQ0X3B1dF9lYV9pbm9kZWAsIGBleHQ0X2VhX2lub2RlX3dvcmtgLCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBpcHV0X2lmX25vdF9sYXN0YCBpbiBgaW5jbHVkZS9saW51eC9mcy5oYC4gIFRoaXMgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgY29kZSBhbmQgYSBjaGFuZ2Ugd29ydGggZnV6aW5nIGFzIGl0IGlzIHRvdWNoaW5nIGNvcmUgZXh0NCBmaWxlIHN5c3RlbSBmdW5jdGlvbmFsaXR5LlxuXG5HaXZlbiBhbGwgb2YgdGhpcywgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgXCJXb3J0aEZ1enppbmcgPSB0cnVlXCIuXG5cbk5vdywgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3M6IHdoYXQncyB0aGUgbW9zdCAqY3JpdGljYWwqIGNvZGUgdG8gdGFyZ2V0IHdpdGggZnV6emluZz8gTG9va2luZyBhdCB0aGUgbGlzdCBvZiBtb2RpZmllZCBmdW5jdGlvbnMsIGl0J3MgcHJldHR5IGNsZWFyIHdoZXJlIHRoZSBhY3Rpb24gaXMuIE15IGluaXRpYWwgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZXNlOlxuXG4qICAgYGV4dDRfZXZpY3RfaW5vZGVgXG4qICAgYGV4dDRfcHV0X3N1cGVyYFxuKiAgIGBleHQ0X2FsbG9jX2lub2RlYFxuKiAgIGBfX2V4dDRfZmlsbF9zdXBlcmBcbiogICBUaGUgeGF0dHItcmVsYXRlZCBmdW5jdGlvbnMsIGVzcGVjaWFsbHk6IGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYCwgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYCwgYGV4dDRfZWFfaW5vZGVfd29ya2AsIGBleHQ0X3B1dF9lYV9pbm9kZWAsIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgYW5kIGBleHQ0X3hhdHRyX2lib2R5X3NldGBcblxuVGhlc2UgYXJlIGxpa2VseSB0aGUgZnVuY3Rpb25zIG1vc3QgZGlyZWN0bHkgaW52b2x2ZWQgaW4gdGhlIGRlZmVycmVkIGlub2RlIG1hbmFnZW1lbnQgYW5kIHhhdHRyIG1hbmlwdWxhdGlvbnMuIFRoZXNlIHNob3VsZCBiZSB0aGUgYEZvY3VzU3ltYm9sc2AgZm9yIG91ciBmdXp6aW5nIGVmZm9ydHMuXG5cbkZpbmFsbHksIGFyZSB0aGVyZSBhbnkgY29uZmlndXJhdGlvbnMgSSBuZWVkIHRvIGJlIGF3YXJlIG9mPyBUaGlzIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgRUEgaW5vZGVzIGluIGV4dDQsIHdoaWNoIGlzIGEgZmFpcmx5IHN0YW5kYXJkIGZlYXR1cmUuICBJJ2xsIG5lZWQgdG8gZG91YmxlIGNoZWNrIHRoYXQgSSBkb24ndCBuZWVkIGEgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBzZXQgaW4gdGhlIEtjb25maWcsIHNvIEknbGwgc2NhbiBmb3IgdGhpbmdzIGxpa2UgYEVYVDRfRUFfSU5PREVfRkxgIGFuZCBzaW1pbGFyIHRlcm1zIHRvIGVuc3VyZSB0aGUgZmVhdHVyZSBpcyBwcm9wZXJseSBlbmFibGVkIGR1cmluZyB0ZXN0aW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQ2MCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYzMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjI4OjM2LjIxMTcyODg1M1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTg5MjEzMTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhUNF9FQV9JTk9ERVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L2V4dDQuaD00NDA9c3RydWN0IGZsZXhfZ3JvdXBzIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTUwNC0jZGVmaW5lIEVYVDRfVkVSSVRZX0ZMXFx0XFx0XFx0MHgwMDEwMDAwMCAvKiBWZXJpdHkgcHJvdGVjdGVkIGlub2RlICovXFxuZnMvZXh0NC9leHQ0Lmg6NTA1OiNkZWZpbmUgRVhUNF9FQV9JTk9ERV9GTFxcdCAgICAgICAgMHgwMDIwMDAwMCAvKiBJbm9kZSB1c2VkIGZvciBsYXJnZSBFQSAqL1xcbmZzL2V4dDQvZXh0NC5oLTUwNi0vKiAweDAwNDAwMDAwIHdhcyBmb3JtZXJseSBFWFQ0X0VPRkJMT0NLU19GTCAqL1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MTA0OD1zdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTEwNzMtXFx0ICpcXG5mcy9leHQ0L2V4dDQuaDoxMDc0OlxcdCAqIEVBIGlub2RlcyAoRVhUNF9FQV9JTk9ERV9GTCkgZG8gbm90IHVzZSB4YXR0cl9zZW07IHRoZXkgcmV1c2VcXG5mcy9leHQ0L2V4dDQuaC0xMDc1LVxcdCAqIHRoZSBzcGFjZSBmb3IgZGVmZXJyZWQgaXB1dCBsaW5rYWdlLlxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjcwMj1zdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9pc19xdW90YV9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2V4dDQuaC0yNzA0LVxcdHJldHVybiBJU19OT1FVT1RBKGlub2RlKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvZXh0NC5oOjI3MDU6XFx0ICAgICAgICEoRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9mbGFncyBcXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpO1xcbmZzL2V4dDQvZXh0NC5oLTI3MDYtfVxcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYz05MzM9c3RydWN0IGlub2RlICpfX2V4dDRfbmV3X2lub2RlKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYy05OTUtXFxuZnMvZXh0NC9pYWxsb2MuYzo5OTY6XFx0aWYgKCEoaV9mbGFncyBcXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKSB7XFxuZnMvZXh0NC9pYWxsb2MuYy05OTctXFx0XFx0ZXJyID0gZnNjcnlwdF9wcmVwYXJlX25ld19pbm9kZShkaXIsIGlub2RlLCBcXHUwMDI2ZW5jcnlwdCk7XFxuLS1cXG5mcy9leHQ0L2lhbGxvYy5jLTEwMDUtXFxuZnMvZXh0NC9pYWxsb2MuYzoxMDA2OlxcdGlmICghaGFuZGxlIFxcdTAwMjZcXHUwMDI2IHNiaS1cXHUwMDNlc19qb3VybmFsIFxcdTAwMjZcXHUwMDI2ICEoaV9mbGFncyBcXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKSB7XFxuZnMvZXh0NC9pYWxsb2MuYy0xMDA3LVxcdFxcdHJldDIgPSBleHQ0X3hhdHRyX2NyZWRpdHNfZm9yX25ld19pbm9kZShkaXIsIG1vZGUsIGVuY3J5cHQpO1xcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYy0xMzA4LVxcdGlmIChleHQ0X2hhc19mZWF0dXJlX2lubGluZV9kYXRhKHNiKSBcXHUwMDI2XFx1MDAyNlxcbmZzL2V4dDQvaWFsbG9jLmM6MTMwOTpcXHQgICAgKCEoZWktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiAoRVhUNF9EQVhfRkx8RVhUNF9FQV9JTk9ERV9GTCkpIHx8IFNfSVNESVIobW9kZSkpKVxcbmZzL2V4dDQvaWFsbG9jLmMtMTMxMC1cXHRcXHRleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYy0xMzI2LVxcbmZzL2V4dDQvaWFsbG9jLmM6MTMyNzpcXHRpZiAoIShlaS1cXHUwMDNlaV9mbGFncyBcXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKSB7XFxuZnMvZXh0NC9pYWxsb2MuYy0xMzI4LVxcdFxcdGVyciA9IGV4dDRfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyKTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz0xNjk9dm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtMTg0LVxcbmZzL2V4dDQvaW5vZGUuYzoxODU6XFx0aWYgKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKVxcbmZzL2V4dDQvaW5vZGUuYy0xODYtXFx0XFx0ZXh0NF9ldmljdF9lYV9pbm9kZShpbm9kZSk7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NDY5Nz1zdGF0aWMgaW5saW5lIHU2NCBleHQ0X2lub2RlX3BlZWtfaXZlcnNpb24oY29uc3Qgc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9leHQ0L2lub2RlLmMtNDY5OC17XFxuZnMvZXh0NC9pbm9kZS5jOjQ2OTk6XFx0aWYgKHVubGlrZWx5KEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSlcXG5mcy9leHQ0L2lub2RlLmMtNDcwMC1cXHRcXHRyZXR1cm4gaW5vZGVfcGVla19pdmVyc2lvbl9yYXcoaW5vZGUpO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTUxOTA9aW50IGV4dDRfZ2V0X3Byb2ppZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBrcHJvamlkX3QgKnByb2ppZClcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy01MTk5LSAqIGV4dDQgaGFzIHNlbGYtbWFuYWdlZCBpX3ZlcnNpb24gZm9yIGVhIGlub2RlcywgaXQgc3RvcmVzIHRoZSBsb3dlciAzMmJpdCBvZlxcbmZzL2V4dDQvaW5vZGUuYzo1MjAwOiAqIHJlZmNvdW50IGluIGlfdmVyc2lvbiwgc28gdXNlIHJhdyB2YWx1ZXMgaWYgaW5vZGUgaGFzIEVYVDRfRUFfSU5PREVfRkwgZmxhZ1xcbmZzL2V4dDQvaW5vZGUuYy01MjAxLSAqIHNldC5cXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01MjAzPXN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2lub2RlX3NldF9pdmVyc2lvbl9xdWVyaWVkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIHU2NCB2YWwpXFxuZnMvZXh0NC9pbm9kZS5jLTUyMDQte1xcbmZzL2V4dDQvaW5vZGUuYzo1MjA1OlxcdGlmICh1bmxpa2VseShFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpXFxuZnMvZXh0NC9pbm9kZS5jLTUyMDYtXFx0XFx0aW5vZGVfc2V0X2l2ZXJzaW9uX3Jhdyhpbm9kZSwgdmFsKTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz01MjExPXN0YXRpYyBpbnQgY2hlY2tfaWdvdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2lnZXRfZmxhZ3MgZmxhZ3MsXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTIxNi1cXHRpZiAoZmxhZ3MgXFx1MDAyNiBFWFQ0X0lHRVRfRUFfSU5PREUpIHtcXG5mcy9leHQ0L2lub2RlLmM6NTIxNzpcXHRcXHRpZiAoIShFWFQ0X0koaW5vZGUpLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpIHtcXG5mcy9leHQ0L2lub2RlLmMtNTIxOC1cXHRcXHRcXHRlcnJfc3RyID0gXFxcIm1pc3NpbmcgRUFfSU5PREUgZmxhZ1xcXCI7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTIyNi1cXHR9IGVsc2Uge1xcbmZzL2V4dDQvaW5vZGUuYzo1MjI3OlxcdFxcdGlmICgoRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9mbGFncyBcXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKSB7XFxuZnMvZXh0NC9pbm9kZS5jLTUyMjgtXFx0XFx0XFx0LypcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xNTE2PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTUzNS1cXHRcXHRcXHRcXHQgIFNfSUZSRUcgfCAwNjAwLCBOVUxMLCBpbm9kZS1cXHUwMDNlaV9pbm8gKyAxLCBvd25lcixcXG5mcy9leHQ0L3hhdHRyLmM6MTUzNjpcXHRcXHRcXHRcXHQgIEVYVDRfRUFfSU5PREVfRkwpO1xcbmZzL2V4dDQveGF0dHIuYy0xNTM3LVxcdGlmICghSVNfRVJSKGVhX2lub2RlKSkge1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTMwNTE9dm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTMwNTQtXFx0XFx0cmV0dXJuO1xcbmZzL2V4dDQveGF0dHIuYzozMDU1OlxcdFdBUk5fT05fT05DRSghKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSk7XFxuZnMvZXh0NC94YXR0ci5jLTMwNTYtXFx0aWYgKGlwdXRfaWZfbm90X2xhc3QoaW5vZGUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMToyODozNi4zNzA2NjU0ODdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyODc1NjE0MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipJbnZlc3RpZ2F0aW5nIEV4dDQncyBFQSBJTk9ERSBGZWF0dXJlKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCB0aGUgRUEgSU5PREUgZmVhdHVyZSB3aXRoaW4gdGhlIGV4dDQgZmlsZXN5c3RlbS4gTXkgZmlyc3QgbW92ZSwgYXMgYWx3YXlzLCBpcyB0byBjaGVjayBmb3IgYSBLY29uZmlnIG9wdGlvbi4gS25vd2luZyB0aGlzLCBpZiB0aGVyZSBpcyBhIHdheSB0byBjb25maWd1cmUgdGhpcyBmZWF0dXJlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBjb250cm9sbGVkIGFuZCB3aGV0aGVyIGl0J3MgZW5hYmxlZCBieSBkZWZhdWx0LCBvciBpZiBpdCBuZWVkcyB0byBiZSBleHBsaWNpdGx5IGVuYWJsZWQgaW4gdGhlIGtlcm5lbCBjb25maWcuIEZpbmRpbmcgdGhlIEtjb25maWcgb3B0aW9uIGlzIHRoZSBpbml0aWFsLCBhbmQgbGlrZWx5IG1vc3QgaW1wb3J0YW50LCBmaXJzdCBzdGVwLCBhcyBpdCB3aWxsIHJldmVhbCBob3cgdGhlIGZlYXR1cmUgaXMgbWFuYWdlZCBhbmQgY29udHJvbGxlZCBpbiB0aGlzIGtlcm5lbCBjb250ZXh0LiBMZXQncyBkaWcgaW50byB0aGUgY29uZmlndXJhdGlvbiBmaWxlcyBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNjI5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6Mjg6MzkuMjQ2Mjg0MDUzWiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNjE2MDIyLCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJFWFQ0X0VBX0lOT0RFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6Mjg6MzkuMzI2OTEzNTk1WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYyMDI0MjIxNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipFWFQ0IEV4dGVuZGVkIEF0dHJpYnV0ZXMgYW5kIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBFWFQ0IGV4dGVuZGVkIGF0dHJpYnV0ZXMgdGhpbmcsIHNwZWNpZmljYWxseSB0aGUgYEVYVDRfRUFfSU5PREVgLiBIbW0sIHRoZXJlIGRvZXNuJ3Qgc2VlbSB0byBiZSBhIGRlZGljYXRlZCBLY29uZmlnIG9wdGlvbiBmb3IgaXQgZGlyZWN0bHkuIFRoYXQncyBhIGJpdCBzdXJwcmlzaW5nLiBVc3VhbGx5LCB0aGVyZSdzIGEgZmxhZyBmb3IgZXZlcnl0aGluZy4gUmlnaHQsIEkgcmVjYWxsIGl0IGJlaW5nIGVuYWJsZWQgaW1wbGljaXRseSB3aGVuIGRlYWxpbmcgd2l0aCBsYXJnZSBleHRlbmRlZCBhdHRyaWJ1dGVzLiBCdXQganVzdCB0byBiZSBzdXJlLCBJIHNob3VsZCB2ZXJpZnkgd2hhdCBlbmFibGVzIGl0LlxuXG5XYWl0IGEgc2Vjb25kLCB0aGVyZSAqaXMqIGFuIGBFWFQ0X0ZTYCBjb25maWd1cmF0aW9uIG9wdGlvbiwgb2YgY291cnNlLiBCdXQgdGhhdCdzIHByZXR0eSBzdGFuZGFyZCwgdGhlIGdlbmVyYWwgZmlsZSBzeXN0ZW0gc3VwcG9ydC4gSSBuZWVkIHNvbWV0aGluZyBtb3JlIHNwZWNpZmljLiBMZXQncyBkaWcgZGVlcGVyIGFuZCBzZWUgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBFWFQ0LXJlbGF0ZWQgY29uZmlncyB0aGF0IG1pZ2h0IHNoZWQgc29tZSBsaWdodCBvbiB0aGlzLi4uIEkga25vdyB0aGVyZSdzIHNvbWV0aGluZyBhcm91bmQgaGVyZSBzb21ld2hlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODUzLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6Mjg6NDMuOTQ3MTU5NzFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDE3NjY4NzgxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQ0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG5mcy9leHQ0L0tjb25maWc6Mjpjb25maWcgRVhUNF9GU1xcbmZzL2V4dDQvS2NvbmZpZy0zLVxcdHRyaXN0YXRlIFxcXCJUaGUgRXh0ZW5kZWQgNCAoZXh0NCkgZmlsZXN5c3RlbVxcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy0zNC1cXG5mcy9leHQ0L0tjb25maWc6MzU6Y29uZmlnIEVYVDRfVVNFX0ZPUl9FWFQyXFxuZnMvZXh0NC9LY29uZmlnLTM2LVxcdGJvb2wgXFxcIlVzZSBleHQ0IGZvciBleHQyIGZpbGUgc3lzdGVtc1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy00NS1cXG5mcy9leHQ0L0tjb25maWc6NDY6Y29uZmlnIEVYVDRfRlNfUE9TSVhfQUNMXFxuZnMvZXh0NC9LY29uZmlnLTQ3LVxcdGJvb2wgXFxcIkV4dDQgUE9TSVggQWNjZXNzIENvbnRyb2wgTGlzdHNcXFwiXFxuLS1cXG5mcy9leHQ0L0tjb25maWctNTUtXFxuZnMvZXh0NC9LY29uZmlnOjU2OmNvbmZpZyBFWFQ0X0ZTX1NFQ1VSSVRZXFxuZnMvZXh0NC9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIkV4dDQgU2VjdXJpdHkgTGFiZWxzXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTY3LVxcbmZzL2V4dDQvS2NvbmZpZzo2ODpjb25maWcgRVhUNF9ERUJVR1xcbmZzL2V4dDQvS2NvbmZpZy02OS1cXHRib29sIFxcXCJFeHQ0IGRlYnVnZ2luZyBzdXBwb3J0XFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTc2LVxcbmZzL2V4dDQvS2NvbmZpZzo3Nzpjb25maWcgRVhUNF9LVU5JVF9URVNUU1xcbmZzL2V4dDQvS2NvbmZpZy03OC1cXHR0cmlzdGF0ZSBcXFwiS1VuaXQgdGVzdHMgZm9yIGV4dDRcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6Mjg6NDQuMzY0ODM2MDExWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDY5NjU5MzIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgQ29uZmlndXJhdGlvbiBSZXF1aXJlbWVudHMgZm9yIE1vZGlmaWVkIGV4dDQgQ29kZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIG1vZGlmaWNhdGlvbnMgaW4gdGhlIGV4dDQgY29kZSwgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgcmVsZXZhbnQgdG8gaGlnaGxpZ2h0LiBJIGluaXRpYWxseSB0aG91Z2h0IEkgbWlnaHQgbmVlZCB0byBleHBsaWNpdGx5IG1lbnRpb24gYEVYVDRfRlNgLCBzaW5jZSBpdCdzIHRoZSBjb3JlIGZpbGVzeXN0ZW0uIEJ1dCB0aGVuIEkgcmUtcmVhZCB0aGUgaW5zdHJ1Y3Rpb25zLCBhbmQgaXTigJlzIGNsZWFyOiBcIkRvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdCBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuXCIgUmlnaHQsIHRoYXQgbWFrZXMgcGVyZmVjdCBzZW5zZSwgc28gSSdsbCBsZWF2ZSBgRVhUNF9GU2Agb3V0OyBpdCdzIHByYWN0aWNhbGx5IGEgZ2l2ZW4uXG5cbk5vdywgbGV0J3MgZG91YmxlLWNoZWNrIHRoZSBtb2RpZmllZCBmdW5jdGlvbnMgdG8gYmUgY2VydGFpbiBJIGhhdmUgYSBmdWxsIHBpY3R1cmUuIE9rYXksIEkndmUgZ290OiBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X2VhX2lub2RlX3dvcmtgLCBgZXh0NF9wdXRfZWFfaW5vZGVgLCBgZXh0NF94YXR0cl9ibG9ja19zZXRgLCBhbmQgYGV4dDRfeGF0dHJfaWJvZHlfc2V0YC4gVGhlc2UgYWxsIHNvdW5kIGxpa2UgdGhleSBhcmUgd29ya2luZyB3aXRoIGV4dGVuZGVkIGF0dHJpYnV0ZXMgKHhhdHRyKS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGdldCB0aGUgY29uZmlnIGNvcnJlY3QuXG5cbkxldCdzIGRvIHRoaXMgcHJvcGVybHksIHRoZSBuZXh0IHN0ZXAgaXMgdG8gaGVhZCB0byBgZnMvZXh0NC9LY29uZmlnYCBhbmQgbG9vayBmb3IgYW55IGNvbmZpZ3VyYXRpb24gb3B0aW9ucyByZWxhdGVkIHRvIGV4dGVuZGVkIGF0dHJpYnV0ZXMuIFRoYXQgc2VlbXMgbGlrZSB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQ5NCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE5MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMToyODo0OS4wNjE0MzI1NTFaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTA4MDM2MCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiWEFUVFJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMToyODo0OS4xNzA1MjQ1OTFaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzI3OTYwNDkzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGlzIGV4dDQgRUEgSW5vZGUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBpdCBsb29rcyBsaWtlIHhhdHRyIGlzIGFsd2F5cyBvbiBmb3IgZXh0NCwgd2hpY2ggaXMgZ29vZCB0byBrZWVwIGluIG1pbmQuIExldCdzIGRpZyBiYWNrIGludG8gdGhpcyBwYXRjaC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdGhhdCBpdCdzIGZvY3VzaW5nIG9uIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYCwgYW5kIEkgc2VlIGl0J3MgdHJ5aW5nIHRvIG9wdGltaXplIEVBIGlub2RlIGhhbmRsaW5nIGJ5IHRyYWNraW5nIHRoZW0gaW4gYW4gYXJyYXkgdG8gcHJldmVudCBkdXBsaWNhdGUgcHJvY2Vzc2luZy4gVGhhdCdzIGEgY2xhc3NpYyBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb247IHNtYXJ0IG1vdmUuIEkgc2VlIHRoZSBhZGRpdGlvbiBvZiBgZXh0NF9wdXRfZWFfaW5vZGVgIHdoaWNoIHVzZXMgYHNfZWFfaW5vZGVfdG9fZnJlZWAgYW5kIGBzX2VhX2lub2RlX3dvcmtgLCBzbyBpdCBpcyBkZWZpbml0ZWx5IGRvaW5nIGRlZmVycmVkIGlwdXQuIFNvIGl0IHNlZW1zIGxpa2UgdGhpcyBpcyB0aGUgd29yayBxdWV1ZSBwYXJ0LiBBbmQsIG5vIGxvbmdlciB0YWtpbmcgdGhhdCBhcnJheSBpbiBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSXQgYWxzbyBtb2RpZmllcyBgZXh0NF9ldmljdF9pbm9kZWAgYW5kIGBleHQ0X3B1dF9zdXBlcmAgdG8gZmx1c2ggdGhlIHdvcmtxdWV1ZSwgc3VnZ2VzdGluZyBwb3RlbnRpYWwgaXNzdWVzIHdpdGggZGVmZXJyZWQgb3BlcmF0aW9ucyBhbmQgbmVlZGluZyB0byBndWFyYW50ZWUgY2xlYW51cCBhdCBjcml0aWNhbCBwb2ludHMuXG5cblRoZSBjb3JlIG9mIHRoZSBwYXRjaCdzIGxvZ2ljIGlzIGNsZWFyOiBpdCdzIGludHJvZHVjaW5nIGEgZGVmZXJyZWQgYGlwdXRgIG1lY2hhbmlzbSBmb3IgZXh0NCBFQSBpbm9kZXMgdG8gZG9kZ2UgbG9jayBvcmRlcmluZyBpc3N1ZXMgYW5kIGRlYWRsb2Nrcy4gSSBuZWVkIHRvIGJlIGV4dHJhIGNhdXRpb3VzIGFuZCBsb29rIGF0IHRoZSBjb3JlIGV4dDQgeGF0dHIgaGFuZGxpbmcgYW5kIGlub2RlIGV2aWN0aW9uIHBhdGhzLiBJIHdvdWxkIGFsc28gYWRkIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAgYW5kIGBleHQ0X3hhdHRyX2lib2R5X3NldGAgdG8gdGhlIHBvdGVudGlhbCBmdXp6aW5nIHN5bWJvbHMgYmVjYXVzZSBJJ20gYmV0dGluZyB0aGF0IHRoZSBvcmlnaW5hbCBwYXRjaCBpcyBvbmx5IHBhcnQgb2YgdGhlIHB1enpsZS5cblxuTm93LCB3YWl0LCBhbSBJIG1pc3NpbmcgYW55dGhpbmcgY29uZmlndXJhdGlvbi13aXNlPyBJJ20gZ29pbmcgdG8gbG9vayBhdCBgQ09ORklHX0VYVDRfRlNfUE9TSVhfQUNMYCBhbmQgYENPTkZJR19FWFQ0X0ZTX1NFQ1VSSVRZYCB0byBzZWUgaWYgdGhvc2UgY29tZSBpbnRvIHBsYXkgaGVyZS4gRUEgaW5vZGVzIGFyZSAqdHlwaWNhbGx5KiB1c2VkIGZvciAqbGFyZ2UqIHhhdHRycywgYW5kIEFDTHMgYW5kIFNFTGludXggbGFiZWxzIHVzZSB4YXR0cnMsIHNvIHRoZXJlIGlzIHNvbWUgb3ZlcmxhcC4gQnV0IGxhcmdlIHhhdHRycyBhcmUgdXN1YWxseSAqdXNlciogeGF0dHJzLCBub3QgQUNMcyBvciBzZWN1cml0eSBsYWJlbHMuIEhtbW0sIGlzIHRoZXJlIGEgYENPTkZJR19FWFQ0X0ZTX1hBVFRSYD8gVGhhdCdzIHdoYXQgSSdsbCBuZWVkIHRvIGRvdWJsZS1jaGVjayBpbiBgZnMvZXh0NC9NYWtlZmlsZWAgdG8gbWFrZSBzdXJlIG5vdGhpbmcgaXMgbWlzc2VkIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTAyOSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMToyODo1Ni40NTAxMzI3NThaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk4NjM4MjMxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInhhdHRyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9NYWtlZmlsZT04PWV4dDQteVxcdDo9IGJhbGxvYy5vIGJpdG1hcC5vIGJsb2NrX3ZhbGlkaXR5Lm8gZGlyLm8gZXh0NF9qYmQyLm8gZXh0ZW50cy5vIFxcXFxcXG4tLVxcbmZzL2V4dDQvTWFrZWZpbGUtMTEtXFx0XFx0bW1wLm8gbW92ZV9leHRlbnQubyBuYW1laS5vIHBhZ2UtaW8ubyByZWFkcGFnZS5vIHJlc2l6ZS5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlOjEyOlxcdFxcdHN1cGVyLm8gc3ltbGluay5vIHN5c2ZzLm8geGF0dHIubyB4YXR0cl9odXJkLm8geGF0dHJfdHJ1c3RlZC5vIFxcXFxcXG5mcy9leHQ0L01ha2VmaWxlOjEzOlxcdFxcdHhhdHRyX3VzZXIubyBmYXN0X2NvbW1pdC5vIG9ycGhhbi5vXFxuZnMvZXh0NC9NYWtlZmlsZS0xNC1cXG5mcy9leHQ0L01ha2VmaWxlPTE1PWV4dDQtJChDT05GSUdfRVhUNF9GU19QT1NJWF9BQ0wpXFx0Kz0gYWNsLm9cXG5mcy9leHQ0L01ha2VmaWxlOjE2OmV4dDQtJChDT05GSUdfRVhUNF9GU19TRUNVUklUWSlcXHRcXHQrPSB4YXR0cl9zZWN1cml0eS5vXFxuZnMvZXh0NC9NYWtlZmlsZS0xNy1leHQ0LXRlc3Qtb2Jqc1xcdFxcdFxcdFxcdCs9IGlub2RlLXRlc3QubyBtYmFsbG9jLXRlc3QubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDExOjI4OjU2LjU0ODc4Nzc0OVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTg1ODU5NzQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlZmluaW5nIHRoZSBYYXR0ciBGb2N1cyoqXG5cbk9rYXksIHNvIGB4YXR0ci5vYCBpcyBhIGNvbnN0YW50IGNvbXBpbGUuIE5vIG5lZWQgdG8gZmlkZGxlIHdpdGggYW55IGNvbmZpZ3VyYXRpb24gdGhlcmU7IGl0J3MgYWx3YXlzIGluY2x1ZGVkLiBOb3csIGxldCdzIGdldCBkb3duIHRvIHRoZSBtZWF0IG9mIHJlZmluaW5nIHRoZXNlIGBGb2N1c1N5bWJvbHNgLiBJIG5lZWQgdG8gaG9uZSBpbiBvbiB0aGUgY29yZSBvcGVyYXRpb25zLlxuXG5Mb29raW5nIGF0IHRoZSBsaXN0LCBJJ20gZ29pbmcgdG8gc2VsZWN0IHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFzIHRoZSBtb3N0IHJlbGV2YW50OiBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X2VhX2lub2RlX3dvcmtgLCBgZXh0NF9wdXRfZWFfaW5vZGVgLCBgZXh0NF94YXR0cl9ibG9ja19zZXRgLCBhbmQgYGV4dDRfeGF0dHJfaWJvZHlfc2V0YC4gVGhlc2UgZnVuY3Rpb25zIGFyZSBjZW50cmFsIHRvIHhhdHRyIG1hbmFnZW1lbnQgd2l0aGluIGV4dDQsIHRvdWNoaW5nIG9uIHJlZmVyZW5jZSBjb3VudGluZywgZGVsZXRpb24sIGFuZCBib3RoIGJsb2NrLWJhc2VkIGFuZCBpbm9kZS1iYXNlZCBleHRlbmRlZCBhdHRyaWJ1dGUgc3RvcmFnZS4gTm93LCBsZXQncyBjYWxsIGBzZXQtcmVzdWx0c2Agd2l0aCB0aGlzIHJlZmluZWQgc2VsZWN0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjIwOCwiT3V0cHV0VG9rZW5zIjoxNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTE6Mjk6MDEuNzM0NjUzMTUzWiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTg1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsXCIsXG4gICAgXCJleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZVwiLFxuICAgIFwiZXh0NF9lYV9pbm9kZV93b3JrXCIsXG4gICAgXCJleHQ0X3B1dF9lYV9pbm9kZVwiLFxuICAgIFwiZXh0NF94YXR0cl9ibG9ja19zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfaWJvZHlfc2V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIGZvciBleHQ0IEVBIChFeHRlbmRlZCBBdHRyaWJ1dGUpIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyBhbmQgZGVhZGxvY2tzLiBJdCBtb2RpZmllcyBjb3JlIGV4dDQgeGF0dHIgaGFuZGxpbmcgYW5kIGlub2RlIGV2aWN0aW9uIHBhdGhzLCB3aGljaCBhcmUgcmVhY2hhYmxlIGFuZCBmdW5jdGlvbmFsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxcIixcbiAgICBcImV4dDRfeGF0dHJfZGVsZXRlX2lub2RlXCIsXG4gICAgXCJleHQ0X2VhX2lub2RlX3dvcmtcIixcbiAgICBcImV4dDRfcHV0X2VhX2lub2RlXCIsXG4gICAgXCJleHQ0X3hhdHRyX2Jsb2NrX3NldFwiLFxuICAgIFwiZXh0NF94YXR0cl9pYm9keV9zZXRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gZm9yIGV4dDQgRUEgKEV4dGVuZGVkIEF0dHJpYnV0ZSkgaW5vZGVzIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzIGFuZCBkZWFkbG9ja3MuIEl0IG1vZGlmaWVzIGNvcmUgZXh0NCB4YXR0ciBoYW5kbGluZyBhbmQgaW5vZGUgZXZpY3Rpb24gcGF0aHMsIHdoaWNoIGFyZSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowllblz[1] Phase: Succeeded StartedAt: 2026-06-29 11:29:13 +0000 UTC FinishedAt: 2026-06-29 11:29:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-29 11:29:13 +0000 UTC FinishedAt: 2026-06-29 11:29:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[2] Phase: Succeeded StartedAt: 2026-06-29 11:29:13 +0000 UTC FinishedAt: 2026-06-29 15:42:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN) Phase: Failed StartedAt: 2026-06-29 11:29:13 +0000 UTC FinishedAt: 2026-06-29 15:42:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-29 11:29:13 +0000 UTC FinishedAt: 2026-06-29 11:29:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-29 11:29:13 +0000 UTC FinishedAt: 2026-06-29 11:29:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowllblz/series-workflowllblz-convert-artifact-495006279/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-29 11:29:33 +0000 UTC FinishedAt: 2026-06-29 11:52:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-29 11:29:33 +0000 UTC FinishedAt: 2026-06-29 11:52:16 +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:*20b957e5-9d21-4840-b9b2-4b479ce2686f,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-workflowllblz/series-workflowllblz-convert-artifact-495006279/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": "b1e175f1-4e18-4e94-ae2f-3e5b7a44a1b4", "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-workflowllblz/series-workflowllblz-build-action-3979098845/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-29 11:29:33 +0000 UTC FinishedAt: 2026-06-29 11:52:11 +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:*20b957e5-9d21-4840-b9b2-4b479ce2686f,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-workflowllblz/series-workflowllblz-convert-artifact-495006279/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": "b1e175f1-4e18-4e94-ae2f-3e5b7a44a1b4", "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-workflowllblz/series-workflowllblz-build-action-3979098845/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-29 11:52:16 +0000 UTC FinishedAt: 2026-06-29 11:52:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-29 11:52:16 +0000 UTC FinishedAt: 2026-06-29 11:52:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-29 11:52:16 +0000 UTC FinishedAt: 2026-06-29 11:52:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-29 11:52:16 +0000 UTC FinishedAt: 2026-06-29 11:52:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowllblz/series-workflowllblz-convert-artifact-2479536246/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-29 11:52:38 +0000 UTC FinishedAt: 2026-06-29 11:54:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-29 11:52:38 +0000 UTC FinishedAt: 2026-06-29 11:54:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b1e175f1-4e18-4e94-ae2f-3e5b7a44a1b4,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-workflowllblz/series-workflowllblz-build-action-3979098845/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-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-29 11:54:50 +0000 UTC FinishedAt: 2026-06-29 11:54:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-29 11:54:50 +0000 UTC FinishedAt: 2026-06-29 11:54:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-29 11:54:50 +0000 UTC FinishedAt: 2026-06-29 12:36:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-29 11:54:50 +0000 UTC FinishedAt: 2026-06-29 12:36:31 +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:*20b957e5-9d21-4840-b9b2-4b479ce2686f,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-workflowllblz/series-workflowllblz-convert-artifact-2479536246/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": "8bfc523f-1073-403e-8064-14eaace24629", "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-workflowllblz/series-workflowllblz-build-action-3965443962/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-29 11:54:50 +0000 UTC FinishedAt: 2026-06-29 12:36:15 +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:*20b957e5-9d21-4840-b9b2-4b479ce2686f,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-workflowllblz/series-workflowllblz-convert-artifact-2479536246/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": "8bfc523f-1073-403e-8064-14eaace24629", "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-workflowllblz/series-workflowllblz-build-action-3965443962/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-29 12:36:31 +0000 UTC FinishedAt: 2026-06-29 12:36:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-29 12:36:31 +0000 UTC FinishedAt: 2026-06-29 12:36:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-29 12:36:31 +0000 UTC FinishedAt: 2026-06-29 12:38:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-29 12:36:32 +0000 UTC FinishedAt: 2026-06-29 12:38:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8bfc523f-1073-403e-8064-14eaace24629,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-workflowllblz/series-workflowllblz-build-action-3965443962/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-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[10] Phase: Failed StartedAt: 2026-06-29 12:38:52 +0000 UTC FinishedAt: 2026-06-29 15:42:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-29 12:38:52 +0000 UTC FinishedAt: 2026-06-29 12:38:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-29 12:38:52 +0000 UTC FinishedAt: 2026-06-29 12:38:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-29 12:38:53 +0000 UTC FinishedAt: 2026-06-29 15:42:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"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:*b1e175f1-4e18-4e94-ae2f-3e5b7a44a1b4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8bfc523f-1073-403e-8064-14eaace24629,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-workflowllblz/series-workflowllblz-build-action-3979098845/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-workflowllblz/series-workflowllblz-build-action-3965443962/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-29 12:38:53 +0000 UTC FinishedAt: 2026-06-29 12:40:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-29 12:38:53 +0000 UTC FinishedAt: 2026-06-29 12:40:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"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-workflowllblz/series-workflowllblz-convert-artifact-4159105179/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[10].run-retest Phase: Failed StartedAt: 2026-06-29 12:38:53 +0000 UTC FinishedAt: 2026-06-29 12:41:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:retest-data,Default:nil,Value:*{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*{{=steps['base-build'].outputs.parameters.result ? jsonpath(steps['base-build'].outputs.parameters.result, '$.build_id') : ''}},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8bfc523f-1073-403e-8064-14eaace24629,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,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-workflowllblz/series-workflowllblz-build-action-3979098845/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-workflowllblz/series-workflowllblz-build-action-3965443962/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[10].run-retest[0] Phase: Succeeded StartedAt: 2026-06-29 12:38:53 +0000 UTC FinishedAt: 2026-06-29 12:40:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[10].run-retest[0].save-retest-task Phase: Succeeded StartedAt: 2026-06-29 12:38:53 +0000 UTC FinishedAt: 2026-06-29 12:39:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},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-workflowllblz/series-workflowllblz-convert-artifact-879159228/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-29 12:40:30 +0000 UTC FinishedAt: 2026-06-29 15:42:54 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-29 12:40:30 +0000 UTC FinishedAt: 2026-06-29 15:42:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*b1e175f1-4e18-4e94-ae2f-3e5b7a44a1b4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8bfc523f-1073-403e-8064-14eaace24629,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-workflowllblz/series-workflowllblz-build-action-3979098845/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-workflowllblz/series-workflowllblz-build-action-3965443962/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-workflowllblz/series-workflowllblz-convert-artifact-4159105179/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,} --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[10].run-retest[1] Phase: Failed StartedAt: 2026-06-29 12:40:30 +0000 UTC FinishedAt: 2026-06-29 12:41:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowllblz[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["ext4_xattr_inode_dec_ref_all","ext4_xattr_delete_inode","ext4_ea_inode_work","ext4_put_ea_inode","ext4_xattr_block_set","ext4_xattr_ibody_set"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"19598828-b970-4299-8a70-e9c30dcbcde0","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:{"findings":["9b2e3f5d-279a-469f-9f2a-05f96ea11587"]},track:KASAN)[10].run-retest[1].retest Phase: Failed StartedAt: 2026-06-29 12:40:30 +0000 UTC FinishedAt: 2026-06-29 12:41:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*{{=steps['base-build'].outputs.parameters.result ? jsonpath(steps['base-build'].outputs.parameters.result, '$.build_id') : ''}},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8bfc523f-1073-403e-8064-14eaace24629,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Previous reproducers,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-workflowllblz/series-workflowllblz-build-action-3979098845/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-workflowllblz/series-workflowllblz-build-action-3965443962/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:retest-task,Path:/data/retest.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-workflowllblz/series-workflowllblz-convert-artifact-879159228/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:*1,}