Name: series-workflowjzgwg Phase: Succeeded StartedAt: 2026-07-02 17:51:12 +0000 UTC FinishedAt: 2026-07-02 22:19:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[0] Phase: Succeeded StartedAt: 2026-07-02 17:51:12 +0000 UTC FinishedAt: 2026-07-02 18:11:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[0].run-triage Phase: Succeeded StartedAt: 2026-07-02 17:51:12 +0000 UTC FinishedAt: 2026-07-02 18:11:34 +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": "4a50a141f05a8d1737661b19ee22ff8455b94409", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4a50a141f05a8d1737661b19ee22ff8455b94409", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "ce304d7b-7f32-44b5-bf6f-e579abb42a5c" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_xattr_delete_inode", "ext4_xattr_block_set", "ext4_xattr_ibody_set", "ext4_put_ea_inode", "ext4_ea_inode_work", "ext4_xattr_release_block", "ext4_xattr_inode_dec_ref_all" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2Jsb2NrX3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lib2R5X3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3B1dF9lYV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X2VhX2lub2RlX3dvcmsmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NCYjMzk7cyBoYW5kbGluZyBvZiBFeHRlbmRlZCBBdHRyaWJ1dGUgKEVBKSBpbm9kZXMgYnkgaW50cm9kdWNpbmcgYSBkZWZlcnJlZCBpcHV0IG1lY2hhbmlzbSB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gSXQgcmVwbGFjZXMgdGhlIGBleHQ0X3hhdHRyX2lub2RlX2FycmF5YCB3aXRoIGEgbG9ja2xlc3MgbGlzdCBhbmQgYSBkZWxheWVkIHdvcmtxdWV1ZSAoYGV4dDRfZWFfaW5vZGVfd29ya2ApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBkZWFkbG9ja3Mgb2NjdXIgZHVyaW5nIEVBIGlub2RlIGV2aWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZGFlNzYyYjJhYzM5MzczNDY3MTlmZjJmZTkzZGJkOGFjNjJkYjE4NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMTg6MTA6MzggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggYjM3YzEzNmVhM2FiMzMuLmI5YjBhZGE3Nzc0YmI0IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NC5oXG5AQCAtMTA3MCw4ICYjNDM7MTA3MCwxNCBAQCBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcbiBcdCAqIGJldHdlZW4gcmVhZGVycyBvZiBFQXMgYW5kIHdyaXRlcnMgb2YgcmVndWxhciBmaWxlIGRhdGEsIHNvXG4gXHQgKiBpbnN0ZWFkIHdlIHN5bmNocm9uaXplIG9uIHhhdHRyX3NlbSB3aGVuIHJlYWRpbmcgb3IgY2hhbmdpbmdcbiBcdCAqIEVBcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEVBIGlub2RlcyAoRVhUNF9FQV9JTk9ERV9GTCkgZG8gbm90IHVzZSB4YXR0cl9zZW07IHRoZXkgcmV1c2VcbiYjNDM7XHQgKiB0aGUgc3BhY2UgZm9yIGRlZmVycmVkIGlwdXQgbGlua2FnZS5cbiBcdCAqL1xuLVx0c3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0c3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07XG4mIzQzO1x0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSBpX2VhX2lwdXRfbm9kZTtcbiYjNDM7XHR9O1xuIFxuIFx0LypcbiBcdCAqIElub2RlcyB3aXRoIEVYVDRfU1RBVEVfT1JQSEFOX0ZJTEUgdXNlIGlfb3JwaGFuX2lkeC4gT3RoZXJ3aXNlXG5AQCAtMTc3MCw2ICYjNDM7MTc3NiwxMSBAQCBzdHJ1Y3QgZXh0NF9zYl9pbmZvIHtcbiBcdHN0cnVjdCBleHQ0X2VzX3N0YXRzIHNfZXNfc3RhdHM7XG4gXHRzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfYmxvY2tfY2FjaGU7XG4gXHRzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfaW5vZGVfY2FjaGU7XG4mIzQzO1xuJiM0MztcdC8qIERlZmVycmVkIGlwdXQgZm9yIEVBIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyAqL1xuJiM0MztcdHN0cnVjdCBsbGlzdF9oZWFkIHNfZWFfaW5vZGVfdG9fZnJlZTtcbiYjNDM7XHRzdHJ1Y3QgZGVsYXllZF93b3JrIHNfZWFfaW5vZGVfd29yaztcbiYjNDM7XG4gXHRzcGlubG9ja190IHNfZXNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuIFxuIFx0LyogSm91cm5hbCB0cmlnZ2VycyBmb3IgY2hlY2tzdW0gY29tcHV0YXRpb24gKi9cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi43NDdjNTJjMjMyY2MwMyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtMTc2LDcgJiM0MzsxNzYsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdCAqICh4YXR0ciBibG9jayBmcmVlaW5nKSwgYml0bWFwLCBncm91cCBkZXNjcmlwdG9yIChpbm9kZSBmcmVlaW5nKVxuIFx0ICovXG4gXHRpbnQgZXh0cmFfY3JlZGl0cyA9IDY7XG4tXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xuIFx0Ym9vbCBmcmVlemVfcHJvdGVjdGVkID0gZmFsc2U7XG4gXG4gXHR0cmFjZV9leHQ0X2V2aWN0X2lub2RlKGlub2RlKTtcbkBAIC0yODEsOCAmIzQzOzI4MCw3IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0fVxuIFxuIFx0LyogUmVtb3ZlIHhhdHRyIHJlZmVyZW5jZXMuICovXG4tXHRlcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBcdTAwMjZlYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRcdCAgICAgIGV4dHJhX2NyZWRpdHMpO1xuJiM0MztcdGVyciA9IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUsIGV4dHJhX2NyZWRpdHMpO1xuIFx0aWYgKGVycikge1xuIFx0XHRleHQ0X3dhcm5pbmcoaW5vZGUtXHUwMDNlaV9zYiwgXCYjMzQ7eGF0dHIgZGVsZXRlIChlcnIgJWQpXCYjMzQ7LCBlcnIpO1xuIHN0b3BfaGFuZGxlOlxuQEAgLTI5MCw3ICYjNDM7Mjg4LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdGV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7XG4gXHRcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxuIFx0XHRcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiBcdFx0Z290byBub19kZWxldGU7XG4gXHR9XG4gXG5AQCAtMzIwLDcgJiM0MzszMTcsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG4gXHRpZiAoZnJlZXplX3Byb3RlY3RlZClcbiBcdFx0c2JfZW5kX2ludHdyaXRlKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiBcdHJldHVybjtcbiBub19kZWxldGU6XG4gXHQvKlxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xuaW5kZXggMjQ1ZjY3ZDEwZGVkMzQuLjNlZmE1YTgxN2JlZjRmIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3N1cGVyLmNcbkBAIC0xMzAzLDYgJiM0MzsxMzAzLDggQEAgc3RhdGljIHZvaWQgZXh0NF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdFx0XHQgXHUwMDI2c2ItXHUwMDNlc191dWlkKTtcbiBcbiBcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcbiYjNDM7XHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyB3aGlsZSBxdW90YSBpcyBzdGlsbCBhY3RpdmUuICovXG4mIzQzO1x0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuIFx0ZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7XG4gXG4gXHRkZXN0cm95X3dvcmtxdWV1ZShzYmktXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xuQEAgLTE0MjMsNiAmIzQzOzE0MjUsMTMgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0bWVtc2V0KFx1MDAyNmVpLVx1MDAzZWlfZHF1b3QsIDAsIHNpemVvZihlaS1cdTAwM2VpX2RxdW90KSk7XG4gI2VuZGlmXG4gXHRlaS1cdTAwM2VqaW5vZGUgPSBOVUxMO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVpbml0aWFsaXplIHhhdHRyX3NlbSBldmVyeSBhbGxvY2F0aW9uIGJlY2F1c2UgRUEgaW5vZGVzXG4mIzQzO1x0ICogc2hhcmUgdGhpcyBzcGFjZSB3aXRoIGlfZWFfaXB1dF9ub2RlICh2aWEgdW5pb24pIHdoaWNoIG1heVxuJiM0MztcdCAqIGhhdmUgb3ZlcndyaXR0ZW4gdGhlIHNlbWFwaG9yZSB3aGVuIHRoZSBzbGFiIG9iamVjdCB3YXNcbiYjNDM7XHQgKiBwcmV2aW91c2x5IHVzZWQgYXMgYW4gRUEgaW5vZGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW5pdF9yd3NlbShcdTAwMjZlaS1cdTAwM2V4YXR0cl9zZW0pO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZWktXHUwMDNlaV9yc3ZfY29udmVyc2lvbl9saXN0KTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmVpLVx1MDAzZWlfY29tcGxldGVkX2lvX2xvY2spO1xuIFx0ZWktXHUwMDNlaV9zeW5jX3RpZCA9IDA7XG5AQCAtMTQ4OCw3ICYjNDM7MTQ5Nyw2IEBAIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXG4gXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGZvbztcbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmVpLVx1MDAzZWlfb3JwaGFuKTtcbi1cdGluaXRfcndzZW0oXHUwMDI2ZWktXHUwMDNleGF0dHJfc2VtKTtcbiBcdGluaXRfcndzZW0oXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4gXHRpbm9kZV9pbml0X29uY2UoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbiBcdGV4dDRfZmNfaW5pdF9pbm9kZShcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUpO1xuQEAgLTU0OTcsNiAmIzQzOzU1MDUsOCBAQCBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdFx0XHQgIGV4dDRfaGFzX2ZlYXR1cmVfb3JwaGFuX3ByZXNlbnQoc2IpIHx8XG4gXHRcdFx0ICBleHQ0X2hhc19mZWF0dXJlX2pvdXJuYWxfbmVlZHNfcmVjb3Zlcnkoc2IpKTtcbiBcbiYjNDM7XHRleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzYmkpO1xuJiM0MztcbiBcdGlmIChleHQ0X2hhc19mZWF0dXJlX21tcChzYikgXHUwMDI2XHUwMDI2ICFzYl9yZG9ubHkoc2IpKSB7XG4gXHRcdGVyciA9IGV4dDRfbXVsdGlfbW91bnRfcHJvdGVjdChzYiwgbGU2NF90b19jcHUoZXMtXHUwMDNlc19tbXBfYmxvY2spKTtcbiBcdFx0aWYgKGVycilcbkBAIC01NzQ3LDYgJiM0Mzs1NzU3LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRyZXR1cm4gMDtcbiBcbiBmYWlsZWRfbW91bnQ5OlxuJiM0MztcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBxdW90YSBzaHV0ZG93biAqL1xuJiM0MztcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcbiBcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4gXHRleHQ0X3JlbGVhc2Vfb3JwaGFuX2luZm8oc2IpO1xuQEAgLTU3NjcsNiAmIzQzOzU3NzksOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0aWYgKEVYVDRfU0Ioc2IpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKVxuIFx0XHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG4gZmFpbGVkX21vdW50X3dxOlxuJiM0MztcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cbiYjNDM7XHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yayk7XG4gXHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVx1MDAzZXNfZWFfaW5vZGVfY2FjaGUpO1xuIFx0c2JpLVx1MDAzZXNfZWFfaW5vZGVfY2FjaGUgPSBOVUxMO1xuIFxuQEAgLTU3NzcsNiAmIzQzOzU3OTEsOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuIFx0fVxuIGZhaWxlZF9tb3VudDNhOlxuJiM0MztcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGZyb20gam91cm5hbCByZXBsYXkgKi9cbiYjNDM7XHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yayk7XG4gXHRleHQ0X2VzX3VucmVnaXN0ZXJfc2hyaW5rZXIoc2JpKTtcbiBmYWlsZWRfbW91bnQzOlxuIFx0LyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi9cbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmNcbmluZGV4IDk4MmExZjgzMWUyMjgyLi40YWU2Y2UxMTE1NjYwZSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC94YXR0ci5jXG5AQCAtMTE0LDEwICYjNDM7MTE0LDYgQEAgY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBleHQ0X3hhdHRyX2hhbmRsZXJzW10gPSB7XG4gI2RlZmluZSBFQV9JTk9ERV9DQUNIRShpbm9kZSlcdCgoKHN0cnVjdCBleHQ0X3NiX2luZm8gKikgXFxcbiBcdFx0XHRcdGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19mc19pbmZvKS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlKVxuIFxuLXN0YXRpYyBpbnRcbi1leHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuLVx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLVxuICNpZmRlZiBDT05GSUdfTE9DS0RFUFxuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9zZXRfY2xhc3Moc3RydWN0IGlub2RlICplYV9pbm9kZSlcbiB7XG5AQCAtNTY3LDcgJiM0Mzs1NjMsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZW50cnksXG4gXHRcdFx0XHRcdGVhX2lub2RlLVx1MDAzZWlfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTtcbiBcdH1cbiBvdXQ6XG4tXHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xMTA0LDEwICYjNDM7MTEwMCwxMCBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGVyciA9IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZihoYW5kbGUsIGVhX2lub2RlKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCYjMzQ7aW5jIHJlZiBlcnJvciAlZFwmIzM0OywgZXJyKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0XHRcdGdvdG8gY2xlYW51cDtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIFxuQEAgLTExMzMsNyAmIzQzOzExMjksNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcJiMzNDtjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcJiMzNDssXG4gXHRcdFx0XHRcdCAgIGVycik7XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0fVxuIFx0cmV0dXJuIHNhdmVkX2VycjtcbiB9XG5AQCAtMTE2MCw3ICYjNDM7MTE1Niw2IEBAIHN0YXRpYyB2b2lkXG4gZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0XHQgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3QsIGJvb2wgYmxvY2tfY3N1bSxcbi1cdFx0XHQgICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0ICAgICBpbnQgZXh0cmFfY3JlZGl0cywgYm9vbCBza2lwX3F1b3RhKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqZWFfaW5vZGU7XG5AQCAtMTE5NywxNCAmIzQzOzExOTIsNiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRlcnIgPSBleHQ0X2V4cGFuZF9pbm9kZV9hcnJheShlYV9pbm9kZV9hcnJheSwgZWFfaW5vZGUpO1xuLVx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuLVx0XHRcdFx0XHQgICBcJiMzNDtFeHBhbmQgaW5vZGUgYXJyYXkgZXJyPSVkXCYjMzQ7LCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4gXHRcdGVyciA9IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0c19mbihoYW5kbGUsIGNyZWRpdHMsIGNyZWRpdHMsXG4gXHRcdFx0ZXh0NF9mcmVlX21ldGFkYXRhX3Jldm9rZV9jcmVkaXRzKHBhcmVudC1cdTAwM2VpX3NiLCAxKSxcbiBcdFx0XHRleHQ0X3hhdHRyX3Jlc3RhcnRfZm4oaGFuZGxlLCBwYXJlbnQsIGJoLCBibG9ja19jc3VtLFxuQEAgLTEyMTIsNiAmIzQzOzExOTksNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcJiMzNDtFbnN1cmUgY3JlZGl0cyBlcnI9JWRcJiMzNDssXG4gXHRcdFx0XHRcdCAgIGVycik7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFx0XHRpZiAoZXJyIFx1MDAzZSAwKSB7XG5AQCAtMTIyMSw2ICYjNDM7MTIwOSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFx0XCYjMzQ7UmUtZ2V0IHdyaXRlIGFjY2VzcyBlcnI9JWRcJiMzNDssXG4gXHRcdFx0XHRcdFx0ZXJyKTtcbiYjNDM7XHRcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXHRcdH1cbkBAIC0xMjI5LDYgJiM0MzsxMjE4LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCYjMzQ7ZWFfaW5vZGUgZGVjIHJlZiBlcnI9JWRcJiMzNDssXG4gXHRcdFx0XHRcdCAgIGVycik7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuQEAgLTEyNDUsNiAmIzQzOzEyMzUsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRlbnRyeS1cdTAwM2VlX3ZhbHVlX2ludW0gPSAwO1xuIFx0XHRlbnRyeS1cdTAwM2VlX3ZhbHVlX3NpemUgPSAwO1xuIFxuJiM0MztcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0XHRkaXJ0eSA9IHRydWU7XG4gXHR9XG4gXG5AQCAtMTI3MSw3ICYjNDM7MTI2Miw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gc3RhdGljIHZvaWRcbiBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi1cdFx0XHQgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiBcdFx0XHQgaW50IGV4dHJhX2NyZWRpdHMpXG4ge1xuIFx0c3RydWN0IG1iX2NhY2hlICplYV9ibG9ja19jYWNoZSA9IEVBX0JMT0NLX0NBQ0hFKGlub2RlKTtcbkBAIC0xMzEzLDcgJiM0MzsxMzAzLDYgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBiaCxcbiBcdFx0XHRcdFx0XHQgICAgIEJGSVJTVChiaCksXG4gXHRcdFx0XHRcdFx0ICAgICB0cnVlIC8qIGJsb2NrX2NzdW0gKi8sXG4tXHRcdFx0XHRcdFx0ICAgICBlYV9pbm9kZV9hcnJheSxcbiBcdFx0XHRcdFx0XHQgICAgIGV4dHJhX2NyZWRpdHMsXG4gXHRcdFx0XHRcdFx0ICAgICB0cnVlIC8qIHNraXBfcXVvdGEgKi8pO1xuIFx0XHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGJoLCAwLCAxLFxuQEAgLTE1MDUsNyAmIzQzOzE0OTQsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdGlmIChleHQ0X3hhdHRyX2lub2RlX2RlY19yZWYoaGFuZGxlLCBlYV9pbm9kZSkpXG4gXHRcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFwmIzM0O2NsZWFudXAgZGVjIHJlZiBlcnJvciAlZFwmIzM0OywgZXJyKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0XHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4gXHRcdH1cbiBcbkBAIC0xNTY0LDcgJiM0MzsxNTUzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLFxuIFx0XHRcdGt2ZnJlZShlYV9kYXRhKTtcbiBcdFx0XHRyZXR1cm4gZWFfaW5vZGU7XG4gXHRcdH1cbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRuZXh0X2VudHJ5OlxuIFx0XHRjZSA9IG1iX2NhY2hlX2VudHJ5X2ZpbmRfbmV4dChlYV9pbm9kZV9jYWNoZSwgY2UpO1xuIFx0fVxuQEAgLTE2MTUsNyAmIzQzOzE2MDQsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRcdCAgICAgIGVhX2lub2RlLVx1MDAzZWlfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTtcbiBcdHJldHVybiBlYV9pbm9kZTtcbiBvdXRfZXJyOlxuLVx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBOVUxMLCB2YWx1ZV9sZW4pO1xuIFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiB9XG5AQCAtMTg0OCw3ICYjNDM7MTgzNyw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSxcbiBcbiBcdHJldCA9IDA7XG4gb3V0OlxuLVx0aXB1dChvbGRfZWFfaW5vZGUpO1xuJiM0MztcdGV4dDRfcHV0X2VhX2lub2RlKG9sZF9lYV9pbm9kZSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0yMDEwLDcgJiM0MzsxOTk5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdG9sZF9lYV9pbm9kZV9xdW90YSA9IGxlMzJfdG9fY3B1KFxuIFx0XHRcdFx0XHRcdHMtXHUwMDNlaGVyZS1cdTAwM2VlX3ZhbHVlX3NpemUpO1xuIFx0XHRcdH1cbi1cdFx0XHRpcHV0KHRtcF9pbm9kZSk7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHRtcF9pbm9kZSk7XG4gXG4gXHRcdFx0cy1cdTAwM2VoZXJlLVx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XG4gXHRcdFx0cy1cdTAwM2VoZXJlLVx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XG5AQCAtMjE1MCw3ICYjNDM7MjEzOSw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHRcdCAgIFwmIzM0O2RlYyByZWYgZXJyb3I9JWRcJiMzNDssXG4gXHRcdFx0XHRcdFx0XHQgICBlcnJvcik7XG4tXHRcdFx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRcdFx0XHRlYV9pbm9kZSA9IE5VTEw7XG4gXHRcdFx0fVxuIFxuQEAgLTIxODIsMTIgJiM0MzsyMTcxLDggQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBcdC8qIERyb3AgdGhlIHByZXZpb3VzIHhhdHRyIGJsb2NrLiAqL1xuIFx0aWYgKGJzLVx1MDAzZWJoIFx1MDAyNlx1MDAyNiBicy1cdTAwM2ViaCAhPSBuZXdfYmgpIHtcbi1cdFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcbi1cbiBcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJzLVx1MDAzZWJoLFxuLVx0XHRcdFx0XHQgXHUwMDI2ZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0XHRcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xuLVx0XHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0fVxuIFx0ZXJyb3IgPSAwO1xuIFxuQEAgLTIyMDMsNyAmIzQzOzIxODgsNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XG4gXHRcdH1cbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHR9XG4gXHRpZiAoY2UpXG4gXHRcdG1iX2NhY2hlX2VudHJ5X3B1dChlYV9ibG9ja19jYWNoZSwgY2UpO1xuQEAgLTIyODUsNyAmIzQzOzIyNzAsNyBAQCBpbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdCAgICBpX3NpemVfcmVhZChlYV9pbm9kZSkpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIGVycm9yO1xuIFx0fVxuQEAgLTIyOTcsNyAmIzQzOzIyODIsNyBAQCBpbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0aGVhZGVyLVx1MDAzZWhfbWFnaWMgPSBjcHVfdG9fbGUzMigwKTtcbiBcdFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUik7XG4gXHR9XG4tXHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjg2Myw0NiAmIzQzOzI4NDgsNiBAQCBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tI2RlZmluZSBFSUFfSU5DUiAxNiAvKiBtdXN0IGJlIDJebiAqL1xuLSNkZWZpbmUgRUlBX01BU0sgKEVJQV9JTkNSIC0gMSlcbi1cbi0vKiBBZGQgdGhlIGxhcmdlIHhhdHRyIEBpbm9kZSBpbnRvIEBlYV9pbm9kZV9hcnJheSBmb3IgZGVmZXJyZWQgaXB1dCgpLlxuLSAqIElmIEBlYV9pbm9kZV9hcnJheSBpcyBuZXcgb3IgZnVsbCBpdCB3aWxsIGJlIGdyb3duIGFuZCB0aGUgb2xkXG4tICogY29udGVudHMgY29waWVkIG92ZXIuXG4tICovXG4tc3RhdGljIGludFxuLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4tXHRcdFx0c3RydWN0IGlub2RlICppbm9kZSlcbi17XG4tXHRpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpIHtcbi1cdFx0Lypcbi1cdFx0ICogU3RhcnQgd2l0aCAxNSBpbm9kZXMsIHNvIGl0IGZpdHMgaW50byBhIHBvd2VyLW9mLXR3byBzaXplLlxuLVx0XHQgKi9cbi1cdFx0KCplYV9pbm9kZV9hcnJheSkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxuLVx0XHRcdFx0XHRcdCBFSUFfTUFTSywgR0ZQX05PRlMpO1xuLVx0XHRpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdCgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50ID0gMDtcbi1cdH0gZWxzZSBpZiAoKCgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50IFx1MDAyNiBFSUFfTUFTSykgPT0gRUlBX01BU0spIHtcbi1cdFx0LyogZXhwYW5kIHRoZSBhcnJheSBvbmNlIGFsbCAxNSAmIzQzOyBuICogMTYgc2xvdHMgYXJlIGZ1bGwgKi9cbi1cdFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKm5ld19hcnJheSA9IE5VTEw7XG4tXG4tXHRcdG5ld19hcnJheSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXG4tXHRcdFx0XHRcdCAoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vjb3VudCAmIzQzOyBFSUFfSU5DUixcbi1cdFx0XHRcdFx0IEdGUF9OT0ZTKTtcbi1cdFx0aWYgKG5ld19hcnJheSA9PSBOVUxMKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHRtZW1jcHkobmV3X2FycmF5LCAqZWFfaW5vZGVfYXJyYXksXG4tXHRcdCAgICAgICBzdHJ1Y3Rfc2l6ZSgqZWFfaW5vZGVfYXJyYXksIGlub2Rlcyxcbi1cdFx0XHRcdCAgICgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50KSk7XG4tXHRcdGtmcmVlKCplYV9pbm9kZV9hcnJheSk7XG4tXHRcdCplYV9pbm9kZV9hcnJheSA9IG5ld19hcnJheTtcbi1cdH1cbi1cdCgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50JiM0MzsmIzQzOztcbi1cdCgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWlub2Rlc1soKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vjb3VudCAtIDFdID0gaW5vZGU7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gLypcbiAgKiBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSgpXG4gICpcbkBAIC0yOTEzLDcgJiM0MzsyODU4LDYgQEAgZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiAgKiByZWZlcmVuY2VzIG9uIHhhdHRyIGJsb2NrIGFuZCB4YXR0ciBpbm9kZXMuXG4gICovXG4gaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0ICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0ICAgIGludCBleHRyYV9jcmVkaXRzKVxuIHtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xuQEAgLTI5NTIsNyAmIzQzOzI4OTYsNiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGlsb2MuYmgsXG4gXHRcdFx0XHRcdFx0ICAgICBJRklSU1QoaGVhZGVyKSxcbiBcdFx0XHRcdFx0XHQgICAgIGZhbHNlIC8qIGJsb2NrX2NzdW0gKi8sXG4tXHRcdFx0XHRcdFx0ICAgICBlYV9pbm9kZV9hcnJheSxcbiBcdFx0XHRcdFx0XHQgICAgIGV4dHJhX2NyZWRpdHMsXG4gXHRcdFx0XHRcdFx0ICAgICBmYWxzZSAvKiBza2lwX3F1b3RhICovKTtcbiBcdH1cbkBAIC0yOTg2LDEyICYjNDM7MjkyOSwxMiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLFxuIFx0XHRcdFx0XHQgICAgICBsZTMyX3RvX2NwdShlbnRyeS1cdTAwM2VlX3ZhbHVlX3NpemUpKTtcbi1cdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHR9XG4gXG4gXHRcdH1cbiBcbi1cdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLCBlYV9pbm9kZV9hcnJheSxcbiYjNDM7XHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcbiBcdFx0XHRcdFx0IGV4dHJhX2NyZWRpdHMpO1xuIFx0XHQvKlxuIFx0XHQgKiBVcGRhdGUgaV9maWxlX2FjbCB2YWx1ZSBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiB0aGF0IHJlbGVhc2VzXG5AQCAtMzAxMywxNiAmIzQzOzI5NTYsNjMgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuLXZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSlcbiYjNDM7LypcbiYjNDM7ICogV29ya2VyIGZ1bmN0aW9uIGZvciBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0LiAgUHJvY2Vzc2VzIGFsbCBpbm9kZXMgcXVldWVkXG4mIzQzOyAqIG9uIHNfZWFfaW5vZGVfdG9fZnJlZSBpbiBhIGNvbnRleHQgZnJlZSBvZiB4YXR0cl9zZW0vamJkMiBoYW5kbGUgbG9ja3MuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBleHQ0X2VhX2lub2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbi1cdGludCBpZHg7XG4mIzQzO1x0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSxcbiYjNDM7XHRcdFx0XHRcdFx0c3RydWN0IGV4dDRfc2JfaW5mbyxcbiYjNDM7XHRcdFx0XHRcdFx0c19lYV9pbm9kZV93b3JrKTtcbiYjNDM7XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XG4gXG4tXHRpZiAoZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcbiYjNDM7XHR3aGlsZSAobm9kZSkge1xuJiM0MztcdFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBjb250YWluZXJfb2Yobm9kZSxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8sIGlfZWFfaXB1dF9ub2RlKTtcbiYjNDM7XHRcdG5vZGUgPSBub2RlLVx1MDAzZW5leHQ7XG4mIzQzO1x0XHRpcHV0KFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZWxlYXNlIGEgVkZTIHJlZmVyZW5jZSBvbiBhbiBFQSBpbm9kZS4gIE11c3QgYmUgdXNlZCBpbnN0ZWFkIG9mIGlwdXQoKVxuJiM0MzsgKiBpbiBhbnkgY29udGV4dCB3aGVyZSB4YXR0cl9zZW0gb3IgYSBqYmQyIGhhbmRsZSBpcyBoZWxkLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCByZWZlcmVuY2UsIGRyb3BzIGl0IGltbWVkaWF0ZWx5IHZpYVxuJiM0MzsgKiBpcHV0X2lmX25vdF9sYXN0KCkgd2l0aCBubyBmdXJ0aGVyIGFjdGlvbiBuZWVkZWQuXG4mIzQzOyAqXG4mIzQzOyAqIElmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLCB0aGUgaW5vZGUgaXMgbGlua2VkIG9udG8gYSBwZXItc2JcbiYjNDM7ICogbGxpc3QgdmlhIGlfZWFfaXB1dF9ub2RlIChlbWJlZGRlZCBpbiBleHQ0X2lub2RlX2luZm8sIHNoYXJpbmcgc3BhY2VcbiYjNDM7ICogd2l0aCB0aGUgdW51c2VkIHhhdHRyX3NlbSkgYW5kIGEgZGVsYXllZCB3b3JrZXIgcGVyZm9ybXMgdGhlIGZpbmFsXG4mIzQzOyAqIGlwdXQoKSBpbiBhIGNsZWFuIGNvbnRleHQuXG4mIzQzOyAqXG4mIzQzOyAqIE5vdGU6IHdoaWxlIGFuIGlub2RlIGlzIG9uIHNfZWFfaW5vZGVfdG9fZnJlZSwgdGhlIHVuY29uc3VtZWQgaV9jb3VudFxuJiM0MzsgKiByZWZlcmVuY2UgKHN0aWxsIDEpIGtlZXBzIGl0IGluIHRoZSBpbm9kZSBjYWNoZSwgc28gYW55IGNvbmN1cnJlbnRcbiYjNDM7ICogaWdldCgpIGJ1bXBzIGlfY291bnQgdG8gXHUwMDNlPSAyIGFuZCBpcHV0X2lmX25vdF9sYXN0KCkgd2lsbCBzdWNjZWVkLlxuJiM0MzsgKiBOb2JvZHkgd2lsbCBhZGQgdGhlIGlub2RlIGEgc2Vjb25kIHRpbWUgdW50aWwgZXh0NF9lYV9pbm9kZV93b3JrKClcbiYjNDM7ICogZHJvcHMgdGhhdCByZWZlcmVuY2UgdmlhIGlwdXQoKS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdGlmICghaW5vZGUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0V0FSTl9PTl9PTkNFKCEoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSk7XG4mIzQzO1x0aWYgKGlwdXRfaWZfbm90X2xhc3QoaW5vZGUpKVxuIFx0XHRyZXR1cm47XG4mIzQzO1x0bGxpc3RfYWRkKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9lYV9pcHV0X25vZGUsXG4mIzQzO1x0XHQgIFx1MDAyNkVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZSBhIHNob3J0IGRlbGF5IHRvIGFsbG93IG11bHRpcGxlIEVBIGlub2RlcyB0byBhY2N1bXVsYXRlLFxuJiM0MztcdCAqIHJlZHVjaW5nIHdvcmtxdWV1ZSB3YWtldXBzIHdoZW4gc2V2ZXJhbCBhcmUgcmVsZWFzZWQgdG9nZXRoZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNkVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19lYV9pbm9kZV93b3JrLCAxKTtcbiYjNDM7fVxuIFxuLVx0Zm9yIChpZHggPSAwOyBpZHggXHUwMDNjIGVhX2lub2RlX2FycmF5LVx1MDAzZWNvdW50OyAmIzQzOyYjNDM7aWR4KVxuLVx0XHRpcHV0KGVhX2lub2RlX2FycmF5LVx1MDAzZWlub2Rlc1tpZHhdKTtcbi1cdGtmcmVlKGVhX2lub2RlX2FycmF5KTtcbiYjNDM7dm9pZCBleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXG4mIzQzO3tcbiYjNDM7XHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XG4mIzQzO1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yaywgZXh0NF9lYV9pbm9kZV93b3JrKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmggYi9mcy9leHQ0L3hhdHRyLmhcbmluZGV4IDFmZWRmNDRkNGZiNjVlLi44MjFkYzZhNTBlNTFlNyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC94YXR0ci5oXG5AQCAtMTMxLDExICYjNDM7MTMxLDYgQEAgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCB7XG4gXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4gfTtcbiBcbi1zdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSB7XG4tXHR1bnNpZ25lZCBpbnQgY291bnQ7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2Rlc1tdIF9fY291bnRlZF9ieShjb3VudCk7XG4tfTtcbi1cbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXI7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXI7XG5AQCAtMTg3LDkgJiM0MzsxODIsOSBAQCBleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0Ym9vbCBpc19jcmVhdGUpO1xuIFxuIGV4dGVybiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdCAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqYXJyYXksXG4gXHRcdFx0XHQgICBpbnQgZXh0cmFfY3JlZGl0cyk7XG4tZXh0ZXJuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICphcnJheSk7XG4mIzQzO2V4dGVybiB2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSk7XG4mIzQzO2V4dGVybiB2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFxuIGV4dGVybiBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbiBcdFx0XHQgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCBkMTA4OTdiM2ExZTM1MC4uNzA5NTE5NjE3YzdhMzggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaFxuQEAgLTI0MTMsNiAmIzQzOzI0MTMsMjEgQEAgc3RhdGljIGlubGluZSB2b2lkIHN1cGVyX3NldF9zeXNmc19uYW1lX2dlbmVyaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hcbiBleHRlcm4gdm9pZCBpaG9sZChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7XG4gZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7XG4gdm9pZCBpcHV0X25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpcHV0X2lmX25vdF9sYXN0IC0gZHJvcCBhbiBpbm9kZSByZWZlcmVuY2Ugb25seSBpZiBpdCBpcyBub3QgdGhlIGxhc3Qgb25lXG4mIzQzOyAqIEBpbm9kZTogaW5vZGUgdG8gcHV0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVmZXJlbmNlIHdhcyBkcm9wcGVkLCBmYWxzZSBpZiB0aGlzIHdhcyB0aGUgbGFzdFxuJiM0MzsgKiByZWZlcmVuY2UgYW5kIHRoZSBjYWxsZXIgbXVzdCBhcnJhbmdlIGZvciBmaW5hbCBpcHV0KCkgaW4gYSBzYWZlIGNvbnRleHQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGlwdXRfaWZfbm90X2xhc3Qoc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdFZGU19CVUdfT05fSU5PREUoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgKElfRlJFRUlORyB8IElfQ0xFQVIpLCBpbm9kZSk7XG4mIzQzO1x0VkZTX0JVR19PTl9JTk9ERShpY291bnRfcmVhZF9vbmNlKGlub2RlKSBcdTAwM2MgMSwgaW5vZGUpO1xuJiM0MztcdHJldHVybiBhdG9taWNfYWRkX3VubGVzcyhcdTAwMjZpbm9kZS1cdTAwM2VpX2NvdW50LCAtMSwgMSk7XG4mIzQzO31cbiYjNDM7XG4gaW50IGlub2RlX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSxcbiBcdFx0dW5zaWduZWQgaW50IGZsYWdzKTtcbiBpbnQgZ2VuZXJpY191cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfeGF0dHJfZGVsZXRlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfYmxvY2tfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaWJvZHlfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfcHV0X2VhX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfZWFfaW5vZGVfd29yayYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2smIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleHQ0JiMzOTtzIGhhbmRsaW5nIG9mIEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIGlub2RlcyBieSBpbnRyb2R1Y2luZyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBJdCByZXBsYWNlcyB0aGUgYGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlgIHdpdGggYSBsb2NrbGVzcyBsaXN0IGFuZCBhIGRlbGF5ZWQgd29ya3F1ZXVlIChgZXh0NF9lYV9pbm9kZV93b3JrYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGRlYWRsb2NrcyBvY2N1ciBkdXJpbmcgRUEgaW5vZGUgZXZpY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRhZTc2MmIyYWMzOTM3MzQ2NzE5ZmYyZmU5M2RiZDhhYzYyZGIxODUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyIDE4OjEwOjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaAppbmRleCBiMzdjMTM2ZWEzYWIzMy4uYjliMGFkYTc3NzRiYjQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NC5oCkBAIC0xMDcwLDggJiM0MzsxMDcwLDE0IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8gewogCSAqIGJldHdlZW4gcmVhZGVycyBvZiBFQXMgYW5kIHdyaXRlcnMgb2YgcmVndWxhciBmaWxlIGRhdGEsIHNvCiAJICogaW5zdGVhZCB3ZSBzeW5jaHJvbml6ZSBvbiB4YXR0cl9zZW0gd2hlbiByZWFkaW5nIG9yIGNoYW5naW5nCiAJICogRUFzLgomIzQzOwkgKgomIzQzOwkgKiBFQSBpbm9kZXMgKEVYVDRfRUFfSU5PREVfRkwpIGRvIG5vdCB1c2UgeGF0dHJfc2VtOyB0aGV5IHJldXNlCiYjNDM7CSAqIHRoZSBzcGFjZSBmb3IgZGVmZXJyZWQgaXB1dCBsaW5rYWdlLgogCSAqLwotCXN0cnVjdCByd19zZW1hcGhvcmUgeGF0dHJfc2VtOwomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTsKJiM0MzsJCXN0cnVjdCBsbGlzdF9ub2RlIGlfZWFfaXB1dF9ub2RlOwomIzQzOwl9OwogCiAJLyoKIAkgKiBJbm9kZXMgd2l0aCBFWFQ0X1NUQVRFX09SUEhBTl9GSUxFIHVzZSBpX29ycGhhbl9pZHguIE90aGVyd2lzZQpAQCAtMTc3MCw2ICYjNDM7MTc3NiwxMSBAQCBzdHJ1Y3QgZXh0NF9zYl9pbmZvIHsKIAlzdHJ1Y3QgZXh0NF9lc19zdGF0cyBzX2VzX3N0YXRzOwogCXN0cnVjdCBtYl9jYWNoZSAqc19lYV9ibG9ja19jYWNoZTsKIAlzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfaW5vZGVfY2FjaGU7CiYjNDM7CiYjNDM7CS8qIERlZmVycmVkIGlwdXQgZm9yIEVBIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyAqLwomIzQzOwlzdHJ1Y3QgbGxpc3RfaGVhZCBzX2VhX2lub2RlX3RvX2ZyZWU7CiYjNDM7CXN0cnVjdCBkZWxheWVkX3dvcmsgc19lYV9pbm9kZV93b3JrOwomIzQzOwogCXNwaW5sb2NrX3Qgc19lc19sb2NrIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiAKIAkvKiBKb3VybmFsIHRyaWdnZXJzIGZvciBjaGVja3N1bSBjb21wdXRhdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jCmluZGV4IGNlOTk4MDdjNWY1YjJjLi43NDdjNTJjMjMyY2MwMyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtMTc2LDcgJiM0MzsxNzYsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAkgKiAoeGF0dHIgYmxvY2sgZnJlZWluZyksIGJpdG1hcCwgZ3JvdXAgZGVzY3JpcHRvciAoaW5vZGUgZnJlZWluZykKIAkgKi8KIAlpbnQgZXh0cmFfY3JlZGl0cyA9IDY7Ci0Jc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDsKIAlib29sIGZyZWV6ZV9wcm90ZWN0ZWQgPSBmYWxzZTsKIAogCXRyYWNlX2V4dDRfZXZpY3RfaW5vZGUoaW5vZGUpOwpAQCAtMjgxLDggJiM0MzsyODAsNyBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAl9CiAKIAkvKiBSZW1vdmUgeGF0dHIgcmVmZXJlbmNlcy4gKi8KLQllcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCAmYW1wO2VhX2lub2RlX2FycmF5LAotCQkJCSAgICAgIGV4dHJhX2NyZWRpdHMpOwomIzQzOwllcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBleHRyYV9jcmVkaXRzKTsKIAlpZiAoZXJyKSB7CiAJCWV4dDRfd2FybmluZyhpbm9kZS0mZ3Q7aV9zYiwgJiMzNDt4YXR0ciBkZWxldGUgKGVyciAlZCkmIzM0OywgZXJyKTsKIHN0b3BfaGFuZGxlOgpAQCAtMjkwLDcgJiM0MzsyODgsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAkJZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTsKIAkJaWYgKGZyZWV6ZV9wcm90ZWN0ZWQpCiAJCQlzYl9lbmRfaW50d3JpdGUoaW5vZGUtJmd0O2lfc2IpOwotCQlleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpOwogCQlnb3RvIG5vX2RlbGV0ZTsKIAl9CiAKQEAgLTMyMCw3ICYjNDM7MzE3LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKIAlpZiAoZnJlZXplX3Byb3RlY3RlZCkKIAkJc2JfZW5kX2ludHdyaXRlKGlub2RlLSZndDtpX3NiKTsKLQlleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpOwogCXJldHVybjsKIG5vX2RlbGV0ZToKIAkvKgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jCmluZGV4IDI0NWY2N2QxMGRlZDM0Li4zZWZhNWE4MTdiZWY0ZiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtMTMwMyw2ICYjNDM7MTMwMyw4IEBAIHN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJCQkgJmFtcDtzYi0mZ3Q7c191dWlkKTsKIAogCWV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTsKJiM0MzsJLyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgd2hpbGUgcXVvdGEgaXMgc3RpbGwgYWN0aXZlLiAqLwomIzQzOwlmbHVzaF9kZWxheWVkX3dvcmsoJmFtcDtzYmktJmd0O3NfZWFfaW5vZGVfd29yayk7CiAJZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7CiAKIAlkZXN0cm95X3dvcmtxdWV1ZShzYmktJmd0O3Jzdl9jb252ZXJzaW9uX3dxKTsKQEAgLTE0MjMsNiAmIzQzOzE0MjUsMTMgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCW1lbXNldCgmYW1wO2VpLSZndDtpX2RxdW90LCAwLCBzaXplb2YoZWktJmd0O2lfZHF1b3QpKTsKICNlbmRpZgogCWVpLSZndDtqaW5vZGUgPSBOVUxMOwomIzQzOwkvKgomIzQzOwkgKiBSZWluaXRpYWxpemUgeGF0dHJfc2VtIGV2ZXJ5IGFsbG9jYXRpb24gYmVjYXVzZSBFQSBpbm9kZXMKJiM0MzsJICogc2hhcmUgdGhpcyBzcGFjZSB3aXRoIGlfZWFfaXB1dF9ub2RlICh2aWEgdW5pb24pIHdoaWNoIG1heQomIzQzOwkgKiBoYXZlIG92ZXJ3cml0dGVuIHRoZSBzZW1hcGhvcmUgd2hlbiB0aGUgc2xhYiBvYmplY3Qgd2FzCiYjNDM7CSAqIHByZXZpb3VzbHkgdXNlZCBhcyBhbiBFQSBpbm9kZS4KJiM0MzsJICovCiYjNDM7CWluaXRfcndzZW0oJmFtcDtlaS0mZ3Q7eGF0dHJfc2VtKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2VpLSZndDtpX3Jzdl9jb252ZXJzaW9uX2xpc3QpOwogCXNwaW5fbG9ja19pbml0KCZhbXA7ZWktJmd0O2lfY29tcGxldGVkX2lvX2xvY2spOwogCWVpLSZndDtpX3N5bmNfdGlkID0gMDsKQEAgLTE0ODgsNyAmIzQzOzE0OTcsNiBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKQogCXN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gZm9vOwogCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtlaS0mZ3Q7aV9vcnBoYW4pOwotCWluaXRfcndzZW0oJmFtcDtlaS0mZ3Q7eGF0dHJfc2VtKTsKIAlpbml0X3J3c2VtKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0pOwogCWlub2RlX2luaXRfb25jZSgmYW1wO2VpLSZndDt2ZnNfaW5vZGUpOwogCWV4dDRfZmNfaW5pdF9pbm9kZSgmYW1wO2VpLSZndDt2ZnNfaW5vZGUpOwpAQCAtNTQ5Nyw2ICYjNDM7NTUwNSw4IEBAIHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCQkJICBleHQ0X2hhc19mZWF0dXJlX29ycGhhbl9wcmVzZW50KHNiKSB8fAogCQkJICBleHQ0X2hhc19mZWF0dXJlX2pvdXJuYWxfbmVlZHNfcmVjb3Zlcnkoc2IpKTsKIAomIzQzOwlleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzYmkpOwomIzQzOwogCWlmIChleHQ0X2hhc19mZWF0dXJlX21tcChzYikgJmFtcDsmYW1wOyAhc2JfcmRvbmx5KHNiKSkgewogCQllcnIgPSBleHQ0X211bHRpX21vdW50X3Byb3RlY3Qoc2IsIGxlNjRfdG9fY3B1KGVzLSZndDtzX21tcF9ibG9jaykpOwogCQlpZiAoZXJyKQpAQCAtNTc0Nyw2ICYjNDM7NTc1Nyw4IEBAIHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCXJldHVybiAwOwogCiBmYWlsZWRfbW91bnQ5OgomIzQzOwkvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgcXVvdGEgc2h1dGRvd24gKi8KJiM0MzsJZmx1c2hfZGVsYXllZF93b3JrKCZhbXA7c2JpLSZndDtzX2VhX2lub2RlX3dvcmspOwogCWV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpOwogZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWQKIAlleHQ0X3JlbGVhc2Vfb3JwaGFuX2luZm8oc2IpOwpAQCAtNTc2Nyw2ICYjNDM7NTc3OSw4IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkCiAJaWYgKEVYVDRfU0Ioc2IpLSZndDtyc3ZfY29udmVyc2lvbl93cSkKIAkJZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktJmd0O3Jzdl9jb252ZXJzaW9uX3dxKTsKIGZhaWxlZF9tb3VudF93cToKJiM0MzsJLyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIGZyZWVpbmcgc3RydWN0dXJlcyAqLwomIzQzOwlmbHVzaF9kZWxheWVkX3dvcmsoJmFtcDtzYmktJmd0O3NfZWFfaW5vZGVfd29yayk7CiAJZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS0mZ3Q7c19lYV9pbm9kZV9jYWNoZSk7CiAJc2JpLSZndDtzX2VhX2lub2RlX2NhY2hlID0gTlVMTDsKIApAQCAtNTc3Nyw2ICYjNDM7NTc5MSw4IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkCiAJCWV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLSZndDtzX2pvdXJuYWwpOwogCX0KIGZhaWxlZF9tb3VudDNhOgomIzQzOwkvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBmcm9tIGpvdXJuYWwgcmVwbGF5ICovCiYjNDM7CWZsdXNoX2RlbGF5ZWRfd29yaygmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV93b3JrKTsKIAlleHQ0X2VzX3VucmVnaXN0ZXJfc2hyaW5rZXIoc2JpKTsKIGZhaWxlZF9tb3VudDM6CiAJLyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi8KZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuYwppbmRleCA5ODJhMWY4MzFlMjI4Mi4uNGFlNmNlMTExNTY2MGUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQveGF0dHIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3hhdHRyLmMKQEAgLTExNCwxMCAmIzQzOzExNCw2IEBAIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyc1tdID0gewogI2RlZmluZSBFQV9JTk9ERV9DQUNIRShpbm9kZSkJKCgoc3RydWN0IGV4dDRfc2JfaW5mbyAqKSBcCiAJCQkJaW5vZGUtJmd0O2lfc2ItJmd0O3NfZnNfaW5mbyktJmd0O3NfZWFfaW5vZGVfY2FjaGUpCiAKLXN0YXRpYyBpbnQKLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCi0JCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLQogI2lmZGVmIENPTkZJR19MT0NLREVQCiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpCiB7CkBAIC01NjcsNyAmIzQzOzU2Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeSwKIAkJCQkJZWFfaW5vZGUtJmd0O2lfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTsKIAl9CiBvdXQ6Ci0JaXB1dChlYV9pbm9kZSk7CiYjNDM7CWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMTA0LDEwICYjNDM7MTEwMCwxMCBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWVyciA9IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZihoYW5kbGUsIGVhX2lub2RlKTsKIAkJaWYgKGVycikgewogCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCAmIzM0O2luYyByZWYgZXJyb3IgJWQmIzM0OywgZXJyKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJCWdvdG8gY2xlYW51cDsKIAkJfQotCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAl9CiAJcmV0dXJuIDA7CiAKQEAgLTExMzMsNyAmIzQzOzExMjksNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWlmIChlcnIpCiAJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsICYjMzQ7Y2xlYW51cCBkZWMgcmVmIGVycm9yICVkJiMzNDssCiAJCQkJCSAgIGVycik7Ci0JCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpOwogCX0KIAlyZXR1cm4gc2F2ZWRfZXJyOwogfQpAQCAtMTE2MCw3ICYjNDM7MTE1Niw2IEBAIHN0YXRpYyB2b2lkCiBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3QsIGJvb2wgYmxvY2tfY3N1bSwKLQkJCSAgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKIAkJCSAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlOwpAQCAtMTE5NywxNCAmIzQzOzExOTIsNiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQlpZiAoZXJyKQogCQkJY29udGludWU7CiAKLQkJZXJyID0gZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoZWFfaW5vZGVfYXJyYXksIGVhX2lub2RlKTsKLQkJaWYgKGVycikgewotCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLAotCQkJCQkgICAmIzM0O0V4cGFuZCBpbm9kZSBhcnJheSBlcnI9JWQmIzM0OywgZXJyKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwotCQkJY29udGludWU7Ci0JCX0KLQogCQllcnIgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNfZm4oaGFuZGxlLCBjcmVkaXRzLCBjcmVkaXRzLAogCQkJZXh0NF9mcmVlX21ldGFkYXRhX3Jldm9rZV9jcmVkaXRzKHBhcmVudC0mZ3Q7aV9zYiwgMSksCiAJCQlleHQ0X3hhdHRyX3Jlc3RhcnRfZm4oaGFuZGxlLCBwYXJlbnQsIGJoLCBibG9ja19jc3VtLApAQCAtMTIxMiw2ICYjNDM7MTE5OSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWlmIChlcnIgJmx0OyAwKSB7CiAJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsICYjMzQ7RW5zdXJlIGNyZWRpdHMgZXJyPSVkJiMzNDssCiAJCQkJCSAgIGVycik7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKGVyciAmZ3Q7IDApIHsKQEAgLTEyMjEsNiAmIzQzOzEyMDksNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwKIAkJCQkJCSYjMzQ7UmUtZ2V0IHdyaXRlIGFjY2VzcyBlcnI9JWQmIzM0OywKIAkJCQkJCWVycik7CiYjNDM7CQkJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJfQpAQCAtMTIyOSw2ICYjNDM7MTIxOCw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWlmIChlcnIpIHsKIAkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgJiMzNDtlYV9pbm9kZSBkZWMgcmVmIGVycj0lZCYjMzQ7LAogCQkJCQkgICBlcnIpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTEyNDUsNiAmIzQzOzEyMzUsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQllbnRyeS0mZ3Q7ZV92YWx1ZV9pbnVtID0gMDsKIAkJZW50cnktJmd0O2VfdmFsdWVfc2l6ZSA9IDA7CiAKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJZGlydHkgPSB0cnVlOwogCX0KIApAQCAtMTI3MSw3ICYjNDM7MTI2Miw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiBzdGF0aWMgdm9pZAogZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKLQkJCSBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LAogCQkJIGludCBleHRyYV9jcmVkaXRzKQogewogCXN0cnVjdCBtYl9jYWNoZSAqZWFfYmxvY2tfY2FjaGUgPSBFQV9CTE9DS19DQUNIRShpbm9kZSk7CkBAIC0xMzEzLDcgJiM0MzsxMzAzLDYgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLAogCQkJCQkJICAgICBCRklSU1QoYmgpLAogCQkJCQkJICAgICB0cnVlIC8qIGJsb2NrX2NzdW0gKi8sCi0JCQkJCQkgICAgIGVhX2lub2RlX2FycmF5LAogCQkJCQkJICAgICBleHRyYV9jcmVkaXRzLAogCQkJCQkJICAgICB0cnVlIC8qIHNraXBfcXVvdGEgKi8pOwogCQlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGJoLCAwLCAxLApAQCAtMTUwNSw3ICYjNDM7MTQ5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsCiAJCQlpZiAoZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpKQogCQkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwKIAkJCQkJJiMzNDtjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWQmIzM0OywgZXJyKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJCXJldHVybiBFUlJfUFRSKGVycik7CiAJCX0KIApAQCAtMTU2NCw3ICYjNDM7MTU1Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSwKIAkJCWt2ZnJlZShlYV9kYXRhKTsKIAkJCXJldHVybiBlYV9pbm9kZTsKIAkJfQotCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAluZXh0X2VudHJ5OgogCQljZSA9IG1iX2NhY2hlX2VudHJ5X2ZpbmRfbmV4dChlYV9pbm9kZV9jYWNoZSwgY2UpOwogCX0KQEAgLTE2MTUsNyAmIzQzOzE2MDQsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSwKIAkJCQkgICAgICBlYV9pbm9kZS0mZ3Q7aV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pOwogCXJldHVybiBlYV9pbm9kZTsKIG91dF9lcnI6Ci0JaXB1dChlYV9pbm9kZSk7CiYjNDM7CWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAlleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIE5VTEwsIHZhbHVlX2xlbik7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KQEAgLTE4NDgsNyAmIzQzOzE4MzcsNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfc2V0X2VudHJ5KHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gKmksCiAKIAlyZXQgPSAwOwogb3V0OgotCWlwdXQob2xkX2VhX2lub2RlKTsKJiM0MzsJZXh0NF9wdXRfZWFfaW5vZGUob2xkX2VhX2lub2RlKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMDEwLDcgJiM0MzsxOTk5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlvbGRfZWFfaW5vZGVfcXVvdGEgPSBsZTMyX3RvX2NwdSgKIAkJCQkJCXMtJmd0O2hlcmUtJmd0O2VfdmFsdWVfc2l6ZSk7CiAJCQl9Ci0JCQlpcHV0KHRtcF9pbm9kZSk7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUodG1wX2lub2RlKTsKIAogCQkJcy0mZ3Q7aGVyZS0mZ3Q7ZV92YWx1ZV9pbnVtID0gMDsKIAkJCXMtJmd0O2hlcmUtJmd0O2VfdmFsdWVfc2l6ZSA9IDA7CkBAIC0yMTUwLDcgJiM0MzsyMTM5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLAogCQkJCQkJCSAgICYjMzQ7ZGVjIHJlZiBlcnJvcj0lZCYjMzQ7LAogCQkJCQkJCSAgIGVycm9yKTsKLQkJCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCQkJZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpOwogCQkJCWVhX2lub2RlID0gTlVMTDsKIAkJCX0KIApAQCAtMjE4MiwxMiAmIzQzOzIxNzEsOCBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCiAJLyogRHJvcCB0aGUgcHJldmlvdXMgeGF0dHIgYmxvY2suICovCiAJaWYgKGJzLSZndDtiaCAmYW1wOyZhbXA7IGJzLSZndDtiaCAhPSBuZXdfYmgpIHsKLQkJc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDsKLQogCQlleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYnMtJmd0O2JoLAotCQkJCQkgJmFtcDtlYV9pbm9kZV9hcnJheSwKIAkJCQkJIDAgLyogZXh0cmFfY3JlZGl0cyAqLyk7Ci0JCWV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7CiAJfQogCWVycm9yID0gMDsKIApAQCAtMjIwMyw3ICYjNDM7MjE4OCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLAogCQkJCQkJICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7CiAJCX0KLQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQlleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7CiAJfQogCWlmIChjZSkKIAkJbWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7CkBAIC0yMjg1LDcgJiM0MzsyMjcwLDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAKIAkJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsCiAJCQkJCQkgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJfQogCQlyZXR1cm4gZXJyb3I7CiAJfQpAQCAtMjI5Nyw3ICYjNDM7MjI4Miw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQloZWFkZXItJmd0O2hfbWFnaWMgPSBjcHVfdG9fbGUzMigwKTsKIAkJZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUik7CiAJfQotCWlwdXQoZWFfaW5vZGUpOwomIzQzOwlleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4NjMsNDYgJiM0MzsyODQ4LDYgQEAgaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsCiAJcmV0dXJuIGVycm9yOwogfQogCi0jZGVmaW5lIEVJQV9JTkNSIDE2IC8qIG11c3QgYmUgMl5uICovCi0jZGVmaW5lIEVJQV9NQVNLIChFSUFfSU5DUiAtIDEpCi0KLS8qIEFkZCB0aGUgbGFyZ2UgeGF0dHIgQGlub2RlIGludG8gQGVhX2lub2RlX2FycmF5IGZvciBkZWZlcnJlZCBpcHV0KCkuCi0gKiBJZiBAZWFfaW5vZGVfYXJyYXkgaXMgbmV3IG9yIGZ1bGwgaXQgd2lsbCBiZSBncm93biBhbmQgdGhlIG9sZAotICogY29udGVudHMgY29waWVkIG92ZXIuCi0gKi8KLXN0YXRpYyBpbnQKLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCi0JCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkgewotCQkvKgotCQkgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuCi0JCSAqLwotCQkoKmVhX2lub2RlX2FycmF5KSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsCi0JCQkJCQkgRUlBX01BU0ssIEdGUF9OT0ZTKTsKLQkJaWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCSgqZWFfaW5vZGVfYXJyYXkpLSZndDtjb3VudCA9IDA7Ci0JfSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50ICZhbXA7IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykgewotCQkvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICYjNDM7IG4gKiAxNiBzbG90cyBhcmUgZnVsbCAqLwotCQlzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqbmV3X2FycmF5ID0gTlVMTDsKLQotCQluZXdfYXJyYXkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLAotCQkJCQkgKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50ICYjNDM7IEVJQV9JTkNSLAotCQkJCQkgR0ZQX05PRlMpOwotCQlpZiAobmV3X2FycmF5ID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJbWVtY3B5KG5ld19hcnJheSwgKmVhX2lub2RlX2FycmF5LAotCQkgICAgICAgc3RydWN0X3NpemUoKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsCi0JCQkJICAgKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50KSk7Ci0JCWtmcmVlKCplYV9pbm9kZV9hcnJheSk7Ci0JCSplYV9pbm9kZV9hcnJheSA9IG5ld19hcnJheTsKLQl9Ci0JKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50JiM0MzsmIzQzOzsKLQkoKmVhX2lub2RlX2FycmF5KS0mZ3Q7aW5vZGVzWygqZWFfaW5vZGVfYXJyYXkpLSZndDtjb3VudCAtIDFdID0gaW5vZGU7Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSgpCiAgKgpAQCAtMjkxMyw3ICYjNDM7Mjg1OCw2IEBAIGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCiAgKiByZWZlcmVuY2VzIG9uIHhhdHRyIGJsb2NrIGFuZCB4YXR0ciBpbm9kZXMuCiAgKi8KIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCiAJCQkgICAgaW50IGV4dHJhX2NyZWRpdHMpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CkBAIC0yOTUyLDcgJiM0MzsyODk2LDYgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGlsb2MuYmgsCiAJCQkJCQkgICAgIElGSVJTVChoZWFkZXIpLAogCQkJCQkJICAgICBmYWxzZSAvKiBibG9ja19jc3VtICovLAotCQkJCQkJICAgICBlYV9pbm9kZV9hcnJheSwKIAkJCQkJCSAgICAgZXh0cmFfY3JlZGl0cywKIAkJCQkJCSAgICAgZmFsc2UgLyogc2tpcF9xdW90YSAqLyk7CiAJfQpAQCAtMjk4NiwxMiAmIzQzOzI5MjksMTIgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCWNvbnRpbnVlOwogCQkJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsCiAJCQkJCSAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LSZndDtlX3ZhbHVlX3NpemUpKTsKLQkJCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCQkJZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpOwogCQkJfQogCiAJCX0KIAotCQlleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsIGVhX2lub2RlX2FycmF5LAomIzQzOwkJZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLAogCQkJCQkgZXh0cmFfY3JlZGl0cyk7CiAJCS8qCiAJCSAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXMKQEAgLTMwMTMsMTYgJiM0MzsyOTU2LDYzIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybiBlcnJvcjsKIH0KIAotdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5KQomIzQzOy8qCiYjNDM7ICogV29ya2VyIGZ1bmN0aW9uIGZvciBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0LiAgUHJvY2Vzc2VzIGFsbCBpbm9kZXMgcXVldWVkCiYjNDM7ICogb24gc19lYV9pbm9kZV90b19mcmVlIGluIGEgY29udGV4dCBmcmVlIG9mIHhhdHRyX3NlbS9qYmQyIGhhbmRsZSBsb2Nrcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBleHQ0X2VhX2lub2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCWludCBpZHg7CiYjNDM7CXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksCiYjNDM7CQkJCQkJc3RydWN0IGV4dDRfc2JfaW5mbywKJiM0MzsJCQkJCQlzX2VhX2lub2RlX3dvcmspOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSA9IGxsaXN0X2RlbF9hbGwoJmFtcDtzYmktJmd0O3NfZWFfaW5vZGVfdG9fZnJlZSk7CiAKLQlpZiAoZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkKJiM0MzsJd2hpbGUgKG5vZGUpIHsKJiM0MzsJCXN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gY29udGFpbmVyX29mKG5vZGUsCiYjNDM7CQkJCQlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvLCBpX2VhX2lwdXRfbm9kZSk7CiYjNDM7CQlub2RlID0gbm9kZS0mZ3Q7bmV4dDsKJiM0MzsJCWlwdXQoJmFtcDtlaS0mZ3Q7dmZzX2lub2RlKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlbGVhc2UgYSBWRlMgcmVmZXJlbmNlIG9uIGFuIEVBIGlub2RlLiAgTXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgaXB1dCgpCiYjNDM7ICogaW4gYW55IGNvbnRleHQgd2hlcmUgeGF0dHJfc2VtIG9yIGEgamJkMiBoYW5kbGUgaXMgaGVsZC4KJiM0MzsgKgomIzQzOyAqIElmIHRoaXMgaXMgbm90IHRoZSBsYXN0IHJlZmVyZW5jZSwgZHJvcHMgaXQgaW1tZWRpYXRlbHkgdmlhCiYjNDM7ICogaXB1dF9pZl9ub3RfbGFzdCgpIHdpdGggbm8gZnVydGhlciBhY3Rpb24gbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogSWYgdGhpcyBpcyB0aGUgbGFzdCByZWZlcmVuY2UsIHRoZSBpbm9kZSBpcyBsaW5rZWQgb250byBhIHBlci1zYgomIzQzOyAqIGxsaXN0IHZpYSBpX2VhX2lwdXRfbm9kZSAoZW1iZWRkZWQgaW4gZXh0NF9pbm9kZV9pbmZvLCBzaGFyaW5nIHNwYWNlCiYjNDM7ICogd2l0aCB0aGUgdW51c2VkIHhhdHRyX3NlbSkgYW5kIGEgZGVsYXllZCB3b3JrZXIgcGVyZm9ybXMgdGhlIGZpbmFsCiYjNDM7ICogaXB1dCgpIGluIGEgY2xlYW4gY29udGV4dC4KJiM0MzsgKgomIzQzOyAqIE5vdGU6IHdoaWxlIGFuIGlub2RlIGlzIG9uIHNfZWFfaW5vZGVfdG9fZnJlZSwgdGhlIHVuY29uc3VtZWQgaV9jb3VudAomIzQzOyAqIHJlZmVyZW5jZSAoc3RpbGwgMSkga2VlcHMgaXQgaW4gdGhlIGlub2RlIGNhY2hlLCBzbyBhbnkgY29uY3VycmVudAomIzQzOyAqIGlnZXQoKSBidW1wcyBpX2NvdW50IHRvICZndDs9IDIgYW5kIGlwdXRfaWZfbm90X2xhc3QoKSB3aWxsIHN1Y2NlZWQuCiYjNDM7ICogTm9ib2R5IHdpbGwgYWRkIHRoZSBpbm9kZSBhIHNlY29uZCB0aW1lIHVudGlsIGV4dDRfZWFfaW5vZGVfd29yaygpCiYjNDM7ICogZHJvcHMgdGhhdCByZWZlcmVuY2UgdmlhIGlwdXQoKS4KJiM0MzsgKi8KJiM0Mzt2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlpZiAoIWlub2RlKQomIzQzOwkJcmV0dXJuOwomIzQzOwlXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLSZndDtpX2ZsYWdzICZhbXA7IEVYVDRfRUFfSU5PREVfRkwpKTsKJiM0MzsJaWYgKGlwdXRfaWZfbm90X2xhc3QoaW5vZGUpKQogCQlyZXR1cm47CiYjNDM7CWxsaXN0X2FkZCgmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfZWFfaXB1dF9ub2RlLAomIzQzOwkJICAmYW1wO0VYVDRfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX2VhX2lub2RlX3RvX2ZyZWUpOwomIzQzOwkvKgomIzQzOwkgKiBVc2UgYSBzaG9ydCBkZWxheSB0byBhbGxvdyBtdWx0aXBsZSBFQSBpbm9kZXMgdG8gYWNjdW11bGF0ZSwKJiM0MzsJICogcmVkdWNpbmcgd29ya3F1ZXVlIHdha2V1cHMgd2hlbiBzZXZlcmFsIGFyZSByZWxlYXNlZCB0b2dldGhlci4KJiM0MzsJICovCiYjNDM7CXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO0VYVDRfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX2VhX2lub2RlX3dvcmssIDEpOwomIzQzO30KIAotCWZvciAoaWR4ID0gMDsgaWR4ICZsdDsgZWFfaW5vZGVfYXJyYXktJmd0O2NvdW50OyAmIzQzOyYjNDM7aWR4KQotCQlpcHV0KGVhX2lub2RlX2FycmF5LSZndDtpbm9kZXNbaWR4XSk7Ci0Ja2ZyZWUoZWFfaW5vZGVfYXJyYXkpOwomIzQzO3ZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKQomIzQzO3sKJiM0MzsJaW5pdF9sbGlzdF9oZWFkKCZhbXA7c2JpLSZndDtzX2VhX2lub2RlX3RvX2ZyZWUpOwomIzQzOwlJTklUX0RFTEFZRURfV09SSygmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV93b3JrLCBleHQ0X2VhX2lub2RlX3dvcmspOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5oIGIvZnMvZXh0NC94YXR0ci5oCmluZGV4IDFmZWRmNDRkNGZiNjVlLi44MjFkYzZhNTBlNTFlNyAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuaApAQCAtMTMxLDExICYjNDM7MTMxLDYgQEAgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCB7CiAJc3RydWN0IGV4dDRfaWxvYyBpbG9jOwogfTsKIAotc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgewotCXVuc2lnbmVkIGludCBjb3VudDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2Rlc1tdIF9fY291bnRlZF9ieShjb3VudCk7Ci19OwotCiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXI7CiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXI7CiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyOwpAQCAtMTg3LDkgJiM0MzsxODIsOSBAQCBleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCWJvb2wgaXNfY3JlYXRlKTsKIAogZXh0ZXJuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqYXJyYXksCiAJCQkJICAgaW50IGV4dHJhX2NyZWRpdHMpOwotZXh0ZXJuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICphcnJheSk7CiYjNDM7ZXh0ZXJuIHZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKTsKJiM0MztleHRlcm4gdm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogZXh0ZXJuIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLAogCQkJICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IGQxMDg5N2IzYTFlMzUwLi43MDk1MTk2MTdjN2EzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMjQxMyw2ICYjNDM7MjQxMywyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJfc2V0X3N5c2ZzX25hbWVfZ2VuZXJpYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaAogZXh0ZXJuIHZvaWQgaWhvbGQoc3RydWN0IGlub2RlICogaW5vZGUpOwogZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7CiB2b2lkIGlwdXRfbm90X2xhc3Qoc3RydWN0IGlub2RlICopOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGlwdXRfaWZfbm90X2xhc3QgLSBkcm9wIGFuIGlub2RlIHJlZmVyZW5jZSBvbmx5IGlmIGl0IGlzIG5vdCB0aGUgbGFzdCBvbmUKJiM0MzsgKiBAaW5vZGU6IGlub2RlIHRvIHB1dAomIzQzOyAqCiYjNDM7ICogUmV0dXJucyB0cnVlIGlmIHRoZSByZWZlcmVuY2Ugd2FzIGRyb3BwZWQsIGZhbHNlIGlmIHRoaXMgd2FzIHRoZSBsYXN0CiYjNDM7ICogcmVmZXJlbmNlIGFuZCB0aGUgY2FsbGVyIG11c3QgYXJyYW5nZSBmb3IgZmluYWwgaXB1dCgpIGluIGEgc2FmZSBjb250ZXh0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJVkZTX0JVR19PTl9JTk9ERShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpICZhbXA7IChJX0ZSRUVJTkcgfCBJX0NMRUFSKSwgaW5vZGUpOwomIzQzOwlWRlNfQlVHX09OX0lOT0RFKGljb3VudF9yZWFkX29uY2UoaW5vZGUpICZsdDsgMSwgaW5vZGUpOwomIzQzOwlyZXR1cm4gYXRvbWljX2FkZF91bmxlc3MoJmFtcDtpbm9kZS0mZ3Q7aV9jb3VudCwgLTEsIDEpOwomIzQzO30KJiM0MzsKIGludCBpbm9kZV91cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsCiAJCXVuc2lnbmVkIGludCBmbGFncyk7CiBpbnQgZ2VuZXJpY191cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NjUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2g6IEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIElub2RlIERlZmVycmFsIGluIGV4dDQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyBleHQ0IGhhbmRsZXMgRXh0ZW5kZWQgQXR0cmlidXRlIChFQSkgaW5vZGVzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGZyZWVpbmcgcHJvY2Vzcy4gVGhlIGFpbSBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGxvY2sgb3JkZXJpbmcgaXNzdWVzLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHRoaW5nLiBUaGV5JiMzOTtyZSBpbXBsZW1lbnRpbmcgYSBkZWZlcnJlZCBgaXB1dGAgbWVjaGFuaXNtIGZvciBFQSBpbm9kZXMuIFNtYXJ0LCB1c2luZyBgc19lYV9pbm9kZV90b19mcmVlYCBhbmQgYHNfZWFfaW5vZGVfd29ya2Agd2l0aGluIHRoZSBgZXh0NF9zYl9pbmZvYCBzdHJ1Y3R1cmUgaXMgYSBzb2xpZCBhcHByb2FjaCBmb3IgdGhpcyBraW5kIG9mIGRlbGF5ZWQgb3BlcmF0aW9uLiBUaGUgYWRkaXRpb24gb2YgYGlwdXRfaWZfbm90X2xhc3RgIGlzIGFsc28gZXhwZWN0ZWQuIFRoZSBzaGlmdCBmcm9tIGBleHQ0X3hhdHRyX2lub2RlX2FycmF5YCB0byBhIGxvY2tsZXNzIGxpc3QgKGBsbGlzdF9ub2RlIGlfZWFfaXB1dF9ub2RlYCBpbiBgc3RydWN0IGV4dDRfaW5vZGVfaW5mb2ApIGlzIGEgbm90YWJsZSBhcmNoaXRlY3R1cmFsIGNoYW5nZSwgYW5kIHBvdGVudGlhbGx5IGEgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBjbG9zZSBzY3J1dGlueS4KClRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlLCBubyBkb3VidCBhYm91dCBpdC4gV2Ugc2hvdWxkIGRlZmluaXRlbHkgaW5jbHVkZSB0aGlzIGluIHRoZSBmdXp6aW5nIHByb2Nlc3Mg4oCTIGBXb3J0aEZ1enppbmc9dHJ1ZWAgaXMgc3BvdCBvbi4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQgb3IgYWRkZWQuIFRoZSBjb2RlIHRvdWNoZXMgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gRUEgaW5vZGUgbWFuYWdlbWVudDogYGV4dDRfZWFfaW5vZGVfd29ya2AsIGBleHQ0X3B1dF9lYV9pbm9kZWAsIGBleHQ0X2luaXRfZWFfaW5vZGVfd29ya2AsIGFuZCBjb3JlIHhhdHRyIGZ1bmN0aW9ucyBsaWtlIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAsIGBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsYCwgYW5kIHNvIG9uLgoKSG93ZXZlciwgSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24gcHJpbWFyaWx5IG9uIHRoZSBmb2xsb3dpbmcgZm9yIHRoaXMgaW5pdGlhbCBhbmFseXNpczogYGV4dDRfZWFfaW5vZGVfd29ya2AsIHdoaWNoIGlzIHRoZSBjb3JlIGRlZmVycmVkIHdvcmssIGBleHQ0X3B1dF9lYV9pbm9kZWAsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAsIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAsIGFuZCBgZXh0NF94YXR0cl9pYm9keV9zZXRgIGFzIHRoZXkgYXJlIHRoZSBtb3N0IGNyaXRpY2FsIGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMuCgpHaXZlbiB0aGF0IHRoaXMgYWZmZWN0cyBjb3JlIGV4dDQgRUEgaGFuZGxpbmcsIGNvbmZpZ3VyYXRpb24gaXMgaW1wb3J0YW50LiBUaGUgY29kZSByZXNpZGVzIHdpdGhpbiBgZnMvZXh0NC9gLCBhbmQgdGhlIHJlbGV2YW50IGNvbmZpZyBpcyBgRVhUNF9GU2AuIEJ1dCwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgc3BlY2lmaWMgY29uZmlncyByZWxhdGVkIHRvIEVBIGlub2Rlcy4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGBmcy9leHQ0L0tjb25maWdgIGZpbGUgb3IgcGVyZm9ybSBhIHF1aWNrIGdyZXAgZm9yICYjMzQ7RUFfSU5PREUmIzM0Oy4gUmVsYXRlZCBjb25maWdzIGxpa2UgYEVYVDRfRlNfUE9TSVhfQUNMYCBhbmQgYEVYVDRfRlNfU0VDVVJJVFlgIGFyZSByZWxhdGVkIHRvIHhhdHRycyBidXQgRUEgaW5vZGVzIGFyZSBmdW5kYW1lbnRhbCBhbmQgSSBzdXNwZWN0IEVBIGlub2RlcyBhcmUgYSBmZWF0dXJlIG9mIGV4dDQsIHdoaWNoIG1ha2VzIG1lIHN1c3BlY3QgaXQgZGVwZW5kcyBvbiBgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0VBX0lOT0RFYC4gTmVlZCB0byB2ZXJpZnkgdGhpcyBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VBX0lOT0RFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9NDQwPXN0cnVjdCBmbGV4X2dyb3VwcyB7XG4tLVxuZnMvZXh0NC9leHQ0LmgtNTA0LSNkZWZpbmUgRVhUNF9WRVJJVFlfRkxcdFx0XHQweDAwMTAwMDAwIC8qIFZlcml0eSBwcm90ZWN0ZWQgaW5vZGUgKi9cbmZzL2V4dDQvZXh0NC5oOjUwNTojZGVmaW5lIEVYVDRfRUFfSU5PREVfRkxcdCAgICAgICAgMHgwMDIwMDAwMCAvKiBJbm9kZSB1c2VkIGZvciBsYXJnZSBFQSAqL1xuZnMvZXh0NC9leHQ0LmgtNTA2LS8qIDB4MDA0MDAwMDAgd2FzIGZvcm1lcmx5IEVYVDRfRU9GQkxPQ0tTX0ZMICovXG4tLVxuZnMvZXh0NC9leHQ0Lmg9NTgwPWVudW0ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTYwMy1cdEVYVDRfSU5PREVfVkVSSVRZXHQ9IDIwLFx0LyogVmVyaXR5IHByb3RlY3RlZCBpbm9kZSAqL1xuZnMvZXh0NC9leHQ0Lmg6NjA0Olx0RVhUNF9JTk9ERV9FQV9JTk9ERVx0PSAyMSxcdC8qIElub2RlIHVzZWQgZm9yIGxhcmdlIEVBICovXG5mcy9leHQ0L2V4dDQuaC02MDUtLyogMjIgd2FzIGZvcm1lcmx5IEVYVDRfSU5PREVfRU9GQkxPQ0tTICovXG4tLVxuZnMvZXh0NC9leHQ0Lmg9NjI5PXN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2NoZWNrX2ZsYWdfdmFsdWVzKHZvaWQpXG4tLVxuZnMvZXh0NC9leHQ0LmgtNjUxLVx0Q0hFQ0tfRkxBR19WQUxVRShWRVJJVFkpO1xuZnMvZXh0NC9leHQ0Lmg6NjUyOlx0Q0hFQ0tfRkxBR19WQUxVRShFQV9JTk9ERSk7XG5mcy9leHQ0L2V4dDQuaC02NTMtXHRDSEVDS19GTEFHX1ZBTFVFKElOTElORV9EQVRBKTtcbi0tXG5mcy9leHQ0L2V4dDQuaD0xMDQ4PXN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTEwNzMtXHQgKlxuZnMvZXh0NC9leHQ0Lmg6MTA3NDpcdCAqIEVBIGlub2RlcyAoRVhUNF9FQV9JTk9ERV9GTCkgZG8gbm90IHVzZSB4YXR0cl9zZW07IHRoZXkgcmV1c2VcbmZzL2V4dDQvZXh0NC5oLTEwNzUtXHQgKiB0aGUgc3BhY2UgZm9yIGRlZmVycmVkIGlwdXQgbGlua2FnZS5cbi0tXG5mcy9leHQ0L2V4dDQuaD0yMDM3PWVudW0ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTIwNDUtXHRFWFQ0X1NUQVRFX0VYVF9QUkVDQUNIRUQsXHQvKiBleHRlbnRzIGhhdmUgYmVlbiBwcmVjYWNoZWQgKi9cbmZzL2V4dDQvZXh0NC5oOjIwNDY6XHRFWFQ0X1NUQVRFX0xVU1RSRV9FQV9JTk9ERSxcdC8qIEx1c3RyZS1zdHlsZSBlYV9pbm9kZSAqL1xuZnMvZXh0NC9leHQ0LmgtMjA0Ny1cdEVYVDRfU1RBVEVfVkVSSVRZX0lOX1BST0dSRVNTLFx0LyogYnVpbGRpbmcgZnMtdmVyaXR5IE1lcmtsZSB0cmVlICovXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MjEzND1zdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9pbm9kZV9vcnBoYW5fdHJhY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvZXh0NC5oLTIyMTUtI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CR1x0XHQweDAyMDBcbmZzL2V4dDQvZXh0NC5oOjIyMTY6I2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRUFfSU5PREVcdFx0MHgwNDAwIC8qIEVBIGluIGlub2RlICovXG5mcy9leHQ0L2V4dDQuaC0yMjE3LSNkZWZpbmUgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0RJUkRBVEFcdFx0MHgxMDAwIC8qIGRhdGEgaW4gZGlyZW50ICovXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MjMxND1FWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRlVOQ1MoZmxleF9iZyxcdFx0RkxFWF9CRylcbmZzL2V4dDQvZXh0NC5oOjIzMTU6RVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZVTkNTKGVhX2lub2RlLFx0XHRFQV9JTk9ERSlcbmZzL2V4dDQvZXh0NC5oLTIzMTYtRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZVTkNTKGRpcmRhdGEsXHRcdERJUkRBVEEpXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MjMyMT1FWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRlVOQ1MoY2FzZWZvbGQsXHRcdENBU0VGT0xEKVxuLS1cbmZzL2V4dDQvZXh0NC5oLTIzNDUtXHRcdFx0XHRcdCBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CR3wgXFxcbmZzL2V4dDQvZXh0NC5oOjIzNDY6XHRcdFx0XHRcdCBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRUFfSU5PREV8IFxcXG5mcy9leHQ0L2V4dDQuaC0yMzQ3LVx0XHRcdFx0XHQgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX01NUCB8IFxcXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MjcwMj1zdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9pc19xdW90YV9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9leHQ0LmgtMjcwNC1cdHJldHVybiBJU19OT1FVT1RBKGlub2RlKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvZXh0NC5oOjI3MDU6XHQgICAgICAgIShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpO1xuZnMvZXh0NC9leHQ0LmgtMjcwNi19XG4tLVxuZnMvZXh0NC9leHQ0Lmg9MzE1Mz10eXBlZGVmIGVudW0ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTMxNTctXHRFWFQ0X0lHRVRfQkFEID1cdFx0MHgwMDA0LCAvKiBBbGxvdyB0byBpZ2V0IGEgYmFkIGlub2RlICovXG5mcy9leHQ0L2V4dDQuaDozMTU4Olx0RVhUNF9JR0VUX0VBX0lOT0RFID1cdDB4MDAwOFx0LyogSW5vZGUgc2hvdWxkIGNvbnRhaW4gYW4gRUEgdmFsdWUgKi9cbmZzL2V4dDQvZXh0NC5oLTMxNTktfSBleHQ0X2lnZXRfZmxhZ3M7XG4tLVxuZnMvZXh0NC9leHQ0X2piZDIuYz0xMD1pbnQgZXh0NF9pbm9kZV9qb3VybmFsX21vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2V4dDRfamJkMi5jLTE1LVx0aWYgKCFTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgfHxcbmZzL2V4dDQvZXh0NF9qYmQyLmM6MTY6XHQgICAgZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRUFfSU5PREUpIHx8XG5mcy9leHQ0L2V4dDRfamJkMi5jLTE3LVx0ICAgIHRlc3Rfb3B0KGlub2RlLVx1MDAzZWlfc2IsIERBVEFfRkxBR1MpID09IEVYVDRfTU9VTlRfSk9VUk5BTF9EQVRBIHx8XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9MjQzNz1zdGF0aWMgaW5saW5lIGludCBnZXRfZGVmYXVsdF9mcmVlX2Jsb2Nrc19mbGFncyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTI0MzktXHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fFxuZnMvZXh0NC9leHRlbnRzLmM6MjQ0MDpcdCAgICBleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FQV9JTk9ERSkpXG5mcy9leHQ0L2V4dGVudHMuYy0yNDQxLVx0XHRyZXR1cm4gRVhUNF9GUkVFX0JMT0NLU19NRVRBREFUQSB8IEVYVDRfRlJFRV9CTE9DS1NfRk9SR0VUO1xuLS1cbmZzL2V4dDQvaWFsbG9jLmM9OTMzPXN0cnVjdCBpbm9kZSAqX19leHQ0X25ld19pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9leHQ0L2lhbGxvYy5jLTk5NS1cbmZzL2V4dDQvaWFsbG9jLmM6OTk2Olx0aWYgKCEoaV9mbGFncyBcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpIHtcbmZzL2V4dDQvaWFsbG9jLmMtOTk3LVx0XHRlcnIgPSBmc2NyeXB0X3ByZXBhcmVfbmV3X2lub2RlKGRpciwgaW5vZGUsIFx1MDAyNmVuY3J5cHQpO1xuLS1cbmZzL2V4dDQvaWFsbG9jLmMtMTAwNS1cbmZzL2V4dDQvaWFsbG9jLmM6MTAwNjpcdGlmICghaGFuZGxlIFx1MDAyNlx1MDAyNiBzYmktXHUwMDNlc19qb3VybmFsIFx1MDAyNlx1MDAyNiAhKGlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKSB7XG5mcy9leHQ0L2lhbGxvYy5jLTEwMDctXHRcdHJldDIgPSBleHQ0X3hhdHRyX2NyZWRpdHNfZm9yX25ld19pbm9kZShkaXIsIG1vZGUsIGVuY3J5cHQpO1xuLS1cbmZzL2V4dDQvaWFsbG9jLmMtMTMwOC1cdGlmIChleHQ0X2hhc19mZWF0dXJlX2lubGluZV9kYXRhKHNiKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvaWFsbG9jLmM6MTMwOTpcdCAgICAoIShlaS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiAoRVhUNF9EQVhfRkx8RVhUNF9FQV9JTk9ERV9GTCkpIHx8IFNfSVNESVIobW9kZSkpKVxuZnMvZXh0NC9pYWxsb2MuYy0xMzEwLVx0XHRleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xuLS1cbmZzL2V4dDQvaWFsbG9jLmMtMTMyNi1cbmZzL2V4dDQvaWFsbG9jLmM6MTMyNzpcdGlmICghKGVpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKSB7XG5mcy9leHQ0L2lhbGxvYy5jLTEzMjgtXHRcdGVyciA9IGV4dDRfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyKTtcbi0tXG5mcy9leHQ0L2luZGlyZWN0LmM9ODU3PXN0YXRpYyBpbnQgZXh0NF9jbGVhcl9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2luZGlyZWN0LmMtODY3LVx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkgfHxcbmZzL2V4dDQvaW5kaXJlY3QuYzo4Njg6XHQgICAgZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRUFfSU5PREUpKVxuZnMvZXh0NC9pbmRpcmVjdC5jLTg2OS1cdFx0ZmxhZ3MgfD0gRVhUNF9GUkVFX0JMT0NLU19GT1JHRVQgfCBFWFQ0X0ZSRUVfQkxPQ0tTX01FVEFEQVRBO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz0xNjk9dm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTE4NC1cbmZzL2V4dDQvaW5vZGUuYzoxODU6XHRpZiAoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKVxuZnMvZXh0NC9pbm9kZS5jLTE4Ni1cdFx0ZXh0NF9ldmljdF9lYV9pbm9kZShpbm9kZSk7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTQzND12b2lkIGV4dDRfY2hlY2tfbWFwX2V4dGVudHNfZW52KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTQ0Mi1cdCAgICAoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgKElfRlJFRUlORyB8IElfV0lMTF9GUkVFIHwgSV9ORVcpKSB8fFxuZnMvZXh0NC9pbm9kZS5jOjQ0MzpcdCAgICBleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FQV9JTk9ERSkgfHxcbmZzL2V4dDQvaW5vZGUuYy00NDQtXHQgICAgZXh0NF92ZXJpdHlfaW5fcHJvZ3Jlc3MoaW5vZGUpKVxuLS1cbmZzL2V4dDQvaW5vZGUuYz00Njk3PXN0YXRpYyBpbmxpbmUgdTY0IGV4dDRfaW5vZGVfcGVla19pdmVyc2lvbihjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvZXh0NC9pbm9kZS5jLTQ2OTgte1xuZnMvZXh0NC9pbm9kZS5jOjQ2OTk6XHRpZiAodW5saWtlbHkoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSlcbmZzL2V4dDQvaW5vZGUuYy00NzAwLVx0XHRyZXR1cm4gaW5vZGVfcGVla19pdmVyc2lvbl9yYXcoaW5vZGUpO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz01MTkwPWludCBleHQ0X2dldF9wcm9qaWQoc3RydWN0IGlub2RlICppbm9kZSwga3Byb2ppZF90ICpwcm9qaWQpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUxOTktICogZXh0NCBoYXMgc2VsZi1tYW5hZ2VkIGlfdmVyc2lvbiBmb3IgZWEgaW5vZGVzLCBpdCBzdG9yZXMgdGhlIGxvd2VyIDMyYml0IG9mXG5mcy9leHQ0L2lub2RlLmM6NTIwMDogKiByZWZjb3VudCBpbiBpX3ZlcnNpb24sIHNvIHVzZSByYXcgdmFsdWVzIGlmIGlub2RlIGhhcyBFWFQ0X0VBX0lOT0RFX0ZMIGZsYWdcbmZzL2V4dDQvaW5vZGUuYy01MjAxLSAqIHNldC5cbi0tXG5mcy9leHQ0L2lub2RlLmM9NTIwMz1zdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9pbm9kZV9zZXRfaXZlcnNpb25fcXVlcmllZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgdmFsKVxuZnMvZXh0NC9pbm9kZS5jLTUyMDQte1xuZnMvZXh0NC9pbm9kZS5jOjUyMDU6XHRpZiAodW5saWtlbHkoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSlcbmZzL2V4dDQvaW5vZGUuYy01MjA2LVx0XHRpbm9kZV9zZXRfaXZlcnNpb25fcmF3KGlub2RlLCB2YWwpO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz01MjExPXN0YXRpYyBpbnQgY2hlY2tfaWdvdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2lnZXRfZmxhZ3MgZmxhZ3MsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUyMTUtXG5mcy9leHQ0L2lub2RlLmM6NTIxNjpcdGlmIChmbGFncyBcdTAwMjYgRVhUNF9JR0VUX0VBX0lOT0RFKSB7XG5mcy9leHQ0L2lub2RlLmM6NTIxNzpcdFx0aWYgKCEoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSkge1xuZnMvZXh0NC9pbm9kZS5jOjUyMTg6XHRcdFx0ZXJyX3N0ciA9IFwmIzM0O21pc3NpbmcgRUFfSU5PREUgZmxhZ1wmIzM0OztcbmZzL2V4dDQvaW5vZGUuYy01MjE5LVx0XHRcdGdvdG8gZXJyb3I7XG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUyMjYtXHR9IGVsc2Uge1xuZnMvZXh0NC9pbm9kZS5jOjUyMjc6XHRcdGlmICgoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSkge1xuZnMvZXh0NC9pbm9kZS5jLTUyMjgtXHRcdFx0Lypcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTIzNC1cdFx0XHRcdHJldHVybiAtRVNUQUxFO1xuZnMvZXh0NC9pbm9kZS5jOjUyMzU6XHRcdFx0ZXJyX3N0ciA9IFwmIzM0O3VuZXhwZWN0ZWQgRUFfSU5PREUgZmxhZ1wmIzM0OztcbmZzL2V4dDQvaW5vZGUuYy01MjM2LVx0XHRcdGdvdG8gZXJyb3I7XG4tLVxuZnMvZXh0NC9pb2N0bC5jPTEyMDU9c3RhdGljIGludCBleHQ0X2lvY3RsX3NldHV1aWQoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTEyNjEtXHRcdChFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUyB8XHRcXFxuZnMvZXh0NC9pb2N0bC5jOjEyNjI6XHRcdCBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRUFfSU5PREUgfFx0XFxcbmZzL2V4dDQvaW9jdGwuYy0xMjYzLVx0XHQgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0VOQ1JZUFQgfFx0XFxcbi0tXG5mcy9leHQ0L3Zlcml0eS5jLTE1LSAqIGJ5IGV4dDQgd2l0aCBvbmx5IHNvbWUgcmVsYXRpdmVseSBzbWFsbCBjaGFuZ2VzIHRvIGV4dDQuICBUaGlzIGFwcHJvYWNoXG5mcy9leHQ0L3Zlcml0eS5jOjE2OiAqIGF2b2lkcyBoYXZpbmcgdG8gZGVwZW5kIG9uIHRoZSBFQV9JTk9ERSBmZWF0dXJlIGFuZCBvbiByZWFyY2hpdGVjdHVyaW5nXG5mcy9leHQ0L3Zlcml0eS5jLTE3LSAqIGV4dDQmIzM5O3MgeGF0dHIgc3VwcG9ydCB0byBzdXBwb3J0IHBhZ2luZyBtdWx0aS1naWdhYnl0ZSB4YXR0cnMgaW50byBtZW1vcnksIGFuZFxuLS1cbmZzL2V4dDQvdmVyaXR5LmM9MTAyPXN0YXRpYyBpbnQgZXh0NF9iZWdpbl9lbmFibGVfdmVyaXR5KHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmZzL2V4dDQvdmVyaXR5LmMtMTY4LSAqIHhhdHRycy4gIEFsc28sIGlmIHRoZSBkZXNjcmlwdG9yIGluY2x1ZGVzIGEgbGFyZ2Ugc2lnbmF0dXJlIGJsb2IgaXQgbWF5IGJlXG5mcy9leHQ0L3Zlcml0eS5jOjE2OTogKiB0b28gbGFyZ2UgdG8gc3RvcmUgaW4gYW4geGF0dHIgd2l0aG91dCB0aGUgRUFfSU5PREUgZmVhdHVyZS5cbmZzL2V4dDQvdmVyaXR5LmMtMTcwLSAqL1xuLS1cbmZzL2V4dDQveGF0dHIuYz0xMDE9Y29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBleHQ0X3hhdHRyX2hhbmRsZXJzW10gPSB7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTExMy1cbmZzL2V4dDQveGF0dHIuYzoxMTQ6I2RlZmluZSBFQV9JTk9ERV9DQUNIRShpbm9kZSlcdCgoKHN0cnVjdCBleHQ0X3NiX2luZm8gKikgXFxcbmZzL2V4dDQveGF0dHIuYy0xMTUtXHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZnNfaW5mbyktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSlcbi0tXG5mcy9leHQ0L3hhdHRyLmM9NDIwPXN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pZ2V0KHN0cnVjdCBpbm9kZSAqcGFyZW50LCB1bnNpZ25lZCBsb25nIGVhX2lubyxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtNDM2LVxuZnMvZXh0NC94YXR0ci5jOjQzNzpcdGlub2RlID0gZXh0NF9pZ2V0KHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm8sIEVYVDRfSUdFVF9FQV9JTk9ERSk7XG5mcy9leHQ0L3hhdHRyLmMtNDM4LVx0aWYgKElTX0VSUihpbm9kZSkpIHtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtNDU0LVx0ICAgIGlub2RlLVx1MDAzZWlfZ2VuZXJhdGlvbiA9PSBwYXJlbnQtXHUwMDNlaV9nZW5lcmF0aW9uKSB7XG5mcy9leHQ0L3hhdHRyLmM6NDU1Olx0XHRleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9MVVNUUkVfRUFfSU5PREUpO1xuZnMvZXh0NC94YXR0ci5jLTQ1Ni1cdFx0ZXh0NF94YXR0cl9pbm9kZV9zZXRfcmVmKGlub2RlLCAxKTtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9NDY4PXZvaWQgZXh0NF9ldmljdF9lYV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQveGF0dHIuYy00NzEtXG5mcy9leHQ0L3hhdHRyLmM6NDcyOlx0aWYgKCFFQV9JTk9ERV9DQUNIRShpbm9kZSkpXG5mcy9leHQ0L3hhdHRyLmMtNDczLVx0XHRyZXR1cm47XG5mcy9leHQ0L3hhdHRyLmMtNDc0LVx0LyogV2FpdCBmb3IgZW50cnkgdG8gZ2V0IHVudXNlZCBzbyB0aGF0IHdlIGNhbiByZW1vdmUgaXQgKi9cbmZzL2V4dDQveGF0dHIuYzo0NzU6XHR3aGlsZSAoKG9lID0gbWJfY2FjaGVfZW50cnlfZGVsZXRlX29yX2dldChFQV9JTk9ERV9DQUNIRShpbm9kZSksXG5mcy9leHQ0L3hhdHRyLmMtNDc2LVx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZ2V0X2hhc2goaW5vZGUpLCBpbm9kZS1cdTAwM2VpX2lubykpKSB7XG5mcy9leHQ0L3hhdHRyLmMtNDc3LVx0XHRtYl9jYWNoZV9lbnRyeV93YWl0X3VudXNlZChvZSk7XG5mcy9leHQ0L3hhdHRyLmM6NDc4Olx0XHRtYl9jYWNoZV9lbnRyeV9wdXQoRUFfSU5PREVfQ0FDSEUoaW5vZGUpLCBvZSk7XG5mcy9leHQ0L3hhdHRyLmMtNDc5LVx0fVxuLS1cbmZzL2V4dDQveGF0dHIuYz01MjU9ZXh0NF94YXR0cl9pbm9kZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LFxuLS1cbmZzL2V4dDQveGF0dHIuYy01Mjcte1xuZnMvZXh0NC94YXR0ci5jOjUyODpcdHN0cnVjdCBtYl9jYWNoZSAqZWFfaW5vZGVfY2FjaGUgPSBFQV9JTk9ERV9DQUNIRShpbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtNTI5LVx0c3RydWN0IGlub2RlICplYV9pbm9kZTtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtNTUwLVxuZnMvZXh0NC94YXR0ci5jOjU1MTpcdGlmICghZXh0NF90ZXN0X2lub2RlX3N0YXRlKGVhX2lub2RlLCBFWFQ0X1NUQVRFX0xVU1RSRV9FQV9JTk9ERSkpIHtcbmZzL2V4dDQveGF0dHIuYy01NTItXHRcdGVyciA9IGV4dDRfeGF0dHJfaW5vZGVfdmVyaWZ5X2hhc2hlcyhlYV9pbm9kZSwgZW50cnksIGJ1ZmZlcixcbi0tXG5mcy9leHQ0L3hhdHRyLmM9OTI0PXN0YXRpYyB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtOTI4LVx0aWYgKGVhX2lub2RlIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC94YXR0ci5jOjkyOTpcdCAgICBleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoZWFfaW5vZGUsIEVYVDRfU1RBVEVfTFVTVFJFX0VBX0lOT0RFKSlcbmZzL2V4dDQveGF0dHIuYy05MzAtXHRcdHJldHVybjtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MTQ2MT1zdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0xNDgwLVx0XHRcdFx0ICBTX0lGUkVHIHwgMDYwMCwgTlVMTCwgaW5vZGUtXHUwMDNlaV9pbm8gJiM0MzsgMSwgb3duZXIsXG5mcy9leHQ0L3hhdHRyLmM6MTQ4MTpcdFx0XHRcdCAgRVhUNF9FQV9JTk9ERV9GTCk7XG5mcy9leHQ0L3hhdHRyLmMtMTQ4Mi1cdGlmICghSVNfRVJSKGVhX2lub2RlKSkge1xuLS1cbmZzL2V4dDQveGF0dHIuYz0xNTE2PWV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTUyMC1cdHN0cnVjdCBtYl9jYWNoZV9lbnRyeSAqY2U7XG5mcy9leHQ0L3hhdHRyLmM6MTUyMTpcdHN0cnVjdCBtYl9jYWNoZSAqZWFfaW5vZGVfY2FjaGUgPSBFQV9JTk9ERV9DQUNIRShpbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMTUyMi1cdHZvaWQgKmVhX2RhdGE7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTE1NDEtXHRcdGVhX2lub2RlID0gZXh0NF9pZ2V0KGlub2RlLVx1MDAzZWlfc2IsIGNlLVx1MDAzZWVfdmFsdWUsXG5mcy9leHQ0L3hhdHRyLmM6MTU0MjpcdFx0XHRcdCAgICAgRVhUNF9JR0VUX0VBX0lOT0RFKTtcbmZzL2V4dDQveGF0dHIuYy0xNTQzLVx0XHRpZiAoSVNfRVJSKGVhX2lub2RlKSlcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MTU2Nz1zdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTYwMS1cbmZzL2V4dDQveGF0dHIuYzoxNjAyOlx0aWYgKEVBX0lOT0RFX0NBQ0hFKGlub2RlKSlcbmZzL2V4dDQveGF0dHIuYzoxNjAzOlx0XHRtYl9jYWNoZV9lbnRyeV9jcmVhdGUoRUFfSU5PREVfQ0FDSEUoaW5vZGUpLCBHRlBfTk9GUywgaGFzaCxcbmZzL2V4dDQveGF0dHIuYy0xNjA0LVx0XHRcdFx0ICAgICAgZWFfaW5vZGUtXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xuLS1cbmZzL2V4dDQveGF0dHIuYz0xODg4PWV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTE5OTMtXHRcdFx0aWYgKCFleHQ0X3Rlc3RfaW5vZGVfc3RhdGUodG1wX2lub2RlLFxuZnMvZXh0NC94YXR0ci5jOjE5OTQ6XHRcdFx0XHRcdEVYVDRfU1RBVEVfTFVTVFJFX0VBX0lOT0RFKSkge1xuZnMvZXh0NC94YXR0ci5jLTE5OTUtXHRcdFx0XHQvKlxuLS1cbmZzL2V4dDQveGF0dHIuYz0yOTk2PXZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjk5OS1cdFx0cmV0dXJuO1xuZnMvZXh0NC94YXR0ci5jOjMwMDA6XHRXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKTtcbmZzL2V4dDQveGF0dHIuYy0zMDAxLVx0aWYgKGlwdXRfaWZfbm90X2xhc3QoaW5vZGUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDgwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIHRoZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRUFfSU5PREUgRmVhdHVyZSBhbmQgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRUFfSU5PREVgIGZlYXR1cmUuIEl0JiMzOTtzIG5vdCBhIHN0YW5kYWxvbmUgS2NvbmZpZyBvcHRpb24sIGl0IGp1c3QgY29tZXMgYWxvbmcgd2l0aCBleHQ0LiBSaWdodCwgc28gdG8gYWN0dWFsbHkgKnRlc3QqIHRoaXMgZmVhdHVyZSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGV4dDQgaXRzZWxmIGlzIGVuYWJsZWQsIHdoaWNoIG1lYW5zIGBFWFQ0X0ZTYCBuZWVkcyB0byBiZSBzZXQuIE1ha2VzIHNlbnNlLgoKQW5kLCBvZiBjb3Vyc2UsIGV4dGVuZGVkIGF0dHJpYnV0ZXMgaGF2ZSB0byBiZSBlbmFibGVkLiBUaGF0IHNob3VsZCBiZSBgRVhUNF9GU19YQVRUUmAuIEJ1dCB3YWl0LCBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQmIzM5O3MgdXN1YWxseSBvbiBieSBkZWZhdWx0LCBvciBhdCBsZWFzdCBlYXN5IHRvIGV4cGxpY2l0bHkgc2V0LiBIb2xkIG9uLi4uZG9lcyBgRVhUNF9GU19YQVRUUmAgYWN0dWFsbHkgZXhpc3Q/IEkgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGF0OyBJIGRvbiYjMzk7dCB3YW50IHRvIG1ha2UgYXNzdW1wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVYVDRfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXG5mcy9leHQ0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1RoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxuLS1cbmZzL2V4dDQvS2NvbmZpZy00NS1cbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQvS2NvbmZpZy00Ny1cdGJvb2wgXCYjMzQ7RXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy01NS1cbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxuZnMvZXh0NC9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtFeHQ0IFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjI5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEVYVDQgRXh0ZW5kZWQgQXR0cmlidXRlcyAoeGF0dHJzKSoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgRVhUNCBmaWxlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IHhhdHRycy4gYEVYVDRfRlNgIGlzIHRoZSBjb3JlLCBhbmQgSSYjMzk7bSBub3RpbmcgdGhhdCB3aGlsZSBgRVhUNF9GU19QT1NJWF9BQ0xgIGFuZCBgRVhUNF9GU19TRUNVUklUWWAgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIHhhdHRycyB0b28sIHRoZSBFQSBpbm9kZXMgYXJlIHRoZSBpbXBvcnRhbnQgcGFydCBmb3IgbGFyZ2VyIGF0dHJpYnV0ZXMuIFNvLCBmb3Igbm93LCBsZXQmIzM5O3MganVzdCBzdGljayB3aXRoIGBFWFQ0X0ZTYC4KCkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBnb2luZyB0byBiZSBjcml0aWNhbCBmb3IgdGhlIGZ1enppbmcgY2FtcGFpZ24uIEkmIzM5O20gc2VlaW5nIGEgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBzZWVtIHByb21pc2luZywgYnV0IEkgbmVlZCB0byBtYWtlIHNvbWUgZGVjaXNpb25zLgoKSW5pdGlhbGx5LCBJIGhhZCBhIGZvY3VzIGxpc3Qgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiogICBgZXh0NF9lYV9pbm9kZV93b3JrYCAoc3RhdGljYWxseSBkZWZpbmVkLCBpdCBtaWdodCBub3QgYmUgZGlyZWN0bHkgZnV6emFibGUsIGJ1dCBpdCBpcyBjYWxsZWQgZnJvbSBhIHdvcmtxdWV1ZSwgc28gdGhlcmUgbWF5IGJlIGEgd2F5KQoqICAgYGV4dDRfcHV0X2VhX2lub2RlYCAoY2FsbGVkIGZyb20gdmFyaW91cyBsb2NhdGlvbnMpCiogICBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgCiogICBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYAoqICAgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgCiogICBgZXh0NF94YXR0cl9ibG9ja19zZXRgCiogICBgZXh0NF94YXR0cl9pYm9keV9zZXRgCiogICBgZXh0NF94YXR0cl9zZXRfZW50cnlgCiogICBgZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlYAoqICAgYGV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlYAoqICAgYGV4dDRfeGF0dHJfaW5vZGVfZ2V0YAoKQnV0IG5vdyB0aGF0IEkmIzM5O3ZlIHJldmlld2VkIHRoZSBwYXRjaCwgaXQgc2VlbXMgbGlrZSBzZXZlcmFsIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQuIEJhc2ljYWxseSwgYW55dGhpbmcgdGhhdCB1c2VkIGBpcHV0KGVhX2lub2RlKWAgaXMgbm93IHVzaW5nIGBleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSlgLiBBbHNvLCBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgIG5vIGxvbmdlciB1c2VzIGBlYV9pbm9kZV9hcnJheWAuCgpTbywgdGhlIGZvY3VzIHJlYWxseSBuYXJyb3dzIHRvIHRoZSBmb2xsb3dpbmcga2V5IGZ1bmN0aW9uczoKCiogICBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgCiogICBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYAoqICAgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgCiogICBgZXh0NF94YXR0cl9ibG9ja19zZXRgCiogICBgZXh0NF94YXR0cl9pYm9keV9zZXRgCiogICBgZXh0NF9wdXRfZWFfaW5vZGVgCgpJJiMzOTttIHRoaW5raW5nLCBpcyBgZXh0NF9lYV9pbm9kZV93b3JrYCByZWFjaGFibGUsIGRlc3BpdGUgYmVpbmcgc3RhdGljPyBZZXMsIGl0JiMzOTtzIHRyaWdnZXJlZCB2aWEgZGVsYXllZCB3b3JrLiBBbmQgYGV4dDRfcHV0X2VhX2lub2RlYD8gWWVwLCBpbnZvbHZlZCBpbiBzZXR0aW5nLCBnZXR0aW5nLCBhbmQgZGVsZXRpbmcgbGFyZ2UgeGF0dHJzLiBBbmQgd2hhdCBhYm91dCBgaXB1dF9pZl9ub3RfbGFzdGA/IFRoYXQmIzM5O3MgaW5saW5lIGluIGBmcy5oYCwgc28gYWNjZXNzaWJsZS4KClNvLCBnb2luZyBiYWNrIHRvIHRoZSBmaXJzdCBwb2ludDsgaXMgYEVYVDRfRlNgIHRoZSByaWdodCBzY29wZT8gWWVzLCBpdCBzZWVtcyBsaWtlIGl0IHdpbGwgcHJvdmlkZSBlbm91Z2ggY292ZXJhZ2UuCgpMZXQmIzM5O3MgcmVmaW5lIHRob3NlICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6CgoqICAgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYAoqICAgYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2AKKiAgIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYAoqICAgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YAoqICAgYGV4dDRfeGF0dHJfaWJvZHlfc2V0YAoqICAgYGV4dDRfcHV0X2VhX2lub2RlYAoqICAgYGV4dDRfZWFfaW5vZGVfd29ya2AKCkkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2AgaXMgc3RhdGljLCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jPTEyNjI9c3RhdGljIHZvaWRcbmZzL2V4dDQveGF0dHIuYzoxMjYzOmV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC94YXR0ci5jLTEyNjQtXHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4tLVxuZnMvZXh0NC94YXR0ci5jPTE4ODg9ZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjE3My1cdGlmIChicy1cdTAwM2ViaCBcdTAwMjZcdTAwMjYgYnMtXHUwMDNlYmggIT0gbmV3X2JoKSB7XG5mcy9leHQ0L3hhdHRyLmM6MjE3NDpcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJzLVx1MDAzZWJoLFxuZnMvZXh0NC94YXR0ci5jLTIxNzUtXHRcdFx0XHRcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xuLS1cbmZzL2V4dDQveGF0dHIuYz0yODYwPWludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yOTM2LVxuZnMvZXh0NC94YXR0ci5jOjI5Mzc6XHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcbmZzL2V4dDQveGF0dHIuYy0yOTM4LVx0XHRcdFx0XHQgZXh0cmFfY3JlZGl0cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1MjcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKlhGUyBFeHRlbmRlZCBBdHRyaWJ1dGUgRnVuY3Rpb24gSW5jbHVzaW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBYRlMgZXh0ZW5kZWQgYXR0cmlidXRlIGZ1bmN0aW9ucyBhbmQgZmlndXJpbmcgb3V0IHdoYXQmIzM5O3MgcmVsZXZhbnQgdG8gaW5jbHVkZS4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoYXQgdGhpcyBpcyBhIHN0YXRpYyBjb250ZXh0LCB3aGljaCBpcyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSByaWdodCBvbmVzLiBJdCBsb29rcyBsaWtlIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAgaXMgZ2xvYmFsLCBzbyB0aGF0JiMzOTtzIGRlZmluaXRlbHkgaW4uIFRoZW4gdGhlcmUmIzM5O3MgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCwgd2hpY2ggaXMgYWxzbyBnbG9iYWwg4oCTIGluY2x1ZGUgaXQuIFNhbWUgZ29lcyBmb3IgYGV4dDRfeGF0dHJfaWJvZHlfc2V0YCBhbmQgYGV4dDRfcHV0X2VhX2lub2RlYCDigJMgdGhvc2UgYXJlIGdsb2JhbCB0b28sIHNvIEkmIzM5O2xsIGJlIHN1cmUgdG8gaW5jbHVkZSB0aGVtLiBOb3csIHRoZXJlJiMzOTtzIGBleHQ0X2VhX2lub2RlX3dvcmtgIC0gaXQmIzM5O3Mgc3RhdGljLCBidXQgc2VlbXMgcmVsYXRlZCwgc28gSSYjMzk7bGwgaW5jbHVkZSBpdCBpbiB0aGlzIHBhc3MuCgpMZXQmIzM5O3MgcXVpY2tseSBjcmVhdGUgdGhlIGxpc3QuIEkmIzM5O2xsIGluY2x1ZGU6Ci0gYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYAotIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAKLSBgZXh0NF94YXR0cl9pYm9keV9zZXRgCi0gYGV4dDRfcHV0X2VhX2lub2RlYAotIGBleHQ0X2VhX2lub2RlX3dvcmtgCi0gYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2AKLSBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAKCldhaXQgYSBzZWNvbmQuLi5JIGp1c3QgY2F1Z2h0IHRoYXQgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgIGlzIHN0YXRpYyBhcyB3ZWxsLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmM9MTE1NT1zdGF0aWMgdm9pZFxuZnMvZXh0NC94YXR0ci5jOjExNTY6ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbmZzL2V4dDQveGF0dHIuYy0xMTU3LVx0XHRcdCAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MTI2Mz1leHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTMwMi1cdFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYikpXG5mcy9leHQ0L3hhdHRyLmM6MTMwMzpcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLFxuZnMvZXh0NC94YXR0ci5jLTEzMDQtXHRcdFx0XHRcdFx0ICAgICBCRklSU1QoYmgpLFxuLS1cbmZzL2V4dDQveGF0dHIuYz0yODYwPWludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yODk1LVx0XHRpZiAoaGVhZGVyLVx1MDAzZWhfbWFnaWMgPT0gY3B1X3RvX2xlMzIoRVhUNF9YQVRUUl9NQUdJQykpXG5mcy9leHQ0L3hhdHRyLmM6Mjg5NjpcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGlsb2MuYmgsXG5mcy9leHQ0L3hhdHRyLmMtMjg5Ny1cdFx0XHRcdFx0XHQgICAgIElGSVJTVChoZWFkZXIpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ4NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipGb2N1cyBTeW1ib2wgTWFuYWdlbWVudCBhbmQgYSBRdWljayBDaGVjayoqCgpSaWdodCwgdGhlc2UgbmV3IGl0ZW1zIG5lZWQgdG8gYmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBgRm9jdXNTeW1ib2xzYCBzdHJ1Y3R1cmUuIFRoYXQmIzM5O3MgdGhlIGltbWVkaWF0ZSBhY3Rpb24uIEJlZm9yZSBJIGZ1bGx5IGNvbW1pdCwgdGhvdWdoLCBsZXQmIzM5O3MganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYGlwdXRfaWZfbm90X2xhc3RgIGlzIGJlaGF2aW5nIGFzIEkgZXhwZWN0LCBhbmQgdGhhdCBtZWFucyBhIHBlZWsgYXQgYGluY2x1ZGUvbGludXgvZnMuaGAuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGEgc3VidGxlIGVkZ2UgY2FzZSBoYXMgYmVlbiB1bmNvdmVyZWQgYnkgdGhpcy4gVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSByZWxlYXNlIG9mIGFuIGlub2RlLiBJIG5lZWQgdG8gbWFrZSBjZXJ0YWluIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGFuZCB1c2FnZSBhbGlnbiB3aXRoIG15IGN1cnJlbnQgdW5kZXJzdGFuZGluZyBvZiB0aGUgZm9jdXMgc3ltYm9sIHN0cmF0ZWd5LCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIGZpbmFsaXphdGlvbiBhbmQgYW55IGFzc29jaWF0ZWQgcmFjZSBjb25kaXRpb25zIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuIFRoaXMgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIHdpbGwgZW5zdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgd2l0aCBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgbmV3IGVudHJpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdXRfaWZfbm90X2xhc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZzLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mcy5oPTI0MTU9dm9pZCBpcHV0X25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjQxNy0vKipcbmluY2x1ZGUvbGludXgvZnMuaDoyNDE4OiAqIGlwdXRfaWZfbm90X2xhc3QgLSBkcm9wIGFuIGlub2RlIHJlZmVyZW5jZSBvbmx5IGlmIGl0IGlzIG5vdCB0aGUgbGFzdCBvbmVcbmluY2x1ZGUvbGludXgvZnMuaC0yNDE5LSAqIEBpbm9kZTogaW5vZGUgdG8gcHV0XG4tLVxuaW5jbHVkZS9saW51eC9mcy5oLTI0MjMtICovXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjQyNDpzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGlwdXRfaWZfbm90X2xhc3Qoc3RydWN0IGlub2RlICppbm9kZSlcbmluY2x1ZGUvbGludXgvZnMuaC0yNDI1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5MjIKCQkJCQkJCW91dHB1dDogMjIyCgkJCQkJCQl0aG91Z2h0czogMjYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIElub2RlIEhhbmRsaW5nIGluIGV4dDQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlIG5lZWQgdG8gZnV6eiB0aGUgY2hhbmdlcyB0byBleHQ0JiMzOTtzIEVBIGlub2RlIGhhbmRsaW5nLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGdvYWwgaGVyZSBpcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyB3aGVuIGRlYWxpbmcgd2l0aCBFQSBpbm9kZXMsIHdoaWNoIGlzIGNydWNpYWwgZm9yIG92ZXJhbGwgZmlsZXN5c3RlbSBzdGFiaWxpdHkuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgaW50cm9kdWNlZCBhIGRlZmVycmVkIGBpcHV0YCBtZWNoYW5pc20gdXNpbmcgYSBsb2NrbGVzcyBsaXN0IGFuZCBhIGRlbGF5ZWQgd29ya3F1ZXVlIGNhbGxlZCBgZXh0NF9lYV9pbm9kZV93b3JrYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIHNoaWZ0IGFuZCBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIHJvYnVzdC4KCldoaWxlIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIG9mIGludGVyZXN0LCBgZXh0NF9wdXRfZWFfaW5vZGVgLCBtaWdodCBub3QgYmUgZGlyZWN0bHkgZnV6emFibGUgYXMgYSBzeW1ib2wgYmVjYXVzZSBpdCYjMzk7cyBpbmxpbmVkLCBpdCYjMzk7cyBzdGlsbCBhdCB0aGUgaGVhcnQgb2YgdGhlIGNoYW5nZXMgYW5kIHRoZXJlZm9yZSBhIGtleSBjb25zaWRlcmF0aW9uLiBUaGUgY29yZSBmdW5jdGlvbnMgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiBhcmU6IGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAsIGBleHQ0X3hhdHRyX2lib2R5X3NldGAsIGBleHQ0X3B1dF9lYV9pbm9kZWAgKGV2ZW4gaWYgaW5saW5lZCwgSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBob3cgaXQmIzM5O3MgdXNlZCksIGBleHQ0X2VhX2lub2RlX3dvcmtgLCBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYCwgYW5kIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYC4gVGhlc2UgYXJlIHRoZSBidWlsZGluZyBibG9ja3MgaW52b2x2ZWQgaW4gRUEgaW5vZGUgZXZpY3Rpb24sIGFuZCBuZWVkIHRvIGJlIGV4YW1pbmVkIGNhcmVmdWxseS4KClRoZSBjb25maWd1cmF0aW9ucyBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGVuYWJsZSBmb3IgdGhlIGZ1enppbmcgcnVucyB3b3VsZCBiZSBgRVhUNF9GU2AuIEkmIzM5O20gY29uY2VybmVkIGFib3V0IHRoZSB1c3VhbCBzdXNwZWN0czogdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzLCBhbmQgcG90ZW50aWFsIGRlYWRsb2NrcyB0aGF0IG1pZ2h0IGFyaXNlIGR1ZSB0byB0aGlzIG5ldyBkZWxheWVkIHdvcmtxdWV1ZSBhbmQgbG9ja2xlc3MgbGlzdC4gSSBuZWVkIHRvIGRlc2lnbiBmdXp6aW5nIGNhbXBhaWducyB0aGF0IHNwZWNpZmljYWxseSB0YXJnZXQgdGhvc2UgYXJlYXMgYW5kIHRlc3QgdGhvcm91Z2hseS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBsb2NrbGVzcyBsaXN0IGFuZCB0aGUgd29ya3F1ZXVlIGFuZCBlbnN1cmUgdGhhdCB0aGUgZXZpY3Rpb24gcHJvY2VzcyBpcyBjbGVhbiBhbmQgY29uc2lzdGVudCB1bmRlciB2YXJpb3VzIGxvYWQgY29uZGl0aW9ucy4KClJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF94YXR0cl9kZWxldGVfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9ibG9ja19zZXQmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pYm9keV9zZXQmIzM0OywKICAgICYjMzQ7ZXh0NF9wdXRfZWFfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF9lYV9pbm9kZV93b3JrJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQmIzM5O3MgaGFuZGxpbmcgb2YgRXh0ZW5kZWQgQXR0cmlidXRlIChFQSkgaW5vZGVzIGJ5IGludHJvZHVjaW5nIGEgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMuIEl0IHJlcGxhY2VzIHRoZSBgZXh0NF94YXR0cl9pbm9kZV9hcnJheWAgd2l0aCBhIGxvY2tsZXNzIGxpc3QgYW5kIGEgZGVsYXllZCB3b3JrcXVldWUgKGBleHQ0X2VhX2lub2RlX3dvcmtgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgZGVhZGxvY2tzIG9jY3VyIGR1cmluZyBFQSBpbm9kZSBldmljdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfeGF0dHJfZGVsZXRlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfYmxvY2tfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaWJvZHlfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfcHV0X2VhX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfZWFfaW5vZGVfd29yayYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2smIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleHQ0JiMzOTtzIGhhbmRsaW5nIG9mIEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIGlub2RlcyBieSBpbnRyb2R1Y2luZyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBJdCByZXBsYWNlcyB0aGUgYGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlgIHdpdGggYSBsb2NrbGVzcyBsaXN0IGFuZCBhIGRlbGF5ZWQgd29ya3F1ZXVlIChgZXh0NF9lYV9pbm9kZV93b3JrYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGRlYWRsb2NrcyBvY2N1ciBkdXJpbmcgRUEgaW5vZGUgZXZpY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMDo0MC40MTY1OTcyMzZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjM0NDQwNjA3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF94YXR0cl9kZWxldGVfaW5vZGVcIixcbiAgICBcImV4dDRfeGF0dHJfYmxvY2tfc2V0XCIsXG4gICAgXCJleHQ0X3hhdHRyX2lib2R5X3NldFwiLFxuICAgIFwiZXh0NF9wdXRfZWFfaW5vZGVcIixcbiAgICBcImV4dDRfZWFfaW5vZGVfd29ya1wiLFxuICAgIFwiZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrXCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NCdzIGhhbmRsaW5nIG9mIEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIGlub2RlcyBieSBpbnRyb2R1Y2luZyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBJdCByZXBsYWNlcyB0aGUgYGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlgIHdpdGggYSBsb2NrbGVzcyBsaXN0IGFuZCBhIGRlbGF5ZWQgd29ya3F1ZXVlIChgZXh0NF9lYV9pbm9kZV93b3JrYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGRlYWRsb2NrcyBvY2N1ciBkdXJpbmcgRUEgaW5vZGUgZXZpY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjEwOjQwLjQxNjYwNDg1NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMxMDk5NDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGFlNzYyYjJhYzM5MzczNDY3MTlmZjJmZTkzZGJkOGFjNjJkYjE4NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAyIDE4OjEwOjM4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcXG5pbmRleCBiMzdjMTM2ZWEzYWIzMy4uYjliMGFkYTc3NzRiYjQgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxcbkBAIC0xMDcwLDggKzEwNzAsMTQgQEAgc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XFxuIFxcdCAqIGJldHdlZW4gcmVhZGVycyBvZiBFQXMgYW5kIHdyaXRlcnMgb2YgcmVndWxhciBmaWxlIGRhdGEsIHNvXFxuIFxcdCAqIGluc3RlYWQgd2Ugc3luY2hyb25pemUgb24geGF0dHJfc2VtIHdoZW4gcmVhZGluZyBvciBjaGFuZ2luZ1xcbiBcXHQgKiBFQXMuXFxuK1xcdCAqXFxuK1xcdCAqIEVBIGlub2RlcyAoRVhUNF9FQV9JTk9ERV9GTCkgZG8gbm90IHVzZSB4YXR0cl9zZW07IHRoZXkgcmV1c2VcXG4rXFx0ICogdGhlIHNwYWNlIGZvciBkZWZlcnJlZCBpcHV0IGxpbmthZ2UuXFxuIFxcdCAqL1xcbi1cXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcXG4rXFx0XFx0c3RydWN0IGxsaXN0X25vZGUgaV9lYV9pcHV0X25vZGU7XFxuK1xcdH07XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBJbm9kZXMgd2l0aCBFWFQ0X1NUQVRFX09SUEhBTl9GSUxFIHVzZSBpX29ycGhhbl9pZHguIE90aGVyd2lzZVxcbkBAIC0xNzcwLDYgKzE3NzYsMTEgQEAgc3RydWN0IGV4dDRfc2JfaW5mbyB7XFxuIFxcdHN0cnVjdCBleHQ0X2VzX3N0YXRzIHNfZXNfc3RhdHM7XFxuIFxcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9ibG9ja19jYWNoZTtcXG4gXFx0c3RydWN0IG1iX2NhY2hlICpzX2VhX2lub2RlX2NhY2hlO1xcbitcXG4rXFx0LyogRGVmZXJyZWQgaXB1dCBmb3IgRUEgaW5vZGVzIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzICovXFxuK1xcdHN0cnVjdCBsbGlzdF9oZWFkIHNfZWFfaW5vZGVfdG9fZnJlZTtcXG4rXFx0c3RydWN0IGRlbGF5ZWRfd29yayBzX2VhX2lub2RlX3dvcms7XFxuK1xcbiBcXHRzcGlubG9ja190IHNfZXNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xcbiBcXG4gXFx0LyogSm91cm5hbCB0cmlnZ2VycyBmb3IgY2hlY2tzdW0gY29tcHV0YXRpb24gKi9cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXFxuaW5kZXggY2U5OTgwN2M1ZjViMmMuLjc0N2M1MmMyMzJjYzAzIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xcbkBAIC0xNzYsNyArMTc2LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdCAqICh4YXR0ciBibG9jayBmcmVlaW5nKSwgYml0bWFwLCBncm91cCBkZXNjcmlwdG9yIChpbm9kZSBmcmVlaW5nKVxcbiBcXHQgKi9cXG4gXFx0aW50IGV4dHJhX2NyZWRpdHMgPSA2O1xcbi1cXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xcbiBcXHRib29sIGZyZWV6ZV9wcm90ZWN0ZWQgPSBmYWxzZTtcXG4gXFxuIFxcdHRyYWNlX2V4dDRfZXZpY3RfaW5vZGUoaW5vZGUpO1xcbkBAIC0yODEsOCArMjgwLDcgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdH1cXG4gXFxuIFxcdC8qIFJlbW92ZSB4YXR0ciByZWZlcmVuY2VzLiAqL1xcbi1cXHRlcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBcXHUwMDI2ZWFfaW5vZGVfYXJyYXksXFxuLVxcdFxcdFxcdFxcdCAgICAgIGV4dHJhX2NyZWRpdHMpO1xcbitcXHRlcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBleHRyYV9jcmVkaXRzKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRleHQ0X3dhcm5pbmcoaW5vZGUtXFx1MDAzZWlfc2IsIFxcXCJ4YXR0ciBkZWxldGUgKGVyciAlZClcXFwiLCBlcnIpO1xcbiBzdG9wX2hhbmRsZTpcXG5AQCAtMjkwLDcgKzI4OCw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRcXHRleHQ0X29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpO1xcbiBcXHRcXHRpZiAoZnJlZXplX3Byb3RlY3RlZClcXG4gXFx0XFx0XFx0c2JfZW5kX2ludHdyaXRlKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tXFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcXG4gXFx0XFx0Z290byBub19kZWxldGU7XFxuIFxcdH1cXG4gXFxuQEAgLTMyMCw3ICszMTcsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG4gXFx0aWYgKGZyZWV6ZV9wcm90ZWN0ZWQpXFxuIFxcdFxcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cXHUwMDNlaV9zYik7XFxuLVxcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XFxuIFxcdHJldHVybjtcXG4gbm9fZGVsZXRlOlxcbiBcXHQvKlxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcXG5pbmRleCAyNDVmNjdkMTBkZWQzNC4uM2VmYTVhODE3YmVmNGYgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXFxuKysrIGIvZnMvZXh0NC9zdXBlci5jXFxuQEAgLTEzMDMsNiArMTMwMyw4IEBAIHN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdFxcdFxcdCBcXHUwMDI2c2ItXFx1MDAzZXNfdXVpZCk7XFxuIFxcbiBcXHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XFxuK1xcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIHdoaWxlIHF1b3RhIGlzIHN0aWxsIGFjdGl2ZS4gKi9cXG4rXFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfd29yayk7XFxuIFxcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xcbiBcXG4gXFx0ZGVzdHJveV93b3JrcXVldWUoc2JpLVxcdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XFxuQEAgLTE0MjMsNiArMTQyNSwxMyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdG1lbXNldChcXHUwMDI2ZWktXFx1MDAzZWlfZHF1b3QsIDAsIHNpemVvZihlaS1cXHUwMDNlaV9kcXVvdCkpO1xcbiAjZW5kaWZcXG4gXFx0ZWktXFx1MDAzZWppbm9kZSA9IE5VTEw7XFxuK1xcdC8qXFxuK1xcdCAqIFJlaW5pdGlhbGl6ZSB4YXR0cl9zZW0gZXZlcnkgYWxsb2NhdGlvbiBiZWNhdXNlIEVBIGlub2Rlc1xcbitcXHQgKiBzaGFyZSB0aGlzIHNwYWNlIHdpdGggaV9lYV9pcHV0X25vZGUgKHZpYSB1bmlvbikgd2hpY2ggbWF5XFxuK1xcdCAqIGhhdmUgb3ZlcndyaXR0ZW4gdGhlIHNlbWFwaG9yZSB3aGVuIHRoZSBzbGFiIG9iamVjdCB3YXNcXG4rXFx0ICogcHJldmlvdXNseSB1c2VkIGFzIGFuIEVBIGlub2RlLlxcbitcXHQgKi9cXG4rXFx0aW5pdF9yd3NlbShcXHUwMDI2ZWktXFx1MDAzZXhhdHRyX3NlbSk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlaS1cXHUwMDNlaV9yc3ZfY29udmVyc2lvbl9saXN0KTtcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmVpLVxcdTAwM2VpX2NvbXBsZXRlZF9pb19sb2NrKTtcXG4gXFx0ZWktXFx1MDAzZWlfc3luY190aWQgPSAwO1xcbkBAIC0xNDg4LDcgKzE0OTcsNiBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxcbiBcXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGZvbztcXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlaS1cXHUwMDNlaV9vcnBoYW4pO1xcbi1cXHRpbml0X3J3c2VtKFxcdTAwMjZlaS1cXHUwMDNleGF0dHJfc2VtKTtcXG4gXFx0aW5pdF9yd3NlbShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbiBcXHRpbm9kZV9pbml0X29uY2UoXFx1MDAyNmVpLVxcdTAwM2V2ZnNfaW5vZGUpO1xcbiBcXHRleHQ0X2ZjX2luaXRfaW5vZGUoXFx1MDAyNmVpLVxcdTAwM2V2ZnNfaW5vZGUpO1xcbkBAIC01NDk3LDYgKzU1MDUsOCBAQCBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gXFx0XFx0XFx0ICBleHQ0X2hhc19mZWF0dXJlX29ycGhhbl9wcmVzZW50KHNiKSB8fFxcbiBcXHRcXHRcXHQgIGV4dDRfaGFzX2ZlYXR1cmVfam91cm5hbF9uZWVkc19yZWNvdmVyeShzYikpO1xcbiBcXG4rXFx0ZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc2JpKTtcXG4rXFxuIFxcdGlmIChleHQ0X2hhc19mZWF0dXJlX21tcChzYikgXFx1MDAyNlxcdTAwMjYgIXNiX3Jkb25seShzYikpIHtcXG4gXFx0XFx0ZXJyID0gZXh0NF9tdWx0aV9tb3VudF9wcm90ZWN0KHNiLCBsZTY0X3RvX2NwdShlcy1cXHUwMDNlc19tbXBfYmxvY2spKTtcXG4gXFx0XFx0aWYgKGVycilcXG5AQCAtNTc0Nyw2ICs1NzU3LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZmFpbGVkX21vdW50OTpcXG4rXFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIHF1b3RhIHNodXRkb3duICovXFxuK1xcdGZsdXNoX2RlbGF5ZWRfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmspO1xcbiBcXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcXG4gZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG4gXFx0ZXh0NF9yZWxlYXNlX29ycGhhbl9pbmZvKHNiKTtcXG5AQCAtNTc2Nyw2ICs1Nzc5LDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG4gXFx0aWYgKEVYVDRfU0Ioc2IpLVxcdTAwM2Vyc3ZfY29udmVyc2lvbl93cSlcXG4gXFx0XFx0ZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktXFx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKTtcXG4gZmFpbGVkX21vdW50X3dxOlxcbitcXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgZnJlZWluZyBzdHJ1Y3R1cmVzICovXFxuK1xcdGZsdXNoX2RlbGF5ZWRfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmspO1xcbiBcXHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVxcdTAwM2VzX2VhX2lub2RlX2NhY2hlKTtcXG4gXFx0c2JpLVxcdTAwM2VzX2VhX2lub2RlX2NhY2hlID0gTlVMTDtcXG4gXFxuQEAgLTU3NzcsNiArNTc5MSw4IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuIFxcdFxcdGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVxcdTAwM2VzX2pvdXJuYWwpO1xcbiBcXHR9XFxuIGZhaWxlZF9tb3VudDNhOlxcbitcXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBmcm9tIGpvdXJuYWwgcmVwbGF5ICovXFxuK1xcdGZsdXNoX2RlbGF5ZWRfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmspO1xcbiBcXHRleHQ0X2VzX3VucmVnaXN0ZXJfc2hyaW5rZXIoc2JpKTtcXG4gZmFpbGVkX21vdW50MzpcXG4gXFx0LyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi9cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXFxuaW5kZXggOTgyYTFmODMxZTIyODIuLjRhZTZjZTExMTU2NjBlIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xcbisrKyBiL2ZzL2V4dDQveGF0dHIuY1xcbkBAIC0xMTQsMTAgKzExNCw2IEBAIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyc1tdID0ge1xcbiAjZGVmaW5lIEVBX0lOT0RFX0NBQ0hFKGlub2RlKVxcdCgoKHN0cnVjdCBleHQ0X3NiX2luZm8gKikgXFxcXFxcbiBcXHRcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19mc19pbmZvKS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSlcXG4gXFxuLXN0YXRpYyBpbnRcXG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcXG4tXFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSk7XFxuLVxcbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4gdm9pZCBleHQ0X3hhdHRyX2lub2RlX3NldF9jbGFzcyhzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlKVxcbiB7XFxuQEAgLTU2Nyw3ICs1NjMsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZW50cnksXFxuIFxcdFxcdFxcdFxcdFxcdGVhX2lub2RlLVxcdTAwM2VpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7XFxuIFxcdH1cXG4gb3V0Olxcbi1cXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbkBAIC0xMTA0LDEwICsxMTAwLDEwIEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0ZXJyID0gZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXFxcImluYyByZWYgZXJyb3IgJWRcXFwiLCBlcnIpO1xcbi1cXHRcXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcdFxcdH1cXG4tXFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTExMzMsNyArMTEyOSw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcXFwiY2xlYW51cCBkZWMgcmVmIGVycm9yICVkXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgZXJyKTtcXG4tXFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gc2F2ZWRfZXJyO1xcbiB9XFxuQEAgLTExNjAsNyArMTE1Niw2IEBAIHN0YXRpYyB2b2lkXFxuIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3QsIGJvb2wgYmxvY2tfY3N1bSxcXG4tXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxcbiBcXHRcXHRcXHQgICAgIGludCBleHRyYV9jcmVkaXRzLCBib29sIHNraXBfcXVvdGEpXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICplYV9pbm9kZTtcXG5AQCAtMTE5NywxNCArMTE5Miw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0ZXJyID0gZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoZWFfaW5vZGVfYXJyYXksIGVhX2lub2RlKTtcXG4tXFx0XFx0aWYgKGVycikge1xcbi1cXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIFxcXCJFeHBhbmQgaW5vZGUgYXJyYXkgZXJyPSVkXFxcIiwgZXJyKTtcXG4tXFx0XFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcbiBcXHRcXHRlcnIgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNfZm4oaGFuZGxlLCBjcmVkaXRzLCBjcmVkaXRzLFxcbiBcXHRcXHRcXHRleHQ0X2ZyZWVfbWV0YWRhdGFfcmV2b2tlX2NyZWRpdHMocGFyZW50LVxcdTAwM2VpX3NiLCAxKSxcXG4gXFx0XFx0XFx0ZXh0NF94YXR0cl9yZXN0YXJ0X2ZuKGhhbmRsZSwgcGFyZW50LCBiaCwgYmxvY2tfY3N1bSxcXG5AQCAtMTIxMiw2ICsxMTk5LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcXFwiRW5zdXJlIGNyZWRpdHMgZXJyPSVkXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgZXJyKTtcXG4rXFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2UgMCkge1xcbkBAIC0xMjIxLDYgKzEyMDksNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcXCJSZS1nZXQgd3JpdGUgYWNjZXNzIGVycj0lZFxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGVycik7XFxuK1xcdFxcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbkBAIC0xMjI5LDYgKzEyMTgsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXFxcImVhX2lub2RlIGRlYyByZWYgZXJyPSVkXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgZXJyKTtcXG4rXFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMTI0NSw2ICsxMjM1LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0ZW50cnktXFx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XFxuIFxcdFxcdGVudHJ5LVxcdTAwM2VlX3ZhbHVlX3NpemUgPSAwO1xcbiBcXG4rXFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHRcXHRkaXJ0eSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuQEAgLTEyNzEsNyArMTI2Miw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuIHN0YXRpYyB2b2lkXFxuIGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tXFx0XFx0XFx0IHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXFxuIFxcdFxcdFxcdCBpbnQgZXh0cmFfY3JlZGl0cylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWJfY2FjaGUgKmVhX2Jsb2NrX2NhY2hlID0gRUFfQkxPQ0tfQ0FDSEUoaW5vZGUpO1xcbkBAIC0xMzEzLDcgKzEzMDMsNiBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBiaCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBCRklSU1QoYmgpLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHRydWUgLyogYmxvY2tfY3N1bSAqLyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBlYV9pbm9kZV9hcnJheSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBleHRyYV9jcmVkaXRzLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7XFxuIFxcdFxcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgYmgsIDAsIDEsXFxuQEAgLTE1MDUsNyArMTQ5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdFxcdFxcdGlmIChleHQ0X3hhdHRyX2lub2RlX2RlY19yZWYoaGFuZGxlLCBlYV9pbm9kZSkpXFxuIFxcdFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFxcImNsZWFudXAgZGVjIHJlZiBlcnJvciAlZFxcXCIsIGVycik7XFxuLVxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTE1NjQsNyArMTU1Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSxcXG4gXFx0XFx0XFx0a3ZmcmVlKGVhX2RhdGEpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZWFfaW5vZGU7XFxuIFxcdFxcdH1cXG4tXFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcXG4gXFx0bmV4dF9lbnRyeTpcXG4gXFx0XFx0Y2UgPSBtYl9jYWNoZV9lbnRyeV9maW5kX25leHQoZWFfaW5vZGVfY2FjaGUsIGNlKTtcXG4gXFx0fVxcbkBAIC0xNjE1LDcgKzE2MDQsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgZWFfaW5vZGUtXFx1MDAzZWlfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTtcXG4gXFx0cmV0dXJuIGVhX2lub2RlO1xcbiBvdXRfZXJyOlxcbi1cXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIE5VTEwsIHZhbHVlX2xlbik7XFxuIFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuIH1cXG5AQCAtMTg0OCw3ICsxODM3LDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxcbiBcXG4gXFx0cmV0ID0gMDtcXG4gb3V0Olxcbi1cXHRpcHV0KG9sZF9lYV9pbm9kZSk7XFxuK1xcdGV4dDRfcHV0X2VhX2lub2RlKG9sZF9lYV9pbm9kZSk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTIwMTAsNyArMTk5OSw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdFxcdG9sZF9lYV9pbm9kZV9xdW90YSA9IGxlMzJfdG9fY3B1KFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VoZXJlLVxcdTAwM2VlX3ZhbHVlX3NpemUpO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlwdXQodG1wX2lub2RlKTtcXG4rXFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUodG1wX2lub2RlKTtcXG4gXFxuIFxcdFxcdFxcdHMtXFx1MDAzZWhlcmUtXFx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XFxuIFxcdFxcdFxcdHMtXFx1MDAzZWhlcmUtXFx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XFxuQEAgLTIxNTAsNyArMjEzOSw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcImRlYyByZWYgZXJyb3I9JWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBlcnJvcik7XFxuLVxcdFxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdFxcdGVhX2lub2RlID0gTlVMTDtcXG4gXFx0XFx0XFx0fVxcbiBcXG5AQCAtMjE4MiwxMiArMjE3MSw4IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcbiBcXHQvKiBEcm9wIHRoZSBwcmV2aW91cyB4YXR0ciBibG9jay4gKi9cXG4gXFx0aWYgKGJzLVxcdTAwM2ViaCBcXHUwMDI2XFx1MDAyNiBicy1cXHUwMDNlYmggIT0gbmV3X2JoKSB7XFxuLVxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7XFxuLVxcbiBcXHRcXHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYnMtXFx1MDAzZWJoLFxcbi1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmVhX2lub2RlX2FycmF5LFxcbiBcXHRcXHRcXHRcXHRcXHQgMCAvKiBleHRyYV9jcmVkaXRzICovKTtcXG4tXFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcXG4gXFx0fVxcbiBcXHRlcnJvciA9IDA7XFxuIFxcbkBAIC0yMjAzLDcgKzIxODgsNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHR9XFxuIFxcdGlmIChjZSlcXG4gXFx0XFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7XFxuQEAgLTIyODUsNyArMjI3MCw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXG4gXFx0XFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XFxuLVxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXHR9XFxuQEAgLTIyOTcsNyArMjI4Miw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRoZWFkZXItXFx1MDAzZWhfbWFnaWMgPSBjcHVfdG9fbGUzMigwKTtcXG4gXFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUik7XFxuIFxcdH1cXG4tXFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTI4NjMsNDYgKzI4NDgsNiBAQCBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcXG4gXFx0cmV0dXJuIGVycm9yO1xcbiB9XFxuIFxcbi0jZGVmaW5lIEVJQV9JTkNSIDE2IC8qIG11c3QgYmUgMl5uICovXFxuLSNkZWZpbmUgRUlBX01BU0sgKEVJQV9JTkNSIC0gMSlcXG4tXFxuLS8qIEFkZCB0aGUgbGFyZ2UgeGF0dHIgQGlub2RlIGludG8gQGVhX2lub2RlX2FycmF5IGZvciBkZWZlcnJlZCBpcHV0KCkuXFxuLSAqIElmIEBlYV9pbm9kZV9hcnJheSBpcyBuZXcgb3IgZnVsbCBpdCB3aWxsIGJlIGdyb3duIGFuZCB0aGUgb2xkXFxuLSAqIGNvbnRlbnRzIGNvcGllZCBvdmVyLlxcbi0gKi9cXG4tc3RhdGljIGludFxcbi1leHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxcbi1cXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi17XFxuLVxcdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkge1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHQoKmVhX2lub2RlX2FycmF5KSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBFSUFfTUFTSywgR0ZQX05PRlMpO1xcbi1cXHRcXHRpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpXFxuLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHRcXHQoKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlY291bnQgPSAwO1xcbi1cXHR9IGVsc2UgaWYgKCgoKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlY291bnQgXFx1MDAyNiBFSUFfTUFTSykgPT0gRUlBX01BU0spIHtcXG4tXFx0XFx0LyogZXhwYW5kIHRoZSBhcnJheSBvbmNlIGFsbCAxNSArIG4gKiAxNiBzbG90cyBhcmUgZnVsbCAqL1xcbi1cXHRcXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqbmV3X2FycmF5ID0gTlVMTDtcXG4tXFxuLVxcdFxcdG5ld19hcnJheSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXFxuLVxcdFxcdFxcdFxcdFxcdCAoKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlY291bnQgKyBFSUFfSU5DUixcXG4tXFx0XFx0XFx0XFx0XFx0IEdGUF9OT0ZTKTtcXG4tXFx0XFx0aWYgKG5ld19hcnJheSA9PSBOVUxMKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0XFx0bWVtY3B5KG5ld19hcnJheSwgKmVhX2lub2RlX2FycmF5LFxcbi1cXHRcXHQgICAgICAgc3RydWN0X3NpemUoKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXFxuLVxcdFxcdFxcdFxcdCAgICgqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCkpO1xcbi1cXHRcXHRrZnJlZSgqZWFfaW5vZGVfYXJyYXkpO1xcbi1cXHRcXHQqZWFfaW5vZGVfYXJyYXkgPSBuZXdfYXJyYXk7XFxuLVxcdH1cXG4tXFx0KCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWNvdW50Kys7XFxuLVxcdCgqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vpbm9kZXNbKCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWNvdW50IC0gMV0gPSBpbm9kZTtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuIC8qXFxuICAqIGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKClcXG4gICpcXG5AQCAtMjkxMyw3ICsyODU4LDYgQEAgZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcXG4gICogcmVmZXJlbmNlcyBvbiB4YXR0ciBibG9jayBhbmQgeGF0dHIgaW5vZGVzLlxcbiAgKi9cXG4gaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxcbiBcXHRcXHRcXHQgICAgaW50IGV4dHJhX2NyZWRpdHMpXFxuIHtcXG4gXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XFxuQEAgLTI5NTIsNyArMjg5Niw2IEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGlsb2MuYmgsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgSUZJUlNUKGhlYWRlciksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZmFsc2UgLyogYmxvY2tfY3N1bSAqLyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBlYV9pbm9kZV9hcnJheSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBleHRyYV9jcmVkaXRzLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGZhbHNlIC8qIHNraXBfcXVvdGEgKi8pO1xcbiBcXHR9XFxuQEAgLTI5ODYsMTIgKzI5MjksMTIgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBsZTMyX3RvX2NwdShlbnRyeS1cXHUwMDNlZV92YWx1ZV9zaXplKSk7XFxuLVxcdFxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCwgZWFfaW5vZGVfYXJyYXksXFxuK1xcdFxcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcXG4gXFx0XFx0XFx0XFx0XFx0IGV4dHJhX2NyZWRpdHMpO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBVcGRhdGUgaV9maWxlX2FjbCB2YWx1ZSBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiB0aGF0IHJlbGVhc2VzXFxuQEAgLTMwMTMsMTYgKzI5NTYsNjMgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdHJldHVybiBlcnJvcjtcXG4gfVxcbiBcXG4tdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5KVxcbisvKlxcbisgKiBXb3JrZXIgZnVuY3Rpb24gZm9yIGRlZmVycmVkIEVBIGlub2RlIGlwdXQuICBQcm9jZXNzZXMgYWxsIGlub2RlcyBxdWV1ZWRcXG4rICogb24gc19lYV9pbm9kZV90b19mcmVlIGluIGEgY29udGV4dCBmcmVlIG9mIHhhdHRyX3NlbS9qYmQyIGhhbmRsZSBsb2Nrcy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGV4dDRfZWFfaW5vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4tXFx0aW50IGlkeDtcXG4rXFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfc2JfaW5mbyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c19lYV9pbm9kZV93b3JrKTtcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUgPSBsbGlzdF9kZWxfYWxsKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XFxuIFxcbi1cXHRpZiAoZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcXG4rXFx0d2hpbGUgKG5vZGUpIHtcXG4rXFx0XFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBjb250YWluZXJfb2Yobm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbywgaV9lYV9pcHV0X25vZGUpO1xcbitcXHRcXHRub2RlID0gbm9kZS1cXHUwMDNlbmV4dDtcXG4rXFx0XFx0aXB1dChcXHUwMDI2ZWktXFx1MDAzZXZmc19pbm9kZSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rLypcXG4rICogUmVsZWFzZSBhIFZGUyByZWZlcmVuY2Ugb24gYW4gRUEgaW5vZGUuICBNdXN0IGJlIHVzZWQgaW5zdGVhZCBvZiBpcHV0KClcXG4rICogaW4gYW55IGNvbnRleHQgd2hlcmUgeGF0dHJfc2VtIG9yIGEgamJkMiBoYW5kbGUgaXMgaGVsZC5cXG4rICpcXG4rICogSWYgdGhpcyBpcyBub3QgdGhlIGxhc3QgcmVmZXJlbmNlLCBkcm9wcyBpdCBpbW1lZGlhdGVseSB2aWFcXG4rICogaXB1dF9pZl9ub3RfbGFzdCgpIHdpdGggbm8gZnVydGhlciBhY3Rpb24gbmVlZGVkLlxcbisgKlxcbisgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHJlZmVyZW5jZSwgdGhlIGlub2RlIGlzIGxpbmtlZCBvbnRvIGEgcGVyLXNiXFxuKyAqIGxsaXN0IHZpYSBpX2VhX2lwdXRfbm9kZSAoZW1iZWRkZWQgaW4gZXh0NF9pbm9kZV9pbmZvLCBzaGFyaW5nIHNwYWNlXFxuKyAqIHdpdGggdGhlIHVudXNlZCB4YXR0cl9zZW0pIGFuZCBhIGRlbGF5ZWQgd29ya2VyIHBlcmZvcm1zIHRoZSBmaW5hbFxcbisgKiBpcHV0KCkgaW4gYSBjbGVhbiBjb250ZXh0LlxcbisgKlxcbisgKiBOb3RlOiB3aGlsZSBhbiBpbm9kZSBpcyBvbiBzX2VhX2lub2RlX3RvX2ZyZWUsIHRoZSB1bmNvbnN1bWVkIGlfY291bnRcXG4rICogcmVmZXJlbmNlIChzdGlsbCAxKSBrZWVwcyBpdCBpbiB0aGUgaW5vZGUgY2FjaGUsIHNvIGFueSBjb25jdXJyZW50XFxuKyAqIGlnZXQoKSBidW1wcyBpX2NvdW50IHRvIFxcdTAwM2U9IDIgYW5kIGlwdXRfaWZfbm90X2xhc3QoKSB3aWxsIHN1Y2NlZWQuXFxuKyAqIE5vYm9keSB3aWxsIGFkZCB0aGUgaW5vZGUgYSBzZWNvbmQgdGltZSB1bnRpbCBleHQ0X2VhX2lub2RlX3dvcmsoKVxcbisgKiBkcm9wcyB0aGF0IHJlZmVyZW5jZSB2aWEgaXB1dCgpLlxcbisgKi9cXG4rdm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdGlmICghaW5vZGUpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0V0FSTl9PTl9PTkNFKCEoRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9mbGFncyBcXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKTtcXG4rXFx0aWYgKGlwdXRfaWZfbm90X2xhc3QoaW5vZGUpKVxcbiBcXHRcXHRyZXR1cm47XFxuK1xcdGxsaXN0X2FkZChcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9lYV9pcHV0X25vZGUsXFxuK1xcdFxcdCAgXFx1MDAyNkVYVDRfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xcbitcXHQvKlxcbitcXHQgKiBVc2UgYSBzaG9ydCBkZWxheSB0byBhbGxvdyBtdWx0aXBsZSBFQSBpbm9kZXMgdG8gYWNjdW11bGF0ZSxcXG4rXFx0ICogcmVkdWNpbmcgd29ya3F1ZXVlIHdha2V1cHMgd2hlbiBzZXZlcmFsIGFyZSByZWxlYXNlZCB0b2dldGhlci5cXG4rXFx0ICovXFxuK1xcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2RVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfZWFfaW5vZGVfd29yaywgMSk7XFxuK31cXG4gXFxuLVxcdGZvciAoaWR4ID0gMDsgaWR4IFxcdTAwM2MgZWFfaW5vZGVfYXJyYXktXFx1MDAzZWNvdW50OyArK2lkeClcXG4tXFx0XFx0aXB1dChlYV9pbm9kZV9hcnJheS1cXHUwMDNlaW5vZGVzW2lkeF0pO1xcbi1cXHRrZnJlZShlYV9pbm9kZV9hcnJheSk7XFxuK3ZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxcbit7XFxuK1xcdGluaXRfbGxpc3RfaGVhZChcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xcbitcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmssIGV4dDRfZWFfaW5vZGVfd29yayk7XFxuIH1cXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuaCBiL2ZzL2V4dDQveGF0dHIuaFxcbmluZGV4IDFmZWRmNDRkNGZiNjVlLi44MjFkYzZhNTBlNTFlNyAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3hhdHRyLmhcXG4rKysgYi9mcy9leHQ0L3hhdHRyLmhcXG5AQCAtMTMxLDExICsxMzEsNiBAQCBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIHtcXG4gXFx0c3RydWN0IGV4dDRfaWxvYyBpbG9jO1xcbiB9O1xcbiBcXG4tc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkge1xcbi1cXHR1bnNpZ25lZCBpbnQgY291bnQ7XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGVzW10gX19jb3VudGVkX2J5KGNvdW50KTtcXG4tfTtcXG4tXFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3VzZXJfaGFuZGxlcjtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyO1xcbkBAIC0xODcsOSArMTgyLDkgQEAgZXh0ZXJuIGludCBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0XFx0Ym9vbCBpc19jcmVhdGUpO1xcbiBcXG4gZXh0ZXJuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmFycmF5LFxcbiBcXHRcXHRcXHRcXHQgICBpbnQgZXh0cmFfY3JlZGl0cyk7XFxuLWV4dGVybiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqYXJyYXkpO1xcbitleHRlcm4gdm9pZCBleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpO1xcbitleHRlcm4gdm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gXFxuIGV4dGVybiBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcXG5pbmRleCBkMTA4OTdiM2ExZTM1MC4uNzA5NTE5NjE3YzdhMzggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy5oXFxuQEAgLTI0MTMsNiArMjQxMywyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJfc2V0X3N5c2ZzX25hbWVfZ2VuZXJpYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaFxcbiBleHRlcm4gdm9pZCBpaG9sZChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7XFxuIGV4dGVybiB2b2lkIGlwdXQoc3RydWN0IGlub2RlICopO1xcbiB2b2lkIGlwdXRfbm90X2xhc3Qoc3RydWN0IGlub2RlICopO1xcbitcXG4rLyoqXFxuKyAqIGlwdXRfaWZfbm90X2xhc3QgLSBkcm9wIGFuIGlub2RlIHJlZmVyZW5jZSBvbmx5IGlmIGl0IGlzIG5vdCB0aGUgbGFzdCBvbmVcXG4rICogQGlub2RlOiBpbm9kZSB0byBwdXRcXG4rICpcXG4rICogUmV0dXJucyB0cnVlIGlmIHRoZSByZWZlcmVuY2Ugd2FzIGRyb3BwZWQsIGZhbHNlIGlmIHRoaXMgd2FzIHRoZSBsYXN0XFxuKyAqIHJlZmVyZW5jZSBhbmQgdGhlIGNhbGxlciBtdXN0IGFycmFuZ2UgZm9yIGZpbmFsIGlwdXQoKSBpbiBhIHNhZmUgY29udGV4dC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdFZGU19CVUdfT05fSU5PREUoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcXHUwMDI2IChJX0ZSRUVJTkcgfCBJX0NMRUFSKSwgaW5vZGUpO1xcbitcXHRWRlNfQlVHX09OX0lOT0RFKGljb3VudF9yZWFkX29uY2UoaW5vZGUpIFxcdTAwM2MgMSwgaW5vZGUpO1xcbitcXHRyZXR1cm4gYXRvbWljX2FkZF91bmxlc3MoXFx1MDAyNmlub2RlLVxcdTAwM2VpX2NvdW50LCAtMSwgMSk7XFxuK31cXG4rXFxuIGludCBpbm9kZV91cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsXFxuIFxcdFxcdHVuc2lnbmVkIGludCBmbGFncyk7XFxuIGludCBnZW5lcmljX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTA6NDEuMjQ4ODQ3NTY1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTUxMjE0MTg0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF94YXR0cl9kZWxldGVfaW5vZGVcIixcbiAgICBcImV4dDRfeGF0dHJfYmxvY2tfc2V0XCIsXG4gICAgXCJleHQ0X3hhdHRyX2lib2R5X3NldFwiLFxuICAgIFwiZXh0NF9wdXRfZWFfaW5vZGVcIixcbiAgICBcImV4dDRfZWFfaW5vZGVfd29ya1wiLFxuICAgIFwiZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrXCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NCdzIGhhbmRsaW5nIG9mIEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIGlub2RlcyBieSBpbnRyb2R1Y2luZyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBJdCByZXBsYWNlcyB0aGUgYGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlgIHdpdGggYSBsb2NrbGVzcyBsaXN0IGFuZCBhIGRlbGF5ZWQgd29ya3F1ZXVlIChgZXh0NF9lYV9pbm9kZV93b3JrYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGRlYWRsb2NrcyBvY2N1ciBkdXJpbmcgRUEgaW5vZGUgZXZpY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGFlNzYyYjJhYzM5MzczNDY3MTlmZjJmZTkzZGJkOGFjNjJkYjE4NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMTg6MTA6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXG5pbmRleCBiMzdjMTM2ZWEzYWIzMy4uYjliMGFkYTc3NzRiYjQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dDQuaFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcbkBAIC0xMDcwLDggKzEwNzAsMTQgQEAgc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XG4gXHQgKiBiZXR3ZWVuIHJlYWRlcnMgb2YgRUFzIGFuZCB3cml0ZXJzIG9mIHJlZ3VsYXIgZmlsZSBkYXRhLCBzb1xuIFx0ICogaW5zdGVhZCB3ZSBzeW5jaHJvbml6ZSBvbiB4YXR0cl9zZW0gd2hlbiByZWFkaW5nIG9yIGNoYW5naW5nXG4gXHQgKiBFQXMuXG4rXHQgKlxuK1x0ICogRUEgaW5vZGVzIChFWFQ0X0VBX0lOT0RFX0ZMKSBkbyBub3QgdXNlIHhhdHRyX3NlbTsgdGhleSByZXVzZVxuK1x0ICogdGhlIHNwYWNlIGZvciBkZWZlcnJlZCBpcHV0IGxpbmthZ2UuXG4gXHQgKi9cbi1cdHN0cnVjdCByd19zZW1hcGhvcmUgeGF0dHJfc2VtO1xuK1x0dW5pb24ge1xuK1x0XHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcbitcdFx0c3RydWN0IGxsaXN0X25vZGUgaV9lYV9pcHV0X25vZGU7XG4rXHR9O1xuIFxuIFx0LypcbiBcdCAqIElub2RlcyB3aXRoIEVYVDRfU1RBVEVfT1JQSEFOX0ZJTEUgdXNlIGlfb3JwaGFuX2lkeC4gT3RoZXJ3aXNlXG5AQCAtMTc3MCw2ICsxNzc2LDExIEBAIHN0cnVjdCBleHQ0X3NiX2luZm8ge1xuIFx0c3RydWN0IGV4dDRfZXNfc3RhdHMgc19lc19zdGF0cztcbiBcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9ibG9ja19jYWNoZTtcbiBcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9pbm9kZV9jYWNoZTtcbitcbitcdC8qIERlZmVycmVkIGlwdXQgZm9yIEVBIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyAqL1xuK1x0c3RydWN0IGxsaXN0X2hlYWQgc19lYV9pbm9kZV90b19mcmVlO1xuK1x0c3RydWN0IGRlbGF5ZWRfd29yayBzX2VhX2lub2RlX3dvcms7XG4rXG4gXHRzcGlubG9ja190IHNfZXNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuIFxuIFx0LyogSm91cm5hbCB0cmlnZ2VycyBmb3IgY2hlY2tzdW0gY29tcHV0YXRpb24gKi9cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi43NDdjNTJjMjMyY2MwMyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtMTc2LDcgKzE3Niw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0ICogKHhhdHRyIGJsb2NrIGZyZWVpbmcpLCBiaXRtYXAsIGdyb3VwIGRlc2NyaXB0b3IgKGlub2RlIGZyZWVpbmcpXG4gXHQgKi9cbiBcdGludCBleHRyYV9jcmVkaXRzID0gNjtcbi1cdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7XG4gXHRib29sIGZyZWV6ZV9wcm90ZWN0ZWQgPSBmYWxzZTtcbiBcbiBcdHRyYWNlX2V4dDRfZXZpY3RfaW5vZGUoaW5vZGUpO1xuQEAgLTI4MSw4ICsyODAsNyBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdH1cbiBcbiBcdC8qIFJlbW92ZSB4YXR0ciByZWZlcmVuY2VzLiAqL1xuLVx0ZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgXHUwMDI2ZWFfaW5vZGVfYXJyYXksXG4tXHRcdFx0XHQgICAgICBleHRyYV9jcmVkaXRzKTtcbitcdGVyciA9IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUsIGV4dHJhX2NyZWRpdHMpO1xuIFx0aWYgKGVycikge1xuIFx0XHRleHQ0X3dhcm5pbmcoaW5vZGUtXHUwMDNlaV9zYiwgXCJ4YXR0ciBkZWxldGUgKGVyciAlZClcIiwgZXJyKTtcbiBzdG9wX2hhbmRsZTpcbkBAIC0yOTAsNyArMjg4LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdGV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7XG4gXHRcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxuIFx0XHRcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiBcdFx0Z290byBub19kZWxldGU7XG4gXHR9XG4gXG5AQCAtMzIwLDcgKzMxNyw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbiBcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxuIFx0XHRzYl9lbmRfaW50d3JpdGUoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0cmV0dXJuO1xuIG5vX2RlbGV0ZTpcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXG5pbmRleCAyNDVmNjdkMTBkZWQzNC4uM2VmYTVhODE3YmVmNGYgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcbisrKyBiL2ZzL2V4dDQvc3VwZXIuY1xuQEAgLTEzMDMsNiArMTMwMyw4IEBAIHN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRcdFx0IFx1MDAyNnNiLVx1MDAzZXNfdXVpZCk7XG4gXG4gXHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XG4rXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyB3aGlsZSBxdW90YSBpcyBzdGlsbCBhY3RpdmUuICovXG4rXHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yayk7XG4gXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcbiBcbiBcdGRlc3Ryb3lfd29ya3F1ZXVlKHNiaS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG5AQCAtMTQyMyw2ICsxNDI1LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdG1lbXNldChcdTAwMjZlaS1cdTAwM2VpX2RxdW90LCAwLCBzaXplb2YoZWktXHUwMDNlaV9kcXVvdCkpO1xuICNlbmRpZlxuIFx0ZWktXHUwMDNlamlub2RlID0gTlVMTDtcbitcdC8qXG4rXHQgKiBSZWluaXRpYWxpemUgeGF0dHJfc2VtIGV2ZXJ5IGFsbG9jYXRpb24gYmVjYXVzZSBFQSBpbm9kZXNcbitcdCAqIHNoYXJlIHRoaXMgc3BhY2Ugd2l0aCBpX2VhX2lwdXRfbm9kZSAodmlhIHVuaW9uKSB3aGljaCBtYXlcbitcdCAqIGhhdmUgb3ZlcndyaXR0ZW4gdGhlIHNlbWFwaG9yZSB3aGVuIHRoZSBzbGFiIG9iamVjdCB3YXNcbitcdCAqIHByZXZpb3VzbHkgdXNlZCBhcyBhbiBFQSBpbm9kZS5cbitcdCAqL1xuK1x0aW5pdF9yd3NlbShcdTAwMjZlaS1cdTAwM2V4YXR0cl9zZW0pO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZWktXHUwMDNlaV9yc3ZfY29udmVyc2lvbl9saXN0KTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmVpLVx1MDAzZWlfY29tcGxldGVkX2lvX2xvY2spO1xuIFx0ZWktXHUwMDNlaV9zeW5jX3RpZCA9IDA7XG5AQCAtMTQ4OCw3ICsxNDk3LDYgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcbiBcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gZm9vO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZWktXHUwMDNlaV9vcnBoYW4pO1xuLVx0aW5pdF9yd3NlbShcdTAwMjZlaS1cdTAwM2V4YXR0cl9zZW0pO1xuIFx0aW5pdF9yd3NlbShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbiBcdGlub2RlX2luaXRfb25jZShcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUpO1xuIFx0ZXh0NF9mY19pbml0X2lub2RlKFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG5AQCAtNTQ5Nyw2ICs1NTA1LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRcdFx0ICBleHQ0X2hhc19mZWF0dXJlX29ycGhhbl9wcmVzZW50KHNiKSB8fFxuIFx0XHRcdCAgZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsX25lZWRzX3JlY292ZXJ5KHNiKSk7XG4gXG4rXHRleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzYmkpO1xuK1xuIFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfbW1wKHNiKSBcdTAwMjZcdTAwMjYgIXNiX3Jkb25seShzYikpIHtcbiBcdFx0ZXJyID0gZXh0NF9tdWx0aV9tb3VudF9wcm90ZWN0KHNiLCBsZTY0X3RvX2NwdShlcy1cdTAwM2VzX21tcF9ibG9jaykpO1xuIFx0XHRpZiAoZXJyKVxuQEAgLTU3NDcsNiArNTc1Nyw4IEBAIHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0cmV0dXJuIDA7XG4gXG4gZmFpbGVkX21vdW50OTpcbitcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBxdW90YSBzaHV0ZG93biAqL1xuK1x0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuIFx0ZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7XG4gZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBcdGV4dDRfcmVsZWFzZV9vcnBoYW5faW5mbyhzYik7XG5AQCAtNTc2Nyw2ICs1Nzc5LDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBcdGlmIChFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSlcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xuIGZhaWxlZF9tb3VudF93cTpcbitcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cbitcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcbiBcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XG4gXHRzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSA9IE5VTEw7XG4gXG5AQCAtNTc3Nyw2ICs1NzkxLDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBcdFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXHUwMDNlc19qb3VybmFsKTtcbiBcdH1cbiBmYWlsZWRfbW91bnQzYTpcbitcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGZyb20gam91cm5hbCByZXBsYXkgKi9cbitcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcbiBcdGV4dDRfZXNfdW5yZWdpc3Rlcl9zaHJpbmtlcihzYmkpO1xuIGZhaWxlZF9tb3VudDM6XG4gXHQvKiBmbHVzaCBzX3NiX3VwZF93b3JrIGJlZm9yZSBzYmkgZGVzdHJveSAqL1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xuaW5kZXggOTgyYTFmODMxZTIyODIuLjRhZTZjZTExMTU2NjBlIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC94YXR0ci5jXG4rKysgYi9mcy9leHQ0L3hhdHRyLmNcbkBAIC0xMTQsMTAgKzExNCw2IEBAIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyc1tdID0ge1xuICNkZWZpbmUgRUFfSU5PREVfQ0FDSEUoaW5vZGUpXHQoKChzdHJ1Y3QgZXh0NF9zYl9pbmZvICopIFxcXG4gXHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZnNfaW5mbyktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSlcbiBcbi1zdGF0aWMgaW50XG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbi1cbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXG4ge1xuQEAgLTU2Nyw3ICs1NjMsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZW50cnksXG4gXHRcdFx0XHRcdGVhX2lub2RlLVx1MDAzZWlfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTtcbiBcdH1cbiBvdXQ6XG4tXHRpcHV0KGVhX2lub2RlKTtcbitcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTExMDQsMTAgKzExMDAsMTAgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX2luY19yZWYoaGFuZGxlLCBlYV9pbm9kZSk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwiaW5jIHJlZiBlcnJvciAlZFwiLCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHRnb3RvIGNsZWFudXA7XG4gXHRcdH1cbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIFxuQEAgLTExMzMsNyArMTEyOSw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwiY2xlYW51cCBkZWMgcmVmIGVycm9yICVkXCIsXG4gXHRcdFx0XHRcdCAgIGVycik7XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHR9XG4gXHRyZXR1cm4gc2F2ZWRfZXJyO1xuIH1cbkBAIC0xMTYwLDcgKzExNTYsNiBAQCBzdGF0aWMgdm9pZFxuIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuIFx0XHRcdCAgICAgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmZpcnN0LCBib29sIGJsb2NrX2NzdW0sXG4tXHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdCAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlO1xuQEAgLTExOTcsMTQgKzExOTIsNiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRlcnIgPSBleHQ0X2V4cGFuZF9pbm9kZV9hcnJheShlYV9pbm9kZV9hcnJheSwgZWFfaW5vZGUpO1xuLVx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuLVx0XHRcdFx0XHQgICBcIkV4cGFuZCBpbm9kZSBhcnJheSBlcnI9JWRcIiwgZXJyKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuIFx0XHRlcnIgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNfZm4oaGFuZGxlLCBjcmVkaXRzLCBjcmVkaXRzLFxuIFx0XHRcdGV4dDRfZnJlZV9tZXRhZGF0YV9yZXZva2VfY3JlZGl0cyhwYXJlbnQtXHUwMDNlaV9zYiwgMSksXG4gXHRcdFx0ZXh0NF94YXR0cl9yZXN0YXJ0X2ZuKGhhbmRsZSwgcGFyZW50LCBiaCwgYmxvY2tfY3N1bSxcbkBAIC0xMjEyLDYgKzExOTksNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcIkVuc3VyZSBjcmVkaXRzIGVycj0lZFwiLFxuIFx0XHRcdFx0XHQgICBlcnIpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFx0XHRpZiAoZXJyIFx1MDAzZSAwKSB7XG5AQCAtMTIyMSw2ICsxMjA5LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHRcIlJlLWdldCB3cml0ZSBhY2Nlc3MgZXJyPSVkXCIsXG4gXHRcdFx0XHRcdFx0ZXJyKTtcbitcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiBcdFx0fVxuQEAgLTEyMjksNiArMTIxOCw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwiZWFfaW5vZGUgZGVjIHJlZiBlcnI9JWRcIixcbiBcdFx0XHRcdFx0ICAgZXJyKTtcbitcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbkBAIC0xMjQ1LDYgKzEyMzUsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRlbnRyeS1cdTAwM2VlX3ZhbHVlX2ludW0gPSAwO1xuIFx0XHRlbnRyeS1cdTAwM2VlX3ZhbHVlX3NpemUgPSAwO1xuIFxuK1x0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRcdGRpcnR5ID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC0xMjcxLDcgKzEyNjIsNiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIHN0YXRpYyB2b2lkXG4gZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4tXHRcdFx0IHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0IGludCBleHRyYV9jcmVkaXRzKVxuIHtcbiBcdHN0cnVjdCBtYl9jYWNoZSAqZWFfYmxvY2tfY2FjaGUgPSBFQV9CTE9DS19DQUNIRShpbm9kZSk7XG5AQCAtMTMxMyw3ICsxMzAzLDYgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBiaCxcbiBcdFx0XHRcdFx0XHQgICAgIEJGSVJTVChiaCksXG4gXHRcdFx0XHRcdFx0ICAgICB0cnVlIC8qIGJsb2NrX2NzdW0gKi8sXG4tXHRcdFx0XHRcdFx0ICAgICBlYV9pbm9kZV9hcnJheSxcbiBcdFx0XHRcdFx0XHQgICAgIGV4dHJhX2NyZWRpdHMsXG4gXHRcdFx0XHRcdFx0ICAgICB0cnVlIC8qIHNraXBfcXVvdGEgKi8pO1xuIFx0XHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGJoLCAwLCAxLFxuQEAgLTE1MDUsNyArMTQ5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0aWYgKGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsIGVhX2lub2RlKSlcbiBcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XCJjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcIiwgZXJyKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcdFx0fVxuIFxuQEAgLTE1NjQsNyArMTU1Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSxcbiBcdFx0XHRrdmZyZWUoZWFfZGF0YSk7XG4gXHRcdFx0cmV0dXJuIGVhX2lub2RlO1xuIFx0XHR9XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRuZXh0X2VudHJ5OlxuIFx0XHRjZSA9IG1iX2NhY2hlX2VudHJ5X2ZpbmRfbmV4dChlYV9pbm9kZV9jYWNoZSwgY2UpO1xuIFx0fVxuQEAgLTE2MTUsNyArMTYwNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdFx0ICAgICAgZWFfaW5vZGUtXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xuIFx0cmV0dXJuIGVhX2lub2RlO1xuIG91dF9lcnI6XG4tXHRpcHV0KGVhX2lub2RlKTtcbitcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgTlVMTCwgdmFsdWVfbGVuKTtcbiBcdHJldHVybiBFUlJfUFRSKGVycik7XG4gfVxuQEAgLTE4NDgsNyArMTgzNyw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSxcbiBcbiBcdHJldCA9IDA7XG4gb3V0OlxuLVx0aXB1dChvbGRfZWFfaW5vZGUpO1xuK1x0ZXh0NF9wdXRfZWFfaW5vZGUob2xkX2VhX2lub2RlKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTIwMTAsNyArMTk5OSw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRvbGRfZWFfaW5vZGVfcXVvdGEgPSBsZTMyX3RvX2NwdShcbiBcdFx0XHRcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9zaXplKTtcbiBcdFx0XHR9XG4tXHRcdFx0aXB1dCh0bXBfaW5vZGUpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHRtcF9pbm9kZSk7XG4gXG4gXHRcdFx0cy1cdTAwM2VoZXJlLVx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XG4gXHRcdFx0cy1cdTAwM2VoZXJlLVx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XG5AQCAtMjE1MCw3ICsyMTM5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdFx0ICAgXCJkZWMgcmVmIGVycm9yPSVkXCIsXG4gXHRcdFx0XHRcdFx0XHQgICBlcnJvcik7XG4tXHRcdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHRcdGVhX2lub2RlID0gTlVMTDtcbiBcdFx0XHR9XG4gXG5AQCAtMjE4MiwxMiArMjE3MSw4IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXG4gXHQvKiBEcm9wIHRoZSBwcmV2aW91cyB4YXR0ciBibG9jay4gKi9cbiBcdGlmIChicy1cdTAwM2ViaCBcdTAwMjZcdTAwMjYgYnMtXHUwMDNlYmggIT0gbmV3X2JoKSB7XG4tXHRcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7XG4tXG4gXHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBicy1cdTAwM2ViaCxcbi1cdFx0XHRcdFx0IFx1MDAyNmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHQgMCAvKiBleHRyYV9jcmVkaXRzICovKTtcbi1cdFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiBcdH1cbiBcdGVycm9yID0gMDtcbiBcbkBAIC0yMjAzLDcgKzIxODgsNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XG4gXHRcdH1cbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdH1cbiBcdGlmIChjZSlcbiBcdFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7XG5AQCAtMjI4NSw3ICsyMjcwLDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIGVycm9yO1xuIFx0fVxuQEAgLTIyOTcsNyArMjI4Miw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRoZWFkZXItXHUwMDNlaF9tYWdpYyA9IGNwdV90b19sZTMyKDApO1xuIFx0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKTtcbiBcdH1cbi1cdGlwdXQoZWFfaW5vZGUpO1xuK1x0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTI4NjMsNDYgKzI4NDgsNiBAQCBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tI2RlZmluZSBFSUFfSU5DUiAxNiAvKiBtdXN0IGJlIDJebiAqL1xuLSNkZWZpbmUgRUlBX01BU0sgKEVJQV9JTkNSIC0gMSlcbi1cbi0vKiBBZGQgdGhlIGxhcmdlIHhhdHRyIEBpbm9kZSBpbnRvIEBlYV9pbm9kZV9hcnJheSBmb3IgZGVmZXJyZWQgaXB1dCgpLlxuLSAqIElmIEBlYV9pbm9kZV9hcnJheSBpcyBuZXcgb3IgZnVsbCBpdCB3aWxsIGJlIGdyb3duIGFuZCB0aGUgb2xkXG4tICogY29udGVudHMgY29waWVkIG92ZXIuXG4tICovXG4tc3RhdGljIGludFxuLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4tXHRcdFx0c3RydWN0IGlub2RlICppbm9kZSlcbi17XG4tXHRpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpIHtcbi1cdFx0Lypcbi1cdFx0ICogU3RhcnQgd2l0aCAxNSBpbm9kZXMsIHNvIGl0IGZpdHMgaW50byBhIHBvd2VyLW9mLXR3byBzaXplLlxuLVx0XHQgKi9cbi1cdFx0KCplYV9pbm9kZV9hcnJheSkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxuLVx0XHRcdFx0XHRcdCBFSUFfTUFTSywgR0ZQX05PRlMpO1xuLVx0XHRpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdCgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50ID0gMDtcbi1cdH0gZWxzZSBpZiAoKCgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50IFx1MDAyNiBFSUFfTUFTSykgPT0gRUlBX01BU0spIHtcbi1cdFx0LyogZXhwYW5kIHRoZSBhcnJheSBvbmNlIGFsbCAxNSArIG4gKiAxNiBzbG90cyBhcmUgZnVsbCAqL1xuLVx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqbmV3X2FycmF5ID0gTlVMTDtcbi1cbi1cdFx0bmV3X2FycmF5ID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2Rlcyxcbi1cdFx0XHRcdFx0ICgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50ICsgRUlBX0lOQ1IsXG4tXHRcdFx0XHRcdCBHRlBfTk9GUyk7XG4tXHRcdGlmIChuZXdfYXJyYXkgPT0gTlVMTClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0bWVtY3B5KG5ld19hcnJheSwgKmVhX2lub2RlX2FycmF5LFxuLVx0XHQgICAgICAgc3RydWN0X3NpemUoKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXG4tXHRcdFx0XHQgICAoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vjb3VudCkpO1xuLVx0XHRrZnJlZSgqZWFfaW5vZGVfYXJyYXkpO1xuLVx0XHQqZWFfaW5vZGVfYXJyYXkgPSBuZXdfYXJyYXk7XG4tXHR9XG4tXHQoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vjb3VudCsrO1xuLVx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlaW5vZGVzWygqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50IC0gMV0gPSBpbm9kZTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKClcbiAgKlxuQEAgLTI5MTMsNyArMjg1OCw2IEBAIGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gICogcmVmZXJlbmNlcyBvbiB4YXR0ciBibG9jayBhbmQgeGF0dHIgaW5vZGVzLlxuICAqL1xuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdCAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdCAgICBpbnQgZXh0cmFfY3JlZGl0cylcbiB7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbkBAIC0yOTUyLDcgKzI4OTYsNiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGlsb2MuYmgsXG4gXHRcdFx0XHRcdFx0ICAgICBJRklSU1QoaGVhZGVyKSxcbiBcdFx0XHRcdFx0XHQgICAgIGZhbHNlIC8qIGJsb2NrX2NzdW0gKi8sXG4tXHRcdFx0XHRcdFx0ICAgICBlYV9pbm9kZV9hcnJheSxcbiBcdFx0XHRcdFx0XHQgICAgIGV4dHJhX2NyZWRpdHMsXG4gXHRcdFx0XHRcdFx0ICAgICBmYWxzZSAvKiBza2lwX3F1b3RhICovKTtcbiBcdH1cbkBAIC0yOTg2LDEyICsyOTI5LDEyIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXG4gXHRcdFx0XHRcdCAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LVx1MDAzZWVfdmFsdWVfc2l6ZSkpO1xuLVx0XHRcdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRcdFx0fVxuIFxuIFx0XHR9XG4gXG4tXHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCwgZWFfaW5vZGVfYXJyYXksXG4rXHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcbiBcdFx0XHRcdFx0IGV4dHJhX2NyZWRpdHMpO1xuIFx0XHQvKlxuIFx0XHQgKiBVcGRhdGUgaV9maWxlX2FjbCB2YWx1ZSBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiB0aGF0IHJlbGVhc2VzXG5AQCAtMzAxMywxNiArMjk1Niw2MyBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5KVxuKy8qXG4rICogV29ya2VyIGZ1bmN0aW9uIGZvciBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0LiAgUHJvY2Vzc2VzIGFsbCBpbm9kZXMgcXVldWVkXG4rICogb24gc19lYV9pbm9kZV90b19mcmVlIGluIGEgY29udGV4dCBmcmVlIG9mIHhhdHRyX3NlbS9qYmQyIGhhbmRsZSBsb2Nrcy5cbisgKi9cbitzdGF0aWMgdm9pZCBleHQ0X2VhX2lub2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbi1cdGludCBpZHg7XG4rXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLFxuK1x0XHRcdFx0XHRcdHN0cnVjdCBleHQ0X3NiX2luZm8sXG4rXHRcdFx0XHRcdFx0c19lYV9pbm9kZV93b3JrKTtcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbiBcbi1cdGlmIChlYV9pbm9kZV9hcnJheSA9PSBOVUxMKVxuK1x0d2hpbGUgKG5vZGUpIHtcbitcdFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBjb250YWluZXJfb2Yobm9kZSxcbitcdFx0XHRcdFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbywgaV9lYV9pcHV0X25vZGUpO1xuK1x0XHRub2RlID0gbm9kZS1cdTAwM2VuZXh0O1xuK1x0XHRpcHV0KFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG4rXHR9XG4rfVxuK1xuKy8qXG4rICogUmVsZWFzZSBhIFZGUyByZWZlcmVuY2Ugb24gYW4gRUEgaW5vZGUuICBNdXN0IGJlIHVzZWQgaW5zdGVhZCBvZiBpcHV0KClcbisgKiBpbiBhbnkgY29udGV4dCB3aGVyZSB4YXR0cl9zZW0gb3IgYSBqYmQyIGhhbmRsZSBpcyBoZWxkLlxuKyAqXG4rICogSWYgdGhpcyBpcyBub3QgdGhlIGxhc3QgcmVmZXJlbmNlLCBkcm9wcyBpdCBpbW1lZGlhdGVseSB2aWFcbisgKiBpcHV0X2lmX25vdF9sYXN0KCkgd2l0aCBubyBmdXJ0aGVyIGFjdGlvbiBuZWVkZWQuXG4rICpcbisgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHJlZmVyZW5jZSwgdGhlIGlub2RlIGlzIGxpbmtlZCBvbnRvIGEgcGVyLXNiXG4rICogbGxpc3QgdmlhIGlfZWFfaXB1dF9ub2RlIChlbWJlZGRlZCBpbiBleHQ0X2lub2RlX2luZm8sIHNoYXJpbmcgc3BhY2VcbisgKiB3aXRoIHRoZSB1bnVzZWQgeGF0dHJfc2VtKSBhbmQgYSBkZWxheWVkIHdvcmtlciBwZXJmb3JtcyB0aGUgZmluYWxcbisgKiBpcHV0KCkgaW4gYSBjbGVhbiBjb250ZXh0LlxuKyAqXG4rICogTm90ZTogd2hpbGUgYW4gaW5vZGUgaXMgb24gc19lYV9pbm9kZV90b19mcmVlLCB0aGUgdW5jb25zdW1lZCBpX2NvdW50XG4rICogcmVmZXJlbmNlIChzdGlsbCAxKSBrZWVwcyBpdCBpbiB0aGUgaW5vZGUgY2FjaGUsIHNvIGFueSBjb25jdXJyZW50XG4rICogaWdldCgpIGJ1bXBzIGlfY291bnQgdG8gXHUwMDNlPSAyIGFuZCBpcHV0X2lmX25vdF9sYXN0KCkgd2lsbCBzdWNjZWVkLlxuKyAqIE5vYm9keSB3aWxsIGFkZCB0aGUgaW5vZGUgYSBzZWNvbmQgdGltZSB1bnRpbCBleHQ0X2VhX2lub2RlX3dvcmsoKVxuKyAqIGRyb3BzIHRoYXQgcmVmZXJlbmNlIHZpYSBpcHV0KCkuXG4rICovXG4rdm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdGlmICghaW5vZGUpXG4rXHRcdHJldHVybjtcbitcdFdBUk5fT05fT05DRSghKEVYVDRfSShpbm9kZSktXHUwMDNlaV9mbGFncyBcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpO1xuK1x0aWYgKGlwdXRfaWZfbm90X2xhc3QoaW5vZGUpKVxuIFx0XHRyZXR1cm47XG4rXHRsbGlzdF9hZGQoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2VhX2lwdXRfbm9kZSxcbitcdFx0ICBcdTAwMjZFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XG4rXHQvKlxuK1x0ICogVXNlIGEgc2hvcnQgZGVsYXkgdG8gYWxsb3cgbXVsdGlwbGUgRUEgaW5vZGVzIHRvIGFjY3VtdWxhdGUsXG4rXHQgKiByZWR1Y2luZyB3b3JrcXVldWUgd2FrZXVwcyB3aGVuIHNldmVyYWwgYXJlIHJlbGVhc2VkIHRvZ2V0aGVyLlxuK1x0ICovXG4rXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2RVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX2VhX2lub2RlX3dvcmssIDEpO1xuK31cbiBcbi1cdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBlYV9pbm9kZV9hcnJheS1cdTAwM2Vjb3VudDsgKytpZHgpXG4tXHRcdGlwdXQoZWFfaW5vZGVfYXJyYXktXHUwMDNlaW5vZGVzW2lkeF0pO1xuLVx0a2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuK3ZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxuK3tcbitcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbitcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmssIGV4dDRfZWFfaW5vZGVfd29yayk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5oIGIvZnMvZXh0NC94YXR0ci5oXG5pbmRleCAxZmVkZjQ0ZDRmYjY1ZS4uODIxZGM2YTUwZTUxZTcgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3hhdHRyLmhcbisrKyBiL2ZzL2V4dDQveGF0dHIuaFxuQEAgLTEzMSwxMSArMTMxLDYgQEAgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCB7XG4gXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4gfTtcbiBcbi1zdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSB7XG4tXHR1bnNpZ25lZCBpbnQgY291bnQ7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2Rlc1tdIF9fY291bnRlZF9ieShjb3VudCk7XG4tfTtcbi1cbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXI7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXI7XG5AQCAtMTg3LDkgKzE4Miw5IEBAIGV4dGVybiBpbnQgX19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRib29sIGlzX2NyZWF0ZSk7XG4gXG4gZXh0ZXJuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0ICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiphcnJheSxcbiBcdFx0XHRcdCAgIGludCBleHRyYV9jcmVkaXRzKTtcbi1leHRlcm4gdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmFycmF5KTtcbitleHRlcm4gdm9pZCBleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpO1xuK2V4dGVybiB2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFxuIGV4dGVybiBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbiBcdFx0XHQgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCBkMTA4OTdiM2ExZTM1MC4uNzA5NTE5NjE3YzdhMzggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZnMuaFxuQEAgLTI0MTMsNiArMjQxMywyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJfc2V0X3N5c2ZzX25hbWVfZ2VuZXJpYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaFxuIGV4dGVybiB2b2lkIGlob2xkKHN0cnVjdCBpbm9kZSAqIGlub2RlKTtcbiBleHRlcm4gdm9pZCBpcHV0KHN0cnVjdCBpbm9kZSAqKTtcbiB2b2lkIGlwdXRfbm90X2xhc3Qoc3RydWN0IGlub2RlICopO1xuK1xuKy8qKlxuKyAqIGlwdXRfaWZfbm90X2xhc3QgLSBkcm9wIGFuIGlub2RlIHJlZmVyZW5jZSBvbmx5IGlmIGl0IGlzIG5vdCB0aGUgbGFzdCBvbmVcbisgKiBAaW5vZGU6IGlub2RlIHRvIHB1dFxuKyAqXG4rICogUmV0dXJucyB0cnVlIGlmIHRoZSByZWZlcmVuY2Ugd2FzIGRyb3BwZWQsIGZhbHNlIGlmIHRoaXMgd2FzIHRoZSBsYXN0XG4rICogcmVmZXJlbmNlIGFuZCB0aGUgY2FsbGVyIG11c3QgYXJyYW5nZSBmb3IgZmluYWwgaXB1dCgpIGluIGEgc2FmZSBjb250ZXh0LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdFZGU19CVUdfT05fSU5PREUoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgKElfRlJFRUlORyB8IElfQ0xFQVIpLCBpbm9kZSk7XG4rXHRWRlNfQlVHX09OX0lOT0RFKGljb3VudF9yZWFkX29uY2UoaW5vZGUpIFx1MDAzYyAxLCBpbm9kZSk7XG4rXHRyZXR1cm4gYXRvbWljX2FkZF91bmxlc3MoXHUwMDI2aW5vZGUtXHUwMDNlaV9jb3VudCwgLTEsIDEpO1xuK31cbitcbiBpbnQgaW5vZGVfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLFxuIFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCBnZW5lcmljX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjEwOjQxLjI0ODg1MTA2NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzMDI2ODc4MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2g6IEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIElub2RlIERlZmVycmFsIGluIGV4dDQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyBleHQ0IGhhbmRsZXMgRXh0ZW5kZWQgQXR0cmlidXRlIChFQSkgaW5vZGVzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGZyZWVpbmcgcHJvY2Vzcy4gVGhlIGFpbSBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGxvY2sgb3JkZXJpbmcgaXNzdWVzLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHRoaW5nLiBUaGV5J3JlIGltcGxlbWVudGluZyBhIGRlZmVycmVkIGBpcHV0YCBtZWNoYW5pc20gZm9yIEVBIGlub2Rlcy4gU21hcnQsIHVzaW5nIGBzX2VhX2lub2RlX3RvX2ZyZWVgIGFuZCBgc19lYV9pbm9kZV93b3JrYCB3aXRoaW4gdGhlIGBleHQ0X3NiX2luZm9gIHN0cnVjdHVyZSBpcyBhIHNvbGlkIGFwcHJvYWNoIGZvciB0aGlzIGtpbmQgb2YgZGVsYXllZCBvcGVyYXRpb24uIFRoZSBhZGRpdGlvbiBvZiBgaXB1dF9pZl9ub3RfbGFzdGAgaXMgYWxzbyBleHBlY3RlZC4gVGhlIHNoaWZ0IGZyb20gYGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlgIHRvIGEgbG9ja2xlc3MgbGlzdCAoYGxsaXN0X25vZGUgaV9lYV9pcHV0X25vZGVgIGluIGBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvYCkgaXMgYSBub3RhYmxlIGFyY2hpdGVjdHVyYWwgY2hhbmdlLCBhbmQgcG90ZW50aWFsbHkgYSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGNsb3NlIHNjcnV0aW55LlxuXG5UaGlzIGlzIGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSwgbm8gZG91YnQgYWJvdXQgaXQuIFdlIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgdGhpcyBpbiB0aGUgZnV6emluZyBwcm9jZXNzIOKAkyBgV29ydGhGdXp6aW5nPXRydWVgIGlzIHNwb3Qgb24uXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBiZWluZyBtb2RpZmllZCBvciBhZGRlZC4gVGhlIGNvZGUgdG91Y2hlcyBhIHNpZ25pZmljYW50IG51bWJlciBvZiBmdW5jdGlvbnMgcmVsYXRlZCB0byBFQSBpbm9kZSBtYW5hZ2VtZW50OiBgZXh0NF9lYV9pbm9kZV93b3JrYCwgYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrYCwgYW5kIGNvcmUgeGF0dHIgZnVuY3Rpb25zIGxpa2UgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYCwgYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2AsIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYCwgYGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGxgLCBhbmQgc28gb24uXG5cbkhvd2V2ZXIsIEknbSBmb2N1c2luZyBteSBhdHRlbnRpb24gcHJpbWFyaWx5IG9uIHRoZSBmb2xsb3dpbmcgZm9yIHRoaXMgaW5pdGlhbCBhbmFseXNpczogYGV4dDRfZWFfaW5vZGVfd29ya2AsIHdoaWNoIGlzIHRoZSBjb3JlIGRlZmVycmVkIHdvcmssIGBleHQ0X3B1dF9lYV9pbm9kZWAsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAsIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAsIGFuZCBgZXh0NF94YXR0cl9pYm9keV9zZXRgIGFzIHRoZXkgYXJlIHRoZSBtb3N0IGNyaXRpY2FsIGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMuXG5cbkdpdmVuIHRoYXQgdGhpcyBhZmZlY3RzIGNvcmUgZXh0NCBFQSBoYW5kbGluZywgY29uZmlndXJhdGlvbiBpcyBpbXBvcnRhbnQuIFRoZSBjb2RlIHJlc2lkZXMgd2l0aGluIGBmcy9leHQ0L2AsIGFuZCB0aGUgcmVsZXZhbnQgY29uZmlnIGlzIGBFWFQ0X0ZTYC4gQnV0LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBjb25maWdzIHJlbGF0ZWQgdG8gRUEgaW5vZGVzLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBgZnMvZXh0NC9LY29uZmlnYCBmaWxlIG9yIHBlcmZvcm0gYSBxdWljayBncmVwIGZvciBcIkVBX0lOT0RFXCIuIFJlbGF0ZWQgY29uZmlncyBsaWtlIGBFWFQ0X0ZTX1BPU0lYX0FDTGAgYW5kIGBFWFQ0X0ZTX1NFQ1VSSVRZYCBhcmUgcmVsYXRlZCB0byB4YXR0cnMgYnV0IEVBIGlub2RlcyBhcmUgZnVuZGFtZW50YWwgYW5kIEkgc3VzcGVjdCBFQSBpbm9kZXMgYXJlIGEgZmVhdHVyZSBvZiBleHQ0LCB3aGljaCBtYWtlcyBtZSBzdXNwZWN0IGl0IGRlcGVuZHMgb24gYEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9FQV9JTk9ERWAuIE5lZWQgdG8gdmVyaWZ5IHRoaXMgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ2NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjEwOjUwLjU1MTU3MTM1NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjcwODUwMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRUFfSU5PREVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9NDQwPXN0cnVjdCBmbGV4X2dyb3VwcyB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC01MDQtI2RlZmluZSBFWFQ0X1ZFUklUWV9GTFxcdFxcdFxcdDB4MDAxMDAwMDAgLyogVmVyaXR5IHByb3RlY3RlZCBpbm9kZSAqL1xcbmZzL2V4dDQvZXh0NC5oOjUwNTojZGVmaW5lIEVYVDRfRUFfSU5PREVfRkxcXHQgICAgICAgIDB4MDAyMDAwMDAgLyogSW5vZGUgdXNlZCBmb3IgbGFyZ2UgRUEgKi9cXG5mcy9leHQ0L2V4dDQuaC01MDYtLyogMHgwMDQwMDAwMCB3YXMgZm9ybWVybHkgRVhUNF9FT0ZCTE9DS1NfRkwgKi9cXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTU4MD1lbnVtIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTYwMy1cXHRFWFQ0X0lOT0RFX1ZFUklUWVxcdD0gMjAsXFx0LyogVmVyaXR5IHByb3RlY3RlZCBpbm9kZSAqL1xcbmZzL2V4dDQvZXh0NC5oOjYwNDpcXHRFWFQ0X0lOT0RFX0VBX0lOT0RFXFx0PSAyMSxcXHQvKiBJbm9kZSB1c2VkIGZvciBsYXJnZSBFQSAqL1xcbmZzL2V4dDQvZXh0NC5oLTYwNS0vKiAyMiB3YXMgZm9ybWVybHkgRVhUNF9JTk9ERV9FT0ZCTE9DS1MgKi9cXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTYyOT1zdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9jaGVja19mbGFnX3ZhbHVlcyh2b2lkKVxcbi0tXFxuZnMvZXh0NC9leHQ0LmgtNjUxLVxcdENIRUNLX0ZMQUdfVkFMVUUoVkVSSVRZKTtcXG5mcy9leHQ0L2V4dDQuaDo2NTI6XFx0Q0hFQ0tfRkxBR19WQUxVRShFQV9JTk9ERSk7XFxuZnMvZXh0NC9leHQ0LmgtNjUzLVxcdENIRUNLX0ZMQUdfVkFMVUUoSU5MSU5FX0RBVEEpO1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MTA0OD1zdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTEwNzMtXFx0ICpcXG5mcy9leHQ0L2V4dDQuaDoxMDc0OlxcdCAqIEVBIGlub2RlcyAoRVhUNF9FQV9JTk9ERV9GTCkgZG8gbm90IHVzZSB4YXR0cl9zZW07IHRoZXkgcmV1c2VcXG5mcy9leHQ0L2V4dDQuaC0xMDc1LVxcdCAqIHRoZSBzcGFjZSBmb3IgZGVmZXJyZWQgaXB1dCBsaW5rYWdlLlxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjAzNz1lbnVtIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTIwNDUtXFx0RVhUNF9TVEFURV9FWFRfUFJFQ0FDSEVELFxcdC8qIGV4dGVudHMgaGF2ZSBiZWVuIHByZWNhY2hlZCAqL1xcbmZzL2V4dDQvZXh0NC5oOjIwNDY6XFx0RVhUNF9TVEFURV9MVVNUUkVfRUFfSU5PREUsXFx0LyogTHVzdHJlLXN0eWxlIGVhX2lub2RlICovXFxuZnMvZXh0NC9leHQ0LmgtMjA0Ny1cXHRFWFQ0X1NUQVRFX1ZFUklUWV9JTl9QUk9HUkVTUyxcXHQvKiBidWlsZGluZyBmcy12ZXJpdHkgTWVya2xlIHRyZWUgKi9cXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTIxMzQ9c3RhdGljIGlubGluZSBib29sIGV4dDRfaW5vZGVfb3JwaGFuX3RyYWNrZWQoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTIyMTUtI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CR1xcdFxcdDB4MDIwMFxcbmZzL2V4dDQvZXh0NC5oOjIyMTY6I2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRUFfSU5PREVcXHRcXHQweDA0MDAgLyogRUEgaW4gaW5vZGUgKi9cXG5mcy9leHQ0L2V4dDQuaC0yMjE3LSNkZWZpbmUgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0RJUkRBVEFcXHRcXHQweDEwMDAgLyogZGF0YSBpbiBkaXJlbnQgKi9cXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTIzMTQ9RVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZVTkNTKGZsZXhfYmcsXFx0XFx0RkxFWF9CRylcXG5mcy9leHQ0L2V4dDQuaDoyMzE1OkVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GVU5DUyhlYV9pbm9kZSxcXHRcXHRFQV9JTk9ERSlcXG5mcy9leHQ0L2V4dDQuaC0yMzE2LUVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GVU5DUyhkaXJkYXRhLFxcdFxcdERJUkRBVEEpXFxuLS1cXG5mcy9leHQ0L2V4dDQuaD0yMzIxPUVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GVU5DUyhjYXNlZm9sZCxcXHRcXHRDQVNFRk9MRClcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTIzNDUtXFx0XFx0XFx0XFx0XFx0IEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHfCBcXFxcXFxuZnMvZXh0NC9leHQ0Lmg6MjM0NjpcXHRcXHRcXHRcXHRcXHQgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0VBX0lOT0RFfCBcXFxcXFxuZnMvZXh0NC9leHQ0LmgtMjM0Ny1cXHRcXHRcXHRcXHRcXHQgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX01NUCB8IFxcXFxcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTI3MDI9c3RhdGljIGlubGluZSBib29sIGV4dDRfaXNfcXVvdGFfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMjcwNC1cXHRyZXR1cm4gSVNfTk9RVU9UQShpbm9kZSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L2V4dDQuaDoyNzA1OlxcdCAgICAgICAhKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKTtcXG5mcy9leHQ0L2V4dDQuaC0yNzA2LX1cXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTMxNTM9dHlwZWRlZiBlbnVtIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTMxNTctXFx0RVhUNF9JR0VUX0JBRCA9XFx0XFx0MHgwMDA0LCAvKiBBbGxvdyB0byBpZ2V0IGEgYmFkIGlub2RlICovXFxuZnMvZXh0NC9leHQ0Lmg6MzE1ODpcXHRFWFQ0X0lHRVRfRUFfSU5PREUgPVxcdDB4MDAwOFxcdC8qIElub2RlIHNob3VsZCBjb250YWluIGFuIEVBIHZhbHVlICovXFxuZnMvZXh0NC9leHQ0LmgtMzE1OS19IGV4dDRfaWdldF9mbGFncztcXG4tLVxcbmZzL2V4dDQvZXh0NF9qYmQyLmM9MTA9aW50IGV4dDRfaW5vZGVfam91cm5hbF9tb2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2V4dDRfamJkMi5jLTE1LVxcdGlmICghU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fFxcbmZzL2V4dDQvZXh0NF9qYmQyLmM6MTY6XFx0ICAgIGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VBX0lOT0RFKSB8fFxcbmZzL2V4dDQvZXh0NF9qYmQyLmMtMTctXFx0ICAgIHRlc3Rfb3B0KGlub2RlLVxcdTAwM2VpX3NiLCBEQVRBX0ZMQUdTKSA9PSBFWFQ0X01PVU5UX0pPVVJOQUxfREFUQSB8fFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9MjQzNz1zdGF0aWMgaW5saW5lIGludCBnZXRfZGVmYXVsdF9mcmVlX2Jsb2Nrc19mbGFncyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMjQzOS1cXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fCBTX0lTTE5LKGlub2RlLVxcdTAwM2VpX21vZGUpIHx8XFxuZnMvZXh0NC9leHRlbnRzLmM6MjQ0MDpcXHQgICAgZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRUFfSU5PREUpKVxcbmZzL2V4dDQvZXh0ZW50cy5jLTI0NDEtXFx0XFx0cmV0dXJuIEVYVDRfRlJFRV9CTE9DS1NfTUVUQURBVEEgfCBFWFQ0X0ZSRUVfQkxPQ0tTX0ZPUkdFVDtcXG4tLVxcbmZzL2V4dDQvaWFsbG9jLmM9OTMzPXN0cnVjdCBpbm9kZSAqX19leHQ0X25ld19pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL2V4dDQvaWFsbG9jLmMtOTk1LVxcbmZzL2V4dDQvaWFsbG9jLmM6OTk2OlxcdGlmICghKGlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSkge1xcbmZzL2V4dDQvaWFsbG9jLmMtOTk3LVxcdFxcdGVyciA9IGZzY3J5cHRfcHJlcGFyZV9uZXdfaW5vZGUoZGlyLCBpbm9kZSwgXFx1MDAyNmVuY3J5cHQpO1xcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYy0xMDA1LVxcbmZzL2V4dDQvaWFsbG9jLmM6MTAwNjpcXHRpZiAoIWhhbmRsZSBcXHUwMDI2XFx1MDAyNiBzYmktXFx1MDAzZXNfam91cm5hbCBcXHUwMDI2XFx1MDAyNiAhKGlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSkge1xcbmZzL2V4dDQvaWFsbG9jLmMtMTAwNy1cXHRcXHRyZXQyID0gZXh0NF94YXR0cl9jcmVkaXRzX2Zvcl9uZXdfaW5vZGUoZGlyLCBtb2RlLCBlbmNyeXB0KTtcXG4tLVxcbmZzL2V4dDQvaWFsbG9jLmMtMTMwOC1cXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9pbmxpbmVfZGF0YShzYikgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L2lhbGxvYy5jOjEzMDk6XFx0ICAgICghKGVpLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgKEVYVDRfREFYX0ZMfEVYVDRfRUFfSU5PREVfRkwpKSB8fCBTX0lTRElSKG1vZGUpKSlcXG5mcy9leHQ0L2lhbGxvYy5jLTEzMTAtXFx0XFx0ZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcXG4tLVxcbmZzL2V4dDQvaWFsbG9jLmMtMTMyNi1cXG5mcy9leHQ0L2lhbGxvYy5jOjEzMjc6XFx0aWYgKCEoZWktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSkge1xcbmZzL2V4dDQvaWFsbG9jLmMtMTMyOC1cXHRcXHRlcnIgPSBleHQ0X2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpcik7XFxuLS1cXG5mcy9leHQ0L2luZGlyZWN0LmM9ODU3PXN0YXRpYyBpbnQgZXh0NF9jbGVhcl9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5kaXJlY3QuYy04NjctXFx0aWYgKFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fFxcbmZzL2V4dDQvaW5kaXJlY3QuYzo4Njg6XFx0ICAgIGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VBX0lOT0RFKSlcXG5mcy9leHQ0L2luZGlyZWN0LmMtODY5LVxcdFxcdGZsYWdzIHw9IEVYVDRfRlJFRV9CTE9DS1NfRk9SR0VUIHwgRVhUNF9GUkVFX0JMT0NLU19NRVRBREFUQTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz0xNjk9dm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtMTg0LVxcbmZzL2V4dDQvaW5vZGUuYzoxODU6XFx0aWYgKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKVxcbmZzL2V4dDQvaW5vZGUuYy0xODYtXFx0XFx0ZXh0NF9ldmljdF9lYV9pbm9kZShpbm9kZSk7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NDM0PXZvaWQgZXh0NF9jaGVja19tYXBfZXh0ZW50c19lbnYoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy00NDItXFx0ICAgIChpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgKElfRlJFRUlORyB8IElfV0lMTF9GUkVFIHwgSV9ORVcpKSB8fFxcbmZzL2V4dDQvaW5vZGUuYzo0NDM6XFx0ICAgIGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VBX0lOT0RFKSB8fFxcbmZzL2V4dDQvaW5vZGUuYy00NDQtXFx0ICAgIGV4dDRfdmVyaXR5X2luX3Byb2dyZXNzKGlub2RlKSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz00Njk3PXN0YXRpYyBpbmxpbmUgdTY0IGV4dDRfaW5vZGVfcGVla19pdmVyc2lvbihjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvaW5vZGUuYy00Njk4LXtcXG5mcy9leHQ0L2lub2RlLmM6NDY5OTpcXHRpZiAodW5saWtlbHkoRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9mbGFncyBcXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKVxcbmZzL2V4dDQvaW5vZGUuYy00NzAwLVxcdFxcdHJldHVybiBpbm9kZV9wZWVrX2l2ZXJzaW9uX3Jhdyhpbm9kZSk7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NTE5MD1pbnQgZXh0NF9nZXRfcHJvamlkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGtwcm9qaWRfdCAqcHJvamlkKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUxOTktICogZXh0NCBoYXMgc2VsZi1tYW5hZ2VkIGlfdmVyc2lvbiBmb3IgZWEgaW5vZGVzLCBpdCBzdG9yZXMgdGhlIGxvd2VyIDMyYml0IG9mXFxuZnMvZXh0NC9pbm9kZS5jOjUyMDA6ICogcmVmY291bnQgaW4gaV92ZXJzaW9uLCBzbyB1c2UgcmF3IHZhbHVlcyBpZiBpbm9kZSBoYXMgRVhUNF9FQV9JTk9ERV9GTCBmbGFnXFxuZnMvZXh0NC9pbm9kZS5jLTUyMDEtICogc2V0Llxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTUyMDM9c3RhdGljIGlubGluZSB2b2lkIGV4dDRfaW5vZGVfc2V0X2l2ZXJzaW9uX3F1ZXJpZWQoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHZhbClcXG5mcy9leHQ0L2lub2RlLmMtNTIwNC17XFxuZnMvZXh0NC9pbm9kZS5jOjUyMDU6XFx0aWYgKHVubGlrZWx5KEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSlcXG5mcy9leHQ0L2lub2RlLmMtNTIwNi1cXHRcXHRpbm9kZV9zZXRfaXZlcnNpb25fcmF3KGlub2RlLCB2YWwpO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTUyMTE9c3RhdGljIGludCBjaGVja19pZ290X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfaWdldF9mbGFncyBmbGFncyxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy01MjE1LVxcbmZzL2V4dDQvaW5vZGUuYzo1MjE2OlxcdGlmIChmbGFncyBcXHUwMDI2IEVYVDRfSUdFVF9FQV9JTk9ERSkge1xcbmZzL2V4dDQvaW5vZGUuYzo1MjE3OlxcdFxcdGlmICghKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSkge1xcbmZzL2V4dDQvaW5vZGUuYzo1MjE4OlxcdFxcdFxcdGVycl9zdHIgPSBcXFwibWlzc2luZyBFQV9JTk9ERSBmbGFnXFxcIjtcXG5mcy9leHQ0L2lub2RlLmMtNTIxOS1cXHRcXHRcXHRnb3RvIGVycm9yO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUyMjYtXFx0fSBlbHNlIHtcXG5mcy9leHQ0L2lub2RlLmM6NTIyNzpcXHRcXHRpZiAoKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSkge1xcbmZzL2V4dDQvaW5vZGUuYy01MjI4LVxcdFxcdFxcdC8qXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTIzNC1cXHRcXHRcXHRcXHRyZXR1cm4gLUVTVEFMRTtcXG5mcy9leHQ0L2lub2RlLmM6NTIzNTpcXHRcXHRcXHRlcnJfc3RyID0gXFxcInVuZXhwZWN0ZWQgRUFfSU5PREUgZmxhZ1xcXCI7XFxuZnMvZXh0NC9pbm9kZS5jLTUyMzYtXFx0XFx0XFx0Z290byBlcnJvcjtcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYz0xMjA1PXN0YXRpYyBpbnQgZXh0NF9pb2N0bF9zZXR1dWlkKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTEyNjEtXFx0XFx0KEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTIHxcXHRcXFxcXFxuZnMvZXh0NC9pb2N0bC5jOjEyNjI6XFx0XFx0IEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9FQV9JTk9ERSB8XFx0XFxcXFxcbmZzL2V4dDQvaW9jdGwuYy0xMjYzLVxcdFxcdCBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRU5DUllQVCB8XFx0XFxcXFxcbi0tXFxuZnMvZXh0NC92ZXJpdHkuYy0xNS0gKiBieSBleHQ0IHdpdGggb25seSBzb21lIHJlbGF0aXZlbHkgc21hbGwgY2hhbmdlcyB0byBleHQ0LiAgVGhpcyBhcHByb2FjaFxcbmZzL2V4dDQvdmVyaXR5LmM6MTY6ICogYXZvaWRzIGhhdmluZyB0byBkZXBlbmQgb24gdGhlIEVBX0lOT0RFIGZlYXR1cmUgYW5kIG9uIHJlYXJjaGl0ZWN0dXJpbmdcXG5mcy9leHQ0L3Zlcml0eS5jLTE3LSAqIGV4dDQncyB4YXR0ciBzdXBwb3J0IHRvIHN1cHBvcnQgcGFnaW5nIG11bHRpLWdpZ2FieXRlIHhhdHRycyBpbnRvIG1lbW9yeSwgYW5kXFxuLS1cXG5mcy9leHQ0L3Zlcml0eS5jPTEwMj1zdGF0aWMgaW50IGV4dDRfYmVnaW5fZW5hYmxlX3Zlcml0eShzdHJ1Y3QgZmlsZSAqZmlscClcXG4tLVxcbmZzL2V4dDQvdmVyaXR5LmMtMTY4LSAqIHhhdHRycy4gIEFsc28sIGlmIHRoZSBkZXNjcmlwdG9yIGluY2x1ZGVzIGEgbGFyZ2Ugc2lnbmF0dXJlIGJsb2IgaXQgbWF5IGJlXFxuZnMvZXh0NC92ZXJpdHkuYzoxNjk6ICogdG9vIGxhcmdlIHRvIHN0b3JlIGluIGFuIHhhdHRyIHdpdGhvdXQgdGhlIEVBX0lOT0RFIGZlYXR1cmUuXFxuZnMvZXh0NC92ZXJpdHkuYy0xNzAtICovXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTAxPWNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyc1tdID0ge1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTExMy1cXG5mcy9leHQ0L3hhdHRyLmM6MTE0OiNkZWZpbmUgRUFfSU5PREVfQ0FDSEUoaW5vZGUpXFx0KCgoc3RydWN0IGV4dDRfc2JfaW5mbyAqKSBcXFxcXFxuZnMvZXh0NC94YXR0ci5jLTExNS1cXHRcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19mc19pbmZvKS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSlcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz00MjA9c3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2lnZXQoc3RydWN0IGlub2RlICpwYXJlbnQsIHVuc2lnbmVkIGxvbmcgZWFfaW5vLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTQzNi1cXG5mcy9leHQ0L3hhdHRyLmM6NDM3OlxcdGlub2RlID0gZXh0NF9pZ2V0KHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vLCBFWFQ0X0lHRVRfRUFfSU5PREUpO1xcbmZzL2V4dDQveGF0dHIuYy00MzgtXFx0aWYgKElTX0VSUihpbm9kZSkpIHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy00NTQtXFx0ICAgIGlub2RlLVxcdTAwM2VpX2dlbmVyYXRpb24gPT0gcGFyZW50LVxcdTAwM2VpX2dlbmVyYXRpb24pIHtcXG5mcy9leHQ0L3hhdHRyLmM6NDU1OlxcdFxcdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX0xVU1RSRV9FQV9JTk9ERSk7XFxuZnMvZXh0NC94YXR0ci5jLTQ1Ni1cXHRcXHRleHQ0X3hhdHRyX2lub2RlX3NldF9yZWYoaW5vZGUsIDEpO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTQ2OD12b2lkIGV4dDRfZXZpY3RfZWFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy00NzEtXFxuZnMvZXh0NC94YXR0ci5jOjQ3MjpcXHRpZiAoIUVBX0lOT0RFX0NBQ0hFKGlub2RlKSlcXG5mcy9leHQ0L3hhdHRyLmMtNDczLVxcdFxcdHJldHVybjtcXG5mcy9leHQ0L3hhdHRyLmMtNDc0LVxcdC8qIFdhaXQgZm9yIGVudHJ5IHRvIGdldCB1bnVzZWQgc28gdGhhdCB3ZSBjYW4gcmVtb3ZlIGl0ICovXFxuZnMvZXh0NC94YXR0ci5jOjQ3NTpcXHR3aGlsZSAoKG9lID0gbWJfY2FjaGVfZW50cnlfZGVsZXRlX29yX2dldChFQV9JTk9ERV9DQUNIRShpbm9kZSksXFxuZnMvZXh0NC94YXR0ci5jLTQ3Ni1cXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2dldF9oYXNoKGlub2RlKSwgaW5vZGUtXFx1MDAzZWlfaW5vKSkpIHtcXG5mcy9leHQ0L3hhdHRyLmMtNDc3LVxcdFxcdG1iX2NhY2hlX2VudHJ5X3dhaXRfdW51c2VkKG9lKTtcXG5mcy9leHQ0L3hhdHRyLmM6NDc4OlxcdFxcdG1iX2NhY2hlX2VudHJ5X3B1dChFQV9JTk9ERV9DQUNIRShpbm9kZSksIG9lKTtcXG5mcy9leHQ0L3hhdHRyLmMtNDc5LVxcdH1cXG4tLVxcbmZzL2V4dDQveGF0dHIuYz01MjU9ZXh0NF94YXR0cl9pbm9kZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTUyNy17XFxuZnMvZXh0NC94YXR0ci5jOjUyODpcXHRzdHJ1Y3QgbWJfY2FjaGUgKmVhX2lub2RlX2NhY2hlID0gRUFfSU5PREVfQ0FDSEUoaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy01MjktXFx0c3RydWN0IGlub2RlICplYV9pbm9kZTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy01NTAtXFxuZnMvZXh0NC94YXR0ci5jOjU1MTpcXHRpZiAoIWV4dDRfdGVzdF9pbm9kZV9zdGF0ZShlYV9pbm9kZSwgRVhUNF9TVEFURV9MVVNUUkVfRUFfSU5PREUpKSB7XFxuZnMvZXh0NC94YXR0ci5jLTU1Mi1cXHRcXHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX3ZlcmlmeV9oYXNoZXMoZWFfaW5vZGUsIGVudHJ5LCBidWZmZXIsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9OTI0PXN0YXRpYyB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy05MjgtXFx0aWYgKGVhX2lub2RlIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC94YXR0ci5jOjkyOTpcXHQgICAgZXh0NF90ZXN0X2lub2RlX3N0YXRlKGVhX2lub2RlLCBFWFQ0X1NUQVRFX0xVU1RSRV9FQV9JTk9ERSkpXFxuZnMvZXh0NC94YXR0ci5jLTkzMC1cXHRcXHRyZXR1cm47XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTQ2MT1zdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTE0ODAtXFx0XFx0XFx0XFx0ICBTX0lGUkVHIHwgMDYwMCwgTlVMTCwgaW5vZGUtXFx1MDAzZWlfaW5vICsgMSwgb3duZXIsXFxuZnMvZXh0NC94YXR0ci5jOjE0ODE6XFx0XFx0XFx0XFx0ICBFWFQ0X0VBX0lOT0RFX0ZMKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTQ4Mi1cXHRpZiAoIUlTX0VSUihlYV9pbm9kZSkpIHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xNTE2PWV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xNTIwLVxcdHN0cnVjdCBtYl9jYWNoZV9lbnRyeSAqY2U7XFxuZnMvZXh0NC94YXR0ci5jOjE1MjE6XFx0c3RydWN0IG1iX2NhY2hlICplYV9pbm9kZV9jYWNoZSA9IEVBX0lOT0RFX0NBQ0hFKGlub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTUyMi1cXHR2b2lkICplYV9kYXRhO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTE1NDEtXFx0XFx0ZWFfaW5vZGUgPSBleHQ0X2lnZXQoaW5vZGUtXFx1MDAzZWlfc2IsIGNlLVxcdTAwM2VlX3ZhbHVlLFxcbmZzL2V4dDQveGF0dHIuYzoxNTQyOlxcdFxcdFxcdFxcdCAgICAgRVhUNF9JR0VUX0VBX0lOT0RFKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTU0My1cXHRcXHRpZiAoSVNfRVJSKGVhX2lub2RlKSlcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xNTY3PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTE2MDEtXFxuZnMvZXh0NC94YXR0ci5jOjE2MDI6XFx0aWYgKEVBX0lOT0RFX0NBQ0hFKGlub2RlKSlcXG5mcy9leHQ0L3hhdHRyLmM6MTYwMzpcXHRcXHRtYl9jYWNoZV9lbnRyeV9jcmVhdGUoRUFfSU5PREVfQ0FDSEUoaW5vZGUpLCBHRlBfTk9GUywgaGFzaCxcXG5mcy9leHQ0L3hhdHRyLmMtMTYwNC1cXHRcXHRcXHRcXHQgICAgICBlYV9pbm9kZS1cXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTE4ODg9ZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xOTkzLVxcdFxcdFxcdGlmICghZXh0NF90ZXN0X2lub2RlX3N0YXRlKHRtcF9pbm9kZSxcXG5mcy9leHQ0L3hhdHRyLmM6MTk5NDpcXHRcXHRcXHRcXHRcXHRFWFQ0X1NUQVRFX0xVU1RSRV9FQV9JTk9ERSkpIHtcXG5mcy9leHQ0L3hhdHRyLmMtMTk5NS1cXHRcXHRcXHRcXHQvKlxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI5OTY9dm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI5OTktXFx0XFx0cmV0dXJuO1xcbmZzL2V4dDQveGF0dHIuYzozMDAwOlxcdFdBUk5fT05fT05DRSghKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSk7XFxuZnMvZXh0NC94YXR0ci5jLTMwMDEtXFx0aWYgKGlwdXRfaWZfbm90X2xhc3QoaW5vZGUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMDo1MC42Nzg2NjMzNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NjkwNzk1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgdGhlIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9FQV9JTk9ERSBGZWF0dXJlIGFuZCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRUFfSU5PREVgIGZlYXR1cmUuIEl0J3Mgbm90IGEgc3RhbmRhbG9uZSBLY29uZmlnIG9wdGlvbiwgaXQganVzdCBjb21lcyBhbG9uZyB3aXRoIGV4dDQuIFJpZ2h0LCBzbyB0byBhY3R1YWxseSAqdGVzdCogdGhpcyBmZWF0dXJlLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZXh0NCBpdHNlbGYgaXMgZW5hYmxlZCwgd2hpY2ggbWVhbnMgYEVYVDRfRlNgIG5lZWRzIHRvIGJlIHNldC4gTWFrZXMgc2Vuc2UuXG5cbkFuZCwgb2YgY291cnNlLCBleHRlbmRlZCBhdHRyaWJ1dGVzIGhhdmUgdG8gYmUgZW5hYmxlZC4gVGhhdCBzaG91bGQgYmUgYEVYVDRfRlNfWEFUVFJgLiBCdXQgd2FpdCwgSSdtIHByZXR0eSBzdXJlIHRoYXQncyB1c3VhbGx5IG9uIGJ5IGRlZmF1bHQsIG9yIGF0IGxlYXN0IGVhc3kgdG8gZXhwbGljaXRseSBzZXQuIEhvbGQgb24uLi5kb2VzIGBFWFQ0X0ZTX1hBVFRSYCBhY3R1YWxseSBleGlzdD8gSSBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoYXQ7IEkgZG9uJ3Qgd2FudCB0byBtYWtlIGFzc3VtcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA4MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMDo1NS4xNDc3NDU3MjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIyMDMzNDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQ0X0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjEwOjU1Ljc2OTc5MTUwOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTExOTAxNjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEVYVDQgRXh0ZW5kZWQgQXR0cmlidXRlcyAoeGF0dHJzKSoqXG5cbk9rYXksIHNvIEknbSBob25pbmcgaW4gb24gdGhlIEVYVDQgZmlsZSBzeXN0ZW0sIHNwZWNpZmljYWxseSB4YXR0cnMuIGBFWFQ0X0ZTYCBpcyB0aGUgY29yZSwgYW5kIEknbSBub3RpbmcgdGhhdCB3aGlsZSBgRVhUNF9GU19QT1NJWF9BQ0xgIGFuZCBgRVhUNF9GU19TRUNVUklUWWAgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIHhhdHRycyB0b28sIHRoZSBFQSBpbm9kZXMgYXJlIHRoZSBpbXBvcnRhbnQgcGFydCBmb3IgbGFyZ2VyIGF0dHJpYnV0ZXMuIFNvLCBmb3Igbm93LCBsZXQncyBqdXN0IHN0aWNrIHdpdGggYEVYVDRfRlNgLlxuXG5JIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgY3JpdGljYWwgZm9yIHRoZSBmdXp6aW5nIGNhbXBhaWduLiBJJ20gc2VlaW5nIGEgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBzZWVtIHByb21pc2luZywgYnV0IEkgbmVlZCB0byBtYWtlIHNvbWUgZGVjaXNpb25zLlxuXG5Jbml0aWFsbHksIEkgaGFkIGEgZm9jdXMgbGlzdCBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczpcbiogICBgZXh0NF9lYV9pbm9kZV93b3JrYCAoc3RhdGljYWxseSBkZWZpbmVkLCBpdCBtaWdodCBub3QgYmUgZGlyZWN0bHkgZnV6emFibGUsIGJ1dCBpdCBpcyBjYWxsZWQgZnJvbSBhIHdvcmtxdWV1ZSwgc28gdGhlcmUgbWF5IGJlIGEgd2F5KVxuKiAgIGBleHQ0X3B1dF9lYV9pbm9kZWAgKGNhbGxlZCBmcm9tIHZhcmlvdXMgbG9jYXRpb25zKVxuKiAgIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWBcbiogICBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYFxuKiAgIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYFxuKiAgIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGBcbiogICBgZXh0NF94YXR0cl9pYm9keV9zZXRgXG4qICAgYGV4dDRfeGF0dHJfc2V0X2VudHJ5YFxuKiAgIGBleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVgXG4qICAgYGV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlYFxuKiAgIGBleHQ0X3hhdHRyX2lub2RlX2dldGBcblxuQnV0IG5vdyB0aGF0IEkndmUgcmV2aWV3ZWQgdGhlIHBhdGNoLCBpdCBzZWVtcyBsaWtlIHNldmVyYWwgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBtb2RpZmllZC4gQmFzaWNhbGx5LCBhbnl0aGluZyB0aGF0IHVzZWQgYGlwdXQoZWFfaW5vZGUpYCBpcyBub3cgdXNpbmcgYGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKWAuIEFsc28sIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAgbm8gbG9uZ2VyIHVzZXMgYGVhX2lub2RlX2FycmF5YC5cblxuU28sIHRoZSBmb2N1cyByZWFsbHkgbmFycm93cyB0byB0aGUgZm9sbG93aW5nIGtleSBmdW5jdGlvbnM6XG5cbiogICBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgXG4qICAgYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2BcbiogICBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGBcbiogICBgZXh0NF94YXR0cl9ibG9ja19zZXRgXG4qICAgYGV4dDRfeGF0dHJfaWJvZHlfc2V0YFxuKiAgIGBleHQ0X3B1dF9lYV9pbm9kZWBcblxuSSdtIHRoaW5raW5nLCBpcyBgZXh0NF9lYV9pbm9kZV93b3JrYCByZWFjaGFibGUsIGRlc3BpdGUgYmVpbmcgc3RhdGljPyBZZXMsIGl0J3MgdHJpZ2dlcmVkIHZpYSBkZWxheWVkIHdvcmsuIEFuZCBgZXh0NF9wdXRfZWFfaW5vZGVgPyBZZXAsIGludm9sdmVkIGluIHNldHRpbmcsIGdldHRpbmcsIGFuZCBkZWxldGluZyBsYXJnZSB4YXR0cnMuIEFuZCB3aGF0IGFib3V0IGBpcHV0X2lmX25vdF9sYXN0YD8gVGhhdCdzIGlubGluZSBpbiBgZnMuaGAsIHNvIGFjY2Vzc2libGUuXG5cblNvLCBnb2luZyBiYWNrIHRvIHRoZSBmaXJzdCBwb2ludDsgaXMgYEVYVDRfRlNgIHRoZSByaWdodCBzY29wZT8gWWVzLCBpdCBzZWVtcyBsaWtlIGl0IHdpbGwgcHJvdmlkZSBlbm91Z2ggY292ZXJhZ2UuXG5cbkxldCdzIHJlZmluZSB0aG9zZSBcIkZvY3VzU3ltYm9sc1wiOlxuXG4qICAgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYFxuKiAgIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgXG4qICAgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgXG4qICAgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YFxuKiAgIGBleHQ0X3hhdHRyX2lib2R5X3NldGBcbiogICBgZXh0NF9wdXRfZWFfaW5vZGVgXG4qICAgYGV4dDRfZWFfaW5vZGVfd29ya2BcblxuSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYCBpcyBzdGF0aWMsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2MjksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTE6MDYuODgxNzI2NzcxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NTA3NDExOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC94YXR0ci5jPTEyNjI9c3RhdGljIHZvaWRcXG5mcy9leHQ0L3hhdHRyLmM6MTI2MzpleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L3hhdHRyLmMtMTI2NC1cXHRcXHRcXHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xODg4PWV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjE3My1cXHRpZiAoYnMtXFx1MDAzZWJoIFxcdTAwMjZcXHUwMDI2IGJzLVxcdTAwM2ViaCAhPSBuZXdfYmgpIHtcXG5mcy9leHQ0L3hhdHRyLmM6MjE3NDpcXHRcXHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYnMtXFx1MDAzZWJoLFxcbmZzL2V4dDQveGF0dHIuYy0yMTc1LVxcdFxcdFxcdFxcdFxcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI4NjA9aW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjkzNi1cXG5mcy9leHQ0L3hhdHRyLmM6MjkzNzpcXHRcXHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsXFxuZnMvZXh0NC94YXR0ci5jLTI5MzgtXFx0XFx0XFx0XFx0XFx0IGV4dHJhX2NyZWRpdHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMTowNy4yMjY4MDY0NjdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjM5ODUwNzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqWEZTIEV4dGVuZGVkIEF0dHJpYnV0ZSBGdW5jdGlvbiBJbmNsdXNpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBYRlMgZXh0ZW5kZWQgYXR0cmlidXRlIGZ1bmN0aW9ucyBhbmQgZmlndXJpbmcgb3V0IHdoYXQncyByZWxldmFudCB0byBpbmNsdWRlLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhhdCB0aGlzIGlzIGEgc3RhdGljIGNvbnRleHQsIHdoaWNoIGlzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlIHJpZ2h0IG9uZXMuIEl0IGxvb2tzIGxpa2UgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYCBpcyBnbG9iYWwsIHNvIHRoYXQncyBkZWZpbml0ZWx5IGluLiBUaGVuIHRoZXJlJ3MgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCwgd2hpY2ggaXMgYWxzbyBnbG9iYWwg4oCTIGluY2x1ZGUgaXQuIFNhbWUgZ29lcyBmb3IgYGV4dDRfeGF0dHJfaWJvZHlfc2V0YCBhbmQgYGV4dDRfcHV0X2VhX2lub2RlYCDigJMgdGhvc2UgYXJlIGdsb2JhbCB0b28sIHNvIEknbGwgYmUgc3VyZSB0byBpbmNsdWRlIHRoZW0uIE5vdywgdGhlcmUncyBgZXh0NF9lYV9pbm9kZV93b3JrYCAtIGl0J3Mgc3RhdGljLCBidXQgc2VlbXMgcmVsYXRlZCwgc28gSSdsbCBpbmNsdWRlIGl0IGluIHRoaXMgcGFzcy5cblxuTGV0J3MgcXVpY2tseSBjcmVhdGUgdGhlIGxpc3QuIEknbGwgaW5jbHVkZTpcbi0gYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYFxuLSBgZXh0NF94YXR0cl9ibG9ja19zZXRgXG4tIGBleHQ0X3hhdHRyX2lib2R5X3NldGBcbi0gYGV4dDRfcHV0X2VhX2lub2RlYFxuLSBgZXh0NF9lYV9pbm9kZV93b3JrYFxuLSBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYFxuLSBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGBcblxuV2FpdCBhIHNlY29uZC4uLkkganVzdCBjYXVnaHQgdGhhdCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAgaXMgc3RhdGljIGFzIHdlbGwuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MjcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTE6MTEuODY2NjU5NjQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODAwMTYyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3hhdHRyLmM9MTE1NT1zdGF0aWMgdm9pZFxcbmZzL2V4dDQveGF0dHIuYzoxMTU2OmV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuZnMvZXh0NC94YXR0ci5jLTExNTctXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTEyNjM9ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTMwMi1cXHRcXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYikpXFxuZnMvZXh0NC94YXR0ci5jOjEzMDM6XFx0XFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBiaCxcXG5mcy9leHQ0L3hhdHRyLmMtMTMwNC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIEJGSVJTVChiaCksXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9Mjg2MD1pbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yODk1LVxcdFxcdGlmIChoZWFkZXItXFx1MDAzZWhfbWFnaWMgPT0gY3B1X3RvX2xlMzIoRVhUNF9YQVRUUl9NQUdJQykpXFxuZnMvZXh0NC94YXR0ci5jOjI4OTY6XFx0XFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBpbG9jLmJoLFxcbmZzL2V4dDQveGF0dHIuYy0yODk3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgSUZJUlNUKGhlYWRlciksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjExOjEyLjE0NjY4MzQ5M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY5MDQ1MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipGb2N1cyBTeW1ib2wgTWFuYWdlbWVudCBhbmQgYSBRdWljayBDaGVjayoqXG5cblJpZ2h0LCB0aGVzZSBuZXcgaXRlbXMgbmVlZCB0byBiZSBpbnRlZ3JhdGVkIGludG8gdGhlIGBGb2N1c1N5bWJvbHNgIHN0cnVjdHVyZS4gVGhhdCdzIHRoZSBpbW1lZGlhdGUgYWN0aW9uLiBCZWZvcmUgSSBmdWxseSBjb21taXQsIHRob3VnaCwgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgaXB1dF9pZl9ub3RfbGFzdGAgaXMgYmVoYXZpbmcgYXMgSSBleHBlY3QsIGFuZCB0aGF0IG1lYW5zIGEgcGVlayBhdCBgaW5jbHVkZS9saW51eC9mcy5oYC4gSXQncyBsaWtlbHkgdGhhdCBhIHN1YnRsZSBlZGdlIGNhc2UgaGFzIGJlZW4gdW5jb3ZlcmVkIGJ5IHRoaXMuIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgcmVsZWFzZSBvZiBhbiBpbm9kZS4gSSBuZWVkIHRvIG1ha2UgY2VydGFpbiB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgdXNhZ2UgYWxpZ24gd2l0aCBteSBjdXJyZW50IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZvY3VzIHN5bWJvbCBzdHJhdGVneSwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBmaW5hbGl6YXRpb24gYW5kIGFueSBhc3NvY2lhdGVkIHJhY2UgY29uZGl0aW9ucyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSB3aWxsIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIHdpdGggaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIG5ldyBlbnRyaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ4NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjExOjE1LjQxNTczNDA5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDIwNzgyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB1dF9pZl9ub3RfbGFzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2ZzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mcy5oPTI0MTU9dm9pZCBpcHV0X25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaC0yNDE3LS8qKlxcbmluY2x1ZGUvbGludXgvZnMuaDoyNDE4OiAqIGlwdXRfaWZfbm90X2xhc3QgLSBkcm9wIGFuIGlub2RlIHJlZmVyZW5jZSBvbmx5IGlmIGl0IGlzIG5vdCB0aGUgbGFzdCBvbmVcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjQxOS0gKiBAaW5vZGU6IGlub2RlIHRvIHB1dFxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oLTI0MjMtICovXFxuaW5jbHVkZS9saW51eC9mcy5oOjI0MjQ6c3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBpcHV0X2lmX25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuaW5jbHVkZS9saW51eC9mcy5oLTI0MjUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMToxNS43NTc4MTg4NzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc4NDU2Nzc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBFeHRlbmRlZCBBdHRyaWJ1dGUgKEVBKSBJbm9kZSBIYW5kbGluZyBpbiBleHQ0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UgbmVlZCB0byBmdXp6IHRoZSBjaGFuZ2VzIHRvIGV4dDQncyBFQSBpbm9kZSBoYW5kbGluZy4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBnb2FsIGhlcmUgaXMgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMgd2hlbiBkZWFsaW5nIHdpdGggRUEgaW5vZGVzLCB3aGljaCBpcyBjcnVjaWFsIGZvciBvdmVyYWxsIGZpbGVzeXN0ZW0gc3RhYmlsaXR5LiBTcGVjaWZpY2FsbHksIHRoZXkndmUgaW50cm9kdWNlZCBhIGRlZmVycmVkIGBpcHV0YCBtZWNoYW5pc20gdXNpbmcgYSBsb2NrbGVzcyBsaXN0IGFuZCBhIGRlbGF5ZWQgd29ya3F1ZXVlIGNhbGxlZCBgZXh0NF9lYV9pbm9kZV93b3JrYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIHNoaWZ0IGFuZCBJIG5lZWQgdG8gZW5zdXJlIGl0J3Mgcm9idXN0LlxuXG5XaGlsZSB0aGUgcHJpbWFyeSBmdW5jdGlvbiBvZiBpbnRlcmVzdCwgYGV4dDRfcHV0X2VhX2lub2RlYCwgbWlnaHQgbm90IGJlIGRpcmVjdGx5IGZ1enphYmxlIGFzIGEgc3ltYm9sIGJlY2F1c2UgaXQncyBpbmxpbmVkLCBpdCdzIHN0aWxsIGF0IHRoZSBoZWFydCBvZiB0aGUgY2hhbmdlcyBhbmQgdGhlcmVmb3JlIGEga2V5IGNvbnNpZGVyYXRpb24uIFRoZSBjb3JlIGZ1bmN0aW9ucyBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gYXJlOiBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgLCBgZXh0NF94YXR0cl9ibG9ja19zZXRgLCBgZXh0NF94YXR0cl9pYm9keV9zZXRgLCBgZXh0NF9wdXRfZWFfaW5vZGVgIChldmVuIGlmIGlubGluZWQsIEknbGwgbmVlZCB0byBjb25zaWRlciBob3cgaXQncyB1c2VkKSwgYGV4dDRfZWFfaW5vZGVfd29ya2AsIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLCBhbmQgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgLiBUaGVzZSBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBpbnZvbHZlZCBpbiBFQSBpbm9kZSBldmljdGlvbiwgYW5kIG5lZWQgdG8gYmUgZXhhbWluZWQgY2FyZWZ1bGx5LlxuXG5UaGUgY29uZmlndXJhdGlvbnMgSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGVuYWJsZSBmb3IgdGhlIGZ1enppbmcgcnVucyB3b3VsZCBiZSBgRVhUNF9GU2AuIEknbSBjb25jZXJuZWQgYWJvdXQgdGhlIHVzdWFsIHN1c3BlY3RzOiB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIGFuZCBwb3RlbnRpYWwgZGVhZGxvY2tzIHRoYXQgbWlnaHQgYXJpc2UgZHVlIHRvIHRoaXMgbmV3IGRlbGF5ZWQgd29ya3F1ZXVlIGFuZCBsb2NrbGVzcyBsaXN0LiBJIG5lZWQgdG8gZGVzaWduIGZ1enppbmcgY2FtcGFpZ25zIHRoYXQgc3BlY2lmaWNhbGx5IHRhcmdldCB0aG9zZSBhcmVhcyBhbmQgdGVzdCB0aG9yb3VnaGx5LiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgbG9ja2xlc3MgbGlzdCBhbmQgdGhlIHdvcmtxdWV1ZSBhbmQgZW5zdXJlIHRoYXQgdGhlIGV2aWN0aW9uIHByb2Nlc3MgaXMgY2xlYW4gYW5kIGNvbnNpc3RlbnQgdW5kZXIgdmFyaW91cyBsb2FkIGNvbmRpdGlvbnMuXG5cblJpZ2h0LCBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5MjIsIk91dHB1dFRva2VucyI6MjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjExOjIyLjU0MjM5MDI3MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODU5MzI2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfeGF0dHJfZGVsZXRlX2lub2RlXCIsXG4gICAgXCJleHQ0X3hhdHRyX2Jsb2NrX3NldFwiLFxuICAgIFwiZXh0NF94YXR0cl9pYm9keV9zZXRcIixcbiAgICBcImV4dDRfcHV0X2VhX2lub2RlXCIsXG4gICAgXCJleHQ0X2VhX2lub2RlX3dvcmtcIixcbiAgICBcImV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja1wiLFxuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQncyBoYW5kbGluZyBvZiBFeHRlbmRlZCBBdHRyaWJ1dGUgKEVBKSBpbm9kZXMgYnkgaW50cm9kdWNpbmcgYSBkZWZlcnJlZCBpcHV0IG1lY2hhbmlzbSB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gSXQgcmVwbGFjZXMgdGhlIGBleHQ0X3hhdHRyX2lub2RlX2FycmF5YCB3aXRoIGEgbG9ja2xlc3MgbGlzdCBhbmQgYSBkZWxheWVkIHdvcmtxdWV1ZSAoYGV4dDRfZWFfaW5vZGVfd29ya2ApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBkZWFkbG9ja3Mgb2NjdXIgZHVyaW5nIEVBIGlub2RlIGV2aWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZVwiLFxuICAgIFwiZXh0NF94YXR0cl9ibG9ja19zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfaWJvZHlfc2V0XCIsXG4gICAgXCJleHQ0X3B1dF9lYV9pbm9kZVwiLFxuICAgIFwiZXh0NF9lYV9pbm9kZV93b3JrXCIsXG4gICAgXCJleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tcIixcbiAgICBcImV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBleHQ0J3MgaGFuZGxpbmcgb2YgRXh0ZW5kZWQgQXR0cmlidXRlIChFQSkgaW5vZGVzIGJ5IGludHJvZHVjaW5nIGEgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMuIEl0IHJlcGxhY2VzIHRoZSBgZXh0NF94YXR0cl9pbm9kZV9hcnJheWAgd2l0aCBhIGxvY2tsZXNzIGxpc3QgYW5kIGEgZGVsYXllZCB3b3JrcXVldWUgKGBleHQ0X2VhX2lub2RlX3dvcmtgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgZGVhZGxvY2tzIG9jY3VyIGR1cmluZyBFQSBpbm9kZSBldmljdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzgwg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-02 17:51:12 +0000 UTC FinishedAt: 2026-07-02 18:11:24 +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": "4a50a141f05a8d1737661b19ee22ff8455b94409", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "4a50a141f05a8d1737661b19ee22ff8455b94409", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "EXT4_FS" ], "series_id": "ce304d7b-7f32-44b5-bf6f-e579abb42a5c" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "ext4_xattr_delete_inode", "ext4_xattr_block_set", "ext4_xattr_ibody_set", "ext4_put_ea_inode", "ext4_ea_inode_work", "ext4_xattr_release_block", "ext4_xattr_inode_dec_ref_all" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjEwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0VYVDRfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2Jsb2NrX3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lib2R5X3NldCYjMzQ7LAogICAgJiMzNDtleHQ0X3B1dF9lYV9pbm9kZSYjMzQ7LAogICAgJiMzNDtleHQ0X2VhX2lub2RlX3dvcmsmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NCYjMzk7cyBoYW5kbGluZyBvZiBFeHRlbmRlZCBBdHRyaWJ1dGUgKEVBKSBpbm9kZXMgYnkgaW50cm9kdWNpbmcgYSBkZWZlcnJlZCBpcHV0IG1lY2hhbmlzbSB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gSXQgcmVwbGFjZXMgdGhlIGBleHQ0X3hhdHRyX2lub2RlX2FycmF5YCB3aXRoIGEgbG9ja2xlc3MgbGlzdCBhbmQgYSBkZWxheWVkIHdvcmtxdWV1ZSAoYGV4dDRfZWFfaW5vZGVfd29ya2ApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBkZWFkbG9ja3Mgb2NjdXIgZHVyaW5nIEVBIGlub2RlIGV2aWN0aW9uLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjEwPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgZGFlNzYyYjJhYzM5MzczNDY3MTlmZjJmZTkzZGJkOGFjNjJkYjE4NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMTg6MTA6MzggMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaFxuaW5kZXggYjM3YzEzNmVhM2FiMzMuLmI5YjBhZGE3Nzc0YmI0IDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NC5oXG5AQCAtMTA3MCw4ICYjNDM7MTA3MCwxNCBAQCBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcbiBcdCAqIGJldHdlZW4gcmVhZGVycyBvZiBFQXMgYW5kIHdyaXRlcnMgb2YgcmVndWxhciBmaWxlIGRhdGEsIHNvXG4gXHQgKiBpbnN0ZWFkIHdlIHN5bmNocm9uaXplIG9uIHhhdHRyX3NlbSB3aGVuIHJlYWRpbmcgb3IgY2hhbmdpbmdcbiBcdCAqIEVBcy5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEVBIGlub2RlcyAoRVhUNF9FQV9JTk9ERV9GTCkgZG8gbm90IHVzZSB4YXR0cl9zZW07IHRoZXkgcmV1c2VcbiYjNDM7XHQgKiB0aGUgc3BhY2UgZm9yIGRlZmVycmVkIGlwdXQgbGlua2FnZS5cbiBcdCAqL1xuLVx0c3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07XG4mIzQzO1x0dW5pb24ge1xuJiM0MztcdFx0c3RydWN0IHJ3X3NlbWFwaG9yZSB4YXR0cl9zZW07XG4mIzQzO1x0XHRzdHJ1Y3QgbGxpc3Rfbm9kZSBpX2VhX2lwdXRfbm9kZTtcbiYjNDM7XHR9O1xuIFxuIFx0LypcbiBcdCAqIElub2RlcyB3aXRoIEVYVDRfU1RBVEVfT1JQSEFOX0ZJTEUgdXNlIGlfb3JwaGFuX2lkeC4gT3RoZXJ3aXNlXG5AQCAtMTc3MCw2ICYjNDM7MTc3NiwxMSBAQCBzdHJ1Y3QgZXh0NF9zYl9pbmZvIHtcbiBcdHN0cnVjdCBleHQ0X2VzX3N0YXRzIHNfZXNfc3RhdHM7XG4gXHRzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfYmxvY2tfY2FjaGU7XG4gXHRzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfaW5vZGVfY2FjaGU7XG4mIzQzO1xuJiM0MztcdC8qIERlZmVycmVkIGlwdXQgZm9yIEVBIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyAqL1xuJiM0MztcdHN0cnVjdCBsbGlzdF9oZWFkIHNfZWFfaW5vZGVfdG9fZnJlZTtcbiYjNDM7XHRzdHJ1Y3QgZGVsYXllZF93b3JrIHNfZWFfaW5vZGVfd29yaztcbiYjNDM7XG4gXHRzcGlubG9ja190IHNfZXNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuIFxuIFx0LyogSm91cm5hbCB0cmlnZ2VycyBmb3IgY2hlY2tzdW0gY29tcHV0YXRpb24gKi9cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi43NDdjNTJjMjMyY2MwMyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtMTc2LDcgJiM0MzsxNzYsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdCAqICh4YXR0ciBibG9jayBmcmVlaW5nKSwgYml0bWFwLCBncm91cCBkZXNjcmlwdG9yIChpbm9kZSBmcmVlaW5nKVxuIFx0ICovXG4gXHRpbnQgZXh0cmFfY3JlZGl0cyA9IDY7XG4tXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xuIFx0Ym9vbCBmcmVlemVfcHJvdGVjdGVkID0gZmFsc2U7XG4gXG4gXHR0cmFjZV9leHQ0X2V2aWN0X2lub2RlKGlub2RlKTtcbkBAIC0yODEsOCAmIzQzOzI4MCw3IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0fVxuIFxuIFx0LyogUmVtb3ZlIHhhdHRyIHJlZmVyZW5jZXMuICovXG4tXHRlcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBcdTAwMjZlYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRcdCAgICAgIGV4dHJhX2NyZWRpdHMpO1xuJiM0MztcdGVyciA9IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUsIGV4dHJhX2NyZWRpdHMpO1xuIFx0aWYgKGVycikge1xuIFx0XHRleHQ0X3dhcm5pbmcoaW5vZGUtXHUwMDNlaV9zYiwgXCYjMzQ7eGF0dHIgZGVsZXRlIChlcnIgJWQpXCYjMzQ7LCBlcnIpO1xuIHN0b3BfaGFuZGxlOlxuQEAgLTI5MCw3ICYjNDM7Mjg4LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdGV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7XG4gXHRcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxuIFx0XHRcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiBcdFx0Z290byBub19kZWxldGU7XG4gXHR9XG4gXG5AQCAtMzIwLDcgJiM0MzszMTcsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdGV4dDRfam91cm5hbF9zdG9wKGhhbmRsZSk7XG4gXHRpZiAoZnJlZXplX3Byb3RlY3RlZClcbiBcdFx0c2JfZW5kX2ludHdyaXRlKGlub2RlLVx1MDAzZWlfc2IpO1xuLVx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiBcdHJldHVybjtcbiBub19kZWxldGU6XG4gXHQvKlxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvc3VwZXIuYyBiL2ZzL2V4dDQvc3VwZXIuY1xuaW5kZXggMjQ1ZjY3ZDEwZGVkMzQuLjNlZmE1YTgxN2JlZjRmIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3N1cGVyLmNcbkBAIC0xMzAzLDYgJiM0MzsxMzAzLDggQEAgc3RhdGljIHZvaWQgZXh0NF9wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdFx0XHQgXHUwMDI2c2ItXHUwMDNlc191dWlkKTtcbiBcbiBcdGV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTtcbiYjNDM7XHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyB3aGlsZSBxdW90YSBpcyBzdGlsbCBhY3RpdmUuICovXG4mIzQzO1x0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuIFx0ZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7XG4gXG4gXHRkZXN0cm95X3dvcmtxdWV1ZShzYmktXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xuQEAgLTE0MjMsNiAmIzQzOzE0MjUsMTMgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0bWVtc2V0KFx1MDAyNmVpLVx1MDAzZWlfZHF1b3QsIDAsIHNpemVvZihlaS1cdTAwM2VpX2RxdW90KSk7XG4gI2VuZGlmXG4gXHRlaS1cdTAwM2VqaW5vZGUgPSBOVUxMO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogUmVpbml0aWFsaXplIHhhdHRyX3NlbSBldmVyeSBhbGxvY2F0aW9uIGJlY2F1c2UgRUEgaW5vZGVzXG4mIzQzO1x0ICogc2hhcmUgdGhpcyBzcGFjZSB3aXRoIGlfZWFfaXB1dF9ub2RlICh2aWEgdW5pb24pIHdoaWNoIG1heVxuJiM0MztcdCAqIGhhdmUgb3ZlcndyaXR0ZW4gdGhlIHNlbWFwaG9yZSB3aGVuIHRoZSBzbGFiIG9iamVjdCB3YXNcbiYjNDM7XHQgKiBwcmV2aW91c2x5IHVzZWQgYXMgYW4gRUEgaW5vZGUuXG4mIzQzO1x0ICovXG4mIzQzO1x0aW5pdF9yd3NlbShcdTAwMjZlaS1cdTAwM2V4YXR0cl9zZW0pO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZWktXHUwMDNlaV9yc3ZfY29udmVyc2lvbl9saXN0KTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmVpLVx1MDAzZWlfY29tcGxldGVkX2lvX2xvY2spO1xuIFx0ZWktXHUwMDNlaV9zeW5jX3RpZCA9IDA7XG5AQCAtMTQ4OCw3ICYjNDM7MTQ5Nyw2IEBAIHN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXG4gXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGZvbztcbiBcbiBcdElOSVRfTElTVF9IRUFEKFx1MDAyNmVpLVx1MDAzZWlfb3JwaGFuKTtcbi1cdGluaXRfcndzZW0oXHUwMDI2ZWktXHUwMDNleGF0dHJfc2VtKTtcbiBcdGluaXRfcndzZW0oXHUwMDI2ZWktXHUwMDNlaV9kYXRhX3NlbSk7XG4gXHRpbm9kZV9pbml0X29uY2UoXHUwMDI2ZWktXHUwMDNldmZzX2lub2RlKTtcbiBcdGV4dDRfZmNfaW5pdF9pbm9kZShcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUpO1xuQEAgLTU0OTcsNiAmIzQzOzU1MDUsOCBAQCBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdFx0XHQgIGV4dDRfaGFzX2ZlYXR1cmVfb3JwaGFuX3ByZXNlbnQoc2IpIHx8XG4gXHRcdFx0ICBleHQ0X2hhc19mZWF0dXJlX2pvdXJuYWxfbmVlZHNfcmVjb3Zlcnkoc2IpKTtcbiBcbiYjNDM7XHRleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzYmkpO1xuJiM0MztcbiBcdGlmIChleHQ0X2hhc19mZWF0dXJlX21tcChzYikgXHUwMDI2XHUwMDI2ICFzYl9yZG9ubHkoc2IpKSB7XG4gXHRcdGVyciA9IGV4dDRfbXVsdGlfbW91bnRfcHJvdGVjdChzYiwgbGU2NF90b19jcHUoZXMtXHUwMDNlc19tbXBfYmxvY2spKTtcbiBcdFx0aWYgKGVycilcbkBAIC01NzQ3LDYgJiM0Mzs1NzU3LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRyZXR1cm4gMDtcbiBcbiBmYWlsZWRfbW91bnQ5OlxuJiM0MztcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBxdW90YSBzaHV0ZG93biAqL1xuJiM0MztcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcbiBcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xuIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXG4gXHRleHQ0X3JlbGVhc2Vfb3JwaGFuX2luZm8oc2IpO1xuQEAgLTU3NjcsNiAmIzQzOzU3NzksOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0aWYgKEVYVDRfU0Ioc2IpLVx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKVxuIFx0XHRkZXN0cm95X3dvcmtxdWV1ZShFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG4gZmFpbGVkX21vdW50X3dxOlxuJiM0MztcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cbiYjNDM7XHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yayk7XG4gXHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVx1MDAzZXNfZWFfaW5vZGVfY2FjaGUpO1xuIFx0c2JpLVx1MDAzZXNfZWFfaW5vZGVfY2FjaGUgPSBOVUxMO1xuIFxuQEAgLTU3NzcsNiAmIzQzOzU3OTEsOCBAQCBmYWlsZWRfbW91bnQ4OiBfX21heWJlX3VudXNlZFxuIFx0XHRleHQ0X2pvdXJuYWxfZGVzdHJveShzYmksIHNiaS1cdTAwM2VzX2pvdXJuYWwpO1xuIFx0fVxuIGZhaWxlZF9tb3VudDNhOlxuJiM0MztcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGZyb20gam91cm5hbCByZXBsYXkgKi9cbiYjNDM7XHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yayk7XG4gXHRleHQ0X2VzX3VucmVnaXN0ZXJfc2hyaW5rZXIoc2JpKTtcbiBmYWlsZWRfbW91bnQzOlxuIFx0LyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi9cbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmMgYi9mcy9leHQ0L3hhdHRyLmNcbmluZGV4IDk4MmExZjgzMWUyMjgyLi40YWU2Y2UxMTE1NjYwZSAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC94YXR0ci5jXG5AQCAtMTE0LDEwICYjNDM7MTE0LDYgQEAgY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBleHQ0X3hhdHRyX2hhbmRsZXJzW10gPSB7XG4gI2RlZmluZSBFQV9JTk9ERV9DQUNIRShpbm9kZSlcdCgoKHN0cnVjdCBleHQ0X3NiX2luZm8gKikgXFxcbiBcdFx0XHRcdGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19mc19pbmZvKS1cdTAwM2VzX2VhX2lub2RlX2NhY2hlKVxuIFxuLXN0YXRpYyBpbnRcbi1leHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuLVx0XHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuLVxuICNpZmRlZiBDT05GSUdfTE9DS0RFUFxuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9zZXRfY2xhc3Moc3RydWN0IGlub2RlICplYV9pbm9kZSlcbiB7XG5AQCAtNTY3LDcgJiM0Mzs1NjMsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZW50cnksXG4gXHRcdFx0XHRcdGVhX2lub2RlLVx1MDAzZWlfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTtcbiBcdH1cbiBvdXQ6XG4tXHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRyZXR1cm4gZXJyO1xuIH1cbiBcbkBAIC0xMTA0LDEwICYjNDM7MTEwMCwxMCBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGVyciA9IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZihoYW5kbGUsIGVhX2lub2RlKTtcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCYjMzQ7aW5jIHJlZiBlcnJvciAlZFwmIzM0OywgZXJyKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0XHRcdGdvdG8gY2xlYW51cDtcbiBcdFx0fVxuLVx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIFxuQEAgLTExMzMsNyAmIzQzOzExMjksNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIpXG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcJiMzNDtjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcJiMzNDssXG4gXHRcdFx0XHRcdCAgIGVycik7XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0fVxuIFx0cmV0dXJuIHNhdmVkX2VycjtcbiB9XG5AQCAtMTE2MCw3ICYjNDM7MTE1Niw2IEBAIHN0YXRpYyB2b2lkXG4gZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0XHQgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3QsIGJvb2wgYmxvY2tfY3N1bSxcbi1cdFx0XHQgICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0ICAgICBpbnQgZXh0cmFfY3JlZGl0cywgYm9vbCBza2lwX3F1b3RhKVxuIHtcbiBcdHN0cnVjdCBpbm9kZSAqZWFfaW5vZGU7XG5AQCAtMTE5NywxNCAmIzQzOzExOTIsNiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRlcnIgPSBleHQ0X2V4cGFuZF9pbm9kZV9hcnJheShlYV9pbm9kZV9hcnJheSwgZWFfaW5vZGUpO1xuLVx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuLVx0XHRcdFx0XHQgICBcJiMzNDtFeHBhbmQgaW5vZGUgYXJyYXkgZXJyPSVkXCYjMzQ7LCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuLVx0XHRcdGNvbnRpbnVlO1xuLVx0XHR9XG4tXG4gXHRcdGVyciA9IGV4dDRfam91cm5hbF9lbnN1cmVfY3JlZGl0c19mbihoYW5kbGUsIGNyZWRpdHMsIGNyZWRpdHMsXG4gXHRcdFx0ZXh0NF9mcmVlX21ldGFkYXRhX3Jldm9rZV9jcmVkaXRzKHBhcmVudC1cdTAwM2VpX3NiLCAxKSxcbiBcdFx0XHRleHQ0X3hhdHRyX3Jlc3RhcnRfZm4oaGFuZGxlLCBwYXJlbnQsIGJoLCBibG9ja19jc3VtLFxuQEAgLTEyMTIsNiAmIzQzOzExOTksNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcJiMzNDtFbnN1cmUgY3JlZGl0cyBlcnI9JWRcJiMzNDssXG4gXHRcdFx0XHRcdCAgIGVycik7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFx0XHRpZiAoZXJyIFx1MDAzZSAwKSB7XG5AQCAtMTIyMSw2ICYjNDM7MTIwOSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFx0XCYjMzQ7UmUtZ2V0IHdyaXRlIGFjY2VzcyBlcnI9JWRcJiMzNDssXG4gXHRcdFx0XHRcdFx0ZXJyKTtcbiYjNDM7XHRcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHR9XG4gXHRcdH1cbkBAIC0xMjI5LDYgJiM0MzsxMjE4LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVycikge1xuIFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXCYjMzQ7ZWFfaW5vZGUgZGVjIHJlZiBlcnI9JWRcJiMzNDssXG4gXHRcdFx0XHRcdCAgIGVycik7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFxuQEAgLTEyNDUsNiAmIzQzOzEyMzUsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRlbnRyeS1cdTAwM2VlX3ZhbHVlX2ludW0gPSAwO1xuIFx0XHRlbnRyeS1cdTAwM2VlX3ZhbHVlX3NpemUgPSAwO1xuIFxuJiM0MztcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0XHRkaXJ0eSA9IHRydWU7XG4gXHR9XG4gXG5AQCAtMTI3MSw3ICYjNDM7MTI2Miw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gc3RhdGljIHZvaWRcbiBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi1cdFx0XHQgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiBcdFx0XHQgaW50IGV4dHJhX2NyZWRpdHMpXG4ge1xuIFx0c3RydWN0IG1iX2NhY2hlICplYV9ibG9ja19jYWNoZSA9IEVBX0JMT0NLX0NBQ0hFKGlub2RlKTtcbkBAIC0xMzEzLDcgJiM0MzsxMzAzLDYgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBiaCxcbiBcdFx0XHRcdFx0XHQgICAgIEJGSVJTVChiaCksXG4gXHRcdFx0XHRcdFx0ICAgICB0cnVlIC8qIGJsb2NrX2NzdW0gKi8sXG4tXHRcdFx0XHRcdFx0ICAgICBlYV9pbm9kZV9hcnJheSxcbiBcdFx0XHRcdFx0XHQgICAgIGV4dHJhX2NyZWRpdHMsXG4gXHRcdFx0XHRcdFx0ICAgICB0cnVlIC8qIHNraXBfcXVvdGEgKi8pO1xuIFx0XHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGJoLCAwLCAxLFxuQEAgLTE1MDUsNyAmIzQzOzE0OTQsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdGlmIChleHQ0X3hhdHRyX2lub2RlX2RlY19yZWYoaGFuZGxlLCBlYV9pbm9kZSkpXG4gXHRcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFwmIzM0O2NsZWFudXAgZGVjIHJlZiBlcnJvciAlZFwmIzM0OywgZXJyKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0XHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4gXHRcdH1cbiBcbkBAIC0xNTY0LDcgJiM0MzsxNTUzLDcgQEAgZXh0NF94YXR0cl9pbm9kZV9jYWNoZV9maW5kKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGNvbnN0IHZvaWQgKnZhbHVlLFxuIFx0XHRcdGt2ZnJlZShlYV9kYXRhKTtcbiBcdFx0XHRyZXR1cm4gZWFfaW5vZGU7XG4gXHRcdH1cbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRuZXh0X2VudHJ5OlxuIFx0XHRjZSA9IG1iX2NhY2hlX2VudHJ5X2ZpbmRfbmV4dChlYV9pbm9kZV9jYWNoZSwgY2UpO1xuIFx0fVxuQEAgLTE2MTUsNyAmIzQzOzE2MDQsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcbiBcdFx0XHRcdCAgICAgIGVhX2lub2RlLVx1MDAzZWlfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTtcbiBcdHJldHVybiBlYV9pbm9kZTtcbiBvdXRfZXJyOlxuLVx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBOVUxMLCB2YWx1ZV9sZW4pO1xuIFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiB9XG5AQCAtMTg0OCw3ICYjNDM7MTgzNyw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSxcbiBcbiBcdHJldCA9IDA7XG4gb3V0OlxuLVx0aXB1dChvbGRfZWFfaW5vZGUpO1xuJiM0MztcdGV4dDRfcHV0X2VhX2lub2RlKG9sZF9lYV9pbm9kZSk7XG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbkBAIC0yMDEwLDcgJiM0MzsxOTk5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdG9sZF9lYV9pbm9kZV9xdW90YSA9IGxlMzJfdG9fY3B1KFxuIFx0XHRcdFx0XHRcdHMtXHUwMDNlaGVyZS1cdTAwM2VlX3ZhbHVlX3NpemUpO1xuIFx0XHRcdH1cbi1cdFx0XHRpcHV0KHRtcF9pbm9kZSk7XG4mIzQzO1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHRtcF9pbm9kZSk7XG4gXG4gXHRcdFx0cy1cdTAwM2VoZXJlLVx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XG4gXHRcdFx0cy1cdTAwM2VoZXJlLVx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XG5AQCAtMjE1MCw3ICYjNDM7MjEzOSw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHRcdCAgIFwmIzM0O2RlYyByZWYgZXJyb3I9JWRcJiMzNDssXG4gXHRcdFx0XHRcdFx0XHQgICBlcnJvcik7XG4tXHRcdFx0XHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRcdFx0XHRlYV9pbm9kZSA9IE5VTEw7XG4gXHRcdFx0fVxuIFxuQEAgLTIxODIsMTIgJiM0MzsyMTcxLDggQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBcdC8qIERyb3AgdGhlIHByZXZpb3VzIHhhdHRyIGJsb2NrLiAqL1xuIFx0aWYgKGJzLVx1MDAzZWJoIFx1MDAyNlx1MDAyNiBicy1cdTAwM2ViaCAhPSBuZXdfYmgpIHtcbi1cdFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDtcbi1cbiBcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJzLVx1MDAzZWJoLFxuLVx0XHRcdFx0XHQgXHUwMDI2ZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0XHRcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xuLVx0XHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0fVxuIFx0ZXJyb3IgPSAwO1xuIFxuQEAgLTIyMDMsNyAmIzQzOzIxODgsNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XG4gXHRcdH1cbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4mIzQzO1x0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHR9XG4gXHRpZiAoY2UpXG4gXHRcdG1iX2NhY2hlX2VudHJ5X3B1dChlYV9ibG9ja19jYWNoZSwgY2UpO1xuQEAgLTIyODUsNyAmIzQzOzIyNzAsNyBAQCBpbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdCAgICBpX3NpemVfcmVhZChlYV9pbm9kZSkpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIGVycm9yO1xuIFx0fVxuQEAgLTIyOTcsNyAmIzQzOzIyODIsNyBAQCBpbnQgZXh0NF94YXR0cl9pYm9keV9zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0aGVhZGVyLVx1MDAzZWhfbWFnaWMgPSBjcHVfdG9fbGUzMigwKTtcbiBcdFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUik7XG4gXHR9XG4tXHRpcHV0KGVhX2lub2RlKTtcbiYjNDM7XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRyZXR1cm4gMDtcbiB9XG4gXG5AQCAtMjg2Myw0NiAmIzQzOzI4NDgsNiBAQCBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tI2RlZmluZSBFSUFfSU5DUiAxNiAvKiBtdXN0IGJlIDJebiAqL1xuLSNkZWZpbmUgRUlBX01BU0sgKEVJQV9JTkNSIC0gMSlcbi1cbi0vKiBBZGQgdGhlIGxhcmdlIHhhdHRyIEBpbm9kZSBpbnRvIEBlYV9pbm9kZV9hcnJheSBmb3IgZGVmZXJyZWQgaXB1dCgpLlxuLSAqIElmIEBlYV9pbm9kZV9hcnJheSBpcyBuZXcgb3IgZnVsbCBpdCB3aWxsIGJlIGdyb3duIGFuZCB0aGUgb2xkXG4tICogY29udGVudHMgY29waWVkIG92ZXIuXG4tICovXG4tc3RhdGljIGludFxuLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4tXHRcdFx0c3RydWN0IGlub2RlICppbm9kZSlcbi17XG4tXHRpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpIHtcbi1cdFx0Lypcbi1cdFx0ICogU3RhcnQgd2l0aCAxNSBpbm9kZXMsIHNvIGl0IGZpdHMgaW50byBhIHBvd2VyLW9mLXR3byBzaXplLlxuLVx0XHQgKi9cbi1cdFx0KCplYV9pbm9kZV9hcnJheSkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxuLVx0XHRcdFx0XHRcdCBFSUFfTUFTSywgR0ZQX05PRlMpO1xuLVx0XHRpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdCgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50ID0gMDtcbi1cdH0gZWxzZSBpZiAoKCgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50IFx1MDAyNiBFSUFfTUFTSykgPT0gRUlBX01BU0spIHtcbi1cdFx0LyogZXhwYW5kIHRoZSBhcnJheSBvbmNlIGFsbCAxNSAmIzQzOyBuICogMTYgc2xvdHMgYXJlIGZ1bGwgKi9cbi1cdFx0c3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKm5ld19hcnJheSA9IE5VTEw7XG4tXG4tXHRcdG5ld19hcnJheSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXG4tXHRcdFx0XHRcdCAoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vjb3VudCAmIzQzOyBFSUFfSU5DUixcbi1cdFx0XHRcdFx0IEdGUF9OT0ZTKTtcbi1cdFx0aWYgKG5ld19hcnJheSA9PSBOVUxMKVxuLVx0XHRcdHJldHVybiAtRU5PTUVNO1xuLVx0XHRtZW1jcHkobmV3X2FycmF5LCAqZWFfaW5vZGVfYXJyYXksXG4tXHRcdCAgICAgICBzdHJ1Y3Rfc2l6ZSgqZWFfaW5vZGVfYXJyYXksIGlub2Rlcyxcbi1cdFx0XHRcdCAgICgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50KSk7XG4tXHRcdGtmcmVlKCplYV9pbm9kZV9hcnJheSk7XG4tXHRcdCplYV9pbm9kZV9hcnJheSA9IG5ld19hcnJheTtcbi1cdH1cbi1cdCgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50JiM0MzsmIzQzOztcbi1cdCgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWlub2Rlc1soKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vjb3VudCAtIDFdID0gaW5vZGU7XG4tXHRyZXR1cm4gMDtcbi19XG4tXG4gLypcbiAgKiBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSgpXG4gICpcbkBAIC0yOTEzLDcgJiM0MzsyODU4LDYgQEAgZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbiAgKiByZWZlcmVuY2VzIG9uIHhhdHRyIGJsb2NrIGFuZCB4YXR0ciBpbm9kZXMuXG4gICovXG4gaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tXHRcdFx0ICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0ICAgIGludCBleHRyYV9jcmVkaXRzKVxuIHtcbiBcdHN0cnVjdCBidWZmZXJfaGVhZCAqYmggPSBOVUxMO1xuQEAgLTI5NTIsNyAmIzQzOzI4OTYsNiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGlsb2MuYmgsXG4gXHRcdFx0XHRcdFx0ICAgICBJRklSU1QoaGVhZGVyKSxcbiBcdFx0XHRcdFx0XHQgICAgIGZhbHNlIC8qIGJsb2NrX2NzdW0gKi8sXG4tXHRcdFx0XHRcdFx0ICAgICBlYV9pbm9kZV9hcnJheSxcbiBcdFx0XHRcdFx0XHQgICAgIGV4dHJhX2NyZWRpdHMsXG4gXHRcdFx0XHRcdFx0ICAgICBmYWxzZSAvKiBza2lwX3F1b3RhICovKTtcbiBcdH1cbkBAIC0yOTg2LDEyICYjNDM7MjkyOSwxMiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdFx0Y29udGludWU7XG4gXHRcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLFxuIFx0XHRcdFx0XHQgICAgICBsZTMyX3RvX2NwdShlbnRyeS1cdTAwM2VlX3ZhbHVlX3NpemUpKTtcbi1cdFx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuJiM0MztcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHR9XG4gXG4gXHRcdH1cbiBcbi1cdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLCBlYV9pbm9kZV9hcnJheSxcbiYjNDM7XHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcbiBcdFx0XHRcdFx0IGV4dHJhX2NyZWRpdHMpO1xuIFx0XHQvKlxuIFx0XHQgKiBVcGRhdGUgaV9maWxlX2FjbCB2YWx1ZSBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiB0aGF0IHJlbGVhc2VzXG5AQCAtMzAxMywxNiAmIzQzOzI5NTYsNjMgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRyZXR1cm4gZXJyb3I7XG4gfVxuIFxuLXZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSlcbiYjNDM7LypcbiYjNDM7ICogV29ya2VyIGZ1bmN0aW9uIGZvciBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0LiAgUHJvY2Vzc2VzIGFsbCBpbm9kZXMgcXVldWVkXG4mIzQzOyAqIG9uIHNfZWFfaW5vZGVfdG9fZnJlZSBpbiBhIGNvbnRleHQgZnJlZSBvZiB4YXR0cl9zZW0vamJkMiBoYW5kbGUgbG9ja3MuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBleHQ0X2VhX2lub2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbi1cdGludCBpZHg7XG4mIzQzO1x0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSxcbiYjNDM7XHRcdFx0XHRcdFx0c3RydWN0IGV4dDRfc2JfaW5mbyxcbiYjNDM7XHRcdFx0XHRcdFx0c19lYV9pbm9kZV93b3JrKTtcbiYjNDM7XHRzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSA9IGxsaXN0X2RlbF9hbGwoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XG4gXG4tXHRpZiAoZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcbiYjNDM7XHR3aGlsZSAobm9kZSkge1xuJiM0MztcdFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBjb250YWluZXJfb2Yobm9kZSxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8sIGlfZWFfaXB1dF9ub2RlKTtcbiYjNDM7XHRcdG5vZGUgPSBub2RlLVx1MDAzZW5leHQ7XG4mIzQzO1x0XHRpcHV0KFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBSZWxlYXNlIGEgVkZTIHJlZmVyZW5jZSBvbiBhbiBFQSBpbm9kZS4gIE11c3QgYmUgdXNlZCBpbnN0ZWFkIG9mIGlwdXQoKVxuJiM0MzsgKiBpbiBhbnkgY29udGV4dCB3aGVyZSB4YXR0cl9zZW0gb3IgYSBqYmQyIGhhbmRsZSBpcyBoZWxkLlxuJiM0MzsgKlxuJiM0MzsgKiBJZiB0aGlzIGlzIG5vdCB0aGUgbGFzdCByZWZlcmVuY2UsIGRyb3BzIGl0IGltbWVkaWF0ZWx5IHZpYVxuJiM0MzsgKiBpcHV0X2lmX25vdF9sYXN0KCkgd2l0aCBubyBmdXJ0aGVyIGFjdGlvbiBuZWVkZWQuXG4mIzQzOyAqXG4mIzQzOyAqIElmIHRoaXMgaXMgdGhlIGxhc3QgcmVmZXJlbmNlLCB0aGUgaW5vZGUgaXMgbGlua2VkIG9udG8gYSBwZXItc2JcbiYjNDM7ICogbGxpc3QgdmlhIGlfZWFfaXB1dF9ub2RlIChlbWJlZGRlZCBpbiBleHQ0X2lub2RlX2luZm8sIHNoYXJpbmcgc3BhY2VcbiYjNDM7ICogd2l0aCB0aGUgdW51c2VkIHhhdHRyX3NlbSkgYW5kIGEgZGVsYXllZCB3b3JrZXIgcGVyZm9ybXMgdGhlIGZpbmFsXG4mIzQzOyAqIGlwdXQoKSBpbiBhIGNsZWFuIGNvbnRleHQuXG4mIzQzOyAqXG4mIzQzOyAqIE5vdGU6IHdoaWxlIGFuIGlub2RlIGlzIG9uIHNfZWFfaW5vZGVfdG9fZnJlZSwgdGhlIHVuY29uc3VtZWQgaV9jb3VudFxuJiM0MzsgKiByZWZlcmVuY2UgKHN0aWxsIDEpIGtlZXBzIGl0IGluIHRoZSBpbm9kZSBjYWNoZSwgc28gYW55IGNvbmN1cnJlbnRcbiYjNDM7ICogaWdldCgpIGJ1bXBzIGlfY291bnQgdG8gXHUwMDNlPSAyIGFuZCBpcHV0X2lmX25vdF9sYXN0KCkgd2lsbCBzdWNjZWVkLlxuJiM0MzsgKiBOb2JvZHkgd2lsbCBhZGQgdGhlIGlub2RlIGEgc2Vjb25kIHRpbWUgdW50aWwgZXh0NF9lYV9pbm9kZV93b3JrKClcbiYjNDM7ICogZHJvcHMgdGhhdCByZWZlcmVuY2UgdmlhIGlwdXQoKS5cbiYjNDM7ICovXG4mIzQzO3ZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdGlmICghaW5vZGUpXG4mIzQzO1x0XHRyZXR1cm47XG4mIzQzO1x0V0FSTl9PTl9PTkNFKCEoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSk7XG4mIzQzO1x0aWYgKGlwdXRfaWZfbm90X2xhc3QoaW5vZGUpKVxuIFx0XHRyZXR1cm47XG4mIzQzO1x0bGxpc3RfYWRkKFx1MDAyNkVYVDRfSShpbm9kZSktXHUwMDNlaV9lYV9pcHV0X25vZGUsXG4mIzQzO1x0XHQgIFx1MDAyNkVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFVzZSBhIHNob3J0IGRlbGF5IHRvIGFsbG93IG11bHRpcGxlIEVBIGlub2RlcyB0byBhY2N1bXVsYXRlLFxuJiM0MztcdCAqIHJlZHVjaW5nIHdvcmtxdWV1ZSB3YWtldXBzIHdoZW4gc2V2ZXJhbCBhcmUgcmVsZWFzZWQgdG9nZXRoZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0c2NoZWR1bGVfZGVsYXllZF93b3JrKFx1MDAyNkVYVDRfU0IoaW5vZGUtXHUwMDNlaV9zYiktXHUwMDNlc19lYV9pbm9kZV93b3JrLCAxKTtcbiYjNDM7fVxuIFxuLVx0Zm9yIChpZHggPSAwOyBpZHggXHUwMDNjIGVhX2lub2RlX2FycmF5LVx1MDAzZWNvdW50OyAmIzQzOyYjNDM7aWR4KVxuLVx0XHRpcHV0KGVhX2lub2RlX2FycmF5LVx1MDAzZWlub2Rlc1tpZHhdKTtcbi1cdGtmcmVlKGVhX2lub2RlX2FycmF5KTtcbiYjNDM7dm9pZCBleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpXG4mIzQzO3tcbiYjNDM7XHRpbml0X2xsaXN0X2hlYWQoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XG4mIzQzO1x0SU5JVF9ERUxBWUVEX1dPUksoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yaywgZXh0NF9lYV9pbm9kZV93b3JrKTtcbiB9XG4gXG4gLypcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3hhdHRyLmggYi9mcy9leHQ0L3hhdHRyLmhcbmluZGV4IDFmZWRmNDRkNGZiNjVlLi44MjFkYzZhNTBlNTFlNyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQveGF0dHIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZnMvZXh0NC94YXR0ci5oXG5AQCAtMTMxLDExICYjNDM7MTMxLDYgQEAgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCB7XG4gXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4gfTtcbiBcbi1zdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSB7XG4tXHR1bnNpZ25lZCBpbnQgY291bnQ7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2Rlc1tdIF9fY291bnRlZF9ieShjb3VudCk7XG4tfTtcbi1cbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXI7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXI7XG5AQCAtMTg3LDkgJiM0MzsxODIsOSBAQCBleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0Ym9vbCBpc19jcmVhdGUpO1xuIFxuIGV4dGVybiBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi1cdFx0XHRcdCAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqYXJyYXksXG4gXHRcdFx0XHQgICBpbnQgZXh0cmFfY3JlZGl0cyk7XG4tZXh0ZXJuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICphcnJheSk7XG4mIzQzO2V4dGVybiB2b2lkIGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrKHN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSk7XG4mIzQzO2V4dGVybiB2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFxuIGV4dGVybiBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbiBcdFx0XHQgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCBkMTA4OTdiM2ExZTM1MC4uNzA5NTE5NjE3YzdhMzggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaFxuQEAgLTI0MTMsNiAmIzQzOzI0MTMsMjEgQEAgc3RhdGljIGlubGluZSB2b2lkIHN1cGVyX3NldF9zeXNmc19uYW1lX2dlbmVyaWMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgY29uc3QgY2hcbiBleHRlcm4gdm9pZCBpaG9sZChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7XG4gZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7XG4gdm9pZCBpcHV0X25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqKTtcbiYjNDM7XG4mIzQzOy8qKlxuJiM0MzsgKiBpcHV0X2lmX25vdF9sYXN0IC0gZHJvcCBhbiBpbm9kZSByZWZlcmVuY2Ugb25seSBpZiBpdCBpcyBub3QgdGhlIGxhc3Qgb25lXG4mIzQzOyAqIEBpbm9kZTogaW5vZGUgdG8gcHV0XG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcmVmZXJlbmNlIHdhcyBkcm9wcGVkLCBmYWxzZSBpZiB0aGlzIHdhcyB0aGUgbGFzdFxuJiM0MzsgKiByZWZlcmVuY2UgYW5kIHRoZSBjYWxsZXIgbXVzdCBhcnJhbmdlIGZvciBmaW5hbCBpcHV0KCkgaW4gYSBzYWZlIGNvbnRleHQuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGlwdXRfaWZfbm90X2xhc3Qoc3RydWN0IGlub2RlICppbm9kZSlcbiYjNDM7e1xuJiM0MztcdFZGU19CVUdfT05fSU5PREUoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgKElfRlJFRUlORyB8IElfQ0xFQVIpLCBpbm9kZSk7XG4mIzQzO1x0VkZTX0JVR19PTl9JTk9ERShpY291bnRfcmVhZF9vbmNlKGlub2RlKSBcdTAwM2MgMSwgaW5vZGUpO1xuJiM0MztcdHJldHVybiBhdG9taWNfYWRkX3VubGVzcyhcdTAwMjZpbm9kZS1cdTAwM2VpX2NvdW50LCAtMSwgMSk7XG4mIzQzO31cbiYjNDM7XG4gaW50IGlub2RlX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSxcbiBcdFx0dW5zaWduZWQgaW50IGZsYWdzKTtcbiBpbnQgZ2VuZXJpY191cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTA8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfeGF0dHJfZGVsZXRlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfYmxvY2tfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaWJvZHlfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfcHV0X2VhX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfZWFfaW5vZGVfd29yayYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2smIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleHQ0JiMzOTtzIGhhbmRsaW5nIG9mIEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIGlub2RlcyBieSBpbnRyb2R1Y2luZyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBJdCByZXBsYWNlcyB0aGUgYGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlgIHdpdGggYSBsb2NrbGVzcyBsaXN0IGFuZCBhIGRlbGF5ZWQgd29ya3F1ZXVlIChgZXh0NF9lYV9pbm9kZV93b3JrYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGRlYWRsb2NrcyBvY2N1ciBkdXJpbmcgRUEgaW5vZGUgZXZpY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGRhZTc2MmIyYWMzOTM3MzQ2NzE5ZmYyZmU5M2RiZDhhYzYyZGIxODUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IEp1bCAyIDE4OjEwOjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9leHQ0LmggYi9mcy9leHQ0L2V4dDQuaAppbmRleCBiMzdjMTM2ZWEzYWIzMy4uYjliMGFkYTc3NzRiYjQgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQvZXh0NC5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvZXh0NC5oCkBAIC0xMDcwLDggJiM0MzsxMDcwLDE0IEBAIHN0cnVjdCBleHQ0X2lub2RlX2luZm8gewogCSAqIGJldHdlZW4gcmVhZGVycyBvZiBFQXMgYW5kIHdyaXRlcnMgb2YgcmVndWxhciBmaWxlIGRhdGEsIHNvCiAJICogaW5zdGVhZCB3ZSBzeW5jaHJvbml6ZSBvbiB4YXR0cl9zZW0gd2hlbiByZWFkaW5nIG9yIGNoYW5naW5nCiAJICogRUFzLgomIzQzOwkgKgomIzQzOwkgKiBFQSBpbm9kZXMgKEVYVDRfRUFfSU5PREVfRkwpIGRvIG5vdCB1c2UgeGF0dHJfc2VtOyB0aGV5IHJldXNlCiYjNDM7CSAqIHRoZSBzcGFjZSBmb3IgZGVmZXJyZWQgaXB1dCBsaW5rYWdlLgogCSAqLwotCXN0cnVjdCByd19zZW1hcGhvcmUgeGF0dHJfc2VtOwomIzQzOwl1bmlvbiB7CiYjNDM7CQlzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTsKJiM0MzsJCXN0cnVjdCBsbGlzdF9ub2RlIGlfZWFfaXB1dF9ub2RlOwomIzQzOwl9OwogCiAJLyoKIAkgKiBJbm9kZXMgd2l0aCBFWFQ0X1NUQVRFX09SUEhBTl9GSUxFIHVzZSBpX29ycGhhbl9pZHguIE90aGVyd2lzZQpAQCAtMTc3MCw2ICYjNDM7MTc3NiwxMSBAQCBzdHJ1Y3QgZXh0NF9zYl9pbmZvIHsKIAlzdHJ1Y3QgZXh0NF9lc19zdGF0cyBzX2VzX3N0YXRzOwogCXN0cnVjdCBtYl9jYWNoZSAqc19lYV9ibG9ja19jYWNoZTsKIAlzdHJ1Y3QgbWJfY2FjaGUgKnNfZWFfaW5vZGVfY2FjaGU7CiYjNDM7CiYjNDM7CS8qIERlZmVycmVkIGlwdXQgZm9yIEVBIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyAqLwomIzQzOwlzdHJ1Y3QgbGxpc3RfaGVhZCBzX2VhX2lub2RlX3RvX2ZyZWU7CiYjNDM7CXN0cnVjdCBkZWxheWVkX3dvcmsgc19lYV9pbm9kZV93b3JrOwomIzQzOwogCXNwaW5sb2NrX3Qgc19lc19sb2NrIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiAKIAkvKiBKb3VybmFsIHRyaWdnZXJzIGZvciBjaGVja3N1bSBjb21wdXRhdGlvbiAqLwpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jCmluZGV4IGNlOTk4MDdjNWY1YjJjLi43NDdjNTJjMjMyY2MwMyAxMDA2NDQKLS0tIGEvZnMvZXh0NC9pbm9kZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvaW5vZGUuYwpAQCAtMTc2LDcgJiM0MzsxNzYsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAkgKiAoeGF0dHIgYmxvY2sgZnJlZWluZyksIGJpdG1hcCwgZ3JvdXAgZGVzY3JpcHRvciAoaW5vZGUgZnJlZWluZykKIAkgKi8KIAlpbnQgZXh0cmFfY3JlZGl0cyA9IDY7Ci0Jc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDsKIAlib29sIGZyZWV6ZV9wcm90ZWN0ZWQgPSBmYWxzZTsKIAogCXRyYWNlX2V4dDRfZXZpY3RfaW5vZGUoaW5vZGUpOwpAQCAtMjgxLDggJiM0MzsyODAsNyBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAl9CiAKIAkvKiBSZW1vdmUgeGF0dHIgcmVmZXJlbmNlcy4gKi8KLQllcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCAmYW1wO2VhX2lub2RlX2FycmF5LAotCQkJCSAgICAgIGV4dHJhX2NyZWRpdHMpOwomIzQzOwllcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBleHRyYV9jcmVkaXRzKTsKIAlpZiAoZXJyKSB7CiAJCWV4dDRfd2FybmluZyhpbm9kZS0mZ3Q7aV9zYiwgJiMzNDt4YXR0ciBkZWxldGUgKGVyciAlZCkmIzM0OywgZXJyKTsKIHN0b3BfaGFuZGxlOgpAQCAtMjkwLDcgJiM0MzsyODgsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSkKIAkJZXh0NF9vcnBoYW5fZGVsKE5VTEwsIGlub2RlKTsKIAkJaWYgKGZyZWV6ZV9wcm90ZWN0ZWQpCiAJCQlzYl9lbmRfaW50d3JpdGUoaW5vZGUtJmd0O2lfc2IpOwotCQlleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpOwogCQlnb3RvIG5vX2RlbGV0ZTsKIAl9CiAKQEAgLTMyMCw3ICYjNDM7MzE3LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiAJZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTsKIAlpZiAoZnJlZXplX3Byb3RlY3RlZCkKIAkJc2JfZW5kX2ludHdyaXRlKGlub2RlLSZndDtpX3NiKTsKLQlleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpOwogCXJldHVybjsKIG5vX2RlbGV0ZToKIAkvKgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jCmluZGV4IDI0NWY2N2QxMGRlZDM0Li4zZWZhNWE4MTdiZWY0ZiAxMDA2NDQKLS0tIGEvZnMvZXh0NC9zdXBlci5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQvc3VwZXIuYwpAQCAtMTMwMyw2ICYjNDM7MTMwMyw4IEBAIHN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpCiAJCQkgJmFtcDtzYi0mZ3Q7c191dWlkKTsKIAogCWV4dDRfdW5yZWdpc3Rlcl9saV9yZXF1ZXN0KHNiKTsKJiM0MzsJLyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgd2hpbGUgcXVvdGEgaXMgc3RpbGwgYWN0aXZlLiAqLwomIzQzOwlmbHVzaF9kZWxheWVkX3dvcmsoJmFtcDtzYmktJmd0O3NfZWFfaW5vZGVfd29yayk7CiAJZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7CiAKIAlkZXN0cm95X3dvcmtxdWV1ZShzYmktJmd0O3Jzdl9jb252ZXJzaW9uX3dxKTsKQEAgLTE0MjMsNiAmIzQzOzE0MjUsMTMgQEAgc3RhdGljIHN0cnVjdCBpbm9kZSAqZXh0NF9hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCW1lbXNldCgmYW1wO2VpLSZndDtpX2RxdW90LCAwLCBzaXplb2YoZWktJmd0O2lfZHF1b3QpKTsKICNlbmRpZgogCWVpLSZndDtqaW5vZGUgPSBOVUxMOwomIzQzOwkvKgomIzQzOwkgKiBSZWluaXRpYWxpemUgeGF0dHJfc2VtIGV2ZXJ5IGFsbG9jYXRpb24gYmVjYXVzZSBFQSBpbm9kZXMKJiM0MzsJICogc2hhcmUgdGhpcyBzcGFjZSB3aXRoIGlfZWFfaXB1dF9ub2RlICh2aWEgdW5pb24pIHdoaWNoIG1heQomIzQzOwkgKiBoYXZlIG92ZXJ3cml0dGVuIHRoZSBzZW1hcGhvcmUgd2hlbiB0aGUgc2xhYiBvYmplY3Qgd2FzCiYjNDM7CSAqIHByZXZpb3VzbHkgdXNlZCBhcyBhbiBFQSBpbm9kZS4KJiM0MzsJICovCiYjNDM7CWluaXRfcndzZW0oJmFtcDtlaS0mZ3Q7eGF0dHJfc2VtKTsKIAlJTklUX0xJU1RfSEVBRCgmYW1wO2VpLSZndDtpX3Jzdl9jb252ZXJzaW9uX2xpc3QpOwogCXNwaW5fbG9ja19pbml0KCZhbXA7ZWktJmd0O2lfY29tcGxldGVkX2lvX2xvY2spOwogCWVpLSZndDtpX3N5bmNfdGlkID0gMDsKQEAgLTE0ODgsNyAmIzQzOzE0OTcsNiBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKQogCXN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gZm9vOwogCiAJSU5JVF9MSVNUX0hFQUQoJmFtcDtlaS0mZ3Q7aV9vcnBoYW4pOwotCWluaXRfcndzZW0oJmFtcDtlaS0mZ3Q7eGF0dHJfc2VtKTsKIAlpbml0X3J3c2VtKCZhbXA7ZWktJmd0O2lfZGF0YV9zZW0pOwogCWlub2RlX2luaXRfb25jZSgmYW1wO2VpLSZndDt2ZnNfaW5vZGUpOwogCWV4dDRfZmNfaW5pdF9pbm9kZSgmYW1wO2VpLSZndDt2ZnNfaW5vZGUpOwpAQCAtNTQ5Nyw2ICYjNDM7NTUwNSw4IEBAIHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCQkJICBleHQ0X2hhc19mZWF0dXJlX29ycGhhbl9wcmVzZW50KHNiKSB8fAogCQkJICBleHQ0X2hhc19mZWF0dXJlX2pvdXJuYWxfbmVlZHNfcmVjb3Zlcnkoc2IpKTsKIAomIzQzOwlleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzYmkpOwomIzQzOwogCWlmIChleHQ0X2hhc19mZWF0dXJlX21tcChzYikgJmFtcDsmYW1wOyAhc2JfcmRvbmx5KHNiKSkgewogCQllcnIgPSBleHQ0X211bHRpX21vdW50X3Byb3RlY3Qoc2IsIGxlNjRfdG9fY3B1KGVzLSZndDtzX21tcF9ibG9jaykpOwogCQlpZiAoZXJyKQpAQCAtNTc0Nyw2ICYjNDM7NTc1Nyw4IEBAIHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQogCXJldHVybiAwOwogCiBmYWlsZWRfbW91bnQ5OgomIzQzOwkvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgcXVvdGEgc2h1dGRvd24gKi8KJiM0MzsJZmx1c2hfZGVsYXllZF93b3JrKCZhbXA7c2JpLSZndDtzX2VhX2lub2RlX3dvcmspOwogCWV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpOwogZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWQKIAlleHQ0X3JlbGVhc2Vfb3JwaGFuX2luZm8oc2IpOwpAQCAtNTc2Nyw2ICYjNDM7NTc3OSw4IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkCiAJaWYgKEVYVDRfU0Ioc2IpLSZndDtyc3ZfY29udmVyc2lvbl93cSkKIAkJZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktJmd0O3Jzdl9jb252ZXJzaW9uX3dxKTsKIGZhaWxlZF9tb3VudF93cToKJiM0MzsJLyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIGZyZWVpbmcgc3RydWN0dXJlcyAqLwomIzQzOwlmbHVzaF9kZWxheWVkX3dvcmsoJmFtcDtzYmktJmd0O3NfZWFfaW5vZGVfd29yayk7CiAJZXh0NF94YXR0cl9kZXN0cm95X2NhY2hlKHNiaS0mZ3Q7c19lYV9pbm9kZV9jYWNoZSk7CiAJc2JpLSZndDtzX2VhX2lub2RlX2NhY2hlID0gTlVMTDsKIApAQCAtNTc3Nyw2ICYjNDM7NTc5MSw4IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkCiAJCWV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLSZndDtzX2pvdXJuYWwpOwogCX0KIGZhaWxlZF9tb3VudDNhOgomIzQzOwkvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBmcm9tIGpvdXJuYWwgcmVwbGF5ICovCiYjNDM7CWZsdXNoX2RlbGF5ZWRfd29yaygmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV93b3JrKTsKIAlleHQ0X2VzX3VucmVnaXN0ZXJfc2hyaW5rZXIoc2JpKTsKIGZhaWxlZF9tb3VudDM6CiAJLyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi8KZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuYwppbmRleCA5ODJhMWY4MzFlMjI4Mi4uNGFlNmNlMTExNTY2MGUgMTAwNjQ0Ci0tLSBhL2ZzL2V4dDQveGF0dHIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leHQ0L3hhdHRyLmMKQEAgLTExNCwxMCAmIzQzOzExNCw2IEBAIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyc1tdID0gewogI2RlZmluZSBFQV9JTk9ERV9DQUNIRShpbm9kZSkJKCgoc3RydWN0IGV4dDRfc2JfaW5mbyAqKSBcCiAJCQkJaW5vZGUtJmd0O2lfc2ItJmd0O3NfZnNfaW5mbyktJmd0O3NfZWFfaW5vZGVfY2FjaGUpCiAKLXN0YXRpYyBpbnQKLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCi0JCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKLQogI2lmZGVmIENPTkZJR19MT0NLREVQCiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpCiB7CkBAIC01NjcsNyAmIzQzOzU2Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZ2V0KHN0cnVjdCBpbm9kZSAqaW5vZGUsIHN0cnVjdCBleHQ0X3hhdHRyX2VudHJ5ICplbnRyeSwKIAkJCQkJZWFfaW5vZGUtJmd0O2lfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTsKIAl9CiBvdXQ6Ci0JaXB1dChlYV9pbm9kZSk7CiYjNDM7CWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAlyZXR1cm4gZXJyOwogfQogCkBAIC0xMTA0LDEwICYjNDM7MTEwMCwxMCBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWVyciA9IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZihoYW5kbGUsIGVhX2lub2RlKTsKIAkJaWYgKGVycikgewogCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCAmIzM0O2luYyByZWYgZXJyb3IgJWQmIzM0OywgZXJyKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJCWdvdG8gY2xlYW51cDsKIAkJfQotCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAl9CiAJcmV0dXJuIDA7CiAKQEAgLTExMzMsNyAmIzQzOzExMjksNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWlmIChlcnIpCiAJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsICYjMzQ7Y2xlYW51cCBkZWMgcmVmIGVycm9yICVkJiMzNDssCiAJCQkJCSAgIGVycik7Ci0JCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpOwogCX0KIAlyZXR1cm4gc2F2ZWRfZXJyOwogfQpAQCAtMTE2MCw3ICYjNDM7MTE1Niw2IEBAIHN0YXRpYyB2b2lkCiBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQkJICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLAogCQkJICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3QsIGJvb2wgYmxvY2tfY3N1bSwKLQkJCSAgICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSwKIAkJCSAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSkKIHsKIAlzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlOwpAQCAtMTE5NywxNCAmIzQzOzExOTIsNiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQlpZiAoZXJyKQogCQkJY29udGludWU7CiAKLQkJZXJyID0gZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoZWFfaW5vZGVfYXJyYXksIGVhX2lub2RlKTsKLQkJaWYgKGVycikgewotCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLAotCQkJCQkgICAmIzM0O0V4cGFuZCBpbm9kZSBhcnJheSBlcnI9JWQmIzM0OywgZXJyKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwotCQkJY29udGludWU7Ci0JCX0KLQogCQllcnIgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNfZm4oaGFuZGxlLCBjcmVkaXRzLCBjcmVkaXRzLAogCQkJZXh0NF9mcmVlX21ldGFkYXRhX3Jldm9rZV9jcmVkaXRzKHBhcmVudC0mZ3Q7aV9zYiwgMSksCiAJCQlleHQ0X3hhdHRyX3Jlc3RhcnRfZm4oaGFuZGxlLCBwYXJlbnQsIGJoLCBibG9ja19jc3VtLApAQCAtMTIxMiw2ICYjNDM7MTE5OSw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWlmIChlcnIgJmx0OyAwKSB7CiAJCQlleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsICYjMzQ7RW5zdXJlIGNyZWRpdHMgZXJyPSVkJiMzNDssCiAJCQkJCSAgIGVycik7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpOwogCQkJY29udGludWU7CiAJCX0KIAkJaWYgKGVyciAmZ3Q7IDApIHsKQEAgLTEyMjEsNiAmIzQzOzEyMDksNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwKIAkJCQkJCSYjMzQ7UmUtZ2V0IHdyaXRlIGFjY2VzcyBlcnI9JWQmIzM0OywKIAkJCQkJCWVycik7CiYjNDM7CQkJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJCQljb250aW51ZTsKIAkJCX0KIAkJfQpAQCAtMTIyOSw2ICYjNDM7MTIxOCw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiAJCWlmIChlcnIpIHsKIAkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgJiMzNDtlYV9pbm9kZSBkZWMgcmVmIGVycj0lZCYjMzQ7LAogCQkJCQkgICBlcnIpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJCWNvbnRpbnVlOwogCQl9CiAKQEAgLTEyNDUsNiAmIzQzOzEyMzUsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LAogCQllbnRyeS0mZ3Q7ZV92YWx1ZV9pbnVtID0gMDsKIAkJZW50cnktJmd0O2VfdmFsdWVfc2l6ZSA9IDA7CiAKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJZGlydHkgPSB0cnVlOwogCX0KIApAQCAtMTI3MSw3ICYjNDM7MTI2Miw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsCiBzdGF0aWMgdm9pZAogZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwKLQkJCSBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LAogCQkJIGludCBleHRyYV9jcmVkaXRzKQogewogCXN0cnVjdCBtYl9jYWNoZSAqZWFfYmxvY2tfY2FjaGUgPSBFQV9CTE9DS19DQUNIRShpbm9kZSk7CkBAIC0xMzEzLDcgJiM0MzsxMzAzLDYgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLAogCQkJCQkJICAgICBCRklSU1QoYmgpLAogCQkJCQkJICAgICB0cnVlIC8qIGJsb2NrX2NzdW0gKi8sCi0JCQkJCQkgICAgIGVhX2lub2RlX2FycmF5LAogCQkJCQkJICAgICBleHRyYV9jcmVkaXRzLAogCQkJCQkJICAgICB0cnVlIC8qIHNraXBfcXVvdGEgKi8pOwogCQlleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGJoLCAwLCAxLApAQCAtMTUwNSw3ICYjNDM7MTQ5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsCiAJCQlpZiAoZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpKQogCQkJCWV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwKIAkJCQkJJiMzNDtjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWQmIzM0OywgZXJyKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJCXJldHVybiBFUlJfUFRSKGVycik7CiAJCX0KIApAQCAtMTU2NCw3ICYjNDM7MTU1Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSwKIAkJCWt2ZnJlZShlYV9kYXRhKTsKIAkJCXJldHVybiBlYV9pbm9kZTsKIAkJfQotCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAluZXh0X2VudHJ5OgogCQljZSA9IG1iX2NhY2hlX2VudHJ5X2ZpbmRfbmV4dChlYV9pbm9kZV9jYWNoZSwgY2UpOwogCX0KQEAgLTE2MTUsNyAmIzQzOzE2MDQsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSwKIAkJCQkgICAgICBlYV9pbm9kZS0mZ3Q7aV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pOwogCXJldHVybiBlYV9pbm9kZTsKIG91dF9lcnI6Ci0JaXB1dChlYV9pbm9kZSk7CiYjNDM7CWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAlleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIE5VTEwsIHZhbHVlX2xlbik7CiAJcmV0dXJuIEVSUl9QVFIoZXJyKTsKIH0KQEAgLTE4NDgsNyAmIzQzOzE4MzcsNyBAQCBzdGF0aWMgaW50IGV4dDRfeGF0dHJfc2V0X2VudHJ5KHN0cnVjdCBleHQ0X3hhdHRyX2luZm8gKmksCiAKIAlyZXQgPSAwOwogb3V0OgotCWlwdXQob2xkX2VhX2lub2RlKTsKJiM0MzsJZXh0NF9wdXRfZWFfaW5vZGUob2xkX2VhX2lub2RlKTsKIAlyZXR1cm4gcmV0OwogfQogCkBAIC0yMDEwLDcgJiM0MzsxOTk5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQlvbGRfZWFfaW5vZGVfcXVvdGEgPSBsZTMyX3RvX2NwdSgKIAkJCQkJCXMtJmd0O2hlcmUtJmd0O2VfdmFsdWVfc2l6ZSk7CiAJCQl9Ci0JCQlpcHV0KHRtcF9pbm9kZSk7CiYjNDM7CQkJZXh0NF9wdXRfZWFfaW5vZGUodG1wX2lub2RlKTsKIAogCQkJcy0mZ3Q7aGVyZS0mZ3Q7ZV92YWx1ZV9pbnVtID0gMDsKIAkJCXMtJmd0O2hlcmUtJmd0O2VfdmFsdWVfc2l6ZSA9IDA7CkBAIC0yMTUwLDcgJiM0MzsyMTM5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSwKIAkJCQkJZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLAogCQkJCQkJCSAgICYjMzQ7ZGVjIHJlZiBlcnJvcj0lZCYjMzQ7LAogCQkJCQkJCSAgIGVycm9yKTsKLQkJCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCQkJZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpOwogCQkJCWVhX2lub2RlID0gTlVMTDsKIAkJCX0KIApAQCAtMjE4MiwxMiAmIzQzOzIxNzEsOCBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCiAJLyogRHJvcCB0aGUgcHJldmlvdXMgeGF0dHIgYmxvY2suICovCiAJaWYgKGJzLSZndDtiaCAmYW1wOyZhbXA7IGJzLSZndDtiaCAhPSBuZXdfYmgpIHsKLQkJc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5ID0gTlVMTDsKLQogCQlleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYnMtJmd0O2JoLAotCQkJCQkgJmFtcDtlYV9pbm9kZV9hcnJheSwKIAkJCQkJIDAgLyogZXh0cmFfY3JlZGl0cyAqLyk7Ci0JCWV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7CiAJfQogCWVycm9yID0gMDsKIApAQCAtMjIwMyw3ICYjNDM7MjE4OCw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLAogCQkJCQkJICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7CiAJCX0KLQkJaXB1dChlYV9pbm9kZSk7CiYjNDM7CQlleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7CiAJfQogCWlmIChjZSkKIAkJbWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7CkBAIC0yMjg1LDcgJiM0MzsyMjcwLDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAKIAkJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsCiAJCQkJCQkgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTsKLQkJCWlwdXQoZWFfaW5vZGUpOwomIzQzOwkJCWV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTsKIAkJfQogCQlyZXR1cm4gZXJyb3I7CiAJfQpAQCAtMjI5Nyw3ICYjNDM7MjI4Miw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQloZWFkZXItJmd0O2hfbWFnaWMgPSBjcHVfdG9fbGUzMigwKTsKIAkJZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUik7CiAJfQotCWlwdXQoZWFfaW5vZGUpOwomIzQzOwlleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7CiAJcmV0dXJuIDA7CiB9CiAKQEAgLTI4NjMsNDYgJiM0MzsyODQ4LDYgQEAgaW50IGV4dDRfZXhwYW5kX2V4dHJhX2lzaXplX2VhKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGludCBuZXdfZXh0cmFfaXNpemUsCiAJcmV0dXJuIGVycm9yOwogfQogCi0jZGVmaW5lIEVJQV9JTkNSIDE2IC8qIG11c3QgYmUgMl5uICovCi0jZGVmaW5lIEVJQV9NQVNLIChFSUFfSU5DUiAtIDEpCi0KLS8qIEFkZCB0aGUgbGFyZ2UgeGF0dHIgQGlub2RlIGludG8gQGVhX2lub2RlX2FycmF5IGZvciBkZWZlcnJlZCBpcHV0KCkuCi0gKiBJZiBAZWFfaW5vZGVfYXJyYXkgaXMgbmV3IG9yIGZ1bGwgaXQgd2lsbCBiZSBncm93biBhbmQgdGhlIG9sZAotICogY29udGVudHMgY29waWVkIG92ZXIuCi0gKi8KLXN0YXRpYyBpbnQKLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCi0JCQlzdHJ1Y3QgaW5vZGUgKmlub2RlKQotewotCWlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkgewotCQkvKgotCQkgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuCi0JCSAqLwotCQkoKmVhX2lub2RlX2FycmF5KSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsCi0JCQkJCQkgRUlBX01BU0ssIEdGUF9OT0ZTKTsKLQkJaWYgKCplYV9pbm9kZV9hcnJheSA9PSBOVUxMKQotCQkJcmV0dXJuIC1FTk9NRU07Ci0JCSgqZWFfaW5vZGVfYXJyYXkpLSZndDtjb3VudCA9IDA7Ci0JfSBlbHNlIGlmICgoKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50ICZhbXA7IEVJQV9NQVNLKSA9PSBFSUFfTUFTSykgewotCQkvKiBleHBhbmQgdGhlIGFycmF5IG9uY2UgYWxsIDE1ICYjNDM7IG4gKiAxNiBzbG90cyBhcmUgZnVsbCAqLwotCQlzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqbmV3X2FycmF5ID0gTlVMTDsKLQotCQluZXdfYXJyYXkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLAotCQkJCQkgKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50ICYjNDM7IEVJQV9JTkNSLAotCQkJCQkgR0ZQX05PRlMpOwotCQlpZiAobmV3X2FycmF5ID09IE5VTEwpCi0JCQlyZXR1cm4gLUVOT01FTTsKLQkJbWVtY3B5KG5ld19hcnJheSwgKmVhX2lub2RlX2FycmF5LAotCQkgICAgICAgc3RydWN0X3NpemUoKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsCi0JCQkJICAgKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50KSk7Ci0JCWtmcmVlKCplYV9pbm9kZV9hcnJheSk7Ci0JCSplYV9pbm9kZV9hcnJheSA9IG5ld19hcnJheTsKLQl9Ci0JKCplYV9pbm9kZV9hcnJheSktJmd0O2NvdW50JiM0MzsmIzQzOzsKLQkoKmVhX2lub2RlX2FycmF5KS0mZ3Q7aW5vZGVzWygqZWFfaW5vZGVfYXJyYXkpLSZndDtjb3VudCAtIDFdID0gaW5vZGU7Ci0JcmV0dXJuIDA7Ci19Ci0KIC8qCiAgKiBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZSgpCiAgKgpAQCAtMjkxMyw3ICYjNDM7Mjg1OCw2IEBAIGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCiAgKiByZWZlcmVuY2VzIG9uIHhhdHRyIGJsb2NrIGFuZCB4YXR0ciBpbm9kZXMuCiAgKi8KIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJICAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksCiAJCQkgICAgaW50IGV4dHJhX2NyZWRpdHMpCiB7CiAJc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7CkBAIC0yOTUyLDcgJiM0MzsyODk2LDYgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQlleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGlsb2MuYmgsCiAJCQkJCQkgICAgIElGSVJTVChoZWFkZXIpLAogCQkJCQkJICAgICBmYWxzZSAvKiBibG9ja19jc3VtICovLAotCQkJCQkJICAgICBlYV9pbm9kZV9hcnJheSwKIAkJCQkJCSAgICAgZXh0cmFfY3JlZGl0cywKIAkJCQkJCSAgICAgZmFsc2UgLyogc2tpcF9xdW90YSAqLyk7CiAJfQpAQCAtMjk4NiwxMiAmIzQzOzI5MjksMTIgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCQkJCWNvbnRpbnVlOwogCQkJCWV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsCiAJCQkJCSAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LSZndDtlX3ZhbHVlX3NpemUpKTsKLQkJCQlpcHV0KGVhX2lub2RlKTsKJiM0MzsJCQkJZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpOwogCQkJfQogCiAJCX0KIAotCQlleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsIGVhX2lub2RlX2FycmF5LAomIzQzOwkJZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJoLAogCQkJCQkgZXh0cmFfY3JlZGl0cyk7CiAJCS8qCiAJCSAqIFVwZGF0ZSBpX2ZpbGVfYWNsIHZhbHVlIGluIHRoZSBzYW1lIHRyYW5zYWN0aW9uIHRoYXQgcmVsZWFzZXMKQEAgLTMwMTMsMTYgJiM0MzsyOTU2LDYzIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCXJldHVybiBlcnJvcjsKIH0KIAotdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5KQomIzQzOy8qCiYjNDM7ICogV29ya2VyIGZ1bmN0aW9uIGZvciBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0LiAgUHJvY2Vzc2VzIGFsbCBpbm9kZXMgcXVldWVkCiYjNDM7ICogb24gc19lYV9pbm9kZV90b19mcmVlIGluIGEgY29udGV4dCBmcmVlIG9mIHhhdHRyX3NlbS9qYmQyIGhhbmRsZSBsb2Nrcy4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBleHQ0X2VhX2lub2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQogewotCWludCBpZHg7CiYjNDM7CXN0cnVjdCBleHQ0X3NiX2luZm8gKnNiaSA9IGNvbnRhaW5lcl9vZih0b19kZWxheWVkX3dvcmsod29yayksCiYjNDM7CQkJCQkJc3RydWN0IGV4dDRfc2JfaW5mbywKJiM0MzsJCQkJCQlzX2VhX2lub2RlX3dvcmspOwomIzQzOwlzdHJ1Y3QgbGxpc3Rfbm9kZSAqbm9kZSA9IGxsaXN0X2RlbF9hbGwoJmFtcDtzYmktJmd0O3NfZWFfaW5vZGVfdG9fZnJlZSk7CiAKLQlpZiAoZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkKJiM0MzsJd2hpbGUgKG5vZGUpIHsKJiM0MzsJCXN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gY29udGFpbmVyX29mKG5vZGUsCiYjNDM7CQkJCQlzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvLCBpX2VhX2lwdXRfbm9kZSk7CiYjNDM7CQlub2RlID0gbm9kZS0mZ3Q7bmV4dDsKJiM0MzsJCWlwdXQoJmFtcDtlaS0mZ3Q7dmZzX2lub2RlKTsKJiM0MzsJfQomIzQzO30KJiM0MzsKJiM0MzsvKgomIzQzOyAqIFJlbGVhc2UgYSBWRlMgcmVmZXJlbmNlIG9uIGFuIEVBIGlub2RlLiAgTXVzdCBiZSB1c2VkIGluc3RlYWQgb2YgaXB1dCgpCiYjNDM7ICogaW4gYW55IGNvbnRleHQgd2hlcmUgeGF0dHJfc2VtIG9yIGEgamJkMiBoYW5kbGUgaXMgaGVsZC4KJiM0MzsgKgomIzQzOyAqIElmIHRoaXMgaXMgbm90IHRoZSBsYXN0IHJlZmVyZW5jZSwgZHJvcHMgaXQgaW1tZWRpYXRlbHkgdmlhCiYjNDM7ICogaXB1dF9pZl9ub3RfbGFzdCgpIHdpdGggbm8gZnVydGhlciBhY3Rpb24gbmVlZGVkLgomIzQzOyAqCiYjNDM7ICogSWYgdGhpcyBpcyB0aGUgbGFzdCByZWZlcmVuY2UsIHRoZSBpbm9kZSBpcyBsaW5rZWQgb250byBhIHBlci1zYgomIzQzOyAqIGxsaXN0IHZpYSBpX2VhX2lwdXRfbm9kZSAoZW1iZWRkZWQgaW4gZXh0NF9pbm9kZV9pbmZvLCBzaGFyaW5nIHNwYWNlCiYjNDM7ICogd2l0aCB0aGUgdW51c2VkIHhhdHRyX3NlbSkgYW5kIGEgZGVsYXllZCB3b3JrZXIgcGVyZm9ybXMgdGhlIGZpbmFsCiYjNDM7ICogaXB1dCgpIGluIGEgY2xlYW4gY29udGV4dC4KJiM0MzsgKgomIzQzOyAqIE5vdGU6IHdoaWxlIGFuIGlub2RlIGlzIG9uIHNfZWFfaW5vZGVfdG9fZnJlZSwgdGhlIHVuY29uc3VtZWQgaV9jb3VudAomIzQzOyAqIHJlZmVyZW5jZSAoc3RpbGwgMSkga2VlcHMgaXQgaW4gdGhlIGlub2RlIGNhY2hlLCBzbyBhbnkgY29uY3VycmVudAomIzQzOyAqIGlnZXQoKSBidW1wcyBpX2NvdW50IHRvICZndDs9IDIgYW5kIGlwdXRfaWZfbm90X2xhc3QoKSB3aWxsIHN1Y2NlZWQuCiYjNDM7ICogTm9ib2R5IHdpbGwgYWRkIHRoZSBpbm9kZSBhIHNlY29uZCB0aW1lIHVudGlsIGV4dDRfZWFfaW5vZGVfd29yaygpCiYjNDM7ICogZHJvcHMgdGhhdCByZWZlcmVuY2UgdmlhIGlwdXQoKS4KJiM0MzsgKi8KJiM0Mzt2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpCiYjNDM7ewomIzQzOwlpZiAoIWlub2RlKQomIzQzOwkJcmV0dXJuOwomIzQzOwlXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLSZndDtpX2ZsYWdzICZhbXA7IEVYVDRfRUFfSU5PREVfRkwpKTsKJiM0MzsJaWYgKGlwdXRfaWZfbm90X2xhc3QoaW5vZGUpKQogCQlyZXR1cm47CiYjNDM7CWxsaXN0X2FkZCgmYW1wO0VYVDRfSShpbm9kZSktJmd0O2lfZWFfaXB1dF9ub2RlLAomIzQzOwkJICAmYW1wO0VYVDRfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX2VhX2lub2RlX3RvX2ZyZWUpOwomIzQzOwkvKgomIzQzOwkgKiBVc2UgYSBzaG9ydCBkZWxheSB0byBhbGxvdyBtdWx0aXBsZSBFQSBpbm9kZXMgdG8gYWNjdW11bGF0ZSwKJiM0MzsJICogcmVkdWNpbmcgd29ya3F1ZXVlIHdha2V1cHMgd2hlbiBzZXZlcmFsIGFyZSByZWxlYXNlZCB0b2dldGhlci4KJiM0MzsJICovCiYjNDM7CXNjaGVkdWxlX2RlbGF5ZWRfd29yaygmYW1wO0VYVDRfU0IoaW5vZGUtJmd0O2lfc2IpLSZndDtzX2VhX2lub2RlX3dvcmssIDEpOwomIzQzO30KIAotCWZvciAoaWR4ID0gMDsgaWR4ICZsdDsgZWFfaW5vZGVfYXJyYXktJmd0O2NvdW50OyAmIzQzOyYjNDM7aWR4KQotCQlpcHV0KGVhX2lub2RlX2FycmF5LSZndDtpbm9kZXNbaWR4XSk7Ci0Ja2ZyZWUoZWFfaW5vZGVfYXJyYXkpOwomIzQzO3ZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKQomIzQzO3sKJiM0MzsJaW5pdF9sbGlzdF9oZWFkKCZhbXA7c2JpLSZndDtzX2VhX2lub2RlX3RvX2ZyZWUpOwomIzQzOwlJTklUX0RFTEFZRURfV09SSygmYW1wO3NiaS0mZ3Q7c19lYV9pbm9kZV93b3JrLCBleHQ0X2VhX2lub2RlX3dvcmspOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5oIGIvZnMvZXh0NC94YXR0ci5oCmluZGV4IDFmZWRmNDRkNGZiNjVlLi44MjFkYzZhNTBlNTFlNyAxMDA2NDQKLS0tIGEvZnMvZXh0NC94YXR0ci5oCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2V4dDQveGF0dHIuaApAQCAtMTMxLDExICYjNDM7MTMxLDYgQEAgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCB7CiAJc3RydWN0IGV4dDRfaWxvYyBpbG9jOwogfTsKIAotc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgewotCXVuc2lnbmVkIGludCBjb3VudDsKLQlzdHJ1Y3QgaW5vZGUgKmlub2Rlc1tdIF9fY291bnRlZF9ieShjb3VudCk7Ci19OwotCiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXI7CiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl90cnVzdGVkX2hhbmRsZXI7CiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyOwpAQCAtMTg3LDkgJiM0MzsxODIsOSBAQCBleHRlcm4gaW50IF9fZXh0NF94YXR0cl9zZXRfY3JlZGl0cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQkJCWJvb2wgaXNfY3JlYXRlKTsKIAogZXh0ZXJuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLAotCQkJCSAgIHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqYXJyYXksCiAJCQkJICAgaW50IGV4dHJhX2NyZWRpdHMpOwotZXh0ZXJuIHZvaWQgZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICphcnJheSk7CiYjNDM7ZXh0ZXJuIHZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKTsKJiM0MztleHRlcm4gdm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKIAogZXh0ZXJuIGludCBleHQ0X2V4cGFuZF9leHRyYV9pc2l6ZV9lYShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBpbnQgbmV3X2V4dHJhX2lzaXplLAogCQkJICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUpOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oCmluZGV4IGQxMDg5N2IzYTFlMzUwLi43MDk1MTk2MTdjN2EzOCAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvZnMuaApAQCAtMjQxMyw2ICYjNDM7MjQxMywyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJfc2V0X3N5c2ZzX25hbWVfZ2VuZXJpYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaAogZXh0ZXJuIHZvaWQgaWhvbGQoc3RydWN0IGlub2RlICogaW5vZGUpOwogZXh0ZXJuIHZvaWQgaXB1dChzdHJ1Y3QgaW5vZGUgKik7CiB2b2lkIGlwdXRfbm90X2xhc3Qoc3RydWN0IGlub2RlICopOwomIzQzOwomIzQzOy8qKgomIzQzOyAqIGlwdXRfaWZfbm90X2xhc3QgLSBkcm9wIGFuIGlub2RlIHJlZmVyZW5jZSBvbmx5IGlmIGl0IGlzIG5vdCB0aGUgbGFzdCBvbmUKJiM0MzsgKiBAaW5vZGU6IGlub2RlIHRvIHB1dAomIzQzOyAqCiYjNDM7ICogUmV0dXJucyB0cnVlIGlmIHRoZSByZWZlcmVuY2Ugd2FzIGRyb3BwZWQsIGZhbHNlIGlmIHRoaXMgd2FzIHRoZSBsYXN0CiYjNDM7ICogcmVmZXJlbmNlIGFuZCB0aGUgY2FsbGVyIG11c3QgYXJyYW5nZSBmb3IgZmluYWwgaXB1dCgpIGluIGEgc2FmZSBjb250ZXh0LgomIzQzOyAqLwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKQomIzQzO3sKJiM0MzsJVkZTX0JVR19PTl9JTk9ERShpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpICZhbXA7IChJX0ZSRUVJTkcgfCBJX0NMRUFSKSwgaW5vZGUpOwomIzQzOwlWRlNfQlVHX09OX0lOT0RFKGljb3VudF9yZWFkX29uY2UoaW5vZGUpICZsdDsgMSwgaW5vZGUpOwomIzQzOwlyZXR1cm4gYXRvbWljX2FkZF91bmxlc3MoJmFtcDtpbm9kZS0mZ3Q7aV9jb3VudCwgLTEsIDEpOwomIzQzO30KJiM0MzsKIGludCBpbm9kZV91cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsCiAJCXVuc2lnbmVkIGludCBmbGFncyk7CiBpbnQgZ2VuZXJpY191cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0NjUKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA2NTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUGF0Y2g6IEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIElub2RlIERlZmVycmFsIGluIGV4dDQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggdGhhdCYjMzk7cyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyBleHQ0IGhhbmRsZXMgRXh0ZW5kZWQgQXR0cmlidXRlIChFQSkgaW5vZGVzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGZyZWVpbmcgcHJvY2Vzcy4gVGhlIGFpbSBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGxvY2sgb3JkZXJpbmcgaXNzdWVzLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHRoaW5nLiBUaGV5JiMzOTtyZSBpbXBsZW1lbnRpbmcgYSBkZWZlcnJlZCBgaXB1dGAgbWVjaGFuaXNtIGZvciBFQSBpbm9kZXMuIFNtYXJ0LCB1c2luZyBgc19lYV9pbm9kZV90b19mcmVlYCBhbmQgYHNfZWFfaW5vZGVfd29ya2Agd2l0aGluIHRoZSBgZXh0NF9zYl9pbmZvYCBzdHJ1Y3R1cmUgaXMgYSBzb2xpZCBhcHByb2FjaCBmb3IgdGhpcyBraW5kIG9mIGRlbGF5ZWQgb3BlcmF0aW9uLiBUaGUgYWRkaXRpb24gb2YgYGlwdXRfaWZfbm90X2xhc3RgIGlzIGFsc28gZXhwZWN0ZWQuIFRoZSBzaGlmdCBmcm9tIGBleHQ0X3hhdHRyX2lub2RlX2FycmF5YCB0byBhIGxvY2tsZXNzIGxpc3QgKGBsbGlzdF9ub2RlIGlfZWFfaXB1dF9ub2RlYCBpbiBgc3RydWN0IGV4dDRfaW5vZGVfaW5mb2ApIGlzIGEgbm90YWJsZSBhcmNoaXRlY3R1cmFsIGNoYW5nZSwgYW5kIHBvdGVudGlhbGx5IGEgcGVyZm9ybWFuY2UgaW1wcm92ZW1lbnQuIFRoaXMgZGVmaW5pdGVseSB3YXJyYW50cyBjbG9zZSBzY3J1dGlueS4KClRoaXMgaXMgYSBjb3JlIGZ1bmN0aW9uYWwgY2hhbmdlLCBubyBkb3VidCBhYm91dCBpdC4gV2Ugc2hvdWxkIGRlZmluaXRlbHkgaW5jbHVkZSB0aGlzIGluIHRoZSBmdXp6aW5nIHByb2Nlc3Mg4oCTIGBXb3J0aEZ1enppbmc9dHJ1ZWAgaXMgc3BvdCBvbi4KCk5vdywgbGV0JiMzOTtzIGlkZW50aWZ5IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgdGhhdCBhcmUgYmVpbmcgbW9kaWZpZWQgb3IgYWRkZWQuIFRoZSBjb2RlIHRvdWNoZXMgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgZnVuY3Rpb25zIHJlbGF0ZWQgdG8gRUEgaW5vZGUgbWFuYWdlbWVudDogYGV4dDRfZWFfaW5vZGVfd29ya2AsIGBleHQ0X3B1dF9lYV9pbm9kZWAsIGBleHQ0X2luaXRfZWFfaW5vZGVfd29ya2AsIGFuZCBjb3JlIHhhdHRyIGZ1bmN0aW9ucyBsaWtlIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAsIGBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsYCwgYW5kIHNvIG9uLgoKSG93ZXZlciwgSSYjMzk7bSBmb2N1c2luZyBteSBhdHRlbnRpb24gcHJpbWFyaWx5IG9uIHRoZSBmb2xsb3dpbmcgZm9yIHRoaXMgaW5pdGlhbCBhbmFseXNpczogYGV4dDRfZWFfaW5vZGVfd29ya2AsIHdoaWNoIGlzIHRoZSBjb3JlIGRlZmVycmVkIHdvcmssIGBleHQ0X3B1dF9lYV9pbm9kZWAsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAsIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAsIGFuZCBgZXh0NF94YXR0cl9pYm9keV9zZXRgIGFzIHRoZXkgYXJlIHRoZSBtb3N0IGNyaXRpY2FsIGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMuCgpHaXZlbiB0aGF0IHRoaXMgYWZmZWN0cyBjb3JlIGV4dDQgRUEgaGFuZGxpbmcsIGNvbmZpZ3VyYXRpb24gaXMgaW1wb3J0YW50LiBUaGUgY29kZSByZXNpZGVzIHdpdGhpbiBgZnMvZXh0NC9gLCBhbmQgdGhlIHJlbGV2YW50IGNvbmZpZyBpcyBgRVhUNF9GU2AuIEJ1dCwgSSBuZWVkIHRvIGNoZWNrIGZvciBhbnkgc3BlY2lmaWMgY29uZmlncyByZWxhdGVkIHRvIEVBIGlub2Rlcy4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGBmcy9leHQ0L0tjb25maWdgIGZpbGUgb3IgcGVyZm9ybSBhIHF1aWNrIGdyZXAgZm9yICYjMzQ7RUFfSU5PREUmIzM0Oy4gUmVsYXRlZCBjb25maWdzIGxpa2UgYEVYVDRfRlNfUE9TSVhfQUNMYCBhbmQgYEVYVDRfRlNfU0VDVVJJVFlgIGFyZSByZWxhdGVkIHRvIHhhdHRycyBidXQgRUEgaW5vZGVzIGFyZSBmdW5kYW1lbnRhbCBhbmQgSSBzdXNwZWN0IEVBIGlub2RlcyBhcmUgYSBmZWF0dXJlIG9mIGV4dDQsIHdoaWNoIG1ha2VzIG1lIHN1c3BlY3QgaXQgZGVwZW5kcyBvbiBgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0VBX0lOT0RFYC4gTmVlZCB0byB2ZXJpZnkgdGhpcyBxdWlja2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0VBX0lOT0RFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC9leHQ0Lmg9NDQwPXN0cnVjdCBmbGV4X2dyb3VwcyB7XG4tLVxuZnMvZXh0NC9leHQ0LmgtNTA0LSNkZWZpbmUgRVhUNF9WRVJJVFlfRkxcdFx0XHQweDAwMTAwMDAwIC8qIFZlcml0eSBwcm90ZWN0ZWQgaW5vZGUgKi9cbmZzL2V4dDQvZXh0NC5oOjUwNTojZGVmaW5lIEVYVDRfRUFfSU5PREVfRkxcdCAgICAgICAgMHgwMDIwMDAwMCAvKiBJbm9kZSB1c2VkIGZvciBsYXJnZSBFQSAqL1xuZnMvZXh0NC9leHQ0LmgtNTA2LS8qIDB4MDA0MDAwMDAgd2FzIGZvcm1lcmx5IEVYVDRfRU9GQkxPQ0tTX0ZMICovXG4tLVxuZnMvZXh0NC9leHQ0Lmg9NTgwPWVudW0ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTYwMy1cdEVYVDRfSU5PREVfVkVSSVRZXHQ9IDIwLFx0LyogVmVyaXR5IHByb3RlY3RlZCBpbm9kZSAqL1xuZnMvZXh0NC9leHQ0Lmg6NjA0Olx0RVhUNF9JTk9ERV9FQV9JTk9ERVx0PSAyMSxcdC8qIElub2RlIHVzZWQgZm9yIGxhcmdlIEVBICovXG5mcy9leHQ0L2V4dDQuaC02MDUtLyogMjIgd2FzIGZvcm1lcmx5IEVYVDRfSU5PREVfRU9GQkxPQ0tTICovXG4tLVxuZnMvZXh0NC9leHQ0Lmg9NjI5PXN0YXRpYyBpbmxpbmUgdm9pZCBleHQ0X2NoZWNrX2ZsYWdfdmFsdWVzKHZvaWQpXG4tLVxuZnMvZXh0NC9leHQ0LmgtNjUxLVx0Q0hFQ0tfRkxBR19WQUxVRShWRVJJVFkpO1xuZnMvZXh0NC9leHQ0Lmg6NjUyOlx0Q0hFQ0tfRkxBR19WQUxVRShFQV9JTk9ERSk7XG5mcy9leHQ0L2V4dDQuaC02NTMtXHRDSEVDS19GTEFHX1ZBTFVFKElOTElORV9EQVRBKTtcbi0tXG5mcy9leHQ0L2V4dDQuaD0xMDQ4PXN0cnVjdCBleHQ0X2lub2RlX2luZm8ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTEwNzMtXHQgKlxuZnMvZXh0NC9leHQ0Lmg6MTA3NDpcdCAqIEVBIGlub2RlcyAoRVhUNF9FQV9JTk9ERV9GTCkgZG8gbm90IHVzZSB4YXR0cl9zZW07IHRoZXkgcmV1c2VcbmZzL2V4dDQvZXh0NC5oLTEwNzUtXHQgKiB0aGUgc3BhY2UgZm9yIGRlZmVycmVkIGlwdXQgbGlua2FnZS5cbi0tXG5mcy9leHQ0L2V4dDQuaD0yMDM3PWVudW0ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTIwNDUtXHRFWFQ0X1NUQVRFX0VYVF9QUkVDQUNIRUQsXHQvKiBleHRlbnRzIGhhdmUgYmVlbiBwcmVjYWNoZWQgKi9cbmZzL2V4dDQvZXh0NC5oOjIwNDY6XHRFWFQ0X1NUQVRFX0xVU1RSRV9FQV9JTk9ERSxcdC8qIEx1c3RyZS1zdHlsZSBlYV9pbm9kZSAqL1xuZnMvZXh0NC9leHQ0LmgtMjA0Ny1cdEVYVDRfU1RBVEVfVkVSSVRZX0lOX1BST0dSRVNTLFx0LyogYnVpbGRpbmcgZnMtdmVyaXR5IE1lcmtsZSB0cmVlICovXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MjEzND1zdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9pbm9kZV9vcnBoYW5fdHJhY2tlZChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvZXh0NC5oLTIyMTUtI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CR1x0XHQweDAyMDBcbmZzL2V4dDQvZXh0NC5oOjIyMTY6I2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRUFfSU5PREVcdFx0MHgwNDAwIC8qIEVBIGluIGlub2RlICovXG5mcy9leHQ0L2V4dDQuaC0yMjE3LSNkZWZpbmUgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0RJUkRBVEFcdFx0MHgxMDAwIC8qIGRhdGEgaW4gZGlyZW50ICovXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MjMxND1FWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRlVOQ1MoZmxleF9iZyxcdFx0RkxFWF9CRylcbmZzL2V4dDQvZXh0NC5oOjIzMTU6RVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZVTkNTKGVhX2lub2RlLFx0XHRFQV9JTk9ERSlcbmZzL2V4dDQvZXh0NC5oLTIzMTYtRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZVTkNTKGRpcmRhdGEsXHRcdERJUkRBVEEpXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MjMyMT1FWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRlVOQ1MoY2FzZWZvbGQsXHRcdENBU0VGT0xEKVxuLS1cbmZzL2V4dDQvZXh0NC5oLTIzNDUtXHRcdFx0XHRcdCBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CR3wgXFxcbmZzL2V4dDQvZXh0NC5oOjIzNDY6XHRcdFx0XHRcdCBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRUFfSU5PREV8IFxcXG5mcy9leHQ0L2V4dDQuaC0yMzQ3LVx0XHRcdFx0XHQgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX01NUCB8IFxcXG4tLVxuZnMvZXh0NC9leHQ0Lmg9MjcwMj1zdGF0aWMgaW5saW5lIGJvb2wgZXh0NF9pc19xdW90YV9maWxlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9leHQ0LmgtMjcwNC1cdHJldHVybiBJU19OT1FVT1RBKGlub2RlKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvZXh0NC5oOjI3MDU6XHQgICAgICAgIShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpO1xuZnMvZXh0NC9leHQ0LmgtMjcwNi19XG4tLVxuZnMvZXh0NC9leHQ0Lmg9MzE1Mz10eXBlZGVmIGVudW0ge1xuLS1cbmZzL2V4dDQvZXh0NC5oLTMxNTctXHRFWFQ0X0lHRVRfQkFEID1cdFx0MHgwMDA0LCAvKiBBbGxvdyB0byBpZ2V0IGEgYmFkIGlub2RlICovXG5mcy9leHQ0L2V4dDQuaDozMTU4Olx0RVhUNF9JR0VUX0VBX0lOT0RFID1cdDB4MDAwOFx0LyogSW5vZGUgc2hvdWxkIGNvbnRhaW4gYW4gRUEgdmFsdWUgKi9cbmZzL2V4dDQvZXh0NC5oLTMxNTktfSBleHQ0X2lnZXRfZmxhZ3M7XG4tLVxuZnMvZXh0NC9leHQ0X2piZDIuYz0xMD1pbnQgZXh0NF9pbm9kZV9qb3VybmFsX21vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L2V4dDRfamJkMi5jLTE1LVx0aWYgKCFTX0lTUkVHKGlub2RlLVx1MDAzZWlfbW9kZSkgfHxcbmZzL2V4dDQvZXh0NF9qYmQyLmM6MTY6XHQgICAgZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRUFfSU5PREUpIHx8XG5mcy9leHQ0L2V4dDRfamJkMi5jLTE3LVx0ICAgIHRlc3Rfb3B0KGlub2RlLVx1MDAzZWlfc2IsIERBVEFfRkxBR1MpID09IEVYVDRfTU9VTlRfSk9VUk5BTF9EQVRBIHx8XG4tLVxuZnMvZXh0NC9leHRlbnRzLmM9MjQzNz1zdGF0aWMgaW5saW5lIGludCBnZXRfZGVmYXVsdF9mcmVlX2Jsb2Nrc19mbGFncyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQvZXh0ZW50cy5jLTI0MzktXHRpZiAoU19JU0RJUihpbm9kZS1cdTAwM2VpX21vZGUpIHx8IFNfSVNMTksoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fFxuZnMvZXh0NC9leHRlbnRzLmM6MjQ0MDpcdCAgICBleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FQV9JTk9ERSkpXG5mcy9leHQ0L2V4dGVudHMuYy0yNDQxLVx0XHRyZXR1cm4gRVhUNF9GUkVFX0JMT0NLU19NRVRBREFUQSB8IEVYVDRfRlJFRV9CTE9DS1NfRk9SR0VUO1xuLS1cbmZzL2V4dDQvaWFsbG9jLmM9OTMzPXN0cnVjdCBpbm9kZSAqX19leHQ0X25ld19pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbi0tXG5mcy9leHQ0L2lhbGxvYy5jLTk5NS1cbmZzL2V4dDQvaWFsbG9jLmM6OTk2Olx0aWYgKCEoaV9mbGFncyBcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpIHtcbmZzL2V4dDQvaWFsbG9jLmMtOTk3LVx0XHRlcnIgPSBmc2NyeXB0X3ByZXBhcmVfbmV3X2lub2RlKGRpciwgaW5vZGUsIFx1MDAyNmVuY3J5cHQpO1xuLS1cbmZzL2V4dDQvaWFsbG9jLmMtMTAwNS1cbmZzL2V4dDQvaWFsbG9jLmM6MTAwNjpcdGlmICghaGFuZGxlIFx1MDAyNlx1MDAyNiBzYmktXHUwMDNlc19qb3VybmFsIFx1MDAyNlx1MDAyNiAhKGlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKSB7XG5mcy9leHQ0L2lhbGxvYy5jLTEwMDctXHRcdHJldDIgPSBleHQ0X3hhdHRyX2NyZWRpdHNfZm9yX25ld19pbm9kZShkaXIsIG1vZGUsIGVuY3J5cHQpO1xuLS1cbmZzL2V4dDQvaWFsbG9jLmMtMTMwOC1cdGlmIChleHQ0X2hhc19mZWF0dXJlX2lubGluZV9kYXRhKHNiKSBcdTAwMjZcdTAwMjZcbmZzL2V4dDQvaWFsbG9jLmM6MTMwOTpcdCAgICAoIShlaS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiAoRVhUNF9EQVhfRkx8RVhUNF9FQV9JTk9ERV9GTCkpIHx8IFNfSVNESVIobW9kZSkpKVxuZnMvZXh0NC9pYWxsb2MuYy0xMzEwLVx0XHRleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9NQVlfSU5MSU5FX0RBVEEpO1xuLS1cbmZzL2V4dDQvaWFsbG9jLmMtMTMyNi1cbmZzL2V4dDQvaWFsbG9jLmM6MTMyNzpcdGlmICghKGVpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKSB7XG5mcy9leHQ0L2lhbGxvYy5jLTEzMjgtXHRcdGVyciA9IGV4dDRfaW5pdF9hY2woaGFuZGxlLCBpbm9kZSwgZGlyKTtcbi0tXG5mcy9leHQ0L2luZGlyZWN0LmM9ODU3PXN0YXRpYyBpbnQgZXh0NF9jbGVhcl9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L2luZGlyZWN0LmMtODY3LVx0aWYgKFNfSVNESVIoaW5vZGUtXHUwMDNlaV9tb2RlKSB8fCBTX0lTTE5LKGlub2RlLVx1MDAzZWlfbW9kZSkgfHxcbmZzL2V4dDQvaW5kaXJlY3QuYzo4Njg6XHQgICAgZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRUFfSU5PREUpKVxuZnMvZXh0NC9pbmRpcmVjdC5jLTg2OS1cdFx0ZmxhZ3MgfD0gRVhUNF9GUkVFX0JMT0NLU19GT1JHRVQgfCBFWFQ0X0ZSRUVfQkxPQ0tTX01FVEFEQVRBO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz0xNjk9dm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTE4NC1cbmZzL2V4dDQvaW5vZGUuYzoxODU6XHRpZiAoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKVxuZnMvZXh0NC9pbm9kZS5jLTE4Ni1cdFx0ZXh0NF9ldmljdF9lYV9pbm9kZShpbm9kZSk7XG4tLVxuZnMvZXh0NC9pbm9kZS5jPTQzND12b2lkIGV4dDRfY2hlY2tfbWFwX2V4dGVudHNfZW52KHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTQ0Mi1cdCAgICAoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgKElfRlJFRUlORyB8IElfV0lMTF9GUkVFIHwgSV9ORVcpKSB8fFxuZnMvZXh0NC9pbm9kZS5jOjQ0MzpcdCAgICBleHQ0X3Rlc3RfaW5vZGVfZmxhZyhpbm9kZSwgRVhUNF9JTk9ERV9FQV9JTk9ERSkgfHxcbmZzL2V4dDQvaW5vZGUuYy00NDQtXHQgICAgZXh0NF92ZXJpdHlfaW5fcHJvZ3Jlc3MoaW5vZGUpKVxuLS1cbmZzL2V4dDQvaW5vZGUuYz00Njk3PXN0YXRpYyBpbmxpbmUgdTY0IGV4dDRfaW5vZGVfcGVla19pdmVyc2lvbihjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvZXh0NC9pbm9kZS5jLTQ2OTgte1xuZnMvZXh0NC9pbm9kZS5jOjQ2OTk6XHRpZiAodW5saWtlbHkoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSlcbmZzL2V4dDQvaW5vZGUuYy00NzAwLVx0XHRyZXR1cm4gaW5vZGVfcGVla19pdmVyc2lvbl9yYXcoaW5vZGUpO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz01MTkwPWludCBleHQ0X2dldF9wcm9qaWQoc3RydWN0IGlub2RlICppbm9kZSwga3Byb2ppZF90ICpwcm9qaWQpXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUxOTktICogZXh0NCBoYXMgc2VsZi1tYW5hZ2VkIGlfdmVyc2lvbiBmb3IgZWEgaW5vZGVzLCBpdCBzdG9yZXMgdGhlIGxvd2VyIDMyYml0IG9mXG5mcy9leHQ0L2lub2RlLmM6NTIwMDogKiByZWZjb3VudCBpbiBpX3ZlcnNpb24sIHNvIHVzZSByYXcgdmFsdWVzIGlmIGlub2RlIGhhcyBFWFQ0X0VBX0lOT0RFX0ZMIGZsYWdcbmZzL2V4dDQvaW5vZGUuYy01MjAxLSAqIHNldC5cbi0tXG5mcy9leHQ0L2lub2RlLmM9NTIwMz1zdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9pbm9kZV9zZXRfaXZlcnNpb25fcXVlcmllZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCB1NjQgdmFsKVxuZnMvZXh0NC9pbm9kZS5jLTUyMDQte1xuZnMvZXh0NC9pbm9kZS5jOjUyMDU6XHRpZiAodW5saWtlbHkoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSlcbmZzL2V4dDQvaW5vZGUuYy01MjA2LVx0XHRpbm9kZV9zZXRfaXZlcnNpb25fcmF3KGlub2RlLCB2YWwpO1xuLS1cbmZzL2V4dDQvaW5vZGUuYz01MjExPXN0YXRpYyBpbnQgY2hlY2tfaWdvdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBleHQ0X2lnZXRfZmxhZ3MgZmxhZ3MsXG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUyMTUtXG5mcy9leHQ0L2lub2RlLmM6NTIxNjpcdGlmIChmbGFncyBcdTAwMjYgRVhUNF9JR0VUX0VBX0lOT0RFKSB7XG5mcy9leHQ0L2lub2RlLmM6NTIxNzpcdFx0aWYgKCEoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSkge1xuZnMvZXh0NC9pbm9kZS5jOjUyMTg6XHRcdFx0ZXJyX3N0ciA9IFwmIzM0O21pc3NpbmcgRUFfSU5PREUgZmxhZ1wmIzM0OztcbmZzL2V4dDQvaW5vZGUuYy01MjE5LVx0XHRcdGdvdG8gZXJyb3I7XG4tLVxuZnMvZXh0NC9pbm9kZS5jLTUyMjYtXHR9IGVsc2Uge1xuZnMvZXh0NC9pbm9kZS5jOjUyMjc6XHRcdGlmICgoRVhUNF9JKGlub2RlKS1cdTAwM2VpX2ZsYWdzIFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSkge1xuZnMvZXh0NC9pbm9kZS5jLTUyMjgtXHRcdFx0Lypcbi0tXG5mcy9leHQ0L2lub2RlLmMtNTIzNC1cdFx0XHRcdHJldHVybiAtRVNUQUxFO1xuZnMvZXh0NC9pbm9kZS5jOjUyMzU6XHRcdFx0ZXJyX3N0ciA9IFwmIzM0O3VuZXhwZWN0ZWQgRUFfSU5PREUgZmxhZ1wmIzM0OztcbmZzL2V4dDQvaW5vZGUuYy01MjM2LVx0XHRcdGdvdG8gZXJyb3I7XG4tLVxuZnMvZXh0NC9pb2N0bC5jPTEyMDU9c3RhdGljIGludCBleHQ0X2lvY3RsX3NldHV1aWQoc3RydWN0IGZpbGUgKmZpbHAsXG4tLVxuZnMvZXh0NC9pb2N0bC5jLTEyNjEtXHRcdChFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRVhURU5UUyB8XHRcXFxuZnMvZXh0NC9pb2N0bC5jOjEyNjI6XHRcdCBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRUFfSU5PREUgfFx0XFxcbmZzL2V4dDQvaW9jdGwuYy0xMjYzLVx0XHQgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0VOQ1JZUFQgfFx0XFxcbi0tXG5mcy9leHQ0L3Zlcml0eS5jLTE1LSAqIGJ5IGV4dDQgd2l0aCBvbmx5IHNvbWUgcmVsYXRpdmVseSBzbWFsbCBjaGFuZ2VzIHRvIGV4dDQuICBUaGlzIGFwcHJvYWNoXG5mcy9leHQ0L3Zlcml0eS5jOjE2OiAqIGF2b2lkcyBoYXZpbmcgdG8gZGVwZW5kIG9uIHRoZSBFQV9JTk9ERSBmZWF0dXJlIGFuZCBvbiByZWFyY2hpdGVjdHVyaW5nXG5mcy9leHQ0L3Zlcml0eS5jLTE3LSAqIGV4dDQmIzM5O3MgeGF0dHIgc3VwcG9ydCB0byBzdXBwb3J0IHBhZ2luZyBtdWx0aS1naWdhYnl0ZSB4YXR0cnMgaW50byBtZW1vcnksIGFuZFxuLS1cbmZzL2V4dDQvdmVyaXR5LmM9MTAyPXN0YXRpYyBpbnQgZXh0NF9iZWdpbl9lbmFibGVfdmVyaXR5KHN0cnVjdCBmaWxlICpmaWxwKVxuLS1cbmZzL2V4dDQvdmVyaXR5LmMtMTY4LSAqIHhhdHRycy4gIEFsc28sIGlmIHRoZSBkZXNjcmlwdG9yIGluY2x1ZGVzIGEgbGFyZ2Ugc2lnbmF0dXJlIGJsb2IgaXQgbWF5IGJlXG5mcy9leHQ0L3Zlcml0eS5jOjE2OTogKiB0b28gbGFyZ2UgdG8gc3RvcmUgaW4gYW4geGF0dHIgd2l0aG91dCB0aGUgRUFfSU5PREUgZmVhdHVyZS5cbmZzL2V4dDQvdmVyaXR5LmMtMTcwLSAqL1xuLS1cbmZzL2V4dDQveGF0dHIuYz0xMDE9Y29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgKiBjb25zdCBleHQ0X3hhdHRyX2hhbmRsZXJzW10gPSB7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTExMy1cbmZzL2V4dDQveGF0dHIuYzoxMTQ6I2RlZmluZSBFQV9JTk9ERV9DQUNIRShpbm9kZSlcdCgoKHN0cnVjdCBleHQ0X3NiX2luZm8gKikgXFxcbmZzL2V4dDQveGF0dHIuYy0xMTUtXHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZnNfaW5mbyktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSlcbi0tXG5mcy9leHQ0L3hhdHRyLmM9NDIwPXN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pZ2V0KHN0cnVjdCBpbm9kZSAqcGFyZW50LCB1bnNpZ25lZCBsb25nIGVhX2lubyxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtNDM2LVxuZnMvZXh0NC94YXR0ci5jOjQzNzpcdGlub2RlID0gZXh0NF9pZ2V0KHBhcmVudC1cdTAwM2VpX3NiLCBlYV9pbm8sIEVYVDRfSUdFVF9FQV9JTk9ERSk7XG5mcy9leHQ0L3hhdHRyLmMtNDM4LVx0aWYgKElTX0VSUihpbm9kZSkpIHtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtNDU0LVx0ICAgIGlub2RlLVx1MDAzZWlfZ2VuZXJhdGlvbiA9PSBwYXJlbnQtXHUwMDNlaV9nZW5lcmF0aW9uKSB7XG5mcy9leHQ0L3hhdHRyLmM6NDU1Olx0XHRleHQ0X3NldF9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9MVVNUUkVfRUFfSU5PREUpO1xuZnMvZXh0NC94YXR0ci5jLTQ1Ni1cdFx0ZXh0NF94YXR0cl9pbm9kZV9zZXRfcmVmKGlub2RlLCAxKTtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9NDY4PXZvaWQgZXh0NF9ldmljdF9lYV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbmZzL2V4dDQveGF0dHIuYy00NzEtXG5mcy9leHQ0L3hhdHRyLmM6NDcyOlx0aWYgKCFFQV9JTk9ERV9DQUNIRShpbm9kZSkpXG5mcy9leHQ0L3hhdHRyLmMtNDczLVx0XHRyZXR1cm47XG5mcy9leHQ0L3hhdHRyLmMtNDc0LVx0LyogV2FpdCBmb3IgZW50cnkgdG8gZ2V0IHVudXNlZCBzbyB0aGF0IHdlIGNhbiByZW1vdmUgaXQgKi9cbmZzL2V4dDQveGF0dHIuYzo0NzU6XHR3aGlsZSAoKG9lID0gbWJfY2FjaGVfZW50cnlfZGVsZXRlX29yX2dldChFQV9JTk9ERV9DQUNIRShpbm9kZSksXG5mcy9leHQ0L3hhdHRyLmMtNDc2LVx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZ2V0X2hhc2goaW5vZGUpLCBpbm9kZS1cdTAwM2VpX2lubykpKSB7XG5mcy9leHQ0L3hhdHRyLmMtNDc3LVx0XHRtYl9jYWNoZV9lbnRyeV93YWl0X3VudXNlZChvZSk7XG5mcy9leHQ0L3hhdHRyLmM6NDc4Olx0XHRtYl9jYWNoZV9lbnRyeV9wdXQoRUFfSU5PREVfQ0FDSEUoaW5vZGUpLCBvZSk7XG5mcy9leHQ0L3hhdHRyLmMtNDc5LVx0fVxuLS1cbmZzL2V4dDQveGF0dHIuYz01MjU9ZXh0NF94YXR0cl9pbm9kZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LFxuLS1cbmZzL2V4dDQveGF0dHIuYy01Mjcte1xuZnMvZXh0NC94YXR0ci5jOjUyODpcdHN0cnVjdCBtYl9jYWNoZSAqZWFfaW5vZGVfY2FjaGUgPSBFQV9JTk9ERV9DQUNIRShpbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtNTI5LVx0c3RydWN0IGlub2RlICplYV9pbm9kZTtcbi0tXG5mcy9leHQ0L3hhdHRyLmMtNTUwLVxuZnMvZXh0NC94YXR0ci5jOjU1MTpcdGlmICghZXh0NF90ZXN0X2lub2RlX3N0YXRlKGVhX2lub2RlLCBFWFQ0X1NUQVRFX0xVU1RSRV9FQV9JTk9ERSkpIHtcbmZzL2V4dDQveGF0dHIuYy01NTItXHRcdGVyciA9IGV4dDRfeGF0dHJfaW5vZGVfdmVyaWZ5X2hhc2hlcyhlYV9pbm9kZSwgZW50cnksIGJ1ZmZlcixcbi0tXG5mcy9leHQ0L3hhdHRyLmM9OTI0PXN0YXRpYyB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtOTI4LVx0aWYgKGVhX2lub2RlIFx1MDAyNlx1MDAyNlxuZnMvZXh0NC94YXR0ci5jOjkyOTpcdCAgICBleHQ0X3Rlc3RfaW5vZGVfc3RhdGUoZWFfaW5vZGUsIEVYVDRfU1RBVEVfTFVTVFJFX0VBX0lOT0RFKSlcbmZzL2V4dDQveGF0dHIuYy05MzAtXHRcdHJldHVybjtcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MTQ2MT1zdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0xNDgwLVx0XHRcdFx0ICBTX0lGUkVHIHwgMDYwMCwgTlVMTCwgaW5vZGUtXHUwMDNlaV9pbm8gJiM0MzsgMSwgb3duZXIsXG5mcy9leHQ0L3hhdHRyLmM6MTQ4MTpcdFx0XHRcdCAgRVhUNF9FQV9JTk9ERV9GTCk7XG5mcy9leHQ0L3hhdHRyLmMtMTQ4Mi1cdGlmICghSVNfRVJSKGVhX2lub2RlKSkge1xuLS1cbmZzL2V4dDQveGF0dHIuYz0xNTE2PWV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTUyMC1cdHN0cnVjdCBtYl9jYWNoZV9lbnRyeSAqY2U7XG5mcy9leHQ0L3hhdHRyLmM6MTUyMTpcdHN0cnVjdCBtYl9jYWNoZSAqZWFfaW5vZGVfY2FjaGUgPSBFQV9JTk9ERV9DQUNIRShpbm9kZSk7XG5mcy9leHQ0L3hhdHRyLmMtMTUyMi1cdHZvaWQgKmVhX2RhdGE7XG4tLVxuZnMvZXh0NC94YXR0ci5jLTE1NDEtXHRcdGVhX2lub2RlID0gZXh0NF9pZ2V0KGlub2RlLVx1MDAzZWlfc2IsIGNlLVx1MDAzZWVfdmFsdWUsXG5mcy9leHQ0L3hhdHRyLmM6MTU0MjpcdFx0XHRcdCAgICAgRVhUNF9JR0VUX0VBX0lOT0RFKTtcbmZzL2V4dDQveGF0dHIuYy0xNTQzLVx0XHRpZiAoSVNfRVJSKGVhX2lub2RlKSlcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MTU2Nz1zdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTYwMS1cbmZzL2V4dDQveGF0dHIuYzoxNjAyOlx0aWYgKEVBX0lOT0RFX0NBQ0hFKGlub2RlKSlcbmZzL2V4dDQveGF0dHIuYzoxNjAzOlx0XHRtYl9jYWNoZV9lbnRyeV9jcmVhdGUoRUFfSU5PREVfQ0FDSEUoaW5vZGUpLCBHRlBfTk9GUywgaGFzaCxcbmZzL2V4dDQveGF0dHIuYy0xNjA0LVx0XHRcdFx0ICAgICAgZWFfaW5vZGUtXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xuLS1cbmZzL2V4dDQveGF0dHIuYz0xODg4PWV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvZXh0NC94YXR0ci5jLTE5OTMtXHRcdFx0aWYgKCFleHQ0X3Rlc3RfaW5vZGVfc3RhdGUodG1wX2lub2RlLFxuZnMvZXh0NC94YXR0ci5jOjE5OTQ6XHRcdFx0XHRcdEVYVDRfU1RBVEVfTFVTVFJFX0VBX0lOT0RFKSkge1xuZnMvZXh0NC94YXR0ci5jLTE5OTUtXHRcdFx0XHQvKlxuLS1cbmZzL2V4dDQveGF0dHIuYz0yOTk2PXZvaWQgZXh0NF9wdXRfZWFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjk5OS1cdFx0cmV0dXJuO1xuZnMvZXh0NC94YXR0ci5jOjMwMDA6XHRXQVJOX09OX09OQ0UoIShFWFQ0X0koaW5vZGUpLVx1MDAzZWlfZmxhZ3MgXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKTtcbmZzL2V4dDQveGF0dHIuYy0zMDAxLVx0aWYgKGlwdXRfaWZfbm90X2xhc3QoaW5vZGUpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDgwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkNoZWNraW5nIHRoZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRUFfSU5PREUgRmVhdHVyZSBhbmQgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRUFfSU5PREVgIGZlYXR1cmUuIEl0JiMzOTtzIG5vdCBhIHN0YW5kYWxvbmUgS2NvbmZpZyBvcHRpb24sIGl0IGp1c3QgY29tZXMgYWxvbmcgd2l0aCBleHQ0LiBSaWdodCwgc28gdG8gYWN0dWFsbHkgKnRlc3QqIHRoaXMgZmVhdHVyZSwgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGV4dDQgaXRzZWxmIGlzIGVuYWJsZWQsIHdoaWNoIG1lYW5zIGBFWFQ0X0ZTYCBuZWVkcyB0byBiZSBzZXQuIE1ha2VzIHNlbnNlLgoKQW5kLCBvZiBjb3Vyc2UsIGV4dGVuZGVkIGF0dHJpYnV0ZXMgaGF2ZSB0byBiZSBlbmFibGVkLiBUaGF0IHNob3VsZCBiZSBgRVhUNF9GU19YQVRUUmAuIEJ1dCB3YWl0LCBJJiMzOTttIHByZXR0eSBzdXJlIHRoYXQmIzM5O3MgdXN1YWxseSBvbiBieSBkZWZhdWx0LCBvciBhdCBsZWFzdCBlYXN5IHRvIGV4cGxpY2l0bHkgc2V0LiBIb2xkIG9uLi4uZG9lcyBgRVhUNF9GU19YQVRUUmAgYWN0dWFsbHkgZXhpc3Q/IEkgYmV0dGVyIGRvdWJsZS1jaGVjayB0aGF0OyBJIGRvbiYjMzk7dCB3YW50IHRvIG1ha2UgYXNzdW1wdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEVYVDRfRlMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXG5mcy9leHQ0L0tjb25maWctMy1cdHRyaXN0YXRlIFwmIzM0O1RoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXCYjMzQ7XG4tLVxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxuLS1cbmZzL2V4dDQvS2NvbmZpZy00NS1cbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcbmZzL2V4dDQvS2NvbmZpZy00Ny1cdGJvb2wgXCYjMzQ7RXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1wmIzM0O1xuLS1cbmZzL2V4dDQvS2NvbmZpZy01NS1cbmZzL2V4dDQvS2NvbmZpZzo1Njpjb25maWcgRVhUNF9GU19TRUNVUklUWVxuZnMvZXh0NC9LY29uZmlnLTU3LVx0Ym9vbCBcJiMzNDtFeHQ0IFNlY3VyaXR5IExhYmVsc1wmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NjI5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIEVYVDQgRXh0ZW5kZWQgQXR0cmlidXRlcyAoeGF0dHJzKSoqCgpPa2F5LCBzbyBJJiMzOTttIGhvbmluZyBpbiBvbiB0aGUgRVhUNCBmaWxlIHN5c3RlbSwgc3BlY2lmaWNhbGx5IHhhdHRycy4gYEVYVDRfRlNgIGlzIHRoZSBjb3JlLCBhbmQgSSYjMzk7bSBub3RpbmcgdGhhdCB3aGlsZSBgRVhUNF9GU19QT1NJWF9BQ0xgIGFuZCBgRVhUNF9GU19TRUNVUklUWWAgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIHhhdHRycyB0b28sIHRoZSBFQSBpbm9kZXMgYXJlIHRoZSBpbXBvcnRhbnQgcGFydCBmb3IgbGFyZ2VyIGF0dHJpYnV0ZXMuIFNvLCBmb3Igbm93LCBsZXQmIzM5O3MganVzdCBzdGljayB3aXRoIGBFWFQ0X0ZTYC4KCkkgbmVlZCB0byBuYWlsIGRvd24gdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBnb2luZyB0byBiZSBjcml0aWNhbCBmb3IgdGhlIGZ1enppbmcgY2FtcGFpZ24uIEkmIzM5O20gc2VlaW5nIGEgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBzZWVtIHByb21pc2luZywgYnV0IEkgbmVlZCB0byBtYWtlIHNvbWUgZGVjaXNpb25zLgoKSW5pdGlhbGx5LCBJIGhhZCBhIGZvY3VzIGxpc3Qgb2YgdGhlIGZvbGxvd2luZyBmdW5jdGlvbnM6CiogICBgZXh0NF9lYV9pbm9kZV93b3JrYCAoc3RhdGljYWxseSBkZWZpbmVkLCBpdCBtaWdodCBub3QgYmUgZGlyZWN0bHkgZnV6emFibGUsIGJ1dCBpdCBpcyBjYWxsZWQgZnJvbSBhIHdvcmtxdWV1ZSwgc28gdGhlcmUgbWF5IGJlIGEgd2F5KQoqICAgYGV4dDRfcHV0X2VhX2lub2RlYCAoY2FsbGVkIGZyb20gdmFyaW91cyBsb2NhdGlvbnMpCiogICBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgCiogICBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYAoqICAgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgCiogICBgZXh0NF94YXR0cl9ibG9ja19zZXRgCiogICBgZXh0NF94YXR0cl9pYm9keV9zZXRgCiogICBgZXh0NF94YXR0cl9zZXRfZW50cnlgCiogICBgZXh0NF94YXR0cl9pbm9kZV9sb29rdXBfY3JlYXRlYAoqICAgYGV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlYAoqICAgYGV4dDRfeGF0dHJfaW5vZGVfZ2V0YAoKQnV0IG5vdyB0aGF0IEkmIzM5O3ZlIHJldmlld2VkIHRoZSBwYXRjaCwgaXQgc2VlbXMgbGlrZSBzZXZlcmFsIG9mIHRoZXNlIGZ1bmN0aW9ucyBhcmUgbW9kaWZpZWQuIEJhc2ljYWxseSwgYW55dGhpbmcgdGhhdCB1c2VkIGBpcHV0KGVhX2lub2RlKWAgaXMgbm93IHVzaW5nIGBleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSlgLiBBbHNvLCBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgIG5vIGxvbmdlciB1c2VzIGBlYV9pbm9kZV9hcnJheWAuCgpTbywgdGhlIGZvY3VzIHJlYWxseSBuYXJyb3dzIHRvIHRoZSBmb2xsb3dpbmcga2V5IGZ1bmN0aW9uczoKCiogICBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgCiogICBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYAoqICAgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgCiogICBgZXh0NF94YXR0cl9ibG9ja19zZXRgCiogICBgZXh0NF94YXR0cl9pYm9keV9zZXRgCiogICBgZXh0NF9wdXRfZWFfaW5vZGVgCgpJJiMzOTttIHRoaW5raW5nLCBpcyBgZXh0NF9lYV9pbm9kZV93b3JrYCByZWFjaGFibGUsIGRlc3BpdGUgYmVpbmcgc3RhdGljPyBZZXMsIGl0JiMzOTtzIHRyaWdnZXJlZCB2aWEgZGVsYXllZCB3b3JrLiBBbmQgYGV4dDRfcHV0X2VhX2lub2RlYD8gWWVwLCBpbnZvbHZlZCBpbiBzZXR0aW5nLCBnZXR0aW5nLCBhbmQgZGVsZXRpbmcgbGFyZ2UgeGF0dHJzLiBBbmQgd2hhdCBhYm91dCBgaXB1dF9pZl9ub3RfbGFzdGA/IFRoYXQmIzM5O3MgaW5saW5lIGluIGBmcy5oYCwgc28gYWNjZXNzaWJsZS4KClNvLCBnb2luZyBiYWNrIHRvIHRoZSBmaXJzdCBwb2ludDsgaXMgYEVYVDRfRlNgIHRoZSByaWdodCBzY29wZT8gWWVzLCBpdCBzZWVtcyBsaWtlIGl0IHdpbGwgcHJvdmlkZSBlbm91Z2ggY292ZXJhZ2UuCgpMZXQmIzM5O3MgcmVmaW5lIHRob3NlICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6CgoqICAgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYAoqICAgYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2AKKiAgIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYAoqICAgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YAoqICAgYGV4dDRfeGF0dHJfaWJvZHlfc2V0YAoqICAgYGV4dDRfcHV0X2VhX2lub2RlYAoqICAgYGV4dDRfZWFfaW5vZGVfd29ya2AKCkkgbmVlZCB0byBkb3VibGUtY2hlY2sgaWYgYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2AgaXMgc3RhdGljLCBqdXN0IHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvZXh0NC8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvZXh0NC94YXR0ci5jPTEyNjI9c3RhdGljIHZvaWRcbmZzL2V4dDQveGF0dHIuYzoxMjYzOmV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuZnMvZXh0NC94YXR0ci5jLTEyNjQtXHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4tLVxuZnMvZXh0NC94YXR0ci5jPTE4ODg9ZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMjE3My1cdGlmIChicy1cdTAwM2ViaCBcdTAwMjZcdTAwMjYgYnMtXHUwMDNlYmggIT0gbmV3X2JoKSB7XG5mcy9leHQ0L3hhdHRyLmM6MjE3NDpcdFx0ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZSwgaW5vZGUsIGJzLVx1MDAzZWJoLFxuZnMvZXh0NC94YXR0ci5jLTIxNzUtXHRcdFx0XHRcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xuLS1cbmZzL2V4dDQveGF0dHIuYz0yODYwPWludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yOTM2LVxuZnMvZXh0NC94YXR0ci5jOjI5Mzc6XHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcbmZzL2V4dDQveGF0dHIuYy0yOTM4LVx0XHRcdFx0XHQgZXh0cmFfY3JlZGl0cyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg1MjcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAyMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6CgoqKlhGUyBFeHRlbmRlZCBBdHRyaWJ1dGUgRnVuY3Rpb24gSW5jbHVzaW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGVzZSBYRlMgZXh0ZW5kZWQgYXR0cmlidXRlIGZ1bmN0aW9ucyBhbmQgZmlndXJpbmcgb3V0IHdoYXQmIzM5O3MgcmVsZXZhbnQgdG8gaW5jbHVkZS4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHRoYXQgdGhpcyBpcyBhIHN0YXRpYyBjb250ZXh0LCB3aGljaCBpcyBpbXBvcnRhbnQgdG8ga2VlcCBpbiBtaW5kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgZ2V0IHRoZSByaWdodCBvbmVzLiBJdCBsb29rcyBsaWtlIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAgaXMgZ2xvYmFsLCBzbyB0aGF0JiMzOTtzIGRlZmluaXRlbHkgaW4uIFRoZW4gdGhlcmUmIzM5O3MgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCwgd2hpY2ggaXMgYWxzbyBnbG9iYWwg4oCTIGluY2x1ZGUgaXQuIFNhbWUgZ29lcyBmb3IgYGV4dDRfeGF0dHJfaWJvZHlfc2V0YCBhbmQgYGV4dDRfcHV0X2VhX2lub2RlYCDigJMgdGhvc2UgYXJlIGdsb2JhbCB0b28sIHNvIEkmIzM5O2xsIGJlIHN1cmUgdG8gaW5jbHVkZSB0aGVtLiBOb3csIHRoZXJlJiMzOTtzIGBleHQ0X2VhX2lub2RlX3dvcmtgIC0gaXQmIzM5O3Mgc3RhdGljLCBidXQgc2VlbXMgcmVsYXRlZCwgc28gSSYjMzk7bGwgaW5jbHVkZSBpdCBpbiB0aGlzIHBhc3MuCgpMZXQmIzM5O3MgcXVpY2tseSBjcmVhdGUgdGhlIGxpc3QuIEkmIzM5O2xsIGluY2x1ZGU6Ci0gYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYAotIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAKLSBgZXh0NF94YXR0cl9pYm9keV9zZXRgCi0gYGV4dDRfcHV0X2VhX2lub2RlYAotIGBleHQ0X2VhX2lub2RlX3dvcmtgCi0gYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2AKLSBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAKCldhaXQgYSBzZWNvbmQuLi5JIGp1c3QgY2F1Z2h0IHRoYXQgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgIGlzIHN0YXRpYyBhcyB3ZWxsLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9leHQ0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9leHQ0L3hhdHRyLmM9MTE1NT1zdGF0aWMgdm9pZFxuZnMvZXh0NC94YXR0ci5jOjExNTY6ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbmZzL2V4dDQveGF0dHIuYy0xMTU3LVx0XHRcdCAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcbi0tXG5mcy9leHQ0L3hhdHRyLmM9MTI2Mz1leHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbi0tXG5mcy9leHQ0L3hhdHRyLmMtMTMwMi1cdFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfZWFfaW5vZGUoaW5vZGUtXHUwMDNlaV9zYikpXG5mcy9leHQ0L3hhdHRyLmM6MTMwMzpcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGJoLFxuZnMvZXh0NC94YXR0ci5jLTEzMDQtXHRcdFx0XHRcdFx0ICAgICBCRklSU1QoYmgpLFxuLS1cbmZzL2V4dDQveGF0dHIuYz0yODYwPWludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbmZzL2V4dDQveGF0dHIuYy0yODk1LVx0XHRpZiAoaGVhZGVyLVx1MDAzZWhfbWFnaWMgPT0gY3B1X3RvX2xlMzIoRVhUNF9YQVRUUl9NQUdJQykpXG5mcy9leHQ0L3hhdHRyLmM6Mjg5NjpcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGlsb2MuYmgsXG5mcy9leHQ0L3hhdHRyLmMtMjg5Ny1cdFx0XHRcdFx0XHQgICAgIElGSVJTVChoZWFkZXIpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMiAxODoxMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTQ4NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipGb2N1cyBTeW1ib2wgTWFuYWdlbWVudCBhbmQgYSBRdWljayBDaGVjayoqCgpSaWdodCwgdGhlc2UgbmV3IGl0ZW1zIG5lZWQgdG8gYmUgaW50ZWdyYXRlZCBpbnRvIHRoZSBgRm9jdXNTeW1ib2xzYCBzdHJ1Y3R1cmUuIFRoYXQmIzM5O3MgdGhlIGltbWVkaWF0ZSBhY3Rpb24uIEJlZm9yZSBJIGZ1bGx5IGNvbW1pdCwgdGhvdWdoLCBsZXQmIzM5O3MganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSYjMzk7bGwgbmVlZCB0byBjb25maXJtIHRoYXQgYGlwdXRfaWZfbm90X2xhc3RgIGlzIGJlaGF2aW5nIGFzIEkgZXhwZWN0LCBhbmQgdGhhdCBtZWFucyBhIHBlZWsgYXQgYGluY2x1ZGUvbGludXgvZnMuaGAuIEl0JiMzOTtzIGxpa2VseSB0aGF0IGEgc3VidGxlIGVkZ2UgY2FzZSBoYXMgYmVlbiB1bmNvdmVyZWQgYnkgdGhpcy4gVGhpcyBmdW5jdGlvbiBoYW5kbGVzIHRoZSByZWxlYXNlIG9mIGFuIGlub2RlLiBJIG5lZWQgdG8gbWFrZSBjZXJ0YWluIHRoYXQgdGhlIGltcGxlbWVudGF0aW9uIGFuZCB1c2FnZSBhbGlnbiB3aXRoIG15IGN1cnJlbnQgdW5kZXJzdGFuZGluZyBvZiB0aGUgZm9jdXMgc3ltYm9sIHN0cmF0ZWd5LCBzcGVjaWZpY2FsbHkgcmVnYXJkaW5nIGZpbmFsaXphdGlvbiBhbmQgYW55IGFzc29jaWF0ZWQgcmFjZSBjb25kaXRpb25zIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQuIFRoaXMgcXVpY2sgY3Jvc3MtcmVmZXJlbmNlIHdpbGwgZW5zdXJlIHRoZXJlIGFyZSBubyBzdXJwcmlzZXMgd2l0aCBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgbmV3IGVudHJpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2lwdXRfaWZfbm90X2xhc3QmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2ZzLmgmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9mcy5oPTI0MTU9dm9pZCBpcHV0X25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjQxNy0vKipcbmluY2x1ZGUvbGludXgvZnMuaDoyNDE4OiAqIGlwdXRfaWZfbm90X2xhc3QgLSBkcm9wIGFuIGlub2RlIHJlZmVyZW5jZSBvbmx5IGlmIGl0IGlzIG5vdCB0aGUgbGFzdCBvbmVcbmluY2x1ZGUvbGludXgvZnMuaC0yNDE5LSAqIEBpbm9kZTogaW5vZGUgdG8gcHV0XG4tLVxuaW5jbHVkZS9saW51eC9mcy5oLTI0MjMtICovXG5pbmNsdWRlL2xpbnV4L2ZzLmg6MjQyNDpzdGF0aWMgaW5saW5lIGJvb2wgX19tdXN0X2NoZWNrIGlwdXRfaWZfbm90X2xhc3Qoc3RydWN0IGlub2RlICppbm9kZSlcbmluY2x1ZGUvbGludXgvZnMuaC0yNDI1LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDIgMTg6MTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk5MjIKCQkJCQkJCW91dHB1dDogMjIyCgkJCQkJCQl0aG91Z2h0czogMjYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIElub2RlIEhhbmRsaW5nIGluIGV4dDQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIG15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IHdlIG5lZWQgdG8gZnV6eiB0aGUgY2hhbmdlcyB0byBleHQ0JiMzOTtzIEVBIGlub2RlIGhhbmRsaW5nLiBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGdvYWwgaGVyZSBpcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyB3aGVuIGRlYWxpbmcgd2l0aCBFQSBpbm9kZXMsIHdoaWNoIGlzIGNydWNpYWwgZm9yIG92ZXJhbGwgZmlsZXN5c3RlbSBzdGFiaWxpdHkuIFNwZWNpZmljYWxseSwgdGhleSYjMzk7dmUgaW50cm9kdWNlZCBhIGRlZmVycmVkIGBpcHV0YCBtZWNoYW5pc20gdXNpbmcgYSBsb2NrbGVzcyBsaXN0IGFuZCBhIGRlbGF5ZWQgd29ya3F1ZXVlIGNhbGxlZCBgZXh0NF9lYV9pbm9kZV93b3JrYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIHNoaWZ0IGFuZCBJIG5lZWQgdG8gZW5zdXJlIGl0JiMzOTtzIHJvYnVzdC4KCldoaWxlIHRoZSBwcmltYXJ5IGZ1bmN0aW9uIG9mIGludGVyZXN0LCBgZXh0NF9wdXRfZWFfaW5vZGVgLCBtaWdodCBub3QgYmUgZGlyZWN0bHkgZnV6emFibGUgYXMgYSBzeW1ib2wgYmVjYXVzZSBpdCYjMzk7cyBpbmxpbmVkLCBpdCYjMzk7cyBzdGlsbCBhdCB0aGUgaGVhcnQgb2YgdGhlIGNoYW5nZXMgYW5kIHRoZXJlZm9yZSBhIGtleSBjb25zaWRlcmF0aW9uLiBUaGUgY29yZSBmdW5jdGlvbnMgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiBhcmU6IGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAsIGBleHQ0X3hhdHRyX2lib2R5X3NldGAsIGBleHQ0X3B1dF9lYV9pbm9kZWAgKGV2ZW4gaWYgaW5saW5lZCwgSSYjMzk7bGwgbmVlZCB0byBjb25zaWRlciBob3cgaXQmIzM5O3MgdXNlZCksIGBleHQ0X2VhX2lub2RlX3dvcmtgLCBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYCwgYW5kIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYC4gVGhlc2UgYXJlIHRoZSBidWlsZGluZyBibG9ja3MgaW52b2x2ZWQgaW4gRUEgaW5vZGUgZXZpY3Rpb24sIGFuZCBuZWVkIHRvIGJlIGV4YW1pbmVkIGNhcmVmdWxseS4KClRoZSBjb25maWd1cmF0aW9ucyBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGVuYWJsZSBmb3IgdGhlIGZ1enppbmcgcnVucyB3b3VsZCBiZSBgRVhUNF9GU2AuIEkmIzM5O20gY29uY2VybmVkIGFib3V0IHRoZSB1c3VhbCBzdXNwZWN0czogdXNlLWFmdGVyLWZyZWUgY29uZGl0aW9ucywgbWVtb3J5IGxlYWtzLCBhbmQgcG90ZW50aWFsIGRlYWRsb2NrcyB0aGF0IG1pZ2h0IGFyaXNlIGR1ZSB0byB0aGlzIG5ldyBkZWxheWVkIHdvcmtxdWV1ZSBhbmQgbG9ja2xlc3MgbGlzdC4gSSBuZWVkIHRvIGRlc2lnbiBmdXp6aW5nIGNhbXBhaWducyB0aGF0IHNwZWNpZmljYWxseSB0YXJnZXQgdGhvc2UgYXJlYXMgYW5kIHRlc3QgdGhvcm91Z2hseS4gSSYjMzk7bGwgbmVlZCB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBsb2NrbGVzcyBsaXN0IGFuZCB0aGUgd29ya3F1ZXVlIGFuZCBlbnN1cmUgdGhhdCB0aGUgZXZpY3Rpb24gcHJvY2VzcyBpcyBjbGVhbiBhbmQgY29uc2lzdGVudCB1bmRlciB2YXJpb3VzIGxvYWQgY29uZGl0aW9ucy4KClJpZ2h0LCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYCBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAyIDE4OjExPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtFWFQ0X0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXh0NF94YXR0cl9kZWxldGVfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9ibG9ja19zZXQmIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pYm9keV9zZXQmIzM0OywKICAgICYjMzQ7ZXh0NF9wdXRfZWFfaW5vZGUmIzM0OywKICAgICYjMzQ7ZXh0NF9lYV9pbm9kZV93b3JrJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQmIzM5O3MgaGFuZGxpbmcgb2YgRXh0ZW5kZWQgQXR0cmlidXRlIChFQSkgaW5vZGVzIGJ5IGludHJvZHVjaW5nIGEgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMuIEl0IHJlcGxhY2VzIHRoZSBgZXh0NF94YXR0cl9pbm9kZV9hcnJheWAgd2l0aCBhIGxvY2tsZXNzIGxpc3QgYW5kIGEgZGVsYXllZCB3b3JrcXVldWUgKGBleHQ0X2VhX2lub2RlX3dvcmtgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgZGVhZGxvY2tzIG9jY3VyIGR1cmluZyBFQSBpbm9kZSBldmljdGlvbi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7RVhUNF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4dDRfeGF0dHJfZGVsZXRlX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfYmxvY2tfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfeGF0dHJfaWJvZHlfc2V0JiMzNDssCiAgICAmIzM0O2V4dDRfcHV0X2VhX2lub2RlJiMzNDssCiAgICAmIzM0O2V4dDRfZWFfaW5vZGVfd29yayYjMzQ7LAogICAgJiMzNDtleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2smIzM0OywKICAgICYjMzQ7ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBleHQ0JiMzOTtzIGhhbmRsaW5nIG9mIEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIGlub2RlcyBieSBpbnRyb2R1Y2luZyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBJdCByZXBsYWNlcyB0aGUgYGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlgIHdpdGggYSBsb2NrbGVzcyBsaXN0IGFuZCBhIGRlbGF5ZWQgd29ya3F1ZXVlIChgZXh0NF9lYV9pbm9kZV93b3JrYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGRlYWRsb2NrcyBvY2N1ciBkdXJpbmcgRUEgaW5vZGUgZXZpY3Rpb24uJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMDo0MC40MTY1OTcyMzZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjM0NDQwNjA3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF94YXR0cl9kZWxldGVfaW5vZGVcIixcbiAgICBcImV4dDRfeGF0dHJfYmxvY2tfc2V0XCIsXG4gICAgXCJleHQ0X3hhdHRyX2lib2R5X3NldFwiLFxuICAgIFwiZXh0NF9wdXRfZWFfaW5vZGVcIixcbiAgICBcImV4dDRfZWFfaW5vZGVfd29ya1wiLFxuICAgIFwiZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrXCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NCdzIGhhbmRsaW5nIG9mIEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIGlub2RlcyBieSBpbnRyb2R1Y2luZyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBJdCByZXBsYWNlcyB0aGUgYGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlgIHdpdGggYSBsb2NrbGVzcyBsaXN0IGFuZCBhIGRlbGF5ZWQgd29ya3F1ZXVlIChgZXh0NF9lYV9pbm9kZV93b3JrYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGRlYWRsb2NrcyBvY2N1ciBkdXJpbmcgRUEgaW5vZGUgZXZpY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjEwOjQwLjQxNjYwNDg1NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODMxMDk5NDY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgZGFlNzYyYjJhYzM5MzczNDY3MTlmZjJmZTkzZGJkOGFjNjJkYjE4NVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAyIDE4OjEwOjM4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQvZXh0NC5oIGIvZnMvZXh0NC9leHQ0LmhcXG5pbmRleCBiMzdjMTM2ZWEzYWIzMy4uYjliMGFkYTc3NzRiYjQgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9leHQ0LmhcXG4rKysgYi9mcy9leHQ0L2V4dDQuaFxcbkBAIC0xMDcwLDggKzEwNzAsMTQgQEAgc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XFxuIFxcdCAqIGJldHdlZW4gcmVhZGVycyBvZiBFQXMgYW5kIHdyaXRlcnMgb2YgcmVndWxhciBmaWxlIGRhdGEsIHNvXFxuIFxcdCAqIGluc3RlYWQgd2Ugc3luY2hyb25pemUgb24geGF0dHJfc2VtIHdoZW4gcmVhZGluZyBvciBjaGFuZ2luZ1xcbiBcXHQgKiBFQXMuXFxuK1xcdCAqXFxuK1xcdCAqIEVBIGlub2RlcyAoRVhUNF9FQV9JTk9ERV9GTCkgZG8gbm90IHVzZSB4YXR0cl9zZW07IHRoZXkgcmV1c2VcXG4rXFx0ICogdGhlIHNwYWNlIGZvciBkZWZlcnJlZCBpcHV0IGxpbmthZ2UuXFxuIFxcdCAqL1xcbi1cXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcXG4rXFx0dW5pb24ge1xcbitcXHRcXHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcXG4rXFx0XFx0c3RydWN0IGxsaXN0X25vZGUgaV9lYV9pcHV0X25vZGU7XFxuK1xcdH07XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBJbm9kZXMgd2l0aCBFWFQ0X1NUQVRFX09SUEhBTl9GSUxFIHVzZSBpX29ycGhhbl9pZHguIE90aGVyd2lzZVxcbkBAIC0xNzcwLDYgKzE3NzYsMTEgQEAgc3RydWN0IGV4dDRfc2JfaW5mbyB7XFxuIFxcdHN0cnVjdCBleHQ0X2VzX3N0YXRzIHNfZXNfc3RhdHM7XFxuIFxcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9ibG9ja19jYWNoZTtcXG4gXFx0c3RydWN0IG1iX2NhY2hlICpzX2VhX2lub2RlX2NhY2hlO1xcbitcXG4rXFx0LyogRGVmZXJyZWQgaXB1dCBmb3IgRUEgaW5vZGVzIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzICovXFxuK1xcdHN0cnVjdCBsbGlzdF9oZWFkIHNfZWFfaW5vZGVfdG9fZnJlZTtcXG4rXFx0c3RydWN0IGRlbGF5ZWRfd29yayBzX2VhX2lub2RlX3dvcms7XFxuK1xcbiBcXHRzcGlubG9ja190IHNfZXNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xcbiBcXG4gXFx0LyogSm91cm5hbCB0cmlnZ2VycyBmb3IgY2hlY2tzdW0gY29tcHV0YXRpb24gKi9cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9pbm9kZS5jIGIvZnMvZXh0NC9pbm9kZS5jXFxuaW5kZXggY2U5OTgwN2M1ZjViMmMuLjc0N2M1MmMyMzJjYzAzIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xcbisrKyBiL2ZzL2V4dDQvaW5vZGUuY1xcbkBAIC0xNzYsNyArMTc2LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdCAqICh4YXR0ciBibG9jayBmcmVlaW5nKSwgYml0bWFwLCBncm91cCBkZXNjcmlwdG9yIChpbm9kZSBmcmVlaW5nKVxcbiBcXHQgKi9cXG4gXFx0aW50IGV4dHJhX2NyZWRpdHMgPSA2O1xcbi1cXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqZWFfaW5vZGVfYXJyYXkgPSBOVUxMO1xcbiBcXHRib29sIGZyZWV6ZV9wcm90ZWN0ZWQgPSBmYWxzZTtcXG4gXFxuIFxcdHRyYWNlX2V4dDRfZXZpY3RfaW5vZGUoaW5vZGUpO1xcbkBAIC0yODEsOCArMjgwLDcgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuIFxcdH1cXG4gXFxuIFxcdC8qIFJlbW92ZSB4YXR0ciByZWZlcmVuY2VzLiAqL1xcbi1cXHRlcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBcXHUwMDI2ZWFfaW5vZGVfYXJyYXksXFxuLVxcdFxcdFxcdFxcdCAgICAgIGV4dHJhX2NyZWRpdHMpO1xcbitcXHRlcnIgPSBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGUsIGlub2RlLCBleHRyYV9jcmVkaXRzKTtcXG4gXFx0aWYgKGVycikge1xcbiBcXHRcXHRleHQ0X3dhcm5pbmcoaW5vZGUtXFx1MDAzZWlfc2IsIFxcXCJ4YXR0ciBkZWxldGUgKGVyciAlZClcXFwiLCBlcnIpO1xcbiBzdG9wX2hhbmRsZTpcXG5AQCAtMjkwLDcgKzI4OCw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbiBcXHRcXHRleHQ0X29ycGhhbl9kZWwoTlVMTCwgaW5vZGUpO1xcbiBcXHRcXHRpZiAoZnJlZXplX3Byb3RlY3RlZClcXG4gXFx0XFx0XFx0c2JfZW5kX2ludHdyaXRlKGlub2RlLVxcdTAwM2VpX3NiKTtcXG4tXFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcXG4gXFx0XFx0Z290byBub19kZWxldGU7XFxuIFxcdH1cXG4gXFxuQEAgLTMyMCw3ICszMTcsNiBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4gXFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcXG4gXFx0aWYgKGZyZWV6ZV9wcm90ZWN0ZWQpXFxuIFxcdFxcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cXHUwMDNlaV9zYik7XFxuLVxcdGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShlYV9pbm9kZV9hcnJheSk7XFxuIFxcdHJldHVybjtcXG4gbm9fZGVsZXRlOlxcbiBcXHQvKlxcbmRpZmYgLS1naXQgYS9mcy9leHQ0L3N1cGVyLmMgYi9mcy9leHQ0L3N1cGVyLmNcXG5pbmRleCAyNDVmNjdkMTBkZWQzNC4uM2VmYTVhODE3YmVmNGYgMTAwNjQ0XFxuLS0tIGEvZnMvZXh0NC9zdXBlci5jXFxuKysrIGIvZnMvZXh0NC9zdXBlci5jXFxuQEAgLTEzMDMsNiArMTMwMyw4IEBAIHN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdFxcdFxcdCBcXHUwMDI2c2ItXFx1MDAzZXNfdXVpZCk7XFxuIFxcbiBcXHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XFxuK1xcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIHdoaWxlIHF1b3RhIGlzIHN0aWxsIGFjdGl2ZS4gKi9cXG4rXFx0Zmx1c2hfZGVsYXllZF93b3JrKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfd29yayk7XFxuIFxcdGV4dDRfcXVvdGFzX29mZihzYiwgRVhUNF9NQVhRVU9UQVMpO1xcbiBcXG4gXFx0ZGVzdHJveV93b3JrcXVldWUoc2JpLVxcdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XFxuQEAgLTE0MjMsNiArMTQyNSwxMyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdG1lbXNldChcXHUwMDI2ZWktXFx1MDAzZWlfZHF1b3QsIDAsIHNpemVvZihlaS1cXHUwMDNlaV9kcXVvdCkpO1xcbiAjZW5kaWZcXG4gXFx0ZWktXFx1MDAzZWppbm9kZSA9IE5VTEw7XFxuK1xcdC8qXFxuK1xcdCAqIFJlaW5pdGlhbGl6ZSB4YXR0cl9zZW0gZXZlcnkgYWxsb2NhdGlvbiBiZWNhdXNlIEVBIGlub2Rlc1xcbitcXHQgKiBzaGFyZSB0aGlzIHNwYWNlIHdpdGggaV9lYV9pcHV0X25vZGUgKHZpYSB1bmlvbikgd2hpY2ggbWF5XFxuK1xcdCAqIGhhdmUgb3ZlcndyaXR0ZW4gdGhlIHNlbWFwaG9yZSB3aGVuIHRoZSBzbGFiIG9iamVjdCB3YXNcXG4rXFx0ICogcHJldmlvdXNseSB1c2VkIGFzIGFuIEVBIGlub2RlLlxcbitcXHQgKi9cXG4rXFx0aW5pdF9yd3NlbShcXHUwMDI2ZWktXFx1MDAzZXhhdHRyX3NlbSk7XFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlaS1cXHUwMDNlaV9yc3ZfY29udmVyc2lvbl9saXN0KTtcXG4gXFx0c3Bpbl9sb2NrX2luaXQoXFx1MDAyNmVpLVxcdTAwM2VpX2NvbXBsZXRlZF9pb19sb2NrKTtcXG4gXFx0ZWktXFx1MDAzZWlfc3luY190aWQgPSAwO1xcbkBAIC0xNDg4LDcgKzE0OTcsNiBAQCBzdGF0aWMgdm9pZCBpbml0X29uY2Uodm9pZCAqZm9vKVxcbiBcXHRzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvICplaSA9IGZvbztcXG4gXFxuIFxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZlaS1cXHUwMDNlaV9vcnBoYW4pO1xcbi1cXHRpbml0X3J3c2VtKFxcdTAwMjZlaS1cXHUwMDNleGF0dHJfc2VtKTtcXG4gXFx0aW5pdF9yd3NlbShcXHUwMDI2ZWktXFx1MDAzZWlfZGF0YV9zZW0pO1xcbiBcXHRpbm9kZV9pbml0X29uY2UoXFx1MDAyNmVpLVxcdTAwM2V2ZnNfaW5vZGUpO1xcbiBcXHRleHQ0X2ZjX2luaXRfaW5vZGUoXFx1MDAyNmVpLVxcdTAwM2V2ZnNfaW5vZGUpO1xcbkBAIC01NDk3LDYgKzU1MDUsOCBAQCBzdGF0aWMgaW50IF9fZXh0NF9maWxsX3N1cGVyKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG4gXFx0XFx0XFx0ICBleHQ0X2hhc19mZWF0dXJlX29ycGhhbl9wcmVzZW50KHNiKSB8fFxcbiBcXHRcXHRcXHQgIGV4dDRfaGFzX2ZlYXR1cmVfam91cm5hbF9uZWVkc19yZWNvdmVyeShzYikpO1xcbiBcXG4rXFx0ZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc2JpKTtcXG4rXFxuIFxcdGlmIChleHQ0X2hhc19mZWF0dXJlX21tcChzYikgXFx1MDAyNlxcdTAwMjYgIXNiX3Jkb25seShzYikpIHtcXG4gXFx0XFx0ZXJyID0gZXh0NF9tdWx0aV9tb3VudF9wcm90ZWN0KHNiLCBsZTY0X3RvX2NwdShlcy1cXHUwMDNlc19tbXBfYmxvY2spKTtcXG4gXFx0XFx0aWYgKGVycilcXG5AQCAtNTc0Nyw2ICs1NzU3LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXFxuIFxcdHJldHVybiAwO1xcbiBcXG4gZmFpbGVkX21vdW50OTpcXG4rXFx0LyogRHJhaW4gZGVmZXJyZWQgRUEgaW5vZGUgaXB1dHMgYmVmb3JlIHF1b3RhIHNodXRkb3duICovXFxuK1xcdGZsdXNoX2RlbGF5ZWRfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmspO1xcbiBcXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcXG4gZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG4gXFx0ZXh0NF9yZWxlYXNlX29ycGhhbl9pbmZvKHNiKTtcXG5AQCAtNTc2Nyw2ICs1Nzc5LDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcXG4gXFx0aWYgKEVYVDRfU0Ioc2IpLVxcdTAwM2Vyc3ZfY29udmVyc2lvbl93cSlcXG4gXFx0XFx0ZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktXFx1MDAzZXJzdl9jb252ZXJzaW9uX3dxKTtcXG4gZmFpbGVkX21vdW50X3dxOlxcbitcXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBiZWZvcmUgZnJlZWluZyBzdHJ1Y3R1cmVzICovXFxuK1xcdGZsdXNoX2RlbGF5ZWRfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmspO1xcbiBcXHRleHQ0X3hhdHRyX2Rlc3Ryb3lfY2FjaGUoc2JpLVxcdTAwM2VzX2VhX2lub2RlX2NhY2hlKTtcXG4gXFx0c2JpLVxcdTAwM2VzX2VhX2lub2RlX2NhY2hlID0gTlVMTDtcXG4gXFxuQEAgLTU3NzcsNiArNTc5MSw4IEBAIGZhaWxlZF9tb3VudDg6IF9fbWF5YmVfdW51c2VkXFxuIFxcdFxcdGV4dDRfam91cm5hbF9kZXN0cm95KHNiaSwgc2JpLVxcdTAwM2VzX2pvdXJuYWwpO1xcbiBcXHR9XFxuIGZhaWxlZF9tb3VudDNhOlxcbitcXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyBmcm9tIGpvdXJuYWwgcmVwbGF5ICovXFxuK1xcdGZsdXNoX2RlbGF5ZWRfd29yayhcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmspO1xcbiBcXHRleHQ0X2VzX3VucmVnaXN0ZXJfc2hyaW5rZXIoc2JpKTtcXG4gZmFpbGVkX21vdW50MzpcXG4gXFx0LyogZmx1c2ggc19zYl91cGRfd29yayBiZWZvcmUgc2JpIGRlc3Ryb3kgKi9cXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5jIGIvZnMvZXh0NC94YXR0ci5jXFxuaW5kZXggOTgyYTFmODMxZTIyODIuLjRhZTZjZTExMTU2NjBlIDEwMDY0NFxcbi0tLSBhL2ZzL2V4dDQveGF0dHIuY1xcbisrKyBiL2ZzL2V4dDQveGF0dHIuY1xcbkBAIC0xMTQsMTAgKzExNCw2IEBAIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyc1tdID0ge1xcbiAjZGVmaW5lIEVBX0lOT0RFX0NBQ0hFKGlub2RlKVxcdCgoKHN0cnVjdCBleHQ0X3NiX2luZm8gKikgXFxcXFxcbiBcXHRcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19mc19pbmZvKS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSlcXG4gXFxuLXN0YXRpYyBpbnRcXG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcXG4tXFx0XFx0XFx0c3RydWN0IGlub2RlICppbm9kZSk7XFxuLVxcbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcXG4gdm9pZCBleHQ0X3hhdHRyX2lub2RlX3NldF9jbGFzcyhzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlKVxcbiB7XFxuQEAgLTU2Nyw3ICs1NjMsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZW50cnksXFxuIFxcdFxcdFxcdFxcdFxcdGVhX2lub2RlLVxcdTAwM2VpX2lubywgdHJ1ZSAvKiByZXVzYWJsZSAqLyk7XFxuIFxcdH1cXG4gb3V0Olxcbi1cXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHRyZXR1cm4gZXJyO1xcbiB9XFxuIFxcbkBAIC0xMTA0LDEwICsxMTAwLDEwIEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0ZXJyID0gZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmKGhhbmRsZSwgZWFfaW5vZGUpO1xcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXFxcImluYyByZWYgZXJyb3IgJWRcXFwiLCBlcnIpO1xcbi1cXHRcXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHRcXHRcXHRnb3RvIGNsZWFudXA7XFxuIFxcdFxcdH1cXG4tXFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gMDtcXG4gXFxuQEAgLTExMzMsNyArMTEyOSw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0aWYgKGVycilcXG4gXFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcXFwiY2xlYW51cCBkZWMgcmVmIGVycm9yICVkXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgZXJyKTtcXG4tXFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcXG4gXFx0fVxcbiBcXHRyZXR1cm4gc2F2ZWRfZXJyO1xcbiB9XFxuQEAgLTExNjAsNyArMTE1Niw2IEBAIHN0YXRpYyB2b2lkXFxuIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuIFxcdFxcdFxcdCAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4gXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZmlyc3QsIGJvb2wgYmxvY2tfY3N1bSxcXG4tXFx0XFx0XFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxcbiBcXHRcXHRcXHQgICAgIGludCBleHRyYV9jcmVkaXRzLCBib29sIHNraXBfcXVvdGEpXFxuIHtcXG4gXFx0c3RydWN0IGlub2RlICplYV9pbm9kZTtcXG5AQCAtMTE5NywxNCArMTE5Miw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuIFxcdFxcdGlmIChlcnIpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0ZXJyID0gZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoZWFfaW5vZGVfYXJyYXksIGVhX2lub2RlKTtcXG4tXFx0XFx0aWYgKGVycikge1xcbi1cXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXFxuLVxcdFxcdFxcdFxcdFxcdCAgIFxcXCJFeHBhbmQgaW5vZGUgYXJyYXkgZXJyPSVkXFxcIiwgZXJyKTtcXG4tXFx0XFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuLVxcdFxcdFxcdGNvbnRpbnVlO1xcbi1cXHRcXHR9XFxuLVxcbiBcXHRcXHRlcnIgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNfZm4oaGFuZGxlLCBjcmVkaXRzLCBjcmVkaXRzLFxcbiBcXHRcXHRcXHRleHQ0X2ZyZWVfbWV0YWRhdGFfcmV2b2tlX2NyZWRpdHMocGFyZW50LVxcdTAwM2VpX3NiLCAxKSxcXG4gXFx0XFx0XFx0ZXh0NF94YXR0cl9yZXN0YXJ0X2ZuKGhhbmRsZSwgcGFyZW50LCBiaCwgYmxvY2tfY3N1bSxcXG5AQCAtMTIxMiw2ICsxMTk5LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0aWYgKGVyciBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcXFwiRW5zdXJlIGNyZWRpdHMgZXJyPSVkXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgZXJyKTtcXG4rXFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRpZiAoZXJyIFxcdTAwM2UgMCkge1xcbkBAIC0xMjIxLDYgKzEyMDksNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRcXHRcXHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcXCJSZS1nZXQgd3JpdGUgYWNjZXNzIGVycj0lZFxcXCIsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdGVycik7XFxuK1xcdFxcdFxcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcXG4gXFx0XFx0XFx0XFx0Y29udGludWU7XFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbkBAIC0xMjI5LDYgKzEyMTgsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxcbiBcXHRcXHRpZiAoZXJyKSB7XFxuIFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSwgXFxcImVhX2lub2RlIGRlYyByZWYgZXJyPSVkXFxcIixcXG4gXFx0XFx0XFx0XFx0XFx0ICAgZXJyKTtcXG4rXFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHRcXHRcXHRjb250aW51ZTtcXG4gXFx0XFx0fVxcbiBcXG5AQCAtMTI0NSw2ICsxMjM1LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4gXFx0XFx0ZW50cnktXFx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XFxuIFxcdFxcdGVudHJ5LVxcdTAwM2VlX3ZhbHVlX3NpemUgPSAwO1xcbiBcXG4rXFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHRcXHRkaXJ0eSA9IHRydWU7XFxuIFxcdH1cXG4gXFxuQEAgLTEyNzEsNyArMTI2Miw2IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuIHN0YXRpYyB2b2lkXFxuIGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tXFx0XFx0XFx0IHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXFxuIFxcdFxcdFxcdCBpbnQgZXh0cmFfY3JlZGl0cylcXG4ge1xcbiBcXHRzdHJ1Y3QgbWJfY2FjaGUgKmVhX2Jsb2NrX2NhY2hlID0gRUFfQkxPQ0tfQ0FDSEUoaW5vZGUpO1xcbkBAIC0xMzEzLDcgKzEzMDMsNiBAQCBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBiaCxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBCRklSU1QoYmgpLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHRydWUgLyogYmxvY2tfY3N1bSAqLyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBlYV9pbm9kZV9hcnJheSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBleHRyYV9jcmVkaXRzLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIHRydWUgLyogc2tpcF9xdW90YSAqLyk7XFxuIFxcdFxcdGV4dDRfZnJlZV9ibG9ja3MoaGFuZGxlLCBpbm9kZSwgYmgsIDAsIDEsXFxuQEAgLTE1MDUsNyArMTQ5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXFxuIFxcdFxcdFxcdGlmIChleHQ0X3hhdHRyX2lub2RlX2RlY19yZWYoaGFuZGxlLCBlYV9pbm9kZSkpXFxuIFxcdFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFxcImNsZWFudXAgZGVjIHJlZiBlcnJvciAlZFxcXCIsIGVycik7XFxuLVxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuIFxcdFxcdH1cXG4gXFxuQEAgLTE1NjQsNyArMTU1Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSxcXG4gXFx0XFx0XFx0a3ZmcmVlKGVhX2RhdGEpO1xcbiBcXHRcXHRcXHRyZXR1cm4gZWFfaW5vZGU7XFxuIFxcdFxcdH1cXG4tXFx0XFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdFxcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcXG4gXFx0bmV4dF9lbnRyeTpcXG4gXFx0XFx0Y2UgPSBtYl9jYWNoZV9lbnRyeV9maW5kX25leHQoZWFfaW5vZGVfY2FjaGUsIGNlKTtcXG4gXFx0fVxcbkBAIC0xNjE1LDcgKzE2MDQsNyBAQCBzdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGUoaGFuZGxlX3QgKmhhbmRsZSxcXG4gXFx0XFx0XFx0XFx0ICAgICAgZWFfaW5vZGUtXFx1MDAzZWlfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTtcXG4gXFx0cmV0dXJuIGVhX2lub2RlO1xcbiBvdXRfZXJyOlxcbi1cXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIE5VTEwsIHZhbHVlX2xlbik7XFxuIFxcdHJldHVybiBFUlJfUFRSKGVycik7XFxuIH1cXG5AQCAtMTg0OCw3ICsxODM3LDcgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX3NldF9lbnRyeShzdHJ1Y3QgZXh0NF94YXR0cl9pbmZvICppLFxcbiBcXG4gXFx0cmV0ID0gMDtcXG4gb3V0Olxcbi1cXHRpcHV0KG9sZF9lYV9pbm9kZSk7XFxuK1xcdGV4dDRfcHV0X2VhX2lub2RlKG9sZF9lYV9pbm9kZSk7XFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuQEAgLTIwMTAsNyArMTk5OSw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdFxcdG9sZF9lYV9pbm9kZV9xdW90YSA9IGxlMzJfdG9fY3B1KFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRzLVxcdTAwM2VoZXJlLVxcdTAwM2VlX3ZhbHVlX3NpemUpO1xcbiBcXHRcXHRcXHR9XFxuLVxcdFxcdFxcdGlwdXQodG1wX2lub2RlKTtcXG4rXFx0XFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUodG1wX2lub2RlKTtcXG4gXFxuIFxcdFxcdFxcdHMtXFx1MDAzZWhlcmUtXFx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XFxuIFxcdFxcdFxcdHMtXFx1MDAzZWhlcmUtXFx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XFxuQEAgLTIxNTAsNyArMjEzOSw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgXFxcImRlYyByZWYgZXJyb3I9JWRcXFwiLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICBlcnJvcik7XFxuLVxcdFxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdFxcdGVhX2lub2RlID0gTlVMTDtcXG4gXFx0XFx0XFx0fVxcbiBcXG5AQCAtMjE4MiwxMiArMjE3MSw4IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcbiBcXHQvKiBEcm9wIHRoZSBwcmV2aW91cyB4YXR0ciBibG9jay4gKi9cXG4gXFx0aWYgKGJzLVxcdTAwM2ViaCBcXHUwMDI2XFx1MDAyNiBicy1cXHUwMDNlYmggIT0gbmV3X2JoKSB7XFxuLVxcdFxcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7XFxuLVxcbiBcXHRcXHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYnMtXFx1MDAzZWJoLFxcbi1cXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmVhX2lub2RlX2FycmF5LFxcbiBcXHRcXHRcXHRcXHRcXHQgMCAvKiBleHRyYV9jcmVkaXRzICovKTtcXG4tXFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcXG4gXFx0fVxcbiBcXHRlcnJvciA9IDA7XFxuIFxcbkBAIC0yMjAzLDcgKzIxODgsNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcXG4gXFx0XFx0fVxcbi1cXHRcXHRpcHV0KGVhX2lub2RlKTtcXG4rXFx0XFx0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xcbiBcXHR9XFxuIFxcdGlmIChjZSlcXG4gXFx0XFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7XFxuQEAgLTIyODUsNyArMjI3MCw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXG4gXFx0XFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XFxuLVxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XFxuIFxcdFxcdH1cXG4gXFx0XFx0cmV0dXJuIGVycm9yO1xcbiBcXHR9XFxuQEAgLTIyOTcsNyArMjI4Miw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRoZWFkZXItXFx1MDAzZWhfbWFnaWMgPSBjcHVfdG9fbGUzMigwKTtcXG4gXFx0XFx0ZXh0NF9jbGVhcl9pbm9kZV9zdGF0ZShpbm9kZSwgRVhUNF9TVEFURV9YQVRUUik7XFxuIFxcdH1cXG4tXFx0aXB1dChlYV9pbm9kZSk7XFxuK1xcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG4gXFxuQEAgLTI4NjMsNDYgKzI4NDgsNiBAQCBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcXG4gXFx0cmV0dXJuIGVycm9yO1xcbiB9XFxuIFxcbi0jZGVmaW5lIEVJQV9JTkNSIDE2IC8qIG11c3QgYmUgMl5uICovXFxuLSNkZWZpbmUgRUlBX01BU0sgKEVJQV9JTkNSIC0gMSlcXG4tXFxuLS8qIEFkZCB0aGUgbGFyZ2UgeGF0dHIgQGlub2RlIGludG8gQGVhX2lub2RlX2FycmF5IGZvciBkZWZlcnJlZCBpcHV0KCkuXFxuLSAqIElmIEBlYV9pbm9kZV9hcnJheSBpcyBuZXcgb3IgZnVsbCBpdCB3aWxsIGJlIGdyb3duIGFuZCB0aGUgb2xkXFxuLSAqIGNvbnRlbnRzIGNvcGllZCBvdmVyLlxcbi0gKi9cXG4tc3RhdGljIGludFxcbi1leHQ0X2V4cGFuZF9pbm9kZV9hcnJheShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxcbi1cXHRcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi17XFxuLVxcdGlmICgqZWFfaW5vZGVfYXJyYXkgPT0gTlVMTCkge1xcbi1cXHRcXHQvKlxcbi1cXHRcXHQgKiBTdGFydCB3aXRoIDE1IGlub2Rlcywgc28gaXQgZml0cyBpbnRvIGEgcG93ZXItb2YtdHdvIHNpemUuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHQoKmVhX2lub2RlX2FycmF5KSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdCBFSUFfTUFTSywgR0ZQX05PRlMpO1xcbi1cXHRcXHRpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpXFxuLVxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi1cXHRcXHQoKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlY291bnQgPSAwO1xcbi1cXHR9IGVsc2UgaWYgKCgoKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlY291bnQgXFx1MDAyNiBFSUFfTUFTSykgPT0gRUlBX01BU0spIHtcXG4tXFx0XFx0LyogZXhwYW5kIHRoZSBhcnJheSBvbmNlIGFsbCAxNSArIG4gKiAxNiBzbG90cyBhcmUgZnVsbCAqL1xcbi1cXHRcXHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqbmV3X2FycmF5ID0gTlVMTDtcXG4tXFxuLVxcdFxcdG5ld19hcnJheSA9IGttYWxsb2NfZmxleCgqKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXFxuLVxcdFxcdFxcdFxcdFxcdCAoKmVhX2lub2RlX2FycmF5KS1cXHUwMDNlY291bnQgKyBFSUFfSU5DUixcXG4tXFx0XFx0XFx0XFx0XFx0IEdGUF9OT0ZTKTtcXG4tXFx0XFx0aWYgKG5ld19hcnJheSA9PSBOVUxMKVxcbi1cXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4tXFx0XFx0bWVtY3B5KG5ld19hcnJheSwgKmVhX2lub2RlX2FycmF5LFxcbi1cXHRcXHQgICAgICAgc3RydWN0X3NpemUoKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXFxuLVxcdFxcdFxcdFxcdCAgICgqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vjb3VudCkpO1xcbi1cXHRcXHRrZnJlZSgqZWFfaW5vZGVfYXJyYXkpO1xcbi1cXHRcXHQqZWFfaW5vZGVfYXJyYXkgPSBuZXdfYXJyYXk7XFxuLVxcdH1cXG4tXFx0KCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWNvdW50Kys7XFxuLVxcdCgqZWFfaW5vZGVfYXJyYXkpLVxcdTAwM2Vpbm9kZXNbKCplYV9pbm9kZV9hcnJheSktXFx1MDAzZWNvdW50IC0gMV0gPSBpbm9kZTtcXG4tXFx0cmV0dXJuIDA7XFxuLX1cXG4tXFxuIC8qXFxuICAqIGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKClcXG4gICpcXG5AQCAtMjkxMyw3ICsyODU4LDYgQEAgZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcXG4gICogcmVmZXJlbmNlcyBvbiB4YXR0ciBibG9jayBhbmQgeGF0dHIgaW5vZGVzLlxcbiAgKi9cXG4gaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLVxcdFxcdFxcdCAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxcbiBcXHRcXHRcXHQgICAgaW50IGV4dHJhX2NyZWRpdHMpXFxuIHtcXG4gXFx0c3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA9IE5VTEw7XFxuQEAgLTI5NTIsNyArMjg5Niw2IEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbiBcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGlsb2MuYmgsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgSUZJUlNUKGhlYWRlciksXFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAgZmFsc2UgLyogYmxvY2tfY3N1bSAqLyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBlYV9pbm9kZV9hcnJheSxcXG4gXFx0XFx0XFx0XFx0XFx0XFx0ICAgICBleHRyYV9jcmVkaXRzLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGZhbHNlIC8qIHNraXBfcXVvdGEgKi8pO1xcbiBcXHR9XFxuQEAgLTI5ODYsMTIgKzI5MjksMTIgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXHRcXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2ZyZWVfcXVvdGEoaW5vZGUsIGVhX2lub2RlLFxcbiBcXHRcXHRcXHRcXHRcXHQgICAgICBsZTMyX3RvX2NwdShlbnRyeS1cXHUwMDNlZV92YWx1ZV9zaXplKSk7XFxuLVxcdFxcdFxcdFxcdGlwdXQoZWFfaW5vZGUpO1xcbitcXHRcXHRcXHRcXHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XFxuIFxcdFxcdFxcdH1cXG4gXFxuIFxcdFxcdH1cXG4gXFxuLVxcdFxcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCwgZWFfaW5vZGVfYXJyYXksXFxuK1xcdFxcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcXG4gXFx0XFx0XFx0XFx0XFx0IGV4dHJhX2NyZWRpdHMpO1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBVcGRhdGUgaV9maWxlX2FjbCB2YWx1ZSBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiB0aGF0IHJlbGVhc2VzXFxuQEAgLTMwMTMsMTYgKzI5NTYsNjMgQEAgaW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdHJldHVybiBlcnJvcjtcXG4gfVxcbiBcXG4tdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5KVxcbisvKlxcbisgKiBXb3JrZXIgZnVuY3Rpb24gZm9yIGRlZmVycmVkIEVBIGlub2RlIGlwdXQuICBQcm9jZXNzZXMgYWxsIGlub2RlcyBxdWV1ZWRcXG4rICogb24gc19lYV9pbm9kZV90b19mcmVlIGluIGEgY29udGV4dCBmcmVlIG9mIHhhdHRyX3NlbS9qYmQyIGhhbmRsZSBsb2Nrcy5cXG4rICovXFxuK3N0YXRpYyB2b2lkIGV4dDRfZWFfaW5vZGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIHtcXG4tXFx0aW50IGlkeDtcXG4rXFx0c3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpID0gY29udGFpbmVyX29mKHRvX2RlbGF5ZWRfd29yayh3b3JrKSxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfc2JfaW5mbyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0c19lYV9pbm9kZV93b3JrKTtcXG4rXFx0c3RydWN0IGxsaXN0X25vZGUgKm5vZGUgPSBsbGlzdF9kZWxfYWxsKFxcdTAwMjZzYmktXFx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XFxuIFxcbi1cXHRpZiAoZWFfaW5vZGVfYXJyYXkgPT0gTlVMTClcXG4rXFx0d2hpbGUgKG5vZGUpIHtcXG4rXFx0XFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBjb250YWluZXJfb2Yobm9kZSxcXG4rXFx0XFx0XFx0XFx0XFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbywgaV9lYV9pcHV0X25vZGUpO1xcbitcXHRcXHRub2RlID0gbm9kZS1cXHUwMDNlbmV4dDtcXG4rXFx0XFx0aXB1dChcXHUwMDI2ZWktXFx1MDAzZXZmc19pbm9kZSk7XFxuK1xcdH1cXG4rfVxcbitcXG4rLypcXG4rICogUmVsZWFzZSBhIFZGUyByZWZlcmVuY2Ugb24gYW4gRUEgaW5vZGUuICBNdXN0IGJlIHVzZWQgaW5zdGVhZCBvZiBpcHV0KClcXG4rICogaW4gYW55IGNvbnRleHQgd2hlcmUgeGF0dHJfc2VtIG9yIGEgamJkMiBoYW5kbGUgaXMgaGVsZC5cXG4rICpcXG4rICogSWYgdGhpcyBpcyBub3QgdGhlIGxhc3QgcmVmZXJlbmNlLCBkcm9wcyBpdCBpbW1lZGlhdGVseSB2aWFcXG4rICogaXB1dF9pZl9ub3RfbGFzdCgpIHdpdGggbm8gZnVydGhlciBhY3Rpb24gbmVlZGVkLlxcbisgKlxcbisgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHJlZmVyZW5jZSwgdGhlIGlub2RlIGlzIGxpbmtlZCBvbnRvIGEgcGVyLXNiXFxuKyAqIGxsaXN0IHZpYSBpX2VhX2lwdXRfbm9kZSAoZW1iZWRkZWQgaW4gZXh0NF9pbm9kZV9pbmZvLCBzaGFyaW5nIHNwYWNlXFxuKyAqIHdpdGggdGhlIHVudXNlZCB4YXR0cl9zZW0pIGFuZCBhIGRlbGF5ZWQgd29ya2VyIHBlcmZvcm1zIHRoZSBmaW5hbFxcbisgKiBpcHV0KCkgaW4gYSBjbGVhbiBjb250ZXh0LlxcbisgKlxcbisgKiBOb3RlOiB3aGlsZSBhbiBpbm9kZSBpcyBvbiBzX2VhX2lub2RlX3RvX2ZyZWUsIHRoZSB1bmNvbnN1bWVkIGlfY291bnRcXG4rICogcmVmZXJlbmNlIChzdGlsbCAxKSBrZWVwcyBpdCBpbiB0aGUgaW5vZGUgY2FjaGUsIHNvIGFueSBjb25jdXJyZW50XFxuKyAqIGlnZXQoKSBidW1wcyBpX2NvdW50IHRvIFxcdTAwM2U9IDIgYW5kIGlwdXRfaWZfbm90X2xhc3QoKSB3aWxsIHN1Y2NlZWQuXFxuKyAqIE5vYm9keSB3aWxsIGFkZCB0aGUgaW5vZGUgYSBzZWNvbmQgdGltZSB1bnRpbCBleHQ0X2VhX2lub2RlX3dvcmsoKVxcbisgKiBkcm9wcyB0aGF0IHJlZmVyZW5jZSB2aWEgaXB1dCgpLlxcbisgKi9cXG4rdm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdGlmICghaW5vZGUpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0V0FSTl9PTl9PTkNFKCEoRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9mbGFncyBcXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKTtcXG4rXFx0aWYgKGlwdXRfaWZfbm90X2xhc3QoaW5vZGUpKVxcbiBcXHRcXHRyZXR1cm47XFxuK1xcdGxsaXN0X2FkZChcXHUwMDI2RVhUNF9JKGlub2RlKS1cXHUwMDNlaV9lYV9pcHV0X25vZGUsXFxuK1xcdFxcdCAgXFx1MDAyNkVYVDRfU0IoaW5vZGUtXFx1MDAzZWlfc2IpLVxcdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xcbitcXHQvKlxcbitcXHQgKiBVc2UgYSBzaG9ydCBkZWxheSB0byBhbGxvdyBtdWx0aXBsZSBFQSBpbm9kZXMgdG8gYWNjdW11bGF0ZSxcXG4rXFx0ICogcmVkdWNpbmcgd29ya3F1ZXVlIHdha2V1cHMgd2hlbiBzZXZlcmFsIGFyZSByZWxlYXNlZCB0b2dldGhlci5cXG4rXFx0ICovXFxuK1xcdHNjaGVkdWxlX2RlbGF5ZWRfd29yayhcXHUwMDI2RVhUNF9TQihpbm9kZS1cXHUwMDNlaV9zYiktXFx1MDAzZXNfZWFfaW5vZGVfd29yaywgMSk7XFxuK31cXG4gXFxuLVxcdGZvciAoaWR4ID0gMDsgaWR4IFxcdTAwM2MgZWFfaW5vZGVfYXJyYXktXFx1MDAzZWNvdW50OyArK2lkeClcXG4tXFx0XFx0aXB1dChlYV9pbm9kZV9hcnJheS1cXHUwMDNlaW5vZGVzW2lkeF0pO1xcbi1cXHRrZnJlZShlYV9pbm9kZV9hcnJheSk7XFxuK3ZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxcbit7XFxuK1xcdGluaXRfbGxpc3RfaGVhZChcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3RvX2ZyZWUpO1xcbitcXHRJTklUX0RFTEFZRURfV09SSyhcXHUwMDI2c2JpLVxcdTAwM2VzX2VhX2lub2RlX3dvcmssIGV4dDRfZWFfaW5vZGVfd29yayk7XFxuIH1cXG4gXFxuIC8qXFxuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuaCBiL2ZzL2V4dDQveGF0dHIuaFxcbmluZGV4IDFmZWRmNDRkNGZiNjVlLi44MjFkYzZhNTBlNTFlNyAxMDA2NDRcXG4tLS0gYS9mcy9leHQ0L3hhdHRyLmhcXG4rKysgYi9mcy9leHQ0L3hhdHRyLmhcXG5AQCAtMTMxLDExICsxMzEsNiBAQCBzdHJ1Y3QgZXh0NF94YXR0cl9pYm9keV9maW5kIHtcXG4gXFx0c3RydWN0IGV4dDRfaWxvYyBpbG9jO1xcbiB9O1xcbiBcXG4tc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkge1xcbi1cXHR1bnNpZ25lZCBpbnQgY291bnQ7XFxuLVxcdHN0cnVjdCBpbm9kZSAqaW5vZGVzW10gX19jb3VudGVkX2J5KGNvdW50KTtcXG4tfTtcXG4tXFxuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3VzZXJfaGFuZGxlcjtcXG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyO1xcbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl9zZWN1cml0eV9oYW5kbGVyO1xcbkBAIC0xODcsOSArMTgyLDkgQEAgZXh0ZXJuIGludCBfX2V4dDRfeGF0dHJfc2V0X2NyZWRpdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwgc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0XFx0XFx0XFx0Ym9vbCBpc19jcmVhdGUpO1xcbiBcXG4gZXh0ZXJuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbi1cXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmFycmF5LFxcbiBcXHRcXHRcXHRcXHQgICBpbnQgZXh0cmFfY3JlZGl0cyk7XFxuLWV4dGVybiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlfZnJlZShzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqYXJyYXkpO1xcbitleHRlcm4gdm9pZCBleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpO1xcbitleHRlcm4gdm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcXG4gXFxuIGV4dGVybiBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcXG4gXFx0XFx0XFx0ICAgIHN0cnVjdCBleHQ0X2lub2RlICpyYXdfaW5vZGUsIGhhbmRsZV90ICpoYW5kbGUpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2ZzLmggYi9pbmNsdWRlL2xpbnV4L2ZzLmhcXG5pbmRleCBkMTA4OTdiM2ExZTM1MC4uNzA5NTE5NjE3YzdhMzggMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9mcy5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9mcy5oXFxuQEAgLTI0MTMsNiArMjQxMywyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJfc2V0X3N5c2ZzX25hbWVfZ2VuZXJpYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaFxcbiBleHRlcm4gdm9pZCBpaG9sZChzdHJ1Y3QgaW5vZGUgKiBpbm9kZSk7XFxuIGV4dGVybiB2b2lkIGlwdXQoc3RydWN0IGlub2RlICopO1xcbiB2b2lkIGlwdXRfbm90X2xhc3Qoc3RydWN0IGlub2RlICopO1xcbitcXG4rLyoqXFxuKyAqIGlwdXRfaWZfbm90X2xhc3QgLSBkcm9wIGFuIGlub2RlIHJlZmVyZW5jZSBvbmx5IGlmIGl0IGlzIG5vdCB0aGUgbGFzdCBvbmVcXG4rICogQGlub2RlOiBpbm9kZSB0byBwdXRcXG4rICpcXG4rICogUmV0dXJucyB0cnVlIGlmIHRoZSByZWZlcmVuY2Ugd2FzIGRyb3BwZWQsIGZhbHNlIGlmIHRoaXMgd2FzIHRoZSBsYXN0XFxuKyAqIHJlZmVyZW5jZSBhbmQgdGhlIGNhbGxlciBtdXN0IGFycmFuZ2UgZm9yIGZpbmFsIGlwdXQoKSBpbiBhIHNhZmUgY29udGV4dC5cXG4rICovXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbit7XFxuK1xcdFZGU19CVUdfT05fSU5PREUoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcXHUwMDI2IChJX0ZSRUVJTkcgfCBJX0NMRUFSKSwgaW5vZGUpO1xcbitcXHRWRlNfQlVHX09OX0lOT0RFKGljb3VudF9yZWFkX29uY2UoaW5vZGUpIFxcdTAwM2MgMSwgaW5vZGUpO1xcbitcXHRyZXR1cm4gYXRvbWljX2FkZF91bmxlc3MoXFx1MDAyNmlub2RlLVxcdTAwM2VpX2NvdW50LCAtMSwgMSk7XFxuK31cXG4rXFxuIGludCBpbm9kZV91cGRhdGVfdGltZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBlbnVtIGZzX3VwZGF0ZV90aW1lIHR5cGUsXFxuIFxcdFxcdHVuc2lnbmVkIGludCBmbGFncyk7XFxuIGludCBnZW5lcmljX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTA6NDEuMjQ4ODQ3NTY1WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTUxMjE0MTg0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJFWFQ0X0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiZXh0NF94YXR0cl9kZWxldGVfaW5vZGVcIixcbiAgICBcImV4dDRfeGF0dHJfYmxvY2tfc2V0XCIsXG4gICAgXCJleHQ0X3hhdHRyX2lib2R5X3NldFwiLFxuICAgIFwiZXh0NF9wdXRfZWFfaW5vZGVcIixcbiAgICBcImV4dDRfZWFfaW5vZGVfd29ya1wiLFxuICAgIFwiZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrXCIsXG4gICAgXCJleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZXh0NCdzIGhhbmRsaW5nIG9mIEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIGlub2RlcyBieSBpbnRyb2R1Y2luZyBhIGRlZmVycmVkIGlwdXQgbWVjaGFuaXNtIHRvIGF2b2lkIGxvY2sgb3JkZXJpbmcgaXNzdWVzLiBJdCByZXBsYWNlcyB0aGUgYGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlgIHdpdGggYSBsb2NrbGVzcyBsaXN0IGFuZCBhIGRlbGF5ZWQgd29ya3F1ZXVlIChgZXh0NF9lYV9pbm9kZV93b3JrYCkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIGV4dDQgbG9naWMgYW5kIHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHVzZS1hZnRlci1mcmVlLCBtZW1vcnkgbGVha3MsIG9yIGRlYWRsb2NrcyBvY2N1ciBkdXJpbmcgRUEgaW5vZGUgZXZpY3Rpb24uXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGFlNzYyYjJhYzM5MzczNDY3MTlmZjJmZTkzZGJkOGFjNjJkYjE4NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIgMTg6MTA6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2V4dDQuaCBiL2ZzL2V4dDQvZXh0NC5oXG5pbmRleCBiMzdjMTM2ZWEzYWIzMy4uYjliMGFkYTc3NzRiYjQgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L2V4dDQuaFxuKysrIGIvZnMvZXh0NC9leHQ0LmhcbkBAIC0xMDcwLDggKzEwNzAsMTQgQEAgc3RydWN0IGV4dDRfaW5vZGVfaW5mbyB7XG4gXHQgKiBiZXR3ZWVuIHJlYWRlcnMgb2YgRUFzIGFuZCB3cml0ZXJzIG9mIHJlZ3VsYXIgZmlsZSBkYXRhLCBzb1xuIFx0ICogaW5zdGVhZCB3ZSBzeW5jaHJvbml6ZSBvbiB4YXR0cl9zZW0gd2hlbiByZWFkaW5nIG9yIGNoYW5naW5nXG4gXHQgKiBFQXMuXG4rXHQgKlxuK1x0ICogRUEgaW5vZGVzIChFWFQ0X0VBX0lOT0RFX0ZMKSBkbyBub3QgdXNlIHhhdHRyX3NlbTsgdGhleSByZXVzZVxuK1x0ICogdGhlIHNwYWNlIGZvciBkZWZlcnJlZCBpcHV0IGxpbmthZ2UuXG4gXHQgKi9cbi1cdHN0cnVjdCByd19zZW1hcGhvcmUgeGF0dHJfc2VtO1xuK1x0dW5pb24ge1xuK1x0XHRzdHJ1Y3Qgcndfc2VtYXBob3JlIHhhdHRyX3NlbTtcbitcdFx0c3RydWN0IGxsaXN0X25vZGUgaV9lYV9pcHV0X25vZGU7XG4rXHR9O1xuIFxuIFx0LypcbiBcdCAqIElub2RlcyB3aXRoIEVYVDRfU1RBVEVfT1JQSEFOX0ZJTEUgdXNlIGlfb3JwaGFuX2lkeC4gT3RoZXJ3aXNlXG5AQCAtMTc3MCw2ICsxNzc2LDExIEBAIHN0cnVjdCBleHQ0X3NiX2luZm8ge1xuIFx0c3RydWN0IGV4dDRfZXNfc3RhdHMgc19lc19zdGF0cztcbiBcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9ibG9ja19jYWNoZTtcbiBcdHN0cnVjdCBtYl9jYWNoZSAqc19lYV9pbm9kZV9jYWNoZTtcbitcbitcdC8qIERlZmVycmVkIGlwdXQgZm9yIEVBIGlub2RlcyB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3VlcyAqL1xuK1x0c3RydWN0IGxsaXN0X2hlYWQgc19lYV9pbm9kZV90b19mcmVlO1xuK1x0c3RydWN0IGRlbGF5ZWRfd29yayBzX2VhX2lub2RlX3dvcms7XG4rXG4gXHRzcGlubG9ja190IHNfZXNfbG9jayBfX19fY2FjaGVsaW5lX2FsaWduZWRfaW5fc21wO1xuIFxuIFx0LyogSm91cm5hbCB0cmlnZ2VycyBmb3IgY2hlY2tzdW0gY29tcHV0YXRpb24gKi9cbmRpZmYgLS1naXQgYS9mcy9leHQ0L2lub2RlLmMgYi9mcy9leHQ0L2lub2RlLmNcbmluZGV4IGNlOTk4MDdjNWY1YjJjLi43NDdjNTJjMjMyY2MwMyAxMDA2NDRcbi0tLSBhL2ZzL2V4dDQvaW5vZGUuY1xuKysrIGIvZnMvZXh0NC9pbm9kZS5jXG5AQCAtMTc2LDcgKzE3Niw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0ICogKHhhdHRyIGJsb2NrIGZyZWVpbmcpLCBiaXRtYXAsIGdyb3VwIGRlc2NyaXB0b3IgKGlub2RlIGZyZWVpbmcpXG4gXHQgKi9cbiBcdGludCBleHRyYV9jcmVkaXRzID0gNjtcbi1cdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7XG4gXHRib29sIGZyZWV6ZV9wcm90ZWN0ZWQgPSBmYWxzZTtcbiBcbiBcdHRyYWNlX2V4dDRfZXZpY3RfaW5vZGUoaW5vZGUpO1xuQEAgLTI4MSw4ICsyODAsNyBAQCB2b2lkIGV4dDRfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcbiBcdH1cbiBcbiBcdC8qIFJlbW92ZSB4YXR0ciByZWZlcmVuY2VzLiAqL1xuLVx0ZXJyID0gZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlLCBpbm9kZSwgXHUwMDI2ZWFfaW5vZGVfYXJyYXksXG4tXHRcdFx0XHQgICAgICBleHRyYV9jcmVkaXRzKTtcbitcdGVyciA9IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZSwgaW5vZGUsIGV4dHJhX2NyZWRpdHMpO1xuIFx0aWYgKGVycikge1xuIFx0XHRleHQ0X3dhcm5pbmcoaW5vZGUtXHUwMDNlaV9zYiwgXCJ4YXR0ciBkZWxldGUgKGVyciAlZClcIiwgZXJyKTtcbiBzdG9wX2hhbmRsZTpcbkBAIC0yOTAsNyArMjg4LDYgQEAgdm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG4gXHRcdGV4dDRfb3JwaGFuX2RlbChOVUxMLCBpbm9kZSk7XG4gXHRcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxuIFx0XHRcdHNiX2VuZF9pbnR3cml0ZShpbm9kZS1cdTAwM2VpX3NiKTtcbi1cdFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiBcdFx0Z290byBub19kZWxldGU7XG4gXHR9XG4gXG5AQCAtMzIwLDcgKzMxNyw2IEBAIHZvaWQgZXh0NF9ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuIFx0ZXh0NF9qb3VybmFsX3N0b3AoaGFuZGxlKTtcbiBcdGlmIChmcmVlemVfcHJvdGVjdGVkKVxuIFx0XHRzYl9lbmRfaW50d3JpdGUoaW5vZGUtXHUwMDNlaV9zYik7XG4tXHRleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuIFx0cmV0dXJuO1xuIG5vX2RlbGV0ZTpcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC9zdXBlci5jIGIvZnMvZXh0NC9zdXBlci5jXG5pbmRleCAyNDVmNjdkMTBkZWQzNC4uM2VmYTVhODE3YmVmNGYgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3N1cGVyLmNcbisrKyBiL2ZzL2V4dDQvc3VwZXIuY1xuQEAgLTEzMDMsNiArMTMwMyw4IEBAIHN0YXRpYyB2b2lkIGV4dDRfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRcdFx0IFx1MDAyNnNiLVx1MDAzZXNfdXVpZCk7XG4gXG4gXHRleHQ0X3VucmVnaXN0ZXJfbGlfcmVxdWVzdChzYik7XG4rXHQvKiBEcmFpbiBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0cyB3aGlsZSBxdW90YSBpcyBzdGlsbCBhY3RpdmUuICovXG4rXHRmbHVzaF9kZWxheWVkX3dvcmsoXHUwMDI2c2JpLVx1MDAzZXNfZWFfaW5vZGVfd29yayk7XG4gXHRleHQ0X3F1b3Rhc19vZmYoc2IsIEVYVDRfTUFYUVVPVEFTKTtcbiBcbiBcdGRlc3Ryb3lfd29ya3F1ZXVlKHNiaS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSk7XG5AQCAtMTQyMyw2ICsxNDI1LDEzIEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfYWxsb2NfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcbiBcdG1lbXNldChcdTAwMjZlaS1cdTAwM2VpX2RxdW90LCAwLCBzaXplb2YoZWktXHUwMDNlaV9kcXVvdCkpO1xuICNlbmRpZlxuIFx0ZWktXHUwMDNlamlub2RlID0gTlVMTDtcbitcdC8qXG4rXHQgKiBSZWluaXRpYWxpemUgeGF0dHJfc2VtIGV2ZXJ5IGFsbG9jYXRpb24gYmVjYXVzZSBFQSBpbm9kZXNcbitcdCAqIHNoYXJlIHRoaXMgc3BhY2Ugd2l0aCBpX2VhX2lwdXRfbm9kZSAodmlhIHVuaW9uKSB3aGljaCBtYXlcbitcdCAqIGhhdmUgb3ZlcndyaXR0ZW4gdGhlIHNlbWFwaG9yZSB3aGVuIHRoZSBzbGFiIG9iamVjdCB3YXNcbitcdCAqIHByZXZpb3VzbHkgdXNlZCBhcyBhbiBFQSBpbm9kZS5cbitcdCAqL1xuK1x0aW5pdF9yd3NlbShcdTAwMjZlaS1cdTAwM2V4YXR0cl9zZW0pO1xuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZWktXHUwMDNlaV9yc3ZfY29udmVyc2lvbl9saXN0KTtcbiBcdHNwaW5fbG9ja19pbml0KFx1MDAyNmVpLVx1MDAzZWlfY29tcGxldGVkX2lvX2xvY2spO1xuIFx0ZWktXHUwMDNlaV9zeW5jX3RpZCA9IDA7XG5AQCAtMTQ4OCw3ICsxNDk3LDYgQEAgc3RhdGljIHZvaWQgaW5pdF9vbmNlKHZvaWQgKmZvbylcbiBcdHN0cnVjdCBleHQ0X2lub2RlX2luZm8gKmVpID0gZm9vO1xuIFxuIFx0SU5JVF9MSVNUX0hFQUQoXHUwMDI2ZWktXHUwMDNlaV9vcnBoYW4pO1xuLVx0aW5pdF9yd3NlbShcdTAwMjZlaS1cdTAwM2V4YXR0cl9zZW0pO1xuIFx0aW5pdF9yd3NlbShcdTAwMjZlaS1cdTAwM2VpX2RhdGFfc2VtKTtcbiBcdGlub2RlX2luaXRfb25jZShcdTAwMjZlaS1cdTAwM2V2ZnNfaW5vZGUpO1xuIFx0ZXh0NF9mY19pbml0X2lub2RlKFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG5AQCAtNTQ5Nyw2ICs1NTA1LDggQEAgc3RhdGljIGludCBfX2V4dDRfZmlsbF9zdXBlcihzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG4gXHRcdFx0ICBleHQ0X2hhc19mZWF0dXJlX29ycGhhbl9wcmVzZW50KHNiKSB8fFxuIFx0XHRcdCAgZXh0NF9oYXNfZmVhdHVyZV9qb3VybmFsX25lZWRzX3JlY292ZXJ5KHNiKSk7XG4gXG4rXHRleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzYmkpO1xuK1xuIFx0aWYgKGV4dDRfaGFzX2ZlYXR1cmVfbW1wKHNiKSBcdTAwMjZcdTAwMjYgIXNiX3Jkb25seShzYikpIHtcbiBcdFx0ZXJyID0gZXh0NF9tdWx0aV9tb3VudF9wcm90ZWN0KHNiLCBsZTY0X3RvX2NwdShlcy1cdTAwM2VzX21tcF9ibG9jaykpO1xuIFx0XHRpZiAoZXJyKVxuQEAgLTU3NDcsNiArNTc1Nyw4IEBAIHN0YXRpYyBpbnQgX19leHQ0X2ZpbGxfc3VwZXIoc3RydWN0IGZzX2NvbnRleHQgKmZjLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuIFx0cmV0dXJuIDA7XG4gXG4gZmFpbGVkX21vdW50OTpcbitcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBxdW90YSBzaHV0ZG93biAqL1xuK1x0Zmx1c2hfZGVsYXllZF93b3JrKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmspO1xuIFx0ZXh0NF9xdW90YXNfb2ZmKHNiLCBFWFQ0X01BWFFVT1RBUyk7XG4gZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBcdGV4dDRfcmVsZWFzZV9vcnBoYW5faW5mbyhzYik7XG5AQCAtNTc2Nyw2ICs1Nzc5LDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBcdGlmIChFWFQ0X1NCKHNiKS1cdTAwM2Vyc3ZfY29udmVyc2lvbl93cSlcbiBcdFx0ZGVzdHJveV93b3JrcXVldWUoRVhUNF9TQihzYiktXHUwMDNlcnN2X2NvbnZlcnNpb25fd3EpO1xuIGZhaWxlZF9tb3VudF93cTpcbitcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGJlZm9yZSBmcmVlaW5nIHN0cnVjdHVyZXMgKi9cbitcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcbiBcdGV4dDRfeGF0dHJfZGVzdHJveV9jYWNoZShzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSk7XG4gXHRzYmktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSA9IE5VTEw7XG4gXG5AQCAtNTc3Nyw2ICs1NzkxLDggQEAgZmFpbGVkX21vdW50ODogX19tYXliZV91bnVzZWRcbiBcdFx0ZXh0NF9qb3VybmFsX2Rlc3Ryb3koc2JpLCBzYmktXHUwMDNlc19qb3VybmFsKTtcbiBcdH1cbiBmYWlsZWRfbW91bnQzYTpcbitcdC8qIERyYWluIGRlZmVycmVkIEVBIGlub2RlIGlwdXRzIGZyb20gam91cm5hbCByZXBsYXkgKi9cbitcdGZsdXNoX2RlbGF5ZWRfd29yayhcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV93b3JrKTtcbiBcdGV4dDRfZXNfdW5yZWdpc3Rlcl9zaHJpbmtlcihzYmkpO1xuIGZhaWxlZF9tb3VudDM6XG4gXHQvKiBmbHVzaCBzX3NiX3VwZF93b3JrIGJlZm9yZSBzYmkgZGVzdHJveSAqL1xuZGlmZiAtLWdpdCBhL2ZzL2V4dDQveGF0dHIuYyBiL2ZzL2V4dDQveGF0dHIuY1xuaW5kZXggOTgyYTFmODMxZTIyODIuLjRhZTZjZTExMTU2NjBlIDEwMDY0NFxuLS0tIGEvZnMvZXh0NC94YXR0ci5jXG4rKysgYi9mcy9leHQ0L3hhdHRyLmNcbkBAIC0xMTQsMTAgKzExNCw2IEBAIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyc1tdID0ge1xuICNkZWZpbmUgRUFfSU5PREVfQ0FDSEUoaW5vZGUpXHQoKChzdHJ1Y3QgZXh0NF9zYl9pbmZvICopIFxcXG4gXHRcdFx0XHRpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZnNfaW5mbyktXHUwMDNlc19lYV9pbm9kZV9jYWNoZSlcbiBcbi1zdGF0aWMgaW50XG4tZXh0NF9leHBhbmRfaW5vZGVfYXJyYXkoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiplYV9pbm9kZV9hcnJheSxcbi1cdFx0XHRzdHJ1Y3QgaW5vZGUgKmlub2RlKTtcbi1cbiAjaWZkZWYgQ09ORklHX0xPQ0tERVBcbiB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfc2V0X2NsYXNzKHN0cnVjdCBpbm9kZSAqZWFfaW5vZGUpXG4ge1xuQEAgLTU2Nyw3ICs1NjMsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2dldChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBzdHJ1Y3QgZXh0NF94YXR0cl9lbnRyeSAqZW50cnksXG4gXHRcdFx0XHRcdGVhX2lub2RlLVx1MDAzZWlfaW5vLCB0cnVlIC8qIHJldXNhYmxlICovKTtcbiBcdH1cbiBvdXQ6XG4tXHRpcHV0KGVhX2lub2RlKTtcbitcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdHJldHVybiBlcnI7XG4gfVxuIFxuQEAgLTExMDQsMTAgKzExMDAsMTAgQEAgc3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2luY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX2luY19yZWYoaGFuZGxlLCBlYV9pbm9kZSk7XG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwiaW5jIHJlZiBlcnJvciAlZFwiLCBlcnIpO1xuLVx0XHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHRnb3RvIGNsZWFudXA7XG4gXHRcdH1cbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdH1cbiBcdHJldHVybiAwO1xuIFxuQEAgLTExMzMsNyArMTEyOSw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9pbm9kZV9pbmNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0aWYgKGVycilcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwiY2xlYW51cCBkZWMgcmVmIGVycm9yICVkXCIsXG4gXHRcdFx0XHRcdCAgIGVycik7XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHR9XG4gXHRyZXR1cm4gc2F2ZWRfZXJyO1xuIH1cbkBAIC0xMTYwLDcgKzExNTYsNiBAQCBzdGF0aWMgdm9pZFxuIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxuIFx0XHRcdCAgICAgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmZpcnN0LCBib29sIGJsb2NrX2NzdW0sXG4tXHRcdFx0ICAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdCAgICAgaW50IGV4dHJhX2NyZWRpdHMsIGJvb2wgc2tpcF9xdW90YSlcbiB7XG4gXHRzdHJ1Y3QgaW5vZGUgKmVhX2lub2RlO1xuQEAgLTExOTcsMTQgKzExOTIsNiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRpZiAoZXJyKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHRlcnIgPSBleHQ0X2V4cGFuZF9pbm9kZV9hcnJheShlYV9pbm9kZV9hcnJheSwgZWFfaW5vZGUpO1xuLVx0XHRpZiAoZXJyKSB7XG4tXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuLVx0XHRcdFx0XHQgICBcIkV4cGFuZCBpbm9kZSBhcnJheSBlcnI9JWRcIiwgZXJyKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuIFx0XHRlcnIgPSBleHQ0X2pvdXJuYWxfZW5zdXJlX2NyZWRpdHNfZm4oaGFuZGxlLCBjcmVkaXRzLCBjcmVkaXRzLFxuIFx0XHRcdGV4dDRfZnJlZV9tZXRhZGF0YV9yZXZva2VfY3JlZGl0cyhwYXJlbnQtXHUwMDNlaV9zYiwgMSksXG4gXHRcdFx0ZXh0NF94YXR0cl9yZXN0YXJ0X2ZuKGhhbmRsZSwgcGFyZW50LCBiaCwgYmxvY2tfY3N1bSxcbkBAIC0xMjEyLDYgKzExOTksNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRpZiAoZXJyIFx1MDAzYyAwKSB7XG4gXHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLCBcIkVuc3VyZSBjcmVkaXRzIGVycj0lZFwiLFxuIFx0XHRcdFx0XHQgICBlcnIpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHRjb250aW51ZTtcbiBcdFx0fVxuIFx0XHRpZiAoZXJyIFx1MDAzZSAwKSB7XG5AQCAtMTIyMSw2ICsxMjA5LDcgQEAgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcbiBcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHRcIlJlLWdldCB3cml0ZSBhY2Nlc3MgZXJyPSVkXCIsXG4gXHRcdFx0XHRcdFx0ZXJyKTtcbitcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHRcdGNvbnRpbnVlO1xuIFx0XHRcdH1cbiBcdFx0fVxuQEAgLTEyMjksNiArMTIxOCw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXG4gXHRcdGlmIChlcnIpIHtcbiBcdFx0XHRleHQ0X3dhcm5pbmdfaW5vZGUoZWFfaW5vZGUsIFwiZWFfaW5vZGUgZGVjIHJlZiBlcnI9JWRcIixcbiBcdFx0XHRcdFx0ICAgZXJyKTtcbitcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRcdFx0Y29udGludWU7XG4gXHRcdH1cbiBcbkBAIC0xMjQ1LDYgKzEyMzUsNyBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIFx0XHRlbnRyeS1cdTAwM2VlX3ZhbHVlX2ludW0gPSAwO1xuIFx0XHRlbnRyeS1cdTAwM2VlX3ZhbHVlX3NpemUgPSAwO1xuIFxuK1x0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRcdGRpcnR5ID0gdHJ1ZTtcbiBcdH1cbiBcbkBAIC0xMjcxLDcgKzEyNjIsNiBAQCBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqcGFyZW50LFxuIHN0YXRpYyB2b2lkXG4gZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0IHN0cnVjdCBidWZmZXJfaGVhZCAqYmgsXG4tXHRcdFx0IHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gXHRcdFx0IGludCBleHRyYV9jcmVkaXRzKVxuIHtcbiBcdHN0cnVjdCBtYl9jYWNoZSAqZWFfYmxvY2tfY2FjaGUgPSBFQV9CTE9DS19DQUNIRShpbm9kZSk7XG5AQCAtMTMxMyw3ICsxMzAzLDYgQEAgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBiaCxcbiBcdFx0XHRcdFx0XHQgICAgIEJGSVJTVChiaCksXG4gXHRcdFx0XHRcdFx0ICAgICB0cnVlIC8qIGJsb2NrX2NzdW0gKi8sXG4tXHRcdFx0XHRcdFx0ICAgICBlYV9pbm9kZV9hcnJheSxcbiBcdFx0XHRcdFx0XHQgICAgIGV4dHJhX2NyZWRpdHMsXG4gXHRcdFx0XHRcdFx0ICAgICB0cnVlIC8qIHNraXBfcXVvdGEgKi8pO1xuIFx0XHRleHQ0X2ZyZWVfYmxvY2tzKGhhbmRsZSwgaW5vZGUsIGJoLCAwLCAxLFxuQEAgLTE1MDUsNyArMTQ5NCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlKGhhbmRsZV90ICpoYW5kbGUsXG4gXHRcdFx0aWYgKGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZihoYW5kbGUsIGVhX2lub2RlKSlcbiBcdFx0XHRcdGV4dDRfd2FybmluZ19pbm9kZShlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XCJjbGVhbnVwIGRlYyByZWYgZXJyb3IgJWRcIiwgZXJyKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbiBcdFx0fVxuIFxuQEAgLTE1NjQsNyArMTU1Myw3IEBAIGV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSxcbiBcdFx0XHRrdmZyZWUoZWFfZGF0YSk7XG4gXHRcdFx0cmV0dXJuIGVhX2lub2RlO1xuIFx0XHR9XG4tXHRcdGlwdXQoZWFfaW5vZGUpO1xuK1x0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRuZXh0X2VudHJ5OlxuIFx0XHRjZSA9IG1iX2NhY2hlX2VudHJ5X2ZpbmRfbmV4dChlYV9pbm9kZV9jYWNoZSwgY2UpO1xuIFx0fVxuQEAgLTE2MTUsNyArMTYwNCw3IEBAIHN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxuIFx0XHRcdFx0ICAgICAgZWFfaW5vZGUtXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xuIFx0cmV0dXJuIGVhX2lub2RlO1xuIG91dF9lcnI6XG4tXHRpcHV0KGVhX2lub2RlKTtcbitcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgTlVMTCwgdmFsdWVfbGVuKTtcbiBcdHJldHVybiBFUlJfUFRSKGVycik7XG4gfVxuQEAgLTE4NDgsNyArMTgzNyw3IEBAIHN0YXRpYyBpbnQgZXh0NF94YXR0cl9zZXRfZW50cnkoc3RydWN0IGV4dDRfeGF0dHJfaW5mbyAqaSxcbiBcbiBcdHJldCA9IDA7XG4gb3V0OlxuLVx0aXB1dChvbGRfZWFfaW5vZGUpO1xuK1x0ZXh0NF9wdXRfZWFfaW5vZGUob2xkX2VhX2lub2RlKTtcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuQEAgLTIwMTAsNyArMTk5OSw3IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRvbGRfZWFfaW5vZGVfcXVvdGEgPSBsZTMyX3RvX2NwdShcbiBcdFx0XHRcdFx0XHRzLVx1MDAzZWhlcmUtXHUwMDNlZV92YWx1ZV9zaXplKTtcbiBcdFx0XHR9XG4tXHRcdFx0aXB1dCh0bXBfaW5vZGUpO1xuK1x0XHRcdGV4dDRfcHV0X2VhX2lub2RlKHRtcF9pbm9kZSk7XG4gXG4gXHRcdFx0cy1cdTAwM2VoZXJlLVx1MDAzZWVfdmFsdWVfaW51bSA9IDA7XG4gXHRcdFx0cy1cdTAwM2VoZXJlLVx1MDAzZWVfdmFsdWVfc2l6ZSA9IDA7XG5AQCAtMjE1MCw3ICsyMTM5LDcgQEAgZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRcdFx0ZXh0NF93YXJuaW5nX2lub2RlKGVhX2lub2RlLFxuIFx0XHRcdFx0XHRcdFx0ICAgXCJkZWMgcmVmIGVycm9yPSVkXCIsXG4gXHRcdFx0XHRcdFx0XHQgICBlcnJvcik7XG4tXHRcdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdFx0XHRcdGVhX2lub2RlID0gTlVMTDtcbiBcdFx0XHR9XG4gXG5AQCAtMjE4MiwxMiArMjE3MSw4IEBAIGV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXG4gXHQvKiBEcm9wIHRoZSBwcmV2aW91cyB4YXR0ciBibG9jay4gKi9cbiBcdGlmIChicy1cdTAwM2ViaCBcdTAwMjZcdTAwMjYgYnMtXHUwMDNlYmggIT0gbmV3X2JoKSB7XG4tXHRcdHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICplYV9pbm9kZV9hcnJheSA9IE5VTEw7XG4tXG4gXHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBicy1cdTAwM2ViaCxcbi1cdFx0XHRcdFx0IFx1MDAyNmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdFx0XHQgMCAvKiBleHRyYV9jcmVkaXRzICovKTtcbi1cdFx0ZXh0NF94YXR0cl9pbm9kZV9hcnJheV9mcmVlKGVhX2lub2RlX2FycmF5KTtcbiBcdH1cbiBcdGVycm9yID0gMDtcbiBcbkBAIC0yMjAzLDcgKzIxODgsNyBAQCBleHQ0X3hhdHRyX2Jsb2NrX3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXG4gXHRcdFx0XHRcdFx0ICAgIGlfc2l6ZV9yZWFkKGVhX2lub2RlKSk7XG4gXHRcdH1cbi1cdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKTtcbiBcdH1cbiBcdGlmIChjZSlcbiBcdFx0bWJfY2FjaGVfZW50cnlfcHV0KGVhX2Jsb2NrX2NhY2hlLCBjZSk7XG5AQCAtMjI4NSw3ICsyMjcwLDcgQEAgaW50IGV4dDRfeGF0dHJfaWJvZHlfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXG4gXHRcdFx0ZXh0NF94YXR0cl9pbm9kZV9mcmVlX3F1b3RhKGlub2RlLCBlYV9pbm9kZSxcbiBcdFx0XHRcdFx0XHQgICAgaV9zaXplX3JlYWQoZWFfaW5vZGUpKTtcbi1cdFx0XHRpcHV0KGVhX2lub2RlKTtcbitcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRcdH1cbiBcdFx0cmV0dXJuIGVycm9yO1xuIFx0fVxuQEAgLTIyOTcsNyArMjI4Miw3IEBAIGludCBleHQ0X3hhdHRyX2lib2R5X3NldChoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRoZWFkZXItXHUwMDNlaF9tYWdpYyA9IGNwdV90b19sZTMyKDApO1xuIFx0XHRleHQ0X2NsZWFyX2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX1hBVFRSKTtcbiBcdH1cbi1cdGlwdXQoZWFfaW5vZGUpO1xuK1x0ZXh0NF9wdXRfZWFfaW5vZGUoZWFfaW5vZGUpO1xuIFx0cmV0dXJuIDA7XG4gfVxuIFxuQEAgLTI4NjMsNDYgKzI4NDgsNiBAQCBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tI2RlZmluZSBFSUFfSU5DUiAxNiAvKiBtdXN0IGJlIDJebiAqL1xuLSNkZWZpbmUgRUlBX01BU0sgKEVJQV9JTkNSIC0gMSlcbi1cbi0vKiBBZGQgdGhlIGxhcmdlIHhhdHRyIEBpbm9kZSBpbnRvIEBlYV9pbm9kZV9hcnJheSBmb3IgZGVmZXJyZWQgaXB1dCgpLlxuLSAqIElmIEBlYV9pbm9kZV9hcnJheSBpcyBuZXcgb3IgZnVsbCBpdCB3aWxsIGJlIGdyb3duIGFuZCB0aGUgb2xkXG4tICogY29udGVudHMgY29waWVkIG92ZXIuXG4tICovXG4tc3RhdGljIGludFxuLWV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4tXHRcdFx0c3RydWN0IGlub2RlICppbm9kZSlcbi17XG4tXHRpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpIHtcbi1cdFx0Lypcbi1cdFx0ICogU3RhcnQgd2l0aCAxNSBpbm9kZXMsIHNvIGl0IGZpdHMgaW50byBhIHBvd2VyLW9mLXR3byBzaXplLlxuLVx0XHQgKi9cbi1cdFx0KCplYV9pbm9kZV9hcnJheSkgPSBrbWFsbG9jX2ZsZXgoKiplYV9pbm9kZV9hcnJheSwgaW5vZGVzLFxuLVx0XHRcdFx0XHRcdCBFSUFfTUFTSywgR0ZQX05PRlMpO1xuLVx0XHRpZiAoKmVhX2lub2RlX2FycmF5ID09IE5VTEwpXG4tXHRcdFx0cmV0dXJuIC1FTk9NRU07XG4tXHRcdCgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50ID0gMDtcbi1cdH0gZWxzZSBpZiAoKCgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50IFx1MDAyNiBFSUFfTUFTSykgPT0gRUlBX01BU0spIHtcbi1cdFx0LyogZXhwYW5kIHRoZSBhcnJheSBvbmNlIGFsbCAxNSArIG4gKiAxNiBzbG90cyBhcmUgZnVsbCAqL1xuLVx0XHRzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqbmV3X2FycmF5ID0gTlVMTDtcbi1cbi1cdFx0bmV3X2FycmF5ID0ga21hbGxvY19mbGV4KCoqZWFfaW5vZGVfYXJyYXksIGlub2Rlcyxcbi1cdFx0XHRcdFx0ICgqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50ICsgRUlBX0lOQ1IsXG4tXHRcdFx0XHRcdCBHRlBfTk9GUyk7XG4tXHRcdGlmIChuZXdfYXJyYXkgPT0gTlVMTClcbi1cdFx0XHRyZXR1cm4gLUVOT01FTTtcbi1cdFx0bWVtY3B5KG5ld19hcnJheSwgKmVhX2lub2RlX2FycmF5LFxuLVx0XHQgICAgICAgc3RydWN0X3NpemUoKmVhX2lub2RlX2FycmF5LCBpbm9kZXMsXG4tXHRcdFx0XHQgICAoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vjb3VudCkpO1xuLVx0XHRrZnJlZSgqZWFfaW5vZGVfYXJyYXkpO1xuLVx0XHQqZWFfaW5vZGVfYXJyYXkgPSBuZXdfYXJyYXk7XG4tXHR9XG4tXHQoKmVhX2lub2RlX2FycmF5KS1cdTAwM2Vjb3VudCsrO1xuLVx0KCplYV9pbm9kZV9hcnJheSktXHUwMDNlaW5vZGVzWygqZWFfaW5vZGVfYXJyYXkpLVx1MDAzZWNvdW50IC0gMV0gPSBpbm9kZTtcbi1cdHJldHVybiAwO1xuLX1cbi1cbiAvKlxuICAqIGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKClcbiAgKlxuQEAgLTI5MTMsNyArMjg1OCw2IEBAIGV4dDRfZXhwYW5kX2lub2RlX2FycmF5KHN0cnVjdCBleHQ0X3hhdHRyX2lub2RlX2FycmF5ICoqZWFfaW5vZGVfYXJyYXksXG4gICogcmVmZXJlbmNlcyBvbiB4YXR0ciBibG9jayBhbmQgeGF0dHIgaW5vZGVzLlxuICAqL1xuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdCAgICBzdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSAqKmVhX2lub2RlX2FycmF5LFxuIFx0XHRcdCAgICBpbnQgZXh0cmFfY3JlZGl0cylcbiB7XG4gXHRzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoID0gTlVMTDtcbkBAIC0yOTUyLDcgKzI4OTYsNiBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0XHRleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsKGhhbmRsZSwgaW5vZGUsIGlsb2MuYmgsXG4gXHRcdFx0XHRcdFx0ICAgICBJRklSU1QoaGVhZGVyKSxcbiBcdFx0XHRcdFx0XHQgICAgIGZhbHNlIC8qIGJsb2NrX2NzdW0gKi8sXG4tXHRcdFx0XHRcdFx0ICAgICBlYV9pbm9kZV9hcnJheSxcbiBcdFx0XHRcdFx0XHQgICAgIGV4dHJhX2NyZWRpdHMsXG4gXHRcdFx0XHRcdFx0ICAgICBmYWxzZSAvKiBza2lwX3F1b3RhICovKTtcbiBcdH1cbkBAIC0yOTg2LDEyICsyOTI5LDEyIEBAIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRcdFx0XHRjb250aW51ZTtcbiBcdFx0XHRcdGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShpbm9kZSwgZWFfaW5vZGUsXG4gXHRcdFx0XHRcdCAgICAgIGxlMzJfdG9fY3B1KGVudHJ5LVx1MDAzZWVfdmFsdWVfc2l6ZSkpO1xuLVx0XHRcdFx0aXB1dChlYV9pbm9kZSk7XG4rXHRcdFx0XHRleHQ0X3B1dF9lYV9pbm9kZShlYV9pbm9kZSk7XG4gXHRcdFx0fVxuIFxuIFx0XHR9XG4gXG4tXHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCwgZWFfaW5vZGVfYXJyYXksXG4rXHRcdGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9jayhoYW5kbGUsIGlub2RlLCBiaCxcbiBcdFx0XHRcdFx0IGV4dHJhX2NyZWRpdHMpO1xuIFx0XHQvKlxuIFx0XHQgKiBVcGRhdGUgaV9maWxlX2FjbCB2YWx1ZSBpbiB0aGUgc2FtZSB0cmFuc2FjdGlvbiB0aGF0IHJlbGVhc2VzXG5AQCAtMzAxMywxNiArMjk1Niw2MyBAQCBpbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcbiBcdHJldHVybiBlcnJvcjtcbiB9XG4gXG4tdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmVhX2lub2RlX2FycmF5KVxuKy8qXG4rICogV29ya2VyIGZ1bmN0aW9uIGZvciBkZWZlcnJlZCBFQSBpbm9kZSBpcHV0LiAgUHJvY2Vzc2VzIGFsbCBpbm9kZXMgcXVldWVkXG4rICogb24gc19lYV9pbm9kZV90b19mcmVlIGluIGEgY29udGV4dCBmcmVlIG9mIHhhdHRyX3NlbS9qYmQyIGhhbmRsZSBsb2Nrcy5cbisgKi9cbitzdGF0aWMgdm9pZCBleHQ0X2VhX2lub2RlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIHtcbi1cdGludCBpZHg7XG4rXHRzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkgPSBjb250YWluZXJfb2YodG9fZGVsYXllZF93b3JrKHdvcmspLFxuK1x0XHRcdFx0XHRcdHN0cnVjdCBleHQ0X3NiX2luZm8sXG4rXHRcdFx0XHRcdFx0c19lYV9pbm9kZV93b3JrKTtcbitcdHN0cnVjdCBsbGlzdF9ub2RlICpub2RlID0gbGxpc3RfZGVsX2FsbChcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbiBcbi1cdGlmIChlYV9pbm9kZV9hcnJheSA9PSBOVUxMKVxuK1x0d2hpbGUgKG5vZGUpIHtcbitcdFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbyAqZWkgPSBjb250YWluZXJfb2Yobm9kZSxcbitcdFx0XHRcdFx0c3RydWN0IGV4dDRfaW5vZGVfaW5mbywgaV9lYV9pcHV0X25vZGUpO1xuK1x0XHRub2RlID0gbm9kZS1cdTAwM2VuZXh0O1xuK1x0XHRpcHV0KFx1MDAyNmVpLVx1MDAzZXZmc19pbm9kZSk7XG4rXHR9XG4rfVxuK1xuKy8qXG4rICogUmVsZWFzZSBhIFZGUyByZWZlcmVuY2Ugb24gYW4gRUEgaW5vZGUuICBNdXN0IGJlIHVzZWQgaW5zdGVhZCBvZiBpcHV0KClcbisgKiBpbiBhbnkgY29udGV4dCB3aGVyZSB4YXR0cl9zZW0gb3IgYSBqYmQyIGhhbmRsZSBpcyBoZWxkLlxuKyAqXG4rICogSWYgdGhpcyBpcyBub3QgdGhlIGxhc3QgcmVmZXJlbmNlLCBkcm9wcyBpdCBpbW1lZGlhdGVseSB2aWFcbisgKiBpcHV0X2lmX25vdF9sYXN0KCkgd2l0aCBubyBmdXJ0aGVyIGFjdGlvbiBuZWVkZWQuXG4rICpcbisgKiBJZiB0aGlzIGlzIHRoZSBsYXN0IHJlZmVyZW5jZSwgdGhlIGlub2RlIGlzIGxpbmtlZCBvbnRvIGEgcGVyLXNiXG4rICogbGxpc3QgdmlhIGlfZWFfaXB1dF9ub2RlIChlbWJlZGRlZCBpbiBleHQ0X2lub2RlX2luZm8sIHNoYXJpbmcgc3BhY2VcbisgKiB3aXRoIHRoZSB1bnVzZWQgeGF0dHJfc2VtKSBhbmQgYSBkZWxheWVkIHdvcmtlciBwZXJmb3JtcyB0aGUgZmluYWxcbisgKiBpcHV0KCkgaW4gYSBjbGVhbiBjb250ZXh0LlxuKyAqXG4rICogTm90ZTogd2hpbGUgYW4gaW5vZGUgaXMgb24gc19lYV9pbm9kZV90b19mcmVlLCB0aGUgdW5jb25zdW1lZCBpX2NvdW50XG4rICogcmVmZXJlbmNlIChzdGlsbCAxKSBrZWVwcyBpdCBpbiB0aGUgaW5vZGUgY2FjaGUsIHNvIGFueSBjb25jdXJyZW50XG4rICogaWdldCgpIGJ1bXBzIGlfY291bnQgdG8gXHUwMDNlPSAyIGFuZCBpcHV0X2lmX25vdF9sYXN0KCkgd2lsbCBzdWNjZWVkLlxuKyAqIE5vYm9keSB3aWxsIGFkZCB0aGUgaW5vZGUgYSBzZWNvbmQgdGltZSB1bnRpbCBleHQ0X2VhX2lub2RlX3dvcmsoKVxuKyAqIGRyb3BzIHRoYXQgcmVmZXJlbmNlIHZpYSBpcHV0KCkuXG4rICovXG4rdm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdGlmICghaW5vZGUpXG4rXHRcdHJldHVybjtcbitcdFdBUk5fT05fT05DRSghKEVYVDRfSShpbm9kZSktXHUwMDNlaV9mbGFncyBcdTAwMjYgRVhUNF9FQV9JTk9ERV9GTCkpO1xuK1x0aWYgKGlwdXRfaWZfbm90X2xhc3QoaW5vZGUpKVxuIFx0XHRyZXR1cm47XG4rXHRsbGlzdF9hZGQoXHUwMDI2RVhUNF9JKGlub2RlKS1cdTAwM2VpX2VhX2lwdXRfbm9kZSxcbitcdFx0ICBcdTAwMjZFWFQ0X1NCKGlub2RlLVx1MDAzZWlfc2IpLVx1MDAzZXNfZWFfaW5vZGVfdG9fZnJlZSk7XG4rXHQvKlxuK1x0ICogVXNlIGEgc2hvcnQgZGVsYXkgdG8gYWxsb3cgbXVsdGlwbGUgRUEgaW5vZGVzIHRvIGFjY3VtdWxhdGUsXG4rXHQgKiByZWR1Y2luZyB3b3JrcXVldWUgd2FrZXVwcyB3aGVuIHNldmVyYWwgYXJlIHJlbGVhc2VkIHRvZ2V0aGVyLlxuK1x0ICovXG4rXHRzY2hlZHVsZV9kZWxheWVkX3dvcmsoXHUwMDI2RVhUNF9TQihpbm9kZS1cdTAwM2VpX3NiKS1cdTAwM2VzX2VhX2lub2RlX3dvcmssIDEpO1xuK31cbiBcbi1cdGZvciAoaWR4ID0gMDsgaWR4IFx1MDAzYyBlYV9pbm9kZV9hcnJheS1cdTAwM2Vjb3VudDsgKytpZHgpXG4tXHRcdGlwdXQoZWFfaW5vZGVfYXJyYXktXHUwMDNlaW5vZGVzW2lkeF0pO1xuLVx0a2ZyZWUoZWFfaW5vZGVfYXJyYXkpO1xuK3ZvaWQgZXh0NF9pbml0X2VhX2lub2RlX3dvcmsoc3RydWN0IGV4dDRfc2JfaW5mbyAqc2JpKVxuK3tcbitcdGluaXRfbGxpc3RfaGVhZChcdTAwMjZzYmktXHUwMDNlc19lYV9pbm9kZV90b19mcmVlKTtcbitcdElOSVRfREVMQVlFRF9XT1JLKFx1MDAyNnNiaS1cdTAwM2VzX2VhX2lub2RlX3dvcmssIGV4dDRfZWFfaW5vZGVfd29yayk7XG4gfVxuIFxuIC8qXG5kaWZmIC0tZ2l0IGEvZnMvZXh0NC94YXR0ci5oIGIvZnMvZXh0NC94YXR0ci5oXG5pbmRleCAxZmVkZjQ0ZDRmYjY1ZS4uODIxZGM2YTUwZTUxZTcgMTAwNjQ0XG4tLS0gYS9mcy9leHQ0L3hhdHRyLmhcbisrKyBiL2ZzL2V4dDQveGF0dHIuaFxuQEAgLTEzMSwxMSArMTMxLDYgQEAgc3RydWN0IGV4dDRfeGF0dHJfaWJvZHlfZmluZCB7XG4gXHRzdHJ1Y3QgZXh0NF9pbG9jIGlsb2M7XG4gfTtcbiBcbi1zdHJ1Y3QgZXh0NF94YXR0cl9pbm9kZV9hcnJheSB7XG4tXHR1bnNpZ25lZCBpbnQgY291bnQ7XG4tXHRzdHJ1Y3QgaW5vZGUgKmlub2Rlc1tdIF9fY291bnRlZF9ieShjb3VudCk7XG4tfTtcbi1cbiBleHRlcm4gY29uc3Qgc3RydWN0IHhhdHRyX2hhbmRsZXIgZXh0NF94YXR0cl91c2VyX2hhbmRsZXI7XG4gZXh0ZXJuIGNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyIGV4dDRfeGF0dHJfdHJ1c3RlZF9oYW5kbGVyO1xuIGV4dGVybiBjb25zdCBzdHJ1Y3QgeGF0dHJfaGFuZGxlciBleHQ0X3hhdHRyX3NlY3VyaXR5X2hhbmRsZXI7XG5AQCAtMTg3LDkgKzE4Miw5IEBAIGV4dGVybiBpbnQgX19leHQ0X3hhdHRyX3NldF9jcmVkaXRzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdFx0XHRib29sIGlzX2NyZWF0ZSk7XG4gXG4gZXh0ZXJuIGludCBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZShoYW5kbGVfdCAqaGFuZGxlLCBzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLVx0XHRcdFx0ICAgc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKiphcnJheSxcbiBcdFx0XHRcdCAgIGludCBleHRyYV9jcmVkaXRzKTtcbi1leHRlcm4gdm9pZCBleHQ0X3hhdHRyX2lub2RlX2FycmF5X2ZyZWUoc3RydWN0IGV4dDRfeGF0dHJfaW5vZGVfYXJyYXkgKmFycmF5KTtcbitleHRlcm4gdm9pZCBleHQ0X2luaXRfZWFfaW5vZGVfd29yayhzdHJ1Y3QgZXh0NF9zYl9pbmZvICpzYmkpO1xuK2V4dGVybiB2b2lkIGV4dDRfcHV0X2VhX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpO1xuIFxuIGV4dGVybiBpbnQgZXh0NF9leHBhbmRfZXh0cmFfaXNpemVfZWEoc3RydWN0IGlub2RlICppbm9kZSwgaW50IG5ld19leHRyYV9pc2l6ZSxcbiBcdFx0XHQgICAgc3RydWN0IGV4dDRfaW5vZGUgKnJhd19pbm9kZSwgaGFuZGxlX3QgKmhhbmRsZSk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9mcy5oIGIvaW5jbHVkZS9saW51eC9mcy5oXG5pbmRleCBkMTA4OTdiM2ExZTM1MC4uNzA5NTE5NjE3YzdhMzggMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2ZzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvZnMuaFxuQEAgLTI0MTMsNiArMjQxMywyMSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc3VwZXJfc2V0X3N5c2ZzX25hbWVfZ2VuZXJpYyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCBjb25zdCBjaFxuIGV4dGVybiB2b2lkIGlob2xkKHN0cnVjdCBpbm9kZSAqIGlub2RlKTtcbiBleHRlcm4gdm9pZCBpcHV0KHN0cnVjdCBpbm9kZSAqKTtcbiB2b2lkIGlwdXRfbm90X2xhc3Qoc3RydWN0IGlub2RlICopO1xuK1xuKy8qKlxuKyAqIGlwdXRfaWZfbm90X2xhc3QgLSBkcm9wIGFuIGlub2RlIHJlZmVyZW5jZSBvbmx5IGlmIGl0IGlzIG5vdCB0aGUgbGFzdCBvbmVcbisgKiBAaW5vZGU6IGlub2RlIHRvIHB1dFxuKyAqXG4rICogUmV0dXJucyB0cnVlIGlmIHRoZSByZWZlcmVuY2Ugd2FzIGRyb3BwZWQsIGZhbHNlIGlmIHRoaXMgd2FzIHRoZSBsYXN0XG4rICogcmVmZXJlbmNlIGFuZCB0aGUgY2FsbGVyIG11c3QgYXJyYW5nZSBmb3IgZmluYWwgaXB1dCgpIGluIGEgc2FmZSBjb250ZXh0LlxuKyAqL1xuK3N0YXRpYyBpbmxpbmUgYm9vbCBfX211c3RfY2hlY2sgaXB1dF9pZl9ub3RfbGFzdChzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuK3tcbitcdFZGU19CVUdfT05fSU5PREUoaW5vZGVfc3RhdGVfcmVhZF9vbmNlKGlub2RlKSBcdTAwMjYgKElfRlJFRUlORyB8IElfQ0xFQVIpLCBpbm9kZSk7XG4rXHRWRlNfQlVHX09OX0lOT0RFKGljb3VudF9yZWFkX29uY2UoaW5vZGUpIFx1MDAzYyAxLCBpbm9kZSk7XG4rXHRyZXR1cm4gYXRvbWljX2FkZF91bmxlc3MoXHUwMDI2aW5vZGUtXHUwMDNlaV9jb3VudCwgLTEsIDEpO1xuK31cbitcbiBpbnQgaW5vZGVfdXBkYXRlX3RpbWUoc3RydWN0IGlub2RlICppbm9kZSwgZW51bSBmc191cGRhdGVfdGltZSB0eXBlLFxuIFx0XHR1bnNpZ25lZCBpbnQgZmxhZ3MpO1xuIGludCBnZW5lcmljX3VwZGF0ZV90aW1lKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGVudW0gZnNfdXBkYXRlX3RpbWUgdHlwZSxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjEwOjQxLjI0ODg1MTA2NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkzMDI2ODc4MzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUGF0Y2g6IEV4dGVuZGVkIEF0dHJpYnV0ZSAoRUEpIElub2RlIERlZmVycmFsIGluIGV4dDQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQncyBmdW5kYW1lbnRhbGx5IGNoYW5naW5nIGhvdyBleHQ0IGhhbmRsZXMgRXh0ZW5kZWQgQXR0cmlidXRlIChFQSkgaW5vZGVzLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gdGhlIGZyZWVpbmcgcHJvY2Vzcy4gVGhlIGFpbSBzZWVtcyB0byBiZSBhZGRyZXNzaW5nIGxvY2sgb3JkZXJpbmcgaXNzdWVzLCB3aGljaCBpcyBhbHdheXMgYSBnb29kIHRoaW5nLiBUaGV5J3JlIGltcGxlbWVudGluZyBhIGRlZmVycmVkIGBpcHV0YCBtZWNoYW5pc20gZm9yIEVBIGlub2Rlcy4gU21hcnQsIHVzaW5nIGBzX2VhX2lub2RlX3RvX2ZyZWVgIGFuZCBgc19lYV9pbm9kZV93b3JrYCB3aXRoaW4gdGhlIGBleHQ0X3NiX2luZm9gIHN0cnVjdHVyZSBpcyBhIHNvbGlkIGFwcHJvYWNoIGZvciB0aGlzIGtpbmQgb2YgZGVsYXllZCBvcGVyYXRpb24uIFRoZSBhZGRpdGlvbiBvZiBgaXB1dF9pZl9ub3RfbGFzdGAgaXMgYWxzbyBleHBlY3RlZC4gVGhlIHNoaWZ0IGZyb20gYGV4dDRfeGF0dHJfaW5vZGVfYXJyYXlgIHRvIGEgbG9ja2xlc3MgbGlzdCAoYGxsaXN0X25vZGUgaV9lYV9pcHV0X25vZGVgIGluIGBzdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvYCkgaXMgYSBub3RhYmxlIGFyY2hpdGVjdHVyYWwgY2hhbmdlLCBhbmQgcG90ZW50aWFsbHkgYSBwZXJmb3JtYW5jZSBpbXByb3ZlbWVudC4gVGhpcyBkZWZpbml0ZWx5IHdhcnJhbnRzIGNsb3NlIHNjcnV0aW55LlxuXG5UaGlzIGlzIGEgY29yZSBmdW5jdGlvbmFsIGNoYW5nZSwgbm8gZG91YnQgYWJvdXQgaXQuIFdlIHNob3VsZCBkZWZpbml0ZWx5IGluY2x1ZGUgdGhpcyBpbiB0aGUgZnV6emluZyBwcm9jZXNzIOKAkyBgV29ydGhGdXp6aW5nPXRydWVgIGlzIHNwb3Qgb24uXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyB0aGF0IGFyZSBiZWluZyBtb2RpZmllZCBvciBhZGRlZC4gVGhlIGNvZGUgdG91Y2hlcyBhIHNpZ25pZmljYW50IG51bWJlciBvZiBmdW5jdGlvbnMgcmVsYXRlZCB0byBFQSBpbm9kZSBtYW5hZ2VtZW50OiBgZXh0NF9lYV9pbm9kZV93b3JrYCwgYGV4dDRfcHV0X2VhX2lub2RlYCwgYGV4dDRfaW5pdF9lYV9pbm9kZV93b3JrYCwgYW5kIGNvcmUgeGF0dHIgZnVuY3Rpb25zIGxpa2UgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYCwgYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2AsIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYCwgYGV4dDRfeGF0dHJfaW5vZGVfaW5jX3JlZl9hbGxgLCBhbmQgc28gb24uXG5cbkhvd2V2ZXIsIEknbSBmb2N1c2luZyBteSBhdHRlbnRpb24gcHJpbWFyaWx5IG9uIHRoZSBmb2xsb3dpbmcgZm9yIHRoaXMgaW5pdGlhbCBhbmFseXNpczogYGV4dDRfZWFfaW5vZGVfd29ya2AsIHdoaWNoIGlzIHRoZSBjb3JlIGRlZmVycmVkIHdvcmssIGBleHQ0X3B1dF9lYV9pbm9kZWAsIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAsIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAsIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGAsIGFuZCBgZXh0NF94YXR0cl9pYm9keV9zZXRgIGFzIHRoZXkgYXJlIHRoZSBtb3N0IGNyaXRpY2FsIGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMuXG5cbkdpdmVuIHRoYXQgdGhpcyBhZmZlY3RzIGNvcmUgZXh0NCBFQSBoYW5kbGluZywgY29uZmlndXJhdGlvbiBpcyBpbXBvcnRhbnQuIFRoZSBjb2RlIHJlc2lkZXMgd2l0aGluIGBmcy9leHQ0L2AsIGFuZCB0aGUgcmVsZXZhbnQgY29uZmlnIGlzIGBFWFQ0X0ZTYC4gQnV0LCBJIG5lZWQgdG8gY2hlY2sgZm9yIGFueSBzcGVjaWZpYyBjb25maWdzIHJlbGF0ZWQgdG8gRUEgaW5vZGVzLiBMZXQncyBkZWx2ZSBpbnRvIHRoZSBgZnMvZXh0NC9LY29uZmlnYCBmaWxlIG9yIHBlcmZvcm0gYSBxdWljayBncmVwIGZvciBcIkVBX0lOT0RFXCIuIFJlbGF0ZWQgY29uZmlncyBsaWtlIGBFWFQ0X0ZTX1BPU0lYX0FDTGAgYW5kIGBFWFQ0X0ZTX1NFQ1VSSVRZYCBhcmUgcmVsYXRlZCB0byB4YXR0cnMgYnV0IEVBIGlub2RlcyBhcmUgZnVuZGFtZW50YWwgYW5kIEkgc3VzcGVjdCBFQSBpbm9kZXMgYXJlIGEgZmVhdHVyZSBvZiBleHQ0LCB3aGljaCBtYWtlcyBtZSBzdXNwZWN0IGl0IGRlcGVuZHMgb24gYEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9FQV9JTk9ERWAuIE5lZWQgdG8gdmVyaWZ5IHRoaXMgcXVpY2tseS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQ2NSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjEwOjUwLjU1MTU3MTM1NVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjcwODUwMzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRUFfSU5PREVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC9leHQ0Lmg9NDQwPXN0cnVjdCBmbGV4X2dyb3VwcyB7XFxuLS1cXG5mcy9leHQ0L2V4dDQuaC01MDQtI2RlZmluZSBFWFQ0X1ZFUklUWV9GTFxcdFxcdFxcdDB4MDAxMDAwMDAgLyogVmVyaXR5IHByb3RlY3RlZCBpbm9kZSAqL1xcbmZzL2V4dDQvZXh0NC5oOjUwNTojZGVmaW5lIEVYVDRfRUFfSU5PREVfRkxcXHQgICAgICAgIDB4MDAyMDAwMDAgLyogSW5vZGUgdXNlZCBmb3IgbGFyZ2UgRUEgKi9cXG5mcy9leHQ0L2V4dDQuaC01MDYtLyogMHgwMDQwMDAwMCB3YXMgZm9ybWVybHkgRVhUNF9FT0ZCTE9DS1NfRkwgKi9cXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTU4MD1lbnVtIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTYwMy1cXHRFWFQ0X0lOT0RFX1ZFUklUWVxcdD0gMjAsXFx0LyogVmVyaXR5IHByb3RlY3RlZCBpbm9kZSAqL1xcbmZzL2V4dDQvZXh0NC5oOjYwNDpcXHRFWFQ0X0lOT0RFX0VBX0lOT0RFXFx0PSAyMSxcXHQvKiBJbm9kZSB1c2VkIGZvciBsYXJnZSBFQSAqL1xcbmZzL2V4dDQvZXh0NC5oLTYwNS0vKiAyMiB3YXMgZm9ybWVybHkgRVhUNF9JTk9ERV9FT0ZCTE9DS1MgKi9cXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTYyOT1zdGF0aWMgaW5saW5lIHZvaWQgZXh0NF9jaGVja19mbGFnX3ZhbHVlcyh2b2lkKVxcbi0tXFxuZnMvZXh0NC9leHQ0LmgtNjUxLVxcdENIRUNLX0ZMQUdfVkFMVUUoVkVSSVRZKTtcXG5mcy9leHQ0L2V4dDQuaDo2NTI6XFx0Q0hFQ0tfRkxBR19WQUxVRShFQV9JTk9ERSk7XFxuZnMvZXh0NC9leHQ0LmgtNjUzLVxcdENIRUNLX0ZMQUdfVkFMVUUoSU5MSU5FX0RBVEEpO1xcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MTA0OD1zdHJ1Y3QgZXh0NF9pbm9kZV9pbmZvIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTEwNzMtXFx0ICpcXG5mcy9leHQ0L2V4dDQuaDoxMDc0OlxcdCAqIEVBIGlub2RlcyAoRVhUNF9FQV9JTk9ERV9GTCkgZG8gbm90IHVzZSB4YXR0cl9zZW07IHRoZXkgcmV1c2VcXG5mcy9leHQ0L2V4dDQuaC0xMDc1LVxcdCAqIHRoZSBzcGFjZSBmb3IgZGVmZXJyZWQgaXB1dCBsaW5rYWdlLlxcbi0tXFxuZnMvZXh0NC9leHQ0Lmg9MjAzNz1lbnVtIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTIwNDUtXFx0RVhUNF9TVEFURV9FWFRfUFJFQ0FDSEVELFxcdC8qIGV4dGVudHMgaGF2ZSBiZWVuIHByZWNhY2hlZCAqL1xcbmZzL2V4dDQvZXh0NC5oOjIwNDY6XFx0RVhUNF9TVEFURV9MVVNUUkVfRUFfSU5PREUsXFx0LyogTHVzdHJlLXN0eWxlIGVhX2lub2RlICovXFxuZnMvZXh0NC9leHQ0LmgtMjA0Ny1cXHRFWFQ0X1NUQVRFX1ZFUklUWV9JTl9QUk9HUkVTUyxcXHQvKiBidWlsZGluZyBmcy12ZXJpdHkgTWVya2xlIHRyZWUgKi9cXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTIxMzQ9c3RhdGljIGlubGluZSBib29sIGV4dDRfaW5vZGVfb3JwaGFuX3RyYWNrZWQoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTIyMTUtI2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRkxFWF9CR1xcdFxcdDB4MDIwMFxcbmZzL2V4dDQvZXh0NC5oOjIyMTY6I2RlZmluZSBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRUFfSU5PREVcXHRcXHQweDA0MDAgLyogRUEgaW4gaW5vZGUgKi9cXG5mcy9leHQ0L2V4dDQuaC0yMjE3LSNkZWZpbmUgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0RJUkRBVEFcXHRcXHQweDEwMDAgLyogZGF0YSBpbiBkaXJlbnQgKi9cXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTIzMTQ9RVhUNF9GRUFUVVJFX0lOQ09NUEFUX0ZVTkNTKGZsZXhfYmcsXFx0XFx0RkxFWF9CRylcXG5mcy9leHQ0L2V4dDQuaDoyMzE1OkVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GVU5DUyhlYV9pbm9kZSxcXHRcXHRFQV9JTk9ERSlcXG5mcy9leHQ0L2V4dDQuaC0yMzE2LUVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GVU5DUyhkaXJkYXRhLFxcdFxcdERJUkRBVEEpXFxuLS1cXG5mcy9leHQ0L2V4dDQuaD0yMzIxPUVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GVU5DUyhjYXNlZm9sZCxcXHRcXHRDQVNFRk9MRClcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTIzNDUtXFx0XFx0XFx0XFx0XFx0IEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9GTEVYX0JHfCBcXFxcXFxuZnMvZXh0NC9leHQ0Lmg6MjM0NjpcXHRcXHRcXHRcXHRcXHQgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX0VBX0lOT0RFfCBcXFxcXFxuZnMvZXh0NC9leHQ0LmgtMjM0Ny1cXHRcXHRcXHRcXHRcXHQgRVhUNF9GRUFUVVJFX0lOQ09NUEFUX01NUCB8IFxcXFxcXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTI3MDI9c3RhdGljIGlubGluZSBib29sIGV4dDRfaXNfcXVvdGFfZmlsZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9leHQ0LmgtMjcwNC1cXHRyZXR1cm4gSVNfTk9RVU9UQShpbm9kZSkgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L2V4dDQuaDoyNzA1OlxcdCAgICAgICAhKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKTtcXG5mcy9leHQ0L2V4dDQuaC0yNzA2LX1cXG4tLVxcbmZzL2V4dDQvZXh0NC5oPTMxNTM9dHlwZWRlZiBlbnVtIHtcXG4tLVxcbmZzL2V4dDQvZXh0NC5oLTMxNTctXFx0RVhUNF9JR0VUX0JBRCA9XFx0XFx0MHgwMDA0LCAvKiBBbGxvdyB0byBpZ2V0IGEgYmFkIGlub2RlICovXFxuZnMvZXh0NC9leHQ0Lmg6MzE1ODpcXHRFWFQ0X0lHRVRfRUFfSU5PREUgPVxcdDB4MDAwOFxcdC8qIElub2RlIHNob3VsZCBjb250YWluIGFuIEVBIHZhbHVlICovXFxuZnMvZXh0NC9leHQ0LmgtMzE1OS19IGV4dDRfaWdldF9mbGFncztcXG4tLVxcbmZzL2V4dDQvZXh0NF9qYmQyLmM9MTA9aW50IGV4dDRfaW5vZGVfam91cm5hbF9tb2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2V4dDRfamJkMi5jLTE1LVxcdGlmICghU19JU1JFRyhpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fFxcbmZzL2V4dDQvZXh0NF9qYmQyLmM6MTY6XFx0ICAgIGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VBX0lOT0RFKSB8fFxcbmZzL2V4dDQvZXh0NF9qYmQyLmMtMTctXFx0ICAgIHRlc3Rfb3B0KGlub2RlLVxcdTAwM2VpX3NiLCBEQVRBX0ZMQUdTKSA9PSBFWFQ0X01PVU5UX0pPVVJOQUxfREFUQSB8fFxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmM9MjQzNz1zdGF0aWMgaW5saW5lIGludCBnZXRfZGVmYXVsdF9mcmVlX2Jsb2Nrc19mbGFncyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC9leHRlbnRzLmMtMjQzOS1cXHRpZiAoU19JU0RJUihpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fCBTX0lTTE5LKGlub2RlLVxcdTAwM2VpX21vZGUpIHx8XFxuZnMvZXh0NC9leHRlbnRzLmM6MjQ0MDpcXHQgICAgZXh0NF90ZXN0X2lub2RlX2ZsYWcoaW5vZGUsIEVYVDRfSU5PREVfRUFfSU5PREUpKVxcbmZzL2V4dDQvZXh0ZW50cy5jLTI0NDEtXFx0XFx0cmV0dXJuIEVYVDRfRlJFRV9CTE9DS1NfTUVUQURBVEEgfCBFWFQ0X0ZSRUVfQkxPQ0tTX0ZPUkdFVDtcXG4tLVxcbmZzL2V4dDQvaWFsbG9jLmM9OTMzPXN0cnVjdCBpbm9kZSAqX19leHQ0X25ld19pbm9kZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL2V4dDQvaWFsbG9jLmMtOTk1LVxcbmZzL2V4dDQvaWFsbG9jLmM6OTk2OlxcdGlmICghKGlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSkge1xcbmZzL2V4dDQvaWFsbG9jLmMtOTk3LVxcdFxcdGVyciA9IGZzY3J5cHRfcHJlcGFyZV9uZXdfaW5vZGUoZGlyLCBpbm9kZSwgXFx1MDAyNmVuY3J5cHQpO1xcbi0tXFxuZnMvZXh0NC9pYWxsb2MuYy0xMDA1LVxcbmZzL2V4dDQvaWFsbG9jLmM6MTAwNjpcXHRpZiAoIWhhbmRsZSBcXHUwMDI2XFx1MDAyNiBzYmktXFx1MDAzZXNfam91cm5hbCBcXHUwMDI2XFx1MDAyNiAhKGlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSkge1xcbmZzL2V4dDQvaWFsbG9jLmMtMTAwNy1cXHRcXHRyZXQyID0gZXh0NF94YXR0cl9jcmVkaXRzX2Zvcl9uZXdfaW5vZGUoZGlyLCBtb2RlLCBlbmNyeXB0KTtcXG4tLVxcbmZzL2V4dDQvaWFsbG9jLmMtMTMwOC1cXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9pbmxpbmVfZGF0YShzYikgXFx1MDAyNlxcdTAwMjZcXG5mcy9leHQ0L2lhbGxvYy5jOjEzMDk6XFx0ICAgICghKGVpLVxcdTAwM2VpX2ZsYWdzIFxcdTAwMjYgKEVYVDRfREFYX0ZMfEVYVDRfRUFfSU5PREVfRkwpKSB8fCBTX0lTRElSKG1vZGUpKSlcXG5mcy9leHQ0L2lhbGxvYy5jLTEzMTAtXFx0XFx0ZXh0NF9zZXRfaW5vZGVfc3RhdGUoaW5vZGUsIEVYVDRfU1RBVEVfTUFZX0lOTElORV9EQVRBKTtcXG4tLVxcbmZzL2V4dDQvaWFsbG9jLmMtMTMyNi1cXG5mcy9leHQ0L2lhbGxvYy5jOjEzMjc6XFx0aWYgKCEoZWktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSkge1xcbmZzL2V4dDQvaWFsbG9jLmMtMTMyOC1cXHRcXHRlcnIgPSBleHQ0X2luaXRfYWNsKGhhbmRsZSwgaW5vZGUsIGRpcik7XFxuLS1cXG5mcy9leHQ0L2luZGlyZWN0LmM9ODU3PXN0YXRpYyBpbnQgZXh0NF9jbGVhcl9ibG9ja3MoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQvaW5kaXJlY3QuYy04NjctXFx0aWYgKFNfSVNESVIoaW5vZGUtXFx1MDAzZWlfbW9kZSkgfHwgU19JU0xOSyhpbm9kZS1cXHUwMDNlaV9tb2RlKSB8fFxcbmZzL2V4dDQvaW5kaXJlY3QuYzo4Njg6XFx0ICAgIGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VBX0lOT0RFKSlcXG5mcy9leHQ0L2luZGlyZWN0LmMtODY5LVxcdFxcdGZsYWdzIHw9IEVYVDRfRlJFRV9CTE9DS1NfRk9SR0VUIHwgRVhUNF9GUkVFX0JMT0NLU19NRVRBREFUQTtcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz0xNjk9dm9pZCBleHQ0X2V2aWN0X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtMTg0LVxcbmZzL2V4dDQvaW5vZGUuYzoxODU6XFx0aWYgKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKVxcbmZzL2V4dDQvaW5vZGUuYy0xODYtXFx0XFx0ZXh0NF9ldmljdF9lYV9pbm9kZShpbm9kZSk7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NDM0PXZvaWQgZXh0NF9jaGVja19tYXBfZXh0ZW50c19lbnYoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy00NDItXFx0ICAgIChpbm9kZV9zdGF0ZV9yZWFkX29uY2UoaW5vZGUpIFxcdTAwMjYgKElfRlJFRUlORyB8IElfV0lMTF9GUkVFIHwgSV9ORVcpKSB8fFxcbmZzL2V4dDQvaW5vZGUuYzo0NDM6XFx0ICAgIGV4dDRfdGVzdF9pbm9kZV9mbGFnKGlub2RlLCBFWFQ0X0lOT0RFX0VBX0lOT0RFKSB8fFxcbmZzL2V4dDQvaW5vZGUuYy00NDQtXFx0ICAgIGV4dDRfdmVyaXR5X2luX3Byb2dyZXNzKGlub2RlKSlcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYz00Njk3PXN0YXRpYyBpbmxpbmUgdTY0IGV4dDRfaW5vZGVfcGVla19pdmVyc2lvbihjb25zdCBzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2V4dDQvaW5vZGUuYy00Njk4LXtcXG5mcy9leHQ0L2lub2RlLmM6NDY5OTpcXHRpZiAodW5saWtlbHkoRVhUNF9JKGlub2RlKS1cXHUwMDNlaV9mbGFncyBcXHUwMDI2IEVYVDRfRUFfSU5PREVfRkwpKVxcbmZzL2V4dDQvaW5vZGUuYy00NzAwLVxcdFxcdHJldHVybiBpbm9kZV9wZWVrX2l2ZXJzaW9uX3Jhdyhpbm9kZSk7XFxuLS1cXG5mcy9leHQ0L2lub2RlLmM9NTE5MD1pbnQgZXh0NF9nZXRfcHJvamlkKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGtwcm9qaWRfdCAqcHJvamlkKVxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUxOTktICogZXh0NCBoYXMgc2VsZi1tYW5hZ2VkIGlfdmVyc2lvbiBmb3IgZWEgaW5vZGVzLCBpdCBzdG9yZXMgdGhlIGxvd2VyIDMyYml0IG9mXFxuZnMvZXh0NC9pbm9kZS5jOjUyMDA6ICogcmVmY291bnQgaW4gaV92ZXJzaW9uLCBzbyB1c2UgcmF3IHZhbHVlcyBpZiBpbm9kZSBoYXMgRVhUNF9FQV9JTk9ERV9GTCBmbGFnXFxuZnMvZXh0NC9pbm9kZS5jLTUyMDEtICogc2V0Llxcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTUyMDM9c3RhdGljIGlubGluZSB2b2lkIGV4dDRfaW5vZGVfc2V0X2l2ZXJzaW9uX3F1ZXJpZWQoc3RydWN0IGlub2RlICppbm9kZSwgdTY0IHZhbClcXG5mcy9leHQ0L2lub2RlLmMtNTIwNC17XFxuZnMvZXh0NC9pbm9kZS5jOjUyMDU6XFx0aWYgKHVubGlrZWx5KEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSlcXG5mcy9leHQ0L2lub2RlLmMtNTIwNi1cXHRcXHRpbm9kZV9zZXRfaXZlcnNpb25fcmF3KGlub2RlLCB2YWwpO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jPTUyMTE9c3RhdGljIGludCBjaGVja19pZ290X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGV4dDRfaWdldF9mbGFncyBmbGFncyxcXG4tLVxcbmZzL2V4dDQvaW5vZGUuYy01MjE1LVxcbmZzL2V4dDQvaW5vZGUuYzo1MjE2OlxcdGlmIChmbGFncyBcXHUwMDI2IEVYVDRfSUdFVF9FQV9JTk9ERSkge1xcbmZzL2V4dDQvaW5vZGUuYzo1MjE3OlxcdFxcdGlmICghKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSkge1xcbmZzL2V4dDQvaW5vZGUuYzo1MjE4OlxcdFxcdFxcdGVycl9zdHIgPSBcXFwibWlzc2luZyBFQV9JTk9ERSBmbGFnXFxcIjtcXG5mcy9leHQ0L2lub2RlLmMtNTIxOS1cXHRcXHRcXHRnb3RvIGVycm9yO1xcbi0tXFxuZnMvZXh0NC9pbm9kZS5jLTUyMjYtXFx0fSBlbHNlIHtcXG5mcy9leHQ0L2lub2RlLmM6NTIyNzpcXHRcXHRpZiAoKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSkge1xcbmZzL2V4dDQvaW5vZGUuYy01MjI4LVxcdFxcdFxcdC8qXFxuLS1cXG5mcy9leHQ0L2lub2RlLmMtNTIzNC1cXHRcXHRcXHRcXHRyZXR1cm4gLUVTVEFMRTtcXG5mcy9leHQ0L2lub2RlLmM6NTIzNTpcXHRcXHRcXHRlcnJfc3RyID0gXFxcInVuZXhwZWN0ZWQgRUFfSU5PREUgZmxhZ1xcXCI7XFxuZnMvZXh0NC9pbm9kZS5jLTUyMzYtXFx0XFx0XFx0Z290byBlcnJvcjtcXG4tLVxcbmZzL2V4dDQvaW9jdGwuYz0xMjA1PXN0YXRpYyBpbnQgZXh0NF9pb2N0bF9zZXR1dWlkKHN0cnVjdCBmaWxlICpmaWxwLFxcbi0tXFxuZnMvZXh0NC9pb2N0bC5jLTEyNjEtXFx0XFx0KEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9FWFRFTlRTIHxcXHRcXFxcXFxuZnMvZXh0NC9pb2N0bC5jOjEyNjI6XFx0XFx0IEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9FQV9JTk9ERSB8XFx0XFxcXFxcbmZzL2V4dDQvaW9jdGwuYy0xMjYzLVxcdFxcdCBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRU5DUllQVCB8XFx0XFxcXFxcbi0tXFxuZnMvZXh0NC92ZXJpdHkuYy0xNS0gKiBieSBleHQ0IHdpdGggb25seSBzb21lIHJlbGF0aXZlbHkgc21hbGwgY2hhbmdlcyB0byBleHQ0LiAgVGhpcyBhcHByb2FjaFxcbmZzL2V4dDQvdmVyaXR5LmM6MTY6ICogYXZvaWRzIGhhdmluZyB0byBkZXBlbmQgb24gdGhlIEVBX0lOT0RFIGZlYXR1cmUgYW5kIG9uIHJlYXJjaGl0ZWN0dXJpbmdcXG5mcy9leHQ0L3Zlcml0eS5jLTE3LSAqIGV4dDQncyB4YXR0ciBzdXBwb3J0IHRvIHN1cHBvcnQgcGFnaW5nIG11bHRpLWdpZ2FieXRlIHhhdHRycyBpbnRvIG1lbW9yeSwgYW5kXFxuLS1cXG5mcy9leHQ0L3Zlcml0eS5jPTEwMj1zdGF0aWMgaW50IGV4dDRfYmVnaW5fZW5hYmxlX3Zlcml0eShzdHJ1Y3QgZmlsZSAqZmlscClcXG4tLVxcbmZzL2V4dDQvdmVyaXR5LmMtMTY4LSAqIHhhdHRycy4gIEFsc28sIGlmIHRoZSBkZXNjcmlwdG9yIGluY2x1ZGVzIGEgbGFyZ2Ugc2lnbmF0dXJlIGJsb2IgaXQgbWF5IGJlXFxuZnMvZXh0NC92ZXJpdHkuYzoxNjk6ICogdG9vIGxhcmdlIHRvIHN0b3JlIGluIGFuIHhhdHRyIHdpdGhvdXQgdGhlIEVBX0lOT0RFIGZlYXR1cmUuXFxuZnMvZXh0NC92ZXJpdHkuYy0xNzAtICovXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTAxPWNvbnN0IHN0cnVjdCB4YXR0cl9oYW5kbGVyICogY29uc3QgZXh0NF94YXR0cl9oYW5kbGVyc1tdID0ge1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTExMy1cXG5mcy9leHQ0L3hhdHRyLmM6MTE0OiNkZWZpbmUgRUFfSU5PREVfQ0FDSEUoaW5vZGUpXFx0KCgoc3RydWN0IGV4dDRfc2JfaW5mbyAqKSBcXFxcXFxuZnMvZXh0NC94YXR0ci5jLTExNS1cXHRcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19mc19pbmZvKS1cXHUwMDNlc19lYV9pbm9kZV9jYWNoZSlcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz00MjA9c3RhdGljIGludCBleHQ0X3hhdHRyX2lub2RlX2lnZXQoc3RydWN0IGlub2RlICpwYXJlbnQsIHVuc2lnbmVkIGxvbmcgZWFfaW5vLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTQzNi1cXG5mcy9leHQ0L3hhdHRyLmM6NDM3OlxcdGlub2RlID0gZXh0NF9pZ2V0KHBhcmVudC1cXHUwMDNlaV9zYiwgZWFfaW5vLCBFWFQ0X0lHRVRfRUFfSU5PREUpO1xcbmZzL2V4dDQveGF0dHIuYy00MzgtXFx0aWYgKElTX0VSUihpbm9kZSkpIHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy00NTQtXFx0ICAgIGlub2RlLVxcdTAwM2VpX2dlbmVyYXRpb24gPT0gcGFyZW50LVxcdTAwM2VpX2dlbmVyYXRpb24pIHtcXG5mcy9leHQ0L3hhdHRyLmM6NDU1OlxcdFxcdGV4dDRfc2V0X2lub2RlX3N0YXRlKGlub2RlLCBFWFQ0X1NUQVRFX0xVU1RSRV9FQV9JTk9ERSk7XFxuZnMvZXh0NC94YXR0ci5jLTQ1Ni1cXHRcXHRleHQ0X3hhdHRyX2lub2RlX3NldF9yZWYoaW5vZGUsIDEpO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTQ2OD12b2lkIGV4dDRfZXZpY3RfZWFfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy00NzEtXFxuZnMvZXh0NC94YXR0ci5jOjQ3MjpcXHRpZiAoIUVBX0lOT0RFX0NBQ0hFKGlub2RlKSlcXG5mcy9leHQ0L3hhdHRyLmMtNDczLVxcdFxcdHJldHVybjtcXG5mcy9leHQ0L3hhdHRyLmMtNDc0LVxcdC8qIFdhaXQgZm9yIGVudHJ5IHRvIGdldCB1bnVzZWQgc28gdGhhdCB3ZSBjYW4gcmVtb3ZlIGl0ICovXFxuZnMvZXh0NC94YXR0ci5jOjQ3NTpcXHR3aGlsZSAoKG9lID0gbWJfY2FjaGVfZW50cnlfZGVsZXRlX29yX2dldChFQV9JTk9ERV9DQUNIRShpbm9kZSksXFxuZnMvZXh0NC94YXR0ci5jLTQ3Ni1cXHRcXHRcXHRleHQ0X3hhdHRyX2lub2RlX2dldF9oYXNoKGlub2RlKSwgaW5vZGUtXFx1MDAzZWlfaW5vKSkpIHtcXG5mcy9leHQ0L3hhdHRyLmMtNDc3LVxcdFxcdG1iX2NhY2hlX2VudHJ5X3dhaXRfdW51c2VkKG9lKTtcXG5mcy9leHQ0L3hhdHRyLmM6NDc4OlxcdFxcdG1iX2NhY2hlX2VudHJ5X3B1dChFQV9JTk9ERV9DQUNIRShpbm9kZSksIG9lKTtcXG5mcy9leHQ0L3hhdHRyLmMtNDc5LVxcdH1cXG4tLVxcbmZzL2V4dDQveGF0dHIuYz01MjU9ZXh0NF94YXR0cl9pbm9kZV9nZXQoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGV4dDRfeGF0dHJfZW50cnkgKmVudHJ5LFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTUyNy17XFxuZnMvZXh0NC94YXR0ci5jOjUyODpcXHRzdHJ1Y3QgbWJfY2FjaGUgKmVhX2lub2RlX2NhY2hlID0gRUFfSU5PREVfQ0FDSEUoaW5vZGUpO1xcbmZzL2V4dDQveGF0dHIuYy01MjktXFx0c3RydWN0IGlub2RlICplYV9pbm9kZTtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy01NTAtXFxuZnMvZXh0NC94YXR0ci5jOjU1MTpcXHRpZiAoIWV4dDRfdGVzdF9pbm9kZV9zdGF0ZShlYV9pbm9kZSwgRVhUNF9TVEFURV9MVVNUUkVfRUFfSU5PREUpKSB7XFxuZnMvZXh0NC94YXR0ci5jLTU1Mi1cXHRcXHRlcnIgPSBleHQ0X3hhdHRyX2lub2RlX3ZlcmlmeV9oYXNoZXMoZWFfaW5vZGUsIGVudHJ5LCBidWZmZXIsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9OTI0PXN0YXRpYyB2b2lkIGV4dDRfeGF0dHJfaW5vZGVfZnJlZV9xdW90YShzdHJ1Y3QgaW5vZGUgKnBhcmVudCxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy05MjgtXFx0aWYgKGVhX2lub2RlIFxcdTAwMjZcXHUwMDI2XFxuZnMvZXh0NC94YXR0ci5jOjkyOTpcXHQgICAgZXh0NF90ZXN0X2lub2RlX3N0YXRlKGVhX2lub2RlLCBFWFQ0X1NUQVRFX0xVU1RSRV9FQV9JTk9ERSkpXFxuZnMvZXh0NC94YXR0ci5jLTkzMC1cXHRcXHRyZXR1cm47XFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9MTQ2MT1zdGF0aWMgc3RydWN0IGlub2RlICpleHQ0X3hhdHRyX2lub2RlX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTE0ODAtXFx0XFx0XFx0XFx0ICBTX0lGUkVHIHwgMDYwMCwgTlVMTCwgaW5vZGUtXFx1MDAzZWlfaW5vICsgMSwgb3duZXIsXFxuZnMvZXh0NC94YXR0ci5jOjE0ODE6XFx0XFx0XFx0XFx0ICBFWFQ0X0VBX0lOT0RFX0ZMKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTQ4Mi1cXHRpZiAoIUlTX0VSUihlYV9pbm9kZSkpIHtcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xNTE2PWV4dDRfeGF0dHJfaW5vZGVfY2FjaGVfZmluZChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBjb25zdCB2b2lkICp2YWx1ZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xNTIwLVxcdHN0cnVjdCBtYl9jYWNoZV9lbnRyeSAqY2U7XFxuZnMvZXh0NC94YXR0ci5jOjE1MjE6XFx0c3RydWN0IG1iX2NhY2hlICplYV9pbm9kZV9jYWNoZSA9IEVBX0lOT0RFX0NBQ0hFKGlub2RlKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTUyMi1cXHR2b2lkICplYV9kYXRhO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTE1NDEtXFx0XFx0ZWFfaW5vZGUgPSBleHQ0X2lnZXQoaW5vZGUtXFx1MDAzZWlfc2IsIGNlLVxcdTAwM2VlX3ZhbHVlLFxcbmZzL2V4dDQveGF0dHIuYzoxNTQyOlxcdFxcdFxcdFxcdCAgICAgRVhUNF9JR0VUX0VBX0lOT0RFKTtcXG5mcy9leHQ0L3hhdHRyLmMtMTU0My1cXHRcXHRpZiAoSVNfRVJSKGVhX2lub2RlKSlcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xNTY3PXN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmV4dDRfeGF0dHJfaW5vZGVfbG9va3VwX2NyZWF0ZShoYW5kbGVfdCAqaGFuZGxlLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTE2MDEtXFxuZnMvZXh0NC94YXR0ci5jOjE2MDI6XFx0aWYgKEVBX0lOT0RFX0NBQ0hFKGlub2RlKSlcXG5mcy9leHQ0L3hhdHRyLmM6MTYwMzpcXHRcXHRtYl9jYWNoZV9lbnRyeV9jcmVhdGUoRUFfSU5PREVfQ0FDSEUoaW5vZGUpLCBHRlBfTk9GUywgaGFzaCxcXG5mcy9leHQ0L3hhdHRyLmMtMTYwNC1cXHRcXHRcXHRcXHQgICAgICBlYV9pbm9kZS1cXHUwMDNlaV9pbm8sIHRydWUgLyogcmV1c2FibGUgKi8pO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTE4ODg9ZXh0NF94YXR0cl9ibG9ja19zZXQoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0xOTkzLVxcdFxcdFxcdGlmICghZXh0NF90ZXN0X2lub2RlX3N0YXRlKHRtcF9pbm9kZSxcXG5mcy9leHQ0L3hhdHRyLmM6MTk5NDpcXHRcXHRcXHRcXHRcXHRFWFQ0X1NUQVRFX0xVU1RSRV9FQV9JTk9ERSkpIHtcXG5mcy9leHQ0L3hhdHRyLmMtMTk5NS1cXHRcXHRcXHRcXHQvKlxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI5OTY9dm9pZCBleHQ0X3B1dF9lYV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbi0tXFxuZnMvZXh0NC94YXR0ci5jLTI5OTktXFx0XFx0cmV0dXJuO1xcbmZzL2V4dDQveGF0dHIuYzozMDAwOlxcdFdBUk5fT05fT05DRSghKEVYVDRfSShpbm9kZSktXFx1MDAzZWlfZmxhZ3MgXFx1MDAyNiBFWFQ0X0VBX0lOT0RFX0ZMKSk7XFxuZnMvZXh0NC94YXR0ci5jLTMwMDEtXFx0aWYgKGlwdXRfaWZfbm90X2xhc3QoaW5vZGUpKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMDo1MC42Nzg2NjMzNVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NjkwNzk1MTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ2hlY2tpbmcgdGhlIEVYVDRfRkVBVFVSRV9JTkNPTVBBVF9FQV9JTk9ERSBGZWF0dXJlIGFuZCBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBFWFQ0X0ZFQVRVUkVfSU5DT01QQVRfRUFfSU5PREVgIGZlYXR1cmUuIEl0J3Mgbm90IGEgc3RhbmRhbG9uZSBLY29uZmlnIG9wdGlvbiwgaXQganVzdCBjb21lcyBhbG9uZyB3aXRoIGV4dDQuIFJpZ2h0LCBzbyB0byBhY3R1YWxseSAqdGVzdCogdGhpcyBmZWF0dXJlLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgZXh0NCBpdHNlbGYgaXMgZW5hYmxlZCwgd2hpY2ggbWVhbnMgYEVYVDRfRlNgIG5lZWRzIHRvIGJlIHNldC4gTWFrZXMgc2Vuc2UuXG5cbkFuZCwgb2YgY291cnNlLCBleHRlbmRlZCBhdHRyaWJ1dGVzIGhhdmUgdG8gYmUgZW5hYmxlZC4gVGhhdCBzaG91bGQgYmUgYEVYVDRfRlNfWEFUVFJgLiBCdXQgd2FpdCwgSSdtIHByZXR0eSBzdXJlIHRoYXQncyB1c3VhbGx5IG9uIGJ5IGRlZmF1bHQsIG9yIGF0IGxlYXN0IGVhc3kgdG8gZXhwbGljaXRseSBzZXQuIEhvbGQgb24uLi5kb2VzIGBFWFQ0X0ZTX1hBVFRSYCBhY3R1YWxseSBleGlzdD8gSSBiZXR0ZXIgZG91YmxlLWNoZWNrIHRoYXQ7IEkgZG9uJ3Qgd2FudCB0byBtYWtlIGFzc3VtcHRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjA4MCwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMDo1NS4xNDc3NDU3MjJaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIyMDMzNDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBFWFQ0X0ZTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL2V4dDQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2V4dDQvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbmZzL2V4dDQvS2NvbmZpZzoyOmNvbmZpZyBFWFQ0X0ZTXFxuZnMvZXh0NC9LY29uZmlnLTMtXFx0dHJpc3RhdGUgXFxcIlRoZSBFeHRlbmRlZCA0IChleHQ0KSBmaWxlc3lzdGVtXFxcIlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnPTM1PWNvbmZpZyBFWFQ0X1VTRV9GT1JfRVhUMlxcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTQ1LVxcbmZzL2V4dDQvS2NvbmZpZzo0Njpjb25maWcgRVhUNF9GU19QT1NJWF9BQ0xcXG5mcy9leHQ0L0tjb25maWctNDctXFx0Ym9vbCBcXFwiRXh0NCBQT1NJWCBBY2Nlc3MgQ29udHJvbCBMaXN0c1xcXCJcXG4tLVxcbmZzL2V4dDQvS2NvbmZpZy01NS1cXG5mcy9leHQ0L0tjb25maWc6NTY6Y29uZmlnIEVYVDRfRlNfU0VDVVJJVFlcXG5mcy9leHQ0L0tjb25maWctNTctXFx0Ym9vbCBcXFwiRXh0NCBTZWN1cml0eSBMYWJlbHNcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjEwOjU1Ljc2OTc5MTUwOVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMTExOTAxNjYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZvY3VzaW5nIG9uIEVYVDQgRXh0ZW5kZWQgQXR0cmlidXRlcyAoeGF0dHJzKSoqXG5cbk9rYXksIHNvIEknbSBob25pbmcgaW4gb24gdGhlIEVYVDQgZmlsZSBzeXN0ZW0sIHNwZWNpZmljYWxseSB4YXR0cnMuIGBFWFQ0X0ZTYCBpcyB0aGUgY29yZSwgYW5kIEknbSBub3RpbmcgdGhhdCB3aGlsZSBgRVhUNF9GU19QT1NJWF9BQ0xgIGFuZCBgRVhUNF9GU19TRUNVUklUWWAgbWlnaHQgYmUgcmVsZXZhbnQgZm9yIHhhdHRycyB0b28sIHRoZSBFQSBpbm9kZXMgYXJlIHRoZSBpbXBvcnRhbnQgcGFydCBmb3IgbGFyZ2VyIGF0dHJpYnV0ZXMuIFNvLCBmb3Igbm93LCBsZXQncyBqdXN0IHN0aWNrIHdpdGggYEVYVDRfRlNgLlxuXG5JIG5lZWQgdG8gbmFpbCBkb3duIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZ29pbmcgdG8gYmUgY3JpdGljYWwgZm9yIHRoZSBmdXp6aW5nIGNhbXBhaWduLiBJJ20gc2VlaW5nIGEgbGlzdCBvZiBmdW5jdGlvbnMgdGhhdCBzZWVtIHByb21pc2luZywgYnV0IEkgbmVlZCB0byBtYWtlIHNvbWUgZGVjaXNpb25zLlxuXG5Jbml0aWFsbHksIEkgaGFkIGEgZm9jdXMgbGlzdCBvZiB0aGUgZm9sbG93aW5nIGZ1bmN0aW9uczpcbiogICBgZXh0NF9lYV9pbm9kZV93b3JrYCAoc3RhdGljYWxseSBkZWZpbmVkLCBpdCBtaWdodCBub3QgYmUgZGlyZWN0bHkgZnV6emFibGUsIGJ1dCBpdCBpcyBjYWxsZWQgZnJvbSBhIHdvcmtxdWV1ZSwgc28gdGhlcmUgbWF5IGJlIGEgd2F5KVxuKiAgIGBleHQ0X3B1dF9lYV9pbm9kZWAgKGNhbGxlZCBmcm9tIHZhcmlvdXMgbG9jYXRpb25zKVxuKiAgIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWBcbiogICBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYFxuKiAgIGBleHQ0X3hhdHRyX2lub2RlX2RlY19yZWZfYWxsYFxuKiAgIGBleHQ0X3hhdHRyX2Jsb2NrX3NldGBcbiogICBgZXh0NF94YXR0cl9pYm9keV9zZXRgXG4qICAgYGV4dDRfeGF0dHJfc2V0X2VudHJ5YFxuKiAgIGBleHQ0X3hhdHRyX2lub2RlX2xvb2t1cF9jcmVhdGVgXG4qICAgYGV4dDRfeGF0dHJfaW5vZGVfY3JlYXRlYFxuKiAgIGBleHQ0X3hhdHRyX2lub2RlX2dldGBcblxuQnV0IG5vdyB0aGF0IEkndmUgcmV2aWV3ZWQgdGhlIHBhdGNoLCBpdCBzZWVtcyBsaWtlIHNldmVyYWwgb2YgdGhlc2UgZnVuY3Rpb25zIGFyZSBtb2RpZmllZC4gQmFzaWNhbGx5LCBhbnl0aGluZyB0aGF0IHVzZWQgYGlwdXQoZWFfaW5vZGUpYCBpcyBub3cgdXNpbmcgYGV4dDRfcHV0X2VhX2lub2RlKGVhX2lub2RlKWAuIEFsc28sIGBleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZWAgbm8gbG9uZ2VyIHVzZXMgYGVhX2lub2RlX2FycmF5YC5cblxuU28sIHRoZSBmb2N1cyByZWFsbHkgbmFycm93cyB0byB0aGUgZm9sbG93aW5nIGtleSBmdW5jdGlvbnM6XG5cbiogICBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgXG4qICAgYGV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja2BcbiogICBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGBcbiogICBgZXh0NF94YXR0cl9ibG9ja19zZXRgXG4qICAgYGV4dDRfeGF0dHJfaWJvZHlfc2V0YFxuKiAgIGBleHQ0X3B1dF9lYV9pbm9kZWBcblxuSSdtIHRoaW5raW5nLCBpcyBgZXh0NF9lYV9pbm9kZV93b3JrYCByZWFjaGFibGUsIGRlc3BpdGUgYmVpbmcgc3RhdGljPyBZZXMsIGl0J3MgdHJpZ2dlcmVkIHZpYSBkZWxheWVkIHdvcmsuIEFuZCBgZXh0NF9wdXRfZWFfaW5vZGVgPyBZZXAsIGludm9sdmVkIGluIHNldHRpbmcsIGdldHRpbmcsIGFuZCBkZWxldGluZyBsYXJnZSB4YXR0cnMuIEFuZCB3aGF0IGFib3V0IGBpcHV0X2lmX25vdF9sYXN0YD8gVGhhdCdzIGlubGluZSBpbiBgZnMuaGAsIHNvIGFjY2Vzc2libGUuXG5cblNvLCBnb2luZyBiYWNrIHRvIHRoZSBmaXJzdCBwb2ludDsgaXMgYEVYVDRfRlNgIHRoZSByaWdodCBzY29wZT8gWWVzLCBpdCBzZWVtcyBsaWtlIGl0IHdpbGwgcHJvdmlkZSBlbm91Z2ggY292ZXJhZ2UuXG5cbkxldCdzIHJlZmluZSB0aG9zZSBcIkZvY3VzU3ltYm9sc1wiOlxuXG4qICAgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYFxuKiAgIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgXG4qICAgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgXG4qICAgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YFxuKiAgIGBleHQ0X3hhdHRyX2lib2R5X3NldGBcbiogICBgZXh0NF9wdXRfZWFfaW5vZGVgXG4qICAgYGV4dDRfZWFfaW5vZGVfd29ya2BcblxuSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYCBpcyBzdGF0aWMsIGp1c3QgdG8gYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY2MjksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NDQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTE6MDYuODgxNzI2NzcxWiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM0NTA3NDExOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvZXh0NC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvZXh0NC94YXR0ci5jPTEyNjI9c3RhdGljIHZvaWRcXG5mcy9leHQ0L3hhdHRyLmM6MTI2MzpleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG5mcy9leHQ0L3hhdHRyLmMtMTI2NC1cXHRcXHRcXHQgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYz0xODg4PWV4dDRfeGF0dHJfYmxvY2tfc2V0KGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjE3My1cXHRpZiAoYnMtXFx1MDAzZWJoIFxcdTAwMjZcXHUwMDI2IGJzLVxcdTAwM2ViaCAhPSBuZXdfYmgpIHtcXG5mcy9leHQ0L3hhdHRyLmM6MjE3NDpcXHRcXHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYnMtXFx1MDAzZWJoLFxcbmZzL2V4dDQveGF0dHIuYy0yMTc1LVxcdFxcdFxcdFxcdFxcdCAwIC8qIGV4dHJhX2NyZWRpdHMgKi8pO1xcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTI4NjA9aW50IGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMjkzNi1cXG5mcy9leHQ0L3hhdHRyLmM6MjkzNzpcXHRcXHRleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2soaGFuZGxlLCBpbm9kZSwgYmgsXFxuZnMvZXh0NC94YXR0ci5jLTI5MzgtXFx0XFx0XFx0XFx0XFx0IGV4dHJhX2NyZWRpdHMpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMTowNy4yMjY4MDY0NjdaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjM5ODUwNzE1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBzdW1tYXJpemVkIGFzIHlvdSByZXF1ZXN0ZWQ6XG5cbioqWEZTIEV4dGVuZGVkIEF0dHJpYnV0ZSBGdW5jdGlvbiBJbmNsdXNpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGVzZSBYRlMgZXh0ZW5kZWQgYXR0cmlidXRlIGZ1bmN0aW9ucyBhbmQgZmlndXJpbmcgb3V0IHdoYXQncyByZWxldmFudCB0byBpbmNsdWRlLiBSaWdodCBvZmYgdGhlIGJhdCwgSSBzZWUgdGhhdCB0aGlzIGlzIGEgc3RhdGljIGNvbnRleHQsIHdoaWNoIGlzIGltcG9ydGFudCB0byBrZWVwIGluIG1pbmQuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBnZXQgdGhlIHJpZ2h0IG9uZXMuIEl0IGxvb2tzIGxpa2UgYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYCBpcyBnbG9iYWwsIHNvIHRoYXQncyBkZWZpbml0ZWx5IGluLiBUaGVuIHRoZXJlJ3MgYGV4dDRfeGF0dHJfYmxvY2tfc2V0YCwgd2hpY2ggaXMgYWxzbyBnbG9iYWwg4oCTIGluY2x1ZGUgaXQuIFNhbWUgZ29lcyBmb3IgYGV4dDRfeGF0dHJfaWJvZHlfc2V0YCBhbmQgYGV4dDRfcHV0X2VhX2lub2RlYCDigJMgdGhvc2UgYXJlIGdsb2JhbCB0b28sIHNvIEknbGwgYmUgc3VyZSB0byBpbmNsdWRlIHRoZW0uIE5vdywgdGhlcmUncyBgZXh0NF9lYV9pbm9kZV93b3JrYCAtIGl0J3Mgc3RhdGljLCBidXQgc2VlbXMgcmVsYXRlZCwgc28gSSdsbCBpbmNsdWRlIGl0IGluIHRoaXMgcGFzcy5cblxuTGV0J3MgcXVpY2tseSBjcmVhdGUgdGhlIGxpc3QuIEknbGwgaW5jbHVkZTpcbi0gYGV4dDRfeGF0dHJfZGVsZXRlX2lub2RlYFxuLSBgZXh0NF94YXR0cl9ibG9ja19zZXRgXG4tIGBleHQ0X3hhdHRyX2lib2R5X3NldGBcbi0gYGV4dDRfcHV0X2VhX2lub2RlYFxuLSBgZXh0NF9lYV9pbm9kZV93b3JrYFxuLSBgZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrYFxuLSBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGBcblxuV2FpdCBhIHNlY29uZC4uLkkganVzdCBjYXVnaHQgdGhhdCBgZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbGAgaXMgc3RhdGljIGFzIHdlbGwuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg1MjcsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDJUMTg6MTE6MTEuODY2NjU5NjQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODAwMTYyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9leHQ0L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9leHQ0L3hhdHRyLmM9MTE1NT1zdGF0aWMgdm9pZFxcbmZzL2V4dDQveGF0dHIuYzoxMTU2OmV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGwoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICpwYXJlbnQsXFxuZnMvZXh0NC94YXR0ci5jLTExNTctXFx0XFx0XFx0ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLFxcbi0tXFxuZnMvZXh0NC94YXR0ci5jPTEyNjM9ZXh0NF94YXR0cl9yZWxlYXNlX2Jsb2NrKGhhbmRsZV90ICpoYW5kbGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmMtMTMwMi1cXHRcXHRpZiAoZXh0NF9oYXNfZmVhdHVyZV9lYV9pbm9kZShpbm9kZS1cXHUwMDNlaV9zYikpXFxuZnMvZXh0NC94YXR0ci5jOjEzMDM6XFx0XFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBiaCxcXG5mcy9leHQ0L3hhdHRyLmMtMTMwNC1cXHRcXHRcXHRcXHRcXHRcXHQgICAgIEJGSVJTVChiaCksXFxuLS1cXG5mcy9leHQ0L3hhdHRyLmM9Mjg2MD1pbnQgZXh0NF94YXR0cl9kZWxldGVfaW5vZGUoaGFuZGxlX3QgKmhhbmRsZSwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL2V4dDQveGF0dHIuYy0yODk1LVxcdFxcdGlmIChoZWFkZXItXFx1MDAzZWhfbWFnaWMgPT0gY3B1X3RvX2xlMzIoRVhUNF9YQVRUUl9NQUdJQykpXFxuZnMvZXh0NC94YXR0ci5jOjI4OTY6XFx0XFx0XFx0ZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbChoYW5kbGUsIGlub2RlLCBpbG9jLmJoLFxcbmZzL2V4dDQveGF0dHIuYy0yODk3LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgSUZJUlNUKGhlYWRlciksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjExOjEyLjE0NjY4MzQ5M1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjY5MDQ1MTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipGb2N1cyBTeW1ib2wgTWFuYWdlbWVudCBhbmQgYSBRdWljayBDaGVjayoqXG5cblJpZ2h0LCB0aGVzZSBuZXcgaXRlbXMgbmVlZCB0byBiZSBpbnRlZ3JhdGVkIGludG8gdGhlIGBGb2N1c1N5bWJvbHNgIHN0cnVjdHVyZS4gVGhhdCdzIHRoZSBpbW1lZGlhdGUgYWN0aW9uLiBCZWZvcmUgSSBmdWxseSBjb21taXQsIHRob3VnaCwgbGV0J3MganVzdCBkbyBhIHF1aWNrIHNhbml0eSBjaGVjay4gSSdsbCBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgaXB1dF9pZl9ub3RfbGFzdGAgaXMgYmVoYXZpbmcgYXMgSSBleHBlY3QsIGFuZCB0aGF0IG1lYW5zIGEgcGVlayBhdCBgaW5jbHVkZS9saW51eC9mcy5oYC4gSXQncyBsaWtlbHkgdGhhdCBhIHN1YnRsZSBlZGdlIGNhc2UgaGFzIGJlZW4gdW5jb3ZlcmVkIGJ5IHRoaXMuIFRoaXMgZnVuY3Rpb24gaGFuZGxlcyB0aGUgcmVsZWFzZSBvZiBhbiBpbm9kZS4gSSBuZWVkIHRvIG1ha2UgY2VydGFpbiB0aGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBhbmQgdXNhZ2UgYWxpZ24gd2l0aCBteSBjdXJyZW50IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGZvY3VzIHN5bWJvbCBzdHJhdGVneSwgc3BlY2lmaWNhbGx5IHJlZ2FyZGluZyBmaW5hbGl6YXRpb24gYW5kIGFueSBhc3NvY2lhdGVkIHJhY2UgY29uZGl0aW9ucyB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LiBUaGlzIHF1aWNrIGNyb3NzLXJlZmVyZW5jZSB3aWxsIGVuc3VyZSB0aGVyZSBhcmUgbm8gc3VycHJpc2VzIHdpdGggaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIG5ldyBlbnRyaWVzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTQ4NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjExOjE1LjQxNTczNDA5WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDIwNzgyMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaXB1dF9pZl9ub3RfbGFzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL2xpbnV4L2ZzLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9mcy5oPTI0MTU9dm9pZCBpcHV0X25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZnMuaC0yNDE3LS8qKlxcbmluY2x1ZGUvbGludXgvZnMuaDoyNDE4OiAqIGlwdXRfaWZfbm90X2xhc3QgLSBkcm9wIGFuIGlub2RlIHJlZmVyZW5jZSBvbmx5IGlmIGl0IGlzIG5vdCB0aGUgbGFzdCBvbmVcXG5pbmNsdWRlL2xpbnV4L2ZzLmgtMjQxOS0gKiBAaW5vZGU6IGlub2RlIHRvIHB1dFxcbi0tXFxuaW5jbHVkZS9saW51eC9mcy5oLTI0MjMtICovXFxuaW5jbHVkZS9saW51eC9mcy5oOjI0MjQ6c3RhdGljIGlubGluZSBib29sIF9fbXVzdF9jaGVjayBpcHV0X2lmX25vdF9sYXN0KHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuaW5jbHVkZS9saW51eC9mcy5oLTI0MjUte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMlQxODoxMToxNS43NTc4MTg4NzdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njc4NDU2Nzc1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFN0cmF0ZWd5IGZvciBFeHRlbmRlZCBBdHRyaWJ1dGUgKEVBKSBJbm9kZSBIYW5kbGluZyBpbiBleHQ0KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgbXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgd2UgbmVlZCB0byBmdXp6IHRoZSBjaGFuZ2VzIHRvIGV4dDQncyBFQSBpbm9kZSBoYW5kbGluZy4gSXQgbG9va3MgbGlrZSB0aGUgbWFpbiBnb2FsIGhlcmUgaXMgdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMgd2hlbiBkZWFsaW5nIHdpdGggRUEgaW5vZGVzLCB3aGljaCBpcyBjcnVjaWFsIGZvciBvdmVyYWxsIGZpbGVzeXN0ZW0gc3RhYmlsaXR5LiBTcGVjaWZpY2FsbHksIHRoZXkndmUgaW50cm9kdWNlZCBhIGRlZmVycmVkIGBpcHV0YCBtZWNoYW5pc20gdXNpbmcgYSBsb2NrbGVzcyBsaXN0IGFuZCBhIGRlbGF5ZWQgd29ya3F1ZXVlIGNhbGxlZCBgZXh0NF9lYV9pbm9kZV93b3JrYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBhcmNoaXRlY3R1cmFsIHNoaWZ0IGFuZCBJIG5lZWQgdG8gZW5zdXJlIGl0J3Mgcm9idXN0LlxuXG5XaGlsZSB0aGUgcHJpbWFyeSBmdW5jdGlvbiBvZiBpbnRlcmVzdCwgYGV4dDRfcHV0X2VhX2lub2RlYCwgbWlnaHQgbm90IGJlIGRpcmVjdGx5IGZ1enphYmxlIGFzIGEgc3ltYm9sIGJlY2F1c2UgaXQncyBpbmxpbmVkLCBpdCdzIHN0aWxsIGF0IHRoZSBoZWFydCBvZiB0aGUgY2hhbmdlcyBhbmQgdGhlcmVmb3JlIGEga2V5IGNvbnNpZGVyYXRpb24uIFRoZSBjb3JlIGZ1bmN0aW9ucyBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gYXJlOiBgZXh0NF94YXR0cl9kZWxldGVfaW5vZGVgLCBgZXh0NF94YXR0cl9ibG9ja19zZXRgLCBgZXh0NF94YXR0cl9pYm9keV9zZXRgLCBgZXh0NF9wdXRfZWFfaW5vZGVgIChldmVuIGlmIGlubGluZWQsIEknbGwgbmVlZCB0byBjb25zaWRlciBob3cgaXQncyB1c2VkKSwgYGV4dDRfZWFfaW5vZGVfd29ya2AsIGBleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tgLCBhbmQgYGV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxgLiBUaGVzZSBhcmUgdGhlIGJ1aWxkaW5nIGJsb2NrcyBpbnZvbHZlZCBpbiBFQSBpbm9kZSBldmljdGlvbiwgYW5kIG5lZWQgdG8gYmUgZXhhbWluZWQgY2FyZWZ1bGx5LlxuXG5UaGUgY29uZmlndXJhdGlvbnMgSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGVuYWJsZSBmb3IgdGhlIGZ1enppbmcgcnVucyB3b3VsZCBiZSBgRVhUNF9GU2AuIEknbSBjb25jZXJuZWQgYWJvdXQgdGhlIHVzdWFsIHN1c3BlY3RzOiB1c2UtYWZ0ZXItZnJlZSBjb25kaXRpb25zLCBtZW1vcnkgbGVha3MsIGFuZCBwb3RlbnRpYWwgZGVhZGxvY2tzIHRoYXQgbWlnaHQgYXJpc2UgZHVlIHRvIHRoaXMgbmV3IGRlbGF5ZWQgd29ya3F1ZXVlIGFuZCBsb2NrbGVzcyBsaXN0LiBJIG5lZWQgdG8gZGVzaWduIGZ1enppbmcgY2FtcGFpZ25zIHRoYXQgc3BlY2lmaWNhbGx5IHRhcmdldCB0aG9zZSBhcmVhcyBhbmQgdGVzdCB0aG9yb3VnaGx5LiBJJ2xsIG5lZWQgdG8gcGF5IGNsb3NlIGF0dGVudGlvbiB0byB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgbG9ja2xlc3MgbGlzdCBhbmQgdGhlIHdvcmtxdWV1ZSBhbmQgZW5zdXJlIHRoYXQgdGhlIGV2aWN0aW9uIHByb2Nlc3MgaXMgY2xlYW4gYW5kIGNvbnNpc3RlbnQgdW5kZXIgdmFyaW91cyBsb2FkIGNvbmRpdGlvbnMuXG5cblJpZ2h0LCBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgIG5vdy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk5MjIsIk91dHB1dFRva2VucyI6MjIyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjYxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAyVDE4OjExOjIyLjU0MjM5MDI3MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODU5MzI2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiRVhUNF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4dDRfeGF0dHJfZGVsZXRlX2lub2RlXCIsXG4gICAgXCJleHQ0X3hhdHRyX2Jsb2NrX3NldFwiLFxuICAgIFwiZXh0NF94YXR0cl9pYm9keV9zZXRcIixcbiAgICBcImV4dDRfcHV0X2VhX2lub2RlXCIsXG4gICAgXCJleHQ0X2VhX2lub2RlX3dvcmtcIixcbiAgICBcImV4dDRfeGF0dHJfcmVsZWFzZV9ibG9ja1wiLFxuICAgIFwiZXh0NF94YXR0cl9pbm9kZV9kZWNfcmVmX2FsbFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGV4dDQncyBoYW5kbGluZyBvZiBFeHRlbmRlZCBBdHRyaWJ1dGUgKEVBKSBpbm9kZXMgYnkgaW50cm9kdWNpbmcgYSBkZWZlcnJlZCBpcHV0IG1lY2hhbmlzbSB0byBhdm9pZCBsb2NrIG9yZGVyaW5nIGlzc3Vlcy4gSXQgcmVwbGFjZXMgdGhlIGBleHQ0X3hhdHRyX2lub2RlX2FycmF5YCB3aXRoIGEgbG9ja2xlc3MgbGlzdCBhbmQgYSBkZWxheWVkIHdvcmtxdWV1ZSAoYGV4dDRfZWFfaW5vZGVfd29ya2ApLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBleHQ0IGxvZ2ljIGFuZCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyB1c2UtYWZ0ZXItZnJlZSwgbWVtb3J5IGxlYWtzLCBvciBkZWFkbG9ja3Mgb2NjdXIgZHVyaW5nIEVBIGlub2RlIGV2aWN0aW9uLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkVYVDRfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleHQ0X3hhdHRyX2RlbGV0ZV9pbm9kZVwiLFxuICAgIFwiZXh0NF94YXR0cl9ibG9ja19zZXRcIixcbiAgICBcImV4dDRfeGF0dHJfaWJvZHlfc2V0XCIsXG4gICAgXCJleHQ0X3B1dF9lYV9pbm9kZVwiLFxuICAgIFwiZXh0NF9lYV9pbm9kZV93b3JrXCIsXG4gICAgXCJleHQ0X3hhdHRyX3JlbGVhc2VfYmxvY2tcIixcbiAgICBcImV4dDRfeGF0dHJfaW5vZGVfZGVjX3JlZl9hbGxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBleHQ0J3MgaGFuZGxpbmcgb2YgRXh0ZW5kZWQgQXR0cmlidXRlIChFQSkgaW5vZGVzIGJ5IGludHJvZHVjaW5nIGEgZGVmZXJyZWQgaXB1dCBtZWNoYW5pc20gdG8gYXZvaWQgbG9jayBvcmRlcmluZyBpc3N1ZXMuIEl0IHJlcGxhY2VzIHRoZSBgZXh0NF94YXR0cl9pbm9kZV9hcnJheWAgd2l0aCBhIGxvY2tsZXNzIGxpc3QgYW5kIGEgZGVsYXllZCB3b3JrcXVldWUgKGBleHQ0X2VhX2lub2RlX3dvcmtgKS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgZXh0NCBsb2dpYyBhbmQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gdXNlLWFmdGVyLWZyZWUsIG1lbW9yeSBsZWFrcywgb3IgZGVhZGxvY2tzIG9jY3VyIGR1cmluZyBFQSBpbm9kZSBldmljdGlvbi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzgwg[1] Phase: Succeeded StartedAt: 2026-07-02 18:11:34 +0000 UTC FinishedAt: 2026-07-02 18:11:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-02 18:11:34 +0000 UTC FinishedAt: 2026-07-02 18:11:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[2] Phase: Succeeded StartedAt: 2026-07-02 18:11:34 +0000 UTC FinishedAt: 2026-07-02 22:19:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 18:11:34 +0000 UTC FinishedAt: 2026-07-02 22:19:14 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 18:11:34 +0000 UTC FinishedAt: 2026-07-02 18:12:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 18:11:34 +0000 UTC FinishedAt: 2026-07-02 18:11:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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-workflowjzgwg/series-workflowjzgwg-convert-artifact-1026776701/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 18:12:10 +0000 UTC FinishedAt: 2026-07-02 18:44:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 18:12:10 +0000 UTC FinishedAt: 2026-07-02 18:44:52 +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:*23d71eb2-59a8-4513-9f9c-bd9a08b2006c,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-workflowjzgwg/series-workflowjzgwg-convert-artifact-1026776701/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": "573c9a99-f773-4a51-b33b-6e9d9096d9eb", "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-workflowjzgwg/series-workflowjzgwg-build-action-1748518835/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 18:12:10 +0000 UTC FinishedAt: 2026-07-02 18:44:27 +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:*23d71eb2-59a8-4513-9f9c-bd9a08b2006c,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-workflowjzgwg/series-workflowjzgwg-convert-artifact-1026776701/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": "573c9a99-f773-4a51-b33b-6e9d9096d9eb", "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-workflowjzgwg/series-workflowjzgwg-build-action-1748518835/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 18:44:52 +0000 UTC FinishedAt: 2026-07-02 18:44:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 18:44:52 +0000 UTC FinishedAt: 2026-07-02 18:44:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 18:44:52 +0000 UTC FinishedAt: 2026-07-02 18:45:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 18:44:53 +0000 UTC FinishedAt: 2026-07-02 18:45:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-workflowjzgwg/series-workflowjzgwg-convert-artifact-447063512/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 18:45:15 +0000 UTC FinishedAt: 2026-07-02 18:47:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 18:45:15 +0000 UTC FinishedAt: 2026-07-02 18:47:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*573c9a99-f773-4a51-b33b-6e9d9096d9eb,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-workflowjzgwg/series-workflowjzgwg-build-action-1748518835/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-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 18:47:22 +0000 UTC FinishedAt: 2026-07-02 18:47:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 18:47:22 +0000 UTC FinishedAt: 2026-07-02 18:47:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 18:47:22 +0000 UTC FinishedAt: 2026-07-02 19:12:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 18:47:22 +0000 UTC FinishedAt: 2026-07-02 19:12:06 +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:*23d71eb2-59a8-4513-9f9c-bd9a08b2006c,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-workflowjzgwg/series-workflowjzgwg-convert-artifact-447063512/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": "e5413370-cf09-4540-b9d3-7d280f314ae0", "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-workflowjzgwg/series-workflowjzgwg-build-action-2203144004/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 18:47:22 +0000 UTC FinishedAt: 2026-07-02 19:11:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*23d71eb2-59a8-4513-9f9c-bd9a08b2006c,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-workflowjzgwg/series-workflowjzgwg-convert-artifact-447063512/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": "e5413370-cf09-4540-b9d3-7d280f314ae0", "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-workflowjzgwg/series-workflowjzgwg-build-action-2203144004/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 19:12:06 +0000 UTC FinishedAt: 2026-07-02 19:12:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 19:12:06 +0000 UTC FinishedAt: 2026-07-02 19:12:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 19:12:06 +0000 UTC FinishedAt: 2026-07-02 19:14:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 19:12:06 +0000 UTC FinishedAt: 2026-07-02 19:14:13 +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:*e5413370-cf09-4540-b9d3-7d280f314ae0,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-workflowjzgwg/series-workflowjzgwg-build-action-2203144004/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-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 19:14:25 +0000 UTC FinishedAt: 2026-07-02 22:19:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 19:14:25 +0000 UTC FinishedAt: 2026-07-02 22:19:14 +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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"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:*573c9a99-f773-4a51-b33b-6e9d9096d9eb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e5413370-cf09-4540-b9d3-7d280f314ae0,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-workflowjzgwg/series-workflowjzgwg-build-action-1748518835/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-workflowjzgwg/series-workflowjzgwg-build-action-2203144004/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 19:14:25 +0000 UTC FinishedAt: 2026-07-02 19:14:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 19:14:25 +0000 UTC FinishedAt: 2026-07-02 19:14:39 +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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"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-workflowjzgwg/series-workflowjzgwg-convert-artifact-2630234801/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 19:14:25 +0000 UTC FinishedAt: 2026-07-02 19:15:59 +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:*e5413370-cf09-4540-b9d3-7d280f314ae0,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-workflowjzgwg/series-workflowjzgwg-build-action-1748518835/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-workflowjzgwg/series-workflowjzgwg-build-action-2203144004/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 19:14:25 +0000 UTC FinishedAt: 2026-07-02 19:14:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 19:14:25 +0000 UTC FinishedAt: 2026-07-02 19:14:39 +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-workflowjzgwg/series-workflowjzgwg-convert-artifact-1668540878/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 19:14:25 +0000 UTC FinishedAt: 2026-07-02 19:14:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 19:14:25 +0000 UTC FinishedAt: 2026-07-02 19:14:25 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 19:14:47 +0000 UTC FinishedAt: 2026-07-02 22:19:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 19:14:47 +0000 UTC FinishedAt: 2026-07-02 22:19:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*573c9a99-f773-4a51-b33b-6e9d9096d9eb,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*e5413370-cf09-4540-b9d3-7d280f314ae0,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-workflowjzgwg/series-workflowjzgwg-build-action-1748518835/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-workflowjzgwg/series-workflowjzgwg-build-action-2203144004/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-workflowjzgwg/series-workflowjzgwg-convert-artifact-2630234801/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-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 19:14:47 +0000 UTC FinishedAt: 2026-07-02 19:15:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjzgwg[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"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_delete_inode","ext4_xattr_block_set","ext4_xattr_ibody_set","ext4_put_ea_inode","ext4_ea_inode_work","ext4_xattr_release_block","ext4_xattr_inode_dec_ref_all"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"4a50a141f05a8d1737661b19ee22ff8455b94409","config_name":"upstream-apparmor-kasan.config","enable_configs":["EXT4_FS"],"series_id":"ce304d7b-7f32-44b5-bf6f-e579abb42a5c","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-07-02 19:14:47 +0000 UTC FinishedAt: 2026-07-02 19:15:52 +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:*e5413370-cf09-4540-b9d3-7d280f314ae0,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-workflowjzgwg/series-workflowjzgwg-build-action-1748518835/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-workflowjzgwg/series-workflowjzgwg-build-action-2203144004/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-workflowjzgwg/series-workflowjzgwg-convert-artifact-1668540878/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,}