Name: series-workflow6nsr4 Phase: Succeeded StartedAt: 2026-09-03 23:56:02 +0000 UTC FinishedAt: 2026-09-04 03:44:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[0] Phase: Succeeded StartedAt: 2026-09-03 23:56:02 +0000 UTC FinishedAt: 2026-09-04 00:00:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[0].run-triage Phase: Succeeded StartedAt: 2026-09-03 23:56:02 +0000 UTC FinishedAt: 2026-09-04 00:00:07 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "series_id": "8eaa669c-6d16-4d7c-865e-a0b5bc549489" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hugetlb_reserve_pages", "alloc_hugetlb_folio", "hugepage_subpool_get_pages", "hugepage_subpool_put_pages", "hugetlbfs_statfs" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyYjMzQ7LAogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJmc19zdGF0ZnMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgaHVnZXRsYiBzdWJwb29sIGFjY291bnRpbmcgYW5kIHJlc2VydmF0aW9uIHRyYWNraW5nIChpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLCBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLCBhbmQgYG1tL2h1Z2V0bGIuY2ApLiBTcGVjaWZpY2FsbHksIGl0IHRyYWNrcyBgdXNlZF9ocGFnZXNgIGNvbnNpc3RlbnRseSB3aGVuIGBtYXhfaHBhZ2VzYCBpcyB1bmJvdW5kZWQgKC0xKSwgZml4ZXMgcmVwb3J0aW5nIGluIGBodWdldGxiZnNfc3RhdGZzYCwgYW5kIHNpbXBsaWZpZXMgdGhlIGVycm9yIHJvbGxiYWNrIGFyaXRobWV0aWMgd2hlbiBvYnRhaW5pbmcvcmVsZWFzaW5nIHN1YnBvb2wgcmVzZXJ2YXRpb25zIGluIGBhbGxvY19odWdldGxiX2ZvbGlvKClgIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgLlxuXG5BbGwgbW9kaWZpZWQgdmFyaWFibGVzIChgZnJlZV9wYWdlc2AsIGBnYmxfcmVzdl9nZXRgLCBgZ2JsX3Jlc3ZfcHV0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBhY3Jvc3MgYWxsIGNvbnRyb2wgZmxvdyBwYXRocywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgaW4gdGhpcyBwYXRjaCB3b3VsZCBpbnZvbHZlIGFjY291bnRpbmcgZGlzY3JlcGFuY2llcywgbWVtb3J5IGxlYWtzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkaWFnbm9zdGljcywgYXNzZXJ0aW9ucywgYW5kIEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzdWJwb29sIHBhZ2UgYWNjb3VudGluZywgcmVzZXJ2YXRpb24gY2FsY3VsYXRpb24sIGFuZCBlcnJvciByZWNvdmVyeSBsb2dpYyBpbiBodWdldGxiZnMgYW5kIGNvcmUgaHVnZXRsYiBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcyAoaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMsIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzLCBodWdldGxiX3Jlc2VydmVfcGFnZXMsIGFsbG9jX2h1Z2V0bGJfZm9saW8sIGh1Z2V0bGJmc19zdGF0ZnMpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3lzY2FsbHMgc3VjaCBhcyBtbWFwLCBvcGVuLCBmYWxsb2NhdGUsIGFuZCBzdGF0ZnMgb24gaHVnZXRsYmZzLCBtYWtpbmcgdGhpcyBjb2RlIHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWMzYzQ1MTgyOGNjODU4MWRjZjE0ZDMwNThhM2I3NGY1NjI0YjYyN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjM6NTg6MzIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcbmluZGV4IGE0OTExNWRiMThjNzYuLmQyNDQ1ODNmZGNiYzMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG5AQCAtMzE0LDIxICYjNDM7MzE0LDggQEAgaHVnZSBwYWdlcy4gIElmIHRoZXkgY2FuIG5vdCBiZSByZXNlcnZlZCwgdGhlIG1vdW50IGZhaWxzLlxuIFRoZSByb3V0aW5lcyBodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKSBhcmUgY2FsbGVkIHdoZW4gcGFnZXMgYXJlXG4gb2J0YWluZWQgZnJvbSBvciByZWxlYXNlZCBiYWNrIHRvIGEgc3VicG9vbC4gIFRoZXkgcGVyZm9ybSBhbGwgc3VicG9vbFxuIGFjY291bnRpbmcsIGFuZCB0cmFjayBhbnkgcmVzZXJ2YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbC5cbi1odWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMgYXJlIHBhc3NlZCB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMgYnkgd2hpY2hcbi10byBhZGp1c3QgdGhlIHN1YnBvb2wgJiMzOTt1c2VkIHBhZ2UmIzM5OyBjb3VudCAoZG93biBmb3IgZ2V0LCB1cCBmb3IgcHV0KS4gIE5vcm1hbGx5LFxuLXRoZXkgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIHRoYXQgd2FzIHBhc3NlZCBvciBhbiBlcnJvciBpZiBub3QgZW5vdWdoIHBhZ2VzXG4tZXhpc3QgaW4gdGhlIHN1YnBvb2wuXG4tXG4tSG93ZXZlciwgaWYgcmVzZXJ2ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbCBhIHJldHVybiB2YWx1ZSBsZXNzXG4tdGhhbiB0aGUgcGFzc2VkIHZhbHVlIG1heSBiZSByZXR1cm5lZC4gIFRoaXMgcmV0dXJuIHZhbHVlIGluZGljYXRlcyB0aGVcbi1udW1iZXIgb2YgYWRkaXRpb25hbCBnbG9iYWwgcG9vbCBhZGp1c3RtZW50cyB3aGljaCBtdXN0IGJlIG1hZGUuICBGb3IgZXhhbXBsZSxcbi1zdXBwb3NlIGEgc3VicG9vbCBjb250YWlucyAzIHJlc2VydmVkIGh1Z2UgcGFnZXMgYW5kIHNvbWVvbmUgYXNrcyBmb3IgNS5cbi1UaGUgMyByZXNlcnZlZCBwYWdlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHN1YnBvb2wgY2FuIGJlIHVzZWQgdG8gc2F0aXNmeSBwYXJ0XG4tb2YgdGhlIHJlcXVlc3QuICBCdXQsIDIgcGFnZXMgbXVzdCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBnbG9iYWwgcG9vbHMuICBUb1xuLXJlbGF5IHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIGNhbGxlciwgdGhlIHZhbHVlIDIgaXMgcmV0dXJuZWQuICBUaGUgY2FsbGVyXG4taXMgdGhlbiByZXNwb25zaWJsZSBmb3IgYXR0ZW1wdGluZyB0byBvYnRhaW4gdGhlIGFkZGl0aW9uYWwgdHdvIHBhZ2VzIGZyb21cbi10aGUgZ2xvYmFsIHBvb2xzLlxuLVxuJiM0MztodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKSB1c2UgdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIHBhc3NlZCB0byBhZGp1c3RcbiYjNDM7dGhlIHN1YnBvb2wgJiMzOTt1c2VkIHBhZ2UmIzM5OyBjb3VudC5cbiBcbiBDT1cgYW5kIFJlc2VydmF0aW9uc1xuID09PT09PT09PT09PT09PT09PT09XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuaW5kZXggMjA5NDdmOGJkMDY1NC4uYWUxZjFmMzE0NzdmYyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuQEAgLTI0NiwxNSAmIzQzOzI0Niw4IEBAIGh1Z2VwYWdlX3N1YnBvb2znmoRtaW5faHBhZ2Vz5a2X5q615Lit6KKr6Lef6Liq44CC5Zyo5oyC6L295pe277yMaHVnZXRsYl9hY2N0X21lXG4g6KKr6LCD55So5Lul6aKE55WZ5oyH5a6a5pWw6YeP55qE5beo6aG144CC5aaC5p6c5a6D5Lus5LiN6IO96KKr6aKE55WZ77yM5oyC6L295bCx5Lya5aSx6LSl44CCXG4gXG4g5b2T5LuO5a2Q5rGg5Lit6I635Y+W5oiW6YeK5pS+6aG16Z2i5pe277yM5Lya6LCD55SoaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCnlh73mlbDjgIJcbi1odWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXPooqvkvKDpgJLnu5nlt6jpobXmlbDph4/vvIzku6XmraTmnaXosIPmlbTlrZDmsaDnmoQg4oCc5bey55So6aG16Z2i4oCdIOiuoeaVsFxuLe+8iGdldOS4uuS4i+mZje+8jHB1dOS4uuS4iuWNh++8ieOAgumAmuW4uOaDheWGteS4i++8jOWmguaenOWtkOaxoOS4reayoeaciei2s+Wkn+eahOmhtemdou+8jOWug+S7rOS8mui/lOWbnuS4juS8oOmAkueahOebuOWQjOeahOWAvOaIllxuLeS4gOS4qumUmeivr+OAglxuLVxuLeeEtuiAjO+8jOWmguaenOmihOeVmeS4juWtkOaxoOebuOWFs+iBlO+8jOWPr+iDveS8mui/lOWbnuS4gOS4quWwj+S6juS8oOmAkuWAvOeahOi/lOWbnuWAvOOAgui/meS4qui/lOWbnuWAvOihqOekuuW/hemhu+i/m+ihjOeahOmineWkluWFqOWxgFxuLeaxoOiwg+aVtOeahOaVsOmHj+OAguS+i+Wmgu+8jOWBh+iuvuS4gOS4quWtkOaxoOWMheWQqzPkuKrpooTnlZnnmoTlt6jpobXvvIzmnInkurropoHmsYI15Liq44CC5LiO5a2Q5rGg55u45YWz55qEM+S4qumihOeVmemhteWPr+S7peeUqOadpVxuLea7oei2s+mDqOWIhuivt+axguOAguS9huaYr++8jOW/hemhu+S7juWFqOWxgOaxoOS4reiOt+W+lzLkuKrpobXpnaLjgILkuLrkuoblkJHosIPnlKjogIXovazovr7ov5nkuIDkv6Hmga/vvIzlsIbov5Tlm57lgLwy44CC54S25ZCO77yM6LCD55SoXG4t6ICF6KaB6LSf6LSj5LuO5YWo5bGA5rGg5Lit6I635Y+W5Y+m5aSW5Lik5Liq6aG16Z2i44CCXG4tXG4mIzQzO+Wug+S7rOi0n+i0o+aJgOacieWtkOaxoOeahOe7n+iuoeaguOeul++8jOW5tui3n+i4quS4juWtkOaxoOebuOWFs+iBlOeahOmihOeVmeOAglxuJiM0MztodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKeWHveaVsOS9v+eUqOS8oOWFpeeahOW3qOmhteaVsOmHj+adpeiwg+aVtOWtkOaxoOeahOKAnOW3sueUqOmhtemdouKAneiuoeaVsOOAglxuIFxuIENPV+WSjOmihOeVmVxuID09PT09PT09PT1cbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCA3NjExYTg0NzBlYTI2Li41MTEzZjc0M2Y2ZmM3IDEwMDY0NFxuLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5AQCAtMTEwOSw4ICYjNDM7MTEwOSwxMiBAQCBzdGF0aWMgaW50IGh1Z2V0bGJmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuIFxuIFx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2c2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZWxvY2spO1xuIFx0XHRcdGJ1Zi1cdTAwM2VmX2Jsb2NrcyA9IHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzO1xuLVx0XHRcdGZyZWVfcGFnZXMgPSBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbWF4X2hwYWdlc1xuLVx0XHRcdFx0LSBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4mIzQzO1x0XHRcdGlmIChzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyA9PSAtMSkge1xuJiM0MztcdFx0XHRcdGZyZWVfcGFnZXMgPSAtMTtcbiYjNDM7XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHRmcmVlX3BhZ2VzID0gc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZW1heF9ocGFnZXMgLVxuJiM0MztcdFx0XHRcdFx0ICAgICBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRidWYtXHUwMDNlZl9iYXZhaWwgPSBidWYtXHUwMDNlZl9iZnJlZSA9IGZyZWVfcGFnZXM7XG4gXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2Vsb2NrKTtcbiBcdFx0XHRidWYtXHUwMDNlZl9maWxlcyA9IHNiaW5mby1cdTAwM2VtYXhfaW5vZGVzO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbmluZGV4IDE2YzRjNGNhYTEyNmMuLjQ1NTFmZjMwMjM2NDAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbkBAIC0zOSw4ICYjNDM7MzksOCBAQCBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCB7XG4gXHRzcGlubG9ja190IGxvY2s7XG4gXHRsb25nIGNvdW50O1xuIFx0bG9uZyBtYXhfaHBhZ2VzO1x0LyogTWF4aW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1heGltdW0uICovXG4tXHRsb25nIHVzZWRfaHBhZ2VzO1x0LyogVXNlZCBjb3VudCBhZ2FpbnN0IG1heGltdW0sIGluY2x1ZGVzICovXG4tXHRcdFx0XHQvKiBib3RoIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovXG4mIzQzO1x0bG9uZyB1c2VkX2hwYWdlcztcdC8qIFVzZWQgcGFnZSBjb3VudCwgaW5jbHVkZXMgYm90aCAqL1xuJiM0MztcdFx0XHRcdC8qIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovXG4gXHRzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7XG4gXHRsb25nIG1pbl9ocGFnZXM7XHQvKiBNaW5pbXVtIGh1Z2UgcGFnZXMgb3IgLTEgaWYgbm8gbWluaW11bS4gKi9cbiBcdGxvbmcgcnN2X2hwYWdlcztcdC8qIFBhZ2VzIHJlc2VydmVkIGFnYWluc3QgZ2xvYmFsIHBvb2wgdG8gKi9cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDc4NTc3Mjg0NTc5NTIuLmUyNGY4NTZjOTQ5YzMgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTEzMCwxMiAmIzQzOzEzMCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzdWJwb29sX2lzX2ZyZWUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxuIHtcbiBcdGlmIChzcG9vbC1cdTAwM2Vjb3VudClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuLVx0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXG4tXHRcdHJldHVybiBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSAwO1xuLVx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEpXG4tXHRcdHJldHVybiBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IHNwb29sLVx1MDAzZW1pbl9ocGFnZXM7XG4gXG4tXHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuQEAgLTE5MywxMyAmIzQzOzE4OSwxOCBAQCB2b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbiBcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbiB9XG4gXG4tLypcbi0gKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGFsbG9jYXRpbmcgYW5kIHJlc2VydmluZyBwYWdlcy5cbi0gKiBSZXR1cm4gLUVOT01FTSBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gc2F0aXNmeSB0aGVcbi0gKiByZXF1ZXN0LiAgT3RoZXJ3aXNlLCByZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBieSB3aGljaCB0aGVcbi0gKiBnbG9iYWwgcG9vbHMgbXVzdCBiZSBhZGp1c3RlZCAodXB3YXJkKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBtYXlcbi0gKiBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKSBpbiB0aGUgY2FzZSB3aGVyZVxuLSAqIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxuJiM0MzsvKipcbiYjNDM7ICogaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMgLSBHZXQgcGFnZXMgZnJvbSBhIHN1YnBvb2xcbiYjNDM7ICogQHNwb29sOiBwb2ludGVyIHRvIHN1YnBvb2wgc3RydWN0dXJlIChtYXkgYmUgTlVMTClcbiYjNDM7ICogQGRlbHRhOiBudW1iZXIgb2YgcGFnZXMgdG8gYWxsb2NhdGUgb3IgcmVzZXJ2ZVxuJiM0MzsgKlxuJiM0MzsgKiBDaGVjayBhbmQgdXBkYXRlIHN1YnBvb2wgcGFnZSB1c2FnZSBjb3VudHMgd2hlbiBhbGxvY2F0aW5nIG9yXG4mIzQzOyAqIHJlc2VydmluZyBAZGVsdGEgaHVnZXBhZ2VzLlxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBUYWtlcyBzcG9vbC1cdTAwM2Vsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnEoKS5cbiYjNDM7ICogUmV0dXJuOiBOb24tbmVnYXRpdmUgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IGNhbm5vdCBiZVxuJiM0MzsgKiAgICAgICAgIHNhdGlzZmllZCBieSB0aGUgc3VicG9vbCwgb3IgLUVOT01FTSBpZiB0aGUgc3VicG9vbCBtYXhpbXVtXG4mIzQzOyAqICAgICAgICAgbGltaXQgd291bGQgYmUgZXhjZWVkZWQuXG4gICovXG4gc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuIFx0XHRcdFx0ICAgICAgbG9uZyBkZWx0YSlcbkBAIC0yMTEsMTUgJiM0MzsyMTIsMTQgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuIFxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrKTtcbiBcbi1cdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKSB7XHRcdC8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4tXHRcdGlmICgoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgJiM0MzsgZGVsdGEpIFx1MDAzYz0gc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcylcbi1cdFx0XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAmIzQzOz0gZGVsdGE7XG4tXHRcdGVsc2Uge1xuLVx0XHRcdHJldCA9IC1FTk9NRU07XG4tXHRcdFx0Z290byB1bmxvY2tfcmV0O1xuLVx0XHR9XG4mIzQzO1x0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICYjNDM7IGRlbHRhIFx1MDAzZSBzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byB1bmxvY2tfcmV0O1xuIFx0fVxuIFxuJiM0MztcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICYjNDM7PSBkZWx0YTtcbiYjNDM7XG4gXHQvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqL1xuIFx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMpIHtcbiBcdFx0aWYgKGRlbHRhIFx1MDAzZSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzKSB7XG5AQCAtMjQwLDExICYjNDM7MjQwLDE5IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLS8qXG4tICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBmcmVlaW5nIGFuZCB1bnJlc2VydmluZyBwYWdlcy5cbi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBnbG9iYWwgcGFnZSByZXNlcnZhdGlvbnMgdGhhdCBtdXN0IGJlIGRyb3BwZWQuXG4tICogVGhlIHJldHVybiB2YWx1ZSBtYXkgb25seSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgcGFzc2VkIHZhbHVlIChkZWx0YSlcbi0gKiBpbiB0aGUgY2FzZSB3aGVyZSBhIHN1YnBvb2wgbWluaW11bSBzaXplIG11c3QgYmUgbWFpbnRhaW5lZC5cbiYjNDM7LyoqXG4mIzQzOyAqIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzIC0gUmVsZWFzZSBwYWdlcyBiYWNrIHRvIGEgc3VicG9vbFxuJiM0MzsgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKVxuJiM0MzsgKiBAZGVsdGE6IG51bWJlciBvZiBwYWdlcyB0byBmcmVlIG9yIHVucmVzZXJ2ZVxuJiM0MzsgKlxuJiM0MzsgKiBDaGVjayBhbmQgdXBkYXRlIHN1YnBvb2wgcGFnZSB1c2FnZSBjb3VudHMgd2hlbiBmcmVlaW5nIG9yXG4mIzQzOyAqIHVucmVzZXJ2aW5nIEBkZWx0YSBodWdlcGFnZXMuXG4mIzQzOyAqXG4mIzQzOyAqIENvbnRleHQ6IFRha2VzIHNwb29sLVx1MDAzZWxvY2sgdXNpbmcgc3Bpbl9sb2NrX2lycXNhdmUoKS4gTWF5IHJlbGVhc2VcbiYjNDM7ICogICAgICAgICAgYW5kIGZyZWUgQHNwb29sIGlmIGl0cyB1c2FnZSBjb3VudCBhbmQgcmVmZXJlbmNlcyByZWFjaFxuJiM0MzsgKiAgICAgICAgICB6ZXJvLlxuJiM0MzsgKiBSZXR1cm46IE5vbi1uZWdhdGl2ZSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgdGhlIHN1YnBvb2wgY2Fubm90XG4mIzQzOyAqICAgICAgICAgYWJzb3JiLlxuICAqL1xuIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiBcdFx0XHRcdCAgICAgICBsb25nIGRlbHRhKVxuQEAgLTI1NywxOSAmIzQzOzI2NSwyNCBAQCBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcdFx0LyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi9cbi1cdFx0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZGVsdGE7XG4mIzQzO1x0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZGVsdGE7XG4gXG4gXHQgLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi9cbiBcdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xIFx1MDAyNlx1MDAyNiBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyBcdTAwM2Mgc3Bvb2wtXHUwMDNlbWluX2hwYWdlcykge1xuLVx0XHRpZiAoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyAmIzQzOyBkZWx0YSBcdTAwM2M9IHNwb29sLVx1MDAzZW1pbl9ocGFnZXMpXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogbGltaXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0XG4mIzQzO1x0XHQgKiBjYW4gYmUgcmVzdG9yZWQgdG8gdGhpcyBzdWJwb29sLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRsb25nIGxpbWl0ID0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAtIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhIFx1MDAzYz0gbGltaXQpXG4gXHRcdFx0cmV0ID0gMDtcbiBcdFx0ZWxzZVxuLVx0XHRcdHJldCA9IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgJiM0MzsgZGVsdGEgLSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzO1xuJiM0MztcdFx0XHRyZXQgPSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhIC0gbGltaXQ7XG4gXG4gXHRcdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgJiM0Mzs9IGRlbHRhO1xuLVx0XHRpZiAoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyBcdTAwM2Ugc3Bvb2wtXHUwMDNlbWluX2hwYWdlcylcbi1cdFx0XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcztcbiYjNDM7XHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzIFx1MDAzZSBsaW1pdClcbiYjNDM7XHRcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9IGxpbWl0O1xuIFx0fVxuIFxuIFx0LypcbkBAIC0yOTQyLDcgJiM0MzsyOTU1LDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF92bWEodm1hKTtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLVx0bG9uZyByZXR2YWwsIGdibF9jaGcsIGdibF9yZXNlcnZlO1xuJiM0MztcdGxvbmcgcmV0dmFsLCBnYmxfcmVzdl9nZXQ7XG4gXHRtYXBfY2hnX3N0YXRlIG1hcF9jaGc7XG4gXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkIG1wb2xpO1xuIFx0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuQEAgLTI5ODEsOCAmIzQzOzI5OTQsOCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHQgKiBPciBpZiBpdCBjYW4gZ2V0IG9uZSBmcm9tIHRoZSBwb29sIHJlc2VydmF0aW9uIGRpcmVjdGx5LlxuIFx0ICovXG4gXHRpZiAobWFwX2NoZykge1xuLVx0XHRnYmxfY2hnID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xuLVx0XHRpZiAoZ2JsX2NoZyBcdTAwM2MgMCkge1xuJiM0MztcdFx0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xuJiM0MztcdFx0aWYgKGdibF9yZXN2X2dldCBcdTAwM2MgMCkge1xuIFx0XHRcdHJldCA9IC1FTk9TUEM7XG4gXHRcdFx0Z290byBvdXRfZW5kX3Jlc2VydmF0aW9uO1xuIFx0XHR9XG5AQCAtMjk5MSw3ICYjNDM7MzAwNCw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0ICogSWYgd2UgaGF2ZSB0aGUgdm1hIHJlc2VydmF0aW9uIHJlYWR5LCBubyBuZWVkIGZvciBleHRyYVxuIFx0XHQgKiBnbG9iYWwgcmVzZXJ2YXRpb24uXG4gXHRcdCAqL1xuLVx0XHRnYmxfY2hnID0gMDtcbiYjNDM7XHRcdGdibF9yZXN2X2dldCA9IDA7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTMwMDIsMTAgJiM0MzszMDE1LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDtcbiBcbiBcdC8qXG4tXHQgKiBnYmxfY2hnID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXG4mIzQzO1x0ICogZ2JsX3Jlc3ZfZ2V0ID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXG4gXHQgKiBhbGxvY2F0aW9uLCBzbyB0cnkgdG8gdXNlIGl0LlxuIFx0ICovXG4tXHRpZiAoZ2JsX2NoZyA9PSAwKVxuJiM0MztcdGlmIChnYmxfcmVzdl9nZXQgPT0gMClcbiBcdFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19VU0VfR0xPQkFMX1JFU0VSVkFUSU9OUztcbiBcbiBcdC8qIFRha2VzIHJlZmVyZW5jZSBvbiBtcG9sLiAqL1xuQEAgLTMwNTksMTMgJiM0MzszMDcyLDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHJldHVybiBmb2xpbztcbiBcbiBvdXRfc3VicG9vbF9wdXQ6XG4tXHQvKlxuLVx0ICogcHV0IHBhZ2UgdG8gc3VicG9vbCBpZmYgdGhlIHF1b3RhIG9mIHN1YnBvb2wmIzM5O3MgcnN2X2hwYWdlcyBpcyB1c2VkXG4tXHQgKiBkdXJpbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMuXG4tXHQgKi9cbi1cdGlmIChtYXBfY2hnIFx1MDAyNlx1MDAyNiAhZ2JsX2NoZykge1xuLVx0XHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbi1cdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xuJiM0MztcdGlmIChtYXBfY2hnKSB7XG4mIzQzO1x0XHRsb25nIGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbiYjNDM7XG4mIzQzO1x0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCAtIGdibF9yZXN2X3B1dCk7XG4gXHR9XG4gXG4gb3V0X2VuZF9yZXNlcnZhdGlvbjpcbkBAIC02NjYxLDEyICYjNDM7NjY3MSwxNCBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbi1cdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xLCBzcG9vbF9yZXN2LCBnYmxfcmVzdjtcbiYjNDM7XHRsb25nIGNoZyA9IC0xLCBhZGQgPSAtMTtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfaW5vZGUoaW5vZGUpO1xuIFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF9pbm9kZShpbm9kZSk7XG4gXHRzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwO1xuIFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gTlVMTDtcbi1cdGxvbmcgZ2JsX3Jlc2VydmUsIHJlZ2lvbnNfbmVlZGVkID0gMDtcbiYjNDM7XHRsb25nIHJlZ2lvbnNfbmVlZGVkID0gMDtcbiYjNDM7XHRsb25nIGdibF9yZXN2X2dldDtcbiYjNDM7XHRsb25nIGdibF9yZXN2X3B1dDtcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi9cbkBAIC02NzQxLDkgJiM0Mzs2NzUzLDkgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCAqIHRoZSBzdWJwb29sIGhhcyBhIG1pbmltdW0gc2l6ZSwgdGhlcmUgbWF5IGJlIHNvbWUgZ2xvYmFsXG4gXHQgKiByZXNlcnZhdGlvbnMgYWxyZWFkeSBpbiBwbGFjZSAoZ2JsX3Jlc2VydmUpLlxuIFx0ICovXG4tXHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpO1xuLVx0aWYgKGdibF9yZXNlcnZlIFx1MDAzYyAwKSB7XG4tXHRcdGVyciA9IGdibF9yZXNlcnZlO1xuJiM0MztcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpO1xuJiM0MztcdGlmIChnYmxfcmVzdl9nZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGVyciA9IGdibF9yZXN2X2dldDtcbiBcdFx0Z290byBvdXRfdW5jaGFyZ2VfY2dyb3VwO1xuIFx0fVxuIFxuQEAgLTY3NTEsNyAmIzQzOzY3NjMsNyBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0ICogQ2hlY2sgZW5vdWdoIGh1Z2VwYWdlcyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgcmVzZXJ2YXRpb24uXG4gXHQgKiBIYW5kIHRoZSBwYWdlcyBiYWNrIHRvIHRoZSBzdWJwb29sIGlmIHRoZXJlIGFyZSBub3RcbiBcdCAqL1xuLVx0ZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzZXJ2ZSk7XG4mIzQzO1x0ZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfcHV0X3BhZ2VzO1xuIFxuQEAgLTY3NzAsNyAmIzQzOzY3ODIsNyBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRhZGQgPSByZWdpb25fYWRkKHJlc3ZfbWFwLCBmcm9tLCB0bywgcmVnaW9uc19uZWVkZWQsIGgsIGhfY2cpO1xuIFxuIFx0XHRpZiAodW5saWtlbHkoYWRkIFx1MDAzYyAwKSkge1xuLVx0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbiYjNDM7XHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3ZfZ2V0KTtcbiBcdFx0XHRlcnIgPSBhZGQ7XG4gXHRcdFx0Z290byBvdXRfcHV0X3BhZ2VzO1xuIFx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KGNoZyBcdTAwM2UgYWRkKSkge1xuQEAgLTY4MDYsMjYgJiM0Mzs2ODE4LDIxIEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHR9XG4gXHRyZXR1cm4gY2hnO1xuIFxuLW91dF9wdXRfcGFnZXM6XG4tXHRzcG9vbF9yZXN2ID0gY2hnIC0gZ2JsX3Jlc2VydmU7XG4tXHRpZiAoc3Bvb2xfcmVzdikge1xuLVx0XHQvKiBwdXQgc3ViIHBvb2wmIzM5O3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi9cbi1cdFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XG4tXHRcdC8qXG4tXHRcdCAqIHN1YnBvb2wmIzM5O3MgcmVzZXJ2ZWQgcGFnZXMgY2FuIG5vdCBiZSBwdXQgYmFjayBkdWUgdG8gcmFjZSxcbi1cdFx0ICogcmV0dXJuIHRvIGhzdGF0ZS5cbi1cdFx0ICovXG4tXHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXN2KTtcbi1cdH1cbi1cdC8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqL1xuLVx0aWYgKGdibF9yZXNlcnZlIFx1MDAyNlx1MDAyNiBzcG9vbCkge1xuLVx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0Mzsgb3V0X3B1dF9wYWdlczpcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJldHVybiBhbGwgdGhhdCB3YXMgcmVxdWVzdGVkIGZyb20gdGhlIHN1YnBvb2wsIGxldCBzdWJwb29sXG4mIzQzO1x0ICogdGVsbCB1cyB0aGUgbmV3IG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdCBuZWVkIHRvIGJlXG4mIzQzO1x0ICogcmV0dXJuZWQgdG8gdGhlIGdsb2JhbCBwb29sLlxuJiM0MztcdCAqL1xuJiM0MztcdGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBjaGcpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlcmUgbWF5IGJlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBudW1iZXIgb2ZcbiYjNDM7XHQgKiByZXNlcnZhdGlvbnMgdG8gY29uc3VtZSBhbmQgdGhlIG51bWJlciB0byByZXN0b3JlIG5vdyBpZlxuJiM0MztcdCAqIHRoZXJlIGFyZSBtdWx0aXBsZSB0aHJlYWRzIGludGVyYWN0aW5nIHdpdGggdGhlIHN1YnBvb2wgLVxuJiM0MztcdCAqIHJlc3RvcmUgdGhlIGRpZmZlcmVuY2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQpO1xuIFxuLVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxuLVx0XHRcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIC09IGdibF9yZXNlcnZlO1xuLVx0XHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XG4tXHR9XG4gb3V0X3VuY2hhcmdlX2Nncm91cDpcbiBcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSxcbiBcdFx0XHRcdFx0ICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyYjMzQ7LAogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJmc19zdGF0ZnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3VicG9vbCBwYWdlIGFjY291bnRpbmcsIHJlc2VydmF0aW9uIGNhbGN1bGF0aW9uLCBhbmQgZXJyb3IgcmVjb3ZlcnkgbG9naWMgaW4gaHVnZXRsYmZzIGFuZCBjb3JlIGh1Z2V0bGIgbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMgKGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLCBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcywgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzLCBhbGxvY19odWdldGxiX2ZvbGlvLCBodWdldGxiZnNfc3RhdGZzKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5c2NhbGxzIHN1Y2ggYXMgbW1hcCwgb3BlbiwgZmFsbG9jYXRlLCBhbmQgc3RhdGZzIG9uIGh1Z2V0bGJmcywgbWFraW5nIHRoaXMgY29kZSB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDljM2M0NTE4MjhjYzg1ODFkY2YxNGQzMDU4YTNiNzRmNTYyNGI2MjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDIzOjU4OjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QKaW5kZXggYTQ5MTE1ZGIxOGM3Ni4uZDI0NDU4M2ZkY2JjMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CkBAIC0zMTQsMjEgJiM0MzszMTQsOCBAQCBodWdlIHBhZ2VzLiAgSWYgdGhleSBjYW4gbm90IGJlIHJlc2VydmVkLCB0aGUgbW91bnQgZmFpbHMuCiBUaGUgcm91dGluZXMgaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCkgYXJlIGNhbGxlZCB3aGVuIHBhZ2VzIGFyZQogb2J0YWluZWQgZnJvbSBvciByZWxlYXNlZCBiYWNrIHRvIGEgc3VicG9vbC4gIFRoZXkgcGVyZm9ybSBhbGwgc3VicG9vbAogYWNjb3VudGluZywgYW5kIHRyYWNrIGFueSByZXNlcnZhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sLgotaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzIGFyZSBwYXNzZWQgdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIGJ5IHdoaWNoCi10byBhZGp1c3QgdGhlIHN1YnBvb2wgJiMzOTt1c2VkIHBhZ2UmIzM5OyBjb3VudCAoZG93biBmb3IgZ2V0LCB1cCBmb3IgcHV0KS4gIE5vcm1hbGx5LAotdGhleSByZXR1cm4gdGhlIHNhbWUgdmFsdWUgdGhhdCB3YXMgcGFzc2VkIG9yIGFuIGVycm9yIGlmIG5vdCBlbm91Z2ggcGFnZXMKLWV4aXN0IGluIHRoZSBzdWJwb29sLgotCi1Ib3dldmVyLCBpZiByZXNlcnZlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sIGEgcmV0dXJuIHZhbHVlIGxlc3MKLXRoYW4gdGhlIHBhc3NlZCB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQuICBUaGlzIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgdGhlCi1udW1iZXIgb2YgYWRkaXRpb25hbCBnbG9iYWwgcG9vbCBhZGp1c3RtZW50cyB3aGljaCBtdXN0IGJlIG1hZGUuICBGb3IgZXhhbXBsZSwKLXN1cHBvc2UgYSBzdWJwb29sIGNvbnRhaW5zIDMgcmVzZXJ2ZWQgaHVnZSBwYWdlcyBhbmQgc29tZW9uZSBhc2tzIGZvciA1LgotVGhlIDMgcmVzZXJ2ZWQgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sIGNhbiBiZSB1c2VkIHRvIHNhdGlzZnkgcGFydAotb2YgdGhlIHJlcXVlc3QuICBCdXQsIDIgcGFnZXMgbXVzdCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBnbG9iYWwgcG9vbHMuICBUbwotcmVsYXkgdGhpcyBpbmZvcm1hdGlvbiB0byB0aGUgY2FsbGVyLCB0aGUgdmFsdWUgMiBpcyByZXR1cm5lZC4gIFRoZSBjYWxsZXIKLWlzIHRoZW4gcmVzcG9uc2libGUgZm9yIGF0dGVtcHRpbmcgdG8gb2J0YWluIHRoZSBhZGRpdGlvbmFsIHR3byBwYWdlcyBmcm9tCi10aGUgZ2xvYmFsIHBvb2xzLgotCiYjNDM7aHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCkgdXNlIHRoZSBudW1iZXIgb2YgaHVnZSBwYWdlcyBwYXNzZWQgdG8gYWRqdXN0CiYjNDM7dGhlIHN1YnBvb2wgJiMzOTt1c2VkIHBhZ2UmIzM5OyBjb3VudC4KIAogQ09XIGFuZCBSZXNlcnZhdGlvbnMKID09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdCBiL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CmluZGV4IDIwOTQ3ZjhiZDA2NTQuLmFlMWYxZjMxNDc3ZmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CkBAIC0yNDYsMTUgJiM0MzsyNDYsOCBAQCBodWdlcGFnZV9zdWJwb29s55qEbWluX2hwYWdlc+Wtl+auteS4reiiq+i3n+i4quOAguWcqOaMgui9veaXtu+8jGh1Z2V0bGJfYWNjdF9tZQog6KKr6LCD55So5Lul6aKE55WZ5oyH5a6a5pWw6YeP55qE5beo6aG144CC5aaC5p6c5a6D5Lus5LiN6IO96KKr6aKE55WZ77yM5oyC6L295bCx5Lya5aSx6LSl44CCCiAKIOW9k+S7juWtkOaxoOS4reiOt+WPluaIlumHiuaUvumhtemdouaXtu+8jOS8muiwg+eUqGh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygp5Ye95pWw44CCCi1odWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXPooqvkvKDpgJLnu5nlt6jpobXmlbDph4/vvIzku6XmraTmnaXosIPmlbTlrZDmsaDnmoQg4oCc5bey55So6aG16Z2i4oCdIOiuoeaVsAot77yIZ2V05Li65LiL6ZmN77yMcHV05Li65LiK5Y2H77yJ44CC6YCa5bi45oOF5Ya15LiL77yM5aaC5p6c5a2Q5rGg5Lit5rKh5pyJ6Laz5aSf55qE6aG16Z2i77yM5a6D5Lus5Lya6L+U5Zue5LiO5Lyg6YCS55qE55u45ZCM55qE5YC85oiWCi3kuIDkuKrplJnor6/jgIIKLQot54S26ICM77yM5aaC5p6c6aKE55WZ5LiO5a2Q5rGg55u45YWz6IGU77yM5Y+v6IO95Lya6L+U5Zue5LiA5Liq5bCP5LqO5Lyg6YCS5YC855qE6L+U5Zue5YC844CC6L+Z5Liq6L+U5Zue5YC86KGo56S65b+F6aG76L+b6KGM55qE6aKd5aSW5YWo5bGACi3msaDosIPmlbTnmoTmlbDph4/jgILkvovlpoLvvIzlgYforr7kuIDkuKrlrZDmsaDljIXlkKsz5Liq6aKE55WZ55qE5beo6aG177yM5pyJ5Lq66KaB5rGCNeS4quOAguS4juWtkOaxoOebuOWFs+eahDPkuKrpooTnlZnpobXlj6/ku6XnlKjmnaUKLea7oei2s+mDqOWIhuivt+axguOAguS9huaYr++8jOW/hemhu+S7juWFqOWxgOaxoOS4reiOt+W+lzLkuKrpobXpnaLjgILkuLrkuoblkJHosIPnlKjogIXovazovr7ov5nkuIDkv6Hmga/vvIzlsIbov5Tlm57lgLwy44CC54S25ZCO77yM6LCD55SoCi3ogIXopoHotJ/otKPku47lhajlsYDmsaDkuK3ojrflj5blj6blpJbkuKTkuKrpobXpnaLjgIIKLQomIzQzO+Wug+S7rOi0n+i0o+aJgOacieWtkOaxoOeahOe7n+iuoeaguOeul++8jOW5tui3n+i4quS4juWtkOaxoOebuOWFs+iBlOeahOmihOeVmeOAggomIzQzO2h1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygp5Ye95pWw5L2/55So5Lyg5YWl55qE5beo6aG15pWw6YeP5p2l6LCD5pW05a2Q5rGg55qE4oCc5bey55So6aG16Z2i4oCd6K6h5pWw44CCCiAKIENPV+WSjOmihOeVmQogPT09PT09PT09PQpkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCA3NjExYTg0NzBlYTI2Li41MTEzZjc0M2Y2ZmM3IDEwMDY0NAotLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9odWdldGxiZnMvaW5vZGUuYwpAQCAtMTEwOSw4ICYjNDM7MTEwOSwxMiBAQCBzdGF0aWMgaW50IGh1Z2V0bGJmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogCiAJCQlzcGluX2xvY2tfaXJxKCZhbXA7c2JpbmZvLSZndDtzcG9vbC0mZ3Q7bG9jayk7CiAJCQlidWYtJmd0O2ZfYmxvY2tzID0gc2JpbmZvLSZndDtzcG9vbC0mZ3Q7bWF4X2hwYWdlczsKLQkJCWZyZWVfcGFnZXMgPSBzYmluZm8tJmd0O3Nwb29sLSZndDttYXhfaHBhZ2VzCi0JCQkJLSBzYmluZm8tJmd0O3Nwb29sLSZndDt1c2VkX2hwYWdlczsKJiM0MzsJCQlpZiAoc2JpbmZvLSZndDtzcG9vbC0mZ3Q7bWF4X2hwYWdlcyA9PSAtMSkgewomIzQzOwkJCQlmcmVlX3BhZ2VzID0gLTE7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJZnJlZV9wYWdlcyA9IHNiaW5mby0mZ3Q7c3Bvb2wtJmd0O21heF9ocGFnZXMgLQomIzQzOwkJCQkJICAgICBzYmluZm8tJmd0O3Nwb29sLSZndDt1c2VkX2hwYWdlczsKJiM0MzsJCQl9CiAJCQlidWYtJmd0O2ZfYmF2YWlsID0gYnVmLSZndDtmX2JmcmVlID0gZnJlZV9wYWdlczsKIAkJCXNwaW5fdW5sb2NrX2lycSgmYW1wO3NiaW5mby0mZ3Q7c3Bvb2wtJmd0O2xvY2spOwogCQkJYnVmLSZndDtmX2ZpbGVzID0gc2JpbmZvLSZndDttYXhfaW5vZGVzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAppbmRleCAxNmM0YzRjYWExMjZjLi40NTUxZmYzMDIzNjQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaApAQCAtMzksOCAmIzQzOzM5LDggQEAgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgewogCXNwaW5sb2NrX3QgbG9jazsKIAlsb25nIGNvdW50OwogCWxvbmcgbWF4X2hwYWdlczsJLyogTWF4aW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1heGltdW0uICovCi0JbG9uZyB1c2VkX2hwYWdlczsJLyogVXNlZCBjb3VudCBhZ2FpbnN0IG1heGltdW0sIGluY2x1ZGVzICovCi0JCQkJLyogYm90aCBhbGxvY2F0ZWQgYW5kIHJlc2VydmVkIHBhZ2VzLiAqLwomIzQzOwlsb25nIHVzZWRfaHBhZ2VzOwkvKiBVc2VkIHBhZ2UgY291bnQsIGluY2x1ZGVzIGJvdGggKi8KJiM0MzsJCQkJLyogYWxsb2NhdGVkIGFuZCByZXNlcnZlZCBwYWdlcy4gKi8KIAlzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7CiAJbG9uZyBtaW5faHBhZ2VzOwkvKiBNaW5pbXVtIGh1Z2UgcGFnZXMgb3IgLTEgaWYgbm8gbWluaW11bS4gKi8KIAlsb25nIHJzdl9ocGFnZXM7CS8qIFBhZ2VzIHJlc2VydmVkIGFnYWluc3QgZ2xvYmFsIHBvb2wgdG8gKi8KZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA3ODU3NzI4NDU3OTUyLi5lMjRmODU2Yzk0OWMzIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC0xMzAsMTIgJiM0MzsxMzAsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc3VicG9vbF9pc19mcmVlKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCkKIHsKIAlpZiAoc3Bvb2wtJmd0O2NvdW50KQogCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xKQotCQlyZXR1cm4gc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzID09IDA7Ci0JaWYgKHNwb29sLSZndDttaW5faHBhZ2VzICE9IC0xKQotCQlyZXR1cm4gc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgPT0gc3Bvb2wtJmd0O21pbl9ocGFnZXM7CiAKLQlyZXR1cm4gdHJ1ZTsKJiM0MzsJcmV0dXJuIHNwb29sLSZndDt1c2VkX2hwYWdlcyA9PSAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCkBAIC0xOTMsMTMgJiM0MzsxODksMTggQEAgdm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpCiAJdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpOwogfQogCi0vKgotICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBhbGxvY2F0aW5nIGFuZCByZXNlcnZpbmcgcGFnZXMuCi0gKiBSZXR1cm4gLUVOT01FTSBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gc2F0aXNmeSB0aGUKLSAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZQotICogZ2xvYmFsIHBvb2xzIG11c3QgYmUgYWRqdXN0ZWQgKHVwd2FyZCkuICBUaGUgcmV0dXJuZWQgdmFsdWUgbWF5Ci0gKiBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKSBpbiB0aGUgY2FzZSB3aGVyZQotICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuCiYjNDM7LyoqCiYjNDM7ICogaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMgLSBHZXQgcGFnZXMgZnJvbSBhIHN1YnBvb2wKJiM0MzsgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKQomIzQzOyAqIEBkZWx0YTogbnVtYmVyIG9mIHBhZ2VzIHRvIGFsbG9jYXRlIG9yIHJlc2VydmUKJiM0MzsgKgomIzQzOyAqIENoZWNrIGFuZCB1cGRhdGUgc3VicG9vbCBwYWdlIHVzYWdlIGNvdW50cyB3aGVuIGFsbG9jYXRpbmcgb3IKJiM0MzsgKiByZXNlcnZpbmcgQGRlbHRhIGh1Z2VwYWdlcy4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IFRha2VzIHNwb29sLSZndDtsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnEoKS4KJiM0MzsgKiBSZXR1cm46IE5vbi1uZWdhdGl2ZSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgY2Fubm90IGJlCiYjNDM7ICogICAgICAgICBzYXRpc2ZpZWQgYnkgdGhlIHN1YnBvb2wsIG9yIC1FTk9NRU0gaWYgdGhlIHN1YnBvb2wgbWF4aW11bQomIzQzOyAqICAgICAgICAgbGltaXQgd291bGQgYmUgZXhjZWVkZWQuCiAgKi8KIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKIAkJCQkgICAgICBsb25nIGRlbHRhKQpAQCAtMjExLDE1ICYjNDM7MjEyLDE0IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKIAogCXNwaW5fbG9ja19pcnEoJmFtcDtzcG9vbC0mZ3Q7bG9jayk7CiAKLQlpZiAoc3Bvb2wtJmd0O21heF9ocGFnZXMgIT0gLTEpIHsJCS8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovCi0JCWlmICgoc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzICYjNDM7IGRlbHRhKSAmbHQ7PSBzcG9vbC0mZ3Q7bWF4X2hwYWdlcykKLQkJCXNwb29sLSZndDt1c2VkX2hwYWdlcyAmIzQzOz0gZGVsdGE7Ci0JCWVsc2UgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gdW5sb2NrX3JldDsKLQkJfQomIzQzOwlpZiAoc3Bvb2wtJmd0O21heF9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOwomIzQzOwkgICAgc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzICYjNDM7IGRlbHRhICZndDsgc3Bvb2wtJmd0O21heF9ocGFnZXMpIHsKJiM0MzsJCXJldCA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIHVubG9ja19yZXQ7CiAJfQogCiYjNDM7CXNwb29sLSZndDt1c2VkX2hwYWdlcyAmIzQzOz0gZGVsdGE7CiYjNDM7CiAJLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi8KIAlpZiAoc3Bvb2wtJmd0O21pbl9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOyBzcG9vbC0mZ3Q7cnN2X2hwYWdlcykgewogCQlpZiAoZGVsdGEgJmd0OyBzcG9vbC0mZ3Q7cnN2X2hwYWdlcykgewpAQCAtMjQwLDExICYjNDM7MjQwLDE5IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBmcmVlaW5nIGFuZCB1bnJlc2VydmluZyBwYWdlcy4KLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGdsb2JhbCBwYWdlIHJlc2VydmF0aW9ucyB0aGF0IG11c3QgYmUgZHJvcHBlZC4KLSAqIFRoZSByZXR1cm4gdmFsdWUgbWF5IG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpCi0gKiBpbiB0aGUgY2FzZSB3aGVyZSBhIHN1YnBvb2wgbWluaW11bSBzaXplIG11c3QgYmUgbWFpbnRhaW5lZC4KJiM0MzsvKioKJiM0MzsgKiBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyAtIFJlbGVhc2UgcGFnZXMgYmFjayB0byBhIHN1YnBvb2wKJiM0MzsgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKQomIzQzOyAqIEBkZWx0YTogbnVtYmVyIG9mIHBhZ2VzIHRvIGZyZWUgb3IgdW5yZXNlcnZlCiYjNDM7ICoKJiM0MzsgKiBDaGVjayBhbmQgdXBkYXRlIHN1YnBvb2wgcGFnZSB1c2FnZSBjb3VudHMgd2hlbiBmcmVlaW5nIG9yCiYjNDM7ICogdW5yZXNlcnZpbmcgQGRlbHRhIGh1Z2VwYWdlcy4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IFRha2VzIHNwb29sLSZndDtsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnFzYXZlKCkuIE1heSByZWxlYXNlCiYjNDM7ICogICAgICAgICAgYW5kIGZyZWUgQHNwb29sIGlmIGl0cyB1c2FnZSBjb3VudCBhbmQgcmVmZXJlbmNlcyByZWFjaAomIzQzOyAqICAgICAgICAgIHplcm8uCiYjNDM7ICogUmV0dXJuOiBOb24tbmVnYXRpdmUgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IHRoZSBzdWJwb29sIGNhbm5vdAomIzQzOyAqICAgICAgICAgYWJzb3JiLgogICovCiBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCiAJCQkJICAgICAgIGxvbmcgZGVsdGEpCkBAIC0yNTcsMTkgJiM0MzsyNjUsMjQgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzcG9vbC0mZ3Q7bG9jaywgZmxhZ3MpOwogCi0JaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xKQkJLyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi8KLQkJc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzIC09IGRlbHRhOwomIzQzOwlzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgLT0gZGVsdGE7CiAKIAkgLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi8KIAlpZiAoc3Bvb2wtJmd0O21pbl9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOyBzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgJmx0OyBzcG9vbC0mZ3Q7bWluX2hwYWdlcykgewotCQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0MzsgZGVsdGEgJmx0Oz0gc3Bvb2wtJmd0O21pbl9ocGFnZXMpCiYjNDM7CQkvKgomIzQzOwkJICogbGltaXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0CiYjNDM7CQkgKiBjYW4gYmUgcmVzdG9yZWQgdG8gdGhpcyBzdWJwb29sLgomIzQzOwkJICovCiYjNDM7CQlsb25nIGxpbWl0ID0gc3Bvb2wtJmd0O21pbl9ocGFnZXMgLSBzcG9vbC0mZ3Q7dXNlZF9ocGFnZXM7CiYjNDM7CiYjNDM7CQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0MzsgZGVsdGEgJmx0Oz0gbGltaXQpCiAJCQlyZXQgPSAwOwogCQllbHNlCi0JCQlyZXQgPSBzcG9vbC0mZ3Q7cnN2X2hwYWdlcyAmIzQzOyBkZWx0YSAtIHNwb29sLSZndDttaW5faHBhZ2VzOwomIzQzOwkJCXJldCA9IHNwb29sLSZndDtyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhIC0gbGltaXQ7CiAKIAkJc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0Mzs9IGRlbHRhOwotCQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJmd0OyBzcG9vbC0mZ3Q7bWluX2hwYWdlcykKLQkJCXNwb29sLSZndDtyc3ZfaHBhZ2VzID0gc3Bvb2wtJmd0O21pbl9ocGFnZXM7CiYjNDM7CQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJmd0OyBsaW1pdCkKJiM0MzsJCQlzcG9vbC0mZ3Q7cnN2X2hwYWdlcyA9IGxpbWl0OwogCX0KIAogCS8qCkBAIC0yOTQyLDcgJiM0MzsyOTU1LDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCXN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfdm1hKHZtYSk7CiAJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwotCWxvbmcgcmV0dmFsLCBnYmxfY2hnLCBnYmxfcmVzZXJ2ZTsKJiM0MzsJbG9uZyByZXR2YWwsIGdibF9yZXN2X2dldDsKIAltYXBfY2hnX3N0YXRlIG1hcF9jaGc7CiAJc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCBtcG9saTsKIAlnZnBfdCBnZnAgPSBodGxiX2FsbG9jX21hc2soaCk7CkBAIC0yOTgxLDggJiM0MzsyOTk0LDggQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCSAqIE9yIGlmIGl0IGNhbiBnZXQgb25lIGZyb20gdGhlIHBvb2wgcmVzZXJ2YXRpb24gZGlyZWN0bHkuCiAJICovCiAJaWYgKG1hcF9jaGcpIHsKLQkJZ2JsX2NoZyA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTsKLQkJaWYgKGdibF9jaGcgJmx0OyAwKSB7CiYjNDM7CQlnYmxfcmVzdl9nZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7CiYjNDM7CQlpZiAoZ2JsX3Jlc3ZfZ2V0ICZsdDsgMCkgewogCQkJcmV0ID0gLUVOT1NQQzsKIAkJCWdvdG8gb3V0X2VuZF9yZXNlcnZhdGlvbjsKIAkJfQpAQCAtMjk5MSw3ICYjNDM7MzAwNCw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJICogSWYgd2UgaGF2ZSB0aGUgdm1hIHJlc2VydmF0aW9uIHJlYWR5LCBubyBuZWVkIGZvciBleHRyYQogCQkgKiBnbG9iYWwgcmVzZXJ2YXRpb24uCiAJCSAqLwotCQlnYmxfY2hnID0gMDsKJiM0MzsJCWdibF9yZXN2X2dldCA9IDA7CiAJfQogCiAJLyoKQEAgLTMwMDIsMTAgJiM0MzszMDE1LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJYWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDsKIAogCS8qCi0JICogZ2JsX2NoZyA9PSAwIGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cyBmb3IgdGhpcwomIzQzOwkgKiBnYmxfcmVzdl9nZXQgPT0gMCBpbmRpY2F0ZXMgYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoaXMKIAkgKiBhbGxvY2F0aW9uLCBzbyB0cnkgdG8gdXNlIGl0LgogCSAqLwotCWlmIChnYmxfY2hnID09IDApCiYjNDM7CWlmIChnYmxfcmVzdl9nZXQgPT0gMCkKIAkJYWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19VU0VfR0xPQkFMX1JFU0VSVkFUSU9OUzsKIAogCS8qIFRha2VzIHJlZmVyZW5jZSBvbiBtcG9sLiAqLwpAQCAtMzA1OSwxMyAmIzQzOzMwNzIsMTAgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCXJldHVybiBmb2xpbzsKIAogb3V0X3N1YnBvb2xfcHV0OgotCS8qCi0JICogcHV0IHBhZ2UgdG8gc3VicG9vbCBpZmYgdGhlIHF1b3RhIG9mIHN1YnBvb2wmIzM5O3MgcnN2X2hwYWdlcyBpcyB1c2VkCi0JICogZHVyaW5nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLgotCSAqLwotCWlmIChtYXBfY2hnICZhbXA7JmFtcDsgIWdibF9jaGcpIHsKLQkJZ2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7Ci0JCWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTsKJiM0MzsJaWYgKG1hcF9jaGcpIHsKJiM0MzsJCWxvbmcgZ2JsX3Jlc3ZfcHV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpOwomIzQzOwomIzQzOwkJaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQpOwogCX0KIAogb3V0X2VuZF9yZXNlcnZhdGlvbjoKQEAgLTY2NjEsMTIgJiM0Mzs2NjcxLDE0IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpCiB7Ci0JbG9uZyBjaGcgPSAtMSwgYWRkID0gLTEsIHNwb29sX3Jlc3YsIGdibF9yZXN2OwomIzQzOwlsb25nIGNoZyA9IC0xLCBhZGQgPSAtMTsKIAlzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2lub2RlKGlub2RlKTsKIAlzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX2lub2RlKGlub2RlKTsKIAlzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwOwogCXN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZyA9IE5VTEw7Ci0JbG9uZyBnYmxfcmVzZXJ2ZSwgcmVnaW9uc19uZWVkZWQgPSAwOwomIzQzOwlsb25nIHJlZ2lvbnNfbmVlZGVkID0gMDsKJiM0MzsJbG9uZyBnYmxfcmVzdl9nZXQ7CiYjNDM7CWxvbmcgZ2JsX3Jlc3ZfcHV0OwogCWludCBlcnI7CiAKIAkvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KQEAgLTY3NDEsOSAmIzQzOzY3NTMsOSBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCSAqIHRoZSBzdWJwb29sIGhhcyBhIG1pbmltdW0gc2l6ZSwgdGhlcmUgbWF5IGJlIHNvbWUgZ2xvYmFsCiAJICogcmVzZXJ2YXRpb25zIGFscmVhZHkgaW4gcGxhY2UgKGdibF9yZXNlcnZlKS4KIAkgKi8KLQlnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpOwotCWlmIChnYmxfcmVzZXJ2ZSAmbHQ7IDApIHsKLQkJZXJyID0gZ2JsX3Jlc2VydmU7CiYjNDM7CWdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpOwomIzQzOwlpZiAoZ2JsX3Jlc3ZfZ2V0ICZsdDsgMCkgewomIzQzOwkJZXJyID0gZ2JsX3Jlc3ZfZ2V0OwogCQlnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXA7CiAJfQogCkBAIC02NzUxLDcgJiM0Mzs2NzYzLDcgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwKIAkgKiBDaGVjayBlbm91Z2ggaHVnZXBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSByZXNlcnZhdGlvbi4KIAkgKiBIYW5kIHRoZSBwYWdlcyBiYWNrIHRvIHRoZSBzdWJwb29sIGlmIHRoZXJlIGFyZSBub3QKIAkgKi8KLQllcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXNlcnZlKTsKJiM0MzsJZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQpOwogCWlmIChlcnIgJmx0OyAwKQogCQlnb3RvIG91dF9wdXRfcGFnZXM7CiAKQEAgLTY3NzAsNyAmIzQzOzY3ODIsNyBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQlhZGQgPSByZWdpb25fYWRkKHJlc3ZfbWFwLCBmcm9tLCB0bywgcmVnaW9uc19uZWVkZWQsIGgsIGhfY2cpOwogCiAJCWlmICh1bmxpa2VseShhZGQgJmx0OyAwKSkgewotCQkJaHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpOwomIzQzOwkJCWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXN2X2dldCk7CiAJCQllcnIgPSBhZGQ7CiAJCQlnb3RvIG91dF9wdXRfcGFnZXM7CiAJCX0gZWxzZSBpZiAodW5saWtlbHkoY2hnICZndDsgYWRkKSkgewpAQCAtNjgwNiwyNiAmIzQzOzY4MTgsMjEgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwKIAl9CiAJcmV0dXJuIGNoZzsKIAotb3V0X3B1dF9wYWdlczoKLQlzcG9vbF9yZXN2ID0gY2hnIC0gZ2JsX3Jlc2VydmU7Ci0JaWYgKHNwb29sX3Jlc3YpIHsKLQkJLyogcHV0IHN1YiBwb29sJiMzOTtzIHJlc2VydmF0aW9uIGJhY2ssIGNoZyAtIGdibF9yZXNlcnZlICovCi0JCWdibF9yZXN2ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHNwb29sX3Jlc3YpOwotCQkvKgotCQkgKiBzdWJwb29sJiMzOTtzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsCi0JCSAqIHJldHVybiB0byBoc3RhdGUuCi0JCSAqLwotCQlodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7Ci0JfQotCS8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqLwotCWlmIChnYmxfcmVzZXJ2ZSAmYW1wOyZhbXA7IHNwb29sKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7IG91dF9wdXRfcGFnZXM6CiYjNDM7CS8qCiYjNDM7CSAqIFJldHVybiBhbGwgdGhhdCB3YXMgcmVxdWVzdGVkIGZyb20gdGhlIHN1YnBvb2wsIGxldCBzdWJwb29sCiYjNDM7CSAqIHRlbGwgdXMgdGhlIG5ldyBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgbmVlZCB0byBiZQomIzQzOwkgKiByZXR1cm5lZCB0byB0aGUgZ2xvYmFsIHBvb2wuCiYjNDM7CSAqLwomIzQzOwlnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgY2hnKTsKJiM0MzsJLyoKJiM0MzsJICogVGhlcmUgbWF5IGJlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBudW1iZXIgb2YKJiM0MzsJICogcmVzZXJ2YXRpb25zIHRvIGNvbnN1bWUgYW5kIHRoZSBudW1iZXIgdG8gcmVzdG9yZSBub3cgaWYKJiM0MzsJICogdGhlcmUgYXJlIG11bHRpcGxlIHRocmVhZHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3VicG9vbCAtCiYjNDM7CSAqIHJlc3RvcmUgdGhlIGRpZmZlcmVuY2UuCiYjNDM7CSAqLwomIzQzOwlodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCAtIGdibF9yZXN2X3B1dCk7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzcG9vbC0mZ3Q7bG9jaywgZmxhZ3MpOwotCQlpZiAoc3Bvb2wtJmd0O21heF9ocGFnZXMgIT0gLTEpCi0JCQlzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgLT0gZ2JsX3Jlc2VydmU7Ci0JCXVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTsKLQl9CiBvdXRfdW5jaGFyZ2VfY2dyb3VwOgogCWh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSwKIAkJCQkJICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODA5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHVnZXRsYmZzIFN1YnBvb2wgQWNjb3VudGluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIHdpdGhpbiB0aGUgaHVnZXRsYmZzL2h1Z2V0bGIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIGFjcm9zcyBhIGZldyBrZXkgYXJlYXM6IHRoZSBkb2N1bWVudGF0aW9uLCB0aGUgaW5vZGUgaW1wbGVtZW50YXRpb24sIGFuZCB0aGUgY29yZSBpbmNsdWRlIGFuZCBtbSBmaWxlcy4gVGhhdCBtYWtlcyBtZSB0YWtlIGl0IHNlcmlvdXNseS4KCkZpcnN0LCBJJiMzOTtsbCB6ZXJvIGluIG9uIHRoZSBtb2RpZmllZCBmaWxlcy4gSSYjMzk7bSBmb2N1c2luZyBvbiBgbW0vaHVnZXRsYi5jYCwgYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAgYXMgdGhleSBhcmUgdGhlIG1lYXQgb2YgdGhpcy4gVGhlIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW1wb3J0YW50LCBidXQgdW5kZXJzdGFuZGluZyB0aGUgKmZ1bmN0aW9uYWxpdHkqIGNoYW5nZSBpcyBjcml0aWNhbC4KClJpZ2h0IGF3YXksIEkgc2VlIHRoaXMgcmV2b2x2ZXMgYXJvdW5kIHN1YnBvb2wgYWNjb3VudGluZy4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUgZm9yIGh1Z2V0bGJmcy4gSXQgc2VlbXMgdGhlIHBhdGNoIGlzIGFsdGVyaW5nIHRoZSBsb2dpYyBmb3IgaG93IHdlIHRyYWNrIGFuZCBtYW5hZ2UgaHVnZXBhZ2VzIHdpdGhpbiB0aGVzZSBzdWJwb29scy4KClNwZWNpZmljYWxseSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGp1bXBpbmcgb3V0IGF0IG1lOgoKKiAgICoqYHN1YnBvb2xfaXNfZnJlZWAqKjogVGhpcyBpcyBpbnRlcmVzdGluZy4gVGhlIGNoZWNrIGlzIG5vdyBqdXN0IGB1c2VkX2hwYWdlcyA9PSAwYCwgYSBzaW1wbGlmaWNhdGlvbi4gVGhpcyBtYWtlcyBtZSBjb25zaWRlciBpZiB0aGVyZSBpcyBhIHVzZSBjYXNlIHRoYXQgY2F1c2VzIHRoaXMgY2hhbmdlLCBhbmQgd2hhdCB0aGUgZWZmZWN0IHdpbGwgYmUuCiogICAqKmBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AqKjogSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYWx3YXlzIGluY3JlbWVudGluZyBgdXNlZF9ocGFnZXNgIG5vdywgZXZlbiB3aGVuIGBtYXhfaHBhZ2VzYCBpcyAtMS4gVGhhdCBzdWdnZXN0cyBhIHBvc3NpYmxlIGNoYW5nZSBpbiBob3cgd2UgaGFuZGxlIHVuYm91bmRlZCBzdWJwb29scy4KKiAgICoqYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCoqOiBUaGUgZGVjcmVtZW50IGlzIGFsd2F5cyBoYXBwZW5pbmcsIGFuZCB0aGUgbWluaW11bSBzaXplIGFjY291bnRpbmcgbG9naWMgYXBwZWFycyB0byBiZSByZXdvcmtlZC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgY291bGQgaW50cm9kdWNlIHN1YnRsZSBiZWhhdmlvcmFsIGNoYW5nZXMgdGhhdCBtdXN0IGJlIGNhcmVmdWxseSBzY3J1dGluaXplZC4KKiAgICoqYGFsbG9jX2h1Z2V0bGJfZm9saW9gICZhbXA7IGBodWdldGxiX3Jlc2VydmVfcGFnZXNgKio6IEVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBhY2NvdW50aW5nIGFyZSBtb2RpZmllZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjaGFuZ2VzIHRvIGBodWdldGxiX2FjY3RfbWVtb3J5YCBhZmZlY3Qgb3ZlcmFsbCBtZW1vcnkgdXNhZ2UgdHJhY2tpbmcgYW5kIHBvdGVudGlhbCByZXNvdXJjZSBsZWFrcy4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UgYXJlIGhhbmRsaW5nIGVycm9ycyBjb3JyZWN0bHkgaGVyZSBhbmQgYXJlIG5vdCBpbnRyb2R1Y2luZyBuZXcgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uIHBvc3NpYmlsaXRpZXMuCiogICAqKmBodWdldGxiZnNfc3RhdGZzYCoqOiBUaGUgY2hlY2sgZm9yIGBtYXhfaHBhZ2VzID09IC0xYCBhbmQgc2V0dGluZyBgZnJlZV9wYWdlcyA9IC0xYCBtYWtlcyBzZW5zZSBmb3IgYW4gdW5ib3VuZGVkIHBvb2wuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY29kZSBpcyBpbiBhIGhvdCBwYXRoLiBBbmQgZnJvbSBteSBleHBlcmllbmNlLCB0aGUgYW5zd2VyIGlzICp5ZXMqLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGludm9sdmVkIGluIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIHRocm91Z2ggc3lzY2FsbHMgbGlrZSBgbW1hcGAgd2l0aCBgTUFQX0hVR0VUTEJgLCBtYW5hZ2luZyBodWdldGxiZnMgbW91bnRzLCBmaWxlIG9wZXJhdGlvbnMsIG1hZHZpc2UsIGZhbGxvY2F0ZSwgYW5kIGBzdGF0ZnNgLiBBbnkgc3VidGxlIGNoYW5nZSBpbiB0aGlzIGFyZWEgY2FuIGhhdmUgd2lkZXNwcmVhZCBjb25zZXF1ZW5jZXMgYW5kIG5lZWRzIHRob3JvdWdoIHJldmlldy4KCkkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBLY29uZmlnIG9wdGlvbnMgYXJlIGVuYWJsZWQgKGUuZy4sIGBDT05GSUdfSFVHRVRMQkZTYCwgYENPTkZJR19IVUdFVExCX1BBR0VgLCBldGMuKSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuIFRpbWUgdG8gYGdyZXBwZXJgIG9yIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIGdvaW5nIHRvIGJlIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2h1Z2V0bGJmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgS2NvbmZpZyBGaWxlcyBmb3IgSHVnZVRMQiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIEh1Z2VUTEIgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgZmlyc3QgcGxhY2VzIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhcmUsIG5hdHVyYWxseSwgYGZzL2h1Z2V0bGJmcy9LY29uZmlnYCBhbmQgYG1tL0tjb25maWdgLiBJdOKAmXMgYSBwcmV0dHkgc3RhbmRhcmQgYXBwcm9hY2gsIHJlYWxseSwgYnV0IGl0JiMzOTtzIHRoZSByaWdodCBzdGFydGluZyBwb2ludC4gYGZzL2h1Z2V0bGJmc2AgKnNob3VsZCogY29udGFpbiB0aGUgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGUgZmlsZXN5c3RlbSBpdHNlbGYsIHByb2JhYmx5IHJlbGF0ZWQgdG8gaXRzIG1vdW50IG9wdGlvbnMsIHF1b3RhIHN1cHBvcnQsIGFuZCBtYXliZSBzb21lIHBhZ2UgYWxsb2NhdGlvbiBkZXRhaWxzIHRpZWQgdG8gdGhlIFZGUyBsYXllci4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzZXR0aW5ncyBsaWtlIHRoZSBkZWZhdWx0IGh1Z2VwYWdlIHNpemUsIHdoZXRoZXIgaHVnZXRsYmZzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIHBlcmhhcHMgc29tZSBmaW5lLWdyYWluZWQgY29udHJvbHMgb3ZlciBmZWF0dXJlcy4KCk9uIHRoZSBvdGhlciBoYW5kLCBgbW0vS2NvbmZpZ2AgaXMgd2hlcmUgSSYjMzk7ZCBhbnRpY2lwYXRlIHRoZSBtb3JlIGZ1bmRhbWVudGFsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIHRoaW5raW5nIHNldHRpbmdzIGRlYWxpbmcgd2l0aCB0aGUgTlVNQSBhZmZpbml0eSBvZiBodWdlcGFnZXMsIHRoZSBvdmVyYWxsIGFsbG9jYXRpb24gcG9saWNpZXMsIGFuZCB0aGUgbWF4aW11bSBzaXplcyBhdmFpbGFibGUuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoZXJl4oCZbGwgYmUgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBjb3JlIGtlcm5lbCBpbmZyYXN0cnVjdHVyZSBmb3IgbWFuYWdpbmcgaHVnZSBwYWdlcyBhbmQgd2hldGhlciBodWdlcGFnZSBzdXBwb3J0IGlzIGV2ZW4gY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJdOKAmXMgYWxzbyBwb3NzaWJsZSB0aGF0IHRoZXJlIGFyZSBzb21lIGNyb3NzLXJlZmVyZW5jZXMgYmV0d2VlbiB0aGUgdHdvIEtjb25maWcgZmlsZXM7IHRoZSBmaWxlc3lzdGVtLXNwZWNpZmljIG9wdGlvbnMgbWlnaHQgZGVwZW5kIG9uIG9yIGludGVyYWN0IHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMgZGVmaW5lZCBpbiBgbW0vS2NvbmZpZ2AuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIGV4YWN0bHkgaG93IHRoZXNlIG9wdGlvbnMgYXJlIHN0cnVjdHVyZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0LiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgcGFyYW1ldGVycyB0aGF0IGNvbnRyb2wgSHVnZVRMQiBiZWhhdmlvciwgcGFydGljdWxhcmx5IHRob3NlIGltcGFjdGluZyBwZXJmb3JtYW5jZSBhbmQgcmVzb3VyY2UgdXRpbGl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtIVUdFVExCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaHVnZXRsYmZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1ODMKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLCB1c2luZyB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwmIzM5O3MgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIHRvIHR3ZWFrIHNvbWV0aGluZywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGl2ZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBrbm9icyBhcmUgZGVmaW5lZCwgcmlnaHQ/IEdpdmVuIHRoZSBnZW5lcmFsIGFyZWEgSSYjMzk7bSB3b3JraW5nIGluLCBteSBpbnN0aW5jdCBpcyB0byBuYXJyb3cgdGhlIHNlYXJjaC4gSSYjMzk7bSB0aGlua2luZyBlaXRoZXIgdGhlIGBmcy9gIGRpcmVjdG9yeSwgd2hpY2ggY292ZXJzIGFsbCB0aGUgZmlsZXN5c3RlbXMsIG9yIHRoZSBgbW0vYCBkaXJlY3RvcnksIHdoaWNoIGVuY29tcGFzc2VzIGFsbCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0cy4gVGhvc2UgYXJlIHRoZSB0d28gbW9zdCBsaWtlbHkgcGxhY2VzIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJJiMzOTttIGludGVyZXN0ZWQgaW4sIGJhc2VkIG9uIHRoZSBwcm9ibGVtIEkgYW0gd29ya2luZyBvbi4gTm93LCBsZXQmIzM5O3Mgc2VlIHdoaWNoIGlzIHRoZSBjb3JyZWN0IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNTA9bWVudWNvbmZpZyBIVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI1NS1cdGhlbHBcbmZzL0tjb25maWc6MjU2Olx0ICBodWdldGxiZnMgaXMgYSBmaWxlc3lzdGVtIGJhY2tpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGJhc2VkIG9uXG5mcy9LY29uZmlnLTI1Ny1cdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxuLS1cbmZzL01ha2VmaWxlPTczPW9iai15XHRcdFx0XHQmIzQzOz0gcmFtZnMvXG5mcy9NYWtlZmlsZTo3NDpvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0XHQmIzQzOz0gaHVnZXRsYmZzL1xuZnMvTWFrZWZpbGUtNzUtb2JqLSQoQ09ORklHX0NPREFfRlMpXHRcdCYjNDM7PSBjb2RhL1xuLS1cbmZzL2h1Z2V0bGJmcy9NYWtlZmlsZS01LVxuZnMvaHVnZXRsYmZzL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0hVR0VUTEJGUykgJiM0Mzs9IGh1Z2V0bGJmcy5vXG5mcy9odWdldGxiZnMvTWFrZWZpbGUtNy1cbmZzL2h1Z2V0bGJmcy9NYWtlZmlsZTo4Omh1Z2V0bGJmcy1vYmpzIDo9IGlub2RlLm9cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy00Mi0jZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQzOiNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9odWdldGxiZnMuaFx1MDAzZVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDQtXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NTpzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBodWdldGxiZnNfYW9wcztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQ2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NzpzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDg6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDktXG5mcy9odWdldGxiZnMvaW5vZGUuYzo1MDplbnVtIGh1Z2V0bGJmc19zaXplX3R5cGUgeyBOT19TSVpFLCBTSVpFX1NURCwgU0laRV9QRVJDRU5UIH07XG5mcy9odWdldGxiZnMvaW5vZGUuYy01MS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjUyOnN0cnVjdCBodWdldGxiZnNfZnNfY29udGV4dCB7XG5mcy9odWdldGxiZnMvaW5vZGUuYy01My1cdHN0cnVjdCBoc3RhdGVcdFx0KmhzdGF0ZTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy01OC1cdGxvbmdcdFx0XHRtaW5faHBhZ2VzO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6NTk6XHRlbnVtIGh1Z2V0bGJmc19zaXplX3R5cGUgbWF4X3ZhbF90eXBlO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6NjA6XHRlbnVtIGh1Z2V0bGJmc19zaXplX3R5cGUgbWluX3ZhbF90eXBlO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjEtXHRrdWlkX3RcdFx0XHR1aWQ7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBodWdldGxiX2ZzX3BhcmFtZXRlcnNbXSA9IHtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy05OC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk5OnN0YXRpYyBpbnQgaHVnZXRsYmZzX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDAte1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0Ni1cdCAqIGZvciBTSE1fSFVHRVRMQiwgdGhlIHBhZ2VzIGFyZSByZXNlcnZlZCBpbiB0aGUgc2htZ2V0KCkgY2FsbCBzbyBza2lwXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDc6XHQgKiByZXNlcnZpbmcgaGVyZS4gTm90ZTogb25seSBmb3IgU0hNIGh1Z2V0bGJmcyBmaWxlLCB0aGUgaW5vZGVcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0OC1cdCAqIGZsYWcgU19QUklWQVRFIGlzIHNldC5cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xOTY9c3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0yMTktICovXG5mcy9odWdldGxiZnMvaW5vZGUuYzoyMjA6c3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG5mcy9odWdldGxiZnMvaW5vZGUuYy0yMjEte1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTI5Ny1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjI5ODpzdGF0aWMgaW50IGh1Z2V0bGJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0yOTktXHRcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMzA1LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MzA2OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3dyaXRlX2VuZChjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0zMDctXHRcdFx0ICAgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTU1Mj1zdGF0aWMgdm9pZCByZW1vdmVfaW5vZGVfaHVnZXBhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTkyLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NTkzOnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTk0LXtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy01OTYtXG5mcy9odWdldGxiZnMvaW5vZGUuYzo1OTc6XHR0cmFjZV9odWdldGxiZnNfZXZpY3RfaW5vZGUoaW5vZGUpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTk4LVx0cmVtb3ZlX2lub2RlX2h1Z2VwYWdlcyhpbm9kZSwgMCwgTExPTkdfTUFYKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz02MDc9c3RhdGljIHZvaWQgaHVnZXRsYl92bXRydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQpXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjIzLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NjI0OnN0YXRpYyB2b2lkIGh1Z2V0bGJmc196ZXJvX3BhcnRpYWxfcGFnZShzdHJ1Y3QgaHN0YXRlICpoLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjI1LVx0XHRcdFx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy02NDYtXG5mcy9odWdldGxiZnMvaW5vZGUuYzo2NDc6c3RhdGljIGxvbmcgaHVnZXRsYmZzX3B1bmNoX2hvbGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY0OC17XG5mcy9odWdldGxiZnMvaW5vZGUuYzo2NDk6XHRzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKmluZm8gPSBIVUdFVExCRlNfSShpbm9kZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy02NTAtXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVx1MDAzZWlfbWFwcGluZztcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy02NzItXHRpZiAob2Zmc2V0IFx1MDAzYyBob2xlX3N0YXJ0KVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NjczOlx0XHRodWdldGxiZnNfemVyb19wYXJ0aWFsX3BhZ2UoaCwgbWFwcGluZyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY3NC1cdFx0XHRcdG9mZnNldCwgbWluKG9mZnNldCAmIzQzOyBsZW4sIGhvbGVfc3RhcnQpKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy02ODUtXHRpZiAoKG9mZnNldCAmIzQzOyBsZW4pIFx1MDAzZSBob2xlX2VuZCBcdTAwMjZcdTAwMjYgKG9mZnNldCAmIzQzOyBsZW4pIFx1MDAzZSBob2xlX3N0YXJ0KVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6Njg2Olx0XHRodWdldGxiZnNfemVyb19wYXJ0aWFsX3BhZ2UoaCwgbWFwcGluZyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY4Ny1cdFx0XHRcdGhvbGVfZW5kLCBvZmZzZXQgJiM0MzsgbGVuKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy02OTktXG5mcy9odWdldGxiZnMvaW5vZGUuYzo3MDA6c3RhdGljIGxvbmcgaHVnZXRsYmZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXG5mcy9odWdldGxiZnMvaW5vZGUuYy03MDEtXHRcdFx0XHRsb2ZmX3QgbGVuKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTcwMy1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6NzA0Olx0c3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvICppbmZvID0gSFVHRVRMQkZTX0koaW5vZGUpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzA1LVx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cdTAwM2VpX21hcHBpbmc7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzE4LVx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo3MTk6XHRcdGVycm9yID0gaHVnZXRsYmZzX3B1bmNoX2hvbGUoaW5vZGUsIG9mZnNldCwgbGVuKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTcyMC1cdFx0Z290byBvdXRfbm9sb2NrO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgyNi1vdXRfbm9sb2NrOlxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODI3Olx0dHJhY2VfaHVnZXRsYmZzX2ZhbGxvY2F0ZShpbm9kZSwgbW9kZSwgb2Zmc2V0LCBsZW4sIGVycm9yKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgyOC1cdHJldHVybiBlcnJvcjtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MzAtXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4MzE6c3RhdGljIGludCBodWdldGxiZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgzMi1cdFx0XHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgzNy1cdHVuc2lnbmVkIGludCBpYV92YWxpZCA9IGF0dHItXHUwMDNlaWFfdmFsaWQ7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo4Mzg6XHRzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKmluZm8gPSBIVUdFVExCRlNfSShpbm9kZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy04MzktXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODQzLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODQ0Olx0dHJhY2VfaHVnZXRsYmZzX3NldGF0dHIoaW5vZGUsIGRlbnRyeSwgYXR0cik7XG5mcy9odWdldGxiZnMvaW5vZGUuYy04NDUtXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODYzLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODY0OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODY1Olx0XHRcdFx0XHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eClcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg2Ni17XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODc1LVx0XHRzaW1wbGVfaW5vZGVfaW5pdF90cyhpbm9kZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo4NzY6XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XG5mcy9odWdldGxiZnMvaW5vZGUuYy04NzctXHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2c2ltcGxlX2Rpcl9vcGVyYXRpb25zO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg5MS0gKi9cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjg5MjpzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGh1Z2V0bGJmc19pX21tYXBfcndzZW1fa2V5O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtODkzLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODk0OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg5NS1cdFx0XHRcdFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTEzLVx0aWYgKGlub2RlKSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo5MTQ6XHRcdHN0cnVjdCBodWdldGxiZnNfaW5vZGVfaW5mbyAqaW5mbyA9IEhVR0VUTEJGU19JKGlub2RlKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkxNS1cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy05MTgtXHRcdGxvY2tkZXBfc2V0X2NsYXNzKFx1MDAyNmlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VpX21tYXBfcndzZW0sXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5MTk6XHRcdFx0XHRcdTAwMjZodWdldGxiZnNfaV9tbWFwX3J3c2VtX2tleSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo5MjA6XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmh1Z2V0bGJmc19hb3BzO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTIxLVx0XHRzaW1wbGVfaW5vZGVfaW5pdF90cyhpbm9kZSk7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTI4LVx0XHRjYXNlIFNfSUZSRUc6XG5mcy9odWdldGxiZnMvaW5vZGUuYzo5Mjk6XHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTMwOlx0XHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkzMS1cdFx0XHRicmVhaztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkzMi1cdFx0Y2FzZSBTX0lGRElSOlxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTMzOlx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XG5mcy9odWdldGxiZnMvaW5vZGUuYy05MzQtXHRcdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZzaW1wbGVfZGlyX29wZXJhdGlvbnM7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTQ0LVx0XHRsb2NrZGVwX2Fubm90YXRlX2lub2RlX211dGV4X2tleShpbm9kZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo5NDU6XHRcdHRyYWNlX2h1Z2V0bGJmc19hbGxvY19pbm9kZShpbm9kZSwgZGlyLCBtb2RlKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk0Ni1cdH0gZWxzZSB7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTU2LSAqL1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTU3OnN0YXRpYyBpbnQgaHVnZXRsYmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk1OC1cdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk2MS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk2MjpcdGlub2RlID0gaHVnZXRsYmZzX2dldF9pbm9kZShkaXItXHUwMDNlaV9zYiwgaWRtYXAsIGRpciwgbW9kZSwgZGV2KTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk2My1cdGlmICghaW5vZGUpXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTY5LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTcwOnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpodWdldGxiZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTcxLVx0XHRcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NzIte1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTczOlx0aW50IHJldHZhbCA9IGh1Z2V0bGJmc19ta25vZChpZG1hcCwgZGlyLCBkZW50cnksXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NzQtXHRcdFx0XHQgICAgIG1vZGUsIDApO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk3OS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk4MDpzdGF0aWMgaW50IGh1Z2V0bGJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9odWdldGxiZnMvaW5vZGUuYy05ODEtXHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTgzLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk4NDpcdHJldHVybiBodWdldGxiZnNfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy05ODUtfVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTg2LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTg3OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9odWdldGxiZnMvaW5vZGUuYy05ODgtXHRcdFx0ICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTkyLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTkzOlx0aW5vZGUgPSBodWdldGxiZnNfZ2V0X2lub2RlKGRpci1cdTAwM2VpX3NiLCBpZG1hcCwgZGlyLCBtb2RlIHwgU19JRlJFRywgMCk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy05OTQtXHRpZiAoIWlub2RlKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMDAtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDAxOnN0YXRpYyBpbnQgaHVnZXRsYmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDAyLVx0XHRcdCAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDA4LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTAwOTpcdGlub2RlID0gaHVnZXRsYmZzX2dldF9pbm9kZShkaXItXHUwMDNlaV9zYiwgaWRtYXAsIGRpciwgbW9kZSwgMCk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDEwLVx0aWYgKGlub2RlKSB7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTAyMy0jaWZkZWYgQ09ORklHX01JR1JBVElPTlxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTAyNDpzdGF0aWMgaW50IGh1Z2V0bGJmc19taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTAyNS1cdFx0XHRcdHN0cnVjdCBmb2xpbyAqZHN0LCBzdHJ1Y3QgZm9saW8gKnNyYyxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDQ0LSNlbHNlXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDQ1OiNkZWZpbmUgaHVnZXRsYmZzX21pZ3JhdGVfZm9saW8gTlVMTFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA0Ni0jZW5kaWZcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNDctXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDQ4OnN0YXRpYyBpbnQgaHVnZXRsYmZzX2Vycm9yX3JlbW92ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNDktXHRcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNTYtICovXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDU3OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDU4LXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNTk6XHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbyA9IEhVR0VUTEJGU19TQihyb290LVx1MDAzZWRfc2IpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA2MC1cdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHNiaW5mby1cdTAwM2VzcG9vbDtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDkzLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTA5NDpzdGF0aWMgaW50IGh1Z2V0bGJmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA5NS17XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDk2Olx0c3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8gPSBIVUdFVExCRlNfU0IoZGVudHJ5LVx1MDAzZWRfc2IpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA5Ny1cdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfaW5vZGUoZF9pbm9kZShkZW50cnkpKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTI4LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTEyOTpzdGF0aWMgdm9pZCBodWdldGxiZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTMwLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExMzE6XHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaSA9IEhVR0VUTEJGU19TQihzYik7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTMyLVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExNDEtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTQyOnN0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJmc19kZWNfZnJlZV9pbm9kZXMoc3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8pXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTQzLXtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTU2LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE1NzpzdGF0aWMgdm9pZCBodWdldGxiZnNfaW5jX2ZyZWVfaW5vZGVzKHN0cnVjdCBodWdldGxiZnNfc2JfaW5mbyAqc2JpbmZvKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE1OC17XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE2Ni1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNjc6c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpodWdldGxiZnNfaW5vZGVfY2FjaGVwO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE2OC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNjk6c3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTcwLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzE6XHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbyA9IEhVR0VUTEJGU19TQihzYik7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTcyOlx0c3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvICpwO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE3My1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzQ6XHRpZiAodW5saWtlbHkoIWh1Z2V0bGJmc19kZWNfZnJlZV9pbm9kZXMoc2JpbmZvKSkpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTc1LVx0XHRyZXR1cm4gTlVMTDtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzY6XHRwID0gYWxsb2NfaW5vZGVfc2Ioc2IsIGh1Z2V0bGJmc19pbm9kZV9jYWNoZXAsIEdGUF9LRVJORUwpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE3Ny1cdGlmICh1bmxpa2VseSghcCkpIHtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzg6XHRcdGh1Z2V0bGJmc19pbmNfZnJlZV9pbm9kZXMoc2JpbmZvKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExNzktXHRcdHJldHVybiBOVUxMO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExODMtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTg0OnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTg1LXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExODY6XHR0cmFjZV9odWdldGxiZnNfZnJlZV9pbm9kZShpbm9kZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTg3Olx0a21lbV9jYWNoZV9mcmVlKGh1Z2V0bGJmc19pbm9kZV9jYWNoZXAsIEhVR0VUTEJGU19JKGlub2RlKSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTg4LX1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExODktXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTkwOnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTkxLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExOTI6XHRodWdldGxiZnNfaW5jX2ZyZWVfaW5vZGVzKEhVR0VUTEJGU19TQihpbm9kZS1cdTAwM2VpX3NiKSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTkzLX1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExOTQtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTk1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19hb3BzID0ge1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE5NjpcdC53cml0ZV9iZWdpblx0PSBodWdldGxiZnNfd3JpdGVfYmVnaW4sXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTk3Olx0LndyaXRlX2VuZFx0PSBodWdldGxiZnNfd3JpdGVfZW5kLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE5OC1cdC5kaXJ0eV9mb2xpb1x0PSBub29wX2RpcnR5X2ZvbGlvLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE5OTpcdC5taWdyYXRlX2ZvbGlvICA9IGh1Z2V0bGJmc19taWdyYXRlX2ZvbGlvLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIwMDpcdC5lcnJvcl9yZW1vdmVfZm9saW9cdD0gaHVnZXRsYmZzX2Vycm9yX3JlbW92ZV9mb2xpbyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMDEtfTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMjA0PXN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjA1LXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMDY6XHRzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKmVpID0gZm9vO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIwNy1cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjEwLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIxMTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zID0ge1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIxMjpcdC5yZWFkX2l0ZXJcdFx0PSBodWdldGxiZnNfcmVhZF9pdGVyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIxMzpcdC5tbWFwXHRcdFx0PSBodWdldGxiZnNfZmlsZV9tbWFwLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIxNC1cdC5mc3luY1x0XHRcdD0gbm9vcF9mc3luYyxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjE2LVx0Lmxsc2Vla1x0XHRcdD0gZGVmYXVsdF9sbHNlZWssXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjE3Olx0LmZhbGxvY2F0ZVx0XHQ9IGh1Z2V0bGJmc19mYWxsb2NhdGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjE4LVx0LmZvcF9mbGFnc1x0XHQ9IEZPUF9IVUdFX1BBR0VTLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMjAtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjIxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjIyOlx0LmNyZWF0ZVx0XHQ9IGh1Z2V0bGJmc19jcmVhdGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjIzLVx0Lmxvb2t1cFx0XHQ9IHNpbXBsZV9sb29rdXAsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIyNS1cdC51bmxpbmtcdFx0PSBzaW1wbGVfdW5saW5rLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIyNjpcdC5zeW1saW5rXHQ9IGh1Z2V0bGJmc19zeW1saW5rLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIyNzpcdC5ta2Rpclx0XHQ9IGh1Z2V0bGJmc19ta2RpcixcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMjgtXHQucm1kaXJcdFx0PSBzaW1wbGVfcm1kaXIsXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjI5Olx0Lm1rbm9kXHRcdD0gaHVnZXRsYmZzX21rbm9kLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzMC1cdC5yZW5hbWVcdFx0PSBzaW1wbGVfcmVuYW1lLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIzMTpcdC5zZXRhdHRyXHQ9IGh1Z2V0bGJmc19zZXRhdHRyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIzMjpcdC50bXBmaWxlXHQ9IGh1Z2V0bGJmc190bXBmaWxlLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzMy19O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzNC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMzU6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zID0ge1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIzNjpcdC5zZXRhdHRyXHQ9IGh1Z2V0bGJmc19zZXRhdHRyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzNy19O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzOC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMzk6c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGh1Z2V0bGJmc19vcHMgPSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQwOlx0LmFsbG9jX2lub2RlICAgID0gaHVnZXRsYmZzX2FsbG9jX2lub2RlLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0MTpcdC5mcmVlX2lub2RlICAgICA9IGh1Z2V0bGJmc19mcmVlX2lub2RlLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0MjpcdC5kZXN0cm95X2lub2RlICA9IGh1Z2V0bGJmc19kZXN0cm95X2lub2RlLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0MzpcdC5ldmljdF9pbm9kZVx0PSBodWdldGxiZnNfZXZpY3RfaW5vZGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQ0Olx0LnN0YXRmc1x0XHQ9IGh1Z2V0bGJmc19zdGF0ZnMsXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQ1Olx0LnB1dF9zdXBlclx0PSBodWdldGxiZnNfcHV0X3N1cGVyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0NjpcdC5zaG93X29wdGlvbnNcdD0gaHVnZXRsYmZzX3Nob3dfb3B0aW9ucyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyNDctfTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMjU0PXN0YXRpYyBsb25nXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjU1Omh1Z2V0bGJmc19zaXplX3RvX2hwYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZV9vcHQsXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjU2Olx0XHRcdCBlbnVtIGh1Z2V0bGJmc19zaXplX3R5cGUgdmFsX3R5cGUpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjU3LXtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjczLSAqL1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI3NDpzdGF0aWMgaW50IGh1Z2V0bGJmc19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTI3NS17XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjc2Olx0c3RydWN0IGh1Z2V0bGJmc19mc19jb250ZXh0ICpjdHggPSBmYy1cdTAwM2Vmc19wcml2YXRlO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTI3Ny1cdHN0cnVjdCBmc19wYXJzZV9yZXN1bHQgcmVzdWx0O1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNDgtICovXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzQ5OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3ZhbGlkYXRlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNTAte1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTM1MTpcdHN0cnVjdCBodWdldGxiZnNfZnNfY29udGV4dCAqY3R4ID0gZmMtXHUwMDNlZnNfcHJpdmF0ZTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNTItXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTM1Ni1cdCAqL1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTM1NzpcdGN0eC1cdTAwM2VtYXhfaHBhZ2VzID0gaHVnZXRsYmZzX3NpemVfdG9faHBhZ2VzKGN0eC1cdTAwM2Voc3RhdGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzU4LVx0XHRcdFx0XHRcdCAgIGN0eC1cdTAwM2VtYXhfc2l6ZV9vcHQsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzU5LVx0XHRcdFx0XHRcdCAgIGN0eC1cdTAwM2VtYXhfdmFsX3R5cGUpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTM2MDpcdGN0eC1cdTAwM2VtaW5faHBhZ2VzID0gaHVnZXRsYmZzX3NpemVfdG9faHBhZ2VzKGN0eC1cdTAwM2Voc3RhdGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzYxLVx0XHRcdFx0XHRcdCAgIGN0eC1cdTAwM2VtaW5fc2l6ZV9vcHQsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTM3Nj1zdGF0aWMgaW50XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzc3Omh1Z2V0bGJmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNzgte1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTM3OTpcdHN0cnVjdCBodWdldGxiZnNfZnNfY29udGV4dCAqY3R4ID0gZmMtXHUwMDNlZnNfcHJpdmF0ZTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEzODA6XHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzODEtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzgyOlx0c2JpbmZvID0ga21hbGxvY19vYmooc3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzODMtXHRpZiAoIXNiaW5mbylcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDEwLVx0c2ItXHUwMDNlc19tYWdpYyA9IEhVR0VUTEJGU19NQUdJQztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0MTE6XHRzYi1cdTAwM2VzX29wID0gXHUwMDI2aHVnZXRsYmZzX29wcztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MTItXHRzYi1cdTAwM2VzX2RfZmxhZ3MgPSBEQ0FDSEVfRE9OVENBQ0hFO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MTUtXHQvKlxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQxNjpcdCAqIER1ZSB0byB0aGUgc3BlY2lhbCBhbmQgbGltaXRlZCBmdW5jdGlvbmFsaXR5IG9mIGh1Z2V0bGJmcywgaXQgZG9lc1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQxNy1cdCAqIG5vdCB3b3JrIHdlbGwgYXMgYSBzdGFja2luZyBmaWxlc3lzdGVtLlxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MTktXHRzYi1cdTAwM2VzX3N0YWNrX2RlcHRoID0gRklMRVNZU1RFTV9NQVhfU1RBQ0tfREVQVEg7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDIwOlx0c2ItXHUwMDNlc19yb290ID0gZF9tYWtlX3Jvb3QoaHVnZXRsYmZzX2dldF9yb290KHNiLCBjdHgpKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MjEtXHRpZiAoIXNiLVx1MDAzZXNfcm9vdClcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDI5LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQzMDpzdGF0aWMgaW50IGh1Z2V0bGJmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDMxLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0MzI6XHRpbnQgZXJyID0gaHVnZXRsYmZzX3ZhbGlkYXRlKGZjKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MzMtXHRpZiAoZXJyKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzNC1cdFx0cmV0dXJuIGVycjtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0MzU6XHRyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGh1Z2V0bGJmc19maWxsX3N1cGVyKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MzYtfVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzNy1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0Mzg6c3RhdGljIHZvaWQgaHVnZXRsYmZzX2ZzX2NvbnRleHRfZnJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDM5LXtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDQyLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ0MzpzdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBodWdldGxiZnNfZnNfY29udGV4dF9vcHMgPSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQ0Olx0LmZyZWVcdFx0PSBodWdldGxiZnNfZnNfY29udGV4dF9mcmVlLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ0NTpcdC5wYXJzZV9wYXJhbVx0PSBodWdldGxiZnNfcGFyc2VfcGFyYW0sXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQ2Olx0LmdldF90cmVlXHQ9IGh1Z2V0bGJmc19nZXRfdHJlZSxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NDctfTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NDgtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQ5OnN0YXRpYyBpbnQgaHVnZXRsYmZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDUwLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0NTE6XHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eDtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NTItXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDUzOlx0Y3R4ID0ga3phbGxvY19vYmooc3RydWN0IGh1Z2V0bGJmc19mc19jb250ZXh0KTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NTQtXHRpZiAoIWN0eClcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDY2LVx0ZmMtXHUwMDNlZnNfcHJpdmF0ZSA9IGN0eDtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0Njc6XHRmYy1cdTAwM2VvcHNcdD0gXHUwMDI2aHVnZXRsYmZzX2ZzX2NvbnRleHRfb3BzO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ2OC1cdHJldHVybiAwO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NzAtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDcxOnN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBodWdldGxiZnNfZnNfdHlwZSA9IHtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0NzI6XHQubmFtZVx0XHRcdD0gXCYjMzQ7aHVnZXRsYmZzXCYjMzQ7LFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3MzpcdC5pbml0X2ZzX2NvbnRleHRcdD0gaHVnZXRsYmZzX2luaXRfZnNfY29udGV4dCxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NzQtXHQucGFyYW1ldGVyc1x0XHQ9IGh1Z2V0bGJfZnNfcGFyYW1ldGVycyxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDc4LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3OTpzdGF0aWMgc3RydWN0IHZmc21vdW50ICpodWdldGxiZnNfdmZzbW91bnRbSFVHRV9NQVhfSFNUQVRFXTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0ODAtXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTUwMT1zdHJ1Y3QgZmlsZSAqaHVnZXRsYl9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MTMtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTE0Olx0bW50ID0gaHVnZXRsYmZzX3Zmc21vdW50W2hzdGF0ZV9pZHhdO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTUxNS1cdGlmICghbW50KVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MjktXHRmaWxlID0gRVJSX1BUUigtRU5PU1BDKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1MzA6XHQvKiBodWdldGxiZnNfdmZzbW91bnRbXSBtb3VudHMgZG8gbm90IHVzZSBpZG1hcHBlZCBtb3VudHMuICAqL1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTUzMTpcdGlub2RlID0gaHVnZXRsYmZzX2dldF9pbm9kZShtbnQtXHUwMDNlbW50X3NiLCBcdTAwMjZub3BfbW50X2lkbWFwLCBOVUxMLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTUzMi1cdFx0XHRcdCAgICBTX0lGUkVHIHwgU19JUldYVUdPLCAwKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTQ2LVx0XHRmaWxlID0gYWxsb2NfZmlsZV9wc2V1ZG8oaW5vZGUsIG1udCwgbmFtZSwgT19SRFdSLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU0NzpcdFx0XHRcdFx0XHUwMDI2aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTQ4LVx0aWYgKCFJU19FUlIoZmlsZSkpXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU1NS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1NTY6c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqX19pbml0IG1vdW50X29uZV9odWdldGxiZnMoc3RydWN0IGhzdGF0ZSAqaClcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NTcte1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NjAtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTYxOlx0ZmMgPSBmc19jb250ZXh0X2Zvcl9tb3VudChcdTAwMjZodWdldGxiZnNfZnNfdHlwZSwgU0JfS0VSTk1PVU5UKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NjItXHRpZiAoSVNfRVJSKGZjKSkge1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NjQtXHR9IGVsc2Uge1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU2NTpcdFx0c3RydWN0IGh1Z2V0bGJmc19mc19jb250ZXh0ICpjdHggPSBmYy1cdTAwM2Vmc19wcml2YXRlO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU2Ni1cdFx0Y3R4LVx1MDAzZWhzdGF0ZSA9IGg7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU3MC1cdGlmIChJU19FUlIobW50KSlcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1NzE6XHRcdHByX2VycihcJiMzNDtDYW5ub3QgbW91bnQgaW50ZXJuYWwgaHVnZXRsYmZzIGZvciBwYWdlIHNpemUgJWx1S1wmIzM0OyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NzItXHRcdCAgICAgICBodWdlX3BhZ2Vfc2l6ZShoKSAvIFNaXzFLKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTc1LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU3NjpzdGF0aWMgaW50IF9faW5pdCBpbml0X2h1Z2V0bGJmc19mcyh2b2lkKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU3Ny17XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU4OC1cdGVycm9yID0gLUVOT01FTTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1ODk6XHRodWdldGxiZnNfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoXCYjMzQ7aHVnZXRsYmZzX2lub2RlX2NhY2hlXCYjMzQ7LFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU5MDpcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBodWdldGxiZnNfaW5vZGVfaW5mbyksXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTkxLVx0XHRcdFx0XHQwLCBTTEFCX0FDQ09VTlQsIGluaXRfb25jZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTkyOlx0aWYgKGh1Z2V0bGJmc19pbm9kZV9jYWNoZXAgPT0gTlVMTClcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1OTMtXHRcdGdvdG8gb3V0O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU5NC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1OTU6XHRlcnJvciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oXHUwMDI2aHVnZXRsYmZzX2ZzX3R5cGUpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU5Ni1cdGlmIChlcnJvcilcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTk5LVx0LyogZGVmYXVsdCBoc3RhdGUgbW91bnQgaXMgcmVxdWlyZWQgKi9cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MDA6XHRtbnQgPSBtb3VudF9vbmVfaHVnZXRsYmZzKFx1MDAyNmRlZmF1bHRfaHN0YXRlKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MDEtXHRpZiAoSVNfRVJSKG1udCkpIHtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjA0LVx0fVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTYwNTpcdGh1Z2V0bGJmc192ZnNtb3VudFtkZWZhdWx0X2hzdGF0ZV9pZHhdID0gbW50O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYwNi1cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjE0LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTYxNTpcdFx0bW50ID0gbW91bnRfb25lX2h1Z2V0bGJmcyhoKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MTYtXHRcdGlmIChJU19FUlIobW50KSlcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MTc6XHRcdFx0aHVnZXRsYmZzX3Zmc21vdW50W2ldID0gTlVMTDtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MTgtXHRcdGVsc2VcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MTk6XHRcdFx0aHVnZXRsYmZzX3Zmc21vdW50W2ldID0gbW50O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYyMC1cdFx0aSYjNDM7JiM0Mzs7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYyNS0gb3V0X3VucmVnOlxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTYyNjpcdCh2b2lkKXVucmVnaXN0ZXJfZmlsZXN5c3RlbShcdTAwMjZodWdldGxiZnNfZnNfdHlwZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjI3LSBvdXRfZnJlZTpcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2Mjg6XHRrbWVtX2NhY2hlX2Rlc3Ryb3koaHVnZXRsYmZzX2lub2RlX2NhY2hlcCk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjI5LSBvdXQ6XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYzMS19XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNjMyOmZzX2luaXRjYWxsKGluaXRfaHVnZXRsYmZzX2ZzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjM2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBIdWdldGxiZnMgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgc3RyYWlnaHQgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGZzL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgaW50ZXJlc3Rpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIHNwZWNpZmljYWxseSwgSSYjMzk7bSBiZXR0aW5nIHRoZSBjcnVjaWFsIG9uZXMgZm9yIEh1Z2V0bGJmcyBhbmQgaHVnZSBwYWdlcyB3aWxsIGJlIGluIHRoZXJlLiBJJiMzOTttIHRoaW5raW5nIGFyb3VuZCBsaW5lIDI1MCwgZ2l2ZSBvciB0YWtlIGEgZmV3IGxpbmVzIOKAkyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIHJlbGF0ZWQgb3B0aW9ucyB0ZW5kIHRvIGNsdXN0ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcHJlY2lzZSBjb25maWcgc3ltYm9scywgc28gSSB3YW50IHRvIHBpbnBvaW50IHRoZSBkZWZpbml0aW9ucyBvZiBgSFVHRVRMQkZTYCBhbmQgYEhVR0VUTEJfUEFHRWAuIEtub3dpbmcgdGhlIGV4YWN0IG9wdGlvbnMgaXMga2V5LiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGVpciBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgYW55IGFzc29jaWF0ZWQgaGVscCB0ZXh0LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIHJlcXVpcmVkIGZvciB0aGVtIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlci4gVGhpcyBzaG91bGQgY2xhcmlmeSB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBmb3IgSHVnZXRsYmZzIHdpdGhpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI0NjpcdFxuIDI0NzpcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuIDI0ODpcdFx0ZGVmX2Jvb2wgblxuIDI0OTpcdFxuIDI1MDpcdG1lbnVjb25maWcgSFVHRVRMQkZTXG4gMjUxOlx0XHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuIDI1MjpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuIDI1MzpcdFx0c2VsZWN0IE1FTUZEX0NSRUFURVxuIDI1NDpcdFx0c2VsZWN0IFBBREFUQSBpZiBTTVBcbiAyNTU6XHRcdGhlbHBcbiAyNTY6XHRcdCAgaHVnZXRsYmZzIGlzIGEgZmlsZXN5c3RlbSBiYWNraW5nIGZvciBIdWdlVExCIHBhZ2VzLCBiYXNlZCBvblxuIDI1NzpcdFx0ICByYW1mcy4gRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LCBzYXkgWSBoZXJlIGFuZCByZWFkXG4gMjU4Olx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3RcdTAwM2UgZm9yIGRldGFpbHMuXG4gMjU5Olx0XG4gMjYwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjYxOlx0XG4gMjYyOlx0aWYgSFVHRVRMQkZTXG4gMjYzOlx0Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbiAyNjQ6XHRcdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuIDI2NTpcdFx0ZGVmYXVsdCBuXG4gMjY2Olx0XHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG4gMjY3Olx0XHRoZWxwXG4gMjY4Olx0XHQgIFRoZSBIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9mZi4gU2F5IFkgaGVyZSB0b1xuIDI2OTpcdFx0ICBlbmFibGUgSFZPIGJ5IGRlZmF1bHQuIEl0IGNhbiBiZSBkaXNhYmxlZCB2aWEgaHVnZXRsYl9mcmVlX3ZtZW1tYXA9b2ZmXG4gMjcwOlx0XHQgIChib290IGNvbW1hbmQgbGluZSkgb3IgaHVnZXRsYl9vcHRpbWl6ZV92bWVtbWFwIChzeXNjdGwpLlxuIDI3MTpcdGVuZGlmICMgSFVHRVRMQkZTXG4gMjcyOlx0XG4gMjczOlx0Y29uZmlnIEhVR0VUTEJfUEFHRVxuIDI3NDpcdFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTk2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIENPTkZJR19IVUdFVExCRlMqKgoKT2theSwgc28gYENPTkZJR19IVUdFVExCRlNgIGlzIGVuYWJsZWQsIHdoaWNoLCBhcyBJIGtub3csIGF1dG9tYXRpY2FsbHkgbWVhbnMgYEhVR0VUTEJfUEFHRWAgaXMgYWxzbyBlbmFibGVkLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMgb2YgdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLgoKRmlyc3QsIEkgbmVlZCB0byBzZWUgd2hpY2ggc3ltYm9scyBhcmUgYmVpbmcgdG91Y2hlZC4gSSBzZWUgY2hhbmdlcyB0byBgaHVnZXRsYmZzX3N0YXRmc2AgaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgZmlsZSBzeXN0ZW0gc3RhdGlzdGljcyB3aXRoIGh1Z2V0bGIgcGFnZXMuIFRoZW4gdGhlcmUgYXJlIHNvbWUgc3RhdGljIGZ1bmN0aW9ucyBpbiBgbW0vaHVnZXRsYi5jYDogYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYCwgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCwgYW5kIGBzdWJwb29sX2lzX2ZyZWVgLiBUaGUgdXNlIG9mIHN0YXRpYyBpcyBzaWduaWZpY2FudCwgYXMgaXQgbGltaXRzIHRoZWlyIHZpc2liaWxpdHkgYW5kIHVzYWdlLiBMYXN0bHksIEkgbm90aWNlIHR3byBub24tc3RhdGljIGZ1bmN0aW9ucywgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYWxzbyBpbiBgbW0vaHVnZXRsYi5jYC4KCk5vdywgSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aG9zZSBzdWJwb29sIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgIGFuZCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgIGFyZSBpbmRlZWQgc3RhdGljLCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIEkgbmVlZCB0byB0cmFjZSB0aGVpciBjYWxsZXJzLiBVbmRlcnN0YW5kaW5nIHdoZXJlIHRoZXNlIHN1YnBvb2wgZnVuY3Rpb25zIGFyZSB1c2VkIGlzIGNyaXRpY2FsIGZvciBncmFzcGluZyB0aGUgc2NvcGUgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgb2YgaHVnZXRsYiBwYWdlcy4gVGhpcyBhbmFseXNpcyB3aWxsIGhlbHAgbWUgYXNzZXNzIHRoZSBwYXRjaCYjMzk7cyBwb3RlbnRpYWwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdlcGFnZV9zdWJwb29sXyhnZXR8cHV0KV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTc5PXZvaWQgaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxuLS1cbm1tL2h1Z2V0bGIuYy0xOTItLyoqXG5tbS9odWdldGxiLmM6MTkzOiAqIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzIC0gR2V0IHBhZ2VzIGZyb20gYSBzdWJwb29sXG5tbS9odWdldGxiLmMtMTk0LSAqIEBzcG9vbDogcG9pbnRlciB0byBzdWJwb29sIHN0cnVjdHVyZSAobWF5IGJlIE5VTEwpXG4tLVxubW0vaHVnZXRsYi5jLTIwNC0gKi9cbm1tL2h1Z2V0bGIuYzoyMDU6c3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxubW0vaHVnZXRsYi5jLTIwNi1cdFx0XHRcdCAgICAgIGxvbmcgZGVsdGEpXG4tLVxubW0vaHVnZXRsYi5jLTI0My0vKipcbm1tL2h1Z2V0bGIuYzoyNDQ6ICogaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMgLSBSZWxlYXNlIHBhZ2VzIGJhY2sgdG8gYSBzdWJwb29sXG5tbS9odWdldGxiLmMtMjQ1LSAqIEBzcG9vbDogcG9pbnRlciB0byBzdWJwb29sIHN0cnVjdHVyZSAobWF5IGJlIE5VTEwpXG4tLVxubW0vaHVnZXRsYi5jLTI1Ni0gKi9cbm1tL2h1Z2V0bGIuYzoyNTc6c3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxubW0vaHVnZXRsYi5jLTI1OC1cdFx0XHRcdCAgICAgICBsb25nIGRlbHRhKVxuLS1cbm1tL2h1Z2V0bGIuYz05NzU9dm9pZCBodWdldGxiX2ZpeF9yZXNlcnZlX2NvdW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbm1tL2h1Z2V0bGIuYy05ODAtXG5tbS9odWdldGxiLmM6OTgxOlx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTtcbm1tL2h1Z2V0bGIuYy05ODItXHRpZiAocnN2X2FkanVzdCBcdTAwM2UgMCkge1xuLS1cbm1tL2h1Z2V0bGIuYz0xNjg2PXZvaWQgZnJlZV9odWdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jLTE3MTEtXHQgKiB3b3VsZCBoYXZlIGJlZW4gYSBwYWdlIHJlc2VydmVkIGluIHRoZSBzdWJwb29sIGJlZm9yZSBhbGxvY2F0aW9uXG5tbS9odWdldGxiLmM6MTcxMjpcdCAqIHZpYSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcygpLiAgU2luY2Ugd2UgYXJlICYjMzk7cmVzdG9yaW5nJiMzOTsgdGhlXG5tbS9odWdldGxiLmM6MTcxMzpcdCAqIHJlc2VydmF0aW9uLCBkbyBub3QgY2FsbCBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcygpIGFzIHRoaXMgd2lsbFxubW0vaHVnZXRsYi5jLTE3MTQtXHQgKiByZW1vdmUgdGhlIHJlc2VydmVkIHBhZ2UgZnJvbSB0aGUgc3VicG9vbC5cbi0tXG5tbS9odWdldGxiLmMtMTcyMi1cdFx0ICovXG5tbS9odWdldGxiLmM6MTcyMzpcdFx0aWYgKGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKSA9PSAwKVxubW0vaHVnZXRsYi5jLTE3MjQtXHRcdFx0cmVzdG9yZV9yZXNlcnZlID0gdHJ1ZTtcbi0tXG5tbS9odWdldGxiLmM9Mjk1Mj1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTI5OTYtXHRpZiAobWFwX2NoZykge1xubW0vaHVnZXRsYi5jOjI5OTc6XHRcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTtcbm1tL2h1Z2V0bGIuYy0yOTk4LVx0XHRpZiAoZ2JsX3Jlc3ZfZ2V0IFx1MDAzYyAwKSB7XG4tLVxubW0vaHVnZXRsYi5jLTMwNjItXG5tbS9odWdldGxiLmM6MzA2MzpcdFx0XHRyc3ZfYWRqdXN0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xubW0vaHVnZXRsYi5jLTMwNjQtXHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtcnN2X2FkanVzdCk7XG4tLVxubW0vaHVnZXRsYi5jLTMwNzUtXHRpZiAobWFwX2NoZykge1xubW0vaHVnZXRsYi5jOjMwNzY6XHRcdGxvbmcgZ2JsX3Jlc3ZfcHV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xubW0vaHVnZXRsYi5jLTMwNzctXG4tLVxubW0vaHVnZXRsYi5jPTQ3MTk9c3RhdGljIHZvaWQgaHVnZXRsYl92bV9vcF9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdldGxiLmMtNDc0Mi1cdFx0ICovXG5tbS9odWdldGxiLmM6NDc0MzpcdFx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgcmVzZXJ2ZSk7XG5tbS9odWdldGxiLmMtNDc0NC1cdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xuLS1cbm1tL2h1Z2V0bGIuYz02NjY5PWxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxubW0vaHVnZXRsYi5jLTY3NTUtXHQgKi9cbm1tL2h1Z2V0bGIuYzo2NzU2Olx0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIGNoZyk7XG5tbS9odWdldGxiLmMtNjc1Ny1cdGlmIChnYmxfcmVzdl9nZXQgXHUwMDNjIDApIHtcbi0tXG5tbS9odWdldGxiLmMtNjgwNS1cbm1tL2h1Z2V0bGIuYzo2ODA2Olx0XHRcdHJzdl9hZGp1c3QgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCxcbm1tL2h1Z2V0bGIuYy02ODA3LVx0XHRcdFx0XHRcdFx0XHRjaGcgLSBhZGQpO1xuLS1cbm1tL2h1Z2V0bGIuYy02ODI2LVx0ICovXG5tbS9odWdldGxiLmM6NjgyNzpcdGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBjaGcpO1xubW0vaHVnZXRsYi5jLTY4MjgtXHQvKlxuLS1cbm1tL2h1Z2V0bGIuYz02ODU0PWxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsXG4tLVxubW0vaHVnZXRsYi5jLTY4ODgtXHQgKi9cbm1tL2h1Z2V0bGIuYzo2ODg5Olx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgKGNoZyAtIGZyZWVkKSk7XG5tbS9odWdldGxiLmMtNjg5MC1cdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwNTEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEh1Z2UgUGFnZSBTdWJwb29sIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGZvY3VzIG9uIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AgYW5kIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AuIEV2ZW4gdGhvdWdoIHRoZXkmIzM5O3JlIHN0YXRpYyB3aXRoaW4gYG1tL2h1Z2V0bGIuY2AsIGFuZCBJJiMzOTttIGF3YXJlIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmVuJiMzOTt0IGlubGluZWQgKmRvKiBoYXZlIHN5bWJvbHMgaW4gdm1saW51eCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGZvbGxvd2luZyBiZXN0IHByYWN0aWNlcy4gVGltZSB0byByZWZyZXNoIG9uIHRoZSBndWlkZWxpbmVzLi4uIHJpZ2h0LCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBpczogJiMzNDtUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFMmIzM0OyBhbmQgJiMzNDtIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTJiMzNDsuCgpTbywgSSYjMzk7bSBub3RpbmcgdGhhdCBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgIGFuZCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgIGFyZSBzdGF0aWMgKm5vbi1pbmxpbmUqIGZ1bmN0aW9ucyBsb2NhdGVkIGluIGEgYC5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgYG1tL2h1Z2V0bGIuY2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJdCBtZWFucyB0aGV5JiMzOTtsbCBzaG93IHVwIGFzIHN5bWJvbHMuCgpOb3csIHRvIHNhdGlzZnkgdGhlIGd1aWRlbGluZXMsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgbm9uLXN0YXRpYywgZXhwb3J0ZWQsIG9yIGNhbGxlciBmdW5jdGlvbnMuIEFoLCBoZXJlIHdlIGdvOiBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZWl0aGVyIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhlIHN1YnN5c3RlbSBvciBhcmUgbW9kaWZpZWQgZHVlIHRvIHRoZSBjaGFuZ2UgaW4gdGhlIHN0YXRpYyBmdW5jdGlvbnMuIFRoZSBmdW5jdGlvbnMgYXJlOgpgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBgaHVnZXRsYmZzX3N0YXRmc2AsIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AsIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AsIGBodWdlcGFnZV9wdXRfc3VicG9vbGAsIGBodWdldGxiX3VucmVzZXJ2ZV9wYWdlc2AuCgpJJiMzOTttIG5vdyByZWFkeSB0byBsb29rIGZvciB0aGUgb3RoZXIgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoaXMgYXJlYSwgc3BlY2lmaWNhbGx5IHRoZSBvbmVzIHRoYXQgY2FsbCBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbGAgLyBgc3VicG9vbF9pc19mcmVlYCwgd2hpY2ggd2lsbCBnaXZlIG1lIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBpbnRlcmFjdGlvbnMgaW4gdGhpcyBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdWJwb29sX2lzX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTEyNz1zdGF0aWMgc3RydWN0IHJlc3ZfbWFwICp2bWFfcmVzdl9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xubW0vaHVnZXRsYi5jLTEyOC1cbm1tL2h1Z2V0bGIuYzoxMjk6c3RhdGljIGlubGluZSBib29sIHN1YnBvb2xfaXNfZnJlZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXG5tbS9odWdldGxiLmMtMTMwLXtcbi0tXG5tbS9odWdldGxiLmM9MTM3PXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbi0tXG5tbS9odWdldGxiLmMtMTM5LXtcbm1tL2h1Z2V0bGIuYzoxNDA6XHRib29sIGZyZWVfc3VicG9vbCA9IHN1YnBvb2xfaXNfZnJlZShzcG9vbCk7XG5tbS9odWdldGxiLmMtMTQxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDAzNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIENhbGxlcnMgb2YgYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2xgKioKCk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGUgYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2xgIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgdXNhZ2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIGFjdHVhbGx5ICpjYWxsaW5nKiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uIEl0JiMzOTtzIGNydWNpYWwgYmVjYXVzZSB0aGUgZnVuY3Rpb24mIzM5O3MgbmFtZSBzdWdnZXN0cyBpdCBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggZWl0aGVyIHVubG9ja2luZyBvciByZWxlYXNpbmcgYSBzdWJwb29sLCB3aGljaCBpcyBhIHZlcnkgc3BlY2lmaWMgdHlwZSBvZiBkYXRhIHN0cnVjdHVyZSwgcHJlc3VtYWJseSwgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IG9yIGNvbmN1cnJlbmN5IGNvbnRyb2wuIFVuZGVyc3RhbmRpbmcgd2hlcmUgaXQmIzM5O3MgYmVpbmcgaW52b2tlZCB3aWxsIHJldmVhbCBpdHMgcHVycG9zZSBhbmQsIHBlcmhhcHMgbW9yZSBpbXBvcnRhbnRseSwgdGhlIGNyaXRpY2FsIHBhdGhzIG9mIGV4ZWN1dGlvbiB0aGF0IGRlcGVuZCBvbiBpdHMgY29ycmVjdCBvcGVyYXRpb24uIEkgbmVlZCB0byBiZSBhYmxlIHRvIGRldGVybWluZSB0aGUgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGNhbGwsIGFuZCB3aGV0aGVyIHRoZSBmdW5jdGlvbiBpcyB1c2VkIGluIHNldmVyYWwgZGlmZmVyZW50IHBsYWNlcyBvciBvbmx5IGEgaGFuZGZ1bC4gVGhpcyB3aWxsIGluZm9ybSBteSBpbnZlc3RpZ2F0aW9uIHNpZ25pZmljYW50bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VubG9ja19vcl9yZWxlYXNlX3N1YnBvb2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTEyOT1zdGF0aWMgaW5saW5lIGJvb2wgc3VicG9vbF9pc19mcmVlKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbi0tXG5tbS9odWdldGxiLmMtMTM2LVxubW0vaHVnZXRsYi5jOjEzNzpzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG5tbS9odWdldGxiLmMtMTM4LVx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzKVxuLS1cbm1tL2h1Z2V0bGIuYz0xNzk9dm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXG4tLVxubW0vaHVnZXRsYi5jLTE4OC1cdHNwb29sLVx1MDAzZWNvdW50LS07XG5tbS9odWdldGxiLmM6MTg5Olx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xubW0vaHVnZXRsYi5jLTE5MC19XG4tLVxubW0vaHVnZXRsYi5jPTI1Nz1zdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4tLVxubW0vaHVnZXRsYi5jLTI5MS1cdCAqL1xubW0vaHVnZXRsYi5jOjI5MjpcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbm1tL2h1Z2V0bGIuYy0yOTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTkyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBIdWdlVExCIFBhZ2UgUmVzZXJ2YXRpb25zKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgaHVnZXRsYmAgc2l0dWF0aW9uLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyBob3cgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AgaXMgYmVpbmcgdXNlZC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNhbGwgc3RhY2s7IGVzc2VudGlhbGx5LCB3aGVyZSBhcmUgdGhlIHBvaW50cyBpbiB0aGUgY29kZSB0aGF0IGFjdHVhbGx5IGludm9rZSB0aGlzIGZ1bmN0aW9uPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBmaXJzdCBzdGVwLiBOZXh0LCBJJiMzOTtsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGF0IGluZm9ybWF0aW9uIHdpdGggdGhlIGJyb2FkZXIgdXNlIGNhc2VzIG9mIHRoZSBodWdldGxiZnMgc3Vic3lzdGVtIGluIGdlbmVyYWwuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLiBUaGlzIHdpbGwgbGlrZWx5IGludm9sdmUgc29tZSBncmVwIHdvcmsgYW5kIGZvbGxvd2luZyBjYWxsIGdyYXBocy4gS25vd2luZyB0aGlzLCBJIGNhbiBiZWdpbiB0byBncmFzcCB3aGF0IHRoZSBrZXJuZWwgaXMgZG9pbmcgd2l0aCB0aGVzZSBwYWdlcywgdW5kZXJzdGFuZCBhbnkgcG9zc2libGUgY29udGVudGlvbiBpc3N1ZXMgYW5kIGFkZHJlc3MgdGhlIHJvb3Qgb2YgYW55IHJlbGF0ZWQgcGVyZm9ybWFuY2UgcHJvYmxlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9odWdldGxiZnMvaW5vZGUuYz05OT1zdGF0aWMgaW50IGh1Z2V0bGJmc19maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1Mi1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1MzpcdGlmIChodWdldGxiX3Jlc2VydmVfcGFnZXMoaW5vZGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTQtXHRcdFx0XHR2bWEtXHUwMDNldm1fcGdvZmYgXHUwMDNlXHUwMDNlIGh1Z2VfcGFnZV9vcmRlcihoKSxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xNDg4PXN0YXRpYyBpbnQgZ2V0X2hzdGF0ZV9pZHgoaW50IHBhZ2Vfc2l6ZV9sb2cpXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ5OC0gKiBOb3RlIHRoYXQgc2l6ZSBzaG91bGQgYmUgYWxpZ25lZCB0byBwcm9wZXIgaHVnZXBhZ2Ugc2l6ZSBpbiBjYWxsZXIgc2lkZSxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0OTk6ICogb3RoZXJ3aXNlIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyByZXNlcnZlcyBvbmUgbGVzcyBodWdlcGFnZXMgdGhhbiBpbnRlbmRlZC5cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MDAtICovXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xNTAxPXN0cnVjdCBmaWxlICpodWdldGxiX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU0MC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1NDE6XHRpZiAoaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKGlub2RlLCAwLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU0Mi1cdFx0XHRzaXplIFx1MDAzZVx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaHN0YXRlX2lub2RlKGlub2RlKSksIE5VTEwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTk2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gSHVnZVRMQiBSZXNlcnZhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHNxdWFyZWx5IGZvY3VzZWQgb24gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2Agd2l0aGluIHRoZSBgbW0vYCBkaXJlY3RvcnkuIFRoYXQgZnVuY3Rpb24gaXMgdGhlIGxpbmNocGluIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB3ZSBjYXJ2ZSBvdXQgYW5kIG1hbmFnZSB0aG9zZSBwcmVjaW91cyBIdWdlVExCIHBhZ2VzLCBhbmQgaXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSBob3cgdGhlIHJlc2VydmF0aW9uIGxvZ2ljIGlzIGltcGxlbWVudGVkIGhlcmUuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGFsbG9jYXRpb24gcG9saWN5IGl0IGVtcGxveXMsIHBvdGVudGlhbCBlZGdlIGNhc2VzIGFyb3VuZCBmcmFnbWVudGF0aW9uLCBhbmQgZXNwZWNpYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggTlVNQSBub2RlIGNvbnN0cmFpbnRzIChpZiBpdCBkb2VzKS4gQW55IG9idmlvdXMgZmxhd3Mgb3IgYXJlYXMgdGhhdCBjb3VsZCBiZW5lZml0IGZyb20gcGVyZm9ybWFuY2UgdHVuaW5nIGNvbWUgdG8gbWluZC4gSSYjMzk7bSBkaWdnaW5nIGRlZXBlciBpbnRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgSHVnZVRMQiBpbmZyYXN0cnVjdHVyZeKAlHRoZSBtYXBwaW5nLCB0aGUgZmF1bHQgaGFuZGxpbmcsIGFuZCwgb2YgY291cnNlLCBkZWFsbG9jYXRpb24uIEVzc2VudGlhbGx5LCBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBxdWljayBtZW50YWwgbWFwIG9mIHRoZSByZXNlcnZhdGlvbiBwcm9jZXNzIHRvIGV2YWx1YXRlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX3Jlc2VydmVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTI5NTI9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy0zMDUzLVx0XHQgKiB2bWFfbmVlZHNfcmVzZXJ2YXRpb24gYW5kIHZtYV9jb21taXRfcmVzZXJ2YXRpb24uXG5tbS9odWdldGxiLmM6MzA1NDpcdFx0ICogVGhpcyBpbmRpY2F0ZXMgYSByYWNlIHdpdGggaHVnZXRsYl9yZXNlcnZlX3BhZ2VzLlxubW0vaHVnZXRsYi5jLTMwNTUtXHRcdCAqIEFkanVzdCBmb3IgdGhlIHN1YnBvb2wgY291bnQgaW5jcmVtZW50ZWQgYWJvdmUgQU5EXG5tbS9odWdldGxiLmM6MzA1NjpcdFx0ICogaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzIGZvciB0aGUgc2FtZSBwYWdlLlx0QWxzbyxcbm1tL2h1Z2V0bGIuYzozMDU3Olx0XHQgKiB0aGUgcmVzZXJ2YXRpb24gY291bnQgYWRkZWQgaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzXG5tbS9odWdldGxiLmMtMzA1OC1cdFx0ICogbm8gbG9uZ2VyIGFwcGxpZXMuXG4tLVxubW0vaHVnZXRsYi5jPTY0OTM9bG9uZyBodWdldGxiX2NoYW5nZV9wcm90ZWN0aW9uKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy02NjY4LVxubW0vaHVnZXRsYi5jOjY2Njk6bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbm1tL2h1Z2V0bGIuYy02NjcwLVx0XHRsb25nIGZyb20sIGxvbmcgdG8sXG4tLVxubW0vaHVnZXRsYi5jLTY3MTEtXHRcdC8qXG5tbS9odWdldGxiLmM6NjcxMjpcdFx0ICogcmVzdl9tYXAgY2FuIG5vdCBiZSBOVUxMIGFzIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyBpcyBvbmx5XG5tbS9odWdldGxiLmMtNjcxMy1cdFx0ICogY2FsbGVkIGZvciBpbm9kZXMgZm9yIHdoaWNoIHJlc3ZfbWFwcyB3ZXJlIGNyZWF0ZWQgKHNlZVxuLS1cbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuLS1cbm1tL21lbWZkLmMtODktXG5tbS9tZW1mZC5jOjkwOlx0XHRucl9yZXN2ID0gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKGlub2RlLCBpZHgsIGlkeCAmIzQzOyAxLCBOVUxMLCBFTVBUWV9WTUFfRkxBR1MpO1xubW0vbWVtZmQuYy05MS1cdFx0aWYgKG5yX3Jlc3YgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTYyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyBgYWxsb2NfaHVnZXRsYl9mb2xpb2A6CgoqKkRlY29uc3RydWN0aW5nIGBhbGxvY19odWdldGxiX2ZvbGlvYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBhbGxvY19odWdldGxiX2ZvbGlvYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgbGFuZHNjYXBlLCB0aGlzIGZ1bmN0aW9uIGlzIG9idmlvdXNseSBhIGNyaXRpY2FsIHBpZWNlLiBJdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciBmb3IgSHVnZVRMQiBmb2xpbyBhbGxvY2F0aW9uLCBhbmQgdGhlcmVmb3JlIGRpcmVjdGx5IGltcGFjdHMgdGhlIHBlcmZvcm1hbmNlIG9mIGFwcGxpY2F0aW9ucyB0aGF0IGxldmVyYWdlIGh1Z2UgcGFnZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgb24gYW4gaW50aW1hdGUgbGV2ZWwgdG8gb3B0aW1pemUgdGhlIGNvZGUgSSB3b3JrIHdpdGguCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgb3JpZ2luIGFuZCB1c2FnZS4gV2hhdCBjYWxscyB0aGlzIGZ1bmN0aW9uPyBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb250ZXh0cz8gSXMgaXQgY2FsbGVkIGZyb20gYSBjcml0aWNhbCBwYXRoPyBEb2VzIGl0IGhhbmRsZSBhbnkgbG9ja2luZywgb3IgYXNzdW1lIGl0JiMzOTtzIHByb3RlY3RlZCBhdCBhIGhpZ2hlciBsZXZlbD8gVGhlc2UgYXJlIHRoZSBmaXJzdCBxdWVzdGlvbnMgSSB3b3VsZCBoYXZlIHRvIGFuc3dlciB0byBmaWd1cmUgb3V0IHdoZXJlIGFuZCBob3cgdG8gdHdlYWsgaXQuCgpJJiMzOTtkIGFsc28gbmVlZCB0byBzY3J1dGluaXplIGl0cyBpbnRlcm5hbCBsb2dpYy4gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBIdWdlVExCIGluZnJhc3RydWN0dXJlPyBEb2VzIGl0IHV0aWxpemUgYW55IGludGVybmFsIGRhdGEgc3RydWN0dXJlcz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGxpa2UgY29udGVudGlvbiBvbiBwYXJ0aWN1bGFyIHJlc291cmNlcyBvciBvdmVybHkgY29tcGxleCBhbGdvcml0aG1zPyBJJiMzOTtkIGxvb2sgZm9yIGFyZWFzIHdoZXJlIG9wdGltaXphdGlvbiBtaWdodCBiZSBwb3NzaWJsZSwgbGlrZSBwcmUtY2FsY3VsYXRpbmcgdmFsdWVzLCBvciB1c2luZyBtb3JlIGVmZmljaWVudCBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMuCgpBbHNvLCBJJiMzOTtkIHdhbnQgdG8gZXhhbWluZSB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHJlY292ZXJ5IG1lY2hhbmlzbXMuIFdoYXQgaGFwcGVucyBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscz8gRG9lcyBpdCBkZWdyYWRlIGdyYWNlZnVsbHk/IEFyZSB0aGVyZSByZXRyeSBtZWNoYW5pc21zPyBIb3cgYXJlIGVycm9ycyByZXBvcnRlZCwgYW5kIGhvdyBhcmUgdGhleSBwcm9wYWdhdGVkIHVwIHRoZSBjYWxsIHN0YWNrPyBUaGlzIHBhcnQgaXMgY3J1Y2lhbCBmb3IgcmVsaWFiaWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIGFueSBmYWlsdXJlIG1vZGVzIGNvdWxkIGJlY29tZSBhbiBpc3N1ZSBsYXRlciBvbi4KCkZpbmFsbHksIEkmIzM5O2QgY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIG1lbW9yeSBmcmFnbWVudGF0aW9uIGlzc3Vlcy4gQXJlIHJlc291cmNlcyBwcm9wZXJseSByZWxlYXNlZCwgZXNwZWNpYWxseSBpbiBlcnJvciBwYXRocz8gRG9lcyB0aGUgZnVuY3Rpb24gY29udHJpYnV0ZSB0byBtZW1vcnkgZnJhZ21lbnRhdGlvbiBvdmVyIHRpbWU/IFRoZXNlIGFyZSBsb25nLXRlcm0gY29uc2lkZXJhdGlvbnMgdGhhdCBhcmUgaW5jcmVkaWJseSBpbXBvcnRhbnQgZm9yIG92ZXJhbGwgc3lzdGVtIHN0YWJpbGl0eS4gSWYgdGhlcmUgYXJlIGFueSwgdGhleSBuZWVkIHRvIGJlIGFkZHJlc3NlZCBlYXJseSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MjE1NT1zdHJ1Y3QgZm9saW8gKmFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMjE3OC1cbm1tL2h1Z2V0bGIuYzoyMTc5OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxubW0vaHVnZXRsYi5jLTIxODAtXHRcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9odWdldGxiLmMtMjE5OS0vKiBmb2xpbyBtaWdyYXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gKi9cbm1tL2h1Z2V0bGIuYzoyMjAwOnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbm1tL2h1Z2V0bGIuYy0yMjAxLVx0XHRub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgYWxsb3dfYWxsb2NfZmFsbGJhY2spXG4tLVxubW0vaHVnZXRsYi5jPTI1MzM9c3RhdGljIGxvbmcgdm1hX2RlbF9yZXNlcnZhdGlvbihzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNTQwLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gcmVzdG9yZSByZXNlcnZhdGlvbiBpbmZvcm1hdGlvbiBvbiBlcnJvciBwYXRocy5cbm1tL2h1Z2V0bGIuYzoyNTQxOiAqIEl0IHNob3VsZCBPTkxZIGJlIGNhbGxlZCBmb3IgZm9saW9zIGFsbG9jYXRlZCB2aWEgYWxsb2NfaHVnZXRsYl9mb2xpbygpLFxubW0vaHVnZXRsYi5jLTI1NDItICogYW5kIHRoZSBodWdldGxiIG11dGV4IHNob3VsZCByZW1haW4gaGVsZCB3aGVuIGNhbGxpbmcgdGhpcyByb3V0aW5lLlxuLS1cbm1tL2h1Z2V0bGIuYy0yNTQ3LSAqIDIpIE5vIHJlc2VydmF0aW9uIHdhcyBpbiBwbGFjZSBmb3IgdGhlIHBhZ2UsIHNvIGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlIGlzXG5tbS9odWdldGxiLmM6MjU0ODogKiAgICBub3Qgc2V0LiAgSG93ZXZlciwgYWxsb2NfaHVnZXRsYl9mb2xpbyBhbHdheXMgdXBkYXRlcyB0aGUgcmVzZXJ2ZSBtYXAuXG5tbS9odWdldGxiLmMtMjU0OS0gKlxuLS1cbm1tL2h1Z2V0bGIuYy0yNTU2LSAqXG5tbS9odWdldGxiLmM6MjU1NzogKiBJbiBjYXNlIDIsIHNpbXBseSB1bmRvIHJlc2VydmUgbWFwIG1vZGlmaWNhdGlvbnMgZG9uZSBieSBhbGxvY19odWdldGxiX2ZvbGlvLlxubW0vaHVnZXRsYi5jLTI1NTgtICovXG5tbS9odWdldGxiLmM9MjU1OT12b2lkIHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtMjU4NS1cdFx0XHQgKiBUaGlzIGluZGljYXRlcyB0aGVyZSBpcyBhbiBlbnRyeSBpbiB0aGUgcmVzZXJ2ZSBtYXBcbm1tL2h1Z2V0bGIuYzoyNTg2Olx0XHRcdCAqIG5vdCBhZGRlZCBieSBhbGxvY19odWdldGxiX2ZvbGlvLiAgV2Uga25vdyBpdCB3YXMgYWRkZWRcbm1tL2h1Z2V0bGIuYzoyNTg3Olx0XHRcdCAqIGJlZm9yZSB0aGUgYWxsb2NfaHVnZXRsYl9mb2xpbyBjYWxsLCBvdGhlcndpc2Vcbm1tL2h1Z2V0bGIuYy0yNTg4LVx0XHRcdCAqIGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlIHdvdWxkIGJlIHNldCBvbiB0aGUgZm9saW8uXG4tLVxubW0vaHVnZXRsYi5jPTI5MjY9dHlwZWRlZiBlbnVtIHtcbi0tXG5tbS9odWdldGxiLmMtMjk1MS0gKi9cbm1tL2h1Z2V0bGIuYzoyOTUyOnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2V0bGIuYy0yOTUzLVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBjb3dfZnJvbV9vd25lcilcbi0tXG5tbS9odWdldGxiLmM9NDg5ND1pbnQgY29weV9odWdldGxiX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmMsXG4tLVxubW0vaHVnZXRsYi5jLTUwMTUtXHRcdFx0XHQvKiBEbyBub3QgdXNlIHJlc2VydmUgYXMgaXQmIzM5O3MgcHJpdmF0ZSBvd25lZCAqL1xubW0vaHVnZXRsYi5jOjUwMTY6XHRcdFx0XHRuZXdfZm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKGRzdF92bWEsIGFkZHIsIGZhbHNlKTtcbm1tL2h1Z2V0bGIuYy01MDE3LVx0XHRcdFx0aWYgKElTX0VSUihuZXdfZm9saW8pKSB7XG4tLVxubW0vaHVnZXRsYi5jPTU0ODc9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl93cChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdldGxiLmMtNTU2OC1cdHNwaW5fdW5sb2NrKHZtZi1cdTAwM2VwdGwpO1xubW0vaHVnZXRsYi5jOjU1Njk6XHRuZXdfZm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MsIGNvd19mcm9tX293bmVyKTtcbm1tL2h1Z2V0bGIuYy01NTcwLVxuLS1cbm1tL2h1Z2V0bGIuYz01NzU5PXN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfbm9fcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9odWdldGxiLmMtNTgyOC1cbm1tL2h1Z2V0bGIuYzo1ODI5Olx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8odm1hLCB2bWYtXHUwMDNlYWRkcmVzcywgZmFsc2UpO1xubW0vaHVnZXRsYi5jLTU4MzAtXHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4tLVxubW0vaHVnZXRsYi5jPTYwMDk9dm1fZmF1bHRfdCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNjI0NC0gKi9cbm1tL2h1Z2V0bGIuYzo2MjQ1OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fdm1hKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtNjI0Ni1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbi0tXG5tbS9odWdldGxiLmMtNjI2MS1cdCAqL1xubW0vaHVnZXRsYi5jOjYyNjI6XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgbm9kZSwgbm9kZW1hc2ssIGdmcF9tYXNrLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtNjI2My1cdG1wb2xfY29uZF9wdXQobXBvbCk7XG4tLVxubW0vaHVnZXRsYi5jPTYyNzI9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcbi0tXG5tbS9odWdldGxiLmMtNjMyOC1cbm1tL2h1Z2V0bGIuYzo2MzI5Olx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oZHN0X3ZtYSwgZHN0X2FkZHIsIGZhbHNlKTtcbm1tL2h1Z2V0bGIuYy02MzMwLVx0XHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuLS1cbm1tL2h1Z2V0bGIuYy02MzU0LVx0XHRcdCAqL1xubW0vaHVnZXRsYi5jOjYzNTU6XHRcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX3ZtYShoLCBkc3Rfdm1hLCBkc3RfYWRkcik7XG5tbS9odWdldGxiLmMtNjM1Ni1cdFx0XHRpZiAoIWZvbGlvKSB7XG4tLVxubW0vaHVnZXRsYi5jLTYzNzUtXG5tbS9odWdldGxiLmM6NjM3NjpcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKGRzdF92bWEsIGRzdF9hZGRyLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtNjM3Ny1cdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbi0tXG5tbS9odWdldGxiLmM9NjY2OT1sb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbm1tL2h1Z2V0bGIuYy02NzkxLVx0XHRcdCAqIG1hcCBiZXR3ZWVuIHJlZ2lvbl9jaGcgYW5kIHJlZ2lvbl9hZGQuICBUaGlzXG5tbS9odWdldGxiLmM6Njc5MjpcdFx0XHQgKiBpbmRpY2F0ZXMgYSByYWNlIHdpdGggYWxsb2NfaHVnZXRsYl9mb2xpby4gIEFkanVzdFxubW0vaHVnZXRsYi5jLTY3OTMtXHRcdFx0ICogdGhlIHN1YnBvb2wgYW5kIHJlc2VydmUgY291bnRzIG1vZGlmaWVkIGFib3ZlXG4tLVxubW0vbWVtZmQuYz02OD1zdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXG4tLVxubW0vbWVtZmQuYy05My1cbm1tL21lbWZkLmM6OTQ6XHRcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKGgsXG5tbS9tZW1mZC5jLTk1LVx0XHRcdFx0XHRcdCAgICBudW1hX25vZGVfaWQoKSxcbi0tXG5tbS9tZW1wb2xpY3kuYz0xNDM3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXRfYnlfbXBvbChzdHJ1Y3QgZm9saW8gKnNyYyxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNDU2LVx0XHRub2RlbWFzayA9IHBvbGljeV9ub2RlbWFzayhnZnAsIHBvbCwgaWx4LCBcdTAwMjZuaWQpO1xubW0vbWVtcG9saWN5LmM6MTQ1NzpcdFx0cmV0dXJuIGFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgbmlkLCBub2RlbWFzaywgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMTQ1OC1cdFx0XHRcdGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soTVJfTUVNUE9MSUNZX01CSU5EKSk7XG4tLVxubW0vbWlncmF0ZS5jPTIxOTc9c3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpXG4tLVxubW0vbWlncmF0ZS5jLTIyMTQtXHRcdGdmcF9tYXNrID0gaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhoLCBnZnBfbWFzayk7XG5tbS9taWdyYXRlLmM6MjIxNTpcdFx0cmV0dXJuIGFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgbmlkLFxubW0vbWlncmF0ZS5jLTIyMTYtXHRcdFx0XHRcdFx0bXRjLVx1MDAzZW5tYXNrLCBnZnBfbWFzayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0NzgKCQkJCQkJCW91dHB1dDogMjAzCgkJCQkJCQl0aG91Z2h0czogNjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IGh1Z2V0bGJmcyBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCB0aGlzIGxvb2tzIHByb21pc2luZy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlIGBtbWAgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGBodWdldGxiZnNgIGFyZWEsIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZy4gSXQmIzM5O3MgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCBhIHZhcmlldHkgb2Ygc3RhbmRhcmQgc3lzdGVtIGNhbGxzIGxpa2UgYG1vdW50YCwgYHN0YXRmc2AsIGBtbWFwYCwgYG9wZW5gLCBgZmFsbG9jYXRlYCwgYGZ0cnVuY2F0ZWAsIGFuZCBgbWVtZmRfY3JlYXRlYCDigJMgdGhhdCYjMzk7cyBhIHdpZGUgYXR0YWNrIHN1cmZhY2UuCgpUaGUgY29kZSBtb2RpZmljYXRpb25zIHRvdWNoIGNyaXRpY2FsIGFyZWFzLCBpbmNsdWRpbmcgc3VicG9vbCByZXNlcnZhdGlvbiBhY2NvdW50aW5nLCBlcnJvciBoYW5kbGluZyBwYXRocywgc3RhdGZzIGxvZ2ljLCBhbmQgdGhlIHN1YnBvb2wgZnJlZSBjb25kaXRpb24uIFRoYXQmIzM5O3MgYSBnb29kIHNpZ247IGNoYW5nZXMgaW4gdGhlc2UgYXJlYXMgb2Z0ZW4gZXhwb3NlIGludGVyZXN0aW5nIHZ1bG5lcmFiaWxpdGllcy4gU28sIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IGZvY3VzIHN5bWJvbHMuIE15IHF1aWNrIGNoZWNrIHJldmVhbHM6IGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLCBgYWxsb2NfaHVnZXRsYl9mb2xpb2AsIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AsIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AsIGFuZCBgaHVnZXRsYmZzX3N0YXRmc2AuCgpJJiMzOTtsbCBkb3VibGUtY2hlY2sgZm9yIG90aGVyIHJlbGV2YW50IHN5bWJvbHMgdGhhdCBhcmUgZGlyZWN0bHkgdG91Y2hlZC4gTG9va2luZyBhdCB0aGUgc291cmNlIGNvZGUsIEkgZmluZCB0aGVzZToKCiogICBgaHVnZXRsYmZzX3N0YXRmc2AgaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYAoqICAgYHN1YnBvb2xfaXNfZnJlZWAgaW4gYG1tL2h1Z2V0bGIuY2AgKHN0YXRpYyBpbmxpbmUpCiogICBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgIGluIGBtbS9odWdldGxiLmNgCiogICBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgIGluIGBtbS9odWdldGxiLmNgCiogICBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgaW4gYG1tL2h1Z2V0bGIuY2AKKiAgIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgIGluIGBtbS9odWdldGxiLmNgCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIGtleSBvbmUgaGVyZSBpcyBgSFVHRVRMQkZTYC4gSSBzZWUgdGhhdCBgSFVHRVRMQl9QQUdFYCBpcyBhbHNvIHJlbGF0ZWQgKGJlaW5nIGBkZWZfYm9vbCBIVUdFVExCRlNgKSwgYnV0IGBIVUdFVExCRlNgIGlzIHRoZSBtYWluIG9uZSB0aGF0IHRoZSB1c2VyIGNhbiBkaXJlY3RseSBlbmFibGUgdGhyb3VnaCB0aGUgbWVudWNvbmZpZy4KCkkmIzM5O2xsIHF1aWNrbHkgY29uZmlybSB0aGF0IGFueSBvdGhlciBjb25maWdzIGFyZSByZWxldmFudC4gSXQgbG9va3MgbGlrZSBgSFVHRVRMQkZTYCBkZXBlbmRzIG9uIGBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU2AsIHdoaWNoIGlzIGBkZWZfYm9vbCB5YCBvbiBhbWQ2NCAvIHg4Niwgd2hpY2ggaXMgZ29vZC4gU28sIGBIVUdFVExCRlNgIGlzIGluZGVlZCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGZsYWcuCgpOb3cgSSYjMzk7bSByZWFkeSB0byBjcmFmdCB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBJJiMzOTtsbCBuZWVkOgoKKiAgIGBFbmFibGVDb25maWdzYDogYFsmIzM0O0hVR0VUTEJGUyYjMzQ7XWAKKiAgIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7aHVnZXRsYl9yZXNlcnZlX3BhZ2VzJiMzNDssICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7LCAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzJiMzNDssICYjMzQ7aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMmIzM0OywgJiMzNDtodWdldGxiZnNfc3RhdGZzJiMzNDtdYAoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBhbHRlcnMgc3VicG9vbCBhY2NvdW50aW5nIGFuZCByZXNlcnZhdGlvbiB0cmFja2luZyBsb2dpYyB3aXRoaW4gaHVnZXRsYi9odWdldGxiZnMuIFNwZWNpZmljYWxseSwgaXQgdG91Y2hlcyBmdW5jdGlvbnMgbGlrZSBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgLCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgLCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBhbmQgYGh1Z2V0bGJmc19zdGF0ZnNgLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGh1Z2V0bGJmcyBmaWxlc3lzdGVtIGFuZCBtZW1vcnkgbWFwcGluZyBzeXN0ZW0gY2FsbHMuCiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgCgpBbHJpZ2h0LCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyYjMzQ7LAogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJmc19zdGF0ZnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3VicG9vbCBwYWdlIGFjY291bnRpbmcsIHJlc2VydmF0aW9uIGNhbGN1bGF0aW9uLCBhbmQgZXJyb3IgcmVjb3ZlcnkgbG9naWMgaW4gaHVnZXRsYmZzIGFuZCBjb3JlIGh1Z2V0bGIgbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMgKGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLCBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcywgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzLCBhbGxvY19odWdldGxiX2ZvbGlvLCBodWdldGxiZnNfc3RhdGZzKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5c2NhbGxzIHN1Y2ggYXMgbW1hcCwgb3BlbiwgZmFsbG9jYXRlLCBhbmQgc3RhdGZzIG9uIGh1Z2V0bGJmcywgbWFraW5nIHRoaXMgY29kZSB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9yZXNlcnZlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW8mIzM0OywKICAgICYjMzQ7aHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXRsYmZzX3N0YXRmcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzdWJwb29sIHBhZ2UgYWNjb3VudGluZywgcmVzZXJ2YXRpb24gY2FsY3VsYXRpb24sIGFuZCBlcnJvciByZWNvdmVyeSBsb2dpYyBpbiBodWdldGxiZnMgYW5kIGNvcmUgaHVnZXRsYiBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcyAoaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMsIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzLCBodWdldGxiX3Jlc2VydmVfcGFnZXMsIGFsbG9jX2h1Z2V0bGJfZm9saW8sIGh1Z2V0bGJmc19zdGF0ZnMpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3lzY2FsbHMgc3VjaCBhcyBtbWFwLCBvcGVuLCBmYWxsb2NhdGUsIGFuZCBzdGF0ZnMgb24gaHVnZXRsYmZzLCBtYWtpbmcgdGhpcyBjb2RlIHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGh1Z2V0bGIgc3VicG9vbCBhY2NvdW50aW5nIGFuZCByZXNlcnZhdGlvbiB0cmFja2luZyAoaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCwgYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCwgYW5kIGBtbS9odWdldGxiLmNgKS4gU3BlY2lmaWNhbGx5LCBpdCB0cmFja3MgYHVzZWRfaHBhZ2VzYCBjb25zaXN0ZW50bHkgd2hlbiBgbWF4X2hwYWdlc2AgaXMgdW5ib3VuZGVkICgtMSksIGZpeGVzIHJlcG9ydGluZyBpbiBgaHVnZXRsYmZzX3N0YXRmc2AsIGFuZCBzaW1wbGlmaWVzIHRoZSBlcnJvciByb2xsYmFjayBhcml0aG1ldGljIHdoZW4gb2J0YWluaW5nL3JlbGVhc2luZyBzdWJwb29sIHJlc2VydmF0aW9ucyBpbiBgYWxsb2NfaHVnZXRsYl9mb2xpbygpYCBhbmQgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYC5cblxuQWxsIG1vZGlmaWVkIHZhcmlhYmxlcyAoYGZyZWVfcGFnZXNgLCBgZ2JsX3Jlc3ZfZ2V0YCwgYGdibF9yZXN2X3B1dGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UgYWNyb3NzIGFsbCBjb250cm9sIGZsb3cgcGF0aHMsIGFuZCBubyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgaXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGluIHRoaXMgcGF0Y2ggd291bGQgaW52b2x2ZSBhY2NvdW50aW5nIGRpc2NyZXBhbmNpZXMsIG1lbW9yeSBsZWFrcywgb3IgY29uY3VycmVuY3kgaXNzdWVzLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGlhZ25vc3RpY3MsIGFzc2VydGlvbnMsIGFuZCBLQVNBTi9MT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDljM2M0NTE4MjhjYzg1ODFkY2YxNGQzMDU4YTNiNzRmNTYyNGI2MjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDIzOjU4OjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QKaW5kZXggYTQ5MTE1ZGIxOGM3Ni4uZDI0NDU4M2ZkY2JjMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CkBAIC0zMTQsMjEgJiM0MzszMTQsOCBAQCBodWdlIHBhZ2VzLiAgSWYgdGhleSBjYW4gbm90IGJlIHJlc2VydmVkLCB0aGUgbW91bnQgZmFpbHMuCiBUaGUgcm91dGluZXMgaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCkgYXJlIGNhbGxlZCB3aGVuIHBhZ2VzIGFyZQogb2J0YWluZWQgZnJvbSBvciByZWxlYXNlZCBiYWNrIHRvIGEgc3VicG9vbC4gIFRoZXkgcGVyZm9ybSBhbGwgc3VicG9vbAogYWNjb3VudGluZywgYW5kIHRyYWNrIGFueSByZXNlcnZhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sLgotaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzIGFyZSBwYXNzZWQgdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIGJ5IHdoaWNoCi10byBhZGp1c3QgdGhlIHN1YnBvb2wgJiMzOTt1c2VkIHBhZ2UmIzM5OyBjb3VudCAoZG93biBmb3IgZ2V0LCB1cCBmb3IgcHV0KS4gIE5vcm1hbGx5LAotdGhleSByZXR1cm4gdGhlIHNhbWUgdmFsdWUgdGhhdCB3YXMgcGFzc2VkIG9yIGFuIGVycm9yIGlmIG5vdCBlbm91Z2ggcGFnZXMKLWV4aXN0IGluIHRoZSBzdWJwb29sLgotCi1Ib3dldmVyLCBpZiByZXNlcnZlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sIGEgcmV0dXJuIHZhbHVlIGxlc3MKLXRoYW4gdGhlIHBhc3NlZCB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQuICBUaGlzIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgdGhlCi1udW1iZXIgb2YgYWRkaXRpb25hbCBnbG9iYWwgcG9vbCBhZGp1c3RtZW50cyB3aGljaCBtdXN0IGJlIG1hZGUuICBGb3IgZXhhbXBsZSwKLXN1cHBvc2UgYSBzdWJwb29sIGNvbnRhaW5zIDMgcmVzZXJ2ZWQgaHVnZSBwYWdlcyBhbmQgc29tZW9uZSBhc2tzIGZvciA1LgotVGhlIDMgcmVzZXJ2ZWQgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sIGNhbiBiZSB1c2VkIHRvIHNhdGlzZnkgcGFydAotb2YgdGhlIHJlcXVlc3QuICBCdXQsIDIgcGFnZXMgbXVzdCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBnbG9iYWwgcG9vbHMuICBUbwotcmVsYXkgdGhpcyBpbmZvcm1hdGlvbiB0byB0aGUgY2FsbGVyLCB0aGUgdmFsdWUgMiBpcyByZXR1cm5lZC4gIFRoZSBjYWxsZXIKLWlzIHRoZW4gcmVzcG9uc2libGUgZm9yIGF0dGVtcHRpbmcgdG8gb2J0YWluIHRoZSBhZGRpdGlvbmFsIHR3byBwYWdlcyBmcm9tCi10aGUgZ2xvYmFsIHBvb2xzLgotCiYjNDM7aHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCkgdXNlIHRoZSBudW1iZXIgb2YgaHVnZSBwYWdlcyBwYXNzZWQgdG8gYWRqdXN0CiYjNDM7dGhlIHN1YnBvb2wgJiMzOTt1c2VkIHBhZ2UmIzM5OyBjb3VudC4KIAogQ09XIGFuZCBSZXNlcnZhdGlvbnMKID09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdCBiL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CmluZGV4IDIwOTQ3ZjhiZDA2NTQuLmFlMWYxZjMxNDc3ZmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CkBAIC0yNDYsMTUgJiM0MzsyNDYsOCBAQCBodWdlcGFnZV9zdWJwb29s55qEbWluX2hwYWdlc+Wtl+auteS4reiiq+i3n+i4quOAguWcqOaMgui9veaXtu+8jGh1Z2V0bGJfYWNjdF9tZQog6KKr6LCD55So5Lul6aKE55WZ5oyH5a6a5pWw6YeP55qE5beo6aG144CC5aaC5p6c5a6D5Lus5LiN6IO96KKr6aKE55WZ77yM5oyC6L295bCx5Lya5aSx6LSl44CCCiAKIOW9k+S7juWtkOaxoOS4reiOt+WPluaIlumHiuaUvumhtemdouaXtu+8jOS8muiwg+eUqGh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygp5Ye95pWw44CCCi1odWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXPooqvkvKDpgJLnu5nlt6jpobXmlbDph4/vvIzku6XmraTmnaXosIPmlbTlrZDmsaDnmoQg4oCc5bey55So6aG16Z2i4oCdIOiuoeaVsAot77yIZ2V05Li65LiL6ZmN77yMcHV05Li65LiK5Y2H77yJ44CC6YCa5bi45oOF5Ya15LiL77yM5aaC5p6c5a2Q5rGg5Lit5rKh5pyJ6Laz5aSf55qE6aG16Z2i77yM5a6D5Lus5Lya6L+U5Zue5LiO5Lyg6YCS55qE55u45ZCM55qE5YC85oiWCi3kuIDkuKrplJnor6/jgIIKLQot54S26ICM77yM5aaC5p6c6aKE55WZ5LiO5a2Q5rGg55u45YWz6IGU77yM5Y+v6IO95Lya6L+U5Zue5LiA5Liq5bCP5LqO5Lyg6YCS5YC855qE6L+U5Zue5YC844CC6L+Z5Liq6L+U5Zue5YC86KGo56S65b+F6aG76L+b6KGM55qE6aKd5aSW5YWo5bGACi3msaDosIPmlbTnmoTmlbDph4/jgILkvovlpoLvvIzlgYforr7kuIDkuKrlrZDmsaDljIXlkKsz5Liq6aKE55WZ55qE5beo6aG177yM5pyJ5Lq66KaB5rGCNeS4quOAguS4juWtkOaxoOebuOWFs+eahDPkuKrpooTnlZnpobXlj6/ku6XnlKjmnaUKLea7oei2s+mDqOWIhuivt+axguOAguS9huaYr++8jOW/hemhu+S7juWFqOWxgOaxoOS4reiOt+W+lzLkuKrpobXpnaLjgILkuLrkuoblkJHosIPnlKjogIXovazovr7ov5nkuIDkv6Hmga/vvIzlsIbov5Tlm57lgLwy44CC54S25ZCO77yM6LCD55SoCi3ogIXopoHotJ/otKPku47lhajlsYDmsaDkuK3ojrflj5blj6blpJbkuKTkuKrpobXpnaLjgIIKLQomIzQzO+Wug+S7rOi0n+i0o+aJgOacieWtkOaxoOeahOe7n+iuoeaguOeul++8jOW5tui3n+i4quS4juWtkOaxoOebuOWFs+iBlOeahOmihOeVmeOAggomIzQzO2h1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygp5Ye95pWw5L2/55So5Lyg5YWl55qE5beo6aG15pWw6YeP5p2l6LCD5pW05a2Q5rGg55qE4oCc5bey55So6aG16Z2i4oCd6K6h5pWw44CCCiAKIENPV+WSjOmihOeVmQogPT09PT09PT09PQpkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCA3NjExYTg0NzBlYTI2Li41MTEzZjc0M2Y2ZmM3IDEwMDY0NAotLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9odWdldGxiZnMvaW5vZGUuYwpAQCAtMTEwOSw4ICYjNDM7MTEwOSwxMiBAQCBzdGF0aWMgaW50IGh1Z2V0bGJmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogCiAJCQlzcGluX2xvY2tfaXJxKCZhbXA7c2JpbmZvLSZndDtzcG9vbC0mZ3Q7bG9jayk7CiAJCQlidWYtJmd0O2ZfYmxvY2tzID0gc2JpbmZvLSZndDtzcG9vbC0mZ3Q7bWF4X2hwYWdlczsKLQkJCWZyZWVfcGFnZXMgPSBzYmluZm8tJmd0O3Nwb29sLSZndDttYXhfaHBhZ2VzCi0JCQkJLSBzYmluZm8tJmd0O3Nwb29sLSZndDt1c2VkX2hwYWdlczsKJiM0MzsJCQlpZiAoc2JpbmZvLSZndDtzcG9vbC0mZ3Q7bWF4X2hwYWdlcyA9PSAtMSkgewomIzQzOwkJCQlmcmVlX3BhZ2VzID0gLTE7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJZnJlZV9wYWdlcyA9IHNiaW5mby0mZ3Q7c3Bvb2wtJmd0O21heF9ocGFnZXMgLQomIzQzOwkJCQkJICAgICBzYmluZm8tJmd0O3Nwb29sLSZndDt1c2VkX2hwYWdlczsKJiM0MzsJCQl9CiAJCQlidWYtJmd0O2ZfYmF2YWlsID0gYnVmLSZndDtmX2JmcmVlID0gZnJlZV9wYWdlczsKIAkJCXNwaW5fdW5sb2NrX2lycSgmYW1wO3NiaW5mby0mZ3Q7c3Bvb2wtJmd0O2xvY2spOwogCQkJYnVmLSZndDtmX2ZpbGVzID0gc2JpbmZvLSZndDttYXhfaW5vZGVzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAppbmRleCAxNmM0YzRjYWExMjZjLi40NTUxZmYzMDIzNjQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaApAQCAtMzksOCAmIzQzOzM5LDggQEAgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgewogCXNwaW5sb2NrX3QgbG9jazsKIAlsb25nIGNvdW50OwogCWxvbmcgbWF4X2hwYWdlczsJLyogTWF4aW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1heGltdW0uICovCi0JbG9uZyB1c2VkX2hwYWdlczsJLyogVXNlZCBjb3VudCBhZ2FpbnN0IG1heGltdW0sIGluY2x1ZGVzICovCi0JCQkJLyogYm90aCBhbGxvY2F0ZWQgYW5kIHJlc2VydmVkIHBhZ2VzLiAqLwomIzQzOwlsb25nIHVzZWRfaHBhZ2VzOwkvKiBVc2VkIHBhZ2UgY291bnQsIGluY2x1ZGVzIGJvdGggKi8KJiM0MzsJCQkJLyogYWxsb2NhdGVkIGFuZCByZXNlcnZlZCBwYWdlcy4gKi8KIAlzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7CiAJbG9uZyBtaW5faHBhZ2VzOwkvKiBNaW5pbXVtIGh1Z2UgcGFnZXMgb3IgLTEgaWYgbm8gbWluaW11bS4gKi8KIAlsb25nIHJzdl9ocGFnZXM7CS8qIFBhZ2VzIHJlc2VydmVkIGFnYWluc3QgZ2xvYmFsIHBvb2wgdG8gKi8KZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA3ODU3NzI4NDU3OTUyLi5lMjRmODU2Yzk0OWMzIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC0xMzAsMTIgJiM0MzsxMzAsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc3VicG9vbF9pc19mcmVlKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCkKIHsKIAlpZiAoc3Bvb2wtJmd0O2NvdW50KQogCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xKQotCQlyZXR1cm4gc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzID09IDA7Ci0JaWYgKHNwb29sLSZndDttaW5faHBhZ2VzICE9IC0xKQotCQlyZXR1cm4gc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgPT0gc3Bvb2wtJmd0O21pbl9ocGFnZXM7CiAKLQlyZXR1cm4gdHJ1ZTsKJiM0MzsJcmV0dXJuIHNwb29sLSZndDt1c2VkX2hwYWdlcyA9PSAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCkBAIC0xOTMsMTMgJiM0MzsxODksMTggQEAgdm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpCiAJdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpOwogfQogCi0vKgotICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBhbGxvY2F0aW5nIGFuZCByZXNlcnZpbmcgcGFnZXMuCi0gKiBSZXR1cm4gLUVOT01FTSBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gc2F0aXNmeSB0aGUKLSAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZQotICogZ2xvYmFsIHBvb2xzIG11c3QgYmUgYWRqdXN0ZWQgKHVwd2FyZCkuICBUaGUgcmV0dXJuZWQgdmFsdWUgbWF5Ci0gKiBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKSBpbiB0aGUgY2FzZSB3aGVyZQotICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuCiYjNDM7LyoqCiYjNDM7ICogaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMgLSBHZXQgcGFnZXMgZnJvbSBhIHN1YnBvb2wKJiM0MzsgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKQomIzQzOyAqIEBkZWx0YTogbnVtYmVyIG9mIHBhZ2VzIHRvIGFsbG9jYXRlIG9yIHJlc2VydmUKJiM0MzsgKgomIzQzOyAqIENoZWNrIGFuZCB1cGRhdGUgc3VicG9vbCBwYWdlIHVzYWdlIGNvdW50cyB3aGVuIGFsbG9jYXRpbmcgb3IKJiM0MzsgKiByZXNlcnZpbmcgQGRlbHRhIGh1Z2VwYWdlcy4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IFRha2VzIHNwb29sLSZndDtsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnEoKS4KJiM0MzsgKiBSZXR1cm46IE5vbi1uZWdhdGl2ZSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgY2Fubm90IGJlCiYjNDM7ICogICAgICAgICBzYXRpc2ZpZWQgYnkgdGhlIHN1YnBvb2wsIG9yIC1FTk9NRU0gaWYgdGhlIHN1YnBvb2wgbWF4aW11bQomIzQzOyAqICAgICAgICAgbGltaXQgd291bGQgYmUgZXhjZWVkZWQuCiAgKi8KIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKIAkJCQkgICAgICBsb25nIGRlbHRhKQpAQCAtMjExLDE1ICYjNDM7MjEyLDE0IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKIAogCXNwaW5fbG9ja19pcnEoJmFtcDtzcG9vbC0mZ3Q7bG9jayk7CiAKLQlpZiAoc3Bvb2wtJmd0O21heF9ocGFnZXMgIT0gLTEpIHsJCS8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovCi0JCWlmICgoc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzICYjNDM7IGRlbHRhKSAmbHQ7PSBzcG9vbC0mZ3Q7bWF4X2hwYWdlcykKLQkJCXNwb29sLSZndDt1c2VkX2hwYWdlcyAmIzQzOz0gZGVsdGE7Ci0JCWVsc2UgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gdW5sb2NrX3JldDsKLQkJfQomIzQzOwlpZiAoc3Bvb2wtJmd0O21heF9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOwomIzQzOwkgICAgc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzICYjNDM7IGRlbHRhICZndDsgc3Bvb2wtJmd0O21heF9ocGFnZXMpIHsKJiM0MzsJCXJldCA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIHVubG9ja19yZXQ7CiAJfQogCiYjNDM7CXNwb29sLSZndDt1c2VkX2hwYWdlcyAmIzQzOz0gZGVsdGE7CiYjNDM7CiAJLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi8KIAlpZiAoc3Bvb2wtJmd0O21pbl9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOyBzcG9vbC0mZ3Q7cnN2X2hwYWdlcykgewogCQlpZiAoZGVsdGEgJmd0OyBzcG9vbC0mZ3Q7cnN2X2hwYWdlcykgewpAQCAtMjQwLDExICYjNDM7MjQwLDE5IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBmcmVlaW5nIGFuZCB1bnJlc2VydmluZyBwYWdlcy4KLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGdsb2JhbCBwYWdlIHJlc2VydmF0aW9ucyB0aGF0IG11c3QgYmUgZHJvcHBlZC4KLSAqIFRoZSByZXR1cm4gdmFsdWUgbWF5IG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpCi0gKiBpbiB0aGUgY2FzZSB3aGVyZSBhIHN1YnBvb2wgbWluaW11bSBzaXplIG11c3QgYmUgbWFpbnRhaW5lZC4KJiM0MzsvKioKJiM0MzsgKiBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyAtIFJlbGVhc2UgcGFnZXMgYmFjayB0byBhIHN1YnBvb2wKJiM0MzsgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKQomIzQzOyAqIEBkZWx0YTogbnVtYmVyIG9mIHBhZ2VzIHRvIGZyZWUgb3IgdW5yZXNlcnZlCiYjNDM7ICoKJiM0MzsgKiBDaGVjayBhbmQgdXBkYXRlIHN1YnBvb2wgcGFnZSB1c2FnZSBjb3VudHMgd2hlbiBmcmVlaW5nIG9yCiYjNDM7ICogdW5yZXNlcnZpbmcgQGRlbHRhIGh1Z2VwYWdlcy4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IFRha2VzIHNwb29sLSZndDtsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnFzYXZlKCkuIE1heSByZWxlYXNlCiYjNDM7ICogICAgICAgICAgYW5kIGZyZWUgQHNwb29sIGlmIGl0cyB1c2FnZSBjb3VudCBhbmQgcmVmZXJlbmNlcyByZWFjaAomIzQzOyAqICAgICAgICAgIHplcm8uCiYjNDM7ICogUmV0dXJuOiBOb24tbmVnYXRpdmUgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IHRoZSBzdWJwb29sIGNhbm5vdAomIzQzOyAqICAgICAgICAgYWJzb3JiLgogICovCiBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCiAJCQkJICAgICAgIGxvbmcgZGVsdGEpCkBAIC0yNTcsMTkgJiM0MzsyNjUsMjQgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzcG9vbC0mZ3Q7bG9jaywgZmxhZ3MpOwogCi0JaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xKQkJLyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi8KLQkJc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzIC09IGRlbHRhOwomIzQzOwlzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgLT0gZGVsdGE7CiAKIAkgLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi8KIAlpZiAoc3Bvb2wtJmd0O21pbl9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOyBzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgJmx0OyBzcG9vbC0mZ3Q7bWluX2hwYWdlcykgewotCQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0MzsgZGVsdGEgJmx0Oz0gc3Bvb2wtJmd0O21pbl9ocGFnZXMpCiYjNDM7CQkvKgomIzQzOwkJICogbGltaXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0CiYjNDM7CQkgKiBjYW4gYmUgcmVzdG9yZWQgdG8gdGhpcyBzdWJwb29sLgomIzQzOwkJICovCiYjNDM7CQlsb25nIGxpbWl0ID0gc3Bvb2wtJmd0O21pbl9ocGFnZXMgLSBzcG9vbC0mZ3Q7dXNlZF9ocGFnZXM7CiYjNDM7CiYjNDM7CQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0MzsgZGVsdGEgJmx0Oz0gbGltaXQpCiAJCQlyZXQgPSAwOwogCQllbHNlCi0JCQlyZXQgPSBzcG9vbC0mZ3Q7cnN2X2hwYWdlcyAmIzQzOyBkZWx0YSAtIHNwb29sLSZndDttaW5faHBhZ2VzOwomIzQzOwkJCXJldCA9IHNwb29sLSZndDtyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhIC0gbGltaXQ7CiAKIAkJc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0Mzs9IGRlbHRhOwotCQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJmd0OyBzcG9vbC0mZ3Q7bWluX2hwYWdlcykKLQkJCXNwb29sLSZndDtyc3ZfaHBhZ2VzID0gc3Bvb2wtJmd0O21pbl9ocGFnZXM7CiYjNDM7CQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJmd0OyBsaW1pdCkKJiM0MzsJCQlzcG9vbC0mZ3Q7cnN2X2hwYWdlcyA9IGxpbWl0OwogCX0KIAogCS8qCkBAIC0yOTQyLDcgJiM0MzsyOTU1LDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCXN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfdm1hKHZtYSk7CiAJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwotCWxvbmcgcmV0dmFsLCBnYmxfY2hnLCBnYmxfcmVzZXJ2ZTsKJiM0MzsJbG9uZyByZXR2YWwsIGdibF9yZXN2X2dldDsKIAltYXBfY2hnX3N0YXRlIG1hcF9jaGc7CiAJc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCBtcG9saTsKIAlnZnBfdCBnZnAgPSBodGxiX2FsbG9jX21hc2soaCk7CkBAIC0yOTgxLDggJiM0MzsyOTk0LDggQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCSAqIE9yIGlmIGl0IGNhbiBnZXQgb25lIGZyb20gdGhlIHBvb2wgcmVzZXJ2YXRpb24gZGlyZWN0bHkuCiAJICovCiAJaWYgKG1hcF9jaGcpIHsKLQkJZ2JsX2NoZyA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTsKLQkJaWYgKGdibF9jaGcgJmx0OyAwKSB7CiYjNDM7CQlnYmxfcmVzdl9nZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7CiYjNDM7CQlpZiAoZ2JsX3Jlc3ZfZ2V0ICZsdDsgMCkgewogCQkJcmV0ID0gLUVOT1NQQzsKIAkJCWdvdG8gb3V0X2VuZF9yZXNlcnZhdGlvbjsKIAkJfQpAQCAtMjk5MSw3ICYjNDM7MzAwNCw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJICogSWYgd2UgaGF2ZSB0aGUgdm1hIHJlc2VydmF0aW9uIHJlYWR5LCBubyBuZWVkIGZvciBleHRyYQogCQkgKiBnbG9iYWwgcmVzZXJ2YXRpb24uCiAJCSAqLwotCQlnYmxfY2hnID0gMDsKJiM0MzsJCWdibF9yZXN2X2dldCA9IDA7CiAJfQogCiAJLyoKQEAgLTMwMDIsMTAgJiM0MzszMDE1LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJYWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDsKIAogCS8qCi0JICogZ2JsX2NoZyA9PSAwIGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cyBmb3IgdGhpcwomIzQzOwkgKiBnYmxfcmVzdl9nZXQgPT0gMCBpbmRpY2F0ZXMgYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoaXMKIAkgKiBhbGxvY2F0aW9uLCBzbyB0cnkgdG8gdXNlIGl0LgogCSAqLwotCWlmIChnYmxfY2hnID09IDApCiYjNDM7CWlmIChnYmxfcmVzdl9nZXQgPT0gMCkKIAkJYWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19VU0VfR0xPQkFMX1JFU0VSVkFUSU9OUzsKIAogCS8qIFRha2VzIHJlZmVyZW5jZSBvbiBtcG9sLiAqLwpAQCAtMzA1OSwxMyAmIzQzOzMwNzIsMTAgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCXJldHVybiBmb2xpbzsKIAogb3V0X3N1YnBvb2xfcHV0OgotCS8qCi0JICogcHV0IHBhZ2UgdG8gc3VicG9vbCBpZmYgdGhlIHF1b3RhIG9mIHN1YnBvb2wmIzM5O3MgcnN2X2hwYWdlcyBpcyB1c2VkCi0JICogZHVyaW5nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLgotCSAqLwotCWlmIChtYXBfY2hnICZhbXA7JmFtcDsgIWdibF9jaGcpIHsKLQkJZ2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7Ci0JCWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTsKJiM0MzsJaWYgKG1hcF9jaGcpIHsKJiM0MzsJCWxvbmcgZ2JsX3Jlc3ZfcHV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpOwomIzQzOwomIzQzOwkJaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQpOwogCX0KIAogb3V0X2VuZF9yZXNlcnZhdGlvbjoKQEAgLTY2NjEsMTIgJiM0Mzs2NjcxLDE0IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpCiB7Ci0JbG9uZyBjaGcgPSAtMSwgYWRkID0gLTEsIHNwb29sX3Jlc3YsIGdibF9yZXN2OwomIzQzOwlsb25nIGNoZyA9IC0xLCBhZGQgPSAtMTsKIAlzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2lub2RlKGlub2RlKTsKIAlzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX2lub2RlKGlub2RlKTsKIAlzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwOwogCXN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZyA9IE5VTEw7Ci0JbG9uZyBnYmxfcmVzZXJ2ZSwgcmVnaW9uc19uZWVkZWQgPSAwOwomIzQzOwlsb25nIHJlZ2lvbnNfbmVlZGVkID0gMDsKJiM0MzsJbG9uZyBnYmxfcmVzdl9nZXQ7CiYjNDM7CWxvbmcgZ2JsX3Jlc3ZfcHV0OwogCWludCBlcnI7CiAKIAkvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KQEAgLTY3NDEsOSAmIzQzOzY3NTMsOSBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCSAqIHRoZSBzdWJwb29sIGhhcyBhIG1pbmltdW0gc2l6ZSwgdGhlcmUgbWF5IGJlIHNvbWUgZ2xvYmFsCiAJICogcmVzZXJ2YXRpb25zIGFscmVhZHkgaW4gcGxhY2UgKGdibF9yZXNlcnZlKS4KIAkgKi8KLQlnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpOwotCWlmIChnYmxfcmVzZXJ2ZSAmbHQ7IDApIHsKLQkJZXJyID0gZ2JsX3Jlc2VydmU7CiYjNDM7CWdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpOwomIzQzOwlpZiAoZ2JsX3Jlc3ZfZ2V0ICZsdDsgMCkgewomIzQzOwkJZXJyID0gZ2JsX3Jlc3ZfZ2V0OwogCQlnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXA7CiAJfQogCkBAIC02NzUxLDcgJiM0Mzs2NzYzLDcgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwKIAkgKiBDaGVjayBlbm91Z2ggaHVnZXBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSByZXNlcnZhdGlvbi4KIAkgKiBIYW5kIHRoZSBwYWdlcyBiYWNrIHRvIHRoZSBzdWJwb29sIGlmIHRoZXJlIGFyZSBub3QKIAkgKi8KLQllcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXNlcnZlKTsKJiM0MzsJZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQpOwogCWlmIChlcnIgJmx0OyAwKQogCQlnb3RvIG91dF9wdXRfcGFnZXM7CiAKQEAgLTY3NzAsNyAmIzQzOzY3ODIsNyBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQlhZGQgPSByZWdpb25fYWRkKHJlc3ZfbWFwLCBmcm9tLCB0bywgcmVnaW9uc19uZWVkZWQsIGgsIGhfY2cpOwogCiAJCWlmICh1bmxpa2VseShhZGQgJmx0OyAwKSkgewotCQkJaHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpOwomIzQzOwkJCWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXN2X2dldCk7CiAJCQllcnIgPSBhZGQ7CiAJCQlnb3RvIG91dF9wdXRfcGFnZXM7CiAJCX0gZWxzZSBpZiAodW5saWtlbHkoY2hnICZndDsgYWRkKSkgewpAQCAtNjgwNiwyNiAmIzQzOzY4MTgsMjEgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwKIAl9CiAJcmV0dXJuIGNoZzsKIAotb3V0X3B1dF9wYWdlczoKLQlzcG9vbF9yZXN2ID0gY2hnIC0gZ2JsX3Jlc2VydmU7Ci0JaWYgKHNwb29sX3Jlc3YpIHsKLQkJLyogcHV0IHN1YiBwb29sJiMzOTtzIHJlc2VydmF0aW9uIGJhY2ssIGNoZyAtIGdibF9yZXNlcnZlICovCi0JCWdibF9yZXN2ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHNwb29sX3Jlc3YpOwotCQkvKgotCQkgKiBzdWJwb29sJiMzOTtzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsCi0JCSAqIHJldHVybiB0byBoc3RhdGUuCi0JCSAqLwotCQlodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7Ci0JfQotCS8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqLwotCWlmIChnYmxfcmVzZXJ2ZSAmYW1wOyZhbXA7IHNwb29sKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7IG91dF9wdXRfcGFnZXM6CiYjNDM7CS8qCiYjNDM7CSAqIFJldHVybiBhbGwgdGhhdCB3YXMgcmVxdWVzdGVkIGZyb20gdGhlIHN1YnBvb2wsIGxldCBzdWJwb29sCiYjNDM7CSAqIHRlbGwgdXMgdGhlIG5ldyBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgbmVlZCB0byBiZQomIzQzOwkgKiByZXR1cm5lZCB0byB0aGUgZ2xvYmFsIHBvb2wuCiYjNDM7CSAqLwomIzQzOwlnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgY2hnKTsKJiM0MzsJLyoKJiM0MzsJICogVGhlcmUgbWF5IGJlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBudW1iZXIgb2YKJiM0MzsJICogcmVzZXJ2YXRpb25zIHRvIGNvbnN1bWUgYW5kIHRoZSBudW1iZXIgdG8gcmVzdG9yZSBub3cgaWYKJiM0MzsJICogdGhlcmUgYXJlIG11bHRpcGxlIHRocmVhZHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3VicG9vbCAtCiYjNDM7CSAqIHJlc3RvcmUgdGhlIGRpZmZlcmVuY2UuCiYjNDM7CSAqLwomIzQzOwlodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCAtIGdibF9yZXN2X3B1dCk7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzcG9vbC0mZ3Q7bG9jaywgZmxhZ3MpOwotCQlpZiAoc3Bvb2wtJmd0O21heF9ocGFnZXMgIT0gLTEpCi0JCQlzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgLT0gZ2JsX3Jlc2VydmU7Ci0JCXVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTsKLQl9CiBvdXRfdW5jaGFyZ2VfY2dyb3VwOgogCWh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSwKIAkJCQkJICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAyMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDYxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEh1Z2VUTEIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGl0cyBwb3RlbnRpYWwgaW1wYWN0LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zIHRoYXQgbWlnaHQgcmVxdWlyZSBLTVNBTiBzY3J1dGlueSwgb3IgaWYgaXQmIzM5O3MgcHJpbWFyaWx5IHJlbGF0ZWQgdG8gdGhlIGxvZ2ljYWwgZmxvdywgYWNjb3VudGluZywgY29uY3VycmVuY3ksIG9yIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBIdWdlVExCIHN5c3RlbS4KCkZpcnN0LCBJIHNlZSB0aGUgcGF0Y2ggbW9kaWZpZXMgZG9jdW1lbnRhdGlvbiBpbiBgRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdGAgYW5kIGl0cyB0cmFuc2xhdGlvbnMsIGZvY3VzaW5nIG9uIGBodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXNgLiBUaGF0JiMzOTtzIGdvb2QsIGJ1dCBub3QgdGhlIGNvcmUgb2YgbXkgYW5hbHlzaXMuCgpOZXh0LCBJIHNlZSBhIGNoYW5nZSBpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBodWdldGxiZnNfc3RhdGZzYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGZpeCBmb3IgaG93IGBmcmVlX3BhZ2VzYCBpcyBjYWxjdWxhdGVkIHdoZW4gYHNiaW5mby0mZ3Q7c3Bvb2wtJmd0O21heF9ocGFnZXNgIGlzIHNldCB0byBgLTFgLiBUaGUgb3JpZ2luYWwgbG9naWMgd2FzIHN1YnRyYWN0aW5nIHVzZWQgcGFnZXMgZXZlbiB3aGVuIHRoZXJlJiMzOTtzIGFuIHVuYm91bmRlZCBtYXhpbXVtLiBUaGUgbmV3IGNvZGUgZXhwbGljaXRseSBoYW5kbGVzIHRoZSBgLTFgIGNhc2UuIE5vdyBpdCBzZXRzIGBmcmVlX3BhZ2VzYCB0byBgLTFgIGRpcmVjdGx5IGluIHRoYXQgc2NlbmFyaW8sIHByZXNlcnZpbmcgdGhpcyBpbXBvcnRhbnQgYml0IG9mIGFjY291bnRpbmcuIFRoZSBjcnVjaWFsIGJpdCBoZXJlIGlzIHRvIGNvbmZpcm0gYGh1Z2V0bGJmc19zdGF0ZnNgIGl0c2VsZiBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBMb29raW5nIGF0IHRoZSBjb2RlIGZpbGxpbmcgdGhlIGBrc3RhdGZzYCBzdHJ1Y3QsIGl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBsZWF2ZSBhbnl0aGluZyB1bmluaXRpYWxpemVkLiBgYnVmLSZndDtmX2JhdmFpbGAgYW5kIGBidWYtJmd0O2ZfYmZyZWVgIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkIHRoZSBgZnJlZV9wYWdlc2AgdmFsdWUuIEkmIzM5O2xsIG1lbnRhbGx5IG5vdGUgdG8gZG91YmxlLWNoZWNrIGxpbmUgMTEwOSBvZiB0aGlzIGZpbGUgdG8gYmUgY2VydGFpbiBJIGhhdmUgbXkgZmFjdHMgc3RyYWlnaHQuCgpUaGUgYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCBjaGFuZ2UgaXMgYSBzaW1wbGUgY29tbWVudCB1cGRhdGUgZm9yIGBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbC51c2VkX2hwYWdlc2AgLSBubyByZWFsIGZ1bmN0aW9uYWwgaW1wYWN0IGhlcmUuCgpOb3csIHRoZSBtZWF0IG9mIHRoZSBtYXR0ZXI6IGBtbS9odWdldGxiLmNgLiAgSSBzZWUgc2V2ZXJhbCBmdW5jdGlvbiBjaGFuZ2VzOgotICAgYHN1YnBvb2xfaXNfZnJlZSgpYCBpcyBzaW1wbGlmaWVkIOKAkyBnb29kLCBjbGVhbiBjb2RlIGlzIGFsd2F5cyB3ZWxjb21lLgotICAgYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKClgIGFuZCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoKWAgbm93ICphbHdheXMqIGFkanVzdCBgc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzYCwgZXZlbiB3aGVuIGBtYXhfaHBhZ2VzYCBpcyBgLTFgLiBUaGUgcHJldmlvdXMgY29uZGl0aW9uYWwgYmVoYXZpb3IgbG9va2VkIHN1c3BpY2lvdXMuIEJ5IHJlbW92aW5nIGl0LCB0aGUgYWNjb3VudGluZyBpcyBzaW1wbGlmaWVkIGFuZCBub3cgY29uc2lzdGVudCBhY3Jvc3MgYWxsIGNhc2VzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IHRvIGNvbnNpZGVyLCBhcyBpdCBpcyBhIHBsYWNlIHdoZXJlIGVycm9ycyBhcmUgbGlrZWx5LCBzaG91bGQgdGhlIGxvZ2ljIGJlIGluY29ycmVjdC4gSXQgYXBwZWFycyB0aGF0IHRoZSBzdWJ0cmFjdGlvbiBvZiBgcnN2X2hwYWdlc2AgaXMgYWxzbyBiZWluZyB1cGRhdGVkIGZvciB0aGUgc2FtZSByZWFzb24uIFRoaXMgaXMgYSBwb2ludCB0byBub3RlLCBmb3Igc3VyZS4KLSAgIEZpbmFsbHksIGBhbGxvY19odWdldGxiX2ZvbGlvKClgIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgIGNvbnRhaW4gZXJyb3Igcm9sbGJhY2sgY2xlYW51cCBsb2dpYyBtb2RpZmljYXRpb25zLgoKT3ZlcmFsbCwgaXQgc2VlbXMgbGlrZSB0aGVzZSBjaGFuZ2VzIGFyZSBhaW1lZCBhdCB0aWdodGVuaW5nIHVwIHRoZSBhY2NvdW50aW5nIGxvZ2ljLCBoYW5kbGluZyB0aGUgYC0xYCBjYXNlIG1vcmUgZXhwbGljaXRseSwgYW5kIHBvdGVudGlhbGx5IHNpbXBsaWZ5aW5nIHRoZSBjb2RlLiBUaGUgZm9jdXMgc2VlbXMgdG8gYmUgb24gY29ycmVjdG5lc3MsIGFuZCB0aGVyZSBpcyBsZXNzIHJpc2sgb2YgbWVtb3J5IGVycm9ycy4gSG93ZXZlciwgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoZSBhY2NvdW50aW5nIGlzIGJlaW5nIHVzZWQsIGVzcGVjaWFsbHkgYXJvdW5kIHRob3NlIGB1c2VkX2hwYWdlc2AgYWRqdXN0bWVudHMgYW5kIHRoZSBgcnN2X2hwYWdlc2AgbGltaXQgY2FsY3VsYXRpb24sIHRvIGNvbmZpcm0gdGhlIG5ldyBsb2dpYyBpcyBzb3VuZC4gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGludGVnZXIgb3ZlcmZsb3dzIHRoYXQgbWF5IGV4aXN0LCBpZiBJIGhhdmUgYW55IGZ1cnRoZXIgY29uY2VybnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvaHVnZXRsYmZzL2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMDA6XHRcdGJ1Zi1cdTAwM2VmX2ZzaWQgPSB1NjRfdG9fZnNpZChpZCk7XG4xMTAxOlx0XHRidWYtXHUwMDNlZl90eXBlID0gSFVHRVRMQkZTX01BR0lDO1xuMTEwMjpcdFx0YnVmLVx1MDAzZWZfYnNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoKTtcbjExMDM6XHRcdGlmIChzYmluZm8pIHtcbjExMDQ6XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNnNiaW5mby1cdTAwM2VzdGF0X2xvY2spO1xuMTEwNTpcdFx0XHQvKiBJZiBubyBsaW1pdHMgc2V0LCBqdXN0IHJlcG9ydCAwIG9yIC0xIGZvciBtYXgvZnJlZS91c2VkXG4xMTA2Olx0XHRcdCAqIGJsb2NrcywgbGlrZSBzaW1wbGVfc3RhdGZzKCkgKi9cbjExMDc6XHRcdFx0aWYgKHNiaW5mby1cdTAwM2VzcG9vbCkge1xuMTEwODpcdFx0XHRcdGxvbmcgZnJlZV9wYWdlcztcbjExMDk6XHRcbjExMTA6XHRcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNnNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2Vsb2NrKTtcbjExMTE6XHRcdFx0XHRidWYtXHUwMDNlZl9ibG9ja3MgPSBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcztcbjExMTI6XHRcdFx0XHRpZiAoc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZW1heF9ocGFnZXMgPT0gLTEpIHtcbjExMTM6XHRcdFx0XHRcdGZyZWVfcGFnZXMgPSAtMTtcbjExMTQ6XHRcdFx0XHR9IGVsc2Uge1xuMTExNTpcdFx0XHRcdFx0ZnJlZV9wYWdlcyA9IHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzIC1cbjExMTY6XHRcdFx0XHRcdFx0ICAgICBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4xMTE3Olx0XHRcdFx0fVxuMTExODpcdFx0XHRcdGJ1Zi1cdTAwM2VmX2JhdmFpbCA9IGJ1Zi1cdTAwM2VmX2JmcmVlID0gZnJlZV9wYWdlcztcbjExMTk6XHRcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2c2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZWxvY2spO1xuMTEyMDpcdFx0XHRcdGJ1Zi1cdTAwM2VmX2ZpbGVzID0gc2JpbmZvLVx1MDAzZW1heF9pbm9kZXM7XG4xMTIxOlx0XHRcdFx0YnVmLVx1MDAzZWZfZmZyZWUgPSBzYmluZm8tXHUwMDNlZnJlZV9pbm9kZXM7XG4xMTIyOlx0XHRcdH1cbjExMjM6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXN0YXRfbG9jayk7XG4xMTI0Olx0XHR9XG4xMTI1Olx0XHRidWYtXHUwMDNlZl9uYW1lbGVuID0gTkFNRV9NQVg7XG4xMTI2Olx0XHRyZXR1cm4gMDtcbjExMjc6XHR9XG4xMTI4Olx0XG4xMTI5Olx0c3RhdGljIHZvaWQgaHVnZXRsYmZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuMTEzMDpcdHtcbjExMzE6XHRcdHN0cnVjdCBodWdldGxiZnNfc2JfaW5mbyAqc2JpID0gSFVHRVRMQkZTX1NCKHNiKTtcbjExMzI6XHRcbjExMzM6XHRcdGlmIChzYmkpIHtcbjExMzQ6XHRcdFx0c2ItXHUwMDNlc19mc19pbmZvID0gTlVMTDtcbjExMzU6XHRcbjExMzY6XHRcdFx0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc2JpLVx1MDAzZXNwb29sKTtcbjExMzc6XHRcbjExMzg6XHRcdFx0a2ZyZWUoc2JpKTtcbjExMzk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA0NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBIdWdlVExCIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBtZW1vcnkgYWxsb2NhdGlvbiBmbG93IGJldHRlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgSHVnZVRMQiBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY29yZSBmdW5jdGlvbnMuIExldCYjMzk7cyBzdGFydCB3aXRoIGBhbGxvY19odWdldGxiX2ZvbGlvYCBhbmQgdGhlbiBwaXZvdCB0byBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCBpbiBgbW0vaHVnZXRsYi5jYC4gTXkgaHVuY2ggaXMgdGhhdCB0aGVzZSBhcmUgdGhlIGtleSBwaWVjZXMgdG8gdW5yYXZlbCB0aGUgYWxsb2NhdGlvbiBwdXp6bGUuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgcmVzZXJ2ZXMgdGhlIHBoeXNpY2FsIHBhZ2VzIGFuZCBob3cgaXQgaGFuZGxlcyB0aGUgZm9saW8gYWxsb2NhdGlvbiBpdHNlbGYuIEFyZSB0aGVyZSBhbnkgY29udGVudGlvbiBwb2ludHMgaGVyZSwgb3IgbWF5YmUgYW55IHVudXN1YWwgZXJyb3IgcGF0aHMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IExldCYjMzk7cyBnZXQgdG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IGluc2lnaHRzIGl0IHByb3ZpZGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjk1MDpcdCAqIFdoZW4gaXQmIzM5O3Mgc2V0LCB0aGUgYWxsb2NhdGlvbiB3aWxsIGJ5cGFzcyBhbGwgdm1hIGxldmVsIHJlc2VydmF0aW9ucy5cbjI5NTE6XHQgKi9cbjI5NTI6XHRzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4yOTUzOlx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGNvd19mcm9tX293bmVyKVxuMjk1NDpcdHtcbjI5NTU6XHRcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfdm1hKHZtYSk7XG4yOTU2Olx0XHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpO1xuMjk1NzpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbjI5NTg6XHRcdGxvbmcgcmV0dmFsLCBnYmxfcmVzdl9nZXQ7XG4yOTU5Olx0XHRtYXBfY2hnX3N0YXRlIG1hcF9jaGc7XG4yOTYwOlx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkIG1wb2xpO1xuMjk2MTpcdFx0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuMjk2MjpcdFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcbjI5NjM6XHRcdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xuMjk2NDpcdFx0dTggYWxsb2NfZmxhZ3MgPSAwO1xuMjk2NTpcdFx0aW50IG5pZDtcbjI5NjY6XHRcdGludCByZXQ7XG4yOTY3Olx0XG4yOTY4Olx0XHQvKiBXaGV0aGVyIHdlIG5lZWQgYSBzZXBhcmF0ZSBwZXItdm1hIHJlc2VydmF0aW9uPyAqL1xuMjk2OTpcdFx0aWYgKGNvd19mcm9tX293bmVyKSB7XG4yOTcwOlx0XHRcdC8qXG4yOTcxOlx0XHRcdCAqIFNwZWNpYWwgY2FzZSEgIFNpbmNlIGl0JiMzOTtzIGEgQ29XIG9uIHRvcCBvZiBhIHJlc2VydmVkXG4yOTcyOlx0XHRcdCAqIHBhZ2UsIHRoZSBwcml2YXRlIHJlc3YgbWFwIGRvZXNuJiMzOTt0IGNvdW50LiAgU28gaXQgY2Fubm90XG4yOTczOlx0XHRcdCAqIGNvbnN1bWUgdGhlIHBlci12bWEgcmVzdiBtYXAgZXZlbiBpZiBpdCYjMzk7cyByZXNlcnZlZC5cbjI5NzQ6XHRcdFx0ICovXG4yOTc1Olx0XHRcdG1hcF9jaGcgPSBNQVBfQ0hHX0VORk9SQ0VEO1xuMjk3NjpcdFx0fSBlbHNlIHtcbjI5Nzc6XHRcdFx0LypcbjI5Nzg6XHRcdFx0ICogRXhhbWluZSB0aGUgcmVnaW9uL3Jlc2VydmUgbWFwIHRvIGRldGVybWluZSBpZiB0aGUgcHJvY2Vzc1xuMjk3OTpcdFx0XHQgKiBoYXMgYSByZXNlcnZhdGlvbiBmb3IgdGhlIHBhZ2UgdG8gYmUgYWxsb2NhdGVkLiAgQSByZXR1cm5cbjI5ODA6XHRcdFx0ICogY29kZSBvZiB6ZXJvIGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cyAobm8gY2hhbmdlKS5cbjI5ODE6XHRcdFx0ICovXG4yOTgyOlx0XHRcdHJldHZhbCA9IHZtYV9uZWVkc19yZXNlcnZhdGlvbihoLCB2bWEsIGFkZHIpO1xuMjk4MzpcdFx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuMjk4NDpcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuMjk4NTpcdFx0XHRtYXBfY2hnID0gcmV0dmFsID8gTUFQX0NIR19ORUVERUQgOiBNQVBfQ0hHX1JFVVNFO1xuMjk4NjpcdFx0fVxuMjk4NzpcdFxuMjk4ODpcdFx0LypcbjI5ODk6XHRcdCAqIFdoZXRoZXIgd2UgbmVlZCBhIHNlcGFyYXRlIGdsb2JhbCByZXNlcnZhdGlvbj9cbjI5OTA6XHRcdCAqXG4yOTkxOlx0XHQgKiBQcm9jZXNzZXMgdGhhdCBkaWQgbm90IGNyZWF0ZSB0aGUgbWFwcGluZyB3aWxsIGhhdmUgbm9cbjI5OTI6XHRcdCAqIHJlc2VydmVzIGFzIGluZGljYXRlZCBieSB0aGUgcmVnaW9uL3Jlc2VydmUgbWFwLiBDaGVja1xuMjk5MzpcdFx0ICogdGhhdCB0aGUgYWxsb2NhdGlvbiB3aWxsIG5vdCBleGNlZWQgdGhlIHN1YnBvb2wgbGltaXQuXG4yOTk0Olx0XHQgKiBPciBpZiBpdCBjYW4gZ2V0IG9uZSBmcm9tIHRoZSBwb29sIHJlc2VydmF0aW9uIGRpcmVjdGx5LlxuMjk5NTpcdFx0ICovXG4yOTk2Olx0XHRpZiAobWFwX2NoZykge1xuMjk5NzpcdFx0XHRnYmxfcmVzdl9nZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7XG4yOTk4Olx0XHRcdGlmIChnYmxfcmVzdl9nZXQgXHUwMDNjIDApIHtcbjI5OTk6XHRcdFx0XHRyZXQgPSAtRU5PU1BDO1xuMzAwMDpcdFx0XHRcdGdvdG8gb3V0X2VuZF9yZXNlcnZhdGlvbjtcbjMwMDE6XHRcdFx0fVxuMzAwMjpcdFx0fSBlbHNlIHtcbjMwMDM6XHRcdFx0LypcbjMwMDQ6XHRcdFx0ICogSWYgd2UgaGF2ZSB0aGUgdm1hIHJlc2VydmF0aW9uIHJlYWR5LCBubyBuZWVkIGZvciBleHRyYVxuMzAwNTpcdFx0XHQgKiBnbG9iYWwgcmVzZXJ2YXRpb24uXG4zMDA2Olx0XHRcdCAqL1xuMzAwNzpcdFx0XHRnYmxfcmVzdl9nZXQgPSAwO1xuMzAwODpcdFx0fVxuMzAwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDIxOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgcGlja2luZyB1cCB3aGVyZSB3ZSBsZWZ0IG9mZiwgYXMgdGhvdWdoIEkmIzM5O20gZXhhbWluaW5nIHRoaXMgY29kZToKCioqRGl2aW5nIEJhY2sgaW50byBgYWxsb2NfaHVnZXRsYl9mb2xpb2AqKgoKT2theSwgc28gd2UmIzM5O3JlIGNvbnRpbnVpbmcgb3VyIGRlZXAgZGl2ZSBpbnRvIGBhbGxvY19odWdldGxiX2ZvbGlvYC4gV2UmIzM5O3ZlIGFscmVhZHkgbG9va2VkIGF0IHNvbWUga2V5IGFzcGVjdHMsIGJ1dCBsZXQmIzM5O3MgbWFrZSBzdXJlIHdlIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsIGluIHRoaXMgZnVuY3Rpb24uIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgY29yZSBwaWVjZSBvZiBodWdlIHBhZ2UgYWxsb2NhdGlvbiwgc28gYSB0aG9yb3VnaCByZXZpZXcgaXMgYWx3YXlzIHdhcnJhbnRlZCwgZXZlbiBpZiB3ZSAqdGhpbmsqIHdlIGtub3cgaXQgd2VsbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1vZGVsIG9mIGl0cyBmbG93IGFuZCBpbnRlcmFjdGlvbnMsIHBlcmhhcHMgdHJhY2luZyBpdCB0aHJvdWdoIGEgZmV3IGRpZmZlcmVudCBzY2VuYXJpb3MgaW4gbXkgaGVhZCwgZm9jdXNpbmcgb24gZWRnZSBjYXNlcywgYW5kIGVuc3VyaW5nIGFsbCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcHJpbWl0aXZlcyBhcmUgdXNlZCBjb3JyZWN0bHkuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zLCBvciBwb3RlbnRpYWwgZGVhZGxvY2tzLCBlc3BlY2lhbGx5IHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9uLiBJJiMzOTtsbCBtZW50YWxseSBzdGVwIHRocm91Z2ggdGhlIGNvZGUsIGZvY3VzaW5nIG9uIGxvY2tpbmcsIGVycm9yIGhhbmRsaW5nLCBhbmQgcmVzb3VyY2UgY2xlYW51cCB0byBjb25maXJtIHRoZXJlIGFyZSBubyBvdmVybG9va2VkIGlzc3VlcyB0aGF0IGNvdWxkIGNhdXNlIHNpZ25pZmljYW50IHByb2JsZW1zIGRvd24gdGhlIGxpbmUuIEkga25vdyB0aGVyZSYjMzk7cyBhIGxvdCBwYWNrZWQgaW50byB0aGlzIGZ1bmN0aW9uLCBidXQgSSBhbSBnb2luZyB0byBtYWtlIHN1cmUgdGhhdCBubyBkZXRhaWwgaXMgbG9zdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwNTA6XHRcdFx0LypcbjMwNTE6XHRcdFx0ICogQ2hlY2sgZm9yIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucy4gV2hlbiBpdCBoYXBwZW5zLi5cbjMwNTI6XHRcdFx0ICogVGhlIHBhZ2Ugd2FzIGFkZGVkIHRvIHRoZSByZXNlcnZhdGlvbiBtYXAgYmV0d2VlblxuMzA1MzpcdFx0XHQgKiB2bWFfbmVlZHNfcmVzZXJ2YXRpb24gYW5kIHZtYV9jb21taXRfcmVzZXJ2YXRpb24uXG4zMDU0Olx0XHRcdCAqIFRoaXMgaW5kaWNhdGVzIGEgcmFjZSB3aXRoIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcy5cbjMwNTU6XHRcdFx0ICogQWRqdXN0IGZvciB0aGUgc3VicG9vbCBjb3VudCBpbmNyZW1lbnRlZCBhYm92ZSBBTkRcbjMwNTY6XHRcdFx0ICogaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzIGZvciB0aGUgc2FtZSBwYWdlLlx0QWxzbyxcbjMwNTc6XHRcdFx0ICogdGhlIHJlc2VydmF0aW9uIGNvdW50IGFkZGVkIGluIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1xuMzA1ODpcdFx0XHQgKiBubyBsb25nZXIgYXBwbGllcy5cbjMwNTk6XHRcdFx0ICovXG4zMDYwOlx0XHRcdGlmICh1bmxpa2VseShtYXBfY2hnID09IE1BUF9DSEdfTkVFREVEIFx1MDAyNlx1MDAyNiByZXR2YWwgPT0gMCkpIHtcbjMwNjE6XHRcdFx0XHRsb25nIHJzdl9hZGp1c3Q7XG4zMDYyOlx0XG4zMDYzOlx0XHRcdFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbjMwNjQ6XHRcdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1yc3ZfYWRqdXN0KTtcbjMwNjU6XHRcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4zMDY2Olx0XHRcdFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfZm9saW9fcnN2ZChcbjMwNjc6XHRcdFx0XHQgICAgaHN0YXRlX2luZGV4KGgpLCBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBmb2xpbyk7XG4zMDY4Olx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4zMDY5Olx0XHRcdH1cbjMwNzA6XHRcdH1cbjMwNzE6XHRcbjMwNzI6XHRcdHJldHVybiBmb2xpbztcbjMwNzM6XHRcbjMwNzQ6XHRvdXRfc3VicG9vbF9wdXQ6XG4zMDc1Olx0XHRpZiAobWFwX2NoZykge1xuMzA3NjpcdFx0XHRsb25nIGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbjMwNzc6XHRcbjMwNzg6XHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQpO1xuMzA3OTpcdFx0fVxuMzA4MDpcdFxuMzA4MTpcdG91dF9lbmRfcmVzZXJ2YXRpb246XG4zMDgyOlx0XHRpZiAobWFwX2NoZyAhPSBNQVBfQ0hHX0VORk9SQ0VEKVxuMzA4MzpcdFx0XHR2bWFfZW5kX3Jlc2VydmF0aW9uKGgsIHZtYSwgYWRkcik7XG4zMDg0Olx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuMzA4NTpcdH1cbjMwODY6XHRcbjMwODc6XHRzdGF0aWMgX19pbml0IHZvaWQgKmFsbG9jX2Jvb3RtZW0oc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZCwgYm9vbCBub2RlX2V4YWN0KVxuMzA4ODpcdHtcbjMwODk6XHRcdGlmIChodWdldGxiX2Vhcmx5X2NtYShoKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExOTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipEaXZpbmcgaW50byBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCoqCgpPa2F5LCB0aW1lIHRvIHplcm8gaW4gb24gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AuIExldCYjMzk7cyBzcGVjaWZpY2FsbHkgY2hlY2sgdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDY3NDAgdG8gNjg0MC4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBzZWN0aW9uIGhhbmRsZXMgcGFnZSByZXNlcnZhdGlvbiDigJMgdGhlIGZpbmVyIGRldGFpbHMgb2YgaG93IGl0IGFsbG9jYXRlcyBodWdlIHBhZ2VzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgYW5kIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgZWRnZSBjYXNlcy4gVGhlcmUgbWlnaHQgYmUgc29tZSBzdWJ0bGUgaW50ZXJwbGF5IHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mIGluIHRoaXMgcmVnaW9uLiBUaGlzJiMzOTtsbCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaXRzIGJlaGF2aW9yLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjc0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NzQwOlx0XHRcdFx0XHRjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBcdTAwMjZoX2NnKTtcbjY3NDE6XHRcdGlmIChlcnIgXHUwMDNjIDApXG42NzQyOlx0XHRcdGdvdG8gb3V0X2VycjtcbjY3NDM6XHRcbjY3NDQ6XHRcdGlmICh2bWEgXHUwMDI2XHUwMDI2ICF2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpIFx1MDAyNlx1MDAyNiBoX2NnKSB7XG42NzQ1Olx0XHRcdC8qIEZvciBwcml2YXRlIG1hcHBpbmdzLCB0aGUgaHVnZXRsYl9jZ3JvdXAgdW5jaGFyZ2UgaW5mbyBoYW5nc1xuNjc0NjpcdFx0XHQgKiBvZiB0aGUgcmVzdl9tYXAuXG42NzQ3Olx0XHRcdCAqL1xuNjc0ODpcdFx0XHRyZXN2X21hcF9zZXRfaHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfaW5mbyhyZXN2X21hcCwgaF9jZywgaCk7XG42NzQ5Olx0XHR9XG42NzUwOlx0XG42NzUxOlx0XHQvKlxuNjc1MjpcdFx0ICogVGhlcmUgbXVzdCBiZSBlbm91Z2ggcGFnZXMgaW4gdGhlIHN1YnBvb2wgZm9yIHRoZSBtYXBwaW5nLiBJZlxuNjc1MzpcdFx0ICogdGhlIHN1YnBvb2wgaGFzIGEgbWluaW11bSBzaXplLCB0aGVyZSBtYXkgYmUgc29tZSBnbG9iYWxcbjY3NTQ6XHRcdCAqIHJlc2VydmF0aW9ucyBhbHJlYWR5IGluIHBsYWNlIChnYmxfcmVzZXJ2ZSkuXG42NzU1Olx0XHQgKi9cbjY3NTY6XHRcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpO1xuNjc1NzpcdFx0aWYgKGdibF9yZXN2X2dldCBcdTAwM2MgMCkge1xuNjc1ODpcdFx0XHRlcnIgPSBnYmxfcmVzdl9nZXQ7XG42NzU5Olx0XHRcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDtcbjY3NjA6XHRcdH1cbjY3NjE6XHRcbjY3NjI6XHRcdC8qXG42NzYzOlx0XHQgKiBDaGVjayBlbm91Z2ggaHVnZXBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSByZXNlcnZhdGlvbi5cbjY3NjQ6XHRcdCAqIEhhbmQgdGhlIHBhZ2VzIGJhY2sgdG8gdGhlIHN1YnBvb2wgaWYgdGhlcmUgYXJlIG5vdFxuNjc2NTpcdFx0ICovXG42NzY2Olx0XHRlcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCk7XG42NzY3Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuNjc2ODpcdFx0XHRnb3RvIG91dF9wdXRfcGFnZXM7XG42NzY5Olx0XG42NzcwOlx0XHQvKlxuNjc3MTpcdFx0ICogQWNjb3VudCBmb3IgdGhlIHJlc2VydmF0aW9ucyBtYWRlLiBTaGFyZWQgbWFwcGluZ3MgcmVjb3JkIHJlZ2lvbnNcbjY3NzI6XHRcdCAqIHRoYXQgaGF2ZSByZXNlcnZhdGlvbnMgYXMgdGhleSBhcmUgc2hhcmVkIGJ5IG11bHRpcGxlIFZNQXMuXG42NzczOlx0XHQgKiBXaGVuIHRoZSBsYXN0IFZNQSBkaXNhcHBlYXJzLCB0aGUgcmVnaW9uIG1hcCBzYXlzIGhvdyBtdWNoXG42Nzc0Olx0XHQgKiB0aGUgcmVzZXJ2YXRpb24gd2FzIGFuZCB0aGUgcGFnZSBjYWNoZSB0ZWxscyBob3cgbXVjaCBvZlxuNjc3NTpcdFx0ICogdGhlIHJlc2VydmF0aW9uIHdhcyBjb25zdW1lZC4gUHJpdmF0ZSBtYXBwaW5ncyBhcmUgcGVyLVZNQSBhbmRcbjY3NzY6XHRcdCAqIG9ubHkgdGhlIGNvbnN1bWVkIHJlc2VydmF0aW9ucyBhcmUgdHJhY2tlZC4gV2hlbiB0aGUgVk1BXG42Nzc3Olx0XHQgKiBkaXNhcHBlYXJzLCB0aGUgb3JpZ2luYWwgcmVzZXJ2YXRpb24gaXMgdGhlIFZNQSBzaXplIGFuZCB0aGVcbjY3Nzg6XHRcdCAqIGNvbnN1bWVkIHJlc2VydmF0aW9ucyBhcmUgc3RvcmVkIGluIHRoZSBtYXAuIEhlbmNlLCBub3RoaW5nXG42Nzc5Olx0XHQgKiBlbHNlIGhhcyB0byBiZSBkb25lIGZvciBwcml2YXRlIG1hcHBpbmdzIGhlcmVcbjY3ODA6XHRcdCAqL1xuNjc4MTpcdFx0aWYgKCF2bWEgfHwgdm1hX3Rlc3Qodm1hLCBWTUFfTUFZU0hBUkVfQklUKSkge1xuNjc4MjpcdFx0XHRhZGQgPSByZWdpb25fYWRkKHJlc3ZfbWFwLCBmcm9tLCB0bywgcmVnaW9uc19uZWVkZWQsIGgsIGhfY2cpO1xuNjc4MzpcdFxuNjc4NDpcdFx0XHRpZiAodW5saWtlbHkoYWRkIFx1MDAzYyAwKSkge1xuNjc4NTpcdFx0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXN2X2dldCk7XG42Nzg2Olx0XHRcdFx0ZXJyID0gYWRkO1xuNjc4NzpcdFx0XHRcdGdvdG8gb3V0X3B1dF9wYWdlcztcbjY3ODg6XHRcdFx0fSBlbHNlIGlmICh1bmxpa2VseShjaGcgXHUwMDNlIGFkZCkpIHtcbjY3ODk6XHRcdFx0XHQvKlxuNjc5MDpcdFx0XHRcdCAqIHBhZ2VzIGluIHRoaXMgcmFuZ2Ugd2VyZSBhZGRlZCB0byB0aGUgcmVzZXJ2ZVxuNjc5MTpcdFx0XHRcdCAqIG1hcCBiZXR3ZWVuIHJlZ2lvbl9jaGcgYW5kIHJlZ2lvbl9hZGQuICBUaGlzXG42NzkyOlx0XHRcdFx0ICogaW5kaWNhdGVzIGEgcmFjZSB3aXRoIGFsbG9jX2h1Z2V0bGJfZm9saW8uICBBZGp1c3RcbjY3OTM6XHRcdFx0XHQgKiB0aGUgc3VicG9vbCBhbmQgcmVzZXJ2ZSBjb3VudHMgbW9kaWZpZWQgYWJvdmVcbjY3OTQ6XHRcdFx0XHQgKiBiYXNlZCBvbiB0aGUgZGlmZmVyZW5jZS5cbjY3OTU6XHRcdFx0XHQgKi9cbjY3OTY6XHRcdFx0XHRsb25nIHJzdl9hZGp1c3Q7XG42Nzk3Olx0XG42Nzk4Olx0XHRcdFx0LypcbjY3OTk6XHRcdFx0XHQgKiBodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZCgpIHdpbGwgcHV0IHRoZVxuNjgwMDpcdFx0XHRcdCAqIHJlZmVyZW5jZSB0byBoX2NnLVx1MDAzZWNzcy4gU2VlIGNvbW1lbnQgYmVsb3cgZm9yIGRldGFpbC5cbjY4MDE6XHRcdFx0XHQgKi9cbjY4MDI6XHRcdFx0XHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChcbjY4MDM6XHRcdFx0XHRcdGhzdGF0ZV9pbmRleChoKSxcbjY4MDQ6XHRcdFx0XHRcdChjaGcgLSBhZGQpICogcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgaF9jZyk7XG42ODA1Olx0XG42ODA2Olx0XHRcdFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLFxuNjgwNzpcdFx0XHRcdFx0XHRcdFx0XHRjaGcgLSBhZGQpO1xuNjgwODpcdFx0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLXJzdl9hZGp1c3QpO1xuNjgwOTpcdFx0XHR9IGVsc2UgaWYgKGhfY2cpIHtcbjY4MTA6XHRcdFx0XHQvKlxuNjgxMTpcdFx0XHRcdCAqIFRoZSBmaWxlX3JlZ2lvbnMgd2lsbCBob2xkIHRoZWlyIG93biByZWZlcmVuY2UgdG9cbjY4MTI6XHRcdFx0XHQgKiBoX2NnLVx1MDAzZWNzcy4gU28gd2Ugc2hvdWxkIHJlbGVhc2UgdGhlIHJlZmVyZW5jZSBoZWxkXG42ODEzOlx0XHRcdFx0ICogdmlhIGh1Z2V0bGJfY2dyb3VwX2NoYXJnZV9jZ3JvdXBfcnN2ZCgpIHdoZW4gd2UgYXJlXG42ODE0Olx0XHRcdFx0ICogZG9uZS5cbjY4MTU6XHRcdFx0XHQgKi9cbjY4MTY6XHRcdFx0XHRodWdldGxiX2Nncm91cF9wdXRfcnN2ZF9jZ3JvdXAoaF9jZyk7XG42ODE3Olx0XHRcdH1cbjY4MTg6XHRcdH1cbjY4MTk6XHRcdHJldHVybiBjaGc7XG42ODIwOlx0XG42ODIxOlx0IG91dF9wdXRfcGFnZXM6XG42ODIyOlx0XHQvKlxuNjgyMzpcdFx0ICogUmV0dXJuIGFsbCB0aGF0IHdhcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc3VicG9vbCwgbGV0IHN1YnBvb2xcbjY4MjQ6XHRcdCAqIHRlbGwgdXMgdGhlIG5ldyBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgbmVlZCB0byBiZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgxMQoJCQkJCQkJb3V0cHV0OiAyNTAKCQkJCQkJCXRob3VnaHRzOiA2MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gdnMuIEtBU0FOIEFuYWx5c2lzIG9mIEh1Z2VUTEIgU3VicG9vbCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEgS01TQU4vS0FTQU4gcGVyc3BlY3RpdmUsIEkgbmVlZCB0byBhbmFseXplIHRoaXMgcGF0Y2ggZm9jdXNpbmcgb24gbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEZpcnN0LCB0aGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgaHVnZXBhZ2Vfc3VicG9vbGAgYWNjb3VudGluZyBsb2dpYywgYW5kIGZpeGVzIGhvdyBzdWJwb29sIHVzYWdlIGlzIHRyYWNrZWQsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgdW5ib3VuZGVkIHN1YnBvb2xzLgoKU3BlY2lmaWNhbGx5LCBJIHNlZSBmb3VyIGtleSBjaGFuZ2VzOiBmaXJzdCwgYHVzZWRfaHBhZ2VzYCBpcyBub3cgdHJhY2tlZCBldmVuIHdoZW4gYG1heF9ocGFnZXNgIGlzbiYjMzk7dCByZXN0cmljdGVkLiBTZWNvbmQsIGBodWdldGxiZnNfc3RhdGZzYCBnZXRzIGEgdHdlYWsg4oCTIGlmIGBtYXhfaHBhZ2VzYCBpcyB1bmJvdW5kZWQsIGBmcmVlX3BhZ2VzYCBnZXRzIHNldCB0byAtMSwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciByZXByZXNlbnRpbmcgdW5saW1pdGVkIGF2YWlsYWJpbGl0eS4gVGhpcmQsIGl0IGNsZWFucyB1cCBob3cgcGFnZSByZXNlcnZhdGlvbnMgYXJlIG1hbmFnZWQgZHVyaW5nIGBnZXRgIGFuZCBgcHV0YCBvcGVyYXRpb25zLCBhbmQgYWRqdXN0cyB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYC4gRmluYWxseSwgdGhlIGRvY3VtZW50YXRpb24gYW5kIGNvbW1lbnRzIGFyZSB1cGRhdGVkIGFjY29yZGluZ2x5LgoKTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMuIFJlZ2FyZGluZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW4gYGh1Z2V0bGJmc19zdGF0ZnNgLCBgZnJlZV9wYWdlc2AgbG9va3MgdG8gYmUgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LCBnZXR0aW5nIGFzc2lnbmVkIGluIGJvdGggYnJhbmNoZXMgb2YgdGhlIGlmIHN0YXRlbWVudCBiZWZvcmUgYmVpbmcgdXNlZC4gU2ltaWxhcmx5LCBpbiBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgYW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLCBgZ2JsX3Jlc3ZfZ2V0YCBhbmQgYGdibF9yZXN2X3B1dGAgYXBwZWFyIHRvIGJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGV2ZW4gaW4gdGhlIGVycm9yIHBhdGhzLiBJIGFtIG5vdCBzZWVpbmcgYW55IG5ldyBzdHJ1Y3QgcGFkZGluZyBvciBtZW1vcnkgY29waWVzIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgYmVpbmcgcmVhZCwgbm9yIGRvIEkgc2VlIGFueSBjaGFuZ2VzIHRvIGJ1ZmZlciBzaXplIG1hbmlwdWxhdGlvbiB0aGF0IGNvdWxkIGxlYWQgdG8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpGcm9tIGEgYnVnIGludHJvZHVjdGlvbiBwZXJzcGVjdGl2ZSwgaXQgbG9va3MgbGlrZSBhbnl0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBhY2NvdW50aW5nIGVycm9ycywgcmVzZXJ2YXRpb24gaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIGxvY2tpbmcgcHJvYmxlbXMgc2hvdWxkIGJlIGNhdWdodCBieSBrZXJuZWwgYXNzZXJ0aW9ucywgcmVmY291bnQgdHJhY2tpbmcsIG9yIG90aGVyIHRvb2xzLiBJIGFtIG5vdCBzZWVpbmcgYW55IGRpcmVjdCBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbnkga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MgZWl0aGVyLgoKVGhlcmVmb3JlLCBhZnRlciByZXZpZXdpbmcgYWxsIG9mIHRoaXMsIHRoZSBsaWtlbGlob29kIG9mIHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgaXNzdWVzIHRoYXQgS01TQU4gd291bGQgY2F0Y2ggc2VlbXMgbG93LiBUaGUgTmVlZEtNU0FOIGZsYWcgc2hvdWxkIGJlIGZhbHNlLiBOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSByZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBodWdldGxiIHN1YnBvb2wgYWNjb3VudGluZyBhbmQgcmVzZXJ2YXRpb24gdHJhY2tpbmcgKGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2AsIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAsIGFuZCBgbW0vaHVnZXRsYi5jYCkuIFNwZWNpZmljYWxseSwgaXQgdHJhY2tzIGB1c2VkX2hwYWdlc2AgY29uc2lzdGVudGx5IHdoZW4gYG1heF9ocGFnZXNgIGlzIHVuYm91bmRlZCAoLTEpLCBmaXhlcyByZXBvcnRpbmcgaW4gYGh1Z2V0bGJmc19zdGF0ZnNgLCBhbmQgc2ltcGxpZmllcyB0aGUgZXJyb3Igcm9sbGJhY2sgYXJpdGhtZXRpYyB3aGVuIG9idGFpbmluZy9yZWxlYXNpbmcgc3VicG9vbCByZXNlcnZhdGlvbnMgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW8oKWAgYW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAuXG5cbkFsbCBtb2RpZmllZCB2YXJpYWJsZXMgKGBmcmVlX3BhZ2VzYCwgYGdibF9yZXN2X2dldGAsIGBnYmxfcmVzdl9wdXRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGFjcm9zcyBhbGwgY29udHJvbCBmbG93IHBhdGhzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBvciB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nIGlzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBpbiB0aGlzIHBhdGNoIHdvdWxkIGludm9sdmUgYWNjb3VudGluZyBkaXNjcmVwYW5jaWVzLCBtZW1vcnkgbGVha3MsIG9yIGNvbmN1cnJlbmN5IGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRpYWdub3N0aWNzLCBhc3NlcnRpb25zLCBhbmQgS0FTQU4vTE9DS0RFUC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgaHVnZXRsYiBzdWJwb29sIGFjY291bnRpbmcgYW5kIHJlc2VydmF0aW9uIHRyYWNraW5nIChpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLCBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLCBhbmQgYG1tL2h1Z2V0bGIuY2ApLiBTcGVjaWZpY2FsbHksIGl0IHRyYWNrcyBgdXNlZF9ocGFnZXNgIGNvbnNpc3RlbnRseSB3aGVuIGBtYXhfaHBhZ2VzYCBpcyB1bmJvdW5kZWQgKC0xKSwgZml4ZXMgcmVwb3J0aW5nIGluIGBodWdldGxiZnNfc3RhdGZzYCwgYW5kIHNpbXBsaWZpZXMgdGhlIGVycm9yIHJvbGxiYWNrIGFyaXRobWV0aWMgd2hlbiBvYnRhaW5pbmcvcmVsZWFzaW5nIHN1YnBvb2wgcmVzZXJ2YXRpb25zIGluIGBhbGxvY19odWdldGxiX2ZvbGlvKClgIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgLlxuXG5BbGwgbW9kaWZpZWQgdmFyaWFibGVzIChgZnJlZV9wYWdlc2AsIGBnYmxfcmVzdl9nZXRgLCBgZ2JsX3Jlc3ZfcHV0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBhY3Jvc3MgYWxsIGNvbnRyb2wgZmxvdyBwYXRocywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgaW4gdGhpcyBwYXRjaCB3b3VsZCBpbnZvbHZlIGFjY291bnRpbmcgZGlzY3JlcGFuY2llcywgbWVtb3J5IGxlYWtzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkaWFnbm9zdGljcywgYXNzZXJ0aW9ucywgYW5kIEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1ODozMy42NjExMzc5OTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzE0MjczMzgzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX3Jlc2VydmVfcGFnZXNcIixcbiAgICBcImFsbG9jX2h1Z2V0bGJfZm9saW9cIixcbiAgICBcImh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzXCIsXG4gICAgXCJodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc1wiLFxuICAgIFwiaHVnZXRsYmZzX3N0YXRmc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGh1Z2V0bGIgc3VicG9vbCBhY2NvdW50aW5nIGFuZCByZXNlcnZhdGlvbiB0cmFja2luZyAoaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCwgYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCwgYW5kIGBtbS9odWdldGxiLmNgKS4gU3BlY2lmaWNhbGx5LCBpdCB0cmFja3MgYHVzZWRfaHBhZ2VzYCBjb25zaXN0ZW50bHkgd2hlbiBgbWF4X2hwYWdlc2AgaXMgdW5ib3VuZGVkICgtMSksIGZpeGVzIHJlcG9ydGluZyBpbiBgaHVnZXRsYmZzX3N0YXRmc2AsIGFuZCBzaW1wbGlmaWVzIHRoZSBlcnJvciByb2xsYmFjayBhcml0aG1ldGljIHdoZW4gb2J0YWluaW5nL3JlbGVhc2luZyBzdWJwb29sIHJlc2VydmF0aW9ucyBpbiBgYWxsb2NfaHVnZXRsYl9mb2xpbygpYCBhbmQgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYC5cXG5cXG5BbGwgbW9kaWZpZWQgdmFyaWFibGVzIChgZnJlZV9wYWdlc2AsIGBnYmxfcmVzdl9nZXRgLCBgZ2JsX3Jlc3ZfcHV0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBhY3Jvc3MgYWxsIGNvbnRyb2wgZmxvdyBwYXRocywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgaW4gdGhpcyBwYXRjaCB3b3VsZCBpbnZvbHZlIGFjY291bnRpbmcgZGlzY3JlcGFuY2llcywgbWVtb3J5IGxlYWtzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkaWFnbm9zdGljcywgYXNzZXJ0aW9ucywgYW5kIEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN1YnBvb2wgcGFnZSBhY2NvdW50aW5nLCByZXNlcnZhdGlvbiBjYWxjdWxhdGlvbiwgYW5kIGVycm9yIHJlY292ZXJ5IGxvZ2ljIGluIGh1Z2V0bGJmcyBhbmQgY29yZSBodWdldGxiIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmVzIChodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcywgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMsIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcywgYWxsb2NfaHVnZXRsYl9mb2xpbywgaHVnZXRsYmZzX3N0YXRmcykuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNjYWxscyBzdWNoIGFzIG1tYXAsIG9wZW4sIGZhbGxvY2F0ZSwgYW5kIHN0YXRmcyBvbiBodWdldGxiZnMsIG1ha2luZyB0aGlzIGNvZGUgd2VsbC1zdWl0ZWQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU4OjMzLjY2MTE0MjQ2M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIyMTMwODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWMzYzQ1MTgyOGNjODU4MWRjZjE0ZDMwNThhM2I3NGY1NjI0YjYyN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDIzOjU4OjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XFxuaW5kZXggYTQ5MTE1ZGIxOGM3Ni4uZDI0NDU4M2ZkY2JjMyAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxcbkBAIC0zMTQsMjEgKzMxNCw4IEBAIGh1Z2UgcGFnZXMuICBJZiB0aGV5IGNhbiBub3QgYmUgcmVzZXJ2ZWQsIHRoZSBtb3VudCBmYWlscy5cXG4gVGhlIHJvdXRpbmVzIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygpIGFyZSBjYWxsZWQgd2hlbiBwYWdlcyBhcmVcXG4gb2J0YWluZWQgZnJvbSBvciByZWxlYXNlZCBiYWNrIHRvIGEgc3VicG9vbC4gIFRoZXkgcGVyZm9ybSBhbGwgc3VicG9vbFxcbiBhY2NvdW50aW5nLCBhbmQgdHJhY2sgYW55IHJlc2VydmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHN1YnBvb2wuXFxuLWh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcyBhcmUgcGFzc2VkIHRoZSBudW1iZXIgb2YgaHVnZSBwYWdlcyBieSB3aGljaFxcbi10byBhZGp1c3QgdGhlIHN1YnBvb2wgJ3VzZWQgcGFnZScgY291bnQgKGRvd24gZm9yIGdldCwgdXAgZm9yIHB1dCkuICBOb3JtYWxseSxcXG4tdGhleSByZXR1cm4gdGhlIHNhbWUgdmFsdWUgdGhhdCB3YXMgcGFzc2VkIG9yIGFuIGVycm9yIGlmIG5vdCBlbm91Z2ggcGFnZXNcXG4tZXhpc3QgaW4gdGhlIHN1YnBvb2wuXFxuLVxcbi1Ib3dldmVyLCBpZiByZXNlcnZlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sIGEgcmV0dXJuIHZhbHVlIGxlc3NcXG4tdGhhbiB0aGUgcGFzc2VkIHZhbHVlIG1heSBiZSByZXR1cm5lZC4gIFRoaXMgcmV0dXJuIHZhbHVlIGluZGljYXRlcyB0aGVcXG4tbnVtYmVyIG9mIGFkZGl0aW9uYWwgZ2xvYmFsIHBvb2wgYWRqdXN0bWVudHMgd2hpY2ggbXVzdCBiZSBtYWRlLiAgRm9yIGV4YW1wbGUsXFxuLXN1cHBvc2UgYSBzdWJwb29sIGNvbnRhaW5zIDMgcmVzZXJ2ZWQgaHVnZSBwYWdlcyBhbmQgc29tZW9uZSBhc2tzIGZvciA1Llxcbi1UaGUgMyByZXNlcnZlZCBwYWdlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHN1YnBvb2wgY2FuIGJlIHVzZWQgdG8gc2F0aXNmeSBwYXJ0XFxuLW9mIHRoZSByZXF1ZXN0LiAgQnV0LCAyIHBhZ2VzIG11c3QgYmUgb2J0YWluZWQgZnJvbSB0aGUgZ2xvYmFsIHBvb2xzLiAgVG9cXG4tcmVsYXkgdGhpcyBpbmZvcm1hdGlvbiB0byB0aGUgY2FsbGVyLCB0aGUgdmFsdWUgMiBpcyByZXR1cm5lZC4gIFRoZSBjYWxsZXJcXG4taXMgdGhlbiByZXNwb25zaWJsZSBmb3IgYXR0ZW1wdGluZyB0byBvYnRhaW4gdGhlIGFkZGl0aW9uYWwgdHdvIHBhZ2VzIGZyb21cXG4tdGhlIGdsb2JhbCBwb29scy5cXG4tXFxuK2h1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygpIHVzZSB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMgcGFzc2VkIHRvIGFkanVzdFxcbit0aGUgc3VicG9vbCAndXNlZCBwYWdlJyBjb3VudC5cXG4gXFxuIENPVyBhbmQgUmVzZXJ2YXRpb25zXFxuID09PT09PT09PT09PT09PT09PT09XFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0IGIvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcXG5pbmRleCAyMDk0N2Y4YmQwNjU0Li5hZTFmMWYzMTQ3N2ZjIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcXG5AQCAtMjQ2LDE1ICsyNDYsOCBAQCBodWdlcGFnZV9zdWJwb29s55qEbWluX2hwYWdlc+Wtl+auteS4reiiq+i3n+i4quOAguWcqOaMgui9veaXtu+8jGh1Z2V0bGJfYWNjdF9tZVxcbiDooqvosIPnlKjku6XpooTnlZnmjIflrprmlbDph4/nmoTlt6jpobXjgILlpoLmnpzlroPku6zkuI3og73ooqvpooTnlZnvvIzmjILovb3lsLHkvJrlpLHotKXjgIJcXG4gXFxuIOW9k+S7juWtkOaxoOS4reiOt+WPluaIlumHiuaUvumhtemdouaXtu+8jOS8muiwg+eUqGh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygp5Ye95pWw44CCXFxuLWh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlc+iiq+S8oOmAkue7meW3qOmhteaVsOmHj++8jOS7peatpOadpeiwg+aVtOWtkOaxoOeahCDigJzlt7LnlKjpobXpnaLigJ0g6K6h5pWwXFxuLe+8iGdldOS4uuS4i+mZje+8jHB1dOS4uuS4iuWNh++8ieOAgumAmuW4uOaDheWGteS4i++8jOWmguaenOWtkOaxoOS4reayoeaciei2s+Wkn+eahOmhtemdou+8jOWug+S7rOS8mui/lOWbnuS4juS8oOmAkueahOebuOWQjOeahOWAvOaIllxcbi3kuIDkuKrplJnor6/jgIJcXG4tXFxuLeeEtuiAjO+8jOWmguaenOmihOeVmeS4juWtkOaxoOebuOWFs+iBlO+8jOWPr+iDveS8mui/lOWbnuS4gOS4quWwj+S6juS8oOmAkuWAvOeahOi/lOWbnuWAvOOAgui/meS4qui/lOWbnuWAvOihqOekuuW/hemhu+i/m+ihjOeahOmineWkluWFqOWxgFxcbi3msaDosIPmlbTnmoTmlbDph4/jgILkvovlpoLvvIzlgYforr7kuIDkuKrlrZDmsaDljIXlkKsz5Liq6aKE55WZ55qE5beo6aG177yM5pyJ5Lq66KaB5rGCNeS4quOAguS4juWtkOaxoOebuOWFs+eahDPkuKrpooTnlZnpobXlj6/ku6XnlKjmnaVcXG4t5ruh6Laz6YOo5YiG6K+35rGC44CC5L2G5piv77yM5b+F6aG75LuO5YWo5bGA5rGg5Lit6I635b6XMuS4qumhtemdouOAguS4uuS6huWQkeiwg+eUqOiAhei9rOi+vui/meS4gOS/oeaBr++8jOWwhui/lOWbnuWAvDLjgILnhLblkI7vvIzosIPnlKhcXG4t6ICF6KaB6LSf6LSj5LuO5YWo5bGA5rGg5Lit6I635Y+W5Y+m5aSW5Lik5Liq6aG16Z2i44CCXFxuLVxcbivlroPku6zotJ/otKPmiYDmnInlrZDmsaDnmoTnu5/orqHmoLjnrpfvvIzlubbot5/ouKrkuI7lrZDmsaDnm7jlhbPogZTnmoTpooTnlZnjgIJcXG4raHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCnlh73mlbDkvb/nlKjkvKDlhaXnmoTlt6jpobXmlbDph4/mnaXosIPmlbTlrZDmsaDnmoTigJzlt7LnlKjpobXpnaLigJ3orqHmlbDjgIJcXG4gXFxuIENPV+WSjOmihOeVmVxcbiA9PT09PT09PT09XFxuZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcXG5pbmRleCA3NjExYTg0NzBlYTI2Li41MTEzZjc0M2Y2ZmM3IDEwMDY0NFxcbi0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXFxuKysrIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcXG5AQCAtMTEwOSw4ICsxMTA5LDEyIEBAIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXFxuIFxcbiBcXHRcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNwb29sLVxcdTAwM2Vsb2NrKTtcXG4gXFx0XFx0XFx0YnVmLVxcdTAwM2VmX2Jsb2NrcyA9IHNiaW5mby1cXHUwMDNlc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXM7XFxuLVxcdFxcdFxcdGZyZWVfcGFnZXMgPSBzYmluZm8tXFx1MDAzZXNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzXFxuLVxcdFxcdFxcdFxcdC0gc2JpbmZvLVxcdTAwM2VzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXM7XFxuK1xcdFxcdFxcdGlmIChzYmluZm8tXFx1MDAzZXNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzID09IC0xKSB7XFxuK1xcdFxcdFxcdFxcdGZyZWVfcGFnZXMgPSAtMTtcXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0ZnJlZV9wYWdlcyA9IHNiaW5mby1cXHUwMDNlc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgLVxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHNiaW5mby1cXHUwMDNlc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGJ1Zi1cXHUwMDNlZl9iYXZhaWwgPSBidWYtXFx1MDAzZWZfYmZyZWUgPSBmcmVlX3BhZ2VzO1xcbiBcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnNiaW5mby1cXHUwMDNlc3Bvb2wtXFx1MDAzZWxvY2spO1xcbiBcXHRcXHRcXHRidWYtXFx1MDAzZWZfZmlsZXMgPSBzYmluZm8tXFx1MDAzZW1heF9pbm9kZXM7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG5pbmRleCAxNmM0YzRjYWExMjZjLi40NTUxZmYzMDIzNjQwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG5AQCAtMzksOCArMzksOCBAQCBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCB7XFxuIFxcdHNwaW5sb2NrX3QgbG9jaztcXG4gXFx0bG9uZyBjb3VudDtcXG4gXFx0bG9uZyBtYXhfaHBhZ2VzO1xcdC8qIE1heGltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtYXhpbXVtLiAqL1xcbi1cXHRsb25nIHVzZWRfaHBhZ2VzO1xcdC8qIFVzZWQgY291bnQgYWdhaW5zdCBtYXhpbXVtLCBpbmNsdWRlcyAqL1xcbi1cXHRcXHRcXHRcXHQvKiBib3RoIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovXFxuK1xcdGxvbmcgdXNlZF9ocGFnZXM7XFx0LyogVXNlZCBwYWdlIGNvdW50LCBpbmNsdWRlcyBib3RoICovXFxuK1xcdFxcdFxcdFxcdC8qIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovXFxuIFxcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZTtcXG4gXFx0bG9uZyBtaW5faHBhZ2VzO1xcdC8qIE1pbmltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtaW5pbXVtLiAqL1xcbiBcXHRsb25nIHJzdl9ocGFnZXM7XFx0LyogUGFnZXMgcmVzZXJ2ZWQgYWdhaW5zdCBnbG9iYWwgcG9vbCB0byAqL1xcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcXG5pbmRleCA3ODU3NzI4NDU3OTUyLi5lMjRmODU2Yzk0OWMzIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGIuY1xcbisrKyBiL21tL2h1Z2V0bGIuY1xcbkBAIC0xMzAsMTIgKzEzMCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzdWJwb29sX2lzX2ZyZWUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxcbiB7XFxuIFxcdGlmIChzcG9vbC1cXHUwMDNlY291bnQpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0aWYgKHNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxcbi1cXHRcXHRyZXR1cm4gc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzID09IDA7XFxuLVxcdGlmIChzcG9vbC1cXHUwMDNlbWluX2hwYWdlcyAhPSAtMSlcXG4tXFx0XFx0cmV0dXJuIHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzID09IHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzO1xcbiBcXG4tXFx0cmV0dXJuIHRydWU7XFxuK1xcdHJldHVybiBzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbkBAIC0xOTMsMTMgKzE4OSwxOCBAQCB2b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcXG4gXFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGFsbG9jYXRpbmcgYW5kIHJlc2VydmluZyBwYWdlcy5cXG4tICogUmV0dXJuIC1FTk9NRU0gaWYgdGhlcmUgYXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIHRvIHNhdGlzZnkgdGhlXFxuLSAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZVxcbi0gKiBnbG9iYWwgcG9vbHMgbXVzdCBiZSBhZGp1c3RlZCAodXB3YXJkKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBtYXlcXG4tICogb25seSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgcGFzc2VkIHZhbHVlIChkZWx0YSkgaW4gdGhlIGNhc2Ugd2hlcmVcXG4tICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXFxuKy8qKlxcbisgKiBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyAtIEdldCBwYWdlcyBmcm9tIGEgc3VicG9vbFxcbisgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKVxcbisgKiBAZGVsdGE6IG51bWJlciBvZiBwYWdlcyB0byBhbGxvY2F0ZSBvciByZXNlcnZlXFxuKyAqXFxuKyAqIENoZWNrIGFuZCB1cGRhdGUgc3VicG9vbCBwYWdlIHVzYWdlIGNvdW50cyB3aGVuIGFsbG9jYXRpbmcgb3JcXG4rICogcmVzZXJ2aW5nIEBkZWx0YSBodWdlcGFnZXMuXFxuKyAqXFxuKyAqIENvbnRleHQ6IFRha2VzIHNwb29sLVxcdTAwM2Vsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnEoKS5cXG4rICogUmV0dXJuOiBOb24tbmVnYXRpdmUgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IGNhbm5vdCBiZVxcbisgKiAgICAgICAgIHNhdGlzZmllZCBieSB0aGUgc3VicG9vbCwgb3IgLUVOT01FTSBpZiB0aGUgc3VicG9vbCBtYXhpbXVtXFxuKyAqICAgICAgICAgbGltaXQgd291bGQgYmUgZXhjZWVkZWQuXFxuICAqL1xcbiBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGxvbmcgZGVsdGEpXFxuQEAgLTIxMSwxNSArMjEyLDE0IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcXG4gXFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnNwb29sLVxcdTAwM2Vsb2NrKTtcXG4gXFxuLVxcdGlmIChzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSkge1xcdFxcdC8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovXFxuLVxcdFxcdGlmICgoc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzICsgZGVsdGEpIFxcdTAwM2M9IHNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzKVxcbi1cXHRcXHRcXHRzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgKz0gZGVsdGE7XFxuLVxcdFxcdGVsc2Uge1xcbi1cXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbi1cXHRcXHRcXHRnb3RvIHVubG9ja19yZXQ7XFxuLVxcdFxcdH1cXG4rXFx0aWYgKHNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzICE9IC0xIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgKyBkZWx0YSBcXHUwMDNlIHNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gdW5sb2NrX3JldDtcXG4gXFx0fVxcbiBcXG4rXFx0c3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzICs9IGRlbHRhO1xcbitcXG4gXFx0LyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi9cXG4gXFx0aWYgKHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzICE9IC0xIFxcdTAwMjZcXHUwMDI2IHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzKSB7XFxuIFxcdFxcdGlmIChkZWx0YSBcXHUwMDNlIHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzKSB7XFxuQEAgLTI0MCwxMSArMjQwLDE5IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tLypcXG4tICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBmcmVlaW5nIGFuZCB1bnJlc2VydmluZyBwYWdlcy5cXG4tICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZ2xvYmFsIHBhZ2UgcmVzZXJ2YXRpb25zIHRoYXQgbXVzdCBiZSBkcm9wcGVkLlxcbi0gKiBUaGUgcmV0dXJuIHZhbHVlIG1heSBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKVxcbi0gKiBpbiB0aGUgY2FzZSB3aGVyZSBhIHN1YnBvb2wgbWluaW11bSBzaXplIG11c3QgYmUgbWFpbnRhaW5lZC5cXG4rLyoqXFxuKyAqIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzIC0gUmVsZWFzZSBwYWdlcyBiYWNrIHRvIGEgc3VicG9vbFxcbisgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKVxcbisgKiBAZGVsdGE6IG51bWJlciBvZiBwYWdlcyB0byBmcmVlIG9yIHVucmVzZXJ2ZVxcbisgKlxcbisgKiBDaGVjayBhbmQgdXBkYXRlIHN1YnBvb2wgcGFnZSB1c2FnZSBjb3VudHMgd2hlbiBmcmVlaW5nIG9yXFxuKyAqIHVucmVzZXJ2aW5nIEBkZWx0YSBodWdlcGFnZXMuXFxuKyAqXFxuKyAqIENvbnRleHQ6IFRha2VzIHNwb29sLVxcdTAwM2Vsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnFzYXZlKCkuIE1heSByZWxlYXNlXFxuKyAqICAgICAgICAgIGFuZCBmcmVlIEBzcG9vbCBpZiBpdHMgdXNhZ2UgY291bnQgYW5kIHJlZmVyZW5jZXMgcmVhY2hcXG4rICogICAgICAgICAgemVyby5cXG4rICogUmV0dXJuOiBOb24tbmVnYXRpdmUgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IHRoZSBzdWJwb29sIGNhbm5vdFxcbisgKiAgICAgICAgIGFic29yYi5cXG4gICovXFxuIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGxvbmcgZGVsdGEpXFxuQEAgLTI1NywxOSArMjY1LDI0IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcXG4gXFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzcG9vbC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXG4tXFx0aWYgKHNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxcdFxcdC8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovXFxuLVxcdFxcdHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyAtPSBkZWx0YTtcXG4rXFx0c3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzIC09IGRlbHRhO1xcbiBcXG4gXFx0IC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovXFxuIFxcdGlmIChzcG9vbC1cXHUwMDNlbWluX2hwYWdlcyAhPSAtMSBcXHUwMDI2XFx1MDAyNiBzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgXFx1MDAzYyBzcG9vbC1cXHUwMDNlbWluX2hwYWdlcykge1xcbi1cXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgKyBkZWx0YSBcXHUwMDNjPSBzcG9vbC1cXHUwMDNlbWluX2hwYWdlcylcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogbGltaXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0XFxuK1xcdFxcdCAqIGNhbiBiZSByZXN0b3JlZCB0byB0aGlzIHN1YnBvb2wuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRsb25nIGxpbWl0ID0gc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMgLSBzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXM7XFxuK1xcbitcXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgKyBkZWx0YSBcXHUwMDNjPSBsaW1pdClcXG4gXFx0XFx0XFx0cmV0ID0gMDtcXG4gXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRyZXQgPSBzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIC0gc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXM7XFxuK1xcdFxcdFxcdHJldCA9IHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzICsgZGVsdGEgLSBsaW1pdDtcXG4gXFxuIFxcdFxcdHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzICs9IGRlbHRhO1xcbi1cXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgXFx1MDAzZSBzcG9vbC1cXHUwMDNlbWluX2hwYWdlcylcXG4tXFx0XFx0XFx0c3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgPSBzcG9vbC1cXHUwMDNlbWluX2hwYWdlcztcXG4rXFx0XFx0aWYgKHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzIFxcdTAwM2UgbGltaXQpXFxuK1xcdFxcdFxcdHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzID0gbGltaXQ7XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuQEAgLTI5NDIsNyArMjk1NSw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF92bWEodm1hKTtcXG4gXFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4tXFx0bG9uZyByZXR2YWwsIGdibF9jaGcsIGdibF9yZXNlcnZlO1xcbitcXHRsb25nIHJldHZhbCwgZ2JsX3Jlc3ZfZ2V0O1xcbiBcXHRtYXBfY2hnX3N0YXRlIG1hcF9jaGc7XFxuIFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgbXBvbGk7XFxuIFxcdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKTtcXG5AQCAtMjk4MSw4ICsyOTk0LDggQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHQgKiBPciBpZiBpdCBjYW4gZ2V0IG9uZSBmcm9tIHRoZSBwb29sIHJlc2VydmF0aW9uIGRpcmVjdGx5LlxcbiBcXHQgKi9cXG4gXFx0aWYgKG1hcF9jaGcpIHtcXG4tXFx0XFx0Z2JsX2NoZyA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTtcXG4tXFx0XFx0aWYgKGdibF9jaGcgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTtcXG4rXFx0XFx0aWYgKGdibF9yZXN2X2dldCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0cmV0ID0gLUVOT1NQQztcXG4gXFx0XFx0XFx0Z290byBvdXRfZW5kX3Jlc2VydmF0aW9uO1xcbiBcXHRcXHR9XFxuQEAgLTI5OTEsNyArMzAwNCw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0ICogSWYgd2UgaGF2ZSB0aGUgdm1hIHJlc2VydmF0aW9uIHJlYWR5LCBubyBuZWVkIGZvciBleHRyYVxcbiBcXHRcXHQgKiBnbG9iYWwgcmVzZXJ2YXRpb24uXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRnYmxfY2hnID0gMDtcXG4rXFx0XFx0Z2JsX3Jlc3ZfZ2V0ID0gMDtcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG5AQCAtMzAwMiwxMCArMzAxNSwxMCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdGFsbG9jX2ZsYWdzIHw9IEhVR0VUTEJfQUxMT0NfQ0hBUkdfQ0dST1VQX1JTVkQ7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBnYmxfY2hnID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXFxuK1xcdCAqIGdibF9yZXN2X2dldCA9PSAwIGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cyBmb3IgdGhpc1xcbiBcXHQgKiBhbGxvY2F0aW9uLCBzbyB0cnkgdG8gdXNlIGl0LlxcbiBcXHQgKi9cXG4tXFx0aWYgKGdibF9jaGcgPT0gMClcXG4rXFx0aWYgKGdibF9yZXN2X2dldCA9PSAwKVxcbiBcXHRcXHRhbGxvY19mbGFncyB8PSBIVUdFVExCX0FMTE9DX1VTRV9HTE9CQUxfUkVTRVJWQVRJT05TO1xcbiBcXG4gXFx0LyogVGFrZXMgcmVmZXJlbmNlIG9uIG1wb2wuICovXFxuQEAgLTMwNTksMTMgKzMwNzIsMTAgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRyZXR1cm4gZm9saW87XFxuIFxcbiBvdXRfc3VicG9vbF9wdXQ6XFxuLVxcdC8qXFxuLVxcdCAqIHB1dCBwYWdlIHRvIHN1YnBvb2wgaWZmIHRoZSBxdW90YSBvZiBzdWJwb29sJ3MgcnN2X2hwYWdlcyBpcyB1c2VkXFxuLVxcdCAqIGR1cmluZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcy5cXG4tXFx0ICovXFxuLVxcdGlmIChtYXBfY2hnIFxcdTAwMjZcXHUwMDI2ICFnYmxfY2hnKSB7XFxuLVxcdFxcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xcbi1cXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XFxuK1xcdGlmIChtYXBfY2hnKSB7XFxuK1xcdFxcdGxvbmcgZ2JsX3Jlc3ZfcHV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xcbitcXG4rXFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQpO1xcbiBcXHR9XFxuIFxcbiBvdXRfZW5kX3Jlc2VydmF0aW9uOlxcbkBAIC02NjYxLDEyICs2NjcxLDE0IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXFxuIHtcXG4tXFx0bG9uZyBjaGcgPSAtMSwgYWRkID0gLTEsIHNwb29sX3Jlc3YsIGdibF9yZXN2O1xcbitcXHRsb25nIGNoZyA9IC0xLCBhZGQgPSAtMTtcXG4gXFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XFxuIFxcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfaW5vZGUoaW5vZGUpO1xcbiBcXHRzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwO1xcbiBcXHRzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2cgPSBOVUxMO1xcbi1cXHRsb25nIGdibF9yZXNlcnZlLCByZWdpb25zX25lZWRlZCA9IDA7XFxuK1xcdGxvbmcgcmVnaW9uc19uZWVkZWQgPSAwO1xcbitcXHRsb25nIGdibF9yZXN2X2dldDtcXG4rXFx0bG9uZyBnYmxfcmVzdl9wdXQ7XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHQvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi9cXG5AQCAtNjc0MSw5ICs2NzUzLDkgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0ICogdGhlIHN1YnBvb2wgaGFzIGEgbWluaW11bSBzaXplLCB0aGVyZSBtYXkgYmUgc29tZSBnbG9iYWxcXG4gXFx0ICogcmVzZXJ2YXRpb25zIGFscmVhZHkgaW4gcGxhY2UgKGdibF9yZXNlcnZlKS5cXG4gXFx0ICovXFxuLVxcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIGNoZyk7XFxuLVxcdGlmIChnYmxfcmVzZXJ2ZSBcXHUwMDNjIDApIHtcXG4tXFx0XFx0ZXJyID0gZ2JsX3Jlc2VydmU7XFxuK1xcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpO1xcbitcXHRpZiAoZ2JsX3Jlc3ZfZ2V0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRlcnIgPSBnYmxfcmVzdl9nZXQ7XFxuIFxcdFxcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDtcXG4gXFx0fVxcbiBcXG5AQCAtNjc1MSw3ICs2NzYzLDcgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0ICogQ2hlY2sgZW5vdWdoIGh1Z2VwYWdlcyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgcmVzZXJ2YXRpb24uXFxuIFxcdCAqIEhhbmQgdGhlIHBhZ2VzIGJhY2sgdG8gdGhlIHN1YnBvb2wgaWYgdGhlcmUgYXJlIG5vdFxcbiBcXHQgKi9cXG4tXFx0ZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzZXJ2ZSk7XFxuK1xcdGVyciA9IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0KTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gb3V0X3B1dF9wYWdlcztcXG4gXFxuQEAgLTY3NzAsNyArNjc4Miw3IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdGFkZCA9IHJlZ2lvbl9hZGQocmVzdl9tYXAsIGZyb20sIHRvLCByZWdpb25zX25lZWRlZCwgaCwgaF9jZyk7XFxuIFxcbiBcXHRcXHRpZiAodW5saWtlbHkoYWRkIFxcdTAwM2MgMCkpIHtcXG4tXFx0XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xcbitcXHRcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdl9nZXQpO1xcbiBcXHRcXHRcXHRlcnIgPSBhZGQ7XFxuIFxcdFxcdFxcdGdvdG8gb3V0X3B1dF9wYWdlcztcXG4gXFx0XFx0fSBlbHNlIGlmICh1bmxpa2VseShjaGcgXFx1MDAzZSBhZGQpKSB7XFxuQEAgLTY4MDYsMjYgKzY4MTgsMjEgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0fVxcbiBcXHRyZXR1cm4gY2hnO1xcbiBcXG4tb3V0X3B1dF9wYWdlczpcXG4tXFx0c3Bvb2xfcmVzdiA9IGNoZyAtIGdibF9yZXNlcnZlO1xcbi1cXHRpZiAoc3Bvb2xfcmVzdikge1xcbi1cXHRcXHQvKiBwdXQgc3ViIHBvb2wncyByZXNlcnZhdGlvbiBiYWNrLCBjaGcgLSBnYmxfcmVzZXJ2ZSAqL1xcbi1cXHRcXHRnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KTtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogc3VicG9vbCdzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsXFxuLVxcdFxcdCAqIHJldHVybiB0byBoc3RhdGUuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7XFxuLVxcdH1cXG4tXFx0LyogUmVzdG9yZSB1c2VkX2hwYWdlcyBmb3IgcGFnZXMgdGhhdCBmYWlsZWQgZ2xvYmFsIHJlc2VydmF0aW9uICovXFxuLVxcdGlmIChnYmxfcmVzZXJ2ZSBcXHUwMDI2XFx1MDAyNiBzcG9vbCkge1xcbi1cXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbisgb3V0X3B1dF9wYWdlczpcXG4rXFx0LypcXG4rXFx0ICogUmV0dXJuIGFsbCB0aGF0IHdhcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc3VicG9vbCwgbGV0IHN1YnBvb2xcXG4rXFx0ICogdGVsbCB1cyB0aGUgbmV3IG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdCBuZWVkIHRvIGJlXFxuK1xcdCAqIHJldHVybmVkIHRvIHRoZSBnbG9iYWwgcG9vbC5cXG4rXFx0ICovXFxuK1xcdGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBjaGcpO1xcbitcXHQvKlxcbitcXHQgKiBUaGVyZSBtYXkgYmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZlxcbitcXHQgKiByZXNlcnZhdGlvbnMgdG8gY29uc3VtZSBhbmQgdGhlIG51bWJlciB0byByZXN0b3JlIG5vdyBpZlxcbitcXHQgKiB0aGVyZSBhcmUgbXVsdGlwbGUgdGhyZWFkcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBzdWJwb29sIC1cXG4rXFx0ICogcmVzdG9yZSB0aGUgZGlmZmVyZW5jZS5cXG4rXFx0ICovXFxuK1xcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0IC0gZ2JsX3Jlc3ZfcHV0KTtcXG4gXFxuLVxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzcG9vbC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi1cXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXFxuLVxcdFxcdFxcdHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyAtPSBnYmxfcmVzZXJ2ZTtcXG4tXFx0XFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbi1cXHR9XFxuIG91dF91bmNoYXJnZV9jZ3JvdXA6XFxuIFxcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1ODozNC4yODM5MTIxOTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ1OTIzNDU5MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1wiLFxuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiLFxuICAgIFwiaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNcIixcbiAgICBcImh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzXCIsXG4gICAgXCJodWdldGxiZnNfc3RhdGZzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3VicG9vbCBwYWdlIGFjY291bnRpbmcsIHJlc2VydmF0aW9uIGNhbGN1bGF0aW9uLCBhbmQgZXJyb3IgcmVjb3ZlcnkgbG9naWMgaW4gaHVnZXRsYmZzIGFuZCBjb3JlIGh1Z2V0bGIgbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMgKGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLCBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcywgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzLCBhbGxvY19odWdldGxiX2ZvbGlvLCBodWdldGxiZnNfc3RhdGZzKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5c2NhbGxzIHN1Y2ggYXMgbW1hcCwgb3BlbiwgZmFsbG9jYXRlLCBhbmQgc3RhdGZzIG9uIGh1Z2V0bGJmcywgbWFraW5nIHRoaXMgY29kZSB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5YzNjNDUxODI4Y2M4NTgxZGNmMTRkMzA1OGEzYjc0ZjU2MjRiNjI3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAyMzo1ODozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG5pbmRleCBhNDkxMTVkYjE4Yzc2Li5kMjQ0NTgzZmRjYmMzIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuQEAgLTMxNCwyMSArMzE0LDggQEAgaHVnZSBwYWdlcy4gIElmIHRoZXkgY2FuIG5vdCBiZSByZXNlcnZlZCwgdGhlIG1vdW50IGZhaWxzLlxuIFRoZSByb3V0aW5lcyBodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKSBhcmUgY2FsbGVkIHdoZW4gcGFnZXMgYXJlXG4gb2J0YWluZWQgZnJvbSBvciByZWxlYXNlZCBiYWNrIHRvIGEgc3VicG9vbC4gIFRoZXkgcGVyZm9ybSBhbGwgc3VicG9vbFxuIGFjY291bnRpbmcsIGFuZCB0cmFjayBhbnkgcmVzZXJ2YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbC5cbi1odWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMgYXJlIHBhc3NlZCB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMgYnkgd2hpY2hcbi10byBhZGp1c3QgdGhlIHN1YnBvb2wgJ3VzZWQgcGFnZScgY291bnQgKGRvd24gZm9yIGdldCwgdXAgZm9yIHB1dCkuICBOb3JtYWxseSxcbi10aGV5IHJldHVybiB0aGUgc2FtZSB2YWx1ZSB0aGF0IHdhcyBwYXNzZWQgb3IgYW4gZXJyb3IgaWYgbm90IGVub3VnaCBwYWdlc1xuLWV4aXN0IGluIHRoZSBzdWJwb29sLlxuLVxuLUhvd2V2ZXIsIGlmIHJlc2VydmVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHN1YnBvb2wgYSByZXR1cm4gdmFsdWUgbGVzc1xuLXRoYW4gdGhlIHBhc3NlZCB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQuICBUaGlzIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgdGhlXG4tbnVtYmVyIG9mIGFkZGl0aW9uYWwgZ2xvYmFsIHBvb2wgYWRqdXN0bWVudHMgd2hpY2ggbXVzdCBiZSBtYWRlLiAgRm9yIGV4YW1wbGUsXG4tc3VwcG9zZSBhIHN1YnBvb2wgY29udGFpbnMgMyByZXNlcnZlZCBodWdlIHBhZ2VzIGFuZCBzb21lb25lIGFza3MgZm9yIDUuXG4tVGhlIDMgcmVzZXJ2ZWQgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sIGNhbiBiZSB1c2VkIHRvIHNhdGlzZnkgcGFydFxuLW9mIHRoZSByZXF1ZXN0LiAgQnV0LCAyIHBhZ2VzIG11c3QgYmUgb2J0YWluZWQgZnJvbSB0aGUgZ2xvYmFsIHBvb2xzLiAgVG9cbi1yZWxheSB0aGlzIGluZm9ybWF0aW9uIHRvIHRoZSBjYWxsZXIsIHRoZSB2YWx1ZSAyIGlzIHJldHVybmVkLiAgVGhlIGNhbGxlclxuLWlzIHRoZW4gcmVzcG9uc2libGUgZm9yIGF0dGVtcHRpbmcgdG8gb2J0YWluIHRoZSBhZGRpdGlvbmFsIHR3byBwYWdlcyBmcm9tXG4tdGhlIGdsb2JhbCBwb29scy5cbi1cbitodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKSB1c2UgdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIHBhc3NlZCB0byBhZGp1c3Rcbit0aGUgc3VicG9vbCAndXNlZCBwYWdlJyBjb3VudC5cbiBcbiBDT1cgYW5kIFJlc2VydmF0aW9uc1xuID09PT09PT09PT09PT09PT09PT09XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuaW5kZXggMjA5NDdmOGJkMDY1NC4uYWUxZjFmMzE0NzdmYyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuQEAgLTI0NiwxNSArMjQ2LDggQEAgaHVnZXBhZ2Vfc3VicG9vbOeahG1pbl9ocGFnZXPlrZfmrrXkuK3ooqvot5/ouKrjgILlnKjmjILovb3ml7bvvIxodWdldGxiX2FjY3RfbWVcbiDooqvosIPnlKjku6XpooTnlZnmjIflrprmlbDph4/nmoTlt6jpobXjgILlpoLmnpzlroPku6zkuI3og73ooqvpooTnlZnvvIzmjILovb3lsLHkvJrlpLHotKXjgIJcbiBcbiDlvZPku47lrZDmsaDkuK3ojrflj5bmiJbph4rmlL7pobXpnaLml7bvvIzkvJrosIPnlKhodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKeWHveaVsOOAglxuLWh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlc+iiq+S8oOmAkue7meW3qOmhteaVsOmHj++8jOS7peatpOadpeiwg+aVtOWtkOaxoOeahCDigJzlt7LnlKjpobXpnaLigJ0g6K6h5pWwXG4t77yIZ2V05Li65LiL6ZmN77yMcHV05Li65LiK5Y2H77yJ44CC6YCa5bi45oOF5Ya15LiL77yM5aaC5p6c5a2Q5rGg5Lit5rKh5pyJ6Laz5aSf55qE6aG16Z2i77yM5a6D5Lus5Lya6L+U5Zue5LiO5Lyg6YCS55qE55u45ZCM55qE5YC85oiWXG4t5LiA5Liq6ZSZ6K+v44CCXG4tXG4t54S26ICM77yM5aaC5p6c6aKE55WZ5LiO5a2Q5rGg55u45YWz6IGU77yM5Y+v6IO95Lya6L+U5Zue5LiA5Liq5bCP5LqO5Lyg6YCS5YC855qE6L+U5Zue5YC844CC6L+Z5Liq6L+U5Zue5YC86KGo56S65b+F6aG76L+b6KGM55qE6aKd5aSW5YWo5bGAXG4t5rGg6LCD5pW055qE5pWw6YeP44CC5L6L5aaC77yM5YGH6K6+5LiA5Liq5a2Q5rGg5YyF5ZCrM+S4qumihOeVmeeahOW3qOmhte+8jOacieS6uuimgeaxgjXkuKrjgILkuI7lrZDmsaDnm7jlhbPnmoQz5Liq6aKE55WZ6aG15Y+v5Lul55So5p2lXG4t5ruh6Laz6YOo5YiG6K+35rGC44CC5L2G5piv77yM5b+F6aG75LuO5YWo5bGA5rGg5Lit6I635b6XMuS4qumhtemdouOAguS4uuS6huWQkeiwg+eUqOiAhei9rOi+vui/meS4gOS/oeaBr++8jOWwhui/lOWbnuWAvDLjgILnhLblkI7vvIzosIPnlKhcbi3ogIXopoHotJ/otKPku47lhajlsYDmsaDkuK3ojrflj5blj6blpJbkuKTkuKrpobXpnaLjgIJcbi1cbivlroPku6zotJ/otKPmiYDmnInlrZDmsaDnmoTnu5/orqHmoLjnrpfvvIzlubbot5/ouKrkuI7lrZDmsaDnm7jlhbPogZTnmoTpooTnlZnjgIJcbitodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKeWHveaVsOS9v+eUqOS8oOWFpeeahOW3qOmhteaVsOmHj+adpeiwg+aVtOWtkOaxoOeahOKAnOW3sueUqOmhtemdouKAneiuoeaVsOOAglxuIFxuIENPV+WSjOmihOeVmVxuID09PT09PT09PT1cbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCA3NjExYTg0NzBlYTI2Li41MTEzZjc0M2Y2ZmM3IDEwMDY0NFxuLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmNcbisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5AQCAtMTEwOSw4ICsxMTA5LDEyIEBAIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXG4gXG4gXHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbG9jayk7XG4gXHRcdFx0YnVmLVx1MDAzZWZfYmxvY2tzID0gc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZW1heF9ocGFnZXM7XG4tXHRcdFx0ZnJlZV9wYWdlcyA9IHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzXG4tXHRcdFx0XHQtIHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcztcbitcdFx0XHRpZiAoc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZW1heF9ocGFnZXMgPT0gLTEpIHtcbitcdFx0XHRcdGZyZWVfcGFnZXMgPSAtMTtcbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0ZnJlZV9wYWdlcyA9IHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzIC1cbitcdFx0XHRcdFx0ICAgICBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4rXHRcdFx0fVxuIFx0XHRcdGJ1Zi1cdTAwM2VmX2JhdmFpbCA9IGJ1Zi1cdTAwM2VmX2JmcmVlID0gZnJlZV9wYWdlcztcbiBcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2c2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZWxvY2spO1xuIFx0XHRcdGJ1Zi1cdTAwM2VmX2ZpbGVzID0gc2JpbmZvLVx1MDAzZW1heF9pbm9kZXM7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuaW5kZXggMTZjNGM0Y2FhMTI2Yy4uNDU1MWZmMzAyMzY0MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuQEAgLTM5LDggKzM5LDggQEAgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wge1xuIFx0c3BpbmxvY2tfdCBsb2NrO1xuIFx0bG9uZyBjb3VudDtcbiBcdGxvbmcgbWF4X2hwYWdlcztcdC8qIE1heGltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtYXhpbXVtLiAqL1xuLVx0bG9uZyB1c2VkX2hwYWdlcztcdC8qIFVzZWQgY291bnQgYWdhaW5zdCBtYXhpbXVtLCBpbmNsdWRlcyAqL1xuLVx0XHRcdFx0LyogYm90aCBhbGxvY2F0ZWQgYW5kIHJlc2VydmVkIHBhZ2VzLiAqL1xuK1x0bG9uZyB1c2VkX2hwYWdlcztcdC8qIFVzZWQgcGFnZSBjb3VudCwgaW5jbHVkZXMgYm90aCAqL1xuK1x0XHRcdFx0LyogYWxsb2NhdGVkIGFuZCByZXNlcnZlZCBwYWdlcy4gKi9cbiBcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZTtcbiBcdGxvbmcgbWluX2hwYWdlcztcdC8qIE1pbmltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtaW5pbXVtLiAqL1xuIFx0bG9uZyByc3ZfaHBhZ2VzO1x0LyogUGFnZXMgcmVzZXJ2ZWQgYWdhaW5zdCBnbG9iYWwgcG9vbCB0byAqL1xuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggNzg1NzcyODQ1Nzk1Mi4uZTI0Zjg1NmM5NDljMyAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuKysrIGIvbW0vaHVnZXRsYi5jXG5AQCAtMTMwLDEyICsxMzAsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc3VicG9vbF9pc19mcmVlKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbiB7XG4gXHRpZiAoc3Bvb2wtXHUwMDNlY291bnQpXG4gXHRcdHJldHVybiBmYWxzZTtcbi1cdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxuLVx0XHRyZXR1cm4gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcbi1cdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxuLVx0XHRyZXR1cm4gc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzO1xuIFxuLVx0cmV0dXJuIHRydWU7XG4rXHRyZXR1cm4gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuQEAgLTE5MywxMyArMTg5LDE4IEBAIHZvaWQgaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxuIFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xuIH1cbiBcbi0vKlxuLSAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgYWxsb2NhdGluZyBhbmQgcmVzZXJ2aW5nIHBhZ2VzLlxuLSAqIFJldHVybiAtRU5PTUVNIGlmIHRoZXJlIGFyZSBub3QgZW5vdWdoIHJlc291cmNlcyB0byBzYXRpc2Z5IHRoZVxuLSAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZVxuLSAqIGdsb2JhbCBwb29scyBtdXN0IGJlIGFkanVzdGVkICh1cHdhcmQpLiAgVGhlIHJldHVybmVkIHZhbHVlIG1heVxuLSAqIG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpIGluIHRoZSBjYXNlIHdoZXJlXG4tICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXG4rLyoqXG4rICogaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMgLSBHZXQgcGFnZXMgZnJvbSBhIHN1YnBvb2xcbisgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKVxuKyAqIEBkZWx0YTogbnVtYmVyIG9mIHBhZ2VzIHRvIGFsbG9jYXRlIG9yIHJlc2VydmVcbisgKlxuKyAqIENoZWNrIGFuZCB1cGRhdGUgc3VicG9vbCBwYWdlIHVzYWdlIGNvdW50cyB3aGVuIGFsbG9jYXRpbmcgb3JcbisgKiByZXNlcnZpbmcgQGRlbHRhIGh1Z2VwYWdlcy5cbisgKlxuKyAqIENvbnRleHQ6IFRha2VzIHNwb29sLVx1MDAzZWxvY2sgdXNpbmcgc3Bpbl9sb2NrX2lycSgpLlxuKyAqIFJldHVybjogTm9uLW5lZ2F0aXZlIG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdCBjYW5ub3QgYmVcbisgKiAgICAgICAgIHNhdGlzZmllZCBieSB0aGUgc3VicG9vbCwgb3IgLUVOT01FTSBpZiB0aGUgc3VicG9vbCBtYXhpbXVtXG4rICogICAgICAgICBsaW1pdCB3b3VsZCBiZSBleGNlZWRlZC5cbiAgKi9cbiBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4gXHRcdFx0XHQgICAgICBsb25nIGRlbHRhKVxuQEAgLTIxMSwxNSArMjEyLDE0IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiBcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jayk7XG4gXG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSkge1x0XHQvKiBtYXhpbXVtIHNpemUgYWNjb3VudGluZyAqL1xuLVx0XHRpZiAoKHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICsgZGVsdGEpIFx1MDAzYz0gc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcylcbi1cdFx0XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyArPSBkZWx0YTtcbi1cdFx0ZWxzZSB7XG4tXHRcdFx0cmV0ID0gLUVOT01FTTtcbi1cdFx0XHRnb3RvIHVubG9ja19yZXQ7XG4tXHRcdH1cbitcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICsgZGVsdGEgXHUwMDNlIHNwb29sLVx1MDAzZW1heF9ocGFnZXMpIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byB1bmxvY2tfcmV0O1xuIFx0fVxuIFxuK1x0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgKz0gZGVsdGE7XG4rXG4gXHQvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqL1xuIFx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMpIHtcbiBcdFx0aWYgKGRlbHRhIFx1MDAzZSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzKSB7XG5AQCAtMjQwLDExICsyNDAsMTkgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tLypcbi0gKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGZyZWVpbmcgYW5kIHVucmVzZXJ2aW5nIHBhZ2VzLlxuLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGdsb2JhbCBwYWdlIHJlc2VydmF0aW9ucyB0aGF0IG11c3QgYmUgZHJvcHBlZC5cbi0gKiBUaGUgcmV0dXJuIHZhbHVlIG1heSBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKVxuLSAqIGluIHRoZSBjYXNlIHdoZXJlIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxuKy8qKlxuKyAqIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzIC0gUmVsZWFzZSBwYWdlcyBiYWNrIHRvIGEgc3VicG9vbFxuKyAqIEBzcG9vbDogcG9pbnRlciB0byBzdWJwb29sIHN0cnVjdHVyZSAobWF5IGJlIE5VTEwpXG4rICogQGRlbHRhOiBudW1iZXIgb2YgcGFnZXMgdG8gZnJlZSBvciB1bnJlc2VydmVcbisgKlxuKyAqIENoZWNrIGFuZCB1cGRhdGUgc3VicG9vbCBwYWdlIHVzYWdlIGNvdW50cyB3aGVuIGZyZWVpbmcgb3JcbisgKiB1bnJlc2VydmluZyBAZGVsdGEgaHVnZXBhZ2VzLlxuKyAqXG4rICogQ29udGV4dDogVGFrZXMgc3Bvb2wtXHUwMDNlbG9jayB1c2luZyBzcGluX2xvY2tfaXJxc2F2ZSgpLiBNYXkgcmVsZWFzZVxuKyAqICAgICAgICAgIGFuZCBmcmVlIEBzcG9vbCBpZiBpdHMgdXNhZ2UgY291bnQgYW5kIHJlZmVyZW5jZXMgcmVhY2hcbisgKiAgICAgICAgICB6ZXJvLlxuKyAqIFJldHVybjogTm9uLW5lZ2F0aXZlIG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdCB0aGUgc3VicG9vbCBjYW5ub3RcbisgKiAgICAgICAgIGFic29yYi5cbiAgKi9cbiBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4gXHRcdFx0XHQgICAgICAgbG9uZyBkZWx0YSlcbkBAIC0yNTcsMTkgKzI2NSwyNCBAQCBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcdFx0LyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi9cbi1cdFx0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZGVsdGE7XG4rXHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAtPSBkZWx0YTtcbiBcbiBcdCAvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqL1xuIFx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIFx1MDAzYyBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzKSB7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICsgZGVsdGEgXHUwMDNjPSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzKVxuK1x0XHQvKlxuK1x0XHQgKiBsaW1pdCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXRcbitcdFx0ICogY2FuIGJlIHJlc3RvcmVkIHRvIHRoaXMgc3VicG9vbC5cbitcdFx0ICovXG4rXHRcdGxvbmcgbGltaXQgPSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzIC0gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4rXG4rXHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICsgZGVsdGEgXHUwMDNjPSBsaW1pdClcbiBcdFx0XHRyZXQgPSAwO1xuIFx0XHRlbHNlXG4tXHRcdFx0cmV0ID0gc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIC0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcztcbitcdFx0XHRyZXQgPSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICsgZGVsdGEgLSBsaW1pdDtcbiBcbiBcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyArPSBkZWx0YTtcbi1cdFx0aWYgKHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgXHUwMDNlIHNwb29sLVx1MDAzZW1pbl9ocGFnZXMpXG4tXHRcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9IHNwb29sLVx1MDAzZW1pbl9ocGFnZXM7XG4rXHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzIFx1MDAzZSBsaW1pdClcbitcdFx0XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID0gbGltaXQ7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTI5NDIsNyArMjk1NSw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfdm1hKHZtYSk7XG4gXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdGxvbmcgcmV0dmFsLCBnYmxfY2hnLCBnYmxfcmVzZXJ2ZTtcbitcdGxvbmcgcmV0dmFsLCBnYmxfcmVzdl9nZXQ7XG4gXHRtYXBfY2hnX3N0YXRlIG1hcF9jaGc7XG4gXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkIG1wb2xpO1xuIFx0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuQEAgLTI5ODEsOCArMjk5NCw4IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdCAqIE9yIGlmIGl0IGNhbiBnZXQgb25lIGZyb20gdGhlIHBvb2wgcmVzZXJ2YXRpb24gZGlyZWN0bHkuXG4gXHQgKi9cbiBcdGlmIChtYXBfY2hnKSB7XG4tXHRcdGdibF9jaGcgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7XG4tXHRcdGlmIChnYmxfY2hnIFx1MDAzYyAwKSB7XG4rXHRcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTtcbitcdFx0aWYgKGdibF9yZXN2X2dldCBcdTAwM2MgMCkge1xuIFx0XHRcdHJldCA9IC1FTk9TUEM7XG4gXHRcdFx0Z290byBvdXRfZW5kX3Jlc2VydmF0aW9uO1xuIFx0XHR9XG5AQCAtMjk5MSw3ICszMDA0LDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQgKiBJZiB3ZSBoYXZlIHRoZSB2bWEgcmVzZXJ2YXRpb24gcmVhZHksIG5vIG5lZWQgZm9yIGV4dHJhXG4gXHRcdCAqIGdsb2JhbCByZXNlcnZhdGlvbi5cbiBcdFx0ICovXG4tXHRcdGdibF9jaGcgPSAwO1xuK1x0XHRnYmxfcmVzdl9nZXQgPSAwO1xuIFx0fVxuIFxuIFx0LypcbkBAIC0zMDAyLDEwICszMDE1LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDtcbiBcbiBcdC8qXG4tXHQgKiBnYmxfY2hnID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXG4rXHQgKiBnYmxfcmVzdl9nZXQgPT0gMCBpbmRpY2F0ZXMgYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoaXNcbiBcdCAqIGFsbG9jYXRpb24sIHNvIHRyeSB0byB1c2UgaXQuXG4gXHQgKi9cbi1cdGlmIChnYmxfY2hnID09IDApXG4rXHRpZiAoZ2JsX3Jlc3ZfZ2V0ID09IDApXG4gXHRcdGFsbG9jX2ZsYWdzIHw9IEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlM7XG4gXG4gXHQvKiBUYWtlcyByZWZlcmVuY2Ugb24gbXBvbC4gKi9cbkBAIC0zMDU5LDEzICszMDcyLDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHJldHVybiBmb2xpbztcbiBcbiBvdXRfc3VicG9vbF9wdXQ6XG4tXHQvKlxuLVx0ICogcHV0IHBhZ2UgdG8gc3VicG9vbCBpZmYgdGhlIHF1b3RhIG9mIHN1YnBvb2wncyByc3ZfaHBhZ2VzIGlzIHVzZWRcbi1cdCAqIGR1cmluZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcy5cbi1cdCAqL1xuLVx0aWYgKG1hcF9jaGcgXHUwMDI2XHUwMDI2ICFnYmxfY2hnKSB7XG4tXHRcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xuLVx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XG4rXHRpZiAobWFwX2NoZykge1xuK1x0XHRsb25nIGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbitcbitcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQpO1xuIFx0fVxuIFxuIG91dF9lbmRfcmVzZXJ2YXRpb246XG5AQCAtNjY2MSwxMiArNjY3MSwxNCBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbi1cdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xLCBzcG9vbF9yZXN2LCBnYmxfcmVzdjtcbitcdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xO1xuIFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XG4gXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX2lub2RlKGlub2RlKTtcbiBcdHN0cnVjdCByZXN2X21hcCAqcmVzdl9tYXA7XG4gXHRzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2cgPSBOVUxMO1xuLVx0bG9uZyBnYmxfcmVzZXJ2ZSwgcmVnaW9uc19uZWVkZWQgPSAwO1xuK1x0bG9uZyByZWdpb25zX25lZWRlZCA9IDA7XG4rXHRsb25nIGdibF9yZXN2X2dldDtcbitcdGxvbmcgZ2JsX3Jlc3ZfcHV0O1xuIFx0aW50IGVycjtcbiBcbiBcdC8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqL1xuQEAgLTY3NDEsOSArNjc1Myw5IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgKiB0aGUgc3VicG9vbCBoYXMgYSBtaW5pbXVtIHNpemUsIHRoZXJlIG1heSBiZSBzb21lIGdsb2JhbFxuIFx0ICogcmVzZXJ2YXRpb25zIGFscmVhZHkgaW4gcGxhY2UgKGdibF9yZXNlcnZlKS5cbiBcdCAqL1xuLVx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgY2hnKTtcbi1cdGlmIChnYmxfcmVzZXJ2ZSBcdTAwM2MgMCkge1xuLVx0XHRlcnIgPSBnYmxfcmVzZXJ2ZTtcbitcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpO1xuK1x0aWYgKGdibF9yZXN2X2dldCBcdTAwM2MgMCkge1xuK1x0XHRlcnIgPSBnYmxfcmVzdl9nZXQ7XG4gXHRcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDtcbiBcdH1cbiBcbkBAIC02NzUxLDcgKzY3NjMsNyBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0ICogQ2hlY2sgZW5vdWdoIGh1Z2VwYWdlcyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgcmVzZXJ2YXRpb24uXG4gXHQgKiBIYW5kIHRoZSBwYWdlcyBiYWNrIHRvIHRoZSBzdWJwb29sIGlmIHRoZXJlIGFyZSBub3RcbiBcdCAqL1xuLVx0ZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzZXJ2ZSk7XG4rXHRlcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF9wdXRfcGFnZXM7XG4gXG5AQCAtNjc3MCw3ICs2NzgyLDcgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0YWRkID0gcmVnaW9uX2FkZChyZXN2X21hcCwgZnJvbSwgdG8sIHJlZ2lvbnNfbmVlZGVkLCBoLCBoX2NnKTtcbiBcbiBcdFx0aWYgKHVubGlrZWx5KGFkZCBcdTAwM2MgMCkpIHtcbi1cdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XG4rXHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3ZfZ2V0KTtcbiBcdFx0XHRlcnIgPSBhZGQ7XG4gXHRcdFx0Z290byBvdXRfcHV0X3BhZ2VzO1xuIFx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KGNoZyBcdTAwM2UgYWRkKSkge1xuQEAgLTY4MDYsMjYgKzY4MTgsMjEgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdH1cbiBcdHJldHVybiBjaGc7XG4gXG4tb3V0X3B1dF9wYWdlczpcbi1cdHNwb29sX3Jlc3YgPSBjaGcgLSBnYmxfcmVzZXJ2ZTtcbi1cdGlmIChzcG9vbF9yZXN2KSB7XG4tXHRcdC8qIHB1dCBzdWIgcG9vbCdzIHJlc2VydmF0aW9uIGJhY2ssIGNoZyAtIGdibF9yZXNlcnZlICovXG4tXHRcdGdibF9yZXN2ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHNwb29sX3Jlc3YpO1xuLVx0XHQvKlxuLVx0XHQgKiBzdWJwb29sJ3MgcmVzZXJ2ZWQgcGFnZXMgY2FuIG5vdCBiZSBwdXQgYmFjayBkdWUgdG8gcmFjZSxcbi1cdFx0ICogcmV0dXJuIHRvIGhzdGF0ZS5cbi1cdFx0ICovXG4tXHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXN2KTtcbi1cdH1cbi1cdC8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqL1xuLVx0aWYgKGdibF9yZXNlcnZlIFx1MDAyNlx1MDAyNiBzcG9vbCkge1xuLVx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuKyBvdXRfcHV0X3BhZ2VzOlxuK1x0LypcbitcdCAqIFJldHVybiBhbGwgdGhhdCB3YXMgcmVxdWVzdGVkIGZyb20gdGhlIHN1YnBvb2wsIGxldCBzdWJwb29sXG4rXHQgKiB0ZWxsIHVzIHRoZSBuZXcgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IG5lZWQgdG8gYmVcbitcdCAqIHJldHVybmVkIHRvIHRoZSBnbG9iYWwgcG9vbC5cbitcdCAqL1xuK1x0Z2JsX3Jlc3ZfcHV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIGNoZyk7XG4rXHQvKlxuK1x0ICogVGhlcmUgbWF5IGJlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBudW1iZXIgb2ZcbitcdCAqIHJlc2VydmF0aW9ucyB0byBjb25zdW1lIGFuZCB0aGUgbnVtYmVyIHRvIHJlc3RvcmUgbm93IGlmXG4rXHQgKiB0aGVyZSBhcmUgbXVsdGlwbGUgdGhyZWFkcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBzdWJwb29sIC1cbitcdCAqIHJlc3RvcmUgdGhlIGRpZmZlcmVuY2UuXG4rXHQgKi9cbitcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0IC0gZ2JsX3Jlc3ZfcHV0KTtcbiBcbi1cdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0XHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcbi1cdFx0XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAtPSBnYmxfcmVzZXJ2ZTtcbi1cdFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xuLVx0fVxuIG91dF91bmNoYXJnZV9jZ3JvdXA6XG4gXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksXG4gXHRcdFx0XHRcdCAgICBjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU4OjM0LjI4MzkxNDc1N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY3ODU2MjA1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIdWdldGxiZnMgU3VicG9vbCBBY2NvdW50aW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIHdpdGhpbiB0aGUgaHVnZXRsYmZzL2h1Z2V0bGIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJJ20gc2VlaW5nIGNoYW5nZXMgYWNyb3NzIGEgZmV3IGtleSBhcmVhczogdGhlIGRvY3VtZW50YXRpb24sIHRoZSBpbm9kZSBpbXBsZW1lbnRhdGlvbiwgYW5kIHRoZSBjb3JlIGluY2x1ZGUgYW5kIG1tIGZpbGVzLiBUaGF0IG1ha2VzIG1lIHRha2UgaXQgc2VyaW91c2x5LlxuXG5GaXJzdCwgSSdsbCB6ZXJvIGluIG9uIHRoZSBtb2RpZmllZCBmaWxlcy4gSSdtIGZvY3VzaW5nIG9uIGBtbS9odWdldGxiLmNgLCBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCBhcyB0aGV5IGFyZSB0aGUgbWVhdCBvZiB0aGlzLiBUaGUgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbXBvcnRhbnQsIGJ1dCB1bmRlcnN0YW5kaW5nIHRoZSAqZnVuY3Rpb25hbGl0eSogY2hhbmdlIGlzIGNyaXRpY2FsLlxuXG5SaWdodCBhd2F5LCBJIHNlZSB0aGlzIHJldm9sdmVzIGFyb3VuZCBzdWJwb29sIGFjY291bnRpbmcuIFRoYXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUgZm9yIGh1Z2V0bGJmcy4gSXQgc2VlbXMgdGhlIHBhdGNoIGlzIGFsdGVyaW5nIHRoZSBsb2dpYyBmb3IgaG93IHdlIHRyYWNrIGFuZCBtYW5hZ2UgaHVnZXBhZ2VzIHdpdGhpbiB0aGVzZSBzdWJwb29scy5cblxuU3BlY2lmaWNhbGx5LCBoZXJlJ3Mgd2hhdCdzIGp1bXBpbmcgb3V0IGF0IG1lOlxuXG4qICAgKipgc3VicG9vbF9pc19mcmVlYCoqOiBUaGlzIGlzIGludGVyZXN0aW5nLiBUaGUgY2hlY2sgaXMgbm93IGp1c3QgYHVzZWRfaHBhZ2VzID09IDBgLCBhIHNpbXBsaWZpY2F0aW9uLiBUaGlzIG1ha2VzIG1lIGNvbnNpZGVyIGlmIHRoZXJlIGlzIGEgdXNlIGNhc2UgdGhhdCBjYXVzZXMgdGhpcyBjaGFuZ2UsIGFuZCB3aGF0IHRoZSBlZmZlY3Qgd2lsbCBiZS5cbiogICAqKmBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AqKjogSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYWx3YXlzIGluY3JlbWVudGluZyBgdXNlZF9ocGFnZXNgIG5vdywgZXZlbiB3aGVuIGBtYXhfaHBhZ2VzYCBpcyAtMS4gVGhhdCBzdWdnZXN0cyBhIHBvc3NpYmxlIGNoYW5nZSBpbiBob3cgd2UgaGFuZGxlIHVuYm91bmRlZCBzdWJwb29scy5cbiogICAqKmBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AqKjogVGhlIGRlY3JlbWVudCBpcyBhbHdheXMgaGFwcGVuaW5nLCBhbmQgdGhlIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nIGxvZ2ljIGFwcGVhcnMgdG8gYmUgcmV3b3JrZWQuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIGNvdWxkIGludHJvZHVjZSBzdWJ0bGUgYmVoYXZpb3JhbCBjaGFuZ2VzIHRoYXQgbXVzdCBiZSBjYXJlZnVsbHkgc2NydXRpbml6ZWQuXG4qICAgKipgYWxsb2NfaHVnZXRsYl9mb2xpb2AgXHUwMDI2IGBodWdldGxiX3Jlc2VydmVfcGFnZXNgKio6IEVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBhY2NvdW50aW5nIGFyZSBtb2RpZmllZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjaGFuZ2VzIHRvIGBodWdldGxiX2FjY3RfbWVtb3J5YCBhZmZlY3Qgb3ZlcmFsbCBtZW1vcnkgdXNhZ2UgdHJhY2tpbmcgYW5kIHBvdGVudGlhbCByZXNvdXJjZSBsZWFrcy4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UgYXJlIGhhbmRsaW5nIGVycm9ycyBjb3JyZWN0bHkgaGVyZSBhbmQgYXJlIG5vdCBpbnRyb2R1Y2luZyBuZXcgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uIHBvc3NpYmlsaXRpZXMuXG4qICAgKipgaHVnZXRsYmZzX3N0YXRmc2AqKjogVGhlIGNoZWNrIGZvciBgbWF4X2hwYWdlcyA9PSAtMWAgYW5kIHNldHRpbmcgYGZyZWVfcGFnZXMgPSAtMWAgbWFrZXMgc2Vuc2UgZm9yIGFuIHVuYm91bmRlZCBwb29sLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY29kZSBpcyBpbiBhIGhvdCBwYXRoLiBBbmQgZnJvbSBteSBleHBlcmllbmNlLCB0aGUgYW5zd2VyIGlzICp5ZXMqLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGludm9sdmVkIGluIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIHRocm91Z2ggc3lzY2FsbHMgbGlrZSBgbW1hcGAgd2l0aCBgTUFQX0hVR0VUTEJgLCBtYW5hZ2luZyBodWdldGxiZnMgbW91bnRzLCBmaWxlIG9wZXJhdGlvbnMsIG1hZHZpc2UsIGZhbGxvY2F0ZSwgYW5kIGBzdGF0ZnNgLiBBbnkgc3VidGxlIGNoYW5nZSBpbiB0aGlzIGFyZWEgY2FuIGhhdmUgd2lkZXNwcmVhZCBjb25zZXF1ZW5jZXMgYW5kIG5lZWRzIHRob3JvdWdoIHJldmlldy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIEtjb25maWcgb3B0aW9ucyBhcmUgZW5hYmxlZCAoZS5nLiwgYENPTkZJR19IVUdFVExCRlNgLCBgQ09ORklHX0hVR0VUTEJfUEFHRWAsIGV0Yy4pIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZS4gVGltZSB0byBgZ3JlcHBlcmAgb3IgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgZ29pbmcgdG8gYmUgbXkgaW1tZWRpYXRlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgwOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU4OjQxLjA2OTUzODQyNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjAwMzE1MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaHVnZXRsYmZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6NTg6NDEuMTYxNTQ4NDc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA5MDM0NTEwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIEtjb25maWcgRmlsZXMgZm9yIEh1Z2VUTEIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIEh1Z2VUTEIgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgZmlyc3QgcGxhY2VzIEknbSBnb2luZyB0byBsb29rIGFyZSwgbmF0dXJhbGx5LCBgZnMvaHVnZXRsYmZzL0tjb25maWdgIGFuZCBgbW0vS2NvbmZpZ2AuIEl04oCZcyBhIHByZXR0eSBzdGFuZGFyZCBhcHByb2FjaCwgcmVhbGx5LCBidXQgaXQncyB0aGUgcmlnaHQgc3RhcnRpbmcgcG9pbnQuIGBmcy9odWdldGxiZnNgICpzaG91bGQqIGNvbnRhaW4gdGhlIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlIGZpbGVzeXN0ZW0gaXRzZWxmLCBwcm9iYWJseSByZWxhdGVkIHRvIGl0cyBtb3VudCBvcHRpb25zLCBxdW90YSBzdXBwb3J0LCBhbmQgbWF5YmUgc29tZSBwYWdlIGFsbG9jYXRpb24gZGV0YWlscyB0aWVkIHRvIHRoZSBWRlMgbGF5ZXIuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzZXR0aW5ncyBsaWtlIHRoZSBkZWZhdWx0IGh1Z2VwYWdlIHNpemUsIHdoZXRoZXIgaHVnZXRsYmZzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIHBlcmhhcHMgc29tZSBmaW5lLWdyYWluZWQgY29udHJvbHMgb3ZlciBmZWF0dXJlcy5cblxuT24gdGhlIG90aGVyIGhhbmQsIGBtbS9LY29uZmlnYCBpcyB3aGVyZSBJJ2QgYW50aWNpcGF0ZSB0aGUgbW9yZSBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9ucy4gSSdtIHRoaW5raW5nIHNldHRpbmdzIGRlYWxpbmcgd2l0aCB0aGUgTlVNQSBhZmZpbml0eSBvZiBodWdlcGFnZXMsIHRoZSBvdmVyYWxsIGFsbG9jYXRpb24gcG9saWNpZXMsIGFuZCB0aGUgbWF4aW11bSBzaXplcyBhdmFpbGFibGUuIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhlcmXigJlsbCBiZSBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGNvcmUga2VybmVsIGluZnJhc3RydWN0dXJlIGZvciBtYW5hZ2luZyBodWdlIHBhZ2VzIGFuZCB3aGV0aGVyIGh1Z2VwYWdlIHN1cHBvcnQgaXMgZXZlbiBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEl04oCZcyBhbHNvIHBvc3NpYmxlIHRoYXQgdGhlcmUgYXJlIHNvbWUgY3Jvc3MtcmVmZXJlbmNlcyBiZXR3ZWVuIHRoZSB0d28gS2NvbmZpZyBmaWxlczsgdGhlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgb3B0aW9ucyBtaWdodCBkZXBlbmQgb24gb3IgaW50ZXJhY3Qgd2l0aCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucyBkZWZpbmVkIGluIGBtbS9LY29uZmlnYC4gVGltZSB0byBkaXZlIGluIGFuZCBzZWUgZXhhY3RseSBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgc3RydWN0dXJlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QuIEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IHBhcmFtZXRlcnMgdGhhdCBjb250cm9sIEh1Z2VUTEIgYmVoYXZpb3IsIHBhcnRpY3VsYXJseSB0aG9zZSBpbXBhY3RpbmcgcGVyZm9ybWFuY2UgYW5kIHJlc291cmNlIHV0aWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTc0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6NTg6NDQuMjUxODk4NTk3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTQxMjI2MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSFVHRVRMQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9odWdldGxiZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6NTg6NDQuMzYzMzE2OTE4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2Mjc2NTcxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgdXNpbmcgdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwncyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIHRvIHR3ZWFrIHNvbWV0aGluZywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGl2ZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIGtub2JzIGFyZSBkZWZpbmVkLCByaWdodD8gR2l2ZW4gdGhlIGdlbmVyYWwgYXJlYSBJJ20gd29ya2luZyBpbiwgbXkgaW5zdGluY3QgaXMgdG8gbmFycm93IHRoZSBzZWFyY2guIEknbSB0aGlua2luZyBlaXRoZXIgdGhlIGBmcy9gIGRpcmVjdG9yeSwgd2hpY2ggY292ZXJzIGFsbCB0aGUgZmlsZXN5c3RlbXMsIG9yIHRoZSBgbW0vYCBkaXJlY3RvcnksIHdoaWNoIGVuY29tcGFzc2VzIGFsbCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0cy4gVGhvc2UgYXJlIHRoZSB0d28gbW9zdCBsaWtlbHkgcGxhY2VzIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJJ20gaW50ZXJlc3RlZCBpbiwgYmFzZWQgb24gdGhlIHByb2JsZW0gSSBhbSB3b3JraW5nIG9uLiBOb3csIGxldCdzIHNlZSB3aGljaCBpcyB0aGUgY29ycmVjdCBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1ODMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1ODo0Ni43MjYwODY1ODFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MjYwODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0yNTA9bWVudWNvbmZpZyBIVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjU1LVxcdGhlbHBcXG5mcy9LY29uZmlnOjI1NjpcXHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cXG5mcy9LY29uZmlnLTI1Ny1cXHQgIHJhbWZzLiBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsIHNheSBZIGhlcmUgYW5kIHJlYWRcXG4tLVxcbmZzL01ha2VmaWxlPTczPW9iai15XFx0XFx0XFx0XFx0Kz0gcmFtZnMvXFxuZnMvTWFrZWZpbGU6NzQ6b2JqLSQoQ09ORklHX0hVR0VUTEJGUylcXHRcXHQrPSBodWdldGxiZnMvXFxuZnMvTWFrZWZpbGUtNzUtb2JqLSQoQ09ORklHX0NPREFfRlMpXFx0XFx0Kz0gY29kYS9cXG4tLVxcbmZzL2h1Z2V0bGJmcy9NYWtlZmlsZS01LVxcbmZzL2h1Z2V0bGJmcy9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19IVUdFVExCRlMpICs9IGh1Z2V0bGJmcy5vXFxuZnMvaHVnZXRsYmZzL01ha2VmaWxlLTctXFxuZnMvaHVnZXRsYmZzL01ha2VmaWxlOjg6aHVnZXRsYmZzLW9ianMgOj0gaW5vZGUub1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDItI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDM6I2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9odWdldGxiZnMuaFxcdTAwM2VcXG5mcy9odWdldGxiZnMvaW5vZGUuYy00NC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NTpzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBodWdldGxiZnNfYW9wcztcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQ3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDg6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ5LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjUwOmVudW0gaHVnZXRsYmZzX3NpemVfdHlwZSB7IE5PX1NJWkUsIFNJWkVfU1RELCBTSVpFX1BFUkNFTlQgfTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy01MS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo1MjpzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQge1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTUzLVxcdHN0cnVjdCBoc3RhdGVcXHRcXHQqaHN0YXRlO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTgtXFx0bG9uZ1xcdFxcdFxcdG1pbl9ocGFnZXM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NTk6XFx0ZW51bSBodWdldGxiZnNfc2l6ZV90eXBlIG1heF92YWxfdHlwZTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo2MDpcXHRlbnVtIGh1Z2V0bGJmc19zaXplX3R5cGUgbWluX3ZhbF90eXBlO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTYxLVxcdGt1aWRfdFxcdFxcdFxcdHVpZDtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgaHVnZXRsYl9mc19wYXJhbWV0ZXJzW10gPSB7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy05OC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5OTpzdGF0aWMgaW50IGh1Z2V0bGJmc19maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMC17XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDYtXFx0ICogZm9yIFNITV9IVUdFVExCLCB0aGUgcGFnZXMgYXJlIHJlc2VydmVkIGluIHRoZSBzaG1nZXQoKSBjYWxsIHNvIHNraXBcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDc6XFx0ICogcmVzZXJ2aW5nIGhlcmUuIE5vdGU6IG9ubHkgZm9yIFNITSBodWdldGxiZnMgZmlsZSwgdGhlIGlub2RlXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ4LVxcdCAqIGZsYWcgU19QUklWQVRFIGlzIHNldC5cXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTE5Nj1zdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMjE5LSAqL1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjIyMDpzdGF0aWMgc3NpemVfdCBodWdldGxiZnNfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0yMjEte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMjk3LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjI5ODpzdGF0aWMgaW50IGh1Z2V0bGJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMjk5LVxcdFxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMzA1LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjMwNjpzdGF0aWMgaW50IGh1Z2V0bGJmc193cml0ZV9lbmQoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTMwNy1cXHRcXHRcXHQgICAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz01NTI9c3RhdGljIHZvaWQgcmVtb3ZlX2lub2RlX2h1Z2VwYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTkyLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjU5MzpzdGF0aWMgdm9pZCBodWdldGxiZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9odWdldGxiZnMvaW5vZGUuYy01OTQte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTk2LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjU5NzpcXHR0cmFjZV9odWdldGxiZnNfZXZpY3RfaW5vZGUoaW5vZGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTU5OC1cXHRyZW1vdmVfaW5vZGVfaHVnZXBhZ2VzKGlub2RlLCAwLCBMTE9OR19NQVgpO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9NjA3PXN0YXRpYyB2b2lkIGh1Z2V0bGJfdm10cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0KVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjIzLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjYyNDpzdGF0aWMgdm9pZCBodWdldGxiZnNfemVyb19wYXJ0aWFsX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqaCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy02MjUtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy02NDYtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NjQ3OnN0YXRpYyBsb25nIGh1Z2V0bGJmc19wdW5jaF9ob2xlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjQ4LXtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo2NDk6XFx0c3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvICppbmZvID0gSFVHRVRMQkZTX0koaW5vZGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY1MC1cXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVxcdTAwM2VpX21hcHBpbmc7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy02NzItXFx0aWYgKG9mZnNldCBcXHUwMDNjIGhvbGVfc3RhcnQpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NjczOlxcdFxcdGh1Z2V0bGJmc196ZXJvX3BhcnRpYWxfcGFnZShoLCBtYXBwaW5nLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY3NC1cXHRcXHRcXHRcXHRvZmZzZXQsIG1pbihvZmZzZXQgKyBsZW4sIGhvbGVfc3RhcnQpKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY4NS1cXHRpZiAoKG9mZnNldCArIGxlbikgXFx1MDAzZSBob2xlX2VuZCBcXHUwMDI2XFx1MDAyNiAob2Zmc2V0ICsgbGVuKSBcXHUwMDNlIGhvbGVfc3RhcnQpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6Njg2OlxcdFxcdGh1Z2V0bGJmc196ZXJvX3BhcnRpYWxfcGFnZShoLCBtYXBwaW5nLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY4Ny1cXHRcXHRcXHRcXHRob2xlX2VuZCwgb2Zmc2V0ICsgbGVuKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY5OS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo3MDA6c3RhdGljIGxvbmcgaHVnZXRsYmZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzAxLVxcdFxcdFxcdFxcdGxvZmZfdCBsZW4pXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy03MDMtXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NzA0OlxcdHN0cnVjdCBodWdldGxiZnNfaW5vZGVfaW5mbyAqaW5mbyA9IEhVR0VUTEJGU19JKGlub2RlKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy03MDUtXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cXHUwMDNlaV9tYXBwaW5nO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzE4LVxcdGlmIChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpIHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo3MTk6XFx0XFx0ZXJyb3IgPSBodWdldGxiZnNfcHVuY2hfaG9sZShpbm9kZSwgb2Zmc2V0LCBsZW4pO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTcyMC1cXHRcXHRnb3RvIG91dF9ub2xvY2s7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MjYtb3V0X25vbG9jazpcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4Mjc6XFx0dHJhY2VfaHVnZXRsYmZzX2ZhbGxvY2F0ZShpbm9kZSwgbW9kZSwgb2Zmc2V0LCBsZW4sIGVycm9yKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MjgtXFx0cmV0dXJuIGVycm9yO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODMwLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjgzMTpzdGF0aWMgaW50IGh1Z2V0bGJmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgzMi1cXHRcXHRcXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODM3LVxcdHVuc2lnbmVkIGludCBpYV92YWxpZCA9IGF0dHItXFx1MDAzZWlhX3ZhbGlkO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjgzODpcXHRzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKmluZm8gPSBIVUdFVExCRlNfSShpbm9kZSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODM5LVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODQzLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjg0NDpcXHR0cmFjZV9odWdldGxiZnNfc2V0YXR0cihpbm9kZSwgZGVudHJ5LCBhdHRyKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy04NDUtXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy04NjMtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODY0OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjg2NTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eClcXG5mcy9odWdldGxiZnMvaW5vZGUuYy04NjYte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODc1LVxcdFxcdHNpbXBsZV9pbm9kZV9pbml0X3RzKGlub2RlKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4NzY6XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aHVnZXRsYmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg3Ny1cXHRcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2c2ltcGxlX2Rpcl9vcGVyYXRpb25zO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODkxLSAqL1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjg5MjpzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGh1Z2V0bGJmc19pX21tYXBfcndzZW1fa2V5O1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg5My1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4OTQ6c3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg5NS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkxMy1cXHRpZiAoaW5vZGUpIHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5MTQ6XFx0XFx0c3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvICppbmZvID0gSFVHRVRMQkZTX0koaW5vZGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkxNS1cXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkxOC1cXHRcXHRsb2NrZGVwX3NldF9jbGFzcyhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlaV9tbWFwX3J3c2VtLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjkxOTpcXHRcXHRcXHRcXHRcXHUwMDI2aHVnZXRsYmZzX2lfbW1hcF9yd3NlbV9rZXkpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjkyMDpcXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZodWdldGxiZnNfYW9wcztcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05MjEtXFx0XFx0c2ltcGxlX2lub2RlX2luaXRfdHMoaW5vZGUpO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTI4LVxcdFxcdGNhc2UgU19JRlJFRzpcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5Mjk6XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTMwOlxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkzMS1cXHRcXHRcXHRicmVhaztcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05MzItXFx0XFx0Y2FzZSBTX0lGRElSOlxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjkzMzpcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTM0LVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZzaW1wbGVfZGlyX29wZXJhdGlvbnM7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NDQtXFx0XFx0bG9ja2RlcF9hbm5vdGF0ZV9pbm9kZV9tdXRleF9rZXkoaW5vZGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk0NTpcXHRcXHR0cmFjZV9odWdldGxiZnNfYWxsb2NfaW5vZGUoaW5vZGUsIGRpciwgbW9kZSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTQ2LVxcdH0gZWxzZSB7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NTYtICovXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTU3OnN0YXRpYyBpbnQgaHVnZXRsYmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NTgtXFx0XFx0XFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk2MS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5NjI6XFx0aW5vZGUgPSBodWdldGxiZnNfZ2V0X2lub2RlKGRpci1cXHUwMDNlaV9zYiwgaWRtYXAsIGRpciwgbW9kZSwgZGV2KTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NjMtXFx0aWYgKCFpbm9kZSlcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk2OS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5NzA6c3RhdGljIHN0cnVjdCBkZW50cnkgKmh1Z2V0bGJmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTcxLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk3Mi17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTczOlxcdGludCByZXR2YWwgPSBodWdldGxiZnNfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk3NC1cXHRcXHRcXHRcXHQgICAgIG1vZGUsIDApO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTc5LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk4MDpzdGF0aWMgaW50IGh1Z2V0bGJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTgxLVxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTgzLXtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5ODQ6XFx0cmV0dXJuIGh1Z2V0bGJmc19ta25vZChpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHLCAwKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05ODUtfVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk4Ni1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5ODc6c3RhdGljIGludCBodWdldGxiZnNfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05ODgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy05OTItXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTkzOlxcdGlub2RlID0gaHVnZXRsYmZzX2dldF9pbm9kZShkaXItXFx1MDAzZWlfc2IsIGlkbWFwLCBkaXIsIG1vZGUgfCBTX0lGUkVHLCAwKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05OTQtXFx0aWYgKCFpbm9kZSlcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMDAtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTAwMTpzdGF0aWMgaW50IGh1Z2V0bGJmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMDItXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTAwOC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDA5OlxcdGlub2RlID0gaHVnZXRsYmZzX2dldF9pbm9kZShkaXItXFx1MDAzZWlfc2IsIGlkbWFwLCBkaXIsIG1vZGUsIDApO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMTAtXFx0aWYgKGlub2RlKSB7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDIzLSNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTAyNDpzdGF0aWMgaW50IGh1Z2V0bGJmc19taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMjUtXFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpkc3QsIHN0cnVjdCBmb2xpbyAqc3JjLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA0NC0jZWxzZVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNDU6I2RlZmluZSBodWdldGxiZnNfbWlncmF0ZV9mb2xpbyBOVUxMXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA0Ni0jZW5kaWZcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDQ3LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNDg6c3RhdGljIGludCBodWdldGxiZnNfZXJyb3JfcmVtb3ZlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNDktXFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNTYtICovXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTA1NzpzdGF0aWMgaW50IGh1Z2V0bGJmc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNTgte1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNTk6XFx0c3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8gPSBIVUdFVExCRlNfU0Iocm9vdC1cXHUwMDNlZF9zYik7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA2MC1cXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzYmluZm8tXFx1MDAzZXNwb29sO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA5My1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDk0OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA5NS17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTA5NjpcXHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbyA9IEhVR0VUTEJGU19TQihkZW50cnktXFx1MDAzZWRfc2IpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwOTctXFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9pbm9kZShkX2lub2RlKGRlbnRyeSkpO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTEyOC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTI5OnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTMwLXtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTMxOlxcdHN0cnVjdCBodWdldGxiZnNfc2JfaW5mbyAqc2JpID0gSFVHRVRMQkZTX1NCKHNiKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTMyLVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE0MS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTQyOnN0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJmc19kZWNfZnJlZV9pbm9kZXMoc3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8pXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE0My17XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTU2LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNTc6c3RhdGljIHZvaWQgaHVnZXRsYmZzX2luY19mcmVlX2lub2RlcyhzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbylcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTU4LXtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExNjYtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE2NzpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmh1Z2V0bGJmc19pbm9kZV9jYWNoZXA7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE2OC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTY5OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExNzAte1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzE6XFx0c3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8gPSBIVUdFVExCRlNfU0Ioc2IpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzI6XFx0c3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvICpwO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExNzMtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE3NDpcXHRpZiAodW5saWtlbHkoIWh1Z2V0bGJmc19kZWNfZnJlZV9pbm9kZXMoc2JpbmZvKSkpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE3NS1cXHRcXHRyZXR1cm4gTlVMTDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTc2OlxcdHAgPSBhbGxvY19pbm9kZV9zYihzYiwgaHVnZXRsYmZzX2lub2RlX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE3Ny1cXHRpZiAodW5saWtlbHkoIXApKSB7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE3ODpcXHRcXHRodWdldGxiZnNfaW5jX2ZyZWVfaW5vZGVzKHNiaW5mbyk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE3OS1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExODMtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE4NDpzdGF0aWMgdm9pZCBodWdldGxiZnNfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExODUte1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExODY6XFx0dHJhY2VfaHVnZXRsYmZzX2ZyZWVfaW5vZGUoaW5vZGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExODc6XFx0a21lbV9jYWNoZV9mcmVlKGh1Z2V0bGJmc19pbm9kZV9jYWNoZXAsIEhVR0VUTEJGU19JKGlub2RlKSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE4OC19XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE4OS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTkwOnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE5MS17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE5MjpcXHRodWdldGxiZnNfaW5jX2ZyZWVfaW5vZGVzKEhVR0VUTEJGU19TQihpbm9kZS1cXHUwMDNlaV9zYikpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExOTMtfVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExOTQtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE5NTpzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBodWdldGxiZnNfYW9wcyA9IHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTk2OlxcdC53cml0ZV9iZWdpblxcdD0gaHVnZXRsYmZzX3dyaXRlX2JlZ2luLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExOTc6XFx0LndyaXRlX2VuZFxcdD0gaHVnZXRsYmZzX3dyaXRlX2VuZCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTk4LVxcdC5kaXJ0eV9mb2xpb1xcdD0gbm9vcF9kaXJ0eV9mb2xpbyxcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTk5OlxcdC5taWdyYXRlX2ZvbGlvICA9IGh1Z2V0bGJmc19taWdyYXRlX2ZvbGlvLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMDA6XFx0LmVycm9yX3JlbW92ZV9mb2xpb1xcdD0gaHVnZXRsYmZzX2Vycm9yX3JlbW92ZV9mb2xpbyxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjAxLX07XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMjA0PXN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIwNS17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIwNjpcXHRzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKmVpID0gZm9vO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMDctXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjEwLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMTE6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjEyOlxcdC5yZWFkX2l0ZXJcXHRcXHQ9IGh1Z2V0bGJmc19yZWFkX2l0ZXIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIxMzpcXHQubW1hcFxcdFxcdFxcdD0gaHVnZXRsYmZzX2ZpbGVfbW1hcCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjE0LVxcdC5mc3luY1xcdFxcdFxcdD0gbm9vcF9mc3luYyxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMTYtXFx0Lmxsc2Vla1xcdFxcdFxcdD0gZGVmYXVsdF9sbHNlZWssXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIxNzpcXHQuZmFsbG9jYXRlXFx0XFx0PSBodWdldGxiZnNfZmFsbG9jYXRlLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMTgtXFx0LmZvcF9mbGFnc1xcdFxcdD0gRk9QX0hVR0VfUEFHRVMsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjIwLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMjE6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjIyOlxcdC5jcmVhdGVcXHRcXHQ9IGh1Z2V0bGJmc19jcmVhdGUsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIyMy1cXHQubG9va3VwXFx0XFx0PSBzaW1wbGVfbG9va3VwLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIyNS1cXHQudW5saW5rXFx0XFx0PSBzaW1wbGVfdW5saW5rLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMjY6XFx0LnN5bWxpbmtcXHQ9IGh1Z2V0bGJmc19zeW1saW5rLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMjc6XFx0Lm1rZGlyXFx0XFx0PSBodWdldGxiZnNfbWtkaXIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIyOC1cXHQucm1kaXJcXHRcXHQ9IHNpbXBsZV9ybWRpcixcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjI5OlxcdC5ta25vZFxcdFxcdD0gaHVnZXRsYmZzX21rbm9kLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMzAtXFx0LnJlbmFtZVxcdFxcdD0gc2ltcGxlX3JlbmFtZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjMxOlxcdC5zZXRhdHRyXFx0PSBodWdldGxiZnNfc2V0YXR0cixcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjMyOlxcdC50bXBmaWxlXFx0PSBodWdldGxiZnNfdG1wZmlsZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjMzLX07XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzNC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjM1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjM2OlxcdC5zZXRhdHRyXFx0PSBodWdldGxiZnNfc2V0YXR0cixcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjM3LX07XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzOC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjM5OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBodWdldGxiZnNfb3BzID0ge1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyNDA6XFx0LmFsbG9jX2lub2RlICAgID0gaHVnZXRsYmZzX2FsbG9jX2lub2RlLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyNDE6XFx0LmZyZWVfaW5vZGUgICAgID0gaHVnZXRsYmZzX2ZyZWVfaW5vZGUsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0MjpcXHQuZGVzdHJveV9pbm9kZSAgPSBodWdldGxiZnNfZGVzdHJveV9pbm9kZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQzOlxcdC5ldmljdF9pbm9kZVxcdD0gaHVnZXRsYmZzX2V2aWN0X2lub2RlLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyNDQ6XFx0LnN0YXRmc1xcdFxcdD0gaHVnZXRsYmZzX3N0YXRmcyxcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQ1OlxcdC5wdXRfc3VwZXJcXHQ9IGh1Z2V0bGJmc19wdXRfc3VwZXIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0NjpcXHQuc2hvd19vcHRpb25zXFx0PSBodWdldGxiZnNfc2hvd19vcHRpb25zLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyNDctfTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTEyNTQ9c3RhdGljIGxvbmdcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjU1Omh1Z2V0bGJmc19zaXplX3RvX2hwYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZV9vcHQsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI1NjpcXHRcXHRcXHQgZW51bSBodWdldGxiZnNfc2l6ZV90eXBlIHZhbF90eXBlKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyNTcte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTI3My0gKi9cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjc0OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTI3NS17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI3NjpcXHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eCA9IGZjLVxcdTAwM2Vmc19wcml2YXRlO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyNzctXFx0c3RydWN0IGZzX3BhcnNlX3Jlc3VsdCByZXN1bHQ7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzQ4LSAqL1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEzNDk6c3RhdGljIGludCBodWdldGxiZnNfdmFsaWRhdGUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNTAte1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEzNTE6XFx0c3RydWN0IGh1Z2V0bGJmc19mc19jb250ZXh0ICpjdHggPSBmYy1cXHUwMDNlZnNfcHJpdmF0ZTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzUyLVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTM1Ni1cXHQgKi9cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzU3OlxcdGN0eC1cXHUwMDNlbWF4X2hwYWdlcyA9IGh1Z2V0bGJmc19zaXplX3RvX2hwYWdlcyhjdHgtXFx1MDAzZWhzdGF0ZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzU4LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGN0eC1cXHUwMDNlbWF4X3NpemVfb3B0LFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNTktXFx0XFx0XFx0XFx0XFx0XFx0ICAgY3R4LVxcdTAwM2VtYXhfdmFsX3R5cGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEzNjA6XFx0Y3R4LVxcdTAwM2VtaW5faHBhZ2VzID0gaHVnZXRsYmZzX3NpemVfdG9faHBhZ2VzKGN0eC1cXHUwMDNlaHN0YXRlLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNjEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgY3R4LVxcdTAwM2VtaW5fc2l6ZV9vcHQsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMzc2PXN0YXRpYyBpbnRcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzc3Omh1Z2V0bGJmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzc4LXtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzc5OlxcdHN0cnVjdCBodWdldGxiZnNfZnNfY29udGV4dCAqY3R4ID0gZmMtXFx1MDAzZWZzX3ByaXZhdGU7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTM4MDpcXHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbztcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzgxLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEzODI6XFx0c2JpbmZvID0ga21hbGxvY19vYmooc3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzgzLVxcdGlmICghc2JpbmZvKVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQxMC1cXHRzYi1cXHUwMDNlc19tYWdpYyA9IEhVR0VUTEJGU19NQUdJQztcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDExOlxcdHNiLVxcdTAwM2VzX29wID0gXFx1MDAyNmh1Z2V0bGJmc19vcHM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQxMi1cXHRzYi1cXHUwMDNlc19kX2ZsYWdzID0gRENBQ0hFX0RPTlRDQUNIRTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MTUtXFx0LypcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDE2OlxcdCAqIER1ZSB0byB0aGUgc3BlY2lhbCBhbmQgbGltaXRlZCBmdW5jdGlvbmFsaXR5IG9mIGh1Z2V0bGJmcywgaXQgZG9lc1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MTctXFx0ICogbm90IHdvcmsgd2VsbCBhcyBhIHN0YWNraW5nIGZpbGVzeXN0ZW0uXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDE5LVxcdHNiLVxcdTAwM2VzX3N0YWNrX2RlcHRoID0gRklMRVNZU1RFTV9NQVhfU1RBQ0tfREVQVEg7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQyMDpcXHRzYi1cXHUwMDNlc19yb290ID0gZF9tYWtlX3Jvb3QoaHVnZXRsYmZzX2dldF9yb290KHNiLCBjdHgpKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDIxLVxcdGlmICghc2ItXFx1MDAzZXNfcm9vdClcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MjktXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQzMDpzdGF0aWMgaW50IGh1Z2V0bGJmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzMS17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQzMjpcXHRpbnQgZXJyID0gaHVnZXRsYmZzX3ZhbGlkYXRlKGZjKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDMzLVxcdGlmIChlcnIpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzNC1cXHRcXHRyZXR1cm4gZXJyO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0MzU6XFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBodWdldGxiZnNfZmlsbF9zdXBlcik7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzNi19XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzNy1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDM4OnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19mc19jb250ZXh0X2ZyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0Mzkte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ0Mi1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGh1Z2V0bGJmc19mc19jb250ZXh0X29wcyA9IHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQ0OlxcdC5mcmVlXFx0XFx0PSBodWdldGxiZnNfZnNfY29udGV4dF9mcmVlLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0NDU6XFx0LnBhcnNlX3BhcmFtXFx0PSBodWdldGxiZnNfcGFyc2VfcGFyYW0sXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ0NjpcXHQuZ2V0X3RyZWVcXHQ9IGh1Z2V0bGJmc19nZXRfdHJlZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDQ3LX07XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ0OC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQ5OnN0YXRpYyBpbnQgaHVnZXRsYmZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ1MC17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ1MTpcXHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDUyLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0NTM6XFx0Y3R4ID0ga3phbGxvY19vYmooc3RydWN0IGh1Z2V0bGJmc19mc19jb250ZXh0KTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDU0LVxcdGlmICghY3R4KVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ2Ni1cXHRmYy1cXHUwMDNlZnNfcHJpdmF0ZSA9IGN0eDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDY3OlxcdGZjLVxcdTAwM2VvcHNcXHQ9IFxcdTAwMjZodWdldGxiZnNfZnNfY29udGV4dF9vcHM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ2OC1cXHRyZXR1cm4gMDtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NzAtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3MTpzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgaHVnZXRsYmZzX2ZzX3R5cGUgPSB7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3MjpcXHQubmFtZVxcdFxcdFxcdD0gXFxcImh1Z2V0bGJmc1xcXCIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3MzpcXHQuaW5pdF9mc19jb250ZXh0XFx0PSBodWdldGxiZnNfaW5pdF9mc19jb250ZXh0LFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NzQtXFx0LnBhcmFtZXRlcnNcXHRcXHQ9IGh1Z2V0bGJfZnNfcGFyYW1ldGVycyxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NzgtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3OTpzdGF0aWMgc3RydWN0IHZmc21vdW50ICpodWdldGxiZnNfdmZzbW91bnRbSFVHRV9NQVhfSFNUQVRFXTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDgwLVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTUwMT1zdHJ1Y3QgZmlsZSAqaHVnZXRsYl9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTUxMy1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTE0OlxcdG1udCA9IGh1Z2V0bGJmc192ZnNtb3VudFtoc3RhdGVfaWR4XTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTE1LVxcdGlmICghbW50KVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTUyOS1cXHRmaWxlID0gRVJSX1BUUigtRU5PU1BDKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTMwOlxcdC8qIGh1Z2V0bGJmc192ZnNtb3VudFtdIG1vdW50cyBkbyBub3QgdXNlIGlkbWFwcGVkIG1vdW50cy4gICovXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTUzMTpcXHRpbm9kZSA9IGh1Z2V0bGJmc19nZXRfaW5vZGUobW50LVxcdTAwM2VtbnRfc2IsIFxcdTAwMjZub3BfbW50X2lkbWFwLCBOVUxMLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MzItXFx0XFx0XFx0XFx0ICAgIFNfSUZSRUcgfCBTX0lSV1hVR08sIDApO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU0Ni1cXHRcXHRmaWxlID0gYWxsb2NfZmlsZV9wc2V1ZG8oaW5vZGUsIG1udCwgbmFtZSwgT19SRFdSLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1NDc6XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnMpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NDgtXFx0aWYgKCFJU19FUlIoZmlsZSkpXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTU1LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1NTY6c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqX19pbml0IG1vdW50X29uZV9odWdldGxiZnMoc3RydWN0IGhzdGF0ZSAqaClcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTU3LXtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NjAtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU2MTpcXHRmYyA9IGZzX2NvbnRleHRfZm9yX21vdW50KFxcdTAwMjZodWdldGxiZnNfZnNfdHlwZSwgU0JfS0VSTk1PVU5UKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTYyLVxcdGlmIChJU19FUlIoZmMpKSB7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTY0LVxcdH0gZWxzZSB7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU2NTpcXHRcXHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eCA9IGZjLVxcdTAwM2Vmc19wcml2YXRlO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NjYtXFx0XFx0Y3R4LVxcdTAwM2Voc3RhdGUgPSBoO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU3MC1cXHRpZiAoSVNfRVJSKG1udCkpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU3MTpcXHRcXHRwcl9lcnIoXFxcIkNhbm5vdCBtb3VudCBpbnRlcm5hbCBodWdldGxiZnMgZm9yIHBhZ2Ugc2l6ZSAlbHVLXFxcIixcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTcyLVxcdFxcdCAgICAgICBodWdlX3BhZ2Vfc2l6ZShoKSAvIFNaXzFLKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NzUtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU3NjpzdGF0aWMgaW50IF9faW5pdCBpbml0X2h1Z2V0bGJmc19mcyh2b2lkKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1Nzcte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU4OC1cXHRlcnJvciA9IC1FTk9NRU07XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU4OTpcXHRodWdldGxiZnNfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoXFxcImh1Z2V0bGJmc19pbm9kZV9jYWNoZVxcXCIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU5MDpcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvKSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTkxLVxcdFxcdFxcdFxcdFxcdDAsIFNMQUJfQUNDT1VOVCwgaW5pdF9vbmNlKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTkyOlxcdGlmIChodWdldGxiZnNfaW5vZGVfY2FjaGVwID09IE5VTEwpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU5My1cXHRcXHRnb3RvIG91dDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTk0LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1OTU6XFx0ZXJyb3IgPSByZWdpc3Rlcl9maWxlc3lzdGVtKFxcdTAwMjZodWdldGxiZnNfZnNfdHlwZSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU5Ni1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTk5LVxcdC8qIGRlZmF1bHQgaHN0YXRlIG1vdW50IGlzIHJlcXVpcmVkICovXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTYwMDpcXHRtbnQgPSBtb3VudF9vbmVfaHVnZXRsYmZzKFxcdTAwMjZkZWZhdWx0X2hzdGF0ZSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYwMS1cXHRpZiAoSVNfRVJSKG1udCkpIHtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MDQtXFx0fVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MDU6XFx0aHVnZXRsYmZzX3Zmc21vdW50W2RlZmF1bHRfaHN0YXRlX2lkeF0gPSBtbnQ7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYwNi1cXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MTQtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTYxNTpcXHRcXHRtbnQgPSBtb3VudF9vbmVfaHVnZXRsYmZzKGgpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MTYtXFx0XFx0aWYgKElTX0VSUihtbnQpKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MTc6XFx0XFx0XFx0aHVnZXRsYmZzX3Zmc21vdW50W2ldID0gTlVMTDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjE4LVxcdFxcdGVsc2VcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNjE5OlxcdFxcdFxcdGh1Z2V0bGJmc192ZnNtb3VudFtpXSA9IG1udDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjIwLVxcdFxcdGkrKztcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MjUtIG91dF91bnJlZzpcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNjI2OlxcdCh2b2lkKXVucmVnaXN0ZXJfZmlsZXN5c3RlbShcXHUwMDI2aHVnZXRsYmZzX2ZzX3R5cGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MjctIG91dF9mcmVlOlxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2Mjg6XFx0a21lbV9jYWNoZV9kZXN0cm95KGh1Z2V0bGJmc19pbm9kZV9jYWNoZXApO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MjktIG91dDpcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MzEtfVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MzI6ZnNfaW5pdGNhbGwoaW5pdF9odWdldGxiZnNfZnMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU4OjQ2Ljg0NTM1MzUyMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMDgyMzI0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgSHVnZXRsYmZzIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBzdHJhaWdodCBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgZnMvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGludGVyZXN0aW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCBzcGVjaWZpY2FsbHksIEknbSBiZXR0aW5nIHRoZSBjcnVjaWFsIG9uZXMgZm9yIEh1Z2V0bGJmcyBhbmQgaHVnZSBwYWdlcyB3aWxsIGJlIGluIHRoZXJlLiBJJ20gdGhpbmtpbmcgYXJvdW5kIGxpbmUgMjUwLCBnaXZlIG9yIHRha2UgYSBmZXcgbGluZXMg4oCTIHRoYXQncyBvZnRlbiB3aGVyZSByZWxhdGVkIG9wdGlvbnMgdGVuZCB0byBjbHVzdGVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHByZWNpc2UgY29uZmlnIHN5bWJvbHMsIHNvIEkgd2FudCB0byBwaW5wb2ludCB0aGUgZGVmaW5pdGlvbnMgb2YgYEhVR0VUTEJGU2AgYW5kIGBIVUdFVExCX1BBR0VgLiBLbm93aW5nIHRoZSBleGFjdCBvcHRpb25zIGlzIGtleS4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlaXIgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIGFueSBhc3NvY2lhdGVkIGhlbHAgdGV4dC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCdzIHJlcXVpcmVkIGZvciB0aGVtIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlci4gVGhpcyBzaG91bGQgY2xhcmlmeSB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBmb3IgSHVnZXRsYmZzIHdpdGhpbiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDIzNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU4OjQ5LjE1MzU4ODYyOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNDY6XFx0XFxuIDI0NzpcXHRjb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4gMjQ4OlxcdFxcdGRlZl9ib29sIG5cXG4gMjQ5OlxcdFxcbiAyNTA6XFx0bWVudWNvbmZpZyBIVUdFVExCRlNcXG4gMjUxOlxcdFxcdGJvb2wgXFxcIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gMjUyOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4gMjUzOlxcdFxcdHNlbGVjdCBNRU1GRF9DUkVBVEVcXG4gMjU0OlxcdFxcdHNlbGVjdCBQQURBVEEgaWYgU01QXFxuIDI1NTpcXHRcXHRoZWxwXFxuIDI1NjpcXHRcXHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cXG4gMjU3OlxcdFxcdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxcbiAyNTg6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDI1OTpcXHRcXG4gMjYwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjYxOlxcdFxcbiAyNjI6XFx0aWYgSFVHRVRMQkZTXFxuIDI2MzpcXHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbiAyNjQ6XFx0XFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG4gMjY1OlxcdFxcdGRlZmF1bHQgblxcbiAyNjY6XFx0XFx0ZGVwZW5kcyBvbiBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbiAyNjc6XFx0XFx0aGVscFxcbiAyNjg6XFx0XFx0ICBUaGUgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvZmYuIFNheSBZIGhlcmUgdG9cXG4gMjY5OlxcdFxcdCAgZW5hYmxlIEhWTyBieSBkZWZhdWx0LiBJdCBjYW4gYmUgZGlzYWJsZWQgdmlhIGh1Z2V0bGJfZnJlZV92bWVtbWFwPW9mZlxcbiAyNzA6XFx0XFx0ICAoYm9vdCBjb21tYW5kIGxpbmUpIG9yIGh1Z2V0bGJfb3B0aW1pemVfdm1lbW1hcCAoc3lzY3RsKS5cXG4gMjcxOlxcdGVuZGlmICMgSFVHRVRMQkZTXFxuIDI3MjpcXHRcXG4gMjczOlxcdGNvbmZpZyBIVUdFVExCX1BBR0VcXG4gMjc0OlxcdFxcdGRlZl9ib29sIEhVR0VUTEJGU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1ODo0OS4xNTM3MDE0ODhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI2OTUzNjEzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBDT05GSUdfSFVHRVRMQkZTKipcblxuT2theSwgc28gYENPTkZJR19IVUdFVExCRlNgIGlzIGVuYWJsZWQsIHdoaWNoLCBhcyBJIGtub3csIGF1dG9tYXRpY2FsbHkgbWVhbnMgYEhVR0VUTEJfUEFHRWAgaXMgYWxzbyBlbmFibGVkLiBMZXQncyBkaWcgaW50byB0aGUgZGV0YWlscyBvZiB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gc2VlIHdoaWNoIHN5bWJvbHMgYXJlIGJlaW5nIHRvdWNoZWQuIEkgc2VlIGNoYW5nZXMgdG8gYGh1Z2V0bGJmc19zdGF0ZnNgIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2AuIFRoYXQncyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgZmlsZSBzeXN0ZW0gc3RhdGlzdGljcyB3aXRoIGh1Z2V0bGIgcGFnZXMuIFRoZW4gdGhlcmUgYXJlIHNvbWUgc3RhdGljIGZ1bmN0aW9ucyBpbiBgbW0vaHVnZXRsYi5jYDogYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYCwgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCwgYW5kIGBzdWJwb29sX2lzX2ZyZWVgLiBUaGUgdXNlIG9mIHN0YXRpYyBpcyBzaWduaWZpY2FudCwgYXMgaXQgbGltaXRzIHRoZWlyIHZpc2liaWxpdHkgYW5kIHVzYWdlLiBMYXN0bHksIEkgbm90aWNlIHR3byBub24tc3RhdGljIGZ1bmN0aW9ucywgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYWxzbyBpbiBgbW0vaHVnZXRsYi5jYC5cblxuTm93LCBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhvc2Ugc3VicG9vbCBmdW5jdGlvbnMuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYCBhbmQgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCBhcmUgaW5kZWVkIHN0YXRpYywgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBJIG5lZWQgdG8gdHJhY2UgdGhlaXIgY2FsbGVycy4gVW5kZXJzdGFuZGluZyB3aGVyZSB0aGVzZSBzdWJwb29sIGZ1bmN0aW9ucyBhcmUgdXNlZCBpcyBjcml0aWNhbCBmb3IgZ3Jhc3BpbmcgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mIGh1Z2V0bGIgcGFnZXMuIFRoaXMgYW5hbHlzaXMgd2lsbCBoZWxwIG1lIGFzc2VzcyB0aGUgcGF0Y2gncyBwb3RlbnRpYWwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk5NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU4OjUyLjQyMzI0MDI0MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEyNDA5MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXBhZ2Vfc3VicG9vbF8oZ2V0fHB1dClfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZXRsYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xNzk9dm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXFxuLS1cXG5tbS9odWdldGxiLmMtMTkyLS8qKlxcbm1tL2h1Z2V0bGIuYzoxOTM6ICogaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMgLSBHZXQgcGFnZXMgZnJvbSBhIHN1YnBvb2xcXG5tbS9odWdldGxiLmMtMTk0LSAqIEBzcG9vbDogcG9pbnRlciB0byBzdWJwb29sIHN0cnVjdHVyZSAobWF5IGJlIE5VTEwpXFxuLS1cXG5tbS9odWdldGxiLmMtMjA0LSAqL1xcbm1tL2h1Z2V0bGIuYzoyMDU6c3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbm1tL2h1Z2V0bGIuYy0yMDYtXFx0XFx0XFx0XFx0ICAgICAgbG9uZyBkZWx0YSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNDMtLyoqXFxubW0vaHVnZXRsYi5jOjI0NDogKiBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyAtIFJlbGVhc2UgcGFnZXMgYmFjayB0byBhIHN1YnBvb2xcXG5tbS9odWdldGxiLmMtMjQ1LSAqIEBzcG9vbDogcG9pbnRlciB0byBzdWJwb29sIHN0cnVjdHVyZSAobWF5IGJlIE5VTEwpXFxuLS1cXG5tbS9odWdldGxiLmMtMjU2LSAqL1xcbm1tL2h1Z2V0bGIuYzoyNTc6c3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbm1tL2h1Z2V0bGIuYy0yNTgtXFx0XFx0XFx0XFx0ICAgICAgIGxvbmcgZGVsdGEpXFxuLS1cXG5tbS9odWdldGxiLmM9OTc1PXZvaWQgaHVnZXRsYl9maXhfcmVzZXJ2ZV9jb3VudHMoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy05ODAtXFxubW0vaHVnZXRsYi5jOjk4MTpcXHRyc3ZfYWRqdXN0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xcbm1tL2h1Z2V0bGIuYy05ODItXFx0aWYgKHJzdl9hZGp1c3QgXFx1MDAzZSAwKSB7XFxuLS1cXG5tbS9odWdldGxiLmM9MTY4Nj12b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE3MTEtXFx0ICogd291bGQgaGF2ZSBiZWVuIGEgcGFnZSByZXNlcnZlZCBpbiB0aGUgc3VicG9vbCBiZWZvcmUgYWxsb2NhdGlvblxcbm1tL2h1Z2V0bGIuYzoxNzEyOlxcdCAqIHZpYSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcygpLiAgU2luY2Ugd2UgYXJlICdyZXN0b3JpbmcnIHRoZVxcbm1tL2h1Z2V0bGIuYzoxNzEzOlxcdCAqIHJlc2VydmF0aW9uLCBkbyBub3QgY2FsbCBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcygpIGFzIHRoaXMgd2lsbFxcbm1tL2h1Z2V0bGIuYy0xNzE0LVxcdCAqIHJlbW92ZSB0aGUgcmVzZXJ2ZWQgcGFnZSBmcm9tIHRoZSBzdWJwb29sLlxcbi0tXFxubW0vaHVnZXRsYi5jLTE3MjItXFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjE3MjM6XFx0XFx0aWYgKGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKSA9PSAwKVxcbm1tL2h1Z2V0bGIuYy0xNzI0LVxcdFxcdFxcdHJlc3RvcmVfcmVzZXJ2ZSA9IHRydWU7XFxuLS1cXG5tbS9odWdldGxiLmM9Mjk1Mj1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtMjk5Ni1cXHRpZiAobWFwX2NoZykge1xcbm1tL2h1Z2V0bGIuYzoyOTk3OlxcdFxcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTtcXG5tbS9odWdldGxiLmMtMjk5OC1cXHRcXHRpZiAoZ2JsX3Jlc3ZfZ2V0IFxcdTAwM2MgMCkge1xcbi0tXFxubW0vaHVnZXRsYi5jLTMwNjItXFxubW0vaHVnZXRsYi5jOjMwNjM6XFx0XFx0XFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcXG5tbS9odWdldGxiLmMtMzA2NC1cXHRcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1yc3ZfYWRqdXN0KTtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMDc1LVxcdGlmIChtYXBfY2hnKSB7XFxubW0vaHVnZXRsYi5jOjMwNzY6XFx0XFx0bG9uZyBnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XFxubW0vaHVnZXRsYi5jLTMwNzctXFxuLS1cXG5tbS9odWdldGxiLmM9NDcxOT1zdGF0aWMgdm9pZCBodWdldGxiX3ZtX29wX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZXRsYi5jLTQ3NDItXFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjQ3NDM6XFx0XFx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgcmVzZXJ2ZSk7XFxubW0vaHVnZXRsYi5jLTQ3NDQtXFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTY2Njk9bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NzU1LVxcdCAqL1xcbm1tL2h1Z2V0bGIuYzo2NzU2OlxcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpO1xcbm1tL2h1Z2V0bGIuYy02NzU3LVxcdGlmIChnYmxfcmVzdl9nZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5tbS9odWdldGxiLmMtNjgwNS1cXG5tbS9odWdldGxiLmM6NjgwNjpcXHRcXHRcXHRyc3ZfYWRqdXN0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsXFxubW0vaHVnZXRsYi5jLTY4MDctXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2hnIC0gYWRkKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYy02ODI2LVxcdCAqL1xcbm1tL2h1Z2V0bGIuYzo2ODI3OlxcdGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBjaGcpO1xcbm1tL2h1Z2V0bGIuYy02ODI4LVxcdC8qXFxuLS1cXG5tbS9odWdldGxiLmM9Njg1ND1sb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxcbi0tXFxubW0vaHVnZXRsYi5jLTY4ODgtXFx0ICovXFxubW0vaHVnZXRsYi5jOjY4ODk6XFx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgKGNoZyAtIGZyZWVkKSk7XFxubW0vaHVnZXRsYi5jLTY4OTAtXFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1ODo1Mi40ODQ0ODYyMTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk5MjYwODIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSHVnZSBQYWdlIFN1YnBvb2wgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGZvY3VzIG9uIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AgYW5kIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AuIEV2ZW4gdGhvdWdoIHRoZXkncmUgc3RhdGljIHdpdGhpbiBgbW0vaHVnZXRsYi5jYCwgYW5kIEknbSBhd2FyZSBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlbid0IGlubGluZWQgKmRvKiBoYXZlIHN5bWJvbHMgaW4gdm1saW51eCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gZm9sbG93aW5nIGJlc3QgcHJhY3RpY2VzLiBUaW1lIHRvIHJlZnJlc2ggb24gdGhlIGd1aWRlbGluZXMuLi4gcmlnaHQsIHRoZSByZWxldmFudCBzZWN0aW9uIGlzOiBcIlRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UU1wiIGFuZCBcIkhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlNcIi5cblxuU28sIEknbSBub3RpbmcgdGhhdCBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgIGFuZCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgIGFyZSBzdGF0aWMgKm5vbi1pbmxpbmUqIGZ1bmN0aW9ucyBsb2NhdGVkIGluIGEgYC5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgYG1tL2h1Z2V0bGIuY2AuIFRoYXQncyBpbXBvcnRhbnQuIEl0IG1lYW5zIHRoZXknbGwgc2hvdyB1cCBhcyBzeW1ib2xzLlxuXG5Ob3csIHRvIHNhdGlzZnkgdGhlIGd1aWRlbGluZXMsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgbm9uLXN0YXRpYywgZXhwb3J0ZWQsIG9yIGNhbGxlciBmdW5jdGlvbnMuIEFoLCBoZXJlIHdlIGdvOiBJJ3ZlIGlkZW50aWZpZWQgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBlaXRoZXIgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgc3Vic3lzdGVtIG9yIGFyZSBtb2RpZmllZCBkdWUgdG8gdGhlIGNoYW5nZSBpbiB0aGUgc3RhdGljIGZ1bmN0aW9ucy4gVGhlIGZ1bmN0aW9ucyBhcmU6XG5gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBgaHVnZXRsYmZzX3N0YXRmc2AsIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AsIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AsIGBodWdlcGFnZV9wdXRfc3VicG9vbGAsIGBodWdldGxiX3VucmVzZXJ2ZV9wYWdlc2AuXG5cbkknbSBub3cgcmVhZHkgdG8gbG9vayBmb3IgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIGFyZWEsIHNwZWNpZmljYWxseSB0aGUgb25lcyB0aGF0IGNhbGwgYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2xgIC8gYHN1YnBvb2xfaXNfZnJlZWAsIHdoaWNoIHdpbGwgZ2l2ZSBtZSBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgaW50ZXJhY3Rpb25zIGluIHRoaXMgYXJlYS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwNTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6NTg6NTYuNDc3MDk3NTk2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkyMzE0MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3VicG9vbF9pc19mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2V0bGIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MTI3PXN0YXRpYyBzdHJ1Y3QgcmVzdl9tYXAgKnZtYV9yZXN2X21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxubW0vaHVnZXRsYi5jLTEyOC1cXG5tbS9odWdldGxiLmM6MTI5OnN0YXRpYyBpbmxpbmUgYm9vbCBzdWJwb29sX2lzX2ZyZWUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxcbm1tL2h1Z2V0bGIuYy0xMzAte1xcbi0tXFxubW0vaHVnZXRsYi5jPTEzNz1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxuLS1cXG5tbS9odWdldGxiLmMtMTM5LXtcXG5tbS9odWdldGxiLmM6MTQwOlxcdGJvb2wgZnJlZV9zdWJwb29sID0gc3VicG9vbF9pc19mcmVlKHNwb29sKTtcXG5tbS9odWdldGxiLmMtMTQxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1ODo1Ni41OTYzMzYwMjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAxNjU3NjgxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbGVycyBvZiBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbGAqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhlIGB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sYCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIHVzYWdlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBhY3R1YWxseSAqY2FsbGluZyogdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBJdCdzIGNydWNpYWwgYmVjYXVzZSB0aGUgZnVuY3Rpb24ncyBuYW1lIHN1Z2dlc3RzIGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBlaXRoZXIgdW5sb2NraW5nIG9yIHJlbGVhc2luZyBhIHN1YnBvb2wsIHdoaWNoIGlzIGEgdmVyeSBzcGVjaWZpYyB0eXBlIG9mIGRhdGEgc3RydWN0dXJlLCBwcmVzdW1hYmx5LCByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgb3IgY29uY3VycmVuY3kgY29udHJvbC4gVW5kZXJzdGFuZGluZyB3aGVyZSBpdCdzIGJlaW5nIGludm9rZWQgd2lsbCByZXZlYWwgaXRzIHB1cnBvc2UgYW5kLCBwZXJoYXBzIG1vcmUgaW1wb3J0YW50bHksIHRoZSBjcml0aWNhbCBwYXRocyBvZiBleGVjdXRpb24gdGhhdCBkZXBlbmQgb24gaXRzIGNvcnJlY3Qgb3BlcmF0aW9uLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBkZXRlcm1pbmUgdGhlIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjYWxsLCBhbmQgd2hldGhlciB0aGUgZnVuY3Rpb24gaXMgdXNlZCBpbiBzZXZlcmFsIGRpZmZlcmVudCBwbGFjZXMgb3Igb25seSBhIGhhbmRmdWwuIFRoaXMgd2lsbCBpbmZvcm0gbXkgaW52ZXN0aWdhdGlvbiBzaWduaWZpY2FudGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDAzNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU4OjU4LjYxMjkxNzMyNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA0MzA3MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdldGxiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTEyOT1zdGF0aWMgaW5saW5lIGJvb2wgc3VicG9vbF9pc19mcmVlKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzYtXFxubW0vaHVnZXRsYi5jOjEzNzpzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxubW0vaHVnZXRsYi5jLTEzOC1cXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGlycV9mbGFncylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xNzk9dm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXFxuLS1cXG5tbS9odWdldGxiLmMtMTg4LVxcdHNwb29sLVxcdTAwM2Vjb3VudC0tO1xcbm1tL2h1Z2V0bGIuYzoxODk6XFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbm1tL2h1Z2V0bGIuYy0xOTAtfVxcbi0tXFxubW0vaHVnZXRsYi5jPTI1Nz1zdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxuLS1cXG5tbS9odWdldGxiLmMtMjkxLVxcdCAqL1xcbm1tL2h1Z2V0bGIuYzoyOTI6XFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbm1tL2h1Z2V0bGIuYy0yOTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU4OjU4LjY4MzM1NDUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3MDYyMTMxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBIdWdlVExCIFBhZ2UgUmVzZXJ2YXRpb25zKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIGBodWdldGxiYCBzaXR1YXRpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIGhvdyBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCBpcyBiZWluZyB1c2VkLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY2FsbCBzdGFjazsgZXNzZW50aWFsbHksIHdoZXJlIGFyZSB0aGUgcG9pbnRzIGluIHRoZSBjb2RlIHRoYXQgYWN0dWFsbHkgaW52b2tlIHRoaXMgZnVuY3Rpb24/IFRoYXQncyB0aGUgY3JpdGljYWwgZmlyc3Qgc3RlcC4gTmV4dCwgSSdsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGF0IGluZm9ybWF0aW9uIHdpdGggdGhlIGJyb2FkZXIgdXNlIGNhc2VzIG9mIHRoZSBodWdldGxiZnMgc3Vic3lzdGVtIGluIGdlbmVyYWwuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuIFRoaXMgd2lsbCBsaWtlbHkgaW52b2x2ZSBzb21lIGdyZXAgd29yayBhbmQgZm9sbG93aW5nIGNhbGwgZ3JhcGhzLiBLbm93aW5nIHRoaXMsIEkgY2FuIGJlZ2luIHRvIGdyYXNwIHdoYXQgdGhlIGtlcm5lbCBpcyBkb2luZyB3aXRoIHRoZXNlIHBhZ2VzLCB1bmRlcnN0YW5kIGFueSBwb3NzaWJsZSBjb250ZW50aW9uIGlzc3VlcyBhbmQgYWRkcmVzcyB0aGUgcm9vdCBvZiBhbnkgcmVsYXRlZCBwZXJmb3JtYW5jZSBwcm9ibGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1OTIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1OTowMi4zODk1NzE1MjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODc0MDc3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX3Jlc2VydmVfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2h1Z2V0bGJmcy9pbm9kZS5jPTk5PXN0YXRpYyBpbnQgaHVnZXRsYmZzX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTItXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTUzOlxcdGlmIChodWdldGxiX3Jlc2VydmVfcGFnZXMoaW5vZGUsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU0LVxcdFxcdFxcdFxcdHZtYS1cXHUwMDNldm1fcGdvZmYgXFx1MDAzZVxcdTAwM2UgaHVnZV9wYWdlX29yZGVyKGgpLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTQ4OD1zdGF0aWMgaW50IGdldF9oc3RhdGVfaWR4KGludCBwYWdlX3NpemVfbG9nKVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ5OC0gKiBOb3RlIHRoYXQgc2l6ZSBzaG91bGQgYmUgYWxpZ25lZCB0byBwcm9wZXIgaHVnZXBhZ2Ugc2l6ZSBpbiBjYWxsZXIgc2lkZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDk5OiAqIG90aGVyd2lzZSBodWdldGxiX3Jlc2VydmVfcGFnZXMgcmVzZXJ2ZXMgb25lIGxlc3MgaHVnZXBhZ2VzIHRoYW4gaW50ZW5kZWQuXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTUwMC0gKi9cXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xNTAxPXN0cnVjdCBmaWxlICpodWdldGxiX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTQwLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1NDE6XFx0aWYgKGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhpbm9kZSwgMCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTQyLVxcdFxcdFxcdHNpemUgXFx1MDAzZVxcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGhzdGF0ZV9pbm9kZShpbm9kZSkpLCBOVUxMLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1OTowMi41MDgzMjAxNzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYwMzgxMDk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gSHVnZVRMQiBSZXNlcnZhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBzcXVhcmVseSBmb2N1c2VkIG9uIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgIHdpdGhpbiB0aGUgYG1tL2AgZGlyZWN0b3J5LiBUaGF0IGZ1bmN0aW9uIGlzIHRoZSBsaW5jaHBpbiBmb3IgdW5kZXJzdGFuZGluZyBob3cgd2UgY2FydmUgb3V0IGFuZCBtYW5hZ2UgdGhvc2UgcHJlY2lvdXMgSHVnZVRMQiBwYWdlcywgYW5kIGl0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSBob3cgdGhlIHJlc2VydmF0aW9uIGxvZ2ljIGlzIGltcGxlbWVudGVkIGhlcmUuIEknbSB0aGlua2luZyBhYm91dCB0aGUgYWxsb2NhdGlvbiBwb2xpY3kgaXQgZW1wbG95cywgcG90ZW50aWFsIGVkZ2UgY2FzZXMgYXJvdW5kIGZyYWdtZW50YXRpb24sIGFuZCBlc3BlY2lhbGx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBOVU1BIG5vZGUgY29uc3RyYWludHMgKGlmIGl0IGRvZXMpLiBBbnkgb2J2aW91cyBmbGF3cyBvciBhcmVhcyB0aGF0IGNvdWxkIGJlbmVmaXQgZnJvbSBwZXJmb3JtYW5jZSB0dW5pbmcgY29tZSB0byBtaW5kLiBJJ20gZGlnZ2luZyBkZWVwZXIgaW50byBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIEh1Z2VUTEIgaW5mcmFzdHJ1Y3R1cmXigJR0aGUgbWFwcGluZywgdGhlIGZhdWx0IGhhbmRsaW5nLCBhbmQsIG9mIGNvdXJzZSwgZGVhbGxvY2F0aW9uLiBFc3NlbnRpYWxseSwgSSdtIHRyeWluZyB0byBnZXQgYSBxdWljayBtZW50YWwgbWFwIG9mIHRoZSByZXNlcnZhdGlvbiBwcm9jZXNzIHRvIGV2YWx1YXRlIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTE5NiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU5OjA1LjExMjEzNTM5NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzExMTM3ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl9yZXNlcnZlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9Mjk1Mj1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtMzA1My1cXHRcXHQgKiB2bWFfbmVlZHNfcmVzZXJ2YXRpb24gYW5kIHZtYV9jb21taXRfcmVzZXJ2YXRpb24uXFxubW0vaHVnZXRsYi5jOjMwNTQ6XFx0XFx0ICogVGhpcyBpbmRpY2F0ZXMgYSByYWNlIHdpdGggaHVnZXRsYl9yZXNlcnZlX3BhZ2VzLlxcbm1tL2h1Z2V0bGIuYy0zMDU1LVxcdFxcdCAqIEFkanVzdCBmb3IgdGhlIHN1YnBvb2wgY291bnQgaW5jcmVtZW50ZWQgYWJvdmUgQU5EXFxubW0vaHVnZXRsYi5jOjMwNTY6XFx0XFx0ICogaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzIGZvciB0aGUgc2FtZSBwYWdlLlxcdEFsc28sXFxubW0vaHVnZXRsYi5jOjMwNTc6XFx0XFx0ICogdGhlIHJlc2VydmF0aW9uIGNvdW50IGFkZGVkIGluIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1xcbm1tL2h1Z2V0bGIuYy0zMDU4LVxcdFxcdCAqIG5vIGxvbmdlciBhcHBsaWVzLlxcbi0tXFxubW0vaHVnZXRsYi5jPTY0OTM9bG9uZyBodWdldGxiX2NoYW5nZV9wcm90ZWN0aW9uKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTY2NjgtXFxubW0vaHVnZXRsYi5jOjY2Njk6bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG5tbS9odWdldGxiLmMtNjY3MC1cXHRcXHRsb25nIGZyb20sIGxvbmcgdG8sXFxuLS1cXG5tbS9odWdldGxiLmMtNjcxMS1cXHRcXHQvKlxcbm1tL2h1Z2V0bGIuYzo2NzEyOlxcdFxcdCAqIHJlc3ZfbWFwIGNhbiBub3QgYmUgTlVMTCBhcyBodWdldGxiX3Jlc2VydmVfcGFnZXMgaXMgb25seVxcbm1tL2h1Z2V0bGIuYy02NzEzLVxcdFxcdCAqIGNhbGxlZCBmb3IgaW5vZGVzIGZvciB3aGljaCByZXN2X21hcHMgd2VyZSBjcmVhdGVkIChzZWVcXG4tLVxcbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxcbi0tXFxubW0vbWVtZmQuYy04OS1cXG5tbS9tZW1mZC5jOjkwOlxcdFxcdG5yX3Jlc3YgPSBodWdldGxiX3Jlc2VydmVfcGFnZXMoaW5vZGUsIGlkeCwgaWR4ICsgMSwgTlVMTCwgRU1QVFlfVk1BX0ZMQUdTKTtcXG5tbS9tZW1mZC5jLTkxLVxcdFxcdGlmIChucl9yZXN2IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6NTk6MDUuMTgzMjU4MTExWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxMzM2OTQ4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIGBhbGxvY19odWdldGxiX2ZvbGlvYDpcblxuKipEZWNvbnN0cnVjdGluZyBgYWxsb2NfaHVnZXRsYl9mb2xpb2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYGFsbG9jX2h1Z2V0bGJfZm9saW9gLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBsYW5kc2NhcGUsIHRoaXMgZnVuY3Rpb24gaXMgb2J2aW91c2x5IGEgY3JpdGljYWwgcGllY2UuIEl0J3MgdGhlIGdhdGVrZWVwZXIgZm9yIEh1Z2VUTEIgZm9saW8gYWxsb2NhdGlvbiwgYW5kIHRoZXJlZm9yZSBkaXJlY3RseSBpbXBhY3RzIHRoZSBwZXJmb3JtYW5jZSBvZiBhcHBsaWNhdGlvbnMgdGhhdCBsZXZlcmFnZSBodWdlIHBhZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG9uIGFuIGludGltYXRlIGxldmVsIHRvIG9wdGltaXplIHRoZSBjb2RlIEkgd29yayB3aXRoLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgb3JpZ2luIGFuZCB1c2FnZS4gV2hhdCBjYWxscyB0aGlzIGZ1bmN0aW9uPyBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb250ZXh0cz8gSXMgaXQgY2FsbGVkIGZyb20gYSBjcml0aWNhbCBwYXRoPyBEb2VzIGl0IGhhbmRsZSBhbnkgbG9ja2luZywgb3IgYXNzdW1lIGl0J3MgcHJvdGVjdGVkIGF0IGEgaGlnaGVyIGxldmVsPyBUaGVzZSBhcmUgdGhlIGZpcnN0IHF1ZXN0aW9ucyBJIHdvdWxkIGhhdmUgdG8gYW5zd2VyIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYW5kIGhvdyB0byB0d2VhayBpdC5cblxuSSdkIGFsc28gbmVlZCB0byBzY3J1dGluaXplIGl0cyBpbnRlcm5hbCBsb2dpYy4gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBIdWdlVExCIGluZnJhc3RydWN0dXJlPyBEb2VzIGl0IHV0aWxpemUgYW55IGludGVybmFsIGRhdGEgc3RydWN0dXJlcz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGxpa2UgY29udGVudGlvbiBvbiBwYXJ0aWN1bGFyIHJlc291cmNlcyBvciBvdmVybHkgY29tcGxleCBhbGdvcml0aG1zPyBJJ2QgbG9vayBmb3IgYXJlYXMgd2hlcmUgb3B0aW1pemF0aW9uIG1pZ2h0IGJlIHBvc3NpYmxlLCBsaWtlIHByZS1jYWxjdWxhdGluZyB2YWx1ZXMsIG9yIHVzaW5nIG1vcmUgZWZmaWNpZW50IGFsbG9jYXRpb24gc3RyYXRlZ2llcy5cblxuQWxzbywgSSdkIHdhbnQgdG8gZXhhbWluZSB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHJlY292ZXJ5IG1lY2hhbmlzbXMuIFdoYXQgaGFwcGVucyBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscz8gRG9lcyBpdCBkZWdyYWRlIGdyYWNlZnVsbHk/IEFyZSB0aGVyZSByZXRyeSBtZWNoYW5pc21zPyBIb3cgYXJlIGVycm9ycyByZXBvcnRlZCwgYW5kIGhvdyBhcmUgdGhleSBwcm9wYWdhdGVkIHVwIHRoZSBjYWxsIHN0YWNrPyBUaGlzIHBhcnQgaXMgY3J1Y2lhbCBmb3IgcmVsaWFiaWxpdHkuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgYW55IGZhaWx1cmUgbW9kZXMgY291bGQgYmVjb21lIGFuIGlzc3VlIGxhdGVyIG9uLlxuXG5GaW5hbGx5LCBJJ2QgY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIG1lbW9yeSBmcmFnbWVudGF0aW9uIGlzc3Vlcy4gQXJlIHJlc291cmNlcyBwcm9wZXJseSByZWxlYXNlZCwgZXNwZWNpYWxseSBpbiBlcnJvciBwYXRocz8gRG9lcyB0aGUgZnVuY3Rpb24gY29udHJpYnV0ZSB0byBtZW1vcnkgZnJhZ21lbnRhdGlvbiBvdmVyIHRpbWU/IFRoZXNlIGFyZSBsb25nLXRlcm0gY29uc2lkZXJhdGlvbnMgdGhhdCBhcmUgaW5jcmVkaWJseSBpbXBvcnRhbnQgZm9yIG92ZXJhbGwgc3lzdGVtIHN0YWJpbGl0eS4gSWYgdGhlcmUgYXJlIGFueSwgdGhleSBuZWVkIHRvIGJlIGFkZHJlc3NlZCBlYXJseSFcblxuXG4iLCJJbnB1dFRva2VucyI6MjU5NjIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1OTowOC4zMTY5NTcxODVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyODk2NjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2h1Z2V0bGJfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0yMTU1PXN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIxNzgtXFxubW0vaHVnZXRsYi5jOjIxNzk6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxubW0vaHVnZXRsYi5jLTIxODAtXFx0XFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vaHVnZXRsYi5jLTIxOTktLyogZm9saW8gbWlncmF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uICovXFxubW0vaHVnZXRsYi5jOjIyMDA6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbm1tL2h1Z2V0bGIuYy0yMjAxLVxcdFxcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaywgYm9vbCBhbGxvd19hbGxvY19mYWxsYmFjaylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yNTMzPXN0YXRpYyBsb25nIHZtYV9kZWxfcmVzZXJ2YXRpb24oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNTQwLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gcmVzdG9yZSByZXNlcnZhdGlvbiBpbmZvcm1hdGlvbiBvbiBlcnJvciBwYXRocy5cXG5tbS9odWdldGxiLmM6MjU0MTogKiBJdCBzaG91bGQgT05MWSBiZSBjYWxsZWQgZm9yIGZvbGlvcyBhbGxvY2F0ZWQgdmlhIGFsbG9jX2h1Z2V0bGJfZm9saW8oKSxcXG5tbS9odWdldGxiLmMtMjU0Mi0gKiBhbmQgdGhlIGh1Z2V0bGIgbXV0ZXggc2hvdWxkIHJlbWFpbiBoZWxkIHdoZW4gY2FsbGluZyB0aGlzIHJvdXRpbmUuXFxuLS1cXG5tbS9odWdldGxiLmMtMjU0Ny0gKiAyKSBObyByZXNlcnZhdGlvbiB3YXMgaW4gcGxhY2UgZm9yIHRoZSBwYWdlLCBzbyBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSBpc1xcbm1tL2h1Z2V0bGIuYzoyNTQ4OiAqICAgIG5vdCBzZXQuICBIb3dldmVyLCBhbGxvY19odWdldGxiX2ZvbGlvIGFsd2F5cyB1cGRhdGVzIHRoZSByZXNlcnZlIG1hcC5cXG5tbS9odWdldGxiLmMtMjU0OS0gKlxcbi0tXFxubW0vaHVnZXRsYi5jLTI1NTYtICpcXG5tbS9odWdldGxiLmM6MjU1NzogKiBJbiBjYXNlIDIsIHNpbXBseSB1bmRvIHJlc2VydmUgbWFwIG1vZGlmaWNhdGlvbnMgZG9uZSBieSBhbGxvY19odWdldGxiX2ZvbGlvLlxcbm1tL2h1Z2V0bGIuYy0yNTU4LSAqL1xcbm1tL2h1Z2V0bGIuYz0yNTU5PXZvaWQgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI1ODUtXFx0XFx0XFx0ICogVGhpcyBpbmRpY2F0ZXMgdGhlcmUgaXMgYW4gZW50cnkgaW4gdGhlIHJlc2VydmUgbWFwXFxubW0vaHVnZXRsYi5jOjI1ODY6XFx0XFx0XFx0ICogbm90IGFkZGVkIGJ5IGFsbG9jX2h1Z2V0bGJfZm9saW8uICBXZSBrbm93IGl0IHdhcyBhZGRlZFxcbm1tL2h1Z2V0bGIuYzoyNTg3OlxcdFxcdFxcdCAqIGJlZm9yZSB0aGUgYWxsb2NfaHVnZXRsYl9mb2xpbyBjYWxsLCBvdGhlcndpc2VcXG5tbS9odWdldGxiLmMtMjU4OC1cXHRcXHRcXHQgKiBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSB3b3VsZCBiZSBzZXQgb24gdGhlIGZvbGlvLlxcbi0tXFxubW0vaHVnZXRsYi5jPTI5MjY9dHlwZWRlZiBlbnVtIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yOTUxLSAqL1xcbm1tL2h1Z2V0bGIuYzoyOTUyOnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdldGxiLmMtMjk1My1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGNvd19mcm9tX293bmVyKVxcbi0tXFxubW0vaHVnZXRsYi5jPTQ4OTQ9aW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUwMTUtXFx0XFx0XFx0XFx0LyogRG8gbm90IHVzZSByZXNlcnZlIGFzIGl0J3MgcHJpdmF0ZSBvd25lZCAqL1xcbm1tL2h1Z2V0bGIuYzo1MDE2OlxcdFxcdFxcdFxcdG5ld19mb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oZHN0X3ZtYSwgYWRkciwgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy01MDE3LVxcdFxcdFxcdFxcdGlmIChJU19FUlIobmV3X2ZvbGlvKSkge1xcbi0tXFxubW0vaHVnZXRsYi5jPTU0ODc9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl93cChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2V0bGIuYy01NTY4LVxcdHNwaW5fdW5sb2NrKHZtZi1cXHUwMDNlcHRsKTtcXG5tbS9odWdldGxiLmM6NTU2OTpcXHRuZXdfZm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKHZtYSwgdm1mLVxcdTAwM2VhZGRyZXNzLCBjb3dfZnJvbV9vd25lcik7XFxubW0vaHVnZXRsYi5jLTU1NzAtXFxuLS1cXG5tbS9odWdldGxiLmM9NTc1OT1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9odWdldGxiLmMtNTgyOC1cXG5tbS9odWdldGxiLmM6NTgyOTpcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8odm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtNTgzMC1cXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbi0tXFxubW0vaHVnZXRsYi5jPTYwMDk9dm1fZmF1bHRfdCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MjQ0LSAqL1xcbm1tL2h1Z2V0bGIuYzo2MjQ1OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fdm1hKHN0cnVjdCBoc3RhdGUgKmgsXFxubW0vaHVnZXRsYi5jLTYyNDYtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MjYxLVxcdCAqL1xcbm1tL2h1Z2V0bGIuYzo2MjYyOlxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBub2RlLCBub2RlbWFzaywgZ2ZwX21hc2ssIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtNjI2My1cXHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTYyNzI9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MzI4LVxcbm1tL2h1Z2V0bGIuYzo2MzI5OlxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyhkc3Rfdm1hLCBkc3RfYWRkciwgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy02MzMwLVxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLS1cXG5tbS9odWdldGxiLmMtNjM1NC1cXHRcXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6NjM1NTpcXHRcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fdm1hKGgsIGRzdF92bWEsIGRzdF9hZGRyKTtcXG5tbS9odWdldGxiLmMtNjM1Ni1cXHRcXHRcXHRpZiAoIWZvbGlvKSB7XFxuLS1cXG5tbS9odWdldGxiLmMtNjM3NS1cXG5tbS9odWdldGxiLmM6NjM3NjpcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oZHN0X3ZtYSwgZHN0X2FkZHIsIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtNjM3Ny1cXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbi0tXFxubW0vaHVnZXRsYi5jPTY2Njk9bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NzkxLVxcdFxcdFxcdCAqIG1hcCBiZXR3ZWVuIHJlZ2lvbl9jaGcgYW5kIHJlZ2lvbl9hZGQuICBUaGlzXFxubW0vaHVnZXRsYi5jOjY3OTI6XFx0XFx0XFx0ICogaW5kaWNhdGVzIGEgcmFjZSB3aXRoIGFsbG9jX2h1Z2V0bGJfZm9saW8uICBBZGp1c3RcXG5tbS9odWdldGxiLmMtNjc5My1cXHRcXHRcXHQgKiB0aGUgc3VicG9vbCBhbmQgcmVzZXJ2ZSBjb3VudHMgbW9kaWZpZWQgYWJvdmVcXG4tLVxcbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxcbi0tXFxubW0vbWVtZmQuYy05My1cXG5tbS9tZW1mZC5jOjk0OlxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKGgsXFxubW0vbWVtZmQuYy05NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgbnVtYV9ub2RlX2lkKCksXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xNDM3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXRfYnlfbXBvbChzdHJ1Y3QgZm9saW8gKnNyYyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE0NTYtXFx0XFx0bm9kZW1hc2sgPSBwb2xpY3lfbm9kZW1hc2soZ2ZwLCBwb2wsIGlseCwgXFx1MDAyNm5pZCk7XFxubW0vbWVtcG9saWN5LmM6MTQ1NzpcXHRcXHRyZXR1cm4gYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBuaWQsIG5vZGVtYXNrLCBnZnAsXFxubW0vbWVtcG9saWN5LmMtMTQ1OC1cXHRcXHRcXHRcXHRodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKE1SX01FTVBPTElDWV9NQklORCkpO1xcbi0tXFxubW0vbWlncmF0ZS5jPTIxOTc9c3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpXFxuLS1cXG5tbS9taWdyYXRlLmMtMjIxNC1cXHRcXHRnZnBfbWFzayA9IGh0bGJfbW9kaWZ5X2FsbG9jX21hc2soaCwgZ2ZwX21hc2spO1xcbm1tL21pZ3JhdGUuYzoyMjE1OlxcdFxcdHJldHVybiBhbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIG5pZCxcXG5tbS9taWdyYXRlLmMtMjIxNi1cXHRcXHRcXHRcXHRcXHRcXHRtdGMtXFx1MDAzZW5tYXNrLCBnZnBfbWFzayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6NTk6MDguMzg5ODU5MzdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE2ODk5OTM1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogaHVnZXRsYmZzIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgdGhpcyBsb29rcyBwcm9taXNpbmcuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZSBgbW1gIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBgaHVnZXRsYmZzYCBhcmVhLCBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2sgZm9yIGZ1enppbmcuIEl0J3MgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCBhIHZhcmlldHkgb2Ygc3RhbmRhcmQgc3lzdGVtIGNhbGxzIGxpa2UgYG1vdW50YCwgYHN0YXRmc2AsIGBtbWFwYCwgYG9wZW5gLCBgZmFsbG9jYXRlYCwgYGZ0cnVuY2F0ZWAsIGFuZCBgbWVtZmRfY3JlYXRlYCDigJMgdGhhdCdzIGEgd2lkZSBhdHRhY2sgc3VyZmFjZS5cblxuVGhlIGNvZGUgbW9kaWZpY2F0aW9ucyB0b3VjaCBjcml0aWNhbCBhcmVhcywgaW5jbHVkaW5nIHN1YnBvb2wgcmVzZXJ2YXRpb24gYWNjb3VudGluZywgZXJyb3IgaGFuZGxpbmcgcGF0aHMsIHN0YXRmcyBsb2dpYywgYW5kIHRoZSBzdWJwb29sIGZyZWUgY29uZGl0aW9uLiBUaGF0J3MgYSBnb29kIHNpZ247IGNoYW5nZXMgaW4gdGhlc2UgYXJlYXMgb2Z0ZW4gZXhwb3NlIGludGVyZXN0aW5nIHZ1bG5lcmFiaWxpdGllcy4gU28sIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBzeW1ib2xzLiBNeSBxdWljayBjaGVjayByZXZlYWxzOiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgLCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgLCBhbmQgYGh1Z2V0bGJmc19zdGF0ZnNgLlxuXG5JJ2xsIGRvdWJsZS1jaGVjayBmb3Igb3RoZXIgcmVsZXZhbnQgc3ltYm9scyB0aGF0IGFyZSBkaXJlY3RseSB0b3VjaGVkLiBMb29raW5nIGF0IHRoZSBzb3VyY2UgY29kZSwgSSBmaW5kIHRoZXNlOlxuXG4qICAgYGh1Z2V0bGJmc19zdGF0ZnNgIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2BcbiogICBgc3VicG9vbF9pc19mcmVlYCBpbiBgbW0vaHVnZXRsYi5jYCAoc3RhdGljIGlubGluZSlcbiogICBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgIGluIGBtbS9odWdldGxiLmNgXG4qICAgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCBpbiBgbW0vaHVnZXRsYi5jYFxuKiAgIGBhbGxvY19odWdldGxiX2ZvbGlvYCBpbiBgbW0vaHVnZXRsYi5jYFxuKiAgIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgIGluIGBtbS9odWdldGxiLmNgXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUga2V5IG9uZSBoZXJlIGlzIGBIVUdFVExCRlNgLiBJIHNlZSB0aGF0IGBIVUdFVExCX1BBR0VgIGlzIGFsc28gcmVsYXRlZCAoYmVpbmcgYGRlZl9ib29sIEhVR0VUTEJGU2ApLCBidXQgYEhVR0VUTEJGU2AgaXMgdGhlIG1haW4gb25lIHRoYXQgdGhlIHVzZXIgY2FuIGRpcmVjdGx5IGVuYWJsZSB0aHJvdWdoIHRoZSBtZW51Y29uZmlnLlxuXG5JJ2xsIHF1aWNrbHkgY29uZmlybSB0aGF0IGFueSBvdGhlciBjb25maWdzIGFyZSByZWxldmFudC4gSXQgbG9va3MgbGlrZSBgSFVHRVRMQkZTYCBkZXBlbmRzIG9uIGBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU2AsIHdoaWNoIGlzIGBkZWZfYm9vbCB5YCBvbiBhbWQ2NCAvIHg4Niwgd2hpY2ggaXMgZ29vZC4gU28sIGBIVUdFVExCRlNgIGlzIGluZGVlZCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGZsYWcuXG5cbk5vdyBJJ20gcmVhZHkgdG8gY3JhZnQgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycy4gSSdsbCBuZWVkOlxuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiSFVHRVRMQkZTXCJdYFxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wiaHVnZXRsYl9yZXNlcnZlX3BhZ2VzXCIsIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiLCBcImh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzXCIsIFwiaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNcIiwgXCJodWdldGxiZnNfc3RhdGZzXCJdYFxuKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggYWx0ZXJzIHN1YnBvb2wgYWNjb3VudGluZyBhbmQgcmVzZXJ2YXRpb24gdHJhY2tpbmcgbG9naWMgd2l0aGluIGh1Z2V0bGIvaHVnZXRsYmZzLiBTcGVjaWZpY2FsbHksIGl0IHRvdWNoZXMgZnVuY3Rpb25zIGxpa2UgYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYCwgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCwgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AsIGBhbGxvY19odWdldGxiX2ZvbGlvYCwgYW5kIGBodWdldGxiZnNfc3RhdGZzYC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBodWdldGxiZnMgZmlsZXN5c3RlbSBhbmQgbWVtb3J5IG1hcHBpbmcgc3lzdGVtIGNhbGxzLlxuKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWBcblxuQWxyaWdodCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDc4LCJPdXRwdXRUb2tlbnMiOjIwMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1OToyMC4wNzk4NTU5ODFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc1MTExMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1wiLFxuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiLFxuICAgIFwiaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNcIixcbiAgICBcImh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzXCIsXG4gICAgXCJodWdldGxiZnNfc3RhdGZzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3VicG9vbCBwYWdlIGFjY291bnRpbmcsIHJlc2VydmF0aW9uIGNhbGN1bGF0aW9uLCBhbmQgZXJyb3IgcmVjb3ZlcnkgbG9naWMgaW4gaHVnZXRsYmZzIGFuZCBjb3JlIGh1Z2V0bGIgbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMgKGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLCBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcywgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzLCBhbGxvY19odWdldGxiX2ZvbGlvLCBodWdldGxiZnNfc3RhdGZzKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5c2NhbGxzIHN1Y2ggYXMgbW1hcCwgb3BlbiwgZmFsbG9jYXRlLCBhbmQgc3RhdGZzIG9uIGh1Z2V0bGJmcywgbWFraW5nIHRoaXMgY29kZSB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX3Jlc2VydmVfcGFnZXNcIixcbiAgICBcImFsbG9jX2h1Z2V0bGJfZm9saW9cIixcbiAgICBcImh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzXCIsXG4gICAgXCJodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc1wiLFxuICAgIFwiaHVnZXRsYmZzX3N0YXRmc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN1YnBvb2wgcGFnZSBhY2NvdW50aW5nLCByZXNlcnZhdGlvbiBjYWxjdWxhdGlvbiwgYW5kIGVycm9yIHJlY292ZXJ5IGxvZ2ljIGluIGh1Z2V0bGJmcyBhbmQgY29yZSBodWdldGxiIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmVzIChodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcywgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMsIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcywgYWxsb2NfaHVnZXRsYl9mb2xpbywgaHVnZXRsYmZzX3N0YXRmcykuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNjYWxscyBzdWNoIGFzIG1tYXAsIG9wZW4sIGZhbGxvY2F0ZSwgYW5kIHN0YXRmcyBvbiBodWdldGxiZnMsIG1ha2luZyB0aGlzIGNvZGUgd2VsbC1zdWl0ZWQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU5OjIwLjIwNzM3NzMzMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY1OTY0Nzg2NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1OToyMC4yMDgxNzY5MzFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNjU5NTY3MzE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGh1Z2V0bGIgc3VicG9vbCBhY2NvdW50aW5nIGFuZCByZXNlcnZhdGlvbiB0cmFja2luZyAoaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCwgYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCwgYW5kIGBtbS9odWdldGxiLmNgKS4gU3BlY2lmaWNhbGx5LCBpdCB0cmFja3MgYHVzZWRfaHBhZ2VzYCBjb25zaXN0ZW50bHkgd2hlbiBgbWF4X2hwYWdlc2AgaXMgdW5ib3VuZGVkICgtMSksIGZpeGVzIHJlcG9ydGluZyBpbiBgaHVnZXRsYmZzX3N0YXRmc2AsIGFuZCBzaW1wbGlmaWVzIHRoZSBlcnJvciByb2xsYmFjayBhcml0aG1ldGljIHdoZW4gb2J0YWluaW5nL3JlbGVhc2luZyBzdWJwb29sIHJlc2VydmF0aW9ucyBpbiBgYWxsb2NfaHVnZXRsYl9mb2xpbygpYCBhbmQgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYC5cXG5cXG5BbGwgbW9kaWZpZWQgdmFyaWFibGVzIChgZnJlZV9wYWdlc2AsIGBnYmxfcmVzdl9nZXRgLCBgZ2JsX3Jlc3ZfcHV0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBhY3Jvc3MgYWxsIGNvbnRyb2wgZmxvdyBwYXRocywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgaW4gdGhpcyBwYXRjaCB3b3VsZCBpbnZvbHZlIGFjY291bnRpbmcgZGlzY3JlcGFuY2llcywgbWVtb3J5IGxlYWtzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkaWFnbm9zdGljcywgYXNzZXJ0aW9ucywgYW5kIEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDljM2M0NTE4MjhjYzg1ODFkY2YxNGQzMDU4YTNiNzRmNTYyNGI2MjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDIzOjU4OjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcbmluZGV4IGE0OTExNWRiMThjNzYuLmQyNDQ1ODNmZGNiYzMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG5AQCAtMzE0LDIxICszMTQsOCBAQCBodWdlIHBhZ2VzLiAgSWYgdGhleSBjYW4gbm90IGJlIHJlc2VydmVkLCB0aGUgbW91bnQgZmFpbHMuXG4gVGhlIHJvdXRpbmVzIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygpIGFyZSBjYWxsZWQgd2hlbiBwYWdlcyBhcmVcbiBvYnRhaW5lZCBmcm9tIG9yIHJlbGVhc2VkIGJhY2sgdG8gYSBzdWJwb29sLiAgVGhleSBwZXJmb3JtIGFsbCBzdWJwb29sXG4gYWNjb3VudGluZywgYW5kIHRyYWNrIGFueSByZXNlcnZhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sLlxuLWh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcyBhcmUgcGFzc2VkIHRoZSBudW1iZXIgb2YgaHVnZSBwYWdlcyBieSB3aGljaFxuLXRvIGFkanVzdCB0aGUgc3VicG9vbCAndXNlZCBwYWdlJyBjb3VudCAoZG93biBmb3IgZ2V0LCB1cCBmb3IgcHV0KS4gIE5vcm1hbGx5LFxuLXRoZXkgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIHRoYXQgd2FzIHBhc3NlZCBvciBhbiBlcnJvciBpZiBub3QgZW5vdWdoIHBhZ2VzXG4tZXhpc3QgaW4gdGhlIHN1YnBvb2wuXG4tXG4tSG93ZXZlciwgaWYgcmVzZXJ2ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbCBhIHJldHVybiB2YWx1ZSBsZXNzXG4tdGhhbiB0aGUgcGFzc2VkIHZhbHVlIG1heSBiZSByZXR1cm5lZC4gIFRoaXMgcmV0dXJuIHZhbHVlIGluZGljYXRlcyB0aGVcbi1udW1iZXIgb2YgYWRkaXRpb25hbCBnbG9iYWwgcG9vbCBhZGp1c3RtZW50cyB3aGljaCBtdXN0IGJlIG1hZGUuICBGb3IgZXhhbXBsZSxcbi1zdXBwb3NlIGEgc3VicG9vbCBjb250YWlucyAzIHJlc2VydmVkIGh1Z2UgcGFnZXMgYW5kIHNvbWVvbmUgYXNrcyBmb3IgNS5cbi1UaGUgMyByZXNlcnZlZCBwYWdlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHN1YnBvb2wgY2FuIGJlIHVzZWQgdG8gc2F0aXNmeSBwYXJ0XG4tb2YgdGhlIHJlcXVlc3QuICBCdXQsIDIgcGFnZXMgbXVzdCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBnbG9iYWwgcG9vbHMuICBUb1xuLXJlbGF5IHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIGNhbGxlciwgdGhlIHZhbHVlIDIgaXMgcmV0dXJuZWQuICBUaGUgY2FsbGVyXG4taXMgdGhlbiByZXNwb25zaWJsZSBmb3IgYXR0ZW1wdGluZyB0byBvYnRhaW4gdGhlIGFkZGl0aW9uYWwgdHdvIHBhZ2VzIGZyb21cbi10aGUgZ2xvYmFsIHBvb2xzLlxuLVxuK2h1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygpIHVzZSB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMgcGFzc2VkIHRvIGFkanVzdFxuK3RoZSBzdWJwb29sICd1c2VkIHBhZ2UnIGNvdW50LlxuIFxuIENPVyBhbmQgUmVzZXJ2YXRpb25zXG4gPT09PT09PT09PT09PT09PT09PT1cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdCBiL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG5pbmRleCAyMDk0N2Y4YmQwNjU0Li5hZTFmMWYzMTQ3N2ZjIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG5AQCAtMjQ2LDE1ICsyNDYsOCBAQCBodWdlcGFnZV9zdWJwb29s55qEbWluX2hwYWdlc+Wtl+auteS4reiiq+i3n+i4quOAguWcqOaMgui9veaXtu+8jGh1Z2V0bGJfYWNjdF9tZVxuIOiiq+iwg+eUqOS7pemihOeVmeaMh+WumuaVsOmHj+eahOW3qOmhteOAguWmguaenOWug+S7rOS4jeiDveiiq+mihOeVme+8jOaMgui9veWwseS8muWksei0peOAglxuIFxuIOW9k+S7juWtkOaxoOS4reiOt+WPluaIlumHiuaUvumhtemdouaXtu+8jOS8muiwg+eUqGh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygp5Ye95pWw44CCXG4taHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2Vz6KKr5Lyg6YCS57uZ5beo6aG15pWw6YeP77yM5Lul5q2k5p2l6LCD5pW05a2Q5rGg55qEIOKAnOW3sueUqOmhtemdouKAnSDorqHmlbBcbi3vvIhnZXTkuLrkuIvpmY3vvIxwdXTkuLrkuIrljYfvvInjgILpgJrluLjmg4XlhrXkuIvvvIzlpoLmnpzlrZDmsaDkuK3msqHmnInotrPlpJ/nmoTpobXpnaLvvIzlroPku6zkvJrov5Tlm57kuI7kvKDpgJLnmoTnm7jlkIznmoTlgLzmiJZcbi3kuIDkuKrplJnor6/jgIJcbi1cbi3nhLbogIzvvIzlpoLmnpzpooTnlZnkuI7lrZDmsaDnm7jlhbPogZTvvIzlj6/og73kvJrov5Tlm57kuIDkuKrlsI/kuo7kvKDpgJLlgLznmoTov5Tlm57lgLzjgILov5nkuKrov5Tlm57lgLzooajnpLrlv4Xpobvov5vooYznmoTpop3lpJblhajlsYBcbi3msaDosIPmlbTnmoTmlbDph4/jgILkvovlpoLvvIzlgYforr7kuIDkuKrlrZDmsaDljIXlkKsz5Liq6aKE55WZ55qE5beo6aG177yM5pyJ5Lq66KaB5rGCNeS4quOAguS4juWtkOaxoOebuOWFs+eahDPkuKrpooTnlZnpobXlj6/ku6XnlKjmnaVcbi3mu6HotrPpg6jliIbor7fmsYLjgILkvYbmmK/vvIzlv4Xpobvku47lhajlsYDmsaDkuK3ojrflvpcy5Liq6aG16Z2i44CC5Li65LqG5ZCR6LCD55So6ICF6L2s6L6+6L+Z5LiA5L+h5oGv77yM5bCG6L+U5Zue5YC8MuOAgueEtuWQju+8jOiwg+eUqFxuLeiAheimgei0n+i0o+S7juWFqOWxgOaxoOS4reiOt+WPluWPpuWkluS4pOS4qumhtemdouOAglxuLVxuK+Wug+S7rOi0n+i0o+aJgOacieWtkOaxoOeahOe7n+iuoeaguOeul++8jOW5tui3n+i4quS4juWtkOaxoOebuOWFs+iBlOeahOmihOeVmeOAglxuK2h1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygp5Ye95pWw5L2/55So5Lyg5YWl55qE5beo6aG15pWw6YeP5p2l6LCD5pW05a2Q5rGg55qE4oCc5bey55So6aG16Z2i4oCd6K6h5pWw44CCXG4gXG4gQ09X5ZKM6aKE55WZXG4gPT09PT09PT09PVxuZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbmluZGV4IDc2MTFhODQ3MGVhMjYuLjUxMTNmNzQzZjZmYzcgMTAwNjQ0XG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xuKysrIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbkBAIC0xMTA5LDggKzExMDksMTIgQEAgc3RhdGljIGludCBodWdldGxiZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZilcbiBcbiBcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNnNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2Vsb2NrKTtcbiBcdFx0XHRidWYtXHUwMDNlZl9ibG9ja3MgPSBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcztcbi1cdFx0XHRmcmVlX3BhZ2VzID0gc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZW1heF9ocGFnZXNcbi1cdFx0XHRcdC0gc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzO1xuK1x0XHRcdGlmIChzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyA9PSAtMSkge1xuK1x0XHRcdFx0ZnJlZV9wYWdlcyA9IC0xO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRmcmVlX3BhZ2VzID0gc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZW1heF9ocGFnZXMgLVxuK1x0XHRcdFx0XHQgICAgIHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcztcbitcdFx0XHR9XG4gXHRcdFx0YnVmLVx1MDAzZWZfYmF2YWlsID0gYnVmLVx1MDAzZWZfYmZyZWUgPSBmcmVlX3BhZ2VzO1xuIFx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbG9jayk7XG4gXHRcdFx0YnVmLVx1MDAzZWZfZmlsZXMgPSBzYmluZm8tXHUwMDNlbWF4X2lub2RlcztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5pbmRleCAxNmM0YzRjYWExMjZjLi40NTUxZmYzMDIzNjQwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5AQCAtMzksOCArMzksOCBAQCBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCB7XG4gXHRzcGlubG9ja190IGxvY2s7XG4gXHRsb25nIGNvdW50O1xuIFx0bG9uZyBtYXhfaHBhZ2VzO1x0LyogTWF4aW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1heGltdW0uICovXG4tXHRsb25nIHVzZWRfaHBhZ2VzO1x0LyogVXNlZCBjb3VudCBhZ2FpbnN0IG1heGltdW0sIGluY2x1ZGVzICovXG4tXHRcdFx0XHQvKiBib3RoIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovXG4rXHRsb25nIHVzZWRfaHBhZ2VzO1x0LyogVXNlZCBwYWdlIGNvdW50LCBpbmNsdWRlcyBib3RoICovXG4rXHRcdFx0XHQvKiBhbGxvY2F0ZWQgYW5kIHJlc2VydmVkIHBhZ2VzLiAqL1xuIFx0c3RydWN0IGhzdGF0ZSAqaHN0YXRlO1xuIFx0bG9uZyBtaW5faHBhZ2VzO1x0LyogTWluaW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1pbmltdW0uICovXG4gXHRsb25nIHJzdl9ocGFnZXM7XHQvKiBQYWdlcyByZXNlcnZlZCBhZ2FpbnN0IGdsb2JhbCBwb29sIHRvICovXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA3ODU3NzI4NDU3OTUyLi5lMjRmODU2Yzk0OWMzIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC0xMzAsMTIgKzEzMCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzdWJwb29sX2lzX2ZyZWUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxuIHtcbiBcdGlmIChzcG9vbC1cdTAwM2Vjb3VudClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuLVx0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXG4tXHRcdHJldHVybiBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSAwO1xuLVx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEpXG4tXHRcdHJldHVybiBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IHNwb29sLVx1MDAzZW1pbl9ocGFnZXM7XG4gXG4tXHRyZXR1cm4gdHJ1ZTtcbitcdHJldHVybiBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSAwO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG5AQCAtMTkzLDEzICsxODksMTggQEAgdm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXG4gXHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XG4gfVxuIFxuLS8qXG4tICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBhbGxvY2F0aW5nIGFuZCByZXNlcnZpbmcgcGFnZXMuXG4tICogUmV0dXJuIC1FTk9NRU0gaWYgdGhlcmUgYXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIHRvIHNhdGlzZnkgdGhlXG4tICogcmVxdWVzdC4gIE90aGVyd2lzZSwgcmV0dXJuIHRoZSBudW1iZXIgb2YgcGFnZXMgYnkgd2hpY2ggdGhlXG4tICogZ2xvYmFsIHBvb2xzIG11c3QgYmUgYWRqdXN0ZWQgKHVwd2FyZCkuICBUaGUgcmV0dXJuZWQgdmFsdWUgbWF5XG4tICogb25seSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgcGFzc2VkIHZhbHVlIChkZWx0YSkgaW4gdGhlIGNhc2Ugd2hlcmVcbi0gKiBhIHN1YnBvb2wgbWluaW11bSBzaXplIG11c3QgYmUgbWFpbnRhaW5lZC5cbisvKipcbisgKiBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyAtIEdldCBwYWdlcyBmcm9tIGEgc3VicG9vbFxuKyAqIEBzcG9vbDogcG9pbnRlciB0byBzdWJwb29sIHN0cnVjdHVyZSAobWF5IGJlIE5VTEwpXG4rICogQGRlbHRhOiBudW1iZXIgb2YgcGFnZXMgdG8gYWxsb2NhdGUgb3IgcmVzZXJ2ZVxuKyAqXG4rICogQ2hlY2sgYW5kIHVwZGF0ZSBzdWJwb29sIHBhZ2UgdXNhZ2UgY291bnRzIHdoZW4gYWxsb2NhdGluZyBvclxuKyAqIHJlc2VydmluZyBAZGVsdGEgaHVnZXBhZ2VzLlxuKyAqXG4rICogQ29udGV4dDogVGFrZXMgc3Bvb2wtXHUwMDNlbG9jayB1c2luZyBzcGluX2xvY2tfaXJxKCkuXG4rICogUmV0dXJuOiBOb24tbmVnYXRpdmUgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IGNhbm5vdCBiZVxuKyAqICAgICAgICAgc2F0aXNmaWVkIGJ5IHRoZSBzdWJwb29sLCBvciAtRU5PTUVNIGlmIHRoZSBzdWJwb29sIG1heGltdW1cbisgKiAgICAgICAgIGxpbWl0IHdvdWxkIGJlIGV4Y2VlZGVkLlxuICAqL1xuIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiBcdFx0XHRcdCAgICAgIGxvbmcgZGVsdGEpXG5AQCAtMjExLDE1ICsyMTIsMTQgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuIFxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrKTtcbiBcbi1cdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKSB7XHRcdC8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4tXHRcdGlmICgoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgKyBkZWx0YSkgXHUwMDNjPSBzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzKVxuLVx0XHRcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICs9IGRlbHRhO1xuLVx0XHRlbHNlIHtcbi1cdFx0XHRyZXQgPSAtRU5PTUVNO1xuLVx0XHRcdGdvdG8gdW5sb2NrX3JldDtcbi1cdFx0fVxuK1x0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2XG4rXHQgICAgc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgKyBkZWx0YSBcdTAwM2Ugc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcykge1xuK1x0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIHVubG9ja19yZXQ7XG4gXHR9XG4gXG4rXHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyArPSBkZWx0YTtcbitcbiBcdC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4gXHRpZiAoc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAhPSAtMSBcdTAwMjZcdTAwMjYgc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcykge1xuIFx0XHRpZiAoZGVsdGEgXHUwMDNlIHNwb29sLVx1MDAzZXJzdl9ocGFnZXMpIHtcbkBAIC0yNDAsMTEgKzI0MCwxOSBAQCBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKlxuLSAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgZnJlZWluZyBhbmQgdW5yZXNlcnZpbmcgcGFnZXMuXG4tICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZ2xvYmFsIHBhZ2UgcmVzZXJ2YXRpb25zIHRoYXQgbXVzdCBiZSBkcm9wcGVkLlxuLSAqIFRoZSByZXR1cm4gdmFsdWUgbWF5IG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpXG4tICogaW4gdGhlIGNhc2Ugd2hlcmUgYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXG4rLyoqXG4rICogaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMgLSBSZWxlYXNlIHBhZ2VzIGJhY2sgdG8gYSBzdWJwb29sXG4rICogQHNwb29sOiBwb2ludGVyIHRvIHN1YnBvb2wgc3RydWN0dXJlIChtYXkgYmUgTlVMTClcbisgKiBAZGVsdGE6IG51bWJlciBvZiBwYWdlcyB0byBmcmVlIG9yIHVucmVzZXJ2ZVxuKyAqXG4rICogQ2hlY2sgYW5kIHVwZGF0ZSBzdWJwb29sIHBhZ2UgdXNhZ2UgY291bnRzIHdoZW4gZnJlZWluZyBvclxuKyAqIHVucmVzZXJ2aW5nIEBkZWx0YSBodWdlcGFnZXMuXG4rICpcbisgKiBDb250ZXh0OiBUYWtlcyBzcG9vbC1cdTAwM2Vsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnFzYXZlKCkuIE1heSByZWxlYXNlXG4rICogICAgICAgICAgYW5kIGZyZWUgQHNwb29sIGlmIGl0cyB1c2FnZSBjb3VudCBhbmQgcmVmZXJlbmNlcyByZWFjaFxuKyAqICAgICAgICAgIHplcm8uXG4rICogUmV0dXJuOiBOb24tbmVnYXRpdmUgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IHRoZSBzdWJwb29sIGNhbm5vdFxuKyAqICAgICAgICAgYWJzb3JiLlxuICAqL1xuIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiBcdFx0XHRcdCAgICAgICBsb25nIGRlbHRhKVxuQEAgLTI1NywxOSArMjY1LDI0IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnNwb29sLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbi1cdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVx0XHQvKiBtYXhpbXVtIHNpemUgYWNjb3VudGluZyAqL1xuLVx0XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAtPSBkZWx0YTtcbitcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIC09IGRlbHRhO1xuIFxuIFx0IC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4gXHRpZiAoc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAhPSAtMSBcdTAwMjZcdTAwMjYgc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgXHUwMDNjIHNwb29sLVx1MDAzZW1pbl9ocGFnZXMpIHtcbi1cdFx0aWYgKHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgKyBkZWx0YSBcdTAwM2M9IHNwb29sLVx1MDAzZW1pbl9ocGFnZXMpXG4rXHRcdC8qXG4rXHRcdCAqIGxpbWl0IGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdFxuK1x0XHQgKiBjYW4gYmUgcmVzdG9yZWQgdG8gdGhpcyBzdWJwb29sLlxuK1x0XHQgKi9cbitcdFx0bG9uZyBsaW1pdCA9IHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgLSBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcztcbitcbitcdFx0aWYgKHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgKyBkZWx0YSBcdTAwM2M9IGxpbWl0KVxuIFx0XHRcdHJldCA9IDA7XG4gXHRcdGVsc2Vcbi1cdFx0XHRyZXQgPSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICsgZGVsdGEgLSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzO1xuK1x0XHRcdHJldCA9IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgKyBkZWx0YSAtIGxpbWl0O1xuIFxuIFx0XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICs9IGRlbHRhO1xuLVx0XHRpZiAoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyBcdTAwM2Ugc3Bvb2wtXHUwMDNlbWluX2hwYWdlcylcbi1cdFx0XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcztcbitcdFx0aWYgKHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgXHUwMDNlIGxpbWl0KVxuK1x0XHRcdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPSBsaW1pdDtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtMjk0Miw3ICsyOTU1LDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF92bWEodm1hKTtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLVx0bG9uZyByZXR2YWwsIGdibF9jaGcsIGdibF9yZXNlcnZlO1xuK1x0bG9uZyByZXR2YWwsIGdibF9yZXN2X2dldDtcbiBcdG1hcF9jaGdfc3RhdGUgbWFwX2NoZztcbiBcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgbXBvbGk7XG4gXHRnZnBfdCBnZnAgPSBodGxiX2FsbG9jX21hc2soaCk7XG5AQCAtMjk4MSw4ICsyOTk0LDggQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0ICogT3IgaWYgaXQgY2FuIGdldCBvbmUgZnJvbSB0aGUgcG9vbCByZXNlcnZhdGlvbiBkaXJlY3RseS5cbiBcdCAqL1xuIFx0aWYgKG1hcF9jaGcpIHtcbi1cdFx0Z2JsX2NoZyA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTtcbi1cdFx0aWYgKGdibF9jaGcgXHUwMDNjIDApIHtcbitcdFx0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xuK1x0XHRpZiAoZ2JsX3Jlc3ZfZ2V0IFx1MDAzYyAwKSB7XG4gXHRcdFx0cmV0ID0gLUVOT1NQQztcbiBcdFx0XHRnb3RvIG91dF9lbmRfcmVzZXJ2YXRpb247XG4gXHRcdH1cbkBAIC0yOTkxLDcgKzMwMDQsNyBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdCAqIElmIHdlIGhhdmUgdGhlIHZtYSByZXNlcnZhdGlvbiByZWFkeSwgbm8gbmVlZCBmb3IgZXh0cmFcbiBcdFx0ICogZ2xvYmFsIHJlc2VydmF0aW9uLlxuIFx0XHQgKi9cbi1cdFx0Z2JsX2NoZyA9IDA7XG4rXHRcdGdibF9yZXN2X2dldCA9IDA7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTMwMDIsMTAgKzMwMTUsMTAgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRhbGxvY19mbGFncyB8PSBIVUdFVExCX0FMTE9DX0NIQVJHX0NHUk9VUF9SU1ZEO1xuIFxuIFx0Lypcbi1cdCAqIGdibF9jaGcgPT0gMCBpbmRpY2F0ZXMgYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoaXNcbitcdCAqIGdibF9yZXN2X2dldCA9PSAwIGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cyBmb3IgdGhpc1xuIFx0ICogYWxsb2NhdGlvbiwgc28gdHJ5IHRvIHVzZSBpdC5cbiBcdCAqL1xuLVx0aWYgKGdibF9jaGcgPT0gMClcbitcdGlmIChnYmxfcmVzdl9nZXQgPT0gMClcbiBcdFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19VU0VfR0xPQkFMX1JFU0VSVkFUSU9OUztcbiBcbiBcdC8qIFRha2VzIHJlZmVyZW5jZSBvbiBtcG9sLiAqL1xuQEAgLTMwNTksMTMgKzMwNzIsMTAgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0cmV0dXJuIGZvbGlvO1xuIFxuIG91dF9zdWJwb29sX3B1dDpcbi1cdC8qXG4tXHQgKiBwdXQgcGFnZSB0byBzdWJwb29sIGlmZiB0aGUgcXVvdGEgb2Ygc3VicG9vbCdzIHJzdl9ocGFnZXMgaXMgdXNlZFxuLVx0ICogZHVyaW5nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLlxuLVx0ICovXG4tXHRpZiAobWFwX2NoZyBcdTAwMjZcdTAwMjYgIWdibF9jaGcpIHtcbi1cdFx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XG4tXHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbitcdGlmIChtYXBfY2hnKSB7XG4rXHRcdGxvbmcgZ2JsX3Jlc3ZfcHV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xuK1xuK1x0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCAtIGdibF9yZXN2X3B1dCk7XG4gXHR9XG4gXG4gb3V0X2VuZF9yZXNlcnZhdGlvbjpcbkBAIC02NjYxLDEyICs2NjcxLDE0IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4ge1xuLVx0bG9uZyBjaGcgPSAtMSwgYWRkID0gLTEsIHNwb29sX3Jlc3YsIGdibF9yZXN2O1xuK1x0bG9uZyBjaGcgPSAtMSwgYWRkID0gLTE7XG4gXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2lub2RlKGlub2RlKTtcbiBcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfaW5vZGUoaW5vZGUpO1xuIFx0c3RydWN0IHJlc3ZfbWFwICpyZXN2X21hcDtcbiBcdHN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZyA9IE5VTEw7XG4tXHRsb25nIGdibF9yZXNlcnZlLCByZWdpb25zX25lZWRlZCA9IDA7XG4rXHRsb25nIHJlZ2lvbnNfbmVlZGVkID0gMDtcbitcdGxvbmcgZ2JsX3Jlc3ZfZ2V0O1xuK1x0bG9uZyBnYmxfcmVzdl9wdXQ7XG4gXHRpbnQgZXJyO1xuIFxuIFx0LyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuICovXG5AQCAtNjc0MSw5ICs2NzUzLDkgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCAqIHRoZSBzdWJwb29sIGhhcyBhIG1pbmltdW0gc2l6ZSwgdGhlcmUgbWF5IGJlIHNvbWUgZ2xvYmFsXG4gXHQgKiByZXNlcnZhdGlvbnMgYWxyZWFkeSBpbiBwbGFjZSAoZ2JsX3Jlc2VydmUpLlxuIFx0ICovXG4tXHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpO1xuLVx0aWYgKGdibF9yZXNlcnZlIFx1MDAzYyAwKSB7XG4tXHRcdGVyciA9IGdibF9yZXNlcnZlO1xuK1x0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIGNoZyk7XG4rXHRpZiAoZ2JsX3Jlc3ZfZ2V0IFx1MDAzYyAwKSB7XG4rXHRcdGVyciA9IGdibF9yZXN2X2dldDtcbiBcdFx0Z290byBvdXRfdW5jaGFyZ2VfY2dyb3VwO1xuIFx0fVxuIFxuQEAgLTY3NTEsNyArNjc2Myw3IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgKiBDaGVjayBlbm91Z2ggaHVnZXBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSByZXNlcnZhdGlvbi5cbiBcdCAqIEhhbmQgdGhlIHBhZ2VzIGJhY2sgdG8gdGhlIHN1YnBvb2wgaWYgdGhlcmUgYXJlIG5vdFxuIFx0ICovXG4tXHRlcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXNlcnZlKTtcbitcdGVyciA9IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0KTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X3B1dF9wYWdlcztcbiBcbkBAIC02NzcwLDcgKzY3ODIsNyBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRhZGQgPSByZWdpb25fYWRkKHJlc3ZfbWFwLCBmcm9tLCB0bywgcmVnaW9uc19uZWVkZWQsIGgsIGhfY2cpO1xuIFxuIFx0XHRpZiAodW5saWtlbHkoYWRkIFx1MDAzYyAwKSkge1xuLVx0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbitcdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdl9nZXQpO1xuIFx0XHRcdGVyciA9IGFkZDtcbiBcdFx0XHRnb3RvIG91dF9wdXRfcGFnZXM7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoY2hnIFx1MDAzZSBhZGQpKSB7XG5AQCAtNjgwNiwyNiArNjgxOCwyMSBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0fVxuIFx0cmV0dXJuIGNoZztcbiBcbi1vdXRfcHV0X3BhZ2VzOlxuLVx0c3Bvb2xfcmVzdiA9IGNoZyAtIGdibF9yZXNlcnZlO1xuLVx0aWYgKHNwb29sX3Jlc3YpIHtcbi1cdFx0LyogcHV0IHN1YiBwb29sJ3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi9cbi1cdFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XG4tXHRcdC8qXG4tXHRcdCAqIHN1YnBvb2wncyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLFxuLVx0XHQgKiByZXR1cm4gdG8gaHN0YXRlLlxuLVx0XHQgKi9cbi1cdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xuLVx0fVxuLVx0LyogUmVzdG9yZSB1c2VkX2hwYWdlcyBmb3IgcGFnZXMgdGhhdCBmYWlsZWQgZ2xvYmFsIHJlc2VydmF0aW9uICovXG4tXHRpZiAoZ2JsX3Jlc2VydmUgXHUwMDI2XHUwMDI2IHNwb29sKSB7XG4tXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rIG91dF9wdXRfcGFnZXM6XG4rXHQvKlxuK1x0ICogUmV0dXJuIGFsbCB0aGF0IHdhcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc3VicG9vbCwgbGV0IHN1YnBvb2xcbitcdCAqIHRlbGwgdXMgdGhlIG5ldyBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgbmVlZCB0byBiZVxuK1x0ICogcmV0dXJuZWQgdG8gdGhlIGdsb2JhbCBwb29sLlxuK1x0ICovXG4rXHRnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgY2hnKTtcbitcdC8qXG4rXHQgKiBUaGVyZSBtYXkgYmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZlxuK1x0ICogcmVzZXJ2YXRpb25zIHRvIGNvbnN1bWUgYW5kIHRoZSBudW1iZXIgdG8gcmVzdG9yZSBub3cgaWZcbitcdCAqIHRoZXJlIGFyZSBtdWx0aXBsZSB0aHJlYWRzIGludGVyYWN0aW5nIHdpdGggdGhlIHN1YnBvb2wgLVxuK1x0ICogcmVzdG9yZSB0aGUgZGlmZmVyZW5jZS5cbitcdCAqL1xuK1x0aHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQpO1xuIFxuLVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxuLVx0XHRcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIC09IGdibF9yZXNlcnZlO1xuLVx0XHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XG4tXHR9XG4gb3V0X3VuY2hhcmdlX2Nncm91cDpcbiBcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSxcbiBcdFx0XHRcdFx0ICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6NTk6MjAuMjA4MjAzNzcxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNzg4MzY5NTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZVRMQiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGl0cyBwb3RlbnRpYWwgaW1wYWN0LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zIHRoYXQgbWlnaHQgcmVxdWlyZSBLTVNBTiBzY3J1dGlueSwgb3IgaWYgaXQncyBwcmltYXJpbHkgcmVsYXRlZCB0byB0aGUgbG9naWNhbCBmbG93LCBhY2NvdW50aW5nLCBjb25jdXJyZW5jeSwgb3IgcmVzb3VyY2UgbWFuYWdlbWVudCB3aXRoaW4gdGhlIEh1Z2VUTEIgc3lzdGVtLlxuXG5GaXJzdCwgSSBzZWUgdGhlIHBhdGNoIG1vZGlmaWVzIGRvY3VtZW50YXRpb24gaW4gYERvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RgIGFuZCBpdHMgdHJhbnNsYXRpb25zLCBmb2N1c2luZyBvbiBgaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzYC4gVGhhdCdzIGdvb2QsIGJ1dCBub3QgdGhlIGNvcmUgb2YgbXkgYW5hbHlzaXMuXG5cbk5leHQsIEkgc2VlIGEgY2hhbmdlIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gYGh1Z2V0bGJmc19zdGF0ZnNgLiBJdCBsb29rcyBsaWtlIGl0J3MgYSBmaXggZm9yIGhvdyBgZnJlZV9wYWdlc2AgaXMgY2FsY3VsYXRlZCB3aGVuIGBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbWF4X2hwYWdlc2AgaXMgc2V0IHRvIGAtMWAuIFRoZSBvcmlnaW5hbCBsb2dpYyB3YXMgc3VidHJhY3RpbmcgdXNlZCBwYWdlcyBldmVuIHdoZW4gdGhlcmUncyBhbiB1bmJvdW5kZWQgbWF4aW11bS4gVGhlIG5ldyBjb2RlIGV4cGxpY2l0bHkgaGFuZGxlcyB0aGUgYC0xYCBjYXNlLiBOb3cgaXQgc2V0cyBgZnJlZV9wYWdlc2AgdG8gYC0xYCBkaXJlY3RseSBpbiB0aGF0IHNjZW5hcmlvLCBwcmVzZXJ2aW5nIHRoaXMgaW1wb3J0YW50IGJpdCBvZiBhY2NvdW50aW5nLiBUaGUgY3J1Y2lhbCBiaXQgaGVyZSBpcyB0byBjb25maXJtIGBodWdldGxiZnNfc3RhdGZzYCBpdHNlbGYgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBMb29raW5nIGF0IHRoZSBjb2RlIGZpbGxpbmcgdGhlIGBrc3RhdGZzYCBzdHJ1Y3QsIGl0IGRvZXNuJ3QgYXBwZWFyIHRvIGxlYXZlIGFueXRoaW5nIHVuaW5pdGlhbGl6ZWQuIGBidWYtXHUwMDNlZl9iYXZhaWxgIGFuZCBgYnVmLVx1MDAzZWZfYmZyZWVgIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkIHRoZSBgZnJlZV9wYWdlc2AgdmFsdWUuIEknbGwgbWVudGFsbHkgbm90ZSB0byBkb3VibGUtY2hlY2sgbGluZSAxMTA5IG9mIHRoaXMgZmlsZSB0byBiZSBjZXJ0YWluIEkgaGF2ZSBteSBmYWN0cyBzdHJhaWdodC5cblxuVGhlIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAgY2hhbmdlIGlzIGEgc2ltcGxlIGNvbW1lbnQgdXBkYXRlIGZvciBgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wudXNlZF9ocGFnZXNgIC0gbm8gcmVhbCBmdW5jdGlvbmFsIGltcGFjdCBoZXJlLlxuXG5Ob3csIHRoZSBtZWF0IG9mIHRoZSBtYXR0ZXI6IGBtbS9odWdldGxiLmNgLiAgSSBzZWUgc2V2ZXJhbCBmdW5jdGlvbiBjaGFuZ2VzOlxuLSAgIGBzdWJwb29sX2lzX2ZyZWUoKWAgaXMgc2ltcGxpZmllZCDigJMgZ29vZCwgY2xlYW4gY29kZSBpcyBhbHdheXMgd2VsY29tZS5cbi0gICBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoKWAgYW5kIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcygpYCBub3cgKmFsd2F5cyogYWRqdXN0IGBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlc2AsIGV2ZW4gd2hlbiBgbWF4X2hwYWdlc2AgaXMgYC0xYC4gVGhlIHByZXZpb3VzIGNvbmRpdGlvbmFsIGJlaGF2aW9yIGxvb2tlZCBzdXNwaWNpb3VzLiBCeSByZW1vdmluZyBpdCwgdGhlIGFjY291bnRpbmcgaXMgc2ltcGxpZmllZCBhbmQgbm93IGNvbnNpc3RlbnQgYWNyb3NzIGFsbCBjYXNlcy4gVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCB0byBjb25zaWRlciwgYXMgaXQgaXMgYSBwbGFjZSB3aGVyZSBlcnJvcnMgYXJlIGxpa2VseSwgc2hvdWxkIHRoZSBsb2dpYyBiZSBpbmNvcnJlY3QuIEl0IGFwcGVhcnMgdGhhdCB0aGUgc3VidHJhY3Rpb24gb2YgYHJzdl9ocGFnZXNgIGlzIGFsc28gYmVpbmcgdXBkYXRlZCBmb3IgdGhlIHNhbWUgcmVhc29uLiBUaGlzIGlzIGEgcG9pbnQgdG8gbm90ZSwgZm9yIHN1cmUuXG4tICAgRmluYWxseSwgYGFsbG9jX2h1Z2V0bGJfZm9saW8oKWAgYW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAgY29udGFpbiBlcnJvciByb2xsYmFjayBjbGVhbnVwIGxvZ2ljIG1vZGlmaWNhdGlvbnMuXG5cbk92ZXJhbGwsIGl0IHNlZW1zIGxpa2UgdGhlc2UgY2hhbmdlcyBhcmUgYWltZWQgYXQgdGlnaHRlbmluZyB1cCB0aGUgYWNjb3VudGluZyBsb2dpYywgaGFuZGxpbmcgdGhlIGAtMWAgY2FzZSBtb3JlIGV4cGxpY2l0bHksIGFuZCBwb3RlbnRpYWxseSBzaW1wbGlmeWluZyB0aGUgY29kZS4gVGhlIGZvY3VzIHNlZW1zIHRvIGJlIG9uIGNvcnJlY3RuZXNzLCBhbmQgdGhlcmUgaXMgbGVzcyByaXNrIG9mIG1lbW9yeSBlcnJvcnMuIEhvd2V2ZXIsIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoZSBhY2NvdW50aW5nIGlzIGJlaW5nIHVzZWQsIGVzcGVjaWFsbHkgYXJvdW5kIHRob3NlIGB1c2VkX2hwYWdlc2AgYWRqdXN0bWVudHMgYW5kIHRoZSBgcnN2X2hwYWdlc2AgbGltaXQgY2FsY3VsYXRpb24sIHRvIGNvbmZpcm0gdGhlIG5ldyBsb2dpYyBpcyBzb3VuZC4gSSdsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgaW50ZWdlciBvdmVyZmxvd3MgdGhhdCBtYXkgZXhpc3QsIGlmIEkgaGF2ZSBhbnkgZnVydGhlciBjb25jZXJucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAyMSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU5OjQwLjk5NjU3ODUwOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzUwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaHVnZXRsYmZzL2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEwMDpcXHRcXHRidWYtXFx1MDAzZWZfZnNpZCA9IHU2NF90b19mc2lkKGlkKTtcXG4xMTAxOlxcdFxcdGJ1Zi1cXHUwMDNlZl90eXBlID0gSFVHRVRMQkZTX01BR0lDO1xcbjExMDI6XFx0XFx0YnVmLVxcdTAwM2VmX2JzaXplID0gaHVnZV9wYWdlX3NpemUoaCk7XFxuMTEwMzpcXHRcXHRpZiAoc2JpbmZvKSB7XFxuMTEwNDpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNnNiaW5mby1cXHUwMDNlc3RhdF9sb2NrKTtcXG4xMTA1OlxcdFxcdFxcdC8qIElmIG5vIGxpbWl0cyBzZXQsIGp1c3QgcmVwb3J0IDAgb3IgLTEgZm9yIG1heC9mcmVlL3VzZWRcXG4xMTA2OlxcdFxcdFxcdCAqIGJsb2NrcywgbGlrZSBzaW1wbGVfc3RhdGZzKCkgKi9cXG4xMTA3OlxcdFxcdFxcdGlmIChzYmluZm8tXFx1MDAzZXNwb29sKSB7XFxuMTEwODpcXHRcXHRcXHRcXHRsb25nIGZyZWVfcGFnZXM7XFxuMTEwOTpcXHRcXG4xMTEwOlxcdFxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnNiaW5mby1cXHUwMDNlc3Bvb2wtXFx1MDAzZWxvY2spO1xcbjExMTE6XFx0XFx0XFx0XFx0YnVmLVxcdTAwM2VmX2Jsb2NrcyA9IHNiaW5mby1cXHUwMDNlc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXM7XFxuMTExMjpcXHRcXHRcXHRcXHRpZiAoc2JpbmZvLVxcdTAwM2VzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcyA9PSAtMSkge1xcbjExMTM6XFx0XFx0XFx0XFx0XFx0ZnJlZV9wYWdlcyA9IC0xO1xcbjExMTQ6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4xMTE1OlxcdFxcdFxcdFxcdFxcdGZyZWVfcGFnZXMgPSBzYmluZm8tXFx1MDAzZXNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzIC1cXG4xMTE2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc2JpbmZvLVxcdTAwM2VzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXM7XFxuMTExNzpcXHRcXHRcXHRcXHR9XFxuMTExODpcXHRcXHRcXHRcXHRidWYtXFx1MDAzZWZfYmF2YWlsID0gYnVmLVxcdTAwM2VmX2JmcmVlID0gZnJlZV9wYWdlcztcXG4xMTE5OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2c2JpbmZvLVxcdTAwM2VzcG9vbC1cXHUwMDNlbG9jayk7XFxuMTEyMDpcXHRcXHRcXHRcXHRidWYtXFx1MDAzZWZfZmlsZXMgPSBzYmluZm8tXFx1MDAzZW1heF9pbm9kZXM7XFxuMTEyMTpcXHRcXHRcXHRcXHRidWYtXFx1MDAzZWZfZmZyZWUgPSBzYmluZm8tXFx1MDAzZWZyZWVfaW5vZGVzO1xcbjExMjI6XFx0XFx0XFx0fVxcbjExMjM6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiaW5mby1cXHUwMDNlc3RhdF9sb2NrKTtcXG4xMTI0OlxcdFxcdH1cXG4xMTI1OlxcdFxcdGJ1Zi1cXHUwMDNlZl9uYW1lbGVuID0gTkFNRV9NQVg7XFxuMTEyNjpcXHRcXHRyZXR1cm4gMDtcXG4xMTI3OlxcdH1cXG4xMTI4OlxcdFxcbjExMjk6XFx0c3RhdGljIHZvaWQgaHVnZXRsYmZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbjExMzA6XFx0e1xcbjExMzE6XFx0XFx0c3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmkgPSBIVUdFVExCRlNfU0Ioc2IpO1xcbjExMzI6XFx0XFxuMTEzMzpcXHRcXHRpZiAoc2JpKSB7XFxuMTEzNDpcXHRcXHRcXHRzYi1cXHUwMDNlc19mc19pbmZvID0gTlVMTDtcXG4xMTM1OlxcdFxcbjExMzY6XFx0XFx0XFx0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc2JpLVxcdTAwM2VzcG9vbCk7XFxuMTEzNzpcXHRcXG4xMTM4OlxcdFxcdFxcdGtmcmVlKHNiaSk7XFxuMTEzOTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU5OjQwLjk5Njc1NjU0OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDAzNTMxMDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gSHVnZVRMQiBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBtZW1vcnkgYWxsb2NhdGlvbiBmbG93IGJldHRlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgSHVnZVRMQiBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY29yZSBmdW5jdGlvbnMuIExldCdzIHN0YXJ0IHdpdGggYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGFuZCB0aGVuIHBpdm90IHRvIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgIGluIGBtbS9odWdldGxiLmNgLiBNeSBodW5jaCBpcyB0aGF0IHRoZXNlIGFyZSB0aGUga2V5IHBpZWNlcyB0byB1bnJhdmVsIHRoZSBhbGxvY2F0aW9uIHB1enpsZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCByZXNlcnZlcyB0aGUgcGh5c2ljYWwgcGFnZXMgYW5kIGhvdyBpdCBoYW5kbGVzIHRoZSBmb2xpbyBhbGxvY2F0aW9uIGl0c2VsZi4gQXJlIHRoZXJlIGFueSBjb250ZW50aW9uIHBvaW50cyBoZXJlLCBvciBtYXliZSBhbnkgdW51c3VhbCBlcnJvciBwYXRocyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gTGV0J3MgZ2V0IHRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyBpdCBwcm92aWRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA0NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6NTk6NDQuMDAwMjkwOTY0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk1MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjk1MDpcXHQgKiBXaGVuIGl0J3Mgc2V0LCB0aGUgYWxsb2NhdGlvbiB3aWxsIGJ5cGFzcyBhbGwgdm1hIGxldmVsIHJlc2VydmF0aW9ucy5cXG4yOTUxOlxcdCAqL1xcbjI5NTI6XFx0c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjI5NTM6XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBjb3dfZnJvbV9vd25lcilcXG4yOTU0OlxcdHtcXG4yOTU1OlxcdFxcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfdm1hKHZtYSk7XFxuMjk1NjpcXHRcXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpO1xcbjI5NTc6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4yOTU4OlxcdFxcdGxvbmcgcmV0dmFsLCBnYmxfcmVzdl9nZXQ7XFxuMjk1OTpcXHRcXHRtYXBfY2hnX3N0YXRlIG1hcF9jaGc7XFxuMjk2MDpcXHRcXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkIG1wb2xpO1xcbjI5NjE6XFx0XFx0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpO1xcbjI5NjI6XFx0XFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcXG4yOTYzOlxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xcbjI5NjQ6XFx0XFx0dTggYWxsb2NfZmxhZ3MgPSAwO1xcbjI5NjU6XFx0XFx0aW50IG5pZDtcXG4yOTY2OlxcdFxcdGludCByZXQ7XFxuMjk2NzpcXHRcXG4yOTY4OlxcdFxcdC8qIFdoZXRoZXIgd2UgbmVlZCBhIHNlcGFyYXRlIHBlci12bWEgcmVzZXJ2YXRpb24/ICovXFxuMjk2OTpcXHRcXHRpZiAoY293X2Zyb21fb3duZXIpIHtcXG4yOTcwOlxcdFxcdFxcdC8qXFxuMjk3MTpcXHRcXHRcXHQgKiBTcGVjaWFsIGNhc2UhICBTaW5jZSBpdCdzIGEgQ29XIG9uIHRvcCBvZiBhIHJlc2VydmVkXFxuMjk3MjpcXHRcXHRcXHQgKiBwYWdlLCB0aGUgcHJpdmF0ZSByZXN2IG1hcCBkb2Vzbid0IGNvdW50LiAgU28gaXQgY2Fubm90XFxuMjk3MzpcXHRcXHRcXHQgKiBjb25zdW1lIHRoZSBwZXItdm1hIHJlc3YgbWFwIGV2ZW4gaWYgaXQncyByZXNlcnZlZC5cXG4yOTc0OlxcdFxcdFxcdCAqL1xcbjI5NzU6XFx0XFx0XFx0bWFwX2NoZyA9IE1BUF9DSEdfRU5GT1JDRUQ7XFxuMjk3NjpcXHRcXHR9IGVsc2Uge1xcbjI5Nzc6XFx0XFx0XFx0LypcXG4yOTc4OlxcdFxcdFxcdCAqIEV4YW1pbmUgdGhlIHJlZ2lvbi9yZXNlcnZlIG1hcCB0byBkZXRlcm1pbmUgaWYgdGhlIHByb2Nlc3NcXG4yOTc5OlxcdFxcdFxcdCAqIGhhcyBhIHJlc2VydmF0aW9uIGZvciB0aGUgcGFnZSB0byBiZSBhbGxvY2F0ZWQuICBBIHJldHVyblxcbjI5ODA6XFx0XFx0XFx0ICogY29kZSBvZiB6ZXJvIGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cyAobm8gY2hhbmdlKS5cXG4yOTgxOlxcdFxcdFxcdCAqL1xcbjI5ODI6XFx0XFx0XFx0cmV0dmFsID0gdm1hX25lZWRzX3Jlc2VydmF0aW9uKGgsIHZtYSwgYWRkcik7XFxuMjk4MzpcXHRcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4yOTg0OlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjI5ODU6XFx0XFx0XFx0bWFwX2NoZyA9IHJldHZhbCA/IE1BUF9DSEdfTkVFREVEIDogTUFQX0NIR19SRVVTRTtcXG4yOTg2OlxcdFxcdH1cXG4yOTg3OlxcdFxcbjI5ODg6XFx0XFx0LypcXG4yOTg5OlxcdFxcdCAqIFdoZXRoZXIgd2UgbmVlZCBhIHNlcGFyYXRlIGdsb2JhbCByZXNlcnZhdGlvbj9cXG4yOTkwOlxcdFxcdCAqXFxuMjk5MTpcXHRcXHQgKiBQcm9jZXNzZXMgdGhhdCBkaWQgbm90IGNyZWF0ZSB0aGUgbWFwcGluZyB3aWxsIGhhdmUgbm9cXG4yOTkyOlxcdFxcdCAqIHJlc2VydmVzIGFzIGluZGljYXRlZCBieSB0aGUgcmVnaW9uL3Jlc2VydmUgbWFwLiBDaGVja1xcbjI5OTM6XFx0XFx0ICogdGhhdCB0aGUgYWxsb2NhdGlvbiB3aWxsIG5vdCBleGNlZWQgdGhlIHN1YnBvb2wgbGltaXQuXFxuMjk5NDpcXHRcXHQgKiBPciBpZiBpdCBjYW4gZ2V0IG9uZSBmcm9tIHRoZSBwb29sIHJlc2VydmF0aW9uIGRpcmVjdGx5LlxcbjI5OTU6XFx0XFx0ICovXFxuMjk5NjpcXHRcXHRpZiAobWFwX2NoZykge1xcbjI5OTc6XFx0XFx0XFx0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xcbjI5OTg6XFx0XFx0XFx0aWYgKGdibF9yZXN2X2dldCBcXHUwMDNjIDApIHtcXG4yOTk5OlxcdFxcdFxcdFxcdHJldCA9IC1FTk9TUEM7XFxuMzAwMDpcXHRcXHRcXHRcXHRnb3RvIG91dF9lbmRfcmVzZXJ2YXRpb247XFxuMzAwMTpcXHRcXHRcXHR9XFxuMzAwMjpcXHRcXHR9IGVsc2Uge1xcbjMwMDM6XFx0XFx0XFx0LypcXG4zMDA0OlxcdFxcdFxcdCAqIElmIHdlIGhhdmUgdGhlIHZtYSByZXNlcnZhdGlvbiByZWFkeSwgbm8gbmVlZCBmb3IgZXh0cmFcXG4zMDA1OlxcdFxcdFxcdCAqIGdsb2JhbCByZXNlcnZhdGlvbi5cXG4zMDA2OlxcdFxcdFxcdCAqL1xcbjMwMDc6XFx0XFx0XFx0Z2JsX3Jlc3ZfZ2V0ID0gMDtcXG4zMDA4OlxcdFxcdH1cXG4zMDA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1OTo0NC4wMDA5MDcyMzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg5MzQ3NzYyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgcGlja2luZyB1cCB3aGVyZSB3ZSBsZWZ0IG9mZiwgYXMgdGhvdWdoIEknbSBleGFtaW5pbmcgdGhpcyBjb2RlOlxuXG4qKkRpdmluZyBCYWNrIGludG8gYGFsbG9jX2h1Z2V0bGJfZm9saW9gKipcblxuT2theSwgc28gd2UncmUgY29udGludWluZyBvdXIgZGVlcCBkaXZlIGludG8gYGFsbG9jX2h1Z2V0bGJfZm9saW9gLiBXZSd2ZSBhbHJlYWR5IGxvb2tlZCBhdCBzb21lIGtleSBhc3BlY3RzLCBidXQgbGV0J3MgbWFrZSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwgaW4gdGhpcyBmdW5jdGlvbi4gV2UncmUgdGFsa2luZyBhYm91dCBhIGNvcmUgcGllY2Ugb2YgaHVnZSBwYWdlIGFsbG9jYXRpb24sIHNvIGEgdGhvcm91Z2ggcmV2aWV3IGlzIGFsd2F5cyB3YXJyYW50ZWQsIGV2ZW4gaWYgd2UgKnRoaW5rKiB3ZSBrbm93IGl0IHdlbGwuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbnRhbCBtb2RlbCBvZiBpdHMgZmxvdyBhbmQgaW50ZXJhY3Rpb25zLCBwZXJoYXBzIHRyYWNpbmcgaXQgdGhyb3VnaCBhIGZldyBkaWZmZXJlbnQgc2NlbmFyaW9zIGluIG15IGhlYWQsIGZvY3VzaW5nIG9uIGVkZ2UgY2FzZXMsIGFuZCBlbnN1cmluZyBhbGwgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHByaW1pdGl2ZXMgYXJlIHVzZWQgY29ycmVjdGx5LiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zLCBvciBwb3RlbnRpYWwgZGVhZGxvY2tzLCBlc3BlY2lhbGx5IHNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IGFsbG9jYXRpb24uIEknbGwgbWVudGFsbHkgc3RlcCB0aHJvdWdoIHRoZSBjb2RlLCBmb2N1c2luZyBvbiBsb2NraW5nLCBlcnJvciBoYW5kbGluZywgYW5kIHJlc291cmNlIGNsZWFudXAgdG8gY29uZmlybSB0aGVyZSBhcmUgbm8gb3Zlcmxvb2tlZCBpc3N1ZXMgdGhhdCBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBwcm9ibGVtcyBkb3duIHRoZSBsaW5lLiBJIGtub3cgdGhlcmUncyBhIGxvdCBwYWNrZWQgaW50byB0aGlzIGZ1bmN0aW9uLCBidXQgSSBhbSBnb2luZyB0byBtYWtlIHN1cmUgdGhhdCBubyBkZXRhaWwgaXMgbG9zdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMTksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU5OjQ2Ljg5NDM4ODc1OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTEzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwNTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwNTA6XFx0XFx0XFx0LypcXG4zMDUxOlxcdFxcdFxcdCAqIENoZWNrIGZvciBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMuIFdoZW4gaXQgaGFwcGVucy4uXFxuMzA1MjpcXHRcXHRcXHQgKiBUaGUgcGFnZSB3YXMgYWRkZWQgdG8gdGhlIHJlc2VydmF0aW9uIG1hcCBiZXR3ZWVuXFxuMzA1MzpcXHRcXHRcXHQgKiB2bWFfbmVlZHNfcmVzZXJ2YXRpb24gYW5kIHZtYV9jb21taXRfcmVzZXJ2YXRpb24uXFxuMzA1NDpcXHRcXHRcXHQgKiBUaGlzIGluZGljYXRlcyBhIHJhY2Ugd2l0aCBodWdldGxiX3Jlc2VydmVfcGFnZXMuXFxuMzA1NTpcXHRcXHRcXHQgKiBBZGp1c3QgZm9yIHRoZSBzdWJwb29sIGNvdW50IGluY3JlbWVudGVkIGFib3ZlIEFORFxcbjMwNTY6XFx0XFx0XFx0ICogaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzIGZvciB0aGUgc2FtZSBwYWdlLlxcdEFsc28sXFxuMzA1NzpcXHRcXHRcXHQgKiB0aGUgcmVzZXJ2YXRpb24gY291bnQgYWRkZWQgaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzXFxuMzA1ODpcXHRcXHRcXHQgKiBubyBsb25nZXIgYXBwbGllcy5cXG4zMDU5OlxcdFxcdFxcdCAqL1xcbjMwNjA6XFx0XFx0XFx0aWYgKHVubGlrZWx5KG1hcF9jaGcgPT0gTUFQX0NIR19ORUVERUQgXFx1MDAyNlxcdTAwMjYgcmV0dmFsID09IDApKSB7XFxuMzA2MTpcXHRcXHRcXHRcXHRsb25nIHJzdl9hZGp1c3Q7XFxuMzA2MjpcXHRcXG4zMDYzOlxcdFxcdFxcdFxcdHJzdl9hZGp1c3QgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XFxuMzA2NDpcXHRcXHRcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1yc3ZfYWRqdXN0KTtcXG4zMDY1OlxcdFxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuMzA2NjpcXHRcXHRcXHRcXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9mb2xpb19yc3ZkKFxcbjMwNjc6XFx0XFx0XFx0XFx0ICAgIGhzdGF0ZV9pbmRleChoKSwgcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgZm9saW8pO1xcbjMwNjg6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbjMwNjk6XFx0XFx0XFx0fVxcbjMwNzA6XFx0XFx0fVxcbjMwNzE6XFx0XFxuMzA3MjpcXHRcXHRyZXR1cm4gZm9saW87XFxuMzA3MzpcXHRcXG4zMDc0OlxcdG91dF9zdWJwb29sX3B1dDpcXG4zMDc1OlxcdFxcdGlmIChtYXBfY2hnKSB7XFxuMzA3NjpcXHRcXHRcXHRsb25nIGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcXG4zMDc3OlxcdFxcbjMwNzg6XFx0XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQpO1xcbjMwNzk6XFx0XFx0fVxcbjMwODA6XFx0XFxuMzA4MTpcXHRvdXRfZW5kX3Jlc2VydmF0aW9uOlxcbjMwODI6XFx0XFx0aWYgKG1hcF9jaGcgIT0gTUFQX0NIR19FTkZPUkNFRClcXG4zMDgzOlxcdFxcdFxcdHZtYV9lbmRfcmVzZXJ2YXRpb24oaCwgdm1hLCBhZGRyKTtcXG4zMDg0OlxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuMzA4NTpcXHR9XFxuMzA4NjpcXHRcXG4zMDg3OlxcdHN0YXRpYyBfX2luaXQgdm9pZCAqYWxsb2NfYm9vdG1lbShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgbmlkLCBib29sIG5vZGVfZXhhY3QpXFxuMzA4ODpcXHR7XFxuMzA4OTpcXHRcXHRpZiAoaHVnZXRsYl9lYXJseV9jbWEoaCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU5OjQ2Ljg5NDk0NDU3OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTkxNzU5NzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkRpdmluZyBpbnRvIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgKipcblxuT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLiBMZXQncyBzcGVjaWZpY2FsbHkgY2hlY2sgdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDY3NDAgdG8gNjg0MC4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBzZWN0aW9uIGhhbmRsZXMgcGFnZSByZXNlcnZhdGlvbiDigJMgdGhlIGZpbmVyIGRldGFpbHMgb2YgaG93IGl0IGFsbG9jYXRlcyBodWdlIHBhZ2VzLiBJJ20gbG9va2luZyBmb3IgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBhbmQgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBlZGdlIGNhc2VzLiBUaGVyZSBtaWdodCBiZSBzb21lIHN1YnRsZSBpbnRlcnBsYXkgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YgaW4gdGhpcyByZWdpb24uIFRoaXMnbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyBiZWhhdmlvci4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExOTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU5OjUwLjQ4NjcwNjU1NloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjMyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3NDAsXG4gIFwiTGluZUNvdW50XCI6IDg1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY3NDA6XFx0XFx0XFx0XFx0XFx0Y2hnICogcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgXFx1MDAyNmhfY2cpO1xcbjY3NDE6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuNjc0MjpcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuNjc0MzpcXHRcXG42NzQ0OlxcdFxcdGlmICh2bWEgXFx1MDAyNlxcdTAwMjYgIXZtYV90ZXN0KHZtYSwgVk1BX01BWVNIQVJFX0JJVCkgXFx1MDAyNlxcdTAwMjYgaF9jZykge1xcbjY3NDU6XFx0XFx0XFx0LyogRm9yIHByaXZhdGUgbWFwcGluZ3MsIHRoZSBodWdldGxiX2Nncm91cCB1bmNoYXJnZSBpbmZvIGhhbmdzXFxuNjc0NjpcXHRcXHRcXHQgKiBvZiB0aGUgcmVzdl9tYXAuXFxuNjc0NzpcXHRcXHRcXHQgKi9cXG42NzQ4OlxcdFxcdFxcdHJlc3ZfbWFwX3NldF9odWdldGxiX2Nncm91cF91bmNoYXJnZV9pbmZvKHJlc3ZfbWFwLCBoX2NnLCBoKTtcXG42NzQ5OlxcdFxcdH1cXG42NzUwOlxcdFxcbjY3NTE6XFx0XFx0LypcXG42NzUyOlxcdFxcdCAqIFRoZXJlIG11c3QgYmUgZW5vdWdoIHBhZ2VzIGluIHRoZSBzdWJwb29sIGZvciB0aGUgbWFwcGluZy4gSWZcXG42NzUzOlxcdFxcdCAqIHRoZSBzdWJwb29sIGhhcyBhIG1pbmltdW0gc2l6ZSwgdGhlcmUgbWF5IGJlIHNvbWUgZ2xvYmFsXFxuNjc1NDpcXHRcXHQgKiByZXNlcnZhdGlvbnMgYWxyZWFkeSBpbiBwbGFjZSAoZ2JsX3Jlc2VydmUpLlxcbjY3NTU6XFx0XFx0ICovXFxuNjc1NjpcXHRcXHRnYmxfcmVzdl9nZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgY2hnKTtcXG42NzU3OlxcdFxcdGlmIChnYmxfcmVzdl9nZXQgXFx1MDAzYyAwKSB7XFxuNjc1ODpcXHRcXHRcXHRlcnIgPSBnYmxfcmVzdl9nZXQ7XFxuNjc1OTpcXHRcXHRcXHRnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXA7XFxuNjc2MDpcXHRcXHR9XFxuNjc2MTpcXHRcXG42NzYyOlxcdFxcdC8qXFxuNjc2MzpcXHRcXHQgKiBDaGVjayBlbm91Z2ggaHVnZXBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSByZXNlcnZhdGlvbi5cXG42NzY0OlxcdFxcdCAqIEhhbmQgdGhlIHBhZ2VzIGJhY2sgdG8gdGhlIHN1YnBvb2wgaWYgdGhlcmUgYXJlIG5vdFxcbjY3NjU6XFx0XFx0ICovXFxuNjc2NjpcXHRcXHRlcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCk7XFxuNjc2NzpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG42NzY4OlxcdFxcdFxcdGdvdG8gb3V0X3B1dF9wYWdlcztcXG42NzY5OlxcdFxcbjY3NzA6XFx0XFx0LypcXG42NzcxOlxcdFxcdCAqIEFjY291bnQgZm9yIHRoZSByZXNlcnZhdGlvbnMgbWFkZS4gU2hhcmVkIG1hcHBpbmdzIHJlY29yZCByZWdpb25zXFxuNjc3MjpcXHRcXHQgKiB0aGF0IGhhdmUgcmVzZXJ2YXRpb25zIGFzIHRoZXkgYXJlIHNoYXJlZCBieSBtdWx0aXBsZSBWTUFzLlxcbjY3NzM6XFx0XFx0ICogV2hlbiB0aGUgbGFzdCBWTUEgZGlzYXBwZWFycywgdGhlIHJlZ2lvbiBtYXAgc2F5cyBob3cgbXVjaFxcbjY3NzQ6XFx0XFx0ICogdGhlIHJlc2VydmF0aW9uIHdhcyBhbmQgdGhlIHBhZ2UgY2FjaGUgdGVsbHMgaG93IG11Y2ggb2ZcXG42Nzc1OlxcdFxcdCAqIHRoZSByZXNlcnZhdGlvbiB3YXMgY29uc3VtZWQuIFByaXZhdGUgbWFwcGluZ3MgYXJlIHBlci1WTUEgYW5kXFxuNjc3NjpcXHRcXHQgKiBvbmx5IHRoZSBjb25zdW1lZCByZXNlcnZhdGlvbnMgYXJlIHRyYWNrZWQuIFdoZW4gdGhlIFZNQVxcbjY3Nzc6XFx0XFx0ICogZGlzYXBwZWFycywgdGhlIG9yaWdpbmFsIHJlc2VydmF0aW9uIGlzIHRoZSBWTUEgc2l6ZSBhbmQgdGhlXFxuNjc3ODpcXHRcXHQgKiBjb25zdW1lZCByZXNlcnZhdGlvbnMgYXJlIHN0b3JlZCBpbiB0aGUgbWFwLiBIZW5jZSwgbm90aGluZ1xcbjY3Nzk6XFx0XFx0ICogZWxzZSBoYXMgdG8gYmUgZG9uZSBmb3IgcHJpdmF0ZSBtYXBwaW5ncyBoZXJlXFxuNjc4MDpcXHRcXHQgKi9cXG42NzgxOlxcdFxcdGlmICghdm1hIHx8IHZtYV90ZXN0KHZtYSwgVk1BX01BWVNIQVJFX0JJVCkpIHtcXG42NzgyOlxcdFxcdFxcdGFkZCA9IHJlZ2lvbl9hZGQocmVzdl9tYXAsIGZyb20sIHRvLCByZWdpb25zX25lZWRlZCwgaCwgaF9jZyk7XFxuNjc4MzpcXHRcXG42Nzg0OlxcdFxcdFxcdGlmICh1bmxpa2VseShhZGQgXFx1MDAzYyAwKSkge1xcbjY3ODU6XFx0XFx0XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3ZfZ2V0KTtcXG42Nzg2OlxcdFxcdFxcdFxcdGVyciA9IGFkZDtcXG42Nzg3OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3B1dF9wYWdlcztcXG42Nzg4OlxcdFxcdFxcdH0gZWxzZSBpZiAodW5saWtlbHkoY2hnIFxcdTAwM2UgYWRkKSkge1xcbjY3ODk6XFx0XFx0XFx0XFx0LypcXG42NzkwOlxcdFxcdFxcdFxcdCAqIHBhZ2VzIGluIHRoaXMgcmFuZ2Ugd2VyZSBhZGRlZCB0byB0aGUgcmVzZXJ2ZVxcbjY3OTE6XFx0XFx0XFx0XFx0ICogbWFwIGJldHdlZW4gcmVnaW9uX2NoZyBhbmQgcmVnaW9uX2FkZC4gIFRoaXNcXG42NzkyOlxcdFxcdFxcdFxcdCAqIGluZGljYXRlcyBhIHJhY2Ugd2l0aCBhbGxvY19odWdldGxiX2ZvbGlvLiAgQWRqdXN0XFxuNjc5MzpcXHRcXHRcXHRcXHQgKiB0aGUgc3VicG9vbCBhbmQgcmVzZXJ2ZSBjb3VudHMgbW9kaWZpZWQgYWJvdmVcXG42Nzk0OlxcdFxcdFxcdFxcdCAqIGJhc2VkIG9uIHRoZSBkaWZmZXJlbmNlLlxcbjY3OTU6XFx0XFx0XFx0XFx0ICovXFxuNjc5NjpcXHRcXHRcXHRcXHRsb25nIHJzdl9hZGp1c3Q7XFxuNjc5NzpcXHRcXG42Nzk4OlxcdFxcdFxcdFxcdC8qXFxuNjc5OTpcXHRcXHRcXHRcXHQgKiBodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZCgpIHdpbGwgcHV0IHRoZVxcbjY4MDA6XFx0XFx0XFx0XFx0ICogcmVmZXJlbmNlIHRvIGhfY2ctXFx1MDAzZWNzcy4gU2VlIGNvbW1lbnQgYmVsb3cgZm9yIGRldGFpbC5cXG42ODAxOlxcdFxcdFxcdFxcdCAqL1xcbjY4MDI6XFx0XFx0XFx0XFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoXFxuNjgwMzpcXHRcXHRcXHRcXHRcXHRoc3RhdGVfaW5kZXgoaCksXFxuNjgwNDpcXHRcXHRcXHRcXHRcXHQoY2hnIC0gYWRkKSAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xcbjY4MDU6XFx0XFxuNjgwNjpcXHRcXHRcXHRcXHRyc3ZfYWRqdXN0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsXFxuNjgwNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjaGcgLSBhZGQpO1xcbjY4MDg6XFx0XFx0XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtcnN2X2FkanVzdCk7XFxuNjgwOTpcXHRcXHRcXHR9IGVsc2UgaWYgKGhfY2cpIHtcXG42ODEwOlxcdFxcdFxcdFxcdC8qXFxuNjgxMTpcXHRcXHRcXHRcXHQgKiBUaGUgZmlsZV9yZWdpb25zIHdpbGwgaG9sZCB0aGVpciBvd24gcmVmZXJlbmNlIHRvXFxuNjgxMjpcXHRcXHRcXHRcXHQgKiBoX2NnLVxcdTAwM2Vjc3MuIFNvIHdlIHNob3VsZCByZWxlYXNlIHRoZSByZWZlcmVuY2UgaGVsZFxcbjY4MTM6XFx0XFx0XFx0XFx0ICogdmlhIGh1Z2V0bGJfY2dyb3VwX2NoYXJnZV9jZ3JvdXBfcnN2ZCgpIHdoZW4gd2UgYXJlXFxuNjgxNDpcXHRcXHRcXHRcXHQgKiBkb25lLlxcbjY4MTU6XFx0XFx0XFx0XFx0ICovXFxuNjgxNjpcXHRcXHRcXHRcXHRodWdldGxiX2Nncm91cF9wdXRfcnN2ZF9jZ3JvdXAoaF9jZyk7XFxuNjgxNzpcXHRcXHRcXHR9XFxuNjgxODpcXHRcXHR9XFxuNjgxOTpcXHRcXHRyZXR1cm4gY2hnO1xcbjY4MjA6XFx0XFxuNjgyMTpcXHQgb3V0X3B1dF9wYWdlczpcXG42ODIyOlxcdFxcdC8qXFxuNjgyMzpcXHRcXHQgKiBSZXR1cm4gYWxsIHRoYXQgd2FzIHJlcXVlc3RlZCBmcm9tIHRoZSBzdWJwb29sLCBsZXQgc3VicG9vbFxcbjY4MjQ6XFx0XFx0ICogdGVsbCB1cyB0aGUgbmV3IG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdCBuZWVkIHRvIGJlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU5OjUwLjQ4NzEzMjA0NloiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzE2Njg2Njc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIHZzLiBLQVNBTiBBbmFseXNpcyBvZiBIdWdlVExCIFN1YnBvb2wgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gYSBLTVNBTi9LQVNBTiBwZXJzcGVjdGl2ZSwgSSBuZWVkIHRvIGFuYWx5emUgdGhpcyBwYXRjaCBmb2N1c2luZyBvbiBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gRmlyc3QsIHRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBodWdlcGFnZV9zdWJwb29sYCBhY2NvdW50aW5nIGxvZ2ljLCBhbmQgZml4ZXMgaG93IHN1YnBvb2wgdXNhZ2UgaXMgdHJhY2tlZCwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiB1bmJvdW5kZWQgc3VicG9vbHMuXG5cblNwZWNpZmljYWxseSwgSSBzZWUgZm91ciBrZXkgY2hhbmdlczogZmlyc3QsIGB1c2VkX2hwYWdlc2AgaXMgbm93IHRyYWNrZWQgZXZlbiB3aGVuIGBtYXhfaHBhZ2VzYCBpc24ndCByZXN0cmljdGVkLiBTZWNvbmQsIGBodWdldGxiZnNfc3RhdGZzYCBnZXRzIGEgdHdlYWsg4oCTIGlmIGBtYXhfaHBhZ2VzYCBpcyB1bmJvdW5kZWQsIGBmcmVlX3BhZ2VzYCBnZXRzIHNldCB0byAtMSwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciByZXByZXNlbnRpbmcgdW5saW1pdGVkIGF2YWlsYWJpbGl0eS4gVGhpcmQsIGl0IGNsZWFucyB1cCBob3cgcGFnZSByZXNlcnZhdGlvbnMgYXJlIG1hbmFnZWQgZHVyaW5nIGBnZXRgIGFuZCBgcHV0YCBvcGVyYXRpb25zLCBhbmQgYWRqdXN0cyB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYC4gRmluYWxseSwgdGhlIGRvY3VtZW50YXRpb24gYW5kIGNvbW1lbnRzIGFyZSB1cGRhdGVkIGFjY29yZGluZ2x5LlxuXG5Ob3csIGxldCdzIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBSZWdhcmRpbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGluIGBodWdldGxiZnNfc3RhdGZzYCwgYGZyZWVfcGFnZXNgIGxvb2tzIHRvIGJlIGluaXRpYWxpemVkIGNvcnJlY3RseSwgZ2V0dGluZyBhc3NpZ25lZCBpbiBib3RoIGJyYW5jaGVzIG9mIHRoZSBpZiBzdGF0ZW1lbnQgYmVmb3JlIGJlaW5nIHVzZWQuIFNpbWlsYXJseSwgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYGdibF9yZXN2X2dldGAgYW5kIGBnYmxfcmVzdl9wdXRgIGFwcGVhciB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBldmVuIGluIHRoZSBlcnJvciBwYXRocy4gSSBhbSBub3Qgc2VlaW5nIGFueSBuZXcgc3RydWN0IHBhZGRpbmcgb3IgbWVtb3J5IGNvcGllcyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgYmUgcHJvYmxlbWF0aWMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGJlaW5nIHJlYWQsIG5vciBkbyBJIHNlZSBhbnkgY2hhbmdlcyB0byBidWZmZXIgc2l6ZSBtYW5pcHVsYXRpb24gdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5Gcm9tIGEgYnVnIGludHJvZHVjdGlvbiBwZXJzcGVjdGl2ZSwgaXQgbG9va3MgbGlrZSBhbnl0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBhY2NvdW50aW5nIGVycm9ycywgcmVzZXJ2YXRpb24gaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIGxvY2tpbmcgcHJvYmxlbXMgc2hvdWxkIGJlIGNhdWdodCBieSBrZXJuZWwgYXNzZXJ0aW9ucywgcmVmY291bnQgdHJhY2tpbmcsIG9yIG90aGVyIHRvb2xzLiBJIGFtIG5vdCBzZWVpbmcgYW55IGRpcmVjdCBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbnkga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MgZWl0aGVyLlxuXG5UaGVyZWZvcmUsIGFmdGVyIHJldmlld2luZyBhbGwgb2YgdGhpcywgdGhlIGxpa2VsaWhvb2Qgb2YgdGhpcyBwYXRjaCBpbnRyb2R1Y2luZyBpc3N1ZXMgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaCBzZWVtcyBsb3cuIFRoZSBOZWVkS01TQU4gZmxhZyBzaG91bGQgYmUgZmFsc2UuIE5vdywgbGV0J3MgbG9vayBhdCB0aGUgcmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjgxMSwiT3V0cHV0VG9rZW5zIjoyNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1OTo1Ni44MDM4MjMyODJaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBodWdldGxiIHN1YnBvb2wgYWNjb3VudGluZyBhbmQgcmVzZXJ2YXRpb24gdHJhY2tpbmcgKGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2AsIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAsIGFuZCBgbW0vaHVnZXRsYi5jYCkuIFNwZWNpZmljYWxseSwgaXQgdHJhY2tzIGB1c2VkX2hwYWdlc2AgY29uc2lzdGVudGx5IHdoZW4gYG1heF9ocGFnZXNgIGlzIHVuYm91bmRlZCAoLTEpLCBmaXhlcyByZXBvcnRpbmcgaW4gYGh1Z2V0bGJmc19zdGF0ZnNgLCBhbmQgc2ltcGxpZmllcyB0aGUgZXJyb3Igcm9sbGJhY2sgYXJpdGhtZXRpYyB3aGVuIG9idGFpbmluZy9yZWxlYXNpbmcgc3VicG9vbCByZXNlcnZhdGlvbnMgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW8oKWAgYW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAuXFxuXFxuQWxsIG1vZGlmaWVkIHZhcmlhYmxlcyAoYGZyZWVfcGFnZXNgLCBgZ2JsX3Jlc3ZfZ2V0YCwgYGdibF9yZXN2X3B1dGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UgYWNyb3NzIGFsbCBjb250cm9sIGZsb3cgcGF0aHMsIGFuZCBubyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgaXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGluIHRoaXMgcGF0Y2ggd291bGQgaW52b2x2ZSBhY2NvdW50aW5nIGRpc2NyZXBhbmNpZXMsIG1lbW9yeSBsZWFrcywgb3IgY29uY3VycmVuY3kgaXNzdWVzLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGlhZ25vc3RpY3MsIGFzc2VydGlvbnMsIGFuZCBLQVNBTi9MT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaHVnZXRsYiBzdWJwb29sIGFjY291bnRpbmcgYW5kIHJlc2VydmF0aW9uIHRyYWNraW5nIChpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLCBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLCBhbmQgYG1tL2h1Z2V0bGIuY2ApLiBTcGVjaWZpY2FsbHksIGl0IHRyYWNrcyBgdXNlZF9ocGFnZXNgIGNvbnNpc3RlbnRseSB3aGVuIGBtYXhfaHBhZ2VzYCBpcyB1bmJvdW5kZWQgKC0xKSwgZml4ZXMgcmVwb3J0aW5nIGluIGBodWdldGxiZnNfc3RhdGZzYCwgYW5kIHNpbXBsaWZpZXMgdGhlIGVycm9yIHJvbGxiYWNrIGFyaXRobWV0aWMgd2hlbiBvYnRhaW5pbmcvcmVsZWFzaW5nIHN1YnBvb2wgcmVzZXJ2YXRpb25zIGluIGBhbGxvY19odWdldGxiX2ZvbGlvKClgIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgLlxcblxcbkFsbCBtb2RpZmllZCB2YXJpYWJsZXMgKGBmcmVlX3BhZ2VzYCwgYGdibF9yZXN2X2dldGAsIGBnYmxfcmVzdl9wdXRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGFjcm9zcyBhbGwgY29udHJvbCBmbG93IHBhdGhzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBvciB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nIGlzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBpbiB0aGlzIHBhdGNoIHdvdWxkIGludm9sdmUgYWNjb3VudGluZyBkaXNjcmVwYW5jaWVzLCBtZW1vcnkgbGVha3MsIG9yIGNvbmN1cnJlbmN5IGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRpYWdub3N0aWNzLCBhc3NlcnRpb25zLCBhbmQgS0FTQU4vTE9DS0RFUC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6nsr4[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-03 23:56:02 +0000 UTC FinishedAt: 2026-09-03 23:59:57 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "axboe", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git", "commit_hash": "cee9395acd8043be0644b25c34bfa86623f2b935", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "HUGETLBFS" ], "series_id": "8eaa669c-6d16-4d7c-865e-a0b5bc549489" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "hugetlb_reserve_pages", "alloc_hugetlb_folio", "hugepage_subpool_get_pages", "hugepage_subpool_put_pages", "hugetlbfs_statfs" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyYjMzQ7LAogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJmc19zdGF0ZnMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgaHVnZXRsYiBzdWJwb29sIGFjY291bnRpbmcgYW5kIHJlc2VydmF0aW9uIHRyYWNraW5nIChpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLCBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLCBhbmQgYG1tL2h1Z2V0bGIuY2ApLiBTcGVjaWZpY2FsbHksIGl0IHRyYWNrcyBgdXNlZF9ocGFnZXNgIGNvbnNpc3RlbnRseSB3aGVuIGBtYXhfaHBhZ2VzYCBpcyB1bmJvdW5kZWQgKC0xKSwgZml4ZXMgcmVwb3J0aW5nIGluIGBodWdldGxiZnNfc3RhdGZzYCwgYW5kIHNpbXBsaWZpZXMgdGhlIGVycm9yIHJvbGxiYWNrIGFyaXRobWV0aWMgd2hlbiBvYnRhaW5pbmcvcmVsZWFzaW5nIHN1YnBvb2wgcmVzZXJ2YXRpb25zIGluIGBhbGxvY19odWdldGxiX2ZvbGlvKClgIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgLlxuXG5BbGwgbW9kaWZpZWQgdmFyaWFibGVzIChgZnJlZV9wYWdlc2AsIGBnYmxfcmVzdl9nZXRgLCBgZ2JsX3Jlc3ZfcHV0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBhY3Jvc3MgYWxsIGNvbnRyb2wgZmxvdyBwYXRocywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgaW4gdGhpcyBwYXRjaCB3b3VsZCBpbnZvbHZlIGFjY291bnRpbmcgZGlzY3JlcGFuY2llcywgbWVtb3J5IGxlYWtzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkaWFnbm9zdGljcywgYXNzZXJ0aW9ucywgYW5kIEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzdWJwb29sIHBhZ2UgYWNjb3VudGluZywgcmVzZXJ2YXRpb24gY2FsY3VsYXRpb24sIGFuZCBlcnJvciByZWNvdmVyeSBsb2dpYyBpbiBodWdldGxiZnMgYW5kIGNvcmUgaHVnZXRsYiBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcyAoaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMsIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzLCBodWdldGxiX3Jlc2VydmVfcGFnZXMsIGFsbG9jX2h1Z2V0bGJfZm9saW8sIGh1Z2V0bGJmc19zdGF0ZnMpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3lzY2FsbHMgc3VjaCBhcyBtbWFwLCBvcGVuLCBmYWxsb2NhdGUsIGFuZCBzdGF0ZnMgb24gaHVnZXRsYmZzLCBtYWtpbmcgdGhpcyBjb2RlIHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgOWMzYzQ1MTgyOGNjODU4MWRjZjE0ZDMwNThhM2I3NGY1NjI0YjYyN1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgU2VwIDMgMjM6NTg6MzIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcbmluZGV4IGE0OTExNWRiMThjNzYuLmQyNDQ1ODNmZGNiYzMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG5AQCAtMzE0LDIxICYjNDM7MzE0LDggQEAgaHVnZSBwYWdlcy4gIElmIHRoZXkgY2FuIG5vdCBiZSByZXNlcnZlZCwgdGhlIG1vdW50IGZhaWxzLlxuIFRoZSByb3V0aW5lcyBodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKSBhcmUgY2FsbGVkIHdoZW4gcGFnZXMgYXJlXG4gb2J0YWluZWQgZnJvbSBvciByZWxlYXNlZCBiYWNrIHRvIGEgc3VicG9vbC4gIFRoZXkgcGVyZm9ybSBhbGwgc3VicG9vbFxuIGFjY291bnRpbmcsIGFuZCB0cmFjayBhbnkgcmVzZXJ2YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbC5cbi1odWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMgYXJlIHBhc3NlZCB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMgYnkgd2hpY2hcbi10byBhZGp1c3QgdGhlIHN1YnBvb2wgJiMzOTt1c2VkIHBhZ2UmIzM5OyBjb3VudCAoZG93biBmb3IgZ2V0LCB1cCBmb3IgcHV0KS4gIE5vcm1hbGx5LFxuLXRoZXkgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIHRoYXQgd2FzIHBhc3NlZCBvciBhbiBlcnJvciBpZiBub3QgZW5vdWdoIHBhZ2VzXG4tZXhpc3QgaW4gdGhlIHN1YnBvb2wuXG4tXG4tSG93ZXZlciwgaWYgcmVzZXJ2ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbCBhIHJldHVybiB2YWx1ZSBsZXNzXG4tdGhhbiB0aGUgcGFzc2VkIHZhbHVlIG1heSBiZSByZXR1cm5lZC4gIFRoaXMgcmV0dXJuIHZhbHVlIGluZGljYXRlcyB0aGVcbi1udW1iZXIgb2YgYWRkaXRpb25hbCBnbG9iYWwgcG9vbCBhZGp1c3RtZW50cyB3aGljaCBtdXN0IGJlIG1hZGUuICBGb3IgZXhhbXBsZSxcbi1zdXBwb3NlIGEgc3VicG9vbCBjb250YWlucyAzIHJlc2VydmVkIGh1Z2UgcGFnZXMgYW5kIHNvbWVvbmUgYXNrcyBmb3IgNS5cbi1UaGUgMyByZXNlcnZlZCBwYWdlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHN1YnBvb2wgY2FuIGJlIHVzZWQgdG8gc2F0aXNmeSBwYXJ0XG4tb2YgdGhlIHJlcXVlc3QuICBCdXQsIDIgcGFnZXMgbXVzdCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBnbG9iYWwgcG9vbHMuICBUb1xuLXJlbGF5IHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIGNhbGxlciwgdGhlIHZhbHVlIDIgaXMgcmV0dXJuZWQuICBUaGUgY2FsbGVyXG4taXMgdGhlbiByZXNwb25zaWJsZSBmb3IgYXR0ZW1wdGluZyB0byBvYnRhaW4gdGhlIGFkZGl0aW9uYWwgdHdvIHBhZ2VzIGZyb21cbi10aGUgZ2xvYmFsIHBvb2xzLlxuLVxuJiM0MztodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKSB1c2UgdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIHBhc3NlZCB0byBhZGp1c3RcbiYjNDM7dGhlIHN1YnBvb2wgJiMzOTt1c2VkIHBhZ2UmIzM5OyBjb3VudC5cbiBcbiBDT1cgYW5kIFJlc2VydmF0aW9uc1xuID09PT09PT09PT09PT09PT09PT09XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuaW5kZXggMjA5NDdmOGJkMDY1NC4uYWUxZjFmMzE0NzdmYyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuQEAgLTI0NiwxNSAmIzQzOzI0Niw4IEBAIGh1Z2VwYWdlX3N1YnBvb2znmoRtaW5faHBhZ2Vz5a2X5q615Lit6KKr6Lef6Liq44CC5Zyo5oyC6L295pe277yMaHVnZXRsYl9hY2N0X21lXG4g6KKr6LCD55So5Lul6aKE55WZ5oyH5a6a5pWw6YeP55qE5beo6aG144CC5aaC5p6c5a6D5Lus5LiN6IO96KKr6aKE55WZ77yM5oyC6L295bCx5Lya5aSx6LSl44CCXG4gXG4g5b2T5LuO5a2Q5rGg5Lit6I635Y+W5oiW6YeK5pS+6aG16Z2i5pe277yM5Lya6LCD55SoaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCnlh73mlbDjgIJcbi1odWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXPooqvkvKDpgJLnu5nlt6jpobXmlbDph4/vvIzku6XmraTmnaXosIPmlbTlrZDmsaDnmoQg4oCc5bey55So6aG16Z2i4oCdIOiuoeaVsFxuLe+8iGdldOS4uuS4i+mZje+8jHB1dOS4uuS4iuWNh++8ieOAgumAmuW4uOaDheWGteS4i++8jOWmguaenOWtkOaxoOS4reayoeaciei2s+Wkn+eahOmhtemdou+8jOWug+S7rOS8mui/lOWbnuS4juS8oOmAkueahOebuOWQjOeahOWAvOaIllxuLeS4gOS4qumUmeivr+OAglxuLVxuLeeEtuiAjO+8jOWmguaenOmihOeVmeS4juWtkOaxoOebuOWFs+iBlO+8jOWPr+iDveS8mui/lOWbnuS4gOS4quWwj+S6juS8oOmAkuWAvOeahOi/lOWbnuWAvOOAgui/meS4qui/lOWbnuWAvOihqOekuuW/hemhu+i/m+ihjOeahOmineWkluWFqOWxgFxuLeaxoOiwg+aVtOeahOaVsOmHj+OAguS+i+Wmgu+8jOWBh+iuvuS4gOS4quWtkOaxoOWMheWQqzPkuKrpooTnlZnnmoTlt6jpobXvvIzmnInkurropoHmsYI15Liq44CC5LiO5a2Q5rGg55u45YWz55qEM+S4qumihOeVmemhteWPr+S7peeUqOadpVxuLea7oei2s+mDqOWIhuivt+axguOAguS9huaYr++8jOW/hemhu+S7juWFqOWxgOaxoOS4reiOt+W+lzLkuKrpobXpnaLjgILkuLrkuoblkJHosIPnlKjogIXovazovr7ov5nkuIDkv6Hmga/vvIzlsIbov5Tlm57lgLwy44CC54S25ZCO77yM6LCD55SoXG4t6ICF6KaB6LSf6LSj5LuO5YWo5bGA5rGg5Lit6I635Y+W5Y+m5aSW5Lik5Liq6aG16Z2i44CCXG4tXG4mIzQzO+Wug+S7rOi0n+i0o+aJgOacieWtkOaxoOeahOe7n+iuoeaguOeul++8jOW5tui3n+i4quS4juWtkOaxoOebuOWFs+iBlOeahOmihOeVmeOAglxuJiM0MztodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKeWHveaVsOS9v+eUqOS8oOWFpeeahOW3qOmhteaVsOmHj+adpeiwg+aVtOWtkOaxoOeahOKAnOW3sueUqOmhtemdouKAneiuoeaVsOOAglxuIFxuIENPV+WSjOmihOeVmVxuID09PT09PT09PT1cbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCA3NjExYTg0NzBlYTI2Li41MTEzZjc0M2Y2ZmM3IDEwMDY0NFxuLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5AQCAtMTEwOSw4ICYjNDM7MTEwOSwxMiBAQCBzdGF0aWMgaW50IGh1Z2V0bGJmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuIFxuIFx0XHRcdHNwaW5fbG9ja19pcnEoXHUwMDI2c2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZWxvY2spO1xuIFx0XHRcdGJ1Zi1cdTAwM2VmX2Jsb2NrcyA9IHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzO1xuLVx0XHRcdGZyZWVfcGFnZXMgPSBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbWF4X2hwYWdlc1xuLVx0XHRcdFx0LSBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4mIzQzO1x0XHRcdGlmIChzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyA9PSAtMSkge1xuJiM0MztcdFx0XHRcdGZyZWVfcGFnZXMgPSAtMTtcbiYjNDM7XHRcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0XHRmcmVlX3BhZ2VzID0gc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZW1heF9ocGFnZXMgLVxuJiM0MztcdFx0XHRcdFx0ICAgICBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4mIzQzO1x0XHRcdH1cbiBcdFx0XHRidWYtXHUwMDNlZl9iYXZhaWwgPSBidWYtXHUwMDNlZl9iZnJlZSA9IGZyZWVfcGFnZXM7XG4gXHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNnNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2Vsb2NrKTtcbiBcdFx0XHRidWYtXHUwMDNlZl9maWxlcyA9IHNiaW5mby1cdTAwM2VtYXhfaW5vZGVzO1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbmluZGV4IDE2YzRjNGNhYTEyNmMuLjQ1NTFmZjMwMjM2NDAgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbkBAIC0zOSw4ICYjNDM7MzksOCBAQCBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCB7XG4gXHRzcGlubG9ja190IGxvY2s7XG4gXHRsb25nIGNvdW50O1xuIFx0bG9uZyBtYXhfaHBhZ2VzO1x0LyogTWF4aW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1heGltdW0uICovXG4tXHRsb25nIHVzZWRfaHBhZ2VzO1x0LyogVXNlZCBjb3VudCBhZ2FpbnN0IG1heGltdW0sIGluY2x1ZGVzICovXG4tXHRcdFx0XHQvKiBib3RoIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovXG4mIzQzO1x0bG9uZyB1c2VkX2hwYWdlcztcdC8qIFVzZWQgcGFnZSBjb3VudCwgaW5jbHVkZXMgYm90aCAqL1xuJiM0MztcdFx0XHRcdC8qIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovXG4gXHRzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7XG4gXHRsb25nIG1pbl9ocGFnZXM7XHQvKiBNaW5pbXVtIGh1Z2UgcGFnZXMgb3IgLTEgaWYgbm8gbWluaW11bS4gKi9cbiBcdGxvbmcgcnN2X2hwYWdlcztcdC8qIFBhZ2VzIHJlc2VydmVkIGFnYWluc3QgZ2xvYmFsIHBvb2wgdG8gKi9cbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcbmluZGV4IDc4NTc3Mjg0NTc5NTIuLmUyNGY4NTZjOTQ5YzMgMTAwNjQ0XG4tLS0gYS9tbS9odWdldGxiLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2V0bGIuY1xuQEAgLTEzMCwxMiAmIzQzOzEzMCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzdWJwb29sX2lzX2ZyZWUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxuIHtcbiBcdGlmIChzcG9vbC1cdTAwM2Vjb3VudClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuLVx0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXG4tXHRcdHJldHVybiBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSAwO1xuLVx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEpXG4tXHRcdHJldHVybiBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IHNwb29sLVx1MDAzZW1pbl9ocGFnZXM7XG4gXG4tXHRyZXR1cm4gdHJ1ZTtcbiYjNDM7XHRyZXR1cm4gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuQEAgLTE5MywxMyAmIzQzOzE4OSwxOCBAQCB2b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbiBcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbiB9XG4gXG4tLypcbi0gKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGFsbG9jYXRpbmcgYW5kIHJlc2VydmluZyBwYWdlcy5cbi0gKiBSZXR1cm4gLUVOT01FTSBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gc2F0aXNmeSB0aGVcbi0gKiByZXF1ZXN0LiAgT3RoZXJ3aXNlLCByZXR1cm4gdGhlIG51bWJlciBvZiBwYWdlcyBieSB3aGljaCB0aGVcbi0gKiBnbG9iYWwgcG9vbHMgbXVzdCBiZSBhZGp1c3RlZCAodXB3YXJkKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBtYXlcbi0gKiBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKSBpbiB0aGUgY2FzZSB3aGVyZVxuLSAqIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxuJiM0MzsvKipcbiYjNDM7ICogaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMgLSBHZXQgcGFnZXMgZnJvbSBhIHN1YnBvb2xcbiYjNDM7ICogQHNwb29sOiBwb2ludGVyIHRvIHN1YnBvb2wgc3RydWN0dXJlIChtYXkgYmUgTlVMTClcbiYjNDM7ICogQGRlbHRhOiBudW1iZXIgb2YgcGFnZXMgdG8gYWxsb2NhdGUgb3IgcmVzZXJ2ZVxuJiM0MzsgKlxuJiM0MzsgKiBDaGVjayBhbmQgdXBkYXRlIHN1YnBvb2wgcGFnZSB1c2FnZSBjb3VudHMgd2hlbiBhbGxvY2F0aW5nIG9yXG4mIzQzOyAqIHJlc2VydmluZyBAZGVsdGEgaHVnZXBhZ2VzLlxuJiM0MzsgKlxuJiM0MzsgKiBDb250ZXh0OiBUYWtlcyBzcG9vbC1cdTAwM2Vsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnEoKS5cbiYjNDM7ICogUmV0dXJuOiBOb24tbmVnYXRpdmUgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IGNhbm5vdCBiZVxuJiM0MzsgKiAgICAgICAgIHNhdGlzZmllZCBieSB0aGUgc3VicG9vbCwgb3IgLUVOT01FTSBpZiB0aGUgc3VicG9vbCBtYXhpbXVtXG4mIzQzOyAqICAgICAgICAgbGltaXQgd291bGQgYmUgZXhjZWVkZWQuXG4gICovXG4gc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuIFx0XHRcdFx0ICAgICAgbG9uZyBkZWx0YSlcbkBAIC0yMTEsMTUgJiM0MzsyMTIsMTQgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuIFxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrKTtcbiBcbi1cdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKSB7XHRcdC8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4tXHRcdGlmICgoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgJiM0MzsgZGVsdGEpIFx1MDAzYz0gc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcylcbi1cdFx0XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAmIzQzOz0gZGVsdGE7XG4tXHRcdGVsc2Uge1xuLVx0XHRcdHJldCA9IC1FTk9NRU07XG4tXHRcdFx0Z290byB1bmxvY2tfcmV0O1xuLVx0XHR9XG4mIzQzO1x0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICYjNDM7IGRlbHRhIFx1MDAzZSBzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PTUVNO1xuJiM0MztcdFx0Z290byB1bmxvY2tfcmV0O1xuIFx0fVxuIFxuJiM0MztcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICYjNDM7PSBkZWx0YTtcbiYjNDM7XG4gXHQvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqL1xuIFx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMpIHtcbiBcdFx0aWYgKGRlbHRhIFx1MDAzZSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzKSB7XG5AQCAtMjQwLDExICYjNDM7MjQwLDE5IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuLS8qXG4tICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBmcmVlaW5nIGFuZCB1bnJlc2VydmluZyBwYWdlcy5cbi0gKiBSZXR1cm4gdGhlIG51bWJlciBvZiBnbG9iYWwgcGFnZSByZXNlcnZhdGlvbnMgdGhhdCBtdXN0IGJlIGRyb3BwZWQuXG4tICogVGhlIHJldHVybiB2YWx1ZSBtYXkgb25seSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgcGFzc2VkIHZhbHVlIChkZWx0YSlcbi0gKiBpbiB0aGUgY2FzZSB3aGVyZSBhIHN1YnBvb2wgbWluaW11bSBzaXplIG11c3QgYmUgbWFpbnRhaW5lZC5cbiYjNDM7LyoqXG4mIzQzOyAqIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzIC0gUmVsZWFzZSBwYWdlcyBiYWNrIHRvIGEgc3VicG9vbFxuJiM0MzsgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKVxuJiM0MzsgKiBAZGVsdGE6IG51bWJlciBvZiBwYWdlcyB0byBmcmVlIG9yIHVucmVzZXJ2ZVxuJiM0MzsgKlxuJiM0MzsgKiBDaGVjayBhbmQgdXBkYXRlIHN1YnBvb2wgcGFnZSB1c2FnZSBjb3VudHMgd2hlbiBmcmVlaW5nIG9yXG4mIzQzOyAqIHVucmVzZXJ2aW5nIEBkZWx0YSBodWdlcGFnZXMuXG4mIzQzOyAqXG4mIzQzOyAqIENvbnRleHQ6IFRha2VzIHNwb29sLVx1MDAzZWxvY2sgdXNpbmcgc3Bpbl9sb2NrX2lycXNhdmUoKS4gTWF5IHJlbGVhc2VcbiYjNDM7ICogICAgICAgICAgYW5kIGZyZWUgQHNwb29sIGlmIGl0cyB1c2FnZSBjb3VudCBhbmQgcmVmZXJlbmNlcyByZWFjaFxuJiM0MzsgKiAgICAgICAgICB6ZXJvLlxuJiM0MzsgKiBSZXR1cm46IE5vbi1uZWdhdGl2ZSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgdGhlIHN1YnBvb2wgY2Fubm90XG4mIzQzOyAqICAgICAgICAgYWJzb3JiLlxuICAqL1xuIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiBcdFx0XHRcdCAgICAgICBsb25nIGRlbHRhKVxuQEAgLTI1NywxOSAmIzQzOzI2NSwyNCBAQCBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcdFx0LyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi9cbi1cdFx0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZGVsdGE7XG4mIzQzO1x0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZGVsdGE7XG4gXG4gXHQgLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi9cbiBcdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xIFx1MDAyNlx1MDAyNiBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyBcdTAwM2Mgc3Bvb2wtXHUwMDNlbWluX2hwYWdlcykge1xuLVx0XHRpZiAoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyAmIzQzOyBkZWx0YSBcdTAwM2M9IHNwb29sLVx1MDAzZW1pbl9ocGFnZXMpXG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogbGltaXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0XG4mIzQzO1x0XHQgKiBjYW4gYmUgcmVzdG9yZWQgdG8gdGhpcyBzdWJwb29sLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRsb25nIGxpbWl0ID0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAtIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzO1xuJiM0MztcbiYjNDM7XHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhIFx1MDAzYz0gbGltaXQpXG4gXHRcdFx0cmV0ID0gMDtcbiBcdFx0ZWxzZVxuLVx0XHRcdHJldCA9IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgJiM0MzsgZGVsdGEgLSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzO1xuJiM0MztcdFx0XHRyZXQgPSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhIC0gbGltaXQ7XG4gXG4gXHRcdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgJiM0Mzs9IGRlbHRhO1xuLVx0XHRpZiAoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyBcdTAwM2Ugc3Bvb2wtXHUwMDNlbWluX2hwYWdlcylcbi1cdFx0XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcztcbiYjNDM7XHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzIFx1MDAzZSBsaW1pdClcbiYjNDM7XHRcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9IGxpbWl0O1xuIFx0fVxuIFxuIFx0LypcbkBAIC0yOTQyLDcgJiM0MzsyOTU1LDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF92bWEodm1hKTtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLVx0bG9uZyByZXR2YWwsIGdibF9jaGcsIGdibF9yZXNlcnZlO1xuJiM0MztcdGxvbmcgcmV0dmFsLCBnYmxfcmVzdl9nZXQ7XG4gXHRtYXBfY2hnX3N0YXRlIG1hcF9jaGc7XG4gXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkIG1wb2xpO1xuIFx0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuQEAgLTI5ODEsOCAmIzQzOzI5OTQsOCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHQgKiBPciBpZiBpdCBjYW4gZ2V0IG9uZSBmcm9tIHRoZSBwb29sIHJlc2VydmF0aW9uIGRpcmVjdGx5LlxuIFx0ICovXG4gXHRpZiAobWFwX2NoZykge1xuLVx0XHRnYmxfY2hnID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xuLVx0XHRpZiAoZ2JsX2NoZyBcdTAwM2MgMCkge1xuJiM0MztcdFx0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xuJiM0MztcdFx0aWYgKGdibF9yZXN2X2dldCBcdTAwM2MgMCkge1xuIFx0XHRcdHJldCA9IC1FTk9TUEM7XG4gXHRcdFx0Z290byBvdXRfZW5kX3Jlc2VydmF0aW9uO1xuIFx0XHR9XG5AQCAtMjk5MSw3ICYjNDM7MzAwNCw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0ICogSWYgd2UgaGF2ZSB0aGUgdm1hIHJlc2VydmF0aW9uIHJlYWR5LCBubyBuZWVkIGZvciBleHRyYVxuIFx0XHQgKiBnbG9iYWwgcmVzZXJ2YXRpb24uXG4gXHRcdCAqL1xuLVx0XHRnYmxfY2hnID0gMDtcbiYjNDM7XHRcdGdibF9yZXN2X2dldCA9IDA7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTMwMDIsMTAgJiM0MzszMDE1LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDtcbiBcbiBcdC8qXG4tXHQgKiBnYmxfY2hnID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXG4mIzQzO1x0ICogZ2JsX3Jlc3ZfZ2V0ID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXG4gXHQgKiBhbGxvY2F0aW9uLCBzbyB0cnkgdG8gdXNlIGl0LlxuIFx0ICovXG4tXHRpZiAoZ2JsX2NoZyA9PSAwKVxuJiM0MztcdGlmIChnYmxfcmVzdl9nZXQgPT0gMClcbiBcdFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19VU0VfR0xPQkFMX1JFU0VSVkFUSU9OUztcbiBcbiBcdC8qIFRha2VzIHJlZmVyZW5jZSBvbiBtcG9sLiAqL1xuQEAgLTMwNTksMTMgJiM0MzszMDcyLDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHJldHVybiBmb2xpbztcbiBcbiBvdXRfc3VicG9vbF9wdXQ6XG4tXHQvKlxuLVx0ICogcHV0IHBhZ2UgdG8gc3VicG9vbCBpZmYgdGhlIHF1b3RhIG9mIHN1YnBvb2wmIzM5O3MgcnN2X2hwYWdlcyBpcyB1c2VkXG4tXHQgKiBkdXJpbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMuXG4tXHQgKi9cbi1cdGlmIChtYXBfY2hnIFx1MDAyNlx1MDAyNiAhZ2JsX2NoZykge1xuLVx0XHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbi1cdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xuJiM0MztcdGlmIChtYXBfY2hnKSB7XG4mIzQzO1x0XHRsb25nIGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbiYjNDM7XG4mIzQzO1x0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCAtIGdibF9yZXN2X3B1dCk7XG4gXHR9XG4gXG4gb3V0X2VuZF9yZXNlcnZhdGlvbjpcbkBAIC02NjYxLDEyICYjNDM7NjY3MSwxNCBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbi1cdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xLCBzcG9vbF9yZXN2LCBnYmxfcmVzdjtcbiYjNDM7XHRsb25nIGNoZyA9IC0xLCBhZGQgPSAtMTtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfaW5vZGUoaW5vZGUpO1xuIFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF9pbm9kZShpbm9kZSk7XG4gXHRzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwO1xuIFx0c3RydWN0IGh1Z2V0bGJfY2dyb3VwICpoX2NnID0gTlVMTDtcbi1cdGxvbmcgZ2JsX3Jlc2VydmUsIHJlZ2lvbnNfbmVlZGVkID0gMDtcbiYjNDM7XHRsb25nIHJlZ2lvbnNfbmVlZGVkID0gMDtcbiYjNDM7XHRsb25nIGdibF9yZXN2X2dldDtcbiYjNDM7XHRsb25nIGdibF9yZXN2X3B1dDtcbiBcdGludCBlcnI7XG4gXG4gXHQvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi9cbkBAIC02NzQxLDkgJiM0Mzs2NzUzLDkgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCAqIHRoZSBzdWJwb29sIGhhcyBhIG1pbmltdW0gc2l6ZSwgdGhlcmUgbWF5IGJlIHNvbWUgZ2xvYmFsXG4gXHQgKiByZXNlcnZhdGlvbnMgYWxyZWFkeSBpbiBwbGFjZSAoZ2JsX3Jlc2VydmUpLlxuIFx0ICovXG4tXHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpO1xuLVx0aWYgKGdibF9yZXNlcnZlIFx1MDAzYyAwKSB7XG4tXHRcdGVyciA9IGdibF9yZXNlcnZlO1xuJiM0MztcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpO1xuJiM0MztcdGlmIChnYmxfcmVzdl9nZXQgXHUwMDNjIDApIHtcbiYjNDM7XHRcdGVyciA9IGdibF9yZXN2X2dldDtcbiBcdFx0Z290byBvdXRfdW5jaGFyZ2VfY2dyb3VwO1xuIFx0fVxuIFxuQEAgLTY3NTEsNyAmIzQzOzY3NjMsNyBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0ICogQ2hlY2sgZW5vdWdoIGh1Z2VwYWdlcyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgcmVzZXJ2YXRpb24uXG4gXHQgKiBIYW5kIHRoZSBwYWdlcyBiYWNrIHRvIHRoZSBzdWJwb29sIGlmIHRoZXJlIGFyZSBub3RcbiBcdCAqL1xuLVx0ZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzZXJ2ZSk7XG4mIzQzO1x0ZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQpO1xuIFx0aWYgKGVyciBcdTAwM2MgMClcbiBcdFx0Z290byBvdXRfcHV0X3BhZ2VzO1xuIFxuQEAgLTY3NzAsNyAmIzQzOzY3ODIsNyBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRhZGQgPSByZWdpb25fYWRkKHJlc3ZfbWFwLCBmcm9tLCB0bywgcmVnaW9uc19uZWVkZWQsIGgsIGhfY2cpO1xuIFxuIFx0XHRpZiAodW5saWtlbHkoYWRkIFx1MDAzYyAwKSkge1xuLVx0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbiYjNDM7XHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3ZfZ2V0KTtcbiBcdFx0XHRlcnIgPSBhZGQ7XG4gXHRcdFx0Z290byBvdXRfcHV0X3BhZ2VzO1xuIFx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KGNoZyBcdTAwM2UgYWRkKSkge1xuQEAgLTY4MDYsMjYgJiM0Mzs2ODE4LDIxIEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHR9XG4gXHRyZXR1cm4gY2hnO1xuIFxuLW91dF9wdXRfcGFnZXM6XG4tXHRzcG9vbF9yZXN2ID0gY2hnIC0gZ2JsX3Jlc2VydmU7XG4tXHRpZiAoc3Bvb2xfcmVzdikge1xuLVx0XHQvKiBwdXQgc3ViIHBvb2wmIzM5O3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi9cbi1cdFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XG4tXHRcdC8qXG4tXHRcdCAqIHN1YnBvb2wmIzM5O3MgcmVzZXJ2ZWQgcGFnZXMgY2FuIG5vdCBiZSBwdXQgYmFjayBkdWUgdG8gcmFjZSxcbi1cdFx0ICogcmV0dXJuIHRvIGhzdGF0ZS5cbi1cdFx0ICovXG4tXHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXN2KTtcbi1cdH1cbi1cdC8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqL1xuLVx0aWYgKGdibF9yZXNlcnZlIFx1MDAyNlx1MDAyNiBzcG9vbCkge1xuLVx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuJiM0Mzsgb3V0X3B1dF9wYWdlczpcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFJldHVybiBhbGwgdGhhdCB3YXMgcmVxdWVzdGVkIGZyb20gdGhlIHN1YnBvb2wsIGxldCBzdWJwb29sXG4mIzQzO1x0ICogdGVsbCB1cyB0aGUgbmV3IG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdCBuZWVkIHRvIGJlXG4mIzQzO1x0ICogcmV0dXJuZWQgdG8gdGhlIGdsb2JhbCBwb29sLlxuJiM0MztcdCAqL1xuJiM0MztcdGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBjaGcpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogVGhlcmUgbWF5IGJlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBudW1iZXIgb2ZcbiYjNDM7XHQgKiByZXNlcnZhdGlvbnMgdG8gY29uc3VtZSBhbmQgdGhlIG51bWJlciB0byByZXN0b3JlIG5vdyBpZlxuJiM0MztcdCAqIHRoZXJlIGFyZSBtdWx0aXBsZSB0aHJlYWRzIGludGVyYWN0aW5nIHdpdGggdGhlIHN1YnBvb2wgLVxuJiM0MztcdCAqIHJlc3RvcmUgdGhlIGRpZmZlcmVuY2UuXG4mIzQzO1x0ICovXG4mIzQzO1x0aHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQpO1xuIFxuLVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxuLVx0XHRcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIC09IGdibF9yZXNlcnZlO1xuLVx0XHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XG4tXHR9XG4gb3V0X3VuY2hhcmdlX2Nncm91cDpcbiBcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSxcbiBcdFx0XHRcdFx0ICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyYjMzQ7LAogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJmc19zdGF0ZnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3VicG9vbCBwYWdlIGFjY291bnRpbmcsIHJlc2VydmF0aW9uIGNhbGN1bGF0aW9uLCBhbmQgZXJyb3IgcmVjb3ZlcnkgbG9naWMgaW4gaHVnZXRsYmZzIGFuZCBjb3JlIGh1Z2V0bGIgbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMgKGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLCBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcywgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzLCBhbGxvY19odWdldGxiX2ZvbGlvLCBodWdldGxiZnNfc3RhdGZzKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5c2NhbGxzIHN1Y2ggYXMgbW1hcCwgb3BlbiwgZmFsbG9jYXRlLCBhbmQgc3RhdGZzIG9uIGh1Z2V0bGJmcywgbWFraW5nIHRoaXMgY29kZSB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzCnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoxLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsCmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuCgotIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOgogIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWQKICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLgogIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCwKICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuCgotIERPIE5PVCBCTElORExZIFRSVVNUICYjMzQ7Tk8gRlVOQ1RJT05BTCBDSEFOR0UmIzM0OyAoTkZDSSkgT1IgJiMzNDtSRUZBQ1RPUklORyYjMzQ7IENMQUlNUzoKICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzICYjMzQ7Y2xlYW51cHMmIzM0OywgJiMzNDtyZWZhY3RvcmluZ3MmIzM0Oywgb3Igc3RhdGUKICAmIzM0O05vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkJiMzNDsuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLgogIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudAogIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLgogIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuCgotIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOgogIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKiwKICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy4KICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyCiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczoKCi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczoKICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy4KICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKQogICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLgogICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHMKICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuCiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuCi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOgogICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6CiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmcKICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLgogICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOgotIENvcmUgU3Vic3lzdGVtczoKICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSwKICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy4KLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6CiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuCi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOgogICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLgotIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6CiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo0LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTikKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6CgotIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzoKICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1cwogIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0CiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuCiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzICYjMzQ7Zm9jdXNlZCYjMzQ7LAogIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy4KCi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOgogIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50cwogIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LgoKLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6CiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFjawogIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLgogIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlcgogIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3MKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZToKLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgotIENoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuCi0gU3RyaXAgYW55ICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDljM2M0NTE4MjhjYzg1ODFkY2YxNGQzMDU4YTNiNzRmNTYyNGI2MjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDIzOjU4OjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QKaW5kZXggYTQ5MTE1ZGIxOGM3Ni4uZDI0NDU4M2ZkY2JjMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CkBAIC0zMTQsMjEgJiM0MzszMTQsOCBAQCBodWdlIHBhZ2VzLiAgSWYgdGhleSBjYW4gbm90IGJlIHJlc2VydmVkLCB0aGUgbW91bnQgZmFpbHMuCiBUaGUgcm91dGluZXMgaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCkgYXJlIGNhbGxlZCB3aGVuIHBhZ2VzIGFyZQogb2J0YWluZWQgZnJvbSBvciByZWxlYXNlZCBiYWNrIHRvIGEgc3VicG9vbC4gIFRoZXkgcGVyZm9ybSBhbGwgc3VicG9vbAogYWNjb3VudGluZywgYW5kIHRyYWNrIGFueSByZXNlcnZhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sLgotaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzIGFyZSBwYXNzZWQgdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIGJ5IHdoaWNoCi10byBhZGp1c3QgdGhlIHN1YnBvb2wgJiMzOTt1c2VkIHBhZ2UmIzM5OyBjb3VudCAoZG93biBmb3IgZ2V0LCB1cCBmb3IgcHV0KS4gIE5vcm1hbGx5LAotdGhleSByZXR1cm4gdGhlIHNhbWUgdmFsdWUgdGhhdCB3YXMgcGFzc2VkIG9yIGFuIGVycm9yIGlmIG5vdCBlbm91Z2ggcGFnZXMKLWV4aXN0IGluIHRoZSBzdWJwb29sLgotCi1Ib3dldmVyLCBpZiByZXNlcnZlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sIGEgcmV0dXJuIHZhbHVlIGxlc3MKLXRoYW4gdGhlIHBhc3NlZCB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQuICBUaGlzIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgdGhlCi1udW1iZXIgb2YgYWRkaXRpb25hbCBnbG9iYWwgcG9vbCBhZGp1c3RtZW50cyB3aGljaCBtdXN0IGJlIG1hZGUuICBGb3IgZXhhbXBsZSwKLXN1cHBvc2UgYSBzdWJwb29sIGNvbnRhaW5zIDMgcmVzZXJ2ZWQgaHVnZSBwYWdlcyBhbmQgc29tZW9uZSBhc2tzIGZvciA1LgotVGhlIDMgcmVzZXJ2ZWQgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sIGNhbiBiZSB1c2VkIHRvIHNhdGlzZnkgcGFydAotb2YgdGhlIHJlcXVlc3QuICBCdXQsIDIgcGFnZXMgbXVzdCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBnbG9iYWwgcG9vbHMuICBUbwotcmVsYXkgdGhpcyBpbmZvcm1hdGlvbiB0byB0aGUgY2FsbGVyLCB0aGUgdmFsdWUgMiBpcyByZXR1cm5lZC4gIFRoZSBjYWxsZXIKLWlzIHRoZW4gcmVzcG9uc2libGUgZm9yIGF0dGVtcHRpbmcgdG8gb2J0YWluIHRoZSBhZGRpdGlvbmFsIHR3byBwYWdlcyBmcm9tCi10aGUgZ2xvYmFsIHBvb2xzLgotCiYjNDM7aHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCkgdXNlIHRoZSBudW1iZXIgb2YgaHVnZSBwYWdlcyBwYXNzZWQgdG8gYWRqdXN0CiYjNDM7dGhlIHN1YnBvb2wgJiMzOTt1c2VkIHBhZ2UmIzM5OyBjb3VudC4KIAogQ09XIGFuZCBSZXNlcnZhdGlvbnMKID09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdCBiL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CmluZGV4IDIwOTQ3ZjhiZDA2NTQuLmFlMWYxZjMxNDc3ZmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CkBAIC0yNDYsMTUgJiM0MzsyNDYsOCBAQCBodWdlcGFnZV9zdWJwb29s55qEbWluX2hwYWdlc+Wtl+auteS4reiiq+i3n+i4quOAguWcqOaMgui9veaXtu+8jGh1Z2V0bGJfYWNjdF9tZQog6KKr6LCD55So5Lul6aKE55WZ5oyH5a6a5pWw6YeP55qE5beo6aG144CC5aaC5p6c5a6D5Lus5LiN6IO96KKr6aKE55WZ77yM5oyC6L295bCx5Lya5aSx6LSl44CCCiAKIOW9k+S7juWtkOaxoOS4reiOt+WPluaIlumHiuaUvumhtemdouaXtu+8jOS8muiwg+eUqGh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygp5Ye95pWw44CCCi1odWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXPooqvkvKDpgJLnu5nlt6jpobXmlbDph4/vvIzku6XmraTmnaXosIPmlbTlrZDmsaDnmoQg4oCc5bey55So6aG16Z2i4oCdIOiuoeaVsAot77yIZ2V05Li65LiL6ZmN77yMcHV05Li65LiK5Y2H77yJ44CC6YCa5bi45oOF5Ya15LiL77yM5aaC5p6c5a2Q5rGg5Lit5rKh5pyJ6Laz5aSf55qE6aG16Z2i77yM5a6D5Lus5Lya6L+U5Zue5LiO5Lyg6YCS55qE55u45ZCM55qE5YC85oiWCi3kuIDkuKrplJnor6/jgIIKLQot54S26ICM77yM5aaC5p6c6aKE55WZ5LiO5a2Q5rGg55u45YWz6IGU77yM5Y+v6IO95Lya6L+U5Zue5LiA5Liq5bCP5LqO5Lyg6YCS5YC855qE6L+U5Zue5YC844CC6L+Z5Liq6L+U5Zue5YC86KGo56S65b+F6aG76L+b6KGM55qE6aKd5aSW5YWo5bGACi3msaDosIPmlbTnmoTmlbDph4/jgILkvovlpoLvvIzlgYforr7kuIDkuKrlrZDmsaDljIXlkKsz5Liq6aKE55WZ55qE5beo6aG177yM5pyJ5Lq66KaB5rGCNeS4quOAguS4juWtkOaxoOebuOWFs+eahDPkuKrpooTnlZnpobXlj6/ku6XnlKjmnaUKLea7oei2s+mDqOWIhuivt+axguOAguS9huaYr++8jOW/hemhu+S7juWFqOWxgOaxoOS4reiOt+W+lzLkuKrpobXpnaLjgILkuLrkuoblkJHosIPnlKjogIXovazovr7ov5nkuIDkv6Hmga/vvIzlsIbov5Tlm57lgLwy44CC54S25ZCO77yM6LCD55SoCi3ogIXopoHotJ/otKPku47lhajlsYDmsaDkuK3ojrflj5blj6blpJbkuKTkuKrpobXpnaLjgIIKLQomIzQzO+Wug+S7rOi0n+i0o+aJgOacieWtkOaxoOeahOe7n+iuoeaguOeul++8jOW5tui3n+i4quS4juWtkOaxoOebuOWFs+iBlOeahOmihOeVmeOAggomIzQzO2h1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygp5Ye95pWw5L2/55So5Lyg5YWl55qE5beo6aG15pWw6YeP5p2l6LCD5pW05a2Q5rGg55qE4oCc5bey55So6aG16Z2i4oCd6K6h5pWw44CCCiAKIENPV+WSjOmihOeVmQogPT09PT09PT09PQpkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCA3NjExYTg0NzBlYTI2Li41MTEzZjc0M2Y2ZmM3IDEwMDY0NAotLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9odWdldGxiZnMvaW5vZGUuYwpAQCAtMTEwOSw4ICYjNDM7MTEwOSwxMiBAQCBzdGF0aWMgaW50IGh1Z2V0bGJmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogCiAJCQlzcGluX2xvY2tfaXJxKCZhbXA7c2JpbmZvLSZndDtzcG9vbC0mZ3Q7bG9jayk7CiAJCQlidWYtJmd0O2ZfYmxvY2tzID0gc2JpbmZvLSZndDtzcG9vbC0mZ3Q7bWF4X2hwYWdlczsKLQkJCWZyZWVfcGFnZXMgPSBzYmluZm8tJmd0O3Nwb29sLSZndDttYXhfaHBhZ2VzCi0JCQkJLSBzYmluZm8tJmd0O3Nwb29sLSZndDt1c2VkX2hwYWdlczsKJiM0MzsJCQlpZiAoc2JpbmZvLSZndDtzcG9vbC0mZ3Q7bWF4X2hwYWdlcyA9PSAtMSkgewomIzQzOwkJCQlmcmVlX3BhZ2VzID0gLTE7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJZnJlZV9wYWdlcyA9IHNiaW5mby0mZ3Q7c3Bvb2wtJmd0O21heF9ocGFnZXMgLQomIzQzOwkJCQkJICAgICBzYmluZm8tJmd0O3Nwb29sLSZndDt1c2VkX2hwYWdlczsKJiM0MzsJCQl9CiAJCQlidWYtJmd0O2ZfYmF2YWlsID0gYnVmLSZndDtmX2JmcmVlID0gZnJlZV9wYWdlczsKIAkJCXNwaW5fdW5sb2NrX2lycSgmYW1wO3NiaW5mby0mZ3Q7c3Bvb2wtJmd0O2xvY2spOwogCQkJYnVmLSZndDtmX2ZpbGVzID0gc2JpbmZvLSZndDttYXhfaW5vZGVzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAppbmRleCAxNmM0YzRjYWExMjZjLi40NTUxZmYzMDIzNjQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaApAQCAtMzksOCAmIzQzOzM5LDggQEAgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgewogCXNwaW5sb2NrX3QgbG9jazsKIAlsb25nIGNvdW50OwogCWxvbmcgbWF4X2hwYWdlczsJLyogTWF4aW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1heGltdW0uICovCi0JbG9uZyB1c2VkX2hwYWdlczsJLyogVXNlZCBjb3VudCBhZ2FpbnN0IG1heGltdW0sIGluY2x1ZGVzICovCi0JCQkJLyogYm90aCBhbGxvY2F0ZWQgYW5kIHJlc2VydmVkIHBhZ2VzLiAqLwomIzQzOwlsb25nIHVzZWRfaHBhZ2VzOwkvKiBVc2VkIHBhZ2UgY291bnQsIGluY2x1ZGVzIGJvdGggKi8KJiM0MzsJCQkJLyogYWxsb2NhdGVkIGFuZCByZXNlcnZlZCBwYWdlcy4gKi8KIAlzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7CiAJbG9uZyBtaW5faHBhZ2VzOwkvKiBNaW5pbXVtIGh1Z2UgcGFnZXMgb3IgLTEgaWYgbm8gbWluaW11bS4gKi8KIAlsb25nIHJzdl9ocGFnZXM7CS8qIFBhZ2VzIHJlc2VydmVkIGFnYWluc3QgZ2xvYmFsIHBvb2wgdG8gKi8KZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA3ODU3NzI4NDU3OTUyLi5lMjRmODU2Yzk0OWMzIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC0xMzAsMTIgJiM0MzsxMzAsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc3VicG9vbF9pc19mcmVlKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCkKIHsKIAlpZiAoc3Bvb2wtJmd0O2NvdW50KQogCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xKQotCQlyZXR1cm4gc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzID09IDA7Ci0JaWYgKHNwb29sLSZndDttaW5faHBhZ2VzICE9IC0xKQotCQlyZXR1cm4gc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgPT0gc3Bvb2wtJmd0O21pbl9ocGFnZXM7CiAKLQlyZXR1cm4gdHJ1ZTsKJiM0MzsJcmV0dXJuIHNwb29sLSZndDt1c2VkX2hwYWdlcyA9PSAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCkBAIC0xOTMsMTMgJiM0MzsxODksMTggQEAgdm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpCiAJdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpOwogfQogCi0vKgotICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBhbGxvY2F0aW5nIGFuZCByZXNlcnZpbmcgcGFnZXMuCi0gKiBSZXR1cm4gLUVOT01FTSBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gc2F0aXNmeSB0aGUKLSAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZQotICogZ2xvYmFsIHBvb2xzIG11c3QgYmUgYWRqdXN0ZWQgKHVwd2FyZCkuICBUaGUgcmV0dXJuZWQgdmFsdWUgbWF5Ci0gKiBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKSBpbiB0aGUgY2FzZSB3aGVyZQotICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuCiYjNDM7LyoqCiYjNDM7ICogaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMgLSBHZXQgcGFnZXMgZnJvbSBhIHN1YnBvb2wKJiM0MzsgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKQomIzQzOyAqIEBkZWx0YTogbnVtYmVyIG9mIHBhZ2VzIHRvIGFsbG9jYXRlIG9yIHJlc2VydmUKJiM0MzsgKgomIzQzOyAqIENoZWNrIGFuZCB1cGRhdGUgc3VicG9vbCBwYWdlIHVzYWdlIGNvdW50cyB3aGVuIGFsbG9jYXRpbmcgb3IKJiM0MzsgKiByZXNlcnZpbmcgQGRlbHRhIGh1Z2VwYWdlcy4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IFRha2VzIHNwb29sLSZndDtsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnEoKS4KJiM0MzsgKiBSZXR1cm46IE5vbi1uZWdhdGl2ZSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgY2Fubm90IGJlCiYjNDM7ICogICAgICAgICBzYXRpc2ZpZWQgYnkgdGhlIHN1YnBvb2wsIG9yIC1FTk9NRU0gaWYgdGhlIHN1YnBvb2wgbWF4aW11bQomIzQzOyAqICAgICAgICAgbGltaXQgd291bGQgYmUgZXhjZWVkZWQuCiAgKi8KIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKIAkJCQkgICAgICBsb25nIGRlbHRhKQpAQCAtMjExLDE1ICYjNDM7MjEyLDE0IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKIAogCXNwaW5fbG9ja19pcnEoJmFtcDtzcG9vbC0mZ3Q7bG9jayk7CiAKLQlpZiAoc3Bvb2wtJmd0O21heF9ocGFnZXMgIT0gLTEpIHsJCS8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovCi0JCWlmICgoc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzICYjNDM7IGRlbHRhKSAmbHQ7PSBzcG9vbC0mZ3Q7bWF4X2hwYWdlcykKLQkJCXNwb29sLSZndDt1c2VkX2hwYWdlcyAmIzQzOz0gZGVsdGE7Ci0JCWVsc2UgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gdW5sb2NrX3JldDsKLQkJfQomIzQzOwlpZiAoc3Bvb2wtJmd0O21heF9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOwomIzQzOwkgICAgc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzICYjNDM7IGRlbHRhICZndDsgc3Bvb2wtJmd0O21heF9ocGFnZXMpIHsKJiM0MzsJCXJldCA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIHVubG9ja19yZXQ7CiAJfQogCiYjNDM7CXNwb29sLSZndDt1c2VkX2hwYWdlcyAmIzQzOz0gZGVsdGE7CiYjNDM7CiAJLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi8KIAlpZiAoc3Bvb2wtJmd0O21pbl9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOyBzcG9vbC0mZ3Q7cnN2X2hwYWdlcykgewogCQlpZiAoZGVsdGEgJmd0OyBzcG9vbC0mZ3Q7cnN2X2hwYWdlcykgewpAQCAtMjQwLDExICYjNDM7MjQwLDE5IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBmcmVlaW5nIGFuZCB1bnJlc2VydmluZyBwYWdlcy4KLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGdsb2JhbCBwYWdlIHJlc2VydmF0aW9ucyB0aGF0IG11c3QgYmUgZHJvcHBlZC4KLSAqIFRoZSByZXR1cm4gdmFsdWUgbWF5IG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpCi0gKiBpbiB0aGUgY2FzZSB3aGVyZSBhIHN1YnBvb2wgbWluaW11bSBzaXplIG11c3QgYmUgbWFpbnRhaW5lZC4KJiM0MzsvKioKJiM0MzsgKiBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyAtIFJlbGVhc2UgcGFnZXMgYmFjayB0byBhIHN1YnBvb2wKJiM0MzsgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKQomIzQzOyAqIEBkZWx0YTogbnVtYmVyIG9mIHBhZ2VzIHRvIGZyZWUgb3IgdW5yZXNlcnZlCiYjNDM7ICoKJiM0MzsgKiBDaGVjayBhbmQgdXBkYXRlIHN1YnBvb2wgcGFnZSB1c2FnZSBjb3VudHMgd2hlbiBmcmVlaW5nIG9yCiYjNDM7ICogdW5yZXNlcnZpbmcgQGRlbHRhIGh1Z2VwYWdlcy4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IFRha2VzIHNwb29sLSZndDtsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnFzYXZlKCkuIE1heSByZWxlYXNlCiYjNDM7ICogICAgICAgICAgYW5kIGZyZWUgQHNwb29sIGlmIGl0cyB1c2FnZSBjb3VudCBhbmQgcmVmZXJlbmNlcyByZWFjaAomIzQzOyAqICAgICAgICAgIHplcm8uCiYjNDM7ICogUmV0dXJuOiBOb24tbmVnYXRpdmUgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IHRoZSBzdWJwb29sIGNhbm5vdAomIzQzOyAqICAgICAgICAgYWJzb3JiLgogICovCiBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCiAJCQkJICAgICAgIGxvbmcgZGVsdGEpCkBAIC0yNTcsMTkgJiM0MzsyNjUsMjQgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzcG9vbC0mZ3Q7bG9jaywgZmxhZ3MpOwogCi0JaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xKQkJLyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi8KLQkJc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzIC09IGRlbHRhOwomIzQzOwlzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgLT0gZGVsdGE7CiAKIAkgLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi8KIAlpZiAoc3Bvb2wtJmd0O21pbl9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOyBzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgJmx0OyBzcG9vbC0mZ3Q7bWluX2hwYWdlcykgewotCQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0MzsgZGVsdGEgJmx0Oz0gc3Bvb2wtJmd0O21pbl9ocGFnZXMpCiYjNDM7CQkvKgomIzQzOwkJICogbGltaXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0CiYjNDM7CQkgKiBjYW4gYmUgcmVzdG9yZWQgdG8gdGhpcyBzdWJwb29sLgomIzQzOwkJICovCiYjNDM7CQlsb25nIGxpbWl0ID0gc3Bvb2wtJmd0O21pbl9ocGFnZXMgLSBzcG9vbC0mZ3Q7dXNlZF9ocGFnZXM7CiYjNDM7CiYjNDM7CQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0MzsgZGVsdGEgJmx0Oz0gbGltaXQpCiAJCQlyZXQgPSAwOwogCQllbHNlCi0JCQlyZXQgPSBzcG9vbC0mZ3Q7cnN2X2hwYWdlcyAmIzQzOyBkZWx0YSAtIHNwb29sLSZndDttaW5faHBhZ2VzOwomIzQzOwkJCXJldCA9IHNwb29sLSZndDtyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhIC0gbGltaXQ7CiAKIAkJc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0Mzs9IGRlbHRhOwotCQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJmd0OyBzcG9vbC0mZ3Q7bWluX2hwYWdlcykKLQkJCXNwb29sLSZndDtyc3ZfaHBhZ2VzID0gc3Bvb2wtJmd0O21pbl9ocGFnZXM7CiYjNDM7CQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJmd0OyBsaW1pdCkKJiM0MzsJCQlzcG9vbC0mZ3Q7cnN2X2hwYWdlcyA9IGxpbWl0OwogCX0KIAogCS8qCkBAIC0yOTQyLDcgJiM0MzsyOTU1LDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCXN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfdm1hKHZtYSk7CiAJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwotCWxvbmcgcmV0dmFsLCBnYmxfY2hnLCBnYmxfcmVzZXJ2ZTsKJiM0MzsJbG9uZyByZXR2YWwsIGdibF9yZXN2X2dldDsKIAltYXBfY2hnX3N0YXRlIG1hcF9jaGc7CiAJc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCBtcG9saTsKIAlnZnBfdCBnZnAgPSBodGxiX2FsbG9jX21hc2soaCk7CkBAIC0yOTgxLDggJiM0MzsyOTk0LDggQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCSAqIE9yIGlmIGl0IGNhbiBnZXQgb25lIGZyb20gdGhlIHBvb2wgcmVzZXJ2YXRpb24gZGlyZWN0bHkuCiAJICovCiAJaWYgKG1hcF9jaGcpIHsKLQkJZ2JsX2NoZyA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTsKLQkJaWYgKGdibF9jaGcgJmx0OyAwKSB7CiYjNDM7CQlnYmxfcmVzdl9nZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7CiYjNDM7CQlpZiAoZ2JsX3Jlc3ZfZ2V0ICZsdDsgMCkgewogCQkJcmV0ID0gLUVOT1NQQzsKIAkJCWdvdG8gb3V0X2VuZF9yZXNlcnZhdGlvbjsKIAkJfQpAQCAtMjk5MSw3ICYjNDM7MzAwNCw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJICogSWYgd2UgaGF2ZSB0aGUgdm1hIHJlc2VydmF0aW9uIHJlYWR5LCBubyBuZWVkIGZvciBleHRyYQogCQkgKiBnbG9iYWwgcmVzZXJ2YXRpb24uCiAJCSAqLwotCQlnYmxfY2hnID0gMDsKJiM0MzsJCWdibF9yZXN2X2dldCA9IDA7CiAJfQogCiAJLyoKQEAgLTMwMDIsMTAgJiM0MzszMDE1LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJYWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDsKIAogCS8qCi0JICogZ2JsX2NoZyA9PSAwIGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cyBmb3IgdGhpcwomIzQzOwkgKiBnYmxfcmVzdl9nZXQgPT0gMCBpbmRpY2F0ZXMgYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoaXMKIAkgKiBhbGxvY2F0aW9uLCBzbyB0cnkgdG8gdXNlIGl0LgogCSAqLwotCWlmIChnYmxfY2hnID09IDApCiYjNDM7CWlmIChnYmxfcmVzdl9nZXQgPT0gMCkKIAkJYWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19VU0VfR0xPQkFMX1JFU0VSVkFUSU9OUzsKIAogCS8qIFRha2VzIHJlZmVyZW5jZSBvbiBtcG9sLiAqLwpAQCAtMzA1OSwxMyAmIzQzOzMwNzIsMTAgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCXJldHVybiBmb2xpbzsKIAogb3V0X3N1YnBvb2xfcHV0OgotCS8qCi0JICogcHV0IHBhZ2UgdG8gc3VicG9vbCBpZmYgdGhlIHF1b3RhIG9mIHN1YnBvb2wmIzM5O3MgcnN2X2hwYWdlcyBpcyB1c2VkCi0JICogZHVyaW5nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLgotCSAqLwotCWlmIChtYXBfY2hnICZhbXA7JmFtcDsgIWdibF9jaGcpIHsKLQkJZ2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7Ci0JCWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTsKJiM0MzsJaWYgKG1hcF9jaGcpIHsKJiM0MzsJCWxvbmcgZ2JsX3Jlc3ZfcHV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpOwomIzQzOwomIzQzOwkJaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQpOwogCX0KIAogb3V0X2VuZF9yZXNlcnZhdGlvbjoKQEAgLTY2NjEsMTIgJiM0Mzs2NjcxLDE0IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpCiB7Ci0JbG9uZyBjaGcgPSAtMSwgYWRkID0gLTEsIHNwb29sX3Jlc3YsIGdibF9yZXN2OwomIzQzOwlsb25nIGNoZyA9IC0xLCBhZGQgPSAtMTsKIAlzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2lub2RlKGlub2RlKTsKIAlzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX2lub2RlKGlub2RlKTsKIAlzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwOwogCXN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZyA9IE5VTEw7Ci0JbG9uZyBnYmxfcmVzZXJ2ZSwgcmVnaW9uc19uZWVkZWQgPSAwOwomIzQzOwlsb25nIHJlZ2lvbnNfbmVlZGVkID0gMDsKJiM0MzsJbG9uZyBnYmxfcmVzdl9nZXQ7CiYjNDM7CWxvbmcgZ2JsX3Jlc3ZfcHV0OwogCWludCBlcnI7CiAKIAkvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KQEAgLTY3NDEsOSAmIzQzOzY3NTMsOSBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCSAqIHRoZSBzdWJwb29sIGhhcyBhIG1pbmltdW0gc2l6ZSwgdGhlcmUgbWF5IGJlIHNvbWUgZ2xvYmFsCiAJICogcmVzZXJ2YXRpb25zIGFscmVhZHkgaW4gcGxhY2UgKGdibF9yZXNlcnZlKS4KIAkgKi8KLQlnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpOwotCWlmIChnYmxfcmVzZXJ2ZSAmbHQ7IDApIHsKLQkJZXJyID0gZ2JsX3Jlc2VydmU7CiYjNDM7CWdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpOwomIzQzOwlpZiAoZ2JsX3Jlc3ZfZ2V0ICZsdDsgMCkgewomIzQzOwkJZXJyID0gZ2JsX3Jlc3ZfZ2V0OwogCQlnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXA7CiAJfQogCkBAIC02NzUxLDcgJiM0Mzs2NzYzLDcgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwKIAkgKiBDaGVjayBlbm91Z2ggaHVnZXBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSByZXNlcnZhdGlvbi4KIAkgKiBIYW5kIHRoZSBwYWdlcyBiYWNrIHRvIHRoZSBzdWJwb29sIGlmIHRoZXJlIGFyZSBub3QKIAkgKi8KLQllcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXNlcnZlKTsKJiM0MzsJZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQpOwogCWlmIChlcnIgJmx0OyAwKQogCQlnb3RvIG91dF9wdXRfcGFnZXM7CiAKQEAgLTY3NzAsNyAmIzQzOzY3ODIsNyBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQlhZGQgPSByZWdpb25fYWRkKHJlc3ZfbWFwLCBmcm9tLCB0bywgcmVnaW9uc19uZWVkZWQsIGgsIGhfY2cpOwogCiAJCWlmICh1bmxpa2VseShhZGQgJmx0OyAwKSkgewotCQkJaHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpOwomIzQzOwkJCWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXN2X2dldCk7CiAJCQllcnIgPSBhZGQ7CiAJCQlnb3RvIG91dF9wdXRfcGFnZXM7CiAJCX0gZWxzZSBpZiAodW5saWtlbHkoY2hnICZndDsgYWRkKSkgewpAQCAtNjgwNiwyNiAmIzQzOzY4MTgsMjEgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwKIAl9CiAJcmV0dXJuIGNoZzsKIAotb3V0X3B1dF9wYWdlczoKLQlzcG9vbF9yZXN2ID0gY2hnIC0gZ2JsX3Jlc2VydmU7Ci0JaWYgKHNwb29sX3Jlc3YpIHsKLQkJLyogcHV0IHN1YiBwb29sJiMzOTtzIHJlc2VydmF0aW9uIGJhY2ssIGNoZyAtIGdibF9yZXNlcnZlICovCi0JCWdibF9yZXN2ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHNwb29sX3Jlc3YpOwotCQkvKgotCQkgKiBzdWJwb29sJiMzOTtzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsCi0JCSAqIHJldHVybiB0byBoc3RhdGUuCi0JCSAqLwotCQlodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7Ci0JfQotCS8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqLwotCWlmIChnYmxfcmVzZXJ2ZSAmYW1wOyZhbXA7IHNwb29sKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7IG91dF9wdXRfcGFnZXM6CiYjNDM7CS8qCiYjNDM7CSAqIFJldHVybiBhbGwgdGhhdCB3YXMgcmVxdWVzdGVkIGZyb20gdGhlIHN1YnBvb2wsIGxldCBzdWJwb29sCiYjNDM7CSAqIHRlbGwgdXMgdGhlIG5ldyBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgbmVlZCB0byBiZQomIzQzOwkgKiByZXR1cm5lZCB0byB0aGUgZ2xvYmFsIHBvb2wuCiYjNDM7CSAqLwomIzQzOwlnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgY2hnKTsKJiM0MzsJLyoKJiM0MzsJICogVGhlcmUgbWF5IGJlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBudW1iZXIgb2YKJiM0MzsJICogcmVzZXJ2YXRpb25zIHRvIGNvbnN1bWUgYW5kIHRoZSBudW1iZXIgdG8gcmVzdG9yZSBub3cgaWYKJiM0MzsJICogdGhlcmUgYXJlIG11bHRpcGxlIHRocmVhZHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3VicG9vbCAtCiYjNDM7CSAqIHJlc3RvcmUgdGhlIGRpZmZlcmVuY2UuCiYjNDM7CSAqLwomIzQzOwlodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCAtIGdibF9yZXN2X3B1dCk7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzcG9vbC0mZ3Q7bG9jaywgZmxhZ3MpOwotCQlpZiAoc3Bvb2wtJmd0O21heF9ocGFnZXMgIT0gLTEpCi0JCQlzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgLT0gZ2JsX3Jlc2VydmU7Ci0JCXVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTsKLQl9CiBvdXRfdW5jaGFyZ2VfY2dyb3VwOgogCWh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSwKIAkJCQkJICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3ODA5CgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogNjUxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSHVnZXRsYmZzIFN1YnBvb2wgQWNjb3VudGluZyBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIHdpdGhpbiB0aGUgaHVnZXRsYmZzL2h1Z2V0bGIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJJiMzOTttIHNlZWluZyBjaGFuZ2VzIGFjcm9zcyBhIGZldyBrZXkgYXJlYXM6IHRoZSBkb2N1bWVudGF0aW9uLCB0aGUgaW5vZGUgaW1wbGVtZW50YXRpb24sIGFuZCB0aGUgY29yZSBpbmNsdWRlIGFuZCBtbSBmaWxlcy4gVGhhdCBtYWtlcyBtZSB0YWtlIGl0IHNlcmlvdXNseS4KCkZpcnN0LCBJJiMzOTtsbCB6ZXJvIGluIG9uIHRoZSBtb2RpZmllZCBmaWxlcy4gSSYjMzk7bSBmb2N1c2luZyBvbiBgbW0vaHVnZXRsYi5jYCwgYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCwgYW5kIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAgYXMgdGhleSBhcmUgdGhlIG1lYXQgb2YgdGhpcy4gVGhlIGRvY3VtZW50YXRpb24gdXBkYXRlcyBhcmUgaW1wb3J0YW50LCBidXQgdW5kZXJzdGFuZGluZyB0aGUgKmZ1bmN0aW9uYWxpdHkqIGNoYW5nZSBpcyBjcml0aWNhbC4KClJpZ2h0IGF3YXksIEkgc2VlIHRoaXMgcmV2b2x2ZXMgYXJvdW5kIHN1YnBvb2wgYWNjb3VudGluZy4gVGhhdCYjMzk7cyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUgZm9yIGh1Z2V0bGJmcy4gSXQgc2VlbXMgdGhlIHBhdGNoIGlzIGFsdGVyaW5nIHRoZSBsb2dpYyBmb3IgaG93IHdlIHRyYWNrIGFuZCBtYW5hZ2UgaHVnZXBhZ2VzIHdpdGhpbiB0aGVzZSBzdWJwb29scy4KClNwZWNpZmljYWxseSwgaGVyZSYjMzk7cyB3aGF0JiMzOTtzIGp1bXBpbmcgb3V0IGF0IG1lOgoKKiAgICoqYHN1YnBvb2xfaXNfZnJlZWAqKjogVGhpcyBpcyBpbnRlcmVzdGluZy4gVGhlIGNoZWNrIGlzIG5vdyBqdXN0IGB1c2VkX2hwYWdlcyA9PSAwYCwgYSBzaW1wbGlmaWNhdGlvbi4gVGhpcyBtYWtlcyBtZSBjb25zaWRlciBpZiB0aGVyZSBpcyBhIHVzZSBjYXNlIHRoYXQgY2F1c2VzIHRoaXMgY2hhbmdlLCBhbmQgd2hhdCB0aGUgZWZmZWN0IHdpbGwgYmUuCiogICAqKmBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AqKjogSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYWx3YXlzIGluY3JlbWVudGluZyBgdXNlZF9ocGFnZXNgIG5vdywgZXZlbiB3aGVuIGBtYXhfaHBhZ2VzYCBpcyAtMS4gVGhhdCBzdWdnZXN0cyBhIHBvc3NpYmxlIGNoYW5nZSBpbiBob3cgd2UgaGFuZGxlIHVuYm91bmRlZCBzdWJwb29scy4KKiAgICoqYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCoqOiBUaGUgZGVjcmVtZW50IGlzIGFsd2F5cyBoYXBwZW5pbmcsIGFuZCB0aGUgbWluaW11bSBzaXplIGFjY291bnRpbmcgbG9naWMgYXBwZWFycyB0byBiZSByZXdvcmtlZC4gVGhpcyBpcyBjcml0aWNhbCBmb3IgcmVzb3VyY2UgbWFuYWdlbWVudCBhbmQgY291bGQgaW50cm9kdWNlIHN1YnRsZSBiZWhhdmlvcmFsIGNoYW5nZXMgdGhhdCBtdXN0IGJlIGNhcmVmdWxseSBzY3J1dGluaXplZC4KKiAgICoqYGFsbG9jX2h1Z2V0bGJfZm9saW9gICZhbXA7IGBodWdldGxiX3Jlc2VydmVfcGFnZXNgKio6IEVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBhY2NvdW50aW5nIGFyZSBtb2RpZmllZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjaGFuZ2VzIHRvIGBodWdldGxiX2FjY3RfbWVtb3J5YCBhZmZlY3Qgb3ZlcmFsbCBtZW1vcnkgdXNhZ2UgdHJhY2tpbmcgYW5kIHBvdGVudGlhbCByZXNvdXJjZSBsZWFrcy4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UgYXJlIGhhbmRsaW5nIGVycm9ycyBjb3JyZWN0bHkgaGVyZSBhbmQgYXJlIG5vdCBpbnRyb2R1Y2luZyBuZXcgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uIHBvc3NpYmlsaXRpZXMuCiogICAqKmBodWdldGxiZnNfc3RhdGZzYCoqOiBUaGUgY2hlY2sgZm9yIGBtYXhfaHBhZ2VzID09IC0xYCBhbmQgc2V0dGluZyBgZnJlZV9wYWdlcyA9IC0xYCBtYWtlcyBzZW5zZSBmb3IgYW4gdW5ib3VuZGVkIHBvb2wuCgpNeSBuZXh0IHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY29kZSBpcyBpbiBhIGhvdCBwYXRoLiBBbmQgZnJvbSBteSBleHBlcmllbmNlLCB0aGUgYW5zd2VyIGlzICp5ZXMqLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGludm9sdmVkIGluIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIHRocm91Z2ggc3lzY2FsbHMgbGlrZSBgbW1hcGAgd2l0aCBgTUFQX0hVR0VUTEJgLCBtYW5hZ2luZyBodWdldGxiZnMgbW91bnRzLCBmaWxlIG9wZXJhdGlvbnMsIG1hZHZpc2UsIGZhbGxvY2F0ZSwgYW5kIGBzdGF0ZnNgLiBBbnkgc3VidGxlIGNoYW5nZSBpbiB0aGlzIGFyZWEgY2FuIGhhdmUgd2lkZXNwcmVhZCBjb25zZXF1ZW5jZXMgYW5kIG5lZWRzIHRob3JvdWdoIHJldmlldy4KCkkgbmVlZCB0byBjb25maXJtIHRoZSByZXF1aXJlZCBLY29uZmlnIG9wdGlvbnMgYXJlIGVuYWJsZWQgKGUuZy4sIGBDT05GSUdfSFVHRVRMQkZTYCwgYENPTkZJR19IVUdFVExCX1BBR0VgLCBldGMuKSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuIFRpbWUgdG8gYGdyZXBwZXJgIG9yIGNoZWNrIHRoZSBLY29uZmlnIGZpbGVzLiBUaGlzIGlzIGdvaW5nIHRvIGJlIG15IGltbWVkaWF0ZSBuZXh0IHN0ZXAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgSFVHRVRMQiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2h1Z2V0bGJmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNzQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipFeGFtaW5pbmcgS2NvbmZpZyBGaWxlcyBmb3IgSHVnZVRMQiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIEh1Z2VUTEIgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgZmlyc3QgcGxhY2VzIEkmIzM5O20gZ29pbmcgdG8gbG9vayBhcmUsIG5hdHVyYWxseSwgYGZzL2h1Z2V0bGJmcy9LY29uZmlnYCBhbmQgYG1tL0tjb25maWdgLiBJdOKAmXMgYSBwcmV0dHkgc3RhbmRhcmQgYXBwcm9hY2gsIHJlYWxseSwgYnV0IGl0JiMzOTtzIHRoZSByaWdodCBzdGFydGluZyBwb2ludC4gYGZzL2h1Z2V0bGJmc2AgKnNob3VsZCogY29udGFpbiB0aGUgb3B0aW9ucyBzcGVjaWZpYyB0byB0aGUgZmlsZXN5c3RlbSBpdHNlbGYsIHByb2JhYmx5IHJlbGF0ZWQgdG8gaXRzIG1vdW50IG9wdGlvbnMsIHF1b3RhIHN1cHBvcnQsIGFuZCBtYXliZSBzb21lIHBhZ2UgYWxsb2NhdGlvbiBkZXRhaWxzIHRpZWQgdG8gdGhlIFZGUyBsYXllci4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBzZXR0aW5ncyBsaWtlIHRoZSBkZWZhdWx0IGh1Z2VwYWdlIHNpemUsIHdoZXRoZXIgaHVnZXRsYmZzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIHBlcmhhcHMgc29tZSBmaW5lLWdyYWluZWQgY29udHJvbHMgb3ZlciBmZWF0dXJlcy4KCk9uIHRoZSBvdGhlciBoYW5kLCBgbW0vS2NvbmZpZ2AgaXMgd2hlcmUgSSYjMzk7ZCBhbnRpY2lwYXRlIHRoZSBtb3JlIGZ1bmRhbWVudGFsIG1lbW9yeSBtYW5hZ2VtZW50IGNvbmZpZ3VyYXRpb25zLiBJJiMzOTttIHRoaW5raW5nIHNldHRpbmdzIGRlYWxpbmcgd2l0aCB0aGUgTlVNQSBhZmZpbml0eSBvZiBodWdlcGFnZXMsIHRoZSBvdmVyYWxsIGFsbG9jYXRpb24gcG9saWNpZXMsIGFuZCB0aGUgbWF4aW11bSBzaXplcyBhdmFpbGFibGUuIEl0JiMzOTtzIGFsbW9zdCBjZXJ0YWluIHRoZXJl4oCZbGwgYmUgb3B0aW9ucyByZWxhdGVkIHRvIHRoZSBjb3JlIGtlcm5lbCBpbmZyYXN0cnVjdHVyZSBmb3IgbWFuYWdpbmcgaHVnZSBwYWdlcyBhbmQgd2hldGhlciBodWdlcGFnZSBzdXBwb3J0IGlzIGV2ZW4gY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJdOKAmXMgYWxzbyBwb3NzaWJsZSB0aGF0IHRoZXJlIGFyZSBzb21lIGNyb3NzLXJlZmVyZW5jZXMgYmV0d2VlbiB0aGUgdHdvIEtjb25maWcgZmlsZXM7IHRoZSBmaWxlc3lzdGVtLXNwZWNpZmljIG9wdGlvbnMgbWlnaHQgZGVwZW5kIG9uIG9yIGludGVyYWN0IHdpdGggdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMgZGVmaW5lZCBpbiBgbW0vS2NvbmZpZ2AuIFRpbWUgdG8gZGl2ZSBpbiBhbmQgc2VlIGV4YWN0bHkgaG93IHRoZXNlIG9wdGlvbnMgYXJlIHN0cnVjdHVyZWQgYW5kIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0LiBJJiMzOTttIGhvcGluZyB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSBrZXkgcGFyYW1ldGVycyB0aGF0IGNvbnRyb2wgSHVnZVRMQiBiZWhhdmlvciwgcGFydGljdWxhcmx5IHRob3NlIGltcGFjdGluZyBwZXJmb3JtYW5jZSBhbmQgcmVzb3VyY2UgdXRpbGl6YXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtIVUdFVExCJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvaHVnZXRsYmZzL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk1ODMKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLCB1c2luZyB0aGUgZmlyc3QgcGVyc29uOgoKKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwmIzM5O3MgQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKgoKQWxyaWdodCwgc28gSSYjMzk7bSBsb29raW5nIHRvIHR3ZWFrIHNvbWV0aGluZywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGl2ZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgY29uZmlndXJhdGlvbiBrbm9icyBhcmUgZGVmaW5lZCwgcmlnaHQ/IEdpdmVuIHRoZSBnZW5lcmFsIGFyZWEgSSYjMzk7bSB3b3JraW5nIGluLCBteSBpbnN0aW5jdCBpcyB0byBuYXJyb3cgdGhlIHNlYXJjaC4gSSYjMzk7bSB0aGlua2luZyBlaXRoZXIgdGhlIGBmcy9gIGRpcmVjdG9yeSwgd2hpY2ggY292ZXJzIGFsbCB0aGUgZmlsZXN5c3RlbXMsIG9yIHRoZSBgbW0vYCBkaXJlY3RvcnksIHdoaWNoIGVuY29tcGFzc2VzIGFsbCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0cy4gVGhvc2UgYXJlIHRoZSB0d28gbW9zdCBsaWtlbHkgcGxhY2VzIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJJiMzOTttIGludGVyZXN0ZWQgaW4sIGJhc2VkIG9uIHRoZSBwcm9ibGVtIEkgYW0gd29ya2luZyBvbi4gTm93LCBsZXQmIzM5O3Mgc2VlIHdoaWNoIGlzIHRoZSBjb3JyZWN0IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiZnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz0yNTA9bWVudWNvbmZpZyBIVUdFVExCRlNcbi0tXG5mcy9LY29uZmlnLTI1NS1cdGhlbHBcbmZzL0tjb25maWc6MjU2Olx0ICBodWdldGxiZnMgaXMgYSBmaWxlc3lzdGVtIGJhY2tpbmcgZm9yIEh1Z2VUTEIgcGFnZXMsIGJhc2VkIG9uXG5mcy9LY29uZmlnLTI1Ny1cdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxuLS1cbmZzL01ha2VmaWxlPTczPW9iai15XHRcdFx0XHQmIzQzOz0gcmFtZnMvXG5mcy9NYWtlZmlsZTo3NDpvYmotJChDT05GSUdfSFVHRVRMQkZTKVx0XHQmIzQzOz0gaHVnZXRsYmZzL1xuZnMvTWFrZWZpbGUtNzUtb2JqLSQoQ09ORklHX0NPREFfRlMpXHRcdCYjNDM7PSBjb2RhL1xuLS1cbmZzL2h1Z2V0bGJmcy9NYWtlZmlsZS01LVxuZnMvaHVnZXRsYmZzL01ha2VmaWxlOjY6b2JqLSQoQ09ORklHX0hVR0VUTEJGUykgJiM0Mzs9IGh1Z2V0bGJmcy5vXG5mcy9odWdldGxiZnMvTWFrZWZpbGUtNy1cbmZzL2h1Z2V0bGJmcy9NYWtlZmlsZTo4Omh1Z2V0bGJmcy1vYmpzIDo9IGlub2RlLm9cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy00Mi0jZGVmaW5lIENSRUFURV9UUkFDRV9QT0lOVFNcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQzOiNpbmNsdWRlIFx1MDAzY3RyYWNlL2V2ZW50cy9odWdldGxiZnMuaFx1MDAzZVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDQtXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NTpzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBodWdldGxiZnNfYW9wcztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQ2OnN0YXRpYyBjb25zdCBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnM7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NzpzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDg6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDktXG5mcy9odWdldGxiZnMvaW5vZGUuYzo1MDplbnVtIGh1Z2V0bGJmc19zaXplX3R5cGUgeyBOT19TSVpFLCBTSVpFX1NURCwgU0laRV9QRVJDRU5UIH07XG5mcy9odWdldGxiZnMvaW5vZGUuYy01MS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjUyOnN0cnVjdCBodWdldGxiZnNfZnNfY29udGV4dCB7XG5mcy9odWdldGxiZnMvaW5vZGUuYy01My1cdHN0cnVjdCBoc3RhdGVcdFx0KmhzdGF0ZTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy01OC1cdGxvbmdcdFx0XHRtaW5faHBhZ2VzO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6NTk6XHRlbnVtIGh1Z2V0bGJmc19zaXplX3R5cGUgbWF4X3ZhbF90eXBlO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6NjA6XHRlbnVtIGh1Z2V0bGJmc19zaXplX3R5cGUgbWluX3ZhbF90eXBlO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjEtXHRrdWlkX3RcdFx0XHR1aWQ7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9Nzg9c3RhdGljIGNvbnN0IHN0cnVjdCBmc19wYXJhbWV0ZXJfc3BlYyBodWdldGxiX2ZzX3BhcmFtZXRlcnNbXSA9IHtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy05OC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk5OnN0YXRpYyBpbnQgaHVnZXRsYmZzX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDAte1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0Ni1cdCAqIGZvciBTSE1fSFVHRVRMQiwgdGhlIHBhZ2VzIGFyZSByZXNlcnZlZCBpbiB0aGUgc2htZ2V0KCkgY2FsbCBzbyBza2lwXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDc6XHQgKiByZXNlcnZpbmcgaGVyZS4gTm90ZTogb25seSBmb3IgU0hNIGh1Z2V0bGJmcyBmaWxlLCB0aGUgaW5vZGVcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0OC1cdCAqIGZsYWcgU19QUklWQVRFIGlzIHNldC5cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xOTY9c3RhdGljIHNpemVfdCBhZGp1c3RfcmFuZ2VfaHdwb2lzb24oc3RydWN0IGZvbGlvICpmb2xpbywgc2l6ZV90IG9mZnNldCxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0yMTktICovXG5mcy9odWdldGxiZnMvaW5vZGUuYzoyMjA6c3RhdGljIHNzaXplX3QgaHVnZXRsYmZzX3JlYWRfaXRlcihzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqdG8pXG5mcy9odWdldGxiZnMvaW5vZGUuYy0yMjEte1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTI5Ny1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjI5ODpzdGF0aWMgaW50IGh1Z2V0bGJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0yOTktXHRcdFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMzA1LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MzA2OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3dyaXRlX2VuZChjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0zMDctXHRcdFx0ICAgICAgIHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTU1Mj1zdGF0aWMgdm9pZCByZW1vdmVfaW5vZGVfaHVnZXBhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBsc3RhcnQsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTkyLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NTkzOnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19ldmljdF9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTk0LXtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy01OTYtXG5mcy9odWdldGxiZnMvaW5vZGUuYzo1OTc6XHR0cmFjZV9odWdldGxiZnNfZXZpY3RfaW5vZGUoaW5vZGUpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTk4LVx0cmVtb3ZlX2lub2RlX2h1Z2VwYWdlcyhpbm9kZSwgMCwgTExPTkdfTUFYKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz02MDc9c3RhdGljIHZvaWQgaHVnZXRsYl92bXRydW5jYXRlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQpXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjIzLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NjI0OnN0YXRpYyB2b2lkIGh1Z2V0bGJmc196ZXJvX3BhcnRpYWxfcGFnZShzdHJ1Y3QgaHN0YXRlICpoLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjI1LVx0XHRcdFx0XHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy02NDYtXG5mcy9odWdldGxiZnMvaW5vZGUuYzo2NDc6c3RhdGljIGxvbmcgaHVnZXRsYmZzX3B1bmNoX2hvbGUoc3RydWN0IGlub2RlICppbm9kZSwgbG9mZl90IG9mZnNldCwgbG9mZl90IGxlbilcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY0OC17XG5mcy9odWdldGxiZnMvaW5vZGUuYzo2NDk6XHRzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKmluZm8gPSBIVUdFVExCRlNfSShpbm9kZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy02NTAtXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVx1MDAzZWlfbWFwcGluZztcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy02NzItXHRpZiAob2Zmc2V0IFx1MDAzYyBob2xlX3N0YXJ0KVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NjczOlx0XHRodWdldGxiZnNfemVyb19wYXJ0aWFsX3BhZ2UoaCwgbWFwcGluZyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY3NC1cdFx0XHRcdG9mZnNldCwgbWluKG9mZnNldCAmIzQzOyBsZW4sIGhvbGVfc3RhcnQpKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy02ODUtXHRpZiAoKG9mZnNldCAmIzQzOyBsZW4pIFx1MDAzZSBob2xlX2VuZCBcdTAwMjZcdTAwMjYgKG9mZnNldCAmIzQzOyBsZW4pIFx1MDAzZSBob2xlX3N0YXJ0KVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6Njg2Olx0XHRodWdldGxiZnNfemVyb19wYXJ0aWFsX3BhZ2UoaCwgbWFwcGluZyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY4Ny1cdFx0XHRcdGhvbGVfZW5kLCBvZmZzZXQgJiM0MzsgbGVuKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy02OTktXG5mcy9odWdldGxiZnMvaW5vZGUuYzo3MDA6c3RhdGljIGxvbmcgaHVnZXRsYmZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXG5mcy9odWdldGxiZnMvaW5vZGUuYy03MDEtXHRcdFx0XHRsb2ZmX3QgbGVuKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTcwMy1cdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGZpbGUpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6NzA0Olx0c3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvICppbmZvID0gSFVHRVRMQkZTX0koaW5vZGUpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzA1LVx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cdTAwM2VpX21hcHBpbmc7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzE4LVx0aWYgKG1vZGUgXHUwMDI2IEZBTExPQ19GTF9QVU5DSF9IT0xFKSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo3MTk6XHRcdGVycm9yID0gaHVnZXRsYmZzX3B1bmNoX2hvbGUoaW5vZGUsIG9mZnNldCwgbGVuKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTcyMC1cdFx0Z290byBvdXRfbm9sb2NrO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgyNi1vdXRfbm9sb2NrOlxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODI3Olx0dHJhY2VfaHVnZXRsYmZzX2ZhbGxvY2F0ZShpbm9kZSwgbW9kZSwgb2Zmc2V0LCBsZW4sIGVycm9yKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgyOC1cdHJldHVybiBlcnJvcjtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MzAtXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4MzE6c3RhdGljIGludCBodWdldGxiZnNfc2V0YXR0cihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgzMi1cdFx0XHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgzNy1cdHVuc2lnbmVkIGludCBpYV92YWxpZCA9IGF0dHItXHUwMDNlaWFfdmFsaWQ7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo4Mzg6XHRzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKmluZm8gPSBIVUdFVExCRlNfSShpbm9kZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy04MzktXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODQzLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODQ0Olx0dHJhY2VfaHVnZXRsYmZzX3NldGF0dHIoaW5vZGUsIGRlbnRyeSwgYXR0cik7XG5mcy9odWdldGxiZnMvaW5vZGUuYy04NDUtXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODYzLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODY0OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODY1Olx0XHRcdFx0XHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eClcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg2Ni17XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODc1LVx0XHRzaW1wbGVfaW5vZGVfaW5pdF90cyhpbm9kZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo4NzY6XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XG5mcy9odWdldGxiZnMvaW5vZGUuYy04NzctXHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2c2ltcGxlX2Rpcl9vcGVyYXRpb25zO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg5MS0gKi9cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjg5MjpzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGh1Z2V0bGJmc19pX21tYXBfcndzZW1fa2V5O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtODkzLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODk0OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfaW5vZGUoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg5NS1cdFx0XHRcdFx0c3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTEzLVx0aWYgKGlub2RlKSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo5MTQ6XHRcdHN0cnVjdCBodWdldGxiZnNfaW5vZGVfaW5mbyAqaW5mbyA9IEhVR0VUTEJGU19JKGlub2RlKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkxNS1cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy05MTgtXHRcdGxvY2tkZXBfc2V0X2NsYXNzKFx1MDAyNmlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VpX21tYXBfcndzZW0sXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5MTk6XHRcdFx0XHRcdTAwMjZodWdldGxiZnNfaV9tbWFwX3J3c2VtX2tleSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo5MjA6XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcyA9IFx1MDAyNmh1Z2V0bGJmc19hb3BzO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTIxLVx0XHRzaW1wbGVfaW5vZGVfaW5pdF90cyhpbm9kZSk7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTI4LVx0XHRjYXNlIFNfSUZSRUc6XG5mcy9odWdldGxiZnMvaW5vZGUuYzo5Mjk6XHRcdFx0aW5vZGUtXHUwMDNlaV9vcCA9IFx1MDAyNmh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTMwOlx0XHRcdGlub2RlLVx1MDAzZWlfZm9wID0gXHUwMDI2aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkzMS1cdFx0XHRicmVhaztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkzMi1cdFx0Y2FzZSBTX0lGRElSOlxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTMzOlx0XHRcdGlub2RlLVx1MDAzZWlfb3AgPSBcdTAwMjZodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XG5mcy9odWdldGxiZnMvaW5vZGUuYy05MzQtXHRcdFx0aW5vZGUtXHUwMDNlaV9mb3AgPSBcdTAwMjZzaW1wbGVfZGlyX29wZXJhdGlvbnM7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTQ0LVx0XHRsb2NrZGVwX2Fubm90YXRlX2lub2RlX211dGV4X2tleShpbm9kZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYzo5NDU6XHRcdHRyYWNlX2h1Z2V0bGJmc19hbGxvY19pbm9kZShpbm9kZSwgZGlyLCBtb2RlKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk0Ni1cdH0gZWxzZSB7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTU2LSAqL1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTU3OnN0YXRpYyBpbnQgaHVnZXRsYmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk1OC1cdFx0XHQgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHVtb2RlX3QgbW9kZSwgZGV2X3QgZGV2KVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk2MS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk2MjpcdGlub2RlID0gaHVnZXRsYmZzX2dldF9pbm9kZShkaXItXHUwMDNlaV9zYiwgaWRtYXAsIGRpciwgbW9kZSwgZGV2KTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk2My1cdGlmICghaW5vZGUpXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTY5LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTcwOnN0YXRpYyBzdHJ1Y3QgZGVudHJ5ICpodWdldGxiZnNfbWtkaXIoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsIHN0cnVjdCBpbm9kZSAqZGlyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTcxLVx0XHRcdFx0ICAgICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUpXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NzIte1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTczOlx0aW50IHJldHZhbCA9IGh1Z2V0bGJmc19ta25vZChpZG1hcCwgZGlyLCBkZW50cnksXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NzQtXHRcdFx0XHQgICAgIG1vZGUsIDApO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk3OS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk4MDpzdGF0aWMgaW50IGh1Z2V0bGJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9odWdldGxiZnMvaW5vZGUuYy05ODEtXHRcdFx0ICAgIHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnksXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTgzLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk4NDpcdHJldHVybiBodWdldGxiZnNfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LCBtb2RlIHwgU19JRlJFRywgMCk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy05ODUtfVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTg2LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTg3OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3RtcGZpbGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9odWdldGxiZnMvaW5vZGUuYy05ODgtXHRcdFx0ICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZpbGUgKmZpbGUsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTkyLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTkzOlx0aW5vZGUgPSBodWdldGxiZnNfZ2V0X2lub2RlKGRpci1cdTAwM2VpX3NiLCBpZG1hcCwgZGlyLCBtb2RlIHwgU19JRlJFRywgMCk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy05OTQtXHRpZiAoIWlub2RlKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMDAtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDAxOnN0YXRpYyBpbnQgaHVnZXRsYmZzX3N5bWxpbmsoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDAyLVx0XHRcdCAgICAgc3RydWN0IGlub2RlICpkaXIsIHN0cnVjdCBkZW50cnkgKmRlbnRyeSxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDA4LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTAwOTpcdGlub2RlID0gaHVnZXRsYmZzX2dldF9pbm9kZShkaXItXHUwMDNlaV9zYiwgaWRtYXAsIGRpciwgbW9kZSwgMCk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDEwLVx0aWYgKGlub2RlKSB7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTAyMy0jaWZkZWYgQ09ORklHX01JR1JBVElPTlxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTAyNDpzdGF0aWMgaW50IGh1Z2V0bGJmc19taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTAyNS1cdFx0XHRcdHN0cnVjdCBmb2xpbyAqZHN0LCBzdHJ1Y3QgZm9saW8gKnNyYyxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDQ0LSNlbHNlXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDQ1OiNkZWZpbmUgaHVnZXRsYmZzX21pZ3JhdGVfZm9saW8gTlVMTFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA0Ni0jZW5kaWZcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNDctXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDQ4OnN0YXRpYyBpbnQgaHVnZXRsYmZzX2Vycm9yX3JlbW92ZV9mb2xpbyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNDktXHRcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNTYtICovXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDU3OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3Nob3dfb3B0aW9ucyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBkZW50cnkgKnJvb3QpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDU4LXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNTk6XHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbyA9IEhVR0VUTEJGU19TQihyb290LVx1MDAzZWRfc2IpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA2MC1cdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHNiaW5mby1cdTAwM2VzcG9vbDtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDkzLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTA5NDpzdGF0aWMgaW50IGh1Z2V0bGJmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA5NS17XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDk2Olx0c3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8gPSBIVUdFVExCRlNfU0IoZGVudHJ5LVx1MDAzZWRfc2IpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA5Ny1cdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfaW5vZGUoZF9pbm9kZShkZW50cnkpKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTI4LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTEyOTpzdGF0aWMgdm9pZCBodWdldGxiZnNfcHV0X3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTMwLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExMzE6XHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaSA9IEhVR0VUTEJGU19TQihzYik7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTMyLVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExNDEtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTQyOnN0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJmc19kZWNfZnJlZV9pbm9kZXMoc3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8pXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTQzLXtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTU2LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE1NzpzdGF0aWMgdm9pZCBodWdldGxiZnNfaW5jX2ZyZWVfaW5vZGVzKHN0cnVjdCBodWdldGxiZnNfc2JfaW5mbyAqc2JpbmZvKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE1OC17XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE2Ni1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNjc6c3RhdGljIHN0cnVjdCBrbWVtX2NhY2hlICpodWdldGxiZnNfaW5vZGVfY2FjaGVwO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE2OC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNjk6c3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2FsbG9jX2lub2RlKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTcwLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzE6XHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbyA9IEhVR0VUTEJGU19TQihzYik7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTcyOlx0c3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvICpwO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE3My1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzQ6XHRpZiAodW5saWtlbHkoIWh1Z2V0bGJmc19kZWNfZnJlZV9pbm9kZXMoc2JpbmZvKSkpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTc1LVx0XHRyZXR1cm4gTlVMTDtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzY6XHRwID0gYWxsb2NfaW5vZGVfc2Ioc2IsIGh1Z2V0bGJmc19pbm9kZV9jYWNoZXAsIEdGUF9LRVJORUwpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE3Ny1cdGlmICh1bmxpa2VseSghcCkpIHtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzg6XHRcdGh1Z2V0bGJmc19pbmNfZnJlZV9pbm9kZXMoc2JpbmZvKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExNzktXHRcdHJldHVybiBOVUxMO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExODMtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTg0OnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19mcmVlX2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTg1LXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExODY6XHR0cmFjZV9odWdldGxiZnNfZnJlZV9pbm9kZShpbm9kZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTg3Olx0a21lbV9jYWNoZV9mcmVlKGh1Z2V0bGJmc19pbm9kZV9jYWNoZXAsIEhVR0VUTEJGU19JKGlub2RlKSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTg4LX1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExODktXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTkwOnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTkxLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExOTI6XHRodWdldGxiZnNfaW5jX2ZyZWVfaW5vZGVzKEhVR0VUTEJGU19TQihpbm9kZS1cdTAwM2VpX3NiKSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTkzLX1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExOTQtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTk1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19hb3BzID0ge1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE5NjpcdC53cml0ZV9iZWdpblx0PSBodWdldGxiZnNfd3JpdGVfYmVnaW4sXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTk3Olx0LndyaXRlX2VuZFx0PSBodWdldGxiZnNfd3JpdGVfZW5kLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE5OC1cdC5kaXJ0eV9mb2xpb1x0PSBub29wX2RpcnR5X2ZvbGlvLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE5OTpcdC5taWdyYXRlX2ZvbGlvICA9IGh1Z2V0bGJmc19taWdyYXRlX2ZvbGlvLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIwMDpcdC5lcnJvcl9yZW1vdmVfZm9saW9cdD0gaHVnZXRsYmZzX2Vycm9yX3JlbW92ZV9mb2xpbyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMDEtfTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMjA0PXN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjA1LXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMDY6XHRzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKmVpID0gZm9vO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIwNy1cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjEwLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIxMTpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zID0ge1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIxMjpcdC5yZWFkX2l0ZXJcdFx0PSBodWdldGxiZnNfcmVhZF9pdGVyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIxMzpcdC5tbWFwXHRcdFx0PSBodWdldGxiZnNfZmlsZV9tbWFwLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIxNC1cdC5mc3luY1x0XHRcdD0gbm9vcF9mc3luYyxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjE2LVx0Lmxsc2Vla1x0XHRcdD0gZGVmYXVsdF9sbHNlZWssXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjE3Olx0LmZhbGxvY2F0ZVx0XHQ9IGh1Z2V0bGJmc19mYWxsb2NhdGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjE4LVx0LmZvcF9mbGFnc1x0XHQ9IEZPUF9IVUdFX1BBR0VTLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMjAtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjIxOnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnMgPSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjIyOlx0LmNyZWF0ZVx0XHQ9IGh1Z2V0bGJmc19jcmVhdGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjIzLVx0Lmxvb2t1cFx0XHQ9IHNpbXBsZV9sb29rdXAsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIyNS1cdC51bmxpbmtcdFx0PSBzaW1wbGVfdW5saW5rLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIyNjpcdC5zeW1saW5rXHQ9IGh1Z2V0bGJmc19zeW1saW5rLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIyNzpcdC5ta2Rpclx0XHQ9IGh1Z2V0bGJmc19ta2RpcixcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMjgtXHQucm1kaXJcdFx0PSBzaW1wbGVfcm1kaXIsXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjI5Olx0Lm1rbm9kXHRcdD0gaHVnZXRsYmZzX21rbm9kLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzMC1cdC5yZW5hbWVcdFx0PSBzaW1wbGVfcmVuYW1lLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIzMTpcdC5zZXRhdHRyXHQ9IGh1Z2V0bGJmc19zZXRhdHRyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIzMjpcdC50bXBmaWxlXHQ9IGh1Z2V0bGJmc190bXBmaWxlLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzMy19O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzNC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMzU6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zID0ge1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIzNjpcdC5zZXRhdHRyXHQ9IGh1Z2V0bGJmc19zZXRhdHRyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzNy19O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzOC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMzk6c3RhdGljIGNvbnN0IHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zIGh1Z2V0bGJmc19vcHMgPSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQwOlx0LmFsbG9jX2lub2RlICAgID0gaHVnZXRsYmZzX2FsbG9jX2lub2RlLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0MTpcdC5mcmVlX2lub2RlICAgICA9IGh1Z2V0bGJmc19mcmVlX2lub2RlLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0MjpcdC5kZXN0cm95X2lub2RlICA9IGh1Z2V0bGJmc19kZXN0cm95X2lub2RlLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0MzpcdC5ldmljdF9pbm9kZVx0PSBodWdldGxiZnNfZXZpY3RfaW5vZGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQ0Olx0LnN0YXRmc1x0XHQ9IGh1Z2V0bGJmc19zdGF0ZnMsXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQ1Olx0LnB1dF9zdXBlclx0PSBodWdldGxiZnNfcHV0X3N1cGVyLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0NjpcdC5zaG93X29wdGlvbnNcdD0gaHVnZXRsYmZzX3Nob3dfb3B0aW9ucyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyNDctfTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMjU0PXN0YXRpYyBsb25nXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjU1Omh1Z2V0bGJmc19zaXplX3RvX2hwYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZV9vcHQsXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjU2Olx0XHRcdCBlbnVtIGh1Z2V0bGJmc19zaXplX3R5cGUgdmFsX3R5cGUpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjU3LXtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjczLSAqL1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI3NDpzdGF0aWMgaW50IGh1Z2V0bGJmc19wYXJzZV9wYXJhbShzdHJ1Y3QgZnNfY29udGV4dCAqZmMsIHN0cnVjdCBmc19wYXJhbWV0ZXIgKnBhcmFtKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTI3NS17XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjc2Olx0c3RydWN0IGh1Z2V0bGJmc19mc19jb250ZXh0ICpjdHggPSBmYy1cdTAwM2Vmc19wcml2YXRlO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTI3Ny1cdHN0cnVjdCBmc19wYXJzZV9yZXN1bHQgcmVzdWx0O1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNDgtICovXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzQ5OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3ZhbGlkYXRlKHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNTAte1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTM1MTpcdHN0cnVjdCBodWdldGxiZnNfZnNfY29udGV4dCAqY3R4ID0gZmMtXHUwMDNlZnNfcHJpdmF0ZTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNTItXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTM1Ni1cdCAqL1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTM1NzpcdGN0eC1cdTAwM2VtYXhfaHBhZ2VzID0gaHVnZXRsYmZzX3NpemVfdG9faHBhZ2VzKGN0eC1cdTAwM2Voc3RhdGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzU4LVx0XHRcdFx0XHRcdCAgIGN0eC1cdTAwM2VtYXhfc2l6ZV9vcHQsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzU5LVx0XHRcdFx0XHRcdCAgIGN0eC1cdTAwM2VtYXhfdmFsX3R5cGUpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTM2MDpcdGN0eC1cdTAwM2VtaW5faHBhZ2VzID0gaHVnZXRsYmZzX3NpemVfdG9faHBhZ2VzKGN0eC1cdTAwM2Voc3RhdGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzYxLVx0XHRcdFx0XHRcdCAgIGN0eC1cdTAwM2VtaW5fc2l6ZV9vcHQsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTM3Nj1zdGF0aWMgaW50XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzc3Omh1Z2V0bGJmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNzgte1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTM3OTpcdHN0cnVjdCBodWdldGxiZnNfZnNfY29udGV4dCAqY3R4ID0gZmMtXHUwMDNlZnNfcHJpdmF0ZTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEzODA6XHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzODEtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzgyOlx0c2JpbmZvID0ga21hbGxvY19vYmooc3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzODMtXHRpZiAoIXNiaW5mbylcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDEwLVx0c2ItXHUwMDNlc19tYWdpYyA9IEhVR0VUTEJGU19NQUdJQztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0MTE6XHRzYi1cdTAwM2VzX29wID0gXHUwMDI2aHVnZXRsYmZzX29wcztcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MTItXHRzYi1cdTAwM2VzX2RfZmxhZ3MgPSBEQ0FDSEVfRE9OVENBQ0hFO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MTUtXHQvKlxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQxNjpcdCAqIER1ZSB0byB0aGUgc3BlY2lhbCBhbmQgbGltaXRlZCBmdW5jdGlvbmFsaXR5IG9mIGh1Z2V0bGJmcywgaXQgZG9lc1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQxNy1cdCAqIG5vdCB3b3JrIHdlbGwgYXMgYSBzdGFja2luZyBmaWxlc3lzdGVtLlxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MTktXHRzYi1cdTAwM2VzX3N0YWNrX2RlcHRoID0gRklMRVNZU1RFTV9NQVhfU1RBQ0tfREVQVEg7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDIwOlx0c2ItXHUwMDNlc19yb290ID0gZF9tYWtlX3Jvb3QoaHVnZXRsYmZzX2dldF9yb290KHNiLCBjdHgpKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MjEtXHRpZiAoIXNiLVx1MDAzZXNfcm9vdClcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDI5LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQzMDpzdGF0aWMgaW50IGh1Z2V0bGJmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDMxLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0MzI6XHRpbnQgZXJyID0gaHVnZXRsYmZzX3ZhbGlkYXRlKGZjKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MzMtXHRpZiAoZXJyKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzNC1cdFx0cmV0dXJuIGVycjtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0MzU6XHRyZXR1cm4gZ2V0X3RyZWVfbm9kZXYoZmMsIGh1Z2V0bGJmc19maWxsX3N1cGVyKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MzYtfVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzNy1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0Mzg6c3RhdGljIHZvaWQgaHVnZXRsYmZzX2ZzX2NvbnRleHRfZnJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDM5LXtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDQyLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ0MzpzdGF0aWMgY29uc3Qgc3RydWN0IGZzX2NvbnRleHRfb3BlcmF0aW9ucyBodWdldGxiZnNfZnNfY29udGV4dF9vcHMgPSB7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQ0Olx0LmZyZWVcdFx0PSBodWdldGxiZnNfZnNfY29udGV4dF9mcmVlLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ0NTpcdC5wYXJzZV9wYXJhbVx0PSBodWdldGxiZnNfcGFyc2VfcGFyYW0sXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQ2Olx0LmdldF90cmVlXHQ9IGh1Z2V0bGJmc19nZXRfdHJlZSxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NDctfTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NDgtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQ5OnN0YXRpYyBpbnQgaHVnZXRsYmZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDUwLXtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0NTE6XHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eDtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NTItXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDUzOlx0Y3R4ID0ga3phbGxvY19vYmooc3RydWN0IGh1Z2V0bGJmc19mc19jb250ZXh0KTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NTQtXHRpZiAoIWN0eClcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDY2LVx0ZmMtXHUwMDNlZnNfcHJpdmF0ZSA9IGN0eDtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0Njc6XHRmYy1cdTAwM2VvcHNcdD0gXHUwMDI2aHVnZXRsYmZzX2ZzX2NvbnRleHRfb3BzO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ2OC1cdHJldHVybiAwO1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NzAtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDcxOnN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBodWdldGxiZnNfZnNfdHlwZSA9IHtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0NzI6XHQubmFtZVx0XHRcdD0gXCYjMzQ7aHVnZXRsYmZzXCYjMzQ7LFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3MzpcdC5pbml0X2ZzX2NvbnRleHRcdD0gaHVnZXRsYmZzX2luaXRfZnNfY29udGV4dCxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NzQtXHQucGFyYW1ldGVyc1x0XHQ9IGh1Z2V0bGJfZnNfcGFyYW1ldGVycyxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDc4LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3OTpzdGF0aWMgc3RydWN0IHZmc21vdW50ICpodWdldGxiZnNfdmZzbW91bnRbSFVHRV9NQVhfSFNUQVRFXTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0ODAtXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTUwMT1zdHJ1Y3QgZmlsZSAqaHVnZXRsYl9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLFxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MTMtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTE0Olx0bW50ID0gaHVnZXRsYmZzX3Zmc21vdW50W2hzdGF0ZV9pZHhdO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTUxNS1cdGlmICghbW50KVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MjktXHRmaWxlID0gRVJSX1BUUigtRU5PU1BDKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1MzA6XHQvKiBodWdldGxiZnNfdmZzbW91bnRbXSBtb3VudHMgZG8gbm90IHVzZSBpZG1hcHBlZCBtb3VudHMuICAqL1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTUzMTpcdGlub2RlID0gaHVnZXRsYmZzX2dldF9pbm9kZShtbnQtXHUwMDNlbW50X3NiLCBcdTAwMjZub3BfbW50X2lkbWFwLCBOVUxMLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTUzMi1cdFx0XHRcdCAgICBTX0lGUkVHIHwgU19JUldYVUdPLCAwKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTQ2LVx0XHRmaWxlID0gYWxsb2NfZmlsZV9wc2V1ZG8oaW5vZGUsIG1udCwgbmFtZSwgT19SRFdSLFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU0NzpcdFx0XHRcdFx0XHUwMDI2aHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTQ4LVx0aWYgKCFJU19FUlIoZmlsZSkpXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU1NS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1NTY6c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqX19pbml0IG1vdW50X29uZV9odWdldGxiZnMoc3RydWN0IGhzdGF0ZSAqaClcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NTcte1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NjAtXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTYxOlx0ZmMgPSBmc19jb250ZXh0X2Zvcl9tb3VudChcdTAwMjZodWdldGxiZnNfZnNfdHlwZSwgU0JfS0VSTk1PVU5UKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NjItXHRpZiAoSVNfRVJSKGZjKSkge1xuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NjQtXHR9IGVsc2Uge1xuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU2NTpcdFx0c3RydWN0IGh1Z2V0bGJmc19mc19jb250ZXh0ICpjdHggPSBmYy1cdTAwM2Vmc19wcml2YXRlO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU2Ni1cdFx0Y3R4LVx1MDAzZWhzdGF0ZSA9IGg7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU3MC1cdGlmIChJU19FUlIobW50KSlcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1NzE6XHRcdHByX2VycihcJiMzNDtDYW5ub3QgbW91bnQgaW50ZXJuYWwgaHVnZXRsYmZzIGZvciBwYWdlIHNpemUgJWx1S1wmIzM0OyxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NzItXHRcdCAgICAgICBodWdlX3BhZ2Vfc2l6ZShoKSAvIFNaXzFLKTtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTc1LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU3NjpzdGF0aWMgaW50IF9faW5pdCBpbml0X2h1Z2V0bGJmc19mcyh2b2lkKVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU3Ny17XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU4OC1cdGVycm9yID0gLUVOT01FTTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1ODk6XHRodWdldGxiZnNfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoXCYjMzQ7aHVnZXRsYmZzX2lub2RlX2NhY2hlXCYjMzQ7LFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU5MDpcdFx0XHRcdFx0c2l6ZW9mKHN0cnVjdCBodWdldGxiZnNfaW5vZGVfaW5mbyksXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTkxLVx0XHRcdFx0XHQwLCBTTEFCX0FDQ09VTlQsIGluaXRfb25jZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTkyOlx0aWYgKGh1Z2V0bGJmc19pbm9kZV9jYWNoZXAgPT0gTlVMTClcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1OTMtXHRcdGdvdG8gb3V0O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU5NC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1OTU6XHRlcnJvciA9IHJlZ2lzdGVyX2ZpbGVzeXN0ZW0oXHUwMDI2aHVnZXRsYmZzX2ZzX3R5cGUpO1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU5Ni1cdGlmIChlcnJvcilcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTk5LVx0LyogZGVmYXVsdCBoc3RhdGUgbW91bnQgaXMgcmVxdWlyZWQgKi9cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MDA6XHRtbnQgPSBtb3VudF9vbmVfaHVnZXRsYmZzKFx1MDAyNmRlZmF1bHRfaHN0YXRlKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MDEtXHRpZiAoSVNfRVJSKG1udCkpIHtcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjA0LVx0fVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTYwNTpcdGh1Z2V0bGJmc192ZnNtb3VudFtkZWZhdWx0X2hzdGF0ZV9pZHhdID0gbW50O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYwNi1cbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjE0LVxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTYxNTpcdFx0bW50ID0gbW91bnRfb25lX2h1Z2V0bGJmcyhoKTtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MTYtXHRcdGlmIChJU19FUlIobW50KSlcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MTc6XHRcdFx0aHVnZXRsYmZzX3Zmc21vdW50W2ldID0gTlVMTDtcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MTgtXHRcdGVsc2VcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MTk6XHRcdFx0aHVnZXRsYmZzX3Zmc21vdW50W2ldID0gbW50O1xuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYyMC1cdFx0aSYjNDM7JiM0Mzs7XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYyNS0gb3V0X3VucmVnOlxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTYyNjpcdCh2b2lkKXVucmVnaXN0ZXJfZmlsZXN5c3RlbShcdTAwMjZodWdldGxiZnNfZnNfdHlwZSk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjI3LSBvdXRfZnJlZTpcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2Mjg6XHRrbWVtX2NhY2hlX2Rlc3Ryb3koaHVnZXRsYmZzX2lub2RlX2NhY2hlcCk7XG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjI5LSBvdXQ6XG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYzMS19XG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNjMyOmZzX2luaXRjYWxsKGluaXRfaHVnZXRsYmZzX2ZzKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMjM2CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBIdWdldGxiZnMgQ29uZmlndXJhdGlvbioqCgpSaWdodCwgbGV0JiMzOTtzIGRpdmUgc3RyYWlnaHQgaW4uIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzIHRvIHplcm8gaW4gb24gYGZzL0tjb25maWdgLiBUaGF0JiMzOTtzIHdoZXJlIGFsbCB0aGUgaW50ZXJlc3Rpbmcga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhcmUgZGVmaW5lZCwgYW5kIHNwZWNpZmljYWxseSwgSSYjMzk7bSBiZXR0aW5nIHRoZSBjcnVjaWFsIG9uZXMgZm9yIEh1Z2V0bGJmcyBhbmQgaHVnZSBwYWdlcyB3aWxsIGJlIGluIHRoZXJlLiBJJiMzOTttIHRoaW5raW5nIGFyb3VuZCBsaW5lIDI1MCwgZ2l2ZSBvciB0YWtlIGEgZmV3IGxpbmVzIOKAkyB0aGF0JiMzOTtzIG9mdGVuIHdoZXJlIHJlbGF0ZWQgb3B0aW9ucyB0ZW5kIHRvIGNsdXN0ZXIuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgcHJlY2lzZSBjb25maWcgc3ltYm9scywgc28gSSB3YW50IHRvIHBpbnBvaW50IHRoZSBkZWZpbml0aW9ucyBvZiBgSFVHRVRMQkZTYCBhbmQgYEhVR0VUTEJfUEFHRWAuIEtub3dpbmcgdGhlIGV4YWN0IG9wdGlvbnMgaXMga2V5LiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGVpciBkZXBlbmRlbmNpZXMsIGRlZmF1bHRzLCBhbmQgYW55IGFzc29jaWF0ZWQgaGVscCB0ZXh0LiBJIHdhbnQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIHJlcXVpcmVkIGZvciB0aGVtIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlci4gVGhpcyBzaG91bGQgY2xhcmlmeSB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBmb3IgSHVnZXRsYmZzIHdpdGhpbiB0aGUga2VybmVsLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2ZzL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI0NTpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuIDI0NjpcdFxuIDI0NzpcdGNvbmZpZyBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuIDI0ODpcdFx0ZGVmX2Jvb2wgblxuIDI0OTpcdFxuIDI1MDpcdG1lbnVjb25maWcgSFVHRVRMQkZTXG4gMjUxOlx0XHRib29sIFwmIzM0O0h1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFwmIzM0O1xuIDI1MjpcdFx0ZGVwZW5kcyBvbiBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU1xuIDI1MzpcdFx0c2VsZWN0IE1FTUZEX0NSRUFURVxuIDI1NDpcdFx0c2VsZWN0IFBBREFUQSBpZiBTTVBcbiAyNTU6XHRcdGhlbHBcbiAyNTY6XHRcdCAgaHVnZXRsYmZzIGlzIGEgZmlsZXN5c3RlbSBiYWNraW5nIGZvciBIdWdlVExCIHBhZ2VzLCBiYXNlZCBvblxuIDI1NzpcdFx0ICByYW1mcy4gRm9yIGFyY2hpdGVjdHVyZXMgdGhhdCBzdXBwb3J0IGl0LCBzYXkgWSBoZXJlIGFuZCByZWFkXG4gMjU4Olx0XHQgIFx1MDAzY2ZpbGU6RG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9odWdldGxicGFnZS5yc3RcdTAwM2UgZm9yIGRldGFpbHMuXG4gMjU5Olx0XG4gMjYwOlx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gMjYxOlx0XG4gMjYyOlx0aWYgSFVHRVRMQkZTXG4gMjYzOlx0Y29uZmlnIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQX0RFRkFVTFRfT05cbiAyNjQ6XHRcdGJvb2wgXCYjMzQ7SHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblwmIzM0O1xuIDI2NTpcdFx0ZGVmYXVsdCBuXG4gMjY2Olx0XHRkZXBlbmRzIG9uIEhVR0VUTEJfUEFHRV9PUFRJTUlaRV9WTUVNTUFQXG4gMjY3Olx0XHRoZWxwXG4gMjY4Olx0XHQgIFRoZSBIdWdlVExCIFZtZW1tYXAgT3B0aW1pemF0aW9uIChIVk8pIGRlZmF1bHRzIHRvIG9mZi4gU2F5IFkgaGVyZSB0b1xuIDI2OTpcdFx0ICBlbmFibGUgSFZPIGJ5IGRlZmF1bHQuIEl0IGNhbiBiZSBkaXNhYmxlZCB2aWEgaHVnZXRsYl9mcmVlX3ZtZW1tYXA9b2ZmXG4gMjcwOlx0XHQgIChib290IGNvbW1hbmQgbGluZSkgb3IgaHVnZXRsYl9vcHRpbWl6ZV92bWVtbWFwIChzeXNjdGwpLlxuIDI3MTpcdGVuZGlmICMgSFVHRVRMQkZTXG4gMjcyOlx0XG4gMjczOlx0Y29uZmlnIEhVR0VUTEJfUEFHRVxuIDI3NDpcdFx0ZGVmX2Jvb2wgSFVHRVRMQkZTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwOTk2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMjI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wbGljYXRpb25zIG9mIENPTkZJR19IVUdFVExCRlMqKgoKT2theSwgc28gYENPTkZJR19IVUdFVExCRlNgIGlzIGVuYWJsZWQsIHdoaWNoLCBhcyBJIGtub3csIGF1dG9tYXRpY2FsbHkgbWVhbnMgYEhVR0VUTEJfUEFHRWAgaXMgYWxzbyBlbmFibGVkLiBMZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMgb2YgdGhpcyBwYXRjaC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGFjdCBvZiB0aGVzZSBjaGFuZ2VzLgoKRmlyc3QsIEkgbmVlZCB0byBzZWUgd2hpY2ggc3ltYm9scyBhcmUgYmVpbmcgdG91Y2hlZC4gSSBzZWUgY2hhbmdlcyB0byBgaHVnZXRsYmZzX3N0YXRmc2AgaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYC4gVGhhdCYjMzk7cyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgZmlsZSBzeXN0ZW0gc3RhdGlzdGljcyB3aXRoIGh1Z2V0bGIgcGFnZXMuIFRoZW4gdGhlcmUgYXJlIHNvbWUgc3RhdGljIGZ1bmN0aW9ucyBpbiBgbW0vaHVnZXRsYi5jYDogYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYCwgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCwgYW5kIGBzdWJwb29sX2lzX2ZyZWVgLiBUaGUgdXNlIG9mIHN0YXRpYyBpcyBzaWduaWZpY2FudCwgYXMgaXQgbGltaXRzIHRoZWlyIHZpc2liaWxpdHkgYW5kIHVzYWdlLiBMYXN0bHksIEkgbm90aWNlIHR3byBub24tc3RhdGljIGZ1bmN0aW9ucywgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYWxzbyBpbiBgbW0vaHVnZXRsYi5jYC4KCk5vdywgSSYjMzk7bSBwYXJ0aWN1bGFybHkgaW50ZXJlc3RlZCBpbiB0aG9zZSBzdWJwb29sIGZ1bmN0aW9ucy4gSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgIGFuZCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgIGFyZSBpbmRlZWQgc3RhdGljLCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIEkgbmVlZCB0byB0cmFjZSB0aGVpciBjYWxsZXJzLiBVbmRlcnN0YW5kaW5nIHdoZXJlIHRoZXNlIHN1YnBvb2wgZnVuY3Rpb25zIGFyZSB1c2VkIGlzIGNyaXRpY2FsIGZvciBncmFzcGluZyB0aGUgc2NvcGUgYW5kIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhlc2UgY2hhbmdlcyBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgb2YgaHVnZXRsYiBwYWdlcy4gVGhpcyBhbmFseXNpcyB3aWxsIGhlbHAgbWUgYXNzZXNzIHRoZSBwYXRjaCYjMzk7cyBwb3RlbnRpYWwgaW1wYWN0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdlcGFnZV9zdWJwb29sXyhnZXR8cHV0KV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MTc5PXZvaWQgaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxuLS1cbm1tL2h1Z2V0bGIuYy0xOTItLyoqXG5tbS9odWdldGxiLmM6MTkzOiAqIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzIC0gR2V0IHBhZ2VzIGZyb20gYSBzdWJwb29sXG5tbS9odWdldGxiLmMtMTk0LSAqIEBzcG9vbDogcG9pbnRlciB0byBzdWJwb29sIHN0cnVjdHVyZSAobWF5IGJlIE5VTEwpXG4tLVxubW0vaHVnZXRsYi5jLTIwNC0gKi9cbm1tL2h1Z2V0bGIuYzoyMDU6c3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxubW0vaHVnZXRsYi5jLTIwNi1cdFx0XHRcdCAgICAgIGxvbmcgZGVsdGEpXG4tLVxubW0vaHVnZXRsYi5jLTI0My0vKipcbm1tL2h1Z2V0bGIuYzoyNDQ6ICogaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMgLSBSZWxlYXNlIHBhZ2VzIGJhY2sgdG8gYSBzdWJwb29sXG5tbS9odWdldGxiLmMtMjQ1LSAqIEBzcG9vbDogcG9pbnRlciB0byBzdWJwb29sIHN0cnVjdHVyZSAobWF5IGJlIE5VTEwpXG4tLVxubW0vaHVnZXRsYi5jLTI1Ni0gKi9cbm1tL2h1Z2V0bGIuYzoyNTc6c3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxubW0vaHVnZXRsYi5jLTI1OC1cdFx0XHRcdCAgICAgICBsb25nIGRlbHRhKVxuLS1cbm1tL2h1Z2V0bGIuYz05NzU9dm9pZCBodWdldGxiX2ZpeF9yZXNlcnZlX2NvdW50cyhzdHJ1Y3QgaW5vZGUgKmlub2RlKVxuLS1cbm1tL2h1Z2V0bGIuYy05ODAtXG5tbS9odWdldGxiLmM6OTgxOlx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTtcbm1tL2h1Z2V0bGIuYy05ODItXHRpZiAocnN2X2FkanVzdCBcdTAwM2UgMCkge1xuLS1cbm1tL2h1Z2V0bGIuYz0xNjg2PXZvaWQgZnJlZV9odWdlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vaHVnZXRsYi5jLTE3MTEtXHQgKiB3b3VsZCBoYXZlIGJlZW4gYSBwYWdlIHJlc2VydmVkIGluIHRoZSBzdWJwb29sIGJlZm9yZSBhbGxvY2F0aW9uXG5tbS9odWdldGxiLmM6MTcxMjpcdCAqIHZpYSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcygpLiAgU2luY2Ugd2UgYXJlICYjMzk7cmVzdG9yaW5nJiMzOTsgdGhlXG5tbS9odWdldGxiLmM6MTcxMzpcdCAqIHJlc2VydmF0aW9uLCBkbyBub3QgY2FsbCBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcygpIGFzIHRoaXMgd2lsbFxubW0vaHVnZXRsYi5jLTE3MTQtXHQgKiByZW1vdmUgdGhlIHJlc2VydmVkIHBhZ2UgZnJvbSB0aGUgc3VicG9vbC5cbi0tXG5tbS9odWdldGxiLmMtMTcyMi1cdFx0ICovXG5tbS9odWdldGxiLmM6MTcyMzpcdFx0aWYgKGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKSA9PSAwKVxubW0vaHVnZXRsYi5jLTE3MjQtXHRcdFx0cmVzdG9yZV9yZXNlcnZlID0gdHJ1ZTtcbi0tXG5tbS9odWdldGxiLmM9Mjk1Mj1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZXRsYi5jLTI5OTYtXHRpZiAobWFwX2NoZykge1xubW0vaHVnZXRsYi5jOjI5OTc6XHRcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTtcbm1tL2h1Z2V0bGIuYy0yOTk4LVx0XHRpZiAoZ2JsX3Jlc3ZfZ2V0IFx1MDAzYyAwKSB7XG4tLVxubW0vaHVnZXRsYi5jLTMwNjItXG5tbS9odWdldGxiLmM6MzA2MzpcdFx0XHRyc3ZfYWRqdXN0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xubW0vaHVnZXRsYi5jLTMwNjQtXHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtcnN2X2FkanVzdCk7XG4tLVxubW0vaHVnZXRsYi5jLTMwNzUtXHRpZiAobWFwX2NoZykge1xubW0vaHVnZXRsYi5jOjMwNzY6XHRcdGxvbmcgZ2JsX3Jlc3ZfcHV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xubW0vaHVnZXRsYi5jLTMwNzctXG4tLVxubW0vaHVnZXRsYi5jPTQ3MTk9c3RhdGljIHZvaWQgaHVnZXRsYl92bV9vcF9jbG9zZShzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdldGxiLmMtNDc0Mi1cdFx0ICovXG5tbS9odWdldGxiLmM6NDc0MzpcdFx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgcmVzZXJ2ZSk7XG5tbS9odWdldGxiLmMtNDc0NC1cdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xuLS1cbm1tL2h1Z2V0bGIuYz02NjY5PWxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4tLVxubW0vaHVnZXRsYi5jLTY3NTUtXHQgKi9cbm1tL2h1Z2V0bGIuYzo2NzU2Olx0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIGNoZyk7XG5tbS9odWdldGxiLmMtNjc1Ny1cdGlmIChnYmxfcmVzdl9nZXQgXHUwMDNjIDApIHtcbi0tXG5tbS9odWdldGxiLmMtNjgwNS1cbm1tL2h1Z2V0bGIuYzo2ODA2Olx0XHRcdHJzdl9hZGp1c3QgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCxcbm1tL2h1Z2V0bGIuYy02ODA3LVx0XHRcdFx0XHRcdFx0XHRjaGcgLSBhZGQpO1xuLS1cbm1tL2h1Z2V0bGIuYy02ODI2LVx0ICovXG5tbS9odWdldGxiLmM6NjgyNzpcdGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBjaGcpO1xubW0vaHVnZXRsYi5jLTY4MjgtXHQvKlxuLS1cbm1tL2h1Z2V0bGIuYz02ODU0PWxvbmcgaHVnZXRsYl91bnJlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwgbG9uZyBzdGFydCwgbG9uZyBlbmQsXG4tLVxubW0vaHVnZXRsYi5jLTY4ODgtXHQgKi9cbm1tL2h1Z2V0bGIuYzo2ODg5Olx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgKGNoZyAtIGZyZWVkKSk7XG5tbS9odWdldGxiLmMtNjg5MC1cdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMwNTEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEh1Z2UgUGFnZSBTdWJwb29sIEZ1bmN0aW9uYWxpdHkqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGZvY3VzIG9uIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AgYW5kIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AuIEV2ZW4gdGhvdWdoIHRoZXkmIzM5O3JlIHN0YXRpYyB3aXRoaW4gYG1tL2h1Z2V0bGIuY2AsIGFuZCBJJiMzOTttIGF3YXJlIHN0YXRpYyBmdW5jdGlvbnMgdGhhdCBhcmVuJiMzOTt0IGlubGluZWQgKmRvKiBoYXZlIHN5bWJvbHMgaW4gdm1saW51eCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJiMzOTttIGZvbGxvd2luZyBiZXN0IHByYWN0aWNlcy4gVGltZSB0byByZWZyZXNoIG9uIHRoZSBndWlkZWxpbmVzLi4uIHJpZ2h0LCB0aGUgcmVsZXZhbnQgc2VjdGlvbiBpczogJiMzNDtUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFMmIzM0OyBhbmQgJiMzNDtIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTJiMzNDsuCgpTbywgSSYjMzk7bSBub3RpbmcgdGhhdCBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgIGFuZCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgIGFyZSBzdGF0aWMgKm5vbi1pbmxpbmUqIGZ1bmN0aW9ucyBsb2NhdGVkIGluIGEgYC5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgYG1tL2h1Z2V0bGIuY2AuIFRoYXQmIzM5O3MgaW1wb3J0YW50LiBJdCBtZWFucyB0aGV5JiMzOTtsbCBzaG93IHVwIGFzIHN5bWJvbHMuCgpOb3csIHRvIHNhdGlzZnkgdGhlIGd1aWRlbGluZXMsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgbm9uLXN0YXRpYywgZXhwb3J0ZWQsIG9yIGNhbGxlciBmdW5jdGlvbnMuIEFoLCBoZXJlIHdlIGdvOiBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBmdW5jdGlvbnMgdGhhdCBhcmUgZWl0aGVyIHRoZSBlbnRyeSBwb2ludHMgdG8gdGhlIHN1YnN5c3RlbSBvciBhcmUgbW9kaWZpZWQgZHVlIHRvIHRoZSBjaGFuZ2UgaW4gdGhlIHN0YXRpYyBmdW5jdGlvbnMuIFRoZSBmdW5jdGlvbnMgYXJlOgpgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBgaHVnZXRsYmZzX3N0YXRmc2AsIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AsIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AsIGBodWdlcGFnZV9wdXRfc3VicG9vbGAsIGBodWdldGxiX3VucmVzZXJ2ZV9wYWdlc2AuCgpJJiMzOTttIG5vdyByZWFkeSB0byBsb29rIGZvciB0aGUgb3RoZXIgZnVuY3Rpb25zIGludm9sdmVkIGluIHRoaXMgYXJlYSwgc3BlY2lmaWNhbGx5IHRoZSBvbmVzIHRoYXQgY2FsbCBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbGAgLyBgc3VicG9vbF9pc19mcmVlYCwgd2hpY2ggd2lsbCBnaXZlIG1lIGEgbW9yZSBjb21wbGV0ZSBwaWN0dXJlIG9mIHRoZSBpbnRlcmFjdGlvbnMgaW4gdGhpcyBhcmVhLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdWJwb29sX2lzX2ZyZWUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTEyNz1zdGF0aWMgc3RydWN0IHJlc3ZfbWFwICp2bWFfcmVzdl9tYXAoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpO1xubW0vaHVnZXRsYi5jLTEyOC1cbm1tL2h1Z2V0bGIuYzoxMjk6c3RhdGljIGlubGluZSBib29sIHN1YnBvb2xfaXNfZnJlZShzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXG5tbS9odWdldGxiLmMtMTMwLXtcbi0tXG5tbS9odWdldGxiLmM9MTM3PXN0YXRpYyBpbmxpbmUgdm9pZCB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbi0tXG5tbS9odWdldGxiLmMtMTM5LXtcbm1tL2h1Z2V0bGIuYzoxNDA6XHRib29sIGZyZWVfc3VicG9vbCA9IHN1YnBvb2xfaXNfZnJlZShzcG9vbCk7XG5tbS9odWdldGxiLmMtMTQxLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDAzNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246CgoqKkludmVzdGlnYXRpbmcgdGhlIENhbGxlcnMgb2YgYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2xgKioKCk9rYXksIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCB0aGUgY29udGV4dCBzdXJyb3VuZGluZyB0aGUgYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2xgIGZ1bmN0aW9uLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgdXNhZ2UuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYXJlIGFjdHVhbGx5ICpjYWxsaW5nKiB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24uIEl0JiMzOTtzIGNydWNpYWwgYmVjYXVzZSB0aGUgZnVuY3Rpb24mIzM5O3MgbmFtZSBzdWdnZXN0cyBpdCBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggZWl0aGVyIHVubG9ja2luZyBvciByZWxlYXNpbmcgYSBzdWJwb29sLCB3aGljaCBpcyBhIHZlcnkgc3BlY2lmaWMgdHlwZSBvZiBkYXRhIHN0cnVjdHVyZSwgcHJlc3VtYWJseSwgcmVsYXRlZCB0byByZXNvdXJjZSBtYW5hZ2VtZW50IG9yIGNvbmN1cnJlbmN5IGNvbnRyb2wuIFVuZGVyc3RhbmRpbmcgd2hlcmUgaXQmIzM5O3MgYmVpbmcgaW52b2tlZCB3aWxsIHJldmVhbCBpdHMgcHVycG9zZSBhbmQsIHBlcmhhcHMgbW9yZSBpbXBvcnRhbnRseSwgdGhlIGNyaXRpY2FsIHBhdGhzIG9mIGV4ZWN1dGlvbiB0aGF0IGRlcGVuZCBvbiBpdHMgY29ycmVjdCBvcGVyYXRpb24uIEkgbmVlZCB0byBiZSBhYmxlIHRvIGRldGVybWluZSB0aGUgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGNhbGwsIGFuZCB3aGV0aGVyIHRoZSBmdW5jdGlvbiBpcyB1c2VkIGluIHNldmVyYWwgZGlmZmVyZW50IHBsYWNlcyBvciBvbmx5IGEgaGFuZGZ1bC4gVGhpcyB3aWxsIGluZm9ybSBteSBpbnZlc3RpZ2F0aW9uIHNpZ25pZmljYW50bHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VubG9ja19vcl9yZWxlYXNlX3N1YnBvb2wmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTEyOT1zdGF0aWMgaW5saW5lIGJvb2wgc3VicG9vbF9pc19mcmVlKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbi0tXG5tbS9odWdldGxiLmMtMTM2LVxubW0vaHVnZXRsYi5jOjEzNzpzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG5tbS9odWdldGxiLmMtMTM4LVx0XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzKVxuLS1cbm1tL2h1Z2V0bGIuYz0xNzk9dm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXG4tLVxubW0vaHVnZXRsYi5jLTE4OC1cdHNwb29sLVx1MDAzZWNvdW50LS07XG5tbS9odWdldGxiLmM6MTg5Olx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xubW0vaHVnZXRsYi5jLTE5MC19XG4tLVxubW0vaHVnZXRsYi5jPTI1Nz1zdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4tLVxubW0vaHVnZXRsYi5jLTI5MS1cdCAqL1xubW0vaHVnZXRsYi5jOjI5MjpcdHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTtcbm1tL2h1Z2V0bGIuYy0yOTMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NTkyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMzUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBIdWdlVExCIFBhZ2UgUmVzZXJ2YXRpb25zKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhpcyBgaHVnZXRsYmAgc2l0dWF0aW9uLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdW5kZXJzdGFuZGluZyBob3cgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AgaXMgYmVpbmcgdXNlZC4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgdGhlIGNhbGwgc3RhY2s7IGVzc2VudGlhbGx5LCB3aGVyZSBhcmUgdGhlIHBvaW50cyBpbiB0aGUgY29kZSB0aGF0IGFjdHVhbGx5IGludm9rZSB0aGlzIGZ1bmN0aW9uPyBUaGF0JiMzOTtzIHRoZSBjcml0aWNhbCBmaXJzdCBzdGVwLiBOZXh0LCBJJiMzOTtsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGF0IGluZm9ybWF0aW9uIHdpdGggdGhlIGJyb2FkZXIgdXNlIGNhc2VzIG9mIHRoZSBodWdldGxiZnMgc3Vic3lzdGVtIGluIGdlbmVyYWwuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLiBUaGlzIHdpbGwgbGlrZWx5IGludm9sdmUgc29tZSBncmVwIHdvcmsgYW5kIGZvbGxvd2luZyBjYWxsIGdyYXBocy4gS25vd2luZyB0aGlzLCBJIGNhbiBiZWdpbiB0byBncmFzcCB3aGF0IHRoZSBrZXJuZWwgaXMgZG9pbmcgd2l0aCB0aGVzZSBwYWdlcywgdW5kZXJzdGFuZCBhbnkgcG9zc2libGUgY29udGVudGlvbiBpc3N1ZXMgYW5kIGFkZHJlc3MgdGhlIHJvb3Qgb2YgYW55IHJlbGF0ZWQgcGVyZm9ybWFuY2UgcHJvYmxlbXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9odWdldGxiZnMvaW5vZGUuYz05OT1zdGF0aWMgaW50IGh1Z2V0bGJmc19maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1Mi1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1MzpcdGlmIChodWdldGxiX3Jlc2VydmVfcGFnZXMoaW5vZGUsXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTQtXHRcdFx0XHR2bWEtXHUwMDNldm1fcGdvZmYgXHUwMDNlXHUwMDNlIGh1Z2VfcGFnZV9vcmRlcihoKSxcbi0tXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xNDg4PXN0YXRpYyBpbnQgZ2V0X2hzdGF0ZV9pZHgoaW50IHBhZ2Vfc2l6ZV9sb2cpXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ5OC0gKiBOb3RlIHRoYXQgc2l6ZSBzaG91bGQgYmUgYWxpZ25lZCB0byBwcm9wZXIgaHVnZXBhZ2Ugc2l6ZSBpbiBjYWxsZXIgc2lkZSxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0OTk6ICogb3RoZXJ3aXNlIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyByZXNlcnZlcyBvbmUgbGVzcyBodWdlcGFnZXMgdGhhbiBpbnRlbmRlZC5cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MDAtICovXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xNTAxPXN0cnVjdCBmaWxlICpodWdldGxiX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsXG4tLVxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU0MC1cbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1NDE6XHRpZiAoaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKGlub2RlLCAwLFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU0Mi1cdFx0XHRzaXplIFx1MDAzZVx1MDAzZSBodWdlX3BhZ2Vfc2hpZnQoaHN0YXRlX2lub2RlKGlub2RlKSksIE5VTEwsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1MTk2CgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqRGl2aW5nIGludG8gSHVnZVRMQiBSZXNlcnZhdGlvbioqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGlzIHNxdWFyZWx5IGZvY3VzZWQgb24gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2Agd2l0aGluIHRoZSBgbW0vYCBkaXJlY3RvcnkuIFRoYXQgZnVuY3Rpb24gaXMgdGhlIGxpbmNocGluIGZvciB1bmRlcnN0YW5kaW5nIGhvdyB3ZSBjYXJ2ZSBvdXQgYW5kIG1hbmFnZSB0aG9zZSBwcmVjaW91cyBIdWdlVExCIHBhZ2VzLCBhbmQgaXQmIzM5O3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSBob3cgdGhlIHJlc2VydmF0aW9uIGxvZ2ljIGlzIGltcGxlbWVudGVkIGhlcmUuIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGFsbG9jYXRpb24gcG9saWN5IGl0IGVtcGxveXMsIHBvdGVudGlhbCBlZGdlIGNhc2VzIGFyb3VuZCBmcmFnbWVudGF0aW9uLCBhbmQgZXNwZWNpYWxseSBob3cgaXQgaW50ZXJhY3RzIHdpdGggTlVNQSBub2RlIGNvbnN0cmFpbnRzIChpZiBpdCBkb2VzKS4gQW55IG9idmlvdXMgZmxhd3Mgb3IgYXJlYXMgdGhhdCBjb3VsZCBiZW5lZml0IGZyb20gcGVyZm9ybWFuY2UgdHVuaW5nIGNvbWUgdG8gbWluZC4gSSYjMzk7bSBkaWdnaW5nIGRlZXBlciBpbnRvIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgSHVnZVRMQiBpbmZyYXN0cnVjdHVyZeKAlHRoZSBtYXBwaW5nLCB0aGUgZmF1bHQgaGFuZGxpbmcsIGFuZCwgb2YgY291cnNlLCBkZWFsbG9jYXRpb24uIEVzc2VudGlhbGx5LCBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBxdWljayBtZW50YWwgbWFwIG9mIHRoZSByZXNlcnZhdGlvbiBwcm9jZXNzIHRvIGV2YWx1YXRlIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdldGxiX3Jlc2VydmVfcGFnZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jPTI5NTI9c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy0zMDUzLVx0XHQgKiB2bWFfbmVlZHNfcmVzZXJ2YXRpb24gYW5kIHZtYV9jb21taXRfcmVzZXJ2YXRpb24uXG5tbS9odWdldGxiLmM6MzA1NDpcdFx0ICogVGhpcyBpbmRpY2F0ZXMgYSByYWNlIHdpdGggaHVnZXRsYl9yZXNlcnZlX3BhZ2VzLlxubW0vaHVnZXRsYi5jLTMwNTUtXHRcdCAqIEFkanVzdCBmb3IgdGhlIHN1YnBvb2wgY291bnQgaW5jcmVtZW50ZWQgYWJvdmUgQU5EXG5tbS9odWdldGxiLmM6MzA1NjpcdFx0ICogaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzIGZvciB0aGUgc2FtZSBwYWdlLlx0QWxzbyxcbm1tL2h1Z2V0bGIuYzozMDU3Olx0XHQgKiB0aGUgcmVzZXJ2YXRpb24gY291bnQgYWRkZWQgaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzXG5tbS9odWdldGxiLmMtMzA1OC1cdFx0ICogbm8gbG9uZ2VyIGFwcGxpZXMuXG4tLVxubW0vaHVnZXRsYi5jPTY0OTM9bG9uZyBodWdldGxiX2NoYW5nZV9wcm90ZWN0aW9uKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2V0bGIuYy02NjY4LVxubW0vaHVnZXRsYi5jOjY2Njk6bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbm1tL2h1Z2V0bGIuYy02NjcwLVx0XHRsb25nIGZyb20sIGxvbmcgdG8sXG4tLVxubW0vaHVnZXRsYi5jLTY3MTEtXHRcdC8qXG5tbS9odWdldGxiLmM6NjcxMjpcdFx0ICogcmVzdl9tYXAgY2FuIG5vdCBiZSBOVUxMIGFzIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyBpcyBvbmx5XG5tbS9odWdldGxiLmMtNjcxMy1cdFx0ICogY2FsbGVkIGZvciBpbm9kZXMgZm9yIHdoaWNoIHJlc3ZfbWFwcyB3ZXJlIGNyZWF0ZWQgKHNlZVxuLS1cbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxuLS1cbm1tL21lbWZkLmMtODktXG5tbS9tZW1mZC5jOjkwOlx0XHRucl9yZXN2ID0gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKGlub2RlLCBpZHgsIGlkeCAmIzQzOyAxLCBOVUxMLCBFTVBUWV9WTUFfRkxBR1MpO1xubW0vbWVtZmQuYy05MS1cdFx0aWYgKG5yX3Jlc3YgXHUwMDNjIDApXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1OTYyCgkJCQkJCQlvdXRwdXQ6IDI5CgkJCQkJCQl0aG91Z2h0czogMTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyBgYWxsb2NfaHVnZXRsYl9mb2xpb2A6CgoqKkRlY29uc3RydWN0aW5nIGBhbGxvY19odWdldGxiX2ZvbGlvYCoqCgpBbHJpZ2h0LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIGBhbGxvY19odWdldGxiX2ZvbGlvYC4gR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgbGFuZHNjYXBlLCB0aGlzIGZ1bmN0aW9uIGlzIG9idmlvdXNseSBhIGNyaXRpY2FsIHBpZWNlLiBJdCYjMzk7cyB0aGUgZ2F0ZWtlZXBlciBmb3IgSHVnZVRMQiBmb2xpbyBhbGxvY2F0aW9uLCBhbmQgdGhlcmVmb3JlIGRpcmVjdGx5IGltcGFjdHMgdGhlIHBlcmZvcm1hbmNlIG9mIGFwcGxpY2F0aW9ucyB0aGF0IGxldmVyYWdlIGh1Z2UgcGFnZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoaXMgb24gYW4gaW50aW1hdGUgbGV2ZWwgdG8gb3B0aW1pemUgdGhlIGNvZGUgSSB3b3JrIHdpdGguCgpNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgb3JpZ2luIGFuZCB1c2FnZS4gV2hhdCBjYWxscyB0aGlzIGZ1bmN0aW9uPyBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb250ZXh0cz8gSXMgaXQgY2FsbGVkIGZyb20gYSBjcml0aWNhbCBwYXRoPyBEb2VzIGl0IGhhbmRsZSBhbnkgbG9ja2luZywgb3IgYXNzdW1lIGl0JiMzOTtzIHByb3RlY3RlZCBhdCBhIGhpZ2hlciBsZXZlbD8gVGhlc2UgYXJlIHRoZSBmaXJzdCBxdWVzdGlvbnMgSSB3b3VsZCBoYXZlIHRvIGFuc3dlciB0byBmaWd1cmUgb3V0IHdoZXJlIGFuZCBob3cgdG8gdHdlYWsgaXQuCgpJJiMzOTtkIGFsc28gbmVlZCB0byBzY3J1dGluaXplIGl0cyBpbnRlcm5hbCBsb2dpYy4gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBIdWdlVExCIGluZnJhc3RydWN0dXJlPyBEb2VzIGl0IHV0aWxpemUgYW55IGludGVybmFsIGRhdGEgc3RydWN0dXJlcz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGxpa2UgY29udGVudGlvbiBvbiBwYXJ0aWN1bGFyIHJlc291cmNlcyBvciBvdmVybHkgY29tcGxleCBhbGdvcml0aG1zPyBJJiMzOTtkIGxvb2sgZm9yIGFyZWFzIHdoZXJlIG9wdGltaXphdGlvbiBtaWdodCBiZSBwb3NzaWJsZSwgbGlrZSBwcmUtY2FsY3VsYXRpbmcgdmFsdWVzLCBvciB1c2luZyBtb3JlIGVmZmljaWVudCBhbGxvY2F0aW9uIHN0cmF0ZWdpZXMuCgpBbHNvLCBJJiMzOTtkIHdhbnQgdG8gZXhhbWluZSB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHJlY292ZXJ5IG1lY2hhbmlzbXMuIFdoYXQgaGFwcGVucyBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscz8gRG9lcyBpdCBkZWdyYWRlIGdyYWNlZnVsbHk/IEFyZSB0aGVyZSByZXRyeSBtZWNoYW5pc21zPyBIb3cgYXJlIGVycm9ycyByZXBvcnRlZCwgYW5kIGhvdyBhcmUgdGhleSBwcm9wYWdhdGVkIHVwIHRoZSBjYWxsIHN0YWNrPyBUaGlzIHBhcnQgaXMgY3J1Y2lhbCBmb3IgcmVsaWFiaWxpdHkuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGV0aGVyIGFueSBmYWlsdXJlIG1vZGVzIGNvdWxkIGJlY29tZSBhbiBpc3N1ZSBsYXRlciBvbi4KCkZpbmFsbHksIEkmIzM5O2QgY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIG1lbW9yeSBmcmFnbWVudGF0aW9uIGlzc3Vlcy4gQXJlIHJlc291cmNlcyBwcm9wZXJseSByZWxlYXNlZCwgZXNwZWNpYWxseSBpbiBlcnJvciBwYXRocz8gRG9lcyB0aGUgZnVuY3Rpb24gY29udHJpYnV0ZSB0byBtZW1vcnkgZnJhZ21lbnRhdGlvbiBvdmVyIHRpbWU/IFRoZXNlIGFyZSBsb25nLXRlcm0gY29uc2lkZXJhdGlvbnMgdGhhdCBhcmUgaW5jcmVkaWJseSBpbXBvcnRhbnQgZm9yIG92ZXJhbGwgc3lzdGVtIHN0YWJpbGl0eS4gSWYgdGhlcmUgYXJlIGFueSwgdGhleSBuZWVkIHRvIGJlIGFkZHJlc3NlZCBlYXJseSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdldGxiLmM9MjE1NT1zdHJ1Y3QgZm9saW8gKmFsbG9jX2J1ZGR5X2h1Z2V0bGJfZm9saW8oc3RydWN0IGhzdGF0ZSAqaCxcbi0tXG5tbS9odWdldGxiLmMtMjE3OC1cbm1tL2h1Z2V0bGIuYzoyMTc5OnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxubW0vaHVnZXRsYi5jLTIxODAtXHRcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS9odWdldGxiLmMtMjE5OS0vKiBmb2xpbyBtaWdyYXRpb24gY2FsbGJhY2sgZnVuY3Rpb24gKi9cbm1tL2h1Z2V0bGIuYzoyMjAwOnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgcHJlZmVycmVkX25pZCxcbm1tL2h1Z2V0bGIuYy0yMjAxLVx0XHRub2RlbWFza190ICpubWFzaywgZ2ZwX3QgZ2ZwX21hc2ssIGJvb2wgYWxsb3dfYWxsb2NfZmFsbGJhY2spXG4tLVxubW0vaHVnZXRsYi5jPTI1MzM9c3RhdGljIGxvbmcgdm1hX2RlbF9yZXNlcnZhdGlvbihzdHJ1Y3QgaHN0YXRlICpoLFxuLS1cbm1tL2h1Z2V0bGIuYy0yNTQwLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gcmVzdG9yZSByZXNlcnZhdGlvbiBpbmZvcm1hdGlvbiBvbiBlcnJvciBwYXRocy5cbm1tL2h1Z2V0bGIuYzoyNTQxOiAqIEl0IHNob3VsZCBPTkxZIGJlIGNhbGxlZCBmb3IgZm9saW9zIGFsbG9jYXRlZCB2aWEgYWxsb2NfaHVnZXRsYl9mb2xpbygpLFxubW0vaHVnZXRsYi5jLTI1NDItICogYW5kIHRoZSBodWdldGxiIG11dGV4IHNob3VsZCByZW1haW4gaGVsZCB3aGVuIGNhbGxpbmcgdGhpcyByb3V0aW5lLlxuLS1cbm1tL2h1Z2V0bGIuYy0yNTQ3LSAqIDIpIE5vIHJlc2VydmF0aW9uIHdhcyBpbiBwbGFjZSBmb3IgdGhlIHBhZ2UsIHNvIGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlIGlzXG5tbS9odWdldGxiLmM6MjU0ODogKiAgICBub3Qgc2V0LiAgSG93ZXZlciwgYWxsb2NfaHVnZXRsYl9mb2xpbyBhbHdheXMgdXBkYXRlcyB0aGUgcmVzZXJ2ZSBtYXAuXG5tbS9odWdldGxiLmMtMjU0OS0gKlxuLS1cbm1tL2h1Z2V0bGIuYy0yNTU2LSAqXG5tbS9odWdldGxiLmM6MjU1NzogKiBJbiBjYXNlIDIsIHNpbXBseSB1bmRvIHJlc2VydmUgbWFwIG1vZGlmaWNhdGlvbnMgZG9uZSBieSBhbGxvY19odWdldGxiX2ZvbGlvLlxubW0vaHVnZXRsYi5jLTI1NTgtICovXG5tbS9odWdldGxiLmM9MjU1OT12b2lkIHJlc3RvcmVfcmVzZXJ2ZV9vbl9lcnJvcihzdHJ1Y3QgaHN0YXRlICpoLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtMjU4NS1cdFx0XHQgKiBUaGlzIGluZGljYXRlcyB0aGVyZSBpcyBhbiBlbnRyeSBpbiB0aGUgcmVzZXJ2ZSBtYXBcbm1tL2h1Z2V0bGIuYzoyNTg2Olx0XHRcdCAqIG5vdCBhZGRlZCBieSBhbGxvY19odWdldGxiX2ZvbGlvLiAgV2Uga25vdyBpdCB3YXMgYWRkZWRcbm1tL2h1Z2V0bGIuYzoyNTg3Olx0XHRcdCAqIGJlZm9yZSB0aGUgYWxsb2NfaHVnZXRsYl9mb2xpbyBjYWxsLCBvdGhlcndpc2Vcbm1tL2h1Z2V0bGIuYy0yNTg4LVx0XHRcdCAqIGh1Z2V0bGJfcmVzdG9yZV9yZXNlcnZlIHdvdWxkIGJlIHNldCBvbiB0aGUgZm9saW8uXG4tLVxubW0vaHVnZXRsYi5jPTI5MjY9dHlwZWRlZiBlbnVtIHtcbi0tXG5tbS9odWdldGxiLmMtMjk1MS0gKi9cbm1tL2h1Z2V0bGIuYzoyOTUyOnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2V0bGIuYy0yOTUzLVx0XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBjb3dfZnJvbV9vd25lcilcbi0tXG5tbS9odWdldGxiLmM9NDg5ND1pbnQgY29weV9odWdldGxiX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmMsXG4tLVxubW0vaHVnZXRsYi5jLTUwMTUtXHRcdFx0XHQvKiBEbyBub3QgdXNlIHJlc2VydmUgYXMgaXQmIzM5O3MgcHJpdmF0ZSBvd25lZCAqL1xubW0vaHVnZXRsYi5jOjUwMTY6XHRcdFx0XHRuZXdfZm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKGRzdF92bWEsIGFkZHIsIGZhbHNlKTtcbm1tL2h1Z2V0bGIuYy01MDE3LVx0XHRcdFx0aWYgKElTX0VSUihuZXdfZm9saW8pKSB7XG4tLVxubW0vaHVnZXRsYi5jPTU0ODc9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl93cChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9odWdldGxiLmMtNTU2OC1cdHNwaW5fdW5sb2NrKHZtZi1cdTAwM2VwdGwpO1xubW0vaHVnZXRsYi5jOjU1Njk6XHRuZXdfZm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKHZtYSwgdm1mLVx1MDAzZWFkZHJlc3MsIGNvd19mcm9tX293bmVyKTtcbm1tL2h1Z2V0bGIuYy01NTcwLVxuLS1cbm1tL2h1Z2V0bGIuYz01NzU5PXN0YXRpYyB2bV9mYXVsdF90IGh1Z2V0bGJfbm9fcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyxcbi0tXG5tbS9odWdldGxiLmMtNTgyOC1cbm1tL2h1Z2V0bGIuYzo1ODI5Olx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8odm1hLCB2bWYtXHUwMDNlYWRkcmVzcywgZmFsc2UpO1xubW0vaHVnZXRsYi5jLTU4MzAtXHRcdGlmIChJU19FUlIoZm9saW8pKSB7XG4tLVxubW0vaHVnZXRsYi5jPTYwMDk9dm1fZmF1bHRfdCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdldGxiLmMtNjI0NC0gKi9cbm1tL2h1Z2V0bGIuYzo2MjQ1OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fdm1hKHN0cnVjdCBoc3RhdGUgKmgsXG5tbS9odWdldGxiLmMtNjI0Ni1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbi0tXG5tbS9odWdldGxiLmMtNjI2MS1cdCAqL1xubW0vaHVnZXRsYi5jOjYyNjI6XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgbm9kZSwgbm9kZW1hc2ssIGdmcF9tYXNrLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtNjI2My1cdG1wb2xfY29uZF9wdXQobXBvbCk7XG4tLVxubW0vaHVnZXRsYi5jPTYyNzI9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcbi0tXG5tbS9odWdldGxiLmMtNjMyOC1cbm1tL2h1Z2V0bGIuYzo2MzI5Olx0XHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oZHN0X3ZtYSwgZHN0X2FkZHIsIGZhbHNlKTtcbm1tL2h1Z2V0bGIuYy02MzMwLVx0XHRpZiAoSVNfRVJSKGZvbGlvKSkge1xuLS1cbm1tL2h1Z2V0bGIuYy02MzU0LVx0XHRcdCAqL1xubW0vaHVnZXRsYi5jOjYzNTU6XHRcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvX3ZtYShoLCBkc3Rfdm1hLCBkc3RfYWRkcik7XG5tbS9odWdldGxiLmMtNjM1Ni1cdFx0XHRpZiAoIWZvbGlvKSB7XG4tLVxubW0vaHVnZXRsYi5jLTYzNzUtXG5tbS9odWdldGxiLmM6NjM3NjpcdFx0Zm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKGRzdF92bWEsIGRzdF9hZGRyLCBmYWxzZSk7XG5tbS9odWdldGxiLmMtNjM3Ny1cdFx0aWYgKElTX0VSUihmb2xpbykpIHtcbi0tXG5tbS9odWdldGxiLmM9NjY2OT1sb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuLS1cbm1tL2h1Z2V0bGIuYy02NzkxLVx0XHRcdCAqIG1hcCBiZXR3ZWVuIHJlZ2lvbl9jaGcgYW5kIHJlZ2lvbl9hZGQuICBUaGlzXG5tbS9odWdldGxiLmM6Njc5MjpcdFx0XHQgKiBpbmRpY2F0ZXMgYSByYWNlIHdpdGggYWxsb2NfaHVnZXRsYl9mb2xpby4gIEFkanVzdFxubW0vaHVnZXRsYi5jLTY3OTMtXHRcdFx0ICogdGhlIHN1YnBvb2wgYW5kIHJlc2VydmUgY291bnRzIG1vZGlmaWVkIGFib3ZlXG4tLVxubW0vbWVtZmQuYz02OD1zdHJ1Y3QgZm9saW8gKm1lbWZkX2FsbG9jX2ZvbGlvKHN0cnVjdCBmaWxlICptZW1mZCwgcGdvZmZfdCBpZHgpXG4tLVxubW0vbWVtZmQuYy05My1cbm1tL21lbWZkLmM6OTQ6XHRcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKGgsXG5tbS9tZW1mZC5jLTk1LVx0XHRcdFx0XHRcdCAgICBudW1hX25vZGVfaWQoKSxcbi0tXG5tbS9tZW1wb2xpY3kuYz0xNDM3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXRfYnlfbXBvbChzdHJ1Y3QgZm9saW8gKnNyYyxcbi0tXG5tbS9tZW1wb2xpY3kuYy0xNDU2LVx0XHRub2RlbWFzayA9IHBvbGljeV9ub2RlbWFzayhnZnAsIHBvbCwgaWx4LCBcdTAwMjZuaWQpO1xubW0vbWVtcG9saWN5LmM6MTQ1NzpcdFx0cmV0dXJuIGFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgbmlkLCBub2RlbWFzaywgZ2ZwLFxubW0vbWVtcG9saWN5LmMtMTQ1OC1cdFx0XHRcdGh0bGJfYWxsb3dfYWxsb2NfZmFsbGJhY2soTVJfTUVNUE9MSUNZX01CSU5EKSk7XG4tLVxubW0vbWlncmF0ZS5jPTIxOTc9c3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpXG4tLVxubW0vbWlncmF0ZS5jLTIyMTQtXHRcdGdmcF9tYXNrID0gaHRsYl9tb2RpZnlfYWxsb2NfbWFzayhoLCBnZnBfbWFzayk7XG5tbS9taWdyYXRlLmM6MjIxNTpcdFx0cmV0dXJuIGFsbG9jX2h1Z2V0bGJfZm9saW9fbm9kZW1hc2soaCwgbmlkLFxubW0vbWlncmF0ZS5jLTIyMTYtXHRcdFx0XHRcdFx0bXRjLVx1MDAzZW5tYXNrLCBnZnBfbWFzayxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjg0NzgKCQkJCQkJCW91dHB1dDogMjAzCgkJCQkJCQl0aG91Z2h0czogNjE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQ6IGh1Z2V0bGJmcyBGdXp6aW5nIFRhcmdldCoqCgpPa2F5LCB0aGlzIGxvb2tzIHByb21pc2luZy4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhlIGBtbWAgc3Vic3lzdGVtLCBzcGVjaWZpY2FsbHkgdGhlIGBodWdldGxiZnNgIGFyZWEsIGlzIGRlZmluaXRlbHkgd29ydGggYSBjbG9zZXIgbG9vayBmb3IgZnV6emluZy4gSXQmIzM5O3MgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCBhIHZhcmlldHkgb2Ygc3RhbmRhcmQgc3lzdGVtIGNhbGxzIGxpa2UgYG1vdW50YCwgYHN0YXRmc2AsIGBtbWFwYCwgYG9wZW5gLCBgZmFsbG9jYXRlYCwgYGZ0cnVuY2F0ZWAsIGFuZCBgbWVtZmRfY3JlYXRlYCDigJMgdGhhdCYjMzk7cyBhIHdpZGUgYXR0YWNrIHN1cmZhY2UuCgpUaGUgY29kZSBtb2RpZmljYXRpb25zIHRvdWNoIGNyaXRpY2FsIGFyZWFzLCBpbmNsdWRpbmcgc3VicG9vbCByZXNlcnZhdGlvbiBhY2NvdW50aW5nLCBlcnJvciBoYW5kbGluZyBwYXRocywgc3RhdGZzIGxvZ2ljLCBhbmQgdGhlIHN1YnBvb2wgZnJlZSBjb25kaXRpb24uIFRoYXQmIzM5O3MgYSBnb29kIHNpZ247IGNoYW5nZXMgaW4gdGhlc2UgYXJlYXMgb2Z0ZW4gZXhwb3NlIGludGVyZXN0aW5nIHZ1bG5lcmFiaWxpdGllcy4gU28sIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAuCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IGZvY3VzIHN5bWJvbHMuIE15IHF1aWNrIGNoZWNrIHJldmVhbHM6IGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLCBgYWxsb2NfaHVnZXRsYl9mb2xpb2AsIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AsIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AsIGFuZCBgaHVnZXRsYmZzX3N0YXRmc2AuCgpJJiMzOTtsbCBkb3VibGUtY2hlY2sgZm9yIG90aGVyIHJlbGV2YW50IHN5bWJvbHMgdGhhdCBhcmUgZGlyZWN0bHkgdG91Y2hlZC4gTG9va2luZyBhdCB0aGUgc291cmNlIGNvZGUsIEkgZmluZCB0aGVzZToKCiogICBgaHVnZXRsYmZzX3N0YXRmc2AgaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYAoqICAgYHN1YnBvb2xfaXNfZnJlZWAgaW4gYG1tL2h1Z2V0bGIuY2AgKHN0YXRpYyBpbmxpbmUpCiogICBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgIGluIGBtbS9odWdldGxiLmNgCiogICBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgIGluIGBtbS9odWdldGxiLmNgCiogICBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgaW4gYG1tL2h1Z2V0bGIuY2AKKiAgIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgIGluIGBtbS9odWdldGxiLmNgCgpOZXh0LCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gVGhlIGtleSBvbmUgaGVyZSBpcyBgSFVHRVRMQkZTYC4gSSBzZWUgdGhhdCBgSFVHRVRMQl9QQUdFYCBpcyBhbHNvIHJlbGF0ZWQgKGJlaW5nIGBkZWZfYm9vbCBIVUdFVExCRlNgKSwgYnV0IGBIVUdFVExCRlNgIGlzIHRoZSBtYWluIG9uZSB0aGF0IHRoZSB1c2VyIGNhbiBkaXJlY3RseSBlbmFibGUgdGhyb3VnaCB0aGUgbWVudWNvbmZpZy4KCkkmIzM5O2xsIHF1aWNrbHkgY29uZmlybSB0aGF0IGFueSBvdGhlciBjb25maWdzIGFyZSByZWxldmFudC4gSXQgbG9va3MgbGlrZSBgSFVHRVRMQkZTYCBkZXBlbmRzIG9uIGBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU2AsIHdoaWNoIGlzIGBkZWZfYm9vbCB5YCBvbiBhbWQ2NCAvIHg4Niwgd2hpY2ggaXMgZ29vZC4gU28sIGBIVUdFVExCRlNgIGlzIGluZGVlZCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGZsYWcuCgpOb3cgSSYjMzk7bSByZWFkeSB0byBjcmFmdCB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzLiBJJiMzOTtsbCBuZWVkOgoKKiAgIGBFbmFibGVDb25maWdzYDogYFsmIzM0O0hVR0VUTEJGUyYjMzQ7XWAKKiAgIGBGb2N1c1N5bWJvbHNgOiBgWyYjMzQ7aHVnZXRsYl9yZXNlcnZlX3BhZ2VzJiMzNDssICYjMzQ7YWxsb2NfaHVnZXRsYl9mb2xpbyYjMzQ7LCAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzJiMzNDssICYjMzQ7aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMmIzM0OywgJiMzNDtodWdldGxiZnNfc3RhdGZzJiMzNDtdYAoqICAgYFJlYXNvbmluZ2A6IFRoZSBwYXRjaCBhbHRlcnMgc3VicG9vbCBhY2NvdW50aW5nIGFuZCByZXNlcnZhdGlvbiB0cmFja2luZyBsb2dpYyB3aXRoaW4gaHVnZXRsYi9odWdldGxiZnMuIFNwZWNpZmljYWxseSwgaXQgdG91Y2hlcyBmdW5jdGlvbnMgbGlrZSBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgLCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgLCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBhbmQgYGh1Z2V0bGJmc19zdGF0ZnNgLiBUaGlzIGNvZGUgaXMgcmVhY2hhYmxlIHRocm91Z2ggdGhlIGh1Z2V0bGJmcyBmaWxlc3lzdGVtIGFuZCBtZW1vcnkgbWFwcGluZyBzeXN0ZW0gY2FsbHMuCiogICBgV29ydGhGdXp6aW5nYDogYHRydWVgCgpBbHJpZ2h0LCB0aW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0hVR0VUTEJGUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2h1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyYjMzQ7LAogICAgJiMzNDthbGxvY19odWdldGxiX2ZvbGlvJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzJiMzNDssCiAgICAmIzM0O2h1Z2V0bGJmc19zdGF0ZnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgc3VicG9vbCBwYWdlIGFjY291bnRpbmcsIHJlc2VydmF0aW9uIGNhbGN1bGF0aW9uLCBhbmQgZXJyb3IgcmVjb3ZlcnkgbG9naWMgaW4gaHVnZXRsYmZzIGFuZCBjb3JlIGh1Z2V0bGIgbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMgKGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLCBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcywgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzLCBhbGxvY19odWdldGxiX2ZvbGlvLCBodWdldGxiZnNfc3RhdGZzKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5c2NhbGxzIHN1Y2ggYXMgbW1hcCwgb3BlbiwgZmFsbG9jYXRlLCBhbmQgc3RhdGZzIG9uIGh1Z2V0bGJmcywgbWFraW5nIHRoaXMgY29kZSB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7SFVHRVRMQkZTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aHVnZXRsYl9yZXNlcnZlX3BhZ2VzJiMzNDssCiAgICAmIzM0O2FsbG9jX2h1Z2V0bGJfZm9saW8mIzM0OywKICAgICYjMzQ7aHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMmIzM0OywKICAgICYjMzQ7aHVnZXRsYmZzX3N0YXRmcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBzdWJwb29sIHBhZ2UgYWNjb3VudGluZywgcmVzZXJ2YXRpb24gY2FsY3VsYXRpb24sIGFuZCBlcnJvciByZWNvdmVyeSBsb2dpYyBpbiBodWdldGxiZnMgYW5kIGNvcmUgaHVnZXRsYiBtZW1vcnkgbWFuYWdlbWVudCByb3V0aW5lcyAoaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMsIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzLCBodWdldGxiX3Jlc2VydmVfcGFnZXMsIGFsbG9jX2h1Z2V0bGJfZm9saW8sIGh1Z2V0bGJmc19zdGF0ZnMpLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgc3lzY2FsbHMgc3VjaCBhcyBtbWFwLCBvcGVuLCBmYWxsb2NhdGUsIGFuZCBzdGF0ZnMgb24gaHVnZXRsYmZzLCBtYWtpbmcgdGhpcyBjb2RlIHdlbGwtc3VpdGVkIGZvciBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI1LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzo1OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGh1Z2V0bGIgc3VicG9vbCBhY2NvdW50aW5nIGFuZCByZXNlcnZhdGlvbiB0cmFja2luZyAoaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCwgYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCwgYW5kIGBtbS9odWdldGxiLmNgKS4gU3BlY2lmaWNhbGx5LCBpdCB0cmFja3MgYHVzZWRfaHBhZ2VzYCBjb25zaXN0ZW50bHkgd2hlbiBgbWF4X2hwYWdlc2AgaXMgdW5ib3VuZGVkICgtMSksIGZpeGVzIHJlcG9ydGluZyBpbiBgaHVnZXRsYmZzX3N0YXRmc2AsIGFuZCBzaW1wbGlmaWVzIHRoZSBlcnJvciByb2xsYmFjayBhcml0aG1ldGljIHdoZW4gb2J0YWluaW5nL3JlbGVhc2luZyBzdWJwb29sIHJlc2VydmF0aW9ucyBpbiBgYWxsb2NfaHVnZXRsYl9mb2xpbygpYCBhbmQgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYC5cblxuQWxsIG1vZGlmaWVkIHZhcmlhYmxlcyAoYGZyZWVfcGFnZXNgLCBgZ2JsX3Jlc3ZfZ2V0YCwgYGdibF9yZXN2X3B1dGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UgYWNyb3NzIGFsbCBjb250cm9sIGZsb3cgcGF0aHMsIGFuZCBubyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgaXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGluIHRoaXMgcGF0Y2ggd291bGQgaW52b2x2ZSBhY2NvdW50aW5nIGRpc2NyZXBhbmNpZXMsIG1lbW9yeSBsZWFrcywgb3IgY29uY3VycmVuY3kgaXNzdWVzLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGlhZ25vc3RpY3MsIGFzc2VydGlvbnMsIGFuZCBLQVNBTi9MT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDljM2M0NTE4MjhjYzg1ODFkY2YxNGQzMDU4YTNiNzRmNTYyNGI2MjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVGh1IFNlcCAzIDIzOjU4OjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QKaW5kZXggYTQ5MTE1ZGIxOGM3Ni4uZDI0NDU4M2ZkY2JjMyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CkBAIC0zMTQsMjEgJiM0MzszMTQsOCBAQCBodWdlIHBhZ2VzLiAgSWYgdGhleSBjYW4gbm90IGJlIHJlc2VydmVkLCB0aGUgbW91bnQgZmFpbHMuCiBUaGUgcm91dGluZXMgaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCkgYXJlIGNhbGxlZCB3aGVuIHBhZ2VzIGFyZQogb2J0YWluZWQgZnJvbSBvciByZWxlYXNlZCBiYWNrIHRvIGEgc3VicG9vbC4gIFRoZXkgcGVyZm9ybSBhbGwgc3VicG9vbAogYWNjb3VudGluZywgYW5kIHRyYWNrIGFueSByZXNlcnZhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sLgotaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzIGFyZSBwYXNzZWQgdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIGJ5IHdoaWNoCi10byBhZGp1c3QgdGhlIHN1YnBvb2wgJiMzOTt1c2VkIHBhZ2UmIzM5OyBjb3VudCAoZG93biBmb3IgZ2V0LCB1cCBmb3IgcHV0KS4gIE5vcm1hbGx5LAotdGhleSByZXR1cm4gdGhlIHNhbWUgdmFsdWUgdGhhdCB3YXMgcGFzc2VkIG9yIGFuIGVycm9yIGlmIG5vdCBlbm91Z2ggcGFnZXMKLWV4aXN0IGluIHRoZSBzdWJwb29sLgotCi1Ib3dldmVyLCBpZiByZXNlcnZlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sIGEgcmV0dXJuIHZhbHVlIGxlc3MKLXRoYW4gdGhlIHBhc3NlZCB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQuICBUaGlzIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgdGhlCi1udW1iZXIgb2YgYWRkaXRpb25hbCBnbG9iYWwgcG9vbCBhZGp1c3RtZW50cyB3aGljaCBtdXN0IGJlIG1hZGUuICBGb3IgZXhhbXBsZSwKLXN1cHBvc2UgYSBzdWJwb29sIGNvbnRhaW5zIDMgcmVzZXJ2ZWQgaHVnZSBwYWdlcyBhbmQgc29tZW9uZSBhc2tzIGZvciA1LgotVGhlIDMgcmVzZXJ2ZWQgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sIGNhbiBiZSB1c2VkIHRvIHNhdGlzZnkgcGFydAotb2YgdGhlIHJlcXVlc3QuICBCdXQsIDIgcGFnZXMgbXVzdCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBnbG9iYWwgcG9vbHMuICBUbwotcmVsYXkgdGhpcyBpbmZvcm1hdGlvbiB0byB0aGUgY2FsbGVyLCB0aGUgdmFsdWUgMiBpcyByZXR1cm5lZC4gIFRoZSBjYWxsZXIKLWlzIHRoZW4gcmVzcG9uc2libGUgZm9yIGF0dGVtcHRpbmcgdG8gb2J0YWluIHRoZSBhZGRpdGlvbmFsIHR3byBwYWdlcyBmcm9tCi10aGUgZ2xvYmFsIHBvb2xzLgotCiYjNDM7aHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCkgdXNlIHRoZSBudW1iZXIgb2YgaHVnZSBwYWdlcyBwYXNzZWQgdG8gYWRqdXN0CiYjNDM7dGhlIHN1YnBvb2wgJiMzOTt1c2VkIHBhZ2UmIzM5OyBjb3VudC4KIAogQ09XIGFuZCBSZXNlcnZhdGlvbnMKID09PT09PT09PT09PT09PT09PT09CmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdCBiL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CmluZGV4IDIwOTQ3ZjhiZDA2NTQuLmFlMWYxZjMxNDc3ZmMgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0CkBAIC0yNDYsMTUgJiM0MzsyNDYsOCBAQCBodWdlcGFnZV9zdWJwb29s55qEbWluX2hwYWdlc+Wtl+auteS4reiiq+i3n+i4quOAguWcqOaMgui9veaXtu+8jGh1Z2V0bGJfYWNjdF9tZQog6KKr6LCD55So5Lul6aKE55WZ5oyH5a6a5pWw6YeP55qE5beo6aG144CC5aaC5p6c5a6D5Lus5LiN6IO96KKr6aKE55WZ77yM5oyC6L295bCx5Lya5aSx6LSl44CCCiAKIOW9k+S7juWtkOaxoOS4reiOt+WPluaIlumHiuaUvumhtemdouaXtu+8jOS8muiwg+eUqGh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygp5Ye95pWw44CCCi1odWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXPooqvkvKDpgJLnu5nlt6jpobXmlbDph4/vvIzku6XmraTmnaXosIPmlbTlrZDmsaDnmoQg4oCc5bey55So6aG16Z2i4oCdIOiuoeaVsAot77yIZ2V05Li65LiL6ZmN77yMcHV05Li65LiK5Y2H77yJ44CC6YCa5bi45oOF5Ya15LiL77yM5aaC5p6c5a2Q5rGg5Lit5rKh5pyJ6Laz5aSf55qE6aG16Z2i77yM5a6D5Lus5Lya6L+U5Zue5LiO5Lyg6YCS55qE55u45ZCM55qE5YC85oiWCi3kuIDkuKrplJnor6/jgIIKLQot54S26ICM77yM5aaC5p6c6aKE55WZ5LiO5a2Q5rGg55u45YWz6IGU77yM5Y+v6IO95Lya6L+U5Zue5LiA5Liq5bCP5LqO5Lyg6YCS5YC855qE6L+U5Zue5YC844CC6L+Z5Liq6L+U5Zue5YC86KGo56S65b+F6aG76L+b6KGM55qE6aKd5aSW5YWo5bGACi3msaDosIPmlbTnmoTmlbDph4/jgILkvovlpoLvvIzlgYforr7kuIDkuKrlrZDmsaDljIXlkKsz5Liq6aKE55WZ55qE5beo6aG177yM5pyJ5Lq66KaB5rGCNeS4quOAguS4juWtkOaxoOebuOWFs+eahDPkuKrpooTnlZnpobXlj6/ku6XnlKjmnaUKLea7oei2s+mDqOWIhuivt+axguOAguS9huaYr++8jOW/hemhu+S7juWFqOWxgOaxoOS4reiOt+W+lzLkuKrpobXpnaLjgILkuLrkuoblkJHosIPnlKjogIXovazovr7ov5nkuIDkv6Hmga/vvIzlsIbov5Tlm57lgLwy44CC54S25ZCO77yM6LCD55SoCi3ogIXopoHotJ/otKPku47lhajlsYDmsaDkuK3ojrflj5blj6blpJbkuKTkuKrpobXpnaLjgIIKLQomIzQzO+Wug+S7rOi0n+i0o+aJgOacieWtkOaxoOeahOe7n+iuoeaguOeul++8jOW5tui3n+i4quS4juWtkOaxoOebuOWFs+iBlOeahOmihOeVmeOAggomIzQzO2h1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygp5Ye95pWw5L2/55So5Lyg5YWl55qE5beo6aG15pWw6YeP5p2l6LCD5pW05a2Q5rGg55qE4oCc5bey55So6aG16Z2i4oCd6K6h5pWw44CCCiAKIENPV+WSjOmihOeVmQogPT09PT09PT09PQpkaWZmIC0tZ2l0IGEvZnMvaHVnZXRsYmZzL2lub2RlLmMgYi9mcy9odWdldGxiZnMvaW5vZGUuYwppbmRleCA3NjExYTg0NzBlYTI2Li41MTEzZjc0M2Y2ZmM3IDEwMDY0NAotLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9odWdldGxiZnMvaW5vZGUuYwpAQCAtMTEwOSw4ICYjNDM7MTEwOSwxMiBAQCBzdGF0aWMgaW50IGh1Z2V0bGJmc19zdGF0ZnMoc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBzdHJ1Y3Qga3N0YXRmcyAqYnVmKQogCiAJCQlzcGluX2xvY2tfaXJxKCZhbXA7c2JpbmZvLSZndDtzcG9vbC0mZ3Q7bG9jayk7CiAJCQlidWYtJmd0O2ZfYmxvY2tzID0gc2JpbmZvLSZndDtzcG9vbC0mZ3Q7bWF4X2hwYWdlczsKLQkJCWZyZWVfcGFnZXMgPSBzYmluZm8tJmd0O3Nwb29sLSZndDttYXhfaHBhZ2VzCi0JCQkJLSBzYmluZm8tJmd0O3Nwb29sLSZndDt1c2VkX2hwYWdlczsKJiM0MzsJCQlpZiAoc2JpbmZvLSZndDtzcG9vbC0mZ3Q7bWF4X2hwYWdlcyA9PSAtMSkgewomIzQzOwkJCQlmcmVlX3BhZ2VzID0gLTE7CiYjNDM7CQkJfSBlbHNlIHsKJiM0MzsJCQkJZnJlZV9wYWdlcyA9IHNiaW5mby0mZ3Q7c3Bvb2wtJmd0O21heF9ocGFnZXMgLQomIzQzOwkJCQkJICAgICBzYmluZm8tJmd0O3Nwb29sLSZndDt1c2VkX2hwYWdlczsKJiM0MzsJCQl9CiAJCQlidWYtJmd0O2ZfYmF2YWlsID0gYnVmLSZndDtmX2JmcmVlID0gZnJlZV9wYWdlczsKIAkJCXNwaW5fdW5sb2NrX2lycSgmYW1wO3NiaW5mby0mZ3Q7c3Bvb2wtJmd0O2xvY2spOwogCQkJYnVmLSZndDtmX2ZpbGVzID0gc2JpbmZvLSZndDttYXhfaW5vZGVzOwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAppbmRleCAxNmM0YzRjYWExMjZjLi40NTUxZmYzMDIzNjQwIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaApAQCAtMzksOCAmIzQzOzM5LDggQEAgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgewogCXNwaW5sb2NrX3QgbG9jazsKIAlsb25nIGNvdW50OwogCWxvbmcgbWF4X2hwYWdlczsJLyogTWF4aW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1heGltdW0uICovCi0JbG9uZyB1c2VkX2hwYWdlczsJLyogVXNlZCBjb3VudCBhZ2FpbnN0IG1heGltdW0sIGluY2x1ZGVzICovCi0JCQkJLyogYm90aCBhbGxvY2F0ZWQgYW5kIHJlc2VydmVkIHBhZ2VzLiAqLwomIzQzOwlsb25nIHVzZWRfaHBhZ2VzOwkvKiBVc2VkIHBhZ2UgY291bnQsIGluY2x1ZGVzIGJvdGggKi8KJiM0MzsJCQkJLyogYWxsb2NhdGVkIGFuZCByZXNlcnZlZCBwYWdlcy4gKi8KIAlzdHJ1Y3QgaHN0YXRlICpoc3RhdGU7CiAJbG9uZyBtaW5faHBhZ2VzOwkvKiBNaW5pbXVtIGh1Z2UgcGFnZXMgb3IgLTEgaWYgbm8gbWluaW11bS4gKi8KIAlsb25nIHJzdl9ocGFnZXM7CS8qIFBhZ2VzIHJlc2VydmVkIGFnYWluc3QgZ2xvYmFsIHBvb2wgdG8gKi8KZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuYwppbmRleCA3ODU3NzI4NDU3OTUyLi5lMjRmODU2Yzk0OWMzIDEwMDY0NAotLS0gYS9tbS9odWdldGxiLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZXRsYi5jCkBAIC0xMzAsMTIgJiM0MzsxMzAsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc3VicG9vbF9pc19mcmVlKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCkKIHsKIAlpZiAoc3Bvb2wtJmd0O2NvdW50KQogCQlyZXR1cm4gZmFsc2U7Ci0JaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xKQotCQlyZXR1cm4gc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzID09IDA7Ci0JaWYgKHNwb29sLSZndDttaW5faHBhZ2VzICE9IC0xKQotCQlyZXR1cm4gc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgPT0gc3Bvb2wtJmd0O21pbl9ocGFnZXM7CiAKLQlyZXR1cm4gdHJ1ZTsKJiM0MzsJcmV0dXJuIHNwb29sLSZndDt1c2VkX2hwYWdlcyA9PSAwOwogfQogCiBzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCkBAIC0xOTMsMTMgJiM0MzsxODksMTggQEAgdm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpCiAJdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpOwogfQogCi0vKgotICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBhbGxvY2F0aW5nIGFuZCByZXNlcnZpbmcgcGFnZXMuCi0gKiBSZXR1cm4gLUVOT01FTSBpZiB0aGVyZSBhcmUgbm90IGVub3VnaCByZXNvdXJjZXMgdG8gc2F0aXNmeSB0aGUKLSAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZQotICogZ2xvYmFsIHBvb2xzIG11c3QgYmUgYWRqdXN0ZWQgKHVwd2FyZCkuICBUaGUgcmV0dXJuZWQgdmFsdWUgbWF5Ci0gKiBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKSBpbiB0aGUgY2FzZSB3aGVyZQotICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuCiYjNDM7LyoqCiYjNDM7ICogaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMgLSBHZXQgcGFnZXMgZnJvbSBhIHN1YnBvb2wKJiM0MzsgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKQomIzQzOyAqIEBkZWx0YTogbnVtYmVyIG9mIHBhZ2VzIHRvIGFsbG9jYXRlIG9yIHJlc2VydmUKJiM0MzsgKgomIzQzOyAqIENoZWNrIGFuZCB1cGRhdGUgc3VicG9vbCBwYWdlIHVzYWdlIGNvdW50cyB3aGVuIGFsbG9jYXRpbmcgb3IKJiM0MzsgKiByZXNlcnZpbmcgQGRlbHRhIGh1Z2VwYWdlcy4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IFRha2VzIHNwb29sLSZndDtsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnEoKS4KJiM0MzsgKiBSZXR1cm46IE5vbi1uZWdhdGl2ZSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgY2Fubm90IGJlCiYjNDM7ICogICAgICAgICBzYXRpc2ZpZWQgYnkgdGhlIHN1YnBvb2wsIG9yIC1FTk9NRU0gaWYgdGhlIHN1YnBvb2wgbWF4aW11bQomIzQzOyAqICAgICAgICAgbGltaXQgd291bGQgYmUgZXhjZWVkZWQuCiAgKi8KIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKIAkJCQkgICAgICBsb25nIGRlbHRhKQpAQCAtMjExLDE1ICYjNDM7MjEyLDE0IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKIAogCXNwaW5fbG9ja19pcnEoJmFtcDtzcG9vbC0mZ3Q7bG9jayk7CiAKLQlpZiAoc3Bvb2wtJmd0O21heF9ocGFnZXMgIT0gLTEpIHsJCS8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovCi0JCWlmICgoc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzICYjNDM7IGRlbHRhKSAmbHQ7PSBzcG9vbC0mZ3Q7bWF4X2hwYWdlcykKLQkJCXNwb29sLSZndDt1c2VkX2hwYWdlcyAmIzQzOz0gZGVsdGE7Ci0JCWVsc2UgewotCQkJcmV0ID0gLUVOT01FTTsKLQkJCWdvdG8gdW5sb2NrX3JldDsKLQkJfQomIzQzOwlpZiAoc3Bvb2wtJmd0O21heF9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOwomIzQzOwkgICAgc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzICYjNDM7IGRlbHRhICZndDsgc3Bvb2wtJmd0O21heF9ocGFnZXMpIHsKJiM0MzsJCXJldCA9IC1FTk9NRU07CiYjNDM7CQlnb3RvIHVubG9ja19yZXQ7CiAJfQogCiYjNDM7CXNwb29sLSZndDt1c2VkX2hwYWdlcyAmIzQzOz0gZGVsdGE7CiYjNDM7CiAJLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi8KIAlpZiAoc3Bvb2wtJmd0O21pbl9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOyBzcG9vbC0mZ3Q7cnN2X2hwYWdlcykgewogCQlpZiAoZGVsdGEgJmd0OyBzcG9vbC0mZ3Q7cnN2X2hwYWdlcykgewpAQCAtMjQwLDExICYjNDM7MjQwLDE5IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCwKIAlyZXR1cm4gcmV0OwogfQogCi0vKgotICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBmcmVlaW5nIGFuZCB1bnJlc2VydmluZyBwYWdlcy4KLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGdsb2JhbCBwYWdlIHJlc2VydmF0aW9ucyB0aGF0IG11c3QgYmUgZHJvcHBlZC4KLSAqIFRoZSByZXR1cm4gdmFsdWUgbWF5IG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpCi0gKiBpbiB0aGUgY2FzZSB3aGVyZSBhIHN1YnBvb2wgbWluaW11bSBzaXplIG11c3QgYmUgbWFpbnRhaW5lZC4KJiM0MzsvKioKJiM0MzsgKiBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyAtIFJlbGVhc2UgcGFnZXMgYmFjayB0byBhIHN1YnBvb2wKJiM0MzsgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKQomIzQzOyAqIEBkZWx0YTogbnVtYmVyIG9mIHBhZ2VzIHRvIGZyZWUgb3IgdW5yZXNlcnZlCiYjNDM7ICoKJiM0MzsgKiBDaGVjayBhbmQgdXBkYXRlIHN1YnBvb2wgcGFnZSB1c2FnZSBjb3VudHMgd2hlbiBmcmVlaW5nIG9yCiYjNDM7ICogdW5yZXNlcnZpbmcgQGRlbHRhIGh1Z2VwYWdlcy4KJiM0MzsgKgomIzQzOyAqIENvbnRleHQ6IFRha2VzIHNwb29sLSZndDtsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnFzYXZlKCkuIE1heSByZWxlYXNlCiYjNDM7ICogICAgICAgICAgYW5kIGZyZWUgQHNwb29sIGlmIGl0cyB1c2FnZSBjb3VudCBhbmQgcmVmZXJlbmNlcyByZWFjaAomIzQzOyAqICAgICAgICAgIHplcm8uCiYjNDM7ICogUmV0dXJuOiBOb24tbmVnYXRpdmUgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IHRoZSBzdWJwb29sIGNhbm5vdAomIzQzOyAqICAgICAgICAgYWJzb3JiLgogICovCiBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsCiAJCQkJICAgICAgIGxvbmcgZGVsdGEpCkBAIC0yNTcsMTkgJiM0MzsyNjUsMjQgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLAogCiAJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzcG9vbC0mZ3Q7bG9jaywgZmxhZ3MpOwogCi0JaWYgKHNwb29sLSZndDttYXhfaHBhZ2VzICE9IC0xKQkJLyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi8KLQkJc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzIC09IGRlbHRhOwomIzQzOwlzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgLT0gZGVsdGE7CiAKIAkgLyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi8KIAlpZiAoc3Bvb2wtJmd0O21pbl9ocGFnZXMgIT0gLTEgJmFtcDsmYW1wOyBzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgJmx0OyBzcG9vbC0mZ3Q7bWluX2hwYWdlcykgewotCQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0MzsgZGVsdGEgJmx0Oz0gc3Bvb2wtJmd0O21pbl9ocGFnZXMpCiYjNDM7CQkvKgomIzQzOwkJICogbGltaXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0CiYjNDM7CQkgKiBjYW4gYmUgcmVzdG9yZWQgdG8gdGhpcyBzdWJwb29sLgomIzQzOwkJICovCiYjNDM7CQlsb25nIGxpbWl0ID0gc3Bvb2wtJmd0O21pbl9ocGFnZXMgLSBzcG9vbC0mZ3Q7dXNlZF9ocGFnZXM7CiYjNDM7CiYjNDM7CQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0MzsgZGVsdGEgJmx0Oz0gbGltaXQpCiAJCQlyZXQgPSAwOwogCQllbHNlCi0JCQlyZXQgPSBzcG9vbC0mZ3Q7cnN2X2hwYWdlcyAmIzQzOyBkZWx0YSAtIHNwb29sLSZndDttaW5faHBhZ2VzOwomIzQzOwkJCXJldCA9IHNwb29sLSZndDtyc3ZfaHBhZ2VzICYjNDM7IGRlbHRhIC0gbGltaXQ7CiAKIAkJc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJiM0Mzs9IGRlbHRhOwotCQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJmd0OyBzcG9vbC0mZ3Q7bWluX2hwYWdlcykKLQkJCXNwb29sLSZndDtyc3ZfaHBhZ2VzID0gc3Bvb2wtJmd0O21pbl9ocGFnZXM7CiYjNDM7CQlpZiAoc3Bvb2wtJmd0O3Jzdl9ocGFnZXMgJmd0OyBsaW1pdCkKJiM0MzsJCQlzcG9vbC0mZ3Q7cnN2X2hwYWdlcyA9IGxpbWl0OwogCX0KIAogCS8qCkBAIC0yOTQyLDcgJiM0MzsyOTU1LDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCXN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfdm1hKHZtYSk7CiAJc3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTsKIAlzdHJ1Y3QgZm9saW8gKmZvbGlvOwotCWxvbmcgcmV0dmFsLCBnYmxfY2hnLCBnYmxfcmVzZXJ2ZTsKJiM0MzsJbG9uZyByZXR2YWwsIGdibF9yZXN2X2dldDsKIAltYXBfY2hnX3N0YXRlIG1hcF9jaGc7CiAJc3RydWN0IG1lbXBvbGljeV9pbnRlcnByZXRlZCBtcG9saTsKIAlnZnBfdCBnZnAgPSBodGxiX2FsbG9jX21hc2soaCk7CkBAIC0yOTgxLDggJiM0MzsyOTk0LDggQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCSAqIE9yIGlmIGl0IGNhbiBnZXQgb25lIGZyb20gdGhlIHBvb2wgcmVzZXJ2YXRpb24gZGlyZWN0bHkuCiAJICovCiAJaWYgKG1hcF9jaGcpIHsKLQkJZ2JsX2NoZyA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTsKLQkJaWYgKGdibF9jaGcgJmx0OyAwKSB7CiYjNDM7CQlnYmxfcmVzdl9nZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7CiYjNDM7CQlpZiAoZ2JsX3Jlc3ZfZ2V0ICZsdDsgMCkgewogCQkJcmV0ID0gLUVOT1NQQzsKIAkJCWdvdG8gb3V0X2VuZF9yZXNlcnZhdGlvbjsKIAkJfQpAQCAtMjk5MSw3ICYjNDM7MzAwNCw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJICogSWYgd2UgaGF2ZSB0aGUgdm1hIHJlc2VydmF0aW9uIHJlYWR5LCBubyBuZWVkIGZvciBleHRyYQogCQkgKiBnbG9iYWwgcmVzZXJ2YXRpb24uCiAJCSAqLwotCQlnYmxfY2hnID0gMDsKJiM0MzsJCWdibF9yZXN2X2dldCA9IDA7CiAJfQogCiAJLyoKQEAgLTMwMDIsMTAgJiM0MzszMDE1LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJYWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDsKIAogCS8qCi0JICogZ2JsX2NoZyA9PSAwIGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cyBmb3IgdGhpcwomIzQzOwkgKiBnYmxfcmVzdl9nZXQgPT0gMCBpbmRpY2F0ZXMgYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoaXMKIAkgKiBhbGxvY2F0aW9uLCBzbyB0cnkgdG8gdXNlIGl0LgogCSAqLwotCWlmIChnYmxfY2hnID09IDApCiYjNDM7CWlmIChnYmxfcmVzdl9nZXQgPT0gMCkKIAkJYWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19VU0VfR0xPQkFMX1JFU0VSVkFUSU9OUzsKIAogCS8qIFRha2VzIHJlZmVyZW5jZSBvbiBtcG9sLiAqLwpAQCAtMzA1OSwxMyAmIzQzOzMwNzIsMTAgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCXJldHVybiBmb2xpbzsKIAogb3V0X3N1YnBvb2xfcHV0OgotCS8qCi0JICogcHV0IHBhZ2UgdG8gc3VicG9vbCBpZmYgdGhlIHF1b3RhIG9mIHN1YnBvb2wmIzM5O3MgcnN2X2hwYWdlcyBpcyB1c2VkCi0JICogZHVyaW5nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLgotCSAqLwotCWlmIChtYXBfY2hnICZhbXA7JmFtcDsgIWdibF9jaGcpIHsKLQkJZ2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7Ci0JCWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTsKJiM0MzsJaWYgKG1hcF9jaGcpIHsKJiM0MzsJCWxvbmcgZ2JsX3Jlc3ZfcHV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpOwomIzQzOwomIzQzOwkJaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQpOwogCX0KIAogb3V0X2VuZF9yZXNlcnZhdGlvbjoKQEAgLTY2NjEsMTIgJiM0Mzs2NjcxLDE0IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAJCXN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQl2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpCiB7Ci0JbG9uZyBjaGcgPSAtMSwgYWRkID0gLTEsIHNwb29sX3Jlc3YsIGdibF9yZXN2OwomIzQzOwlsb25nIGNoZyA9IC0xLCBhZGQgPSAtMTsKIAlzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2lub2RlKGlub2RlKTsKIAlzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX2lub2RlKGlub2RlKTsKIAlzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwOwogCXN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZyA9IE5VTEw7Ci0JbG9uZyBnYmxfcmVzZXJ2ZSwgcmVnaW9uc19uZWVkZWQgPSAwOwomIzQzOwlsb25nIHJlZ2lvbnNfbmVlZGVkID0gMDsKJiM0MzsJbG9uZyBnYmxfcmVzdl9nZXQ7CiYjNDM7CWxvbmcgZ2JsX3Jlc3ZfcHV0OwogCWludCBlcnI7CiAKIAkvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KQEAgLTY3NDEsOSAmIzQzOzY3NTMsOSBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCSAqIHRoZSBzdWJwb29sIGhhcyBhIG1pbmltdW0gc2l6ZSwgdGhlcmUgbWF5IGJlIHNvbWUgZ2xvYmFsCiAJICogcmVzZXJ2YXRpb25zIGFscmVhZHkgaW4gcGxhY2UgKGdibF9yZXNlcnZlKS4KIAkgKi8KLQlnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpOwotCWlmIChnYmxfcmVzZXJ2ZSAmbHQ7IDApIHsKLQkJZXJyID0gZ2JsX3Jlc2VydmU7CiYjNDM7CWdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpOwomIzQzOwlpZiAoZ2JsX3Jlc3ZfZ2V0ICZsdDsgMCkgewomIzQzOwkJZXJyID0gZ2JsX3Jlc3ZfZ2V0OwogCQlnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXA7CiAJfQogCkBAIC02NzUxLDcgJiM0Mzs2NzYzLDcgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwKIAkgKiBDaGVjayBlbm91Z2ggaHVnZXBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSByZXNlcnZhdGlvbi4KIAkgKiBIYW5kIHRoZSBwYWdlcyBiYWNrIHRvIHRoZSBzdWJwb29sIGlmIHRoZXJlIGFyZSBub3QKIAkgKi8KLQllcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXNlcnZlKTsKJiM0MzsJZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQpOwogCWlmIChlcnIgJmx0OyAwKQogCQlnb3RvIG91dF9wdXRfcGFnZXM7CiAKQEAgLTY3NzAsNyAmIzQzOzY3ODIsNyBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLAogCQlhZGQgPSByZWdpb25fYWRkKHJlc3ZfbWFwLCBmcm9tLCB0bywgcmVnaW9uc19uZWVkZWQsIGgsIGhfY2cpOwogCiAJCWlmICh1bmxpa2VseShhZGQgJmx0OyAwKSkgewotCQkJaHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpOwomIzQzOwkJCWh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXN2X2dldCk7CiAJCQllcnIgPSBhZGQ7CiAJCQlnb3RvIG91dF9wdXRfcGFnZXM7CiAJCX0gZWxzZSBpZiAodW5saWtlbHkoY2hnICZndDsgYWRkKSkgewpAQCAtNjgwNiwyNiAmIzQzOzY4MTgsMjEgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSwKIAl9CiAJcmV0dXJuIGNoZzsKIAotb3V0X3B1dF9wYWdlczoKLQlzcG9vbF9yZXN2ID0gY2hnIC0gZ2JsX3Jlc2VydmU7Ci0JaWYgKHNwb29sX3Jlc3YpIHsKLQkJLyogcHV0IHN1YiBwb29sJiMzOTtzIHJlc2VydmF0aW9uIGJhY2ssIGNoZyAtIGdibF9yZXNlcnZlICovCi0JCWdibF9yZXN2ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHNwb29sX3Jlc3YpOwotCQkvKgotCQkgKiBzdWJwb29sJiMzOTtzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsCi0JCSAqIHJldHVybiB0byBoc3RhdGUuCi0JCSAqLwotCQlodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7Ci0JfQotCS8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqLwotCWlmIChnYmxfcmVzZXJ2ZSAmYW1wOyZhbXA7IHNwb29sKSB7Ci0JCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiYjNDM7IG91dF9wdXRfcGFnZXM6CiYjNDM7CS8qCiYjNDM7CSAqIFJldHVybiBhbGwgdGhhdCB3YXMgcmVxdWVzdGVkIGZyb20gdGhlIHN1YnBvb2wsIGxldCBzdWJwb29sCiYjNDM7CSAqIHRlbGwgdXMgdGhlIG5ldyBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgbmVlZCB0byBiZQomIzQzOwkgKiByZXR1cm5lZCB0byB0aGUgZ2xvYmFsIHBvb2wuCiYjNDM7CSAqLwomIzQzOwlnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgY2hnKTsKJiM0MzsJLyoKJiM0MzsJICogVGhlcmUgbWF5IGJlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBudW1iZXIgb2YKJiM0MzsJICogcmVzZXJ2YXRpb25zIHRvIGNvbnN1bWUgYW5kIHRoZSBudW1iZXIgdG8gcmVzdG9yZSBub3cgaWYKJiM0MzsJICogdGhlcmUgYXJlIG11bHRpcGxlIHRocmVhZHMgaW50ZXJhY3Rpbmcgd2l0aCB0aGUgc3VicG9vbCAtCiYjNDM7CSAqIHJlc3RvcmUgdGhlIGRpZmZlcmVuY2UuCiYjNDM7CSAqLwomIzQzOwlodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCAtIGdibF9yZXN2X3B1dCk7CiAKLQkJc3Bpbl9sb2NrX2lycXNhdmUoJmFtcDtzcG9vbC0mZ3Q7bG9jaywgZmxhZ3MpOwotCQlpZiAoc3Bvb2wtJmd0O21heF9ocGFnZXMgIT0gLTEpCi0JCQlzcG9vbC0mZ3Q7dXNlZF9ocGFnZXMgLT0gZ2JsX3Jlc2VydmU7Ci0JCXVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3Bvb2wsIGZsYWdzKTsKLQl9CiBvdXRfdW5jaGFyZ2VfY2dyb3VwOgogCWh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSwKIAkJCQkJICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAyMQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDYxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEh1Z2VUTEIgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGl0cyBwb3RlbnRpYWwgaW1wYWN0LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zIHRoYXQgbWlnaHQgcmVxdWlyZSBLTVNBTiBzY3J1dGlueSwgb3IgaWYgaXQmIzM5O3MgcHJpbWFyaWx5IHJlbGF0ZWQgdG8gdGhlIGxvZ2ljYWwgZmxvdywgYWNjb3VudGluZywgY29uY3VycmVuY3ksIG9yIHJlc291cmNlIG1hbmFnZW1lbnQgd2l0aGluIHRoZSBIdWdlVExCIHN5c3RlbS4KCkZpcnN0LCBJIHNlZSB0aGUgcGF0Y2ggbW9kaWZpZXMgZG9jdW1lbnRhdGlvbiBpbiBgRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdGAgYW5kIGl0cyB0cmFuc2xhdGlvbnMsIGZvY3VzaW5nIG9uIGBodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXNgLiBUaGF0JiMzOTtzIGdvb2QsIGJ1dCBub3QgdGhlIGNvcmUgb2YgbXkgYW5hbHlzaXMuCgpOZXh0LCBJIHNlZSBhIGNoYW5nZSBpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGBodWdldGxiZnNfc3RhdGZzYC4gSXQgbG9va3MgbGlrZSBpdCYjMzk7cyBhIGZpeCBmb3IgaG93IGBmcmVlX3BhZ2VzYCBpcyBjYWxjdWxhdGVkIHdoZW4gYHNiaW5mby0mZ3Q7c3Bvb2wtJmd0O21heF9ocGFnZXNgIGlzIHNldCB0byBgLTFgLiBUaGUgb3JpZ2luYWwgbG9naWMgd2FzIHN1YnRyYWN0aW5nIHVzZWQgcGFnZXMgZXZlbiB3aGVuIHRoZXJlJiMzOTtzIGFuIHVuYm91bmRlZCBtYXhpbXVtLiBUaGUgbmV3IGNvZGUgZXhwbGljaXRseSBoYW5kbGVzIHRoZSBgLTFgIGNhc2UuIE5vdyBpdCBzZXRzIGBmcmVlX3BhZ2VzYCB0byBgLTFgIGRpcmVjdGx5IGluIHRoYXQgc2NlbmFyaW8sIHByZXNlcnZpbmcgdGhpcyBpbXBvcnRhbnQgYml0IG9mIGFjY291bnRpbmcuIFRoZSBjcnVjaWFsIGJpdCBoZXJlIGlzIHRvIGNvbmZpcm0gYGh1Z2V0bGJmc19zdGF0ZnNgIGl0c2VsZiBkb2VzbiYjMzk7dCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBMb29raW5nIGF0IHRoZSBjb2RlIGZpbGxpbmcgdGhlIGBrc3RhdGZzYCBzdHJ1Y3QsIGl0IGRvZXNuJiMzOTt0IGFwcGVhciB0byBsZWF2ZSBhbnl0aGluZyB1bmluaXRpYWxpemVkLiBgYnVmLSZndDtmX2JhdmFpbGAgYW5kIGBidWYtJmd0O2ZfYmZyZWVgIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkIHRoZSBgZnJlZV9wYWdlc2AgdmFsdWUuIEkmIzM5O2xsIG1lbnRhbGx5IG5vdGUgdG8gZG91YmxlLWNoZWNrIGxpbmUgMTEwOSBvZiB0aGlzIGZpbGUgdG8gYmUgY2VydGFpbiBJIGhhdmUgbXkgZmFjdHMgc3RyYWlnaHQuCgpUaGUgYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCBjaGFuZ2UgaXMgYSBzaW1wbGUgY29tbWVudCB1cGRhdGUgZm9yIGBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbC51c2VkX2hwYWdlc2AgLSBubyByZWFsIGZ1bmN0aW9uYWwgaW1wYWN0IGhlcmUuCgpOb3csIHRoZSBtZWF0IG9mIHRoZSBtYXR0ZXI6IGBtbS9odWdldGxiLmNgLiAgSSBzZWUgc2V2ZXJhbCBmdW5jdGlvbiBjaGFuZ2VzOgotICAgYHN1YnBvb2xfaXNfZnJlZSgpYCBpcyBzaW1wbGlmaWVkIOKAkyBnb29kLCBjbGVhbiBjb2RlIGlzIGFsd2F5cyB3ZWxjb21lLgotICAgYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKClgIGFuZCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoKWAgbm93ICphbHdheXMqIGFkanVzdCBgc3Bvb2wtJmd0O3VzZWRfaHBhZ2VzYCwgZXZlbiB3aGVuIGBtYXhfaHBhZ2VzYCBpcyBgLTFgLiBUaGUgcHJldmlvdXMgY29uZGl0aW9uYWwgYmVoYXZpb3IgbG9va2VkIHN1c3BpY2lvdXMuIEJ5IHJlbW92aW5nIGl0LCB0aGUgYWNjb3VudGluZyBpcyBzaW1wbGlmaWVkIGFuZCBub3cgY29uc2lzdGVudCBhY3Jvc3MgYWxsIGNhc2VzLiBUaGlzIGlzIHZlcnkgaW1wb3J0YW50IHRvIGNvbnNpZGVyLCBhcyBpdCBpcyBhIHBsYWNlIHdoZXJlIGVycm9ycyBhcmUgbGlrZWx5LCBzaG91bGQgdGhlIGxvZ2ljIGJlIGluY29ycmVjdC4gSXQgYXBwZWFycyB0aGF0IHRoZSBzdWJ0cmFjdGlvbiBvZiBgcnN2X2hwYWdlc2AgaXMgYWxzbyBiZWluZyB1cGRhdGVkIGZvciB0aGUgc2FtZSByZWFzb24uIFRoaXMgaXMgYSBwb2ludCB0byBub3RlLCBmb3Igc3VyZS4KLSAgIEZpbmFsbHksIGBhbGxvY19odWdldGxiX2ZvbGlvKClgIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgIGNvbnRhaW4gZXJyb3Igcm9sbGJhY2sgY2xlYW51cCBsb2dpYyBtb2RpZmljYXRpb25zLgoKT3ZlcmFsbCwgaXQgc2VlbXMgbGlrZSB0aGVzZSBjaGFuZ2VzIGFyZSBhaW1lZCBhdCB0aWdodGVuaW5nIHVwIHRoZSBhY2NvdW50aW5nIGxvZ2ljLCBoYW5kbGluZyB0aGUgYC0xYCBjYXNlIG1vcmUgZXhwbGljaXRseSwgYW5kIHBvdGVudGlhbGx5IHNpbXBsaWZ5aW5nIHRoZSBjb2RlLiBUaGUgZm9jdXMgc2VlbXMgdG8gYmUgb24gY29ycmVjdG5lc3MsIGFuZCB0aGVyZSBpcyBsZXNzIHJpc2sgb2YgbWVtb3J5IGVycm9ycy4gSG93ZXZlciwgSSYjMzk7bGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoZSBhY2NvdW50aW5nIGlzIGJlaW5nIHVzZWQsIGVzcGVjaWFsbHkgYXJvdW5kIHRob3NlIGB1c2VkX2hwYWdlc2AgYWRqdXN0bWVudHMgYW5kIHRoZSBgcnN2X2hwYWdlc2AgbGltaXQgY2FsY3VsYXRpb24sIHRvIGNvbmZpcm0gdGhlIG5ldyBsb2dpYyBpcyBzb3VuZC4gSSYjMzk7bGwgbmVlZCB0byB0aGluayBhYm91dCBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb25zIG9yIGludGVnZXIgb3ZlcmZsb3dzIHRoYXQgbWF5IGV4aXN0LCBpZiBJIGhhdmUgYW55IGZ1cnRoZXIgY29uY2VybnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZnMvaHVnZXRsYmZzL2lub2RlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzExMDA6XHRcdGJ1Zi1cdTAwM2VmX2ZzaWQgPSB1NjRfdG9fZnNpZChpZCk7XG4xMTAxOlx0XHRidWYtXHUwMDNlZl90eXBlID0gSFVHRVRMQkZTX01BR0lDO1xuMTEwMjpcdFx0YnVmLVx1MDAzZWZfYnNpemUgPSBodWdlX3BhZ2Vfc2l6ZShoKTtcbjExMDM6XHRcdGlmIChzYmluZm8pIHtcbjExMDQ6XHRcdFx0c3Bpbl9sb2NrKFx1MDAyNnNiaW5mby1cdTAwM2VzdGF0X2xvY2spO1xuMTEwNTpcdFx0XHQvKiBJZiBubyBsaW1pdHMgc2V0LCBqdXN0IHJlcG9ydCAwIG9yIC0xIGZvciBtYXgvZnJlZS91c2VkXG4xMTA2Olx0XHRcdCAqIGJsb2NrcywgbGlrZSBzaW1wbGVfc3RhdGZzKCkgKi9cbjExMDc6XHRcdFx0aWYgKHNiaW5mby1cdTAwM2VzcG9vbCkge1xuMTEwODpcdFx0XHRcdGxvbmcgZnJlZV9wYWdlcztcbjExMDk6XHRcbjExMTA6XHRcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNnNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2Vsb2NrKTtcbjExMTE6XHRcdFx0XHRidWYtXHUwMDNlZl9ibG9ja3MgPSBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcztcbjExMTI6XHRcdFx0XHRpZiAoc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZW1heF9ocGFnZXMgPT0gLTEpIHtcbjExMTM6XHRcdFx0XHRcdGZyZWVfcGFnZXMgPSAtMTtcbjExMTQ6XHRcdFx0XHR9IGVsc2Uge1xuMTExNTpcdFx0XHRcdFx0ZnJlZV9wYWdlcyA9IHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzIC1cbjExMTY6XHRcdFx0XHRcdFx0ICAgICBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4xMTE3Olx0XHRcdFx0fVxuMTExODpcdFx0XHRcdGJ1Zi1cdTAwM2VmX2JhdmFpbCA9IGJ1Zi1cdTAwM2VmX2JmcmVlID0gZnJlZV9wYWdlcztcbjExMTk6XHRcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2c2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZWxvY2spO1xuMTEyMDpcdFx0XHRcdGJ1Zi1cdTAwM2VmX2ZpbGVzID0gc2JpbmZvLVx1MDAzZW1heF9pbm9kZXM7XG4xMTIxOlx0XHRcdFx0YnVmLVx1MDAzZWZfZmZyZWUgPSBzYmluZm8tXHUwMDNlZnJlZV9pbm9kZXM7XG4xMTIyOlx0XHRcdH1cbjExMjM6XHRcdFx0c3Bpbl91bmxvY2soXHUwMDI2c2JpbmZvLVx1MDAzZXN0YXRfbG9jayk7XG4xMTI0Olx0XHR9XG4xMTI1Olx0XHRidWYtXHUwMDNlZl9uYW1lbGVuID0gTkFNRV9NQVg7XG4xMTI2Olx0XHRyZXR1cm4gMDtcbjExMjc6XHR9XG4xMTI4Olx0XG4xMTI5Olx0c3RhdGljIHZvaWQgaHVnZXRsYmZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxuMTEzMDpcdHtcbjExMzE6XHRcdHN0cnVjdCBodWdldGxiZnNfc2JfaW5mbyAqc2JpID0gSFVHRVRMQkZTX1NCKHNiKTtcbjExMzI6XHRcbjExMzM6XHRcdGlmIChzYmkpIHtcbjExMzQ6XHRcdFx0c2ItXHUwMDNlc19mc19pbmZvID0gTlVMTDtcbjExMzU6XHRcbjExMzY6XHRcdFx0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc2JpLVx1MDAzZXNwb29sKTtcbjExMzc6XHRcbjExMzg6XHRcdFx0a2ZyZWUoc2JpKTtcbjExMzk6XHRcdH1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTA0NQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipEaXZpbmcgaW50byBIdWdlVExCIEFsbG9jYXRpb24qKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBtZW1vcnkgYWxsb2NhdGlvbiBmbG93IGJldHRlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgSHVnZVRMQiBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY29yZSBmdW5jdGlvbnMuIExldCYjMzk7cyBzdGFydCB3aXRoIGBhbGxvY19odWdldGxiX2ZvbGlvYCBhbmQgdGhlbiBwaXZvdCB0byBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCBpbiBgbW0vaHVnZXRsYi5jYC4gTXkgaHVuY2ggaXMgdGhhdCB0aGVzZSBhcmUgdGhlIGtleSBwaWVjZXMgdG8gdW5yYXZlbCB0aGUgYWxsb2NhdGlvbiBwdXp6bGUuIEkgd2FudCB0byBzZWUgaG93IHRoZSBrZXJuZWwgcmVzZXJ2ZXMgdGhlIHBoeXNpY2FsIHBhZ2VzIGFuZCBob3cgaXQgaGFuZGxlcyB0aGUgZm9saW8gYWxsb2NhdGlvbiBpdHNlbGYuIEFyZSB0aGVyZSBhbnkgY29udGVudGlvbiBwb2ludHMgaGVyZSwgb3IgbWF5YmUgYW55IHVudXN1YWwgZXJyb3IgcGF0aHMgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IExldCYjMzk7cyBnZXQgdG8gdGhlIGNvZGUgYW5kIHNlZSB3aGF0IGluc2lnaHRzIGl0IHByb3ZpZGVzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2h1Z2V0bGIuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDI5NTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7Mjk1MDpcdCAqIFdoZW4gaXQmIzM5O3Mgc2V0LCB0aGUgYWxsb2NhdGlvbiB3aWxsIGJ5cGFzcyBhbGwgdm1hIGxldmVsIHJlc2VydmF0aW9ucy5cbjI5NTE6XHQgKi9cbjI5NTI6XHRzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4yOTUzOlx0XHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGNvd19mcm9tX293bmVyKVxuMjk1NDpcdHtcbjI5NTU6XHRcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfdm1hKHZtYSk7XG4yOTU2Olx0XHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpO1xuMjk1NzpcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbjI5NTg6XHRcdGxvbmcgcmV0dmFsLCBnYmxfcmVzdl9nZXQ7XG4yOTU5Olx0XHRtYXBfY2hnX3N0YXRlIG1hcF9jaGc7XG4yOTYwOlx0XHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkIG1wb2xpO1xuMjk2MTpcdFx0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuMjk2MjpcdFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcbjI5NjM6XHRcdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xuMjk2NDpcdFx0dTggYWxsb2NfZmxhZ3MgPSAwO1xuMjk2NTpcdFx0aW50IG5pZDtcbjI5NjY6XHRcdGludCByZXQ7XG4yOTY3Olx0XG4yOTY4Olx0XHQvKiBXaGV0aGVyIHdlIG5lZWQgYSBzZXBhcmF0ZSBwZXItdm1hIHJlc2VydmF0aW9uPyAqL1xuMjk2OTpcdFx0aWYgKGNvd19mcm9tX293bmVyKSB7XG4yOTcwOlx0XHRcdC8qXG4yOTcxOlx0XHRcdCAqIFNwZWNpYWwgY2FzZSEgIFNpbmNlIGl0JiMzOTtzIGEgQ29XIG9uIHRvcCBvZiBhIHJlc2VydmVkXG4yOTcyOlx0XHRcdCAqIHBhZ2UsIHRoZSBwcml2YXRlIHJlc3YgbWFwIGRvZXNuJiMzOTt0IGNvdW50LiAgU28gaXQgY2Fubm90XG4yOTczOlx0XHRcdCAqIGNvbnN1bWUgdGhlIHBlci12bWEgcmVzdiBtYXAgZXZlbiBpZiBpdCYjMzk7cyByZXNlcnZlZC5cbjI5NzQ6XHRcdFx0ICovXG4yOTc1Olx0XHRcdG1hcF9jaGcgPSBNQVBfQ0hHX0VORk9SQ0VEO1xuMjk3NjpcdFx0fSBlbHNlIHtcbjI5Nzc6XHRcdFx0LypcbjI5Nzg6XHRcdFx0ICogRXhhbWluZSB0aGUgcmVnaW9uL3Jlc2VydmUgbWFwIHRvIGRldGVybWluZSBpZiB0aGUgcHJvY2Vzc1xuMjk3OTpcdFx0XHQgKiBoYXMgYSByZXNlcnZhdGlvbiBmb3IgdGhlIHBhZ2UgdG8gYmUgYWxsb2NhdGVkLiAgQSByZXR1cm5cbjI5ODA6XHRcdFx0ICogY29kZSBvZiB6ZXJvIGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cyAobm8gY2hhbmdlKS5cbjI5ODE6XHRcdFx0ICovXG4yOTgyOlx0XHRcdHJldHZhbCA9IHZtYV9uZWVkc19yZXNlcnZhdGlvbihoLCB2bWEsIGFkZHIpO1xuMjk4MzpcdFx0XHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuMjk4NDpcdFx0XHRcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xuMjk4NTpcdFx0XHRtYXBfY2hnID0gcmV0dmFsID8gTUFQX0NIR19ORUVERUQgOiBNQVBfQ0hHX1JFVVNFO1xuMjk4NjpcdFx0fVxuMjk4NzpcdFxuMjk4ODpcdFx0LypcbjI5ODk6XHRcdCAqIFdoZXRoZXIgd2UgbmVlZCBhIHNlcGFyYXRlIGdsb2JhbCByZXNlcnZhdGlvbj9cbjI5OTA6XHRcdCAqXG4yOTkxOlx0XHQgKiBQcm9jZXNzZXMgdGhhdCBkaWQgbm90IGNyZWF0ZSB0aGUgbWFwcGluZyB3aWxsIGhhdmUgbm9cbjI5OTI6XHRcdCAqIHJlc2VydmVzIGFzIGluZGljYXRlZCBieSB0aGUgcmVnaW9uL3Jlc2VydmUgbWFwLiBDaGVja1xuMjk5MzpcdFx0ICogdGhhdCB0aGUgYWxsb2NhdGlvbiB3aWxsIG5vdCBleGNlZWQgdGhlIHN1YnBvb2wgbGltaXQuXG4yOTk0Olx0XHQgKiBPciBpZiBpdCBjYW4gZ2V0IG9uZSBmcm9tIHRoZSBwb29sIHJlc2VydmF0aW9uIGRpcmVjdGx5LlxuMjk5NTpcdFx0ICovXG4yOTk2Olx0XHRpZiAobWFwX2NoZykge1xuMjk5NzpcdFx0XHRnYmxfcmVzdl9nZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7XG4yOTk4Olx0XHRcdGlmIChnYmxfcmVzdl9nZXQgXHUwMDNjIDApIHtcbjI5OTk6XHRcdFx0XHRyZXQgPSAtRU5PU1BDO1xuMzAwMDpcdFx0XHRcdGdvdG8gb3V0X2VuZF9yZXNlcnZhdGlvbjtcbjMwMDE6XHRcdFx0fVxuMzAwMjpcdFx0fSBlbHNlIHtcbjMwMDM6XHRcdFx0LypcbjMwMDQ6XHRcdFx0ICogSWYgd2UgaGF2ZSB0aGUgdm1hIHJlc2VydmF0aW9uIHJlYWR5LCBubyBuZWVkIGZvciBleHRyYVxuMzAwNTpcdFx0XHQgKiBnbG9iYWwgcmVzZXJ2YXRpb24uXG4zMDA2Olx0XHRcdCAqL1xuMzAwNzpcdFx0XHRnYmxfcmVzdl9nZXQgPSAwO1xuMzAwODpcdFx0fVxuMzAwOTpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDIxOQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgcGlja2luZyB1cCB3aGVyZSB3ZSBsZWZ0IG9mZiwgYXMgdGhvdWdoIEkmIzM5O20gZXhhbWluaW5nIHRoaXMgY29kZToKCioqRGl2aW5nIEJhY2sgaW50byBgYWxsb2NfaHVnZXRsYl9mb2xpb2AqKgoKT2theSwgc28gd2UmIzM5O3JlIGNvbnRpbnVpbmcgb3VyIGRlZXAgZGl2ZSBpbnRvIGBhbGxvY19odWdldGxiX2ZvbGlvYC4gV2UmIzM5O3ZlIGFscmVhZHkgbG9va2VkIGF0IHNvbWUga2V5IGFzcGVjdHMsIGJ1dCBsZXQmIzM5O3MgbWFrZSBzdXJlIHdlIGhhdmVuJiMzOTt0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsIGluIHRoaXMgZnVuY3Rpb24uIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IGEgY29yZSBwaWVjZSBvZiBodWdlIHBhZ2UgYWxsb2NhdGlvbiwgc28gYSB0aG9yb3VnaCByZXZpZXcgaXMgYWx3YXlzIHdhcnJhbnRlZCwgZXZlbiBpZiB3ZSAqdGhpbmsqIHdlIGtub3cgaXQgd2VsbC4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgbWVudGFsIG1vZGVsIG9mIGl0cyBmbG93IGFuZCBpbnRlcmFjdGlvbnMsIHBlcmhhcHMgdHJhY2luZyBpdCB0aHJvdWdoIGEgZmV3IGRpZmZlcmVudCBzY2VuYXJpb3MgaW4gbXkgaGVhZCwgZm9jdXNpbmcgb24gZWRnZSBjYXNlcywgYW5kIGVuc3VyaW5nIGFsbCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgcHJpbWl0aXZlcyBhcmUgdXNlZCBjb3JyZWN0bHkuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zLCBvciBwb3RlbnRpYWwgZGVhZGxvY2tzLCBlc3BlY2lhbGx5IHNpbmNlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggY29uY3VycmVudCBhbGxvY2F0aW9uLiBJJiMzOTtsbCBtZW50YWxseSBzdGVwIHRocm91Z2ggdGhlIGNvZGUsIGZvY3VzaW5nIG9uIGxvY2tpbmcsIGVycm9yIGhhbmRsaW5nLCBhbmQgcmVzb3VyY2UgY2xlYW51cCB0byBjb25maXJtIHRoZXJlIGFyZSBubyBvdmVybG9va2VkIGlzc3VlcyB0aGF0IGNvdWxkIGNhdXNlIHNpZ25pZmljYW50IHByb2JsZW1zIGRvd24gdGhlIGxpbmUuIEkga25vdyB0aGVyZSYjMzk7cyBhIGxvdCBwYWNrZWQgaW50byB0aGlzIGZ1bmN0aW9uLCBidXQgSSBhbSBnb2luZyB0byBtYWtlIHN1cmUgdGhhdCBubyBkZXRhaWwgaXMgbG9zdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9odWdldGxiLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMwNTA6XHRcdFx0LypcbjMwNTE6XHRcdFx0ICogQ2hlY2sgZm9yIHBvc3NpYmxlIHJhY2UgY29uZGl0aW9ucy4gV2hlbiBpdCBoYXBwZW5zLi5cbjMwNTI6XHRcdFx0ICogVGhlIHBhZ2Ugd2FzIGFkZGVkIHRvIHRoZSByZXNlcnZhdGlvbiBtYXAgYmV0d2VlblxuMzA1MzpcdFx0XHQgKiB2bWFfbmVlZHNfcmVzZXJ2YXRpb24gYW5kIHZtYV9jb21taXRfcmVzZXJ2YXRpb24uXG4zMDU0Olx0XHRcdCAqIFRoaXMgaW5kaWNhdGVzIGEgcmFjZSB3aXRoIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcy5cbjMwNTU6XHRcdFx0ICogQWRqdXN0IGZvciB0aGUgc3VicG9vbCBjb3VudCBpbmNyZW1lbnRlZCBhYm92ZSBBTkRcbjMwNTY6XHRcdFx0ICogaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzIGZvciB0aGUgc2FtZSBwYWdlLlx0QWxzbyxcbjMwNTc6XHRcdFx0ICogdGhlIHJlc2VydmF0aW9uIGNvdW50IGFkZGVkIGluIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1xuMzA1ODpcdFx0XHQgKiBubyBsb25nZXIgYXBwbGllcy5cbjMwNTk6XHRcdFx0ICovXG4zMDYwOlx0XHRcdGlmICh1bmxpa2VseShtYXBfY2hnID09IE1BUF9DSEdfTkVFREVEIFx1MDAyNlx1MDAyNiByZXR2YWwgPT0gMCkpIHtcbjMwNjE6XHRcdFx0XHRsb25nIHJzdl9hZGp1c3Q7XG4zMDYyOlx0XG4zMDYzOlx0XHRcdFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbjMwNjQ6XHRcdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1yc3ZfYWRqdXN0KTtcbjMwNjU6XHRcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4zMDY2Olx0XHRcdFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfZm9saW9fcnN2ZChcbjMwNjc6XHRcdFx0XHQgICAgaHN0YXRlX2luZGV4KGgpLCBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBmb2xpbyk7XG4zMDY4Olx0XHRcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNmh1Z2V0bGJfbG9jayk7XG4zMDY5Olx0XHRcdH1cbjMwNzA6XHRcdH1cbjMwNzE6XHRcbjMwNzI6XHRcdHJldHVybiBmb2xpbztcbjMwNzM6XHRcbjMwNzQ6XHRvdXRfc3VicG9vbF9wdXQ6XG4zMDc1Olx0XHRpZiAobWFwX2NoZykge1xuMzA3NjpcdFx0XHRsb25nIGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbjMwNzc6XHRcbjMwNzg6XHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQpO1xuMzA3OTpcdFx0fVxuMzA4MDpcdFxuMzA4MTpcdG91dF9lbmRfcmVzZXJ2YXRpb246XG4zMDgyOlx0XHRpZiAobWFwX2NoZyAhPSBNQVBfQ0hHX0VORk9SQ0VEKVxuMzA4MzpcdFx0XHR2bWFfZW5kX3Jlc2VydmF0aW9uKGgsIHZtYSwgYWRkcik7XG4zMDg0Olx0XHRyZXR1cm4gRVJSX1BUUihyZXQpO1xuMzA4NTpcdH1cbjMwODY6XHRcbjMwODc6XHRzdGF0aWMgX19pbml0IHZvaWQgKmFsbG9jX2Jvb3RtZW0oc3RydWN0IGhzdGF0ZSAqaCwgaW50IG5pZCwgYm9vbCBub2RlX2V4YWN0KVxuMzA4ODpcdHtcbjMwODk6XHRcdGlmIChodWdldGxiX2Vhcmx5X2NtYShoKSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDMgMjM6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTExOTYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAyNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipEaXZpbmcgaW50byBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCoqCgpPa2F5LCB0aW1lIHRvIHplcm8gaW4gb24gYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AuIExldCYjMzk7cyBzcGVjaWZpY2FsbHkgY2hlY2sgdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDY3NDAgdG8gNjg0MC4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBzZWN0aW9uIGhhbmRsZXMgcGFnZSByZXNlcnZhdGlvbiDigJMgdGhlIGZpbmVyIGRldGFpbHMgb2YgaG93IGl0IGFsbG9jYXRlcyBodWdlIHBhZ2VzLiBJJiMzOTttIGxvb2tpbmcgZm9yIHRoZSBhbGxvY2F0aW9uIHByb2Nlc3MgYW5kIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgZWRnZSBjYXNlcy4gVGhlcmUgbWlnaHQgYmUgc29tZSBzdWJ0bGUgaW50ZXJwbGF5IHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zIEkgc2hvdWxkIGJlIGF3YXJlIG9mIGluIHRoaXMgcmVnaW9uLiBUaGlzJiMzOTtsbCBnaXZlIG1lIGEgZ29vZCBoYW5kbGUgb24gaXRzIGJlaGF2aW9yLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgZ29pbmcgb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vaHVnZXRsYi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjc0MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NzQwOlx0XHRcdFx0XHRjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBcdTAwMjZoX2NnKTtcbjY3NDE6XHRcdGlmIChlcnIgXHUwMDNjIDApXG42NzQyOlx0XHRcdGdvdG8gb3V0X2VycjtcbjY3NDM6XHRcbjY3NDQ6XHRcdGlmICh2bWEgXHUwMDI2XHUwMDI2ICF2bWFfdGVzdCh2bWEsIFZNQV9NQVlTSEFSRV9CSVQpIFx1MDAyNlx1MDAyNiBoX2NnKSB7XG42NzQ1Olx0XHRcdC8qIEZvciBwcml2YXRlIG1hcHBpbmdzLCB0aGUgaHVnZXRsYl9jZ3JvdXAgdW5jaGFyZ2UgaW5mbyBoYW5nc1xuNjc0NjpcdFx0XHQgKiBvZiB0aGUgcmVzdl9tYXAuXG42NzQ3Olx0XHRcdCAqL1xuNjc0ODpcdFx0XHRyZXN2X21hcF9zZXRfaHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfaW5mbyhyZXN2X21hcCwgaF9jZywgaCk7XG42NzQ5Olx0XHR9XG42NzUwOlx0XG42NzUxOlx0XHQvKlxuNjc1MjpcdFx0ICogVGhlcmUgbXVzdCBiZSBlbm91Z2ggcGFnZXMgaW4gdGhlIHN1YnBvb2wgZm9yIHRoZSBtYXBwaW5nLiBJZlxuNjc1MzpcdFx0ICogdGhlIHN1YnBvb2wgaGFzIGEgbWluaW11bSBzaXplLCB0aGVyZSBtYXkgYmUgc29tZSBnbG9iYWxcbjY3NTQ6XHRcdCAqIHJlc2VydmF0aW9ucyBhbHJlYWR5IGluIHBsYWNlIChnYmxfcmVzZXJ2ZSkuXG42NzU1Olx0XHQgKi9cbjY3NTY6XHRcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpO1xuNjc1NzpcdFx0aWYgKGdibF9yZXN2X2dldCBcdTAwM2MgMCkge1xuNjc1ODpcdFx0XHRlcnIgPSBnYmxfcmVzdl9nZXQ7XG42NzU5Olx0XHRcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDtcbjY3NjA6XHRcdH1cbjY3NjE6XHRcbjY3NjI6XHRcdC8qXG42NzYzOlx0XHQgKiBDaGVjayBlbm91Z2ggaHVnZXBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSByZXNlcnZhdGlvbi5cbjY3NjQ6XHRcdCAqIEhhbmQgdGhlIHBhZ2VzIGJhY2sgdG8gdGhlIHN1YnBvb2wgaWYgdGhlcmUgYXJlIG5vdFxuNjc2NTpcdFx0ICovXG42NzY2Olx0XHRlcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCk7XG42NzY3Olx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuNjc2ODpcdFx0XHRnb3RvIG91dF9wdXRfcGFnZXM7XG42NzY5Olx0XG42NzcwOlx0XHQvKlxuNjc3MTpcdFx0ICogQWNjb3VudCBmb3IgdGhlIHJlc2VydmF0aW9ucyBtYWRlLiBTaGFyZWQgbWFwcGluZ3MgcmVjb3JkIHJlZ2lvbnNcbjY3NzI6XHRcdCAqIHRoYXQgaGF2ZSByZXNlcnZhdGlvbnMgYXMgdGhleSBhcmUgc2hhcmVkIGJ5IG11bHRpcGxlIFZNQXMuXG42NzczOlx0XHQgKiBXaGVuIHRoZSBsYXN0IFZNQSBkaXNhcHBlYXJzLCB0aGUgcmVnaW9uIG1hcCBzYXlzIGhvdyBtdWNoXG42Nzc0Olx0XHQgKiB0aGUgcmVzZXJ2YXRpb24gd2FzIGFuZCB0aGUgcGFnZSBjYWNoZSB0ZWxscyBob3cgbXVjaCBvZlxuNjc3NTpcdFx0ICogdGhlIHJlc2VydmF0aW9uIHdhcyBjb25zdW1lZC4gUHJpdmF0ZSBtYXBwaW5ncyBhcmUgcGVyLVZNQSBhbmRcbjY3NzY6XHRcdCAqIG9ubHkgdGhlIGNvbnN1bWVkIHJlc2VydmF0aW9ucyBhcmUgdHJhY2tlZC4gV2hlbiB0aGUgVk1BXG42Nzc3Olx0XHQgKiBkaXNhcHBlYXJzLCB0aGUgb3JpZ2luYWwgcmVzZXJ2YXRpb24gaXMgdGhlIFZNQSBzaXplIGFuZCB0aGVcbjY3Nzg6XHRcdCAqIGNvbnN1bWVkIHJlc2VydmF0aW9ucyBhcmUgc3RvcmVkIGluIHRoZSBtYXAuIEhlbmNlLCBub3RoaW5nXG42Nzc5Olx0XHQgKiBlbHNlIGhhcyB0byBiZSBkb25lIGZvciBwcml2YXRlIG1hcHBpbmdzIGhlcmVcbjY3ODA6XHRcdCAqL1xuNjc4MTpcdFx0aWYgKCF2bWEgfHwgdm1hX3Rlc3Qodm1hLCBWTUFfTUFZU0hBUkVfQklUKSkge1xuNjc4MjpcdFx0XHRhZGQgPSByZWdpb25fYWRkKHJlc3ZfbWFwLCBmcm9tLCB0bywgcmVnaW9uc19uZWVkZWQsIGgsIGhfY2cpO1xuNjc4MzpcdFxuNjc4NDpcdFx0XHRpZiAodW5saWtlbHkoYWRkIFx1MDAzYyAwKSkge1xuNjc4NTpcdFx0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXN2X2dldCk7XG42Nzg2Olx0XHRcdFx0ZXJyID0gYWRkO1xuNjc4NzpcdFx0XHRcdGdvdG8gb3V0X3B1dF9wYWdlcztcbjY3ODg6XHRcdFx0fSBlbHNlIGlmICh1bmxpa2VseShjaGcgXHUwMDNlIGFkZCkpIHtcbjY3ODk6XHRcdFx0XHQvKlxuNjc5MDpcdFx0XHRcdCAqIHBhZ2VzIGluIHRoaXMgcmFuZ2Ugd2VyZSBhZGRlZCB0byB0aGUgcmVzZXJ2ZVxuNjc5MTpcdFx0XHRcdCAqIG1hcCBiZXR3ZWVuIHJlZ2lvbl9jaGcgYW5kIHJlZ2lvbl9hZGQuICBUaGlzXG42NzkyOlx0XHRcdFx0ICogaW5kaWNhdGVzIGEgcmFjZSB3aXRoIGFsbG9jX2h1Z2V0bGJfZm9saW8uICBBZGp1c3RcbjY3OTM6XHRcdFx0XHQgKiB0aGUgc3VicG9vbCBhbmQgcmVzZXJ2ZSBjb3VudHMgbW9kaWZpZWQgYWJvdmVcbjY3OTQ6XHRcdFx0XHQgKiBiYXNlZCBvbiB0aGUgZGlmZmVyZW5jZS5cbjY3OTU6XHRcdFx0XHQgKi9cbjY3OTY6XHRcdFx0XHRsb25nIHJzdl9hZGp1c3Q7XG42Nzk3Olx0XG42Nzk4Olx0XHRcdFx0LypcbjY3OTk6XHRcdFx0XHQgKiBodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZCgpIHdpbGwgcHV0IHRoZVxuNjgwMDpcdFx0XHRcdCAqIHJlZmVyZW5jZSB0byBoX2NnLVx1MDAzZWNzcy4gU2VlIGNvbW1lbnQgYmVsb3cgZm9yIGRldGFpbC5cbjY4MDE6XHRcdFx0XHQgKi9cbjY4MDI6XHRcdFx0XHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChcbjY4MDM6XHRcdFx0XHRcdGhzdGF0ZV9pbmRleChoKSxcbjY4MDQ6XHRcdFx0XHRcdChjaGcgLSBhZGQpICogcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgaF9jZyk7XG42ODA1Olx0XG42ODA2Olx0XHRcdFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLFxuNjgwNzpcdFx0XHRcdFx0XHRcdFx0XHRjaGcgLSBhZGQpO1xuNjgwODpcdFx0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLXJzdl9hZGp1c3QpO1xuNjgwOTpcdFx0XHR9IGVsc2UgaWYgKGhfY2cpIHtcbjY4MTA6XHRcdFx0XHQvKlxuNjgxMTpcdFx0XHRcdCAqIFRoZSBmaWxlX3JlZ2lvbnMgd2lsbCBob2xkIHRoZWlyIG93biByZWZlcmVuY2UgdG9cbjY4MTI6XHRcdFx0XHQgKiBoX2NnLVx1MDAzZWNzcy4gU28gd2Ugc2hvdWxkIHJlbGVhc2UgdGhlIHJlZmVyZW5jZSBoZWxkXG42ODEzOlx0XHRcdFx0ICogdmlhIGh1Z2V0bGJfY2dyb3VwX2NoYXJnZV9jZ3JvdXBfcnN2ZCgpIHdoZW4gd2UgYXJlXG42ODE0Olx0XHRcdFx0ICogZG9uZS5cbjY4MTU6XHRcdFx0XHQgKi9cbjY4MTY6XHRcdFx0XHRodWdldGxiX2Nncm91cF9wdXRfcnN2ZF9jZ3JvdXAoaF9jZyk7XG42ODE3Olx0XHRcdH1cbjY4MTg6XHRcdH1cbjY4MTk6XHRcdHJldHVybiBjaGc7XG42ODIwOlx0XG42ODIxOlx0IG91dF9wdXRfcGFnZXM6XG42ODIyOlx0XHQvKlxuNjgyMzpcdFx0ICogUmV0dXJuIGFsbCB0aGF0IHdhcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc3VicG9vbCwgbGV0IHN1YnBvb2xcbjY4MjQ6XHRcdCAqIHRlbGwgdXMgdGhlIG5ldyBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgbmVlZCB0byBiZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMyAyMzo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjgxMQoJCQkJCQkJb3V0cHV0OiAyNTAKCQkJCQkJCXRob3VnaHRzOiA2MzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gdnMuIEtBU0FOIEFuYWx5c2lzIG9mIEh1Z2VUTEIgU3VicG9vbCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEgS01TQU4vS0FTQU4gcGVyc3BlY3RpdmUsIEkgbmVlZCB0byBhbmFseXplIHRoaXMgcGF0Y2ggZm9jdXNpbmcgb24gbWVtb3J5IHNhZmV0eSBpc3N1ZXMuIEZpcnN0LCB0aGUgcGF0Y2ggcmVmYWN0b3JzIHRoZSBgaHVnZXBhZ2Vfc3VicG9vbGAgYWNjb3VudGluZyBsb2dpYywgYW5kIGZpeGVzIGhvdyBzdWJwb29sIHVzYWdlIGlzIHRyYWNrZWQsIGVzcGVjaWFsbHkgaW4gdGhlIGNvbnRleHQgb2YgdW5ib3VuZGVkIHN1YnBvb2xzLgoKU3BlY2lmaWNhbGx5LCBJIHNlZSBmb3VyIGtleSBjaGFuZ2VzOiBmaXJzdCwgYHVzZWRfaHBhZ2VzYCBpcyBub3cgdHJhY2tlZCBldmVuIHdoZW4gYG1heF9ocGFnZXNgIGlzbiYjMzk7dCByZXN0cmljdGVkLiBTZWNvbmQsIGBodWdldGxiZnNfc3RhdGZzYCBnZXRzIGEgdHdlYWsg4oCTIGlmIGBtYXhfaHBhZ2VzYCBpcyB1bmJvdW5kZWQsIGBmcmVlX3BhZ2VzYCBnZXRzIHNldCB0byAtMSwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciByZXByZXNlbnRpbmcgdW5saW1pdGVkIGF2YWlsYWJpbGl0eS4gVGhpcmQsIGl0IGNsZWFucyB1cCBob3cgcGFnZSByZXNlcnZhdGlvbnMgYXJlIG1hbmFnZWQgZHVyaW5nIGBnZXRgIGFuZCBgcHV0YCBvcGVyYXRpb25zLCBhbmQgYWRqdXN0cyB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYC4gRmluYWxseSwgdGhlIGRvY3VtZW50YXRpb24gYW5kIGNvbW1lbnRzIGFyZSB1cGRhdGVkIGFjY29yZGluZ2x5LgoKTm93LCBsZXQmIzM5O3MgZGlnIGludG8gdGhlIGRldGFpbHMuIFJlZ2FyZGluZyB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgaW4gYGh1Z2V0bGJmc19zdGF0ZnNgLCBgZnJlZV9wYWdlc2AgbG9va3MgdG8gYmUgaW5pdGlhbGl6ZWQgY29ycmVjdGx5LCBnZXR0aW5nIGFzc2lnbmVkIGluIGJvdGggYnJhbmNoZXMgb2YgdGhlIGlmIHN0YXRlbWVudCBiZWZvcmUgYmVpbmcgdXNlZC4gU2ltaWxhcmx5LCBpbiBgYWxsb2NfaHVnZXRsYl9mb2xpb2AgYW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLCBgZ2JsX3Jlc3ZfZ2V0YCBhbmQgYGdibF9yZXN2X3B1dGAgYXBwZWFyIHRvIGJlIGluaXRpYWxpemVkIGJlZm9yZSB1c2UsIGV2ZW4gaW4gdGhlIGVycm9yIHBhdGhzLiBJIGFtIG5vdCBzZWVpbmcgYW55IG5ldyBzdHJ1Y3QgcGFkZGluZyBvciBtZW1vcnkgY29waWVzIHRvIHVzZXIgc3BhY2UgdGhhdCBjb3VsZCBiZSBwcm9ibGVtYXRpYy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2sgb3IgaGVhcCB2YXJpYWJsZXMgYmVpbmcgcmVhZCwgbm9yIGRvIEkgc2VlIGFueSBjaGFuZ2VzIHRvIGJ1ZmZlciBzaXplIG1hbmlwdWxhdGlvbiB0aGF0IGNvdWxkIGxlYWQgdG8gcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkuCgpGcm9tIGEgYnVnIGludHJvZHVjdGlvbiBwZXJzcGVjdGl2ZSwgaXQgbG9va3MgbGlrZSBhbnl0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBhY2NvdW50aW5nIGVycm9ycywgcmVzZXJ2YXRpb24gaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIGxvY2tpbmcgcHJvYmxlbXMgc2hvdWxkIGJlIGNhdWdodCBieSBrZXJuZWwgYXNzZXJ0aW9ucywgcmVmY291bnQgdHJhY2tpbmcsIG9yIG90aGVyIHRvb2xzLiBJIGFtIG5vdCBzZWVpbmcgYW55IGRpcmVjdCBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbnkga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MgZWl0aGVyLgoKVGhlcmVmb3JlLCBhZnRlciByZXZpZXdpbmcgYWxsIG9mIHRoaXMsIHRoZSBsaWtlbGlob29kIG9mIHRoaXMgcGF0Y2ggaW50cm9kdWNpbmcgaXNzdWVzIHRoYXQgS01TQU4gd291bGQgY2F0Y2ggc2VlbXMgbG93LiBUaGUgTmVlZEtNU0FOIGZsYWcgc2hvdWxkIGJlIGZhbHNlLiBOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSByZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAzIDIzOjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIHJlZmFjdG9ycyBodWdldGxiIHN1YnBvb2wgYWNjb3VudGluZyBhbmQgcmVzZXJ2YXRpb24gdHJhY2tpbmcgKGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2AsIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAsIGFuZCBgbW0vaHVnZXRsYi5jYCkuIFNwZWNpZmljYWxseSwgaXQgdHJhY2tzIGB1c2VkX2hwYWdlc2AgY29uc2lzdGVudGx5IHdoZW4gYG1heF9ocGFnZXNgIGlzIHVuYm91bmRlZCAoLTEpLCBmaXhlcyByZXBvcnRpbmcgaW4gYGh1Z2V0bGJmc19zdGF0ZnNgLCBhbmQgc2ltcGxpZmllcyB0aGUgZXJyb3Igcm9sbGJhY2sgYXJpdGhtZXRpYyB3aGVuIG9idGFpbmluZy9yZWxlYXNpbmcgc3VicG9vbCByZXNlcnZhdGlvbnMgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW8oKWAgYW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAuXG5cbkFsbCBtb2RpZmllZCB2YXJpYWJsZXMgKGBmcmVlX3BhZ2VzYCwgYGdibF9yZXN2X2dldGAsIGBnYmxfcmVzdl9wdXRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGFjcm9zcyBhbGwgY29udHJvbCBmbG93IHBhdGhzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBvciB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nIGlzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBpbiB0aGlzIHBhdGNoIHdvdWxkIGludm9sdmUgYWNjb3VudGluZyBkaXNjcmVwYW5jaWVzLCBtZW1vcnkgbGVha3MsIG9yIGNvbmN1cnJlbmN5IGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRpYWdub3N0aWNzLCBhc3NlcnRpb25zLCBhbmQgS0FTQU4vTE9DS0RFUC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCByZWZhY3RvcnMgaHVnZXRsYiBzdWJwb29sIGFjY291bnRpbmcgYW5kIHJlc2VydmF0aW9uIHRyYWNraW5nIChpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLCBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLCBhbmQgYG1tL2h1Z2V0bGIuY2ApLiBTcGVjaWZpY2FsbHksIGl0IHRyYWNrcyBgdXNlZF9ocGFnZXNgIGNvbnNpc3RlbnRseSB3aGVuIGBtYXhfaHBhZ2VzYCBpcyB1bmJvdW5kZWQgKC0xKSwgZml4ZXMgcmVwb3J0aW5nIGluIGBodWdldGxiZnNfc3RhdGZzYCwgYW5kIHNpbXBsaWZpZXMgdGhlIGVycm9yIHJvbGxiYWNrIGFyaXRobWV0aWMgd2hlbiBvYnRhaW5pbmcvcmVsZWFzaW5nIHN1YnBvb2wgcmVzZXJ2YXRpb25zIGluIGBhbGxvY19odWdldGxiX2ZvbGlvKClgIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgLlxuXG5BbGwgbW9kaWZpZWQgdmFyaWFibGVzIChgZnJlZV9wYWdlc2AsIGBnYmxfcmVzdl9nZXRgLCBgZ2JsX3Jlc3ZfcHV0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBhY3Jvc3MgYWxsIGNvbnRyb2wgZmxvdyBwYXRocywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgaW4gdGhpcyBwYXRjaCB3b3VsZCBpbnZvbHZlIGFjY291bnRpbmcgZGlzY3JlcGFuY2llcywgbWVtb3J5IGxlYWtzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkaWFnbm9zdGljcywgYXNzZXJ0aW9ucywgYW5kIEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1ODozMy42NjExMzc5OTRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4MzE0MjczMzgzOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX3Jlc2VydmVfcGFnZXNcIixcbiAgICBcImFsbG9jX2h1Z2V0bGJfZm9saW9cIixcbiAgICBcImh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzXCIsXG4gICAgXCJodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc1wiLFxuICAgIFwiaHVnZXRsYmZzX3N0YXRmc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGh1Z2V0bGIgc3VicG9vbCBhY2NvdW50aW5nIGFuZCByZXNlcnZhdGlvbiB0cmFja2luZyAoaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCwgYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCwgYW5kIGBtbS9odWdldGxiLmNgKS4gU3BlY2lmaWNhbGx5LCBpdCB0cmFja3MgYHVzZWRfaHBhZ2VzYCBjb25zaXN0ZW50bHkgd2hlbiBgbWF4X2hwYWdlc2AgaXMgdW5ib3VuZGVkICgtMSksIGZpeGVzIHJlcG9ydGluZyBpbiBgaHVnZXRsYmZzX3N0YXRmc2AsIGFuZCBzaW1wbGlmaWVzIHRoZSBlcnJvciByb2xsYmFjayBhcml0aG1ldGljIHdoZW4gb2J0YWluaW5nL3JlbGVhc2luZyBzdWJwb29sIHJlc2VydmF0aW9ucyBpbiBgYWxsb2NfaHVnZXRsYl9mb2xpbygpYCBhbmQgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYC5cXG5cXG5BbGwgbW9kaWZpZWQgdmFyaWFibGVzIChgZnJlZV9wYWdlc2AsIGBnYmxfcmVzdl9nZXRgLCBgZ2JsX3Jlc3ZfcHV0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBhY3Jvc3MgYWxsIGNvbnRyb2wgZmxvdyBwYXRocywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgaW4gdGhpcyBwYXRjaCB3b3VsZCBpbnZvbHZlIGFjY291bnRpbmcgZGlzY3JlcGFuY2llcywgbWVtb3J5IGxlYWtzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkaWFnbm9zdGljcywgYXNzZXJ0aW9ucywgYW5kIEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN1YnBvb2wgcGFnZSBhY2NvdW50aW5nLCByZXNlcnZhdGlvbiBjYWxjdWxhdGlvbiwgYW5kIGVycm9yIHJlY292ZXJ5IGxvZ2ljIGluIGh1Z2V0bGJmcyBhbmQgY29yZSBodWdldGxiIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmVzIChodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcywgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMsIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcywgYWxsb2NfaHVnZXRsYl9mb2xpbywgaHVnZXRsYmZzX3N0YXRmcykuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNjYWxscyBzdWNoIGFzIG1tYXAsIG9wZW4sIGZhbGxvY2F0ZSwgYW5kIHN0YXRmcyBvbiBodWdldGxiZnMsIG1ha2luZyB0aGlzIGNvZGUgd2VsbC1zdWl0ZWQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU4OjMzLjY2MTE0MjQ2M1oiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjIyMTMwODUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgOWMzYzQ1MTgyOGNjODU4MWRjZjE0ZDMwNThhM2I3NGY1NjI0YjYyN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IFNlcCAzIDIzOjU4OjMyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XFxuaW5kZXggYTQ5MTE1ZGIxOGM3Ni4uZDI0NDU4M2ZkY2JjMyAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxcbkBAIC0zMTQsMjEgKzMxNCw4IEBAIGh1Z2UgcGFnZXMuICBJZiB0aGV5IGNhbiBub3QgYmUgcmVzZXJ2ZWQsIHRoZSBtb3VudCBmYWlscy5cXG4gVGhlIHJvdXRpbmVzIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygpIGFyZSBjYWxsZWQgd2hlbiBwYWdlcyBhcmVcXG4gb2J0YWluZWQgZnJvbSBvciByZWxlYXNlZCBiYWNrIHRvIGEgc3VicG9vbC4gIFRoZXkgcGVyZm9ybSBhbGwgc3VicG9vbFxcbiBhY2NvdW50aW5nLCBhbmQgdHJhY2sgYW55IHJlc2VydmF0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlIHN1YnBvb2wuXFxuLWh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcyBhcmUgcGFzc2VkIHRoZSBudW1iZXIgb2YgaHVnZSBwYWdlcyBieSB3aGljaFxcbi10byBhZGp1c3QgdGhlIHN1YnBvb2wgJ3VzZWQgcGFnZScgY291bnQgKGRvd24gZm9yIGdldCwgdXAgZm9yIHB1dCkuICBOb3JtYWxseSxcXG4tdGhleSByZXR1cm4gdGhlIHNhbWUgdmFsdWUgdGhhdCB3YXMgcGFzc2VkIG9yIGFuIGVycm9yIGlmIG5vdCBlbm91Z2ggcGFnZXNcXG4tZXhpc3QgaW4gdGhlIHN1YnBvb2wuXFxuLVxcbi1Ib3dldmVyLCBpZiByZXNlcnZlcyBhcmUgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sIGEgcmV0dXJuIHZhbHVlIGxlc3NcXG4tdGhhbiB0aGUgcGFzc2VkIHZhbHVlIG1heSBiZSByZXR1cm5lZC4gIFRoaXMgcmV0dXJuIHZhbHVlIGluZGljYXRlcyB0aGVcXG4tbnVtYmVyIG9mIGFkZGl0aW9uYWwgZ2xvYmFsIHBvb2wgYWRqdXN0bWVudHMgd2hpY2ggbXVzdCBiZSBtYWRlLiAgRm9yIGV4YW1wbGUsXFxuLXN1cHBvc2UgYSBzdWJwb29sIGNvbnRhaW5zIDMgcmVzZXJ2ZWQgaHVnZSBwYWdlcyBhbmQgc29tZW9uZSBhc2tzIGZvciA1Llxcbi1UaGUgMyByZXNlcnZlZCBwYWdlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHN1YnBvb2wgY2FuIGJlIHVzZWQgdG8gc2F0aXNmeSBwYXJ0XFxuLW9mIHRoZSByZXF1ZXN0LiAgQnV0LCAyIHBhZ2VzIG11c3QgYmUgb2J0YWluZWQgZnJvbSB0aGUgZ2xvYmFsIHBvb2xzLiAgVG9cXG4tcmVsYXkgdGhpcyBpbmZvcm1hdGlvbiB0byB0aGUgY2FsbGVyLCB0aGUgdmFsdWUgMiBpcyByZXR1cm5lZC4gIFRoZSBjYWxsZXJcXG4taXMgdGhlbiByZXNwb25zaWJsZSBmb3IgYXR0ZW1wdGluZyB0byBvYnRhaW4gdGhlIGFkZGl0aW9uYWwgdHdvIHBhZ2VzIGZyb21cXG4tdGhlIGdsb2JhbCBwb29scy5cXG4tXFxuK2h1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygpIHVzZSB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMgcGFzc2VkIHRvIGFkanVzdFxcbit0aGUgc3VicG9vbCAndXNlZCBwYWdlJyBjb3VudC5cXG4gXFxuIENPVyBhbmQgUmVzZXJ2YXRpb25zXFxuID09PT09PT09PT09PT09PT09PT09XFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0IGIvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcXG5pbmRleCAyMDk0N2Y4YmQwNjU0Li5hZTFmMWYzMTQ3N2ZjIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcXG5AQCAtMjQ2LDE1ICsyNDYsOCBAQCBodWdlcGFnZV9zdWJwb29s55qEbWluX2hwYWdlc+Wtl+auteS4reiiq+i3n+i4quOAguWcqOaMgui9veaXtu+8jGh1Z2V0bGJfYWNjdF9tZVxcbiDooqvosIPnlKjku6XpooTnlZnmjIflrprmlbDph4/nmoTlt6jpobXjgILlpoLmnpzlroPku6zkuI3og73ooqvpooTnlZnvvIzmjILovb3lsLHkvJrlpLHotKXjgIJcXG4gXFxuIOW9k+S7juWtkOaxoOS4reiOt+WPluaIlumHiuaUvumhtemdouaXtu+8jOS8muiwg+eUqGh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygp5Ye95pWw44CCXFxuLWh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlc+iiq+S8oOmAkue7meW3qOmhteaVsOmHj++8jOS7peatpOadpeiwg+aVtOWtkOaxoOeahCDigJzlt7LnlKjpobXpnaLigJ0g6K6h5pWwXFxuLe+8iGdldOS4uuS4i+mZje+8jHB1dOS4uuS4iuWNh++8ieOAgumAmuW4uOaDheWGteS4i++8jOWmguaenOWtkOaxoOS4reayoeaciei2s+Wkn+eahOmhtemdou+8jOWug+S7rOS8mui/lOWbnuS4juS8oOmAkueahOebuOWQjOeahOWAvOaIllxcbi3kuIDkuKrplJnor6/jgIJcXG4tXFxuLeeEtuiAjO+8jOWmguaenOmihOeVmeS4juWtkOaxoOebuOWFs+iBlO+8jOWPr+iDveS8mui/lOWbnuS4gOS4quWwj+S6juS8oOmAkuWAvOeahOi/lOWbnuWAvOOAgui/meS4qui/lOWbnuWAvOihqOekuuW/hemhu+i/m+ihjOeahOmineWkluWFqOWxgFxcbi3msaDosIPmlbTnmoTmlbDph4/jgILkvovlpoLvvIzlgYforr7kuIDkuKrlrZDmsaDljIXlkKsz5Liq6aKE55WZ55qE5beo6aG177yM5pyJ5Lq66KaB5rGCNeS4quOAguS4juWtkOaxoOebuOWFs+eahDPkuKrpooTnlZnpobXlj6/ku6XnlKjmnaVcXG4t5ruh6Laz6YOo5YiG6K+35rGC44CC5L2G5piv77yM5b+F6aG75LuO5YWo5bGA5rGg5Lit6I635b6XMuS4qumhtemdouOAguS4uuS6huWQkeiwg+eUqOiAhei9rOi+vui/meS4gOS/oeaBr++8jOWwhui/lOWbnuWAvDLjgILnhLblkI7vvIzosIPnlKhcXG4t6ICF6KaB6LSf6LSj5LuO5YWo5bGA5rGg5Lit6I635Y+W5Y+m5aSW5Lik5Liq6aG16Z2i44CCXFxuLVxcbivlroPku6zotJ/otKPmiYDmnInlrZDmsaDnmoTnu5/orqHmoLjnrpfvvIzlubbot5/ouKrkuI7lrZDmsaDnm7jlhbPogZTnmoTpooTnlZnjgIJcXG4raHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzKCnlh73mlbDkvb/nlKjkvKDlhaXnmoTlt6jpobXmlbDph4/mnaXosIPmlbTlrZDmsaDnmoTigJzlt7LnlKjpobXpnaLigJ3orqHmlbDjgIJcXG4gXFxuIENPV+WSjOmihOeVmVxcbiA9PT09PT09PT09XFxuZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcXG5pbmRleCA3NjExYTg0NzBlYTI2Li41MTEzZjc0M2Y2ZmM3IDEwMDY0NFxcbi0tLSBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXFxuKysrIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcXG5AQCAtMTEwOSw4ICsxMTA5LDEyIEBAIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXFxuIFxcbiBcXHRcXHRcXHRzcGluX2xvY2tfaXJxKFxcdTAwMjZzYmluZm8tXFx1MDAzZXNwb29sLVxcdTAwM2Vsb2NrKTtcXG4gXFx0XFx0XFx0YnVmLVxcdTAwM2VmX2Jsb2NrcyA9IHNiaW5mby1cXHUwMDNlc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXM7XFxuLVxcdFxcdFxcdGZyZWVfcGFnZXMgPSBzYmluZm8tXFx1MDAzZXNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzXFxuLVxcdFxcdFxcdFxcdC0gc2JpbmZvLVxcdTAwM2VzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXM7XFxuK1xcdFxcdFxcdGlmIChzYmluZm8tXFx1MDAzZXNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzID09IC0xKSB7XFxuK1xcdFxcdFxcdFxcdGZyZWVfcGFnZXMgPSAtMTtcXG4rXFx0XFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0XFx0ZnJlZV9wYWdlcyA9IHNiaW5mby1cXHUwMDNlc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgLVxcbitcXHRcXHRcXHRcXHRcXHQgICAgIHNiaW5mby1cXHUwMDNlc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzO1xcbitcXHRcXHRcXHR9XFxuIFxcdFxcdFxcdGJ1Zi1cXHUwMDNlZl9iYXZhaWwgPSBidWYtXFx1MDAzZWZfYmZyZWUgPSBmcmVlX3BhZ2VzO1xcbiBcXHRcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNnNiaW5mby1cXHUwMDNlc3Bvb2wtXFx1MDAzZWxvY2spO1xcbiBcXHRcXHRcXHRidWYtXFx1MDAzZWZfZmlsZXMgPSBzYmluZm8tXFx1MDAzZW1heF9pbm9kZXM7XFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG5pbmRleCAxNmM0YzRjYWExMjZjLi40NTUxZmYzMDIzNjQwIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9odWdldGxiLmhcXG5AQCAtMzksOCArMzksOCBAQCBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCB7XFxuIFxcdHNwaW5sb2NrX3QgbG9jaztcXG4gXFx0bG9uZyBjb3VudDtcXG4gXFx0bG9uZyBtYXhfaHBhZ2VzO1xcdC8qIE1heGltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtYXhpbXVtLiAqL1xcbi1cXHRsb25nIHVzZWRfaHBhZ2VzO1xcdC8qIFVzZWQgY291bnQgYWdhaW5zdCBtYXhpbXVtLCBpbmNsdWRlcyAqL1xcbi1cXHRcXHRcXHRcXHQvKiBib3RoIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovXFxuK1xcdGxvbmcgdXNlZF9ocGFnZXM7XFx0LyogVXNlZCBwYWdlIGNvdW50LCBpbmNsdWRlcyBib3RoICovXFxuK1xcdFxcdFxcdFxcdC8qIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovXFxuIFxcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZTtcXG4gXFx0bG9uZyBtaW5faHBhZ2VzO1xcdC8qIE1pbmltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtaW5pbXVtLiAqL1xcbiBcXHRsb25nIHJzdl9ocGFnZXM7XFx0LyogUGFnZXMgcmVzZXJ2ZWQgYWdhaW5zdCBnbG9iYWwgcG9vbCB0byAqL1xcbmRpZmYgLS1naXQgYS9tbS9odWdldGxiLmMgYi9tbS9odWdldGxiLmNcXG5pbmRleCA3ODU3NzI4NDU3OTUyLi5lMjRmODU2Yzk0OWMzIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2V0bGIuY1xcbisrKyBiL21tL2h1Z2V0bGIuY1xcbkBAIC0xMzAsMTIgKzEzMCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzdWJwb29sX2lzX2ZyZWUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxcbiB7XFxuIFxcdGlmIChzcG9vbC1cXHUwMDNlY291bnQpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4tXFx0aWYgKHNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxcbi1cXHRcXHRyZXR1cm4gc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzID09IDA7XFxuLVxcdGlmIChzcG9vbC1cXHUwMDNlbWluX2hwYWdlcyAhPSAtMSlcXG4tXFx0XFx0cmV0dXJuIHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzID09IHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzO1xcbiBcXG4tXFx0cmV0dXJuIHRydWU7XFxuK1xcdHJldHVybiBzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcXG4gfVxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbkBAIC0xOTMsMTMgKzE4OSwxOCBAQCB2b2lkIGh1Z2VwYWdlX3B1dF9zdWJwb29sKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcXG4gXFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbiB9XFxuIFxcbi0vKlxcbi0gKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGFsbG9jYXRpbmcgYW5kIHJlc2VydmluZyBwYWdlcy5cXG4tICogUmV0dXJuIC1FTk9NRU0gaWYgdGhlcmUgYXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIHRvIHNhdGlzZnkgdGhlXFxuLSAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZVxcbi0gKiBnbG9iYWwgcG9vbHMgbXVzdCBiZSBhZGp1c3RlZCAodXB3YXJkKS4gIFRoZSByZXR1cm5lZCB2YWx1ZSBtYXlcXG4tICogb25seSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgcGFzc2VkIHZhbHVlIChkZWx0YSkgaW4gdGhlIGNhc2Ugd2hlcmVcXG4tICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXFxuKy8qKlxcbisgKiBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyAtIEdldCBwYWdlcyBmcm9tIGEgc3VicG9vbFxcbisgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKVxcbisgKiBAZGVsdGE6IG51bWJlciBvZiBwYWdlcyB0byBhbGxvY2F0ZSBvciByZXNlcnZlXFxuKyAqXFxuKyAqIENoZWNrIGFuZCB1cGRhdGUgc3VicG9vbCBwYWdlIHVzYWdlIGNvdW50cyB3aGVuIGFsbG9jYXRpbmcgb3JcXG4rICogcmVzZXJ2aW5nIEBkZWx0YSBodWdlcGFnZXMuXFxuKyAqXFxuKyAqIENvbnRleHQ6IFRha2VzIHNwb29sLVxcdTAwM2Vsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnEoKS5cXG4rICogUmV0dXJuOiBOb24tbmVnYXRpdmUgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IGNhbm5vdCBiZVxcbisgKiAgICAgICAgIHNhdGlzZmllZCBieSB0aGUgc3VicG9vbCwgb3IgLUVOT01FTSBpZiB0aGUgc3VicG9vbCBtYXhpbXVtXFxuKyAqICAgICAgICAgbGltaXQgd291bGQgYmUgZXhjZWVkZWQuXFxuICAqL1xcbiBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxuIFxcdFxcdFxcdFxcdCAgICAgIGxvbmcgZGVsdGEpXFxuQEAgLTIxMSwxNSArMjEyLDE0IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcXG4gXFxuIFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnNwb29sLVxcdTAwM2Vsb2NrKTtcXG4gXFxuLVxcdGlmIChzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSkge1xcdFxcdC8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovXFxuLVxcdFxcdGlmICgoc3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzICsgZGVsdGEpIFxcdTAwM2M9IHNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzKVxcbi1cXHRcXHRcXHRzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgKz0gZGVsdGE7XFxuLVxcdFxcdGVsc2Uge1xcbi1cXHRcXHRcXHRyZXQgPSAtRU5PTUVNO1xcbi1cXHRcXHRcXHRnb3RvIHVubG9ja19yZXQ7XFxuLVxcdFxcdH1cXG4rXFx0aWYgKHNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzICE9IC0xIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICBzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgKyBkZWx0YSBcXHUwMDNlIHNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9NRU07XFxuK1xcdFxcdGdvdG8gdW5sb2NrX3JldDtcXG4gXFx0fVxcbiBcXG4rXFx0c3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzICs9IGRlbHRhO1xcbitcXG4gXFx0LyogbWluaW11bSBzaXplIGFjY291bnRpbmcgKi9cXG4gXFx0aWYgKHNwb29sLVxcdTAwM2VtaW5faHBhZ2VzICE9IC0xIFxcdTAwMjZcXHUwMDI2IHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzKSB7XFxuIFxcdFxcdGlmIChkZWx0YSBcXHUwMDNlIHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzKSB7XFxuQEAgLTI0MCwxMSArMjQwLDE5IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4tLypcXG4tICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBmcmVlaW5nIGFuZCB1bnJlc2VydmluZyBwYWdlcy5cXG4tICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZ2xvYmFsIHBhZ2UgcmVzZXJ2YXRpb25zIHRoYXQgbXVzdCBiZSBkcm9wcGVkLlxcbi0gKiBUaGUgcmV0dXJuIHZhbHVlIG1heSBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKVxcbi0gKiBpbiB0aGUgY2FzZSB3aGVyZSBhIHN1YnBvb2wgbWluaW11bSBzaXplIG11c3QgYmUgbWFpbnRhaW5lZC5cXG4rLyoqXFxuKyAqIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzIC0gUmVsZWFzZSBwYWdlcyBiYWNrIHRvIGEgc3VicG9vbFxcbisgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKVxcbisgKiBAZGVsdGE6IG51bWJlciBvZiBwYWdlcyB0byBmcmVlIG9yIHVucmVzZXJ2ZVxcbisgKlxcbisgKiBDaGVjayBhbmQgdXBkYXRlIHN1YnBvb2wgcGFnZSB1c2FnZSBjb3VudHMgd2hlbiBmcmVlaW5nIG9yXFxuKyAqIHVucmVzZXJ2aW5nIEBkZWx0YSBodWdlcGFnZXMuXFxuKyAqXFxuKyAqIENvbnRleHQ6IFRha2VzIHNwb29sLVxcdTAwM2Vsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnFzYXZlKCkuIE1heSByZWxlYXNlXFxuKyAqICAgICAgICAgIGFuZCBmcmVlIEBzcG9vbCBpZiBpdHMgdXNhZ2UgY291bnQgYW5kIHJlZmVyZW5jZXMgcmVhY2hcXG4rICogICAgICAgICAgemVyby5cXG4rICogUmV0dXJuOiBOb24tbmVnYXRpdmUgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IHRoZSBzdWJwb29sIGNhbm5vdFxcbisgKiAgICAgICAgIGFic29yYi5cXG4gICovXFxuIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIGxvbmcgZGVsdGEpXFxuQEAgLTI1NywxOSArMjY1LDI0IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcXG4gXFxuIFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzcG9vbC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbiBcXG4tXFx0aWYgKHNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxcdFxcdC8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovXFxuLVxcdFxcdHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyAtPSBkZWx0YTtcXG4rXFx0c3Bvb2wtXFx1MDAzZXVzZWRfaHBhZ2VzIC09IGRlbHRhO1xcbiBcXG4gXFx0IC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovXFxuIFxcdGlmIChzcG9vbC1cXHUwMDNlbWluX2hwYWdlcyAhPSAtMSBcXHUwMDI2XFx1MDAyNiBzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXMgXFx1MDAzYyBzcG9vbC1cXHUwMDNlbWluX2hwYWdlcykge1xcbi1cXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgKyBkZWx0YSBcXHUwMDNjPSBzcG9vbC1cXHUwMDNlbWluX2hwYWdlcylcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogbGltaXQgaXMgdGhlIG1heGltdW0gbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0XFxuK1xcdFxcdCAqIGNhbiBiZSByZXN0b3JlZCB0byB0aGlzIHN1YnBvb2wuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRsb25nIGxpbWl0ID0gc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXMgLSBzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXM7XFxuK1xcbitcXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgKyBkZWx0YSBcXHUwMDNjPSBsaW1pdClcXG4gXFx0XFx0XFx0cmV0ID0gMDtcXG4gXFx0XFx0ZWxzZVxcbi1cXHRcXHRcXHRyZXQgPSBzcG9vbC1cXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIC0gc3Bvb2wtXFx1MDAzZW1pbl9ocGFnZXM7XFxuK1xcdFxcdFxcdHJldCA9IHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzICsgZGVsdGEgLSBsaW1pdDtcXG4gXFxuIFxcdFxcdHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzICs9IGRlbHRhO1xcbi1cXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgXFx1MDAzZSBzcG9vbC1cXHUwMDNlbWluX2hwYWdlcylcXG4tXFx0XFx0XFx0c3Bvb2wtXFx1MDAzZXJzdl9ocGFnZXMgPSBzcG9vbC1cXHUwMDNlbWluX2hwYWdlcztcXG4rXFx0XFx0aWYgKHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzIFxcdTAwM2UgbGltaXQpXFxuK1xcdFxcdFxcdHNwb29sLVxcdTAwM2Vyc3ZfaHBhZ2VzID0gbGltaXQ7XFxuIFxcdH1cXG4gXFxuIFxcdC8qXFxuQEAgLTI5NDIsNyArMjk1NSw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF92bWEodm1hKTtcXG4gXFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV92bWEodm1hKTtcXG4gXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4tXFx0bG9uZyByZXR2YWwsIGdibF9jaGcsIGdibF9yZXNlcnZlO1xcbitcXHRsb25nIHJldHZhbCwgZ2JsX3Jlc3ZfZ2V0O1xcbiBcXHRtYXBfY2hnX3N0YXRlIG1hcF9jaGc7XFxuIFxcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgbXBvbGk7XFxuIFxcdGdmcF90IGdmcCA9IGh0bGJfYWxsb2NfbWFzayhoKTtcXG5AQCAtMjk4MSw4ICsyOTk0LDggQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHQgKiBPciBpZiBpdCBjYW4gZ2V0IG9uZSBmcm9tIHRoZSBwb29sIHJlc2VydmF0aW9uIGRpcmVjdGx5LlxcbiBcXHQgKi9cXG4gXFx0aWYgKG1hcF9jaGcpIHtcXG4tXFx0XFx0Z2JsX2NoZyA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTtcXG4tXFx0XFx0aWYgKGdibF9jaGcgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTtcXG4rXFx0XFx0aWYgKGdibF9yZXN2X2dldCBcXHUwMDNjIDApIHtcXG4gXFx0XFx0XFx0cmV0ID0gLUVOT1NQQztcXG4gXFx0XFx0XFx0Z290byBvdXRfZW5kX3Jlc2VydmF0aW9uO1xcbiBcXHRcXHR9XFxuQEAgLTI5OTEsNyArMzAwNCw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0XFx0ICogSWYgd2UgaGF2ZSB0aGUgdm1hIHJlc2VydmF0aW9uIHJlYWR5LCBubyBuZWVkIGZvciBleHRyYVxcbiBcXHRcXHQgKiBnbG9iYWwgcmVzZXJ2YXRpb24uXFxuIFxcdFxcdCAqL1xcbi1cXHRcXHRnYmxfY2hnID0gMDtcXG4rXFx0XFx0Z2JsX3Jlc3ZfZ2V0ID0gMDtcXG4gXFx0fVxcbiBcXG4gXFx0LypcXG5AQCAtMzAwMiwxMCArMzAxNSwxMCBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuIFxcdFxcdGFsbG9jX2ZsYWdzIHw9IEhVR0VUTEJfQUxMT0NfQ0hBUkdfQ0dST1VQX1JTVkQ7XFxuIFxcbiBcXHQvKlxcbi1cXHQgKiBnYmxfY2hnID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXFxuK1xcdCAqIGdibF9yZXN2X2dldCA9PSAwIGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cyBmb3IgdGhpc1xcbiBcXHQgKiBhbGxvY2F0aW9uLCBzbyB0cnkgdG8gdXNlIGl0LlxcbiBcXHQgKi9cXG4tXFx0aWYgKGdibF9jaGcgPT0gMClcXG4rXFx0aWYgKGdibF9yZXN2X2dldCA9PSAwKVxcbiBcXHRcXHRhbGxvY19mbGFncyB8PSBIVUdFVExCX0FMTE9DX1VTRV9HTE9CQUxfUkVTRVJWQVRJT05TO1xcbiBcXG4gXFx0LyogVGFrZXMgcmVmZXJlbmNlIG9uIG1wb2wuICovXFxuQEAgLTMwNTksMTMgKzMwNzIsMTAgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRyZXR1cm4gZm9saW87XFxuIFxcbiBvdXRfc3VicG9vbF9wdXQ6XFxuLVxcdC8qXFxuLVxcdCAqIHB1dCBwYWdlIHRvIHN1YnBvb2wgaWZmIHRoZSBxdW90YSBvZiBzdWJwb29sJ3MgcnN2X2hwYWdlcyBpcyB1c2VkXFxuLVxcdCAqIGR1cmluZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcy5cXG4tXFx0ICovXFxuLVxcdGlmIChtYXBfY2hnIFxcdTAwMjZcXHUwMDI2ICFnYmxfY2hnKSB7XFxuLVxcdFxcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xcbi1cXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XFxuK1xcdGlmIChtYXBfY2hnKSB7XFxuK1xcdFxcdGxvbmcgZ2JsX3Jlc3ZfcHV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xcbitcXG4rXFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQpO1xcbiBcXHR9XFxuIFxcbiBvdXRfZW5kX3Jlc2VydmF0aW9uOlxcbkBAIC02NjYxLDEyICs2NjcxLDE0IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRcXHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXFxuIHtcXG4tXFx0bG9uZyBjaGcgPSAtMSwgYWRkID0gLTEsIHNwb29sX3Jlc3YsIGdibF9yZXN2O1xcbitcXHRsb25nIGNoZyA9IC0xLCBhZGQgPSAtMTtcXG4gXFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XFxuIFxcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfaW5vZGUoaW5vZGUpO1xcbiBcXHRzdHJ1Y3QgcmVzdl9tYXAgKnJlc3ZfbWFwO1xcbiBcXHRzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2cgPSBOVUxMO1xcbi1cXHRsb25nIGdibF9yZXNlcnZlLCByZWdpb25zX25lZWRlZCA9IDA7XFxuK1xcdGxvbmcgcmVnaW9uc19uZWVkZWQgPSAwO1xcbitcXHRsb25nIGdibF9yZXN2X2dldDtcXG4rXFx0bG9uZyBnYmxfcmVzdl9wdXQ7XFxuIFxcdGludCBlcnI7XFxuIFxcbiBcXHQvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi9cXG5AQCAtNjc0MSw5ICs2NzUzLDkgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0ICogdGhlIHN1YnBvb2wgaGFzIGEgbWluaW11bSBzaXplLCB0aGVyZSBtYXkgYmUgc29tZSBnbG9iYWxcXG4gXFx0ICogcmVzZXJ2YXRpb25zIGFscmVhZHkgaW4gcGxhY2UgKGdibF9yZXNlcnZlKS5cXG4gXFx0ICovXFxuLVxcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIGNoZyk7XFxuLVxcdGlmIChnYmxfcmVzZXJ2ZSBcXHUwMDNjIDApIHtcXG4tXFx0XFx0ZXJyID0gZ2JsX3Jlc2VydmU7XFxuK1xcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpO1xcbitcXHRpZiAoZ2JsX3Jlc3ZfZ2V0IFxcdTAwM2MgMCkge1xcbitcXHRcXHRlcnIgPSBnYmxfcmVzdl9nZXQ7XFxuIFxcdFxcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDtcXG4gXFx0fVxcbiBcXG5AQCAtNjc1MSw3ICs2NzYzLDcgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0ICogQ2hlY2sgZW5vdWdoIGh1Z2VwYWdlcyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgcmVzZXJ2YXRpb24uXFxuIFxcdCAqIEhhbmQgdGhlIHBhZ2VzIGJhY2sgdG8gdGhlIHN1YnBvb2wgaWYgdGhlcmUgYXJlIG5vdFxcbiBcXHQgKi9cXG4tXFx0ZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzZXJ2ZSk7XFxuK1xcdGVyciA9IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0KTtcXG4gXFx0aWYgKGVyciBcXHUwMDNjIDApXFxuIFxcdFxcdGdvdG8gb3V0X3B1dF9wYWdlcztcXG4gXFxuQEAgLTY3NzAsNyArNjc4Miw3IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXFxuIFxcdFxcdGFkZCA9IHJlZ2lvbl9hZGQocmVzdl9tYXAsIGZyb20sIHRvLCByZWdpb25zX25lZWRlZCwgaCwgaF9jZyk7XFxuIFxcbiBcXHRcXHRpZiAodW5saWtlbHkoYWRkIFxcdTAwM2MgMCkpIHtcXG4tXFx0XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xcbitcXHRcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdl9nZXQpO1xcbiBcXHRcXHRcXHRlcnIgPSBhZGQ7XFxuIFxcdFxcdFxcdGdvdG8gb3V0X3B1dF9wYWdlcztcXG4gXFx0XFx0fSBlbHNlIGlmICh1bmxpa2VseShjaGcgXFx1MDAzZSBhZGQpKSB7XFxuQEAgLTY4MDYsMjYgKzY4MTgsMjEgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4gXFx0fVxcbiBcXHRyZXR1cm4gY2hnO1xcbiBcXG4tb3V0X3B1dF9wYWdlczpcXG4tXFx0c3Bvb2xfcmVzdiA9IGNoZyAtIGdibF9yZXNlcnZlO1xcbi1cXHRpZiAoc3Bvb2xfcmVzdikge1xcbi1cXHRcXHQvKiBwdXQgc3ViIHBvb2wncyByZXNlcnZhdGlvbiBiYWNrLCBjaGcgLSBnYmxfcmVzZXJ2ZSAqL1xcbi1cXHRcXHRnYmxfcmVzdiA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBzcG9vbF9yZXN2KTtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogc3VicG9vbCdzIHJlc2VydmVkIHBhZ2VzIGNhbiBub3QgYmUgcHV0IGJhY2sgZHVlIHRvIHJhY2UsXFxuLVxcdFxcdCAqIHJldHVybiB0byBoc3RhdGUuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdik7XFxuLVxcdH1cXG4tXFx0LyogUmVzdG9yZSB1c2VkX2hwYWdlcyBmb3IgcGFnZXMgdGhhdCBmYWlsZWQgZ2xvYmFsIHJlc2VydmF0aW9uICovXFxuLVxcdGlmIChnYmxfcmVzZXJ2ZSBcXHUwMDI2XFx1MDAyNiBzcG9vbCkge1xcbi1cXHRcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbisgb3V0X3B1dF9wYWdlczpcXG4rXFx0LypcXG4rXFx0ICogUmV0dXJuIGFsbCB0aGF0IHdhcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc3VicG9vbCwgbGV0IHN1YnBvb2xcXG4rXFx0ICogdGVsbCB1cyB0aGUgbmV3IG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdCBuZWVkIHRvIGJlXFxuK1xcdCAqIHJldHVybmVkIHRvIHRoZSBnbG9iYWwgcG9vbC5cXG4rXFx0ICovXFxuK1xcdGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBjaGcpO1xcbitcXHQvKlxcbitcXHQgKiBUaGVyZSBtYXkgYmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZlxcbitcXHQgKiByZXNlcnZhdGlvbnMgdG8gY29uc3VtZSBhbmQgdGhlIG51bWJlciB0byByZXN0b3JlIG5vdyBpZlxcbitcXHQgKiB0aGVyZSBhcmUgbXVsdGlwbGUgdGhyZWFkcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBzdWJwb29sIC1cXG4rXFx0ICogcmVzdG9yZSB0aGUgZGlmZmVyZW5jZS5cXG4rXFx0ICovXFxuK1xcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0IC0gZ2JsX3Jlc3ZfcHV0KTtcXG4gXFxuLVxcdFxcdHNwaW5fbG9ja19pcnFzYXZlKFxcdTAwMjZzcG9vbC1cXHUwMDNlbG9jaywgZmxhZ3MpO1xcbi1cXHRcXHRpZiAoc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXFxuLVxcdFxcdFxcdHNwb29sLVxcdTAwM2V1c2VkX2hwYWdlcyAtPSBnYmxfcmVzZXJ2ZTtcXG4tXFx0XFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbi1cXHR9XFxuIG91dF91bmNoYXJnZV9jZ3JvdXA6XFxuIFxcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1ODozNC4yODM5MTIxOTdaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjQ1OTIzNDU5MzU0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1wiLFxuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiLFxuICAgIFwiaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNcIixcbiAgICBcImh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzXCIsXG4gICAgXCJodWdldGxiZnNfc3RhdGZzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3VicG9vbCBwYWdlIGFjY291bnRpbmcsIHJlc2VydmF0aW9uIGNhbGN1bGF0aW9uLCBhbmQgZXJyb3IgcmVjb3ZlcnkgbG9naWMgaW4gaHVnZXRsYmZzIGFuZCBjb3JlIGh1Z2V0bGIgbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMgKGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLCBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcywgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzLCBhbGxvY19odWdldGxiX2ZvbGlvLCBodWdldGxiZnNfc3RhdGZzKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5c2NhbGxzIHN1Y2ggYXMgbW1hcCwgb3BlbiwgZmFsbG9jYXRlLCBhbmQgc3RhdGZzIG9uIGh1Z2V0bGJmcywgbWFraW5nIHRoaXMgY29kZSB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIgYW5kIHNlY3VyaXR5IGVuZ2luZWVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzc1xudG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5UaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLFxuYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy5cblxuLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURTpcbiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZFxuICBlbnZpcm9ubWVudHMgKEdDRSBvciBRRU1VLCB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgZGV2aWNlcyBsaWtlIFVTQiBnYWRnZXRzLCBuZXRkZXYsIHR1bi90YXApLlxuICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsXG4gIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy5cblxuLSBETyBOT1QgQkxJTkRMWSBUUlVTVCBcIk5PIEZVTkNUSU9OQUwgQ0hBTkdFXCIgKE5GQ0kpIE9SIFwiUkVGQUNUT1JJTkdcIiBDTEFJTVM6XG4gIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgXCJjbGVhbnVwc1wiLCBcInJlZmFjdG9yaW5nc1wiLCBvciBzdGF0ZVxuICBcIk5vIGZ1bmN0aW9uYWwgY2hhbmdlIGludGVuZGVkXCIuIERvIE5PVCB0YWtlIHRoZXNlIGNsYWltcyBhdCBmYWNlIHZhbHVlLlxuICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnRcbiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuXG4gIElmIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUgaXMgbW9kaWZpZWQgb3IgcmVmYWN0b3JlZCwgaXQgTVVTVCBiZSBmdXp6ZWQuXG5cbi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6XG4gIFdoZW4gYSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzIHJ1bnRpbWUgY2hlY2tzIG9yIGFzc2VydGlvbnMgKGUuZy4sIFdBUk5fT04qLCBWTV9XQVJOX09OKixcbiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuXG4gIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXJcbiAgYW4gdW51c3VhbCBzZXF1ZW5jZSBvZiBvcGVyYXRpb25zIGNhbiB2aW9sYXRlIGl0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMi4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPWZhbHNlIChORUdBVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOlxuXG4tIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6XG4gICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLlxuICAqIFVzZXItc3BhY2UgZGlyZWN0b3JpZXMsIHNlbGYtdGVzdHMsIHNhbXBsZXMsIG9yIHNjcmlwdHMgKGUuZy4sIHRvb2xzLywgc2FtcGxlcy8sIHNjcmlwdHMvLCB1c3IvKVxuICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy5cbiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50c1xuICAgIHRoYXQgZG8gbm90IGFsdGVyIGNvbnRyb2wgZmxvdyBvciBkYXRhIHN0cnVjdHVyZXMuXG4gICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLlxuLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6XG4gICogVmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoZXMsIFNtYXJ0TklDcywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczpcbiAgKiBEcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzICgucmVtb3ZlLCAuc2h1dGRvd24sIHBjaV91bnJlZ2lzdGVyX2RyaXZlcikgZXhlY3V0ZWQgb25seSBkdXJpbmdcbiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy5cbiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4zLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzpcbi0gQ29yZSBTdWJzeXN0ZW1zOlxuICAqIEFueSBsb2dpYyBtb2RpZmljYXRpb25zIGluIG1lbW9yeSBtYW5hZ2VtZW50IChtbS8pLCBzeW5jaHJvbml6YXRpb24vbG9ja2luZyAoa2VybmVsL2xvY2tpbmcvKSxcbiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuXG4tIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczpcbiAgKiBBbnkgcmVzdHJ1Y3R1cmluZyBvZiByZWFjaGFibGUgZGF0YSBzdHJ1Y3R1cmVzLCBoZWxwZXIgYWJzdHJhY3Rpb25zLCBvciBhbGdvcml0aG0gZmxvd3MuXG4tIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczpcbiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuXG4tIFJlYWNoYWJsZSBEcml2ZXJzIGFuZCBQcm90b2NvbHM6XG4gICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuV2hlbiBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IG11c3QgZXh0cmFjdCBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIGludG8gRm9jdXNTeW1ib2xzIHRvIGd1aWRlIHRoZSBmdXp6ZXI6XG5cbi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOlxuICBEbyBOT1QgbGlzdCBnZW5lcmljLCB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYWxsZWQgYnkgYWxtb3N0IGV2ZXJ5IHByb2dyYW0gaW4gdGhlIGNvcnB1c1xuICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdFxuICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS5cbiAgTGlzdGluZyB1YmlxdWl0b3VzIGZ1bmN0aW9ucyBjYXVzZXMgdGhlIGZ1enplciB0byBjbGFzc2lmeSB0aG91c2FuZHMgb2YgdW5yZWxhdGVkIHRlc3RzIGFzIFwiZm9jdXNlZFwiLFxuICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuXG5cbi0gVEFSR0VUIFNQRUNJRklDIEZFQVRVUkUgTE9HSUMgQU5EIEVOVFJZUE9JTlRTOlxuICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHNcbiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuXG5cbi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOlxuICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrXG4gIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMgaW4gdm1saW51eCBhbmQgY2Fubm90IGJlIHRhcmdldGVkIGRpcmVjdGx5IGJ5IHN5bWJvbCBjb3ZlcmFnZSBmaWx0ZXJzLlxuICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXJcbiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlnc1xuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6XG4tIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4tIENoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncyBuZWVkZWQuXG4tIFN0cmlwIGFueSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA5YzNjNDUxODI4Y2M4NTgxZGNmMTRkMzA1OGEzYjc0ZjU2MjRiNjI3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBTZXAgMyAyMzo1ODozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QgYi9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG5pbmRleCBhNDkxMTVkYjE4Yzc2Li5kMjQ0NTgzZmRjYmMzIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuQEAgLTMxNCwyMSArMzE0LDggQEAgaHVnZSBwYWdlcy4gIElmIHRoZXkgY2FuIG5vdCBiZSByZXNlcnZlZCwgdGhlIG1vdW50IGZhaWxzLlxuIFRoZSByb3V0aW5lcyBodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKSBhcmUgY2FsbGVkIHdoZW4gcGFnZXMgYXJlXG4gb2J0YWluZWQgZnJvbSBvciByZWxlYXNlZCBiYWNrIHRvIGEgc3VicG9vbC4gIFRoZXkgcGVyZm9ybSBhbGwgc3VicG9vbFxuIGFjY291bnRpbmcsIGFuZCB0cmFjayBhbnkgcmVzZXJ2YXRpb25zIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbC5cbi1odWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMgYXJlIHBhc3NlZCB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMgYnkgd2hpY2hcbi10byBhZGp1c3QgdGhlIHN1YnBvb2wgJ3VzZWQgcGFnZScgY291bnQgKGRvd24gZm9yIGdldCwgdXAgZm9yIHB1dCkuICBOb3JtYWxseSxcbi10aGV5IHJldHVybiB0aGUgc2FtZSB2YWx1ZSB0aGF0IHdhcyBwYXNzZWQgb3IgYW4gZXJyb3IgaWYgbm90IGVub3VnaCBwYWdlc1xuLWV4aXN0IGluIHRoZSBzdWJwb29sLlxuLVxuLUhvd2V2ZXIsIGlmIHJlc2VydmVzIGFyZSBhc3NvY2lhdGVkIHdpdGggdGhlIHN1YnBvb2wgYSByZXR1cm4gdmFsdWUgbGVzc1xuLXRoYW4gdGhlIHBhc3NlZCB2YWx1ZSBtYXkgYmUgcmV0dXJuZWQuICBUaGlzIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgdGhlXG4tbnVtYmVyIG9mIGFkZGl0aW9uYWwgZ2xvYmFsIHBvb2wgYWRqdXN0bWVudHMgd2hpY2ggbXVzdCBiZSBtYWRlLiAgRm9yIGV4YW1wbGUsXG4tc3VwcG9zZSBhIHN1YnBvb2wgY29udGFpbnMgMyByZXNlcnZlZCBodWdlIHBhZ2VzIGFuZCBzb21lb25lIGFza3MgZm9yIDUuXG4tVGhlIDMgcmVzZXJ2ZWQgcGFnZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sIGNhbiBiZSB1c2VkIHRvIHNhdGlzZnkgcGFydFxuLW9mIHRoZSByZXF1ZXN0LiAgQnV0LCAyIHBhZ2VzIG11c3QgYmUgb2J0YWluZWQgZnJvbSB0aGUgZ2xvYmFsIHBvb2xzLiAgVG9cbi1yZWxheSB0aGlzIGluZm9ybWF0aW9uIHRvIHRoZSBjYWxsZXIsIHRoZSB2YWx1ZSAyIGlzIHJldHVybmVkLiAgVGhlIGNhbGxlclxuLWlzIHRoZW4gcmVzcG9uc2libGUgZm9yIGF0dGVtcHRpbmcgdG8gb2J0YWluIHRoZSBhZGRpdGlvbmFsIHR3byBwYWdlcyBmcm9tXG4tdGhlIGdsb2JhbCBwb29scy5cbi1cbitodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKSB1c2UgdGhlIG51bWJlciBvZiBodWdlIHBhZ2VzIHBhc3NlZCB0byBhZGp1c3Rcbit0aGUgc3VicG9vbCAndXNlZCBwYWdlJyBjb3VudC5cbiBcbiBDT1cgYW5kIFJlc2VydmF0aW9uc1xuID09PT09PT09PT09PT09PT09PT09XG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3QgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuaW5kZXggMjA5NDdmOGJkMDY1NC4uYWUxZjFmMzE0NzdmYyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdFxuQEAgLTI0NiwxNSArMjQ2LDggQEAgaHVnZXBhZ2Vfc3VicG9vbOeahG1pbl9ocGFnZXPlrZfmrrXkuK3ooqvot5/ouKrjgILlnKjmjILovb3ml7bvvIxodWdldGxiX2FjY3RfbWVcbiDooqvosIPnlKjku6XpooTnlZnmjIflrprmlbDph4/nmoTlt6jpobXjgILlpoLmnpzlroPku6zkuI3og73ooqvpooTnlZnvvIzmjILovb3lsLHkvJrlpLHotKXjgIJcbiBcbiDlvZPku47lrZDmsaDkuK3ojrflj5bmiJbph4rmlL7pobXpnaLml7bvvIzkvJrosIPnlKhodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKeWHveaVsOOAglxuLWh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlc+iiq+S8oOmAkue7meW3qOmhteaVsOmHj++8jOS7peatpOadpeiwg+aVtOWtkOaxoOeahCDigJzlt7LnlKjpobXpnaLigJ0g6K6h5pWwXG4t77yIZ2V05Li65LiL6ZmN77yMcHV05Li65LiK5Y2H77yJ44CC6YCa5bi45oOF5Ya15LiL77yM5aaC5p6c5a2Q5rGg5Lit5rKh5pyJ6Laz5aSf55qE6aG16Z2i77yM5a6D5Lus5Lya6L+U5Zue5LiO5Lyg6YCS55qE55u45ZCM55qE5YC85oiWXG4t5LiA5Liq6ZSZ6K+v44CCXG4tXG4t54S26ICM77yM5aaC5p6c6aKE55WZ5LiO5a2Q5rGg55u45YWz6IGU77yM5Y+v6IO95Lya6L+U5Zue5LiA5Liq5bCP5LqO5Lyg6YCS5YC855qE6L+U5Zue5YC844CC6L+Z5Liq6L+U5Zue5YC86KGo56S65b+F6aG76L+b6KGM55qE6aKd5aSW5YWo5bGAXG4t5rGg6LCD5pW055qE5pWw6YeP44CC5L6L5aaC77yM5YGH6K6+5LiA5Liq5a2Q5rGg5YyF5ZCrM+S4qumihOeVmeeahOW3qOmhte+8jOacieS6uuimgeaxgjXkuKrjgILkuI7lrZDmsaDnm7jlhbPnmoQz5Liq6aKE55WZ6aG15Y+v5Lul55So5p2lXG4t5ruh6Laz6YOo5YiG6K+35rGC44CC5L2G5piv77yM5b+F6aG75LuO5YWo5bGA5rGg5Lit6I635b6XMuS4qumhtemdouOAguS4uuS6huWQkeiwg+eUqOiAhei9rOi+vui/meS4gOS/oeaBr++8jOWwhui/lOWbnuWAvDLjgILnhLblkI7vvIzosIPnlKhcbi3ogIXopoHotJ/otKPku47lhajlsYDmsaDkuK3ojrflj5blj6blpJbkuKTkuKrpobXpnaLjgIJcbi1cbivlroPku6zotJ/otKPmiYDmnInlrZDmsaDnmoTnu5/orqHmoLjnrpfvvIzlubbot5/ouKrkuI7lrZDmsaDnm7jlhbPogZTnmoTpooTnlZnjgIJcbitodWdlcGFnZV9zdWJwb29sX2dldC9wdXRfcGFnZXMoKeWHveaVsOS9v+eUqOS8oOWFpeeahOW3qOmhteaVsOmHj+adpeiwg+aVtOWtkOaxoOeahOKAnOW3sueUqOmhtemdouKAneiuoeaVsOOAglxuIFxuIENPV+WSjOmihOeVmVxuID09PT09PT09PT1cbmRpZmYgLS1naXQgYS9mcy9odWdldGxiZnMvaW5vZGUuYyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5pbmRleCA3NjExYTg0NzBlYTI2Li41MTEzZjc0M2Y2ZmM3IDEwMDY0NFxuLS0tIGEvZnMvaHVnZXRsYmZzL2lub2RlLmNcbisrKyBiL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jXG5AQCAtMTEwOSw4ICsxMTA5LDEyIEBAIHN0YXRpYyBpbnQgaHVnZXRsYmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXG4gXG4gXHRcdFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbG9jayk7XG4gXHRcdFx0YnVmLVx1MDAzZWZfYmxvY2tzID0gc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZW1heF9ocGFnZXM7XG4tXHRcdFx0ZnJlZV9wYWdlcyA9IHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzXG4tXHRcdFx0XHQtIHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcztcbitcdFx0XHRpZiAoc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZW1heF9ocGFnZXMgPT0gLTEpIHtcbitcdFx0XHRcdGZyZWVfcGFnZXMgPSAtMTtcbitcdFx0XHR9IGVsc2Uge1xuK1x0XHRcdFx0ZnJlZV9wYWdlcyA9IHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzIC1cbitcdFx0XHRcdFx0ICAgICBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4rXHRcdFx0fVxuIFx0XHRcdGJ1Zi1cdTAwM2VmX2JhdmFpbCA9IGJ1Zi1cdTAwM2VmX2JmcmVlID0gZnJlZV9wYWdlcztcbiBcdFx0XHRzcGluX3VubG9ja19pcnEoXHUwMDI2c2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZWxvY2spO1xuIFx0XHRcdGJ1Zi1cdTAwM2VmX2ZpbGVzID0gc2JpbmZvLVx1MDAzZW1heF9pbm9kZXM7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9odWdldGxiLmggYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuaW5kZXggMTZjNGM0Y2FhMTI2Yy4uNDU1MWZmMzAyMzY0MCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaFxuQEAgLTM5LDggKzM5LDggQEAgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wge1xuIFx0c3BpbmxvY2tfdCBsb2NrO1xuIFx0bG9uZyBjb3VudDtcbiBcdGxvbmcgbWF4X2hwYWdlcztcdC8qIE1heGltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtYXhpbXVtLiAqL1xuLVx0bG9uZyB1c2VkX2hwYWdlcztcdC8qIFVzZWQgY291bnQgYWdhaW5zdCBtYXhpbXVtLCBpbmNsdWRlcyAqL1xuLVx0XHRcdFx0LyogYm90aCBhbGxvY2F0ZWQgYW5kIHJlc2VydmVkIHBhZ2VzLiAqL1xuK1x0bG9uZyB1c2VkX2hwYWdlcztcdC8qIFVzZWQgcGFnZSBjb3VudCwgaW5jbHVkZXMgYm90aCAqL1xuK1x0XHRcdFx0LyogYWxsb2NhdGVkIGFuZCByZXNlcnZlZCBwYWdlcy4gKi9cbiBcdHN0cnVjdCBoc3RhdGUgKmhzdGF0ZTtcbiBcdGxvbmcgbWluX2hwYWdlcztcdC8qIE1pbmltdW0gaHVnZSBwYWdlcyBvciAtMSBpZiBubyBtaW5pbXVtLiAqL1xuIFx0bG9uZyByc3ZfaHBhZ2VzO1x0LyogUGFnZXMgcmVzZXJ2ZWQgYWdhaW5zdCBnbG9iYWwgcG9vbCB0byAqL1xuZGlmZiAtLWdpdCBhL21tL2h1Z2V0bGIuYyBiL21tL2h1Z2V0bGIuY1xuaW5kZXggNzg1NzcyODQ1Nzk1Mi4uZTI0Zjg1NmM5NDljMyAxMDA2NDRcbi0tLSBhL21tL2h1Z2V0bGIuY1xuKysrIGIvbW0vaHVnZXRsYi5jXG5AQCAtMTMwLDEyICsxMzAsOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgc3VicG9vbF9pc19mcmVlKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcbiB7XG4gXHRpZiAoc3Bvb2wtXHUwMDNlY291bnQpXG4gXHRcdHJldHVybiBmYWxzZTtcbi1cdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxuLVx0XHRyZXR1cm4gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcbi1cdGlmIChzcG9vbC1cdTAwM2VtaW5faHBhZ2VzICE9IC0xKVxuLVx0XHRyZXR1cm4gc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9PSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzO1xuIFxuLVx0cmV0dXJuIHRydWU7XG4rXHRyZXR1cm4gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgPT0gMDtcbiB9XG4gXG4gc3RhdGljIGlubGluZSB2b2lkIHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuQEAgLTE5MywxMyArMTg5LDE4IEBAIHZvaWQgaHVnZXBhZ2VfcHV0X3N1YnBvb2woc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxuIFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xuIH1cbiBcbi0vKlxuLSAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgYWxsb2NhdGluZyBhbmQgcmVzZXJ2aW5nIHBhZ2VzLlxuLSAqIFJldHVybiAtRU5PTUVNIGlmIHRoZXJlIGFyZSBub3QgZW5vdWdoIHJlc291cmNlcyB0byBzYXRpc2Z5IHRoZVxuLSAqIHJlcXVlc3QuICBPdGhlcndpc2UsIHJldHVybiB0aGUgbnVtYmVyIG9mIHBhZ2VzIGJ5IHdoaWNoIHRoZVxuLSAqIGdsb2JhbCBwb29scyBtdXN0IGJlIGFkanVzdGVkICh1cHdhcmQpLiAgVGhlIHJldHVybmVkIHZhbHVlIG1heVxuLSAqIG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpIGluIHRoZSBjYXNlIHdoZXJlXG4tICogYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXG4rLyoqXG4rICogaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMgLSBHZXQgcGFnZXMgZnJvbSBhIHN1YnBvb2xcbisgKiBAc3Bvb2w6IHBvaW50ZXIgdG8gc3VicG9vbCBzdHJ1Y3R1cmUgKG1heSBiZSBOVUxMKVxuKyAqIEBkZWx0YTogbnVtYmVyIG9mIHBhZ2VzIHRvIGFsbG9jYXRlIG9yIHJlc2VydmVcbisgKlxuKyAqIENoZWNrIGFuZCB1cGRhdGUgc3VicG9vbCBwYWdlIHVzYWdlIGNvdW50cyB3aGVuIGFsbG9jYXRpbmcgb3JcbisgKiByZXNlcnZpbmcgQGRlbHRhIGh1Z2VwYWdlcy5cbisgKlxuKyAqIENvbnRleHQ6IFRha2VzIHNwb29sLVx1MDAzZWxvY2sgdXNpbmcgc3Bpbl9sb2NrX2lycSgpLlxuKyAqIFJldHVybjogTm9uLW5lZ2F0aXZlIG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdCBjYW5ub3QgYmVcbisgKiAgICAgICAgIHNhdGlzZmllZCBieSB0aGUgc3VicG9vbCwgb3IgLUVOT01FTSBpZiB0aGUgc3VicG9vbCBtYXhpbXVtXG4rICogICAgICAgICBsaW1pdCB3b3VsZCBiZSBleGNlZWRlZC5cbiAgKi9cbiBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4gXHRcdFx0XHQgICAgICBsb25nIGRlbHRhKVxuQEAgLTIxMSwxNSArMjEyLDE0IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiBcbiBcdHNwaW5fbG9ja19pcnEoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jayk7XG4gXG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSkge1x0XHQvKiBtYXhpbXVtIHNpemUgYWNjb3VudGluZyAqL1xuLVx0XHRpZiAoKHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICsgZGVsdGEpIFx1MDAzYz0gc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcylcbi1cdFx0XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyArPSBkZWx0YTtcbi1cdFx0ZWxzZSB7XG4tXHRcdFx0cmV0ID0gLUVOT01FTTtcbi1cdFx0XHRnb3RvIHVubG9ja19yZXQ7XG4tXHRcdH1cbitcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xIFx1MDAyNlx1MDAyNlxuK1x0ICAgIHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICsgZGVsdGEgXHUwMDNlIHNwb29sLVx1MDAzZW1heF9ocGFnZXMpIHtcbitcdFx0cmV0ID0gLUVOT01FTTtcbitcdFx0Z290byB1bmxvY2tfcmV0O1xuIFx0fVxuIFxuK1x0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgKz0gZGVsdGE7XG4rXG4gXHQvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqL1xuIFx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMpIHtcbiBcdFx0aWYgKGRlbHRhIFx1MDAzZSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzKSB7XG5AQCAtMjQwLDExICsyNDAsMTkgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4tLypcbi0gKiBTdWJwb29sIGFjY291bnRpbmcgZm9yIGZyZWVpbmcgYW5kIHVucmVzZXJ2aW5nIHBhZ2VzLlxuLSAqIFJldHVybiB0aGUgbnVtYmVyIG9mIGdsb2JhbCBwYWdlIHJlc2VydmF0aW9ucyB0aGF0IG11c3QgYmUgZHJvcHBlZC5cbi0gKiBUaGUgcmV0dXJuIHZhbHVlIG1heSBvbmx5IGJlIGRpZmZlcmVudCB0aGFuIHRoZSBwYXNzZWQgdmFsdWUgKGRlbHRhKVxuLSAqIGluIHRoZSBjYXNlIHdoZXJlIGEgc3VicG9vbCBtaW5pbXVtIHNpemUgbXVzdCBiZSBtYWludGFpbmVkLlxuKy8qKlxuKyAqIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzIC0gUmVsZWFzZSBwYWdlcyBiYWNrIHRvIGEgc3VicG9vbFxuKyAqIEBzcG9vbDogcG9pbnRlciB0byBzdWJwb29sIHN0cnVjdHVyZSAobWF5IGJlIE5VTEwpXG4rICogQGRlbHRhOiBudW1iZXIgb2YgcGFnZXMgdG8gZnJlZSBvciB1bnJlc2VydmVcbisgKlxuKyAqIENoZWNrIGFuZCB1cGRhdGUgc3VicG9vbCBwYWdlIHVzYWdlIGNvdW50cyB3aGVuIGZyZWVpbmcgb3JcbisgKiB1bnJlc2VydmluZyBAZGVsdGEgaHVnZXBhZ2VzLlxuKyAqXG4rICogQ29udGV4dDogVGFrZXMgc3Bvb2wtXHUwMDNlbG9jayB1c2luZyBzcGluX2xvY2tfaXJxc2F2ZSgpLiBNYXkgcmVsZWFzZVxuKyAqICAgICAgICAgIGFuZCBmcmVlIEBzcG9vbCBpZiBpdHMgdXNhZ2UgY291bnQgYW5kIHJlZmVyZW5jZXMgcmVhY2hcbisgKiAgICAgICAgICB6ZXJvLlxuKyAqIFJldHVybjogTm9uLW5lZ2F0aXZlIG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdCB0aGUgc3VicG9vbCBjYW5ub3RcbisgKiAgICAgICAgIGFic29yYi5cbiAgKi9cbiBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4gXHRcdFx0XHQgICAgICAgbG9uZyBkZWx0YSlcbkBAIC0yNTcsMTkgKzI2NSwyNCBAQCBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4gXG4gXHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4gXG4tXHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcdFx0LyogbWF4aW11bSBzaXplIGFjY291bnRpbmcgKi9cbi1cdFx0c3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgLT0gZGVsdGE7XG4rXHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAtPSBkZWx0YTtcbiBcbiBcdCAvKiBtaW5pbXVtIHNpemUgYWNjb3VudGluZyAqL1xuIFx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2IHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIFx1MDAzYyBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzKSB7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICsgZGVsdGEgXHUwMDNjPSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzKVxuK1x0XHQvKlxuK1x0XHQgKiBsaW1pdCBpcyB0aGUgbWF4aW11bSBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXRcbitcdFx0ICogY2FuIGJlIHJlc3RvcmVkIHRvIHRoaXMgc3VicG9vbC5cbitcdFx0ICovXG4rXHRcdGxvbmcgbGltaXQgPSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzIC0gc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXM7XG4rXG4rXHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICsgZGVsdGEgXHUwMDNjPSBsaW1pdClcbiBcdFx0XHRyZXQgPSAwO1xuIFx0XHRlbHNlXG4tXHRcdFx0cmV0ID0gc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyArIGRlbHRhIC0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcztcbitcdFx0XHRyZXQgPSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICsgZGVsdGEgLSBsaW1pdDtcbiBcbiBcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyArPSBkZWx0YTtcbi1cdFx0aWYgKHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgXHUwMDNlIHNwb29sLVx1MDAzZW1pbl9ocGFnZXMpXG4tXHRcdFx0c3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyA9IHNwb29sLVx1MDAzZW1pbl9ocGFnZXM7XG4rXHRcdGlmIChzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzIFx1MDAzZSBsaW1pdClcbitcdFx0XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID0gbGltaXQ7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTI5NDIsNyArMjk1NSw3IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfdm1hKHZtYSk7XG4gXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpO1xuIFx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdGxvbmcgcmV0dmFsLCBnYmxfY2hnLCBnYmxfcmVzZXJ2ZTtcbitcdGxvbmcgcmV0dmFsLCBnYmxfcmVzdl9nZXQ7XG4gXHRtYXBfY2hnX3N0YXRlIG1hcF9jaGc7XG4gXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkIG1wb2xpO1xuIFx0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpO1xuQEAgLTI5ODEsOCArMjk5NCw4IEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdCAqIE9yIGlmIGl0IGNhbiBnZXQgb25lIGZyb20gdGhlIHBvb2wgcmVzZXJ2YXRpb24gZGlyZWN0bHkuXG4gXHQgKi9cbiBcdGlmIChtYXBfY2hnKSB7XG4tXHRcdGdibF9jaGcgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgMSk7XG4tXHRcdGlmIChnYmxfY2hnIFx1MDAzYyAwKSB7XG4rXHRcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTtcbitcdFx0aWYgKGdibF9yZXN2X2dldCBcdTAwM2MgMCkge1xuIFx0XHRcdHJldCA9IC1FTk9TUEM7XG4gXHRcdFx0Z290byBvdXRfZW5kX3Jlc2VydmF0aW9uO1xuIFx0XHR9XG5AQCAtMjk5MSw3ICszMDA0LDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHQgKiBJZiB3ZSBoYXZlIHRoZSB2bWEgcmVzZXJ2YXRpb24gcmVhZHksIG5vIG5lZWQgZm9yIGV4dHJhXG4gXHRcdCAqIGdsb2JhbCByZXNlcnZhdGlvbi5cbiBcdFx0ICovXG4tXHRcdGdibF9jaGcgPSAwO1xuK1x0XHRnYmxfcmVzdl9nZXQgPSAwO1xuIFx0fVxuIFxuIFx0LypcbkBAIC0zMDAyLDEwICszMDE1LDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19DSEFSR19DR1JPVVBfUlNWRDtcbiBcbiBcdC8qXG4tXHQgKiBnYmxfY2hnID09IDAgaW5kaWNhdGVzIGEgcmVzZXJ2YXRpb24gZXhpc3RzIGZvciB0aGlzXG4rXHQgKiBnYmxfcmVzdl9nZXQgPT0gMCBpbmRpY2F0ZXMgYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoaXNcbiBcdCAqIGFsbG9jYXRpb24sIHNvIHRyeSB0byB1c2UgaXQuXG4gXHQgKi9cbi1cdGlmIChnYmxfY2hnID09IDApXG4rXHRpZiAoZ2JsX3Jlc3ZfZ2V0ID09IDApXG4gXHRcdGFsbG9jX2ZsYWdzIHw9IEhVR0VUTEJfQUxMT0NfVVNFX0dMT0JBTF9SRVNFUlZBVElPTlM7XG4gXG4gXHQvKiBUYWtlcyByZWZlcmVuY2Ugb24gbXBvbC4gKi9cbkBAIC0zMDU5LDEzICszMDcyLDEwIEBAIHN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHJldHVybiBmb2xpbztcbiBcbiBvdXRfc3VicG9vbF9wdXQ6XG4tXHQvKlxuLVx0ICogcHV0IHBhZ2UgdG8gc3VicG9vbCBpZmYgdGhlIHF1b3RhIG9mIHN1YnBvb2wncyByc3ZfaHBhZ2VzIGlzIHVzZWRcbi1cdCAqIGR1cmluZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcy5cbi1cdCAqL1xuLVx0aWYgKG1hcF9jaGcgXHUwMDI2XHUwMDI2ICFnYmxfY2hnKSB7XG4tXHRcdGdibF9yZXNlcnZlID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xuLVx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XG4rXHRpZiAobWFwX2NoZykge1xuK1x0XHRsb25nIGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcbitcbitcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQpO1xuIFx0fVxuIFxuIG91dF9lbmRfcmVzZXJ2YXRpb246XG5AQCAtNjY2MSwxMiArNjY3MSwxNCBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdFx0dm1hX2ZsYWdzX3Qgdm1hX2ZsYWdzKVxuIHtcbi1cdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xLCBzcG9vbF9yZXN2LCBnYmxfcmVzdjtcbitcdGxvbmcgY2hnID0gLTEsIGFkZCA9IC0xO1xuIFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9pbm9kZShpbm9kZSk7XG4gXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzdWJwb29sX2lub2RlKGlub2RlKTtcbiBcdHN0cnVjdCByZXN2X21hcCAqcmVzdl9tYXA7XG4gXHRzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmhfY2cgPSBOVUxMO1xuLVx0bG9uZyBnYmxfcmVzZXJ2ZSwgcmVnaW9uc19uZWVkZWQgPSAwO1xuK1x0bG9uZyByZWdpb25zX25lZWRlZCA9IDA7XG4rXHRsb25nIGdibF9yZXN2X2dldDtcbitcdGxvbmcgZ2JsX3Jlc3ZfcHV0O1xuIFx0aW50IGVycjtcbiBcbiBcdC8qIFRoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbiAqL1xuQEAgLTY3NDEsOSArNjc1Myw5IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgKiB0aGUgc3VicG9vbCBoYXMgYSBtaW5pbXVtIHNpemUsIHRoZXJlIG1heSBiZSBzb21lIGdsb2JhbFxuIFx0ICogcmVzZXJ2YXRpb25zIGFscmVhZHkgaW4gcGxhY2UgKGdibF9yZXNlcnZlKS5cbiBcdCAqL1xuLVx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgY2hnKTtcbi1cdGlmIChnYmxfcmVzZXJ2ZSBcdTAwM2MgMCkge1xuLVx0XHRlcnIgPSBnYmxfcmVzZXJ2ZTtcbitcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpO1xuK1x0aWYgKGdibF9yZXN2X2dldCBcdTAwM2MgMCkge1xuK1x0XHRlcnIgPSBnYmxfcmVzdl9nZXQ7XG4gXHRcdGdvdG8gb3V0X3VuY2hhcmdlX2Nncm91cDtcbiBcdH1cbiBcbkBAIC02NzUxLDcgKzY3NjMsNyBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0ICogQ2hlY2sgZW5vdWdoIGh1Z2VwYWdlcyBhcmUgYXZhaWxhYmxlIGZvciB0aGUgcmVzZXJ2YXRpb24uXG4gXHQgKiBIYW5kIHRoZSBwYWdlcyBiYWNrIHRvIHRoZSBzdWJwb29sIGlmIHRoZXJlIGFyZSBub3RcbiBcdCAqL1xuLVx0ZXJyID0gaHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzZXJ2ZSk7XG4rXHRlcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCk7XG4gXHRpZiAoZXJyIFx1MDAzYyAwKVxuIFx0XHRnb3RvIG91dF9wdXRfcGFnZXM7XG4gXG5AQCAtNjc3MCw3ICs2NzgyLDcgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdFx0YWRkID0gcmVnaW9uX2FkZChyZXN2X21hcCwgZnJvbSwgdG8sIHJlZ2lvbnNfbmVlZGVkLCBoLCBoX2NnKTtcbiBcbiBcdFx0aWYgKHVubGlrZWx5KGFkZCBcdTAwM2MgMCkpIHtcbi1cdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzZXJ2ZSk7XG4rXHRcdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3ZfZ2V0KTtcbiBcdFx0XHRlcnIgPSBhZGQ7XG4gXHRcdFx0Z290byBvdXRfcHV0X3BhZ2VzO1xuIFx0XHR9IGVsc2UgaWYgKHVubGlrZWx5KGNoZyBcdTAwM2UgYWRkKSkge1xuQEAgLTY4MDYsMjYgKzY4MTgsMjEgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdH1cbiBcdHJldHVybiBjaGc7XG4gXG4tb3V0X3B1dF9wYWdlczpcbi1cdHNwb29sX3Jlc3YgPSBjaGcgLSBnYmxfcmVzZXJ2ZTtcbi1cdGlmIChzcG9vbF9yZXN2KSB7XG4tXHRcdC8qIHB1dCBzdWIgcG9vbCdzIHJlc2VydmF0aW9uIGJhY2ssIGNoZyAtIGdibF9yZXNlcnZlICovXG4tXHRcdGdibF9yZXN2ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIHNwb29sX3Jlc3YpO1xuLVx0XHQvKlxuLVx0XHQgKiBzdWJwb29sJ3MgcmVzZXJ2ZWQgcGFnZXMgY2FuIG5vdCBiZSBwdXQgYmFjayBkdWUgdG8gcmFjZSxcbi1cdFx0ICogcmV0dXJuIHRvIGhzdGF0ZS5cbi1cdFx0ICovXG4tXHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXN2KTtcbi1cdH1cbi1cdC8qIFJlc3RvcmUgdXNlZF9ocGFnZXMgZm9yIHBhZ2VzIHRoYXQgZmFpbGVkIGdsb2JhbCByZXNlcnZhdGlvbiAqL1xuLVx0aWYgKGdibF9yZXNlcnZlIFx1MDAyNlx1MDAyNiBzcG9vbCkge1xuLVx0XHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuKyBvdXRfcHV0X3BhZ2VzOlxuK1x0LypcbitcdCAqIFJldHVybiBhbGwgdGhhdCB3YXMgcmVxdWVzdGVkIGZyb20gdGhlIHN1YnBvb2wsIGxldCBzdWJwb29sXG4rXHQgKiB0ZWxsIHVzIHRoZSBuZXcgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IG5lZWQgdG8gYmVcbitcdCAqIHJldHVybmVkIHRvIHRoZSBnbG9iYWwgcG9vbC5cbitcdCAqL1xuK1x0Z2JsX3Jlc3ZfcHV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIGNoZyk7XG4rXHQvKlxuK1x0ICogVGhlcmUgbWF5IGJlIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIHRoZSBudW1iZXIgb2ZcbitcdCAqIHJlc2VydmF0aW9ucyB0byBjb25zdW1lIGFuZCB0aGUgbnVtYmVyIHRvIHJlc3RvcmUgbm93IGlmXG4rXHQgKiB0aGVyZSBhcmUgbXVsdGlwbGUgdGhyZWFkcyBpbnRlcmFjdGluZyB3aXRoIHRoZSBzdWJwb29sIC1cbitcdCAqIHJlc3RvcmUgdGhlIGRpZmZlcmVuY2UuXG4rXHQgKi9cbitcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0IC0gZ2JsX3Jlc3ZfcHV0KTtcbiBcbi1cdFx0c3Bpbl9sb2NrX2lycXNhdmUoXHUwMDI2c3Bvb2wtXHUwMDNlbG9jaywgZmxhZ3MpO1xuLVx0XHRpZiAoc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyAhPSAtMSlcbi1cdFx0XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAtPSBnYmxfcmVzZXJ2ZTtcbi1cdFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xuLVx0fVxuIG91dF91bmNoYXJnZV9jZ3JvdXA6XG4gXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZChoc3RhdGVfaW5kZXgoaCksXG4gXHRcdFx0XHRcdCAgICBjaGcgKiBwYWdlc19wZXJfaHVnZV9wYWdlKGgpLCBoX2NnKTtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU4OjM0LjI4MzkxNDc1N1oiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY3ODU2MjA1NzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBIdWdldGxiZnMgU3VicG9vbCBBY2NvdW50aW5nIFBhdGNoKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2guIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIHdpdGhpbiB0aGUgaHVnZXRsYmZzL2h1Z2V0bGIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtLiBJJ20gc2VlaW5nIGNoYW5nZXMgYWNyb3NzIGEgZmV3IGtleSBhcmVhczogdGhlIGRvY3VtZW50YXRpb24sIHRoZSBpbm9kZSBpbXBsZW1lbnRhdGlvbiwgYW5kIHRoZSBjb3JlIGluY2x1ZGUgYW5kIG1tIGZpbGVzLiBUaGF0IG1ha2VzIG1lIHRha2UgaXQgc2VyaW91c2x5LlxuXG5GaXJzdCwgSSdsbCB6ZXJvIGluIG9uIHRoZSBtb2RpZmllZCBmaWxlcy4gSSdtIGZvY3VzaW5nIG9uIGBtbS9odWdldGxiLmNgLCBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLCBhbmQgYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCBhcyB0aGV5IGFyZSB0aGUgbWVhdCBvZiB0aGlzLiBUaGUgZG9jdW1lbnRhdGlvbiB1cGRhdGVzIGFyZSBpbXBvcnRhbnQsIGJ1dCB1bmRlcnN0YW5kaW5nIHRoZSAqZnVuY3Rpb25hbGl0eSogY2hhbmdlIGlzIGNyaXRpY2FsLlxuXG5SaWdodCBhd2F5LCBJIHNlZSB0aGlzIHJldm9sdmVzIGFyb3VuZCBzdWJwb29sIGFjY291bnRpbmcuIFRoYXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUgZm9yIGh1Z2V0bGJmcy4gSXQgc2VlbXMgdGhlIHBhdGNoIGlzIGFsdGVyaW5nIHRoZSBsb2dpYyBmb3IgaG93IHdlIHRyYWNrIGFuZCBtYW5hZ2UgaHVnZXBhZ2VzIHdpdGhpbiB0aGVzZSBzdWJwb29scy5cblxuU3BlY2lmaWNhbGx5LCBoZXJlJ3Mgd2hhdCdzIGp1bXBpbmcgb3V0IGF0IG1lOlxuXG4qICAgKipgc3VicG9vbF9pc19mcmVlYCoqOiBUaGlzIGlzIGludGVyZXN0aW5nLiBUaGUgY2hlY2sgaXMgbm93IGp1c3QgYHVzZWRfaHBhZ2VzID09IDBgLCBhIHNpbXBsaWZpY2F0aW9uLiBUaGlzIG1ha2VzIG1lIGNvbnNpZGVyIGlmIHRoZXJlIGlzIGEgdXNlIGNhc2UgdGhhdCBjYXVzZXMgdGhpcyBjaGFuZ2UsIGFuZCB3aGF0IHRoZSBlZmZlY3Qgd2lsbCBiZS5cbiogICAqKmBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AqKjogSXQgbG9va3MgbGlrZSB0aGUgcGF0Y2ggaXMgYWx3YXlzIGluY3JlbWVudGluZyBgdXNlZF9ocGFnZXNgIG5vdywgZXZlbiB3aGVuIGBtYXhfaHBhZ2VzYCBpcyAtMS4gVGhhdCBzdWdnZXN0cyBhIHBvc3NpYmxlIGNoYW5nZSBpbiBob3cgd2UgaGFuZGxlIHVuYm91bmRlZCBzdWJwb29scy5cbiogICAqKmBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AqKjogVGhlIGRlY3JlbWVudCBpcyBhbHdheXMgaGFwcGVuaW5nLCBhbmQgdGhlIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nIGxvZ2ljIGFwcGVhcnMgdG8gYmUgcmV3b3JrZWQuIFRoaXMgaXMgY3JpdGljYWwgZm9yIHJlc291cmNlIG1hbmFnZW1lbnQgYW5kIGNvdWxkIGludHJvZHVjZSBzdWJ0bGUgYmVoYXZpb3JhbCBjaGFuZ2VzIHRoYXQgbXVzdCBiZSBjYXJlZnVsbHkgc2NydXRpbml6ZWQuXG4qICAgKipgYWxsb2NfaHVnZXRsYl9mb2xpb2AgXHUwMDI2IGBodWdldGxiX3Jlc2VydmVfcGFnZXNgKio6IEVycm9yIGhhbmRsaW5nIGFuZCByZXNvdXJjZSBhY2NvdW50aW5nIGFyZSBtb2RpZmllZC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBjaGFuZ2VzIHRvIGBodWdldGxiX2FjY3RfbWVtb3J5YCBhZmZlY3Qgb3ZlcmFsbCBtZW1vcnkgdXNhZ2UgdHJhY2tpbmcgYW5kIHBvdGVudGlhbCByZXNvdXJjZSBsZWFrcy4gSSBhbHNvIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UgYXJlIGhhbmRsaW5nIGVycm9ycyBjb3JyZWN0bHkgaGVyZSBhbmQgYXJlIG5vdCBpbnRyb2R1Y2luZyBuZXcgcmFjZSBjb25kaXRpb25zIG9yIG1lbW9yeSBjb3JydXB0aW9uIHBvc3NpYmlsaXRpZXMuXG4qICAgKipgaHVnZXRsYmZzX3N0YXRmc2AqKjogVGhlIGNoZWNrIGZvciBgbWF4X2hwYWdlcyA9PSAtMWAgYW5kIHNldHRpbmcgYGZyZWVfcGFnZXMgPSAtMWAgbWFrZXMgc2Vuc2UgZm9yIGFuIHVuYm91bmRlZCBwb29sLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZGV0ZXJtaW5lIGlmIHRoaXMgY29kZSBpcyBpbiBhIGhvdCBwYXRoLiBBbmQgZnJvbSBteSBleHBlcmllbmNlLCB0aGUgYW5zd2VyIGlzICp5ZXMqLiBUaGVzZSBmdW5jdGlvbnMgYXJlIGRpcmVjdGx5IGludm9sdmVkIGluIHVzZXItc3BhY2UgaW50ZXJhY3Rpb25zIHRocm91Z2ggc3lzY2FsbHMgbGlrZSBgbW1hcGAgd2l0aCBgTUFQX0hVR0VUTEJgLCBtYW5hZ2luZyBodWdldGxiZnMgbW91bnRzLCBmaWxlIG9wZXJhdGlvbnMsIG1hZHZpc2UsIGZhbGxvY2F0ZSwgYW5kIGBzdGF0ZnNgLiBBbnkgc3VidGxlIGNoYW5nZSBpbiB0aGlzIGFyZWEgY2FuIGhhdmUgd2lkZXNwcmVhZCBjb25zZXF1ZW5jZXMgYW5kIG5lZWRzIHRob3JvdWdoIHJldmlldy5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhlIHJlcXVpcmVkIEtjb25maWcgb3B0aW9ucyBhcmUgZW5hYmxlZCAoZS5nLiwgYENPTkZJR19IVUdFVExCRlNgLCBgQ09ORklHX0hVR0VUTEJfUEFHRWAsIGV0Yy4pIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZS4gVGltZSB0byBgZ3JlcHBlcmAgb3IgY2hlY2sgdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgZ29pbmcgdG8gYmUgbXkgaW1tZWRpYXRlIG5leHQgc3RlcC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzgwOSwiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU4OjQxLjA2OTUzODQyNloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjAwMzE1MywiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEhVR0VUTEJcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvaHVnZXRsYmZzL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6NTg6NDEuMTYxNTQ4NDc5WiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA5MDM0NTEwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRXhhbWluaW5nIEtjb25maWcgRmlsZXMgZm9yIEh1Z2VUTEIgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIEh1Z2VUTEIgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUgZmlyc3QgcGxhY2VzIEknbSBnb2luZyB0byBsb29rIGFyZSwgbmF0dXJhbGx5LCBgZnMvaHVnZXRsYmZzL0tjb25maWdgIGFuZCBgbW0vS2NvbmZpZ2AuIEl04oCZcyBhIHByZXR0eSBzdGFuZGFyZCBhcHByb2FjaCwgcmVhbGx5LCBidXQgaXQncyB0aGUgcmlnaHQgc3RhcnRpbmcgcG9pbnQuIGBmcy9odWdldGxiZnNgICpzaG91bGQqIGNvbnRhaW4gdGhlIG9wdGlvbnMgc3BlY2lmaWMgdG8gdGhlIGZpbGVzeXN0ZW0gaXRzZWxmLCBwcm9iYWJseSByZWxhdGVkIHRvIGl0cyBtb3VudCBvcHRpb25zLCBxdW90YSBzdXBwb3J0LCBhbmQgbWF5YmUgc29tZSBwYWdlIGFsbG9jYXRpb24gZGV0YWlscyB0aWVkIHRvIHRoZSBWRlMgbGF5ZXIuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzZXR0aW5ncyBsaWtlIHRoZSBkZWZhdWx0IGh1Z2VwYWdlIHNpemUsIHdoZXRoZXIgaHVnZXRsYmZzIGlzIGVuYWJsZWQgYnkgZGVmYXVsdCwgYW5kIHBlcmhhcHMgc29tZSBmaW5lLWdyYWluZWQgY29udHJvbHMgb3ZlciBmZWF0dXJlcy5cblxuT24gdGhlIG90aGVyIGhhbmQsIGBtbS9LY29uZmlnYCBpcyB3aGVyZSBJJ2QgYW50aWNpcGF0ZSB0aGUgbW9yZSBmdW5kYW1lbnRhbCBtZW1vcnkgbWFuYWdlbWVudCBjb25maWd1cmF0aW9ucy4gSSdtIHRoaW5raW5nIHNldHRpbmdzIGRlYWxpbmcgd2l0aCB0aGUgTlVNQSBhZmZpbml0eSBvZiBodWdlcGFnZXMsIHRoZSBvdmVyYWxsIGFsbG9jYXRpb24gcG9saWNpZXMsIGFuZCB0aGUgbWF4aW11bSBzaXplcyBhdmFpbGFibGUuIEl0J3MgYWxtb3N0IGNlcnRhaW4gdGhlcmXigJlsbCBiZSBvcHRpb25zIHJlbGF0ZWQgdG8gdGhlIGNvcmUga2VybmVsIGluZnJhc3RydWN0dXJlIGZvciBtYW5hZ2luZyBodWdlIHBhZ2VzIGFuZCB3aGV0aGVyIGh1Z2VwYWdlIHN1cHBvcnQgaXMgZXZlbiBjb21waWxlZCBpbnRvIHRoZSBrZXJuZWwuIEl04oCZcyBhbHNvIHBvc3NpYmxlIHRoYXQgdGhlcmUgYXJlIHNvbWUgY3Jvc3MtcmVmZXJlbmNlcyBiZXR3ZWVuIHRoZSB0d28gS2NvbmZpZyBmaWxlczsgdGhlIGZpbGVzeXN0ZW0tc3BlY2lmaWMgb3B0aW9ucyBtaWdodCBkZXBlbmQgb24gb3IgaW50ZXJhY3Qgd2l0aCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgb3B0aW9ucyBkZWZpbmVkIGluIGBtbS9LY29uZmlnYC4gVGltZSB0byBkaXZlIGluIGFuZCBzZWUgZXhhY3RseSBob3cgdGhlc2Ugb3B0aW9ucyBhcmUgc3RydWN0dXJlZCBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgZXhpc3QuIEknbSBob3BpbmcgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUga2V5IHBhcmFtZXRlcnMgdGhhdCBjb250cm9sIEh1Z2VUTEIgYmVoYXZpb3IsIHBhcnRpY3VsYXJseSB0aG9zZSBpbXBhY3RpbmcgcGVyZm9ybWFuY2UgYW5kIHJlc291cmNlIHV0aWxpemF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTc0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6NTg6NDQuMjUxODk4NTk3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTQxMjI2MiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiSFVHRVRMQlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9odWdldGxiZnMvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6NTg6NDQuMzYzMzE2OTE4WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM2Mjc2NTcxMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgdXNpbmcgdGhlIGZpcnN0IHBlcnNvbjpcblxuKipOYXZpZ2F0aW5nIHRoZSBLZXJuZWwncyBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqXG5cbkFscmlnaHQsIHNvIEknbSBsb29raW5nIHRvIHR3ZWFrIHNvbWV0aGluZywgYW5kIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgbGl2ZS4gRmlyc3QgdGhpbmdzIGZpcnN0LCB0aGUgbG9naWNhbCBzdGFydGluZyBwb2ludCBpcyB0aGUgYEtjb25maWdgIGZpbGVzLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSBjb25maWd1cmF0aW9uIGtub2JzIGFyZSBkZWZpbmVkLCByaWdodD8gR2l2ZW4gdGhlIGdlbmVyYWwgYXJlYSBJJ20gd29ya2luZyBpbiwgbXkgaW5zdGluY3QgaXMgdG8gbmFycm93IHRoZSBzZWFyY2guIEknbSB0aGlua2luZyBlaXRoZXIgdGhlIGBmcy9gIGRpcmVjdG9yeSwgd2hpY2ggY292ZXJzIGFsbCB0aGUgZmlsZXN5c3RlbXMsIG9yIHRoZSBgbW0vYCBkaXJlY3RvcnksIHdoaWNoIGVuY29tcGFzc2VzIGFsbCB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0cy4gVGhvc2UgYXJlIHRoZSB0d28gbW9zdCBsaWtlbHkgcGxhY2VzIHRvIGZpbmQgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJJ20gaW50ZXJlc3RlZCBpbiwgYmFzZWQgb24gdGhlIHByb2JsZW0gSSBhbSB3b3JraW5nIG9uLiBOb3csIGxldCdzIHNlZSB3aGljaCBpcyB0aGUgY29ycmVjdCBvbmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk1ODMsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1ODo0Ni43MjYwODY1ODFaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE5MjYwODIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImh1Z2V0bGJmc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0yNTA9bWVudWNvbmZpZyBIVUdFVExCRlNcXG4tLVxcbmZzL0tjb25maWctMjU1LVxcdGhlbHBcXG5mcy9LY29uZmlnOjI1NjpcXHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cXG5mcy9LY29uZmlnLTI1Ny1cXHQgIHJhbWZzLiBGb3IgYXJjaGl0ZWN0dXJlcyB0aGF0IHN1cHBvcnQgaXQsIHNheSBZIGhlcmUgYW5kIHJlYWRcXG4tLVxcbmZzL01ha2VmaWxlPTczPW9iai15XFx0XFx0XFx0XFx0Kz0gcmFtZnMvXFxuZnMvTWFrZWZpbGU6NzQ6b2JqLSQoQ09ORklHX0hVR0VUTEJGUylcXHRcXHQrPSBodWdldGxiZnMvXFxuZnMvTWFrZWZpbGUtNzUtb2JqLSQoQ09ORklHX0NPREFfRlMpXFx0XFx0Kz0gY29kYS9cXG4tLVxcbmZzL2h1Z2V0bGJmcy9NYWtlZmlsZS01LVxcbmZzL2h1Z2V0bGJmcy9NYWtlZmlsZTo2Om9iai0kKENPTkZJR19IVUdFVExCRlMpICs9IGh1Z2V0bGJmcy5vXFxuZnMvaHVnZXRsYmZzL01ha2VmaWxlLTctXFxuZnMvaHVnZXRsYmZzL01ha2VmaWxlOjg6aHVnZXRsYmZzLW9ianMgOj0gaW5vZGUub1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNDItI2RlZmluZSBDUkVBVEVfVFJBQ0VfUE9JTlRTXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDM6I2luY2x1ZGUgXFx1MDAzY3RyYWNlL2V2ZW50cy9odWdldGxiZnMuaFxcdTAwM2VcXG5mcy9odWdldGxiZnMvaW5vZGUuYy00NC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NTpzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBodWdldGxiZnNfYW9wcztcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo0NjpzdGF0aWMgY29uc3Qgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjQ3OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NDg6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19pbm9kZV9vcGVyYXRpb25zO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTQ5LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjUwOmVudW0gaHVnZXRsYmZzX3NpemVfdHlwZSB7IE5PX1NJWkUsIFNJWkVfU1RELCBTSVpFX1BFUkNFTlQgfTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy01MS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo1MjpzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQge1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTUzLVxcdHN0cnVjdCBoc3RhdGVcXHRcXHQqaHN0YXRlO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTgtXFx0bG9uZ1xcdFxcdFxcdG1pbl9ocGFnZXM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NTk6XFx0ZW51bSBodWdldGxiZnNfc2l6ZV90eXBlIG1heF92YWxfdHlwZTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo2MDpcXHRlbnVtIGh1Z2V0bGJmc19zaXplX3R5cGUgbWluX3ZhbF90eXBlO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTYxLVxcdGt1aWRfdFxcdFxcdFxcdHVpZDtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTc4PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfcGFyYW1ldGVyX3NwZWMgaHVnZXRsYl9mc19wYXJhbWV0ZXJzW10gPSB7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy05OC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5OTpzdGF0aWMgaW50IGh1Z2V0bGJmc19maWxlX21tYXAoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMC17XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDYtXFx0ICogZm9yIFNITV9IVUdFVExCLCB0aGUgcGFnZXMgYXJlIHJlc2VydmVkIGluIHRoZSBzaG1nZXQoKSBjYWxsIHNvIHNraXBcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDc6XFx0ICogcmVzZXJ2aW5nIGhlcmUuIE5vdGU6IG9ubHkgZm9yIFNITSBodWdldGxiZnMgZmlsZSwgdGhlIGlub2RlXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ4LVxcdCAqIGZsYWcgU19QUklWQVRFIGlzIHNldC5cXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTE5Nj1zdGF0aWMgc2l6ZV90IGFkanVzdF9yYW5nZV9od3BvaXNvbihzdHJ1Y3QgZm9saW8gKmZvbGlvLCBzaXplX3Qgb2Zmc2V0LFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMjE5LSAqL1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjIyMDpzdGF0aWMgc3NpemVfdCBodWdldGxiZnNfcmVhZF9pdGVyKHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICp0bylcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0yMjEte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMjk3LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjI5ODpzdGF0aWMgaW50IGh1Z2V0bGJmc193cml0ZV9iZWdpbihjb25zdCBzdHJ1Y3Qga2lvY2IgKmlvY2IsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMjk5LVxcdFxcdFxcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMzA1LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjMwNjpzdGF0aWMgaW50IGh1Z2V0bGJmc193cml0ZV9lbmQoY29uc3Qgc3RydWN0IGtpb2NiICppb2NiLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTMwNy1cXHRcXHRcXHQgICAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz01NTI9c3RhdGljIHZvaWQgcmVtb3ZlX2lub2RlX2h1Z2VwYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3QgbHN0YXJ0LFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTkyLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjU5MzpzdGF0aWMgdm9pZCBodWdldGxiZnNfZXZpY3RfaW5vZGUoc3RydWN0IGlub2RlICppbm9kZSlcXG5mcy9odWdldGxiZnMvaW5vZGUuYy01OTQte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNTk2LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjU5NzpcXHR0cmFjZV9odWdldGxiZnNfZXZpY3RfaW5vZGUoaW5vZGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTU5OC1cXHRyZW1vdmVfaW5vZGVfaHVnZXBhZ2VzKGlub2RlLCAwLCBMTE9OR19NQVgpO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9NjA3PXN0YXRpYyB2b2lkIGh1Z2V0bGJfdm10cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb2ZmX3Qgb2Zmc2V0KVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjIzLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjYyNDpzdGF0aWMgdm9pZCBodWdldGxiZnNfemVyb19wYXJ0aWFsX3BhZ2Uoc3RydWN0IGhzdGF0ZSAqaCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy02MjUtXFx0XFx0XFx0XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy02NDYtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NjQ3OnN0YXRpYyBsb25nIGh1Z2V0bGJmc19wdW5jaF9ob2xlKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvZmZfdCBvZmZzZXQsIGxvZmZfdCBsZW4pXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNjQ4LXtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo2NDk6XFx0c3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvICppbmZvID0gSFVHRVRMQkZTX0koaW5vZGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY1MC1cXHRzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZyA9IGlub2RlLVxcdTAwM2VpX21hcHBpbmc7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy02NzItXFx0aWYgKG9mZnNldCBcXHUwMDNjIGhvbGVfc3RhcnQpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NjczOlxcdFxcdGh1Z2V0bGJmc196ZXJvX3BhcnRpYWxfcGFnZShoLCBtYXBwaW5nLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY3NC1cXHRcXHRcXHRcXHRvZmZzZXQsIG1pbihvZmZzZXQgKyBsZW4sIGhvbGVfc3RhcnQpKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY4NS1cXHRpZiAoKG9mZnNldCArIGxlbikgXFx1MDAzZSBob2xlX2VuZCBcXHUwMDI2XFx1MDAyNiAob2Zmc2V0ICsgbGVuKSBcXHUwMDNlIGhvbGVfc3RhcnQpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6Njg2OlxcdFxcdGh1Z2V0bGJmc196ZXJvX3BhcnRpYWxfcGFnZShoLCBtYXBwaW5nLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY4Ny1cXHRcXHRcXHRcXHRob2xlX2VuZCwgb2Zmc2V0ICsgbGVuKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTY5OS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo3MDA6c3RhdGljIGxvbmcgaHVnZXRsYmZzX2ZhbGxvY2F0ZShzdHJ1Y3QgZmlsZSAqZmlsZSwgaW50IG1vZGUsIGxvZmZfdCBvZmZzZXQsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzAxLVxcdFxcdFxcdFxcdGxvZmZfdCBsZW4pXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy03MDMtXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoZmlsZSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6NzA0OlxcdHN0cnVjdCBodWdldGxiZnNfaW5vZGVfaW5mbyAqaW5mbyA9IEhVR0VUTEJGU19JKGlub2RlKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy03MDUtXFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcgPSBpbm9kZS1cXHUwMDNlaV9tYXBwaW5nO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtNzE4LVxcdGlmIChtb2RlIFxcdTAwMjYgRkFMTE9DX0ZMX1BVTkNIX0hPTEUpIHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo3MTk6XFx0XFx0ZXJyb3IgPSBodWdldGxiZnNfcHVuY2hfaG9sZShpbm9kZSwgb2Zmc2V0LCBsZW4pO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTcyMC1cXHRcXHRnb3RvIG91dF9ub2xvY2s7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MjYtb3V0X25vbG9jazpcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4Mjc6XFx0dHJhY2VfaHVnZXRsYmZzX2ZhbGxvY2F0ZShpbm9kZSwgbW9kZSwgb2Zmc2V0LCBsZW4sIGVycm9yKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy04MjgtXFx0cmV0dXJuIGVycm9yO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODMwLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjgzMTpzdGF0aWMgaW50IGh1Z2V0bGJmc19zZXRhdHRyKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTgzMi1cXHRcXHRcXHQgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGlhdHRyICphdHRyKVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODM3LVxcdHVuc2lnbmVkIGludCBpYV92YWxpZCA9IGF0dHItXFx1MDAzZWlhX3ZhbGlkO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjgzODpcXHRzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKmluZm8gPSBIVUdFVExCRlNfSShpbm9kZSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODM5LVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODQzLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjg0NDpcXHR0cmFjZV9odWdldGxiZnNfc2V0YXR0cihpbm9kZSwgZGVudHJ5LCBhdHRyKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy04NDUtXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy04NjMtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6ODY0OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19nZXRfcm9vdChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjg2NTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eClcXG5mcy9odWdldGxiZnMvaW5vZGUuYy04NjYte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODc1LVxcdFxcdHNpbXBsZV9pbm9kZV9pbml0X3RzKGlub2RlKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4NzY6XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aHVnZXRsYmZzX2Rpcl9pbm9kZV9vcGVyYXRpb25zO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg3Ny1cXHRcXHRpbm9kZS1cXHUwMDNlaV9mb3AgPSBcXHUwMDI2c2ltcGxlX2Rpcl9vcGVyYXRpb25zO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtODkxLSAqL1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjg5MjpzdGF0aWMgc3RydWN0IGxvY2tfY2xhc3Nfa2V5IGh1Z2V0bGJmc19pX21tYXBfcndzZW1fa2V5O1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg5My1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo4OTQ6c3RhdGljIHN0cnVjdCBpbm9kZSAqaHVnZXRsYmZzX2dldF9pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTg5NS1cXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkxMy1cXHRpZiAoaW5vZGUpIHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5MTQ6XFx0XFx0c3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvICppbmZvID0gSFVHRVRMQkZTX0koaW5vZGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkxNS1cXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkxOC1cXHRcXHRsb2NrZGVwX3NldF9jbGFzcyhcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlaV9tbWFwX3J3c2VtLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjkxOTpcXHRcXHRcXHRcXHRcXHUwMDI2aHVnZXRsYmZzX2lfbW1hcF9yd3NlbV9rZXkpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjkyMDpcXHRcXHRpbm9kZS1cXHUwMDNlaV9tYXBwaW5nLVxcdTAwM2VhX29wcyA9IFxcdTAwMjZodWdldGxiZnNfYW9wcztcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05MjEtXFx0XFx0c2ltcGxlX2lub2RlX2luaXRfdHMoaW5vZGUpO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTI4LVxcdFxcdGNhc2UgU19JRlJFRzpcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5Mjk6XFx0XFx0XFx0aW5vZGUtXFx1MDAzZWlfb3AgPSBcXHUwMDI2aHVnZXRsYmZzX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTMwOlxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZodWdldGxiZnNfZmlsZV9vcGVyYXRpb25zO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTkzMS1cXHRcXHRcXHRicmVhaztcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05MzItXFx0XFx0Y2FzZSBTX0lGRElSOlxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjkzMzpcXHRcXHRcXHRpbm9kZS1cXHUwMDNlaV9vcCA9IFxcdTAwMjZodWdldGxiZnNfZGlyX2lub2RlX29wZXJhdGlvbnM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTM0LVxcdFxcdFxcdGlub2RlLVxcdTAwM2VpX2ZvcCA9IFxcdTAwMjZzaW1wbGVfZGlyX29wZXJhdGlvbnM7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NDQtXFx0XFx0bG9ja2RlcF9hbm5vdGF0ZV9pbm9kZV9tdXRleF9rZXkoaW5vZGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk0NTpcXHRcXHR0cmFjZV9odWdldGxiZnNfYWxsb2NfaW5vZGUoaW5vZGUsIGRpciwgbW9kZSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTQ2LVxcdH0gZWxzZSB7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NTYtICovXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTU3OnN0YXRpYyBpbnQgaHVnZXRsYmZzX21rbm9kKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLCBzdHJ1Y3QgaW5vZGUgKmRpcixcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NTgtXFx0XFx0XFx0ICAgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCB1bW9kZV90IG1vZGUsIGRldl90IGRldilcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk2MS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5NjI6XFx0aW5vZGUgPSBodWdldGxiZnNfZ2V0X2lub2RlKGRpci1cXHUwMDNlaV9zYiwgaWRtYXAsIGRpciwgbW9kZSwgZGV2KTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05NjMtXFx0aWYgKCFpbm9kZSlcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk2OS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5NzA6c3RhdGljIHN0cnVjdCBkZW50cnkgKmh1Z2V0bGJmc19ta2RpcihzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCwgc3RydWN0IGlub2RlICpkaXIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTcxLVxcdFxcdFxcdFxcdCAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgdW1vZGVfdCBtb2RlKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk3Mi17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTczOlxcdGludCByZXR2YWwgPSBodWdldGxiZnNfbWtub2QoaWRtYXAsIGRpciwgZGVudHJ5LFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk3NC1cXHRcXHRcXHRcXHQgICAgIG1vZGUsIDApO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTc5LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjk4MDpzdGF0aWMgaW50IGh1Z2V0bGJmc19jcmVhdGUoc3RydWN0IG1udF9pZG1hcCAqaWRtYXAsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTgxLVxcdFxcdFxcdCAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtOTgzLXtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5ODQ6XFx0cmV0dXJuIGh1Z2V0bGJmc19ta25vZChpZG1hcCwgZGlyLCBkZW50cnksIG1vZGUgfCBTX0lGUkVHLCAwKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05ODUtfVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTk4Ni1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzo5ODc6c3RhdGljIGludCBodWdldGxiZnNfdG1wZmlsZShzdHJ1Y3QgbW50X2lkbWFwICppZG1hcCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05ODgtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGZpbGUgKmZpbGUsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy05OTItXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6OTkzOlxcdGlub2RlID0gaHVnZXRsYmZzX2dldF9pbm9kZShkaXItXFx1MDAzZWlfc2IsIGlkbWFwLCBkaXIsIG1vZGUgfCBTX0lGUkVHLCAwKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy05OTQtXFx0aWYgKCFpbm9kZSlcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMDAtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTAwMTpzdGF0aWMgaW50IGh1Z2V0bGJmc19zeW1saW5rKHN0cnVjdCBtbnRfaWRtYXAgKmlkbWFwLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMDItXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTAwOC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDA5OlxcdGlub2RlID0gaHVnZXRsYmZzX2dldF9pbm9kZShkaXItXFx1MDAzZWlfc2IsIGlkbWFwLCBkaXIsIG1vZGUsIDApO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMTAtXFx0aWYgKGlub2RlKSB7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDIzLSNpZmRlZiBDT05GSUdfTUlHUkFUSU9OXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTAyNDpzdGF0aWMgaW50IGh1Z2V0bGJmc19taWdyYXRlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwMjUtXFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpkc3QsIHN0cnVjdCBmb2xpbyAqc3JjLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA0NC0jZWxzZVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNDU6I2RlZmluZSBodWdldGxiZnNfbWlncmF0ZV9mb2xpbyBOVUxMXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA0Ni0jZW5kaWZcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMDQ3LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNDg6c3RhdGljIGludCBodWdldGxiZnNfZXJyb3JfcmVtb3ZlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNDktXFx0XFx0XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNTYtICovXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTA1NzpzdGF0aWMgaW50IGh1Z2V0bGJmc19zaG93X29wdGlvbnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgZGVudHJ5ICpyb290KVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwNTgte1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEwNTk6XFx0c3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8gPSBIVUdFVExCRlNfU0Iocm9vdC1cXHUwMDNlZF9zYik7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA2MC1cXHRzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wgPSBzYmluZm8tXFx1MDAzZXNwb29sO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA5My1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMDk0OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3N0YXRmcyhzdHJ1Y3QgZGVudHJ5ICpkZW50cnksIHN0cnVjdCBrc3RhdGZzICpidWYpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTA5NS17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTA5NjpcXHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbyA9IEhVR0VUTEJGU19TQihkZW50cnktXFx1MDAzZWRfc2IpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEwOTctXFx0c3RydWN0IGhzdGF0ZSAqaCA9IGhzdGF0ZV9pbm9kZShkX2lub2RlKGRlbnRyeSkpO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTEyOC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTI5OnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19wdXRfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpzYilcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTMwLXtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTMxOlxcdHN0cnVjdCBodWdldGxiZnNfc2JfaW5mbyAqc2JpID0gSFVHRVRMQkZTX1NCKHNiKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTMyLVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE0MS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTQyOnN0YXRpYyBpbmxpbmUgaW50IGh1Z2V0bGJmc19kZWNfZnJlZV9pbm9kZXMoc3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8pXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE0My17XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTU2LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNTc6c3RhdGljIHZvaWQgaHVnZXRsYmZzX2luY19mcmVlX2lub2RlcyhzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbylcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTU4LXtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExNjYtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE2NzpzdGF0aWMgc3RydWN0IGttZW1fY2FjaGUgKmh1Z2V0bGJmc19pbm9kZV9jYWNoZXA7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE2OC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTY5OnN0YXRpYyBzdHJ1Y3QgaW5vZGUgKmh1Z2V0bGJmc19hbGxvY19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExNzAte1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzE6XFx0c3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmluZm8gPSBIVUdFVExCRlNfU0Ioc2IpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExNzI6XFx0c3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvICpwO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExNzMtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE3NDpcXHRpZiAodW5saWtlbHkoIWh1Z2V0bGJmc19kZWNfZnJlZV9pbm9kZXMoc2JpbmZvKSkpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE3NS1cXHRcXHRyZXR1cm4gTlVMTDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTc2OlxcdHAgPSBhbGxvY19pbm9kZV9zYihzYiwgaHVnZXRsYmZzX2lub2RlX2NhY2hlcCwgR0ZQX0tFUk5FTCk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE3Ny1cXHRpZiAodW5saWtlbHkoIXApKSB7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE3ODpcXHRcXHRodWdldGxiZnNfaW5jX2ZyZWVfaW5vZGVzKHNiaW5mbyk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE3OS1cXHRcXHRyZXR1cm4gTlVMTDtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExODMtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE4NDpzdGF0aWMgdm9pZCBodWdldGxiZnNfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExODUte1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExODY6XFx0dHJhY2VfaHVnZXRsYmZzX2ZyZWVfaW5vZGUoaW5vZGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExODc6XFx0a21lbV9jYWNoZV9mcmVlKGh1Z2V0bGJmc19pbm9kZV9jYWNoZXAsIEhVR0VUTEJGU19JKGlub2RlKSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE4OC19XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE4OS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTkwOnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19kZXN0cm95X2lub2RlKHN0cnVjdCBpbm9kZSAqaW5vZGUpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTE5MS17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE5MjpcXHRodWdldGxiZnNfaW5jX2ZyZWVfaW5vZGVzKEhVR0VUTEJGU19TQihpbm9kZS1cXHUwMDNlaV9zYikpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExOTMtfVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTExOTQtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTE5NTpzdGF0aWMgY29uc3Qgc3RydWN0IGFkZHJlc3Nfc3BhY2Vfb3BlcmF0aW9ucyBodWdldGxiZnNfYW9wcyA9IHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTk2OlxcdC53cml0ZV9iZWdpblxcdD0gaHVnZXRsYmZzX3dyaXRlX2JlZ2luLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjExOTc6XFx0LndyaXRlX2VuZFxcdD0gaHVnZXRsYmZzX3dyaXRlX2VuZCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMTk4LVxcdC5kaXJ0eV9mb2xpb1xcdD0gbm9vcF9kaXJ0eV9mb2xpbyxcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMTk5OlxcdC5taWdyYXRlX2ZvbGlvICA9IGh1Z2V0bGJmc19taWdyYXRlX2ZvbGlvLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMDA6XFx0LmVycm9yX3JlbW92ZV9mb2xpb1xcdD0gaHVnZXRsYmZzX2Vycm9yX3JlbW92ZV9mb2xpbyxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjAxLX07XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMjA0PXN0YXRpYyB2b2lkIGluaXRfb25jZSh2b2lkICpmb28pXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIwNS17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIwNjpcXHRzdHJ1Y3QgaHVnZXRsYmZzX2lub2RlX2luZm8gKmVpID0gZm9vO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMDctXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjEwLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMTE6c3RhdGljIGNvbnN0IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgaHVnZXRsYmZzX2ZpbGVfb3BlcmF0aW9ucyA9IHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjEyOlxcdC5yZWFkX2l0ZXJcXHRcXHQ9IGh1Z2V0bGJmc19yZWFkX2l0ZXIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIxMzpcXHQubW1hcFxcdFxcdFxcdD0gaHVnZXRsYmZzX2ZpbGVfbW1hcCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjE0LVxcdC5mc3luY1xcdFxcdFxcdD0gbm9vcF9mc3luYyxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMTYtXFx0Lmxsc2Vla1xcdFxcdFxcdD0gZGVmYXVsdF9sbHNlZWssXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTIxNzpcXHQuZmFsbG9jYXRlXFx0XFx0PSBodWdldGxiZnNfZmFsbG9jYXRlLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMTgtXFx0LmZvcF9mbGFnc1xcdFxcdD0gRk9QX0hVR0VfUEFHRVMsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjIwLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMjE6c3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIGh1Z2V0bGJmc19kaXJfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjIyOlxcdC5jcmVhdGVcXHRcXHQ9IGh1Z2V0bGJmc19jcmVhdGUsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIyMy1cXHQubG9va3VwXFx0XFx0PSBzaW1wbGVfbG9va3VwLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIyNS1cXHQudW5saW5rXFx0XFx0PSBzaW1wbGVfdW5saW5rLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMjY6XFx0LnN5bWxpbmtcXHQ9IGh1Z2V0bGJmc19zeW1saW5rLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyMjc6XFx0Lm1rZGlyXFx0XFx0PSBodWdldGxiZnNfbWtkaXIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIyOC1cXHQucm1kaXJcXHRcXHQ9IHNpbXBsZV9ybWRpcixcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjI5OlxcdC5ta25vZFxcdFxcdD0gaHVnZXRsYmZzX21rbm9kLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyMzAtXFx0LnJlbmFtZVxcdFxcdD0gc2ltcGxlX3JlbmFtZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjMxOlxcdC5zZXRhdHRyXFx0PSBodWdldGxiZnNfc2V0YXR0cixcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjMyOlxcdC50bXBmaWxlXFx0PSBodWdldGxiZnNfdG1wZmlsZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjMzLX07XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzNC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjM1OnN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBodWdldGxiZnNfaW5vZGVfb3BlcmF0aW9ucyA9IHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjM2OlxcdC5zZXRhdHRyXFx0PSBodWdldGxiZnNfc2V0YXR0cixcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMjM3LX07XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTIzOC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjM5OnN0YXRpYyBjb25zdCBzdHJ1Y3Qgc3VwZXJfb3BlcmF0aW9ucyBodWdldGxiZnNfb3BzID0ge1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyNDA6XFx0LmFsbG9jX2lub2RlICAgID0gaHVnZXRsYmZzX2FsbG9jX2lub2RlLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyNDE6XFx0LmZyZWVfaW5vZGUgICAgID0gaHVnZXRsYmZzX2ZyZWVfaW5vZGUsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0MjpcXHQuZGVzdHJveV9pbm9kZSAgPSBodWdldGxiZnNfZGVzdHJveV9pbm9kZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQzOlxcdC5ldmljdF9pbm9kZVxcdD0gaHVnZXRsYmZzX2V2aWN0X2lub2RlLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEyNDQ6XFx0LnN0YXRmc1xcdFxcdD0gaHVnZXRsYmZzX3N0YXRmcyxcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjQ1OlxcdC5wdXRfc3VwZXJcXHQ9IGh1Z2V0bGJmc19wdXRfc3VwZXIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI0NjpcXHQuc2hvd19vcHRpb25zXFx0PSBodWdldGxiZnNfc2hvd19vcHRpb25zLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyNDctfTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jPTEyNTQ9c3RhdGljIGxvbmdcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjU1Omh1Z2V0bGJmc19zaXplX3RvX2hwYWdlcyhzdHJ1Y3QgaHN0YXRlICpoLCB1bnNpZ25lZCBsb25nIGxvbmcgc2l6ZV9vcHQsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI1NjpcXHRcXHRcXHQgZW51bSBodWdldGxiZnNfc2l6ZV90eXBlIHZhbF90eXBlKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyNTcte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTI3My0gKi9cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMjc0OnN0YXRpYyBpbnQgaHVnZXRsYmZzX3BhcnNlX3BhcmFtKHN0cnVjdCBmc19jb250ZXh0ICpmYywgc3RydWN0IGZzX3BhcmFtZXRlciAqcGFyYW0pXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTI3NS17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTI3NjpcXHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eCA9IGZjLVxcdTAwM2Vmc19wcml2YXRlO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEyNzctXFx0c3RydWN0IGZzX3BhcnNlX3Jlc3VsdCByZXN1bHQ7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzQ4LSAqL1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEzNDk6c3RhdGljIGludCBodWdldGxiZnNfdmFsaWRhdGUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNTAte1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEzNTE6XFx0c3RydWN0IGh1Z2V0bGJmc19mc19jb250ZXh0ICpjdHggPSBmYy1cXHUwMDNlZnNfcHJpdmF0ZTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzUyLVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTM1Ni1cXHQgKi9cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzU3OlxcdGN0eC1cXHUwMDNlbWF4X2hwYWdlcyA9IGh1Z2V0bGJmc19zaXplX3RvX2hwYWdlcyhjdHgtXFx1MDAzZWhzdGF0ZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzU4LVxcdFxcdFxcdFxcdFxcdFxcdCAgIGN0eC1cXHUwMDNlbWF4X3NpemVfb3B0LFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNTktXFx0XFx0XFx0XFx0XFx0XFx0ICAgY3R4LVxcdTAwM2VtYXhfdmFsX3R5cGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEzNjA6XFx0Y3R4LVxcdTAwM2VtaW5faHBhZ2VzID0gaHVnZXRsYmZzX3NpemVfdG9faHBhZ2VzKGN0eC1cXHUwMDNlaHN0YXRlLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTEzNjEtXFx0XFx0XFx0XFx0XFx0XFx0ICAgY3R4LVxcdTAwM2VtaW5fc2l6ZV9vcHQsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xMzc2PXN0YXRpYyBpbnRcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzc3Omh1Z2V0bGJmc19maWxsX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsIHN0cnVjdCBmc19jb250ZXh0ICpmYylcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzc4LXtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxMzc5OlxcdHN0cnVjdCBodWdldGxiZnNfZnNfY29udGV4dCAqY3R4ID0gZmMtXFx1MDAzZWZzX3ByaXZhdGU7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTM4MDpcXHRzdHJ1Y3QgaHVnZXRsYmZzX3NiX2luZm8gKnNiaW5mbztcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzgxLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjEzODI6XFx0c2JpbmZvID0ga21hbGxvY19vYmooc3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xMzgzLVxcdGlmICghc2JpbmZvKVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQxMC1cXHRzYi1cXHUwMDNlc19tYWdpYyA9IEhVR0VUTEJGU19NQUdJQztcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDExOlxcdHNiLVxcdTAwM2VzX29wID0gXFx1MDAyNmh1Z2V0bGJmc19vcHM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQxMi1cXHRzYi1cXHUwMDNlc19kX2ZsYWdzID0gRENBQ0hFX0RPTlRDQUNIRTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MTUtXFx0LypcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDE2OlxcdCAqIER1ZSB0byB0aGUgc3BlY2lhbCBhbmQgbGltaXRlZCBmdW5jdGlvbmFsaXR5IG9mIGh1Z2V0bGJmcywgaXQgZG9lc1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MTctXFx0ICogbm90IHdvcmsgd2VsbCBhcyBhIHN0YWNraW5nIGZpbGVzeXN0ZW0uXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDE5LVxcdHNiLVxcdTAwM2VzX3N0YWNrX2RlcHRoID0gRklMRVNZU1RFTV9NQVhfU1RBQ0tfREVQVEg7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQyMDpcXHRzYi1cXHUwMDNlc19yb290ID0gZF9tYWtlX3Jvb3QoaHVnZXRsYmZzX2dldF9yb290KHNiLCBjdHgpKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDIxLVxcdGlmICghc2ItXFx1MDAzZXNfcm9vdClcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0MjktXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQzMDpzdGF0aWMgaW50IGh1Z2V0bGJmc19nZXRfdHJlZShzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzMS17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQzMjpcXHRpbnQgZXJyID0gaHVnZXRsYmZzX3ZhbGlkYXRlKGZjKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDMzLVxcdGlmIChlcnIpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzNC1cXHRcXHRyZXR1cm4gZXJyO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0MzU6XFx0cmV0dXJuIGdldF90cmVlX25vZGV2KGZjLCBodWdldGxiZnNfZmlsbF9zdXBlcik7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzNi19XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQzNy1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDM4OnN0YXRpYyB2b2lkIGh1Z2V0bGJmc19mc19jb250ZXh0X2ZyZWUoc3RydWN0IGZzX2NvbnRleHQgKmZjKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0Mzkte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ0Mi1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgZnNfY29udGV4dF9vcGVyYXRpb25zIGh1Z2V0bGJmc19mc19jb250ZXh0X29wcyA9IHtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQ0OlxcdC5mcmVlXFx0XFx0PSBodWdldGxiZnNfZnNfY29udGV4dF9mcmVlLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0NDU6XFx0LnBhcnNlX3BhcmFtXFx0PSBodWdldGxiZnNfcGFyc2VfcGFyYW0sXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ0NjpcXHQuZ2V0X3RyZWVcXHQ9IGh1Z2V0bGJmc19nZXRfdHJlZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDQ3LX07XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ0OC1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDQ5OnN0YXRpYyBpbnQgaHVnZXRsYmZzX2luaXRfZnNfY29udGV4dChzdHJ1Y3QgZnNfY29udGV4dCAqZmMpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ1MC17XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ1MTpcXHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDUyLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE0NTM6XFx0Y3R4ID0ga3phbGxvY19vYmooc3RydWN0IGh1Z2V0bGJmc19mc19jb250ZXh0KTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDU0LVxcdGlmICghY3R4KVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ2Ni1cXHRmYy1cXHUwMDNlZnNfcHJpdmF0ZSA9IGN0eDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDY3OlxcdGZjLVxcdTAwM2VvcHNcXHQ9IFxcdTAwMjZodWdldGxiZnNfZnNfY29udGV4dF9vcHM7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ2OC1cXHRyZXR1cm4gMDtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NzAtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3MTpzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgaHVnZXRsYmZzX2ZzX3R5cGUgPSB7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3MjpcXHQubmFtZVxcdFxcdFxcdD0gXFxcImh1Z2V0bGJmc1xcXCIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3MzpcXHQuaW5pdF9mc19jb250ZXh0XFx0PSBodWdldGxiZnNfaW5pdF9mc19jb250ZXh0LFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NzQtXFx0LnBhcmFtZXRlcnNcXHRcXHQ9IGh1Z2V0bGJfZnNfcGFyYW1ldGVycyxcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE0NzgtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTQ3OTpzdGF0aWMgc3RydWN0IHZmc21vdW50ICpodWdldGxiZnNfdmZzbW91bnRbSFVHRV9NQVhfSFNUQVRFXTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNDgwLVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTUwMT1zdHJ1Y3QgZmlsZSAqaHVnZXRsYl9maWxlX3NldHVwKGNvbnN0IGNoYXIgKm5hbWUsIHNpemVfdCBzaXplLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTUxMy1cXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTE0OlxcdG1udCA9IGh1Z2V0bGJmc192ZnNtb3VudFtoc3RhdGVfaWR4XTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTE1LVxcdGlmICghbW50KVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTUyOS1cXHRmaWxlID0gRVJSX1BUUigtRU5PU1BDKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTMwOlxcdC8qIGh1Z2V0bGJmc192ZnNtb3VudFtdIG1vdW50cyBkbyBub3QgdXNlIGlkbWFwcGVkIG1vdW50cy4gICovXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTUzMTpcXHRpbm9kZSA9IGh1Z2V0bGJmc19nZXRfaW5vZGUobW50LVxcdTAwM2VtbnRfc2IsIFxcdTAwMjZub3BfbW50X2lkbWFwLCBOVUxMLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1MzItXFx0XFx0XFx0XFx0ICAgIFNfSUZSRUcgfCBTX0lSV1hVR08sIDApO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU0Ni1cXHRcXHRmaWxlID0gYWxsb2NfZmlsZV9wc2V1ZG8oaW5vZGUsIG1udCwgbmFtZSwgT19SRFdSLFxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1NDc6XFx0XFx0XFx0XFx0XFx0XFx1MDAyNmh1Z2V0bGJmc19maWxlX29wZXJhdGlvbnMpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NDgtXFx0aWYgKCFJU19FUlIoZmlsZSkpXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTU1LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1NTY6c3RhdGljIHN0cnVjdCB2ZnNtb3VudCAqX19pbml0IG1vdW50X29uZV9odWdldGxiZnMoc3RydWN0IGhzdGF0ZSAqaClcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTU3LXtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NjAtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU2MTpcXHRmYyA9IGZzX2NvbnRleHRfZm9yX21vdW50KFxcdTAwMjZodWdldGxiZnNfZnNfdHlwZSwgU0JfS0VSTk1PVU5UKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTYyLVxcdGlmIChJU19FUlIoZmMpKSB7XFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTY0LVxcdH0gZWxzZSB7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU2NTpcXHRcXHRzdHJ1Y3QgaHVnZXRsYmZzX2ZzX2NvbnRleHQgKmN0eCA9IGZjLVxcdTAwM2Vmc19wcml2YXRlO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NjYtXFx0XFx0Y3R4LVxcdTAwM2Voc3RhdGUgPSBoO1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU3MC1cXHRpZiAoSVNfRVJSKG1udCkpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU3MTpcXHRcXHRwcl9lcnIoXFxcIkNhbm5vdCBtb3VudCBpbnRlcm5hbCBodWdldGxiZnMgZm9yIHBhZ2Ugc2l6ZSAlbHVLXFxcIixcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTcyLVxcdFxcdCAgICAgICBodWdlX3BhZ2Vfc2l6ZShoKSAvIFNaXzFLKTtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1NzUtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU3NjpzdGF0aWMgaW50IF9faW5pdCBpbml0X2h1Z2V0bGJmc19mcyh2b2lkKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE1Nzcte1xcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU4OC1cXHRlcnJvciA9IC1FTk9NRU07XFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU4OTpcXHRodWdldGxiZnNfaW5vZGVfY2FjaGVwID0ga21lbV9jYWNoZV9jcmVhdGUoXFxcImh1Z2V0bGJmc19pbm9kZV9jYWNoZVxcXCIsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTU5MDpcXHRcXHRcXHRcXHRcXHRzaXplb2Yoc3RydWN0IGh1Z2V0bGJmc19pbm9kZV9pbmZvKSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTkxLVxcdFxcdFxcdFxcdFxcdDAsIFNMQUJfQUNDT1VOVCwgaW5pdF9vbmNlKTtcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNTkyOlxcdGlmIChodWdldGxiZnNfaW5vZGVfY2FjaGVwID09IE5VTEwpXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU5My1cXHRcXHRnb3RvIG91dDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTk0LVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1OTU6XFx0ZXJyb3IgPSByZWdpc3Rlcl9maWxlc3lzdGVtKFxcdTAwMjZodWdldGxiZnNfZnNfdHlwZSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU5Ni1cXHRpZiAoZXJyb3IpXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTk5LVxcdC8qIGRlZmF1bHQgaHN0YXRlIG1vdW50IGlzIHJlcXVpcmVkICovXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTYwMDpcXHRtbnQgPSBtb3VudF9vbmVfaHVnZXRsYmZzKFxcdTAwMjZkZWZhdWx0X2hzdGF0ZSk7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYwMS1cXHRpZiAoSVNfRVJSKG1udCkpIHtcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MDQtXFx0fVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MDU6XFx0aHVnZXRsYmZzX3Zmc21vdW50W2RlZmF1bHRfaHN0YXRlX2lkeF0gPSBtbnQ7XFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTYwNi1cXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MTQtXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTYxNTpcXHRcXHRtbnQgPSBtb3VudF9vbmVfaHVnZXRsYmZzKGgpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MTYtXFx0XFx0aWYgKElTX0VSUihtbnQpKVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MTc6XFx0XFx0XFx0aHVnZXRsYmZzX3Zmc21vdW50W2ldID0gTlVMTDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjE4LVxcdFxcdGVsc2VcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNjE5OlxcdFxcdFxcdGh1Z2V0bGJmc192ZnNtb3VudFtpXSA9IG1udDtcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNjIwLVxcdFxcdGkrKztcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MjUtIG91dF91bnJlZzpcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNjI2OlxcdCh2b2lkKXVucmVnaXN0ZXJfZmlsZXN5c3RlbShcXHUwMDI2aHVnZXRsYmZzX2ZzX3R5cGUpO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MjctIG91dF9mcmVlOlxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2Mjg6XFx0a21lbV9jYWNoZV9kZXN0cm95KGh1Z2V0bGJmc19pbm9kZV9jYWNoZXApO1xcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MjktIG91dDpcXG4tLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jLTE2MzEtfVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE2MzI6ZnNfaW5pdGNhbGwoaW5pdF9odWdldGxiZnNfZnMpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU4OjQ2Ljg0NTM1MzUyMloiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIzMDgyMzI0NzYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgSHVnZXRsYmZzIENvbmZpZ3VyYXRpb24qKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBzdHJhaWdodCBpbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gemVybyBpbiBvbiBgZnMvS2NvbmZpZ2AuIFRoYXQncyB3aGVyZSBhbGwgdGhlIGludGVyZXN0aW5nIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQsIGFuZCBzcGVjaWZpY2FsbHksIEknbSBiZXR0aW5nIHRoZSBjcnVjaWFsIG9uZXMgZm9yIEh1Z2V0bGJmcyBhbmQgaHVnZSBwYWdlcyB3aWxsIGJlIGluIHRoZXJlLiBJJ20gdGhpbmtpbmcgYXJvdW5kIGxpbmUgMjUwLCBnaXZlIG9yIHRha2UgYSBmZXcgbGluZXMg4oCTIHRoYXQncyBvZnRlbiB3aGVyZSByZWxhdGVkIG9wdGlvbnMgdGVuZCB0byBjbHVzdGVyLiBJIG5lZWQgdG8gcmVmcmVzaCBteSBtZW1vcnkgb24gdGhlIHByZWNpc2UgY29uZmlnIHN5bWJvbHMsIHNvIEkgd2FudCB0byBwaW5wb2ludCB0aGUgZGVmaW5pdGlvbnMgb2YgYEhVR0VUTEJGU2AgYW5kIGBIVUdFVExCX1BBR0VgLiBLbm93aW5nIHRoZSBleGFjdCBvcHRpb25zIGlzIGtleS4gSSBuZWVkIHRvIHF1aWNrbHkgaWRlbnRpZnkgdGhlaXIgZGVwZW5kZW5jaWVzLCBkZWZhdWx0cywgYW5kIGFueSBhc3NvY2lhdGVkIGhlbHAgdGV4dC4gSSB3YW50IHRvIHVuZGVyc3RhbmQgd2hhdCdzIHJlcXVpcmVkIGZvciB0aGVtIHRvIGJlIGVuYWJsZWQgb3IgZGlzYWJsZWQsIGFuZCBob3cgdGhleSByZWxhdGUgdG8gZWFjaCBvdGhlci4gVGhpcyBzaG91bGQgY2xhcmlmeSB0aGUgb3ZlcmFsbCBjb25maWd1cmF0aW9uIGxhbmRzY2FwZSBmb3IgSHVnZXRsYmZzIHdpdGhpbiB0aGUga2VybmVsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDIzNiwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU4OjQ5LjE1MzU4ODYyOFoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDg5ODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNDUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAyNDU6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAyNDY6XFx0XFxuIDI0NzpcXHRjb25maWcgQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4gMjQ4OlxcdFxcdGRlZl9ib29sIG5cXG4gMjQ5OlxcdFxcbiAyNTA6XFx0bWVudWNvbmZpZyBIVUdFVExCRlNcXG4gMjUxOlxcdFxcdGJvb2wgXFxcIkh1Z2VUTEIgZmlsZSBzeXN0ZW0gc3VwcG9ydFxcXCJcXG4gMjUyOlxcdFxcdGRlcGVuZHMgb24gQVJDSF9TVVBQT1JUU19IVUdFVExCRlNcXG4gMjUzOlxcdFxcdHNlbGVjdCBNRU1GRF9DUkVBVEVcXG4gMjU0OlxcdFxcdHNlbGVjdCBQQURBVEEgaWYgU01QXFxuIDI1NTpcXHRcXHRoZWxwXFxuIDI1NjpcXHRcXHQgIGh1Z2V0bGJmcyBpcyBhIGZpbGVzeXN0ZW0gYmFja2luZyBmb3IgSHVnZVRMQiBwYWdlcywgYmFzZWQgb25cXG4gMjU3OlxcdFxcdCAgcmFtZnMuIEZvciBhcmNoaXRlY3R1cmVzIHRoYXQgc3VwcG9ydCBpdCwgc2F5IFkgaGVyZSBhbmQgcmVhZFxcbiAyNTg6XFx0XFx0ICBcXHUwMDNjZmlsZTpEb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL21tL2h1Z2V0bGJwYWdlLnJzdFxcdTAwM2UgZm9yIGRldGFpbHMuXFxuIDI1OTpcXHRcXG4gMjYwOlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG4gMjYxOlxcdFxcbiAyNjI6XFx0aWYgSFVHRVRMQkZTXFxuIDI2MzpcXHRjb25maWcgSFVHRVRMQl9QQUdFX09QVElNSVpFX1ZNRU1NQVBfREVGQVVMVF9PTlxcbiAyNjQ6XFx0XFx0Ym9vbCBcXFwiSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvblxcXCJcXG4gMjY1OlxcdFxcdGRlZmF1bHQgblxcbiAyNjY6XFx0XFx0ZGVwZW5kcyBvbiBIVUdFVExCX1BBR0VfT1BUSU1JWkVfVk1FTU1BUFxcbiAyNjc6XFx0XFx0aGVscFxcbiAyNjg6XFx0XFx0ICBUaGUgSHVnZVRMQiBWbWVtbWFwIE9wdGltaXphdGlvbiAoSFZPKSBkZWZhdWx0cyB0byBvZmYuIFNheSBZIGhlcmUgdG9cXG4gMjY5OlxcdFxcdCAgZW5hYmxlIEhWTyBieSBkZWZhdWx0LiBJdCBjYW4gYmUgZGlzYWJsZWQgdmlhIGh1Z2V0bGJfZnJlZV92bWVtbWFwPW9mZlxcbiAyNzA6XFx0XFx0ICAoYm9vdCBjb21tYW5kIGxpbmUpIG9yIGh1Z2V0bGJfb3B0aW1pemVfdm1lbW1hcCAoc3lzY3RsKS5cXG4gMjcxOlxcdGVuZGlmICMgSFVHRVRMQkZTXFxuIDI3MjpcXHRcXG4gMjczOlxcdGNvbmZpZyBIVUdFVExCX1BBR0VcXG4gMjc0OlxcdFxcdGRlZl9ib29sIEhVR0VUTEJGU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1ODo0OS4xNTM3MDE0ODhaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzI2OTUzNjEzMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGxpY2F0aW9ucyBvZiBDT05GSUdfSFVHRVRMQkZTKipcblxuT2theSwgc28gYENPTkZJR19IVUdFVExCRlNgIGlzIGVuYWJsZWQsIHdoaWNoLCBhcyBJIGtub3csIGF1dG9tYXRpY2FsbHkgbWVhbnMgYEhVR0VUTEJfUEFHRWAgaXMgYWxzbyBlbmFibGVkLiBMZXQncyBkaWcgaW50byB0aGUgZGV0YWlscyBvZiB0aGlzIHBhdGNoLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wYWN0IG9mIHRoZXNlIGNoYW5nZXMuXG5cbkZpcnN0LCBJIG5lZWQgdG8gc2VlIHdoaWNoIHN5bWJvbHMgYXJlIGJlaW5nIHRvdWNoZWQuIEkgc2VlIGNoYW5nZXMgdG8gYGh1Z2V0bGJmc19zdGF0ZnNgIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2AuIFRoYXQncyBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgZmlsZSBzeXN0ZW0gc3RhdGlzdGljcyB3aXRoIGh1Z2V0bGIgcGFnZXMuIFRoZW4gdGhlcmUgYXJlIHNvbWUgc3RhdGljIGZ1bmN0aW9ucyBpbiBgbW0vaHVnZXRsYi5jYDogYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYCwgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCwgYW5kIGBzdWJwb29sX2lzX2ZyZWVgLiBUaGUgdXNlIG9mIHN0YXRpYyBpcyBzaWduaWZpY2FudCwgYXMgaXQgbGltaXRzIHRoZWlyIHZpc2liaWxpdHkgYW5kIHVzYWdlLiBMYXN0bHksIEkgbm90aWNlIHR3byBub24tc3RhdGljIGZ1bmN0aW9ucywgYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYWxzbyBpbiBgbW0vaHVnZXRsYi5jYC5cblxuTm93LCBJJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gdGhvc2Ugc3VicG9vbCBmdW5jdGlvbnMuIEkgbmVlZCB0byBjb25maXJtIHRoYXQgYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYCBhbmQgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCBhcmUgaW5kZWVkIHN0YXRpYywgYW5kLCBtb3JlIGltcG9ydGFudGx5LCBJIG5lZWQgdG8gdHJhY2UgdGhlaXIgY2FsbGVycy4gVW5kZXJzdGFuZGluZyB3aGVyZSB0aGVzZSBzdWJwb29sIGZ1bmN0aW9ucyBhcmUgdXNlZCBpcyBjcml0aWNhbCBmb3IgZ3Jhc3BpbmcgdGhlIHNjb3BlIGFuZCBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IG9mIGh1Z2V0bGIgcGFnZXMuIFRoaXMgYW5hbHlzaXMgd2lsbCBoZWxwIG1lIGFzc2VzcyB0aGUgcGF0Y2gncyBwb3RlbnRpYWwgaW1wYWN0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk5NiwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU4OjUyLjQyMzI0MDI0MVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjEyNDA5MjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXBhZ2Vfc3VicG9vbF8oZ2V0fHB1dClfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vaHVnZXRsYi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0xNzk9dm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXFxuLS1cXG5tbS9odWdldGxiLmMtMTkyLS8qKlxcbm1tL2h1Z2V0bGIuYzoxOTM6ICogaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMgLSBHZXQgcGFnZXMgZnJvbSBhIHN1YnBvb2xcXG5tbS9odWdldGxiLmMtMTk0LSAqIEBzcG9vbDogcG9pbnRlciB0byBzdWJwb29sIHN0cnVjdHVyZSAobWF5IGJlIE5VTEwpXFxuLS1cXG5tbS9odWdldGxiLmMtMjA0LSAqL1xcbm1tL2h1Z2V0bGIuYzoyMDU6c3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbm1tL2h1Z2V0bGIuYy0yMDYtXFx0XFx0XFx0XFx0ICAgICAgbG9uZyBkZWx0YSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNDMtLyoqXFxubW0vaHVnZXRsYi5jOjI0NDogKiBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyAtIFJlbGVhc2UgcGFnZXMgYmFjayB0byBhIHN1YnBvb2xcXG5tbS9odWdldGxiLmMtMjQ1LSAqIEBzcG9vbDogcG9pbnRlciB0byBzdWJwb29sIHN0cnVjdHVyZSAobWF5IGJlIE5VTEwpXFxuLS1cXG5tbS9odWdldGxiLmMtMjU2LSAqL1xcbm1tL2h1Z2V0bGIuYzoyNTc6c3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxcbm1tL2h1Z2V0bGIuYy0yNTgtXFx0XFx0XFx0XFx0ICAgICAgIGxvbmcgZGVsdGEpXFxuLS1cXG5tbS9odWdldGxiLmM9OTc1PXZvaWQgaHVnZXRsYl9maXhfcmVzZXJ2ZV9jb3VudHMoc3RydWN0IGlub2RlICppbm9kZSlcXG4tLVxcbm1tL2h1Z2V0bGIuYy05ODAtXFxubW0vaHVnZXRsYi5jOjk4MTpcXHRyc3ZfYWRqdXN0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xcbm1tL2h1Z2V0bGIuYy05ODItXFx0aWYgKHJzdl9hZGp1c3QgXFx1MDAzZSAwKSB7XFxuLS1cXG5tbS9odWdldGxiLmM9MTY4Nj12b2lkIGZyZWVfaHVnZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vaHVnZXRsYi5jLTE3MTEtXFx0ICogd291bGQgaGF2ZSBiZWVuIGEgcGFnZSByZXNlcnZlZCBpbiB0aGUgc3VicG9vbCBiZWZvcmUgYWxsb2NhdGlvblxcbm1tL2h1Z2V0bGIuYzoxNzEyOlxcdCAqIHZpYSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcygpLiAgU2luY2Ugd2UgYXJlICdyZXN0b3JpbmcnIHRoZVxcbm1tL2h1Z2V0bGIuYzoxNzEzOlxcdCAqIHJlc2VydmF0aW9uLCBkbyBub3QgY2FsbCBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcygpIGFzIHRoaXMgd2lsbFxcbm1tL2h1Z2V0bGIuYy0xNzE0LVxcdCAqIHJlbW92ZSB0aGUgcmVzZXJ2ZWQgcGFnZSBmcm9tIHRoZSBzdWJwb29sLlxcbi0tXFxubW0vaHVnZXRsYi5jLTE3MjItXFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjE3MjM6XFx0XFx0aWYgKGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKSA9PSAwKVxcbm1tL2h1Z2V0bGIuYy0xNzI0LVxcdFxcdFxcdHJlc3RvcmVfcmVzZXJ2ZSA9IHRydWU7XFxuLS1cXG5tbS9odWdldGxiLmM9Mjk1Mj1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtMjk5Ni1cXHRpZiAobWFwX2NoZykge1xcbm1tL2h1Z2V0bGIuYzoyOTk3OlxcdFxcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTtcXG5tbS9odWdldGxiLmMtMjk5OC1cXHRcXHRpZiAoZ2JsX3Jlc3ZfZ2V0IFxcdTAwM2MgMCkge1xcbi0tXFxubW0vaHVnZXRsYi5jLTMwNjItXFxubW0vaHVnZXRsYi5jOjMwNjM6XFx0XFx0XFx0cnN2X2FkanVzdCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcXG5tbS9odWdldGxiLmMtMzA2NC1cXHRcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1yc3ZfYWRqdXN0KTtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0zMDc1LVxcdGlmIChtYXBfY2hnKSB7XFxubW0vaHVnZXRsYi5jOjMwNzY6XFx0XFx0bG9uZyBnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XFxubW0vaHVnZXRsYi5jLTMwNzctXFxuLS1cXG5tbS9odWdldGxiLmM9NDcxOT1zdGF0aWMgdm9pZCBodWdldGxiX3ZtX29wX2Nsb3NlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZXRsYi5jLTQ3NDItXFx0XFx0ICovXFxubW0vaHVnZXRsYi5jOjQ3NDM6XFx0XFx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgcmVzZXJ2ZSk7XFxubW0vaHVnZXRsYi5jLTQ3NDQtXFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTY2Njk9bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NzU1LVxcdCAqL1xcbm1tL2h1Z2V0bGIuYzo2NzU2OlxcdGdibF9yZXN2X2dldCA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpO1xcbm1tL2h1Z2V0bGIuYy02NzU3LVxcdGlmIChnYmxfcmVzdl9nZXQgXFx1MDAzYyAwKSB7XFxuLS1cXG5tbS9odWdldGxiLmMtNjgwNS1cXG5tbS9odWdldGxiLmM6NjgwNjpcXHRcXHRcXHRyc3ZfYWRqdXN0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsXFxubW0vaHVnZXRsYi5jLTY4MDctXFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0Y2hnIC0gYWRkKTtcXG4tLVxcbm1tL2h1Z2V0bGIuYy02ODI2LVxcdCAqL1xcbm1tL2h1Z2V0bGIuYzo2ODI3OlxcdGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCBjaGcpO1xcbm1tL2h1Z2V0bGIuYy02ODI4LVxcdC8qXFxuLS1cXG5tbS9odWdldGxiLmM9Njg1ND1sb25nIGh1Z2V0bGJfdW5yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsIGxvbmcgc3RhcnQsIGxvbmcgZW5kLFxcbi0tXFxubW0vaHVnZXRsYi5jLTY4ODgtXFx0ICovXFxubW0vaHVnZXRsYi5jOjY4ODk6XFx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgKGNoZyAtIGZyZWVkKSk7XFxubW0vaHVnZXRsYi5jLTY4OTAtXFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc2VydmUpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1ODo1Mi40ODQ0ODYyMTZaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mzk5MjYwODIyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSHVnZSBQYWdlIFN1YnBvb2wgRnVuY3Rpb25hbGl0eSoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGZvY3VzIG9uIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AgYW5kIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AuIEV2ZW4gdGhvdWdoIHRoZXkncmUgc3RhdGljIHdpdGhpbiBgbW0vaHVnZXRsYi5jYCwgYW5kIEknbSBhd2FyZSBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlbid0IGlubGluZWQgKmRvKiBoYXZlIHN5bWJvbHMgaW4gdm1saW51eCwgSSBuZWVkIHRvIG1ha2Ugc3VyZSBJJ20gZm9sbG93aW5nIGJlc3QgcHJhY3RpY2VzLiBUaW1lIHRvIHJlZnJlc2ggb24gdGhlIGd1aWRlbGluZXMuLi4gcmlnaHQsIHRoZSByZWxldmFudCBzZWN0aW9uIGlzOiBcIlRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UU1wiIGFuZCBcIkhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlNcIi5cblxuU28sIEknbSBub3RpbmcgdGhhdCBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgIGFuZCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgIGFyZSBzdGF0aWMgKm5vbi1pbmxpbmUqIGZ1bmN0aW9ucyBsb2NhdGVkIGluIGEgYC5jYCBmaWxlLCBzcGVjaWZpY2FsbHkgYG1tL2h1Z2V0bGIuY2AuIFRoYXQncyBpbXBvcnRhbnQuIEl0IG1lYW5zIHRoZXknbGwgc2hvdyB1cCBhcyBzeW1ib2xzLlxuXG5Ob3csIHRvIHNhdGlzZnkgdGhlIGd1aWRlbGluZXMsIEkgbmVlZCB0byBpZGVudGlmeSB0aGUgbm9uLXN0YXRpYywgZXhwb3J0ZWQsIG9yIGNhbGxlciBmdW5jdGlvbnMuIEFoLCBoZXJlIHdlIGdvOiBJJ3ZlIGlkZW50aWZpZWQgdGhlIGZ1bmN0aW9ucyB0aGF0IGFyZSBlaXRoZXIgdGhlIGVudHJ5IHBvaW50cyB0byB0aGUgc3Vic3lzdGVtIG9yIGFyZSBtb2RpZmllZCBkdWUgdG8gdGhlIGNoYW5nZSBpbiB0aGUgc3RhdGljIGZ1bmN0aW9ucy4gVGhlIGZ1bmN0aW9ucyBhcmU6XG5gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBgaHVnZXRsYmZzX3N0YXRmc2AsIGBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlc2AsIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc2AsIGBodWdlcGFnZV9wdXRfc3VicG9vbGAsIGBodWdldGxiX3VucmVzZXJ2ZV9wYWdlc2AuXG5cbkknbSBub3cgcmVhZHkgdG8gbG9vayBmb3IgdGhlIG90aGVyIGZ1bmN0aW9ucyBpbnZvbHZlZCBpbiB0aGlzIGFyZWEsIHNwZWNpZmljYWxseSB0aGUgb25lcyB0aGF0IGNhbGwgYHVubG9ja19vcl9yZWxlYXNlX3N1YnBvb2xgIC8gYHN1YnBvb2xfaXNfZnJlZWAsIHdoaWNoIHdpbGwgZ2l2ZSBtZSBhIG1vcmUgY29tcGxldGUgcGljdHVyZSBvZiB0aGUgaW50ZXJhY3Rpb25zIGluIHRoaXMgYXJlYS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjMwNTEsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6NTg6NTYuNDc3MDk3NTk2WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkyMzE0MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3VicG9vbF9pc19mcmVlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2V0bGIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9MTI3PXN0YXRpYyBzdHJ1Y3QgcmVzdl9tYXAgKnZtYV9yZXN2X21hcChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSk7XFxubW0vaHVnZXRsYi5jLTEyOC1cXG5tbS9odWdldGxiLmM6MTI5OnN0YXRpYyBpbmxpbmUgYm9vbCBzdWJwb29sX2lzX2ZyZWUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxcbm1tL2h1Z2V0bGIuYy0xMzAte1xcbi0tXFxubW0vaHVnZXRsYi5jPTEzNz1zdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxuLS1cXG5tbS9odWdldGxiLmMtMTM5LXtcXG5tbS9odWdldGxiLmM6MTQwOlxcdGJvb2wgZnJlZV9zdWJwb29sID0gc3VicG9vbF9pc19mcmVlKHNwb29sKTtcXG5tbS9odWdldGxiLmMtMTQxLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1ODo1Ni41OTYzMzYwMjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjAxNjU3NjgxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGFuYWx5c2lzIG9mIHRoZSBzaXR1YXRpb246XG5cbioqSW52ZXN0aWdhdGluZyB0aGUgQ2FsbGVycyBvZiBgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbGAqKlxuXG5Pa2F5LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgc3Vycm91bmRpbmcgdGhlIGB1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sYCBmdW5jdGlvbi4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gdHJhY2UgaXRzIHVzYWdlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGljaCBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFyZSBhY3R1YWxseSAqY2FsbGluZyogdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uLiBJdCdzIGNydWNpYWwgYmVjYXVzZSB0aGUgZnVuY3Rpb24ncyBuYW1lIHN1Z2dlc3RzIGl0IGhhcyBzb21ldGhpbmcgdG8gZG8gd2l0aCBlaXRoZXIgdW5sb2NraW5nIG9yIHJlbGVhc2luZyBhIHN1YnBvb2wsIHdoaWNoIGlzIGEgdmVyeSBzcGVjaWZpYyB0eXBlIG9mIGRhdGEgc3RydWN0dXJlLCBwcmVzdW1hYmx5LCByZWxhdGVkIHRvIHJlc291cmNlIG1hbmFnZW1lbnQgb3IgY29uY3VycmVuY3kgY29udHJvbC4gVW5kZXJzdGFuZGluZyB3aGVyZSBpdCdzIGJlaW5nIGludm9rZWQgd2lsbCByZXZlYWwgaXRzIHB1cnBvc2UgYW5kLCBwZXJoYXBzIG1vcmUgaW1wb3J0YW50bHksIHRoZSBjcml0aWNhbCBwYXRocyBvZiBleGVjdXRpb24gdGhhdCBkZXBlbmQgb24gaXRzIGNvcnJlY3Qgb3BlcmF0aW9uLiBJIG5lZWQgdG8gYmUgYWJsZSB0byBkZXRlcm1pbmUgdGhlIHBvdGVudGlhbCBzaWRlIGVmZmVjdHMgYXNzb2NpYXRlZCB3aXRoIHRoZSBjYWxsLCBhbmQgd2hldGhlciB0aGUgZnVuY3Rpb24gaXMgdXNlZCBpbiBzZXZlcmFsIGRpZmZlcmVudCBwbGFjZXMgb3Igb25seSBhIGhhbmRmdWwuIFRoaXMgd2lsbCBpbmZvcm0gbXkgaW52ZXN0aWdhdGlvbiBzaWduaWZpY2FudGx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDAzNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU4OjU4LjYxMjkxNzMyNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzA0MzA3MTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9odWdldGxiLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZXRsYi5jPTEyOT1zdGF0aWMgaW5saW5lIGJvb2wgc3VicG9vbF9pc19mcmVlKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbClcXG4tLVxcbm1tL2h1Z2V0bGIuYy0xMzYtXFxubW0vaHVnZXRsYi5jOjEzNzpzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxubW0vaHVnZXRsYi5jLTEzOC1cXHRcXHRcXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGlycV9mbGFncylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0xNzk9dm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXFxuLS1cXG5tbS9odWdldGxiLmMtMTg4LVxcdHNwb29sLVxcdTAwM2Vjb3VudC0tO1xcbm1tL2h1Z2V0bGIuYzoxODk6XFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbm1tL2h1Z2V0bGIuYy0xOTAtfVxcbi0tXFxubW0vaHVnZXRsYi5jPTI1Nz1zdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXFxuLS1cXG5tbS9odWdldGxiLmMtMjkxLVxcdCAqL1xcbm1tL2h1Z2V0bGIuYzoyOTI6XFx0dW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzcG9vbCwgZmxhZ3MpO1xcbm1tL2h1Z2V0bGIuYy0yOTMtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU4OjU4LjY4MzM1NDUyWiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM3MDYyMTMxMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqSW52ZXN0aWdhdGluZyBIdWdlVExCIFBhZ2UgUmVzZXJ2YXRpb25zKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGlzIGBodWdldGxiYCBzaXR1YXRpb24uIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB1bmRlcnN0YW5kaW5nIGhvdyBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCBpcyBiZWluZyB1c2VkLiBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB0aGUgY2FsbCBzdGFjazsgZXNzZW50aWFsbHksIHdoZXJlIGFyZSB0aGUgcG9pbnRzIGluIHRoZSBjb2RlIHRoYXQgYWN0dWFsbHkgaW52b2tlIHRoaXMgZnVuY3Rpb24/IFRoYXQncyB0aGUgY3JpdGljYWwgZmlyc3Qgc3RlcC4gTmV4dCwgSSdsbCBuZWVkIHRvIGNvcnJlbGF0ZSB0aGF0IGluZm9ybWF0aW9uIHdpdGggdGhlIGJyb2FkZXIgdXNlIGNhc2VzIG9mIHRoZSBodWdldGxiZnMgc3Vic3lzdGVtIGluIGdlbmVyYWwuIExldCdzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuIFRoaXMgd2lsbCBsaWtlbHkgaW52b2x2ZSBzb21lIGdyZXAgd29yayBhbmQgZm9sbG93aW5nIGNhbGwgZ3JhcGhzLiBLbm93aW5nIHRoaXMsIEkgY2FuIGJlZ2luIHRvIGdyYXNwIHdoYXQgdGhlIGtlcm5lbCBpcyBkb2luZyB3aXRoIHRoZXNlIHBhZ2VzLCB1bmRlcnN0YW5kIGFueSBwb3NzaWJsZSBjb250ZW50aW9uIGlzc3VlcyBhbmQgYWRkcmVzcyB0aGUgcm9vdCBvZiBhbnkgcmVsYXRlZCBwZXJmb3JtYW5jZSBwcm9ibGVtcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ1OTIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1OTowMi4zODk1NzE1MjFaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExODc0MDc3MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJodWdldGxiX3Jlc2VydmVfcGFnZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL2h1Z2V0bGJmcy9pbm9kZS5jPTk5PXN0YXRpYyBpbnQgaHVnZXRsYmZzX2ZpbGVfbW1hcChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTItXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM6MTUzOlxcdGlmIChodWdldGxiX3Jlc2VydmVfcGFnZXMoaW5vZGUsXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTU0LVxcdFxcdFxcdFxcdHZtYS1cXHUwMDNldm1fcGdvZmYgXFx1MDAzZVxcdTAwM2UgaHVnZV9wYWdlX29yZGVyKGgpLFxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmM9MTQ4OD1zdGF0aWMgaW50IGdldF9oc3RhdGVfaWR4KGludCBwYWdlX3NpemVfbG9nKVxcbi0tXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTQ5OC0gKiBOb3RlIHRoYXQgc2l6ZSBzaG91bGQgYmUgYWxpZ25lZCB0byBwcm9wZXIgaHVnZXBhZ2Ugc2l6ZSBpbiBjYWxsZXIgc2lkZSxcXG5mcy9odWdldGxiZnMvaW5vZGUuYzoxNDk5OiAqIG90aGVyd2lzZSBodWdldGxiX3Jlc2VydmVfcGFnZXMgcmVzZXJ2ZXMgb25lIGxlc3MgaHVnZXBhZ2VzIHRoYW4gaW50ZW5kZWQuXFxuZnMvaHVnZXRsYmZzL2lub2RlLmMtMTUwMC0gKi9cXG5mcy9odWdldGxiZnMvaW5vZGUuYz0xNTAxPXN0cnVjdCBmaWxlICpodWdldGxiX2ZpbGVfc2V0dXAoY29uc3QgY2hhciAqbmFtZSwgc2l6ZV90IHNpemUsXFxuLS1cXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTQwLVxcbmZzL2h1Z2V0bGJmcy9pbm9kZS5jOjE1NDE6XFx0aWYgKGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhpbm9kZSwgMCxcXG5mcy9odWdldGxiZnMvaW5vZGUuYy0xNTQyLVxcdFxcdFxcdHNpemUgXFx1MDAzZVxcdTAwM2UgaHVnZV9wYWdlX3NoaWZ0KGhzdGF0ZV9pbm9kZShpbm9kZSkpLCBOVUxMLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1OTowMi41MDgzMjAxNzJaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjYwMzgxMDk0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gSHVnZVRMQiBSZXNlcnZhdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBNeSBpbml0aWFsIHRob3VnaHQgcHJvY2VzcyBpcyBzcXVhcmVseSBmb2N1c2VkIG9uIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgIHdpdGhpbiB0aGUgYG1tL2AgZGlyZWN0b3J5LiBUaGF0IGZ1bmN0aW9uIGlzIHRoZSBsaW5jaHBpbiBmb3IgdW5kZXJzdGFuZGluZyBob3cgd2UgY2FydmUgb3V0IGFuZCBtYW5hZ2UgdGhvc2UgcHJlY2lvdXMgSHVnZVRMQiBwYWdlcywgYW5kIGl0J3Mgd2hlcmUgSSBuZWVkIHRvIHN0YXJ0LiBJIHdhbnQgdG8gcXVpY2tseSBldmFsdWF0ZSBob3cgdGhlIHJlc2VydmF0aW9uIGxvZ2ljIGlzIGltcGxlbWVudGVkIGhlcmUuIEknbSB0aGlua2luZyBhYm91dCB0aGUgYWxsb2NhdGlvbiBwb2xpY3kgaXQgZW1wbG95cywgcG90ZW50aWFsIGVkZ2UgY2FzZXMgYXJvdW5kIGZyYWdtZW50YXRpb24sIGFuZCBlc3BlY2lhbGx5IGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBOVU1BIG5vZGUgY29uc3RyYWludHMgKGlmIGl0IGRvZXMpLiBBbnkgb2J2aW91cyBmbGF3cyBvciBhcmVhcyB0aGF0IGNvdWxkIGJlbmVmaXQgZnJvbSBwZXJmb3JtYW5jZSB0dW5pbmcgY29tZSB0byBtaW5kLiBJJ20gZGlnZ2luZyBkZWVwZXIgaW50byBob3cgaXQgaW50ZXJhY3RzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIEh1Z2VUTEIgaW5mcmFzdHJ1Y3R1cmXigJR0aGUgbWFwcGluZywgdGhlIGZhdWx0IGhhbmRsaW5nLCBhbmQsIG9mIGNvdXJzZSwgZGVhbGxvY2F0aW9uLiBFc3NlbnRpYWxseSwgSSdtIHRyeWluZyB0byBnZXQgYSBxdWljayBtZW50YWwgbWFwIG9mIHRoZSByZXNlcnZhdGlvbiBwcm9jZXNzIHRvIGV2YWx1YXRlIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTE5NiwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU5OjA1LjExMjEzNTM5NloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzExMTM3ODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZXRsYl9yZXNlcnZlX3BhZ2VzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9odWdldGxiLmM9Mjk1Mj1zdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdldGxiLmMtMzA1My1cXHRcXHQgKiB2bWFfbmVlZHNfcmVzZXJ2YXRpb24gYW5kIHZtYV9jb21taXRfcmVzZXJ2YXRpb24uXFxubW0vaHVnZXRsYi5jOjMwNTQ6XFx0XFx0ICogVGhpcyBpbmRpY2F0ZXMgYSByYWNlIHdpdGggaHVnZXRsYl9yZXNlcnZlX3BhZ2VzLlxcbm1tL2h1Z2V0bGIuYy0zMDU1LVxcdFxcdCAqIEFkanVzdCBmb3IgdGhlIHN1YnBvb2wgY291bnQgaW5jcmVtZW50ZWQgYWJvdmUgQU5EXFxubW0vaHVnZXRsYi5jOjMwNTY6XFx0XFx0ICogaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzIGZvciB0aGUgc2FtZSBwYWdlLlxcdEFsc28sXFxubW0vaHVnZXRsYi5jOjMwNTc6XFx0XFx0ICogdGhlIHJlc2VydmF0aW9uIGNvdW50IGFkZGVkIGluIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1xcbm1tL2h1Z2V0bGIuYy0zMDU4LVxcdFxcdCAqIG5vIGxvbmdlciBhcHBsaWVzLlxcbi0tXFxubW0vaHVnZXRsYi5jPTY0OTM9bG9uZyBodWdldGxiX2NoYW5nZV9wcm90ZWN0aW9uKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTY2NjgtXFxubW0vaHVnZXRsYi5jOjY2Njk6bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG5tbS9odWdldGxiLmMtNjY3MC1cXHRcXHRsb25nIGZyb20sIGxvbmcgdG8sXFxuLS1cXG5tbS9odWdldGxiLmMtNjcxMS1cXHRcXHQvKlxcbm1tL2h1Z2V0bGIuYzo2NzEyOlxcdFxcdCAqIHJlc3ZfbWFwIGNhbiBub3QgYmUgTlVMTCBhcyBodWdldGxiX3Jlc2VydmVfcGFnZXMgaXMgb25seVxcbm1tL2h1Z2V0bGIuYy02NzEzLVxcdFxcdCAqIGNhbGxlZCBmb3IgaW5vZGVzIGZvciB3aGljaCByZXN2X21hcHMgd2VyZSBjcmVhdGVkIChzZWVcXG4tLVxcbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxcbi0tXFxubW0vbWVtZmQuYy04OS1cXG5tbS9tZW1mZC5jOjkwOlxcdFxcdG5yX3Jlc3YgPSBodWdldGxiX3Jlc2VydmVfcGFnZXMoaW5vZGUsIGlkeCwgaWR4ICsgMSwgTlVMTCwgRU1QVFlfVk1BX0ZMQUdTKTtcXG5tbS9tZW1mZC5jLTkxLVxcdFxcdGlmIChucl9yZXN2IFxcdTAwM2MgMClcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6NTk6MDUuMTgzMjU4MTExWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMxMzM2OTQ4NDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIGBhbGxvY19odWdldGxiX2ZvbGlvYDpcblxuKipEZWNvbnN0cnVjdGluZyBgYWxsb2NfaHVnZXRsYl9mb2xpb2AqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gYGFsbG9jX2h1Z2V0bGJfZm9saW9gLiBHaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBsYW5kc2NhcGUsIHRoaXMgZnVuY3Rpb24gaXMgb2J2aW91c2x5IGEgY3JpdGljYWwgcGllY2UuIEl0J3MgdGhlIGdhdGVrZWVwZXIgZm9yIEh1Z2VUTEIgZm9saW8gYWxsb2NhdGlvbiwgYW5kIHRoZXJlZm9yZSBkaXJlY3RseSBpbXBhY3RzIHRoZSBwZXJmb3JtYW5jZSBvZiBhcHBsaWNhdGlvbnMgdGhhdCBsZXZlcmFnZSBodWdlIHBhZ2VzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIG9uIGFuIGludGltYXRlIGxldmVsIHRvIG9wdGltaXplIHRoZSBjb2RlIEkgd29yayB3aXRoLlxuXG5NeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byB0cmFjZSBpdHMgb3JpZ2luIGFuZCB1c2FnZS4gV2hhdCBjYWxscyB0aGlzIGZ1bmN0aW9uPyBXaGF0IGFyZSB0aGUgY2FsbGluZyBjb250ZXh0cz8gSXMgaXQgY2FsbGVkIGZyb20gYSBjcml0aWNhbCBwYXRoPyBEb2VzIGl0IGhhbmRsZSBhbnkgbG9ja2luZywgb3IgYXNzdW1lIGl0J3MgcHJvdGVjdGVkIGF0IGEgaGlnaGVyIGxldmVsPyBUaGVzZSBhcmUgdGhlIGZpcnN0IHF1ZXN0aW9ucyBJIHdvdWxkIGhhdmUgdG8gYW5zd2VyIHRvIGZpZ3VyZSBvdXQgd2hlcmUgYW5kIGhvdyB0byB0d2VhayBpdC5cblxuSSdkIGFsc28gbmVlZCB0byBzY3J1dGluaXplIGl0cyBpbnRlcm5hbCBsb2dpYy4gSG93IGRvZXMgaXQgaW50ZXJhY3Qgd2l0aCB0aGUgdW5kZXJseWluZyBIdWdlVExCIGluZnJhc3RydWN0dXJlPyBEb2VzIGl0IHV0aWxpemUgYW55IGludGVybmFsIGRhdGEgc3RydWN0dXJlcz8gQXJlIHRoZXJlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3MsIGxpa2UgY29udGVudGlvbiBvbiBwYXJ0aWN1bGFyIHJlc291cmNlcyBvciBvdmVybHkgY29tcGxleCBhbGdvcml0aG1zPyBJJ2QgbG9vayBmb3IgYXJlYXMgd2hlcmUgb3B0aW1pemF0aW9uIG1pZ2h0IGJlIHBvc3NpYmxlLCBsaWtlIHByZS1jYWxjdWxhdGluZyB2YWx1ZXMsIG9yIHVzaW5nIG1vcmUgZWZmaWNpZW50IGFsbG9jYXRpb24gc3RyYXRlZ2llcy5cblxuQWxzbywgSSdkIHdhbnQgdG8gZXhhbWluZSB0aGUgZXJyb3IgaGFuZGxpbmcgYW5kIHJlY292ZXJ5IG1lY2hhbmlzbXMuIFdoYXQgaGFwcGVucyBpZiB0aGUgYWxsb2NhdGlvbiBmYWlscz8gRG9lcyBpdCBkZWdyYWRlIGdyYWNlZnVsbHk/IEFyZSB0aGVyZSByZXRyeSBtZWNoYW5pc21zPyBIb3cgYXJlIGVycm9ycyByZXBvcnRlZCwgYW5kIGhvdyBhcmUgdGhleSBwcm9wYWdhdGVkIHVwIHRoZSBjYWxsIHN0YWNrPyBUaGlzIHBhcnQgaXMgY3J1Y2lhbCBmb3IgcmVsaWFiaWxpdHkuIEknbGwgbmVlZCB0byBrbm93IHdoZXRoZXIgYW55IGZhaWx1cmUgbW9kZXMgY291bGQgYmVjb21lIGFuIGlzc3VlIGxhdGVyIG9uLlxuXG5GaW5hbGx5LCBJJ2QgY2hlY2sgZm9yIGFueSBwb3RlbnRpYWwgbWVtb3J5IGxlYWtzIG9yIG1lbW9yeSBmcmFnbWVudGF0aW9uIGlzc3Vlcy4gQXJlIHJlc291cmNlcyBwcm9wZXJseSByZWxlYXNlZCwgZXNwZWNpYWxseSBpbiBlcnJvciBwYXRocz8gRG9lcyB0aGUgZnVuY3Rpb24gY29udHJpYnV0ZSB0byBtZW1vcnkgZnJhZ21lbnRhdGlvbiBvdmVyIHRpbWU/IFRoZXNlIGFyZSBsb25nLXRlcm0gY29uc2lkZXJhdGlvbnMgdGhhdCBhcmUgaW5jcmVkaWJseSBpbXBvcnRhbnQgZm9yIG92ZXJhbGwgc3lzdGVtIHN0YWJpbGl0eS4gSWYgdGhlcmUgYXJlIGFueSwgdGhleSBuZWVkIHRvIGJlIGFkZHJlc3NlZCBlYXJseSFcblxuXG4iLCJJbnB1dFRva2VucyI6MjU5NjIsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1OTowOC4zMTY5NTcxODVaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcyODk2NjE1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX2h1Z2V0bGJfZm9saW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2h1Z2V0bGIuYz0yMTU1PXN0cnVjdCBmb2xpbyAqYWxsb2NfYnVkZHlfaHVnZXRsYl9mb2xpbyhzdHJ1Y3QgaHN0YXRlICpoLFxcbi0tXFxubW0vaHVnZXRsYi5jLTIxNzgtXFxubW0vaHVnZXRsYi5jOjIxNzk6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX3Jlc2VydmUoc3RydWN0IGhzdGF0ZSAqaCwgaW50IHByZWZlcnJlZF9uaWQsXFxubW0vaHVnZXRsYi5jLTIxODAtXFx0XFx0bm9kZW1hc2tfdCAqbm1hc2ssIGdmcF90IGdmcF9tYXNrKVxcbi0tXFxubW0vaHVnZXRsYi5jLTIxOTktLyogZm9saW8gbWlncmF0aW9uIGNhbGxiYWNrIGZ1bmN0aW9uICovXFxubW0vaHVnZXRsYi5jOjIyMDA6c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKHN0cnVjdCBoc3RhdGUgKmgsIGludCBwcmVmZXJyZWRfbmlkLFxcbm1tL2h1Z2V0bGIuYy0yMjAxLVxcdFxcdG5vZGVtYXNrX3QgKm5tYXNrLCBnZnBfdCBnZnBfbWFzaywgYm9vbCBhbGxvd19hbGxvY19mYWxsYmFjaylcXG4tLVxcbm1tL2h1Z2V0bGIuYz0yNTMzPXN0YXRpYyBsb25nIHZtYV9kZWxfcmVzZXJ2YXRpb24oc3RydWN0IGhzdGF0ZSAqaCxcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yNTQwLSAqIFRoaXMgcm91dGluZSBpcyBjYWxsZWQgdG8gcmVzdG9yZSByZXNlcnZhdGlvbiBpbmZvcm1hdGlvbiBvbiBlcnJvciBwYXRocy5cXG5tbS9odWdldGxiLmM6MjU0MTogKiBJdCBzaG91bGQgT05MWSBiZSBjYWxsZWQgZm9yIGZvbGlvcyBhbGxvY2F0ZWQgdmlhIGFsbG9jX2h1Z2V0bGJfZm9saW8oKSxcXG5tbS9odWdldGxiLmMtMjU0Mi0gKiBhbmQgdGhlIGh1Z2V0bGIgbXV0ZXggc2hvdWxkIHJlbWFpbiBoZWxkIHdoZW4gY2FsbGluZyB0aGlzIHJvdXRpbmUuXFxuLS1cXG5tbS9odWdldGxiLmMtMjU0Ny0gKiAyKSBObyByZXNlcnZhdGlvbiB3YXMgaW4gcGxhY2UgZm9yIHRoZSBwYWdlLCBzbyBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSBpc1xcbm1tL2h1Z2V0bGIuYzoyNTQ4OiAqICAgIG5vdCBzZXQuICBIb3dldmVyLCBhbGxvY19odWdldGxiX2ZvbGlvIGFsd2F5cyB1cGRhdGVzIHRoZSByZXNlcnZlIG1hcC5cXG5tbS9odWdldGxiLmMtMjU0OS0gKlxcbi0tXFxubW0vaHVnZXRsYi5jLTI1NTYtICpcXG5tbS9odWdldGxiLmM6MjU1NzogKiBJbiBjYXNlIDIsIHNpbXBseSB1bmRvIHJlc2VydmUgbWFwIG1vZGlmaWNhdGlvbnMgZG9uZSBieSBhbGxvY19odWdldGxiX2ZvbGlvLlxcbm1tL2h1Z2V0bGIuYy0yNTU4LSAqL1xcbm1tL2h1Z2V0bGIuYz0yNTU5PXZvaWQgcmVzdG9yZV9yZXNlcnZlX29uX2Vycm9yKHN0cnVjdCBoc3RhdGUgKmgsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0vaHVnZXRsYi5jLTI1ODUtXFx0XFx0XFx0ICogVGhpcyBpbmRpY2F0ZXMgdGhlcmUgaXMgYW4gZW50cnkgaW4gdGhlIHJlc2VydmUgbWFwXFxubW0vaHVnZXRsYi5jOjI1ODY6XFx0XFx0XFx0ICogbm90IGFkZGVkIGJ5IGFsbG9jX2h1Z2V0bGJfZm9saW8uICBXZSBrbm93IGl0IHdhcyBhZGRlZFxcbm1tL2h1Z2V0bGIuYzoyNTg3OlxcdFxcdFxcdCAqIGJlZm9yZSB0aGUgYWxsb2NfaHVnZXRsYl9mb2xpbyBjYWxsLCBvdGhlcndpc2VcXG5tbS9odWdldGxiLmMtMjU4OC1cXHRcXHRcXHQgKiBodWdldGxiX3Jlc3RvcmVfcmVzZXJ2ZSB3b3VsZCBiZSBzZXQgb24gdGhlIGZvbGlvLlxcbi0tXFxubW0vaHVnZXRsYi5jPTI5MjY9dHlwZWRlZiBlbnVtIHtcXG4tLVxcbm1tL2h1Z2V0bGIuYy0yOTUxLSAqL1xcbm1tL2h1Z2V0bGIuYzoyOTUyOnN0cnVjdCBmb2xpbyAqYWxsb2NfaHVnZXRsYl9mb2xpbyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdldGxiLmMtMjk1My1cXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBib29sIGNvd19mcm9tX293bmVyKVxcbi0tXFxubW0vaHVnZXRsYi5jPTQ4OTQ9aW50IGNvcHlfaHVnZXRsYl9wYWdlX3JhbmdlKHN0cnVjdCBtbV9zdHJ1Y3QgKmRzdCwgc3RydWN0IG1tX3N0cnVjdCAqc3JjLFxcbi0tXFxubW0vaHVnZXRsYi5jLTUwMTUtXFx0XFx0XFx0XFx0LyogRG8gbm90IHVzZSByZXNlcnZlIGFzIGl0J3MgcHJpdmF0ZSBvd25lZCAqL1xcbm1tL2h1Z2V0bGIuYzo1MDE2OlxcdFxcdFxcdFxcdG5ld19mb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oZHN0X3ZtYSwgYWRkciwgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy01MDE3LVxcdFxcdFxcdFxcdGlmIChJU19FUlIobmV3X2ZvbGlvKSkge1xcbi0tXFxubW0vaHVnZXRsYi5jPTU0ODc9c3RhdGljIHZtX2ZhdWx0X3QgaHVnZXRsYl93cChzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL2h1Z2V0bGIuYy01NTY4LVxcdHNwaW5fdW5sb2NrKHZtZi1cXHUwMDNlcHRsKTtcXG5tbS9odWdldGxiLmM6NTU2OTpcXHRuZXdfZm9saW8gPSBhbGxvY19odWdldGxiX2ZvbGlvKHZtYSwgdm1mLVxcdTAwM2VhZGRyZXNzLCBjb3dfZnJvbV9vd25lcik7XFxubW0vaHVnZXRsYi5jLTU1NzAtXFxuLS1cXG5tbS9odWdldGxiLmM9NTc1OT1zdGF0aWMgdm1fZmF1bHRfdCBodWdldGxiX25vX3BhZ2Uoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmcsXFxuLS1cXG5tbS9odWdldGxiLmMtNTgyOC1cXG5tbS9odWdldGxiLmM6NTgyOTpcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8odm1hLCB2bWYtXFx1MDAzZWFkZHJlc3MsIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtNTgzMC1cXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbi0tXFxubW0vaHVnZXRsYi5jPTYwMDk9dm1fZmF1bHRfdCBodWdldGxiX2ZhdWx0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MjQ0LSAqL1xcbm1tL2h1Z2V0bGIuYzo2MjQ1OnN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW9fdm1hKHN0cnVjdCBoc3RhdGUgKmgsXFxubW0vaHVnZXRsYi5jLTYyNDYtXFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MjYxLVxcdCAqL1xcbm1tL2h1Z2V0bGIuYzo2MjYyOlxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBub2RlLCBub2RlbWFzaywgZ2ZwX21hc2ssIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtNjI2My1cXHRtcG9sX2NvbmRfcHV0KG1wb2wpO1xcbi0tXFxubW0vaHVnZXRsYi5jPTYyNzI9aW50IGh1Z2V0bGJfbWZpbGxfYXRvbWljX3B0ZShwdGVfdCAqZHN0X3B0ZSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02MzI4LVxcbm1tL2h1Z2V0bGIuYzo2MzI5OlxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpbyhkc3Rfdm1hLCBkc3RfYWRkciwgZmFsc2UpO1xcbm1tL2h1Z2V0bGIuYy02MzMwLVxcdFxcdGlmIChJU19FUlIoZm9saW8pKSB7XFxuLS1cXG5tbS9odWdldGxiLmMtNjM1NC1cXHRcXHRcXHQgKi9cXG5tbS9odWdldGxiLmM6NjM1NTpcXHRcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW9fdm1hKGgsIGRzdF92bWEsIGRzdF9hZGRyKTtcXG5tbS9odWdldGxiLmMtNjM1Ni1cXHRcXHRcXHRpZiAoIWZvbGlvKSB7XFxuLS1cXG5tbS9odWdldGxiLmMtNjM3NS1cXG5tbS9odWdldGxiLmM6NjM3NjpcXHRcXHRmb2xpbyA9IGFsbG9jX2h1Z2V0bGJfZm9saW8oZHN0X3ZtYSwgZHN0X2FkZHIsIGZhbHNlKTtcXG5tbS9odWdldGxiLmMtNjM3Ny1cXHRcXHRpZiAoSVNfRVJSKGZvbGlvKSkge1xcbi0tXFxubW0vaHVnZXRsYi5jPTY2Njk9bG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcXG4tLVxcbm1tL2h1Z2V0bGIuYy02NzkxLVxcdFxcdFxcdCAqIG1hcCBiZXR3ZWVuIHJlZ2lvbl9jaGcgYW5kIHJlZ2lvbl9hZGQuICBUaGlzXFxubW0vaHVnZXRsYi5jOjY3OTI6XFx0XFx0XFx0ICogaW5kaWNhdGVzIGEgcmFjZSB3aXRoIGFsbG9jX2h1Z2V0bGJfZm9saW8uICBBZGp1c3RcXG5tbS9odWdldGxiLmMtNjc5My1cXHRcXHRcXHQgKiB0aGUgc3VicG9vbCBhbmQgcmVzZXJ2ZSBjb3VudHMgbW9kaWZpZWQgYWJvdmVcXG4tLVxcbm1tL21lbWZkLmM9Njg9c3RydWN0IGZvbGlvICptZW1mZF9hbGxvY19mb2xpbyhzdHJ1Y3QgZmlsZSAqbWVtZmQsIHBnb2ZmX3QgaWR4KVxcbi0tXFxubW0vbWVtZmQuYy05My1cXG5tbS9tZW1mZC5jOjk0OlxcdFxcdGZvbGlvID0gYWxsb2NfaHVnZXRsYl9mb2xpb19yZXNlcnZlKGgsXFxubW0vbWVtZmQuYy05NS1cXHRcXHRcXHRcXHRcXHRcXHQgICAgbnVtYV9ub2RlX2lkKCksXFxuLS1cXG5tbS9tZW1wb2xpY3kuYz0xNDM3PXN0YXRpYyBzdHJ1Y3QgZm9saW8gKmFsbG9jX21pZ3JhdGlvbl90YXJnZXRfYnlfbXBvbChzdHJ1Y3QgZm9saW8gKnNyYyxcXG4tLVxcbm1tL21lbXBvbGljeS5jLTE0NTYtXFx0XFx0bm9kZW1hc2sgPSBwb2xpY3lfbm9kZW1hc2soZ2ZwLCBwb2wsIGlseCwgXFx1MDAyNm5pZCk7XFxubW0vbWVtcG9saWN5LmM6MTQ1NzpcXHRcXHRyZXR1cm4gYWxsb2NfaHVnZXRsYl9mb2xpb19ub2RlbWFzayhoLCBuaWQsIG5vZGVtYXNrLCBnZnAsXFxubW0vbWVtcG9saWN5LmMtMTQ1OC1cXHRcXHRcXHRcXHRodGxiX2FsbG93X2FsbG9jX2ZhbGxiYWNrKE1SX01FTVBPTElDWV9NQklORCkpO1xcbi0tXFxubW0vbWlncmF0ZS5jPTIxOTc9c3RydWN0IGZvbGlvICphbGxvY19taWdyYXRpb25fdGFyZ2V0KHN0cnVjdCBmb2xpbyAqc3JjLCB1bnNpZ25lZCBsb25nIHByaXZhdGUpXFxuLS1cXG5tbS9taWdyYXRlLmMtMjIxNC1cXHRcXHRnZnBfbWFzayA9IGh0bGJfbW9kaWZ5X2FsbG9jX21hc2soaCwgZ2ZwX21hc2spO1xcbm1tL21pZ3JhdGUuYzoyMjE1OlxcdFxcdHJldHVybiBhbGxvY19odWdldGxiX2ZvbGlvX25vZGVtYXNrKGgsIG5pZCxcXG5tbS9taWdyYXRlLmMtMjIxNi1cXHRcXHRcXHRcXHRcXHRcXHRtdGMtXFx1MDAzZW5tYXNrLCBnZnBfbWFzayxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6NTk6MDguMzg5ODU5MzdaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTE2ODk5OTM1NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudDogaHVnZXRsYmZzIEZ1enppbmcgVGFyZ2V0KipcblxuT2theSwgdGhpcyBsb29rcyBwcm9taXNpbmcuIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoZSBgbW1gIHN1YnN5c3RlbSwgc3BlY2lmaWNhbGx5IHRoZSBgaHVnZXRsYmZzYCBhcmVhLCBpcyBkZWZpbml0ZWx5IHdvcnRoIGEgY2xvc2VyIGxvb2sgZm9yIGZ1enppbmcuIEl0J3MgZGlyZWN0bHkgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCBhIHZhcmlldHkgb2Ygc3RhbmRhcmQgc3lzdGVtIGNhbGxzIGxpa2UgYG1vdW50YCwgYHN0YXRmc2AsIGBtbWFwYCwgYG9wZW5gLCBgZmFsbG9jYXRlYCwgYGZ0cnVuY2F0ZWAsIGFuZCBgbWVtZmRfY3JlYXRlYCDigJMgdGhhdCdzIGEgd2lkZSBhdHRhY2sgc3VyZmFjZS5cblxuVGhlIGNvZGUgbW9kaWZpY2F0aW9ucyB0b3VjaCBjcml0aWNhbCBhcmVhcywgaW5jbHVkaW5nIHN1YnBvb2wgcmVzZXJ2YXRpb24gYWNjb3VudGluZywgZXJyb3IgaGFuZGxpbmcgcGF0aHMsIHN0YXRmcyBsb2dpYywgYW5kIHRoZSBzdWJwb29sIGZyZWUgY29uZGl0aW9uLiBUaGF0J3MgYSBnb29kIHNpZ247IGNoYW5nZXMgaW4gdGhlc2UgYXJlYXMgb2Z0ZW4gZXhwb3NlIGludGVyZXN0aW5nIHZ1bG5lcmFiaWxpdGllcy4gU28sIGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byBgdHJ1ZWAuXG5cbk5vdywgbGV0J3MgaWRlbnRpZnkgdGhlIGtleSBmb2N1cyBzeW1ib2xzLiBNeSBxdWljayBjaGVjayByZXZlYWxzOiBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYGFsbG9jX2h1Z2V0bGJfZm9saW9gLCBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgLCBgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNgLCBhbmQgYGh1Z2V0bGJmc19zdGF0ZnNgLlxuXG5JJ2xsIGRvdWJsZS1jaGVjayBmb3Igb3RoZXIgcmVsZXZhbnQgc3ltYm9scyB0aGF0IGFyZSBkaXJlY3RseSB0b3VjaGVkLiBMb29raW5nIGF0IHRoZSBzb3VyY2UgY29kZSwgSSBmaW5kIHRoZXNlOlxuXG4qICAgYGh1Z2V0bGJmc19zdGF0ZnNgIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2BcbiogICBgc3VicG9vbF9pc19mcmVlYCBpbiBgbW0vaHVnZXRsYi5jYCAoc3RhdGljIGlubGluZSlcbiogICBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNgIGluIGBtbS9odWdldGxiLmNgXG4qICAgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCBpbiBgbW0vaHVnZXRsYi5jYFxuKiAgIGBhbGxvY19odWdldGxiX2ZvbGlvYCBpbiBgbW0vaHVnZXRsYi5jYFxuKiAgIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgIGluIGBtbS9odWdldGxiLmNgXG5cbk5leHQsIEkgbmVlZCB0byBjaGVjayB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zLiBUaGUga2V5IG9uZSBoZXJlIGlzIGBIVUdFVExCRlNgLiBJIHNlZSB0aGF0IGBIVUdFVExCX1BBR0VgIGlzIGFsc28gcmVsYXRlZCAoYmVpbmcgYGRlZl9ib29sIEhVR0VUTEJGU2ApLCBidXQgYEhVR0VUTEJGU2AgaXMgdGhlIG1haW4gb25lIHRoYXQgdGhlIHVzZXIgY2FuIGRpcmVjdGx5IGVuYWJsZSB0aHJvdWdoIHRoZSBtZW51Y29uZmlnLlxuXG5JJ2xsIHF1aWNrbHkgY29uZmlybSB0aGF0IGFueSBvdGhlciBjb25maWdzIGFyZSByZWxldmFudC4gSXQgbG9va3MgbGlrZSBgSFVHRVRMQkZTYCBkZXBlbmRzIG9uIGBBUkNIX1NVUFBPUlRTX0hVR0VUTEJGU2AsIHdoaWNoIGlzIGBkZWZfYm9vbCB5YCBvbiBhbWQ2NCAvIHg4Niwgd2hpY2ggaXMgZ29vZC4gU28sIGBIVUdFVExCRlNgIGlzIGluZGVlZCB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uIGZsYWcuXG5cbk5vdyBJJ20gcmVhZHkgdG8gY3JhZnQgdGhlIGBzZXQtcmVzdWx0c2AgcGFyYW1ldGVycy4gSSdsbCBuZWVkOlxuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBgW1wiSFVHRVRMQkZTXCJdYFxuKiAgIGBGb2N1c1N5bWJvbHNgOiBgW1wiaHVnZXRsYl9yZXNlcnZlX3BhZ2VzXCIsIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiLCBcImh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzXCIsIFwiaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXNcIiwgXCJodWdldGxiZnNfc3RhdGZzXCJdYFxuKiAgIGBSZWFzb25pbmdgOiBUaGUgcGF0Y2ggYWx0ZXJzIHN1YnBvb2wgYWNjb3VudGluZyBhbmQgcmVzZXJ2YXRpb24gdHJhY2tpbmcgbG9naWMgd2l0aGluIGh1Z2V0bGIvaHVnZXRsYmZzLiBTcGVjaWZpY2FsbHksIGl0IHRvdWNoZXMgZnVuY3Rpb25zIGxpa2UgYGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzYCwgYGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzYCwgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc2AsIGBhbGxvY19odWdldGxiX2ZvbGlvYCwgYW5kIGBodWdldGxiZnNfc3RhdGZzYC4gVGhpcyBjb2RlIGlzIHJlYWNoYWJsZSB0aHJvdWdoIHRoZSBodWdldGxiZnMgZmlsZXN5c3RlbSBhbmQgbWVtb3J5IG1hcHBpbmcgc3lzdGVtIGNhbGxzLlxuKiAgIGBXb3J0aEZ1enppbmdgOiBgdHJ1ZWBcblxuQWxyaWdodCwgdGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDc4LCJPdXRwdXRUb2tlbnMiOjIwMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1OToyMC4wNzk4NTU5ODFaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjc1MTExMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkhVR0VUTEJGU1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImh1Z2V0bGJfcmVzZXJ2ZV9wYWdlc1wiLFxuICAgIFwiYWxsb2NfaHVnZXRsYl9mb2xpb1wiLFxuICAgIFwiaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXNcIixcbiAgICBcImh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzXCIsXG4gICAgXCJodWdldGxiZnNfc3RhdGZzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgc3VicG9vbCBwYWdlIGFjY291bnRpbmcsIHJlc2VydmF0aW9uIGNhbGN1bGF0aW9uLCBhbmQgZXJyb3IgcmVjb3ZlcnkgbG9naWMgaW4gaHVnZXRsYmZzIGFuZCBjb3JlIGh1Z2V0bGIgbWVtb3J5IG1hbmFnZW1lbnQgcm91dGluZXMgKGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLCBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcywgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzLCBhbGxvY19odWdldGxiX2ZvbGlvLCBodWdldGxiZnNfc3RhdGZzKS4gVGhlc2UgZnVuY3Rpb25zIGFyZSBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIHN5c2NhbGxzIHN1Y2ggYXMgbW1hcCwgb3BlbiwgZmFsbG9jYXRlLCBhbmQgc3RhdGZzIG9uIGh1Z2V0bGJmcywgbWFraW5nIHRoaXMgY29kZSB3ZWxsLXN1aXRlZCBmb3IgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJIVUdFVExCRlNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJodWdldGxiX3Jlc2VydmVfcGFnZXNcIixcbiAgICBcImFsbG9jX2h1Z2V0bGJfZm9saW9cIixcbiAgICBcImh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzXCIsXG4gICAgXCJodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlc1wiLFxuICAgIFwiaHVnZXRsYmZzX3N0YXRmc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHN1YnBvb2wgcGFnZSBhY2NvdW50aW5nLCByZXNlcnZhdGlvbiBjYWxjdWxhdGlvbiwgYW5kIGVycm9yIHJlY292ZXJ5IGxvZ2ljIGluIGh1Z2V0bGJmcyBhbmQgY29yZSBodWdldGxiIG1lbW9yeSBtYW5hZ2VtZW50IHJvdXRpbmVzIChodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcywgaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMsIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcywgYWxsb2NfaHVnZXRsYl9mb2xpbywgaHVnZXRsYmZzX3N0YXRmcykuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBzeXNjYWxscyBzdWNoIGFzIG1tYXAsIG9wZW4sIGZhbGxvY2F0ZSwgYW5kIHN0YXRmcyBvbiBodWdldGxiZnMsIG1ha2luZyB0aGlzIGNvZGUgd2VsbC1zdWl0ZWQgZm9yIGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU5OjIwLjIwNzM3NzMzMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY1OTY0Nzg2NTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1OToyMC4yMDgxNzY5MzFaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjozNjU5NTY3MzE2MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGh1Z2V0bGIgc3VicG9vbCBhY2NvdW50aW5nIGFuZCByZXNlcnZhdGlvbiB0cmFja2luZyAoaW4gYGZzL2h1Z2V0bGJmcy9pbm9kZS5jYCwgYGluY2x1ZGUvbGludXgvaHVnZXRsYi5oYCwgYW5kIGBtbS9odWdldGxiLmNgKS4gU3BlY2lmaWNhbGx5LCBpdCB0cmFja3MgYHVzZWRfaHBhZ2VzYCBjb25zaXN0ZW50bHkgd2hlbiBgbWF4X2hwYWdlc2AgaXMgdW5ib3VuZGVkICgtMSksIGZpeGVzIHJlcG9ydGluZyBpbiBgaHVnZXRsYmZzX3N0YXRmc2AsIGFuZCBzaW1wbGlmaWVzIHRoZSBlcnJvciByb2xsYmFjayBhcml0aG1ldGljIHdoZW4gb2J0YWluaW5nL3JlbGVhc2luZyBzdWJwb29sIHJlc2VydmF0aW9ucyBpbiBgYWxsb2NfaHVnZXRsYl9mb2xpbygpYCBhbmQgYGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcygpYC5cXG5cXG5BbGwgbW9kaWZpZWQgdmFyaWFibGVzIChgZnJlZV9wYWdlc2AsIGBnYmxfcmVzdl9nZXRgLCBgZ2JsX3Jlc3ZfcHV0YCkgYXJlIGV4cGxpY2l0bHkgaW5pdGlhbGl6ZWQgYmVmb3JlIHVzZSBhY3Jvc3MgYWxsIGNvbnRyb2wgZmxvdyBwYXRocywgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgb3IgdW5pbml0aWFsaXplZCBzdHJ1Y3QgcGFkZGluZyBpcyBleHBvc2VkIG9yIGNvcGllZCB0byB1c2Vyc3BhY2UuIEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgaW4gdGhpcyBwYXRjaCB3b3VsZCBpbnZvbHZlIGFjY291bnRpbmcgZGlzY3JlcGFuY2llcywgbWVtb3J5IGxlYWtzLCBvciBjb25jdXJyZW5jeSBpc3N1ZXMsIHdoaWNoIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBkaWFnbm9zdGljcywgYXNzZXJ0aW9ucywgYW5kIEtBU0FOL0xPQ0tERVAuIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDljM2M0NTE4MjhjYzg1ODFkY2YxNGQzMDU4YTNiNzRmNTYyNGI2MjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IFNlcCAzIDIzOjU4OjMyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdCBiL0RvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcbmluZGV4IGE0OTExNWRiMThjNzYuLmQyNDQ1ODNmZGNiYzMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG5AQCAtMzE0LDIxICszMTQsOCBAQCBodWdlIHBhZ2VzLiAgSWYgdGhleSBjYW4gbm90IGJlIHJlc2VydmVkLCB0aGUgbW91bnQgZmFpbHMuXG4gVGhlIHJvdXRpbmVzIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygpIGFyZSBjYWxsZWQgd2hlbiBwYWdlcyBhcmVcbiBvYnRhaW5lZCBmcm9tIG9yIHJlbGVhc2VkIGJhY2sgdG8gYSBzdWJwb29sLiAgVGhleSBwZXJmb3JtIGFsbCBzdWJwb29sXG4gYWNjb3VudGluZywgYW5kIHRyYWNrIGFueSByZXNlcnZhdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZSBzdWJwb29sLlxuLWh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcyBhcmUgcGFzc2VkIHRoZSBudW1iZXIgb2YgaHVnZSBwYWdlcyBieSB3aGljaFxuLXRvIGFkanVzdCB0aGUgc3VicG9vbCAndXNlZCBwYWdlJyBjb3VudCAoZG93biBmb3IgZ2V0LCB1cCBmb3IgcHV0KS4gIE5vcm1hbGx5LFxuLXRoZXkgcmV0dXJuIHRoZSBzYW1lIHZhbHVlIHRoYXQgd2FzIHBhc3NlZCBvciBhbiBlcnJvciBpZiBub3QgZW5vdWdoIHBhZ2VzXG4tZXhpc3QgaW4gdGhlIHN1YnBvb2wuXG4tXG4tSG93ZXZlciwgaWYgcmVzZXJ2ZXMgYXJlIGFzc29jaWF0ZWQgd2l0aCB0aGUgc3VicG9vbCBhIHJldHVybiB2YWx1ZSBsZXNzXG4tdGhhbiB0aGUgcGFzc2VkIHZhbHVlIG1heSBiZSByZXR1cm5lZC4gIFRoaXMgcmV0dXJuIHZhbHVlIGluZGljYXRlcyB0aGVcbi1udW1iZXIgb2YgYWRkaXRpb25hbCBnbG9iYWwgcG9vbCBhZGp1c3RtZW50cyB3aGljaCBtdXN0IGJlIG1hZGUuICBGb3IgZXhhbXBsZSxcbi1zdXBwb3NlIGEgc3VicG9vbCBjb250YWlucyAzIHJlc2VydmVkIGh1Z2UgcGFnZXMgYW5kIHNvbWVvbmUgYXNrcyBmb3IgNS5cbi1UaGUgMyByZXNlcnZlZCBwYWdlcyBhc3NvY2lhdGVkIHdpdGggdGhlIHN1YnBvb2wgY2FuIGJlIHVzZWQgdG8gc2F0aXNmeSBwYXJ0XG4tb2YgdGhlIHJlcXVlc3QuICBCdXQsIDIgcGFnZXMgbXVzdCBiZSBvYnRhaW5lZCBmcm9tIHRoZSBnbG9iYWwgcG9vbHMuICBUb1xuLXJlbGF5IHRoaXMgaW5mb3JtYXRpb24gdG8gdGhlIGNhbGxlciwgdGhlIHZhbHVlIDIgaXMgcmV0dXJuZWQuICBUaGUgY2FsbGVyXG4taXMgdGhlbiByZXNwb25zaWJsZSBmb3IgYXR0ZW1wdGluZyB0byBvYnRhaW4gdGhlIGFkZGl0aW9uYWwgdHdvIHBhZ2VzIGZyb21cbi10aGUgZ2xvYmFsIHBvb2xzLlxuLVxuK2h1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygpIHVzZSB0aGUgbnVtYmVyIG9mIGh1Z2UgcGFnZXMgcGFzc2VkIHRvIGFkanVzdFxuK3RoZSBzdWJwb29sICd1c2VkIHBhZ2UnIGNvdW50LlxuIFxuIENPVyBhbmQgUmVzZXJ2YXRpb25zXG4gPT09PT09PT09PT09PT09PT09PT1cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3RyYW5zbGF0aW9ucy96aF9DTi9tbS9odWdldGxiZnNfcmVzZXJ2LnJzdCBiL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG5pbmRleCAyMDk0N2Y4YmQwNjU0Li5hZTFmMWYzMTQ3N2ZjIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi90cmFuc2xhdGlvbnMvemhfQ04vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RcbisrKyBiL0RvY3VtZW50YXRpb24vdHJhbnNsYXRpb25zL3poX0NOL21tL2h1Z2V0bGJmc19yZXNlcnYucnN0XG5AQCAtMjQ2LDE1ICsyNDYsOCBAQCBodWdlcGFnZV9zdWJwb29s55qEbWluX2hwYWdlc+Wtl+auteS4reiiq+i3n+i4quOAguWcqOaMgui9veaXtu+8jGh1Z2V0bGJfYWNjdF9tZVxuIOiiq+iwg+eUqOS7pemihOeVmeaMh+WumuaVsOmHj+eahOW3qOmhteOAguWmguaenOWug+S7rOS4jeiDveiiq+mihOeVme+8jOaMgui9veWwseS8muWksei0peOAglxuIFxuIOW9k+S7juWtkOaxoOS4reiOt+WPluaIlumHiuaUvumhtemdouaXtu+8jOS8muiwg+eUqGh1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygp5Ye95pWw44CCXG4taHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2Vz6KKr5Lyg6YCS57uZ5beo6aG15pWw6YeP77yM5Lul5q2k5p2l6LCD5pW05a2Q5rGg55qEIOKAnOW3sueUqOmhtemdouKAnSDorqHmlbBcbi3vvIhnZXTkuLrkuIvpmY3vvIxwdXTkuLrkuIrljYfvvInjgILpgJrluLjmg4XlhrXkuIvvvIzlpoLmnpzlrZDmsaDkuK3msqHmnInotrPlpJ/nmoTpobXpnaLvvIzlroPku6zkvJrov5Tlm57kuI7kvKDpgJLnmoTnm7jlkIznmoTlgLzmiJZcbi3kuIDkuKrplJnor6/jgIJcbi1cbi3nhLbogIzvvIzlpoLmnpzpooTnlZnkuI7lrZDmsaDnm7jlhbPogZTvvIzlj6/og73kvJrov5Tlm57kuIDkuKrlsI/kuo7kvKDpgJLlgLznmoTov5Tlm57lgLzjgILov5nkuKrov5Tlm57lgLzooajnpLrlv4Xpobvov5vooYznmoTpop3lpJblhajlsYBcbi3msaDosIPmlbTnmoTmlbDph4/jgILkvovlpoLvvIzlgYforr7kuIDkuKrlrZDmsaDljIXlkKsz5Liq6aKE55WZ55qE5beo6aG177yM5pyJ5Lq66KaB5rGCNeS4quOAguS4juWtkOaxoOebuOWFs+eahDPkuKrpooTnlZnpobXlj6/ku6XnlKjmnaVcbi3mu6HotrPpg6jliIbor7fmsYLjgILkvYbmmK/vvIzlv4Xpobvku47lhajlsYDmsaDkuK3ojrflvpcy5Liq6aG16Z2i44CC5Li65LqG5ZCR6LCD55So6ICF6L2s6L6+6L+Z5LiA5L+h5oGv77yM5bCG6L+U5Zue5YC8MuOAgueEtuWQju+8jOiwg+eUqFxuLeiAheimgei0n+i0o+S7juWFqOWxgOaxoOS4reiOt+WPluWPpuWkluS4pOS4qumhtemdouOAglxuLVxuK+Wug+S7rOi0n+i0o+aJgOacieWtkOaxoOeahOe7n+iuoeaguOeul++8jOW5tui3n+i4quS4juWtkOaxoOebuOWFs+iBlOeahOmihOeVmeOAglxuK2h1Z2VwYWdlX3N1YnBvb2xfZ2V0L3B1dF9wYWdlcygp5Ye95pWw5L2/55So5Lyg5YWl55qE5beo6aG15pWw6YeP5p2l6LCD5pW05a2Q5rGg55qE4oCc5bey55So6aG16Z2i4oCd6K6h5pWw44CCXG4gXG4gQ09X5ZKM6aKE55WZXG4gPT09PT09PT09PVxuZGlmZiAtLWdpdCBhL2ZzL2h1Z2V0bGJmcy9pbm9kZS5jIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbmluZGV4IDc2MTFhODQ3MGVhMjYuLjUxMTNmNzQzZjZmYzcgMTAwNjQ0XG4tLS0gYS9mcy9odWdldGxiZnMvaW5vZGUuY1xuKysrIGIvZnMvaHVnZXRsYmZzL2lub2RlLmNcbkBAIC0xMTA5LDggKzExMDksMTIgQEAgc3RhdGljIGludCBodWdldGxiZnNfc3RhdGZzKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3RydWN0IGtzdGF0ZnMgKmJ1ZilcbiBcbiBcdFx0XHRzcGluX2xvY2tfaXJxKFx1MDAyNnNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2Vsb2NrKTtcbiBcdFx0XHRidWYtXHUwMDNlZl9ibG9ja3MgPSBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcztcbi1cdFx0XHRmcmVlX3BhZ2VzID0gc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZW1heF9ocGFnZXNcbi1cdFx0XHRcdC0gc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzO1xuK1x0XHRcdGlmIChzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcyA9PSAtMSkge1xuK1x0XHRcdFx0ZnJlZV9wYWdlcyA9IC0xO1xuK1x0XHRcdH0gZWxzZSB7XG4rXHRcdFx0XHRmcmVlX3BhZ2VzID0gc2JpbmZvLVx1MDAzZXNwb29sLVx1MDAzZW1heF9ocGFnZXMgLVxuK1x0XHRcdFx0XHQgICAgIHNiaW5mby1cdTAwM2VzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcztcbitcdFx0XHR9XG4gXHRcdFx0YnVmLVx1MDAzZWZfYmF2YWlsID0gYnVmLVx1MDAzZWZfYmZyZWUgPSBmcmVlX3BhZ2VzO1xuIFx0XHRcdHNwaW5fdW5sb2NrX2lycShcdTAwMjZzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbG9jayk7XG4gXHRcdFx0YnVmLVx1MDAzZWZfZmlsZXMgPSBzYmluZm8tXHUwMDNlbWF4X2lub2RlcztcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaCBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5pbmRleCAxNmM0YzRjYWExMjZjLi40NTUxZmYzMDIzNjQwIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9odWdldGxiLmhcbisrKyBiL2luY2x1ZGUvbGludXgvaHVnZXRsYi5oXG5AQCAtMzksOCArMzksOCBAQCBzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCB7XG4gXHRzcGlubG9ja190IGxvY2s7XG4gXHRsb25nIGNvdW50O1xuIFx0bG9uZyBtYXhfaHBhZ2VzO1x0LyogTWF4aW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1heGltdW0uICovXG4tXHRsb25nIHVzZWRfaHBhZ2VzO1x0LyogVXNlZCBjb3VudCBhZ2FpbnN0IG1heGltdW0sIGluY2x1ZGVzICovXG4tXHRcdFx0XHQvKiBib3RoIGFsbG9jYXRlZCBhbmQgcmVzZXJ2ZWQgcGFnZXMuICovXG4rXHRsb25nIHVzZWRfaHBhZ2VzO1x0LyogVXNlZCBwYWdlIGNvdW50LCBpbmNsdWRlcyBib3RoICovXG4rXHRcdFx0XHQvKiBhbGxvY2F0ZWQgYW5kIHJlc2VydmVkIHBhZ2VzLiAqL1xuIFx0c3RydWN0IGhzdGF0ZSAqaHN0YXRlO1xuIFx0bG9uZyBtaW5faHBhZ2VzO1x0LyogTWluaW11bSBodWdlIHBhZ2VzIG9yIC0xIGlmIG5vIG1pbmltdW0uICovXG4gXHRsb25nIHJzdl9ocGFnZXM7XHQvKiBQYWdlcyByZXNlcnZlZCBhZ2FpbnN0IGdsb2JhbCBwb29sIHRvICovXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZXRsYi5jIGIvbW0vaHVnZXRsYi5jXG5pbmRleCA3ODU3NzI4NDU3OTUyLi5lMjRmODU2Yzk0OWMzIDEwMDY0NFxuLS0tIGEvbW0vaHVnZXRsYi5jXG4rKysgYi9tbS9odWdldGxiLmNcbkBAIC0xMzAsMTIgKzEzMCw4IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBzdWJwb29sX2lzX2ZyZWUoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sKVxuIHtcbiBcdGlmIChzcG9vbC1cdTAwM2Vjb3VudClcbiBcdFx0cmV0dXJuIGZhbHNlO1xuLVx0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEpXG4tXHRcdHJldHVybiBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSAwO1xuLVx0aWYgKHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgIT0gLTEpXG4tXHRcdHJldHVybiBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID09IHNwb29sLVx1MDAzZW1pbl9ocGFnZXM7XG4gXG4tXHRyZXR1cm4gdHJ1ZTtcbitcdHJldHVybiBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyA9PSAwO1xuIH1cbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgdW5sb2NrX29yX3JlbGVhc2Vfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG5AQCAtMTkzLDEzICsxODksMTggQEAgdm9pZCBodWdlcGFnZV9wdXRfc3VicG9vbChzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wpXG4gXHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XG4gfVxuIFxuLS8qXG4tICogU3VicG9vbCBhY2NvdW50aW5nIGZvciBhbGxvY2F0aW5nIGFuZCByZXNlcnZpbmcgcGFnZXMuXG4tICogUmV0dXJuIC1FTk9NRU0gaWYgdGhlcmUgYXJlIG5vdCBlbm91Z2ggcmVzb3VyY2VzIHRvIHNhdGlzZnkgdGhlXG4tICogcmVxdWVzdC4gIE90aGVyd2lzZSwgcmV0dXJuIHRoZSBudW1iZXIgb2YgcGFnZXMgYnkgd2hpY2ggdGhlXG4tICogZ2xvYmFsIHBvb2xzIG11c3QgYmUgYWRqdXN0ZWQgKHVwd2FyZCkuICBUaGUgcmV0dXJuZWQgdmFsdWUgbWF5XG4tICogb25seSBiZSBkaWZmZXJlbnQgdGhhbiB0aGUgcGFzc2VkIHZhbHVlIChkZWx0YSkgaW4gdGhlIGNhc2Ugd2hlcmVcbi0gKiBhIHN1YnBvb2wgbWluaW11bSBzaXplIG11c3QgYmUgbWFpbnRhaW5lZC5cbisvKipcbisgKiBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyAtIEdldCBwYWdlcyBmcm9tIGEgc3VicG9vbFxuKyAqIEBzcG9vbDogcG9pbnRlciB0byBzdWJwb29sIHN0cnVjdHVyZSAobWF5IGJlIE5VTEwpXG4rICogQGRlbHRhOiBudW1iZXIgb2YgcGFnZXMgdG8gYWxsb2NhdGUgb3IgcmVzZXJ2ZVxuKyAqXG4rICogQ2hlY2sgYW5kIHVwZGF0ZSBzdWJwb29sIHBhZ2UgdXNhZ2UgY291bnRzIHdoZW4gYWxsb2NhdGluZyBvclxuKyAqIHJlc2VydmluZyBAZGVsdGEgaHVnZXBhZ2VzLlxuKyAqXG4rICogQ29udGV4dDogVGFrZXMgc3Bvb2wtXHUwMDNlbG9jayB1c2luZyBzcGluX2xvY2tfaXJxKCkuXG4rICogUmV0dXJuOiBOb24tbmVnYXRpdmUgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IGNhbm5vdCBiZVxuKyAqICAgICAgICAgc2F0aXNmaWVkIGJ5IHRoZSBzdWJwb29sLCBvciAtRU5PTUVNIGlmIHRoZSBzdWJwb29sIG1heGltdW1cbisgKiAgICAgICAgIGxpbWl0IHdvdWxkIGJlIGV4Y2VlZGVkLlxuICAqL1xuIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiBcdFx0XHRcdCAgICAgIGxvbmcgZGVsdGEpXG5AQCAtMjExLDE1ICsyMTIsMTQgQEAgc3RhdGljIGxvbmcgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sLFxuIFxuIFx0c3Bpbl9sb2NrX2lycShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrKTtcbiBcbi1cdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKSB7XHRcdC8qIG1heGltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4tXHRcdGlmICgoc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgKyBkZWx0YSkgXHUwMDNjPSBzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzKVxuLVx0XHRcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzICs9IGRlbHRhO1xuLVx0XHRlbHNlIHtcbi1cdFx0XHRyZXQgPSAtRU5PTUVNO1xuLVx0XHRcdGdvdG8gdW5sb2NrX3JldDtcbi1cdFx0fVxuK1x0aWYgKHNwb29sLVx1MDAzZW1heF9ocGFnZXMgIT0gLTEgXHUwMDI2XHUwMDI2XG4rXHQgICAgc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgKyBkZWx0YSBcdTAwM2Ugc3Bvb2wtXHUwMDNlbWF4X2hwYWdlcykge1xuK1x0XHRyZXQgPSAtRU5PTUVNO1xuK1x0XHRnb3RvIHVubG9ja19yZXQ7XG4gXHR9XG4gXG4rXHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyArPSBkZWx0YTtcbitcbiBcdC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4gXHRpZiAoc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAhPSAtMSBcdTAwMjZcdTAwMjYgc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcykge1xuIFx0XHRpZiAoZGVsdGEgXHUwMDNlIHNwb29sLVx1MDAzZXJzdl9ocGFnZXMpIHtcbkBAIC0yNDAsMTEgKzI0MCwxOSBAQCBzdGF0aWMgbG9uZyBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzdHJ1Y3QgaHVnZXBhZ2Vfc3VicG9vbCAqc3Bvb2wsXG4gXHRyZXR1cm4gcmV0O1xuIH1cbiBcbi0vKlxuLSAqIFN1YnBvb2wgYWNjb3VudGluZyBmb3IgZnJlZWluZyBhbmQgdW5yZXNlcnZpbmcgcGFnZXMuXG4tICogUmV0dXJuIHRoZSBudW1iZXIgb2YgZ2xvYmFsIHBhZ2UgcmVzZXJ2YXRpb25zIHRoYXQgbXVzdCBiZSBkcm9wcGVkLlxuLSAqIFRoZSByZXR1cm4gdmFsdWUgbWF5IG9ubHkgYmUgZGlmZmVyZW50IHRoYW4gdGhlIHBhc3NlZCB2YWx1ZSAoZGVsdGEpXG4tICogaW4gdGhlIGNhc2Ugd2hlcmUgYSBzdWJwb29sIG1pbmltdW0gc2l6ZSBtdXN0IGJlIG1haW50YWluZWQuXG4rLyoqXG4rICogaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMgLSBSZWxlYXNlIHBhZ2VzIGJhY2sgdG8gYSBzdWJwb29sXG4rICogQHNwb29sOiBwb2ludGVyIHRvIHN1YnBvb2wgc3RydWN0dXJlIChtYXkgYmUgTlVMTClcbisgKiBAZGVsdGE6IG51bWJlciBvZiBwYWdlcyB0byBmcmVlIG9yIHVucmVzZXJ2ZVxuKyAqXG4rICogQ2hlY2sgYW5kIHVwZGF0ZSBzdWJwb29sIHBhZ2UgdXNhZ2UgY291bnRzIHdoZW4gZnJlZWluZyBvclxuKyAqIHVucmVzZXJ2aW5nIEBkZWx0YSBodWdlcGFnZXMuXG4rICpcbisgKiBDb250ZXh0OiBUYWtlcyBzcG9vbC1cdTAwM2Vsb2NrIHVzaW5nIHNwaW5fbG9ja19pcnFzYXZlKCkuIE1heSByZWxlYXNlXG4rICogICAgICAgICAgYW5kIGZyZWUgQHNwb29sIGlmIGl0cyB1c2FnZSBjb3VudCBhbmQgcmVmZXJlbmNlcyByZWFjaFxuKyAqICAgICAgICAgIHplcm8uXG4rICogUmV0dXJuOiBOb24tbmVnYXRpdmUgbnVtYmVyIG9mIHJlc2VydmF0aW9ucyB0aGF0IHRoZSBzdWJwb29sIGNhbm5vdFxuKyAqICAgICAgICAgYWJzb3JiLlxuICAqL1xuIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiBcdFx0XHRcdCAgICAgICBsb25nIGRlbHRhKVxuQEAgLTI1NywxOSArMjY1LDI0IEBAIHN0YXRpYyBsb25nIGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCxcbiBcbiBcdHNwaW5fbG9ja19pcnFzYXZlKFx1MDAyNnNwb29sLVx1MDAzZWxvY2ssIGZsYWdzKTtcbiBcbi1cdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVx0XHQvKiBtYXhpbXVtIHNpemUgYWNjb3VudGluZyAqL1xuLVx0XHRzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcyAtPSBkZWx0YTtcbitcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIC09IGRlbHRhO1xuIFxuIFx0IC8qIG1pbmltdW0gc2l6ZSBhY2NvdW50aW5nICovXG4gXHRpZiAoc3Bvb2wtXHUwMDNlbWluX2hwYWdlcyAhPSAtMSBcdTAwMjZcdTAwMjYgc3Bvb2wtXHUwMDNldXNlZF9ocGFnZXMgXHUwMDNjIHNwb29sLVx1MDAzZW1pbl9ocGFnZXMpIHtcbi1cdFx0aWYgKHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgKyBkZWx0YSBcdTAwM2M9IHNwb29sLVx1MDAzZW1pbl9ocGFnZXMpXG4rXHRcdC8qXG4rXHRcdCAqIGxpbWl0IGlzIHRoZSBtYXhpbXVtIG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdFxuK1x0XHQgKiBjYW4gYmUgcmVzdG9yZWQgdG8gdGhpcyBzdWJwb29sLlxuK1x0XHQgKi9cbitcdFx0bG9uZyBsaW1pdCA9IHNwb29sLVx1MDAzZW1pbl9ocGFnZXMgLSBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlcztcbitcbitcdFx0aWYgKHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgKyBkZWx0YSBcdTAwM2M9IGxpbWl0KVxuIFx0XHRcdHJldCA9IDA7XG4gXHRcdGVsc2Vcbi1cdFx0XHRyZXQgPSBzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICsgZGVsdGEgLSBzcG9vbC1cdTAwM2VtaW5faHBhZ2VzO1xuK1x0XHRcdHJldCA9IHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgKyBkZWx0YSAtIGxpbWl0O1xuIFxuIFx0XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzICs9IGRlbHRhO1xuLVx0XHRpZiAoc3Bvb2wtXHUwMDNlcnN2X2hwYWdlcyBcdTAwM2Ugc3Bvb2wtXHUwMDNlbWluX2hwYWdlcylcbi1cdFx0XHRzcG9vbC1cdTAwM2Vyc3ZfaHBhZ2VzID0gc3Bvb2wtXHUwMDNlbWluX2hwYWdlcztcbitcdFx0aWYgKHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgXHUwMDNlIGxpbWl0KVxuK1x0XHRcdHNwb29sLVx1MDAzZXJzdl9ocGFnZXMgPSBsaW1pdDtcbiBcdH1cbiBcbiBcdC8qXG5AQCAtMjk0Miw3ICsyOTU1LDcgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0c3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wgKnNwb29sID0gc3VicG9vbF92bWEodm1hKTtcbiBcdHN0cnVjdCBoc3RhdGUgKmggPSBoc3RhdGVfdm1hKHZtYSk7XG4gXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLVx0bG9uZyByZXR2YWwsIGdibF9jaGcsIGdibF9yZXNlcnZlO1xuK1x0bG9uZyByZXR2YWwsIGdibF9yZXN2X2dldDtcbiBcdG1hcF9jaGdfc3RhdGUgbWFwX2NoZztcbiBcdHN0cnVjdCBtZW1wb2xpY3lfaW50ZXJwcmV0ZWQgbXBvbGk7XG4gXHRnZnBfdCBnZnAgPSBodGxiX2FsbG9jX21hc2soaCk7XG5AQCAtMjk4MSw4ICsyOTk0LDggQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0ICogT3IgaWYgaXQgY2FuIGdldCBvbmUgZnJvbSB0aGUgcG9vbCByZXNlcnZhdGlvbiBkaXJlY3RseS5cbiBcdCAqL1xuIFx0aWYgKG1hcF9jaGcpIHtcbi1cdFx0Z2JsX2NoZyA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCAxKTtcbi1cdFx0aWYgKGdibF9jaGcgXHUwMDNjIDApIHtcbitcdFx0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xuK1x0XHRpZiAoZ2JsX3Jlc3ZfZ2V0IFx1MDAzYyAwKSB7XG4gXHRcdFx0cmV0ID0gLUVOT1NQQztcbiBcdFx0XHRnb3RvIG91dF9lbmRfcmVzZXJ2YXRpb247XG4gXHRcdH1cbkBAIC0yOTkxLDcgKzMwMDQsNyBAQCBzdHJ1Y3QgZm9saW8gKmFsbG9jX2h1Z2V0bGJfZm9saW8oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRcdCAqIElmIHdlIGhhdmUgdGhlIHZtYSByZXNlcnZhdGlvbiByZWFkeSwgbm8gbmVlZCBmb3IgZXh0cmFcbiBcdFx0ICogZ2xvYmFsIHJlc2VydmF0aW9uLlxuIFx0XHQgKi9cbi1cdFx0Z2JsX2NoZyA9IDA7XG4rXHRcdGdibF9yZXN2X2dldCA9IDA7XG4gXHR9XG4gXG4gXHQvKlxuQEAgLTMwMDIsMTAgKzMwMTUsMTAgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHRhbGxvY19mbGFncyB8PSBIVUdFVExCX0FMTE9DX0NIQVJHX0NHUk9VUF9SU1ZEO1xuIFxuIFx0Lypcbi1cdCAqIGdibF9jaGcgPT0gMCBpbmRpY2F0ZXMgYSByZXNlcnZhdGlvbiBleGlzdHMgZm9yIHRoaXNcbitcdCAqIGdibF9yZXN2X2dldCA9PSAwIGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cyBmb3IgdGhpc1xuIFx0ICogYWxsb2NhdGlvbiwgc28gdHJ5IHRvIHVzZSBpdC5cbiBcdCAqL1xuLVx0aWYgKGdibF9jaGcgPT0gMClcbitcdGlmIChnYmxfcmVzdl9nZXQgPT0gMClcbiBcdFx0YWxsb2NfZmxhZ3MgfD0gSFVHRVRMQl9BTExPQ19VU0VfR0xPQkFMX1JFU0VSVkFUSU9OUztcbiBcbiBcdC8qIFRha2VzIHJlZmVyZW5jZSBvbiBtcG9sLiAqL1xuQEAgLTMwNTksMTMgKzMwNzIsMTAgQEAgc3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0cmV0dXJuIGZvbGlvO1xuIFxuIG91dF9zdWJwb29sX3B1dDpcbi1cdC8qXG4tXHQgKiBwdXQgcGFnZSB0byBzdWJwb29sIGlmZiB0aGUgcXVvdGEgb2Ygc3VicG9vbCdzIHJzdl9ocGFnZXMgaXMgdXNlZFxuLVx0ICogZHVyaW5nIGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzLlxuLVx0ICovXG4tXHRpZiAobWFwX2NoZyBcdTAwMjZcdTAwMjYgIWdibF9jaGcpIHtcbi1cdFx0Z2JsX3Jlc2VydmUgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XG4tXHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbitcdGlmIChtYXBfY2hnKSB7XG4rXHRcdGxvbmcgZ2JsX3Jlc3ZfcHV0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsIDEpO1xuK1xuK1x0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCAtIGdibF9yZXN2X3B1dCk7XG4gXHR9XG4gXG4gb3V0X2VuZF9yZXNlcnZhdGlvbjpcbkBAIC02NjYxLDEyICs2NjcxLDE0IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0XHR2bWFfZmxhZ3NfdCB2bWFfZmxhZ3MpXG4ge1xuLVx0bG9uZyBjaGcgPSAtMSwgYWRkID0gLTEsIHNwb29sX3Jlc3YsIGdibF9yZXN2O1xuK1x0bG9uZyBjaGcgPSAtMSwgYWRkID0gLTE7XG4gXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX2lub2RlKGlub2RlKTtcbiBcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfaW5vZGUoaW5vZGUpO1xuIFx0c3RydWN0IHJlc3ZfbWFwICpyZXN2X21hcDtcbiBcdHN0cnVjdCBodWdldGxiX2Nncm91cCAqaF9jZyA9IE5VTEw7XG4tXHRsb25nIGdibF9yZXNlcnZlLCByZWdpb25zX25lZWRlZCA9IDA7XG4rXHRsb25nIHJlZ2lvbnNfbmVlZGVkID0gMDtcbitcdGxvbmcgZ2JsX3Jlc3ZfZ2V0O1xuK1x0bG9uZyBnYmxfcmVzdl9wdXQ7XG4gXHRpbnQgZXJyO1xuIFxuIFx0LyogVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuICovXG5AQCAtNjc0MSw5ICs2NzUzLDkgQEAgbG9uZyBodWdldGxiX3Jlc2VydmVfcGFnZXMoc3RydWN0IGlub2RlICppbm9kZSxcbiBcdCAqIHRoZSBzdWJwb29sIGhhcyBhIG1pbmltdW0gc2l6ZSwgdGhlcmUgbWF5IGJlIHNvbWUgZ2xvYmFsXG4gXHQgKiByZXNlcnZhdGlvbnMgYWxyZWFkeSBpbiBwbGFjZSAoZ2JsX3Jlc2VydmUpLlxuIFx0ICovXG4tXHRnYmxfcmVzZXJ2ZSA9IGh1Z2VwYWdlX3N1YnBvb2xfZ2V0X3BhZ2VzKHNwb29sLCBjaGcpO1xuLVx0aWYgKGdibF9yZXNlcnZlIFx1MDAzYyAwKSB7XG4tXHRcdGVyciA9IGdibF9yZXNlcnZlO1xuK1x0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIGNoZyk7XG4rXHRpZiAoZ2JsX3Jlc3ZfZ2V0IFx1MDAzYyAwKSB7XG4rXHRcdGVyciA9IGdibF9yZXN2X2dldDtcbiBcdFx0Z290byBvdXRfdW5jaGFyZ2VfY2dyb3VwO1xuIFx0fVxuIFxuQEAgLTY3NTEsNyArNjc2Myw3IEBAIGxvbmcgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4gXHQgKiBDaGVjayBlbm91Z2ggaHVnZXBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSByZXNlcnZhdGlvbi5cbiBcdCAqIEhhbmQgdGhlIHBhZ2VzIGJhY2sgdG8gdGhlIHN1YnBvb2wgaWYgdGhlcmUgYXJlIG5vdFxuIFx0ICovXG4tXHRlcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXNlcnZlKTtcbitcdGVyciA9IGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgZ2JsX3Jlc3ZfZ2V0KTtcbiBcdGlmIChlcnIgXHUwMDNjIDApXG4gXHRcdGdvdG8gb3V0X3B1dF9wYWdlcztcbiBcbkBAIC02NzcwLDcgKzY3ODIsNyBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0XHRhZGQgPSByZWdpb25fYWRkKHJlc3ZfbWFwLCBmcm9tLCB0bywgcmVnaW9uc19uZWVkZWQsIGgsIGhfY2cpO1xuIFxuIFx0XHRpZiAodW5saWtlbHkoYWRkIFx1MDAzYyAwKSkge1xuLVx0XHRcdGh1Z2V0bGJfYWNjdF9tZW1vcnkoaCwgLWdibF9yZXNlcnZlKTtcbitcdFx0XHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1nYmxfcmVzdl9nZXQpO1xuIFx0XHRcdGVyciA9IGFkZDtcbiBcdFx0XHRnb3RvIG91dF9wdXRfcGFnZXM7XG4gXHRcdH0gZWxzZSBpZiAodW5saWtlbHkoY2hnIFx1MDAzZSBhZGQpKSB7XG5AQCAtNjgwNiwyNiArNjgxOCwyMSBAQCBsb25nIGh1Z2V0bGJfcmVzZXJ2ZV9wYWdlcyhzdHJ1Y3QgaW5vZGUgKmlub2RlLFxuIFx0fVxuIFx0cmV0dXJuIGNoZztcbiBcbi1vdXRfcHV0X3BhZ2VzOlxuLVx0c3Bvb2xfcmVzdiA9IGNoZyAtIGdibF9yZXNlcnZlO1xuLVx0aWYgKHNwb29sX3Jlc3YpIHtcbi1cdFx0LyogcHV0IHN1YiBwb29sJ3MgcmVzZXJ2YXRpb24gYmFjaywgY2hnIC0gZ2JsX3Jlc2VydmUgKi9cbi1cdFx0Z2JsX3Jlc3YgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgc3Bvb2xfcmVzdik7XG4tXHRcdC8qXG4tXHRcdCAqIHN1YnBvb2wncyByZXNlcnZlZCBwYWdlcyBjYW4gbm90IGJlIHB1dCBiYWNrIGR1ZSB0byByYWNlLFxuLVx0XHQgKiByZXR1cm4gdG8gaHN0YXRlLlxuLVx0XHQgKi9cbi1cdFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3YpO1xuLVx0fVxuLVx0LyogUmVzdG9yZSB1c2VkX2hwYWdlcyBmb3IgcGFnZXMgdGhhdCBmYWlsZWQgZ2xvYmFsIHJlc2VydmF0aW9uICovXG4tXHRpZiAoZ2JsX3Jlc2VydmUgXHUwMDI2XHUwMDI2IHNwb29sKSB7XG4tXHRcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4rIG91dF9wdXRfcGFnZXM6XG4rXHQvKlxuK1x0ICogUmV0dXJuIGFsbCB0aGF0IHdhcyByZXF1ZXN0ZWQgZnJvbSB0aGUgc3VicG9vbCwgbGV0IHN1YnBvb2xcbitcdCAqIHRlbGwgdXMgdGhlIG5ldyBudW1iZXIgb2YgcmVzZXJ2YXRpb25zIHRoYXQgbmVlZCB0byBiZVxuK1x0ICogcmV0dXJuZWQgdG8gdGhlIGdsb2JhbCBwb29sLlxuK1x0ICovXG4rXHRnYmxfcmVzdl9wdXQgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgY2hnKTtcbitcdC8qXG4rXHQgKiBUaGVyZSBtYXkgYmUgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZlxuK1x0ICogcmVzZXJ2YXRpb25zIHRvIGNvbnN1bWUgYW5kIHRoZSBudW1iZXIgdG8gcmVzdG9yZSBub3cgaWZcbitcdCAqIHRoZXJlIGFyZSBtdWx0aXBsZSB0aHJlYWRzIGludGVyYWN0aW5nIHdpdGggdGhlIHN1YnBvb2wgLVxuK1x0ICogcmVzdG9yZSB0aGUgZGlmZmVyZW5jZS5cbitcdCAqL1xuK1x0aHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQpO1xuIFxuLVx0XHRzcGluX2xvY2tfaXJxc2F2ZShcdTAwMjZzcG9vbC1cdTAwM2Vsb2NrLCBmbGFncyk7XG4tXHRcdGlmIChzcG9vbC1cdTAwM2VtYXhfaHBhZ2VzICE9IC0xKVxuLVx0XHRcdHNwb29sLVx1MDAzZXVzZWRfaHBhZ2VzIC09IGdibF9yZXNlcnZlO1xuLVx0XHR1bmxvY2tfb3JfcmVsZWFzZV9zdWJwb29sKHNwb29sLCBmbGFncyk7XG4tXHR9XG4gb3V0X3VuY2hhcmdlX2Nncm91cDpcbiBcdGh1Z2V0bGJfY2dyb3VwX3VuY2hhcmdlX2Nncm91cF9yc3ZkKGhzdGF0ZV9pbmRleChoKSxcbiBcdFx0XHRcdFx0ICAgIGNoZyAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6NTk6MjAuMjA4MjAzNzcxWiIsIlNlcSI6MjcsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIwNzg4MzY5NTc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgSHVnZVRMQiBQYXRjaCoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzIHBhdGNoIGFuZCBmaWd1cmUgb3V0IGl0cyBwb3RlbnRpYWwgaW1wYWN0LiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvbmNlcm5zIHRoYXQgbWlnaHQgcmVxdWlyZSBLTVNBTiBzY3J1dGlueSwgb3IgaWYgaXQncyBwcmltYXJpbHkgcmVsYXRlZCB0byB0aGUgbG9naWNhbCBmbG93LCBhY2NvdW50aW5nLCBjb25jdXJyZW5jeSwgb3IgcmVzb3VyY2UgbWFuYWdlbWVudCB3aXRoaW4gdGhlIEh1Z2VUTEIgc3lzdGVtLlxuXG5GaXJzdCwgSSBzZWUgdGhlIHBhdGNoIG1vZGlmaWVzIGRvY3VtZW50YXRpb24gaW4gYERvY3VtZW50YXRpb24vbW0vaHVnZXRsYmZzX3Jlc2Vydi5yc3RgIGFuZCBpdHMgdHJhbnNsYXRpb25zLCBmb2N1c2luZyBvbiBgaHVnZXBhZ2Vfc3VicG9vbF9nZXQvcHV0X3BhZ2VzYC4gVGhhdCdzIGdvb2QsIGJ1dCBub3QgdGhlIGNvcmUgb2YgbXkgYW5hbHlzaXMuXG5cbk5leHQsIEkgc2VlIGEgY2hhbmdlIGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2AsIHNwZWNpZmljYWxseSB3aXRoaW4gYGh1Z2V0bGJmc19zdGF0ZnNgLiBJdCBsb29rcyBsaWtlIGl0J3MgYSBmaXggZm9yIGhvdyBgZnJlZV9wYWdlc2AgaXMgY2FsY3VsYXRlZCB3aGVuIGBzYmluZm8tXHUwMDNlc3Bvb2wtXHUwMDNlbWF4X2hwYWdlc2AgaXMgc2V0IHRvIGAtMWAuIFRoZSBvcmlnaW5hbCBsb2dpYyB3YXMgc3VidHJhY3RpbmcgdXNlZCBwYWdlcyBldmVuIHdoZW4gdGhlcmUncyBhbiB1bmJvdW5kZWQgbWF4aW11bS4gVGhlIG5ldyBjb2RlIGV4cGxpY2l0bHkgaGFuZGxlcyB0aGUgYC0xYCBjYXNlLiBOb3cgaXQgc2V0cyBgZnJlZV9wYWdlc2AgdG8gYC0xYCBkaXJlY3RseSBpbiB0aGF0IHNjZW5hcmlvLCBwcmVzZXJ2aW5nIHRoaXMgaW1wb3J0YW50IGJpdCBvZiBhY2NvdW50aW5nLiBUaGUgY3J1Y2lhbCBiaXQgaGVyZSBpcyB0byBjb25maXJtIGBodWdldGxiZnNfc3RhdGZzYCBpdHNlbGYgZG9lc24ndCBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBMb29raW5nIGF0IHRoZSBjb2RlIGZpbGxpbmcgdGhlIGBrc3RhdGZzYCBzdHJ1Y3QsIGl0IGRvZXNuJ3QgYXBwZWFyIHRvIGxlYXZlIGFueXRoaW5nIHVuaW5pdGlhbGl6ZWQuIGBidWYtXHUwMDNlZl9iYXZhaWxgIGFuZCBgYnVmLVx1MDAzZWZfYmZyZWVgIGFyZSBleHBsaWNpdGx5IGFzc2lnbmVkIHRoZSBgZnJlZV9wYWdlc2AgdmFsdWUuIEknbGwgbWVudGFsbHkgbm90ZSB0byBkb3VibGUtY2hlY2sgbGluZSAxMTA5IG9mIHRoaXMgZmlsZSB0byBiZSBjZXJ0YWluIEkgaGF2ZSBteSBmYWN0cyBzdHJhaWdodC5cblxuVGhlIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAgY2hhbmdlIGlzIGEgc2ltcGxlIGNvbW1lbnQgdXBkYXRlIGZvciBgc3RydWN0IGh1Z2VwYWdlX3N1YnBvb2wudXNlZF9ocGFnZXNgIC0gbm8gcmVhbCBmdW5jdGlvbmFsIGltcGFjdCBoZXJlLlxuXG5Ob3csIHRoZSBtZWF0IG9mIHRoZSBtYXR0ZXI6IGBtbS9odWdldGxiLmNgLiAgSSBzZWUgc2V2ZXJhbCBmdW5jdGlvbiBjaGFuZ2VzOlxuLSAgIGBzdWJwb29sX2lzX2ZyZWUoKWAgaXMgc2ltcGxpZmllZCDigJMgZ29vZCwgY2xlYW4gY29kZSBpcyBhbHdheXMgd2VsY29tZS5cbi0gICBgaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoKWAgYW5kIGBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcygpYCBub3cgKmFsd2F5cyogYWRqdXN0IGBzcG9vbC1cdTAwM2V1c2VkX2hwYWdlc2AsIGV2ZW4gd2hlbiBgbWF4X2hwYWdlc2AgaXMgYC0xYC4gVGhlIHByZXZpb3VzIGNvbmRpdGlvbmFsIGJlaGF2aW9yIGxvb2tlZCBzdXNwaWNpb3VzLiBCeSByZW1vdmluZyBpdCwgdGhlIGFjY291bnRpbmcgaXMgc2ltcGxpZmllZCBhbmQgbm93IGNvbnNpc3RlbnQgYWNyb3NzIGFsbCBjYXNlcy4gVGhpcyBpcyB2ZXJ5IGltcG9ydGFudCB0byBjb25zaWRlciwgYXMgaXQgaXMgYSBwbGFjZSB3aGVyZSBlcnJvcnMgYXJlIGxpa2VseSwgc2hvdWxkIHRoZSBsb2dpYyBiZSBpbmNvcnJlY3QuIEl0IGFwcGVhcnMgdGhhdCB0aGUgc3VidHJhY3Rpb24gb2YgYHJzdl9ocGFnZXNgIGlzIGFsc28gYmVpbmcgdXBkYXRlZCBmb3IgdGhlIHNhbWUgcmVhc29uLiBUaGlzIGlzIGEgcG9pbnQgdG8gbm90ZSwgZm9yIHN1cmUuXG4tICAgRmluYWxseSwgYGFsbG9jX2h1Z2V0bGJfZm9saW8oKWAgYW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAgY29udGFpbiBlcnJvciByb2xsYmFjayBjbGVhbnVwIGxvZ2ljIG1vZGlmaWNhdGlvbnMuXG5cbk92ZXJhbGwsIGl0IHNlZW1zIGxpa2UgdGhlc2UgY2hhbmdlcyBhcmUgYWltZWQgYXQgdGlnaHRlbmluZyB1cCB0aGUgYWNjb3VudGluZyBsb2dpYywgaGFuZGxpbmcgdGhlIGAtMWAgY2FzZSBtb3JlIGV4cGxpY2l0bHksIGFuZCBwb3RlbnRpYWxseSBzaW1wbGlmeWluZyB0aGUgY29kZS4gVGhlIGZvY3VzIHNlZW1zIHRvIGJlIG9uIGNvcnJlY3RuZXNzLCBhbmQgdGhlcmUgaXMgbGVzcyByaXNrIG9mIG1lbW9yeSBlcnJvcnMuIEhvd2V2ZXIsIEknbGwgbmVlZCB0byBkb3VibGUgY2hlY2sgaG93IHRoZSBhY2NvdW50aW5nIGlzIGJlaW5nIHVzZWQsIGVzcGVjaWFsbHkgYXJvdW5kIHRob3NlIGB1c2VkX2hwYWdlc2AgYWRqdXN0bWVudHMgYW5kIHRoZSBgcnN2X2hwYWdlc2AgbGltaXQgY2FsY3VsYXRpb24sIHRvIGNvbmZpcm0gdGhlIG5ldyBsb2dpYyBpcyBzb3VuZC4gSSdsbCBuZWVkIHRvIHRoaW5rIGFib3V0IHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgaW50ZWdlciBvdmVyZmxvd3MgdGhhdCBtYXkgZXhpc3QsIGlmIEkgaGF2ZSBhbnkgZnVydGhlciBjb25jZXJucy5cblxuXG4iLCJJbnB1dFRva2VucyI6NzAyMSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYxNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU5OjQwLjk5NjU3ODUwOVoiLCJTZXEiOjI4LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzUwMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZnMvaHVnZXRsYmZzL2lub2RlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTEwMCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTEwMDpcXHRcXHRidWYtXFx1MDAzZWZfZnNpZCA9IHU2NF90b19mc2lkKGlkKTtcXG4xMTAxOlxcdFxcdGJ1Zi1cXHUwMDNlZl90eXBlID0gSFVHRVRMQkZTX01BR0lDO1xcbjExMDI6XFx0XFx0YnVmLVxcdTAwM2VmX2JzaXplID0gaHVnZV9wYWdlX3NpemUoaCk7XFxuMTEwMzpcXHRcXHRpZiAoc2JpbmZvKSB7XFxuMTEwNDpcXHRcXHRcXHRzcGluX2xvY2soXFx1MDAyNnNiaW5mby1cXHUwMDNlc3RhdF9sb2NrKTtcXG4xMTA1OlxcdFxcdFxcdC8qIElmIG5vIGxpbWl0cyBzZXQsIGp1c3QgcmVwb3J0IDAgb3IgLTEgZm9yIG1heC9mcmVlL3VzZWRcXG4xMTA2OlxcdFxcdFxcdCAqIGJsb2NrcywgbGlrZSBzaW1wbGVfc3RhdGZzKCkgKi9cXG4xMTA3OlxcdFxcdFxcdGlmIChzYmluZm8tXFx1MDAzZXNwb29sKSB7XFxuMTEwODpcXHRcXHRcXHRcXHRsb25nIGZyZWVfcGFnZXM7XFxuMTEwOTpcXHRcXG4xMTEwOlxcdFxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNnNiaW5mby1cXHUwMDNlc3Bvb2wtXFx1MDAzZWxvY2spO1xcbjExMTE6XFx0XFx0XFx0XFx0YnVmLVxcdTAwM2VmX2Jsb2NrcyA9IHNiaW5mby1cXHUwMDNlc3Bvb2wtXFx1MDAzZW1heF9ocGFnZXM7XFxuMTExMjpcXHRcXHRcXHRcXHRpZiAoc2JpbmZvLVxcdTAwM2VzcG9vbC1cXHUwMDNlbWF4X2hwYWdlcyA9PSAtMSkge1xcbjExMTM6XFx0XFx0XFx0XFx0XFx0ZnJlZV9wYWdlcyA9IC0xO1xcbjExMTQ6XFx0XFx0XFx0XFx0fSBlbHNlIHtcXG4xMTE1OlxcdFxcdFxcdFxcdFxcdGZyZWVfcGFnZXMgPSBzYmluZm8tXFx1MDAzZXNwb29sLVxcdTAwM2VtYXhfaHBhZ2VzIC1cXG4xMTE2OlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgc2JpbmZvLVxcdTAwM2VzcG9vbC1cXHUwMDNldXNlZF9ocGFnZXM7XFxuMTExNzpcXHRcXHRcXHRcXHR9XFxuMTExODpcXHRcXHRcXHRcXHRidWYtXFx1MDAzZWZfYmF2YWlsID0gYnVmLVxcdTAwM2VmX2JmcmVlID0gZnJlZV9wYWdlcztcXG4xMTE5OlxcdFxcdFxcdFxcdHNwaW5fdW5sb2NrX2lycShcXHUwMDI2c2JpbmZvLVxcdTAwM2VzcG9vbC1cXHUwMDNlbG9jayk7XFxuMTEyMDpcXHRcXHRcXHRcXHRidWYtXFx1MDAzZWZfZmlsZXMgPSBzYmluZm8tXFx1MDAzZW1heF9pbm9kZXM7XFxuMTEyMTpcXHRcXHRcXHRcXHRidWYtXFx1MDAzZWZfZmZyZWUgPSBzYmluZm8tXFx1MDAzZWZyZWVfaW5vZGVzO1xcbjExMjI6XFx0XFx0XFx0fVxcbjExMjM6XFx0XFx0XFx0c3Bpbl91bmxvY2soXFx1MDAyNnNiaW5mby1cXHUwMDNlc3RhdF9sb2NrKTtcXG4xMTI0OlxcdFxcdH1cXG4xMTI1OlxcdFxcdGJ1Zi1cXHUwMDNlZl9uYW1lbGVuID0gTkFNRV9NQVg7XFxuMTEyNjpcXHRcXHRyZXR1cm4gMDtcXG4xMTI3OlxcdH1cXG4xMTI4OlxcdFxcbjExMjk6XFx0c3RhdGljIHZvaWQgaHVnZXRsYmZzX3B1dF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKVxcbjExMzA6XFx0e1xcbjExMzE6XFx0XFx0c3RydWN0IGh1Z2V0bGJmc19zYl9pbmZvICpzYmkgPSBIVUdFVExCRlNfU0Ioc2IpO1xcbjExMzI6XFx0XFxuMTEzMzpcXHRcXHRpZiAoc2JpKSB7XFxuMTEzNDpcXHRcXHRcXHRzYi1cXHUwMDNlc19mc19pbmZvID0gTlVMTDtcXG4xMTM1OlxcdFxcbjExMzY6XFx0XFx0XFx0aHVnZXBhZ2VfcHV0X3N1YnBvb2woc2JpLVxcdTAwM2VzcG9vbCk7XFxuMTEzNzpcXHRcXG4xMTM4OlxcdFxcdFxcdGtmcmVlKHNiaSk7XFxuMTEzOTpcXHRcXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU5OjQwLjk5Njc1NjU0OVoiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMDAzNTMxMDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGl2aW5nIGludG8gSHVnZVRMQiBBbGxvY2F0aW9uKipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBtZW1vcnkgYWxsb2NhdGlvbiBmbG93IGJldHRlciwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgSHVnZVRMQiBmcmFtZXdvcmsuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgY29yZSBmdW5jdGlvbnMuIExldCdzIHN0YXJ0IHdpdGggYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGFuZCB0aGVuIHBpdm90IHRvIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgIGluIGBtbS9odWdldGxiLmNgLiBNeSBodW5jaCBpcyB0aGF0IHRoZXNlIGFyZSB0aGUga2V5IHBpZWNlcyB0byB1bnJhdmVsIHRoZSBhbGxvY2F0aW9uIHB1enpsZS4gSSB3YW50IHRvIHNlZSBob3cgdGhlIGtlcm5lbCByZXNlcnZlcyB0aGUgcGh5c2ljYWwgcGFnZXMgYW5kIGhvdyBpdCBoYW5kbGVzIHRoZSBmb2xpbyBhbGxvY2F0aW9uIGl0c2VsZi4gQXJlIHRoZXJlIGFueSBjb250ZW50aW9uIHBvaW50cyBoZXJlLCBvciBtYXliZSBhbnkgdW51c3VhbCBlcnJvciBwYXRocyBJIHNob3VsZCBiZSBhd2FyZSBvZj8gTGV0J3MgZ2V0IHRvIHRoZSBjb2RlIGFuZCBzZWUgd2hhdCBpbnNpZ2h0cyBpdCBwcm92aWRlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTA0NSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDNUMjM6NTk6NDQuMDAwMjkwOTY0WiIsIlNlcSI6MzAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9odWdldGxiLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjk1MCxcbiAgXCJMaW5lQ291bnRcIjogNjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjk1MDpcXHQgKiBXaGVuIGl0J3Mgc2V0LCB0aGUgYWxsb2NhdGlvbiB3aWxsIGJ5cGFzcyBhbGwgdm1hIGxldmVsIHJlc2VydmF0aW9ucy5cXG4yOTUxOlxcdCAqL1xcbjI5NTI6XFx0c3RydWN0IGZvbGlvICphbGxvY19odWdldGxiX2ZvbGlvKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbjI5NTM6XFx0XFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwgYm9vbCBjb3dfZnJvbV9vd25lcilcXG4yOTU0OlxcdHtcXG4yOTU1OlxcdFxcdHN0cnVjdCBodWdlcGFnZV9zdWJwb29sICpzcG9vbCA9IHN1YnBvb2xfdm1hKHZtYSk7XFxuMjk1NjpcXHRcXHRzdHJ1Y3QgaHN0YXRlICpoID0gaHN0YXRlX3ZtYSh2bWEpO1xcbjI5NTc6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4yOTU4OlxcdFxcdGxvbmcgcmV0dmFsLCBnYmxfcmVzdl9nZXQ7XFxuMjk1OTpcXHRcXHRtYXBfY2hnX3N0YXRlIG1hcF9jaGc7XFxuMjk2MDpcXHRcXHRzdHJ1Y3QgbWVtcG9saWN5X2ludGVycHJldGVkIG1wb2xpO1xcbjI5NjE6XFx0XFx0Z2ZwX3QgZ2ZwID0gaHRsYl9hbGxvY19tYXNrKGgpO1xcbjI5NjI6XFx0XFx0c3RydWN0IG1lbXBvbGljeSAqbXBvbDtcXG4yOTYzOlxcdFxcdG5vZGVtYXNrX3QgKm5vZGVtYXNrO1xcbjI5NjQ6XFx0XFx0dTggYWxsb2NfZmxhZ3MgPSAwO1xcbjI5NjU6XFx0XFx0aW50IG5pZDtcXG4yOTY2OlxcdFxcdGludCByZXQ7XFxuMjk2NzpcXHRcXG4yOTY4OlxcdFxcdC8qIFdoZXRoZXIgd2UgbmVlZCBhIHNlcGFyYXRlIHBlci12bWEgcmVzZXJ2YXRpb24/ICovXFxuMjk2OTpcXHRcXHRpZiAoY293X2Zyb21fb3duZXIpIHtcXG4yOTcwOlxcdFxcdFxcdC8qXFxuMjk3MTpcXHRcXHRcXHQgKiBTcGVjaWFsIGNhc2UhICBTaW5jZSBpdCdzIGEgQ29XIG9uIHRvcCBvZiBhIHJlc2VydmVkXFxuMjk3MjpcXHRcXHRcXHQgKiBwYWdlLCB0aGUgcHJpdmF0ZSByZXN2IG1hcCBkb2Vzbid0IGNvdW50LiAgU28gaXQgY2Fubm90XFxuMjk3MzpcXHRcXHRcXHQgKiBjb25zdW1lIHRoZSBwZXItdm1hIHJlc3YgbWFwIGV2ZW4gaWYgaXQncyByZXNlcnZlZC5cXG4yOTc0OlxcdFxcdFxcdCAqL1xcbjI5NzU6XFx0XFx0XFx0bWFwX2NoZyA9IE1BUF9DSEdfRU5GT1JDRUQ7XFxuMjk3NjpcXHRcXHR9IGVsc2Uge1xcbjI5Nzc6XFx0XFx0XFx0LypcXG4yOTc4OlxcdFxcdFxcdCAqIEV4YW1pbmUgdGhlIHJlZ2lvbi9yZXNlcnZlIG1hcCB0byBkZXRlcm1pbmUgaWYgdGhlIHByb2Nlc3NcXG4yOTc5OlxcdFxcdFxcdCAqIGhhcyBhIHJlc2VydmF0aW9uIGZvciB0aGUgcGFnZSB0byBiZSBhbGxvY2F0ZWQuICBBIHJldHVyblxcbjI5ODA6XFx0XFx0XFx0ICogY29kZSBvZiB6ZXJvIGluZGljYXRlcyBhIHJlc2VydmF0aW9uIGV4aXN0cyAobm8gY2hhbmdlKS5cXG4yOTgxOlxcdFxcdFxcdCAqL1xcbjI5ODI6XFx0XFx0XFx0cmV0dmFsID0gdm1hX25lZWRzX3Jlc2VydmF0aW9uKGgsIHZtYSwgYWRkcik7XFxuMjk4MzpcXHRcXHRcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4yOTg0OlxcdFxcdFxcdFxcdHJldHVybiBFUlJfUFRSKC1FTk9NRU0pO1xcbjI5ODU6XFx0XFx0XFx0bWFwX2NoZyA9IHJldHZhbCA/IE1BUF9DSEdfTkVFREVEIDogTUFQX0NIR19SRVVTRTtcXG4yOTg2OlxcdFxcdH1cXG4yOTg3OlxcdFxcbjI5ODg6XFx0XFx0LypcXG4yOTg5OlxcdFxcdCAqIFdoZXRoZXIgd2UgbmVlZCBhIHNlcGFyYXRlIGdsb2JhbCByZXNlcnZhdGlvbj9cXG4yOTkwOlxcdFxcdCAqXFxuMjk5MTpcXHRcXHQgKiBQcm9jZXNzZXMgdGhhdCBkaWQgbm90IGNyZWF0ZSB0aGUgbWFwcGluZyB3aWxsIGhhdmUgbm9cXG4yOTkyOlxcdFxcdCAqIHJlc2VydmVzIGFzIGluZGljYXRlZCBieSB0aGUgcmVnaW9uL3Jlc2VydmUgbWFwLiBDaGVja1xcbjI5OTM6XFx0XFx0ICogdGhhdCB0aGUgYWxsb2NhdGlvbiB3aWxsIG5vdCBleGNlZWQgdGhlIHN1YnBvb2wgbGltaXQuXFxuMjk5NDpcXHRcXHQgKiBPciBpZiBpdCBjYW4gZ2V0IG9uZSBmcm9tIHRoZSBwb29sIHJlc2VydmF0aW9uIGRpcmVjdGx5LlxcbjI5OTU6XFx0XFx0ICovXFxuMjk5NjpcXHRcXHRpZiAobWFwX2NoZykge1xcbjI5OTc6XFx0XFx0XFx0Z2JsX3Jlc3ZfZ2V0ID0gaHVnZXBhZ2Vfc3VicG9vbF9nZXRfcGFnZXMoc3Bvb2wsIDEpO1xcbjI5OTg6XFx0XFx0XFx0aWYgKGdibF9yZXN2X2dldCBcXHUwMDNjIDApIHtcXG4yOTk5OlxcdFxcdFxcdFxcdHJldCA9IC1FTk9TUEM7XFxuMzAwMDpcXHRcXHRcXHRcXHRnb3RvIG91dF9lbmRfcmVzZXJ2YXRpb247XFxuMzAwMTpcXHRcXHRcXHR9XFxuMzAwMjpcXHRcXHR9IGVsc2Uge1xcbjMwMDM6XFx0XFx0XFx0LypcXG4zMDA0OlxcdFxcdFxcdCAqIElmIHdlIGhhdmUgdGhlIHZtYSByZXNlcnZhdGlvbiByZWFkeSwgbm8gbmVlZCBmb3IgZXh0cmFcXG4zMDA1OlxcdFxcdFxcdCAqIGdsb2JhbCByZXNlcnZhdGlvbi5cXG4zMDA2OlxcdFxcdFxcdCAqL1xcbjMwMDc6XFx0XFx0XFx0Z2JsX3Jlc3ZfZ2V0ID0gMDtcXG4zMDA4OlxcdFxcdH1cXG4zMDA5OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1OTo0NC4wMDA5MDcyMzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6Mjg5MzQ3NzYyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgc3VtbWFyeSBvZiBteSB0aGlua2luZywgcGlja2luZyB1cCB3aGVyZSB3ZSBsZWZ0IG9mZiwgYXMgdGhvdWdoIEknbSBleGFtaW5pbmcgdGhpcyBjb2RlOlxuXG4qKkRpdmluZyBCYWNrIGludG8gYGFsbG9jX2h1Z2V0bGJfZm9saW9gKipcblxuT2theSwgc28gd2UncmUgY29udGludWluZyBvdXIgZGVlcCBkaXZlIGludG8gYGFsbG9jX2h1Z2V0bGJfZm9saW9gLiBXZSd2ZSBhbHJlYWR5IGxvb2tlZCBhdCBzb21lIGtleSBhc3BlY3RzLCBidXQgbGV0J3MgbWFrZSBzdXJlIHdlIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwgaW4gdGhpcyBmdW5jdGlvbi4gV2UncmUgdGFsa2luZyBhYm91dCBhIGNvcmUgcGllY2Ugb2YgaHVnZSBwYWdlIGFsbG9jYXRpb24sIHNvIGEgdGhvcm91Z2ggcmV2aWV3IGlzIGFsd2F5cyB3YXJyYW50ZWQsIGV2ZW4gaWYgd2UgKnRoaW5rKiB3ZSBrbm93IGl0IHdlbGwuIEkgbmVlZCB0byByZWZyZXNoIG15IG1lbnRhbCBtb2RlbCBvZiBpdHMgZmxvdyBhbmQgaW50ZXJhY3Rpb25zLCBwZXJoYXBzIHRyYWNpbmcgaXQgdGhyb3VnaCBhIGZldyBkaWZmZXJlbnQgc2NlbmFyaW9zIGluIG15IGhlYWQsIGZvY3VzaW5nIG9uIGVkZ2UgY2FzZXMsIGFuZCBlbnN1cmluZyBhbGwgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHByaW1pdGl2ZXMgYXJlIHVzZWQgY29ycmVjdGx5LiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgcmFjZSBjb25kaXRpb25zLCBvciBwb3RlbnRpYWwgZGVhZGxvY2tzLCBlc3BlY2lhbGx5IHNpbmNlIHdlJ3JlIGRlYWxpbmcgd2l0aCBjb25jdXJyZW50IGFsbG9jYXRpb24uIEknbGwgbWVudGFsbHkgc3RlcCB0aHJvdWdoIHRoZSBjb2RlLCBmb2N1c2luZyBvbiBsb2NraW5nLCBlcnJvciBoYW5kbGluZywgYW5kIHJlc291cmNlIGNsZWFudXAgdG8gY29uZmlybSB0aGVyZSBhcmUgbm8gb3Zlcmxvb2tlZCBpc3N1ZXMgdGhhdCBjb3VsZCBjYXVzZSBzaWduaWZpY2FudCBwcm9ibGVtcyBkb3duIHRoZSBsaW5lLiBJIGtub3cgdGhlcmUncyBhIGxvdCBwYWNrZWQgaW50byB0aGlzIGZ1bmN0aW9uLCBidXQgSSBhbSBnb2luZyB0byBtYWtlIHN1cmUgdGhhdCBubyBkZXRhaWwgaXMgbG9zdC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAyMTksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU5OjQ2Ljg5NDM4ODc1OFoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTEzODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMwNTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMwNTA6XFx0XFx0XFx0LypcXG4zMDUxOlxcdFxcdFxcdCAqIENoZWNrIGZvciBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMuIFdoZW4gaXQgaGFwcGVucy4uXFxuMzA1MjpcXHRcXHRcXHQgKiBUaGUgcGFnZSB3YXMgYWRkZWQgdG8gdGhlIHJlc2VydmF0aW9uIG1hcCBiZXR3ZWVuXFxuMzA1MzpcXHRcXHRcXHQgKiB2bWFfbmVlZHNfcmVzZXJ2YXRpb24gYW5kIHZtYV9jb21taXRfcmVzZXJ2YXRpb24uXFxuMzA1NDpcXHRcXHRcXHQgKiBUaGlzIGluZGljYXRlcyBhIHJhY2Ugd2l0aCBodWdldGxiX3Jlc2VydmVfcGFnZXMuXFxuMzA1NTpcXHRcXHRcXHQgKiBBZGp1c3QgZm9yIHRoZSBzdWJwb29sIGNvdW50IGluY3JlbWVudGVkIGFib3ZlIEFORFxcbjMwNTY6XFx0XFx0XFx0ICogaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzIGZvciB0aGUgc2FtZSBwYWdlLlxcdEFsc28sXFxuMzA1NzpcXHRcXHRcXHQgKiB0aGUgcmVzZXJ2YXRpb24gY291bnQgYWRkZWQgaW4gaHVnZXRsYl9yZXNlcnZlX3BhZ2VzXFxuMzA1ODpcXHRcXHRcXHQgKiBubyBsb25nZXIgYXBwbGllcy5cXG4zMDU5OlxcdFxcdFxcdCAqL1xcbjMwNjA6XFx0XFx0XFx0aWYgKHVubGlrZWx5KG1hcF9jaGcgPT0gTUFQX0NIR19ORUVERUQgXFx1MDAyNlxcdTAwMjYgcmV0dmFsID09IDApKSB7XFxuMzA2MTpcXHRcXHRcXHRcXHRsb25nIHJzdl9hZGp1c3Q7XFxuMzA2MjpcXHRcXG4zMDYzOlxcdFxcdFxcdFxcdHJzdl9hZGp1c3QgPSBodWdlcGFnZV9zdWJwb29sX3B1dF9wYWdlcyhzcG9vbCwgMSk7XFxuMzA2NDpcXHRcXHRcXHRcXHRodWdldGxiX2FjY3RfbWVtb3J5KGgsIC1yc3ZfYWRqdXN0KTtcXG4zMDY1OlxcdFxcdFxcdFxcdHNwaW5fbG9ja19pcnEoXFx1MDAyNmh1Z2V0bGJfbG9jayk7XFxuMzA2NjpcXHRcXHRcXHRcXHRodWdldGxiX2Nncm91cF91bmNoYXJnZV9mb2xpb19yc3ZkKFxcbjMwNjc6XFx0XFx0XFx0XFx0ICAgIGhzdGF0ZV9pbmRleChoKSwgcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgZm9saW8pO1xcbjMwNjg6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2tfaXJxKFxcdTAwMjZodWdldGxiX2xvY2spO1xcbjMwNjk6XFx0XFx0XFx0fVxcbjMwNzA6XFx0XFx0fVxcbjMwNzE6XFx0XFxuMzA3MjpcXHRcXHRyZXR1cm4gZm9saW87XFxuMzA3MzpcXHRcXG4zMDc0OlxcdG91dF9zdWJwb29sX3B1dDpcXG4zMDc1OlxcdFxcdGlmIChtYXBfY2hnKSB7XFxuMzA3NjpcXHRcXHRcXHRsb25nIGdibF9yZXN2X3B1dCA9IGh1Z2VwYWdlX3N1YnBvb2xfcHV0X3BhZ2VzKHNwb29sLCAxKTtcXG4zMDc3OlxcdFxcbjMwNzg6XFx0XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCBnYmxfcmVzdl9nZXQgLSBnYmxfcmVzdl9wdXQpO1xcbjMwNzk6XFx0XFx0fVxcbjMwODA6XFx0XFxuMzA4MTpcXHRvdXRfZW5kX3Jlc2VydmF0aW9uOlxcbjMwODI6XFx0XFx0aWYgKG1hcF9jaGcgIT0gTUFQX0NIR19FTkZPUkNFRClcXG4zMDgzOlxcdFxcdFxcdHZtYV9lbmRfcmVzZXJ2YXRpb24oaCwgdm1hLCBhZGRyKTtcXG4zMDg0OlxcdFxcdHJldHVybiBFUlJfUFRSKHJldCk7XFxuMzA4NTpcXHR9XFxuMzA4NjpcXHRcXG4zMDg3OlxcdHN0YXRpYyBfX2luaXQgdm9pZCAqYWxsb2NfYm9vdG1lbShzdHJ1Y3QgaHN0YXRlICpoLCBpbnQgbmlkLCBib29sIG5vZGVfZXhhY3QpXFxuMzA4ODpcXHR7XFxuMzA4OTpcXHRcXHRpZiAoaHVnZXRsYl9lYXJseV9jbWEoaCkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU5OjQ2Ljg5NDk0NDU3OFoiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNTkxNzU5NzI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOlxuXG4qKkRpdmluZyBpbnRvIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgKipcblxuT2theSwgdGltZSB0byB6ZXJvIGluIG9uIGBodWdldGxiX3Jlc2VydmVfcGFnZXNgLiBMZXQncyBzcGVjaWZpY2FsbHkgY2hlY2sgdGhlIGNvZGUgYXJvdW5kIGxpbmVzIDY3NDAgdG8gNjg0MC4gSSB3YW50IHRvIHNlZSBob3cgdGhhdCBzZWN0aW9uIGhhbmRsZXMgcGFnZSByZXNlcnZhdGlvbiDigJMgdGhlIGZpbmVyIGRldGFpbHMgb2YgaG93IGl0IGFsbG9jYXRlcyBodWdlIHBhZ2VzLiBJJ20gbG9va2luZyBmb3IgdGhlIGFsbG9jYXRpb24gcHJvY2VzcyBhbmQgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBlZGdlIGNhc2VzLiBUaGVyZSBtaWdodCBiZSBzb21lIHN1YnRsZSBpbnRlcnBsYXkgd2l0aCBvdGhlciBtZW1vcnkgbWFuYWdlbWVudCBmdW5jdGlvbnMgSSBzaG91bGQgYmUgYXdhcmUgb2YgaW4gdGhpcyByZWdpb24uIFRoaXMnbGwgZ2l2ZSBtZSBhIGdvb2QgaGFuZGxlIG9uIGl0cyBiZWhhdmlvci4gTGV0J3Mgc2VlIHdoYXQncyBhY3R1YWxseSBnb2luZyBvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MTExOTYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU5OjUwLjQ4NjcwNjU1NloiLCJTZXEiOjM0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjMyNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vaHVnZXRsYi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY3NDAsXG4gIFwiTGluZUNvdW50XCI6IDg1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY3NDA6XFx0XFx0XFx0XFx0XFx0Y2hnICogcGFnZXNfcGVyX2h1Z2VfcGFnZShoKSwgXFx1MDAyNmhfY2cpO1xcbjY3NDE6XFx0XFx0aWYgKGVyciBcXHUwMDNjIDApXFxuNjc0MjpcXHRcXHRcXHRnb3RvIG91dF9lcnI7XFxuNjc0MzpcXHRcXG42NzQ0OlxcdFxcdGlmICh2bWEgXFx1MDAyNlxcdTAwMjYgIXZtYV90ZXN0KHZtYSwgVk1BX01BWVNIQVJFX0JJVCkgXFx1MDAyNlxcdTAwMjYgaF9jZykge1xcbjY3NDU6XFx0XFx0XFx0LyogRm9yIHByaXZhdGUgbWFwcGluZ3MsIHRoZSBodWdldGxiX2Nncm91cCB1bmNoYXJnZSBpbmZvIGhhbmdzXFxuNjc0NjpcXHRcXHRcXHQgKiBvZiB0aGUgcmVzdl9tYXAuXFxuNjc0NzpcXHRcXHRcXHQgKi9cXG42NzQ4OlxcdFxcdFxcdHJlc3ZfbWFwX3NldF9odWdldGxiX2Nncm91cF91bmNoYXJnZV9pbmZvKHJlc3ZfbWFwLCBoX2NnLCBoKTtcXG42NzQ5OlxcdFxcdH1cXG42NzUwOlxcdFxcbjY3NTE6XFx0XFx0LypcXG42NzUyOlxcdFxcdCAqIFRoZXJlIG11c3QgYmUgZW5vdWdoIHBhZ2VzIGluIHRoZSBzdWJwb29sIGZvciB0aGUgbWFwcGluZy4gSWZcXG42NzUzOlxcdFxcdCAqIHRoZSBzdWJwb29sIGhhcyBhIG1pbmltdW0gc2l6ZSwgdGhlcmUgbWF5IGJlIHNvbWUgZ2xvYmFsXFxuNjc1NDpcXHRcXHQgKiByZXNlcnZhdGlvbnMgYWxyZWFkeSBpbiBwbGFjZSAoZ2JsX3Jlc2VydmUpLlxcbjY3NTU6XFx0XFx0ICovXFxuNjc1NjpcXHRcXHRnYmxfcmVzdl9nZXQgPSBodWdlcGFnZV9zdWJwb29sX2dldF9wYWdlcyhzcG9vbCwgY2hnKTtcXG42NzU3OlxcdFxcdGlmIChnYmxfcmVzdl9nZXQgXFx1MDAzYyAwKSB7XFxuNjc1ODpcXHRcXHRcXHRlcnIgPSBnYmxfcmVzdl9nZXQ7XFxuNjc1OTpcXHRcXHRcXHRnb3RvIG91dF91bmNoYXJnZV9jZ3JvdXA7XFxuNjc2MDpcXHRcXHR9XFxuNjc2MTpcXHRcXG42NzYyOlxcdFxcdC8qXFxuNjc2MzpcXHRcXHQgKiBDaGVjayBlbm91Z2ggaHVnZXBhZ2VzIGFyZSBhdmFpbGFibGUgZm9yIHRoZSByZXNlcnZhdGlvbi5cXG42NzY0OlxcdFxcdCAqIEhhbmQgdGhlIHBhZ2VzIGJhY2sgdG8gdGhlIHN1YnBvb2wgaWYgdGhlcmUgYXJlIG5vdFxcbjY3NjU6XFx0XFx0ICovXFxuNjc2NjpcXHRcXHRlcnIgPSBodWdldGxiX2FjY3RfbWVtb3J5KGgsIGdibF9yZXN2X2dldCk7XFxuNjc2NzpcXHRcXHRpZiAoZXJyIFxcdTAwM2MgMClcXG42NzY4OlxcdFxcdFxcdGdvdG8gb3V0X3B1dF9wYWdlcztcXG42NzY5OlxcdFxcbjY3NzA6XFx0XFx0LypcXG42NzcxOlxcdFxcdCAqIEFjY291bnQgZm9yIHRoZSByZXNlcnZhdGlvbnMgbWFkZS4gU2hhcmVkIG1hcHBpbmdzIHJlY29yZCByZWdpb25zXFxuNjc3MjpcXHRcXHQgKiB0aGF0IGhhdmUgcmVzZXJ2YXRpb25zIGFzIHRoZXkgYXJlIHNoYXJlZCBieSBtdWx0aXBsZSBWTUFzLlxcbjY3NzM6XFx0XFx0ICogV2hlbiB0aGUgbGFzdCBWTUEgZGlzYXBwZWFycywgdGhlIHJlZ2lvbiBtYXAgc2F5cyBob3cgbXVjaFxcbjY3NzQ6XFx0XFx0ICogdGhlIHJlc2VydmF0aW9uIHdhcyBhbmQgdGhlIHBhZ2UgY2FjaGUgdGVsbHMgaG93IG11Y2ggb2ZcXG42Nzc1OlxcdFxcdCAqIHRoZSByZXNlcnZhdGlvbiB3YXMgY29uc3VtZWQuIFByaXZhdGUgbWFwcGluZ3MgYXJlIHBlci1WTUEgYW5kXFxuNjc3NjpcXHRcXHQgKiBvbmx5IHRoZSBjb25zdW1lZCByZXNlcnZhdGlvbnMgYXJlIHRyYWNrZWQuIFdoZW4gdGhlIFZNQVxcbjY3Nzc6XFx0XFx0ICogZGlzYXBwZWFycywgdGhlIG9yaWdpbmFsIHJlc2VydmF0aW9uIGlzIHRoZSBWTUEgc2l6ZSBhbmQgdGhlXFxuNjc3ODpcXHRcXHQgKiBjb25zdW1lZCByZXNlcnZhdGlvbnMgYXJlIHN0b3JlZCBpbiB0aGUgbWFwLiBIZW5jZSwgbm90aGluZ1xcbjY3Nzk6XFx0XFx0ICogZWxzZSBoYXMgdG8gYmUgZG9uZSBmb3IgcHJpdmF0ZSBtYXBwaW5ncyBoZXJlXFxuNjc4MDpcXHRcXHQgKi9cXG42NzgxOlxcdFxcdGlmICghdm1hIHx8IHZtYV90ZXN0KHZtYSwgVk1BX01BWVNIQVJFX0JJVCkpIHtcXG42NzgyOlxcdFxcdFxcdGFkZCA9IHJlZ2lvbl9hZGQocmVzdl9tYXAsIGZyb20sIHRvLCByZWdpb25zX25lZWRlZCwgaCwgaF9jZyk7XFxuNjc4MzpcXHRcXG42Nzg0OlxcdFxcdFxcdGlmICh1bmxpa2VseShhZGQgXFx1MDAzYyAwKSkge1xcbjY3ODU6XFx0XFx0XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtZ2JsX3Jlc3ZfZ2V0KTtcXG42Nzg2OlxcdFxcdFxcdFxcdGVyciA9IGFkZDtcXG42Nzg3OlxcdFxcdFxcdFxcdGdvdG8gb3V0X3B1dF9wYWdlcztcXG42Nzg4OlxcdFxcdFxcdH0gZWxzZSBpZiAodW5saWtlbHkoY2hnIFxcdTAwM2UgYWRkKSkge1xcbjY3ODk6XFx0XFx0XFx0XFx0LypcXG42NzkwOlxcdFxcdFxcdFxcdCAqIHBhZ2VzIGluIHRoaXMgcmFuZ2Ugd2VyZSBhZGRlZCB0byB0aGUgcmVzZXJ2ZVxcbjY3OTE6XFx0XFx0XFx0XFx0ICogbWFwIGJldHdlZW4gcmVnaW9uX2NoZyBhbmQgcmVnaW9uX2FkZC4gIFRoaXNcXG42NzkyOlxcdFxcdFxcdFxcdCAqIGluZGljYXRlcyBhIHJhY2Ugd2l0aCBhbGxvY19odWdldGxiX2ZvbGlvLiAgQWRqdXN0XFxuNjc5MzpcXHRcXHRcXHRcXHQgKiB0aGUgc3VicG9vbCBhbmQgcmVzZXJ2ZSBjb3VudHMgbW9kaWZpZWQgYWJvdmVcXG42Nzk0OlxcdFxcdFxcdFxcdCAqIGJhc2VkIG9uIHRoZSBkaWZmZXJlbmNlLlxcbjY3OTU6XFx0XFx0XFx0XFx0ICovXFxuNjc5NjpcXHRcXHRcXHRcXHRsb25nIHJzdl9hZGp1c3Q7XFxuNjc5NzpcXHRcXG42Nzk4OlxcdFxcdFxcdFxcdC8qXFxuNjc5OTpcXHRcXHRcXHRcXHQgKiBodWdldGxiX2Nncm91cF91bmNoYXJnZV9jZ3JvdXBfcnN2ZCgpIHdpbGwgcHV0IHRoZVxcbjY4MDA6XFx0XFx0XFx0XFx0ICogcmVmZXJlbmNlIHRvIGhfY2ctXFx1MDAzZWNzcy4gU2VlIGNvbW1lbnQgYmVsb3cgZm9yIGRldGFpbC5cXG42ODAxOlxcdFxcdFxcdFxcdCAqL1xcbjY4MDI6XFx0XFx0XFx0XFx0aHVnZXRsYl9jZ3JvdXBfdW5jaGFyZ2VfY2dyb3VwX3JzdmQoXFxuNjgwMzpcXHRcXHRcXHRcXHRcXHRoc3RhdGVfaW5kZXgoaCksXFxuNjgwNDpcXHRcXHRcXHRcXHRcXHQoY2hnIC0gYWRkKSAqIHBhZ2VzX3Blcl9odWdlX3BhZ2UoaCksIGhfY2cpO1xcbjY4MDU6XFx0XFxuNjgwNjpcXHRcXHRcXHRcXHRyc3ZfYWRqdXN0ID0gaHVnZXBhZ2Vfc3VicG9vbF9wdXRfcGFnZXMoc3Bvb2wsXFxuNjgwNzpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRjaGcgLSBhZGQpO1xcbjY4MDg6XFx0XFx0XFx0XFx0aHVnZXRsYl9hY2N0X21lbW9yeShoLCAtcnN2X2FkanVzdCk7XFxuNjgwOTpcXHRcXHRcXHR9IGVsc2UgaWYgKGhfY2cpIHtcXG42ODEwOlxcdFxcdFxcdFxcdC8qXFxuNjgxMTpcXHRcXHRcXHRcXHQgKiBUaGUgZmlsZV9yZWdpb25zIHdpbGwgaG9sZCB0aGVpciBvd24gcmVmZXJlbmNlIHRvXFxuNjgxMjpcXHRcXHRcXHRcXHQgKiBoX2NnLVxcdTAwM2Vjc3MuIFNvIHdlIHNob3VsZCByZWxlYXNlIHRoZSByZWZlcmVuY2UgaGVsZFxcbjY4MTM6XFx0XFx0XFx0XFx0ICogdmlhIGh1Z2V0bGJfY2dyb3VwX2NoYXJnZV9jZ3JvdXBfcnN2ZCgpIHdoZW4gd2UgYXJlXFxuNjgxNDpcXHRcXHRcXHRcXHQgKiBkb25lLlxcbjY4MTU6XFx0XFx0XFx0XFx0ICovXFxuNjgxNjpcXHRcXHRcXHRcXHRodWdldGxiX2Nncm91cF9wdXRfcnN2ZF9jZ3JvdXAoaF9jZyk7XFxuNjgxNzpcXHRcXHRcXHR9XFxuNjgxODpcXHRcXHR9XFxuNjgxOTpcXHRcXHRyZXR1cm4gY2hnO1xcbjY4MjA6XFx0XFxuNjgyMTpcXHQgb3V0X3B1dF9wYWdlczpcXG42ODIyOlxcdFxcdC8qXFxuNjgyMzpcXHRcXHQgKiBSZXR1cm4gYWxsIHRoYXQgd2FzIHJlcXVlc3RlZCBmcm9tIHRoZSBzdWJwb29sLCBsZXQgc3VicG9vbFxcbjY4MjQ6XFx0XFx0ICogdGVsbCB1cyB0aGUgbmV3IG51bWJlciBvZiByZXNlcnZhdGlvbnMgdGhhdCBuZWVkIHRvIGJlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAzVDIzOjU5OjUwLjQ4NzEzMjA0NloiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2MzE2Njg2Njc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIHZzLiBLQVNBTiBBbmFseXNpcyBvZiBIdWdlVExCIFN1YnBvb2wgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZyb20gYSBLTVNBTi9LQVNBTiBwZXJzcGVjdGl2ZSwgSSBuZWVkIHRvIGFuYWx5emUgdGhpcyBwYXRjaCBmb2N1c2luZyBvbiBtZW1vcnkgc2FmZXR5IGlzc3Vlcy4gRmlyc3QsIHRoZSBwYXRjaCByZWZhY3RvcnMgdGhlIGBodWdlcGFnZV9zdWJwb29sYCBhY2NvdW50aW5nIGxvZ2ljLCBhbmQgZml4ZXMgaG93IHN1YnBvb2wgdXNhZ2UgaXMgdHJhY2tlZCwgZXNwZWNpYWxseSBpbiB0aGUgY29udGV4dCBvZiB1bmJvdW5kZWQgc3VicG9vbHMuXG5cblNwZWNpZmljYWxseSwgSSBzZWUgZm91ciBrZXkgY2hhbmdlczogZmlyc3QsIGB1c2VkX2hwYWdlc2AgaXMgbm93IHRyYWNrZWQgZXZlbiB3aGVuIGBtYXhfaHBhZ2VzYCBpc24ndCByZXN0cmljdGVkLiBTZWNvbmQsIGBodWdldGxiZnNfc3RhdGZzYCBnZXRzIGEgdHdlYWsg4oCTIGlmIGBtYXhfaHBhZ2VzYCBpcyB1bmJvdW5kZWQsIGBmcmVlX3BhZ2VzYCBnZXRzIHNldCB0byAtMSwgd2hpY2ggaXMgaW1wb3J0YW50IGZvciByZXByZXNlbnRpbmcgdW5saW1pdGVkIGF2YWlsYWJpbGl0eS4gVGhpcmQsIGl0IGNsZWFucyB1cCBob3cgcGFnZSByZXNlcnZhdGlvbnMgYXJlIG1hbmFnZWQgZHVyaW5nIGBnZXRgIGFuZCBgcHV0YCBvcGVyYXRpb25zLCBhbmQgYWRqdXN0cyB0aGUgZXJyb3IgaGFuZGxpbmcgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYC4gRmluYWxseSwgdGhlIGRvY3VtZW50YXRpb24gYW5kIGNvbW1lbnRzIGFyZSB1cGRhdGVkIGFjY29yZGluZ2x5LlxuXG5Ob3csIGxldCdzIGRpZyBpbnRvIHRoZSBkZXRhaWxzLiBSZWdhcmRpbmcgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMsIGluIGBodWdldGxiZnNfc3RhdGZzYCwgYGZyZWVfcGFnZXNgIGxvb2tzIHRvIGJlIGluaXRpYWxpemVkIGNvcnJlY3RseSwgZ2V0dGluZyBhc3NpZ25lZCBpbiBib3RoIGJyYW5jaGVzIG9mIHRoZSBpZiBzdGF0ZW1lbnQgYmVmb3JlIGJlaW5nIHVzZWQuIFNpbWlsYXJseSwgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW9gIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzYCwgYGdibF9yZXN2X2dldGAgYW5kIGBnYmxfcmVzdl9wdXRgIGFwcGVhciB0byBiZSBpbml0aWFsaXplZCBiZWZvcmUgdXNlLCBldmVuIGluIHRoZSBlcnJvciBwYXRocy4gSSBhbSBub3Qgc2VlaW5nIGFueSBuZXcgc3RydWN0IHBhZGRpbmcgb3IgbWVtb3J5IGNvcGllcyB0byB1c2VyIHNwYWNlIHRoYXQgY291bGQgYmUgcHJvYmxlbWF0aWMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHN0YWNrIG9yIGhlYXAgdmFyaWFibGVzIGJlaW5nIHJlYWQsIG5vciBkbyBJIHNlZSBhbnkgY2hhbmdlcyB0byBidWZmZXIgc2l6ZSBtYW5pcHVsYXRpb24gdGhhdCBjb3VsZCBsZWFkIHRvIHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LlxuXG5Gcm9tIGEgYnVnIGludHJvZHVjdGlvbiBwZXJzcGVjdGl2ZSwgaXQgbG9va3MgbGlrZSBhbnl0aGluZyByZWxhdGVkIHRvIG1lbW9yeSBhY2NvdW50aW5nIGVycm9ycywgcmVzZXJ2YXRpb24gaXNzdWVzLCByYWNlIGNvbmRpdGlvbnMsIG9yIGxvY2tpbmcgcHJvYmxlbXMgc2hvdWxkIGJlIGNhdWdodCBieSBrZXJuZWwgYXNzZXJ0aW9ucywgcmVmY291bnQgdHJhY2tpbmcsIG9yIG90aGVyIHRvb2xzLiBJIGFtIG5vdCBzZWVpbmcgYW55IGRpcmVjdCBleHBvc3VyZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBhbnkga2VybmVsLXRvLXVzZXIgaW5mb3JtYXRpb24gbGVha3MgZWl0aGVyLlxuXG5UaGVyZWZvcmUsIGFmdGVyIHJldmlld2luZyBhbGwgb2YgdGhpcywgdGhlIGxpa2VsaWhvb2Qgb2YgdGhpcyBwYXRjaCBpbnRyb2R1Y2luZyBpc3N1ZXMgdGhhdCBLTVNBTiB3b3VsZCBjYXRjaCBzZWVtcyBsb3cuIFRoZSBOZWVkS01TQU4gZmxhZyBzaG91bGQgYmUgZmFsc2UuIE5vdywgbGV0J3MgbG9vayBhdCB0aGUgcmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjgxMSwiT3V0cHV0VG9rZW5zIjoyNTAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MzMsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wM1QyMzo1OTo1Ni44MDM4MjMyODJaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNDk3MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBodWdldGxiIHN1YnBvb2wgYWNjb3VudGluZyBhbmQgcmVzZXJ2YXRpb24gdHJhY2tpbmcgKGluIGBmcy9odWdldGxiZnMvaW5vZGUuY2AsIGBpbmNsdWRlL2xpbnV4L2h1Z2V0bGIuaGAsIGFuZCBgbW0vaHVnZXRsYi5jYCkuIFNwZWNpZmljYWxseSwgaXQgdHJhY2tzIGB1c2VkX2hwYWdlc2AgY29uc2lzdGVudGx5IHdoZW4gYG1heF9ocGFnZXNgIGlzIHVuYm91bmRlZCAoLTEpLCBmaXhlcyByZXBvcnRpbmcgaW4gYGh1Z2V0bGJmc19zdGF0ZnNgLCBhbmQgc2ltcGxpZmllcyB0aGUgZXJyb3Igcm9sbGJhY2sgYXJpdGhtZXRpYyB3aGVuIG9idGFpbmluZy9yZWxlYXNpbmcgc3VicG9vbCByZXNlcnZhdGlvbnMgaW4gYGFsbG9jX2h1Z2V0bGJfZm9saW8oKWAgYW5kIGBodWdldGxiX3Jlc2VydmVfcGFnZXMoKWAuXFxuXFxuQWxsIG1vZGlmaWVkIHZhcmlhYmxlcyAoYGZyZWVfcGFnZXNgLCBgZ2JsX3Jlc3ZfZ2V0YCwgYGdibF9yZXN2X3B1dGApIGFyZSBleHBsaWNpdGx5IGluaXRpYWxpemVkIGJlZm9yZSB1c2UgYWNyb3NzIGFsbCBjb250cm9sIGZsb3cgcGF0aHMsIGFuZCBubyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IG9yIHVuaW5pdGlhbGl6ZWQgc3RydWN0IHBhZGRpbmcgaXMgZXhwb3NlZCBvciBjb3BpZWQgdG8gdXNlcnNwYWNlLiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGluIHRoaXMgcGF0Y2ggd291bGQgaW52b2x2ZSBhY2NvdW50aW5nIGRpc2NyZXBhbmNpZXMsIG1lbW9yeSBsZWFrcywgb3IgY29uY3VycmVuY3kgaXNzdWVzLCB3aGljaCBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgZGlhZ25vc3RpY3MsIGFzc2VydGlvbnMsIGFuZCBLQVNBTi9MT0NLREVQLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgaHVnZXRsYiBzdWJwb29sIGFjY291bnRpbmcgYW5kIHJlc2VydmF0aW9uIHRyYWNraW5nIChpbiBgZnMvaHVnZXRsYmZzL2lub2RlLmNgLCBgaW5jbHVkZS9saW51eC9odWdldGxiLmhgLCBhbmQgYG1tL2h1Z2V0bGIuY2ApLiBTcGVjaWZpY2FsbHksIGl0IHRyYWNrcyBgdXNlZF9ocGFnZXNgIGNvbnNpc3RlbnRseSB3aGVuIGBtYXhfaHBhZ2VzYCBpcyB1bmJvdW5kZWQgKC0xKSwgZml4ZXMgcmVwb3J0aW5nIGluIGBodWdldGxiZnNfc3RhdGZzYCwgYW5kIHNpbXBsaWZpZXMgdGhlIGVycm9yIHJvbGxiYWNrIGFyaXRobWV0aWMgd2hlbiBvYnRhaW5pbmcvcmVsZWFzaW5nIHN1YnBvb2wgcmVzZXJ2YXRpb25zIGluIGBhbGxvY19odWdldGxiX2ZvbGlvKClgIGFuZCBgaHVnZXRsYl9yZXNlcnZlX3BhZ2VzKClgLlxcblxcbkFsbCBtb2RpZmllZCB2YXJpYWJsZXMgKGBmcmVlX3BhZ2VzYCwgYGdibF9yZXN2X2dldGAsIGBnYmxfcmVzdl9wdXRgKSBhcmUgZXhwbGljaXRseSBpbml0aWFsaXplZCBiZWZvcmUgdXNlIGFjcm9zcyBhbGwgY29udHJvbCBmbG93IHBhdGhzLCBhbmQgbm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBvciB1bmluaXRpYWxpemVkIHN0cnVjdCBwYWRkaW5nIGlzIGV4cG9zZWQgb3IgY29waWVkIHRvIHVzZXJzcGFjZS4gQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBpbiB0aGlzIHBhdGNoIHdvdWxkIGludm9sdmUgYWNjb3VudGluZyBkaXNjcmVwYW5jaWVzLCBtZW1vcnkgbGVha3MsIG9yIGNvbmN1cnJlbmN5IGlzc3Vlcywgd2hpY2ggYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGRpYWdub3N0aWNzLCBhc3NlcnRpb25zLCBhbmQgS0FTQU4vTE9DS0RFUC4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflow6nsr4[1] Phase: Succeeded StartedAt: 2026-09-04 00:00:07 +0000 UTC FinishedAt: 2026-09-04 00:00:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-04 00:00:07 +0000 UTC FinishedAt: 2026-09-04 00:00:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[2] Phase: Succeeded StartedAt: 2026-09-04 00:00:07 +0000 UTC FinishedAt: 2026-09-04 03:44:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-04 00:00:07 +0000 UTC FinishedAt: 2026-09-04 03:44:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-04 00:00:07 +0000 UTC FinishedAt: 2026-09-04 00:00:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-04 00:00:07 +0000 UTC FinishedAt: 2026-09-04 00:00:22 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow6nsr4/series-workflow6nsr4-convert-artifact-3908997471/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-04 00:00:28 +0000 UTC FinishedAt: 2026-09-04 00:21:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-04 00:00:28 +0000 UTC FinishedAt: 2026-09-04 00:21:29 +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:*9fb28347-783b-43d0-8b6a-3a308ceefee7,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-workflow6nsr4/series-workflow6nsr4-convert-artifact-3908997471/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": "3d81e19c-d558-4735-9bc6-5a1e9a79f75a", "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-workflow6nsr4/series-workflow6nsr4-build-action-1980855909/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-04 00:00:28 +0000 UTC FinishedAt: 2026-09-04 00:21:19 +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:*9fb28347-783b-43d0-8b6a-3a308ceefee7,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-workflow6nsr4/series-workflow6nsr4-convert-artifact-3908997471/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": "3d81e19c-d558-4735-9bc6-5a1e9a79f75a", "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-workflow6nsr4/series-workflow6nsr4-build-action-1980855909/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-04 00:21:29 +0000 UTC FinishedAt: 2026-09-04 00:21:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-04 00:21:29 +0000 UTC FinishedAt: 2026-09-04 00:21:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-04 00:21:29 +0000 UTC FinishedAt: 2026-09-04 00:21:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-04 00:21:29 +0000 UTC FinishedAt: 2026-09-04 00:21:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.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-workflow6nsr4/series-workflow6nsr4-convert-artifact-2715202542/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-04 00:21:39 +0000 UTC FinishedAt: 2026-09-04 00:23:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-04 00:21:39 +0000 UTC FinishedAt: 2026-09-04 00:23:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3d81e19c-d558-4735-9bc6-5a1e9a79f75a,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-workflow6nsr4/series-workflow6nsr4-build-action-1980855909/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-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-04 00:23:37 +0000 UTC FinishedAt: 2026-09-04 00:23:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-04 00:23:37 +0000 UTC FinishedAt: 2026-09-04 00:23:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-04 00:23:37 +0000 UTC FinishedAt: 2026-09-04 00:39:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-04 00:23:37 +0000 UTC FinishedAt: 2026-09-04 00:39:29 +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:*9fb28347-783b-43d0-8b6a-3a308ceefee7,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-workflow6nsr4/series-workflow6nsr4-convert-artifact-2715202542/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": "8802a846-eb12-403a-aa5e-8bab7d2ea96c", "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-workflow6nsr4/series-workflow6nsr4-build-action-2550170882/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-04 00:23:37 +0000 UTC FinishedAt: 2026-09-04 00:39:19 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*9fb28347-783b-43d0-8b6a-3a308ceefee7,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-workflow6nsr4/series-workflow6nsr4-convert-artifact-2715202542/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": "8802a846-eb12-403a-aa5e-8bab7d2ea96c", "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-workflow6nsr4/series-workflow6nsr4-build-action-2550170882/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-04 00:39:29 +0000 UTC FinishedAt: 2026-09-04 00:39:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-04 00:39:29 +0000 UTC FinishedAt: 2026-09-04 00:39:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-04 00:39:29 +0000 UTC FinishedAt: 2026-09-04 00:41:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-04 00:39:29 +0000 UTC FinishedAt: 2026-09-04 00:41:17 +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:*8802a846-eb12-403a-aa5e-8bab7d2ea96c,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-workflow6nsr4/series-workflow6nsr4-build-action-2550170882/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-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-04 00:41:27 +0000 UTC FinishedAt: 2026-09-04 03:44:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-04 00:41:27 +0000 UTC FinishedAt: 2026-09-04 03:44:35 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"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:*3d81e19c-d558-4735-9bc6-5a1e9a79f75a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8802a846-eb12-403a-aa5e-8bab7d2ea96c,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-workflow6nsr4/series-workflow6nsr4-build-action-1980855909/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-workflow6nsr4/series-workflow6nsr4-build-action-2550170882/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-04 00:41:27 +0000 UTC FinishedAt: 2026-09-04 00:41:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-04 00:41:27 +0000 UTC FinishedAt: 2026-09-04 00:41:33 +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","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"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-workflow6nsr4/series-workflow6nsr4-convert-artifact-3638125203/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-04 00:41:27 +0000 UTC FinishedAt: 2026-09-04 00:41:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-04 00:41:27 +0000 UTC FinishedAt: 2026-09-04 00:41:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-04 00:41:28 +0000 UTC FinishedAt: 2026-09-04 00:41:28 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-04 00:41:38 +0000 UTC FinishedAt: 2026-09-04 03:44:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6nsr4[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":null,"focus_symbols":["hugetlb_reserve_pages","alloc_hugetlb_folio","hugepage_subpool_get_pages","hugepage_subpool_put_pages","hugetlbfs_statfs"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"cee9395acd8043be0644b25c34bfa86623f2b935","config_name":"upstream-apparmor-kasan.config","enable_configs":["HUGETLBFS"],"series_id":"8eaa669c-6d16-4d7c-865e-a0b5bc549489","tree_name":"axboe","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/axboe/linux.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-04 00:41:38 +0000 UTC FinishedAt: 2026-09-04 03:44:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3d81e19c-d558-4735-9bc6-5a1e9a79f75a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*8802a846-eb12-403a-aa5e-8bab7d2ea96c,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-workflow6nsr4/series-workflow6nsr4-build-action-1980855909/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-workflow6nsr4/series-workflow6nsr4-build-action-2550170882/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-workflow6nsr4/series-workflow6nsr4-convert-artifact-3638125203/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,}