Name: series-workfloww4f7h Phase: Succeeded StartedAt: 2026-07-25 10:48:11 +0000 UTC FinishedAt: 2026-07-25 11:41:22 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4f7h[0] Phase: Succeeded StartedAt: 2026-07-25 10:48:11 +0000 UTC FinishedAt: 2026-07-25 11:19:44 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4f7h[0].run-triage Phase: Succeeded StartedAt: 2026-07-25 10:48:11 +0000 UTC FinishedAt: 2026-07-25 11:19:44 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "8bb3adb339dddac0b25c92684c4d1c8668646b37", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CIFS", "9P_FS", "AFS_FS", "CEPH_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "8bb3adb339dddac0b25c92684c4d1c8668646b37", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CIFS", "9P_FS", "AFS_FS", "CEPH_FS" ], "series_id": "15d9701b-cc41-4cb5-b509-d3a80c8c802f" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "netfs_readahead", "netfs_read_folio", "netfs_writepages", "netfs_writeback_single", "netfs_perform_write", "netfs_unbuffered_write_iter_locked" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NJRlMmIzM0OywKICAgICYjMzQ7OVBfRlMmIzM0OywKICAgICYjMzQ7QUZTX0ZTJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRmc19yZWFkYWhlYWQmIzM0OywKICAgICYjMzQ7bmV0ZnNfcmVhZF9mb2xpbyYjMzQ7LAogICAgJiMzNDtuZXRmc193cml0ZXBhZ2VzJiMzNDssCiAgICAmIzM0O25ldGZzX3dyaXRlYmFja19zaW5nbGUmIzM0OywKICAgICYjMzQ7bmV0ZnNfcGVyZm9ybV93cml0ZSYjMzQ7LAogICAgJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyBmb3Igcm9sbGluZyBidWZmZXIgaW5pdGlhbGl6YXRpb24gaW4gdGhlIG5ldGZzIGxpYnJhcnksIHNwZWNpZmljYWxseSBhZGRpbmcgX19HRlBfTk9GQUlMIGZvciB3cml0ZWJhY2sgb3BlcmF0aW9ucyB0byBwcmV2ZW50IEVOT01FTSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldGZzIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODRkYjczM2Y0NDQ0ZWY3NDdiOTM2YzQ2YjI5NWJiYmUxODNmOGRkMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDExOjE4OjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYyBiL2ZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuY1xuaW5kZXggMjRhOGE1NDE4ZTMxMTkuLmZlODRlMWRkNzA3Y2UxIDEwMDY0NFxuLS0tIGEvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmNcbkBAIC0zNTksNyAmIzQzOzM1OSw3IEBAIHZvaWQgbmV0ZnNfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwpXG4gXHRuZXRmc19ycmVxX2V4cGFuZChycmVxLCByYWN0bCk7XG4gXG4gXHRycmVxLVx1MDAzZXN1Ym1pdHRlZCA9IHJyZXEtXHUwMDNlc3RhcnQ7XG4tXHRpZiAocm9sbGluZ19idWZmZXJfaW5pdChcdTAwMjZycmVxLVx1MDAzZWJ1ZmZlciwgcnJlcS1cdTAwM2VkZWJ1Z19pZCwgSVRFUl9ERVNUKSBcdTAwM2MgMClcbiYjNDM7XHRpZiAocm9sbGluZ19idWZmZXJfaW5pdChcdTAwMjZycmVxLVx1MDAzZWJ1ZmZlciwgcnJlcS1cdTAwM2VkZWJ1Z19pZCwgSVRFUl9ERVNULCBHRlBfTk9GUykgXHUwMDNjIDApXG4gXHRcdGdvdG8gY2xlYW51cF9mcmVlO1xuIFx0bmV0ZnNfcmVhZF90b19wYWdlY2FjaGUocnJlcSwgcmFjdGwpO1xuIFxuQEAgLTM3OCw3ICYjNDM7Mzc4LDcgQEAgc3RhdGljIGludCBuZXRmc19jcmVhdGVfc2luZ3VsYXJfYnVmZmVyKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpycmVxLCBzdHJ1Y3QgZm9cbiB7XG4gXHRzc2l6ZV90IGFkZGVkO1xuIFxuLVx0aWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoXHUwMDI2cnJlcS1cdTAwM2VidWZmZXIsIHJyZXEtXHUwMDNlZGVidWdfaWQsIElURVJfREVTVCkgXHUwMDNjIDApXG4mIzQzO1x0aWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoXHUwMDI2cnJlcS1cdTAwM2VidWZmZXIsIHJyZXEtXHUwMDNlZGVidWdfaWQsIElURVJfREVTVCwgR0ZQX05PRlMpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGFkZGVkID0gcm9sbGluZ19idWZmZXJfYXBwZW5kKFx1MDAyNnJyZXEtXHUwMDNlYnVmZmVyLCBmb2xpbywgcm9sbGJ1Zl9mbGFncyk7XG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvcm9sbGluZ19idWZmZXIuYyBiL2ZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmNcbmluZGV4IGExN2ZiZjk4NTNhNDQzLi4zYzRiMWUyNDRjNDZlZiAxMDA2NDRcbi0tLSBhL2ZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmNcbkBAIC02MCwxMSAmIzQzOzYwLDExIEBAIEVYUE9SVF9TWU1CT0wobmV0ZnNfZm9saW9xX2ZyZWUpO1xuICAqIGNvbnN1bWVyLlxuICAqL1xuIGludCByb2xsaW5nX2J1ZmZlcl9pbml0KHN0cnVjdCByb2xsaW5nX2J1ZmZlciAqcm9sbCwgdW5zaWduZWQgaW50IHJyZXFfaWQsXG4tXHRcdFx0dW5zaWduZWQgaW50IGRpcmVjdGlvbilcbiYjNDM7XHRcdFx0dW5zaWduZWQgaW50IGRpcmVjdGlvbiwgZ2ZwX3QgZ2ZwKVxuIHtcbiBcdHN0cnVjdCBmb2xpb19xdWV1ZSAqZnE7XG4gXG4tXHRmcSA9IG5ldGZzX2ZvbGlvcV9hbGxvYyhycmVxX2lkLCBHRlBfTk9GUywgbmV0ZnNfdHJhY2VfZm9saW9xX3JvbGxidWZfaW5pdCk7XG4mIzQzO1x0ZnEgPSBuZXRmc19mb2xpb3FfYWxsb2MocnJlcV9pZCwgZ2ZwLCBuZXRmc190cmFjZV9mb2xpb3Ffcm9sbGJ1Zl9pbml0KTtcbiBcdGlmICghZnEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmMgYi9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG5pbmRleCBmMjc2MWM5OTc5NWE2Yi4uMjhiY2QxMGVmMzMwMjcgMTAwNjQ0XG4tLS0gYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG5AQCAtOTgsNiAmIzQzOzk4LDcgQEAgc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2NyZWF0ZV93cml0ZV9yZXEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdFx0ICAgICBvcmlnaW4gPT0gTkVURlNfV1JJVEVCQUNLX1NJTkdMRSB8fFxuIFx0XHRcdCAgICAgb3JpZ2luID09IE5FVEZTX1dSSVRFVEhST1VHSCB8fFxuIFx0XHRcdCAgICAgb3JpZ2luID09IE5FVEZTX1BHUFJJVjJfQ09QWV9UT19DQUNIRSk7XG4mIzQzO1x0Z2ZwX3QgZ2ZwID0gR0ZQX05PRlM7XG4gXG4gXHR3cmVxID0gbmV0ZnNfYWxsb2NfcmVxdWVzdChtYXBwaW5nLCBmaWxlLCBzdGFydCwgMCwgb3JpZ2luKTtcbiBcdGlmIChJU19FUlIod3JlcSkpXG5AQCAtMTA4LDcgJiM0MzsxMDksMTEgQEAgc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2NyZWF0ZV93cml0ZV9yZXEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRpY3R4ID0gbmV0ZnNfaW5vZGUod3JlcS1cdTAwM2Vpbm9kZSk7XG4gXHRpZiAoaXNfY2FjaGVhYmxlKVxuIFx0XHRmc2NhY2hlX2JlZ2luX3dyaXRlX29wZXJhdGlvbihcdTAwMjZ3cmVxLVx1MDAzZWNhY2hlX3Jlc291cmNlcywgbmV0ZnNfaV9jb29raWUoaWN0eCkpO1xuLVx0aWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoXHUwMDI2d3JlcS1cdTAwM2VidWZmZXIsIHdyZXEtXHUwMDNlZGVidWdfaWQsIElURVJfU09VUkNFKSBcdTAwM2MgMClcbiYjNDM7XG4mIzQzO1x0LyogV3JpdGViYWNrIGlzIHBhcnQgb2YgbWVtb3J5IHJlY2xhaW0gYW5kIG11c3Qgbm90IGZhaWwgZHVlIHRvIEVOT01FTS4gKi9cbiYjNDM7XHRpZiAob3JpZ2luID09IE5FVEZTX1dSSVRFQkFDSyB8fCBvcmlnaW4gPT0gTkVURlNfV1JJVEVCQUNLX1NJTkdMRSlcbiYjNDM7XHRcdGdmcCB8PSBfX0dGUF9OT0ZBSUw7XG4mIzQzO1x0aWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoXHUwMDI2d3JlcS1cdTAwM2VidWZmZXIsIHdyZXEtXHUwMDNlZGVidWdfaWQsIElURVJfU09VUkNFLCBnZnApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG5vbWVtO1xuIFxuIFx0d3JlcS1cdTAwM2VjbGVhbmVkX3RvID0gd3JlcS1cdTAwM2VzdGFydDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JvbGxpbmdfYnVmZmVyLmggYi9pbmNsdWRlL2xpbnV4L3JvbGxpbmdfYnVmZmVyLmhcbmluZGV4IGFjMTViMWZmZGQ4MzE1Li4zOWI3MjQ4ODM4ZTIxMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcm9sbGluZ19idWZmZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9yb2xsaW5nX2J1ZmZlci5oXG5AQCAtNDMsNyAmIzQzOzQzLDcgQEAgc3RydWN0IHJvbGxpbmdfYnVmZmVyX3NuYXBzaG90IHtcbiAjZGVmaW5lIFJPTExCVUZfTUFSS18yXHRCSVQoMSlcbiBcbiBpbnQgcm9sbGluZ19idWZmZXJfaW5pdChzdHJ1Y3Qgcm9sbGluZ19idWZmZXIgKnJvbGwsIHVuc2lnbmVkIGludCBycmVxX2lkLFxuLVx0XHRcdHVuc2lnbmVkIGludCBkaXJlY3Rpb24pO1xuJiM0MztcdFx0XHR1bnNpZ25lZCBpbnQgZGlyZWN0aW9uLCBnZnBfdCBnZnApO1xuIGludCByb2xsaW5nX2J1ZmZlcl9tYWtlX3NwYWNlKHN0cnVjdCByb2xsaW5nX2J1ZmZlciAqcm9sbCk7XG4gc3NpemVfdCByb2xsaW5nX2J1ZmZlcl9sb2FkX2Zyb21fcmEoc3RydWN0IHJvbGxpbmdfYnVmZmVyICpyb2xsLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTE6MTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NJRlMmIzM0OywKICAgICYjMzQ7OVBfRlMmIzM0OywKICAgICYjMzQ7QUZTX0ZTJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRmc19yZWFkYWhlYWQmIzM0OywKICAgICYjMzQ7bmV0ZnNfcmVhZF9mb2xpbyYjMzQ7LAogICAgJiMzNDtuZXRmc193cml0ZXBhZ2VzJiMzNDssCiAgICAmIzM0O25ldGZzX3dyaXRlYmFja19zaW5nbGUmIzM0OywKICAgICYjMzQ7bmV0ZnNfcGVyZm9ybV93cml0ZSYjMzQ7LAogICAgJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyBmb3Igcm9sbGluZyBidWZmZXIgaW5pdGlhbGl6YXRpb24gaW4gdGhlIG5ldGZzIGxpYnJhcnksIHNwZWNpZmljYWxseSBhZGRpbmcgX19HRlBfTk9GQUlMIGZvciB3cml0ZWJhY2sgb3BlcmF0aW9ucyB0byBwcmV2ZW50IEVOT01FTSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldGZzIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODRkYjczM2Y0NDQ0ZWY3NDdiOTM2YzQ2YjI5NWJiYmUxODNmOGRkMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDI1IDExOjE4OjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jIGIvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jCmluZGV4IDI0YThhNTQxOGUzMTE5Li5mZTg0ZTFkZDcwN2NlMSAxMDA2NDQKLS0tIGEvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYwpAQCAtMzU5LDcgJiM0MzszNTksNyBAQCB2b2lkIG5ldGZzX3JlYWRhaGVhZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsKQogCW5ldGZzX3JyZXFfZXhwYW5kKHJyZXEsIHJhY3RsKTsKIAogCXJyZXEtJmd0O3N1Ym1pdHRlZCA9IHJyZXEtJmd0O3N0YXJ0OwotCWlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KCZhbXA7cnJlcS0mZ3Q7YnVmZmVyLCBycmVxLSZndDtkZWJ1Z19pZCwgSVRFUl9ERVNUKSAmbHQ7IDApCiYjNDM7CWlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KCZhbXA7cnJlcS0mZ3Q7YnVmZmVyLCBycmVxLSZndDtkZWJ1Z19pZCwgSVRFUl9ERVNULCBHRlBfTk9GUykgJmx0OyAwKQogCQlnb3RvIGNsZWFudXBfZnJlZTsKIAluZXRmc19yZWFkX3RvX3BhZ2VjYWNoZShycmVxLCByYWN0bCk7CiAKQEAgLTM3OCw3ICYjNDM7Mzc4LDcgQEAgc3RhdGljIGludCBuZXRmc19jcmVhdGVfc2luZ3VsYXJfYnVmZmVyKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpycmVxLCBzdHJ1Y3QgZm8KIHsKIAlzc2l6ZV90IGFkZGVkOwogCi0JaWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoJmFtcDtycmVxLSZndDtidWZmZXIsIHJyZXEtJmd0O2RlYnVnX2lkLCBJVEVSX0RFU1QpICZsdDsgMCkKJiM0MzsJaWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoJmFtcDtycmVxLSZndDtidWZmZXIsIHJyZXEtJmd0O2RlYnVnX2lkLCBJVEVSX0RFU1QsIEdGUF9OT0ZTKSAmbHQ7IDApCiAJCXJldHVybiAtRU5PTUVNOwogCiAJYWRkZWQgPSByb2xsaW5nX2J1ZmZlcl9hcHBlbmQoJmFtcDtycmVxLSZndDtidWZmZXIsIGZvbGlvLCByb2xsYnVmX2ZsYWdzKTsKZGlmZiAtLWdpdCBhL2ZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmMgYi9mcy9uZXRmcy9yb2xsaW5nX2J1ZmZlci5jCmluZGV4IGExN2ZiZjk4NTNhNDQzLi4zYzRiMWUyNDRjNDZlZiAxMDA2NDQKLS0tIGEvZnMvbmV0ZnMvcm9sbGluZ19idWZmZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uZXRmcy9yb2xsaW5nX2J1ZmZlci5jCkBAIC02MCwxMSAmIzQzOzYwLDExIEBAIEVYUE9SVF9TWU1CT0wobmV0ZnNfZm9saW9xX2ZyZWUpOwogICogY29uc3VtZXIuCiAgKi8KIGludCByb2xsaW5nX2J1ZmZlcl9pbml0KHN0cnVjdCByb2xsaW5nX2J1ZmZlciAqcm9sbCwgdW5zaWduZWQgaW50IHJyZXFfaWQsCi0JCQl1bnNpZ25lZCBpbnQgZGlyZWN0aW9uKQomIzQzOwkJCXVuc2lnbmVkIGludCBkaXJlY3Rpb24sIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3QgZm9saW9fcXVldWUgKmZxOwogCi0JZnEgPSBuZXRmc19mb2xpb3FfYWxsb2MocnJlcV9pZCwgR0ZQX05PRlMsIG5ldGZzX3RyYWNlX2ZvbGlvcV9yb2xsYnVmX2luaXQpOwomIzQzOwlmcSA9IG5ldGZzX2ZvbGlvcV9hbGxvYyhycmVxX2lkLCBnZnAsIG5ldGZzX3RyYWNlX2ZvbGlvcV9yb2xsYnVmX2luaXQpOwogCWlmICghZnEpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jIGIvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYwppbmRleCBmMjc2MWM5OTc5NWE2Yi4uMjhiY2QxMGVmMzMwMjcgMTAwNjQ0Ci0tLSBhL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYwpAQCAtOTgsNiAmIzQzOzk4LDcgQEAgc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2NyZWF0ZV93cml0ZV9yZXEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkgICAgIG9yaWdpbiA9PSBORVRGU19XUklURUJBQ0tfU0lOR0xFIHx8CiAJCQkgICAgIG9yaWdpbiA9PSBORVRGU19XUklURVRIUk9VR0ggfHwKIAkJCSAgICAgb3JpZ2luID09IE5FVEZTX1BHUFJJVjJfQ09QWV9UT19DQUNIRSk7CiYjNDM7CWdmcF90IGdmcCA9IEdGUF9OT0ZTOwogCiAJd3JlcSA9IG5ldGZzX2FsbG9jX3JlcXVlc3QobWFwcGluZywgZmlsZSwgc3RhcnQsIDAsIG9yaWdpbik7CiAJaWYgKElTX0VSUih3cmVxKSkKQEAgLTEwOCw3ICYjNDM7MTA5LDExIEBAIHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19jcmVhdGVfd3JpdGVfcmVxKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCWljdHggPSBuZXRmc19pbm9kZSh3cmVxLSZndDtpbm9kZSk7CiAJaWYgKGlzX2NhY2hlYWJsZSkKIAkJZnNjYWNoZV9iZWdpbl93cml0ZV9vcGVyYXRpb24oJmFtcDt3cmVxLSZndDtjYWNoZV9yZXNvdXJjZXMsIG5ldGZzX2lfY29va2llKGljdHgpKTsKLQlpZiAocm9sbGluZ19idWZmZXJfaW5pdCgmYW1wO3dyZXEtJmd0O2J1ZmZlciwgd3JlcS0mZ3Q7ZGVidWdfaWQsIElURVJfU09VUkNFKSAmbHQ7IDApCiYjNDM7CiYjNDM7CS8qIFdyaXRlYmFjayBpcyBwYXJ0IG9mIG1lbW9yeSByZWNsYWltIGFuZCBtdXN0IG5vdCBmYWlsIGR1ZSB0byBFTk9NRU0uICovCiYjNDM7CWlmIChvcmlnaW4gPT0gTkVURlNfV1JJVEVCQUNLIHx8IG9yaWdpbiA9PSBORVRGU19XUklURUJBQ0tfU0lOR0xFKQomIzQzOwkJZ2ZwIHw9IF9fR0ZQX05PRkFJTDsKJiM0MzsJaWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoJmFtcDt3cmVxLSZndDtidWZmZXIsIHdyZXEtJmd0O2RlYnVnX2lkLCBJVEVSX1NPVVJDRSwgZ2ZwKSAmbHQ7IDApCiAJCWdvdG8gbm9tZW07CiAKIAl3cmVxLSZndDtjbGVhbmVkX3RvID0gd3JlcS0mZ3Q7c3RhcnQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JvbGxpbmdfYnVmZmVyLmggYi9pbmNsdWRlL2xpbnV4L3JvbGxpbmdfYnVmZmVyLmgKaW5kZXggYWMxNWIxZmZkZDgzMTUuLjM5YjcyNDg4MzhlMjEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JvbGxpbmdfYnVmZmVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9yb2xsaW5nX2J1ZmZlci5oCkBAIC00Myw3ICYjNDM7NDMsNyBAQCBzdHJ1Y3Qgcm9sbGluZ19idWZmZXJfc25hcHNob3QgewogI2RlZmluZSBST0xMQlVGX01BUktfMglCSVQoMSkKIAogaW50IHJvbGxpbmdfYnVmZmVyX2luaXQoc3RydWN0IHJvbGxpbmdfYnVmZmVyICpyb2xsLCB1bnNpZ25lZCBpbnQgcnJlcV9pZCwKLQkJCXVuc2lnbmVkIGludCBkaXJlY3Rpb24pOwomIzQzOwkJCXVuc2lnbmVkIGludCBkaXJlY3Rpb24sIGdmcF90IGdmcCk7CiBpbnQgcm9sbGluZ19idWZmZXJfbWFrZV9zcGFjZShzdHJ1Y3Qgcm9sbGluZ19idWZmZXIgKnJvbGwpOwogc3NpemVfdCByb2xsaW5nX2J1ZmZlcl9sb2FkX2Zyb21fcmEoc3RydWN0IHJvbGxpbmdfYnVmZmVyICpyb2xsLAogCQkJCSAgICBzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjEwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0ZnMgTWVtb3J5IEFsbG9jYXRpb24gQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGByb2xsaW5nX2J1ZmZlcl9pbml0YC4gVGhlIHByaW1hcnkgY2hhbmdlIHNlZW1zIHRvIGJlIGludHJvZHVjaW5nIGEgYGdmcF90YCBhcmd1bWVudCwgYW5kIHRoZW4gdXBkYXRpbmcgaXRzIHVzZXMgaW4gYGZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuY2AgYW5kIGBmcy9uZXRmcy93cml0ZV9pc3N1ZS5jYC4gU3BlY2lmaWNhbGx5LCB3aXRoaW4gYGZzL25ldGZzL3dyaXRlX2lzc3VlLmNgLCB0aGVyZSYjMzk7cyBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIGFkZGluZyBgX19HRlBfTk9GQUlMYCB0byB0aGUgYGdmcGAgZmxhZ3Mgd2hlbiBkZWFsaW5nIHdpdGggd3JpdGViYWNrIG9wZXJhdGlvbnMsIGxpa2UgYE5FVEZTX1dSSVRFQkFDS2AgYW5kIGBORVRGU19XUklURUJBQ0tfU0lOR0xFYC4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBzaGlmdCBpbXBhY3RpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yIHdpdGhpbiB0aGUgYG5ldGZzYCBzdWJzeXN0ZW0uIFRoaXMgZGlyZWN0bHkgaW5mbHVlbmNlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHJvbGxpbmcgYnVmZmVyLiBDb25zaWRlcmluZyBgbmV0ZnNgIGlzIGxldmVyYWdlZCBieSBzZXZlcmFsIG5ldHdvcmsgZmlsZXN5c3RlbXMgbGlrZSBBRlMsIENlcGgsIENJRlMsIGFuZCA5cCwgdGhpcyBjaGFuZ2UgY2xlYXJseSBoYXMgd2lkZXIgaW1wbGljYXRpb25zLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhpcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQga2V5IGZ1bmN0aW9ucyB0byBzZWUgd2hlcmUgdGhpcyBpbXBhY3RzOiBJIG5lZWQgdG8gY2hlY2sgYG5ldGZzX3JlYWRhaGVhZGAsIGBuZXRmc19jcmVhdGVfc2luZ3VsYXJfYnVmZmVyYCwgYG5ldGZzX2NyZWF0ZV93cml0ZV9yZXFgLCBhbmQsIG9mIGNvdXJzZSwgYHJvbGxpbmdfYnVmZmVyX2luaXRgIGl0c2VsZiB0byBzZWUgd2hlcmUgdGhlIGNoYW5nZSBpcyBpbmNvcnBvcmF0ZWQuCgpOZXh0LCBJIG5lZWQgdG8ga25vdyB0aGUgY29uZmlnIG9wdGlvbiBmb3IgYG5ldGZzYCwgc28gdGhhdCBJIGtub3cgaWYgaXQgaXMgZW5hYmxlZC4gSSYjMzk7bGwgY2hlY2sgYGZzL25ldGZzL0tjb25maWdgIGFuZCBsb29rIGZvciBgQ09ORklHX05FVEZTX1NVUFBPUlRgLgoKSSYjMzk7bGwgc3BlY2lmaWNhbGx5IHNjcnV0aW5pemUgYG5ldGZzX2NyZWF0ZV93cml0ZV9yZXFgIGFuZCBgbmV0ZnNfcmVhZGFoZWFkYCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBnZnBfdGAgY2hhbmdlIHJpcHBsZXMgdGhyb3VnaCB0aGUgY29kZSwgcGFydGljdWxhcmx5IGluIHJlZ2FyZHMgdG8gdGhlIG5ldyBsb2dpYyBhcm91bmQgd3JpdGViYWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGU19TVVBQT1JUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9LY29uZmlnLTItXG5mcy9uZXRmcy9LY29uZmlnOjM6Y29uZmlnIE5FVEZTX1NVUFBPUlRcbmZzL25ldGZzL0tjb25maWctNC1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkyMwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVwZW5kZW5jaWVzIGFuZCBTZWxlY3Rpb24gQ3JpdGVyaWE6IEEgRGVlcCBEaXZlKioKCkFscmlnaHQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIGluZmx1ZW5jZSBoZXJlLiBMZXQmIzM5O3MgZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgZ3JpcCBvbiB0aGUgc3lzdGVtLCBzcGVjaWZpY2FsbHksIGFueSBjb2RlLCBkYXRhLCBvciBwcm9jZXNzZXMgdGhhdCBlaXRoZXIgKipkZXBlbmQqKiBvbiB0aGUgY3VycmVudCB0aGluZyB3ZSYjMzk7cmUgZXhhbWluaW5nLCBvciB0aGF0IHVzZSBpdCBhcyBhIHNlbGVjdGlvbiBjcml0ZXJpb24gb3IgaW5wdXQuCgpUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgcHJvdmlkZSB0aGUgYmFzaXMgZm9yIHJpc2sgYXNzZXNzbWVudDogSWYgYSBjaGFuZ2UgaXMgbmVlZGVkIGhlcmUsIHdoYXQgaXMgdGhlIGNvc3Qgb2Ygc3VjaCBhIGNoYW5nZT8gV2hhdCBkb3duc3RyZWFtIHN5c3RlbXMgYXJlIGxpa2VseSB0byBiZSBpbXBhY3RlZD8gCgpDb252ZXJzZWx5LCBpZiAqdGhpcyogdGhpbmcgaXMgdXNlZCBhcyBhIGZpbHRlciBvciBzZWxlY3RvciwgSSBtdXN0IHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIG91dGNvbWVzLiBXaGF0IGJlaGF2aW9ycyBvciByZXN1bHRzIGFyZSBzZWxlY3RlZCBieSB0aGlzIHRoaW5nPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBzZWxlY3RlZCB2cy4gcmVqZWN0ZWQgZGF0YT8gQXJlIHRoZXJlIGVkZ2UgY2FzZXMgSSBuZWVkIHRvIGNvbnNpZGVyPyBJbiBzaG9ydCwgSSBuZWVkIHRvIG1hcCB0aGUgY2F1c2FsIHJlbGF0aW9uc2hpcHMgYXMgY29tcGxldGVseSBhcyBwb3NzaWJsZS4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlIHNvIHRoYXQgSSBkb24mIzM5O3QgaW5hZHZlcnRlbnRseSBicmVhayBleGlzdGluZyBmdW5jdGlvbmFsaXR5IG9yIGludHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW9yLCBhbmQgdGhhdCB0aGlzIGJlaGF2aW9yIGNvbmZvcm1zIHRvIHRoZSBuZWVkcyBvZiB0aGUgc3lzdGVtIGF0IGxhcmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBORVRGU19TVVBQT1JUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzLzlwL0tjb25maWc9Mj1jb25maWcgOVBfRlNcbi0tXG5mcy85cC9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIE5FVF85UFxuZnMvOXAvS2NvbmZpZzo1Olx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcbmZzLzlwL0tjb25maWctNi1cdGhlbHBcbi0tXG5mcy9hZnMvS2NvbmZpZz0yPWNvbmZpZyBBRlNfRlNcbi0tXG5mcy9hZnMvS2NvbmZpZy02LVx0c2VsZWN0IEROU19SRVNPTFZFUlxuZnMvYWZzL0tjb25maWc6NzpcdHNlbGVjdCBORVRGU19TVVBQT1JUXG5mcy9hZnMvS2NvbmZpZy04LVx0c2VsZWN0IENSWVBUT19LUkI1XG4tLVxuZnMvY2VwaC9LY29uZmlnPTI9Y29uZmlnIENFUEhfRlNcbi0tXG5mcy9jZXBoL0tjb25maWctNS1cdHNlbGVjdCBDRVBIX0xJQlxuZnMvY2VwaC9LY29uZmlnOjY6XHRzZWxlY3QgTkVURlNfU1VQUE9SVFxuZnMvY2VwaC9LY29uZmlnLTctXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbi0tXG5mcy9uZnMvS2NvbmZpZz0xNzM9Y29uZmlnIE5GU19GU0NBQ0hFXG4tLVxuZnMvbmZzL0tjb25maWctMTc1LVx0ZGVwZW5kcyBvbiBORlNfRlNcbmZzL25mcy9LY29uZmlnOjE3NjpcdHNlbGVjdCBORVRGU19TVVBQT1JUXG5mcy9uZnMvS2NvbmZpZy0xNzctXHRzZWxlY3QgRlNDQUNIRVxuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZz0yPWNvbmZpZyBDSUZTXG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwLVx0c2VsZWN0IE9JRF9SRUdJU1RSWVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjIxOlx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0yMi1cdGhlbHBcbi0tXG5uZXQvOXAvS2NvbmZpZz02PW1lbnVjb25maWcgTkVUXzlQXG5uZXQvOXAvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7UGxhbiA5IFJlc291cmNlIFNoYXJpbmcgU3VwcG9ydCAoOVAyMDAwKVwmIzM0O1xubmV0LzlwL0tjb25maWc6ODpcdHNlbGVjdCBORVRGU19TVVBQT1JUXG5uZXQvOXAvS2NvbmZpZy05LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24sIGFuZCBJIHNlZSB0aGF0IGBORVRGU19TVVBQT1JUYCBpcyBpbmRpcmVjdGx5IHNlbGVjdGVkIGJ5IGEgZmV3IG5ldHdvcmsgZmlsZSBzeXN0ZW1zOiBgOVBfRlNgLCBgQUZTX0ZTYCwgYENFUEhfRlNgLCBgTkZTX0ZTQ0FDSEVgLCBhbmQgYENJRlNgLiAgVGhhdCYjMzk7cyBnb29kLCBpdCBtYWtlcyBzZW5zZS4gSSBjYW4gZGlyZWN0bHkgZW5hYmxlIGBDSUZTYCwgYDlQX0ZTYCwgYEFGU19GU2AsIGBDRVBIX0ZTYCwgb3IgYE5GU19GU0NBQ0hFYCwgYW5kIGBORVRGU19TVVBQT1JUYCB3aWxsIGNvbWUgYWxvbmcgZm9yIHRoZSByaWRlLiBXYWl0IGEgbWludXRlLi4uIGBORVRGU19TVVBQT1JUYCBpdHNlbGYgaXMgYSB0cmlzdGF0ZSwgYW5kIGl0JiMzOTtzICpzZWxlY3RlZCogaW4gdGhlc2UgY2FzZXMsIHNvIEkgZG9uJiMzOTt0IG5lZWQgdG8gZW5hYmxlIGl0IGRpcmVjdGx5LiAgSXQmIzM5O3MganVzdCBhIGRlcGVuZGVuY3k7IGVuYWJsaW5nIGFueSBvZiB0aG9zZSBzaG91bGQgY292ZXIgaXQuICBCdXQgY2FuIEkganVzdCBsaXN0IGBORVRGU19TVVBQT1JUYCBpdHNlbGY/ICBObywgYmVjYXVzZSBpdCYjMzk7cyBhIGhpZGRlbiBjb25maWd1cmF0aW9uIG9wdGlvbiwgbm90IHNvbWV0aGluZyB0aGUgdXNlciBjYW4gZGlyZWN0bHkgaW50ZXJhY3Qgd2l0aC4KClNvLCB0aGUga2V5IGhlcmUgaXMgdG8gZXhwb3NlIHRoZSAqcmVhbCogY29uZmlndXJhdGlvbiBvcHRpb25zOiBJIHNob3VsZCBsaXN0IGBDSUZTYCwgYDlQX0ZTYCwgYEFGU19GU2AsIGFuZCBgQ0VQSF9GU2AuICBUaGF0IGNvdmVycyBhbGwgdGhlIGJhc2VzIGZvciB0aGUgdXNlci4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiBgbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcWAgYW5kIGBuZXRmc19yZWFkYWhlYWRgIGFyZSB2aWFibGUgZm9jdXMgc3ltYm9scyBmb3IgdGhpcyBhcmVhLiBJdCBtaWdodCBiZSBoZWxwZnVsIHRvIGRpcmVjdCB1c2VycyB0byB0aG9zZSBzeW1ib2xzIHRvIGdhaW4gaW5zaWdodCBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc19jcmVhdGVfd3JpdGVfcmVxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jPTIxNT1zc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjM0LVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjM1Olx0d3JlcSA9IG5ldGZzX2NyZWF0ZV93cml0ZV9yZXEoaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZywgaW9jYi1cdTAwM2VraV9maWxwLCBzdGFydCxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIzNi1cdFx0XHRcdCAgICAgIGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUID9cbi0tXG5mcy9uZXRmcy9pbnRlcm5hbC5oPTE5NT12b2lkIG5ldGZzX3dyaXRlX2NvbGxlY3Rpb25fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4tLVxuZnMvbmV0ZnMvaW50ZXJuYWwuaC0xOTktICovXG5mcy9uZXRmcy9pbnRlcm5hbC5oOjIwMDpzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbmZzL25ldGZzL2ludGVybmFsLmgtMjAxLVx0XHRcdFx0XHRcdHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jPTk3PXN0YXRpYyBzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfcGdwcml2Ml9iZWdpbl9jb3B5X3RvX2NhY2hlKFxuLS1cbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jLTEwNC1cbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jOjEwNTpcdGNyZXEgPSBuZXRmc19jcmVhdGVfd3JpdGVfcmVxKHJyZXEtXHUwMDNlbWFwcGluZywgTlVMTCwgZm9saW9fcG9zKGZvbGlvKSxcbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jLTEwNi1cdFx0XHRcdCAgICAgIE5FVEZTX1BHUFJJVjJfQ09QWV9UT19DQUNIRSk7XG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz00Mz1zdGF0aWMgdm9pZCBuZXRmc19raWxsX2RpcnR5X3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtODktICovXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjkwOnN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19jcmVhdGVfd3JpdGVfcmVxKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy05MS1cdFx0XHRcdFx0XHRzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTU1MT1pbnQgbmV0ZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTU2Ni1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6NTY3Olx0d3JlcSA9IG5ldGZzX2NyZWF0ZV93cml0ZV9yZXEobWFwcGluZywgTlVMTCwgZm9saW9fcG9zKGZvbGlvKSwgTkVURlNfV1JJVEVCQUNLKTtcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNTY4LVx0aWYgKElTX0VSUih3cmVxKSkge1xuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9NjIyPXN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19iZWdpbl93cml0ZXRocm91Z2goc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgbGVuKVxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjI4LVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo2Mjk6XHR3cmVxID0gbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nLCBpb2NiLVx1MDAzZWtpX2ZpbHAsXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYzMC1cdFx0XHRcdCAgICAgIGlvY2ItXHUwMDNla2lfcG9zLCBORVRGU19XUklURVRIUk9VR0gpO1xuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9ODQxPWludCBuZXRmc193cml0ZWJhY2tfc2luZ2xlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtODU5LVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo4NjA6XHR3cmVxID0gbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShtYXBwaW5nLCBOVUxMLCAwLCBORVRGU19XUklURUJBQ0tfU0lOR0xFKTtcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtODYxLVx0aWYgKElTX0VSUih3cmVxKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYG5ldGZzX2NyZWF0ZV93cml0ZV9yZXFgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcWAuIEl0JiMzOTtzIGRlZmluaXRlbHkgbm90IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhhdCB1c3VhbGx5IG1lYW5zIGl0JiMzOTtzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIG1vZHVsZSwgcmlnaHQ/IEJ1dCB3YWl0IGEgbWludXRl4oCmIGl0JiMzOTtzIGRlZmluZWQgd2l0aGluIHRoZSBuZXRmcyBtb2R1bGUsIHNwZWNpZmljYWxseSBpbiBgZnMvbmV0ZnMvaW50ZXJuYWwuaGAuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyZSBrZXB0LiBTbywgaWYgaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhlIG5ldGZzIG1vZHVsZSBhbmQgZGVmaW5lZCB3aXRoaW4gdGhlIGludGVybmFsIGhlYWRlciwgdGhhdCB1c3VhbGx5IHN1Z2dlc3RzIGl0IHNob3VsZCBiZSBgc3RhdGljYC4gU29tZXRoaW5nIGZlZWxzIG9mZiBoZXJlLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIGl0JiMzOTtzIGFjdHVhbGx5IGV4cG9ydGVkIHNvbWV3aGVyZS4gSXMgdGhlcmUgYSBjaGFuY2UgdGhhdCwgZGVzcGl0ZSB0aGUgaW50ZXJuYWwgZGVjbGFyYXRpb24sIHNvbWUgb3RoZXIgcGFydCBvZiB0aGUgc3lzdGVtIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbj8gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaCB0byBiZSBzdXJlLiBUaGlzIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiB0byB1bmRlcnN0YW5kIGl0cyBpbnRlbmRlZCB2aXNpYmlsaXR5IGFuZCBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEl0IGNvdWxkIGJlIGFuIG92ZXJzaWdodCwgb3IgbWF5YmUgdGhlcmUmIzM5O3MgYSBnb29kIHJlYXNvbiBmb3IgdGhpcyBkZXNpZ24gdGhhdCBJIGhhdmVuJiMzOTt0IGdyYXNwZWQgeWV0LiBJIG5lZWQgdG8gZmluZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25ldGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NzEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIFVuZXhwb3J0ZWQsIE5vbi1TdGF0aWMgVGVycml0b3J5KioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNvbWV0aGluZyYjMzk7cyBjYXRjaGluZyBteSBleWUuIEl0JiMzOTtzIG5vdCBleHBvcnRlZCwgc28gaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhlIG1vZHVsZSwgdGhhdCYjMzk7cyBmaW5lIGZvciBzb21lIHB1cnBvc2VzLiBCdXQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyAqbm9uLXN0YXRpYyogaXMgd2hhdCBnaXZlcyBtZSBwYXVzZS4gVGhhdCBpbXBsaWVzIHBvdGVudGlhbCBsaW5rYWdlLCBpbnRlcmFjdGlvbiBhY3Jvc3MgY29tcGlsYXRpb24gdW5pdHMsIGV2ZW4gaWYgaXQmIzM5O3Mgbm90IGRpcmVjdGx5IGV4cG9zZWQgdGhyb3VnaCBhIGhlYWRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBJJiMzOTttIHdvbmRlcmluZyB3aGF0IG90aGVyIHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgYXJlIGluIHBsYXkuIEkgYW0gdGhpbmtpbmcsIHdoYXQgYWJvdXQgYG5ldGZzX3JlYWRhaGVhZGA/IFdoYXQgcm9sZSBkb2VzICp0aGF0KiBwbGF5IGluIHRoaXMgbGFuZHNjYXBlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoaXMgY29kZSBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc19yZWFkYWhlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZXRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jPTIwOT1zdGF0aWMgdm9pZCBuZXRmc19yZWFkX3RvX3BhZ2VjYWNoZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSxcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzIxLS8qKlxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jOjMyMjogKiBuZXRmc19yZWFkYWhlYWQgLSBIZWxwZXIgdG8gbWFuYWdlIGEgcmVhZCByZXF1ZXN0XG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzIzLSAqIEByYWN0bDogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSByZWFkYWhlYWQgcmVxdWVzdFxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy0zMzUtICovXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6MzM2OnZvaWQgbmV0ZnNfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwpXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzM3LXtcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzcwLX1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzozNzE6RVhQT1JUX1NZTUJPTChuZXRmc19yZWFkYWhlYWQpO1xuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTM3Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk2MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNvbnNpZGVyaW5nIE5ldEZTIE9wdGltaXphdGlvbiBTdHJhdGVnaWVzKioKCk9rYXksIHNvIGBuZXRmc19yZWFkYWhlYWRgIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIGV4cG9zZSwgaXQmIzM5O3MgYSBrbm93biBxdWFudGl0eS4gQnV0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB3cml0ZSBzaWRlIG9mIHRoaW5ncy4gV2UmIzM5O3JlIG9wdGltaXppbmcgZm9yIG5ldHdvcmsgZmlsZSBzeXN0ZW1zLCBhbmQgaXQgbWFrZXMgbWUgd29uZGVyOiB3aGF0JiMzOTtzIHRoZSBzdGF0dXMgb24gYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgPyBJcyBpdCBhbHNvIGV4cG9ydGVkPyBUaGlzIGlzIGEga2V5IGFyZWEgZm9yIHBlcmZvcm1hbmNlLiBJcyBpdCBpbXBsZW1lbnRlZCBmb3IgdGhlIG5ldHdvcmsgZmlsZSBzeXN0ZW1zIGJlaW5nIGNvbnNpZGVyZWQgYW5kIGlmIHNvLCBpcyB0aGVyZSBhIGdvb2QgcmVhc29uIGZvciB0aGlzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVzaWduIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBmaWxlIEkvTyBsYXllci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlIG9uIHRoaXMgZnVuY3Rpb24gYW5kIGhvdyB3ZSYjMzk7cmUgbGV2ZXJhZ2luZyBpdCwgb3IgaWYgd2UgYXJlIGV2ZW4gbGV2ZXJhZ2luZyBpdCwgc28gSSBjYW4gc3RhcnQgdGhpbmtpbmcgYWJvdXQgaG93IHRvIGJlc3Qgb3B0aW1pemUgdGhlIGZsb3cgb2YgZGF0YS4gV2hhdCBhcmUgdGhlIHRyYWRlLW9mZnMgaW52b2x2ZWQgaW4gYnVmZmVyaW5nIHZlcnN1cyBub3QgYnVmZmVyaW5nLCBhbmQgaG93IGRvZXMgdGhhdCBpbmZsdWVuY2UgdGhyb3VnaHB1dCBhbmQgbGF0ZW5jeSBpbiBvdXIgc3BlY2lmaWMgbmV0d29yayBjb250ZXh0PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jPTIwMz1zdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2FzeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTQtICovXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoyMTU6c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjE2LVx0XHRcdFx0XHRcdCAgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cClcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMDctfVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzA4OkVYUE9SVF9TWU1CT0wobmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMDktXG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM9MzIzPXNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4MS1cdFx0XHQgICBGU0NBQ0hFX0lOVkFMX0RJT19XUklURSk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozODI6XHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKGlvY2IsIGZyb20sIE5VTEwpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzgzLW91dDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU3NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE5ldEZTIFdyaXRlIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBzbyBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZGAgaXMgYmVpbmcgZXhwbGljaXRseSBleHBvcnRlZC4gSG1tLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJdCBzdWdnZXN0cyBhIHBhcnRpY3VsYXIgd2F5IG9mIGhhbmRsaW5nIHVuYnVmZmVyZWQgd3JpdGVzIHdpdGhpbiB0aGUgTmV0RlMgZmlsZSBzeXN0ZW0uIEEgZm9jdXMgb24gaXRlcmF0b3JzIGFuZCBsb2NraW5nIGltcGxpZXMgc29tZSBjb25zaWRlcmF0aW9ucyBmb3IgY29uY3VycmVuY3kgYW5kIGRhdGEgZmxvdy4gSXQgcHJvYmFibHkgaGFuZGxlcyB0aGUgY29yZSBsb2dpYyBmb3Igd3JpdGluZyBkaXJlY3RseSB0byB0aGUgdW5kZXJseWluZyBzdG9yYWdlIHdpdGhvdXQgaW50ZXJtZWRpYXRlIGJ1ZmZlcmluZywgb3IgYXQgbGVhc3QgcHJvdmlkZXMgYWNjZXNzIHRvIGEgc3BlY2lmaWMgcGF0aCB0byBkbyBzby4KCkJ1dCB3aGF0IGFib3V0IGl0cyBjb3VudGVycGFydCwgYG5ldGZzX3dyaXRlcGFnZXNgPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24sIGlzbiYjMzk7dCBpdD8gSXMgaXQgYWxzbyBleHBvcnRlZD8gQW5kIGlmIHNvLCBob3cgZG8gdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdD8gT3IgZG9lcyBpdCBtZWFuIGl0JiMzOTtzIGFuIGludGVybmFsIGZ1bmN0aW9uPyBPciwgYXJlIHRoZXkgdXNlZCBpbiBjb21wbGVtZW50YXJ5IHdheXM/IGBuZXRmc193cml0ZXBhZ2VzYCBoYW5kbGVzIHRoZSBwYWdlLWJhc2VkIHdyaXRpbmcsIHR5cGljYWxseSBmb3IgYnVmZmVyZWQgSS9PLCBhbGxvd2luZyB0aGUgZmlsZSBzeXN0ZW0gdG8gb3B0aW1pemUgd3JpdGUgb3BlcmF0aW9ucyBmb3IgcGVyZm9ybWFuY2UsIHNvIGlmIGJvdGggYXJlIGV4cG9ydGVkLCBob3cgaXMgdGhlIGNob2ljZSBtYWRlIGJldHdlZW4gdW5idWZmZXJlZCB3cml0ZXMsIGFuZCBwYWdlLWJhc2VkIHdyaXRlcz8gVGhpcyBpcyB3aGVyZSB0aGUgaW50cmljYWNpZXMgb2YgTmV0RlMmIzM5O3MgZGVzaWduIGZvciBidWZmZXJpbmcgYW5kIGRpcmVjdCBJL08gYmVjb21lIGNsZWFyLiBNeSBmb2N1cyB3aWxsIGJlIGhlcmUgdG8gZGV0ZXJtaW5lIGhvdyB3cml0ZSBzdHJhdGVnaWVzIGFyZSBtYWRlLiBIb3cgZG9lcyB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMgaW5mbHVlbmNlIHRoZSBwZXJmb3JtYW5jZSBhbmQgdGhlIGJlaGF2aW91ciBvZiB0aGUgd2hvbGUgc3lzdGVtPyBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCB3cml0ZSBwYXRoLCBob3cgZGF0YSBtb3ZlcyBmcm9tIHRoZSBhcHBsaWNhdGlvbiwgdGhyb3VnaCB0aGUgVkZTIGxheWVyLCBpbnRvIHRoZSBOZXRGUywgYW5kIGV2ZW50dWFsbHkgdG8gdGhlIG5ldHdvcmsgb3Igc3RvcmFnZS4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0mIzM5O3Mgd3JpdGUgbWVjaGFuaXNtcyBhcmUgaW1wbGVtZW50ZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc193cml0ZXBhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25ldGZzL3dyaXRlX2lzc3VlLmM9NTI3PXN0YXRpYyB2b2lkIG5ldGZzX2VuZF9pc3N1ZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTU1MC0gKi9cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6NTUxOmludCBuZXRmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy01NTItXHRcdCAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy02MTYtfVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo2MTc6RVhQT1JUX1NZTUJPTChuZXRmc193cml0ZXBhZ2VzKTtcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjE4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTc0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ29uc2lkZXJpbmcgTmV0RlMgV3JpdGUgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBgbmV0ZnNfd3JpdGVwYWdlc2AgaXMgZXhwb3J0ZWQsIHRoYXQgbXVjaCBJIGtub3cuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGluIGdldHRpbmcgZGF0YSBvbnRvIHRoZSBuZXR3b3JrIGZpbGUgc3lzdGVtLiBCdXQsIGFuZCBoZXJlJiMzOTtzIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIHRoYXQmIzM5O3MgbmFnZ2luZyBhdCBtZSwgd2hhdCYjMzk7cyB0aGUgZGVhbCB3aXRoIGBuZXRmc19iZWdpbl93cml0ZXRocm91Z2hgPyBJdCYjMzk7cyByZWxhdGVkLCBvYnZpb3VzbHksIGJ1dCB3aGF0JiMzOTtzIGl0cyBzcGVjaWZpYyByb2xlIGluIHRoZSBwcm9jZXNzPyBJcyBpdCBoYW5kbGluZyB0aGUgaW5pdGlhbCBzZXR1cCBmb3IgYSB3cml0ZXRocm91Z2ggb3BlcmF0aW9uLCBjb29yZGluYXRpbmcgdGhlIG1ldGFkYXRhIHVwZGF0ZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggYG5ldGZzX3dyaXRlcGFnZXNgIHRvIGVuc3VyZSB0aGUgd2hvbGUgd3JpdGUgcGF0aCBpcyByb2J1c3QgYW5kIG9wdGltaXplZC4gSXQmIzM5O3MgdGhhdCBzdWJ0bGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlbSB0aGF0IG9mdGVuIHJldmVhbHMgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4gSSByZWFsbHkgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIHNlbWFudGljcyBvZiB0aGF0IGZ1bmN0aW9uIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGZzX2JlZ2luX3dyaXRldGhyb3VnaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25ldGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTg3PXNzaXplX3QgbmV0ZnNfcGVyZm9ybV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTExOC1cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6MTE5Olx0XHR3cmVxID0gbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoKGlvY2IsIGl0ZXItXHUwMDNlY291bnQpO1xuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy0xMjAtXHRcdGlmIChJU19FUlIod3JlcSkpIHtcbi0tXG5mcy9uZXRmcy9pbnRlcm5hbC5oPTIxMj1zaXplX3QgbmV0ZnNfYWR2YW5jZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcbi0tXG5mcy9uZXRmcy9pbnRlcm5hbC5oLTIxNC1cdFx0XHQgICBsb2ZmX3Qgc3RhcnQsIHNpemVfdCBsZW4sIGJvb2wgdG9fZW9mKTtcbmZzL25ldGZzL2ludGVybmFsLmg6MjE1OnN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19iZWdpbl93cml0ZXRocm91Z2goc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgbGVuKTtcbmZzL25ldGZzL2ludGVybmFsLmgtMjE2LWludCBuZXRmc19hZHZhbmNlX3dyaXRldGhyb3VnaChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz02MTc9RVhQT1JUX1NZTUJPTChuZXRmc193cml0ZXBhZ2VzKTtcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYyMS0gKi9cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6NjIyOnN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19iZWdpbl93cml0ZXRocm91Z2goc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgbGVuKVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy02MjMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODExCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBhIGZpbGVzeXN0ZW1zIGltcGxlbWVudGF0aW9uOgoKKipEaWdnaW5nIGludG8gdGhlIEZpbGVzeXN0ZW0gSW50ZXJuYWxzKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBuZXRmc19wZXJmb3JtX3dyaXRlYCBmdW5jdGlvbiwgd2hpY2ggaXMsIGltcG9ydGFudGx5LCAqZXhwb3J0ZWQqLiBJdCYjMzk7cyBjbGVhcmx5IGEga2V5IHBhcnQgb2YgaG93IHRoaXMgbmV0d29yayBmaWxlc3lzdGVtIGhhbmRsZXMgd3JpdGVzLiBCdXQgdGhlbiBJIHNlZSB0aGF0IGBuZXRmc19iZWdpbl93cml0ZXRocm91Z2hgIGlzIGJlaW5nIGNhbGxlZCB3aXRoaW4gaXQuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZyBiZWNhdXNlIGBuZXRmc19iZWdpbl93cml0ZXRocm91Z2hgIGlzICpub3QqIGV4cG9ydGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBpbm5lciBmdW5jdGlvbiBpc24mIzM5O3QgZXhwb3NlZCBhbmQgd2hhdCByZWxhdGlvbnNoaXAgaXQgaGFzIHdpdGggdGhlIGV4cG9ydGVkIGBuZXRmc19wZXJmb3JtX3dyaXRlYC4gSXMgYG5ldGZzX2JlZ2luX3dyaXRldGhyb3VnaGAgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVpbmcgY2FyZWZ1bGx5IG1hbmFnZWQsIG9yIGlzIHRoaXMgYSBwb3RlbnRpYWwgdmlvbGF0aW9uIG9mIHNvbWUgbGF5ZXJpbmcgcHJpbmNpcGxlPyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgbm9uLWV4cG9ydGVkIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhpcyBhcmNoaXRlY3R1cmUgZnVsbHkuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgZGVsaWJlcmF0ZWx5IGhpZGRlbiwgYW5kIGlmIHNvLCB0aGUgcmF0aW9uYWxlLiBUaGlzIGNvdWxkIHBvaW50IHRvIGEgcHJvdGVjdGVkIGNyaXRpY2FsIHNlY3Rpb24gb3IgYW4gb3B0aW1pemF0aW9uIHRoYXQmIzM5O3MgdG9vIHNwZWNpZmljIHRvIGV4cG9zZSBkaXJlY3RseSB0byB0aGUgZmlsZXN5c3RlbSBjbGllbnRzLiBOb3cgSSBuZWVkIHRvIGV4cGxvcmUgd2hhdCB0aGF0IGBuZXRmc19iZWdpbl93cml0ZXRocm91Z2hgIGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKiB0byBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgbGFyZ2VyIHdyaXRlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGZzX3BlcmZvcm1fd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZXRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jPTU2MT1zdGF0aWMgYm9vbCBuZXRmc19za2lwX2ZvbGlvX3JlYWQoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgc2l6ZV90IGxlbixcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNjI0LSAqXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6NjI1OiAqIE5vdGUgdGhhdCB0aGlzIHNob3VsZCBiZSBjb25zaWRlcmVkIGRlcHJlY2F0ZWQgYW5kIG5ldGZzX3BlcmZvcm1fd3JpdGUoKVxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTYyNi0gKiB1c2VkIGluc3RlYWQuXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz0zNz12b2lkIG5ldGZzX3VwZGF0ZV9pX3NpemUoc3RydWN0IG5ldGZzX2lub2RlICpjdHgsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy03My0vKipcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NzQ6ICogbmV0ZnNfcGVyZm9ybV93cml0ZSAtIENvcHkgZGF0YSBpbnRvIHRoZSBwYWdlY2FjaGUuXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTc1LSAqIEBpb2NiOiBUaGUgb3BlcmF0aW9uIHBhcmFtZXRlcnNcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTg2LSAqL1xuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo4Nzpzc2l6ZV90IG5ldGZzX3BlcmZvcm1fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTg4LVx0XHRcdCAgICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKVxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNDQyLX1cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NDQzOkVYUE9SVF9TWU1CT0wobmV0ZnNfcGVyZm9ybV93cml0ZSk7XG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ0NC1cbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTQ2OD1zc2l6ZV90IG5ldGZzX2J1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNDgzLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo0ODQ6XHRyZXR1cm4gbmV0ZnNfcGVyZm9ybV93cml0ZShpb2NiLCBmcm9tLCBuZXRmc19ncm91cCk7XG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ4NS19XG4tLVxuZnMvbmV0ZnMvcmVhZF9wZ3ByaXYyLmM9MTk9c3RhdGljIHZvaWQgbmV0ZnNfcGdwcml2Ml9jb3B5X2ZvbGlvKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpjcmVxLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jLTI3LVxuZnMvbmV0ZnMvcmVhZF9wZ3ByaXYyLmM6Mjg6XHQvKiBuZXRmc19wZXJmb3JtX3dyaXRlKCkgbWF5IHNoaWZ0IGlfc2l6ZSBhcm91bmQgdGhlIHBhZ2Ugb3IgZnJvbSBvdXRcbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jLTI5LVx0ICogb2YgdGhlIHBhZ2UgdG8gYmV5b25kIGl0LCBidXQgY2Fubm90IG1vdmUgaV9zaXplIGludG8gb3IgdGhyb3VnaCB0aGVcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTMyNT1zdGF0aWMgaW50IG5ldGZzX3dyaXRlX2ZvbGlvKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMzQ0LVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzozNDU6XHQvKiBuZXRmc19wZXJmb3JtX3dyaXRlKCkgbWF5IHNoaWZ0IGlfc2l6ZSBhcm91bmQgdGhlIHBhZ2Ugb3IgZnJvbSBvdXRcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMzQ2LVx0ICogb2YgdGhlIHBhZ2UgdG8gYmV5b25kIGl0LCBidXQgY2Fubm90IG1vdmUgaV9zaXplIGludG8gb3IgdGhyb3VnaCB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkyNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIFdyaXRlIFBhdGggSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHNvIGBuZXRmc19wZXJmb3JtX3dyaXRlYCBpcyBkZWZpbml0ZWx5IGFuIGV4cG9ydGVkIHN5bWJvbC4gVGhhdCYjMzk7cyBnb29kLCB0aGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIEkmIzM5O2xsIGxpa2VseSBuZWVkIHRvIHRyYWNlLiBOb3csIHdoYXQgYWJvdXQgdGhlIHdyaXRlYmFjayBmdW5jdGlvbnM/IEkga25vdyBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAgaXMgdXNlZCBpbnRlcm5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhhdCYjMzk7cyBhbHNvIGV4cG9ydGVkLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBBUEkuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG5ldHdvcmsgZmlsZXN5c3RlbSYjMzk7cyB3cml0ZSBwYXRoLCBzbyB0cmFjaW5nIHRoZXNlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBtYWluIHdyaXRlIGZ1bmN0aW9uIGFuZCB0aGUgd3JpdGViYWNrIGZ1bmN0aW9ucyBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG8gZmluZCB0aGUgYm90dGxlbmVja3MsIGFuZCBzZWUgaG93IHRoaXMgaXMgYWxsIGJlaW5nIGhhbmRsZWQgaW4gdGhlIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc193cml0ZWJhY2tfc2luZ2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25ldGZzL3dyaXRlX2lzc3VlLmM9NzE5PXN0YXRpYyBpbnQgbmV0ZnNfd3JpdGVfZm9saW9fc2luZ2xlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtODI5LS8qKlxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo4MzA6ICogbmV0ZnNfd3JpdGViYWNrX3NpbmdsZSAtIFdyaXRlIGJhY2sgYSBtb25vbGl0aGljIHBheWxvYWRcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtODMxLSAqIEBtYXBwaW5nOiBUaGUgbWFwcGluZyB0byB3cml0ZSBmcm9tXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy04NDAtICovXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjg0MTppbnQgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtODQyLVx0XHRcdCAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtOTA1LX1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6OTA2OkVYUE9SVF9TWU1CT0wobmV0ZnNfd3JpdGViYWNrX3NpbmdsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDAyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBjb2RlIHNuaXBwZXQ6CgoqKkZvY3VzaW5nIG9uIE5ldHdvcmsgRmlsZXN5c3RlbSBXcml0ZSBPcGVyYXRpb25zKioKCk9rYXksIHNvIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYCBpcyBhbiBleHBvcnRlZCBzeW1ib2wsIG1lYW5pbmcgaXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gdGhlIG5ldHdvcmsgZmlsZXN5c3RlbSBtb2R1bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBCYXNlZCBvbiB0aGF0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9ucyB0aGF0IGxpa2VseSB3b3JrIHdpdGggaXQsIGVpdGhlciBjYWxsaW5nIGl0LCBvciBiZWluZyBjYWxsZWQgYnkgaXQuIEkgaW1tZWRpYXRlbHkgc3RhcnQgbWVudGFsbHkgY2lyY2xpbmcgc29tZSBrZXkgc3VzcGVjdHMuIEkgc3VzcGVjdCB0aGUga2V5IGZ1bmN0aW9ucyBtdXN0IGJlIHJlbGF0ZWQgdG8gcmVhZHMgYW5kIHdyaXRlcywgYW5kIEkgc3VzcGVjdCB0aGVzZSBtaWdodCBiZSB0aGUga2V5OiBgbmV0ZnNfcmVhZGFoZWFkYCwgYG5ldGZzX3dyaXRlcGFnZXNgLCB0aGUgb25lIGluIHF1ZXN0aW9uIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYCwgYG5ldGZzX3BlcmZvcm1fd3JpdGVgLCBhbmQgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGNvcmUgb3BlcmF0aW9ucyBmb3IgaGFuZGxpbmcgZGF0YSBmbG93LiBOb3csIEkgd2FudCB0byB0cmFjZSBob3cgZGF0YSBpcyBtYW5hZ2VkLCBzbyBJJiMzOTtsbCBuZXh0IGxvb2sgYXQgdGhlIGNhbGxlcnMgb2YgYG5ldGZzX2NyZWF0ZV9zaW5ndWxhcl9idWZmZXJgLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGEgc2luZ3VsYXIgYnVmZmVyIGlzIGNyZWF0ZWQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHdyaXRpbmcgZGF0YS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZnNfY3JlYXRlX3Npbmd1bGFyX2J1ZmZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25ldGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9MzcxPUVYUE9SVF9TWU1CT0wobmV0ZnNfcmVhZGFoZWFkKTtcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzc1LSAqL1xuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jOjM3NjpzdGF0aWMgaW50IG5ldGZzX2NyZWF0ZV9zaW5ndWxhcl9idWZmZXIoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKnJyZXEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzc3LVx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgcm9sbGJ1Zl9mbGFncylcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9NDk5PWludCBuZXRmc19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy01MjgtXHQvKiBTZXQgdXAgdGhlIG91dHB1dCBidWZmZXIgKi9cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo1Mjk6XHRyZXQgPSBuZXRmc19jcmVhdGVfc2luZ3VsYXJfYnVmZmVyKHJyZXEsIGZvbGlvLCAwKTtcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy01MzAtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYz02Mjg9aW50IG5ldGZzX3dyaXRlX2JlZ2luKHN0cnVjdCBuZXRmc19pbm9kZSAqY3R4LFxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy02ODUtXHQvKiBTZXQgdXAgdGhlIG91dHB1dCBidWZmZXIgKi9cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo2ODY6XHRyZXQgPSBuZXRmc19jcmVhdGVfc2luZ3VsYXJfYnVmZmVyKHJyZXEsIGZvbGlvLCAwKTtcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy02ODctXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYz03MjA9aW50IG5ldGZzX3ByZWZldGNoX2Zvcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNzUwLVx0LyogU2V0IHVwIHRoZSBvdXRwdXQgYnVmZmVyICovXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6NzUxOlx0cmV0ID0gbmV0ZnNfY3JlYXRlX3Npbmd1bGFyX2J1ZmZlcihycmVxLCBmb2xpbywgTkVURlNfUk9MTEJVRl9QQUdFQ0FDSEVfTUFSSyk7XG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNzUyLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyNTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKktlcm5lbCBORlMgQ29uc2lkZXJhdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIGBuZXRmc19yZWFkX2ZvbGlvYCwgYG5ldGZzX3dyaXRlX2JlZ2luYCwgYW5kIGBuZXRmc19wcmVmZXRjaF9mb3Jfd3JpdGVgLiBBbmQgdGhlIGltbWVkaWF0ZSB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSBpcyB0aGF0IHRoZXNlIGFyZSAqZXhwb3J0ZWQqIG9yIHVzZWQgYnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgZGV0YWlsLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaW50ZXJmYWNlcyB0aGF0IGFyZSBleHBvc2VkIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIG9yIHBvdGVudGlhbGx5IGV2ZW4gdG8gZXh0ZXJuYWwgbW9kdWxlcy4KCk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBFeHBvcnRlZCBmdW5jdGlvbnMgbWVhbiBzdGFiaWxpdHkgY29uc3RyYWludHMg4oCTIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYmVjb21lcyBwYXJhbW91bnQuIENoYW5naW5nIHRoZWlyIHNpZ25hdHVyZXMsIGJlaGF2aW9yLCBvciBldmVuIHN1YnRsZSBpbnRlcm5hbCB3b3JraW5ncyBjb3VsZCBicmVhayBhIHJhZnQgb2YgZGVwZW5kZW50IG1vZHVsZXMuIEkmIzM5O2QgYmUgZXNwZWNpYWxseSB3YXJ5IG9mIGFueSBtb2RpZmljYXRpb25zIHRoYXQgY291bGQgaW50cm9kdWNlIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gYnVncywgYXMgdGhlc2UgYXJlIG5vdG9yaW91c2x5IGRpZmZpY3VsdCB0byB0cmFjayBkb3duIGluIGEgbmV0d29ya2VkIGZpbGVzeXN0ZW0gY29udGV4dC4gV2UgcmVhbGx5IGhhdmUgdG8gZW5zdXJlIHRoZXNlIHJlbWFpbiByb2NrLXNvbGlkLgoKSSYjMzk7bSBhc3N1bWluZyB0aGVzZSBhcmUgbG93IGxldmVsIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIE5GUyBjbGllbnQgaW1wbGVtZW50YXRpb24uIExvb2tpbmcgYXQgdGhlIGZ1bmN0aW9uIG5hbWVzLCB0aGV5IGxpa2VseSBhcmUgaW52b2x2ZWQgaW4gdGhlIHByb2Nlc3Mgb2YgcmVhZGluZyBhbmQgd3JpdGluZyBkYXRhLCBhbmQsIHRoZSBwcmVmZXRjaCBmdW5jdGlvbiwgd2hpY2ggaXMgb2Z0ZW4gdXNlZCB0byBvcHRpbWl6ZSB0aGUgcHJvY2VzcyBvZiByZWFkaW5nIGRhdGEgYW5kIHdyaXRpbmcgZGF0YSBmcm9tIHRoZSBuZXQuClRoZSBwcmVmZXRjaCBmdW5jdGlvbiBzZWVtcyBpbnRlcmVzdGluZyBhcyB0aGlzIGlzIGEgZ29vZCBwbGFjZSB0byBsb29rIGF0IHRoZSBwcm9jZXNzIG9mIGNhY2hpbmcgYW5kIGhvdyB3ZWxsIHRoZSBORlMgY2xpZW50IHBlcmZvcm1zLgpJIG5lZWQgdG8ga25vdyBwcmVjaXNlbHkgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCBieSBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSBuZWVkIHRvIGtub3cgdGhlIGNhbGxpbmcgY29udGV4dHMsIHRoZSBhcmd1bWVudHMgcGFzc2VkLCB0aGUgZXhwZWN0ZWQgcmV0dXJuIHZhbHVlcywgYW5kIGFueSBzaWRlIGVmZmVjdHMuIFdpdGhvdXQgdGhhdCBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcsIGFueSByZWZhY3RvcmluZyBvciBvcHRpbWl6YXRpb24gY2FycmllcyBhIHNpZ25pZmljYW50IHJpc2suIE15IGZpcnN0IHN0ZXAgd291bGQgYmUgdG8gcmV2aWV3IHRoZSByZWxldmFudCBrZXJuZWwgaGVhZGVycywgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLCBhbmQgYW55IGNyb3NzLXJlZmVyZW5jZXMgdG8gdGhlc2Ugc3ltYm9scy4gSSYjMzk7ZCBhbHNvIHByb2JhYmx5IGxvb2sgYXQgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgYW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgVkZTIGxheWVyLgoKVWx0aW1hdGVseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgKmNvbnRyYWN0KiB0aGVzZSBmdW5jdGlvbnMgYXJlIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBwcm9taXNpbmcgdG8gdGhlaXIgdXNlcnMgYmVmb3JlIEkgY2FuIGV2ZW4gY29uc2lkZXIgdG91Y2hpbmcgdGhlbS4gU3RhYmlsaXR5IGlzIHRoZSBuYW1lIG9mIHRoZSBnYW1lIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGZzX3JlYWRfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZXRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jPTM5ND1zdGF0aWMgaW50IG5ldGZzX3JlYWRfZ2FwcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNDg1LS8qKlxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jOjQ4NjogKiBuZXRmc19yZWFkX2ZvbGlvIC0gSGVscGVyIHRvIG1hbmFnZSBhIHJlYWRfZm9saW8gcmVxdWVzdFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTQ4Ny0gKiBAZmlsZTogVGhlIGZpbGUgdG8gcmVhZCBmcm9tXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTQ5OC0gKi9cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo0OTk6aW50IG5ldGZzX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNTAwLXtcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNTQzLX1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo1NDQ6RVhQT1JUX1NZTUJPTChuZXRmc19yZWFkX2ZvbGlvKTtcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy01NDUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDA5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipQb3RlbnRpYWwgTmV0RlMgUGVyZm9ybWFuY2UgQm90dGxlbmVja3MqKgoKUmlnaHQsIHNvIGBuZXRmc19yZWFkX2ZvbGlvYCBpcyBleHBvcnRlZCwgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIG1ham9yIGZvY3VzIHN5bWJvbHMgYXJlLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBhbmQgdGhlIGNvbnRleHQsIGl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIHRoZSBsaWtlbHkgc3VzcGVjdHMsIHRoZSBvbmVzIHRoYXQgY291bGQgYmUgaG9sZGluZyB0aGluZ3MgdXA6CgoqICAgYG5ldGZzX3JlYWRhaGVhZGAKKiAgIGBuZXRmc19yZWFkX2ZvbGlvYAoqICAgYG5ldGZzX3dyaXRlcGFnZXNgCiogICBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAKKiAgIGBuZXRmc19wZXJmb3JtX3dyaXRlYAoqICAgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgCiogICBgbmV0ZnNfd3JpdGVfYmVnaW5gCiogICBgbmV0ZnNfcHJlZmV0Y2hfZm9yX3dyaXRlYAoKR2l2ZW4gdGhlIGxpa2VseSBvcGVyYXRpb25zLCBhbmQgYmFzZWQgb24gZ3V0IGZlZWxpbmcsIEkgdGhpbmsgSSYjMzk7bGwgc3RhcnQgYnkgdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgYG5ldGZzX3dyaXRlX2JlZ2luYCBhbmQgYG5ldGZzX3ByZWZldGNoX2Zvcl93cml0ZWAuIFRoZXkgbG9vayBsaWtlIGdvb2QgY2FuZGlkYXRlcyB0byBzdGFydCB0aGUgZGVlcGVyIGludmVzdGlnYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gdGhvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGZzX3dyaXRlX2JlZ2luJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYz01NjE9c3RhdGljIGJvb2wgbmV0ZnNfc2tpcF9mb2xpb19yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHNpemVfdCBsZW4sXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTU5NS0vKipcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo1OTY6ICogbmV0ZnNfd3JpdGVfYmVnaW4gLSBIZWxwZXIgdG8gcHJlcGFyZSBmb3Igd3JpdGluZyBbREVQUkVDQVRFRF1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy01OTctICogQGN0eDogVGhlIG5ldGZzIGNvbnRleHRcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNjI3LSAqL1xuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jOjYyODppbnQgbmV0ZnNfd3JpdGVfYmVnaW4oc3RydWN0IG5ldGZzX2lub2RlICpjdHgsXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNjI5LVx0XHQgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTcxNC19XG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6NzE1OkVYUE9SVF9TWU1CT0wobmV0ZnNfd3JpdGVfYmVnaW4pO1xuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTcxNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTE6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2ODIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0OgoKKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgYG5ldGZzX3dyaXRlX2JlZ2luYCoqCgpBbHJpZ2h0LCBzbyBgbmV0ZnNfd3JpdGVfYmVnaW5gIGlzIGJlaW5nIGV4cG9ydGVkLiBIbW0sIHRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBFeHBvcnRlZCBtZWFucyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBBUEksIG9yIGF0IGxlYXN0IHZpc2libGUgYW5kIGFjY2Vzc2libGUgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSDigJMgcG90ZW50aWFsbHkgb3RoZXIga2VybmVsIG1vZHVsZXMsIG9yIGV2ZW4gdXNlcnNwYWNlLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyBtb3JlIGFib3V0IHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQsIGFuZCB3aGF0IGl0cyBjYWxsaW5nIGNvbnZlbnRpb25zIGFyZSwgdG8gdW5kZXJzdGFuZCB0aGUgc2lnbmlmaWNhbmNlLiBBIGZ1bmN0aW9uIG5hbWUgd2l0aCAmIzM0O3dyaXRlX2JlZ2luJiMzNDsgaW4gaXQgc3VnZ2VzdHMgc29tZSBzb3J0IG9mIGluaXRpYWxpemF0aW9uIG9yIHNldHVwIHBoYXNlIGZvciBhIHdyaXRlIG9wZXJhdGlvbiB3aXRoaW4gdGhlIG5ldHdvcmsgZmlsZXN5c3RlbSAobmV0ZnMpLiBUaGF0IGlzIGludGVyZXN0aW5nLCBzbyBJJiMzOTtsbCBjb25zaWRlciBob3cgdGhpcyB0aWVzIGludG8gdGhlIG5ldHdvcmsgZmlsZSBzeXN0ZW0gYXMgYSB3aG9sZS4gSSBpbW1lZGlhdGVseSBzdGFydCBhc2tpbmcgcXVlc3Rpb25zOiBXaGF0IHR5cGVzIG9mIHdyaXRlIG9wZXJhdGlvbnMgZG9lcyBpdCBzdXBwb3J0PyBXaGF0IGtpbmQgb2YgbG9ja2luZyBpcyBpbnZvbHZlZCwgaWYgYW55PyBJcyB0aGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBwcm90b2NvbCBsaWtlIE5GUywgU01CLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQ291bGQgaXQgYmUgaW52b2x2ZWQgaW4gYW55IHNlY3VyaXR5IGNvbnRleHRzIG9yIHBlcm1pc3Npb25zIGNoZWNrcywgc3VjaCBhcyB3aGVuIHJlYWRpbmcgb3Igd3JpdGluZyBhIGZpbGU/CgpUaGlzIG5lZWRzIHRvIGJlIHVuZGVyc3Rvb2QgaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5ldGZzIGRlc2lnbi4gSXMgaXQgYSBjb3JlIGZ1bmN0aW9uLCBvciBpcyBpdCBwYXJ0IG9mIGEgbGF5ZXIgdGhhdCBwcm92aWRlcyBhZGRpdGlvbmFsIGZlYXR1cmVzPyBJIHdvdWxkIGJlIGludHJpZ3VlZCB0byBrbm93LCBjb25zaWRlcmluZyBuZXR3b3JrIGZpbGVzeXN0ZW1zIGFyZSBub3Qgc2ltcGxlLCBhdCBhbGwuIFdoYXQgaXMgdGhlIHNjb3BlPyBXaHkgaXMgaXQgZXhwb3J0ZWQ/IEFuZCwgd2hhdCB3aWxsIGNvbWUgYWZ0ZXI/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGZzX3ByZWZldGNoX2Zvcl93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25ldGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9NzE1PUVYUE9SVF9TWU1CT0wobmV0ZnNfd3JpdGVfYmVnaW4pO1xuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy03MTktICovXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6NzIwOmludCBuZXRmc19wcmVmZXRjaF9mb3Jfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNzIxLVx0XHRcdCAgICAgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbilcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTg3PXNzaXplX3QgbmV0ZnNfcGVyZm9ybV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTI4NC1cdFx0XHR9XG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjI4NTpcdFx0XHRyZXQgPSBuZXRmc19wcmVmZXRjaF9mb3Jfd3JpdGUoZmlsZSwgZm9saW8sIG9mZnNldCwgcGFydCk7XG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTI4Ni1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZnMvbmV0ZnMvaW50ZXJuYWwuaD0yOD12b2lkIG5ldGZzX2NhY2hlX3JlYWRfdGVybWluYXRlZCh2b2lkICpwcml2LCBzc2l6ZV90IHRyYW5zZmVycmVkX29yX2Vycm9yKTtcbmZzL25ldGZzL2ludGVybmFsLmg6Mjk6aW50IG5ldGZzX3ByZWZldGNoX2Zvcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbmZzL25ldGZzL2ludGVybmFsLmgtMzAtXHRcdFx0ICAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTE6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNjkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldEZTIFdyaXRlYmFjayBQYXRjaCoqCgpPa2F5LCBzbyBgbmV0ZnNfcHJlZmV0Y2hfZm9yX3dyaXRlYCBpcyBpbnRlcm5hbCwgdGhhdCYjMzk7cyBub3Qgc29tZXRoaW5nIHRvIGNvbmNlcm4gbXlzZWxmIHdpdGggZGlyZWN0bHkuIEZpcnN0LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFJpZ2h0LCBhZnRlciByZXZpZXdpbmcgSSBzZWUgYENJRlNgLCBgOVBfRlNgLCBgQUZTX0ZTYCwgYENFUEhfRlNgIGFzIGltcG9ydGFudC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYE5GU19GU0NBQ0hFYCBkZXBlbmRzIG9uIGBORlNfRlNgLCBzbyBJIGRvbiYjMzk7dCBuZWVkIHRvIGNvbnNpZGVyIHRoYXQgYXMgYSBkaXJlY3QgZGVwZW5kZW5jeSBoZXJlLCBJIGNhbiBpZ25vcmUgdGhhdC4KCkkgc2hvdWxkIHZlcmlmeSBpZiBgTkVURlNfU1VQUE9SVGAgaXMgZW5vdWdoIHRvIGJlIG9uIG15IGxpc3QuIE5vcGUsIGl0JiMzOTtzIGhpZGRlbiwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGxpc3RpbmcgdGhlIGZpbGVzeXN0ZW1zIHRoYXQgc2VsZWN0IGl0LiBJIGNhbiBqdXN0IGxpc3QgYENJRlNgLCBgOVBfRlNgLCBgQUZTX0ZTYCwgYENFUEhfRlNgLgoKTGV0IG1lIGNpcmNsZSBiYWNrIHRvIHRoZSBwYXRjaCBpdHNlbGYuIFRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIGBnZnBgIHBhcmFtZXRlciB0byBgcm9sbGluZ19idWZmZXJfaW5pdGAsIHdoaWNoIGlzIHBvdGVudGlhbGx5IGludGVyZXN0aW5nLiBBbmQgaW4gYG5ldGZzX2NyZWF0ZV93cml0ZV9yZXFgLCBpdCYjMzk7cyBzZXR0aW5nIGBnZnAgfD0gX19HRlBfTk9GQUlMYCB1bmRlciB0aGUgY29uZGl0aW9ucyBgb3JpZ2luID09IE5FVEZTX1dSSVRFQkFDS2Agb3IgYG9yaWdpbiA9PSBORVRGU19XUklURUJBQ0tfU0lOR0xFYC4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBhaW1lZCBhdCBwcmV2ZW50aW5nIEVOT01FTSBlcnJvcnMgZHVyaW5nIHdyaXRlYmFjaywgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUgbWVtb3J5IHJlY2xhaW0gcHJvY2Vzcy4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gYmUgbW9kaWZ5aW5nLgoKR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGNvcmUgY2hhbmdlIHdpdGhpbiB0aGUgbmV0ZnMgd3JpdGViYWNrIHBhdGgsIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGZvY3VzaW5nIG9uIGFsbCB0aG9zZSBpbXBvcnRhbnQgc3ltYm9scy4KCkkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBpbXBvcnRhbnQgc3ltYm9sczoKLSBgbmV0ZnNfcmVhZGFoZWFkYAotIGBuZXRmc19yZWFkX2ZvbGlvYAotIGBuZXRmc193cml0ZXBhZ2VzYAotIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYAotIGBuZXRmc19wZXJmb3JtX3dyaXRlYAotIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYAoKQW5kIHRvIHJlLWl0ZXJhdGUsIG15IGtleSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZToKLSBgQ0lGU2AKLSBgOVBfRlNgCi0gYEFGU19GU2AKLSBgQ0VQSF9GU2AKCkkmIzM5O2xsIGp1c3QgZG91YmxlLWNoZWNrLCBidXQgeWVzLCBpdCBpcyBoaWRkZW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGU19TVVBQT1JUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9LY29uZmlnLTItXG5mcy9uZXRmcy9LY29uZmlnOjM6Y29uZmlnIE5FVEZTX1NVUFBPUlRcbmZzL25ldGZzL0tjb25maWctNC1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzIwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBIaWRkZW4gRmlsZSBTeXN0ZW0gT3B0aW9ucyoqCgpSaWdodCwgbm8gcHJvbXB0IHN0cmluZywgd2hpY2ggbWVhbnMgdGhpcyBmZWF0dXJlIGlzICpkZWZpbml0ZWx5KiBoaWRkZW4uIFdlIGNhbiYjMzk7dCBlbmFibGUgaXQgZGlyZWN0bHkgdGhyb3VnaCBhIHN0YW5kYXJkIGludGVyZmFjZTsgaXQgaGFzIHRvIGJlIHNwZWNpZmljYWxseSBzZWxlY3RlZCwgbGlrZWx5IGluIHNvbWUgc29ydCBvZiBjb25maWd1cmF0aW9uIG9yIGJ1aWxkIHByb2Nlc3MuIFNvLCBsaXN0aW5nIGBDSUZTYCwgYDlQX0ZTYCwgYEFGU19GU2AsIGFuZCBgQ0VQSF9GU2AgaXMgc3BvdCBvbiDigJMgdGhvc2UgYXJlIHRoZSBjYW5kaWRhdGVzLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoaXMgaGlkZGVuIHN0YXRlIGlzIG1hbmFnZWQgaW4gY29kZS4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGV4YW1pbmUgYHJvbGxpbmdfYnVmZmVyX2luaXRgIHNwZWNpZmljYWxseS4gSSYjMzk7bGwgaGVhZCBvdmVyIHRvIGBmcy9uZXRmcy9yb2xsaW5nX2J1ZmZlci5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZXNlIGZpbGVzeXN0ZW0gdHlwZXMgYXJlIG1hZGUgYXZhaWxhYmxlIGFuZCB3aGF0IG1ha2VzIHRoZW0gd29yay4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHNlbGVjdGlvbiBvciBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gbWFuaWZlc3RzIGl0c2VsZi4gVGhpcyBmdW5jdGlvbiBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGFyZSBoaWRkZW4gYnkgZGVmYXVsdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTE6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cm9sbGluZ19idWZmZXJfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25ldGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9MzM2PXZvaWQgbmV0ZnNfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwpXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTM2MS1cdHJyZXEtXHUwMDNlc3VibWl0dGVkID0gcnJlcS1cdTAwM2VzdGFydDtcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzozNjI6XHRpZiAocm9sbGluZ19idWZmZXJfaW5pdChcdTAwMjZycmVxLVx1MDAzZWJ1ZmZlciwgcnJlcS1cdTAwM2VkZWJ1Z19pZCwgSVRFUl9ERVNULCBHRlBfTk9GUykgXHUwMDNjIDApXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzYzLVx0XHRnb3RvIGNsZWFudXBfZnJlZTtcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9Mzc2PXN0YXRpYyBpbnQgbmV0ZnNfY3JlYXRlX3Npbmd1bGFyX2J1ZmZlcihzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzgwLVxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jOjM4MTpcdGlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KFx1MDAyNnJyZXEtXHUwMDNlYnVmZmVyLCBycmVxLVx1MDAzZWRlYnVnX2lkLCBJVEVSX0RFU1QsIEdGUF9OT0ZTKSBcdTAwM2MgMClcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy0zODItXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbmZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmM9NTU9RVhQT1JUX1NZTUJPTChuZXRmc19mb2xpb3FfZnJlZSk7XG4tLVxuZnMvbmV0ZnMvcm9sbGluZ19idWZmZXIuYy02MS0gKi9cbmZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmM6NjI6aW50IHJvbGxpbmdfYnVmZmVyX2luaXQoc3RydWN0IHJvbGxpbmdfYnVmZmVyICpyb2xsLCB1bnNpZ25lZCBpbnQgcnJlcV9pZCxcbmZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmMtNjMtXHRcdFx0dW5zaWduZWQgaW50IGRpcmVjdGlvbiwgZ2ZwX3QgZ2ZwKVxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9OTA9c3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2NyZWF0ZV93cml0ZV9yZXEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xMTUtXHRcdGdmcCB8PSBfX0dGUF9OT0ZBSUw7XG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjExNjpcdGlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KFx1MDAyNndyZXEtXHUwMDNlYnVmZmVyLCB3cmVxLVx1MDAzZWRlYnVnX2lkLCBJVEVSX1NPVVJDRSwgZ2ZwKSBcdTAwM2MgMClcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTE3LVx0XHRnb3RvIG5vbWVtO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE3NgoJCQkJCQkJb3V0cHV0OiAxNjAKCQkJCQkJCXRob3VnaHRzOiAyMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0ZnMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIHRoaXMgcGF0Y2ggb3ZlciwgYW5kIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyBwb3NpdGl2ZS4gSXQmIzM5O3MgbWFraW5nIGEgdGFyZ2V0ZWQgY2hhbmdlLCB0d2Vha2luZyBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCB3aXRoaW4gdGhlIGBuZXRmc2AgbGlicmFyeSwgc3BlY2lmaWNhbGx5IGluIGByb2xsaW5nX2J1ZmZlcl9pbml0YC4gVGhlIGtleSBoZXJlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGdmcF90YCB3aGljaCBpcyB0aGVuIHVzZWQgaW4gYG5ldGZzX2ZvbGlvcV9hbGxvY2AgYW5kIHRoZSBhZGRpdGlvbiBvZiBgX19HRlBfTk9GQUlMYCBpbiBgbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcWAuIFRoZSBhaW0sIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdG8gYm9sc3RlciB0aGUgcm9idXN0bmVzcyBvZiB3cml0ZWJhY2sgb3BlcmF0aW9ucywgbWl0aWdhdGluZyB0aGUgcmlzayBvZiBgRU5PTUVNYCBlcnJvcnMgZHVyaW5nIG1lbW9yeSByZWNsYWltLCB3aGljaCBpcyBhIGNvbW1vbiBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIEkmIzM5O3ZlIHNlZW4gaW4gdGhlIHBhc3QuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb247IGl0JiMzOTtzIG5vdCBqdXN0IGEgY29zbWV0aWMgY2hhbmdlLiBJdCBkaXJlY3RseSBhZmZlY3RzIGhvdyBtZW1vcnkgaXMgaGFuZGxlZCBhdCBhIGZ1bmRhbWVudGFsIGxldmVsIGluIHRoZSBjb3JlIGBuZXRmc2AgbGlicmFyeS4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCBwcmlvcml0aXplIGZ1enppbmcgYXJvdW5kIGBuZXRmc19yZWFkYWhlYWRgLCBgbmV0ZnNfcmVhZF9mb2xpb2AsIGBuZXRmc193cml0ZXBhZ2VzYCwgYG5ldGZzX3dyaXRlYmFja19zaW5nbGVgLCBgbmV0ZnNfcGVyZm9ybV93cml0ZWAsIGFuZCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZGAgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGFsbCB3b3JraW5nIHByb3Blcmx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zLgoKR2l2ZW4gdGhhdCB0aGlzIHJlbGF0ZXMgdG8gbmV0d29yayBmaWxlc3lzdGVtcywgSSYjMzk7bSB0aGlua2luZyB0aGUgZm9sbG93aW5nIGNvbmZpZ3Mgd291bGQgYmUgdXNlZnVsIHRvIGVuYWJsZSBkdXJpbmcgZnV6emluZzogYENJRlNgLCBgOVBfRlNgLCBgQUZTX0ZTYCwgYW5kIGBDRVBIX0ZTYC4gVGhpcyBzaG91bGQgcHJvdmlkZSBicm9hZCBjb3ZlcmFnZSBhbmQgdGVzdCBmb3IgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgaW4gY29tbW9ubHkgdXNlZCBuZXR3b3JraW5nIGZpbGVzeXN0ZW1zLiBBbGwgaW4gYWxsLCB0aGlzIHNlZW1zIGxpa2UgYSBzb2xpZCwgd2VsbC1yZWFzb25lZCBwYXRjaCB0aGF0IEkgY2FuIGRlZmluaXRlbHkgZ2V0IGJlaGluZCBhbmQgdGhhdCBzaG91bGQgYmUgcmlnb3JvdXNseSB0ZXN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0OzlQX0ZTJiMzNDssCiAgICAmIzM0O0FGU19GUyYjMzQ7LAogICAgJiMzNDtDRVBIX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZnNfcmVhZGFoZWFkJiMzNDssCiAgICAmIzM0O25ldGZzX3JlYWRfZm9saW8mIzM0OywKICAgICYjMzQ7bmV0ZnNfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDtuZXRmc193cml0ZWJhY2tfc2luZ2xlJiMzNDssCiAgICAmIzM0O25ldGZzX3BlcmZvcm1fd3JpdGUmIzM0OywKICAgICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgZm9yIHJvbGxpbmcgYnVmZmVyIGluaXRpYWxpemF0aW9uIGluIHRoZSBuZXRmcyBsaWJyYXJ5LCBzcGVjaWZpY2FsbHkgYWRkaW5nIF9fR0ZQX05PRkFJTCBmb3Igd3JpdGViYWNrIG9wZXJhdGlvbnMgdG8gcHJldmVudCBFTk9NRU0gZHVyaW5nIG1lbW9yeSByZWNsYWltLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXRmcyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0lGUyYjMzQ7LAogICAgJiMzNDs5UF9GUyYjMzQ7LAogICAgJiMzNDtBRlNfRlMmIzM0OywKICAgICYjMzQ7Q0VQSF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGZzX3JlYWRhaGVhZCYjMzQ7LAogICAgJiMzNDtuZXRmc19yZWFkX2ZvbGlvJiMzNDssCiAgICAmIzM0O25ldGZzX3dyaXRlcGFnZXMmIzM0OywKICAgICYjMzQ7bmV0ZnNfd3JpdGViYWNrX3NpbmdsZSYjMzQ7LAogICAgJiMzNDtuZXRmc19wZXJmb3JtX3dyaXRlJiMzNDssCiAgICAmIzM0O25ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGZvciByb2xsaW5nIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBpbiB0aGUgbmV0ZnMgbGlicmFyeSwgc3BlY2lmaWNhbGx5IGFkZGluZyBfX0dGUF9OT0ZBSUwgZm9yIHdyaXRlYmFjayBvcGVyYXRpb25zIHRvIHByZXZlbnQgRU5PTUVNIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0ZnMgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMToxODowNC44MTQ2NjIwNjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzY3OTMyNTM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDSUZTXCIsXG4gICAgXCI5UF9GU1wiLFxuICAgIFwiQUZTX0ZTXCIsXG4gICAgXCJDRVBIX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0ZnNfcmVhZGFoZWFkXCIsXG4gICAgXCJuZXRmc19yZWFkX2ZvbGlvXCIsXG4gICAgXCJuZXRmc193cml0ZXBhZ2VzXCIsXG4gICAgXCJuZXRmc193cml0ZWJhY2tfc2luZ2xlXCIsXG4gICAgXCJuZXRmc19wZXJmb3JtX3dyaXRlXCIsXG4gICAgXCJuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGZvciByb2xsaW5nIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBpbiB0aGUgbmV0ZnMgbGlicmFyeSwgc3BlY2lmaWNhbGx5IGFkZGluZyBfX0dGUF9OT0ZBSUwgZm9yIHdyaXRlYmFjayBvcGVyYXRpb25zIHRvIHByZXZlbnQgRU5PTUVNIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0ZnMgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjA0LjgxNDY2OTk3NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkwODQ0NjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODRkYjczM2Y0NDQ0ZWY3NDdiOTM2YzQ2YjI5NWJiYmUxODNmOGRkMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAyNSAxMToxODowMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMgYi9mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmNcXG5pbmRleCAyNGE4YTU0MThlMzExOS4uZmU4NGUxZGQ3MDdjZTEgMTAwNjQ0XFxuLS0tIGEvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jXFxuKysrIGIvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jXFxuQEAgLTM1OSw3ICszNTksNyBAQCB2b2lkIG5ldGZzX3JlYWRhaGVhZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsKVxcbiBcXHRuZXRmc19ycmVxX2V4cGFuZChycmVxLCByYWN0bCk7XFxuIFxcbiBcXHRycmVxLVxcdTAwM2VzdWJtaXR0ZWQgPSBycmVxLVxcdTAwM2VzdGFydDtcXG4tXFx0aWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoXFx1MDAyNnJyZXEtXFx1MDAzZWJ1ZmZlciwgcnJlcS1cXHUwMDNlZGVidWdfaWQsIElURVJfREVTVCkgXFx1MDAzYyAwKVxcbitcXHRpZiAocm9sbGluZ19idWZmZXJfaW5pdChcXHUwMDI2cnJlcS1cXHUwMDNlYnVmZmVyLCBycmVxLVxcdTAwM2VkZWJ1Z19pZCwgSVRFUl9ERVNULCBHRlBfTk9GUykgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGNsZWFudXBfZnJlZTtcXG4gXFx0bmV0ZnNfcmVhZF90b19wYWdlY2FjaGUocnJlcSwgcmFjdGwpO1xcbiBcXG5AQCAtMzc4LDcgKzM3OCw3IEBAIHN0YXRpYyBpbnQgbmV0ZnNfY3JlYXRlX3Npbmd1bGFyX2J1ZmZlcihzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSwgc3RydWN0IGZvXFxuIHtcXG4gXFx0c3NpemVfdCBhZGRlZDtcXG4gXFxuLVxcdGlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KFxcdTAwMjZycmVxLVxcdTAwM2VidWZmZXIsIHJyZXEtXFx1MDAzZWRlYnVnX2lkLCBJVEVSX0RFU1QpIFxcdTAwM2MgMClcXG4rXFx0aWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoXFx1MDAyNnJyZXEtXFx1MDAzZWJ1ZmZlciwgcnJlcS1cXHUwMDNlZGVidWdfaWQsIElURVJfREVTVCwgR0ZQX05PRlMpIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHRhZGRlZCA9IHJvbGxpbmdfYnVmZmVyX2FwcGVuZChcXHUwMDI2cnJlcS1cXHUwMDNlYnVmZmVyLCBmb2xpbywgcm9sbGJ1Zl9mbGFncyk7XFxuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmMgYi9mcy9uZXRmcy9yb2xsaW5nX2J1ZmZlci5jXFxuaW5kZXggYTE3ZmJmOTg1M2E0NDMuLjNjNGIxZTI0NGM0NmVmIDEwMDY0NFxcbi0tLSBhL2ZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmNcXG4rKysgYi9mcy9uZXRmcy9yb2xsaW5nX2J1ZmZlci5jXFxuQEAgLTYwLDExICs2MCwxMSBAQCBFWFBPUlRfU1lNQk9MKG5ldGZzX2ZvbGlvcV9mcmVlKTtcXG4gICogY29uc3VtZXIuXFxuICAqL1xcbiBpbnQgcm9sbGluZ19idWZmZXJfaW5pdChzdHJ1Y3Qgcm9sbGluZ19idWZmZXIgKnJvbGwsIHVuc2lnbmVkIGludCBycmVxX2lkLFxcbi1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgZGlyZWN0aW9uKVxcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZGlyZWN0aW9uLCBnZnBfdCBnZnApXFxuIHtcXG4gXFx0c3RydWN0IGZvbGlvX3F1ZXVlICpmcTtcXG4gXFxuLVxcdGZxID0gbmV0ZnNfZm9saW9xX2FsbG9jKHJyZXFfaWQsIEdGUF9OT0ZTLCBuZXRmc190cmFjZV9mb2xpb3Ffcm9sbGJ1Zl9pbml0KTtcXG4rXFx0ZnEgPSBuZXRmc19mb2xpb3FfYWxsb2MocnJlcV9pZCwgZ2ZwLCBuZXRmc190cmFjZV9mb2xpb3Ffcm9sbGJ1Zl9pbml0KTtcXG4gXFx0aWYgKCFmcSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jIGIvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuY1xcbmluZGV4IGYyNzYxYzk5Nzk1YTZiLi4yOGJjZDEwZWYzMzAyNyAxMDA2NDRcXG4tLS0gYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXFxuKysrIGIvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuY1xcbkBAIC05OCw2ICs5OCw3IEBAIHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19jcmVhdGVfd3JpdGVfcmVxKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRcXHQgICAgIG9yaWdpbiA9PSBORVRGU19XUklURUJBQ0tfU0lOR0xFIHx8XFxuIFxcdFxcdFxcdCAgICAgb3JpZ2luID09IE5FVEZTX1dSSVRFVEhST1VHSCB8fFxcbiBcXHRcXHRcXHQgICAgIG9yaWdpbiA9PSBORVRGU19QR1BSSVYyX0NPUFlfVE9fQ0FDSEUpO1xcbitcXHRnZnBfdCBnZnAgPSBHRlBfTk9GUztcXG4gXFxuIFxcdHdyZXEgPSBuZXRmc19hbGxvY19yZXF1ZXN0KG1hcHBpbmcsIGZpbGUsIHN0YXJ0LCAwLCBvcmlnaW4pO1xcbiBcXHRpZiAoSVNfRVJSKHdyZXEpKVxcbkBAIC0xMDgsNyArMTA5LDExIEBAIHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19jcmVhdGVfd3JpdGVfcmVxKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRpY3R4ID0gbmV0ZnNfaW5vZGUod3JlcS1cXHUwMDNlaW5vZGUpO1xcbiBcXHRpZiAoaXNfY2FjaGVhYmxlKVxcbiBcXHRcXHRmc2NhY2hlX2JlZ2luX3dyaXRlX29wZXJhdGlvbihcXHUwMDI2d3JlcS1cXHUwMDNlY2FjaGVfcmVzb3VyY2VzLCBuZXRmc19pX2Nvb2tpZShpY3R4KSk7XFxuLVxcdGlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KFxcdTAwMjZ3cmVxLVxcdTAwM2VidWZmZXIsIHdyZXEtXFx1MDAzZWRlYnVnX2lkLCBJVEVSX1NPVVJDRSkgXFx1MDAzYyAwKVxcbitcXG4rXFx0LyogV3JpdGViYWNrIGlzIHBhcnQgb2YgbWVtb3J5IHJlY2xhaW0gYW5kIG11c3Qgbm90IGZhaWwgZHVlIHRvIEVOT01FTS4gKi9cXG4rXFx0aWYgKG9yaWdpbiA9PSBORVRGU19XUklURUJBQ0sgfHwgb3JpZ2luID09IE5FVEZTX1dSSVRFQkFDS19TSU5HTEUpXFxuK1xcdFxcdGdmcCB8PSBfX0dGUF9OT0ZBSUw7XFxuK1xcdGlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KFxcdTAwMjZ3cmVxLVxcdTAwM2VidWZmZXIsIHdyZXEtXFx1MDAzZWRlYnVnX2lkLCBJVEVSX1NPVVJDRSwgZ2ZwKSBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gbm9tZW07XFxuIFxcbiBcXHR3cmVxLVxcdTAwM2VjbGVhbmVkX3RvID0gd3JlcS1cXHUwMDNlc3RhcnQ7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm9sbGluZ19idWZmZXIuaCBiL2luY2x1ZGUvbGludXgvcm9sbGluZ19idWZmZXIuaFxcbmluZGV4IGFjMTViMWZmZGQ4MzE1Li4zOWI3MjQ4ODM4ZTIxMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3JvbGxpbmdfYnVmZmVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3JvbGxpbmdfYnVmZmVyLmhcXG5AQCAtNDMsNyArNDMsNyBAQCBzdHJ1Y3Qgcm9sbGluZ19idWZmZXJfc25hcHNob3Qge1xcbiAjZGVmaW5lIFJPTExCVUZfTUFSS18yXFx0QklUKDEpXFxuIFxcbiBpbnQgcm9sbGluZ19idWZmZXJfaW5pdChzdHJ1Y3Qgcm9sbGluZ19idWZmZXIgKnJvbGwsIHVuc2lnbmVkIGludCBycmVxX2lkLFxcbi1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgZGlyZWN0aW9uKTtcXG4rXFx0XFx0XFx0dW5zaWduZWQgaW50IGRpcmVjdGlvbiwgZ2ZwX3QgZ2ZwKTtcXG4gaW50IHJvbGxpbmdfYnVmZmVyX21ha2Vfc3BhY2Uoc3RydWN0IHJvbGxpbmdfYnVmZmVyICpyb2xsKTtcXG4gc3NpemVfdCByb2xsaW5nX2J1ZmZlcl9sb2FkX2Zyb21fcmEoc3RydWN0IHJvbGxpbmdfYnVmZmVyICpyb2xsLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTE6MTg6MDUuNzA2NTgyMzM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODY3ODczODg3NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0lGU1wiLFxuICAgIFwiOVBfRlNcIixcbiAgICBcIkFGU19GU1wiLFxuICAgIFwiQ0VQSF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGZzX3JlYWRhaGVhZFwiLFxuICAgIFwibmV0ZnNfcmVhZF9mb2xpb1wiLFxuICAgIFwibmV0ZnNfd3JpdGVwYWdlc1wiLFxuICAgIFwibmV0ZnNfd3JpdGViYWNrX3NpbmdsZVwiLFxuICAgIFwibmV0ZnNfcGVyZm9ybV93cml0ZVwiLFxuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyBmb3Igcm9sbGluZyBidWZmZXIgaW5pdGlhbGl6YXRpb24gaW4gdGhlIG5ldGZzIGxpYnJhcnksIHNwZWNpZmljYWxseSBhZGRpbmcgX19HRlBfTk9GQUlMIGZvciB3cml0ZWJhY2sgb3BlcmF0aW9ucyB0byBwcmV2ZW50IEVOT01FTSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldGZzIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NGRiNzMzZjQ0NDRlZjc0N2I5MzZjNDZiMjk1YmJiZTE4M2Y4ZGQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTE6MTg6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMgYi9mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmNcbmluZGV4IDI0YThhNTQxOGUzMTE5Li5mZTg0ZTFkZDcwN2NlMSAxMDA2NDRcbi0tLSBhL2ZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuY1xuKysrIGIvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jXG5AQCAtMzU5LDcgKzM1OSw3IEBAIHZvaWQgbmV0ZnNfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwpXG4gXHRuZXRmc19ycmVxX2V4cGFuZChycmVxLCByYWN0bCk7XG4gXG4gXHRycmVxLVx1MDAzZXN1Ym1pdHRlZCA9IHJyZXEtXHUwMDNlc3RhcnQ7XG4tXHRpZiAocm9sbGluZ19idWZmZXJfaW5pdChcdTAwMjZycmVxLVx1MDAzZWJ1ZmZlciwgcnJlcS1cdTAwM2VkZWJ1Z19pZCwgSVRFUl9ERVNUKSBcdTAwM2MgMClcbitcdGlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KFx1MDAyNnJyZXEtXHUwMDNlYnVmZmVyLCBycmVxLVx1MDAzZWRlYnVnX2lkLCBJVEVSX0RFU1QsIEdGUF9OT0ZTKSBcdTAwM2MgMClcbiBcdFx0Z290byBjbGVhbnVwX2ZyZWU7XG4gXHRuZXRmc19yZWFkX3RvX3BhZ2VjYWNoZShycmVxLCByYWN0bCk7XG4gXG5AQCAtMzc4LDcgKzM3OCw3IEBAIHN0YXRpYyBpbnQgbmV0ZnNfY3JlYXRlX3Npbmd1bGFyX2J1ZmZlcihzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSwgc3RydWN0IGZvXG4ge1xuIFx0c3NpemVfdCBhZGRlZDtcbiBcbi1cdGlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KFx1MDAyNnJyZXEtXHUwMDNlYnVmZmVyLCBycmVxLVx1MDAzZWRlYnVnX2lkLCBJVEVSX0RFU1QpIFx1MDAzYyAwKVxuK1x0aWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoXHUwMDI2cnJlcS1cdTAwM2VidWZmZXIsIHJyZXEtXHUwMDNlZGVidWdfaWQsIElURVJfREVTVCwgR0ZQX05PRlMpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGFkZGVkID0gcm9sbGluZ19idWZmZXJfYXBwZW5kKFx1MDAyNnJyZXEtXHUwMDNlYnVmZmVyLCBmb2xpbywgcm9sbGJ1Zl9mbGFncyk7XG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvcm9sbGluZ19idWZmZXIuYyBiL2ZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmNcbmluZGV4IGExN2ZiZjk4NTNhNDQzLi4zYzRiMWUyNDRjNDZlZiAxMDA2NDRcbi0tLSBhL2ZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmNcbisrKyBiL2ZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmNcbkBAIC02MCwxMSArNjAsMTEgQEAgRVhQT1JUX1NZTUJPTChuZXRmc19mb2xpb3FfZnJlZSk7XG4gICogY29uc3VtZXIuXG4gICovXG4gaW50IHJvbGxpbmdfYnVmZmVyX2luaXQoc3RydWN0IHJvbGxpbmdfYnVmZmVyICpyb2xsLCB1bnNpZ25lZCBpbnQgcnJlcV9pZCxcbi1cdFx0XHR1bnNpZ25lZCBpbnQgZGlyZWN0aW9uKVxuK1x0XHRcdHVuc2lnbmVkIGludCBkaXJlY3Rpb24sIGdmcF90IGdmcClcbiB7XG4gXHRzdHJ1Y3QgZm9saW9fcXVldWUgKmZxO1xuIFxuLVx0ZnEgPSBuZXRmc19mb2xpb3FfYWxsb2MocnJlcV9pZCwgR0ZQX05PRlMsIG5ldGZzX3RyYWNlX2ZvbGlvcV9yb2xsYnVmX2luaXQpO1xuK1x0ZnEgPSBuZXRmc19mb2xpb3FfYWxsb2MocnJlcV9pZCwgZ2ZwLCBuZXRmc190cmFjZV9mb2xpb3Ffcm9sbGJ1Zl9pbml0KTtcbiBcdGlmICghZnEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmMgYi9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG5pbmRleCBmMjc2MWM5OTc5NWE2Yi4uMjhiY2QxMGVmMzMwMjcgMTAwNjQ0XG4tLS0gYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG4rKysgYi9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG5AQCAtOTgsNiArOTgsNyBAQCBzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHQgICAgIG9yaWdpbiA9PSBORVRGU19XUklURUJBQ0tfU0lOR0xFIHx8XG4gXHRcdFx0ICAgICBvcmlnaW4gPT0gTkVURlNfV1JJVEVUSFJPVUdIIHx8XG4gXHRcdFx0ICAgICBvcmlnaW4gPT0gTkVURlNfUEdQUklWMl9DT1BZX1RPX0NBQ0hFKTtcbitcdGdmcF90IGdmcCA9IEdGUF9OT0ZTO1xuIFxuIFx0d3JlcSA9IG5ldGZzX2FsbG9jX3JlcXVlc3QobWFwcGluZywgZmlsZSwgc3RhcnQsIDAsIG9yaWdpbik7XG4gXHRpZiAoSVNfRVJSKHdyZXEpKVxuQEAgLTEwOCw3ICsxMDksMTEgQEAgc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2NyZWF0ZV93cml0ZV9yZXEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRpY3R4ID0gbmV0ZnNfaW5vZGUod3JlcS1cdTAwM2Vpbm9kZSk7XG4gXHRpZiAoaXNfY2FjaGVhYmxlKVxuIFx0XHRmc2NhY2hlX2JlZ2luX3dyaXRlX29wZXJhdGlvbihcdTAwMjZ3cmVxLVx1MDAzZWNhY2hlX3Jlc291cmNlcywgbmV0ZnNfaV9jb29raWUoaWN0eCkpO1xuLVx0aWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoXHUwMDI2d3JlcS1cdTAwM2VidWZmZXIsIHdyZXEtXHUwMDNlZGVidWdfaWQsIElURVJfU09VUkNFKSBcdTAwM2MgMClcbitcbitcdC8qIFdyaXRlYmFjayBpcyBwYXJ0IG9mIG1lbW9yeSByZWNsYWltIGFuZCBtdXN0IG5vdCBmYWlsIGR1ZSB0byBFTk9NRU0uICovXG4rXHRpZiAob3JpZ2luID09IE5FVEZTX1dSSVRFQkFDSyB8fCBvcmlnaW4gPT0gTkVURlNfV1JJVEVCQUNLX1NJTkdMRSlcbitcdFx0Z2ZwIHw9IF9fR0ZQX05PRkFJTDtcbitcdGlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KFx1MDAyNndyZXEtXHUwMDNlYnVmZmVyLCB3cmVxLVx1MDAzZWRlYnVnX2lkLCBJVEVSX1NPVVJDRSwgZ2ZwKSBcdTAwM2MgMClcbiBcdFx0Z290byBub21lbTtcbiBcbiBcdHdyZXEtXHUwMDNlY2xlYW5lZF90byA9IHdyZXEtXHUwMDNlc3RhcnQ7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yb2xsaW5nX2J1ZmZlci5oIGIvaW5jbHVkZS9saW51eC9yb2xsaW5nX2J1ZmZlci5oXG5pbmRleCBhYzE1YjFmZmRkODMxNS4uMzliNzI0ODgzOGUyMTIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3JvbGxpbmdfYnVmZmVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcm9sbGluZ19idWZmZXIuaFxuQEAgLTQzLDcgKzQzLDcgQEAgc3RydWN0IHJvbGxpbmdfYnVmZmVyX3NuYXBzaG90IHtcbiAjZGVmaW5lIFJPTExCVUZfTUFSS18yXHRCSVQoMSlcbiBcbiBpbnQgcm9sbGluZ19idWZmZXJfaW5pdChzdHJ1Y3Qgcm9sbGluZ19idWZmZXIgKnJvbGwsIHVuc2lnbmVkIGludCBycmVxX2lkLFxuLVx0XHRcdHVuc2lnbmVkIGludCBkaXJlY3Rpb24pO1xuK1x0XHRcdHVuc2lnbmVkIGludCBkaXJlY3Rpb24sIGdmcF90IGdmcCk7XG4gaW50IHJvbGxpbmdfYnVmZmVyX21ha2Vfc3BhY2Uoc3RydWN0IHJvbGxpbmdfYnVmZmVyICpyb2xsKTtcbiBzc2l6ZV90IHJvbGxpbmdfYnVmZmVyX2xvYWRfZnJvbV9yYShzdHJ1Y3Qgcm9sbGluZ19idWZmZXIgKnJvbGwsXG4gXHRcdFx0XHQgICAgc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjA1LjcwNjU4NDgzOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MDQ2MTczMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRmcyBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGByb2xsaW5nX2J1ZmZlcl9pbml0YC4gVGhlIHByaW1hcnkgY2hhbmdlIHNlZW1zIHRvIGJlIGludHJvZHVjaW5nIGEgYGdmcF90YCBhcmd1bWVudCwgYW5kIHRoZW4gdXBkYXRpbmcgaXRzIHVzZXMgaW4gYGZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuY2AgYW5kIGBmcy9uZXRmcy93cml0ZV9pc3N1ZS5jYC4gU3BlY2lmaWNhbGx5LCB3aXRoaW4gYGZzL25ldGZzL3dyaXRlX2lzc3VlLmNgLCB0aGVyZSdzIHNvbWUgY29uZGl0aW9uYWwgbG9naWMgYWRkaW5nIGBfX0dGUF9OT0ZBSUxgIHRvIHRoZSBgZ2ZwYCBmbGFncyB3aGVuIGRlYWxpbmcgd2l0aCB3cml0ZWJhY2sgb3BlcmF0aW9ucywgbGlrZSBgTkVURlNfV1JJVEVCQUNLYCBhbmQgYE5FVEZTX1dSSVRFQkFDS19TSU5HTEVgLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgc2hpZnQgaW1wYWN0aW5nIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciB3aXRoaW4gdGhlIGBuZXRmc2Agc3Vic3lzdGVtLiBUaGlzIGRpcmVjdGx5IGluZmx1ZW5jZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSByb2xsaW5nIGJ1ZmZlci4gQ29uc2lkZXJpbmcgYG5ldGZzYCBpcyBsZXZlcmFnZWQgYnkgc2V2ZXJhbCBuZXR3b3JrIGZpbGVzeXN0ZW1zIGxpa2UgQUZTLCBDZXBoLCBDSUZTLCBhbmQgOXAsIHRoaXMgY2hhbmdlIGNsZWFybHkgaGFzIHdpZGVyIGltcGxpY2F0aW9ucy5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhpcy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBrZXkgZnVuY3Rpb25zIHRvIHNlZSB3aGVyZSB0aGlzIGltcGFjdHM6IEkgbmVlZCB0byBjaGVjayBgbmV0ZnNfcmVhZGFoZWFkYCwgYG5ldGZzX2NyZWF0ZV9zaW5ndWxhcl9idWZmZXJgLCBgbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcWAsIGFuZCwgb2YgY291cnNlLCBgcm9sbGluZ19idWZmZXJfaW5pdGAgaXRzZWxmIHRvIHNlZSB3aGVyZSB0aGUgY2hhbmdlIGlzIGluY29ycG9yYXRlZC5cblxuTmV4dCwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbmZpZyBvcHRpb24gZm9yIGBuZXRmc2AsIHNvIHRoYXQgSSBrbm93IGlmIGl0IGlzIGVuYWJsZWQuIEknbGwgY2hlY2sgYGZzL25ldGZzL0tjb25maWdgIGFuZCBsb29rIGZvciBgQ09ORklHX05FVEZTX1NVUFBPUlRgLlxuXG5JJ2xsIHNwZWNpZmljYWxseSBzY3J1dGluaXplIGBuZXRmc19jcmVhdGVfd3JpdGVfcmVxYCBhbmQgYG5ldGZzX3JlYWRhaGVhZGAgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgZ2ZwX3RgIGNoYW5nZSByaXBwbGVzIHRocm91Z2ggdGhlIGNvZGUsIHBhcnRpY3VsYXJseSBpbiByZWdhcmRzIHRvIHRoZSBuZXcgbG9naWMgYXJvdW5kIHdyaXRlYmFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjExLjExMTIwNjE2NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTcwMjA0MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZTX1NVUFBPUlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmV0ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9LY29uZmlnLTItXFxuZnMvbmV0ZnMvS2NvbmZpZzozOmNvbmZpZyBORVRGU19TVVBQT1JUXFxuZnMvbmV0ZnMvS2NvbmZpZy00LVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjExLjU2ODIzMjEwN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjM5NTczOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVwZW5kZW5jaWVzIGFuZCBTZWxlY3Rpb24gQ3JpdGVyaWE6IEEgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgaW5mbHVlbmNlIGhlcmUuIExldCdzIGRpZyBpbi4gSSBuZWVkIHRvIGdldCBhIGdyaXAgb24gdGhlIHN5c3RlbSwgc3BlY2lmaWNhbGx5LCBhbnkgY29kZSwgZGF0YSwgb3IgcHJvY2Vzc2VzIHRoYXQgZWl0aGVyICoqZGVwZW5kKiogb24gdGhlIGN1cnJlbnQgdGhpbmcgd2UncmUgZXhhbWluaW5nLCBvciB0aGF0IHVzZSBpdCBhcyBhIHNlbGVjdGlvbiBjcml0ZXJpb24gb3IgaW5wdXQuXG5cblRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBwcm92aWRlIHRoZSBiYXNpcyBmb3IgcmlzayBhc3Nlc3NtZW50OiBJZiBhIGNoYW5nZSBpcyBuZWVkZWQgaGVyZSwgd2hhdCBpcyB0aGUgY29zdCBvZiBzdWNoIGEgY2hhbmdlPyBXaGF0IGRvd25zdHJlYW0gc3lzdGVtcyBhcmUgbGlrZWx5IHRvIGJlIGltcGFjdGVkPyBcblxuQ29udmVyc2VseSwgaWYgKnRoaXMqIHRoaW5nIGlzIHVzZWQgYXMgYSBmaWx0ZXIgb3Igc2VsZWN0b3IsIEkgbXVzdCB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCBvdXRjb21lcy4gV2hhdCBiZWhhdmlvcnMgb3IgcmVzdWx0cyBhcmUgc2VsZWN0ZWQgYnkgdGhpcyB0aGluZz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgc2VsZWN0ZWQgdnMuIHJlamVjdGVkIGRhdGE/IEFyZSB0aGVyZSBlZGdlIGNhc2VzIEkgbmVlZCB0byBjb25zaWRlcj8gSW4gc2hvcnQsIEkgbmVlZCB0byBtYXAgdGhlIGNhdXNhbCByZWxhdGlvbnNoaXBzIGFzIGNvbXBsZXRlbHkgYXMgcG9zc2libGUuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGxhbmRzY2FwZSBzbyB0aGF0IEkgZG9uJ3QgaW5hZHZlcnRlbnRseSBicmVhayBleGlzdGluZyBmdW5jdGlvbmFsaXR5IG9yIGludHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW9yLCBhbmQgdGhhdCB0aGlzIGJlaGF2aW9yIGNvbmZvcm1zIHRvIHRoZSBuZWVkcyBvZiB0aGUgc3lzdGVtIGF0IGxhcmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTIzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTE6MTg6MTUuMDMyMTkyODQ2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjkwMTgzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE5FVEZTX1NVUFBPUlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzLzlwL0tjb25maWc9Mj1jb25maWcgOVBfRlNcXG4tLVxcbmZzLzlwL0tjb25maWctNC1cXHRkZXBlbmRzIG9uIE5FVF85UFxcbmZzLzlwL0tjb25maWc6NTpcXHRzZWxlY3QgTkVURlNfU1VQUE9SVFxcbmZzLzlwL0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5mcy9hZnMvS2NvbmZpZz0yPWNvbmZpZyBBRlNfRlNcXG4tLVxcbmZzL2Fmcy9LY29uZmlnLTYtXFx0c2VsZWN0IEROU19SRVNPTFZFUlxcbmZzL2Fmcy9LY29uZmlnOjc6XFx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcXG5mcy9hZnMvS2NvbmZpZy04LVxcdHNlbGVjdCBDUllQVE9fS1JCNVxcbi0tXFxuZnMvY2VwaC9LY29uZmlnPTI9Y29uZmlnIENFUEhfRlNcXG4tLVxcbmZzL2NlcGgvS2NvbmZpZy01LVxcdHNlbGVjdCBDRVBIX0xJQlxcbmZzL2NlcGgvS2NvbmZpZzo2OlxcdHNlbGVjdCBORVRGU19TVVBQT1JUXFxuZnMvY2VwaC9LY29uZmlnLTctXFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXFxuLS1cXG5mcy9uZnMvS2NvbmZpZz0xNzM9Y29uZmlnIE5GU19GU0NBQ0hFXFxuLS1cXG5mcy9uZnMvS2NvbmZpZy0xNzUtXFx0ZGVwZW5kcyBvbiBORlNfRlNcXG5mcy9uZnMvS2NvbmZpZzoxNzY6XFx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcXG5mcy9uZnMvS2NvbmZpZy0xNzctXFx0c2VsZWN0IEZTQ0FDSEVcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZz0yPWNvbmZpZyBDSUZTXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjAtXFx0c2VsZWN0IE9JRF9SRUdJU1RSWVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyMTpcXHRzZWxlY3QgTkVURlNfU1VQUE9SVFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0yMi1cXHRoZWxwXFxuLS1cXG5uZXQvOXAvS2NvbmZpZz02PW1lbnVjb25maWcgTkVUXzlQXFxubmV0LzlwL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiUGxhbiA5IFJlc291cmNlIFNoYXJpbmcgU3VwcG9ydCAoOVAyMDAwKVxcXCJcXG5uZXQvOXAvS2NvbmZpZzo4OlxcdHNlbGVjdCBORVRGU19TVVBQT1JUXFxubmV0LzlwL0tjb25maWctOS1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjE5LjU2MTIxODE0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1Njc5NTA4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLCBhbmQgSSBzZWUgdGhhdCBgTkVURlNfU1VQUE9SVGAgaXMgaW5kaXJlY3RseSBzZWxlY3RlZCBieSBhIGZldyBuZXR3b3JrIGZpbGUgc3lzdGVtczogYDlQX0ZTYCwgYEFGU19GU2AsIGBDRVBIX0ZTYCwgYE5GU19GU0NBQ0hFYCwgYW5kIGBDSUZTYC4gIFRoYXQncyBnb29kLCBpdCBtYWtlcyBzZW5zZS4gSSBjYW4gZGlyZWN0bHkgZW5hYmxlIGBDSUZTYCwgYDlQX0ZTYCwgYEFGU19GU2AsIGBDRVBIX0ZTYCwgb3IgYE5GU19GU0NBQ0hFYCwgYW5kIGBORVRGU19TVVBQT1JUYCB3aWxsIGNvbWUgYWxvbmcgZm9yIHRoZSByaWRlLiBXYWl0IGEgbWludXRlLi4uIGBORVRGU19TVVBQT1JUYCBpdHNlbGYgaXMgYSB0cmlzdGF0ZSwgYW5kIGl0J3MgKnNlbGVjdGVkKiBpbiB0aGVzZSBjYXNlcywgc28gSSBkb24ndCBuZWVkIHRvIGVuYWJsZSBpdCBkaXJlY3RseS4gIEl0J3MganVzdCBhIGRlcGVuZGVuY3k7IGVuYWJsaW5nIGFueSBvZiB0aG9zZSBzaG91bGQgY292ZXIgaXQuICBCdXQgY2FuIEkganVzdCBsaXN0IGBORVRGU19TVVBQT1JUYCBpdHNlbGY/ICBObywgYmVjYXVzZSBpdCdzIGEgaGlkZGVuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBub3Qgc29tZXRoaW5nIHRoZSB1c2VyIGNhbiBkaXJlY3RseSBpbnRlcmFjdCB3aXRoLlxuXG5TbywgdGhlIGtleSBoZXJlIGlzIHRvIGV4cG9zZSB0aGUgKnJlYWwqIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogSSBzaG91bGQgbGlzdCBgQ0lGU2AsIGA5UF9GU2AsIGBBRlNfRlNgLCBhbmQgYENFUEhfRlNgLiAgVGhhdCBjb3ZlcnMgYWxsIHRoZSBiYXNlcyBmb3IgdGhlIHVzZXIuXG5cbk5vdywgbGV0J3Mgc2VlIGlmIGBuZXRmc19jcmVhdGVfd3JpdGVfcmVxYCBhbmQgYG5ldGZzX3JlYWRhaGVhZGAgYXJlIHZpYWJsZSBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIGFyZWEuIEl0IG1pZ2h0IGJlIGhlbHBmdWwgdG8gZGlyZWN0IHVzZXJzIHRvIHRob3NlIHN5bWJvbHMgdG8gZ2FpbiBpbnNpZ2h0IGludG8gdGhlIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjY5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjI0LjEyOTE3MTc2NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDU4ODI1NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZnNfY3JlYXRlX3dyaXRlX3JlcVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZXRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM9MjE1PXNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIzNC1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoyMzU6XFx0d3JlcSA9IG5ldGZzX2NyZWF0ZV93cml0ZV9yZXEoaW9jYi1cXHUwMDNla2lfZmlscC1cXHUwMDNlZl9tYXBwaW5nLCBpb2NiLVxcdTAwM2VraV9maWxwLCBzdGFydCxcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMzYtXFx0XFx0XFx0XFx0ICAgICAgaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0RJUkVDVCA/XFxuLS1cXG5mcy9uZXRmcy9pbnRlcm5hbC5oPTE5NT12b2lkIG5ldGZzX3dyaXRlX2NvbGxlY3Rpb25fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuLS1cXG5mcy9uZXRmcy9pbnRlcm5hbC5oLTE5OS0gKi9cXG5mcy9uZXRmcy9pbnRlcm5hbC5oOjIwMDpzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5mcy9uZXRmcy9pbnRlcm5hbC5oLTIwMS1cXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jPTk3PXN0YXRpYyBzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfcGdwcml2Ml9iZWdpbl9jb3B5X3RvX2NhY2hlKFxcbi0tXFxuZnMvbmV0ZnMvcmVhZF9wZ3ByaXYyLmMtMTA0LVxcbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jOjEwNTpcXHRjcmVxID0gbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShycmVxLVxcdTAwM2VtYXBwaW5nLCBOVUxMLCBmb2xpb19wb3MoZm9saW8pLFxcbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jLTEwNi1cXHRcXHRcXHRcXHQgICAgICBORVRGU19QR1BSSVYyX0NPUFlfVE9fQ0FDSEUpO1xcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz00Mz1zdGF0aWMgdm9pZCBuZXRmc19raWxsX2RpcnR5X3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy04OS0gKi9cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjkwOnN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19jcmVhdGVfd3JpdGVfcmVxKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtOTEtXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTU1MT1pbnQgbmV0ZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNTY2LVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6NTY3OlxcdHdyZXEgPSBuZXRmc19jcmVhdGVfd3JpdGVfcmVxKG1hcHBpbmcsIE5VTEwsIGZvbGlvX3Bvcyhmb2xpbyksIE5FVEZTX1dSSVRFQkFDSyk7XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy01NjgtXFx0aWYgKElTX0VSUih3cmVxKSkge1xcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz02MjI9c3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2JlZ2luX3dyaXRldGhyb3VnaChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBsZW4pXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYyOC1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjYyOTpcXHR3cmVxID0gbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShpb2NiLVxcdTAwM2VraV9maWxwLVxcdTAwM2VmX21hcHBpbmcsIGlvY2ItXFx1MDAzZWtpX2ZpbHAsXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy02MzAtXFx0XFx0XFx0XFx0ICAgICAgaW9jYi1cXHUwMDNla2lfcG9zLCBORVRGU19XUklURVRIUk9VR0gpO1xcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz04NDE9aW50IG5ldGZzX3dyaXRlYmFja19zaW5nbGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTg1OS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjg2MDpcXHR3cmVxID0gbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShtYXBwaW5nLCBOVUxMLCAwLCBORVRGU19XUklURUJBQ0tfU0lOR0xFKTtcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTg2MS1cXHRpZiAoSVNfRVJSKHdyZXEpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjI0LjQ3NTA1ODU2NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTY1Mzc2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcWAuIEl0J3MgZGVmaW5pdGVseSBub3QgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGF0IHVzdWFsbHkgbWVhbnMgaXQncyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUsIHJpZ2h0PyBCdXQgd2FpdCBhIG1pbnV0ZeKApiBpdCdzIGRlZmluZWQgd2l0aGluIHRoZSBuZXRmcyBtb2R1bGUsIHNwZWNpZmljYWxseSBpbiBgZnMvbmV0ZnMvaW50ZXJuYWwuaGAuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYXJlIGtlcHQuIFNvLCBpZiBpdCdzIGludGVybmFsIHRvIHRoZSBuZXRmcyBtb2R1bGUgYW5kIGRlZmluZWQgd2l0aGluIHRoZSBpbnRlcm5hbCBoZWFkZXIsIHRoYXQgdXN1YWxseSBzdWdnZXN0cyBpdCBzaG91bGQgYmUgYHN0YXRpY2AuIFNvbWV0aGluZyBmZWVscyBvZmYgaGVyZS4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiBpdCdzIGFjdHVhbGx5IGV4cG9ydGVkIHNvbWV3aGVyZS4gSXMgdGhlcmUgYSBjaGFuY2UgdGhhdCwgZGVzcGl0ZSB0aGUgaW50ZXJuYWwgZGVjbGFyYXRpb24sIHNvbWUgb3RoZXIgcGFydCBvZiB0aGUgc3lzdGVtIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbj8gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIHRvIGJlIHN1cmUuIFRoaXMgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIGludGVuZGVkIHZpc2liaWxpdHkgYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSXQgY291bGQgYmUgYW4gb3ZlcnNpZ2h0LCBvciBtYXliZSB0aGVyZSdzIGEgZ29vZCByZWFzb24gZm9yIHRoaXMgZGVzaWduIHRoYXQgSSBoYXZlbid0IGdyYXNwZWQgeWV0LiBJIG5lZWQgdG8gZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMToxODoyOC4xMzE1OTkzMThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjY0NjcxOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZXRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjI4LjI2ODI1NDQyN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDU0MTUwOTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFVuZXhwb3J0ZWQsIE5vbi1TdGF0aWMgVGVycml0b3J5KipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzb21ldGhpbmcncyBjYXRjaGluZyBteSBleWUuIEl0J3Mgbm90IGV4cG9ydGVkLCBzbyBpdCdzIGludGVybmFsIHRvIHRoZSBtb2R1bGUsIHRoYXQncyBmaW5lIGZvciBzb21lIHB1cnBvc2VzLiBCdXQgdGhlIGZhY3QgdGhhdCBpdCdzICpub24tc3RhdGljKiBpcyB3aGF0IGdpdmVzIG1lIHBhdXNlLiBUaGF0IGltcGxpZXMgcG90ZW50aWFsIGxpbmthZ2UsIGludGVyYWN0aW9uIGFjcm9zcyBjb21waWxhdGlvbiB1bml0cywgZXZlbiBpZiBpdCdzIG5vdCBkaXJlY3RseSBleHBvc2VkIHRocm91Z2ggYSBoZWFkZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSSdtIHdvbmRlcmluZyB3aGF0IG90aGVyIHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgYXJlIGluIHBsYXkuIEkgYW0gdGhpbmtpbmcsIHdoYXQgYWJvdXQgYG5ldGZzX3JlYWRhaGVhZGA/IFdoYXQgcm9sZSBkb2VzICp0aGF0KiBwbGF5IGluIHRoaXMgbGFuZHNjYXBlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoaXMgY29kZSBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDcxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTE6MTg6MzEuMzIyNDA4NjMxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc4MzU3MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZnNfcmVhZGFoZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9MjA5PXN0YXRpYyB2b2lkIG5ldGZzX3JlYWRfdG9fcGFnZWNhY2hlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpycmVxLFxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTMyMS0vKipcXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6MzIyOiAqIG5ldGZzX3JlYWRhaGVhZCAtIEhlbHBlciB0byBtYW5hZ2UgYSByZWFkIHJlcXVlc3RcXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzIzLSAqIEByYWN0bDogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSByZWFkYWhlYWQgcmVxdWVzdFxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTMzNS0gKi9cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6MzM2OnZvaWQgbmV0ZnNfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwpXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTMzNy17XFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzcwLX1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6MzcxOkVYUE9SVF9TWU1CT0wobmV0ZnNfcmVhZGFoZWFkKTtcXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzcyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMToxODozMS40MzAyNTAyMzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4MTI5NTI1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ29uc2lkZXJpbmcgTmV0RlMgT3B0aW1pemF0aW9uIFN0cmF0ZWdpZXMqKlxuXG5Pa2F5LCBzbyBgbmV0ZnNfcmVhZGFoZWFkYCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBleHBvc2UsIGl0J3MgYSBrbm93biBxdWFudGl0eS4gQnV0LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHdyaXRlIHNpZGUgb2YgdGhpbmdzLiBXZSdyZSBvcHRpbWl6aW5nIGZvciBuZXR3b3JrIGZpbGUgc3lzdGVtcywgYW5kIGl0IG1ha2VzIG1lIHdvbmRlcjogd2hhdCdzIHRoZSBzdGF0dXMgb24gYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgPyBJcyBpdCBhbHNvIGV4cG9ydGVkPyBUaGlzIGlzIGEga2V5IGFyZWEgZm9yIHBlcmZvcm1hbmNlLiBJcyBpdCBpbXBsZW1lbnRlZCBmb3IgdGhlIG5ldHdvcmsgZmlsZSBzeXN0ZW1zIGJlaW5nIGNvbnNpZGVyZWQgYW5kIGlmIHNvLCBpcyB0aGVyZSBhIGdvb2QgcmVhc29uIGZvciB0aGlzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVzaWduIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBmaWxlIEkvTyBsYXllci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlIG9uIHRoaXMgZnVuY3Rpb24gYW5kIGhvdyB3ZSdyZSBsZXZlcmFnaW5nIGl0LCBvciBpZiB3ZSBhcmUgZXZlbiBsZXZlcmFnaW5nIGl0LCBzbyBJIGNhbiBzdGFydCB0aGlua2luZyBhYm91dCBob3cgdG8gYmVzdCBvcHRpbWl6ZSB0aGUgZmxvdyBvZiBkYXRhLiBXaGF0IGFyZSB0aGUgdHJhZGUtb2ZmcyBpbnZvbHZlZCBpbiBidWZmZXJpbmcgdmVyc3VzIG5vdCBidWZmZXJpbmcsIGFuZCBob3cgZG9lcyB0aGF0IGluZmx1ZW5jZSB0aHJvdWdocHV0IGFuZCBsYXRlbmN5IGluIG91ciBzcGVjaWZpYyBuZXR3b3JrIGNvbnRleHQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMToxODozNC44MTE1NDkwODhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjQ5NjMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYz0yMDM9c3RhdGljIHZvaWQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9hc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTQtICovXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjE1OnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTYtXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKVxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzA3LX1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMDg6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKTtcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMDktXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYz0zMjM9c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zODEtXFx0XFx0XFx0ICAgRlNDQUNIRV9JTlZBTF9ESU9fV1JJVEUpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM4MjpcXHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKGlvY2IsIGZyb20sIE5VTEwpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4My1vdXQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjM0LjkyODA1MTE0OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjkzNDQwNTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldEZTIFdyaXRlIE9wZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gc28gYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgIGlzIGJlaW5nIGV4cGxpY2l0bHkgZXhwb3J0ZWQuIEhtbSwgdGhhdCdzIGludGVyZXN0aW5nLiBJdCBzdWdnZXN0cyBhIHBhcnRpY3VsYXIgd2F5IG9mIGhhbmRsaW5nIHVuYnVmZmVyZWQgd3JpdGVzIHdpdGhpbiB0aGUgTmV0RlMgZmlsZSBzeXN0ZW0uIEEgZm9jdXMgb24gaXRlcmF0b3JzIGFuZCBsb2NraW5nIGltcGxpZXMgc29tZSBjb25zaWRlcmF0aW9ucyBmb3IgY29uY3VycmVuY3kgYW5kIGRhdGEgZmxvdy4gSXQgcHJvYmFibHkgaGFuZGxlcyB0aGUgY29yZSBsb2dpYyBmb3Igd3JpdGluZyBkaXJlY3RseSB0byB0aGUgdW5kZXJseWluZyBzdG9yYWdlIHdpdGhvdXQgaW50ZXJtZWRpYXRlIGJ1ZmZlcmluZywgb3IgYXQgbGVhc3QgcHJvdmlkZXMgYWNjZXNzIHRvIGEgc3BlY2lmaWMgcGF0aCB0byBkbyBzby5cblxuQnV0IHdoYXQgYWJvdXQgaXRzIGNvdW50ZXJwYXJ0LCBgbmV0ZnNfd3JpdGVwYWdlc2A/IFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLCBpc24ndCBpdD8gSXMgaXQgYWxzbyBleHBvcnRlZD8gQW5kIGlmIHNvLCBob3cgZG8gdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdD8gT3IgZG9lcyBpdCBtZWFuIGl0J3MgYW4gaW50ZXJuYWwgZnVuY3Rpb24/IE9yLCBhcmUgdGhleSB1c2VkIGluIGNvbXBsZW1lbnRhcnkgd2F5cz8gYG5ldGZzX3dyaXRlcGFnZXNgIGhhbmRsZXMgdGhlIHBhZ2UtYmFzZWQgd3JpdGluZywgdHlwaWNhbGx5IGZvciBidWZmZXJlZCBJL08sIGFsbG93aW5nIHRoZSBmaWxlIHN5c3RlbSB0byBvcHRpbWl6ZSB3cml0ZSBvcGVyYXRpb25zIGZvciBwZXJmb3JtYW5jZSwgc28gaWYgYm90aCBhcmUgZXhwb3J0ZWQsIGhvdyBpcyB0aGUgY2hvaWNlIG1hZGUgYmV0d2VlbiB1bmJ1ZmZlcmVkIHdyaXRlcywgYW5kIHBhZ2UtYmFzZWQgd3JpdGVzPyBUaGlzIGlzIHdoZXJlIHRoZSBpbnRyaWNhY2llcyBvZiBOZXRGUydzIGRlc2lnbiBmb3IgYnVmZmVyaW5nIGFuZCBkaXJlY3QgSS9PIGJlY29tZSBjbGVhci4gTXkgZm9jdXMgd2lsbCBiZSBoZXJlIHRvIGRldGVybWluZSBob3cgd3JpdGUgc3RyYXRlZ2llcyBhcmUgbWFkZS4gSG93IGRvZXMgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGVzZSB0d28gZnVuY3Rpb25zIGluZmx1ZW5jZSB0aGUgcGVyZm9ybWFuY2UgYW5kIHRoZSBiZWhhdmlvdXIgb2YgdGhlIHdob2xlIHN5c3RlbT8gSXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCB3cml0ZSBwYXRoLCBob3cgZGF0YSBtb3ZlcyBmcm9tIHRoZSBhcHBsaWNhdGlvbiwgdGhyb3VnaCB0aGUgVkZTIGxheWVyLCBpbnRvIHRoZSBOZXRGUywgYW5kIGV2ZW50dWFsbHkgdG8gdGhlIG5ldHdvcmsgb3Igc3RvcmFnZS4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0ncyB3cml0ZSBtZWNoYW5pc21zIGFyZSBpbXBsZW1lbnRlZCBhbmQgaG93IHRoZXkgaW50ZXJhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NzcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMToxODozOC42MjE0OTUwMjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MDcyMzQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc193cml0ZXBhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTUyNz1zdGF0aWMgdm9pZCBuZXRmc19lbmRfaXNzdWVfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTU1MC0gKi9cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjU1MTppbnQgbmV0ZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTU1Mi1cXHRcXHQgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy02MTYtfVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6NjE3OkVYUE9SVF9TWU1CT0wobmV0ZnNfd3JpdGVwYWdlcyk7XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy02MTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjM4Ljg3MjIyNTkwN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzc0NTQzNjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDb25zaWRlcmluZyBOZXRGUyBXcml0ZSBPcGVyYXRpb25zKipcblxuT2theSwgc28gYG5ldGZzX3dyaXRlcGFnZXNgIGlzIGV4cG9ydGVkLCB0aGF0IG11Y2ggSSBrbm93LiBJdCdzIGEga2V5IGZ1bmN0aW9uIGluIGdldHRpbmcgZGF0YSBvbnRvIHRoZSBuZXR3b3JrIGZpbGUgc3lzdGVtLiBCdXQsIGFuZCBoZXJlJ3MgdGhlIGNydWNpYWwgcXVlc3Rpb24gdGhhdCdzIG5hZ2dpbmcgYXQgbWUsIHdoYXQncyB0aGUgZGVhbCB3aXRoIGBuZXRmc19iZWdpbl93cml0ZXRocm91Z2hgPyBJdCdzIHJlbGF0ZWQsIG9idmlvdXNseSwgYnV0IHdoYXQncyBpdHMgc3BlY2lmaWMgcm9sZSBpbiB0aGUgcHJvY2Vzcz8gSXMgaXQgaGFuZGxpbmcgdGhlIGluaXRpYWwgc2V0dXAgZm9yIGEgd3JpdGV0aHJvdWdoIG9wZXJhdGlvbiwgY29vcmRpbmF0aW5nIHRoZSBtZXRhZGF0YSB1cGRhdGVzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIGBuZXRmc193cml0ZXBhZ2VzYCB0byBlbnN1cmUgdGhlIHdob2xlIHdyaXRlIHBhdGggaXMgcm9idXN0IGFuZCBvcHRpbWl6ZWQuIEl0J3MgdGhhdCBzdWJ0bGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlbSB0aGF0IG9mdGVuIHJldmVhbHMgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4gSSByZWFsbHkgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIHNlbWFudGljcyBvZiB0aGF0IGZ1bmN0aW9uIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNzQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMToxODo0Mi42NDY3NzI1MTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjk4ODYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc19iZWdpbl93cml0ZXRocm91Z2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmV0ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM9ODc9c3NpemVfdCBuZXRmc19wZXJmb3JtX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy0xMTgtXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzoxMTk6XFx0XFx0d3JlcSA9IG5ldGZzX2JlZ2luX3dyaXRldGhyb3VnaChpb2NiLCBpdGVyLVxcdTAwM2Vjb3VudCk7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy0xMjAtXFx0XFx0aWYgKElTX0VSUih3cmVxKSkge1xcbi0tXFxuZnMvbmV0ZnMvaW50ZXJuYWwuaD0yMTI9c2l6ZV90IG5ldGZzX2FkdmFuY2Vfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXFxuLS1cXG5mcy9uZXRmcy9pbnRlcm5hbC5oLTIxNC1cXHRcXHRcXHQgICBsb2ZmX3Qgc3RhcnQsIHNpemVfdCBsZW4sIGJvb2wgdG9fZW9mKTtcXG5mcy9uZXRmcy9pbnRlcm5hbC5oOjIxNTpzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGxlbik7XFxuZnMvbmV0ZnMvaW50ZXJuYWwuaC0yMTYtaW50IG5ldGZzX2FkdmFuY2Vfd3JpdGV0aHJvdWdoKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9NjE3PUVYUE9SVF9TWU1CT0wobmV0ZnNfd3JpdGVwYWdlcyk7XFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYyMS0gKi9cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjYyMjpzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGxlbilcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYyMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjQyLjc2OTc3MDU2MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzgwNzc5NTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IGRlZXAgaW4gdGhlIHdlZWRzIG9mIGEgZmlsZXN5c3RlbXMgaW1wbGVtZW50YXRpb246XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBGaWxlc3lzdGVtIEludGVybmFscyoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG5ldGZzX3BlcmZvcm1fd3JpdGVgIGZ1bmN0aW9uLCB3aGljaCBpcywgaW1wb3J0YW50bHksICpleHBvcnRlZCouIEl0J3MgY2xlYXJseSBhIGtleSBwYXJ0IG9mIGhvdyB0aGlzIG5ldHdvcmsgZmlsZXN5c3RlbSBoYW5kbGVzIHdyaXRlcy4gQnV0IHRoZW4gSSBzZWUgdGhhdCBgbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoYCBpcyBiZWluZyBjYWxsZWQgd2l0aGluIGl0LiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZyBiZWNhdXNlIGBuZXRmc19iZWdpbl93cml0ZXRocm91Z2hgIGlzICpub3QqIGV4cG9ydGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBpbm5lciBmdW5jdGlvbiBpc24ndCBleHBvc2VkIGFuZCB3aGF0IHJlbGF0aW9uc2hpcCBpdCBoYXMgd2l0aCB0aGUgZXhwb3J0ZWQgYG5ldGZzX3BlcmZvcm1fd3JpdGVgLiBJcyBgbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoYCBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIGNhcmVmdWxseSBtYW5hZ2VkLCBvciBpcyB0aGlzIGEgcG90ZW50aWFsIHZpb2xhdGlvbiBvZiBzb21lIGxheWVyaW5nIHByaW5jaXBsZT8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIG5vbi1leHBvcnRlZCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoaXMgYXJjaGl0ZWN0dXJlIGZ1bGx5LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGRlbGliZXJhdGVseSBoaWRkZW4sIGFuZCBpZiBzbywgdGhlIHJhdGlvbmFsZS4gVGhpcyBjb3VsZCBwb2ludCB0byBhIHByb3RlY3RlZCBjcml0aWNhbCBzZWN0aW9uIG9yIGFuIG9wdGltaXphdGlvbiB0aGF0J3MgdG9vIHNwZWNpZmljIHRvIGV4cG9zZSBkaXJlY3RseSB0byB0aGUgZmlsZXN5c3RlbSBjbGllbnRzLiBOb3cgSSBuZWVkIHRvIGV4cGxvcmUgd2hhdCB0aGF0IGBuZXRmc19iZWdpbl93cml0ZXRocm91Z2hgIGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKiB0byBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgbGFyZ2VyIHdyaXRlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMToxODo0Ni4xNTA1NTQ3NjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjQ4ODA5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc19wZXJmb3JtX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9NTYxPXN0YXRpYyBib29sIG5ldGZzX3NraXBfZm9saW9fcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCBzaXplX3QgbGVuLFxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTYyNC0gKlxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo2MjU6ICogTm90ZSB0aGF0IHRoaXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZGVwcmVjYXRlZCBhbmQgbmV0ZnNfcGVyZm9ybV93cml0ZSgpXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTYyNi0gKiB1c2VkIGluc3RlYWQuXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTM3PXZvaWQgbmV0ZnNfdXBkYXRlX2lfc2l6ZShzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmN0eCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNzMtLyoqXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo3NDogKiBuZXRmc19wZXJmb3JtX3dyaXRlIC0gQ29weSBkYXRhIGludG8gdGhlIHBhZ2VjYWNoZS5cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTc1LSAqIEBpb2NiOiBUaGUgb3BlcmF0aW9uIHBhcmFtZXRlcnNcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtODYtICovXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo4Nzpzc2l6ZV90IG5ldGZzX3BlcmZvcm1fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy04OC1cXHRcXHRcXHQgICAgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cClcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNDQyLX1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjQ0MzpFWFBPUlRfU1lNQk9MKG5ldGZzX3BlcmZvcm1fd3JpdGUpO1xcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNDQ0LVxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz00Njg9c3NpemVfdCBuZXRmc19idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNDgzLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NDg0OlxcdHJldHVybiBuZXRmc19wZXJmb3JtX3dyaXRlKGlvY2IsIGZyb20sIG5ldGZzX2dyb3VwKTtcXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ4NS19XFxuLS1cXG5mcy9uZXRmcy9yZWFkX3BncHJpdjIuYz0xOT1zdGF0aWMgdm9pZCBuZXRmc19wZ3ByaXYyX2NvcHlfZm9saW8oc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKmNyZXEsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9uZXRmcy9yZWFkX3BncHJpdjIuYy0yNy1cXG5mcy9uZXRmcy9yZWFkX3BncHJpdjIuYzoyODpcXHQvKiBuZXRmc19wZXJmb3JtX3dyaXRlKCkgbWF5IHNoaWZ0IGlfc2l6ZSBhcm91bmQgdGhlIHBhZ2Ugb3IgZnJvbSBvdXRcXG5mcy9uZXRmcy9yZWFkX3BncHJpdjIuYy0yOS1cXHQgKiBvZiB0aGUgcGFnZSB0byBiZXlvbmQgaXQsIGJ1dCBjYW5ub3QgbW92ZSBpX3NpemUgaW50byBvciB0aHJvdWdoIHRoZVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz0zMjU9c3RhdGljIGludCBuZXRmc193cml0ZV9mb2xpbyhzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMzQ0LVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6MzQ1OlxcdC8qIG5ldGZzX3BlcmZvcm1fd3JpdGUoKSBtYXkgc2hpZnQgaV9zaXplIGFyb3VuZCB0aGUgcGFnZSBvciBmcm9tIG91dFxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMzQ2LVxcdCAqIG9mIHRoZSBwYWdlIHRvIGJleW9uZCBpdCwgYnV0IGNhbm5vdCBtb3ZlIGlfc2l6ZSBpbnRvIG9yIHRocm91Z2ggdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjQ2LjI1MzA0Nzg1OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzA1MjY4ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBXcml0ZSBQYXRoIEludmVzdGlnYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gc28gYG5ldGZzX3BlcmZvcm1fd3JpdGVgIGlzIGRlZmluaXRlbHkgYW4gZXhwb3J0ZWQgc3ltYm9sLiBUaGF0J3MgZ29vZCwgdGhhdCdzIGEga2V5IGZ1bmN0aW9uIEknbGwgbGlrZWx5IG5lZWQgdG8gdHJhY2UuIE5vdywgd2hhdCBhYm91dCB0aGUgd3JpdGViYWNrIGZ1bmN0aW9ucz8gSSBrbm93IGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYCBpcyB1c2VkIGludGVybmFsbHksIEkgbmVlZCB0byBjaGVjayBpZiB0aGF0J3MgYWxzbyBleHBvcnRlZC4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciBpdCdzIHBhcnQgb2YgdGhlIEFQSS4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgbmV0d29yayBmaWxlc3lzdGVtJ3Mgd3JpdGUgcGF0aCwgc28gdHJhY2luZyB0aGVzZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgbWFpbiB3cml0ZSBmdW5jdGlvbiBhbmQgdGhlIHdyaXRlYmFjayBmdW5jdGlvbnMgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IHRvIGZpbmQgdGhlIGJvdHRsZW5lY2tzLCBhbmQgc2VlIGhvdyB0aGlzIGlzIGFsbCBiZWluZyBoYW5kbGVkIGluIHRoZSBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkyNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjQ5LjU1ODMxODc4MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg5NTAwNDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGZzX3dyaXRlYmFja19zaW5nbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmV0ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25ldGZzL3dyaXRlX2lzc3VlLmM9NzE5PXN0YXRpYyBpbnQgbmV0ZnNfd3JpdGVfZm9saW9fc2luZ2xlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy04MjktLyoqXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo4MzA6ICogbmV0ZnNfd3JpdGViYWNrX3NpbmdsZSAtIFdyaXRlIGJhY2sgYSBtb25vbGl0aGljIHBheWxvYWRcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTgzMS0gKiBAbWFwcGluZzogVGhlIG1hcHBpbmcgdG8gd3JpdGUgZnJvbVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy04NDAtICovXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo4NDE6aW50IG5ldGZzX3dyaXRlYmFja19zaW5nbGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy04NDItXFx0XFx0XFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTkwNS19XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo5MDY6RVhQT1JUX1NZTUJPTChuZXRmc193cml0ZWJhY2tfc2luZ2xlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTE6MTg6NDkuOTQ3ODMyMDQ5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjM5MTU2NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGlzIGNvZGUgc25pcHBldDpcblxuKipGb2N1c2luZyBvbiBOZXR3b3JrIEZpbGVzeXN0ZW0gV3JpdGUgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYCBpcyBhbiBleHBvcnRlZCBzeW1ib2wsIG1lYW5pbmcgaXQncyBhIGtleSBmdW5jdGlvbiBpbiB0aGUgbmV0d29yayBmaWxlc3lzdGVtIG1vZHVsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEJhc2VkIG9uIHRoYXQsIEknbSB0aGlua2luZyBhYm91dCB0aGUgbW9zdCByZWxldmFudCBmdW5jdGlvbnMgdGhhdCBsaWtlbHkgd29yayB3aXRoIGl0LCBlaXRoZXIgY2FsbGluZyBpdCwgb3IgYmVpbmcgY2FsbGVkIGJ5IGl0LiBJIGltbWVkaWF0ZWx5IHN0YXJ0IG1lbnRhbGx5IGNpcmNsaW5nIHNvbWUga2V5IHN1c3BlY3RzLiBJIHN1c3BlY3QgdGhlIGtleSBmdW5jdGlvbnMgbXVzdCBiZSByZWxhdGVkIHRvIHJlYWRzIGFuZCB3cml0ZXMsIGFuZCBJIHN1c3BlY3QgdGhlc2UgbWlnaHQgYmUgdGhlIGtleTogYG5ldGZzX3JlYWRhaGVhZGAsIGBuZXRmc193cml0ZXBhZ2VzYCwgdGhlIG9uZSBpbiBxdWVzdGlvbiBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAsIGBuZXRmc19wZXJmb3JtX3dyaXRlYCwgYW5kIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIG9wZXJhdGlvbnMgZm9yIGhhbmRsaW5nIGRhdGEgZmxvdy4gTm93LCBJIHdhbnQgdG8gdHJhY2UgaG93IGRhdGEgaXMgbWFuYWdlZCwgc28gSSdsbCBuZXh0IGxvb2sgYXQgdGhlIGNhbGxlcnMgb2YgYG5ldGZzX2NyZWF0ZV9zaW5ndWxhcl9idWZmZXJgLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGEgc2luZ3VsYXIgYnVmZmVyIGlzIGNyZWF0ZWQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHdyaXRpbmcgZGF0YS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MDIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMToxODo1My42MTE3NTA5MjJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjMzNjYxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc19jcmVhdGVfc2luZ3VsYXJfYnVmZmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9MzcxPUVYUE9SVF9TWU1CT0wobmV0ZnNfcmVhZGFoZWFkKTtcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy0zNzUtICovXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jOjM3NjpzdGF0aWMgaW50IG5ldGZzX2NyZWF0ZV9zaW5ndWxhcl9idWZmZXIoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKnJyZXEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTM3Ny1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcm9sbGJ1Zl9mbGFncylcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYz00OTk9aW50IG5ldGZzX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNTI4LVxcdC8qIFNldCB1cCB0aGUgb3V0cHV0IGJ1ZmZlciAqL1xcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo1Mjk6XFx0cmV0ID0gbmV0ZnNfY3JlYXRlX3Npbmd1bGFyX2J1ZmZlcihycmVxLCBmb2xpbywgMCk7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTUzMC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYz02Mjg9aW50IG5ldGZzX3dyaXRlX2JlZ2luKHN0cnVjdCBuZXRmc19pbm9kZSAqY3R4LFxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTY4NS1cXHQvKiBTZXQgdXAgdGhlIG91dHB1dCBidWZmZXIgKi9cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6Njg2OlxcdHJldCA9IG5ldGZzX2NyZWF0ZV9zaW5ndWxhcl9idWZmZXIocnJlcSwgZm9saW8sIDApO1xcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy02ODctXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9NzIwPWludCBuZXRmc19wcmVmZXRjaF9mb3Jfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNzUwLVxcdC8qIFNldCB1cCB0aGUgb3V0cHV0IGJ1ZmZlciAqL1xcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo3NTE6XFx0cmV0ID0gbmV0ZnNfY3JlYXRlX3Npbmd1bGFyX2J1ZmZlcihycmVxLCBmb2xpbywgTkVURlNfUk9MTEJVRl9QQUdFQ0FDSEVfTUFSSyk7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTc1Mi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTE6MTg6NTMuNzY4MDkyNzU5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MzgwODAyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIE5GUyBDb25zaWRlcmF0aW9ucyoqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIGBuZXRmc19yZWFkX2ZvbGlvYCwgYG5ldGZzX3dyaXRlX2JlZ2luYCwgYW5kIGBuZXRmc19wcmVmZXRjaF9mb3Jfd3JpdGVgLiBBbmQgdGhlIGltbWVkaWF0ZSB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSBpcyB0aGF0IHRoZXNlIGFyZSAqZXhwb3J0ZWQqIG9yIHVzZWQgYnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zLiBUaGF0J3MgYSBjcml0aWNhbCBkZXRhaWwuIFRoaXMgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIGludGVyZmFjZXMgdGhhdCBhcmUgZXhwb3NlZCB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCBvciBwb3RlbnRpYWxseSBldmVuIHRvIGV4dGVybmFsIG1vZHVsZXMuXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBFeHBvcnRlZCBmdW5jdGlvbnMgbWVhbiBzdGFiaWxpdHkgY29uc3RyYWludHMg4oCTIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYmVjb21lcyBwYXJhbW91bnQuIENoYW5naW5nIHRoZWlyIHNpZ25hdHVyZXMsIGJlaGF2aW9yLCBvciBldmVuIHN1YnRsZSBpbnRlcm5hbCB3b3JraW5ncyBjb3VsZCBicmVhayBhIHJhZnQgb2YgZGVwZW5kZW50IG1vZHVsZXMuIEknZCBiZSBlc3BlY2lhbGx5IHdhcnkgb2YgYW55IG1vZGlmaWNhdGlvbnMgdGhhdCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgY29ycnVwdGlvbiBidWdzLCBhcyB0aGVzZSBhcmUgbm90b3Jpb3VzbHkgZGlmZmljdWx0IHRvIHRyYWNrIGRvd24gaW4gYSBuZXR3b3JrZWQgZmlsZXN5c3RlbSBjb250ZXh0LiBXZSByZWFsbHkgaGF2ZSB0byBlbnN1cmUgdGhlc2UgcmVtYWluIHJvY2stc29saWQuXG5cbkknbSBhc3N1bWluZyB0aGVzZSBhcmUgbG93IGxldmVsIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIE5GUyBjbGllbnQgaW1wbGVtZW50YXRpb24uIExvb2tpbmcgYXQgdGhlIGZ1bmN0aW9uIG5hbWVzLCB0aGV5IGxpa2VseSBhcmUgaW52b2x2ZWQgaW4gdGhlIHByb2Nlc3Mgb2YgcmVhZGluZyBhbmQgd3JpdGluZyBkYXRhLCBhbmQsIHRoZSBwcmVmZXRjaCBmdW5jdGlvbiwgd2hpY2ggaXMgb2Z0ZW4gdXNlZCB0byBvcHRpbWl6ZSB0aGUgcHJvY2VzcyBvZiByZWFkaW5nIGRhdGEgYW5kIHdyaXRpbmcgZGF0YSBmcm9tIHRoZSBuZXQuXG5UaGUgcHJlZmV0Y2ggZnVuY3Rpb24gc2VlbXMgaW50ZXJlc3RpbmcgYXMgdGhpcyBpcyBhIGdvb2QgcGxhY2UgdG8gbG9vayBhdCB0aGUgcHJvY2VzcyBvZiBjYWNoaW5nIGFuZCBob3cgd2VsbCB0aGUgTkZTIGNsaWVudCBwZXJmb3Jtcy5cbkkgbmVlZCB0byBrbm93IHByZWNpc2VseSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkIGJ5IG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBJIG5lZWQgdG8ga25vdyB0aGUgY2FsbGluZyBjb250ZXh0cywgdGhlIGFyZ3VtZW50cyBwYXNzZWQsIHRoZSBleHBlY3RlZCByZXR1cm4gdmFsdWVzLCBhbmQgYW55IHNpZGUgZWZmZWN0cy4gV2l0aG91dCB0aGF0IGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZywgYW55IHJlZmFjdG9yaW5nIG9yIG9wdGltaXphdGlvbiBjYXJyaWVzIGEgc2lnbmlmaWNhbnQgcmlzay4gTXkgZmlyc3Qgc3RlcCB3b3VsZCBiZSB0byByZXZpZXcgdGhlIHJlbGV2YW50IGtlcm5lbCBoZWFkZXJzLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIGFuZCBhbnkgY3Jvc3MtcmVmZXJlbmNlcyB0byB0aGVzZSBzeW1ib2xzLiBJJ2QgYWxzbyBwcm9iYWJseSBsb29rIGF0IHRoZSBsb2NraW5nIHN0cmF0ZWd5IGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIFZGUyBsYXllci5cblxuVWx0aW1hdGVseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgKmNvbnRyYWN0KiB0aGVzZSBmdW5jdGlvbnMgYXJlIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBwcm9taXNpbmcgdG8gdGhlaXIgdXNlcnMgYmVmb3JlIEkgY2FuIGV2ZW4gY29uc2lkZXIgdG91Y2hpbmcgdGhlbS4gU3RhYmlsaXR5IGlzIHRoZSBuYW1lIG9mIHRoZSBnYW1lIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjU3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTE6MTg6NTguMjA2MTc2NzA2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzMwNTY3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc19yZWFkX2ZvbGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9Mzk0PXN0YXRpYyBpbnQgbmV0ZnNfcmVhZF9nYXBzKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTQ4NS0vKipcXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6NDg2OiAqIG5ldGZzX3JlYWRfZm9saW8gLSBIZWxwZXIgdG8gbWFuYWdlIGEgcmVhZF9mb2xpbyByZXF1ZXN0XFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTQ4Ny0gKiBAZmlsZTogVGhlIGZpbGUgdG8gcmVhZCBmcm9tXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNDk4LSAqL1xcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo0OTk6aW50IG5ldGZzX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTUwMC17XFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNTQzLX1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6NTQ0OkVYUE9SVF9TWU1CT0wobmV0ZnNfcmVhZF9mb2xpbyk7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTU0NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTE6MTg6NTguMjkzNDg4ODk5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NTI5NzYzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipQb3RlbnRpYWwgTmV0RlMgUGVyZm9ybWFuY2UgQm90dGxlbmVja3MqKlxuXG5SaWdodCwgc28gYG5ldGZzX3JlYWRfZm9saW9gIGlzIGV4cG9ydGVkLCB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoZSBtYWpvciBmb2N1cyBzeW1ib2xzIGFyZS4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgYW5kIHRoZSBjb250ZXh0LCBpdCBsb29rcyBsaWtlIHRoZXNlIGFyZSB0aGUgbGlrZWx5IHN1c3BlY3RzLCB0aGUgb25lcyB0aGF0IGNvdWxkIGJlIGhvbGRpbmcgdGhpbmdzIHVwOlxuXG4qICAgYG5ldGZzX3JlYWRhaGVhZGBcbiogICBgbmV0ZnNfcmVhZF9mb2xpb2BcbiogICBgbmV0ZnNfd3JpdGVwYWdlc2BcbiogICBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWBcbiogICBgbmV0ZnNfcGVyZm9ybV93cml0ZWBcbiogICBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZGBcbiogICBgbmV0ZnNfd3JpdGVfYmVnaW5gXG4qICAgYG5ldGZzX3ByZWZldGNoX2Zvcl93cml0ZWBcblxuR2l2ZW4gdGhlIGxpa2VseSBvcGVyYXRpb25zLCBhbmQgYmFzZWQgb24gZ3V0IGZlZWxpbmcsIEkgdGhpbmsgSSdsbCBzdGFydCBieSB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCBgbmV0ZnNfd3JpdGVfYmVnaW5gIGFuZCBgbmV0ZnNfcHJlZmV0Y2hfZm9yX3dyaXRlYC4gVGhleSBsb29rIGxpa2UgZ29vZCBjYW5kaWRhdGVzIHRvIHN0YXJ0IHRoZSBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgaW4gdGhvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDA5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE5OjAyLjc0NjQ2NzY4NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwOTY4NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGZzX3dyaXRlX2JlZ2luXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9NTYxPXN0YXRpYyBib29sIG5ldGZzX3NraXBfZm9saW9fcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCBzaXplX3QgbGVuLFxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTU5NS0vKipcXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6NTk2OiAqIG5ldGZzX3dyaXRlX2JlZ2luIC0gSGVscGVyIHRvIHByZXBhcmUgZm9yIHdyaXRpbmcgW0RFUFJFQ0FURURdXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTU5Ny0gKiBAY3R4OiBUaGUgbmV0ZnMgY29udGV4dFxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTYyNy0gKi9cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6NjI4OmludCBuZXRmc193cml0ZV9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmN0eCxcXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNjI5LVxcdFxcdCAgICAgIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy03MTQtfVxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo3MTU6RVhQT1JUX1NZTUJPTChuZXRmc193cml0ZV9iZWdpbik7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTcxNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTE6MTk6MDIuODY3NDQyMDc2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNzY2OTgxMTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDpcblxuKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgYG5ldGZzX3dyaXRlX2JlZ2luYCoqXG5cbkFscmlnaHQsIHNvIGBuZXRmc193cml0ZV9iZWdpbmAgaXMgYmVpbmcgZXhwb3J0ZWQuIEhtbSwgdGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEV4cG9ydGVkIG1lYW5zIGl0J3MgcGFydCBvZiB0aGUgQVBJLCBvciBhdCBsZWFzdCB2aXNpYmxlIGFuZCBhY2Nlc3NpYmxlIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0g4oCTIHBvdGVudGlhbGx5IG90aGVyIGtlcm5lbCBtb2R1bGVzLCBvciBldmVuIHVzZXJzcGFjZSwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiBJJ2xsIG5lZWQgdG8ga25vdyBtb3JlIGFib3V0IHdoZXJlIGl0J3MgYmVpbmcgdXNlZCwgYW5kIHdoYXQgaXRzIGNhbGxpbmcgY29udmVudGlvbnMgYXJlLCB0byB1bmRlcnN0YW5kIHRoZSBzaWduaWZpY2FuY2UuIEEgZnVuY3Rpb24gbmFtZSB3aXRoIFwid3JpdGVfYmVnaW5cIiBpbiBpdCBzdWdnZXN0cyBzb21lIHNvcnQgb2YgaW5pdGlhbGl6YXRpb24gb3Igc2V0dXAgcGhhc2UgZm9yIGEgd3JpdGUgb3BlcmF0aW9uIHdpdGhpbiB0aGUgbmV0d29yayBmaWxlc3lzdGVtIChuZXRmcykuIFRoYXQgaXMgaW50ZXJlc3RpbmcsIHNvIEknbGwgY29uc2lkZXIgaG93IHRoaXMgdGllcyBpbnRvIHRoZSBuZXR3b3JrIGZpbGUgc3lzdGVtIGFzIGEgd2hvbGUuIEkgaW1tZWRpYXRlbHkgc3RhcnQgYXNraW5nIHF1ZXN0aW9uczogV2hhdCB0eXBlcyBvZiB3cml0ZSBvcGVyYXRpb25zIGRvZXMgaXQgc3VwcG9ydD8gV2hhdCBraW5kIG9mIGxvY2tpbmcgaXMgaW52b2x2ZWQsIGlmIGFueT8gSXMgdGhpcyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgcHJvdG9jb2wgbGlrZSBORlMsIFNNQiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IENvdWxkIGl0IGJlIGludm9sdmVkIGluIGFueSBzZWN1cml0eSBjb250ZXh0cyBvciBwZXJtaXNzaW9ucyBjaGVja3MsIHN1Y2ggYXMgd2hlbiByZWFkaW5nIG9yIHdyaXRpbmcgYSBmaWxlP1xuXG5UaGlzIG5lZWRzIHRvIGJlIHVuZGVyc3Rvb2QgaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5ldGZzIGRlc2lnbi4gSXMgaXQgYSBjb3JlIGZ1bmN0aW9uLCBvciBpcyBpdCBwYXJ0IG9mIGEgbGF5ZXIgdGhhdCBwcm92aWRlcyBhZGRpdGlvbmFsIGZlYXR1cmVzPyBJIHdvdWxkIGJlIGludHJpZ3VlZCB0byBrbm93LCBjb25zaWRlcmluZyBuZXR3b3JrIGZpbGVzeXN0ZW1zIGFyZSBub3Qgc2ltcGxlLCBhdCBhbGwuIFdoYXQgaXMgdGhlIHNjb3BlPyBXaHkgaXMgaXQgZXhwb3J0ZWQ/IEFuZCwgd2hhdCB3aWxsIGNvbWUgYWZ0ZXI/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjgyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTE6MTk6MTUuNjM0NDI2MzA1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ2MjQzMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZnNfcHJlZmV0Y2hfZm9yX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9NzE1PUVYUE9SVF9TWU1CT0wobmV0ZnNfd3JpdGVfYmVnaW4pO1xcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTcxOS0gKi9cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6NzIwOmludCBuZXRmc19wcmVmZXRjaF9mb3Jfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTcyMS1cXHRcXHRcXHQgICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTg3PXNzaXplX3QgbmV0ZnNfcGVyZm9ybV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtMjg0LVxcdFxcdFxcdH1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjI4NTpcXHRcXHRcXHRyZXQgPSBuZXRmc19wcmVmZXRjaF9mb3Jfd3JpdGUoZmlsZSwgZm9saW8sIG9mZnNldCwgcGFydCk7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy0yODYtXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmZzL25ldGZzL2ludGVybmFsLmg9Mjg9dm9pZCBuZXRmc19jYWNoZV9yZWFkX3Rlcm1pbmF0ZWQodm9pZCAqcHJpdiwgc3NpemVfdCB0cmFuc2ZlcnJlZF9vcl9lcnJvcik7XFxuZnMvbmV0ZnMvaW50ZXJuYWwuaDoyOTppbnQgbmV0ZnNfcHJlZmV0Y2hfZm9yX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmZzL25ldGZzL2ludGVybmFsLmgtMzAtXFx0XFx0XFx0ICAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTE6MTk6MTUuNzk5MDU2OTExWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMjc2NDE0NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldEZTIFdyaXRlYmFjayBQYXRjaCoqXG5cbk9rYXksIHNvIGBuZXRmc19wcmVmZXRjaF9mb3Jfd3JpdGVgIGlzIGludGVybmFsLCB0aGF0J3Mgbm90IHNvbWV0aGluZyB0byBjb25jZXJuIG15c2VsZiB3aXRoIGRpcmVjdGx5LiBGaXJzdCwgbGV0J3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFJpZ2h0LCBhZnRlciByZXZpZXdpbmcgSSBzZWUgYENJRlNgLCBgOVBfRlNgLCBgQUZTX0ZTYCwgYENFUEhfRlNgIGFzIGltcG9ydGFudC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYE5GU19GU0NBQ0hFYCBkZXBlbmRzIG9uIGBORlNfRlNgLCBzbyBJIGRvbid0IG5lZWQgdG8gY29uc2lkZXIgdGhhdCBhcyBhIGRpcmVjdCBkZXBlbmRlbmN5IGhlcmUsIEkgY2FuIGlnbm9yZSB0aGF0LlxuXG5JIHNob3VsZCB2ZXJpZnkgaWYgYE5FVEZTX1NVUFBPUlRgIGlzIGVub3VnaCB0byBiZSBvbiBteSBsaXN0LiBOb3BlLCBpdCdzIGhpZGRlbiwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbGlzdGluZyB0aGUgZmlsZXN5c3RlbXMgdGhhdCBzZWxlY3QgaXQuIEkgY2FuIGp1c3QgbGlzdCBgQ0lGU2AsIGA5UF9GU2AsIGBBRlNfRlNgLCBgQ0VQSF9GU2AuXG5cbkxldCBtZSBjaXJjbGUgYmFjayB0byB0aGUgcGF0Y2ggaXRzZWxmLiBUaGUgY2hhbmdlIGludHJvZHVjZXMgYSBgZ2ZwYCBwYXJhbWV0ZXIgdG8gYHJvbGxpbmdfYnVmZmVyX2luaXRgLCB3aGljaCBpcyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZy4gQW5kIGluIGBuZXRmc19jcmVhdGVfd3JpdGVfcmVxYCwgaXQncyBzZXR0aW5nIGBnZnAgfD0gX19HRlBfTk9GQUlMYCB1bmRlciB0aGUgY29uZGl0aW9ucyBgb3JpZ2luID09IE5FVEZTX1dSSVRFQkFDS2Agb3IgYG9yaWdpbiA9PSBORVRGU19XUklURUJBQ0tfU0lOR0xFYC4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBhaW1lZCBhdCBwcmV2ZW50aW5nIEVOT01FTSBlcnJvcnMgZHVyaW5nIHdyaXRlYmFjaywgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUgbWVtb3J5IHJlY2xhaW0gcHJvY2Vzcy4gVGhhdCdzIGEgZ29vZCBwbGFjZSB0byBiZSBtb2RpZnlpbmcuXG5cbkdpdmVuIHRoYXQgaXQncyBhIGNvcmUgY2hhbmdlIHdpdGhpbiB0aGUgbmV0ZnMgd3JpdGViYWNrIHBhdGgsIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZm9jdXNpbmcgb24gYWxsIHRob3NlIGltcG9ydGFudCBzeW1ib2xzLlxuXG5JIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgaW1wb3J0YW50IHN5bWJvbHM6XG4tIGBuZXRmc19yZWFkYWhlYWRgXG4tIGBuZXRmc19yZWFkX2ZvbGlvYFxuLSBgbmV0ZnNfd3JpdGVwYWdlc2Bcbi0gYG5ldGZzX3dyaXRlYmFja19zaW5nbGVgXG4tIGBuZXRmc19wZXJmb3JtX3dyaXRlYFxuLSBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZGBcblxuQW5kIHRvIHJlLWl0ZXJhdGUsIG15IGtleSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZTpcbi0gYENJRlNgXG4tIGA5UF9GU2Bcbi0gYEFGU19GU2Bcbi0gYENFUEhfRlNgXG5cbkknbGwganVzdCBkb3VibGUtY2hlY2ssIGJ1dCB5ZXMsIGl0IGlzIGhpZGRlbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNjksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTE6MTk6MjIuMTI2NzAyMDkxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgyNTQ1MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZTX1NVUFBPUlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmV0ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9LY29uZmlnLTItXFxuZnMvbmV0ZnMvS2NvbmZpZzozOmNvbmZpZyBORVRGU19TVVBQT1JUXFxuZnMvbmV0ZnMvS2NvbmZpZy00LVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE5OjIyLjI2NDk2MzMwOVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ3NDk1NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEhpZGRlbiBGaWxlIFN5c3RlbSBPcHRpb25zKipcblxuUmlnaHQsIG5vIHByb21wdCBzdHJpbmcsIHdoaWNoIG1lYW5zIHRoaXMgZmVhdHVyZSBpcyAqZGVmaW5pdGVseSogaGlkZGVuLiBXZSBjYW4ndCBlbmFibGUgaXQgZGlyZWN0bHkgdGhyb3VnaCBhIHN0YW5kYXJkIGludGVyZmFjZTsgaXQgaGFzIHRvIGJlIHNwZWNpZmljYWxseSBzZWxlY3RlZCwgbGlrZWx5IGluIHNvbWUgc29ydCBvZiBjb25maWd1cmF0aW9uIG9yIGJ1aWxkIHByb2Nlc3MuIFNvLCBsaXN0aW5nIGBDSUZTYCwgYDlQX0ZTYCwgYEFGU19GU2AsIGFuZCBgQ0VQSF9GU2AgaXMgc3BvdCBvbiDigJMgdGhvc2UgYXJlIHRoZSBjYW5kaWRhdGVzLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoaXMgaGlkZGVuIHN0YXRlIGlzIG1hbmFnZWQgaW4gY29kZS5cblxuTGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoaXMgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byBleGFtaW5lIGByb2xsaW5nX2J1ZmZlcl9pbml0YCBzcGVjaWZpY2FsbHkuIEknbGwgaGVhZCBvdmVyIHRvIGBmcy9uZXRmcy9yb2xsaW5nX2J1ZmZlci5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZXNlIGZpbGVzeXN0ZW0gdHlwZXMgYXJlIG1hZGUgYXZhaWxhYmxlIGFuZCB3aGF0IG1ha2VzIHRoZW0gd29yay4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHNlbGVjdGlvbiBvciBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gbWFuaWZlc3RzIGl0c2VsZi4gVGhpcyBmdW5jdGlvbiBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGFyZSBoaWRkZW4gYnkgZGVmYXVsdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMjAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMToxOToyNS45MTI0NjI0NzNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjUzNzc4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyb2xsaW5nX2J1ZmZlcl9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9MzM2PXZvaWQgbmV0ZnNfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwpXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzYxLVxcdHJyZXEtXFx1MDAzZXN1Ym1pdHRlZCA9IHJyZXEtXFx1MDAzZXN0YXJ0O1xcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzozNjI6XFx0aWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoXFx1MDAyNnJyZXEtXFx1MDAzZWJ1ZmZlciwgcnJlcS1cXHUwMDNlZGVidWdfaWQsIElURVJfREVTVCwgR0ZQX05PRlMpIFxcdTAwM2MgMClcXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzYzLVxcdFxcdGdvdG8gY2xlYW51cF9mcmVlO1xcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jPTM3Nj1zdGF0aWMgaW50IG5ldGZzX2NyZWF0ZV9zaW5ndWxhcl9idWZmZXIoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKnJyZXEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzgwLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzozODE6XFx0aWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoXFx1MDAyNnJyZXEtXFx1MDAzZWJ1ZmZlciwgcnJlcS1cXHUwMDNlZGVidWdfaWQsIElURVJfREVTVCwgR0ZQX05PRlMpIFxcdTAwM2MgMClcXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzgyLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxuZnMvbmV0ZnMvcm9sbGluZ19idWZmZXIuYz01NT1FWFBPUlRfU1lNQk9MKG5ldGZzX2ZvbGlvcV9mcmVlKTtcXG4tLVxcbmZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmMtNjEtICovXFxuZnMvbmV0ZnMvcm9sbGluZ19idWZmZXIuYzo2MjppbnQgcm9sbGluZ19idWZmZXJfaW5pdChzdHJ1Y3Qgcm9sbGluZ19idWZmZXIgKnJvbGwsIHVuc2lnbmVkIGludCBycmVxX2lkLFxcbmZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmMtNjMtXFx0XFx0XFx0dW5zaWduZWQgaW50IGRpcmVjdGlvbiwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz05MD1zdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTE1LVxcdFxcdGdmcCB8PSBfX0dGUF9OT0ZBSUw7XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzoxMTY6XFx0aWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoXFx1MDAyNndyZXEtXFx1MDAzZWJ1ZmZlciwgd3JlcS1cXHUwMDNlZGVidWdfaWQsIElURVJfU09VUkNFLCBnZnApIFxcdTAwM2MgMClcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTExNy1cXHRcXHRnb3RvIG5vbWVtO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMToxOToyNi4wNjUwMDc3MDFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk3NDUwNTg1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRmcyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIHRoaXMgcGF0Y2ggb3ZlciwgYW5kIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyBwb3NpdGl2ZS4gSXQncyBtYWtpbmcgYSB0YXJnZXRlZCBjaGFuZ2UsIHR3ZWFraW5nIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIHdpdGhpbiB0aGUgYG5ldGZzYCBsaWJyYXJ5LCBzcGVjaWZpY2FsbHkgaW4gYHJvbGxpbmdfYnVmZmVyX2luaXRgLiBUaGUga2V5IGhlcmUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgZ2ZwX3RgIHdoaWNoIGlzIHRoZW4gdXNlZCBpbiBgbmV0ZnNfZm9saW9xX2FsbG9jYCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBfX0dGUF9OT0ZBSUxgIGluIGBuZXRmc19jcmVhdGVfd3JpdGVfcmVxYC4gVGhlIGFpbSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0byBib2xzdGVyIHRoZSByb2J1c3RuZXNzIG9mIHdyaXRlYmFjayBvcGVyYXRpb25zLCBtaXRpZ2F0aW5nIHRoZSByaXNrIG9mIGBFTk9NRU1gIGVycm9ycyBkdXJpbmcgbWVtb3J5IHJlY2xhaW0sIHdoaWNoIGlzIGEgY29tbW9uIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgSSd2ZSBzZWVuIGluIHRoZSBwYXN0LlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb247IGl0J3Mgbm90IGp1c3QgYSBjb3NtZXRpYyBjaGFuZ2UuIEl0IGRpcmVjdGx5IGFmZmVjdHMgaG93IG1lbW9yeSBpcyBoYW5kbGVkIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwgaW4gdGhlIGNvcmUgYG5ldGZzYCBsaWJyYXJ5LiBUaGlzIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggdGhlc2UgY2hhbmdlcy4gSSdsbCBwcmlvcml0aXplIGZ1enppbmcgYXJvdW5kIGBuZXRmc19yZWFkYWhlYWRgLCBgbmV0ZnNfcmVhZF9mb2xpb2AsIGBuZXRmc193cml0ZXBhZ2VzYCwgYG5ldGZzX3dyaXRlYmFja19zaW5nbGVgLCBgbmV0ZnNfcGVyZm9ybV93cml0ZWAsIGFuZCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZGAgdG8gbWFrZSBzdXJlIGl0J3MgYWxsIHdvcmtpbmcgcHJvcGVybHkgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy5cblxuR2l2ZW4gdGhhdCB0aGlzIHJlbGF0ZXMgdG8gbmV0d29yayBmaWxlc3lzdGVtcywgSSdtIHRoaW5raW5nIHRoZSBmb2xsb3dpbmcgY29uZmlncyB3b3VsZCBiZSB1c2VmdWwgdG8gZW5hYmxlIGR1cmluZyBmdXp6aW5nOiBgQ0lGU2AsIGA5UF9GU2AsIGBBRlNfRlNgLCBhbmQgYENFUEhfRlNgLiBUaGlzIHNob3VsZCBwcm92aWRlIGJyb2FkIGNvdmVyYWdlIGFuZCB0ZXN0IGZvciBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyBpbiBjb21tb25seSB1c2VkIG5ldHdvcmtpbmcgZmlsZXN5c3RlbXMuIEFsbCBpbiBhbGwsIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkLCB3ZWxsLXJlYXNvbmVkIHBhdGNoIHRoYXQgSSBjYW4gZGVmaW5pdGVseSBnZXQgYmVoaW5kIGFuZCB0aGF0IHNob3VsZCBiZSByaWdvcm91c2x5IHRlc3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNzYsIk91dHB1dFRva2VucyI6MTYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE5OjMyLjAzOTUxNzA1OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDQ0OTkyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0lGU1wiLFxuICAgIFwiOVBfRlNcIixcbiAgICBcIkFGU19GU1wiLFxuICAgIFwiQ0VQSF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGZzX3JlYWRhaGVhZFwiLFxuICAgIFwibmV0ZnNfcmVhZF9mb2xpb1wiLFxuICAgIFwibmV0ZnNfd3JpdGVwYWdlc1wiLFxuICAgIFwibmV0ZnNfd3JpdGViYWNrX3NpbmdsZVwiLFxuICAgIFwibmV0ZnNfcGVyZm9ybV93cml0ZVwiLFxuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyBmb3Igcm9sbGluZyBidWZmZXIgaW5pdGlhbGl6YXRpb24gaW4gdGhlIG5ldGZzIGxpYnJhcnksIHNwZWNpZmljYWxseSBhZGRpbmcgX19HRlBfTk9GQUlMIGZvciB3cml0ZWJhY2sgb3BlcmF0aW9ucyB0byBwcmV2ZW50IEVOT01FTSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldGZzIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNJRlNcIixcbiAgICBcIjlQX0ZTXCIsXG4gICAgXCJBRlNfRlNcIixcbiAgICBcIkNFUEhfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRmc19yZWFkYWhlYWRcIixcbiAgICBcIm5ldGZzX3JlYWRfZm9saW9cIixcbiAgICBcIm5ldGZzX3dyaXRlcGFnZXNcIixcbiAgICBcIm5ldGZzX3dyaXRlYmFja19zaW5nbGVcIixcbiAgICBcIm5ldGZzX3BlcmZvcm1fd3JpdGVcIixcbiAgICBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgZm9yIHJvbGxpbmcgYnVmZmVyIGluaXRpYWxpemF0aW9uIGluIHRoZSBuZXRmcyBsaWJyYXJ5LCBzcGVjaWZpY2FsbHkgYWRkaW5nIF9fR0ZQX05PRkFJTCBmb3Igd3JpdGViYWNrIG9wZXJhdGlvbnMgdG8gcHJldmVudCBFTk9NRU0gZHVyaW5nIG1lbW9yeSByZWNsYWltLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXRmcyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workfloww4f7h[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-25 10:48:11 +0000 UTC FinishedAt: 2026-07-25 11:19:34 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "8bb3adb339dddac0b25c92684c4d1c8668646b37", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CIFS", "9P_FS", "AFS_FS", "CEPH_FS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "vfs", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git", "commit_hash": "8bb3adb339dddac0b25c92684c4d1c8668646b37", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "CIFS", "9P_FS", "AFS_FS", "CEPH_FS" ], "series_id": "15d9701b-cc41-4cb5-b509-d3a80c8c802f" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "netfs_readahead", "netfs_read_folio", "netfs_writepages", "netfs_writeback_single", "netfs_perform_write", "netfs_unbuffered_write_iter_locked" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NJRlMmIzM0OywKICAgICYjMzQ7OVBfRlMmIzM0OywKICAgICYjMzQ7QUZTX0ZTJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRmc19yZWFkYWhlYWQmIzM0OywKICAgICYjMzQ7bmV0ZnNfcmVhZF9mb2xpbyYjMzQ7LAogICAgJiMzNDtuZXRmc193cml0ZXBhZ2VzJiMzNDssCiAgICAmIzM0O25ldGZzX3dyaXRlYmFja19zaW5nbGUmIzM0OywKICAgICYjMzQ7bmV0ZnNfcGVyZm9ybV93cml0ZSYjMzQ7LAogICAgJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyBmb3Igcm9sbGluZyBidWZmZXIgaW5pdGlhbGl6YXRpb24gaW4gdGhlIG5ldGZzIGxpYnJhcnksIHNwZWNpZmljYWxseSBhZGRpbmcgX19HRlBfTk9GQUlMIGZvciB3cml0ZWJhY2sgb3BlcmF0aW9ucyB0byBwcmV2ZW50IEVOT01FTSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldGZzIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgODRkYjczM2Y0NDQ0ZWY3NDdiOTM2YzQ2YjI5NWJiYmUxODNmOGRkMFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTYXQgSnVsIDI1IDExOjE4OjAyIDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYyBiL2ZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuY1xuaW5kZXggMjRhOGE1NDE4ZTMxMTkuLmZlODRlMWRkNzA3Y2UxIDEwMDY0NFxuLS0tIGEvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmNcbkBAIC0zNTksNyAmIzQzOzM1OSw3IEBAIHZvaWQgbmV0ZnNfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwpXG4gXHRuZXRmc19ycmVxX2V4cGFuZChycmVxLCByYWN0bCk7XG4gXG4gXHRycmVxLVx1MDAzZXN1Ym1pdHRlZCA9IHJyZXEtXHUwMDNlc3RhcnQ7XG4tXHRpZiAocm9sbGluZ19idWZmZXJfaW5pdChcdTAwMjZycmVxLVx1MDAzZWJ1ZmZlciwgcnJlcS1cdTAwM2VkZWJ1Z19pZCwgSVRFUl9ERVNUKSBcdTAwM2MgMClcbiYjNDM7XHRpZiAocm9sbGluZ19idWZmZXJfaW5pdChcdTAwMjZycmVxLVx1MDAzZWJ1ZmZlciwgcnJlcS1cdTAwM2VkZWJ1Z19pZCwgSVRFUl9ERVNULCBHRlBfTk9GUykgXHUwMDNjIDApXG4gXHRcdGdvdG8gY2xlYW51cF9mcmVlO1xuIFx0bmV0ZnNfcmVhZF90b19wYWdlY2FjaGUocnJlcSwgcmFjdGwpO1xuIFxuQEAgLTM3OCw3ICYjNDM7Mzc4LDcgQEAgc3RhdGljIGludCBuZXRmc19jcmVhdGVfc2luZ3VsYXJfYnVmZmVyKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpycmVxLCBzdHJ1Y3QgZm9cbiB7XG4gXHRzc2l6ZV90IGFkZGVkO1xuIFxuLVx0aWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoXHUwMDI2cnJlcS1cdTAwM2VidWZmZXIsIHJyZXEtXHUwMDNlZGVidWdfaWQsIElURVJfREVTVCkgXHUwMDNjIDApXG4mIzQzO1x0aWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoXHUwMDI2cnJlcS1cdTAwM2VidWZmZXIsIHJyZXEtXHUwMDNlZGVidWdfaWQsIElURVJfREVTVCwgR0ZQX05PRlMpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGFkZGVkID0gcm9sbGluZ19idWZmZXJfYXBwZW5kKFx1MDAyNnJyZXEtXHUwMDNlYnVmZmVyLCBmb2xpbywgcm9sbGJ1Zl9mbGFncyk7XG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvcm9sbGluZ19idWZmZXIuYyBiL2ZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmNcbmluZGV4IGExN2ZiZjk4NTNhNDQzLi4zYzRiMWUyNDRjNDZlZiAxMDA2NDRcbi0tLSBhL2ZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmNcbkBAIC02MCwxMSAmIzQzOzYwLDExIEBAIEVYUE9SVF9TWU1CT0wobmV0ZnNfZm9saW9xX2ZyZWUpO1xuICAqIGNvbnN1bWVyLlxuICAqL1xuIGludCByb2xsaW5nX2J1ZmZlcl9pbml0KHN0cnVjdCByb2xsaW5nX2J1ZmZlciAqcm9sbCwgdW5zaWduZWQgaW50IHJyZXFfaWQsXG4tXHRcdFx0dW5zaWduZWQgaW50IGRpcmVjdGlvbilcbiYjNDM7XHRcdFx0dW5zaWduZWQgaW50IGRpcmVjdGlvbiwgZ2ZwX3QgZ2ZwKVxuIHtcbiBcdHN0cnVjdCBmb2xpb19xdWV1ZSAqZnE7XG4gXG4tXHRmcSA9IG5ldGZzX2ZvbGlvcV9hbGxvYyhycmVxX2lkLCBHRlBfTk9GUywgbmV0ZnNfdHJhY2VfZm9saW9xX3JvbGxidWZfaW5pdCk7XG4mIzQzO1x0ZnEgPSBuZXRmc19mb2xpb3FfYWxsb2MocnJlcV9pZCwgZ2ZwLCBuZXRmc190cmFjZV9mb2xpb3Ffcm9sbGJ1Zl9pbml0KTtcbiBcdGlmICghZnEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmMgYi9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG5pbmRleCBmMjc2MWM5OTc5NWE2Yi4uMjhiY2QxMGVmMzMwMjcgMTAwNjQ0XG4tLS0gYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG5AQCAtOTgsNiAmIzQzOzk4LDcgQEAgc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2NyZWF0ZV93cml0ZV9yZXEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRcdFx0ICAgICBvcmlnaW4gPT0gTkVURlNfV1JJVEVCQUNLX1NJTkdMRSB8fFxuIFx0XHRcdCAgICAgb3JpZ2luID09IE5FVEZTX1dSSVRFVEhST1VHSCB8fFxuIFx0XHRcdCAgICAgb3JpZ2luID09IE5FVEZTX1BHUFJJVjJfQ09QWV9UT19DQUNIRSk7XG4mIzQzO1x0Z2ZwX3QgZ2ZwID0gR0ZQX05PRlM7XG4gXG4gXHR3cmVxID0gbmV0ZnNfYWxsb2NfcmVxdWVzdChtYXBwaW5nLCBmaWxlLCBzdGFydCwgMCwgb3JpZ2luKTtcbiBcdGlmIChJU19FUlIod3JlcSkpXG5AQCAtMTA4LDcgJiM0MzsxMDksMTEgQEAgc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2NyZWF0ZV93cml0ZV9yZXEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRpY3R4ID0gbmV0ZnNfaW5vZGUod3JlcS1cdTAwM2Vpbm9kZSk7XG4gXHRpZiAoaXNfY2FjaGVhYmxlKVxuIFx0XHRmc2NhY2hlX2JlZ2luX3dyaXRlX29wZXJhdGlvbihcdTAwMjZ3cmVxLVx1MDAzZWNhY2hlX3Jlc291cmNlcywgbmV0ZnNfaV9jb29raWUoaWN0eCkpO1xuLVx0aWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoXHUwMDI2d3JlcS1cdTAwM2VidWZmZXIsIHdyZXEtXHUwMDNlZGVidWdfaWQsIElURVJfU09VUkNFKSBcdTAwM2MgMClcbiYjNDM7XG4mIzQzO1x0LyogV3JpdGViYWNrIGlzIHBhcnQgb2YgbWVtb3J5IHJlY2xhaW0gYW5kIG11c3Qgbm90IGZhaWwgZHVlIHRvIEVOT01FTS4gKi9cbiYjNDM7XHRpZiAob3JpZ2luID09IE5FVEZTX1dSSVRFQkFDSyB8fCBvcmlnaW4gPT0gTkVURlNfV1JJVEVCQUNLX1NJTkdMRSlcbiYjNDM7XHRcdGdmcCB8PSBfX0dGUF9OT0ZBSUw7XG4mIzQzO1x0aWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoXHUwMDI2d3JlcS1cdTAwM2VidWZmZXIsIHdyZXEtXHUwMDNlZGVidWdfaWQsIElURVJfU09VUkNFLCBnZnApIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG5vbWVtO1xuIFxuIFx0d3JlcS1cdTAwM2VjbGVhbmVkX3RvID0gd3JlcS1cdTAwM2VzdGFydDtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JvbGxpbmdfYnVmZmVyLmggYi9pbmNsdWRlL2xpbnV4L3JvbGxpbmdfYnVmZmVyLmhcbmluZGV4IGFjMTViMWZmZGQ4MzE1Li4zOWI3MjQ4ODM4ZTIxMiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcm9sbGluZ19idWZmZXIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9yb2xsaW5nX2J1ZmZlci5oXG5AQCAtNDMsNyAmIzQzOzQzLDcgQEAgc3RydWN0IHJvbGxpbmdfYnVmZmVyX3NuYXBzaG90IHtcbiAjZGVmaW5lIFJPTExCVUZfTUFSS18yXHRCSVQoMSlcbiBcbiBpbnQgcm9sbGluZ19idWZmZXJfaW5pdChzdHJ1Y3Qgcm9sbGluZ19idWZmZXIgKnJvbGwsIHVuc2lnbmVkIGludCBycmVxX2lkLFxuLVx0XHRcdHVuc2lnbmVkIGludCBkaXJlY3Rpb24pO1xuJiM0MztcdFx0XHR1bnNpZ25lZCBpbnQgZGlyZWN0aW9uLCBnZnBfdCBnZnApO1xuIGludCByb2xsaW5nX2J1ZmZlcl9tYWtlX3NwYWNlKHN0cnVjdCByb2xsaW5nX2J1ZmZlciAqcm9sbCk7XG4gc3NpemVfdCByb2xsaW5nX2J1ZmZlcl9sb2FkX2Zyb21fcmEoc3RydWN0IHJvbGxpbmdfYnVmZmVyICpyb2xsLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTE6MTg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0NJRlMmIzM0OywKICAgICYjMzQ7OVBfRlMmIzM0OywKICAgICYjMzQ7QUZTX0ZTJiMzNDssCiAgICAmIzM0O0NFUEhfRlMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtuZXRmc19yZWFkYWhlYWQmIzM0OywKICAgICYjMzQ7bmV0ZnNfcmVhZF9mb2xpbyYjMzQ7LAogICAgJiMzNDtuZXRmc193cml0ZXBhZ2VzJiMzNDssCiAgICAmIzM0O25ldGZzX3dyaXRlYmFja19zaW5nbGUmIzM0OywKICAgICYjMzQ7bmV0ZnNfcGVyZm9ybV93cml0ZSYjMzQ7LAogICAgJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyBmb3Igcm9sbGluZyBidWZmZXIgaW5pdGlhbGl6YXRpb24gaW4gdGhlIG5ldGZzIGxpYnJhcnksIHNwZWNpZmljYWxseSBhZGRpbmcgX19HRlBfTk9GQUlMIGZvciB3cml0ZWJhY2sgb3BlcmF0aW9ucyB0byBwcmV2ZW50IEVOT01FTSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldGZzIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODRkYjczM2Y0NDQ0ZWY3NDdiOTM2YzQ2YjI5NWJiYmUxODNmOGRkMApBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgSnVsIDI1IDExOjE4OjAyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jIGIvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jCmluZGV4IDI0YThhNTQxOGUzMTE5Li5mZTg0ZTFkZDcwN2NlMSAxMDA2NDQKLS0tIGEvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYwpAQCAtMzU5LDcgJiM0MzszNTksNyBAQCB2b2lkIG5ldGZzX3JlYWRhaGVhZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsKQogCW5ldGZzX3JyZXFfZXhwYW5kKHJyZXEsIHJhY3RsKTsKIAogCXJyZXEtJmd0O3N1Ym1pdHRlZCA9IHJyZXEtJmd0O3N0YXJ0OwotCWlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KCZhbXA7cnJlcS0mZ3Q7YnVmZmVyLCBycmVxLSZndDtkZWJ1Z19pZCwgSVRFUl9ERVNUKSAmbHQ7IDApCiYjNDM7CWlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KCZhbXA7cnJlcS0mZ3Q7YnVmZmVyLCBycmVxLSZndDtkZWJ1Z19pZCwgSVRFUl9ERVNULCBHRlBfTk9GUykgJmx0OyAwKQogCQlnb3RvIGNsZWFudXBfZnJlZTsKIAluZXRmc19yZWFkX3RvX3BhZ2VjYWNoZShycmVxLCByYWN0bCk7CiAKQEAgLTM3OCw3ICYjNDM7Mzc4LDcgQEAgc3RhdGljIGludCBuZXRmc19jcmVhdGVfc2luZ3VsYXJfYnVmZmVyKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpycmVxLCBzdHJ1Y3QgZm8KIHsKIAlzc2l6ZV90IGFkZGVkOwogCi0JaWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoJmFtcDtycmVxLSZndDtidWZmZXIsIHJyZXEtJmd0O2RlYnVnX2lkLCBJVEVSX0RFU1QpICZsdDsgMCkKJiM0MzsJaWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoJmFtcDtycmVxLSZndDtidWZmZXIsIHJyZXEtJmd0O2RlYnVnX2lkLCBJVEVSX0RFU1QsIEdGUF9OT0ZTKSAmbHQ7IDApCiAJCXJldHVybiAtRU5PTUVNOwogCiAJYWRkZWQgPSByb2xsaW5nX2J1ZmZlcl9hcHBlbmQoJmFtcDtycmVxLSZndDtidWZmZXIsIGZvbGlvLCByb2xsYnVmX2ZsYWdzKTsKZGlmZiAtLWdpdCBhL2ZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmMgYi9mcy9uZXRmcy9yb2xsaW5nX2J1ZmZlci5jCmluZGV4IGExN2ZiZjk4NTNhNDQzLi4zYzRiMWUyNDRjNDZlZiAxMDA2NDQKLS0tIGEvZnMvbmV0ZnMvcm9sbGluZ19idWZmZXIuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9uZXRmcy9yb2xsaW5nX2J1ZmZlci5jCkBAIC02MCwxMSAmIzQzOzYwLDExIEBAIEVYUE9SVF9TWU1CT0wobmV0ZnNfZm9saW9xX2ZyZWUpOwogICogY29uc3VtZXIuCiAgKi8KIGludCByb2xsaW5nX2J1ZmZlcl9pbml0KHN0cnVjdCByb2xsaW5nX2J1ZmZlciAqcm9sbCwgdW5zaWduZWQgaW50IHJyZXFfaWQsCi0JCQl1bnNpZ25lZCBpbnQgZGlyZWN0aW9uKQomIzQzOwkJCXVuc2lnbmVkIGludCBkaXJlY3Rpb24sIGdmcF90IGdmcCkKIHsKIAlzdHJ1Y3QgZm9saW9fcXVldWUgKmZxOwogCi0JZnEgPSBuZXRmc19mb2xpb3FfYWxsb2MocnJlcV9pZCwgR0ZQX05PRlMsIG5ldGZzX3RyYWNlX2ZvbGlvcV9yb2xsYnVmX2luaXQpOwomIzQzOwlmcSA9IG5ldGZzX2ZvbGlvcV9hbGxvYyhycmVxX2lkLCBnZnAsIG5ldGZzX3RyYWNlX2ZvbGlvcV9yb2xsYnVmX2luaXQpOwogCWlmICghZnEpCiAJCXJldHVybiAtRU5PTUVNOwogCmRpZmYgLS1naXQgYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jIGIvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYwppbmRleCBmMjc2MWM5OTc5NWE2Yi4uMjhiY2QxMGVmMzMwMjcgMTAwNjQ0Ci0tLSBhL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYwpAQCAtOTgsNiAmIzQzOzk4LDcgQEAgc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2NyZWF0ZV93cml0ZV9yZXEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsCiAJCQkgICAgIG9yaWdpbiA9PSBORVRGU19XUklURUJBQ0tfU0lOR0xFIHx8CiAJCQkgICAgIG9yaWdpbiA9PSBORVRGU19XUklURVRIUk9VR0ggfHwKIAkJCSAgICAgb3JpZ2luID09IE5FVEZTX1BHUFJJVjJfQ09QWV9UT19DQUNIRSk7CiYjNDM7CWdmcF90IGdmcCA9IEdGUF9OT0ZTOwogCiAJd3JlcSA9IG5ldGZzX2FsbG9jX3JlcXVlc3QobWFwcGluZywgZmlsZSwgc3RhcnQsIDAsIG9yaWdpbik7CiAJaWYgKElTX0VSUih3cmVxKSkKQEAgLTEwOCw3ICYjNDM7MTA5LDExIEBAIHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19jcmVhdGVfd3JpdGVfcmVxKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAogCWljdHggPSBuZXRmc19pbm9kZSh3cmVxLSZndDtpbm9kZSk7CiAJaWYgKGlzX2NhY2hlYWJsZSkKIAkJZnNjYWNoZV9iZWdpbl93cml0ZV9vcGVyYXRpb24oJmFtcDt3cmVxLSZndDtjYWNoZV9yZXNvdXJjZXMsIG5ldGZzX2lfY29va2llKGljdHgpKTsKLQlpZiAocm9sbGluZ19idWZmZXJfaW5pdCgmYW1wO3dyZXEtJmd0O2J1ZmZlciwgd3JlcS0mZ3Q7ZGVidWdfaWQsIElURVJfU09VUkNFKSAmbHQ7IDApCiYjNDM7CiYjNDM7CS8qIFdyaXRlYmFjayBpcyBwYXJ0IG9mIG1lbW9yeSByZWNsYWltIGFuZCBtdXN0IG5vdCBmYWlsIGR1ZSB0byBFTk9NRU0uICovCiYjNDM7CWlmIChvcmlnaW4gPT0gTkVURlNfV1JJVEVCQUNLIHx8IG9yaWdpbiA9PSBORVRGU19XUklURUJBQ0tfU0lOR0xFKQomIzQzOwkJZ2ZwIHw9IF9fR0ZQX05PRkFJTDsKJiM0MzsJaWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoJmFtcDt3cmVxLSZndDtidWZmZXIsIHdyZXEtJmd0O2RlYnVnX2lkLCBJVEVSX1NPVVJDRSwgZ2ZwKSAmbHQ7IDApCiAJCWdvdG8gbm9tZW07CiAKIAl3cmVxLSZndDtjbGVhbmVkX3RvID0gd3JlcS0mZ3Q7c3RhcnQ7CmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3JvbGxpbmdfYnVmZmVyLmggYi9pbmNsdWRlL2xpbnV4L3JvbGxpbmdfYnVmZmVyLmgKaW5kZXggYWMxNWIxZmZkZDgzMTUuLjM5YjcyNDg4MzhlMjEyIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3JvbGxpbmdfYnVmZmVyLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9yb2xsaW5nX2J1ZmZlci5oCkBAIC00Myw3ICYjNDM7NDMsNyBAQCBzdHJ1Y3Qgcm9sbGluZ19idWZmZXJfc25hcHNob3QgewogI2RlZmluZSBST0xMQlVGX01BUktfMglCSVQoMSkKIAogaW50IHJvbGxpbmdfYnVmZmVyX2luaXQoc3RydWN0IHJvbGxpbmdfYnVmZmVyICpyb2xsLCB1bnNpZ25lZCBpbnQgcnJlcV9pZCwKLQkJCXVuc2lnbmVkIGludCBkaXJlY3Rpb24pOwomIzQzOwkJCXVuc2lnbmVkIGludCBkaXJlY3Rpb24sIGdmcF90IGdmcCk7CiBpbnQgcm9sbGluZ19idWZmZXJfbWFrZV9zcGFjZShzdHJ1Y3Qgcm9sbGluZ19idWZmZXIgKnJvbGwpOwogc3NpemVfdCByb2xsaW5nX2J1ZmZlcl9sb2FkX2Zyb21fcmEoc3RydWN0IHJvbGxpbmdfYnVmZmVyICpyb2xsLAogCQkJCSAgICBzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsLAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMjEwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmV0ZnMgTWVtb3J5IEFsbG9jYXRpb24gQ2hhbmdlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGByb2xsaW5nX2J1ZmZlcl9pbml0YC4gVGhlIHByaW1hcnkgY2hhbmdlIHNlZW1zIHRvIGJlIGludHJvZHVjaW5nIGEgYGdmcF90YCBhcmd1bWVudCwgYW5kIHRoZW4gdXBkYXRpbmcgaXRzIHVzZXMgaW4gYGZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuY2AgYW5kIGBmcy9uZXRmcy93cml0ZV9pc3N1ZS5jYC4gU3BlY2lmaWNhbGx5LCB3aXRoaW4gYGZzL25ldGZzL3dyaXRlX2lzc3VlLmNgLCB0aGVyZSYjMzk7cyBzb21lIGNvbmRpdGlvbmFsIGxvZ2ljIGFkZGluZyBgX19HRlBfTk9GQUlMYCB0byB0aGUgYGdmcGAgZmxhZ3Mgd2hlbiBkZWFsaW5nIHdpdGggd3JpdGViYWNrIG9wZXJhdGlvbnMsIGxpa2UgYE5FVEZTX1dSSVRFQkFDS2AgYW5kIGBORVRGU19XUklURUJBQ0tfU0lOR0xFYC4KCkVzc2VudGlhbGx5LCB0aGlzIGlzIGEgZnVuY3Rpb25hbCBzaGlmdCBpbXBhY3RpbmcgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGJlaGF2aW9yIHdpdGhpbiB0aGUgYG5ldGZzYCBzdWJzeXN0ZW0uIFRoaXMgZGlyZWN0bHkgaW5mbHVlbmNlcyB0aGUgaW5pdGlhbGl6YXRpb24gb2YgdGhlIHJvbGxpbmcgYnVmZmVyLiBDb25zaWRlcmluZyBgbmV0ZnNgIGlzIGxldmVyYWdlZCBieSBzZXZlcmFsIG5ldHdvcmsgZmlsZXN5c3RlbXMgbGlrZSBBRlMsIENlcGgsIENJRlMsIGFuZCA5cCwgdGhpcyBjaGFuZ2UgY2xlYXJseSBoYXMgd2lkZXIgaW1wbGljYXRpb25zLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhpcy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQga2V5IGZ1bmN0aW9ucyB0byBzZWUgd2hlcmUgdGhpcyBpbXBhY3RzOiBJIG5lZWQgdG8gY2hlY2sgYG5ldGZzX3JlYWRhaGVhZGAsIGBuZXRmc19jcmVhdGVfc2luZ3VsYXJfYnVmZmVyYCwgYG5ldGZzX2NyZWF0ZV93cml0ZV9yZXFgLCBhbmQsIG9mIGNvdXJzZSwgYHJvbGxpbmdfYnVmZmVyX2luaXRgIGl0c2VsZiB0byBzZWUgd2hlcmUgdGhlIGNoYW5nZSBpcyBpbmNvcnBvcmF0ZWQuCgpOZXh0LCBJIG5lZWQgdG8ga25vdyB0aGUgY29uZmlnIG9wdGlvbiBmb3IgYG5ldGZzYCwgc28gdGhhdCBJIGtub3cgaWYgaXQgaXMgZW5hYmxlZC4gSSYjMzk7bGwgY2hlY2sgYGZzL25ldGZzL0tjb25maWdgIGFuZCBsb29rIGZvciBgQ09ORklHX05FVEZTX1NVUFBPUlRgLgoKSSYjMzk7bGwgc3BlY2lmaWNhbGx5IHNjcnV0aW5pemUgYG5ldGZzX2NyZWF0ZV93cml0ZV9yZXFgIGFuZCBgbmV0ZnNfcmVhZGFoZWFkYCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGBnZnBfdGAgY2hhbmdlIHJpcHBsZXMgdGhyb3VnaCB0aGUgY29kZSwgcGFydGljdWxhcmx5IGluIHJlZ2FyZHMgdG8gdGhlIG5ldyBsb2dpYyBhcm91bmQgd3JpdGViYWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGU19TVVBQT1JUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9LY29uZmlnLTItXG5mcy9uZXRmcy9LY29uZmlnOjM6Y29uZmlnIE5FVEZTX1NVUFBPUlRcbmZzL25ldGZzL0tjb25maWctNC1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzkyMwoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGVwZW5kZW5jaWVzIGFuZCBTZWxlY3Rpb24gQ3JpdGVyaWE6IEEgRGVlcCBEaXZlKioKCkFscmlnaHQsIG15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHVuZGVyc3RhbmQgdGhlIHNjb3BlIG9mIGluZmx1ZW5jZSBoZXJlLiBMZXQmIzM5O3MgZGlnIGluLiBJIG5lZWQgdG8gZ2V0IGEgZ3JpcCBvbiB0aGUgc3lzdGVtLCBzcGVjaWZpY2FsbHksIGFueSBjb2RlLCBkYXRhLCBvciBwcm9jZXNzZXMgdGhhdCBlaXRoZXIgKipkZXBlbmQqKiBvbiB0aGUgY3VycmVudCB0aGluZyB3ZSYjMzk7cmUgZXhhbWluaW5nLCBvciB0aGF0IHVzZSBpdCBhcyBhIHNlbGVjdGlvbiBjcml0ZXJpb24gb3IgaW5wdXQuCgpUaGlzIGlzIGNyaXRpY2FsIGJlY2F1c2UgdW5kZXJzdGFuZGluZyB0aGUgZGVwZW5kZW5jaWVzIHdpbGwgcHJvdmlkZSB0aGUgYmFzaXMgZm9yIHJpc2sgYXNzZXNzbWVudDogSWYgYSBjaGFuZ2UgaXMgbmVlZGVkIGhlcmUsIHdoYXQgaXMgdGhlIGNvc3Qgb2Ygc3VjaCBhIGNoYW5nZT8gV2hhdCBkb3duc3RyZWFtIHN5c3RlbXMgYXJlIGxpa2VseSB0byBiZSBpbXBhY3RlZD8gCgpDb252ZXJzZWx5LCBpZiAqdGhpcyogdGhpbmcgaXMgdXNlZCBhcyBhIGZpbHRlciBvciBzZWxlY3RvciwgSSBtdXN0IHVuZGVyc3RhbmQgdGhlIGludGVuZGVkIG91dGNvbWVzLiBXaGF0IGJlaGF2aW9ycyBvciByZXN1bHRzIGFyZSBzZWxlY3RlZCBieSB0aGlzIHRoaW5nPyBXaGF0IGFyZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBzZWxlY3RlZCB2cy4gcmVqZWN0ZWQgZGF0YT8gQXJlIHRoZXJlIGVkZ2UgY2FzZXMgSSBuZWVkIHRvIGNvbnNpZGVyPyBJbiBzaG9ydCwgSSBuZWVkIHRvIG1hcCB0aGUgY2F1c2FsIHJlbGF0aW9uc2hpcHMgYXMgY29tcGxldGVseSBhcyBwb3NzaWJsZS4gVGhlIGdvYWwgaXMgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlIHNvIHRoYXQgSSBkb24mIzM5O3QgaW5hZHZlcnRlbnRseSBicmVhayBleGlzdGluZyBmdW5jdGlvbmFsaXR5IG9yIGludHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW9yLCBhbmQgdGhhdCB0aGlzIGJlaGF2aW9yIGNvbmZvcm1zIHRvIHRoZSBuZWVkcyBvZiB0aGUgc3lzdGVtIGF0IGxhcmdlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBORVRGU19TVVBQT1JUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzLzlwL0tjb25maWc9Mj1jb25maWcgOVBfRlNcbi0tXG5mcy85cC9LY29uZmlnLTQtXHRkZXBlbmRzIG9uIE5FVF85UFxuZnMvOXAvS2NvbmZpZzo1Olx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcbmZzLzlwL0tjb25maWctNi1cdGhlbHBcbi0tXG5mcy9hZnMvS2NvbmZpZz0yPWNvbmZpZyBBRlNfRlNcbi0tXG5mcy9hZnMvS2NvbmZpZy02LVx0c2VsZWN0IEROU19SRVNPTFZFUlxuZnMvYWZzL0tjb25maWc6NzpcdHNlbGVjdCBORVRGU19TVVBQT1JUXG5mcy9hZnMvS2NvbmZpZy04LVx0c2VsZWN0IENSWVBUT19LUkI1XG4tLVxuZnMvY2VwaC9LY29uZmlnPTI9Y29uZmlnIENFUEhfRlNcbi0tXG5mcy9jZXBoL0tjb25maWctNS1cdHNlbGVjdCBDRVBIX0xJQlxuZnMvY2VwaC9LY29uZmlnOjY6XHRzZWxlY3QgTkVURlNfU1VQUE9SVFxuZnMvY2VwaC9LY29uZmlnLTctXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbi0tXG5mcy9uZnMvS2NvbmZpZz0xNzM9Y29uZmlnIE5GU19GU0NBQ0hFXG4tLVxuZnMvbmZzL0tjb25maWctMTc1LVx0ZGVwZW5kcyBvbiBORlNfRlNcbmZzL25mcy9LY29uZmlnOjE3NjpcdHNlbGVjdCBORVRGU19TVVBQT1JUXG5mcy9uZnMvS2NvbmZpZy0xNzctXHRzZWxlY3QgRlNDQUNIRVxuLS1cbmZzL3NtYi9jbGllbnQvS2NvbmZpZz0yPWNvbmZpZyBDSUZTXG4tLVxuZnMvc21iL2NsaWVudC9LY29uZmlnLTIwLVx0c2VsZWN0IE9JRF9SRUdJU1RSWVxuZnMvc21iL2NsaWVudC9LY29uZmlnOjIxOlx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0yMi1cdGhlbHBcbi0tXG5uZXQvOXAvS2NvbmZpZz02PW1lbnVjb25maWcgTkVUXzlQXG5uZXQvOXAvS2NvbmZpZy03LVx0dHJpc3RhdGUgXCYjMzQ7UGxhbiA5IFJlc291cmNlIFNoYXJpbmcgU3VwcG9ydCAoOVAyMDAwKVwmIzM0O1xubmV0LzlwL0tjb25maWc6ODpcdHNlbGVjdCBORVRGU19TVVBQT1JUXG5uZXQvOXAvS2NvbmZpZy05LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyMDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvbmZpZ3VyYXRpb24sIGFuZCBJIHNlZSB0aGF0IGBORVRGU19TVVBQT1JUYCBpcyBpbmRpcmVjdGx5IHNlbGVjdGVkIGJ5IGEgZmV3IG5ldHdvcmsgZmlsZSBzeXN0ZW1zOiBgOVBfRlNgLCBgQUZTX0ZTYCwgYENFUEhfRlNgLCBgTkZTX0ZTQ0FDSEVgLCBhbmQgYENJRlNgLiAgVGhhdCYjMzk7cyBnb29kLCBpdCBtYWtlcyBzZW5zZS4gSSBjYW4gZGlyZWN0bHkgZW5hYmxlIGBDSUZTYCwgYDlQX0ZTYCwgYEFGU19GU2AsIGBDRVBIX0ZTYCwgb3IgYE5GU19GU0NBQ0hFYCwgYW5kIGBORVRGU19TVVBQT1JUYCB3aWxsIGNvbWUgYWxvbmcgZm9yIHRoZSByaWRlLiBXYWl0IGEgbWludXRlLi4uIGBORVRGU19TVVBQT1JUYCBpdHNlbGYgaXMgYSB0cmlzdGF0ZSwgYW5kIGl0JiMzOTtzICpzZWxlY3RlZCogaW4gdGhlc2UgY2FzZXMsIHNvIEkgZG9uJiMzOTt0IG5lZWQgdG8gZW5hYmxlIGl0IGRpcmVjdGx5LiAgSXQmIzM5O3MganVzdCBhIGRlcGVuZGVuY3k7IGVuYWJsaW5nIGFueSBvZiB0aG9zZSBzaG91bGQgY292ZXIgaXQuICBCdXQgY2FuIEkganVzdCBsaXN0IGBORVRGU19TVVBQT1JUYCBpdHNlbGY/ICBObywgYmVjYXVzZSBpdCYjMzk7cyBhIGhpZGRlbiBjb25maWd1cmF0aW9uIG9wdGlvbiwgbm90IHNvbWV0aGluZyB0aGUgdXNlciBjYW4gZGlyZWN0bHkgaW50ZXJhY3Qgd2l0aC4KClNvLCB0aGUga2V5IGhlcmUgaXMgdG8gZXhwb3NlIHRoZSAqcmVhbCogY29uZmlndXJhdGlvbiBvcHRpb25zOiBJIHNob3VsZCBsaXN0IGBDSUZTYCwgYDlQX0ZTYCwgYEFGU19GU2AsIGFuZCBgQ0VQSF9GU2AuICBUaGF0IGNvdmVycyBhbGwgdGhlIGJhc2VzIGZvciB0aGUgdXNlci4KCk5vdywgbGV0JiMzOTtzIHNlZSBpZiBgbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcWAgYW5kIGBuZXRmc19yZWFkYWhlYWRgIGFyZSB2aWFibGUgZm9jdXMgc3ltYm9scyBmb3IgdGhpcyBhcmVhLiBJdCBtaWdodCBiZSBoZWxwZnVsIHRvIGRpcmVjdCB1c2VycyB0byB0aG9zZSBzeW1ib2xzIHRvIGdhaW4gaW5zaWdodCBpbnRvIHRoZSBpbXBsZW1lbnRhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc19jcmVhdGVfd3JpdGVfcmVxJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jPTIxNT1zc2l6ZV90IG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjM0LVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjM1Olx0d3JlcSA9IG5ldGZzX2NyZWF0ZV93cml0ZV9yZXEoaW9jYi1cdTAwM2VraV9maWxwLVx1MDAzZWZfbWFwcGluZywgaW9jYi1cdTAwM2VraV9maWxwLCBzdGFydCxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIzNi1cdFx0XHRcdCAgICAgIGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfRElSRUNUID9cbi0tXG5mcy9uZXRmcy9pbnRlcm5hbC5oPTE5NT12b2lkIG5ldGZzX3dyaXRlX2NvbGxlY3Rpb25fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4tLVxuZnMvbmV0ZnMvaW50ZXJuYWwuaC0xOTktICovXG5mcy9uZXRmcy9pbnRlcm5hbC5oOjIwMDpzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbmZzL25ldGZzL2ludGVybmFsLmgtMjAxLVx0XHRcdFx0XHRcdHN0cnVjdCBmaWxlICpmaWxlLFxuLS1cbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jPTk3PXN0YXRpYyBzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfcGdwcml2Ml9iZWdpbl9jb3B5X3RvX2NhY2hlKFxuLS1cbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jLTEwNC1cbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jOjEwNTpcdGNyZXEgPSBuZXRmc19jcmVhdGVfd3JpdGVfcmVxKHJyZXEtXHUwMDNlbWFwcGluZywgTlVMTCwgZm9saW9fcG9zKGZvbGlvKSxcbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jLTEwNi1cdFx0XHRcdCAgICAgIE5FVEZTX1BHUFJJVjJfQ09QWV9UT19DQUNIRSk7XG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz00Mz1zdGF0aWMgdm9pZCBuZXRmc19raWxsX2RpcnR5X3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtODktICovXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjkwOnN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19jcmVhdGVfd3JpdGVfcmVxKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy05MS1cdFx0XHRcdFx0XHRzdHJ1Y3QgZmlsZSAqZmlsZSxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTU1MT1pbnQgbmV0ZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTU2Ni1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6NTY3Olx0d3JlcSA9IG5ldGZzX2NyZWF0ZV93cml0ZV9yZXEobWFwcGluZywgTlVMTCwgZm9saW9fcG9zKGZvbGlvKSwgTkVURlNfV1JJVEVCQUNLKTtcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNTY4LVx0aWYgKElTX0VSUih3cmVxKSkge1xuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9NjIyPXN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19iZWdpbl93cml0ZXRocm91Z2goc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgbGVuKVxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjI4LVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo2Mjk6XHR3cmVxID0gbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShpb2NiLVx1MDAzZWtpX2ZpbHAtXHUwMDNlZl9tYXBwaW5nLCBpb2NiLVx1MDAzZWtpX2ZpbHAsXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYzMC1cdFx0XHRcdCAgICAgIGlvY2ItXHUwMDNla2lfcG9zLCBORVRGU19XUklURVRIUk9VR0gpO1xuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9ODQxPWludCBuZXRmc193cml0ZWJhY2tfc2luZ2xlKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtODU5LVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo4NjA6XHR3cmVxID0gbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShtYXBwaW5nLCBOVUxMLCAwLCBORVRGU19XUklURUJBQ0tfU0lOR0xFKTtcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtODYxLVx0aWYgKElTX0VSUih3cmVxKSkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYxMzYKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgYG5ldGZzX2NyZWF0ZV93cml0ZV9yZXFgKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBgbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcWAuIEl0JiMzOTtzIGRlZmluaXRlbHkgbm90IGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gVGhhdCB1c3VhbGx5IG1lYW5zIGl0JiMzOTtzIGludGVuZGVkIHRvIGJlIGNhbGxlZCBmcm9tIG91dHNpZGUgdGhlIG1vZHVsZSwgcmlnaHQ/IEJ1dCB3YWl0IGEgbWludXRl4oCmIGl0JiMzOTtzIGRlZmluZWQgd2l0aGluIHRoZSBuZXRmcyBtb2R1bGUsIHNwZWNpZmljYWxseSBpbiBgZnMvbmV0ZnMvaW50ZXJuYWwuaGAuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSBpbXBsZW1lbnRhdGlvbiBkZXRhaWxzIGFyZSBrZXB0LiBTbywgaWYgaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhlIG5ldGZzIG1vZHVsZSBhbmQgZGVmaW5lZCB3aXRoaW4gdGhlIGludGVybmFsIGhlYWRlciwgdGhhdCB1c3VhbGx5IHN1Z2dlc3RzIGl0IHNob3VsZCBiZSBgc3RhdGljYC4gU29tZXRoaW5nIGZlZWxzIG9mZiBoZXJlLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIGlmIGl0JiMzOTtzIGFjdHVhbGx5IGV4cG9ydGVkIHNvbWV3aGVyZS4gSXMgdGhlcmUgYSBjaGFuY2UgdGhhdCwgZGVzcGl0ZSB0aGUgaW50ZXJuYWwgZGVjbGFyYXRpb24sIHNvbWUgb3RoZXIgcGFydCBvZiB0aGUgc3lzdGVtIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbj8gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBncmFwaCB0byBiZSBzdXJlLiBUaGlzIHdhcnJhbnRzIGZ1cnRoZXIgaW52ZXN0aWdhdGlvbiB0byB1bmRlcnN0YW5kIGl0cyBpbnRlbmRlZCB2aXNpYmlsaXR5IGFuZCBwdXJwb3NlIHdpdGhpbiB0aGUgYnJvYWRlciBzeXN0ZW0uIEl0IGNvdWxkIGJlIGFuIG92ZXJzaWdodCwgb3IgbWF5YmUgdGhlcmUmIzM5O3MgYSBnb29kIHJlYXNvbiBmb3IgdGhpcyBkZXNpZ24gdGhhdCBJIGhhdmVuJiMzOTt0IGdyYXNwZWQgeWV0LiBJIG5lZWQgdG8gZmluZCBvdXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25ldGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY0NzEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgdGhlIFVuZXhwb3J0ZWQsIE5vbi1TdGF0aWMgVGVycml0b3J5KioKCkFscmlnaHQsIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNvbWV0aGluZyYjMzk7cyBjYXRjaGluZyBteSBleWUuIEl0JiMzOTtzIG5vdCBleHBvcnRlZCwgc28gaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhlIG1vZHVsZSwgdGhhdCYjMzk7cyBmaW5lIGZvciBzb21lIHB1cnBvc2VzLiBCdXQgdGhlIGZhY3QgdGhhdCBpdCYjMzk7cyAqbm9uLXN0YXRpYyogaXMgd2hhdCBnaXZlcyBtZSBwYXVzZS4gVGhhdCBpbXBsaWVzIHBvdGVudGlhbCBsaW5rYWdlLCBpbnRlcmFjdGlvbiBhY3Jvc3MgY29tcGlsYXRpb24gdW5pdHMsIGV2ZW4gaWYgaXQmIzM5O3Mgbm90IGRpcmVjdGx5IGV4cG9zZWQgdGhyb3VnaCBhIGhlYWRlci4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLiBJJiMzOTttIHdvbmRlcmluZyB3aGF0IG90aGVyIHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgYXJlIGluIHBsYXkuIEkgYW0gdGhpbmtpbmcsIHdoYXQgYWJvdXQgYG5ldGZzX3JlYWRhaGVhZGA/IFdoYXQgcm9sZSBkb2VzICp0aGF0KiBwbGF5IGluIHRoaXMgbGFuZHNjYXBlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoaXMgY29kZSBhcyB3ZWxsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc19yZWFkYWhlYWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZXRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jPTIwOT1zdGF0aWMgdm9pZCBuZXRmc19yZWFkX3RvX3BhZ2VjYWNoZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSxcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzIxLS8qKlxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jOjMyMjogKiBuZXRmc19yZWFkYWhlYWQgLSBIZWxwZXIgdG8gbWFuYWdlIGEgcmVhZCByZXF1ZXN0XG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzIzLSAqIEByYWN0bDogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSByZWFkYWhlYWQgcmVxdWVzdFxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy0zMzUtICovXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6MzM2OnZvaWQgbmV0ZnNfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwpXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzM3LXtcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzcwLX1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzozNzE6RVhQT1JUX1NZTUJPTChuZXRmc19yZWFkYWhlYWQpO1xuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTM3Mi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjk2MAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkNvbnNpZGVyaW5nIE5ldEZTIE9wdGltaXphdGlvbiBTdHJhdGVnaWVzKioKCk9rYXksIHNvIGBuZXRmc19yZWFkYWhlYWRgIGlzIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlIGV4cG9zZSwgaXQmIzM5O3MgYSBrbm93biBxdWFudGl0eS4gQnV0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSB3cml0ZSBzaWRlIG9mIHRoaW5ncy4gV2UmIzM5O3JlIG9wdGltaXppbmcgZm9yIG5ldHdvcmsgZmlsZSBzeXN0ZW1zLCBhbmQgaXQgbWFrZXMgbWUgd29uZGVyOiB3aGF0JiMzOTtzIHRoZSBzdGF0dXMgb24gYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgPyBJcyBpdCBhbHNvIGV4cG9ydGVkPyBUaGlzIGlzIGEga2V5IGFyZWEgZm9yIHBlcmZvcm1hbmNlLiBJcyBpdCBpbXBsZW1lbnRlZCBmb3IgdGhlIG5ldHdvcmsgZmlsZSBzeXN0ZW1zIGJlaW5nIGNvbnNpZGVyZWQgYW5kIGlmIHNvLCBpcyB0aGVyZSBhIGdvb2QgcmVhc29uIGZvciB0aGlzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVzaWduIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBmaWxlIEkvTyBsYXllci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlIG9uIHRoaXMgZnVuY3Rpb24gYW5kIGhvdyB3ZSYjMzk7cmUgbGV2ZXJhZ2luZyBpdCwgb3IgaWYgd2UgYXJlIGV2ZW4gbGV2ZXJhZ2luZyBpdCwgc28gSSBjYW4gc3RhcnQgdGhpbmtpbmcgYWJvdXQgaG93IHRvIGJlc3Qgb3B0aW1pemUgdGhlIGZsb3cgb2YgZGF0YS4gV2hhdCBhcmUgdGhlIHRyYWRlLW9mZnMgaW52b2x2ZWQgaW4gYnVmZmVyaW5nIHZlcnN1cyBub3QgYnVmZmVyaW5nLCBhbmQgaG93IGRvZXMgdGhhdCBpbmZsdWVuY2UgdGhyb3VnaHB1dCBhbmQgbGF0ZW5jeSBpbiBvdXIgc3BlY2lmaWMgbmV0d29yayBjb250ZXh0PwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25ldGZzL2RpcmVjdF93cml0ZS5jPTIwMz1zdGF0aWMgdm9pZCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2FzeW5jKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTQtICovXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoyMTU6c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMjE2LVx0XHRcdFx0XHRcdCAgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cClcbi0tXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMDctfVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MzA4OkVYUE9SVF9TWU1CT0wobmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMDktXG4tLVxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM9MzIzPXNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tKVxuLS1cbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4MS1cdFx0XHQgICBGU0NBQ0hFX0lOVkFMX0RJT19XUklURSk7XG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozODI6XHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKGlvY2IsIGZyb20sIE5VTEwpO1xuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzgzLW91dDpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzU3NwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE5ldEZTIFdyaXRlIE9wZXJhdGlvbnMqKgoKQWxyaWdodCwgbGV0JiMzOTtzIHNlZS4uLiBzbyBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZGAgaXMgYmVpbmcgZXhwbGljaXRseSBleHBvcnRlZC4gSG1tLCB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJdCBzdWdnZXN0cyBhIHBhcnRpY3VsYXIgd2F5IG9mIGhhbmRsaW5nIHVuYnVmZmVyZWQgd3JpdGVzIHdpdGhpbiB0aGUgTmV0RlMgZmlsZSBzeXN0ZW0uIEEgZm9jdXMgb24gaXRlcmF0b3JzIGFuZCBsb2NraW5nIGltcGxpZXMgc29tZSBjb25zaWRlcmF0aW9ucyBmb3IgY29uY3VycmVuY3kgYW5kIGRhdGEgZmxvdy4gSXQgcHJvYmFibHkgaGFuZGxlcyB0aGUgY29yZSBsb2dpYyBmb3Igd3JpdGluZyBkaXJlY3RseSB0byB0aGUgdW5kZXJseWluZyBzdG9yYWdlIHdpdGhvdXQgaW50ZXJtZWRpYXRlIGJ1ZmZlcmluZywgb3IgYXQgbGVhc3QgcHJvdmlkZXMgYWNjZXNzIHRvIGEgc3BlY2lmaWMgcGF0aCB0byBkbyBzby4KCkJ1dCB3aGF0IGFib3V0IGl0cyBjb3VudGVycGFydCwgYG5ldGZzX3dyaXRlcGFnZXNgPyBUaGF0JiMzOTtzIHRoZSBrZXkgcXVlc3Rpb24sIGlzbiYjMzk7dCBpdD8gSXMgaXQgYWxzbyBleHBvcnRlZD8gQW5kIGlmIHNvLCBob3cgZG8gdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdD8gT3IgZG9lcyBpdCBtZWFuIGl0JiMzOTtzIGFuIGludGVybmFsIGZ1bmN0aW9uPyBPciwgYXJlIHRoZXkgdXNlZCBpbiBjb21wbGVtZW50YXJ5IHdheXM/IGBuZXRmc193cml0ZXBhZ2VzYCBoYW5kbGVzIHRoZSBwYWdlLWJhc2VkIHdyaXRpbmcsIHR5cGljYWxseSBmb3IgYnVmZmVyZWQgSS9PLCBhbGxvd2luZyB0aGUgZmlsZSBzeXN0ZW0gdG8gb3B0aW1pemUgd3JpdGUgb3BlcmF0aW9ucyBmb3IgcGVyZm9ybWFuY2UsIHNvIGlmIGJvdGggYXJlIGV4cG9ydGVkLCBob3cgaXMgdGhlIGNob2ljZSBtYWRlIGJldHdlZW4gdW5idWZmZXJlZCB3cml0ZXMsIGFuZCBwYWdlLWJhc2VkIHdyaXRlcz8gVGhpcyBpcyB3aGVyZSB0aGUgaW50cmljYWNpZXMgb2YgTmV0RlMmIzM5O3MgZGVzaWduIGZvciBidWZmZXJpbmcgYW5kIGRpcmVjdCBJL08gYmVjb21lIGNsZWFyLiBNeSBmb2N1cyB3aWxsIGJlIGhlcmUgdG8gZGV0ZXJtaW5lIGhvdyB3cml0ZSBzdHJhdGVnaWVzIGFyZSBtYWRlLiBIb3cgZG9lcyB0aGUgYXJjaGl0ZWN0dXJlIG9mIHRoZXNlIHR3byBmdW5jdGlvbnMgaW5mbHVlbmNlIHRoZSBwZXJmb3JtYW5jZSBhbmQgdGhlIGJlaGF2aW91ciBvZiB0aGUgd2hvbGUgc3lzdGVtPyBJdCYjMzk7cyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCB3cml0ZSBwYXRoLCBob3cgZGF0YSBtb3ZlcyBmcm9tIHRoZSBhcHBsaWNhdGlvbiwgdGhyb3VnaCB0aGUgVkZTIGxheWVyLCBpbnRvIHRoZSBOZXRGUywgYW5kIGV2ZW50dWFsbHkgdG8gdGhlIG5ldHdvcmsgb3Igc3RvcmFnZS4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0mIzM5O3Mgd3JpdGUgbWVjaGFuaXNtcyBhcmUgaW1wbGVtZW50ZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc193cml0ZXBhZ2VzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25ldGZzL3dyaXRlX2lzc3VlLmM9NTI3PXN0YXRpYyB2b2lkIG5ldGZzX2VuZF9pc3N1ZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSlcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTU1MC0gKi9cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6NTUxOmludCBuZXRmc193cml0ZXBhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy01NTItXHRcdCAgICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMpXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy02MTYtfVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo2MTc6RVhQT1JUX1NZTUJPTChuZXRmc193cml0ZXBhZ2VzKTtcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNjE4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTc0CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQ29uc2lkZXJpbmcgTmV0RlMgV3JpdGUgT3BlcmF0aW9ucyoqCgpPa2F5LCBzbyBgbmV0ZnNfd3JpdGVwYWdlc2AgaXMgZXhwb3J0ZWQsIHRoYXQgbXVjaCBJIGtub3cuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGluIGdldHRpbmcgZGF0YSBvbnRvIHRoZSBuZXR3b3JrIGZpbGUgc3lzdGVtLiBCdXQsIGFuZCBoZXJlJiMzOTtzIHRoZSBjcnVjaWFsIHF1ZXN0aW9uIHRoYXQmIzM5O3MgbmFnZ2luZyBhdCBtZSwgd2hhdCYjMzk7cyB0aGUgZGVhbCB3aXRoIGBuZXRmc19iZWdpbl93cml0ZXRocm91Z2hgPyBJdCYjMzk7cyByZWxhdGVkLCBvYnZpb3VzbHksIGJ1dCB3aGF0JiMzOTtzIGl0cyBzcGVjaWZpYyByb2xlIGluIHRoZSBwcm9jZXNzPyBJcyBpdCBoYW5kbGluZyB0aGUgaW5pdGlhbCBzZXR1cCBmb3IgYSB3cml0ZXRocm91Z2ggb3BlcmF0aW9uLCBjb29yZGluYXRpbmcgdGhlIG1ldGFkYXRhIHVwZGF0ZXM/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmZhY2VzIHdpdGggYG5ldGZzX3dyaXRlcGFnZXNgIHRvIGVuc3VyZSB0aGUgd2hvbGUgd3JpdGUgcGF0aCBpcyByb2J1c3QgYW5kIG9wdGltaXplZC4gSXQmIzM5O3MgdGhhdCBzdWJ0bGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlbSB0aGF0IG9mdGVuIHJldmVhbHMgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4gSSByZWFsbHkgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIHNlbWFudGljcyBvZiB0aGF0IGZ1bmN0aW9uIGNhbGwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGZzX2JlZ2luX3dyaXRldGhyb3VnaCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25ldGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTg3PXNzaXplX3QgbmV0ZnNfcGVyZm9ybV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTExOC1cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6MTE5Olx0XHR3cmVxID0gbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoKGlvY2IsIGl0ZXItXHUwMDNlY291bnQpO1xuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy0xMjAtXHRcdGlmIChJU19FUlIod3JlcSkpIHtcbi0tXG5mcy9uZXRmcy9pbnRlcm5hbC5oPTIxMj1zaXplX3QgbmV0ZnNfYWR2YW5jZV93cml0ZShzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcbi0tXG5mcy9uZXRmcy9pbnRlcm5hbC5oLTIxNC1cdFx0XHQgICBsb2ZmX3Qgc3RhcnQsIHNpemVfdCBsZW4sIGJvb2wgdG9fZW9mKTtcbmZzL25ldGZzL2ludGVybmFsLmg6MjE1OnN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19iZWdpbl93cml0ZXRocm91Z2goc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgbGVuKTtcbmZzL25ldGZzL2ludGVybmFsLmgtMjE2LWludCBuZXRmc19hZHZhbmNlX3dyaXRldGhyb3VnaChzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSwgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz02MTc9RVhQT1JUX1NZTUJPTChuZXRmc193cml0ZXBhZ2VzKTtcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYyMS0gKi9cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6NjIyOnN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19iZWdpbl93cml0ZXRocm91Z2goc3RydWN0IGtpb2NiICppb2NiLCBzaXplX3QgbGVuKVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy02MjMte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMToxODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODExCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBhIGZpbGVzeXN0ZW1zIGltcGxlbWVudGF0aW9uOgoKKipEaWdnaW5nIGludG8gdGhlIEZpbGVzeXN0ZW0gSW50ZXJuYWxzKioKCkFscmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBuZXRmc19wZXJmb3JtX3dyaXRlYCBmdW5jdGlvbiwgd2hpY2ggaXMsIGltcG9ydGFudGx5LCAqZXhwb3J0ZWQqLiBJdCYjMzk7cyBjbGVhcmx5IGEga2V5IHBhcnQgb2YgaG93IHRoaXMgbmV0d29yayBmaWxlc3lzdGVtIGhhbmRsZXMgd3JpdGVzLiBCdXQgdGhlbiBJIHNlZSB0aGF0IGBuZXRmc19iZWdpbl93cml0ZXRocm91Z2hgIGlzIGJlaW5nIGNhbGxlZCB3aXRoaW4gaXQuIEhtbSwgdGhhdCYjMzk7cyBpbnRlcmVzdGluZyBiZWNhdXNlIGBuZXRmc19iZWdpbl93cml0ZXRocm91Z2hgIGlzICpub3QqIGV4cG9ydGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBpbm5lciBmdW5jdGlvbiBpc24mIzM5O3QgZXhwb3NlZCBhbmQgd2hhdCByZWxhdGlvbnNoaXAgaXQgaGFzIHdpdGggdGhlIGV4cG9ydGVkIGBuZXRmc19wZXJmb3JtX3dyaXRlYC4gSXMgYG5ldGZzX2JlZ2luX3dyaXRldGhyb3VnaGAgYW4gaW50ZXJuYWwgaGVscGVyIGZ1bmN0aW9uIHRoYXQmIzM5O3MgYmVpbmcgY2FyZWZ1bGx5IG1hbmFnZWQsIG9yIGlzIHRoaXMgYSBwb3RlbnRpYWwgdmlvbGF0aW9uIG9mIHNvbWUgbGF5ZXJpbmcgcHJpbmNpcGxlPyBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgc2lnbmlmaWNhbmNlIG9mIHRoaXMgbm9uLWV4cG9ydGVkIGZ1bmN0aW9uIHRvIHVuZGVyc3RhbmQgdGhpcyBhcmNoaXRlY3R1cmUgZnVsbHkuIEkgbmVlZCB0byBkZXRlcm1pbmUgaWYgaXQgaXMgZGVsaWJlcmF0ZWx5IGhpZGRlbiwgYW5kIGlmIHNvLCB0aGUgcmF0aW9uYWxlLiBUaGlzIGNvdWxkIHBvaW50IHRvIGEgcHJvdGVjdGVkIGNyaXRpY2FsIHNlY3Rpb24gb3IgYW4gb3B0aW1pemF0aW9uIHRoYXQmIzM5O3MgdG9vIHNwZWNpZmljIHRvIGV4cG9zZSBkaXJlY3RseSB0byB0aGUgZmlsZXN5c3RlbSBjbGllbnRzLiBOb3cgSSBuZWVkIHRvIGV4cGxvcmUgd2hhdCB0aGF0IGBuZXRmc19iZWdpbl93cml0ZXRocm91Z2hgIGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKiB0byBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgbGFyZ2VyIHdyaXRlIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGZzX3BlcmZvcm1fd3JpdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZXRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jPTU2MT1zdGF0aWMgYm9vbCBuZXRmc19za2lwX2ZvbGlvX3JlYWQoc3RydWN0IGZvbGlvICpmb2xpbywgbG9mZl90IHBvcywgc2l6ZV90IGxlbixcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNjI0LSAqXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6NjI1OiAqIE5vdGUgdGhhdCB0aGlzIHNob3VsZCBiZSBjb25zaWRlcmVkIGRlcHJlY2F0ZWQgYW5kIG5ldGZzX3BlcmZvcm1fd3JpdGUoKVxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTYyNi0gKiB1c2VkIGluc3RlYWQuXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz0zNz12b2lkIG5ldGZzX3VwZGF0ZV9pX3NpemUoc3RydWN0IG5ldGZzX2lub2RlICpjdHgsIHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy03My0vKipcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NzQ6ICogbmV0ZnNfcGVyZm9ybV93cml0ZSAtIENvcHkgZGF0YSBpbnRvIHRoZSBwYWdlY2FjaGUuXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTc1LSAqIEBpb2NiOiBUaGUgb3BlcmF0aW9uIHBhcmFtZXRlcnNcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTg2LSAqL1xuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo4Nzpzc2l6ZV90IG5ldGZzX3BlcmZvcm1fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTg4LVx0XHRcdCAgICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKVxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNDQyLX1cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NDQzOkVYUE9SVF9TWU1CT0wobmV0ZnNfcGVyZm9ybV93cml0ZSk7XG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ0NC1cbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTQ2OD1zc2l6ZV90IG5ldGZzX2J1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICpmcm9tLFxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNDgzLVxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo0ODQ6XHRyZXR1cm4gbmV0ZnNfcGVyZm9ybV93cml0ZShpb2NiLCBmcm9tLCBuZXRmc19ncm91cCk7XG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ4NS19XG4tLVxuZnMvbmV0ZnMvcmVhZF9wZ3ByaXYyLmM9MTk9c3RhdGljIHZvaWQgbmV0ZnNfcGdwcml2Ml9jb3B5X2ZvbGlvKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpjcmVxLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jLTI3LVxuZnMvbmV0ZnMvcmVhZF9wZ3ByaXYyLmM6Mjg6XHQvKiBuZXRmc19wZXJmb3JtX3dyaXRlKCkgbWF5IHNoaWZ0IGlfc2l6ZSBhcm91bmQgdGhlIHBhZ2Ugb3IgZnJvbSBvdXRcbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jLTI5LVx0ICogb2YgdGhlIHBhZ2UgdG8gYmV5b25kIGl0LCBidXQgY2Fubm90IG1vdmUgaV9zaXplIGludG8gb3IgdGhyb3VnaCB0aGVcbi0tXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTMyNT1zdGF0aWMgaW50IG5ldGZzX3dyaXRlX2ZvbGlvKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMzQ0LVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzozNDU6XHQvKiBuZXRmc19wZXJmb3JtX3dyaXRlKCkgbWF5IHNoaWZ0IGlfc2l6ZSBhcm91bmQgdGhlIHBhZ2Ugb3IgZnJvbSBvdXRcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMzQ2LVx0ICogb2YgdGhlIHBhZ2UgdG8gYmV5b25kIGl0LCBidXQgY2Fubm90IG1vdmUgaV9zaXplIGludG8gb3IgdGhyb3VnaCB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkyNQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqS2VybmVsIFdyaXRlIFBhdGggSW52ZXN0aWdhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIHNvIGBuZXRmc19wZXJmb3JtX3dyaXRlYCBpcyBkZWZpbml0ZWx5IGFuIGV4cG9ydGVkIHN5bWJvbC4gVGhhdCYjMzk7cyBnb29kLCB0aGF0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIEkmIzM5O2xsIGxpa2VseSBuZWVkIHRvIHRyYWNlLiBOb3csIHdoYXQgYWJvdXQgdGhlIHdyaXRlYmFjayBmdW5jdGlvbnM/IEkga25vdyBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAgaXMgdXNlZCBpbnRlcm5hbGx5LCBJIG5lZWQgdG8gY2hlY2sgaWYgdGhhdCYjMzk7cyBhbHNvIGV4cG9ydGVkLiBJJiMzOTtsbCBuZWVkIHRvIGtub3cgd2hldGhlciBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBBUEkuIE15IGZvY3VzIGlzIG9uIHVuZGVyc3RhbmRpbmcgdGhlIG5ldHdvcmsgZmlsZXN5c3RlbSYjMzk7cyB3cml0ZSBwYXRoLCBzbyB0cmFjaW5nIHRoZXNlIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSBtYWluIHdyaXRlIGZ1bmN0aW9uIGFuZCB0aGUgd3JpdGViYWNrIGZ1bmN0aW9ucyBpcyBnb2luZyB0byBiZSBpbXBvcnRhbnQgdG8gZmluZCB0aGUgYm90dGxlbmVja3MsIGFuZCBzZWUgaG93IHRoaXMgaXMgYWxsIGJlaW5nIGhhbmRsZWQgaW4gdGhlIHN0YWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMToxODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtuZXRmc193cml0ZWJhY2tfc2luZ2xlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25ldGZzL3dyaXRlX2lzc3VlLmM9NzE5PXN0YXRpYyBpbnQgbmV0ZnNfd3JpdGVfZm9saW9fc2luZ2xlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtODI5LS8qKlxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo4MzA6ICogbmV0ZnNfd3JpdGViYWNrX3NpbmdsZSAtIFdyaXRlIGJhY2sgYSBtb25vbGl0aGljIHBheWxvYWRcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtODMxLSAqIEBtYXBwaW5nOiBUaGUgbWFwcGluZyB0byB3cml0ZSBmcm9tXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy04NDAtICovXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjg0MTppbnQgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtODQyLVx0XHRcdCAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjLFxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtOTA1LX1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6OTA2OkVYUE9SVF9TWU1CT0wobmV0ZnNfd3JpdGViYWNrX3NpbmdsZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwNDAyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogOTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhpcyBjb2RlIHNuaXBwZXQ6CgoqKkZvY3VzaW5nIG9uIE5ldHdvcmsgRmlsZXN5c3RlbSBXcml0ZSBPcGVyYXRpb25zKioKCk9rYXksIHNvIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYCBpcyBhbiBleHBvcnRlZCBzeW1ib2wsIG1lYW5pbmcgaXQmIzM5O3MgYSBrZXkgZnVuY3Rpb24gaW4gdGhlIG5ldHdvcmsgZmlsZXN5c3RlbSBtb2R1bGUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByb2xlLiBCYXNlZCBvbiB0aGF0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBtb3N0IHJlbGV2YW50IGZ1bmN0aW9ucyB0aGF0IGxpa2VseSB3b3JrIHdpdGggaXQsIGVpdGhlciBjYWxsaW5nIGl0LCBvciBiZWluZyBjYWxsZWQgYnkgaXQuIEkgaW1tZWRpYXRlbHkgc3RhcnQgbWVudGFsbHkgY2lyY2xpbmcgc29tZSBrZXkgc3VzcGVjdHMuIEkgc3VzcGVjdCB0aGUga2V5IGZ1bmN0aW9ucyBtdXN0IGJlIHJlbGF0ZWQgdG8gcmVhZHMgYW5kIHdyaXRlcywgYW5kIEkgc3VzcGVjdCB0aGVzZSBtaWdodCBiZSB0aGUga2V5OiBgbmV0ZnNfcmVhZGFoZWFkYCwgYG5ldGZzX3dyaXRlcGFnZXNgLCB0aGUgb25lIGluIHF1ZXN0aW9uIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYCwgYG5ldGZzX3BlcmZvcm1fd3JpdGVgLCBhbmQgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgLiBUaGVzZSBzZWVtIGxpa2UgdGhlIGNvcmUgb3BlcmF0aW9ucyBmb3IgaGFuZGxpbmcgZGF0YSBmbG93LiBOb3csIEkgd2FudCB0byB0cmFjZSBob3cgZGF0YSBpcyBtYW5hZ2VkLCBzbyBJJiMzOTtsbCBuZXh0IGxvb2sgYXQgdGhlIGNhbGxlcnMgb2YgYG5ldGZzX2NyZWF0ZV9zaW5ndWxhcl9idWZmZXJgLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGEgc2luZ3VsYXIgYnVmZmVyIGlzIGNyZWF0ZWQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHdyaXRpbmcgZGF0YS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTE6MTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bmV0ZnNfY3JlYXRlX3Npbmd1bGFyX2J1ZmZlciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25ldGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9MzcxPUVYUE9SVF9TWU1CT0wobmV0ZnNfcmVhZGFoZWFkKTtcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzc1LSAqL1xuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jOjM3NjpzdGF0aWMgaW50IG5ldGZzX2NyZWF0ZV9zaW5ndWxhcl9idWZmZXIoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKnJyZXEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzc3LVx0XHRcdFx0XHR1bnNpZ25lZCBpbnQgcm9sbGJ1Zl9mbGFncylcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9NDk5PWludCBuZXRmc19yZWFkX2ZvbGlvKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy01MjgtXHQvKiBTZXQgdXAgdGhlIG91dHB1dCBidWZmZXIgKi9cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo1Mjk6XHRyZXQgPSBuZXRmc19jcmVhdGVfc2luZ3VsYXJfYnVmZmVyKHJyZXEsIGZvbGlvLCAwKTtcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy01MzAtXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYz02Mjg9aW50IG5ldGZzX3dyaXRlX2JlZ2luKHN0cnVjdCBuZXRmc19pbm9kZSAqY3R4LFxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy02ODUtXHQvKiBTZXQgdXAgdGhlIG91dHB1dCBidWZmZXIgKi9cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo2ODY6XHRyZXQgPSBuZXRmc19jcmVhdGVfc2luZ3VsYXJfYnVmZmVyKHJyZXEsIGZvbGlvLCAwKTtcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy02ODctXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYz03MjA9aW50IG5ldGZzX3ByZWZldGNoX2Zvcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNzUwLVx0LyogU2V0IHVwIHRoZSBvdXRwdXQgYnVmZmVyICovXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6NzUxOlx0cmV0ID0gbmV0ZnNfY3JlYXRlX3Npbmd1bGFyX2J1ZmZlcihycmVxLCBmb2xpbywgTkVURlNfUk9MTEJVRl9QQUdFQ0FDSEVfTUFSSyk7XG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNzUyLVx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTE6MTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEyNTcKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAzNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKktlcm5lbCBORlMgQ29uc2lkZXJhdGlvbnMqKgoKUmlnaHQsIHNvIEkmIzM5O20gc2VlaW5nIGBuZXRmc19yZWFkX2ZvbGlvYCwgYG5ldGZzX3dyaXRlX2JlZ2luYCwgYW5kIGBuZXRmc19wcmVmZXRjaF9mb3Jfd3JpdGVgLiBBbmQgdGhlIGltbWVkaWF0ZSB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSBpcyB0aGF0IHRoZXNlIGFyZSAqZXhwb3J0ZWQqIG9yIHVzZWQgYnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zLiBUaGF0JiMzOTtzIGEgY3JpdGljYWwgZGV0YWlsLiBUaGlzIG1lYW5zIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggaW50ZXJmYWNlcyB0aGF0IGFyZSBleHBvc2VkIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwsIG9yIHBvdGVudGlhbGx5IGV2ZW4gdG8gZXh0ZXJuYWwgbW9kdWxlcy4KCk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBFeHBvcnRlZCBmdW5jdGlvbnMgbWVhbiBzdGFiaWxpdHkgY29uc3RyYWludHMg4oCTIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYmVjb21lcyBwYXJhbW91bnQuIENoYW5naW5nIHRoZWlyIHNpZ25hdHVyZXMsIGJlaGF2aW9yLCBvciBldmVuIHN1YnRsZSBpbnRlcm5hbCB3b3JraW5ncyBjb3VsZCBicmVhayBhIHJhZnQgb2YgZGVwZW5kZW50IG1vZHVsZXMuIEkmIzM5O2QgYmUgZXNwZWNpYWxseSB3YXJ5IG9mIGFueSBtb2RpZmljYXRpb25zIHRoYXQgY291bGQgaW50cm9kdWNlIHN1YnRsZSByYWNlIGNvbmRpdGlvbnMgb3IgbWVtb3J5IGNvcnJ1cHRpb24gYnVncywgYXMgdGhlc2UgYXJlIG5vdG9yaW91c2x5IGRpZmZpY3VsdCB0byB0cmFjayBkb3duIGluIGEgbmV0d29ya2VkIGZpbGVzeXN0ZW0gY29udGV4dC4gV2UgcmVhbGx5IGhhdmUgdG8gZW5zdXJlIHRoZXNlIHJlbWFpbiByb2NrLXNvbGlkLgoKSSYjMzk7bSBhc3N1bWluZyB0aGVzZSBhcmUgbG93IGxldmVsIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIE5GUyBjbGllbnQgaW1wbGVtZW50YXRpb24uIExvb2tpbmcgYXQgdGhlIGZ1bmN0aW9uIG5hbWVzLCB0aGV5IGxpa2VseSBhcmUgaW52b2x2ZWQgaW4gdGhlIHByb2Nlc3Mgb2YgcmVhZGluZyBhbmQgd3JpdGluZyBkYXRhLCBhbmQsIHRoZSBwcmVmZXRjaCBmdW5jdGlvbiwgd2hpY2ggaXMgb2Z0ZW4gdXNlZCB0byBvcHRpbWl6ZSB0aGUgcHJvY2VzcyBvZiByZWFkaW5nIGRhdGEgYW5kIHdyaXRpbmcgZGF0YSBmcm9tIHRoZSBuZXQuClRoZSBwcmVmZXRjaCBmdW5jdGlvbiBzZWVtcyBpbnRlcmVzdGluZyBhcyB0aGlzIGlzIGEgZ29vZCBwbGFjZSB0byBsb29rIGF0IHRoZSBwcm9jZXNzIG9mIGNhY2hpbmcgYW5kIGhvdyB3ZWxsIHRoZSBORlMgY2xpZW50IHBlcmZvcm1zLgpJIG5lZWQgdG8ga25vdyBwcmVjaXNlbHkgaG93IHRoZXNlIGZ1bmN0aW9ucyBhcmUgYmVpbmcgdXNlZCBieSBvdGhlciBrZXJuZWwgc3Vic3lzdGVtcy4gSSBuZWVkIHRvIGtub3cgdGhlIGNhbGxpbmcgY29udGV4dHMsIHRoZSBhcmd1bWVudHMgcGFzc2VkLCB0aGUgZXhwZWN0ZWQgcmV0dXJuIHZhbHVlcywgYW5kIGFueSBzaWRlIGVmZmVjdHMuIFdpdGhvdXQgdGhhdCBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcsIGFueSByZWZhY3RvcmluZyBvciBvcHRpbWl6YXRpb24gY2FycmllcyBhIHNpZ25pZmljYW50IHJpc2suIE15IGZpcnN0IHN0ZXAgd291bGQgYmUgdG8gcmV2aWV3IHRoZSByZWxldmFudCBrZXJuZWwgaGVhZGVycywgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uLCBhbmQgYW55IGNyb3NzLXJlZmVyZW5jZXMgdG8gdGhlc2Ugc3ltYm9scy4gSSYjMzk7ZCBhbHNvIHByb2JhYmx5IGxvb2sgYXQgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgYW5kIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJhY3Qgd2l0aCB0aGUgVkZTIGxheWVyLgoKVWx0aW1hdGVseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgKmNvbnRyYWN0KiB0aGVzZSBmdW5jdGlvbnMgYXJlIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBwcm9taXNpbmcgdG8gdGhlaXIgdXNlcnMgYmVmb3JlIEkgY2FuIGV2ZW4gY29uc2lkZXIgdG91Y2hpbmcgdGhlbS4gU3RhYmlsaXR5IGlzIHRoZSBuYW1lIG9mIHRoZSBnYW1lIGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGZzX3JlYWRfZm9saW8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy9uZXRmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jPTM5ND1zdGF0aWMgaW50IG5ldGZzX3JlYWRfZ2FwcyhzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNDg1LS8qKlxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jOjQ4NjogKiBuZXRmc19yZWFkX2ZvbGlvIC0gSGVscGVyIHRvIG1hbmFnZSBhIHJlYWRfZm9saW8gcmVxdWVzdFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTQ4Ny0gKiBAZmlsZTogVGhlIGZpbGUgdG8gcmVhZCBmcm9tXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTQ5OC0gKi9cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo0OTk6aW50IG5ldGZzX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNTAwLXtcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNTQzLX1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo1NDQ6RVhQT1JUX1NZTUJPTChuZXRmc19yZWFkX2ZvbGlvKTtcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy01NDUtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMDA5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLgoKKipQb3RlbnRpYWwgTmV0RlMgUGVyZm9ybWFuY2UgQm90dGxlbmVja3MqKgoKUmlnaHQsIHNvIGBuZXRmc19yZWFkX2ZvbGlvYCBpcyBleHBvcnRlZCwgdGhhdCYjMzk7cyB0aGUgc3RhcnRpbmcgcG9pbnQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhlIG1ham9yIGZvY3VzIHN5bWJvbHMgYXJlLiBCYXNlZCBvbiBteSBleHBlcmllbmNlLCBhbmQgdGhlIGNvbnRleHQsIGl0IGxvb2tzIGxpa2UgdGhlc2UgYXJlIHRoZSBsaWtlbHkgc3VzcGVjdHMsIHRoZSBvbmVzIHRoYXQgY291bGQgYmUgaG9sZGluZyB0aGluZ3MgdXA6CgoqICAgYG5ldGZzX3JlYWRhaGVhZGAKKiAgIGBuZXRmc19yZWFkX2ZvbGlvYAoqICAgYG5ldGZzX3dyaXRlcGFnZXNgCiogICBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAKKiAgIGBuZXRmc19wZXJmb3JtX3dyaXRlYAoqICAgYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgCiogICBgbmV0ZnNfd3JpdGVfYmVnaW5gCiogICBgbmV0ZnNfcHJlZmV0Y2hfZm9yX3dyaXRlYAoKR2l2ZW4gdGhlIGxpa2VseSBvcGVyYXRpb25zLCBhbmQgYmFzZWQgb24gZ3V0IGZlZWxpbmcsIEkgdGhpbmsgSSYjMzk7bGwgc3RhcnQgYnkgdGFraW5nIGEgY2xvc2VyIGxvb2sgYXQgYG5ldGZzX3dyaXRlX2JlZ2luYCBhbmQgYG5ldGZzX3ByZWZldGNoX2Zvcl93cml0ZWAuIFRoZXkgbG9vayBsaWtlIGdvb2QgY2FuZGlkYXRlcyB0byBzdGFydCB0aGUgZGVlcGVyIGludmVzdGlnYXRpb24uIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgaW4gdGhvc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGZzX3dyaXRlX2JlZ2luJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYz01NjE9c3RhdGljIGJvb2wgbmV0ZnNfc2tpcF9mb2xpb19yZWFkKHN0cnVjdCBmb2xpbyAqZm9saW8sIGxvZmZfdCBwb3MsIHNpemVfdCBsZW4sXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTU5NS0vKipcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo1OTY6ICogbmV0ZnNfd3JpdGVfYmVnaW4gLSBIZWxwZXIgdG8gcHJlcGFyZSBmb3Igd3JpdGluZyBbREVQUkVDQVRFRF1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy01OTctICogQGN0eDogVGhlIG5ldGZzIGNvbnRleHRcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNjI3LSAqL1xuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jOjYyODppbnQgbmV0ZnNfd3JpdGVfYmVnaW4oc3RydWN0IG5ldGZzX2lub2RlICpjdHgsXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNjI5LVx0XHQgICAgICBzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTcxNC19XG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6NzE1OkVYUE9SVF9TWU1CT0wobmV0ZnNfd3JpdGVfYmVnaW4pO1xuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTcxNi1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTE6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTI2ODIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAxMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0OgoKKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgYG5ldGZzX3dyaXRlX2JlZ2luYCoqCgpBbHJpZ2h0LCBzbyBgbmV0ZnNfd3JpdGVfYmVnaW5gIGlzIGJlaW5nIGV4cG9ydGVkLiBIbW0sIHRoYXQgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBFeHBvcnRlZCBtZWFucyBpdCYjMzk7cyBwYXJ0IG9mIHRoZSBBUEksIG9yIGF0IGxlYXN0IHZpc2libGUgYW5kIGFjY2Vzc2libGUgdG8gb3RoZXIgcGFydHMgb2YgdGhlIHN5c3RlbSDigJMgcG90ZW50aWFsbHkgb3RoZXIga2VybmVsIG1vZHVsZXMsIG9yIGV2ZW4gdXNlcnNwYWNlLCBkZXBlbmRpbmcgb24gdGhlIGNvbnRleHQuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyBtb3JlIGFib3V0IHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQsIGFuZCB3aGF0IGl0cyBjYWxsaW5nIGNvbnZlbnRpb25zIGFyZSwgdG8gdW5kZXJzdGFuZCB0aGUgc2lnbmlmaWNhbmNlLiBBIGZ1bmN0aW9uIG5hbWUgd2l0aCAmIzM0O3dyaXRlX2JlZ2luJiMzNDsgaW4gaXQgc3VnZ2VzdHMgc29tZSBzb3J0IG9mIGluaXRpYWxpemF0aW9uIG9yIHNldHVwIHBoYXNlIGZvciBhIHdyaXRlIG9wZXJhdGlvbiB3aXRoaW4gdGhlIG5ldHdvcmsgZmlsZXN5c3RlbSAobmV0ZnMpLiBUaGF0IGlzIGludGVyZXN0aW5nLCBzbyBJJiMzOTtsbCBjb25zaWRlciBob3cgdGhpcyB0aWVzIGludG8gdGhlIG5ldHdvcmsgZmlsZSBzeXN0ZW0gYXMgYSB3aG9sZS4gSSBpbW1lZGlhdGVseSBzdGFydCBhc2tpbmcgcXVlc3Rpb25zOiBXaGF0IHR5cGVzIG9mIHdyaXRlIG9wZXJhdGlvbnMgZG9lcyBpdCBzdXBwb3J0PyBXaGF0IGtpbmQgb2YgbG9ja2luZyBpcyBpbnZvbHZlZCwgaWYgYW55PyBJcyB0aGlzIHJlbGF0ZWQgdG8gYSBzcGVjaWZpYyBwcm90b2NvbCBsaWtlIE5GUywgU01CLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQ291bGQgaXQgYmUgaW52b2x2ZWQgaW4gYW55IHNlY3VyaXR5IGNvbnRleHRzIG9yIHBlcm1pc3Npb25zIGNoZWNrcywgc3VjaCBhcyB3aGVuIHJlYWRpbmcgb3Igd3JpdGluZyBhIGZpbGU/CgpUaGlzIG5lZWRzIHRvIGJlIHVuZGVyc3Rvb2QgaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5ldGZzIGRlc2lnbi4gSXMgaXQgYSBjb3JlIGZ1bmN0aW9uLCBvciBpcyBpdCBwYXJ0IG9mIGEgbGF5ZXIgdGhhdCBwcm92aWRlcyBhZGRpdGlvbmFsIGZlYXR1cmVzPyBJIHdvdWxkIGJlIGludHJpZ3VlZCB0byBrbm93LCBjb25zaWRlcmluZyBuZXR3b3JrIGZpbGVzeXN0ZW1zIGFyZSBub3Qgc2ltcGxlLCBhdCBhbGwuIFdoYXQgaXMgdGhlIHNjb3BlPyBXaHkgaXMgaXQgZXhwb3J0ZWQ/IEFuZCwgd2hhdCB3aWxsIGNvbWUgYWZ0ZXI/CgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ldGZzX3ByZWZldGNoX2Zvcl93cml0ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25ldGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9NzE1PUVYUE9SVF9TWU1CT0wobmV0ZnNfd3JpdGVfYmVnaW4pO1xuLS1cbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy03MTktICovXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6NzIwOmludCBuZXRmc19wcmVmZXRjaF9mb3Jfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNzIxLVx0XHRcdCAgICAgc2l6ZV90IG9mZnNldCwgc2l6ZV90IGxlbilcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTg3PXNzaXplX3QgbmV0ZnNfcGVyZm9ybV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTI4NC1cdFx0XHR9XG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjI4NTpcdFx0XHRyZXQgPSBuZXRmc19wcmVmZXRjaF9mb3Jfd3JpdGUoZmlsZSwgZm9saW8sIG9mZnNldCwgcGFydCk7XG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTI4Ni1cdFx0XHRpZiAocmV0IFx1MDAzYyAwKSB7XG4tLVxuZnMvbmV0ZnMvaW50ZXJuYWwuaD0yOD12b2lkIG5ldGZzX2NhY2hlX3JlYWRfdGVybWluYXRlZCh2b2lkICpwcml2LCBzc2l6ZV90IHRyYW5zZmVycmVkX29yX2Vycm9yKTtcbmZzL25ldGZzL2ludGVybmFsLmg6Mjk6aW50IG5ldGZzX3ByZWZldGNoX2Zvcl93cml0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbmZzL25ldGZzL2ludGVybmFsLmgtMzAtXHRcdFx0ICAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTE6MTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNjkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldEZTIFdyaXRlYmFjayBQYXRjaCoqCgpPa2F5LCBzbyBgbmV0ZnNfcHJlZmV0Y2hfZm9yX3dyaXRlYCBpcyBpbnRlcm5hbCwgdGhhdCYjMzk7cyBub3Qgc29tZXRoaW5nIHRvIGNvbmNlcm4gbXlzZWxmIHdpdGggZGlyZWN0bHkuIEZpcnN0LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFJpZ2h0LCBhZnRlciByZXZpZXdpbmcgSSBzZWUgYENJRlNgLCBgOVBfRlNgLCBgQUZTX0ZTYCwgYENFUEhfRlNgIGFzIGltcG9ydGFudC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYE5GU19GU0NBQ0hFYCBkZXBlbmRzIG9uIGBORlNfRlNgLCBzbyBJIGRvbiYjMzk7dCBuZWVkIHRvIGNvbnNpZGVyIHRoYXQgYXMgYSBkaXJlY3QgZGVwZW5kZW5jeSBoZXJlLCBJIGNhbiBpZ25vcmUgdGhhdC4KCkkgc2hvdWxkIHZlcmlmeSBpZiBgTkVURlNfU1VQUE9SVGAgaXMgZW5vdWdoIHRvIGJlIG9uIG15IGxpc3QuIE5vcGUsIGl0JiMzOTtzIGhpZGRlbiwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGxpc3RpbmcgdGhlIGZpbGVzeXN0ZW1zIHRoYXQgc2VsZWN0IGl0LiBJIGNhbiBqdXN0IGxpc3QgYENJRlNgLCBgOVBfRlNgLCBgQUZTX0ZTYCwgYENFUEhfRlNgLgoKTGV0IG1lIGNpcmNsZSBiYWNrIHRvIHRoZSBwYXRjaCBpdHNlbGYuIFRoZSBjaGFuZ2UgaW50cm9kdWNlcyBhIGBnZnBgIHBhcmFtZXRlciB0byBgcm9sbGluZ19idWZmZXJfaW5pdGAsIHdoaWNoIGlzIHBvdGVudGlhbGx5IGludGVyZXN0aW5nLiBBbmQgaW4gYG5ldGZzX2NyZWF0ZV93cml0ZV9yZXFgLCBpdCYjMzk7cyBzZXR0aW5nIGBnZnAgfD0gX19HRlBfTk9GQUlMYCB1bmRlciB0aGUgY29uZGl0aW9ucyBgb3JpZ2luID09IE5FVEZTX1dSSVRFQkFDS2Agb3IgYG9yaWdpbiA9PSBORVRGU19XUklURUJBQ0tfU0lOR0xFYC4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBhaW1lZCBhdCBwcmV2ZW50aW5nIEVOT01FTSBlcnJvcnMgZHVyaW5nIHdyaXRlYmFjaywgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUgbWVtb3J5IHJlY2xhaW0gcHJvY2Vzcy4gVGhhdCYjMzk7cyBhIGdvb2QgcGxhY2UgdG8gYmUgbW9kaWZ5aW5nLgoKR2l2ZW4gdGhhdCBpdCYjMzk7cyBhIGNvcmUgY2hhbmdlIHdpdGhpbiB0aGUgbmV0ZnMgd3JpdGViYWNrIHBhdGgsIGl0JiMzOTtzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGFtIGZvY3VzaW5nIG9uIGFsbCB0aG9zZSBpbXBvcnRhbnQgc3ltYm9scy4KCkkgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBpbXBvcnRhbnQgc3ltYm9sczoKLSBgbmV0ZnNfcmVhZGFoZWFkYAotIGBuZXRmc19yZWFkX2ZvbGlvYAotIGBuZXRmc193cml0ZXBhZ2VzYAotIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYAotIGBuZXRmc19wZXJmb3JtX3dyaXRlYAotIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYAoKQW5kIHRvIHJlLWl0ZXJhdGUsIG15IGtleSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZToKLSBgQ0lGU2AKLSBgOVBfRlNgCi0gYEFGU19GU2AKLSBgQ0VQSF9GU2AKCkkmIzM5O2xsIGp1c3QgZG91YmxlLWNoZWNrLCBidXQgeWVzLCBpdCBpcyBoaWRkZW4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBORVRGU19TVVBQT1JUJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvbmV0ZnMvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9LY29uZmlnLTItXG5mcy9uZXRmcy9LY29uZmlnOjM6Y29uZmlnIE5FVEZTX1NVUFBPUlRcbmZzL25ldGZzL0tjb25maWctNC1cdHRyaXN0YXRlXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0MzIwCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogNzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBIaWRkZW4gRmlsZSBTeXN0ZW0gT3B0aW9ucyoqCgpSaWdodCwgbm8gcHJvbXB0IHN0cmluZywgd2hpY2ggbWVhbnMgdGhpcyBmZWF0dXJlIGlzICpkZWZpbml0ZWx5KiBoaWRkZW4uIFdlIGNhbiYjMzk7dCBlbmFibGUgaXQgZGlyZWN0bHkgdGhyb3VnaCBhIHN0YW5kYXJkIGludGVyZmFjZTsgaXQgaGFzIHRvIGJlIHNwZWNpZmljYWxseSBzZWxlY3RlZCwgbGlrZWx5IGluIHNvbWUgc29ydCBvZiBjb25maWd1cmF0aW9uIG9yIGJ1aWxkIHByb2Nlc3MuIFNvLCBsaXN0aW5nIGBDSUZTYCwgYDlQX0ZTYCwgYEFGU19GU2AsIGFuZCBgQ0VQSF9GU2AgaXMgc3BvdCBvbiDigJMgdGhvc2UgYXJlIHRoZSBjYW5kaWRhdGVzLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoaXMgaGlkZGVuIHN0YXRlIGlzIG1hbmFnZWQgaW4gY29kZS4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIGd1dHMgb2YgdGhpcyBpbXBsZW1lbnRhdGlvbi4gSSBuZWVkIHRvIGV4YW1pbmUgYHJvbGxpbmdfYnVmZmVyX2luaXRgIHNwZWNpZmljYWxseS4gSSYjMzk7bGwgaGVhZCBvdmVyIHRvIGBmcy9uZXRmcy9yb2xsaW5nX2J1ZmZlci5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZXNlIGZpbGVzeXN0ZW0gdHlwZXMgYXJlIG1hZGUgYXZhaWxhYmxlIGFuZCB3aGF0IG1ha2VzIHRoZW0gd29yay4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHNlbGVjdGlvbiBvciBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gbWFuaWZlc3RzIGl0c2VsZi4gVGhpcyBmdW5jdGlvbiBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGFyZSBoaWRkZW4gYnkgZGVmYXVsdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjUgMTE6MTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cm9sbGluZ19idWZmZXJfaW5pdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL25ldGZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9MzM2PXZvaWQgbmV0ZnNfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwpXG4tLVxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTM2MS1cdHJyZXEtXHUwMDNlc3VibWl0dGVkID0gcnJlcS1cdTAwM2VzdGFydDtcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzozNjI6XHRpZiAocm9sbGluZ19idWZmZXJfaW5pdChcdTAwMjZycmVxLVx1MDAzZWJ1ZmZlciwgcnJlcS1cdTAwM2VkZWJ1Z19pZCwgSVRFUl9ERVNULCBHRlBfTk9GUykgXHUwMDNjIDApXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzYzLVx0XHRnb3RvIGNsZWFudXBfZnJlZTtcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9Mzc2PXN0YXRpYyBpbnQgbmV0ZnNfY3JlYXRlX3Npbmd1bGFyX2J1ZmZlcihzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSwgc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzgwLVxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jOjM4MTpcdGlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KFx1MDAyNnJyZXEtXHUwMDNlYnVmZmVyLCBycmVxLVx1MDAzZWRlYnVnX2lkLCBJVEVSX0RFU1QsIEdGUF9OT0ZTKSBcdTAwM2MgMClcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy0zODItXHRcdHJldHVybiAtRU5PTUVNO1xuLS1cbmZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmM9NTU9RVhQT1JUX1NZTUJPTChuZXRmc19mb2xpb3FfZnJlZSk7XG4tLVxuZnMvbmV0ZnMvcm9sbGluZ19idWZmZXIuYy02MS0gKi9cbmZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmM6NjI6aW50IHJvbGxpbmdfYnVmZmVyX2luaXQoc3RydWN0IHJvbGxpbmdfYnVmZmVyICpyb2xsLCB1bnNpZ25lZCBpbnQgcnJlcV9pZCxcbmZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmMtNjMtXHRcdFx0dW5zaWduZWQgaW50IGRpcmVjdGlvbiwgZ2ZwX3QgZ2ZwKVxuLS1cbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9OTA9c3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2NyZWF0ZV93cml0ZV9yZXEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy0xMTUtXHRcdGdmcCB8PSBfX0dGUF9OT0ZBSUw7XG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjExNjpcdGlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KFx1MDAyNndyZXEtXHUwMDNlYnVmZmVyLCB3cmVxLVx1MDAzZWRlYnVnX2lkLCBJVEVSX1NPVVJDRSwgZ2ZwKSBcdTAwM2MgMClcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTE3LVx0XHRnb3RvIG5vbWVtO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNSAxMToxOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE3NgoJCQkJCQkJb3V0cHV0OiAxNjAKCQkJCQkJCXRob3VnaHRzOiAyMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgTmV0ZnMgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7dmUgbG9va2VkIHRoaXMgcGF0Y2ggb3ZlciwgYW5kIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyBwb3NpdGl2ZS4gSXQmIzM5O3MgbWFraW5nIGEgdGFyZ2V0ZWQgY2hhbmdlLCB0d2Vha2luZyBob3cgbWVtb3J5IGlzIGFsbG9jYXRlZCB3aXRoaW4gdGhlIGBuZXRmc2AgbGlicmFyeSwgc3BlY2lmaWNhbGx5IGluIGByb2xsaW5nX2J1ZmZlcl9pbml0YC4gVGhlIGtleSBoZXJlIGlzIHRoZSBpbnRyb2R1Y3Rpb24gb2YgYGdmcF90YCB3aGljaCBpcyB0aGVuIHVzZWQgaW4gYG5ldGZzX2ZvbGlvcV9hbGxvY2AgYW5kIHRoZSBhZGRpdGlvbiBvZiBgX19HRlBfTk9GQUlMYCBpbiBgbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcWAuIFRoZSBhaW0sIGFzIEkgdW5kZXJzdGFuZCBpdCwgaXMgdG8gYm9sc3RlciB0aGUgcm9idXN0bmVzcyBvZiB3cml0ZWJhY2sgb3BlcmF0aW9ucywgbWl0aWdhdGluZyB0aGUgcmlzayBvZiBgRU5PTUVNYCBlcnJvcnMgZHVyaW5nIG1lbW9yeSByZWNsYWltLCB3aGljaCBpcyBhIGNvbW1vbiBwZXJmb3JtYW5jZSBib3R0bGVuZWNrIEkmIzM5O3ZlIHNlZW4gaW4gdGhlIHBhc3QuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb247IGl0JiMzOTtzIG5vdCBqdXN0IGEgY29zbWV0aWMgY2hhbmdlLiBJdCBkaXJlY3RseSBhZmZlY3RzIGhvdyBtZW1vcnkgaXMgaGFuZGxlZCBhdCBhIGZ1bmRhbWVudGFsIGxldmVsIGluIHRoZSBjb3JlIGBuZXRmc2AgbGlicmFyeS4gVGhpcyBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBteSBmdXp6aW5nIGVmZm9ydHMgb24gZnVuY3Rpb25zIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGVzZSBjaGFuZ2VzLiBJJiMzOTtsbCBwcmlvcml0aXplIGZ1enppbmcgYXJvdW5kIGBuZXRmc19yZWFkYWhlYWRgLCBgbmV0ZnNfcmVhZF9mb2xpb2AsIGBuZXRmc193cml0ZXBhZ2VzYCwgYG5ldGZzX3dyaXRlYmFja19zaW5nbGVgLCBgbmV0ZnNfcGVyZm9ybV93cml0ZWAsIGFuZCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZGAgdG8gbWFrZSBzdXJlIGl0JiMzOTtzIGFsbCB3b3JraW5nIHByb3Blcmx5IGFuZCBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zLgoKR2l2ZW4gdGhhdCB0aGlzIHJlbGF0ZXMgdG8gbmV0d29yayBmaWxlc3lzdGVtcywgSSYjMzk7bSB0aGlua2luZyB0aGUgZm9sbG93aW5nIGNvbmZpZ3Mgd291bGQgYmUgdXNlZnVsIHRvIGVuYWJsZSBkdXJpbmcgZnV6emluZzogYENJRlNgLCBgOVBfRlNgLCBgQUZTX0ZTYCwgYW5kIGBDRVBIX0ZTYC4gVGhpcyBzaG91bGQgcHJvdmlkZSBicm9hZCBjb3ZlcmFnZSBhbmQgdGVzdCBmb3IgYW55IHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgaW4gY29tbW9ubHkgdXNlZCBuZXR3b3JraW5nIGZpbGVzeXN0ZW1zLiBBbGwgaW4gYWxsLCB0aGlzIHNlZW1zIGxpa2UgYSBzb2xpZCwgd2VsbC1yZWFzb25lZCBwYXRjaCB0aGF0IEkgY2FuIGRlZmluaXRlbHkgZ2V0IGJlaGluZCBhbmQgdGhhdCBzaG91bGQgYmUgcmlnb3JvdXNseSB0ZXN0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI1IDExOjE5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtDSUZTJiMzNDssCiAgICAmIzM0OzlQX0ZTJiMzNDssCiAgICAmIzM0O0FGU19GUyYjMzQ7LAogICAgJiMzNDtDRVBIX0ZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bmV0ZnNfcmVhZGFoZWFkJiMzNDssCiAgICAmIzM0O25ldGZzX3JlYWRfZm9saW8mIzM0OywKICAgICYjMzQ7bmV0ZnNfd3JpdGVwYWdlcyYjMzQ7LAogICAgJiMzNDtuZXRmc193cml0ZWJhY2tfc2luZ2xlJiMzNDssCiAgICAmIzM0O25ldGZzX3BlcmZvcm1fd3JpdGUmIzM0OywKICAgICYjMzQ7bmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgZm9yIHJvbGxpbmcgYnVmZmVyIGluaXRpYWxpemF0aW9uIGluIHRoZSBuZXRmcyBsaWJyYXJ5LCBzcGVjaWZpY2FsbHkgYWRkaW5nIF9fR0ZQX05PRkFJTCBmb3Igd3JpdGViYWNrIG9wZXJhdGlvbnMgdG8gcHJldmVudCBFTk9NRU0gZHVyaW5nIG1lbW9yeSByZWNsYWltLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXRmcyBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7Q0lGUyYjMzQ7LAogICAgJiMzNDs5UF9GUyYjMzQ7LAogICAgJiMzNDtBRlNfRlMmIzM0OywKICAgICYjMzQ7Q0VQSF9GUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25ldGZzX3JlYWRhaGVhZCYjMzQ7LAogICAgJiMzNDtuZXRmc19yZWFkX2ZvbGlvJiMzNDssCiAgICAmIzM0O25ldGZzX3dyaXRlcGFnZXMmIzM0OywKICAgICYjMzQ7bmV0ZnNfd3JpdGViYWNrX3NpbmdsZSYjMzQ7LAogICAgJiMzNDtuZXRmc19wZXJmb3JtX3dyaXRlJiMzNDssCiAgICAmIzM0O25ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGZvciByb2xsaW5nIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBpbiB0aGUgbmV0ZnMgbGlicmFyeSwgc3BlY2lmaWNhbGx5IGFkZGluZyBfX0dGUF9OT0ZBSUwgZm9yIHdyaXRlYmFjayBvcGVyYXRpb25zIHRvIHByZXZlbnQgRU5PTUVNIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0ZnMgbG9naWMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMToxODowNC44MTQ2NjIwNjNaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzY3OTMyNTM4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJDSUZTXCIsXG4gICAgXCI5UF9GU1wiLFxuICAgIFwiQUZTX0ZTXCIsXG4gICAgXCJDRVBIX0ZTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibmV0ZnNfcmVhZGFoZWFkXCIsXG4gICAgXCJuZXRmc19yZWFkX2ZvbGlvXCIsXG4gICAgXCJuZXRmc193cml0ZXBhZ2VzXCIsXG4gICAgXCJuZXRmc193cml0ZWJhY2tfc2luZ2xlXCIsXG4gICAgXCJuZXRmc19wZXJmb3JtX3dyaXRlXCIsXG4gICAgXCJuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGZsYWdzIGZvciByb2xsaW5nIGJ1ZmZlciBpbml0aWFsaXphdGlvbiBpbiB0aGUgbmV0ZnMgbGlicmFyeSwgc3BlY2lmaWNhbGx5IGFkZGluZyBfX0dGUF9OT0ZBSUwgZm9yIHdyaXRlYmFjayBvcGVyYXRpb25zIHRvIHByZXZlbnQgRU5PTUVNIGR1cmluZyBtZW1vcnkgcmVjbGFpbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIGNvcmUgbmV0ZnMgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjA0LjgxNDY2OTk3NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODkwODQ0NjY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODRkYjczM2Y0NDQ0ZWY3NDdiOTM2YzQ2YjI5NWJiYmUxODNmOGRkMFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IEp1bCAyNSAxMToxODowMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMgYi9mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmNcXG5pbmRleCAyNGE4YTU0MThlMzExOS4uZmU4NGUxZGQ3MDdjZTEgMTAwNjQ0XFxuLS0tIGEvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jXFxuKysrIGIvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jXFxuQEAgLTM1OSw3ICszNTksNyBAQCB2b2lkIG5ldGZzX3JlYWRhaGVhZChzdHJ1Y3QgcmVhZGFoZWFkX2NvbnRyb2wgKnJhY3RsKVxcbiBcXHRuZXRmc19ycmVxX2V4cGFuZChycmVxLCByYWN0bCk7XFxuIFxcbiBcXHRycmVxLVxcdTAwM2VzdWJtaXR0ZWQgPSBycmVxLVxcdTAwM2VzdGFydDtcXG4tXFx0aWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoXFx1MDAyNnJyZXEtXFx1MDAzZWJ1ZmZlciwgcnJlcS1cXHUwMDNlZGVidWdfaWQsIElURVJfREVTVCkgXFx1MDAzYyAwKVxcbitcXHRpZiAocm9sbGluZ19idWZmZXJfaW5pdChcXHUwMDI2cnJlcS1cXHUwMDNlYnVmZmVyLCBycmVxLVxcdTAwM2VkZWJ1Z19pZCwgSVRFUl9ERVNULCBHRlBfTk9GUykgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIGNsZWFudXBfZnJlZTtcXG4gXFx0bmV0ZnNfcmVhZF90b19wYWdlY2FjaGUocnJlcSwgcmFjdGwpO1xcbiBcXG5AQCAtMzc4LDcgKzM3OCw3IEBAIHN0YXRpYyBpbnQgbmV0ZnNfY3JlYXRlX3Npbmd1bGFyX2J1ZmZlcihzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSwgc3RydWN0IGZvXFxuIHtcXG4gXFx0c3NpemVfdCBhZGRlZDtcXG4gXFxuLVxcdGlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KFxcdTAwMjZycmVxLVxcdTAwM2VidWZmZXIsIHJyZXEtXFx1MDAzZWRlYnVnX2lkLCBJVEVSX0RFU1QpIFxcdTAwM2MgMClcXG4rXFx0aWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoXFx1MDAyNnJyZXEtXFx1MDAzZWJ1ZmZlciwgcnJlcS1cXHUwMDNlZGVidWdfaWQsIElURVJfREVTVCwgR0ZQX05PRlMpIFxcdTAwM2MgMClcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbiBcXHRhZGRlZCA9IHJvbGxpbmdfYnVmZmVyX2FwcGVuZChcXHUwMDI2cnJlcS1cXHUwMDNlYnVmZmVyLCBmb2xpbywgcm9sbGJ1Zl9mbGFncyk7XFxuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmMgYi9mcy9uZXRmcy9yb2xsaW5nX2J1ZmZlci5jXFxuaW5kZXggYTE3ZmJmOTg1M2E0NDMuLjNjNGIxZTI0NGM0NmVmIDEwMDY0NFxcbi0tLSBhL2ZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmNcXG4rKysgYi9mcy9uZXRmcy9yb2xsaW5nX2J1ZmZlci5jXFxuQEAgLTYwLDExICs2MCwxMSBAQCBFWFBPUlRfU1lNQk9MKG5ldGZzX2ZvbGlvcV9mcmVlKTtcXG4gICogY29uc3VtZXIuXFxuICAqL1xcbiBpbnQgcm9sbGluZ19idWZmZXJfaW5pdChzdHJ1Y3Qgcm9sbGluZ19idWZmZXIgKnJvbGwsIHVuc2lnbmVkIGludCBycmVxX2lkLFxcbi1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgZGlyZWN0aW9uKVxcbitcXHRcXHRcXHR1bnNpZ25lZCBpbnQgZGlyZWN0aW9uLCBnZnBfdCBnZnApXFxuIHtcXG4gXFx0c3RydWN0IGZvbGlvX3F1ZXVlICpmcTtcXG4gXFxuLVxcdGZxID0gbmV0ZnNfZm9saW9xX2FsbG9jKHJyZXFfaWQsIEdGUF9OT0ZTLCBuZXRmc190cmFjZV9mb2xpb3Ffcm9sbGJ1Zl9pbml0KTtcXG4rXFx0ZnEgPSBuZXRmc19mb2xpb3FfYWxsb2MocnJlcV9pZCwgZ2ZwLCBuZXRmc190cmFjZV9mb2xpb3Ffcm9sbGJ1Zl9pbml0KTtcXG4gXFx0aWYgKCFmcSlcXG4gXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuIFxcbmRpZmYgLS1naXQgYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jIGIvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuY1xcbmluZGV4IGYyNzYxYzk5Nzk1YTZiLi4yOGJjZDEwZWYzMzAyNyAxMDA2NDRcXG4tLS0gYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXFxuKysrIGIvZnMvbmV0ZnMvd3JpdGVfaXNzdWUuY1xcbkBAIC05OCw2ICs5OCw3IEBAIHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19jcmVhdGVfd3JpdGVfcmVxKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRcXHRcXHQgICAgIG9yaWdpbiA9PSBORVRGU19XUklURUJBQ0tfU0lOR0xFIHx8XFxuIFxcdFxcdFxcdCAgICAgb3JpZ2luID09IE5FVEZTX1dSSVRFVEhST1VHSCB8fFxcbiBcXHRcXHRcXHQgICAgIG9yaWdpbiA9PSBORVRGU19QR1BSSVYyX0NPUFlfVE9fQ0FDSEUpO1xcbitcXHRnZnBfdCBnZnAgPSBHRlBfTk9GUztcXG4gXFxuIFxcdHdyZXEgPSBuZXRmc19hbGxvY19yZXF1ZXN0KG1hcHBpbmcsIGZpbGUsIHN0YXJ0LCAwLCBvcmlnaW4pO1xcbiBcXHRpZiAoSVNfRVJSKHdyZXEpKVxcbkBAIC0xMDgsNyArMTA5LDExIEBAIHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19jcmVhdGVfd3JpdGVfcmVxKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbiBcXHRpY3R4ID0gbmV0ZnNfaW5vZGUod3JlcS1cXHUwMDNlaW5vZGUpO1xcbiBcXHRpZiAoaXNfY2FjaGVhYmxlKVxcbiBcXHRcXHRmc2NhY2hlX2JlZ2luX3dyaXRlX29wZXJhdGlvbihcXHUwMDI2d3JlcS1cXHUwMDNlY2FjaGVfcmVzb3VyY2VzLCBuZXRmc19pX2Nvb2tpZShpY3R4KSk7XFxuLVxcdGlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KFxcdTAwMjZ3cmVxLVxcdTAwM2VidWZmZXIsIHdyZXEtXFx1MDAzZWRlYnVnX2lkLCBJVEVSX1NPVVJDRSkgXFx1MDAzYyAwKVxcbitcXG4rXFx0LyogV3JpdGViYWNrIGlzIHBhcnQgb2YgbWVtb3J5IHJlY2xhaW0gYW5kIG11c3Qgbm90IGZhaWwgZHVlIHRvIEVOT01FTS4gKi9cXG4rXFx0aWYgKG9yaWdpbiA9PSBORVRGU19XUklURUJBQ0sgfHwgb3JpZ2luID09IE5FVEZTX1dSSVRFQkFDS19TSU5HTEUpXFxuK1xcdFxcdGdmcCB8PSBfX0dGUF9OT0ZBSUw7XFxuK1xcdGlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KFxcdTAwMjZ3cmVxLVxcdTAwM2VidWZmZXIsIHdyZXEtXFx1MDAzZWRlYnVnX2lkLCBJVEVSX1NPVVJDRSwgZ2ZwKSBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gbm9tZW07XFxuIFxcbiBcXHR3cmVxLVxcdTAwM2VjbGVhbmVkX3RvID0gd3JlcS1cXHUwMDNlc3RhcnQ7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcm9sbGluZ19idWZmZXIuaCBiL2luY2x1ZGUvbGludXgvcm9sbGluZ19idWZmZXIuaFxcbmluZGV4IGFjMTViMWZmZGQ4MzE1Li4zOWI3MjQ4ODM4ZTIxMiAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L3JvbGxpbmdfYnVmZmVyLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3JvbGxpbmdfYnVmZmVyLmhcXG5AQCAtNDMsNyArNDMsNyBAQCBzdHJ1Y3Qgcm9sbGluZ19idWZmZXJfc25hcHNob3Qge1xcbiAjZGVmaW5lIFJPTExCVUZfTUFSS18yXFx0QklUKDEpXFxuIFxcbiBpbnQgcm9sbGluZ19idWZmZXJfaW5pdChzdHJ1Y3Qgcm9sbGluZ19idWZmZXIgKnJvbGwsIHVuc2lnbmVkIGludCBycmVxX2lkLFxcbi1cXHRcXHRcXHR1bnNpZ25lZCBpbnQgZGlyZWN0aW9uKTtcXG4rXFx0XFx0XFx0dW5zaWduZWQgaW50IGRpcmVjdGlvbiwgZ2ZwX3QgZ2ZwKTtcXG4gaW50IHJvbGxpbmdfYnVmZmVyX21ha2Vfc3BhY2Uoc3RydWN0IHJvbGxpbmdfYnVmZmVyICpyb2xsKTtcXG4gc3NpemVfdCByb2xsaW5nX2J1ZmZlcl9sb2FkX2Zyb21fcmEoc3RydWN0IHJvbGxpbmdfYnVmZmVyICpyb2xsLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTE6MTg6MDUuNzA2NTgyMzM5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6ODY3ODczODg3NDIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0lGU1wiLFxuICAgIFwiOVBfRlNcIixcbiAgICBcIkFGU19GU1wiLFxuICAgIFwiQ0VQSF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGZzX3JlYWRhaGVhZFwiLFxuICAgIFwibmV0ZnNfcmVhZF9mb2xpb1wiLFxuICAgIFwibmV0ZnNfd3JpdGVwYWdlc1wiLFxuICAgIFwibmV0ZnNfd3JpdGViYWNrX3NpbmdsZVwiLFxuICAgIFwibmV0ZnNfcGVyZm9ybV93cml0ZVwiLFxuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyBmb3Igcm9sbGluZyBidWZmZXIgaW5pdGlhbGl6YXRpb24gaW4gdGhlIG5ldGZzIGxpYnJhcnksIHNwZWNpZmljYWxseSBhZGRpbmcgX19HRlBfTk9GQUlMIGZvciB3cml0ZWJhY2sgb3BlcmF0aW9ucyB0byBwcmV2ZW50IEVOT01FTSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldGZzIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA4NGRiNzMzZjQ0NDRlZjc0N2I5MzZjNDZiMjk1YmJiZTE4M2Y4ZGQwXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBKdWwgMjUgMTE6MTg6MDIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMgYi9mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmNcbmluZGV4IDI0YThhNTQxOGUzMTE5Li5mZTg0ZTFkZDcwN2NlMSAxMDA2NDRcbi0tLSBhL2ZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuY1xuKysrIGIvZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jXG5AQCAtMzU5LDcgKzM1OSw3IEBAIHZvaWQgbmV0ZnNfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwpXG4gXHRuZXRmc19ycmVxX2V4cGFuZChycmVxLCByYWN0bCk7XG4gXG4gXHRycmVxLVx1MDAzZXN1Ym1pdHRlZCA9IHJyZXEtXHUwMDNlc3RhcnQ7XG4tXHRpZiAocm9sbGluZ19idWZmZXJfaW5pdChcdTAwMjZycmVxLVx1MDAzZWJ1ZmZlciwgcnJlcS1cdTAwM2VkZWJ1Z19pZCwgSVRFUl9ERVNUKSBcdTAwM2MgMClcbitcdGlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KFx1MDAyNnJyZXEtXHUwMDNlYnVmZmVyLCBycmVxLVx1MDAzZWRlYnVnX2lkLCBJVEVSX0RFU1QsIEdGUF9OT0ZTKSBcdTAwM2MgMClcbiBcdFx0Z290byBjbGVhbnVwX2ZyZWU7XG4gXHRuZXRmc19yZWFkX3RvX3BhZ2VjYWNoZShycmVxLCByYWN0bCk7XG4gXG5AQCAtMzc4LDcgKzM3OCw3IEBAIHN0YXRpYyBpbnQgbmV0ZnNfY3JlYXRlX3Npbmd1bGFyX2J1ZmZlcihzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqcnJlcSwgc3RydWN0IGZvXG4ge1xuIFx0c3NpemVfdCBhZGRlZDtcbiBcbi1cdGlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KFx1MDAyNnJyZXEtXHUwMDNlYnVmZmVyLCBycmVxLVx1MDAzZWRlYnVnX2lkLCBJVEVSX0RFU1QpIFx1MDAzYyAwKVxuK1x0aWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoXHUwMDI2cnJlcS1cdTAwM2VidWZmZXIsIHJyZXEtXHUwMDNlZGVidWdfaWQsIElURVJfREVTVCwgR0ZQX05PRlMpIFx1MDAzYyAwKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiBcdGFkZGVkID0gcm9sbGluZ19idWZmZXJfYXBwZW5kKFx1MDAyNnJyZXEtXHUwMDNlYnVmZmVyLCBmb2xpbywgcm9sbGJ1Zl9mbGFncyk7XG5kaWZmIC0tZ2l0IGEvZnMvbmV0ZnMvcm9sbGluZ19idWZmZXIuYyBiL2ZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmNcbmluZGV4IGExN2ZiZjk4NTNhNDQzLi4zYzRiMWUyNDRjNDZlZiAxMDA2NDRcbi0tLSBhL2ZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmNcbisrKyBiL2ZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmNcbkBAIC02MCwxMSArNjAsMTEgQEAgRVhQT1JUX1NZTUJPTChuZXRmc19mb2xpb3FfZnJlZSk7XG4gICogY29uc3VtZXIuXG4gICovXG4gaW50IHJvbGxpbmdfYnVmZmVyX2luaXQoc3RydWN0IHJvbGxpbmdfYnVmZmVyICpyb2xsLCB1bnNpZ25lZCBpbnQgcnJlcV9pZCxcbi1cdFx0XHR1bnNpZ25lZCBpbnQgZGlyZWN0aW9uKVxuK1x0XHRcdHVuc2lnbmVkIGludCBkaXJlY3Rpb24sIGdmcF90IGdmcClcbiB7XG4gXHRzdHJ1Y3QgZm9saW9fcXVldWUgKmZxO1xuIFxuLVx0ZnEgPSBuZXRmc19mb2xpb3FfYWxsb2MocnJlcV9pZCwgR0ZQX05PRlMsIG5ldGZzX3RyYWNlX2ZvbGlvcV9yb2xsYnVmX2luaXQpO1xuK1x0ZnEgPSBuZXRmc19mb2xpb3FfYWxsb2MocnJlcV9pZCwgZ2ZwLCBuZXRmc190cmFjZV9mb2xpb3Ffcm9sbGJ1Zl9pbml0KTtcbiBcdGlmICghZnEpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuZGlmZiAtLWdpdCBhL2ZzL25ldGZzL3dyaXRlX2lzc3VlLmMgYi9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG5pbmRleCBmMjc2MWM5OTc5NWE2Yi4uMjhiY2QxMGVmMzMwMjcgMTAwNjQ0XG4tLS0gYS9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG4rKysgYi9mcy9uZXRmcy93cml0ZV9pc3N1ZS5jXG5AQCAtOTgsNiArOTgsNyBAQCBzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbiBcdFx0XHQgICAgIG9yaWdpbiA9PSBORVRGU19XUklURUJBQ0tfU0lOR0xFIHx8XG4gXHRcdFx0ICAgICBvcmlnaW4gPT0gTkVURlNfV1JJVEVUSFJPVUdIIHx8XG4gXHRcdFx0ICAgICBvcmlnaW4gPT0gTkVURlNfUEdQUklWMl9DT1BZX1RPX0NBQ0hFKTtcbitcdGdmcF90IGdmcCA9IEdGUF9OT0ZTO1xuIFxuIFx0d3JlcSA9IG5ldGZzX2FsbG9jX3JlcXVlc3QobWFwcGluZywgZmlsZSwgc3RhcnQsIDAsIG9yaWdpbik7XG4gXHRpZiAoSVNfRVJSKHdyZXEpKVxuQEAgLTEwOCw3ICsxMDksMTEgQEAgc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2NyZWF0ZV93cml0ZV9yZXEoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4gXHRpY3R4ID0gbmV0ZnNfaW5vZGUod3JlcS1cdTAwM2Vpbm9kZSk7XG4gXHRpZiAoaXNfY2FjaGVhYmxlKVxuIFx0XHRmc2NhY2hlX2JlZ2luX3dyaXRlX29wZXJhdGlvbihcdTAwMjZ3cmVxLVx1MDAzZWNhY2hlX3Jlc291cmNlcywgbmV0ZnNfaV9jb29raWUoaWN0eCkpO1xuLVx0aWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoXHUwMDI2d3JlcS1cdTAwM2VidWZmZXIsIHdyZXEtXHUwMDNlZGVidWdfaWQsIElURVJfU09VUkNFKSBcdTAwM2MgMClcbitcbitcdC8qIFdyaXRlYmFjayBpcyBwYXJ0IG9mIG1lbW9yeSByZWNsYWltIGFuZCBtdXN0IG5vdCBmYWlsIGR1ZSB0byBFTk9NRU0uICovXG4rXHRpZiAob3JpZ2luID09IE5FVEZTX1dSSVRFQkFDSyB8fCBvcmlnaW4gPT0gTkVURlNfV1JJVEVCQUNLX1NJTkdMRSlcbitcdFx0Z2ZwIHw9IF9fR0ZQX05PRkFJTDtcbitcdGlmIChyb2xsaW5nX2J1ZmZlcl9pbml0KFx1MDAyNndyZXEtXHUwMDNlYnVmZmVyLCB3cmVxLVx1MDAzZWRlYnVnX2lkLCBJVEVSX1NPVVJDRSwgZ2ZwKSBcdTAwM2MgMClcbiBcdFx0Z290byBub21lbTtcbiBcbiBcdHdyZXEtXHUwMDNlY2xlYW5lZF90byA9IHdyZXEtXHUwMDNlc3RhcnQ7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9yb2xsaW5nX2J1ZmZlci5oIGIvaW5jbHVkZS9saW51eC9yb2xsaW5nX2J1ZmZlci5oXG5pbmRleCBhYzE1YjFmZmRkODMxNS4uMzliNzI0ODgzOGUyMTIgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3JvbGxpbmdfYnVmZmVyLmhcbisrKyBiL2luY2x1ZGUvbGludXgvcm9sbGluZ19idWZmZXIuaFxuQEAgLTQzLDcgKzQzLDcgQEAgc3RydWN0IHJvbGxpbmdfYnVmZmVyX3NuYXBzaG90IHtcbiAjZGVmaW5lIFJPTExCVUZfTUFSS18yXHRCSVQoMSlcbiBcbiBpbnQgcm9sbGluZ19idWZmZXJfaW5pdChzdHJ1Y3Qgcm9sbGluZ19idWZmZXIgKnJvbGwsIHVuc2lnbmVkIGludCBycmVxX2lkLFxuLVx0XHRcdHVuc2lnbmVkIGludCBkaXJlY3Rpb24pO1xuK1x0XHRcdHVuc2lnbmVkIGludCBkaXJlY3Rpb24sIGdmcF90IGdmcCk7XG4gaW50IHJvbGxpbmdfYnVmZmVyX21ha2Vfc3BhY2Uoc3RydWN0IHJvbGxpbmdfYnVmZmVyICpyb2xsKTtcbiBzc2l6ZV90IHJvbGxpbmdfYnVmZmVyX2xvYWRfZnJvbV9yYShzdHJ1Y3Qgcm9sbGluZ19idWZmZXIgKnJvbGwsXG4gXHRcdFx0XHQgICAgc3RydWN0IHJlYWRhaGVhZF9jb250cm9sICpyYWN0bCxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjA1LjcwNjU4NDgzOVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0MDQ2MTczMjYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBOZXRmcyBNZW1vcnkgQWxsb2NhdGlvbiBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGByb2xsaW5nX2J1ZmZlcl9pbml0YC4gVGhlIHByaW1hcnkgY2hhbmdlIHNlZW1zIHRvIGJlIGludHJvZHVjaW5nIGEgYGdmcF90YCBhcmd1bWVudCwgYW5kIHRoZW4gdXBkYXRpbmcgaXRzIHVzZXMgaW4gYGZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuY2AgYW5kIGBmcy9uZXRmcy93cml0ZV9pc3N1ZS5jYC4gU3BlY2lmaWNhbGx5LCB3aXRoaW4gYGZzL25ldGZzL3dyaXRlX2lzc3VlLmNgLCB0aGVyZSdzIHNvbWUgY29uZGl0aW9uYWwgbG9naWMgYWRkaW5nIGBfX0dGUF9OT0ZBSUxgIHRvIHRoZSBgZ2ZwYCBmbGFncyB3aGVuIGRlYWxpbmcgd2l0aCB3cml0ZWJhY2sgb3BlcmF0aW9ucywgbGlrZSBgTkVURlNfV1JJVEVCQUNLYCBhbmQgYE5FVEZTX1dSSVRFQkFDS19TSU5HTEVgLlxuXG5Fc3NlbnRpYWxseSwgdGhpcyBpcyBhIGZ1bmN0aW9uYWwgc2hpZnQgaW1wYWN0aW5nIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciB3aXRoaW4gdGhlIGBuZXRmc2Agc3Vic3lzdGVtLiBUaGlzIGRpcmVjdGx5IGluZmx1ZW5jZXMgdGhlIGluaXRpYWxpemF0aW9uIG9mIHRoZSByb2xsaW5nIGJ1ZmZlci4gQ29uc2lkZXJpbmcgYG5ldGZzYCBpcyBsZXZlcmFnZWQgYnkgc2V2ZXJhbCBuZXR3b3JrIGZpbGVzeXN0ZW1zIGxpa2UgQUZTLCBDZXBoLCBDSUZTLCBhbmQgOXAsIHRoaXMgY2hhbmdlIGNsZWFybHkgaGFzIHdpZGVyIGltcGxpY2F0aW9ucy5cblxuSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgc2NvcGUgb2YgdGhpcy4gTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBhdCBrZXkgZnVuY3Rpb25zIHRvIHNlZSB3aGVyZSB0aGlzIGltcGFjdHM6IEkgbmVlZCB0byBjaGVjayBgbmV0ZnNfcmVhZGFoZWFkYCwgYG5ldGZzX2NyZWF0ZV9zaW5ndWxhcl9idWZmZXJgLCBgbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcWAsIGFuZCwgb2YgY291cnNlLCBgcm9sbGluZ19idWZmZXJfaW5pdGAgaXRzZWxmIHRvIHNlZSB3aGVyZSB0aGUgY2hhbmdlIGlzIGluY29ycG9yYXRlZC5cblxuTmV4dCwgSSBuZWVkIHRvIGtub3cgdGhlIGNvbmZpZyBvcHRpb24gZm9yIGBuZXRmc2AsIHNvIHRoYXQgSSBrbm93IGlmIGl0IGlzIGVuYWJsZWQuIEknbGwgY2hlY2sgYGZzL25ldGZzL0tjb25maWdgIGFuZCBsb29rIGZvciBgQ09ORklHX05FVEZTX1NVUFBPUlRgLlxuXG5JJ2xsIHNwZWNpZmljYWxseSBzY3J1dGluaXplIGBuZXRmc19jcmVhdGVfd3JpdGVfcmVxYCBhbmQgYG5ldGZzX3JlYWRhaGVhZGAgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBgZ2ZwX3RgIGNoYW5nZSByaXBwbGVzIHRocm91Z2ggdGhlIGNvZGUsIHBhcnRpY3VsYXJseSBpbiByZWdhcmRzIHRvIHRoZSBuZXcgbG9naWMgYXJvdW5kIHdyaXRlYmFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6MzIxMCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjExLjExMTIwNjE2NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTcwMjA0MjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZTX1NVUFBPUlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmV0ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9LY29uZmlnLTItXFxuZnMvbmV0ZnMvS2NvbmZpZzozOmNvbmZpZyBORVRGU19TVVBQT1JUXFxuZnMvbmV0ZnMvS2NvbmZpZy00LVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjExLjU2ODIzMjEwN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM0NjM5NTczOTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqRGVwZW5kZW5jaWVzIGFuZCBTZWxlY3Rpb24gQ3JpdGVyaWE6IEEgRGVlcCBEaXZlKipcblxuQWxyaWdodCwgbXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgaW5mbHVlbmNlIGhlcmUuIExldCdzIGRpZyBpbi4gSSBuZWVkIHRvIGdldCBhIGdyaXAgb24gdGhlIHN5c3RlbSwgc3BlY2lmaWNhbGx5LCBhbnkgY29kZSwgZGF0YSwgb3IgcHJvY2Vzc2VzIHRoYXQgZWl0aGVyICoqZGVwZW5kKiogb24gdGhlIGN1cnJlbnQgdGhpbmcgd2UncmUgZXhhbWluaW5nLCBvciB0aGF0IHVzZSBpdCBhcyBhIHNlbGVjdGlvbiBjcml0ZXJpb24gb3IgaW5wdXQuXG5cblRoaXMgaXMgY3JpdGljYWwgYmVjYXVzZSB1bmRlcnN0YW5kaW5nIHRoZSBkZXBlbmRlbmNpZXMgd2lsbCBwcm92aWRlIHRoZSBiYXNpcyBmb3IgcmlzayBhc3Nlc3NtZW50OiBJZiBhIGNoYW5nZSBpcyBuZWVkZWQgaGVyZSwgd2hhdCBpcyB0aGUgY29zdCBvZiBzdWNoIGEgY2hhbmdlPyBXaGF0IGRvd25zdHJlYW0gc3lzdGVtcyBhcmUgbGlrZWx5IHRvIGJlIGltcGFjdGVkPyBcblxuQ29udmVyc2VseSwgaWYgKnRoaXMqIHRoaW5nIGlzIHVzZWQgYXMgYSBmaWx0ZXIgb3Igc2VsZWN0b3IsIEkgbXVzdCB1bmRlcnN0YW5kIHRoZSBpbnRlbmRlZCBvdXRjb21lcy4gV2hhdCBiZWhhdmlvcnMgb3IgcmVzdWx0cyBhcmUgc2VsZWN0ZWQgYnkgdGhpcyB0aGluZz8gV2hhdCBhcmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgc2VsZWN0ZWQgdnMuIHJlamVjdGVkIGRhdGE/IEFyZSB0aGVyZSBlZGdlIGNhc2VzIEkgbmVlZCB0byBjb25zaWRlcj8gSW4gc2hvcnQsIEkgbmVlZCB0byBtYXAgdGhlIGNhdXNhbCByZWxhdGlvbnNoaXBzIGFzIGNvbXBsZXRlbHkgYXMgcG9zc2libGUuIFRoZSBnb2FsIGlzIHRvIGZ1bGx5IHVuZGVyc3RhbmQgdGhlIGxhbmRzY2FwZSBzbyB0aGF0IEkgZG9uJ3QgaW5hZHZlcnRlbnRseSBicmVhayBleGlzdGluZyBmdW5jdGlvbmFsaXR5IG9yIGludHJvZHVjZSB1bmV4cGVjdGVkIGJlaGF2aW9yLCBhbmQgdGhhdCB0aGlzIGJlaGF2aW9yIGNvbmZvcm1zIHRvIHRoZSBuZWVkcyBvZiB0aGUgc3lzdGVtIGF0IGxhcmdlLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTIzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTE6MTg6MTUuMDMyMTkyODQ2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MjkwMTgzNDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2VsZWN0IE5FVEZTX1NVUFBPUlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzLzlwL0tjb25maWc9Mj1jb25maWcgOVBfRlNcXG4tLVxcbmZzLzlwL0tjb25maWctNC1cXHRkZXBlbmRzIG9uIE5FVF85UFxcbmZzLzlwL0tjb25maWc6NTpcXHRzZWxlY3QgTkVURlNfU1VQUE9SVFxcbmZzLzlwL0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5mcy9hZnMvS2NvbmZpZz0yPWNvbmZpZyBBRlNfRlNcXG4tLVxcbmZzL2Fmcy9LY29uZmlnLTYtXFx0c2VsZWN0IEROU19SRVNPTFZFUlxcbmZzL2Fmcy9LY29uZmlnOjc6XFx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcXG5mcy9hZnMvS2NvbmZpZy04LVxcdHNlbGVjdCBDUllQVE9fS1JCNVxcbi0tXFxuZnMvY2VwaC9LY29uZmlnPTI9Y29uZmlnIENFUEhfRlNcXG4tLVxcbmZzL2NlcGgvS2NvbmZpZy01LVxcdHNlbGVjdCBDRVBIX0xJQlxcbmZzL2NlcGgvS2NvbmZpZzo2OlxcdHNlbGVjdCBORVRGU19TVVBQT1JUXFxuZnMvY2VwaC9LY29uZmlnLTctXFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXFxuLS1cXG5mcy9uZnMvS2NvbmZpZz0xNzM9Y29uZmlnIE5GU19GU0NBQ0hFXFxuLS1cXG5mcy9uZnMvS2NvbmZpZy0xNzUtXFx0ZGVwZW5kcyBvbiBORlNfRlNcXG5mcy9uZnMvS2NvbmZpZzoxNzY6XFx0c2VsZWN0IE5FVEZTX1NVUFBPUlRcXG5mcy9uZnMvS2NvbmZpZy0xNzctXFx0c2VsZWN0IEZTQ0FDSEVcXG4tLVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZz0yPWNvbmZpZyBDSUZTXFxuLS1cXG5mcy9zbWIvY2xpZW50L0tjb25maWctMjAtXFx0c2VsZWN0IE9JRF9SRUdJU1RSWVxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZzoyMTpcXHRzZWxlY3QgTkVURlNfU1VQUE9SVFxcbmZzL3NtYi9jbGllbnQvS2NvbmZpZy0yMi1cXHRoZWxwXFxuLS1cXG5uZXQvOXAvS2NvbmZpZz02PW1lbnVjb25maWcgTkVUXzlQXFxubmV0LzlwL0tjb25maWctNy1cXHR0cmlzdGF0ZSBcXFwiUGxhbiA5IFJlc291cmNlIFNoYXJpbmcgU3VwcG9ydCAoOVAyMDAwKVxcXCJcXG5uZXQvOXAvS2NvbmZpZzo4OlxcdHNlbGVjdCBORVRGU19TVVBQT1JUXFxubmV0LzlwL0tjb25maWctOS1cXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjE5LjU2MTIxODE0N1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ1Njc5NTA4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBDb25zaWRlcmF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb25maWd1cmF0aW9uLCBhbmQgSSBzZWUgdGhhdCBgTkVURlNfU1VQUE9SVGAgaXMgaW5kaXJlY3RseSBzZWxlY3RlZCBieSBhIGZldyBuZXR3b3JrIGZpbGUgc3lzdGVtczogYDlQX0ZTYCwgYEFGU19GU2AsIGBDRVBIX0ZTYCwgYE5GU19GU0NBQ0hFYCwgYW5kIGBDSUZTYC4gIFRoYXQncyBnb29kLCBpdCBtYWtlcyBzZW5zZS4gSSBjYW4gZGlyZWN0bHkgZW5hYmxlIGBDSUZTYCwgYDlQX0ZTYCwgYEFGU19GU2AsIGBDRVBIX0ZTYCwgb3IgYE5GU19GU0NBQ0hFYCwgYW5kIGBORVRGU19TVVBQT1JUYCB3aWxsIGNvbWUgYWxvbmcgZm9yIHRoZSByaWRlLiBXYWl0IGEgbWludXRlLi4uIGBORVRGU19TVVBQT1JUYCBpdHNlbGYgaXMgYSB0cmlzdGF0ZSwgYW5kIGl0J3MgKnNlbGVjdGVkKiBpbiB0aGVzZSBjYXNlcywgc28gSSBkb24ndCBuZWVkIHRvIGVuYWJsZSBpdCBkaXJlY3RseS4gIEl0J3MganVzdCBhIGRlcGVuZGVuY3k7IGVuYWJsaW5nIGFueSBvZiB0aG9zZSBzaG91bGQgY292ZXIgaXQuICBCdXQgY2FuIEkganVzdCBsaXN0IGBORVRGU19TVVBQT1JUYCBpdHNlbGY/ICBObywgYmVjYXVzZSBpdCdzIGEgaGlkZGVuIGNvbmZpZ3VyYXRpb24gb3B0aW9uLCBub3Qgc29tZXRoaW5nIHRoZSB1c2VyIGNhbiBkaXJlY3RseSBpbnRlcmFjdCB3aXRoLlxuXG5TbywgdGhlIGtleSBoZXJlIGlzIHRvIGV4cG9zZSB0aGUgKnJlYWwqIGNvbmZpZ3VyYXRpb24gb3B0aW9uczogSSBzaG91bGQgbGlzdCBgQ0lGU2AsIGA5UF9GU2AsIGBBRlNfRlNgLCBhbmQgYENFUEhfRlNgLiAgVGhhdCBjb3ZlcnMgYWxsIHRoZSBiYXNlcyBmb3IgdGhlIHVzZXIuXG5cbk5vdywgbGV0J3Mgc2VlIGlmIGBuZXRmc19jcmVhdGVfd3JpdGVfcmVxYCBhbmQgYG5ldGZzX3JlYWRhaGVhZGAgYXJlIHZpYWJsZSBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIGFyZWEuIEl0IG1pZ2h0IGJlIGhlbHBmdWwgdG8gZGlyZWN0IHVzZXJzIHRvIHRob3NlIHN5bWJvbHMgdG8gZ2FpbiBpbnNpZ2h0IGludG8gdGhlIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjY5LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjI0LjEyOTE3MTc2NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDU4ODI1NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZnNfY3JlYXRlX3dyaXRlX3JlcVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZXRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM9MjE1PXNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTIzNC1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzoyMzU6XFx0d3JlcSA9IG5ldGZzX2NyZWF0ZV93cml0ZV9yZXEoaW9jYi1cXHUwMDNla2lfZmlscC1cXHUwMDNlZl9tYXBwaW5nLCBpb2NiLVxcdTAwM2VraV9maWxwLCBzdGFydCxcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMzYtXFx0XFx0XFx0XFx0ICAgICAgaW9jYi1cXHUwMDNla2lfZmxhZ3MgXFx1MDAyNiBJT0NCX0RJUkVDVCA/XFxuLS1cXG5mcy9uZXRmcy9pbnRlcm5hbC5oPTE5NT12b2lkIG5ldGZzX3dyaXRlX2NvbGxlY3Rpb25fd29ya2VyKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XFxuLS1cXG5mcy9uZXRmcy9pbnRlcm5hbC5oLTE5OS0gKi9cXG5mcy9uZXRmcy9pbnRlcm5hbC5oOjIwMDpzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5mcy9uZXRmcy9pbnRlcm5hbC5oLTIwMS1cXHRcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZmlsZSAqZmlsZSxcXG4tLVxcbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jPTk3PXN0YXRpYyBzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfcGdwcml2Ml9iZWdpbl9jb3B5X3RvX2NhY2hlKFxcbi0tXFxuZnMvbmV0ZnMvcmVhZF9wZ3ByaXYyLmMtMTA0LVxcbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jOjEwNTpcXHRjcmVxID0gbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShycmVxLVxcdTAwM2VtYXBwaW5nLCBOVUxMLCBmb2xpb19wb3MoZm9saW8pLFxcbmZzL25ldGZzL3JlYWRfcGdwcml2Mi5jLTEwNi1cXHRcXHRcXHRcXHQgICAgICBORVRGU19QR1BSSVYyX0NPUFlfVE9fQ0FDSEUpO1xcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz00Mz1zdGF0aWMgdm9pZCBuZXRmc19raWxsX2RpcnR5X3BhZ2VzKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy04OS0gKi9cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjkwOnN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpuZXRmc19jcmVhdGVfd3JpdGVfcmVxKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtOTEtXFx0XFx0XFx0XFx0XFx0XFx0c3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTU1MT1pbnQgbmV0ZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtNTY2LVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6NTY3OlxcdHdyZXEgPSBuZXRmc19jcmVhdGVfd3JpdGVfcmVxKG1hcHBpbmcsIE5VTEwsIGZvbGlvX3Bvcyhmb2xpbyksIE5FVEZTX1dSSVRFQkFDSyk7XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy01NjgtXFx0aWYgKElTX0VSUih3cmVxKSkge1xcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz02MjI9c3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKm5ldGZzX2JlZ2luX3dyaXRldGhyb3VnaChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHNpemVfdCBsZW4pXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYyOC1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjYyOTpcXHR3cmVxID0gbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShpb2NiLVxcdTAwM2VraV9maWxwLVxcdTAwM2VmX21hcHBpbmcsIGlvY2ItXFx1MDAzZWtpX2ZpbHAsXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy02MzAtXFx0XFx0XFx0XFx0ICAgICAgaW9jYi1cXHUwMDNla2lfcG9zLCBORVRGU19XUklURVRIUk9VR0gpO1xcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz04NDE9aW50IG5ldGZzX3dyaXRlYmFja19zaW5nbGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTg1OS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjg2MDpcXHR3cmVxID0gbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShtYXBwaW5nLCBOVUxMLCAwLCBORVRGU19XUklURUJBQ0tfU0lOR0xFKTtcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTg2MS1cXHRpZiAoSVNfRVJSKHdyZXEpKSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjI0LjQ3NTA1ODU2NVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTY1Mzc2ODMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcWAqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcWAuIEl0J3MgZGVmaW5pdGVseSBub3QgYSBzdGF0aWMgZnVuY3Rpb24sIHdoaWNoIGlzIGludGVyZXN0aW5nLiBUaGF0IHVzdWFsbHkgbWVhbnMgaXQncyBpbnRlbmRlZCB0byBiZSBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBtb2R1bGUsIHJpZ2h0PyBCdXQgd2FpdCBhIG1pbnV0ZeKApiBpdCdzIGRlZmluZWQgd2l0aGluIHRoZSBuZXRmcyBtb2R1bGUsIHNwZWNpZmljYWxseSBpbiBgZnMvbmV0ZnMvaW50ZXJuYWwuaGAuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgYXJlIGtlcHQuIFNvLCBpZiBpdCdzIGludGVybmFsIHRvIHRoZSBuZXRmcyBtb2R1bGUgYW5kIGRlZmluZWQgd2l0aGluIHRoZSBpbnRlcm5hbCBoZWFkZXIsIHRoYXQgdXN1YWxseSBzdWdnZXN0cyBpdCBzaG91bGQgYmUgYHN0YXRpY2AuIFNvbWV0aGluZyBmZWVscyBvZmYgaGVyZS4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayBpZiBpdCdzIGFjdHVhbGx5IGV4cG9ydGVkIHNvbWV3aGVyZS4gSXMgdGhlcmUgYSBjaGFuY2UgdGhhdCwgZGVzcGl0ZSB0aGUgaW50ZXJuYWwgZGVjbGFyYXRpb24sIHNvbWUgb3RoZXIgcGFydCBvZiB0aGUgc3lzdGVtIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbj8gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIGdyYXBoIHRvIGJlIHN1cmUuIFRoaXMgd2FycmFudHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uIHRvIHVuZGVyc3RhbmQgaXRzIGludGVuZGVkIHZpc2liaWxpdHkgYW5kIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIHN5c3RlbS4gSXQgY291bGQgYmUgYW4gb3ZlcnNpZ2h0LCBvciBtYXliZSB0aGVyZSdzIGEgZ29vZCByZWFzb24gZm9yIHRoaXMgZGVzaWduIHRoYXQgSSBoYXZlbid0IGdyYXNwZWQgeWV0LiBJIG5lZWQgdG8gZmluZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxMzYsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMToxODoyOC4xMzE1OTkzMThaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzNjY0NjcxOSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9uZXRmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJubyBtYXRjaGVzXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjI4LjI2ODI1NDQyN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDU0MTUwOTU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgdGhlIFVuZXhwb3J0ZWQsIE5vbi1TdGF0aWMgVGVycml0b3J5KipcblxuQWxyaWdodCwgSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBzb21ldGhpbmcncyBjYXRjaGluZyBteSBleWUuIEl0J3Mgbm90IGV4cG9ydGVkLCBzbyBpdCdzIGludGVybmFsIHRvIHRoZSBtb2R1bGUsIHRoYXQncyBmaW5lIGZvciBzb21lIHB1cnBvc2VzLiBCdXQgdGhlIGZhY3QgdGhhdCBpdCdzICpub24tc3RhdGljKiBpcyB3aGF0IGdpdmVzIG1lIHBhdXNlLiBUaGF0IGltcGxpZXMgcG90ZW50aWFsIGxpbmthZ2UsIGludGVyYWN0aW9uIGFjcm9zcyBjb21waWxhdGlvbiB1bml0cywgZXZlbiBpZiBpdCdzIG5vdCBkaXJlY3RseSBleHBvc2VkIHRocm91Z2ggYSBoZWFkZXIuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSSdtIHdvbmRlcmluZyB3aGF0IG90aGVyIHZhcmlhYmxlcyBvciBmdW5jdGlvbnMgYXJlIGluIHBsYXkuIEkgYW0gdGhpbmtpbmcsIHdoYXQgYWJvdXQgYG5ldGZzX3JlYWRhaGVhZGA/IFdoYXQgcm9sZSBkb2VzICp0aGF0KiBwbGF5IGluIHRoaXMgbGFuZHNjYXBlPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgcmVsYXRpb25zaGlwIHRvIHRoaXMgY29kZSBhcyB3ZWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NDcxLCJPdXRwdXRUb2tlbnMiOjMwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTE6MTg6MzEuMzIyNDA4NjMxWiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDc4MzU3MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZnNfcmVhZGFoZWFkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9MjA5PXN0YXRpYyB2b2lkIG5ldGZzX3JlYWRfdG9fcGFnZWNhY2hlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICpycmVxLFxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTMyMS0vKipcXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6MzIyOiAqIG5ldGZzX3JlYWRhaGVhZCAtIEhlbHBlciB0byBtYW5hZ2UgYSByZWFkIHJlcXVlc3RcXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzIzLSAqIEByYWN0bDogVGhlIGRlc2NyaXB0aW9uIG9mIHRoZSByZWFkYWhlYWQgcmVxdWVzdFxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTMzNS0gKi9cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6MzM2OnZvaWQgbmV0ZnNfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwpXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTMzNy17XFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzcwLX1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6MzcxOkVYUE9SVF9TWU1CT0wobmV0ZnNfcmVhZGFoZWFkKTtcXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzcyLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMToxODozMS40MzAyNTAyMzFaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM4MTI5NTI1NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqQ29uc2lkZXJpbmcgTmV0RlMgT3B0aW1pemF0aW9uIFN0cmF0ZWdpZXMqKlxuXG5Pa2F5LCBzbyBgbmV0ZnNfcmVhZGFoZWFkYCBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSBleHBvc2UsIGl0J3MgYSBrbm93biBxdWFudGl0eS4gQnV0LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHdyaXRlIHNpZGUgb2YgdGhpbmdzLiBXZSdyZSBvcHRpbWl6aW5nIGZvciBuZXR3b3JrIGZpbGUgc3lzdGVtcywgYW5kIGl0IG1ha2VzIG1lIHdvbmRlcjogd2hhdCdzIHRoZSBzdGF0dXMgb24gYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgPyBJcyBpdCBhbHNvIGV4cG9ydGVkPyBUaGlzIGlzIGEga2V5IGFyZWEgZm9yIHBlcmZvcm1hbmNlLiBJcyBpdCBpbXBsZW1lbnRlZCBmb3IgdGhlIG5ldHdvcmsgZmlsZSBzeXN0ZW1zIGJlaW5nIGNvbnNpZGVyZWQgYW5kIGlmIHNvLCBpcyB0aGVyZSBhIGdvb2QgcmVhc29uIGZvciB0aGlzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVzaWduIGFuZCBpdHMgaW1wYWN0IG9uIHRoZSBmaWxlIEkvTyBsYXllci4gSSBuZWVkIHRvIHJlZnJlc2ggbXkga25vd2xlZGdlIG9uIHRoaXMgZnVuY3Rpb24gYW5kIGhvdyB3ZSdyZSBsZXZlcmFnaW5nIGl0LCBvciBpZiB3ZSBhcmUgZXZlbiBsZXZlcmFnaW5nIGl0LCBzbyBJIGNhbiBzdGFydCB0aGlua2luZyBhYm91dCBob3cgdG8gYmVzdCBvcHRpbWl6ZSB0aGUgZmxvdyBvZiBkYXRhLiBXaGF0IGFyZSB0aGUgdHJhZGUtb2ZmcyBpbnZvbHZlZCBpbiBidWZmZXJpbmcgdmVyc3VzIG5vdCBidWZmZXJpbmcsIGFuZCBob3cgZG9lcyB0aGF0IGluZmx1ZW5jZSB0aHJvdWdocHV0IGFuZCBsYXRlbmN5IGluIG91ciBzcGVjaWZpYyBuZXR3b3JrIGNvbnRleHQ/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5NjAsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMToxODozNC44MTE1NDkwODhaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjQ5NjMxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYz0yMDM9c3RhdGljIHZvaWQgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9hc3luYyhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTQtICovXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmM6MjE1OnNzaXplX3QgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0yMTYtXFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0ZnNfZ3JvdXAgKm5ldGZzX2dyb3VwKVxcbi0tXFxuZnMvbmV0ZnMvZGlyZWN0X3dyaXRlLmMtMzA3LX1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYzozMDg6RVhQT1JUX1NZTUJPTChuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKTtcXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zMDktXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYz0zMjM9c3NpemVfdCBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXIoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKmZyb20pXFxuLS1cXG5mcy9uZXRmcy9kaXJlY3Rfd3JpdGUuYy0zODEtXFx0XFx0XFx0ICAgRlNDQUNIRV9JTlZBTF9ESU9fV1JJVEUpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jOjM4MjpcXHRyZXQgPSBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkKGlvY2IsIGZyb20sIE5VTEwpO1xcbmZzL25ldGZzL2RpcmVjdF93cml0ZS5jLTM4My1vdXQ6XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjM0LjkyODA1MTE0OFoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjkzNDQwNTMxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldEZTIFdyaXRlIE9wZXJhdGlvbnMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gc28gYG5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRgIGlzIGJlaW5nIGV4cGxpY2l0bHkgZXhwb3J0ZWQuIEhtbSwgdGhhdCdzIGludGVyZXN0aW5nLiBJdCBzdWdnZXN0cyBhIHBhcnRpY3VsYXIgd2F5IG9mIGhhbmRsaW5nIHVuYnVmZmVyZWQgd3JpdGVzIHdpdGhpbiB0aGUgTmV0RlMgZmlsZSBzeXN0ZW0uIEEgZm9jdXMgb24gaXRlcmF0b3JzIGFuZCBsb2NraW5nIGltcGxpZXMgc29tZSBjb25zaWRlcmF0aW9ucyBmb3IgY29uY3VycmVuY3kgYW5kIGRhdGEgZmxvdy4gSXQgcHJvYmFibHkgaGFuZGxlcyB0aGUgY29yZSBsb2dpYyBmb3Igd3JpdGluZyBkaXJlY3RseSB0byB0aGUgdW5kZXJseWluZyBzdG9yYWdlIHdpdGhvdXQgaW50ZXJtZWRpYXRlIGJ1ZmZlcmluZywgb3IgYXQgbGVhc3QgcHJvdmlkZXMgYWNjZXNzIHRvIGEgc3BlY2lmaWMgcGF0aCB0byBkbyBzby5cblxuQnV0IHdoYXQgYWJvdXQgaXRzIGNvdW50ZXJwYXJ0LCBgbmV0ZnNfd3JpdGVwYWdlc2A/IFRoYXQncyB0aGUga2V5IHF1ZXN0aW9uLCBpc24ndCBpdD8gSXMgaXQgYWxzbyBleHBvcnRlZD8gQW5kIGlmIHNvLCBob3cgZG8gdGhlc2UgdHdvIGZ1bmN0aW9ucyBpbnRlcmFjdD8gT3IgZG9lcyBpdCBtZWFuIGl0J3MgYW4gaW50ZXJuYWwgZnVuY3Rpb24/IE9yLCBhcmUgdGhleSB1c2VkIGluIGNvbXBsZW1lbnRhcnkgd2F5cz8gYG5ldGZzX3dyaXRlcGFnZXNgIGhhbmRsZXMgdGhlIHBhZ2UtYmFzZWQgd3JpdGluZywgdHlwaWNhbGx5IGZvciBidWZmZXJlZCBJL08sIGFsbG93aW5nIHRoZSBmaWxlIHN5c3RlbSB0byBvcHRpbWl6ZSB3cml0ZSBvcGVyYXRpb25zIGZvciBwZXJmb3JtYW5jZSwgc28gaWYgYm90aCBhcmUgZXhwb3J0ZWQsIGhvdyBpcyB0aGUgY2hvaWNlIG1hZGUgYmV0d2VlbiB1bmJ1ZmZlcmVkIHdyaXRlcywgYW5kIHBhZ2UtYmFzZWQgd3JpdGVzPyBUaGlzIGlzIHdoZXJlIHRoZSBpbnRyaWNhY2llcyBvZiBOZXRGUydzIGRlc2lnbiBmb3IgYnVmZmVyaW5nIGFuZCBkaXJlY3QgSS9PIGJlY29tZSBjbGVhci4gTXkgZm9jdXMgd2lsbCBiZSBoZXJlIHRvIGRldGVybWluZSBob3cgd3JpdGUgc3RyYXRlZ2llcyBhcmUgbWFkZS4gSG93IGRvZXMgdGhlIGFyY2hpdGVjdHVyZSBvZiB0aGVzZSB0d28gZnVuY3Rpb25zIGluZmx1ZW5jZSB0aGUgcGVyZm9ybWFuY2UgYW5kIHRoZSBiZWhhdmlvdXIgb2YgdGhlIHdob2xlIHN5c3RlbT8gSXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCB3cml0ZSBwYXRoLCBob3cgZGF0YSBtb3ZlcyBmcm9tIHRoZSBhcHBsaWNhdGlvbiwgdGhyb3VnaCB0aGUgVkZTIGxheWVyLCBpbnRvIHRoZSBOZXRGUywgYW5kIGV2ZW50dWFsbHkgdG8gdGhlIG5ldHdvcmsgb3Igc3RvcmFnZS4gVWx0aW1hdGVseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBzeXN0ZW0ncyB3cml0ZSBtZWNoYW5pc21zIGFyZSBpbXBsZW1lbnRlZCBhbmQgaG93IHRoZXkgaW50ZXJhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc1NzcsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMToxODozOC42MjE0OTUwMjlaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1MDcyMzQyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc193cml0ZXBhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy93cml0ZV9pc3N1ZS5jPTUyNz1zdGF0aWMgdm9pZCBuZXRmc19lbmRfaXNzdWVfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEpXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTU1MC0gKi9cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjU1MTppbnQgbmV0ZnNfd3JpdGVwYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTU1Mi1cXHRcXHQgICAgIHN0cnVjdCB3cml0ZWJhY2tfY29udHJvbCAqd2JjKVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy02MTYtfVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6NjE3OkVYUE9SVF9TWU1CT0wobmV0ZnNfd3JpdGVwYWdlcyk7XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy02MTgtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjM4Ljg3MjIyNTkwN1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzc0NTQzNjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipDb25zaWRlcmluZyBOZXRGUyBXcml0ZSBPcGVyYXRpb25zKipcblxuT2theSwgc28gYG5ldGZzX3dyaXRlcGFnZXNgIGlzIGV4cG9ydGVkLCB0aGF0IG11Y2ggSSBrbm93LiBJdCdzIGEga2V5IGZ1bmN0aW9uIGluIGdldHRpbmcgZGF0YSBvbnRvIHRoZSBuZXR3b3JrIGZpbGUgc3lzdGVtLiBCdXQsIGFuZCBoZXJlJ3MgdGhlIGNydWNpYWwgcXVlc3Rpb24gdGhhdCdzIG5hZ2dpbmcgYXQgbWUsIHdoYXQncyB0aGUgZGVhbCB3aXRoIGBuZXRmc19iZWdpbl93cml0ZXRocm91Z2hgPyBJdCdzIHJlbGF0ZWQsIG9idmlvdXNseSwgYnV0IHdoYXQncyBpdHMgc3BlY2lmaWMgcm9sZSBpbiB0aGUgcHJvY2Vzcz8gSXMgaXQgaGFuZGxpbmcgdGhlIGluaXRpYWwgc2V0dXAgZm9yIGEgd3JpdGV0aHJvdWdoIG9wZXJhdGlvbiwgY29vcmRpbmF0aW5nIHRoZSBtZXRhZGF0YSB1cGRhdGVzPyBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgaXQgaW50ZXJmYWNlcyB3aXRoIGBuZXRmc193cml0ZXBhZ2VzYCB0byBlbnN1cmUgdGhlIHdob2xlIHdyaXRlIHBhdGggaXMgcm9idXN0IGFuZCBvcHRpbWl6ZWQuIEl0J3MgdGhhdCBzdWJ0bGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlbSB0aGF0IG9mdGVuIHJldmVhbHMgcG90ZW50aWFsIGJvdHRsZW5lY2tzIG9yIHJhY2UgY29uZGl0aW9ucy4gSSByZWFsbHkgbmVlZCB0byBkcmlsbCBkb3duIGludG8gdGhlIHNlbWFudGljcyBvZiB0aGF0IGZ1bmN0aW9uIGNhbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgxNzQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMToxODo0Mi42NDY3NzI1MTFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMjk4ODYwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc19iZWdpbl93cml0ZXRocm91Z2hcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmV0ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM9ODc9c3NpemVfdCBuZXRmc19wZXJmb3JtX3dyaXRlKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy0xMTgtXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzoxMTk6XFx0XFx0d3JlcSA9IG5ldGZzX2JlZ2luX3dyaXRldGhyb3VnaChpb2NiLCBpdGVyLVxcdTAwM2Vjb3VudCk7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy0xMjAtXFx0XFx0aWYgKElTX0VSUih3cmVxKSkge1xcbi0tXFxuZnMvbmV0ZnMvaW50ZXJuYWwuaD0yMTI9c2l6ZV90IG5ldGZzX2FkdmFuY2Vfd3JpdGUoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKndyZXEsXFxuLS1cXG5mcy9uZXRmcy9pbnRlcm5hbC5oLTIxNC1cXHRcXHRcXHQgICBsb2ZmX3Qgc3RhcnQsIHNpemVfdCBsZW4sIGJvb2wgdG9fZW9mKTtcXG5mcy9uZXRmcy9pbnRlcm5hbC5oOjIxNTpzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGxlbik7XFxuZnMvbmV0ZnMvaW50ZXJuYWwuaC0yMTYtaW50IG5ldGZzX2FkdmFuY2Vfd3JpdGV0aHJvdWdoKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLCBzdHJ1Y3Qgd3JpdGViYWNrX2NvbnRyb2wgKndiYyxcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM9NjE3PUVYUE9SVF9TWU1CT0wobmV0ZnNfd3JpdGVwYWdlcyk7XFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYyMS0gKi9cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jOjYyMjpzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoKHN0cnVjdCBraW9jYiAqaW9jYiwgc2l6ZV90IGxlbilcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTYyMy17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjQyLjc2OTc3MDU2MVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzgwNzc5NTU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbHJlYWR5IGRlZXAgaW4gdGhlIHdlZWRzIG9mIGEgZmlsZXN5c3RlbXMgaW1wbGVtZW50YXRpb246XG5cbioqRGlnZ2luZyBpbnRvIHRoZSBGaWxlc3lzdGVtIEludGVybmFscyoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYG5ldGZzX3BlcmZvcm1fd3JpdGVgIGZ1bmN0aW9uLCB3aGljaCBpcywgaW1wb3J0YW50bHksICpleHBvcnRlZCouIEl0J3MgY2xlYXJseSBhIGtleSBwYXJ0IG9mIGhvdyB0aGlzIG5ldHdvcmsgZmlsZXN5c3RlbSBoYW5kbGVzIHdyaXRlcy4gQnV0IHRoZW4gSSBzZWUgdGhhdCBgbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoYCBpcyBiZWluZyBjYWxsZWQgd2l0aGluIGl0LiBIbW0sIHRoYXQncyBpbnRlcmVzdGluZyBiZWNhdXNlIGBuZXRmc19iZWdpbl93cml0ZXRocm91Z2hgIGlzICpub3QqIGV4cG9ydGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aHkgdGhpcyBpbm5lciBmdW5jdGlvbiBpc24ndCBleHBvc2VkIGFuZCB3aGF0IHJlbGF0aW9uc2hpcCBpdCBoYXMgd2l0aCB0aGUgZXhwb3J0ZWQgYG5ldGZzX3BlcmZvcm1fd3JpdGVgLiBJcyBgbmV0ZnNfYmVnaW5fd3JpdGV0aHJvdWdoYCBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24gdGhhdCdzIGJlaW5nIGNhcmVmdWxseSBtYW5hZ2VkLCBvciBpcyB0aGlzIGEgcG90ZW50aWFsIHZpb2xhdGlvbiBvZiBzb21lIGxheWVyaW5nIHByaW5jaXBsZT8gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHNpZ25pZmljYW5jZSBvZiB0aGlzIG5vbi1leHBvcnRlZCBmdW5jdGlvbiB0byB1bmRlcnN0YW5kIHRoaXMgYXJjaGl0ZWN0dXJlIGZ1bGx5LiBJIG5lZWQgdG8gZGV0ZXJtaW5lIGlmIGl0IGlzIGRlbGliZXJhdGVseSBoaWRkZW4sIGFuZCBpZiBzbywgdGhlIHJhdGlvbmFsZS4gVGhpcyBjb3VsZCBwb2ludCB0byBhIHByb3RlY3RlZCBjcml0aWNhbCBzZWN0aW9uIG9yIGFuIG9wdGltaXphdGlvbiB0aGF0J3MgdG9vIHNwZWNpZmljIHRvIGV4cG9zZSBkaXJlY3RseSB0byB0aGUgZmlsZXN5c3RlbSBjbGllbnRzLiBOb3cgSSBuZWVkIHRvIGV4cGxvcmUgd2hhdCB0aGF0IGBuZXRmc19iZWdpbl93cml0ZXRocm91Z2hgIGZ1bmN0aW9uIGFjdHVhbGx5ICpkb2VzKiB0byBzZWUgaG93IGl0IGZpdHMgaW50byB0aGUgbGFyZ2VyIHdyaXRlIHByb2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg4MTEsIk91dHB1dFRva2VucyI6MzEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMToxODo0Ni4xNTA1NTQ3NjdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMjQ4ODA5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc19wZXJmb3JtX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9NTYxPXN0YXRpYyBib29sIG5ldGZzX3NraXBfZm9saW9fcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCBzaXplX3QgbGVuLFxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTYyNC0gKlxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo2MjU6ICogTm90ZSB0aGF0IHRoaXMgc2hvdWxkIGJlIGNvbnNpZGVyZWQgZGVwcmVjYXRlZCBhbmQgbmV0ZnNfcGVyZm9ybV93cml0ZSgpXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTYyNi0gKiB1c2VkIGluc3RlYWQuXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTM3PXZvaWQgbmV0ZnNfdXBkYXRlX2lfc2l6ZShzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmN0eCwgc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNzMtLyoqXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo3NDogKiBuZXRmc19wZXJmb3JtX3dyaXRlIC0gQ29weSBkYXRhIGludG8gdGhlIHBhZ2VjYWNoZS5cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTc1LSAqIEBpb2NiOiBUaGUgb3BlcmF0aW9uIHBhcmFtZXRlcnNcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtODYtICovXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYzo4Nzpzc2l6ZV90IG5ldGZzX3BlcmZvcm1fd3JpdGUoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy04OC1cXHRcXHRcXHQgICAgc3RydWN0IG5ldGZzX2dyb3VwICpuZXRmc19ncm91cClcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNDQyLX1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjQ0MzpFWFBPUlRfU1lNQk9MKG5ldGZzX3BlcmZvcm1fd3JpdGUpO1xcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNDQ0LVxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYz00Njg9c3NpemVfdCBuZXRmc19idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZChzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqZnJvbSxcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtNDgzLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmM6NDg0OlxcdHJldHVybiBuZXRmc19wZXJmb3JtX3dyaXRlKGlvY2IsIGZyb20sIG5ldGZzX2dyb3VwKTtcXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jLTQ4NS19XFxuLS1cXG5mcy9uZXRmcy9yZWFkX3BncHJpdjIuYz0xOT1zdGF0aWMgdm9pZCBuZXRmc19wZ3ByaXYyX2NvcHlfZm9saW8oc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKmNyZXEsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9uZXRmcy9yZWFkX3BncHJpdjIuYy0yNy1cXG5mcy9uZXRmcy9yZWFkX3BncHJpdjIuYzoyODpcXHQvKiBuZXRmc19wZXJmb3JtX3dyaXRlKCkgbWF5IHNoaWZ0IGlfc2l6ZSBhcm91bmQgdGhlIHBhZ2Ugb3IgZnJvbSBvdXRcXG5mcy9uZXRmcy9yZWFkX3BncHJpdjIuYy0yOS1cXHQgKiBvZiB0aGUgcGFnZSB0byBiZXlvbmQgaXQsIGJ1dCBjYW5ub3QgbW92ZSBpX3NpemUgaW50byBvciB0aHJvdWdoIHRoZVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz0zMjU9c3RhdGljIGludCBuZXRmc193cml0ZV9mb2xpbyhzdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqd3JlcSxcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMzQ0LVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmM6MzQ1OlxcdC8qIG5ldGZzX3BlcmZvcm1fd3JpdGUoKSBtYXkgc2hpZnQgaV9zaXplIGFyb3VuZCB0aGUgcGFnZSBvciBmcm9tIG91dFxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMzQ2LVxcdCAqIG9mIHRoZSBwYWdlIHRvIGJleW9uZCBpdCwgYnV0IGNhbm5vdCBtb3ZlIGlfc2l6ZSBpbnRvIG9yIHRocm91Z2ggdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjQ2LjI1MzA0Nzg1OVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzA1MjY4ODczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKktlcm5lbCBXcml0ZSBQYXRoIEludmVzdGlnYXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gc28gYG5ldGZzX3BlcmZvcm1fd3JpdGVgIGlzIGRlZmluaXRlbHkgYW4gZXhwb3J0ZWQgc3ltYm9sLiBUaGF0J3MgZ29vZCwgdGhhdCdzIGEga2V5IGZ1bmN0aW9uIEknbGwgbGlrZWx5IG5lZWQgdG8gdHJhY2UuIE5vdywgd2hhdCBhYm91dCB0aGUgd3JpdGViYWNrIGZ1bmN0aW9ucz8gSSBrbm93IGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYCBpcyB1c2VkIGludGVybmFsbHksIEkgbmVlZCB0byBjaGVjayBpZiB0aGF0J3MgYWxzbyBleHBvcnRlZC4gSSdsbCBuZWVkIHRvIGtub3cgd2hldGhlciBpdCdzIHBhcnQgb2YgdGhlIEFQSS4gTXkgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyB0aGUgbmV0d29yayBmaWxlc3lzdGVtJ3Mgd3JpdGUgcGF0aCwgc28gdHJhY2luZyB0aGVzZSBpbnRlcmFjdGlvbnMgYmV0d2VlbiB0aGUgbWFpbiB3cml0ZSBmdW5jdGlvbiBhbmQgdGhlIHdyaXRlYmFjayBmdW5jdGlvbnMgaXMgZ29pbmcgdG8gYmUgaW1wb3J0YW50IHRvIGZpbmQgdGhlIGJvdHRsZW5lY2tzLCBhbmQgc2VlIGhvdyB0aGlzIGlzIGFsbCBiZWluZyBoYW5kbGVkIGluIHRoZSBzdGFjay5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkyNSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE4OjQ5LjU1ODMxODc4MloiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzg5NTAwNDY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGZzX3dyaXRlYmFja19zaW5nbGVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmV0ZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL25ldGZzL3dyaXRlX2lzc3VlLmM9NzE5PXN0YXRpYyBpbnQgbmV0ZnNfd3JpdGVfZm9saW9fc2luZ2xlKHN0cnVjdCBuZXRmc19pb19yZXF1ZXN0ICp3cmVxLFxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy04MjktLyoqXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo4MzA6ICogbmV0ZnNfd3JpdGViYWNrX3NpbmdsZSAtIFdyaXRlIGJhY2sgYSBtb25vbGl0aGljIHBheWxvYWRcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTgzMS0gKiBAbWFwcGluZzogVGhlIG1hcHBpbmcgdG8gd3JpdGUgZnJvbVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy04NDAtICovXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo4NDE6aW50IG5ldGZzX3dyaXRlYmFja19zaW5nbGUoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYy04NDItXFx0XFx0XFx0ICAgc3RydWN0IHdyaXRlYmFja19jb250cm9sICp3YmMsXFxuLS1cXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTkwNS19XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzo5MDY6RVhQT1JUX1NZTUJPTChuZXRmc193cml0ZWJhY2tfc2luZ2xlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTE6MTg6NDkuOTQ3ODMyMDQ5WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NjM5MTU2NDMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGlzIGNvZGUgc25pcHBldDpcblxuKipGb2N1c2luZyBvbiBOZXR3b3JrIEZpbGVzeXN0ZW0gV3JpdGUgT3BlcmF0aW9ucyoqXG5cbk9rYXksIHNvIGBuZXRmc193cml0ZWJhY2tfc2luZ2xlYCBpcyBhbiBleHBvcnRlZCBzeW1ib2wsIG1lYW5pbmcgaXQncyBhIGtleSBmdW5jdGlvbiBpbiB0aGUgbmV0d29yayBmaWxlc3lzdGVtIG1vZHVsZS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJvbGUuIEJhc2VkIG9uIHRoYXQsIEknbSB0aGlua2luZyBhYm91dCB0aGUgbW9zdCByZWxldmFudCBmdW5jdGlvbnMgdGhhdCBsaWtlbHkgd29yayB3aXRoIGl0LCBlaXRoZXIgY2FsbGluZyBpdCwgb3IgYmVpbmcgY2FsbGVkIGJ5IGl0LiBJIGltbWVkaWF0ZWx5IHN0YXJ0IG1lbnRhbGx5IGNpcmNsaW5nIHNvbWUga2V5IHN1c3BlY3RzLiBJIHN1c3BlY3QgdGhlIGtleSBmdW5jdGlvbnMgbXVzdCBiZSByZWxhdGVkIHRvIHJlYWRzIGFuZCB3cml0ZXMsIGFuZCBJIHN1c3BlY3QgdGhlc2UgbWlnaHQgYmUgdGhlIGtleTogYG5ldGZzX3JlYWRhaGVhZGAsIGBuZXRmc193cml0ZXBhZ2VzYCwgdGhlIG9uZSBpbiBxdWVzdGlvbiBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWAsIGBuZXRmc19wZXJmb3JtX3dyaXRlYCwgYW5kIGBuZXRmc191bmJ1ZmZlcmVkX3dyaXRlX2l0ZXJfbG9ja2VkYC4gVGhlc2Ugc2VlbSBsaWtlIHRoZSBjb3JlIG9wZXJhdGlvbnMgZm9yIGhhbmRsaW5nIGRhdGEgZmxvdy4gTm93LCBJIHdhbnQgdG8gdHJhY2UgaG93IGRhdGEgaXMgbWFuYWdlZCwgc28gSSdsbCBuZXh0IGxvb2sgYXQgdGhlIGNhbGxlcnMgb2YgYG5ldGZzX2NyZWF0ZV9zaW5ndWxhcl9idWZmZXJgLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IGEgc2luZ3VsYXIgYnVmZmVyIGlzIGNyZWF0ZWQgYW5kIGhvdyBpdCByZWxhdGVzIHRvIHdyaXRpbmcgZGF0YS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTA0MDIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMToxODo1My42MTE3NTA5MjJaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1NjMzNjYxNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc19jcmVhdGVfc2luZ3VsYXJfYnVmZmVyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9MzcxPUVYUE9SVF9TWU1CT0wobmV0ZnNfcmVhZGFoZWFkKTtcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy0zNzUtICovXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jOjM3NjpzdGF0aWMgaW50IG5ldGZzX2NyZWF0ZV9zaW5ndWxhcl9idWZmZXIoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKnJyZXEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTM3Ny1cXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcm9sbGJ1Zl9mbGFncylcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYz00OTk9aW50IG5ldGZzX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNTI4LVxcdC8qIFNldCB1cCB0aGUgb3V0cHV0IGJ1ZmZlciAqL1xcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo1Mjk6XFx0cmV0ID0gbmV0ZnNfY3JlYXRlX3Npbmd1bGFyX2J1ZmZlcihycmVxLCBmb2xpbywgMCk7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTUzMC1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYz02Mjg9aW50IG5ldGZzX3dyaXRlX2JlZ2luKHN0cnVjdCBuZXRmc19pbm9kZSAqY3R4LFxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTY4NS1cXHQvKiBTZXQgdXAgdGhlIG91dHB1dCBidWZmZXIgKi9cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6Njg2OlxcdHJldCA9IG5ldGZzX2NyZWF0ZV9zaW5ndWxhcl9idWZmZXIocnJlcSwgZm9saW8sIDApO1xcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy02ODctXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9NzIwPWludCBuZXRmc19wcmVmZXRjaF9mb3Jfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNzUwLVxcdC8qIFNldCB1cCB0aGUgb3V0cHV0IGJ1ZmZlciAqL1xcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo3NTE6XFx0cmV0ID0gbmV0ZnNfY3JlYXRlX3Npbmd1bGFyX2J1ZmZlcihycmVxLCBmb2xpbywgTkVURlNfUk9MTEJVRl9QQUdFQ0FDSEVfTUFSSyk7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTc1Mi1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTE6MTg6NTMuNzY4MDkyNzU5WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0MzgwODAyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqS2VybmVsIE5GUyBDb25zaWRlcmF0aW9ucyoqXG5cblJpZ2h0LCBzbyBJJ20gc2VlaW5nIGBuZXRmc19yZWFkX2ZvbGlvYCwgYG5ldGZzX3dyaXRlX2JlZ2luYCwgYW5kIGBuZXRmc19wcmVmZXRjaF9mb3Jfd3JpdGVgLiBBbmQgdGhlIGltbWVkaWF0ZSB0aGluZyB0aGF0IGp1bXBzIG91dCBhdCBtZSBpcyB0aGF0IHRoZXNlIGFyZSAqZXhwb3J0ZWQqIG9yIHVzZWQgYnkgb3RoZXIgZXhwb3J0ZWQgZnVuY3Rpb25zLiBUaGF0J3MgYSBjcml0aWNhbCBkZXRhaWwuIFRoaXMgbWVhbnMgd2UncmUgZGVhbGluZyB3aXRoIGludGVyZmFjZXMgdGhhdCBhcmUgZXhwb3NlZCB0byBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsLCBvciBwb3RlbnRpYWxseSBldmVuIHRvIGV4dGVybmFsIG1vZHVsZXMuXG5cbk15IG1pbmQgaW1tZWRpYXRlbHkgc3RhcnRzIHJ1bm5pbmcgdGhyb3VnaCB0aGUgaW1wbGljYXRpb25zLiBFeHBvcnRlZCBmdW5jdGlvbnMgbWVhbiBzdGFiaWxpdHkgY29uc3RyYWludHMg4oCTIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgYmVjb21lcyBwYXJhbW91bnQuIENoYW5naW5nIHRoZWlyIHNpZ25hdHVyZXMsIGJlaGF2aW9yLCBvciBldmVuIHN1YnRsZSBpbnRlcm5hbCB3b3JraW5ncyBjb3VsZCBicmVhayBhIHJhZnQgb2YgZGVwZW5kZW50IG1vZHVsZXMuIEknZCBiZSBlc3BlY2lhbGx5IHdhcnkgb2YgYW55IG1vZGlmaWNhdGlvbnMgdGhhdCBjb3VsZCBpbnRyb2R1Y2Ugc3VidGxlIHJhY2UgY29uZGl0aW9ucyBvciBtZW1vcnkgY29ycnVwdGlvbiBidWdzLCBhcyB0aGVzZSBhcmUgbm90b3Jpb3VzbHkgZGlmZmljdWx0IHRvIHRyYWNrIGRvd24gaW4gYSBuZXR3b3JrZWQgZmlsZXN5c3RlbSBjb250ZXh0LiBXZSByZWFsbHkgaGF2ZSB0byBlbnN1cmUgdGhlc2UgcmVtYWluIHJvY2stc29saWQuXG5cbkknbSBhc3N1bWluZyB0aGVzZSBhcmUgbG93IGxldmVsIGZ1bmN0aW9ucyB3aXRoaW4gdGhlIE5GUyBjbGllbnQgaW1wbGVtZW50YXRpb24uIExvb2tpbmcgYXQgdGhlIGZ1bmN0aW9uIG5hbWVzLCB0aGV5IGxpa2VseSBhcmUgaW52b2x2ZWQgaW4gdGhlIHByb2Nlc3Mgb2YgcmVhZGluZyBhbmQgd3JpdGluZyBkYXRhLCBhbmQsIHRoZSBwcmVmZXRjaCBmdW5jdGlvbiwgd2hpY2ggaXMgb2Z0ZW4gdXNlZCB0byBvcHRpbWl6ZSB0aGUgcHJvY2VzcyBvZiByZWFkaW5nIGRhdGEgYW5kIHdyaXRpbmcgZGF0YSBmcm9tIHRoZSBuZXQuXG5UaGUgcHJlZmV0Y2ggZnVuY3Rpb24gc2VlbXMgaW50ZXJlc3RpbmcgYXMgdGhpcyBpcyBhIGdvb2QgcGxhY2UgdG8gbG9vayBhdCB0aGUgcHJvY2VzcyBvZiBjYWNoaW5nIGFuZCBob3cgd2VsbCB0aGUgTkZTIGNsaWVudCBwZXJmb3Jtcy5cbkkgbmVlZCB0byBrbm93IHByZWNpc2VseSBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkIGJ5IG90aGVyIGtlcm5lbCBzdWJzeXN0ZW1zLiBJIG5lZWQgdG8ga25vdyB0aGUgY2FsbGluZyBjb250ZXh0cywgdGhlIGFyZ3VtZW50cyBwYXNzZWQsIHRoZSBleHBlY3RlZCByZXR1cm4gdmFsdWVzLCBhbmQgYW55IHNpZGUgZWZmZWN0cy4gV2l0aG91dCB0aGF0IGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZywgYW55IHJlZmFjdG9yaW5nIG9yIG9wdGltaXphdGlvbiBjYXJyaWVzIGEgc2lnbmlmaWNhbnQgcmlzay4gTXkgZmlyc3Qgc3RlcCB3b3VsZCBiZSB0byByZXZpZXcgdGhlIHJlbGV2YW50IGtlcm5lbCBoZWFkZXJzLCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24sIGFuZCBhbnkgY3Jvc3MtcmVmZXJlbmNlcyB0byB0aGVzZSBzeW1ib2xzLiBJJ2QgYWxzbyBwcm9iYWJseSBsb29rIGF0IHRoZSBsb2NraW5nIHN0cmF0ZWd5IGFuZCBob3cgdGhlc2UgZnVuY3Rpb25zIGludGVyYWN0IHdpdGggdGhlIFZGUyBsYXllci5cblxuVWx0aW1hdGVseSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgKmNvbnRyYWN0KiB0aGVzZSBmdW5jdGlvbnMgYXJlIGltcGxpY2l0bHkgb3IgZXhwbGljaXRseSBwcm9taXNpbmcgdG8gdGhlaXIgdXNlcnMgYmVmb3JlIEkgY2FuIGV2ZW4gY29uc2lkZXIgdG91Y2hpbmcgdGhlbS4gU3RhYmlsaXR5IGlzIHRoZSBuYW1lIG9mIHRoZSBnYW1lIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMjU3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTE6MTg6NTguMjA2MTc2NzA2WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NzMwNTY3MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXRmc19yZWFkX2ZvbGlvXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9Mzk0PXN0YXRpYyBpbnQgbmV0ZnNfcmVhZF9nYXBzKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTQ4NS0vKipcXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6NDg2OiAqIG5ldGZzX3JlYWRfZm9saW8gLSBIZWxwZXIgdG8gbWFuYWdlIGEgcmVhZF9mb2xpbyByZXF1ZXN0XFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTQ4Ny0gKiBAZmlsZTogVGhlIGZpbGUgdG8gcmVhZCBmcm9tXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNDk4LSAqL1xcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo0OTk6aW50IG5ldGZzX3JlYWRfZm9saW8oc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTUwMC17XFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNTQzLX1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6NTQ0OkVYUE9SVF9TWU1CT0wobmV0ZnNfcmVhZF9mb2xpbyk7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTU0NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTE6MTg6NTguMjkzNDg4ODk5WiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NTI5NzYzOTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi5cblxuKipQb3RlbnRpYWwgTmV0RlMgUGVyZm9ybWFuY2UgQm90dGxlbmVja3MqKlxuXG5SaWdodCwgc28gYG5ldGZzX3JlYWRfZm9saW9gIGlzIGV4cG9ydGVkLCB0aGF0J3MgdGhlIHN0YXJ0aW5nIHBvaW50LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoZSBtYWpvciBmb2N1cyBzeW1ib2xzIGFyZS4gQmFzZWQgb24gbXkgZXhwZXJpZW5jZSwgYW5kIHRoZSBjb250ZXh0LCBpdCBsb29rcyBsaWtlIHRoZXNlIGFyZSB0aGUgbGlrZWx5IHN1c3BlY3RzLCB0aGUgb25lcyB0aGF0IGNvdWxkIGJlIGhvbGRpbmcgdGhpbmdzIHVwOlxuXG4qICAgYG5ldGZzX3JlYWRhaGVhZGBcbiogICBgbmV0ZnNfcmVhZF9mb2xpb2BcbiogICBgbmV0ZnNfd3JpdGVwYWdlc2BcbiogICBgbmV0ZnNfd3JpdGViYWNrX3NpbmdsZWBcbiogICBgbmV0ZnNfcGVyZm9ybV93cml0ZWBcbiogICBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZGBcbiogICBgbmV0ZnNfd3JpdGVfYmVnaW5gXG4qICAgYG5ldGZzX3ByZWZldGNoX2Zvcl93cml0ZWBcblxuR2l2ZW4gdGhlIGxpa2VseSBvcGVyYXRpb25zLCBhbmQgYmFzZWQgb24gZ3V0IGZlZWxpbmcsIEkgdGhpbmsgSSdsbCBzdGFydCBieSB0YWtpbmcgYSBjbG9zZXIgbG9vayBhdCBgbmV0ZnNfd3JpdGVfYmVnaW5gIGFuZCBgbmV0ZnNfcHJlZmV0Y2hfZm9yX3dyaXRlYC4gVGhleSBsb29rIGxpa2UgZ29vZCBjYW5kaWRhdGVzIHRvIHN0YXJ0IHRoZSBkZWVwZXIgaW52ZXN0aWdhdGlvbi4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgaW4gdGhvc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyMDA5LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE5OjAyLjc0NjQ2NzY4NloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwOTY4NjMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5ldGZzX3dyaXRlX2JlZ2luXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9NTYxPXN0YXRpYyBib29sIG5ldGZzX3NraXBfZm9saW9fcmVhZChzdHJ1Y3QgZm9saW8gKmZvbGlvLCBsb2ZmX3QgcG9zLCBzaXplX3QgbGVuLFxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTU5NS0vKipcXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6NTk2OiAqIG5ldGZzX3dyaXRlX2JlZ2luIC0gSGVscGVyIHRvIHByZXBhcmUgZm9yIHdyaXRpbmcgW0RFUFJFQ0FURURdXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTU5Ny0gKiBAY3R4OiBUaGUgbmV0ZnMgY29udGV4dFxcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTYyNy0gKi9cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6NjI4OmludCBuZXRmc193cml0ZV9iZWdpbihzdHJ1Y3QgbmV0ZnNfaW5vZGUgKmN0eCxcXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtNjI5LVxcdFxcdCAgICAgIHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYy03MTQtfVxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzo3MTU6RVhQT1JUX1NZTUJPTChuZXRmc193cml0ZV9iZWdpbik7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTcxNi1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTE6MTk6MDIuODY3NDQyMDc2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjEyNzY2OTgxMTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdDpcblxuKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgYG5ldGZzX3dyaXRlX2JlZ2luYCoqXG5cbkFscmlnaHQsIHNvIGBuZXRmc193cml0ZV9iZWdpbmAgaXMgYmVpbmcgZXhwb3J0ZWQuIEhtbSwgdGhhdCBpbW1lZGlhdGVseSBwaXF1ZXMgbXkgaW50ZXJlc3QuIEV4cG9ydGVkIG1lYW5zIGl0J3MgcGFydCBvZiB0aGUgQVBJLCBvciBhdCBsZWFzdCB2aXNpYmxlIGFuZCBhY2Nlc3NpYmxlIHRvIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0g4oCTIHBvdGVudGlhbGx5IG90aGVyIGtlcm5lbCBtb2R1bGVzLCBvciBldmVuIHVzZXJzcGFjZSwgZGVwZW5kaW5nIG9uIHRoZSBjb250ZXh0LiBJJ2xsIG5lZWQgdG8ga25vdyBtb3JlIGFib3V0IHdoZXJlIGl0J3MgYmVpbmcgdXNlZCwgYW5kIHdoYXQgaXRzIGNhbGxpbmcgY29udmVudGlvbnMgYXJlLCB0byB1bmRlcnN0YW5kIHRoZSBzaWduaWZpY2FuY2UuIEEgZnVuY3Rpb24gbmFtZSB3aXRoIFwid3JpdGVfYmVnaW5cIiBpbiBpdCBzdWdnZXN0cyBzb21lIHNvcnQgb2YgaW5pdGlhbGl6YXRpb24gb3Igc2V0dXAgcGhhc2UgZm9yIGEgd3JpdGUgb3BlcmF0aW9uIHdpdGhpbiB0aGUgbmV0d29yayBmaWxlc3lzdGVtIChuZXRmcykuIFRoYXQgaXMgaW50ZXJlc3RpbmcsIHNvIEknbGwgY29uc2lkZXIgaG93IHRoaXMgdGllcyBpbnRvIHRoZSBuZXR3b3JrIGZpbGUgc3lzdGVtIGFzIGEgd2hvbGUuIEkgaW1tZWRpYXRlbHkgc3RhcnQgYXNraW5nIHF1ZXN0aW9uczogV2hhdCB0eXBlcyBvZiB3cml0ZSBvcGVyYXRpb25zIGRvZXMgaXQgc3VwcG9ydD8gV2hhdCBraW5kIG9mIGxvY2tpbmcgaXMgaW52b2x2ZWQsIGlmIGFueT8gSXMgdGhpcyByZWxhdGVkIHRvIGEgc3BlY2lmaWMgcHJvdG9jb2wgbGlrZSBORlMsIFNNQiwgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHk/IENvdWxkIGl0IGJlIGludm9sdmVkIGluIGFueSBzZWN1cml0eSBjb250ZXh0cyBvciBwZXJtaXNzaW9ucyBjaGVja3MsIHN1Y2ggYXMgd2hlbiByZWFkaW5nIG9yIHdyaXRpbmcgYSBmaWxlP1xuXG5UaGlzIG5lZWRzIHRvIGJlIHVuZGVyc3Rvb2QgaW4gdGhlIGNvbnRleHQgb2YgdGhlIG5ldGZzIGRlc2lnbi4gSXMgaXQgYSBjb3JlIGZ1bmN0aW9uLCBvciBpcyBpdCBwYXJ0IG9mIGEgbGF5ZXIgdGhhdCBwcm92aWRlcyBhZGRpdGlvbmFsIGZlYXR1cmVzPyBJIHdvdWxkIGJlIGludHJpZ3VlZCB0byBrbm93LCBjb25zaWRlcmluZyBuZXR3b3JrIGZpbGVzeXN0ZW1zIGFyZSBub3Qgc2ltcGxlLCBhdCBhbGwuIFdoYXQgaXMgdGhlIHNjb3BlPyBXaHkgaXMgaXQgZXhwb3J0ZWQ/IEFuZCwgd2hhdCB3aWxsIGNvbWUgYWZ0ZXI/XG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyNjgyLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTE6MTk6MTUuNjM0NDI2MzA1WiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjQ2MjQzMDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibmV0ZnNfcHJlZmV0Y2hfZm9yX3dyaXRlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9NzE1PUVYUE9SVF9TWU1CT0wobmV0ZnNfd3JpdGVfYmVnaW4pO1xcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTcxOS0gKi9cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM6NzIwOmludCBuZXRmc19wcmVmZXRjaF9mb3Jfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jLTcyMS1cXHRcXHRcXHQgICAgIHNpemVfdCBvZmZzZXQsIHNpemVfdCBsZW4pXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jPTg3PXNzaXplX3QgbmV0ZnNfcGVyZm9ybV93cml0ZShzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4tLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3dyaXRlLmMtMjg0LVxcdFxcdFxcdH1cXG5mcy9uZXRmcy9idWZmZXJlZF93cml0ZS5jOjI4NTpcXHRcXHRcXHRyZXQgPSBuZXRmc19wcmVmZXRjaF9mb3Jfd3JpdGUoZmlsZSwgZm9saW8sIG9mZnNldCwgcGFydCk7XFxuZnMvbmV0ZnMvYnVmZmVyZWRfd3JpdGUuYy0yODYtXFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG4tLVxcbmZzL25ldGZzL2ludGVybmFsLmg9Mjg9dm9pZCBuZXRmc19jYWNoZV9yZWFkX3Rlcm1pbmF0ZWQodm9pZCAqcHJpdiwgc3NpemVfdCB0cmFuc2ZlcnJlZF9vcl9lcnJvcik7XFxuZnMvbmV0ZnMvaW50ZXJuYWwuaDoyOTppbnQgbmV0ZnNfcHJlZmV0Y2hfZm9yX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbmZzL25ldGZzL2ludGVybmFsLmgtMzAtXFx0XFx0XFx0ICAgICBzaXplX3Qgb2Zmc2V0LCBzaXplX3QgbGVuKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTE6MTk6MTUuNzk5MDU2OTExWiIsIlNlcSI6MzEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYzMjc2NDE0NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgdGhlIE5ldEZTIFdyaXRlYmFjayBQYXRjaCoqXG5cbk9rYXksIHNvIGBuZXRmc19wcmVmZXRjaF9mb3Jfd3JpdGVgIGlzIGludGVybmFsLCB0aGF0J3Mgbm90IHNvbWV0aGluZyB0byBjb25jZXJuIG15c2VsZiB3aXRoIGRpcmVjdGx5LiBGaXJzdCwgbGV0J3MgY29uZmlybSB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFJpZ2h0LCBhZnRlciByZXZpZXdpbmcgSSBzZWUgYENJRlNgLCBgOVBfRlNgLCBgQUZTX0ZTYCwgYENFUEhfRlNgIGFzIGltcG9ydGFudC4gSSBuZWVkIHRvIHJlbWVtYmVyIHRoYXQgYE5GU19GU0NBQ0hFYCBkZXBlbmRzIG9uIGBORlNfRlNgLCBzbyBJIGRvbid0IG5lZWQgdG8gY29uc2lkZXIgdGhhdCBhcyBhIGRpcmVjdCBkZXBlbmRlbmN5IGhlcmUsIEkgY2FuIGlnbm9yZSB0aGF0LlxuXG5JIHNob3VsZCB2ZXJpZnkgaWYgYE5FVEZTX1NVUFBPUlRgIGlzIGVub3VnaCB0byBiZSBvbiBteSBsaXN0LiBOb3BlLCBpdCdzIGhpZGRlbiwgc28gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gbGlzdGluZyB0aGUgZmlsZXN5c3RlbXMgdGhhdCBzZWxlY3QgaXQuIEkgY2FuIGp1c3QgbGlzdCBgQ0lGU2AsIGA5UF9GU2AsIGBBRlNfRlNgLCBgQ0VQSF9GU2AuXG5cbkxldCBtZSBjaXJjbGUgYmFjayB0byB0aGUgcGF0Y2ggaXRzZWxmLiBUaGUgY2hhbmdlIGludHJvZHVjZXMgYSBgZ2ZwYCBwYXJhbWV0ZXIgdG8gYHJvbGxpbmdfYnVmZmVyX2luaXRgLCB3aGljaCBpcyBwb3RlbnRpYWxseSBpbnRlcmVzdGluZy4gQW5kIGluIGBuZXRmc19jcmVhdGVfd3JpdGVfcmVxYCwgaXQncyBzZXR0aW5nIGBnZnAgfD0gX19HRlBfTk9GQUlMYCB1bmRlciB0aGUgY29uZGl0aW9ucyBgb3JpZ2luID09IE5FVEZTX1dSSVRFQkFDS2Agb3IgYG9yaWdpbiA9PSBORVRGU19XUklURUJBQ0tfU0lOR0xFYC4gVGhpcyBpcyBhIGNsZWFyIGZ1bmN0aW9uYWwgY2hhbmdlLCBhaW1lZCBhdCBwcmV2ZW50aW5nIEVOT01FTSBlcnJvcnMgZHVyaW5nIHdyaXRlYmFjaywgd2hpY2ggaXMgYSBrZXkgcGFydCBvZiB0aGUgbWVtb3J5IHJlY2xhaW0gcHJvY2Vzcy4gVGhhdCdzIGEgZ29vZCBwbGFjZSB0byBiZSBtb2RpZnlpbmcuXG5cbkdpdmVuIHRoYXQgaXQncyBhIGNvcmUgY2hhbmdlIHdpdGhpbiB0aGUgbmV0ZnMgd3JpdGViYWNrIHBhdGgsIGl0J3MgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gZm9jdXNpbmcgb24gYWxsIHRob3NlIGltcG9ydGFudCBzeW1ib2xzLlxuXG5JIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgaW1wb3J0YW50IHN5bWJvbHM6XG4tIGBuZXRmc19yZWFkYWhlYWRgXG4tIGBuZXRmc19yZWFkX2ZvbGlvYFxuLSBgbmV0ZnNfd3JpdGVwYWdlc2Bcbi0gYG5ldGZzX3dyaXRlYmFja19zaW5nbGVgXG4tIGBuZXRmc19wZXJmb3JtX3dyaXRlYFxuLSBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZGBcblxuQW5kIHRvIHJlLWl0ZXJhdGUsIG15IGtleSBjb25maWd1cmF0aW9uIGl0ZW1zIGFyZTpcbi0gYENJRlNgXG4tIGA5UF9GU2Bcbi0gYEFGU19GU2Bcbi0gYENFUEhfRlNgXG5cbkknbGwganVzdCBkb3VibGUtY2hlY2ssIGJ1dCB5ZXMsIGl0IGlzIGhpZGRlbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMzNjksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozODUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjVUMTE6MTk6MjIuMTI2NzAyMDkxWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzgyNTQ1MzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE5FVEZTX1NVUFBPUlRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvbmV0ZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9LY29uZmlnLTItXFxuZnMvbmV0ZnMvS2NvbmZpZzozOmNvbmZpZyBORVRGU19TVVBQT1JUXFxuZnMvbmV0ZnMvS2NvbmZpZy00LVxcdHRyaXN0YXRlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE5OjIyLjI2NDk2MzMwOVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ3NDk1NDc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIEhpZGRlbiBGaWxlIFN5c3RlbSBPcHRpb25zKipcblxuUmlnaHQsIG5vIHByb21wdCBzdHJpbmcsIHdoaWNoIG1lYW5zIHRoaXMgZmVhdHVyZSBpcyAqZGVmaW5pdGVseSogaGlkZGVuLiBXZSBjYW4ndCBlbmFibGUgaXQgZGlyZWN0bHkgdGhyb3VnaCBhIHN0YW5kYXJkIGludGVyZmFjZTsgaXQgaGFzIHRvIGJlIHNwZWNpZmljYWxseSBzZWxlY3RlZCwgbGlrZWx5IGluIHNvbWUgc29ydCBvZiBjb25maWd1cmF0aW9uIG9yIGJ1aWxkIHByb2Nlc3MuIFNvLCBsaXN0aW5nIGBDSUZTYCwgYDlQX0ZTYCwgYEFGU19GU2AsIGFuZCBgQ0VQSF9GU2AgaXMgc3BvdCBvbiDigJMgdGhvc2UgYXJlIHRoZSBjYW5kaWRhdGVzLiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kICpob3cqIHRoaXMgaGlkZGVuIHN0YXRlIGlzIG1hbmFnZWQgaW4gY29kZS5cblxuTGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIHRoaXMgaW1wbGVtZW50YXRpb24uIEkgbmVlZCB0byBleGFtaW5lIGByb2xsaW5nX2J1ZmZlcl9pbml0YCBzcGVjaWZpY2FsbHkuIEknbGwgaGVhZCBvdmVyIHRvIGBmcy9uZXRmcy9yb2xsaW5nX2J1ZmZlci5jYC4gSSBleHBlY3QgdG8gZmluZCB0aGUgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBkZXRlcm1pbmVzIHdoZXRoZXIgb3Igbm90IHRoZXNlIGZpbGVzeXN0ZW0gdHlwZXMgYXJlIG1hZGUgYXZhaWxhYmxlIGFuZCB3aGF0IG1ha2VzIHRoZW0gd29yay4gVGhpcyBpcyBsaWtlbHkgd2hlcmUgdGhlIHNlbGVjdGlvbiBvciBidWlsZC10aW1lIGNvbmZpZ3VyYXRpb24gbWFuaWZlc3RzIGl0c2VsZi4gVGhpcyBmdW5jdGlvbiBpcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGFyZSBoaWRkZW4gYnkgZGVmYXVsdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQzMjAsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMToxOToyNS45MTI0NjI0NzNaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MjUzNzc4OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJyb2xsaW5nX2J1ZmZlcl9pbml0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImZzL25ldGZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJmcy9uZXRmcy9idWZmZXJlZF9yZWFkLmM9MzM2PXZvaWQgbmV0ZnNfcmVhZGFoZWFkKHN0cnVjdCByZWFkYWhlYWRfY29udHJvbCAqcmFjdGwpXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzYxLVxcdHJyZXEtXFx1MDAzZXN1Ym1pdHRlZCA9IHJyZXEtXFx1MDAzZXN0YXJ0O1xcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzozNjI6XFx0aWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoXFx1MDAyNnJyZXEtXFx1MDAzZWJ1ZmZlciwgcnJlcS1cXHUwMDNlZGVidWdfaWQsIElURVJfREVTVCwgR0ZQX05PRlMpIFxcdTAwM2MgMClcXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzYzLVxcdFxcdGdvdG8gY2xlYW51cF9mcmVlO1xcbi0tXFxuZnMvbmV0ZnMvYnVmZmVyZWRfcmVhZC5jPTM3Nj1zdGF0aWMgaW50IG5ldGZzX2NyZWF0ZV9zaW5ndWxhcl9idWZmZXIoc3RydWN0IG5ldGZzX2lvX3JlcXVlc3QgKnJyZXEsIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuLS1cXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzgwLVxcbmZzL25ldGZzL2J1ZmZlcmVkX3JlYWQuYzozODE6XFx0aWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoXFx1MDAyNnJyZXEtXFx1MDAzZWJ1ZmZlciwgcnJlcS1cXHUwMDNlZGVidWdfaWQsIElURVJfREVTVCwgR0ZQX05PRlMpIFxcdTAwM2MgMClcXG5mcy9uZXRmcy9idWZmZXJlZF9yZWFkLmMtMzgyLVxcdFxcdHJldHVybiAtRU5PTUVNO1xcbi0tXFxuZnMvbmV0ZnMvcm9sbGluZ19idWZmZXIuYz01NT1FWFBPUlRfU1lNQk9MKG5ldGZzX2ZvbGlvcV9mcmVlKTtcXG4tLVxcbmZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmMtNjEtICovXFxuZnMvbmV0ZnMvcm9sbGluZ19idWZmZXIuYzo2MjppbnQgcm9sbGluZ19idWZmZXJfaW5pdChzdHJ1Y3Qgcm9sbGluZ19idWZmZXIgKnJvbGwsIHVuc2lnbmVkIGludCBycmVxX2lkLFxcbmZzL25ldGZzL3JvbGxpbmdfYnVmZmVyLmMtNjMtXFx0XFx0XFx0dW5zaWduZWQgaW50IGRpcmVjdGlvbiwgZ2ZwX3QgZ2ZwKVxcbi0tXFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYz05MD1zdHJ1Y3QgbmV0ZnNfaW9fcmVxdWVzdCAqbmV0ZnNfY3JlYXRlX3dyaXRlX3JlcShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcXG4tLVxcbmZzL25ldGZzL3dyaXRlX2lzc3VlLmMtMTE1LVxcdFxcdGdmcCB8PSBfX0dGUF9OT0ZBSUw7XFxuZnMvbmV0ZnMvd3JpdGVfaXNzdWUuYzoxMTY6XFx0aWYgKHJvbGxpbmdfYnVmZmVyX2luaXQoXFx1MDAyNndyZXEtXFx1MDAzZWJ1ZmZlciwgd3JlcS1cXHUwMDNlZGVidWdfaWQsIElURVJfU09VUkNFLCBnZnApIFxcdTAwM2MgMClcXG5mcy9uZXRmcy93cml0ZV9pc3N1ZS5jLTExNy1cXHRcXHRnb3RvIG5vbWVtO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNVQxMToxOToyNi4wNjUwMDc3MDFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTk3NDUwNTg1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBOZXRmcyBQYXRjaCoqXG5cbk9rYXksIHNvIEkndmUgbG9va2VkIHRoaXMgcGF0Y2ggb3ZlciwgYW5kIG15IGluaXRpYWwgaW1wcmVzc2lvbiBpcyBwb3NpdGl2ZS4gSXQncyBtYWtpbmcgYSB0YXJnZXRlZCBjaGFuZ2UsIHR3ZWFraW5nIGhvdyBtZW1vcnkgaXMgYWxsb2NhdGVkIHdpdGhpbiB0aGUgYG5ldGZzYCBsaWJyYXJ5LCBzcGVjaWZpY2FsbHkgaW4gYHJvbGxpbmdfYnVmZmVyX2luaXRgLiBUaGUga2V5IGhlcmUgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBgZ2ZwX3RgIHdoaWNoIGlzIHRoZW4gdXNlZCBpbiBgbmV0ZnNfZm9saW9xX2FsbG9jYCBhbmQgdGhlIGFkZGl0aW9uIG9mIGBfX0dGUF9OT0ZBSUxgIGluIGBuZXRmc19jcmVhdGVfd3JpdGVfcmVxYC4gVGhlIGFpbSwgYXMgSSB1bmRlcnN0YW5kIGl0LCBpcyB0byBib2xzdGVyIHRoZSByb2J1c3RuZXNzIG9mIHdyaXRlYmFjayBvcGVyYXRpb25zLCBtaXRpZ2F0aW5nIHRoZSByaXNrIG9mIGBFTk9NRU1gIGVycm9ycyBkdXJpbmcgbWVtb3J5IHJlY2xhaW0sIHdoaWNoIGlzIGEgY29tbW9uIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2sgSSd2ZSBzZWVuIGluIHRoZSBwYXN0LlxuXG5UaGlzIGlzIGEgZnVuY3Rpb25hbCBtb2RpZmljYXRpb247IGl0J3Mgbm90IGp1c3QgYSBjb3NtZXRpYyBjaGFuZ2UuIEl0IGRpcmVjdGx5IGFmZmVjdHMgaG93IG1lbW9yeSBpcyBoYW5kbGVkIGF0IGEgZnVuZGFtZW50YWwgbGV2ZWwgaW4gdGhlIGNvcmUgYG5ldGZzYCBsaWJyYXJ5LiBUaGlzIG1ha2VzIGl0IGEgcHJpbWUgY2FuZGlkYXRlIGZvciBmdXp6aW5nLiBJJ2xsIG5lZWQgdG8gZm9jdXMgbXkgZnV6emluZyBlZmZvcnRzIG9uIGZ1bmN0aW9ucyB0aGF0IGludGVyYWN0IHdpdGggdGhlc2UgY2hhbmdlcy4gSSdsbCBwcmlvcml0aXplIGZ1enppbmcgYXJvdW5kIGBuZXRmc19yZWFkYWhlYWRgLCBgbmV0ZnNfcmVhZF9mb2xpb2AsIGBuZXRmc193cml0ZXBhZ2VzYCwgYG5ldGZzX3dyaXRlYmFja19zaW5nbGVgLCBgbmV0ZnNfcGVyZm9ybV93cml0ZWAsIGFuZCBgbmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZGAgdG8gbWFrZSBzdXJlIGl0J3MgYWxsIHdvcmtpbmcgcHJvcGVybHkgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSByZWdyZXNzaW9ucy5cblxuR2l2ZW4gdGhhdCB0aGlzIHJlbGF0ZXMgdG8gbmV0d29yayBmaWxlc3lzdGVtcywgSSdtIHRoaW5raW5nIHRoZSBmb2xsb3dpbmcgY29uZmlncyB3b3VsZCBiZSB1c2VmdWwgdG8gZW5hYmxlIGR1cmluZyBmdXp6aW5nOiBgQ0lGU2AsIGA5UF9GU2AsIGBBRlNfRlNgLCBhbmQgYENFUEhfRlNgLiBUaGlzIHNob3VsZCBwcm92aWRlIGJyb2FkIGNvdmVyYWdlIGFuZCB0ZXN0IGZvciBhbnkgcG90ZW50aWFsIGludGVyYWN0aW9ucyBpbiBjb21tb25seSB1c2VkIG5ldHdvcmtpbmcgZmlsZXN5c3RlbXMuIEFsbCBpbiBhbGwsIHRoaXMgc2VlbXMgbGlrZSBhIHNvbGlkLCB3ZWxsLXJlYXNvbmVkIHBhdGNoIHRoYXQgSSBjYW4gZGVmaW5pdGVseSBnZXQgYmVoaW5kIGFuZCB0aGF0IHNob3VsZCBiZSByaWdvcm91c2x5IHRlc3RlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTUxNzYsIk91dHB1dFRva2VucyI6MTYwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI1VDExOjE5OjMyLjAzOTUxNzA1OVoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NDQ0OTkyMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQ0lGU1wiLFxuICAgIFwiOVBfRlNcIixcbiAgICBcIkFGU19GU1wiLFxuICAgIFwiQ0VQSF9GU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIm5ldGZzX3JlYWRhaGVhZFwiLFxuICAgIFwibmV0ZnNfcmVhZF9mb2xpb1wiLFxuICAgIFwibmV0ZnNfd3JpdGVwYWdlc1wiLFxuICAgIFwibmV0ZnNfd3JpdGViYWNrX3NpbmdsZVwiLFxuICAgIFwibmV0ZnNfcGVyZm9ybV93cml0ZVwiLFxuICAgIFwibmV0ZnNfdW5idWZmZXJlZF93cml0ZV9pdGVyX2xvY2tlZFwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgYWxsb2NhdGlvbiBmbGFncyBmb3Igcm9sbGluZyBidWZmZXIgaW5pdGlhbGl6YXRpb24gaW4gdGhlIG5ldGZzIGxpYnJhcnksIHNwZWNpZmljYWxseSBhZGRpbmcgX19HRlBfTk9GQUlMIGZvciB3cml0ZWJhY2sgb3BlcmF0aW9ucyB0byBwcmV2ZW50IEVOT01FTSBkdXJpbmcgbWVtb3J5IHJlY2xhaW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiBjb3JlIG5ldGZzIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkNJRlNcIixcbiAgICBcIjlQX0ZTXCIsXG4gICAgXCJBRlNfRlNcIixcbiAgICBcIkNFUEhfRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJuZXRmc19yZWFkYWhlYWRcIixcbiAgICBcIm5ldGZzX3JlYWRfZm9saW9cIixcbiAgICBcIm5ldGZzX3dyaXRlcGFnZXNcIixcbiAgICBcIm5ldGZzX3dyaXRlYmFja19zaW5nbGVcIixcbiAgICBcIm5ldGZzX3BlcmZvcm1fd3JpdGVcIixcbiAgICBcIm5ldGZzX3VuYnVmZmVyZWRfd3JpdGVfaXRlcl9sb2NrZWRcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IGFsbG9jYXRpb24gZmxhZ3MgZm9yIHJvbGxpbmcgYnVmZmVyIGluaXRpYWxpemF0aW9uIGluIHRoZSBuZXRmcyBsaWJyYXJ5LCBzcGVjaWZpY2FsbHkgYWRkaW5nIF9fR0ZQX05PRkFJTCBmb3Igd3JpdGViYWNrIG9wZXJhdGlvbnMgdG8gcHJldmVudCBFTk9NRU0gZHVyaW5nIG1lbW9yeSByZWNsYWltLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gY29yZSBuZXRmcyBsb2dpYy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workfloww4f7h[1] Phase: Succeeded StartedAt: 2026-07-25 11:19:44 +0000 UTC FinishedAt: 2026-07-25 11:19:44 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4f7h[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-25 11:19:44 +0000 UTC FinishedAt: 2026-07-25 11:19:44 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4f7h[2] Phase: Succeeded StartedAt: 2026-07-25 11:19:44 +0000 UTC FinishedAt: 2026-07-25 11:41:22 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4f7h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8bb3adb339dddac0b25c92684c4d1c8668646b37","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_readahead","netfs_read_folio","netfs_writepages","netfs_writeback_single","netfs_perform_write","netfs_unbuffered_write_iter_locked"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8bb3adb339dddac0b25c92684c4d1c8668646b37","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","AFS_FS","CEPH_FS"],"series_id":"15d9701b-cc41-4cb5-b509-d3a80c8c802f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN) Phase: Failed StartedAt: 2026-07-25 11:19:44 +0000 UTC FinishedAt: 2026-07-25 11:41:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8bb3adb339dddac0b25c92684c4d1c8668646b37","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_readahead","netfs_read_folio","netfs_writepages","netfs_writeback_single","netfs_perform_write","netfs_unbuffered_write_iter_locked"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"8bb3adb339dddac0b25c92684c4d1c8668646b37","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","AFS_FS","CEPH_FS"],"series_id":"15d9701b-cc41-4cb5-b509-d3a80c8c802f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workfloww4f7h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8bb3adb339dddac0b25c92684c4d1c8668646b37","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_readahead","netfs_read_folio","netfs_writepages","netfs_writeback_single","netfs_perform_write","netfs_unbuffered_write_iter_locked"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8bb3adb339dddac0b25c92684c4d1c8668646b37","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","AFS_FS","CEPH_FS"],"series_id":"15d9701b-cc41-4cb5-b509-d3a80c8c802f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-25 11:19:44 +0000 UTC FinishedAt: 2026-07-25 11:20:04 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4f7h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8bb3adb339dddac0b25c92684c4d1c8668646b37","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_readahead","netfs_read_folio","netfs_writepages","netfs_writeback_single","netfs_perform_write","netfs_unbuffered_write_iter_locked"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8bb3adb339dddac0b25c92684c4d1c8668646b37","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","AFS_FS","CEPH_FS"],"series_id":"15d9701b-cc41-4cb5-b509-d3a80c8c802f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-25 11:19:44 +0000 UTC FinishedAt: 2026-07-25 11:19:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8bb3adb339dddac0b25c92684c4d1c8668646b37","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workfloww4f7h/series-workfloww4f7h-convert-artifact-830473900/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww4f7h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8bb3adb339dddac0b25c92684c4d1c8668646b37","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_readahead","netfs_read_folio","netfs_writepages","netfs_writeback_single","netfs_perform_write","netfs_unbuffered_write_iter_locked"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8bb3adb339dddac0b25c92684c4d1c8668646b37","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","AFS_FS","CEPH_FS"],"series_id":"15d9701b-cc41-4cb5-b509-d3a80c8c802f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-25 11:20:04 +0000 UTC FinishedAt: 2026-07-25 11:41:02 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4f7h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8bb3adb339dddac0b25c92684c4d1c8668646b37","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_readahead","netfs_read_folio","netfs_writepages","netfs_writeback_single","netfs_perform_write","netfs_unbuffered_write_iter_locked"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8bb3adb339dddac0b25c92684c4d1c8668646b37","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","AFS_FS","CEPH_FS"],"series_id":"15d9701b-cc41-4cb5-b509-d3a80c8c802f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-25 11:20:04 +0000 UTC FinishedAt: 2026-07-25 11:41:02 +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:*4ac15d45-541e-438a-a99c-3e24d2061421,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-workfloww4f7h/series-workfloww4f7h-convert-artifact-830473900/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": "3913e6f6-8dfe-4885-8107-197359235f73", "success": false },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-workfloww4f7h/series-workfloww4f7h-build-action-4215475418/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww4f7h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8bb3adb339dddac0b25c92684c4d1c8668646b37","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_readahead","netfs_read_folio","netfs_writepages","netfs_writeback_single","netfs_perform_write","netfs_unbuffered_write_iter_locked"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8bb3adb339dddac0b25c92684c4d1c8668646b37","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","AFS_FS","CEPH_FS"],"series_id":"15d9701b-cc41-4cb5-b509-d3a80c8c802f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-25 11:20:04 +0000 UTC FinishedAt: 2026-07-25 11:40:41 +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:*4ac15d45-541e-438a-a99c-3e24d2061421,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-workfloww4f7h/series-workfloww4f7h-convert-artifact-830473900/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": "3913e6f6-8dfe-4885-8107-197359235f73", "success": false },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-workfloww4f7h/series-workfloww4f7h-build-action-4215475418/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workfloww4f7h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8bb3adb339dddac0b25c92684c4d1c8668646b37","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_readahead","netfs_read_folio","netfs_writepages","netfs_writeback_single","netfs_perform_write","netfs_unbuffered_write_iter_locked"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8bb3adb339dddac0b25c92684c4d1c8668646b37","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","AFS_FS","CEPH_FS"],"series_id":"15d9701b-cc41-4cb5-b509-d3a80c8c802f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2] Phase: Failed StartedAt: 2026-07-25 11:41:02 +0000 UTC FinishedAt: 2026-07-25 11:41:22 +0000 UTC Input: nil Output: nil --------- Name: series-workfloww4f7h[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8bb3adb339dddac0b25c92684c4d1c8668646b37","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","AFS_FS","CEPH_FS"],"series_id":"","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["netfs_readahead","netfs_read_folio","netfs_writepages","netfs_writeback_single","netfs_perform_write","netfs_unbuffered_write_iter_locked"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"8bb3adb339dddac0b25c92684c4d1c8668646b37","config_name":"upstream-apparmor-kasan.config","enable_configs":["CIFS","9P_FS","AFS_FS","CEPH_FS"],"series_id":"15d9701b-cc41-4cb5-b509-d3a80c8c802f","tree_name":"vfs","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/vfs/vfs.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Failed StartedAt: 2026-07-25 11:41:02 +0000 UTC FinishedAt: 2026-07-25 11:41:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}