Name: series-workflowlhl7k Phase: Succeeded StartedAt: 2026-08-22 14:03:04 +0000 UTC FinishedAt: 2026-08-22 18:36:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[0] Phase: Succeeded StartedAt: 2026-08-22 14:03:04 +0000 UTC FinishedAt: 2026-08-22 14:51:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[0].run-triage Phase: Succeeded StartedAt: 2026-08-22 14:03:04 +0000 UTC FinishedAt: 2026-08-22 14:51:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "ff53afcd82dec735bd9705593413784fe2c12ab3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MODULES", "DYNAMIC_FTRACE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "ff53afcd82dec735bd9705593413784fe2c12ab3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MODULES", "DYNAMIC_FTRACE" ], "series_id": "706536fa-eef3-4c99-b61d-d597f5d6cb75" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "execmem_split", "module_emit_plt_entry", "module_emit_veneer_for_adrp", "module_frob_arch_sections", "execmem_fill_trapping_insns" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE0OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01PRFVMRVMmIzM0OywKICAgICYjMzQ7RFlOQU1JQ19GVFJBQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleGVjbWVtX3NwbGl0JiMzNDssCiAgICAmIzM0O21vZHVsZV9lbWl0X3BsdF9lbnRyeSYjMzQ7LAogICAgJiMzNDttb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnAmIzM0OywKICAgICYjMzQ7bW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyYjMzQ7LAogICAgJiMzNDtleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIGV4ZWN1dGFibGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgKGBleGVjbWVtYCkgZm9yIGtlcm5lbCBtb2R1bGVzLCBzcGVjaWZpY2FsbHkgY29uc29saWRhdGluZyBtb2R1bGUgdGV4dCBhbmQgaW5pdCB0ZXh0IGFsbG9jYXRpb25zLCBtZXJnaW5nIFBMVCBzZWN0aW9ucyBmb3IgQVJNNjQsIGFuZCBhZGp1c3RpbmcgcGFnZSBhdHRyaWJ1dGVzIGZvciBST1ggKFJlYWQtT25seSBFeGVjdXRlKSBjYWNoZXMuIFRoZXNlIGNoYW5nZXMgZGVhbCB3aXRoIGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCwgcGFnZSBwZXJtaXNzaW9ucywgYW5kIG1vZHVsZSBsb2FkaW5nLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHBhZ2UgZmF1bHRzLCBvciBpbnZhbGlkIGluc3RydWN0aW9uIGV4Y2VwdGlvbnMuIFN1Y2ggaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgc3RhbmRhcmQgcGFnZSBmYXVsdCBoYW5kbGVycywgYW5kIGtlcm5lbCBib290L21vZHVsZSBsb2FkaW5nIHRlc3RzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBzdGFjay9oZWFwIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbGwgYWxsb2NhdGVkIG1vZHVsZSBtZW1vcnkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCAoZS5nLiwgdmlhIGBtZW1zZXRgIGluIGBtb2R1bGVfbWVtb3J5X2FsbG9jYCBvciBgZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zYCkuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBBUkNIX0hBU19FWEVDTUVNX1JPWCBmb3IgYXJtNjQsIG1vZGlmeWluZyBob3cgbW9kdWxlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYnkgc3BsaXR0aW5nIE1PRF9JTklUX1RFWFQgZnJvbSBNT0RfVEVYVCB3aGVuIGV4ZWNtZW1faXNfcm94IGlzIHRydWUuIEl0IGFsc28gdXBkYXRlcyBmdHJhY2UgdHJhbXBvbGluZXMgYW5kIFBMVCBnZW5lcmF0aW9uIGZvciBtb2R1bGVzIG9uIGFybTY0IHRvIGFjY29tbW9kYXRlIHRoZXNlIGNoYW5nZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgKG1vZHVsZSBsb2FkaW5nLCBleGVjdXRhYmxlIG1lbW9yeSBhbGxvY2F0aW9uLCBmdHJhY2UpIHRoYXQgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjYzgyYzc3MjA2ZWI5NWFjMWY0ZDQ1YjhmMzVjYmY4ODFjODA2ZTEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMTQ6NDg6MjcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnXG5pbmRleCBiM2FmZTA2ODg5MTliLi4wODBiOTdiMGJiZDVlIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L0tjb25maWdcbkBAIC0yNyw2ICYjNDM7MjcsNyBAQCBjb25maWcgQVJNNjRcbiBcdHNlbGVjdCBBUkNIX0hBU19ETUFfT1BTIGlmIFhFTlxuIFx0c2VsZWN0IEFSQ0hfSEFTX0RNQV9QUkVQX0NPSEVSRU5UXG4gXHRzZWxlY3QgQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFIGlmIEFDUElcbiYjNDM7XHRzZWxlY3QgQVJDSF9IQVNfRVhFQ01FTV9ST1hcbiBcdHNlbGVjdCBBUkNIX0hBU19GQVNUX01VTFRJUExJRVJcbiBcdHNlbGVjdCBBUkNIX0hBU19GT1JUSUZZX1NPVVJDRVxuIFx0c2VsZWN0IEFSQ0hfSEFTX0dDT1ZfUFJPRklMRV9BTExcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaFxuaW5kZXggZmI5Yjg4ZWViZWIxNS4uOTMyOGZhZGI0YTk1OSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmhcbkBAIC0xNSwxMSAmIzQzOzE1LDkgQEAgc3RydWN0IG1vZF9wbHRfc2VjIHtcbiBcbiBzdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMge1xuIFx0c3RydWN0IG1vZF9wbHRfc2VjXHRjb3JlO1xuLVx0c3RydWN0IG1vZF9wbHRfc2VjXHRpbml0O1xuIFxuIFx0LyogZm9yIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqL1xuIFx0c3RydWN0IHBsdF9lbnRyeVx0KmZ0cmFjZV90cmFtcG9saW5lcztcbi1cdHN0cnVjdCBwbHRfZW50cnlcdCppbml0X2Z0cmFjZV90cmFtcG9saW5lcztcbiB9O1xuIFxuIHU2NCBtb2R1bGVfZW1pdF9wbHRfZW50cnkoc3RydWN0IG1vZHVsZSAqbW9kLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmxkcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmhcbmluZGV4IDBiM2FhY2QyMmM1OTAuLjk1NTQwZTk1NmI0MTkgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5sZHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmhcbkBAIC0xLDggJiM0MzsxLDUgQEBcbiBTRUNUSU9OUyB7XG4gXHQucGx0IDAgOiB7IEJZVEUoMCkgfVxuLVx0LmluaXQucGx0IDAgOiB7IEJZVEUoMCkgfVxuLVx0LnRleHQuZnRyYWNlX3RyYW1wb2xpbmUgMCA6IHsgQllURSgwKSB9XG4tXHQuaW5pdC50ZXh0LmZ0cmFjZV90cmFtcG9saW5lIDAgOiB7IEJZVEUoMCkgfVxuIFxuICNpZmRlZiBDT05GSUdfS0FTQU5fU1dfVEFHU1xuIFx0LypcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jXG5pbmRleCA1YTE1NTRhNDQxNjI4Li5iNTZkYTI0YzFiZTRmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvZnRyYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jXG5AQCAtMjU4LDE3ICYjNDM7MjU4LDEwIEBAIGludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYylcbiBcdHJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUocGMsIDAsIG5ldywgZmFsc2UpO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHBsdF9lbnRyeSAqZ2V0X2Z0cmFjZV9wbHQoc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGx0X2VudHJ5ICpnZXRfZnRyYWNlX3BsdChzdHJ1Y3QgbW9kdWxlICptb2QpXG4ge1xuICNpZmRlZiBDT05GSUdfTU9EVUxFU1xuLVx0c3RydWN0IHBsdF9lbnRyeSAqcGx0ID0gTlVMTDtcbi1cbi1cdGlmICh3aXRoaW5fbW9kdWxlX21lbV90eXBlKGFkZHIsIG1vZCwgTU9EX0lOSVRfVEVYVCkpXG4tXHRcdHBsdCA9IG1vZC1cdTAwM2VhcmNoLmluaXRfZnRyYWNlX3RyYW1wb2xpbmVzO1xuLVx0ZWxzZSBpZiAod2l0aGluX21vZHVsZV9tZW1fdHlwZShhZGRyLCBtb2QsIE1PRF9URVhUKSlcbi1cdFx0cGx0ID0gbW9kLVx1MDAzZWFyY2guZnRyYWNlX3RyYW1wb2xpbmVzO1xuLVx0ZWxzZVxuLVx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgcGx0X2VudHJ5ICpwbHQgPSBtb2QtXHUwMDNlYXJjaC5mdHJhY2VfdHJhbXBvbGluZXM7XG4gXG4gXHRyZXR1cm4gXHUwMDI2cGx0W0ZUUkFDRV9QTFRfSURYXTtcbiAjZWxzZVxuQEAgLTMzOSw3ICYjNDM7MzMyLDcgQEAgc3RhdGljIGJvb2wgZnRyYWNlX2ZpbmRfY2FsbGFibGVfYWRkcihzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLFxuIFx0aWYgKFdBUk5fT04oIW1vZCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHBsdCA9IGdldF9mdHJhY2VfcGx0KG1vZCwgcGMpO1xuJiM0MztcdHBsdCA9IGdldF9mdHJhY2VfcGx0KG1vZCk7XG4gXHRpZiAoIXBsdCkge1xuIFx0XHRwcl9lcnIoXCYjMzQ7ZnRyYWNlOiBubyBtb2R1bGUgUExUIGZvciAlcHNcXG5cJiMzNDssICh2b2lkICopKmFkZHIpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYyBiL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmNcbmluZGV4IDdhZmQzNzBkYTlmNDguLjY5MDBkMjI0MmYxYmUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jXG5AQCAtNzAsOCAmIzQzOzcwLDcgQEAgdTY0IG1vZHVsZV9lbWl0X3BsdF9lbnRyeShzdHJ1Y3QgbW9kdWxlICptb2QsIEVsZjY0X1NoZHIgKnNlY2hkcnMsXG4gXHRcdFx0ICB2b2lkICpsb2MsIGNvbnN0IEVsZjY0X1JlbGEgKnJlbGEsXG4gXHRcdFx0ICBFbGY2NF9TeW0gKnN5bSlcbiB7XG4tXHRzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9ICF3aXRoaW5fbW9kdWxlX2luaXQoKHVuc2lnbmVkIGxvbmcpbG9jLCBtb2QpID9cbi1cdFx0XHRcdFx0XHRcdTAwMjZtb2QtXHUwMDNlYXJjaC5jb3JlIDogXHUwMDI2bW9kLVx1MDAzZWFyY2guaW5pdDtcbiYjNDM7XHRzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9IFx1MDAyNm1vZC1cdTAwM2VhcmNoLmNvcmU7XG4gXHRzdHJ1Y3QgcGx0X2VudHJ5ICpwbHQgPSAoc3RydWN0IHBsdF9lbnRyeSAqKXNlY2hkcnNbcGx0c2VjLVx1MDAzZXBsdF9zaG5keF0uc2hfYWRkcjtcbiBcdGludCBpID0gcGx0c2VjLVx1MDAzZXBsdF9udW1fZW50cmllcztcbiBcdGludCBqID0gaSAtIDE7XG5AQCAtMTAxLDggJiM0MzsxMDAsNyBAQCB1NjQgbW9kdWxlX2VtaXRfcGx0X2VudHJ5KHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycyxcbiB1NjQgbW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwKHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycyxcbiBcdFx0XHRcdHZvaWQgKmxvYywgdTY0IHZhbClcbiB7XG4tXHRzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9ICF3aXRoaW5fbW9kdWxlX2luaXQoKHVuc2lnbmVkIGxvbmcpbG9jLCBtb2QpID9cbi1cdFx0XHRcdFx0XHRcdTAwMjZtb2QtXHUwMDNlYXJjaC5jb3JlIDogXHUwMDI2bW9kLVx1MDAzZWFyY2guaW5pdDtcbiYjNDM7XHRzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9IFx1MDAyNm1vZC1cdTAwM2VhcmNoLmNvcmU7XG4gXHRzdHJ1Y3QgcGx0X2VudHJ5ICpwbHQgPSAoc3RydWN0IHBsdF9lbnRyeSAqKXNlY2hkcnNbcGx0c2VjLVx1MDAzZXBsdF9zaG5keF0uc2hfYWRkcjtcbiBcdGludCBpID0gcGx0c2VjLVx1MDAzZXBsdF9udW1fZW50cmllcyYjNDM7JiM0Mzs7XG4gXHR1MzIgYnI7XG5AQCAtMTY5LDE3ICYjNDM7MTY3LDE3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgY291bnRfcGx0cyhFbGY2NF9TeW0gKnN5bXMsIEVsZjY0X1JlbGEgKnJlbGEsIGludCBudW0sXG4gXHRcdGNhc2UgUl9BQVJDSDY0X0NBTEwyNjpcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIFdlIG9ubHkgaGF2ZSB0byBjb25zaWRlciBicmFuY2ggdGFyZ2V0cyB0aGF0IHJlc29sdmVcbi1cdFx0XHQgKiB0byBzeW1ib2xzIHRoYXQgYXJlIGRlZmluZWQgaW4gYSBkaWZmZXJlbnQgc2VjdGlvbi5cbiYjNDM7XHRcdFx0ICogdG8gc3ltYm9scyB0aGF0IGFyZSBub3QgZGVmaW5lZCBpbiB0aGUgc2FtZSBtb2R1bGUuXG4gXHRcdFx0ICogVGhpcyBpcyBub3Qgc2ltcGx5IGEgaGV1cmlzdGljLCBpdCBpcyBhIGZ1bmRhbWVudGFsXG4gXHRcdFx0ICogbGltaXRhdGlvbiwgc2luY2UgdGhlcmUgaXMgbm8gZ3VhcmFudGVlZCB3YXkgdG8gZW1pdFxuIFx0XHRcdCAqIFBMVCBlbnRyaWVzIHN1ZmZpY2llbnRseSBjbG9zZSB0byB0aGUgYnJhbmNoIGlmIHRoZVxuIFx0XHRcdCAqIHNlY3Rpb24gc2l6ZSBleGNlZWRzIHRoZSByYW5nZSBvZiBhIGJyYW5jaFxuIFx0XHRcdCAqIGluc3RydWN0aW9uLiBTbyBpZ25vcmUgcmVsb2NhdGlvbnMgYWdhaW5zdCBkZWZpbmVkXG4tXHRcdFx0ICogc3ltYm9scyBpZiB0aGV5IGxpdmUgaW4gdGhlIHNhbWUgc2VjdGlvbiBhcyB0aGVcbiYjNDM7XHRcdFx0ICogc3ltYm9scyBpZiB0aGV5IGxpdmUgaW4gdGhlIHNhbWUgbW9kdWxlIGFzIHRoZVxuIFx0XHRcdCAqIHJlbG9jYXRpb24gdGFyZ2V0LlxuIFx0XHRcdCAqL1xuIFx0XHRcdHMgPSBzeW1zICYjNDM7IEVMRjY0X1JfU1lNKHJlbGFbaV0ucl9pbmZvKTtcbi1cdFx0XHRpZiAocy1cdTAwM2VzdF9zaG5keCA9PSBkc3RpZHgpXG4mIzQzO1x0XHRcdGlmIChzLVx1MDAzZXN0X3NobmR4ICE9IFNITl9VTkRFRilcbiBcdFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRcdC8qXG5AQCAtMjc3LDEzICYjNDM7Mjc1LDE0IEBAIHN0YXRpYyBpbnQgcGFydGl0aW9uX2JyYW5jaF9wbHRfcmVsYXMoRWxmNjRfU3ltICpzeW1zLCBFbGY2NF9SZWxhICpyZWxhLFxuIFx0cmV0dXJuIGk7XG4gfVxuIFxuJiM0MztzdGF0aWMgY29uc3QgaW50IGZ0cmFjZV9wbHRzID0gSVNfRU5BQkxFRChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpID8gTlJfRlRSQUNFX1BMVFMgOiAwO1xuJiM0MztcbiBpbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqZWhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXG4gXHRcdFx0ICAgICAgY2hhciAqc2Vjc3RyaW5ncywgc3RydWN0IG1vZHVsZSAqbW9kKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgY29yZV9wbHRzID0gMDtcbi1cdHVuc2lnbmVkIGxvbmcgaW5pdF9wbHRzID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNvcmVfcGx0cyA9IGZ0cmFjZV9wbHRzO1xuIFx0RWxmNjRfU3ltICpzeW1zID0gTlVMTDtcbi1cdEVsZl9TaGRyICpwbHRzZWMsICp0cmFtcCA9IE5VTEwsICppbml0X3RyYW1wID0gTlVMTDtcbiYjNDM7XHRFbGZfU2hkciAqcGx0c2VjO1xuIFx0aW50IGk7XG4gXG4gXHQvKlxuQEAgLTI5MywyMCAmIzQzOzI5MiwxMiBAQCBpbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqZWhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlaGRyLVx1MDAzZWVfc2hudW07IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICghc3RyY21wKHNlY3N0cmluZ3MgJiM0Mzsgc2VjaGRyc1tpXS5zaF9uYW1lLCBcJiMzNDsucGx0XCYjMzQ7KSlcbiBcdFx0XHRtb2QtXHUwMDNlYXJjaC5jb3JlLnBsdF9zaG5keCA9IGk7XG4tXHRcdGVsc2UgaWYgKCFzdHJjbXAoc2Vjc3RyaW5ncyAmIzQzOyBzZWNoZHJzW2ldLnNoX25hbWUsIFwmIzM0Oy5pbml0LnBsdFwmIzM0OykpXG4tXHRcdFx0bW9kLVx1MDAzZWFyY2guaW5pdC5wbHRfc2huZHggPSBpO1xuLVx0XHRlbHNlIGlmICghc3RyY21wKHNlY3N0cmluZ3MgJiM0Mzsgc2VjaGRyc1tpXS5zaF9uYW1lLFxuLVx0XHRcdFx0IFwmIzM0Oy50ZXh0LmZ0cmFjZV90cmFtcG9saW5lXCYjMzQ7KSlcbi1cdFx0XHR0cmFtcCA9IHNlY2hkcnMgJiM0MzsgaTtcbi1cdFx0ZWxzZSBpZiAoIXN0cmNtcChzZWNzdHJpbmdzICYjNDM7IHNlY2hkcnNbaV0uc2hfbmFtZSxcbi1cdFx0XHRcdCBcJiMzNDsuaW5pdC50ZXh0LmZ0cmFjZV90cmFtcG9saW5lXCYjMzQ7KSlcbi1cdFx0XHRpbml0X3RyYW1wID0gc2VjaGRycyAmIzQzOyBpO1xuIFx0XHRlbHNlIGlmIChzZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX1NZTVRBQilcbiBcdFx0XHRzeW1zID0gKEVsZjY0X1N5bSAqKXNlY2hkcnNbaV0uc2hfYWRkcjtcbiBcdH1cbiBcbi1cdGlmICghbW9kLVx1MDAzZWFyY2guY29yZS5wbHRfc2huZHggfHwgIW1vZC1cdTAwM2VhcmNoLmluaXQucGx0X3NobmR4KSB7XG4tXHRcdHByX2VycihcJiMzNDslczogbW9kdWxlIFBMVCBzZWN0aW9uKHMpIG1pc3NpbmdcXG5cJiMzNDssIG1vZC1cdTAwM2VuYW1lKTtcbiYjNDM7XHRpZiAoIW1vZC1cdTAwM2VhcmNoLmNvcmUucGx0X3NobmR4KSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7JXM6IG1vZHVsZSBQTFQgc2VjdGlvbiBtaXNzaW5nXFxuXCYjMzQ7LCBtb2QtXHUwMDNlbmFtZSk7XG4gXHRcdHJldHVybiAtRU5PRVhFQztcbiBcdH1cbiBcdGlmICghc3ltcykge1xuQEAgLTMzNSwxMiAmIzQzOzMyNiw4IEBAIGludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICplaGRyLCBFbGZfU2hkciAqc2VjaGRycyxcbiBcdFx0aWYgKG5lbnRzKVxuIFx0XHRcdHNvcnQocmVscywgbmVudHMsIHNpemVvZihFbGY2NF9SZWxhKSwgY21wX3JlbGEsIE5VTEwpO1xuIFxuLVx0XHRpZiAoIW1vZHVsZV9pbml0X2xheW91dF9zZWN0aW9uKHNlY3N0cmluZ3MgJiM0MzsgZHN0c2VjLVx1MDAzZXNoX25hbWUpKVxuLVx0XHRcdGNvcmVfcGx0cyAmIzQzOz0gY291bnRfcGx0cyhzeW1zLCByZWxzLCBudW1yZWxzLFxuLVx0XHRcdFx0XHRcdHNlY2hkcnNbaV0uc2hfaW5mbywgZHN0c2VjKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdGluaXRfcGx0cyAmIzQzOz0gY291bnRfcGx0cyhzeW1zLCByZWxzLCBudW1yZWxzLFxuLVx0XHRcdFx0XHRcdHNlY2hkcnNbaV0uc2hfaW5mbywgZHN0c2VjKTtcbiYjNDM7XHRcdGNvcmVfcGx0cyAmIzQzOz0gY291bnRfcGx0cyhzeW1zLCByZWxzLCBudW1yZWxzLCBzZWNoZHJzW2ldLnNoX2luZm8sXG4mIzQzO1x0XHRcdFx0XHRkc3RzZWMpO1xuIFx0fVxuIFxuIFx0cGx0c2VjID0gc2VjaGRycyAmIzQzOyBtb2QtXHUwMDNlYXJjaC5jb3JlLnBsdF9zaG5keDtcbkBAIC0zNDgsMzAgJiM0MzszMzUsOCBAQCBpbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqZWhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXG4gXHRwbHRzZWMtXHUwMDNlc2hfZmxhZ3MgPSBTSEZfRVhFQ0lOU1RSIHwgU0hGX0FMTE9DO1xuIFx0cGx0c2VjLVx1MDAzZXNoX2FkZHJhbGlnbiA9IEwxX0NBQ0hFX0JZVEVTO1xuIFx0cGx0c2VjLVx1MDAzZXNoX3NpemUgPSAoY29yZV9wbHRzICAmIzQzOyAxKSAqIHNpemVvZihzdHJ1Y3QgcGx0X2VudHJ5KTtcbi1cdG1vZC1cdTAwM2VhcmNoLmNvcmUucGx0X251bV9lbnRyaWVzID0gMDtcbiYjNDM7XHRtb2QtXHUwMDNlYXJjaC5jb3JlLnBsdF9udW1fZW50cmllcyA9IGZ0cmFjZV9wbHRzO1xuIFx0bW9kLVx1MDAzZWFyY2guY29yZS5wbHRfbWF4X2VudHJpZXMgPSBjb3JlX3BsdHM7XG4gXG4tXHRwbHRzZWMgPSBzZWNoZHJzICYjNDM7IG1vZC1cdTAwM2VhcmNoLmluaXQucGx0X3NobmR4O1xuLVx0cGx0c2VjLVx1MDAzZXNoX3R5cGUgPSBTSFRfTk9CSVRTO1xuLVx0cGx0c2VjLVx1MDAzZXNoX2ZsYWdzID0gU0hGX0VYRUNJTlNUUiB8IFNIRl9BTExPQztcbi1cdHBsdHNlYy1cdTAwM2VzaF9hZGRyYWxpZ24gPSBMMV9DQUNIRV9CWVRFUztcbi1cdHBsdHNlYy1cdTAwM2VzaF9zaXplID0gKGluaXRfcGx0cyAmIzQzOyAxKSAqIHNpemVvZihzdHJ1Y3QgcGx0X2VudHJ5KTtcbi1cdG1vZC1cdTAwM2VhcmNoLmluaXQucGx0X251bV9lbnRyaWVzID0gMDtcbi1cdG1vZC1cdTAwM2VhcmNoLmluaXQucGx0X21heF9lbnRyaWVzID0gaW5pdF9wbHRzO1xuLVxuLVx0aWYgKHRyYW1wKSB7XG4tXHRcdHRyYW1wLVx1MDAzZXNoX3R5cGUgPSBTSFRfTk9CSVRTO1xuLVx0XHR0cmFtcC1cdTAwM2VzaF9mbGFncyA9IFNIRl9FWEVDSU5TVFIgfCBTSEZfQUxMT0M7XG4tXHRcdHRyYW1wLVx1MDAzZXNoX2FkZHJhbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCBwbHRfZW50cnkpO1xuLVx0XHR0cmFtcC1cdTAwM2VzaF9zaXplID0gTlJfRlRSQUNFX1BMVFMgKiBzaXplb2Yoc3RydWN0IHBsdF9lbnRyeSk7XG4tXHR9XG4tXG4tXHRpZiAoaW5pdF90cmFtcCkge1xuLVx0XHRpbml0X3RyYW1wLVx1MDAzZXNoX3R5cGUgPSBTSFRfTk9CSVRTO1xuLVx0XHRpbml0X3RyYW1wLVx1MDAzZXNoX2ZsYWdzID0gU0hGX0VYRUNJTlNUUiB8IFNIRl9BTExPQztcbi1cdFx0aW5pdF90cmFtcC1cdTAwM2VzaF9hZGRyYWxpZ24gPSBfX2FsaWdub2ZfXyhzdHJ1Y3QgcGx0X2VudHJ5KTtcbi1cdFx0aW5pdF90cmFtcC1cdTAwM2VzaF9zaXplID0gTlJfRlRSQUNFX1BMVFMgKiBzaXplb2Yoc3RydWN0IHBsdF9lbnRyeSk7XG4tXHR9XG4tXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuY1xuaW5kZXggMjRhZGI1ODFhZjBlYi4uNjIwYzJiNzAxMTVlNSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuY1xuQEAgLTQ1NCwyOSAmIzQzOzQ1NCwxMSBAQCBzdGF0aWMgaW50IG1vZHVsZV9pbml0X2Z0cmFjZV9wbHQoY29uc3QgRWxmX0VoZHIgKmhkcixcbiBcdFx0XHRcdCAgc3RydWN0IG1vZHVsZSAqbW9kKVxuIHtcbiAjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpXG4tXHRjb25zdCBFbGZfU2hkciAqcztcbi1cdHN0cnVjdCBwbHRfZW50cnkgKnBsdHM7XG4tXG4tXHRzID0gZmluZF9zZWN0aW9uKGhkciwgc2VjaGRycywgXCYjMzQ7LnRleHQuZnRyYWNlX3RyYW1wb2xpbmVcJiMzNDspO1xuLVx0aWYgKCFzKVxuLVx0XHRyZXR1cm4gLUVOT0VYRUM7XG4tXG4tXHRwbHRzID0gKHZvaWQgKilzLVx1MDAzZXNoX2FkZHI7XG4mIzQzO1x0c3RydWN0IHBsdF9lbnRyeSAqcGx0cyA9ICh2b2lkICopc2VjaGRyc1ttb2QtXHUwMDNlYXJjaC5jb3JlLnBsdF9zaG5keF0uc2hfYWRkcjtcbiBcbiBcdF9faW5pdF9wbHQoXHUwMDI2cGx0c1tGVFJBQ0VfUExUX0lEWF0sIEZUUkFDRV9BRERSKTtcbiBcbiBcdG1vZC1cdTAwM2VhcmNoLmZ0cmFjZV90cmFtcG9saW5lcyA9IHBsdHM7XG4tXG4tXHRzID0gZmluZF9zZWN0aW9uKGhkciwgc2VjaGRycywgXCYjMzQ7LmluaXQudGV4dC5mdHJhY2VfdHJhbXBvbGluZVwmIzM0Oyk7XG4tXHRpZiAoIXMpXG4tXHRcdHJldHVybiAtRU5PRVhFQztcbi1cbi1cdHBsdHMgPSAodm9pZCAqKXMtXHUwMDNlc2hfYWRkcjtcbi1cbi1cdF9faW5pdF9wbHQoXHUwMDI2cGx0c1tGVFJBQ0VfUExUX0lEWF0sIEZUUkFDRV9BRERSKTtcbi1cbi1cdG1vZC1cdTAwM2VhcmNoLmluaXRfZnRyYWNlX3RyYW1wb2xpbmVzID0gcGx0cztcbi1cbiAjZW5kaWZcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2luaXQuYyBiL2FyY2gvYXJtNjQvbW0vaW5pdC5jXG5pbmRleCA5Nzk4N2Y4NTBhMzNjLi5lNmM5ODA0NTA0NmUyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9tbS9pbml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vaW5pdC5jXG5AQCAtNTMxLDcgJiM0Mzs1MzEsOCBAQCBzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG4gXHRcdFx0W0VYRUNNRU1fREVGQVVMVF0gPSB7XG4gXHRcdFx0XHQuc3RhcnRcdD0gc3RhcnQsXG4gXHRcdFx0XHQuZW5kXHQ9IGVuZCxcbi1cdFx0XHRcdC5wZ3Byb3RcdD0gUEFHRV9LRVJORUwsXG4mIzQzO1x0XHRcdFx0LnBncHJvdFx0PSBQQUdFX0tFUk5FTF9ST1gsXG4mIzQzO1x0XHRcdFx0LmZsYWdzXHQ9IEVYRUNNRU1fUk9YX0NBQ0hFLFxuIFx0XHRcdFx0LmFsaWdubWVudCA9IDEsXG4gXHRcdFx0XHQuZmFsbGJhY2tfc3RhcnRcdD0gZmFsbGJhY2tfc3RhcnQsXG4gXHRcdFx0XHQuZmFsbGJhY2tfZW5kXHQ9IGZhbGxiYWNrX2VuZCxcbkBAIC01NDgsOSAmIzQzOzU0OSwyNSBAQCBzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG4gXHRcdFx0XHQucGdwcm90XHQ9IFBBR0VfS0VSTkVMLFxuIFx0XHRcdFx0LmFsaWdubWVudCA9IDEsXG4gXHRcdFx0fSxcbiYjNDM7XHRcdFx0W0VYRUNNRU1fTU9EVUxFX0RBVEFdID0ge1xuJiM0MztcdFx0XHRcdC5zdGFydFx0PSBzdGFydCxcbiYjNDM7XHRcdFx0XHQuZW5kXHQ9IGVuZCxcbiYjNDM7XHRcdFx0XHQucGdwcm90XHQ9IFBBR0VfS0VSTkVMLFxuJiM0MztcdFx0XHRcdC5hbGlnbm1lbnQgPSAxLFxuJiM0MztcdFx0XHRcdC5mYWxsYmFja19zdGFydFx0PSBmYWxsYmFja19zdGFydCxcbiYjNDM7XHRcdFx0XHQuZmFsbGJhY2tfZW5kXHQ9IGZhbGxiYWNrX2VuZCxcbiYjNDM7XHRcdFx0fSxcbiBcdFx0fSxcbiBcdH07XG4gXG4mIzQzO1x0aWYgKCFzeXN0ZW1fc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCgpKVxuJiM0MztcdFx0ZXhlY21lbV9pbmZvLnJhbmdlc1tFWEVDTUVNX0RFRkFVTFRdLmZsYWdzIHw9IEVYRUNNRU1fTk9fSFVHRV9WTUFQO1xuJiM0MztcbiBcdHJldHVybiBcdTAwMjZleGVjbWVtX2luZm87XG4gfVxuJiM0MztcbiYjNDM7dm9pZCBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnModm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdG1lbXNldDMyKHB0ciwgQUFSQ0g2NF9CUkVBS19GQVVMVCwgc2l6ZSAvIHNpemVvZihfX2xlMzIpKTtcbiYjNDM7fVxuICNlbmRpZiAvKiBDT05GSUdfRVhFQ01FTSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYyBiL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xuaW5kZXggYmJlOThhYzlhZDhjNi4uMjBmZjljYjI3M2MxMSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXG5AQCAtMTY5LDggJiM0MzsxNjksNiBAQCBzdGF0aWMgaW50IGNoYW5nZV9tZW1vcnlfY29tbW9uKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLFxuIFx0ICogd2UgYXJlIG9wZXJhdGluZyBvbiBkb2VzIG5vdCByZXN1bHQgaW4gc3VjaCBzcGxpdHRpbmcuXG4gXHQgKlxuIFx0ICogTGV0JiMzOTtzIHJlc3RyaWN0IG91cnNlbHZlcyB0byBtYXBwaW5ncyBjcmVhdGVkIGJ5IHZtYWxsb2MgKG9yIHZtYXApLlxuLVx0ICogRGlzYWxsb3cgVk1fQUxMT1dfSFVHRV9WTUFQIG1hcHBpbmdzIHRvIGd1YXJhbnRlZSB0aGF0IG9ubHkgcGFnZVxuLVx0ICogbWFwcGluZ3MgYXJlIHVwZGF0ZWQgYW5kIHNwbGl0dGluZyBpcyBuZXZlciBuZWVkZWQuXG4gXHQgKlxuIFx0ICogU28gY2hlY2sgd2hldGhlciB0aGUgW2FkZHIsIGFkZHIgJiM0Mzsgc2l6ZSkgaW50ZXJ2YWwgaXMgZW50aXJlbHlcbiBcdCAqIGNvdmVyZWQgYnkgcHJlY2lzZWx5IG9uZSBWTSBhcmVhIHRoYXQgaGFzIHRoZSBWTV9BTExPQyBmbGFnIHNldC5cbkBAIC0xNzksNyAmIzQzOzE3NywxNiBAQCBzdGF0aWMgaW50IGNoYW5nZV9tZW1vcnlfY29tbW9uKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLFxuIFx0aWYgKCFhcmVhIHx8XG4gXHQgICAgKCh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZygodm9pZCAqKWVuZCkgXHUwMDNlXG4gXHQgICAgICh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZyhhcmVhLVx1MDAzZWFkZHIpICYjNDM7IGFyZWEtXHUwMDNlc2l6ZSkgfHxcbi1cdCAgICAoKGFyZWEtXHUwMDNlZmxhZ3MgXHUwMDI2IChWTV9BTExPQyB8IFZNX0FMTE9XX0hVR0VfVk1BUCkpICE9IFZNX0FMTE9DKSlcbiYjNDM7XHQgICAgIShhcmVhLVx1MDAzZWZsYWdzIFx1MDAyNiBWTV9BTExPQykpXG4mIzQzOyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERpc2FsbG93IFZNX0FMTE9XX0hVR0VfVk1BUCBtYXBwaW5ncyB1bmxlc3MgdGhlIHJlZ2lvbiBpcyBQTURcbiYjNDM7XHQgKiBhbGlnbmVkLCBvciBzcGxpdHRpbmcgbGl2ZSBodWdlIG1hcHBpbmdzIGlzIHN1cHBvcnRlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKGFyZWEtXHUwMDNlZmxhZ3MgXHUwMDI2IFZNX0FMTE9XX0hVR0VfVk1BUCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgKChzdGFydCAlIFBNRF9TSVpFKSB8fCAoc2l6ZSAlIFBNRF9TSVpFKSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgV0FSTl9PTl9PTkNFKCFzeXN0ZW1fc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCgpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIW51bXBhZ2VzKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXhlY21lbS5oIGIvaW5jbHVkZS9saW51eC9leGVjbWVtLmhcbmluZGV4IDdkZTIyOTEzNGUzMDcuLmIwNDkyNmYzZmZmMjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9leGVjbWVtLmhcbkBAIC00OCwxMCAmIzQzOzQ4LDEyIEBAIGVudW0gZXhlY21lbV90eXBlIHtcbiAgKiBlbnVtIGV4ZWNtZW1fcmFuZ2VfZmxhZ3MgLSBvcHRpb25zIGZvciBleGVjdXRhYmxlIG1lbW9yeSBhbGxvY2F0aW9uc1xuICAqIEBFWEVDTUVNX0tBU0FOX1NIQURPVzpcdGFsbG9jYXRlIGthc2FuIHNoYWRvd1xuICAqIEBFWEVDTUVNX1JPWF9DQUNIRTpcdFx0YWxsb2NhdGlvbnMgc2hvdWxkIHVzZSBST1ggY2FjaGUgb2YgaHVnZSBwYWdlc1xuJiM0MzsgKiBARVhFQ01FTV9OT19IVUdFX1ZNQVA6XHRjYWNoZSBhbGxvY2F0aW9ucyBtdXN0IGF2b2lkIGh1Z2Ugdm1hcHBpbmdzXG4gICovXG4gZW51bSBleGVjbWVtX3JhbmdlX2ZsYWdzIHtcbiBcdEVYRUNNRU1fS0FTQU5fU0hBRE9XXHQ9ICgxIFx1MDAzY1x1MDAzYyAwKSxcbiBcdEVYRUNNRU1fUk9YX0NBQ0hFXHQ9ICgxIFx1MDAzY1x1MDAzYyAxKSxcbiYjNDM7XHRFWEVDTUVNX05PX0hVR0VfVk1BUFx0PSAoMSBcdTAwM2NcdTAwM2MgMiksXG4gfTtcbiBcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX0VYRUNNRU1fUk9YXG5AQCAtMTc4LDYgJiM0MzsxODAsMTUgQEAgdm9pZCBleGVjbWVtX2ZyZWUodm9pZCAqcHRyKTtcbiBcbiBERUZJTkVfRlJFRShleGVjbWVtLCB2b2lkICosIGlmIChfVCkgZXhlY21lbV9mcmVlKF9UKSk7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBleGVjbWVtX3NwbGl0IC0gYWxsb2NhdGUgc3BhY2UgZnJvbSBhbiBleGlzdGluZyBleGVjbWVtIGNhY2hlIGFsbG9jYXRpb25cbiYjNDM7ICogQHB0ciAgLSB0aGUgZXhpc3RpbmcgZXhlY21lbSBjYWNoZSBhbGxvY2F0aW9uXG4mIzQzOyAqIEBzaXplIC0gdGhlIHNpemUgdG8gY2FydmUgb3V0IGZyb20gdGhlIGV4aXN0aW5nIGFsbG9jYXRpb25cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0aGUgYWRkcmVzcyBvZiB0aGUgY2FydmVkIG91dCBhbGxvY2F0aW9uLCBvciAlTlVMTCBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCAqZXhlY21lbV9zcGxpdCh2b2lkICpwdHIsIHNpemVfdCBzaXplKTtcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19NTVVcbiAvKipcbiAgKiBleGVjbWVtX3ZtYXAgLSBjcmVhdGUgdmlydHVhbCBtYXBwaW5nIGZvciBFWEVDTUVNX01PRFVMRV9EQVRBIG1lbW9yeVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oXG5pbmRleCA3NTY2ODE1ZmFiYmU4Li4wMzM2YTQ2NzMzZGQ5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaFxuQEAgLTMxNiwxMCAmIzQzOzMxNiwxMCBAQCBzdHJ1Y3QgbW9kX3RyZWVfbm9kZSB7XG4gfTtcbiBcbiBlbnVtIG1vZF9tZW1fdHlwZSB7XG4tXHRNT0RfVEVYVCA9IDAsXG4tXHRNT0RfREFUQSxcbiYjNDM7XHRNT0RfREFUQSA9IDAsXG4gXHRNT0RfUk9EQVRBLFxuIFx0TU9EX1JPX0FGVEVSX0lOSVQsXG4mIzQzO1x0TU9EX1RFWFQsXG4gXHRNT0RfSU5JVF9URVhULFxuIFx0TU9EX0lOSVRfREFUQSxcbiBcdE1PRF9JTklUX1JPREFUQSxcbmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL21haW4uYyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG5pbmRleCA0NmRkOGQyNWE2MDU4Li4yZDYyMTM0OTYzNTk3IDEwMDY0NFxuLS0tIGEva2VybmVsL21vZHVsZS9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG5AQCAtMTM0Miw3ICYjNDM7MTM0Miw3IEBAIHN0YXRpYyBpbnQgbW9kdWxlX21lbW9yeV9hbGxvYyhzdHJ1Y3QgbW9kdWxlICptb2QsIGVudW0gbW9kX21lbV90eXBlIHR5cGUpXG4ge1xuIFx0dW5zaWduZWQgaW50IHNpemUgPSBQQUdFX0FMSUdOKG1vZC1cdTAwM2VtZW1bdHlwZV0uc2l6ZSk7XG4gXHRlbnVtIGV4ZWNtZW1fdHlwZSBleGVjbWVtX3R5cGU7XG4tXHR2b2lkICpwdHI7XG4mIzQzO1x0dm9pZCAqcHRyID0gTlVMTDtcbiBcbiBcdG1vZC1cdTAwM2VtZW1bdHlwZV0uc2l6ZSA9IHNpemU7XG4gXG5AQCAtMTM1MSwxMSAmIzQzOzEzNTEsMjUgQEAgc3RhdGljIGludCBtb2R1bGVfbWVtb3J5X2FsbG9jKHN0cnVjdCBtb2R1bGUgKm1vZCwgZW51bSBtb2RfbWVtX3R5cGUgdHlwZSlcbiBcdGVsc2VcbiBcdFx0ZXhlY21lbV90eXBlID0gRVhFQ01FTV9NT0RVTEVfVEVYVDtcbiBcbi1cdHB0ciA9IGV4ZWNtZW1fYWxsb2NfcncoZXhlY21lbV90eXBlLCBzaXplKTtcbiYjNDM7XHRib29sIGlzX3JveCA9IGV4ZWNtZW1faXNfcm94KGV4ZWNtZW1fdHlwZSk7XG4mIzQzO1x0aWYgKGlzX3JveCkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFNwZWNpYWwgY2FzZSBmb3IgTU9EX1RFWFQgLyBNT0RfSU5JVF9URVhUOiBhbGxvY2F0ZSB0aGVcbiYjNDM7XHRcdCAqIGxhdHRlciBieSBzcGxpdHRpbmcgb2ZmIHJlcXVpcmVkIHNwYWNlIGZyb20gdGhlIGZvcm1lclxuJiM0MztcdFx0ICogc28gdGhhdCB0aGV5IGFyZSBhbHdheXMgcGxhY2VkIGNsb3NlIHRvZ2V0aGVyLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodHlwZSA9PSBNT0RfVEVYVClcbiYjNDM7XHRcdFx0c2l6ZSAmIzQzOz0gUEFHRV9BTElHTihtb2QtXHUwMDNlbWVtW01PRF9JTklUX1RFWFRdLnNpemUpO1xuJiM0MztcdFx0ZWxzZSBpZiAodHlwZSA9PSBNT0RfSU5JVF9URVhUKVxuJiM0MztcdFx0XHRwdHIgPSBleGVjbWVtX3NwbGl0KG1vZC1cdTAwM2VtZW1bTU9EX1RFWFRdLmJhc2UsIHNpemUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFwdHIpXG4mIzQzO1x0XHRwdHIgPSBleGVjbWVtX2FsbG9jX3J3KGV4ZWNtZW1fdHlwZSwgc2l6ZSk7XG4gXHRpZiAoIXB0cilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRtb2QtXHUwMDNlbWVtW3R5cGVdLmlzX3JveCA9IGV4ZWNtZW1faXNfcm94KGV4ZWNtZW1fdHlwZSk7XG4mIzQzO1x0bW9kLVx1MDAzZW1lbVt0eXBlXS5pc19yb3ggPSBpc19yb3g7XG4gXG4gXHQvKlxuIFx0ICogVGhlIHBvaW50ZXIgdG8gdGhlc2UgYmxvY2tzIG9mIG1lbW9yeSBhcmUgc3RvcmVkIG9uIHRoZSBtb2R1bGVcbkBAIC0xMzY4LDcgJiM0MzsxMzgyLDcgQEAgc3RhdGljIGludCBtb2R1bGVfbWVtb3J5X2FsbG9jKHN0cnVjdCBtb2R1bGUgKm1vZCwgZW51bSBtb2RfbWVtX3R5cGUgdHlwZSlcbiBcdCAqICpkbyogZXZlbnR1YWxseSBnZXQgZnJlZWQsIGJ1dCBsZXQmIzM5O3MganVzdCBrZWVwIHRoaW5ncyBzaW1wbGVcbiBcdCAqIGFuZCBhdm9pZCAqYW55KiBmYWxzZSBwb3NpdGl2ZXMuXG4gXHQgKi9cbi1cdGlmICghbW9kLVx1MDAzZW1lbVt0eXBlXS5pc19yb3gpXG4mIzQzO1x0aWYgKCFpc19yb3gpXG4gXHRcdGttZW1sZWFrX25vdF9sZWFrKHB0cik7XG4gXG4gXHRtZW1zZXQocHRyLCAwLCBzaXplKTtcbmRpZmYgLS1naXQgYS9tbS9leGVjbWVtLmMgYi9tbS9leGVjbWVtLmNcbmluZGV4IDA4NGEyMDdlNDI3OGIuLjU3OTBkNGE4NTMyYWYgMTAwNjQ0XG4tLS0gYS9tbS9leGVjbWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2V4ZWNtZW0uY1xuQEAgLTI3Niw3ICYjNDM7Mjc2LDggQEAgc3RhdGljIHZvaWQgKl9fZXhlY21lbV9jYWNoZV9hbGxvYyhzdHJ1Y3QgZXhlY21lbV9yYW5nZSAqcmFuZ2UsIHNpemVfdCBzaXplKVxuIFxuIHN0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3BvcHVsYXRlX2FsbG9jKHN0cnVjdCBleGVjbWVtX3JhbmdlICpyYW5nZSwgc2l6ZV90IHNpemUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyB2bV9mbGFncyA9IFZNX0FMTE9XX0hVR0VfVk1BUDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHZtX2ZsYWdzID0gKHJhbmdlLVx1MDAzZWZsYWdzIFx1MDAyNiBFWEVDTUVNX05PX0hVR0VfVk1BUClcbiYjNDM7XHRcdFx0XHRcdFx0PyAwIDogVk1fQUxMT1dfSFVHRV9WTUFQO1xuIFx0c3RydWN0IG11dGV4ICptdXRleCA9IFx1MDAyNmV4ZWNtZW1fY2FjaGUubXV0ZXg7XG4gXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bTtcbiBcdHNpemVfdCBhbGxvY19zaXplO1xuQEAgLTQzOSw2ICYjNDM7NDQwLDMzIEBAIHN0YXRpYyBib29sIGV4ZWNtZW1fY2FjaGVfZnJlZSh2b2lkICpwdHIpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFwbGVfdHJlZSAqYnVzeV9hcmVhcyA9IFx1MDAyNmV4ZWNtZW1fY2FjaGUuYnVzeV9hcmVhcztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylwdHI7XG4mIzQzO1x0TUFfU1RBVEUobWFzLCBidXN5X2FyZWFzLCBhZGRyLCBhZGRyKTtcbiYjNDM7XHR2b2lkICphcmVhO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZleGVjbWVtX2NhY2hlLm11dGV4KTtcbiYjNDM7XG4mIzQzO1x0YXJlYSA9IG1hc193YWxrKFx1MDAyNm1hcyk7XG4mIzQzO1x0aWYgKCFhcmVhKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4mIzQzO1xuJiM0MztcdGlmIChzaXplIFx1MDAzZT0gbWFzX3JhbmdlX2xlbihcdTAwMjZtYXMpKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1xuJiM0MztcdGFkZHIgJiM0Mzs9IG1hc19yYW5nZV9sZW4oXHUwMDI2bWFzKSAtIHNpemU7XG4mIzQzO1x0bWFzX3NldF9yYW5nZShcdTAwMjZtYXMsIGFkZHIsIG1hcy5sYXN0KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbWFzX3N0b3JlX2dmcChcdTAwMjZtYXMsICh2b2lkICopYWRkciwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAodm9pZCAqKWFkZHI7XG4mIzQzO31cbiYjNDM7XG4gI2Vsc2UgLyogQ09ORklHX0FSQ0hfSEFTX0VYRUNNRU1fUk9YICovXG4gLypcbiAgKiB3aGVuIFJPWCBjYWNoZSBpcyBub3QgdXNlZCB0aGUgcGVybWlzc2lvbnMgZGVmaW5lZCBieSBhcmNoaXRlY3R1cmVzIGZvclxuQEAgLTQ1OSw2ICYjNDM7NDg3LDExIEBAIHN0YXRpYyBib29sIGV4ZWNtZW1fY2FjaGVfZnJlZSh2b2lkICpwdHIpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbiYjNDM7fVxuICNlbmRpZiAvKiBDT05GSUdfQVJDSF9IQVNfRVhFQ01FTV9ST1ggKi9cbiBcbiB2b2lkICpleGVjbWVtX2FsbG9jKGVudW0gZXhlY21lbV90eXBlIHR5cGUsIHNpemVfdCBzaXplKVxuQEAgLTUxMSw2ICYjNDM7NTQ0LDE4IEBAIGJvb2wgZXhlY21lbV9pc19yb3goZW51bSBleGVjbWVtX3R5cGUgdHlwZSlcbiBcdHJldHVybiAhIShleGVjbWVtX2luZm8tXHUwMDNlcmFuZ2VzW3R5cGVdLmZsYWdzIFx1MDAyNiBFWEVDTUVNX1JPWF9DQUNIRSk7XG4gfVxuIFxuJiM0Mzt2b2lkICpleGVjbWVtX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXB0ciB8fCAhc2l6ZSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRwdHIgPSBleGVjbWVtX2NhY2hlX3NwbGl0KHB0ciwgc2l6ZSk7XG4mIzQzO1x0aWYgKCFJU19FUlIocHRyKSlcbiYjNDM7XHRcdHJldHVybiBwdHI7XG4mIzQzO1x0Vk1fV0FSTl9PTihwdHIgIT0gRVJSX1BUUigtRU5PTUVNKSk7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgZXhlY21lbV92YWxpZGF0ZShzdHJ1Y3QgZXhlY21lbV9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBleGVjbWVtX3JhbmdlICpyID0gXHUwMDI2aW5mby1cdTAwM2VyYW5nZXNbRVhFQ01FTV9ERUZBVUxUXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNDo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TU9EVUxFUyYjMzQ7LAogICAgJiMzNDtEWU5BTUlDX0ZUUkFDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4ZWNtZW1fc3BsaXQmIzM0OywKICAgICYjMzQ7bW9kdWxlX2VtaXRfcGx0X2VudHJ5JiMzNDssCiAgICAmIzM0O21vZHVsZV9lbWl0X3ZlbmVlcl9mb3JfYWRycCYjMzQ7LAogICAgJiMzNDttb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zJiMzNDssCiAgICAmIzM0O2V4ZWNtZW1fZmlsbF90cmFwcGluZ19pbnNucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBBUkNIX0hBU19FWEVDTUVNX1JPWCBmb3IgYXJtNjQsIG1vZGlmeWluZyBob3cgbW9kdWxlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYnkgc3BsaXR0aW5nIE1PRF9JTklUX1RFWFQgZnJvbSBNT0RfVEVYVCB3aGVuIGV4ZWNtZW1faXNfcm94IGlzIHRydWUuIEl0IGFsc28gdXBkYXRlcyBmdHJhY2UgdHJhbXBvbGluZXMgYW5kIFBMVCBnZW5lcmF0aW9uIGZvciBtb2R1bGVzIG9uIGFybTY0IHRvIGFjY29tbW9kYXRlIHRoZXNlIGNoYW5nZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgKG1vZHVsZSBsb2FkaW5nLCBleGVjdXRhYmxlIG1lbW9yeSBhbGxvY2F0aW9uLCBmdHJhY2UpIHRoYXQgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYzgyYzc3MjA2ZWI5NWFjMWY0ZDQ1YjhmMzVjYmY4ODFjODA2ZTEzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjIgMTQ6NDg6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWcKaW5kZXggYjNhZmUwNjg4OTE5Yi4uMDgwYjk3YjBiYmQ1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvS2NvbmZpZwpAQCAtMjcsNiAmIzQzOzI3LDcgQEAgY29uZmlnIEFSTTY0CiAJc2VsZWN0IEFSQ0hfSEFTX0RNQV9PUFMgaWYgWEVOCiAJc2VsZWN0IEFSQ0hfSEFTX0RNQV9QUkVQX0NPSEVSRU5UCiAJc2VsZWN0IEFSQ0hfSEFTX0FDUElfVEFCTEVfVVBHUkFERSBpZiBBQ1BJCiYjNDM7CXNlbGVjdCBBUkNIX0hBU19FWEVDTUVNX1JPWAogCXNlbGVjdCBBUkNIX0hBU19GQVNUX01VTFRJUExJRVIKIAlzZWxlY3QgQVJDSF9IQVNfRk9SVElGWV9TT1VSQ0UKIAlzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmgKaW5kZXggZmI5Yjg4ZWViZWIxNS4uOTMyOGZhZGI0YTk1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oCkBAIC0xNSwxMSAmIzQzOzE1LDkgQEAgc3RydWN0IG1vZF9wbHRfc2VjIHsKIAogc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljIHsKIAlzdHJ1Y3QgbW9kX3BsdF9zZWMJY29yZTsKLQlzdHJ1Y3QgbW9kX3BsdF9zZWMJaW5pdDsKIAogCS8qIGZvciBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KIAlzdHJ1Y3QgcGx0X2VudHJ5CSpmdHJhY2VfdHJhbXBvbGluZXM7Ci0Jc3RydWN0IHBsdF9lbnRyeQkqaW5pdF9mdHJhY2VfdHJhbXBvbGluZXM7CiB9OwogCiB1NjQgbW9kdWxlX2VtaXRfcGx0X2VudHJ5KHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmxkcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmgKaW5kZXggMGIzYWFjZDIyYzU5MC4uOTU1NDBlOTU2YjQxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmgKQEAgLTEsOCAmIzQzOzEsNSBAQAogU0VDVElPTlMgewogCS5wbHQgMCA6IHsgQllURSgwKSB9Ci0JLmluaXQucGx0IDAgOiB7IEJZVEUoMCkgfQotCS50ZXh0LmZ0cmFjZV90cmFtcG9saW5lIDAgOiB7IEJZVEUoMCkgfQotCS5pbml0LnRleHQuZnRyYWNlX3RyYW1wb2xpbmUgMCA6IHsgQllURSgwKSB9CiAKICNpZmRlZiBDT05GSUdfS0FTQU5fU1dfVEFHUwogCS8qCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jCmluZGV4IDVhMTU1NGE0NDE2MjguLmI1NmRhMjRjMWJlNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jCkBAIC0yNTgsMTcgJiM0MzsyNTgsMTAgQEAgaW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKQogCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUocGMsIDAsIG5ldywgZmFsc2UpOwogfQogCi1zdGF0aWMgc3RydWN0IHBsdF9lbnRyeSAqZ2V0X2Z0cmFjZV9wbHQoc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7c3RhdGljIHN0cnVjdCBwbHRfZW50cnkgKmdldF9mdHJhY2VfcGx0KHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKICNpZmRlZiBDT05GSUdfTU9EVUxFUwotCXN0cnVjdCBwbHRfZW50cnkgKnBsdCA9IE5VTEw7Ci0KLQlpZiAod2l0aGluX21vZHVsZV9tZW1fdHlwZShhZGRyLCBtb2QsIE1PRF9JTklUX1RFWFQpKQotCQlwbHQgPSBtb2QtJmd0O2FyY2guaW5pdF9mdHJhY2VfdHJhbXBvbGluZXM7Ci0JZWxzZSBpZiAod2l0aGluX21vZHVsZV9tZW1fdHlwZShhZGRyLCBtb2QsIE1PRF9URVhUKSkKLQkJcGx0ID0gbW9kLSZndDthcmNoLmZ0cmFjZV90cmFtcG9saW5lczsKLQllbHNlCi0JCXJldHVybiBOVUxMOwomIzQzOwlzdHJ1Y3QgcGx0X2VudHJ5ICpwbHQgPSBtb2QtJmd0O2FyY2guZnRyYWNlX3RyYW1wb2xpbmVzOwogCiAJcmV0dXJuICZhbXA7cGx0W0ZUUkFDRV9QTFRfSURYXTsKICNlbHNlCkBAIC0zMzksNyAmIzQzOzMzMiw3IEBAIHN0YXRpYyBib29sIGZ0cmFjZV9maW5kX2NhbGxhYmxlX2FkZHIoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywKIAlpZiAoV0FSTl9PTighbW9kKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JcGx0ID0gZ2V0X2Z0cmFjZV9wbHQobW9kLCBwYyk7CiYjNDM7CXBsdCA9IGdldF9mdHJhY2VfcGx0KG1vZCk7CiAJaWYgKCFwbHQpIHsKIAkJcHJfZXJyKCYjMzQ7ZnRyYWNlOiBubyBtb2R1bGUgUExUIGZvciAlcHNcbiYjMzQ7LCAodm9pZCAqKSphZGRyKTsKIAkJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYyBiL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmMKaW5kZXggN2FmZDM3MGRhOWY0OC4uNjkwMGQyMjQyZjFiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jCkBAIC03MCw4ICYjNDM7NzAsNyBAQCB1NjQgbW9kdWxlX2VtaXRfcGx0X2VudHJ5KHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycywKIAkJCSAgdm9pZCAqbG9jLCBjb25zdCBFbGY2NF9SZWxhICpyZWxhLAogCQkJICBFbGY2NF9TeW0gKnN5bSkKIHsKLQlzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9ICF3aXRoaW5fbW9kdWxlX2luaXQoKHVuc2lnbmVkIGxvbmcpbG9jLCBtb2QpID8KLQkJCQkJCSZhbXA7bW9kLSZndDthcmNoLmNvcmUgOiAmYW1wO21vZC0mZ3Q7YXJjaC5pbml0OwomIzQzOwlzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9ICZhbXA7bW9kLSZndDthcmNoLmNvcmU7CiAJc3RydWN0IHBsdF9lbnRyeSAqcGx0ID0gKHN0cnVjdCBwbHRfZW50cnkgKilzZWNoZHJzW3BsdHNlYy0mZ3Q7cGx0X3NobmR4XS5zaF9hZGRyOwogCWludCBpID0gcGx0c2VjLSZndDtwbHRfbnVtX2VudHJpZXM7CiAJaW50IGogPSBpIC0gMTsKQEAgLTEwMSw4ICYjNDM7MTAwLDcgQEAgdTY0IG1vZHVsZV9lbWl0X3BsdF9lbnRyeShzdHJ1Y3QgbW9kdWxlICptb2QsIEVsZjY0X1NoZHIgKnNlY2hkcnMsCiB1NjQgbW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwKHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycywKIAkJCQl2b2lkICpsb2MsIHU2NCB2YWwpCiB7Ci0Jc3RydWN0IG1vZF9wbHRfc2VjICpwbHRzZWMgPSAhd2l0aGluX21vZHVsZV9pbml0KCh1bnNpZ25lZCBsb25nKWxvYywgbW9kKSA/Ci0JCQkJCQkmYW1wO21vZC0mZ3Q7YXJjaC5jb3JlIDogJmFtcDttb2QtJmd0O2FyY2guaW5pdDsKJiM0MzsJc3RydWN0IG1vZF9wbHRfc2VjICpwbHRzZWMgPSAmYW1wO21vZC0mZ3Q7YXJjaC5jb3JlOwogCXN0cnVjdCBwbHRfZW50cnkgKnBsdCA9IChzdHJ1Y3QgcGx0X2VudHJ5ICopc2VjaGRyc1twbHRzZWMtJmd0O3BsdF9zaG5keF0uc2hfYWRkcjsKIAlpbnQgaSA9IHBsdHNlYy0mZ3Q7cGx0X251bV9lbnRyaWVzJiM0MzsmIzQzOzsKIAl1MzIgYnI7CkBAIC0xNjksMTcgJiM0MzsxNjcsMTcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBjb3VudF9wbHRzKEVsZjY0X1N5bSAqc3ltcywgRWxmNjRfUmVsYSAqcmVsYSwgaW50IG51bSwKIAkJY2FzZSBSX0FBUkNINjRfQ0FMTDI2OgogCQkJLyoKIAkJCSAqIFdlIG9ubHkgaGF2ZSB0byBjb25zaWRlciBicmFuY2ggdGFyZ2V0cyB0aGF0IHJlc29sdmUKLQkJCSAqIHRvIHN5bWJvbHMgdGhhdCBhcmUgZGVmaW5lZCBpbiBhIGRpZmZlcmVudCBzZWN0aW9uLgomIzQzOwkJCSAqIHRvIHN5bWJvbHMgdGhhdCBhcmUgbm90IGRlZmluZWQgaW4gdGhlIHNhbWUgbW9kdWxlLgogCQkJICogVGhpcyBpcyBub3Qgc2ltcGx5IGEgaGV1cmlzdGljLCBpdCBpcyBhIGZ1bmRhbWVudGFsCiAJCQkgKiBsaW1pdGF0aW9uLCBzaW5jZSB0aGVyZSBpcyBubyBndWFyYW50ZWVkIHdheSB0byBlbWl0CiAJCQkgKiBQTFQgZW50cmllcyBzdWZmaWNpZW50bHkgY2xvc2UgdG8gdGhlIGJyYW5jaCBpZiB0aGUKIAkJCSAqIHNlY3Rpb24gc2l6ZSBleGNlZWRzIHRoZSByYW5nZSBvZiBhIGJyYW5jaAogCQkJICogaW5zdHJ1Y3Rpb24uIFNvIGlnbm9yZSByZWxvY2F0aW9ucyBhZ2FpbnN0IGRlZmluZWQKLQkJCSAqIHN5bWJvbHMgaWYgdGhleSBsaXZlIGluIHRoZSBzYW1lIHNlY3Rpb24gYXMgdGhlCiYjNDM7CQkJICogc3ltYm9scyBpZiB0aGV5IGxpdmUgaW4gdGhlIHNhbWUgbW9kdWxlIGFzIHRoZQogCQkJICogcmVsb2NhdGlvbiB0YXJnZXQuCiAJCQkgKi8KIAkJCXMgPSBzeW1zICYjNDM7IEVMRjY0X1JfU1lNKHJlbGFbaV0ucl9pbmZvKTsKLQkJCWlmIChzLSZndDtzdF9zaG5keCA9PSBkc3RpZHgpCiYjNDM7CQkJaWYgKHMtJmd0O3N0X3NobmR4ICE9IFNITl9VTkRFRikKIAkJCQlicmVhazsKIAogCQkJLyoKQEAgLTI3NywxMyAmIzQzOzI3NSwxNCBAQCBzdGF0aWMgaW50IHBhcnRpdGlvbl9icmFuY2hfcGx0X3JlbGFzKEVsZjY0X1N5bSAqc3ltcywgRWxmNjRfUmVsYSAqcmVsYSwKIAlyZXR1cm4gaTsKIH0KIAomIzQzO3N0YXRpYyBjb25zdCBpbnQgZnRyYWNlX3BsdHMgPSBJU19FTkFCTEVEKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkgPyBOUl9GVFJBQ0VfUExUUyA6IDA7CiYjNDM7CiBpbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqZWhkciwgRWxmX1NoZHIgKnNlY2hkcnMsCiAJCQkgICAgICBjaGFyICpzZWNzdHJpbmdzLCBzdHJ1Y3QgbW9kdWxlICptb2QpCiB7Ci0JdW5zaWduZWQgbG9uZyBjb3JlX3BsdHMgPSAwOwotCXVuc2lnbmVkIGxvbmcgaW5pdF9wbHRzID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBjb3JlX3BsdHMgPSBmdHJhY2VfcGx0czsKIAlFbGY2NF9TeW0gKnN5bXMgPSBOVUxMOwotCUVsZl9TaGRyICpwbHRzZWMsICp0cmFtcCA9IE5VTEwsICppbml0X3RyYW1wID0gTlVMTDsKJiM0MzsJRWxmX1NoZHIgKnBsdHNlYzsKIAlpbnQgaTsKIAogCS8qCkBAIC0yOTMsMjAgJiM0MzsyOTIsMTIgQEAgaW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLAogCWZvciAoaSA9IDA7IGkgJmx0OyBlaGRyLSZndDtlX3NobnVtOyBpJiM0MzsmIzQzOykgewogCQlpZiAoIXN0cmNtcChzZWNzdHJpbmdzICYjNDM7IHNlY2hkcnNbaV0uc2hfbmFtZSwgJiMzNDsucGx0JiMzNDspKQogCQkJbW9kLSZndDthcmNoLmNvcmUucGx0X3NobmR4ID0gaTsKLQkJZWxzZSBpZiAoIXN0cmNtcChzZWNzdHJpbmdzICYjNDM7IHNlY2hkcnNbaV0uc2hfbmFtZSwgJiMzNDsuaW5pdC5wbHQmIzM0OykpCi0JCQltb2QtJmd0O2FyY2guaW5pdC5wbHRfc2huZHggPSBpOwotCQllbHNlIGlmICghc3RyY21wKHNlY3N0cmluZ3MgJiM0Mzsgc2VjaGRyc1tpXS5zaF9uYW1lLAotCQkJCSAmIzM0Oy50ZXh0LmZ0cmFjZV90cmFtcG9saW5lJiMzNDspKQotCQkJdHJhbXAgPSBzZWNoZHJzICYjNDM7IGk7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoc2Vjc3RyaW5ncyAmIzQzOyBzZWNoZHJzW2ldLnNoX25hbWUsCi0JCQkJICYjMzQ7LmluaXQudGV4dC5mdHJhY2VfdHJhbXBvbGluZSYjMzQ7KSkKLQkJCWluaXRfdHJhbXAgPSBzZWNoZHJzICYjNDM7IGk7CiAJCWVsc2UgaWYgKHNlY2hkcnNbaV0uc2hfdHlwZSA9PSBTSFRfU1lNVEFCKQogCQkJc3ltcyA9IChFbGY2NF9TeW0gKilzZWNoZHJzW2ldLnNoX2FkZHI7CiAJfQogCi0JaWYgKCFtb2QtJmd0O2FyY2guY29yZS5wbHRfc2huZHggfHwgIW1vZC0mZ3Q7YXJjaC5pbml0LnBsdF9zaG5keCkgewotCQlwcl9lcnIoJiMzNDslczogbW9kdWxlIFBMVCBzZWN0aW9uKHMpIG1pc3NpbmdcbiYjMzQ7LCBtb2QtJmd0O25hbWUpOwomIzQzOwlpZiAoIW1vZC0mZ3Q7YXJjaC5jb3JlLnBsdF9zaG5keCkgewomIzQzOwkJcHJfZXJyKCYjMzQ7JXM6IG1vZHVsZSBQTFQgc2VjdGlvbiBtaXNzaW5nXG4mIzM0OywgbW9kLSZndDtuYW1lKTsKIAkJcmV0dXJuIC1FTk9FWEVDOwogCX0KIAlpZiAoIXN5bXMpIHsKQEAgLTMzNSwxMiAmIzQzOzMyNiw4IEBAIGludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICplaGRyLCBFbGZfU2hkciAqc2VjaGRycywKIAkJaWYgKG5lbnRzKQogCQkJc29ydChyZWxzLCBuZW50cywgc2l6ZW9mKEVsZjY0X1JlbGEpLCBjbXBfcmVsYSwgTlVMTCk7CiAKLQkJaWYgKCFtb2R1bGVfaW5pdF9sYXlvdXRfc2VjdGlvbihzZWNzdHJpbmdzICYjNDM7IGRzdHNlYy0mZ3Q7c2hfbmFtZSkpCi0JCQljb3JlX3BsdHMgJiM0Mzs9IGNvdW50X3BsdHMoc3ltcywgcmVscywgbnVtcmVscywKLQkJCQkJCXNlY2hkcnNbaV0uc2hfaW5mbywgZHN0c2VjKTsKLQkJZWxzZQotCQkJaW5pdF9wbHRzICYjNDM7PSBjb3VudF9wbHRzKHN5bXMsIHJlbHMsIG51bXJlbHMsCi0JCQkJCQlzZWNoZHJzW2ldLnNoX2luZm8sIGRzdHNlYyk7CiYjNDM7CQljb3JlX3BsdHMgJiM0Mzs9IGNvdW50X3BsdHMoc3ltcywgcmVscywgbnVtcmVscywgc2VjaGRyc1tpXS5zaF9pbmZvLAomIzQzOwkJCQkJZHN0c2VjKTsKIAl9CiAKIAlwbHRzZWMgPSBzZWNoZHJzICYjNDM7IG1vZC0mZ3Q7YXJjaC5jb3JlLnBsdF9zaG5keDsKQEAgLTM0OCwzMCAmIzQzOzMzNSw4IEBAIGludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICplaGRyLCBFbGZfU2hkciAqc2VjaGRycywKIAlwbHRzZWMtJmd0O3NoX2ZsYWdzID0gU0hGX0VYRUNJTlNUUiB8IFNIRl9BTExPQzsKIAlwbHRzZWMtJmd0O3NoX2FkZHJhbGlnbiA9IEwxX0NBQ0hFX0JZVEVTOwogCXBsdHNlYy0mZ3Q7c2hfc2l6ZSA9IChjb3JlX3BsdHMgICYjNDM7IDEpICogc2l6ZW9mKHN0cnVjdCBwbHRfZW50cnkpOwotCW1vZC0mZ3Q7YXJjaC5jb3JlLnBsdF9udW1fZW50cmllcyA9IDA7CiYjNDM7CW1vZC0mZ3Q7YXJjaC5jb3JlLnBsdF9udW1fZW50cmllcyA9IGZ0cmFjZV9wbHRzOwogCW1vZC0mZ3Q7YXJjaC5jb3JlLnBsdF9tYXhfZW50cmllcyA9IGNvcmVfcGx0czsKIAotCXBsdHNlYyA9IHNlY2hkcnMgJiM0MzsgbW9kLSZndDthcmNoLmluaXQucGx0X3NobmR4OwotCXBsdHNlYy0mZ3Q7c2hfdHlwZSA9IFNIVF9OT0JJVFM7Ci0JcGx0c2VjLSZndDtzaF9mbGFncyA9IFNIRl9FWEVDSU5TVFIgfCBTSEZfQUxMT0M7Ci0JcGx0c2VjLSZndDtzaF9hZGRyYWxpZ24gPSBMMV9DQUNIRV9CWVRFUzsKLQlwbHRzZWMtJmd0O3NoX3NpemUgPSAoaW5pdF9wbHRzICYjNDM7IDEpICogc2l6ZW9mKHN0cnVjdCBwbHRfZW50cnkpOwotCW1vZC0mZ3Q7YXJjaC5pbml0LnBsdF9udW1fZW50cmllcyA9IDA7Ci0JbW9kLSZndDthcmNoLmluaXQucGx0X21heF9lbnRyaWVzID0gaW5pdF9wbHRzOwotCi0JaWYgKHRyYW1wKSB7Ci0JCXRyYW1wLSZndDtzaF90eXBlID0gU0hUX05PQklUUzsKLQkJdHJhbXAtJmd0O3NoX2ZsYWdzID0gU0hGX0VYRUNJTlNUUiB8IFNIRl9BTExPQzsKLQkJdHJhbXAtJmd0O3NoX2FkZHJhbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCBwbHRfZW50cnkpOwotCQl0cmFtcC0mZ3Q7c2hfc2l6ZSA9IE5SX0ZUUkFDRV9QTFRTICogc2l6ZW9mKHN0cnVjdCBwbHRfZW50cnkpOwotCX0KLQotCWlmIChpbml0X3RyYW1wKSB7Ci0JCWluaXRfdHJhbXAtJmd0O3NoX3R5cGUgPSBTSFRfTk9CSVRTOwotCQlpbml0X3RyYW1wLSZndDtzaF9mbGFncyA9IFNIRl9FWEVDSU5TVFIgfCBTSEZfQUxMT0M7Ci0JCWluaXRfdHJhbXAtJmd0O3NoX2FkZHJhbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCBwbHRfZW50cnkpOwotCQlpbml0X3RyYW1wLSZndDtzaF9zaXplID0gTlJfRlRSQUNFX1BMVFMgKiBzaXplb2Yoc3RydWN0IHBsdF9lbnRyeSk7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jCmluZGV4IDI0YWRiNTgxYWYwZWIuLjYyMGMyYjcwMTE1ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jCkBAIC00NTQsMjkgJiM0Mzs0NTQsMTEgQEAgc3RhdGljIGludCBtb2R1bGVfaW5pdF9mdHJhY2VfcGx0KGNvbnN0IEVsZl9FaGRyICpoZHIsCiAJCQkJICBzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpCi0JY29uc3QgRWxmX1NoZHIgKnM7Ci0Jc3RydWN0IHBsdF9lbnRyeSAqcGx0czsKLQotCXMgPSBmaW5kX3NlY3Rpb24oaGRyLCBzZWNoZHJzLCAmIzM0Oy50ZXh0LmZ0cmFjZV90cmFtcG9saW5lJiMzNDspOwotCWlmICghcykKLQkJcmV0dXJuIC1FTk9FWEVDOwotCi0JcGx0cyA9ICh2b2lkICopcy0mZ3Q7c2hfYWRkcjsKJiM0MzsJc3RydWN0IHBsdF9lbnRyeSAqcGx0cyA9ICh2b2lkICopc2VjaGRyc1ttb2QtJmd0O2FyY2guY29yZS5wbHRfc2huZHhdLnNoX2FkZHI7CiAKIAlfX2luaXRfcGx0KCZhbXA7cGx0c1tGVFJBQ0VfUExUX0lEWF0sIEZUUkFDRV9BRERSKTsKIAogCW1vZC0mZ3Q7YXJjaC5mdHJhY2VfdHJhbXBvbGluZXMgPSBwbHRzOwotCi0JcyA9IGZpbmRfc2VjdGlvbihoZHIsIHNlY2hkcnMsICYjMzQ7LmluaXQudGV4dC5mdHJhY2VfdHJhbXBvbGluZSYjMzQ7KTsKLQlpZiAoIXMpCi0JCXJldHVybiAtRU5PRVhFQzsKLQotCXBsdHMgPSAodm9pZCAqKXMtJmd0O3NoX2FkZHI7Ci0KLQlfX2luaXRfcGx0KCZhbXA7cGx0c1tGVFJBQ0VfUExUX0lEWF0sIEZUUkFDRV9BRERSKTsKLQotCW1vZC0mZ3Q7YXJjaC5pbml0X2Z0cmFjZV90cmFtcG9saW5lcyA9IHBsdHM7Ci0KICNlbmRpZgogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9pbml0LmMgYi9hcmNoL2FybTY0L21tL2luaXQuYwppbmRleCA5Nzk4N2Y4NTBhMzNjLi5lNmM5ODA0NTA0NmUyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL2luaXQuYwpAQCAtNTMxLDcgJiM0Mzs1MzEsOCBAQCBzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpCiAJCQlbRVhFQ01FTV9ERUZBVUxUXSA9IHsKIAkJCQkuc3RhcnQJPSBzdGFydCwKIAkJCQkuZW5kCT0gZW5kLAotCQkJCS5wZ3Byb3QJPSBQQUdFX0tFUk5FTCwKJiM0MzsJCQkJLnBncHJvdAk9IFBBR0VfS0VSTkVMX1JPWCwKJiM0MzsJCQkJLmZsYWdzCT0gRVhFQ01FTV9ST1hfQ0FDSEUsCiAJCQkJLmFsaWdubWVudCA9IDEsCiAJCQkJLmZhbGxiYWNrX3N0YXJ0CT0gZmFsbGJhY2tfc3RhcnQsCiAJCQkJLmZhbGxiYWNrX2VuZAk9IGZhbGxiYWNrX2VuZCwKQEAgLTU0OCw5ICYjNDM7NTQ5LDI1IEBAIHN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZCkKIAkJCQkucGdwcm90CT0gUEFHRV9LRVJORUwsCiAJCQkJLmFsaWdubWVudCA9IDEsCiAJCQl9LAomIzQzOwkJCVtFWEVDTUVNX01PRFVMRV9EQVRBXSA9IHsKJiM0MzsJCQkJLnN0YXJ0CT0gc3RhcnQsCiYjNDM7CQkJCS5lbmQJPSBlbmQsCiYjNDM7CQkJCS5wZ3Byb3QJPSBQQUdFX0tFUk5FTCwKJiM0MzsJCQkJLmFsaWdubWVudCA9IDEsCiYjNDM7CQkJCS5mYWxsYmFja19zdGFydAk9IGZhbGxiYWNrX3N0YXJ0LAomIzQzOwkJCQkuZmFsbGJhY2tfZW5kCT0gZmFsbGJhY2tfZW5kLAomIzQzOwkJCX0sCiAJCX0sCiAJfTsKIAomIzQzOwlpZiAoIXN5c3RlbV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KCkpCiYjNDM7CQlleGVjbWVtX2luZm8ucmFuZ2VzW0VYRUNNRU1fREVGQVVMVF0uZmxhZ3MgfD0gRVhFQ01FTV9OT19IVUdFX1ZNQVA7CiYjNDM7CiAJcmV0dXJuICZhbXA7ZXhlY21lbV9pbmZvOwogfQomIzQzOwomIzQzO3ZvaWQgZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwltZW1zZXQzMihwdHIsIEFBUkNINjRfQlJFQUtfRkFVTFQsIHNpemUgLyBzaXplb2YoX19sZTMyKSk7CiYjNDM7fQogI2VuZGlmIC8qIENPTkZJR19FWEVDTUVNICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMgYi9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMKaW5kZXggYmJlOThhYzlhZDhjNi4uMjBmZjljYjI3M2MxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYwpAQCAtMTY5LDggJiM0MzsxNjksNiBAQCBzdGF0aWMgaW50IGNoYW5nZV9tZW1vcnlfY29tbW9uKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLAogCSAqIHdlIGFyZSBvcGVyYXRpbmcgb24gZG9lcyBub3QgcmVzdWx0IGluIHN1Y2ggc3BsaXR0aW5nLgogCSAqCiAJICogTGV0JiMzOTtzIHJlc3RyaWN0IG91cnNlbHZlcyB0byBtYXBwaW5ncyBjcmVhdGVkIGJ5IHZtYWxsb2MgKG9yIHZtYXApLgotCSAqIERpc2FsbG93IFZNX0FMTE9XX0hVR0VfVk1BUCBtYXBwaW5ncyB0byBndWFyYW50ZWUgdGhhdCBvbmx5IHBhZ2UKLQkgKiBtYXBwaW5ncyBhcmUgdXBkYXRlZCBhbmQgc3BsaXR0aW5nIGlzIG5ldmVyIG5lZWRlZC4KIAkgKgogCSAqIFNvIGNoZWNrIHdoZXRoZXIgdGhlIFthZGRyLCBhZGRyICYjNDM7IHNpemUpIGludGVydmFsIGlzIGVudGlyZWx5CiAJICogY292ZXJlZCBieSBwcmVjaXNlbHkgb25lIFZNIGFyZWEgdGhhdCBoYXMgdGhlIFZNX0FMTE9DIGZsYWcgc2V0LgpAQCAtMTc5LDcgJiM0MzsxNzcsMTYgQEAgc3RhdGljIGludCBjaGFuZ2VfbWVtb3J5X2NvbW1vbih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywKIAlpZiAoIWFyZWEgfHwKIAkgICAgKCh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZygodm9pZCAqKWVuZCkgJmd0OwogCSAgICAgKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKGFyZWEtJmd0O2FkZHIpICYjNDM7IGFyZWEtJmd0O3NpemUpIHx8Ci0JICAgICgoYXJlYS0mZ3Q7ZmxhZ3MgJmFtcDsgKFZNX0FMTE9DIHwgVk1fQUxMT1dfSFVHRV9WTUFQKSkgIT0gVk1fQUxMT0MpKQomIzQzOwkgICAgIShhcmVhLSZndDtmbGFncyAmYW1wOyBWTV9BTExPQykpCiYjNDM7ICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIERpc2FsbG93IFZNX0FMTE9XX0hVR0VfVk1BUCBtYXBwaW5ncyB1bmxlc3MgdGhlIHJlZ2lvbiBpcyBQTUQKJiM0MzsJICogYWxpZ25lZCwgb3Igc3BsaXR0aW5nIGxpdmUgaHVnZSBtYXBwaW5ncyBpcyBzdXBwb3J0ZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoKGFyZWEtJmd0O2ZsYWdzICZhbXA7IFZNX0FMTE9XX0hVR0VfVk1BUCkgJmFtcDsmYW1wOwomIzQzOwkgICAoKHN0YXJ0ICUgUE1EX1NJWkUpIHx8IChzaXplICUgUE1EX1NJWkUpKSAmYW1wOyZhbXA7CiYjNDM7CSAgIFdBUk5fT05fT05DRSghc3lzdGVtX3N1cHBvcnRzX2JibWwyX25vYWJvcnQoKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFudW1wYWdlcykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXhlY21lbS5oIGIvaW5jbHVkZS9saW51eC9leGVjbWVtLmgKaW5kZXggN2RlMjI5MTM0ZTMwNy4uYjA0OTI2ZjNmZmYyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leGVjbWVtLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9leGVjbWVtLmgKQEAgLTQ4LDEwICYjNDM7NDgsMTIgQEAgZW51bSBleGVjbWVtX3R5cGUgewogICogZW51bSBleGVjbWVtX3JhbmdlX2ZsYWdzIC0gb3B0aW9ucyBmb3IgZXhlY3V0YWJsZSBtZW1vcnkgYWxsb2NhdGlvbnMKICAqIEBFWEVDTUVNX0tBU0FOX1NIQURPVzoJYWxsb2NhdGUga2FzYW4gc2hhZG93CiAgKiBARVhFQ01FTV9ST1hfQ0FDSEU6CQlhbGxvY2F0aW9ucyBzaG91bGQgdXNlIFJPWCBjYWNoZSBvZiBodWdlIHBhZ2VzCiYjNDM7ICogQEVYRUNNRU1fTk9fSFVHRV9WTUFQOgljYWNoZSBhbGxvY2F0aW9ucyBtdXN0IGF2b2lkIGh1Z2Ugdm1hcHBpbmdzCiAgKi8KIGVudW0gZXhlY21lbV9yYW5nZV9mbGFncyB7CiAJRVhFQ01FTV9LQVNBTl9TSEFET1cJPSAoMSAmbHQ7Jmx0OyAwKSwKIAlFWEVDTUVNX1JPWF9DQUNIRQk9ICgxICZsdDsmbHQ7IDEpLAomIzQzOwlFWEVDTUVNX05PX0hVR0VfVk1BUAk9ICgxICZsdDsmbHQ7IDIpLAogfTsKIAogI2lmZGVmIENPTkZJR19BUkNIX0hBU19FWEVDTUVNX1JPWApAQCAtMTc4LDYgJiM0MzsxODAsMTUgQEAgdm9pZCBleGVjbWVtX2ZyZWUodm9pZCAqcHRyKTsKIAogREVGSU5FX0ZSRUUoZXhlY21lbSwgdm9pZCAqLCBpZiAoX1QpIGV4ZWNtZW1fZnJlZShfVCkpOwogCiYjNDM7LyoqCiYjNDM7ICogZXhlY21lbV9zcGxpdCAtIGFsbG9jYXRlIHNwYWNlIGZyb20gYW4gZXhpc3RpbmcgZXhlY21lbSBjYWNoZSBhbGxvY2F0aW9uCiYjNDM7ICogQHB0ciAgLSB0aGUgZXhpc3RpbmcgZXhlY21lbSBjYWNoZSBhbGxvY2F0aW9uCiYjNDM7ICogQHNpemUgLSB0aGUgc2l6ZSB0byBjYXJ2ZSBvdXQgZnJvbSB0aGUgZXhpc3RpbmcgYWxsb2NhdGlvbgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0aGUgYWRkcmVzcyBvZiB0aGUgY2FydmVkIG91dCBhbGxvY2F0aW9uLCBvciAlTlVMTCBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO3ZvaWQgKmV4ZWNtZW1fc3BsaXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CiYjNDM7CiAjaWZkZWYgQ09ORklHX01NVQogLyoqCiAgKiBleGVjbWVtX3ZtYXAgLSBjcmVhdGUgdmlydHVhbCBtYXBwaW5nIGZvciBFWEVDTUVNX01PRFVMRV9EQVRBIG1lbW9yeQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKaW5kZXggNzU2NjgxNWZhYmJlOC4uMDMzNmE0NjczM2RkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCkBAIC0zMTYsMTAgJiM0MzszMTYsMTAgQEAgc3RydWN0IG1vZF90cmVlX25vZGUgewogfTsKIAogZW51bSBtb2RfbWVtX3R5cGUgewotCU1PRF9URVhUID0gMCwKLQlNT0RfREFUQSwKJiM0MzsJTU9EX0RBVEEgPSAwLAogCU1PRF9ST0RBVEEsCiAJTU9EX1JPX0FGVEVSX0lOSVQsCiYjNDM7CU1PRF9URVhULAogCU1PRF9JTklUX1RFWFQsCiAJTU9EX0lOSVRfREFUQSwKIAlNT0RfSU5JVF9ST0RBVEEsCmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL21haW4uYyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jCmluZGV4IDQ2ZGQ4ZDI1YTYwNTguLjJkNjIxMzQ5NjM1OTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jCkBAIC0xMzQyLDcgJiM0MzsxMzQyLDcgQEAgc3RhdGljIGludCBtb2R1bGVfbWVtb3J5X2FsbG9jKHN0cnVjdCBtb2R1bGUgKm1vZCwgZW51bSBtb2RfbWVtX3R5cGUgdHlwZSkKIHsKIAl1bnNpZ25lZCBpbnQgc2l6ZSA9IFBBR0VfQUxJR04obW9kLSZndDttZW1bdHlwZV0uc2l6ZSk7CiAJZW51bSBleGVjbWVtX3R5cGUgZXhlY21lbV90eXBlOwotCXZvaWQgKnB0cjsKJiM0MzsJdm9pZCAqcHRyID0gTlVMTDsKIAogCW1vZC0mZ3Q7bWVtW3R5cGVdLnNpemUgPSBzaXplOwogCkBAIC0xMzUxLDExICYjNDM7MTM1MSwyNSBAQCBzdGF0aWMgaW50IG1vZHVsZV9tZW1vcnlfYWxsb2Moc3RydWN0IG1vZHVsZSAqbW9kLCBlbnVtIG1vZF9tZW1fdHlwZSB0eXBlKQogCWVsc2UKIAkJZXhlY21lbV90eXBlID0gRVhFQ01FTV9NT0RVTEVfVEVYVDsKIAotCXB0ciA9IGV4ZWNtZW1fYWxsb2NfcncoZXhlY21lbV90eXBlLCBzaXplKTsKJiM0MzsJYm9vbCBpc19yb3ggPSBleGVjbWVtX2lzX3JveChleGVjbWVtX3R5cGUpOwomIzQzOwlpZiAoaXNfcm94KSB7CiYjNDM7CQkvKgomIzQzOwkJICogU3BlY2lhbCBjYXNlIGZvciBNT0RfVEVYVCAvIE1PRF9JTklUX1RFWFQ6IGFsbG9jYXRlIHRoZQomIzQzOwkJICogbGF0dGVyIGJ5IHNwbGl0dGluZyBvZmYgcmVxdWlyZWQgc3BhY2UgZnJvbSB0aGUgZm9ybWVyCiYjNDM7CQkgKiBzbyB0aGF0IHRoZXkgYXJlIGFsd2F5cyBwbGFjZWQgY2xvc2UgdG9nZXRoZXIuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh0eXBlID09IE1PRF9URVhUKQomIzQzOwkJCXNpemUgJiM0Mzs9IFBBR0VfQUxJR04obW9kLSZndDttZW1bTU9EX0lOSVRfVEVYVF0uc2l6ZSk7CiYjNDM7CQllbHNlIGlmICh0eXBlID09IE1PRF9JTklUX1RFWFQpCiYjNDM7CQkJcHRyID0gZXhlY21lbV9zcGxpdChtb2QtJmd0O21lbVtNT0RfVEVYVF0uYmFzZSwgc2l6ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFwdHIpCiYjNDM7CQlwdHIgPSBleGVjbWVtX2FsbG9jX3J3KGV4ZWNtZW1fdHlwZSwgc2l6ZSk7CiAJaWYgKCFwdHIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbW9kLSZndDttZW1bdHlwZV0uaXNfcm94ID0gZXhlY21lbV9pc19yb3goZXhlY21lbV90eXBlKTsKJiM0MzsJbW9kLSZndDttZW1bdHlwZV0uaXNfcm94ID0gaXNfcm94OwogCiAJLyoKIAkgKiBUaGUgcG9pbnRlciB0byB0aGVzZSBibG9ja3Mgb2YgbWVtb3J5IGFyZSBzdG9yZWQgb24gdGhlIG1vZHVsZQpAQCAtMTM2OCw3ICYjNDM7MTM4Miw3IEBAIHN0YXRpYyBpbnQgbW9kdWxlX21lbW9yeV9hbGxvYyhzdHJ1Y3QgbW9kdWxlICptb2QsIGVudW0gbW9kX21lbV90eXBlIHR5cGUpCiAJICogKmRvKiBldmVudHVhbGx5IGdldCBmcmVlZCwgYnV0IGxldCYjMzk7cyBqdXN0IGtlZXAgdGhpbmdzIHNpbXBsZQogCSAqIGFuZCBhdm9pZCAqYW55KiBmYWxzZSBwb3NpdGl2ZXMuCiAJICovCi0JaWYgKCFtb2QtJmd0O21lbVt0eXBlXS5pc19yb3gpCiYjNDM7CWlmICghaXNfcm94KQogCQlrbWVtbGVha19ub3RfbGVhayhwdHIpOwogCiAJbWVtc2V0KHB0ciwgMCwgc2l6ZSk7CmRpZmYgLS1naXQgYS9tbS9leGVjbWVtLmMgYi9tbS9leGVjbWVtLmMKaW5kZXggMDg0YTIwN2U0Mjc4Yi4uNTc5MGQ0YTg1MzJhZiAxMDA2NDQKLS0tIGEvbW0vZXhlY21lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2V4ZWNtZW0uYwpAQCAtMjc2LDcgJiM0MzsyNzYsOCBAQCBzdGF0aWMgdm9pZCAqX19leGVjbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBleGVjbWVtX3JhbmdlICpyYW5nZSwgc2l6ZV90IHNpemUpCiAKIHN0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3BvcHVsYXRlX2FsbG9jKHN0cnVjdCBleGVjbWVtX3JhbmdlICpyYW5nZSwgc2l6ZV90IHNpemUpCiB7Ci0JdW5zaWduZWQgbG9uZyB2bV9mbGFncyA9IFZNX0FMTE9XX0hVR0VfVk1BUDsKJiM0MzsJdW5zaWduZWQgbG9uZyB2bV9mbGFncyA9IChyYW5nZS0mZ3Q7ZmxhZ3MgJmFtcDsgRVhFQ01FTV9OT19IVUdFX1ZNQVApCiYjNDM7CQkJCQkJPyAwIDogVk1fQUxMT1dfSFVHRV9WTUFQOwogCXN0cnVjdCBtdXRleCAqbXV0ZXggPSAmYW1wO2V4ZWNtZW1fY2FjaGUubXV0ZXg7CiAJc3RydWN0IHZtX3N0cnVjdCAqdm07CiAJc2l6ZV90IGFsbG9jX3NpemU7CkBAIC00MzksNiAmIzQzOzQ0MCwzMyBAQCBzdGF0aWMgYm9vbCBleGVjbWVtX2NhY2hlX2ZyZWUodm9pZCAqcHRyKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIHZvaWQgKmV4ZWNtZW1fY2FjaGVfc3BsaXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYXBsZV90cmVlICpidXN5X2FyZWFzID0gJmFtcDtleGVjbWVtX2NhY2hlLmJ1c3lfYXJlYXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXB0cjsKJiM0MzsJTUFfU1RBVEUobWFzLCBidXN5X2FyZWFzLCBhZGRyLCBhZGRyKTsKJiM0MzsJdm9pZCAqYXJlYTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7ZXhlY21lbV9jYWNoZS5tdXRleCk7CiYjNDM7CiYjNDM7CWFyZWEgPSBtYXNfd2FsaygmYW1wO21hcyk7CiYjNDM7CWlmICghYXJlYSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwomIzQzOwomIzQzOwlpZiAoc2l6ZSAmZ3Q7PSBtYXNfcmFuZ2VfbGVuKCZhbXA7bWFzKSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwomIzQzOwomIzQzOwlhZGRyICYjNDM7PSBtYXNfcmFuZ2VfbGVuKCZhbXA7bWFzKSAtIHNpemU7CiYjNDM7CW1hc19zZXRfcmFuZ2UoJmFtcDttYXMsIGFkZHIsIG1hcy5sYXN0KTsKJiM0MzsKJiM0MzsJZXJyID0gbWFzX3N0b3JlX2dmcCgmYW1wO21hcywgKHZvaWQgKilhZGRyLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBFUlJfUFRSKGVycik7CiYjNDM7CiYjNDM7CXJldHVybiAodm9pZCAqKWFkZHI7CiYjNDM7fQomIzQzOwogI2Vsc2UgLyogQ09ORklHX0FSQ0hfSEFTX0VYRUNNRU1fUk9YICovCiAvKgogICogd2hlbiBST1ggY2FjaGUgaXMgbm90IHVzZWQgdGhlIHBlcm1pc3Npb25zIGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlcyBmb3IKQEAgLTQ1OSw2ICYjNDM7NDg3LDExIEBAIHN0YXRpYyBib29sIGV4ZWNtZW1fY2FjaGVfZnJlZSh2b2lkICpwdHIpCiB7CiAJcmV0dXJuIGZhbHNlOwogfQomIzQzOwomIzQzO3N0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKJiM0Mzt9CiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfSEFTX0VYRUNNRU1fUk9YICovCiAKIHZvaWQgKmV4ZWNtZW1fYWxsb2MoZW51bSBleGVjbWVtX3R5cGUgdHlwZSwgc2l6ZV90IHNpemUpCkBAIC01MTEsNiAmIzQzOzU0NCwxOCBAQCBib29sIGV4ZWNtZW1faXNfcm94KGVudW0gZXhlY21lbV90eXBlIHR5cGUpCiAJcmV0dXJuICEhKGV4ZWNtZW1faW5mby0mZ3Q7cmFuZ2VzW3R5cGVdLmZsYWdzICZhbXA7IEVYRUNNRU1fUk9YX0NBQ0hFKTsKIH0KIAomIzQzO3ZvaWQgKmV4ZWNtZW1fc3BsaXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CWlmICghcHRyIHx8ICFzaXplKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXB0ciA9IGV4ZWNtZW1fY2FjaGVfc3BsaXQocHRyLCBzaXplKTsKJiM0MzsJaWYgKCFJU19FUlIocHRyKSkKJiM0MzsJCXJldHVybiBwdHI7CiYjNDM7CVZNX1dBUk5fT04ocHRyICE9IEVSUl9QVFIoLUVOT01FTSkpOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBleGVjbWVtX3ZhbGlkYXRlKHN0cnVjdCBleGVjbWVtX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGV4ZWNtZW1fcmFuZ2UgKnIgPSAmYW1wO2luZm8tJmd0O3Jhbmdlc1tFWEVDTUVNX0RFRkFVTFRdOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzU3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRm9jdXM6IEFSTTY0IE1vZHVsZSBMb2FkaW5nIGFuZCBFeGVjbWVtIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIGZvciBhcm02NCB0aGF0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIG1vZHVsZSBsb2FkaW5nLCBleGVjdXRhYmxlIG1lbW9yeSBoYW5kbGluZywgYW5kIEZ0cmFjZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGludHJvZHVjdGlvbiBvZiBgQVJDSF9IQVNfRVhFQ01FTV9ST1hgLiBJdCYjMzk7cyB0b3VjaGluZyBhIGxvdCBvZiBjb3JlIGtlcm5lbCBhcmVhczogYGFyY2gvYXJtNjQvS2NvbmZpZ2AsIHZhcmlvdXMgaW5jbHVkZSBmaWxlcywgYW5kIHNvbWUgY3JpdGljYWwgc291cmNlIGZpbGVzIGxpa2UgYG1tL2V4ZWNtZW0uY2AsIGBrZXJuZWwvbW9kdWxlL21haW4uY2AsIGFuZCBzZXZlcmFsIGFybTY0LXNwZWNpZmljIGZpbGVzIGluIHRoZSBhcmNoaXRlY3R1cmUgZGlyZWN0b3JpZXMuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nOyBpdCYjMzk7cyBmdW5jdGlvbmFsbHkgY2hhbmdpbmcgdGhpbmdzIGFuZCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBgV29ydGhGdXp6aW5nPXRydWVgIGlzIHRoZSByaWdodCBjYWxsIGhlcmUuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlICpkaXJlY3RseSogaW1wYWN0ZWQgYnkgdGhlc2UgY2hhbmdlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IHNwb3RzIGZvciBmdXp6aW5nLiBJJiMzOTttIHRoaW5raW5nOgoKKiAgIGBleGVjbWVtX3NwbGl0YCBhbmQgYGV4ZWNtZW1fY2FjaGVfc3BsaXRgIGluIGBtbS9leGVjbWVtLmNgLiBUaGVzZSBhcmUgY2VudHJhbCB0byB0aGUgbmV3IGBNT0RfSU5JVF9URVhUYCBzZXBhcmF0aW9uLgoqICAgYG1vZHVsZV9tZW1vcnlfYWxsb2NgIGluIGBrZXJuZWwvbW9kdWxlL21haW4uY2AuIE1pZ2h0IGJlIGEgYml0IGJyb2FkLCBidXQgaXQgKmlzKiBtb2RpZmllZCwgc28gaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LgoqICAgYGV4ZWNtZW1fYXJjaF9zZXR1cGAgaW4gYGFyY2gvYXJtNjQvbW0vaW5pdC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHVwIGlzIGhhcHBlbmluZy4KKiAgIGBjaGFuZ2VfbWVtb3J5X2NvbW1vbmAgaW4gYGFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY2AuIFRoaXMgaXMgc3RhdGljIGFuZCBwcm9iYWJseSBub3QgdGhlIGJlc3QgZm9jdXMuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGEgYml0OgoKKiAgIEkgbmVlZCB0byBzZWUgdGhlIGRlZmluaXRpb24gb2YgYGV4ZWNtZW1fc3BsaXRgIGFuZCBgZXhlY21lbV9jYWNoZV9zcGxpdGAuIGBleGVjbWVtX3NwbGl0YCBsb29rcyBnb29kIGFzIGl0JiMzOTtzIGV4cG9ydGVkIGFuZCBub3Qgc3RhdGljLCBidXQgYGV4ZWNtZW1fY2FjaGVfc3BsaXRgIGlzIHN0YXRpYy4KKiAgIGBtb2R1bGVfbWVtb3J5X2FsbG9jYCBpcyBhbHNvIHN0YXRpYywgd2hpY2ggaXMgYSBiaXQgbGVzcyBpZGVhbCwgYnV0IGl0JiMzOTtzIHN0aWxsIGJlaW5nIGNoYW5nZWQgaW4gdGhpcyBwYXRjaC4KKiAgIEkmIzM5O2xsIGFsc28gdGFrZSBhIGxvb2sgYXQgdGhlIG1vZHVsZSBQTFQgYW5kIEZ0cmFjZSBjb2RlLiBTcGVjaWZpYyBmdW5jdGlvbnMgbGlrZSBgbW9kdWxlX2VtaXRfcGx0X2VudHJ5YCwgYG1vZHVsZV9lbWl0X3ZlbmVlcl9mb3JfYWRycGAsIGFuZCBgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9uc2AgaW4gYGFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmNgIHNlZW0gcmVsZXZhbnQgYW5kIHdvcnRoIGEgbG9vay4gVGhlIEZ0cmFjZSBjb2RlIGluIGBhcmNoL2FybTY0L2tlcm5lbC9mdHJhY2UuY2AgYWxzbyBoYXMgZnVuY3Rpb25zIHRvIGNvbnNpZGVyIGxpa2UgYGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmNgLCBgZnRyYWNlX2ZpbmRfY2FsbGFibGVfYWRkcmAuCgpJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGdldCBhIHByZWNpc2UgdmlldyBvZiB0aGVzZSBmdW5jdGlvbnMuIEZyb20gdGhlcmUsIEkgY2FuIGZpZ3VyZSBvdXQgdGhlIGJlc3QgdGFyZ2V0cyBmb3IgZnV6emluZyBjYW1wYWlnbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkIFxcKnxib29sIHxpbnQgKT9leGVjbWVtX3NwbGl0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZXhlY21lbS5oPTE4MT1ERUZJTkVfRlJFRShleGVjbWVtLCB2b2lkICosIGlmIChfVCkgZXhlY21lbV9mcmVlKF9UKSk7XG4tLVxuaW5jbHVkZS9saW51eC9leGVjbWVtLmgtMTg5LSAqL1xuaW5jbHVkZS9saW51eC9leGVjbWVtLmg6MTkwOnZvaWQgKmV4ZWNtZW1fc3BsaXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaC0xOTEtXG4tLVxubW0vZXhlY21lbS5jPTU0Mj1ib29sIGV4ZWNtZW1faXNfcm94KGVudW0gZXhlY21lbV90eXBlIHR5cGUpXG4tLVxubW0vZXhlY21lbS5jLTU0Ni1cbm1tL2V4ZWNtZW0uYzo1NDc6dm9pZCAqZXhlY21lbV9zcGxpdCh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxubW0vZXhlY21lbS5jLTU0OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMDUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKkZvY3VzaW5nIE15IEFuYWx5c2lzKioKClJpZ2h0LCBzbyBgZXhlY21lbV9zcGxpdGAgaXMgZGVmaW5pdGVseSB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZy4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3Igb2YgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gZXhlY3V0YWJsZSBtZW1vcnkuIE5vdywgbGV0JiMzOTtzIHNlZS4uLiB3aGF0IGFib3V0IGBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zYD8gSSBuZWVkIHRvIHdlaWdoIHRoYXQgYWdhaW5zdCBgZXhlY21lbV9zcGxpdGAuIEl0IHNvdW5kcyBsaWtlIGl0IGNvdWxkIGJlIGFub3RoZXIgcmVsZXZhbnQgZm9jdXMgYXJlYS4gQ291bGQgdGhhdCBmdW5jdGlvbiBiZSB1c2VkIHRvIG1vZGlmeSB0aGUgZXhlY3V0YWJsZSBtZW1vcnkgcmVnaW9ucyBhZnRlciB0aGUgc3BsaXQsIG9yIGNvdWxkIGl0IGJlIGludm9sdmVkIGluIHNldHRpbmcgdXAgdGhlIGNvbmRpdGlvbnMgZm9yIGl0PyBJcyB0aGF0IGEgY3JpdGljYWwgcG9pbnQsIG1heWJlIGxlYWRpbmcgdG8gc29tZSBuZXcgdGVjaG5pcXVlcz8gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGNhcmVmdWxseSBjb25zaWRlciBib3RoIGZ1bmN0aW9ucyBpbiBjb250ZXh0IG9mIGVhY2ggb3RoZXIgYXMgSSBkaXZlIGludG8gdGhpcyBhbmFseXNpcy4gVGhlIGludGVycGxheSBiZXR3ZWVuIHRoZW0gY291bGQgcmV2ZWFsIHNvbWV0aGluZyByZWFsbHkgaW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJjL2tlcm5lbC9tb2R1bGUuYz0xNj1zdGF0aWMgaW5saW5lIHZvaWQgYXJjX3dyaXRlX21lKHVuc2lnbmVkIHNob3J0ICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuLS1cbmFyY2gvYXJjL2tlcm5lbC9tb2R1bGUuYy0yNS0gKi9cbmFyY2gvYXJjL2tlcm5lbC9tb2R1bGUuYzoyNjppbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqaGRyLCBFbGZfU2hkciAqc2VjaGRycyxcbmFyY2gvYXJjL2tlcm5lbC9tb2R1bGUuYy0yNy1cdFx0XHQgICAgICBjaGFyICpzZWNzdHIsIHN0cnVjdCBtb2R1bGUgKm1vZClcbi0tXG5hcmNoL2FybS9rZXJuZWwvbW9kdWxlLXBsdHMuYz0xNTc9c3RhdGljIHVuc2lnbmVkIGludCBjb3VudF9wbHRzKGNvbnN0IEVsZjMyX1N5bSAqc3ltcywgRWxmMzJfQWRkciBiYXNlLFxuLS1cbmFyY2gvYXJtL2tlcm5lbC9tb2R1bGUtcGx0cy5jLTIwOC1cbmFyY2gvYXJtL2tlcm5lbC9tb2R1bGUtcGx0cy5jOjIwOTppbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqZWhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXG5hcmNoL2FybS9rZXJuZWwvbW9kdWxlLXBsdHMuYy0yMTAtXHRcdFx0ICAgICAgY2hhciAqc2Vjc3RyaW5ncywgc3RydWN0IG1vZHVsZSAqbW9kKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmM9Mjc4PXN0YXRpYyBjb25zdCBpbnQgZnRyYWNlX3BsdHMgPSBJU19FTkFCTEVEKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkgPyBOUl9GVFJBQ0VfUExUUyA6IDA7XG5hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jLTI3OS1cbmFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmM6MjgwOmludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICplaGRyLCBFbGZfU2hkciAqc2VjaGRycyxcbmFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmMtMjgxLVx0XHRcdCAgICAgIGNoYXIgKnNlY3N0cmluZ3MsIHN0cnVjdCBtb2R1bGUgKm1vZClcbi0tXG5hcmNoL2hleGFnb24va2VybmVsL21vZHVsZS5jLTI2LSAqL1xuYXJjaC9oZXhhZ29uL2tlcm5lbC9tb2R1bGUuYzoyNzppbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqaGRyLCBFbGZfU2hkciAqc2VjaGRycyxcbmFyY2gvaGV4YWdvbi9rZXJuZWwvbW9kdWxlLmMtMjgtXHRcdFx0XHRjaGFyICpzZWNzdHJpbmdzLFxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tb2R1bGUtc2VjdGlvbnMuYz03OT1zdGF0aWMgdm9pZCBjb3VudF9tYXhfZW50cmllcyhFbGZfUmVsYSAqcmVsYXMsIGludCBudW0sXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL21vZHVsZS1zZWN0aW9ucy5jLTEwNC1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tb2R1bGUtc2VjdGlvbnMuYzoxMDU6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL21vZHVsZS1zZWN0aW9ucy5jLTEwNi1cdFx0XHQgICAgICBjaGFyICpzZWNzdHJpbmdzLCBzdHJ1Y3QgbW9kdWxlICptb2QpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL21vZHVsZS5jPTI1Nz11bnNpZ25lZCBpbnQgYXJjaF9tb2Rfc2VjdGlvbl9wcmVwZW5kKHN0cnVjdCBtb2R1bGUgKm1vZCxcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMtMjY2LSNkZWZpbmUgQ09OU1RcbmFyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYzoyNjc6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoQ09OU1QgRWxmX0VoZHIgKmhkcixcbmFyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYy0yNjgtXHRcdFx0ICAgICAgQ09OU1QgRWxmX1NoZHIgKnNlY2hkcnMsXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfMzIuYz03Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcGx0X3NpemUoY29uc3QgRWxmMzJfRWhkciAqaGRyLFxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzMyLmMtMTE5LVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfMzIuYzoxMjA6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmMzJfRWhkciAqaGRyLFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfMzIuYy0xMjEtXHRcdFx0ICAgICAgRWxmMzJfU2hkciAqc2VjaGRycyxcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jPTQyND1ib29sIG1vZHVsZV9pbml0X3NlY3Rpb24oY29uc3QgY2hhciAqbmFtZSlcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jLTQyOS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzY0LmM6NDMwOmludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZjY0X0VoZHIgKmhkcixcbmFyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzY0LmMtNDMxLVx0XHRcdCAgICAgIEVsZjY0X1NoZHIgKnNlY2hkcnMsXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLXNlY3Rpb25zLmM9MTAxPXN0YXRpYyBib29sIHJlbGFfbmVlZHNfcGx0X2dvdF9lbnRyeShjb25zdCBFbGZfUmVsYSAqcmVsYSlcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUtc2VjdGlvbnMuYy0xMTItXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUtc2VjdGlvbnMuYzoxMTM6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLXNlY3Rpb25zLmMtMTE0LVx0XHRcdCAgICAgIGNoYXIgKnNlY3N0cmluZ3MsIHN0cnVjdCBtb2R1bGUgKm1vZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jPTU5PXN0YXRpYyB2b2lkIGNoZWNrX3JlbGEoRWxmX1JlbGEgKnJlbGEsIHN0cnVjdCBtb2R1bGUgKm1lKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMtMTA3LSAqL1xuYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYzoxMDg6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXG5hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jLTEwOS1cdFx0XHQgICAgICBjaGFyICpzZWNzdHJpbmdzLCBzdHJ1Y3QgbW9kdWxlICptZSlcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC9tb2R1bGUuYy0yNC0vKiBNYWtlIGdlbmVyaWMgY29kZSBpZ25vcmUgU1RUX1JFR0lTVEVSIGR1bW15IHVuZGVmaW5lZCBzeW1ib2xzLiAgKi9cbmFyY2gvc3BhcmMva2VybmVsL21vZHVsZS5jOjI1OmludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICpoZHIsXG5hcmNoL3NwYXJjL2tlcm5lbC9tb2R1bGUuYy0yNi1cdFx0XHQgICAgICBFbGZfU2hkciAqc2VjaGRycyxcbi0tXG5pbmNsdWRlL2xpbnV4L21vZHVsZWxvYWRlci5oPTE3PWJvb2wgbW9kdWxlX2VsZl9jaGVja19hcmNoKEVsZl9FaGRyICpoZHIpO1xuLS1cbmluY2x1ZGUvbGludXgvbW9kdWxlbG9hZGVyLmgtMTktLyogQWRqdXN0IGFyY2gtc3BlY2lmaWMgc2VjdGlvbnMuICBSZXR1cm4gMCBvbiBzdWNjZXNzLiAgKi9cbmluY2x1ZGUvbGludXgvbW9kdWxlbG9hZGVyLmg6MjA6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmhkcixcbmluY2x1ZGUvbGludXgvbW9kdWxlbG9hZGVyLmgtMjEtXHRcdFx0ICAgICAgRWxmX1NoZHIgKnNlY2hkcnMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMzAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXJjaGl0ZWN0dXJlIE1vZHVsZSBUaG91Z2h0cyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zYCBpcyBkZWZpbml0ZWx5IGEgc29saWQgbmFtZSwgaXQgY29tbXVuaWNhdGVzIHRoZSBnZW5lcmFsIHB1cnBvc2Ugb2YgdGhpcyBtb2R1bGUgcXVpdGUgZWZmZWN0aXZlbHkuIEl0JiMzOTtzIGEgY2xlYXIgZGVzY3JpcHRvciBvZiBpdHMgZnVuY3Rpb24gZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLiBCdXQsIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBwYXN0IHRoYXQgLSB3aGF0IGFib3V0IGBleGVjbWVtX2FyY2hfc2V0dXBgPyBUaGF0IHBocmFzZSBoaWdobGlnaHRzIHRoZSBzcGVjaWZpYyBhc3BlY3Qgb2YgZXhlY3V0aW9uIG1lbW9yeSBzZXR1cCBhdCB0aGUgYXJjaGl0ZWN0dXJhbCBsZXZlbC4gSSYjMzk7bSB3ZWlnaGluZyB1cCB0aGUgcG90ZW50aWFsIGZvciBhIG5hbWUgdGhhdCBjYXB0dXJlcyB0aGUgc2V0dXAgb2YgZXhlY3V0aW9uIG1lbW9yeSB2ZXJzdXMgdGhlIHBvdGVudGlhbCBtb3JlIGdlbmVyaWMgbmFtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgXFwqZXhlY21lbV9hcmNoX3NldHVwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL21tL2luaXQuYz00NDk9c3RhdGljIHN0cnVjdCBleGVjbWVtX2luZm8gZXhlY21lbV9pbmZvIF9fcm9fYWZ0ZXJfaW5pdDtcbmFyY2gvYXJtL21tL2luaXQuYy00NTAtXG5hcmNoL2FybS9tbS9pbml0LmM6NDUxOnN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcbmFyY2gvYXJtL21tL2luaXQuYy00NTIte1xuLS1cbmFyY2gvYXJtNjQvbW0vaW5pdC5jPTUwMz1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xuYXJjaC9hcm02NC9tbS9pbml0LmMtNTA0LVxuYXJjaC9hcm02NC9tbS9pbml0LmM6NTA1OnN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTUwNi17XG4tLVxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jPTI0MD1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jLTI0MS1cbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYzoyNDI6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jLTI0My17XG4tLVxuYXJjaC9taXBzL21tL2luaXQuYz01NjM9c3RhdGljIHN0cnVjdCBleGVjbWVtX2luZm8gZXhlY21lbV9pbmZvIF9fcm9fYWZ0ZXJfaW5pdDtcbmFyY2gvbWlwcy9tbS9pbml0LmMtNTY0LVxuYXJjaC9taXBzL21tL2luaXQuYzo1NjU6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuYXJjaC9taXBzL21tL2luaXQuYy01NjYte1xuLS1cbmFyY2gvbmlvczIvbW0vaW5pdC5jPTEzNz1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xuYXJjaC9uaW9zMi9tbS9pbml0LmMtMTM4LVxuYXJjaC9uaW9zMi9tbS9pbml0LmM6MTM5OnN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcbmFyY2gvbmlvczIvbW0vaW5pdC5jLTE0MC17XG4tLVxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jPTk3Nz1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTk3OC1cbmFyY2gvcGFyaXNjL21tL2luaXQuYzo5Nzk6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTk4MC17XG4tLVxuYXJjaC9wb3dlcnBjL21tL21lbS5jPTM5Mj1zdGF0aWMgdm9pZCBwcmVhbGxvY19leGVjbWVtX3BndGFibGUodm9pZCkgeyB9XG4tLVxuYXJjaC9wb3dlcnBjL21tL21lbS5jLTM5NC1cbmFyY2gvcG93ZXJwYy9tbS9tZW0uYzozOTU6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuYXJjaC9wb3dlcnBjL21tL21lbS5jLTM5Ni17XG4tLVxuYXJjaC9yaXNjdi9tbS9pbml0LmM9MTQ0OD1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xuYXJjaC9yaXNjdi9tbS9pbml0LmMtMTQ0OS1cbmFyY2gvcmlzY3YvbW0vaW5pdC5jOjE0NTA6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuYXJjaC9yaXNjdi9tbS9pbml0LmMtMTQ1MS17XG4tLVxuYXJjaC9zMzkwL21tL2luaXQuYz0yOTM9c3RhdGljIHN0cnVjdCBleGVjbWVtX2luZm8gZXhlY21lbV9pbmZvIF9fcm9fYWZ0ZXJfaW5pdDtcbmFyY2gvczM5MC9tbS9pbml0LmMtMjk0LVxuYXJjaC9zMzkwL21tL2luaXQuYzoyOTU6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuYXJjaC9zMzkwL21tL2luaXQuYy0yOTYte1xuLS1cbmFyY2gvc3BhcmMvbW0vZXhlY21lbS5jPTU9c3RhdGljIHN0cnVjdCBleGVjbWVtX2luZm8gZXhlY21lbV9pbmZvIF9fcm9fYWZ0ZXJfaW5pdDtcbmFyY2gvc3BhcmMvbW0vZXhlY21lbS5jLTYtXG5hcmNoL3NwYXJjL21tL2V4ZWNtZW0uYzo3OnN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcbmFyY2gvc3BhcmMvbW0vZXhlY21lbS5jLTgte1xuLS1cbmFyY2gveDg2L21tL2luaXQuYz0xMDYwPXZvaWQgZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpXG4tLVxuYXJjaC94ODYvbW0vaW5pdC5jLTEwNjUtXG5hcmNoL3g4Ni9tbS9pbml0LmM6MTA2NjpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG5hcmNoL3g4Ni9tbS9pbml0LmMtMTA2Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNjEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06CgoqKkZ1enppbmcgdGhlIGBleGVjbWVtYCBNb2R1bGUqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBwb2ludHMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nIHdpdGhpbiB0aGUgYGV4ZWNtZW1gIG1vZHVsZS4gTGV0JiMzOTtzIHNlZS4uLiBgZXhlY21lbV9hcmNoX3NldHVwYCBpcyBiYXNpY2FsbHkgdGhlIGBfX2luaXRgIG9mIHRoaXMgd2hvbGUgdGhpbmcsIHJpZ2h0PyBUaGF0IG1lYW5zIGl0IHJ1bnMgb25jZSBhdCBib290LCBhbmQgaXQmIzM5O3Mgbm90IGdvaW5nIHRvIGJlIHN1cGVyIGhlbHBmdWwgZm9yIGZ1enppbmcuIFdlIG5lZWQgc29tZXRoaW5nIHRoYXQmIzM5O3MgcmVwZWF0ZWRseSBjYWxsZWQgYW5kIHByb2Nlc3NlcyBwb3RlbnRpYWxseSBtYWxmb3JtZWQgaW5wdXQgb3Igc29tZXRoaW5nLiBgZXhlY21lbV9zcGxpdGAgbG9va3MgcHJvbWlzaW5nLiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlci4KCkhtbSwgd2hhdCBhYm91dCBgZXhlY21lbV9hbGxvY2A/IEl0IGFwcGVhcnMgdW5tb2RpZmllZCwgYnV0IG1heWJlIHRoZXJlJiMzOTtzIHNvbWUgdXNlZnVsIGZ1bmN0aW9uYWxpdHkgYWZ0ZXIgdGhhdC4gQWgsIGhhISBJIHNlZSB0aGF0IGBleGVjbWVtX2NhY2hlX3BvcHVsYXRlX2FsbG9jYCAqaXMqIG1vZGlmaWVkLCB3aGljaCBwcm9iYWJseSBtZWFucyB0aGF0JiMzOTtzIHRoZSBvbmUgSSBuZWVkIHRvIGZvY3VzIG9uIG5leHQuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zLCBidXQgYGV4ZWNtZW1fY2FjaGVfcG9wdWxhdGVfYWxsb2NgIGxvb2tzIGxpa2UgdGhlIHByaW1hcnkgdGFyZ2V0IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE0OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMgdm9pZCBcXCpleGVjbWVtX2NhY2hlX3BvcHVsYXRlX2FsbG9jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2V4ZWNtZW0uYz0yNzA9c3RhdGljIHZvaWQgKl9fZXhlY21lbV9jYWNoZV9hbGxvYyhzdHJ1Y3QgZXhlY21lbV9yYW5nZSAqcmFuZ2UsIHNpemVfdCBzaXplKVxuLS1cbm1tL2V4ZWNtZW0uYy0yNzYtXG5tbS9leGVjbWVtLmM6Mjc3OnN0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3BvcHVsYXRlX2FsbG9jKHN0cnVjdCBleGVjbWVtX3JhbmdlICpyYW5nZSwgc2l6ZV90IHNpemUpXG5tbS9leGVjbWVtLmMtMjc4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MDIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIEFsbG9jYXRpb24gU3RyYXRlZ3kqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gKmBleGVjbWVtX2NhY2hlX3BvcHVsYXRlX2FsbG9jYCouLi4gdGhhdCYjMzk7cyBhICpzdGF0aWMqIGZ1bmN0aW9uLiBSaWdodCBhd2F5LCB0aGF0JiMzOTtzIGEgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoYXQgbWVhbnMgaXQmIzM5O3MgaW50ZXJuYWwgdG8gd2hhdGV2ZXIgY29tcGlsYXRpb24gdW5pdCBpdCYjMzk7cyBkZWZpbmVkIGluLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgZXhlY3V0aW9uIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCYjMzk7cyBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgY2FsbGVkIGZyb20gZWxzZXdoZXJlIGluIHRoZSBzeXN0ZW0sIHdoaWNoIHN1Z2dlc3RzIGEgdGlnaHRseSBjb250cm9sbGVkLCBwb3NzaWJseSBvcHRpbWl6ZWQsIGFsbG9jYXRpb24gcm91dGluZSBmb3IgYSBzcGVjaWZpYyBwdXJwb3NlLiBBbmQgdGhlIGZhY3QgdGhhdCAqYGV4ZWNtZW1fYWxsb2NgKiBjYWxscyB0aGlzIHN0YXRpYyBmdW5jdGlvbi4uLiB0aGF0JiMzOTtzIHRoZSBrZXkgcmVsYXRpb25zaGlwLiAqYGV4ZWNtZW1fYWxsb2NgKiBpcyBsaWtlbHkgdGhlIHB1YmxpYy1mYWNpbmcgZW50cnkgcG9pbnQsIHRoZSBmdW5jdGlvbiB0aGF0IHVzZXJzIG9mIHRoaXMgZXhlY3V0aW9uIG1lbW9yeSBzdWJzeXN0ZW0gd291bGQgY2FsbC4gQW5kICpgZXhlY21lbV9jYWNoZV9wb3B1bGF0ZV9hbGxvY2AqIGlzIHRoZSAqd29ya2hvcnNlKiwgdGhlIHVuc3VuZyBoZXJvIHRoYXQgYWN0dWFsbHkgZG9lcyB0aGUgZGlydHkgd29yayBvZiBhbGxvY2F0aW5nIGZyb20gdGhlIGNhY2hlLiBUaGlzIGlzIGEgY2xhc3NpYyBwYXR0ZXJuLCBhIGNvbnRyb2xsZWQgaW50ZXJmYWNlIHdpdGggYSBoaWRkZW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLiBUaGF0IHN0cnVjdHVyZSBpcyBkZXNpZ25lZCBmb3IgZWZmaWNpZW5jeSBhbmQgc2FmZXR5LCBsaWtlbHkgaGlkaW5nIGFsbCBraW5kcyBvZiBjYWNoZSBtYW5hZ2VtZW50IGNvbXBsZXhpdHkuIEkmIzM5O2QgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIGJ1dCB0aGUgZGVzaWduIGlzIGEgZmFtaWxpYXIgYW5kIHNlbnNpYmxlIG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgXFwqZXhlY21lbV9hbGxvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaD0xMzM9c3RydWN0IGV4ZWNtZW1faW5mbyAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvZXhlY21lbS5oLTE1MC0gKi9cbmluY2x1ZGUvbGludXgvZXhlY21lbS5oOjE1MTp2b2lkICpleGVjbWVtX2FsbG9jKGVudW0gZXhlY21lbV90eXBlIHR5cGUsIHNpemVfdCBzaXplKTtcbmluY2x1ZGUvbGludXgvZXhlY21lbS5oLTE1Mi1cbi0tXG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaC0xNzItICovXG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaDoxNzM6dm9pZCAqZXhlY21lbV9hbGxvY19ydyhlbnVtIGV4ZWNtZW1fdHlwZSB0eXBlLCBzaXplX3Qgc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaC0xNzQtXG4tLVxubW0vZXhlY21lbS5jPTQ5MT1zdGF0aWMgdm9pZCAqZXhlY21lbV9jYWNoZV9zcGxpdCh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxuLS1cbm1tL2V4ZWNtZW0uYy00OTYtXG5tbS9leGVjbWVtLmM6NDk3OnZvaWQgKmV4ZWNtZW1fYWxsb2MoZW51bSBleGVjbWVtX3R5cGUgdHlwZSwgc2l6ZV90IHNpemUpXG5tbS9leGVjbWVtLmMtNDk4LXtcbi0tXG5tbS9leGVjbWVtLmMtNTE0LVxubW0vZXhlY21lbS5jOjUxNTp2b2lkICpleGVjbWVtX2FsbG9jX3J3KGVudW0gZXhlY21lbV90eXBlIHR5cGUsIHNpemVfdCBzaXplKVxubW0vZXhlY21lbS5jLTUxNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDM2CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczoKCioqS2VybmVsIE1lbW9yeSBBbGxvY2F0aW9uIENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gY29kZSBoZXJlLiBTcGVjaWZpY2FsbHksIGBleGVjbWVtX2FsbG9jX3J3YCBpcyBjYWxsZWQgYnkgYG1vZHVsZV9tZW1vcnlfYWxsb2NgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIGludGVncmF0ZSB0aGVzZSBuZXcgZnVuY3Rpb25zIGludG8gbXkgdW5kZXJzdGFuZGluZy4gUmlnaHQsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhZGQgYGV4ZWNtZW1fYWxsb2NfcndgIGFuZCB0aGUgYGV4ZWNtZW1fc3BsaXRgIGZ1bmN0aW9uIHRvIG15IG1lbnRhbCBtYXAgb2YgaG93IHRoaXMgYWxsIHdvcmtzLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIGhvdyB0aGV5IGZpdCB3aXRoaW4gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBtb2R1bGUgbWVtb3J5IG1hbmFnZW1lbnQuCgpBbmQgdGhlbiB0aGVyZSYjMzk7cyBgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuY2AuIEkgc2VlIHRoYXQgaXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgc28gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgcmV2aWV3IHRob3NlIGNoYW5nZXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIGZ1bmN0aW9uIHRyYWNpbmcuIEkmIzM5O2xsIGtlZXAgdGhpcyBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0va2VybmVsL2Z0cmFjZS5jPTk4PXN0YXRpYyBpbnQgZnRyYWNlX21vZGlmeV9jb2RlKHVuc2lnbmVkIGxvbmcgcGMsIHVuc2lnbmVkIGxvbmcgb2xkLFxuLS1cbmFyY2gvYXJtL2tlcm5lbC9mdHJhY2UuYy0xMjEtXG5hcmNoL2FybS9rZXJuZWwvZnRyYWNlLmM6MTIyOmludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYylcbmFyY2gvYXJtL2tlcm5lbC9mdHJhY2UuYy0xMjMte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jPTIxMz1zdGF0aWMgaW50IGZ0cmFjZV9tb2RpZnlfY29kZSh1bnNpZ25lZCBsb25nIHBjLCB1MzIgb2xkLCB1MzIgbmV3LFxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jLTI0MS0gKi9cbmFyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jOjI0MjppbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpXG5hcmNoL2FybTY0L2tlcm5lbC9mdHJhY2UuYy0yNDMte1xuLS1cbmFyY2gvY3NreS9rZXJuZWwvZnRyYWNlLmM9MTIxPWludCBmdHJhY2VfbWFrZV9ub3Aoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLFxuLS1cbmFyY2gvY3NreS9rZXJuZWwvZnRyYWNlLmMtMTI2LVxuYXJjaC9jc2t5L2tlcm5lbC9mdHJhY2UuYzoxMjc6aW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxuYXJjaC9jc2t5L2tlcm5lbC9mdHJhY2UuYy0xMjgte1xuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9mdHJhY2VfZHluLmM9MTE3PWludCBmdHJhY2VfbW9kaWZ5X2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBvbGRfYWRkciwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9mdHJhY2VfZHluLmMtMTM2LVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2Z0cmFjZV9keW4uYzoxMzc6aW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2Z0cmFjZV9keW4uYy0xMzgte1xuLS1cbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZnRyYWNlLmM9MTUzPWludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL21pY3JvYmxhemUva2VybmVsL2Z0cmFjZS5jLTE2NS1cbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZnRyYWNlLmM6MTY2OmludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYylcbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZnRyYWNlLmMtMTY3LXtcbi0tXG5hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jPTE5Nz1pbnQgZnRyYWNlX21ha2VfY2FsbChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9mdHJhY2UuYy0yMjAtXG5hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jOjIyMTppbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpXG5hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jLTIyMi17XG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2Z0cmFjZS5jPTg4PWludCBmdHJhY2VfZGlzYWJsZV9mdHJhY2VfZ3JhcGhfY2FsbGVyKHZvaWQpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2Z0cmFjZS5jLTk1LSNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VcbmFyY2gvcGFyaXNjL2tlcm5lbC9mdHJhY2UuYzo5NjppbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpXG5hcmNoL3BhcmlzYy9rZXJuZWwvZnRyYWNlLmMtOTcte1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvdHJhY2UvZnRyYWNlLmM9NDcwPWludCBmdHJhY2VfaW5pdF9ub3Aoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvdHJhY2UvZnRyYWNlLmMtNTQ5LVxuYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFjZS9mdHJhY2UuYzo1NTA6aW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxuYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFjZS9mdHJhY2UuYy01NTEte1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvdHJhY2UvZnRyYWNlXzY0X3BnLmM9NjM3PWludCBmdHJhY2VfbW9kaWZ5X2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBvbGRfYWRkcixcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL3RyYWNlL2Z0cmFjZV82NF9wZy5jLTY2Ny1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvdHJhY2UvZnRyYWNlXzY0X3BnLmM6NjY4OmludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYylcbmFyY2gvcG93ZXJwYy9rZXJuZWwvdHJhY2UvZnRyYWNlXzY0X3BnLmMtNjY5LXtcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYz0xNzc9ZnRyYWNlX2Z1bmNfdCBmdHJhY2VfY2FsbF9kZXN0ID0gZnRyYWNlX3N0dWI7XG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYzoxNzg6aW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMTc5LXtcbi0tXG5hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jPTIzNj1pbnQgZnRyYWNlX21ha2VfY2FsbChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYy0yNDMtXG5hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jOjI0NDppbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpXG5hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jLTI0NS17XG4tLVxuYXJjaC9zaC9rZXJuZWwvZnRyYWNlLmM9MTkyPXN0YXRpYyBpbnQgZnRyYWNlX21vZGlmeV9jb2RlKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGNoYXIgKm9sZF9jb2RlLFxuLS1cbmFyY2gvc2gva2VybmVsL2Z0cmFjZS5jLTIyMS1cbmFyY2gvc2gva2VybmVsL2Z0cmFjZS5jOjIyMjppbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpXG5hcmNoL3NoL2tlcm5lbC9mdHJhY2UuYy0yMjMte1xuLS1cbmFyY2gvc3BhcmMva2VybmVsL2Z0cmFjZS5jPTY2PWludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYy03NS1cbmFyY2gvc3BhcmMva2VybmVsL2Z0cmFjZS5jOjc2OmludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYylcbmFyY2gvc3BhcmMva2VybmVsL2Z0cmFjZS5jLTc3LXtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmM9MTgwPWludCBmdHJhY2VfbW9kaWZ5X2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBvbGRfYWRkcixcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMtMTg2LVxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jOjE4NzppbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMtMTg4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMDcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBcm02NCBGdHJhY2UgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYXJjaC9hcm02NC9rZXJuZWwvZnRyYWNlLmNgIGRpZmYuIEluaXRpYWxseSwgSSBzYXcgdGhlIGNoYW5nZXMgdG8gYGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmNgLCBidXQgdGhhdCBzZWVtcyBtb3JlIGxpa2UgYSBjb250ZXh0dWFsIGNoYW5nZS4gVGhlIHJlYWwgbWVhdCBvZiB0aGUgdXBkYXRlIGlzIHdpdGhpbiBgZ2V0X2Z0cmFjZV9wbHRgLCB3aGljaCBpcywgaW50ZXJlc3RpbmdseSwgc3RhdGljLiBNeSBpbml0aWFsIGZvY3VzIHdhcyBvbiB0aGUgd3JvbmcgZnVuY3Rpb24sIGl0IHNlZW1zISBBbmQgYWxzbyB0aGUgY2hhbmdlcyB0byBgZnRyYWNlX2ZpbmRfY2FsbGFibGVfYWRkcmAsIGFub3RoZXIgc3RhdGljIGZ1bmN0aW9uLiAKClRoaXMgbWVhbnMgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBsb2NhbGl6ZWQgd2l0aGluIHRoZSBmaWxlLCBsaWtlbHkgaW1wYWN0aW5nIGhvdyBQTFQgZW50cmllcyBhcmUgaGFuZGxlZCBzcGVjaWZpY2FsbHkgZm9yIEZ0cmFjZSB3aXRoaW4gdGhpcyBhcmNoaXRlY3R1cmUuIFRoZSBgZ2V0X2Z0cmFjZV9wbHRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkuIExldCBtZSBxdWlja2x5IHNoaWZ0IG15IGZvY3VzIHRvIGhvdyBQTFQgZW50cmllcyBhcmUgZW1pdHRlZC4gSSB3b25kZXIgaWYgdGhpcyBhZmZlY3RzIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJmYWNlIHdpdGggYG1vZHVsZV9lbWl0X3BsdF9lbnRyeWAsIG9yIHJlbGF0ZWQgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnU2NCBtb2R1bGVfZW1pdF9wbHRfZW50cnkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaD0xNj1zdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMge1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmgtMjItXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oOjIzOnU2NCBtb2R1bGVfZW1pdF9wbHRfZW50cnkoc3RydWN0IG1vZHVsZSAqbW9kLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaC0yNC1cdFx0XHQgIHZvaWQgKmxvYywgY29uc3QgRWxmNjRfUmVsYSAqcmVsYSxcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jPTQxPXN0YXRpYyBib29sIHBsdF9lbnRyaWVzX2VxdWFsKGNvbnN0IHN0cnVjdCBwbHRfZW50cnkgKmEsXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYy02OC1cbmFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmM6Njk6dTY0IG1vZHVsZV9lbWl0X3BsdF9lbnRyeShzdHJ1Y3QgbW9kdWxlICptb2QsIEVsZjY0X1NoZHIgKnNlY2hkcnMsXG5hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jLTcwLVx0XHRcdCAgdm9pZCAqbG9jLCBjb25zdCBFbGY2NF9SZWxhICpyZWxhLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAzMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodHMsIGFzIEkgdW5kZXJzdGFuZCB0aGUgc2l0dWF0aW9uOgoKKipSZWZsZWN0aW5nIG9uIENvZGUgRXhwb3J0IGFuZCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCBgbW9kdWxlX2VtaXRfcGx0X2VudHJ5YCBpcyBleHBvc2VkIGdsb2JhbGx5LiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgcG9pbnQgdG8gbm90ZSBpbW1lZGlhdGVseSDigJMgaXQmIzM5O3MgZ29pbmcgdG8gYmUgYWNjZXNzaWJsZSBvdXRzaWRlIGl0cyBpbnRlbmRlZCBzY29wZSwgd2hpY2ggYWx3YXlzIGludHJvZHVjZXMgcG90ZW50aWFsIHJpc2tzIGFuZCBkZXNpZ24gY29uc2lkZXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgaG93IHRoYXQgZXhwb3J0IGFmZmVjdHMgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCBpZiBpdCB3YXMgZG9uZSBpbnRlbnRpb25hbGx5LiBJIHNob3VsZCBhbHNvIHNlZSB3aGVyZSBpdCBpcyB1c2VkLgoKVGhlbiB0aGVyZSBpcyB0aGUgbW9kaWZpY2F0aW9uIHRvIGBtb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnBgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGN1cnJlbnQgY2hhbmdlcyBhcmUgbm90IGlzb2xhdGVkLCBzbyB0aGUgaW1wYWN0IGlzIGxhcmdlciB0aGFuIGp1c3Qgb25lIGFyZWEuIEnigJlsbCBiZSBjaGVja2luZyB0aGUgaW50ZXJkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGNsb3NlbHkgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjaGFuZ2UgcHJvcGFnYXRlcy4gVGhpcyBtaWdodCBiZSBhIHN5bXB0b20gb2YgYSBsYXJnZXIgcmVmYWN0b3IsIG9yIGEgdGFyZ2V0ZWQgZml4LCBidXQgZWl0aGVyIHdheSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlIGFuZCBpZiB0aGUgaW50ZW5kZWQgcHVycG9zZSBvZiB0aGUgY29kZSBpcyBzdGlsbCB2YWxpZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnU2NCBtb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaD0yMz11NjQgbW9kdWxlX2VtaXRfcGx0X2VudHJ5KHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycyxcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oLTI2LVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaDoyNzp1NjQgbW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwKHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycyxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmgtMjgtXHRcdFx0XHR2b2lkICpsb2MsIHU2NCB2YWwpO1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmM9Njk9dTY0IG1vZHVsZV9lbWl0X3BsdF9lbnRyeShzdHJ1Y3QgbW9kdWxlICptb2QsIEVsZjY0X1NoZHIgKnNlY2hkcnMsXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYy05OS0jaWZkZWYgQ09ORklHX0FSTTY0X0VSUkFUVU1fODQzNDE5XG5hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jOjEwMDp1NjQgbW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwKHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycyxcbmFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmMtMTAxLVx0XHRcdFx0dm9pZCAqbG9jLCB1NjQgdmFsKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzYyOAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEFSTTY0IE1vZHVsZSBFeGVjdXRpb24gTGFuZHNjYXBlKioKCk9rYXksIGFmdGVyIGEgcXVpY2sgc2NhbiwgYG1vZHVsZV9lbWl0X3BsdF9lbnRyeWAsIGBtb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnBgLCBgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9uc2AsIGBleGVjbWVtX3NwbGl0YCwgYW5kIGBleGVjbWVtX2FsbG9jX3J3YCBhcmUgdGhlIGtleSBhcmVhcyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBUaG9zZSBzeW1ib2xzIHNlZW0gY2VudHJhbCB0byB0aGUgZXhlY3V0aW9uIGZsb3csIGVzcGVjaWFsbHkgY29uY2VybmluZyBQTFRzIGFuZCBtZW1vcnkgYWxsb2NhdGlvbi4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBgQVJDSF9IQVNfRVhFQ01FTV9ST1hgIGJlaW5nIHNlbGVjdGVkIGJ5IGBBUk02NGAgaXMgdGhlIGZpcnN0IHRoaW5nIHRvIG5vdGUuIFRoZSBjb2RlIGluIGBhcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jYCBpcyBjbGVhcmx5IGxpbmtlZCB0byBgQ09ORklHX0RZTkFNSUNfRlRSQUNFYCwgYW5kIHRoZSBzYW1lIGNvbmZpZyBhbHNvIHNob3dzIHVwIGluIGBhcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuY2AuIFRoZSBgQ09ORklHX0VYRUNNRU1gIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgc3VyZmFjZXMgaW4gYGFyY2gvYXJtNjQvbW0vaW5pdC5jYC4gSW50ZXJlc3RpbmcsIGFuZCBgYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jYCBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IHJlbHkgb24gaWZkZWZzIGJ1dCBjYWxscyBgc3lzdGVtX3N1cHBvcnRzX2JibWwyX25vYWJvcnQoKWAuCgpCYXNlZCBvbiB0aGlzLCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGVuYWJsZSBgRVhFQ01FTWAsIGBEWU5BTUlDX0ZUUkFDRWAsIGFuZCBgTU9EVUxFU2AuIEhvd2V2ZXIsIHdhaXQgYSBtaW51dGUsIGBFWEVDTUVNYCBpcyBhIGNvbmZpZ3VyYWJsZSBvcHRpb24uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgd2hldGhlciBpdCYjMzk7cyB1c2VyLXNlbGVjdGFibGUgb3IgaWYgYW5vdGhlciBvcHRpb24gaXMgYXV0b21hdGljYWxseSBlbmFibGluZyBpdC4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzZWxlY3Rpb24gbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15jb25maWcgRVhFQ01FTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTE0NTQ9Y29uZmlnIElPTU1VX01NX0RBVEFcbi0tXG5tbS9LY29uZmlnLTE0NTYtXG5tbS9LY29uZmlnOjE0NTc6Y29uZmlnIEVYRUNNRU1cbm1tL0tjb25maWctMTQ1OC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyOTUKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipIaWRkZW4gQm9vbCBgRVhFQ01FTWAgLSBDb250ZXh0dWFsIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoZXJlJiMzOTtzIHRoaXMgYEVYRUNNRU1gIHZhcmlhYmxlIOKAkyBpdCYjMzk7cyBoaWRkZW4sIHdoaWNoIGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZmlndXJlIG91dCAqd2h5KiBpdCYjMzk7cyBoaWRkZW4gYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGEgYm9vbCBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgYSBmbGFnLCBhbiBvbi9vZmYgc3dpdGNoIGZvciBzb21lIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkuIEdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBrZXJuZWwgaW50ZXJuYWxzLCBteSBmaXJzdCB0aG91Z2h0IGdvZXMgdG8gd2hlcmUgdGhpcyBmbGFnIGlzIHByb2JhYmx5IHNldC4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgZXhlY3V0YWJsZSBtZW1vcnkgd2l0aGluIHRoZSBrZXJuZWwuCgpDb25zaWRlcmluZyB0aGUgdXN1YWwgc3VzcGVjdHMsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYE1PRFVMRVNgLiBUaGUgbG9hZGluZyBhbmQgbWFuYWdlbWVudCBvZiBrZXJuZWwgbW9kdWxlcywgd2l0aCB0aGVpciBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIGV4ZWN1dGFibGUgY29kZSBzZWN0aW9ucywgaXMgYSBsaWtlbHkgY2FuZGlkYXRlLiBUaGVuIGFnYWluLCBgS1BST0JFU2AgYWxzbyBjb21lIHRvIG1pbmQuIFRoZXNlIGludm9sdmUgaW5qZWN0aW5nIHByb2JlcyBpbnRvIHJ1bm5pbmcga2VybmVsIGNvZGUsIHdoaWNoIG9mdGVuIG1lYW5zIG1vZGlmeWluZyBleGVjdXRhYmxlIG1lbW9yeSBhdCBydW50aW1lLiBBbmQgZmluYWxseSwgb2YgY291cnNlLCB0aGVyZSYjMzk7cyBgQlBGX0pJVGAsIHdoZXJlIHdlJiMzOTtyZSBjb21waWxpbmcgYW5kIGluamVjdGluZyBCUEYgY29kZSwgdmVyeSBsaWtlbHkgaW52b2x2aW5nIGV4ZWN1dGFibGUgbWVtb3J5IHJlZ2lvbnMgYXMgd2VsbC4gSSYjMzk7bSB3aWxsaW5nIHRvIGJldCBpdCYjMzk7cyBiZWluZyB0b2dnbGVkIGJ5IG9uZSBvZiB0aGVzZSwgb3IgbWF5YmUgYWxsIG9mIHRoZW0sIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRob3NlIGFyZWFzIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbmRpdGlvbnMgdGhhdCBzZXQgdGhpcyBwYXJ0aWN1bGFyIGZsYWcuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgdGhlIGNvbmZpZyBvcHRpb25zIGFuZCBhc3NvY2lhdGVkIGNvZGUgcGF0aHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBFWEVDTUVNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZz0xMTc9Y29uZmlnIEtQUk9CRVNcbi0tXG5hcmNoL0tjb25maWctMTIwLVx0c2VsZWN0IEtBTExTWU1TXG5hcmNoL0tjb25maWc6MTIxOlx0c2VsZWN0IEVYRUNNRU1cbmFyY2gvS2NvbmZpZy0xMjItXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1Vcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTIzPWNvbmZpZyBYODZfNjRcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTM3LVx0c2VsZWN0IFpPTkVfRE1BMzJcbmFyY2gveDg2L0tjb25maWc6Mzg6XHRzZWxlY3QgRVhFQ01FTSBpZiBEWU5BTUlDX0ZUUkFDRVxuYXJjaC94ODYvS2NvbmZpZy0zOS1cdHNlbGVjdCBBQ1BJX01SUk0gaWYgQUNQSVxuLS1cbmFyY2gveDg2L0tjb25maWc9MjY1MT1jb25maWcgTUlUSUdBVElPTl9JVFNcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTI2NTQtXHRkZXBlbmRzIG9uIE1JVElHQVRJT05fUkVUUE9MSU5FIFx1MDAyNlx1MDAyNiBNSVRJR0FUSU9OX1JFVEhVTktcbmFyY2gveDg2L0tjb25maWc6MjY1NTpcdHNlbGVjdCBFWEVDTUVNXG5hcmNoL3g4Ni9LY29uZmlnLTI2NTYtXHRkZWZhdWx0IHlcbi0tXG5rZXJuZWwvYnBmL0tjb25maWc9NDI9Y29uZmlnIEJQRl9KSVRcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNDUtXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnOjQ2Olx0c2VsZWN0IEVYRUNNRU1cbmtlcm5lbC9icGYvS2NvbmZpZy00Ny1cdGhlbHBcbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9Mj1tZW51Y29uZmlnIE1PRFVMRVNcbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWctNC1cdG1vZHVsZXNcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzo1Olx0c2VsZWN0IEVYRUNNRU1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy02LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA1MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDgxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQVJNNjQgTW9kdWxlIGFuZCBFeGVjdXRhYmxlIE1lbW9yeSBDaGFuZ2VzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBNT0RVTEVTYCBpcyBzZWxlY3RpbmcgYEVYRUNNRU1gLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhvdyB3ZSBoYW5kbGUgZXhlY3V0YWJsZSBtZW1vcnkgZm9yIG1vZHVsZXMuIENvbnNlcXVlbnRseSwgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGJvdGggYE1PRFVMRVNgIGFuZCBgRFlOQU1JQ19GVFJBQ0VgIGFyZSBlbmFibGVkLgoKQmV5b25kIHRob3NlIGNvcmUgY29uZmlncywgSSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIG1lbnRpb25zIG9mIGBDT05GSUdfS0FTQU5fU1dfVEFHU2AgYW5kIGBDT05GSUdfQVJNNjRfRVJSQVRVTV84NDM0MTlgIHNlZW0gcmVsYXRlZCwgYnV0IGxldCYjMzk7cyBzZWUgaG93IHRoZXkgaW50ZWdyYXRlLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIGBNT0RVTEVTYCBhbmQgYERZTkFNSUNfRlRSQUNFYC4KCk5vdywgbGV0JiMzOTtzIGRpc3NlY3QgdGhlIGNoYW5nZXMgYXQgdGhlIGNvZGUgbGV2ZWwuIEkmIzM5O20gc2VlaW5nIHNpZ25pZmljYW50IG1vZGlmaWNhdGlvbnMgYWNyb3NzIHZhcmlvdXMgZmlsZXM6CgoxLiAgYGFyY2gvYXJtNjQvS2NvbmZpZ2Agbm93IGV4cGxpY2l0bHkgc2VsZWN0cyBgQVJDSF9IQVNfRVhFQ01FTV9ST1hgLCBzZXR0aW5nIHRoZSBzdGFnZSBmb3IgcmVhZC1vbmx5IGV4ZWN1dGFibGUgbWVtb3J5LgoyLiAgU2V2ZXJhbCBoZWFkZXIgZmlsZXMgKGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oYCwgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmxkcy5oYCkgYXJlIGNsZWFuaW5nIHVwIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcywgcGFydGljdWxhcmx5IHJlZ2FyZGluZyBGdHJhY2UgdHJhbXBvbGluZXMuCjMuICBUaGUgRnRyYWNlIGNvZGUgKGBhcmNoL2FybTY0L2tlcm5lbC9mdHJhY2UuY2ApIGlzIHNpbXBsaWZ5aW5nIGhvdyB0cmFtcG9saW5lcyBhcmUgaGFuZGxlZCwgbGlrZWx5IHRpZWQgdG8gdGhlIGNoYW5nZXMgaW4gbWVtb3J5IGxheW91dC4KNC4gIFBMVCBnZW5lcmF0aW9uIChgYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuY2ApIGlzIHN0cmVhbWxpbmVkLCByZW1vdmluZyBpbml0aWFsaXphdGlvbi1zcGVjaWZpYyBsb2dpYywgbGlrZWx5IHRvIHN1cHBvcnQgdGhlIG5ldyBgRVhFQ01FTWAgc2VtYW50aWNzLgo1LiAgTW9kdWxlIGluaXRpYWxpemF0aW9uIChgYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmNgKSBhbHNvIHJlbW92ZXMgaW5pdGlhbGl6YXRpb24gbG9naWMgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgLmluaXQudGV4dC5mdHJhY2VfdHJhbXBvbGluZWAsIGFnYWluLCBhbGlnbmluZyB3aXRoIHRoZSBuZXcgYXJjaGl0ZWN0dXJlLgo2LiAgYGFyY2gvYXJtNjQvbW0vaW5pdC5jYCBpcyB3aGVyZSB0aGluZ3MgZ2V0IHJlYWxseSBpbnRlcmVzdGluZy4gYFBBR0VfS0VSTkVMX1JPWGAgYW5kIGBFWEVDTUVNX1JPWF9DQUNIRWAgYXJlIGJlaW5nIHNldCBmb3IgYEVYRUNNRU1fREVGQVVMVGAuIEl0IGlzIGFsc28gYWRkaW5nIGBFWEVDTUVNX01PRFVMRV9EQVRBYCwgd2hpY2ggaW1wbGllcyB0aGF0IGRhdGEgaXMgYWxzbyBhZmZlY3RlZCwgYW5kIGhhbmRsaW5nIGBFWEVDTUVNX05PX0hVR0VfVk1BUGAuIFRoZSBhZGRpdGlvbiBvZiBgZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zYCBpcyBub3RhYmxlLgo3LiAgYGFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY2AgaXMgbW9kaWZ5aW5nIGBjaGFuZ2VfbWVtb3J5X2NvbW1vbmAgdG8gYWxsb3cgYFZNX0FMTE9XX0hVR0VfVk1BUGAgbWFwcGluZ3MgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLgo4LiAgSSBzZWUgbmV3IGRlZmluaXRpb25zIGluIGBpbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaGAgd2l0aCB0aGUgYWRkaXRpb24gb2YgYEVYRUNNRU1fTk9fSFVHRV9WTUFQYCBhbmQgYGV4ZWNtZW1fc3BsaXRgLCB3aGljaCBzdWdnZXN0cyB0aGlzIHNwbGl0IGlzIGtleSB0byB0aGUgbmV3IGFyY2hpdGVjdHVyZS4KOS4gIEEgcmVvcmRlcmluZyBpbiBgaW5jbHVkZS9saW51eC9tb2R1bGUuaGAgKGBNT0RfVEVYVGAgYW5kIGBNT0RfREFUQWApIGlzIGEgcmVkIGZsYWcuCjEwLiBga2VybmVsL21vZHVsZS9tYWluLmNgIGlzIGFsbG9jYXRpbmcgYE1PRF9JTklUX1RFWFRgIGRpZmZlcmVudGx5LCBzcGVjaWZpY2FsbHkgc3BsaXR0aW5nIGl0IGZyb20gYE1PRF9URVhUYCB3aGVuIGBleGVjbWVtX2lzX3JveGAgaXMgdHJ1ZS4gVGhpcyByZWluZm9yY2VzIHRoYXQgc3BsaXR0aW5nIGZ1bmN0aW9uYWxpdHkuCjExLiBgbW0vZXhlY21lbS5jYCBoYXMgY2hhbmdlcyB0byB0aGUgYGV4ZWNtZW1fY2FjaGVfcG9wdWxhdGVfYWxsb2NgIGZ1bmN0aW9uIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGV4ZWNtZW1fY2FjaGVfc3BsaXRgIGFuZCBgZXhlY21lbV9zcGxpdGAuIFRoaXMgcmVpbmZvcmNlcyB0aGUgY29yZSBjaGFuZ2UuCgpUaGUgcHJhY3RpY2FsIGltcGFjdCBvZiBhbGwgdGhpcyBpcyBwcmV0dHkgc3Vic3RhbnRpYWwuIE1vZHVsZSBsb2FkaW5nIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBhcmUgY2xlYXJseSB1bmRlcmdvaW5nIGEgdHJhbnNmb3JtYXRpb24gb24gQVJNNjQsIGFuZCB0aGUgRnRyYWNlIHRyYW1wb2xpbmUgaGFuZGxpbmcgZm9yIG1vZHVsZXMgaXMgYmVpbmcgdXBkYXRlZCBpbiB0YW5kZW0uCgpUbyBmb2N1cyBteSBhbmFseXNpcywgSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBmb2xsb3dpbmcgc3ltYm9sczoKCiogICBgZXhlY21lbV9zcGxpdGAgLSBUaGlzIGlzIGNsZWFybHkgYSBjZW50cmFsIGZ1bmN0aW9uLCBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHNwbGl0dGluZyBleGVjdXRhYmxlIG1lbW9yeSByZWdpb25zLgoqICAgYG1vZHVsZV9lbWl0X3BsdF9lbnRyeWAsIGBtb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnBgLCBhbmQgYG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnNgIC0gVGhlc2UgYXJlIGltcG9ydGFudCBiZWNhdXNlIHRoZXkgYXJlIHRoZSBsb3ctbGV2ZWwgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkIHRvIGFjY29tbW9kYXRlIHRoZSBuZXcgbWVtb3J5IHN0cnVjdHVyZS4KCk15IGltbWVkaWF0ZSBhY3Rpb24gd2lsbCBiZSB0byBlbmFibGUgYE1PRFVMRVNgIGFuZCBgRFlOQU1JQ19GVFJBQ0VgLgoKRmluYWxseSwgc2luY2UgdGhlIGNvZGUgcmVmZXJlbmNlcyBgQ09ORklHX0FSTTY0X0VSUkFUVU1fODQzNDE5YCwgSSBzaG91bGQgdmVyaWZ5IGlmIGBtb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnBgIGlzIGFjdHVhbGx5IGNvbXBpbGVkIGFuZCBob3cgdGhlIGNvbmZpZ3VyYXRpb24gYWZmZWN0cyB0aGlzIGZ1bmN0aW9uLiBUaGlzIG1pZ2h0IGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZ0cmFjZSBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteY29uZmlnIEFSTTY0X0VSUkFUVU1fODQzNDE5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvS2NvbmZpZz02MDM9Y29uZmlnIEFSTTY0X0VSUkFUVU1fODQ1NzE5XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTYyMy1cbmFyY2gvYXJtNjQvS2NvbmZpZzo2MjQ6Y29uZmlnIEFSTTY0X0VSUkFUVU1fODQzNDE5XG5hcmNoL2FybTY0L0tjb25maWctNjI1LVx0Ym9vbCBcJiMzNDtDb3J0ZXgtQTUzOiA4NDM0MTk6IEEgbG9hZCBvciBzdG9yZSBtaWdodCBhY2Nlc3MgYW4gaW5jb3JyZWN0IGFkZHJlc3NcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5ODAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBBUk02NCBDb25maWd1cmF0aW9uIERlZmF1bHQqKgoKQWxyaWdodCwgc28gdGhlIHN5c3RlbSBiZWhhdmlvciBpcyBkZWZhdWx0aW5nIHRvIGB5YCBpZiBgQVJNNjRgIGlzIHNldC4uLiB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoZSBsb2dpYyBiZWhpbmQgdGhhdC4gSXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgdG8gbWUgd2h5IHRoYXQgc2hvdWxkIGJlIHRoZSBjYXNlLCBhbmQgSSB3YW50IHRvIHZlcmlmeSB0aGUgc3BlY2lmaWMgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGF0IGRlZmF1bHQgaXMgdHJpZ2dlcmVkLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUsIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLCBvciB3aGF0ZXZlciBjb250ZXh0IGRlZmluZXMgdGhpcyBiZWhhdmlvci4gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIHRoZSBiZWhhdmlvciBpcyBleHBlY3RlZC4gSXMgdGhpcyBkZWZhdWx0IGEgaGFyZGNvZGVkIHNldHRpbmcsIG9yIGlzIGl0IGRlcml2ZWQgYmFzZWQgb24gc29tZSBvdGhlciBjb25kaXRpb24sIGEgYnVpbGQgZmxhZyBwZXJoYXBzPyBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIHNldCBhbmQgZW5zdXJlIGl0IGFsaWducyB3aXRoIG91ciBicm9hZGVyIGFyY2hpdGVjdHVyYWwgZ29hbHMgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBzeXN0ZW1zLiBJIG5lZWQgdG8gZXZhbHVhdGUgaXRzIHJhdGlvbmFsZSwgdG8gc2VlIHdoZXRoZXIgdGhlIGRlc2lnbiBtYWtlcyBzZW5zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL2FybTY0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MjQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYyNDpcdGNvbmZpZyBBUk02NF9FUlJBVFVNXzg0MzQxOVxuIDYyNTpcdFx0Ym9vbCBcJiMzNDtDb3J0ZXgtQTUzOiA4NDM0MTk6IEEgbG9hZCBvciBzdG9yZSBtaWdodCBhY2Nlc3MgYW4gaW5jb3JyZWN0IGFkZHJlc3NcJiMzNDtcbiA2MjY6XHRcdGRlZmF1bHQgeVxuIDYyNzpcdFx0aGVscFxuIDYyODpcdFx0ICBUaGlzIG9wdGlvbiBsaW5rcyB0aGUga2VybmVsIHdpdGggJiMzOTstLWZpeC1jb3J0ZXgtYTUzLTg0MzQxOSYjMzk7IGFuZFxuIDYyOTpcdFx0ICBlbmFibGVzIFBMVCBzdXBwb3J0IHRvIHJlcGxhY2UgY2VydGFpbiBBRFJQIGluc3RydWN0aW9ucywgd2hpY2ggY2FuXG4gNjMwOlx0XHQgIGNhdXNlIHN1YnNlcXVlbnQgbWVtb3J5IGFjY2Vzc2VzIHRvIHVzZSBhbiBpbmNvcnJlY3QgYWRkcmVzcyBvblxuIDYzMTpcdFx0ICBDb3J0ZXgtQTUzIHBhcnRzIHVwIHRvIHIwcDQuXG4gNjMyOlx0XG4gNjMzOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDI3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3ltYm9sIENoYW5nZXMqKgoKT2theSwgc28gdGhlIGRlZmF1bHQgcmVzcG9uc2UgaXMgJiMzOTt5JiMzOTssIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGNoYW5nZXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYGV4ZWNtZW1fYWxsb2NfcndgIGluIGBtbS9leGVjbWVtLmNgLCBidXQgaXQgaGFzbiYjMzk7dCBiZWVuIGRpcmVjdGx5IG1vZGlmaWVkLiBIbW0sIGl0JiMzOTtzIGNhbGxlZCBieSBgbW9kdWxlX21lbW9yeV9hbGxvY2AsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBXYWl0LCB0aGUgYWN0dWFsIG1vZGlmaWNhdGlvbiBpcyBpbiBgZXhlY21lbV9jYWNoZV9wb3B1bGF0ZV9hbGxvY2AsIGJ1dCB0aGF0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLiBBbHNvIHN0YXRpYyBpcyBgZXhlY21lbV9jYWNoZV9zcGxpdGAuIExvb2tzIGxpa2UgYGV4ZWNtZW1fc3BsaXRgIGlzIGV4cG9ydGVkIGFuZCBoYXMgYmVlbiBtb2RpZmllZCwgdGhhdCYjMzk7cyBpbXBvcnRhbnQuIGBtb2R1bGVfbWVtb3J5X2FsbG9jYCBpdHNlbGYgaXMgYWxzbyBzdGF0aWMuCgpBbmQgYGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmNgIGxvb2tzIHVudG91Y2hlZCwgaXQmIzM5O3MgdGhlIGNvbnRleHQgdGhhdCYjMzk7cyBjaGFuZ2VkLiBgZ2V0X2Z0cmFjZV9wbHRgIGlzIGFub3RoZXIgc3RhdGljIGZ1bmN0aW9uLCBzbyBub3QgYXMgaW1wb3J0YW50IGhlcmUuCgpBbHJpZ2h0LCB3aXRoIHRoYXQgaW4gbWluZCwgdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6CgoqICAgYGV4ZWNtZW1fc3BsaXRgIC0gZGVmaW5pdGVseSBuZWVkcyBhIGNsb3NlciBsb29rCiogICBgbW9kdWxlX2VtaXRfcGx0X2VudHJ5YCAtIGxpa2VseSByZWxhdGVkIHRvIHRoZSBQTFQgKFByb2NlZHVyZSBMaW5rYWdlIFRhYmxlKQoqICAgYG1vZHVsZV9lbWl0X3ZlbmVlcl9mb3JfYWRycGAgLSB0aGlzIHNvdW5kcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsIEFEUlAgaXMgbGlrZWx5IGluc3RydWN0aW9uIHJlbGF0ZWQKKiAgIGBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zYCAtIFRoaXMgaXMgaW50ZXJlc3RpbmcuCgpMZXQmIzM5O3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9uc2AgaW4gYGFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmNgLiBHb3R0YSBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmM9Mjc4PXN0YXRpYyBjb25zdCBpbnQgZnRyYWNlX3BsdHMgPSBJU19FTkFCTEVEKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkgPyBOUl9GVFJBQ0VfUExUUyA6IDA7XG5hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jLTI3OS1cbmFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmM6MjgwOmludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICplaGRyLCBFbGZfU2hkciAqc2VjaGRycyxcbmFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmMtMjgxLVx0XHRcdCAgICAgIGNoYXIgKnNlY3N0cmluZ3MsIHN0cnVjdCBtb2R1bGUgKm1vZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyMDQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91JiMzOTt2ZSBkZXNjcmliZWQ6CgoqKkNvbmZpcm1hdGlvbiBhbmQgSW1tZWRpYXRlIEFjdGlvbioqCgpBbHJpZ2h0LCB5ZXAsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSB0aGUgc3BvdC4gTm8gbmVlZCB0byBzZWNvbmQtZ3Vlc3MgbXlzZWxmIG9uIHRoYXQuIE5vdywgbGV0JiMzOTtzIGRpdmUgcmlnaHQgaW50byB0aGUgY29kZSBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBleGVjbWVtX3NwbGl0YCB3aXRoaW4gYG1tL2V4ZWNtZW0uY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bGx5LiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgXFwqZXhlY21lbV9zcGxpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2V4ZWNtZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9leGVjbWVtLmM9NTQyPWJvb2wgZXhlY21lbV9pc19yb3goZW51bSBleGVjbWVtX3R5cGUgdHlwZSlcbi0tXG5tbS9leGVjbWVtLmMtNTQ2LVxubW0vZXhlY21lbS5jOjU0Nzp2b2lkICpleGVjbWVtX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpXG5tbS9leGVjbWVtLmMtNTQ4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0NTYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTWVtb3J5IFRyYXBwaW5nIEluc3RydWN0aW9ucyoqCgpZZXMsIHRoYXQgY29uZmlybXMgaXQg4oCTIHRoZSBpc3N1ZSBJJiMzOTttIGNoYXNpbmcgaXMgZGVmaW5pdGVseSBwcmVzZW50LiBOb3csIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCAqaG93KiBpdCYjMzk7cyBiZWluZyBoYW5kbGVkLCBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnNgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCB0byBpdHMgaW1wbGVtZW50YXRpb24gaW4gYGFyY2gvYXJtNjQvbW0vaW5pdC5jYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGluamVjdGluZyB0aG9zZSB0cmFwcGluZyBpbnN0cnVjdGlvbnMgd2hlbiBtZW1vcnkgcmVnaW9ucyBhcmUgbWFya2VkIGFzIGV4ZWN1dGUtb25seSwgb3Igd2hlbiB0aGUgc3lzdGVtIGRldGVjdHMgbWVtb3J5IHJlZ2lvbnMgYXJlIGV4ZWN1dGFibGUsIGFuZCBhcyBzdWNoIEkgbmVlZCB0byBlbnN1cmUgaXQmIzM5O3MgYmVoYXZpb3IuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgc2V0cyB0aGVzZSB0cmFwcywgYW5kIHVuZGVyc3RhbmQgaXRzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBhcmNoaXRlY3R1cmUgYW5kIG1lbW9yeSBsYXlvdXQuIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGVycm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm9pZCBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L21tL2luaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L21tL2luaXQuYz01MDU9c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuLS1cbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTU2OC1cbmFyY2gvYXJtNjQvbW0vaW5pdC5jOjU2OTp2b2lkIGV4ZWNtZW1fZmlsbF90cmFwcGluZ19pbnNucyh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxuYXJjaC9hcm02NC9tbS9pbml0LmMtNTcwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4MzgKCQkJCQkJCW91dHB1dDogMTkwCgkJCQkJCQl0aG91Z2h0czogNDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBBUk02NCBFeGVjdXRhYmxlIE1lbW9yeSBQYXRjaCoqCgpPa2F5LCBJJiMzOTt2ZSBnb3QgaXQuIFRoZXJlJiMzOTtzIGEgY2xlYXIgZm9jdXMgb24gYSBwYXJ0aWN1bGFyIGNvZGUgcGF0aCBoZXJlLCBhbmQgdGhlIGFzc29jaWF0ZWQgc3ltYm9sIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCkZpcnN0LCBsZXQgbWUgY29uZmlybSB0aGUgZnVuY3Rpb246IGBjaGFuZ2VfbWVtb3J5X2NvbW1vbmAgaW4gYGFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY2AuIFllcywgaXQmIzM5O3Mgc3RhdGljLCBhcyBleHBlY3RlZC4KCk5vdywgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCB0aGUgY29yZSBmb2N1cyBzeW1ib2xzIGFyZTogYGV4ZWNtZW1fc3BsaXRgLCBgbW9kdWxlX2VtaXRfcGx0X2VudHJ5YCwgYG1vZHVsZV9lbWl0X3ZlbmVlcl9mb3JfYWRycGAsIGBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zYCwgYW5kIGBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnNgLiBUaGVzZSByZWFsbHkgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHdhdGNoLgoKTmV4dCwgdGhlIGNvbmZpZ3MuIEkgaW5pdGlhbGx5IHNhdyBgQVJNNjRfRVJSQVRVTV84NDM0MTlgLCBidXQgdGhhdCYjMzk7cyBhcm02NCBzcGVjaWZpYywgYW5kIHRoZSBwcm9tcHQgc2F5cyB0byBleGNsdWRlIGFueSBgQ09ORklHX2AgcHJlZml4IGZyb20gdGhlIGFuc3dlciwgc28gbGV0JiMzOTtzIHN0aWNrIHdpdGggdGhlIGZvbGxvd2luZywgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXRjaDogYE1PRFVMRVNgIGFuZCBgRFlOQU1JQ19GVFJBQ0VgLgoKTm93LCByZWdhcmRpbmcgYEVYRUNNRU1gLCBJIHJlY2FsbCBpdCYjMzk7cyBhIGhpZGRlbiBib29sLCBtYWtpbmcgaXQgdW5hYmxlIHRvIGJlIGV4cGxpY2l0bHkgZW5hYmxlZCBpbiBgbWFrZSBkZWZjb25maWdgLiBIb3dldmVyLCBpdCYjMzk7cyBzZWxlY3RlZCBieSBgTU9EVUxFU2AuIFRoZXJlZm9yZSwgYE1PRFVMRVNgIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGFjdGl2YXRlIHRoYXQgYXNwZWN0IG9mIHRoZSBjaGFuZ2VzLgoKTGV0JiMzOTtzIHF1aWNrbHkgcmVjYXA6IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBBUkNIX0hBU19FWEVDTUVNX1JPWGAgZm9yIGFybTY0LiBJdCBpcyBtb2RpZnlpbmcgaG93IG1vZHVsZSBtZW1vcnkgaXMgYWxsb2NhdGVkLCBzcGVjaWZpY2FsbHksIGJ5IHNwbGl0dGluZyBgTU9EX0lOSVRfVEVYVGAgZnJvbSBgTU9EX1RFWFRgIHdoZW4gYGV4ZWNtZW1faXNfcm94YCBpcyB0cnVlLiAgSXQgaXMgYWxzbyBtb2RpZnlpbmcgZnRyYWNlIHRyYW1wb2xpbmVzIGFuZCBQTFQgZ2VuZXJhdGlvbiBmb3IgbW9kdWxlcyBvbiBhcm02NCB0byBhY2NvbW1vZGF0ZSB0aGVzZSBjaGFuZ2VzLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBtb2RpZmljYXRpb25zIHRvIHZpdGFsIGtlcm5lbCBsb2dpYyAobW9kdWxlIGxvYWRpbmcsIGV4ZWN1dGFibGUgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBmdHJhY2UpIGFuZCBhcmUgbGlrZWx5IHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuCgpUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KCk15IGZpbmFsaXplZCB1bmRlcnN0YW5kaW5nIHRoZW4gaXM6CgpGb2N1c1N5bWJvbHM6Ci0gYGV4ZWNtZW1fc3BsaXRgCi0gYG1vZHVsZV9lbWl0X3BsdF9lbnRyeWAKLSBgbW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwYAotIGBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zYAotIGBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnNgCgpFbmFibGVDb25maWdzOgotIGBNT0RVTEVTYAotIGBEWU5BTUlDX0ZUUkFDRWAKClJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01PRFVMRVMmIzM0OywKICAgICYjMzQ7RFlOQU1JQ19GVFJBQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleGVjbWVtX3NwbGl0JiMzNDssCiAgICAmIzM0O21vZHVsZV9lbWl0X3BsdF9lbnRyeSYjMzQ7LAogICAgJiMzNDttb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnAmIzM0OywKICAgICYjMzQ7bW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyYjMzQ7LAogICAgJiMzNDtleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgQVJDSF9IQVNfRVhFQ01FTV9ST1ggZm9yIGFybTY0LCBtb2RpZnlpbmcgaG93IG1vZHVsZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGJ5IHNwbGl0dGluZyBNT0RfSU5JVF9URVhUIGZyb20gTU9EX1RFWFQgd2hlbiBleGVjbWVtX2lzX3JveCBpcyB0cnVlLiBJdCBhbHNvIHVwZGF0ZXMgZnRyYWNlIHRyYW1wb2xpbmVzIGFuZCBQTFQgZ2VuZXJhdGlvbiBmb3IgbW9kdWxlcyBvbiBhcm02NCB0byBhY2NvbW1vZGF0ZSB0aGVzZSBjaGFuZ2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIChtb2R1bGUgbG9hZGluZywgZXhlY3V0YWJsZSBtZW1vcnkgYWxsb2NhdGlvbiwgZnRyYWNlKSB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNT0RVTEVTJiMzNDssCiAgICAmIzM0O0RZTkFNSUNfRlRSQUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXhlY21lbV9zcGxpdCYjMzQ7LAogICAgJiMzNDttb2R1bGVfZW1pdF9wbHRfZW50cnkmIzM0OywKICAgICYjMzQ7bW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwJiMzNDssCiAgICAmIzM0O21vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMmIzM0OywKICAgICYjMzQ7ZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIEFSQ0hfSEFTX0VYRUNNRU1fUk9YIGZvciBhcm02NCwgbW9kaWZ5aW5nIGhvdyBtb2R1bGUgbWVtb3J5IGlzIGFsbG9jYXRlZCBieSBzcGxpdHRpbmcgTU9EX0lOSVRfVEVYVCBmcm9tIE1PRF9URVhUIHdoZW4gZXhlY21lbV9pc19yb3ggaXMgdHJ1ZS4gSXQgYWxzbyB1cGRhdGVzIGZ0cmFjZSB0cmFtcG9saW5lcyBhbmQgUExUIGdlbmVyYXRpb24gZm9yIG1vZHVsZXMgb24gYXJtNjQgdG8gYWNjb21tb2RhdGUgdGhlc2UgY2hhbmdlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyAobW9kdWxlIGxvYWRpbmcsIGV4ZWN1dGFibGUgbWVtb3J5IGFsbG9jYXRpb24sIGZ0cmFjZSkgdGhhdCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNDo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIGV4ZWN1dGFibGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgKGBleGVjbWVtYCkgZm9yIGtlcm5lbCBtb2R1bGVzLCBzcGVjaWZpY2FsbHkgY29uc29saWRhdGluZyBtb2R1bGUgdGV4dCBhbmQgaW5pdCB0ZXh0IGFsbG9jYXRpb25zLCBtZXJnaW5nIFBMVCBzZWN0aW9ucyBmb3IgQVJNNjQsIGFuZCBhZGp1c3RpbmcgcGFnZSBhdHRyaWJ1dGVzIGZvciBST1ggKFJlYWQtT25seSBFeGVjdXRlKSBjYWNoZXMuIFRoZXNlIGNoYW5nZXMgZGVhbCB3aXRoIGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCwgcGFnZSBwZXJtaXNzaW9ucywgYW5kIG1vZHVsZSBsb2FkaW5nLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHBhZ2UgZmF1bHRzLCBvciBpbnZhbGlkIGluc3RydWN0aW9uIGV4Y2VwdGlvbnMuIFN1Y2ggaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgc3RhbmRhcmQgcGFnZSBmYXVsdCBoYW5kbGVycywgYW5kIGtlcm5lbCBib290L21vZHVsZSBsb2FkaW5nIHRlc3RzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBzdGFjay9oZWFwIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbGwgYWxsb2NhdGVkIG1vZHVsZSBtZW1vcnkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCAoZS5nLiwgdmlhIGBtZW1zZXRgIGluIGBtb2R1bGVfbWVtb3J5X2FsbG9jYCBvciBgZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zYCkuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYzgyYzc3MjA2ZWI5NWFjMWY0ZDQ1YjhmMzVjYmY4ODFjODA2ZTEzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjIgMTQ6NDg6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWcKaW5kZXggYjNhZmUwNjg4OTE5Yi4uMDgwYjk3YjBiYmQ1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvS2NvbmZpZwpAQCAtMjcsNiAmIzQzOzI3LDcgQEAgY29uZmlnIEFSTTY0CiAJc2VsZWN0IEFSQ0hfSEFTX0RNQV9PUFMgaWYgWEVOCiAJc2VsZWN0IEFSQ0hfSEFTX0RNQV9QUkVQX0NPSEVSRU5UCiAJc2VsZWN0IEFSQ0hfSEFTX0FDUElfVEFCTEVfVVBHUkFERSBpZiBBQ1BJCiYjNDM7CXNlbGVjdCBBUkNIX0hBU19FWEVDTUVNX1JPWAogCXNlbGVjdCBBUkNIX0hBU19GQVNUX01VTFRJUExJRVIKIAlzZWxlY3QgQVJDSF9IQVNfRk9SVElGWV9TT1VSQ0UKIAlzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmgKaW5kZXggZmI5Yjg4ZWViZWIxNS4uOTMyOGZhZGI0YTk1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oCkBAIC0xNSwxMSAmIzQzOzE1LDkgQEAgc3RydWN0IG1vZF9wbHRfc2VjIHsKIAogc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljIHsKIAlzdHJ1Y3QgbW9kX3BsdF9zZWMJY29yZTsKLQlzdHJ1Y3QgbW9kX3BsdF9zZWMJaW5pdDsKIAogCS8qIGZvciBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KIAlzdHJ1Y3QgcGx0X2VudHJ5CSpmdHJhY2VfdHJhbXBvbGluZXM7Ci0Jc3RydWN0IHBsdF9lbnRyeQkqaW5pdF9mdHJhY2VfdHJhbXBvbGluZXM7CiB9OwogCiB1NjQgbW9kdWxlX2VtaXRfcGx0X2VudHJ5KHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmxkcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmgKaW5kZXggMGIzYWFjZDIyYzU5MC4uOTU1NDBlOTU2YjQxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmgKQEAgLTEsOCAmIzQzOzEsNSBAQAogU0VDVElPTlMgewogCS5wbHQgMCA6IHsgQllURSgwKSB9Ci0JLmluaXQucGx0IDAgOiB7IEJZVEUoMCkgfQotCS50ZXh0LmZ0cmFjZV90cmFtcG9saW5lIDAgOiB7IEJZVEUoMCkgfQotCS5pbml0LnRleHQuZnRyYWNlX3RyYW1wb2xpbmUgMCA6IHsgQllURSgwKSB9CiAKICNpZmRlZiBDT05GSUdfS0FTQU5fU1dfVEFHUwogCS8qCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jCmluZGV4IDVhMTU1NGE0NDE2MjguLmI1NmRhMjRjMWJlNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jCkBAIC0yNTgsMTcgJiM0MzsyNTgsMTAgQEAgaW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKQogCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUocGMsIDAsIG5ldywgZmFsc2UpOwogfQogCi1zdGF0aWMgc3RydWN0IHBsdF9lbnRyeSAqZ2V0X2Z0cmFjZV9wbHQoc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7c3RhdGljIHN0cnVjdCBwbHRfZW50cnkgKmdldF9mdHJhY2VfcGx0KHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKICNpZmRlZiBDT05GSUdfTU9EVUxFUwotCXN0cnVjdCBwbHRfZW50cnkgKnBsdCA9IE5VTEw7Ci0KLQlpZiAod2l0aGluX21vZHVsZV9tZW1fdHlwZShhZGRyLCBtb2QsIE1PRF9JTklUX1RFWFQpKQotCQlwbHQgPSBtb2QtJmd0O2FyY2guaW5pdF9mdHJhY2VfdHJhbXBvbGluZXM7Ci0JZWxzZSBpZiAod2l0aGluX21vZHVsZV9tZW1fdHlwZShhZGRyLCBtb2QsIE1PRF9URVhUKSkKLQkJcGx0ID0gbW9kLSZndDthcmNoLmZ0cmFjZV90cmFtcG9saW5lczsKLQllbHNlCi0JCXJldHVybiBOVUxMOwomIzQzOwlzdHJ1Y3QgcGx0X2VudHJ5ICpwbHQgPSBtb2QtJmd0O2FyY2guZnRyYWNlX3RyYW1wb2xpbmVzOwogCiAJcmV0dXJuICZhbXA7cGx0W0ZUUkFDRV9QTFRfSURYXTsKICNlbHNlCkBAIC0zMzksNyAmIzQzOzMzMiw3IEBAIHN0YXRpYyBib29sIGZ0cmFjZV9maW5kX2NhbGxhYmxlX2FkZHIoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywKIAlpZiAoV0FSTl9PTighbW9kKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JcGx0ID0gZ2V0X2Z0cmFjZV9wbHQobW9kLCBwYyk7CiYjNDM7CXBsdCA9IGdldF9mdHJhY2VfcGx0KG1vZCk7CiAJaWYgKCFwbHQpIHsKIAkJcHJfZXJyKCYjMzQ7ZnRyYWNlOiBubyBtb2R1bGUgUExUIGZvciAlcHNcbiYjMzQ7LCAodm9pZCAqKSphZGRyKTsKIAkJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYyBiL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmMKaW5kZXggN2FmZDM3MGRhOWY0OC4uNjkwMGQyMjQyZjFiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jCkBAIC03MCw4ICYjNDM7NzAsNyBAQCB1NjQgbW9kdWxlX2VtaXRfcGx0X2VudHJ5KHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycywKIAkJCSAgdm9pZCAqbG9jLCBjb25zdCBFbGY2NF9SZWxhICpyZWxhLAogCQkJICBFbGY2NF9TeW0gKnN5bSkKIHsKLQlzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9ICF3aXRoaW5fbW9kdWxlX2luaXQoKHVuc2lnbmVkIGxvbmcpbG9jLCBtb2QpID8KLQkJCQkJCSZhbXA7bW9kLSZndDthcmNoLmNvcmUgOiAmYW1wO21vZC0mZ3Q7YXJjaC5pbml0OwomIzQzOwlzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9ICZhbXA7bW9kLSZndDthcmNoLmNvcmU7CiAJc3RydWN0IHBsdF9lbnRyeSAqcGx0ID0gKHN0cnVjdCBwbHRfZW50cnkgKilzZWNoZHJzW3BsdHNlYy0mZ3Q7cGx0X3NobmR4XS5zaF9hZGRyOwogCWludCBpID0gcGx0c2VjLSZndDtwbHRfbnVtX2VudHJpZXM7CiAJaW50IGogPSBpIC0gMTsKQEAgLTEwMSw4ICYjNDM7MTAwLDcgQEAgdTY0IG1vZHVsZV9lbWl0X3BsdF9lbnRyeShzdHJ1Y3QgbW9kdWxlICptb2QsIEVsZjY0X1NoZHIgKnNlY2hkcnMsCiB1NjQgbW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwKHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycywKIAkJCQl2b2lkICpsb2MsIHU2NCB2YWwpCiB7Ci0Jc3RydWN0IG1vZF9wbHRfc2VjICpwbHRzZWMgPSAhd2l0aGluX21vZHVsZV9pbml0KCh1bnNpZ25lZCBsb25nKWxvYywgbW9kKSA/Ci0JCQkJCQkmYW1wO21vZC0mZ3Q7YXJjaC5jb3JlIDogJmFtcDttb2QtJmd0O2FyY2guaW5pdDsKJiM0MzsJc3RydWN0IG1vZF9wbHRfc2VjICpwbHRzZWMgPSAmYW1wO21vZC0mZ3Q7YXJjaC5jb3JlOwogCXN0cnVjdCBwbHRfZW50cnkgKnBsdCA9IChzdHJ1Y3QgcGx0X2VudHJ5ICopc2VjaGRyc1twbHRzZWMtJmd0O3BsdF9zaG5keF0uc2hfYWRkcjsKIAlpbnQgaSA9IHBsdHNlYy0mZ3Q7cGx0X251bV9lbnRyaWVzJiM0MzsmIzQzOzsKIAl1MzIgYnI7CkBAIC0xNjksMTcgJiM0MzsxNjcsMTcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBjb3VudF9wbHRzKEVsZjY0X1N5bSAqc3ltcywgRWxmNjRfUmVsYSAqcmVsYSwgaW50IG51bSwKIAkJY2FzZSBSX0FBUkNINjRfQ0FMTDI2OgogCQkJLyoKIAkJCSAqIFdlIG9ubHkgaGF2ZSB0byBjb25zaWRlciBicmFuY2ggdGFyZ2V0cyB0aGF0IHJlc29sdmUKLQkJCSAqIHRvIHN5bWJvbHMgdGhhdCBhcmUgZGVmaW5lZCBpbiBhIGRpZmZlcmVudCBzZWN0aW9uLgomIzQzOwkJCSAqIHRvIHN5bWJvbHMgdGhhdCBhcmUgbm90IGRlZmluZWQgaW4gdGhlIHNhbWUgbW9kdWxlLgogCQkJICogVGhpcyBpcyBub3Qgc2ltcGx5IGEgaGV1cmlzdGljLCBpdCBpcyBhIGZ1bmRhbWVudGFsCiAJCQkgKiBsaW1pdGF0aW9uLCBzaW5jZSB0aGVyZSBpcyBubyBndWFyYW50ZWVkIHdheSB0byBlbWl0CiAJCQkgKiBQTFQgZW50cmllcyBzdWZmaWNpZW50bHkgY2xvc2UgdG8gdGhlIGJyYW5jaCBpZiB0aGUKIAkJCSAqIHNlY3Rpb24gc2l6ZSBleGNlZWRzIHRoZSByYW5nZSBvZiBhIGJyYW5jaAogCQkJICogaW5zdHJ1Y3Rpb24uIFNvIGlnbm9yZSByZWxvY2F0aW9ucyBhZ2FpbnN0IGRlZmluZWQKLQkJCSAqIHN5bWJvbHMgaWYgdGhleSBsaXZlIGluIHRoZSBzYW1lIHNlY3Rpb24gYXMgdGhlCiYjNDM7CQkJICogc3ltYm9scyBpZiB0aGV5IGxpdmUgaW4gdGhlIHNhbWUgbW9kdWxlIGFzIHRoZQogCQkJICogcmVsb2NhdGlvbiB0YXJnZXQuCiAJCQkgKi8KIAkJCXMgPSBzeW1zICYjNDM7IEVMRjY0X1JfU1lNKHJlbGFbaV0ucl9pbmZvKTsKLQkJCWlmIChzLSZndDtzdF9zaG5keCA9PSBkc3RpZHgpCiYjNDM7CQkJaWYgKHMtJmd0O3N0X3NobmR4ICE9IFNITl9VTkRFRikKIAkJCQlicmVhazsKIAogCQkJLyoKQEAgLTI3NywxMyAmIzQzOzI3NSwxNCBAQCBzdGF0aWMgaW50IHBhcnRpdGlvbl9icmFuY2hfcGx0X3JlbGFzKEVsZjY0X1N5bSAqc3ltcywgRWxmNjRfUmVsYSAqcmVsYSwKIAlyZXR1cm4gaTsKIH0KIAomIzQzO3N0YXRpYyBjb25zdCBpbnQgZnRyYWNlX3BsdHMgPSBJU19FTkFCTEVEKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkgPyBOUl9GVFJBQ0VfUExUUyA6IDA7CiYjNDM7CiBpbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqZWhkciwgRWxmX1NoZHIgKnNlY2hkcnMsCiAJCQkgICAgICBjaGFyICpzZWNzdHJpbmdzLCBzdHJ1Y3QgbW9kdWxlICptb2QpCiB7Ci0JdW5zaWduZWQgbG9uZyBjb3JlX3BsdHMgPSAwOwotCXVuc2lnbmVkIGxvbmcgaW5pdF9wbHRzID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBjb3JlX3BsdHMgPSBmdHJhY2VfcGx0czsKIAlFbGY2NF9TeW0gKnN5bXMgPSBOVUxMOwotCUVsZl9TaGRyICpwbHRzZWMsICp0cmFtcCA9IE5VTEwsICppbml0X3RyYW1wID0gTlVMTDsKJiM0MzsJRWxmX1NoZHIgKnBsdHNlYzsKIAlpbnQgaTsKIAogCS8qCkBAIC0yOTMsMjAgJiM0MzsyOTIsMTIgQEAgaW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLAogCWZvciAoaSA9IDA7IGkgJmx0OyBlaGRyLSZndDtlX3NobnVtOyBpJiM0MzsmIzQzOykgewogCQlpZiAoIXN0cmNtcChzZWNzdHJpbmdzICYjNDM7IHNlY2hkcnNbaV0uc2hfbmFtZSwgJiMzNDsucGx0JiMzNDspKQogCQkJbW9kLSZndDthcmNoLmNvcmUucGx0X3NobmR4ID0gaTsKLQkJZWxzZSBpZiAoIXN0cmNtcChzZWNzdHJpbmdzICYjNDM7IHNlY2hkcnNbaV0uc2hfbmFtZSwgJiMzNDsuaW5pdC5wbHQmIzM0OykpCi0JCQltb2QtJmd0O2FyY2guaW5pdC5wbHRfc2huZHggPSBpOwotCQllbHNlIGlmICghc3RyY21wKHNlY3N0cmluZ3MgJiM0Mzsgc2VjaGRyc1tpXS5zaF9uYW1lLAotCQkJCSAmIzM0Oy50ZXh0LmZ0cmFjZV90cmFtcG9saW5lJiMzNDspKQotCQkJdHJhbXAgPSBzZWNoZHJzICYjNDM7IGk7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoc2Vjc3RyaW5ncyAmIzQzOyBzZWNoZHJzW2ldLnNoX25hbWUsCi0JCQkJICYjMzQ7LmluaXQudGV4dC5mdHJhY2VfdHJhbXBvbGluZSYjMzQ7KSkKLQkJCWluaXRfdHJhbXAgPSBzZWNoZHJzICYjNDM7IGk7CiAJCWVsc2UgaWYgKHNlY2hkcnNbaV0uc2hfdHlwZSA9PSBTSFRfU1lNVEFCKQogCQkJc3ltcyA9IChFbGY2NF9TeW0gKilzZWNoZHJzW2ldLnNoX2FkZHI7CiAJfQogCi0JaWYgKCFtb2QtJmd0O2FyY2guY29yZS5wbHRfc2huZHggfHwgIW1vZC0mZ3Q7YXJjaC5pbml0LnBsdF9zaG5keCkgewotCQlwcl9lcnIoJiMzNDslczogbW9kdWxlIFBMVCBzZWN0aW9uKHMpIG1pc3NpbmdcbiYjMzQ7LCBtb2QtJmd0O25hbWUpOwomIzQzOwlpZiAoIW1vZC0mZ3Q7YXJjaC5jb3JlLnBsdF9zaG5keCkgewomIzQzOwkJcHJfZXJyKCYjMzQ7JXM6IG1vZHVsZSBQTFQgc2VjdGlvbiBtaXNzaW5nXG4mIzM0OywgbW9kLSZndDtuYW1lKTsKIAkJcmV0dXJuIC1FTk9FWEVDOwogCX0KIAlpZiAoIXN5bXMpIHsKQEAgLTMzNSwxMiAmIzQzOzMyNiw4IEBAIGludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICplaGRyLCBFbGZfU2hkciAqc2VjaGRycywKIAkJaWYgKG5lbnRzKQogCQkJc29ydChyZWxzLCBuZW50cywgc2l6ZW9mKEVsZjY0X1JlbGEpLCBjbXBfcmVsYSwgTlVMTCk7CiAKLQkJaWYgKCFtb2R1bGVfaW5pdF9sYXlvdXRfc2VjdGlvbihzZWNzdHJpbmdzICYjNDM7IGRzdHNlYy0mZ3Q7c2hfbmFtZSkpCi0JCQljb3JlX3BsdHMgJiM0Mzs9IGNvdW50X3BsdHMoc3ltcywgcmVscywgbnVtcmVscywKLQkJCQkJCXNlY2hkcnNbaV0uc2hfaW5mbywgZHN0c2VjKTsKLQkJZWxzZQotCQkJaW5pdF9wbHRzICYjNDM7PSBjb3VudF9wbHRzKHN5bXMsIHJlbHMsIG51bXJlbHMsCi0JCQkJCQlzZWNoZHJzW2ldLnNoX2luZm8sIGRzdHNlYyk7CiYjNDM7CQljb3JlX3BsdHMgJiM0Mzs9IGNvdW50X3BsdHMoc3ltcywgcmVscywgbnVtcmVscywgc2VjaGRyc1tpXS5zaF9pbmZvLAomIzQzOwkJCQkJZHN0c2VjKTsKIAl9CiAKIAlwbHRzZWMgPSBzZWNoZHJzICYjNDM7IG1vZC0mZ3Q7YXJjaC5jb3JlLnBsdF9zaG5keDsKQEAgLTM0OCwzMCAmIzQzOzMzNSw4IEBAIGludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICplaGRyLCBFbGZfU2hkciAqc2VjaGRycywKIAlwbHRzZWMtJmd0O3NoX2ZsYWdzID0gU0hGX0VYRUNJTlNUUiB8IFNIRl9BTExPQzsKIAlwbHRzZWMtJmd0O3NoX2FkZHJhbGlnbiA9IEwxX0NBQ0hFX0JZVEVTOwogCXBsdHNlYy0mZ3Q7c2hfc2l6ZSA9IChjb3JlX3BsdHMgICYjNDM7IDEpICogc2l6ZW9mKHN0cnVjdCBwbHRfZW50cnkpOwotCW1vZC0mZ3Q7YXJjaC5jb3JlLnBsdF9udW1fZW50cmllcyA9IDA7CiYjNDM7CW1vZC0mZ3Q7YXJjaC5jb3JlLnBsdF9udW1fZW50cmllcyA9IGZ0cmFjZV9wbHRzOwogCW1vZC0mZ3Q7YXJjaC5jb3JlLnBsdF9tYXhfZW50cmllcyA9IGNvcmVfcGx0czsKIAotCXBsdHNlYyA9IHNlY2hkcnMgJiM0MzsgbW9kLSZndDthcmNoLmluaXQucGx0X3NobmR4OwotCXBsdHNlYy0mZ3Q7c2hfdHlwZSA9IFNIVF9OT0JJVFM7Ci0JcGx0c2VjLSZndDtzaF9mbGFncyA9IFNIRl9FWEVDSU5TVFIgfCBTSEZfQUxMT0M7Ci0JcGx0c2VjLSZndDtzaF9hZGRyYWxpZ24gPSBMMV9DQUNIRV9CWVRFUzsKLQlwbHRzZWMtJmd0O3NoX3NpemUgPSAoaW5pdF9wbHRzICYjNDM7IDEpICogc2l6ZW9mKHN0cnVjdCBwbHRfZW50cnkpOwotCW1vZC0mZ3Q7YXJjaC5pbml0LnBsdF9udW1fZW50cmllcyA9IDA7Ci0JbW9kLSZndDthcmNoLmluaXQucGx0X21heF9lbnRyaWVzID0gaW5pdF9wbHRzOwotCi0JaWYgKHRyYW1wKSB7Ci0JCXRyYW1wLSZndDtzaF90eXBlID0gU0hUX05PQklUUzsKLQkJdHJhbXAtJmd0O3NoX2ZsYWdzID0gU0hGX0VYRUNJTlNUUiB8IFNIRl9BTExPQzsKLQkJdHJhbXAtJmd0O3NoX2FkZHJhbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCBwbHRfZW50cnkpOwotCQl0cmFtcC0mZ3Q7c2hfc2l6ZSA9IE5SX0ZUUkFDRV9QTFRTICogc2l6ZW9mKHN0cnVjdCBwbHRfZW50cnkpOwotCX0KLQotCWlmIChpbml0X3RyYW1wKSB7Ci0JCWluaXRfdHJhbXAtJmd0O3NoX3R5cGUgPSBTSFRfTk9CSVRTOwotCQlpbml0X3RyYW1wLSZndDtzaF9mbGFncyA9IFNIRl9FWEVDSU5TVFIgfCBTSEZfQUxMT0M7Ci0JCWluaXRfdHJhbXAtJmd0O3NoX2FkZHJhbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCBwbHRfZW50cnkpOwotCQlpbml0X3RyYW1wLSZndDtzaF9zaXplID0gTlJfRlRSQUNFX1BMVFMgKiBzaXplb2Yoc3RydWN0IHBsdF9lbnRyeSk7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jCmluZGV4IDI0YWRiNTgxYWYwZWIuLjYyMGMyYjcwMTE1ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jCkBAIC00NTQsMjkgJiM0Mzs0NTQsMTEgQEAgc3RhdGljIGludCBtb2R1bGVfaW5pdF9mdHJhY2VfcGx0KGNvbnN0IEVsZl9FaGRyICpoZHIsCiAJCQkJICBzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpCi0JY29uc3QgRWxmX1NoZHIgKnM7Ci0Jc3RydWN0IHBsdF9lbnRyeSAqcGx0czsKLQotCXMgPSBmaW5kX3NlY3Rpb24oaGRyLCBzZWNoZHJzLCAmIzM0Oy50ZXh0LmZ0cmFjZV90cmFtcG9saW5lJiMzNDspOwotCWlmICghcykKLQkJcmV0dXJuIC1FTk9FWEVDOwotCi0JcGx0cyA9ICh2b2lkICopcy0mZ3Q7c2hfYWRkcjsKJiM0MzsJc3RydWN0IHBsdF9lbnRyeSAqcGx0cyA9ICh2b2lkICopc2VjaGRyc1ttb2QtJmd0O2FyY2guY29yZS5wbHRfc2huZHhdLnNoX2FkZHI7CiAKIAlfX2luaXRfcGx0KCZhbXA7cGx0c1tGVFJBQ0VfUExUX0lEWF0sIEZUUkFDRV9BRERSKTsKIAogCW1vZC0mZ3Q7YXJjaC5mdHJhY2VfdHJhbXBvbGluZXMgPSBwbHRzOwotCi0JcyA9IGZpbmRfc2VjdGlvbihoZHIsIHNlY2hkcnMsICYjMzQ7LmluaXQudGV4dC5mdHJhY2VfdHJhbXBvbGluZSYjMzQ7KTsKLQlpZiAoIXMpCi0JCXJldHVybiAtRU5PRVhFQzsKLQotCXBsdHMgPSAodm9pZCAqKXMtJmd0O3NoX2FkZHI7Ci0KLQlfX2luaXRfcGx0KCZhbXA7cGx0c1tGVFJBQ0VfUExUX0lEWF0sIEZUUkFDRV9BRERSKTsKLQotCW1vZC0mZ3Q7YXJjaC5pbml0X2Z0cmFjZV90cmFtcG9saW5lcyA9IHBsdHM7Ci0KICNlbmRpZgogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9pbml0LmMgYi9hcmNoL2FybTY0L21tL2luaXQuYwppbmRleCA5Nzk4N2Y4NTBhMzNjLi5lNmM5ODA0NTA0NmUyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL2luaXQuYwpAQCAtNTMxLDcgJiM0Mzs1MzEsOCBAQCBzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpCiAJCQlbRVhFQ01FTV9ERUZBVUxUXSA9IHsKIAkJCQkuc3RhcnQJPSBzdGFydCwKIAkJCQkuZW5kCT0gZW5kLAotCQkJCS5wZ3Byb3QJPSBQQUdFX0tFUk5FTCwKJiM0MzsJCQkJLnBncHJvdAk9IFBBR0VfS0VSTkVMX1JPWCwKJiM0MzsJCQkJLmZsYWdzCT0gRVhFQ01FTV9ST1hfQ0FDSEUsCiAJCQkJLmFsaWdubWVudCA9IDEsCiAJCQkJLmZhbGxiYWNrX3N0YXJ0CT0gZmFsbGJhY2tfc3RhcnQsCiAJCQkJLmZhbGxiYWNrX2VuZAk9IGZhbGxiYWNrX2VuZCwKQEAgLTU0OCw5ICYjNDM7NTQ5LDI1IEBAIHN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZCkKIAkJCQkucGdwcm90CT0gUEFHRV9LRVJORUwsCiAJCQkJLmFsaWdubWVudCA9IDEsCiAJCQl9LAomIzQzOwkJCVtFWEVDTUVNX01PRFVMRV9EQVRBXSA9IHsKJiM0MzsJCQkJLnN0YXJ0CT0gc3RhcnQsCiYjNDM7CQkJCS5lbmQJPSBlbmQsCiYjNDM7CQkJCS5wZ3Byb3QJPSBQQUdFX0tFUk5FTCwKJiM0MzsJCQkJLmFsaWdubWVudCA9IDEsCiYjNDM7CQkJCS5mYWxsYmFja19zdGFydAk9IGZhbGxiYWNrX3N0YXJ0LAomIzQzOwkJCQkuZmFsbGJhY2tfZW5kCT0gZmFsbGJhY2tfZW5kLAomIzQzOwkJCX0sCiAJCX0sCiAJfTsKIAomIzQzOwlpZiAoIXN5c3RlbV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KCkpCiYjNDM7CQlleGVjbWVtX2luZm8ucmFuZ2VzW0VYRUNNRU1fREVGQVVMVF0uZmxhZ3MgfD0gRVhFQ01FTV9OT19IVUdFX1ZNQVA7CiYjNDM7CiAJcmV0dXJuICZhbXA7ZXhlY21lbV9pbmZvOwogfQomIzQzOwomIzQzO3ZvaWQgZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwltZW1zZXQzMihwdHIsIEFBUkNINjRfQlJFQUtfRkFVTFQsIHNpemUgLyBzaXplb2YoX19sZTMyKSk7CiYjNDM7fQogI2VuZGlmIC8qIENPTkZJR19FWEVDTUVNICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMgYi9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMKaW5kZXggYmJlOThhYzlhZDhjNi4uMjBmZjljYjI3M2MxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYwpAQCAtMTY5LDggJiM0MzsxNjksNiBAQCBzdGF0aWMgaW50IGNoYW5nZV9tZW1vcnlfY29tbW9uKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLAogCSAqIHdlIGFyZSBvcGVyYXRpbmcgb24gZG9lcyBub3QgcmVzdWx0IGluIHN1Y2ggc3BsaXR0aW5nLgogCSAqCiAJICogTGV0JiMzOTtzIHJlc3RyaWN0IG91cnNlbHZlcyB0byBtYXBwaW5ncyBjcmVhdGVkIGJ5IHZtYWxsb2MgKG9yIHZtYXApLgotCSAqIERpc2FsbG93IFZNX0FMTE9XX0hVR0VfVk1BUCBtYXBwaW5ncyB0byBndWFyYW50ZWUgdGhhdCBvbmx5IHBhZ2UKLQkgKiBtYXBwaW5ncyBhcmUgdXBkYXRlZCBhbmQgc3BsaXR0aW5nIGlzIG5ldmVyIG5lZWRlZC4KIAkgKgogCSAqIFNvIGNoZWNrIHdoZXRoZXIgdGhlIFthZGRyLCBhZGRyICYjNDM7IHNpemUpIGludGVydmFsIGlzIGVudGlyZWx5CiAJICogY292ZXJlZCBieSBwcmVjaXNlbHkgb25lIFZNIGFyZWEgdGhhdCBoYXMgdGhlIFZNX0FMTE9DIGZsYWcgc2V0LgpAQCAtMTc5LDcgJiM0MzsxNzcsMTYgQEAgc3RhdGljIGludCBjaGFuZ2VfbWVtb3J5X2NvbW1vbih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywKIAlpZiAoIWFyZWEgfHwKIAkgICAgKCh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZygodm9pZCAqKWVuZCkgJmd0OwogCSAgICAgKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKGFyZWEtJmd0O2FkZHIpICYjNDM7IGFyZWEtJmd0O3NpemUpIHx8Ci0JICAgICgoYXJlYS0mZ3Q7ZmxhZ3MgJmFtcDsgKFZNX0FMTE9DIHwgVk1fQUxMT1dfSFVHRV9WTUFQKSkgIT0gVk1fQUxMT0MpKQomIzQzOwkgICAgIShhcmVhLSZndDtmbGFncyAmYW1wOyBWTV9BTExPQykpCiYjNDM7ICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIERpc2FsbG93IFZNX0FMTE9XX0hVR0VfVk1BUCBtYXBwaW5ncyB1bmxlc3MgdGhlIHJlZ2lvbiBpcyBQTUQKJiM0MzsJICogYWxpZ25lZCwgb3Igc3BsaXR0aW5nIGxpdmUgaHVnZSBtYXBwaW5ncyBpcyBzdXBwb3J0ZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoKGFyZWEtJmd0O2ZsYWdzICZhbXA7IFZNX0FMTE9XX0hVR0VfVk1BUCkgJmFtcDsmYW1wOwomIzQzOwkgICAoKHN0YXJ0ICUgUE1EX1NJWkUpIHx8IChzaXplICUgUE1EX1NJWkUpKSAmYW1wOyZhbXA7CiYjNDM7CSAgIFdBUk5fT05fT05DRSghc3lzdGVtX3N1cHBvcnRzX2JibWwyX25vYWJvcnQoKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFudW1wYWdlcykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXhlY21lbS5oIGIvaW5jbHVkZS9saW51eC9leGVjbWVtLmgKaW5kZXggN2RlMjI5MTM0ZTMwNy4uYjA0OTI2ZjNmZmYyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leGVjbWVtLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9leGVjbWVtLmgKQEAgLTQ4LDEwICYjNDM7NDgsMTIgQEAgZW51bSBleGVjbWVtX3R5cGUgewogICogZW51bSBleGVjbWVtX3JhbmdlX2ZsYWdzIC0gb3B0aW9ucyBmb3IgZXhlY3V0YWJsZSBtZW1vcnkgYWxsb2NhdGlvbnMKICAqIEBFWEVDTUVNX0tBU0FOX1NIQURPVzoJYWxsb2NhdGUga2FzYW4gc2hhZG93CiAgKiBARVhFQ01FTV9ST1hfQ0FDSEU6CQlhbGxvY2F0aW9ucyBzaG91bGQgdXNlIFJPWCBjYWNoZSBvZiBodWdlIHBhZ2VzCiYjNDM7ICogQEVYRUNNRU1fTk9fSFVHRV9WTUFQOgljYWNoZSBhbGxvY2F0aW9ucyBtdXN0IGF2b2lkIGh1Z2Ugdm1hcHBpbmdzCiAgKi8KIGVudW0gZXhlY21lbV9yYW5nZV9mbGFncyB7CiAJRVhFQ01FTV9LQVNBTl9TSEFET1cJPSAoMSAmbHQ7Jmx0OyAwKSwKIAlFWEVDTUVNX1JPWF9DQUNIRQk9ICgxICZsdDsmbHQ7IDEpLAomIzQzOwlFWEVDTUVNX05PX0hVR0VfVk1BUAk9ICgxICZsdDsmbHQ7IDIpLAogfTsKIAogI2lmZGVmIENPTkZJR19BUkNIX0hBU19FWEVDTUVNX1JPWApAQCAtMTc4LDYgJiM0MzsxODAsMTUgQEAgdm9pZCBleGVjbWVtX2ZyZWUodm9pZCAqcHRyKTsKIAogREVGSU5FX0ZSRUUoZXhlY21lbSwgdm9pZCAqLCBpZiAoX1QpIGV4ZWNtZW1fZnJlZShfVCkpOwogCiYjNDM7LyoqCiYjNDM7ICogZXhlY21lbV9zcGxpdCAtIGFsbG9jYXRlIHNwYWNlIGZyb20gYW4gZXhpc3RpbmcgZXhlY21lbSBjYWNoZSBhbGxvY2F0aW9uCiYjNDM7ICogQHB0ciAgLSB0aGUgZXhpc3RpbmcgZXhlY21lbSBjYWNoZSBhbGxvY2F0aW9uCiYjNDM7ICogQHNpemUgLSB0aGUgc2l6ZSB0byBjYXJ2ZSBvdXQgZnJvbSB0aGUgZXhpc3RpbmcgYWxsb2NhdGlvbgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0aGUgYWRkcmVzcyBvZiB0aGUgY2FydmVkIG91dCBhbGxvY2F0aW9uLCBvciAlTlVMTCBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO3ZvaWQgKmV4ZWNtZW1fc3BsaXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CiYjNDM7CiAjaWZkZWYgQ09ORklHX01NVQogLyoqCiAgKiBleGVjbWVtX3ZtYXAgLSBjcmVhdGUgdmlydHVhbCBtYXBwaW5nIGZvciBFWEVDTUVNX01PRFVMRV9EQVRBIG1lbW9yeQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKaW5kZXggNzU2NjgxNWZhYmJlOC4uMDMzNmE0NjczM2RkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCkBAIC0zMTYsMTAgJiM0MzszMTYsMTAgQEAgc3RydWN0IG1vZF90cmVlX25vZGUgewogfTsKIAogZW51bSBtb2RfbWVtX3R5cGUgewotCU1PRF9URVhUID0gMCwKLQlNT0RfREFUQSwKJiM0MzsJTU9EX0RBVEEgPSAwLAogCU1PRF9ST0RBVEEsCiAJTU9EX1JPX0FGVEVSX0lOSVQsCiYjNDM7CU1PRF9URVhULAogCU1PRF9JTklUX1RFWFQsCiAJTU9EX0lOSVRfREFUQSwKIAlNT0RfSU5JVF9ST0RBVEEsCmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL21haW4uYyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jCmluZGV4IDQ2ZGQ4ZDI1YTYwNTguLjJkNjIxMzQ5NjM1OTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jCkBAIC0xMzQyLDcgJiM0MzsxMzQyLDcgQEAgc3RhdGljIGludCBtb2R1bGVfbWVtb3J5X2FsbG9jKHN0cnVjdCBtb2R1bGUgKm1vZCwgZW51bSBtb2RfbWVtX3R5cGUgdHlwZSkKIHsKIAl1bnNpZ25lZCBpbnQgc2l6ZSA9IFBBR0VfQUxJR04obW9kLSZndDttZW1bdHlwZV0uc2l6ZSk7CiAJZW51bSBleGVjbWVtX3R5cGUgZXhlY21lbV90eXBlOwotCXZvaWQgKnB0cjsKJiM0MzsJdm9pZCAqcHRyID0gTlVMTDsKIAogCW1vZC0mZ3Q7bWVtW3R5cGVdLnNpemUgPSBzaXplOwogCkBAIC0xMzUxLDExICYjNDM7MTM1MSwyNSBAQCBzdGF0aWMgaW50IG1vZHVsZV9tZW1vcnlfYWxsb2Moc3RydWN0IG1vZHVsZSAqbW9kLCBlbnVtIG1vZF9tZW1fdHlwZSB0eXBlKQogCWVsc2UKIAkJZXhlY21lbV90eXBlID0gRVhFQ01FTV9NT0RVTEVfVEVYVDsKIAotCXB0ciA9IGV4ZWNtZW1fYWxsb2NfcncoZXhlY21lbV90eXBlLCBzaXplKTsKJiM0MzsJYm9vbCBpc19yb3ggPSBleGVjbWVtX2lzX3JveChleGVjbWVtX3R5cGUpOwomIzQzOwlpZiAoaXNfcm94KSB7CiYjNDM7CQkvKgomIzQzOwkJICogU3BlY2lhbCBjYXNlIGZvciBNT0RfVEVYVCAvIE1PRF9JTklUX1RFWFQ6IGFsbG9jYXRlIHRoZQomIzQzOwkJICogbGF0dGVyIGJ5IHNwbGl0dGluZyBvZmYgcmVxdWlyZWQgc3BhY2UgZnJvbSB0aGUgZm9ybWVyCiYjNDM7CQkgKiBzbyB0aGF0IHRoZXkgYXJlIGFsd2F5cyBwbGFjZWQgY2xvc2UgdG9nZXRoZXIuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh0eXBlID09IE1PRF9URVhUKQomIzQzOwkJCXNpemUgJiM0Mzs9IFBBR0VfQUxJR04obW9kLSZndDttZW1bTU9EX0lOSVRfVEVYVF0uc2l6ZSk7CiYjNDM7CQllbHNlIGlmICh0eXBlID09IE1PRF9JTklUX1RFWFQpCiYjNDM7CQkJcHRyID0gZXhlY21lbV9zcGxpdChtb2QtJmd0O21lbVtNT0RfVEVYVF0uYmFzZSwgc2l6ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFwdHIpCiYjNDM7CQlwdHIgPSBleGVjbWVtX2FsbG9jX3J3KGV4ZWNtZW1fdHlwZSwgc2l6ZSk7CiAJaWYgKCFwdHIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbW9kLSZndDttZW1bdHlwZV0uaXNfcm94ID0gZXhlY21lbV9pc19yb3goZXhlY21lbV90eXBlKTsKJiM0MzsJbW9kLSZndDttZW1bdHlwZV0uaXNfcm94ID0gaXNfcm94OwogCiAJLyoKIAkgKiBUaGUgcG9pbnRlciB0byB0aGVzZSBibG9ja3Mgb2YgbWVtb3J5IGFyZSBzdG9yZWQgb24gdGhlIG1vZHVsZQpAQCAtMTM2OCw3ICYjNDM7MTM4Miw3IEBAIHN0YXRpYyBpbnQgbW9kdWxlX21lbW9yeV9hbGxvYyhzdHJ1Y3QgbW9kdWxlICptb2QsIGVudW0gbW9kX21lbV90eXBlIHR5cGUpCiAJICogKmRvKiBldmVudHVhbGx5IGdldCBmcmVlZCwgYnV0IGxldCYjMzk7cyBqdXN0IGtlZXAgdGhpbmdzIHNpbXBsZQogCSAqIGFuZCBhdm9pZCAqYW55KiBmYWxzZSBwb3NpdGl2ZXMuCiAJICovCi0JaWYgKCFtb2QtJmd0O21lbVt0eXBlXS5pc19yb3gpCiYjNDM7CWlmICghaXNfcm94KQogCQlrbWVtbGVha19ub3RfbGVhayhwdHIpOwogCiAJbWVtc2V0KHB0ciwgMCwgc2l6ZSk7CmRpZmYgLS1naXQgYS9tbS9leGVjbWVtLmMgYi9tbS9leGVjbWVtLmMKaW5kZXggMDg0YTIwN2U0Mjc4Yi4uNTc5MGQ0YTg1MzJhZiAxMDA2NDQKLS0tIGEvbW0vZXhlY21lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2V4ZWNtZW0uYwpAQCAtMjc2LDcgJiM0MzsyNzYsOCBAQCBzdGF0aWMgdm9pZCAqX19leGVjbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBleGVjbWVtX3JhbmdlICpyYW5nZSwgc2l6ZV90IHNpemUpCiAKIHN0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3BvcHVsYXRlX2FsbG9jKHN0cnVjdCBleGVjbWVtX3JhbmdlICpyYW5nZSwgc2l6ZV90IHNpemUpCiB7Ci0JdW5zaWduZWQgbG9uZyB2bV9mbGFncyA9IFZNX0FMTE9XX0hVR0VfVk1BUDsKJiM0MzsJdW5zaWduZWQgbG9uZyB2bV9mbGFncyA9IChyYW5nZS0mZ3Q7ZmxhZ3MgJmFtcDsgRVhFQ01FTV9OT19IVUdFX1ZNQVApCiYjNDM7CQkJCQkJPyAwIDogVk1fQUxMT1dfSFVHRV9WTUFQOwogCXN0cnVjdCBtdXRleCAqbXV0ZXggPSAmYW1wO2V4ZWNtZW1fY2FjaGUubXV0ZXg7CiAJc3RydWN0IHZtX3N0cnVjdCAqdm07CiAJc2l6ZV90IGFsbG9jX3NpemU7CkBAIC00MzksNiAmIzQzOzQ0MCwzMyBAQCBzdGF0aWMgYm9vbCBleGVjbWVtX2NhY2hlX2ZyZWUodm9pZCAqcHRyKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIHZvaWQgKmV4ZWNtZW1fY2FjaGVfc3BsaXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYXBsZV90cmVlICpidXN5X2FyZWFzID0gJmFtcDtleGVjbWVtX2NhY2hlLmJ1c3lfYXJlYXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXB0cjsKJiM0MzsJTUFfU1RBVEUobWFzLCBidXN5X2FyZWFzLCBhZGRyLCBhZGRyKTsKJiM0MzsJdm9pZCAqYXJlYTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7ZXhlY21lbV9jYWNoZS5tdXRleCk7CiYjNDM7CiYjNDM7CWFyZWEgPSBtYXNfd2FsaygmYW1wO21hcyk7CiYjNDM7CWlmICghYXJlYSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwomIzQzOwomIzQzOwlpZiAoc2l6ZSAmZ3Q7PSBtYXNfcmFuZ2VfbGVuKCZhbXA7bWFzKSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwomIzQzOwomIzQzOwlhZGRyICYjNDM7PSBtYXNfcmFuZ2VfbGVuKCZhbXA7bWFzKSAtIHNpemU7CiYjNDM7CW1hc19zZXRfcmFuZ2UoJmFtcDttYXMsIGFkZHIsIG1hcy5sYXN0KTsKJiM0MzsKJiM0MzsJZXJyID0gbWFzX3N0b3JlX2dmcCgmYW1wO21hcywgKHZvaWQgKilhZGRyLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBFUlJfUFRSKGVycik7CiYjNDM7CiYjNDM7CXJldHVybiAodm9pZCAqKWFkZHI7CiYjNDM7fQomIzQzOwogI2Vsc2UgLyogQ09ORklHX0FSQ0hfSEFTX0VYRUNNRU1fUk9YICovCiAvKgogICogd2hlbiBST1ggY2FjaGUgaXMgbm90IHVzZWQgdGhlIHBlcm1pc3Npb25zIGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlcyBmb3IKQEAgLTQ1OSw2ICYjNDM7NDg3LDExIEBAIHN0YXRpYyBib29sIGV4ZWNtZW1fY2FjaGVfZnJlZSh2b2lkICpwdHIpCiB7CiAJcmV0dXJuIGZhbHNlOwogfQomIzQzOwomIzQzO3N0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKJiM0Mzt9CiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfSEFTX0VYRUNNRU1fUk9YICovCiAKIHZvaWQgKmV4ZWNtZW1fYWxsb2MoZW51bSBleGVjbWVtX3R5cGUgdHlwZSwgc2l6ZV90IHNpemUpCkBAIC01MTEsNiAmIzQzOzU0NCwxOCBAQCBib29sIGV4ZWNtZW1faXNfcm94KGVudW0gZXhlY21lbV90eXBlIHR5cGUpCiAJcmV0dXJuICEhKGV4ZWNtZW1faW5mby0mZ3Q7cmFuZ2VzW3R5cGVdLmZsYWdzICZhbXA7IEVYRUNNRU1fUk9YX0NBQ0hFKTsKIH0KIAomIzQzO3ZvaWQgKmV4ZWNtZW1fc3BsaXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CWlmICghcHRyIHx8ICFzaXplKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXB0ciA9IGV4ZWNtZW1fY2FjaGVfc3BsaXQocHRyLCBzaXplKTsKJiM0MzsJaWYgKCFJU19FUlIocHRyKSkKJiM0MzsJCXJldHVybiBwdHI7CiYjNDM7CVZNX1dBUk5fT04ocHRyICE9IEVSUl9QVFIoLUVOT01FTSkpOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBleGVjbWVtX3ZhbGlkYXRlKHN0cnVjdCBleGVjbWVtX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGV4ZWNtZW1fcmFuZ2UgKnIgPSAmYW1wO2luZm8tJmd0O3Jhbmdlc1tFWEVDTUVNX0RFRkFVTFRdOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc1NAoJCQkJCQkJb3V0cHV0OiAyMzgKCQkJCQkJCXRob3VnaHRzOiAxODEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEtlcm5lbCBNb2R1bGUgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZ2l2ZW4gYSBwYXRjaCBzZXJpZXMgdGhhdCBzaWduaWZpY2FudGx5IGNoYW5nZXMgaG93IGtlcm5lbCBtb2R1bGVzIGFyZSBsb2FkZWQgYW5kIGhvdyBleGVjdXRhYmxlIG1lbW9yeSBpcyBtYW5hZ2VkLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gQVJNNjQuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIG1vZGlmaWNhdGlvbnMgcHJpbWFyaWx5IGFmZmVjdCBpbnRlcm5hbCBrZXJuZWwgb3BlcmF0aW9ucyBhbmQgbWVtb3J5IGFsbG9jYXRpb24gZm9yIGNvZGUgZXhlY3V0aW9uLCB3aGljaCBpbmNsdWRlcyBtb2R1bGUgdGV4dCwgUExUcyAoUHJvY2VkdXJlIExpbmthZ2UgVGFibGVzKSwgYW5kIGZ0cmFjZSB0cmFtcG9saW5lcy4KClRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBleGVjbWVtX3NwbGl0YCwgd2hpY2ggc291bmRzIGxpa2UgaXQgY2FydmVzIG91dCBzcGFjZSBmcm9tIGFuIGV4aXN0aW5nIGFsbG9jYXRpb27igJRzcGVjaWZpY2FsbHksIHB1bGxpbmcgYE1PRF9JTklUX1RFWFRgIGZyb20gYE1PRF9URVhUYC4gSXQmIzM5O3MgYWxzbyBtb2RpZnlpbmcgZmlsZXMgcmVsYXRlZCB0byBQTFQgaGFuZGxpbmcgYW5kIG1vZHVsZSBpbml0aWFsaXphdGlvbiBhbmQgbWVtb3J5LXJlbGF0ZWQgZmlsZXMuIE9uZSBpbW1lZGlhdGUgY29uY2VybiBJIGhhdmUgaXMgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHBvc3NpYmxlIHRvIGxlYWsgdW5pbml0aWFsaXplZCBkYXRhLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaXQgc2VlbXMgdGhlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gZm9yIGNvZGUgZXhlY3V0aW9uLiBUaGUgYGV4ZWNtZW1fc3BsaXRgIGZ1bmN0aW9uIHNvdW5kcyBsaWtlIHRoZSBjcml0aWNhbCBwYXJ0IHRvIGV2YWx1YXRlLCBzbyBsZXQmIzM5O3MgY2hlY2sgYG1vZHVsZV9tZW1vcnlfYWxsb2NgLiBUaGUgY29kZSBpbiB0aGVyZSBpcyBhbGxvY2F0aW5nIG1lbW9yeSwgdGhlbiBpdCAqaW1tZWRpYXRlbHkqIGNhbGxzIGBtZW1zZXQocHRyLCAwLCBzaXplKWAuIFRoYXQgc2VlbXMgcHJldHR5IHNhZmUhIEl0IGxvb2tzIGxpa2UgdGhlcmUgaXMgYSBzcGVjaWFsIGNhc2UgZm9yIGBNT0RfVEVYVGAgYW5kIGBNT0RfSU5JVF9URVhUYCB0aGF0IHVzZXMgYGV4ZWNtZW1fc3BsaXRgLiBJdCBhcHBlYXJzIHRoYXQgYE1PRF9URVhUYCBhbGxvY2F0aW9uIGluY3JlYXNlcyB0aGUgYHNpemVgIGJ5IHRoZSBgTU9EX0lOSVRfVEVYVGAgc2l6ZSwgYW5kIHRoZW4gKnplcm9lcyB0aGUgZW50aXJlIGJsb2NrKi4gVGhlbiwgd2hlbiBhbGxvY2F0aW5nIGBNT0RfSU5JVF9URVhUYCwgaXQgY2FsbHMgYGV4ZWNtZW1fc3BsaXRgIGFuZCBhZ2FpbiBjYWxscyBgbWVtc2V0YC4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyBhcmUgcG9zc2libGUuCgpJIGFsc28gc2VlIHRoYXQgbWVtb3J5IGFsbG9jYXRpb25zIG1hZGUgdmlhIHRoZSBST1ggY2FjaGUgYXJlIHBvcHVsYXRlZCB3aXRoIHRyYXBwaW5nIGluc3RydWN0aW9ucyBvciB6ZXJvZXMuIEFsbCB2ZXJ5IGdvb2QuIEdpdmVuIGFsbCB0aGF0LCB0aGlzIHNlZW1zIHRvIGJlIGVudGlyZWx5IGludGVybmFsLCBhbmQgdGhlcmUmIzM5O3Mgbm8gZGF0YSBiZWluZyBwYXNzZWQgdG8gdXNlcnNwYWNlLiBUaGVyZSYjMzk7cyBubyBjb21wbGV4IHN0cnVjdHVyZSBjb25zdHJ1Y3Rpb24gd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gQW55IGlzc3VlcyBoZXJlIHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhcyBjcmFzaGVzLCBwYWdlIGZhdWx0cywgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIFRoZXNlIGlzc3VlcyBhcmUgYmVzdCBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuCgpJJiMzOTttIGFsc28gbG9va2luZyBhdCB0aGUgUExUIHNlY3Rpb24gY29uc29saWRhdGlvbi4gVGhpcyBzZWVtcyBzYWZlIGJlY2F1c2UgaXQganVzdCBtZXJnZXMgZXZlcnl0aGluZyBpbnRvIHRoZSBjb3JlIHNlY3Rpb24uIFRoZSBjaGFuZ2VzIHRvIGBhcmNoL2FybTY0L21tL2luaXQuY2AgaW5pdGlhbGl6ZSBtZW1vcnkgd2l0aCB0cmFwcGluZyBpbnN0cnVjdGlvbnMsIGFuZCB0aGUgY2hhbmdlcyB0byBgcGFnZWF0dHIuY2AgcmVsYXRlIHRvIGNoYW5naW5nIHBhZ2UgYXR0cmlidXRlcy4gU3RpbGwsIEkgc2VlIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MsIGFuZCB0aGUgbWVtb3J5IGFsbG9jYXRlZCBpcyB6ZXJvZWQuCgpPa2F5LCBhZnRlciBhIHRob3JvdWdoIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIHNlcmllcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbGwgbW9kdWxlIG1lbW9yeSBpcyBpbml0aWFsaXplZCwgYW5kIHRoZXNlIGNoYW5nZXMgZG9uJiMzOTt0IGludm9sdmUgc2VuZGluZyBhbnkgZGF0YSB0byB1c2VyIHNwYWNlLiBJdCBzZWVtcyBsaWtlIGEgJiMzNDtOZWVkc0tNU0FOID0gZmFsc2UmIzM0OyBjYWxsIHRvIG1lLiBUaGVzZSBjaGFuZ2VzIGRvbiYjMzk7dCBuZWVkIGRlZGljYXRlZCBLTVNBTiBhdHRlbnRpb24uIFRoZSBsaWtlbHkgZmFpbHVyZSBtb2RlcyBoZXJlIGFyZSBwYWdlIGZhdWx0cywga2VybmVsIGNyYXNoZXMsIG9yIG1lbW9yeSBjb3JydXB0aW9uIHdoaWNoIGFyZSBhbGwgZWFzaWx5IGNhdWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBleGVjdXRhYmxlIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIChgZXhlY21lbWApIGZvciBrZXJuZWwgbW9kdWxlcywgc3BlY2lmaWNhbGx5IGNvbnNvbGlkYXRpbmcgbW9kdWxlIHRleHQgYW5kIGluaXQgdGV4dCBhbGxvY2F0aW9ucywgbWVyZ2luZyBQTFQgc2VjdGlvbnMgZm9yIEFSTTY0LCBhbmQgYWRqdXN0aW5nIHBhZ2UgYXR0cmlidXRlcyBmb3IgUk9YIChSZWFkLU9ubHkgRXhlY3V0ZSkgY2FjaGVzLiBUaGVzZSBjaGFuZ2VzIGRlYWwgd2l0aCBpbnRlcm5hbCBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQsIHBhZ2UgcGVybWlzc2lvbnMsIGFuZCBtb2R1bGUgbG9hZGluZy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBwYWdlIGZhdWx0cywgb3IgaW52YWxpZCBpbnN0cnVjdGlvbiBleGNlcHRpb25zLiBTdWNoIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIHN0YW5kYXJkIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIGFuZCBrZXJuZWwgYm9vdC9tb2R1bGUgbG9hZGluZyB0ZXN0cy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggc3RhY2svaGVhcCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQWxsIGFsbG9jYXRlZCBtb2R1bGUgbWVtb3J5IGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGUuZy4sIHZpYSBgbWVtc2V0YCBpbiBgbW9kdWxlX21lbW9yeV9hbGxvY2Agb3IgYGV4ZWNtZW1fZmlsbF90cmFwcGluZ19pbnNuc2ApLiBUaHVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgZXhlY3V0YWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyAoYGV4ZWNtZW1gKSBmb3Iga2VybmVsIG1vZHVsZXMsIHNwZWNpZmljYWxseSBjb25zb2xpZGF0aW5nIG1vZHVsZSB0ZXh0IGFuZCBpbml0IHRleHQgYWxsb2NhdGlvbnMsIG1lcmdpbmcgUExUIHNlY3Rpb25zIGZvciBBUk02NCwgYW5kIGFkanVzdGluZyBwYWdlIGF0dHJpYnV0ZXMgZm9yIFJPWCAoUmVhZC1Pbmx5IEV4ZWN1dGUpIGNhY2hlcy4gVGhlc2UgY2hhbmdlcyBkZWFsIHdpdGggaW50ZXJuYWwga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LCBwYWdlIHBlcm1pc3Npb25zLCBhbmQgbW9kdWxlIGxvYWRpbmcuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgcGFnZSBmYXVsdHMsIG9yIGludmFsaWQgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9ucy4gU3VjaCBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBzdGFuZGFyZCBwYWdlIGZhdWx0IGhhbmRsZXJzLCBhbmQga2VybmVsIGJvb3QvbW9kdWxlIGxvYWRpbmcgdGVzdHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb21wbGV4IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFsbCBhbGxvY2F0ZWQgbW9kdWxlIG1lbW9yeSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIChlLmcuLCB2aWEgYG1lbXNldGAgaW4gYG1vZHVsZV9tZW1vcnlfYWxsb2NgIG9yIGBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnNgKS4gVGh1cywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE0OjQ4OjI5LjM1MTEzMzU5OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjQ4MDYwNDM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNT0RVTEVTXCIsXG4gICAgXCJEWU5BTUlDX0ZUUkFDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4ZWNtZW1fc3BsaXRcIixcbiAgICBcIm1vZHVsZV9lbWl0X3BsdF9lbnRyeVwiLFxuICAgIFwibW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwXCIsXG4gICAgXCJtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zXCIsXG4gICAgXCJleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgZXhlY3V0YWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyAoYGV4ZWNtZW1gKSBmb3Iga2VybmVsIG1vZHVsZXMsIHNwZWNpZmljYWxseSBjb25zb2xpZGF0aW5nIG1vZHVsZSB0ZXh0IGFuZCBpbml0IHRleHQgYWxsb2NhdGlvbnMsIG1lcmdpbmcgUExUIHNlY3Rpb25zIGZvciBBUk02NCwgYW5kIGFkanVzdGluZyBwYWdlIGF0dHJpYnV0ZXMgZm9yIFJPWCAoUmVhZC1Pbmx5IEV4ZWN1dGUpIGNhY2hlcy4gVGhlc2UgY2hhbmdlcyBkZWFsIHdpdGggaW50ZXJuYWwga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LCBwYWdlIHBlcm1pc3Npb25zLCBhbmQgbW9kdWxlIGxvYWRpbmcuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgcGFnZSBmYXVsdHMsIG9yIGludmFsaWQgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9ucy4gU3VjaCBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBzdGFuZGFyZCBwYWdlIGZhdWx0IGhhbmRsZXJzLCBhbmQga2VybmVsIGJvb3QvbW9kdWxlIGxvYWRpbmcgdGVzdHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb21wbGV4IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFsbCBhbGxvY2F0ZWQgbW9kdWxlIG1lbW9yeSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIChlLmcuLCB2aWEgYG1lbXNldGAgaW4gYG1vZHVsZV9tZW1vcnlfYWxsb2NgIG9yIGBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnNgKS4gVGh1cywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgQVJDSF9IQVNfRVhFQ01FTV9ST1ggZm9yIGFybTY0LCBtb2RpZnlpbmcgaG93IG1vZHVsZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGJ5IHNwbGl0dGluZyBNT0RfSU5JVF9URVhUIGZyb20gTU9EX1RFWFQgd2hlbiBleGVjbWVtX2lzX3JveCBpcyB0cnVlLiBJdCBhbHNvIHVwZGF0ZXMgZnRyYWNlIHRyYW1wb2xpbmVzIGFuZCBQTFQgZ2VuZXJhdGlvbiBmb3IgbW9kdWxlcyBvbiBhcm02NCB0byBhY2NvbW1vZGF0ZSB0aGVzZSBjaGFuZ2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIChtb2R1bGUgbG9hZGluZywgZXhlY3V0YWJsZSBtZW1vcnkgYWxsb2NhdGlvbiwgZnRyYWNlKSB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo0ODoyOS4zNTExMzkwNDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDkzNjI4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjYzgyYzc3MjA2ZWI5NWFjMWY0ZDQ1YjhmMzVjYmY4ODFjODA2ZTEzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDIyIDE0OjQ4OjI3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xcbmluZGV4IGIzYWZlMDY4ODkxOWIuLjA4MGI5N2IwYmJkNWUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXFxuKysrIGIvYXJjaC9hcm02NC9LY29uZmlnXFxuQEAgLTI3LDYgKzI3LDcgQEAgY29uZmlnIEFSTTY0XFxuIFxcdHNlbGVjdCBBUkNIX0hBU19ETUFfT1BTIGlmIFhFTlxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfRE1BX1BSRVBfQ09IRVJFTlRcXG4gXFx0c2VsZWN0IEFSQ0hfSEFTX0FDUElfVEFCTEVfVVBHUkFERSBpZiBBQ1BJXFxuK1xcdHNlbGVjdCBBUkNIX0hBU19FWEVDTUVNX1JPWFxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfRkFTVF9NVUxUSVBMSUVSXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19GT1JUSUZZX1NPVVJDRVxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaFxcbmluZGV4IGZiOWI4OGVlYmViMTUuLjkzMjhmYWRiNGE5NTkgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmhcXG5AQCAtMTUsMTEgKzE1LDkgQEAgc3RydWN0IG1vZF9wbHRfc2VjIHtcXG4gXFxuIHN0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYyB7XFxuIFxcdHN0cnVjdCBtb2RfcGx0X3NlY1xcdGNvcmU7XFxuLVxcdHN0cnVjdCBtb2RfcGx0X3NlY1xcdGluaXQ7XFxuIFxcbiBcXHQvKiBmb3IgQ09ORklHX0RZTkFNSUNfRlRSQUNFICovXFxuIFxcdHN0cnVjdCBwbHRfZW50cnlcXHQqZnRyYWNlX3RyYW1wb2xpbmVzO1xcbi1cXHRzdHJ1Y3QgcGx0X2VudHJ5XFx0KmluaXRfZnRyYWNlX3RyYW1wb2xpbmVzO1xcbiB9O1xcbiBcXG4gdTY0IG1vZHVsZV9lbWl0X3BsdF9lbnRyeShzdHJ1Y3QgbW9kdWxlICptb2QsIEVsZjY0X1NoZHIgKnNlY2hkcnMsXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmxkcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmhcXG5pbmRleCAwYjNhYWNkMjJjNTkwLi45NTU0MGU5NTZiNDE5IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmxkcy5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmhcXG5AQCAtMSw4ICsxLDUgQEBcXG4gU0VDVElPTlMge1xcbiBcXHQucGx0IDAgOiB7IEJZVEUoMCkgfVxcbi1cXHQuaW5pdC5wbHQgMCA6IHsgQllURSgwKSB9XFxuLVxcdC50ZXh0LmZ0cmFjZV90cmFtcG9saW5lIDAgOiB7IEJZVEUoMCkgfVxcbi1cXHQuaW5pdC50ZXh0LmZ0cmFjZV90cmFtcG9saW5lIDAgOiB7IEJZVEUoMCkgfVxcbiBcXG4gI2lmZGVmIENPTkZJR19LQVNBTl9TV19UQUdTXFxuIFxcdC8qXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvZnRyYWNlLmNcXG5pbmRleCA1YTE1NTRhNDQxNjI4Li5iNTZkYTI0YzFiZTRmIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvZnRyYWNlLmNcXG5AQCAtMjU4LDE3ICsyNTgsMTAgQEAgaW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxcbiBcXHRyZXR1cm4gZnRyYWNlX21vZGlmeV9jb2RlKHBjLCAwLCBuZXcsIGZhbHNlKTtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCBwbHRfZW50cnkgKmdldF9mdHJhY2VfcGx0KHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbitzdGF0aWMgc3RydWN0IHBsdF9lbnRyeSAqZ2V0X2Z0cmFjZV9wbHQoc3RydWN0IG1vZHVsZSAqbW9kKVxcbiB7XFxuICNpZmRlZiBDT05GSUdfTU9EVUxFU1xcbi1cXHRzdHJ1Y3QgcGx0X2VudHJ5ICpwbHQgPSBOVUxMO1xcbi1cXG4tXFx0aWYgKHdpdGhpbl9tb2R1bGVfbWVtX3R5cGUoYWRkciwgbW9kLCBNT0RfSU5JVF9URVhUKSlcXG4tXFx0XFx0cGx0ID0gbW9kLVxcdTAwM2VhcmNoLmluaXRfZnRyYWNlX3RyYW1wb2xpbmVzO1xcbi1cXHRlbHNlIGlmICh3aXRoaW5fbW9kdWxlX21lbV90eXBlKGFkZHIsIG1vZCwgTU9EX1RFWFQpKVxcbi1cXHRcXHRwbHQgPSBtb2QtXFx1MDAzZWFyY2guZnRyYWNlX3RyYW1wb2xpbmVzO1xcbi1cXHRlbHNlXFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbitcXHRzdHJ1Y3QgcGx0X2VudHJ5ICpwbHQgPSBtb2QtXFx1MDAzZWFyY2guZnRyYWNlX3RyYW1wb2xpbmVzO1xcbiBcXG4gXFx0cmV0dXJuIFxcdTAwMjZwbHRbRlRSQUNFX1BMVF9JRFhdO1xcbiAjZWxzZVxcbkBAIC0zMzksNyArMzMyLDcgQEAgc3RhdGljIGJvb2wgZnRyYWNlX2ZpbmRfY2FsbGFibGVfYWRkcihzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLFxcbiBcXHRpZiAoV0FSTl9PTighbW9kKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0cGx0ID0gZ2V0X2Z0cmFjZV9wbHQobW9kLCBwYyk7XFxuK1xcdHBsdCA9IGdldF9mdHJhY2VfcGx0KG1vZCk7XFxuIFxcdGlmICghcGx0KSB7XFxuIFxcdFxcdHByX2VycihcXFwiZnRyYWNlOiBubyBtb2R1bGUgUExUIGZvciAlcHNcXFxcblxcXCIsICh2b2lkICopKmFkZHIpO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jXFxuaW5kZXggN2FmZDM3MGRhOWY0OC4uNjkwMGQyMjQyZjFiZSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuY1xcbkBAIC03MCw4ICs3MCw3IEBAIHU2NCBtb2R1bGVfZW1pdF9wbHRfZW50cnkoc3RydWN0IG1vZHVsZSAqbW9kLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxcbiBcXHRcXHRcXHQgIHZvaWQgKmxvYywgY29uc3QgRWxmNjRfUmVsYSAqcmVsYSxcXG4gXFx0XFx0XFx0ICBFbGY2NF9TeW0gKnN5bSlcXG4ge1xcbi1cXHRzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9ICF3aXRoaW5fbW9kdWxlX2luaXQoKHVuc2lnbmVkIGxvbmcpbG9jLCBtb2QpID9cXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNm1vZC1cXHUwMDNlYXJjaC5jb3JlIDogXFx1MDAyNm1vZC1cXHUwMDNlYXJjaC5pbml0O1xcbitcXHRzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9IFxcdTAwMjZtb2QtXFx1MDAzZWFyY2guY29yZTtcXG4gXFx0c3RydWN0IHBsdF9lbnRyeSAqcGx0ID0gKHN0cnVjdCBwbHRfZW50cnkgKilzZWNoZHJzW3BsdHNlYy1cXHUwMDNlcGx0X3NobmR4XS5zaF9hZGRyO1xcbiBcXHRpbnQgaSA9IHBsdHNlYy1cXHUwMDNlcGx0X251bV9lbnRyaWVzO1xcbiBcXHRpbnQgaiA9IGkgLSAxO1xcbkBAIC0xMDEsOCArMTAwLDcgQEAgdTY0IG1vZHVsZV9lbWl0X3BsdF9lbnRyeShzdHJ1Y3QgbW9kdWxlICptb2QsIEVsZjY0X1NoZHIgKnNlY2hkcnMsXFxuIHU2NCBtb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnAoc3RydWN0IG1vZHVsZSAqbW9kLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxcbiBcXHRcXHRcXHRcXHR2b2lkICpsb2MsIHU2NCB2YWwpXFxuIHtcXG4tXFx0c3RydWN0IG1vZF9wbHRfc2VjICpwbHRzZWMgPSAhd2l0aGluX21vZHVsZV9pbml0KCh1bnNpZ25lZCBsb25nKWxvYywgbW9kKSA/XFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZtb2QtXFx1MDAzZWFyY2guY29yZSA6IFxcdTAwMjZtb2QtXFx1MDAzZWFyY2guaW5pdDtcXG4rXFx0c3RydWN0IG1vZF9wbHRfc2VjICpwbHRzZWMgPSBcXHUwMDI2bW9kLVxcdTAwM2VhcmNoLmNvcmU7XFxuIFxcdHN0cnVjdCBwbHRfZW50cnkgKnBsdCA9IChzdHJ1Y3QgcGx0X2VudHJ5ICopc2VjaGRyc1twbHRzZWMtXFx1MDAzZXBsdF9zaG5keF0uc2hfYWRkcjtcXG4gXFx0aW50IGkgPSBwbHRzZWMtXFx1MDAzZXBsdF9udW1fZW50cmllcysrO1xcbiBcXHR1MzIgYnI7XFxuQEAgLTE2OSwxNyArMTY3LDE3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgY291bnRfcGx0cyhFbGY2NF9TeW0gKnN5bXMsIEVsZjY0X1JlbGEgKnJlbGEsIGludCBudW0sXFxuIFxcdFxcdGNhc2UgUl9BQVJDSDY0X0NBTEwyNjpcXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogV2Ugb25seSBoYXZlIHRvIGNvbnNpZGVyIGJyYW5jaCB0YXJnZXRzIHRoYXQgcmVzb2x2ZVxcbi1cXHRcXHRcXHQgKiB0byBzeW1ib2xzIHRoYXQgYXJlIGRlZmluZWQgaW4gYSBkaWZmZXJlbnQgc2VjdGlvbi5cXG4rXFx0XFx0XFx0ICogdG8gc3ltYm9scyB0aGF0IGFyZSBub3QgZGVmaW5lZCBpbiB0aGUgc2FtZSBtb2R1bGUuXFxuIFxcdFxcdFxcdCAqIFRoaXMgaXMgbm90IHNpbXBseSBhIGhldXJpc3RpYywgaXQgaXMgYSBmdW5kYW1lbnRhbFxcbiBcXHRcXHRcXHQgKiBsaW1pdGF0aW9uLCBzaW5jZSB0aGVyZSBpcyBubyBndWFyYW50ZWVkIHdheSB0byBlbWl0XFxuIFxcdFxcdFxcdCAqIFBMVCBlbnRyaWVzIHN1ZmZpY2llbnRseSBjbG9zZSB0byB0aGUgYnJhbmNoIGlmIHRoZVxcbiBcXHRcXHRcXHQgKiBzZWN0aW9uIHNpemUgZXhjZWVkcyB0aGUgcmFuZ2Ugb2YgYSBicmFuY2hcXG4gXFx0XFx0XFx0ICogaW5zdHJ1Y3Rpb24uIFNvIGlnbm9yZSByZWxvY2F0aW9ucyBhZ2FpbnN0IGRlZmluZWRcXG4tXFx0XFx0XFx0ICogc3ltYm9scyBpZiB0aGV5IGxpdmUgaW4gdGhlIHNhbWUgc2VjdGlvbiBhcyB0aGVcXG4rXFx0XFx0XFx0ICogc3ltYm9scyBpZiB0aGV5IGxpdmUgaW4gdGhlIHNhbWUgbW9kdWxlIGFzIHRoZVxcbiBcXHRcXHRcXHQgKiByZWxvY2F0aW9uIHRhcmdldC5cXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdHMgPSBzeW1zICsgRUxGNjRfUl9TWU0ocmVsYVtpXS5yX2luZm8pO1xcbi1cXHRcXHRcXHRpZiAocy1cXHUwMDNlc3Rfc2huZHggPT0gZHN0aWR4KVxcbitcXHRcXHRcXHRpZiAocy1cXHUwMDNlc3Rfc2huZHggIT0gU0hOX1VOREVGKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdFxcdC8qXFxuQEAgLTI3NywxMyArMjc1LDE0IEBAIHN0YXRpYyBpbnQgcGFydGl0aW9uX2JyYW5jaF9wbHRfcmVsYXMoRWxmNjRfU3ltICpzeW1zLCBFbGY2NF9SZWxhICpyZWxhLFxcbiBcXHRyZXR1cm4gaTtcXG4gfVxcbiBcXG4rc3RhdGljIGNvbnN0IGludCBmdHJhY2VfcGx0cyA9IElTX0VOQUJMRUQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKSA/IE5SX0ZUUkFDRV9QTFRTIDogMDtcXG4rXFxuIGludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICplaGRyLCBFbGZfU2hkciAqc2VjaGRycyxcXG4gXFx0XFx0XFx0ICAgICAgY2hhciAqc2Vjc3RyaW5ncywgc3RydWN0IG1vZHVsZSAqbW9kKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgY29yZV9wbHRzID0gMDtcXG4tXFx0dW5zaWduZWQgbG9uZyBpbml0X3BsdHMgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIGNvcmVfcGx0cyA9IGZ0cmFjZV9wbHRzO1xcbiBcXHRFbGY2NF9TeW0gKnN5bXMgPSBOVUxMO1xcbi1cXHRFbGZfU2hkciAqcGx0c2VjLCAqdHJhbXAgPSBOVUxMLCAqaW5pdF90cmFtcCA9IE5VTEw7XFxuK1xcdEVsZl9TaGRyICpwbHRzZWM7XFxuIFxcdGludCBpO1xcbiBcXG4gXFx0LypcXG5AQCAtMjkzLDIwICsyOTIsMTIgQEAgaW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZWhkci1cXHUwMDNlZV9zaG51bTsgaSsrKSB7XFxuIFxcdFxcdGlmICghc3RyY21wKHNlY3N0cmluZ3MgKyBzZWNoZHJzW2ldLnNoX25hbWUsIFxcXCIucGx0XFxcIikpXFxuIFxcdFxcdFxcdG1vZC1cXHUwMDNlYXJjaC5jb3JlLnBsdF9zaG5keCA9IGk7XFxuLVxcdFxcdGVsc2UgaWYgKCFzdHJjbXAoc2Vjc3RyaW5ncyArIHNlY2hkcnNbaV0uc2hfbmFtZSwgXFxcIi5pbml0LnBsdFxcXCIpKVxcbi1cXHRcXHRcXHRtb2QtXFx1MDAzZWFyY2guaW5pdC5wbHRfc2huZHggPSBpO1xcbi1cXHRcXHRlbHNlIGlmICghc3RyY21wKHNlY3N0cmluZ3MgKyBzZWNoZHJzW2ldLnNoX25hbWUsXFxuLVxcdFxcdFxcdFxcdCBcXFwiLnRleHQuZnRyYWNlX3RyYW1wb2xpbmVcXFwiKSlcXG4tXFx0XFx0XFx0dHJhbXAgPSBzZWNoZHJzICsgaTtcXG4tXFx0XFx0ZWxzZSBpZiAoIXN0cmNtcChzZWNzdHJpbmdzICsgc2VjaGRyc1tpXS5zaF9uYW1lLFxcbi1cXHRcXHRcXHRcXHQgXFxcIi5pbml0LnRleHQuZnRyYWNlX3RyYW1wb2xpbmVcXFwiKSlcXG4tXFx0XFx0XFx0aW5pdF90cmFtcCA9IHNlY2hkcnMgKyBpO1xcbiBcXHRcXHRlbHNlIGlmIChzZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX1NZTVRBQilcXG4gXFx0XFx0XFx0c3ltcyA9IChFbGY2NF9TeW0gKilzZWNoZHJzW2ldLnNoX2FkZHI7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICghbW9kLVxcdTAwM2VhcmNoLmNvcmUucGx0X3NobmR4IHx8ICFtb2QtXFx1MDAzZWFyY2guaW5pdC5wbHRfc2huZHgpIHtcXG4tXFx0XFx0cHJfZXJyKFxcXCIlczogbW9kdWxlIFBMVCBzZWN0aW9uKHMpIG1pc3NpbmdcXFxcblxcXCIsIG1vZC1cXHUwMDNlbmFtZSk7XFxuK1xcdGlmICghbW9kLVxcdTAwM2VhcmNoLmNvcmUucGx0X3NobmR4KSB7XFxuK1xcdFxcdHByX2VycihcXFwiJXM6IG1vZHVsZSBQTFQgc2VjdGlvbiBtaXNzaW5nXFxcXG5cXFwiLCBtb2QtXFx1MDAzZW5hbWUpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT0VYRUM7XFxuIFxcdH1cXG4gXFx0aWYgKCFzeW1zKSB7XFxuQEAgLTMzNSwxMiArMzI2LDggQEAgaW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxcbiBcXHRcXHRpZiAobmVudHMpXFxuIFxcdFxcdFxcdHNvcnQocmVscywgbmVudHMsIHNpemVvZihFbGY2NF9SZWxhKSwgY21wX3JlbGEsIE5VTEwpO1xcbiBcXG4tXFx0XFx0aWYgKCFtb2R1bGVfaW5pdF9sYXlvdXRfc2VjdGlvbihzZWNzdHJpbmdzICsgZHN0c2VjLVxcdTAwM2VzaF9uYW1lKSlcXG4tXFx0XFx0XFx0Y29yZV9wbHRzICs9IGNvdW50X3BsdHMoc3ltcywgcmVscywgbnVtcmVscyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0c2VjaGRyc1tpXS5zaF9pbmZvLCBkc3RzZWMpO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdGluaXRfcGx0cyArPSBjb3VudF9wbHRzKHN5bXMsIHJlbHMsIG51bXJlbHMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHNlY2hkcnNbaV0uc2hfaW5mbywgZHN0c2VjKTtcXG4rXFx0XFx0Y29yZV9wbHRzICs9IGNvdW50X3BsdHMoc3ltcywgcmVscywgbnVtcmVscywgc2VjaGRyc1tpXS5zaF9pbmZvLFxcbitcXHRcXHRcXHRcXHRcXHRkc3RzZWMpO1xcbiBcXHR9XFxuIFxcbiBcXHRwbHRzZWMgPSBzZWNoZHJzICsgbW9kLVxcdTAwM2VhcmNoLmNvcmUucGx0X3NobmR4O1xcbkBAIC0zNDgsMzAgKzMzNSw4IEBAIGludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICplaGRyLCBFbGZfU2hkciAqc2VjaGRycyxcXG4gXFx0cGx0c2VjLVxcdTAwM2VzaF9mbGFncyA9IFNIRl9FWEVDSU5TVFIgfCBTSEZfQUxMT0M7XFxuIFxcdHBsdHNlYy1cXHUwMDNlc2hfYWRkcmFsaWduID0gTDFfQ0FDSEVfQllURVM7XFxuIFxcdHBsdHNlYy1cXHUwMDNlc2hfc2l6ZSA9IChjb3JlX3BsdHMgICsgMSkgKiBzaXplb2Yoc3RydWN0IHBsdF9lbnRyeSk7XFxuLVxcdG1vZC1cXHUwMDNlYXJjaC5jb3JlLnBsdF9udW1fZW50cmllcyA9IDA7XFxuK1xcdG1vZC1cXHUwMDNlYXJjaC5jb3JlLnBsdF9udW1fZW50cmllcyA9IGZ0cmFjZV9wbHRzO1xcbiBcXHRtb2QtXFx1MDAzZWFyY2guY29yZS5wbHRfbWF4X2VudHJpZXMgPSBjb3JlX3BsdHM7XFxuIFxcbi1cXHRwbHRzZWMgPSBzZWNoZHJzICsgbW9kLVxcdTAwM2VhcmNoLmluaXQucGx0X3NobmR4O1xcbi1cXHRwbHRzZWMtXFx1MDAzZXNoX3R5cGUgPSBTSFRfTk9CSVRTO1xcbi1cXHRwbHRzZWMtXFx1MDAzZXNoX2ZsYWdzID0gU0hGX0VYRUNJTlNUUiB8IFNIRl9BTExPQztcXG4tXFx0cGx0c2VjLVxcdTAwM2VzaF9hZGRyYWxpZ24gPSBMMV9DQUNIRV9CWVRFUztcXG4tXFx0cGx0c2VjLVxcdTAwM2VzaF9zaXplID0gKGluaXRfcGx0cyArIDEpICogc2l6ZW9mKHN0cnVjdCBwbHRfZW50cnkpO1xcbi1cXHRtb2QtXFx1MDAzZWFyY2guaW5pdC5wbHRfbnVtX2VudHJpZXMgPSAwO1xcbi1cXHRtb2QtXFx1MDAzZWFyY2guaW5pdC5wbHRfbWF4X2VudHJpZXMgPSBpbml0X3BsdHM7XFxuLVxcbi1cXHRpZiAodHJhbXApIHtcXG4tXFx0XFx0dHJhbXAtXFx1MDAzZXNoX3R5cGUgPSBTSFRfTk9CSVRTO1xcbi1cXHRcXHR0cmFtcC1cXHUwMDNlc2hfZmxhZ3MgPSBTSEZfRVhFQ0lOU1RSIHwgU0hGX0FMTE9DO1xcbi1cXHRcXHR0cmFtcC1cXHUwMDNlc2hfYWRkcmFsaWduID0gX19hbGlnbm9mX18oc3RydWN0IHBsdF9lbnRyeSk7XFxuLVxcdFxcdHRyYW1wLVxcdTAwM2VzaF9zaXplID0gTlJfRlRSQUNFX1BMVFMgKiBzaXplb2Yoc3RydWN0IHBsdF9lbnRyeSk7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChpbml0X3RyYW1wKSB7XFxuLVxcdFxcdGluaXRfdHJhbXAtXFx1MDAzZXNoX3R5cGUgPSBTSFRfTk9CSVRTO1xcbi1cXHRcXHRpbml0X3RyYW1wLVxcdTAwM2VzaF9mbGFncyA9IFNIRl9FWEVDSU5TVFIgfCBTSEZfQUxMT0M7XFxuLVxcdFxcdGluaXRfdHJhbXAtXFx1MDAzZXNoX2FkZHJhbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCBwbHRfZW50cnkpO1xcbi1cXHRcXHRpbml0X3RyYW1wLVxcdTAwM2VzaF9zaXplID0gTlJfRlRSQUNFX1BMVFMgKiBzaXplb2Yoc3RydWN0IHBsdF9lbnRyeSk7XFxuLVxcdH1cXG4tXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmNcXG5pbmRleCAyNGFkYjU4MWFmMGViLi42MjBjMmI3MDExNWU1IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmNcXG5AQCAtNDU0LDI5ICs0NTQsMTEgQEAgc3RhdGljIGludCBtb2R1bGVfaW5pdF9mdHJhY2VfcGx0KGNvbnN0IEVsZl9FaGRyICpoZHIsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IG1vZHVsZSAqbW9kKVxcbiB7XFxuICNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRSlcXG4tXFx0Y29uc3QgRWxmX1NoZHIgKnM7XFxuLVxcdHN0cnVjdCBwbHRfZW50cnkgKnBsdHM7XFxuLVxcbi1cXHRzID0gZmluZF9zZWN0aW9uKGhkciwgc2VjaGRycywgXFxcIi50ZXh0LmZ0cmFjZV90cmFtcG9saW5lXFxcIik7XFxuLVxcdGlmICghcylcXG4tXFx0XFx0cmV0dXJuIC1FTk9FWEVDO1xcbi1cXG4tXFx0cGx0cyA9ICh2b2lkICopcy1cXHUwMDNlc2hfYWRkcjtcXG4rXFx0c3RydWN0IHBsdF9lbnRyeSAqcGx0cyA9ICh2b2lkICopc2VjaGRyc1ttb2QtXFx1MDAzZWFyY2guY29yZS5wbHRfc2huZHhdLnNoX2FkZHI7XFxuIFxcbiBcXHRfX2luaXRfcGx0KFxcdTAwMjZwbHRzW0ZUUkFDRV9QTFRfSURYXSwgRlRSQUNFX0FERFIpO1xcbiBcXG4gXFx0bW9kLVxcdTAwM2VhcmNoLmZ0cmFjZV90cmFtcG9saW5lcyA9IHBsdHM7XFxuLVxcbi1cXHRzID0gZmluZF9zZWN0aW9uKGhkciwgc2VjaGRycywgXFxcIi5pbml0LnRleHQuZnRyYWNlX3RyYW1wb2xpbmVcXFwiKTtcXG4tXFx0aWYgKCFzKVxcbi1cXHRcXHRyZXR1cm4gLUVOT0VYRUM7XFxuLVxcbi1cXHRwbHRzID0gKHZvaWQgKilzLVxcdTAwM2VzaF9hZGRyO1xcbi1cXG4tXFx0X19pbml0X3BsdChcXHUwMDI2cGx0c1tGVFJBQ0VfUExUX0lEWF0sIEZUUkFDRV9BRERSKTtcXG4tXFxuLVxcdG1vZC1cXHUwMDNlYXJjaC5pbml0X2Z0cmFjZV90cmFtcG9saW5lcyA9IHBsdHM7XFxuLVxcbiAjZW5kaWZcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9pbml0LmMgYi9hcmNoL2FybTY0L21tL2luaXQuY1xcbmluZGV4IDk3OTg3Zjg1MGEzM2MuLmU2Yzk4MDQ1MDQ2ZTIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9tbS9pbml0LmNcXG4rKysgYi9hcmNoL2FybTY0L21tL2luaXQuY1xcbkBAIC01MzEsNyArNTMxLDggQEAgc3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbiBcXHRcXHRcXHRbRVhFQ01FTV9ERUZBVUxUXSA9IHtcXG4gXFx0XFx0XFx0XFx0LnN0YXJ0XFx0PSBzdGFydCxcXG4gXFx0XFx0XFx0XFx0LmVuZFxcdD0gZW5kLFxcbi1cXHRcXHRcXHRcXHQucGdwcm90XFx0PSBQQUdFX0tFUk5FTCxcXG4rXFx0XFx0XFx0XFx0LnBncHJvdFxcdD0gUEFHRV9LRVJORUxfUk9YLFxcbitcXHRcXHRcXHRcXHQuZmxhZ3NcXHQ9IEVYRUNNRU1fUk9YX0NBQ0hFLFxcbiBcXHRcXHRcXHRcXHQuYWxpZ25tZW50ID0gMSxcXG4gXFx0XFx0XFx0XFx0LmZhbGxiYWNrX3N0YXJ0XFx0PSBmYWxsYmFja19zdGFydCxcXG4gXFx0XFx0XFx0XFx0LmZhbGxiYWNrX2VuZFxcdD0gZmFsbGJhY2tfZW5kLFxcbkBAIC01NDgsOSArNTQ5LDI1IEBAIHN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcXG4gXFx0XFx0XFx0XFx0LnBncHJvdFxcdD0gUEFHRV9LRVJORUwsXFxuIFxcdFxcdFxcdFxcdC5hbGlnbm1lbnQgPSAxLFxcbiBcXHRcXHRcXHR9LFxcbitcXHRcXHRcXHRbRVhFQ01FTV9NT0RVTEVfREFUQV0gPSB7XFxuK1xcdFxcdFxcdFxcdC5zdGFydFxcdD0gc3RhcnQsXFxuK1xcdFxcdFxcdFxcdC5lbmRcXHQ9IGVuZCxcXG4rXFx0XFx0XFx0XFx0LnBncHJvdFxcdD0gUEFHRV9LRVJORUwsXFxuK1xcdFxcdFxcdFxcdC5hbGlnbm1lbnQgPSAxLFxcbitcXHRcXHRcXHRcXHQuZmFsbGJhY2tfc3RhcnRcXHQ9IGZhbGxiYWNrX3N0YXJ0LFxcbitcXHRcXHRcXHRcXHQuZmFsbGJhY2tfZW5kXFx0PSBmYWxsYmFja19lbmQsXFxuK1xcdFxcdFxcdH0sXFxuIFxcdFxcdH0sXFxuIFxcdH07XFxuIFxcbitcXHRpZiAoIXN5c3RlbV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KCkpXFxuK1xcdFxcdGV4ZWNtZW1faW5mby5yYW5nZXNbRVhFQ01FTV9ERUZBVUxUXS5mbGFncyB8PSBFWEVDTUVNX05PX0hVR0VfVk1BUDtcXG4rXFxuIFxcdHJldHVybiBcXHUwMDI2ZXhlY21lbV9pbmZvO1xcbiB9XFxuK1xcbit2b2lkIGV4ZWNtZW1fZmlsbF90cmFwcGluZ19pbnNucyh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxcbit7XFxuK1xcdG1lbXNldDMyKHB0ciwgQUFSQ0g2NF9CUkVBS19GQVVMVCwgc2l6ZSAvIHNpemVvZihfX2xlMzIpKTtcXG4rfVxcbiAjZW5kaWYgLyogQ09ORklHX0VYRUNNRU0gKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jIGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXFxuaW5kZXggYmJlOThhYzlhZDhjNi4uMjBmZjljYjI3M2MxMSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmNcXG4rKysgYi9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmNcXG5AQCAtMTY5LDggKzE2OSw2IEBAIHN0YXRpYyBpbnQgY2hhbmdlX21lbW9yeV9jb21tb24odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsXFxuIFxcdCAqIHdlIGFyZSBvcGVyYXRpbmcgb24gZG9lcyBub3QgcmVzdWx0IGluIHN1Y2ggc3BsaXR0aW5nLlxcbiBcXHQgKlxcbiBcXHQgKiBMZXQncyByZXN0cmljdCBvdXJzZWx2ZXMgdG8gbWFwcGluZ3MgY3JlYXRlZCBieSB2bWFsbG9jIChvciB2bWFwKS5cXG4tXFx0ICogRGlzYWxsb3cgVk1fQUxMT1dfSFVHRV9WTUFQIG1hcHBpbmdzIHRvIGd1YXJhbnRlZSB0aGF0IG9ubHkgcGFnZVxcbi1cXHQgKiBtYXBwaW5ncyBhcmUgdXBkYXRlZCBhbmQgc3BsaXR0aW5nIGlzIG5ldmVyIG5lZWRlZC5cXG4gXFx0ICpcXG4gXFx0ICogU28gY2hlY2sgd2hldGhlciB0aGUgW2FkZHIsIGFkZHIgKyBzaXplKSBpbnRlcnZhbCBpcyBlbnRpcmVseVxcbiBcXHQgKiBjb3ZlcmVkIGJ5IHByZWNpc2VseSBvbmUgVk0gYXJlYSB0aGF0IGhhcyB0aGUgVk1fQUxMT0MgZmxhZyBzZXQuXFxuQEAgLTE3OSw3ICsxNzcsMTYgQEAgc3RhdGljIGludCBjaGFuZ2VfbWVtb3J5X2NvbW1vbih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyxcXG4gXFx0aWYgKCFhcmVhIHx8XFxuIFxcdCAgICAoKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKCh2b2lkICopZW5kKSBcXHUwMDNlXFxuIFxcdCAgICAgKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKGFyZWEtXFx1MDAzZWFkZHIpICsgYXJlYS1cXHUwMDNlc2l6ZSkgfHxcXG4tXFx0ICAgICgoYXJlYS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoVk1fQUxMT0MgfCBWTV9BTExPV19IVUdFX1ZNQVApKSAhPSBWTV9BTExPQykpXFxuK1xcdCAgICAhKGFyZWEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgVk1fQUxMT0MpKVxcbisgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIERpc2FsbG93IFZNX0FMTE9XX0hVR0VfVk1BUCBtYXBwaW5ncyB1bmxlc3MgdGhlIHJlZ2lvbiBpcyBQTURcXG4rXFx0ICogYWxpZ25lZCwgb3Igc3BsaXR0aW5nIGxpdmUgaHVnZSBtYXBwaW5ncyBpcyBzdXBwb3J0ZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoKGFyZWEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgVk1fQUxMT1dfSFVHRV9WTUFQKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAoKHN0YXJ0ICUgUE1EX1NJWkUpIHx8IChzaXplICUgUE1EX1NJWkUpKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICBXQVJOX09OX09OQ0UoIXN5c3RlbV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KCkpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGlmICghbnVtcGFnZXMpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXhlY21lbS5oIGIvaW5jbHVkZS9saW51eC9leGVjbWVtLmhcXG5pbmRleCA3ZGUyMjkxMzRlMzA3Li5iMDQ5MjZmM2ZmZjI2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZXhlY21lbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9leGVjbWVtLmhcXG5AQCAtNDgsMTAgKzQ4LDEyIEBAIGVudW0gZXhlY21lbV90eXBlIHtcXG4gICogZW51bSBleGVjbWVtX3JhbmdlX2ZsYWdzIC0gb3B0aW9ucyBmb3IgZXhlY3V0YWJsZSBtZW1vcnkgYWxsb2NhdGlvbnNcXG4gICogQEVYRUNNRU1fS0FTQU5fU0hBRE9XOlxcdGFsbG9jYXRlIGthc2FuIHNoYWRvd1xcbiAgKiBARVhFQ01FTV9ST1hfQ0FDSEU6XFx0XFx0YWxsb2NhdGlvbnMgc2hvdWxkIHVzZSBST1ggY2FjaGUgb2YgaHVnZSBwYWdlc1xcbisgKiBARVhFQ01FTV9OT19IVUdFX1ZNQVA6XFx0Y2FjaGUgYWxsb2NhdGlvbnMgbXVzdCBhdm9pZCBodWdlIHZtYXBwaW5nc1xcbiAgKi9cXG4gZW51bSBleGVjbWVtX3JhbmdlX2ZsYWdzIHtcXG4gXFx0RVhFQ01FTV9LQVNBTl9TSEFET1dcXHQ9ICgxIFxcdTAwM2NcXHUwMDNjIDApLFxcbiBcXHRFWEVDTUVNX1JPWF9DQUNIRVxcdD0gKDEgXFx1MDAzY1xcdTAwM2MgMSksXFxuK1xcdEVYRUNNRU1fTk9fSFVHRV9WTUFQXFx0PSAoMSBcXHUwMDNjXFx1MDAzYyAyKSxcXG4gfTtcXG4gXFxuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfRVhFQ01FTV9ST1hcXG5AQCAtMTc4LDYgKzE4MCwxNSBAQCB2b2lkIGV4ZWNtZW1fZnJlZSh2b2lkICpwdHIpO1xcbiBcXG4gREVGSU5FX0ZSRUUoZXhlY21lbSwgdm9pZCAqLCBpZiAoX1QpIGV4ZWNtZW1fZnJlZShfVCkpO1xcbiBcXG4rLyoqXFxuKyAqIGV4ZWNtZW1fc3BsaXQgLSBhbGxvY2F0ZSBzcGFjZSBmcm9tIGFuIGV4aXN0aW5nIGV4ZWNtZW0gY2FjaGUgYWxsb2NhdGlvblxcbisgKiBAcHRyICAtIHRoZSBleGlzdGluZyBleGVjbWVtIGNhY2hlIGFsbG9jYXRpb25cXG4rICogQHNpemUgLSB0aGUgc2l6ZSB0byBjYXJ2ZSBvdXQgZnJvbSB0aGUgZXhpc3RpbmcgYWxsb2NhdGlvblxcbisgKlxcbisgKiBSZXR1cm46IHRoZSBhZGRyZXNzIG9mIHRoZSBjYXJ2ZWQgb3V0IGFsbG9jYXRpb24sIG9yICVOVUxMIG9uIGZhaWx1cmUuXFxuKyAqL1xcbit2b2lkICpleGVjbWVtX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpO1xcbitcXG4gI2lmZGVmIENPTkZJR19NTVVcXG4gLyoqXFxuICAqIGV4ZWNtZW1fdm1hcCAtIGNyZWF0ZSB2aXJ0dWFsIG1hcHBpbmcgZm9yIEVYRUNNRU1fTU9EVUxFX0RBVEEgbWVtb3J5XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oXFxuaW5kZXggNzU2NjgxNWZhYmJlOC4uMDMzNmE0NjczM2RkOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaFxcbkBAIC0zMTYsMTAgKzMxNiwxMCBAQCBzdHJ1Y3QgbW9kX3RyZWVfbm9kZSB7XFxuIH07XFxuIFxcbiBlbnVtIG1vZF9tZW1fdHlwZSB7XFxuLVxcdE1PRF9URVhUID0gMCxcXG4tXFx0TU9EX0RBVEEsXFxuK1xcdE1PRF9EQVRBID0gMCxcXG4gXFx0TU9EX1JPREFUQSxcXG4gXFx0TU9EX1JPX0FGVEVSX0lOSVQsXFxuK1xcdE1PRF9URVhULFxcbiBcXHRNT0RfSU5JVF9URVhULFxcbiBcXHRNT0RfSU5JVF9EQVRBLFxcbiBcXHRNT0RfSU5JVF9ST0RBVEEsXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jIGIva2VybmVsL21vZHVsZS9tYWluLmNcXG5pbmRleCA0NmRkOGQyNWE2MDU4Li4yZDYyMTM0OTYzNTk3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jXFxuKysrIGIva2VybmVsL21vZHVsZS9tYWluLmNcXG5AQCAtMTM0Miw3ICsxMzQyLDcgQEAgc3RhdGljIGludCBtb2R1bGVfbWVtb3J5X2FsbG9jKHN0cnVjdCBtb2R1bGUgKm1vZCwgZW51bSBtb2RfbWVtX3R5cGUgdHlwZSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgc2l6ZSA9IFBBR0VfQUxJR04obW9kLVxcdTAwM2VtZW1bdHlwZV0uc2l6ZSk7XFxuIFxcdGVudW0gZXhlY21lbV90eXBlIGV4ZWNtZW1fdHlwZTtcXG4tXFx0dm9pZCAqcHRyO1xcbitcXHR2b2lkICpwdHIgPSBOVUxMO1xcbiBcXG4gXFx0bW9kLVxcdTAwM2VtZW1bdHlwZV0uc2l6ZSA9IHNpemU7XFxuIFxcbkBAIC0xMzUxLDExICsxMzUxLDI1IEBAIHN0YXRpYyBpbnQgbW9kdWxlX21lbW9yeV9hbGxvYyhzdHJ1Y3QgbW9kdWxlICptb2QsIGVudW0gbW9kX21lbV90eXBlIHR5cGUpXFxuIFxcdGVsc2VcXG4gXFx0XFx0ZXhlY21lbV90eXBlID0gRVhFQ01FTV9NT0RVTEVfVEVYVDtcXG4gXFxuLVxcdHB0ciA9IGV4ZWNtZW1fYWxsb2NfcncoZXhlY21lbV90eXBlLCBzaXplKTtcXG4rXFx0Ym9vbCBpc19yb3ggPSBleGVjbWVtX2lzX3JveChleGVjbWVtX3R5cGUpO1xcbitcXHRpZiAoaXNfcm94KSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFNwZWNpYWwgY2FzZSBmb3IgTU9EX1RFWFQgLyBNT0RfSU5JVF9URVhUOiBhbGxvY2F0ZSB0aGVcXG4rXFx0XFx0ICogbGF0dGVyIGJ5IHNwbGl0dGluZyBvZmYgcmVxdWlyZWQgc3BhY2UgZnJvbSB0aGUgZm9ybWVyXFxuK1xcdFxcdCAqIHNvIHRoYXQgdGhleSBhcmUgYWx3YXlzIHBsYWNlZCBjbG9zZSB0b2dldGhlci5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICh0eXBlID09IE1PRF9URVhUKVxcbitcXHRcXHRcXHRzaXplICs9IFBBR0VfQUxJR04obW9kLVxcdTAwM2VtZW1bTU9EX0lOSVRfVEVYVF0uc2l6ZSk7XFxuK1xcdFxcdGVsc2UgaWYgKHR5cGUgPT0gTU9EX0lOSVRfVEVYVClcXG4rXFx0XFx0XFx0cHRyID0gZXhlY21lbV9zcGxpdChtb2QtXFx1MDAzZW1lbVtNT0RfVEVYVF0uYmFzZSwgc2l6ZSk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghcHRyKVxcbitcXHRcXHRwdHIgPSBleGVjbWVtX2FsbG9jX3J3KGV4ZWNtZW1fdHlwZSwgc2l6ZSk7XFxuIFxcdGlmICghcHRyKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdG1vZC1cXHUwMDNlbWVtW3R5cGVdLmlzX3JveCA9IGV4ZWNtZW1faXNfcm94KGV4ZWNtZW1fdHlwZSk7XFxuK1xcdG1vZC1cXHUwMDNlbWVtW3R5cGVdLmlzX3JveCA9IGlzX3JveDtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBwb2ludGVyIHRvIHRoZXNlIGJsb2NrcyBvZiBtZW1vcnkgYXJlIHN0b3JlZCBvbiB0aGUgbW9kdWxlXFxuQEAgLTEzNjgsNyArMTM4Miw3IEBAIHN0YXRpYyBpbnQgbW9kdWxlX21lbW9yeV9hbGxvYyhzdHJ1Y3QgbW9kdWxlICptb2QsIGVudW0gbW9kX21lbV90eXBlIHR5cGUpXFxuIFxcdCAqICpkbyogZXZlbnR1YWxseSBnZXQgZnJlZWQsIGJ1dCBsZXQncyBqdXN0IGtlZXAgdGhpbmdzIHNpbXBsZVxcbiBcXHQgKiBhbmQgYXZvaWQgKmFueSogZmFsc2UgcG9zaXRpdmVzLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCFtb2QtXFx1MDAzZW1lbVt0eXBlXS5pc19yb3gpXFxuK1xcdGlmICghaXNfcm94KVxcbiBcXHRcXHRrbWVtbGVha19ub3RfbGVhayhwdHIpO1xcbiBcXG4gXFx0bWVtc2V0KHB0ciwgMCwgc2l6ZSk7XFxuZGlmZiAtLWdpdCBhL21tL2V4ZWNtZW0uYyBiL21tL2V4ZWNtZW0uY1xcbmluZGV4IDA4NGEyMDdlNDI3OGIuLjU3OTBkNGE4NTMyYWYgMTAwNjQ0XFxuLS0tIGEvbW0vZXhlY21lbS5jXFxuKysrIGIvbW0vZXhlY21lbS5jXFxuQEAgLTI3Niw3ICsyNzYsOCBAQCBzdGF0aWMgdm9pZCAqX19leGVjbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBleGVjbWVtX3JhbmdlICpyYW5nZSwgc2l6ZV90IHNpemUpXFxuIFxcbiBzdGF0aWMgdm9pZCAqZXhlY21lbV9jYWNoZV9wb3B1bGF0ZV9hbGxvYyhzdHJ1Y3QgZXhlY21lbV9yYW5nZSAqcmFuZ2UsIHNpemVfdCBzaXplKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgdm1fZmxhZ3MgPSBWTV9BTExPV19IVUdFX1ZNQVA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdm1fZmxhZ3MgPSAocmFuZ2UtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRVhFQ01FTV9OT19IVUdFX1ZNQVApXFxuK1xcdFxcdFxcdFxcdFxcdFxcdD8gMCA6IFZNX0FMTE9XX0hVR0VfVk1BUDtcXG4gXFx0c3RydWN0IG11dGV4ICptdXRleCA9IFxcdTAwMjZleGVjbWVtX2NhY2hlLm11dGV4O1xcbiBcXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bTtcXG4gXFx0c2l6ZV90IGFsbG9jX3NpemU7XFxuQEAgLTQzOSw2ICs0NDAsMzMgQEAgc3RhdGljIGJvb2wgZXhlY21lbV9jYWNoZV9mcmVlKHZvaWQgKnB0cilcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0c3RydWN0IG1hcGxlX3RyZWUgKmJ1c3lfYXJlYXMgPSBcXHUwMDI2ZXhlY21lbV9jYWNoZS5idXN5X2FyZWFzO1xcbitcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylwdHI7XFxuK1xcdE1BX1NUQVRFKG1hcywgYnVzeV9hcmVhcywgYWRkciwgYWRkcik7XFxuK1xcdHZvaWQgKmFyZWE7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNmV4ZWNtZW1fY2FjaGUubXV0ZXgpO1xcbitcXG4rXFx0YXJlYSA9IG1hc193YWxrKFxcdTAwMjZtYXMpO1xcbitcXHRpZiAoIWFyZWEpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xcbitcXG4rXFx0aWYgKHNpemUgXFx1MDAzZT0gbWFzX3JhbmdlX2xlbihcXHUwMDI2bWFzKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuK1xcbitcXHRhZGRyICs9IG1hc19yYW5nZV9sZW4oXFx1MDAyNm1hcykgLSBzaXplO1xcbitcXHRtYXNfc2V0X3JhbmdlKFxcdTAwMjZtYXMsIGFkZHIsIG1hcy5sYXN0KTtcXG4rXFxuK1xcdGVyciA9IG1hc19zdG9yZV9nZnAoXFx1MDAyNm1hcywgKHZvaWQgKilhZGRyLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4rXFxuK1xcdHJldHVybiAodm9pZCAqKWFkZHI7XFxuK31cXG4rXFxuICNlbHNlIC8qIENPTkZJR19BUkNIX0hBU19FWEVDTUVNX1JPWCAqL1xcbiAvKlxcbiAgKiB3aGVuIFJPWCBjYWNoZSBpcyBub3QgdXNlZCB0aGUgcGVybWlzc2lvbnMgZGVmaW5lZCBieSBhcmNoaXRlY3R1cmVzIGZvclxcbkBAIC00NTksNiArNDg3LDExIEBAIHN0YXRpYyBib29sIGV4ZWNtZW1fY2FjaGVfZnJlZSh2b2lkICpwdHIpXFxuIHtcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuK1xcbitzdGF0aWMgdm9pZCAqZXhlY21lbV9jYWNoZV9zcGxpdCh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxcbit7XFxuK1xcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xcbit9XFxuICNlbmRpZiAvKiBDT05GSUdfQVJDSF9IQVNfRVhFQ01FTV9ST1ggKi9cXG4gXFxuIHZvaWQgKmV4ZWNtZW1fYWxsb2MoZW51bSBleGVjbWVtX3R5cGUgdHlwZSwgc2l6ZV90IHNpemUpXFxuQEAgLTUxMSw2ICs1NDQsMTggQEAgYm9vbCBleGVjbWVtX2lzX3JveChlbnVtIGV4ZWNtZW1fdHlwZSB0eXBlKVxcbiBcXHRyZXR1cm4gISEoZXhlY21lbV9pbmZvLVxcdTAwM2VyYW5nZXNbdHlwZV0uZmxhZ3MgXFx1MDAyNiBFWEVDTUVNX1JPWF9DQUNIRSk7XFxuIH1cXG4gXFxuK3ZvaWQgKmV4ZWNtZW1fc3BsaXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSlcXG4re1xcbitcXHRpZiAoIXB0ciB8fCAhc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRwdHIgPSBleGVjbWVtX2NhY2hlX3NwbGl0KHB0ciwgc2l6ZSk7XFxuK1xcdGlmICghSVNfRVJSKHB0cikpXFxuK1xcdFxcdHJldHVybiBwdHI7XFxuK1xcdFZNX1dBUk5fT04ocHRyICE9IEVSUl9QVFIoLUVOT01FTSkpO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgZXhlY21lbV92YWxpZGF0ZShzdHJ1Y3QgZXhlY21lbV9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHN0cnVjdCBleGVjbWVtX3JhbmdlICpyID0gXFx1MDAyNmluZm8tXFx1MDAzZXJhbmdlc1tFWEVDTUVNX0RFRkFVTFRdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo0ODozMC42NjEyMDI4NTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTM2NjMzODEyNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTU9EVUxFU1wiLFxuICAgIFwiRFlOQU1JQ19GVFJBQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleGVjbWVtX3NwbGl0XCIsXG4gICAgXCJtb2R1bGVfZW1pdF9wbHRfZW50cnlcIixcbiAgICBcIm1vZHVsZV9lbWl0X3ZlbmVlcl9mb3JfYWRycFwiLFxuICAgIFwibW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9uc1wiLFxuICAgIFwiZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgQVJDSF9IQVNfRVhFQ01FTV9ST1ggZm9yIGFybTY0LCBtb2RpZnlpbmcgaG93IG1vZHVsZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGJ5IHNwbGl0dGluZyBNT0RfSU5JVF9URVhUIGZyb20gTU9EX1RFWFQgd2hlbiBleGVjbWVtX2lzX3JveCBpcyB0cnVlLiBJdCBhbHNvIHVwZGF0ZXMgZnRyYWNlIHRyYW1wb2xpbmVzIGFuZCBQTFQgZ2VuZXJhdGlvbiBmb3IgbW9kdWxlcyBvbiBhcm02NCB0byBhY2NvbW1vZGF0ZSB0aGVzZSBjaGFuZ2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIChtb2R1bGUgbG9hZGluZywgZXhlY3V0YWJsZSBtZW1vcnkgYWxsb2NhdGlvbiwgZnRyYWNlKSB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYzgyYzc3MjA2ZWI5NWFjMWY0ZDQ1YjhmMzVjYmY4ODFjODA2ZTEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMTQ6NDg6MjcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWdcbmluZGV4IGIzYWZlMDY4ODkxOWIuLjA4MGI5N2IwYmJkNWUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L0tjb25maWdcbisrKyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuQEAgLTI3LDYgKzI3LDcgQEAgY29uZmlnIEFSTTY0XG4gXHRzZWxlY3QgQVJDSF9IQVNfRE1BX09QUyBpZiBYRU5cbiBcdHNlbGVjdCBBUkNIX0hBU19ETUFfUFJFUF9DT0hFUkVOVFxuIFx0c2VsZWN0IEFSQ0hfSEFTX0FDUElfVEFCTEVfVVBHUkFERSBpZiBBQ1BJXG4rXHRzZWxlY3QgQVJDSF9IQVNfRVhFQ01FTV9ST1hcbiBcdHNlbGVjdCBBUkNIX0hBU19GQVNUX01VTFRJUExJRVJcbiBcdHNlbGVjdCBBUkNIX0hBU19GT1JUSUZZX1NPVVJDRVxuIFx0c2VsZWN0IEFSQ0hfSEFTX0dDT1ZfUFJPRklMRV9BTExcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaFxuaW5kZXggZmI5Yjg4ZWViZWIxNS4uOTMyOGZhZGI0YTk1OSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmhcbkBAIC0xNSwxMSArMTUsOSBAQCBzdHJ1Y3QgbW9kX3BsdF9zZWMge1xuIFxuIHN0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYyB7XG4gXHRzdHJ1Y3QgbW9kX3BsdF9zZWNcdGNvcmU7XG4tXHRzdHJ1Y3QgbW9kX3BsdF9zZWNcdGluaXQ7XG4gXG4gXHQvKiBmb3IgQ09ORklHX0RZTkFNSUNfRlRSQUNFICovXG4gXHRzdHJ1Y3QgcGx0X2VudHJ5XHQqZnRyYWNlX3RyYW1wb2xpbmVzO1xuLVx0c3RydWN0IHBsdF9lbnRyeVx0KmluaXRfZnRyYWNlX3RyYW1wb2xpbmVzO1xuIH07XG4gXG4gdTY0IG1vZHVsZV9lbWl0X3BsdF9lbnRyeShzdHJ1Y3QgbW9kdWxlICptb2QsIEVsZjY0X1NoZHIgKnNlY2hkcnMsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5sZHMuaFxuaW5kZXggMGIzYWFjZDIyYzU5MC4uOTU1NDBlOTU2YjQxOSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmxkcy5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5sZHMuaFxuQEAgLTEsOCArMSw1IEBAXG4gU0VDVElPTlMge1xuIFx0LnBsdCAwIDogeyBCWVRFKDApIH1cbi1cdC5pbml0LnBsdCAwIDogeyBCWVRFKDApIH1cbi1cdC50ZXh0LmZ0cmFjZV90cmFtcG9saW5lIDAgOiB7IEJZVEUoMCkgfVxuLVx0LmluaXQudGV4dC5mdHJhY2VfdHJhbXBvbGluZSAwIDogeyBCWVRFKDApIH1cbiBcbiAjaWZkZWYgQ09ORklHX0tBU0FOX1NXX1RBR1NcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9mdHJhY2UuY1xuaW5kZXggNWExNTU0YTQ0MTYyOC4uYjU2ZGEyNGMxYmU0ZiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jXG4rKysgYi9hcmNoL2FybTY0L2tlcm5lbC9mdHJhY2UuY1xuQEAgLTI1OCwxNyArMjU4LDEwIEBAIGludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYylcbiBcdHJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUocGMsIDAsIG5ldywgZmFsc2UpO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHBsdF9lbnRyeSAqZ2V0X2Z0cmFjZV9wbHQoc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4rc3RhdGljIHN0cnVjdCBwbHRfZW50cnkgKmdldF9mdHJhY2VfcGx0KHN0cnVjdCBtb2R1bGUgKm1vZClcbiB7XG4gI2lmZGVmIENPTkZJR19NT0RVTEVTXG4tXHRzdHJ1Y3QgcGx0X2VudHJ5ICpwbHQgPSBOVUxMO1xuLVxuLVx0aWYgKHdpdGhpbl9tb2R1bGVfbWVtX3R5cGUoYWRkciwgbW9kLCBNT0RfSU5JVF9URVhUKSlcbi1cdFx0cGx0ID0gbW9kLVx1MDAzZWFyY2guaW5pdF9mdHJhY2VfdHJhbXBvbGluZXM7XG4tXHRlbHNlIGlmICh3aXRoaW5fbW9kdWxlX21lbV90eXBlKGFkZHIsIG1vZCwgTU9EX1RFWFQpKVxuLVx0XHRwbHQgPSBtb2QtXHUwMDNlYXJjaC5mdHJhY2VfdHJhbXBvbGluZXM7XG4tXHRlbHNlXG4tXHRcdHJldHVybiBOVUxMO1xuK1x0c3RydWN0IHBsdF9lbnRyeSAqcGx0ID0gbW9kLVx1MDAzZWFyY2guZnRyYWNlX3RyYW1wb2xpbmVzO1xuIFxuIFx0cmV0dXJuIFx1MDAyNnBsdFtGVFJBQ0VfUExUX0lEWF07XG4gI2Vsc2VcbkBAIC0zMzksNyArMzMyLDcgQEAgc3RhdGljIGJvb2wgZnRyYWNlX2ZpbmRfY2FsbGFibGVfYWRkcihzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLFxuIFx0aWYgKFdBUk5fT04oIW1vZCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHBsdCA9IGdldF9mdHJhY2VfcGx0KG1vZCwgcGMpO1xuK1x0cGx0ID0gZ2V0X2Z0cmFjZV9wbHQobW9kKTtcbiBcdGlmICghcGx0KSB7XG4gXHRcdHByX2VycihcImZ0cmFjZTogbm8gbW9kdWxlIFBMVCBmb3IgJXBzXFxuXCIsICh2b2lkICopKmFkZHIpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYyBiL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmNcbmluZGV4IDdhZmQzNzBkYTlmNDguLjY5MDBkMjI0MmYxYmUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jXG4rKysgYi9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jXG5AQCAtNzAsOCArNzAsNyBAQCB1NjQgbW9kdWxlX2VtaXRfcGx0X2VudHJ5KHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycyxcbiBcdFx0XHQgIHZvaWQgKmxvYywgY29uc3QgRWxmNjRfUmVsYSAqcmVsYSxcbiBcdFx0XHQgIEVsZjY0X1N5bSAqc3ltKVxuIHtcbi1cdHN0cnVjdCBtb2RfcGx0X3NlYyAqcGx0c2VjID0gIXdpdGhpbl9tb2R1bGVfaW5pdCgodW5zaWduZWQgbG9uZylsb2MsIG1vZCkgP1xuLVx0XHRcdFx0XHRcdFx1MDAyNm1vZC1cdTAwM2VhcmNoLmNvcmUgOiBcdTAwMjZtb2QtXHUwMDNlYXJjaC5pbml0O1xuK1x0c3RydWN0IG1vZF9wbHRfc2VjICpwbHRzZWMgPSBcdTAwMjZtb2QtXHUwMDNlYXJjaC5jb3JlO1xuIFx0c3RydWN0IHBsdF9lbnRyeSAqcGx0ID0gKHN0cnVjdCBwbHRfZW50cnkgKilzZWNoZHJzW3BsdHNlYy1cdTAwM2VwbHRfc2huZHhdLnNoX2FkZHI7XG4gXHRpbnQgaSA9IHBsdHNlYy1cdTAwM2VwbHRfbnVtX2VudHJpZXM7XG4gXHRpbnQgaiA9IGkgLSAxO1xuQEAgLTEwMSw4ICsxMDAsNyBAQCB1NjQgbW9kdWxlX2VtaXRfcGx0X2VudHJ5KHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycyxcbiB1NjQgbW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwKHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycyxcbiBcdFx0XHRcdHZvaWQgKmxvYywgdTY0IHZhbClcbiB7XG4tXHRzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9ICF3aXRoaW5fbW9kdWxlX2luaXQoKHVuc2lnbmVkIGxvbmcpbG9jLCBtb2QpID9cbi1cdFx0XHRcdFx0XHRcdTAwMjZtb2QtXHUwMDNlYXJjaC5jb3JlIDogXHUwMDI2bW9kLVx1MDAzZWFyY2guaW5pdDtcbitcdHN0cnVjdCBtb2RfcGx0X3NlYyAqcGx0c2VjID0gXHUwMDI2bW9kLVx1MDAzZWFyY2guY29yZTtcbiBcdHN0cnVjdCBwbHRfZW50cnkgKnBsdCA9IChzdHJ1Y3QgcGx0X2VudHJ5ICopc2VjaGRyc1twbHRzZWMtXHUwMDNlcGx0X3NobmR4XS5zaF9hZGRyO1xuIFx0aW50IGkgPSBwbHRzZWMtXHUwMDNlcGx0X251bV9lbnRyaWVzKys7XG4gXHR1MzIgYnI7XG5AQCAtMTY5LDE3ICsxNjcsMTcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBjb3VudF9wbHRzKEVsZjY0X1N5bSAqc3ltcywgRWxmNjRfUmVsYSAqcmVsYSwgaW50IG51bSxcbiBcdFx0Y2FzZSBSX0FBUkNINjRfQ0FMTDI2OlxuIFx0XHRcdC8qXG4gXHRcdFx0ICogV2Ugb25seSBoYXZlIHRvIGNvbnNpZGVyIGJyYW5jaCB0YXJnZXRzIHRoYXQgcmVzb2x2ZVxuLVx0XHRcdCAqIHRvIHN5bWJvbHMgdGhhdCBhcmUgZGVmaW5lZCBpbiBhIGRpZmZlcmVudCBzZWN0aW9uLlxuK1x0XHRcdCAqIHRvIHN5bWJvbHMgdGhhdCBhcmUgbm90IGRlZmluZWQgaW4gdGhlIHNhbWUgbW9kdWxlLlxuIFx0XHRcdCAqIFRoaXMgaXMgbm90IHNpbXBseSBhIGhldXJpc3RpYywgaXQgaXMgYSBmdW5kYW1lbnRhbFxuIFx0XHRcdCAqIGxpbWl0YXRpb24sIHNpbmNlIHRoZXJlIGlzIG5vIGd1YXJhbnRlZWQgd2F5IHRvIGVtaXRcbiBcdFx0XHQgKiBQTFQgZW50cmllcyBzdWZmaWNpZW50bHkgY2xvc2UgdG8gdGhlIGJyYW5jaCBpZiB0aGVcbiBcdFx0XHQgKiBzZWN0aW9uIHNpemUgZXhjZWVkcyB0aGUgcmFuZ2Ugb2YgYSBicmFuY2hcbiBcdFx0XHQgKiBpbnN0cnVjdGlvbi4gU28gaWdub3JlIHJlbG9jYXRpb25zIGFnYWluc3QgZGVmaW5lZFxuLVx0XHRcdCAqIHN5bWJvbHMgaWYgdGhleSBsaXZlIGluIHRoZSBzYW1lIHNlY3Rpb24gYXMgdGhlXG4rXHRcdFx0ICogc3ltYm9scyBpZiB0aGV5IGxpdmUgaW4gdGhlIHNhbWUgbW9kdWxlIGFzIHRoZVxuIFx0XHRcdCAqIHJlbG9jYXRpb24gdGFyZ2V0LlxuIFx0XHRcdCAqL1xuIFx0XHRcdHMgPSBzeW1zICsgRUxGNjRfUl9TWU0ocmVsYVtpXS5yX2luZm8pO1xuLVx0XHRcdGlmIChzLVx1MDAzZXN0X3NobmR4ID09IGRzdGlkeClcbitcdFx0XHRpZiAocy1cdTAwM2VzdF9zaG5keCAhPSBTSE5fVU5ERUYpXG4gXHRcdFx0XHRicmVhaztcbiBcbiBcdFx0XHQvKlxuQEAgLTI3NywxMyArMjc1LDE0IEBAIHN0YXRpYyBpbnQgcGFydGl0aW9uX2JyYW5jaF9wbHRfcmVsYXMoRWxmNjRfU3ltICpzeW1zLCBFbGY2NF9SZWxhICpyZWxhLFxuIFx0cmV0dXJuIGk7XG4gfVxuIFxuK3N0YXRpYyBjb25zdCBpbnQgZnRyYWNlX3BsdHMgPSBJU19FTkFCTEVEKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkgPyBOUl9GVFJBQ0VfUExUUyA6IDA7XG4rXG4gaW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxuIFx0XHRcdCAgICAgIGNoYXIgKnNlY3N0cmluZ3MsIHN0cnVjdCBtb2R1bGUgKm1vZClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGNvcmVfcGx0cyA9IDA7XG4tXHR1bnNpZ25lZCBsb25nIGluaXRfcGx0cyA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIGNvcmVfcGx0cyA9IGZ0cmFjZV9wbHRzO1xuIFx0RWxmNjRfU3ltICpzeW1zID0gTlVMTDtcbi1cdEVsZl9TaGRyICpwbHRzZWMsICp0cmFtcCA9IE5VTEwsICppbml0X3RyYW1wID0gTlVMTDtcbitcdEVsZl9TaGRyICpwbHRzZWM7XG4gXHRpbnQgaTtcbiBcbiBcdC8qXG5AQCAtMjkzLDIwICsyOTIsMTIgQEAgaW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZWhkci1cdTAwM2VlX3NobnVtOyBpKyspIHtcbiBcdFx0aWYgKCFzdHJjbXAoc2Vjc3RyaW5ncyArIHNlY2hkcnNbaV0uc2hfbmFtZSwgXCIucGx0XCIpKVxuIFx0XHRcdG1vZC1cdTAwM2VhcmNoLmNvcmUucGx0X3NobmR4ID0gaTtcbi1cdFx0ZWxzZSBpZiAoIXN0cmNtcChzZWNzdHJpbmdzICsgc2VjaGRyc1tpXS5zaF9uYW1lLCBcIi5pbml0LnBsdFwiKSlcbi1cdFx0XHRtb2QtXHUwMDNlYXJjaC5pbml0LnBsdF9zaG5keCA9IGk7XG4tXHRcdGVsc2UgaWYgKCFzdHJjbXAoc2Vjc3RyaW5ncyArIHNlY2hkcnNbaV0uc2hfbmFtZSxcbi1cdFx0XHRcdCBcIi50ZXh0LmZ0cmFjZV90cmFtcG9saW5lXCIpKVxuLVx0XHRcdHRyYW1wID0gc2VjaGRycyArIGk7XG4tXHRcdGVsc2UgaWYgKCFzdHJjbXAoc2Vjc3RyaW5ncyArIHNlY2hkcnNbaV0uc2hfbmFtZSxcbi1cdFx0XHRcdCBcIi5pbml0LnRleHQuZnRyYWNlX3RyYW1wb2xpbmVcIikpXG4tXHRcdFx0aW5pdF90cmFtcCA9IHNlY2hkcnMgKyBpO1xuIFx0XHRlbHNlIGlmIChzZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX1NZTVRBQilcbiBcdFx0XHRzeW1zID0gKEVsZjY0X1N5bSAqKXNlY2hkcnNbaV0uc2hfYWRkcjtcbiBcdH1cbiBcbi1cdGlmICghbW9kLVx1MDAzZWFyY2guY29yZS5wbHRfc2huZHggfHwgIW1vZC1cdTAwM2VhcmNoLmluaXQucGx0X3NobmR4KSB7XG4tXHRcdHByX2VycihcIiVzOiBtb2R1bGUgUExUIHNlY3Rpb24ocykgbWlzc2luZ1xcblwiLCBtb2QtXHUwMDNlbmFtZSk7XG4rXHRpZiAoIW1vZC1cdTAwM2VhcmNoLmNvcmUucGx0X3NobmR4KSB7XG4rXHRcdHByX2VycihcIiVzOiBtb2R1bGUgUExUIHNlY3Rpb24gbWlzc2luZ1xcblwiLCBtb2QtXHUwMDNlbmFtZSk7XG4gXHRcdHJldHVybiAtRU5PRVhFQztcbiBcdH1cbiBcdGlmICghc3ltcykge1xuQEAgLTMzNSwxMiArMzI2LDggQEAgaW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxuIFx0XHRpZiAobmVudHMpXG4gXHRcdFx0c29ydChyZWxzLCBuZW50cywgc2l6ZW9mKEVsZjY0X1JlbGEpLCBjbXBfcmVsYSwgTlVMTCk7XG4gXG4tXHRcdGlmICghbW9kdWxlX2luaXRfbGF5b3V0X3NlY3Rpb24oc2Vjc3RyaW5ncyArIGRzdHNlYy1cdTAwM2VzaF9uYW1lKSlcbi1cdFx0XHRjb3JlX3BsdHMgKz0gY291bnRfcGx0cyhzeW1zLCByZWxzLCBudW1yZWxzLFxuLVx0XHRcdFx0XHRcdHNlY2hkcnNbaV0uc2hfaW5mbywgZHN0c2VjKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdGluaXRfcGx0cyArPSBjb3VudF9wbHRzKHN5bXMsIHJlbHMsIG51bXJlbHMsXG4tXHRcdFx0XHRcdFx0c2VjaGRyc1tpXS5zaF9pbmZvLCBkc3RzZWMpO1xuK1x0XHRjb3JlX3BsdHMgKz0gY291bnRfcGx0cyhzeW1zLCByZWxzLCBudW1yZWxzLCBzZWNoZHJzW2ldLnNoX2luZm8sXG4rXHRcdFx0XHRcdGRzdHNlYyk7XG4gXHR9XG4gXG4gXHRwbHRzZWMgPSBzZWNoZHJzICsgbW9kLVx1MDAzZWFyY2guY29yZS5wbHRfc2huZHg7XG5AQCAtMzQ4LDMwICszMzUsOCBAQCBpbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqZWhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXG4gXHRwbHRzZWMtXHUwMDNlc2hfZmxhZ3MgPSBTSEZfRVhFQ0lOU1RSIHwgU0hGX0FMTE9DO1xuIFx0cGx0c2VjLVx1MDAzZXNoX2FkZHJhbGlnbiA9IEwxX0NBQ0hFX0JZVEVTO1xuIFx0cGx0c2VjLVx1MDAzZXNoX3NpemUgPSAoY29yZV9wbHRzICArIDEpICogc2l6ZW9mKHN0cnVjdCBwbHRfZW50cnkpO1xuLVx0bW9kLVx1MDAzZWFyY2guY29yZS5wbHRfbnVtX2VudHJpZXMgPSAwO1xuK1x0bW9kLVx1MDAzZWFyY2guY29yZS5wbHRfbnVtX2VudHJpZXMgPSBmdHJhY2VfcGx0cztcbiBcdG1vZC1cdTAwM2VhcmNoLmNvcmUucGx0X21heF9lbnRyaWVzID0gY29yZV9wbHRzO1xuIFxuLVx0cGx0c2VjID0gc2VjaGRycyArIG1vZC1cdTAwM2VhcmNoLmluaXQucGx0X3NobmR4O1xuLVx0cGx0c2VjLVx1MDAzZXNoX3R5cGUgPSBTSFRfTk9CSVRTO1xuLVx0cGx0c2VjLVx1MDAzZXNoX2ZsYWdzID0gU0hGX0VYRUNJTlNUUiB8IFNIRl9BTExPQztcbi1cdHBsdHNlYy1cdTAwM2VzaF9hZGRyYWxpZ24gPSBMMV9DQUNIRV9CWVRFUztcbi1cdHBsdHNlYy1cdTAwM2VzaF9zaXplID0gKGluaXRfcGx0cyArIDEpICogc2l6ZW9mKHN0cnVjdCBwbHRfZW50cnkpO1xuLVx0bW9kLVx1MDAzZWFyY2guaW5pdC5wbHRfbnVtX2VudHJpZXMgPSAwO1xuLVx0bW9kLVx1MDAzZWFyY2guaW5pdC5wbHRfbWF4X2VudHJpZXMgPSBpbml0X3BsdHM7XG4tXG4tXHRpZiAodHJhbXApIHtcbi1cdFx0dHJhbXAtXHUwMDNlc2hfdHlwZSA9IFNIVF9OT0JJVFM7XG4tXHRcdHRyYW1wLVx1MDAzZXNoX2ZsYWdzID0gU0hGX0VYRUNJTlNUUiB8IFNIRl9BTExPQztcbi1cdFx0dHJhbXAtXHUwMDNlc2hfYWRkcmFsaWduID0gX19hbGlnbm9mX18oc3RydWN0IHBsdF9lbnRyeSk7XG4tXHRcdHRyYW1wLVx1MDAzZXNoX3NpemUgPSBOUl9GVFJBQ0VfUExUUyAqIHNpemVvZihzdHJ1Y3QgcGx0X2VudHJ5KTtcbi1cdH1cbi1cbi1cdGlmIChpbml0X3RyYW1wKSB7XG4tXHRcdGluaXRfdHJhbXAtXHUwMDNlc2hfdHlwZSA9IFNIVF9OT0JJVFM7XG4tXHRcdGluaXRfdHJhbXAtXHUwMDNlc2hfZmxhZ3MgPSBTSEZfRVhFQ0lOU1RSIHwgU0hGX0FMTE9DO1xuLVx0XHRpbml0X3RyYW1wLVx1MDAzZXNoX2FkZHJhbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCBwbHRfZW50cnkpO1xuLVx0XHRpbml0X3RyYW1wLVx1MDAzZXNoX3NpemUgPSBOUl9GVFJBQ0VfUExUUyAqIHNpemVvZihzdHJ1Y3QgcGx0X2VudHJ5KTtcbi1cdH1cbi1cbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jXG5pbmRleCAyNGFkYjU4MWFmMGViLi42MjBjMmI3MDExNWU1IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmNcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jXG5AQCAtNDU0LDI5ICs0NTQsMTEgQEAgc3RhdGljIGludCBtb2R1bGVfaW5pdF9mdHJhY2VfcGx0KGNvbnN0IEVsZl9FaGRyICpoZHIsXG4gXHRcdFx0XHQgIHN0cnVjdCBtb2R1bGUgKm1vZClcbiB7XG4gI2lmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKVxuLVx0Y29uc3QgRWxmX1NoZHIgKnM7XG4tXHRzdHJ1Y3QgcGx0X2VudHJ5ICpwbHRzO1xuLVxuLVx0cyA9IGZpbmRfc2VjdGlvbihoZHIsIHNlY2hkcnMsIFwiLnRleHQuZnRyYWNlX3RyYW1wb2xpbmVcIik7XG4tXHRpZiAoIXMpXG4tXHRcdHJldHVybiAtRU5PRVhFQztcbi1cbi1cdHBsdHMgPSAodm9pZCAqKXMtXHUwMDNlc2hfYWRkcjtcbitcdHN0cnVjdCBwbHRfZW50cnkgKnBsdHMgPSAodm9pZCAqKXNlY2hkcnNbbW9kLVx1MDAzZWFyY2guY29yZS5wbHRfc2huZHhdLnNoX2FkZHI7XG4gXG4gXHRfX2luaXRfcGx0KFx1MDAyNnBsdHNbRlRSQUNFX1BMVF9JRFhdLCBGVFJBQ0VfQUREUik7XG4gXG4gXHRtb2QtXHUwMDNlYXJjaC5mdHJhY2VfdHJhbXBvbGluZXMgPSBwbHRzO1xuLVxuLVx0cyA9IGZpbmRfc2VjdGlvbihoZHIsIHNlY2hkcnMsIFwiLmluaXQudGV4dC5mdHJhY2VfdHJhbXBvbGluZVwiKTtcbi1cdGlmICghcylcbi1cdFx0cmV0dXJuIC1FTk9FWEVDO1xuLVxuLVx0cGx0cyA9ICh2b2lkICopcy1cdTAwM2VzaF9hZGRyO1xuLVxuLVx0X19pbml0X3BsdChcdTAwMjZwbHRzW0ZUUkFDRV9QTFRfSURYXSwgRlRSQUNFX0FERFIpO1xuLVxuLVx0bW9kLVx1MDAzZWFyY2guaW5pdF9mdHJhY2VfdHJhbXBvbGluZXMgPSBwbHRzO1xuLVxuICNlbmRpZlxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vaW5pdC5jIGIvYXJjaC9hcm02NC9tbS9pbml0LmNcbmluZGV4IDk3OTg3Zjg1MGEzM2MuLmU2Yzk4MDQ1MDQ2ZTIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL2luaXQuY1xuKysrIGIvYXJjaC9hcm02NC9tbS9pbml0LmNcbkBAIC01MzEsNyArNTMxLDggQEAgc3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuIFx0XHRcdFtFWEVDTUVNX0RFRkFVTFRdID0ge1xuIFx0XHRcdFx0LnN0YXJ0XHQ9IHN0YXJ0LFxuIFx0XHRcdFx0LmVuZFx0PSBlbmQsXG4tXHRcdFx0XHQucGdwcm90XHQ9IFBBR0VfS0VSTkVMLFxuK1x0XHRcdFx0LnBncHJvdFx0PSBQQUdFX0tFUk5FTF9ST1gsXG4rXHRcdFx0XHQuZmxhZ3NcdD0gRVhFQ01FTV9ST1hfQ0FDSEUsXG4gXHRcdFx0XHQuYWxpZ25tZW50ID0gMSxcbiBcdFx0XHRcdC5mYWxsYmFja19zdGFydFx0PSBmYWxsYmFja19zdGFydCxcbiBcdFx0XHRcdC5mYWxsYmFja19lbmRcdD0gZmFsbGJhY2tfZW5kLFxuQEAgLTU0OCw5ICs1NDksMjUgQEAgc3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuIFx0XHRcdFx0LnBncHJvdFx0PSBQQUdFX0tFUk5FTCxcbiBcdFx0XHRcdC5hbGlnbm1lbnQgPSAxLFxuIFx0XHRcdH0sXG4rXHRcdFx0W0VYRUNNRU1fTU9EVUxFX0RBVEFdID0ge1xuK1x0XHRcdFx0LnN0YXJ0XHQ9IHN0YXJ0LFxuK1x0XHRcdFx0LmVuZFx0PSBlbmQsXG4rXHRcdFx0XHQucGdwcm90XHQ9IFBBR0VfS0VSTkVMLFxuK1x0XHRcdFx0LmFsaWdubWVudCA9IDEsXG4rXHRcdFx0XHQuZmFsbGJhY2tfc3RhcnRcdD0gZmFsbGJhY2tfc3RhcnQsXG4rXHRcdFx0XHQuZmFsbGJhY2tfZW5kXHQ9IGZhbGxiYWNrX2VuZCxcbitcdFx0XHR9LFxuIFx0XHR9LFxuIFx0fTtcbiBcbitcdGlmICghc3lzdGVtX3N1cHBvcnRzX2JibWwyX25vYWJvcnQoKSlcbitcdFx0ZXhlY21lbV9pbmZvLnJhbmdlc1tFWEVDTUVNX0RFRkFVTFRdLmZsYWdzIHw9IEVYRUNNRU1fTk9fSFVHRV9WTUFQO1xuK1xuIFx0cmV0dXJuIFx1MDAyNmV4ZWNtZW1faW5mbztcbiB9XG4rXG4rdm9pZCBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnModm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSlcbit7XG4rXHRtZW1zZXQzMihwdHIsIEFBUkNINjRfQlJFQUtfRkFVTFQsIHNpemUgLyBzaXplb2YoX19sZTMyKSk7XG4rfVxuICNlbmRpZiAvKiBDT05GSUdfRVhFQ01FTSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYyBiL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xuaW5kZXggYmJlOThhYzlhZDhjNi4uMjBmZjljYjI3M2MxMSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xuKysrIGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXG5AQCAtMTY5LDggKzE2OSw2IEBAIHN0YXRpYyBpbnQgY2hhbmdlX21lbW9yeV9jb21tb24odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsXG4gXHQgKiB3ZSBhcmUgb3BlcmF0aW5nIG9uIGRvZXMgbm90IHJlc3VsdCBpbiBzdWNoIHNwbGl0dGluZy5cbiBcdCAqXG4gXHQgKiBMZXQncyByZXN0cmljdCBvdXJzZWx2ZXMgdG8gbWFwcGluZ3MgY3JlYXRlZCBieSB2bWFsbG9jIChvciB2bWFwKS5cbi1cdCAqIERpc2FsbG93IFZNX0FMTE9XX0hVR0VfVk1BUCBtYXBwaW5ncyB0byBndWFyYW50ZWUgdGhhdCBvbmx5IHBhZ2Vcbi1cdCAqIG1hcHBpbmdzIGFyZSB1cGRhdGVkIGFuZCBzcGxpdHRpbmcgaXMgbmV2ZXIgbmVlZGVkLlxuIFx0ICpcbiBcdCAqIFNvIGNoZWNrIHdoZXRoZXIgdGhlIFthZGRyLCBhZGRyICsgc2l6ZSkgaW50ZXJ2YWwgaXMgZW50aXJlbHlcbiBcdCAqIGNvdmVyZWQgYnkgcHJlY2lzZWx5IG9uZSBWTSBhcmVhIHRoYXQgaGFzIHRoZSBWTV9BTExPQyBmbGFnIHNldC5cbkBAIC0xNzksNyArMTc3LDE2IEBAIHN0YXRpYyBpbnQgY2hhbmdlX21lbW9yeV9jb21tb24odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsXG4gXHRpZiAoIWFyZWEgfHxcbiBcdCAgICAoKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKCh2b2lkICopZW5kKSBcdTAwM2VcbiBcdCAgICAgKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKGFyZWEtXHUwMDNlYWRkcikgKyBhcmVhLVx1MDAzZXNpemUpIHx8XG4tXHQgICAgKChhcmVhLVx1MDAzZWZsYWdzIFx1MDAyNiAoVk1fQUxMT0MgfCBWTV9BTExPV19IVUdFX1ZNQVApKSAhPSBWTV9BTExPQykpXG4rXHQgICAgIShhcmVhLVx1MDAzZWZsYWdzIFx1MDAyNiBWTV9BTExPQykpXG4rICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7XG4rXG4rXHQvKlxuK1x0ICogRGlzYWxsb3cgVk1fQUxMT1dfSFVHRV9WTUFQIG1hcHBpbmdzIHVubGVzcyB0aGUgcmVnaW9uIGlzIFBNRFxuK1x0ICogYWxpZ25lZCwgb3Igc3BsaXR0aW5nIGxpdmUgaHVnZSBtYXBwaW5ncyBpcyBzdXBwb3J0ZWQuXG4rXHQgKi9cbitcdGlmICgoYXJlYS1cdTAwM2VmbGFncyBcdTAwMjYgVk1fQUxMT1dfSFVHRV9WTUFQKSBcdTAwMjZcdTAwMjZcbitcdCAgICgoc3RhcnQgJSBQTURfU0laRSkgfHwgKHNpemUgJSBQTURfU0laRSkpIFx1MDAyNlx1MDAyNlxuK1x0ICAgV0FSTl9PTl9PTkNFKCFzeXN0ZW1fc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCgpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIW51bXBhZ2VzKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXhlY21lbS5oIGIvaW5jbHVkZS9saW51eC9leGVjbWVtLmhcbmluZGV4IDdkZTIyOTEzNGUzMDcuLmIwNDkyNmYzZmZmMjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9leGVjbWVtLmhcbkBAIC00OCwxMCArNDgsMTIgQEAgZW51bSBleGVjbWVtX3R5cGUge1xuICAqIGVudW0gZXhlY21lbV9yYW5nZV9mbGFncyAtIG9wdGlvbnMgZm9yIGV4ZWN1dGFibGUgbWVtb3J5IGFsbG9jYXRpb25zXG4gICogQEVYRUNNRU1fS0FTQU5fU0hBRE9XOlx0YWxsb2NhdGUga2FzYW4gc2hhZG93XG4gICogQEVYRUNNRU1fUk9YX0NBQ0hFOlx0XHRhbGxvY2F0aW9ucyBzaG91bGQgdXNlIFJPWCBjYWNoZSBvZiBodWdlIHBhZ2VzXG4rICogQEVYRUNNRU1fTk9fSFVHRV9WTUFQOlx0Y2FjaGUgYWxsb2NhdGlvbnMgbXVzdCBhdm9pZCBodWdlIHZtYXBwaW5nc1xuICAqL1xuIGVudW0gZXhlY21lbV9yYW5nZV9mbGFncyB7XG4gXHRFWEVDTUVNX0tBU0FOX1NIQURPV1x0PSAoMSBcdTAwM2NcdTAwM2MgMCksXG4gXHRFWEVDTUVNX1JPWF9DQUNIRVx0PSAoMSBcdTAwM2NcdTAwM2MgMSksXG4rXHRFWEVDTUVNX05PX0hVR0VfVk1BUFx0PSAoMSBcdTAwM2NcdTAwM2MgMiksXG4gfTtcbiBcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX0VYRUNNRU1fUk9YXG5AQCAtMTc4LDYgKzE4MCwxNSBAQCB2b2lkIGV4ZWNtZW1fZnJlZSh2b2lkICpwdHIpO1xuIFxuIERFRklORV9GUkVFKGV4ZWNtZW0sIHZvaWQgKiwgaWYgKF9UKSBleGVjbWVtX2ZyZWUoX1QpKTtcbiBcbisvKipcbisgKiBleGVjbWVtX3NwbGl0IC0gYWxsb2NhdGUgc3BhY2UgZnJvbSBhbiBleGlzdGluZyBleGVjbWVtIGNhY2hlIGFsbG9jYXRpb25cbisgKiBAcHRyICAtIHRoZSBleGlzdGluZyBleGVjbWVtIGNhY2hlIGFsbG9jYXRpb25cbisgKiBAc2l6ZSAtIHRoZSBzaXplIHRvIGNhcnZlIG91dCBmcm9tIHRoZSBleGlzdGluZyBhbGxvY2F0aW9uXG4rICpcbisgKiBSZXR1cm46IHRoZSBhZGRyZXNzIG9mIHRoZSBjYXJ2ZWQgb3V0IGFsbG9jYXRpb24sIG9yICVOVUxMIG9uIGZhaWx1cmUuXG4rICovXG4rdm9pZCAqZXhlY21lbV9zcGxpdCh2b2lkICpwdHIsIHNpemVfdCBzaXplKTtcbitcbiAjaWZkZWYgQ09ORklHX01NVVxuIC8qKlxuICAqIGV4ZWNtZW1fdm1hcCAtIGNyZWF0ZSB2aXJ0dWFsIG1hcHBpbmcgZm9yIEVYRUNNRU1fTU9EVUxFX0RBVEEgbWVtb3J5XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmhcbmluZGV4IDc1NjY4MTVmYWJiZTguLjAzMzZhNDY3MzNkZDkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oXG5AQCAtMzE2LDEwICszMTYsMTAgQEAgc3RydWN0IG1vZF90cmVlX25vZGUge1xuIH07XG4gXG4gZW51bSBtb2RfbWVtX3R5cGUge1xuLVx0TU9EX1RFWFQgPSAwLFxuLVx0TU9EX0RBVEEsXG4rXHRNT0RfREFUQSA9IDAsXG4gXHRNT0RfUk9EQVRBLFxuIFx0TU9EX1JPX0FGVEVSX0lOSVQsXG4rXHRNT0RfVEVYVCxcbiBcdE1PRF9JTklUX1RFWFQsXG4gXHRNT0RfSU5JVF9EQVRBLFxuIFx0TU9EX0lOSVRfUk9EQVRBLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jIGIva2VybmVsL21vZHVsZS9tYWluLmNcbmluZGV4IDQ2ZGQ4ZDI1YTYwNTguLjJkNjIxMzQ5NjM1OTcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvbW9kdWxlL21haW4uY1xuKysrIGIva2VybmVsL21vZHVsZS9tYWluLmNcbkBAIC0xMzQyLDcgKzEzNDIsNyBAQCBzdGF0aWMgaW50IG1vZHVsZV9tZW1vcnlfYWxsb2Moc3RydWN0IG1vZHVsZSAqbW9kLCBlbnVtIG1vZF9tZW1fdHlwZSB0eXBlKVxuIHtcbiBcdHVuc2lnbmVkIGludCBzaXplID0gUEFHRV9BTElHTihtb2QtXHUwMDNlbWVtW3R5cGVdLnNpemUpO1xuIFx0ZW51bSBleGVjbWVtX3R5cGUgZXhlY21lbV90eXBlO1xuLVx0dm9pZCAqcHRyO1xuK1x0dm9pZCAqcHRyID0gTlVMTDtcbiBcbiBcdG1vZC1cdTAwM2VtZW1bdHlwZV0uc2l6ZSA9IHNpemU7XG4gXG5AQCAtMTM1MSwxMSArMTM1MSwyNSBAQCBzdGF0aWMgaW50IG1vZHVsZV9tZW1vcnlfYWxsb2Moc3RydWN0IG1vZHVsZSAqbW9kLCBlbnVtIG1vZF9tZW1fdHlwZSB0eXBlKVxuIFx0ZWxzZVxuIFx0XHRleGVjbWVtX3R5cGUgPSBFWEVDTUVNX01PRFVMRV9URVhUO1xuIFxuLVx0cHRyID0gZXhlY21lbV9hbGxvY19ydyhleGVjbWVtX3R5cGUsIHNpemUpO1xuK1x0Ym9vbCBpc19yb3ggPSBleGVjbWVtX2lzX3JveChleGVjbWVtX3R5cGUpO1xuK1x0aWYgKGlzX3JveCkge1xuK1x0XHQvKlxuK1x0XHQgKiBTcGVjaWFsIGNhc2UgZm9yIE1PRF9URVhUIC8gTU9EX0lOSVRfVEVYVDogYWxsb2NhdGUgdGhlXG4rXHRcdCAqIGxhdHRlciBieSBzcGxpdHRpbmcgb2ZmIHJlcXVpcmVkIHNwYWNlIGZyb20gdGhlIGZvcm1lclxuK1x0XHQgKiBzbyB0aGF0IHRoZXkgYXJlIGFsd2F5cyBwbGFjZWQgY2xvc2UgdG9nZXRoZXIuXG4rXHRcdCAqL1xuK1x0XHRpZiAodHlwZSA9PSBNT0RfVEVYVClcbitcdFx0XHRzaXplICs9IFBBR0VfQUxJR04obW9kLVx1MDAzZW1lbVtNT0RfSU5JVF9URVhUXS5zaXplKTtcbitcdFx0ZWxzZSBpZiAodHlwZSA9PSBNT0RfSU5JVF9URVhUKVxuK1x0XHRcdHB0ciA9IGV4ZWNtZW1fc3BsaXQobW9kLVx1MDAzZW1lbVtNT0RfVEVYVF0uYmFzZSwgc2l6ZSk7XG4rXHR9XG4rXG4rXHRpZiAoIXB0cilcbitcdFx0cHRyID0gZXhlY21lbV9hbGxvY19ydyhleGVjbWVtX3R5cGUsIHNpemUpO1xuIFx0aWYgKCFwdHIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0bW9kLVx1MDAzZW1lbVt0eXBlXS5pc19yb3ggPSBleGVjbWVtX2lzX3JveChleGVjbWVtX3R5cGUpO1xuK1x0bW9kLVx1MDAzZW1lbVt0eXBlXS5pc19yb3ggPSBpc19yb3g7XG4gXG4gXHQvKlxuIFx0ICogVGhlIHBvaW50ZXIgdG8gdGhlc2UgYmxvY2tzIG9mIG1lbW9yeSBhcmUgc3RvcmVkIG9uIHRoZSBtb2R1bGVcbkBAIC0xMzY4LDcgKzEzODIsNyBAQCBzdGF0aWMgaW50IG1vZHVsZV9tZW1vcnlfYWxsb2Moc3RydWN0IG1vZHVsZSAqbW9kLCBlbnVtIG1vZF9tZW1fdHlwZSB0eXBlKVxuIFx0ICogKmRvKiBldmVudHVhbGx5IGdldCBmcmVlZCwgYnV0IGxldCdzIGp1c3Qga2VlcCB0aGluZ3Mgc2ltcGxlXG4gXHQgKiBhbmQgYXZvaWQgKmFueSogZmFsc2UgcG9zaXRpdmVzLlxuIFx0ICovXG4tXHRpZiAoIW1vZC1cdTAwM2VtZW1bdHlwZV0uaXNfcm94KVxuK1x0aWYgKCFpc19yb3gpXG4gXHRcdGttZW1sZWFrX25vdF9sZWFrKHB0cik7XG4gXG4gXHRtZW1zZXQocHRyLCAwLCBzaXplKTtcbmRpZmYgLS1naXQgYS9tbS9leGVjbWVtLmMgYi9tbS9leGVjbWVtLmNcbmluZGV4IDA4NGEyMDdlNDI3OGIuLjU3OTBkNGE4NTMyYWYgMTAwNjQ0XG4tLS0gYS9tbS9leGVjbWVtLmNcbisrKyBiL21tL2V4ZWNtZW0uY1xuQEAgLTI3Niw3ICsyNzYsOCBAQCBzdGF0aWMgdm9pZCAqX19leGVjbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBleGVjbWVtX3JhbmdlICpyYW5nZSwgc2l6ZV90IHNpemUpXG4gXG4gc3RhdGljIHZvaWQgKmV4ZWNtZW1fY2FjaGVfcG9wdWxhdGVfYWxsb2Moc3RydWN0IGV4ZWNtZW1fcmFuZ2UgKnJhbmdlLCBzaXplX3Qgc2l6ZSlcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHZtX2ZsYWdzID0gVk1fQUxMT1dfSFVHRV9WTUFQO1xuK1x0dW5zaWduZWQgbG9uZyB2bV9mbGFncyA9IChyYW5nZS1cdTAwM2VmbGFncyBcdTAwMjYgRVhFQ01FTV9OT19IVUdFX1ZNQVApXG4rXHRcdFx0XHRcdFx0PyAwIDogVk1fQUxMT1dfSFVHRV9WTUFQO1xuIFx0c3RydWN0IG11dGV4ICptdXRleCA9IFx1MDAyNmV4ZWNtZW1fY2FjaGUubXV0ZXg7XG4gXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bTtcbiBcdHNpemVfdCBhbGxvY19zaXplO1xuQEAgLTQzOSw2ICs0NDAsMzMgQEAgc3RhdGljIGJvb2wgZXhlY21lbV9jYWNoZV9mcmVlKHZvaWQgKnB0cilcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitzdGF0aWMgdm9pZCAqZXhlY21lbV9jYWNoZV9zcGxpdCh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxuK3tcbitcdHN0cnVjdCBtYXBsZV90cmVlICpidXN5X2FyZWFzID0gXHUwMDI2ZXhlY21lbV9jYWNoZS5idXN5X2FyZWFzO1xuK1x0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcHRyO1xuK1x0TUFfU1RBVEUobWFzLCBidXN5X2FyZWFzLCBhZGRyLCBhZGRyKTtcbitcdHZvaWQgKmFyZWE7XG4rXHRpbnQgZXJyO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmV4ZWNtZW1fY2FjaGUubXV0ZXgpO1xuK1xuK1x0YXJlYSA9IG1hc193YWxrKFx1MDAyNm1hcyk7XG4rXHRpZiAoIWFyZWEpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuK1xuK1x0aWYgKHNpemUgXHUwMDNlPSBtYXNfcmFuZ2VfbGVuKFx1MDAyNm1hcykpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuK1xuK1x0YWRkciArPSBtYXNfcmFuZ2VfbGVuKFx1MDAyNm1hcykgLSBzaXplO1xuK1x0bWFzX3NldF9yYW5nZShcdTAwMjZtYXMsIGFkZHIsIG1hcy5sYXN0KTtcbitcbitcdGVyciA9IG1hc19zdG9yZV9nZnAoXHUwMDI2bWFzLCAodm9pZCAqKWFkZHIsIEdGUF9LRVJORUwpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbitcbitcdHJldHVybiAodm9pZCAqKWFkZHI7XG4rfVxuK1xuICNlbHNlIC8qIENPTkZJR19BUkNIX0hBU19FWEVDTUVNX1JPWCAqL1xuIC8qXG4gICogd2hlbiBST1ggY2FjaGUgaXMgbm90IHVzZWQgdGhlIHBlcm1pc3Npb25zIGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlcyBmb3JcbkBAIC00NTksNiArNDg3LDExIEBAIHN0YXRpYyBib29sIGV4ZWNtZW1fY2FjaGVfZnJlZSh2b2lkICpwdHIpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbitcbitzdGF0aWMgdm9pZCAqZXhlY21lbV9jYWNoZV9zcGxpdCh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxuK3tcbitcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuK31cbiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfSEFTX0VYRUNNRU1fUk9YICovXG4gXG4gdm9pZCAqZXhlY21lbV9hbGxvYyhlbnVtIGV4ZWNtZW1fdHlwZSB0eXBlLCBzaXplX3Qgc2l6ZSlcbkBAIC01MTEsNiArNTQ0LDE4IEBAIGJvb2wgZXhlY21lbV9pc19yb3goZW51bSBleGVjbWVtX3R5cGUgdHlwZSlcbiBcdHJldHVybiAhIShleGVjbWVtX2luZm8tXHUwMDNlcmFuZ2VzW3R5cGVdLmZsYWdzIFx1MDAyNiBFWEVDTUVNX1JPWF9DQUNIRSk7XG4gfVxuIFxuK3ZvaWQgKmV4ZWNtZW1fc3BsaXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSlcbit7XG4rXHRpZiAoIXB0ciB8fCAhc2l6ZSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRwdHIgPSBleGVjbWVtX2NhY2hlX3NwbGl0KHB0ciwgc2l6ZSk7XG4rXHRpZiAoIUlTX0VSUihwdHIpKVxuK1x0XHRyZXR1cm4gcHRyO1xuK1x0Vk1fV0FSTl9PTihwdHIgIT0gRVJSX1BUUigtRU5PTUVNKSk7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4gc3RhdGljIGJvb2wgZXhlY21lbV92YWxpZGF0ZShzdHJ1Y3QgZXhlY21lbV9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBleGVjbWVtX3JhbmdlICpyID0gXHUwMDI2aW5mby1cdTAwM2VyYW5nZXNbRVhFQ01FTV9ERUZBVUxUXTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE0OjQ4OjMwLjY2MTIwNDE0NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0OTY2Mzg2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGb2N1czogQVJNNjQgTW9kdWxlIExvYWRpbmcgYW5kIEV4ZWNtZW0gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIGZvciBhcm02NCB0aGF0J3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gbW9kdWxlIGxvYWRpbmcsIGV4ZWN1dGFibGUgbWVtb3J5IGhhbmRsaW5nLCBhbmQgRnRyYWNlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgaW50cm9kdWN0aW9uIG9mIGBBUkNIX0hBU19FWEVDTUVNX1JPWGAuIEl0J3MgdG91Y2hpbmcgYSBsb3Qgb2YgY29yZSBrZXJuZWwgYXJlYXM6IGBhcmNoL2FybTY0L0tjb25maWdgLCB2YXJpb3VzIGluY2x1ZGUgZmlsZXMsIGFuZCBzb21lIGNyaXRpY2FsIHNvdXJjZSBmaWxlcyBsaWtlIGBtbS9leGVjbWVtLmNgLCBga2VybmVsL21vZHVsZS9tYWluLmNgLCBhbmQgc2V2ZXJhbCBhcm02NC1zcGVjaWZpYyBmaWxlcyBpbiB0aGUgYXJjaGl0ZWN0dXJlIGRpcmVjdG9yaWVzLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZzsgaXQncyBmdW5jdGlvbmFsbHkgY2hhbmdpbmcgdGhpbmdzIGFuZCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBgV29ydGhGdXp6aW5nPXRydWVgIGlzIHRoZSByaWdodCBjYWxsIGhlcmUuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgKmRpcmVjdGx5KiBpbXBhY3RlZCBieSB0aGVzZSBjaGFuZ2VzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgc3BvdHMgZm9yIGZ1enppbmcuIEknbSB0aGlua2luZzpcblxuKiAgIGBleGVjbWVtX3NwbGl0YCBhbmQgYGV4ZWNtZW1fY2FjaGVfc3BsaXRgIGluIGBtbS9leGVjbWVtLmNgLiBUaGVzZSBhcmUgY2VudHJhbCB0byB0aGUgbmV3IGBNT0RfSU5JVF9URVhUYCBzZXBhcmF0aW9uLlxuKiAgIGBtb2R1bGVfbWVtb3J5X2FsbG9jYCBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgLiBNaWdodCBiZSBhIGJpdCBicm9hZCwgYnV0IGl0ICppcyogbW9kaWZpZWQsIHNvIGl0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LlxuKiAgIGBleGVjbWVtX2FyY2hfc2V0dXBgIGluIGBhcmNoL2FybTY0L21tL2luaXQuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzZXR1cCBpcyBoYXBwZW5pbmcuXG4qICAgYGNoYW5nZV9tZW1vcnlfY29tbW9uYCBpbiBgYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jYC4gVGhpcyBpcyBzdGF0aWMgYW5kIHByb2JhYmx5IG5vdCB0aGUgYmVzdCBmb2N1cy5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGEgYml0OlxuXG4qICAgSSBuZWVkIHRvIHNlZSB0aGUgZGVmaW5pdGlvbiBvZiBgZXhlY21lbV9zcGxpdGAgYW5kIGBleGVjbWVtX2NhY2hlX3NwbGl0YC4gYGV4ZWNtZW1fc3BsaXRgIGxvb2tzIGdvb2QgYXMgaXQncyBleHBvcnRlZCBhbmQgbm90IHN0YXRpYywgYnV0IGBleGVjbWVtX2NhY2hlX3NwbGl0YCBpcyBzdGF0aWMuXG4qICAgYG1vZHVsZV9tZW1vcnlfYWxsb2NgIGlzIGFsc28gc3RhdGljLCB3aGljaCBpcyBhIGJpdCBsZXNzIGlkZWFsLCBidXQgaXQncyBzdGlsbCBiZWluZyBjaGFuZ2VkIGluIHRoaXMgcGF0Y2guXG4qICAgSSdsbCBhbHNvIHRha2UgYSBsb29rIGF0IHRoZSBtb2R1bGUgUExUIGFuZCBGdHJhY2UgY29kZS4gU3BlY2lmaWMgZnVuY3Rpb25zIGxpa2UgYG1vZHVsZV9lbWl0X3BsdF9lbnRyeWAsIGBtb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnBgLCBhbmQgYG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnNgIGluIGBhcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jYCBzZWVtIHJlbGV2YW50IGFuZCB3b3J0aCBhIGxvb2suIFRoZSBGdHJhY2UgY29kZSBpbiBgYXJjaC9hcm02NC9rZXJuZWwvZnRyYWNlLmNgIGFsc28gaGFzIGZ1bmN0aW9ucyB0byBjb25zaWRlciBsaWtlIGBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jYCwgYGZ0cmFjZV9maW5kX2NhbGxhYmxlX2FkZHJgLlxuXG5JJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gZ2V0IGEgcHJlY2lzZSB2aWV3IG9mIHRoZXNlIGZ1bmN0aW9ucy4gRnJvbSB0aGVyZSwgSSBjYW4gZmlndXJlIG91dCB0aGUgYmVzdCB0YXJnZXRzIGZvciBmdXp6aW5nIGNhbXBhaWducy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc1NywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE0OjQ4OjQwLjE1Nzg0NTAxM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODg1MTIyMjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4odm9pZCBcXFxcKnxib29sIHxpbnQgKT9leGVjbWVtX3NwbGl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZXhlY21lbS5oPTE4MT1ERUZJTkVfRlJFRShleGVjbWVtLCB2b2lkICosIGlmIChfVCkgZXhlY21lbV9mcmVlKF9UKSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaC0xODktICovXFxuaW5jbHVkZS9saW51eC9leGVjbWVtLmg6MTkwOnZvaWQgKmV4ZWNtZW1fc3BsaXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9leGVjbWVtLmgtMTkxLVxcbi0tXFxubW0vZXhlY21lbS5jPTU0Mj1ib29sIGV4ZWNtZW1faXNfcm94KGVudW0gZXhlY21lbV90eXBlIHR5cGUpXFxuLS1cXG5tbS9leGVjbWVtLmMtNTQ2LVxcbm1tL2V4ZWNtZW0uYzo1NDc6dm9pZCAqZXhlY21lbV9zcGxpdCh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxcbm1tL2V4ZWNtZW0uYy01NDgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo0ODo0My4wNDI5NzM2NzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzUyMzU1Nzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkZvY3VzaW5nIE15IEFuYWx5c2lzKipcblxuUmlnaHQsIHNvIGBleGVjbWVtX3NwbGl0YCBpcyBkZWZpbml0ZWx5IHdoZXJlIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yIG9mIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGV4ZWN1dGFibGUgbWVtb3J5LiBOb3csIGxldCdzIHNlZS4uLiB3aGF0IGFib3V0IGBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zYD8gSSBuZWVkIHRvIHdlaWdoIHRoYXQgYWdhaW5zdCBgZXhlY21lbV9zcGxpdGAuIEl0IHNvdW5kcyBsaWtlIGl0IGNvdWxkIGJlIGFub3RoZXIgcmVsZXZhbnQgZm9jdXMgYXJlYS4gQ291bGQgdGhhdCBmdW5jdGlvbiBiZSB1c2VkIHRvIG1vZGlmeSB0aGUgZXhlY3V0YWJsZSBtZW1vcnkgcmVnaW9ucyBhZnRlciB0aGUgc3BsaXQsIG9yIGNvdWxkIGl0IGJlIGludm9sdmVkIGluIHNldHRpbmcgdXAgdGhlIGNvbmRpdGlvbnMgZm9yIGl0PyBJcyB0aGF0IGEgY3JpdGljYWwgcG9pbnQsIG1heWJlIGxlYWRpbmcgdG8gc29tZSBuZXcgdGVjaG5pcXVlcz8gSSdtIGdvaW5nIHRvIGhhdmUgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIGJvdGggZnVuY3Rpb25zIGluIGNvbnRleHQgb2YgZWFjaCBvdGhlciBhcyBJIGRpdmUgaW50byB0aGlzIGFuYWx5c2lzLiBUaGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlbSBjb3VsZCByZXZlYWwgc29tZXRoaW5nIHJlYWxseSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMDUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo0ODo0Ni4zOTUzMzE5MjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1MDU2NzUxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcmMva2VybmVsL21vZHVsZS5jPTE2PXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNfd3JpdGVfbWUodW5zaWduZWQgc2hvcnQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuLS1cXG5hcmNoL2FyYy9rZXJuZWwvbW9kdWxlLmMtMjUtICovXFxuYXJjaC9hcmMva2VybmVsL21vZHVsZS5jOjI2OmludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICpoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxcbmFyY2gvYXJjL2tlcm5lbC9tb2R1bGUuYy0yNy1cXHRcXHRcXHQgICAgICBjaGFyICpzZWNzdHIsIHN0cnVjdCBtb2R1bGUgKm1vZClcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC9tb2R1bGUtcGx0cy5jPTE1Nz1zdGF0aWMgdW5zaWduZWQgaW50IGNvdW50X3BsdHMoY29uc3QgRWxmMzJfU3ltICpzeW1zLCBFbGYzMl9BZGRyIGJhc2UsXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvbW9kdWxlLXBsdHMuYy0yMDgtXFxuYXJjaC9hcm0va2VybmVsL21vZHVsZS1wbHRzLmM6MjA5OmludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICplaGRyLCBFbGZfU2hkciAqc2VjaGRycyxcXG5hcmNoL2FybS9rZXJuZWwvbW9kdWxlLXBsdHMuYy0yMTAtXFx0XFx0XFx0ICAgICAgY2hhciAqc2Vjc3RyaW5ncywgc3RydWN0IG1vZHVsZSAqbW9kKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYz0yNzg9c3RhdGljIGNvbnN0IGludCBmdHJhY2VfcGx0cyA9IElTX0VOQUJMRUQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKSA/IE5SX0ZUUkFDRV9QTFRTIDogMDtcXG5hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jLTI3OS1cXG5hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jOjI4MDppbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqZWhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXFxuYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYy0yODEtXFx0XFx0XFx0ICAgICAgY2hhciAqc2Vjc3RyaW5ncywgc3RydWN0IG1vZHVsZSAqbW9kKVxcbi0tXFxuYXJjaC9oZXhhZ29uL2tlcm5lbC9tb2R1bGUuYy0yNi0gKi9cXG5hcmNoL2hleGFnb24va2VybmVsL21vZHVsZS5jOjI3OmludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICpoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxcbmFyY2gvaGV4YWdvbi9rZXJuZWwvbW9kdWxlLmMtMjgtXFx0XFx0XFx0XFx0Y2hhciAqc2Vjc3RyaW5ncyxcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tb2R1bGUtc2VjdGlvbnMuYz03OT1zdGF0aWMgdm9pZCBjb3VudF9tYXhfZW50cmllcyhFbGZfUmVsYSAqcmVsYXMsIGludCBudW0sXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbW9kdWxlLXNlY3Rpb25zLmMtMTA0LVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tb2R1bGUtc2VjdGlvbnMuYzoxMDU6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tb2R1bGUtc2VjdGlvbnMuYy0xMDYtXFx0XFx0XFx0ICAgICAgY2hhciAqc2Vjc3RyaW5ncywgc3RydWN0IG1vZHVsZSAqbW9kKVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL21vZHVsZS5jPTI1Nz11bnNpZ25lZCBpbnQgYXJjaF9tb2Rfc2VjdGlvbl9wcmVwZW5kKHN0cnVjdCBtb2R1bGUgKm1vZCxcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYy0yNjYtI2RlZmluZSBDT05TVFxcbmFyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYzoyNjc6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoQ09OU1QgRWxmX0VoZHIgKmhkcixcXG5hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMtMjY4LVxcdFxcdFxcdCAgICAgIENPTlNUIEVsZl9TaGRyICpzZWNoZHJzLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfMzIuYz03Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcGx0X3NpemUoY29uc3QgRWxmMzJfRWhkciAqaGRyLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfMzIuYy0xMTktXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfMzIuYzoxMjA6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmMzJfRWhkciAqaGRyLFxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzMyLmMtMTIxLVxcdFxcdFxcdCAgICAgIEVsZjMyX1NoZHIgKnNlY2hkcnMsXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jPTQyND1ib29sIG1vZHVsZV9pbml0X3NlY3Rpb24oY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzY0LmMtNDI5LVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzY0LmM6NDMwOmludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZjY0X0VoZHIgKmhkcixcXG5hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jLTQzMS1cXHRcXHRcXHQgICAgICBFbGY2NF9TaGRyICpzZWNoZHJzLFxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLXNlY3Rpb25zLmM9MTAxPXN0YXRpYyBib29sIHJlbGFfbmVlZHNfcGx0X2dvdF9lbnRyeShjb25zdCBFbGZfUmVsYSAqcmVsYSlcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS1zZWN0aW9ucy5jLTExMi1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUtc2VjdGlvbnMuYzoxMTM6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS1zZWN0aW9ucy5jLTExNC1cXHRcXHRcXHQgICAgICBjaGFyICpzZWNzdHJpbmdzLCBzdHJ1Y3QgbW9kdWxlICptb2QpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jPTU5PXN0YXRpYyB2b2lkIGNoZWNrX3JlbGEoRWxmX1JlbGEgKnJlbGEsIHN0cnVjdCBtb2R1bGUgKm1lKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYy0xMDctICovXFxuYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYzoxMDg6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXFxuYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYy0xMDktXFx0XFx0XFx0ICAgICAgY2hhciAqc2Vjc3RyaW5ncywgc3RydWN0IG1vZHVsZSAqbWUpXFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9tb2R1bGUuYy0yNC0vKiBNYWtlIGdlbmVyaWMgY29kZSBpZ25vcmUgU1RUX1JFR0lTVEVSIGR1bW15IHVuZGVmaW5lZCBzeW1ib2xzLiAgKi9cXG5hcmNoL3NwYXJjL2tlcm5lbC9tb2R1bGUuYzoyNTppbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqaGRyLFxcbmFyY2gvc3BhcmMva2VybmVsL21vZHVsZS5jLTI2LVxcdFxcdFxcdCAgICAgIEVsZl9TaGRyICpzZWNoZHJzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tb2R1bGVsb2FkZXIuaD0xNz1ib29sIG1vZHVsZV9lbGZfY2hlY2tfYXJjaChFbGZfRWhkciAqaGRyKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW9kdWxlbG9hZGVyLmgtMTktLyogQWRqdXN0IGFyY2gtc3BlY2lmaWMgc2VjdGlvbnMuICBSZXR1cm4gMCBvbiBzdWNjZXNzLiAgKi9cXG5pbmNsdWRlL2xpbnV4L21vZHVsZWxvYWRlci5oOjIwOmludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICpoZHIsXFxuaW5jbHVkZS9saW51eC9tb2R1bGVsb2FkZXIuaC0yMS1cXHRcXHRcXHQgICAgICBFbGZfU2hkciAqc2VjaGRycyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NDg6NDguNTQ1OTAzMDgxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0ODUwMDIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFyY2hpdGVjdHVyZSBNb2R1bGUgVGhvdWdodHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gYG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnNgIGlzIGRlZmluaXRlbHkgYSBzb2xpZCBuYW1lLCBpdCBjb21tdW5pY2F0ZXMgdGhlIGdlbmVyYWwgcHVycG9zZSBvZiB0aGlzIG1vZHVsZSBxdWl0ZSBlZmZlY3RpdmVseS4gSXQncyBhIGNsZWFyIGRlc2NyaXB0b3Igb2YgaXRzIGZ1bmN0aW9uIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4gQnV0LCBJJ20gYWxyZWFkeSB0aGlua2luZyBwYXN0IHRoYXQgLSB3aGF0IGFib3V0IGBleGVjbWVtX2FyY2hfc2V0dXBgPyBUaGF0IHBocmFzZSBoaWdobGlnaHRzIHRoZSBzcGVjaWZpYyBhc3BlY3Qgb2YgZXhlY3V0aW9uIG1lbW9yeSBzZXR1cCBhdCB0aGUgYXJjaGl0ZWN0dXJhbCBsZXZlbC4gSSdtIHdlaWdoaW5nIHVwIHRoZSBwb3RlbnRpYWwgZm9yIGEgbmFtZSB0aGF0IGNhcHR1cmVzIHRoZSBzZXR1cCBvZiBleGVjdXRpb24gbWVtb3J5IHZlcnN1cyB0aGUgcG90ZW50aWFsIG1vcmUgZ2VuZXJpYyBuYW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAzMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE0OjQ4OjUyLjQ5NDQwNTA4NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDIzOTQ5NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCBcXFxcKmV4ZWNtZW1fYXJjaF9zZXR1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9tbS9pbml0LmM9NDQ5PXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XFxuYXJjaC9hcm0vbW0vaW5pdC5jLTQ1MC1cXG5hcmNoL2FybS9tbS9pbml0LmM6NDUxOnN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcXG5hcmNoL2FybS9tbS9pbml0LmMtNDUyLXtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vaW5pdC5jPTUwMz1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xcbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTUwNC1cXG5hcmNoL2FybTY0L21tL2luaXQuYzo1MDU6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTUwNi17XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmM9MjQwPXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XFxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jLTI0MS1cXG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmM6MjQyOnN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcXG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmMtMjQzLXtcXG4tLVxcbmFyY2gvbWlwcy9tbS9pbml0LmM9NTYzPXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XFxuYXJjaC9taXBzL21tL2luaXQuYy01NjQtXFxuYXJjaC9taXBzL21tL2luaXQuYzo1NjU6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbmFyY2gvbWlwcy9tbS9pbml0LmMtNTY2LXtcXG4tLVxcbmFyY2gvbmlvczIvbW0vaW5pdC5jPTEzNz1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xcbmFyY2gvbmlvczIvbW0vaW5pdC5jLTEzOC1cXG5hcmNoL25pb3MyL21tL2luaXQuYzoxMzk6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbmFyY2gvbmlvczIvbW0vaW5pdC5jLTE0MC17XFxuLS1cXG5hcmNoL3BhcmlzYy9tbS9pbml0LmM9OTc3PXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XFxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTk3OC1cXG5hcmNoL3BhcmlzYy9tbS9pbml0LmM6OTc5OnN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcXG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtOTgwLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9tZW0uYz0zOTI9c3RhdGljIHZvaWQgcHJlYWxsb2NfZXhlY21lbV9wZ3RhYmxlKHZvaWQpIHsgfVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL21lbS5jLTM5NC1cXG5hcmNoL3Bvd2VycGMvbW0vbWVtLmM6Mzk1OnN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcXG5hcmNoL3Bvd2VycGMvbW0vbWVtLmMtMzk2LXtcXG4tLVxcbmFyY2gvcmlzY3YvbW0vaW5pdC5jPTE0NDg9c3RhdGljIHN0cnVjdCBleGVjbWVtX2luZm8gZXhlY21lbV9pbmZvIF9fcm9fYWZ0ZXJfaW5pdDtcXG5hcmNoL3Jpc2N2L21tL2luaXQuYy0xNDQ5LVxcbmFyY2gvcmlzY3YvbW0vaW5pdC5jOjE0NTA6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbmFyY2gvcmlzY3YvbW0vaW5pdC5jLTE0NTEte1xcbi0tXFxuYXJjaC9zMzkwL21tL2luaXQuYz0yOTM9c3RhdGljIHN0cnVjdCBleGVjbWVtX2luZm8gZXhlY21lbV9pbmZvIF9fcm9fYWZ0ZXJfaW5pdDtcXG5hcmNoL3MzOTAvbW0vaW5pdC5jLTI5NC1cXG5hcmNoL3MzOTAvbW0vaW5pdC5jOjI5NTpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXFxuYXJjaC9zMzkwL21tL2luaXQuYy0yOTYte1xcbi0tXFxuYXJjaC9zcGFyYy9tbS9leGVjbWVtLmM9NT1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xcbmFyY2gvc3BhcmMvbW0vZXhlY21lbS5jLTYtXFxuYXJjaC9zcGFyYy9tbS9leGVjbWVtLmM6NzpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXFxuYXJjaC9zcGFyYy9tbS9leGVjbWVtLmMtOC17XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0LmM9MTA2MD12b2lkIGV4ZWNtZW1fZmlsbF90cmFwcGluZ19pbnNucyh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxcbi0tXFxuYXJjaC94ODYvbW0vaW5pdC5jLTEwNjUtXFxuYXJjaC94ODYvbW0vaW5pdC5jOjEwNjY6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbmFyY2gveDg2L21tL2luaXQuYy0xMDY3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NDg6NTQuNTE4MzU5MzgxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwNzQ2NTAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipGdXp6aW5nIHRoZSBgZXhlY21lbWAgTW9kdWxlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHBvaW50cyB0byB0YXJnZXQgZm9yIGZ1enppbmcgd2l0aGluIHRoZSBgZXhlY21lbWAgbW9kdWxlLiBMZXQncyBzZWUuLi4gYGV4ZWNtZW1fYXJjaF9zZXR1cGAgaXMgYmFzaWNhbGx5IHRoZSBgX19pbml0YCBvZiB0aGlzIHdob2xlIHRoaW5nLCByaWdodD8gVGhhdCBtZWFucyBpdCBydW5zIG9uY2UgYXQgYm9vdCwgYW5kIGl0J3Mgbm90IGdvaW5nIHRvIGJlIHN1cGVyIGhlbHBmdWwgZm9yIGZ1enppbmcuIFdlIG5lZWQgc29tZXRoaW5nIHRoYXQncyByZXBlYXRlZGx5IGNhbGxlZCBhbmQgcHJvY2Vzc2VzIHBvdGVudGlhbGx5IG1hbGZvcm1lZCBpbnB1dCBvciBzb21ldGhpbmcuIGBleGVjbWVtX3NwbGl0YCBsb29rcyBwcm9taXNpbmcuIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuXG5cbkhtbSwgd2hhdCBhYm91dCBgZXhlY21lbV9hbGxvY2A/IEl0IGFwcGVhcnMgdW5tb2RpZmllZCwgYnV0IG1heWJlIHRoZXJlJ3Mgc29tZSB1c2VmdWwgZnVuY3Rpb25hbGl0eSBhZnRlciB0aGF0LiBBaCwgaGEhIEkgc2VlIHRoYXQgYGV4ZWNtZW1fY2FjaGVfcG9wdWxhdGVfYWxsb2NgICppcyogbW9kaWZpZWQsIHdoaWNoIHByb2JhYmx5IG1lYW5zIHRoYXQncyB0aGUgb25lIEkgbmVlZCB0byBmb2N1cyBvbiBuZXh0LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zLCBidXQgYGV4ZWNtZW1fY2FjaGVfcG9wdWxhdGVfYWxsb2NgIGxvb2tzIGxpa2UgdGhlIHByaW1hcnkgdGFyZ2V0IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzYxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NDg6NTguOTI1ODM5NDQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkyOTgzOTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgdm9pZCBcXFxcKmV4ZWNtZW1fY2FjaGVfcG9wdWxhdGVfYWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZXhlY21lbS5jPTI3MD1zdGF0aWMgdm9pZCAqX19leGVjbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBleGVjbWVtX3JhbmdlICpyYW5nZSwgc2l6ZV90IHNpemUpXFxuLS1cXG5tbS9leGVjbWVtLmMtMjc2LVxcbm1tL2V4ZWNtZW0uYzoyNzc6c3RhdGljIHZvaWQgKmV4ZWNtZW1fY2FjaGVfcG9wdWxhdGVfYWxsb2Moc3RydWN0IGV4ZWNtZW1fcmFuZ2UgKnJhbmdlLCBzaXplX3Qgc2l6ZSlcXG5tbS9leGVjbWVtLmMtMjc4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NDk6MDAuOTE4ODY4ODk2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDUxMTI5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgQWxsb2NhdGlvbiBTdHJhdGVneSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gKmBleGVjbWVtX2NhY2hlX3BvcHVsYXRlX2FsbG9jYCouLi4gdGhhdCdzIGEgKnN0YXRpYyogZnVuY3Rpb24uIFJpZ2h0IGF3YXksIHRoYXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGF0IG1lYW5zIGl0J3MgaW50ZXJuYWwgdG8gd2hhdGV2ZXIgY29tcGlsYXRpb24gdW5pdCBpdCdzIGRlZmluZWQgaW4sIGxpa2VseSByZWxhdGVkIHRvIHRoZSBleGVjdXRpb24gbWVtb3J5IG1hbmFnZW1lbnQuIEl0J3Mgbm90IG1lYW50IHRvIGJlIGRpcmVjdGx5IGNhbGxlZCBmcm9tIGVsc2V3aGVyZSBpbiB0aGUgc3lzdGVtLCB3aGljaCBzdWdnZXN0cyBhIHRpZ2h0bHkgY29udHJvbGxlZCwgcG9zc2libHkgb3B0aW1pemVkLCBhbGxvY2F0aW9uIHJvdXRpbmUgZm9yIGEgc3BlY2lmaWMgcHVycG9zZS4gQW5kIHRoZSBmYWN0IHRoYXQgKmBleGVjbWVtX2FsbG9jYCogY2FsbHMgdGhpcyBzdGF0aWMgZnVuY3Rpb24uLi4gdGhhdCdzIHRoZSBrZXkgcmVsYXRpb25zaGlwLiAqYGV4ZWNtZW1fYWxsb2NgKiBpcyBsaWtlbHkgdGhlIHB1YmxpYy1mYWNpbmcgZW50cnkgcG9pbnQsIHRoZSBmdW5jdGlvbiB0aGF0IHVzZXJzIG9mIHRoaXMgZXhlY3V0aW9uIG1lbW9yeSBzdWJzeXN0ZW0gd291bGQgY2FsbC4gQW5kICpgZXhlY21lbV9jYWNoZV9wb3B1bGF0ZV9hbGxvY2AqIGlzIHRoZSAqd29ya2hvcnNlKiwgdGhlIHVuc3VuZyBoZXJvIHRoYXQgYWN0dWFsbHkgZG9lcyB0aGUgZGlydHkgd29yayBvZiBhbGxvY2F0aW5nIGZyb20gdGhlIGNhY2hlLiBUaGlzIGlzIGEgY2xhc3NpYyBwYXR0ZXJuLCBhIGNvbnRyb2xsZWQgaW50ZXJmYWNlIHdpdGggYSBoaWRkZW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLiBUaGF0IHN0cnVjdHVyZSBpcyBkZXNpZ25lZCBmb3IgZWZmaWNpZW5jeSBhbmQgc2FmZXR5LCBsaWtlbHkgaGlkaW5nIGFsbCBraW5kcyBvZiBjYWNoZSBtYW5hZ2VtZW50IGNvbXBsZXhpdHkuIEknZCBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucywgYnV0IHRoZSBkZXNpZ24gaXMgYSBmYW1pbGlhciBhbmQgc2Vuc2libGUgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgwMiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE0OjQ5OjA0Ljc2Mzk4NDMxNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NTI2MzUzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBcXFxcKmV4ZWNtZW1fYWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9leGVjbWVtLmg9MTMzPXN0cnVjdCBleGVjbWVtX2luZm8gKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZXhlY21lbS5oLTE1MC0gKi9cXG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaDoxNTE6dm9pZCAqZXhlY21lbV9hbGxvYyhlbnVtIGV4ZWNtZW1fdHlwZSB0eXBlLCBzaXplX3Qgc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9leGVjbWVtLmgtMTUyLVxcbi0tXFxuaW5jbHVkZS9saW51eC9leGVjbWVtLmgtMTcyLSAqL1xcbmluY2x1ZGUvbGludXgvZXhlY21lbS5oOjE3Mzp2b2lkICpleGVjbWVtX2FsbG9jX3J3KGVudW0gZXhlY21lbV90eXBlIHR5cGUsIHNpemVfdCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaC0xNzQtXFxuLS1cXG5tbS9leGVjbWVtLmM9NDkxPXN0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpXFxuLS1cXG5tbS9leGVjbWVtLmMtNDk2LVxcbm1tL2V4ZWNtZW0uYzo0OTc6dm9pZCAqZXhlY21lbV9hbGxvYyhlbnVtIGV4ZWNtZW1fdHlwZSB0eXBlLCBzaXplX3Qgc2l6ZSlcXG5tbS9leGVjbWVtLmMtNDk4LXtcXG4tLVxcbm1tL2V4ZWNtZW0uYy01MTQtXFxubW0vZXhlY21lbS5jOjUxNTp2b2lkICpleGVjbWVtX2FsbG9jX3J3KGVudW0gZXhlY21lbV90eXBlIHR5cGUsIHNpemVfdCBzaXplKVxcbm1tL2V4ZWNtZW0uYy01MTYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo0OTowNi40NDkyNTE2NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzkzNDY2OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczpcblxuKipLZXJuZWwgTWVtb3J5IEFsbG9jYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gY29kZSBoZXJlLiBTcGVjaWZpY2FsbHksIGBleGVjbWVtX2FsbG9jX3J3YCBpcyBjYWxsZWQgYnkgYG1vZHVsZV9tZW1vcnlfYWxsb2NgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIGludGVncmF0ZSB0aGVzZSBuZXcgZnVuY3Rpb25zIGludG8gbXkgdW5kZXJzdGFuZGluZy4gUmlnaHQsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhZGQgYGV4ZWNtZW1fYWxsb2NfcndgIGFuZCB0aGUgYGV4ZWNtZW1fc3BsaXRgIGZ1bmN0aW9uIHRvIG15IG1lbnRhbCBtYXAgb2YgaG93IHRoaXMgYWxsIHdvcmtzLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgaG93IHRoZXkgZml0IHdpdGhpbiB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIG1vZHVsZSBtZW1vcnkgbWFuYWdlbWVudC5cblxuQW5kIHRoZW4gdGhlcmUncyBgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuY2AuIEkgc2VlIHRoYXQgaXQncyBiZWVuIG1vZGlmaWVkLCBzbyBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHJldmlldyB0aG9zZSBjaGFuZ2VzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiBmdW5jdGlvbiB0cmFjaW5nLiBJJ2xsIGtlZXAgdGhpcyBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQzNiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE0OjQ5OjEwLjg0MjcyMDg2OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxOTA3MDQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0va2VybmVsL2Z0cmFjZS5jPTk4PXN0YXRpYyBpbnQgZnRyYWNlX21vZGlmeV9jb2RlKHVuc2lnbmVkIGxvbmcgcGMsIHVuc2lnbmVkIGxvbmcgb2xkLFxcbi0tXFxuYXJjaC9hcm0va2VybmVsL2Z0cmFjZS5jLTEyMS1cXG5hcmNoL2FybS9rZXJuZWwvZnRyYWNlLmM6MTIyOmludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYylcXG5hcmNoL2FybS9rZXJuZWwvZnRyYWNlLmMtMTIzLXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jPTIxMz1zdGF0aWMgaW50IGZ0cmFjZV9tb2RpZnlfY29kZSh1bnNpZ25lZCBsb25nIHBjLCB1MzIgb2xkLCB1MzIgbmV3LFxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvZnRyYWNlLmMtMjQxLSAqL1xcbmFyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jOjI0MjppbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpXFxuYXJjaC9hcm02NC9rZXJuZWwvZnRyYWNlLmMtMjQzLXtcXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvZnRyYWNlLmM9MTIxPWludCBmdHJhY2VfbWFrZV9ub3Aoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLFxcbi0tXFxuYXJjaC9jc2t5L2tlcm5lbC9mdHJhY2UuYy0xMjYtXFxuYXJjaC9jc2t5L2tlcm5lbC9mdHJhY2UuYzoxMjc6aW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxcbmFyY2gvY3NreS9rZXJuZWwvZnRyYWNlLmMtMTI4LXtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9mdHJhY2VfZHluLmM9MTE3PWludCBmdHJhY2VfbW9kaWZ5X2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBvbGRfYWRkciwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2Z0cmFjZV9keW4uYy0xMzYtXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2Z0cmFjZV9keW4uYzoxMzc6aW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9mdHJhY2VfZHluLmMtMTM4LXtcXG4tLVxcbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZnRyYWNlLmM9MTUzPWludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZnRyYWNlLmMtMTY1LVxcbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZnRyYWNlLmM6MTY2OmludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYylcXG5hcmNoL21pY3JvYmxhemUva2VybmVsL2Z0cmFjZS5jLTE2Ny17XFxuLS1cXG5hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jPTE5Nz1pbnQgZnRyYWNlX21ha2VfY2FsbChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jLTIyMC1cXG5hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jOjIyMTppbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpXFxuYXJjaC9taXBzL2tlcm5lbC9mdHJhY2UuYy0yMjIte1xcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2Z0cmFjZS5jPTg4PWludCBmdHJhY2VfZGlzYWJsZV9mdHJhY2VfZ3JhcGhfY2FsbGVyKHZvaWQpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvZnRyYWNlLmMtOTUtI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9mdHJhY2UuYzo5NjppbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpXFxuYXJjaC9wYXJpc2Mva2VybmVsL2Z0cmFjZS5jLTk3LXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvdHJhY2UvZnRyYWNlLmM9NDcwPWludCBmdHJhY2VfaW5pdF9ub3Aoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFjZS9mdHJhY2UuYy01NDktXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFjZS9mdHJhY2UuYzo1NTA6aW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvdHJhY2UvZnRyYWNlLmMtNTUxLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvdHJhY2UvZnRyYWNlXzY0X3BnLmM9NjM3PWludCBmdHJhY2VfbW9kaWZ5X2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBvbGRfYWRkcixcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvdHJhY2UvZnRyYWNlXzY0X3BnLmMtNjY3LVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvdHJhY2UvZnRyYWNlXzY0X3BnLmM6NjY4OmludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYylcXG5hcmNoL3Bvd2VycGMva2VybmVsL3RyYWNlL2Z0cmFjZV82NF9wZy5jLTY2OS17XFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYz0xNzc9ZnRyYWNlX2Z1bmNfdCBmdHJhY2VfY2FsbF9kZXN0ID0gZnRyYWNlX3N0dWI7XFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6MTc4OmludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYylcXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0xNzkte1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYz0yMzY9aW50IGZ0cmFjZV9tYWtlX2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYy0yNDMtXFxuYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYzoyNDQ6aW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxcbmFyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmMtMjQ1LXtcXG4tLVxcbmFyY2gvc2gva2VybmVsL2Z0cmFjZS5jPTE5Mj1zdGF0aWMgaW50IGZ0cmFjZV9tb2RpZnlfY29kZSh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBjaGFyICpvbGRfY29kZSxcXG4tLVxcbmFyY2gvc2gva2VybmVsL2Z0cmFjZS5jLTIyMS1cXG5hcmNoL3NoL2tlcm5lbC9mdHJhY2UuYzoyMjI6aW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxcbmFyY2gvc2gva2VybmVsL2Z0cmFjZS5jLTIyMy17XFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYz02Nj1pbnQgZnRyYWNlX21ha2VfY2FsbChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYy03NS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYzo3NjppbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpXFxuYXJjaC9zcGFyYy9rZXJuZWwvZnRyYWNlLmMtNzcte1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jPTE4MD1pbnQgZnRyYWNlX21vZGlmeV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgb2xkX2FkZHIsXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMtMTg2LVxcbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYzoxODc6aW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxcbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy0xODgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo0OToxMi44NjE4MDU1MTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA0MDkzMzg0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFybTY0IEZ0cmFjZSBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYXJjaC9hcm02NC9rZXJuZWwvZnRyYWNlLmNgIGRpZmYuIEluaXRpYWxseSwgSSBzYXcgdGhlIGNoYW5nZXMgdG8gYGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmNgLCBidXQgdGhhdCBzZWVtcyBtb3JlIGxpa2UgYSBjb250ZXh0dWFsIGNoYW5nZS4gVGhlIHJlYWwgbWVhdCBvZiB0aGUgdXBkYXRlIGlzIHdpdGhpbiBgZ2V0X2Z0cmFjZV9wbHRgLCB3aGljaCBpcywgaW50ZXJlc3RpbmdseSwgc3RhdGljLiBNeSBpbml0aWFsIGZvY3VzIHdhcyBvbiB0aGUgd3JvbmcgZnVuY3Rpb24sIGl0IHNlZW1zISBBbmQgYWxzbyB0aGUgY2hhbmdlcyB0byBgZnRyYWNlX2ZpbmRfY2FsbGFibGVfYWRkcmAsIGFub3RoZXIgc3RhdGljIGZ1bmN0aW9uLiBcblxuVGhpcyBtZWFucyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGxvY2FsaXplZCB3aXRoaW4gdGhlIGZpbGUsIGxpa2VseSBpbXBhY3RpbmcgaG93IFBMVCBlbnRyaWVzIGFyZSBoYW5kbGVkIHNwZWNpZmljYWxseSBmb3IgRnRyYWNlIHdpdGhpbiB0aGlzIGFyY2hpdGVjdHVyZS4gVGhlIGBnZXRfZnRyYWNlX3BsdGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseS4gTGV0IG1lIHF1aWNrbHkgc2hpZnQgbXkgZm9jdXMgdG8gaG93IFBMVCBlbnRyaWVzIGFyZSBlbWl0dGVkLiBJIHdvbmRlciBpZiB0aGlzIGFmZmVjdHMgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmZhY2Ugd2l0aCBgbW9kdWxlX2VtaXRfcGx0X2VudHJ5YCwgb3IgcmVsYXRlZCBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMwNywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo0OToxNy45MDI3NDE3MjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTY3Mzc5NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnU2NCBtb2R1bGVfZW1pdF9wbHRfZW50cnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaD0xNj1zdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMge1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaC0yMi1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oOjIzOnU2NCBtb2R1bGVfZW1pdF9wbHRfZW50cnkoc3RydWN0IG1vZHVsZSAqbW9kLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmgtMjQtXFx0XFx0XFx0ICB2b2lkICpsb2MsIGNvbnN0IEVsZjY0X1JlbGEgKnJlbGEsXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jPTQxPXN0YXRpYyBib29sIHBsdF9lbnRyaWVzX2VxdWFsKGNvbnN0IHN0cnVjdCBwbHRfZW50cnkgKmEsXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jLTY4LVxcbmFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmM6Njk6dTY0IG1vZHVsZV9lbWl0X3BsdF9lbnRyeShzdHJ1Y3QgbW9kdWxlICptb2QsIEVsZjY0X1NoZHIgKnNlY2hkcnMsXFxuYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYy03MC1cXHRcXHRcXHQgIHZvaWQgKmxvYywgY29uc3QgRWxmNjRfUmVsYSAqcmVsYSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NDk6MjAuMzE5NDg0Njc2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzc5NjEyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHRzLCBhcyBJIHVuZGVyc3RhbmQgdGhlIHNpdHVhdGlvbjpcblxuKipSZWZsZWN0aW5nIG9uIENvZGUgRXhwb3J0IGFuZCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoYXQgYG1vZHVsZV9lbWl0X3BsdF9lbnRyeWAgaXMgZXhwb3NlZCBnbG9iYWxseS4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgcG9pbnQgdG8gbm90ZSBpbW1lZGlhdGVseSDigJMgaXQncyBnb2luZyB0byBiZSBhY2Nlc3NpYmxlIG91dHNpZGUgaXRzIGludGVuZGVkIHNjb3BlLCB3aGljaCBhbHdheXMgaW50cm9kdWNlcyBwb3RlbnRpYWwgcmlza3MgYW5kIGRlc2lnbiBjb25zaWRlcmF0aW9ucy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGhvdyB0aGF0IGV4cG9ydCBhZmZlY3RzIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQgaWYgaXQgd2FzIGRvbmUgaW50ZW50aW9uYWxseS4gSSBzaG91bGQgYWxzbyBzZWUgd2hlcmUgaXQgaXMgdXNlZC5cblxuVGhlbiB0aGVyZSBpcyB0aGUgbW9kaWZpY2F0aW9uIHRvIGBtb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnBgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGN1cnJlbnQgY2hhbmdlcyBhcmUgbm90IGlzb2xhdGVkLCBzbyB0aGUgaW1wYWN0IGlzIGxhcmdlciB0aGFuIGp1c3Qgb25lIGFyZWEuIEnigJlsbCBiZSBjaGVja2luZyB0aGUgaW50ZXJkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGNsb3NlbHkgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjaGFuZ2UgcHJvcGFnYXRlcy4gVGhpcyBtaWdodCBiZSBhIHN5bXB0b20gb2YgYSBsYXJnZXIgcmVmYWN0b3IsIG9yIGEgdGFyZ2V0ZWQgZml4LCBidXQgZWl0aGVyIHdheSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlIGFuZCBpZiB0aGUgaW50ZW5kZWQgcHVycG9zZSBvZiB0aGUgY29kZSBpcyBzdGlsbCB2YWxpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwMzEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo0OToyNC42OTc0NDk1MjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTQ1OTgyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnU2NCBtb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaD0yMz11NjQgbW9kdWxlX2VtaXRfcGx0X2VudHJ5KHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycyxcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmgtMjYtXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaDoyNzp1NjQgbW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwKHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycyxcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oLTI4LVxcdFxcdFxcdFxcdHZvaWQgKmxvYywgdTY0IHZhbCk7XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jPTY5PXU2NCBtb2R1bGVfZW1pdF9wbHRfZW50cnkoc3RydWN0IG1vZHVsZSAqbW9kLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYy05OS0jaWZkZWYgQ09ORklHX0FSTTY0X0VSUkFUVU1fODQzNDE5XFxuYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYzoxMDA6dTY0IG1vZHVsZV9lbWl0X3ZlbmVlcl9mb3JfYWRycChzdHJ1Y3QgbW9kdWxlICptb2QsIEVsZjY0X1NoZHIgKnNlY2hkcnMsXFxuYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYy0xMDEtXFx0XFx0XFx0XFx0dm9pZCAqbG9jLCB1NjQgdmFsKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo0OToyNi42NTIwNTUwOTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTczOTQyNzQwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEFSTTY0IE1vZHVsZSBFeGVjdXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgYWZ0ZXIgYSBxdWljayBzY2FuLCBgbW9kdWxlX2VtaXRfcGx0X2VudHJ5YCwgYG1vZHVsZV9lbWl0X3ZlbmVlcl9mb3JfYWRycGAsIGBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zYCwgYGV4ZWNtZW1fc3BsaXRgLCBhbmQgYGV4ZWNtZW1fYWxsb2NfcndgIGFyZSB0aGUga2V5IGFyZWFzIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIFRob3NlIHN5bWJvbHMgc2VlbSBjZW50cmFsIHRvIHRoZSBleGVjdXRpb24gZmxvdywgZXNwZWNpYWxseSBjb25jZXJuaW5nIFBMVHMgYW5kIG1lbW9yeSBhbGxvY2F0aW9uLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBgQVJDSF9IQVNfRVhFQ01FTV9ST1hgIGJlaW5nIHNlbGVjdGVkIGJ5IGBBUk02NGAgaXMgdGhlIGZpcnN0IHRoaW5nIHRvIG5vdGUuIFRoZSBjb2RlIGluIGBhcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jYCBpcyBjbGVhcmx5IGxpbmtlZCB0byBgQ09ORklHX0RZTkFNSUNfRlRSQUNFYCwgYW5kIHRoZSBzYW1lIGNvbmZpZyBhbHNvIHNob3dzIHVwIGluIGBhcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuY2AuIFRoZSBgQ09ORklHX0VYRUNNRU1gIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgc3VyZmFjZXMgaW4gYGFyY2gvYXJtNjQvbW0vaW5pdC5jYC4gSW50ZXJlc3RpbmcsIGFuZCBgYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jYCBkb2Vzbid0IGV4cGxpY2l0bHkgcmVseSBvbiBpZmRlZnMgYnV0IGNhbGxzIGBzeXN0ZW1fc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCgpYC5cblxuQmFzZWQgb24gdGhpcywgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBlbmFibGUgYEVYRUNNRU1gLCBgRFlOQU1JQ19GVFJBQ0VgLCBhbmQgYE1PRFVMRVNgLiBIb3dldmVyLCB3YWl0IGEgbWludXRlLCBgRVhFQ01FTWAgaXMgYSBjb25maWd1cmFibGUgb3B0aW9uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoZXRoZXIgaXQncyB1c2VyLXNlbGVjdGFibGUgb3IgaWYgYW5vdGhlciBvcHRpb24gaXMgYXV0b21hdGljYWxseSBlbmFibGluZyBpdC4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzZWxlY3Rpb24gbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjI4LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE0OjQ5OjMyLjM5MTQ4NDgxM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNzMxNDI5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeY29uZmlnIEVYRUNNRU1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xNDU0PWNvbmZpZyBJT01NVV9NTV9EQVRBXFxuLS1cXG5tbS9LY29uZmlnLTE0NTYtXFxubW0vS2NvbmZpZzoxNDU3OmNvbmZpZyBFWEVDTUVNXFxubW0vS2NvbmZpZy0xNDU4LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NDk6MzQuMzE4ODAyNDk4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MjYzODUyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqSGlkZGVuIEJvb2wgYEVYRUNNRU1gIC0gQ29udGV4dHVhbCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHRoZXJlJ3MgdGhpcyBgRVhFQ01FTWAgdmFyaWFibGUg4oCTIGl0J3MgaGlkZGVuLCB3aGljaCBhbHdheXMgcGlxdWVzIG15IGludGVyZXN0LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgKndoeSogaXQncyBoaWRkZW4gYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIFRoZSBmYWN0IHRoYXQgaXQncyBhIGJvb2wgc3VnZ2VzdHMgaXQncyBsaWtlbHkgYSBmbGFnLCBhbiBvbi9vZmYgc3dpdGNoIGZvciBzb21lIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkuIEdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBrZXJuZWwgaW50ZXJuYWxzLCBteSBmaXJzdCB0aG91Z2h0IGdvZXMgdG8gd2hlcmUgdGhpcyBmbGFnIGlzIHByb2JhYmx5IHNldC4gSXQncyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSBleGVjdXRhYmxlIG1lbW9yeSB3aXRoaW4gdGhlIGtlcm5lbC5cblxuQ29uc2lkZXJpbmcgdGhlIHVzdWFsIHN1c3BlY3RzLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBNT0RVTEVTYC4gVGhlIGxvYWRpbmcgYW5kIG1hbmFnZW1lbnQgb2Yga2VybmVsIG1vZHVsZXMsIHdpdGggdGhlaXIgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBleGVjdXRhYmxlIGNvZGUgc2VjdGlvbnMsIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZS4gVGhlbiBhZ2FpbiwgYEtQUk9CRVNgIGFsc28gY29tZSB0byBtaW5kLiBUaGVzZSBpbnZvbHZlIGluamVjdGluZyBwcm9iZXMgaW50byBydW5uaW5nIGtlcm5lbCBjb2RlLCB3aGljaCBvZnRlbiBtZWFucyBtb2RpZnlpbmcgZXhlY3V0YWJsZSBtZW1vcnkgYXQgcnVudGltZS4gQW5kIGZpbmFsbHksIG9mIGNvdXJzZSwgdGhlcmUncyBgQlBGX0pJVGAsIHdoZXJlIHdlJ3JlIGNvbXBpbGluZyBhbmQgaW5qZWN0aW5nIEJQRiBjb2RlLCB2ZXJ5IGxpa2VseSBpbnZvbHZpbmcgZXhlY3V0YWJsZSBtZW1vcnkgcmVnaW9ucyBhcyB3ZWxsLiBJJ20gd2lsbGluZyB0byBiZXQgaXQncyBiZWluZyB0b2dnbGVkIGJ5IG9uZSBvZiB0aGVzZSwgb3IgbWF5YmUgYWxsIG9mIHRoZW0sIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhvc2UgYXJlYXMgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgY29uZGl0aW9ucyB0aGF0IHNldCB0aGlzIHBhcnRpY3VsYXIgZmxhZy4gSXQncyB0aW1lIHRvIGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucyBhbmQgYXNzb2NpYXRlZCBjb2RlIHBhdGhzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI5NSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE0OjQ5OjM5LjI0NTE5MTE3NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NjQxODI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgRVhFQ01FTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL0tjb25maWc9MTE3PWNvbmZpZyBLUFJPQkVTXFxuLS1cXG5hcmNoL0tjb25maWctMTIwLVxcdHNlbGVjdCBLQUxMU1lNU1xcbmFyY2gvS2NvbmZpZzoxMjE6XFx0c2VsZWN0IEVYRUNNRU1cXG5hcmNoL0tjb25maWctMTIyLVxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz0yMz1jb25maWcgWDg2XzY0XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTM3LVxcdHNlbGVjdCBaT05FX0RNQTMyXFxuYXJjaC94ODYvS2NvbmZpZzozODpcXHRzZWxlY3QgRVhFQ01FTSBpZiBEWU5BTUlDX0ZUUkFDRVxcbmFyY2gveDg2L0tjb25maWctMzktXFx0c2VsZWN0IEFDUElfTVJSTSBpZiBBQ1BJXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTI2NTE9Y29uZmlnIE1JVElHQVRJT05fSVRTXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTI2NTQtXFx0ZGVwZW5kcyBvbiBNSVRJR0FUSU9OX1JFVFBPTElORSBcXHUwMDI2XFx1MDAyNiBNSVRJR0FUSU9OX1JFVEhVTktcXG5hcmNoL3g4Ni9LY29uZmlnOjI2NTU6XFx0c2VsZWN0IEVYRUNNRU1cXG5hcmNoL3g4Ni9LY29uZmlnLTI2NTYtXFx0ZGVmYXVsdCB5XFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWc9NDI9Y29uZmlnIEJQRl9KSVRcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy00NS1cXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbmtlcm5lbC9icGYvS2NvbmZpZzo0NjpcXHRzZWxlY3QgRVhFQ01FTVxcbmtlcm5lbC9icGYvS2NvbmZpZy00Ny1cXHRoZWxwXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9Mj1tZW51Y29uZmlnIE1PRFVMRVNcXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy00LVxcdG1vZHVsZXNcXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6NTpcXHRzZWxlY3QgRVhFQ01FTVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy02LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NDk6NDAuNzMxNjEzNTM0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNjA4NDIyMzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBBUk02NCBNb2R1bGUgYW5kIEV4ZWN1dGFibGUgTWVtb3J5IENoYW5nZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBNT0RVTEVTYCBpcyBzZWxlY3RpbmcgYEVYRUNNRU1gLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggaG93IHdlIGhhbmRsZSBleGVjdXRhYmxlIG1lbW9yeSBmb3IgbW9kdWxlcy4gQ29uc2VxdWVudGx5LCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYm90aCBgTU9EVUxFU2AgYW5kIGBEWU5BTUlDX0ZUUkFDRWAgYXJlIGVuYWJsZWQuXG5cbkJleW9uZCB0aG9zZSBjb3JlIGNvbmZpZ3MsIEkgbmVlZCB0byBjaGVjayBmb3Igb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoZSBtZW50aW9ucyBvZiBgQ09ORklHX0tBU0FOX1NXX1RBR1NgIGFuZCBgQ09ORklHX0FSTTY0X0VSUkFUVU1fODQzNDE5YCBzZWVtIHJlbGF0ZWQsIGJ1dCBsZXQncyBzZWUgaG93IHRoZXkgaW50ZWdyYXRlLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIGBNT0RVTEVTYCBhbmQgYERZTkFNSUNfRlRSQUNFYC5cblxuTm93LCBsZXQncyBkaXNzZWN0IHRoZSBjaGFuZ2VzIGF0IHRoZSBjb2RlIGxldmVsLiBJJ20gc2VlaW5nIHNpZ25pZmljYW50IG1vZGlmaWNhdGlvbnMgYWNyb3NzIHZhcmlvdXMgZmlsZXM6XG5cbjEuICBgYXJjaC9hcm02NC9LY29uZmlnYCBub3cgZXhwbGljaXRseSBzZWxlY3RzIGBBUkNIX0hBU19FWEVDTUVNX1JPWGAsIHNldHRpbmcgdGhlIHN0YWdlIGZvciByZWFkLW9ubHkgZXhlY3V0YWJsZSBtZW1vcnkuXG4yLiAgU2V2ZXJhbCBoZWFkZXIgZmlsZXMgKGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oYCwgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmxkcy5oYCkgYXJlIGNsZWFuaW5nIHVwIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcywgcGFydGljdWxhcmx5IHJlZ2FyZGluZyBGdHJhY2UgdHJhbXBvbGluZXMuXG4zLiAgVGhlIEZ0cmFjZSBjb2RlIChgYXJjaC9hcm02NC9rZXJuZWwvZnRyYWNlLmNgKSBpcyBzaW1wbGlmeWluZyBob3cgdHJhbXBvbGluZXMgYXJlIGhhbmRsZWQsIGxpa2VseSB0aWVkIHRvIHRoZSBjaGFuZ2VzIGluIG1lbW9yeSBsYXlvdXQuXG40LiAgUExUIGdlbmVyYXRpb24gKGBhcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jYCkgaXMgc3RyZWFtbGluZWQsIHJlbW92aW5nIGluaXRpYWxpemF0aW9uLXNwZWNpZmljIGxvZ2ljLCBsaWtlbHkgdG8gc3VwcG9ydCB0aGUgbmV3IGBFWEVDTUVNYCBzZW1hbnRpY3MuXG41LiAgTW9kdWxlIGluaXRpYWxpemF0aW9uIChgYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmNgKSBhbHNvIHJlbW92ZXMgaW5pdGlhbGl6YXRpb24gbG9naWMgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgLmluaXQudGV4dC5mdHJhY2VfdHJhbXBvbGluZWAsIGFnYWluLCBhbGlnbmluZyB3aXRoIHRoZSBuZXcgYXJjaGl0ZWN0dXJlLlxuNi4gIGBhcmNoL2FybTY0L21tL2luaXQuY2AgaXMgd2hlcmUgdGhpbmdzIGdldCByZWFsbHkgaW50ZXJlc3RpbmcuIGBQQUdFX0tFUk5FTF9ST1hgIGFuZCBgRVhFQ01FTV9ST1hfQ0FDSEVgIGFyZSBiZWluZyBzZXQgZm9yIGBFWEVDTUVNX0RFRkFVTFRgLiBJdCBpcyBhbHNvIGFkZGluZyBgRVhFQ01FTV9NT0RVTEVfREFUQWAsIHdoaWNoIGltcGxpZXMgdGhhdCBkYXRhIGlzIGFsc28gYWZmZWN0ZWQsIGFuZCBoYW5kbGluZyBgRVhFQ01FTV9OT19IVUdFX1ZNQVBgLiBUaGUgYWRkaXRpb24gb2YgYGV4ZWNtZW1fZmlsbF90cmFwcGluZ19pbnNuc2AgaXMgbm90YWJsZS5cbjcuICBgYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jYCBpcyBtb2RpZnlpbmcgYGNoYW5nZV9tZW1vcnlfY29tbW9uYCB0byBhbGxvdyBgVk1fQUxMT1dfSFVHRV9WTUFQYCBtYXBwaW5ncyB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuXG44LiAgSSBzZWUgbmV3IGRlZmluaXRpb25zIGluIGBpbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaGAgd2l0aCB0aGUgYWRkaXRpb24gb2YgYEVYRUNNRU1fTk9fSFVHRV9WTUFQYCBhbmQgYGV4ZWNtZW1fc3BsaXRgLCB3aGljaCBzdWdnZXN0cyB0aGlzIHNwbGl0IGlzIGtleSB0byB0aGUgbmV3IGFyY2hpdGVjdHVyZS5cbjkuICBBIHJlb3JkZXJpbmcgaW4gYGluY2x1ZGUvbGludXgvbW9kdWxlLmhgIChgTU9EX1RFWFRgIGFuZCBgTU9EX0RBVEFgKSBpcyBhIHJlZCBmbGFnLlxuMTAuIGBrZXJuZWwvbW9kdWxlL21haW4uY2AgaXMgYWxsb2NhdGluZyBgTU9EX0lOSVRfVEVYVGAgZGlmZmVyZW50bHksIHNwZWNpZmljYWxseSBzcGxpdHRpbmcgaXQgZnJvbSBgTU9EX1RFWFRgIHdoZW4gYGV4ZWNtZW1faXNfcm94YCBpcyB0cnVlLiBUaGlzIHJlaW5mb3JjZXMgdGhhdCBzcGxpdHRpbmcgZnVuY3Rpb25hbGl0eS5cbjExLiBgbW0vZXhlY21lbS5jYCBoYXMgY2hhbmdlcyB0byB0aGUgYGV4ZWNtZW1fY2FjaGVfcG9wdWxhdGVfYWxsb2NgIGZ1bmN0aW9uIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGV4ZWNtZW1fY2FjaGVfc3BsaXRgIGFuZCBgZXhlY21lbV9zcGxpdGAuIFRoaXMgcmVpbmZvcmNlcyB0aGUgY29yZSBjaGFuZ2UuXG5cblRoZSBwcmFjdGljYWwgaW1wYWN0IG9mIGFsbCB0aGlzIGlzIHByZXR0eSBzdWJzdGFudGlhbC4gTW9kdWxlIGxvYWRpbmcgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGFyZSBjbGVhcmx5IHVuZGVyZ29pbmcgYSB0cmFuc2Zvcm1hdGlvbiBvbiBBUk02NCwgYW5kIHRoZSBGdHJhY2UgdHJhbXBvbGluZSBoYW5kbGluZyBmb3IgbW9kdWxlcyBpcyBiZWluZyB1cGRhdGVkIGluIHRhbmRlbS5cblxuVG8gZm9jdXMgbXkgYW5hbHlzaXMsIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBmb2xsb3dpbmcgc3ltYm9sczpcblxuKiAgIGBleGVjbWVtX3NwbGl0YCAtIFRoaXMgaXMgY2xlYXJseSBhIGNlbnRyYWwgZnVuY3Rpb24sIGxpa2VseSByZXNwb25zaWJsZSBmb3Igc3BsaXR0aW5nIGV4ZWN1dGFibGUgbWVtb3J5IHJlZ2lvbnMuXG4qICAgYG1vZHVsZV9lbWl0X3BsdF9lbnRyeWAsIGBtb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnBgLCBhbmQgYG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnNgIC0gVGhlc2UgYXJlIGltcG9ydGFudCBiZWNhdXNlIHRoZXkgYXJlIHRoZSBsb3ctbGV2ZWwgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkIHRvIGFjY29tbW9kYXRlIHRoZSBuZXcgbWVtb3J5IHN0cnVjdHVyZS5cblxuTXkgaW1tZWRpYXRlIGFjdGlvbiB3aWxsIGJlIHRvIGVuYWJsZSBgTU9EVUxFU2AgYW5kIGBEWU5BTUlDX0ZUUkFDRWAuXG5cbkZpbmFsbHksIHNpbmNlIHRoZSBjb2RlIHJlZmVyZW5jZXMgYENPTkZJR19BUk02NF9FUlJBVFVNXzg0MzQxOWAsIEkgc2hvdWxkIHZlcmlmeSBpZiBgbW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwYCBpcyBhY3R1YWxseSBjb21waWxlZCBhbmQgaG93IHRoZSBjb25maWd1cmF0aW9uIGFmZmVjdHMgdGhpcyBmdW5jdGlvbi4gVGhpcyBtaWdodCBpbmZsdWVuY2UgaG93IEkgYXBwcm9hY2ggdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmdHJhY2UgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwNTMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NDk6NTIuMzQwMDM4NTgyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTc3MTA2MTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5jb25maWcgQVJNNjRfRVJSQVRVTV84NDM0MTlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnPTYwMz1jb25maWcgQVJNNjRfRVJSQVRVTV84NDU3MTlcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy02MjMtXFxuYXJjaC9hcm02NC9LY29uZmlnOjYyNDpjb25maWcgQVJNNjRfRVJSQVRVTV84NDM0MTlcXG5hcmNoL2FybTY0L0tjb25maWctNjI1LVxcdGJvb2wgXFxcIkNvcnRleC1BNTM6IDg0MzQxOTogQSBsb2FkIG9yIHN0b3JlIG1pZ2h0IGFjY2VzcyBhbiBpbmNvcnJlY3QgYWRkcmVzc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NDk6NTQuMzE3MTQ5MzU0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTY4MDg2MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEFSTTY0IENvbmZpZ3VyYXRpb24gRGVmYXVsdCoqXG5cbkFscmlnaHQsIHNvIHRoZSBzeXN0ZW0gYmVoYXZpb3IgaXMgZGVmYXVsdGluZyB0byBgeWAgaWYgYEFSTTY0YCBpcyBzZXQuLi4gdGhhdCdzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoZSBsb2dpYyBiZWhpbmQgdGhhdC4gSXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyB0byBtZSB3aHkgdGhhdCBzaG91bGQgYmUgdGhlIGNhc2UsIGFuZCBJIHdhbnQgdG8gdmVyaWZ5IHRoZSBzcGVjaWZpYyBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoYXQgZGVmYXVsdCBpcyB0cmlnZ2VyZWQuIEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSwgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMsIG9yIHdoYXRldmVyIGNvbnRleHQgZGVmaW5lcyB0aGlzIGJlaGF2aW9yLiBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGJlaGF2aW9yIGlzIGV4cGVjdGVkLiBJcyB0aGlzIGRlZmF1bHQgYSBoYXJkY29kZWQgc2V0dGluZywgb3IgaXMgaXQgZGVyaXZlZCBiYXNlZCBvbiBzb21lIG90aGVyIGNvbmRpdGlvbiwgYSBidWlsZCBmbGFnIHBlcmhhcHM/IEknbSBnb2luZyB0byB0cmFjayBkb3duIHdoZXJlIHRoaXMgZGVmYXVsdCBiZWhhdmlvciBpcyBzZXQgYW5kIGVuc3VyZSBpdCBhbGlnbnMgd2l0aCBvdXIgYnJvYWRlciBhcmNoaXRlY3R1cmFsIGdvYWxzIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgc3lzdGVtcy4gSSBuZWVkIHRvIGV2YWx1YXRlIGl0cyByYXRpb25hbGUsIHRvIHNlZSB3aGV0aGVyIHRoZSBkZXNpZ24gbWFrZXMgc2Vuc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTgwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NDk6NTguMDczOTYxMTgyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL2FybTY0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjI0LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjI0OlxcdGNvbmZpZyBBUk02NF9FUlJBVFVNXzg0MzQxOVxcbiA2MjU6XFx0XFx0Ym9vbCBcXFwiQ29ydGV4LUE1MzogODQzNDE5OiBBIGxvYWQgb3Igc3RvcmUgbWlnaHQgYWNjZXNzIGFuIGluY29ycmVjdCBhZGRyZXNzXFxcIlxcbiA2MjY6XFx0XFx0ZGVmYXVsdCB5XFxuIDYyNzpcXHRcXHRoZWxwXFxuIDYyODpcXHRcXHQgIFRoaXMgb3B0aW9uIGxpbmtzIHRoZSBrZXJuZWwgd2l0aCAnLS1maXgtY29ydGV4LWE1My04NDM0MTknIGFuZFxcbiA2Mjk6XFx0XFx0ICBlbmFibGVzIFBMVCBzdXBwb3J0IHRvIHJlcGxhY2UgY2VydGFpbiBBRFJQIGluc3RydWN0aW9ucywgd2hpY2ggY2FuXFxuIDYzMDpcXHRcXHQgIGNhdXNlIHN1YnNlcXVlbnQgbWVtb3J5IGFjY2Vzc2VzIHRvIHVzZSBhbiBpbmNvcnJlY3QgYWRkcmVzcyBvblxcbiA2MzE6XFx0XFx0ICBDb3J0ZXgtQTUzIHBhcnRzIHVwIHRvIHIwcDQuXFxuIDYzMjpcXHRcXG4gNjMzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NDk6NTguMDc0MDkyNDcyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNzc3MjQ3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTeW1ib2wgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHRoZSBkZWZhdWx0IHJlc3BvbnNlIGlzICd5JywgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGNoYW5nZXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYGV4ZWNtZW1fYWxsb2NfcndgIGluIGBtbS9leGVjbWVtLmNgLCBidXQgaXQgaGFzbid0IGJlZW4gZGlyZWN0bHkgbW9kaWZpZWQuIEhtbSwgaXQncyBjYWxsZWQgYnkgYG1vZHVsZV9tZW1vcnlfYWxsb2NgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gV2FpdCwgdGhlIGFjdHVhbCBtb2RpZmljYXRpb24gaXMgaW4gYGV4ZWNtZW1fY2FjaGVfcG9wdWxhdGVfYWxsb2NgLCBidXQgdGhhdCdzIGEgc3RhdGljIGZ1bmN0aW9uLiBBbHNvIHN0YXRpYyBpcyBgZXhlY21lbV9jYWNoZV9zcGxpdGAuIExvb2tzIGxpa2UgYGV4ZWNtZW1fc3BsaXRgIGlzIGV4cG9ydGVkIGFuZCBoYXMgYmVlbiBtb2RpZmllZCwgdGhhdCdzIGltcG9ydGFudC4gYG1vZHVsZV9tZW1vcnlfYWxsb2NgIGl0c2VsZiBpcyBhbHNvIHN0YXRpYy5cblxuQW5kIGBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jYCBsb29rcyB1bnRvdWNoZWQsIGl0J3MgdGhlIGNvbnRleHQgdGhhdCdzIGNoYW5nZWQuIGBnZXRfZnRyYWNlX3BsdGAgaXMgYW5vdGhlciBzdGF0aWMgZnVuY3Rpb24sIHNvIG5vdCBhcyBpbXBvcnRhbnQgaGVyZS5cblxuQWxyaWdodCwgd2l0aCB0aGF0IGluIG1pbmQsIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOlxuXG4qICAgYGV4ZWNtZW1fc3BsaXRgIC0gZGVmaW5pdGVseSBuZWVkcyBhIGNsb3NlciBsb29rXG4qICAgYG1vZHVsZV9lbWl0X3BsdF9lbnRyeWAgLSBsaWtlbHkgcmVsYXRlZCB0byB0aGUgUExUIChQcm9jZWR1cmUgTGlua2FnZSBUYWJsZSlcbiogICBgbW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwYCAtIHRoaXMgc291bmRzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgQURSUCBpcyBsaWtlbHkgaW5zdHJ1Y3Rpb24gcmVsYXRlZFxuKiAgIGBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zYCAtIFRoaXMgaXMgaW50ZXJlc3RpbmcuXG5cbkxldCdzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnNgIGluIGBhcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jYC4gR290dGEgYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0MjcsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo1MDowNC4yNTE4MTk2ODhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDUyNzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmM9Mjc4PXN0YXRpYyBjb25zdCBpbnQgZnRyYWNlX3BsdHMgPSBJU19FTkFCTEVEKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkgPyBOUl9GVFJBQ0VfUExUUyA6IDA7XFxuYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYy0yNzktXFxuYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYzoyODA6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxcbmFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmMtMjgxLVxcdFxcdFxcdCAgICAgIGNoYXIgKnNlY3N0cmluZ3MsIHN0cnVjdCBtb2R1bGUgKm1vZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NTA6MDQuMzAyMjc1MzI1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDg3NzY4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91J3ZlIGRlc2NyaWJlZDpcblxuKipDb25maXJtYXRpb24gYW5kIEltbWVkaWF0ZSBBY3Rpb24qKlxuXG5BbHJpZ2h0LCB5ZXAsIHRoYXQncyBkZWZpbml0ZWx5IHRoZSBzcG90LiBObyBuZWVkIHRvIHNlY29uZC1ndWVzcyBteXNlbGYgb24gdGhhdC4gTm93LCBsZXQncyBkaXZlIHJpZ2h0IGludG8gdGhlIGNvZGUgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZXhlY21lbV9zcGxpdGAgd2l0aGluIGBtbS9leGVjbWVtLmNgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bGx5LiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyMDQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo1MDowNy4zMTEwNTQ0ODhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyODA5NzEzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBcXFxcKmV4ZWNtZW1fc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZXhlY21lbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2V4ZWNtZW0uYz01NDI9Ym9vbCBleGVjbWVtX2lzX3JveChlbnVtIGV4ZWNtZW1fdHlwZSB0eXBlKVxcbi0tXFxubW0vZXhlY21lbS5jLTU0Ni1cXG5tbS9leGVjbWVtLmM6NTQ3OnZvaWQgKmV4ZWNtZW1fc3BsaXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSlcXG5tbS9leGVjbWVtLmMtNTQ4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NTA6MDcuNjM5MTU4ODVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA1MDM3NDUxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIE1lbW9yeSBUcmFwcGluZyBJbnN0cnVjdGlvbnMqKlxuXG5ZZXMsIHRoYXQgY29uZmlybXMgaXQg4oCTIHRoZSBpc3N1ZSBJJ20gY2hhc2luZyBpcyBkZWZpbml0ZWx5IHByZXNlbnQuIE5vdywgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kICpob3cqIGl0J3MgYmVpbmcgaGFuZGxlZCwgSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnNgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEknbSBoZWFkaW5nIHN0cmFpZ2h0IHRvIGl0cyBpbXBsZW1lbnRhdGlvbiBpbiBgYXJjaC9hcm02NC9tbS9pbml0LmNgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgaW5qZWN0aW5nIHRob3NlIHRyYXBwaW5nIGluc3RydWN0aW9ucyB3aGVuIG1lbW9yeSByZWdpb25zIGFyZSBtYXJrZWQgYXMgZXhlY3V0ZS1vbmx5LCBvciB3aGVuIHRoZSBzeXN0ZW0gZGV0ZWN0cyBtZW1vcnkgcmVnaW9ucyBhcmUgZXhlY3V0YWJsZSwgYW5kIGFzIHN1Y2ggSSBuZWVkIHRvIGVuc3VyZSBpdCdzIGJlaGF2aW9yLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIHNldHMgdGhlc2UgdHJhcHMsIGFuZCB1bmRlcnN0YW5kIGl0cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBtZW1vcnkgbGF5b3V0LiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSByb290IGNhdXNlIG9mIHRoZSBlcnJvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0NTYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo1MDoxNC42ODk1MzY4OTdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjIyOTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGV4ZWNtZW1fZmlsbF90cmFwcGluZ19pbnNuc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L21tL2luaXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L21tL2luaXQuYz01MDU9c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9pbml0LmMtNTY4LVxcbmFyY2gvYXJtNjQvbW0vaW5pdC5jOjU2OTp2b2lkIGV4ZWNtZW1fZmlsbF90cmFwcGluZ19pbnNucyh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxcbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTU3MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE0OjUwOjE0LjczNzc2NzY4M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTE3OTMwODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBBUk02NCBFeGVjdXRhYmxlIE1lbW9yeSBQYXRjaCoqXG5cbk9rYXksIEkndmUgZ290IGl0LiBUaGVyZSdzIGEgY2xlYXIgZm9jdXMgb24gYSBwYXJ0aWN1bGFyIGNvZGUgcGF0aCBoZXJlLCBhbmQgdGhlIGFzc29jaWF0ZWQgc3ltYm9sIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuRmlyc3QsIGxldCBtZSBjb25maXJtIHRoZSBmdW5jdGlvbjogYGNoYW5nZV9tZW1vcnlfY29tbW9uYCBpbiBgYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jYC4gWWVzLCBpdCdzIHN0YXRpYywgYXMgZXhwZWN0ZWQuXG5cbk5vdywgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCB0aGUgY29yZSBmb2N1cyBzeW1ib2xzIGFyZTogYGV4ZWNtZW1fc3BsaXRgLCBgbW9kdWxlX2VtaXRfcGx0X2VudHJ5YCwgYG1vZHVsZV9lbWl0X3ZlbmVlcl9mb3JfYWRycGAsIGBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zYCwgYW5kIGBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnNgLiBUaGVzZSByZWFsbHkgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHdhdGNoLlxuXG5OZXh0LCB0aGUgY29uZmlncy4gSSBpbml0aWFsbHkgc2F3IGBBUk02NF9FUlJBVFVNXzg0MzQxOWAsIGJ1dCB0aGF0J3MgYXJtNjQgc3BlY2lmaWMsIGFuZCB0aGUgcHJvbXB0IHNheXMgdG8gZXhjbHVkZSBhbnkgYENPTkZJR19gIHByZWZpeCBmcm9tIHRoZSBhbnN3ZXIsIHNvIGxldCdzIHN0aWNrIHdpdGggdGhlIGZvbGxvd2luZywgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXRjaDogYE1PRFVMRVNgIGFuZCBgRFlOQU1JQ19GVFJBQ0VgLlxuXG5Ob3csIHJlZ2FyZGluZyBgRVhFQ01FTWAsIEkgcmVjYWxsIGl0J3MgYSBoaWRkZW4gYm9vbCwgbWFraW5nIGl0IHVuYWJsZSB0byBiZSBleHBsaWNpdGx5IGVuYWJsZWQgaW4gYG1ha2UgZGVmY29uZmlnYC4gSG93ZXZlciwgaXQncyBzZWxlY3RlZCBieSBgTU9EVUxFU2AuIFRoZXJlZm9yZSwgYE1PRFVMRVNgIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGFjdGl2YXRlIHRoYXQgYXNwZWN0IG9mIHRoZSBjaGFuZ2VzLlxuXG5MZXQncyBxdWlja2x5IHJlY2FwOiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgQVJDSF9IQVNfRVhFQ01FTV9ST1hgIGZvciBhcm02NC4gSXQgaXMgbW9kaWZ5aW5nIGhvdyBtb2R1bGUgbWVtb3J5IGlzIGFsbG9jYXRlZCwgc3BlY2lmaWNhbGx5LCBieSBzcGxpdHRpbmcgYE1PRF9JTklUX1RFWFRgIGZyb20gYE1PRF9URVhUYCB3aGVuIGBleGVjbWVtX2lzX3JveGAgaXMgdHJ1ZS4gIEl0IGlzIGFsc28gbW9kaWZ5aW5nIGZ0cmFjZSB0cmFtcG9saW5lcyBhbmQgUExUIGdlbmVyYXRpb24gZm9yIG1vZHVsZXMgb24gYXJtNjQgdG8gYWNjb21tb2RhdGUgdGhlc2UgY2hhbmdlcy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9ucyB0byB2aXRhbCBrZXJuZWwgbG9naWMgKG1vZHVsZSBsb2FkaW5nLCBleGVjdXRhYmxlIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgZnRyYWNlKSBhbmQgYXJlIGxpa2VseSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cblxuTXkgZmluYWxpemVkIHVuZGVyc3RhbmRpbmcgdGhlbiBpczpcblxuRm9jdXNTeW1ib2xzOlxuLSBgZXhlY21lbV9zcGxpdGBcbi0gYG1vZHVsZV9lbWl0X3BsdF9lbnRyeWBcbi0gYG1vZHVsZV9lbWl0X3ZlbmVlcl9mb3JfYWRycGBcbi0gYG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnNgXG4tIGBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnNgXG5cbkVuYWJsZUNvbmZpZ3M6XG4tIGBNT0RVTEVTYFxuLSBgRFlOQU1JQ19GVFJBQ0VgXG5cblJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4MzgsIk91dHB1dFRva2VucyI6MTkwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE0OjUwOjI0LjI1NTcwMTU5NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODc5OTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNT0RVTEVTXCIsXG4gICAgXCJEWU5BTUlDX0ZUUkFDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4ZWNtZW1fc3BsaXRcIixcbiAgICBcIm1vZHVsZV9lbWl0X3BsdF9lbnRyeVwiLFxuICAgIFwibW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwXCIsXG4gICAgXCJtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zXCIsXG4gICAgXCJleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBBUkNIX0hBU19FWEVDTUVNX1JPWCBmb3IgYXJtNjQsIG1vZGlmeWluZyBob3cgbW9kdWxlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYnkgc3BsaXR0aW5nIE1PRF9JTklUX1RFWFQgZnJvbSBNT0RfVEVYVCB3aGVuIGV4ZWNtZW1faXNfcm94IGlzIHRydWUuIEl0IGFsc28gdXBkYXRlcyBmdHJhY2UgdHJhbXBvbGluZXMgYW5kIFBMVCBnZW5lcmF0aW9uIGZvciBtb2R1bGVzIG9uIGFybTY0IHRvIGFjY29tbW9kYXRlIHRoZXNlIGNoYW5nZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgKG1vZHVsZSBsb2FkaW5nLCBleGVjdXRhYmxlIG1lbW9yeSBhbGxvY2F0aW9uLCBmdHJhY2UpIHRoYXQgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTU9EVUxFU1wiLFxuICAgIFwiRFlOQU1JQ19GVFJBQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleGVjbWVtX3NwbGl0XCIsXG4gICAgXCJtb2R1bGVfZW1pdF9wbHRfZW50cnlcIixcbiAgICBcIm1vZHVsZV9lbWl0X3ZlbmVlcl9mb3JfYWRycFwiLFxuICAgIFwibW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9uc1wiLFxuICAgIFwiZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgQVJDSF9IQVNfRVhFQ01FTV9ST1ggZm9yIGFybTY0LCBtb2RpZnlpbmcgaG93IG1vZHVsZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGJ5IHNwbGl0dGluZyBNT0RfSU5JVF9URVhUIGZyb20gTU9EX1RFWFQgd2hlbiBleGVjbWVtX2lzX3JveCBpcyB0cnVlLiBJdCBhbHNvIHVwZGF0ZXMgZnRyYWNlIHRyYW1wb2xpbmVzIGFuZCBQTFQgZ2VuZXJhdGlvbiBmb3IgbW9kdWxlcyBvbiBhcm02NCB0byBhY2NvbW1vZGF0ZSB0aGVzZSBjaGFuZ2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIChtb2R1bGUgbG9hZGluZywgZXhlY3V0YWJsZSBtZW1vcnkgYWxsb2NhdGlvbiwgZnRyYWNlKSB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo1MDoyNC4zMjQ1ODc5MTRaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNTA3MTQxNTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NTA6MjQuMzI1MDI4MDM0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcxNTA2Njk2ODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIGV4ZWN1dGFibGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgKGBleGVjbWVtYCkgZm9yIGtlcm5lbCBtb2R1bGVzLCBzcGVjaWZpY2FsbHkgY29uc29saWRhdGluZyBtb2R1bGUgdGV4dCBhbmQgaW5pdCB0ZXh0IGFsbG9jYXRpb25zLCBtZXJnaW5nIFBMVCBzZWN0aW9ucyBmb3IgQVJNNjQsIGFuZCBhZGp1c3RpbmcgcGFnZSBhdHRyaWJ1dGVzIGZvciBST1ggKFJlYWQtT25seSBFeGVjdXRlKSBjYWNoZXMuIFRoZXNlIGNoYW5nZXMgZGVhbCB3aXRoIGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCwgcGFnZSBwZXJtaXNzaW9ucywgYW5kIG1vZHVsZSBsb2FkaW5nLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHBhZ2UgZmF1bHRzLCBvciBpbnZhbGlkIGluc3RydWN0aW9uIGV4Y2VwdGlvbnMuIFN1Y2ggaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgc3RhbmRhcmQgcGFnZSBmYXVsdCBoYW5kbGVycywgYW5kIGtlcm5lbCBib290L21vZHVsZSBsb2FkaW5nIHRlc3RzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBzdGFjay9oZWFwIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbGwgYWxsb2NhdGVkIG1vZHVsZSBtZW1vcnkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCAoZS5nLiwgdmlhIGBtZW1zZXRgIGluIGBtb2R1bGVfbWVtb3J5X2FsbG9jYCBvciBgZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zYCkuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNjODJjNzcyMDZlYjk1YWMxZjRkNDViOGYzNWNiZjg4MWM4MDZlMTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAxNDo0ODoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuaW5kZXggYjNhZmUwNjg4OTE5Yi4uMDgwYjk3YjBiYmQ1ZSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZ1xuKysrIGIvYXJjaC9hcm02NC9LY29uZmlnXG5AQCAtMjcsNiArMjcsNyBAQCBjb25maWcgQVJNNjRcbiBcdHNlbGVjdCBBUkNIX0hBU19ETUFfT1BTIGlmIFhFTlxuIFx0c2VsZWN0IEFSQ0hfSEFTX0RNQV9QUkVQX0NPSEVSRU5UXG4gXHRzZWxlY3QgQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFIGlmIEFDUElcbitcdHNlbGVjdCBBUkNIX0hBU19FWEVDTUVNX1JPWFxuIFx0c2VsZWN0IEFSQ0hfSEFTX0ZBU1RfTVVMVElQTElFUlxuIFx0c2VsZWN0IEFSQ0hfSEFTX0ZPUlRJRllfU09VUkNFXG4gXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oXG5pbmRleCBmYjliODhlZWJlYjE1Li45MzI4ZmFkYjRhOTU5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaFxuQEAgLTE1LDExICsxNSw5IEBAIHN0cnVjdCBtb2RfcGx0X3NlYyB7XG4gXG4gc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljIHtcbiBcdHN0cnVjdCBtb2RfcGx0X3NlY1x0Y29yZTtcbi1cdHN0cnVjdCBtb2RfcGx0X3NlY1x0aW5pdDtcbiBcbiBcdC8qIGZvciBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi9cbiBcdHN0cnVjdCBwbHRfZW50cnlcdCpmdHJhY2VfdHJhbXBvbGluZXM7XG4tXHRzdHJ1Y3QgcGx0X2VudHJ5XHQqaW5pdF9mdHJhY2VfdHJhbXBvbGluZXM7XG4gfTtcbiBcbiB1NjQgbW9kdWxlX2VtaXRfcGx0X2VudHJ5KHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycyxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5sZHMuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmxkcy5oXG5pbmRleCAwYjNhYWNkMjJjNTkwLi45NTU0MGU5NTZiNDE5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmxkcy5oXG5AQCAtMSw4ICsxLDUgQEBcbiBTRUNUSU9OUyB7XG4gXHQucGx0IDAgOiB7IEJZVEUoMCkgfVxuLVx0LmluaXQucGx0IDAgOiB7IEJZVEUoMCkgfVxuLVx0LnRleHQuZnRyYWNlX3RyYW1wb2xpbmUgMCA6IHsgQllURSgwKSB9XG4tXHQuaW5pdC50ZXh0LmZ0cmFjZV90cmFtcG9saW5lIDAgOiB7IEJZVEUoMCkgfVxuIFxuICNpZmRlZiBDT05GSUdfS0FTQU5fU1dfVEFHU1xuIFx0LypcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jXG5pbmRleCA1YTE1NTRhNDQxNjI4Li5iNTZkYTI0YzFiZTRmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvZnRyYWNlLmNcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jXG5AQCAtMjU4LDE3ICsyNTgsMTAgQEAgaW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxuIFx0cmV0dXJuIGZ0cmFjZV9tb2RpZnlfY29kZShwYywgMCwgbmV3LCBmYWxzZSk7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgcGx0X2VudHJ5ICpnZXRfZnRyYWNlX3BsdChzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgYWRkcilcbitzdGF0aWMgc3RydWN0IHBsdF9lbnRyeSAqZ2V0X2Z0cmFjZV9wbHQoc3RydWN0IG1vZHVsZSAqbW9kKVxuIHtcbiAjaWZkZWYgQ09ORklHX01PRFVMRVNcbi1cdHN0cnVjdCBwbHRfZW50cnkgKnBsdCA9IE5VTEw7XG4tXG4tXHRpZiAod2l0aGluX21vZHVsZV9tZW1fdHlwZShhZGRyLCBtb2QsIE1PRF9JTklUX1RFWFQpKVxuLVx0XHRwbHQgPSBtb2QtXHUwMDNlYXJjaC5pbml0X2Z0cmFjZV90cmFtcG9saW5lcztcbi1cdGVsc2UgaWYgKHdpdGhpbl9tb2R1bGVfbWVtX3R5cGUoYWRkciwgbW9kLCBNT0RfVEVYVCkpXG4tXHRcdHBsdCA9IG1vZC1cdTAwM2VhcmNoLmZ0cmFjZV90cmFtcG9saW5lcztcbi1cdGVsc2Vcbi1cdFx0cmV0dXJuIE5VTEw7XG4rXHRzdHJ1Y3QgcGx0X2VudHJ5ICpwbHQgPSBtb2QtXHUwMDNlYXJjaC5mdHJhY2VfdHJhbXBvbGluZXM7XG4gXG4gXHRyZXR1cm4gXHUwMDI2cGx0W0ZUUkFDRV9QTFRfSURYXTtcbiAjZWxzZVxuQEAgLTMzOSw3ICszMzIsNyBAQCBzdGF0aWMgYm9vbCBmdHJhY2VfZmluZF9jYWxsYWJsZV9hZGRyKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsXG4gXHRpZiAoV0FSTl9PTighbW9kKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0cGx0ID0gZ2V0X2Z0cmFjZV9wbHQobW9kLCBwYyk7XG4rXHRwbHQgPSBnZXRfZnRyYWNlX3BsdChtb2QpO1xuIFx0aWYgKCFwbHQpIHtcbiBcdFx0cHJfZXJyKFwiZnRyYWNlOiBubyBtb2R1bGUgUExUIGZvciAlcHNcXG5cIiwgKHZvaWQgKikqYWRkcik7XG4gXHRcdHJldHVybiBmYWxzZTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jIGIvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuY1xuaW5kZXggN2FmZDM3MGRhOWY0OC4uNjkwMGQyMjQyZjFiZSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmNcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmNcbkBAIC03MCw4ICs3MCw3IEBAIHU2NCBtb2R1bGVfZW1pdF9wbHRfZW50cnkoc3RydWN0IG1vZHVsZSAqbW9kLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxuIFx0XHRcdCAgdm9pZCAqbG9jLCBjb25zdCBFbGY2NF9SZWxhICpyZWxhLFxuIFx0XHRcdCAgRWxmNjRfU3ltICpzeW0pXG4ge1xuLVx0c3RydWN0IG1vZF9wbHRfc2VjICpwbHRzZWMgPSAhd2l0aGluX21vZHVsZV9pbml0KCh1bnNpZ25lZCBsb25nKWxvYywgbW9kKSA/XG4tXHRcdFx0XHRcdFx0XHUwMDI2bW9kLVx1MDAzZWFyY2guY29yZSA6IFx1MDAyNm1vZC1cdTAwM2VhcmNoLmluaXQ7XG4rXHRzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9IFx1MDAyNm1vZC1cdTAwM2VhcmNoLmNvcmU7XG4gXHRzdHJ1Y3QgcGx0X2VudHJ5ICpwbHQgPSAoc3RydWN0IHBsdF9lbnRyeSAqKXNlY2hkcnNbcGx0c2VjLVx1MDAzZXBsdF9zaG5keF0uc2hfYWRkcjtcbiBcdGludCBpID0gcGx0c2VjLVx1MDAzZXBsdF9udW1fZW50cmllcztcbiBcdGludCBqID0gaSAtIDE7XG5AQCAtMTAxLDggKzEwMCw3IEBAIHU2NCBtb2R1bGVfZW1pdF9wbHRfZW50cnkoc3RydWN0IG1vZHVsZSAqbW9kLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxuIHU2NCBtb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnAoc3RydWN0IG1vZHVsZSAqbW9kLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxuIFx0XHRcdFx0dm9pZCAqbG9jLCB1NjQgdmFsKVxuIHtcbi1cdHN0cnVjdCBtb2RfcGx0X3NlYyAqcGx0c2VjID0gIXdpdGhpbl9tb2R1bGVfaW5pdCgodW5zaWduZWQgbG9uZylsb2MsIG1vZCkgP1xuLVx0XHRcdFx0XHRcdFx1MDAyNm1vZC1cdTAwM2VhcmNoLmNvcmUgOiBcdTAwMjZtb2QtXHUwMDNlYXJjaC5pbml0O1xuK1x0c3RydWN0IG1vZF9wbHRfc2VjICpwbHRzZWMgPSBcdTAwMjZtb2QtXHUwMDNlYXJjaC5jb3JlO1xuIFx0c3RydWN0IHBsdF9lbnRyeSAqcGx0ID0gKHN0cnVjdCBwbHRfZW50cnkgKilzZWNoZHJzW3BsdHNlYy1cdTAwM2VwbHRfc2huZHhdLnNoX2FkZHI7XG4gXHRpbnQgaSA9IHBsdHNlYy1cdTAwM2VwbHRfbnVtX2VudHJpZXMrKztcbiBcdHUzMiBicjtcbkBAIC0xNjksMTcgKzE2NywxNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGNvdW50X3BsdHMoRWxmNjRfU3ltICpzeW1zLCBFbGY2NF9SZWxhICpyZWxhLCBpbnQgbnVtLFxuIFx0XHRjYXNlIFJfQUFSQ0g2NF9DQUxMMjY6XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBXZSBvbmx5IGhhdmUgdG8gY29uc2lkZXIgYnJhbmNoIHRhcmdldHMgdGhhdCByZXNvbHZlXG4tXHRcdFx0ICogdG8gc3ltYm9scyB0aGF0IGFyZSBkZWZpbmVkIGluIGEgZGlmZmVyZW50IHNlY3Rpb24uXG4rXHRcdFx0ICogdG8gc3ltYm9scyB0aGF0IGFyZSBub3QgZGVmaW5lZCBpbiB0aGUgc2FtZSBtb2R1bGUuXG4gXHRcdFx0ICogVGhpcyBpcyBub3Qgc2ltcGx5IGEgaGV1cmlzdGljLCBpdCBpcyBhIGZ1bmRhbWVudGFsXG4gXHRcdFx0ICogbGltaXRhdGlvbiwgc2luY2UgdGhlcmUgaXMgbm8gZ3VhcmFudGVlZCB3YXkgdG8gZW1pdFxuIFx0XHRcdCAqIFBMVCBlbnRyaWVzIHN1ZmZpY2llbnRseSBjbG9zZSB0byB0aGUgYnJhbmNoIGlmIHRoZVxuIFx0XHRcdCAqIHNlY3Rpb24gc2l6ZSBleGNlZWRzIHRoZSByYW5nZSBvZiBhIGJyYW5jaFxuIFx0XHRcdCAqIGluc3RydWN0aW9uLiBTbyBpZ25vcmUgcmVsb2NhdGlvbnMgYWdhaW5zdCBkZWZpbmVkXG4tXHRcdFx0ICogc3ltYm9scyBpZiB0aGV5IGxpdmUgaW4gdGhlIHNhbWUgc2VjdGlvbiBhcyB0aGVcbitcdFx0XHQgKiBzeW1ib2xzIGlmIHRoZXkgbGl2ZSBpbiB0aGUgc2FtZSBtb2R1bGUgYXMgdGhlXG4gXHRcdFx0ICogcmVsb2NhdGlvbiB0YXJnZXQuXG4gXHRcdFx0ICovXG4gXHRcdFx0cyA9IHN5bXMgKyBFTEY2NF9SX1NZTShyZWxhW2ldLnJfaW5mbyk7XG4tXHRcdFx0aWYgKHMtXHUwMDNlc3Rfc2huZHggPT0gZHN0aWR4KVxuK1x0XHRcdGlmIChzLVx1MDAzZXN0X3NobmR4ICE9IFNITl9VTkRFRilcbiBcdFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRcdC8qXG5AQCAtMjc3LDEzICsyNzUsMTQgQEAgc3RhdGljIGludCBwYXJ0aXRpb25fYnJhbmNoX3BsdF9yZWxhcyhFbGY2NF9TeW0gKnN5bXMsIEVsZjY0X1JlbGEgKnJlbGEsXG4gXHRyZXR1cm4gaTtcbiB9XG4gXG4rc3RhdGljIGNvbnN0IGludCBmdHJhY2VfcGx0cyA9IElTX0VOQUJMRUQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKSA/IE5SX0ZUUkFDRV9QTFRTIDogMDtcbitcbiBpbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqZWhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXG4gXHRcdFx0ICAgICAgY2hhciAqc2Vjc3RyaW5ncywgc3RydWN0IG1vZHVsZSAqbW9kKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgY29yZV9wbHRzID0gMDtcbi1cdHVuc2lnbmVkIGxvbmcgaW5pdF9wbHRzID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgY29yZV9wbHRzID0gZnRyYWNlX3BsdHM7XG4gXHRFbGY2NF9TeW0gKnN5bXMgPSBOVUxMO1xuLVx0RWxmX1NoZHIgKnBsdHNlYywgKnRyYW1wID0gTlVMTCwgKmluaXRfdHJhbXAgPSBOVUxMO1xuK1x0RWxmX1NoZHIgKnBsdHNlYztcbiBcdGludCBpO1xuIFxuIFx0LypcbkBAIC0yOTMsMjAgKzI5MiwxMiBAQCBpbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqZWhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlaGRyLVx1MDAzZWVfc2hudW07IGkrKykge1xuIFx0XHRpZiAoIXN0cmNtcChzZWNzdHJpbmdzICsgc2VjaGRyc1tpXS5zaF9uYW1lLCBcIi5wbHRcIikpXG4gXHRcdFx0bW9kLVx1MDAzZWFyY2guY29yZS5wbHRfc2huZHggPSBpO1xuLVx0XHRlbHNlIGlmICghc3RyY21wKHNlY3N0cmluZ3MgKyBzZWNoZHJzW2ldLnNoX25hbWUsIFwiLmluaXQucGx0XCIpKVxuLVx0XHRcdG1vZC1cdTAwM2VhcmNoLmluaXQucGx0X3NobmR4ID0gaTtcbi1cdFx0ZWxzZSBpZiAoIXN0cmNtcChzZWNzdHJpbmdzICsgc2VjaGRyc1tpXS5zaF9uYW1lLFxuLVx0XHRcdFx0IFwiLnRleHQuZnRyYWNlX3RyYW1wb2xpbmVcIikpXG4tXHRcdFx0dHJhbXAgPSBzZWNoZHJzICsgaTtcbi1cdFx0ZWxzZSBpZiAoIXN0cmNtcChzZWNzdHJpbmdzICsgc2VjaGRyc1tpXS5zaF9uYW1lLFxuLVx0XHRcdFx0IFwiLmluaXQudGV4dC5mdHJhY2VfdHJhbXBvbGluZVwiKSlcbi1cdFx0XHRpbml0X3RyYW1wID0gc2VjaGRycyArIGk7XG4gXHRcdGVsc2UgaWYgKHNlY2hkcnNbaV0uc2hfdHlwZSA9PSBTSFRfU1lNVEFCKVxuIFx0XHRcdHN5bXMgPSAoRWxmNjRfU3ltICopc2VjaGRyc1tpXS5zaF9hZGRyO1xuIFx0fVxuIFxuLVx0aWYgKCFtb2QtXHUwMDNlYXJjaC5jb3JlLnBsdF9zaG5keCB8fCAhbW9kLVx1MDAzZWFyY2guaW5pdC5wbHRfc2huZHgpIHtcbi1cdFx0cHJfZXJyKFwiJXM6IG1vZHVsZSBQTFQgc2VjdGlvbihzKSBtaXNzaW5nXFxuXCIsIG1vZC1cdTAwM2VuYW1lKTtcbitcdGlmICghbW9kLVx1MDAzZWFyY2guY29yZS5wbHRfc2huZHgpIHtcbitcdFx0cHJfZXJyKFwiJXM6IG1vZHVsZSBQTFQgc2VjdGlvbiBtaXNzaW5nXFxuXCIsIG1vZC1cdTAwM2VuYW1lKTtcbiBcdFx0cmV0dXJuIC1FTk9FWEVDO1xuIFx0fVxuIFx0aWYgKCFzeW1zKSB7XG5AQCAtMzM1LDEyICszMjYsOCBAQCBpbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqZWhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXG4gXHRcdGlmIChuZW50cylcbiBcdFx0XHRzb3J0KHJlbHMsIG5lbnRzLCBzaXplb2YoRWxmNjRfUmVsYSksIGNtcF9yZWxhLCBOVUxMKTtcbiBcbi1cdFx0aWYgKCFtb2R1bGVfaW5pdF9sYXlvdXRfc2VjdGlvbihzZWNzdHJpbmdzICsgZHN0c2VjLVx1MDAzZXNoX25hbWUpKVxuLVx0XHRcdGNvcmVfcGx0cyArPSBjb3VudF9wbHRzKHN5bXMsIHJlbHMsIG51bXJlbHMsXG4tXHRcdFx0XHRcdFx0c2VjaGRyc1tpXS5zaF9pbmZvLCBkc3RzZWMpO1xuLVx0XHRlbHNlXG4tXHRcdFx0aW5pdF9wbHRzICs9IGNvdW50X3BsdHMoc3ltcywgcmVscywgbnVtcmVscyxcbi1cdFx0XHRcdFx0XHRzZWNoZHJzW2ldLnNoX2luZm8sIGRzdHNlYyk7XG4rXHRcdGNvcmVfcGx0cyArPSBjb3VudF9wbHRzKHN5bXMsIHJlbHMsIG51bXJlbHMsIHNlY2hkcnNbaV0uc2hfaW5mbyxcbitcdFx0XHRcdFx0ZHN0c2VjKTtcbiBcdH1cbiBcbiBcdHBsdHNlYyA9IHNlY2hkcnMgKyBtb2QtXHUwMDNlYXJjaC5jb3JlLnBsdF9zaG5keDtcbkBAIC0zNDgsMzAgKzMzNSw4IEBAIGludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICplaGRyLCBFbGZfU2hkciAqc2VjaGRycyxcbiBcdHBsdHNlYy1cdTAwM2VzaF9mbGFncyA9IFNIRl9FWEVDSU5TVFIgfCBTSEZfQUxMT0M7XG4gXHRwbHRzZWMtXHUwMDNlc2hfYWRkcmFsaWduID0gTDFfQ0FDSEVfQllURVM7XG4gXHRwbHRzZWMtXHUwMDNlc2hfc2l6ZSA9IChjb3JlX3BsdHMgICsgMSkgKiBzaXplb2Yoc3RydWN0IHBsdF9lbnRyeSk7XG4tXHRtb2QtXHUwMDNlYXJjaC5jb3JlLnBsdF9udW1fZW50cmllcyA9IDA7XG4rXHRtb2QtXHUwMDNlYXJjaC5jb3JlLnBsdF9udW1fZW50cmllcyA9IGZ0cmFjZV9wbHRzO1xuIFx0bW9kLVx1MDAzZWFyY2guY29yZS5wbHRfbWF4X2VudHJpZXMgPSBjb3JlX3BsdHM7XG4gXG4tXHRwbHRzZWMgPSBzZWNoZHJzICsgbW9kLVx1MDAzZWFyY2guaW5pdC5wbHRfc2huZHg7XG4tXHRwbHRzZWMtXHUwMDNlc2hfdHlwZSA9IFNIVF9OT0JJVFM7XG4tXHRwbHRzZWMtXHUwMDNlc2hfZmxhZ3MgPSBTSEZfRVhFQ0lOU1RSIHwgU0hGX0FMTE9DO1xuLVx0cGx0c2VjLVx1MDAzZXNoX2FkZHJhbGlnbiA9IEwxX0NBQ0hFX0JZVEVTO1xuLVx0cGx0c2VjLVx1MDAzZXNoX3NpemUgPSAoaW5pdF9wbHRzICsgMSkgKiBzaXplb2Yoc3RydWN0IHBsdF9lbnRyeSk7XG4tXHRtb2QtXHUwMDNlYXJjaC5pbml0LnBsdF9udW1fZW50cmllcyA9IDA7XG4tXHRtb2QtXHUwMDNlYXJjaC5pbml0LnBsdF9tYXhfZW50cmllcyA9IGluaXRfcGx0cztcbi1cbi1cdGlmICh0cmFtcCkge1xuLVx0XHR0cmFtcC1cdTAwM2VzaF90eXBlID0gU0hUX05PQklUUztcbi1cdFx0dHJhbXAtXHUwMDNlc2hfZmxhZ3MgPSBTSEZfRVhFQ0lOU1RSIHwgU0hGX0FMTE9DO1xuLVx0XHR0cmFtcC1cdTAwM2VzaF9hZGRyYWxpZ24gPSBfX2FsaWdub2ZfXyhzdHJ1Y3QgcGx0X2VudHJ5KTtcbi1cdFx0dHJhbXAtXHUwMDNlc2hfc2l6ZSA9IE5SX0ZUUkFDRV9QTFRTICogc2l6ZW9mKHN0cnVjdCBwbHRfZW50cnkpO1xuLVx0fVxuLVxuLVx0aWYgKGluaXRfdHJhbXApIHtcbi1cdFx0aW5pdF90cmFtcC1cdTAwM2VzaF90eXBlID0gU0hUX05PQklUUztcbi1cdFx0aW5pdF90cmFtcC1cdTAwM2VzaF9mbGFncyA9IFNIRl9FWEVDSU5TVFIgfCBTSEZfQUxMT0M7XG4tXHRcdGluaXRfdHJhbXAtXHUwMDNlc2hfYWRkcmFsaWduID0gX19hbGlnbm9mX18oc3RydWN0IHBsdF9lbnRyeSk7XG4tXHRcdGluaXRfdHJhbXAtXHUwMDNlc2hfc2l6ZSA9IE5SX0ZUUkFDRV9QTFRTICogc2l6ZW9mKHN0cnVjdCBwbHRfZW50cnkpO1xuLVx0fVxuLVxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmNcbmluZGV4IDI0YWRiNTgxYWYwZWIuLjYyMGMyYjcwMTE1ZTUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuY1xuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmNcbkBAIC00NTQsMjkgKzQ1NCwxMSBAQCBzdGF0aWMgaW50IG1vZHVsZV9pbml0X2Z0cmFjZV9wbHQoY29uc3QgRWxmX0VoZHIgKmhkcixcbiBcdFx0XHRcdCAgc3RydWN0IG1vZHVsZSAqbW9kKVxuIHtcbiAjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpXG4tXHRjb25zdCBFbGZfU2hkciAqcztcbi1cdHN0cnVjdCBwbHRfZW50cnkgKnBsdHM7XG4tXG4tXHRzID0gZmluZF9zZWN0aW9uKGhkciwgc2VjaGRycywgXCIudGV4dC5mdHJhY2VfdHJhbXBvbGluZVwiKTtcbi1cdGlmICghcylcbi1cdFx0cmV0dXJuIC1FTk9FWEVDO1xuLVxuLVx0cGx0cyA9ICh2b2lkICopcy1cdTAwM2VzaF9hZGRyO1xuK1x0c3RydWN0IHBsdF9lbnRyeSAqcGx0cyA9ICh2b2lkICopc2VjaGRyc1ttb2QtXHUwMDNlYXJjaC5jb3JlLnBsdF9zaG5keF0uc2hfYWRkcjtcbiBcbiBcdF9faW5pdF9wbHQoXHUwMDI2cGx0c1tGVFJBQ0VfUExUX0lEWF0sIEZUUkFDRV9BRERSKTtcbiBcbiBcdG1vZC1cdTAwM2VhcmNoLmZ0cmFjZV90cmFtcG9saW5lcyA9IHBsdHM7XG4tXG4tXHRzID0gZmluZF9zZWN0aW9uKGhkciwgc2VjaGRycywgXCIuaW5pdC50ZXh0LmZ0cmFjZV90cmFtcG9saW5lXCIpO1xuLVx0aWYgKCFzKVxuLVx0XHRyZXR1cm4gLUVOT0VYRUM7XG4tXG4tXHRwbHRzID0gKHZvaWQgKilzLVx1MDAzZXNoX2FkZHI7XG4tXG4tXHRfX2luaXRfcGx0KFx1MDAyNnBsdHNbRlRSQUNFX1BMVF9JRFhdLCBGVFJBQ0VfQUREUik7XG4tXG4tXHRtb2QtXHUwMDNlYXJjaC5pbml0X2Z0cmFjZV90cmFtcG9saW5lcyA9IHBsdHM7XG4tXG4gI2VuZGlmXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9pbml0LmMgYi9hcmNoL2FybTY0L21tL2luaXQuY1xuaW5kZXggOTc5ODdmODUwYTMzYy4uZTZjOTgwNDUwNDZlMiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vaW5pdC5jXG4rKysgYi9hcmNoL2FybTY0L21tL2luaXQuY1xuQEAgLTUzMSw3ICs1MzEsOCBAQCBzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG4gXHRcdFx0W0VYRUNNRU1fREVGQVVMVF0gPSB7XG4gXHRcdFx0XHQuc3RhcnRcdD0gc3RhcnQsXG4gXHRcdFx0XHQuZW5kXHQ9IGVuZCxcbi1cdFx0XHRcdC5wZ3Byb3RcdD0gUEFHRV9LRVJORUwsXG4rXHRcdFx0XHQucGdwcm90XHQ9IFBBR0VfS0VSTkVMX1JPWCxcbitcdFx0XHRcdC5mbGFnc1x0PSBFWEVDTUVNX1JPWF9DQUNIRSxcbiBcdFx0XHRcdC5hbGlnbm1lbnQgPSAxLFxuIFx0XHRcdFx0LmZhbGxiYWNrX3N0YXJ0XHQ9IGZhbGxiYWNrX3N0YXJ0LFxuIFx0XHRcdFx0LmZhbGxiYWNrX2VuZFx0PSBmYWxsYmFja19lbmQsXG5AQCAtNTQ4LDkgKzU0OSwyNSBAQCBzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG4gXHRcdFx0XHQucGdwcm90XHQ9IFBBR0VfS0VSTkVMLFxuIFx0XHRcdFx0LmFsaWdubWVudCA9IDEsXG4gXHRcdFx0fSxcbitcdFx0XHRbRVhFQ01FTV9NT0RVTEVfREFUQV0gPSB7XG4rXHRcdFx0XHQuc3RhcnRcdD0gc3RhcnQsXG4rXHRcdFx0XHQuZW5kXHQ9IGVuZCxcbitcdFx0XHRcdC5wZ3Byb3RcdD0gUEFHRV9LRVJORUwsXG4rXHRcdFx0XHQuYWxpZ25tZW50ID0gMSxcbitcdFx0XHRcdC5mYWxsYmFja19zdGFydFx0PSBmYWxsYmFja19zdGFydCxcbitcdFx0XHRcdC5mYWxsYmFja19lbmRcdD0gZmFsbGJhY2tfZW5kLFxuK1x0XHRcdH0sXG4gXHRcdH0sXG4gXHR9O1xuIFxuK1x0aWYgKCFzeXN0ZW1fc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCgpKVxuK1x0XHRleGVjbWVtX2luZm8ucmFuZ2VzW0VYRUNNRU1fREVGQVVMVF0uZmxhZ3MgfD0gRVhFQ01FTV9OT19IVUdFX1ZNQVA7XG4rXG4gXHRyZXR1cm4gXHUwMDI2ZXhlY21lbV9pbmZvO1xuIH1cbitcbit2b2lkIGV4ZWNtZW1fZmlsbF90cmFwcGluZ19pbnNucyh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxuK3tcbitcdG1lbXNldDMyKHB0ciwgQUFSQ0g2NF9CUkVBS19GQVVMVCwgc2l6ZSAvIHNpemVvZihfX2xlMzIpKTtcbit9XG4gI2VuZGlmIC8qIENPTkZJR19FWEVDTUVNICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jIGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXG5pbmRleCBiYmU5OGFjOWFkOGM2Li4yMGZmOWNiMjczYzExIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXG4rKysgYi9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmNcbkBAIC0xNjksOCArMTY5LDYgQEAgc3RhdGljIGludCBjaGFuZ2VfbWVtb3J5X2NvbW1vbih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyxcbiBcdCAqIHdlIGFyZSBvcGVyYXRpbmcgb24gZG9lcyBub3QgcmVzdWx0IGluIHN1Y2ggc3BsaXR0aW5nLlxuIFx0ICpcbiBcdCAqIExldCdzIHJlc3RyaWN0IG91cnNlbHZlcyB0byBtYXBwaW5ncyBjcmVhdGVkIGJ5IHZtYWxsb2MgKG9yIHZtYXApLlxuLVx0ICogRGlzYWxsb3cgVk1fQUxMT1dfSFVHRV9WTUFQIG1hcHBpbmdzIHRvIGd1YXJhbnRlZSB0aGF0IG9ubHkgcGFnZVxuLVx0ICogbWFwcGluZ3MgYXJlIHVwZGF0ZWQgYW5kIHNwbGl0dGluZyBpcyBuZXZlciBuZWVkZWQuXG4gXHQgKlxuIFx0ICogU28gY2hlY2sgd2hldGhlciB0aGUgW2FkZHIsIGFkZHIgKyBzaXplKSBpbnRlcnZhbCBpcyBlbnRpcmVseVxuIFx0ICogY292ZXJlZCBieSBwcmVjaXNlbHkgb25lIFZNIGFyZWEgdGhhdCBoYXMgdGhlIFZNX0FMTE9DIGZsYWcgc2V0LlxuQEAgLTE3OSw3ICsxNzcsMTYgQEAgc3RhdGljIGludCBjaGFuZ2VfbWVtb3J5X2NvbW1vbih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyxcbiBcdGlmICghYXJlYSB8fFxuIFx0ICAgICgodW5zaWduZWQgbG9uZylrYXNhbl9yZXNldF90YWcoKHZvaWQgKillbmQpIFx1MDAzZVxuIFx0ICAgICAodW5zaWduZWQgbG9uZylrYXNhbl9yZXNldF90YWcoYXJlYS1cdTAwM2VhZGRyKSArIGFyZWEtXHUwMDNlc2l6ZSkgfHxcbi1cdCAgICAoKGFyZWEtXHUwMDNlZmxhZ3MgXHUwMDI2IChWTV9BTExPQyB8IFZNX0FMTE9XX0hVR0VfVk1BUCkpICE9IFZNX0FMTE9DKSlcbitcdCAgICAhKGFyZWEtXHUwMDNlZmxhZ3MgXHUwMDI2IFZNX0FMTE9DKSlcbisgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qXG4rXHQgKiBEaXNhbGxvdyBWTV9BTExPV19IVUdFX1ZNQVAgbWFwcGluZ3MgdW5sZXNzIHRoZSByZWdpb24gaXMgUE1EXG4rXHQgKiBhbGlnbmVkLCBvciBzcGxpdHRpbmcgbGl2ZSBodWdlIG1hcHBpbmdzIGlzIHN1cHBvcnRlZC5cbitcdCAqL1xuK1x0aWYgKChhcmVhLVx1MDAzZWZsYWdzIFx1MDAyNiBWTV9BTExPV19IVUdFX1ZNQVApIFx1MDAyNlx1MDAyNlxuK1x0ICAgKChzdGFydCAlIFBNRF9TSVpFKSB8fCAoc2l6ZSAlIFBNRF9TSVpFKSkgXHUwMDI2XHUwMDI2XG4rXHQgICBXQVJOX09OX09OQ0UoIXN5c3RlbV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KCkpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmICghbnVtcGFnZXMpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leGVjbWVtLmggYi9pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaFxuaW5kZXggN2RlMjI5MTM0ZTMwNy4uYjA0OTI2ZjNmZmYyNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZXhlY21lbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaFxuQEAgLTQ4LDEwICs0OCwxMiBAQCBlbnVtIGV4ZWNtZW1fdHlwZSB7XG4gICogZW51bSBleGVjbWVtX3JhbmdlX2ZsYWdzIC0gb3B0aW9ucyBmb3IgZXhlY3V0YWJsZSBtZW1vcnkgYWxsb2NhdGlvbnNcbiAgKiBARVhFQ01FTV9LQVNBTl9TSEFET1c6XHRhbGxvY2F0ZSBrYXNhbiBzaGFkb3dcbiAgKiBARVhFQ01FTV9ST1hfQ0FDSEU6XHRcdGFsbG9jYXRpb25zIHNob3VsZCB1c2UgUk9YIGNhY2hlIG9mIGh1Z2UgcGFnZXNcbisgKiBARVhFQ01FTV9OT19IVUdFX1ZNQVA6XHRjYWNoZSBhbGxvY2F0aW9ucyBtdXN0IGF2b2lkIGh1Z2Ugdm1hcHBpbmdzXG4gICovXG4gZW51bSBleGVjbWVtX3JhbmdlX2ZsYWdzIHtcbiBcdEVYRUNNRU1fS0FTQU5fU0hBRE9XXHQ9ICgxIFx1MDAzY1x1MDAzYyAwKSxcbiBcdEVYRUNNRU1fUk9YX0NBQ0hFXHQ9ICgxIFx1MDAzY1x1MDAzYyAxKSxcbitcdEVYRUNNRU1fTk9fSFVHRV9WTUFQXHQ9ICgxIFx1MDAzY1x1MDAzYyAyKSxcbiB9O1xuIFxuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfRVhFQ01FTV9ST1hcbkBAIC0xNzgsNiArMTgwLDE1IEBAIHZvaWQgZXhlY21lbV9mcmVlKHZvaWQgKnB0cik7XG4gXG4gREVGSU5FX0ZSRUUoZXhlY21lbSwgdm9pZCAqLCBpZiAoX1QpIGV4ZWNtZW1fZnJlZShfVCkpO1xuIFxuKy8qKlxuKyAqIGV4ZWNtZW1fc3BsaXQgLSBhbGxvY2F0ZSBzcGFjZSBmcm9tIGFuIGV4aXN0aW5nIGV4ZWNtZW0gY2FjaGUgYWxsb2NhdGlvblxuKyAqIEBwdHIgIC0gdGhlIGV4aXN0aW5nIGV4ZWNtZW0gY2FjaGUgYWxsb2NhdGlvblxuKyAqIEBzaXplIC0gdGhlIHNpemUgdG8gY2FydmUgb3V0IGZyb20gdGhlIGV4aXN0aW5nIGFsbG9jYXRpb25cbisgKlxuKyAqIFJldHVybjogdGhlIGFkZHJlc3Mgb2YgdGhlIGNhcnZlZCBvdXQgYWxsb2NhdGlvbiwgb3IgJU5VTEwgb24gZmFpbHVyZS5cbisgKi9cbit2b2lkICpleGVjbWVtX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpO1xuK1xuICNpZmRlZiBDT05GSUdfTU1VXG4gLyoqXG4gICogZXhlY21lbV92bWFwIC0gY3JlYXRlIHZpcnR1YWwgbWFwcGluZyBmb3IgRVhFQ01FTV9NT0RVTEVfREFUQSBtZW1vcnlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaFxuaW5kZXggNzU2NjgxNWZhYmJlOC4uMDMzNmE0NjczM2RkOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmhcbkBAIC0zMTYsMTAgKzMxNiwxMCBAQCBzdHJ1Y3QgbW9kX3RyZWVfbm9kZSB7XG4gfTtcbiBcbiBlbnVtIG1vZF9tZW1fdHlwZSB7XG4tXHRNT0RfVEVYVCA9IDAsXG4tXHRNT0RfREFUQSxcbitcdE1PRF9EQVRBID0gMCxcbiBcdE1PRF9ST0RBVEEsXG4gXHRNT0RfUk9fQUZURVJfSU5JVCxcbitcdE1PRF9URVhULFxuIFx0TU9EX0lOSVRfVEVYVCxcbiBcdE1PRF9JTklUX0RBVEEsXG4gXHRNT0RfSU5JVF9ST0RBVEEsXG5kaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS9tYWluLmMgYi9rZXJuZWwvbW9kdWxlL21haW4uY1xuaW5kZXggNDZkZDhkMjVhNjA1OC4uMmQ2MjEzNDk2MzU5NyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG4rKysgYi9rZXJuZWwvbW9kdWxlL21haW4uY1xuQEAgLTEzNDIsNyArMTM0Miw3IEBAIHN0YXRpYyBpbnQgbW9kdWxlX21lbW9yeV9hbGxvYyhzdHJ1Y3QgbW9kdWxlICptb2QsIGVudW0gbW9kX21lbV90eXBlIHR5cGUpXG4ge1xuIFx0dW5zaWduZWQgaW50IHNpemUgPSBQQUdFX0FMSUdOKG1vZC1cdTAwM2VtZW1bdHlwZV0uc2l6ZSk7XG4gXHRlbnVtIGV4ZWNtZW1fdHlwZSBleGVjbWVtX3R5cGU7XG4tXHR2b2lkICpwdHI7XG4rXHR2b2lkICpwdHIgPSBOVUxMO1xuIFxuIFx0bW9kLVx1MDAzZW1lbVt0eXBlXS5zaXplID0gc2l6ZTtcbiBcbkBAIC0xMzUxLDExICsxMzUxLDI1IEBAIHN0YXRpYyBpbnQgbW9kdWxlX21lbW9yeV9hbGxvYyhzdHJ1Y3QgbW9kdWxlICptb2QsIGVudW0gbW9kX21lbV90eXBlIHR5cGUpXG4gXHRlbHNlXG4gXHRcdGV4ZWNtZW1fdHlwZSA9IEVYRUNNRU1fTU9EVUxFX1RFWFQ7XG4gXG4tXHRwdHIgPSBleGVjbWVtX2FsbG9jX3J3KGV4ZWNtZW1fdHlwZSwgc2l6ZSk7XG4rXHRib29sIGlzX3JveCA9IGV4ZWNtZW1faXNfcm94KGV4ZWNtZW1fdHlwZSk7XG4rXHRpZiAoaXNfcm94KSB7XG4rXHRcdC8qXG4rXHRcdCAqIFNwZWNpYWwgY2FzZSBmb3IgTU9EX1RFWFQgLyBNT0RfSU5JVF9URVhUOiBhbGxvY2F0ZSB0aGVcbitcdFx0ICogbGF0dGVyIGJ5IHNwbGl0dGluZyBvZmYgcmVxdWlyZWQgc3BhY2UgZnJvbSB0aGUgZm9ybWVyXG4rXHRcdCAqIHNvIHRoYXQgdGhleSBhcmUgYWx3YXlzIHBsYWNlZCBjbG9zZSB0b2dldGhlci5cbitcdFx0ICovXG4rXHRcdGlmICh0eXBlID09IE1PRF9URVhUKVxuK1x0XHRcdHNpemUgKz0gUEFHRV9BTElHTihtb2QtXHUwMDNlbWVtW01PRF9JTklUX1RFWFRdLnNpemUpO1xuK1x0XHRlbHNlIGlmICh0eXBlID09IE1PRF9JTklUX1RFWFQpXG4rXHRcdFx0cHRyID0gZXhlY21lbV9zcGxpdChtb2QtXHUwMDNlbWVtW01PRF9URVhUXS5iYXNlLCBzaXplKTtcbitcdH1cbitcbitcdGlmICghcHRyKVxuK1x0XHRwdHIgPSBleGVjbWVtX2FsbG9jX3J3KGV4ZWNtZW1fdHlwZSwgc2l6ZSk7XG4gXHRpZiAoIXB0cilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRtb2QtXHUwMDNlbWVtW3R5cGVdLmlzX3JveCA9IGV4ZWNtZW1faXNfcm94KGV4ZWNtZW1fdHlwZSk7XG4rXHRtb2QtXHUwMDNlbWVtW3R5cGVdLmlzX3JveCA9IGlzX3JveDtcbiBcbiBcdC8qXG4gXHQgKiBUaGUgcG9pbnRlciB0byB0aGVzZSBibG9ja3Mgb2YgbWVtb3J5IGFyZSBzdG9yZWQgb24gdGhlIG1vZHVsZVxuQEAgLTEzNjgsNyArMTM4Miw3IEBAIHN0YXRpYyBpbnQgbW9kdWxlX21lbW9yeV9hbGxvYyhzdHJ1Y3QgbW9kdWxlICptb2QsIGVudW0gbW9kX21lbV90eXBlIHR5cGUpXG4gXHQgKiAqZG8qIGV2ZW50dWFsbHkgZ2V0IGZyZWVkLCBidXQgbGV0J3MganVzdCBrZWVwIHRoaW5ncyBzaW1wbGVcbiBcdCAqIGFuZCBhdm9pZCAqYW55KiBmYWxzZSBwb3NpdGl2ZXMuXG4gXHQgKi9cbi1cdGlmICghbW9kLVx1MDAzZW1lbVt0eXBlXS5pc19yb3gpXG4rXHRpZiAoIWlzX3JveClcbiBcdFx0a21lbWxlYWtfbm90X2xlYWsocHRyKTtcbiBcbiBcdG1lbXNldChwdHIsIDAsIHNpemUpO1xuZGlmZiAtLWdpdCBhL21tL2V4ZWNtZW0uYyBiL21tL2V4ZWNtZW0uY1xuaW5kZXggMDg0YTIwN2U0Mjc4Yi4uNTc5MGQ0YTg1MzJhZiAxMDA2NDRcbi0tLSBhL21tL2V4ZWNtZW0uY1xuKysrIGIvbW0vZXhlY21lbS5jXG5AQCAtMjc2LDcgKzI3Niw4IEBAIHN0YXRpYyB2b2lkICpfX2V4ZWNtZW1fY2FjaGVfYWxsb2Moc3RydWN0IGV4ZWNtZW1fcmFuZ2UgKnJhbmdlLCBzaXplX3Qgc2l6ZSlcbiBcbiBzdGF0aWMgdm9pZCAqZXhlY21lbV9jYWNoZV9wb3B1bGF0ZV9hbGxvYyhzdHJ1Y3QgZXhlY21lbV9yYW5nZSAqcmFuZ2UsIHNpemVfdCBzaXplKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgdm1fZmxhZ3MgPSBWTV9BTExPV19IVUdFX1ZNQVA7XG4rXHR1bnNpZ25lZCBsb25nIHZtX2ZsYWdzID0gKHJhbmdlLVx1MDAzZWZsYWdzIFx1MDAyNiBFWEVDTUVNX05PX0hVR0VfVk1BUClcbitcdFx0XHRcdFx0XHQ/IDAgOiBWTV9BTExPV19IVUdFX1ZNQVA7XG4gXHRzdHJ1Y3QgbXV0ZXggKm11dGV4ID0gXHUwMDI2ZXhlY21lbV9jYWNoZS5tdXRleDtcbiBcdHN0cnVjdCB2bV9zdHJ1Y3QgKnZtO1xuIFx0c2l6ZV90IGFsbG9jX3NpemU7XG5AQCAtNDM5LDYgKzQ0MCwzMyBAQCBzdGF0aWMgYm9vbCBleGVjbWVtX2NhY2hlX2ZyZWUodm9pZCAqcHRyKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpXG4re1xuK1x0c3RydWN0IG1hcGxlX3RyZWUgKmJ1c3lfYXJlYXMgPSBcdTAwMjZleGVjbWVtX2NhY2hlLmJ1c3lfYXJlYXM7XG4rXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylwdHI7XG4rXHRNQV9TVEFURShtYXMsIGJ1c3lfYXJlYXMsIGFkZHIsIGFkZHIpO1xuK1x0dm9pZCAqYXJlYTtcbitcdGludCBlcnI7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2ZXhlY21lbV9jYWNoZS5tdXRleCk7XG4rXG4rXHRhcmVhID0gbWFzX3dhbGsoXHUwMDI2bWFzKTtcbitcdGlmICghYXJlYSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4rXG4rXHRpZiAoc2l6ZSBcdTAwM2U9IG1hc19yYW5nZV9sZW4oXHUwMDI2bWFzKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4rXG4rXHRhZGRyICs9IG1hc19yYW5nZV9sZW4oXHUwMDI2bWFzKSAtIHNpemU7XG4rXHRtYXNfc2V0X3JhbmdlKFx1MDAyNm1hcywgYWRkciwgbWFzLmxhc3QpO1xuK1xuK1x0ZXJyID0gbWFzX3N0b3JlX2dmcChcdTAwMjZtYXMsICh2b2lkICopYWRkciwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuK1xuK1x0cmV0dXJuICh2b2lkICopYWRkcjtcbit9XG4rXG4gI2Vsc2UgLyogQ09ORklHX0FSQ0hfSEFTX0VYRUNNRU1fUk9YICovXG4gLypcbiAgKiB3aGVuIFJPWCBjYWNoZSBpcyBub3QgdXNlZCB0aGUgcGVybWlzc2lvbnMgZGVmaW5lZCBieSBhcmNoaXRlY3R1cmVzIGZvclxuQEAgLTQ1OSw2ICs0ODcsMTEgQEAgc3RhdGljIGJvb2wgZXhlY21lbV9jYWNoZV9mcmVlKHZvaWQgKnB0cilcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuK1xuK3N0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpXG4re1xuK1x0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4rfVxuICNlbmRpZiAvKiBDT05GSUdfQVJDSF9IQVNfRVhFQ01FTV9ST1ggKi9cbiBcbiB2b2lkICpleGVjbWVtX2FsbG9jKGVudW0gZXhlY21lbV90eXBlIHR5cGUsIHNpemVfdCBzaXplKVxuQEAgLTUxMSw2ICs1NDQsMTggQEAgYm9vbCBleGVjbWVtX2lzX3JveChlbnVtIGV4ZWNtZW1fdHlwZSB0eXBlKVxuIFx0cmV0dXJuICEhKGV4ZWNtZW1faW5mby1cdTAwM2VyYW5nZXNbdHlwZV0uZmxhZ3MgXHUwMDI2IEVYRUNNRU1fUk9YX0NBQ0hFKTtcbiB9XG4gXG4rdm9pZCAqZXhlY21lbV9zcGxpdCh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxuK3tcbitcdGlmICghcHRyIHx8ICFzaXplKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHB0ciA9IGV4ZWNtZW1fY2FjaGVfc3BsaXQocHRyLCBzaXplKTtcbitcdGlmICghSVNfRVJSKHB0cikpXG4rXHRcdHJldHVybiBwdHI7XG4rXHRWTV9XQVJOX09OKHB0ciAhPSBFUlJfUFRSKC1FTk9NRU0pKTtcbitcdHJldHVybiBOVUxMO1xuK31cbitcbiBzdGF0aWMgYm9vbCBleGVjbWVtX3ZhbGlkYXRlKHN0cnVjdCBleGVjbWVtX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IGV4ZWNtZW1fcmFuZ2UgKnIgPSBcdTAwMjZpbmZvLVx1MDAzZXJhbmdlc1tFWEVDTUVNX0RFRkFVTFRdO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NTA6MjQuMzI1MDI4Nzg0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNTA2NjcxNTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEtlcm5lbCBNb2R1bGUgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGdpdmVuIGEgcGF0Y2ggc2VyaWVzIHRoYXQgc2lnbmlmaWNhbnRseSBjaGFuZ2VzIGhvdyBrZXJuZWwgbW9kdWxlcyBhcmUgbG9hZGVkIGFuZCBob3cgZXhlY3V0YWJsZSBtZW1vcnkgaXMgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIEFSTTY0LiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGVzZSBtb2RpZmljYXRpb25zIHByaW1hcmlseSBhZmZlY3QgaW50ZXJuYWwga2VybmVsIG9wZXJhdGlvbnMgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBjb2RlIGV4ZWN1dGlvbiwgd2hpY2ggaW5jbHVkZXMgbW9kdWxlIHRleHQsIFBMVHMgKFByb2NlZHVyZSBMaW5rYWdlIFRhYmxlcyksIGFuZCBmdHJhY2UgdHJhbXBvbGluZXMuXG5cblRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBleGVjbWVtX3NwbGl0YCwgd2hpY2ggc291bmRzIGxpa2UgaXQgY2FydmVzIG91dCBzcGFjZSBmcm9tIGFuIGV4aXN0aW5nIGFsbG9jYXRpb27igJRzcGVjaWZpY2FsbHksIHB1bGxpbmcgYE1PRF9JTklUX1RFWFRgIGZyb20gYE1PRF9URVhUYC4gSXQncyBhbHNvIG1vZGlmeWluZyBmaWxlcyByZWxhdGVkIHRvIFBMVCBoYW5kbGluZyBhbmQgbW9kdWxlIGluaXRpYWxpemF0aW9uIGFuZCBtZW1vcnktcmVsYXRlZCBmaWxlcy4gT25lIGltbWVkaWF0ZSBjb25jZXJuIEkgaGF2ZSBpcyB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBwb3NzaWJsZSB0byBsZWFrIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaXQgc2VlbXMgdGhlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gZm9yIGNvZGUgZXhlY3V0aW9uLiBUaGUgYGV4ZWNtZW1fc3BsaXRgIGZ1bmN0aW9uIHNvdW5kcyBsaWtlIHRoZSBjcml0aWNhbCBwYXJ0IHRvIGV2YWx1YXRlLCBzbyBsZXQncyBjaGVjayBgbW9kdWxlX21lbW9yeV9hbGxvY2AuIFRoZSBjb2RlIGluIHRoZXJlIGlzIGFsbG9jYXRpbmcgbWVtb3J5LCB0aGVuIGl0ICppbW1lZGlhdGVseSogY2FsbHMgYG1lbXNldChwdHIsIDAsIHNpemUpYC4gVGhhdCBzZWVtcyBwcmV0dHkgc2FmZSEgSXQgbG9va3MgbGlrZSB0aGVyZSBpcyBhIHNwZWNpYWwgY2FzZSBmb3IgYE1PRF9URVhUYCBhbmQgYE1PRF9JTklUX1RFWFRgIHRoYXQgdXNlcyBgZXhlY21lbV9zcGxpdGAuIEl0IGFwcGVhcnMgdGhhdCBgTU9EX1RFWFRgIGFsbG9jYXRpb24gaW5jcmVhc2VzIHRoZSBgc2l6ZWAgYnkgdGhlIGBNT0RfSU5JVF9URVhUYCBzaXplLCBhbmQgdGhlbiAqemVyb2VzIHRoZSBlbnRpcmUgYmxvY2sqLiBUaGVuLCB3aGVuIGFsbG9jYXRpbmcgYE1PRF9JTklUX1RFWFRgLCBpdCBjYWxscyBgZXhlY21lbV9zcGxpdGAgYW5kIGFnYWluIGNhbGxzIGBtZW1zZXRgLiBUaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIGFyZSBwb3NzaWJsZS5cblxuSSBhbHNvIHNlZSB0aGF0IG1lbW9yeSBhbGxvY2F0aW9ucyBtYWRlIHZpYSB0aGUgUk9YIGNhY2hlIGFyZSBwb3B1bGF0ZWQgd2l0aCB0cmFwcGluZyBpbnN0cnVjdGlvbnMgb3IgemVyb2VzLiBBbGwgdmVyeSBnb29kLiBHaXZlbiBhbGwgdGhhdCwgdGhpcyBzZWVtcyB0byBiZSBlbnRpcmVseSBpbnRlcm5hbCwgYW5kIHRoZXJlJ3Mgbm8gZGF0YSBiZWluZyBwYXNzZWQgdG8gdXNlcnNwYWNlLiBUaGVyZSdzIG5vIGNvbXBsZXggc3RydWN0dXJlIGNvbnN0cnVjdGlvbiB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBBbnkgaXNzdWVzIGhlcmUgd291bGQgbGlrZWx5IG1hbmlmZXN0IGFzIGNyYXNoZXMsIHBhZ2UgZmF1bHRzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhlc2UgaXNzdWVzIGFyZSBiZXN0IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy5cblxuSSdtIGFsc28gbG9va2luZyBhdCB0aGUgUExUIHNlY3Rpb24gY29uc29saWRhdGlvbi4gVGhpcyBzZWVtcyBzYWZlIGJlY2F1c2UgaXQganVzdCBtZXJnZXMgZXZlcnl0aGluZyBpbnRvIHRoZSBjb3JlIHNlY3Rpb24uIFRoZSBjaGFuZ2VzIHRvIGBhcmNoL2FybTY0L21tL2luaXQuY2AgaW5pdGlhbGl6ZSBtZW1vcnkgd2l0aCB0cmFwcGluZyBpbnN0cnVjdGlvbnMsIGFuZCB0aGUgY2hhbmdlcyB0byBgcGFnZWF0dHIuY2AgcmVsYXRlIHRvIGNoYW5naW5nIHBhZ2UgYXR0cmlidXRlcy4gU3RpbGwsIEkgc2VlIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MsIGFuZCB0aGUgbWVtb3J5IGFsbG9jYXRlZCBpcyB6ZXJvZWQuXG5cbk9rYXksIGFmdGVyIGEgdGhvcm91Z2ggcmV2aWV3LCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBzZXJpZXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbGwgbW9kdWxlIG1lbW9yeSBpcyBpbml0aWFsaXplZCwgYW5kIHRoZXNlIGNoYW5nZXMgZG9uJ3QgaW52b2x2ZSBzZW5kaW5nIGFueSBkYXRhIHRvIHVzZXIgc3BhY2UuIEl0IHNlZW1zIGxpa2UgYSBcIk5lZWRzS01TQU4gPSBmYWxzZVwiIGNhbGwgdG8gbWUuIFRoZXNlIGNoYW5nZXMgZG9uJ3QgbmVlZCBkZWRpY2F0ZWQgS01TQU4gYXR0ZW50aW9uLiBUaGUgbGlrZWx5IGZhaWx1cmUgbW9kZXMgaGVyZSBhcmUgcGFnZSBmYXVsdHMsIGtlcm5lbCBjcmFzaGVzLCBvciBtZW1vcnkgY29ycnVwdGlvbiB3aGljaCBhcmUgYWxsIGVhc2lseSBjYXVnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NTQsIk91dHB1dFRva2VucyI6MjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE0OjUxOjM1LjgzMTcwMzUxN1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBleGVjdXRhYmxlIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIChgZXhlY21lbWApIGZvciBrZXJuZWwgbW9kdWxlcywgc3BlY2lmaWNhbGx5IGNvbnNvbGlkYXRpbmcgbW9kdWxlIHRleHQgYW5kIGluaXQgdGV4dCBhbGxvY2F0aW9ucywgbWVyZ2luZyBQTFQgc2VjdGlvbnMgZm9yIEFSTTY0LCBhbmQgYWRqdXN0aW5nIHBhZ2UgYXR0cmlidXRlcyBmb3IgUk9YIChSZWFkLU9ubHkgRXhlY3V0ZSkgY2FjaGVzLiBUaGVzZSBjaGFuZ2VzIGRlYWwgd2l0aCBpbnRlcm5hbCBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQsIHBhZ2UgcGVybWlzc2lvbnMsIGFuZCBtb2R1bGUgbG9hZGluZy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBwYWdlIGZhdWx0cywgb3IgaW52YWxpZCBpbnN0cnVjdGlvbiBleGNlcHRpb25zLiBTdWNoIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIHN0YW5kYXJkIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIGFuZCBrZXJuZWwgYm9vdC9tb2R1bGUgbG9hZGluZyB0ZXN0cy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggc3RhY2svaGVhcCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQWxsIGFsbG9jYXRlZCBtb2R1bGUgbWVtb3J5IGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGUuZy4sIHZpYSBgbWVtc2V0YCBpbiBgbW9kdWxlX21lbW9yeV9hbGxvY2Agb3IgYGV4ZWNtZW1fZmlsbF90cmFwcGluZ19pbnNuc2ApLiBUaHVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIGV4ZWN1dGFibGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgKGBleGVjbWVtYCkgZm9yIGtlcm5lbCBtb2R1bGVzLCBzcGVjaWZpY2FsbHkgY29uc29saWRhdGluZyBtb2R1bGUgdGV4dCBhbmQgaW5pdCB0ZXh0IGFsbG9jYXRpb25zLCBtZXJnaW5nIFBMVCBzZWN0aW9ucyBmb3IgQVJNNjQsIGFuZCBhZGp1c3RpbmcgcGFnZSBhdHRyaWJ1dGVzIGZvciBST1ggKFJlYWQtT25seSBFeGVjdXRlKSBjYWNoZXMuIFRoZXNlIGNoYW5nZXMgZGVhbCB3aXRoIGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCwgcGFnZSBwZXJtaXNzaW9ucywgYW5kIG1vZHVsZSBsb2FkaW5nLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHBhZ2UgZmF1bHRzLCBvciBpbnZhbGlkIGluc3RydWN0aW9uIGV4Y2VwdGlvbnMuIFN1Y2ggaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgc3RhbmRhcmQgcGFnZSBmYXVsdCBoYW5kbGVycywgYW5kIGtlcm5lbCBib290L21vZHVsZSBsb2FkaW5nIHRlc3RzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBzdGFjay9oZWFwIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbGwgYWxsb2NhdGVkIG1vZHVsZSBtZW1vcnkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCAoZS5nLiwgdmlhIGBtZW1zZXRgIGluIGBtb2R1bGVfbWVtb3J5X2FsbG9jYCBvciBgZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zYCkuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlhl7k[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-22 14:03:04 +0000 UTC FinishedAt: 2026-08-22 14:51:37 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "ff53afcd82dec735bd9705593413784fe2c12ab3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MODULES", "DYNAMIC_FTRACE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "ff53afcd82dec735bd9705593413784fe2c12ab3", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MODULES", "DYNAMIC_FTRACE" ], "series_id": "706536fa-eef3-4c99-b61d-d597f5d6cb75" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "execmem_split", "module_emit_plt_entry", "module_emit_veneer_for_adrp", "module_frob_arch_sections", "execmem_fill_trapping_insns" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE0OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01PRFVMRVMmIzM0OywKICAgICYjMzQ7RFlOQU1JQ19GVFJBQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleGVjbWVtX3NwbGl0JiMzNDssCiAgICAmIzM0O21vZHVsZV9lbWl0X3BsdF9lbnRyeSYjMzQ7LAogICAgJiMzNDttb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnAmIzM0OywKICAgICYjMzQ7bW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyYjMzQ7LAogICAgJiMzNDtleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIGV4ZWN1dGFibGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgKGBleGVjbWVtYCkgZm9yIGtlcm5lbCBtb2R1bGVzLCBzcGVjaWZpY2FsbHkgY29uc29saWRhdGluZyBtb2R1bGUgdGV4dCBhbmQgaW5pdCB0ZXh0IGFsbG9jYXRpb25zLCBtZXJnaW5nIFBMVCBzZWN0aW9ucyBmb3IgQVJNNjQsIGFuZCBhZGp1c3RpbmcgcGFnZSBhdHRyaWJ1dGVzIGZvciBST1ggKFJlYWQtT25seSBFeGVjdXRlKSBjYWNoZXMuIFRoZXNlIGNoYW5nZXMgZGVhbCB3aXRoIGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCwgcGFnZSBwZXJtaXNzaW9ucywgYW5kIG1vZHVsZSBsb2FkaW5nLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHBhZ2UgZmF1bHRzLCBvciBpbnZhbGlkIGluc3RydWN0aW9uIGV4Y2VwdGlvbnMuIFN1Y2ggaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgc3RhbmRhcmQgcGFnZSBmYXVsdCBoYW5kbGVycywgYW5kIGtlcm5lbCBib290L21vZHVsZSBsb2FkaW5nIHRlc3RzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBzdGFjay9oZWFwIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbGwgYWxsb2NhdGVkIG1vZHVsZSBtZW1vcnkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCAoZS5nLiwgdmlhIGBtZW1zZXRgIGluIGBtb2R1bGVfbWVtb3J5X2FsbG9jYCBvciBgZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zYCkuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBBUkNIX0hBU19FWEVDTUVNX1JPWCBmb3IgYXJtNjQsIG1vZGlmeWluZyBob3cgbW9kdWxlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYnkgc3BsaXR0aW5nIE1PRF9JTklUX1RFWFQgZnJvbSBNT0RfVEVYVCB3aGVuIGV4ZWNtZW1faXNfcm94IGlzIHRydWUuIEl0IGFsc28gdXBkYXRlcyBmdHJhY2UgdHJhbXBvbGluZXMgYW5kIFBMVCBnZW5lcmF0aW9uIGZvciBtb2R1bGVzIG9uIGFybTY0IHRvIGFjY29tbW9kYXRlIHRoZXNlIGNoYW5nZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgKG1vZHVsZSBsb2FkaW5nLCBleGVjdXRhYmxlIG1lbW9yeSBhbGxvY2F0aW9uLCBmdHJhY2UpIHRoYXQgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjYzgyYzc3MjA2ZWI5NWFjMWY0ZDQ1YjhmMzVjYmY4ODFjODA2ZTEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMTQ6NDg6MjcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9LY29uZmlnIGIvYXJjaC9hcm02NC9LY29uZmlnXG5pbmRleCBiM2FmZTA2ODg5MTliLi4wODBiOTdiMGJiZDVlIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L0tjb25maWdcbkBAIC0yNyw2ICYjNDM7MjcsNyBAQCBjb25maWcgQVJNNjRcbiBcdHNlbGVjdCBBUkNIX0hBU19ETUFfT1BTIGlmIFhFTlxuIFx0c2VsZWN0IEFSQ0hfSEFTX0RNQV9QUkVQX0NPSEVSRU5UXG4gXHRzZWxlY3QgQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFIGlmIEFDUElcbiYjNDM7XHRzZWxlY3QgQVJDSF9IQVNfRVhFQ01FTV9ST1hcbiBcdHNlbGVjdCBBUkNIX0hBU19GQVNUX01VTFRJUExJRVJcbiBcdHNlbGVjdCBBUkNIX0hBU19GT1JUSUZZX1NPVVJDRVxuIFx0c2VsZWN0IEFSQ0hfSEFTX0dDT1ZfUFJPRklMRV9BTExcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaFxuaW5kZXggZmI5Yjg4ZWViZWIxNS4uOTMyOGZhZGI0YTk1OSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmhcbkBAIC0xNSwxMSAmIzQzOzE1LDkgQEAgc3RydWN0IG1vZF9wbHRfc2VjIHtcbiBcbiBzdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMge1xuIFx0c3RydWN0IG1vZF9wbHRfc2VjXHRjb3JlO1xuLVx0c3RydWN0IG1vZF9wbHRfc2VjXHRpbml0O1xuIFxuIFx0LyogZm9yIENPTkZJR19EWU5BTUlDX0ZUUkFDRSAqL1xuIFx0c3RydWN0IHBsdF9lbnRyeVx0KmZ0cmFjZV90cmFtcG9saW5lcztcbi1cdHN0cnVjdCBwbHRfZW50cnlcdCppbml0X2Z0cmFjZV90cmFtcG9saW5lcztcbiB9O1xuIFxuIHU2NCBtb2R1bGVfZW1pdF9wbHRfZW50cnkoc3RydWN0IG1vZHVsZSAqbW9kLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmxkcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmhcbmluZGV4IDBiM2FhY2QyMmM1OTAuLjk1NTQwZTk1NmI0MTkgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5sZHMuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmhcbkBAIC0xLDggJiM0MzsxLDUgQEBcbiBTRUNUSU9OUyB7XG4gXHQucGx0IDAgOiB7IEJZVEUoMCkgfVxuLVx0LmluaXQucGx0IDAgOiB7IEJZVEUoMCkgfVxuLVx0LnRleHQuZnRyYWNlX3RyYW1wb2xpbmUgMCA6IHsgQllURSgwKSB9XG4tXHQuaW5pdC50ZXh0LmZ0cmFjZV90cmFtcG9saW5lIDAgOiB7IEJZVEUoMCkgfVxuIFxuICNpZmRlZiBDT05GSUdfS0FTQU5fU1dfVEFHU1xuIFx0LypcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jXG5pbmRleCA1YTE1NTRhNDQxNjI4Li5iNTZkYTI0YzFiZTRmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvZnRyYWNlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jXG5AQCAtMjU4LDE3ICYjNDM7MjU4LDEwIEBAIGludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYylcbiBcdHJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUocGMsIDAsIG5ldywgZmFsc2UpO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHBsdF9lbnRyeSAqZ2V0X2Z0cmFjZV9wbHQoc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4mIzQzO3N0YXRpYyBzdHJ1Y3QgcGx0X2VudHJ5ICpnZXRfZnRyYWNlX3BsdChzdHJ1Y3QgbW9kdWxlICptb2QpXG4ge1xuICNpZmRlZiBDT05GSUdfTU9EVUxFU1xuLVx0c3RydWN0IHBsdF9lbnRyeSAqcGx0ID0gTlVMTDtcbi1cbi1cdGlmICh3aXRoaW5fbW9kdWxlX21lbV90eXBlKGFkZHIsIG1vZCwgTU9EX0lOSVRfVEVYVCkpXG4tXHRcdHBsdCA9IG1vZC1cdTAwM2VhcmNoLmluaXRfZnRyYWNlX3RyYW1wb2xpbmVzO1xuLVx0ZWxzZSBpZiAod2l0aGluX21vZHVsZV9tZW1fdHlwZShhZGRyLCBtb2QsIE1PRF9URVhUKSlcbi1cdFx0cGx0ID0gbW9kLVx1MDAzZWFyY2guZnRyYWNlX3RyYW1wb2xpbmVzO1xuLVx0ZWxzZVxuLVx0XHRyZXR1cm4gTlVMTDtcbiYjNDM7XHRzdHJ1Y3QgcGx0X2VudHJ5ICpwbHQgPSBtb2QtXHUwMDNlYXJjaC5mdHJhY2VfdHJhbXBvbGluZXM7XG4gXG4gXHRyZXR1cm4gXHUwMDI2cGx0W0ZUUkFDRV9QTFRfSURYXTtcbiAjZWxzZVxuQEAgLTMzOSw3ICYjNDM7MzMyLDcgQEAgc3RhdGljIGJvb2wgZnRyYWNlX2ZpbmRfY2FsbGFibGVfYWRkcihzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLFxuIFx0aWYgKFdBUk5fT04oIW1vZCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHBsdCA9IGdldF9mdHJhY2VfcGx0KG1vZCwgcGMpO1xuJiM0MztcdHBsdCA9IGdldF9mdHJhY2VfcGx0KG1vZCk7XG4gXHRpZiAoIXBsdCkge1xuIFx0XHRwcl9lcnIoXCYjMzQ7ZnRyYWNlOiBubyBtb2R1bGUgUExUIGZvciAlcHNcXG5cJiMzNDssICh2b2lkICopKmFkZHIpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYyBiL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmNcbmluZGV4IDdhZmQzNzBkYTlmNDguLjY5MDBkMjI0MmYxYmUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jXG5AQCAtNzAsOCAmIzQzOzcwLDcgQEAgdTY0IG1vZHVsZV9lbWl0X3BsdF9lbnRyeShzdHJ1Y3QgbW9kdWxlICptb2QsIEVsZjY0X1NoZHIgKnNlY2hkcnMsXG4gXHRcdFx0ICB2b2lkICpsb2MsIGNvbnN0IEVsZjY0X1JlbGEgKnJlbGEsXG4gXHRcdFx0ICBFbGY2NF9TeW0gKnN5bSlcbiB7XG4tXHRzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9ICF3aXRoaW5fbW9kdWxlX2luaXQoKHVuc2lnbmVkIGxvbmcpbG9jLCBtb2QpID9cbi1cdFx0XHRcdFx0XHRcdTAwMjZtb2QtXHUwMDNlYXJjaC5jb3JlIDogXHUwMDI2bW9kLVx1MDAzZWFyY2guaW5pdDtcbiYjNDM7XHRzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9IFx1MDAyNm1vZC1cdTAwM2VhcmNoLmNvcmU7XG4gXHRzdHJ1Y3QgcGx0X2VudHJ5ICpwbHQgPSAoc3RydWN0IHBsdF9lbnRyeSAqKXNlY2hkcnNbcGx0c2VjLVx1MDAzZXBsdF9zaG5keF0uc2hfYWRkcjtcbiBcdGludCBpID0gcGx0c2VjLVx1MDAzZXBsdF9udW1fZW50cmllcztcbiBcdGludCBqID0gaSAtIDE7XG5AQCAtMTAxLDggJiM0MzsxMDAsNyBAQCB1NjQgbW9kdWxlX2VtaXRfcGx0X2VudHJ5KHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycyxcbiB1NjQgbW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwKHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycyxcbiBcdFx0XHRcdHZvaWQgKmxvYywgdTY0IHZhbClcbiB7XG4tXHRzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9ICF3aXRoaW5fbW9kdWxlX2luaXQoKHVuc2lnbmVkIGxvbmcpbG9jLCBtb2QpID9cbi1cdFx0XHRcdFx0XHRcdTAwMjZtb2QtXHUwMDNlYXJjaC5jb3JlIDogXHUwMDI2bW9kLVx1MDAzZWFyY2guaW5pdDtcbiYjNDM7XHRzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9IFx1MDAyNm1vZC1cdTAwM2VhcmNoLmNvcmU7XG4gXHRzdHJ1Y3QgcGx0X2VudHJ5ICpwbHQgPSAoc3RydWN0IHBsdF9lbnRyeSAqKXNlY2hkcnNbcGx0c2VjLVx1MDAzZXBsdF9zaG5keF0uc2hfYWRkcjtcbiBcdGludCBpID0gcGx0c2VjLVx1MDAzZXBsdF9udW1fZW50cmllcyYjNDM7JiM0Mzs7XG4gXHR1MzIgYnI7XG5AQCAtMTY5LDE3ICYjNDM7MTY3LDE3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgY291bnRfcGx0cyhFbGY2NF9TeW0gKnN5bXMsIEVsZjY0X1JlbGEgKnJlbGEsIGludCBudW0sXG4gXHRcdGNhc2UgUl9BQVJDSDY0X0NBTEwyNjpcbiBcdFx0XHQvKlxuIFx0XHRcdCAqIFdlIG9ubHkgaGF2ZSB0byBjb25zaWRlciBicmFuY2ggdGFyZ2V0cyB0aGF0IHJlc29sdmVcbi1cdFx0XHQgKiB0byBzeW1ib2xzIHRoYXQgYXJlIGRlZmluZWQgaW4gYSBkaWZmZXJlbnQgc2VjdGlvbi5cbiYjNDM7XHRcdFx0ICogdG8gc3ltYm9scyB0aGF0IGFyZSBub3QgZGVmaW5lZCBpbiB0aGUgc2FtZSBtb2R1bGUuXG4gXHRcdFx0ICogVGhpcyBpcyBub3Qgc2ltcGx5IGEgaGV1cmlzdGljLCBpdCBpcyBhIGZ1bmRhbWVudGFsXG4gXHRcdFx0ICogbGltaXRhdGlvbiwgc2luY2UgdGhlcmUgaXMgbm8gZ3VhcmFudGVlZCB3YXkgdG8gZW1pdFxuIFx0XHRcdCAqIFBMVCBlbnRyaWVzIHN1ZmZpY2llbnRseSBjbG9zZSB0byB0aGUgYnJhbmNoIGlmIHRoZVxuIFx0XHRcdCAqIHNlY3Rpb24gc2l6ZSBleGNlZWRzIHRoZSByYW5nZSBvZiBhIGJyYW5jaFxuIFx0XHRcdCAqIGluc3RydWN0aW9uLiBTbyBpZ25vcmUgcmVsb2NhdGlvbnMgYWdhaW5zdCBkZWZpbmVkXG4tXHRcdFx0ICogc3ltYm9scyBpZiB0aGV5IGxpdmUgaW4gdGhlIHNhbWUgc2VjdGlvbiBhcyB0aGVcbiYjNDM7XHRcdFx0ICogc3ltYm9scyBpZiB0aGV5IGxpdmUgaW4gdGhlIHNhbWUgbW9kdWxlIGFzIHRoZVxuIFx0XHRcdCAqIHJlbG9jYXRpb24gdGFyZ2V0LlxuIFx0XHRcdCAqL1xuIFx0XHRcdHMgPSBzeW1zICYjNDM7IEVMRjY0X1JfU1lNKHJlbGFbaV0ucl9pbmZvKTtcbi1cdFx0XHRpZiAocy1cdTAwM2VzdF9zaG5keCA9PSBkc3RpZHgpXG4mIzQzO1x0XHRcdGlmIChzLVx1MDAzZXN0X3NobmR4ICE9IFNITl9VTkRFRilcbiBcdFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRcdC8qXG5AQCAtMjc3LDEzICYjNDM7Mjc1LDE0IEBAIHN0YXRpYyBpbnQgcGFydGl0aW9uX2JyYW5jaF9wbHRfcmVsYXMoRWxmNjRfU3ltICpzeW1zLCBFbGY2NF9SZWxhICpyZWxhLFxuIFx0cmV0dXJuIGk7XG4gfVxuIFxuJiM0MztzdGF0aWMgY29uc3QgaW50IGZ0cmFjZV9wbHRzID0gSVNfRU5BQkxFRChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpID8gTlJfRlRSQUNFX1BMVFMgOiAwO1xuJiM0MztcbiBpbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqZWhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXG4gXHRcdFx0ICAgICAgY2hhciAqc2Vjc3RyaW5ncywgc3RydWN0IG1vZHVsZSAqbW9kKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgY29yZV9wbHRzID0gMDtcbi1cdHVuc2lnbmVkIGxvbmcgaW5pdF9wbHRzID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGNvcmVfcGx0cyA9IGZ0cmFjZV9wbHRzO1xuIFx0RWxmNjRfU3ltICpzeW1zID0gTlVMTDtcbi1cdEVsZl9TaGRyICpwbHRzZWMsICp0cmFtcCA9IE5VTEwsICppbml0X3RyYW1wID0gTlVMTDtcbiYjNDM7XHRFbGZfU2hkciAqcGx0c2VjO1xuIFx0aW50IGk7XG4gXG4gXHQvKlxuQEAgLTI5MywyMCAmIzQzOzI5MiwxMiBAQCBpbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqZWhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlaGRyLVx1MDAzZWVfc2hudW07IGkmIzQzOyYjNDM7KSB7XG4gXHRcdGlmICghc3RyY21wKHNlY3N0cmluZ3MgJiM0Mzsgc2VjaGRyc1tpXS5zaF9uYW1lLCBcJiMzNDsucGx0XCYjMzQ7KSlcbiBcdFx0XHRtb2QtXHUwMDNlYXJjaC5jb3JlLnBsdF9zaG5keCA9IGk7XG4tXHRcdGVsc2UgaWYgKCFzdHJjbXAoc2Vjc3RyaW5ncyAmIzQzOyBzZWNoZHJzW2ldLnNoX25hbWUsIFwmIzM0Oy5pbml0LnBsdFwmIzM0OykpXG4tXHRcdFx0bW9kLVx1MDAzZWFyY2guaW5pdC5wbHRfc2huZHggPSBpO1xuLVx0XHRlbHNlIGlmICghc3RyY21wKHNlY3N0cmluZ3MgJiM0Mzsgc2VjaGRyc1tpXS5zaF9uYW1lLFxuLVx0XHRcdFx0IFwmIzM0Oy50ZXh0LmZ0cmFjZV90cmFtcG9saW5lXCYjMzQ7KSlcbi1cdFx0XHR0cmFtcCA9IHNlY2hkcnMgJiM0MzsgaTtcbi1cdFx0ZWxzZSBpZiAoIXN0cmNtcChzZWNzdHJpbmdzICYjNDM7IHNlY2hkcnNbaV0uc2hfbmFtZSxcbi1cdFx0XHRcdCBcJiMzNDsuaW5pdC50ZXh0LmZ0cmFjZV90cmFtcG9saW5lXCYjMzQ7KSlcbi1cdFx0XHRpbml0X3RyYW1wID0gc2VjaGRycyAmIzQzOyBpO1xuIFx0XHRlbHNlIGlmIChzZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX1NZTVRBQilcbiBcdFx0XHRzeW1zID0gKEVsZjY0X1N5bSAqKXNlY2hkcnNbaV0uc2hfYWRkcjtcbiBcdH1cbiBcbi1cdGlmICghbW9kLVx1MDAzZWFyY2guY29yZS5wbHRfc2huZHggfHwgIW1vZC1cdTAwM2VhcmNoLmluaXQucGx0X3NobmR4KSB7XG4tXHRcdHByX2VycihcJiMzNDslczogbW9kdWxlIFBMVCBzZWN0aW9uKHMpIG1pc3NpbmdcXG5cJiMzNDssIG1vZC1cdTAwM2VuYW1lKTtcbiYjNDM7XHRpZiAoIW1vZC1cdTAwM2VhcmNoLmNvcmUucGx0X3NobmR4KSB7XG4mIzQzO1x0XHRwcl9lcnIoXCYjMzQ7JXM6IG1vZHVsZSBQTFQgc2VjdGlvbiBtaXNzaW5nXFxuXCYjMzQ7LCBtb2QtXHUwMDNlbmFtZSk7XG4gXHRcdHJldHVybiAtRU5PRVhFQztcbiBcdH1cbiBcdGlmICghc3ltcykge1xuQEAgLTMzNSwxMiAmIzQzOzMyNiw4IEBAIGludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICplaGRyLCBFbGZfU2hkciAqc2VjaGRycyxcbiBcdFx0aWYgKG5lbnRzKVxuIFx0XHRcdHNvcnQocmVscywgbmVudHMsIHNpemVvZihFbGY2NF9SZWxhKSwgY21wX3JlbGEsIE5VTEwpO1xuIFxuLVx0XHRpZiAoIW1vZHVsZV9pbml0X2xheW91dF9zZWN0aW9uKHNlY3N0cmluZ3MgJiM0MzsgZHN0c2VjLVx1MDAzZXNoX25hbWUpKVxuLVx0XHRcdGNvcmVfcGx0cyAmIzQzOz0gY291bnRfcGx0cyhzeW1zLCByZWxzLCBudW1yZWxzLFxuLVx0XHRcdFx0XHRcdHNlY2hkcnNbaV0uc2hfaW5mbywgZHN0c2VjKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdGluaXRfcGx0cyAmIzQzOz0gY291bnRfcGx0cyhzeW1zLCByZWxzLCBudW1yZWxzLFxuLVx0XHRcdFx0XHRcdHNlY2hkcnNbaV0uc2hfaW5mbywgZHN0c2VjKTtcbiYjNDM7XHRcdGNvcmVfcGx0cyAmIzQzOz0gY291bnRfcGx0cyhzeW1zLCByZWxzLCBudW1yZWxzLCBzZWNoZHJzW2ldLnNoX2luZm8sXG4mIzQzO1x0XHRcdFx0XHRkc3RzZWMpO1xuIFx0fVxuIFxuIFx0cGx0c2VjID0gc2VjaGRycyAmIzQzOyBtb2QtXHUwMDNlYXJjaC5jb3JlLnBsdF9zaG5keDtcbkBAIC0zNDgsMzAgJiM0MzszMzUsOCBAQCBpbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqZWhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXG4gXHRwbHRzZWMtXHUwMDNlc2hfZmxhZ3MgPSBTSEZfRVhFQ0lOU1RSIHwgU0hGX0FMTE9DO1xuIFx0cGx0c2VjLVx1MDAzZXNoX2FkZHJhbGlnbiA9IEwxX0NBQ0hFX0JZVEVTO1xuIFx0cGx0c2VjLVx1MDAzZXNoX3NpemUgPSAoY29yZV9wbHRzICAmIzQzOyAxKSAqIHNpemVvZihzdHJ1Y3QgcGx0X2VudHJ5KTtcbi1cdG1vZC1cdTAwM2VhcmNoLmNvcmUucGx0X251bV9lbnRyaWVzID0gMDtcbiYjNDM7XHRtb2QtXHUwMDNlYXJjaC5jb3JlLnBsdF9udW1fZW50cmllcyA9IGZ0cmFjZV9wbHRzO1xuIFx0bW9kLVx1MDAzZWFyY2guY29yZS5wbHRfbWF4X2VudHJpZXMgPSBjb3JlX3BsdHM7XG4gXG4tXHRwbHRzZWMgPSBzZWNoZHJzICYjNDM7IG1vZC1cdTAwM2VhcmNoLmluaXQucGx0X3NobmR4O1xuLVx0cGx0c2VjLVx1MDAzZXNoX3R5cGUgPSBTSFRfTk9CSVRTO1xuLVx0cGx0c2VjLVx1MDAzZXNoX2ZsYWdzID0gU0hGX0VYRUNJTlNUUiB8IFNIRl9BTExPQztcbi1cdHBsdHNlYy1cdTAwM2VzaF9hZGRyYWxpZ24gPSBMMV9DQUNIRV9CWVRFUztcbi1cdHBsdHNlYy1cdTAwM2VzaF9zaXplID0gKGluaXRfcGx0cyAmIzQzOyAxKSAqIHNpemVvZihzdHJ1Y3QgcGx0X2VudHJ5KTtcbi1cdG1vZC1cdTAwM2VhcmNoLmluaXQucGx0X251bV9lbnRyaWVzID0gMDtcbi1cdG1vZC1cdTAwM2VhcmNoLmluaXQucGx0X21heF9lbnRyaWVzID0gaW5pdF9wbHRzO1xuLVxuLVx0aWYgKHRyYW1wKSB7XG4tXHRcdHRyYW1wLVx1MDAzZXNoX3R5cGUgPSBTSFRfTk9CSVRTO1xuLVx0XHR0cmFtcC1cdTAwM2VzaF9mbGFncyA9IFNIRl9FWEVDSU5TVFIgfCBTSEZfQUxMT0M7XG4tXHRcdHRyYW1wLVx1MDAzZXNoX2FkZHJhbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCBwbHRfZW50cnkpO1xuLVx0XHR0cmFtcC1cdTAwM2VzaF9zaXplID0gTlJfRlRSQUNFX1BMVFMgKiBzaXplb2Yoc3RydWN0IHBsdF9lbnRyeSk7XG4tXHR9XG4tXG4tXHRpZiAoaW5pdF90cmFtcCkge1xuLVx0XHRpbml0X3RyYW1wLVx1MDAzZXNoX3R5cGUgPSBTSFRfTk9CSVRTO1xuLVx0XHRpbml0X3RyYW1wLVx1MDAzZXNoX2ZsYWdzID0gU0hGX0VYRUNJTlNUUiB8IFNIRl9BTExPQztcbi1cdFx0aW5pdF90cmFtcC1cdTAwM2VzaF9hZGRyYWxpZ24gPSBfX2FsaWdub2ZfXyhzdHJ1Y3QgcGx0X2VudHJ5KTtcbi1cdFx0aW5pdF90cmFtcC1cdTAwM2VzaF9zaXplID0gTlJfRlRSQUNFX1BMVFMgKiBzaXplb2Yoc3RydWN0IHBsdF9lbnRyeSk7XG4tXHR9XG4tXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuY1xuaW5kZXggMjRhZGI1ODFhZjBlYi4uNjIwYzJiNzAxMTVlNSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuY1xuQEAgLTQ1NCwyOSAmIzQzOzQ1NCwxMSBAQCBzdGF0aWMgaW50IG1vZHVsZV9pbml0X2Z0cmFjZV9wbHQoY29uc3QgRWxmX0VoZHIgKmhkcixcbiBcdFx0XHRcdCAgc3RydWN0IG1vZHVsZSAqbW9kKVxuIHtcbiAjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpXG4tXHRjb25zdCBFbGZfU2hkciAqcztcbi1cdHN0cnVjdCBwbHRfZW50cnkgKnBsdHM7XG4tXG4tXHRzID0gZmluZF9zZWN0aW9uKGhkciwgc2VjaGRycywgXCYjMzQ7LnRleHQuZnRyYWNlX3RyYW1wb2xpbmVcJiMzNDspO1xuLVx0aWYgKCFzKVxuLVx0XHRyZXR1cm4gLUVOT0VYRUM7XG4tXG4tXHRwbHRzID0gKHZvaWQgKilzLVx1MDAzZXNoX2FkZHI7XG4mIzQzO1x0c3RydWN0IHBsdF9lbnRyeSAqcGx0cyA9ICh2b2lkICopc2VjaGRyc1ttb2QtXHUwMDNlYXJjaC5jb3JlLnBsdF9zaG5keF0uc2hfYWRkcjtcbiBcbiBcdF9faW5pdF9wbHQoXHUwMDI2cGx0c1tGVFJBQ0VfUExUX0lEWF0sIEZUUkFDRV9BRERSKTtcbiBcbiBcdG1vZC1cdTAwM2VhcmNoLmZ0cmFjZV90cmFtcG9saW5lcyA9IHBsdHM7XG4tXG4tXHRzID0gZmluZF9zZWN0aW9uKGhkciwgc2VjaGRycywgXCYjMzQ7LmluaXQudGV4dC5mdHJhY2VfdHJhbXBvbGluZVwmIzM0Oyk7XG4tXHRpZiAoIXMpXG4tXHRcdHJldHVybiAtRU5PRVhFQztcbi1cbi1cdHBsdHMgPSAodm9pZCAqKXMtXHUwMDNlc2hfYWRkcjtcbi1cbi1cdF9faW5pdF9wbHQoXHUwMDI2cGx0c1tGVFJBQ0VfUExUX0lEWF0sIEZUUkFDRV9BRERSKTtcbi1cbi1cdG1vZC1cdTAwM2VhcmNoLmluaXRfZnRyYWNlX3RyYW1wb2xpbmVzID0gcGx0cztcbi1cbiAjZW5kaWZcbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL2luaXQuYyBiL2FyY2gvYXJtNjQvbW0vaW5pdC5jXG5pbmRleCA5Nzk4N2Y4NTBhMzNjLi5lNmM5ODA0NTA0NmUyIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9tbS9pbml0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vaW5pdC5jXG5AQCAtNTMxLDcgJiM0Mzs1MzEsOCBAQCBzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG4gXHRcdFx0W0VYRUNNRU1fREVGQVVMVF0gPSB7XG4gXHRcdFx0XHQuc3RhcnRcdD0gc3RhcnQsXG4gXHRcdFx0XHQuZW5kXHQ9IGVuZCxcbi1cdFx0XHRcdC5wZ3Byb3RcdD0gUEFHRV9LRVJORUwsXG4mIzQzO1x0XHRcdFx0LnBncHJvdFx0PSBQQUdFX0tFUk5FTF9ST1gsXG4mIzQzO1x0XHRcdFx0LmZsYWdzXHQ9IEVYRUNNRU1fUk9YX0NBQ0hFLFxuIFx0XHRcdFx0LmFsaWdubWVudCA9IDEsXG4gXHRcdFx0XHQuZmFsbGJhY2tfc3RhcnRcdD0gZmFsbGJhY2tfc3RhcnQsXG4gXHRcdFx0XHQuZmFsbGJhY2tfZW5kXHQ9IGZhbGxiYWNrX2VuZCxcbkBAIC01NDgsOSAmIzQzOzU0OSwyNSBAQCBzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG4gXHRcdFx0XHQucGdwcm90XHQ9IFBBR0VfS0VSTkVMLFxuIFx0XHRcdFx0LmFsaWdubWVudCA9IDEsXG4gXHRcdFx0fSxcbiYjNDM7XHRcdFx0W0VYRUNNRU1fTU9EVUxFX0RBVEFdID0ge1xuJiM0MztcdFx0XHRcdC5zdGFydFx0PSBzdGFydCxcbiYjNDM7XHRcdFx0XHQuZW5kXHQ9IGVuZCxcbiYjNDM7XHRcdFx0XHQucGdwcm90XHQ9IFBBR0VfS0VSTkVMLFxuJiM0MztcdFx0XHRcdC5hbGlnbm1lbnQgPSAxLFxuJiM0MztcdFx0XHRcdC5mYWxsYmFja19zdGFydFx0PSBmYWxsYmFja19zdGFydCxcbiYjNDM7XHRcdFx0XHQuZmFsbGJhY2tfZW5kXHQ9IGZhbGxiYWNrX2VuZCxcbiYjNDM7XHRcdFx0fSxcbiBcdFx0fSxcbiBcdH07XG4gXG4mIzQzO1x0aWYgKCFzeXN0ZW1fc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCgpKVxuJiM0MztcdFx0ZXhlY21lbV9pbmZvLnJhbmdlc1tFWEVDTUVNX0RFRkFVTFRdLmZsYWdzIHw9IEVYRUNNRU1fTk9fSFVHRV9WTUFQO1xuJiM0MztcbiBcdHJldHVybiBcdTAwMjZleGVjbWVtX2luZm87XG4gfVxuJiM0MztcbiYjNDM7dm9pZCBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnModm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSlcbiYjNDM7e1xuJiM0MztcdG1lbXNldDMyKHB0ciwgQUFSQ0g2NF9CUkVBS19GQVVMVCwgc2l6ZSAvIHNpemVvZihfX2xlMzIpKTtcbiYjNDM7fVxuICNlbmRpZiAvKiBDT05GSUdfRVhFQ01FTSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYyBiL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xuaW5kZXggYmJlOThhYzlhZDhjNi4uMjBmZjljYjI3M2MxMSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXG5AQCAtMTY5LDggJiM0MzsxNjksNiBAQCBzdGF0aWMgaW50IGNoYW5nZV9tZW1vcnlfY29tbW9uKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLFxuIFx0ICogd2UgYXJlIG9wZXJhdGluZyBvbiBkb2VzIG5vdCByZXN1bHQgaW4gc3VjaCBzcGxpdHRpbmcuXG4gXHQgKlxuIFx0ICogTGV0JiMzOTtzIHJlc3RyaWN0IG91cnNlbHZlcyB0byBtYXBwaW5ncyBjcmVhdGVkIGJ5IHZtYWxsb2MgKG9yIHZtYXApLlxuLVx0ICogRGlzYWxsb3cgVk1fQUxMT1dfSFVHRV9WTUFQIG1hcHBpbmdzIHRvIGd1YXJhbnRlZSB0aGF0IG9ubHkgcGFnZVxuLVx0ICogbWFwcGluZ3MgYXJlIHVwZGF0ZWQgYW5kIHNwbGl0dGluZyBpcyBuZXZlciBuZWVkZWQuXG4gXHQgKlxuIFx0ICogU28gY2hlY2sgd2hldGhlciB0aGUgW2FkZHIsIGFkZHIgJiM0Mzsgc2l6ZSkgaW50ZXJ2YWwgaXMgZW50aXJlbHlcbiBcdCAqIGNvdmVyZWQgYnkgcHJlY2lzZWx5IG9uZSBWTSBhcmVhIHRoYXQgaGFzIHRoZSBWTV9BTExPQyBmbGFnIHNldC5cbkBAIC0xNzksNyAmIzQzOzE3NywxNiBAQCBzdGF0aWMgaW50IGNoYW5nZV9tZW1vcnlfY29tbW9uKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLFxuIFx0aWYgKCFhcmVhIHx8XG4gXHQgICAgKCh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZygodm9pZCAqKWVuZCkgXHUwMDNlXG4gXHQgICAgICh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZyhhcmVhLVx1MDAzZWFkZHIpICYjNDM7IGFyZWEtXHUwMDNlc2l6ZSkgfHxcbi1cdCAgICAoKGFyZWEtXHUwMDNlZmxhZ3MgXHUwMDI2IChWTV9BTExPQyB8IFZNX0FMTE9XX0hVR0VfVk1BUCkpICE9IFZNX0FMTE9DKSlcbiYjNDM7XHQgICAgIShhcmVhLVx1MDAzZWZsYWdzIFx1MDAyNiBWTV9BTExPQykpXG4mIzQzOyAgICAgICAgICAgICAgIHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHQvKlxuJiM0MztcdCAqIERpc2FsbG93IFZNX0FMTE9XX0hVR0VfVk1BUCBtYXBwaW5ncyB1bmxlc3MgdGhlIHJlZ2lvbiBpcyBQTURcbiYjNDM7XHQgKiBhbGlnbmVkLCBvciBzcGxpdHRpbmcgbGl2ZSBodWdlIG1hcHBpbmdzIGlzIHN1cHBvcnRlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKGFyZWEtXHUwMDNlZmxhZ3MgXHUwMDI2IFZNX0FMTE9XX0hVR0VfVk1BUCkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgKChzdGFydCAlIFBNRF9TSVpFKSB8fCAoc2l6ZSAlIFBNRF9TSVpFKSkgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgV0FSTl9PTl9PTkNFKCFzeXN0ZW1fc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCgpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIW51bXBhZ2VzKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXhlY21lbS5oIGIvaW5jbHVkZS9saW51eC9leGVjbWVtLmhcbmluZGV4IDdkZTIyOTEzNGUzMDcuLmIwNDkyNmYzZmZmMjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9leGVjbWVtLmhcbkBAIC00OCwxMCAmIzQzOzQ4LDEyIEBAIGVudW0gZXhlY21lbV90eXBlIHtcbiAgKiBlbnVtIGV4ZWNtZW1fcmFuZ2VfZmxhZ3MgLSBvcHRpb25zIGZvciBleGVjdXRhYmxlIG1lbW9yeSBhbGxvY2F0aW9uc1xuICAqIEBFWEVDTUVNX0tBU0FOX1NIQURPVzpcdGFsbG9jYXRlIGthc2FuIHNoYWRvd1xuICAqIEBFWEVDTUVNX1JPWF9DQUNIRTpcdFx0YWxsb2NhdGlvbnMgc2hvdWxkIHVzZSBST1ggY2FjaGUgb2YgaHVnZSBwYWdlc1xuJiM0MzsgKiBARVhFQ01FTV9OT19IVUdFX1ZNQVA6XHRjYWNoZSBhbGxvY2F0aW9ucyBtdXN0IGF2b2lkIGh1Z2Ugdm1hcHBpbmdzXG4gICovXG4gZW51bSBleGVjbWVtX3JhbmdlX2ZsYWdzIHtcbiBcdEVYRUNNRU1fS0FTQU5fU0hBRE9XXHQ9ICgxIFx1MDAzY1x1MDAzYyAwKSxcbiBcdEVYRUNNRU1fUk9YX0NBQ0hFXHQ9ICgxIFx1MDAzY1x1MDAzYyAxKSxcbiYjNDM7XHRFWEVDTUVNX05PX0hVR0VfVk1BUFx0PSAoMSBcdTAwM2NcdTAwM2MgMiksXG4gfTtcbiBcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX0VYRUNNRU1fUk9YXG5AQCAtMTc4LDYgJiM0MzsxODAsMTUgQEAgdm9pZCBleGVjbWVtX2ZyZWUodm9pZCAqcHRyKTtcbiBcbiBERUZJTkVfRlJFRShleGVjbWVtLCB2b2lkICosIGlmIChfVCkgZXhlY21lbV9mcmVlKF9UKSk7XG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBleGVjbWVtX3NwbGl0IC0gYWxsb2NhdGUgc3BhY2UgZnJvbSBhbiBleGlzdGluZyBleGVjbWVtIGNhY2hlIGFsbG9jYXRpb25cbiYjNDM7ICogQHB0ciAgLSB0aGUgZXhpc3RpbmcgZXhlY21lbSBjYWNoZSBhbGxvY2F0aW9uXG4mIzQzOyAqIEBzaXplIC0gdGhlIHNpemUgdG8gY2FydmUgb3V0IGZyb20gdGhlIGV4aXN0aW5nIGFsbG9jYXRpb25cbiYjNDM7ICpcbiYjNDM7ICogUmV0dXJuOiB0aGUgYWRkcmVzcyBvZiB0aGUgY2FydmVkIG91dCBhbGxvY2F0aW9uLCBvciAlTlVMTCBvbiBmYWlsdXJlLlxuJiM0MzsgKi9cbiYjNDM7dm9pZCAqZXhlY21lbV9zcGxpdCh2b2lkICpwdHIsIHNpemVfdCBzaXplKTtcbiYjNDM7XG4gI2lmZGVmIENPTkZJR19NTVVcbiAvKipcbiAgKiBleGVjbWVtX3ZtYXAgLSBjcmVhdGUgdmlydHVhbCBtYXBwaW5nIGZvciBFWEVDTUVNX01PRFVMRV9EQVRBIG1lbW9yeVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oXG5pbmRleCA3NTY2ODE1ZmFiYmU4Li4wMzM2YTQ2NzMzZGQ5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaFxuQEAgLTMxNiwxMCAmIzQzOzMxNiwxMCBAQCBzdHJ1Y3QgbW9kX3RyZWVfbm9kZSB7XG4gfTtcbiBcbiBlbnVtIG1vZF9tZW1fdHlwZSB7XG4tXHRNT0RfVEVYVCA9IDAsXG4tXHRNT0RfREFUQSxcbiYjNDM7XHRNT0RfREFUQSA9IDAsXG4gXHRNT0RfUk9EQVRBLFxuIFx0TU9EX1JPX0FGVEVSX0lOSVQsXG4mIzQzO1x0TU9EX1RFWFQsXG4gXHRNT0RfSU5JVF9URVhULFxuIFx0TU9EX0lOSVRfREFUQSxcbiBcdE1PRF9JTklUX1JPREFUQSxcbmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL21haW4uYyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG5pbmRleCA0NmRkOGQyNWE2MDU4Li4yZDYyMTM0OTYzNTk3IDEwMDY0NFxuLS0tIGEva2VybmVsL21vZHVsZS9tYWluLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG5AQCAtMTM0Miw3ICYjNDM7MTM0Miw3IEBAIHN0YXRpYyBpbnQgbW9kdWxlX21lbW9yeV9hbGxvYyhzdHJ1Y3QgbW9kdWxlICptb2QsIGVudW0gbW9kX21lbV90eXBlIHR5cGUpXG4ge1xuIFx0dW5zaWduZWQgaW50IHNpemUgPSBQQUdFX0FMSUdOKG1vZC1cdTAwM2VtZW1bdHlwZV0uc2l6ZSk7XG4gXHRlbnVtIGV4ZWNtZW1fdHlwZSBleGVjbWVtX3R5cGU7XG4tXHR2b2lkICpwdHI7XG4mIzQzO1x0dm9pZCAqcHRyID0gTlVMTDtcbiBcbiBcdG1vZC1cdTAwM2VtZW1bdHlwZV0uc2l6ZSA9IHNpemU7XG4gXG5AQCAtMTM1MSwxMSAmIzQzOzEzNTEsMjUgQEAgc3RhdGljIGludCBtb2R1bGVfbWVtb3J5X2FsbG9jKHN0cnVjdCBtb2R1bGUgKm1vZCwgZW51bSBtb2RfbWVtX3R5cGUgdHlwZSlcbiBcdGVsc2VcbiBcdFx0ZXhlY21lbV90eXBlID0gRVhFQ01FTV9NT0RVTEVfVEVYVDtcbiBcbi1cdHB0ciA9IGV4ZWNtZW1fYWxsb2NfcncoZXhlY21lbV90eXBlLCBzaXplKTtcbiYjNDM7XHRib29sIGlzX3JveCA9IGV4ZWNtZW1faXNfcm94KGV4ZWNtZW1fdHlwZSk7XG4mIzQzO1x0aWYgKGlzX3JveCkge1xuJiM0MztcdFx0LypcbiYjNDM7XHRcdCAqIFNwZWNpYWwgY2FzZSBmb3IgTU9EX1RFWFQgLyBNT0RfSU5JVF9URVhUOiBhbGxvY2F0ZSB0aGVcbiYjNDM7XHRcdCAqIGxhdHRlciBieSBzcGxpdHRpbmcgb2ZmIHJlcXVpcmVkIHNwYWNlIGZyb20gdGhlIGZvcm1lclxuJiM0MztcdFx0ICogc28gdGhhdCB0aGV5IGFyZSBhbHdheXMgcGxhY2VkIGNsb3NlIHRvZ2V0aGVyLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRpZiAodHlwZSA9PSBNT0RfVEVYVClcbiYjNDM7XHRcdFx0c2l6ZSAmIzQzOz0gUEFHRV9BTElHTihtb2QtXHUwMDNlbWVtW01PRF9JTklUX1RFWFRdLnNpemUpO1xuJiM0MztcdFx0ZWxzZSBpZiAodHlwZSA9PSBNT0RfSU5JVF9URVhUKVxuJiM0MztcdFx0XHRwdHIgPSBleGVjbWVtX3NwbGl0KG1vZC1cdTAwM2VtZW1bTU9EX1RFWFRdLmJhc2UsIHNpemUpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCFwdHIpXG4mIzQzO1x0XHRwdHIgPSBleGVjbWVtX2FsbG9jX3J3KGV4ZWNtZW1fdHlwZSwgc2l6ZSk7XG4gXHRpZiAoIXB0cilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRtb2QtXHUwMDNlbWVtW3R5cGVdLmlzX3JveCA9IGV4ZWNtZW1faXNfcm94KGV4ZWNtZW1fdHlwZSk7XG4mIzQzO1x0bW9kLVx1MDAzZW1lbVt0eXBlXS5pc19yb3ggPSBpc19yb3g7XG4gXG4gXHQvKlxuIFx0ICogVGhlIHBvaW50ZXIgdG8gdGhlc2UgYmxvY2tzIG9mIG1lbW9yeSBhcmUgc3RvcmVkIG9uIHRoZSBtb2R1bGVcbkBAIC0xMzY4LDcgJiM0MzsxMzgyLDcgQEAgc3RhdGljIGludCBtb2R1bGVfbWVtb3J5X2FsbG9jKHN0cnVjdCBtb2R1bGUgKm1vZCwgZW51bSBtb2RfbWVtX3R5cGUgdHlwZSlcbiBcdCAqICpkbyogZXZlbnR1YWxseSBnZXQgZnJlZWQsIGJ1dCBsZXQmIzM5O3MganVzdCBrZWVwIHRoaW5ncyBzaW1wbGVcbiBcdCAqIGFuZCBhdm9pZCAqYW55KiBmYWxzZSBwb3NpdGl2ZXMuXG4gXHQgKi9cbi1cdGlmICghbW9kLVx1MDAzZW1lbVt0eXBlXS5pc19yb3gpXG4mIzQzO1x0aWYgKCFpc19yb3gpXG4gXHRcdGttZW1sZWFrX25vdF9sZWFrKHB0cik7XG4gXG4gXHRtZW1zZXQocHRyLCAwLCBzaXplKTtcbmRpZmYgLS1naXQgYS9tbS9leGVjbWVtLmMgYi9tbS9leGVjbWVtLmNcbmluZGV4IDA4NGEyMDdlNDI3OGIuLjU3OTBkNGE4NTMyYWYgMTAwNjQ0XG4tLS0gYS9tbS9leGVjbWVtLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2V4ZWNtZW0uY1xuQEAgLTI3Niw3ICYjNDM7Mjc2LDggQEAgc3RhdGljIHZvaWQgKl9fZXhlY21lbV9jYWNoZV9hbGxvYyhzdHJ1Y3QgZXhlY21lbV9yYW5nZSAqcmFuZ2UsIHNpemVfdCBzaXplKVxuIFxuIHN0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3BvcHVsYXRlX2FsbG9jKHN0cnVjdCBleGVjbWVtX3JhbmdlICpyYW5nZSwgc2l6ZV90IHNpemUpXG4ge1xuLVx0dW5zaWduZWQgbG9uZyB2bV9mbGFncyA9IFZNX0FMTE9XX0hVR0VfVk1BUDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHZtX2ZsYWdzID0gKHJhbmdlLVx1MDAzZWZsYWdzIFx1MDAyNiBFWEVDTUVNX05PX0hVR0VfVk1BUClcbiYjNDM7XHRcdFx0XHRcdFx0PyAwIDogVk1fQUxMT1dfSFVHRV9WTUFQO1xuIFx0c3RydWN0IG11dGV4ICptdXRleCA9IFx1MDAyNmV4ZWNtZW1fY2FjaGUubXV0ZXg7XG4gXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bTtcbiBcdHNpemVfdCBhbGxvY19zaXplO1xuQEAgLTQzOSw2ICYjNDM7NDQwLDMzIEBAIHN0YXRpYyBib29sIGV4ZWNtZW1fY2FjaGVfZnJlZSh2b2lkICpwdHIpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWFwbGVfdHJlZSAqYnVzeV9hcmVhcyA9IFx1MDAyNmV4ZWNtZW1fY2FjaGUuYnVzeV9hcmVhcztcbiYjNDM7XHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylwdHI7XG4mIzQzO1x0TUFfU1RBVEUobWFzLCBidXN5X2FyZWFzLCBhZGRyLCBhZGRyKTtcbiYjNDM7XHR2b2lkICphcmVhO1xuJiM0MztcdGludCBlcnI7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZleGVjbWVtX2NhY2hlLm11dGV4KTtcbiYjNDM7XG4mIzQzO1x0YXJlYSA9IG1hc193YWxrKFx1MDAyNm1hcyk7XG4mIzQzO1x0aWYgKCFhcmVhKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4mIzQzO1xuJiM0MztcdGlmIChzaXplIFx1MDAzZT0gbWFzX3JhbmdlX2xlbihcdTAwMjZtYXMpKVxuJiM0MztcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4mIzQzO1xuJiM0MztcdGFkZHIgJiM0Mzs9IG1hc19yYW5nZV9sZW4oXHUwMDI2bWFzKSAtIHNpemU7XG4mIzQzO1x0bWFzX3NldF9yYW5nZShcdTAwMjZtYXMsIGFkZHIsIG1hcy5sYXN0KTtcbiYjNDM7XG4mIzQzO1x0ZXJyID0gbWFzX3N0b3JlX2dmcChcdTAwMjZtYXMsICh2b2lkICopYWRkciwgR0ZQX0tFUk5FTCk7XG4mIzQzO1x0aWYgKGVycilcbiYjNDM7XHRcdHJldHVybiBFUlJfUFRSKGVycik7XG4mIzQzO1xuJiM0MztcdHJldHVybiAodm9pZCAqKWFkZHI7XG4mIzQzO31cbiYjNDM7XG4gI2Vsc2UgLyogQ09ORklHX0FSQ0hfSEFTX0VYRUNNRU1fUk9YICovXG4gLypcbiAgKiB3aGVuIFJPWCBjYWNoZSBpcyBub3QgdXNlZCB0aGUgcGVybWlzc2lvbnMgZGVmaW5lZCBieSBhcmNoaXRlY3R1cmVzIGZvclxuQEAgLTQ1OSw2ICYjNDM7NDg3LDExIEBAIHN0YXRpYyBib29sIGV4ZWNtZW1fY2FjaGVfZnJlZSh2b2lkICpwdHIpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTtcbiYjNDM7fVxuICNlbmRpZiAvKiBDT05GSUdfQVJDSF9IQVNfRVhFQ01FTV9ST1ggKi9cbiBcbiB2b2lkICpleGVjbWVtX2FsbG9jKGVudW0gZXhlY21lbV90eXBlIHR5cGUsIHNpemVfdCBzaXplKVxuQEAgLTUxMSw2ICYjNDM7NTQ0LDE4IEBAIGJvb2wgZXhlY21lbV9pc19yb3goZW51bSBleGVjbWVtX3R5cGUgdHlwZSlcbiBcdHJldHVybiAhIShleGVjbWVtX2luZm8tXHUwMDNlcmFuZ2VzW3R5cGVdLmZsYWdzIFx1MDAyNiBFWEVDTUVNX1JPWF9DQUNIRSk7XG4gfVxuIFxuJiM0Mzt2b2lkICpleGVjbWVtX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpXG4mIzQzO3tcbiYjNDM7XHRpZiAoIXB0ciB8fCAhc2l6ZSlcbiYjNDM7XHRcdHJldHVybiBOVUxMO1xuJiM0MztcbiYjNDM7XHRwdHIgPSBleGVjbWVtX2NhY2hlX3NwbGl0KHB0ciwgc2l6ZSk7XG4mIzQzO1x0aWYgKCFJU19FUlIocHRyKSlcbiYjNDM7XHRcdHJldHVybiBwdHI7XG4mIzQzO1x0Vk1fV0FSTl9PTihwdHIgIT0gRVJSX1BUUigtRU5PTUVNKSk7XG4mIzQzO1x0cmV0dXJuIE5VTEw7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGJvb2wgZXhlY21lbV92YWxpZGF0ZShzdHJ1Y3QgZXhlY21lbV9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBleGVjbWVtX3JhbmdlICpyID0gXHUwMDI2aW5mby1cdTAwM2VyYW5nZXNbRVhFQ01FTV9ERUZBVUxUXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNDo0ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TU9EVUxFUyYjMzQ7LAogICAgJiMzNDtEWU5BTUlDX0ZUUkFDRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2V4ZWNtZW1fc3BsaXQmIzM0OywKICAgICYjMzQ7bW9kdWxlX2VtaXRfcGx0X2VudHJ5JiMzNDssCiAgICAmIzM0O21vZHVsZV9lbWl0X3ZlbmVlcl9mb3JfYWRycCYjMzQ7LAogICAgJiMzNDttb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zJiMzNDssCiAgICAmIzM0O2V4ZWNtZW1fZmlsbF90cmFwcGluZ19pbnNucyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBBUkNIX0hBU19FWEVDTUVNX1JPWCBmb3IgYXJtNjQsIG1vZGlmeWluZyBob3cgbW9kdWxlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYnkgc3BsaXR0aW5nIE1PRF9JTklUX1RFWFQgZnJvbSBNT0RfVEVYVCB3aGVuIGV4ZWNtZW1faXNfcm94IGlzIHRydWUuIEl0IGFsc28gdXBkYXRlcyBmdHJhY2UgdHJhbXBvbGluZXMgYW5kIFBMVCBnZW5lcmF0aW9uIGZvciBtb2R1bGVzIG9uIGFybTY0IHRvIGFjY29tbW9kYXRlIHRoZXNlIGNoYW5nZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgKG1vZHVsZSBsb2FkaW5nLCBleGVjdXRhYmxlIG1lbW9yeSBhbGxvY2F0aW9uLCBmdHJhY2UpIHRoYXQgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYzgyYzc3MjA2ZWI5NWFjMWY0ZDQ1YjhmMzVjYmY4ODFjODA2ZTEzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjIgMTQ6NDg6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWcKaW5kZXggYjNhZmUwNjg4OTE5Yi4uMDgwYjk3YjBiYmQ1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvS2NvbmZpZwpAQCAtMjcsNiAmIzQzOzI3LDcgQEAgY29uZmlnIEFSTTY0CiAJc2VsZWN0IEFSQ0hfSEFTX0RNQV9PUFMgaWYgWEVOCiAJc2VsZWN0IEFSQ0hfSEFTX0RNQV9QUkVQX0NPSEVSRU5UCiAJc2VsZWN0IEFSQ0hfSEFTX0FDUElfVEFCTEVfVVBHUkFERSBpZiBBQ1BJCiYjNDM7CXNlbGVjdCBBUkNIX0hBU19FWEVDTUVNX1JPWAogCXNlbGVjdCBBUkNIX0hBU19GQVNUX01VTFRJUExJRVIKIAlzZWxlY3QgQVJDSF9IQVNfRk9SVElGWV9TT1VSQ0UKIAlzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmgKaW5kZXggZmI5Yjg4ZWViZWIxNS4uOTMyOGZhZGI0YTk1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oCkBAIC0xNSwxMSAmIzQzOzE1LDkgQEAgc3RydWN0IG1vZF9wbHRfc2VjIHsKIAogc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljIHsKIAlzdHJ1Y3QgbW9kX3BsdF9zZWMJY29yZTsKLQlzdHJ1Y3QgbW9kX3BsdF9zZWMJaW5pdDsKIAogCS8qIGZvciBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KIAlzdHJ1Y3QgcGx0X2VudHJ5CSpmdHJhY2VfdHJhbXBvbGluZXM7Ci0Jc3RydWN0IHBsdF9lbnRyeQkqaW5pdF9mdHJhY2VfdHJhbXBvbGluZXM7CiB9OwogCiB1NjQgbW9kdWxlX2VtaXRfcGx0X2VudHJ5KHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmxkcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmgKaW5kZXggMGIzYWFjZDIyYzU5MC4uOTU1NDBlOTU2YjQxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmgKQEAgLTEsOCAmIzQzOzEsNSBAQAogU0VDVElPTlMgewogCS5wbHQgMCA6IHsgQllURSgwKSB9Ci0JLmluaXQucGx0IDAgOiB7IEJZVEUoMCkgfQotCS50ZXh0LmZ0cmFjZV90cmFtcG9saW5lIDAgOiB7IEJZVEUoMCkgfQotCS5pbml0LnRleHQuZnRyYWNlX3RyYW1wb2xpbmUgMCA6IHsgQllURSgwKSB9CiAKICNpZmRlZiBDT05GSUdfS0FTQU5fU1dfVEFHUwogCS8qCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jCmluZGV4IDVhMTU1NGE0NDE2MjguLmI1NmRhMjRjMWJlNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jCkBAIC0yNTgsMTcgJiM0MzsyNTgsMTAgQEAgaW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKQogCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUocGMsIDAsIG5ldywgZmFsc2UpOwogfQogCi1zdGF0aWMgc3RydWN0IHBsdF9lbnRyeSAqZ2V0X2Z0cmFjZV9wbHQoc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7c3RhdGljIHN0cnVjdCBwbHRfZW50cnkgKmdldF9mdHJhY2VfcGx0KHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKICNpZmRlZiBDT05GSUdfTU9EVUxFUwotCXN0cnVjdCBwbHRfZW50cnkgKnBsdCA9IE5VTEw7Ci0KLQlpZiAod2l0aGluX21vZHVsZV9tZW1fdHlwZShhZGRyLCBtb2QsIE1PRF9JTklUX1RFWFQpKQotCQlwbHQgPSBtb2QtJmd0O2FyY2guaW5pdF9mdHJhY2VfdHJhbXBvbGluZXM7Ci0JZWxzZSBpZiAod2l0aGluX21vZHVsZV9tZW1fdHlwZShhZGRyLCBtb2QsIE1PRF9URVhUKSkKLQkJcGx0ID0gbW9kLSZndDthcmNoLmZ0cmFjZV90cmFtcG9saW5lczsKLQllbHNlCi0JCXJldHVybiBOVUxMOwomIzQzOwlzdHJ1Y3QgcGx0X2VudHJ5ICpwbHQgPSBtb2QtJmd0O2FyY2guZnRyYWNlX3RyYW1wb2xpbmVzOwogCiAJcmV0dXJuICZhbXA7cGx0W0ZUUkFDRV9QTFRfSURYXTsKICNlbHNlCkBAIC0zMzksNyAmIzQzOzMzMiw3IEBAIHN0YXRpYyBib29sIGZ0cmFjZV9maW5kX2NhbGxhYmxlX2FkZHIoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywKIAlpZiAoV0FSTl9PTighbW9kKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JcGx0ID0gZ2V0X2Z0cmFjZV9wbHQobW9kLCBwYyk7CiYjNDM7CXBsdCA9IGdldF9mdHJhY2VfcGx0KG1vZCk7CiAJaWYgKCFwbHQpIHsKIAkJcHJfZXJyKCYjMzQ7ZnRyYWNlOiBubyBtb2R1bGUgUExUIGZvciAlcHNcbiYjMzQ7LCAodm9pZCAqKSphZGRyKTsKIAkJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYyBiL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmMKaW5kZXggN2FmZDM3MGRhOWY0OC4uNjkwMGQyMjQyZjFiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jCkBAIC03MCw4ICYjNDM7NzAsNyBAQCB1NjQgbW9kdWxlX2VtaXRfcGx0X2VudHJ5KHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycywKIAkJCSAgdm9pZCAqbG9jLCBjb25zdCBFbGY2NF9SZWxhICpyZWxhLAogCQkJICBFbGY2NF9TeW0gKnN5bSkKIHsKLQlzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9ICF3aXRoaW5fbW9kdWxlX2luaXQoKHVuc2lnbmVkIGxvbmcpbG9jLCBtb2QpID8KLQkJCQkJCSZhbXA7bW9kLSZndDthcmNoLmNvcmUgOiAmYW1wO21vZC0mZ3Q7YXJjaC5pbml0OwomIzQzOwlzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9ICZhbXA7bW9kLSZndDthcmNoLmNvcmU7CiAJc3RydWN0IHBsdF9lbnRyeSAqcGx0ID0gKHN0cnVjdCBwbHRfZW50cnkgKilzZWNoZHJzW3BsdHNlYy0mZ3Q7cGx0X3NobmR4XS5zaF9hZGRyOwogCWludCBpID0gcGx0c2VjLSZndDtwbHRfbnVtX2VudHJpZXM7CiAJaW50IGogPSBpIC0gMTsKQEAgLTEwMSw4ICYjNDM7MTAwLDcgQEAgdTY0IG1vZHVsZV9lbWl0X3BsdF9lbnRyeShzdHJ1Y3QgbW9kdWxlICptb2QsIEVsZjY0X1NoZHIgKnNlY2hkcnMsCiB1NjQgbW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwKHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycywKIAkJCQl2b2lkICpsb2MsIHU2NCB2YWwpCiB7Ci0Jc3RydWN0IG1vZF9wbHRfc2VjICpwbHRzZWMgPSAhd2l0aGluX21vZHVsZV9pbml0KCh1bnNpZ25lZCBsb25nKWxvYywgbW9kKSA/Ci0JCQkJCQkmYW1wO21vZC0mZ3Q7YXJjaC5jb3JlIDogJmFtcDttb2QtJmd0O2FyY2guaW5pdDsKJiM0MzsJc3RydWN0IG1vZF9wbHRfc2VjICpwbHRzZWMgPSAmYW1wO21vZC0mZ3Q7YXJjaC5jb3JlOwogCXN0cnVjdCBwbHRfZW50cnkgKnBsdCA9IChzdHJ1Y3QgcGx0X2VudHJ5ICopc2VjaGRyc1twbHRzZWMtJmd0O3BsdF9zaG5keF0uc2hfYWRkcjsKIAlpbnQgaSA9IHBsdHNlYy0mZ3Q7cGx0X251bV9lbnRyaWVzJiM0MzsmIzQzOzsKIAl1MzIgYnI7CkBAIC0xNjksMTcgJiM0MzsxNjcsMTcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBjb3VudF9wbHRzKEVsZjY0X1N5bSAqc3ltcywgRWxmNjRfUmVsYSAqcmVsYSwgaW50IG51bSwKIAkJY2FzZSBSX0FBUkNINjRfQ0FMTDI2OgogCQkJLyoKIAkJCSAqIFdlIG9ubHkgaGF2ZSB0byBjb25zaWRlciBicmFuY2ggdGFyZ2V0cyB0aGF0IHJlc29sdmUKLQkJCSAqIHRvIHN5bWJvbHMgdGhhdCBhcmUgZGVmaW5lZCBpbiBhIGRpZmZlcmVudCBzZWN0aW9uLgomIzQzOwkJCSAqIHRvIHN5bWJvbHMgdGhhdCBhcmUgbm90IGRlZmluZWQgaW4gdGhlIHNhbWUgbW9kdWxlLgogCQkJICogVGhpcyBpcyBub3Qgc2ltcGx5IGEgaGV1cmlzdGljLCBpdCBpcyBhIGZ1bmRhbWVudGFsCiAJCQkgKiBsaW1pdGF0aW9uLCBzaW5jZSB0aGVyZSBpcyBubyBndWFyYW50ZWVkIHdheSB0byBlbWl0CiAJCQkgKiBQTFQgZW50cmllcyBzdWZmaWNpZW50bHkgY2xvc2UgdG8gdGhlIGJyYW5jaCBpZiB0aGUKIAkJCSAqIHNlY3Rpb24gc2l6ZSBleGNlZWRzIHRoZSByYW5nZSBvZiBhIGJyYW5jaAogCQkJICogaW5zdHJ1Y3Rpb24uIFNvIGlnbm9yZSByZWxvY2F0aW9ucyBhZ2FpbnN0IGRlZmluZWQKLQkJCSAqIHN5bWJvbHMgaWYgdGhleSBsaXZlIGluIHRoZSBzYW1lIHNlY3Rpb24gYXMgdGhlCiYjNDM7CQkJICogc3ltYm9scyBpZiB0aGV5IGxpdmUgaW4gdGhlIHNhbWUgbW9kdWxlIGFzIHRoZQogCQkJICogcmVsb2NhdGlvbiB0YXJnZXQuCiAJCQkgKi8KIAkJCXMgPSBzeW1zICYjNDM7IEVMRjY0X1JfU1lNKHJlbGFbaV0ucl9pbmZvKTsKLQkJCWlmIChzLSZndDtzdF9zaG5keCA9PSBkc3RpZHgpCiYjNDM7CQkJaWYgKHMtJmd0O3N0X3NobmR4ICE9IFNITl9VTkRFRikKIAkJCQlicmVhazsKIAogCQkJLyoKQEAgLTI3NywxMyAmIzQzOzI3NSwxNCBAQCBzdGF0aWMgaW50IHBhcnRpdGlvbl9icmFuY2hfcGx0X3JlbGFzKEVsZjY0X1N5bSAqc3ltcywgRWxmNjRfUmVsYSAqcmVsYSwKIAlyZXR1cm4gaTsKIH0KIAomIzQzO3N0YXRpYyBjb25zdCBpbnQgZnRyYWNlX3BsdHMgPSBJU19FTkFCTEVEKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkgPyBOUl9GVFJBQ0VfUExUUyA6IDA7CiYjNDM7CiBpbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqZWhkciwgRWxmX1NoZHIgKnNlY2hkcnMsCiAJCQkgICAgICBjaGFyICpzZWNzdHJpbmdzLCBzdHJ1Y3QgbW9kdWxlICptb2QpCiB7Ci0JdW5zaWduZWQgbG9uZyBjb3JlX3BsdHMgPSAwOwotCXVuc2lnbmVkIGxvbmcgaW5pdF9wbHRzID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBjb3JlX3BsdHMgPSBmdHJhY2VfcGx0czsKIAlFbGY2NF9TeW0gKnN5bXMgPSBOVUxMOwotCUVsZl9TaGRyICpwbHRzZWMsICp0cmFtcCA9IE5VTEwsICppbml0X3RyYW1wID0gTlVMTDsKJiM0MzsJRWxmX1NoZHIgKnBsdHNlYzsKIAlpbnQgaTsKIAogCS8qCkBAIC0yOTMsMjAgJiM0MzsyOTIsMTIgQEAgaW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLAogCWZvciAoaSA9IDA7IGkgJmx0OyBlaGRyLSZndDtlX3NobnVtOyBpJiM0MzsmIzQzOykgewogCQlpZiAoIXN0cmNtcChzZWNzdHJpbmdzICYjNDM7IHNlY2hkcnNbaV0uc2hfbmFtZSwgJiMzNDsucGx0JiMzNDspKQogCQkJbW9kLSZndDthcmNoLmNvcmUucGx0X3NobmR4ID0gaTsKLQkJZWxzZSBpZiAoIXN0cmNtcChzZWNzdHJpbmdzICYjNDM7IHNlY2hkcnNbaV0uc2hfbmFtZSwgJiMzNDsuaW5pdC5wbHQmIzM0OykpCi0JCQltb2QtJmd0O2FyY2guaW5pdC5wbHRfc2huZHggPSBpOwotCQllbHNlIGlmICghc3RyY21wKHNlY3N0cmluZ3MgJiM0Mzsgc2VjaGRyc1tpXS5zaF9uYW1lLAotCQkJCSAmIzM0Oy50ZXh0LmZ0cmFjZV90cmFtcG9saW5lJiMzNDspKQotCQkJdHJhbXAgPSBzZWNoZHJzICYjNDM7IGk7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoc2Vjc3RyaW5ncyAmIzQzOyBzZWNoZHJzW2ldLnNoX25hbWUsCi0JCQkJICYjMzQ7LmluaXQudGV4dC5mdHJhY2VfdHJhbXBvbGluZSYjMzQ7KSkKLQkJCWluaXRfdHJhbXAgPSBzZWNoZHJzICYjNDM7IGk7CiAJCWVsc2UgaWYgKHNlY2hkcnNbaV0uc2hfdHlwZSA9PSBTSFRfU1lNVEFCKQogCQkJc3ltcyA9IChFbGY2NF9TeW0gKilzZWNoZHJzW2ldLnNoX2FkZHI7CiAJfQogCi0JaWYgKCFtb2QtJmd0O2FyY2guY29yZS5wbHRfc2huZHggfHwgIW1vZC0mZ3Q7YXJjaC5pbml0LnBsdF9zaG5keCkgewotCQlwcl9lcnIoJiMzNDslczogbW9kdWxlIFBMVCBzZWN0aW9uKHMpIG1pc3NpbmdcbiYjMzQ7LCBtb2QtJmd0O25hbWUpOwomIzQzOwlpZiAoIW1vZC0mZ3Q7YXJjaC5jb3JlLnBsdF9zaG5keCkgewomIzQzOwkJcHJfZXJyKCYjMzQ7JXM6IG1vZHVsZSBQTFQgc2VjdGlvbiBtaXNzaW5nXG4mIzM0OywgbW9kLSZndDtuYW1lKTsKIAkJcmV0dXJuIC1FTk9FWEVDOwogCX0KIAlpZiAoIXN5bXMpIHsKQEAgLTMzNSwxMiAmIzQzOzMyNiw4IEBAIGludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICplaGRyLCBFbGZfU2hkciAqc2VjaGRycywKIAkJaWYgKG5lbnRzKQogCQkJc29ydChyZWxzLCBuZW50cywgc2l6ZW9mKEVsZjY0X1JlbGEpLCBjbXBfcmVsYSwgTlVMTCk7CiAKLQkJaWYgKCFtb2R1bGVfaW5pdF9sYXlvdXRfc2VjdGlvbihzZWNzdHJpbmdzICYjNDM7IGRzdHNlYy0mZ3Q7c2hfbmFtZSkpCi0JCQljb3JlX3BsdHMgJiM0Mzs9IGNvdW50X3BsdHMoc3ltcywgcmVscywgbnVtcmVscywKLQkJCQkJCXNlY2hkcnNbaV0uc2hfaW5mbywgZHN0c2VjKTsKLQkJZWxzZQotCQkJaW5pdF9wbHRzICYjNDM7PSBjb3VudF9wbHRzKHN5bXMsIHJlbHMsIG51bXJlbHMsCi0JCQkJCQlzZWNoZHJzW2ldLnNoX2luZm8sIGRzdHNlYyk7CiYjNDM7CQljb3JlX3BsdHMgJiM0Mzs9IGNvdW50X3BsdHMoc3ltcywgcmVscywgbnVtcmVscywgc2VjaGRyc1tpXS5zaF9pbmZvLAomIzQzOwkJCQkJZHN0c2VjKTsKIAl9CiAKIAlwbHRzZWMgPSBzZWNoZHJzICYjNDM7IG1vZC0mZ3Q7YXJjaC5jb3JlLnBsdF9zaG5keDsKQEAgLTM0OCwzMCAmIzQzOzMzNSw4IEBAIGludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICplaGRyLCBFbGZfU2hkciAqc2VjaGRycywKIAlwbHRzZWMtJmd0O3NoX2ZsYWdzID0gU0hGX0VYRUNJTlNUUiB8IFNIRl9BTExPQzsKIAlwbHRzZWMtJmd0O3NoX2FkZHJhbGlnbiA9IEwxX0NBQ0hFX0JZVEVTOwogCXBsdHNlYy0mZ3Q7c2hfc2l6ZSA9IChjb3JlX3BsdHMgICYjNDM7IDEpICogc2l6ZW9mKHN0cnVjdCBwbHRfZW50cnkpOwotCW1vZC0mZ3Q7YXJjaC5jb3JlLnBsdF9udW1fZW50cmllcyA9IDA7CiYjNDM7CW1vZC0mZ3Q7YXJjaC5jb3JlLnBsdF9udW1fZW50cmllcyA9IGZ0cmFjZV9wbHRzOwogCW1vZC0mZ3Q7YXJjaC5jb3JlLnBsdF9tYXhfZW50cmllcyA9IGNvcmVfcGx0czsKIAotCXBsdHNlYyA9IHNlY2hkcnMgJiM0MzsgbW9kLSZndDthcmNoLmluaXQucGx0X3NobmR4OwotCXBsdHNlYy0mZ3Q7c2hfdHlwZSA9IFNIVF9OT0JJVFM7Ci0JcGx0c2VjLSZndDtzaF9mbGFncyA9IFNIRl9FWEVDSU5TVFIgfCBTSEZfQUxMT0M7Ci0JcGx0c2VjLSZndDtzaF9hZGRyYWxpZ24gPSBMMV9DQUNIRV9CWVRFUzsKLQlwbHRzZWMtJmd0O3NoX3NpemUgPSAoaW5pdF9wbHRzICYjNDM7IDEpICogc2l6ZW9mKHN0cnVjdCBwbHRfZW50cnkpOwotCW1vZC0mZ3Q7YXJjaC5pbml0LnBsdF9udW1fZW50cmllcyA9IDA7Ci0JbW9kLSZndDthcmNoLmluaXQucGx0X21heF9lbnRyaWVzID0gaW5pdF9wbHRzOwotCi0JaWYgKHRyYW1wKSB7Ci0JCXRyYW1wLSZndDtzaF90eXBlID0gU0hUX05PQklUUzsKLQkJdHJhbXAtJmd0O3NoX2ZsYWdzID0gU0hGX0VYRUNJTlNUUiB8IFNIRl9BTExPQzsKLQkJdHJhbXAtJmd0O3NoX2FkZHJhbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCBwbHRfZW50cnkpOwotCQl0cmFtcC0mZ3Q7c2hfc2l6ZSA9IE5SX0ZUUkFDRV9QTFRTICogc2l6ZW9mKHN0cnVjdCBwbHRfZW50cnkpOwotCX0KLQotCWlmIChpbml0X3RyYW1wKSB7Ci0JCWluaXRfdHJhbXAtJmd0O3NoX3R5cGUgPSBTSFRfTk9CSVRTOwotCQlpbml0X3RyYW1wLSZndDtzaF9mbGFncyA9IFNIRl9FWEVDSU5TVFIgfCBTSEZfQUxMT0M7Ci0JCWluaXRfdHJhbXAtJmd0O3NoX2FkZHJhbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCBwbHRfZW50cnkpOwotCQlpbml0X3RyYW1wLSZndDtzaF9zaXplID0gTlJfRlRSQUNFX1BMVFMgKiBzaXplb2Yoc3RydWN0IHBsdF9lbnRyeSk7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jCmluZGV4IDI0YWRiNTgxYWYwZWIuLjYyMGMyYjcwMTE1ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jCkBAIC00NTQsMjkgJiM0Mzs0NTQsMTEgQEAgc3RhdGljIGludCBtb2R1bGVfaW5pdF9mdHJhY2VfcGx0KGNvbnN0IEVsZl9FaGRyICpoZHIsCiAJCQkJICBzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpCi0JY29uc3QgRWxmX1NoZHIgKnM7Ci0Jc3RydWN0IHBsdF9lbnRyeSAqcGx0czsKLQotCXMgPSBmaW5kX3NlY3Rpb24oaGRyLCBzZWNoZHJzLCAmIzM0Oy50ZXh0LmZ0cmFjZV90cmFtcG9saW5lJiMzNDspOwotCWlmICghcykKLQkJcmV0dXJuIC1FTk9FWEVDOwotCi0JcGx0cyA9ICh2b2lkICopcy0mZ3Q7c2hfYWRkcjsKJiM0MzsJc3RydWN0IHBsdF9lbnRyeSAqcGx0cyA9ICh2b2lkICopc2VjaGRyc1ttb2QtJmd0O2FyY2guY29yZS5wbHRfc2huZHhdLnNoX2FkZHI7CiAKIAlfX2luaXRfcGx0KCZhbXA7cGx0c1tGVFJBQ0VfUExUX0lEWF0sIEZUUkFDRV9BRERSKTsKIAogCW1vZC0mZ3Q7YXJjaC5mdHJhY2VfdHJhbXBvbGluZXMgPSBwbHRzOwotCi0JcyA9IGZpbmRfc2VjdGlvbihoZHIsIHNlY2hkcnMsICYjMzQ7LmluaXQudGV4dC5mdHJhY2VfdHJhbXBvbGluZSYjMzQ7KTsKLQlpZiAoIXMpCi0JCXJldHVybiAtRU5PRVhFQzsKLQotCXBsdHMgPSAodm9pZCAqKXMtJmd0O3NoX2FkZHI7Ci0KLQlfX2luaXRfcGx0KCZhbXA7cGx0c1tGVFJBQ0VfUExUX0lEWF0sIEZUUkFDRV9BRERSKTsKLQotCW1vZC0mZ3Q7YXJjaC5pbml0X2Z0cmFjZV90cmFtcG9saW5lcyA9IHBsdHM7Ci0KICNlbmRpZgogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9pbml0LmMgYi9hcmNoL2FybTY0L21tL2luaXQuYwppbmRleCA5Nzk4N2Y4NTBhMzNjLi5lNmM5ODA0NTA0NmUyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL2luaXQuYwpAQCAtNTMxLDcgJiM0Mzs1MzEsOCBAQCBzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpCiAJCQlbRVhFQ01FTV9ERUZBVUxUXSA9IHsKIAkJCQkuc3RhcnQJPSBzdGFydCwKIAkJCQkuZW5kCT0gZW5kLAotCQkJCS5wZ3Byb3QJPSBQQUdFX0tFUk5FTCwKJiM0MzsJCQkJLnBncHJvdAk9IFBBR0VfS0VSTkVMX1JPWCwKJiM0MzsJCQkJLmZsYWdzCT0gRVhFQ01FTV9ST1hfQ0FDSEUsCiAJCQkJLmFsaWdubWVudCA9IDEsCiAJCQkJLmZhbGxiYWNrX3N0YXJ0CT0gZmFsbGJhY2tfc3RhcnQsCiAJCQkJLmZhbGxiYWNrX2VuZAk9IGZhbGxiYWNrX2VuZCwKQEAgLTU0OCw5ICYjNDM7NTQ5LDI1IEBAIHN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZCkKIAkJCQkucGdwcm90CT0gUEFHRV9LRVJORUwsCiAJCQkJLmFsaWdubWVudCA9IDEsCiAJCQl9LAomIzQzOwkJCVtFWEVDTUVNX01PRFVMRV9EQVRBXSA9IHsKJiM0MzsJCQkJLnN0YXJ0CT0gc3RhcnQsCiYjNDM7CQkJCS5lbmQJPSBlbmQsCiYjNDM7CQkJCS5wZ3Byb3QJPSBQQUdFX0tFUk5FTCwKJiM0MzsJCQkJLmFsaWdubWVudCA9IDEsCiYjNDM7CQkJCS5mYWxsYmFja19zdGFydAk9IGZhbGxiYWNrX3N0YXJ0LAomIzQzOwkJCQkuZmFsbGJhY2tfZW5kCT0gZmFsbGJhY2tfZW5kLAomIzQzOwkJCX0sCiAJCX0sCiAJfTsKIAomIzQzOwlpZiAoIXN5c3RlbV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KCkpCiYjNDM7CQlleGVjbWVtX2luZm8ucmFuZ2VzW0VYRUNNRU1fREVGQVVMVF0uZmxhZ3MgfD0gRVhFQ01FTV9OT19IVUdFX1ZNQVA7CiYjNDM7CiAJcmV0dXJuICZhbXA7ZXhlY21lbV9pbmZvOwogfQomIzQzOwomIzQzO3ZvaWQgZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwltZW1zZXQzMihwdHIsIEFBUkNINjRfQlJFQUtfRkFVTFQsIHNpemUgLyBzaXplb2YoX19sZTMyKSk7CiYjNDM7fQogI2VuZGlmIC8qIENPTkZJR19FWEVDTUVNICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMgYi9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMKaW5kZXggYmJlOThhYzlhZDhjNi4uMjBmZjljYjI3M2MxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYwpAQCAtMTY5LDggJiM0MzsxNjksNiBAQCBzdGF0aWMgaW50IGNoYW5nZV9tZW1vcnlfY29tbW9uKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLAogCSAqIHdlIGFyZSBvcGVyYXRpbmcgb24gZG9lcyBub3QgcmVzdWx0IGluIHN1Y2ggc3BsaXR0aW5nLgogCSAqCiAJICogTGV0JiMzOTtzIHJlc3RyaWN0IG91cnNlbHZlcyB0byBtYXBwaW5ncyBjcmVhdGVkIGJ5IHZtYWxsb2MgKG9yIHZtYXApLgotCSAqIERpc2FsbG93IFZNX0FMTE9XX0hVR0VfVk1BUCBtYXBwaW5ncyB0byBndWFyYW50ZWUgdGhhdCBvbmx5IHBhZ2UKLQkgKiBtYXBwaW5ncyBhcmUgdXBkYXRlZCBhbmQgc3BsaXR0aW5nIGlzIG5ldmVyIG5lZWRlZC4KIAkgKgogCSAqIFNvIGNoZWNrIHdoZXRoZXIgdGhlIFthZGRyLCBhZGRyICYjNDM7IHNpemUpIGludGVydmFsIGlzIGVudGlyZWx5CiAJICogY292ZXJlZCBieSBwcmVjaXNlbHkgb25lIFZNIGFyZWEgdGhhdCBoYXMgdGhlIFZNX0FMTE9DIGZsYWcgc2V0LgpAQCAtMTc5LDcgJiM0MzsxNzcsMTYgQEAgc3RhdGljIGludCBjaGFuZ2VfbWVtb3J5X2NvbW1vbih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywKIAlpZiAoIWFyZWEgfHwKIAkgICAgKCh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZygodm9pZCAqKWVuZCkgJmd0OwogCSAgICAgKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKGFyZWEtJmd0O2FkZHIpICYjNDM7IGFyZWEtJmd0O3NpemUpIHx8Ci0JICAgICgoYXJlYS0mZ3Q7ZmxhZ3MgJmFtcDsgKFZNX0FMTE9DIHwgVk1fQUxMT1dfSFVHRV9WTUFQKSkgIT0gVk1fQUxMT0MpKQomIzQzOwkgICAgIShhcmVhLSZndDtmbGFncyAmYW1wOyBWTV9BTExPQykpCiYjNDM7ICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIERpc2FsbG93IFZNX0FMTE9XX0hVR0VfVk1BUCBtYXBwaW5ncyB1bmxlc3MgdGhlIHJlZ2lvbiBpcyBQTUQKJiM0MzsJICogYWxpZ25lZCwgb3Igc3BsaXR0aW5nIGxpdmUgaHVnZSBtYXBwaW5ncyBpcyBzdXBwb3J0ZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoKGFyZWEtJmd0O2ZsYWdzICZhbXA7IFZNX0FMTE9XX0hVR0VfVk1BUCkgJmFtcDsmYW1wOwomIzQzOwkgICAoKHN0YXJ0ICUgUE1EX1NJWkUpIHx8IChzaXplICUgUE1EX1NJWkUpKSAmYW1wOyZhbXA7CiYjNDM7CSAgIFdBUk5fT05fT05DRSghc3lzdGVtX3N1cHBvcnRzX2JibWwyX25vYWJvcnQoKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFudW1wYWdlcykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXhlY21lbS5oIGIvaW5jbHVkZS9saW51eC9leGVjbWVtLmgKaW5kZXggN2RlMjI5MTM0ZTMwNy4uYjA0OTI2ZjNmZmYyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leGVjbWVtLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9leGVjbWVtLmgKQEAgLTQ4LDEwICYjNDM7NDgsMTIgQEAgZW51bSBleGVjbWVtX3R5cGUgewogICogZW51bSBleGVjbWVtX3JhbmdlX2ZsYWdzIC0gb3B0aW9ucyBmb3IgZXhlY3V0YWJsZSBtZW1vcnkgYWxsb2NhdGlvbnMKICAqIEBFWEVDTUVNX0tBU0FOX1NIQURPVzoJYWxsb2NhdGUga2FzYW4gc2hhZG93CiAgKiBARVhFQ01FTV9ST1hfQ0FDSEU6CQlhbGxvY2F0aW9ucyBzaG91bGQgdXNlIFJPWCBjYWNoZSBvZiBodWdlIHBhZ2VzCiYjNDM7ICogQEVYRUNNRU1fTk9fSFVHRV9WTUFQOgljYWNoZSBhbGxvY2F0aW9ucyBtdXN0IGF2b2lkIGh1Z2Ugdm1hcHBpbmdzCiAgKi8KIGVudW0gZXhlY21lbV9yYW5nZV9mbGFncyB7CiAJRVhFQ01FTV9LQVNBTl9TSEFET1cJPSAoMSAmbHQ7Jmx0OyAwKSwKIAlFWEVDTUVNX1JPWF9DQUNIRQk9ICgxICZsdDsmbHQ7IDEpLAomIzQzOwlFWEVDTUVNX05PX0hVR0VfVk1BUAk9ICgxICZsdDsmbHQ7IDIpLAogfTsKIAogI2lmZGVmIENPTkZJR19BUkNIX0hBU19FWEVDTUVNX1JPWApAQCAtMTc4LDYgJiM0MzsxODAsMTUgQEAgdm9pZCBleGVjbWVtX2ZyZWUodm9pZCAqcHRyKTsKIAogREVGSU5FX0ZSRUUoZXhlY21lbSwgdm9pZCAqLCBpZiAoX1QpIGV4ZWNtZW1fZnJlZShfVCkpOwogCiYjNDM7LyoqCiYjNDM7ICogZXhlY21lbV9zcGxpdCAtIGFsbG9jYXRlIHNwYWNlIGZyb20gYW4gZXhpc3RpbmcgZXhlY21lbSBjYWNoZSBhbGxvY2F0aW9uCiYjNDM7ICogQHB0ciAgLSB0aGUgZXhpc3RpbmcgZXhlY21lbSBjYWNoZSBhbGxvY2F0aW9uCiYjNDM7ICogQHNpemUgLSB0aGUgc2l6ZSB0byBjYXJ2ZSBvdXQgZnJvbSB0aGUgZXhpc3RpbmcgYWxsb2NhdGlvbgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0aGUgYWRkcmVzcyBvZiB0aGUgY2FydmVkIG91dCBhbGxvY2F0aW9uLCBvciAlTlVMTCBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO3ZvaWQgKmV4ZWNtZW1fc3BsaXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CiYjNDM7CiAjaWZkZWYgQ09ORklHX01NVQogLyoqCiAgKiBleGVjbWVtX3ZtYXAgLSBjcmVhdGUgdmlydHVhbCBtYXBwaW5nIGZvciBFWEVDTUVNX01PRFVMRV9EQVRBIG1lbW9yeQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKaW5kZXggNzU2NjgxNWZhYmJlOC4uMDMzNmE0NjczM2RkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCkBAIC0zMTYsMTAgJiM0MzszMTYsMTAgQEAgc3RydWN0IG1vZF90cmVlX25vZGUgewogfTsKIAogZW51bSBtb2RfbWVtX3R5cGUgewotCU1PRF9URVhUID0gMCwKLQlNT0RfREFUQSwKJiM0MzsJTU9EX0RBVEEgPSAwLAogCU1PRF9ST0RBVEEsCiAJTU9EX1JPX0FGVEVSX0lOSVQsCiYjNDM7CU1PRF9URVhULAogCU1PRF9JTklUX1RFWFQsCiAJTU9EX0lOSVRfREFUQSwKIAlNT0RfSU5JVF9ST0RBVEEsCmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL21haW4uYyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jCmluZGV4IDQ2ZGQ4ZDI1YTYwNTguLjJkNjIxMzQ5NjM1OTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jCkBAIC0xMzQyLDcgJiM0MzsxMzQyLDcgQEAgc3RhdGljIGludCBtb2R1bGVfbWVtb3J5X2FsbG9jKHN0cnVjdCBtb2R1bGUgKm1vZCwgZW51bSBtb2RfbWVtX3R5cGUgdHlwZSkKIHsKIAl1bnNpZ25lZCBpbnQgc2l6ZSA9IFBBR0VfQUxJR04obW9kLSZndDttZW1bdHlwZV0uc2l6ZSk7CiAJZW51bSBleGVjbWVtX3R5cGUgZXhlY21lbV90eXBlOwotCXZvaWQgKnB0cjsKJiM0MzsJdm9pZCAqcHRyID0gTlVMTDsKIAogCW1vZC0mZ3Q7bWVtW3R5cGVdLnNpemUgPSBzaXplOwogCkBAIC0xMzUxLDExICYjNDM7MTM1MSwyNSBAQCBzdGF0aWMgaW50IG1vZHVsZV9tZW1vcnlfYWxsb2Moc3RydWN0IG1vZHVsZSAqbW9kLCBlbnVtIG1vZF9tZW1fdHlwZSB0eXBlKQogCWVsc2UKIAkJZXhlY21lbV90eXBlID0gRVhFQ01FTV9NT0RVTEVfVEVYVDsKIAotCXB0ciA9IGV4ZWNtZW1fYWxsb2NfcncoZXhlY21lbV90eXBlLCBzaXplKTsKJiM0MzsJYm9vbCBpc19yb3ggPSBleGVjbWVtX2lzX3JveChleGVjbWVtX3R5cGUpOwomIzQzOwlpZiAoaXNfcm94KSB7CiYjNDM7CQkvKgomIzQzOwkJICogU3BlY2lhbCBjYXNlIGZvciBNT0RfVEVYVCAvIE1PRF9JTklUX1RFWFQ6IGFsbG9jYXRlIHRoZQomIzQzOwkJICogbGF0dGVyIGJ5IHNwbGl0dGluZyBvZmYgcmVxdWlyZWQgc3BhY2UgZnJvbSB0aGUgZm9ybWVyCiYjNDM7CQkgKiBzbyB0aGF0IHRoZXkgYXJlIGFsd2F5cyBwbGFjZWQgY2xvc2UgdG9nZXRoZXIuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh0eXBlID09IE1PRF9URVhUKQomIzQzOwkJCXNpemUgJiM0Mzs9IFBBR0VfQUxJR04obW9kLSZndDttZW1bTU9EX0lOSVRfVEVYVF0uc2l6ZSk7CiYjNDM7CQllbHNlIGlmICh0eXBlID09IE1PRF9JTklUX1RFWFQpCiYjNDM7CQkJcHRyID0gZXhlY21lbV9zcGxpdChtb2QtJmd0O21lbVtNT0RfVEVYVF0uYmFzZSwgc2l6ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFwdHIpCiYjNDM7CQlwdHIgPSBleGVjbWVtX2FsbG9jX3J3KGV4ZWNtZW1fdHlwZSwgc2l6ZSk7CiAJaWYgKCFwdHIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbW9kLSZndDttZW1bdHlwZV0uaXNfcm94ID0gZXhlY21lbV9pc19yb3goZXhlY21lbV90eXBlKTsKJiM0MzsJbW9kLSZndDttZW1bdHlwZV0uaXNfcm94ID0gaXNfcm94OwogCiAJLyoKIAkgKiBUaGUgcG9pbnRlciB0byB0aGVzZSBibG9ja3Mgb2YgbWVtb3J5IGFyZSBzdG9yZWQgb24gdGhlIG1vZHVsZQpAQCAtMTM2OCw3ICYjNDM7MTM4Miw3IEBAIHN0YXRpYyBpbnQgbW9kdWxlX21lbW9yeV9hbGxvYyhzdHJ1Y3QgbW9kdWxlICptb2QsIGVudW0gbW9kX21lbV90eXBlIHR5cGUpCiAJICogKmRvKiBldmVudHVhbGx5IGdldCBmcmVlZCwgYnV0IGxldCYjMzk7cyBqdXN0IGtlZXAgdGhpbmdzIHNpbXBsZQogCSAqIGFuZCBhdm9pZCAqYW55KiBmYWxzZSBwb3NpdGl2ZXMuCiAJICovCi0JaWYgKCFtb2QtJmd0O21lbVt0eXBlXS5pc19yb3gpCiYjNDM7CWlmICghaXNfcm94KQogCQlrbWVtbGVha19ub3RfbGVhayhwdHIpOwogCiAJbWVtc2V0KHB0ciwgMCwgc2l6ZSk7CmRpZmYgLS1naXQgYS9tbS9leGVjbWVtLmMgYi9tbS9leGVjbWVtLmMKaW5kZXggMDg0YTIwN2U0Mjc4Yi4uNTc5MGQ0YTg1MzJhZiAxMDA2NDQKLS0tIGEvbW0vZXhlY21lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2V4ZWNtZW0uYwpAQCAtMjc2LDcgJiM0MzsyNzYsOCBAQCBzdGF0aWMgdm9pZCAqX19leGVjbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBleGVjbWVtX3JhbmdlICpyYW5nZSwgc2l6ZV90IHNpemUpCiAKIHN0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3BvcHVsYXRlX2FsbG9jKHN0cnVjdCBleGVjbWVtX3JhbmdlICpyYW5nZSwgc2l6ZV90IHNpemUpCiB7Ci0JdW5zaWduZWQgbG9uZyB2bV9mbGFncyA9IFZNX0FMTE9XX0hVR0VfVk1BUDsKJiM0MzsJdW5zaWduZWQgbG9uZyB2bV9mbGFncyA9IChyYW5nZS0mZ3Q7ZmxhZ3MgJmFtcDsgRVhFQ01FTV9OT19IVUdFX1ZNQVApCiYjNDM7CQkJCQkJPyAwIDogVk1fQUxMT1dfSFVHRV9WTUFQOwogCXN0cnVjdCBtdXRleCAqbXV0ZXggPSAmYW1wO2V4ZWNtZW1fY2FjaGUubXV0ZXg7CiAJc3RydWN0IHZtX3N0cnVjdCAqdm07CiAJc2l6ZV90IGFsbG9jX3NpemU7CkBAIC00MzksNiAmIzQzOzQ0MCwzMyBAQCBzdGF0aWMgYm9vbCBleGVjbWVtX2NhY2hlX2ZyZWUodm9pZCAqcHRyKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIHZvaWQgKmV4ZWNtZW1fY2FjaGVfc3BsaXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYXBsZV90cmVlICpidXN5X2FyZWFzID0gJmFtcDtleGVjbWVtX2NhY2hlLmJ1c3lfYXJlYXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXB0cjsKJiM0MzsJTUFfU1RBVEUobWFzLCBidXN5X2FyZWFzLCBhZGRyLCBhZGRyKTsKJiM0MzsJdm9pZCAqYXJlYTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7ZXhlY21lbV9jYWNoZS5tdXRleCk7CiYjNDM7CiYjNDM7CWFyZWEgPSBtYXNfd2FsaygmYW1wO21hcyk7CiYjNDM7CWlmICghYXJlYSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwomIzQzOwomIzQzOwlpZiAoc2l6ZSAmZ3Q7PSBtYXNfcmFuZ2VfbGVuKCZhbXA7bWFzKSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwomIzQzOwomIzQzOwlhZGRyICYjNDM7PSBtYXNfcmFuZ2VfbGVuKCZhbXA7bWFzKSAtIHNpemU7CiYjNDM7CW1hc19zZXRfcmFuZ2UoJmFtcDttYXMsIGFkZHIsIG1hcy5sYXN0KTsKJiM0MzsKJiM0MzsJZXJyID0gbWFzX3N0b3JlX2dmcCgmYW1wO21hcywgKHZvaWQgKilhZGRyLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBFUlJfUFRSKGVycik7CiYjNDM7CiYjNDM7CXJldHVybiAodm9pZCAqKWFkZHI7CiYjNDM7fQomIzQzOwogI2Vsc2UgLyogQ09ORklHX0FSQ0hfSEFTX0VYRUNNRU1fUk9YICovCiAvKgogICogd2hlbiBST1ggY2FjaGUgaXMgbm90IHVzZWQgdGhlIHBlcm1pc3Npb25zIGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlcyBmb3IKQEAgLTQ1OSw2ICYjNDM7NDg3LDExIEBAIHN0YXRpYyBib29sIGV4ZWNtZW1fY2FjaGVfZnJlZSh2b2lkICpwdHIpCiB7CiAJcmV0dXJuIGZhbHNlOwogfQomIzQzOwomIzQzO3N0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKJiM0Mzt9CiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfSEFTX0VYRUNNRU1fUk9YICovCiAKIHZvaWQgKmV4ZWNtZW1fYWxsb2MoZW51bSBleGVjbWVtX3R5cGUgdHlwZSwgc2l6ZV90IHNpemUpCkBAIC01MTEsNiAmIzQzOzU0NCwxOCBAQCBib29sIGV4ZWNtZW1faXNfcm94KGVudW0gZXhlY21lbV90eXBlIHR5cGUpCiAJcmV0dXJuICEhKGV4ZWNtZW1faW5mby0mZ3Q7cmFuZ2VzW3R5cGVdLmZsYWdzICZhbXA7IEVYRUNNRU1fUk9YX0NBQ0hFKTsKIH0KIAomIzQzO3ZvaWQgKmV4ZWNtZW1fc3BsaXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CWlmICghcHRyIHx8ICFzaXplKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXB0ciA9IGV4ZWNtZW1fY2FjaGVfc3BsaXQocHRyLCBzaXplKTsKJiM0MzsJaWYgKCFJU19FUlIocHRyKSkKJiM0MzsJCXJldHVybiBwdHI7CiYjNDM7CVZNX1dBUk5fT04ocHRyICE9IEVSUl9QVFIoLUVOT01FTSkpOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBleGVjbWVtX3ZhbGlkYXRlKHN0cnVjdCBleGVjbWVtX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGV4ZWNtZW1fcmFuZ2UgKnIgPSAmYW1wO2luZm8tJmd0O3Jhbmdlc1tFWEVDTUVNX0RFRkFVTFRdOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNDo0ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4NzU3CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNzE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRm9jdXM6IEFSTTY0IE1vZHVsZSBMb2FkaW5nIGFuZCBFeGVjbWVtIENoYW5nZXMqKgoKT2theSwgc28gSSYjMzk7dmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIGZvciBhcm02NCB0aGF0JiMzOTtzIG1ha2luZyBzb21lIHByZXR0eSBzaWduaWZpY2FudCBjaGFuZ2VzIHRvIG1vZHVsZSBsb2FkaW5nLCBleGVjdXRhYmxlIG1lbW9yeSBoYW5kbGluZywgYW5kIEZ0cmFjZSwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gdGhlIGludHJvZHVjdGlvbiBvZiBgQVJDSF9IQVNfRVhFQ01FTV9ST1hgLiBJdCYjMzk7cyB0b3VjaGluZyBhIGxvdCBvZiBjb3JlIGtlcm5lbCBhcmVhczogYGFyY2gvYXJtNjQvS2NvbmZpZ2AsIHZhcmlvdXMgaW5jbHVkZSBmaWxlcywgYW5kIHNvbWUgY3JpdGljYWwgc291cmNlIGZpbGVzIGxpa2UgYG1tL2V4ZWNtZW0uY2AsIGBrZXJuZWwvbW9kdWxlL21haW4uY2AsIGFuZCBzZXZlcmFsIGFybTY0LXNwZWNpZmljIGZpbGVzIGluIHRoZSBhcmNoaXRlY3R1cmUgZGlyZWN0b3JpZXMuIFRoaXMgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nOyBpdCYjMzk7cyBmdW5jdGlvbmFsbHkgY2hhbmdpbmcgdGhpbmdzIGFuZCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBgV29ydGhGdXp6aW5nPXRydWVgIGlzIHRoZSByaWdodCBjYWxsIGhlcmUuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiB0aGUgZnVuY3Rpb25zIHRoYXQgYXJlICpkaXJlY3RseSogaW1wYWN0ZWQgYnkgdGhlc2UgY2hhbmdlcy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIHJpZ2h0IHNwb3RzIGZvciBmdXp6aW5nLiBJJiMzOTttIHRoaW5raW5nOgoKKiAgIGBleGVjbWVtX3NwbGl0YCBhbmQgYGV4ZWNtZW1fY2FjaGVfc3BsaXRgIGluIGBtbS9leGVjbWVtLmNgLiBUaGVzZSBhcmUgY2VudHJhbCB0byB0aGUgbmV3IGBNT0RfSU5JVF9URVhUYCBzZXBhcmF0aW9uLgoqICAgYG1vZHVsZV9tZW1vcnlfYWxsb2NgIGluIGBrZXJuZWwvbW9kdWxlL21haW4uY2AuIE1pZ2h0IGJlIGEgYml0IGJyb2FkLCBidXQgaXQgKmlzKiBtb2RpZmllZCwgc28gaXQmIzM5O3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LgoqICAgYGV4ZWNtZW1fYXJjaF9zZXR1cGAgaW4gYGFyY2gvYXJtNjQvbW0vaW5pdC5jYC4gVGhpcyBpcyB3aGVyZSB0aGUgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIHNldHVwIGlzIGhhcHBlbmluZy4KKiAgIGBjaGFuZ2VfbWVtb3J5X2NvbW1vbmAgaW4gYGFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY2AuIFRoaXMgaXMgc3RhdGljIGFuZCBwcm9iYWJseSBub3QgdGhlIGJlc3QgZm9jdXMuCgpOb3csIGxldCYjMzk7cyBkcmlsbCBkb3duIGEgYml0OgoKKiAgIEkgbmVlZCB0byBzZWUgdGhlIGRlZmluaXRpb24gb2YgYGV4ZWNtZW1fc3BsaXRgIGFuZCBgZXhlY21lbV9jYWNoZV9zcGxpdGAuIGBleGVjbWVtX3NwbGl0YCBsb29rcyBnb29kIGFzIGl0JiMzOTtzIGV4cG9ydGVkIGFuZCBub3Qgc3RhdGljLCBidXQgYGV4ZWNtZW1fY2FjaGVfc3BsaXRgIGlzIHN0YXRpYy4KKiAgIGBtb2R1bGVfbWVtb3J5X2FsbG9jYCBpcyBhbHNvIHN0YXRpYywgd2hpY2ggaXMgYSBiaXQgbGVzcyBpZGVhbCwgYnV0IGl0JiMzOTtzIHN0aWxsIGJlaW5nIGNoYW5nZWQgaW4gdGhpcyBwYXRjaC4KKiAgIEkmIzM5O2xsIGFsc28gdGFrZSBhIGxvb2sgYXQgdGhlIG1vZHVsZSBQTFQgYW5kIEZ0cmFjZSBjb2RlLiBTcGVjaWZpYyBmdW5jdGlvbnMgbGlrZSBgbW9kdWxlX2VtaXRfcGx0X2VudHJ5YCwgYG1vZHVsZV9lbWl0X3ZlbmVlcl9mb3JfYWRycGAsIGFuZCBgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9uc2AgaW4gYGFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmNgIHNlZW0gcmVsZXZhbnQgYW5kIHdvcnRoIGEgbG9vay4gVGhlIEZ0cmFjZSBjb2RlIGluIGBhcmNoL2FybTY0L2tlcm5lbC9mdHJhY2UuY2AgYWxzbyBoYXMgZnVuY3Rpb25zIHRvIGNvbnNpZGVyIGxpa2UgYGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmNgLCBgZnRyYWNlX2ZpbmRfY2FsbGFibGVfYWRkcmAuCgpJJiMzOTtsbCB1c2UgYGdyZXBwZXJgIHRvIGdldCBhIHByZWNpc2UgdmlldyBvZiB0aGVzZSBmdW5jdGlvbnMuIEZyb20gdGhlcmUsIEkgY2FuIGZpZ3VyZSBvdXQgdGhlIGJlc3QgdGFyZ2V0cyBmb3IgZnV6emluZyBjYW1wYWlnbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Xih2b2lkIFxcKnxib29sIHxpbnQgKT9leGVjbWVtX3NwbGl0JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZXhlY21lbS5oPTE4MT1ERUZJTkVfRlJFRShleGVjbWVtLCB2b2lkICosIGlmIChfVCkgZXhlY21lbV9mcmVlKF9UKSk7XG4tLVxuaW5jbHVkZS9saW51eC9leGVjbWVtLmgtMTg5LSAqL1xuaW5jbHVkZS9saW51eC9leGVjbWVtLmg6MTkwOnZvaWQgKmV4ZWNtZW1fc3BsaXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaC0xOTEtXG4tLVxubW0vZXhlY21lbS5jPTU0Mj1ib29sIGV4ZWNtZW1faXNfcm94KGVudW0gZXhlY21lbV90eXBlIHR5cGUpXG4tLVxubW0vZXhlY21lbS5jLTU0Ni1cbm1tL2V4ZWNtZW0uYzo1NDc6dm9pZCAqZXhlY21lbV9zcGxpdCh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxubW0vZXhlY21lbS5jLTU0OC17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTAzMDUKCQkJCQkJCW91dHB1dDogMjQKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIGtlZXBpbmcgaW4gbWluZCBteSBleHBlcnRpc2U6CgoqKkZvY3VzaW5nIE15IEFuYWx5c2lzKioKClJpZ2h0LCBzbyBgZXhlY21lbV9zcGxpdGAgaXMgZGVmaW5pdGVseSB3aGVyZSBJIG5lZWQgdG8gc3RhcnQgZGlnZ2luZy4gVGhhdCYjMzk7cyBhIHN0cm9uZyBpbmRpY2F0b3Igb2YgcG90ZW50aWFsIHNlY3VyaXR5IGltcGxpY2F0aW9ucywgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gZXhlY3V0YWJsZSBtZW1vcnkuIE5vdywgbGV0JiMzOTtzIHNlZS4uLiB3aGF0IGFib3V0IGBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zYD8gSSBuZWVkIHRvIHdlaWdoIHRoYXQgYWdhaW5zdCBgZXhlY21lbV9zcGxpdGAuIEl0IHNvdW5kcyBsaWtlIGl0IGNvdWxkIGJlIGFub3RoZXIgcmVsZXZhbnQgZm9jdXMgYXJlYS4gQ291bGQgdGhhdCBmdW5jdGlvbiBiZSB1c2VkIHRvIG1vZGlmeSB0aGUgZXhlY3V0YWJsZSBtZW1vcnkgcmVnaW9ucyBhZnRlciB0aGUgc3BsaXQsIG9yIGNvdWxkIGl0IGJlIGludm9sdmVkIGluIHNldHRpbmcgdXAgdGhlIGNvbmRpdGlvbnMgZm9yIGl0PyBJcyB0aGF0IGEgY3JpdGljYWwgcG9pbnQsIG1heWJlIGxlYWRpbmcgdG8gc29tZSBuZXcgdGVjaG5pcXVlcz8gSSYjMzk7bSBnb2luZyB0byBoYXZlIHRvIGNhcmVmdWxseSBjb25zaWRlciBib3RoIGZ1bmN0aW9ucyBpbiBjb250ZXh0IG9mIGVhY2ggb3RoZXIgYXMgSSBkaXZlIGludG8gdGhpcyBhbmFseXNpcy4gVGhlIGludGVycGxheSBiZXR3ZWVuIHRoZW0gY291bGQgcmV2ZWFsIHNvbWV0aGluZyByZWFsbHkgaW50ZXJlc3RpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJjL2tlcm5lbC9tb2R1bGUuYz0xNj1zdGF0aWMgaW5saW5lIHZvaWQgYXJjX3dyaXRlX21lKHVuc2lnbmVkIHNob3J0ICphZGRyLCB1bnNpZ25lZCBsb25nIHZhbHVlKVxuLS1cbmFyY2gvYXJjL2tlcm5lbC9tb2R1bGUuYy0yNS0gKi9cbmFyY2gvYXJjL2tlcm5lbC9tb2R1bGUuYzoyNjppbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqaGRyLCBFbGZfU2hkciAqc2VjaGRycyxcbmFyY2gvYXJjL2tlcm5lbC9tb2R1bGUuYy0yNy1cdFx0XHQgICAgICBjaGFyICpzZWNzdHIsIHN0cnVjdCBtb2R1bGUgKm1vZClcbi0tXG5hcmNoL2FybS9rZXJuZWwvbW9kdWxlLXBsdHMuYz0xNTc9c3RhdGljIHVuc2lnbmVkIGludCBjb3VudF9wbHRzKGNvbnN0IEVsZjMyX1N5bSAqc3ltcywgRWxmMzJfQWRkciBiYXNlLFxuLS1cbmFyY2gvYXJtL2tlcm5lbC9tb2R1bGUtcGx0cy5jLTIwOC1cbmFyY2gvYXJtL2tlcm5lbC9tb2R1bGUtcGx0cy5jOjIwOTppbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqZWhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXG5hcmNoL2FybS9rZXJuZWwvbW9kdWxlLXBsdHMuYy0yMTAtXHRcdFx0ICAgICAgY2hhciAqc2Vjc3RyaW5ncywgc3RydWN0IG1vZHVsZSAqbW9kKVxuLS1cbmFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmM9Mjc4PXN0YXRpYyBjb25zdCBpbnQgZnRyYWNlX3BsdHMgPSBJU19FTkFCTEVEKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkgPyBOUl9GVFJBQ0VfUExUUyA6IDA7XG5hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jLTI3OS1cbmFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmM6MjgwOmludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICplaGRyLCBFbGZfU2hkciAqc2VjaGRycyxcbmFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmMtMjgxLVx0XHRcdCAgICAgIGNoYXIgKnNlY3N0cmluZ3MsIHN0cnVjdCBtb2R1bGUgKm1vZClcbi0tXG5hcmNoL2hleGFnb24va2VybmVsL21vZHVsZS5jLTI2LSAqL1xuYXJjaC9oZXhhZ29uL2tlcm5lbC9tb2R1bGUuYzoyNzppbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqaGRyLCBFbGZfU2hkciAqc2VjaGRycyxcbmFyY2gvaGV4YWdvbi9rZXJuZWwvbW9kdWxlLmMtMjgtXHRcdFx0XHRjaGFyICpzZWNzdHJpbmdzLFxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tb2R1bGUtc2VjdGlvbnMuYz03OT1zdGF0aWMgdm9pZCBjb3VudF9tYXhfZW50cmllcyhFbGZfUmVsYSAqcmVsYXMsIGludCBudW0sXG4tLVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL21vZHVsZS1zZWN0aW9ucy5jLTEwNC1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tb2R1bGUtc2VjdGlvbnMuYzoxMDU6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL21vZHVsZS1zZWN0aW9ucy5jLTEwNi1cdFx0XHQgICAgICBjaGFyICpzZWNzdHJpbmdzLCBzdHJ1Y3QgbW9kdWxlICptb2QpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL21vZHVsZS5jPTI1Nz11bnNpZ25lZCBpbnQgYXJjaF9tb2Rfc2VjdGlvbl9wcmVwZW5kKHN0cnVjdCBtb2R1bGUgKm1vZCxcbi0tXG5hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMtMjY2LSNkZWZpbmUgQ09OU1RcbmFyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYzoyNjc6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoQ09OU1QgRWxmX0VoZHIgKmhkcixcbmFyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYy0yNjgtXHRcdFx0ICAgICAgQ09OU1QgRWxmX1NoZHIgKnNlY2hkcnMsXG4tLVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfMzIuYz03Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcGx0X3NpemUoY29uc3QgRWxmMzJfRWhkciAqaGRyLFxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzMyLmMtMTE5LVxuYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfMzIuYzoxMjA6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmMzJfRWhkciAqaGRyLFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfMzIuYy0xMjEtXHRcdFx0ICAgICAgRWxmMzJfU2hkciAqc2VjaGRycyxcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jPTQyND1ib29sIG1vZHVsZV9pbml0X3NlY3Rpb24oY29uc3QgY2hhciAqbmFtZSlcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jLTQyOS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzY0LmM6NDMwOmludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZjY0X0VoZHIgKmhkcixcbmFyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzY0LmMtNDMxLVx0XHRcdCAgICAgIEVsZjY0X1NoZHIgKnNlY2hkcnMsXG4tLVxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLXNlY3Rpb25zLmM9MTAxPXN0YXRpYyBib29sIHJlbGFfbmVlZHNfcGx0X2dvdF9lbnRyeShjb25zdCBFbGZfUmVsYSAqcmVsYSlcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUtc2VjdGlvbnMuYy0xMTItXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUtc2VjdGlvbnMuYzoxMTM6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLXNlY3Rpb25zLmMtMTE0LVx0XHRcdCAgICAgIGNoYXIgKnNlY3N0cmluZ3MsIHN0cnVjdCBtb2R1bGUgKm1vZClcbi0tXG5hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jPTU5PXN0YXRpYyB2b2lkIGNoZWNrX3JlbGEoRWxmX1JlbGEgKnJlbGEsIHN0cnVjdCBtb2R1bGUgKm1lKVxuLS1cbmFyY2gvczM5MC9rZXJuZWwvbW9kdWxlLmMtMTA3LSAqL1xuYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYzoxMDg6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXG5hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jLTEwOS1cdFx0XHQgICAgICBjaGFyICpzZWNzdHJpbmdzLCBzdHJ1Y3QgbW9kdWxlICptZSlcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC9tb2R1bGUuYy0yNC0vKiBNYWtlIGdlbmVyaWMgY29kZSBpZ25vcmUgU1RUX1JFR0lTVEVSIGR1bW15IHVuZGVmaW5lZCBzeW1ib2xzLiAgKi9cbmFyY2gvc3BhcmMva2VybmVsL21vZHVsZS5jOjI1OmludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICpoZHIsXG5hcmNoL3NwYXJjL2tlcm5lbC9tb2R1bGUuYy0yNi1cdFx0XHQgICAgICBFbGZfU2hkciAqc2VjaGRycyxcbi0tXG5pbmNsdWRlL2xpbnV4L21vZHVsZWxvYWRlci5oPTE3PWJvb2wgbW9kdWxlX2VsZl9jaGVja19hcmNoKEVsZl9FaGRyICpoZHIpO1xuLS1cbmluY2x1ZGUvbGludXgvbW9kdWxlbG9hZGVyLmgtMTktLyogQWRqdXN0IGFyY2gtc3BlY2lmaWMgc2VjdGlvbnMuICBSZXR1cm4gMCBvbiBzdWNjZXNzLiAgKi9cbmluY2x1ZGUvbGludXgvbW9kdWxlbG9hZGVyLmg6MjA6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmhkcixcbmluY2x1ZGUvbGludXgvbW9kdWxlbG9hZGVyLmgtMjEtXHRcdFx0ICAgICAgRWxmX1NoZHIgKnNlY2hkcnMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwMzAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkluaXRpYWwgQXJjaGl0ZWN0dXJlIE1vZHVsZSBUaG91Z2h0cyoqCgpBbHJpZ2h0LCBsZXQmIzM5O3Mgc2VlLi4uIGBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zYCBpcyBkZWZpbml0ZWx5IGEgc29saWQgbmFtZSwgaXQgY29tbXVuaWNhdGVzIHRoZSBnZW5lcmFsIHB1cnBvc2Ugb2YgdGhpcyBtb2R1bGUgcXVpdGUgZWZmZWN0aXZlbHkuIEl0JiMzOTtzIGEgY2xlYXIgZGVzY3JpcHRvciBvZiBpdHMgZnVuY3Rpb24gZm9yIHRoaXMgYXJjaGl0ZWN0dXJlLiBCdXQsIEkmIzM5O20gYWxyZWFkeSB0aGlua2luZyBwYXN0IHRoYXQgLSB3aGF0IGFib3V0IGBleGVjbWVtX2FyY2hfc2V0dXBgPyBUaGF0IHBocmFzZSBoaWdobGlnaHRzIHRoZSBzcGVjaWZpYyBhc3BlY3Qgb2YgZXhlY3V0aW9uIG1lbW9yeSBzZXR1cCBhdCB0aGUgYXJjaGl0ZWN0dXJhbCBsZXZlbC4gSSYjMzk7bSB3ZWlnaGluZyB1cCB0aGUgcG90ZW50aWFsIGZvciBhIG5hbWUgdGhhdCBjYXB0dXJlcyB0aGUgc2V0dXAgb2YgZXhlY3V0aW9uIG1lbW9yeSB2ZXJzdXMgdGhlIHBvdGVudGlhbCBtb3JlIGdlbmVyaWMgbmFtZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNDo0ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtec3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgXFwqZXhlY21lbV9hcmNoX3NldHVwJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtL21tL2luaXQuYz00NDk9c3RhdGljIHN0cnVjdCBleGVjbWVtX2luZm8gZXhlY21lbV9pbmZvIF9fcm9fYWZ0ZXJfaW5pdDtcbmFyY2gvYXJtL21tL2luaXQuYy00NTAtXG5hcmNoL2FybS9tbS9pbml0LmM6NDUxOnN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcbmFyY2gvYXJtL21tL2luaXQuYy00NTIte1xuLS1cbmFyY2gvYXJtNjQvbW0vaW5pdC5jPTUwMz1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xuYXJjaC9hcm02NC9tbS9pbml0LmMtNTA0LVxuYXJjaC9hcm02NC9tbS9pbml0LmM6NTA1OnN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTUwNi17XG4tLVxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jPTI0MD1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jLTI0MS1cbmFyY2gvbG9vbmdhcmNoL21tL2luaXQuYzoyNDI6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jLTI0My17XG4tLVxuYXJjaC9taXBzL21tL2luaXQuYz01NjM9c3RhdGljIHN0cnVjdCBleGVjbWVtX2luZm8gZXhlY21lbV9pbmZvIF9fcm9fYWZ0ZXJfaW5pdDtcbmFyY2gvbWlwcy9tbS9pbml0LmMtNTY0LVxuYXJjaC9taXBzL21tL2luaXQuYzo1NjU6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuYXJjaC9taXBzL21tL2luaXQuYy01NjYte1xuLS1cbmFyY2gvbmlvczIvbW0vaW5pdC5jPTEzNz1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xuYXJjaC9uaW9zMi9tbS9pbml0LmMtMTM4LVxuYXJjaC9uaW9zMi9tbS9pbml0LmM6MTM5OnN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcbmFyY2gvbmlvczIvbW0vaW5pdC5jLTE0MC17XG4tLVxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jPTk3Nz1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTk3OC1cbmFyY2gvcGFyaXNjL21tL2luaXQuYzo5Nzk6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTk4MC17XG4tLVxuYXJjaC9wb3dlcnBjL21tL21lbS5jPTM5Mj1zdGF0aWMgdm9pZCBwcmVhbGxvY19leGVjbWVtX3BndGFibGUodm9pZCkgeyB9XG4tLVxuYXJjaC9wb3dlcnBjL21tL21lbS5jLTM5NC1cbmFyY2gvcG93ZXJwYy9tbS9tZW0uYzozOTU6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuYXJjaC9wb3dlcnBjL21tL21lbS5jLTM5Ni17XG4tLVxuYXJjaC9yaXNjdi9tbS9pbml0LmM9MTQ0OD1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xuYXJjaC9yaXNjdi9tbS9pbml0LmMtMTQ0OS1cbmFyY2gvcmlzY3YvbW0vaW5pdC5jOjE0NTA6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuYXJjaC9yaXNjdi9tbS9pbml0LmMtMTQ1MS17XG4tLVxuYXJjaC9zMzkwL21tL2luaXQuYz0yOTM9c3RhdGljIHN0cnVjdCBleGVjbWVtX2luZm8gZXhlY21lbV9pbmZvIF9fcm9fYWZ0ZXJfaW5pdDtcbmFyY2gvczM5MC9tbS9pbml0LmMtMjk0LVxuYXJjaC9zMzkwL21tL2luaXQuYzoyOTU6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuYXJjaC9zMzkwL21tL2luaXQuYy0yOTYte1xuLS1cbmFyY2gvc3BhcmMvbW0vZXhlY21lbS5jPTU9c3RhdGljIHN0cnVjdCBleGVjbWVtX2luZm8gZXhlY21lbV9pbmZvIF9fcm9fYWZ0ZXJfaW5pdDtcbmFyY2gvc3BhcmMvbW0vZXhlY21lbS5jLTYtXG5hcmNoL3NwYXJjL21tL2V4ZWNtZW0uYzo3OnN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcbmFyY2gvc3BhcmMvbW0vZXhlY21lbS5jLTgte1xuLS1cbmFyY2gveDg2L21tL2luaXQuYz0xMDYwPXZvaWQgZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpXG4tLVxuYXJjaC94ODYvbW0vaW5pdC5jLTEwNjUtXG5hcmNoL3g4Ni9tbS9pbml0LmM6MTA2NjpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG5hcmNoL3g4Ni9tbS9pbml0LmMtMTA2Ny17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTMzNjEKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA2NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSB3ZXJlIHRoaW5raW5nIHRocm91Z2ggdGhlIHByb2JsZW06CgoqKkZ1enppbmcgdGhlIGBleGVjbWVtYCBNb2R1bGUqKgoKT2theSwgc28gSSYjMzk7bSB0cnlpbmcgdG8gZmlndXJlIG91dCB0aGUgYmVzdCBwb2ludHMgdG8gdGFyZ2V0IGZvciBmdXp6aW5nIHdpdGhpbiB0aGUgYGV4ZWNtZW1gIG1vZHVsZS4gTGV0JiMzOTtzIHNlZS4uLiBgZXhlY21lbV9hcmNoX3NldHVwYCBpcyBiYXNpY2FsbHkgdGhlIGBfX2luaXRgIG9mIHRoaXMgd2hvbGUgdGhpbmcsIHJpZ2h0PyBUaGF0IG1lYW5zIGl0IHJ1bnMgb25jZSBhdCBib290LCBhbmQgaXQmIzM5O3Mgbm90IGdvaW5nIHRvIGJlIHN1cGVyIGhlbHBmdWwgZm9yIGZ1enppbmcuIFdlIG5lZWQgc29tZXRoaW5nIHRoYXQmIzM5O3MgcmVwZWF0ZWRseSBjYWxsZWQgYW5kIHByb2Nlc3NlcyBwb3RlbnRpYWxseSBtYWxmb3JtZWQgaW5wdXQgb3Igc29tZXRoaW5nLiBgZXhlY21lbV9zcGxpdGAgbG9va3MgcHJvbWlzaW5nLiBUaGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydCBkaWdnaW5nIGRlZXBlci4KCkhtbSwgd2hhdCBhYm91dCBgZXhlY21lbV9hbGxvY2A/IEl0IGFwcGVhcnMgdW5tb2RpZmllZCwgYnV0IG1heWJlIHRoZXJlJiMzOTtzIHNvbWUgdXNlZnVsIGZ1bmN0aW9uYWxpdHkgYWZ0ZXIgdGhhdC4gQWgsIGhhISBJIHNlZSB0aGF0IGBleGVjbWVtX2NhY2hlX3BvcHVsYXRlX2FsbG9jYCAqaXMqIG1vZGlmaWVkLCB3aGljaCBwcm9iYWJseSBtZWFucyB0aGF0JiMzOTtzIHRoZSBvbmUgSSBuZWVkIHRvIGZvY3VzIG9uIG5leHQuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zLCBidXQgYGV4ZWNtZW1fY2FjaGVfcG9wdWxhdGVfYWxsb2NgIGxvb2tzIGxpa2UgdGhlIHByaW1hcnkgdGFyZ2V0IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE0OjQ4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15zdGF0aWMgdm9pZCBcXCpleGVjbWVtX2NhY2hlX3BvcHVsYXRlX2FsbG9jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2V4ZWNtZW0uYz0yNzA9c3RhdGljIHZvaWQgKl9fZXhlY21lbV9jYWNoZV9hbGxvYyhzdHJ1Y3QgZXhlY21lbV9yYW5nZSAqcmFuZ2UsIHNpemVfdCBzaXplKVxuLS1cbm1tL2V4ZWNtZW0uYy0yNzYtXG5tbS9leGVjbWVtLmM6Mjc3OnN0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3BvcHVsYXRlX2FsbG9jKHN0cnVjdCBleGVjbWVtX3JhbmdlICpyYW5nZSwgc2l6ZV90IHNpemUpXG5tbS9leGVjbWVtLmMtMjc4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM4MDIKCQkJCQkJCW91dHB1dDogMjEKCQkJCQkJCXRob3VnaHRzOiAyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgdGhlIEFsbG9jYXRpb24gU3RyYXRlZ3kqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gKmBleGVjbWVtX2NhY2hlX3BvcHVsYXRlX2FsbG9jYCouLi4gdGhhdCYjMzk7cyBhICpzdGF0aWMqIGZ1bmN0aW9uLiBSaWdodCBhd2F5LCB0aGF0JiMzOTtzIGEgY3JpdGljYWwgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoYXQgbWVhbnMgaXQmIzM5O3MgaW50ZXJuYWwgdG8gd2hhdGV2ZXIgY29tcGlsYXRpb24gdW5pdCBpdCYjMzk7cyBkZWZpbmVkIGluLCBsaWtlbHkgcmVsYXRlZCB0byB0aGUgZXhlY3V0aW9uIG1lbW9yeSBtYW5hZ2VtZW50LiBJdCYjMzk7cyBub3QgbWVhbnQgdG8gYmUgZGlyZWN0bHkgY2FsbGVkIGZyb20gZWxzZXdoZXJlIGluIHRoZSBzeXN0ZW0sIHdoaWNoIHN1Z2dlc3RzIGEgdGlnaHRseSBjb250cm9sbGVkLCBwb3NzaWJseSBvcHRpbWl6ZWQsIGFsbG9jYXRpb24gcm91dGluZSBmb3IgYSBzcGVjaWZpYyBwdXJwb3NlLiBBbmQgdGhlIGZhY3QgdGhhdCAqYGV4ZWNtZW1fYWxsb2NgKiBjYWxscyB0aGlzIHN0YXRpYyBmdW5jdGlvbi4uLiB0aGF0JiMzOTtzIHRoZSBrZXkgcmVsYXRpb25zaGlwLiAqYGV4ZWNtZW1fYWxsb2NgKiBpcyBsaWtlbHkgdGhlIHB1YmxpYy1mYWNpbmcgZW50cnkgcG9pbnQsIHRoZSBmdW5jdGlvbiB0aGF0IHVzZXJzIG9mIHRoaXMgZXhlY3V0aW9uIG1lbW9yeSBzdWJzeXN0ZW0gd291bGQgY2FsbC4gQW5kICpgZXhlY21lbV9jYWNoZV9wb3B1bGF0ZV9hbGxvY2AqIGlzIHRoZSAqd29ya2hvcnNlKiwgdGhlIHVuc3VuZyBoZXJvIHRoYXQgYWN0dWFsbHkgZG9lcyB0aGUgZGlydHkgd29yayBvZiBhbGxvY2F0aW5nIGZyb20gdGhlIGNhY2hlLiBUaGlzIGlzIGEgY2xhc3NpYyBwYXR0ZXJuLCBhIGNvbnRyb2xsZWQgaW50ZXJmYWNlIHdpdGggYSBoaWRkZW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLiBUaGF0IHN0cnVjdHVyZSBpcyBkZXNpZ25lZCBmb3IgZWZmaWNpZW5jeSBhbmQgc2FmZXR5LCBsaWtlbHkgaGlkaW5nIGFsbCBraW5kcyBvZiBjYWNoZSBtYW5hZ2VtZW50IGNvbXBsZXhpdHkuIEkmIzM5O2QgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBjb2RlIHRvIHJlYWxseSB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMsIGJ1dCB0aGUgZGVzaWduIGlzIGEgZmFtaWxpYXIgYW5kIHNlbnNpYmxlIG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgXFwqZXhlY21lbV9hbGxvYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaD0xMzM9c3RydWN0IGV4ZWNtZW1faW5mbyAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvZXhlY21lbS5oLTE1MC0gKi9cbmluY2x1ZGUvbGludXgvZXhlY21lbS5oOjE1MTp2b2lkICpleGVjbWVtX2FsbG9jKGVudW0gZXhlY21lbV90eXBlIHR5cGUsIHNpemVfdCBzaXplKTtcbmluY2x1ZGUvbGludXgvZXhlY21lbS5oLTE1Mi1cbi0tXG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaC0xNzItICovXG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaDoxNzM6dm9pZCAqZXhlY21lbV9hbGxvY19ydyhlbnVtIGV4ZWNtZW1fdHlwZSB0eXBlLCBzaXplX3Qgc2l6ZSk7XG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaC0xNzQtXG4tLVxubW0vZXhlY21lbS5jPTQ5MT1zdGF0aWMgdm9pZCAqZXhlY21lbV9jYWNoZV9zcGxpdCh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxuLS1cbm1tL2V4ZWNtZW0uYy00OTYtXG5tbS9leGVjbWVtLmM6NDk3OnZvaWQgKmV4ZWNtZW1fYWxsb2MoZW51bSBleGVjbWVtX3R5cGUgdHlwZSwgc2l6ZV90IHNpemUpXG5tbS9leGVjbWVtLmMtNDk4LXtcbi0tXG5tbS9leGVjbWVtLmMtNTE0LVxubW0vZXhlY21lbS5jOjUxNTp2b2lkICpleGVjbWVtX2FsbG9jX3J3KGVudW0gZXhlY21lbV90eXBlIHR5cGUsIHNpemVfdCBzaXplKVxubW0vZXhlY21lbS5jLTUxNi17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NDM2CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogNTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczoKCioqS2VybmVsIE1lbW9yeSBBbGxvY2F0aW9uIENvbnNpZGVyYXRpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gY29kZSBoZXJlLiBTcGVjaWZpY2FsbHksIGBleGVjbWVtX2FsbG9jX3J3YCBpcyBjYWxsZWQgYnkgYG1vZHVsZV9tZW1vcnlfYWxsb2NgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIGludGVncmF0ZSB0aGVzZSBuZXcgZnVuY3Rpb25zIGludG8gbXkgdW5kZXJzdGFuZGluZy4gUmlnaHQsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhZGQgYGV4ZWNtZW1fYWxsb2NfcndgIGFuZCB0aGUgYGV4ZWNtZW1fc3BsaXRgIGZ1bmN0aW9uIHRvIG15IG1lbnRhbCBtYXAgb2YgaG93IHRoaXMgYWxsIHdvcmtzLiBJJiMzOTtsbCBuZWVkIHRvIHJlbWVtYmVyIGhvdyB0aGV5IGZpdCB3aXRoaW4gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBtb2R1bGUgbWVtb3J5IG1hbmFnZW1lbnQuCgpBbmQgdGhlbiB0aGVyZSYjMzk7cyBgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuY2AuIEkgc2VlIHRoYXQgaXQmIzM5O3MgYmVlbiBtb2RpZmllZCwgc28gSSYjMzk7bGwgbmVlZCB0byBjYXJlZnVsbHkgcmV2aWV3IHRob3NlIGNoYW5nZXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9uIGZ1bmN0aW9uIHRyYWNpbmcuIEkmIzM5O2xsIGtlZXAgdGhpcyBpbiBtaW5kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm0va2VybmVsL2Z0cmFjZS5jPTk4PXN0YXRpYyBpbnQgZnRyYWNlX21vZGlmeV9jb2RlKHVuc2lnbmVkIGxvbmcgcGMsIHVuc2lnbmVkIGxvbmcgb2xkLFxuLS1cbmFyY2gvYXJtL2tlcm5lbC9mdHJhY2UuYy0xMjEtXG5hcmNoL2FybS9rZXJuZWwvZnRyYWNlLmM6MTIyOmludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYylcbmFyY2gvYXJtL2tlcm5lbC9mdHJhY2UuYy0xMjMte1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jPTIxMz1zdGF0aWMgaW50IGZ0cmFjZV9tb2RpZnlfY29kZSh1bnNpZ25lZCBsb25nIHBjLCB1MzIgb2xkLCB1MzIgbmV3LFxuLS1cbmFyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jLTI0MS0gKi9cbmFyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jOjI0MjppbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpXG5hcmNoL2FybTY0L2tlcm5lbC9mdHJhY2UuYy0yNDMte1xuLS1cbmFyY2gvY3NreS9rZXJuZWwvZnRyYWNlLmM9MTIxPWludCBmdHJhY2VfbWFrZV9ub3Aoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLFxuLS1cbmFyY2gvY3NreS9rZXJuZWwvZnRyYWNlLmMtMTI2LVxuYXJjaC9jc2t5L2tlcm5lbC9mdHJhY2UuYzoxMjc6aW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxuYXJjaC9jc2t5L2tlcm5lbC9mdHJhY2UuYy0xMjgte1xuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9mdHJhY2VfZHluLmM9MTE3PWludCBmdHJhY2VfbW9kaWZ5X2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBvbGRfYWRkciwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLS1cbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9mdHJhY2VfZHluLmMtMTM2LVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2Z0cmFjZV9keW4uYzoxMzc6aW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2Z0cmFjZV9keW4uYy0xMzgte1xuLS1cbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZnRyYWNlLmM9MTUzPWludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL21pY3JvYmxhemUva2VybmVsL2Z0cmFjZS5jLTE2NS1cbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZnRyYWNlLmM6MTY2OmludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYylcbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZnRyYWNlLmMtMTY3LXtcbi0tXG5hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jPTE5Nz1pbnQgZnRyYWNlX21ha2VfY2FsbChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuYXJjaC9taXBzL2tlcm5lbC9mdHJhY2UuYy0yMjAtXG5hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jOjIyMTppbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpXG5hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jLTIyMi17XG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2Z0cmFjZS5jPTg4PWludCBmdHJhY2VfZGlzYWJsZV9mdHJhY2VfZ3JhcGhfY2FsbGVyKHZvaWQpXG4tLVxuYXJjaC9wYXJpc2Mva2VybmVsL2Z0cmFjZS5jLTk1LSNpZmRlZiBDT05GSUdfRFlOQU1JQ19GVFJBQ0VcbmFyY2gvcGFyaXNjL2tlcm5lbC9mdHJhY2UuYzo5NjppbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpXG5hcmNoL3BhcmlzYy9rZXJuZWwvZnRyYWNlLmMtOTcte1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvdHJhY2UvZnRyYWNlLmM9NDcwPWludCBmdHJhY2VfaW5pdF9ub3Aoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKVxuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvdHJhY2UvZnRyYWNlLmMtNTQ5LVxuYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFjZS9mdHJhY2UuYzo1NTA6aW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxuYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFjZS9mdHJhY2UuYy01NTEte1xuLS1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvdHJhY2UvZnRyYWNlXzY0X3BnLmM9NjM3PWludCBmdHJhY2VfbW9kaWZ5X2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBvbGRfYWRkcixcbi0tXG5hcmNoL3Bvd2VycGMva2VybmVsL3RyYWNlL2Z0cmFjZV82NF9wZy5jLTY2Ny1cbmFyY2gvcG93ZXJwYy9rZXJuZWwvdHJhY2UvZnRyYWNlXzY0X3BnLmM6NjY4OmludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYylcbmFyY2gvcG93ZXJwYy9rZXJuZWwvdHJhY2UvZnRyYWNlXzY0X3BnLmMtNjY5LXtcbi0tXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYz0xNzc9ZnRyYWNlX2Z1bmNfdCBmdHJhY2VfY2FsbF9kZXN0ID0gZnRyYWNlX3N0dWI7XG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYzoxNzg6aW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmMtMTc5LXtcbi0tXG5hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jPTIzNj1pbnQgZnRyYWNlX21ha2VfY2FsbChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYy0yNDMtXG5hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jOjI0NDppbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpXG5hcmNoL3MzOTAva2VybmVsL2Z0cmFjZS5jLTI0NS17XG4tLVxuYXJjaC9zaC9rZXJuZWwvZnRyYWNlLmM9MTkyPXN0YXRpYyBpbnQgZnRyYWNlX21vZGlmeV9jb2RlKHVuc2lnbmVkIGxvbmcgaXAsIHVuc2lnbmVkIGNoYXIgKm9sZF9jb2RlLFxuLS1cbmFyY2gvc2gva2VybmVsL2Z0cmFjZS5jLTIyMS1cbmFyY2gvc2gva2VybmVsL2Z0cmFjZS5jOjIyMjppbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpXG5hcmNoL3NoL2tlcm5lbC9mdHJhY2UuYy0yMjMte1xuLS1cbmFyY2gvc3BhcmMva2VybmVsL2Z0cmFjZS5jPTY2PWludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi0tXG5hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYy03NS1cbmFyY2gvc3BhcmMva2VybmVsL2Z0cmFjZS5jOjc2OmludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYylcbmFyY2gvc3BhcmMva2VybmVsL2Z0cmFjZS5jLTc3LXtcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmM9MTgwPWludCBmdHJhY2VfbW9kaWZ5X2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBvbGRfYWRkcixcbi0tXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMtMTg2LVxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jOjE4NzppbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMtMTg4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYzMDcKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBBcm02NCBGdHJhY2UgQ2hhbmdlcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgYXJjaC9hcm02NC9rZXJuZWwvZnRyYWNlLmNgIGRpZmYuIEluaXRpYWxseSwgSSBzYXcgdGhlIGNoYW5nZXMgdG8gYGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmNgLCBidXQgdGhhdCBzZWVtcyBtb3JlIGxpa2UgYSBjb250ZXh0dWFsIGNoYW5nZS4gVGhlIHJlYWwgbWVhdCBvZiB0aGUgdXBkYXRlIGlzIHdpdGhpbiBgZ2V0X2Z0cmFjZV9wbHRgLCB3aGljaCBpcywgaW50ZXJlc3RpbmdseSwgc3RhdGljLiBNeSBpbml0aWFsIGZvY3VzIHdhcyBvbiB0aGUgd3JvbmcgZnVuY3Rpb24sIGl0IHNlZW1zISBBbmQgYWxzbyB0aGUgY2hhbmdlcyB0byBgZnRyYWNlX2ZpbmRfY2FsbGFibGVfYWRkcmAsIGFub3RoZXIgc3RhdGljIGZ1bmN0aW9uLiAKClRoaXMgbWVhbnMgdGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBsb2NhbGl6ZWQgd2l0aGluIHRoZSBmaWxlLCBsaWtlbHkgaW1wYWN0aW5nIGhvdyBQTFQgZW50cmllcyBhcmUgaGFuZGxlZCBzcGVjaWZpY2FsbHkgZm9yIEZ0cmFjZSB3aXRoaW4gdGhpcyBhcmNoaXRlY3R1cmUuIFRoZSBgZ2V0X2Z0cmFjZV9wbHRgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkuIExldCBtZSBxdWlja2x5IHNoaWZ0IG15IGZvY3VzIHRvIGhvdyBQTFQgZW50cmllcyBhcmUgZW1pdHRlZC4gSSB3b25kZXIgaWYgdGhpcyBhZmZlY3RzIGhvdyB0aGVzZSBmdW5jdGlvbnMgaW50ZXJmYWNlIHdpdGggYG1vZHVsZV9lbWl0X3BsdF9lbnRyeWAsIG9yIHJlbGF0ZWQgZnVuY3Rpb25zLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyB1c2VkIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnU2NCBtb2R1bGVfZW1pdF9wbHRfZW50cnkmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaD0xNj1zdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMge1xuLS1cbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmgtMjItXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oOjIzOnU2NCBtb2R1bGVfZW1pdF9wbHRfZW50cnkoc3RydWN0IG1vZHVsZSAqbW9kLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaC0yNC1cdFx0XHQgIHZvaWQgKmxvYywgY29uc3QgRWxmNjRfUmVsYSAqcmVsYSxcbi0tXG5hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jPTQxPXN0YXRpYyBib29sIHBsdF9lbnRyaWVzX2VxdWFsKGNvbnN0IHN0cnVjdCBwbHRfZW50cnkgKmEsXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYy02OC1cbmFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmM6Njk6dTY0IG1vZHVsZV9lbWl0X3BsdF9lbnRyeShzdHJ1Y3QgbW9kdWxlICptb2QsIEVsZjY0X1NoZHIgKnNlY2hkcnMsXG5hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jLTcwLVx0XHRcdCAgdm9pZCAqbG9jLCBjb25zdCBFbGY2NF9SZWxhICpyZWxhLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzAzMQoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDMyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSBpbW1lZGlhdGUgdGhvdWdodHMsIGFzIEkgdW5kZXJzdGFuZCB0aGUgc2l0dWF0aW9uOgoKKipSZWZsZWN0aW5nIG9uIENvZGUgRXhwb3J0IGFuZCBNb2RpZmljYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBzZWVpbmcgdGhhdCBgbW9kdWxlX2VtaXRfcGx0X2VudHJ5YCBpcyBleHBvc2VkIGdsb2JhbGx5LiBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgcG9pbnQgdG8gbm90ZSBpbW1lZGlhdGVseSDigJMgaXQmIzM5O3MgZ29pbmcgdG8gYmUgYWNjZXNzaWJsZSBvdXRzaWRlIGl0cyBpbnRlbmRlZCBzY29wZSwgd2hpY2ggYWx3YXlzIGludHJvZHVjZXMgcG90ZW50aWFsIHJpc2tzIGFuZCBkZXNpZ24gY29uc2lkZXJhdGlvbnMuIEkmIzM5O2xsIG5lZWQgdG8gcmVtZW1iZXIgdG8gY2hlY2sgaG93IHRoYXQgZXhwb3J0IGFmZmVjdHMgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlIGFuZCBpZiBpdCB3YXMgZG9uZSBpbnRlbnRpb25hbGx5LiBJIHNob3VsZCBhbHNvIHNlZSB3aGVyZSBpdCBpcyB1c2VkLgoKVGhlbiB0aGVyZSBpcyB0aGUgbW9kaWZpY2F0aW9uIHRvIGBtb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnBgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGN1cnJlbnQgY2hhbmdlcyBhcmUgbm90IGlzb2xhdGVkLCBzbyB0aGUgaW1wYWN0IGlzIGxhcmdlciB0aGFuIGp1c3Qgb25lIGFyZWEuIEnigJlsbCBiZSBjaGVja2luZyB0aGUgaW50ZXJkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGNsb3NlbHkgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjaGFuZ2UgcHJvcGFnYXRlcy4gVGhpcyBtaWdodCBiZSBhIHN5bXB0b20gb2YgYSBsYXJnZXIgcmVmYWN0b3IsIG9yIGEgdGFyZ2V0ZWQgZml4LCBidXQgZWl0aGVyIHdheSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlIGFuZCBpZiB0aGUgaW50ZW5kZWQgcHVycG9zZSBvZiB0aGUgY29kZSBpcyBzdGlsbCB2YWxpZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnU2NCBtb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnAmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaD0yMz11NjQgbW9kdWxlX2VtaXRfcGx0X2VudHJ5KHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycyxcbi0tXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oLTI2LVxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaDoyNzp1NjQgbW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwKHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycyxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmgtMjgtXHRcdFx0XHR2b2lkICpsb2MsIHU2NCB2YWwpO1xuLS1cbmFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmM9Njk9dTY0IG1vZHVsZV9lbWl0X3BsdF9lbnRyeShzdHJ1Y3QgbW9kdWxlICptb2QsIEVsZjY0X1NoZHIgKnNlY2hkcnMsXG4tLVxuYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYy05OS0jaWZkZWYgQ09ORklHX0FSTTY0X0VSUkFUVU1fODQzNDE5XG5hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jOjEwMDp1NjQgbW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwKHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycyxcbmFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmMtMTAxLVx0XHRcdFx0dm9pZCAqbG9jLCB1NjQgdmFsKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzYyOAoJCQkJCQkJb3V0cHV0OiAxOAoJCQkJCQkJdGhvdWdodHM6IDI1NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEFSTTY0IE1vZHVsZSBFeGVjdXRpb24gTGFuZHNjYXBlKioKCk9rYXksIGFmdGVyIGEgcXVpY2sgc2NhbiwgYG1vZHVsZV9lbWl0X3BsdF9lbnRyeWAsIGBtb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnBgLCBgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9uc2AsIGBleGVjbWVtX3NwbGl0YCwgYW5kIGBleGVjbWVtX2FsbG9jX3J3YCBhcmUgdGhlIGtleSBhcmVhcyB0byBpbnZlc3RpZ2F0ZSBmdXJ0aGVyLiBUaG9zZSBzeW1ib2xzIHNlZW0gY2VudHJhbCB0byB0aGUgZXhlY3V0aW9uIGZsb3csIGVzcGVjaWFsbHkgY29uY2VybmluZyBQTFRzIGFuZCBtZW1vcnkgYWxsb2NhdGlvbi4KCk5vdywgbGV0JiMzOTtzIGxvb2sgYXQgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBgQVJDSF9IQVNfRVhFQ01FTV9ST1hgIGJlaW5nIHNlbGVjdGVkIGJ5IGBBUk02NGAgaXMgdGhlIGZpcnN0IHRoaW5nIHRvIG5vdGUuIFRoZSBjb2RlIGluIGBhcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jYCBpcyBjbGVhcmx5IGxpbmtlZCB0byBgQ09ORklHX0RZTkFNSUNfRlRSQUNFYCwgYW5kIHRoZSBzYW1lIGNvbmZpZyBhbHNvIHNob3dzIHVwIGluIGBhcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuY2AuIFRoZSBgQ09ORklHX0VYRUNNRU1gIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgc3VyZmFjZXMgaW4gYGFyY2gvYXJtNjQvbW0vaW5pdC5jYC4gSW50ZXJlc3RpbmcsIGFuZCBgYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jYCBkb2VzbiYjMzk7dCBleHBsaWNpdGx5IHJlbHkgb24gaWZkZWZzIGJ1dCBjYWxscyBgc3lzdGVtX3N1cHBvcnRzX2JibWwyX25vYWJvcnQoKWAuCgpCYXNlZCBvbiB0aGlzLCBteSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGVuYWJsZSBgRVhFQ01FTWAsIGBEWU5BTUlDX0ZUUkFDRWAsIGFuZCBgTU9EVUxFU2AuIEhvd2V2ZXIsIHdhaXQgYSBtaW51dGUsIGBFWEVDTUVNYCBpcyBhIGNvbmZpZ3VyYWJsZSBvcHRpb24uIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgd2hldGhlciBpdCYjMzk7cyB1c2VyLXNlbGVjdGFibGUgb3IgaWYgYW5vdGhlciBvcHRpb24gaXMgYXV0b21hdGljYWxseSBlbmFibGluZyBpdC4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzZWxlY3Rpb24gbG9naWMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O15jb25maWcgRVhFQ01FTSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTE0NTQ9Y29uZmlnIElPTU1VX01NX0RBVEFcbi0tXG5tbS9LY29uZmlnLTE0NTYtXG5tbS9LY29uZmlnOjE0NTc6Y29uZmlnIEVYRUNNRU1cbm1tL0tjb25maWctMTQ1OC1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyOTUKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAzMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipIaWRkZW4gQm9vbCBgRVhFQ01FTWAgLSBDb250ZXh0dWFsIEFuYWx5c2lzKioKCk9rYXksIHNvIHRoZXJlJiMzOTtzIHRoaXMgYEVYRUNNRU1gIHZhcmlhYmxlIOKAkyBpdCYjMzk7cyBoaWRkZW4sIHdoaWNoIGFsd2F5cyBwaXF1ZXMgbXkgaW50ZXJlc3QuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gZmlndXJlIG91dCAqd2h5KiBpdCYjMzk7cyBoaWRkZW4gYW5kIGhvdyBpdCYjMzk7cyBiZWluZyB1c2VkLiBUaGUgZmFjdCB0aGF0IGl0JiMzOTtzIGEgYm9vbCBzdWdnZXN0cyBpdCYjMzk7cyBsaWtlbHkgYSBmbGFnLCBhbiBvbi9vZmYgc3dpdGNoIGZvciBzb21lIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkuIEdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBrZXJuZWwgaW50ZXJuYWxzLCBteSBmaXJzdCB0aG91Z2h0IGdvZXMgdG8gd2hlcmUgdGhpcyBmbGFnIGlzIHByb2JhYmx5IHNldC4gSXQmIzM5O3MgYWxtb3N0IGNlcnRhaW5seSByZWxhdGVkIHRvIGhvdyB3ZSBoYW5kbGUgZXhlY3V0YWJsZSBtZW1vcnkgd2l0aGluIHRoZSBrZXJuZWwuCgpDb25zaWRlcmluZyB0aGUgdXN1YWwgc3VzcGVjdHMsIG15IG1pbmQgaW1tZWRpYXRlbHkganVtcHMgdG8gYE1PRFVMRVNgLiBUaGUgbG9hZGluZyBhbmQgbWFuYWdlbWVudCBvZiBrZXJuZWwgbW9kdWxlcywgd2l0aCB0aGVpciBkeW5hbWljYWxseSBhbGxvY2F0ZWQgYW5kIGV4ZWN1dGFibGUgY29kZSBzZWN0aW9ucywgaXMgYSBsaWtlbHkgY2FuZGlkYXRlLiBUaGVuIGFnYWluLCBgS1BST0JFU2AgYWxzbyBjb21lIHRvIG1pbmQuIFRoZXNlIGludm9sdmUgaW5qZWN0aW5nIHByb2JlcyBpbnRvIHJ1bm5pbmcga2VybmVsIGNvZGUsIHdoaWNoIG9mdGVuIG1lYW5zIG1vZGlmeWluZyBleGVjdXRhYmxlIG1lbW9yeSBhdCBydW50aW1lLiBBbmQgZmluYWxseSwgb2YgY291cnNlLCB0aGVyZSYjMzk7cyBgQlBGX0pJVGAsIHdoZXJlIHdlJiMzOTtyZSBjb21waWxpbmcgYW5kIGluamVjdGluZyBCUEYgY29kZSwgdmVyeSBsaWtlbHkgaW52b2x2aW5nIGV4ZWN1dGFibGUgbWVtb3J5IHJlZ2lvbnMgYXMgd2VsbC4gSSYjMzk7bSB3aWxsaW5nIHRvIGJldCBpdCYjMzk7cyBiZWluZyB0b2dnbGVkIGJ5IG9uZSBvZiB0aGVzZSwgb3IgbWF5YmUgYWxsIG9mIHRoZW0sIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRob3NlIGFyZWFzIHRvIHVuZGVyc3RhbmQgdGhlIGV4YWN0IGNvbmRpdGlvbnMgdGhhdCBzZXQgdGhpcyBwYXJ0aWN1bGFyIGZsYWcuIEl0JiMzOTtzIHRpbWUgdG8gY2hlY2sgdGhlIGNvbmZpZyBvcHRpb25zIGFuZCBhc3NvY2lhdGVkIGNvZGUgcGF0aHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBFWEVDTUVNJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvS2NvbmZpZz0xMTc9Y29uZmlnIEtQUk9CRVNcbi0tXG5hcmNoL0tjb25maWctMTIwLVx0c2VsZWN0IEtBTExTWU1TXG5hcmNoL0tjb25maWc6MTIxOlx0c2VsZWN0IEVYRUNNRU1cbmFyY2gvS2NvbmZpZy0xMjItXHRzZWxlY3QgTkVFRF9UQVNLU19SQ1Vcbi0tXG5hcmNoL3g4Ni9LY29uZmlnPTIzPWNvbmZpZyBYODZfNjRcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTM3LVx0c2VsZWN0IFpPTkVfRE1BMzJcbmFyY2gveDg2L0tjb25maWc6Mzg6XHRzZWxlY3QgRVhFQ01FTSBpZiBEWU5BTUlDX0ZUUkFDRVxuYXJjaC94ODYvS2NvbmZpZy0zOS1cdHNlbGVjdCBBQ1BJX01SUk0gaWYgQUNQSVxuLS1cbmFyY2gveDg2L0tjb25maWc9MjY1MT1jb25maWcgTUlUSUdBVElPTl9JVFNcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTI2NTQtXHRkZXBlbmRzIG9uIE1JVElHQVRJT05fUkVUUE9MSU5FIFx1MDAyNlx1MDAyNiBNSVRJR0FUSU9OX1JFVEhVTktcbmFyY2gveDg2L0tjb25maWc6MjY1NTpcdHNlbGVjdCBFWEVDTUVNXG5hcmNoL3g4Ni9LY29uZmlnLTI2NTYtXHRkZWZhdWx0IHlcbi0tXG5rZXJuZWwvYnBmL0tjb25maWc9NDI9Y29uZmlnIEJQRl9KSVRcbi0tXG5rZXJuZWwvYnBmL0tjb25maWctNDUtXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxua2VybmVsL2JwZi9LY29uZmlnOjQ2Olx0c2VsZWN0IEVYRUNNRU1cbmtlcm5lbC9icGYvS2NvbmZpZy00Ny1cdGhlbHBcbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9Mj1tZW51Y29uZmlnIE1PRFVMRVNcbi0tXG5rZXJuZWwvbW9kdWxlL0tjb25maWctNC1cdG1vZHVsZXNcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZzo1Olx0c2VsZWN0IEVYRUNNRU1cbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy02LVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTA1MwoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDgxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgQVJNNjQgTW9kdWxlIGFuZCBFeGVjdXRhYmxlIE1lbW9yeSBDaGFuZ2VzKioKCkFscmlnaHQsIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBNT0RVTEVTYCBpcyBzZWxlY3RpbmcgYEVYRUNNRU1gLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGhvdyB3ZSBoYW5kbGUgZXhlY3V0YWJsZSBtZW1vcnkgZm9yIG1vZHVsZXMuIENvbnNlcXVlbnRseSwgSSBuZWVkIHRvIGVuc3VyZSB0aGF0IGJvdGggYE1PRFVMRVNgIGFuZCBgRFlOQU1JQ19GVFJBQ0VgIGFyZSBlbmFibGVkLgoKQmV5b25kIHRob3NlIGNvcmUgY29uZmlncywgSSBuZWVkIHRvIGNoZWNrIGZvciBvdGhlciByZWxldmFudCBjb25maWd1cmF0aW9ucy4gVGhlIG1lbnRpb25zIG9mIGBDT05GSUdfS0FTQU5fU1dfVEFHU2AgYW5kIGBDT05GSUdfQVJNNjRfRVJSQVRVTV84NDM0MTlgIHNlZW0gcmVsYXRlZCwgYnV0IGxldCYjMzk7cyBzZWUgaG93IHRoZXkgaW50ZWdyYXRlLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIGBNT0RVTEVTYCBhbmQgYERZTkFNSUNfRlRSQUNFYC4KCk5vdywgbGV0JiMzOTtzIGRpc3NlY3QgdGhlIGNoYW5nZXMgYXQgdGhlIGNvZGUgbGV2ZWwuIEkmIzM5O20gc2VlaW5nIHNpZ25pZmljYW50IG1vZGlmaWNhdGlvbnMgYWNyb3NzIHZhcmlvdXMgZmlsZXM6CgoxLiAgYGFyY2gvYXJtNjQvS2NvbmZpZ2Agbm93IGV4cGxpY2l0bHkgc2VsZWN0cyBgQVJDSF9IQVNfRVhFQ01FTV9ST1hgLCBzZXR0aW5nIHRoZSBzdGFnZSBmb3IgcmVhZC1vbmx5IGV4ZWN1dGFibGUgbWVtb3J5LgoyLiAgU2V2ZXJhbCBoZWFkZXIgZmlsZXMgKGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oYCwgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmxkcy5oYCkgYXJlIGNsZWFuaW5nIHVwIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcywgcGFydGljdWxhcmx5IHJlZ2FyZGluZyBGdHJhY2UgdHJhbXBvbGluZXMuCjMuICBUaGUgRnRyYWNlIGNvZGUgKGBhcmNoL2FybTY0L2tlcm5lbC9mdHJhY2UuY2ApIGlzIHNpbXBsaWZ5aW5nIGhvdyB0cmFtcG9saW5lcyBhcmUgaGFuZGxlZCwgbGlrZWx5IHRpZWQgdG8gdGhlIGNoYW5nZXMgaW4gbWVtb3J5IGxheW91dC4KNC4gIFBMVCBnZW5lcmF0aW9uIChgYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuY2ApIGlzIHN0cmVhbWxpbmVkLCByZW1vdmluZyBpbml0aWFsaXphdGlvbi1zcGVjaWZpYyBsb2dpYywgbGlrZWx5IHRvIHN1cHBvcnQgdGhlIG5ldyBgRVhFQ01FTWAgc2VtYW50aWNzLgo1LiAgTW9kdWxlIGluaXRpYWxpemF0aW9uIChgYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmNgKSBhbHNvIHJlbW92ZXMgaW5pdGlhbGl6YXRpb24gbG9naWMgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgLmluaXQudGV4dC5mdHJhY2VfdHJhbXBvbGluZWAsIGFnYWluLCBhbGlnbmluZyB3aXRoIHRoZSBuZXcgYXJjaGl0ZWN0dXJlLgo2LiAgYGFyY2gvYXJtNjQvbW0vaW5pdC5jYCBpcyB3aGVyZSB0aGluZ3MgZ2V0IHJlYWxseSBpbnRlcmVzdGluZy4gYFBBR0VfS0VSTkVMX1JPWGAgYW5kIGBFWEVDTUVNX1JPWF9DQUNIRWAgYXJlIGJlaW5nIHNldCBmb3IgYEVYRUNNRU1fREVGQVVMVGAuIEl0IGlzIGFsc28gYWRkaW5nIGBFWEVDTUVNX01PRFVMRV9EQVRBYCwgd2hpY2ggaW1wbGllcyB0aGF0IGRhdGEgaXMgYWxzbyBhZmZlY3RlZCwgYW5kIGhhbmRsaW5nIGBFWEVDTUVNX05PX0hVR0VfVk1BUGAuIFRoZSBhZGRpdGlvbiBvZiBgZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zYCBpcyBub3RhYmxlLgo3LiAgYGFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY2AgaXMgbW9kaWZ5aW5nIGBjaGFuZ2VfbWVtb3J5X2NvbW1vbmAgdG8gYWxsb3cgYFZNX0FMTE9XX0hVR0VfVk1BUGAgbWFwcGluZ3MgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLgo4LiAgSSBzZWUgbmV3IGRlZmluaXRpb25zIGluIGBpbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaGAgd2l0aCB0aGUgYWRkaXRpb24gb2YgYEVYRUNNRU1fTk9fSFVHRV9WTUFQYCBhbmQgYGV4ZWNtZW1fc3BsaXRgLCB3aGljaCBzdWdnZXN0cyB0aGlzIHNwbGl0IGlzIGtleSB0byB0aGUgbmV3IGFyY2hpdGVjdHVyZS4KOS4gIEEgcmVvcmRlcmluZyBpbiBgaW5jbHVkZS9saW51eC9tb2R1bGUuaGAgKGBNT0RfVEVYVGAgYW5kIGBNT0RfREFUQWApIGlzIGEgcmVkIGZsYWcuCjEwLiBga2VybmVsL21vZHVsZS9tYWluLmNgIGlzIGFsbG9jYXRpbmcgYE1PRF9JTklUX1RFWFRgIGRpZmZlcmVudGx5LCBzcGVjaWZpY2FsbHkgc3BsaXR0aW5nIGl0IGZyb20gYE1PRF9URVhUYCB3aGVuIGBleGVjbWVtX2lzX3JveGAgaXMgdHJ1ZS4gVGhpcyByZWluZm9yY2VzIHRoYXQgc3BsaXR0aW5nIGZ1bmN0aW9uYWxpdHkuCjExLiBgbW0vZXhlY21lbS5jYCBoYXMgY2hhbmdlcyB0byB0aGUgYGV4ZWNtZW1fY2FjaGVfcG9wdWxhdGVfYWxsb2NgIGZ1bmN0aW9uIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGV4ZWNtZW1fY2FjaGVfc3BsaXRgIGFuZCBgZXhlY21lbV9zcGxpdGAuIFRoaXMgcmVpbmZvcmNlcyB0aGUgY29yZSBjaGFuZ2UuCgpUaGUgcHJhY3RpY2FsIGltcGFjdCBvZiBhbGwgdGhpcyBpcyBwcmV0dHkgc3Vic3RhbnRpYWwuIE1vZHVsZSBsb2FkaW5nIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBhcmUgY2xlYXJseSB1bmRlcmdvaW5nIGEgdHJhbnNmb3JtYXRpb24gb24gQVJNNjQsIGFuZCB0aGUgRnRyYWNlIHRyYW1wb2xpbmUgaGFuZGxpbmcgZm9yIG1vZHVsZXMgaXMgYmVpbmcgdXBkYXRlZCBpbiB0YW5kZW0uCgpUbyBmb2N1cyBteSBhbmFseXNpcywgSSYjMzk7bSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBmb2xsb3dpbmcgc3ltYm9sczoKCiogICBgZXhlY21lbV9zcGxpdGAgLSBUaGlzIGlzIGNsZWFybHkgYSBjZW50cmFsIGZ1bmN0aW9uLCBsaWtlbHkgcmVzcG9uc2libGUgZm9yIHNwbGl0dGluZyBleGVjdXRhYmxlIG1lbW9yeSByZWdpb25zLgoqICAgYG1vZHVsZV9lbWl0X3BsdF9lbnRyeWAsIGBtb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnBgLCBhbmQgYG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnNgIC0gVGhlc2UgYXJlIGltcG9ydGFudCBiZWNhdXNlIHRoZXkgYXJlIHRoZSBsb3ctbGV2ZWwgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkIHRvIGFjY29tbW9kYXRlIHRoZSBuZXcgbWVtb3J5IHN0cnVjdHVyZS4KCk15IGltbWVkaWF0ZSBhY3Rpb24gd2lsbCBiZSB0byBlbmFibGUgYE1PRFVMRVNgIGFuZCBgRFlOQU1JQ19GVFJBQ0VgLgoKRmluYWxseSwgc2luY2UgdGhlIGNvZGUgcmVmZXJlbmNlcyBgQ09ORklHX0FSTTY0X0VSUkFUVU1fODQzNDE5YCwgSSBzaG91bGQgdmVyaWZ5IGlmIGBtb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnBgIGlzIGFjdHVhbGx5IGNvbXBpbGVkIGFuZCBob3cgdGhlIGNvbmZpZ3VyYXRpb24gYWZmZWN0cyB0aGlzIGZ1bmN0aW9uLiBUaGlzIG1pZ2h0IGluZmx1ZW5jZSBob3cgSSBhcHByb2FjaCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gYW5kIGZ0cmFjZSBmdW5jdGlvbmFsaXR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteY29uZmlnIEFSTTY0X0VSUkFUVU1fODQzNDE5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQvS2NvbmZpZz02MDM9Y29uZmlnIEFSTTY0X0VSUkFUVU1fODQ1NzE5XG4tLVxuYXJjaC9hcm02NC9LY29uZmlnLTYyMy1cbmFyY2gvYXJtNjQvS2NvbmZpZzo2MjQ6Y29uZmlnIEFSTTY0X0VSUkFUVU1fODQzNDE5XG5hcmNoL2FybTY0L0tjb25maWctNjI1LVx0Ym9vbCBcJiMzNDtDb3J0ZXgtQTUzOiA4NDM0MTk6IEEgbG9hZCBvciBzdG9yZSBtaWdodCBhY2Nlc3MgYW4gaW5jb3JyZWN0IGFkZHJlc3NcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5ODAKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIHRoZSBBUk02NCBDb25maWd1cmF0aW9uIERlZmF1bHQqKgoKQWxyaWdodCwgc28gdGhlIHN5c3RlbSBiZWhhdmlvciBpcyBkZWZhdWx0aW5nIHRvIGB5YCBpZiBgQVJNNjRgIGlzIHNldC4uLiB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoZSBsb2dpYyBiZWhpbmQgdGhhdC4gSXQmIzM5O3Mgbm90IGltbWVkaWF0ZWx5IG9idmlvdXMgdG8gbWUgd2h5IHRoYXQgc2hvdWxkIGJlIHRoZSBjYXNlLCBhbmQgSSB3YW50IHRvIHZlcmlmeSB0aGUgc3BlY2lmaWMgY29uZGl0aW9ucyB1bmRlciB3aGljaCB0aGF0IGRlZmF1bHQgaXMgdHJpZ2dlcmVkLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvZGUsIHRoZSBjb25maWd1cmF0aW9uIGZpbGVzLCBvciB3aGF0ZXZlciBjb250ZXh0IGRlZmluZXMgdGhpcyBiZWhhdmlvci4gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIHRoZSBiZWhhdmlvciBpcyBleHBlY3RlZC4gSXMgdGhpcyBkZWZhdWx0IGEgaGFyZGNvZGVkIHNldHRpbmcsIG9yIGlzIGl0IGRlcml2ZWQgYmFzZWQgb24gc29tZSBvdGhlciBjb25kaXRpb24sIGEgYnVpbGQgZmxhZyBwZXJoYXBzPyBJJiMzOTttIGdvaW5nIHRvIHRyYWNrIGRvd24gd2hlcmUgdGhpcyBkZWZhdWx0IGJlaGF2aW9yIGlzIHNldCBhbmQgZW5zdXJlIGl0IGFsaWducyB3aXRoIG91ciBicm9hZGVyIGFyY2hpdGVjdHVyYWwgZ29hbHMgYW5kIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgd2l0aCBvdGhlciBzeXN0ZW1zLiBJIG5lZWQgdG8gZXZhbHVhdGUgaXRzIHJhdGlvbmFsZSwgdG8gc2VlIHdoZXRoZXIgdGhlIGRlc2lnbiBtYWtlcyBzZW5zZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL2FybTY0L0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MjQsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYyNDpcdGNvbmZpZyBBUk02NF9FUlJBVFVNXzg0MzQxOVxuIDYyNTpcdFx0Ym9vbCBcJiMzNDtDb3J0ZXgtQTUzOiA4NDM0MTk6IEEgbG9hZCBvciBzdG9yZSBtaWdodCBhY2Nlc3MgYW4gaW5jb3JyZWN0IGFkZHJlc3NcJiMzNDtcbiA2MjY6XHRcdGRlZmF1bHQgeVxuIDYyNzpcdFx0aGVscFxuIDYyODpcdFx0ICBUaGlzIG9wdGlvbiBsaW5rcyB0aGUga2VybmVsIHdpdGggJiMzOTstLWZpeC1jb3J0ZXgtYTUzLTg0MzQxOSYjMzk7IGFuZFxuIDYyOTpcdFx0ICBlbmFibGVzIFBMVCBzdXBwb3J0IHRvIHJlcGxhY2UgY2VydGFpbiBBRFJQIGluc3RydWN0aW9ucywgd2hpY2ggY2FuXG4gNjMwOlx0XHQgIGNhdXNlIHN1YnNlcXVlbnQgbWVtb3J5IGFjY2Vzc2VzIHRvIHVzZSBhbiBpbmNvcnJlY3QgYWRkcmVzcyBvblxuIDYzMTpcdFx0ICBDb3J0ZXgtQTUzIHBhcnRzIHVwIHRvIHIwcDQuXG4gNjMyOlx0XG4gNjMzOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIyIDE0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIxNDI3CgkJCQkJCQlvdXRwdXQ6IDQ0CgkJCQkJCQl0aG91Z2h0czogMjIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgU3ltYm9sIENoYW5nZXMqKgoKT2theSwgc28gdGhlIGRlZmF1bHQgcmVzcG9uc2UgaXMgJiMzOTt5JiMzOTssIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGNoYW5nZXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYGV4ZWNtZW1fYWxsb2NfcndgIGluIGBtbS9leGVjbWVtLmNgLCBidXQgaXQgaGFzbiYjMzk7dCBiZWVuIGRpcmVjdGx5IG1vZGlmaWVkLiBIbW0sIGl0JiMzOTtzIGNhbGxlZCBieSBgbW9kdWxlX21lbW9yeV9hbGxvY2AsIHdoaWNoIGlzIGludGVyZXN0aW5nLiBXYWl0LCB0aGUgYWN0dWFsIG1vZGlmaWNhdGlvbiBpcyBpbiBgZXhlY21lbV9jYWNoZV9wb3B1bGF0ZV9hbGxvY2AsIGJ1dCB0aGF0JiMzOTtzIGEgc3RhdGljIGZ1bmN0aW9uLiBBbHNvIHN0YXRpYyBpcyBgZXhlY21lbV9jYWNoZV9zcGxpdGAuIExvb2tzIGxpa2UgYGV4ZWNtZW1fc3BsaXRgIGlzIGV4cG9ydGVkIGFuZCBoYXMgYmVlbiBtb2RpZmllZCwgdGhhdCYjMzk7cyBpbXBvcnRhbnQuIGBtb2R1bGVfbWVtb3J5X2FsbG9jYCBpdHNlbGYgaXMgYWxzbyBzdGF0aWMuCgpBbmQgYGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmNgIGxvb2tzIHVudG91Y2hlZCwgaXQmIzM5O3MgdGhlIGNvbnRleHQgdGhhdCYjMzk7cyBjaGFuZ2VkLiBgZ2V0X2Z0cmFjZV9wbHRgIGlzIGFub3RoZXIgc3RhdGljIGZ1bmN0aW9uLCBzbyBub3QgYXMgaW1wb3J0YW50IGhlcmUuCgpBbHJpZ2h0LCB3aXRoIHRoYXQgaW4gbWluZCwgdGhlIGtleSBzeW1ib2xzIEkgbmVlZCB0byBmb2N1cyBvbiBhcmU6CgoqICAgYGV4ZWNtZW1fc3BsaXRgIC0gZGVmaW5pdGVseSBuZWVkcyBhIGNsb3NlciBsb29rCiogICBgbW9kdWxlX2VtaXRfcGx0X2VudHJ5YCAtIGxpa2VseSByZWxhdGVkIHRvIHRoZSBQTFQgKFByb2NlZHVyZSBMaW5rYWdlIFRhYmxlKQoqICAgYG1vZHVsZV9lbWl0X3ZlbmVlcl9mb3JfYWRycGAgLSB0aGlzIHNvdW5kcyBhcmNoaXRlY3R1cmUtc3BlY2lmaWMsIEFEUlAgaXMgbGlrZWx5IGluc3RydWN0aW9uIHJlbGF0ZWQKKiAgIGBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zYCAtIFRoaXMgaXMgaW50ZXJlc3RpbmcuCgpMZXQmIzM5O3MgcXVpY2tseSBkb3VibGUtY2hlY2sgdGhhdCBgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9uc2AgaW4gYGFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmNgLiBHb3R0YSBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDteaW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmM9Mjc4PXN0YXRpYyBjb25zdCBpbnQgZnRyYWNlX3BsdHMgPSBJU19FTkFCTEVEKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkgPyBOUl9GVFJBQ0VfUExUUyA6IDA7XG5hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jLTI3OS1cbmFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmM6MjgwOmludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICplaGRyLCBFbGZfU2hkciAqc2VjaGRycyxcbmFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmMtMjgxLVx0XHRcdCAgICAgIGNoYXIgKnNlY3N0cmluZ3MsIHN0cnVjdCBtb2R1bGUgKm1vZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjIyMDQKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91JiMzOTt2ZSBkZXNjcmliZWQ6CgoqKkNvbmZpcm1hdGlvbiBhbmQgSW1tZWRpYXRlIEFjdGlvbioqCgpBbHJpZ2h0LCB5ZXAsIHRoYXQmIzM5O3MgZGVmaW5pdGVseSB0aGUgc3BvdC4gTm8gbmVlZCB0byBzZWNvbmQtZ3Vlc3MgbXlzZWxmIG9uIHRoYXQuIE5vdywgbGV0JiMzOTtzIGRpdmUgcmlnaHQgaW50byB0aGUgY29kZSBhbmQgdGFrZSBhIGNsb3NlciBsb29rIGF0IGBleGVjbWVtX3NwbGl0YCB3aXRoaW4gYG1tL2V4ZWNtZW0uY2AuIFRoYXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bGx5LiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XnZvaWQgXFwqZXhlY21lbV9zcGxpdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2V4ZWNtZW0uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9leGVjbWVtLmM9NTQyPWJvb2wgZXhlY21lbV9pc19yb3goZW51bSBleGVjbWVtX3R5cGUgdHlwZSlcbi0tXG5tbS9leGVjbWVtLmMtNTQ2LVxubW0vZXhlY21lbS5jOjU0Nzp2b2lkICpleGVjbWVtX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpXG5tbS9leGVjbWVtLmMtNTQ4LXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI0NTYKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTWVtb3J5IFRyYXBwaW5nIEluc3RydWN0aW9ucyoqCgpZZXMsIHRoYXQgY29uZmlybXMgaXQg4oCTIHRoZSBpc3N1ZSBJJiMzOTttIGNoYXNpbmcgaXMgZGVmaW5pdGVseSBwcmVzZW50LiBOb3csIHRvIGRpZyBpbiBhbmQgdW5kZXJzdGFuZCAqaG93KiBpdCYjMzk7cyBiZWluZyBoYW5kbGVkLCBJJiMzOTtsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnNgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gaGVhZGluZyBzdHJhaWdodCB0byBpdHMgaW1wbGVtZW50YXRpb24gaW4gYGFyY2gvYXJtNjQvbW0vaW5pdC5jYC4gVGhpcyBmdW5jdGlvbiBpcyBsaWtlbHkgcmVzcG9uc2libGUgZm9yIGluamVjdGluZyB0aG9zZSB0cmFwcGluZyBpbnN0cnVjdGlvbnMgd2hlbiBtZW1vcnkgcmVnaW9ucyBhcmUgbWFya2VkIGFzIGV4ZWN1dGUtb25seSwgb3Igd2hlbiB0aGUgc3lzdGVtIGRldGVjdHMgbWVtb3J5IHJlZ2lvbnMgYXJlIGV4ZWN1dGFibGUsIGFuZCBhcyBzdWNoIEkgbmVlZCB0byBlbnN1cmUgaXQmIzM5O3MgYmVoYXZpb3IuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgc2V0cyB0aGVzZSB0cmFwcywgYW5kIHVuZGVyc3RhbmQgaXRzIGFzc3VtcHRpb25zIGFib3V0IHRoZSBhcmNoaXRlY3R1cmUgYW5kIG1lbW9yeSBsYXlvdXQuIEZyb20gdGhlcmUsIEkgY2FuIGFuYWx5emUgdGhlIHJvb3QgY2F1c2Ugb2YgdGhlIGVycm9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNDo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedm9pZCBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2FybTY0L21tL2luaXQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL2FybTY0L21tL2luaXQuYz01MDU9c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuLS1cbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTU2OC1cbmFyY2gvYXJtNjQvbW0vaW5pdC5jOjU2OTp2b2lkIGV4ZWNtZW1fZmlsbF90cmFwcGluZ19pbnNucyh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxuYXJjaC9hcm02NC9tbS9pbml0LmMtNTcwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjI4MzgKCQkJCQkJCW91dHB1dDogMTkwCgkJCQkJCQl0aG91Z2h0czogNDcxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBBUk02NCBFeGVjdXRhYmxlIE1lbW9yeSBQYXRjaCoqCgpPa2F5LCBJJiMzOTt2ZSBnb3QgaXQuIFRoZXJlJiMzOTtzIGEgY2xlYXIgZm9jdXMgb24gYSBwYXJ0aWN1bGFyIGNvZGUgcGF0aCBoZXJlLCBhbmQgdGhlIGFzc29jaWF0ZWQgc3ltYm9sIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC4KCkZpcnN0LCBsZXQgbWUgY29uZmlybSB0aGUgZnVuY3Rpb246IGBjaGFuZ2VfbWVtb3J5X2NvbW1vbmAgaW4gYGFyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY2AuIFllcywgaXQmIzM5O3Mgc3RhdGljLCBhcyBleHBlY3RlZC4KCk5vdywgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCB0aGUgY29yZSBmb2N1cyBzeW1ib2xzIGFyZTogYGV4ZWNtZW1fc3BsaXRgLCBgbW9kdWxlX2VtaXRfcGx0X2VudHJ5YCwgYG1vZHVsZV9lbWl0X3ZlbmVlcl9mb3JfYWRycGAsIGBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zYCwgYW5kIGBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnNgLiBUaGVzZSByZWFsbHkgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHdhdGNoLgoKTmV4dCwgdGhlIGNvbmZpZ3MuIEkgaW5pdGlhbGx5IHNhdyBgQVJNNjRfRVJSQVRVTV84NDM0MTlgLCBidXQgdGhhdCYjMzk7cyBhcm02NCBzcGVjaWZpYywgYW5kIHRoZSBwcm9tcHQgc2F5cyB0byBleGNsdWRlIGFueSBgQ09ORklHX2AgcHJlZml4IGZyb20gdGhlIGFuc3dlciwgc28gbGV0JiMzOTtzIHN0aWNrIHdpdGggdGhlIGZvbGxvd2luZywgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXRjaDogYE1PRFVMRVNgIGFuZCBgRFlOQU1JQ19GVFJBQ0VgLgoKTm93LCByZWdhcmRpbmcgYEVYRUNNRU1gLCBJIHJlY2FsbCBpdCYjMzk7cyBhIGhpZGRlbiBib29sLCBtYWtpbmcgaXQgdW5hYmxlIHRvIGJlIGV4cGxpY2l0bHkgZW5hYmxlZCBpbiBgbWFrZSBkZWZjb25maWdgLiBIb3dldmVyLCBpdCYjMzk7cyBzZWxlY3RlZCBieSBgTU9EVUxFU2AuIFRoZXJlZm9yZSwgYE1PRFVMRVNgIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGFjdGl2YXRlIHRoYXQgYXNwZWN0IG9mIHRoZSBjaGFuZ2VzLgoKTGV0JiMzOTtzIHF1aWNrbHkgcmVjYXA6IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBBUkNIX0hBU19FWEVDTUVNX1JPWGAgZm9yIGFybTY0LiBJdCBpcyBtb2RpZnlpbmcgaG93IG1vZHVsZSBtZW1vcnkgaXMgYWxsb2NhdGVkLCBzcGVjaWZpY2FsbHksIGJ5IHNwbGl0dGluZyBgTU9EX0lOSVRfVEVYVGAgZnJvbSBgTU9EX1RFWFRgIHdoZW4gYGV4ZWNtZW1faXNfcm94YCBpcyB0cnVlLiAgSXQgaXMgYWxzbyBtb2RpZnlpbmcgZnRyYWNlIHRyYW1wb2xpbmVzIGFuZCBQTFQgZ2VuZXJhdGlvbiBmb3IgbW9kdWxlcyBvbiBhcm02NCB0byBhY2NvbW1vZGF0ZSB0aGVzZSBjaGFuZ2VzLiBUaGUgY2hhbmdlcyBhcmUgZnVuY3Rpb25hbCBtb2RpZmljYXRpb25zIHRvIHZpdGFsIGtlcm5lbCBsb2dpYyAobW9kdWxlIGxvYWRpbmcsIGV4ZWN1dGFibGUgbWVtb3J5IGFsbG9jYXRpb24sIGFuZCBmdHJhY2UpIGFuZCBhcmUgbGlrZWx5IHRyaWdnZXJlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuCgpUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4KCk15IGZpbmFsaXplZCB1bmRlcnN0YW5kaW5nIHRoZW4gaXM6CgpGb2N1c1N5bWJvbHM6Ci0gYGV4ZWNtZW1fc3BsaXRgCi0gYG1vZHVsZV9lbWl0X3BsdF9lbnRyeWAKLSBgbW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwYAotIGBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zYAotIGBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnNgCgpFbmFibGVDb25maWdzOgotIGBNT0RVTEVTYAotIGBEWU5BTUlDX0ZUUkFDRWAKClJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01PRFVMRVMmIzM0OywKICAgICYjMzQ7RFlOQU1JQ19GVFJBQ0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtleGVjbWVtX3NwbGl0JiMzNDssCiAgICAmIzM0O21vZHVsZV9lbWl0X3BsdF9lbnRyeSYjMzQ7LAogICAgJiMzNDttb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnAmIzM0OywKICAgICYjMzQ7bW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyYjMzQ7LAogICAgJiMzNDtleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgQVJDSF9IQVNfRVhFQ01FTV9ST1ggZm9yIGFybTY0LCBtb2RpZnlpbmcgaG93IG1vZHVsZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGJ5IHNwbGl0dGluZyBNT0RfSU5JVF9URVhUIGZyb20gTU9EX1RFWFQgd2hlbiBleGVjbWVtX2lzX3JveCBpcyB0cnVlLiBJdCBhbHNvIHVwZGF0ZXMgZnRyYWNlIHRyYW1wb2xpbmVzIGFuZCBQTFQgZ2VuZXJhdGlvbiBmb3IgbW9kdWxlcyBvbiBhcm02NCB0byBhY2NvbW1vZGF0ZSB0aGVzZSBjaGFuZ2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIChtb2R1bGUgbG9hZGluZywgZXhlY3V0YWJsZSBtZW1vcnkgYWxsb2NhdGlvbiwgZnRyYWNlKSB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNT0RVTEVTJiMzNDssCiAgICAmIzM0O0RZTkFNSUNfRlRSQUNFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZXhlY21lbV9zcGxpdCYjMzQ7LAogICAgJiMzNDttb2R1bGVfZW1pdF9wbHRfZW50cnkmIzM0OywKICAgICYjMzQ7bW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwJiMzNDssCiAgICAmIzM0O21vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMmIzM0OywKICAgICYjMzQ7ZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBpbnRyb2R1Y2VzIEFSQ0hfSEFTX0VYRUNNRU1fUk9YIGZvciBhcm02NCwgbW9kaWZ5aW5nIGhvdyBtb2R1bGUgbWVtb3J5IGlzIGFsbG9jYXRlZCBieSBzcGxpdHRpbmcgTU9EX0lOSVRfVEVYVCBmcm9tIE1PRF9URVhUIHdoZW4gZXhlY21lbV9pc19yb3ggaXMgdHJ1ZS4gSXQgYWxzbyB1cGRhdGVzIGZ0cmFjZSB0cmFtcG9saW5lcyBhbmQgUExUIGdlbmVyYXRpb24gZm9yIG1vZHVsZXMgb24gYXJtNjQgdG8gYWNjb21tb2RhdGUgdGhlc2UgY2hhbmdlcy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byBjb3JlIGtlcm5lbCBsb2dpYyAobW9kdWxlIGxvYWRpbmcsIGV4ZWN1dGFibGUgbWVtb3J5IGFsbG9jYXRpb24sIGZ0cmFjZSkgdGhhdCBhcmUgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMiAxNDo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIGV4ZWN1dGFibGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgKGBleGVjbWVtYCkgZm9yIGtlcm5lbCBtb2R1bGVzLCBzcGVjaWZpY2FsbHkgY29uc29saWRhdGluZyBtb2R1bGUgdGV4dCBhbmQgaW5pdCB0ZXh0IGFsbG9jYXRpb25zLCBtZXJnaW5nIFBMVCBzZWN0aW9ucyBmb3IgQVJNNjQsIGFuZCBhZGp1c3RpbmcgcGFnZSBhdHRyaWJ1dGVzIGZvciBST1ggKFJlYWQtT25seSBFeGVjdXRlKSBjYWNoZXMuIFRoZXNlIGNoYW5nZXMgZGVhbCB3aXRoIGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCwgcGFnZSBwZXJtaXNzaW9ucywgYW5kIG1vZHVsZSBsb2FkaW5nLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHBhZ2UgZmF1bHRzLCBvciBpbnZhbGlkIGluc3RydWN0aW9uIGV4Y2VwdGlvbnMuIFN1Y2ggaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgc3RhbmRhcmQgcGFnZSBmYXVsdCBoYW5kbGVycywgYW5kIGtlcm5lbCBib290L21vZHVsZSBsb2FkaW5nIHRlc3RzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBzdGFjay9oZWFwIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbGwgYWxsb2NhdGVkIG1vZHVsZSBtZW1vcnkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCAoZS5nLiwgdmlhIGBtZW1zZXRgIGluIGBtb2R1bGVfbWVtb3J5X2FsbG9jYCBvciBgZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zYCkuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBjYzgyYzc3MjA2ZWI5NWFjMWY0ZDQ1YjhmMzVjYmY4ODFjODA2ZTEzCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFNhdCBBdWcgMjIgMTQ6NDg6MjcgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWcKaW5kZXggYjNhZmUwNjg4OTE5Yi4uMDgwYjk3YjBiYmQ1ZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvS2NvbmZpZwpAQCAtMjcsNiAmIzQzOzI3LDcgQEAgY29uZmlnIEFSTTY0CiAJc2VsZWN0IEFSQ0hfSEFTX0RNQV9PUFMgaWYgWEVOCiAJc2VsZWN0IEFSQ0hfSEFTX0RNQV9QUkVQX0NPSEVSRU5UCiAJc2VsZWN0IEFSQ0hfSEFTX0FDUElfVEFCTEVfVVBHUkFERSBpZiBBQ1BJCiYjNDM7CXNlbGVjdCBBUkNIX0hBU19FWEVDTUVNX1JPWAogCXNlbGVjdCBBUkNIX0hBU19GQVNUX01VTFRJUExJRVIKIAlzZWxlY3QgQVJDSF9IQVNfRk9SVElGWV9TT1VSQ0UKIAlzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTApkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmgKaW5kZXggZmI5Yjg4ZWViZWIxNS4uOTMyOGZhZGI0YTk1OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oCkBAIC0xNSwxMSAmIzQzOzE1LDkgQEAgc3RydWN0IG1vZF9wbHRfc2VjIHsKIAogc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljIHsKIAlzdHJ1Y3QgbW9kX3BsdF9zZWMJY29yZTsKLQlzdHJ1Y3QgbW9kX3BsdF9zZWMJaW5pdDsKIAogCS8qIGZvciBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi8KIAlzdHJ1Y3QgcGx0X2VudHJ5CSpmdHJhY2VfdHJhbXBvbGluZXM7Ci0Jc3RydWN0IHBsdF9lbnRyeQkqaW5pdF9mdHJhY2VfdHJhbXBvbGluZXM7CiB9OwogCiB1NjQgbW9kdWxlX2VtaXRfcGx0X2VudHJ5KHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycywKZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmxkcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmgKaW5kZXggMGIzYWFjZDIyYzU5MC4uOTU1NDBlOTU2YjQxOSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmgKQEAgLTEsOCAmIzQzOzEsNSBAQAogU0VDVElPTlMgewogCS5wbHQgMCA6IHsgQllURSgwKSB9Ci0JLmluaXQucGx0IDAgOiB7IEJZVEUoMCkgfQotCS50ZXh0LmZ0cmFjZV90cmFtcG9saW5lIDAgOiB7IEJZVEUoMCkgfQotCS5pbml0LnRleHQuZnRyYWNlX3RyYW1wb2xpbmUgMCA6IHsgQllURSgwKSB9CiAKICNpZmRlZiBDT05GSUdfS0FTQU5fU1dfVEFHUwogCS8qCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jCmluZGV4IDVhMTU1NGE0NDE2MjguLmI1NmRhMjRjMWJlNGYgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jCkBAIC0yNTgsMTcgJiM0MzsyNTgsMTAgQEAgaW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKQogCXJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUocGMsIDAsIG5ldywgZmFsc2UpOwogfQogCi1zdGF0aWMgc3RydWN0IHBsdF9lbnRyeSAqZ2V0X2Z0cmFjZV9wbHQoc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIGFkZHIpCiYjNDM7c3RhdGljIHN0cnVjdCBwbHRfZW50cnkgKmdldF9mdHJhY2VfcGx0KHN0cnVjdCBtb2R1bGUgKm1vZCkKIHsKICNpZmRlZiBDT05GSUdfTU9EVUxFUwotCXN0cnVjdCBwbHRfZW50cnkgKnBsdCA9IE5VTEw7Ci0KLQlpZiAod2l0aGluX21vZHVsZV9tZW1fdHlwZShhZGRyLCBtb2QsIE1PRF9JTklUX1RFWFQpKQotCQlwbHQgPSBtb2QtJmd0O2FyY2guaW5pdF9mdHJhY2VfdHJhbXBvbGluZXM7Ci0JZWxzZSBpZiAod2l0aGluX21vZHVsZV9tZW1fdHlwZShhZGRyLCBtb2QsIE1PRF9URVhUKSkKLQkJcGx0ID0gbW9kLSZndDthcmNoLmZ0cmFjZV90cmFtcG9saW5lczsKLQllbHNlCi0JCXJldHVybiBOVUxMOwomIzQzOwlzdHJ1Y3QgcGx0X2VudHJ5ICpwbHQgPSBtb2QtJmd0O2FyY2guZnRyYWNlX3RyYW1wb2xpbmVzOwogCiAJcmV0dXJuICZhbXA7cGx0W0ZUUkFDRV9QTFRfSURYXTsKICNlbHNlCkBAIC0zMzksNyAmIzQzOzMzMiw3IEBAIHN0YXRpYyBib29sIGZ0cmFjZV9maW5kX2NhbGxhYmxlX2FkZHIoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywKIAlpZiAoV0FSTl9PTighbW9kKSkKIAkJcmV0dXJuIGZhbHNlOwogCi0JcGx0ID0gZ2V0X2Z0cmFjZV9wbHQobW9kLCBwYyk7CiYjNDM7CXBsdCA9IGdldF9mdHJhY2VfcGx0KG1vZCk7CiAJaWYgKCFwbHQpIHsKIAkJcHJfZXJyKCYjMzQ7ZnRyYWNlOiBubyBtb2R1bGUgUExUIGZvciAlcHNcbiYjMzQ7LCAodm9pZCAqKSphZGRyKTsKIAkJcmV0dXJuIGZhbHNlOwpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYyBiL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmMKaW5kZXggN2FmZDM3MGRhOWY0OC4uNjkwMGQyMjQyZjFiZSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jCkBAIC03MCw4ICYjNDM7NzAsNyBAQCB1NjQgbW9kdWxlX2VtaXRfcGx0X2VudHJ5KHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycywKIAkJCSAgdm9pZCAqbG9jLCBjb25zdCBFbGY2NF9SZWxhICpyZWxhLAogCQkJICBFbGY2NF9TeW0gKnN5bSkKIHsKLQlzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9ICF3aXRoaW5fbW9kdWxlX2luaXQoKHVuc2lnbmVkIGxvbmcpbG9jLCBtb2QpID8KLQkJCQkJCSZhbXA7bW9kLSZndDthcmNoLmNvcmUgOiAmYW1wO21vZC0mZ3Q7YXJjaC5pbml0OwomIzQzOwlzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9ICZhbXA7bW9kLSZndDthcmNoLmNvcmU7CiAJc3RydWN0IHBsdF9lbnRyeSAqcGx0ID0gKHN0cnVjdCBwbHRfZW50cnkgKilzZWNoZHJzW3BsdHNlYy0mZ3Q7cGx0X3NobmR4XS5zaF9hZGRyOwogCWludCBpID0gcGx0c2VjLSZndDtwbHRfbnVtX2VudHJpZXM7CiAJaW50IGogPSBpIC0gMTsKQEAgLTEwMSw4ICYjNDM7MTAwLDcgQEAgdTY0IG1vZHVsZV9lbWl0X3BsdF9lbnRyeShzdHJ1Y3QgbW9kdWxlICptb2QsIEVsZjY0X1NoZHIgKnNlY2hkcnMsCiB1NjQgbW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwKHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycywKIAkJCQl2b2lkICpsb2MsIHU2NCB2YWwpCiB7Ci0Jc3RydWN0IG1vZF9wbHRfc2VjICpwbHRzZWMgPSAhd2l0aGluX21vZHVsZV9pbml0KCh1bnNpZ25lZCBsb25nKWxvYywgbW9kKSA/Ci0JCQkJCQkmYW1wO21vZC0mZ3Q7YXJjaC5jb3JlIDogJmFtcDttb2QtJmd0O2FyY2guaW5pdDsKJiM0MzsJc3RydWN0IG1vZF9wbHRfc2VjICpwbHRzZWMgPSAmYW1wO21vZC0mZ3Q7YXJjaC5jb3JlOwogCXN0cnVjdCBwbHRfZW50cnkgKnBsdCA9IChzdHJ1Y3QgcGx0X2VudHJ5ICopc2VjaGRyc1twbHRzZWMtJmd0O3BsdF9zaG5keF0uc2hfYWRkcjsKIAlpbnQgaSA9IHBsdHNlYy0mZ3Q7cGx0X251bV9lbnRyaWVzJiM0MzsmIzQzOzsKIAl1MzIgYnI7CkBAIC0xNjksMTcgJiM0MzsxNjcsMTcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBjb3VudF9wbHRzKEVsZjY0X1N5bSAqc3ltcywgRWxmNjRfUmVsYSAqcmVsYSwgaW50IG51bSwKIAkJY2FzZSBSX0FBUkNINjRfQ0FMTDI2OgogCQkJLyoKIAkJCSAqIFdlIG9ubHkgaGF2ZSB0byBjb25zaWRlciBicmFuY2ggdGFyZ2V0cyB0aGF0IHJlc29sdmUKLQkJCSAqIHRvIHN5bWJvbHMgdGhhdCBhcmUgZGVmaW5lZCBpbiBhIGRpZmZlcmVudCBzZWN0aW9uLgomIzQzOwkJCSAqIHRvIHN5bWJvbHMgdGhhdCBhcmUgbm90IGRlZmluZWQgaW4gdGhlIHNhbWUgbW9kdWxlLgogCQkJICogVGhpcyBpcyBub3Qgc2ltcGx5IGEgaGV1cmlzdGljLCBpdCBpcyBhIGZ1bmRhbWVudGFsCiAJCQkgKiBsaW1pdGF0aW9uLCBzaW5jZSB0aGVyZSBpcyBubyBndWFyYW50ZWVkIHdheSB0byBlbWl0CiAJCQkgKiBQTFQgZW50cmllcyBzdWZmaWNpZW50bHkgY2xvc2UgdG8gdGhlIGJyYW5jaCBpZiB0aGUKIAkJCSAqIHNlY3Rpb24gc2l6ZSBleGNlZWRzIHRoZSByYW5nZSBvZiBhIGJyYW5jaAogCQkJICogaW5zdHJ1Y3Rpb24uIFNvIGlnbm9yZSByZWxvY2F0aW9ucyBhZ2FpbnN0IGRlZmluZWQKLQkJCSAqIHN5bWJvbHMgaWYgdGhleSBsaXZlIGluIHRoZSBzYW1lIHNlY3Rpb24gYXMgdGhlCiYjNDM7CQkJICogc3ltYm9scyBpZiB0aGV5IGxpdmUgaW4gdGhlIHNhbWUgbW9kdWxlIGFzIHRoZQogCQkJICogcmVsb2NhdGlvbiB0YXJnZXQuCiAJCQkgKi8KIAkJCXMgPSBzeW1zICYjNDM7IEVMRjY0X1JfU1lNKHJlbGFbaV0ucl9pbmZvKTsKLQkJCWlmIChzLSZndDtzdF9zaG5keCA9PSBkc3RpZHgpCiYjNDM7CQkJaWYgKHMtJmd0O3N0X3NobmR4ICE9IFNITl9VTkRFRikKIAkJCQlicmVhazsKIAogCQkJLyoKQEAgLTI3NywxMyAmIzQzOzI3NSwxNCBAQCBzdGF0aWMgaW50IHBhcnRpdGlvbl9icmFuY2hfcGx0X3JlbGFzKEVsZjY0X1N5bSAqc3ltcywgRWxmNjRfUmVsYSAqcmVsYSwKIAlyZXR1cm4gaTsKIH0KIAomIzQzO3N0YXRpYyBjb25zdCBpbnQgZnRyYWNlX3BsdHMgPSBJU19FTkFCTEVEKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkgPyBOUl9GVFJBQ0VfUExUUyA6IDA7CiYjNDM7CiBpbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqZWhkciwgRWxmX1NoZHIgKnNlY2hkcnMsCiAJCQkgICAgICBjaGFyICpzZWNzdHJpbmdzLCBzdHJ1Y3QgbW9kdWxlICptb2QpCiB7Ci0JdW5zaWduZWQgbG9uZyBjb3JlX3BsdHMgPSAwOwotCXVuc2lnbmVkIGxvbmcgaW5pdF9wbHRzID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBjb3JlX3BsdHMgPSBmdHJhY2VfcGx0czsKIAlFbGY2NF9TeW0gKnN5bXMgPSBOVUxMOwotCUVsZl9TaGRyICpwbHRzZWMsICp0cmFtcCA9IE5VTEwsICppbml0X3RyYW1wID0gTlVMTDsKJiM0MzsJRWxmX1NoZHIgKnBsdHNlYzsKIAlpbnQgaTsKIAogCS8qCkBAIC0yOTMsMjAgJiM0MzsyOTIsMTIgQEAgaW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLAogCWZvciAoaSA9IDA7IGkgJmx0OyBlaGRyLSZndDtlX3NobnVtOyBpJiM0MzsmIzQzOykgewogCQlpZiAoIXN0cmNtcChzZWNzdHJpbmdzICYjNDM7IHNlY2hkcnNbaV0uc2hfbmFtZSwgJiMzNDsucGx0JiMzNDspKQogCQkJbW9kLSZndDthcmNoLmNvcmUucGx0X3NobmR4ID0gaTsKLQkJZWxzZSBpZiAoIXN0cmNtcChzZWNzdHJpbmdzICYjNDM7IHNlY2hkcnNbaV0uc2hfbmFtZSwgJiMzNDsuaW5pdC5wbHQmIzM0OykpCi0JCQltb2QtJmd0O2FyY2guaW5pdC5wbHRfc2huZHggPSBpOwotCQllbHNlIGlmICghc3RyY21wKHNlY3N0cmluZ3MgJiM0Mzsgc2VjaGRyc1tpXS5zaF9uYW1lLAotCQkJCSAmIzM0Oy50ZXh0LmZ0cmFjZV90cmFtcG9saW5lJiMzNDspKQotCQkJdHJhbXAgPSBzZWNoZHJzICYjNDM7IGk7Ci0JCWVsc2UgaWYgKCFzdHJjbXAoc2Vjc3RyaW5ncyAmIzQzOyBzZWNoZHJzW2ldLnNoX25hbWUsCi0JCQkJICYjMzQ7LmluaXQudGV4dC5mdHJhY2VfdHJhbXBvbGluZSYjMzQ7KSkKLQkJCWluaXRfdHJhbXAgPSBzZWNoZHJzICYjNDM7IGk7CiAJCWVsc2UgaWYgKHNlY2hkcnNbaV0uc2hfdHlwZSA9PSBTSFRfU1lNVEFCKQogCQkJc3ltcyA9IChFbGY2NF9TeW0gKilzZWNoZHJzW2ldLnNoX2FkZHI7CiAJfQogCi0JaWYgKCFtb2QtJmd0O2FyY2guY29yZS5wbHRfc2huZHggfHwgIW1vZC0mZ3Q7YXJjaC5pbml0LnBsdF9zaG5keCkgewotCQlwcl9lcnIoJiMzNDslczogbW9kdWxlIFBMVCBzZWN0aW9uKHMpIG1pc3NpbmdcbiYjMzQ7LCBtb2QtJmd0O25hbWUpOwomIzQzOwlpZiAoIW1vZC0mZ3Q7YXJjaC5jb3JlLnBsdF9zaG5keCkgewomIzQzOwkJcHJfZXJyKCYjMzQ7JXM6IG1vZHVsZSBQTFQgc2VjdGlvbiBtaXNzaW5nXG4mIzM0OywgbW9kLSZndDtuYW1lKTsKIAkJcmV0dXJuIC1FTk9FWEVDOwogCX0KIAlpZiAoIXN5bXMpIHsKQEAgLTMzNSwxMiAmIzQzOzMyNiw4IEBAIGludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICplaGRyLCBFbGZfU2hkciAqc2VjaGRycywKIAkJaWYgKG5lbnRzKQogCQkJc29ydChyZWxzLCBuZW50cywgc2l6ZW9mKEVsZjY0X1JlbGEpLCBjbXBfcmVsYSwgTlVMTCk7CiAKLQkJaWYgKCFtb2R1bGVfaW5pdF9sYXlvdXRfc2VjdGlvbihzZWNzdHJpbmdzICYjNDM7IGRzdHNlYy0mZ3Q7c2hfbmFtZSkpCi0JCQljb3JlX3BsdHMgJiM0Mzs9IGNvdW50X3BsdHMoc3ltcywgcmVscywgbnVtcmVscywKLQkJCQkJCXNlY2hkcnNbaV0uc2hfaW5mbywgZHN0c2VjKTsKLQkJZWxzZQotCQkJaW5pdF9wbHRzICYjNDM7PSBjb3VudF9wbHRzKHN5bXMsIHJlbHMsIG51bXJlbHMsCi0JCQkJCQlzZWNoZHJzW2ldLnNoX2luZm8sIGRzdHNlYyk7CiYjNDM7CQljb3JlX3BsdHMgJiM0Mzs9IGNvdW50X3BsdHMoc3ltcywgcmVscywgbnVtcmVscywgc2VjaGRyc1tpXS5zaF9pbmZvLAomIzQzOwkJCQkJZHN0c2VjKTsKIAl9CiAKIAlwbHRzZWMgPSBzZWNoZHJzICYjNDM7IG1vZC0mZ3Q7YXJjaC5jb3JlLnBsdF9zaG5keDsKQEAgLTM0OCwzMCAmIzQzOzMzNSw4IEBAIGludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICplaGRyLCBFbGZfU2hkciAqc2VjaGRycywKIAlwbHRzZWMtJmd0O3NoX2ZsYWdzID0gU0hGX0VYRUNJTlNUUiB8IFNIRl9BTExPQzsKIAlwbHRzZWMtJmd0O3NoX2FkZHJhbGlnbiA9IEwxX0NBQ0hFX0JZVEVTOwogCXBsdHNlYy0mZ3Q7c2hfc2l6ZSA9IChjb3JlX3BsdHMgICYjNDM7IDEpICogc2l6ZW9mKHN0cnVjdCBwbHRfZW50cnkpOwotCW1vZC0mZ3Q7YXJjaC5jb3JlLnBsdF9udW1fZW50cmllcyA9IDA7CiYjNDM7CW1vZC0mZ3Q7YXJjaC5jb3JlLnBsdF9udW1fZW50cmllcyA9IGZ0cmFjZV9wbHRzOwogCW1vZC0mZ3Q7YXJjaC5jb3JlLnBsdF9tYXhfZW50cmllcyA9IGNvcmVfcGx0czsKIAotCXBsdHNlYyA9IHNlY2hkcnMgJiM0MzsgbW9kLSZndDthcmNoLmluaXQucGx0X3NobmR4OwotCXBsdHNlYy0mZ3Q7c2hfdHlwZSA9IFNIVF9OT0JJVFM7Ci0JcGx0c2VjLSZndDtzaF9mbGFncyA9IFNIRl9FWEVDSU5TVFIgfCBTSEZfQUxMT0M7Ci0JcGx0c2VjLSZndDtzaF9hZGRyYWxpZ24gPSBMMV9DQUNIRV9CWVRFUzsKLQlwbHRzZWMtJmd0O3NoX3NpemUgPSAoaW5pdF9wbHRzICYjNDM7IDEpICogc2l6ZW9mKHN0cnVjdCBwbHRfZW50cnkpOwotCW1vZC0mZ3Q7YXJjaC5pbml0LnBsdF9udW1fZW50cmllcyA9IDA7Ci0JbW9kLSZndDthcmNoLmluaXQucGx0X21heF9lbnRyaWVzID0gaW5pdF9wbHRzOwotCi0JaWYgKHRyYW1wKSB7Ci0JCXRyYW1wLSZndDtzaF90eXBlID0gU0hUX05PQklUUzsKLQkJdHJhbXAtJmd0O3NoX2ZsYWdzID0gU0hGX0VYRUNJTlNUUiB8IFNIRl9BTExPQzsKLQkJdHJhbXAtJmd0O3NoX2FkZHJhbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCBwbHRfZW50cnkpOwotCQl0cmFtcC0mZ3Q7c2hfc2l6ZSA9IE5SX0ZUUkFDRV9QTFRTICogc2l6ZW9mKHN0cnVjdCBwbHRfZW50cnkpOwotCX0KLQotCWlmIChpbml0X3RyYW1wKSB7Ci0JCWluaXRfdHJhbXAtJmd0O3NoX3R5cGUgPSBTSFRfTk9CSVRTOwotCQlpbml0X3RyYW1wLSZndDtzaF9mbGFncyA9IFNIRl9FWEVDSU5TVFIgfCBTSEZfQUxMT0M7Ci0JCWluaXRfdHJhbXAtJmd0O3NoX2FkZHJhbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCBwbHRfZW50cnkpOwotCQlpbml0X3RyYW1wLSZndDtzaF9zaXplID0gTlJfRlRSQUNFX1BMVFMgKiBzaXplb2Yoc3RydWN0IHBsdF9lbnRyeSk7Ci0JfQotCiAJcmV0dXJuIDA7CiB9CmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jCmluZGV4IDI0YWRiNTgxYWYwZWIuLjYyMGMyYjcwMTE1ZTUgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jCkBAIC00NTQsMjkgJiM0Mzs0NTQsMTEgQEAgc3RhdGljIGludCBtb2R1bGVfaW5pdF9mdHJhY2VfcGx0KGNvbnN0IEVsZl9FaGRyICpoZHIsCiAJCQkJICBzdHJ1Y3QgbW9kdWxlICptb2QpCiB7CiAjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpCi0JY29uc3QgRWxmX1NoZHIgKnM7Ci0Jc3RydWN0IHBsdF9lbnRyeSAqcGx0czsKLQotCXMgPSBmaW5kX3NlY3Rpb24oaGRyLCBzZWNoZHJzLCAmIzM0Oy50ZXh0LmZ0cmFjZV90cmFtcG9saW5lJiMzNDspOwotCWlmICghcykKLQkJcmV0dXJuIC1FTk9FWEVDOwotCi0JcGx0cyA9ICh2b2lkICopcy0mZ3Q7c2hfYWRkcjsKJiM0MzsJc3RydWN0IHBsdF9lbnRyeSAqcGx0cyA9ICh2b2lkICopc2VjaGRyc1ttb2QtJmd0O2FyY2guY29yZS5wbHRfc2huZHhdLnNoX2FkZHI7CiAKIAlfX2luaXRfcGx0KCZhbXA7cGx0c1tGVFJBQ0VfUExUX0lEWF0sIEZUUkFDRV9BRERSKTsKIAogCW1vZC0mZ3Q7YXJjaC5mdHJhY2VfdHJhbXBvbGluZXMgPSBwbHRzOwotCi0JcyA9IGZpbmRfc2VjdGlvbihoZHIsIHNlY2hkcnMsICYjMzQ7LmluaXQudGV4dC5mdHJhY2VfdHJhbXBvbGluZSYjMzQ7KTsKLQlpZiAoIXMpCi0JCXJldHVybiAtRU5PRVhFQzsKLQotCXBsdHMgPSAodm9pZCAqKXMtJmd0O3NoX2FkZHI7Ci0KLQlfX2luaXRfcGx0KCZhbXA7cGx0c1tGVFJBQ0VfUExUX0lEWF0sIEZUUkFDRV9BRERSKTsKLQotCW1vZC0mZ3Q7YXJjaC5pbml0X2Z0cmFjZV90cmFtcG9saW5lcyA9IHBsdHM7Ci0KICNlbmRpZgogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9pbml0LmMgYi9hcmNoL2FybTY0L21tL2luaXQuYwppbmRleCA5Nzk4N2Y4NTBhMzNjLi5lNmM5ODA0NTA0NmUyIDEwMDY0NAotLS0gYS9hcmNoL2FybTY0L21tL2luaXQuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L21tL2luaXQuYwpAQCAtNTMxLDcgJiM0Mzs1MzEsOCBAQCBzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpCiAJCQlbRVhFQ01FTV9ERUZBVUxUXSA9IHsKIAkJCQkuc3RhcnQJPSBzdGFydCwKIAkJCQkuZW5kCT0gZW5kLAotCQkJCS5wZ3Byb3QJPSBQQUdFX0tFUk5FTCwKJiM0MzsJCQkJLnBncHJvdAk9IFBBR0VfS0VSTkVMX1JPWCwKJiM0MzsJCQkJLmZsYWdzCT0gRVhFQ01FTV9ST1hfQ0FDSEUsCiAJCQkJLmFsaWdubWVudCA9IDEsCiAJCQkJLmZhbGxiYWNrX3N0YXJ0CT0gZmFsbGJhY2tfc3RhcnQsCiAJCQkJLmZhbGxiYWNrX2VuZAk9IGZhbGxiYWNrX2VuZCwKQEAgLTU0OCw5ICYjNDM7NTQ5LDI1IEBAIHN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZCkKIAkJCQkucGdwcm90CT0gUEFHRV9LRVJORUwsCiAJCQkJLmFsaWdubWVudCA9IDEsCiAJCQl9LAomIzQzOwkJCVtFWEVDTUVNX01PRFVMRV9EQVRBXSA9IHsKJiM0MzsJCQkJLnN0YXJ0CT0gc3RhcnQsCiYjNDM7CQkJCS5lbmQJPSBlbmQsCiYjNDM7CQkJCS5wZ3Byb3QJPSBQQUdFX0tFUk5FTCwKJiM0MzsJCQkJLmFsaWdubWVudCA9IDEsCiYjNDM7CQkJCS5mYWxsYmFja19zdGFydAk9IGZhbGxiYWNrX3N0YXJ0LAomIzQzOwkJCQkuZmFsbGJhY2tfZW5kCT0gZmFsbGJhY2tfZW5kLAomIzQzOwkJCX0sCiAJCX0sCiAJfTsKIAomIzQzOwlpZiAoIXN5c3RlbV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KCkpCiYjNDM7CQlleGVjbWVtX2luZm8ucmFuZ2VzW0VYRUNNRU1fREVGQVVMVF0uZmxhZ3MgfD0gRVhFQ01FTV9OT19IVUdFX1ZNQVA7CiYjNDM7CiAJcmV0dXJuICZhbXA7ZXhlY21lbV9pbmZvOwogfQomIzQzOwomIzQzO3ZvaWQgZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zKHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwltZW1zZXQzMihwdHIsIEFBUkNINjRfQlJFQUtfRkFVTFQsIHNpemUgLyBzaXplb2YoX19sZTMyKSk7CiYjNDM7fQogI2VuZGlmIC8qIENPTkZJR19FWEVDTUVNICovCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMgYi9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmMKaW5kZXggYmJlOThhYzlhZDhjNi4uMjBmZjljYjI3M2MxMSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYwpAQCAtMTY5LDggJiM0MzsxNjksNiBAQCBzdGF0aWMgaW50IGNoYW5nZV9tZW1vcnlfY29tbW9uKHVuc2lnbmVkIGxvbmcgYWRkciwgaW50IG51bXBhZ2VzLAogCSAqIHdlIGFyZSBvcGVyYXRpbmcgb24gZG9lcyBub3QgcmVzdWx0IGluIHN1Y2ggc3BsaXR0aW5nLgogCSAqCiAJICogTGV0JiMzOTtzIHJlc3RyaWN0IG91cnNlbHZlcyB0byBtYXBwaW5ncyBjcmVhdGVkIGJ5IHZtYWxsb2MgKG9yIHZtYXApLgotCSAqIERpc2FsbG93IFZNX0FMTE9XX0hVR0VfVk1BUCBtYXBwaW5ncyB0byBndWFyYW50ZWUgdGhhdCBvbmx5IHBhZ2UKLQkgKiBtYXBwaW5ncyBhcmUgdXBkYXRlZCBhbmQgc3BsaXR0aW5nIGlzIG5ldmVyIG5lZWRlZC4KIAkgKgogCSAqIFNvIGNoZWNrIHdoZXRoZXIgdGhlIFthZGRyLCBhZGRyICYjNDM7IHNpemUpIGludGVydmFsIGlzIGVudGlyZWx5CiAJICogY292ZXJlZCBieSBwcmVjaXNlbHkgb25lIFZNIGFyZWEgdGhhdCBoYXMgdGhlIFZNX0FMTE9DIGZsYWcgc2V0LgpAQCAtMTc5LDcgJiM0MzsxNzcsMTYgQEAgc3RhdGljIGludCBjaGFuZ2VfbWVtb3J5X2NvbW1vbih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcywKIAlpZiAoIWFyZWEgfHwKIAkgICAgKCh1bnNpZ25lZCBsb25nKWthc2FuX3Jlc2V0X3RhZygodm9pZCAqKWVuZCkgJmd0OwogCSAgICAgKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKGFyZWEtJmd0O2FkZHIpICYjNDM7IGFyZWEtJmd0O3NpemUpIHx8Ci0JICAgICgoYXJlYS0mZ3Q7ZmxhZ3MgJmFtcDsgKFZNX0FMTE9DIHwgVk1fQUxMT1dfSFVHRV9WTUFQKSkgIT0gVk1fQUxMT0MpKQomIzQzOwkgICAgIShhcmVhLSZndDtmbGFncyAmYW1wOyBWTV9BTExPQykpCiYjNDM7ICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIERpc2FsbG93IFZNX0FMTE9XX0hVR0VfVk1BUCBtYXBwaW5ncyB1bmxlc3MgdGhlIHJlZ2lvbiBpcyBQTUQKJiM0MzsJICogYWxpZ25lZCwgb3Igc3BsaXR0aW5nIGxpdmUgaHVnZSBtYXBwaW5ncyBpcyBzdXBwb3J0ZWQuCiYjNDM7CSAqLwomIzQzOwlpZiAoKGFyZWEtJmd0O2ZsYWdzICZhbXA7IFZNX0FMTE9XX0hVR0VfVk1BUCkgJmFtcDsmYW1wOwomIzQzOwkgICAoKHN0YXJ0ICUgUE1EX1NJWkUpIHx8IChzaXplICUgUE1EX1NJWkUpKSAmYW1wOyZhbXA7CiYjNDM7CSAgIFdBUk5fT05fT05DRSghc3lzdGVtX3N1cHBvcnRzX2JibWwyX25vYWJvcnQoKSkpCiAJCXJldHVybiAtRUlOVkFMOwogCiAJaWYgKCFudW1wYWdlcykKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXhlY21lbS5oIGIvaW5jbHVkZS9saW51eC9leGVjbWVtLmgKaW5kZXggN2RlMjI5MTM0ZTMwNy4uYjA0OTI2ZjNmZmYyNiAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9leGVjbWVtLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9leGVjbWVtLmgKQEAgLTQ4LDEwICYjNDM7NDgsMTIgQEAgZW51bSBleGVjbWVtX3R5cGUgewogICogZW51bSBleGVjbWVtX3JhbmdlX2ZsYWdzIC0gb3B0aW9ucyBmb3IgZXhlY3V0YWJsZSBtZW1vcnkgYWxsb2NhdGlvbnMKICAqIEBFWEVDTUVNX0tBU0FOX1NIQURPVzoJYWxsb2NhdGUga2FzYW4gc2hhZG93CiAgKiBARVhFQ01FTV9ST1hfQ0FDSEU6CQlhbGxvY2F0aW9ucyBzaG91bGQgdXNlIFJPWCBjYWNoZSBvZiBodWdlIHBhZ2VzCiYjNDM7ICogQEVYRUNNRU1fTk9fSFVHRV9WTUFQOgljYWNoZSBhbGxvY2F0aW9ucyBtdXN0IGF2b2lkIGh1Z2Ugdm1hcHBpbmdzCiAgKi8KIGVudW0gZXhlY21lbV9yYW5nZV9mbGFncyB7CiAJRVhFQ01FTV9LQVNBTl9TSEFET1cJPSAoMSAmbHQ7Jmx0OyAwKSwKIAlFWEVDTUVNX1JPWF9DQUNIRQk9ICgxICZsdDsmbHQ7IDEpLAomIzQzOwlFWEVDTUVNX05PX0hVR0VfVk1BUAk9ICgxICZsdDsmbHQ7IDIpLAogfTsKIAogI2lmZGVmIENPTkZJR19BUkNIX0hBU19FWEVDTUVNX1JPWApAQCAtMTc4LDYgJiM0MzsxODAsMTUgQEAgdm9pZCBleGVjbWVtX2ZyZWUodm9pZCAqcHRyKTsKIAogREVGSU5FX0ZSRUUoZXhlY21lbSwgdm9pZCAqLCBpZiAoX1QpIGV4ZWNtZW1fZnJlZShfVCkpOwogCiYjNDM7LyoqCiYjNDM7ICogZXhlY21lbV9zcGxpdCAtIGFsbG9jYXRlIHNwYWNlIGZyb20gYW4gZXhpc3RpbmcgZXhlY21lbSBjYWNoZSBhbGxvY2F0aW9uCiYjNDM7ICogQHB0ciAgLSB0aGUgZXhpc3RpbmcgZXhlY21lbSBjYWNoZSBhbGxvY2F0aW9uCiYjNDM7ICogQHNpemUgLSB0aGUgc2l6ZSB0byBjYXJ2ZSBvdXQgZnJvbSB0aGUgZXhpc3RpbmcgYWxsb2NhdGlvbgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiB0aGUgYWRkcmVzcyBvZiB0aGUgY2FydmVkIG91dCBhbGxvY2F0aW9uLCBvciAlTlVMTCBvbiBmYWlsdXJlLgomIzQzOyAqLwomIzQzO3ZvaWQgKmV4ZWNtZW1fc3BsaXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7CiYjNDM7CiAjaWZkZWYgQ09ORklHX01NVQogLyoqCiAgKiBleGVjbWVtX3ZtYXAgLSBjcmVhdGUgdmlydHVhbCBtYXBwaW5nIGZvciBFWEVDTUVNX01PRFVMRV9EQVRBIG1lbW9yeQpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmgKaW5kZXggNzU2NjgxNWZhYmJlOC4uMDMzNmE0NjczM2RkOSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oCkBAIC0zMTYsMTAgJiM0MzszMTYsMTAgQEAgc3RydWN0IG1vZF90cmVlX25vZGUgewogfTsKIAogZW51bSBtb2RfbWVtX3R5cGUgewotCU1PRF9URVhUID0gMCwKLQlNT0RfREFUQSwKJiM0MzsJTU9EX0RBVEEgPSAwLAogCU1PRF9ST0RBVEEsCiAJTU9EX1JPX0FGVEVSX0lOSVQsCiYjNDM7CU1PRF9URVhULAogCU1PRF9JTklUX1RFWFQsCiAJTU9EX0lOSVRfREFUQSwKIAlNT0RfSU5JVF9ST0RBVEEsCmRpZmYgLS1naXQgYS9rZXJuZWwvbW9kdWxlL21haW4uYyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jCmluZGV4IDQ2ZGQ4ZDI1YTYwNTguLjJkNjIxMzQ5NjM1OTcgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9tb2R1bGUvbWFpbi5jCkBAIC0xMzQyLDcgJiM0MzsxMzQyLDcgQEAgc3RhdGljIGludCBtb2R1bGVfbWVtb3J5X2FsbG9jKHN0cnVjdCBtb2R1bGUgKm1vZCwgZW51bSBtb2RfbWVtX3R5cGUgdHlwZSkKIHsKIAl1bnNpZ25lZCBpbnQgc2l6ZSA9IFBBR0VfQUxJR04obW9kLSZndDttZW1bdHlwZV0uc2l6ZSk7CiAJZW51bSBleGVjbWVtX3R5cGUgZXhlY21lbV90eXBlOwotCXZvaWQgKnB0cjsKJiM0MzsJdm9pZCAqcHRyID0gTlVMTDsKIAogCW1vZC0mZ3Q7bWVtW3R5cGVdLnNpemUgPSBzaXplOwogCkBAIC0xMzUxLDExICYjNDM7MTM1MSwyNSBAQCBzdGF0aWMgaW50IG1vZHVsZV9tZW1vcnlfYWxsb2Moc3RydWN0IG1vZHVsZSAqbW9kLCBlbnVtIG1vZF9tZW1fdHlwZSB0eXBlKQogCWVsc2UKIAkJZXhlY21lbV90eXBlID0gRVhFQ01FTV9NT0RVTEVfVEVYVDsKIAotCXB0ciA9IGV4ZWNtZW1fYWxsb2NfcncoZXhlY21lbV90eXBlLCBzaXplKTsKJiM0MzsJYm9vbCBpc19yb3ggPSBleGVjbWVtX2lzX3JveChleGVjbWVtX3R5cGUpOwomIzQzOwlpZiAoaXNfcm94KSB7CiYjNDM7CQkvKgomIzQzOwkJICogU3BlY2lhbCBjYXNlIGZvciBNT0RfVEVYVCAvIE1PRF9JTklUX1RFWFQ6IGFsbG9jYXRlIHRoZQomIzQzOwkJICogbGF0dGVyIGJ5IHNwbGl0dGluZyBvZmYgcmVxdWlyZWQgc3BhY2UgZnJvbSB0aGUgZm9ybWVyCiYjNDM7CQkgKiBzbyB0aGF0IHRoZXkgYXJlIGFsd2F5cyBwbGFjZWQgY2xvc2UgdG9nZXRoZXIuCiYjNDM7CQkgKi8KJiM0MzsJCWlmICh0eXBlID09IE1PRF9URVhUKQomIzQzOwkJCXNpemUgJiM0Mzs9IFBBR0VfQUxJR04obW9kLSZndDttZW1bTU9EX0lOSVRfVEVYVF0uc2l6ZSk7CiYjNDM7CQllbHNlIGlmICh0eXBlID09IE1PRF9JTklUX1RFWFQpCiYjNDM7CQkJcHRyID0gZXhlY21lbV9zcGxpdChtb2QtJmd0O21lbVtNT0RfVEVYVF0uYmFzZSwgc2l6ZSk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKCFwdHIpCiYjNDM7CQlwdHIgPSBleGVjbWVtX2FsbG9jX3J3KGV4ZWNtZW1fdHlwZSwgc2l6ZSk7CiAJaWYgKCFwdHIpCiAJCXJldHVybiAtRU5PTUVNOwogCi0JbW9kLSZndDttZW1bdHlwZV0uaXNfcm94ID0gZXhlY21lbV9pc19yb3goZXhlY21lbV90eXBlKTsKJiM0MzsJbW9kLSZndDttZW1bdHlwZV0uaXNfcm94ID0gaXNfcm94OwogCiAJLyoKIAkgKiBUaGUgcG9pbnRlciB0byB0aGVzZSBibG9ja3Mgb2YgbWVtb3J5IGFyZSBzdG9yZWQgb24gdGhlIG1vZHVsZQpAQCAtMTM2OCw3ICYjNDM7MTM4Miw3IEBAIHN0YXRpYyBpbnQgbW9kdWxlX21lbW9yeV9hbGxvYyhzdHJ1Y3QgbW9kdWxlICptb2QsIGVudW0gbW9kX21lbV90eXBlIHR5cGUpCiAJICogKmRvKiBldmVudHVhbGx5IGdldCBmcmVlZCwgYnV0IGxldCYjMzk7cyBqdXN0IGtlZXAgdGhpbmdzIHNpbXBsZQogCSAqIGFuZCBhdm9pZCAqYW55KiBmYWxzZSBwb3NpdGl2ZXMuCiAJICovCi0JaWYgKCFtb2QtJmd0O21lbVt0eXBlXS5pc19yb3gpCiYjNDM7CWlmICghaXNfcm94KQogCQlrbWVtbGVha19ub3RfbGVhayhwdHIpOwogCiAJbWVtc2V0KHB0ciwgMCwgc2l6ZSk7CmRpZmYgLS1naXQgYS9tbS9leGVjbWVtLmMgYi9tbS9leGVjbWVtLmMKaW5kZXggMDg0YTIwN2U0Mjc4Yi4uNTc5MGQ0YTg1MzJhZiAxMDA2NDQKLS0tIGEvbW0vZXhlY21lbS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2V4ZWNtZW0uYwpAQCAtMjc2LDcgJiM0MzsyNzYsOCBAQCBzdGF0aWMgdm9pZCAqX19leGVjbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBleGVjbWVtX3JhbmdlICpyYW5nZSwgc2l6ZV90IHNpemUpCiAKIHN0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3BvcHVsYXRlX2FsbG9jKHN0cnVjdCBleGVjbWVtX3JhbmdlICpyYW5nZSwgc2l6ZV90IHNpemUpCiB7Ci0JdW5zaWduZWQgbG9uZyB2bV9mbGFncyA9IFZNX0FMTE9XX0hVR0VfVk1BUDsKJiM0MzsJdW5zaWduZWQgbG9uZyB2bV9mbGFncyA9IChyYW5nZS0mZ3Q7ZmxhZ3MgJmFtcDsgRVhFQ01FTV9OT19IVUdFX1ZNQVApCiYjNDM7CQkJCQkJPyAwIDogVk1fQUxMT1dfSFVHRV9WTUFQOwogCXN0cnVjdCBtdXRleCAqbXV0ZXggPSAmYW1wO2V4ZWNtZW1fY2FjaGUubXV0ZXg7CiAJc3RydWN0IHZtX3N0cnVjdCAqdm07CiAJc2l6ZV90IGFsbG9jX3NpemU7CkBAIC00MzksNiAmIzQzOzQ0MCwzMyBAQCBzdGF0aWMgYm9vbCBleGVjbWVtX2NhY2hlX2ZyZWUodm9pZCAqcHRyKQogCXJldHVybiB0cnVlOwogfQogCiYjNDM7c3RhdGljIHZvaWQgKmV4ZWNtZW1fY2FjaGVfc3BsaXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtYXBsZV90cmVlICpidXN5X2FyZWFzID0gJmFtcDtleGVjbWVtX2NhY2hlLmJ1c3lfYXJlYXM7CiYjNDM7CXVuc2lnbmVkIGxvbmcgYWRkciA9ICh1bnNpZ25lZCBsb25nKXB0cjsKJiM0MzsJTUFfU1RBVEUobWFzLCBidXN5X2FyZWFzLCBhZGRyLCBhZGRyKTsKJiM0MzsJdm9pZCAqYXJlYTsKJiM0MzsJaW50IGVycjsKJiM0MzsKJiM0MzsJZ3VhcmQobXV0ZXgpKCZhbXA7ZXhlY21lbV9jYWNoZS5tdXRleCk7CiYjNDM7CiYjNDM7CWFyZWEgPSBtYXNfd2FsaygmYW1wO21hcyk7CiYjNDM7CWlmICghYXJlYSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FTk9FTlQpOwomIzQzOwomIzQzOwlpZiAoc2l6ZSAmZ3Q7PSBtYXNfcmFuZ2VfbGVuKCZhbXA7bWFzKSkKJiM0MzsJCXJldHVybiBFUlJfUFRSKC1FSU5WQUwpOwomIzQzOwomIzQzOwlhZGRyICYjNDM7PSBtYXNfcmFuZ2VfbGVuKCZhbXA7bWFzKSAtIHNpemU7CiYjNDM7CW1hc19zZXRfcmFuZ2UoJmFtcDttYXMsIGFkZHIsIG1hcy5sYXN0KTsKJiM0MzsKJiM0MzsJZXJyID0gbWFzX3N0b3JlX2dmcCgmYW1wO21hcywgKHZvaWQgKilhZGRyLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKGVycikKJiM0MzsJCXJldHVybiBFUlJfUFRSKGVycik7CiYjNDM7CiYjNDM7CXJldHVybiAodm9pZCAqKWFkZHI7CiYjNDM7fQomIzQzOwogI2Vsc2UgLyogQ09ORklHX0FSQ0hfSEFTX0VYRUNNRU1fUk9YICovCiAvKgogICogd2hlbiBST1ggY2FjaGUgaXMgbm90IHVzZWQgdGhlIHBlcm1pc3Npb25zIGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlcyBmb3IKQEAgLTQ1OSw2ICYjNDM7NDg3LDExIEBAIHN0YXRpYyBib29sIGV4ZWNtZW1fY2FjaGVfZnJlZSh2b2lkICpwdHIpCiB7CiAJcmV0dXJuIGZhbHNlOwogfQomIzQzOwomIzQzO3N0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpCiYjNDM7ewomIzQzOwlyZXR1cm4gRVJSX1BUUigtRU5PRU5UKTsKJiM0Mzt9CiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfSEFTX0VYRUNNRU1fUk9YICovCiAKIHZvaWQgKmV4ZWNtZW1fYWxsb2MoZW51bSBleGVjbWVtX3R5cGUgdHlwZSwgc2l6ZV90IHNpemUpCkBAIC01MTEsNiAmIzQzOzU0NCwxOCBAQCBib29sIGV4ZWNtZW1faXNfcm94KGVudW0gZXhlY21lbV90eXBlIHR5cGUpCiAJcmV0dXJuICEhKGV4ZWNtZW1faW5mby0mZ3Q7cmFuZ2VzW3R5cGVdLmZsYWdzICZhbXA7IEVYRUNNRU1fUk9YX0NBQ0hFKTsKIH0KIAomIzQzO3ZvaWQgKmV4ZWNtZW1fc3BsaXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSkKJiM0Mzt7CiYjNDM7CWlmICghcHRyIHx8ICFzaXplKQomIzQzOwkJcmV0dXJuIE5VTEw7CiYjNDM7CiYjNDM7CXB0ciA9IGV4ZWNtZW1fY2FjaGVfc3BsaXQocHRyLCBzaXplKTsKJiM0MzsJaWYgKCFJU19FUlIocHRyKSkKJiM0MzsJCXJldHVybiBwdHI7CiYjNDM7CVZNX1dBUk5fT04ocHRyICE9IEVSUl9QVFIoLUVOT01FTSkpOwomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgYm9vbCBleGVjbWVtX3ZhbGlkYXRlKHN0cnVjdCBleGVjbWVtX2luZm8gKmluZm8pCiB7CiAJc3RydWN0IGV4ZWNtZW1fcmFuZ2UgKnIgPSAmYW1wO2luZm8tJmd0O3Jhbmdlc1tFWEVDTUVNX0RFRkFVTFRdOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODc1NAoJCQkJCQkJb3V0cHV0OiAyMzgKCQkJCQkJCXRob3VnaHRzOiAxODEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5c2lzIG9mIEtlcm5lbCBNb2R1bGUgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2ggU2VyaWVzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGJlZW4gZ2l2ZW4gYSBwYXRjaCBzZXJpZXMgdGhhdCBzaWduaWZpY2FudGx5IGNoYW5nZXMgaG93IGtlcm5lbCBtb2R1bGVzIGFyZSBsb2FkZWQgYW5kIGhvdyBleGVjdXRhYmxlIG1lbW9yeSBpcyBtYW5hZ2VkLCBzcGVjaWZpY2FsbHkgZm9jdXNpbmcgb24gQVJNNjQuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZXNlIG1vZGlmaWNhdGlvbnMgcHJpbWFyaWx5IGFmZmVjdCBpbnRlcm5hbCBrZXJuZWwgb3BlcmF0aW9ucyBhbmQgbWVtb3J5IGFsbG9jYXRpb24gZm9yIGNvZGUgZXhlY3V0aW9uLCB3aGljaCBpbmNsdWRlcyBtb2R1bGUgdGV4dCwgUExUcyAoUHJvY2VkdXJlIExpbmthZ2UgVGFibGVzKSwgYW5kIGZ0cmFjZSB0cmFtcG9saW5lcy4KClRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBleGVjbWVtX3NwbGl0YCwgd2hpY2ggc291bmRzIGxpa2UgaXQgY2FydmVzIG91dCBzcGFjZSBmcm9tIGFuIGV4aXN0aW5nIGFsbG9jYXRpb27igJRzcGVjaWZpY2FsbHksIHB1bGxpbmcgYE1PRF9JTklUX1RFWFRgIGZyb20gYE1PRF9URVhUYC4gSXQmIzM5O3MgYWxzbyBtb2RpZnlpbmcgZmlsZXMgcmVsYXRlZCB0byBQTFQgaGFuZGxpbmcgYW5kIG1vZHVsZSBpbml0aWFsaXphdGlvbiBhbmQgbWVtb3J5LXJlbGF0ZWQgZmlsZXMuIE9uZSBpbW1lZGlhdGUgY29uY2VybiBJIGhhdmUgaXMgdGhlIHBvdGVudGlhbCBmb3IgdW5pbml0aWFsaXplZCBtZW1vcnkgZXhwb3N1cmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGl0JiMzOTtzIHBvc3NpYmxlIHRvIGxlYWsgdW5pbml0aWFsaXplZCBkYXRhLgoKTG9va2luZyBhdCB0aGUgY29kZSwgaXQgc2VlbXMgdGhlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gZm9yIGNvZGUgZXhlY3V0aW9uLiBUaGUgYGV4ZWNtZW1fc3BsaXRgIGZ1bmN0aW9uIHNvdW5kcyBsaWtlIHRoZSBjcml0aWNhbCBwYXJ0IHRvIGV2YWx1YXRlLCBzbyBsZXQmIzM5O3MgY2hlY2sgYG1vZHVsZV9tZW1vcnlfYWxsb2NgLiBUaGUgY29kZSBpbiB0aGVyZSBpcyBhbGxvY2F0aW5nIG1lbW9yeSwgdGhlbiBpdCAqaW1tZWRpYXRlbHkqIGNhbGxzIGBtZW1zZXQocHRyLCAwLCBzaXplKWAuIFRoYXQgc2VlbXMgcHJldHR5IHNhZmUhIEl0IGxvb2tzIGxpa2UgdGhlcmUgaXMgYSBzcGVjaWFsIGNhc2UgZm9yIGBNT0RfVEVYVGAgYW5kIGBNT0RfSU5JVF9URVhUYCB0aGF0IHVzZXMgYGV4ZWNtZW1fc3BsaXRgLiBJdCBhcHBlYXJzIHRoYXQgYE1PRF9URVhUYCBhbGxvY2F0aW9uIGluY3JlYXNlcyB0aGUgYHNpemVgIGJ5IHRoZSBgTU9EX0lOSVRfVEVYVGAgc2l6ZSwgYW5kIHRoZW4gKnplcm9lcyB0aGUgZW50aXJlIGJsb2NrKi4gVGhlbiwgd2hlbiBhbGxvY2F0aW5nIGBNT0RfSU5JVF9URVhUYCwgaXQgY2FsbHMgYGV4ZWNtZW1fc3BsaXRgIGFuZCBhZ2FpbiBjYWxscyBgbWVtc2V0YC4gVGhlcmVmb3JlLCBubyB1bmluaXRpYWxpemVkIG1lbW9yeSBsZWFrcyBhcmUgcG9zc2libGUuCgpJIGFsc28gc2VlIHRoYXQgbWVtb3J5IGFsbG9jYXRpb25zIG1hZGUgdmlhIHRoZSBST1ggY2FjaGUgYXJlIHBvcHVsYXRlZCB3aXRoIHRyYXBwaW5nIGluc3RydWN0aW9ucyBvciB6ZXJvZXMuIEFsbCB2ZXJ5IGdvb2QuIEdpdmVuIGFsbCB0aGF0LCB0aGlzIHNlZW1zIHRvIGJlIGVudGlyZWx5IGludGVybmFsLCBhbmQgdGhlcmUmIzM5O3Mgbm8gZGF0YSBiZWluZyBwYXNzZWQgdG8gdXNlcnNwYWNlLiBUaGVyZSYjMzk7cyBubyBjb21wbGV4IHN0cnVjdHVyZSBjb25zdHJ1Y3Rpb24gd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZC4gQW55IGlzc3VlcyBoZXJlIHdvdWxkIGxpa2VseSBtYW5pZmVzdCBhcyBjcmFzaGVzLCBwYWdlIGZhdWx0cywgb3IgbWVtb3J5IGNvcnJ1cHRpb24uIFRoZXNlIGlzc3VlcyBhcmUgYmVzdCBjYXVnaHQgYnkgS0FTQU4gb3Igc3RhbmRhcmQga2VybmVsIHRlc3RpbmcuCgpJJiMzOTttIGFsc28gbG9va2luZyBhdCB0aGUgUExUIHNlY3Rpb24gY29uc29saWRhdGlvbi4gVGhpcyBzZWVtcyBzYWZlIGJlY2F1c2UgaXQganVzdCBtZXJnZXMgZXZlcnl0aGluZyBpbnRvIHRoZSBjb3JlIHNlY3Rpb24uIFRoZSBjaGFuZ2VzIHRvIGBhcmNoL2FybTY0L21tL2luaXQuY2AgaW5pdGlhbGl6ZSBtZW1vcnkgd2l0aCB0cmFwcGluZyBpbnN0cnVjdGlvbnMsIGFuZCB0aGUgY2hhbmdlcyB0byBgcGFnZWF0dHIuY2AgcmVsYXRlIHRvIGNoYW5naW5nIHBhZ2UgYXR0cmlidXRlcy4gU3RpbGwsIEkgc2VlIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MsIGFuZCB0aGUgbWVtb3J5IGFsbG9jYXRlZCBpcyB6ZXJvZWQuCgpPa2F5LCBhZnRlciBhIHRob3JvdWdoIHJldmlldywgSSYjMzk7bSBjb25maWRlbnQgdGhhdCB0aGlzIHNlcmllcyBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbGwgbW9kdWxlIG1lbW9yeSBpcyBpbml0aWFsaXplZCwgYW5kIHRoZXNlIGNoYW5nZXMgZG9uJiMzOTt0IGludm9sdmUgc2VuZGluZyBhbnkgZGF0YSB0byB1c2VyIHNwYWNlLiBJdCBzZWVtcyBsaWtlIGEgJiMzNDtOZWVkc0tNU0FOID0gZmFsc2UmIzM0OyBjYWxsIHRvIG1lLiBUaGVzZSBjaGFuZ2VzIGRvbiYjMzk7dCBuZWVkIGRlZGljYXRlZCBLTVNBTiBhdHRlbnRpb24uIFRoZSBsaWtlbHkgZmFpbHVyZSBtb2RlcyBoZXJlIGFyZSBwYWdlIGZhdWx0cywga2VybmVsIGNyYXNoZXMsIG9yIG1lbW9yeSBjb3JydXB0aW9uIHdoaWNoIGFyZSBhbGwgZWFzaWx5IGNhdWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjIgMTQ6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBleGVjdXRhYmxlIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIChgZXhlY21lbWApIGZvciBrZXJuZWwgbW9kdWxlcywgc3BlY2lmaWNhbGx5IGNvbnNvbGlkYXRpbmcgbW9kdWxlIHRleHQgYW5kIGluaXQgdGV4dCBhbGxvY2F0aW9ucywgbWVyZ2luZyBQTFQgc2VjdGlvbnMgZm9yIEFSTTY0LCBhbmQgYWRqdXN0aW5nIHBhZ2UgYXR0cmlidXRlcyBmb3IgUk9YIChSZWFkLU9ubHkgRXhlY3V0ZSkgY2FjaGVzLiBUaGVzZSBjaGFuZ2VzIGRlYWwgd2l0aCBpbnRlcm5hbCBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQsIHBhZ2UgcGVybWlzc2lvbnMsIGFuZCBtb2R1bGUgbG9hZGluZy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBwYWdlIGZhdWx0cywgb3IgaW52YWxpZCBpbnN0cnVjdGlvbiBleGNlcHRpb25zLiBTdWNoIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIHN0YW5kYXJkIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIGFuZCBrZXJuZWwgYm9vdC9tb2R1bGUgbG9hZGluZyB0ZXN0cy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggc3RhY2svaGVhcCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQWxsIGFsbG9jYXRlZCBtb2R1bGUgbWVtb3J5IGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGUuZy4sIHZpYSBgbWVtc2V0YCBpbiBgbW9kdWxlX21lbW9yeV9hbGxvY2Agb3IgYGV4ZWNtZW1fZmlsbF90cmFwcGluZ19pbnNuc2ApLiBUaHVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgZXhlY3V0YWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyAoYGV4ZWNtZW1gKSBmb3Iga2VybmVsIG1vZHVsZXMsIHNwZWNpZmljYWxseSBjb25zb2xpZGF0aW5nIG1vZHVsZSB0ZXh0IGFuZCBpbml0IHRleHQgYWxsb2NhdGlvbnMsIG1lcmdpbmcgUExUIHNlY3Rpb25zIGZvciBBUk02NCwgYW5kIGFkanVzdGluZyBwYWdlIGF0dHJpYnV0ZXMgZm9yIFJPWCAoUmVhZC1Pbmx5IEV4ZWN1dGUpIGNhY2hlcy4gVGhlc2UgY2hhbmdlcyBkZWFsIHdpdGggaW50ZXJuYWwga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LCBwYWdlIHBlcm1pc3Npb25zLCBhbmQgbW9kdWxlIGxvYWRpbmcuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgcGFnZSBmYXVsdHMsIG9yIGludmFsaWQgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9ucy4gU3VjaCBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBzdGFuZGFyZCBwYWdlIGZhdWx0IGhhbmRsZXJzLCBhbmQga2VybmVsIGJvb3QvbW9kdWxlIGxvYWRpbmcgdGVzdHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb21wbGV4IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFsbCBhbGxvY2F0ZWQgbW9kdWxlIG1lbW9yeSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIChlLmcuLCB2aWEgYG1lbXNldGAgaW4gYG1vZHVsZV9tZW1vcnlfYWxsb2NgIG9yIGBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnNgKS4gVGh1cywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE0OjQ4OjI5LjM1MTEzMzU5OFoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjQ4MDYwNDM5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNT0RVTEVTXCIsXG4gICAgXCJEWU5BTUlDX0ZUUkFDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4ZWNtZW1fc3BsaXRcIixcbiAgICBcIm1vZHVsZV9lbWl0X3BsdF9lbnRyeVwiLFxuICAgIFwibW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwXCIsXG4gICAgXCJtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zXCIsXG4gICAgXCJleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnNcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHNlcmllcyBtb2RpZmllcyB0aGUgZXhlY3V0YWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBsb2dpYyAoYGV4ZWNtZW1gKSBmb3Iga2VybmVsIG1vZHVsZXMsIHNwZWNpZmljYWxseSBjb25zb2xpZGF0aW5nIG1vZHVsZSB0ZXh0IGFuZCBpbml0IHRleHQgYWxsb2NhdGlvbnMsIG1lcmdpbmcgUExUIHNlY3Rpb25zIGZvciBBUk02NCwgYW5kIGFkanVzdGluZyBwYWdlIGF0dHJpYnV0ZXMgZm9yIFJPWCAoUmVhZC1Pbmx5IEV4ZWN1dGUpIGNhY2hlcy4gVGhlc2UgY2hhbmdlcyBkZWFsIHdpdGggaW50ZXJuYWwga2VybmVsIG1lbW9yeSBtYW5hZ2VtZW50LCBwYWdlIHBlcm1pc3Npb25zLCBhbmQgbW9kdWxlIGxvYWRpbmcuIEFueSBidWdzIGludHJvZHVjZWQgYnkgdGhlc2UgY2hhbmdlcyB3b3VsZCBtYW5pZmVzdCBhcyBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgcGFnZSBmYXVsdHMsIG9yIGludmFsaWQgaW5zdHJ1Y3Rpb24gZXhjZXB0aW9ucy4gU3VjaCBpc3N1ZXMgYXJlIGVmZmVjdGl2ZWx5IGRldGVjdGVkIGJ5IEtBU0FOLCBzdGFuZGFyZCBwYWdlIGZhdWx0IGhhbmRsZXJzLCBhbmQga2VybmVsIGJvb3QvbW9kdWxlIGxvYWRpbmcgdGVzdHMuIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgbmV3IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvZXMgaXQgaW52b2x2ZSBjb21wbGV4IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBvciBsZWFrZWQuIEFsbCBhbGxvY2F0ZWQgbW9kdWxlIG1lbW9yeSBpcyBleHBsaWNpdGx5IGluaXRpYWxpemVkIChlLmcuLCB2aWEgYG1lbXNldGAgaW4gYG1vZHVsZV9tZW1vcnlfYWxsb2NgIG9yIGBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnNgKS4gVGh1cywgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgQVJDSF9IQVNfRVhFQ01FTV9ST1ggZm9yIGFybTY0LCBtb2RpZnlpbmcgaG93IG1vZHVsZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGJ5IHNwbGl0dGluZyBNT0RfSU5JVF9URVhUIGZyb20gTU9EX1RFWFQgd2hlbiBleGVjbWVtX2lzX3JveCBpcyB0cnVlLiBJdCBhbHNvIHVwZGF0ZXMgZnRyYWNlIHRyYW1wb2xpbmVzIGFuZCBQTFQgZ2VuZXJhdGlvbiBmb3IgbW9kdWxlcyBvbiBhcm02NCB0byBhY2NvbW1vZGF0ZSB0aGVzZSBjaGFuZ2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIChtb2R1bGUgbG9hZGluZywgZXhlY3V0YWJsZSBtZW1vcnkgYWxsb2NhdGlvbiwgZnRyYWNlKSB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo0ODoyOS4zNTExMzkwNDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDkzNjI4MjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBjYzgyYzc3MjA2ZWI5NWFjMWY0ZDQ1YjhmMzVjYmY4ODFjODA2ZTEzXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBTYXQgQXVnIDIyIDE0OjQ4OjI3IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xcbmluZGV4IGIzYWZlMDY4ODkxOWIuLjA4MGI5N2IwYmJkNWUgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9LY29uZmlnXFxuKysrIGIvYXJjaC9hcm02NC9LY29uZmlnXFxuQEAgLTI3LDYgKzI3LDcgQEAgY29uZmlnIEFSTTY0XFxuIFxcdHNlbGVjdCBBUkNIX0hBU19ETUFfT1BTIGlmIFhFTlxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfRE1BX1BSRVBfQ09IRVJFTlRcXG4gXFx0c2VsZWN0IEFSQ0hfSEFTX0FDUElfVEFCTEVfVVBHUkFERSBpZiBBQ1BJXFxuK1xcdHNlbGVjdCBBUkNIX0hBU19FWEVDTUVNX1JPWFxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfRkFTVF9NVUxUSVBMSUVSXFxuIFxcdHNlbGVjdCBBUkNIX0hBU19GT1JUSUZZX1NPVVJDRVxcbiBcXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaFxcbmluZGV4IGZiOWI4OGVlYmViMTUuLjkzMjhmYWRiNGE5NTkgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaFxcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmhcXG5AQCAtMTUsMTEgKzE1LDkgQEAgc3RydWN0IG1vZF9wbHRfc2VjIHtcXG4gXFxuIHN0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYyB7XFxuIFxcdHN0cnVjdCBtb2RfcGx0X3NlY1xcdGNvcmU7XFxuLVxcdHN0cnVjdCBtb2RfcGx0X3NlY1xcdGluaXQ7XFxuIFxcbiBcXHQvKiBmb3IgQ09ORklHX0RZTkFNSUNfRlRSQUNFICovXFxuIFxcdHN0cnVjdCBwbHRfZW50cnlcXHQqZnRyYWNlX3RyYW1wb2xpbmVzO1xcbi1cXHRzdHJ1Y3QgcGx0X2VudHJ5XFx0KmluaXRfZnRyYWNlX3RyYW1wb2xpbmVzO1xcbiB9O1xcbiBcXG4gdTY0IG1vZHVsZV9lbWl0X3BsdF9lbnRyeShzdHJ1Y3QgbW9kdWxlICptb2QsIEVsZjY0X1NoZHIgKnNlY2hkcnMsXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmxkcy5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmhcXG5pbmRleCAwYjNhYWNkMjJjNTkwLi45NTU0MGU5NTZiNDE5IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmxkcy5oXFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmhcXG5AQCAtMSw4ICsxLDUgQEBcXG4gU0VDVElPTlMge1xcbiBcXHQucGx0IDAgOiB7IEJZVEUoMCkgfVxcbi1cXHQuaW5pdC5wbHQgMCA6IHsgQllURSgwKSB9XFxuLVxcdC50ZXh0LmZ0cmFjZV90cmFtcG9saW5lIDAgOiB7IEJZVEUoMCkgfVxcbi1cXHQuaW5pdC50ZXh0LmZ0cmFjZV90cmFtcG9saW5lIDAgOiB7IEJZVEUoMCkgfVxcbiBcXG4gI2lmZGVmIENPTkZJR19LQVNBTl9TV19UQUdTXFxuIFxcdC8qXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvZnRyYWNlLmNcXG5pbmRleCA1YTE1NTRhNDQxNjI4Li5iNTZkYTI0YzFiZTRmIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvZnRyYWNlLmNcXG5AQCAtMjU4LDE3ICsyNTgsMTAgQEAgaW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxcbiBcXHRyZXR1cm4gZnRyYWNlX21vZGlmeV9jb2RlKHBjLCAwLCBuZXcsIGZhbHNlKTtcXG4gfVxcbiBcXG4tc3RhdGljIHN0cnVjdCBwbHRfZW50cnkgKmdldF9mdHJhY2VfcGx0KHN0cnVjdCBtb2R1bGUgKm1vZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbitzdGF0aWMgc3RydWN0IHBsdF9lbnRyeSAqZ2V0X2Z0cmFjZV9wbHQoc3RydWN0IG1vZHVsZSAqbW9kKVxcbiB7XFxuICNpZmRlZiBDT05GSUdfTU9EVUxFU1xcbi1cXHRzdHJ1Y3QgcGx0X2VudHJ5ICpwbHQgPSBOVUxMO1xcbi1cXG4tXFx0aWYgKHdpdGhpbl9tb2R1bGVfbWVtX3R5cGUoYWRkciwgbW9kLCBNT0RfSU5JVF9URVhUKSlcXG4tXFx0XFx0cGx0ID0gbW9kLVxcdTAwM2VhcmNoLmluaXRfZnRyYWNlX3RyYW1wb2xpbmVzO1xcbi1cXHRlbHNlIGlmICh3aXRoaW5fbW9kdWxlX21lbV90eXBlKGFkZHIsIG1vZCwgTU9EX1RFWFQpKVxcbi1cXHRcXHRwbHQgPSBtb2QtXFx1MDAzZWFyY2guZnRyYWNlX3RyYW1wb2xpbmVzO1xcbi1cXHRlbHNlXFxuLVxcdFxcdHJldHVybiBOVUxMO1xcbitcXHRzdHJ1Y3QgcGx0X2VudHJ5ICpwbHQgPSBtb2QtXFx1MDAzZWFyY2guZnRyYWNlX3RyYW1wb2xpbmVzO1xcbiBcXG4gXFx0cmV0dXJuIFxcdTAwMjZwbHRbRlRSQUNFX1BMVF9JRFhdO1xcbiAjZWxzZVxcbkBAIC0zMzksNyArMzMyLDcgQEAgc3RhdGljIGJvb2wgZnRyYWNlX2ZpbmRfY2FsbGFibGVfYWRkcihzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLFxcbiBcXHRpZiAoV0FSTl9PTighbW9kKSlcXG4gXFx0XFx0cmV0dXJuIGZhbHNlO1xcbiBcXG4tXFx0cGx0ID0gZ2V0X2Z0cmFjZV9wbHQobW9kLCBwYyk7XFxuK1xcdHBsdCA9IGdldF9mdHJhY2VfcGx0KG1vZCk7XFxuIFxcdGlmICghcGx0KSB7XFxuIFxcdFxcdHByX2VycihcXFwiZnRyYWNlOiBubyBtb2R1bGUgUExUIGZvciAlcHNcXFxcblxcXCIsICh2b2lkICopKmFkZHIpO1xcbiBcXHRcXHRyZXR1cm4gZmFsc2U7XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jXFxuaW5kZXggN2FmZDM3MGRhOWY0OC4uNjkwMGQyMjQyZjFiZSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuY1xcbkBAIC03MCw4ICs3MCw3IEBAIHU2NCBtb2R1bGVfZW1pdF9wbHRfZW50cnkoc3RydWN0IG1vZHVsZSAqbW9kLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxcbiBcXHRcXHRcXHQgIHZvaWQgKmxvYywgY29uc3QgRWxmNjRfUmVsYSAqcmVsYSxcXG4gXFx0XFx0XFx0ICBFbGY2NF9TeW0gKnN5bSlcXG4ge1xcbi1cXHRzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9ICF3aXRoaW5fbW9kdWxlX2luaXQoKHVuc2lnbmVkIGxvbmcpbG9jLCBtb2QpID9cXG4tXFx0XFx0XFx0XFx0XFx0XFx0XFx1MDAyNm1vZC1cXHUwMDNlYXJjaC5jb3JlIDogXFx1MDAyNm1vZC1cXHUwMDNlYXJjaC5pbml0O1xcbitcXHRzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9IFxcdTAwMjZtb2QtXFx1MDAzZWFyY2guY29yZTtcXG4gXFx0c3RydWN0IHBsdF9lbnRyeSAqcGx0ID0gKHN0cnVjdCBwbHRfZW50cnkgKilzZWNoZHJzW3BsdHNlYy1cXHUwMDNlcGx0X3NobmR4XS5zaF9hZGRyO1xcbiBcXHRpbnQgaSA9IHBsdHNlYy1cXHUwMDNlcGx0X251bV9lbnRyaWVzO1xcbiBcXHRpbnQgaiA9IGkgLSAxO1xcbkBAIC0xMDEsOCArMTAwLDcgQEAgdTY0IG1vZHVsZV9lbWl0X3BsdF9lbnRyeShzdHJ1Y3QgbW9kdWxlICptb2QsIEVsZjY0X1NoZHIgKnNlY2hkcnMsXFxuIHU2NCBtb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnAoc3RydWN0IG1vZHVsZSAqbW9kLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxcbiBcXHRcXHRcXHRcXHR2b2lkICpsb2MsIHU2NCB2YWwpXFxuIHtcXG4tXFx0c3RydWN0IG1vZF9wbHRfc2VjICpwbHRzZWMgPSAhd2l0aGluX21vZHVsZV9pbml0KCh1bnNpZ25lZCBsb25nKWxvYywgbW9kKSA/XFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdTAwMjZtb2QtXFx1MDAzZWFyY2guY29yZSA6IFxcdTAwMjZtb2QtXFx1MDAzZWFyY2guaW5pdDtcXG4rXFx0c3RydWN0IG1vZF9wbHRfc2VjICpwbHRzZWMgPSBcXHUwMDI2bW9kLVxcdTAwM2VhcmNoLmNvcmU7XFxuIFxcdHN0cnVjdCBwbHRfZW50cnkgKnBsdCA9IChzdHJ1Y3QgcGx0X2VudHJ5ICopc2VjaGRyc1twbHRzZWMtXFx1MDAzZXBsdF9zaG5keF0uc2hfYWRkcjtcXG4gXFx0aW50IGkgPSBwbHRzZWMtXFx1MDAzZXBsdF9udW1fZW50cmllcysrO1xcbiBcXHR1MzIgYnI7XFxuQEAgLTE2OSwxNyArMTY3LDE3IEBAIHN0YXRpYyB1bnNpZ25lZCBpbnQgY291bnRfcGx0cyhFbGY2NF9TeW0gKnN5bXMsIEVsZjY0X1JlbGEgKnJlbGEsIGludCBudW0sXFxuIFxcdFxcdGNhc2UgUl9BQVJDSDY0X0NBTEwyNjpcXG4gXFx0XFx0XFx0LypcXG4gXFx0XFx0XFx0ICogV2Ugb25seSBoYXZlIHRvIGNvbnNpZGVyIGJyYW5jaCB0YXJnZXRzIHRoYXQgcmVzb2x2ZVxcbi1cXHRcXHRcXHQgKiB0byBzeW1ib2xzIHRoYXQgYXJlIGRlZmluZWQgaW4gYSBkaWZmZXJlbnQgc2VjdGlvbi5cXG4rXFx0XFx0XFx0ICogdG8gc3ltYm9scyB0aGF0IGFyZSBub3QgZGVmaW5lZCBpbiB0aGUgc2FtZSBtb2R1bGUuXFxuIFxcdFxcdFxcdCAqIFRoaXMgaXMgbm90IHNpbXBseSBhIGhldXJpc3RpYywgaXQgaXMgYSBmdW5kYW1lbnRhbFxcbiBcXHRcXHRcXHQgKiBsaW1pdGF0aW9uLCBzaW5jZSB0aGVyZSBpcyBubyBndWFyYW50ZWVkIHdheSB0byBlbWl0XFxuIFxcdFxcdFxcdCAqIFBMVCBlbnRyaWVzIHN1ZmZpY2llbnRseSBjbG9zZSB0byB0aGUgYnJhbmNoIGlmIHRoZVxcbiBcXHRcXHRcXHQgKiBzZWN0aW9uIHNpemUgZXhjZWVkcyB0aGUgcmFuZ2Ugb2YgYSBicmFuY2hcXG4gXFx0XFx0XFx0ICogaW5zdHJ1Y3Rpb24uIFNvIGlnbm9yZSByZWxvY2F0aW9ucyBhZ2FpbnN0IGRlZmluZWRcXG4tXFx0XFx0XFx0ICogc3ltYm9scyBpZiB0aGV5IGxpdmUgaW4gdGhlIHNhbWUgc2VjdGlvbiBhcyB0aGVcXG4rXFx0XFx0XFx0ICogc3ltYm9scyBpZiB0aGV5IGxpdmUgaW4gdGhlIHNhbWUgbW9kdWxlIGFzIHRoZVxcbiBcXHRcXHRcXHQgKiByZWxvY2F0aW9uIHRhcmdldC5cXG4gXFx0XFx0XFx0ICovXFxuIFxcdFxcdFxcdHMgPSBzeW1zICsgRUxGNjRfUl9TWU0ocmVsYVtpXS5yX2luZm8pO1xcbi1cXHRcXHRcXHRpZiAocy1cXHUwMDNlc3Rfc2huZHggPT0gZHN0aWR4KVxcbitcXHRcXHRcXHRpZiAocy1cXHUwMDNlc3Rfc2huZHggIT0gU0hOX1VOREVGKVxcbiBcXHRcXHRcXHRcXHRicmVhaztcXG4gXFxuIFxcdFxcdFxcdC8qXFxuQEAgLTI3NywxMyArMjc1LDE0IEBAIHN0YXRpYyBpbnQgcGFydGl0aW9uX2JyYW5jaF9wbHRfcmVsYXMoRWxmNjRfU3ltICpzeW1zLCBFbGY2NF9SZWxhICpyZWxhLFxcbiBcXHRyZXR1cm4gaTtcXG4gfVxcbiBcXG4rc3RhdGljIGNvbnN0IGludCBmdHJhY2VfcGx0cyA9IElTX0VOQUJMRUQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKSA/IE5SX0ZUUkFDRV9QTFRTIDogMDtcXG4rXFxuIGludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICplaGRyLCBFbGZfU2hkciAqc2VjaGRycyxcXG4gXFx0XFx0XFx0ICAgICAgY2hhciAqc2Vjc3RyaW5ncywgc3RydWN0IG1vZHVsZSAqbW9kKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgY29yZV9wbHRzID0gMDtcXG4tXFx0dW5zaWduZWQgbG9uZyBpbml0X3BsdHMgPSAwO1xcbitcXHR1bnNpZ25lZCBsb25nIGNvcmVfcGx0cyA9IGZ0cmFjZV9wbHRzO1xcbiBcXHRFbGY2NF9TeW0gKnN5bXMgPSBOVUxMO1xcbi1cXHRFbGZfU2hkciAqcGx0c2VjLCAqdHJhbXAgPSBOVUxMLCAqaW5pdF90cmFtcCA9IE5VTEw7XFxuK1xcdEVsZl9TaGRyICpwbHRzZWM7XFxuIFxcdGludCBpO1xcbiBcXG4gXFx0LypcXG5AQCAtMjkzLDIwICsyOTIsMTIgQEAgaW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxcbiBcXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgZWhkci1cXHUwMDNlZV9zaG51bTsgaSsrKSB7XFxuIFxcdFxcdGlmICghc3RyY21wKHNlY3N0cmluZ3MgKyBzZWNoZHJzW2ldLnNoX25hbWUsIFxcXCIucGx0XFxcIikpXFxuIFxcdFxcdFxcdG1vZC1cXHUwMDNlYXJjaC5jb3JlLnBsdF9zaG5keCA9IGk7XFxuLVxcdFxcdGVsc2UgaWYgKCFzdHJjbXAoc2Vjc3RyaW5ncyArIHNlY2hkcnNbaV0uc2hfbmFtZSwgXFxcIi5pbml0LnBsdFxcXCIpKVxcbi1cXHRcXHRcXHRtb2QtXFx1MDAzZWFyY2guaW5pdC5wbHRfc2huZHggPSBpO1xcbi1cXHRcXHRlbHNlIGlmICghc3RyY21wKHNlY3N0cmluZ3MgKyBzZWNoZHJzW2ldLnNoX25hbWUsXFxuLVxcdFxcdFxcdFxcdCBcXFwiLnRleHQuZnRyYWNlX3RyYW1wb2xpbmVcXFwiKSlcXG4tXFx0XFx0XFx0dHJhbXAgPSBzZWNoZHJzICsgaTtcXG4tXFx0XFx0ZWxzZSBpZiAoIXN0cmNtcChzZWNzdHJpbmdzICsgc2VjaGRyc1tpXS5zaF9uYW1lLFxcbi1cXHRcXHRcXHRcXHQgXFxcIi5pbml0LnRleHQuZnRyYWNlX3RyYW1wb2xpbmVcXFwiKSlcXG4tXFx0XFx0XFx0aW5pdF90cmFtcCA9IHNlY2hkcnMgKyBpO1xcbiBcXHRcXHRlbHNlIGlmIChzZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX1NZTVRBQilcXG4gXFx0XFx0XFx0c3ltcyA9IChFbGY2NF9TeW0gKilzZWNoZHJzW2ldLnNoX2FkZHI7XFxuIFxcdH1cXG4gXFxuLVxcdGlmICghbW9kLVxcdTAwM2VhcmNoLmNvcmUucGx0X3NobmR4IHx8ICFtb2QtXFx1MDAzZWFyY2guaW5pdC5wbHRfc2huZHgpIHtcXG4tXFx0XFx0cHJfZXJyKFxcXCIlczogbW9kdWxlIFBMVCBzZWN0aW9uKHMpIG1pc3NpbmdcXFxcblxcXCIsIG1vZC1cXHUwMDNlbmFtZSk7XFxuK1xcdGlmICghbW9kLVxcdTAwM2VhcmNoLmNvcmUucGx0X3NobmR4KSB7XFxuK1xcdFxcdHByX2VycihcXFwiJXM6IG1vZHVsZSBQTFQgc2VjdGlvbiBtaXNzaW5nXFxcXG5cXFwiLCBtb2QtXFx1MDAzZW5hbWUpO1xcbiBcXHRcXHRyZXR1cm4gLUVOT0VYRUM7XFxuIFxcdH1cXG4gXFx0aWYgKCFzeW1zKSB7XFxuQEAgLTMzNSwxMiArMzI2LDggQEAgaW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxcbiBcXHRcXHRpZiAobmVudHMpXFxuIFxcdFxcdFxcdHNvcnQocmVscywgbmVudHMsIHNpemVvZihFbGY2NF9SZWxhKSwgY21wX3JlbGEsIE5VTEwpO1xcbiBcXG4tXFx0XFx0aWYgKCFtb2R1bGVfaW5pdF9sYXlvdXRfc2VjdGlvbihzZWNzdHJpbmdzICsgZHN0c2VjLVxcdTAwM2VzaF9uYW1lKSlcXG4tXFx0XFx0XFx0Y29yZV9wbHRzICs9IGNvdW50X3BsdHMoc3ltcywgcmVscywgbnVtcmVscyxcXG4tXFx0XFx0XFx0XFx0XFx0XFx0c2VjaGRyc1tpXS5zaF9pbmZvLCBkc3RzZWMpO1xcbi1cXHRcXHRlbHNlXFxuLVxcdFxcdFxcdGluaXRfcGx0cyArPSBjb3VudF9wbHRzKHN5bXMsIHJlbHMsIG51bXJlbHMsXFxuLVxcdFxcdFxcdFxcdFxcdFxcdHNlY2hkcnNbaV0uc2hfaW5mbywgZHN0c2VjKTtcXG4rXFx0XFx0Y29yZV9wbHRzICs9IGNvdW50X3BsdHMoc3ltcywgcmVscywgbnVtcmVscywgc2VjaGRyc1tpXS5zaF9pbmZvLFxcbitcXHRcXHRcXHRcXHRcXHRkc3RzZWMpO1xcbiBcXHR9XFxuIFxcbiBcXHRwbHRzZWMgPSBzZWNoZHJzICsgbW9kLVxcdTAwM2VhcmNoLmNvcmUucGx0X3NobmR4O1xcbkBAIC0zNDgsMzAgKzMzNSw4IEBAIGludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICplaGRyLCBFbGZfU2hkciAqc2VjaGRycyxcXG4gXFx0cGx0c2VjLVxcdTAwM2VzaF9mbGFncyA9IFNIRl9FWEVDSU5TVFIgfCBTSEZfQUxMT0M7XFxuIFxcdHBsdHNlYy1cXHUwMDNlc2hfYWRkcmFsaWduID0gTDFfQ0FDSEVfQllURVM7XFxuIFxcdHBsdHNlYy1cXHUwMDNlc2hfc2l6ZSA9IChjb3JlX3BsdHMgICsgMSkgKiBzaXplb2Yoc3RydWN0IHBsdF9lbnRyeSk7XFxuLVxcdG1vZC1cXHUwMDNlYXJjaC5jb3JlLnBsdF9udW1fZW50cmllcyA9IDA7XFxuK1xcdG1vZC1cXHUwMDNlYXJjaC5jb3JlLnBsdF9udW1fZW50cmllcyA9IGZ0cmFjZV9wbHRzO1xcbiBcXHRtb2QtXFx1MDAzZWFyY2guY29yZS5wbHRfbWF4X2VudHJpZXMgPSBjb3JlX3BsdHM7XFxuIFxcbi1cXHRwbHRzZWMgPSBzZWNoZHJzICsgbW9kLVxcdTAwM2VhcmNoLmluaXQucGx0X3NobmR4O1xcbi1cXHRwbHRzZWMtXFx1MDAzZXNoX3R5cGUgPSBTSFRfTk9CSVRTO1xcbi1cXHRwbHRzZWMtXFx1MDAzZXNoX2ZsYWdzID0gU0hGX0VYRUNJTlNUUiB8IFNIRl9BTExPQztcXG4tXFx0cGx0c2VjLVxcdTAwM2VzaF9hZGRyYWxpZ24gPSBMMV9DQUNIRV9CWVRFUztcXG4tXFx0cGx0c2VjLVxcdTAwM2VzaF9zaXplID0gKGluaXRfcGx0cyArIDEpICogc2l6ZW9mKHN0cnVjdCBwbHRfZW50cnkpO1xcbi1cXHRtb2QtXFx1MDAzZWFyY2guaW5pdC5wbHRfbnVtX2VudHJpZXMgPSAwO1xcbi1cXHRtb2QtXFx1MDAzZWFyY2guaW5pdC5wbHRfbWF4X2VudHJpZXMgPSBpbml0X3BsdHM7XFxuLVxcbi1cXHRpZiAodHJhbXApIHtcXG4tXFx0XFx0dHJhbXAtXFx1MDAzZXNoX3R5cGUgPSBTSFRfTk9CSVRTO1xcbi1cXHRcXHR0cmFtcC1cXHUwMDNlc2hfZmxhZ3MgPSBTSEZfRVhFQ0lOU1RSIHwgU0hGX0FMTE9DO1xcbi1cXHRcXHR0cmFtcC1cXHUwMDNlc2hfYWRkcmFsaWduID0gX19hbGlnbm9mX18oc3RydWN0IHBsdF9lbnRyeSk7XFxuLVxcdFxcdHRyYW1wLVxcdTAwM2VzaF9zaXplID0gTlJfRlRSQUNFX1BMVFMgKiBzaXplb2Yoc3RydWN0IHBsdF9lbnRyeSk7XFxuLVxcdH1cXG4tXFxuLVxcdGlmIChpbml0X3RyYW1wKSB7XFxuLVxcdFxcdGluaXRfdHJhbXAtXFx1MDAzZXNoX3R5cGUgPSBTSFRfTk9CSVRTO1xcbi1cXHRcXHRpbml0X3RyYW1wLVxcdTAwM2VzaF9mbGFncyA9IFNIRl9FWEVDSU5TVFIgfCBTSEZfQUxMT0M7XFxuLVxcdFxcdGluaXRfdHJhbXAtXFx1MDAzZXNoX2FkZHJhbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCBwbHRfZW50cnkpO1xcbi1cXHRcXHRpbml0X3RyYW1wLVxcdTAwM2VzaF9zaXplID0gTlJfRlRSQUNFX1BMVFMgKiBzaXplb2Yoc3RydWN0IHBsdF9lbnRyeSk7XFxuLVxcdH1cXG4tXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmNcXG5pbmRleCAyNGFkYjU4MWFmMGViLi42MjBjMmI3MDExNWU1IDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jXFxuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmNcXG5AQCAtNDU0LDI5ICs0NTQsMTEgQEAgc3RhdGljIGludCBtb2R1bGVfaW5pdF9mdHJhY2VfcGx0KGNvbnN0IEVsZl9FaGRyICpoZHIsXFxuIFxcdFxcdFxcdFxcdCAgc3RydWN0IG1vZHVsZSAqbW9kKVxcbiB7XFxuICNpZiBkZWZpbmVkKENPTkZJR19EWU5BTUlDX0ZUUkFDRSlcXG4tXFx0Y29uc3QgRWxmX1NoZHIgKnM7XFxuLVxcdHN0cnVjdCBwbHRfZW50cnkgKnBsdHM7XFxuLVxcbi1cXHRzID0gZmluZF9zZWN0aW9uKGhkciwgc2VjaGRycywgXFxcIi50ZXh0LmZ0cmFjZV90cmFtcG9saW5lXFxcIik7XFxuLVxcdGlmICghcylcXG4tXFx0XFx0cmV0dXJuIC1FTk9FWEVDO1xcbi1cXG4tXFx0cGx0cyA9ICh2b2lkICopcy1cXHUwMDNlc2hfYWRkcjtcXG4rXFx0c3RydWN0IHBsdF9lbnRyeSAqcGx0cyA9ICh2b2lkICopc2VjaGRyc1ttb2QtXFx1MDAzZWFyY2guY29yZS5wbHRfc2huZHhdLnNoX2FkZHI7XFxuIFxcbiBcXHRfX2luaXRfcGx0KFxcdTAwMjZwbHRzW0ZUUkFDRV9QTFRfSURYXSwgRlRSQUNFX0FERFIpO1xcbiBcXG4gXFx0bW9kLVxcdTAwM2VhcmNoLmZ0cmFjZV90cmFtcG9saW5lcyA9IHBsdHM7XFxuLVxcbi1cXHRzID0gZmluZF9zZWN0aW9uKGhkciwgc2VjaGRycywgXFxcIi5pbml0LnRleHQuZnRyYWNlX3RyYW1wb2xpbmVcXFwiKTtcXG4tXFx0aWYgKCFzKVxcbi1cXHRcXHRyZXR1cm4gLUVOT0VYRUM7XFxuLVxcbi1cXHRwbHRzID0gKHZvaWQgKilzLVxcdTAwM2VzaF9hZGRyO1xcbi1cXG4tXFx0X19pbml0X3BsdChcXHUwMDI2cGx0c1tGVFJBQ0VfUExUX0lEWF0sIEZUUkFDRV9BRERSKTtcXG4tXFxuLVxcdG1vZC1cXHUwMDNlYXJjaC5pbml0X2Z0cmFjZV90cmFtcG9saW5lcyA9IHBsdHM7XFxuLVxcbiAjZW5kaWZcXG4gXFx0cmV0dXJuIDA7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9pbml0LmMgYi9hcmNoL2FybTY0L21tL2luaXQuY1xcbmluZGV4IDk3OTg3Zjg1MGEzM2MuLmU2Yzk4MDQ1MDQ2ZTIgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9tbS9pbml0LmNcXG4rKysgYi9hcmNoL2FybTY0L21tL2luaXQuY1xcbkBAIC01MzEsNyArNTMxLDggQEAgc3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbiBcXHRcXHRcXHRbRVhFQ01FTV9ERUZBVUxUXSA9IHtcXG4gXFx0XFx0XFx0XFx0LnN0YXJ0XFx0PSBzdGFydCxcXG4gXFx0XFx0XFx0XFx0LmVuZFxcdD0gZW5kLFxcbi1cXHRcXHRcXHRcXHQucGdwcm90XFx0PSBQQUdFX0tFUk5FTCxcXG4rXFx0XFx0XFx0XFx0LnBncHJvdFxcdD0gUEFHRV9LRVJORUxfUk9YLFxcbitcXHRcXHRcXHRcXHQuZmxhZ3NcXHQ9IEVYRUNNRU1fUk9YX0NBQ0hFLFxcbiBcXHRcXHRcXHRcXHQuYWxpZ25tZW50ID0gMSxcXG4gXFx0XFx0XFx0XFx0LmZhbGxiYWNrX3N0YXJ0XFx0PSBmYWxsYmFja19zdGFydCxcXG4gXFx0XFx0XFx0XFx0LmZhbGxiYWNrX2VuZFxcdD0gZmFsbGJhY2tfZW5kLFxcbkBAIC01NDgsOSArNTQ5LDI1IEBAIHN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcXG4gXFx0XFx0XFx0XFx0LnBncHJvdFxcdD0gUEFHRV9LRVJORUwsXFxuIFxcdFxcdFxcdFxcdC5hbGlnbm1lbnQgPSAxLFxcbiBcXHRcXHRcXHR9LFxcbitcXHRcXHRcXHRbRVhFQ01FTV9NT0RVTEVfREFUQV0gPSB7XFxuK1xcdFxcdFxcdFxcdC5zdGFydFxcdD0gc3RhcnQsXFxuK1xcdFxcdFxcdFxcdC5lbmRcXHQ9IGVuZCxcXG4rXFx0XFx0XFx0XFx0LnBncHJvdFxcdD0gUEFHRV9LRVJORUwsXFxuK1xcdFxcdFxcdFxcdC5hbGlnbm1lbnQgPSAxLFxcbitcXHRcXHRcXHRcXHQuZmFsbGJhY2tfc3RhcnRcXHQ9IGZhbGxiYWNrX3N0YXJ0LFxcbitcXHRcXHRcXHRcXHQuZmFsbGJhY2tfZW5kXFx0PSBmYWxsYmFja19lbmQsXFxuK1xcdFxcdFxcdH0sXFxuIFxcdFxcdH0sXFxuIFxcdH07XFxuIFxcbitcXHRpZiAoIXN5c3RlbV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KCkpXFxuK1xcdFxcdGV4ZWNtZW1faW5mby5yYW5nZXNbRVhFQ01FTV9ERUZBVUxUXS5mbGFncyB8PSBFWEVDTUVNX05PX0hVR0VfVk1BUDtcXG4rXFxuIFxcdHJldHVybiBcXHUwMDI2ZXhlY21lbV9pbmZvO1xcbiB9XFxuK1xcbit2b2lkIGV4ZWNtZW1fZmlsbF90cmFwcGluZ19pbnNucyh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxcbit7XFxuK1xcdG1lbXNldDMyKHB0ciwgQUFSQ0g2NF9CUkVBS19GQVVMVCwgc2l6ZSAvIHNpemVvZihfX2xlMzIpKTtcXG4rfVxcbiAjZW5kaWYgLyogQ09ORklHX0VYRUNNRU0gKi9cXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jIGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXFxuaW5kZXggYmJlOThhYzlhZDhjNi4uMjBmZjljYjI3M2MxMSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmNcXG4rKysgYi9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmNcXG5AQCAtMTY5LDggKzE2OSw2IEBAIHN0YXRpYyBpbnQgY2hhbmdlX21lbW9yeV9jb21tb24odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsXFxuIFxcdCAqIHdlIGFyZSBvcGVyYXRpbmcgb24gZG9lcyBub3QgcmVzdWx0IGluIHN1Y2ggc3BsaXR0aW5nLlxcbiBcXHQgKlxcbiBcXHQgKiBMZXQncyByZXN0cmljdCBvdXJzZWx2ZXMgdG8gbWFwcGluZ3MgY3JlYXRlZCBieSB2bWFsbG9jIChvciB2bWFwKS5cXG4tXFx0ICogRGlzYWxsb3cgVk1fQUxMT1dfSFVHRV9WTUFQIG1hcHBpbmdzIHRvIGd1YXJhbnRlZSB0aGF0IG9ubHkgcGFnZVxcbi1cXHQgKiBtYXBwaW5ncyBhcmUgdXBkYXRlZCBhbmQgc3BsaXR0aW5nIGlzIG5ldmVyIG5lZWRlZC5cXG4gXFx0ICpcXG4gXFx0ICogU28gY2hlY2sgd2hldGhlciB0aGUgW2FkZHIsIGFkZHIgKyBzaXplKSBpbnRlcnZhbCBpcyBlbnRpcmVseVxcbiBcXHQgKiBjb3ZlcmVkIGJ5IHByZWNpc2VseSBvbmUgVk0gYXJlYSB0aGF0IGhhcyB0aGUgVk1fQUxMT0MgZmxhZyBzZXQuXFxuQEAgLTE3OSw3ICsxNzcsMTYgQEAgc3RhdGljIGludCBjaGFuZ2VfbWVtb3J5X2NvbW1vbih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyxcXG4gXFx0aWYgKCFhcmVhIHx8XFxuIFxcdCAgICAoKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKCh2b2lkICopZW5kKSBcXHUwMDNlXFxuIFxcdCAgICAgKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKGFyZWEtXFx1MDAzZWFkZHIpICsgYXJlYS1cXHUwMDNlc2l6ZSkgfHxcXG4tXFx0ICAgICgoYXJlYS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiAoVk1fQUxMT0MgfCBWTV9BTExPV19IVUdFX1ZNQVApKSAhPSBWTV9BTExPQykpXFxuK1xcdCAgICAhKGFyZWEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgVk1fQUxMT0MpKVxcbisgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIERpc2FsbG93IFZNX0FMTE9XX0hVR0VfVk1BUCBtYXBwaW5ncyB1bmxlc3MgdGhlIHJlZ2lvbiBpcyBQTURcXG4rXFx0ICogYWxpZ25lZCwgb3Igc3BsaXR0aW5nIGxpdmUgaHVnZSBtYXBwaW5ncyBpcyBzdXBwb3J0ZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoKGFyZWEtXFx1MDAzZWZsYWdzIFxcdTAwMjYgVk1fQUxMT1dfSFVHRV9WTUFQKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAoKHN0YXJ0ICUgUE1EX1NJWkUpIHx8IChzaXplICUgUE1EX1NJWkUpKSBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICBXQVJOX09OX09OQ0UoIXN5c3RlbV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KCkpKVxcbiBcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4gXFxuIFxcdGlmICghbnVtcGFnZXMpXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXhlY21lbS5oIGIvaW5jbHVkZS9saW51eC9leGVjbWVtLmhcXG5pbmRleCA3ZGUyMjkxMzRlMzA3Li5iMDQ5MjZmM2ZmZjI2IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvZXhlY21lbS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9leGVjbWVtLmhcXG5AQCAtNDgsMTAgKzQ4LDEyIEBAIGVudW0gZXhlY21lbV90eXBlIHtcXG4gICogZW51bSBleGVjbWVtX3JhbmdlX2ZsYWdzIC0gb3B0aW9ucyBmb3IgZXhlY3V0YWJsZSBtZW1vcnkgYWxsb2NhdGlvbnNcXG4gICogQEVYRUNNRU1fS0FTQU5fU0hBRE9XOlxcdGFsbG9jYXRlIGthc2FuIHNoYWRvd1xcbiAgKiBARVhFQ01FTV9ST1hfQ0FDSEU6XFx0XFx0YWxsb2NhdGlvbnMgc2hvdWxkIHVzZSBST1ggY2FjaGUgb2YgaHVnZSBwYWdlc1xcbisgKiBARVhFQ01FTV9OT19IVUdFX1ZNQVA6XFx0Y2FjaGUgYWxsb2NhdGlvbnMgbXVzdCBhdm9pZCBodWdlIHZtYXBwaW5nc1xcbiAgKi9cXG4gZW51bSBleGVjbWVtX3JhbmdlX2ZsYWdzIHtcXG4gXFx0RVhFQ01FTV9LQVNBTl9TSEFET1dcXHQ9ICgxIFxcdTAwM2NcXHUwMDNjIDApLFxcbiBcXHRFWEVDTUVNX1JPWF9DQUNIRVxcdD0gKDEgXFx1MDAzY1xcdTAwM2MgMSksXFxuK1xcdEVYRUNNRU1fTk9fSFVHRV9WTUFQXFx0PSAoMSBcXHUwMDNjXFx1MDAzYyAyKSxcXG4gfTtcXG4gXFxuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfRVhFQ01FTV9ST1hcXG5AQCAtMTc4LDYgKzE4MCwxNSBAQCB2b2lkIGV4ZWNtZW1fZnJlZSh2b2lkICpwdHIpO1xcbiBcXG4gREVGSU5FX0ZSRUUoZXhlY21lbSwgdm9pZCAqLCBpZiAoX1QpIGV4ZWNtZW1fZnJlZShfVCkpO1xcbiBcXG4rLyoqXFxuKyAqIGV4ZWNtZW1fc3BsaXQgLSBhbGxvY2F0ZSBzcGFjZSBmcm9tIGFuIGV4aXN0aW5nIGV4ZWNtZW0gY2FjaGUgYWxsb2NhdGlvblxcbisgKiBAcHRyICAtIHRoZSBleGlzdGluZyBleGVjbWVtIGNhY2hlIGFsbG9jYXRpb25cXG4rICogQHNpemUgLSB0aGUgc2l6ZSB0byBjYXJ2ZSBvdXQgZnJvbSB0aGUgZXhpc3RpbmcgYWxsb2NhdGlvblxcbisgKlxcbisgKiBSZXR1cm46IHRoZSBhZGRyZXNzIG9mIHRoZSBjYXJ2ZWQgb3V0IGFsbG9jYXRpb24sIG9yICVOVUxMIG9uIGZhaWx1cmUuXFxuKyAqL1xcbit2b2lkICpleGVjbWVtX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpO1xcbitcXG4gI2lmZGVmIENPTkZJR19NTVVcXG4gLyoqXFxuICAqIGV4ZWNtZW1fdm1hcCAtIGNyZWF0ZSB2aXJ0dWFsIG1hcHBpbmcgZm9yIEVYRUNNRU1fTU9EVUxFX0RBVEEgbWVtb3J5XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmggYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oXFxuaW5kZXggNzU2NjgxNWZhYmJlOC4uMDMzNmE0NjczM2RkOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaFxcbkBAIC0zMTYsMTAgKzMxNiwxMCBAQCBzdHJ1Y3QgbW9kX3RyZWVfbm9kZSB7XFxuIH07XFxuIFxcbiBlbnVtIG1vZF9tZW1fdHlwZSB7XFxuLVxcdE1PRF9URVhUID0gMCxcXG4tXFx0TU9EX0RBVEEsXFxuK1xcdE1PRF9EQVRBID0gMCxcXG4gXFx0TU9EX1JPREFUQSxcXG4gXFx0TU9EX1JPX0FGVEVSX0lOSVQsXFxuK1xcdE1PRF9URVhULFxcbiBcXHRNT0RfSU5JVF9URVhULFxcbiBcXHRNT0RfSU5JVF9EQVRBLFxcbiBcXHRNT0RfSU5JVF9ST0RBVEEsXFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jIGIva2VybmVsL21vZHVsZS9tYWluLmNcXG5pbmRleCA0NmRkOGQyNWE2MDU4Li4yZDYyMTM0OTYzNTk3IDEwMDY0NFxcbi0tLSBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jXFxuKysrIGIva2VybmVsL21vZHVsZS9tYWluLmNcXG5AQCAtMTM0Miw3ICsxMzQyLDcgQEAgc3RhdGljIGludCBtb2R1bGVfbWVtb3J5X2FsbG9jKHN0cnVjdCBtb2R1bGUgKm1vZCwgZW51bSBtb2RfbWVtX3R5cGUgdHlwZSlcXG4ge1xcbiBcXHR1bnNpZ25lZCBpbnQgc2l6ZSA9IFBBR0VfQUxJR04obW9kLVxcdTAwM2VtZW1bdHlwZV0uc2l6ZSk7XFxuIFxcdGVudW0gZXhlY21lbV90eXBlIGV4ZWNtZW1fdHlwZTtcXG4tXFx0dm9pZCAqcHRyO1xcbitcXHR2b2lkICpwdHIgPSBOVUxMO1xcbiBcXG4gXFx0bW9kLVxcdTAwM2VtZW1bdHlwZV0uc2l6ZSA9IHNpemU7XFxuIFxcbkBAIC0xMzUxLDExICsxMzUxLDI1IEBAIHN0YXRpYyBpbnQgbW9kdWxlX21lbW9yeV9hbGxvYyhzdHJ1Y3QgbW9kdWxlICptb2QsIGVudW0gbW9kX21lbV90eXBlIHR5cGUpXFxuIFxcdGVsc2VcXG4gXFx0XFx0ZXhlY21lbV90eXBlID0gRVhFQ01FTV9NT0RVTEVfVEVYVDtcXG4gXFxuLVxcdHB0ciA9IGV4ZWNtZW1fYWxsb2NfcncoZXhlY21lbV90eXBlLCBzaXplKTtcXG4rXFx0Ym9vbCBpc19yb3ggPSBleGVjbWVtX2lzX3JveChleGVjbWVtX3R5cGUpO1xcbitcXHRpZiAoaXNfcm94KSB7XFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIFNwZWNpYWwgY2FzZSBmb3IgTU9EX1RFWFQgLyBNT0RfSU5JVF9URVhUOiBhbGxvY2F0ZSB0aGVcXG4rXFx0XFx0ICogbGF0dGVyIGJ5IHNwbGl0dGluZyBvZmYgcmVxdWlyZWQgc3BhY2UgZnJvbSB0aGUgZm9ybWVyXFxuK1xcdFxcdCAqIHNvIHRoYXQgdGhleSBhcmUgYWx3YXlzIHBsYWNlZCBjbG9zZSB0b2dldGhlci5cXG4rXFx0XFx0ICovXFxuK1xcdFxcdGlmICh0eXBlID09IE1PRF9URVhUKVxcbitcXHRcXHRcXHRzaXplICs9IFBBR0VfQUxJR04obW9kLVxcdTAwM2VtZW1bTU9EX0lOSVRfVEVYVF0uc2l6ZSk7XFxuK1xcdFxcdGVsc2UgaWYgKHR5cGUgPT0gTU9EX0lOSVRfVEVYVClcXG4rXFx0XFx0XFx0cHRyID0gZXhlY21lbV9zcGxpdChtb2QtXFx1MDAzZW1lbVtNT0RfVEVYVF0uYmFzZSwgc2l6ZSk7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghcHRyKVxcbitcXHRcXHRwdHIgPSBleGVjbWVtX2FsbG9jX3J3KGV4ZWNtZW1fdHlwZSwgc2l6ZSk7XFxuIFxcdGlmICghcHRyKVxcbiBcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4gXFxuLVxcdG1vZC1cXHUwMDNlbWVtW3R5cGVdLmlzX3JveCA9IGV4ZWNtZW1faXNfcm94KGV4ZWNtZW1fdHlwZSk7XFxuK1xcdG1vZC1cXHUwMDNlbWVtW3R5cGVdLmlzX3JveCA9IGlzX3JveDtcXG4gXFxuIFxcdC8qXFxuIFxcdCAqIFRoZSBwb2ludGVyIHRvIHRoZXNlIGJsb2NrcyBvZiBtZW1vcnkgYXJlIHN0b3JlZCBvbiB0aGUgbW9kdWxlXFxuQEAgLTEzNjgsNyArMTM4Miw3IEBAIHN0YXRpYyBpbnQgbW9kdWxlX21lbW9yeV9hbGxvYyhzdHJ1Y3QgbW9kdWxlICptb2QsIGVudW0gbW9kX21lbV90eXBlIHR5cGUpXFxuIFxcdCAqICpkbyogZXZlbnR1YWxseSBnZXQgZnJlZWQsIGJ1dCBsZXQncyBqdXN0IGtlZXAgdGhpbmdzIHNpbXBsZVxcbiBcXHQgKiBhbmQgYXZvaWQgKmFueSogZmFsc2UgcG9zaXRpdmVzLlxcbiBcXHQgKi9cXG4tXFx0aWYgKCFtb2QtXFx1MDAzZW1lbVt0eXBlXS5pc19yb3gpXFxuK1xcdGlmICghaXNfcm94KVxcbiBcXHRcXHRrbWVtbGVha19ub3RfbGVhayhwdHIpO1xcbiBcXG4gXFx0bWVtc2V0KHB0ciwgMCwgc2l6ZSk7XFxuZGlmZiAtLWdpdCBhL21tL2V4ZWNtZW0uYyBiL21tL2V4ZWNtZW0uY1xcbmluZGV4IDA4NGEyMDdlNDI3OGIuLjU3OTBkNGE4NTMyYWYgMTAwNjQ0XFxuLS0tIGEvbW0vZXhlY21lbS5jXFxuKysrIGIvbW0vZXhlY21lbS5jXFxuQEAgLTI3Niw3ICsyNzYsOCBAQCBzdGF0aWMgdm9pZCAqX19leGVjbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBleGVjbWVtX3JhbmdlICpyYW5nZSwgc2l6ZV90IHNpemUpXFxuIFxcbiBzdGF0aWMgdm9pZCAqZXhlY21lbV9jYWNoZV9wb3B1bGF0ZV9hbGxvYyhzdHJ1Y3QgZXhlY21lbV9yYW5nZSAqcmFuZ2UsIHNpemVfdCBzaXplKVxcbiB7XFxuLVxcdHVuc2lnbmVkIGxvbmcgdm1fZmxhZ3MgPSBWTV9BTExPV19IVUdFX1ZNQVA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgdm1fZmxhZ3MgPSAocmFuZ2UtXFx1MDAzZWZsYWdzIFxcdTAwMjYgRVhFQ01FTV9OT19IVUdFX1ZNQVApXFxuK1xcdFxcdFxcdFxcdFxcdFxcdD8gMCA6IFZNX0FMTE9XX0hVR0VfVk1BUDtcXG4gXFx0c3RydWN0IG11dGV4ICptdXRleCA9IFxcdTAwMjZleGVjbWVtX2NhY2hlLm11dGV4O1xcbiBcXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bTtcXG4gXFx0c2l6ZV90IGFsbG9jX3NpemU7XFxuQEAgLTQzOSw2ICs0NDAsMzMgQEAgc3RhdGljIGJvb2wgZXhlY21lbV9jYWNoZV9mcmVlKHZvaWQgKnB0cilcXG4gXFx0cmV0dXJuIHRydWU7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpXFxuK3tcXG4rXFx0c3RydWN0IG1hcGxlX3RyZWUgKmJ1c3lfYXJlYXMgPSBcXHUwMDI2ZXhlY21lbV9jYWNoZS5idXN5X2FyZWFzO1xcbitcXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylwdHI7XFxuK1xcdE1BX1NUQVRFKG1hcywgYnVzeV9hcmVhcywgYWRkciwgYWRkcik7XFxuK1xcdHZvaWQgKmFyZWE7XFxuK1xcdGludCBlcnI7XFxuK1xcbitcXHRndWFyZChtdXRleCkoXFx1MDAyNmV4ZWNtZW1fY2FjaGUubXV0ZXgpO1xcbitcXG4rXFx0YXJlYSA9IG1hc193YWxrKFxcdTAwMjZtYXMpO1xcbitcXHRpZiAoIWFyZWEpXFxuK1xcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xcbitcXG4rXFx0aWYgKHNpemUgXFx1MDAzZT0gbWFzX3JhbmdlX2xlbihcXHUwMDI2bWFzKSlcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XFxuK1xcbitcXHRhZGRyICs9IG1hc19yYW5nZV9sZW4oXFx1MDAyNm1hcykgLSBzaXplO1xcbitcXHRtYXNfc2V0X3JhbmdlKFxcdTAwMjZtYXMsIGFkZHIsIG1hcy5sYXN0KTtcXG4rXFxuK1xcdGVyciA9IG1hc19zdG9yZV9nZnAoXFx1MDAyNm1hcywgKHZvaWQgKilhZGRyLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKGVycilcXG4rXFx0XFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcXG4rXFxuK1xcdHJldHVybiAodm9pZCAqKWFkZHI7XFxuK31cXG4rXFxuICNlbHNlIC8qIENPTkZJR19BUkNIX0hBU19FWEVDTUVNX1JPWCAqL1xcbiAvKlxcbiAgKiB3aGVuIFJPWCBjYWNoZSBpcyBub3QgdXNlZCB0aGUgcGVybWlzc2lvbnMgZGVmaW5lZCBieSBhcmNoaXRlY3R1cmVzIGZvclxcbkBAIC00NTksNiArNDg3LDExIEBAIHN0YXRpYyBib29sIGV4ZWNtZW1fY2FjaGVfZnJlZSh2b2lkICpwdHIpXFxuIHtcXG4gXFx0cmV0dXJuIGZhbHNlO1xcbiB9XFxuK1xcbitzdGF0aWMgdm9pZCAqZXhlY21lbV9jYWNoZV9zcGxpdCh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxcbit7XFxuK1xcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xcbit9XFxuICNlbmRpZiAvKiBDT05GSUdfQVJDSF9IQVNfRVhFQ01FTV9ST1ggKi9cXG4gXFxuIHZvaWQgKmV4ZWNtZW1fYWxsb2MoZW51bSBleGVjbWVtX3R5cGUgdHlwZSwgc2l6ZV90IHNpemUpXFxuQEAgLTUxMSw2ICs1NDQsMTggQEAgYm9vbCBleGVjbWVtX2lzX3JveChlbnVtIGV4ZWNtZW1fdHlwZSB0eXBlKVxcbiBcXHRyZXR1cm4gISEoZXhlY21lbV9pbmZvLVxcdTAwM2VyYW5nZXNbdHlwZV0uZmxhZ3MgXFx1MDAyNiBFWEVDTUVNX1JPWF9DQUNIRSk7XFxuIH1cXG4gXFxuK3ZvaWQgKmV4ZWNtZW1fc3BsaXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSlcXG4re1xcbitcXHRpZiAoIXB0ciB8fCAhc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIE5VTEw7XFxuK1xcbitcXHRwdHIgPSBleGVjbWVtX2NhY2hlX3NwbGl0KHB0ciwgc2l6ZSk7XFxuK1xcdGlmICghSVNfRVJSKHB0cikpXFxuK1xcdFxcdHJldHVybiBwdHI7XFxuK1xcdFZNX1dBUk5fT04ocHRyICE9IEVSUl9QVFIoLUVOT01FTSkpO1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4gc3RhdGljIGJvb2wgZXhlY21lbV92YWxpZGF0ZShzdHJ1Y3QgZXhlY21lbV9pbmZvICppbmZvKVxcbiB7XFxuIFxcdHN0cnVjdCBleGVjbWVtX3JhbmdlICpyID0gXFx1MDAyNmluZm8tXFx1MDAzZXJhbmdlc1tFWEVDTUVNX0RFRkFVTFRdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo0ODozMC42NjEyMDI4NTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMTM2NjMzODEyNTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTU9EVUxFU1wiLFxuICAgIFwiRFlOQU1JQ19GVFJBQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleGVjbWVtX3NwbGl0XCIsXG4gICAgXCJtb2R1bGVfZW1pdF9wbHRfZW50cnlcIixcbiAgICBcIm1vZHVsZV9lbWl0X3ZlbmVlcl9mb3JfYWRycFwiLFxuICAgIFwibW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9uc1wiLFxuICAgIFwiZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgQVJDSF9IQVNfRVhFQ01FTV9ST1ggZm9yIGFybTY0LCBtb2RpZnlpbmcgaG93IG1vZHVsZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGJ5IHNwbGl0dGluZyBNT0RfSU5JVF9URVhUIGZyb20gTU9EX1RFWFQgd2hlbiBleGVjbWVtX2lzX3JveCBpcyB0cnVlLiBJdCBhbHNvIHVwZGF0ZXMgZnRyYWNlIHRyYW1wb2xpbmVzIGFuZCBQTFQgZ2VuZXJhdGlvbiBmb3IgbW9kdWxlcyBvbiBhcm02NCB0byBhY2NvbW1vZGF0ZSB0aGVzZSBjaGFuZ2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIChtb2R1bGUgbG9hZGluZywgZXhlY3V0YWJsZSBtZW1vcnkgYWxsb2NhdGlvbiwgZnRyYWNlKSB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYzgyYzc3MjA2ZWI5NWFjMWY0ZDQ1YjhmMzVjYmY4ODFjODA2ZTEzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBBdWcgMjIgMTQ6NDg6MjcgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L0tjb25maWcgYi9hcmNoL2FybTY0L0tjb25maWdcbmluZGV4IGIzYWZlMDY4ODkxOWIuLjA4MGI5N2IwYmJkNWUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L0tjb25maWdcbisrKyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuQEAgLTI3LDYgKzI3LDcgQEAgY29uZmlnIEFSTTY0XG4gXHRzZWxlY3QgQVJDSF9IQVNfRE1BX09QUyBpZiBYRU5cbiBcdHNlbGVjdCBBUkNIX0hBU19ETUFfUFJFUF9DT0hFUkVOVFxuIFx0c2VsZWN0IEFSQ0hfSEFTX0FDUElfVEFCTEVfVVBHUkFERSBpZiBBQ1BJXG4rXHRzZWxlY3QgQVJDSF9IQVNfRVhFQ01FTV9ST1hcbiBcdHNlbGVjdCBBUkNIX0hBU19GQVNUX01VTFRJUExJRVJcbiBcdHNlbGVjdCBBUkNIX0hBU19GT1JUSUZZX1NPVVJDRVxuIFx0c2VsZWN0IEFSQ0hfSEFTX0dDT1ZfUFJPRklMRV9BTExcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaFxuaW5kZXggZmI5Yjg4ZWViZWIxNS4uOTMyOGZhZGI0YTk1OSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmhcbkBAIC0xNSwxMSArMTUsOSBAQCBzdHJ1Y3QgbW9kX3BsdF9zZWMge1xuIFxuIHN0cnVjdCBtb2RfYXJjaF9zcGVjaWZpYyB7XG4gXHRzdHJ1Y3QgbW9kX3BsdF9zZWNcdGNvcmU7XG4tXHRzdHJ1Y3QgbW9kX3BsdF9zZWNcdGluaXQ7XG4gXG4gXHQvKiBmb3IgQ09ORklHX0RZTkFNSUNfRlRSQUNFICovXG4gXHRzdHJ1Y3QgcGx0X2VudHJ5XHQqZnRyYWNlX3RyYW1wb2xpbmVzO1xuLVx0c3RydWN0IHBsdF9lbnRyeVx0KmluaXRfZnRyYWNlX3RyYW1wb2xpbmVzO1xuIH07XG4gXG4gdTY0IG1vZHVsZV9lbWl0X3BsdF9lbnRyeShzdHJ1Y3QgbW9kdWxlICptb2QsIEVsZjY0X1NoZHIgKnNlY2hkcnMsXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5sZHMuaFxuaW5kZXggMGIzYWFjZDIyYzU5MC4uOTU1NDBlOTU2YjQxOSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmxkcy5oXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5sZHMuaFxuQEAgLTEsOCArMSw1IEBAXG4gU0VDVElPTlMge1xuIFx0LnBsdCAwIDogeyBCWVRFKDApIH1cbi1cdC5pbml0LnBsdCAwIDogeyBCWVRFKDApIH1cbi1cdC50ZXh0LmZ0cmFjZV90cmFtcG9saW5lIDAgOiB7IEJZVEUoMCkgfVxuLVx0LmluaXQudGV4dC5mdHJhY2VfdHJhbXBvbGluZSAwIDogeyBCWVRFKDApIH1cbiBcbiAjaWZkZWYgQ09ORklHX0tBU0FOX1NXX1RBR1NcbiBcdC8qXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvZnRyYWNlLmMgYi9hcmNoL2FybTY0L2tlcm5lbC9mdHJhY2UuY1xuaW5kZXggNWExNTU0YTQ0MTYyOC4uYjU2ZGEyNGMxYmU0ZiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jXG4rKysgYi9hcmNoL2FybTY0L2tlcm5lbC9mdHJhY2UuY1xuQEAgLTI1OCwxNyArMjU4LDEwIEBAIGludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYylcbiBcdHJldHVybiBmdHJhY2VfbW9kaWZ5X2NvZGUocGMsIDAsIG5ldywgZmFsc2UpO1xuIH1cbiBcbi1zdGF0aWMgc3RydWN0IHBsdF9lbnRyeSAqZ2V0X2Z0cmFjZV9wbHQoc3RydWN0IG1vZHVsZSAqbW9kLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4rc3RhdGljIHN0cnVjdCBwbHRfZW50cnkgKmdldF9mdHJhY2VfcGx0KHN0cnVjdCBtb2R1bGUgKm1vZClcbiB7XG4gI2lmZGVmIENPTkZJR19NT0RVTEVTXG4tXHRzdHJ1Y3QgcGx0X2VudHJ5ICpwbHQgPSBOVUxMO1xuLVxuLVx0aWYgKHdpdGhpbl9tb2R1bGVfbWVtX3R5cGUoYWRkciwgbW9kLCBNT0RfSU5JVF9URVhUKSlcbi1cdFx0cGx0ID0gbW9kLVx1MDAzZWFyY2guaW5pdF9mdHJhY2VfdHJhbXBvbGluZXM7XG4tXHRlbHNlIGlmICh3aXRoaW5fbW9kdWxlX21lbV90eXBlKGFkZHIsIG1vZCwgTU9EX1RFWFQpKVxuLVx0XHRwbHQgPSBtb2QtXHUwMDNlYXJjaC5mdHJhY2VfdHJhbXBvbGluZXM7XG4tXHRlbHNlXG4tXHRcdHJldHVybiBOVUxMO1xuK1x0c3RydWN0IHBsdF9lbnRyeSAqcGx0ID0gbW9kLVx1MDAzZWFyY2guZnRyYWNlX3RyYW1wb2xpbmVzO1xuIFxuIFx0cmV0dXJuIFx1MDAyNnBsdFtGVFJBQ0VfUExUX0lEWF07XG4gI2Vsc2VcbkBAIC0zMzksNyArMzMyLDcgQEAgc3RhdGljIGJvb2wgZnRyYWNlX2ZpbmRfY2FsbGFibGVfYWRkcihzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLFxuIFx0aWYgKFdBUk5fT04oIW1vZCkpXG4gXHRcdHJldHVybiBmYWxzZTtcbiBcbi1cdHBsdCA9IGdldF9mdHJhY2VfcGx0KG1vZCwgcGMpO1xuK1x0cGx0ID0gZ2V0X2Z0cmFjZV9wbHQobW9kKTtcbiBcdGlmICghcGx0KSB7XG4gXHRcdHByX2VycihcImZ0cmFjZTogbm8gbW9kdWxlIFBMVCBmb3IgJXBzXFxuXCIsICh2b2lkICopKmFkZHIpO1xuIFx0XHRyZXR1cm4gZmFsc2U7XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYyBiL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmNcbmluZGV4IDdhZmQzNzBkYTlmNDguLjY5MDBkMjI0MmYxYmUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jXG4rKysgYi9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jXG5AQCAtNzAsOCArNzAsNyBAQCB1NjQgbW9kdWxlX2VtaXRfcGx0X2VudHJ5KHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycyxcbiBcdFx0XHQgIHZvaWQgKmxvYywgY29uc3QgRWxmNjRfUmVsYSAqcmVsYSxcbiBcdFx0XHQgIEVsZjY0X1N5bSAqc3ltKVxuIHtcbi1cdHN0cnVjdCBtb2RfcGx0X3NlYyAqcGx0c2VjID0gIXdpdGhpbl9tb2R1bGVfaW5pdCgodW5zaWduZWQgbG9uZylsb2MsIG1vZCkgP1xuLVx0XHRcdFx0XHRcdFx1MDAyNm1vZC1cdTAwM2VhcmNoLmNvcmUgOiBcdTAwMjZtb2QtXHUwMDNlYXJjaC5pbml0O1xuK1x0c3RydWN0IG1vZF9wbHRfc2VjICpwbHRzZWMgPSBcdTAwMjZtb2QtXHUwMDNlYXJjaC5jb3JlO1xuIFx0c3RydWN0IHBsdF9lbnRyeSAqcGx0ID0gKHN0cnVjdCBwbHRfZW50cnkgKilzZWNoZHJzW3BsdHNlYy1cdTAwM2VwbHRfc2huZHhdLnNoX2FkZHI7XG4gXHRpbnQgaSA9IHBsdHNlYy1cdTAwM2VwbHRfbnVtX2VudHJpZXM7XG4gXHRpbnQgaiA9IGkgLSAxO1xuQEAgLTEwMSw4ICsxMDAsNyBAQCB1NjQgbW9kdWxlX2VtaXRfcGx0X2VudHJ5KHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycyxcbiB1NjQgbW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwKHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycyxcbiBcdFx0XHRcdHZvaWQgKmxvYywgdTY0IHZhbClcbiB7XG4tXHRzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9ICF3aXRoaW5fbW9kdWxlX2luaXQoKHVuc2lnbmVkIGxvbmcpbG9jLCBtb2QpID9cbi1cdFx0XHRcdFx0XHRcdTAwMjZtb2QtXHUwMDNlYXJjaC5jb3JlIDogXHUwMDI2bW9kLVx1MDAzZWFyY2guaW5pdDtcbitcdHN0cnVjdCBtb2RfcGx0X3NlYyAqcGx0c2VjID0gXHUwMDI2bW9kLVx1MDAzZWFyY2guY29yZTtcbiBcdHN0cnVjdCBwbHRfZW50cnkgKnBsdCA9IChzdHJ1Y3QgcGx0X2VudHJ5ICopc2VjaGRyc1twbHRzZWMtXHUwMDNlcGx0X3NobmR4XS5zaF9hZGRyO1xuIFx0aW50IGkgPSBwbHRzZWMtXHUwMDNlcGx0X251bV9lbnRyaWVzKys7XG4gXHR1MzIgYnI7XG5AQCAtMTY5LDE3ICsxNjcsMTcgQEAgc3RhdGljIHVuc2lnbmVkIGludCBjb3VudF9wbHRzKEVsZjY0X1N5bSAqc3ltcywgRWxmNjRfUmVsYSAqcmVsYSwgaW50IG51bSxcbiBcdFx0Y2FzZSBSX0FBUkNINjRfQ0FMTDI2OlxuIFx0XHRcdC8qXG4gXHRcdFx0ICogV2Ugb25seSBoYXZlIHRvIGNvbnNpZGVyIGJyYW5jaCB0YXJnZXRzIHRoYXQgcmVzb2x2ZVxuLVx0XHRcdCAqIHRvIHN5bWJvbHMgdGhhdCBhcmUgZGVmaW5lZCBpbiBhIGRpZmZlcmVudCBzZWN0aW9uLlxuK1x0XHRcdCAqIHRvIHN5bWJvbHMgdGhhdCBhcmUgbm90IGRlZmluZWQgaW4gdGhlIHNhbWUgbW9kdWxlLlxuIFx0XHRcdCAqIFRoaXMgaXMgbm90IHNpbXBseSBhIGhldXJpc3RpYywgaXQgaXMgYSBmdW5kYW1lbnRhbFxuIFx0XHRcdCAqIGxpbWl0YXRpb24sIHNpbmNlIHRoZXJlIGlzIG5vIGd1YXJhbnRlZWQgd2F5IHRvIGVtaXRcbiBcdFx0XHQgKiBQTFQgZW50cmllcyBzdWZmaWNpZW50bHkgY2xvc2UgdG8gdGhlIGJyYW5jaCBpZiB0aGVcbiBcdFx0XHQgKiBzZWN0aW9uIHNpemUgZXhjZWVkcyB0aGUgcmFuZ2Ugb2YgYSBicmFuY2hcbiBcdFx0XHQgKiBpbnN0cnVjdGlvbi4gU28gaWdub3JlIHJlbG9jYXRpb25zIGFnYWluc3QgZGVmaW5lZFxuLVx0XHRcdCAqIHN5bWJvbHMgaWYgdGhleSBsaXZlIGluIHRoZSBzYW1lIHNlY3Rpb24gYXMgdGhlXG4rXHRcdFx0ICogc3ltYm9scyBpZiB0aGV5IGxpdmUgaW4gdGhlIHNhbWUgbW9kdWxlIGFzIHRoZVxuIFx0XHRcdCAqIHJlbG9jYXRpb24gdGFyZ2V0LlxuIFx0XHRcdCAqL1xuIFx0XHRcdHMgPSBzeW1zICsgRUxGNjRfUl9TWU0ocmVsYVtpXS5yX2luZm8pO1xuLVx0XHRcdGlmIChzLVx1MDAzZXN0X3NobmR4ID09IGRzdGlkeClcbitcdFx0XHRpZiAocy1cdTAwM2VzdF9zaG5keCAhPSBTSE5fVU5ERUYpXG4gXHRcdFx0XHRicmVhaztcbiBcbiBcdFx0XHQvKlxuQEAgLTI3NywxMyArMjc1LDE0IEBAIHN0YXRpYyBpbnQgcGFydGl0aW9uX2JyYW5jaF9wbHRfcmVsYXMoRWxmNjRfU3ltICpzeW1zLCBFbGY2NF9SZWxhICpyZWxhLFxuIFx0cmV0dXJuIGk7XG4gfVxuIFxuK3N0YXRpYyBjb25zdCBpbnQgZnRyYWNlX3BsdHMgPSBJU19FTkFCTEVEKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkgPyBOUl9GVFJBQ0VfUExUUyA6IDA7XG4rXG4gaW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxuIFx0XHRcdCAgICAgIGNoYXIgKnNlY3N0cmluZ3MsIHN0cnVjdCBtb2R1bGUgKm1vZClcbiB7XG4tXHR1bnNpZ25lZCBsb25nIGNvcmVfcGx0cyA9IDA7XG4tXHR1bnNpZ25lZCBsb25nIGluaXRfcGx0cyA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIGNvcmVfcGx0cyA9IGZ0cmFjZV9wbHRzO1xuIFx0RWxmNjRfU3ltICpzeW1zID0gTlVMTDtcbi1cdEVsZl9TaGRyICpwbHRzZWMsICp0cmFtcCA9IE5VTEwsICppbml0X3RyYW1wID0gTlVMTDtcbitcdEVsZl9TaGRyICpwbHRzZWM7XG4gXHRpbnQgaTtcbiBcbiBcdC8qXG5AQCAtMjkzLDIwICsyOTIsMTIgQEAgaW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxuIFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgZWhkci1cdTAwM2VlX3NobnVtOyBpKyspIHtcbiBcdFx0aWYgKCFzdHJjbXAoc2Vjc3RyaW5ncyArIHNlY2hkcnNbaV0uc2hfbmFtZSwgXCIucGx0XCIpKVxuIFx0XHRcdG1vZC1cdTAwM2VhcmNoLmNvcmUucGx0X3NobmR4ID0gaTtcbi1cdFx0ZWxzZSBpZiAoIXN0cmNtcChzZWNzdHJpbmdzICsgc2VjaGRyc1tpXS5zaF9uYW1lLCBcIi5pbml0LnBsdFwiKSlcbi1cdFx0XHRtb2QtXHUwMDNlYXJjaC5pbml0LnBsdF9zaG5keCA9IGk7XG4tXHRcdGVsc2UgaWYgKCFzdHJjbXAoc2Vjc3RyaW5ncyArIHNlY2hkcnNbaV0uc2hfbmFtZSxcbi1cdFx0XHRcdCBcIi50ZXh0LmZ0cmFjZV90cmFtcG9saW5lXCIpKVxuLVx0XHRcdHRyYW1wID0gc2VjaGRycyArIGk7XG4tXHRcdGVsc2UgaWYgKCFzdHJjbXAoc2Vjc3RyaW5ncyArIHNlY2hkcnNbaV0uc2hfbmFtZSxcbi1cdFx0XHRcdCBcIi5pbml0LnRleHQuZnRyYWNlX3RyYW1wb2xpbmVcIikpXG4tXHRcdFx0aW5pdF90cmFtcCA9IHNlY2hkcnMgKyBpO1xuIFx0XHRlbHNlIGlmIChzZWNoZHJzW2ldLnNoX3R5cGUgPT0gU0hUX1NZTVRBQilcbiBcdFx0XHRzeW1zID0gKEVsZjY0X1N5bSAqKXNlY2hkcnNbaV0uc2hfYWRkcjtcbiBcdH1cbiBcbi1cdGlmICghbW9kLVx1MDAzZWFyY2guY29yZS5wbHRfc2huZHggfHwgIW1vZC1cdTAwM2VhcmNoLmluaXQucGx0X3NobmR4KSB7XG4tXHRcdHByX2VycihcIiVzOiBtb2R1bGUgUExUIHNlY3Rpb24ocykgbWlzc2luZ1xcblwiLCBtb2QtXHUwMDNlbmFtZSk7XG4rXHRpZiAoIW1vZC1cdTAwM2VhcmNoLmNvcmUucGx0X3NobmR4KSB7XG4rXHRcdHByX2VycihcIiVzOiBtb2R1bGUgUExUIHNlY3Rpb24gbWlzc2luZ1xcblwiLCBtb2QtXHUwMDNlbmFtZSk7XG4gXHRcdHJldHVybiAtRU5PRVhFQztcbiBcdH1cbiBcdGlmICghc3ltcykge1xuQEAgLTMzNSwxMiArMzI2LDggQEAgaW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxuIFx0XHRpZiAobmVudHMpXG4gXHRcdFx0c29ydChyZWxzLCBuZW50cywgc2l6ZW9mKEVsZjY0X1JlbGEpLCBjbXBfcmVsYSwgTlVMTCk7XG4gXG4tXHRcdGlmICghbW9kdWxlX2luaXRfbGF5b3V0X3NlY3Rpb24oc2Vjc3RyaW5ncyArIGRzdHNlYy1cdTAwM2VzaF9uYW1lKSlcbi1cdFx0XHRjb3JlX3BsdHMgKz0gY291bnRfcGx0cyhzeW1zLCByZWxzLCBudW1yZWxzLFxuLVx0XHRcdFx0XHRcdHNlY2hkcnNbaV0uc2hfaW5mbywgZHN0c2VjKTtcbi1cdFx0ZWxzZVxuLVx0XHRcdGluaXRfcGx0cyArPSBjb3VudF9wbHRzKHN5bXMsIHJlbHMsIG51bXJlbHMsXG4tXHRcdFx0XHRcdFx0c2VjaGRyc1tpXS5zaF9pbmZvLCBkc3RzZWMpO1xuK1x0XHRjb3JlX3BsdHMgKz0gY291bnRfcGx0cyhzeW1zLCByZWxzLCBudW1yZWxzLCBzZWNoZHJzW2ldLnNoX2luZm8sXG4rXHRcdFx0XHRcdGRzdHNlYyk7XG4gXHR9XG4gXG4gXHRwbHRzZWMgPSBzZWNoZHJzICsgbW9kLVx1MDAzZWFyY2guY29yZS5wbHRfc2huZHg7XG5AQCAtMzQ4LDMwICszMzUsOCBAQCBpbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqZWhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXG4gXHRwbHRzZWMtXHUwMDNlc2hfZmxhZ3MgPSBTSEZfRVhFQ0lOU1RSIHwgU0hGX0FMTE9DO1xuIFx0cGx0c2VjLVx1MDAzZXNoX2FkZHJhbGlnbiA9IEwxX0NBQ0hFX0JZVEVTO1xuIFx0cGx0c2VjLVx1MDAzZXNoX3NpemUgPSAoY29yZV9wbHRzICArIDEpICogc2l6ZW9mKHN0cnVjdCBwbHRfZW50cnkpO1xuLVx0bW9kLVx1MDAzZWFyY2guY29yZS5wbHRfbnVtX2VudHJpZXMgPSAwO1xuK1x0bW9kLVx1MDAzZWFyY2guY29yZS5wbHRfbnVtX2VudHJpZXMgPSBmdHJhY2VfcGx0cztcbiBcdG1vZC1cdTAwM2VhcmNoLmNvcmUucGx0X21heF9lbnRyaWVzID0gY29yZV9wbHRzO1xuIFxuLVx0cGx0c2VjID0gc2VjaGRycyArIG1vZC1cdTAwM2VhcmNoLmluaXQucGx0X3NobmR4O1xuLVx0cGx0c2VjLVx1MDAzZXNoX3R5cGUgPSBTSFRfTk9CSVRTO1xuLVx0cGx0c2VjLVx1MDAzZXNoX2ZsYWdzID0gU0hGX0VYRUNJTlNUUiB8IFNIRl9BTExPQztcbi1cdHBsdHNlYy1cdTAwM2VzaF9hZGRyYWxpZ24gPSBMMV9DQUNIRV9CWVRFUztcbi1cdHBsdHNlYy1cdTAwM2VzaF9zaXplID0gKGluaXRfcGx0cyArIDEpICogc2l6ZW9mKHN0cnVjdCBwbHRfZW50cnkpO1xuLVx0bW9kLVx1MDAzZWFyY2guaW5pdC5wbHRfbnVtX2VudHJpZXMgPSAwO1xuLVx0bW9kLVx1MDAzZWFyY2guaW5pdC5wbHRfbWF4X2VudHJpZXMgPSBpbml0X3BsdHM7XG4tXG4tXHRpZiAodHJhbXApIHtcbi1cdFx0dHJhbXAtXHUwMDNlc2hfdHlwZSA9IFNIVF9OT0JJVFM7XG4tXHRcdHRyYW1wLVx1MDAzZXNoX2ZsYWdzID0gU0hGX0VYRUNJTlNUUiB8IFNIRl9BTExPQztcbi1cdFx0dHJhbXAtXHUwMDNlc2hfYWRkcmFsaWduID0gX19hbGlnbm9mX18oc3RydWN0IHBsdF9lbnRyeSk7XG4tXHRcdHRyYW1wLVx1MDAzZXNoX3NpemUgPSBOUl9GVFJBQ0VfUExUUyAqIHNpemVvZihzdHJ1Y3QgcGx0X2VudHJ5KTtcbi1cdH1cbi1cbi1cdGlmIChpbml0X3RyYW1wKSB7XG4tXHRcdGluaXRfdHJhbXAtXHUwMDNlc2hfdHlwZSA9IFNIVF9OT0JJVFM7XG4tXHRcdGluaXRfdHJhbXAtXHUwMDNlc2hfZmxhZ3MgPSBTSEZfRVhFQ0lOU1RSIHwgU0hGX0FMTE9DO1xuLVx0XHRpbml0X3RyYW1wLVx1MDAzZXNoX2FkZHJhbGlnbiA9IF9fYWxpZ25vZl9fKHN0cnVjdCBwbHRfZW50cnkpO1xuLVx0XHRpbml0X3RyYW1wLVx1MDAzZXNoX3NpemUgPSBOUl9GVFJBQ0VfUExUUyAqIHNpemVvZihzdHJ1Y3QgcGx0X2VudHJ5KTtcbi1cdH1cbi1cbiBcdHJldHVybiAwO1xuIH1cbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuYyBiL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jXG5pbmRleCAyNGFkYjU4MWFmMGViLi42MjBjMmI3MDExNWU1IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmNcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jXG5AQCAtNDU0LDI5ICs0NTQsMTEgQEAgc3RhdGljIGludCBtb2R1bGVfaW5pdF9mdHJhY2VfcGx0KGNvbnN0IEVsZl9FaGRyICpoZHIsXG4gXHRcdFx0XHQgIHN0cnVjdCBtb2R1bGUgKm1vZClcbiB7XG4gI2lmIGRlZmluZWQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKVxuLVx0Y29uc3QgRWxmX1NoZHIgKnM7XG4tXHRzdHJ1Y3QgcGx0X2VudHJ5ICpwbHRzO1xuLVxuLVx0cyA9IGZpbmRfc2VjdGlvbihoZHIsIHNlY2hkcnMsIFwiLnRleHQuZnRyYWNlX3RyYW1wb2xpbmVcIik7XG4tXHRpZiAoIXMpXG4tXHRcdHJldHVybiAtRU5PRVhFQztcbi1cbi1cdHBsdHMgPSAodm9pZCAqKXMtXHUwMDNlc2hfYWRkcjtcbitcdHN0cnVjdCBwbHRfZW50cnkgKnBsdHMgPSAodm9pZCAqKXNlY2hkcnNbbW9kLVx1MDAzZWFyY2guY29yZS5wbHRfc2huZHhdLnNoX2FkZHI7XG4gXG4gXHRfX2luaXRfcGx0KFx1MDAyNnBsdHNbRlRSQUNFX1BMVF9JRFhdLCBGVFJBQ0VfQUREUik7XG4gXG4gXHRtb2QtXHUwMDNlYXJjaC5mdHJhY2VfdHJhbXBvbGluZXMgPSBwbHRzO1xuLVxuLVx0cyA9IGZpbmRfc2VjdGlvbihoZHIsIHNlY2hkcnMsIFwiLmluaXQudGV4dC5mdHJhY2VfdHJhbXBvbGluZVwiKTtcbi1cdGlmICghcylcbi1cdFx0cmV0dXJuIC1FTk9FWEVDO1xuLVxuLVx0cGx0cyA9ICh2b2lkICopcy1cdTAwM2VzaF9hZGRyO1xuLVxuLVx0X19pbml0X3BsdChcdTAwMjZwbHRzW0ZUUkFDRV9QTFRfSURYXSwgRlRSQUNFX0FERFIpO1xuLVxuLVx0bW9kLVx1MDAzZWFyY2guaW5pdF9mdHJhY2VfdHJhbXBvbGluZXMgPSBwbHRzO1xuLVxuICNlbmRpZlxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vaW5pdC5jIGIvYXJjaC9hcm02NC9tbS9pbml0LmNcbmluZGV4IDk3OTg3Zjg1MGEzM2MuLmU2Yzk4MDQ1MDQ2ZTIgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L21tL2luaXQuY1xuKysrIGIvYXJjaC9hcm02NC9tbS9pbml0LmNcbkBAIC01MzEsNyArNTMxLDggQEAgc3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuIFx0XHRcdFtFWEVDTUVNX0RFRkFVTFRdID0ge1xuIFx0XHRcdFx0LnN0YXJ0XHQ9IHN0YXJ0LFxuIFx0XHRcdFx0LmVuZFx0PSBlbmQsXG4tXHRcdFx0XHQucGdwcm90XHQ9IFBBR0VfS0VSTkVMLFxuK1x0XHRcdFx0LnBncHJvdFx0PSBQQUdFX0tFUk5FTF9ST1gsXG4rXHRcdFx0XHQuZmxhZ3NcdD0gRVhFQ01FTV9ST1hfQ0FDSEUsXG4gXHRcdFx0XHQuYWxpZ25tZW50ID0gMSxcbiBcdFx0XHRcdC5mYWxsYmFja19zdGFydFx0PSBmYWxsYmFja19zdGFydCxcbiBcdFx0XHRcdC5mYWxsYmFja19lbmRcdD0gZmFsbGJhY2tfZW5kLFxuQEAgLTU0OCw5ICs1NDksMjUgQEAgc3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxuIFx0XHRcdFx0LnBncHJvdFx0PSBQQUdFX0tFUk5FTCxcbiBcdFx0XHRcdC5hbGlnbm1lbnQgPSAxLFxuIFx0XHRcdH0sXG4rXHRcdFx0W0VYRUNNRU1fTU9EVUxFX0RBVEFdID0ge1xuK1x0XHRcdFx0LnN0YXJ0XHQ9IHN0YXJ0LFxuK1x0XHRcdFx0LmVuZFx0PSBlbmQsXG4rXHRcdFx0XHQucGdwcm90XHQ9IFBBR0VfS0VSTkVMLFxuK1x0XHRcdFx0LmFsaWdubWVudCA9IDEsXG4rXHRcdFx0XHQuZmFsbGJhY2tfc3RhcnRcdD0gZmFsbGJhY2tfc3RhcnQsXG4rXHRcdFx0XHQuZmFsbGJhY2tfZW5kXHQ9IGZhbGxiYWNrX2VuZCxcbitcdFx0XHR9LFxuIFx0XHR9LFxuIFx0fTtcbiBcbitcdGlmICghc3lzdGVtX3N1cHBvcnRzX2JibWwyX25vYWJvcnQoKSlcbitcdFx0ZXhlY21lbV9pbmZvLnJhbmdlc1tFWEVDTUVNX0RFRkFVTFRdLmZsYWdzIHw9IEVYRUNNRU1fTk9fSFVHRV9WTUFQO1xuK1xuIFx0cmV0dXJuIFx1MDAyNmV4ZWNtZW1faW5mbztcbiB9XG4rXG4rdm9pZCBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnModm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSlcbit7XG4rXHRtZW1zZXQzMihwdHIsIEFBUkNINjRfQlJFQUtfRkFVTFQsIHNpemUgLyBzaXplb2YoX19sZTMyKSk7XG4rfVxuICNlbmRpZiAvKiBDT05GSUdfRVhFQ01FTSAqL1xuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuYyBiL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xuaW5kZXggYmJlOThhYzlhZDhjNi4uMjBmZjljYjI3M2MxMSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vcGFnZWF0dHIuY1xuKysrIGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXG5AQCAtMTY5LDggKzE2OSw2IEBAIHN0YXRpYyBpbnQgY2hhbmdlX21lbW9yeV9jb21tb24odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsXG4gXHQgKiB3ZSBhcmUgb3BlcmF0aW5nIG9uIGRvZXMgbm90IHJlc3VsdCBpbiBzdWNoIHNwbGl0dGluZy5cbiBcdCAqXG4gXHQgKiBMZXQncyByZXN0cmljdCBvdXJzZWx2ZXMgdG8gbWFwcGluZ3MgY3JlYXRlZCBieSB2bWFsbG9jIChvciB2bWFwKS5cbi1cdCAqIERpc2FsbG93IFZNX0FMTE9XX0hVR0VfVk1BUCBtYXBwaW5ncyB0byBndWFyYW50ZWUgdGhhdCBvbmx5IHBhZ2Vcbi1cdCAqIG1hcHBpbmdzIGFyZSB1cGRhdGVkIGFuZCBzcGxpdHRpbmcgaXMgbmV2ZXIgbmVlZGVkLlxuIFx0ICpcbiBcdCAqIFNvIGNoZWNrIHdoZXRoZXIgdGhlIFthZGRyLCBhZGRyICsgc2l6ZSkgaW50ZXJ2YWwgaXMgZW50aXJlbHlcbiBcdCAqIGNvdmVyZWQgYnkgcHJlY2lzZWx5IG9uZSBWTSBhcmVhIHRoYXQgaGFzIHRoZSBWTV9BTExPQyBmbGFnIHNldC5cbkBAIC0xNzksNyArMTc3LDE2IEBAIHN0YXRpYyBpbnQgY2hhbmdlX21lbW9yeV9jb21tb24odW5zaWduZWQgbG9uZyBhZGRyLCBpbnQgbnVtcGFnZXMsXG4gXHRpZiAoIWFyZWEgfHxcbiBcdCAgICAoKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKCh2b2lkICopZW5kKSBcdTAwM2VcbiBcdCAgICAgKHVuc2lnbmVkIGxvbmcpa2FzYW5fcmVzZXRfdGFnKGFyZWEtXHUwMDNlYWRkcikgKyBhcmVhLVx1MDAzZXNpemUpIHx8XG4tXHQgICAgKChhcmVhLVx1MDAzZWZsYWdzIFx1MDAyNiAoVk1fQUxMT0MgfCBWTV9BTExPV19IVUdFX1ZNQVApKSAhPSBWTV9BTExPQykpXG4rXHQgICAgIShhcmVhLVx1MDAzZWZsYWdzIFx1MDAyNiBWTV9BTExPQykpXG4rICAgICAgICAgICAgICAgcmV0dXJuIC1FSU5WQUw7XG4rXG4rXHQvKlxuK1x0ICogRGlzYWxsb3cgVk1fQUxMT1dfSFVHRV9WTUFQIG1hcHBpbmdzIHVubGVzcyB0aGUgcmVnaW9uIGlzIFBNRFxuK1x0ICogYWxpZ25lZCwgb3Igc3BsaXR0aW5nIGxpdmUgaHVnZSBtYXBwaW5ncyBpcyBzdXBwb3J0ZWQuXG4rXHQgKi9cbitcdGlmICgoYXJlYS1cdTAwM2VmbGFncyBcdTAwMjYgVk1fQUxMT1dfSFVHRV9WTUFQKSBcdTAwMjZcdTAwMjZcbitcdCAgICgoc3RhcnQgJSBQTURfU0laRSkgfHwgKHNpemUgJSBQTURfU0laRSkpIFx1MDAyNlx1MDAyNlxuK1x0ICAgV0FSTl9PTl9PTkNFKCFzeXN0ZW1fc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCgpKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG4gXG4gXHRpZiAoIW51bXBhZ2VzKVxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvZXhlY21lbS5oIGIvaW5jbHVkZS9saW51eC9leGVjbWVtLmhcbmluZGV4IDdkZTIyOTEzNGUzMDcuLmIwNDkyNmYzZmZmMjYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaFxuKysrIGIvaW5jbHVkZS9saW51eC9leGVjbWVtLmhcbkBAIC00OCwxMCArNDgsMTIgQEAgZW51bSBleGVjbWVtX3R5cGUge1xuICAqIGVudW0gZXhlY21lbV9yYW5nZV9mbGFncyAtIG9wdGlvbnMgZm9yIGV4ZWN1dGFibGUgbWVtb3J5IGFsbG9jYXRpb25zXG4gICogQEVYRUNNRU1fS0FTQU5fU0hBRE9XOlx0YWxsb2NhdGUga2FzYW4gc2hhZG93XG4gICogQEVYRUNNRU1fUk9YX0NBQ0hFOlx0XHRhbGxvY2F0aW9ucyBzaG91bGQgdXNlIFJPWCBjYWNoZSBvZiBodWdlIHBhZ2VzXG4rICogQEVYRUNNRU1fTk9fSFVHRV9WTUFQOlx0Y2FjaGUgYWxsb2NhdGlvbnMgbXVzdCBhdm9pZCBodWdlIHZtYXBwaW5nc1xuICAqL1xuIGVudW0gZXhlY21lbV9yYW5nZV9mbGFncyB7XG4gXHRFWEVDTUVNX0tBU0FOX1NIQURPV1x0PSAoMSBcdTAwM2NcdTAwM2MgMCksXG4gXHRFWEVDTUVNX1JPWF9DQUNIRVx0PSAoMSBcdTAwM2NcdTAwM2MgMSksXG4rXHRFWEVDTUVNX05PX0hVR0VfVk1BUFx0PSAoMSBcdTAwM2NcdTAwM2MgMiksXG4gfTtcbiBcbiAjaWZkZWYgQ09ORklHX0FSQ0hfSEFTX0VYRUNNRU1fUk9YXG5AQCAtMTc4LDYgKzE4MCwxNSBAQCB2b2lkIGV4ZWNtZW1fZnJlZSh2b2lkICpwdHIpO1xuIFxuIERFRklORV9GUkVFKGV4ZWNtZW0sIHZvaWQgKiwgaWYgKF9UKSBleGVjbWVtX2ZyZWUoX1QpKTtcbiBcbisvKipcbisgKiBleGVjbWVtX3NwbGl0IC0gYWxsb2NhdGUgc3BhY2UgZnJvbSBhbiBleGlzdGluZyBleGVjbWVtIGNhY2hlIGFsbG9jYXRpb25cbisgKiBAcHRyICAtIHRoZSBleGlzdGluZyBleGVjbWVtIGNhY2hlIGFsbG9jYXRpb25cbisgKiBAc2l6ZSAtIHRoZSBzaXplIHRvIGNhcnZlIG91dCBmcm9tIHRoZSBleGlzdGluZyBhbGxvY2F0aW9uXG4rICpcbisgKiBSZXR1cm46IHRoZSBhZGRyZXNzIG9mIHRoZSBjYXJ2ZWQgb3V0IGFsbG9jYXRpb24sIG9yICVOVUxMIG9uIGZhaWx1cmUuXG4rICovXG4rdm9pZCAqZXhlY21lbV9zcGxpdCh2b2lkICpwdHIsIHNpemVfdCBzaXplKTtcbitcbiAjaWZkZWYgQ09ORklHX01NVVxuIC8qKlxuICAqIGV4ZWNtZW1fdm1hcCAtIGNyZWF0ZSB2aXJ0dWFsIG1hcHBpbmcgZm9yIEVYRUNNRU1fTU9EVUxFX0RBVEEgbWVtb3J5XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmhcbmluZGV4IDc1NjY4MTVmYWJiZTguLjAzMzZhNDY3MzNkZDkgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L21vZHVsZS5oXG5AQCAtMzE2LDEwICszMTYsMTAgQEAgc3RydWN0IG1vZF90cmVlX25vZGUge1xuIH07XG4gXG4gZW51bSBtb2RfbWVtX3R5cGUge1xuLVx0TU9EX1RFWFQgPSAwLFxuLVx0TU9EX0RBVEEsXG4rXHRNT0RfREFUQSA9IDAsXG4gXHRNT0RfUk9EQVRBLFxuIFx0TU9EX1JPX0FGVEVSX0lOSVQsXG4rXHRNT0RfVEVYVCxcbiBcdE1PRF9JTklUX1RFWFQsXG4gXHRNT0RfSU5JVF9EQVRBLFxuIFx0TU9EX0lOSVRfUk9EQVRBLFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jIGIva2VybmVsL21vZHVsZS9tYWluLmNcbmluZGV4IDQ2ZGQ4ZDI1YTYwNTguLjJkNjIxMzQ5NjM1OTcgMTAwNjQ0XG4tLS0gYS9rZXJuZWwvbW9kdWxlL21haW4uY1xuKysrIGIva2VybmVsL21vZHVsZS9tYWluLmNcbkBAIC0xMzQyLDcgKzEzNDIsNyBAQCBzdGF0aWMgaW50IG1vZHVsZV9tZW1vcnlfYWxsb2Moc3RydWN0IG1vZHVsZSAqbW9kLCBlbnVtIG1vZF9tZW1fdHlwZSB0eXBlKVxuIHtcbiBcdHVuc2lnbmVkIGludCBzaXplID0gUEFHRV9BTElHTihtb2QtXHUwMDNlbWVtW3R5cGVdLnNpemUpO1xuIFx0ZW51bSBleGVjbWVtX3R5cGUgZXhlY21lbV90eXBlO1xuLVx0dm9pZCAqcHRyO1xuK1x0dm9pZCAqcHRyID0gTlVMTDtcbiBcbiBcdG1vZC1cdTAwM2VtZW1bdHlwZV0uc2l6ZSA9IHNpemU7XG4gXG5AQCAtMTM1MSwxMSArMTM1MSwyNSBAQCBzdGF0aWMgaW50IG1vZHVsZV9tZW1vcnlfYWxsb2Moc3RydWN0IG1vZHVsZSAqbW9kLCBlbnVtIG1vZF9tZW1fdHlwZSB0eXBlKVxuIFx0ZWxzZVxuIFx0XHRleGVjbWVtX3R5cGUgPSBFWEVDTUVNX01PRFVMRV9URVhUO1xuIFxuLVx0cHRyID0gZXhlY21lbV9hbGxvY19ydyhleGVjbWVtX3R5cGUsIHNpemUpO1xuK1x0Ym9vbCBpc19yb3ggPSBleGVjbWVtX2lzX3JveChleGVjbWVtX3R5cGUpO1xuK1x0aWYgKGlzX3JveCkge1xuK1x0XHQvKlxuK1x0XHQgKiBTcGVjaWFsIGNhc2UgZm9yIE1PRF9URVhUIC8gTU9EX0lOSVRfVEVYVDogYWxsb2NhdGUgdGhlXG4rXHRcdCAqIGxhdHRlciBieSBzcGxpdHRpbmcgb2ZmIHJlcXVpcmVkIHNwYWNlIGZyb20gdGhlIGZvcm1lclxuK1x0XHQgKiBzbyB0aGF0IHRoZXkgYXJlIGFsd2F5cyBwbGFjZWQgY2xvc2UgdG9nZXRoZXIuXG4rXHRcdCAqL1xuK1x0XHRpZiAodHlwZSA9PSBNT0RfVEVYVClcbitcdFx0XHRzaXplICs9IFBBR0VfQUxJR04obW9kLVx1MDAzZW1lbVtNT0RfSU5JVF9URVhUXS5zaXplKTtcbitcdFx0ZWxzZSBpZiAodHlwZSA9PSBNT0RfSU5JVF9URVhUKVxuK1x0XHRcdHB0ciA9IGV4ZWNtZW1fc3BsaXQobW9kLVx1MDAzZW1lbVtNT0RfVEVYVF0uYmFzZSwgc2l6ZSk7XG4rXHR9XG4rXG4rXHRpZiAoIXB0cilcbitcdFx0cHRyID0gZXhlY21lbV9hbGxvY19ydyhleGVjbWVtX3R5cGUsIHNpemUpO1xuIFx0aWYgKCFwdHIpXG4gXHRcdHJldHVybiAtRU5PTUVNO1xuIFxuLVx0bW9kLVx1MDAzZW1lbVt0eXBlXS5pc19yb3ggPSBleGVjbWVtX2lzX3JveChleGVjbWVtX3R5cGUpO1xuK1x0bW9kLVx1MDAzZW1lbVt0eXBlXS5pc19yb3ggPSBpc19yb3g7XG4gXG4gXHQvKlxuIFx0ICogVGhlIHBvaW50ZXIgdG8gdGhlc2UgYmxvY2tzIG9mIG1lbW9yeSBhcmUgc3RvcmVkIG9uIHRoZSBtb2R1bGVcbkBAIC0xMzY4LDcgKzEzODIsNyBAQCBzdGF0aWMgaW50IG1vZHVsZV9tZW1vcnlfYWxsb2Moc3RydWN0IG1vZHVsZSAqbW9kLCBlbnVtIG1vZF9tZW1fdHlwZSB0eXBlKVxuIFx0ICogKmRvKiBldmVudHVhbGx5IGdldCBmcmVlZCwgYnV0IGxldCdzIGp1c3Qga2VlcCB0aGluZ3Mgc2ltcGxlXG4gXHQgKiBhbmQgYXZvaWQgKmFueSogZmFsc2UgcG9zaXRpdmVzLlxuIFx0ICovXG4tXHRpZiAoIW1vZC1cdTAwM2VtZW1bdHlwZV0uaXNfcm94KVxuK1x0aWYgKCFpc19yb3gpXG4gXHRcdGttZW1sZWFrX25vdF9sZWFrKHB0cik7XG4gXG4gXHRtZW1zZXQocHRyLCAwLCBzaXplKTtcbmRpZmYgLS1naXQgYS9tbS9leGVjbWVtLmMgYi9tbS9leGVjbWVtLmNcbmluZGV4IDA4NGEyMDdlNDI3OGIuLjU3OTBkNGE4NTMyYWYgMTAwNjQ0XG4tLS0gYS9tbS9leGVjbWVtLmNcbisrKyBiL21tL2V4ZWNtZW0uY1xuQEAgLTI3Niw3ICsyNzYsOCBAQCBzdGF0aWMgdm9pZCAqX19leGVjbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBleGVjbWVtX3JhbmdlICpyYW5nZSwgc2l6ZV90IHNpemUpXG4gXG4gc3RhdGljIHZvaWQgKmV4ZWNtZW1fY2FjaGVfcG9wdWxhdGVfYWxsb2Moc3RydWN0IGV4ZWNtZW1fcmFuZ2UgKnJhbmdlLCBzaXplX3Qgc2l6ZSlcbiB7XG4tXHR1bnNpZ25lZCBsb25nIHZtX2ZsYWdzID0gVk1fQUxMT1dfSFVHRV9WTUFQO1xuK1x0dW5zaWduZWQgbG9uZyB2bV9mbGFncyA9IChyYW5nZS1cdTAwM2VmbGFncyBcdTAwMjYgRVhFQ01FTV9OT19IVUdFX1ZNQVApXG4rXHRcdFx0XHRcdFx0PyAwIDogVk1fQUxMT1dfSFVHRV9WTUFQO1xuIFx0c3RydWN0IG11dGV4ICptdXRleCA9IFx1MDAyNmV4ZWNtZW1fY2FjaGUubXV0ZXg7XG4gXHRzdHJ1Y3Qgdm1fc3RydWN0ICp2bTtcbiBcdHNpemVfdCBhbGxvY19zaXplO1xuQEAgLTQzOSw2ICs0NDAsMzMgQEAgc3RhdGljIGJvb2wgZXhlY21lbV9jYWNoZV9mcmVlKHZvaWQgKnB0cilcbiBcdHJldHVybiB0cnVlO1xuIH1cbiBcbitzdGF0aWMgdm9pZCAqZXhlY21lbV9jYWNoZV9zcGxpdCh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxuK3tcbitcdHN0cnVjdCBtYXBsZV90cmVlICpidXN5X2FyZWFzID0gXHUwMDI2ZXhlY21lbV9jYWNoZS5idXN5X2FyZWFzO1xuK1x0dW5zaWduZWQgbG9uZyBhZGRyID0gKHVuc2lnbmVkIGxvbmcpcHRyO1xuK1x0TUFfU1RBVEUobWFzLCBidXN5X2FyZWFzLCBhZGRyLCBhZGRyKTtcbitcdHZvaWQgKmFyZWE7XG4rXHRpbnQgZXJyO1xuK1xuK1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmV4ZWNtZW1fY2FjaGUubXV0ZXgpO1xuK1xuK1x0YXJlYSA9IG1hc193YWxrKFx1MDAyNm1hcyk7XG4rXHRpZiAoIWFyZWEpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuK1xuK1x0aWYgKHNpemUgXHUwMDNlPSBtYXNfcmFuZ2VfbGVuKFx1MDAyNm1hcykpXG4rXHRcdHJldHVybiBFUlJfUFRSKC1FSU5WQUwpO1xuK1xuK1x0YWRkciArPSBtYXNfcmFuZ2VfbGVuKFx1MDAyNm1hcykgLSBzaXplO1xuK1x0bWFzX3NldF9yYW5nZShcdTAwMjZtYXMsIGFkZHIsIG1hcy5sYXN0KTtcbitcbitcdGVyciA9IG1hc19zdG9yZV9nZnAoXHUwMDI2bWFzLCAodm9pZCAqKWFkZHIsIEdGUF9LRVJORUwpO1xuK1x0aWYgKGVycilcbitcdFx0cmV0dXJuIEVSUl9QVFIoZXJyKTtcbitcbitcdHJldHVybiAodm9pZCAqKWFkZHI7XG4rfVxuK1xuICNlbHNlIC8qIENPTkZJR19BUkNIX0hBU19FWEVDTUVNX1JPWCAqL1xuIC8qXG4gICogd2hlbiBST1ggY2FjaGUgaXMgbm90IHVzZWQgdGhlIHBlcm1pc3Npb25zIGRlZmluZWQgYnkgYXJjaGl0ZWN0dXJlcyBmb3JcbkBAIC00NTksNiArNDg3LDExIEBAIHN0YXRpYyBib29sIGV4ZWNtZW1fY2FjaGVfZnJlZSh2b2lkICpwdHIpXG4ge1xuIFx0cmV0dXJuIGZhbHNlO1xuIH1cbitcbitzdGF0aWMgdm9pZCAqZXhlY21lbV9jYWNoZV9zcGxpdCh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxuK3tcbitcdHJldHVybiBFUlJfUFRSKC1FTk9FTlQpO1xuK31cbiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfSEFTX0VYRUNNRU1fUk9YICovXG4gXG4gdm9pZCAqZXhlY21lbV9hbGxvYyhlbnVtIGV4ZWNtZW1fdHlwZSB0eXBlLCBzaXplX3Qgc2l6ZSlcbkBAIC01MTEsNiArNTQ0LDE4IEBAIGJvb2wgZXhlY21lbV9pc19yb3goZW51bSBleGVjbWVtX3R5cGUgdHlwZSlcbiBcdHJldHVybiAhIShleGVjbWVtX2luZm8tXHUwMDNlcmFuZ2VzW3R5cGVdLmZsYWdzIFx1MDAyNiBFWEVDTUVNX1JPWF9DQUNIRSk7XG4gfVxuIFxuK3ZvaWQgKmV4ZWNtZW1fc3BsaXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSlcbit7XG4rXHRpZiAoIXB0ciB8fCAhc2l6ZSlcbitcdFx0cmV0dXJuIE5VTEw7XG4rXG4rXHRwdHIgPSBleGVjbWVtX2NhY2hlX3NwbGl0KHB0ciwgc2l6ZSk7XG4rXHRpZiAoIUlTX0VSUihwdHIpKVxuK1x0XHRyZXR1cm4gcHRyO1xuK1x0Vk1fV0FSTl9PTihwdHIgIT0gRVJSX1BUUigtRU5PTUVNKSk7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4gc3RhdGljIGJvb2wgZXhlY21lbV92YWxpZGF0ZShzdHJ1Y3QgZXhlY21lbV9pbmZvICppbmZvKVxuIHtcbiBcdHN0cnVjdCBleGVjbWVtX3JhbmdlICpyID0gXHUwMDI2aW5mby1cdTAwM2VyYW5nZXNbRVhFQ01FTV9ERUZBVUxUXTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE0OjQ4OjMwLjY2MTIwNDE0NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk0OTY2Mzg2NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBGb2N1czogQVJNNjQgTW9kdWxlIExvYWRpbmcgYW5kIEV4ZWNtZW0gQ2hhbmdlcyoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggc2VyaWVzIGZvciBhcm02NCB0aGF0J3MgbWFraW5nIHNvbWUgcHJldHR5IHNpZ25pZmljYW50IGNoYW5nZXMgdG8gbW9kdWxlIGxvYWRpbmcsIGV4ZWN1dGFibGUgbWVtb3J5IGhhbmRsaW5nLCBhbmQgRnRyYWNlLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byB0aGUgaW50cm9kdWN0aW9uIG9mIGBBUkNIX0hBU19FWEVDTUVNX1JPWGAuIEl0J3MgdG91Y2hpbmcgYSBsb3Qgb2YgY29yZSBrZXJuZWwgYXJlYXM6IGBhcmNoL2FybTY0L0tjb25maWdgLCB2YXJpb3VzIGluY2x1ZGUgZmlsZXMsIGFuZCBzb21lIGNyaXRpY2FsIHNvdXJjZSBmaWxlcyBsaWtlIGBtbS9leGVjbWVtLmNgLCBga2VybmVsL21vZHVsZS9tYWluLmNgLCBhbmQgc2V2ZXJhbCBhcm02NC1zcGVjaWZpYyBmaWxlcyBpbiB0aGUgYXJjaGl0ZWN0dXJlIGRpcmVjdG9yaWVzLiBUaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZzsgaXQncyBmdW5jdGlvbmFsbHkgY2hhbmdpbmcgdGhpbmdzIGFuZCByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBgV29ydGhGdXp6aW5nPXRydWVgIGlzIHRoZSByaWdodCBjYWxsIGhlcmUuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcyB0byB6ZXJvIGluIG9uIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgKmRpcmVjdGx5KiBpbXBhY3RlZCBieSB0aGVzZSBjaGFuZ2VzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgcmlnaHQgc3BvdHMgZm9yIGZ1enppbmcuIEknbSB0aGlua2luZzpcblxuKiAgIGBleGVjbWVtX3NwbGl0YCBhbmQgYGV4ZWNtZW1fY2FjaGVfc3BsaXRgIGluIGBtbS9leGVjbWVtLmNgLiBUaGVzZSBhcmUgY2VudHJhbCB0byB0aGUgbmV3IGBNT0RfSU5JVF9URVhUYCBzZXBhcmF0aW9uLlxuKiAgIGBtb2R1bGVfbWVtb3J5X2FsbG9jYCBpbiBga2VybmVsL21vZHVsZS9tYWluLmNgLiBNaWdodCBiZSBhIGJpdCBicm9hZCwgYnV0IGl0ICppcyogbW9kaWZpZWQsIHNvIGl0J3MgYSBnb29kIHBsYWNlIHRvIHN0YXJ0LlxuKiAgIGBleGVjbWVtX2FyY2hfc2V0dXBgIGluIGBhcmNoL2FybTY0L21tL2luaXQuY2AuIFRoaXMgaXMgd2hlcmUgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzZXR1cCBpcyBoYXBwZW5pbmcuXG4qICAgYGNoYW5nZV9tZW1vcnlfY29tbW9uYCBpbiBgYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jYC4gVGhpcyBpcyBzdGF0aWMgYW5kIHByb2JhYmx5IG5vdCB0aGUgYmVzdCBmb2N1cy5cblxuTm93LCBsZXQncyBkcmlsbCBkb3duIGEgYml0OlxuXG4qICAgSSBuZWVkIHRvIHNlZSB0aGUgZGVmaW5pdGlvbiBvZiBgZXhlY21lbV9zcGxpdGAgYW5kIGBleGVjbWVtX2NhY2hlX3NwbGl0YC4gYGV4ZWNtZW1fc3BsaXRgIGxvb2tzIGdvb2QgYXMgaXQncyBleHBvcnRlZCBhbmQgbm90IHN0YXRpYywgYnV0IGBleGVjbWVtX2NhY2hlX3NwbGl0YCBpcyBzdGF0aWMuXG4qICAgYG1vZHVsZV9tZW1vcnlfYWxsb2NgIGlzIGFsc28gc3RhdGljLCB3aGljaCBpcyBhIGJpdCBsZXNzIGlkZWFsLCBidXQgaXQncyBzdGlsbCBiZWluZyBjaGFuZ2VkIGluIHRoaXMgcGF0Y2guXG4qICAgSSdsbCBhbHNvIHRha2UgYSBsb29rIGF0IHRoZSBtb2R1bGUgUExUIGFuZCBGdHJhY2UgY29kZS4gU3BlY2lmaWMgZnVuY3Rpb25zIGxpa2UgYG1vZHVsZV9lbWl0X3BsdF9lbnRyeWAsIGBtb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnBgLCBhbmQgYG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnNgIGluIGBhcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jYCBzZWVtIHJlbGV2YW50IGFuZCB3b3J0aCBhIGxvb2suIFRoZSBGdHJhY2UgY29kZSBpbiBgYXJjaC9hcm02NC9rZXJuZWwvZnRyYWNlLmNgIGFsc28gaGFzIGZ1bmN0aW9ucyB0byBjb25zaWRlciBsaWtlIGBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jYCwgYGZ0cmFjZV9maW5kX2NhbGxhYmxlX2FkZHJgLlxuXG5JJ2xsIHVzZSBgZ3JlcHBlcmAgdG8gZ2V0IGEgcHJlY2lzZSB2aWV3IG9mIHRoZXNlIGZ1bmN0aW9ucy4gRnJvbSB0aGVyZSwgSSBjYW4gZmlndXJlIG91dCB0aGUgYmVzdCB0YXJnZXRzIGZvciBmdXp6aW5nIGNhbXBhaWducy5cblxuXG4iLCJJbnB1dFRva2VucyI6ODc1NywiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjcxNywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE0OjQ4OjQwLjE1Nzg0NTAxM1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODg1MTIyMjg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl4odm9pZCBcXFxcKnxib29sIHxpbnQgKT9leGVjbWVtX3NwbGl0XCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZXhlY21lbS5oPTE4MT1ERUZJTkVfRlJFRShleGVjbWVtLCB2b2lkICosIGlmIChfVCkgZXhlY21lbV9mcmVlKF9UKSk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaC0xODktICovXFxuaW5jbHVkZS9saW51eC9leGVjbWVtLmg6MTkwOnZvaWQgKmV4ZWNtZW1fc3BsaXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9leGVjbWVtLmgtMTkxLVxcbi0tXFxubW0vZXhlY21lbS5jPTU0Mj1ib29sIGV4ZWNtZW1faXNfcm94KGVudW0gZXhlY21lbV90eXBlIHR5cGUpXFxuLS1cXG5tbS9leGVjbWVtLmMtNTQ2LVxcbm1tL2V4ZWNtZW0uYzo1NDc6dm9pZCAqZXhlY21lbV9zcGxpdCh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxcbm1tL2V4ZWNtZW0uYy01NDgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo0ODo0My4wNDI5NzM2NzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzUyMzU1Nzc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5LCBrZWVwaW5nIGluIG1pbmQgbXkgZXhwZXJ0aXNlOlxuXG4qKkZvY3VzaW5nIE15IEFuYWx5c2lzKipcblxuUmlnaHQsIHNvIGBleGVjbWVtX3NwbGl0YCBpcyBkZWZpbml0ZWx5IHdoZXJlIEkgbmVlZCB0byBzdGFydCBkaWdnaW5nLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdG9yIG9mIHBvdGVudGlhbCBzZWN1cml0eSBpbXBsaWNhdGlvbnMsIHNwZWNpZmljYWxseSByZWxhdGVkIHRvIGV4ZWN1dGFibGUgbWVtb3J5LiBOb3csIGxldCdzIHNlZS4uLiB3aGF0IGFib3V0IGBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zYD8gSSBuZWVkIHRvIHdlaWdoIHRoYXQgYWdhaW5zdCBgZXhlY21lbV9zcGxpdGAuIEl0IHNvdW5kcyBsaWtlIGl0IGNvdWxkIGJlIGFub3RoZXIgcmVsZXZhbnQgZm9jdXMgYXJlYS4gQ291bGQgdGhhdCBmdW5jdGlvbiBiZSB1c2VkIHRvIG1vZGlmeSB0aGUgZXhlY3V0YWJsZSBtZW1vcnkgcmVnaW9ucyBhZnRlciB0aGUgc3BsaXQsIG9yIGNvdWxkIGl0IGJlIGludm9sdmVkIGluIHNldHRpbmcgdXAgdGhlIGNvbmRpdGlvbnMgZm9yIGl0PyBJcyB0aGF0IGEgY3JpdGljYWwgcG9pbnQsIG1heWJlIGxlYWRpbmcgdG8gc29tZSBuZXcgdGVjaG5pcXVlcz8gSSdtIGdvaW5nIHRvIGhhdmUgdG8gY2FyZWZ1bGx5IGNvbnNpZGVyIGJvdGggZnVuY3Rpb25zIGluIGNvbnRleHQgb2YgZWFjaCBvdGhlciBhcyBJIGRpdmUgaW50byB0aGlzIGFuYWx5c2lzLiBUaGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlbSBjb3VsZCByZXZlYWwgc29tZXRoaW5nIHJlYWxseSBpbnRlcmVzdGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAzMDUsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo0ODo0Ni4zOTUzMzE5MjdaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjE1MDU2NzUxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcmMva2VybmVsL21vZHVsZS5jPTE2PXN0YXRpYyBpbmxpbmUgdm9pZCBhcmNfd3JpdGVfbWUodW5zaWduZWQgc2hvcnQgKmFkZHIsIHVuc2lnbmVkIGxvbmcgdmFsdWUpXFxuLS1cXG5hcmNoL2FyYy9rZXJuZWwvbW9kdWxlLmMtMjUtICovXFxuYXJjaC9hcmMva2VybmVsL21vZHVsZS5jOjI2OmludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICpoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxcbmFyY2gvYXJjL2tlcm5lbC9tb2R1bGUuYy0yNy1cXHRcXHRcXHQgICAgICBjaGFyICpzZWNzdHIsIHN0cnVjdCBtb2R1bGUgKm1vZClcXG4tLVxcbmFyY2gvYXJtL2tlcm5lbC9tb2R1bGUtcGx0cy5jPTE1Nz1zdGF0aWMgdW5zaWduZWQgaW50IGNvdW50X3BsdHMoY29uc3QgRWxmMzJfU3ltICpzeW1zLCBFbGYzMl9BZGRyIGJhc2UsXFxuLS1cXG5hcmNoL2FybS9rZXJuZWwvbW9kdWxlLXBsdHMuYy0yMDgtXFxuYXJjaC9hcm0va2VybmVsL21vZHVsZS1wbHRzLmM6MjA5OmludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICplaGRyLCBFbGZfU2hkciAqc2VjaGRycyxcXG5hcmNoL2FybS9rZXJuZWwvbW9kdWxlLXBsdHMuYy0yMTAtXFx0XFx0XFx0ICAgICAgY2hhciAqc2Vjc3RyaW5ncywgc3RydWN0IG1vZHVsZSAqbW9kKVxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYz0yNzg9c3RhdGljIGNvbnN0IGludCBmdHJhY2VfcGx0cyA9IElTX0VOQUJMRUQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKSA/IE5SX0ZUUkFDRV9QTFRTIDogMDtcXG5hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jLTI3OS1cXG5hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jOjI4MDppbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqZWhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXFxuYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYy0yODEtXFx0XFx0XFx0ICAgICAgY2hhciAqc2Vjc3RyaW5ncywgc3RydWN0IG1vZHVsZSAqbW9kKVxcbi0tXFxuYXJjaC9oZXhhZ29uL2tlcm5lbC9tb2R1bGUuYy0yNi0gKi9cXG5hcmNoL2hleGFnb24va2VybmVsL21vZHVsZS5jOjI3OmludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICpoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxcbmFyY2gvaGV4YWdvbi9rZXJuZWwvbW9kdWxlLmMtMjgtXFx0XFx0XFx0XFx0Y2hhciAqc2Vjc3RyaW5ncyxcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tb2R1bGUtc2VjdGlvbnMuYz03OT1zdGF0aWMgdm9pZCBjb3VudF9tYXhfZW50cmllcyhFbGZfUmVsYSAqcmVsYXMsIGludCBudW0sXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rZXJuZWwvbW9kdWxlLXNlY3Rpb25zLmMtMTA0LVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tb2R1bGUtc2VjdGlvbnMuYzoxMDU6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9tb2R1bGUtc2VjdGlvbnMuYy0xMDYtXFx0XFx0XFx0ICAgICAgY2hhciAqc2Vjc3RyaW5ncywgc3RydWN0IG1vZHVsZSAqbW9kKVxcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL21vZHVsZS5jPTI1Nz11bnNpZ25lZCBpbnQgYXJjaF9tb2Rfc2VjdGlvbl9wcmVwZW5kKHN0cnVjdCBtb2R1bGUgKm1vZCxcXG4tLVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYy0yNjYtI2RlZmluZSBDT05TVFxcbmFyY2gvcGFyaXNjL2tlcm5lbC9tb2R1bGUuYzoyNjc6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoQ09OU1QgRWxmX0VoZHIgKmhkcixcXG5hcmNoL3BhcmlzYy9rZXJuZWwvbW9kdWxlLmMtMjY4LVxcdFxcdFxcdCAgICAgIENPTlNUIEVsZl9TaGRyICpzZWNoZHJzLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfMzIuYz03Mz1zdGF0aWMgdW5zaWduZWQgbG9uZyBnZXRfcGx0X3NpemUoY29uc3QgRWxmMzJfRWhkciAqaGRyLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfMzIuYy0xMTktXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC9tb2R1bGVfMzIuYzoxMjA6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmMzJfRWhkciAqaGRyLFxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzMyLmMtMTIxLVxcdFxcdFxcdCAgICAgIEVsZjMyX1NoZHIgKnNlY2hkcnMsXFxuLS1cXG5hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jPTQyND1ib29sIG1vZHVsZV9pbml0X3NlY3Rpb24oY29uc3QgY2hhciAqbmFtZSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzY0LmMtNDI5LVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvbW9kdWxlXzY0LmM6NDMwOmludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZjY0X0VoZHIgKmhkcixcXG5hcmNoL3Bvd2VycGMva2VybmVsL21vZHVsZV82NC5jLTQzMS1cXHRcXHRcXHQgICAgICBFbGY2NF9TaGRyICpzZWNoZHJzLFxcbi0tXFxuYXJjaC9yaXNjdi9rZXJuZWwvbW9kdWxlLXNlY3Rpb25zLmM9MTAxPXN0YXRpYyBib29sIHJlbGFfbmVlZHNfcGx0X2dvdF9lbnRyeShjb25zdCBFbGZfUmVsYSAqcmVsYSlcXG4tLVxcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS1zZWN0aW9ucy5jLTExMi1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9tb2R1bGUtc2VjdGlvbnMuYzoxMTM6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxcbmFyY2gvcmlzY3Yva2VybmVsL21vZHVsZS1zZWN0aW9ucy5jLTExNC1cXHRcXHRcXHQgICAgICBjaGFyICpzZWNzdHJpbmdzLCBzdHJ1Y3QgbW9kdWxlICptb2QpXFxuLS1cXG5hcmNoL3MzOTAva2VybmVsL21vZHVsZS5jPTU5PXN0YXRpYyB2b2lkIGNoZWNrX3JlbGEoRWxmX1JlbGEgKnJlbGEsIHN0cnVjdCBtb2R1bGUgKm1lKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYy0xMDctICovXFxuYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYzoxMDg6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXFxuYXJjaC9zMzkwL2tlcm5lbC9tb2R1bGUuYy0xMDktXFx0XFx0XFx0ICAgICAgY2hhciAqc2Vjc3RyaW5ncywgc3RydWN0IG1vZHVsZSAqbWUpXFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9tb2R1bGUuYy0yNC0vKiBNYWtlIGdlbmVyaWMgY29kZSBpZ25vcmUgU1RUX1JFR0lTVEVSIGR1bW15IHVuZGVmaW5lZCBzeW1ib2xzLiAgKi9cXG5hcmNoL3NwYXJjL2tlcm5lbC9tb2R1bGUuYzoyNTppbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqaGRyLFxcbmFyY2gvc3BhcmMva2VybmVsL21vZHVsZS5jLTI2LVxcdFxcdFxcdCAgICAgIEVsZl9TaGRyICpzZWNoZHJzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tb2R1bGVsb2FkZXIuaD0xNz1ib29sIG1vZHVsZV9lbGZfY2hlY2tfYXJjaChFbGZfRWhkciAqaGRyKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvbW9kdWxlbG9hZGVyLmgtMTktLyogQWRqdXN0IGFyY2gtc3BlY2lmaWMgc2VjdGlvbnMuICBSZXR1cm4gMCBvbiBzdWNjZXNzLiAgKi9cXG5pbmNsdWRlL2xpbnV4L21vZHVsZWxvYWRlci5oOjIwOmludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICpoZHIsXFxuaW5jbHVkZS9saW51eC9tb2R1bGVsb2FkZXIuaC0yMS1cXHRcXHRcXHQgICAgICBFbGZfU2hkciAqc2VjaGRycyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NDg6NDguNTQ1OTAzMDgxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzk0ODUwMDIzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbml0aWFsIEFyY2hpdGVjdHVyZSBNb2R1bGUgVGhvdWdodHMqKlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUuLi4gYG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnNgIGlzIGRlZmluaXRlbHkgYSBzb2xpZCBuYW1lLCBpdCBjb21tdW5pY2F0ZXMgdGhlIGdlbmVyYWwgcHVycG9zZSBvZiB0aGlzIG1vZHVsZSBxdWl0ZSBlZmZlY3RpdmVseS4gSXQncyBhIGNsZWFyIGRlc2NyaXB0b3Igb2YgaXRzIGZ1bmN0aW9uIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4gQnV0LCBJJ20gYWxyZWFkeSB0aGlua2luZyBwYXN0IHRoYXQgLSB3aGF0IGFib3V0IGBleGVjbWVtX2FyY2hfc2V0dXBgPyBUaGF0IHBocmFzZSBoaWdobGlnaHRzIHRoZSBzcGVjaWZpYyBhc3BlY3Qgb2YgZXhlY3V0aW9uIG1lbW9yeSBzZXR1cCBhdCB0aGUgYXJjaGl0ZWN0dXJhbCBsZXZlbC4gSSdtIHdlaWdoaW5nIHVwIHRoZSBwb3RlbnRpYWwgZm9yIGEgbmFtZSB0aGF0IGNhcHR1cmVzIHRoZSBzZXR1cCBvZiBleGVjdXRpb24gbWVtb3J5IHZlcnN1cyB0aGUgcG90ZW50aWFsIG1vcmUgZ2VuZXJpYyBuYW1lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjAzMCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE0OjQ4OjUyLjQ5NDQwNTA4NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDIzOTQ5NzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCBcXFxcKmV4ZWNtZW1fYXJjaF9zZXR1cFwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybS9tbS9pbml0LmM9NDQ5PXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XFxuYXJjaC9hcm0vbW0vaW5pdC5jLTQ1MC1cXG5hcmNoL2FybS9tbS9pbml0LmM6NDUxOnN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcXG5hcmNoL2FybS9tbS9pbml0LmMtNDUyLXtcXG4tLVxcbmFyY2gvYXJtNjQvbW0vaW5pdC5jPTUwMz1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xcbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTUwNC1cXG5hcmNoL2FybTY0L21tL2luaXQuYzo1MDU6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTUwNi17XFxuLS1cXG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmM9MjQwPXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XFxuYXJjaC9sb29uZ2FyY2gvbW0vaW5pdC5jLTI0MS1cXG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmM6MjQyOnN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcXG5hcmNoL2xvb25nYXJjaC9tbS9pbml0LmMtMjQzLXtcXG4tLVxcbmFyY2gvbWlwcy9tbS9pbml0LmM9NTYzPXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XFxuYXJjaC9taXBzL21tL2luaXQuYy01NjQtXFxuYXJjaC9taXBzL21tL2luaXQuYzo1NjU6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbmFyY2gvbWlwcy9tbS9pbml0LmMtNTY2LXtcXG4tLVxcbmFyY2gvbmlvczIvbW0vaW5pdC5jPTEzNz1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xcbmFyY2gvbmlvczIvbW0vaW5pdC5jLTEzOC1cXG5hcmNoL25pb3MyL21tL2luaXQuYzoxMzk6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbmFyY2gvbmlvczIvbW0vaW5pdC5jLTE0MC17XFxuLS1cXG5hcmNoL3BhcmlzYy9tbS9pbml0LmM9OTc3PXN0YXRpYyBzdHJ1Y3QgZXhlY21lbV9pbmZvIGV4ZWNtZW1faW5mbyBfX3JvX2FmdGVyX2luaXQ7XFxuYXJjaC9wYXJpc2MvbW0vaW5pdC5jLTk3OC1cXG5hcmNoL3BhcmlzYy9tbS9pbml0LmM6OTc5OnN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcXG5hcmNoL3BhcmlzYy9tbS9pbml0LmMtOTgwLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9tbS9tZW0uYz0zOTI9c3RhdGljIHZvaWQgcHJlYWxsb2NfZXhlY21lbV9wZ3RhYmxlKHZvaWQpIHsgfVxcbi0tXFxuYXJjaC9wb3dlcnBjL21tL21lbS5jLTM5NC1cXG5hcmNoL3Bvd2VycGMvbW0vbWVtLmM6Mzk1OnN0cnVjdCBleGVjbWVtX2luZm8gX19pbml0ICpleGVjbWVtX2FyY2hfc2V0dXAodm9pZClcXG5hcmNoL3Bvd2VycGMvbW0vbWVtLmMtMzk2LXtcXG4tLVxcbmFyY2gvcmlzY3YvbW0vaW5pdC5jPTE0NDg9c3RhdGljIHN0cnVjdCBleGVjbWVtX2luZm8gZXhlY21lbV9pbmZvIF9fcm9fYWZ0ZXJfaW5pdDtcXG5hcmNoL3Jpc2N2L21tL2luaXQuYy0xNDQ5LVxcbmFyY2gvcmlzY3YvbW0vaW5pdC5jOjE0NTA6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbmFyY2gvcmlzY3YvbW0vaW5pdC5jLTE0NTEte1xcbi0tXFxuYXJjaC9zMzkwL21tL2luaXQuYz0yOTM9c3RhdGljIHN0cnVjdCBleGVjbWVtX2luZm8gZXhlY21lbV9pbmZvIF9fcm9fYWZ0ZXJfaW5pdDtcXG5hcmNoL3MzOTAvbW0vaW5pdC5jLTI5NC1cXG5hcmNoL3MzOTAvbW0vaW5pdC5jOjI5NTpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXFxuYXJjaC9zMzkwL21tL2luaXQuYy0yOTYte1xcbi0tXFxuYXJjaC9zcGFyYy9tbS9leGVjbWVtLmM9NT1zdGF0aWMgc3RydWN0IGV4ZWNtZW1faW5mbyBleGVjbWVtX2luZm8gX19yb19hZnRlcl9pbml0O1xcbmFyY2gvc3BhcmMvbW0vZXhlY21lbS5jLTYtXFxuYXJjaC9zcGFyYy9tbS9leGVjbWVtLmM6NzpzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXFxuYXJjaC9zcGFyYy9tbS9leGVjbWVtLmMtOC17XFxuLS1cXG5hcmNoL3g4Ni9tbS9pbml0LmM9MTA2MD12b2lkIGV4ZWNtZW1fZmlsbF90cmFwcGluZ19pbnNucyh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxcbi0tXFxuYXJjaC94ODYvbW0vaW5pdC5jLTEwNjUtXFxuYXJjaC94ODYvbW0vaW5pdC5jOjEwNjY6c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbmFyY2gveDg2L21tL2luaXQuYy0xMDY3LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NDg6NTQuNTE4MzU5MzgxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwNzQ2NTAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJIHdlcmUgdGhpbmtpbmcgdGhyb3VnaCB0aGUgcHJvYmxlbTpcblxuKipGdXp6aW5nIHRoZSBgZXhlY21lbWAgTW9kdWxlKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHRoZSBiZXN0IHBvaW50cyB0byB0YXJnZXQgZm9yIGZ1enppbmcgd2l0aGluIHRoZSBgZXhlY21lbWAgbW9kdWxlLiBMZXQncyBzZWUuLi4gYGV4ZWNtZW1fYXJjaF9zZXR1cGAgaXMgYmFzaWNhbGx5IHRoZSBgX19pbml0YCBvZiB0aGlzIHdob2xlIHRoaW5nLCByaWdodD8gVGhhdCBtZWFucyBpdCBydW5zIG9uY2UgYXQgYm9vdCwgYW5kIGl0J3Mgbm90IGdvaW5nIHRvIGJlIHN1cGVyIGhlbHBmdWwgZm9yIGZ1enppbmcuIFdlIG5lZWQgc29tZXRoaW5nIHRoYXQncyByZXBlYXRlZGx5IGNhbGxlZCBhbmQgcHJvY2Vzc2VzIHBvdGVudGlhbGx5IG1hbGZvcm1lZCBpbnB1dCBvciBzb21ldGhpbmcuIGBleGVjbWVtX3NwbGl0YCBsb29rcyBwcm9taXNpbmcuIFRoYXQncyBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBkZWVwZXIuXG5cbkhtbSwgd2hhdCBhYm91dCBgZXhlY21lbV9hbGxvY2A/IEl0IGFwcGVhcnMgdW5tb2RpZmllZCwgYnV0IG1heWJlIHRoZXJlJ3Mgc29tZSB1c2VmdWwgZnVuY3Rpb25hbGl0eSBhZnRlciB0aGF0LiBBaCwgaGEhIEkgc2VlIHRoYXQgYGV4ZWNtZW1fY2FjaGVfcG9wdWxhdGVfYWxsb2NgICppcyogbW9kaWZpZWQsIHdoaWNoIHByb2JhYmx5IG1lYW5zIHRoYXQncyB0aGUgb25lIEkgbmVlZCB0byBmb2N1cyBvbiBuZXh0LiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhlc2UgZnVuY3Rpb25zLCBidXQgYGV4ZWNtZW1fY2FjaGVfcG9wdWxhdGVfYWxsb2NgIGxvb2tzIGxpa2UgdGhlIHByaW1hcnkgdGFyZ2V0IGZvciBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMzYxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NDg6NTguOTI1ODM5NDQzWiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTkyOTgzOTA0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5zdGF0aWMgdm9pZCBcXFxcKmV4ZWNtZW1fY2FjaGVfcG9wdWxhdGVfYWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZXhlY21lbS5jPTI3MD1zdGF0aWMgdm9pZCAqX19leGVjbWVtX2NhY2hlX2FsbG9jKHN0cnVjdCBleGVjbWVtX3JhbmdlICpyYW5nZSwgc2l6ZV90IHNpemUpXFxuLS1cXG5tbS9leGVjbWVtLmMtMjc2LVxcbm1tL2V4ZWNtZW0uYzoyNzc6c3RhdGljIHZvaWQgKmV4ZWNtZW1fY2FjaGVfcG9wdWxhdGVfYWxsb2Moc3RydWN0IGV4ZWNtZW1fcmFuZ2UgKnJhbmdlLCBzaXplX3Qgc2l6ZSlcXG5tbS9leGVjbWVtLmMtMjc4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NDk6MDAuOTE4ODY4ODk2WiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM4NDUxMTI5NTAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgQWxsb2NhdGlvbiBTdHJhdGVneSoqXG5cbkFscmlnaHQsIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gKmBleGVjbWVtX2NhY2hlX3BvcHVsYXRlX2FsbG9jYCouLi4gdGhhdCdzIGEgKnN0YXRpYyogZnVuY3Rpb24uIFJpZ2h0IGF3YXksIHRoYXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGF0IG1lYW5zIGl0J3MgaW50ZXJuYWwgdG8gd2hhdGV2ZXIgY29tcGlsYXRpb24gdW5pdCBpdCdzIGRlZmluZWQgaW4sIGxpa2VseSByZWxhdGVkIHRvIHRoZSBleGVjdXRpb24gbWVtb3J5IG1hbmFnZW1lbnQuIEl0J3Mgbm90IG1lYW50IHRvIGJlIGRpcmVjdGx5IGNhbGxlZCBmcm9tIGVsc2V3aGVyZSBpbiB0aGUgc3lzdGVtLCB3aGljaCBzdWdnZXN0cyBhIHRpZ2h0bHkgY29udHJvbGxlZCwgcG9zc2libHkgb3B0aW1pemVkLCBhbGxvY2F0aW9uIHJvdXRpbmUgZm9yIGEgc3BlY2lmaWMgcHVycG9zZS4gQW5kIHRoZSBmYWN0IHRoYXQgKmBleGVjbWVtX2FsbG9jYCogY2FsbHMgdGhpcyBzdGF0aWMgZnVuY3Rpb24uLi4gdGhhdCdzIHRoZSBrZXkgcmVsYXRpb25zaGlwLiAqYGV4ZWNtZW1fYWxsb2NgKiBpcyBsaWtlbHkgdGhlIHB1YmxpYy1mYWNpbmcgZW50cnkgcG9pbnQsIHRoZSBmdW5jdGlvbiB0aGF0IHVzZXJzIG9mIHRoaXMgZXhlY3V0aW9uIG1lbW9yeSBzdWJzeXN0ZW0gd291bGQgY2FsbC4gQW5kICpgZXhlY21lbV9jYWNoZV9wb3B1bGF0ZV9hbGxvY2AqIGlzIHRoZSAqd29ya2hvcnNlKiwgdGhlIHVuc3VuZyBoZXJvIHRoYXQgYWN0dWFsbHkgZG9lcyB0aGUgZGlydHkgd29yayBvZiBhbGxvY2F0aW5nIGZyb20gdGhlIGNhY2hlLiBUaGlzIGlzIGEgY2xhc3NpYyBwYXR0ZXJuLCBhIGNvbnRyb2xsZWQgaW50ZXJmYWNlIHdpdGggYSBoaWRkZW4gaW1wbGVtZW50YXRpb24gZGV0YWlsLiBUaGF0IHN0cnVjdHVyZSBpcyBkZXNpZ25lZCBmb3IgZWZmaWNpZW5jeSBhbmQgc2FmZXR5LCBsaWtlbHkgaGlkaW5nIGFsbCBraW5kcyBvZiBjYWNoZSBtYW5hZ2VtZW50IGNvbXBsZXhpdHkuIEknZCBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gdGhlIGNvZGUgdG8gcmVhbGx5IHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucywgYnV0IHRoZSBkZXNpZ24gaXMgYSBmYW1pbGlhciBhbmQgc2Vuc2libGUgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMzgwMiwiT3V0cHV0VG9rZW5zIjoyMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE0OjQ5OjA0Ljc2Mzk4NDMxNloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY4NTI2MzUzNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBcXFxcKmV4ZWNtZW1fYWxsb2NcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC9leGVjbWVtLmg9MTMzPXN0cnVjdCBleGVjbWVtX2luZm8gKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvZXhlY21lbS5oLTE1MC0gKi9cXG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaDoxNTE6dm9pZCAqZXhlY21lbV9hbGxvYyhlbnVtIGV4ZWNtZW1fdHlwZSB0eXBlLCBzaXplX3Qgc2l6ZSk7XFxuaW5jbHVkZS9saW51eC9leGVjbWVtLmgtMTUyLVxcbi0tXFxuaW5jbHVkZS9saW51eC9leGVjbWVtLmgtMTcyLSAqL1xcbmluY2x1ZGUvbGludXgvZXhlY21lbS5oOjE3Mzp2b2lkICpleGVjbWVtX2FsbG9jX3J3KGVudW0gZXhlY21lbV90eXBlIHR5cGUsIHNpemVfdCBzaXplKTtcXG5pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaC0xNzQtXFxuLS1cXG5tbS9leGVjbWVtLmM9NDkxPXN0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpXFxuLS1cXG5tbS9leGVjbWVtLmMtNDk2LVxcbm1tL2V4ZWNtZW0uYzo0OTc6dm9pZCAqZXhlY21lbV9hbGxvYyhlbnVtIGV4ZWNtZW1fdHlwZSB0eXBlLCBzaXplX3Qgc2l6ZSlcXG5tbS9leGVjbWVtLmMtNDk4LXtcXG4tLVxcbm1tL2V4ZWNtZW0uYy01MTQtXFxubW0vZXhlY21lbS5jOjUxNTp2b2lkICpleGVjbWVtX2FsbG9jX3J3KGVudW0gZXhlY21lbV90eXBlIHR5cGUsIHNpemVfdCBzaXplKVxcbm1tL2V4ZWNtZW0uYy01MTYte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo0OTowNi40NDkyNTE2NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzkzNDY2OTcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgaWYgSSB3ZXJlIHRoaW5raW5nIHRoZXNlIHRoaW5nczpcblxuKipLZXJuZWwgTWVtb3J5IEFsbG9jYXRpb24gQ29uc2lkZXJhdGlvbnMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGUgbWVtb3J5IGFsbG9jYXRpb24gY29kZSBoZXJlLiBTcGVjaWZpY2FsbHksIGBleGVjbWVtX2FsbG9jX3J3YCBpcyBjYWxsZWQgYnkgYG1vZHVsZV9tZW1vcnlfYWxsb2NgLCB3aGljaCBtYWtlcyBzZW5zZS4gSSBuZWVkIHRvIGludGVncmF0ZSB0aGVzZSBuZXcgZnVuY3Rpb25zIGludG8gbXkgdW5kZXJzdGFuZGluZy4gUmlnaHQsIHNvIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhZGQgYGV4ZWNtZW1fYWxsb2NfcndgIGFuZCB0aGUgYGV4ZWNtZW1fc3BsaXRgIGZ1bmN0aW9uIHRvIG15IG1lbnRhbCBtYXAgb2YgaG93IHRoaXMgYWxsIHdvcmtzLiBJJ2xsIG5lZWQgdG8gcmVtZW1iZXIgaG93IHRoZXkgZml0IHdpdGhpbiB0aGUgYnJvYWRlciBwaWN0dXJlIG9mIG1vZHVsZSBtZW1vcnkgbWFuYWdlbWVudC5cblxuQW5kIHRoZW4gdGhlcmUncyBgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuY2AuIEkgc2VlIHRoYXQgaXQncyBiZWVuIG1vZGlmaWVkLCBzbyBJJ2xsIG5lZWQgdG8gY2FyZWZ1bGx5IHJldmlldyB0aG9zZSBjaGFuZ2VzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvbiBmdW5jdGlvbiB0cmFjaW5nLiBJJ2xsIGtlZXAgdGhpcyBpbiBtaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDQzNiwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE0OjQ5OjEwLjg0MjcyMDg2OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAxOTA3MDQ0OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeaW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm0va2VybmVsL2Z0cmFjZS5jPTk4PXN0YXRpYyBpbnQgZnRyYWNlX21vZGlmeV9jb2RlKHVuc2lnbmVkIGxvbmcgcGMsIHVuc2lnbmVkIGxvbmcgb2xkLFxcbi0tXFxuYXJjaC9hcm0va2VybmVsL2Z0cmFjZS5jLTEyMS1cXG5hcmNoL2FybS9rZXJuZWwvZnRyYWNlLmM6MTIyOmludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYylcXG5hcmNoL2FybS9rZXJuZWwvZnRyYWNlLmMtMTIzLXtcXG4tLVxcbmFyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jPTIxMz1zdGF0aWMgaW50IGZ0cmFjZV9tb2RpZnlfY29kZSh1bnNpZ25lZCBsb25nIHBjLCB1MzIgb2xkLCB1MzIgbmV3LFxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvZnRyYWNlLmMtMjQxLSAqL1xcbmFyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jOjI0MjppbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpXFxuYXJjaC9hcm02NC9rZXJuZWwvZnRyYWNlLmMtMjQzLXtcXG4tLVxcbmFyY2gvY3NreS9rZXJuZWwvZnRyYWNlLmM9MTIxPWludCBmdHJhY2VfbWFrZV9ub3Aoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLFxcbi0tXFxuYXJjaC9jc2t5L2tlcm5lbC9mdHJhY2UuYy0xMjYtXFxuYXJjaC9jc2t5L2tlcm5lbC9mdHJhY2UuYzoxMjc6aW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxcbmFyY2gvY3NreS9rZXJuZWwvZnRyYWNlLmMtMTI4LXtcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9mdHJhY2VfZHluLmM9MTE3PWludCBmdHJhY2VfbW9kaWZ5X2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBvbGRfYWRkciwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2Z0cmFjZV9keW4uYy0xMzYtXFxuYXJjaC9sb29uZ2FyY2gva2VybmVsL2Z0cmFjZV9keW4uYzoxMzc6aW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxcbmFyY2gvbG9vbmdhcmNoL2tlcm5lbC9mdHJhY2VfZHluLmMtMTM4LXtcXG4tLVxcbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZnRyYWNlLmM9MTUzPWludCBmdHJhY2VfbWFrZV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG4tLVxcbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZnRyYWNlLmMtMTY1LVxcbmFyY2gvbWljcm9ibGF6ZS9rZXJuZWwvZnRyYWNlLmM6MTY2OmludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYylcXG5hcmNoL21pY3JvYmxhemUva2VybmVsL2Z0cmFjZS5jLTE2Ny17XFxuLS1cXG5hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jPTE5Nz1pbnQgZnRyYWNlX21ha2VfY2FsbChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jLTIyMC1cXG5hcmNoL21pcHMva2VybmVsL2Z0cmFjZS5jOjIyMTppbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpXFxuYXJjaC9taXBzL2tlcm5lbC9mdHJhY2UuYy0yMjIte1xcbi0tXFxuYXJjaC9wYXJpc2Mva2VybmVsL2Z0cmFjZS5jPTg4PWludCBmdHJhY2VfZGlzYWJsZV9mdHJhY2VfZ3JhcGhfY2FsbGVyKHZvaWQpXFxuLS1cXG5hcmNoL3BhcmlzYy9rZXJuZWwvZnRyYWNlLmMtOTUtI2lmZGVmIENPTkZJR19EWU5BTUlDX0ZUUkFDRVxcbmFyY2gvcGFyaXNjL2tlcm5lbC9mdHJhY2UuYzo5NjppbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpXFxuYXJjaC9wYXJpc2Mva2VybmVsL2Z0cmFjZS5jLTk3LXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvdHJhY2UvZnRyYWNlLmM9NDcwPWludCBmdHJhY2VfaW5pdF9ub3Aoc3RydWN0IG1vZHVsZSAqbW9kLCBzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFjZS9mdHJhY2UuYy01NDktXFxuYXJjaC9wb3dlcnBjL2tlcm5lbC90cmFjZS9mdHJhY2UuYzo1NTA6aW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvdHJhY2UvZnRyYWNlLmMtNTUxLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvdHJhY2UvZnRyYWNlXzY0X3BnLmM9NjM3PWludCBmdHJhY2VfbW9kaWZ5X2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBvbGRfYWRkcixcXG4tLVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvdHJhY2UvZnRyYWNlXzY0X3BnLmMtNjY3LVxcbmFyY2gvcG93ZXJwYy9rZXJuZWwvdHJhY2UvZnRyYWNlXzY0X3BnLmM6NjY4OmludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYylcXG5hcmNoL3Bvd2VycGMva2VybmVsL3RyYWNlL2Z0cmFjZV82NF9wZy5jLTY2OS17XFxuLS1cXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYz0xNzc9ZnRyYWNlX2Z1bmNfdCBmdHJhY2VfY2FsbF9kZXN0ID0gZnRyYWNlX3N0dWI7XFxuYXJjaC9yaXNjdi9rZXJuZWwvZnRyYWNlLmM6MTc4OmludCBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jKGZ0cmFjZV9mdW5jX3QgZnVuYylcXG5hcmNoL3Jpc2N2L2tlcm5lbC9mdHJhY2UuYy0xNzkte1xcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYz0yMzY9aW50IGZ0cmFjZV9tYWtlX2NhbGwoc3RydWN0IGR5bl9mdHJhY2UgKnJlYywgdW5zaWduZWQgbG9uZyBhZGRyKVxcbi0tXFxuYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYy0yNDMtXFxuYXJjaC9zMzkwL2tlcm5lbC9mdHJhY2UuYzoyNDQ6aW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxcbmFyY2gvczM5MC9rZXJuZWwvZnRyYWNlLmMtMjQ1LXtcXG4tLVxcbmFyY2gvc2gva2VybmVsL2Z0cmFjZS5jPTE5Mj1zdGF0aWMgaW50IGZ0cmFjZV9tb2RpZnlfY29kZSh1bnNpZ25lZCBsb25nIGlwLCB1bnNpZ25lZCBjaGFyICpvbGRfY29kZSxcXG4tLVxcbmFyY2gvc2gva2VybmVsL2Z0cmFjZS5jLTIyMS1cXG5hcmNoL3NoL2tlcm5lbC9mdHJhY2UuYzoyMjI6aW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxcbmFyY2gvc2gva2VybmVsL2Z0cmFjZS5jLTIyMy17XFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYz02Nj1pbnQgZnRyYWNlX21ha2VfY2FsbChzdHJ1Y3QgZHluX2Z0cmFjZSAqcmVjLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYy03NS1cXG5hcmNoL3NwYXJjL2tlcm5lbC9mdHJhY2UuYzo3NjppbnQgZnRyYWNlX3VwZGF0ZV9mdHJhY2VfZnVuYyhmdHJhY2VfZnVuY190IGZ1bmMpXFxuYXJjaC9zcGFyYy9rZXJuZWwvZnRyYWNlLmMtNzcte1xcbi0tXFxuYXJjaC94ODYva2VybmVsL2Z0cmFjZS5jPTE4MD1pbnQgZnRyYWNlX21vZGlmeV9jYWxsKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsIHVuc2lnbmVkIGxvbmcgb2xkX2FkZHIsXFxuLS1cXG5hcmNoL3g4Ni9rZXJuZWwvZnRyYWNlLmMtMTg2LVxcbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYzoxODc6aW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxcbmFyY2gveDg2L2tlcm5lbC9mdHJhY2UuYy0xODgte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo0OToxMi44NjE4MDU1MTdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTA0MDkzMzg0MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEFybTY0IEZ0cmFjZSBDaGFuZ2VzKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgYXJjaC9hcm02NC9rZXJuZWwvZnRyYWNlLmNgIGRpZmYuIEluaXRpYWxseSwgSSBzYXcgdGhlIGNoYW5nZXMgdG8gYGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmNgLCBidXQgdGhhdCBzZWVtcyBtb3JlIGxpa2UgYSBjb250ZXh0dWFsIGNoYW5nZS4gVGhlIHJlYWwgbWVhdCBvZiB0aGUgdXBkYXRlIGlzIHdpdGhpbiBgZ2V0X2Z0cmFjZV9wbHRgLCB3aGljaCBpcywgaW50ZXJlc3RpbmdseSwgc3RhdGljLiBNeSBpbml0aWFsIGZvY3VzIHdhcyBvbiB0aGUgd3JvbmcgZnVuY3Rpb24sIGl0IHNlZW1zISBBbmQgYWxzbyB0aGUgY2hhbmdlcyB0byBgZnRyYWNlX2ZpbmRfY2FsbGFibGVfYWRkcmAsIGFub3RoZXIgc3RhdGljIGZ1bmN0aW9uLiBcblxuVGhpcyBtZWFucyB0aGUgY29yZSBvZiB0aGUgY2hhbmdlIGlzIGxvY2FsaXplZCB3aXRoaW4gdGhlIGZpbGUsIGxpa2VseSBpbXBhY3RpbmcgaG93IFBMVCBlbnRyaWVzIGFyZSBoYW5kbGVkIHNwZWNpZmljYWxseSBmb3IgRnRyYWNlIHdpdGhpbiB0aGlzIGFyY2hpdGVjdHVyZS4gVGhlIGBnZXRfZnRyYWNlX3BsdGAgZnVuY3Rpb24sIHNwZWNpZmljYWxseS4gTGV0IG1lIHF1aWNrbHkgc2hpZnQgbXkgZm9jdXMgdG8gaG93IFBMVCBlbnRyaWVzIGFyZSBlbWl0dGVkLiBJIHdvbmRlciBpZiB0aGlzIGFmZmVjdHMgaG93IHRoZXNlIGZ1bmN0aW9ucyBpbnRlcmZhY2Ugd2l0aCBgbW9kdWxlX2VtaXRfcGx0X2VudHJ5YCwgb3IgcmVsYXRlZCBmdW5jdGlvbnMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIHVzZWQgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjMwNywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIxMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo0OToxNy45MDI3NDE3MjhaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0MTY3Mzc5NDgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnU2NCBtb2R1bGVfZW1pdF9wbHRfZW50cnlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaD0xNj1zdHJ1Y3QgbW9kX2FyY2hfc3BlY2lmaWMge1xcbi0tXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaC0yMi1cXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oOjIzOnU2NCBtb2R1bGVfZW1pdF9wbHRfZW50cnkoc3RydWN0IG1vZHVsZSAqbW9kLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmgtMjQtXFx0XFx0XFx0ICB2b2lkICpsb2MsIGNvbnN0IEVsZjY0X1JlbGEgKnJlbGEsXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jPTQxPXN0YXRpYyBib29sIHBsdF9lbnRyaWVzX2VxdWFsKGNvbnN0IHN0cnVjdCBwbHRfZW50cnkgKmEsXFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jLTY4LVxcbmFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmM6Njk6dTY0IG1vZHVsZV9lbWl0X3BsdF9lbnRyeShzdHJ1Y3QgbW9kdWxlICptb2QsIEVsZjY0X1NoZHIgKnNlY2hkcnMsXFxuYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYy03MC1cXHRcXHRcXHQgIHZvaWQgKmxvYywgY29uc3QgRWxmNjRfUmVsYSAqcmVsYSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NDk6MjAuMzE5NDg0Njc2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNzc5NjEyODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgaW1tZWRpYXRlIHRob3VnaHRzLCBhcyBJIHVuZGVyc3RhbmQgdGhlIHNpdHVhdGlvbjpcblxuKipSZWZsZWN0aW5nIG9uIENvZGUgRXhwb3J0IGFuZCBNb2RpZmljYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gc2VlaW5nIHRoYXQgYG1vZHVsZV9lbWl0X3BsdF9lbnRyeWAgaXMgZXhwb3NlZCBnbG9iYWxseS4gVGhhdCdzIGEgc2lnbmlmaWNhbnQgcG9pbnQgdG8gbm90ZSBpbW1lZGlhdGVseSDigJMgaXQncyBnb2luZyB0byBiZSBhY2Nlc3NpYmxlIG91dHNpZGUgaXRzIGludGVuZGVkIHNjb3BlLCB3aGljaCBhbHdheXMgaW50cm9kdWNlcyBwb3RlbnRpYWwgcmlza3MgYW5kIGRlc2lnbiBjb25zaWRlcmF0aW9ucy4gSSdsbCBuZWVkIHRvIHJlbWVtYmVyIHRvIGNoZWNrIGhvdyB0aGF0IGV4cG9ydCBhZmZlY3RzIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZSBhbmQgaWYgaXQgd2FzIGRvbmUgaW50ZW50aW9uYWxseS4gSSBzaG91bGQgYWxzbyBzZWUgd2hlcmUgaXQgaXMgdXNlZC5cblxuVGhlbiB0aGVyZSBpcyB0aGUgbW9kaWZpY2F0aW9uIHRvIGBtb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnBgLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGN1cnJlbnQgY2hhbmdlcyBhcmUgbm90IGlzb2xhdGVkLCBzbyB0aGUgaW1wYWN0IGlzIGxhcmdlciB0aGFuIGp1c3Qgb25lIGFyZWEuIEnigJlsbCBiZSBjaGVja2luZyB0aGUgaW50ZXJkZXBlbmRlbmNpZXMgYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGNsb3NlbHkgdG8gdW5kZXJzdGFuZCBob3cgdGhpcyBjaGFuZ2UgcHJvcGFnYXRlcy4gVGhpcyBtaWdodCBiZSBhIHN5bXB0b20gb2YgYSBsYXJnZXIgcmVmYWN0b3IsIG9yIGEgdGFyZ2V0ZWQgZml4LCBidXQgZWl0aGVyIHdheSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgY2hhbmdlIGFuZCBpZiB0aGUgaW50ZW5kZWQgcHVycG9zZSBvZiB0aGUgY29kZSBpcyBzdGlsbCB2YWxpZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcwMzEsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo0OToyNC42OTc0NDk1MjNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5NTQ1OTgyNzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiXnU2NCBtb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnBcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaD0yMz11NjQgbW9kdWxlX2VtaXRfcGx0X2VudHJ5KHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycyxcXG4tLVxcbmFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmgtMjYtXFxuYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaDoyNzp1NjQgbW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwKHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycyxcXG5hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oLTI4LVxcdFxcdFxcdFxcdHZvaWQgKmxvYywgdTY0IHZhbCk7XFxuLS1cXG5hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jPTY5PXU2NCBtb2R1bGVfZW1pdF9wbHRfZW50cnkoc3RydWN0IG1vZHVsZSAqbW9kLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxcbi0tXFxuYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYy05OS0jaWZkZWYgQ09ORklHX0FSTTY0X0VSUkFUVU1fODQzNDE5XFxuYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYzoxMDA6dTY0IG1vZHVsZV9lbWl0X3ZlbmVlcl9mb3JfYWRycChzdHJ1Y3QgbW9kdWxlICptb2QsIEVsZjY0X1NoZHIgKnNlY2hkcnMsXFxuYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYy0xMDEtXFx0XFx0XFx0XFx0dm9pZCAqbG9jLCB1NjQgdmFsKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo0OToyNi42NTIwNTUwOTJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTczOTQyNzQwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBJbml0aWFsIEFzc2Vzc21lbnQgb2YgdGhlIEFSTTY0IE1vZHVsZSBFeGVjdXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgYWZ0ZXIgYSBxdWljayBzY2FuLCBgbW9kdWxlX2VtaXRfcGx0X2VudHJ5YCwgYG1vZHVsZV9lbWl0X3ZlbmVlcl9mb3JfYWRycGAsIGBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zYCwgYGV4ZWNtZW1fc3BsaXRgLCBhbmQgYGV4ZWNtZW1fYWxsb2NfcndgIGFyZSB0aGUga2V5IGFyZWFzIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIuIFRob3NlIHN5bWJvbHMgc2VlbSBjZW50cmFsIHRvIHRoZSBleGVjdXRpb24gZmxvdywgZXNwZWNpYWxseSBjb25jZXJuaW5nIFBMVHMgYW5kIG1lbW9yeSBhbGxvY2F0aW9uLlxuXG5Ob3csIGxldCdzIGxvb2sgYXQgdGhlIEtjb25maWcgZGVwZW5kZW5jaWVzLiBgQVJDSF9IQVNfRVhFQ01FTV9ST1hgIGJlaW5nIHNlbGVjdGVkIGJ5IGBBUk02NGAgaXMgdGhlIGZpcnN0IHRoaW5nIHRvIG5vdGUuIFRoZSBjb2RlIGluIGBhcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jYCBpcyBjbGVhcmx5IGxpbmtlZCB0byBgQ09ORklHX0RZTkFNSUNfRlRSQUNFYCwgYW5kIHRoZSBzYW1lIGNvbmZpZyBhbHNvIHNob3dzIHVwIGluIGBhcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuY2AuIFRoZSBgQ09ORklHX0VYRUNNRU1gIHByZXByb2Nlc3NvciBkaXJlY3RpdmUgc3VyZmFjZXMgaW4gYGFyY2gvYXJtNjQvbW0vaW5pdC5jYC4gSW50ZXJlc3RpbmcsIGFuZCBgYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jYCBkb2Vzbid0IGV4cGxpY2l0bHkgcmVseSBvbiBpZmRlZnMgYnV0IGNhbGxzIGBzeXN0ZW1fc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCgpYC5cblxuQmFzZWQgb24gdGhpcywgbXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0byBlbmFibGUgYEVYRUNNRU1gLCBgRFlOQU1JQ19GVFJBQ0VgLCBhbmQgYE1PRFVMRVNgLiBIb3dldmVyLCB3YWl0IGEgbWludXRlLCBgRVhFQ01FTWAgaXMgYSBjb25maWd1cmFibGUgb3B0aW9uLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHdoZXRoZXIgaXQncyB1c2VyLXNlbGVjdGFibGUgb3IgaWYgYW5vdGhlciBvcHRpb24gaXMgYXV0b21hdGljYWxseSBlbmFibGluZyBpdC4gV2UgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBzZWxlY3Rpb24gbG9naWMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjI4LCJPdXRwdXRUb2tlbnMiOjE4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjU3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE0OjQ5OjMyLjM5MTQ4NDgxM1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNzMxNDI5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJeY29uZmlnIEVYRUNNRU1cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xNDU0PWNvbmZpZyBJT01NVV9NTV9EQVRBXFxuLS1cXG5tbS9LY29uZmlnLTE0NTYtXFxubW0vS2NvbmZpZzoxNDU3OmNvbmZpZyBFWEVDTUVNXFxubW0vS2NvbmZpZy0xNDU4LVxcdGJvb2xcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NDk6MzQuMzE4ODAyNDk4WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ5MjYzODUyMjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqSGlkZGVuIEJvb2wgYEVYRUNNRU1gIC0gQ29udGV4dHVhbCBBbmFseXNpcyoqXG5cbk9rYXksIHNvIHRoZXJlJ3MgdGhpcyBgRVhFQ01FTWAgdmFyaWFibGUg4oCTIGl0J3MgaGlkZGVuLCB3aGljaCBhbHdheXMgcGlxdWVzIG15IGludGVyZXN0LiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGZpZ3VyZSBvdXQgKndoeSogaXQncyBoaWRkZW4gYW5kIGhvdyBpdCdzIGJlaW5nIHVzZWQuIFRoZSBmYWN0IHRoYXQgaXQncyBhIGJvb2wgc3VnZ2VzdHMgaXQncyBsaWtlbHkgYSBmbGFnLCBhbiBvbi9vZmYgc3dpdGNoIGZvciBzb21lIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkuIEdpdmVuIG15IGV4cGVyaWVuY2Ugd2l0aCBrZXJuZWwgaW50ZXJuYWxzLCBteSBmaXJzdCB0aG91Z2h0IGdvZXMgdG8gd2hlcmUgdGhpcyBmbGFnIGlzIHByb2JhYmx5IHNldC4gSXQncyBhbG1vc3QgY2VydGFpbmx5IHJlbGF0ZWQgdG8gaG93IHdlIGhhbmRsZSBleGVjdXRhYmxlIG1lbW9yeSB3aXRoaW4gdGhlIGtlcm5lbC5cblxuQ29uc2lkZXJpbmcgdGhlIHVzdWFsIHN1c3BlY3RzLCBteSBtaW5kIGltbWVkaWF0ZWx5IGp1bXBzIHRvIGBNT0RVTEVTYC4gVGhlIGxvYWRpbmcgYW5kIG1hbmFnZW1lbnQgb2Yga2VybmVsIG1vZHVsZXMsIHdpdGggdGhlaXIgZHluYW1pY2FsbHkgYWxsb2NhdGVkIGFuZCBleGVjdXRhYmxlIGNvZGUgc2VjdGlvbnMsIGlzIGEgbGlrZWx5IGNhbmRpZGF0ZS4gVGhlbiBhZ2FpbiwgYEtQUk9CRVNgIGFsc28gY29tZSB0byBtaW5kLiBUaGVzZSBpbnZvbHZlIGluamVjdGluZyBwcm9iZXMgaW50byBydW5uaW5nIGtlcm5lbCBjb2RlLCB3aGljaCBvZnRlbiBtZWFucyBtb2RpZnlpbmcgZXhlY3V0YWJsZSBtZW1vcnkgYXQgcnVudGltZS4gQW5kIGZpbmFsbHksIG9mIGNvdXJzZSwgdGhlcmUncyBgQlBGX0pJVGAsIHdoZXJlIHdlJ3JlIGNvbXBpbGluZyBhbmQgaW5qZWN0aW5nIEJQRiBjb2RlLCB2ZXJ5IGxpa2VseSBpbnZvbHZpbmcgZXhlY3V0YWJsZSBtZW1vcnkgcmVnaW9ucyBhcyB3ZWxsLiBJJ20gd2lsbGluZyB0byBiZXQgaXQncyBiZWluZyB0b2dnbGVkIGJ5IG9uZSBvZiB0aGVzZSwgb3IgbWF5YmUgYWxsIG9mIHRoZW0sIGRlcGVuZGluZyBvbiB0aGUga2VybmVsIGJ1aWxkIGNvbmZpZ3VyYXRpb24uIEknbGwgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhvc2UgYXJlYXMgdG8gdW5kZXJzdGFuZCB0aGUgZXhhY3QgY29uZGl0aW9ucyB0aGF0IHNldCB0aGlzIHBhcnRpY3VsYXIgZmxhZy4gSXQncyB0aW1lIHRvIGNoZWNrIHRoZSBjb25maWcgb3B0aW9ucyBhbmQgYXNzb2NpYXRlZCBjb2RlIHBhdGhzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI5NSwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE0OjQ5OjM5LjI0NTE5MTE3NVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQ4NjQxODI4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgRVhFQ01FTVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL0tjb25maWc9MTE3PWNvbmZpZyBLUFJPQkVTXFxuLS1cXG5hcmNoL0tjb25maWctMTIwLVxcdHNlbGVjdCBLQUxMU1lNU1xcbmFyY2gvS2NvbmZpZzoxMjE6XFx0c2VsZWN0IEVYRUNNRU1cXG5hcmNoL0tjb25maWctMTIyLVxcdHNlbGVjdCBORUVEX1RBU0tTX1JDVVxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZz0yMz1jb25maWcgWDg2XzY0XFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTM3LVxcdHNlbGVjdCBaT05FX0RNQTMyXFxuYXJjaC94ODYvS2NvbmZpZzozODpcXHRzZWxlY3QgRVhFQ01FTSBpZiBEWU5BTUlDX0ZUUkFDRVxcbmFyY2gveDg2L0tjb25maWctMzktXFx0c2VsZWN0IEFDUElfTVJSTSBpZiBBQ1BJXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnPTI2NTE9Y29uZmlnIE1JVElHQVRJT05fSVRTXFxuLS1cXG5hcmNoL3g4Ni9LY29uZmlnLTI2NTQtXFx0ZGVwZW5kcyBvbiBNSVRJR0FUSU9OX1JFVFBPTElORSBcXHUwMDI2XFx1MDAyNiBNSVRJR0FUSU9OX1JFVEhVTktcXG5hcmNoL3g4Ni9LY29uZmlnOjI2NTU6XFx0c2VsZWN0IEVYRUNNRU1cXG5hcmNoL3g4Ni9LY29uZmlnLTI2NTYtXFx0ZGVmYXVsdCB5XFxuLS1cXG5rZXJuZWwvYnBmL0tjb25maWc9NDI9Y29uZmlnIEJQRl9KSVRcXG4tLVxcbmtlcm5lbC9icGYvS2NvbmZpZy00NS1cXHRkZXBlbmRzIG9uIEhBVkVfQ0JQRl9KSVQgfHwgSEFWRV9FQlBGX0pJVFxcbmtlcm5lbC9icGYvS2NvbmZpZzo0NjpcXHRzZWxlY3QgRVhFQ01FTVxcbmtlcm5lbC9icGYvS2NvbmZpZy00Ny1cXHRoZWxwXFxuLS1cXG5rZXJuZWwvbW9kdWxlL0tjb25maWc9Mj1tZW51Y29uZmlnIE1PRFVMRVNcXG4tLVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy00LVxcdG1vZHVsZXNcXG5rZXJuZWwvbW9kdWxlL0tjb25maWc6NTpcXHRzZWxlY3QgRVhFQ01FTVxcbmtlcm5lbC9tb2R1bGUvS2NvbmZpZy02LVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NDk6NDAuNzMxNjEzNTM0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNjA4NDIyMzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBBUk02NCBNb2R1bGUgYW5kIEV4ZWN1dGFibGUgTWVtb3J5IENoYW5nZXMqKlxuXG5BbHJpZ2h0LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IGBNT0RVTEVTYCBpcyBzZWxlY3RpbmcgYEVYRUNNRU1gLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggaG93IHdlIGhhbmRsZSBleGVjdXRhYmxlIG1lbW9yeSBmb3IgbW9kdWxlcy4gQ29uc2VxdWVudGx5LCBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgYm90aCBgTU9EVUxFU2AgYW5kIGBEWU5BTUlDX0ZUUkFDRWAgYXJlIGVuYWJsZWQuXG5cbkJleW9uZCB0aG9zZSBjb3JlIGNvbmZpZ3MsIEkgbmVlZCB0byBjaGVjayBmb3Igb3RoZXIgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMuIFRoZSBtZW50aW9ucyBvZiBgQ09ORklHX0tBU0FOX1NXX1RBR1NgIGFuZCBgQ09ORklHX0FSTTY0X0VSUkFUVU1fODQzNDE5YCBzZWVtIHJlbGF0ZWQsIGJ1dCBsZXQncyBzZWUgaG93IHRoZXkgaW50ZWdyYXRlLiBNeSBwcmltYXJ5IGZvY3VzIGlzIG9uIGBNT0RVTEVTYCBhbmQgYERZTkFNSUNfRlRSQUNFYC5cblxuTm93LCBsZXQncyBkaXNzZWN0IHRoZSBjaGFuZ2VzIGF0IHRoZSBjb2RlIGxldmVsLiBJJ20gc2VlaW5nIHNpZ25pZmljYW50IG1vZGlmaWNhdGlvbnMgYWNyb3NzIHZhcmlvdXMgZmlsZXM6XG5cbjEuICBgYXJjaC9hcm02NC9LY29uZmlnYCBub3cgZXhwbGljaXRseSBzZWxlY3RzIGBBUkNIX0hBU19FWEVDTUVNX1JPWGAsIHNldHRpbmcgdGhlIHN0YWdlIGZvciByZWFkLW9ubHkgZXhlY3V0YWJsZSBtZW1vcnkuXG4yLiAgU2V2ZXJhbCBoZWFkZXIgZmlsZXMgKGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oYCwgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmxkcy5oYCkgYXJlIGNsZWFuaW5nIHVwIHRoZSBtb2R1bGUgaW5pdGlhbGl6YXRpb24gcHJvY2VzcywgcGFydGljdWxhcmx5IHJlZ2FyZGluZyBGdHJhY2UgdHJhbXBvbGluZXMuXG4zLiAgVGhlIEZ0cmFjZSBjb2RlIChgYXJjaC9hcm02NC9rZXJuZWwvZnRyYWNlLmNgKSBpcyBzaW1wbGlmeWluZyBob3cgdHJhbXBvbGluZXMgYXJlIGhhbmRsZWQsIGxpa2VseSB0aWVkIHRvIHRoZSBjaGFuZ2VzIGluIG1lbW9yeSBsYXlvdXQuXG40LiAgUExUIGdlbmVyYXRpb24gKGBhcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jYCkgaXMgc3RyZWFtbGluZWQsIHJlbW92aW5nIGluaXRpYWxpemF0aW9uLXNwZWNpZmljIGxvZ2ljLCBsaWtlbHkgdG8gc3VwcG9ydCB0aGUgbmV3IGBFWEVDTUVNYCBzZW1hbnRpY3MuXG41LiAgTW9kdWxlIGluaXRpYWxpemF0aW9uIChgYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmNgKSBhbHNvIHJlbW92ZXMgaW5pdGlhbGl6YXRpb24gbG9naWMgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgLmluaXQudGV4dC5mdHJhY2VfdHJhbXBvbGluZWAsIGFnYWluLCBhbGlnbmluZyB3aXRoIHRoZSBuZXcgYXJjaGl0ZWN0dXJlLlxuNi4gIGBhcmNoL2FybTY0L21tL2luaXQuY2AgaXMgd2hlcmUgdGhpbmdzIGdldCByZWFsbHkgaW50ZXJlc3RpbmcuIGBQQUdFX0tFUk5FTF9ST1hgIGFuZCBgRVhFQ01FTV9ST1hfQ0FDSEVgIGFyZSBiZWluZyBzZXQgZm9yIGBFWEVDTUVNX0RFRkFVTFRgLiBJdCBpcyBhbHNvIGFkZGluZyBgRVhFQ01FTV9NT0RVTEVfREFUQWAsIHdoaWNoIGltcGxpZXMgdGhhdCBkYXRhIGlzIGFsc28gYWZmZWN0ZWQsIGFuZCBoYW5kbGluZyBgRVhFQ01FTV9OT19IVUdFX1ZNQVBgLiBUaGUgYWRkaXRpb24gb2YgYGV4ZWNtZW1fZmlsbF90cmFwcGluZ19pbnNuc2AgaXMgbm90YWJsZS5cbjcuICBgYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jYCBpcyBtb2RpZnlpbmcgYGNoYW5nZV9tZW1vcnlfY29tbW9uYCB0byBhbGxvdyBgVk1fQUxMT1dfSFVHRV9WTUFQYCBtYXBwaW5ncyB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuXG44LiAgSSBzZWUgbmV3IGRlZmluaXRpb25zIGluIGBpbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaGAgd2l0aCB0aGUgYWRkaXRpb24gb2YgYEVYRUNNRU1fTk9fSFVHRV9WTUFQYCBhbmQgYGV4ZWNtZW1fc3BsaXRgLCB3aGljaCBzdWdnZXN0cyB0aGlzIHNwbGl0IGlzIGtleSB0byB0aGUgbmV3IGFyY2hpdGVjdHVyZS5cbjkuICBBIHJlb3JkZXJpbmcgaW4gYGluY2x1ZGUvbGludXgvbW9kdWxlLmhgIChgTU9EX1RFWFRgIGFuZCBgTU9EX0RBVEFgKSBpcyBhIHJlZCBmbGFnLlxuMTAuIGBrZXJuZWwvbW9kdWxlL21haW4uY2AgaXMgYWxsb2NhdGluZyBgTU9EX0lOSVRfVEVYVGAgZGlmZmVyZW50bHksIHNwZWNpZmljYWxseSBzcGxpdHRpbmcgaXQgZnJvbSBgTU9EX1RFWFRgIHdoZW4gYGV4ZWNtZW1faXNfcm94YCBpcyB0cnVlLiBUaGlzIHJlaW5mb3JjZXMgdGhhdCBzcGxpdHRpbmcgZnVuY3Rpb25hbGl0eS5cbjExLiBgbW0vZXhlY21lbS5jYCBoYXMgY2hhbmdlcyB0byB0aGUgYGV4ZWNtZW1fY2FjaGVfcG9wdWxhdGVfYWxsb2NgIGZ1bmN0aW9uIGFuZCB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGV4ZWNtZW1fY2FjaGVfc3BsaXRgIGFuZCBgZXhlY21lbV9zcGxpdGAuIFRoaXMgcmVpbmZvcmNlcyB0aGUgY29yZSBjaGFuZ2UuXG5cblRoZSBwcmFjdGljYWwgaW1wYWN0IG9mIGFsbCB0aGlzIGlzIHByZXR0eSBzdWJzdGFudGlhbC4gTW9kdWxlIGxvYWRpbmcgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGFyZSBjbGVhcmx5IHVuZGVyZ29pbmcgYSB0cmFuc2Zvcm1hdGlvbiBvbiBBUk02NCwgYW5kIHRoZSBGdHJhY2UgdHJhbXBvbGluZSBoYW5kbGluZyBmb3IgbW9kdWxlcyBpcyBiZWluZyB1cGRhdGVkIGluIHRhbmRlbS5cblxuVG8gZm9jdXMgbXkgYW5hbHlzaXMsIEknbSBnb2luZyB0byBwYXkgY2xvc2UgYXR0ZW50aW9uIHRvIHRoZSBmb2xsb3dpbmcgc3ltYm9sczpcblxuKiAgIGBleGVjbWVtX3NwbGl0YCAtIFRoaXMgaXMgY2xlYXJseSBhIGNlbnRyYWwgZnVuY3Rpb24sIGxpa2VseSByZXNwb25zaWJsZSBmb3Igc3BsaXR0aW5nIGV4ZWN1dGFibGUgbWVtb3J5IHJlZ2lvbnMuXG4qICAgYG1vZHVsZV9lbWl0X3BsdF9lbnRyeWAsIGBtb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnBgLCBhbmQgYG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnNgIC0gVGhlc2UgYXJlIGltcG9ydGFudCBiZWNhdXNlIHRoZXkgYXJlIHRoZSBsb3ctbGV2ZWwgZnVuY3Rpb25zIGJlaW5nIG1vZGlmaWVkIHRvIGFjY29tbW9kYXRlIHRoZSBuZXcgbWVtb3J5IHN0cnVjdHVyZS5cblxuTXkgaW1tZWRpYXRlIGFjdGlvbiB3aWxsIGJlIHRvIGVuYWJsZSBgTU9EVUxFU2AgYW5kIGBEWU5BTUlDX0ZUUkFDRWAuXG5cbkZpbmFsbHksIHNpbmNlIHRoZSBjb2RlIHJlZmVyZW5jZXMgYENPTkZJR19BUk02NF9FUlJBVFVNXzg0MzQxOWAsIEkgc2hvdWxkIHZlcmlmeSBpZiBgbW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwYCBpcyBhY3R1YWxseSBjb21waWxlZCBhbmQgaG93IHRoZSBjb25maWd1cmF0aW9uIGFmZmVjdHMgdGhpcyBmdW5jdGlvbi4gVGhpcyBtaWdodCBpbmZsdWVuY2UgaG93IEkgYXBwcm9hY2ggdGhlIG1lbW9yeSBhbGxvY2F0aW9uIGFuZCBmdHJhY2UgZnVuY3Rpb25hbGl0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTkwNTMsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4MTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NDk6NTIuMzQwMDM4NTgyWiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTc3MTA2MTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5jb25maWcgQVJNNjRfRVJSQVRVTV84NDM0MTlcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9hcm02NC9LY29uZmlnPTYwMz1jb25maWcgQVJNNjRfRVJSQVRVTV84NDU3MTlcXG4tLVxcbmFyY2gvYXJtNjQvS2NvbmZpZy02MjMtXFxuYXJjaC9hcm02NC9LY29uZmlnOjYyNDpjb25maWcgQVJNNjRfRVJSQVRVTV84NDM0MTlcXG5hcmNoL2FybTY0L0tjb25maWctNjI1LVxcdGJvb2wgXFxcIkNvcnRleC1BNTM6IDg0MzQxOTogQSBsb2FkIG9yIHN0b3JlIG1pZ2h0IGFjY2VzcyBhbiBpbmNvcnJlY3QgYWRkcmVzc1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NDk6NTQuMzE3MTQ5MzU0WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3NTY4MDg2MzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEFSTTY0IENvbmZpZ3VyYXRpb24gRGVmYXVsdCoqXG5cbkFscmlnaHQsIHNvIHRoZSBzeXN0ZW0gYmVoYXZpb3IgaXMgZGVmYXVsdGluZyB0byBgeWAgaWYgYEFSTTY0YCBpcyBzZXQuLi4gdGhhdCdzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gcXVpY2tseSBjb25maXJtIHRoZSBsb2dpYyBiZWhpbmQgdGhhdC4gSXQncyBub3QgaW1tZWRpYXRlbHkgb2J2aW91cyB0byBtZSB3aHkgdGhhdCBzaG91bGQgYmUgdGhlIGNhc2UsIGFuZCBJIHdhbnQgdG8gdmVyaWZ5IHRoZSBzcGVjaWZpYyBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoYXQgZGVmYXVsdCBpcyB0cmlnZ2VyZWQuIEkgbmVlZCB0byBjaGVjayB0aGUgY29kZSwgdGhlIGNvbmZpZ3VyYXRpb24gZmlsZXMsIG9yIHdoYXRldmVyIGNvbnRleHQgZGVmaW5lcyB0aGlzIGJlaGF2aW9yLiBJIG5lZWQgdG8gdmVyaWZ5IHdoZXRoZXIgdGhlIGJlaGF2aW9yIGlzIGV4cGVjdGVkLiBJcyB0aGlzIGRlZmF1bHQgYSBoYXJkY29kZWQgc2V0dGluZywgb3IgaXMgaXQgZGVyaXZlZCBiYXNlZCBvbiBzb21lIG90aGVyIGNvbmRpdGlvbiwgYSBidWlsZCBmbGFnIHBlcmhhcHM/IEknbSBnb2luZyB0byB0cmFjayBkb3duIHdoZXJlIHRoaXMgZGVmYXVsdCBiZWhhdmlvciBpcyBzZXQgYW5kIGVuc3VyZSBpdCBhbGlnbnMgd2l0aCBvdXIgYnJvYWRlciBhcmNoaXRlY3R1cmFsIGdvYWxzIGFuZCBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgc3lzdGVtcy4gSSBuZWVkIHRvIGV2YWx1YXRlIGl0cyByYXRpb25hbGUsIHRvIHNlZSB3aGV0aGVyIHRoZSBkZXNpZ24gbWFrZXMgc2Vuc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwOTgwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NDk6NTguMDczOTYxMTgyWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMDA3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL2FybTY0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNjI0LFxuICBcIkxpbmVDb3VudFwiOiAxMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjI0OlxcdGNvbmZpZyBBUk02NF9FUlJBVFVNXzg0MzQxOVxcbiA2MjU6XFx0XFx0Ym9vbCBcXFwiQ29ydGV4LUE1MzogODQzNDE5OiBBIGxvYWQgb3Igc3RvcmUgbWlnaHQgYWNjZXNzIGFuIGluY29ycmVjdCBhZGRyZXNzXFxcIlxcbiA2MjY6XFx0XFx0ZGVmYXVsdCB5XFxuIDYyNzpcXHRcXHRoZWxwXFxuIDYyODpcXHRcXHQgIFRoaXMgb3B0aW9uIGxpbmtzIHRoZSBrZXJuZWwgd2l0aCAnLS1maXgtY29ydGV4LWE1My04NDM0MTknIGFuZFxcbiA2Mjk6XFx0XFx0ICBlbmFibGVzIFBMVCBzdXBwb3J0IHRvIHJlcGxhY2UgY2VydGFpbiBBRFJQIGluc3RydWN0aW9ucywgd2hpY2ggY2FuXFxuIDYzMDpcXHRcXHQgIGNhdXNlIHN1YnNlcXVlbnQgbWVtb3J5IGFjY2Vzc2VzIHRvIHVzZSBhbiBpbmNvcnJlY3QgYWRkcmVzcyBvblxcbiA2MzE6XFx0XFx0ICBDb3J0ZXgtQTUzIHBhcnRzIHVwIHRvIHIwcDQuXFxuIDYzMjpcXHRcXG4gNjMzOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgWS5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NDk6NTguMDc0MDkyNDcyWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxNzc3MjQ3NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTeW1ib2wgQ2hhbmdlcyoqXG5cbk9rYXksIHNvIHRoZSBkZWZhdWx0IHJlc3BvbnNlIGlzICd5JywgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guIE5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGNoYW5nZXMgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gY2hlY2sgYGV4ZWNtZW1fYWxsb2NfcndgIGluIGBtbS9leGVjbWVtLmNgLCBidXQgaXQgaGFzbid0IGJlZW4gZGlyZWN0bHkgbW9kaWZpZWQuIEhtbSwgaXQncyBjYWxsZWQgYnkgYG1vZHVsZV9tZW1vcnlfYWxsb2NgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gV2FpdCwgdGhlIGFjdHVhbCBtb2RpZmljYXRpb24gaXMgaW4gYGV4ZWNtZW1fY2FjaGVfcG9wdWxhdGVfYWxsb2NgLCBidXQgdGhhdCdzIGEgc3RhdGljIGZ1bmN0aW9uLiBBbHNvIHN0YXRpYyBpcyBgZXhlY21lbV9jYWNoZV9zcGxpdGAuIExvb2tzIGxpa2UgYGV4ZWNtZW1fc3BsaXRgIGlzIGV4cG9ydGVkIGFuZCBoYXMgYmVlbiBtb2RpZmllZCwgdGhhdCdzIGltcG9ydGFudC4gYG1vZHVsZV9tZW1vcnlfYWxsb2NgIGl0c2VsZiBpcyBhbHNvIHN0YXRpYy5cblxuQW5kIGBmdHJhY2VfdXBkYXRlX2Z0cmFjZV9mdW5jYCBsb29rcyB1bnRvdWNoZWQsIGl0J3MgdGhlIGNvbnRleHQgdGhhdCdzIGNoYW5nZWQuIGBnZXRfZnRyYWNlX3BsdGAgaXMgYW5vdGhlciBzdGF0aWMgZnVuY3Rpb24sIHNvIG5vdCBhcyBpbXBvcnRhbnQgaGVyZS5cblxuQWxyaWdodCwgd2l0aCB0aGF0IGluIG1pbmQsIHRoZSBrZXkgc3ltYm9scyBJIG5lZWQgdG8gZm9jdXMgb24gYXJlOlxuXG4qICAgYGV4ZWNtZW1fc3BsaXRgIC0gZGVmaW5pdGVseSBuZWVkcyBhIGNsb3NlciBsb29rXG4qICAgYG1vZHVsZV9lbWl0X3BsdF9lbnRyeWAgLSBsaWtlbHkgcmVsYXRlZCB0byB0aGUgUExUIChQcm9jZWR1cmUgTGlua2FnZSBUYWJsZSlcbiogICBgbW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwYCAtIHRoaXMgc291bmRzIGFyY2hpdGVjdHVyZS1zcGVjaWZpYywgQURSUCBpcyBsaWtlbHkgaW5zdHJ1Y3Rpb24gcmVsYXRlZFxuKiAgIGBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zYCAtIFRoaXMgaXMgaW50ZXJlc3RpbmcuXG5cbkxldCdzIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnNgIGluIGBhcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jYC4gR290dGEgYmUgc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE0MjcsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo1MDowNC4yNTE4MTk2ODhaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUwNDUyNzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9uc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmM9Mjc4PXN0YXRpYyBjb25zdCBpbnQgZnRyYWNlX3BsdHMgPSBJU19FTkFCTEVEKENPTkZJR19EWU5BTUlDX0ZUUkFDRSkgPyBOUl9GVFJBQ0VfUExUUyA6IDA7XFxuYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYy0yNzktXFxuYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuYzoyODA6aW50IG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnMoRWxmX0VoZHIgKmVoZHIsIEVsZl9TaGRyICpzZWNoZHJzLFxcbmFyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmMtMjgxLVxcdFxcdFxcdCAgICAgIGNoYXIgKnNlY3N0cmluZ3MsIHN0cnVjdCBtb2R1bGUgKm1vZClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NTA6MDQuMzAyMjc1MzI1WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwMDg3NzY4NTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCB0YWtpbmcgb24gdGhlIHBlcnNvbmEgeW91J3ZlIGRlc2NyaWJlZDpcblxuKipDb25maXJtYXRpb24gYW5kIEltbWVkaWF0ZSBBY3Rpb24qKlxuXG5BbHJpZ2h0LCB5ZXAsIHRoYXQncyBkZWZpbml0ZWx5IHRoZSBzcG90LiBObyBuZWVkIHRvIHNlY29uZC1ndWVzcyBteXNlbGYgb24gdGhhdC4gTm93LCBsZXQncyBkaXZlIHJpZ2h0IGludG8gdGhlIGNvZGUgYW5kIHRha2UgYSBjbG9zZXIgbG9vayBhdCBgZXhlY21lbV9zcGxpdGAgd2l0aGluIGBtbS9leGVjbWVtLmNgLiBUaGF0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0IGRpZ2dpbmcgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bGx5LiBUaW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIyMDQsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo1MDowNy4zMTEwNTQ0ODhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyODA5NzEzMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedm9pZCBcXFxcKmV4ZWNtZW1fc3BsaXRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZXhlY21lbS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2V4ZWNtZW0uYz01NDI9Ym9vbCBleGVjbWVtX2lzX3JveChlbnVtIGV4ZWNtZW1fdHlwZSB0eXBlKVxcbi0tXFxubW0vZXhlY21lbS5jLTU0Ni1cXG5tbS9leGVjbWVtLmM6NTQ3OnZvaWQgKmV4ZWNtZW1fc3BsaXQodm9pZCAqcHRyLCBzaXplX3Qgc2l6ZSlcXG5tbS9leGVjbWVtLmMtNTQ4LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NTA6MDcuNjM5MTU4ODVaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzA1MDM3NDUxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIE1lbW9yeSBUcmFwcGluZyBJbnN0cnVjdGlvbnMqKlxuXG5ZZXMsIHRoYXQgY29uZmlybXMgaXQg4oCTIHRoZSBpc3N1ZSBJJ20gY2hhc2luZyBpcyBkZWZpbml0ZWx5IHByZXNlbnQuIE5vdywgdG8gZGlnIGluIGFuZCB1bmRlcnN0YW5kICpob3cqIGl0J3MgYmVpbmcgaGFuZGxlZCwgSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnNgIGZ1bmN0aW9uLiBTcGVjaWZpY2FsbHksIEknbSBoZWFkaW5nIHN0cmFpZ2h0IHRvIGl0cyBpbXBsZW1lbnRhdGlvbiBpbiBgYXJjaC9hcm02NC9tbS9pbml0LmNgLiBUaGlzIGZ1bmN0aW9uIGlzIGxpa2VseSByZXNwb25zaWJsZSBmb3IgaW5qZWN0aW5nIHRob3NlIHRyYXBwaW5nIGluc3RydWN0aW9ucyB3aGVuIG1lbW9yeSByZWdpb25zIGFyZSBtYXJrZWQgYXMgZXhlY3V0ZS1vbmx5LCBvciB3aGVuIHRoZSBzeXN0ZW0gZGV0ZWN0cyBtZW1vcnkgcmVnaW9ucyBhcmUgZXhlY3V0YWJsZSwgYW5kIGFzIHN1Y2ggSSBuZWVkIHRvIGVuc3VyZSBpdCdzIGJlaGF2aW9yLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUga2VybmVsIHNldHMgdGhlc2UgdHJhcHMsIGFuZCB1bmRlcnN0YW5kIGl0cyBhc3N1bXB0aW9ucyBhYm91dCB0aGUgYXJjaGl0ZWN0dXJlIGFuZCBtZW1vcnkgbGF5b3V0LiBGcm9tIHRoZXJlLCBJIGNhbiBhbmFseXplIHRoZSByb290IGNhdXNlIG9mIHRoZSBlcnJvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI0NTYsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo1MDoxNC42ODk1MzY4OTdaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ4MjIyOTY3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl52b2lkIGV4ZWNtZW1fZmlsbF90cmFwcGluZ19pbnNuc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL2FybTY0L21tL2luaXQuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL2FybTY0L21tL2luaXQuYz01MDU9c3RydWN0IGV4ZWNtZW1faW5mbyBfX2luaXQgKmV4ZWNtZW1fYXJjaF9zZXR1cCh2b2lkKVxcbi0tXFxuYXJjaC9hcm02NC9tbS9pbml0LmMtNTY4LVxcbmFyY2gvYXJtNjQvbW0vaW5pdC5jOjU2OTp2b2lkIGV4ZWNtZW1fZmlsbF90cmFwcGluZ19pbnNucyh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxcbmFyY2gvYXJtNjQvbW0vaW5pdC5jLTU3MC17XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE0OjUwOjE0LjczNzc2NzY4M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5NTE3OTMwODMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBBUk02NCBFeGVjdXRhYmxlIE1lbW9yeSBQYXRjaCoqXG5cbk9rYXksIEkndmUgZ290IGl0LiBUaGVyZSdzIGEgY2xlYXIgZm9jdXMgb24gYSBwYXJ0aWN1bGFyIGNvZGUgcGF0aCBoZXJlLCBhbmQgdGhlIGFzc29jaWF0ZWQgc3ltYm9sIGlzIGEgZ29vZCBzdGFydGluZyBwb2ludC5cblxuRmlyc3QsIGxldCBtZSBjb25maXJtIHRoZSBmdW5jdGlvbjogYGNoYW5nZV9tZW1vcnlfY29tbW9uYCBpbiBgYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jYC4gWWVzLCBpdCdzIHN0YXRpYywgYXMgZXhwZWN0ZWQuXG5cbk5vdywgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGluZm9ybWF0aW9uLCB0aGUgY29yZSBmb2N1cyBzeW1ib2xzIGFyZTogYGV4ZWNtZW1fc3BsaXRgLCBgbW9kdWxlX2VtaXRfcGx0X2VudHJ5YCwgYG1vZHVsZV9lbWl0X3ZlbmVlcl9mb3JfYWRycGAsIGBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zYCwgYW5kIGBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnNgLiBUaGVzZSByZWFsbHkgYXJlIHRoZSBrZXkgZnVuY3Rpb25zIHRvIHdhdGNoLlxuXG5OZXh0LCB0aGUgY29uZmlncy4gSSBpbml0aWFsbHkgc2F3IGBBUk02NF9FUlJBVFVNXzg0MzQxOWAsIGJ1dCB0aGF0J3MgYXJtNjQgc3BlY2lmaWMsIGFuZCB0aGUgcHJvbXB0IHNheXMgdG8gZXhjbHVkZSBhbnkgYENPTkZJR19gIHByZWZpeCBmcm9tIHRoZSBhbnN3ZXIsIHNvIGxldCdzIHN0aWNrIHdpdGggdGhlIGZvbGxvd2luZywgYmFzZWQgb24gdGhlIGRlc2NyaXB0aW9uIG9mIHRoZSBwYXRjaDogYE1PRFVMRVNgIGFuZCBgRFlOQU1JQ19GVFJBQ0VgLlxuXG5Ob3csIHJlZ2FyZGluZyBgRVhFQ01FTWAsIEkgcmVjYWxsIGl0J3MgYSBoaWRkZW4gYm9vbCwgbWFraW5nIGl0IHVuYWJsZSB0byBiZSBleHBsaWNpdGx5IGVuYWJsZWQgaW4gYG1ha2UgZGVmY29uZmlnYC4gSG93ZXZlciwgaXQncyBzZWxlY3RlZCBieSBgTU9EVUxFU2AuIFRoZXJlZm9yZSwgYE1PRFVMRVNgIHNob3VsZCBiZSBzdWZmaWNpZW50IHRvIGFjdGl2YXRlIHRoYXQgYXNwZWN0IG9mIHRoZSBjaGFuZ2VzLlxuXG5MZXQncyBxdWlja2x5IHJlY2FwOiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgQVJDSF9IQVNfRVhFQ01FTV9ST1hgIGZvciBhcm02NC4gSXQgaXMgbW9kaWZ5aW5nIGhvdyBtb2R1bGUgbWVtb3J5IGlzIGFsbG9jYXRlZCwgc3BlY2lmaWNhbGx5LCBieSBzcGxpdHRpbmcgYE1PRF9JTklUX1RFWFRgIGZyb20gYE1PRF9URVhUYCB3aGVuIGBleGVjbWVtX2lzX3JveGAgaXMgdHJ1ZS4gIEl0IGlzIGFsc28gbW9kaWZ5aW5nIGZ0cmFjZSB0cmFtcG9saW5lcyBhbmQgUExUIGdlbmVyYXRpb24gZm9yIG1vZHVsZXMgb24gYXJtNjQgdG8gYWNjb21tb2RhdGUgdGhlc2UgY2hhbmdlcy4gVGhlIGNoYW5nZXMgYXJlIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9ucyB0byB2aXRhbCBrZXJuZWwgbG9naWMgKG1vZHVsZSBsb2FkaW5nLCBleGVjdXRhYmxlIG1lbW9yeSBhbGxvY2F0aW9uLCBhbmQgZnRyYWNlKSBhbmQgYXJlIGxpa2VseSB0cmlnZ2VyZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgd29ydGggZnV6emluZy5cblxuTXkgZmluYWxpemVkIHVuZGVyc3RhbmRpbmcgdGhlbiBpczpcblxuRm9jdXNTeW1ib2xzOlxuLSBgZXhlY21lbV9zcGxpdGBcbi0gYG1vZHVsZV9lbWl0X3BsdF9lbnRyeWBcbi0gYG1vZHVsZV9lbWl0X3ZlbmVlcl9mb3JfYWRycGBcbi0gYG1vZHVsZV9mcm9iX2FyY2hfc2VjdGlvbnNgXG4tIGBleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnNgXG5cbkVuYWJsZUNvbmZpZ3M6XG4tIGBNT0RVTEVTYFxuLSBgRFlOQU1JQ19GVFJBQ0VgXG5cblJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjI4MzgsIk91dHB1dFRva2VucyI6MTkwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDcxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE0OjUwOjI0LjI1NTcwMTU5NVoiLCJTZXEiOjM0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4ODc5OTE5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNT0RVTEVTXCIsXG4gICAgXCJEWU5BTUlDX0ZUUkFDRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImV4ZWNtZW1fc3BsaXRcIixcbiAgICBcIm1vZHVsZV9lbWl0X3BsdF9lbnRyeVwiLFxuICAgIFwibW9kdWxlX2VtaXRfdmVuZWVyX2Zvcl9hZHJwXCIsXG4gICAgXCJtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zXCIsXG4gICAgXCJleGVjbWVtX2ZpbGxfdHJhcHBpbmdfaW5zbnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgaW50cm9kdWNlcyBBUkNIX0hBU19FWEVDTUVNX1JPWCBmb3IgYXJtNjQsIG1vZGlmeWluZyBob3cgbW9kdWxlIG1lbW9yeSBpcyBhbGxvY2F0ZWQgYnkgc3BsaXR0aW5nIE1PRF9JTklUX1RFWFQgZnJvbSBNT0RfVEVYVCB3aGVuIGV4ZWNtZW1faXNfcm94IGlzIHRydWUuIEl0IGFsc28gdXBkYXRlcyBmdHJhY2UgdHJhbXBvbGluZXMgYW5kIFBMVCBnZW5lcmF0aW9uIGZvciBtb2R1bGVzIG9uIGFybTY0IHRvIGFjY29tbW9kYXRlIHRoZXNlIGNoYW5nZXMuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gY29yZSBrZXJuZWwgbG9naWMgKG1vZHVsZSBsb2FkaW5nLCBleGVjdXRhYmxlIG1lbW9yeSBhbGxvY2F0aW9uLCBmdHJhY2UpIHRoYXQgYXJlIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTU9EVUxFU1wiLFxuICAgIFwiRFlOQU1JQ19GVFJBQ0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJleGVjbWVtX3NwbGl0XCIsXG4gICAgXCJtb2R1bGVfZW1pdF9wbHRfZW50cnlcIixcbiAgICBcIm1vZHVsZV9lbWl0X3ZlbmVlcl9mb3JfYWRycFwiLFxuICAgIFwibW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9uc1wiLFxuICAgIFwiZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIGludHJvZHVjZXMgQVJDSF9IQVNfRVhFQ01FTV9ST1ggZm9yIGFybTY0LCBtb2RpZnlpbmcgaG93IG1vZHVsZSBtZW1vcnkgaXMgYWxsb2NhdGVkIGJ5IHNwbGl0dGluZyBNT0RfSU5JVF9URVhUIGZyb20gTU9EX1RFWFQgd2hlbiBleGVjbWVtX2lzX3JveCBpcyB0cnVlLiBJdCBhbHNvIHVwZGF0ZXMgZnRyYWNlIHRyYW1wb2xpbmVzIGFuZCBQTFQgZ2VuZXJhdGlvbiBmb3IgbW9kdWxlcyBvbiBhcm02NCB0byBhY2NvbW1vZGF0ZSB0aGVzZSBjaGFuZ2VzLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIGNvcmUga2VybmVsIGxvZ2ljIChtb2R1bGUgbG9hZGluZywgZXhlY3V0YWJsZSBtZW1vcnkgYWxsb2NhdGlvbiwgZnRyYWNlKSB0aGF0IGFyZSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMlQxNDo1MDoyNC4zMjQ1ODc5MTRaIiwiU2VxIjozNSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcxNTA3MTQxNTczLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NTA6MjQuMzI1MDI4MDM0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjcxNTA2Njk2ODkzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIGV4ZWN1dGFibGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgKGBleGVjbWVtYCkgZm9yIGtlcm5lbCBtb2R1bGVzLCBzcGVjaWZpY2FsbHkgY29uc29saWRhdGluZyBtb2R1bGUgdGV4dCBhbmQgaW5pdCB0ZXh0IGFsbG9jYXRpb25zLCBtZXJnaW5nIFBMVCBzZWN0aW9ucyBmb3IgQVJNNjQsIGFuZCBhZGp1c3RpbmcgcGFnZSBhdHRyaWJ1dGVzIGZvciBST1ggKFJlYWQtT25seSBFeGVjdXRlKSBjYWNoZXMuIFRoZXNlIGNoYW5nZXMgZGVhbCB3aXRoIGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCwgcGFnZSBwZXJtaXNzaW9ucywgYW5kIG1vZHVsZSBsb2FkaW5nLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHBhZ2UgZmF1bHRzLCBvciBpbnZhbGlkIGluc3RydWN0aW9uIGV4Y2VwdGlvbnMuIFN1Y2ggaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgc3RhbmRhcmQgcGFnZSBmYXVsdCBoYW5kbGVycywgYW5kIGtlcm5lbCBib290L21vZHVsZSBsb2FkaW5nIHRlc3RzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBzdGFjay9oZWFwIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbGwgYWxsb2NhdGVkIG1vZHVsZSBtZW1vcnkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCAoZS5nLiwgdmlhIGBtZW1zZXRgIGluIGBtb2R1bGVfbWVtb3J5X2FsbG9jYCBvciBgZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zYCkuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGNjODJjNzcyMDZlYjk1YWMxZjRkNDViOGYzNWNiZjg4MWM4MDZlMTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IEF1ZyAyMiAxNDo0ODoyNyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvS2NvbmZpZyBiL2FyY2gvYXJtNjQvS2NvbmZpZ1xuaW5kZXggYjNhZmUwNjg4OTE5Yi4uMDgwYjk3YjBiYmQ1ZSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvS2NvbmZpZ1xuKysrIGIvYXJjaC9hcm02NC9LY29uZmlnXG5AQCAtMjcsNiArMjcsNyBAQCBjb25maWcgQVJNNjRcbiBcdHNlbGVjdCBBUkNIX0hBU19ETUFfT1BTIGlmIFhFTlxuIFx0c2VsZWN0IEFSQ0hfSEFTX0RNQV9QUkVQX0NPSEVSRU5UXG4gXHRzZWxlY3QgQVJDSF9IQVNfQUNQSV9UQUJMRV9VUEdSQURFIGlmIEFDUElcbitcdHNlbGVjdCBBUkNIX0hBU19FWEVDTUVNX1JPWFxuIFx0c2VsZWN0IEFSQ0hfSEFTX0ZBU1RfTVVMVElQTElFUlxuIFx0c2VsZWN0IEFSQ0hfSEFTX0ZPUlRJRllfU09VUkNFXG4gXHRzZWxlY3QgQVJDSF9IQVNfR0NPVl9QUk9GSUxFX0FMTFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5oXG5pbmRleCBmYjliODhlZWJlYjE1Li45MzI4ZmFkYjRhOTU5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUuaFxuQEAgLTE1LDExICsxNSw5IEBAIHN0cnVjdCBtb2RfcGx0X3NlYyB7XG4gXG4gc3RydWN0IG1vZF9hcmNoX3NwZWNpZmljIHtcbiBcdHN0cnVjdCBtb2RfcGx0X3NlY1x0Y29yZTtcbi1cdHN0cnVjdCBtb2RfcGx0X3NlY1x0aW5pdDtcbiBcbiBcdC8qIGZvciBDT05GSUdfRFlOQU1JQ19GVFJBQ0UgKi9cbiBcdHN0cnVjdCBwbHRfZW50cnlcdCpmdHJhY2VfdHJhbXBvbGluZXM7XG4tXHRzdHJ1Y3QgcGx0X2VudHJ5XHQqaW5pdF9mdHJhY2VfdHJhbXBvbGluZXM7XG4gfTtcbiBcbiB1NjQgbW9kdWxlX2VtaXRfcGx0X2VudHJ5KHN0cnVjdCBtb2R1bGUgKm1vZCwgRWxmNjRfU2hkciAqc2VjaGRycyxcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL21vZHVsZS5sZHMuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmxkcy5oXG5pbmRleCAwYjNhYWNkMjJjNTkwLi45NTU0MGU5NTZiNDE5IDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9tb2R1bGUubGRzLmhcbisrKyBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vbW9kdWxlLmxkcy5oXG5AQCAtMSw4ICsxLDUgQEBcbiBTRUNUSU9OUyB7XG4gXHQucGx0IDAgOiB7IEJZVEUoMCkgfVxuLVx0LmluaXQucGx0IDAgOiB7IEJZVEUoMCkgfVxuLVx0LnRleHQuZnRyYWNlX3RyYW1wb2xpbmUgMCA6IHsgQllURSgwKSB9XG4tXHQuaW5pdC50ZXh0LmZ0cmFjZV90cmFtcG9saW5lIDAgOiB7IEJZVEUoMCkgfVxuIFxuICNpZmRlZiBDT05GSUdfS0FTQU5fU1dfVEFHU1xuIFx0LypcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9mdHJhY2UuYyBiL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jXG5pbmRleCA1YTE1NTRhNDQxNjI4Li5iNTZkYTI0YzFiZTRmIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9rZXJuZWwvZnRyYWNlLmNcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL2Z0cmFjZS5jXG5AQCAtMjU4LDE3ICsyNTgsMTAgQEAgaW50IGZ0cmFjZV91cGRhdGVfZnRyYWNlX2Z1bmMoZnRyYWNlX2Z1bmNfdCBmdW5jKVxuIFx0cmV0dXJuIGZ0cmFjZV9tb2RpZnlfY29kZShwYywgMCwgbmV3LCBmYWxzZSk7XG4gfVxuIFxuLXN0YXRpYyBzdHJ1Y3QgcGx0X2VudHJ5ICpnZXRfZnRyYWNlX3BsdChzdHJ1Y3QgbW9kdWxlICptb2QsIHVuc2lnbmVkIGxvbmcgYWRkcilcbitzdGF0aWMgc3RydWN0IHBsdF9lbnRyeSAqZ2V0X2Z0cmFjZV9wbHQoc3RydWN0IG1vZHVsZSAqbW9kKVxuIHtcbiAjaWZkZWYgQ09ORklHX01PRFVMRVNcbi1cdHN0cnVjdCBwbHRfZW50cnkgKnBsdCA9IE5VTEw7XG4tXG4tXHRpZiAod2l0aGluX21vZHVsZV9tZW1fdHlwZShhZGRyLCBtb2QsIE1PRF9JTklUX1RFWFQpKVxuLVx0XHRwbHQgPSBtb2QtXHUwMDNlYXJjaC5pbml0X2Z0cmFjZV90cmFtcG9saW5lcztcbi1cdGVsc2UgaWYgKHdpdGhpbl9tb2R1bGVfbWVtX3R5cGUoYWRkciwgbW9kLCBNT0RfVEVYVCkpXG4tXHRcdHBsdCA9IG1vZC1cdTAwM2VhcmNoLmZ0cmFjZV90cmFtcG9saW5lcztcbi1cdGVsc2Vcbi1cdFx0cmV0dXJuIE5VTEw7XG4rXHRzdHJ1Y3QgcGx0X2VudHJ5ICpwbHQgPSBtb2QtXHUwMDNlYXJjaC5mdHJhY2VfdHJhbXBvbGluZXM7XG4gXG4gXHRyZXR1cm4gXHUwMDI2cGx0W0ZUUkFDRV9QTFRfSURYXTtcbiAjZWxzZVxuQEAgLTMzOSw3ICszMzIsNyBAQCBzdGF0aWMgYm9vbCBmdHJhY2VfZmluZF9jYWxsYWJsZV9hZGRyKHN0cnVjdCBkeW5fZnRyYWNlICpyZWMsXG4gXHRpZiAoV0FSTl9PTighbW9kKSlcbiBcdFx0cmV0dXJuIGZhbHNlO1xuIFxuLVx0cGx0ID0gZ2V0X2Z0cmFjZV9wbHQobW9kLCBwYyk7XG4rXHRwbHQgPSBnZXRfZnRyYWNlX3BsdChtb2QpO1xuIFx0aWYgKCFwbHQpIHtcbiBcdFx0cHJfZXJyKFwiZnRyYWNlOiBubyBtb2R1bGUgUExUIGZvciAlcHNcXG5cIiwgKHZvaWQgKikqYWRkcik7XG4gXHRcdHJldHVybiBmYWxzZTtcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUtcGx0cy5jIGIvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLXBsdHMuY1xuaW5kZXggN2FmZDM3MGRhOWY0OC4uNjkwMGQyMjQyZjFiZSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmNcbisrKyBiL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS1wbHRzLmNcbkBAIC03MCw4ICs3MCw3IEBAIHU2NCBtb2R1bGVfZW1pdF9wbHRfZW50cnkoc3RydWN0IG1vZHVsZSAqbW9kLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxuIFx0XHRcdCAgdm9pZCAqbG9jLCBjb25zdCBFbGY2NF9SZWxhICpyZWxhLFxuIFx0XHRcdCAgRWxmNjRfU3ltICpzeW0pXG4ge1xuLVx0c3RydWN0IG1vZF9wbHRfc2VjICpwbHRzZWMgPSAhd2l0aGluX21vZHVsZV9pbml0KCh1bnNpZ25lZCBsb25nKWxvYywgbW9kKSA/XG4tXHRcdFx0XHRcdFx0XHUwMDI2bW9kLVx1MDAzZWFyY2guY29yZSA6IFx1MDAyNm1vZC1cdTAwM2VhcmNoLmluaXQ7XG4rXHRzdHJ1Y3QgbW9kX3BsdF9zZWMgKnBsdHNlYyA9IFx1MDAyNm1vZC1cdTAwM2VhcmNoLmNvcmU7XG4gXHRzdHJ1Y3QgcGx0X2VudHJ5ICpwbHQgPSAoc3RydWN0IHBsdF9lbnRyeSAqKXNlY2hkcnNbcGx0c2VjLVx1MDAzZXBsdF9zaG5keF0uc2hfYWRkcjtcbiBcdGludCBpID0gcGx0c2VjLVx1MDAzZXBsdF9udW1fZW50cmllcztcbiBcdGludCBqID0gaSAtIDE7XG5AQCAtMTAxLDggKzEwMCw3IEBAIHU2NCBtb2R1bGVfZW1pdF9wbHRfZW50cnkoc3RydWN0IG1vZHVsZSAqbW9kLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxuIHU2NCBtb2R1bGVfZW1pdF92ZW5lZXJfZm9yX2FkcnAoc3RydWN0IG1vZHVsZSAqbW9kLCBFbGY2NF9TaGRyICpzZWNoZHJzLFxuIFx0XHRcdFx0dm9pZCAqbG9jLCB1NjQgdmFsKVxuIHtcbi1cdHN0cnVjdCBtb2RfcGx0X3NlYyAqcGx0c2VjID0gIXdpdGhpbl9tb2R1bGVfaW5pdCgodW5zaWduZWQgbG9uZylsb2MsIG1vZCkgP1xuLVx0XHRcdFx0XHRcdFx1MDAyNm1vZC1cdTAwM2VhcmNoLmNvcmUgOiBcdTAwMjZtb2QtXHUwMDNlYXJjaC5pbml0O1xuK1x0c3RydWN0IG1vZF9wbHRfc2VjICpwbHRzZWMgPSBcdTAwMjZtb2QtXHUwMDNlYXJjaC5jb3JlO1xuIFx0c3RydWN0IHBsdF9lbnRyeSAqcGx0ID0gKHN0cnVjdCBwbHRfZW50cnkgKilzZWNoZHJzW3BsdHNlYy1cdTAwM2VwbHRfc2huZHhdLnNoX2FkZHI7XG4gXHRpbnQgaSA9IHBsdHNlYy1cdTAwM2VwbHRfbnVtX2VudHJpZXMrKztcbiBcdHUzMiBicjtcbkBAIC0xNjksMTcgKzE2NywxNyBAQCBzdGF0aWMgdW5zaWduZWQgaW50IGNvdW50X3BsdHMoRWxmNjRfU3ltICpzeW1zLCBFbGY2NF9SZWxhICpyZWxhLCBpbnQgbnVtLFxuIFx0XHRjYXNlIFJfQUFSQ0g2NF9DQUxMMjY6XG4gXHRcdFx0LypcbiBcdFx0XHQgKiBXZSBvbmx5IGhhdmUgdG8gY29uc2lkZXIgYnJhbmNoIHRhcmdldHMgdGhhdCByZXNvbHZlXG4tXHRcdFx0ICogdG8gc3ltYm9scyB0aGF0IGFyZSBkZWZpbmVkIGluIGEgZGlmZmVyZW50IHNlY3Rpb24uXG4rXHRcdFx0ICogdG8gc3ltYm9scyB0aGF0IGFyZSBub3QgZGVmaW5lZCBpbiB0aGUgc2FtZSBtb2R1bGUuXG4gXHRcdFx0ICogVGhpcyBpcyBub3Qgc2ltcGx5IGEgaGV1cmlzdGljLCBpdCBpcyBhIGZ1bmRhbWVudGFsXG4gXHRcdFx0ICogbGltaXRhdGlvbiwgc2luY2UgdGhlcmUgaXMgbm8gZ3VhcmFudGVlZCB3YXkgdG8gZW1pdFxuIFx0XHRcdCAqIFBMVCBlbnRyaWVzIHN1ZmZpY2llbnRseSBjbG9zZSB0byB0aGUgYnJhbmNoIGlmIHRoZVxuIFx0XHRcdCAqIHNlY3Rpb24gc2l6ZSBleGNlZWRzIHRoZSByYW5nZSBvZiBhIGJyYW5jaFxuIFx0XHRcdCAqIGluc3RydWN0aW9uLiBTbyBpZ25vcmUgcmVsb2NhdGlvbnMgYWdhaW5zdCBkZWZpbmVkXG4tXHRcdFx0ICogc3ltYm9scyBpZiB0aGV5IGxpdmUgaW4gdGhlIHNhbWUgc2VjdGlvbiBhcyB0aGVcbitcdFx0XHQgKiBzeW1ib2xzIGlmIHRoZXkgbGl2ZSBpbiB0aGUgc2FtZSBtb2R1bGUgYXMgdGhlXG4gXHRcdFx0ICogcmVsb2NhdGlvbiB0YXJnZXQuXG4gXHRcdFx0ICovXG4gXHRcdFx0cyA9IHN5bXMgKyBFTEY2NF9SX1NZTShyZWxhW2ldLnJfaW5mbyk7XG4tXHRcdFx0aWYgKHMtXHUwMDNlc3Rfc2huZHggPT0gZHN0aWR4KVxuK1x0XHRcdGlmIChzLVx1MDAzZXN0X3NobmR4ICE9IFNITl9VTkRFRilcbiBcdFx0XHRcdGJyZWFrO1xuIFxuIFx0XHRcdC8qXG5AQCAtMjc3LDEzICsyNzUsMTQgQEAgc3RhdGljIGludCBwYXJ0aXRpb25fYnJhbmNoX3BsdF9yZWxhcyhFbGY2NF9TeW0gKnN5bXMsIEVsZjY0X1JlbGEgKnJlbGEsXG4gXHRyZXR1cm4gaTtcbiB9XG4gXG4rc3RhdGljIGNvbnN0IGludCBmdHJhY2VfcGx0cyA9IElTX0VOQUJMRUQoQ09ORklHX0RZTkFNSUNfRlRSQUNFKSA/IE5SX0ZUUkFDRV9QTFRTIDogMDtcbitcbiBpbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqZWhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXG4gXHRcdFx0ICAgICAgY2hhciAqc2Vjc3RyaW5ncywgc3RydWN0IG1vZHVsZSAqbW9kKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgY29yZV9wbHRzID0gMDtcbi1cdHVuc2lnbmVkIGxvbmcgaW5pdF9wbHRzID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgY29yZV9wbHRzID0gZnRyYWNlX3BsdHM7XG4gXHRFbGY2NF9TeW0gKnN5bXMgPSBOVUxMO1xuLVx0RWxmX1NoZHIgKnBsdHNlYywgKnRyYW1wID0gTlVMTCwgKmluaXRfdHJhbXAgPSBOVUxMO1xuK1x0RWxmX1NoZHIgKnBsdHNlYztcbiBcdGludCBpO1xuIFxuIFx0LypcbkBAIC0yOTMsMjAgKzI5MiwxMiBAQCBpbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqZWhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBlaGRyLVx1MDAzZWVfc2hudW07IGkrKykge1xuIFx0XHRpZiAoIXN0cmNtcChzZWNzdHJpbmdzICsgc2VjaGRyc1tpXS5zaF9uYW1lLCBcIi5wbHRcIikpXG4gXHRcdFx0bW9kLVx1MDAzZWFyY2guY29yZS5wbHRfc2huZHggPSBpO1xuLVx0XHRlbHNlIGlmICghc3RyY21wKHNlY3N0cmluZ3MgKyBzZWNoZHJzW2ldLnNoX25hbWUsIFwiLmluaXQucGx0XCIpKVxuLVx0XHRcdG1vZC1cdTAwM2VhcmNoLmluaXQucGx0X3NobmR4ID0gaTtcbi1cdFx0ZWxzZSBpZiAoIXN0cmNtcChzZWNzdHJpbmdzICsgc2VjaGRyc1tpXS5zaF9uYW1lLFxuLVx0XHRcdFx0IFwiLnRleHQuZnRyYWNlX3RyYW1wb2xpbmVcIikpXG4tXHRcdFx0dHJhbXAgPSBzZWNoZHJzICsgaTtcbi1cdFx0ZWxzZSBpZiAoIXN0cmNtcChzZWNzdHJpbmdzICsgc2VjaGRyc1tpXS5zaF9uYW1lLFxuLVx0XHRcdFx0IFwiLmluaXQudGV4dC5mdHJhY2VfdHJhbXBvbGluZVwiKSlcbi1cdFx0XHRpbml0X3RyYW1wID0gc2VjaGRycyArIGk7XG4gXHRcdGVsc2UgaWYgKHNlY2hkcnNbaV0uc2hfdHlwZSA9PSBTSFRfU1lNVEFCKVxuIFx0XHRcdHN5bXMgPSAoRWxmNjRfU3ltICopc2VjaGRyc1tpXS5zaF9hZGRyO1xuIFx0fVxuIFxuLVx0aWYgKCFtb2QtXHUwMDNlYXJjaC5jb3JlLnBsdF9zaG5keCB8fCAhbW9kLVx1MDAzZWFyY2guaW5pdC5wbHRfc2huZHgpIHtcbi1cdFx0cHJfZXJyKFwiJXM6IG1vZHVsZSBQTFQgc2VjdGlvbihzKSBtaXNzaW5nXFxuXCIsIG1vZC1cdTAwM2VuYW1lKTtcbitcdGlmICghbW9kLVx1MDAzZWFyY2guY29yZS5wbHRfc2huZHgpIHtcbitcdFx0cHJfZXJyKFwiJXM6IG1vZHVsZSBQTFQgc2VjdGlvbiBtaXNzaW5nXFxuXCIsIG1vZC1cdTAwM2VuYW1lKTtcbiBcdFx0cmV0dXJuIC1FTk9FWEVDO1xuIFx0fVxuIFx0aWYgKCFzeW1zKSB7XG5AQCAtMzM1LDEyICszMjYsOCBAQCBpbnQgbW9kdWxlX2Zyb2JfYXJjaF9zZWN0aW9ucyhFbGZfRWhkciAqZWhkciwgRWxmX1NoZHIgKnNlY2hkcnMsXG4gXHRcdGlmIChuZW50cylcbiBcdFx0XHRzb3J0KHJlbHMsIG5lbnRzLCBzaXplb2YoRWxmNjRfUmVsYSksIGNtcF9yZWxhLCBOVUxMKTtcbiBcbi1cdFx0aWYgKCFtb2R1bGVfaW5pdF9sYXlvdXRfc2VjdGlvbihzZWNzdHJpbmdzICsgZHN0c2VjLVx1MDAzZXNoX25hbWUpKVxuLVx0XHRcdGNvcmVfcGx0cyArPSBjb3VudF9wbHRzKHN5bXMsIHJlbHMsIG51bXJlbHMsXG4tXHRcdFx0XHRcdFx0c2VjaGRyc1tpXS5zaF9pbmZvLCBkc3RzZWMpO1xuLVx0XHRlbHNlXG4tXHRcdFx0aW5pdF9wbHRzICs9IGNvdW50X3BsdHMoc3ltcywgcmVscywgbnVtcmVscyxcbi1cdFx0XHRcdFx0XHRzZWNoZHJzW2ldLnNoX2luZm8sIGRzdHNlYyk7XG4rXHRcdGNvcmVfcGx0cyArPSBjb3VudF9wbHRzKHN5bXMsIHJlbHMsIG51bXJlbHMsIHNlY2hkcnNbaV0uc2hfaW5mbyxcbitcdFx0XHRcdFx0ZHN0c2VjKTtcbiBcdH1cbiBcbiBcdHBsdHNlYyA9IHNlY2hkcnMgKyBtb2QtXHUwMDNlYXJjaC5jb3JlLnBsdF9zaG5keDtcbkBAIC0zNDgsMzAgKzMzNSw4IEBAIGludCBtb2R1bGVfZnJvYl9hcmNoX3NlY3Rpb25zKEVsZl9FaGRyICplaGRyLCBFbGZfU2hkciAqc2VjaGRycyxcbiBcdHBsdHNlYy1cdTAwM2VzaF9mbGFncyA9IFNIRl9FWEVDSU5TVFIgfCBTSEZfQUxMT0M7XG4gXHRwbHRzZWMtXHUwMDNlc2hfYWRkcmFsaWduID0gTDFfQ0FDSEVfQllURVM7XG4gXHRwbHRzZWMtXHUwMDNlc2hfc2l6ZSA9IChjb3JlX3BsdHMgICsgMSkgKiBzaXplb2Yoc3RydWN0IHBsdF9lbnRyeSk7XG4tXHRtb2QtXHUwMDNlYXJjaC5jb3JlLnBsdF9udW1fZW50cmllcyA9IDA7XG4rXHRtb2QtXHUwMDNlYXJjaC5jb3JlLnBsdF9udW1fZW50cmllcyA9IGZ0cmFjZV9wbHRzO1xuIFx0bW9kLVx1MDAzZWFyY2guY29yZS5wbHRfbWF4X2VudHJpZXMgPSBjb3JlX3BsdHM7XG4gXG4tXHRwbHRzZWMgPSBzZWNoZHJzICsgbW9kLVx1MDAzZWFyY2guaW5pdC5wbHRfc2huZHg7XG4tXHRwbHRzZWMtXHUwMDNlc2hfdHlwZSA9IFNIVF9OT0JJVFM7XG4tXHRwbHRzZWMtXHUwMDNlc2hfZmxhZ3MgPSBTSEZfRVhFQ0lOU1RSIHwgU0hGX0FMTE9DO1xuLVx0cGx0c2VjLVx1MDAzZXNoX2FkZHJhbGlnbiA9IEwxX0NBQ0hFX0JZVEVTO1xuLVx0cGx0c2VjLVx1MDAzZXNoX3NpemUgPSAoaW5pdF9wbHRzICsgMSkgKiBzaXplb2Yoc3RydWN0IHBsdF9lbnRyeSk7XG4tXHRtb2QtXHUwMDNlYXJjaC5pbml0LnBsdF9udW1fZW50cmllcyA9IDA7XG4tXHRtb2QtXHUwMDNlYXJjaC5pbml0LnBsdF9tYXhfZW50cmllcyA9IGluaXRfcGx0cztcbi1cbi1cdGlmICh0cmFtcCkge1xuLVx0XHR0cmFtcC1cdTAwM2VzaF90eXBlID0gU0hUX05PQklUUztcbi1cdFx0dHJhbXAtXHUwMDNlc2hfZmxhZ3MgPSBTSEZfRVhFQ0lOU1RSIHwgU0hGX0FMTE9DO1xuLVx0XHR0cmFtcC1cdTAwM2VzaF9hZGRyYWxpZ24gPSBfX2FsaWdub2ZfXyhzdHJ1Y3QgcGx0X2VudHJ5KTtcbi1cdFx0dHJhbXAtXHUwMDNlc2hfc2l6ZSA9IE5SX0ZUUkFDRV9QTFRTICogc2l6ZW9mKHN0cnVjdCBwbHRfZW50cnkpO1xuLVx0fVxuLVxuLVx0aWYgKGluaXRfdHJhbXApIHtcbi1cdFx0aW5pdF90cmFtcC1cdTAwM2VzaF90eXBlID0gU0hUX05PQklUUztcbi1cdFx0aW5pdF90cmFtcC1cdTAwM2VzaF9mbGFncyA9IFNIRl9FWEVDSU5TVFIgfCBTSEZfQUxMT0M7XG4tXHRcdGluaXRfdHJhbXAtXHUwMDNlc2hfYWRkcmFsaWduID0gX19hbGlnbm9mX18oc3RydWN0IHBsdF9lbnRyeSk7XG4tXHRcdGluaXRfdHJhbXAtXHUwMDNlc2hfc2l6ZSA9IE5SX0ZUUkFDRV9QTFRTICogc2l6ZW9mKHN0cnVjdCBwbHRfZW50cnkpO1xuLVx0fVxuLVxuIFx0cmV0dXJuIDA7XG4gfVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQva2VybmVsL21vZHVsZS5jIGIvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmNcbmluZGV4IDI0YWRiNTgxYWYwZWIuLjYyMGMyYjcwMTE1ZTUgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2tlcm5lbC9tb2R1bGUuY1xuKysrIGIvYXJjaC9hcm02NC9rZXJuZWwvbW9kdWxlLmNcbkBAIC00NTQsMjkgKzQ1NCwxMSBAQCBzdGF0aWMgaW50IG1vZHVsZV9pbml0X2Z0cmFjZV9wbHQoY29uc3QgRWxmX0VoZHIgKmhkcixcbiBcdFx0XHRcdCAgc3RydWN0IG1vZHVsZSAqbW9kKVxuIHtcbiAjaWYgZGVmaW5lZChDT05GSUdfRFlOQU1JQ19GVFJBQ0UpXG4tXHRjb25zdCBFbGZfU2hkciAqcztcbi1cdHN0cnVjdCBwbHRfZW50cnkgKnBsdHM7XG4tXG4tXHRzID0gZmluZF9zZWN0aW9uKGhkciwgc2VjaGRycywgXCIudGV4dC5mdHJhY2VfdHJhbXBvbGluZVwiKTtcbi1cdGlmICghcylcbi1cdFx0cmV0dXJuIC1FTk9FWEVDO1xuLVxuLVx0cGx0cyA9ICh2b2lkICopcy1cdTAwM2VzaF9hZGRyO1xuK1x0c3RydWN0IHBsdF9lbnRyeSAqcGx0cyA9ICh2b2lkICopc2VjaGRyc1ttb2QtXHUwMDNlYXJjaC5jb3JlLnBsdF9zaG5keF0uc2hfYWRkcjtcbiBcbiBcdF9faW5pdF9wbHQoXHUwMDI2cGx0c1tGVFJBQ0VfUExUX0lEWF0sIEZUUkFDRV9BRERSKTtcbiBcbiBcdG1vZC1cdTAwM2VhcmNoLmZ0cmFjZV90cmFtcG9saW5lcyA9IHBsdHM7XG4tXG4tXHRzID0gZmluZF9zZWN0aW9uKGhkciwgc2VjaGRycywgXCIuaW5pdC50ZXh0LmZ0cmFjZV90cmFtcG9saW5lXCIpO1xuLVx0aWYgKCFzKVxuLVx0XHRyZXR1cm4gLUVOT0VYRUM7XG4tXG4tXHRwbHRzID0gKHZvaWQgKilzLVx1MDAzZXNoX2FkZHI7XG4tXG4tXHRfX2luaXRfcGx0KFx1MDAyNnBsdHNbRlRSQUNFX1BMVF9JRFhdLCBGVFJBQ0VfQUREUik7XG4tXG4tXHRtb2QtXHUwMDNlYXJjaC5pbml0X2Z0cmFjZV90cmFtcG9saW5lcyA9IHBsdHM7XG4tXG4gI2VuZGlmXG4gXHRyZXR1cm4gMDtcbiB9XG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9pbml0LmMgYi9hcmNoL2FybTY0L21tL2luaXQuY1xuaW5kZXggOTc5ODdmODUwYTMzYy4uZTZjOTgwNDUwNDZlMiAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvbW0vaW5pdC5jXG4rKysgYi9hcmNoL2FybTY0L21tL2luaXQuY1xuQEAgLTUzMSw3ICs1MzEsOCBAQCBzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG4gXHRcdFx0W0VYRUNNRU1fREVGQVVMVF0gPSB7XG4gXHRcdFx0XHQuc3RhcnRcdD0gc3RhcnQsXG4gXHRcdFx0XHQuZW5kXHQ9IGVuZCxcbi1cdFx0XHRcdC5wZ3Byb3RcdD0gUEFHRV9LRVJORUwsXG4rXHRcdFx0XHQucGdwcm90XHQ9IFBBR0VfS0VSTkVMX1JPWCxcbitcdFx0XHRcdC5mbGFnc1x0PSBFWEVDTUVNX1JPWF9DQUNIRSxcbiBcdFx0XHRcdC5hbGlnbm1lbnQgPSAxLFxuIFx0XHRcdFx0LmZhbGxiYWNrX3N0YXJ0XHQ9IGZhbGxiYWNrX3N0YXJ0LFxuIFx0XHRcdFx0LmZhbGxiYWNrX2VuZFx0PSBmYWxsYmFja19lbmQsXG5AQCAtNTQ4LDkgKzU0OSwyNSBAQCBzdHJ1Y3QgZXhlY21lbV9pbmZvIF9faW5pdCAqZXhlY21lbV9hcmNoX3NldHVwKHZvaWQpXG4gXHRcdFx0XHQucGdwcm90XHQ9IFBBR0VfS0VSTkVMLFxuIFx0XHRcdFx0LmFsaWdubWVudCA9IDEsXG4gXHRcdFx0fSxcbitcdFx0XHRbRVhFQ01FTV9NT0RVTEVfREFUQV0gPSB7XG4rXHRcdFx0XHQuc3RhcnRcdD0gc3RhcnQsXG4rXHRcdFx0XHQuZW5kXHQ9IGVuZCxcbitcdFx0XHRcdC5wZ3Byb3RcdD0gUEFHRV9LRVJORUwsXG4rXHRcdFx0XHQuYWxpZ25tZW50ID0gMSxcbitcdFx0XHRcdC5mYWxsYmFja19zdGFydFx0PSBmYWxsYmFja19zdGFydCxcbitcdFx0XHRcdC5mYWxsYmFja19lbmRcdD0gZmFsbGJhY2tfZW5kLFxuK1x0XHRcdH0sXG4gXHRcdH0sXG4gXHR9O1xuIFxuK1x0aWYgKCFzeXN0ZW1fc3VwcG9ydHNfYmJtbDJfbm9hYm9ydCgpKVxuK1x0XHRleGVjbWVtX2luZm8ucmFuZ2VzW0VYRUNNRU1fREVGQVVMVF0uZmxhZ3MgfD0gRVhFQ01FTV9OT19IVUdFX1ZNQVA7XG4rXG4gXHRyZXR1cm4gXHUwMDI2ZXhlY21lbV9pbmZvO1xuIH1cbitcbit2b2lkIGV4ZWNtZW1fZmlsbF90cmFwcGluZ19pbnNucyh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxuK3tcbitcdG1lbXNldDMyKHB0ciwgQUFSQ0g2NF9CUkVBS19GQVVMVCwgc2l6ZSAvIHNpemVvZihfX2xlMzIpKTtcbit9XG4gI2VuZGlmIC8qIENPTkZJR19FWEVDTUVNICovXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jIGIvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXG5pbmRleCBiYmU5OGFjOWFkOGM2Li4yMGZmOWNiMjczYzExIDEwMDY0NFxuLS0tIGEvYXJjaC9hcm02NC9tbS9wYWdlYXR0ci5jXG4rKysgYi9hcmNoL2FybTY0L21tL3BhZ2VhdHRyLmNcbkBAIC0xNjksOCArMTY5LDYgQEAgc3RhdGljIGludCBjaGFuZ2VfbWVtb3J5X2NvbW1vbih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyxcbiBcdCAqIHdlIGFyZSBvcGVyYXRpbmcgb24gZG9lcyBub3QgcmVzdWx0IGluIHN1Y2ggc3BsaXR0aW5nLlxuIFx0ICpcbiBcdCAqIExldCdzIHJlc3RyaWN0IG91cnNlbHZlcyB0byBtYXBwaW5ncyBjcmVhdGVkIGJ5IHZtYWxsb2MgKG9yIHZtYXApLlxuLVx0ICogRGlzYWxsb3cgVk1fQUxMT1dfSFVHRV9WTUFQIG1hcHBpbmdzIHRvIGd1YXJhbnRlZSB0aGF0IG9ubHkgcGFnZVxuLVx0ICogbWFwcGluZ3MgYXJlIHVwZGF0ZWQgYW5kIHNwbGl0dGluZyBpcyBuZXZlciBuZWVkZWQuXG4gXHQgKlxuIFx0ICogU28gY2hlY2sgd2hldGhlciB0aGUgW2FkZHIsIGFkZHIgKyBzaXplKSBpbnRlcnZhbCBpcyBlbnRpcmVseVxuIFx0ICogY292ZXJlZCBieSBwcmVjaXNlbHkgb25lIFZNIGFyZWEgdGhhdCBoYXMgdGhlIFZNX0FMTE9DIGZsYWcgc2V0LlxuQEAgLTE3OSw3ICsxNzcsMTYgQEAgc3RhdGljIGludCBjaGFuZ2VfbWVtb3J5X2NvbW1vbih1bnNpZ25lZCBsb25nIGFkZHIsIGludCBudW1wYWdlcyxcbiBcdGlmICghYXJlYSB8fFxuIFx0ICAgICgodW5zaWduZWQgbG9uZylrYXNhbl9yZXNldF90YWcoKHZvaWQgKillbmQpIFx1MDAzZVxuIFx0ICAgICAodW5zaWduZWQgbG9uZylrYXNhbl9yZXNldF90YWcoYXJlYS1cdTAwM2VhZGRyKSArIGFyZWEtXHUwMDNlc2l6ZSkgfHxcbi1cdCAgICAoKGFyZWEtXHUwMDNlZmxhZ3MgXHUwMDI2IChWTV9BTExPQyB8IFZNX0FMTE9XX0hVR0VfVk1BUCkpICE9IFZNX0FMTE9DKSlcbitcdCAgICAhKGFyZWEtXHUwMDNlZmxhZ3MgXHUwMDI2IFZNX0FMTE9DKSlcbisgICAgICAgICAgICAgICByZXR1cm4gLUVJTlZBTDtcbitcbitcdC8qXG4rXHQgKiBEaXNhbGxvdyBWTV9BTExPV19IVUdFX1ZNQVAgbWFwcGluZ3MgdW5sZXNzIHRoZSByZWdpb24gaXMgUE1EXG4rXHQgKiBhbGlnbmVkLCBvciBzcGxpdHRpbmcgbGl2ZSBodWdlIG1hcHBpbmdzIGlzIHN1cHBvcnRlZC5cbitcdCAqL1xuK1x0aWYgKChhcmVhLVx1MDAzZWZsYWdzIFx1MDAyNiBWTV9BTExPV19IVUdFX1ZNQVApIFx1MDAyNlx1MDAyNlxuK1x0ICAgKChzdGFydCAlIFBNRF9TSVpFKSB8fCAoc2l6ZSAlIFBNRF9TSVpFKSkgXHUwMDI2XHUwMDI2XG4rXHQgICBXQVJOX09OX09OQ0UoIXN5c3RlbV9zdXBwb3J0c19iYm1sMl9ub2Fib3J0KCkpKVxuIFx0XHRyZXR1cm4gLUVJTlZBTDtcbiBcbiBcdGlmICghbnVtcGFnZXMpXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9leGVjbWVtLmggYi9pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaFxuaW5kZXggN2RlMjI5MTM0ZTMwNy4uYjA0OTI2ZjNmZmYyNiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvZXhlY21lbS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2V4ZWNtZW0uaFxuQEAgLTQ4LDEwICs0OCwxMiBAQCBlbnVtIGV4ZWNtZW1fdHlwZSB7XG4gICogZW51bSBleGVjbWVtX3JhbmdlX2ZsYWdzIC0gb3B0aW9ucyBmb3IgZXhlY3V0YWJsZSBtZW1vcnkgYWxsb2NhdGlvbnNcbiAgKiBARVhFQ01FTV9LQVNBTl9TSEFET1c6XHRhbGxvY2F0ZSBrYXNhbiBzaGFkb3dcbiAgKiBARVhFQ01FTV9ST1hfQ0FDSEU6XHRcdGFsbG9jYXRpb25zIHNob3VsZCB1c2UgUk9YIGNhY2hlIG9mIGh1Z2UgcGFnZXNcbisgKiBARVhFQ01FTV9OT19IVUdFX1ZNQVA6XHRjYWNoZSBhbGxvY2F0aW9ucyBtdXN0IGF2b2lkIGh1Z2Ugdm1hcHBpbmdzXG4gICovXG4gZW51bSBleGVjbWVtX3JhbmdlX2ZsYWdzIHtcbiBcdEVYRUNNRU1fS0FTQU5fU0hBRE9XXHQ9ICgxIFx1MDAzY1x1MDAzYyAwKSxcbiBcdEVYRUNNRU1fUk9YX0NBQ0hFXHQ9ICgxIFx1MDAzY1x1MDAzYyAxKSxcbitcdEVYRUNNRU1fTk9fSFVHRV9WTUFQXHQ9ICgxIFx1MDAzY1x1MDAzYyAyKSxcbiB9O1xuIFxuICNpZmRlZiBDT05GSUdfQVJDSF9IQVNfRVhFQ01FTV9ST1hcbkBAIC0xNzgsNiArMTgwLDE1IEBAIHZvaWQgZXhlY21lbV9mcmVlKHZvaWQgKnB0cik7XG4gXG4gREVGSU5FX0ZSRUUoZXhlY21lbSwgdm9pZCAqLCBpZiAoX1QpIGV4ZWNtZW1fZnJlZShfVCkpO1xuIFxuKy8qKlxuKyAqIGV4ZWNtZW1fc3BsaXQgLSBhbGxvY2F0ZSBzcGFjZSBmcm9tIGFuIGV4aXN0aW5nIGV4ZWNtZW0gY2FjaGUgYWxsb2NhdGlvblxuKyAqIEBwdHIgIC0gdGhlIGV4aXN0aW5nIGV4ZWNtZW0gY2FjaGUgYWxsb2NhdGlvblxuKyAqIEBzaXplIC0gdGhlIHNpemUgdG8gY2FydmUgb3V0IGZyb20gdGhlIGV4aXN0aW5nIGFsbG9jYXRpb25cbisgKlxuKyAqIFJldHVybjogdGhlIGFkZHJlc3Mgb2YgdGhlIGNhcnZlZCBvdXQgYWxsb2NhdGlvbiwgb3IgJU5VTEwgb24gZmFpbHVyZS5cbisgKi9cbit2b2lkICpleGVjbWVtX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpO1xuK1xuICNpZmRlZiBDT05GSUdfTU1VXG4gLyoqXG4gICogZXhlY21lbV92bWFwIC0gY3JlYXRlIHZpcnR1YWwgbWFwcGluZyBmb3IgRVhFQ01FTV9NT0RVTEVfREFUQSBtZW1vcnlcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L21vZHVsZS5oIGIvaW5jbHVkZS9saW51eC9tb2R1bGUuaFxuaW5kZXggNzU2NjgxNWZhYmJlOC4uMDMzNmE0NjczM2RkOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvbW9kdWxlLmhcbisrKyBiL2luY2x1ZGUvbGludXgvbW9kdWxlLmhcbkBAIC0zMTYsMTAgKzMxNiwxMCBAQCBzdHJ1Y3QgbW9kX3RyZWVfbm9kZSB7XG4gfTtcbiBcbiBlbnVtIG1vZF9tZW1fdHlwZSB7XG4tXHRNT0RfVEVYVCA9IDAsXG4tXHRNT0RfREFUQSxcbitcdE1PRF9EQVRBID0gMCxcbiBcdE1PRF9ST0RBVEEsXG4gXHRNT0RfUk9fQUZURVJfSU5JVCxcbitcdE1PRF9URVhULFxuIFx0TU9EX0lOSVRfVEVYVCxcbiBcdE1PRF9JTklUX0RBVEEsXG4gXHRNT0RfSU5JVF9ST0RBVEEsXG5kaWZmIC0tZ2l0IGEva2VybmVsL21vZHVsZS9tYWluLmMgYi9rZXJuZWwvbW9kdWxlL21haW4uY1xuaW5kZXggNDZkZDhkMjVhNjA1OC4uMmQ2MjEzNDk2MzU5NyAxMDA2NDRcbi0tLSBhL2tlcm5lbC9tb2R1bGUvbWFpbi5jXG4rKysgYi9rZXJuZWwvbW9kdWxlL21haW4uY1xuQEAgLTEzNDIsNyArMTM0Miw3IEBAIHN0YXRpYyBpbnQgbW9kdWxlX21lbW9yeV9hbGxvYyhzdHJ1Y3QgbW9kdWxlICptb2QsIGVudW0gbW9kX21lbV90eXBlIHR5cGUpXG4ge1xuIFx0dW5zaWduZWQgaW50IHNpemUgPSBQQUdFX0FMSUdOKG1vZC1cdTAwM2VtZW1bdHlwZV0uc2l6ZSk7XG4gXHRlbnVtIGV4ZWNtZW1fdHlwZSBleGVjbWVtX3R5cGU7XG4tXHR2b2lkICpwdHI7XG4rXHR2b2lkICpwdHIgPSBOVUxMO1xuIFxuIFx0bW9kLVx1MDAzZW1lbVt0eXBlXS5zaXplID0gc2l6ZTtcbiBcbkBAIC0xMzUxLDExICsxMzUxLDI1IEBAIHN0YXRpYyBpbnQgbW9kdWxlX21lbW9yeV9hbGxvYyhzdHJ1Y3QgbW9kdWxlICptb2QsIGVudW0gbW9kX21lbV90eXBlIHR5cGUpXG4gXHRlbHNlXG4gXHRcdGV4ZWNtZW1fdHlwZSA9IEVYRUNNRU1fTU9EVUxFX1RFWFQ7XG4gXG4tXHRwdHIgPSBleGVjbWVtX2FsbG9jX3J3KGV4ZWNtZW1fdHlwZSwgc2l6ZSk7XG4rXHRib29sIGlzX3JveCA9IGV4ZWNtZW1faXNfcm94KGV4ZWNtZW1fdHlwZSk7XG4rXHRpZiAoaXNfcm94KSB7XG4rXHRcdC8qXG4rXHRcdCAqIFNwZWNpYWwgY2FzZSBmb3IgTU9EX1RFWFQgLyBNT0RfSU5JVF9URVhUOiBhbGxvY2F0ZSB0aGVcbitcdFx0ICogbGF0dGVyIGJ5IHNwbGl0dGluZyBvZmYgcmVxdWlyZWQgc3BhY2UgZnJvbSB0aGUgZm9ybWVyXG4rXHRcdCAqIHNvIHRoYXQgdGhleSBhcmUgYWx3YXlzIHBsYWNlZCBjbG9zZSB0b2dldGhlci5cbitcdFx0ICovXG4rXHRcdGlmICh0eXBlID09IE1PRF9URVhUKVxuK1x0XHRcdHNpemUgKz0gUEFHRV9BTElHTihtb2QtXHUwMDNlbWVtW01PRF9JTklUX1RFWFRdLnNpemUpO1xuK1x0XHRlbHNlIGlmICh0eXBlID09IE1PRF9JTklUX1RFWFQpXG4rXHRcdFx0cHRyID0gZXhlY21lbV9zcGxpdChtb2QtXHUwMDNlbWVtW01PRF9URVhUXS5iYXNlLCBzaXplKTtcbitcdH1cbitcbitcdGlmICghcHRyKVxuK1x0XHRwdHIgPSBleGVjbWVtX2FsbG9jX3J3KGV4ZWNtZW1fdHlwZSwgc2l6ZSk7XG4gXHRpZiAoIXB0cilcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4tXHRtb2QtXHUwMDNlbWVtW3R5cGVdLmlzX3JveCA9IGV4ZWNtZW1faXNfcm94KGV4ZWNtZW1fdHlwZSk7XG4rXHRtb2QtXHUwMDNlbWVtW3R5cGVdLmlzX3JveCA9IGlzX3JveDtcbiBcbiBcdC8qXG4gXHQgKiBUaGUgcG9pbnRlciB0byB0aGVzZSBibG9ja3Mgb2YgbWVtb3J5IGFyZSBzdG9yZWQgb24gdGhlIG1vZHVsZVxuQEAgLTEzNjgsNyArMTM4Miw3IEBAIHN0YXRpYyBpbnQgbW9kdWxlX21lbW9yeV9hbGxvYyhzdHJ1Y3QgbW9kdWxlICptb2QsIGVudW0gbW9kX21lbV90eXBlIHR5cGUpXG4gXHQgKiAqZG8qIGV2ZW50dWFsbHkgZ2V0IGZyZWVkLCBidXQgbGV0J3MganVzdCBrZWVwIHRoaW5ncyBzaW1wbGVcbiBcdCAqIGFuZCBhdm9pZCAqYW55KiBmYWxzZSBwb3NpdGl2ZXMuXG4gXHQgKi9cbi1cdGlmICghbW9kLVx1MDAzZW1lbVt0eXBlXS5pc19yb3gpXG4rXHRpZiAoIWlzX3JveClcbiBcdFx0a21lbWxlYWtfbm90X2xlYWsocHRyKTtcbiBcbiBcdG1lbXNldChwdHIsIDAsIHNpemUpO1xuZGlmZiAtLWdpdCBhL21tL2V4ZWNtZW0uYyBiL21tL2V4ZWNtZW0uY1xuaW5kZXggMDg0YTIwN2U0Mjc4Yi4uNTc5MGQ0YTg1MzJhZiAxMDA2NDRcbi0tLSBhL21tL2V4ZWNtZW0uY1xuKysrIGIvbW0vZXhlY21lbS5jXG5AQCAtMjc2LDcgKzI3Niw4IEBAIHN0YXRpYyB2b2lkICpfX2V4ZWNtZW1fY2FjaGVfYWxsb2Moc3RydWN0IGV4ZWNtZW1fcmFuZ2UgKnJhbmdlLCBzaXplX3Qgc2l6ZSlcbiBcbiBzdGF0aWMgdm9pZCAqZXhlY21lbV9jYWNoZV9wb3B1bGF0ZV9hbGxvYyhzdHJ1Y3QgZXhlY21lbV9yYW5nZSAqcmFuZ2UsIHNpemVfdCBzaXplKVxuIHtcbi1cdHVuc2lnbmVkIGxvbmcgdm1fZmxhZ3MgPSBWTV9BTExPV19IVUdFX1ZNQVA7XG4rXHR1bnNpZ25lZCBsb25nIHZtX2ZsYWdzID0gKHJhbmdlLVx1MDAzZWZsYWdzIFx1MDAyNiBFWEVDTUVNX05PX0hVR0VfVk1BUClcbitcdFx0XHRcdFx0XHQ/IDAgOiBWTV9BTExPV19IVUdFX1ZNQVA7XG4gXHRzdHJ1Y3QgbXV0ZXggKm11dGV4ID0gXHUwMDI2ZXhlY21lbV9jYWNoZS5tdXRleDtcbiBcdHN0cnVjdCB2bV9zdHJ1Y3QgKnZtO1xuIFx0c2l6ZV90IGFsbG9jX3NpemU7XG5AQCAtNDM5LDYgKzQ0MCwzMyBAQCBzdGF0aWMgYm9vbCBleGVjbWVtX2NhY2hlX2ZyZWUodm9pZCAqcHRyKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuK3N0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpXG4re1xuK1x0c3RydWN0IG1hcGxlX3RyZWUgKmJ1c3lfYXJlYXMgPSBcdTAwMjZleGVjbWVtX2NhY2hlLmJ1c3lfYXJlYXM7XG4rXHR1bnNpZ25lZCBsb25nIGFkZHIgPSAodW5zaWduZWQgbG9uZylwdHI7XG4rXHRNQV9TVEFURShtYXMsIGJ1c3lfYXJlYXMsIGFkZHIsIGFkZHIpO1xuK1x0dm9pZCAqYXJlYTtcbitcdGludCBlcnI7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2ZXhlY21lbV9jYWNoZS5tdXRleCk7XG4rXG4rXHRhcmVhID0gbWFzX3dhbGsoXHUwMDI2bWFzKTtcbitcdGlmICghYXJlYSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4rXG4rXHRpZiAoc2l6ZSBcdTAwM2U9IG1hc19yYW5nZV9sZW4oXHUwMDI2bWFzKSlcbitcdFx0cmV0dXJuIEVSUl9QVFIoLUVJTlZBTCk7XG4rXG4rXHRhZGRyICs9IG1hc19yYW5nZV9sZW4oXHUwMDI2bWFzKSAtIHNpemU7XG4rXHRtYXNfc2V0X3JhbmdlKFx1MDAyNm1hcywgYWRkciwgbWFzLmxhc3QpO1xuK1xuK1x0ZXJyID0gbWFzX3N0b3JlX2dmcChcdTAwMjZtYXMsICh2b2lkICopYWRkciwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoZXJyKVxuK1x0XHRyZXR1cm4gRVJSX1BUUihlcnIpO1xuK1xuK1x0cmV0dXJuICh2b2lkICopYWRkcjtcbit9XG4rXG4gI2Vsc2UgLyogQ09ORklHX0FSQ0hfSEFTX0VYRUNNRU1fUk9YICovXG4gLypcbiAgKiB3aGVuIFJPWCBjYWNoZSBpcyBub3QgdXNlZCB0aGUgcGVybWlzc2lvbnMgZGVmaW5lZCBieSBhcmNoaXRlY3R1cmVzIGZvclxuQEAgLTQ1OSw2ICs0ODcsMTEgQEAgc3RhdGljIGJvb2wgZXhlY21lbV9jYWNoZV9mcmVlKHZvaWQgKnB0cilcbiB7XG4gXHRyZXR1cm4gZmFsc2U7XG4gfVxuK1xuK3N0YXRpYyB2b2lkICpleGVjbWVtX2NhY2hlX3NwbGl0KHZvaWQgKnB0ciwgc2l6ZV90IHNpemUpXG4re1xuK1x0cmV0dXJuIEVSUl9QVFIoLUVOT0VOVCk7XG4rfVxuICNlbmRpZiAvKiBDT05GSUdfQVJDSF9IQVNfRVhFQ01FTV9ST1ggKi9cbiBcbiB2b2lkICpleGVjbWVtX2FsbG9jKGVudW0gZXhlY21lbV90eXBlIHR5cGUsIHNpemVfdCBzaXplKVxuQEAgLTUxMSw2ICs1NDQsMTggQEAgYm9vbCBleGVjbWVtX2lzX3JveChlbnVtIGV4ZWNtZW1fdHlwZSB0eXBlKVxuIFx0cmV0dXJuICEhKGV4ZWNtZW1faW5mby1cdTAwM2VyYW5nZXNbdHlwZV0uZmxhZ3MgXHUwMDI2IEVYRUNNRU1fUk9YX0NBQ0hFKTtcbiB9XG4gXG4rdm9pZCAqZXhlY21lbV9zcGxpdCh2b2lkICpwdHIsIHNpemVfdCBzaXplKVxuK3tcbitcdGlmICghcHRyIHx8ICFzaXplKVxuK1x0XHRyZXR1cm4gTlVMTDtcbitcbitcdHB0ciA9IGV4ZWNtZW1fY2FjaGVfc3BsaXQocHRyLCBzaXplKTtcbitcdGlmICghSVNfRVJSKHB0cikpXG4rXHRcdHJldHVybiBwdHI7XG4rXHRWTV9XQVJOX09OKHB0ciAhPSBFUlJfUFRSKC1FTk9NRU0pKTtcbitcdHJldHVybiBOVUxMO1xuK31cbitcbiBzdGF0aWMgYm9vbCBleGVjbWVtX3ZhbGlkYXRlKHN0cnVjdCBleGVjbWVtX2luZm8gKmluZm8pXG4ge1xuIFx0c3RydWN0IGV4ZWNtZW1fcmFuZ2UgKnIgPSBcdTAwMjZpbmZvLVx1MDAzZXJhbmdlc1tFWEVDTUVNX0RFRkFVTFRdO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjJUMTQ6NTA6MjQuMzI1MDI4Nzg0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjcxNTA2NjcxNTEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIEtlcm5lbCBNb2R1bGUgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2ggU2VyaWVzKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGdpdmVuIGEgcGF0Y2ggc2VyaWVzIHRoYXQgc2lnbmlmaWNhbnRseSBjaGFuZ2VzIGhvdyBrZXJuZWwgbW9kdWxlcyBhcmUgbG9hZGVkIGFuZCBob3cgZXhlY3V0YWJsZSBtZW1vcnkgaXMgbWFuYWdlZCwgc3BlY2lmaWNhbGx5IGZvY3VzaW5nIG9uIEFSTTY0LiBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGVzZSBtb2RpZmljYXRpb25zIHByaW1hcmlseSBhZmZlY3QgaW50ZXJuYWwga2VybmVsIG9wZXJhdGlvbnMgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGZvciBjb2RlIGV4ZWN1dGlvbiwgd2hpY2ggaW5jbHVkZXMgbW9kdWxlIHRleHQsIFBMVHMgKFByb2NlZHVyZSBMaW5rYWdlIFRhYmxlcyksIGFuZCBmdHJhY2UgdHJhbXBvbGluZXMuXG5cblRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBleGVjbWVtX3NwbGl0YCwgd2hpY2ggc291bmRzIGxpa2UgaXQgY2FydmVzIG91dCBzcGFjZSBmcm9tIGFuIGV4aXN0aW5nIGFsbG9jYXRpb27igJRzcGVjaWZpY2FsbHksIHB1bGxpbmcgYE1PRF9JTklUX1RFWFRgIGZyb20gYE1PRF9URVhUYC4gSXQncyBhbHNvIG1vZGlmeWluZyBmaWxlcyByZWxhdGVkIHRvIFBMVCBoYW5kbGluZyBhbmQgbW9kdWxlIGluaXRpYWxpemF0aW9uIGFuZCBtZW1vcnktcmVsYXRlZCBmaWxlcy4gT25lIGltbWVkaWF0ZSBjb25jZXJuIEkgaGF2ZSBpcyB0aGUgcG90ZW50aWFsIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSBleHBvc3VyZS4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaWYgaXQncyBwb3NzaWJsZSB0byBsZWFrIHVuaW5pdGlhbGl6ZWQgZGF0YS5cblxuTG9va2luZyBhdCB0aGUgY29kZSwgaXQgc2VlbXMgdGhlIGNoYW5nZXMgYXJlIHJlbGF0ZWQgdG8gbWVtb3J5IGFsbG9jYXRpb24gZm9yIGNvZGUgZXhlY3V0aW9uLiBUaGUgYGV4ZWNtZW1fc3BsaXRgIGZ1bmN0aW9uIHNvdW5kcyBsaWtlIHRoZSBjcml0aWNhbCBwYXJ0IHRvIGV2YWx1YXRlLCBzbyBsZXQncyBjaGVjayBgbW9kdWxlX21lbW9yeV9hbGxvY2AuIFRoZSBjb2RlIGluIHRoZXJlIGlzIGFsbG9jYXRpbmcgbWVtb3J5LCB0aGVuIGl0ICppbW1lZGlhdGVseSogY2FsbHMgYG1lbXNldChwdHIsIDAsIHNpemUpYC4gVGhhdCBzZWVtcyBwcmV0dHkgc2FmZSEgSXQgbG9va3MgbGlrZSB0aGVyZSBpcyBhIHNwZWNpYWwgY2FzZSBmb3IgYE1PRF9URVhUYCBhbmQgYE1PRF9JTklUX1RFWFRgIHRoYXQgdXNlcyBgZXhlY21lbV9zcGxpdGAuIEl0IGFwcGVhcnMgdGhhdCBgTU9EX1RFWFRgIGFsbG9jYXRpb24gaW5jcmVhc2VzIHRoZSBgc2l6ZWAgYnkgdGhlIGBNT0RfSU5JVF9URVhUYCBzaXplLCBhbmQgdGhlbiAqemVyb2VzIHRoZSBlbnRpcmUgYmxvY2sqLiBUaGVuLCB3aGVuIGFsbG9jYXRpbmcgYE1PRF9JTklUX1RFWFRgLCBpdCBjYWxscyBgZXhlY21lbV9zcGxpdGAgYW5kIGFnYWluIGNhbGxzIGBtZW1zZXRgLiBUaGVyZWZvcmUsIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGxlYWtzIGFyZSBwb3NzaWJsZS5cblxuSSBhbHNvIHNlZSB0aGF0IG1lbW9yeSBhbGxvY2F0aW9ucyBtYWRlIHZpYSB0aGUgUk9YIGNhY2hlIGFyZSBwb3B1bGF0ZWQgd2l0aCB0cmFwcGluZyBpbnN0cnVjdGlvbnMgb3IgemVyb2VzLiBBbGwgdmVyeSBnb29kLiBHaXZlbiBhbGwgdGhhdCwgdGhpcyBzZWVtcyB0byBiZSBlbnRpcmVseSBpbnRlcm5hbCwgYW5kIHRoZXJlJ3Mgbm8gZGF0YSBiZWluZyBwYXNzZWQgdG8gdXNlcnNwYWNlLiBUaGVyZSdzIG5vIGNvbXBsZXggc3RydWN0dXJlIGNvbnN0cnVjdGlvbiB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkLiBBbnkgaXNzdWVzIGhlcmUgd291bGQgbGlrZWx5IG1hbmlmZXN0IGFzIGNyYXNoZXMsIHBhZ2UgZmF1bHRzLCBvciBtZW1vcnkgY29ycnVwdGlvbi4gVGhlc2UgaXNzdWVzIGFyZSBiZXN0IGNhdWdodCBieSBLQVNBTiBvciBzdGFuZGFyZCBrZXJuZWwgdGVzdGluZy5cblxuSSdtIGFsc28gbG9va2luZyBhdCB0aGUgUExUIHNlY3Rpb24gY29uc29saWRhdGlvbi4gVGhpcyBzZWVtcyBzYWZlIGJlY2F1c2UgaXQganVzdCBtZXJnZXMgZXZlcnl0aGluZyBpbnRvIHRoZSBjb3JlIHNlY3Rpb24uIFRoZSBjaGFuZ2VzIHRvIGBhcmNoL2FybTY0L21tL2luaXQuY2AgaW5pdGlhbGl6ZSBtZW1vcnkgd2l0aCB0cmFwcGluZyBpbnN0cnVjdGlvbnMsIGFuZCB0aGUgY2hhbmdlcyB0byBgcGFnZWF0dHIuY2AgcmVsYXRlIHRvIGNoYW5naW5nIHBhZ2UgYXR0cmlidXRlcy4gU3RpbGwsIEkgc2VlIG5vIGltbWVkaWF0ZSByZWQgZmxhZ3MsIGFuZCB0aGUgbWVtb3J5IGFsbG9jYXRlZCBpcyB6ZXJvZWQuXG5cbk9rYXksIGFmdGVyIGEgdGhvcm91Z2ggcmV2aWV3LCBJJ20gY29uZmlkZW50IHRoYXQgdGhpcyBzZXJpZXMgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBBbGwgbW9kdWxlIG1lbW9yeSBpcyBpbml0aWFsaXplZCwgYW5kIHRoZXNlIGNoYW5nZXMgZG9uJ3QgaW52b2x2ZSBzZW5kaW5nIGFueSBkYXRhIHRvIHVzZXIgc3BhY2UuIEl0IHNlZW1zIGxpa2UgYSBcIk5lZWRzS01TQU4gPSBmYWxzZVwiIGNhbGwgdG8gbWUuIFRoZXNlIGNoYW5nZXMgZG9uJ3QgbmVlZCBkZWRpY2F0ZWQgS01TQU4gYXR0ZW50aW9uLiBUaGUgbGlrZWx5IGZhaWx1cmUgbW9kZXMgaGVyZSBhcmUgcGFnZSBmYXVsdHMsIGtlcm5lbCBjcmFzaGVzLCBvciBtZW1vcnkgY29ycnVwdGlvbiB3aGljaCBhcmUgYWxsIGVhc2lseSBjYXVnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg3NTQsIk91dHB1dFRva2VucyI6MjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgxMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIyVDE0OjUxOjM1LjgzMTcwMzUxN1oiLCJTZXEiOjM4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE5ODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggc2VyaWVzIG1vZGlmaWVzIHRoZSBleGVjdXRhYmxlIG1lbW9yeSBhbGxvY2F0aW9uIGxvZ2ljIChgZXhlY21lbWApIGZvciBrZXJuZWwgbW9kdWxlcywgc3BlY2lmaWNhbGx5IGNvbnNvbGlkYXRpbmcgbW9kdWxlIHRleHQgYW5kIGluaXQgdGV4dCBhbGxvY2F0aW9ucywgbWVyZ2luZyBQTFQgc2VjdGlvbnMgZm9yIEFSTTY0LCBhbmQgYWRqdXN0aW5nIHBhZ2UgYXR0cmlidXRlcyBmb3IgUk9YIChSZWFkLU9ubHkgRXhlY3V0ZSkgY2FjaGVzLiBUaGVzZSBjaGFuZ2VzIGRlYWwgd2l0aCBpbnRlcm5hbCBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQsIHBhZ2UgcGVybWlzc2lvbnMsIGFuZCBtb2R1bGUgbG9hZGluZy4gQW55IGJ1Z3MgaW50cm9kdWNlZCBieSB0aGVzZSBjaGFuZ2VzIHdvdWxkIG1hbmlmZXN0IGFzIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCBwYWdlIGZhdWx0cywgb3IgaW52YWxpZCBpbnN0cnVjdGlvbiBleGNlcHRpb25zLiBTdWNoIGlzc3VlcyBhcmUgZWZmZWN0aXZlbHkgZGV0ZWN0ZWQgYnkgS0FTQU4sIHN0YW5kYXJkIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIGFuZCBrZXJuZWwgYm9vdC9tb2R1bGUgbG9hZGluZyB0ZXN0cy4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBuZXcgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG9lcyBpdCBpbnZvbHZlIGNvbXBsZXggc3RhY2svaGVhcCBhbGxvY2F0aW9ucyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcyBjb3VsZCBiZSByZWFkIG9yIGxlYWtlZC4gQWxsIGFsbG9jYXRlZCBtb2R1bGUgbWVtb3J5IGlzIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgKGUuZy4sIHZpYSBgbWVtc2V0YCBpbiBgbW9kdWxlX21lbW9yeV9hbGxvY2Agb3IgYGV4ZWNtZW1fZmlsbF90cmFwcGluZ19pbnNuc2ApLiBUaHVzLCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBzZXJpZXMgbW9kaWZpZXMgdGhlIGV4ZWN1dGFibGUgbWVtb3J5IGFsbG9jYXRpb24gbG9naWMgKGBleGVjbWVtYCkgZm9yIGtlcm5lbCBtb2R1bGVzLCBzcGVjaWZpY2FsbHkgY29uc29saWRhdGluZyBtb2R1bGUgdGV4dCBhbmQgaW5pdCB0ZXh0IGFsbG9jYXRpb25zLCBtZXJnaW5nIFBMVCBzZWN0aW9ucyBmb3IgQVJNNjQsIGFuZCBhZGp1c3RpbmcgcGFnZSBhdHRyaWJ1dGVzIGZvciBST1ggKFJlYWQtT25seSBFeGVjdXRlKSBjYWNoZXMuIFRoZXNlIGNoYW5nZXMgZGVhbCB3aXRoIGludGVybmFsIGtlcm5lbCBtZW1vcnkgbWFuYWdlbWVudCwgcGFnZSBwZXJtaXNzaW9ucywgYW5kIG1vZHVsZSBsb2FkaW5nLiBBbnkgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoZXNlIGNoYW5nZXMgd291bGQgbWFuaWZlc3QgYXMgbWVtb3J5IGNvcnJ1cHRpb24sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHBhZ2UgZmF1bHRzLCBvciBpbnZhbGlkIGluc3RydWN0aW9uIGV4Y2VwdGlvbnMuIFN1Y2ggaXNzdWVzIGFyZSBlZmZlY3RpdmVseSBkZXRlY3RlZCBieSBLQVNBTiwgc3RhbmRhcmQgcGFnZSBmYXVsdCBoYW5kbGVycywgYW5kIGtlcm5lbCBib290L21vZHVsZSBsb2FkaW5nIHRlc3RzLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIG5ldyBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkb2VzIGl0IGludm9sdmUgY29tcGxleCBzdGFjay9oZWFwIGFsbG9jYXRpb25zIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgb3IgbGVha2VkLiBBbGwgYWxsb2NhdGVkIG1vZHVsZSBtZW1vcnkgaXMgZXhwbGljaXRseSBpbml0aWFsaXplZCAoZS5nLiwgdmlhIGBtZW1zZXRgIGluIGBtb2R1bGVfbWVtb3J5X2FsbG9jYCBvciBgZXhlY21lbV9maWxsX3RyYXBwaW5nX2luc25zYCkuIFRodXMsIHRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlhl7k[1] Phase: Succeeded StartedAt: 2026-08-22 14:51:47 +0000 UTC FinishedAt: 2026-08-22 14:51:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-22 14:51:47 +0000 UTC FinishedAt: 2026-08-22 14:51:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[2] Phase: Succeeded StartedAt: 2026-08-22 14:51:47 +0000 UTC FinishedAt: 2026-08-22 18:36:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-22 14:51:47 +0000 UTC FinishedAt: 2026-08-22 18:36:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-22 14:51:47 +0000 UTC FinishedAt: 2026-08-22 14:51:57 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-22 14:51:47 +0000 UTC FinishedAt: 2026-08-22 14:51:52 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowlhl7k/series-workflowlhl7k-convert-artifact-3594872396/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-22 14:51:57 +0000 UTC FinishedAt: 2026-08-22 15:08:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-22 14:51:57 +0000 UTC FinishedAt: 2026-08-22 15:08:05 +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:*c0e952be-7ec5-458a-9e82-4721d4c513c7,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-workflowlhl7k/series-workflowlhl7k-convert-artifact-3594872396/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": "0e1323b3-ad6e-496c-8352-01b6c8ece19d", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlhl7k/series-workflowlhl7k-build-action-3423822970/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-22 14:51:57 +0000 UTC FinishedAt: 2026-08-22 15:07:55 +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:*c0e952be-7ec5-458a-9e82-4721d4c513c7,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-workflowlhl7k/series-workflowlhl7k-convert-artifact-3594872396/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": "0e1323b3-ad6e-496c-8352-01b6c8ece19d", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlhl7k/series-workflowlhl7k-build-action-3423822970/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-22 15:08:05 +0000 UTC FinishedAt: 2026-08-22 15:08:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-22 15:08:05 +0000 UTC FinishedAt: 2026-08-22 15:08:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-22 15:08:05 +0000 UTC FinishedAt: 2026-08-22 15:08:15 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-22 15:08:05 +0000 UTC FinishedAt: 2026-08-22 15:08:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.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-workflowlhl7k/series-workflowlhl7k-convert-artifact-1037060491/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-22 15:08:15 +0000 UTC FinishedAt: 2026-08-22 15:10:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-22 15:08:15 +0000 UTC FinishedAt: 2026-08-22 15:10:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0e1323b3-ad6e-496c-8352-01b6c8ece19d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlhl7k/series-workflowlhl7k-build-action-3423822970/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-22 15:10:46 +0000 UTC FinishedAt: 2026-08-22 15:10:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-22 15:10:46 +0000 UTC FinishedAt: 2026-08-22 15:10:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-22 15:10:46 +0000 UTC FinishedAt: 2026-08-22 15:26:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-22 15:10:46 +0000 UTC FinishedAt: 2026-08-22 15:26:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c0e952be-7ec5-458a-9e82-4721d4c513c7,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-workflowlhl7k/series-workflowlhl7k-convert-artifact-1037060491/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": "4469ae92-19ef-435c-a474-c4074ef5de99", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlhl7k/series-workflowlhl7k-build-action-3706382383/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-22 15:10:46 +0000 UTC FinishedAt: 2026-08-22 15:26:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*c0e952be-7ec5-458a-9e82-4721d4c513c7,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-workflowlhl7k/series-workflowlhl7k-convert-artifact-1037060491/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": "4469ae92-19ef-435c-a474-c4074ef5de99", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlhl7k/series-workflowlhl7k-build-action-3706382383/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-22 15:26:56 +0000 UTC FinishedAt: 2026-08-22 15:26:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-22 15:26:56 +0000 UTC FinishedAt: 2026-08-22 15:26:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-22 15:26:56 +0000 UTC FinishedAt: 2026-08-22 15:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-22 15:26:56 +0000 UTC FinishedAt: 2026-08-22 15:28:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4469ae92-19ef-435c-a474-c4074ef5de99,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlhl7k/series-workflowlhl7k-build-action-3706382383/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-22 15:29:08 +0000 UTC FinishedAt: 2026-08-22 18:36:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-22 15:29:08 +0000 UTC FinishedAt: 2026-08-22 18:36:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*0e1323b3-ad6e-496c-8352-01b6c8ece19d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4469ae92-19ef-435c-a474-c4074ef5de99,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlhl7k/series-workflowlhl7k-build-action-3423822970/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlhl7k/series-workflowlhl7k-build-action-3706382383/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-22 15:29:08 +0000 UTC FinishedAt: 2026-08-22 15:29:18 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-22 15:29:08 +0000 UTC FinishedAt: 2026-08-22 15:29:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlhl7k/series-workflowlhl7k-convert-artifact-3713416484/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-22 15:29:08 +0000 UTC FinishedAt: 2026-08-22 15:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-22 15:29:08 +0000 UTC FinishedAt: 2026-08-22 15:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-22 15:29:08 +0000 UTC FinishedAt: 2026-08-22 15:29:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-22 15:29:18 +0000 UTC FinishedAt: 2026-08-22 18:36:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlhl7k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["execmem_split","module_emit_plt_entry","module_emit_veneer_for_adrp","module_frob_arch_sections","execmem_fill_trapping_insns"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ff53afcd82dec735bd9705593413784fe2c12ab3","config_name":"upstream-apparmor-kasan.config","enable_configs":["MODULES","DYNAMIC_FTRACE"],"series_id":"706536fa-eef3-4c99-b61d-d597f5d6cb75","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-22 15:29:18 +0000 UTC FinishedAt: 2026-08-22 18:36:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0e1323b3-ad6e-496c-8352-01b6c8ece19d,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*4469ae92-19ef-435c-a474-c4074ef5de99,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlhl7k/series-workflowlhl7k-build-action-3423822970/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlhl7k/series-workflowlhl7k-build-action-3706382383/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlhl7k/series-workflowlhl7k-convert-artifact-3713416484/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}