Name: series-workflowx52pj Phase: Succeeded StartedAt: 2026-09-13 10:16:37 +0000 UTC FinishedAt: 2026-09-13 14:13:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[0] Phase: Succeeded StartedAt: 2026-09-13 10:16:37 +0000 UTC FinishedAt: 2026-09-13 10:24:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[0].run-triage Phase: Succeeded StartedAt: 2026-09-13 10:16:37 +0000 UTC FinishedAt: 2026-09-13 10:24:52 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "68142f986ff04b2b70b31db00f719bf690f64a9a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "68142f986ff04b2b70b31db00f719bf690f64a9a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN" ], "series_id": "ac152c29-cbf2-4c36-acc8-7b3687dd7bd9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "shrink_inactive_list", "evict_folios", "find_folios_written_back" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "68142f986ff04b2b70b31db00f719bf690f64a9a", "base_tree": "linux-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaHJpbmtfaW5hY3RpdmVfbGlzdCYjMzQ7LAogICAgJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAgICYjMzQ7ZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGZvbGlvIHdyaXRlYmFjayByZXRyeSBsb2dpYyBpbiB0aGUgcGFnZSByZWNsYWltIHBhdGggKG1tL3Ztc2Nhbi5jKSBieSBleHRyYWN0aW5nIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpIGZyb20gZXZpY3RfZm9saW9zKCkgYW5kIHVzaW5nIGl0IHRvIHJldHJ5IGNsZWFuIGZvbGlvcyBpbiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpLiBBbGwgbmV3IGFuZCBtb2RpZmllZCBsb2NhbCB2YXJpYWJsZXMgKGNsZWFuX2xpc3QsIHRvdGFsX3JlY2xhaW1lZCwgaXNvbGF0ZWQsIHNraXBfcmV0cnkpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIHRoZSByZWNsYWltX3N0YXQgc3RydWN0dXJlIGlzIG1lbXNldCB0byB6ZXJvIGluc2lkZSBzaHJpbmtfZm9saW9fbGlzdCgpIG9uIGVhY2ggaXRlcmF0aW9uLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3Nlcy4gQW55IHBvdGVudGlhbCByZWNsYWltIGlzc3VlcyAoZS5nLiBsaXN0IGNvcnJ1cHRpb24sIHJlZmNvdW50IG9yIHBhZ2UgZmxhZyBidWdzKSB3b3VsZCBiZSBjYXVnaHQgYnkgYXNzZXJ0aW9ucyBvciBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHJlY2xhaW0gbG9naWMgaW4gbW0vdm1zY2FuLmMgYnkgcmVmYWN0b3JpbmcgZm9saW8gd3JpdGViYWNrIGRldGVjdGlvbiBpbnRvIGEgc2hhcmVkIGhlbHBlciBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKClgLCB1cGRhdGluZyBgZXZpY3RfZm9saW9zKClgIChNdWx0aS1HZW4gTFJVKSwgYW5kIGludHJvZHVjaW5nIGEgcmV0cnkgbWVjaGFuaXNtIGZvciB3cml0dGVuLWJhY2sgZm9saW9zIGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpYCBhbG9uZyB3aXRoIHVwZGF0ZWQgaXNvbGF0aW9uIGFjY291bnRpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUsIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGhzIGFuZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyMjJlNjE4MjRiYTNmNDk3MDEwZWI0MTE4YWJlYTc2M2U0N2QwZDg2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTA6MjE6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggNTM1NGViOGQzYTA3Yi4uODBjY2Q1MTZlZjM4MCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTE4MSw2ICYjNDM7MTgxLDEwIEBAIHN0cnVjdCBzY2FuX2NvbnRyb2wge1xuIFx0c3RydWN0IHJlY2xhaW1fc3RhdGUgcmVjbGFpbV9zdGF0ZTtcbiB9O1xuIFxuJiM0MztzdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmNsZWFuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4mIzQzO1x0XHRcdFx0ICAgICBpbnQgdHlwZSwgYm9vbCBza2lwX3JldHJ5KTtcbiYjNDM7XG4gI2lmZGVmIEFSQ0hfSEFTX1BSRUZFVENIV1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCAqYmFzZSlcbkBAIC0yMDY1LDE0ICYjNDM7MjA2OSwxNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRcdGVudW0gbHJ1X2xpc3QgbHJ1KVxuIHtcbiBcdExJU1RfSEVBRChmb2xpb19saXN0KTtcbiYjNDM7XHRMSVNUX0hFQUQoY2xlYW5fbGlzdCk7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWQ7XG4tXHR1bnNpZ25lZCBpbnQgbnJfcmVjbGFpbWVkID0gMDtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfdGFrZW47XG4mIzQzO1x0dW5zaWduZWQgaW50IG5yX3JlY2xhaW1lZCwgdG90YWxfcmVjbGFpbWVkID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX3Rha2VuLCBpc29sYXRlZDtcbiBcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcbiBcdGJvb2wgZmlsZSA9IGlzX2ZpbGVfbHJ1KGxydSk7XG4gXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4gXHRib29sIHN0YWxsZWQgPSBmYWxzZTtcbiYjNDM7XHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcbiBcbiBcdHdoaWxlICh1bmxpa2VseSh0b29fbWFueV9pc29sYXRlZChwZ2RhdCwgZmlsZSwgc2MpKSkge1xuIFx0XHRpZiAoc3RhbGxlZClcbkBAIC0yMTA0LDI1ICYjNDM7MjExMCw0MiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRpZiAobnJfdGFrZW4gPT0gMClcbiBcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0aXNvbGF0ZWQgPSBucl90YWtlbjtcbiYjNDM7cmV0cnk6XG4gXHRucl9yZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChcdTAwMjZmb2xpb19saXN0LCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQsIGZhbHNlLFxuIFx0XHRcdFx0XHQgbHJ1dmVjX21lbWNnKGxydXZlYykpO1xuJiM0MztcdHRvdGFsX3JlY2xhaW1lZCAmIzQzOz0gbnJfcmVjbGFpbWVkO1xuJiM0MztcbiYjNDM7XHQvKiBSZXRyeSBwYXNzIGlzIG9ubHkgbWVhbnQgZm9yIGNsZWFuIGZvbGlvcyB3aXRob3V0IG5ldyBpc29sYXRpb24gKi9cbiYjNDM7XHRpZiAoaXNvbGF0ZWQpXG4mIzQzO1x0XHRoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2soaXNvbGF0ZWQsIHBnZGF0LCBzYywgXHUwMDI2c3RhdCk7XG4mIzQzO1x0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtXHUwMDNlbm9kZV9pZCxcbiYjNDM7XHRcdFx0bnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCBcdTAwMjZzdGF0LCBzYy1cdTAwM2Vwcmlvcml0eSwgZmlsZSk7XG4mIzQzO1xuJiM0MztcdGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhcdTAwMjZmb2xpb19saXN0LCBcdTAwMjZjbGVhbl9saXN0LCBscnV2ZWMsIGZpbGUsIHNraXBfcmV0cnkpO1xuIFxuIFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFx1MDAyNmZvbGlvX2xpc3QpO1xuIFxuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHREVNT1RFX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKSxcbiBcdFx0XHRcdFx0c3RhdC5ucl9kZW1vdGVkKTtcbi1cdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgZmlsZSwgLW5yX3Rha2VuKTtcbiBcdGl0ZW0gPSBQR1NURUFMX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKTtcbiBcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCBucl9yZWNsYWltZWQpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHU1RFQUxfQU5PTiAmIzQzOyBmaWxlLCBucl9yZWNsYWltZWQpO1xuLVx0aWYgKG5yX3NjYW5uZWQgXHUwMDNlIG5yX3JlY2xhaW1lZClcbiYjNDM7XG4mIzQzO1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmNsZWFuX2xpc3QpKSB7XG4mIzQzO1x0XHRsaXN0X3NwbGljZV9pbml0KFx1MDAyNmNsZWFuX2xpc3QsIFx1MDAyNmZvbGlvX2xpc3QpO1xuJiM0MztcdFx0c2tpcF9yZXRyeSA9IHRydWU7XG4mIzQzO1x0XHQvKiBSZXRyeSBmb2xpb3Mgd2VyZSBhbHJlYWR5IGlzb2xhdGVkIGFuZCBhY2NvdW50ZWQgYWJvdmUgKi9cbiYjNDM7XHRcdGlzb2xhdGVkID0gMDtcbiYjNDM7XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IGZpbGUsIC1ucl90YWtlbik7XG4mIzQzO1x0aWYgKG5yX3NjYW5uZWQgXHUwMDNlIHRvdGFsX3JlY2xhaW1lZClcbiBcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gJiM0MzsgZmlsZSxcbi1cdFx0XHRcdCBucl9zY2FubmVkIC0gbnJfcmVjbGFpbWVkKTtcbiYjNDM7XHRcdFx0XHQgbnJfc2Nhbm5lZCAtIHRvdGFsX3JlY2xhaW1lZCk7XG4gXG4tXHRoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2sobnJfdGFrZW4sIHBnZGF0LCBzYywgXHUwMDI2c3RhdCk7XG4tXHR0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19pbmFjdGl2ZShwZ2RhdC1cdTAwM2Vub2RlX2lkLFxuLVx0XHRcdG5yX3NjYW5uZWQsIG5yX3JlY2xhaW1lZCwgXHUwMDI2c3RhdCwgc2MtXHUwMDNlcHJpb3JpdHksIGZpbGUpO1xuLVx0cmV0dXJuIG5yX3JlY2xhaW1lZDtcbiYjNDM7XHRyZXR1cm4gdG90YWxfcmVjbGFpbWVkO1xuIH1cbiBcbiAvKlxuQEAgLTUwMTgsOCAmIzQzOzUwNDEsNiBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiB7XG4gXHRMSVNUX0hFQUQobGlzdCk7XG4gXHRMSVNUX0hFQUQoY2xlYW4pO1xuLVx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdHN0cnVjdCBmb2xpbyAqbmV4dDtcbiBcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbTtcbiBcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG5AQCAtNTA1OCwyNiAmIzQzOzUwNzksNyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHR0eXBlX3NjYW5uZWQsIHJlY2xhaW1lZCwgXHUwMDI2c3RhdCwgc2MtXHUwMDNlcHJpb3JpdHksXG4gXHRcdFx0dHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoZm9saW8sIG5leHQsIFx1MDAyNmxpc3QsIGxydSkge1xuLVx0XHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuLVxuLVx0XHQvKiBtb3ZlX2ZvbGlvc190b19scnUoKSBjdWxscyB1bmV2aWN0YWJsZSBmb2xpb3MgdmlhIGZvbGlvX3B1dGJhY2tfbHJ1KCkgKi9cbi1cdFx0aWYgKCFmb2xpb19ldmljdGFibGUoZm9saW8pKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHQvKiByZXRyeSBmb2xpb3MgdGhhdCBtYXkgaGF2ZSBtaXNzZWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cbi1cdFx0aWYgKCFza2lwX3JldHJ5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xuLVx0XHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmNsZWFuKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuLVx0XHQvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbi1cdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XG4tXHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbi1cdFx0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbi1cdFx0fVxuLVx0fVxuJiM0MztcdGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhcdTAwMjZsaXN0LCBcdTAwMjZjbGVhbiwgbHJ1dmVjLCB0eXBlLCBza2lwX3JldHJ5KTtcbiBcbiBcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZsaXN0KTtcbiBcbkBAIC02MTIzLDYgJiM0Mzs2MTI1LDQ2IEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqXG4gXG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2sgLSBGaW5kIGFuZCBtb3ZlIHRoZSB3cml0dGVuIGJhY2sgZm9saW9zIHRvIGEgbmV3IGxpc3QuXG4mIzQzOyAqIEBsaXN0OiBmb2xpb3MgbGlzdFxuJiM0MzsgKiBAY2xlYW46IHRoZSB3cml0dGVuIGJhY2sgZm9saW9zIGxpc3RcbiYjNDM7ICogQGxydXZlYzogdGhlIGxydXZlY1xuJiM0MzsgKiBAdHlwZTogTFJVIHR5cGUgKG9ubHkgdXNlZCBmb3IgQ09ORklHX0xSVV9HRU4pXG4mIzQzOyAqIEBza2lwX3JldHJ5OiB3aGV0aGVyIHNraXAgcmV0cnkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmNsZWFuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4mIzQzO1x0XHRcdFx0ICAgICBpbnQgdHlwZSwgYm9vbCBza2lwX3JldHJ5KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHRzdHJ1Y3QgZm9saW8gKm5leHQ7XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGZvbGlvLCBuZXh0LCBsaXN0LCBscnUpIHtcbiYjNDM7I2lmZGVmIENPTkZJR19MUlVfR0VOXG4mIzQzO1x0XHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRcdC8qIG1vdmVfZm9saW9zX3RvX2xydSgpIGN1bGxzIHVuZXZpY3RhYmxlIGZvbGlvcyB2aWEgZm9saW9fcHV0YmFja19scnUoKSAqL1xuJiM0MztcdFx0aWYgKCFmb2xpb19ldmljdGFibGUoZm9saW8pKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiByZXRyeSBmb2xpb3MgdGhhdCBtYXkgaGF2ZSBtaXNzZWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cbiYjNDM7XHRcdGlmICghc2tpcF9yZXRyeSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XG4mIzQzO1x0XHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIGNsZWFuKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzOyNpZmRlZiBDT05GSUdfTFJVX0dFTlxuJiM0MztcdFx0LyogZG9uJiMzOTt0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG4mIzQzO1x0XHRpZiAobHJ1dmVjLVx1MDAzZWxydWdlbi5lbmFibGVkIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XG4mIzQzO1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4mIzQzO1x0XHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuJiM0MztcdFx0fVxuJiM0MzsjZW5kaWZcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJbTlJfTFJVX0xJU1RTXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2hyaW5rX2luYWN0aXZlX2xpc3QmIzM0OywKICAgICYjMzQ7ZXZpY3RfZm9saW9zJiMzNDssCiAgICAmIzM0O2ZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHJlY2xhaW0gbG9naWMgaW4gbW0vdm1zY2FuLmMgYnkgcmVmYWN0b3JpbmcgZm9saW8gd3JpdGViYWNrIGRldGVjdGlvbiBpbnRvIGEgc2hhcmVkIGhlbHBlciBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKClgLCB1cGRhdGluZyBgZXZpY3RfZm9saW9zKClgIChNdWx0aS1HZW4gTFJVKSwgYW5kIGludHJvZHVjaW5nIGEgcmV0cnkgbWVjaGFuaXNtIGZvciB3cml0dGVuLWJhY2sgZm9saW9zIGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpYCBhbG9uZyB3aXRoIHVwZGF0ZWQgaXNvbGF0aW9uIGFjY291bnRpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUsIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGhzIGFuZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyMjJlNjE4MjRiYTNmNDk3MDEwZWI0MTE4YWJlYTc2M2U0N2QwZDg2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMTA6MjE6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDUzNTRlYjhkM2EwN2IuLjgwY2NkNTE2ZWYzODAgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xODEsNiAmIzQzOzE4MSwxMCBAQCBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHsKIAlzdHJ1Y3QgcmVjbGFpbV9zdGF0ZSByZWNsYWltX3N0YXRlOwogfTsKIAomIzQzO3N0YXRpYyB2b2lkIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAomIzQzOwkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmNsZWFuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7CQkJCSAgICAgaW50IHR5cGUsIGJvb2wgc2tpcF9yZXRyeSk7CiYjNDM7CiAjaWZkZWYgQVJDSF9IQVNfUFJFRkVUQ0hXCiBzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCXN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpCkBAIC0yMDY1LDE0ICYjNDM7MjA2OSwxNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCiAJCWVudW0gbHJ1X2xpc3QgbHJ1KQogewogCUxJU1RfSEVBRChmb2xpb19saXN0KTsKJiM0MzsJTElTVF9IRUFEKGNsZWFuX2xpc3QpOwogCXVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDsKLQl1bnNpZ25lZCBpbnQgbnJfcmVjbGFpbWVkID0gMDsKLQl1bnNpZ25lZCBsb25nIG5yX3Rha2VuOwomIzQzOwl1bnNpZ25lZCBpbnQgbnJfcmVjbGFpbWVkLCB0b3RhbF9yZWNsYWltZWQgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3Rha2VuLCBpc29sYXRlZDsKIAlzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7CiAJYm9vbCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTsKIAllbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwogCWJvb2wgc3RhbGxlZCA9IGZhbHNlOwomIzQzOwlib29sIHNraXBfcmV0cnkgPSBmYWxzZTsKIAogCXdoaWxlICh1bmxpa2VseSh0b29fbWFueV9pc29sYXRlZChwZ2RhdCwgZmlsZSwgc2MpKSkgewogCQlpZiAoc3RhbGxlZCkKQEAgLTIxMDQsMjUgJiM0MzsyMTEwLDQyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAlpZiAobnJfdGFrZW4gPT0gMCkKIAkJcmV0dXJuIDA7CiAKJiM0MzsJaXNvbGF0ZWQgPSBucl90YWtlbjsKJiM0MztyZXRyeToKIAlucl9yZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdCgmYW1wO2ZvbGlvX2xpc3QsIHBnZGF0LCBzYywgJmFtcDtzdGF0LCBmYWxzZSwKIAkJCQkJIGxydXZlY19tZW1jZyhscnV2ZWMpKTsKJiM0MzsJdG90YWxfcmVjbGFpbWVkICYjNDM7PSBucl9yZWNsYWltZWQ7CiYjNDM7CiYjNDM7CS8qIFJldHJ5IHBhc3MgaXMgb25seSBtZWFudCBmb3IgY2xlYW4gZm9saW9zIHdpdGhvdXQgbmV3IGlzb2xhdGlvbiAqLwomIzQzOwlpZiAoaXNvbGF0ZWQpCiYjNDM7CQloYW5kbGVfcmVjbGFpbV93cml0ZWJhY2soaXNvbGF0ZWQsIHBnZGF0LCBzYywgJmFtcDtzdGF0KTsKJiM0MzsJdHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtJmd0O25vZGVfaWQsCiYjNDM7CQkJbnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCAmYW1wO3N0YXQsIHNjLSZndDtwcmlvcml0eSwgZmlsZSk7CiYjNDM7CiYjNDM7CWZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygmYW1wO2ZvbGlvX2xpc3QsICZhbXA7Y2xlYW5fbGlzdCwgbHJ1dmVjLCBmaWxlLCBza2lwX3JldHJ5KTsKIAogCW1vdmVfZm9saW9zX3RvX2xydSgmYW1wO2ZvbGlvX2xpc3QpOwogCiAJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHREVNT1RFX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKSwKIAkJCQkJc3RhdC5ucl9kZW1vdGVkKTsKLQltb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IGZpbGUsIC1ucl90YWtlbik7CiAJaXRlbSA9IFBHU1RFQUxfS1NXQVBEICYjNDM7IHJlY2xhaW1lcl9vZmZzZXQoc2MpOwogCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCBucl9yZWNsYWltZWQpOwogCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1NURUFMX0FOT04gJiM0MzsgZmlsZSwgbnJfcmVjbGFpbWVkKTsKLQlpZiAobnJfc2Nhbm5lZCAmZ3Q7IG5yX3JlY2xhaW1lZCkKJiM0MzsKJiM0MzsJaWYgKCFsaXN0X2VtcHR5KCZhbXA7Y2xlYW5fbGlzdCkpIHsKJiM0MzsJCWxpc3Rfc3BsaWNlX2luaXQoJmFtcDtjbGVhbl9saXN0LCAmYW1wO2ZvbGlvX2xpc3QpOwomIzQzOwkJc2tpcF9yZXRyeSA9IHRydWU7CiYjNDM7CQkvKiBSZXRyeSBmb2xpb3Mgd2VyZSBhbHJlYWR5IGlzb2xhdGVkIGFuZCBhY2NvdW50ZWQgYWJvdmUgKi8KJiM0MzsJCWlzb2xhdGVkID0gMDsKJiM0MzsJCWdvdG8gcmV0cnk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyBmaWxlLCAtbnJfdGFrZW4pOwomIzQzOwlpZiAobnJfc2Nhbm5lZCAmZ3Q7IHRvdGFsX3JlY2xhaW1lZCkKIAkJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gJiM0MzsgZmlsZSwKLQkJCQkgbnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7CiYjNDM7CQkJCSBucl9zY2FubmVkIC0gdG90YWxfcmVjbGFpbWVkKTsKIAotCWhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayhucl90YWtlbiwgcGdkYXQsIHNjLCAmYW1wO3N0YXQpOwotCXRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LSZndDtub2RlX2lkLAotCQkJbnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCAmYW1wO3N0YXQsIHNjLSZndDtwcmlvcml0eSwgZmlsZSk7Ci0JcmV0dXJuIG5yX3JlY2xhaW1lZDsKJiM0MzsJcmV0dXJuIHRvdGFsX3JlY2xhaW1lZDsKIH0KIAogLyoKQEAgLTUwMTgsOCAmIzQzOzUwNDEsNiBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIHsKIAlMSVNUX0hFQUQobGlzdCk7CiAJTElTVF9IRUFEKGNsZWFuKTsKLQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwotCXN0cnVjdCBmb2xpbyAqbmV4dDsKIAllbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07CiAJc3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0OwogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7CkBAIC01MDU4LDI2ICYjNDM7NTA3OSw3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQkJdHlwZV9zY2FubmVkLCByZWNsYWltZWQsICZhbXA7c3RhdCwgc2MtJmd0O3ByaW9yaXR5LAogCQkJdHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoZm9saW8sIG5leHQsICZhbXA7bGlzdCwgbHJ1KSB7Ci0JCURFRklORV9NSU5fU0VRKGxydXZlYyk7Ci0KLQkJLyogbW92ZV9mb2xpb3NfdG9fbHJ1KCkgY3VsbHMgdW5ldmljdGFibGUgZm9saW9zIHZpYSBmb2xpb19wdXRiYWNrX2xydSgpICovCi0JCWlmICghZm9saW9fZXZpY3RhYmxlKGZvbGlvKSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIHJldHJ5IGZvbGlvcyB0aGF0IG1heSBoYXZlIG1pc3NlZCBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqLwotCQlpZiAoIXNraXBfcmV0cnkgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX21hcHBlZChmb2xpbykgJmFtcDsmYW1wOwotCQkgICAgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkgewotCQkJbGlzdF9tb3ZlKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtjbGVhbik7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqLwotCQlpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHsKLQkJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7Ci0JCQlmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTsKLQkJfQotCX0KJiM0MzsJZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKCZhbXA7bGlzdCwgJmFtcDtjbGVhbiwgbHJ1dmVjLCB0eXBlLCBza2lwX3JldHJ5KTsKIAogCW1vdmVfZm9saW9zX3RvX2xydSgmYW1wO2xpc3QpOwogCkBAIC02MTIzLDYgJiM0Mzs2MTI1LDQ2IEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqCiAKICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqLwogCiYjNDM7LyoqCiYjNDM7ICogZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrIC0gRmluZCBhbmQgbW92ZSB0aGUgd3JpdHRlbiBiYWNrIGZvbGlvcyB0byBhIG5ldyBsaXN0LgomIzQzOyAqIEBsaXN0OiBmb2xpb3MgbGlzdAomIzQzOyAqIEBjbGVhbjogdGhlIHdyaXR0ZW4gYmFjayBmb2xpb3MgbGlzdAomIzQzOyAqIEBscnV2ZWM6IHRoZSBscnV2ZWMKJiM0MzsgKiBAdHlwZTogTFJVIHR5cGUgKG9ubHkgdXNlZCBmb3IgQ09ORklHX0xSVV9HRU4pCiYjNDM7ICogQHNraXBfcmV0cnk6IHdoZXRoZXIgc2tpcCByZXRyeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpjbGVhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAomIzQzOwkJCQkgICAgIGludCB0eXBlLCBib29sIHNraXBfcmV0cnkpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwlzdHJ1Y3QgZm9saW8gKm5leHQ7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGZvbGlvLCBuZXh0LCBsaXN0LCBscnUpIHsKJiM0MzsjaWZkZWYgQ09ORklHX0xSVV9HRU4KJiM0MzsJCURFRklORV9NSU5fU0VRKGxydXZlYyk7CiYjNDM7I2VuZGlmCiYjNDM7CQkvKiBtb3ZlX2ZvbGlvc190b19scnUoKSBjdWxscyB1bmV2aWN0YWJsZSBmb2xpb3MgdmlhIGZvbGlvX3B1dGJhY2tfbHJ1KCkgKi8KJiM0MzsJCWlmICghZm9saW9fZXZpY3RhYmxlKGZvbGlvKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qIHJldHJ5IGZvbGlvcyB0aGF0IG1heSBoYXZlIG1pc3NlZCBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqLwomIzQzOwkJaWYgKCFza2lwX3JldHJ5ICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb19tYXBwZWQoZm9saW8pICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7CiYjNDM7CQkJbGlzdF9tb3ZlKCZhbXA7Zm9saW8tJmd0O2xydSwgY2xlYW4pOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOyNpZmRlZiBDT05GSUdfTFJVX0dFTgomIzQzOwkJLyogZG9uJiMzOTt0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovCiYjNDM7CQlpZiAobHJ1dmVjLSZndDtscnVnZW4uZW5hYmxlZCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHsKJiM0MzsJCQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwkJCWZvbGlvX3NldF9hY3RpdmUoZm9saW8pOwomIzQzOwkJfQomIzQzOyNlbmRpZgomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogewogCXVuc2lnbmVkIGxvbmcgbnJbTlJfTFJVX0xJU1RTXTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg4NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFdmFsdWF0aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBhIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiBMZXQmIzM5O3MgZGlnIGluLiBJdCYjMzk7cyB0b3VjaGluZyBgbW0vdm1zY2FuLmNgLiBBbHJpZ2h0LCB0aGF0IGltbWVkaWF0ZWx5IGdldHMgbXkgYXR0ZW50aW9uIOKAkyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGlzIGEgcHJldHR5IGp1aWN5IHRhcmdldCEgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWluZyBjaGFuZ2VkIGhlcmUuIFRpbWUgdG8gbG9vayBhdCB0aGUgZGlmZi4gSSYjMzk7bGwgcHJvYmFibHkgZmlyZSB1cCBncmVwcGVyIG9yIGp1c3QgdXNlIGByZWFkLWZpbGVgIHRvIGdldCBhIGdvb2QgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LgoKSSYjMzk7bGwgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgYXJvdW5kIHRoZSBtb2RpZmljYXRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBkaWZmIGludm9sdmVzIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgKGxpbmVzIDIwNjUtMjE1MCksIGBldmljdF9mb2xpb3NgIChhcm91bmQgNTAxOC01MDgwKSwgYW5kIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgIChhcm91bmQgNjEyNSkuIEkgc2hvdWxkIGdldCB0aG9zZSBwYWdlcyBmcm9tIGBtbS92bXNjYW4uY2Agd2l0aCBgcmVhZC1maWxlYCBhbmQgY2FyZWZ1bGx5IGFuYWx5emUgdGhlc2Ugc2VjdGlvbnMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBjb2RlIGlzIGNoYW5nZWQgYW5kIHRoZSBhcmVhcyBhZmZlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDY1Olx0ICogb2YgcmVjbGFpbWVkIHBhZ2VzXG4yMDY2Olx0ICovXG4yMDY3Olx0c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuMjA2ODpcdFx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuMjA2OTpcdFx0XHRlbnVtIGxydV9saXN0IGxydSlcbjIwNzA6XHR7XG4yMDcxOlx0XHRMSVNUX0hFQUQoZm9saW9fbGlzdCk7XG4yMDcyOlx0XHRMSVNUX0hFQUQoY2xlYW5fbGlzdCk7XG4yMDczOlx0XHR1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWQ7XG4yMDc0Olx0XHR1bnNpZ25lZCBpbnQgbnJfcmVjbGFpbWVkLCB0b3RhbF9yZWNsYWltZWQgPSAwO1xuMjA3NTpcdFx0dW5zaWduZWQgbG9uZyBucl90YWtlbiwgaXNvbGF0ZWQ7XG4yMDc2Olx0XHRzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7XG4yMDc3Olx0XHRib29sIGZpbGUgPSBpc19maWxlX2xydShscnUpO1xuMjA3ODpcdFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtO1xuMjA3OTpcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuMjA4MDpcdFx0Ym9vbCBzdGFsbGVkID0gZmFsc2U7XG4yMDgxOlx0XHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcbjIwODI6XHRcbjIwODM6XHRcdHdoaWxlICh1bmxpa2VseSh0b29fbWFueV9pc29sYXRlZChwZ2RhdCwgZmlsZSwgc2MpKSkge1xuMjA4NDpcdFx0XHRpZiAoc3RhbGxlZClcbjIwODU6XHRcdFx0XHRyZXR1cm4gMDtcbjIwODY6XHRcbjIwODc6XHRcdFx0Lyogd2FpdCBhIGJpdCBmb3IgdGhlIHJlY2xhaW1lci4gKi9cbjIwODg6XHRcdFx0c3RhbGxlZCA9IHRydWU7XG4yMDg5Olx0XHRcdHJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7XG4yMDkwOlx0XG4yMDkxOlx0XHRcdC8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi9cbjIwOTI6XHRcdFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuMjA5MzpcdFx0XHRcdHJldHVybiBTV0FQX0NMVVNURVJfTUFYO1xuMjA5NDpcdFx0fVxuMjA5NTpcdFxuMjA5NjpcdFx0bHJ1X2FkZF9kcmFpbigpO1xuMjA5NzpcdFxuMjA5ODpcdFx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XG4yMDk5Olx0XG4yMTAwOlx0XHRucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIFx1MDAyNmZvbGlvX2xpc3QsXG4yMTAxOlx0XHRcdFx0XHQgICAgIFx1MDAyNm5yX3NjYW5uZWQsIHNjLCBscnUpO1xuMjEwMjpcdFxuMjEwMzpcdFx0X19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IGZpbGUsIG5yX3Rha2VuKTtcbjIxMDQ6XHRcdGl0ZW0gPSBQR1NDQU5fS1NXQVBEICYjNDM7IHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xuMjEwNTpcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIG5yX3NjYW5uZWQpO1xuMjEwNjpcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHU0NBTl9BTk9OICYjNDM7IGZpbGUsIG5yX3NjYW5uZWQpO1xuMjEwNzpcdFxuMjEwODpcdFx0bHJ1dmVjX3VubG9ja19pcnEobHJ1dmVjKTtcbjIxMDk6XHRcbjIxMTA6XHRcdGlmIChucl90YWtlbiA9PSAwKVxuMjExMTpcdFx0XHRyZXR1cm4gMDtcbjIxMTI6XHRcbjIxMTM6XHRcdGlzb2xhdGVkID0gbnJfdGFrZW47XG4yMTE0Olx0cmV0cnk6XG4yMTE1Olx0XHRucl9yZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChcdTAwMjZmb2xpb19saXN0LCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQsIGZhbHNlLFxuMjExNjpcdFx0XHRcdFx0XHQgbHJ1dmVjX21lbWNnKGxydXZlYykpO1xuMjExNzpcdFx0dG90YWxfcmVjbGFpbWVkICYjNDM7PSBucl9yZWNsYWltZWQ7XG4yMTE4Olx0XG4yMTE5Olx0XHQvKiBSZXRyeSBwYXNzIGlzIG9ubHkgbWVhbnQgZm9yIGNsZWFuIGZvbGlvcyB3aXRob3V0IG5ldyBpc29sYXRpb24gKi9cbjIxMjA6XHRcdGlmIChpc29sYXRlZClcbjIxMjE6XHRcdFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQpO1xuMjEyMjpcdFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtXHUwMDNlbm9kZV9pZCxcbjIxMjM6XHRcdFx0XHRucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFx1MDAyNnN0YXQsIHNjLVx1MDAzZXByaW9yaXR5LCBmaWxlKTtcbjIxMjQ6XHRcbjIxMjU6XHRcdGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhcdTAwMjZmb2xpb19saXN0LCBcdTAwMjZjbGVhbl9saXN0LCBscnV2ZWMsIGZpbGUsIHNraXBfcmV0cnkpO1xuMjEyNjpcdFxuMjEyNzpcdFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFx1MDAyNmZvbGlvX2xpc3QpO1xuMjEyODpcdFxuMjEyOTpcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHREVNT1RFX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKSxcbjIxMzA6XHRcdFx0XHRcdFx0c3RhdC5ucl9kZW1vdGVkKTtcbjIxMzE6XHRcdGl0ZW0gPSBQR1NURUFMX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKTtcbjIxMzI6XHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCBucl9yZWNsYWltZWQpO1xuMjEzMzpcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHU1RFQUxfQU5PTiAmIzQzOyBmaWxlLCBucl9yZWNsYWltZWQpO1xuMjEzNDpcdFxuMjEzNTpcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmNsZWFuX2xpc3QpKSB7XG4yMTM2Olx0XHRcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2Y2xlYW5fbGlzdCwgXHUwMDI2Zm9saW9fbGlzdCk7XG4yMTM3Olx0XHRcdHNraXBfcmV0cnkgPSB0cnVlO1xuMjEzODpcdFx0XHQvKiBSZXRyeSBmb2xpb3Mgd2VyZSBhbHJlYWR5IGlzb2xhdGVkIGFuZCBhY2NvdW50ZWQgYWJvdmUgKi9cbjIxMzk6XHRcdFx0aXNvbGF0ZWQgPSAwO1xuMjE0MDpcdFx0XHRnb3RvIHJldHJ5O1xuMjE0MTpcdFx0fVxuMjE0MjpcdFxuMjE0MzpcdFx0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyBmaWxlLCAtbnJfdGFrZW4pO1xuMjE0NDpcdFx0aWYgKG5yX3NjYW5uZWQgXHUwMDNlIHRvdGFsX3JlY2xhaW1lZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjY2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgUHJvY2VkdXJlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgZXZpY3RfZm9saW9zYCBhbmQgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHdlIGhhbmRsZSBtZW1vcnkgcHJlc3N1cmUgYW5kIHRoZSBtZWNoYW5pY3Mgb2YgcGFnZSByZWNsYW1hdGlvbi4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgaG93IHRoZXNlIHJvdXRpbmVzIGludGVyYWN0IGFuZCBob3cgZWZmaWNpZW50bHkgdGhleSYjMzk7cmUgaWRlbnRpZnlpbmcgYW5kIHByb2Nlc3NpbmcgZGlydHkgcGFnZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaGV1cmlzdGljcyB0aGV5IGVtcGxveSBhbmQgd2hldGhlciB0aGV5JiMzOTtyZSB3ZWxsLXR1bmVkIHRvIG91ciB3b3JrbG9hZCYjMzk7cyBjaGFyYWN0ZXJpc3RpY3MuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBpbmVmZmljaWVuY2llcyBpbiB0aGVpciBpbXBsZW1lbnRhdGlvbiwgY29uc2lkZXJpbmcgdGhpbmdzIGxpa2UgbG9jayBjb250ZW50aW9uLCBjYWNoZSBsaW5lIGVmZmVjdHMsIGFuZCB0aGUgb3ZlcmFsbCBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggcGFnZSB0YWJsZSBtYW5hZ2VtZW50LiBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgY3JpdGVyaWEgdXNlZCB0byBkZXRlcm1pbmUgd2hlbiBhIGZvbGlvIGlzICYjMzQ7d3JpdHRlbiBiYWNrJiMzNDsgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgZGVjaXNpb25zIG9uIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MDYwOlx0XHRcdFx0XHQgXHUwMDI2bGlzdCwgXHUwMDI2aXNvbGF0ZWQsIFx1MDAyNnR5cGUsIFx1MDAyNnR5cGVfc2Nhbm5lZCk7XG41MDYxOlx0XHRucl9pc29sYXRlZCA9IGlzb2xhdGVkO1xuNTA2MjpcdFxuNTA2MzpcdFx0LyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi9cbjUwNjQ6XHRcdGlmIChzY2FubmVkKVxuNTA2NTpcdFx0XHR0cnlfdG9faW5jX21pbl9zZXEobHJ1dmVjLCBzd2FwcGluZXNzKTtcbjUwNjY6XHRcbjUwNjc6XHRcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XG41MDY4Olx0XG41MDY5Olx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZsaXN0KSlcbjUwNzA6XHRcdFx0cmV0dXJuIHNjYW5uZWQ7XG41MDcxOlx0cmV0cnk6XG41MDcyOlx0XHRyZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChcdTAwMjZsaXN0LCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQsIGZhbHNlLCBtZW1jZyk7XG41MDczOlx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgJiM0Mzs9IHJlY2xhaW1lZDtcbjUwNzQ6XHRcdHRvdGFsX3JlY2xhaW1lZCAmIzQzOz0gcmVjbGFpbWVkO1xuNTA3NTpcdFx0LyogUmV0cnkgcGFzcyBpcyBvbmx5IG1lYW50IGZvciBjbGVhbiBmb2xpb3Mgd2l0aG91dCBuZXcgaXNvbGF0aW9uICovXG41MDc2Olx0XHRpZiAoaXNvbGF0ZWQpXG41MDc3Olx0XHRcdGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayhpc29sYXRlZCwgcGdkYXQsIHNjLCBcdTAwMjZzdGF0KTtcbjUwNzg6XHRcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LVx1MDAzZW5vZGVfaWQsXG41MDc5Olx0XHRcdFx0dHlwZV9zY2FubmVkLCByZWNsYWltZWQsIFx1MDAyNnN0YXQsIHNjLVx1MDAzZXByaW9yaXR5LFxuNTA4MDpcdFx0XHRcdHR5cGUgPyBMUlVfSU5BQ1RJVkVfRklMRSA6IExSVV9JTkFDVElWRV9BTk9OKTtcbjUwODE6XHRcbjUwODI6XHRcdGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhcdTAwMjZsaXN0LCBcdTAwMjZjbGVhbiwgbHJ1dmVjLCB0eXBlLCBza2lwX3JldHJ5KTtcbjUwODM6XHRcbjUwODQ6XHRcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZsaXN0KTtcbjUwODU6XHRcbjUwODY6XHRcdHdhbGsgPSBjdXJyZW50LVx1MDAzZXJlY2xhaW1fc3RhdGUtXHUwMDNlbW1fd2FsaztcbjUwODc6XHRcdGlmICh3YWxrIFx1MDAyNlx1MDAyNiB3YWxrLVx1MDAzZWJhdGNoZWQpIHtcbjUwODg6XHRcdFx0d2Fsay1cdTAwM2VscnV2ZWMgPSBscnV2ZWM7XG41MDg5Olx0XHRcdHJlc2V0X2JhdGNoX3NpemUod2Fsayk7XG41MDkwOlx0XHR9XG41MDkxOlx0XG41MDkyOlx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdERU1PVEVfS1NXQVBEICYjNDM7IHJlY2xhaW1lcl9vZmZzZXQoc2MpLFxuNTA5MzpcdFx0XHRcdFx0XHRzdGF0Lm5yX2RlbW90ZWQpO1xuNTA5NDpcdFxuNTA5NTpcdFx0aXRlbSA9IFBHU1RFQUxfS1NXQVBEICYjNDM7IHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xuNTA5NjpcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIHJlY2xhaW1lZCk7XG41MDk3Olx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICYjNDM7IHR5cGUsIHJlY2xhaW1lZCk7XG41MDk4Olx0XG41MDk5Olx0XHRsaXN0X3NwbGljZV9pbml0KFx1MDAyNmNsZWFuLCBcdTAwMjZsaXN0KTtcbjUxMDA6XHRcbjUxMDE6XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZsaXN0KSkge1xuNTEwMjpcdFx0XHRza2lwX3JldHJ5ID0gdHJ1ZTtcbjUxMDM6XHRcdFx0aXNvbGF0ZWQgPSAwO1xuNTEwNDpcdFx0XHRnb3RvIHJldHJ5O1xuNTEwNTpcdFx0fVxuNTEwNjpcdFxuNTEwNzpcdFx0aWYgKG5yX2lzb2xhdGVkIFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXG41MTA4Olx0XHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IHR5cGUsXG41MTA5Olx0XHRcdFx0XHQgbnJfaXNvbGF0ZWQgLSB0b3RhbF9yZWNsYWltZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3NDIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AgaW4gbW0vdm1zY2FuLmMqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgSSBuZWVkIHRvIHpvb20gaW4gb24gYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AuIFRoZSBmaWxlIGFuZCBsaW5lIG51bWJlciBhcmUgc29saWQgc3RhcnRpbmcgcG9pbnRzIOKAkyBgbW0vdm1zY2FuLmNgIGFyb3VuZCBsaW5lIDYxMjUuIFRoaXMgZnVuY3Rpb24gaXMgY2xlYXJseSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGRpcnR5IHBhZ2VzIHRoYXQgYXJlIHdhaXRpbmcgdG8gYmUgd3JpdHRlbiBiYWNrIHRvIGRpc2suIEkgYmV0IGl0JiMzOTtzIGludm9sdmVkIGluIGlkZW50aWZ5aW5nIHdoaWNoIGZvbGlvcyBhcmUgY2FuZGlkYXRlcyBmb3Igd3JpdGViYWNrLCBsaWtlbHkgZHVyaW5nIGEgcmVjbGFpbSBvciBzY2FubmluZyBvcGVyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNyaXRlcmlhIGl0IHVzZXMgdG8gc2VsZWN0IHRoZXNlIGZvbGlvcywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBiYWNraW5nIHN0b3JhZ2UsIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBiZSBjcnVjaWFsIGZvciBvcHRpbWl6aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yIGFuZCBwb3RlbnRpYWxseSBkaWFnbm9zaW5nIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gSS9PIGFuZCBwYWdlIHJlY2xhaW0uIEkgc2hvdWxkIHByb2JhYmx5IHBheSBhdHRlbnRpb24gdG8gYW55IGludGVyYWN0aW9uIHdpdGggdGhlIHdyaXRlYmFjayB0aHJlYWRzIG9yIHdvcmtxdWV1ZXMgYXMgd2VsbC4gS25vd2luZyB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgYWNjZXNzZWQgaGVyZSBtaWdodCBhbHNvIGJlIGVubGlnaHRlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2MTI1Olx0XG42MTI2Olx0I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG42MTI3Olx0XG42MTI4Olx0LyoqXG42MTI5Olx0ICogZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrIC0gRmluZCBhbmQgbW92ZSB0aGUgd3JpdHRlbiBiYWNrIGZvbGlvcyB0byBhIG5ldyBsaXN0LlxuNjEzMDpcdCAqIEBsaXN0OiBmb2xpb3MgbGlzdFxuNjEzMTpcdCAqIEBjbGVhbjogdGhlIHdyaXR0ZW4gYmFjayBmb2xpb3MgbGlzdFxuNjEzMjpcdCAqIEBscnV2ZWM6IHRoZSBscnV2ZWNcbjYxMzM6XHQgKiBAdHlwZTogTFJVIHR5cGUgKG9ubHkgdXNlZCBmb3IgQ09ORklHX0xSVV9HRU4pXG42MTM0Olx0ICogQHNraXBfcmV0cnk6IHdoZXRoZXIgc2tpcCByZXRyeS5cbjYxMzU6XHQgKi9cbjYxMzY6XHRzdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbjYxMzc6XHRcdFx0XHRcdCAgICAgc3RydWN0IGxpc3RfaGVhZCAqY2xlYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbjYxMzg6XHRcdFx0XHRcdCAgICAgaW50IHR5cGUsIGJvb2wgc2tpcF9yZXRyeSlcbjYxMzk6XHR7XG42MTQwOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuNjE0MTpcdFx0c3RydWN0IGZvbGlvICpuZXh0O1xuNjE0MjpcdFxuNjE0MzpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoZm9saW8sIG5leHQsIGxpc3QsIGxydSkge1xuNjE0NDpcdCNpZmRlZiBDT05GSUdfTFJVX0dFTlxuNjE0NTpcdFx0XHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuNjE0NjpcdCNlbmRpZlxuNjE0NzpcdFx0XHQvKiBtb3ZlX2ZvbGlvc190b19scnUoKSBjdWxscyB1bmV2aWN0YWJsZSBmb2xpb3MgdmlhIGZvbGlvX3B1dGJhY2tfbHJ1KCkgKi9cbjYxNDg6XHRcdFx0aWYgKCFmb2xpb19ldmljdGFibGUoZm9saW8pKVxuNjE0OTpcdFx0XHRcdGNvbnRpbnVlO1xuNjE1MDpcdFxuNjE1MTpcdFx0XHQvKiByZXRyeSBmb2xpb3MgdGhhdCBtYXkgaGF2ZSBtaXNzZWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cbjYxNTI6XHRcdFx0aWYgKCFza2lwX3JldHJ5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbjYxNTM6XHRcdFx0ICAgICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xuNjE1NDpcdFx0XHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIGNsZWFuKTtcbjYxNTU6XHRcdFx0XHRjb250aW51ZTtcbjYxNTY6XHRcdFx0fVxuNjE1NzpcdCNpZmRlZiBDT05GSUdfTFJVX0dFTlxuNjE1ODpcdFx0XHQvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbjYxNTk6XHRcdFx0aWYgKGxydXZlYy1cdTAwM2VscnVnZW4uZW5hYmxlZCBcdTAwMjZcdTAwMjZcbjYxNjA6XHRcdFx0ICAgIGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XG42MTYxOlx0XHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbjYxNjI6XHRcdFx0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbjYxNjM6XHRcdFx0fVxuNjE2NDpcdCNlbmRpZlxuNjE2NTpcdFx0fVxuNjE2NjpcdH1cbjYxNjc6XHRcbjYxNjg6XHRzdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG42MTY5Olx0e1xuNjE3MDpcdFx0dW5zaWduZWQgbG9uZyBucltOUl9MUlVfTElTVFNdO1xuNjE3MTpcdFx0dW5zaWduZWQgbG9uZyB0YXJnZXRzW05SX0xSVV9MSVNUU107XG42MTcyOlx0XHR1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW47XG42MTczOlx0XHRlbnVtIGxydV9saXN0IGxydTtcbjYxNzQ6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODYzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTMxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcuIEkgY2FuJiMzOTt0IGRpcmVjdGx5IGNoZWNrIHRoZSBnaXQgbG9nLCBidXQgdGhlIHByb3ZpZGVkIGRpZmYgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNlZSB0aGF0IGEgbmV3IGhlbHBlciBmdW5jdGlvbiwgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpYCwgaXMgYmVpbmcgaW50cm9kdWNlZC4gSW50cmlndWluZy4KCk15IGV4cGVydCBpbnR1aXRpb24gaW1tZWRpYXRlbHkga2lja3MgaW4gYW5kIHJlbWluZHMgbWUgdGhhdCB0aGlzIGZ1bmN0aW9uJiMzOTtzIHBsYWNlbWVudCBpcyBpbnRlcmVzdGluZy4gSSByZWNhbGwgdGhhdCBzaW1pbGFyIGxvZ2ljIHdhcyBwcmV2aW91c2x5IGlubGluZWQgd2l0aGluIHRoZSBNR0xSVSBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYGV2aWN0X2ZvbGlvc2AuIFNvLCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgZ2VuZXJhbGl6aW5nIHRoaXMgcmV0cnkgYmVoYXZpb3IgZm9yIHdyaXR0ZW4tYmFjayBmb2xpb3MuIFByZXZpb3VzbHkgdGhpcyBmdW5jdGlvbmFsaXR5IHdhcyBhbHJlYWR5IGhhbmRsZWQgaW4gYGV2aWN0X2ZvbGlvc2AuCgpMb29raW5nIGRlZXBlciwgSSBzZWUgdGhlIHJldHJ5IG1lY2hhbmlzbSBpcyBub3cgYmVpbmcgYWRkZWQgdG8gYHNocmlua19pbmFjdGl2ZV9saXN0YCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgdHJhZGl0aW9uYWwgYWN0aXZlL2luYWN0aXZlIExSVSByZWNsYWltIHByb2Nlc3MuIFByZXZpb3VzbHksIGEgcmV0cnkgbG9vcCBmb3Igd3JpdHRlbi1iYWNrIGZvbGlvcyB3YXNuJiMzOTt0IHByZXNlbnQgdGhlcmUsIG1lYW5pbmcgdGhpcyBpcyBhIG5vbi10cml2aWFsIGNoYW5nZS4gVGhlIHBhdGNoIGFic3RyYWN0cyB0aGUgY29tbW9uIGxvZ2ljIGludG8gYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AsIHNvIGJvdGggYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYGV2aWN0X2ZvbGlvc2AgY2FuIHVzZSB0aGUgY29kZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIG1lbW9yeSByZWNsYW1hdGlvbiBiZWhhdmlvciBpbiBgbW0vdm1zY2FuLmNgLgoKTWVtb3J5IHJlY2xhbWF0aW9uIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgYW5kIHRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGRpcmVjdGx5LiBBY2NvcmRpbmcgdG8gdGhlIGZ1enppbmcgZ3VpZGVsaW5lcywgdGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBteSAmIzM0O1dvcnRoRnV6emluZyA9IHRydWUmIzM0OyBmbGFnLiBUaGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgY29kZSBhbmQgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhhdCYjMzk7cyBhIGNsZWFyIHBvc2l0aXZlIGNyaXRlcmlvbi4KCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGBFbmFibGVDb25maWdzYC4gSXMgdGhpcyBmdW5jdGlvbmFsaXR5IGd1YXJkZWQgYnkgc3BlY2lmaWMgYENPTkZJR19gIG9wdGlvbnM/IEkgbmVlZCB0byBjaGVjayBob3cgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AgYW5kIGBldmljdF9mb2xpb3NgIGFyZSBjb21waWxlZC4gSSBjYW4gcXVpY2tseSBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgaW4gYG1tL3Ztc2Nhbi5jYC4gSSBuZWVkIHRvIGdyZXAgZm9yIGBDT05GSUdgIGRpcmVjdGl2ZXMgaW4gdGhhdCBhcmVhIG9mIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgaWYgaXQmIzM5O3MgYWx3YXlzIGluY2x1ZGVkIG9yIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIFNhbWUgZm9yIGBldmljdF9mb2xpb3NgIGFuZCBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIHRoaXMgY29kZSBwYXRoIGlzIGFsd2F5cyBhdmFpbGFibGUgb3IgcmVxdWlyZXMgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb24gdG8gYmUgZW5hYmxlZCwgd2hpY2ggd2lsbCBiZSBpbXBvcnRhbnQgdG8gY29tbXVuaWNhdGUgaW4gdGhlIGZ1enplciBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtfaW5hY3RpdmVfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTIwMjU9c3RhdGljIHZvaWQgaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4sXG4tLVxubW0vdm1zY2FuLmMtMjA2My0vKlxubW0vdm1zY2FuLmM6MjA2NDogKiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIGlzIGEgaGVscGVyIGZvciBzaHJpbmtfbm9kZSgpLiAgSXQgcmV0dXJucyB0aGUgbnVtYmVyXG5tbS92bXNjYW4uYy0yMDY1LSAqIG9mIHJlY2xhaW1lZCBwYWdlc1xubW0vdm1zY2FuLmMtMjA2Ni0gKi9cbm1tL3Ztc2Nhbi5jOjIwNjc6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxubW0vdm1zY2FuLmMtMjA2OC1cdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYz0yMzE1PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19saXN0KGVudW0gbHJ1X2xpc3QgbHJ1LCB1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4tLVxubW0vdm1zY2FuLmMtMjMyNS1cbm1tL3Ztc2Nhbi5jOjIzMjY6XHRyZXR1cm4gc2hyaW5rX2luYWN0aXZlX2xpc3QobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgbHJ1KTtcbm1tL3Ztc2Nhbi5jLTIzMjctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk4NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkRpZ2dpbmcgaW50byBJbmFjdGl2ZSBMaXN0IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgZnVuY3Rpb24uIEkmIzM5O20gZ2V0dGluZyBhIGZlZWxpbmcgdGhhdCBpdHMgYmVoYXZpb3IgbWlnaHQgYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCwgcG90ZW50aWFsbHkgdXNpbmcgc29tZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgY291bGQgYmUgcmVsYXRlZCB0byBzb21lIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9yIGZlYXR1cmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRocm91Z2ggYG1tL3Ztc2Nhbi5jYCwgZm9jdXNpbmcgb24gdGhlIGFyZWEgYXJvdW5kIHRoZSAyMDAwIHRvIDIwNjcgbGluZSByYW5nZS4gVGhhdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBgI2lmZGVmYCBibG9ja3Mgb3Igb3RoZXIgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBtaWdodCBiZSBjb250cm9sbGluZyB0aGUgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkuIEl0JiMzOTtzIGEgZmFpcmx5IHNwZWNpZmljIGFyZWEgdG8gY2hlY2ssIHNvIGhvcGVmdWxseSBJIHdvbiYjMzk7dCBoYXZlIHRvIHNwZW5kIHRvbyBtdWNoIHRpbWUgb24gaXQuIEkmIzM5O20gbG9va2luZyBmb3IgYSBjbGVhciBleHBsYW5hdGlvbiBvZiBob3cgdGhpcyBpcyBjb250cm9sbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDIwOlx0c3RhdGljIGludCBjdXJyZW50X21heV90aHJvdHRsZSh2b2lkKVxuMjAyMTpcdHtcbjIwMjI6XHRcdHJldHVybiAhKGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX0xPQ0FMX1RIUk9UVExFKTtcbjIwMjM6XHR9XG4yMDI0Olx0XG4yMDI1Olx0c3RhdGljIHZvaWQgaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4sXG4yMDI2Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4yMDI3Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuMjAyODpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcmVjbGFpbV9zdGF0ICpzdGF0KVxuMjAyOTpcdHtcbjIwMzA6XHRcdC8qXG4yMDMxOlx0XHQgKiBJZiBkaXJ0eSBmb2xpb3MgYXJlIHNjYW5uZWQgdGhhdCBhcmUgbm90IHF1ZXVlZCBmb3IgSU8sIGl0XG4yMDMyOlx0XHQgKiBpbXBsaWVzIHRoYXQgZmx1c2hlcnMgYXJlIG5vdCBkb2luZyB0aGVpciBqb2IuIFRoaXMgY2FuXG4yMDMzOlx0XHQgKiBoYXBwZW4gd2hlbiBtZW1vcnkgcHJlc3N1cmUgcHVzaGVzIGRpcnR5IGZvbGlvcyB0byB0aGUgZW5kIG9mXG4yMDM0Olx0XHQgKiB0aGUgTFJVIGJlZm9yZSB0aGUgZGlydHkgbGltaXRzIGFyZSBicmVhY2hlZCBhbmQgdGhlIGRpcnR5XG4yMDM1Olx0XHQgKiBkYXRhIGhhcyBleHBpcmVkLiBJdCBjYW4gYWxzbyBoYXBwZW4gd2hlbiB0aGUgcHJvcG9ydGlvbiBvZlxuMjAzNjpcdFx0ICogZGlydHkgZm9saW9zIGdyb3dzIG5vdCB0aHJvdWdoIHdyaXRlcyBidXQgdGhyb3VnaCBtZW1vcnlcbjIwMzc6XHRcdCAqIHByZXNzdXJlIHJlY2xhaW1pbmcgYWxsIHRoZSBjbGVhbiBjYWNoZS4gQW5kIGluIHNvbWUgY2FzZXMsXG4yMDM4Olx0XHQgKiB0aGUgZmx1c2hlcnMgc2ltcGx5IGNhbm5vdCBrZWVwIHVwIHdpdGggdGhlIGFsbG9jYXRpb25cbjIwMzk6XHRcdCAqIHJhdGUuIE51ZGdlIHRoZSBmbHVzaGVyIHRocmVhZHMgaW4gY2FzZSB0aGV5IGFyZSBhc2xlZXAuXG4yMDQwOlx0XHQgKi9cbjIwNDE6XHRcdGlmIChzdGF0LVx1MDAzZW5yX3VucXVldWVkX2RpcnR5ID09IG5yX3Rha2VuKSB7XG4yMDQyOlx0XHRcdHdha2V1cF9mbHVzaGVyX3RocmVhZHMoV0JfUkVBU09OX1ZNU0NBTik7XG4yMDQzOlx0XHRcdC8qXG4yMDQ0Olx0XHRcdCAqIEZvciBjZ3JvdXB2MSBkaXJ0eSB0aHJvdHRsaW5nIGlzIGFjaGlldmVkIGJ5IHdha2luZyB1cFxuMjA0NTpcdFx0XHQgKiB0aGUga2VybmVsIGZsdXNoZXIgaGVyZSBhbmQgbGF0ZXIgd2FpdGluZyBvbiBmb2xpb3NcbjIwNDY6XHRcdFx0ICogd2hpY2ggYXJlIGluIHdyaXRlYmFjayB0byBmaW5pc2ggKHNlZSBzaHJpbmtfZm9saW9fbGlzdCgpKS5cbjIwNDc6XHRcdFx0ICpcbjIwNDg6XHRcdFx0ICogRmx1c2hlciBtYXkgbm90IGJlIGFibGUgdG8gaXNzdWUgd3JpdGViYWNrIHF1aWNrbHlcbjIwNDk6XHRcdFx0ICogZW5vdWdoIGZvciBjZ3JvdXB2MSB3cml0ZWJhY2sgdGhyb3R0bGluZyB0byB3b3JrXG4yMDUwOlx0XHRcdCAqIG9uIGEgbGFyZ2Ugc3lzdGVtLlxuMjA1MTpcdFx0XHQgKi9cbjIwNTI6XHRcdFx0aWYgKCF3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHNjKSlcbjIwNTM6XHRcdFx0XHRyZWNsYWltX3Rocm90dGxlKHBnZGF0LCBWTVNDQU5fVEhST1RUTEVfV1JJVEVCQUNLKTtcbjIwNTQ6XHRcdH1cbjIwNTU6XHRcbjIwNTY6XHRcdHNjLVx1MDAzZW5yLmRpcnR5ICYjNDM7PSBzdGF0LVx1MDAzZW5yX2RpcnR5O1xuMjA1NzpcdFx0c2MtXHUwMDNlbnIuY29uZ2VzdGVkICYjNDM7PSBzdGF0LVx1MDAzZW5yX2Nvbmdlc3RlZDtcbjIwNTg6XHRcdHNjLVx1MDAzZW5yLndyaXRlYmFjayAmIzQzOz0gc3RhdC1cdTAwM2Vucl93cml0ZWJhY2s7XG4yMDU5Olx0XHRzYy1cdTAwM2Vuci5pbW1lZGlhdGUgJiM0Mzs9IHN0YXQtXHUwMDNlbnJfaW1tZWRpYXRlO1xuMjA2MDpcdFx0c2MtXHUwMDNlbnIudGFrZW4gJiM0Mzs9IG5yX3Rha2VuO1xuMjA2MTpcdH1cbjIwNjI6XHRcbjIwNjM6XHQvKlxuMjA2NDpcdCAqIHNocmlua19pbmFjdGl2ZV9saXN0KCkgaXMgYSBoZWxwZXIgZm9yIHNocmlua19ub2RlKCkuICBJdCByZXR1cm5zIHRoZSBudW1iZXJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5OTEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqRGl2aW5nIGludG8gTFJVIFBhZ2UgUmVjbGFpbSBMb2dpYyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHNocmlua19pbmFjdGl2ZV9saXN0KClgIGhlcmUuIFRoYXQmIzM5O3MgdGhlIGJyZWFkLWFuZC1idXR0ZXIgTFJVIHBhZ2UgcmVjbGFpbSBmdW5jdGlvbiwgYWx3YXlzIGNvbXBpbGVkIGluLCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBtZW1vcnkgbWFuYWdlbWVudCBjb3JlLCBzaXR0aW5nIHJpZ2h0IHRoZXJlIGluIGB2bWxpbnV4YC4gTm90aGluZyBvdXQgb2YgdGhlIG9yZGluYXJ5LCB0aGF0JiMzOTtzIHdoYXQgSSYjMzk7ZCBleHBlY3QuIEJ1dCB0aGVuIG15IGV5ZSBjYXRjaGVzIGBldmljdF9mb2xpb3NgLiBIbW0sIHdhaXQgYSBtaW51dGUuLi4gdGhhdCYjMzk7cyBjb25kaXRpb25hbGx5IGNvbXBpbGVkISBJdCYjMzk7cyBndWFyZGVkIGJ5IGEgYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAuIE5vdyB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQgY29udGV4dCB0aGlzIGZ1bmN0aW9uIGlzIG9wZXJhdGluZyBpbi4gV2hlcmUgZG9lcyB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGNvbWUgaW50byBwbGF5PyBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgdGhhdCBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBpcyBsb2NhdGVkIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBHb3R0YSB0cmFjZSB0aGlzIGJhY2sgdG8gdGhlIGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgY29kZSBwYXRoIHRoYXQgaW5jbHVkZXMgdGhlIGZvbGlvIGV2aWN0aW9uIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTkwMz1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuLS1cbm1tL3Ztc2Nhbi5jLTkwOC1cbm1tL3Ztc2Nhbi5jOjkwOTojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTkxMC0vKlxuLS1cbm1tL3Ztc2Nhbi5jPTk0MT1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4tLVxubW0vdm1zY2FuLmMtOTQ0LX1cbm1tL3Ztc2Nhbi5jOjk0NTojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTk0Ni1cbi0tXG5tbS92bXNjYW4uYz0yNzgzPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtMjc5NC1cbm1tL3Ztc2Nhbi5jOjI3OTU6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy0yNzk2LVxubW0vdm1zY2FuLmM9Mjc5Nz1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jOjI3OTg6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jLTI3OTktREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG4tLVxubW0vdm1zY2FuLmM9Mjk4Mz1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcbi0tXG5tbS92bXNjYW4uYy0zMDAyLVxubW0vdm1zY2FuLmM6MzAwMzojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXG5tbS92bXNjYW4uYy0zMDA0LVxuLS1cbm1tL3Ztc2Nhbi5jPTMxMTI9dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMzE0MC1cbm1tL3Ztc2Nhbi5jOjMxNDE6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xubW0vdm1zY2FuLmMtMzE0Mi1cbi0tXG5tbS92bXNjYW4uYz02MTA3PWxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcbm1tL3Ztc2Nhbi5jLTYxMDgtXG5tbS92bXNjYW4uYzo2MTA5OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtNjExMC1cbi0tXG5tbS92bXNjYW4uYz02MTIxPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjEyNS1cbm1tL3Ztc2Nhbi5jOjYxMjY6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy02MTI3LVxuLS1cbm1tL3Ztc2Nhbi5jLTYxMzItICogQGxydXZlYzogdGhlIGxydXZlY1xubW0vdm1zY2FuLmM6NjEzMzogKiBAdHlwZTogTFJVIHR5cGUgKG9ubHkgdXNlZCBmb3IgQ09ORklHX0xSVV9HRU4pXG5tbS92bXNjYW4uYy02MTM0LSAqIEBza2lwX3JldHJ5OiB3aGV0aGVyIHNraXAgcmV0cnkuXG4tLVxubW0vdm1zY2FuLmM9NjEzNj1zdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5tbS92bXNjYW4uYy02MTQzLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoZm9saW8sIG5leHQsIGxpc3QsIGxydSkge1xubW0vdm1zY2FuLmM6NjE0NDojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTYxNDUtXHRcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmMtNjE1Ni1cdFx0fVxubW0vdm1zY2FuLmM6NjE1NzojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTYxNTgtXHRcdC8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI1NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExSVSBHZW5lcmF0aW9uIENvZGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgLCBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAgc2NhdHRlcmVkIHRocm91Z2hvdXQuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgYGV2aWN0X2ZvbGlvc2AsIHdoaWNoIGlzICphbHNvKiB1bmRlciB0aGUgYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAgYmxvY2ssIGlzIHNvbWVob3cgaW50ZXJ0d2luZWQgd2l0aCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLiBCdXQgbm8sIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgaXMgdGhlIHN0YW5kYXJkIGFjdGl2ZS9pbmFjdGl2ZSBMUlUgcmVjbGFpbSwgc28gaXQgaXMgc2VwYXJhdGUuCgpIb3dldmVyLCBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYCAqaXRzZWxmKiBpcyBkZWZpbmVkIG91dHNpZGUgdGhlIGNvbmRpdGlvbmFsIGJsb2NrIOKAkyBpdCYjMzk7cyBhZnRlciB0aGUgYCNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL2Agb24gbGluZSA2MTI2LiBJbnRyaWd1aW5nLiBCdXQgd2l0aGluIHRoaXMgZnVuY3Rpb24sIHRoZXJlIGFyZSBzZWN0aW9ucyB0aGF0ICphcmUqIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYENPTkZJR19MUlVfR0VOYC4gSSBzZWUgY29kZSBibG9ja3MgbGlrZSB0aGlzOgoKYGBgYwojaWZkZWYgQ09ORklHX0xSVV9HRU4KCQlERUZJTkVfTUlOX1NFUShscnV2ZWMpOwojZW5kaWYKLi4uCiNpZmRlZiBDT05GSUdfTFJVX0dFTgoJCS8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqLwoJCWlmIChscnV2ZWMtJmd0O2xydWdlbi5lbmFibGVkICZhbXA7JmFtcDsKCQkgICAgbHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHsKCQkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKCQkJZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7CgkJfQojZW5kaWYKYGBgCgpBbmQgdGhlbiBJJiMzOTttIHJlbWluZGVkIHRoYXQgYGV2aWN0X2ZvbGlvc2Agd2FzIG1vZGlmaWVkIGFzIHdlbGwsIGFuZCB0aGF0IGlzIHVuZGVyIHRoZSBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jay4gVGhpcyBpcyBhIGJpdCBjb25mdXNpbmcuIElzIExSVSBnZW5lcmF0aW9uIGV2ZW4gZW5hYmxlZCBieSBkZWZhdWx0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYENPTkZJR19MUlVfR0VOYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcy4gTGV0IG1lIHNlYXJjaCBmb3IgYGNvbmZpZyBMUlVfR0VOYCBpbiBgbW0vS2NvbmZpZ2AgdG8gZ2V0IHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzODg9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxuLS1cbm1tL0tjb25maWctMTM5OC0jIG11bHRpLWdlbiBMUlUge1xubW0vS2NvbmZpZzoxMzk5OmNvbmZpZyBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MDAtXHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MDctXG5tbS9LY29uZmlnOjE0MDg6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDA5LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxMy1cbm1tL0tjb25maWc6MTQxNDpjb25maWcgTFJVX0dFTl9TVEFUU1xubW0vS2NvbmZpZy0xNDE1LVx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MjItXG5tbS9LY29uZmlnOjE0MjM6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG5tbS9LY29uZmlnLTE0MjQtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Mjg2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2NvbmZpZyBvZiBNZW1vcnkgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgMTM5OC4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gWyoqKllvdSB3b3VsZCBhZGQgdGhlIHNwZWNpZmljIHRvcGljIG9yIGZlYXR1cmUgeW91IGFyZSBpbnRlcmVzdGVkIGluIGhlcmUgYmFzZWQgb24geW91ciBleHBlcnRpc2UuIEZvciBleGFtcGxlOiAmIzM0O05VTUEgYmFsYW5jaW5nLCYjMzQ7ICYjMzQ7a2VybmVsIGNvbXBhY3Rpb24sJiMzNDsgJiMzNDttZW1vcnkgaG90cGx1ZywmIzM0OyBldGMuKiZsdDsvc3Ryb25nJmd0O10uIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHZhbHVlcyBmb3IgdGhvc2Ugb3B0aW9ucywgYWxvbmcgd2l0aCBhbnkgcG90ZW50aWFsbHkgcmVsZXZhbnQgY29tbWVudHMuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGNsdWVzIGFib3V0IGhvdyB0aGVzZSBmZWF0dXJlcyBpbnRlcmFjdCB3aXRoIG90aGVycy4gSeKAmW0gdGhpbmtpbmcgSeKAmWxsIHVzZSBteSBrbm93bGVkZ2UgdG8gdHJ5IGFuZCBhbnRpY2lwYXRlIHRoZSBmbG93IG9mIGxvZ2ljIGZyb20gdGhlcmUuIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueXRoaW5nIHJlbGF0ZWQgdG8gWyoqKllvdSB3b3VsZCBhZGQgYSBzcGVjaWZpYyBjb25jZXJuIG9yIGludGVyZXN0IGJhc2VkIG9uIHRoZSBjb250ZXh0LiBGb3IgZXhhbXBsZTogJiMzNDtwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsJiMzNDsgJiMzNDtzZWN1cml0eSBjb25zaWRlcmF0aW9ucywmIzM0OyAmIzM0O3NwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQsJiMzNDsgZXRjLiombHQ7L3N0cm9uZyZndDtdLiBIb3BlZnVsbHksIHRoZSBLY29uZmlnIHdpbGwgaWxsdW1pbmF0ZSBzb21lIG9mIHRob3NlIGRldGFpbHMsIHdoaWNoIGFyZSBvZnRlbiBrZXkuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBpbiB0aGVyZS4gSSYjMzk7bSByZWFkeSB0byBmaW5kIG91dCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM5OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzk4Olx0IyBtdWx0aS1nZW4gTFJVIHtcbjEzOTk6XHRjb25maWcgTFJVX0dFTlxuMTQwMDpcdFx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4xNDAxOlx0XHRkZXBlbmRzIG9uIE1NVVxuMTQwMjpcdFx0IyBtYWtlIHN1cmUgZm9saW8tXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXG4xNDAzOlx0XHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcbjE0MDQ6XHRcdGhlbHBcbjE0MDU6XHRcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXG4xNDA2Olx0XHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cbjE0MDc6XHRcbjE0MDg6XHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXG4xNDA5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4xNDEwOlx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MTE6XHRcdGhlbHBcbjE0MTI6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxuMTQxMzpcdFxuMTQxNDpcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXG4xNDE1Olx0XHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuMTQxNjpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDE3Olx0XHRoZWxwXG4xNDE4Olx0XHQgIERvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0c1xuMTQxOTpcdFx0ICBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxuMTQyMDpcdFxuMTQyMTpcdFx0ICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBvdmVyaGVhZC5cbjE0MjI6XHRcbjE0MjM6XHRjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbjE0MjQ6XHRcdGRlZl9ib29sIHlcbjE0MjU6XHRcdGRlcGVuZHMgb24gTFJVX0dFTiBcdTAwMjZcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXG4xNDI2Olx0IyB9XG4xNDI3Olx0XG4xNDI4Olx0Y29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXG4xNDI5Olx0XHRib29sXG4xNDMwOlx0XHRkZXBlbmRzIG9uICFTVEFDS19HUk9XU1VQXG4xNDMxOlx0XG4xNDMyOlx0Y29uZmlnIElPTU1VX01NX0RBVEFcbjE0MzM6XHRcdGJvb2xcbjE0MzQ6XHRcbjE0MzU6XHRjb25maWcgRVhFQ01FTVxuMTQzNjpcdFx0Ym9vbFxuMTQzNzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE0MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDg3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBEZWVwIERpdmUgaW50byBNdWx0aS1HZW4gTFJVIGFuZCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIE11bHRpLUdlbiBMUlUgc3R1ZmYuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19MUlVfR0VOYCBpcyB0aGUga2V5IGVuYWJsZXIsIGFuZCBpdCYjMzk7cyBlc3NlbnRpYWwgYmVjYXVzZSBpdCBlbmFibGVzIHRoaW5ncyBsaWtlIGBldmljdF9mb2xpb3NgLCB3aGljaCBJIHNlZSBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19MUlVfR0VOYCBpcyBzZXQuIEFsc28sIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soKWAgaGFzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGBDT05GSUdfTFJVX0dFTmAuIEkmIzM5O20gc3RhcnRpbmcgdG8gZ2V0IHRoZSBwaWN0dXJlLiBFdmVuIHRob3VnaCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGlzIGNvbXBpbGVkIHJlZ2FyZGxlc3MsIHdoZW4gYExSVV9HRU5gIGlzIGVuYWJsZWQgYXQgcnVudGltZSwgaXQgY2FsbHMgYGxydV9nZW5fc2hyaW5rX25vZGUoKWAgaW5zdGVhZCwgc28gY2xlYXJseSBgQ09ORklHX0xSVV9HRU5gIGRyaXZlcyB0aGUgTUdMUlUgYmVoYXZpb3IuCgpSaWdodCwgc28gdG8gbWFrZSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHRoaXMsIGVuYWJsaW5nIGBMUlVfR0VOYCBpcyAqcmVxdWlyZWQqIGZvciBib3RoIGBldmljdF9mb2xpb3NgIGFuZCB0aGUgTUdMUlUtc3BlY2lmaWMgY29kZSB3aXRoaW4gYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpYC4gSXTigJlzIGxpa2UgdGhlIGZvdW5kYXRpb24gZm9yIHRoaXMgd2hvbGUgZmVhdHVyZS4gT2theSwgc2hvdWxkIHRoaXMgYmUgaW4gYEVuYWJsZUNvbmZpZ3NgPwoKWWVzLCBgTFJVX0dFTmAgZW5hYmxlcyBib3RoIGBldmljdF9mb2xpb3NgIGFuZCB0aGUgYENPTkZJR19MUlVfR0VOYCBwYXRocyBpbiBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKClgLgoKSG9sZCBvbiwgaXMgYExSVV9HRU5gIGV2ZW4gZW5hYmxlZCBieSBkZWZhdWx0PyBDaGVja2luZyB0aGUgY29uZmlnLCBpdOKAmXMgYSBib29sZWFuIHdpdGggbm8gZGVmYXVsdC4gVGhhdCBtZWFucyBpdCBoYXMgdG8gYmUgZXhwbGljaXRseSBzZXQuIFNvLCBgTFJVX0dFTmAgKGFuZCBwb3RlbnRpYWxseSBgTFJVX0dFTl9FTkFCTEVEYCkgaXMgbmVlZGVkIHRvIGV2ZW4gY29tcGlsZSBhbmQgcmVhY2ggYGV2aWN0X2ZvbGlvc2AhIFRoaXMgaXMgY3JpdGljYWwuCgpBbHJpZ2h0LCB3aGF0IG90aGVyIGNvbmZpZ3MgYXJlIGludm9sdmVkPyBMZXQmIzM5O3Mgc2VlIHdoYXQgYExSVV9HRU5gIGRlcGVuZHMgb24uIEl0IGxvb2tzIGxpa2UgaXQgbmVlZHMgYE1NVWAgYW5kIGEgYml0IG9mIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzdHVmZiAoYDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBgKS4gT24gYW1kNjQsIHRoYXQmIzM5O3Mgbm90IGEgY29uY2Vybi4gU28sIGBMUlVfR0VOYCBpcyB0aGUgY29uZmlnIG9wdGlvbiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuCgpOb3csIGFib3V0IEZvY3VzU3ltYm9scy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcG9ydGFudCBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWU6CgoxLiAgYHNocmlua19pbmFjdGl2ZV9saXN0YCAtIFRoaXMgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYG1tL3Ztc2Nhbi5jYCB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQgdG8gaGFuZGxlIGNsZWFuIGZvbGlvcy4KMi4gIGBldmljdF9mb2xpb3NgIC0gQWxzbyBpbiBgbW0vdm1zY2FuLmNgLCBhbmQgaXQmIzM5O3MgYmVlbiBhbHRlcmVkIHRvIHVzZSBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYC4KMy4gIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgIC0gQW5kIGZpbmFsbHksIGEgbmV3IHN0YXRpYyBmdW5jdGlvbiBpbiBgbW0vdm1zY2FuLmNgLgoKV2FpdCwgYXJlIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnM/IFllcywgdGhleSBhcmUhCgpgc3RhdGljIHZvaWQgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKC4uLilgCmBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCguLi4pYApgc3RhdGljIGludCBldmljdF9mb2xpb3MoLi4uKWAKCkFyZSB0aGVzZSBmdW5jdGlvbnMgaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIG9yIGRvIHRoZXkgZXhpc3QgYXMgYWN0dWFsIHN5bWJvbHM/IEkgbmVlZCB0byBrbm93IHRoZWlyIGNhbGxlcnMuIFRoYXTigJlzIHdoZXJlIHRoZSAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7IGd1aWRhbmNlIGNvbWVzIGluIGhhbmR5LiBJdCBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIGNvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyBpbiBoZWFkZXJzICguaCkgYW5kIHRob3NlIGRlZmluZWQgaW4gLmMgZmlsZXMuIFRoZSBndWlkYW5jZSBzdWdnZXN0cyBmb2N1c2luZyBvbiAqbm9uLXN0YXRpYyogY2FsbGVyIGZ1bmN0aW9ucyB0aGF0IGV4ZXJjaXNlIHRoZXNlIGlubGluZSBoZWxwZXJzLgoKU28sIHNpbmNlIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGluIGEgYC5jYCBmaWxlLCB0aGV5ICp1c3VhbGx5KiBoYXZlIHN5bWJvbHMsIGVzcGVjaWFsbHkgaW4gS0FTQU4vZnV6emluZyBidWlsZHMsIGxpa2UgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYGV2aWN0X2ZvbGlvc2AuIEkgd2lsbCBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AgaXMgaW5saW5lZCBieSBHQ0MuIEhvd2V2ZXIsIEV2ZW4gaWYgaXQmIzM5O3MgaW5saW5lZCwgSSBjYW4gc3BlY2lmeSB0aGUgZnVuY3Rpb25zIEkmIzM5O20gaW50ZXJlc3RlZCBpbiwgb3IgdGhlaXIgZGlyZWN0IGNhbGxlcnMgaWYgYXBwcm9wcmlhdGUhCgpJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgY2FsbGVycyBvZiBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYCBpbiBgbW0vdm1zY2FuLmNgLiBUaGlzIGlzIHRoZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19pbmFjdGl2ZV9saXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9MjAyNT1zdGF0aWMgdm9pZCBoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2sodW5zaWduZWQgbG9uZyBucl90YWtlbixcbi0tXG5tbS92bXNjYW4uYy0yMDYzLS8qXG5tbS92bXNjYW4uYzoyMDY0OiAqIHNocmlua19pbmFjdGl2ZV9saXN0KCkgaXMgYSBoZWxwZXIgZm9yIHNocmlua19ub2RlKCkuICBJdCByZXR1cm5zIHRoZSBudW1iZXJcbm1tL3Ztc2Nhbi5jLTIwNjUtICogb2YgcmVjbGFpbWVkIHBhZ2VzXG5tbS92bXNjYW4uYy0yMDY2LSAqL1xubW0vdm1zY2FuLmM6MjA2NzpzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG5tbS92bXNjYW4uYy0yMDY4LVx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jPTIzMTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbi0tXG5tbS92bXNjYW4uYy0yMzI1LVxubW0vdm1zY2FuLmM6MjMyNjpcdHJldHVybiBzaHJpbmtfaW5hY3RpdmVfbGlzdChucl90b19zY2FuLCBscnV2ZWMsIHNjLCBscnUpO1xubW0vdm1zY2FuLmMtMjMyNy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTYxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBzaHJpbmtfbGlzdGAgYW5kIGBldmljdF9mb2xpb3NgIENhbGxlcnMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYHNocmlua19saXN0YCBhbmQgYGV2aWN0X2ZvbGlvc2AuIFRoZSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIHRyYWNlIHRoZWlyIGNhbGwgc2l0ZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aG8qIGlzIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIGFuZCwganVzdCBhcyBpbXBvcnRhbnRseSwgKndoeSouIEtub3dpbmcgdGhlIHVwc3RyZWFtIGxvZ2ljIHdpbGwgcHJvdmlkZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBpbnRlcnByZXQgd2hhdCBpcyBoYXBwZW5pbmcgaW5zaWRlLiBXaGF0IG1vZHVsZXMsIHN1YnN5c3RlbXMsIG9yIHRocmVhZHMgYXJlIHJlbHlpbmcgb24gdGhlaXIgYmVoYXZpb3I/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgY3J1Y2lhbCBwYXJ0IG9mIG1lbW9yeSBtYW5hZ2VtZW50IG9yIHNvbWV0aGluZyBhbmNpbGxhcnk/IFRoaXMgaW5mb3JtYXRpb24gaXMgZXNzZW50aWFsIGZvciBldmVuIGdldHRpbmcgc3RhcnRlZCBpbiB1bmRlcnN0YW5kaW5nIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHBvdGVudGlhbCBidWdzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX2xpc3RcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03Nj1zdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbm1tL3Ztc2Nhbi5jOjc3Olx0LyogSG93IG1hbnkgcGFnZXMgc2hyaW5rX2xpc3QoKSBzaG91bGQgcmVjbGFpbSAqL1xubW0vdm1zY2FuLmMtNzgtXHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW07XG4tLVxubW0vdm1zY2FuLmM9MjI4Mj11bnNpZ25lZCBsb25nIHJlY2xhaW1fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcbi0tXG5tbS92bXNjYW4uYy0yMzE0LVxubW0vdm1zY2FuLmM6MjMxNTpzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfbGlzdChlbnVtIGxydV9saXN0IGxydSwgdW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxubW0vdm1zY2FuLmMtMjMxNi1cdFx0XHRcdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jPTYxNjg9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYyMTYtXG5tbS92bXNjYW4uYzo2MjE3Olx0XHRcdFx0bnJfcmVjbGFpbWVkICYjNDM7PSBzaHJpbmtfbGlzdChscnUsIG5yX3RvX3NjYW4sXG5tbS92bXNjYW4uYy02MjE4LVx0XHRcdFx0XHRcdFx0ICAgIGxydXZlYywgc2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY1NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQsIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGNvbmNlcHQgYW5kIGFzc3VtaW5nIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uc2lkZXJpbmcgdGhlIGBldmljdF9mb2xpb3NgIEZ1bmN0aW9uIENhbGwqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHNwZWNpZmljYWxseSwgdGhlIGNhbGxzIHRvIGBldmljdF9mb2xpb3NgLiBUaGlzIGZ1bmN0aW9uIGNhbGwgaXMga2V5IGhlcmUuIEVzc2VudGlhbGx5LCB3aGVuZXZlciBJIHNlZSBgZXZpY3RfZm9saW9zYCwgSSBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCBtZW1vcnkgcHJlc3N1cmUgYW5kIGNhY2hlIG1hbmFnZW1lbnQuIEkmIzM5O20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1lLCBpdCYjMzk7cyBhYm91dCByZWNsYWltaW5nIHBoeXNpY2FsIG1lbW9yeSBvY2N1cGllZCBieSBwYWdlIGZyYW1lcyAoZm9saW9zKSB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggYSBjYWNoZSBvZiBzb21lIHNvcnQuCgpUaGUgY29udGV4dCBvZiAqd2hlbiogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgaXMgY3J1Y2lhbC4gSXMgaXQgdHJpZ2dlcmVkIGJ5IGV4cGxpY2l0IHJlcXVlc3RzIGZvciBtZW1vcnkgcmVjbGFtYXRpb24sIGxpa2UgYSBsb3cgbWVtb3J5IHNpZ25hbCBmcm9tIHRoZSBPUz8gT3IsIGlzIGl0IG1vcmUgcHJvYWN0aXZlLCBwYXJ0IG9mIGEgYmFja2dyb3VuZCBwcm9jZXNzIHRyeWluZyB0byBtYWludGFpbiBhIGRlc2lyZWQgbGV2ZWwgb2YgZnJlZSBtZW1vcnk/IElzIGl0IHJlYWN0aW5nIHRvIHRoZSB1c2FnZSBvZiBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFuZCByZWFjdGluZyBiYXNlZCBvbiBob3cgbWVtb3J5IGlzIHV0aWxpemVkIGJ5IG90aGVycz8gRWl0aGVyIHdheSBpdCB3aWxsIGRpY3RhdGUgd2hhdCB0cmFkZS1vZmZzIGFyZSBiZWluZyBjb25zaWRlcmVkLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyB0aGUgZXZpY3Rpb24uIElzIGl0IExSVS1iYXNlZD8gSXMgaXQgdGllZCB0byBzcGVjaWZpYyB0eXBlcyBvZiBtZW1vcnkgcGFnZXMgKGUuZy4sIGFub255bW91cyBwYWdlcywgZmlsZS1iYWNrZWQgcGFnZXMsIG9yIGh1Z2UgcGFnZXMpPyBXaGF0JiMzOTtzIHRoZSBldmljdGlvbiBwb2xpY3k/IElzIHRoZXJlIGEgZmFpcm5lc3MgY29uc2lkZXJhdGlvbj8KCkJleW9uZCB0aGF0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEV2aWN0aW5nIHBhZ2VzIHRvIGRpc2sgKGlmIGl0JiMzOTtzIG5vdCBhIG1lbW9yeS1vbmx5IGNhY2hlKSBpcyBhIGNvc3RseSBvcGVyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb3N0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGV2aWN0aW9uLiBIb3cgYXJlIHRoZSBmb2xpbyBjb250ZW50cyBoYW5kbGVkPyBBcmUgdGhlcmUgZGlydHkgcGFnZXM/IFdoYXQgYWJvdXQgVExCIGludmFsaWRhdGlvbj8gSXMgdGhlIGV2aWN0aW9uIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cz8KClRoZSBvdmVyYWxsIGdvYWwgb2YgYGV2aWN0X2ZvbGlvc2AsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgc3lzdGVtIGNvbXBvbmVudHMsIGlzIHdoYXQgSSBuZWVkIHRvIHNlZSB0byBrbm93IGhvdyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIG9yIHRvIGRldGVybWluZSBpZiB0aGUgbG9naWMgaXMgc2FmZS4KClNvIHRoZSBjYWxsIGl0c2VsZiwgYW5kIGFsbCB0aGUgc3Vycm91bmRpbmcgbG9naWMgd2lsbCBndWlkZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0mIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V2aWN0X2ZvbGlvc1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ5OTU9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy01MDM4LVxubW0vdm1zY2FuLmM6NTAzOTpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL3Ztc2Nhbi5jLTUwNDAtXHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jPTUxOTc9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MjIwLVx0XHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjUyMjE6XHRcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcbm1tL3Ztc2Nhbi5jLTUyMjItXHRcdGlmICghZGVsdGEpXG4tLVxubW0vdm1zY2FuLmM9NTgzOD1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy01ODU4LVx0XHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXHUwMDNlbnJfcmVjbGFpbWVkLCBNQVhfTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjU4NTk6XHRcdGlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKSlcbm1tL3Ztc2Nhbi5jLTU4NjAtXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTA0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNjI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIFRoZXNlIFBhdGNoIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBwYXRjaCBoaWdobGlnaHRzIG1vZGlmaWNhdGlvbnMgdG8gYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYGV2aWN0X2ZvbGlvc2AsIGFuZCBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlc2UgZnVuY3Rpb25zIGZhbGwgaW50byB0aGUgJiMzNDt1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aCYjMzQ7IGNhdGVnb3J5LCBhcyBkZWZpbmVkIGluIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIFdlIGRlZmluaXRlbHkgZG9uJiMzOTt0IHdhbnQgdG8gZGlsdXRlIG91ciBmdXp6aW5nIGVmZm9ydCBieSBpbmNvcnJlY3RseSBjbGFzc2lmeWluZyB0ZXN0cy4KCkkmIzM5O20gcHJldHR5IGNvbmZpZGVudCB0aGV5IGRvbiYjMzk7dC4gVGhlc2UgYXJlIHNwZWNpZmljIG1lbW9yeSByZWNsYWltIGZ1bmN0aW9ucywgYW5kIHRoZXkmIzM5O3JlIG5vdCBnZW5lcmFsIGFsbG9jYXRvcnMgb3IgZGVhbGxvY2F0b3JzLiBUaGV5IHJ1biB1bmRlciBtZW1vcnkgcHJlc3N1cmUgc2NlbmFyaW9zLCBsaWtlIGtzd2FwZCwgZGlyZWN0IHJlY2xhaW0sIGNvbXBhY3Rpb24sIGFuZCBtYWR2aXNlLiBMaXN0aW5nIHRoZXNlIGZ1bmN0aW9ucyAqc3BlY2lmaWNhbGx5KiB0YXJnZXRzIHRoZSBsb2dpYyBhbHRlcmVkIG9yIGFkZGVkIGJ5IHRoZSBwYXRjaCwgc28gd2UmIzM5O3JlIGdvb2QgdGhlcmUuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYENPTkZJR19MUlVfR0VOYCBqdW1wcyBvdXQuIEEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGBldmljdF9mb2xpb3NgIGFuZCBwYXJ0cyBvZiBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYCBhcmUgZ2F0ZWQgYnkgdGhpcyBjb25maWcuIFdpdGhvdXQgYExSVV9HRU5gLCBgZXZpY3RfZm9saW9zYCBpc24mIzM5O3QgY29tcGlsZWQgYXQgYWxsLCBhbmQgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgIGlzIG9taXR0ZWQuIFdpdGggYExSVV9HRU5gIGVuYWJsZWQsIGFsbCB0aHJlZSBmdW5jdGlvbnMgYXJlIGluY2x1ZGVkLgoKSG9sZCBvbiwgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIGFsc28gc2VlbXMgcmVsZXZhbnQuIERpZ2dpbmcgYSBiaXQsIGl0IGxvb2tzIGxpa2UgYHNocmlua19pbmFjdGl2ZV9saXN0YCBydW5zIHdoZXRoZXIgTUdMUlUgaXMgZW5hYmxlZCBvciBub3QsIGZvciBub24tTUdMUlUgcGF0aHMsIHdoaWxlIGBldmljdF9mb2xpb3NgIHJ1bnMgd2hlbiBNR0xSVSAqaXMqIGFjdGl2ZS4gQnV0LCBpZiBgTFJVX0dFTmAgaXMgZW5hYmxlZCwgYm90aCBmdW5jdGlvbnMgYXJlIGNvbXBpbGVkLiBTbywgd2UgZGVmaW5pdGl2ZWx5IG5lZWQgYExSVV9HRU5gIHRvIGNvbXBpbGUgYWxsIHRoZSBjb2RlIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4KCkZpbmFsbHksIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGNoZWNrIHRoZSBtYWtlZmlsZXMgdG8gc2VlIGlmIGB2bXNjYW4uY2AgaXMgZ3VhcmRlZCBieSBhbnkgb3RoZXIgY29uZmlncy4gSXQgbG9va3MgbGlrZSBpdCBpcyBjb21waWxlZCBpbnRvIG9iai15IGluIGBtbS9NYWtlZmlsZWAuIFdlIGNhbiBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bXNjYW5cXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTUxPW9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxubW0vTWFrZWZpbGUtNTItXHRcdFx0ICAgbWFjY2Vzcy5vIHBhZ2Utd3JpdGViYWNrLm8gZm9saW8tY29tcGF0Lm8gXFxcbm1tL01ha2VmaWxlOjUzOlx0XHRcdCAgIHJlYWRhaGVhZC5vIGZvbGlvLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXG5tbS9NYWtlZmlsZS01NC1cdFx0XHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzIwCgkJCQkJCQlvdXRwdXQ6IDE0OQoJCQkJCQkJdGhvdWdodHM6IDQxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFJlcXVpcmVtZW50cyoqCgpPa2F5LCBzbyBgdm1zY2FuLm9gIGlzIGFsd2F5cyBidWlsdCwgdGhhdCYjMzk7cyBhIGdpdmVuIChgb2JqLXlgKS4gTm93LCBgQ09ORklHX0xSVV9HRU5gIGlzIHRoZSBrZXkgS2NvbmZpZyBmbGFnIGhlcmUsIHNpbmNlIGl0IGVuYWJsZXMgYGV2aWN0X2ZvbGlvc2AgYW5kIHRoZSBNR0xSVSBwYXJ0cyB3aXRoaW4gYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AuIE15IGZpcnN0IHRob3VnaHQgd2FzIHRvIGRvdWJsZS1jaGVjayBpZiB3ZSBhY3R1YWxseSAqbmVlZCogYExSVV9HRU5fRU5BQkxFRGAsIGJ1dCBxdWlja2x5IHJlYWxpemVkIHRoYXQgZXZlbiBpZiB0aGF0IHdhc24mIzM5O3Qgc2V0LCBNR0xSVSBjYW4gc3RpbGwgYmUgZW5hYmxlZCB0aHJvdWdoIGAvc3lzL2tlcm5lbC9tbS9scnVfZ2VuL2VuYWJsZWRgLiBIb3dldmVyLCBpZiB0aGUgdXNlciBldmVuIGVuYWJsZXMgYENPTkZJR19MUlVfR0VOYCB0aGUgY29kZSB3aWxsIGNvbXBpbGUuIEFscmlnaHQsIHRoYXQmIzM5O3MgdGhlIG1haW4gcG9pbnQuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIHNob3VsZCBiZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFsbCBjcnlzdGFsIGNsZWFyIGZvciB0aGUgZnV6emluZyBhbmFseXNpcy4KCiogICBgV29ydGhGdXp6aW5nYDogRGVmaW5pdGVseSBgdHJ1ZWAuIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIGNvcmUgcGFnZSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AuIEl0JiMzOTtzIGV4dHJhY3RpbmcgdGhpcyBuZXcgaGVscGVyLCBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKClgLCBhbmQgcmV1c2luZyBpdCwgd2hpY2ggaXMgdGhlIGNvcm5lcnN0b25lIGZvciB0aGUgTUdMUlUgbW9kaWZpY2F0aW9ucywgc28gd2UgYXJlIGFmZmVjdGluZyBpbXBvcnRhbnQgcGF0aHMgYW5kIHJlY2xhaW0gYWNjb3VudGluZyB0aGF0JiMzOTtzICpkZWZpbml0ZWx5KiByZWFjaGFibGUuIFRoZSBuZXcgcmV0cnkgbG9vcCBpbiBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGlzIGFsc28gY3JpdGljYWwgaGVyZS4KKiAgIGBSZWFzb25pbmdgOiBUaGUgZXhwbGFuYXRpb24gaGFzIHRvIGJlIGNsZWFyOiB0aGUgcGF0Y2ggYWx0ZXJzIHBhZ2UgcmVjbGFpbSBieSBleHRyYWN0aW5nIGFuZCByZXVzaW5nIGEgaGVscGVyIHRvIGZpbmQgZm9saW9zIHdyaXR0ZW4gYmFjayBkdXJpbmcgcmVjbGFpbSBpbiBib3RoIE1HTFJVIGFuZCB0cmFkaXRpb25hbCBMUlUsIGFsc28gaW50cm9kdWNpbmcgcmV0cmllcywgd2hpY2ggaXMgY3JpdGljYWwuCiogICBgRm9jdXNTeW1ib2xzYDogSSYjMzk7bSBnb2luZyB0byBsaXN0IGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgLCBhbmQgYGV2aWN0X2ZvbGlvc2AgYmVjYXVzZSB0aGV5IGFyZSB3aGVyZSB0aGUgcmVhbCB3b3JrIG9mIHRoZSBuZXcgbG9naWMgaXMgYW5kIHRoZXkgYXJlbiYjMzk7dCB1YmlxdWl0b3VzIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBJIG5lZWQgdG8gc3BlY2lmeSBgTFJVX0dFTmAuCgpPa2F5LCBiZWZvcmUgc2VuZGluZyB0aGlzIG9mZiwgbGV0JiMzOTtzIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHBlcmZlY3Q6CgoqICAgYFdvcnRoRnV6emluZ2A6IENoZWNrZWQuIGB0cnVlYC4KKiAgIGBGb2N1c1N5bWJvbHNgOiBZZXAsIGZvY3VzZWQgb24gdGhlIGFsdGVyZWQgbG9naWMuCiogICBgRW5hYmxlQ29uZmlnc2A6IFRoZSBrZXkgY29uZmlnLCAmIzM0O0xSVV9HRU4mIzM0Oy4KKiAgIGBSZWFzb25pbmdgOiBDb25jaXNlIGFuZCBhY2N1cmF0ZS4KCkV2ZXJ5dGhpbmcgbG9va3MgZ29vZC4gVGltZSB0byBydW4gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaHJpbmtfaW5hY3RpdmVfbGlzdCYjMzQ7LAogICAgJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAgICYjMzQ7ZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBtbS92bXNjYW4uYyBieSByZWZhY3RvcmluZyBmb2xpbyB3cml0ZWJhY2sgZGV0ZWN0aW9uIGludG8gYSBzaGFyZWQgaGVscGVyIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soKWAsIHVwZGF0aW5nIGBldmljdF9mb2xpb3MoKWAgKE11bHRpLUdlbiBMUlUpLCBhbmQgaW50cm9kdWNpbmcgYSByZXRyeSBtZWNoYW5pc20gZm9yIHdyaXR0ZW4tYmFjayBmb2xpb3MgaW4gYHNocmlua19pbmFjdGl2ZV9saXN0KClgIGFsb25nIHdpdGggdXBkYXRlZCBpc29sYXRpb24gYWNjb3VudGluZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSwgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aHMgYW5kIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nocmlua19pbmFjdGl2ZV9saXN0JiMzNDssCiAgICAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7LAogICAgJiMzNDtmaW5kX2ZvbGlvc193cml0dGVuX2JhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSByZWNsYWltIGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IHJlZmFjdG9yaW5nIGZvbGlvIHdyaXRlYmFjayBkZXRlY3Rpb24gaW50byBhIHNoYXJlZCBoZWxwZXIgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpYCwgdXBkYXRpbmcgYGV2aWN0X2ZvbGlvcygpYCAoTXVsdGktR2VuIExSVSksIGFuZCBpbnRyb2R1Y2luZyBhIHJldHJ5IG1lY2hhbmlzbSBmb3Igd3JpdHRlbi1iYWNrIGZvbGlvcyBpbiBgc2hyaW5rX2luYWN0aXZlX2xpc3QoKWAgYWxvbmcgd2l0aCB1cGRhdGVkIGlzb2xhdGlvbiBhY2NvdW50aW5nLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlLCByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBwYXRocyBhbmQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGZvbGlvIHdyaXRlYmFjayByZXRyeSBsb2dpYyBpbiB0aGUgcGFnZSByZWNsYWltIHBhdGggKG1tL3Ztc2Nhbi5jKSBieSBleHRyYWN0aW5nIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpIGZyb20gZXZpY3RfZm9saW9zKCkgYW5kIHVzaW5nIGl0IHRvIHJldHJ5IGNsZWFuIGZvbGlvcyBpbiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpLiBBbGwgbmV3IGFuZCBtb2RpZmllZCBsb2NhbCB2YXJpYWJsZXMgKGNsZWFuX2xpc3QsIHRvdGFsX3JlY2xhaW1lZCwgaXNvbGF0ZWQsIHNraXBfcmV0cnkpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIHRoZSByZWNsYWltX3N0YXQgc3RydWN0dXJlIGlzIG1lbXNldCB0byB6ZXJvIGluc2lkZSBzaHJpbmtfZm9saW9fbGlzdCgpIG9uIGVhY2ggaXRlcmF0aW9uLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3Nlcy4gQW55IHBvdGVudGlhbCByZWNsYWltIGlzc3VlcyAoZS5nLiBsaXN0IGNvcnJ1cHRpb24sIHJlZmNvdW50IG9yIHBhZ2UgZmxhZyBidWdzKSB3b3VsZCBiZSBjYXVnaHQgYnkgYXNzZXJ0aW9ucyBvciBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjIyZTYxODI0YmEzZjQ5NzAxMGViNDExOGFiZWE3NjNlNDdkMGQ4NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDEwOjIxOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCA1MzU0ZWI4ZDNhMDdiLi44MGNjZDUxNmVmMzgwIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMTgxLDYgJiM0MzsxODEsMTAgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7CiAJc3RydWN0IHJlY2xhaW1fc3RhdGUgcmVjbGFpbV9zdGF0ZTsKIH07CiAKJiM0MztzdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpjbGVhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAomIzQzOwkJCQkgICAgIGludCB0eXBlLCBib29sIHNraXBfcmV0cnkpOwomIzQzOwogI2lmZGVmIEFSQ0hfSEFTX1BSRUZFVENIVwogc3RhdGljIGlubGluZSB2b2lkIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlzdHJ1Y3QgbGlzdF9oZWFkICpiYXNlKQpAQCAtMjA2NSwxNCAmIzQzOzIwNjksMTYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCQllbnVtIGxydV9saXN0IGxydSkKIHsKIAlMSVNUX0hFQUQoZm9saW9fbGlzdCk7CiYjNDM7CUxJU1RfSEVBRChjbGVhbl9saXN0KTsKIAl1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWQ7Ci0JdW5zaWduZWQgaW50IG5yX3JlY2xhaW1lZCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBucl90YWtlbjsKJiM0MzsJdW5zaWduZWQgaW50IG5yX3JlY2xhaW1lZCwgdG90YWxfcmVjbGFpbWVkID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl90YWtlbiwgaXNvbGF0ZWQ7CiAJc3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0OwogCWJvb2wgZmlsZSA9IGlzX2ZpbGVfbHJ1KGxydSk7CiAJZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTsKIAlib29sIHN0YWxsZWQgPSBmYWxzZTsKJiM0MzsJYm9vbCBza2lwX3JldHJ5ID0gZmFsc2U7CiAKIAl3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHsKIAkJaWYgKHN0YWxsZWQpCkBAIC0yMTA0LDI1ICYjNDM7MjExMCw0MiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCiAJaWYgKG5yX3Rha2VuID09IDApCiAJCXJldHVybiAwOwogCiYjNDM7CWlzb2xhdGVkID0gbnJfdGFrZW47CiYjNDM7cmV0cnk6CiAJbnJfcmVjbGFpbWVkID0gc2hyaW5rX2ZvbGlvX2xpc3QoJmFtcDtmb2xpb19saXN0LCBwZ2RhdCwgc2MsICZhbXA7c3RhdCwgZmFsc2UsCiAJCQkJCSBscnV2ZWNfbWVtY2cobHJ1dmVjKSk7CiYjNDM7CXRvdGFsX3JlY2xhaW1lZCAmIzQzOz0gbnJfcmVjbGFpbWVkOwomIzQzOwomIzQzOwkvKiBSZXRyeSBwYXNzIGlzIG9ubHkgbWVhbnQgZm9yIGNsZWFuIGZvbGlvcyB3aXRob3V0IG5ldyBpc29sYXRpb24gKi8KJiM0MzsJaWYgKGlzb2xhdGVkKQomIzQzOwkJaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsICZhbXA7c3RhdCk7CiYjNDM7CXRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LSZndDtub2RlX2lkLAomIzQzOwkJCW5yX3NjYW5uZWQsIG5yX3JlY2xhaW1lZCwgJmFtcDtzdGF0LCBzYy0mZ3Q7cHJpb3JpdHksIGZpbGUpOwomIzQzOwomIzQzOwlmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soJmFtcDtmb2xpb19saXN0LCAmYW1wO2NsZWFuX2xpc3QsIGxydXZlYywgZmlsZSwgc2tpcF9yZXRyeSk7CiAKIAltb3ZlX2ZvbGlvc190b19scnUoJmFtcDtmb2xpb19saXN0KTsKIAogCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR0RFTU9URV9LU1dBUEQgJiM0MzsgcmVjbGFpbWVyX29mZnNldChzYyksCiAJCQkJCXN0YXQubnJfZGVtb3RlZCk7Ci0JbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyBmaWxlLCAtbnJfdGFrZW4pOwogCWl0ZW0gPSBQR1NURUFMX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKTsKIAltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgaXRlbSwgbnJfcmVjbGFpbWVkKTsKIAltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICYjNDM7IGZpbGUsIG5yX3JlY2xhaW1lZCk7Ci0JaWYgKG5yX3NjYW5uZWQgJmd0OyBucl9yZWNsYWltZWQpCiYjNDM7CiYjNDM7CWlmICghbGlzdF9lbXB0eSgmYW1wO2NsZWFuX2xpc3QpKSB7CiYjNDM7CQlsaXN0X3NwbGljZV9pbml0KCZhbXA7Y2xlYW5fbGlzdCwgJmFtcDtmb2xpb19saXN0KTsKJiM0MzsJCXNraXBfcmV0cnkgPSB0cnVlOwomIzQzOwkJLyogUmV0cnkgZm9saW9zIHdlcmUgYWxyZWFkeSBpc29sYXRlZCBhbmQgYWNjb3VudGVkIGFib3ZlICovCiYjNDM7CQlpc29sYXRlZCA9IDA7CiYjNDM7CQlnb3RvIHJldHJ5OwomIzQzOwl9CiYjNDM7CiYjNDM7CW1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgZmlsZSwgLW5yX3Rha2VuKTsKJiM0MzsJaWYgKG5yX3NjYW5uZWQgJmd0OyB0b3RhbF9yZWNsYWltZWQpCiAJCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IGZpbGUsCi0JCQkJIG5yX3NjYW5uZWQgLSBucl9yZWNsYWltZWQpOwomIzQzOwkJCQkgbnJfc2Nhbm5lZCAtIHRvdGFsX3JlY2xhaW1lZCk7CiAKLQloYW5kbGVfcmVjbGFpbV93cml0ZWJhY2sobnJfdGFrZW4sIHBnZGF0LCBzYywgJmFtcDtzdGF0KTsKLQl0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19pbmFjdGl2ZShwZ2RhdC0mZ3Q7bm9kZV9pZCwKLQkJCW5yX3NjYW5uZWQsIG5yX3JlY2xhaW1lZCwgJmFtcDtzdGF0LCBzYy0mZ3Q7cHJpb3JpdHksIGZpbGUpOwotCXJldHVybiBucl9yZWNsYWltZWQ7CiYjNDM7CXJldHVybiB0b3RhbF9yZWNsYWltZWQ7CiB9CiAKIC8qCkBAIC01MDE4LDggJiM0Mzs1MDQxLDYgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiB7CiAJTElTVF9IRUFEKGxpc3QpOwogCUxJU1RfSEVBRChjbGVhbik7Ci0Jc3RydWN0IGZvbGlvICpmb2xpbzsKLQlzdHJ1Y3QgZm9saW8gKm5leHQ7CiAJZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtOwogCXN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDsKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrOwpAQCAtNTA1OCwyNiAmIzQzOzUwNzksNyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCXR5cGVfc2Nhbm5lZCwgcmVjbGFpbWVkLCAmYW1wO3N0YXQsIHNjLSZndDtwcmlvcml0eSwKIAkJCXR5cGUgPyBMUlVfSU5BQ1RJVkVfRklMRSA6IExSVV9JTkFDVElWRV9BTk9OKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGZvbGlvLCBuZXh0LCAmYW1wO2xpc3QsIGxydSkgewotCQlERUZJTkVfTUlOX1NFUShscnV2ZWMpOwotCi0JCS8qIG1vdmVfZm9saW9zX3RvX2xydSgpIGN1bGxzIHVuZXZpY3RhYmxlIGZvbGlvcyB2aWEgZm9saW9fcHV0YmFja19scnUoKSAqLwotCQlpZiAoIWZvbGlvX2V2aWN0YWJsZShmb2xpbykpCi0JCQljb250aW51ZTsKLQotCQkvKiByZXRyeSBmb2xpb3MgdGhhdCBtYXkgaGF2ZSBtaXNzZWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi8KLQkJaWYgKCFza2lwX3JldHJ5ICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb19tYXBwZWQoZm9saW8pICZhbXA7JmFtcDsKLQkJICAgICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHsKLQkJCWxpc3RfbW92ZSgmYW1wO2ZvbGlvLSZndDtscnUsICZhbXA7Y2xlYW4pOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi8KLQkJaWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7Ci0JCQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwotCQkJZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7Ci0JCX0KLQl9CiYjNDM7CWZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygmYW1wO2xpc3QsICZhbXA7Y2xlYW4sIGxydXZlYywgdHlwZSwgc2tpcF9yZXRyeSk7CiAKIAltb3ZlX2ZvbGlvc190b19scnUoJmFtcDtsaXN0KTsKIApAQCAtNjEyMyw2ICYjNDM7NjEyNSw0NiBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKgogCiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi8KIAomIzQzOy8qKgomIzQzOyAqIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayAtIEZpbmQgYW5kIG1vdmUgdGhlIHdyaXR0ZW4gYmFjayBmb2xpb3MgdG8gYSBuZXcgbGlzdC4KJiM0MzsgKiBAbGlzdDogZm9saW9zIGxpc3QKJiM0MzsgKiBAY2xlYW46IHRoZSB3cml0dGVuIGJhY2sgZm9saW9zIGxpc3QKJiM0MzsgKiBAbHJ1dmVjOiB0aGUgbHJ1dmVjCiYjNDM7ICogQHR5cGU6IExSVSB0eXBlIChvbmx5IHVzZWQgZm9yIENPTkZJR19MUlVfR0VOKQomIzQzOyAqIEBza2lwX3JldHJ5OiB3aGV0aGVyIHNraXAgcmV0cnkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCiYjNDM7CQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqY2xlYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKJiM0MzsJCQkJICAgICBpbnQgdHlwZSwgYm9vbCBza2lwX3JldHJ5KQomIzQzO3sKJiM0MzsJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJc3RydWN0IGZvbGlvICpuZXh0OwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShmb2xpbywgbmV4dCwgbGlzdCwgbHJ1KSB7CiYjNDM7I2lmZGVmIENPTkZJR19MUlVfR0VOCiYjNDM7CQlERUZJTkVfTUlOX1NFUShscnV2ZWMpOwomIzQzOyNlbmRpZgomIzQzOwkJLyogbW92ZV9mb2xpb3NfdG9fbHJ1KCkgY3VsbHMgdW5ldmljdGFibGUgZm9saW9zIHZpYSBmb2xpb19wdXRiYWNrX2xydSgpICovCiYjNDM7CQlpZiAoIWZvbGlvX2V2aWN0YWJsZShmb2xpbykpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiByZXRyeSBmb2xpb3MgdGhhdCBtYXkgaGF2ZSBtaXNzZWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi8KJiM0MzsJCWlmICghc2tpcF9yZXRyeSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgJmFtcDsmYW1wOyAhZm9saW9fbWFwcGVkKGZvbGlvKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkgewomIzQzOwkJCWxpc3RfbW92ZSgmYW1wO2ZvbGlvLSZndDtscnUsIGNsZWFuKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsjaWZkZWYgQ09ORklHX0xSVV9HRU4KJiM0MzsJCS8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqLwomIzQzOwkJaWYgKGxydXZlYy0mZ3Q7bHJ1Z2VuLmVuYWJsZWQgJmFtcDsmYW1wOwomIzQzOwkJICAgIGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7CiYjNDM7CQkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKJiM0MzsJCQlmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTsKJiM0MzsJCX0KJiM0MzsjZW5kaWYKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIHsKIAl1bnNpZ25lZCBsb25nIG5yW05SX0xSVV9MSVNUU107CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDk3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vdm1zY2FuLmNgLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGJyZWFrIGRvd24gd2hhdCYjMzk7cyBoYXBwZW5pbmcuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpYCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgcmVmYWN0b3JpbmcgY29kZSB0aGF0IHVzZWQgdG8gYmUgc29sZWx5IGluIHRoZSBNR0xSVSAoQ09ORklHX0xSVV9HRU4pIGBldmljdF9mb2xpb3MoKWAgYW5kIGlzIG5vdyBiZWluZyB1c2VkIGluIHRoZSB0cmFkaXRpb25hbCBMUlUgcmVjbGFpbSBwYXRoIHZpYSBgc2hyaW5rX2luYWN0aXZlX2xpc3QoKWAuCgpEaXZpbmcgaW50byBgc2hyaW5rX2luYWN0aXZlX2xpc3QoKWAsIEkgc2VlIHRoaXMgbmV3IGByZXRyeWAgbG9vcC4gVGhhdCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGF0dGVudGlvbi4gVGhlIGxvb3AmIzM5O3Mgc3RydWN0dXJlOiBpc29sYXRlIHNvbWUgcGFnZXMsIHJlY2xhaW0gcGFnZXMsIGhhbmRsZSB3cml0ZWJhY2sgaWYgYW55IHdlcmUgaXNvbGF0ZWQsIGFuZCB0aGVuIHVzZSBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKClgLiBJdCB0aGVuIG1vdmVzIGFueSBmb3VuZCBwYWdlcyBhbmQgdXBkYXRlcyBzdGF0ZS4gVGhlcmUmIzM5O3MgYSBjaGVjayBmb3IgYSBjbGVhbiBsaXN0LCBhbmQgaWYgdGhlcmUgYXJlIGNsZWFuIHBhZ2VzLCB3ZSBsb29wIGJhY2sgd2l0aCBgc2tpcF9yZXRyeSA9IHRydWVgLgoKV2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgc3RhdGAgdmFyaWFibGUsIGFuZCBob3cgaXQgaXMgYmVpbmcgdXNlZCB3aXRoIGBzaHJpbmtfZm9saW9fbGlzdCgpYC4gRG9lcyBgc2hyaW5rX2ZvbGlvX2xpc3QoKWAgaW5pdGlhbGl6ZSBpdD8gSXMgaXQgcGFzc2VkIGluIHVuaW5pdGlhbGl6ZWQgYW5kIGluaXRpYWxpemVkICp3aXRoaW4qIGBzaHJpbmtfZm9saW9fbGlzdCgpYD8gSXMgaXQgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBvbiB0aGUgcmV0cnk/IEkgbmVlZCB0byBjaGVjayBob3cgYHN0YXRgIGlzIGhhbmRsZWQgd2l0aGluIGBzaHJpbmtfZm9saW9fbGlzdCgpYCBpdHNlbGYuIEkmIzM5O2xsIG5lZWQgdG8gZ28gbG9vayBpbnRvIHRoZSBjb2RlIG9mIGBtbS92bXNjYW4uY2AgdG8gdW5kZXJzdGFuZCB0aGF0IGJpdC4gVGhpcyBjb3VsZCBiZSBhIHJhY2UgY29uZGl0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtfZm9saW9fbGlzdFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTI0Nj1zdGF0aWMgYm9vbCByb290X3JlY2xhaW0oc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMjU2LSAqIGNvbXBsZXRlbHkgYnJva2VuIHdpdGggdGhlIGxlZ2FjeSBtZW1jZyBhbmQgZGlyZWN0IHN0YWxsaW5nIGluXG5tbS92bXNjYW4uYzoyNTc6ICogc2hyaW5rX2ZvbGlvX2xpc3QoKSBpcyB1c2VkIGZvciB0aHJvdHRsaW5nIGluc3RlYWQsIHdoaWNoIGxhY2tzIGFsbCB0aGVcbm1tL3Ztc2Nhbi5jLTI1OC0gKiBuaWNldGllcyBzdWNoIGFzIGZhaXJuZXNzLCBhZGFwdGl2ZSBwYXVzaW5nLCBiYW5kd2lkdGggcHJvcG9ydGlvbmFsXG4tLVxubW0vdm1zY2FuLmM9NjgzPXR5cGVkZWYgZW51bSB7XG4tLVxubW0vdm1zY2FuLmMtNjk0LS8qXG5tbS92bXNjYW4uYzo2OTU6ICogcGFnZW91dCBpcyBjYWxsZWQgYnkgc2hyaW5rX2ZvbGlvX2xpc3QoKSBmb3IgZWFjaCBkaXJ0eSBmb2xpby5cbm1tL3Ztc2Nhbi5jLTY5Ni0gKi9cbi0tXG5tbS92bXNjYW4uYz0xMTE5PXN0YXRpYyBib29sIG1heV9lbnRlcl9mcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS92bXNjYW4uYy0xMTM0LS8qXG5tbS92bXNjYW4uYzoxMTM1OiAqIHNocmlua19mb2xpb19saXN0KCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlY2xhaW1lZCBwYWdlc1xubW0vdm1zY2FuLmMtMTEzNi0gKi9cbm1tL3Ztc2Nhbi5jOjExMzc6c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxubW0vdm1zY2FuLmMtMTEzOC1cdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmM9MTY3Mz11bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vdm1zY2FuLmMtMTcwMy1cdG5vcmVjbGFpbV9mbGFnID0gbWVtYWxsb2Nfbm9yZWNsYWltX3NhdmUoKTtcbm1tL3Ztc2Nhbi5jOjE3MDQ6XHRucl9yZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChcdTAwMjZjbGVhbl9mb2xpb3MsIHpvbmUtXHUwMDNlem9uZV9wZ2RhdCwgXHUwMDI2c2MsXG5tbS92bXNjYW4uYy0xNzA1LVx0XHRcdFx0XHRcdTAwMjZzdGF0LCB0cnVlLCBOVUxMKTtcbi0tXG5tbS92bXNjYW4uYz0yMDI1PXN0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxuLS1cbm1tL3Ztc2Nhbi5jLTIwNDUtXHRcdCAqIHRoZSBrZXJuZWwgZmx1c2hlciBoZXJlIGFuZCBsYXRlciB3YWl0aW5nIG9uIGZvbGlvc1xubW0vdm1zY2FuLmM6MjA0NjpcdFx0ICogd2hpY2ggYXJlIGluIHdyaXRlYmFjayB0byBmaW5pc2ggKHNlZSBzaHJpbmtfZm9saW9fbGlzdCgpKS5cbm1tL3Ztc2Nhbi5jLTIwNDctXHRcdCAqXG4tLVxubW0vdm1zY2FuLmM9MjA2Nz1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4tLVxubW0vdm1zY2FuLmMtMjExNC1yZXRyeTpcbm1tL3Ztc2Nhbi5jOjIxMTU6XHRucl9yZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChcdTAwMjZmb2xpb19saXN0LCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQsIGZhbHNlLFxubW0vdm1zY2FuLmMtMjExNi1cdFx0XHRcdFx0IGxydXZlY19tZW1jZyhscnV2ZWMpKTtcbi0tXG5tbS92bXNjYW4uYz0yMjU3PXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVjbGFpbV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMjI3MC1cbm1tL3Ztc2Nhbi5jOjIyNzE6XHRucl9yZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChmb2xpb19saXN0LCBwZ2RhdCwgXHUwMDI2c2MsIFx1MDAyNnN0YXQsIHRydWUsIE5VTEwpO1xubW0vdm1zY2FuLmMtMjI3Mi1cdHdoaWxlICghbGlzdF9lbXB0eShmb2xpb19saXN0KSkge1xuLS1cbm1tL3Ztc2Nhbi5jPTQzNzA9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00NDEwLS8qXG5tbS92bXNjYW4uYzo0NDExOiAqIFRoaXMgZnVuY3Rpb24gZXhwbG9pdHMgc3BhdGlhbCBsb2NhbGl0eSB3aGVuIHNocmlua19mb2xpb19saXN0KCkgd2Fsa3MgdGhlXG5tbS92bXNjYW4uYy00NDEyLSAqIHJtYXAuIEl0IHNjYW5zIHRoZSBhZGphY2VudCBQVEVzIG9mIGEgeW91bmcgUFRFIGFuZCBwcm9tb3RlcyBob3QgcGFnZXMuIElmXG4tLVxubW0vdm1zY2FuLmM9NTAzOT1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy01MDcxLXJldHJ5OlxubW0vdm1zY2FuLmM6NTA3MjpcdHJlY2xhaW1lZCA9IHNocmlua19mb2xpb19saXN0KFx1MDAyNmxpc3QsIHBnZGF0LCBzYywgXHUwMDI2c3RhdCwgZmFsc2UsIG1lbWNnKTtcbm1tL3Ztc2Nhbi5jLTUwNzMtXHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgJiM0Mzs9IHJlY2xhaW1lZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE0OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdm1zY2FuLmM6IFVucGFja2luZyBzaHJpbmtfZm9saW9fbGlzdCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgc2hyaW5rX2ZvbGlvX2xpc3RgIGludGVyYWN0cyB3aXRoIGBzdGF0YCB3aXRoaW4gdGhlIGBtbS92bXNjYW4uY2AgY29udGV4dC4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBsaW5lcywgc3BlY2lmaWNhbGx5IDExMzUgdGhyb3VnaCAxMTU1LiBUaGlzIHNlY3Rpb24gaG9sZHMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgd29yayB0b2dldGhlci4gSSYjMzk7bSBob3BpbmcgdG8gc2VlIHRoZSBzcGVjaWZpYyBvcGVyYXRpb25zIHBlcmZvcm1lZCBvbiBgc3RhdGAgYnkgYHNocmlua19mb2xpb19saXN0YCwgbGlrZWx5IGluIHRoZSBjb250ZXh0IG9mIHJlY2xhaW1pbmcgb3IgYWNjb3VudGluZyBmb3IgbWVtb3J5LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMsIHBhcmFtZXRlciBwYXNzaW5nLCBhbmQgbW9kaWZpY2F0aW9ucyBvZiBgc3RhdGAgcmVsYXRlZCB0byB0aGUgZm9saW9zIGJlaW5nIHByb2Nlc3NlZC4gSSB3YW50IHRvIGJ1aWxkIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBjb250cmlidXRlcyB0byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBsZXZlcmFnZXMgYHN0YXRgIHRvIGRldGVybWluZSB0aGUgc3RhdGUgb2YgdmFyaW91cyBmb2xpb3MuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBzZWN0aW9uIHByb3ZpZGVzIHRoZSBncmFudWxhciBkZXRhaWwgSSYjMzk7bSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEzNTpcdCAqIHNocmlua19mb2xpb19saXN0KCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlY2xhaW1lZCBwYWdlc1xuMTEzNjpcdCAqL1xuMTEzNzpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbjExMzg6XHRcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4xMTM5Olx0XHRcdHN0cnVjdCByZWNsYWltX3N0YXQgKnN0YXQsIGJvb2wgaWdub3JlX3JlZmVyZW5jZXMsXG4xMTQwOlx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbjExNDE6XHR7XG4xMTQyOlx0XHRzdHJ1Y3QgZm9saW9fYmF0Y2ggZnJlZV9mb2xpb3M7XG4xMTQzOlx0XHRMSVNUX0hFQUQocmV0X2ZvbGlvcyk7XG4xMTQ0Olx0XHRMSVNUX0hFQUQoZGVtb3RlX2ZvbGlvcyk7XG4xMTQ1Olx0XHR1bnNpZ25lZCBpbnQgbnJfcmVjbGFpbWVkID0gMCwgbnJfZGVtb3RlZCA9IDA7XG4xMTQ2Olx0XHR1bnNpZ25lZCBpbnQgcGdhY3RpdmF0ZSA9IDA7XG4xMTQ3Olx0XHRib29sIGRvX2RlbW90ZV9wYXNzO1xuMTE0ODpcdFx0c3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9O1xuMTE0OTpcdFxuMTE1MDpcdFx0Zm9saW9fYmF0Y2hfaW5pdChcdTAwMjZmcmVlX2ZvbGlvcyk7XG4xMTUxOlx0XHRtZW1zZXQoc3RhdCwgMCwgc2l6ZW9mKCpzdGF0KSk7XG4xMTUyOlx0XHRjb25kX3Jlc2NoZWQoKTtcbjExNTM6XHRcdGRvX2RlbW90ZV9wYXNzID0gY2FuX2RlbW90ZShwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYywgbWVtY2cpO1xuMTE1NDpcdFxuMTE1NTpcdHJldHJ5OlxuMTE1NjpcdFx0d2hpbGUgKCFsaXN0X2VtcHR5KGZvbGlvX2xpc3QpKSB7XG4xMTU3Olx0XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xuMTE1ODpcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuMTE1OTpcdFx0XHRlbnVtIGZvbGlvX3JlZmVyZW5jZXMgcmVmZXJlbmNlcyA9IEZPTElPUkVGX1JFQ0xBSU07XG4xMTYwOlx0XHRcdGJvb2wgZGlydHksIHdyaXRlYmFjaztcbjExNjE6XHRcdFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzO1xuMTE2MjpcdFxuMTE2MzpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjExNjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkwMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGb2xpbyBFdmljdGlvbiBhbmQgV3JpdGViYWNrKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBmb2xpbyBtYW5hZ2VtZW50IGNvZGUgYWdhaW4uIExpbmUgMTE1MSwgcmlnaHQsIHRoZXJlJiMzOTtzIGEgYG1lbXNldChzdGF0LCAwLCBzaXplb2YoKnN0YXQpKTtgLiBUaGF0JiMzOTtzIGltcG9ydGFudDsgYHNocmlua19mb2xpb19saXN0YCBpcyB6ZXJvaW5nIG91dCB0aGUgYHN0YXRgIHN0cnVjdC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgemVyb2luZyBhY3Rpb24gaW4gcmVsYXRpb24gdG8gdGhlIGV2aWN0aW9uIHByb2Nlc3MsIHNvIGxldCYjMzk7cyBjaGVjayBgZXZpY3RfZm9saW9zKClgIGFyb3VuZCBsaW5lIDUwNjAuIE15IGdvYWwgaXMgdG8gc2VlIGV4YWN0bHkgaG93IGl0IG1hbmFnZXMgcmV0cmllcyBpZiBldmljdGlvbiBmYWlscyBmb3Igc29tZSByZWFzb24gYW5kLCBjcnVjaWFsbHksIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcyBvZiBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBgc3RhdGAgZGF0YSBzdHJ1Y3R1cmUgYW5kIHRoZXNlIGZ1bmN0aW9ucy4gSeKAmW0gdGhpbmtpbmcgYWJvdXQgcG9zc2libGUgcmFjZSBjb25kaXRpb25zIGFuZCBob3cgdGhlc2UgcmV0cnkgbWVjaGFuaXNtcyBhcmUgZGVzaWduZWQgdG8gbWl0aWdhdGUgcG90ZW50aWFsIGlzc3Vlcy4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyBhbGwgaGFuZ3MgdG9nZXRoZXLigKYKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTA2MDpcdFx0XHRcdFx0IFx1MDAyNmxpc3QsIFx1MDAyNmlzb2xhdGVkLCBcdTAwMjZ0eXBlLCBcdTAwMjZ0eXBlX3NjYW5uZWQpO1xuNTA2MTpcdFx0bnJfaXNvbGF0ZWQgPSBpc29sYXRlZDtcbjUwNjI6XHRcbjUwNjM6XHRcdC8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovXG41MDY0Olx0XHRpZiAoc2Nhbm5lZClcbjUwNjU6XHRcdFx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XG41MDY2Olx0XG41MDY3Olx0XHRscnV2ZWNfdW5sb2NrX2lycShscnV2ZWMpO1xuNTA2ODpcdFxuNTA2OTpcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bGlzdCkpXG41MDcwOlx0XHRcdHJldHVybiBzY2FubmVkO1xuNTA3MTpcdHJldHJ5OlxuNTA3MjpcdFx0cmVjbGFpbWVkID0gc2hyaW5rX2ZvbGlvX2xpc3QoXHUwMDI2bGlzdCwgcGdkYXQsIHNjLCBcdTAwMjZzdGF0LCBmYWxzZSwgbWVtY2cpO1xuNTA3MzpcdFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltZWQ7XG41MDc0Olx0XHR0b3RhbF9yZWNsYWltZWQgJiM0Mzs9IHJlY2xhaW1lZDtcbjUwNzU6XHRcdC8qIFJldHJ5IHBhc3MgaXMgb25seSBtZWFudCBmb3IgY2xlYW4gZm9saW9zIHdpdGhvdXQgbmV3IGlzb2xhdGlvbiAqL1xuNTA3NjpcdFx0aWYgKGlzb2xhdGVkKVxuNTA3NzpcdFx0XHRoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2soaXNvbGF0ZWQsIHBnZGF0LCBzYywgXHUwMDI2c3RhdCk7XG41MDc4Olx0XHR0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19pbmFjdGl2ZShwZ2RhdC1cdTAwM2Vub2RlX2lkLFxuNTA3OTpcdFx0XHRcdHR5cGVfc2Nhbm5lZCwgcmVjbGFpbWVkLCBcdTAwMjZzdGF0LCBzYy1cdTAwM2Vwcmlvcml0eSxcbjUwODA6XHRcdFx0XHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XG41MDgxOlx0XG41MDgyOlx0XHRmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soXHUwMDI2bGlzdCwgXHUwMDI2Y2xlYW4sIGxydXZlYywgdHlwZSwgc2tpcF9yZXRyeSk7XG41MDgzOlx0XG41MDg0Olx0XHRtb3ZlX2ZvbGlvc190b19scnUoXHUwMDI2bGlzdCk7XG41MDg1Olx0XG41MDg2Olx0XHR3YWxrID0gY3VycmVudC1cdTAwM2VyZWNsYWltX3N0YXRlLVx1MDAzZW1tX3dhbGs7XG41MDg3Olx0XHRpZiAod2FsayBcdTAwMjZcdTAwMjYgd2Fsay1cdTAwM2ViYXRjaGVkKSB7XG41MDg4Olx0XHRcdHdhbGstXHUwMDNlbHJ1dmVjID0gbHJ1dmVjO1xuNTA4OTpcdFx0XHRyZXNldF9iYXRjaF9zaXplKHdhbGspO1xuNTA5MDpcdFx0fVxuNTA5MTpcdFxuNTA5MjpcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHREVNT1RFX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKSxcbjUwOTM6XHRcdFx0XHRcdFx0c3RhdC5ucl9kZW1vdGVkKTtcbjUwOTQ6XHRcbjUwOTU6XHRcdGl0ZW0gPSBQR1NURUFMX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKTtcbjUwOTY6XHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCByZWNsYWltZWQpO1xuNTA5NzpcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHU1RFQUxfQU5PTiAmIzQzOyB0eXBlLCByZWNsYWltZWQpO1xuNTA5ODpcdFxuNTA5OTpcdFx0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZjbGVhbiwgXHUwMDI2bGlzdCk7XG41MTAwOlx0XG41MTAxOlx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2bGlzdCkpIHtcbjUxMDI6XHRcdFx0c2tpcF9yZXRyeSA9IHRydWU7XG41MTAzOlx0XHRcdGlzb2xhdGVkID0gMDtcbjUxMDQ6XHRcdFx0Z290byByZXRyeTtcbjUxMDU6XHRcdH1cbjUxMDY6XHRcbjUxMDc6XHRcdGlmIChucl9pc29sYXRlZCBcdTAwM2UgdG90YWxfcmVjbGFpbWVkKVxuNTEwODpcdFx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiAmIzQzOyB0eXBlLFxuNTEwOTpcdFx0XHRcdFx0IG5yX2lzb2xhdGVkIC0gdG90YWxfcmVjbGFpbWVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAyMgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE0ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50OiBBIERlZXAgRGl2ZSBpbnRvIFBhZ2UgUmVjbGFtYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpc3NlY3QgdGhlc2UgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLCBmb2N1c2luZyBvbiBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBwYWdlIHJlY2xhbWF0aW9uLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIGBldmljdF9mb2xpb3NgIGFuZCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCB3aGljaCBhcmUga2V5IGNvbXBvbmVudHMgaW4gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneS4KCkluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIEkmIzM5O20gbG9va2luZyBjbG9zZWx5IGF0IGhvdyB0aGUgaW5hY3RpdmUgbGlzdCBpcyBwcm9jZXNzZWQuIEkgc2VlIGEgYGZvbGlvX2xpc3RgIGJlaW5nIHVzZWQsIGFuZCBhIGNyaXRpY2FsIGRldGFpbCBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGEgYGNsZWFuX2xpc3RgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhlIGNvZGUgaXMgY2xlYXJseSBkZXNpZ25lZCB0byBoYW5kbGUgJiMzNDtjbGVhbiYjMzQ7IGZvbGlvcyBkaWZmZXJlbnRseS4gVGhlIG5ldyBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYCBmdW5jdGlvbiBpcyBjYWxsZWQsIGFuZCBhIGtleSBwYXJhbWV0ZXIgaXMgYHNraXBfcmV0cnlgLCB3aGljaCBpbmRpY2F0ZXMgdGhlcmUgbWlnaHQgYmUgc29tZSBraW5kIG9mIHJldHJ5IG1lY2hhbmlzbSBpbiBwbGFjZS4gSXQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byB0aGUgYGNsZWFuX2xpc3RgLiBJIHNlZSB0aGF0IHRoZSBjb2RlIGlzIGF0dGVtcHRpbmcgdG8gaWRlbnRpZnkgZm9saW9zIHRoYXQgaGF2ZSBwb3RlbnRpYWxseSBub3QgYmVlbiBoYW5kbGVkIGNvcnJlY3RseSBpbiBhIHByZXZpb3VzIGF0dGVtcHQsIGFuZCBtb3ZlIHRoZW0gdG8gdGhlIGBjbGVhbl9saXN0YCwgYW5kIHRoZW4gcmV0cnkuIFRoaXMgaXMgaW1wb3J0YW50IHRvIG5vdGUgYW5kIHVuZGVyc3RhbmQuCgpUaGUgY29kZSB0aGVuIGNhbGxzIGBzaHJpbmtfZm9saW9fbGlzdGAsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgYWN0dWFsIHJlY2xhbWF0aW9uLiBDcml0aWNhbGx5LCBpdCB0aGVuIGNhbGxzIGBoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2tgLCB3aGljaCBzdWdnZXN0cyB0aGUgY29kZSBpcyBkZXNpZ25lZCB0byBkbyB3cml0ZWJhY2sgYW5kIGhhbmRsZSB0aGVzZSBmb2xpb3MgY29ycmVjdGx5LgoKVGhlbiwgdGhlcmUmIzM5O3MgYSBsb29wIHdpdGggYSBgcmV0cnlgIGxhYmVsIHRoYXQmIzM5O3MgZW50ZXJlZCBpZiBgIWxpc3RfZW1wdHkoJmFtcDtjbGVhbl9saXN0KWAuICBUaGlzIGlzIGtleTsgdGhlIGZ1bmN0aW9uIHRyaWVzIHRvIHdvcmsgYXJvdW5kIGlzc3VlcyBzdWNoIGFzIGEgZmlsZSB0aGF0IGhhcyBiZWVuIGZsYWdnZWQgYXMgbmVlZGluZyB3cml0ZWJhY2ssIGJ1dCBoYXMgbm90IHlldCBiZWVuIHByb2Nlc3NlZC4gVGhlIGZvbGlvcyBhcmUgaXNvbGF0ZWQsIHJlY2xhaW1lZCwgYW5kIHRoZW4gdGhlIHJldHJ5IGhhcHBlbnMsIHVudGlsIGFsbCB0aGUgYGNsZWFuX2xpc3RgIGl0ZW1zIGhhdmUgYmVlbiBjbGVhcmVkLgoKTmV4dCwgSSBuZWVkIHRvIGxvb2sgaW50byBob3cgdGhlIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgIGZ1bmN0aW9uIGlzIHN0cnVjdHVyZWQsIGFuZCBob3cgdGhlIGBza2lwX3JldHJ5YCBwYXJhbWV0ZXIgcGxheXMgYSByb2xlLiBJZiBgc2tpcF9yZXRyeWAgaXMgYGZhbHNlYCwgdGhlIGNvZGUgaXMgZGVzaWduZWQgdG8gaWRlbnRpZnkgZm9saW9zIHRoYXQgd2VyZSBub3QgcmVjbGFpbWVkIGNvcnJlY3RseSwgc3VjaCBhcyBvbmVzIHRoYXQgd2VyZSBub3QgYWN0aXZlLCBub3QgbWFwcGVkLCBhbmQgbm90IGRpcnR5L3dyaXRlYmFjaywgYW5kIG1vdmUgdGhlbSB0byB0aGUgYGNsZWFuX2xpc3RgIHRvIGFsbG93IGZvciBhIHJldHJ5LgpOb3csIHdoZW4gQ09ORklHX0xSVV9HRU4gaXMgZW5hYmxlZCwgSSBzZWUgdGhhdCB0aGUgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AgZnVuY3Rpb24gdXNlcyBgZmlsZWAgYXMgdGhlIHR5cGUuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBmdW5jdGlvbiBpcyBoYW5kbGluZyB0aGUgZ2VuZXJpYyBscnUgdHlwZSBjb3JyZWN0bHkuIGBldmljdF9mb2xpb3NgIHVzZXMgYSBgdHlwZWAgZm9yIExSVV9HRU4sIGFuZCBJIG5lZWQgdG8gY2hlY2sgd2hhdCBgdHlwZWAgaXMgaW4gYGV2aWN0X2ZvbGlvc2AgdG8gZW5zdXJlIHRoYXQgaXQmIzM5O3MgYWxsIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB0eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9MTg0PXN0YXRpYyB2b2lkIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxubW0vdm1zY2FuLmMtMTg1LVx0XHRcdFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpjbGVhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxubW0vdm1zY2FuLmM6MTg2Olx0XHRcdFx0ICAgICBpbnQgdHlwZSwgYm9vbCBza2lwX3JldHJ5KTtcbm1tL3Ztc2Nhbi5jLTE4Ny1cbi0tXG5tbS92bXNjYW4uYz0xMTM3PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xNjE0LVx0XHRpZiAoIWZvbGlvX3Rlc3RfbWxvY2tlZChmb2xpbykpIHtcbm1tL3Ztc2Nhbi5jOjE2MTU6XHRcdFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG5tbS92bXNjYW4uYy0xNjE2LVx0XHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuLS1cbm1tL3Ztc2Nhbi5jPTI4Njc9c3RhdGljIGludCBnZXRfc3dhcHBpbmVzcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4ODUtXG5tbS92bXNjYW4uYzoyODg2OnN0YXRpYyBpbnQgZ2V0X25yX2dlbnMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbm1tL3Ztc2Nhbi5jLTI4ODcte1xuLS1cbm1tL3Ztc2Nhbi5jPTI4OTE9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc2VxX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbm1tL3Ztc2Nhbi5jLTI4OTIte1xubW0vdm1zY2FuLmM6Mjg5MzpcdGludCB0eXBlO1xubW0vdm1zY2FuLmMtMjg5NC1cbi0tXG5tbS92bXNjYW4uYz0zMjk1PXN0cnVjdCBjdHJsX3BvcyB7XG4tLVxubW0vdm1zY2FuLmMtMzMwMC1cbm1tL3Ztc2Nhbi5jOjMzMDE6c3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllcl9taW4sXG5tbS92bXNjYW4uYy0zMzAyLVx0XHRcdCAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpXG4tLVxubW0vdm1zY2FuLmMtMzMxOS1cbm1tL3Ztc2Nhbi5jOjMzMjA6c3RhdGljIHZvaWQgcmVzZXRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgYm9vbCBjYXJyeW92ZXIpXG5tbS92bXNjYW4uYy0zMzIxLXtcbi0tXG5tbS92bXNjYW4uYz0zNDM0PXN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS92bXNjYW4uYy0zNDM1LXtcbm1tL3Ztc2Nhbi5jOjM0MzY6XHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbm1tL3Ztc2Nhbi5jLTM0MzctXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbi0tXG5tbS92bXNjYW4uYz0zNDQ3PXN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS92bXNjYW4uYzozNDQ4Olx0XHRcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbiwgaW50IHR5cGUpXG5tbS92bXNjYW4uYy0zNDQ5LXtcbi0tXG5tbS92bXNjYW4uYz00MDE5PXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9scnVfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGxpc3RfaGVhZCAqKmJhdGNoX2VuZCxcbi0tXG5tbS92bXNjYW4uYy00MDMxLVxubW0vdm1zY2FuLmM6NDAzMjpzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcbm1tL3Ztc2Nhbi5jLTQwMzMte1xuLS1cbm1tL3Ztc2Nhbi5jPTQxNjY9c3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmMtNDE2OS1cdGludCBwcmV2LCBuZXh0O1xubW0vdm1zY2FuLmM6NDE3MDpcdGludCB0eXBlLCB6b25lO1xubW0vdm1zY2FuLmMtNDE3MS1cdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuLS1cbm1tL3Ztc2Nhbi5jPTQ2NDc9Ym9vbCByZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy00NjQ5LVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jOjQ2NTA6XHRpbnQgdHlwZTtcbm1tL3Ztc2Nhbi5jLTQ2NTEtXG4tLVxubW0vdm1zY2FuLmM9NDY5ND12b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy00Njk2LVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jOjQ2OTc6XHRpbnQgdHlwZTtcbm1tL3Ztc2Nhbi5jLTQ2OTgtXG4tLVxubW0vdm1zY2FuLmM9NDczNT1zdGF0aWMgdm9pZCBfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLCBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjLFxubW0vdm1zY2FuLmM6NDczNjpcdFx0XHRcdCAgICAgaW50IHpvbmUsIGludCB0eXBlKVxubW0vdm1zY2FuLmMtNDczNy17XG4tLVxubW0vdm1zY2FuLmM9NDc2Nj12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ3NjgtXHRzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsICpwYXJlbnRfbHJ1dmVjO1xubW0vdm1zY2FuLmM6NDc2OTpcdGludCB0eXBlLCB6aWQ7XG5tbS92bXNjYW4uYy00NzcwLVx0c3RydWN0IHpvbmUgKnpvbmU7XG4tLVxubW0vdm1zY2FuLmM9NDgwMD1zdGF0aWMgYm9vbCBzb3J0X2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNDgwMy1cdGludCBnZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbm1tL3Ztc2Nhbi5jOjQ4MDQ6XHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbm1tL3Ztc2Nhbi5jLTQ4MDUtXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xuLS1cbm1tL3Ztc2Nhbi5jPTQ4NzM9c3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL3Ztc2Nhbi5jOjQ4NzQ6XHRcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHR5cGUsIGludCB0aWVyLFxubW0vdm1zY2FuLmMtNDg3NS1cdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWRwKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ5NDctXG5tbS92bXNjYW4uYzo0OTQ4OnN0YXRpYyBpbnQgZ2V0X3RpZXJfaWR4KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXG5tbS92bXNjYW4uYy00OTQ5LXtcbi0tXG5tbS92bXNjYW4uYz00OTk1PXN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNTAwMC1cdGJvb2wgdHlwZV9mYWxsYmFja19hbGxvd2VkID0gIWlzX3NpbmdsZV90eXBlX3JlY2xhaW0oc3dhcHBpbmVzcyk7XG5tbS92bXNjYW4uYzo1MDAxOlx0aW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XG5tbS92bXNjYW4uYy01MDAyLVx0aW50IHRvdGFsX3NjYW5uZWQgPSAwLCBzY2FubmVkLCB0aWVyO1xuLS1cbm1tL3Ztc2Nhbi5jPTU0NDM9c3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU0NDgtXHRmb3JfZWFjaF9ldmljdGFibGVfbHJ1KGxydSkge1xubW0vdm1zY2FuLmM6NTQ0OTpcdFx0aW50IHR5cGUgPSBpc19maWxlX2xydShscnUpO1xubW0vdm1zY2FuLmMtNTQ1MC1cdFx0Ym9vbCBhY3RpdmUgPSBpc19hY3RpdmVfbHJ1KGxydSk7XG4tLVxubW0vdm1zY2FuLmM9NTcwOT1zdGF0aWMgdm9pZCBscnVfZ2VuX3NlcV9zaG93X2Z1bGwoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNTcxMy1cdGludCBpO1xubW0vdm1zY2FuLmM6NTcxNDpcdGludCB0eXBlLCB0aWVyO1xubW0vdm1zY2FuLmMtNTcxNS1cdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEoc2VxKTtcbi0tXG5tbS92bXNjYW4uYz01NzY0PXN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vdm1zY2FuLmMtNTc5NC1cdGZvciAoOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXEmIzQzOyYjNDM7KSB7XG5tbS92bXNjYW4uYzo1Nzk1Olx0XHRpbnQgdHlwZSwgem9uZTtcbm1tL3Ztc2Nhbi5jLTU3OTYtXHRcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4tLVxubW0vdm1zY2FuLmM9NjEzNj1zdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbm1tL3Ztc2Nhbi5jLTYxMzctXHRcdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmNsZWFuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5tbS92bXNjYW4uYzo2MTM4Olx0XHRcdFx0ICAgICBpbnQgdHlwZSwgYm9vbCBza2lwX3JldHJ5KVxubW0vdm1zY2FuLmMtNjEzOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzM5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBpc19maWxlX2xydShscnUpYOKAlHJpZ2h0LCB0aGF0JiMzOTtzIGp1c3QgYSBzaW1wbGUgMCBvciAxIGluZGljYXRvciwgbWF0Y2hpbmcgYHR5cGVgIGluIE1HTFJVLiBNYWtlcyBzZW5zZS4gTm93LCBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYDogSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljLiBJdCYjMzk7cyBpdGVyYXRpbmcgaW4gcmV2ZXJzZSB0aHJvdWdoIGEgYGxpc3RfaGVhZGAgKHByZXN1bWFibHkgb2YgZm9saW9zKSwgc2FmZWx5IHVzaW5nIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZWAuIFN0YW5kYXJkIHByYWN0aWNlLgoKVGhlIGZpcnN0IGBpZmAgc3RhdGVtZW50IGlzIGxvb2tpbmcgZm9yIHVuZXZpY3RhYmxlIGZvbGlvcyDigJMgaGFuZGxlZCBlZmZpY2llbnRseSB1c2luZyBgZm9saW9fZXZpY3RhYmxlKClgLiBTa2lwIHRoZW07IHdlIGRvbuKAmXQgY2FyZSBhYm91dCB0aG9zZSByaWdodCBub3cuCgpUaGUgbmV4dCBgaWZgIGlzIGEgcmV0cnkgbWVjaGFuaXNtLiBJdCYjMzk7cyBjaGVja2luZyBpZiB0aGUgZm9saW8gKm1pZ2h0KiBoYXZlIGJlZW4gbWlzc2VkIGJ5IGBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKWAuIFRoZSBjb25kaXRpb25zIGAhZm9saW9fdGVzdF9hY3RpdmVgLCBgIWZvbGlvX21hcHBlZGAsIGAhZm9saW9fdGVzdF9kaXJ0eWAsIGFuZCBgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrYCBzZWVtIHRvIGluZGljYXRlIHRoYXQgdGhlIGZvbGlvIGlzICppbmFjdGl2ZSosICp1bm1hcHBlZCosIGFuZCAqbm90KiBjdXJyZW50bHkgZGlydHkgb3IgdW5kZXJnb2luZyB3cml0ZWJhY2suIElmIGFsbCB0aG9zZSBjb25kaXRpb25zIGFyZSB0cnVlLCBpdCBtb3ZlcyB0aGUgZm9saW8gdG8gdGhlIGBjbGVhbmAgbGlzdC4gU2VlbXMgbGlrZSBhIGdvb2Qgc3RyYXRlZ3kgdG8gaGFuZGxlIHBvdGVudGlhbCBtaXNzZWQgcmVjbGFpbSBhdHRlbXB0cy4KCk5vdywgdGhhdCBgQ09ORklHX0xSVV9HRU5gIHNlY3Rpb24uICpIbW0qLCBsZXQmIzM5O3Mgc2VlLiBJdCByZWZlcmVuY2VzIGBscnV2ZWMtJmd0O2xydWdlbi5lbmFibGVkYC4uLiBhbmQgdGhlIGNvbXBhcmlzb24gYWdhaW5zdCBgbWluX3NlcVt0eXBlXWAuIFRoaXMgaW1wbGllcyBzb21lIGdlbmVyYXRpb24tYmFzZWQgTFJVIHNjaGVtZS4gSXQmIzM5O3Mgc2V0dGluZyB0aGUgZm9saW/igJlzIExSVSByZWZzIHRvIDAsIHdoaWNoIGNsZWFycyB0aGUgcmVmZXJlbmNlIGNvdW50LCBhbmQgdGhlbiBzZXRzIHRoZSBhY3RpdmUgYml0LiBUaGlzIG11c3QgcmVsYXRlIHRvIGhhbmRsaW5nIHJlamVjdGVkIGZvbGlvcyB3aXRoaW4gdGhlIGdlbmVyYXRpb24gbG9naWMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGZvbGxvdyB0aHJvdWdoLgoKSG9sZCBvbiwgbGV0IG1lIHF1aWNrbHkgY29uZmlybSB0aGF0IGBscnV2ZWMtJmd0O2xydWdlbi5lbmFibGVkYCDigJMgdGhhdCYjMzk7cyBjcnVjaWFsLiBJJiMzOTtsbCBzZWFyY2ggZm9yIHdoZXJlIHRoYXQmIzM5O3Mgc2V0IGFuZCB1c2VkLiBJJiMzOTtsbCBzZWFyY2ggdGhlIGNvZGUgZm9yIGBscnVnZW4uZW5hYmxlZGAgb3IgYGxydV9nZW5fZW5hYmxlZCgpYC4gVGhpcyBnZW5lcmF0aW9uLWJhc2VkIExSVSBsb2dpYyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZm9saW9zIGFyZSBiZWluZyBtYW5hZ2VkLiBJJiMzOTtsbCBkaWcgZGVlcGVyIHRvIHNlZSBpZiBJIGNhbiBmaW5kIGhvdyB0aGUgc2VxdWVuY2VzIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydWdlblxcLmVuYWJsZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTUxNz1zdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXG4tLVxubW0vdm1zY2FuLmMtNTU0OS1cbm1tL3Ztc2Nhbi5jOjU1NTA6XHRcdFx0bHJ1dmVjLVx1MDAzZWxydWdlbi5lbmFibGVkID0gZW5hYmxlZDtcbm1tL3Ztc2Nhbi5jLTU1NTEtXG4tLVxubW0vdm1zY2FuLmM9NjEzNj1zdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5tbS92bXNjYW4uYy02MTU4LVx0XHQvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbm1tL3Ztc2Nhbi5jOjYxNTk6XHRcdGlmIChscnV2ZWMtXHUwMDNlbHJ1Z2VuLmVuYWJsZWQgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYy02MTYwLVx0XHQgICAgbHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MjcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2FjaGluZyBhbGdvcml0aG1zOgoKKipJbnZlc3RpZ2F0aW5nIGBscnVfZ2VuX2VuYWJsZWQoKWAqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBUaGUgY29kZSBpcyBsb29raW5nIGF0IGBscnVfZ2VuX2VuYWJsZWQoKWAuIE15IGZpcnN0IHRob3VnaHQgaXM6ICYjMzQ7V2h5IGFyZSB3ZSBjaGVja2luZyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24/JiMzNDsgSXQgaW1wbGllcyB0aGF0IHRoZSBzeXN0ZW0gaXMgY29uc2lkZXJpbmcgdGhlIHN0YXRlIG9mIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkgZ2VuZXJhdGlvbiBvciBzb21lIGZlYXR1cmUgcmVsYXRlZCB0byBMUlUgY2FjaGluZy4gVGhpcyBjb3VsZCBiZSBhbnl3aGVyZSBpbiB0aGUgc3lzdGVtOyBpdCBjb3VsZCBiZSBhIHNpbXBsZSBjaGVjayB0byBlbmFibGUgYSBwYXJ0aWN1bGFyIGNhY2hlIGluIHRoaXMgc2VjdGlvbiBvZiBjb2RlIG9yIHNvbWV0aGluZyBtb3JlIGludm9sdmVkLCBidXQgaXQgaXMgY2xlYXIgdGhhdCBMUlUgYmVoYXZpb3IgaXMgcmVsZXZhbnQgaW4gdGhlIGFyZWEgb2YgY29kZS4gCgpJIGltbWVkaWF0ZWx5IHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIElzIHRoaXMgYSBmZWF0dXJlIGZsYWc/IElzIGl0IGNvbnRyb2xsaW5nIHRoZSBhY3RpdmF0aW9uIG9mIGFuIExSVSBjYWNoZSBhbGdvcml0aG0gZm9yIHNvbWUgZGF0YSBzdHJ1Y3R1cmVzPyBJZiBzbywgd2hpY2ggb25lcz8gT3IgaXMgaXQgbW9yZSBmdW5kYW1lbnRhbDsgcGVyaGFwcyBgbHJ1X2dlbl9lbmFibGVkKClgIGlzIGJlaW5nIGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gdG8gZGVjaWRlIGlmIHdlIGV2ZW4gKnN1cHBvcnQqIExSVSBjYWNoaW5nIGF0IGFsbCBpbiB0aGlzIGN1cnJlbnQgZXhlY3V0aW9uIG9mIHRoZSBjb2RlLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBXaGF0IGlzIHRoZSBnb2FsIG9mIHRoaXMgc2VjdGlvbiBvZiBjb2RlPyBXaGF0IGlzIGl0IHRyeWluZyB0byBhY2hpZXZlPyBJcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBJcyBpdCByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBkaXNrIGNhY2hpbmcsIG9yIHNvbWUgb3RoZXIgYXJlYT8gSSBtdXN0IGludmVzdGlnYXRlIHdoYXQgKmVsc2UqIGlzIGluIHNjb3BlIHRvIGRldGVybWluZSB3aGF0IHNwZWNpZmljIGtpbmQgb2YgTFJVIGJlaGF2aW9yIGlzIGltcG9ydGFudCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX2VuYWJsZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZm9saW8uYz00MjY9dm9pZCBmb2xpb19tYXJrX2FjY2Vzc2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy00MjktXHRcdHJldHVybjtcbm1tL2ZvbGlvLmM6NDMwOlx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XG5tbS9mb2xpby5jLTQzMS1cdFx0bHJ1X2dlbl9pbmNfcmVmcyhmb2xpbyk7XG4tLVxubW0vZm9saW8uYz00NzE9dm9pZCBmb2xpb19hZGRfbHJ1KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy00ODMtXHQgKi9cbm1tL2ZvbGlvLmM6NDg0Olx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykgXHUwMDI2XHUwMDI2XG5tbS9mb2xpby5jLTQ4NS1cdCAgICBscnVfZ2VuX2luX2ZhdWx0KCkgXHUwMDI2XHUwMDI2ICEoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0MpKSB7XG4tLVxubW0vZm9saW8uYz01MzU9c3RhdGljIHZvaWQgbHJ1X2RlYWN0aXZhdGVfZmlsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9mb2xpby5jLTUzNi17XG5tbS9mb2xpby5jOjUzNzpcdGJvb2wgYWN0aXZlID0gZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIHx8IGxydV9nZW5fZW5hYmxlZCgpO1xubW0vZm9saW8uYy01MzgtXHRsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuLS1cbm1tL2ZvbGlvLmM9NTc2PXN0YXRpYyB2b2lkIGxydV9kZWFjdGl2YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTU3OS1cbm1tL2ZvbGlvLmM6NTgwOlx0aWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pIHx8ICEoZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIHx8IGxydV9nZW5fZW5hYmxlZCgpKSlcbm1tL2ZvbGlvLmMtNTgxLVx0XHRyZXR1cm47XG4tLVxubW0vZm9saW8uYz01OTI9c3RhdGljIHZvaWQgbHJ1X2xhenlmcmVlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTYwMS1cdGZvbGlvX2NsZWFyX2FjdGl2ZShmb2xpbyk7XG5tbS9mb2xpby5jOjYwMjpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcbm1tL2ZvbGlvLmMtNjAzLVx0XHRscnVfZ2VuX2NsZWFyX3JlZnMoZm9saW8pO1xuLS1cbm1tL2ZvbGlvLmM9NjcwPXZvaWQgZGVhY3RpdmF0ZV9maWxlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy02NzUtXG5tbS9mb2xpby5jOjY3NjpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgbHJ1X2dlbl9jbGVhcl9yZWZzKGZvbGlvKSlcbm1tL2ZvbGlvLmMtNjc3LVx0XHRyZXR1cm47XG4tLVxubW0vZm9saW8uYz02OTA9dm9pZCBmb2xpb19kZWFjdGl2YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy02OTQtXG5tbS9mb2xpby5jOjY5NTpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSA/IGxydV9nZW5fY2xlYXJfcmVmcyhmb2xpbykgOiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pKVxubW0vZm9saW8uYy02OTYtXHRcdHJldHVybjtcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjc4PXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTI4NS1yZXRyeTpcbm1tL21lbWNvbnRyb2wuYzoyODY6XHRcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcbm1tL21lbWNvbnRyb2wuYy0yODctXHRcdFx0bWF4X2xydV9nZW5fbWVtY2cocGFyZW50LCBuaWQpO1xuLS1cbm1tL21lbWNvbnRyb2wuYy0yOTAtXG5tbS9tZW1jb250cm9sLmM6MjkxOlx0XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpIHtcbm1tL21lbWNvbnRyb2wuYy0yOTItXHRcdFx0aWYgKCFyZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHBhcmVudCwgbmlkKSkge1xuLS1cbm1tL3JtYXAuYz05MjA9c3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtOTgzLVx0XHQgKi9cbm1tL3JtYXAuYzo5ODQ6XHRcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkgXHUwMDI2XHUwMDI2IHB2bXcucHRlKSB7XG5tbS9ybWFwLmMtOTg1LVx0XHRcdGlmIChscnVfZ2VuX2xvb2tfYXJvdW5kKFx1MDAyNnB2bXcsIG5yKSlcbi0tXG5tbS92bXNjYW4uYz0zNzA9c3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy0zODktXHQgKi9cbm1tL3Ztc2Nhbi5jOjM5MDpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcbm1tL3Ztc2Nhbi5jLTM5MS1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL3Ztc2Nhbi5jPTk0Nz1zdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS92bXNjYW4uYy05NzEtXG5tbS92bXNjYW4uYzo5NzI6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKSB7XG5tbS92bXNjYW4uYy05NzMtXHRcdGlmICghcmVmZXJlbmNlZF9wdGVzKVxuLS1cbm1tL3Ztc2Nhbi5jPTIzODM9c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMjM4OS1cbm1tL3Ztc2Nhbi5jOjIzOTA6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxubW0vdm1zY2FuLmMtMjM5MS1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jPTU1MTc9c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxuLS1cbm1tL3Ztc2Nhbi5jLTU1MjctXG5tbS92bXNjYW4uYzo1NTI4Olx0aWYgKGVuYWJsZWQgPT0gbHJ1X2dlbl9lbmFibGVkKCkpXG5tbS92bXNjYW4uYy01NTI5LVx0XHRnb3RvIHVubG9jaztcbi0tXG5tbS92bXNjYW4uYz01NjE1PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS92bXNjYW4uYy01NjQxLVxubW0vdm1zY2FuLmM6NTY0MjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGxydV9nZW5fZW5hYmxlZF9hdHRyID0gX19BVFRSX1JXKGVuYWJsZWQpO1xubW0vdm1zY2FuLmMtNTY0My1cbm1tL3Ztc2Nhbi5jPTU2NDQ9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxydV9nZW5fYXR0cnNbXSA9IHtcbm1tL3Ztc2Nhbi5jLTU2NDUtXHRcdTAwMjZscnVfZ2VuX21pbl90dGxfYXR0ci5hdHRyLFxubW0vdm1zY2FuLmM6NTY0NjpcdFx1MDAyNmxydV9nZW5fZW5hYmxlZF9hdHRyLmF0dHIsXG5tbS92bXNjYW4uYy01NjQ3LVx0TlVMTFxuLS1cbm1tL3Ztc2Nhbi5jPTYwMzA9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy02MDM3LVx0bHJ1Z2VuLVx1MDAzZW1heF9zZXEgPSBNSU5fTlJfR0VOUyAmIzQzOyAxO1xubW0vdm1zY2FuLmM6NjAzODpcdGxydWdlbi1cdTAwM2VlbmFibGVkID0gbHJ1X2dlbl9lbmFibGVkKCk7XG5tbS92bXNjYW4uYy02MDM5LVxuLS1cbm1tL3Ztc2Nhbi5jPTYxNjg9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYxNzgtXG5tbS92bXNjYW4uYzo2MTc5Olx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcbm1tL3Ztc2Nhbi5jLTYxODAtXHRcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbi0tXG5tbS92bXNjYW4uYz02NDM4PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTY0NDMtXG5tbS92bXNjYW4uYzo2NDQ0Olx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgcm9vdF9yZWNsYWltKHNjKSkge1xubW0vdm1zY2FuLmMtNjQ0NS1cdFx0bWVtc2V0KFx1MDAyNnNjLVx1MDAzZW5yLCAwLCBzaXplb2Yoc2MtXHUwMDNlbnIpKTtcbi0tXG5tbS92bXNjYW4uYz02Njk1PXN0YXRpYyB2b2lkIHNuYXBzaG90X3JlZmF1bHRzKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNjY5OS1cbm1tL3Ztc2Nhbi5jOjY3MDA6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxubW0vdm1zY2FuLmMtNjcwMS1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jPTcwNDQ9c3RhdGljIHZvaWQga3N3YXBkX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTcwNDgtXG5tbS92bXNjYW4uYzo3MDQ5Olx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIHtcbm1tL3Ztc2Nhbi5jLTcwNTAtXHRcdGxydV9nZW5fYWdlX25vZGUocGdkYXQsIHNjKTtcbi0tXG5tbS93b3JraW5nc2V0LmM9MzkyPXZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZylcbi0tXG5tbS93b3JraW5nc2V0LmMtNDA0LVxubW0vd29ya2luZ3NldC5jOjQwNTpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcbm1tL3dvcmtpbmdzZXQuYy00MDYtXHRcdHJldHVybiBscnVfZ2VuX2V2aWN0aW9uKGZvbGlvKTtcbi0tXG5tbS93b3JraW5nc2V0LmM9NDMwPWJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcbi0tXG5tbS93b3JraW5nc2V0LmMtNDQxLVxubW0vd29ya2luZ3NldC5jOjQ0MjpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSkge1xubW0vd29ya2luZ3NldC5jLTQ0My1cdFx0Ym9vbCByZWNlbnQ7XG4tLVxubW0vd29ya2luZ3NldC5jPTU0OD12b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4tLVxubW0vd29ya2luZ3NldC5jLTU1Ny1cbm1tL3dvcmtpbmdzZXQuYzo1NTg6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpIHtcbm1tL3dvcmtpbmdzZXQuYy01NTktXHRcdGxydV9nZW5fcmVmYXVsdChmb2xpbywgc2hhZG93KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyNzYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBQb3RlbnRpYWwgSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIHdpdGhpbiB0aGUgY29udGV4dCBvZiBgQ09ORklHX0xSVV9HRU5gLiBUaGUgY29kZSBpbml0aWFsbHkgY2hlY2tzIGlmIGBscnV2ZWMtJmd0O2xydWdlbi5lbmFibGVkYCBpcyBmYWxzZSwgYW5kIHNraXBzIGEgYmxvY2sgaWYgaXQmIzM5O3MgdHJ1ZS4gTm93IEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIG1haW4gbG9vcCBvZiB0aGUgZnVuY3Rpb24uCgpUaGUgdmFyaWFibGVzIEkmIzM5O20gcHJpbWFyaWx5IGNvbmNlcm5lZCB3aXRoIGhlcmUgYXJlIGBucl9zY2FubmVkYCwgYG5yX3JlY2xhaW1lZGAsIGB0b3RhbF9yZWNsYWltZWRgLCBgbnJfdGFrZW5gLCBgY2xlYW5fbGlzdGAsIGBza2lwX3JldHJ5YCwgYGlzb2xhdGVkYCBhbmQgYHN0YXRgLiBgbnJfc2Nhbm5lZGAgYW5kIGBucl90YWtlbmAgYXJlIGdldHRpbmcgdmFsdWVzIHJldHVybmVkIGZyb20gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AuIGBucl9yZWNsYWltZWRgIGlzIHRoZSByZXR1cm4gdmFsdWUgb2YgYHNocmlua19mb2xpb19saXN0YC4gSSBjYW4gc2VlIHRoYXQgYHRvdGFsX3JlY2xhaW1lZGAgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgdG8gemVybyBhbmQgYWNjdW11bGF0aW5nIGBucl9yZWNsYWltZWRgLiBUaGUgYHN0YXRgIHN0cnVjdHVyZSBpcyBnZXR0aW5nIHByb3Blcmx5IHplcm9lZCBpbnNpZGUgYHNocmlua19mb2xpb19saXN0YCwgd2hpY2ggaXMgZ29vZC4gVGhlIG90aGVyIHZhcmlhYmxlcyBhcmUgYWxzbyBpbml0aWFsaXplZC4gSXQgbG9va3MgbGlrZSBgaXNvbGF0ZWRgIGlzIGluaXRpYWxpemVkIHdpdGggYG5yX3Rha2VuYC4gYHNraXBfcmV0cnlgIGlzIGZhbHNlIGF0IHRoZSBzdGFydCBvZiB0aGUgZnVuY3Rpb24gYW5kIGlzIHNldCB0byB0cnVlIHdoZW4gdGhlIGBjbGVhbl9saXN0YCBpcyBub3QgZW1wdHkuCgpUaGUgYHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlYCBjYWxsIGxvb2tzIG9rYXksIGl0IHBhc3NlcyBhbGwgdGhlIGV4cGVjdGVkIHBhcmFtZXRlcnMgbGlrZSBgcGdkYXQtJmd0O25vZGVfaWRgLCBgbnJfc2Nhbm5lZGAsIGBucl9yZWNsYWltZWRgLCBhbmQgdGhlIGBzdGF0YCBzdHJ1Y3QuCgpOb3csIGxldCYjMzk7cyBnZXQgdG8gdGhlIG1lYXQgb2YgdGhlIGZ1bmN0aW9uLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYCBmdW5jdGlvbiB0aGF0JiMzOTtzIGNhbGxlZCBoZXJlLCBlc3BlY2lhbGx5IHRoZSBoYW5kbGluZyBvZiB0aGUgYGNsZWFuX2xpc3RgLiBUaGF0IGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZWAgbG9vcCBzZWVtcyBsaWtlIHRoZSBjb3JlIGxvZ2ljLCB3aGljaCBjdWxscyB0aGUgdW5ldmljdGFibGUgZm9saW9zLiBXaGF0JiMzOTtzIGNhdGNoaW5nIG15IGV5ZSBpcyB0aGF0IGBza2lwX3JldHJ5YCBmbGFnIGFuZCB0aGUgY29uZGl0aW9uYWwgY2hlY2sgaW5zaWRlIHRoZSBsb29wLgoKTXkgY29uY2VybiBpcyB0aGF0IGBza2lwX3JldHJ5YCBzdGFydHMgb3V0IGFzIGZhbHNlLiBUaGUgZm9saW9zIGluIHRoZSBsaXN0IGFyZSBiZWluZyBjaGVja2VkIGZvciBzcGVjaWZpYyBjb25kaXRpb25zIChgIWZvbGlvX3Rlc3RfYWN0aXZlYCwgYCFmb2xpb19tYXBwZWRgLCBgIWZvbGlvX3Rlc3RfZGlydHlgLCBhbmQgYCFmb2xpb190ZXN0X3dyaXRlYmFja2ApLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGVmZmVjdCBvZiBgc2tpcF9yZXRyeWAsIGlmIGl0IGdldHMgc2V0IHRvIHRydWUsIGJlY2F1c2UgaXQgbWVhbnMgdGhhdCBpdCBoYXMgYWxyZWFkeSBpc29sYXRlZCBhbmQgYWNjb3VudGVkIGFib3ZlLiBJZiBhbGwgb2YgdGhlc2UgdGVzdHMgcGFzcywgdGhlIGZvbGlvIGlzIG1vdmVkIHRvIGBjbGVhbl9saXN0YCwgd2hpY2ggaXMgdGhlbiBzcGxpY2VkIGJhY2sgdG8gYGZvbGlvX2xpc3RgIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AsIGFuZCB0aGUgZnVuY3Rpb24gZ29lcyB0byB0aGUgYHJldHJ5YCBsYWJlbC4KCkFuZCBub3cgSSYjMzk7dmUgaGl0IHRoZSByZWFsIGlzc3VlOiBgREVGSU5FX01JTl9TRVEobHJ1dmVjKTtgIGluc2lkZSBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYC4gVGhpcyBpcyB0aGUgdGhpbmcgSSBuZWVkIHRvIGludmVzdGlnYXRlIGluIG1vcmUgZGV0YWlsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBERUZJTkVfTUlOX1NFUWAgaXMgYW5kIHdoYXQgaXQgbWVhbnMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIExSVSBnZW5lcmF0aW9uIGNvZGUuIFRoaXMgaXMgYSBwb3RlbnRpYWwgcG9pbnQgZm9yIGludGVyYWN0aW9uLCBzbyB0aGlzIGlzIHdoZXJlIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBUaGlzIGxvb2tzIHJlbGF0ZWQgdG8gdGhlIGdlbmVyYXRpb24gb2YgdGhlIExSVSwgYnV0IGl0cyBleGFjdCBtZWNoYW5pY3MgbmVlZCBjbGFyaWZpY2F0aW9uLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBtYWNybyB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QgYW5kIGl0cyBpbXBsaWNhdGlvbnMgb24gdGhlIGZvbGlvIHN0YXRlcyBhbmQgaG93IHRoZXkmIzM5O3JlIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFRklORV9NSU5fU0VRJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTI4MTE9c3RhdGljIGJvb2wgc2hvdWxkX2NsZWFyX3BtZF95b3VuZyh2b2lkKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4MjItXG5tbS92bXNjYW4uYzoyODIzOiNkZWZpbmUgREVGSU5FX01JTl9TRVEobHJ1dmVjKVx0XHRcdFx0XHRcdFxcXG5tbS92bXNjYW4uYy0yODI0LVx0dW5zaWduZWQgbG9uZyBtaW5fc2VxW0FOT05fQU5EX0ZJTEVdID0ge1x0XHRcdFxcXG4tLVxubW0vdm1zY2FuLmM9NDExND1zdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy00MTE4LVx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYzo0MTE5Olx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTQxMjAtXG4tLVxubW0vdm1zY2FuLmM9NDMxNT1zdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy00MzIwLVx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jOjQzMjE6XHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xubW0vdm1zY2FuLmMtNDMyMi1cbi0tXG5tbS92bXNjYW4uYz00MzQ2PXN0YXRpYyBib29sIGxydXZlY19pc19yZWNsYWltYWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQzNTItXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jOjQzNTM6XHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xubW0vdm1zY2FuLmMtNDM1NC1cbi0tXG5tbS92bXNjYW4uYz01MTE0PXN0YXRpYyBib29sIHNob3VsZF9ydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsXG4tLVxubW0vdm1zY2FuLmMtNTExNi17XG5tbS92bXNjYW4uYzo1MTE3Olx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTUxMTgtXG4tLVxubW0vdm1zY2FuLmM9NTc2ND1zdGF0aWMgaW50IGxydV9nZW5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbm1tL3Ztc2Nhbi5jLTU3NzItXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xubW0vdm1zY2FuLmM6NTc3MzpcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG5tbS92bXNjYW4uYy01Nzc0LVxuLS1cbm1tL3Ztc2Nhbi5jPTU4Mzg9c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNTg0OS1cdHdoaWxlICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbm1tL3Ztc2Nhbi5jOjU4NTA6XHRcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG5tbS92bXNjYW4uYy01ODUxLVxuLS1cbm1tL3Ztc2Nhbi5jPTYxMzY9c3RhdGljIHZvaWQgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4tLVxubW0vdm1zY2FuLmMtNjE0NC0jaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jOjYxNDU6XHRcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG5tbS92bXNjYW4uYy02MTQ2LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTI1MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYERFRklORV9NSU5fU0VRKGxydXZlYylgIGluIGB2bXNjYW4uY2AqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgbmVlZCBhIHJlZnJlc2hlciBvbiB0aGUgZGVmaW5pdGlvbiBvZiBgREVGSU5FX01JTl9TRVEobHJ1dmVjKWAuIExpbmUgMjgyMywgaHVoPyBUaW1lIHRvIGp1bXAgb3ZlciB0aGVyZSBhbmQgc2VlIHdoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gS25vd2luZyB0aGUgY29udGV4dCBvZiBgdm1zY2FuLmNgLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIG1hY3JvIGlzIGxpa2VseSByZWxhdGVkIHRvIG1hbmFnaW5nIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIChMUlUpIGxpc3RzIGFuZCBtZW1vcnkgcmVjbGFpbSwgcGVyaGFwcyBkZWZpbmluZyBhIHN0cnVjdHVyZSBvciBzb21lIHNvcnQgb2YgZGF0YSBzdHJ1Y3R1cmUgcmVsYXRlZCB0byBtaW5pbXVtIHNlcXVlbmNlIG51bWJlcnMgZm9yIExSVSB2ZWN0b3JzLiBJIHdvbmRlciBpZiBpdCYjMzk7cyBhIGNvbXBpbGUtdGltZSBvcHRpbWl6YXRpb24gb3IgYSBydW50aW1lIHZhcmlhYmxlLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBhbmQgZGV0ZXJtaW5lIGl0cyBzcGVjaWZpYyB1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4MjA6XHQjZGVmaW5lIERFRklORV9NQVhfU0VRKGxydXZlYylcdFx0XHRcdFx0XHRcXFxuMjgyMTpcdFx0dW5zaWduZWQgbG9uZyBtYXhfc2VxID0gUkVBRF9PTkNFKChscnV2ZWMpLVx1MDAzZWxydWdlbi5tYXhfc2VxKVxuMjgyMjpcdFxuMjgyMzpcdCNkZWZpbmUgREVGSU5FX01JTl9TRVEobHJ1dmVjKVx0XHRcdFx0XHRcdFxcXG4yODI0Olx0XHR1bnNpZ25lZCBsb25nIG1pbl9zZXFbQU5PTl9BTkRfRklMRV0gPSB7XHRcdFx0XFxcbjI4MjU6XHRcdFx0UkVBRF9PTkNFKChscnV2ZWMpLVx1MDAzZWxydWdlbi5taW5fc2VxW0xSVV9HRU5fQU5PTl0pLFx0XFxcbjI4MjY6XHRcdFx0UkVBRF9PTkNFKChscnV2ZWMpLVx1MDAzZWxydWdlbi5taW5fc2VxW0xSVV9HRU5fRklMRV0pLFx0XFxcbjI4Mjc6XHRcdH1cbjI4Mjg6XHRcbjI4Mjk6XHQvKiBHZXQgdGhlIG1pbi9tYXggZXZpY3RhYmxlIHR5cGUgYmFzZWQgb24gc3dhcHBpbmVzcyAqL1xuMjgzMDpcdCNkZWZpbmUgbWluX3R5cGUoc3dhcHBpbmVzcykgKCEoc3dhcHBpbmVzcykpXG4yODMxOlx0I2RlZmluZSBtYXhfdHlwZShzd2FwcGluZXNzKSAoKHN3YXBwaW5lc3MpIFx1MDAzYyBTV0FQUElORVNTX0FOT05fT05MWSlcbjI4MzI6XHRcbjI4MzM6XHQjZGVmaW5lIGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpXHRcdFx0XHRcXFxuMjgzNDpcdFx0bWluKChtaW5fc2VxKVttaW5fdHlwZShzd2FwcGluZXNzKV0sIChtaW5fc2VxKVttYXhfdHlwZShzd2FwcGluZXNzKV0pXG4yODM1Olx0XG4yODM2Olx0I2RlZmluZSBmb3JfZWFjaF9nZW5fdHlwZV96b25lKGdlbiwgdHlwZSwgem9uZSlcdFx0XHRcdFxcXG4yODM3Olx0XHRmb3IgKChnZW4pID0gMDsgKGdlbikgXHUwMDNjIE1BWF9OUl9HRU5TOyAoZ2VuKSYjNDM7JiM0MzspXHRcdFx0XFxcbjI4Mzg6XHRcdFx0Zm9yICgodHlwZSkgPSAwOyAodHlwZSkgXHUwMDNjIEFOT05fQU5EX0ZJTEU7ICh0eXBlKSYjNDM7JiM0MzspXHRcXFxuMjgzOTpcdFx0XHRcdGZvciAoKHpvbmUpID0gMDsgKHpvbmUpIFx1MDAzYyBNQVhfTlJfWk9ORVM7ICh6b25lKSYjNDM7JiM0MzspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTc1CgkJCQkJCQlvdXRwdXQ6IDE5MwoJCQkJCQkJdGhvdWdodHM6IDE3OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudCBvZiBNR0xSVSBFdmljdGlvbiBMb2dpYyBSZWZhY3RvcioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpc3NlY3RpbmcgdGhpcyBwYXRjaCBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgS01TQU4uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGZvY3VzZWQgb24gdGhlIGNvZGUgY2hhbmdlcyBhbmQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBGaXJzdCwgdGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZm9saW8gZXZpY3Rpb24gbG9vcCwgbW92aW5nIGl0IGZyb20gYGV2aWN0X2ZvbGlvc2AgKE1HTFJVLXNwZWNpZmljKSB0byB0aGUgc2hhcmVkIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgIGZ1bmN0aW9uIHVzZWQgYnkgYm90aCBNR0xSVSBhbmQgdGhlIHRyYWRpdGlvbmFsIExSVS4gVGhlIG1ham9yIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhhdCBsb29wIGlzIHRoZSBjb25kaXRpb25hbCBhZGRpdGlvbiBvZiBgbHJ1dmVjLSZndDtscnVnZW4uZW5hYmxlZCAmYW1wOyZhbXA7YCB0byBhIGNoZWNrIHJlbGF0ZWQgdG8gZ2VuZXJhdGlvbi1iYXNlZCBMUlUgbG9naWMuIENydWNpYWxseSwgdGhlIGNvZGUgbm93IGFsc28gcmV0cmllcyBjbGVhbmluZyBmb2xpb3MuCgpNeSBuZXh0IHN0ZXAgaW52b2x2ZWQgcmlnb3JvdXNseSBleGFtaW5pbmcgZWFjaCBvZiB0aGUgS01TQU4gY3JpdGVyaWEgdG8gZGV0ZXJtaW5lIGlmIGBOZWVkc0tNU0FOPXRydWVgIGlzIHdhcnJhbnRlZC4gTGV0JiMzOTtzIHNlZS4uLgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyoqIE5vcGUuIFRoaXMgaXMgYWxsIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50LCBkZWVwIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBObyBkYXRhIGlzIGJlaW5nIGV4cGxpY2l0bHkgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoaXMgaXMgZW50aXJlbHkgaW50ZXJuYWwgZm9saW8vcGFnZSByZWNsYWltIGxvZ2ljLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGE/KiogT2theSwgZGlnZ2luZyBpbnRvIHRoZSB2YXJpYWJsZXMgd2l0aGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgYW5kIHRoZSBuZXcgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2A6IEkgdmVyaWZpZWQgZXZlcnl0aGluZy4gVGhlIGxpc3RzIChgZm9saW9fbGlzdGAsIGBjbGVhbl9saXN0YCkgYXJlIGFsbCBpbml0aWFsaXplZCB1c2luZyBtYWNyb3MuIFZhcmlhYmxlcyBsaWtlIGBucl9yZWNsYWltZWRgLCBgdG90YWxfcmVjbGFpbWVkYCwgYG5yX3Rha2VuYCwgYGlzb2xhdGVkYCwgYW5kIGBzdGF0YCBhcmUgcHJvcGVybHkgYXNzaWduZWQgYmVmb3JlIHVzZS4gUGFydGljdWxhcmx5IGltcG9ydGFudCwgYHN0YXRgIGlzIGJlaW5nIGV4cGxpY2l0bHkgYG1lbXNldGAmIzM5O2QgYnkgYHNocmlua19mb2xpb19saXN0KClgLiBgc2tpcF9yZXRyeWAgaXMgc2V0IHRvIGBmYWxzZWAuIEluc2lkZSBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYCwgSSBjaGVja2VkIHRoZSBgREVGSU5FX01JTl9TRVFgIGFuZCBhbGwgdGhlIGBmb2xpb18qYCBmbGFnIHRlc3RzOyBub3RoaW5nIGlzIHVzZWQgdW5pbml0aWFsaXplZC4gVGhlIGNvbmRpdGlvbmFsIG9uIGBjbGVhbl9saXN0YCBsb29rcyBjb3JyZWN0LgozLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLiBFdmVyeXRoaW5nIHNlZW1zIHRvIGJlIGluaXRpYWxpemVkIGFzIGl0JiMzOTtzIGFsbG9jYXRlZC4KNC4gICoqQm91bmRzIGNoZWNrcyBleHBvc2luZyB1bmluaXRpYWxpemVkIGRhdGE/KiogTm90aGluZyBsaWtlIHRoYXQgaGVyZS4KCk15IGNvbmNsdXNpb24gaXMgY2xlYXIuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyBuZXcgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlIGFyZSBubyBkaXJlY3QgdXNlci1zcGFjZSBjb3BpZXMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgc2xhYi9oZWFwIG9iamVjdHMuIFRoaXMgaXMgcHVyZWx5IG1lbW9yeSBtYW5hZ2VtZW50IGludGVybmFsIHJlY2xhaW0gbG9naWMuIFBvdGVudGlhbCBidWdzIHdvdWxkIG1hbmlmZXN0IGFzIExSVSBsaXN0IGNvcnJ1cHRpb24sIGFjY291bnRpbmcgaW1iYWxhbmNlcywgaW5maW5pdGUgbG9vcHMsIG9yIHBhZ2UgcmVmZXJlbmNlL3N0YXRlIGhhbmRsaW5nIGJ1Z3Mg4oCTIGlzc3VlcyBkZXRlY3RhYmxlIGJ5IGtlcm5lbCBhc3NlcnRpb25zLCBsb2NrZGVwLCBvciBLQVNBTiwgYnV0IG5vdCBLTVNBTi4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCByZW1haW4gYGZhbHNlYC4gTGV0JiMzOTtzIHBlcmZvcm0gYSBmaW5hbCByZXZpZXcgYW5kIHByZXBhcmUgdGhlIHRvb2wgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGZvbGlvIHdyaXRlYmFjayByZXRyeSBsb2dpYyBpbiB0aGUgcGFnZSByZWNsYWltIHBhdGggKG1tL3Ztc2Nhbi5jKSBieSBleHRyYWN0aW5nIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpIGZyb20gZXZpY3RfZm9saW9zKCkgYW5kIHVzaW5nIGl0IHRvIHJldHJ5IGNsZWFuIGZvbGlvcyBpbiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpLiBBbGwgbmV3IGFuZCBtb2RpZmllZCBsb2NhbCB2YXJpYWJsZXMgKGNsZWFuX2xpc3QsIHRvdGFsX3JlY2xhaW1lZCwgaXNvbGF0ZWQsIHNraXBfcmV0cnkpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIHRoZSByZWNsYWltX3N0YXQgc3RydWN0dXJlIGlzIG1lbXNldCB0byB6ZXJvIGluc2lkZSBzaHJpbmtfZm9saW9fbGlzdCgpIG9uIGVhY2ggaXRlcmF0aW9uLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3Nlcy4gQW55IHBvdGVudGlhbCByZWNsYWltIGlzc3VlcyAoZS5nLiBsaXN0IGNvcnJ1cHRpb24sIHJlZmNvdW50IG9yIHBhZ2UgZmxhZyBidWdzKSB3b3VsZCBiZSBjYXVnaHQgYnkgYXNzZXJ0aW9ucyBvciBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGZvbGlvIHdyaXRlYmFjayByZXRyeSBsb2dpYyBpbiB0aGUgcGFnZSByZWNsYWltIHBhdGggKG1tL3Ztc2Nhbi5jKSBieSBleHRyYWN0aW5nIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpIGZyb20gZXZpY3RfZm9saW9zKCkgYW5kIHVzaW5nIGl0IHRvIHJldHJ5IGNsZWFuIGZvbGlvcyBpbiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpLiBBbGwgbmV3IGFuZCBtb2RpZmllZCBsb2NhbCB2YXJpYWJsZXMgKGNsZWFuX2xpc3QsIHRvdGFsX3JlY2xhaW1lZCwgaXNvbGF0ZWQsIHNraXBfcmV0cnkpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIHRoZSByZWNsYWltX3N0YXQgc3RydWN0dXJlIGlzIG1lbXNldCB0byB6ZXJvIGluc2lkZSBzaHJpbmtfZm9saW9fbGlzdCgpIG9uIGVhY2ggaXRlcmF0aW9uLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3Nlcy4gQW55IHBvdGVudGlhbCByZWNsYWltIGlzc3VlcyAoZS5nLiBsaXN0IGNvcnJ1cHRpb24sIHJlZmNvdW50IG9yIHBhZ2UgZmxhZyBidWdzKSB3b3VsZCBiZSBjYXVnaHQgYnkgYXNzZXJ0aW9ucyBvciBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMTowNC44NTMyMTUxODFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU3MzYxMDI1NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNocmlua19pbmFjdGl2ZV9saXN0XCIsXG4gICAgXCJldmljdF9mb2xpb3NcIixcbiAgICBcImZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGZvbGlvIHdyaXRlYmFjayByZXRyeSBsb2dpYyBpbiB0aGUgcGFnZSByZWNsYWltIHBhdGggKG1tL3Ztc2Nhbi5jKSBieSBleHRyYWN0aW5nIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpIGZyb20gZXZpY3RfZm9saW9zKCkgYW5kIHVzaW5nIGl0IHRvIHJldHJ5IGNsZWFuIGZvbGlvcyBpbiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpLiBBbGwgbmV3IGFuZCBtb2RpZmllZCBsb2NhbCB2YXJpYWJsZXMgKGNsZWFuX2xpc3QsIHRvdGFsX3JlY2xhaW1lZCwgaXNvbGF0ZWQsIHNraXBfcmV0cnkpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIHRoZSByZWNsYWltX3N0YXQgc3RydWN0dXJlIGlzIG1lbXNldCB0byB6ZXJvIGluc2lkZSBzaHJpbmtfZm9saW9fbGlzdCgpIG9uIGVhY2ggaXRlcmF0aW9uLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3Nlcy4gQW55IHBvdGVudGlhbCByZWNsYWltIGlzc3VlcyAoZS5nLiBsaXN0IGNvcnJ1cHRpb24sIHJlZmNvdW50IG9yIHBhZ2UgZmxhZyBidWdzKSB3b3VsZCBiZSBjYXVnaHQgYnkgYXNzZXJ0aW9ucyBvciBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBtbS92bXNjYW4uYyBieSByZWZhY3RvcmluZyBmb2xpbyB3cml0ZWJhY2sgZGV0ZWN0aW9uIGludG8gYSBzaGFyZWQgaGVscGVyIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soKWAsIHVwZGF0aW5nIGBldmljdF9mb2xpb3MoKWAgKE11bHRpLUdlbiBMUlUpLCBhbmQgaW50cm9kdWNpbmcgYSByZXRyeSBtZWNoYW5pc20gZm9yIHdyaXR0ZW4tYmFjayBmb2xpb3MgaW4gYHNocmlua19pbmFjdGl2ZV9saXN0KClgIGFsb25nIHdpdGggdXBkYXRlZCBpc29sYXRpb24gYWNjb3VudGluZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSwgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aHMgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjE6MDQuODUzMjIwNDkxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU4OTU4NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjIyZTYxODI0YmEzZjQ5NzAxMGViNDExOGFiZWE3NjNlNDdkMGQ4NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCAxMyAxMDoyMTowMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggNTM1NGViOGQzYTA3Yi4uODBjY2Q1MTZlZjM4MCAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTE4MSw2ICsxODEsMTAgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7XFxuIFxcdHN0cnVjdCByZWNsYWltX3N0YXRlIHJlY2xhaW1fc3RhdGU7XFxuIH07XFxuIFxcbitzdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpjbGVhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbitcXHRcXHRcXHRcXHQgICAgIGludCB0eXBlLCBib29sIHNraXBfcmV0cnkpO1xcbitcXG4gI2lmZGVmIEFSQ0hfSEFTX1BSRUZFVENIV1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXFxuQEAgLTIwNjUsMTQgKzIwNjksMTYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXHRcXHRlbnVtIGxydV9saXN0IGxydSlcXG4ge1xcbiBcXHRMSVNUX0hFQUQoZm9saW9fbGlzdCk7XFxuK1xcdExJU1RfSEVBRChjbGVhbl9saXN0KTtcXG4gXFx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkO1xcbi1cXHR1bnNpZ25lZCBpbnQgbnJfcmVjbGFpbWVkID0gMDtcXG4tXFx0dW5zaWduZWQgbG9uZyBucl90YWtlbjtcXG4rXFx0dW5zaWduZWQgaW50IG5yX3JlY2xhaW1lZCwgdG90YWxfcmVjbGFpbWVkID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBucl90YWtlbiwgaXNvbGF0ZWQ7XFxuIFxcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcXG4gXFx0Ym9vbCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTtcXG4gXFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XFxuIFxcdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xcbitcXHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcXG4gXFxuIFxcdHdoaWxlICh1bmxpa2VseSh0b29fbWFueV9pc29sYXRlZChwZ2RhdCwgZmlsZSwgc2MpKSkge1xcbiBcXHRcXHRpZiAoc3RhbGxlZClcXG5AQCAtMjEwNCwyNSArMjExMCw0MiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuIFxcdGlmIChucl90YWtlbiA9PSAwKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuK1xcdGlzb2xhdGVkID0gbnJfdGFrZW47XFxuK3JldHJ5OlxcbiBcXHRucl9yZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChcXHUwMDI2Zm9saW9fbGlzdCwgcGdkYXQsIHNjLCBcXHUwMDI2c3RhdCwgZmFsc2UsXFxuIFxcdFxcdFxcdFxcdFxcdCBscnV2ZWNfbWVtY2cobHJ1dmVjKSk7XFxuK1xcdHRvdGFsX3JlY2xhaW1lZCArPSBucl9yZWNsYWltZWQ7XFxuK1xcbitcXHQvKiBSZXRyeSBwYXNzIGlzIG9ubHkgbWVhbnQgZm9yIGNsZWFuIGZvbGlvcyB3aXRob3V0IG5ldyBpc29sYXRpb24gKi9cXG4rXFx0aWYgKGlzb2xhdGVkKVxcbitcXHRcXHRoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2soaXNvbGF0ZWQsIHBnZGF0LCBzYywgXFx1MDAyNnN0YXQpO1xcbitcXHR0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19pbmFjdGl2ZShwZ2RhdC1cXHUwMDNlbm9kZV9pZCxcXG4rXFx0XFx0XFx0bnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCBcXHUwMDI2c3RhdCwgc2MtXFx1MDAzZXByaW9yaXR5LCBmaWxlKTtcXG4rXFxuK1xcdGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhcXHUwMDI2Zm9saW9fbGlzdCwgXFx1MDAyNmNsZWFuX2xpc3QsIGxydXZlYywgZmlsZSwgc2tpcF9yZXRyeSk7XFxuIFxcbiBcXHRtb3ZlX2ZvbGlvc190b19scnUoXFx1MDAyNmZvbGlvX2xpc3QpO1xcbiBcXG4gXFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHREVNT1RFX0tTV0FQRCArIHJlY2xhaW1lcl9vZmZzZXQoc2MpLFxcbiBcXHRcXHRcXHRcXHRcXHRzdGF0Lm5yX2RlbW90ZWQpO1xcbi1cXHRtb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICsgZmlsZSwgLW5yX3Rha2VuKTtcXG4gXFx0aXRlbSA9IFBHU1RFQUxfS1NXQVBEICsgcmVjbGFpbWVyX29mZnNldChzYyk7XFxuIFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCBucl9yZWNsYWltZWQpO1xcbiBcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICsgZmlsZSwgbnJfcmVjbGFpbWVkKTtcXG4tXFx0aWYgKG5yX3NjYW5uZWQgXFx1MDAzZSBucl9yZWNsYWltZWQpXFxuK1xcbitcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmNsZWFuX2xpc3QpKSB7XFxuK1xcdFxcdGxpc3Rfc3BsaWNlX2luaXQoXFx1MDAyNmNsZWFuX2xpc3QsIFxcdTAwMjZmb2xpb19saXN0KTtcXG4rXFx0XFx0c2tpcF9yZXRyeSA9IHRydWU7XFxuK1xcdFxcdC8qIFJldHJ5IGZvbGlvcyB3ZXJlIGFscmVhZHkgaXNvbGF0ZWQgYW5kIGFjY291bnRlZCBhYm92ZSAqL1xcbitcXHRcXHRpc29sYXRlZCA9IDA7XFxuK1xcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4rXFxuK1xcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyBmaWxlLCAtbnJfdGFrZW4pO1xcbitcXHRpZiAobnJfc2Nhbm5lZCBcXHUwMDNlIHRvdGFsX3JlY2xhaW1lZClcXG4gXFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gKyBmaWxlLFxcbi1cXHRcXHRcXHRcXHQgbnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7XFxuK1xcdFxcdFxcdFxcdCBucl9zY2FubmVkIC0gdG90YWxfcmVjbGFpbWVkKTtcXG4gXFxuLVxcdGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayhucl90YWtlbiwgcGdkYXQsIHNjLCBcXHUwMDI2c3RhdCk7XFxuLVxcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLFxcbi1cXHRcXHRcXHRucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFxcdTAwMjZzdGF0LCBzYy1cXHUwMDNlcHJpb3JpdHksIGZpbGUpO1xcbi1cXHRyZXR1cm4gbnJfcmVjbGFpbWVkO1xcbitcXHRyZXR1cm4gdG90YWxfcmVjbGFpbWVkO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC01MDE4LDggKzUwNDEsNiBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4ge1xcbiBcXHRMSVNUX0hFQUQobGlzdCk7XFxuIFxcdExJU1RfSEVBRChjbGVhbik7XFxuLVxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuLVxcdHN0cnVjdCBmb2xpbyAqbmV4dDtcXG4gXFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtO1xcbiBcXHRzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7XFxuIFxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XFxuQEAgLTUwNTgsMjYgKzUwNzksNyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0XFx0dHlwZV9zY2FubmVkLCByZWNsYWltZWQsIFxcdTAwMjZzdGF0LCBzYy1cXHUwMDNlcHJpb3JpdHksXFxuIFxcdFxcdFxcdHR5cGUgPyBMUlVfSU5BQ1RJVkVfRklMRSA6IExSVV9JTkFDVElWRV9BTk9OKTtcXG4gXFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGZvbGlvLCBuZXh0LCBcXHUwMDI2bGlzdCwgbHJ1KSB7XFxuLVxcdFxcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XFxuLVxcbi1cXHRcXHQvKiBtb3ZlX2ZvbGlvc190b19scnUoKSBjdWxscyB1bmV2aWN0YWJsZSBmb2xpb3MgdmlhIGZvbGlvX3B1dGJhY2tfbHJ1KCkgKi9cXG4tXFx0XFx0aWYgKCFmb2xpb19ldmljdGFibGUoZm9saW8pKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdC8qIHJldHJ5IGZvbGlvcyB0aGF0IG1heSBoYXZlIG1pc3NlZCBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqL1xcbi1cXHRcXHRpZiAoIXNraXBfcmV0cnkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcXG4tXFx0XFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2Y2xlYW4pO1xcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0LyogZG9uJ3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cXG4tXFx0XFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XFxuLVxcdFxcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxuLVxcdFxcdFxcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4rXFx0ZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKFxcdTAwMjZsaXN0LCBcXHUwMDI2Y2xlYW4sIGxydXZlYywgdHlwZSwgc2tpcF9yZXRyeSk7XFxuIFxcbiBcXHRtb3ZlX2ZvbGlvc190b19scnUoXFx1MDAyNmxpc3QpO1xcbiBcXG5AQCAtNjEyMyw2ICs2MTI1LDQ2IEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqXFxuIFxcbiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG4gXFxuKy8qKlxcbisgKiBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2sgLSBGaW5kIGFuZCBtb3ZlIHRoZSB3cml0dGVuIGJhY2sgZm9saW9zIHRvIGEgbmV3IGxpc3QuXFxuKyAqIEBsaXN0OiBmb2xpb3MgbGlzdFxcbisgKiBAY2xlYW46IHRoZSB3cml0dGVuIGJhY2sgZm9saW9zIGxpc3RcXG4rICogQGxydXZlYzogdGhlIGxydXZlY1xcbisgKiBAdHlwZTogTFJVIHR5cGUgKG9ubHkgdXNlZCBmb3IgQ09ORklHX0xSVV9HRU4pXFxuKyAqIEBza2lwX3JldHJ5OiB3aGV0aGVyIHNraXAgcmV0cnkuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpjbGVhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbitcXHRcXHRcXHRcXHQgICAgIGludCB0eXBlLCBib29sIHNraXBfcmV0cnkpXFxuK3tcXG4rXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFx0c3RydWN0IGZvbGlvICpuZXh0O1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoZm9saW8sIG5leHQsIGxpc3QsIGxydSkge1xcbisjaWZkZWYgQ09ORklHX0xSVV9HRU5cXG4rXFx0XFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG4rI2VuZGlmXFxuK1xcdFxcdC8qIG1vdmVfZm9saW9zX3RvX2xydSgpIGN1bGxzIHVuZXZpY3RhYmxlIGZvbGlvcyB2aWEgZm9saW9fcHV0YmFja19scnUoKSAqL1xcbitcXHRcXHRpZiAoIWZvbGlvX2V2aWN0YWJsZShmb2xpbykpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0LyogcmV0cnkgZm9saW9zIHRoYXQgbWF5IGhhdmUgbWlzc2VkIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXFxuK1xcdFxcdGlmICghc2tpcF9yZXRyeSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xcbitcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIGNsZWFuKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rI2lmZGVmIENPTkZJR19MUlVfR0VOXFxuK1xcdFxcdC8qIGRvbid0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXFxuK1xcdFxcdGlmIChscnV2ZWMtXFx1MDAzZWxydWdlbi5lbmFibGVkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkge1xcbitcXHRcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbitcXHRcXHRcXHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcXG4rXFx0XFx0fVxcbisjZW5kaWZcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBucltOUl9MUlVfTElTVFNdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMTowNi4zMTI5OTcyNTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjg1Mjk5Njk3MTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaHJpbmtfaW5hY3RpdmVfbGlzdFwiLFxuICAgIFwiZXZpY3RfZm9saW9zXCIsXG4gICAgXCJmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHJlY2xhaW0gbG9naWMgaW4gbW0vdm1zY2FuLmMgYnkgcmVmYWN0b3JpbmcgZm9saW8gd3JpdGViYWNrIGRldGVjdGlvbiBpbnRvIGEgc2hhcmVkIGhlbHBlciBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKClgLCB1cGRhdGluZyBgZXZpY3RfZm9saW9zKClgIChNdWx0aS1HZW4gTFJVKSwgYW5kIGludHJvZHVjaW5nIGEgcmV0cnkgbWVjaGFuaXNtIGZvciB3cml0dGVuLWJhY2sgZm9saW9zIGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpYCBhbG9uZyB3aXRoIHVwZGF0ZWQgaXNvbGF0aW9uIGFjY291bnRpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUsIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGhzIGFuZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjIyZTYxODI0YmEzZjQ5NzAxMGViNDExOGFiZWE3NjNlNDdkMGQ4NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDEwOjIxOjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggNTM1NGViOGQzYTA3Yi4uODBjY2Q1MTZlZjM4MCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTE4MSw2ICsxODEsMTAgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7XG4gXHRzdHJ1Y3QgcmVjbGFpbV9zdGF0ZSByZWNsYWltX3N0YXRlO1xuIH07XG4gXG4rc3RhdGljIHZvaWQgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmNsZWFuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4rXHRcdFx0XHQgICAgIGludCB0eXBlLCBib29sIHNraXBfcmV0cnkpO1xuK1xuICNpZmRlZiBBUkNIX0hBU19QUkVGRVRDSFdcbiBzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXG5AQCAtMjA2NSwxNCArMjA2OSwxNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRcdGVudW0gbHJ1X2xpc3QgbHJ1KVxuIHtcbiBcdExJU1RfSEVBRChmb2xpb19saXN0KTtcbitcdExJU1RfSEVBRChjbGVhbl9saXN0KTtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDtcbi1cdHVuc2lnbmVkIGludCBucl9yZWNsYWltZWQgPSAwO1xuLVx0dW5zaWduZWQgbG9uZyBucl90YWtlbjtcbitcdHVuc2lnbmVkIGludCBucl9yZWNsYWltZWQsIHRvdGFsX3JlY2xhaW1lZCA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3Rha2VuLCBpc29sYXRlZDtcbiBcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcbiBcdGJvb2wgZmlsZSA9IGlzX2ZpbGVfbHJ1KGxydSk7XG4gXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4gXHRib29sIHN0YWxsZWQgPSBmYWxzZTtcbitcdGJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlO1xuIFxuIFx0d2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYykpKSB7XG4gXHRcdGlmIChzdGFsbGVkKVxuQEAgLTIxMDQsMjUgKzIxMTAsNDIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFx0aWYgKG5yX3Rha2VuID09IDApXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0aXNvbGF0ZWQgPSBucl90YWtlbjtcbityZXRyeTpcbiBcdG5yX3JlY2xhaW1lZCA9IHNocmlua19mb2xpb19saXN0KFx1MDAyNmZvbGlvX2xpc3QsIHBnZGF0LCBzYywgXHUwMDI2c3RhdCwgZmFsc2UsXG4gXHRcdFx0XHRcdCBscnV2ZWNfbWVtY2cobHJ1dmVjKSk7XG4rXHR0b3RhbF9yZWNsYWltZWQgKz0gbnJfcmVjbGFpbWVkO1xuK1xuK1x0LyogUmV0cnkgcGFzcyBpcyBvbmx5IG1lYW50IGZvciBjbGVhbiBmb2xpb3Mgd2l0aG91dCBuZXcgaXNvbGF0aW9uICovXG4rXHRpZiAoaXNvbGF0ZWQpXG4rXHRcdGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayhpc29sYXRlZCwgcGdkYXQsIHNjLCBcdTAwMjZzdGF0KTtcbitcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LVx1MDAzZW5vZGVfaWQsXG4rXHRcdFx0bnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCBcdTAwMjZzdGF0LCBzYy1cdTAwM2Vwcmlvcml0eSwgZmlsZSk7XG4rXG4rXHRmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soXHUwMDI2Zm9saW9fbGlzdCwgXHUwMDI2Y2xlYW5fbGlzdCwgbHJ1dmVjLCBmaWxlLCBza2lwX3JldHJ5KTtcbiBcbiBcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZmb2xpb19saXN0KTtcbiBcbiBcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR0RFTU9URV9LU1dBUEQgKyByZWNsYWltZXJfb2Zmc2V0KHNjKSxcbiBcdFx0XHRcdFx0c3RhdC5ucl9kZW1vdGVkKTtcbi1cdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyBmaWxlLCAtbnJfdGFrZW4pO1xuIFx0aXRlbSA9IFBHU1RFQUxfS1NXQVBEICsgcmVjbGFpbWVyX29mZnNldChzYyk7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgaXRlbSwgbnJfcmVjbGFpbWVkKTtcbiBcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1NURUFMX0FOT04gKyBmaWxlLCBucl9yZWNsYWltZWQpO1xuLVx0aWYgKG5yX3NjYW5uZWQgXHUwMDNlIG5yX3JlY2xhaW1lZClcbitcbitcdGlmICghbGlzdF9lbXB0eShcdTAwMjZjbGVhbl9saXN0KSkge1xuK1x0XHRsaXN0X3NwbGljZV9pbml0KFx1MDAyNmNsZWFuX2xpc3QsIFx1MDAyNmZvbGlvX2xpc3QpO1xuK1x0XHRza2lwX3JldHJ5ID0gdHJ1ZTtcbitcdFx0LyogUmV0cnkgZm9saW9zIHdlcmUgYWxyZWFkeSBpc29sYXRlZCBhbmQgYWNjb3VudGVkIGFib3ZlICovXG4rXHRcdGlzb2xhdGVkID0gMDtcbitcdFx0Z290byByZXRyeTtcbitcdH1cbitcbitcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyBmaWxlLCAtbnJfdGFrZW4pO1xuK1x0aWYgKG5yX3NjYW5uZWQgXHUwMDNlIHRvdGFsX3JlY2xhaW1lZClcbiBcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gKyBmaWxlLFxuLVx0XHRcdFx0IG5yX3NjYW5uZWQgLSBucl9yZWNsYWltZWQpO1xuK1x0XHRcdFx0IG5yX3NjYW5uZWQgLSB0b3RhbF9yZWNsYWltZWQpO1xuIFxuLVx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKG5yX3Rha2VuLCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQpO1xuLVx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtXHUwMDNlbm9kZV9pZCxcbi1cdFx0XHRucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFx1MDAyNnN0YXQsIHNjLVx1MDAzZXByaW9yaXR5LCBmaWxlKTtcbi1cdHJldHVybiBucl9yZWNsYWltZWQ7XG4rXHRyZXR1cm4gdG90YWxfcmVjbGFpbWVkO1xuIH1cbiBcbiAvKlxuQEAgLTUwMTgsOCArNTA0MSw2IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIHtcbiBcdExJU1RfSEVBRChsaXN0KTtcbiBcdExJU1RfSEVBRChjbGVhbik7XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLVx0c3RydWN0IGZvbGlvICpuZXh0O1xuIFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtO1xuIFx0c3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0O1xuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcbkBAIC01MDU4LDI2ICs1MDc5LDcgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0dHlwZV9zY2FubmVkLCByZWNsYWltZWQsIFx1MDAyNnN0YXQsIHNjLVx1MDAzZXByaW9yaXR5LFxuIFx0XHRcdHR5cGUgPyBMUlVfSU5BQ1RJVkVfRklMRSA6IExSVV9JTkFDVElWRV9BTk9OKTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGZvbGlvLCBuZXh0LCBcdTAwMjZsaXN0LCBscnUpIHtcbi1cdFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcbi1cbi1cdFx0LyogbW92ZV9mb2xpb3NfdG9fbHJ1KCkgY3VsbHMgdW5ldmljdGFibGUgZm9saW9zIHZpYSBmb2xpb19wdXRiYWNrX2xydSgpICovXG4tXHRcdGlmICghZm9saW9fZXZpY3RhYmxlKGZvbGlvKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0LyogcmV0cnkgZm9saW9zIHRoYXQgbWF5IGhhdmUgbWlzc2VkIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXG4tXHRcdGlmICghc2tpcF9yZXRyeSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcbi1cdFx0XHRsaXN0X21vdmUoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZjbGVhbik7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cbi1cdFx0LyogZG9uJ3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbi1cdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XG4tXHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbi1cdFx0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbi1cdFx0fVxuLVx0fVxuK1x0ZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKFx1MDAyNmxpc3QsIFx1MDAyNmNsZWFuLCBscnV2ZWMsIHR5cGUsIHNraXBfcmV0cnkpO1xuIFxuIFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFx1MDAyNmxpc3QpO1xuIFxuQEAgLTYxMjMsNiArNjEyNSw0NiBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKlxuIFxuICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuIFxuKy8qKlxuKyAqIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayAtIEZpbmQgYW5kIG1vdmUgdGhlIHdyaXR0ZW4gYmFjayBmb2xpb3MgdG8gYSBuZXcgbGlzdC5cbisgKiBAbGlzdDogZm9saW9zIGxpc3RcbisgKiBAY2xlYW46IHRoZSB3cml0dGVuIGJhY2sgZm9saW9zIGxpc3RcbisgKiBAbHJ1dmVjOiB0aGUgbHJ1dmVjXG4rICogQHR5cGU6IExSVSB0eXBlIChvbmx5IHVzZWQgZm9yIENPTkZJR19MUlVfR0VOKVxuKyAqIEBza2lwX3JldHJ5OiB3aGV0aGVyIHNraXAgcmV0cnkuXG4rICovXG4rc3RhdGljIHZvaWQgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmNsZWFuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4rXHRcdFx0XHQgICAgIGludCB0eXBlLCBib29sIHNraXBfcmV0cnkpXG4re1xuK1x0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHN0cnVjdCBmb2xpbyAqbmV4dDtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGZvbGlvLCBuZXh0LCBsaXN0LCBscnUpIHtcbisjaWZkZWYgQ09ORklHX0xSVV9HRU5cbitcdFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcbisjZW5kaWZcbitcdFx0LyogbW92ZV9mb2xpb3NfdG9fbHJ1KCkgY3VsbHMgdW5ldmljdGFibGUgZm9saW9zIHZpYSBmb2xpb19wdXRiYWNrX2xydSgpICovXG4rXHRcdGlmICghZm9saW9fZXZpY3RhYmxlKGZvbGlvKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogcmV0cnkgZm9saW9zIHRoYXQgbWF5IGhhdmUgbWlzc2VkIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXG4rXHRcdGlmICghc2tpcF9yZXRyeSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcbitcdFx0XHRsaXN0X21vdmUoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBjbGVhbik7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbisjaWZkZWYgQ09ORklHX0xSVV9HRU5cbitcdFx0LyogZG9uJ3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbitcdFx0aWYgKGxydXZlYy1cdTAwM2VscnVnZW4uZW5hYmxlZCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XG4rXHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdFx0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbitcdFx0fVxuKyNlbmRpZlxuK1x0fVxuK31cbitcbiBzdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBucltOUl9MUlVfTElTVFNdO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjE6MDYuMzEzMDAwNTM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjcyNDUyNTkxNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYSBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiBMZXQncyBkaWcgaW4uIEl0J3MgdG91Y2hpbmcgYG1tL3Ztc2Nhbi5jYC4gQWxyaWdodCwgdGhhdCBpbW1lZGlhdGVseSBnZXRzIG15IGF0dGVudGlvbiDigJMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBpcyBhIHByZXR0eSBqdWljeSB0YXJnZXQhIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWluZyBjaGFuZ2VkIGhlcmUuIFRpbWUgdG8gbG9vayBhdCB0aGUgZGlmZi4gSSdsbCBwcm9iYWJseSBmaXJlIHVwIGdyZXBwZXIgb3IganVzdCB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuXG5cbkknbGwgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgYXJvdW5kIHRoZSBtb2RpZmljYXRpb25zLiBMZXQncyBzZWUuLi4gdGhlIGRpZmYgaW52b2x2ZXMgYHNocmlua19pbmFjdGl2ZV9saXN0YCAobGluZXMgMjA2NS0yMTUwKSwgYGV2aWN0X2ZvbGlvc2AgKGFyb3VuZCA1MDE4LTUwODApLCBhbmQgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AgKGFyb3VuZCA2MTI1KS4gSSBzaG91bGQgZ2V0IHRob3NlIHBhZ2VzIGZyb20gYG1tL3Ztc2Nhbi5jYCB3aXRoIGByZWFkLWZpbGVgIGFuZCBjYXJlZnVsbHkgYW5hbHl6ZSB0aGVzZSBzZWN0aW9ucy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGNvZGUgaXMgY2hhbmdlZCBhbmQgdGhlIGFyZWFzIGFmZmVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODg1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjE6MzMuNTU4MjYxODA4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNjUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwNjU6XFx0ICogb2YgcmVjbGFpbWVkIHBhZ2VzXFxuMjA2NjpcXHQgKi9cXG4yMDY3OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG4yMDY4OlxcdFxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuMjA2OTpcXHRcXHRcXHRlbnVtIGxydV9saXN0IGxydSlcXG4yMDcwOlxcdHtcXG4yMDcxOlxcdFxcdExJU1RfSEVBRChmb2xpb19saXN0KTtcXG4yMDcyOlxcdFxcdExJU1RfSEVBRChjbGVhbl9saXN0KTtcXG4yMDczOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDtcXG4yMDc0OlxcdFxcdHVuc2lnbmVkIGludCBucl9yZWNsYWltZWQsIHRvdGFsX3JlY2xhaW1lZCA9IDA7XFxuMjA3NTpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3Rha2VuLCBpc29sYXRlZDtcXG4yMDc2OlxcdFxcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcXG4yMDc3OlxcdFxcdGJvb2wgZmlsZSA9IGlzX2ZpbGVfbHJ1KGxydSk7XFxuMjA3ODpcXHRcXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07XFxuMjA3OTpcXHRcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XFxuMjA4MDpcXHRcXHRib29sIHN0YWxsZWQgPSBmYWxzZTtcXG4yMDgxOlxcdFxcdGJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlO1xcbjIwODI6XFx0XFxuMjA4MzpcXHRcXHR3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHtcXG4yMDg0OlxcdFxcdFxcdGlmIChzdGFsbGVkKVxcbjIwODU6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjA4NjpcXHRcXG4yMDg3OlxcdFxcdFxcdC8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovXFxuMjA4ODpcXHRcXHRcXHRzdGFsbGVkID0gdHJ1ZTtcXG4yMDg5OlxcdFxcdFxcdHJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7XFxuMjA5MDpcXHRcXG4yMDkxOlxcdFxcdFxcdC8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi9cXG4yMDkyOlxcdFxcdFxcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG4yMDkzOlxcdFxcdFxcdFxcdHJldHVybiBTV0FQX0NMVVNURVJfTUFYO1xcbjIwOTQ6XFx0XFx0fVxcbjIwOTU6XFx0XFxuMjA5NjpcXHRcXHRscnVfYWRkX2RyYWluKCk7XFxuMjA5NzpcXHRcXG4yMDk4OlxcdFxcdGxydXZlY19sb2NrX2lycShscnV2ZWMpO1xcbjIwOTk6XFx0XFxuMjEwMDpcXHRcXHRucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIFxcdTAwMjZmb2xpb19saXN0LFxcbjIxMDE6XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2bnJfc2Nhbm5lZCwgc2MsIGxydSk7XFxuMjEwMjpcXHRcXG4yMTAzOlxcdFxcdF9fbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIGZpbGUsIG5yX3Rha2VuKTtcXG4yMTA0OlxcdFxcdGl0ZW0gPSBQR1NDQU5fS1NXQVBEICsgcmVjbGFpbWVyX29mZnNldChzYyk7XFxuMjEwNTpcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgaXRlbSwgbnJfc2Nhbm5lZCk7XFxuMjEwNjpcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTQ0FOX0FOT04gKyBmaWxlLCBucl9zY2FubmVkKTtcXG4yMTA3OlxcdFxcbjIxMDg6XFx0XFx0bHJ1dmVjX3VubG9ja19pcnEobHJ1dmVjKTtcXG4yMTA5OlxcdFxcbjIxMTA6XFx0XFx0aWYgKG5yX3Rha2VuID09IDApXFxuMjExMTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yMTEyOlxcdFxcbjIxMTM6XFx0XFx0aXNvbGF0ZWQgPSBucl90YWtlbjtcXG4yMTE0OlxcdHJldHJ5OlxcbjIxMTU6XFx0XFx0bnJfcmVjbGFpbWVkID0gc2hyaW5rX2ZvbGlvX2xpc3QoXFx1MDAyNmZvbGlvX2xpc3QsIHBnZGF0LCBzYywgXFx1MDAyNnN0YXQsIGZhbHNlLFxcbjIxMTY6XFx0XFx0XFx0XFx0XFx0XFx0IGxydXZlY19tZW1jZyhscnV2ZWMpKTtcXG4yMTE3OlxcdFxcdHRvdGFsX3JlY2xhaW1lZCArPSBucl9yZWNsYWltZWQ7XFxuMjExODpcXHRcXG4yMTE5OlxcdFxcdC8qIFJldHJ5IHBhc3MgaXMgb25seSBtZWFudCBmb3IgY2xlYW4gZm9saW9zIHdpdGhvdXQgbmV3IGlzb2xhdGlvbiAqL1xcbjIxMjA6XFx0XFx0aWYgKGlzb2xhdGVkKVxcbjIxMjE6XFx0XFx0XFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFxcdTAwMjZzdGF0KTtcXG4yMTIyOlxcdFxcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLFxcbjIxMjM6XFx0XFx0XFx0XFx0bnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCBcXHUwMDI2c3RhdCwgc2MtXFx1MDAzZXByaW9yaXR5LCBmaWxlKTtcXG4yMTI0OlxcdFxcbjIxMjU6XFx0XFx0ZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKFxcdTAwMjZmb2xpb19saXN0LCBcXHUwMDI2Y2xlYW5fbGlzdCwgbHJ1dmVjLCBmaWxlLCBza2lwX3JldHJ5KTtcXG4yMTI2OlxcdFxcbjIxMjc6XFx0XFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFxcdTAwMjZmb2xpb19saXN0KTtcXG4yMTI4OlxcdFxcbjIxMjk6XFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHREVNT1RFX0tTV0FQRCArIHJlY2xhaW1lcl9vZmZzZXQoc2MpLFxcbjIxMzA6XFx0XFx0XFx0XFx0XFx0XFx0c3RhdC5ucl9kZW1vdGVkKTtcXG4yMTMxOlxcdFxcdGl0ZW0gPSBQR1NURUFMX0tTV0FQRCArIHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xcbjIxMzI6XFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIG5yX3JlY2xhaW1lZCk7XFxuMjEzMzpcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICsgZmlsZSwgbnJfcmVjbGFpbWVkKTtcXG4yMTM0OlxcdFxcbjIxMzU6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZjbGVhbl9saXN0KSkge1xcbjIxMzY6XFx0XFx0XFx0bGlzdF9zcGxpY2VfaW5pdChcXHUwMDI2Y2xlYW5fbGlzdCwgXFx1MDAyNmZvbGlvX2xpc3QpO1xcbjIxMzc6XFx0XFx0XFx0c2tpcF9yZXRyeSA9IHRydWU7XFxuMjEzODpcXHRcXHRcXHQvKiBSZXRyeSBmb2xpb3Mgd2VyZSBhbHJlYWR5IGlzb2xhdGVkIGFuZCBhY2NvdW50ZWQgYWJvdmUgKi9cXG4yMTM5OlxcdFxcdFxcdGlzb2xhdGVkID0gMDtcXG4yMTQwOlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjE0MTpcXHRcXHR9XFxuMjE0MjpcXHRcXG4yMTQzOlxcdFxcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyBmaWxlLCAtbnJfdGFrZW4pO1xcbjIxNDQ6XFx0XFx0aWYgKG5yX3NjYW5uZWQgXFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjIxOjMzLjU1ODY5NDI2OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUyOTEwNDY2ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IFByb2NlZHVyZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgZXZpY3RfZm9saW9zYCBhbmQgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHdlIGhhbmRsZSBtZW1vcnkgcHJlc3N1cmUgYW5kIHRoZSBtZWNoYW5pY3Mgb2YgcGFnZSByZWNsYW1hdGlvbi4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgaG93IHRoZXNlIHJvdXRpbmVzIGludGVyYWN0IGFuZCBob3cgZWZmaWNpZW50bHkgdGhleSdyZSBpZGVudGlmeWluZyBhbmQgcHJvY2Vzc2luZyBkaXJ0eSBwYWdlcy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGhldXJpc3RpY3MgdGhleSBlbXBsb3kgYW5kIHdoZXRoZXIgdGhleSdyZSB3ZWxsLXR1bmVkIHRvIG91ciB3b3JrbG9hZCdzIGNoYXJhY3RlcmlzdGljcy4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgaW5lZmZpY2llbmNpZXMgaW4gdGhlaXIgaW1wbGVtZW50YXRpb24sIGNvbnNpZGVyaW5nIHRoaW5ncyBsaWtlIGxvY2sgY29udGVudGlvbiwgY2FjaGUgbGluZSBlZmZlY3RzLCBhbmQgdGhlIG92ZXJhbGwgb3ZlcmhlYWQgYXNzb2NpYXRlZCB3aXRoIHBhZ2UgdGFibGUgbWFuYWdlbWVudC4gSSdtIGFsc28gY3VyaW91cyBhYm91dCB0aGUgY3JpdGVyaWEgdXNlZCB0byBkZXRlcm1pbmUgd2hlbiBhIGZvbGlvIGlzIFwid3JpdHRlbiBiYWNrXCIgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgZGVjaXNpb25zIG9uIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjY2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMTozOC44NDk3NDMyMDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTU3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTA2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTA2MDpcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmxpc3QsIFxcdTAwMjZpc29sYXRlZCwgXFx1MDAyNnR5cGUsIFxcdTAwMjZ0eXBlX3NjYW5uZWQpO1xcbjUwNjE6XFx0XFx0bnJfaXNvbGF0ZWQgPSBpc29sYXRlZDtcXG41MDYyOlxcdFxcbjUwNjM6XFx0XFx0LyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi9cXG41MDY0OlxcdFxcdGlmIChzY2FubmVkKVxcbjUwNjU6XFx0XFx0XFx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XFxuNTA2NjpcXHRcXG41MDY3OlxcdFxcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XFxuNTA2ODpcXHRcXG41MDY5OlxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZsaXN0KSlcXG41MDcwOlxcdFxcdFxcdHJldHVybiBzY2FubmVkO1xcbjUwNzE6XFx0cmV0cnk6XFxuNTA3MjpcXHRcXHRyZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChcXHUwMDI2bGlzdCwgcGdkYXQsIHNjLCBcXHUwMDI2c3RhdCwgZmFsc2UsIG1lbWNnKTtcXG41MDczOlxcdFxcdHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgKz0gcmVjbGFpbWVkO1xcbjUwNzQ6XFx0XFx0dG90YWxfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG41MDc1OlxcdFxcdC8qIFJldHJ5IHBhc3MgaXMgb25seSBtZWFudCBmb3IgY2xlYW4gZm9saW9zIHdpdGhvdXQgbmV3IGlzb2xhdGlvbiAqL1xcbjUwNzY6XFx0XFx0aWYgKGlzb2xhdGVkKVxcbjUwNzc6XFx0XFx0XFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFxcdTAwMjZzdGF0KTtcXG41MDc4OlxcdFxcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLFxcbjUwNzk6XFx0XFx0XFx0XFx0dHlwZV9zY2FubmVkLCByZWNsYWltZWQsIFxcdTAwMjZzdGF0LCBzYy1cXHUwMDNlcHJpb3JpdHksXFxuNTA4MDpcXHRcXHRcXHRcXHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XFxuNTA4MTpcXHRcXG41MDgyOlxcdFxcdGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhcXHUwMDI2bGlzdCwgXFx1MDAyNmNsZWFuLCBscnV2ZWMsIHR5cGUsIHNraXBfcmV0cnkpO1xcbjUwODM6XFx0XFxuNTA4NDpcXHRcXHRtb3ZlX2ZvbGlvc190b19scnUoXFx1MDAyNmxpc3QpO1xcbjUwODU6XFx0XFxuNTA4NjpcXHRcXHR3YWxrID0gY3VycmVudC1cXHUwMDNlcmVjbGFpbV9zdGF0ZS1cXHUwMDNlbW1fd2FsaztcXG41MDg3OlxcdFxcdGlmICh3YWxrIFxcdTAwMjZcXHUwMDI2IHdhbGstXFx1MDAzZWJhdGNoZWQpIHtcXG41MDg4OlxcdFxcdFxcdHdhbGstXFx1MDAzZWxydXZlYyA9IGxydXZlYztcXG41MDg5OlxcdFxcdFxcdHJlc2V0X2JhdGNoX3NpemUod2Fsayk7XFxuNTA5MDpcXHRcXHR9XFxuNTA5MTpcXHRcXG41MDkyOlxcdFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR0RFTU9URV9LU1dBUEQgKyByZWNsYWltZXJfb2Zmc2V0KHNjKSxcXG41MDkzOlxcdFxcdFxcdFxcdFxcdFxcdHN0YXQubnJfZGVtb3RlZCk7XFxuNTA5NDpcXHRcXG41MDk1OlxcdFxcdGl0ZW0gPSBQR1NURUFMX0tTV0FQRCArIHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xcbjUwOTY6XFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIHJlY2xhaW1lZCk7XFxuNTA5NzpcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICsgdHlwZSwgcmVjbGFpbWVkKTtcXG41MDk4OlxcdFxcbjUwOTk6XFx0XFx0bGlzdF9zcGxpY2VfaW5pdChcXHUwMDI2Y2xlYW4sIFxcdTAwMjZsaXN0KTtcXG41MTAwOlxcdFxcbjUxMDE6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZsaXN0KSkge1xcbjUxMDI6XFx0XFx0XFx0c2tpcF9yZXRyeSA9IHRydWU7XFxuNTEwMzpcXHRcXHRcXHRpc29sYXRlZCA9IDA7XFxuNTEwNDpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjUxMDU6XFx0XFx0fVxcbjUxMDY6XFx0XFxuNTEwNzpcXHRcXHRpZiAobnJfaXNvbGF0ZWQgXFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXFxuNTEwODpcXHRcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIHR5cGUsXFxuNTEwOTpcXHRcXHRcXHRcXHRcXHQgbnJfaXNvbGF0ZWQgLSB0b3RhbF9yZWNsYWltZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMTozOC44NTAxNDEwNjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjg5NDk3NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AgaW4gbW0vdm1zY2FuLmMqKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgSSBuZWVkIHRvIHpvb20gaW4gb24gYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AuIFRoZSBmaWxlIGFuZCBsaW5lIG51bWJlciBhcmUgc29saWQgc3RhcnRpbmcgcG9pbnRzIOKAkyBgbW0vdm1zY2FuLmNgIGFyb3VuZCBsaW5lIDYxMjUuIFRoaXMgZnVuY3Rpb24gaXMgY2xlYXJseSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGRpcnR5IHBhZ2VzIHRoYXQgYXJlIHdhaXRpbmcgdG8gYmUgd3JpdHRlbiBiYWNrIHRvIGRpc2suIEkgYmV0IGl0J3MgaW52b2x2ZWQgaW4gaWRlbnRpZnlpbmcgd2hpY2ggZm9saW9zIGFyZSBjYW5kaWRhdGVzIGZvciB3cml0ZWJhY2ssIGxpa2VseSBkdXJpbmcgYSByZWNsYWltIG9yIHNjYW5uaW5nIG9wZXJhdGlvbi4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjcml0ZXJpYSBpdCB1c2VzIHRvIHNlbGVjdCB0aGVzZSBmb2xpb3MsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYmFja2luZyBzdG9yYWdlLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycy4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUgY3J1Y2lhbCBmb3Igb3B0aW1pemluZyBtZW1vcnkgbWFuYWdlbWVudCBiZWhhdmlvciBhbmQgcG90ZW50aWFsbHkgZGlhZ25vc2luZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyByZWxhdGVkIHRvIEkvTyBhbmQgcGFnZSByZWNsYWltLiBJIHNob3VsZCBwcm9iYWJseSBwYXkgYXR0ZW50aW9uIHRvIGFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZSB3cml0ZWJhY2sgdGhyZWFkcyBvciB3b3JrcXVldWVzIGFzIHdlbGwuIEtub3dpbmcgd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFjY2Vzc2VkIGhlcmUgbWlnaHQgYWxzbyBiZSBlbmxpZ2h0ZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjIxOjQxLjUzOTY0MDUxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTI1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MTI1OlxcdFxcbjYxMjY6XFx0I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuNjEyNzpcXHRcXG42MTI4OlxcdC8qKlxcbjYxMjk6XFx0ICogZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrIC0gRmluZCBhbmQgbW92ZSB0aGUgd3JpdHRlbiBiYWNrIGZvbGlvcyB0byBhIG5ldyBsaXN0LlxcbjYxMzA6XFx0ICogQGxpc3Q6IGZvbGlvcyBsaXN0XFxuNjEzMTpcXHQgKiBAY2xlYW46IHRoZSB3cml0dGVuIGJhY2sgZm9saW9zIGxpc3RcXG42MTMyOlxcdCAqIEBscnV2ZWM6IHRoZSBscnV2ZWNcXG42MTMzOlxcdCAqIEB0eXBlOiBMUlUgdHlwZSAob25seSB1c2VkIGZvciBDT05GSUdfTFJVX0dFTilcXG42MTM0OlxcdCAqIEBza2lwX3JldHJ5OiB3aGV0aGVyIHNraXAgcmV0cnkuXFxuNjEzNTpcXHQgKi9cXG42MTM2OlxcdHN0YXRpYyB2b2lkIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbjYxMzc6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpjbGVhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbjYxMzg6XFx0XFx0XFx0XFx0XFx0ICAgICBpbnQgdHlwZSwgYm9vbCBza2lwX3JldHJ5KVxcbjYxMzk6XFx0e1xcbjYxNDA6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG42MTQxOlxcdFxcdHN0cnVjdCBmb2xpbyAqbmV4dDtcXG42MTQyOlxcdFxcbjYxNDM6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoZm9saW8sIG5leHQsIGxpc3QsIGxydSkge1xcbjYxNDQ6XFx0I2lmZGVmIENPTkZJR19MUlVfR0VOXFxuNjE0NTpcXHRcXHRcXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xcbjYxNDY6XFx0I2VuZGlmXFxuNjE0NzpcXHRcXHRcXHQvKiBtb3ZlX2ZvbGlvc190b19scnUoKSBjdWxscyB1bmV2aWN0YWJsZSBmb2xpb3MgdmlhIGZvbGlvX3B1dGJhY2tfbHJ1KCkgKi9cXG42MTQ4OlxcdFxcdFxcdGlmICghZm9saW9fZXZpY3RhYmxlKGZvbGlvKSlcXG42MTQ5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjYxNTA6XFx0XFxuNjE1MTpcXHRcXHRcXHQvKiByZXRyeSBmb2xpb3MgdGhhdCBtYXkgaGF2ZSBtaXNzZWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cXG42MTUyOlxcdFxcdFxcdGlmICghc2tpcF9yZXRyeSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuNjE1MzpcXHRcXHRcXHQgICAgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcXG42MTU0OlxcdFxcdFxcdFxcdGxpc3RfbW92ZShcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgY2xlYW4pO1xcbjYxNTU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNjE1NjpcXHRcXHRcXHR9XFxuNjE1NzpcXHQjaWZkZWYgQ09ORklHX0xSVV9HRU5cXG42MTU4OlxcdFxcdFxcdC8qIGRvbid0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXFxuNjE1OTpcXHRcXHRcXHRpZiAobHJ1dmVjLVxcdTAwM2VscnVnZW4uZW5hYmxlZCBcXHUwMDI2XFx1MDAyNlxcbjYxNjA6XFx0XFx0XFx0ICAgIGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XFxuNjE2MTpcXHRcXHRcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbjYxNjI6XFx0XFx0XFx0XFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XFxuNjE2MzpcXHRcXHRcXHR9XFxuNjE2NDpcXHQjZW5kaWZcXG42MTY1OlxcdFxcdH1cXG42MTY2OlxcdH1cXG42MTY3OlxcdFxcbjYxNjg6XFx0c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbjYxNjk6XFx0e1xcbjYxNzA6XFx0XFx0dW5zaWduZWQgbG9uZyBucltOUl9MUlVfTElTVFNdO1xcbjYxNzE6XFx0XFx0dW5zaWduZWQgbG9uZyB0YXJnZXRzW05SX0xSVV9MSVNUU107XFxuNjE3MjpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW47XFxuNjE3MzpcXHRcXHRlbnVtIGxydV9saXN0IGxydTtcXG42MTc0OlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjE6NDEuNTM5OTEzMTY1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzYwNjgzOTE1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBJIGNhbid0IGRpcmVjdGx5IGNoZWNrIHRoZSBnaXQgbG9nLCBidXQgdGhlIHByb3ZpZGVkIGRpZmYgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNlZSB0aGF0IGEgbmV3IGhlbHBlciBmdW5jdGlvbiwgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpYCwgaXMgYmVpbmcgaW50cm9kdWNlZC4gSW50cmlndWluZy5cblxuTXkgZXhwZXJ0IGludHVpdGlvbiBpbW1lZGlhdGVseSBraWNrcyBpbiBhbmQgcmVtaW5kcyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24ncyBwbGFjZW1lbnQgaXMgaW50ZXJlc3RpbmcuIEkgcmVjYWxsIHRoYXQgc2ltaWxhciBsb2dpYyB3YXMgcHJldmlvdXNseSBpbmxpbmVkIHdpdGhpbiB0aGUgTUdMUlUgY29kZSwgc3BlY2lmaWNhbGx5IGluIGBldmljdF9mb2xpb3NgLiBTbywgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIGdlbmVyYWxpemluZyB0aGlzIHJldHJ5IGJlaGF2aW9yIGZvciB3cml0dGVuLWJhY2sgZm9saW9zLiBQcmV2aW91c2x5IHRoaXMgZnVuY3Rpb25hbGl0eSB3YXMgYWxyZWFkeSBoYW5kbGVkIGluIGBldmljdF9mb2xpb3NgLlxuXG5Mb29raW5nIGRlZXBlciwgSSBzZWUgdGhlIHJldHJ5IG1lY2hhbmlzbSBpcyBub3cgYmVpbmcgYWRkZWQgdG8gYHNocmlua19pbmFjdGl2ZV9saXN0YCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgdHJhZGl0aW9uYWwgYWN0aXZlL2luYWN0aXZlIExSVSByZWNsYWltIHByb2Nlc3MuIFByZXZpb3VzbHksIGEgcmV0cnkgbG9vcCBmb3Igd3JpdHRlbi1iYWNrIGZvbGlvcyB3YXNuJ3QgcHJlc2VudCB0aGVyZSwgbWVhbmluZyB0aGlzIGlzIGEgbm9uLXRyaXZpYWwgY2hhbmdlLiBUaGUgcGF0Y2ggYWJzdHJhY3RzIHRoZSBjb21tb24gbG9naWMgaW50byBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYCwgc28gYm90aCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYCBjYW4gdXNlIHRoZSBjb2RlLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gbWVtb3J5IHJlY2xhbWF0aW9uIGJlaGF2aW9yIGluIGBtbS92bXNjYW4uY2AuXG5cbk1lbW9yeSByZWNsYW1hdGlvbiBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGFuZCB0aGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBkaXJlY3RseS4gQWNjb3JkaW5nIHRvIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMsIHRoYXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgXCJXb3J0aEZ1enppbmcgPSB0cnVlXCIgZmxhZy4gVGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGNvZGUgYW5kIGl0J3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhhdCdzIGEgY2xlYXIgcG9zaXRpdmUgY3JpdGVyaW9uLlxuXG5Ob3csIEkgbmVlZCB0byBjb25zaWRlciBgRW5hYmxlQ29uZmlnc2AuIElzIHRoaXMgZnVuY3Rpb25hbGl0eSBndWFyZGVkIGJ5IHNwZWNpZmljIGBDT05GSUdfYCBvcHRpb25zPyBJIG5lZWQgdG8gY2hlY2sgaG93IGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgIGFuZCBgZXZpY3RfZm9saW9zYCBhcmUgY29tcGlsZWQuIEkgY2FuIHF1aWNrbHkgZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGluIGBtbS92bXNjYW4uY2AuIEkgbmVlZCB0byBncmVwIGZvciBgQ09ORklHYCBkaXJlY3RpdmVzIGluIHRoYXQgYXJlYSBvZiB0aGUgY29kZSB0byB1bmRlcnN0YW5kIGlmIGl0J3MgYWx3YXlzIGluY2x1ZGVkIG9yIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIFNhbWUgZm9yIGBldmljdF9mb2xpb3NgIGFuZCBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIHRoaXMgY29kZSBwYXRoIGlzIGFsd2F5cyBhdmFpbGFibGUgb3IgcmVxdWlyZXMgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb24gdG8gYmUgZW5hYmxlZCwgd2hpY2ggd2lsbCBiZSBpbXBvcnRhbnQgdG8gY29tbXVuaWNhdGUgaW4gdGhlIGZ1enplciBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODYzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjIxOjQ5LjE0Njc1NTEzM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3MjQxNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX2luYWN0aXZlX2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9MjAyNT1zdGF0aWMgdm9pZCBoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2sodW5zaWduZWQgbG9uZyBucl90YWtlbixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIwNjMtLypcXG5tbS92bXNjYW4uYzoyMDY0OiAqIHNocmlua19pbmFjdGl2ZV9saXN0KCkgaXMgYSBoZWxwZXIgZm9yIHNocmlua19ub2RlKCkuICBJdCByZXR1cm5zIHRoZSBudW1iZXJcXG5tbS92bXNjYW4uYy0yMDY1LSAqIG9mIHJlY2xhaW1lZCBwYWdlc1xcbm1tL3Ztc2Nhbi5jLTIwNjYtICovXFxubW0vdm1zY2FuLmM6MjA2NzpzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxubW0vdm1zY2FuLmMtMjA2OC1cXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmM9MjMxNT1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfbGlzdChlbnVtIGxydV9saXN0IGxydSwgdW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbi0tXFxubW0vdm1zY2FuLmMtMjMyNS1cXG5tbS92bXNjYW4uYzoyMzI2OlxcdHJldHVybiBzaHJpbmtfaW5hY3RpdmVfbGlzdChucl90b19zY2FuLCBscnV2ZWMsIHNjLCBscnUpO1xcbm1tL3Ztc2Nhbi5jLTIzMjctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMTo0OS4xOTU0ODE5MTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM1NTM0NDI2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipEaWdnaW5nIGludG8gSW5hY3RpdmUgTGlzdCBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbnRvIHRoaXMgYHNocmlua19pbmFjdGl2ZV9saXN0YCBmdW5jdGlvbi4gSSdtIGdldHRpbmcgYSBmZWVsaW5nIHRoYXQgaXRzIGJlaGF2aW9yIG1pZ2h0IGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIHBvdGVudGlhbGx5IHVzaW5nIHNvbWUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGNvdWxkIGJlIHJlbGF0ZWQgdG8gc29tZSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBvciBmZWF0dXJlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRocm91Z2ggYG1tL3Ztc2Nhbi5jYCwgZm9jdXNpbmcgb24gdGhlIGFyZWEgYXJvdW5kIHRoZSAyMDAwIHRvIDIwNjcgbGluZSByYW5nZS4gVGhhdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBgI2lmZGVmYCBibG9ja3Mgb3Igb3RoZXIgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBtaWdodCBiZSBjb250cm9sbGluZyB0aGUgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkuIEl0J3MgYSBmYWlybHkgc3BlY2lmaWMgYXJlYSB0byBjaGVjaywgc28gaG9wZWZ1bGx5IEkgd29uJ3QgaGF2ZSB0byBzcGVuZCB0b28gbXVjaCB0aW1lIG9uIGl0LiBJJ20gbG9va2luZyBmb3IgYSBjbGVhciBleHBsYW5hdGlvbiBvZiBob3cgdGhpcyBpcyBjb250cm9sbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk4NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjIxOjUxLjU1MDgyODg5N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjk3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAyMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAyMDpcXHRzdGF0aWMgaW50IGN1cnJlbnRfbWF5X3Rocm90dGxlKHZvaWQpXFxuMjAyMTpcXHR7XFxuMjAyMjpcXHRcXHRyZXR1cm4gIShjdXJyZW50LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBGX0xPQ0FMX1RIUk9UVExFKTtcXG4yMDIzOlxcdH1cXG4yMDI0OlxcdFxcbjIwMjU6XFx0c3RhdGljIHZvaWQgaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4sXFxuMjAyNjpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuMjAyNzpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbjIwMjg6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcmVjbGFpbV9zdGF0ICpzdGF0KVxcbjIwMjk6XFx0e1xcbjIwMzA6XFx0XFx0LypcXG4yMDMxOlxcdFxcdCAqIElmIGRpcnR5IGZvbGlvcyBhcmUgc2Nhbm5lZCB0aGF0IGFyZSBub3QgcXVldWVkIGZvciBJTywgaXRcXG4yMDMyOlxcdFxcdCAqIGltcGxpZXMgdGhhdCBmbHVzaGVycyBhcmUgbm90IGRvaW5nIHRoZWlyIGpvYi4gVGhpcyBjYW5cXG4yMDMzOlxcdFxcdCAqIGhhcHBlbiB3aGVuIG1lbW9yeSBwcmVzc3VyZSBwdXNoZXMgZGlydHkgZm9saW9zIHRvIHRoZSBlbmQgb2ZcXG4yMDM0OlxcdFxcdCAqIHRoZSBMUlUgYmVmb3JlIHRoZSBkaXJ0eSBsaW1pdHMgYXJlIGJyZWFjaGVkIGFuZCB0aGUgZGlydHlcXG4yMDM1OlxcdFxcdCAqIGRhdGEgaGFzIGV4cGlyZWQuIEl0IGNhbiBhbHNvIGhhcHBlbiB3aGVuIHRoZSBwcm9wb3J0aW9uIG9mXFxuMjAzNjpcXHRcXHQgKiBkaXJ0eSBmb2xpb3MgZ3Jvd3Mgbm90IHRocm91Z2ggd3JpdGVzIGJ1dCB0aHJvdWdoIG1lbW9yeVxcbjIwMzc6XFx0XFx0ICogcHJlc3N1cmUgcmVjbGFpbWluZyBhbGwgdGhlIGNsZWFuIGNhY2hlLiBBbmQgaW4gc29tZSBjYXNlcyxcXG4yMDM4OlxcdFxcdCAqIHRoZSBmbHVzaGVycyBzaW1wbHkgY2Fubm90IGtlZXAgdXAgd2l0aCB0aGUgYWxsb2NhdGlvblxcbjIwMzk6XFx0XFx0ICogcmF0ZS4gTnVkZ2UgdGhlIGZsdXNoZXIgdGhyZWFkcyBpbiBjYXNlIHRoZXkgYXJlIGFzbGVlcC5cXG4yMDQwOlxcdFxcdCAqL1xcbjIwNDE6XFx0XFx0aWYgKHN0YXQtXFx1MDAzZW5yX3VucXVldWVkX2RpcnR5ID09IG5yX3Rha2VuKSB7XFxuMjA0MjpcXHRcXHRcXHR3YWtldXBfZmx1c2hlcl90aHJlYWRzKFdCX1JFQVNPTl9WTVNDQU4pO1xcbjIwNDM6XFx0XFx0XFx0LypcXG4yMDQ0OlxcdFxcdFxcdCAqIEZvciBjZ3JvdXB2MSBkaXJ0eSB0aHJvdHRsaW5nIGlzIGFjaGlldmVkIGJ5IHdha2luZyB1cFxcbjIwNDU6XFx0XFx0XFx0ICogdGhlIGtlcm5lbCBmbHVzaGVyIGhlcmUgYW5kIGxhdGVyIHdhaXRpbmcgb24gZm9saW9zXFxuMjA0NjpcXHRcXHRcXHQgKiB3aGljaCBhcmUgaW4gd3JpdGViYWNrIHRvIGZpbmlzaCAoc2VlIHNocmlua19mb2xpb19saXN0KCkpLlxcbjIwNDc6XFx0XFx0XFx0ICpcXG4yMDQ4OlxcdFxcdFxcdCAqIEZsdXNoZXIgbWF5IG5vdCBiZSBhYmxlIHRvIGlzc3VlIHdyaXRlYmFjayBxdWlja2x5XFxuMjA0OTpcXHRcXHRcXHQgKiBlbm91Z2ggZm9yIGNncm91cHYxIHdyaXRlYmFjayB0aHJvdHRsaW5nIHRvIHdvcmtcXG4yMDUwOlxcdFxcdFxcdCAqIG9uIGEgbGFyZ2Ugc3lzdGVtLlxcbjIwNTE6XFx0XFx0XFx0ICovXFxuMjA1MjpcXHRcXHRcXHRpZiAoIXdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc2MpKVxcbjIwNTM6XFx0XFx0XFx0XFx0cmVjbGFpbV90aHJvdHRsZShwZ2RhdCwgVk1TQ0FOX1RIUk9UVExFX1dSSVRFQkFDSyk7XFxuMjA1NDpcXHRcXHR9XFxuMjA1NTpcXHRcXG4yMDU2OlxcdFxcdHNjLVxcdTAwM2Vuci5kaXJ0eSArPSBzdGF0LVxcdTAwM2Vucl9kaXJ0eTtcXG4yMDU3OlxcdFxcdHNjLVxcdTAwM2Vuci5jb25nZXN0ZWQgKz0gc3RhdC1cXHUwMDNlbnJfY29uZ2VzdGVkO1xcbjIwNTg6XFx0XFx0c2MtXFx1MDAzZW5yLndyaXRlYmFjayArPSBzdGF0LVxcdTAwM2Vucl93cml0ZWJhY2s7XFxuMjA1OTpcXHRcXHRzYy1cXHUwMDNlbnIuaW1tZWRpYXRlICs9IHN0YXQtXFx1MDAzZW5yX2ltbWVkaWF0ZTtcXG4yMDYwOlxcdFxcdHNjLVxcdTAwM2Vuci50YWtlbiArPSBucl90YWtlbjtcXG4yMDYxOlxcdH1cXG4yMDYyOlxcdFxcbjIwNjM6XFx0LypcXG4yMDY0OlxcdCAqIHNocmlua19pbmFjdGl2ZV9saXN0KCkgaXMgYSBoZWxwZXIgZm9yIHNocmlua19ub2RlKCkuICBJdCByZXR1cm5zIHRoZSBudW1iZXJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjE6NTEuNTUxMTYwNTg3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzNTc3Mjg4MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaXZpbmcgaW50byBMUlUgUGFnZSBSZWNsYWltIExvZ2ljKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYHNocmlua19pbmFjdGl2ZV9saXN0KClgIGhlcmUuIFRoYXQncyB0aGUgYnJlYWQtYW5kLWJ1dHRlciBMUlUgcGFnZSByZWNsYWltIGZ1bmN0aW9uLCBhbHdheXMgY29tcGlsZWQgaW4sIHBhcnQgb2YgdGhlIHN0YW5kYXJkIG1lbW9yeSBtYW5hZ2VtZW50IGNvcmUsIHNpdHRpbmcgcmlnaHQgdGhlcmUgaW4gYHZtbGludXhgLiBOb3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnksIHRoYXQncyB3aGF0IEknZCBleHBlY3QuIEJ1dCB0aGVuIG15IGV5ZSBjYXRjaGVzIGBldmljdF9mb2xpb3NgLiBIbW0sIHdhaXQgYSBtaW51dGUuLi4gdGhhdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQhIEl0J3MgZ3VhcmRlZCBieSBhIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gLiBOb3cgdGhhdCdzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQgY29udGV4dCB0aGlzIGZ1bmN0aW9uIGlzIG9wZXJhdGluZyBpbi4gV2hlcmUgZG9lcyB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGNvbWUgaW50byBwbGF5PyBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgdGhhdCBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBpcyBsb2NhdGVkIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBHb3R0YSB0cmFjZSB0aGlzIGJhY2sgdG8gdGhlIGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgY29kZSBwYXRoIHRoYXQgaW5jbHVkZXMgdGhlIGZvbGlvIGV2aWN0aW9uIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk5MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjE6NTMuOTA4ODkyNDQ4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ2OTI5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz05MDM9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTkwOC1cXG5tbS92bXNjYW4uYzo5MDk6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtOTEwLS8qXFxuLS1cXG5tbS92bXNjYW4uYz05NDE9c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbi0tXFxubW0vdm1zY2FuLmMtOTQ0LX1cXG5tbS92bXNjYW4uYzo5NDU6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtOTQ2LVxcbi0tXFxubW0vdm1zY2FuLmM9Mjc4Mz1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjc5NC1cXG5tbS92bXNjYW4uYzoyNzk1OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTI3OTYtXFxubW0vdm1zY2FuLmM9Mjc5Nz1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYzoyNzk4OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmMtMjc5OS1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5ODM9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXFxuLS1cXG5tbS92bXNjYW4uYy0zMDAyLVxcbm1tL3Ztc2Nhbi5jOjMwMDM6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxcbm1tL3Ztc2Nhbi5jLTMwMDQtXFxuLS1cXG5tbS92bXNjYW4uYz0zMTEyPXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMzE0MC1cXG5tbS92bXNjYW4uYzozMTQxOiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cXG5tbS92bXNjYW4uYy0zMTQyLVxcbi0tXFxubW0vdm1zY2FuLmM9NjEwNz1sYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XFxubW0vdm1zY2FuLmMtNjEwOC1cXG5tbS92bXNjYW4uYzo2MTA5OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTYxMTAtXFxuLS1cXG5tbS92bXNjYW4uYz02MTIxPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MTI1LVxcbm1tL3Ztc2Nhbi5jOjYxMjY6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtNjEyNy1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxMzItICogQGxydXZlYzogdGhlIGxydXZlY1xcbm1tL3Ztc2Nhbi5jOjYxMzM6ICogQHR5cGU6IExSVSB0eXBlIChvbmx5IHVzZWQgZm9yIENPTkZJR19MUlVfR0VOKVxcbm1tL3Ztc2Nhbi5jLTYxMzQtICogQHNraXBfcmV0cnk6IHdoZXRoZXIgc2tpcCByZXRyeS5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTYxMzY9c3RhdGljIHZvaWQgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy02MTQzLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGZvbGlvLCBuZXh0LCBsaXN0LCBscnUpIHtcXG5tbS92bXNjYW4uYzo2MTQ0OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTYxNDUtXFx0XFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxNTYtXFx0XFx0fVxcbm1tL3Ztc2Nhbi5jOjYxNTc6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtNjE1OC1cXHRcXHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMTo1My45NTkzNjc0MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MDU2ODg1MjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTFJVIEdlbmVyYXRpb24gQ29kZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AsIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBzY2F0dGVyZWQgdGhyb3VnaG91dC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBjaGVjayBpZiBgZXZpY3RfZm9saW9zYCwgd2hpY2ggaXMgKmFsc28qIHVuZGVyIHRoZSBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jaywgaXMgc29tZWhvdyBpbnRlcnR3aW5lZCB3aXRoIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAuIEJ1dCBubywgYHNocmlua19pbmFjdGl2ZV9saXN0YCBpcyB0aGUgc3RhbmRhcmQgYWN0aXZlL2luYWN0aXZlIExSVSByZWNsYWltLCBzbyBpdCBpcyBzZXBhcmF0ZS5cblxuSG93ZXZlciwgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AgKml0c2VsZiogaXMgZGVmaW5lZCBvdXRzaWRlIHRoZSBjb25kaXRpb25hbCBibG9jayDigJMgaXQncyBhZnRlciB0aGUgYCNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL2Agb24gbGluZSA2MTI2LiBJbnRyaWd1aW5nLiBCdXQgd2l0aGluIHRoaXMgZnVuY3Rpb24sIHRoZXJlIGFyZSBzZWN0aW9ucyB0aGF0ICphcmUqIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYENPTkZJR19MUlVfR0VOYC4gSSBzZWUgY29kZSBibG9ja3MgbGlrZSB0aGlzOlxuXG5gYGBjXG4jaWZkZWYgQ09ORklHX0xSVV9HRU5cblx0XHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuI2VuZGlmXG4uLi5cbiNpZmRlZiBDT05GSUdfTFJVX0dFTlxuXHRcdC8qIGRvbid0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG5cdFx0aWYgKGxydXZlYy1cdTAwM2VscnVnZW4uZW5hYmxlZCBcdTAwMjZcdTAwMjZcblx0XHQgICAgbHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcblx0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG5cdFx0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcblx0XHR9XG4jZW5kaWZcbmBgYFxuXG5BbmQgdGhlbiBJJ20gcmVtaW5kZWQgdGhhdCBgZXZpY3RfZm9saW9zYCB3YXMgbW9kaWZpZWQgYXMgd2VsbCwgYW5kIHRoYXQgaXMgdW5kZXIgdGhlIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIGJsb2NrLiBUaGlzIGlzIGEgYml0IGNvbmZ1c2luZy4gSXMgTFJVIGdlbmVyYXRpb24gZXZlbiBlbmFibGVkIGJ5IGRlZmF1bHQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgQ09ORklHX0xSVV9HRU5gIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzLiBMZXQgbWUgc2VhcmNoIGZvciBgY29uZmlnIExSVV9HRU5gIGluIGBtbS9LY29uZmlnYCB0byBnZXQgdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjU3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjIxOjU4LjAxNjI1NTEyOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI5MjI5NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM4OD1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTEzOTgtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjEzOTk6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDAtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQwNy1cXG5tbS9LY29uZmlnOjE0MDg6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQwOS1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxMy1cXG5tbS9LY29uZmlnOjE0MTQ6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MTUtXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDIyLVxcbm1tL0tjb25maWc6MTQyMzpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjQtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMTo1OC4wNjkxODM4ODlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjg1MDEyMjY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2NvbmZpZyBvZiBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSBhaW1pbmcgZm9yIGFyb3VuZCBsaW5lIDEzOTguIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBbKioqWW91IHdvdWxkIGFkZCB0aGUgc3BlY2lmaWMgdG9waWMgb3IgZmVhdHVyZSB5b3UgYXJlIGludGVyZXN0ZWQgaW4gaGVyZSBiYXNlZCBvbiB5b3VyIGV4cGVydGlzZS4gRm9yIGV4YW1wbGU6IFwiTlVNQSBiYWxhbmNpbmcsXCIgXCJrZXJuZWwgY29tcGFjdGlvbixcIiBcIm1lbW9yeSBob3RwbHVnLFwiIGV0Yy4qXHUwMDNjL3N0cm9uZ1x1MDAzZV0uIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dCwgYW5kIGRlZmF1bHQgdmFsdWVzIGZvciB0aG9zZSBvcHRpb25zLCBhbG9uZyB3aXRoIGFueSBwb3RlbnRpYWxseSByZWxldmFudCBjb21tZW50cy4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBjbHVlcyBhYm91dCBob3cgdGhlc2UgZmVhdHVyZXMgaW50ZXJhY3Qgd2l0aCBvdGhlcnMuIEnigJltIHRoaW5raW5nIEnigJlsbCB1c2UgbXkga25vd2xlZGdlIHRvIHRyeSBhbmQgYW50aWNpcGF0ZSB0aGUgZmxvdyBvZiBsb2dpYyBmcm9tIHRoZXJlLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueXRoaW5nIHJlbGF0ZWQgdG8gWyoqKllvdSB3b3VsZCBhZGQgYSBzcGVjaWZpYyBjb25jZXJuIG9yIGludGVyZXN0IGJhc2VkIG9uIHRoZSBjb250ZXh0LiBGb3IgZXhhbXBsZTogXCJwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsXCIgXCJzZWN1cml0eSBjb25zaWRlcmF0aW9ucyxcIiBcInNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQsXCIgZXRjLipcdTAwM2Mvc3Ryb25nXHUwMDNlXS4gSG9wZWZ1bGx5LCB0aGUgS2NvbmZpZyB3aWxsIGlsbHVtaW5hdGUgc29tZSBvZiB0aG9zZSBkZXRhaWxzLCB3aGljaCBhcmUgb2Z0ZW4ga2V5LiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGluIHRoZXJlLiBJJ20gcmVhZHkgdG8gZmluZCBvdXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mjg2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjI6MDAuOTE5MzA4NjExWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzOTgsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzOTg6XFx0IyBtdWx0aS1nZW4gTFJVIHtcXG4xMzk5OlxcdGNvbmZpZyBMUlVfR0VOXFxuMTQwMDpcXHRcXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbjE0MDE6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4xNDAyOlxcdFxcdCMgbWFrZSBzdXJlIGZvbGlvLVxcdTAwM2VmbGFncyBoYXMgZW5vdWdoIHNwYXJlIGJpdHNcXG4xNDAzOlxcdFxcdGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUFxcbjE0MDQ6XFx0XFx0aGVscFxcbjE0MDU6XFx0XFx0ICBBIGhpZ2ggcGVyZm9ybWFuY2UgTFJVIGltcGxlbWVudGF0aW9uIHRvIG92ZXJjb21taXQgbWVtb3J5LiBTZWVcXG4xNDA2OlxcdFxcdCAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzLlxcbjE0MDc6XFx0XFxuMTQwODpcXHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxuMTQwOTpcXHRcXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4xNDEwOlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbjE0MTE6XFx0XFx0aGVscFxcbjE0MTI6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtdWx0aS1nZW4gTFJVIGJ5IGRlZmF1bHQuXFxuMTQxMzpcXHRcXG4xNDE0OlxcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXFxuMTQxNTpcXHRcXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuMTQxNjpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDE3OlxcdFxcdGhlbHBcXG4xNDE4OlxcdFxcdCAgRG8gbm90IGVuYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IHBsYW4gdG8gbG9vayBhdCBoaXN0b3JpY2FsIHN0YXRzXFxuMTQxOTpcXHRcXHQgIGZyb20gZXZpY3RlZCBnZW5lcmF0aW9ucyBmb3IgZGVidWdnaW5nIHB1cnBvc2UuXFxuMTQyMDpcXHRcXG4xNDIxOlxcdFxcdCAgVGhpcyBvcHRpb24gaGFzIGEgcGVyLW1lbWNnIGFuZCBwZXItbm9kZSBtZW1vcnkgb3ZlcmhlYWQuXFxuMTQyMjpcXHRcXG4xNDIzOlxcdGNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbjE0MjQ6XFx0XFx0ZGVmX2Jvb2wgeVxcbjE0MjU6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xcbjE0MjY6XFx0IyB9XFxuMTQyNzpcXHRcXG4xNDI4OlxcdGNvbmZpZyBMT0NLX01NX0FORF9GSU5EX1ZNQVxcbjE0Mjk6XFx0XFx0Ym9vbFxcbjE0MzA6XFx0XFx0ZGVwZW5kcyBvbiAhU1RBQ0tfR1JPV1NVUFxcbjE0MzE6XFx0XFxuMTQzMjpcXHRjb25maWcgSU9NTVVfTU1fREFUQVxcbjE0MzM6XFx0XFx0Ym9vbFxcbjE0MzQ6XFx0XFxuMTQzNTpcXHRjb25maWcgRVhFQ01FTVxcbjE0MzY6XFx0XFx0Ym9vbFxcbjE0Mzc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjIyOjAwLjkxOTQxMTYwMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2OTc1MjU4NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IERlZXAgRGl2ZSBpbnRvIE11bHRpLUdlbiBMUlUgYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIE11bHRpLUdlbiBMUlUgc3R1ZmYuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19MUlVfR0VOYCBpcyB0aGUga2V5IGVuYWJsZXIsIGFuZCBpdCdzIGVzc2VudGlhbCBiZWNhdXNlIGl0IGVuYWJsZXMgdGhpbmdzIGxpa2UgYGV2aWN0X2ZvbGlvc2AsIHdoaWNoIEkgc2VlIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX0xSVV9HRU5gIGlzIHNldC4gQWxzbywgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpYCBoYXMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gYENPTkZJR19MUlVfR0VOYC4gSSdtIHN0YXJ0aW5nIHRvIGdldCB0aGUgcGljdHVyZS4gRXZlbiB0aG91Z2ggYHNocmlua19pbmFjdGl2ZV9saXN0YCBpcyBjb21waWxlZCByZWdhcmRsZXNzLCB3aGVuIGBMUlVfR0VOYCBpcyBlbmFibGVkIGF0IHJ1bnRpbWUsIGl0IGNhbGxzIGBscnVfZ2VuX3Nocmlua19ub2RlKClgIGluc3RlYWQsIHNvIGNsZWFybHkgYENPTkZJR19MUlVfR0VOYCBkcml2ZXMgdGhlIE1HTFJVIGJlaGF2aW9yLlxuXG5SaWdodCwgc28gdG8gbWFrZSBzdXJlIEknbSBmb2xsb3dpbmcgdGhpcywgZW5hYmxpbmcgYExSVV9HRU5gIGlzICpyZXF1aXJlZCogZm9yIGJvdGggYGV2aWN0X2ZvbGlvc2AgYW5kIHRoZSBNR0xSVS1zcGVjaWZpYyBjb2RlIHdpdGhpbiBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKClgLiBJdOKAmXMgbGlrZSB0aGUgZm91bmRhdGlvbiBmb3IgdGhpcyB3aG9sZSBmZWF0dXJlLiBPa2F5LCBzaG91bGQgdGhpcyBiZSBpbiBgRW5hYmxlQ29uZmlnc2A/XG5cblllcywgYExSVV9HRU5gIGVuYWJsZXMgYm90aCBgZXZpY3RfZm9saW9zYCBhbmQgdGhlIGBDT05GSUdfTFJVX0dFTmAgcGF0aHMgaW4gYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpYC5cblxuSG9sZCBvbiwgaXMgYExSVV9HRU5gIGV2ZW4gZW5hYmxlZCBieSBkZWZhdWx0PyBDaGVja2luZyB0aGUgY29uZmlnLCBpdOKAmXMgYSBib29sZWFuIHdpdGggbm8gZGVmYXVsdC4gVGhhdCBtZWFucyBpdCBoYXMgdG8gYmUgZXhwbGljaXRseSBzZXQuIFNvLCBgTFJVX0dFTmAgKGFuZCBwb3RlbnRpYWxseSBgTFJVX0dFTl9FTkFCTEVEYCkgaXMgbmVlZGVkIHRvIGV2ZW4gY29tcGlsZSBhbmQgcmVhY2ggYGV2aWN0X2ZvbGlvc2AhIFRoaXMgaXMgY3JpdGljYWwuXG5cbkFscmlnaHQsIHdoYXQgb3RoZXIgY29uZmlncyBhcmUgaW52b2x2ZWQ/IExldCdzIHNlZSB3aGF0IGBMUlVfR0VOYCBkZXBlbmRzIG9uLiBJdCBsb29rcyBsaWtlIGl0IG5lZWRzIGBNTVVgIGFuZCBhIGJpdCBvZiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3R1ZmYgKGA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQYCkuIE9uIGFtZDY0LCB0aGF0J3Mgbm90IGEgY29uY2Vybi4gU28sIGBMUlVfR0VOYCBpcyB0aGUgY29uZmlnIG9wdGlvbiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cbk5vdywgYWJvdXQgRm9jdXNTeW1ib2xzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1wb3J0YW50IGZ1bmN0aW9ucy4gTGV0J3Mgc2VlOlxuXG4xLiAgYHNocmlua19pbmFjdGl2ZV9saXN0YCAtIFRoaXMgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYG1tL3Ztc2Nhbi5jYCB0aGF0J3MgYmVlbiBtb2RpZmllZCB0byBoYW5kbGUgY2xlYW4gZm9saW9zLlxuMi4gIGBldmljdF9mb2xpb3NgIC0gQWxzbyBpbiBgbW0vdm1zY2FuLmNgLCBhbmQgaXQncyBiZWVuIGFsdGVyZWQgdG8gdXNlIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgLlxuMy4gIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgIC0gQW5kIGZpbmFsbHksIGEgbmV3IHN0YXRpYyBmdW5jdGlvbiBpbiBgbW0vdm1zY2FuLmNgLlxuXG5XYWl0LCBhcmUgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucz8gWWVzLCB0aGV5IGFyZSFcblxuYHN0YXRpYyB2b2lkIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayguLi4pYFxuYHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KC4uLilgXG5gc3RhdGljIGludCBldmljdF9mb2xpb3MoLi4uKWBcblxuQXJlIHRoZXNlIGZ1bmN0aW9ucyBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgb3IgZG8gdGhleSBleGlzdCBhcyBhY3R1YWwgc3ltYm9scz8gSSBuZWVkIHRvIGtub3cgdGhlaXIgY2FsbGVycy4gVGhhdOKAmXMgd2hlcmUgdGhlIFwiRm9jdXNTeW1ib2xzXCIgZ3VpZGFuY2UgY29tZXMgaW4gaGFuZHkuIEl0IGRpZmZlcmVudGlhdGVzIGJldHdlZW4gY29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIGluIGhlYWRlcnMgKC5oKSBhbmQgdGhvc2UgZGVmaW5lZCBpbiAuYyBmaWxlcy4gVGhlIGd1aWRhbmNlIHN1Z2dlc3RzIGZvY3VzaW5nIG9uICpub24tc3RhdGljKiBjYWxsZXIgZnVuY3Rpb25zIHRoYXQgZXhlcmNpc2UgdGhlc2UgaW5saW5lIGhlbHBlcnMuXG5cblNvLCBzaW5jZSB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSBpbiBhIGAuY2AgZmlsZSwgdGhleSAqdXN1YWxseSogaGF2ZSBzeW1ib2xzLCBlc3BlY2lhbGx5IGluIEtBU0FOL2Z1enppbmcgYnVpbGRzLCBsaWtlIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgYW5kIGBldmljdF9mb2xpb3NgLiBJIHdpbGwgbmVlZCB0byBjaGVjayB3aGV0aGVyIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgIGlzIGlubGluZWQgYnkgR0NDLiBIb3dldmVyLCBFdmVuIGlmIGl0J3MgaW5saW5lZCwgSSBjYW4gc3BlY2lmeSB0aGUgZnVuY3Rpb25zIEknbSBpbnRlcmVzdGVkIGluLCBvciB0aGVpciBkaXJlY3QgY2FsbGVycyBpZiBhcHByb3ByaWF0ZSFcblxuSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgY2FsbGVycyBvZiBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYCBpbiBgbW0vdm1zY2FuLmNgLiBUaGlzIGlzIHRoZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTQwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjI6MDcuODk0NjcyOTAxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzUyNDcwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfaW5hY3RpdmVfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0yMDI1PXN0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxcbi0tXFxubW0vdm1zY2FuLmMtMjA2My0vKlxcbm1tL3Ztc2Nhbi5jOjIwNjQ6ICogc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5rX25vZGUoKS4gIEl0IHJldHVybnMgdGhlIG51bWJlclxcbm1tL3Ztc2Nhbi5jLTIwNjUtICogb2YgcmVjbGFpbWVkIHBhZ2VzXFxubW0vdm1zY2FuLmMtMjA2Ni0gKi9cXG5tbS92bXNjYW4uYzoyMDY3OnN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy0yMDY4LVxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYz0yMzE1PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19saXN0KGVudW0gbHJ1X2xpc3QgbHJ1LCB1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuLS1cXG5tbS92bXNjYW4uYy0yMzI1LVxcbm1tL3Ztc2Nhbi5jOjIzMjY6XFx0cmV0dXJuIHNocmlua19pbmFjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIGxydSk7XFxubW0vdm1zY2FuLmMtMjMyNy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjIyOjA3Ljk0MjIwMjEyM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTk5NTY3NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHNocmlua19saXN0YCBhbmQgYGV2aWN0X2ZvbGlvc2AgQ2FsbGVycyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBzaHJpbmtfbGlzdGAgYW5kIGBldmljdF9mb2xpb3NgLiBUaGUgZmlyc3Qgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byB0cmFjZSB0aGVpciBjYWxsIHNpdGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hvKiBpcyBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyBhbmQsIGp1c3QgYXMgaW1wb3J0YW50bHksICp3aHkqLiBLbm93aW5nIHRoZSB1cHN0cmVhbSBsb2dpYyB3aWxsIHByb3ZpZGUgYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gaW50ZXJwcmV0IHdoYXQgaXMgaGFwcGVuaW5nIGluc2lkZS4gV2hhdCBtb2R1bGVzLCBzdWJzeXN0ZW1zLCBvciB0aHJlYWRzIGFyZSByZWx5aW5nIG9uIHRoZWlyIGJlaGF2aW9yPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIGNydWNpYWwgcGFydCBvZiBtZW1vcnkgbWFuYWdlbWVudCBvciBzb21ldGhpbmcgYW5jaWxsYXJ5PyBUaGlzIGluZm9ybWF0aW9uIGlzIGVzc2VudGlhbCBmb3IgZXZlbiBnZXR0aW5nIHN0YXJ0ZWQgaW4gdW5kZXJzdGFuZGluZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBwb3RlbnRpYWwgYnVncy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxNjEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMjoxMC4xNDE3NzI1NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4OTI2OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19saXN0XFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NzY9c3RydWN0IHNjYW5fY29udHJvbCB7XFxubW0vdm1zY2FuLmM6Nzc6XFx0LyogSG93IG1hbnkgcGFnZXMgc2hyaW5rX2xpc3QoKSBzaG91bGQgcmVjbGFpbSAqL1xcbm1tL3Ztc2Nhbi5jLTc4LVxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTIyODI9dW5zaWduZWQgbG9uZyByZWNsYWltX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXFxuLS1cXG5tbS92bXNjYW4uYy0yMzE0LVxcbm1tL3Ztc2Nhbi5jOjIzMTU6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy0yMzE2LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmM9NjE2OD1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MjE2LVxcbm1tL3Ztc2Nhbi5jOjYyMTc6XFx0XFx0XFx0XFx0bnJfcmVjbGFpbWVkICs9IHNocmlua19saXN0KGxydSwgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy02MjE4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBscnV2ZWMsIHNjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjI6MTAuMzAwNzA2NzU0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYyNjk3MzIzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCwgZm9jdXNpbmcgb24gdGhlIGNvcmUgY29uY2VwdCBhbmQgYXNzdW1pbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbnNpZGVyaW5nIHRoZSBgZXZpY3RfZm9saW9zYCBGdW5jdGlvbiBDYWxsKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgY2FsbHMgdG8gYGV2aWN0X2ZvbGlvc2AuIFRoaXMgZnVuY3Rpb24gY2FsbCBpcyBrZXkgaGVyZS4gRXNzZW50aWFsbHksIHdoZW5ldmVyIEkgc2VlIGBldmljdF9mb2xpb3NgLCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IG1lbW9yeSBwcmVzc3VyZSBhbmQgY2FjaGUgbWFuYWdlbWVudC4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtZSwgaXQncyBhYm91dCByZWNsYWltaW5nIHBoeXNpY2FsIG1lbW9yeSBvY2N1cGllZCBieSBwYWdlIGZyYW1lcyAoZm9saW9zKSB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggYSBjYWNoZSBvZiBzb21lIHNvcnQuXG5cblRoZSBjb250ZXh0IG9mICp3aGVuKiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBpcyBjcnVjaWFsLiBJcyBpdCB0cmlnZ2VyZWQgYnkgZXhwbGljaXQgcmVxdWVzdHMgZm9yIG1lbW9yeSByZWNsYW1hdGlvbiwgbGlrZSBhIGxvdyBtZW1vcnkgc2lnbmFsIGZyb20gdGhlIE9TPyBPciwgaXMgaXQgbW9yZSBwcm9hY3RpdmUsIHBhcnQgb2YgYSBiYWNrZ3JvdW5kIHByb2Nlc3MgdHJ5aW5nIHRvIG1haW50YWluIGEgZGVzaXJlZCBsZXZlbCBvZiBmcmVlIG1lbW9yeT8gSXMgaXQgcmVhY3RpbmcgdG8gdGhlIHVzYWdlIG9mIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYW5kIHJlYWN0aW5nIGJhc2VkIG9uIGhvdyBtZW1vcnkgaXMgdXRpbGl6ZWQgYnkgb3RoZXJzPyBFaXRoZXIgd2F5IGl0IHdpbGwgZGljdGF0ZSB3aGF0IHRyYWRlLW9mZnMgYXJlIGJlaW5nIGNvbnNpZGVyZWQuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdHJpZ2dlcnMgdGhlIGV2aWN0aW9uLiBJcyBpdCBMUlUtYmFzZWQ/IElzIGl0IHRpZWQgdG8gc3BlY2lmaWMgdHlwZXMgb2YgbWVtb3J5IHBhZ2VzIChlLmcuLCBhbm9ueW1vdXMgcGFnZXMsIGZpbGUtYmFja2VkIHBhZ2VzLCBvciBodWdlIHBhZ2VzKT8gV2hhdCdzIHRoZSBldmljdGlvbiBwb2xpY3k/IElzIHRoZXJlIGEgZmFpcm5lc3MgY29uc2lkZXJhdGlvbj9cblxuQmV5b25kIHRoYXQsIEknbSB0aGlua2luZyBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBFdmljdGluZyBwYWdlcyB0byBkaXNrIChpZiBpdCdzIG5vdCBhIG1lbW9yeS1vbmx5IGNhY2hlKSBpcyBhIGNvc3RseSBvcGVyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb3N0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGV2aWN0aW9uLiBIb3cgYXJlIHRoZSBmb2xpbyBjb250ZW50cyBoYW5kbGVkPyBBcmUgdGhlcmUgZGlydHkgcGFnZXM/IFdoYXQgYWJvdXQgVExCIGludmFsaWRhdGlvbj8gSXMgdGhlIGV2aWN0aW9uIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cz9cblxuVGhlIG92ZXJhbGwgZ29hbCBvZiBgZXZpY3RfZm9saW9zYCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBzeXN0ZW0gY29tcG9uZW50cywgaXMgd2hhdCBJIG5lZWQgdG8gc2VlIHRvIGtub3cgaG93IHRvIGltcHJvdmUgcGVyZm9ybWFuY2Ugb3IgdG8gZGV0ZXJtaW5lIGlmIHRoZSBsb2dpYyBpcyBzYWZlLlxuXG5TbyB0aGUgY2FsbCBpdHNlbGYsIGFuZCBhbGwgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljIHdpbGwgZ3VpZGUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjU3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMjoxNi41NzA0NDEyMTZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Njg3NTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV2aWN0X2ZvbGlvc1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ5OTU9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwMzgtXFxubW0vdm1zY2FuLmM6NTAzOTpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy01MDQwLVxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxOTc9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyMjAtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTIyMTpcXHRcXHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTIyMi1cXHRcXHRpZiAoIWRlbHRhKVxcbi0tXFxubW0vdm1zY2FuLmM9NTgzOD1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4NTgtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xcbm1tL3Ztc2Nhbi5jOjU4NTk6XFx0XFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxcbm1tL3Ztc2Nhbi5jLTU4NjAtXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjIyOjE2LjYyMDEzNzA5OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDEwOTQ0Mjg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBUaGVzZSBQYXRjaCBNb2RpZmljYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIHBhdGNoIGhpZ2hsaWdodHMgbW9kaWZpY2F0aW9ucyB0byBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgZXZpY3RfZm9saW9zYCwgYW5kIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGVzZSBmdW5jdGlvbnMgZmFsbCBpbnRvIHRoZSBcInViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRoXCIgY2F0ZWdvcnksIGFzIGRlZmluZWQgaW4gdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gV2UgZGVmaW5pdGVseSBkb24ndCB3YW50IHRvIGRpbHV0ZSBvdXIgZnV6emluZyBlZmZvcnQgYnkgaW5jb3JyZWN0bHkgY2xhc3NpZnlpbmcgdGVzdHMuXG5cbkknbSBwcmV0dHkgY29uZmlkZW50IHRoZXkgZG9uJ3QuIFRoZXNlIGFyZSBzcGVjaWZpYyBtZW1vcnkgcmVjbGFpbSBmdW5jdGlvbnMsIGFuZCB0aGV5J3JlIG5vdCBnZW5lcmFsIGFsbG9jYXRvcnMgb3IgZGVhbGxvY2F0b3JzLiBUaGV5IHJ1biB1bmRlciBtZW1vcnkgcHJlc3N1cmUgc2NlbmFyaW9zLCBsaWtlIGtzd2FwZCwgZGlyZWN0IHJlY2xhaW0sIGNvbXBhY3Rpb24sIGFuZCBtYWR2aXNlLiBMaXN0aW5nIHRoZXNlIGZ1bmN0aW9ucyAqc3BlY2lmaWNhbGx5KiB0YXJnZXRzIHRoZSBsb2dpYyBhbHRlcmVkIG9yIGFkZGVkIGJ5IHRoZSBwYXRjaCwgc28gd2UncmUgZ29vZCB0aGVyZS5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYENPTkZJR19MUlVfR0VOYCBqdW1wcyBvdXQuIEEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGBldmljdF9mb2xpb3NgIGFuZCBwYXJ0cyBvZiBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYCBhcmUgZ2F0ZWQgYnkgdGhpcyBjb25maWcuIFdpdGhvdXQgYExSVV9HRU5gLCBgZXZpY3RfZm9saW9zYCBpc24ndCBjb21waWxlZCBhdCBhbGwsIGFuZCBhIHNpZ25pZmljYW50IHBvcnRpb24gb2YgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AgaXMgb21pdHRlZC4gV2l0aCBgTFJVX0dFTmAgZW5hYmxlZCwgYWxsIHRocmVlIGZ1bmN0aW9ucyBhcmUgaW5jbHVkZWQuXG5cbkhvbGQgb24sIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBhbHNvIHNlZW1zIHJlbGV2YW50LiBEaWdnaW5nIGEgYml0LCBpdCBsb29rcyBsaWtlIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgcnVucyB3aGV0aGVyIE1HTFJVIGlzIGVuYWJsZWQgb3Igbm90LCBmb3Igbm9uLU1HTFJVIHBhdGhzLCB3aGlsZSBgZXZpY3RfZm9saW9zYCBydW5zIHdoZW4gTUdMUlUgKmlzKiBhY3RpdmUuIEJ1dCwgaWYgYExSVV9HRU5gIGlzIGVuYWJsZWQsIGJvdGggZnVuY3Rpb25zIGFyZSBjb21waWxlZC4gU28sIHdlIGRlZmluaXRpdmVseSBuZWVkIGBMUlVfR0VOYCB0byBjb21waWxlIGFsbCB0aGUgY29kZSBtb2RpZmllZCBieSB0aGUgcGF0Y2guXG5cbkZpbmFsbHksIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGNoZWNrIHRoZSBtYWtlZmlsZXMgdG8gc2VlIGlmIGB2bXNjYW4uY2AgaXMgZ3VhcmRlZCBieSBhbnkgb3RoZXIgY29uZmlncy4gSXQgbG9va3MgbGlrZSBpdCBpcyBjb21waWxlZCBpbnRvIG9iai15IGluIGBtbS9NYWtlZmlsZWAuIFdlIGNhbiBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODUwNCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMjoyNi43Mjk1ODMxMjRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNjUzOTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtc2NhblxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NTE9b2JqLXlcXHRcXHRcXHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXFxcXG5tbS9NYWtlZmlsZS01Mi1cXHRcXHRcXHQgICBtYWNjZXNzLm8gcGFnZS13cml0ZWJhY2subyBmb2xpby1jb21wYXQubyBcXFxcXFxubW0vTWFrZWZpbGU6NTM6XFx0XFx0XFx0ICAgcmVhZGFoZWFkLm8gZm9saW8ubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcXFxcbm1tL01ha2VmaWxlLTU0LVxcdFxcdFxcdCAgIHNobWVtLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vIGJhY2tpbmctZGV2Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMjoyNi43ODEyNDMwMTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDc1MDg5ODcwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgUmVxdWlyZW1lbnRzKipcblxuT2theSwgc28gYHZtc2Nhbi5vYCBpcyBhbHdheXMgYnVpbHQsIHRoYXQncyBhIGdpdmVuIChgb2JqLXlgKS4gTm93LCBgQ09ORklHX0xSVV9HRU5gIGlzIHRoZSBrZXkgS2NvbmZpZyBmbGFnIGhlcmUsIHNpbmNlIGl0IGVuYWJsZXMgYGV2aWN0X2ZvbGlvc2AgYW5kIHRoZSBNR0xSVSBwYXJ0cyB3aXRoaW4gYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AuIE15IGZpcnN0IHRob3VnaHQgd2FzIHRvIGRvdWJsZS1jaGVjayBpZiB3ZSBhY3R1YWxseSAqbmVlZCogYExSVV9HRU5fRU5BQkxFRGAsIGJ1dCBxdWlja2x5IHJlYWxpemVkIHRoYXQgZXZlbiBpZiB0aGF0IHdhc24ndCBzZXQsIE1HTFJVIGNhbiBzdGlsbCBiZSBlbmFibGVkIHRocm91Z2ggYC9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZGAuIEhvd2V2ZXIsIGlmIHRoZSB1c2VyIGV2ZW4gZW5hYmxlcyBgQ09ORklHX0xSVV9HRU5gIHRoZSBjb2RlIHdpbGwgY29tcGlsZS4gQWxyaWdodCwgdGhhdCdzIHRoZSBtYWluIHBvaW50LlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB3aGF0IHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMgc2hvdWxkIGJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIGNyeXN0YWwgY2xlYXIgZm9yIHRoZSBmdXp6aW5nIGFuYWx5c2lzLlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IERlZmluaXRlbHkgYHRydWVgLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBjb3JlIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgLiBJdCdzIGV4dHJhY3RpbmcgdGhpcyBuZXcgaGVscGVyLCBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKClgLCBhbmQgcmV1c2luZyBpdCwgd2hpY2ggaXMgdGhlIGNvcm5lcnN0b25lIGZvciB0aGUgTUdMUlUgbW9kaWZpY2F0aW9ucywgc28gd2UgYXJlIGFmZmVjdGluZyBpbXBvcnRhbnQgcGF0aHMgYW5kIHJlY2xhaW0gYWNjb3VudGluZyB0aGF0J3MgKmRlZmluaXRlbHkqIHJlYWNoYWJsZS4gVGhlIG5ldyByZXRyeSBsb29wIGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgaXMgYWxzbyBjcml0aWNhbCBoZXJlLlxuKiAgIGBSZWFzb25pbmdgOiBUaGUgZXhwbGFuYXRpb24gaGFzIHRvIGJlIGNsZWFyOiB0aGUgcGF0Y2ggYWx0ZXJzIHBhZ2UgcmVjbGFpbSBieSBleHRyYWN0aW5nIGFuZCByZXVzaW5nIGEgaGVscGVyIHRvIGZpbmQgZm9saW9zIHdyaXR0ZW4gYmFjayBkdXJpbmcgcmVjbGFpbSBpbiBib3RoIE1HTFJVIGFuZCB0cmFkaXRpb25hbCBMUlUsIGFsc28gaW50cm9kdWNpbmcgcmV0cmllcywgd2hpY2ggaXMgY3JpdGljYWwuXG4qICAgYEZvY3VzU3ltYm9sc2A6IEknbSBnb2luZyB0byBsaXN0IGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgLCBhbmQgYGV2aWN0X2ZvbGlvc2AgYmVjYXVzZSB0aGV5IGFyZSB3aGVyZSB0aGUgcmVhbCB3b3JrIG9mIHRoZSBuZXcgbG9naWMgaXMgYW5kIHRoZXkgYXJlbid0IHViaXF1aXRvdXMgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBJIG5lZWQgdG8gc3BlY2lmeSBgTFJVX0dFTmAuXG5cbk9rYXksIGJlZm9yZSBzZW5kaW5nIHRoaXMgb2ZmLCBsZXQncyBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBwZXJmZWN0OlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IENoZWNrZWQuIGB0cnVlYC5cbiogICBgRm9jdXNTeW1ib2xzYDogWWVwLCBmb2N1c2VkIG9uIHRoZSBhbHRlcmVkIGxvZ2ljLlxuKiAgIGBFbmFibGVDb25maWdzYDogVGhlIGtleSBjb25maWcsIFwiTFJVX0dFTlwiLlxuKiAgIGBSZWFzb25pbmdgOiBDb25jaXNlIGFuZCBhY2N1cmF0ZS5cblxuRXZlcnl0aGluZyBsb29rcyBnb29kLiBUaW1lIHRvIHJ1biBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTcyMCwiT3V0cHV0VG9rZW5zIjoxNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjI6MzEuNTMyMTQ0MjgyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA1NDU5NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaHJpbmtfaW5hY3RpdmVfbGlzdFwiLFxuICAgIFwiZXZpY3RfZm9saW9zXCIsXG4gICAgXCJmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHJlY2xhaW0gbG9naWMgaW4gbW0vdm1zY2FuLmMgYnkgcmVmYWN0b3JpbmcgZm9saW8gd3JpdGViYWNrIGRldGVjdGlvbiBpbnRvIGEgc2hhcmVkIGhlbHBlciBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKClgLCB1cGRhdGluZyBgZXZpY3RfZm9saW9zKClgIChNdWx0aS1HZW4gTFJVKSwgYW5kIGludHJvZHVjaW5nIGEgcmV0cnkgbWVjaGFuaXNtIGZvciB3cml0dGVuLWJhY2sgZm9saW9zIGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpYCBhbG9uZyB3aXRoIHVwZGF0ZWQgaXNvbGF0aW9uIGFjY291bnRpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUsIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGhzIGFuZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNocmlua19pbmFjdGl2ZV9saXN0XCIsXG4gICAgXCJldmljdF9mb2xpb3NcIixcbiAgICBcImZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBtbS92bXNjYW4uYyBieSByZWZhY3RvcmluZyBmb2xpbyB3cml0ZWJhY2sgZGV0ZWN0aW9uIGludG8gYSBzaGFyZWQgaGVscGVyIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soKWAsIHVwZGF0aW5nIGBldmljdF9mb2xpb3MoKWAgKE11bHRpLUdlbiBMUlUpLCBhbmQgaW50cm9kdWNpbmcgYSByZXRyeSBtZWNoYW5pc20gZm9yIHdyaXR0ZW4tYmFjayBmb2xpb3MgaW4gYHNocmlua19pbmFjdGl2ZV9saXN0KClgIGFsb25nIHdpdGggdXBkYXRlZCBpc29sYXRpb24gYWNjb3VudGluZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSwgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aHMgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjI6MzEuNjEyNjk4Mjk5WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg5NzY2MTEzODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMjozMS42MTMyNDQzNDlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMjg5NzYwNjIzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBmb2xpbyB3cml0ZWJhY2sgcmV0cnkgbG9naWMgaW4gdGhlIHBhZ2UgcmVjbGFpbSBwYXRoIChtbS92bXNjYW4uYykgYnkgZXh0cmFjdGluZyBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soKSBmcm9tIGV2aWN0X2ZvbGlvcygpIGFuZCB1c2luZyBpdCB0byByZXRyeSBjbGVhbiBmb2xpb3MgaW4gc2hyaW5rX2luYWN0aXZlX2xpc3QoKS4gQWxsIG5ldyBhbmQgbW9kaWZpZWQgbG9jYWwgdmFyaWFibGVzIChjbGVhbl9saXN0LCB0b3RhbF9yZWNsYWltZWQsIGlzb2xhdGVkLCBza2lwX3JldHJ5KSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgcmVjbGFpbV9zdGF0IHN0cnVjdHVyZSBpcyBtZW1zZXQgdG8gemVybyBpbnNpZGUgc2hyaW5rX2ZvbGlvX2xpc3QoKSBvbiBlYWNoIGl0ZXJhdGlvbi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZSwgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgYWNjZXNzZXMuIEFueSBwb3RlbnRpYWwgcmVjbGFpbSBpc3N1ZXMgKGUuZy4gbGlzdCBjb3JydXB0aW9uLCByZWZjb3VudCBvciBwYWdlIGZsYWcgYnVncykgd291bGQgYmUgY2F1Z2h0IGJ5IGFzc2VydGlvbnMgb3IgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyMjJlNjE4MjRiYTNmNDk3MDEwZWI0MTE4YWJlYTc2M2U0N2QwZDg2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTA6MjE6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA1MzU0ZWI4ZDNhMDdiLi44MGNjZDUxNmVmMzgwIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTgxLDYgKzE4MSwxMCBAQCBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbiBcdHN0cnVjdCByZWNsYWltX3N0YXRlIHJlY2xhaW1fc3RhdGU7XG4gfTtcbiBcbitzdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbitcdFx0XHRcdCAgICAgc3RydWN0IGxpc3RfaGVhZCAqY2xlYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbitcdFx0XHRcdCAgICAgaW50IHR5cGUsIGJvb2wgc2tpcF9yZXRyeSk7XG4rXG4gI2lmZGVmIEFSQ0hfSEFTX1BSRUZFVENIV1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCAqYmFzZSlcbkBAIC0yMDY1LDE0ICsyMDY5LDE2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0ZW51bSBscnVfbGlzdCBscnUpXG4ge1xuIFx0TElTVF9IRUFEKGZvbGlvX2xpc3QpO1xuK1x0TElTVF9IRUFEKGNsZWFuX2xpc3QpO1xuIFx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkO1xuLVx0dW5zaWduZWQgaW50IG5yX3JlY2xhaW1lZCA9IDA7XG4tXHR1bnNpZ25lZCBsb25nIG5yX3Rha2VuO1xuK1x0dW5zaWduZWQgaW50IG5yX3JlY2xhaW1lZCwgdG90YWxfcmVjbGFpbWVkID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4sIGlzb2xhdGVkO1xuIFx0c3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0O1xuIFx0Ym9vbCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTtcbiBcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbiBcdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xuK1x0Ym9vbCBza2lwX3JldHJ5ID0gZmFsc2U7XG4gXG4gXHR3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHtcbiBcdFx0aWYgKHN0YWxsZWQpXG5AQCAtMjEwNCwyNSArMjExMCw0MiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRpZiAobnJfdGFrZW4gPT0gMClcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHRpc29sYXRlZCA9IG5yX3Rha2VuO1xuK3JldHJ5OlxuIFx0bnJfcmVjbGFpbWVkID0gc2hyaW5rX2ZvbGlvX2xpc3QoXHUwMDI2Zm9saW9fbGlzdCwgcGdkYXQsIHNjLCBcdTAwMjZzdGF0LCBmYWxzZSxcbiBcdFx0XHRcdFx0IGxydXZlY19tZW1jZyhscnV2ZWMpKTtcbitcdHRvdGFsX3JlY2xhaW1lZCArPSBucl9yZWNsYWltZWQ7XG4rXG4rXHQvKiBSZXRyeSBwYXNzIGlzIG9ubHkgbWVhbnQgZm9yIGNsZWFuIGZvbGlvcyB3aXRob3V0IG5ldyBpc29sYXRpb24gKi9cbitcdGlmIChpc29sYXRlZClcbitcdFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQpO1xuK1x0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtXHUwMDNlbm9kZV9pZCxcbitcdFx0XHRucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFx1MDAyNnN0YXQsIHNjLVx1MDAzZXByaW9yaXR5LCBmaWxlKTtcbitcbitcdGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhcdTAwMjZmb2xpb19saXN0LCBcdTAwMjZjbGVhbl9saXN0LCBscnV2ZWMsIGZpbGUsIHNraXBfcmV0cnkpO1xuIFxuIFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFx1MDAyNmZvbGlvX2xpc3QpO1xuIFxuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHREVNT1RFX0tTV0FQRCArIHJlY2xhaW1lcl9vZmZzZXQoc2MpLFxuIFx0XHRcdFx0XHRzdGF0Lm5yX2RlbW90ZWQpO1xuLVx0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIGZpbGUsIC1ucl90YWtlbik7XG4gXHRpdGVtID0gUEdTVEVBTF9LU1dBUEQgKyByZWNsYWltZXJfb2Zmc2V0KHNjKTtcbiBcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCBucl9yZWNsYWltZWQpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHU1RFQUxfQU5PTiArIGZpbGUsIG5yX3JlY2xhaW1lZCk7XG4tXHRpZiAobnJfc2Nhbm5lZCBcdTAwM2UgbnJfcmVjbGFpbWVkKVxuK1xuK1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmNsZWFuX2xpc3QpKSB7XG4rXHRcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2Y2xlYW5fbGlzdCwgXHUwMDI2Zm9saW9fbGlzdCk7XG4rXHRcdHNraXBfcmV0cnkgPSB0cnVlO1xuK1x0XHQvKiBSZXRyeSBmb2xpb3Mgd2VyZSBhbHJlYWR5IGlzb2xhdGVkIGFuZCBhY2NvdW50ZWQgYWJvdmUgKi9cbitcdFx0aXNvbGF0ZWQgPSAwO1xuK1x0XHRnb3RvIHJldHJ5O1xuK1x0fVxuK1xuK1x0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIGZpbGUsIC1ucl90YWtlbik7XG4rXHRpZiAobnJfc2Nhbm5lZCBcdTAwM2UgdG90YWxfcmVjbGFpbWVkKVxuIFx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIGZpbGUsXG4tXHRcdFx0XHQgbnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7XG4rXHRcdFx0XHQgbnJfc2Nhbm5lZCAtIHRvdGFsX3JlY2xhaW1lZCk7XG4gXG4tXHRoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2sobnJfdGFrZW4sIHBnZGF0LCBzYywgXHUwMDI2c3RhdCk7XG4tXHR0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19pbmFjdGl2ZShwZ2RhdC1cdTAwM2Vub2RlX2lkLFxuLVx0XHRcdG5yX3NjYW5uZWQsIG5yX3JlY2xhaW1lZCwgXHUwMDI2c3RhdCwgc2MtXHUwMDNlcHJpb3JpdHksIGZpbGUpO1xuLVx0cmV0dXJuIG5yX3JlY2xhaW1lZDtcbitcdHJldHVybiB0b3RhbF9yZWNsYWltZWQ7XG4gfVxuIFxuIC8qXG5AQCAtNTAxOCw4ICs1MDQxLDYgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4ge1xuIFx0TElTVF9IRUFEKGxpc3QpO1xuIFx0TElTVF9IRUFEKGNsZWFuKTtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXHRzdHJ1Y3QgZm9saW8gKm5leHQ7XG4gXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07XG4gXHRzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xuQEAgLTUwNTgsMjYgKzUwNzksNyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHR0eXBlX3NjYW5uZWQsIHJlY2xhaW1lZCwgXHUwMDI2c3RhdCwgc2MtXHUwMDNlcHJpb3JpdHksXG4gXHRcdFx0dHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoZm9saW8sIG5leHQsIFx1MDAyNmxpc3QsIGxydSkge1xuLVx0XHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuLVxuLVx0XHQvKiBtb3ZlX2ZvbGlvc190b19scnUoKSBjdWxscyB1bmV2aWN0YWJsZSBmb2xpb3MgdmlhIGZvbGlvX3B1dGJhY2tfbHJ1KCkgKi9cbi1cdFx0aWYgKCFmb2xpb19ldmljdGFibGUoZm9saW8pKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHQvKiByZXRyeSBmb2xpb3MgdGhhdCBtYXkgaGF2ZSBtaXNzZWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cbi1cdFx0aWYgKCFza2lwX3JldHJ5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xuLVx0XHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmNsZWFuKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuLVx0XHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xuLVx0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcbi1cdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuLVx0XHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuLVx0XHR9XG4tXHR9XG4rXHRmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soXHUwMDI2bGlzdCwgXHUwMDI2Y2xlYW4sIGxydXZlYywgdHlwZSwgc2tpcF9yZXRyeSk7XG4gXG4gXHRtb3ZlX2ZvbGlvc190b19scnUoXHUwMDI2bGlzdCk7XG4gXG5AQCAtNjEyMyw2ICs2MTI1LDQ2IEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqXG4gXG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4gXG4rLyoqXG4rICogZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrIC0gRmluZCBhbmQgbW92ZSB0aGUgd3JpdHRlbiBiYWNrIGZvbGlvcyB0byBhIG5ldyBsaXN0LlxuKyAqIEBsaXN0OiBmb2xpb3MgbGlzdFxuKyAqIEBjbGVhbjogdGhlIHdyaXR0ZW4gYmFjayBmb2xpb3MgbGlzdFxuKyAqIEBscnV2ZWM6IHRoZSBscnV2ZWNcbisgKiBAdHlwZTogTFJVIHR5cGUgKG9ubHkgdXNlZCBmb3IgQ09ORklHX0xSVV9HRU4pXG4rICogQHNraXBfcmV0cnk6IHdoZXRoZXIgc2tpcCByZXRyeS5cbisgKi9cbitzdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbitcdFx0XHRcdCAgICAgc3RydWN0IGxpc3RfaGVhZCAqY2xlYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbitcdFx0XHRcdCAgICAgaW50IHR5cGUsIGJvb2wgc2tpcF9yZXRyeSlcbit7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0c3RydWN0IGZvbGlvICpuZXh0O1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoZm9saW8sIG5leHQsIGxpc3QsIGxydSkge1xuKyNpZmRlZiBDT05GSUdfTFJVX0dFTlxuK1x0XHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuKyNlbmRpZlxuK1x0XHQvKiBtb3ZlX2ZvbGlvc190b19scnUoKSBjdWxscyB1bmV2aWN0YWJsZSBmb2xpb3MgdmlhIGZvbGlvX3B1dGJhY2tfbHJ1KCkgKi9cbitcdFx0aWYgKCFmb2xpb19ldmljdGFibGUoZm9saW8pKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKiByZXRyeSBmb2xpb3MgdGhhdCBtYXkgaGF2ZSBtaXNzZWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cbitcdFx0aWYgKCFza2lwX3JldHJ5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xuK1x0XHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIGNsZWFuKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuKyNpZmRlZiBDT05GSUdfTFJVX0dFTlxuK1x0XHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xuK1x0XHRpZiAobHJ1dmVjLVx1MDAzZWxydWdlbi5lbmFibGVkIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgbHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcbitcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuK1x0XHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuK1x0XHR9XG4rI2VuZGlmXG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yW05SX0xSVV9MSVNUU107XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMjozMS42MTMyNDU0MjlaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDMyMDM2MjMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vdm1zY2FuLmNgLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggY29yZSBtZW1vcnkgbWFuYWdlbWVudCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYnJlYWsgZG93biB3aGF0J3MgaGFwcGVuaW5nLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soKWAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEl0J3MgZXNzZW50aWFsbHkgcmVmYWN0b3JpbmcgY29kZSB0aGF0IHVzZWQgdG8gYmUgc29sZWx5IGluIHRoZSBNR0xSVSAoQ09ORklHX0xSVV9HRU4pIGBldmljdF9mb2xpb3MoKWAgYW5kIGlzIG5vdyBiZWluZyB1c2VkIGluIHRoZSB0cmFkaXRpb25hbCBMUlUgcmVjbGFpbSBwYXRoIHZpYSBgc2hyaW5rX2luYWN0aXZlX2xpc3QoKWAuXG5cbkRpdmluZyBpbnRvIGBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpYCwgSSBzZWUgdGhpcyBuZXcgYHJldHJ5YCBsb29wLiBUaGF0IGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgYXR0ZW50aW9uLiBUaGUgbG9vcCdzIHN0cnVjdHVyZTogaXNvbGF0ZSBzb21lIHBhZ2VzLCByZWNsYWltIHBhZ2VzLCBoYW5kbGUgd3JpdGViYWNrIGlmIGFueSB3ZXJlIGlzb2xhdGVkLCBhbmQgdGhlbiB1c2UgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpYC4gSXQgdGhlbiBtb3ZlcyBhbnkgZm91bmQgcGFnZXMgYW5kIHVwZGF0ZXMgc3RhdGUuIFRoZXJlJ3MgYSBjaGVjayBmb3IgYSBjbGVhbiBsaXN0LCBhbmQgaWYgdGhlcmUgYXJlIGNsZWFuIHBhZ2VzLCB3ZSBsb29wIGJhY2sgd2l0aCBgc2tpcF9yZXRyeSA9IHRydWVgLlxuXG5XYWl0IGEgbWludXRlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBzdGF0YCB2YXJpYWJsZSwgYW5kIGhvdyBpdCBpcyBiZWluZyB1c2VkIHdpdGggYHNocmlua19mb2xpb19saXN0KClgLiBEb2VzIGBzaHJpbmtfZm9saW9fbGlzdCgpYCBpbml0aWFsaXplIGl0PyBJcyBpdCBwYXNzZWQgaW4gdW5pbml0aWFsaXplZCBhbmQgaW5pdGlhbGl6ZWQgKndpdGhpbiogYHNocmlua19mb2xpb19saXN0KClgPyBJcyBpdCBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIG9uIHRoZSByZXRyeT8gSSBuZWVkIHRvIGNoZWNrIGhvdyBgc3RhdGAgaXMgaGFuZGxlZCB3aXRoaW4gYHNocmlua19mb2xpb19saXN0KClgIGl0c2VsZi4gSSdsbCBuZWVkIHRvIGdvIGxvb2sgaW50byB0aGUgY29kZSBvZiBgbW0vdm1zY2FuLmNgIHRvIHVuZGVyc3RhbmQgdGhhdCBiaXQuIFRoaXMgY291bGQgYmUgYSByYWNlIGNvbmRpdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA5NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjIyOjM1LjkzMzYxMDQ1NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMzc0MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX2ZvbGlvX2xpc3RcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0yNDY9c3RhdGljIGJvb2wgcm9vdF9yZWNsYWltKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjU2LSAqIGNvbXBsZXRlbHkgYnJva2VuIHdpdGggdGhlIGxlZ2FjeSBtZW1jZyBhbmQgZGlyZWN0IHN0YWxsaW5nIGluXFxubW0vdm1zY2FuLmM6MjU3OiAqIHNocmlua19mb2xpb19saXN0KCkgaXMgdXNlZCBmb3IgdGhyb3R0bGluZyBpbnN0ZWFkLCB3aGljaCBsYWNrcyBhbGwgdGhlXFxubW0vdm1zY2FuLmMtMjU4LSAqIG5pY2V0aWVzIHN1Y2ggYXMgZmFpcm5lc3MsIGFkYXB0aXZlIHBhdXNpbmcsIGJhbmR3aWR0aCBwcm9wb3J0aW9uYWxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4Mz10eXBlZGVmIGVudW0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNjk0LS8qXFxubW0vdm1zY2FuLmM6Njk1OiAqIHBhZ2VvdXQgaXMgY2FsbGVkIGJ5IHNocmlua19mb2xpb19saXN0KCkgZm9yIGVhY2ggZGlydHkgZm9saW8uXFxubW0vdm1zY2FuLmMtNjk2LSAqL1xcbi0tXFxubW0vdm1zY2FuLmM9MTExOT1zdGF0aWMgYm9vbCBtYXlfZW50ZXJfZnMoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS92bXNjYW4uYy0xMTM0LS8qXFxubW0vdm1zY2FuLmM6MTEzNTogKiBzaHJpbmtfZm9saW9fbGlzdCgpIHJldHVybnMgdGhlIG51bWJlciBvZiByZWNsYWltZWQgcGFnZXNcXG5tbS92bXNjYW4uYy0xMTM2LSAqL1xcbm1tL3Ztc2Nhbi5jOjExMzc6c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbm1tL3Ztc2Nhbi5jLTExMzgtXFx0XFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYz0xNjczPXVuc2lnbmVkIGludCByZWNsYWltX2NsZWFuX3BhZ2VzX2Zyb21fbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE3MDMtXFx0bm9yZWNsYWltX2ZsYWcgPSBtZW1hbGxvY19ub3JlY2xhaW1fc2F2ZSgpO1xcbm1tL3Ztc2Nhbi5jOjE3MDQ6XFx0bnJfcmVjbGFpbWVkID0gc2hyaW5rX2ZvbGlvX2xpc3QoXFx1MDAyNmNsZWFuX2ZvbGlvcywgem9uZS1cXHUwMDNlem9uZV9wZ2RhdCwgXFx1MDAyNnNjLFxcbm1tL3Ztc2Nhbi5jLTE3MDUtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNnN0YXQsIHRydWUsIE5VTEwpO1xcbi0tXFxubW0vdm1zY2FuLmM9MjAyNT1zdGF0aWMgdm9pZCBoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2sodW5zaWduZWQgbG9uZyBucl90YWtlbixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIwNDUtXFx0XFx0ICogdGhlIGtlcm5lbCBmbHVzaGVyIGhlcmUgYW5kIGxhdGVyIHdhaXRpbmcgb24gZm9saW9zXFxubW0vdm1zY2FuLmM6MjA0NjpcXHRcXHQgKiB3aGljaCBhcmUgaW4gd3JpdGViYWNrIHRvIGZpbmlzaCAoc2VlIHNocmlua19mb2xpb19saXN0KCkpLlxcbm1tL3Ztc2Nhbi5jLTIwNDctXFx0XFx0ICpcXG4tLVxcbm1tL3Ztc2Nhbi5jPTIwNjc9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbi0tXFxubW0vdm1zY2FuLmMtMjExNC1yZXRyeTpcXG5tbS92bXNjYW4uYzoyMTE1OlxcdG5yX3JlY2xhaW1lZCA9IHNocmlua19mb2xpb19saXN0KFxcdTAwMjZmb2xpb19saXN0LCBwZ2RhdCwgc2MsIFxcdTAwMjZzdGF0LCBmYWxzZSxcXG5tbS92bXNjYW4uYy0yMTE2LVxcdFxcdFxcdFxcdFxcdCBscnV2ZWNfbWVtY2cobHJ1dmVjKSk7XFxuLS1cXG5tbS92bXNjYW4uYz0yMjU3PXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVjbGFpbV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0yMjcwLVxcbm1tL3Ztc2Nhbi5jOjIyNzE6XFx0bnJfcmVjbGFpbWVkID0gc2hyaW5rX2ZvbGlvX2xpc3QoZm9saW9fbGlzdCwgcGdkYXQsIFxcdTAwMjZzYywgXFx1MDAyNnN0YXQsIHRydWUsIE5VTEwpO1xcbm1tL3Ztc2Nhbi5jLTIyNzItXFx0d2hpbGUgKCFsaXN0X2VtcHR5KGZvbGlvX2xpc3QpKSB7XFxuLS1cXG5tbS92bXNjYW4uYz00MzcwPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00NDEwLS8qXFxubW0vdm1zY2FuLmM6NDQxMTogKiBUaGlzIGZ1bmN0aW9uIGV4cGxvaXRzIHNwYXRpYWwgbG9jYWxpdHkgd2hlbiBzaHJpbmtfZm9saW9fbGlzdCgpIHdhbGtzIHRoZVxcbm1tL3Ztc2Nhbi5jLTQ0MTItICogcm1hcC4gSXQgc2NhbnMgdGhlIGFkamFjZW50IFBURXMgb2YgYSB5b3VuZyBQVEUgYW5kIHByb21vdGVzIGhvdCBwYWdlcy4gSWZcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwMzk9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy01MDcxLXJldHJ5Olxcbm1tL3Ztc2Nhbi5jOjUwNzI6XFx0cmVjbGFpbWVkID0gc2hyaW5rX2ZvbGlvX2xpc3QoXFx1MDAyNmxpc3QsIHBnZGF0LCBzYywgXFx1MDAyNnN0YXQsIGZhbHNlLCBtZW1jZyk7XFxubW0vdm1zY2FuLmMtNTA3My1cXHRzYy1cXHUwMDNlbnJfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjI6MzUuOTgwNzYxMTc3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU2MDYyMTczNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdm1zY2FuLmM6IFVucGFja2luZyBzaHJpbmtfZm9saW9fbGlzdCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGBzaHJpbmtfZm9saW9fbGlzdGAgaW50ZXJhY3RzIHdpdGggYHN0YXRgIHdpdGhpbiB0aGUgYG1tL3Ztc2Nhbi5jYCBjb250ZXh0LiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGxpbmVzLCBzcGVjaWZpY2FsbHkgMTEzNSB0aHJvdWdoIDExNTUuIFRoaXMgc2VjdGlvbiBob2xkcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGZ1bmN0aW9ucyB3b3JrIHRvZ2V0aGVyLiBJJ20gaG9waW5nIHRvIHNlZSB0aGUgc3BlY2lmaWMgb3BlcmF0aW9ucyBwZXJmb3JtZWQgb24gYHN0YXRgIGJ5IGBzaHJpbmtfZm9saW9fbGlzdGAsIGxpa2VseSBpbiB0aGUgY29udGV4dCBvZiByZWNsYWltaW5nIG9yIGFjY291bnRpbmcgZm9yIG1lbW9yeS4gSSdtIGV4cGVjdGluZyB0byBzZWUgY2FsbHMsIHBhcmFtZXRlciBwYXNzaW5nLCBhbmQgbW9kaWZpY2F0aW9ucyBvZiBgc3RhdGAgcmVsYXRlZCB0byB0aGUgZm9saW9zIGJlaW5nIHByb2Nlc3NlZC4gSSB3YW50IHRvIGJ1aWxkIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBjb250cmlidXRlcyB0byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBsZXZlcmFnZXMgYHN0YXRgIHRvIGRldGVybWluZSB0aGUgc3RhdGUgb2YgdmFyaW91cyBmb2xpb3MuIExldCdzIHNlZSBpZiB0aGlzIHNlY3Rpb24gcHJvdmlkZXMgdGhlIGdyYW51bGFyIGRldGFpbCBJJ20gbG9va2luZyBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNDgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMjo0MS41ODY5ODE2MTZaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMzUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMzU6XFx0ICogc2hyaW5rX2ZvbGlvX2xpc3QoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVjbGFpbWVkIHBhZ2VzXFxuMTEzNjpcXHQgKi9cXG4xMTM3OlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4xMTM4OlxcdFxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbjExMzk6XFx0XFx0XFx0c3RydWN0IHJlY2xhaW1fc3RhdCAqc3RhdCwgYm9vbCBpZ25vcmVfcmVmZXJlbmNlcyxcXG4xMTQwOlxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4xMTQxOlxcdHtcXG4xMTQyOlxcdFxcdHN0cnVjdCBmb2xpb19iYXRjaCBmcmVlX2ZvbGlvcztcXG4xMTQzOlxcdFxcdExJU1RfSEVBRChyZXRfZm9saW9zKTtcXG4xMTQ0OlxcdFxcdExJU1RfSEVBRChkZW1vdGVfZm9saW9zKTtcXG4xMTQ1OlxcdFxcdHVuc2lnbmVkIGludCBucl9yZWNsYWltZWQgPSAwLCBucl9kZW1vdGVkID0gMDtcXG4xMTQ2OlxcdFxcdHVuc2lnbmVkIGludCBwZ2FjdGl2YXRlID0gMDtcXG4xMTQ3OlxcdFxcdGJvb2wgZG9fZGVtb3RlX3Bhc3M7XFxuMTE0ODpcXHRcXHRzdHJ1Y3Qgc3dhcF9pb19jdHggY3R4ID0ge307XFxuMTE0OTpcXHRcXG4xMTUwOlxcdFxcdGZvbGlvX2JhdGNoX2luaXQoXFx1MDAyNmZyZWVfZm9saW9zKTtcXG4xMTUxOlxcdFxcdG1lbXNldChzdGF0LCAwLCBzaXplb2YoKnN0YXQpKTtcXG4xMTUyOlxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjExNTM6XFx0XFx0ZG9fZGVtb3RlX3Bhc3MgPSBjYW5fZGVtb3RlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBzYywgbWVtY2cpO1xcbjExNTQ6XFx0XFxuMTE1NTpcXHRyZXRyeTpcXG4xMTU2OlxcdFxcdHdoaWxlICghbGlzdF9lbXB0eShmb2xpb19saXN0KSkge1xcbjExNTc6XFx0XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XFxuMTE1ODpcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbjExNTk6XFx0XFx0XFx0ZW51bSBmb2xpb19yZWZlcmVuY2VzIHJlZmVyZW5jZXMgPSBGT0xJT1JFRl9SRUNMQUlNO1xcbjExNjA6XFx0XFx0XFx0Ym9vbCBkaXJ0eSwgd3JpdGViYWNrO1xcbjExNjE6XFx0XFx0XFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzO1xcbjExNjI6XFx0XFxuMTE2MzpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4xMTY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMjo0MS41ODc1MDYwMjZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTkwMDg2NTQyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRm9saW8gRXZpY3Rpb24gYW5kIFdyaXRlYmFjayoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGZvbGlvIG1hbmFnZW1lbnQgY29kZSBhZ2Fpbi4gTGluZSAxMTUxLCByaWdodCwgdGhlcmUncyBhIGBtZW1zZXQoc3RhdCwgMCwgc2l6ZW9mKCpzdGF0KSk7YC4gVGhhdCdzIGltcG9ydGFudDsgYHNocmlua19mb2xpb19saXN0YCBpcyB6ZXJvaW5nIG91dCB0aGUgYHN0YXRgIHN0cnVjdC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgemVyb2luZyBhY3Rpb24gaW4gcmVsYXRpb24gdG8gdGhlIGV2aWN0aW9uIHByb2Nlc3MsIHNvIGxldCdzIGNoZWNrIGBldmljdF9mb2xpb3MoKWAgYXJvdW5kIGxpbmUgNTA2MC4gTXkgZ29hbCBpcyB0byBzZWUgZXhhY3RseSBob3cgaXQgbWFuYWdlcyByZXRyaWVzIGlmIGV2aWN0aW9uIGZhaWxzIGZvciBzb21lIHJlYXNvbiBhbmQsIGNydWNpYWxseSwgdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIGBzdGF0YCBkYXRhIHN0cnVjdHVyZSBhbmQgdGhlc2UgZnVuY3Rpb25zLiBJ4oCZbSB0aGlua2luZyBhYm91dCBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMgYW5kIGhvdyB0aGVzZSByZXRyeSBtZWNoYW5pc21zIGFyZSBkZXNpZ25lZCB0byBtaXRpZ2F0ZSBwb3RlbnRpYWwgaXNzdWVzLiBMZXQncyBzZWUgaG93IHRoaXMgYWxsIGhhbmdzIHRvZ2V0aGVy4oCmXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MDAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjIyOjQzLjQ4ODM3NDExMVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTA2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTA2MDpcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmxpc3QsIFxcdTAwMjZpc29sYXRlZCwgXFx1MDAyNnR5cGUsIFxcdTAwMjZ0eXBlX3NjYW5uZWQpO1xcbjUwNjE6XFx0XFx0bnJfaXNvbGF0ZWQgPSBpc29sYXRlZDtcXG41MDYyOlxcdFxcbjUwNjM6XFx0XFx0LyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi9cXG41MDY0OlxcdFxcdGlmIChzY2FubmVkKVxcbjUwNjU6XFx0XFx0XFx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XFxuNTA2NjpcXHRcXG41MDY3OlxcdFxcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XFxuNTA2ODpcXHRcXG41MDY5OlxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZsaXN0KSlcXG41MDcwOlxcdFxcdFxcdHJldHVybiBzY2FubmVkO1xcbjUwNzE6XFx0cmV0cnk6XFxuNTA3MjpcXHRcXHRyZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChcXHUwMDI2bGlzdCwgcGdkYXQsIHNjLCBcXHUwMDI2c3RhdCwgZmFsc2UsIG1lbWNnKTtcXG41MDczOlxcdFxcdHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgKz0gcmVjbGFpbWVkO1xcbjUwNzQ6XFx0XFx0dG90YWxfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG41MDc1OlxcdFxcdC8qIFJldHJ5IHBhc3MgaXMgb25seSBtZWFudCBmb3IgY2xlYW4gZm9saW9zIHdpdGhvdXQgbmV3IGlzb2xhdGlvbiAqL1xcbjUwNzY6XFx0XFx0aWYgKGlzb2xhdGVkKVxcbjUwNzc6XFx0XFx0XFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFxcdTAwMjZzdGF0KTtcXG41MDc4OlxcdFxcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLFxcbjUwNzk6XFx0XFx0XFx0XFx0dHlwZV9zY2FubmVkLCByZWNsYWltZWQsIFxcdTAwMjZzdGF0LCBzYy1cXHUwMDNlcHJpb3JpdHksXFxuNTA4MDpcXHRcXHRcXHRcXHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XFxuNTA4MTpcXHRcXG41MDgyOlxcdFxcdGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhcXHUwMDI2bGlzdCwgXFx1MDAyNmNsZWFuLCBscnV2ZWMsIHR5cGUsIHNraXBfcmV0cnkpO1xcbjUwODM6XFx0XFxuNTA4NDpcXHRcXHRtb3ZlX2ZvbGlvc190b19scnUoXFx1MDAyNmxpc3QpO1xcbjUwODU6XFx0XFxuNTA4NjpcXHRcXHR3YWxrID0gY3VycmVudC1cXHUwMDNlcmVjbGFpbV9zdGF0ZS1cXHUwMDNlbW1fd2FsaztcXG41MDg3OlxcdFxcdGlmICh3YWxrIFxcdTAwMjZcXHUwMDI2IHdhbGstXFx1MDAzZWJhdGNoZWQpIHtcXG41MDg4OlxcdFxcdFxcdHdhbGstXFx1MDAzZWxydXZlYyA9IGxydXZlYztcXG41MDg5OlxcdFxcdFxcdHJlc2V0X2JhdGNoX3NpemUod2Fsayk7XFxuNTA5MDpcXHRcXHR9XFxuNTA5MTpcXHRcXG41MDkyOlxcdFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR0RFTU9URV9LU1dBUEQgKyByZWNsYWltZXJfb2Zmc2V0KHNjKSxcXG41MDkzOlxcdFxcdFxcdFxcdFxcdFxcdHN0YXQubnJfZGVtb3RlZCk7XFxuNTA5NDpcXHRcXG41MDk1OlxcdFxcdGl0ZW0gPSBQR1NURUFMX0tTV0FQRCArIHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xcbjUwOTY6XFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIHJlY2xhaW1lZCk7XFxuNTA5NzpcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICsgdHlwZSwgcmVjbGFpbWVkKTtcXG41MDk4OlxcdFxcbjUwOTk6XFx0XFx0bGlzdF9zcGxpY2VfaW5pdChcXHUwMDI2Y2xlYW4sIFxcdTAwMjZsaXN0KTtcXG41MTAwOlxcdFxcbjUxMDE6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZsaXN0KSkge1xcbjUxMDI6XFx0XFx0XFx0c2tpcF9yZXRyeSA9IHRydWU7XFxuNTEwMzpcXHRcXHRcXHRpc29sYXRlZCA9IDA7XFxuNTEwNDpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjUxMDU6XFx0XFx0fVxcbjUxMDY6XFx0XFxuNTEwNzpcXHRcXHRpZiAobnJfaXNvbGF0ZWQgXFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXFxuNTEwODpcXHRcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIHR5cGUsXFxuNTEwOTpcXHRcXHRcXHRcXHRcXHQgbnJfaXNvbGF0ZWQgLSB0b3RhbF9yZWNsYWltZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMjo0My40ODg4MjY3MjFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTAwMjg1MjQ3MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50OiBBIERlZXAgRGl2ZSBpbnRvIFBhZ2UgUmVjbGFtYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXNzZWN0IHRoZXNlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucywgZm9jdXNpbmcgb24gaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgcGFnZSByZWNsYW1hdGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgZXZpY3RfZm9saW9zYCBhbmQgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgd2hpY2ggYXJlIGtleSBjb21wb25lbnRzIGluIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneS5cblxuSW4gYHNocmlua19pbmFjdGl2ZV9saXN0YCwgSSdtIGxvb2tpbmcgY2xvc2VseSBhdCBob3cgdGhlIGluYWN0aXZlIGxpc3QgaXMgcHJvY2Vzc2VkLiBJIHNlZSBhIGBmb2xpb19saXN0YCBiZWluZyB1c2VkLCBhbmQgYSBjcml0aWNhbCBkZXRhaWwgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIGBjbGVhbl9saXN0YC4gVGhpcyBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZSBjb2RlIGlzIGNsZWFybHkgZGVzaWduZWQgdG8gaGFuZGxlIFwiY2xlYW5cIiBmb2xpb3MgZGlmZmVyZW50bHkuIFRoZSBuZXcgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AgZnVuY3Rpb24gaXMgY2FsbGVkLCBhbmQgYSBrZXkgcGFyYW1ldGVyIGlzIGBza2lwX3JldHJ5YCwgd2hpY2ggaW5kaWNhdGVzIHRoZXJlIG1pZ2h0IGJlIHNvbWUga2luZCBvZiByZXRyeSBtZWNoYW5pc20gaW4gcGxhY2UuIEl0IHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIGBjbGVhbl9saXN0YC4gSSBzZWUgdGhhdCB0aGUgY29kZSBpcyBhdHRlbXB0aW5nIHRvIGlkZW50aWZ5IGZvbGlvcyB0aGF0IGhhdmUgcG90ZW50aWFsbHkgbm90IGJlZW4gaGFuZGxlZCBjb3JyZWN0bHkgaW4gYSBwcmV2aW91cyBhdHRlbXB0LCBhbmQgbW92ZSB0aGVtIHRvIHRoZSBgY2xlYW5fbGlzdGAsIGFuZCB0aGVuIHJldHJ5LiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIGFuZCB1bmRlcnN0YW5kLlxuXG5UaGUgY29kZSB0aGVuIGNhbGxzIGBzaHJpbmtfZm9saW9fbGlzdGAsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgYWN0dWFsIHJlY2xhbWF0aW9uLiBDcml0aWNhbGx5LCBpdCB0aGVuIGNhbGxzIGBoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2tgLCB3aGljaCBzdWdnZXN0cyB0aGUgY29kZSBpcyBkZXNpZ25lZCB0byBkbyB3cml0ZWJhY2sgYW5kIGhhbmRsZSB0aGVzZSBmb2xpb3MgY29ycmVjdGx5LlxuXG5UaGVuLCB0aGVyZSdzIGEgbG9vcCB3aXRoIGEgYHJldHJ5YCBsYWJlbCB0aGF0J3MgZW50ZXJlZCBpZiBgIWxpc3RfZW1wdHkoXHUwMDI2Y2xlYW5fbGlzdClgLiAgVGhpcyBpcyBrZXk7IHRoZSBmdW5jdGlvbiB0cmllcyB0byB3b3JrIGFyb3VuZCBpc3N1ZXMgc3VjaCBhcyBhIGZpbGUgdGhhdCBoYXMgYmVlbiBmbGFnZ2VkIGFzIG5lZWRpbmcgd3JpdGViYWNrLCBidXQgaGFzIG5vdCB5ZXQgYmVlbiBwcm9jZXNzZWQuIFRoZSBmb2xpb3MgYXJlIGlzb2xhdGVkLCByZWNsYWltZWQsIGFuZCB0aGVuIHRoZSByZXRyeSBoYXBwZW5zLCB1bnRpbCBhbGwgdGhlIGBjbGVhbl9saXN0YCBpdGVtcyBoYXZlIGJlZW4gY2xlYXJlZC5cblxuTmV4dCwgSSBuZWVkIHRvIGxvb2sgaW50byBob3cgdGhlIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgIGZ1bmN0aW9uIGlzIHN0cnVjdHVyZWQsIGFuZCBob3cgdGhlIGBza2lwX3JldHJ5YCBwYXJhbWV0ZXIgcGxheXMgYSByb2xlLiBJZiBgc2tpcF9yZXRyeWAgaXMgYGZhbHNlYCwgdGhlIGNvZGUgaXMgZGVzaWduZWQgdG8gaWRlbnRpZnkgZm9saW9zIHRoYXQgd2VyZSBub3QgcmVjbGFpbWVkIGNvcnJlY3RseSwgc3VjaCBhcyBvbmVzIHRoYXQgd2VyZSBub3QgYWN0aXZlLCBub3QgbWFwcGVkLCBhbmQgbm90IGRpcnR5L3dyaXRlYmFjaywgYW5kIG1vdmUgdGhlbSB0byB0aGUgYGNsZWFuX2xpc3RgIHRvIGFsbG93IGZvciBhIHJldHJ5LlxuTm93LCB3aGVuIENPTkZJR19MUlVfR0VOIGlzIGVuYWJsZWQsIEkgc2VlIHRoYXQgdGhlIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgIGZ1bmN0aW9uIHVzZXMgYGZpbGVgIGFzIHRoZSB0eXBlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgZnVuY3Rpb24gaXMgaGFuZGxpbmcgdGhlIGdlbmVyaWMgbHJ1IHR5cGUgY29ycmVjdGx5LiBgZXZpY3RfZm9saW9zYCB1c2VzIGEgYHR5cGVgIGZvciBMUlVfR0VOLCBhbmQgSSBuZWVkIHRvIGNoZWNrIHdoYXQgYHR5cGVgIGlzIGluIGBldmljdF9mb2xpb3NgIHRvIGVuc3VyZSB0aGF0IGl0J3MgYWxsIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMjIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjQ6MTMuNTE3MzUzOTA0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njg5MDg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgdHlwZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0xODQ9c3RhdGljIHZvaWQgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxubW0vdm1zY2FuLmMtMTg1LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGxpc3RfaGVhZCAqY2xlYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYzoxODY6XFx0XFx0XFx0XFx0ICAgICBpbnQgdHlwZSwgYm9vbCBza2lwX3JldHJ5KTtcXG5tbS92bXNjYW4uYy0xODctXFxuLS1cXG5tbS92bXNjYW4uYz0xMTM3PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE2MTQtXFx0XFx0aWYgKCFmb2xpb190ZXN0X21sb2NrZWQoZm9saW8pKSB7XFxubW0vdm1zY2FuLmM6MTYxNTpcXHRcXHRcXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG5tbS92bXNjYW4uYy0xNjE2LVxcdFxcdFxcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xcbi0tXFxubW0vdm1zY2FuLmM9Mjg2Nz1zdGF0aWMgaW50IGdldF9zd2FwcGluZXNzKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy0yODg1LVxcbm1tL3Ztc2Nhbi5jOjI4ODY6c3RhdGljIGludCBnZXRfbnJfZ2VucyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxcbm1tL3Ztc2Nhbi5jLTI4ODcte1xcbi0tXFxubW0vdm1zY2FuLmM9Mjg5MT1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbm1tL3Ztc2Nhbi5jLTI4OTIte1xcbm1tL3Ztc2Nhbi5jOjI4OTM6XFx0aW50IHR5cGU7XFxubW0vdm1zY2FuLmMtMjg5NC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTMyOTU9c3RydWN0IGN0cmxfcG9zIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzMDAtXFxubW0vdm1zY2FuLmM6MzMwMTpzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbixcXG5tbS92bXNjYW4uYy0zMzAyLVxcdFxcdFxcdCAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpXFxuLS1cXG5tbS92bXNjYW4uYy0zMzE5LVxcbm1tL3Ztc2Nhbi5jOjMzMjA6c3RhdGljIHZvaWQgcmVzZXRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgYm9vbCBjYXJyeW92ZXIpXFxubW0vdm1zY2FuLmMtMzMyMS17XFxuLS1cXG5tbS92bXNjYW4uYz0zNDM0PXN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vdm1zY2FuLmMtMzQzNS17XFxubW0vdm1zY2FuLmM6MzQzNjpcXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG5tbS92bXNjYW4uYy0zNDM3LVxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuLS1cXG5tbS92bXNjYW4uYz0zNDQ3PXN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vdm1zY2FuLmM6MzQ0ODpcXHRcXHRcXHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKVxcbm1tL3Ztc2Nhbi5jLTM0NDkte1xcbi0tXFxubW0vdm1zY2FuLmM9NDAxOT1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfbHJ1X2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBsaXN0X2hlYWQgKipiYXRjaF9lbmQsXFxuLS1cXG5tbS92bXNjYW4uYy00MDMxLVxcbm1tL3Ztc2Nhbi5jOjQwMzI6c3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXFxubW0vdm1zY2FuLmMtNDAzMy17XFxuLS1cXG5tbS92bXNjYW4uYz00MTY2PXN0YXRpYyBib29sIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtNDE2OS1cXHRpbnQgcHJldiwgbmV4dDtcXG5tbS92bXNjYW4uYzo0MTcwOlxcdGludCB0eXBlLCB6b25lO1xcbm1tL3Ztc2Nhbi5jLTQxNzEtXFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ2NDc9Ym9vbCByZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2NDktXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYzo0NjUwOlxcdGludCB0eXBlO1xcbm1tL3Ztc2Nhbi5jLTQ2NTEtXFxuLS1cXG5tbS92bXNjYW4uYz00Njk0PXZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtNDY5Ni1cXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xcbm1tL3Ztc2Nhbi5jOjQ2OTc6XFx0aW50IHR5cGU7XFxubW0vdm1zY2FuLmMtNDY5OC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ3MzU9c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcXG5tbS92bXNjYW4uYzo0NzM2OlxcdFxcdFxcdFxcdCAgICAgaW50IHpvbmUsIGludCB0eXBlKVxcbm1tL3Ztc2Nhbi5jLTQ3Mzcte1xcbi0tXFxubW0vdm1zY2FuLmM9NDc2Nj12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtNDc2OC1cXHRzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsICpwYXJlbnRfbHJ1dmVjO1xcbm1tL3Ztc2Nhbi5jOjQ3Njk6XFx0aW50IHR5cGUsIHppZDtcXG5tbS92bXNjYW4uYy00NzcwLVxcdHN0cnVjdCB6b25lICp6b25lO1xcbi0tXFxubW0vdm1zY2FuLmM9NDgwMD1zdGF0aWMgYm9vbCBzb3J0X2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy00ODAzLVxcdGludCBnZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcXG5tbS92bXNjYW4uYzo0ODA0OlxcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbm1tL3Ztc2Nhbi5jLTQ4MDUtXFx0aW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ4NzM9c3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYzo0ODc0OlxcdFxcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHR5cGUsIGludCB0aWVyLFxcbm1tL3Ztc2Nhbi5jLTQ4NzUtXFx0XFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWRwKVxcbi0tXFxubW0vdm1zY2FuLmMtNDk0Ny1cXG5tbS92bXNjYW4uYzo0OTQ4OnN0YXRpYyBpbnQgZ2V0X3RpZXJfaWR4KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXFxubW0vdm1zY2FuLmMtNDk0OS17XFxuLS1cXG5tbS92bXNjYW4uYz00OTk1PXN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy01MDAwLVxcdGJvb2wgdHlwZV9mYWxsYmFja19hbGxvd2VkID0gIWlzX3NpbmdsZV90eXBlX3JlY2xhaW0oc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmM6NTAwMTpcXHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcXG5tbS92bXNjYW4uYy01MDAyLVxcdGludCB0b3RhbF9zY2FubmVkID0gMCwgc2Nhbm5lZCwgdGllcjtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU0NDM9c3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTQ0OC1cXHRmb3JfZWFjaF9ldmljdGFibGVfbHJ1KGxydSkge1xcbm1tL3Ztc2Nhbi5jOjU0NDk6XFx0XFx0aW50IHR5cGUgPSBpc19maWxlX2xydShscnUpO1xcbm1tL3Ztc2Nhbi5jLTU0NTAtXFx0XFx0Ym9vbCBhY3RpdmUgPSBpc19hY3RpdmVfbHJ1KGxydSk7XFxuLS1cXG5tbS92bXNjYW4uYz01NzA5PXN0YXRpYyB2b2lkIGxydV9nZW5fc2VxX3Nob3dfZnVsbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3MTMtXFx0aW50IGk7XFxubW0vdm1zY2FuLmM6NTcxNDpcXHRpbnQgdHlwZSwgdGllcjtcXG5tbS92bXNjYW4uYy01NzE1LVxcdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEoc2VxKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU3NjQ9c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3OTQtXFx0Zm9yICg7IHNlcSBcXHUwMDNjPSBtYXhfc2VxOyBzZXErKykge1xcbm1tL3Ztc2Nhbi5jOjU3OTU6XFx0XFx0aW50IHR5cGUsIHpvbmU7XFxubW0vdm1zY2FuLmMtNTc5Ni1cXHRcXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xcbi0tXFxubW0vdm1zY2FuLmM9NjEzNj1zdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG5tbS92bXNjYW4uYy02MTM3LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGxpc3RfaGVhZCAqY2xlYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYzo2MTM4OlxcdFxcdFxcdFxcdCAgICAgaW50IHR5cGUsIGJvb2wgc2tpcF9yZXRyeSlcXG5tbS92bXNjYW4uYy02MTM5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjQ6MTMuNTg0MjY3ODAzWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYxNjg5MDY4NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBpc19maWxlX2xydShscnUpYOKAlHJpZ2h0LCB0aGF0J3MganVzdCBhIHNpbXBsZSAwIG9yIDEgaW5kaWNhdG9yLCBtYXRjaGluZyBgdHlwZWAgaW4gTUdMUlUuIE1ha2VzIHNlbnNlLiBOb3csIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbG9naWMuIEl0J3MgaXRlcmF0aW5nIGluIHJldmVyc2UgdGhyb3VnaCBhIGBsaXN0X2hlYWRgIChwcmVzdW1hYmx5IG9mIGZvbGlvcyksIHNhZmVseSB1c2luZyBgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2VgLiBTdGFuZGFyZCBwcmFjdGljZS5cblxuVGhlIGZpcnN0IGBpZmAgc3RhdGVtZW50IGlzIGxvb2tpbmcgZm9yIHVuZXZpY3RhYmxlIGZvbGlvcyDigJMgaGFuZGxlZCBlZmZpY2llbnRseSB1c2luZyBgZm9saW9fZXZpY3RhYmxlKClgLiBTa2lwIHRoZW07IHdlIGRvbuKAmXQgY2FyZSBhYm91dCB0aG9zZSByaWdodCBub3cuXG5cblRoZSBuZXh0IGBpZmAgaXMgYSByZXRyeSBtZWNoYW5pc20uIEl0J3MgY2hlY2tpbmcgaWYgdGhlIGZvbGlvICptaWdodCogaGF2ZSBiZWVuIG1pc3NlZCBieSBgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKClgLiBUaGUgY29uZGl0aW9ucyBgIWZvbGlvX3Rlc3RfYWN0aXZlYCwgYCFmb2xpb19tYXBwZWRgLCBgIWZvbGlvX3Rlc3RfZGlydHlgLCBhbmQgYCFmb2xpb190ZXN0X3dyaXRlYmFja2Agc2VlbSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBmb2xpbyBpcyAqaW5hY3RpdmUqLCAqdW5tYXBwZWQqLCBhbmQgKm5vdCogY3VycmVudGx5IGRpcnR5IG9yIHVuZGVyZ29pbmcgd3JpdGViYWNrLiBJZiBhbGwgdGhvc2UgY29uZGl0aW9ucyBhcmUgdHJ1ZSwgaXQgbW92ZXMgdGhlIGZvbGlvIHRvIHRoZSBgY2xlYW5gIGxpc3QuIFNlZW1zIGxpa2UgYSBnb29kIHN0cmF0ZWd5IHRvIGhhbmRsZSBwb3RlbnRpYWwgbWlzc2VkIHJlY2xhaW0gYXR0ZW1wdHMuXG5cbk5vdywgdGhhdCBgQ09ORklHX0xSVV9HRU5gIHNlY3Rpb24uICpIbW0qLCBsZXQncyBzZWUuIEl0IHJlZmVyZW5jZXMgYGxydXZlYy1cdTAwM2VscnVnZW4uZW5hYmxlZGAuLi4gYW5kIHRoZSBjb21wYXJpc29uIGFnYWluc3QgYG1pbl9zZXFbdHlwZV1gLiBUaGlzIGltcGxpZXMgc29tZSBnZW5lcmF0aW9uLWJhc2VkIExSVSBzY2hlbWUuIEl0J3Mgc2V0dGluZyB0aGUgZm9saW/igJlzIExSVSByZWZzIHRvIDAsIHdoaWNoIGNsZWFycyB0aGUgcmVmZXJlbmNlIGNvdW50LCBhbmQgdGhlbiBzZXRzIHRoZSBhY3RpdmUgYml0LiBUaGlzIG11c3QgcmVsYXRlIHRvIGhhbmRsaW5nIHJlamVjdGVkIGZvbGlvcyB3aXRoaW4gdGhlIGdlbmVyYXRpb24gbG9naWMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGZvbGxvdyB0aHJvdWdoLlxuXG5Ib2xkIG9uLCBsZXQgbWUgcXVpY2tseSBjb25maXJtIHRoYXQgYGxydXZlYy1cdTAwM2VscnVnZW4uZW5hYmxlZGAg4oCTIHRoYXQncyBjcnVjaWFsLiBJJ2xsIHNlYXJjaCBmb3Igd2hlcmUgdGhhdCdzIHNldCBhbmQgdXNlZC4gSSdsbCBzZWFyY2ggdGhlIGNvZGUgZm9yIGBscnVnZW4uZW5hYmxlZGAgb3IgYGxydV9nZW5fZW5hYmxlZCgpYC4gVGhpcyBnZW5lcmF0aW9uLWJhc2VkIExSVSBsb2dpYyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZm9saW9zIGFyZSBiZWluZyBtYW5hZ2VkLiBJJ2xsIGRpZyBkZWVwZXIgdG8gc2VlIGlmIEkgY2FuIGZpbmQgaG93IHRoZSBzZXF1ZW5jZXMgd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMzksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjQ6MTkuNzUzMTc3MzQyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzg4MTAyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVnZW5cXFxcLmVuYWJsZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTU1MTc9c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxcbi0tXFxubW0vdm1zY2FuLmMtNTU0OS1cXG5tbS92bXNjYW4uYzo1NTUwOlxcdFxcdFxcdGxydXZlYy1cXHUwMDNlbHJ1Z2VuLmVuYWJsZWQgPSBlbmFibGVkO1xcbm1tL3Ztc2Nhbi5jLTU1NTEtXFxuLS1cXG5tbS92bXNjYW4uYz02MTM2PXN0YXRpYyB2b2lkIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtNjE1OC1cXHRcXHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xcbm1tL3Ztc2Nhbi5jOjYxNTk6XFx0XFx0aWYgKGxydXZlYy1cXHUwMDNlbHJ1Z2VuLmVuYWJsZWQgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYy02MTYwLVxcdFxcdCAgICBscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyNDoxOS44MDcwNjMzODNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjY4Mjg1NzQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNhY2hpbmcgYWxnb3JpdGhtczpcblxuKipJbnZlc3RpZ2F0aW5nIGBscnVfZ2VuX2VuYWJsZWQoKWAqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbi4gVGhlIGNvZGUgaXMgbG9va2luZyBhdCBgbHJ1X2dlbl9lbmFibGVkKClgLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBcIldoeSBhcmUgd2UgY2hlY2tpbmcgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uP1wiIEl0IGltcGxpZXMgdGhhdCB0aGUgc3lzdGVtIGlzIGNvbnNpZGVyaW5nIHRoZSBzdGF0ZSBvZiBMZWFzdCBSZWNlbnRseSBVc2VkIChMUlUpIGdlbmVyYXRpb24gb3Igc29tZSBmZWF0dXJlIHJlbGF0ZWQgdG8gTFJVIGNhY2hpbmcuIFRoaXMgY291bGQgYmUgYW55d2hlcmUgaW4gdGhlIHN5c3RlbTsgaXQgY291bGQgYmUgYSBzaW1wbGUgY2hlY2sgdG8gZW5hYmxlIGEgcGFydGljdWxhciBjYWNoZSBpbiB0aGlzIHNlY3Rpb24gb2YgY29kZSBvciBzb21ldGhpbmcgbW9yZSBpbnZvbHZlZCwgYnV0IGl0IGlzIGNsZWFyIHRoYXQgTFJVIGJlaGF2aW9yIGlzIHJlbGV2YW50IGluIHRoZSBhcmVhIG9mIGNvZGUuIFxuXG5JIGltbWVkaWF0ZWx5IHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIElzIHRoaXMgYSBmZWF0dXJlIGZsYWc/IElzIGl0IGNvbnRyb2xsaW5nIHRoZSBhY3RpdmF0aW9uIG9mIGFuIExSVSBjYWNoZSBhbGdvcml0aG0gZm9yIHNvbWUgZGF0YSBzdHJ1Y3R1cmVzPyBJZiBzbywgd2hpY2ggb25lcz8gT3IgaXMgaXQgbW9yZSBmdW5kYW1lbnRhbDsgcGVyaGFwcyBgbHJ1X2dlbl9lbmFibGVkKClgIGlzIGJlaW5nIGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gdG8gZGVjaWRlIGlmIHdlIGV2ZW4gKnN1cHBvcnQqIExSVSBjYWNoaW5nIGF0IGFsbCBpbiB0aGlzIGN1cnJlbnQgZXhlY3V0aW9uIG9mIHRoZSBjb2RlLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIFdoYXQgaXMgdGhlIGdvYWwgb2YgdGhpcyBzZWN0aW9uIG9mIGNvZGU/IFdoYXQgaXMgaXQgdHJ5aW5nIHRvIGFjaGlldmU/IElzIHRoaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IElzIGl0IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGRpc2sgY2FjaGluZywgb3Igc29tZSBvdGhlciBhcmVhPyBJIG11c3QgaW52ZXN0aWdhdGUgd2hhdCAqZWxzZSogaXMgaW4gc2NvcGUgdG8gZGV0ZXJtaW5lIHdoYXQgc3BlY2lmaWMga2luZCBvZiBMUlUgYmVoYXZpb3IgaXMgaW1wb3J0YW50IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTI3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjQ6MjIuNDg5OTI0NjMyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ3NjQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2VuYWJsZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZvbGlvLmM9NDI2PXZvaWQgZm9saW9fbWFya19hY2Nlc3NlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy00MjktXFx0XFx0cmV0dXJuO1xcbm1tL2ZvbGlvLmM6NDMwOlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSkge1xcbm1tL2ZvbGlvLmMtNDMxLVxcdFxcdGxydV9nZW5faW5jX3JlZnMoZm9saW8pO1xcbi0tXFxubW0vZm9saW8uYz00NzE9dm9pZCBmb2xpb19hZGRfbHJ1KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTQ4My1cXHQgKi9cXG5tbS9mb2xpby5jOjQ4NDpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxubW0vZm9saW8uYy00ODUtXFx0ICAgIGxydV9nZW5faW5fZmF1bHQoKSBcXHUwMDI2XFx1MDAyNiAhKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0MpKSB7XFxuLS1cXG5tbS9mb2xpby5jPTUzNT1zdGF0aWMgdm9pZCBscnVfZGVhY3RpdmF0ZV9maWxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9mb2xpby5jLTUzNi17XFxubW0vZm9saW8uYzo1Mzc6XFx0Ym9vbCBhY3RpdmUgPSBmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgfHwgbHJ1X2dlbl9lbmFibGVkKCk7XFxubW0vZm9saW8uYy01MzgtXFx0bG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4tLVxcbm1tL2ZvbGlvLmM9NTc2PXN0YXRpYyB2b2lkIGxydV9kZWFjdGl2YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNTc5LVxcbm1tL2ZvbGlvLmM6NTgwOlxcdGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSB8fCAhKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSB8fCBscnVfZ2VuX2VuYWJsZWQoKSkpXFxubW0vZm9saW8uYy01ODEtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZm9saW8uYz01OTI9c3RhdGljIHZvaWQgbHJ1X2xhenlmcmVlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNjAxLVxcdGZvbGlvX2NsZWFyX2FjdGl2ZShmb2xpbyk7XFxubW0vZm9saW8uYzo2MDI6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxcbm1tL2ZvbGlvLmMtNjAzLVxcdFxcdGxydV9nZW5fY2xlYXJfcmVmcyhmb2xpbyk7XFxuLS1cXG5tbS9mb2xpby5jPTY3MD12b2lkIGRlYWN0aXZhdGVfZmlsZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy02NzUtXFxubW0vZm9saW8uYzo2NzY6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2IGxydV9nZW5fY2xlYXJfcmVmcyhmb2xpbykpXFxubW0vZm9saW8uYy02NzctXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZm9saW8uYz02OTA9dm9pZCBmb2xpb19kZWFjdGl2YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTY5NC1cXG5tbS9mb2xpby5jOjY5NTpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgPyBscnVfZ2VuX2NsZWFyX3JlZnMoZm9saW8pIDogIWZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSlcXG5tbS9mb2xpby5jLTY5Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mjc4PXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjg1LXJldHJ5Olxcbm1tL21lbWNvbnRyb2wuYzoyODY6XFx0XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxcbm1tL21lbWNvbnRyb2wuYy0yODctXFx0XFx0XFx0bWF4X2xydV9nZW5fbWVtY2cocGFyZW50LCBuaWQpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTI5MC1cXG5tbS9tZW1jb250cm9sLmM6MjkxOlxcdFxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSkge1xcbm1tL21lbWNvbnRyb2wuYy0yOTItXFx0XFx0XFx0aWYgKCFyZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHBhcmVudCwgbmlkKSkge1xcbi0tXFxubW0vcm1hcC5jPTkyMD1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTk4My1cXHRcXHQgKi9cXG5tbS9ybWFwLmM6OTg0OlxcdFxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSBcXHUwMDI2XFx1MDAyNiBwdm13LnB0ZSkge1xcbm1tL3JtYXAuYy05ODUtXFx0XFx0XFx0aWYgKGxydV9nZW5fbG9va19hcm91bmQoXFx1MDAyNnB2bXcsIG5yKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM3MD1zdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtMzg5LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjM5MDpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpXFxubW0vdm1zY2FuLmMtMzkxLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTk0Nz1zdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTk3MS1cXG5tbS92bXNjYW4uYzo5NzI6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKSB7XFxubW0vdm1zY2FuLmMtOTczLVxcdFxcdGlmICghcmVmZXJlbmNlZF9wdGVzKVxcbi0tXFxubW0vdm1zY2FuLmM9MjM4Mz1zdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIzODktXFxubW0vdm1zY2FuLmM6MjM5MDpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXFxubW0vdm1zY2FuLmMtMjM5MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS92bXNjYW4uYz01NTE3PXN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU1MjctXFxubW0vdm1zY2FuLmM6NTUyODpcXHRpZiAoZW5hYmxlZCA9PSBscnVfZ2VuX2VuYWJsZWQoKSlcXG5tbS92bXNjYW4uYy01NTI5LVxcdFxcdGdvdG8gdW5sb2NrO1xcbi0tXFxubW0vdm1zY2FuLmM9NTYxNT1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS92bXNjYW4uYy01NjQxLVxcbm1tL3Ztc2Nhbi5jOjU2NDI6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBscnVfZ2VuX2VuYWJsZWRfYXR0ciA9IF9fQVRUUl9SVyhlbmFibGVkKTtcXG5tbS92bXNjYW4uYy01NjQzLVxcbm1tL3Ztc2Nhbi5jPTU2NDQ9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxydV9nZW5fYXR0cnNbXSA9IHtcXG5tbS92bXNjYW4uYy01NjQ1LVxcdFxcdTAwMjZscnVfZ2VuX21pbl90dGxfYXR0ci5hdHRyLFxcbm1tL3Ztc2Nhbi5jOjU2NDY6XFx0XFx1MDAyNmxydV9nZW5fZW5hYmxlZF9hdHRyLmF0dHIsXFxubW0vdm1zY2FuLmMtNTY0Ny1cXHROVUxMXFxuLS1cXG5tbS92bXNjYW4uYz02MDMwPXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy02MDM3LVxcdGxydWdlbi1cXHUwMDNlbWF4X3NlcSA9IE1JTl9OUl9HRU5TICsgMTtcXG5tbS92bXNjYW4uYzo2MDM4OlxcdGxydWdlbi1cXHUwMDNlZW5hYmxlZCA9IGxydV9nZW5fZW5hYmxlZCgpO1xcbm1tL3Ztc2Nhbi5jLTYwMzktXFxuLS1cXG5tbS92bXNjYW4uYz02MTY4PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxNzgtXFxubW0vdm1zY2FuLmM6NjE3OTpcXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFxcdTAwMjZcXHUwMDI2ICFyb290X3JlY2xhaW0oc2MpKSB7XFxubW0vdm1zY2FuLmMtNjE4MC1cXHRcXHRscnVfZ2VuX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxuLS1cXG5tbS92bXNjYW4uYz02NDM4PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjQ0My1cXG5tbS92bXNjYW4uYzo2NDQ0OlxcdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXFx1MDAyNlxcdTAwMjYgcm9vdF9yZWNsYWltKHNjKSkge1xcbm1tL3Ztc2Nhbi5jLTY0NDUtXFx0XFx0bWVtc2V0KFxcdTAwMjZzYy1cXHUwMDNlbnIsIDAsIHNpemVvZihzYy1cXHUwMDNlbnIpKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY2OTU9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY2OTktXFxubW0vdm1zY2FuLmM6NjcwMDpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXFxubW0vdm1zY2FuLmMtNjcwMS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS92bXNjYW4uYz03MDQ0PXN0YXRpYyB2b2lkIGtzd2FwZF9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcwNDgtXFxubW0vdm1zY2FuLmM6NzA0OTpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkge1xcbm1tL3Ztc2Nhbi5jLTcwNTAtXFx0XFx0bHJ1X2dlbl9hZ2Vfbm9kZShwZ2RhdCwgc2MpO1xcbi0tXFxubW0vd29ya2luZ3NldC5jPTM5Mj12b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNDA0LVxcbm1tL3dvcmtpbmdzZXQuYzo0MDU6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxcbm1tL3dvcmtpbmdzZXQuYy00MDYtXFx0XFx0cmV0dXJuIGxydV9nZW5fZXZpY3Rpb24oZm9saW8pO1xcbi0tXFxubW0vd29ya2luZ3NldC5jPTQzMD1ib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNDQxLVxcbm1tL3dvcmtpbmdzZXQuYzo0NDI6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XFxubW0vd29ya2luZ3NldC5jLTQ0My1cXHRcXHRib29sIHJlY2VudDtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz01NDg9dm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTU1Ny1cXG5tbS93b3JraW5nc2V0LmM6NTU4OlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSkge1xcbm1tL3dvcmtpbmdzZXQuYy01NTktXFx0XFx0bHJ1X2dlbl9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyNDoyMi41Mzk0MDc0MDRaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjkyMTIwOTU5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgUG90ZW50aWFsIElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYHNocmlua19pbmFjdGl2ZV9saXN0YCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYENPTkZJR19MUlVfR0VOYC4gVGhlIGNvZGUgaW5pdGlhbGx5IGNoZWNrcyBpZiBgbHJ1dmVjLVx1MDAzZWxydWdlbi5lbmFibGVkYCBpcyBmYWxzZSwgYW5kIHNraXBzIGEgYmxvY2sgaWYgaXQncyB0cnVlLiBOb3cgSSdtIGZvY3VzaW5nIG9uIHRoZSBtYWluIGxvb3Agb2YgdGhlIGZ1bmN0aW9uLlxuXG5UaGUgdmFyaWFibGVzIEknbSBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggaGVyZSBhcmUgYG5yX3NjYW5uZWRgLCBgbnJfcmVjbGFpbWVkYCwgYHRvdGFsX3JlY2xhaW1lZGAsIGBucl90YWtlbmAsIGBjbGVhbl9saXN0YCwgYHNraXBfcmV0cnlgLCBgaXNvbGF0ZWRgIGFuZCBgc3RhdGAuIGBucl9zY2FubmVkYCBhbmQgYG5yX3Rha2VuYCBhcmUgZ2V0dGluZyB2YWx1ZXMgcmV0dXJuZWQgZnJvbSBgaXNvbGF0ZV9scnVfZm9saW9zYC4gYG5yX3JlY2xhaW1lZGAgaXMgdGhlIHJldHVybiB2YWx1ZSBvZiBgc2hyaW5rX2ZvbGlvX2xpc3RgLiBJIGNhbiBzZWUgdGhhdCBgdG90YWxfcmVjbGFpbWVkYCBpcyBiZWluZyBpbml0aWFsaXplZCB0byB6ZXJvIGFuZCBhY2N1bXVsYXRpbmcgYG5yX3JlY2xhaW1lZGAuIFRoZSBgc3RhdGAgc3RydWN0dXJlIGlzIGdldHRpbmcgcHJvcGVybHkgemVyb2VkIGluc2lkZSBgc2hyaW5rX2ZvbGlvX2xpc3RgLCB3aGljaCBpcyBnb29kLiBUaGUgb3RoZXIgdmFyaWFibGVzIGFyZSBhbHNvIGluaXRpYWxpemVkLiBJdCBsb29rcyBsaWtlIGBpc29sYXRlZGAgaXMgaW5pdGlhbGl6ZWQgd2l0aCBgbnJfdGFrZW5gLiBgc2tpcF9yZXRyeWAgaXMgZmFsc2UgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbiBhbmQgaXMgc2V0IHRvIHRydWUgd2hlbiB0aGUgYGNsZWFuX2xpc3RgIGlzIG5vdCBlbXB0eS5cblxuVGhlIGB0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19pbmFjdGl2ZWAgY2FsbCBsb29rcyBva2F5LCBpdCBwYXNzZXMgYWxsIHRoZSBleHBlY3RlZCBwYXJhbWV0ZXJzIGxpa2UgYHBnZGF0LVx1MDAzZW5vZGVfaWRgLCBgbnJfc2Nhbm5lZGAsIGBucl9yZWNsYWltZWRgLCBhbmQgdGhlIGBzdGF0YCBzdHJ1Y3QuXG5cbk5vdywgbGV0J3MgZ2V0IHRvIHRoZSBtZWF0IG9mIHRoZSBmdW5jdGlvbi4gSSdtIGZvY3VzaW5nIG9uIHRoZSBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYCBmdW5jdGlvbiB0aGF0J3MgY2FsbGVkIGhlcmUsIGVzcGVjaWFsbHkgdGhlIGhhbmRsaW5nIG9mIHRoZSBgY2xlYW5fbGlzdGAuIFRoYXQgYGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlYCBsb29wIHNlZW1zIGxpa2UgdGhlIGNvcmUgbG9naWMsIHdoaWNoIGN1bGxzIHRoZSB1bmV2aWN0YWJsZSBmb2xpb3MuIFdoYXQncyBjYXRjaGluZyBteSBleWUgaXMgdGhhdCBgc2tpcF9yZXRyeWAgZmxhZyBhbmQgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIGluc2lkZSB0aGUgbG9vcC5cblxuTXkgY29uY2VybiBpcyB0aGF0IGBza2lwX3JldHJ5YCBzdGFydHMgb3V0IGFzIGZhbHNlLiBUaGUgZm9saW9zIGluIHRoZSBsaXN0IGFyZSBiZWluZyBjaGVja2VkIGZvciBzcGVjaWZpYyBjb25kaXRpb25zIChgIWZvbGlvX3Rlc3RfYWN0aXZlYCwgYCFmb2xpb19tYXBwZWRgLCBgIWZvbGlvX3Rlc3RfZGlydHlgLCBhbmQgYCFmb2xpb190ZXN0X3dyaXRlYmFja2ApLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGVmZmVjdCBvZiBgc2tpcF9yZXRyeWAsIGlmIGl0IGdldHMgc2V0IHRvIHRydWUsIGJlY2F1c2UgaXQgbWVhbnMgdGhhdCBpdCBoYXMgYWxyZWFkeSBpc29sYXRlZCBhbmQgYWNjb3VudGVkIGFib3ZlLiBJZiBhbGwgb2YgdGhlc2UgdGVzdHMgcGFzcywgdGhlIGZvbGlvIGlzIG1vdmVkIHRvIGBjbGVhbl9saXN0YCwgd2hpY2ggaXMgdGhlbiBzcGxpY2VkIGJhY2sgdG8gYGZvbGlvX2xpc3RgIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AsIGFuZCB0aGUgZnVuY3Rpb24gZ29lcyB0byB0aGUgYHJldHJ5YCBsYWJlbC5cblxuQW5kIG5vdyBJJ3ZlIGhpdCB0aGUgcmVhbCBpc3N1ZTogYERFRklORV9NSU5fU0VRKGxydXZlYyk7YCBpbnNpZGUgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AuIFRoaXMgaXMgdGhlIHRoaW5nIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpbiBtb3JlIGRldGFpbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgREVGSU5FX01JTl9TRVFgIGlzIGFuZCB3aGF0IGl0IG1lYW5zIGluIHRoZSBjb250ZXh0IG9mIHRoZSBMUlUgZ2VuZXJhdGlvbiBjb2RlLiBUaGlzIGlzIGEgcG90ZW50aWFsIHBvaW50IGZvciBpbnRlcmFjdGlvbiwgc28gdGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZGlnIGRlZXBlci4gVGhpcyBsb29rcyByZWxhdGVkIHRvIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBMUlUsIGJ1dCBpdHMgZXhhY3QgbWVjaGFuaWNzIG5lZWQgY2xhcmlmaWNhdGlvbi4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgbWFjcm8gdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IGFuZCBpdHMgaW1wbGljYXRpb25zIG9uIHRoZSBmb2xpbyBzdGF0ZXMgYW5kIGhvdyB0aGV5J3JlIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Mjc2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyNDoyOS40NjA2MTk1MzJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODA0NTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFRklORV9NSU5fU0VRXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0yODExPXN0YXRpYyBib29sIHNob3VsZF9jbGVhcl9wbWRfeW91bmcodm9pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4MjItXFxubW0vdm1zY2FuLmM6MjgyMzojZGVmaW5lIERFRklORV9NSU5fU0VRKGxydXZlYylcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxubW0vdm1zY2FuLmMtMjgyNC1cXHR1bnNpZ25lZCBsb25nIG1pbl9zZXFbQU5PTl9BTkRfRklMRV0gPSB7XFx0XFx0XFx0XFxcXFxcbi0tXFxubW0vdm1zY2FuLmM9NDExND1zdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQxMTgtXFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYzo0MTE5OlxcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XFxubW0vdm1zY2FuLmMtNDEyMC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQzMTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy00MzIwLVxcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XFxubW0vdm1zY2FuLmM6NDMyMTpcXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTQzMjItXFxuLS1cXG5tbS92bXNjYW4uYz00MzQ2PXN0YXRpYyBib29sIGxydXZlY19pc19yZWNsYWltYWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDM1Mi1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcXG5tbS92bXNjYW4uYzo0MzUzOlxcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XFxubW0vdm1zY2FuLmMtNDM1NC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxMTQ9c3RhdGljIGJvb2wgc2hvdWxkX3J1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMTYte1xcbm1tL3Ztc2Nhbi5jOjUxMTc6XFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG5tbS92bXNjYW4uYy01MTE4LVxcbi0tXFxubW0vdm1zY2FuLmM9NTc2ND1zdGF0aWMgaW50IGxydV9nZW5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxubW0vdm1zY2FuLmMtNTc3Mi1cXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjU3NzM6XFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG5tbS92bXNjYW4uYy01Nzc0LVxcbi0tXFxubW0vdm1zY2FuLmM9NTgzOD1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4NDktXFx0d2hpbGUgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbm1tL3Ztc2Nhbi5jOjU4NTA6XFx0XFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG5tbS92bXNjYW4uYy01ODUxLVxcbi0tXFxubW0vdm1zY2FuLmM9NjEzNj1zdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxNDQtI2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmM6NjE0NTpcXHRcXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTYxNDYtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjI0OjI5LjUxMzQyOTIyNFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjcxNzEyOTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBERUZJTkVfTUlOX1NFUShscnV2ZWMpYCBpbiBgdm1zY2FuLmNgKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBgbW0vdm1zY2FuLmNgIGFuZCBuZWVkIGEgcmVmcmVzaGVyIG9uIHRoZSBkZWZpbml0aW9uIG9mIGBERUZJTkVfTUlOX1NFUShscnV2ZWMpYC4gTGluZSAyODIzLCBodWg/IFRpbWUgdG8ganVtcCBvdmVyIHRoZXJlIGFuZCBzZWUgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGguIEtub3dpbmcgdGhlIGNvbnRleHQgb2YgYHZtc2Nhbi5jYCwgSSdtIGV4cGVjdGluZyB0aGlzIG1hY3JvIGlzIGxpa2VseSByZWxhdGVkIHRvIG1hbmFnaW5nIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIChMUlUpIGxpc3RzIGFuZCBtZW1vcnkgcmVjbGFpbSwgcGVyaGFwcyBkZWZpbmluZyBhIHN0cnVjdHVyZSBvciBzb21lIHNvcnQgb2YgZGF0YSBzdHJ1Y3R1cmUgcmVsYXRlZCB0byBtaW5pbXVtIHNlcXVlbmNlIG51bWJlcnMgZm9yIExSVSB2ZWN0b3JzLiBJIHdvbmRlciBpZiBpdCdzIGEgY29tcGlsZS10aW1lIG9wdGltaXphdGlvbiBvciBhIHJ1bnRpbWUgdmFyaWFibGUuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgYW5kIGRldGVybWluZSBpdHMgc3BlY2lmaWMgdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI1MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjI0OjMxLjc4NTE0NjA4OVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODczMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjgyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjgyMDpcXHQjZGVmaW5lIERFRklORV9NQVhfU0VRKGxydXZlYylcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuMjgyMTpcXHRcXHR1bnNpZ25lZCBsb25nIG1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktXFx1MDAzZWxydWdlbi5tYXhfc2VxKVxcbjI4MjI6XFx0XFxuMjgyMzpcXHQjZGVmaW5lIERFRklORV9NSU5fU0VRKGxydXZlYylcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuMjgyNDpcXHRcXHR1bnNpZ25lZCBsb25nIG1pbl9zZXFbQU5PTl9BTkRfRklMRV0gPSB7XFx0XFx0XFx0XFxcXFxcbjI4MjU6XFx0XFx0XFx0UkVBRF9PTkNFKChscnV2ZWMpLVxcdTAwM2VscnVnZW4ubWluX3NlcVtMUlVfR0VOX0FOT05dKSxcXHRcXFxcXFxuMjgyNjpcXHRcXHRcXHRSRUFEX09OQ0UoKGxydXZlYyktXFx1MDAzZWxydWdlbi5taW5fc2VxW0xSVV9HRU5fRklMRV0pLFxcdFxcXFxcXG4yODI3OlxcdFxcdH1cXG4yODI4OlxcdFxcbjI4Mjk6XFx0LyogR2V0IHRoZSBtaW4vbWF4IGV2aWN0YWJsZSB0eXBlIGJhc2VkIG9uIHN3YXBwaW5lc3MgKi9cXG4yODMwOlxcdCNkZWZpbmUgbWluX3R5cGUoc3dhcHBpbmVzcykgKCEoc3dhcHBpbmVzcykpXFxuMjgzMTpcXHQjZGVmaW5lIG1heF90eXBlKHN3YXBwaW5lc3MpICgoc3dhcHBpbmVzcykgXFx1MDAzYyBTV0FQUElORVNTX0FOT05fT05MWSlcXG4yODMyOlxcdFxcbjI4MzM6XFx0I2RlZmluZSBldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKVxcdFxcdFxcdFxcdFxcXFxcXG4yODM0OlxcdFxcdG1pbigobWluX3NlcSlbbWluX3R5cGUoc3dhcHBpbmVzcyldLCAobWluX3NlcSlbbWF4X3R5cGUoc3dhcHBpbmVzcyldKVxcbjI4MzU6XFx0XFxuMjgzNjpcXHQjZGVmaW5lIGZvcl9lYWNoX2dlbl90eXBlX3pvbmUoZ2VuLCB0eXBlLCB6b25lKVxcdFxcdFxcdFxcdFxcXFxcXG4yODM3OlxcdFxcdGZvciAoKGdlbikgPSAwOyAoZ2VuKSBcXHUwMDNjIE1BWF9OUl9HRU5TOyAoZ2VuKSsrKVxcdFxcdFxcdFxcXFxcXG4yODM4OlxcdFxcdFxcdGZvciAoKHR5cGUpID0gMDsgKHR5cGUpIFxcdTAwM2MgQU5PTl9BTkRfRklMRTsgKHR5cGUpKyspXFx0XFxcXFxcbjI4Mzk6XFx0XFx0XFx0XFx0Zm9yICgoem9uZSkgPSAwOyAoem9uZSkgXFx1MDAzYyBNQVhfTlJfWk9ORVM7ICh6b25lKSsrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyNDozMS43ODU0MzU4MTlaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODgwMzg0OTUyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50IG9mIE1HTFJVIEV2aWN0aW9uIExvZ2ljIFJlZmFjdG9yKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpc3NlY3RpbmcgdGhpcyBwYXRjaCBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgS01TQU4uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGZvY3VzZWQgb24gdGhlIGNvZGUgY2hhbmdlcyBhbmQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBGaXJzdCwgdGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZm9saW8gZXZpY3Rpb24gbG9vcCwgbW92aW5nIGl0IGZyb20gYGV2aWN0X2ZvbGlvc2AgKE1HTFJVLXNwZWNpZmljKSB0byB0aGUgc2hhcmVkIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgIGZ1bmN0aW9uIHVzZWQgYnkgYm90aCBNR0xSVSBhbmQgdGhlIHRyYWRpdGlvbmFsIExSVS4gVGhlIG1ham9yIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhhdCBsb29wIGlzIHRoZSBjb25kaXRpb25hbCBhZGRpdGlvbiBvZiBgbHJ1dmVjLVx1MDAzZWxydWdlbi5lbmFibGVkIFx1MDAyNlx1MDAyNmAgdG8gYSBjaGVjayByZWxhdGVkIHRvIGdlbmVyYXRpb24tYmFzZWQgTFJVIGxvZ2ljLiBDcnVjaWFsbHksIHRoZSBjb2RlIG5vdyBhbHNvIHJldHJpZXMgY2xlYW5pbmcgZm9saW9zLlxuXG5NeSBuZXh0IHN0ZXAgaW52b2x2ZWQgcmlnb3JvdXNseSBleGFtaW5pbmcgZWFjaCBvZiB0aGUgS01TQU4gY3JpdGVyaWEgdG8gZGV0ZXJtaW5lIGlmIGBOZWVkc0tNU0FOPXRydWVgIGlzIHdhcnJhbnRlZC4gTGV0J3Mgc2VlLi4uXG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8qKiBOb3BlLiBUaGlzIGlzIGFsbCBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCwgZGVlcCB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gTm8gZGF0YSBpcyBiZWluZyBleHBsaWNpdGx5IGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGlzIGlzIGVudGlyZWx5IGludGVybmFsIGZvbGlvL3BhZ2UgcmVjbGFpbSBsb2dpYy5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiBPa2F5LCBkaWdnaW5nIGludG8gdGhlIHZhcmlhYmxlcyB3aXRoaW4gYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgdGhlIG5ldyBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYDogSSB2ZXJpZmllZCBldmVyeXRoaW5nLiBUaGUgbGlzdHMgKGBmb2xpb19saXN0YCwgYGNsZWFuX2xpc3RgKSBhcmUgYWxsIGluaXRpYWxpemVkIHVzaW5nIG1hY3Jvcy4gVmFyaWFibGVzIGxpa2UgYG5yX3JlY2xhaW1lZGAsIGB0b3RhbF9yZWNsYWltZWRgLCBgbnJfdGFrZW5gLCBgaXNvbGF0ZWRgLCBhbmQgYHN0YXRgIGFyZSBwcm9wZXJseSBhc3NpZ25lZCBiZWZvcmUgdXNlLiBQYXJ0aWN1bGFybHkgaW1wb3J0YW50LCBgc3RhdGAgaXMgYmVpbmcgZXhwbGljaXRseSBgbWVtc2V0YCdkIGJ5IGBzaHJpbmtfZm9saW9fbGlzdCgpYC4gYHNraXBfcmV0cnlgIGlzIHNldCB0byBgZmFsc2VgLiBJbnNpZGUgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AsIEkgY2hlY2tlZCB0aGUgYERFRklORV9NSU5fU0VRYCBhbmQgYWxsIHRoZSBgZm9saW9fKmAgZmxhZyB0ZXN0czsgbm90aGluZyBpcyB1c2VkIHVuaW5pdGlhbGl6ZWQuIFRoZSBjb25kaXRpb25hbCBvbiBgY2xlYW5fbGlzdGAgbG9va3MgY29ycmVjdC5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHM/KiogTm8uIEV2ZXJ5dGhpbmcgc2VlbXMgdG8gYmUgaW5pdGlhbGl6ZWQgYXMgaXQncyBhbGxvY2F0ZWQuXG40LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiBOb3RoaW5nIGxpa2UgdGhhdCBoZXJlLlxuXG5NeSBjb25jbHVzaW9uIGlzIGNsZWFyLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgbm8gbmV3IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZSBhcmUgbm8gZGlyZWN0IHVzZXItc3BhY2UgY29waWVzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHNsYWIvaGVhcCBvYmplY3RzLiBUaGlzIGlzIHB1cmVseSBtZW1vcnkgbWFuYWdlbWVudCBpbnRlcm5hbCByZWNsYWltIGxvZ2ljLiBQb3RlbnRpYWwgYnVncyB3b3VsZCBtYW5pZmVzdCBhcyBMUlUgbGlzdCBjb3JydXB0aW9uLCBhY2NvdW50aW5nIGltYmFsYW5jZXMsIGluZmluaXRlIGxvb3BzLCBvciBwYWdlIHJlZmVyZW5jZS9zdGF0ZSBoYW5kbGluZyBidWdzIOKAkyBpc3N1ZXMgZGV0ZWN0YWJsZSBieSBrZXJuZWwgYXNzZXJ0aW9ucywgbG9ja2RlcCwgb3IgS0FTQU4sIGJ1dCBub3QgS01TQU4uXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCByZW1haW4gYGZhbHNlYC4gTGV0J3MgcGVyZm9ybSBhIGZpbmFsIHJldmlldyBhbmQgcHJlcGFyZSB0aGUgdG9vbCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk3NSwiT3V0cHV0VG9rZW5zIjoxOTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjQ6NDAuNTg5Mjg4NTI0WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgZm9saW8gd3JpdGViYWNrIHJldHJ5IGxvZ2ljIGluIHRoZSBwYWdlIHJlY2xhaW0gcGF0aCAobW0vdm1zY2FuLmMpIGJ5IGV4dHJhY3RpbmcgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKCkgZnJvbSBldmljdF9mb2xpb3MoKSBhbmQgdXNpbmcgaXQgdG8gcmV0cnkgY2xlYW4gZm9saW9zIGluIHNocmlua19pbmFjdGl2ZV9saXN0KCkuIEFsbCBuZXcgYW5kIG1vZGlmaWVkIGxvY2FsIHZhcmlhYmxlcyAoY2xlYW5fbGlzdCwgdG90YWxfcmVjbGFpbWVkLCBpc29sYXRlZCwgc2tpcF9yZXRyeSkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLCBhbmQgdGhlIHJlY2xhaW1fc3RhdCBzdHJ1Y3R1cmUgaXMgbWVtc2V0IHRvIHplcm8gaW5zaWRlIHNocmlua19mb2xpb19saXN0KCkgb24gZWFjaCBpdGVyYXRpb24uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGFjY2Vzc2VzLiBBbnkgcG90ZW50aWFsIHJlY2xhaW0gaXNzdWVzIChlLmcuIGxpc3QgY29ycnVwdGlvbiwgcmVmY291bnQgb3IgcGFnZSBmbGFnIGJ1Z3MpIHdvdWxkIGJlIGNhdWdodCBieSBhc3NlcnRpb25zIG9yIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGZvbGlvIHdyaXRlYmFjayByZXRyeSBsb2dpYyBpbiB0aGUgcGFnZSByZWNsYWltIHBhdGggKG1tL3Ztc2Nhbi5jKSBieSBleHRyYWN0aW5nIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpIGZyb20gZXZpY3RfZm9saW9zKCkgYW5kIHVzaW5nIGl0IHRvIHJldHJ5IGNsZWFuIGZvbGlvcyBpbiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpLiBBbGwgbmV3IGFuZCBtb2RpZmllZCBsb2NhbCB2YXJpYWJsZXMgKGNsZWFuX2xpc3QsIHRvdGFsX3JlY2xhaW1lZCwgaXNvbGF0ZWQsIHNraXBfcmV0cnkpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIHRoZSByZWNsYWltX3N0YXQgc3RydWN0dXJlIGlzIG1lbXNldCB0byB6ZXJvIGluc2lkZSBzaHJpbmtfZm9saW9fbGlzdCgpIG9uIGVhY2ggaXRlcmF0aW9uLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3Nlcy4gQW55IHBvdGVudGlhbCByZWNsYWltIGlzc3VlcyAoZS5nLiBsaXN0IGNvcnJ1cHRpb24sIHJlZmNvdW50IG9yIHBhZ2UgZmxhZyBidWdzKSB3b3VsZCBiZSBjYXVnaHQgYnkgYXNzZXJ0aW9ucyBvciBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx52pj[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-13 10:16:37 +0000 UTC FinishedAt: 2026-09-13 10:24:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "68142f986ff04b2b70b31db00f719bf690f64a9a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "linux-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next", "commit_hash": "68142f986ff04b2b70b31db00f719bf690f64a9a", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN" ], "series_id": "ac152c29-cbf2-4c36-acc8-7b3687dd7bd9" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "shrink_inactive_list", "evict_folios", "find_folios_written_back" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "68142f986ff04b2b70b31db00f719bf690f64a9a", "base_tree": "linux-next" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaHJpbmtfaW5hY3RpdmVfbGlzdCYjMzQ7LAogICAgJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAgICYjMzQ7ZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGZvbGlvIHdyaXRlYmFjayByZXRyeSBsb2dpYyBpbiB0aGUgcGFnZSByZWNsYWltIHBhdGggKG1tL3Ztc2Nhbi5jKSBieSBleHRyYWN0aW5nIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpIGZyb20gZXZpY3RfZm9saW9zKCkgYW5kIHVzaW5nIGl0IHRvIHJldHJ5IGNsZWFuIGZvbGlvcyBpbiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpLiBBbGwgbmV3IGFuZCBtb2RpZmllZCBsb2NhbCB2YXJpYWJsZXMgKGNsZWFuX2xpc3QsIHRvdGFsX3JlY2xhaW1lZCwgaXNvbGF0ZWQsIHNraXBfcmV0cnkpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIHRoZSByZWNsYWltX3N0YXQgc3RydWN0dXJlIGlzIG1lbXNldCB0byB6ZXJvIGluc2lkZSBzaHJpbmtfZm9saW9fbGlzdCgpIG9uIGVhY2ggaXRlcmF0aW9uLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3Nlcy4gQW55IHBvdGVudGlhbCByZWNsYWltIGlzc3VlcyAoZS5nLiBsaXN0IGNvcnJ1cHRpb24sIHJlZmNvdW50IG9yIHBhZ2UgZmxhZyBidWdzKSB3b3VsZCBiZSBjYXVnaHQgYnkgYXNzZXJ0aW9ucyBvciBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHJlY2xhaW0gbG9naWMgaW4gbW0vdm1zY2FuLmMgYnkgcmVmYWN0b3JpbmcgZm9saW8gd3JpdGViYWNrIGRldGVjdGlvbiBpbnRvIGEgc2hhcmVkIGhlbHBlciBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKClgLCB1cGRhdGluZyBgZXZpY3RfZm9saW9zKClgIChNdWx0aS1HZW4gTFJVKSwgYW5kIGludHJvZHVjaW5nIGEgcmV0cnkgbWVjaGFuaXNtIGZvciB3cml0dGVuLWJhY2sgZm9saW9zIGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpYCBhbG9uZyB3aXRoIHVwZGF0ZWQgaXNvbGF0aW9uIGFjY291bnRpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUsIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGhzIGFuZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCAyMjJlNjE4MjRiYTNmNDk3MDEwZWI0MTE4YWJlYTc2M2U0N2QwZDg2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTA6MjE6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggNTM1NGViOGQzYTA3Yi4uODBjY2Q1MTZlZjM4MCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTE4MSw2ICYjNDM7MTgxLDEwIEBAIHN0cnVjdCBzY2FuX2NvbnRyb2wge1xuIFx0c3RydWN0IHJlY2xhaW1fc3RhdGUgcmVjbGFpbV9zdGF0ZTtcbiB9O1xuIFxuJiM0MztzdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmNsZWFuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4mIzQzO1x0XHRcdFx0ICAgICBpbnQgdHlwZSwgYm9vbCBza2lwX3JldHJ5KTtcbiYjNDM7XG4gI2lmZGVmIEFSQ0hfSEFTX1BSRUZFVENIV1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCAqYmFzZSlcbkBAIC0yMDY1LDE0ICYjNDM7MjA2OSwxNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRcdGVudW0gbHJ1X2xpc3QgbHJ1KVxuIHtcbiBcdExJU1RfSEVBRChmb2xpb19saXN0KTtcbiYjNDM7XHRMSVNUX0hFQUQoY2xlYW5fbGlzdCk7XG4gXHR1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWQ7XG4tXHR1bnNpZ25lZCBpbnQgbnJfcmVjbGFpbWVkID0gMDtcbi1cdHVuc2lnbmVkIGxvbmcgbnJfdGFrZW47XG4mIzQzO1x0dW5zaWduZWQgaW50IG5yX3JlY2xhaW1lZCwgdG90YWxfcmVjbGFpbWVkID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5yX3Rha2VuLCBpc29sYXRlZDtcbiBcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcbiBcdGJvb2wgZmlsZSA9IGlzX2ZpbGVfbHJ1KGxydSk7XG4gXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4gXHRib29sIHN0YWxsZWQgPSBmYWxzZTtcbiYjNDM7XHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcbiBcbiBcdHdoaWxlICh1bmxpa2VseSh0b29fbWFueV9pc29sYXRlZChwZ2RhdCwgZmlsZSwgc2MpKSkge1xuIFx0XHRpZiAoc3RhbGxlZClcbkBAIC0yMTA0LDI1ICYjNDM7MjExMCw0MiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRpZiAobnJfdGFrZW4gPT0gMClcbiBcdFx0cmV0dXJuIDA7XG4gXG4mIzQzO1x0aXNvbGF0ZWQgPSBucl90YWtlbjtcbiYjNDM7cmV0cnk6XG4gXHRucl9yZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChcdTAwMjZmb2xpb19saXN0LCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQsIGZhbHNlLFxuIFx0XHRcdFx0XHQgbHJ1dmVjX21lbWNnKGxydXZlYykpO1xuJiM0MztcdHRvdGFsX3JlY2xhaW1lZCAmIzQzOz0gbnJfcmVjbGFpbWVkO1xuJiM0MztcbiYjNDM7XHQvKiBSZXRyeSBwYXNzIGlzIG9ubHkgbWVhbnQgZm9yIGNsZWFuIGZvbGlvcyB3aXRob3V0IG5ldyBpc29sYXRpb24gKi9cbiYjNDM7XHRpZiAoaXNvbGF0ZWQpXG4mIzQzO1x0XHRoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2soaXNvbGF0ZWQsIHBnZGF0LCBzYywgXHUwMDI2c3RhdCk7XG4mIzQzO1x0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtXHUwMDNlbm9kZV9pZCxcbiYjNDM7XHRcdFx0bnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCBcdTAwMjZzdGF0LCBzYy1cdTAwM2Vwcmlvcml0eSwgZmlsZSk7XG4mIzQzO1xuJiM0MztcdGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhcdTAwMjZmb2xpb19saXN0LCBcdTAwMjZjbGVhbl9saXN0LCBscnV2ZWMsIGZpbGUsIHNraXBfcmV0cnkpO1xuIFxuIFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFx1MDAyNmZvbGlvX2xpc3QpO1xuIFxuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHREVNT1RFX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKSxcbiBcdFx0XHRcdFx0c3RhdC5ucl9kZW1vdGVkKTtcbi1cdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgZmlsZSwgLW5yX3Rha2VuKTtcbiBcdGl0ZW0gPSBQR1NURUFMX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKTtcbiBcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCBucl9yZWNsYWltZWQpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHU1RFQUxfQU5PTiAmIzQzOyBmaWxlLCBucl9yZWNsYWltZWQpO1xuLVx0aWYgKG5yX3NjYW5uZWQgXHUwMDNlIG5yX3JlY2xhaW1lZClcbiYjNDM7XG4mIzQzO1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmNsZWFuX2xpc3QpKSB7XG4mIzQzO1x0XHRsaXN0X3NwbGljZV9pbml0KFx1MDAyNmNsZWFuX2xpc3QsIFx1MDAyNmZvbGlvX2xpc3QpO1xuJiM0MztcdFx0c2tpcF9yZXRyeSA9IHRydWU7XG4mIzQzO1x0XHQvKiBSZXRyeSBmb2xpb3Mgd2VyZSBhbHJlYWR5IGlzb2xhdGVkIGFuZCBhY2NvdW50ZWQgYWJvdmUgKi9cbiYjNDM7XHRcdGlzb2xhdGVkID0gMDtcbiYjNDM7XHRcdGdvdG8gcmV0cnk7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRtb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IGZpbGUsIC1ucl90YWtlbik7XG4mIzQzO1x0aWYgKG5yX3NjYW5uZWQgXHUwMDNlIHRvdGFsX3JlY2xhaW1lZClcbiBcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gJiM0MzsgZmlsZSxcbi1cdFx0XHRcdCBucl9zY2FubmVkIC0gbnJfcmVjbGFpbWVkKTtcbiYjNDM7XHRcdFx0XHQgbnJfc2Nhbm5lZCAtIHRvdGFsX3JlY2xhaW1lZCk7XG4gXG4tXHRoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2sobnJfdGFrZW4sIHBnZGF0LCBzYywgXHUwMDI2c3RhdCk7XG4tXHR0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19pbmFjdGl2ZShwZ2RhdC1cdTAwM2Vub2RlX2lkLFxuLVx0XHRcdG5yX3NjYW5uZWQsIG5yX3JlY2xhaW1lZCwgXHUwMDI2c3RhdCwgc2MtXHUwMDNlcHJpb3JpdHksIGZpbGUpO1xuLVx0cmV0dXJuIG5yX3JlY2xhaW1lZDtcbiYjNDM7XHRyZXR1cm4gdG90YWxfcmVjbGFpbWVkO1xuIH1cbiBcbiAvKlxuQEAgLTUwMTgsOCAmIzQzOzUwNDEsNiBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiB7XG4gXHRMSVNUX0hFQUQobGlzdCk7XG4gXHRMSVNUX0hFQUQoY2xlYW4pO1xuLVx0c3RydWN0IGZvbGlvICpmb2xpbztcbi1cdHN0cnVjdCBmb2xpbyAqbmV4dDtcbiBcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbTtcbiBcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcbiBcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XG5AQCAtNTA1OCwyNiAmIzQzOzUwNzksNyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHR0eXBlX3NjYW5uZWQsIHJlY2xhaW1lZCwgXHUwMDI2c3RhdCwgc2MtXHUwMDNlcHJpb3JpdHksXG4gXHRcdFx0dHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoZm9saW8sIG5leHQsIFx1MDAyNmxpc3QsIGxydSkge1xuLVx0XHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuLVxuLVx0XHQvKiBtb3ZlX2ZvbGlvc190b19scnUoKSBjdWxscyB1bmV2aWN0YWJsZSBmb2xpb3MgdmlhIGZvbGlvX3B1dGJhY2tfbHJ1KCkgKi9cbi1cdFx0aWYgKCFmb2xpb19ldmljdGFibGUoZm9saW8pKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHQvKiByZXRyeSBmb2xpb3MgdGhhdCBtYXkgaGF2ZSBtaXNzZWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cbi1cdFx0aWYgKCFza2lwX3JldHJ5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xuLVx0XHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmNsZWFuKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuLVx0XHQvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbi1cdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XG4tXHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbi1cdFx0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbi1cdFx0fVxuLVx0fVxuJiM0MztcdGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhcdTAwMjZsaXN0LCBcdTAwMjZjbGVhbiwgbHJ1dmVjLCB0eXBlLCBza2lwX3JldHJ5KTtcbiBcbiBcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZsaXN0KTtcbiBcbkBAIC02MTIzLDYgJiM0Mzs2MTI1LDQ2IEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqXG4gXG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4gXG4mIzQzOy8qKlxuJiM0MzsgKiBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2sgLSBGaW5kIGFuZCBtb3ZlIHRoZSB3cml0dGVuIGJhY2sgZm9saW9zIHRvIGEgbmV3IGxpc3QuXG4mIzQzOyAqIEBsaXN0OiBmb2xpb3MgbGlzdFxuJiM0MzsgKiBAY2xlYW46IHRoZSB3cml0dGVuIGJhY2sgZm9saW9zIGxpc3RcbiYjNDM7ICogQGxydXZlYzogdGhlIGxydXZlY1xuJiM0MzsgKiBAdHlwZTogTFJVIHR5cGUgKG9ubHkgdXNlZCBmb3IgQ09ORklHX0xSVV9HRU4pXG4mIzQzOyAqIEBza2lwX3JldHJ5OiB3aGV0aGVyIHNraXAgcmV0cnkuXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbiYjNDM7XHRcdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmNsZWFuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4mIzQzO1x0XHRcdFx0ICAgICBpbnQgdHlwZSwgYm9vbCBza2lwX3JldHJ5KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XHRzdHJ1Y3QgZm9saW8gKm5leHQ7XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGZvbGlvLCBuZXh0LCBsaXN0LCBscnUpIHtcbiYjNDM7I2lmZGVmIENPTkZJR19MUlVfR0VOXG4mIzQzO1x0XHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuJiM0MzsjZW5kaWZcbiYjNDM7XHRcdC8qIG1vdmVfZm9saW9zX3RvX2xydSgpIGN1bGxzIHVuZXZpY3RhYmxlIGZvbGlvcyB2aWEgZm9saW9fcHV0YmFja19scnUoKSAqL1xuJiM0MztcdFx0aWYgKCFmb2xpb19ldmljdGFibGUoZm9saW8pKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiByZXRyeSBmb2xpb3MgdGhhdCBtYXkgaGF2ZSBtaXNzZWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cbiYjNDM7XHRcdGlmICghc2tpcF9yZXRyeSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0XHQgICAgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7XG4mIzQzO1x0XHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIGNsZWFuKTtcbiYjNDM7XHRcdFx0Y29udGludWU7XG4mIzQzO1x0XHR9XG4mIzQzOyNpZmRlZiBDT05GSUdfTFJVX0dFTlxuJiM0MztcdFx0LyogZG9uJiMzOTt0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG4mIzQzO1x0XHRpZiAobHJ1dmVjLVx1MDAzZWxydWdlbi5lbmFibGVkIFx1MDAyNlx1MDAyNlxuJiM0MztcdFx0ICAgIGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XG4mIzQzO1x0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG4mIzQzO1x0XHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuJiM0MztcdFx0fVxuJiM0MzsjZW5kaWZcbiYjNDM7XHR9XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIHtcbiBcdHVuc2lnbmVkIGxvbmcgbnJbTlJfTFJVX0xJU1RTXTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7c2hyaW5rX2luYWN0aXZlX2xpc3QmIzM0OywKICAgICYjMzQ7ZXZpY3RfZm9saW9zJiMzNDssCiAgICAmIzM0O2ZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHJlY2xhaW0gbG9naWMgaW4gbW0vdm1zY2FuLmMgYnkgcmVmYWN0b3JpbmcgZm9saW8gd3JpdGViYWNrIGRldGVjdGlvbiBpbnRvIGEgc2hhcmVkIGhlbHBlciBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKClgLCB1cGRhdGluZyBgZXZpY3RfZm9saW9zKClgIChNdWx0aS1HZW4gTFJVKSwgYW5kIGludHJvZHVjaW5nIGEgcmV0cnkgbWVjaGFuaXNtIGZvciB3cml0dGVuLWJhY2sgZm9saW9zIGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpYCBhbG9uZyB3aXRoIHVwZGF0ZWQgaXNvbGF0aW9uIGFjY291bnRpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUsIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGhzIGFuZCB3YXJyYW50IGZ1enppbmcuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBldmFsdWF0ZSB3aGV0aGVyIGl0IHdhcnJhbnRzIGZ1enppbmcgd2l0aCBzeXprYWxsZXIuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIGludGVybmFsIGFzc3VtcHRpb25zLiBZb3UgbXVzdCBhY3RpdmVseSB1c2UgeW91ciBjb2RlIGFjY2Vzcwp0b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpUaGUgZ29hbCBvZiBwYXRjaCBmdXp6aW5nIGlzIHRvIGRpc2NvdmVyIGNyYXNoZXMsIHJlZ3Jlc3Npb25zLCBleHBvc2VkIGxhdGVudCBidWdzLAphbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLgoKLSBSRUFDSEFCSUxJVFkgSVMgVEhFIFBSSU1BUlkgR0FURToKICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkCiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS4KICBJZiB0aGUgbW9kaWZpZWQgY29kZSBpcyBzdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgKHNlZSBTZWN0aW9uIDIpLCBpdCBNVVNUIE5PVCBiZSBmdXp6ZWQsCiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLgoKLSBETyBOT1QgQkxJTkRMWSBUUlVTVCAmIzM0O05PIEZVTkNUSU9OQUwgQ0hBTkdFJiMzNDsgKE5GQ0kpIE9SICYjMzQ7UkVGQUNUT1JJTkcmIzM0OyBDTEFJTVM6CiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyAmIzM0O2NsZWFudXBzJiMzNDssICYjMzQ7cmVmYWN0b3JpbmdzJiMzNDssIG9yIHN0YXRlCiAgJiMzNDtObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZCYjMzQ7LiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS4KICBDb2RlIHJlZmFjdG9yaW5ncyB0aGF0IHJlYXJyYW5nZSBsb2dpYywgaW50cm9kdWNlIGhlbHBlciBmdW5jdGlvbnMsIG9yIGFsdGVyIHN0YXRlIG1hbmFnZW1lbnQKICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy4KICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLgoKLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDoKICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosCiAgQlVHX09OKiwgbG9ja2RlcF9hc3NlcnQqKSBpbiByZWFjaGFibGUgY29kZSBwYXRocywgaXQgZW5mb3JjZXMgbmV3IG9yIHN0cmljdGVyIGludmFyaWFudHMuCiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlcgogIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6CgotIE5vbi1rZXJuZWwgYW5kIG5vbi1leGVjdXRhYmxlIGNoYW5nZXM6CiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuCiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLykKICAgIHRoYXQgZG8gbm90IGFmZmVjdCB0aGUgY29tcGlsZWQga2VybmVsIGltYWdlICh2bWxpbnV4KSBvciBrZXJuZWwgbW9kdWxlcy4KICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzCiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLgogICogQnVpbGQgc3lzdGVtIG9yIEtjb25maWcgY2hhbmdlcyB0aGF0IGRvIG5vdCBhbHRlciBjb21waWxlZCBDIGxvZ2ljLgotIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZToKICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICAgIGlvbmljLCBhbWRncHUpIHJlcXVpcmluZyBwaHlzaWNhbCBBU0lDL1BDSWUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOgogICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nCiAgICBwaHlzaWNhbCBQQ0kgaG90LXVucGx1ZyBvciBtYW51YWwgc3lzZnMgZHJpdmVyIHVuYmluZGluZy4KICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUmV0dXJuIFdvcnRoRnV6emluZz10cnVlIHdoZW5ldmVyIHRoZSBwYXRjaCB0b3VjaGVzIHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGluY2x1ZGluZzoKLSBDb3JlIFN1YnN5c3RlbXM6CiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksCiAgICBCUEYsIHNjaGVkdWxlciwgY29yZSBuZXR3b3JraW5nLCBWRlMsIG9yIHN5c2NhbGwgaGFuZGxpbmcuCi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOgogICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLgotIFJ1bnRpbWUgQXNzZXJ0aW9ucyBhbmQgRGVmZW5zaXZlIENoZWNrczoKICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy4KLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOgogICogRHJpdmVycyBhY2Nlc3NpYmxlIHZpYSB2aXJ0dWFsIGJ1c2VzICh2aXJ0aW8sIFVTQiBnYWRnZXQsIGxvb3BiYWNrLCBuZXRsaW5rLCBiaW5kZXIsIHNvY2tldHMsIGV0Yy4pLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNC4gRVhUUkFDVElORyBGb2N1c1N5bWJvbHMgKFBSRVZFTlRJTkcgRElMVVRJT04pCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOgoKLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6CiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXMKICAoaW5jbHVkaW5nLCBidXQgbm90IGxpbWl0ZWQgdG86IGdlbmVyYWwgbWVtb3J5IGFsbG9jYXRvcnMgYW5kIGRlYWxsb2NhdG9ycywgcGFnZSBmYXVsdAogIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLgogIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyAmIzM0O2ZvY3VzZWQmIzM0OywKICB3aGljaCBzZXZlcmVseSBkaWx1dGVzIGZ1enppbmcgZWZmb3J0IGF3YXkgZnJvbSB0aGUgYWN0dWFsIGNoYW5nZXMuCgotIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzoKICBMaXN0IGZ1bmN0aW9ucyB0aGF0IHNwZWNpZmljYWxseSBpbXBsZW1lbnQgdGhlIGxvZ2ljIGJlaW5nIGFkZGVkIG9yIGFsdGVyZWQsIG9yIGRpcmVjdCBBUEkgZW50cnlwb2ludHMKICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy4KCi0gSEFORExJTkcgU1RBVElDIElOTElORSBGVU5DVElPTlMgSU4gSEVBREVSUyAoLmgpOgogIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2sKICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy4KICBJZiB0aGUgY2hhbmdlcyBhcmUgcHJpbWFyaWx5IGluIHN0YXRpYyBpbmxpbmUgaGVscGVycywgaWRlbnRpZnkgbm9uLXN0YXRpYywgZmVhdHVyZS1zcGVjaWZpYyBjYWxsZXIKICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQo1LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CklkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgY29tcGlsZSBhbmQgcmVhY2ggdGhlIG1vZGlmaWVkIGNvZGU6Ci0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KLSBDaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLgotIFN0cmlwIGFueSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5UYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NAoKRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAyMjJlNjE4MjRiYTNmNDk3MDEwZWI0MTE4YWJlYTc2M2U0N2QwZDg2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFN1biBTZXAgMTMgMTA6MjE6MDMgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jCmluZGV4IDUzNTRlYjhkM2EwN2IuLjgwY2NkNTE2ZWYzODAgMTAwNjQ0Ci0tLSBhL21tL3Ztc2Nhbi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jCkBAIC0xODEsNiAmIzQzOzE4MSwxMCBAQCBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHsKIAlzdHJ1Y3QgcmVjbGFpbV9zdGF0ZSByZWNsYWltX3N0YXRlOwogfTsKIAomIzQzO3N0YXRpYyB2b2lkIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LAomIzQzOwkJCQkgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmNsZWFuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiYjNDM7CQkJCSAgICAgaW50IHR5cGUsIGJvb2wgc2tpcF9yZXRyeSk7CiYjNDM7CiAjaWZkZWYgQVJDSF9IQVNfUFJFRkVUQ0hXCiBzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sCiAJCXN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpCkBAIC0yMDY1LDE0ICYjNDM7MjA2OSwxNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCiAJCWVudW0gbHJ1X2xpc3QgbHJ1KQogewogCUxJU1RfSEVBRChmb2xpb19saXN0KTsKJiM0MzsJTElTVF9IRUFEKGNsZWFuX2xpc3QpOwogCXVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDsKLQl1bnNpZ25lZCBpbnQgbnJfcmVjbGFpbWVkID0gMDsKLQl1bnNpZ25lZCBsb25nIG5yX3Rha2VuOwomIzQzOwl1bnNpZ25lZCBpbnQgbnJfcmVjbGFpbWVkLCB0b3RhbF9yZWNsYWltZWQgPSAwOwomIzQzOwl1bnNpZ25lZCBsb25nIG5yX3Rha2VuLCBpc29sYXRlZDsKIAlzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7CiAJYm9vbCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTsKIAllbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07CiAJc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpOwogCWJvb2wgc3RhbGxlZCA9IGZhbHNlOwomIzQzOwlib29sIHNraXBfcmV0cnkgPSBmYWxzZTsKIAogCXdoaWxlICh1bmxpa2VseSh0b29fbWFueV9pc29sYXRlZChwZ2RhdCwgZmlsZSwgc2MpKSkgewogCQlpZiAoc3RhbGxlZCkKQEAgLTIxMDQsMjUgJiM0MzsyMTEwLDQyIEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbiwKIAlpZiAobnJfdGFrZW4gPT0gMCkKIAkJcmV0dXJuIDA7CiAKJiM0MzsJaXNvbGF0ZWQgPSBucl90YWtlbjsKJiM0MztyZXRyeToKIAlucl9yZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdCgmYW1wO2ZvbGlvX2xpc3QsIHBnZGF0LCBzYywgJmFtcDtzdGF0LCBmYWxzZSwKIAkJCQkJIGxydXZlY19tZW1jZyhscnV2ZWMpKTsKJiM0MzsJdG90YWxfcmVjbGFpbWVkICYjNDM7PSBucl9yZWNsYWltZWQ7CiYjNDM7CiYjNDM7CS8qIFJldHJ5IHBhc3MgaXMgb25seSBtZWFudCBmb3IgY2xlYW4gZm9saW9zIHdpdGhvdXQgbmV3IGlzb2xhdGlvbiAqLwomIzQzOwlpZiAoaXNvbGF0ZWQpCiYjNDM7CQloYW5kbGVfcmVjbGFpbV93cml0ZWJhY2soaXNvbGF0ZWQsIHBnZGF0LCBzYywgJmFtcDtzdGF0KTsKJiM0MzsJdHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtJmd0O25vZGVfaWQsCiYjNDM7CQkJbnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCAmYW1wO3N0YXQsIHNjLSZndDtwcmlvcml0eSwgZmlsZSk7CiYjNDM7CiYjNDM7CWZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygmYW1wO2ZvbGlvX2xpc3QsICZhbXA7Y2xlYW5fbGlzdCwgbHJ1dmVjLCBmaWxlLCBza2lwX3JldHJ5KTsKIAogCW1vdmVfZm9saW9zX3RvX2xydSgmYW1wO2ZvbGlvX2xpc3QpOwogCiAJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHREVNT1RFX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKSwKIAkJCQkJc3RhdC5ucl9kZW1vdGVkKTsKLQltb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IGZpbGUsIC1ucl90YWtlbik7CiAJaXRlbSA9IFBHU1RFQUxfS1NXQVBEICYjNDM7IHJlY2xhaW1lcl9vZmZzZXQoc2MpOwogCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCBucl9yZWNsYWltZWQpOwogCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1NURUFMX0FOT04gJiM0MzsgZmlsZSwgbnJfcmVjbGFpbWVkKTsKLQlpZiAobnJfc2Nhbm5lZCAmZ3Q7IG5yX3JlY2xhaW1lZCkKJiM0MzsKJiM0MzsJaWYgKCFsaXN0X2VtcHR5KCZhbXA7Y2xlYW5fbGlzdCkpIHsKJiM0MzsJCWxpc3Rfc3BsaWNlX2luaXQoJmFtcDtjbGVhbl9saXN0LCAmYW1wO2ZvbGlvX2xpc3QpOwomIzQzOwkJc2tpcF9yZXRyeSA9IHRydWU7CiYjNDM7CQkvKiBSZXRyeSBmb2xpb3Mgd2VyZSBhbHJlYWR5IGlzb2xhdGVkIGFuZCBhY2NvdW50ZWQgYWJvdmUgKi8KJiM0MzsJCWlzb2xhdGVkID0gMDsKJiM0MzsJCWdvdG8gcmV0cnk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyBmaWxlLCAtbnJfdGFrZW4pOwomIzQzOwlpZiAobnJfc2Nhbm5lZCAmZ3Q7IHRvdGFsX3JlY2xhaW1lZCkKIAkJbW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gJiM0MzsgZmlsZSwKLQkJCQkgbnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7CiYjNDM7CQkJCSBucl9zY2FubmVkIC0gdG90YWxfcmVjbGFpbWVkKTsKIAotCWhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayhucl90YWtlbiwgcGdkYXQsIHNjLCAmYW1wO3N0YXQpOwotCXRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LSZndDtub2RlX2lkLAotCQkJbnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCAmYW1wO3N0YXQsIHNjLSZndDtwcmlvcml0eSwgZmlsZSk7Ci0JcmV0dXJuIG5yX3JlY2xhaW1lZDsKJiM0MzsJcmV0dXJuIHRvdGFsX3JlY2xhaW1lZDsKIH0KIAogLyoKQEAgLTUwMTgsOCAmIzQzOzUwNDEsNiBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIHsKIAlMSVNUX0hFQUQobGlzdCk7CiAJTElTVF9IRUFEKGNsZWFuKTsKLQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwotCXN0cnVjdCBmb2xpbyAqbmV4dDsKIAllbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07CiAJc3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0OwogCXN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7CkBAIC01MDU4LDI2ICYjNDM7NTA3OSw3IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAogCQkJdHlwZV9zY2FubmVkLCByZWNsYWltZWQsICZhbXA7c3RhdCwgc2MtJmd0O3ByaW9yaXR5LAogCQkJdHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pOwogCi0JbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoZm9saW8sIG5leHQsICZhbXA7bGlzdCwgbHJ1KSB7Ci0JCURFRklORV9NSU5fU0VRKGxydXZlYyk7Ci0KLQkJLyogbW92ZV9mb2xpb3NfdG9fbHJ1KCkgY3VsbHMgdW5ldmljdGFibGUgZm9saW9zIHZpYSBmb2xpb19wdXRiYWNrX2xydSgpICovCi0JCWlmICghZm9saW9fZXZpY3RhYmxlKGZvbGlvKSkKLQkJCWNvbnRpbnVlOwotCi0JCS8qIHJldHJ5IGZvbGlvcyB0aGF0IG1heSBoYXZlIG1pc3NlZCBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqLwotCQlpZiAoIXNraXBfcmV0cnkgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX21hcHBlZChmb2xpbykgJmFtcDsmYW1wOwotCQkgICAgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkgewotCQkJbGlzdF9tb3ZlKCZhbXA7Zm9saW8tJmd0O2xydSwgJmFtcDtjbGVhbik7Ci0JCQljb250aW51ZTsKLQkJfQotCi0JCS8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqLwotCQlpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHsKLQkJCWZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7Ci0JCQlmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTsKLQkJfQotCX0KJiM0MzsJZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKCZhbXA7bGlzdCwgJmFtcDtjbGVhbiwgbHJ1dmVjLCB0eXBlLCBza2lwX3JldHJ5KTsKIAogCW1vdmVfZm9saW9zX3RvX2xydSgmYW1wO2xpc3QpOwogCkBAIC02MTIzLDYgJiM0Mzs2MTI1LDQ2IEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqCiAKICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqLwogCiYjNDM7LyoqCiYjNDM7ICogZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrIC0gRmluZCBhbmQgbW92ZSB0aGUgd3JpdHRlbiBiYWNrIGZvbGlvcyB0byBhIG5ldyBsaXN0LgomIzQzOyAqIEBsaXN0OiBmb2xpb3MgbGlzdAomIzQzOyAqIEBjbGVhbjogdGhlIHdyaXR0ZW4gYmFjayBmb2xpb3MgbGlzdAomIzQzOyAqIEBscnV2ZWM6IHRoZSBscnV2ZWMKJiM0MzsgKiBAdHlwZTogTFJVIHR5cGUgKG9ubHkgdXNlZCBmb3IgQ09ORklHX0xSVV9HRU4pCiYjNDM7ICogQHNraXBfcmV0cnk6IHdoZXRoZXIgc2tpcCByZXRyeS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpjbGVhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAomIzQzOwkJCQkgICAgIGludCB0eXBlLCBib29sIHNraXBfcmV0cnkpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwlzdHJ1Y3QgZm9saW8gKm5leHQ7CiYjNDM7CiYjNDM7CWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGZvbGlvLCBuZXh0LCBsaXN0LCBscnUpIHsKJiM0MzsjaWZkZWYgQ09ORklHX0xSVV9HRU4KJiM0MzsJCURFRklORV9NSU5fU0VRKGxydXZlYyk7CiYjNDM7I2VuZGlmCiYjNDM7CQkvKiBtb3ZlX2ZvbGlvc190b19scnUoKSBjdWxscyB1bmV2aWN0YWJsZSBmb2xpb3MgdmlhIGZvbGlvX3B1dGJhY2tfbHJ1KCkgKi8KJiM0MzsJCWlmICghZm9saW9fZXZpY3RhYmxlKGZvbGlvKSkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qIHJldHJ5IGZvbGlvcyB0aGF0IG1heSBoYXZlIG1pc3NlZCBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqLwomIzQzOwkJaWYgKCFza2lwX3JldHJ5ICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb19tYXBwZWQoZm9saW8pICZhbXA7JmFtcDsKJiM0MzsJCSAgICAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgJmFtcDsmYW1wOyAhZm9saW9fdGVzdF93cml0ZWJhY2soZm9saW8pKSB7CiYjNDM7CQkJbGlzdF9tb3ZlKCZhbXA7Zm9saW8tJmd0O2xydSwgY2xlYW4pOwomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJfQomIzQzOyNpZmRlZiBDT05GSUdfTFJVX0dFTgomIzQzOwkJLyogZG9uJiMzOTt0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovCiYjNDM7CQlpZiAobHJ1dmVjLSZndDtscnVnZW4uZW5hYmxlZCAmYW1wOyZhbXA7CiYjNDM7CQkgICAgbHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHsKJiM0MzsJCQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwomIzQzOwkJCWZvbGlvX3NldF9hY3RpdmUoZm9saW8pOwomIzQzOwkJfQomIzQzOyNlbmRpZgomIzQzOwl9CiYjNDM7fQomIzQzOwogc3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKQogewogCXVuc2lnbmVkIGxvbmcgbnJbTlJfTFJVX0xJU1RTXTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDg4NQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE1NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipFdmFsdWF0aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiBhIEtlcm5lbCBQYXRjaCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiBMZXQmIzM5O3MgZGlnIGluLiBJdCYjMzk7cyB0b3VjaGluZyBgbW0vdm1zY2FuLmNgLiBBbHJpZ2h0LCB0aGF0IGltbWVkaWF0ZWx5IGdldHMgbXkgYXR0ZW50aW9uIOKAkyB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIGlzIGEgcHJldHR5IGp1aWN5IHRhcmdldCEgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWluZyBjaGFuZ2VkIGhlcmUuIFRpbWUgdG8gbG9vayBhdCB0aGUgZGlmZi4gSSYjMzk7bGwgcHJvYmFibHkgZmlyZSB1cCBncmVwcGVyIG9yIGp1c3QgdXNlIGByZWFkLWZpbGVgIHRvIGdldCBhIGdvb2QgbG9vayBhdCB0aGUgc3Vycm91bmRpbmcgY29kZSB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0LgoKSSYjMzk7bGwgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgYXJvdW5kIHRoZSBtb2RpZmljYXRpb25zLiBMZXQmIzM5O3Mgc2VlLi4uIHRoZSBkaWZmIGludm9sdmVzIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgKGxpbmVzIDIwNjUtMjE1MCksIGBldmljdF9mb2xpb3NgIChhcm91bmQgNTAxOC01MDgwKSwgYW5kIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgIChhcm91bmQgNjEyNSkuIEkgc2hvdWxkIGdldCB0aG9zZSBwYWdlcyBmcm9tIGBtbS92bXNjYW4uY2Agd2l0aCBgcmVhZC1maWxlYCBhbmQgY2FyZWZ1bGx5IGFuYWx5emUgdGhlc2Ugc2VjdGlvbnMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBjb2RlIGlzIGNoYW5nZWQgYW5kIHRoZSBhcmVhcyBhZmZlY3RlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjA2NSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA4MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDY1Olx0ICogb2YgcmVjbGFpbWVkIHBhZ2VzXG4yMDY2Olx0ICovXG4yMDY3Olx0c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuMjA2ODpcdFx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuMjA2OTpcdFx0XHRlbnVtIGxydV9saXN0IGxydSlcbjIwNzA6XHR7XG4yMDcxOlx0XHRMSVNUX0hFQUQoZm9saW9fbGlzdCk7XG4yMDcyOlx0XHRMSVNUX0hFQUQoY2xlYW5fbGlzdCk7XG4yMDczOlx0XHR1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWQ7XG4yMDc0Olx0XHR1bnNpZ25lZCBpbnQgbnJfcmVjbGFpbWVkLCB0b3RhbF9yZWNsYWltZWQgPSAwO1xuMjA3NTpcdFx0dW5zaWduZWQgbG9uZyBucl90YWtlbiwgaXNvbGF0ZWQ7XG4yMDc2Olx0XHRzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7XG4yMDc3Olx0XHRib29sIGZpbGUgPSBpc19maWxlX2xydShscnUpO1xuMjA3ODpcdFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtO1xuMjA3OTpcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCA9IGxydXZlY19wZ2RhdChscnV2ZWMpO1xuMjA4MDpcdFx0Ym9vbCBzdGFsbGVkID0gZmFsc2U7XG4yMDgxOlx0XHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcbjIwODI6XHRcbjIwODM6XHRcdHdoaWxlICh1bmxpa2VseSh0b29fbWFueV9pc29sYXRlZChwZ2RhdCwgZmlsZSwgc2MpKSkge1xuMjA4NDpcdFx0XHRpZiAoc3RhbGxlZClcbjIwODU6XHRcdFx0XHRyZXR1cm4gMDtcbjIwODY6XHRcbjIwODc6XHRcdFx0Lyogd2FpdCBhIGJpdCBmb3IgdGhlIHJlY2xhaW1lci4gKi9cbjIwODg6XHRcdFx0c3RhbGxlZCA9IHRydWU7XG4yMDg5Olx0XHRcdHJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7XG4yMDkwOlx0XG4yMDkxOlx0XHRcdC8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi9cbjIwOTI6XHRcdFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuMjA5MzpcdFx0XHRcdHJldHVybiBTV0FQX0NMVVNURVJfTUFYO1xuMjA5NDpcdFx0fVxuMjA5NTpcdFxuMjA5NjpcdFx0bHJ1X2FkZF9kcmFpbigpO1xuMjA5NzpcdFxuMjA5ODpcdFx0bHJ1dmVjX2xvY2tfaXJxKGxydXZlYyk7XG4yMDk5Olx0XG4yMTAwOlx0XHRucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIFx1MDAyNmZvbGlvX2xpc3QsXG4yMTAxOlx0XHRcdFx0XHQgICAgIFx1MDAyNm5yX3NjYW5uZWQsIHNjLCBscnUpO1xuMjEwMjpcdFxuMjEwMzpcdFx0X19tb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICYjNDM7IGZpbGUsIG5yX3Rha2VuKTtcbjIxMDQ6XHRcdGl0ZW0gPSBQR1NDQU5fS1NXQVBEICYjNDM7IHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xuMjEwNTpcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIG5yX3NjYW5uZWQpO1xuMjEwNjpcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHU0NBTl9BTk9OICYjNDM7IGZpbGUsIG5yX3NjYW5uZWQpO1xuMjEwNzpcdFxuMjEwODpcdFx0bHJ1dmVjX3VubG9ja19pcnEobHJ1dmVjKTtcbjIxMDk6XHRcbjIxMTA6XHRcdGlmIChucl90YWtlbiA9PSAwKVxuMjExMTpcdFx0XHRyZXR1cm4gMDtcbjIxMTI6XHRcbjIxMTM6XHRcdGlzb2xhdGVkID0gbnJfdGFrZW47XG4yMTE0Olx0cmV0cnk6XG4yMTE1Olx0XHRucl9yZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChcdTAwMjZmb2xpb19saXN0LCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQsIGZhbHNlLFxuMjExNjpcdFx0XHRcdFx0XHQgbHJ1dmVjX21lbWNnKGxydXZlYykpO1xuMjExNzpcdFx0dG90YWxfcmVjbGFpbWVkICYjNDM7PSBucl9yZWNsYWltZWQ7XG4yMTE4Olx0XG4yMTE5Olx0XHQvKiBSZXRyeSBwYXNzIGlzIG9ubHkgbWVhbnQgZm9yIGNsZWFuIGZvbGlvcyB3aXRob3V0IG5ldyBpc29sYXRpb24gKi9cbjIxMjA6XHRcdGlmIChpc29sYXRlZClcbjIxMjE6XHRcdFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQpO1xuMjEyMjpcdFx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtXHUwMDNlbm9kZV9pZCxcbjIxMjM6XHRcdFx0XHRucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFx1MDAyNnN0YXQsIHNjLVx1MDAzZXByaW9yaXR5LCBmaWxlKTtcbjIxMjQ6XHRcbjIxMjU6XHRcdGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhcdTAwMjZmb2xpb19saXN0LCBcdTAwMjZjbGVhbl9saXN0LCBscnV2ZWMsIGZpbGUsIHNraXBfcmV0cnkpO1xuMjEyNjpcdFxuMjEyNzpcdFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFx1MDAyNmZvbGlvX2xpc3QpO1xuMjEyODpcdFxuMjEyOTpcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHREVNT1RFX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKSxcbjIxMzA6XHRcdFx0XHRcdFx0c3RhdC5ucl9kZW1vdGVkKTtcbjIxMzE6XHRcdGl0ZW0gPSBQR1NURUFMX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKTtcbjIxMzI6XHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCBucl9yZWNsYWltZWQpO1xuMjEzMzpcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHU1RFQUxfQU5PTiAmIzQzOyBmaWxlLCBucl9yZWNsYWltZWQpO1xuMjEzNDpcdFxuMjEzNTpcdFx0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmNsZWFuX2xpc3QpKSB7XG4yMTM2Olx0XHRcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2Y2xlYW5fbGlzdCwgXHUwMDI2Zm9saW9fbGlzdCk7XG4yMTM3Olx0XHRcdHNraXBfcmV0cnkgPSB0cnVlO1xuMjEzODpcdFx0XHQvKiBSZXRyeSBmb2xpb3Mgd2VyZSBhbHJlYWR5IGlzb2xhdGVkIGFuZCBhY2NvdW50ZWQgYWJvdmUgKi9cbjIxMzk6XHRcdFx0aXNvbGF0ZWQgPSAwO1xuMjE0MDpcdFx0XHRnb3RvIHJldHJ5O1xuMjE0MTpcdFx0fVxuMjE0MjpcdFxuMjE0MzpcdFx0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyBmaWxlLCAtbnJfdGFrZW4pO1xuMjE0NDpcdFx0aWYgKG5yX3NjYW5uZWQgXHUwMDNlIHRvdGFsX3JlY2xhaW1lZClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NjY2CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipBbmFseXppbmcgTWVtb3J5IE1hbmFnZW1lbnQgUHJvY2VkdXJlcyoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgZXZpY3RfZm9saW9zYCBhbmQgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHdlIGhhbmRsZSBtZW1vcnkgcHJlc3N1cmUgYW5kIHRoZSBtZWNoYW5pY3Mgb2YgcGFnZSByZWNsYW1hdGlvbi4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgaG93IHRoZXNlIHJvdXRpbmVzIGludGVyYWN0IGFuZCBob3cgZWZmaWNpZW50bHkgdGhleSYjMzk7cmUgaWRlbnRpZnlpbmcgYW5kIHByb2Nlc3NpbmcgZGlydHkgcGFnZXMuIFNwZWNpZmljYWxseSwgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgaGV1cmlzdGljcyB0aGV5IGVtcGxveSBhbmQgd2hldGhlciB0aGV5JiMzOTtyZSB3ZWxsLXR1bmVkIHRvIG91ciB3b3JrbG9hZCYjMzk7cyBjaGFyYWN0ZXJpc3RpY3MuIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBpbmVmZmljaWVuY2llcyBpbiB0aGVpciBpbXBsZW1lbnRhdGlvbiwgY29uc2lkZXJpbmcgdGhpbmdzIGxpa2UgbG9jayBjb250ZW50aW9uLCBjYWNoZSBsaW5lIGVmZmVjdHMsIGFuZCB0aGUgb3ZlcmFsbCBvdmVyaGVhZCBhc3NvY2lhdGVkIHdpdGggcGFnZSB0YWJsZSBtYW5hZ2VtZW50LiBJJiMzOTttIGFsc28gY3VyaW91cyBhYm91dCB0aGUgY3JpdGVyaWEgdXNlZCB0byBkZXRlcm1pbmUgd2hlbiBhIGZvbGlvIGlzICYjMzQ7d3JpdHRlbiBiYWNrJiMzNDsgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgZGVjaXNpb25zIG9uIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNTA2MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs1MDYwOlx0XHRcdFx0XHQgXHUwMDI2bGlzdCwgXHUwMDI2aXNvbGF0ZWQsIFx1MDAyNnR5cGUsIFx1MDAyNnR5cGVfc2Nhbm5lZCk7XG41MDYxOlx0XHRucl9pc29sYXRlZCA9IGlzb2xhdGVkO1xuNTA2MjpcdFxuNTA2MzpcdFx0LyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi9cbjUwNjQ6XHRcdGlmIChzY2FubmVkKVxuNTA2NTpcdFx0XHR0cnlfdG9faW5jX21pbl9zZXEobHJ1dmVjLCBzd2FwcGluZXNzKTtcbjUwNjY6XHRcbjUwNjc6XHRcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XG41MDY4Olx0XG41MDY5Olx0XHRpZiAobGlzdF9lbXB0eShcdTAwMjZsaXN0KSlcbjUwNzA6XHRcdFx0cmV0dXJuIHNjYW5uZWQ7XG41MDcxOlx0cmV0cnk6XG41MDcyOlx0XHRyZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChcdTAwMjZsaXN0LCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQsIGZhbHNlLCBtZW1jZyk7XG41MDczOlx0XHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgJiM0Mzs9IHJlY2xhaW1lZDtcbjUwNzQ6XHRcdHRvdGFsX3JlY2xhaW1lZCAmIzQzOz0gcmVjbGFpbWVkO1xuNTA3NTpcdFx0LyogUmV0cnkgcGFzcyBpcyBvbmx5IG1lYW50IGZvciBjbGVhbiBmb2xpb3Mgd2l0aG91dCBuZXcgaXNvbGF0aW9uICovXG41MDc2Olx0XHRpZiAoaXNvbGF0ZWQpXG41MDc3Olx0XHRcdGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayhpc29sYXRlZCwgcGdkYXQsIHNjLCBcdTAwMjZzdGF0KTtcbjUwNzg6XHRcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LVx1MDAzZW5vZGVfaWQsXG41MDc5Olx0XHRcdFx0dHlwZV9zY2FubmVkLCByZWNsYWltZWQsIFx1MDAyNnN0YXQsIHNjLVx1MDAzZXByaW9yaXR5LFxuNTA4MDpcdFx0XHRcdHR5cGUgPyBMUlVfSU5BQ1RJVkVfRklMRSA6IExSVV9JTkFDVElWRV9BTk9OKTtcbjUwODE6XHRcbjUwODI6XHRcdGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhcdTAwMjZsaXN0LCBcdTAwMjZjbGVhbiwgbHJ1dmVjLCB0eXBlLCBza2lwX3JldHJ5KTtcbjUwODM6XHRcbjUwODQ6XHRcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZsaXN0KTtcbjUwODU6XHRcbjUwODY6XHRcdHdhbGsgPSBjdXJyZW50LVx1MDAzZXJlY2xhaW1fc3RhdGUtXHUwMDNlbW1fd2FsaztcbjUwODc6XHRcdGlmICh3YWxrIFx1MDAyNlx1MDAyNiB3YWxrLVx1MDAzZWJhdGNoZWQpIHtcbjUwODg6XHRcdFx0d2Fsay1cdTAwM2VscnV2ZWMgPSBscnV2ZWM7XG41MDg5Olx0XHRcdHJlc2V0X2JhdGNoX3NpemUod2Fsayk7XG41MDkwOlx0XHR9XG41MDkxOlx0XG41MDkyOlx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdERU1PVEVfS1NXQVBEICYjNDM7IHJlY2xhaW1lcl9vZmZzZXQoc2MpLFxuNTA5MzpcdFx0XHRcdFx0XHRzdGF0Lm5yX2RlbW90ZWQpO1xuNTA5NDpcdFxuNTA5NTpcdFx0aXRlbSA9IFBHU1RFQUxfS1NXQVBEICYjNDM7IHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xuNTA5NjpcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIHJlY2xhaW1lZCk7XG41MDk3Olx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICYjNDM7IHR5cGUsIHJlY2xhaW1lZCk7XG41MDk4Olx0XG41MDk5Olx0XHRsaXN0X3NwbGljZV9pbml0KFx1MDAyNmNsZWFuLCBcdTAwMjZsaXN0KTtcbjUxMDA6XHRcbjUxMDE6XHRcdGlmICghbGlzdF9lbXB0eShcdTAwMjZsaXN0KSkge1xuNTEwMjpcdFx0XHRza2lwX3JldHJ5ID0gdHJ1ZTtcbjUxMDM6XHRcdFx0aXNvbGF0ZWQgPSAwO1xuNTEwNDpcdFx0XHRnb3RvIHJldHJ5O1xuNTEwNTpcdFx0fVxuNTEwNjpcdFxuNTEwNzpcdFx0aWYgKG5yX2lzb2xhdGVkIFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXG41MTA4Olx0XHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IHR5cGUsXG41MTA5Olx0XHRcdFx0XHQgbnJfaXNvbGF0ZWQgLSB0b3RhbF9yZWNsYWltZWQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDc3NDIKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAzMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgbXkgb3duOgoKKipBbmFseXppbmcgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AgaW4gbW0vdm1zY2FuLmMqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGUga2VybmVsJiMzOTtzIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgSSBuZWVkIHRvIHpvb20gaW4gb24gYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AuIFRoZSBmaWxlIGFuZCBsaW5lIG51bWJlciBhcmUgc29saWQgc3RhcnRpbmcgcG9pbnRzIOKAkyBgbW0vdm1zY2FuLmNgIGFyb3VuZCBsaW5lIDYxMjUuIFRoaXMgZnVuY3Rpb24gaXMgY2xlYXJseSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGRpcnR5IHBhZ2VzIHRoYXQgYXJlIHdhaXRpbmcgdG8gYmUgd3JpdHRlbiBiYWNrIHRvIGRpc2suIEkgYmV0IGl0JiMzOTtzIGludm9sdmVkIGluIGlkZW50aWZ5aW5nIHdoaWNoIGZvbGlvcyBhcmUgY2FuZGlkYXRlcyBmb3Igd3JpdGViYWNrLCBsaWtlbHkgZHVyaW5nIGEgcmVjbGFpbSBvciBzY2FubmluZyBvcGVyYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IGNyaXRlcmlhIGl0IHVzZXMgdG8gc2VsZWN0IHRoZXNlIGZvbGlvcywgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBiYWNraW5nIHN0b3JhZ2UsIGFuZCBob3cgaXQgaGFuZGxlcyBwb3RlbnRpYWwgZXJyb3JzLiBVbmRlcnN0YW5kaW5nIHRoaXMgd2lsbCBiZSBjcnVjaWFsIGZvciBvcHRpbWl6aW5nIG1lbW9yeSBtYW5hZ2VtZW50IGJlaGF2aW9yIGFuZCBwb3RlbnRpYWxseSBkaWFnbm9zaW5nIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIHJlbGF0ZWQgdG8gSS9PIGFuZCBwYWdlIHJlY2xhaW0uIEkgc2hvdWxkIHByb2JhYmx5IHBheSBhdHRlbnRpb24gdG8gYW55IGludGVyYWN0aW9uIHdpdGggdGhlIHdyaXRlYmFjayB0aHJlYWRzIG9yIHdvcmtxdWV1ZXMgYXMgd2VsbC4gS25vd2luZyB3aGF0IGRhdGEgc3RydWN0dXJlcyBhcmUgYWNjZXNzZWQgaGVyZSBtaWdodCBhbHNvIGJlIGVubGlnaHRlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjEyNSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2MTI1Olx0XG42MTI2Olx0I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG42MTI3Olx0XG42MTI4Olx0LyoqXG42MTI5Olx0ICogZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrIC0gRmluZCBhbmQgbW92ZSB0aGUgd3JpdHRlbiBiYWNrIGZvbGlvcyB0byBhIG5ldyBsaXN0LlxuNjEzMDpcdCAqIEBsaXN0OiBmb2xpb3MgbGlzdFxuNjEzMTpcdCAqIEBjbGVhbjogdGhlIHdyaXR0ZW4gYmFjayBmb2xpb3MgbGlzdFxuNjEzMjpcdCAqIEBscnV2ZWM6IHRoZSBscnV2ZWNcbjYxMzM6XHQgKiBAdHlwZTogTFJVIHR5cGUgKG9ubHkgdXNlZCBmb3IgQ09ORklHX0xSVV9HRU4pXG42MTM0Olx0ICogQHNraXBfcmV0cnk6IHdoZXRoZXIgc2tpcCByZXRyeS5cbjYxMzU6XHQgKi9cbjYxMzY6XHRzdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbjYxMzc6XHRcdFx0XHRcdCAgICAgc3RydWN0IGxpc3RfaGVhZCAqY2xlYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbjYxMzg6XHRcdFx0XHRcdCAgICAgaW50IHR5cGUsIGJvb2wgc2tpcF9yZXRyeSlcbjYxMzk6XHR7XG42MTQwOlx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuNjE0MTpcdFx0c3RydWN0IGZvbGlvICpuZXh0O1xuNjE0MjpcdFxuNjE0MzpcdFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoZm9saW8sIG5leHQsIGxpc3QsIGxydSkge1xuNjE0NDpcdCNpZmRlZiBDT05GSUdfTFJVX0dFTlxuNjE0NTpcdFx0XHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuNjE0NjpcdCNlbmRpZlxuNjE0NzpcdFx0XHQvKiBtb3ZlX2ZvbGlvc190b19scnUoKSBjdWxscyB1bmV2aWN0YWJsZSBmb2xpb3MgdmlhIGZvbGlvX3B1dGJhY2tfbHJ1KCkgKi9cbjYxNDg6XHRcdFx0aWYgKCFmb2xpb19ldmljdGFibGUoZm9saW8pKVxuNjE0OTpcdFx0XHRcdGNvbnRpbnVlO1xuNjE1MDpcdFxuNjE1MTpcdFx0XHQvKiByZXRyeSBmb2xpb3MgdGhhdCBtYXkgaGF2ZSBtaXNzZWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cbjYxNTI6XHRcdFx0aWYgKCFza2lwX3JldHJ5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbjYxNTM6XHRcdFx0ICAgICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xuNjE1NDpcdFx0XHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIGNsZWFuKTtcbjYxNTU6XHRcdFx0XHRjb250aW51ZTtcbjYxNTY6XHRcdFx0fVxuNjE1NzpcdCNpZmRlZiBDT05GSUdfTFJVX0dFTlxuNjE1ODpcdFx0XHQvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbjYxNTk6XHRcdFx0aWYgKGxydXZlYy1cdTAwM2VscnVnZW4uZW5hYmxlZCBcdTAwMjZcdTAwMjZcbjYxNjA6XHRcdFx0ICAgIGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XG42MTYxOlx0XHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbjYxNjI6XHRcdFx0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbjYxNjM6XHRcdFx0fVxuNjE2NDpcdCNlbmRpZlxuNjE2NTpcdFx0fVxuNjE2NjpcdH1cbjYxNjc6XHRcbjYxNjg6XHRzdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG42MTY5Olx0e1xuNjE3MDpcdFx0dW5zaWduZWQgbG9uZyBucltOUl9MUlVfTElTVFNdO1xuNjE3MTpcdFx0dW5zaWduZWQgbG9uZyB0YXJnZXRzW05SX0xSVV9MSVNUU107XG42MTcyOlx0XHR1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW47XG42MTczOlx0XHRlbnVtIGxydV9saXN0IGxydTtcbjYxNzQ6XHRcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkID0gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4ODYzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTMxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgZXhhY3RseSB3aGF0IHRoaXMgcGF0Y2ggaXMgZG9pbmcuIEkgY2FuJiMzOTt0IGRpcmVjdGx5IGNoZWNrIHRoZSBnaXQgbG9nLCBidXQgdGhlIHByb3ZpZGVkIGRpZmYgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNlZSB0aGF0IGEgbmV3IGhlbHBlciBmdW5jdGlvbiwgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpYCwgaXMgYmVpbmcgaW50cm9kdWNlZC4gSW50cmlndWluZy4KCk15IGV4cGVydCBpbnR1aXRpb24gaW1tZWRpYXRlbHkga2lja3MgaW4gYW5kIHJlbWluZHMgbWUgdGhhdCB0aGlzIGZ1bmN0aW9uJiMzOTtzIHBsYWNlbWVudCBpcyBpbnRlcmVzdGluZy4gSSByZWNhbGwgdGhhdCBzaW1pbGFyIGxvZ2ljIHdhcyBwcmV2aW91c2x5IGlubGluZWQgd2l0aGluIHRoZSBNR0xSVSBjb2RlLCBzcGVjaWZpY2FsbHkgaW4gYGV2aWN0X2ZvbGlvc2AuIFNvLCB0aGUgcGF0Y2ggc2VlbXMgdG8gYmUgZ2VuZXJhbGl6aW5nIHRoaXMgcmV0cnkgYmVoYXZpb3IgZm9yIHdyaXR0ZW4tYmFjayBmb2xpb3MuIFByZXZpb3VzbHkgdGhpcyBmdW5jdGlvbmFsaXR5IHdhcyBhbHJlYWR5IGhhbmRsZWQgaW4gYGV2aWN0X2ZvbGlvc2AuCgpMb29raW5nIGRlZXBlciwgSSBzZWUgdGhlIHJldHJ5IG1lY2hhbmlzbSBpcyBub3cgYmVpbmcgYWRkZWQgdG8gYHNocmlua19pbmFjdGl2ZV9saXN0YCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgdHJhZGl0aW9uYWwgYWN0aXZlL2luYWN0aXZlIExSVSByZWNsYWltIHByb2Nlc3MuIFByZXZpb3VzbHksIGEgcmV0cnkgbG9vcCBmb3Igd3JpdHRlbi1iYWNrIGZvbGlvcyB3YXNuJiMzOTt0IHByZXNlbnQgdGhlcmUsIG1lYW5pbmcgdGhpcyBpcyBhIG5vbi10cml2aWFsIGNoYW5nZS4gVGhlIHBhdGNoIGFic3RyYWN0cyB0aGUgY29tbW9uIGxvZ2ljIGludG8gYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AsIHNvIGJvdGggYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYGV2aWN0X2ZvbGlvc2AgY2FuIHVzZSB0aGUgY29kZS4gVGhpcyBpcyBkZWZpbml0ZWx5IGEgc2lnbmlmaWNhbnQgY2hhbmdlIHRvIG1lbW9yeSByZWNsYW1hdGlvbiBiZWhhdmlvciBpbiBgbW0vdm1zY2FuLmNgLgoKTWVtb3J5IHJlY2xhbWF0aW9uIGlzIGFic29sdXRlbHkgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgYW5kIHRoaXMgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvZ2ljIGRpcmVjdGx5LiBBY2NvcmRpbmcgdG8gdGhlIGZ1enppbmcgZ3VpZGVsaW5lcywgdGhhdCBpbW1lZGlhdGVseSB0cmlnZ2VycyBteSAmIzM0O1dvcnRoRnV6emluZyA9IHRydWUmIzM0OyBmbGFnLiBUaGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgY29kZSBhbmQgaXQmIzM5O3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhhdCYjMzk7cyBhIGNsZWFyIHBvc2l0aXZlIGNyaXRlcmlvbi4KCk5vdywgSSBuZWVkIHRvIGNvbnNpZGVyIGBFbmFibGVDb25maWdzYC4gSXMgdGhpcyBmdW5jdGlvbmFsaXR5IGd1YXJkZWQgYnkgc3BlY2lmaWMgYENPTkZJR19gIG9wdGlvbnM/IEkgbmVlZCB0byBjaGVjayBob3cgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AgYW5kIGBldmljdF9mb2xpb3NgIGFyZSBjb21waWxlZC4gSSBjYW4gcXVpY2tseSBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgaW4gYG1tL3Ztc2Nhbi5jYC4gSSBuZWVkIHRvIGdyZXAgZm9yIGBDT05GSUdgIGRpcmVjdGl2ZXMgaW4gdGhhdCBhcmVhIG9mIHRoZSBjb2RlIHRvIHVuZGVyc3RhbmQgaWYgaXQmIzM5O3MgYWx3YXlzIGluY2x1ZGVkIG9yIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIFNhbWUgZm9yIGBldmljdF9mb2xpb3NgIGFuZCBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIHRoaXMgY29kZSBwYXRoIGlzIGFsd2F5cyBhdmFpbGFibGUgb3IgcmVxdWlyZXMgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb24gdG8gYmUgZW5hYmxlZCwgd2hpY2ggd2lsbCBiZSBpbXBvcnRhbnQgdG8gY29tbXVuaWNhdGUgaW4gdGhlIGZ1enplciBjb25maWd1cmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtfaW5hY3RpdmVfbGlzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTIwMjU9c3RhdGljIHZvaWQgaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4sXG4tLVxubW0vdm1zY2FuLmMtMjA2My0vKlxubW0vdm1zY2FuLmM6MjA2NDogKiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpIGlzIGEgaGVscGVyIGZvciBzaHJpbmtfbm9kZSgpLiAgSXQgcmV0dXJucyB0aGUgbnVtYmVyXG5tbS92bXNjYW4uYy0yMDY1LSAqIG9mIHJlY2xhaW1lZCBwYWdlc1xubW0vdm1zY2FuLmMtMjA2Ni0gKi9cbm1tL3Ztc2Nhbi5jOjIwNjc6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxubW0vdm1zY2FuLmMtMjA2OC1cdFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYz0yMzE1PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19saXN0KGVudW0gbHJ1X2xpc3QgbHJ1LCB1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4tLVxubW0vdm1zY2FuLmMtMjMyNS1cbm1tL3Ztc2Nhbi5jOjIzMjY6XHRyZXR1cm4gc2hyaW5rX2luYWN0aXZlX2xpc3QobnJfdG9fc2NhbiwgbHJ1dmVjLCBzYywgbHJ1KTtcbm1tL3Ztc2Nhbi5jLTIzMjctfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDk4NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkRpZ2dpbmcgaW50byBJbmFjdGl2ZSBMaXN0IE1hbmFnZW1lbnQqKgoKQWxyaWdodCwgSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgZnVuY3Rpb24uIEkmIzM5O20gZ2V0dGluZyBhIGZlZWxpbmcgdGhhdCBpdHMgYmVoYXZpb3IgbWlnaHQgYmUgY29uZGl0aW9uYWxseSBjb21waWxlZCwgcG90ZW50aWFsbHkgdXNpbmcgc29tZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gTXkgZ3V0IHRlbGxzIG1lIHRoaXMgY291bGQgYmUgcmVsYXRlZCB0byBzb21lIHNwZWNpZmljIGtlcm5lbCBjb25maWd1cmF0aW9uIG9yIGZlYXR1cmUuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRocm91Z2ggYG1tL3Ztc2Nhbi5jYCwgZm9jdXNpbmcgb24gdGhlIGFyZWEgYXJvdW5kIHRoZSAyMDAwIHRvIDIwNjcgbGluZSByYW5nZS4gVGhhdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBgI2lmZGVmYCBibG9ja3Mgb3Igb3RoZXIgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBtaWdodCBiZSBjb250cm9sbGluZyB0aGUgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkuIEl0JiMzOTtzIGEgZmFpcmx5IHNwZWNpZmljIGFyZWEgdG8gY2hlY2ssIHNvIGhvcGVmdWxseSBJIHdvbiYjMzk7dCBoYXZlIHRvIHNwZW5kIHRvbyBtdWNoIHRpbWUgb24gaXQuIEkmIzM5O20gbG9va2luZyBmb3IgYSBjbGVhciBleHBsYW5hdGlvbiBvZiBob3cgdGhpcyBpcyBjb250cm9sbGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjAyMCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0NQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDIwOlx0c3RhdGljIGludCBjdXJyZW50X21heV90aHJvdHRsZSh2b2lkKVxuMjAyMTpcdHtcbjIwMjI6XHRcdHJldHVybiAhKGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX0xPQ0FMX1RIUk9UVExFKTtcbjIwMjM6XHR9XG4yMDI0Olx0XG4yMDI1Olx0c3RhdGljIHZvaWQgaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4sXG4yMDI2Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4yMDI3Olx0XHRcdFx0XHQgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuMjAyODpcdFx0XHRcdFx0ICAgICBzdHJ1Y3QgcmVjbGFpbV9zdGF0ICpzdGF0KVxuMjAyOTpcdHtcbjIwMzA6XHRcdC8qXG4yMDMxOlx0XHQgKiBJZiBkaXJ0eSBmb2xpb3MgYXJlIHNjYW5uZWQgdGhhdCBhcmUgbm90IHF1ZXVlZCBmb3IgSU8sIGl0XG4yMDMyOlx0XHQgKiBpbXBsaWVzIHRoYXQgZmx1c2hlcnMgYXJlIG5vdCBkb2luZyB0aGVpciBqb2IuIFRoaXMgY2FuXG4yMDMzOlx0XHQgKiBoYXBwZW4gd2hlbiBtZW1vcnkgcHJlc3N1cmUgcHVzaGVzIGRpcnR5IGZvbGlvcyB0byB0aGUgZW5kIG9mXG4yMDM0Olx0XHQgKiB0aGUgTFJVIGJlZm9yZSB0aGUgZGlydHkgbGltaXRzIGFyZSBicmVhY2hlZCBhbmQgdGhlIGRpcnR5XG4yMDM1Olx0XHQgKiBkYXRhIGhhcyBleHBpcmVkLiBJdCBjYW4gYWxzbyBoYXBwZW4gd2hlbiB0aGUgcHJvcG9ydGlvbiBvZlxuMjAzNjpcdFx0ICogZGlydHkgZm9saW9zIGdyb3dzIG5vdCB0aHJvdWdoIHdyaXRlcyBidXQgdGhyb3VnaCBtZW1vcnlcbjIwMzc6XHRcdCAqIHByZXNzdXJlIHJlY2xhaW1pbmcgYWxsIHRoZSBjbGVhbiBjYWNoZS4gQW5kIGluIHNvbWUgY2FzZXMsXG4yMDM4Olx0XHQgKiB0aGUgZmx1c2hlcnMgc2ltcGx5IGNhbm5vdCBrZWVwIHVwIHdpdGggdGhlIGFsbG9jYXRpb25cbjIwMzk6XHRcdCAqIHJhdGUuIE51ZGdlIHRoZSBmbHVzaGVyIHRocmVhZHMgaW4gY2FzZSB0aGV5IGFyZSBhc2xlZXAuXG4yMDQwOlx0XHQgKi9cbjIwNDE6XHRcdGlmIChzdGF0LVx1MDAzZW5yX3VucXVldWVkX2RpcnR5ID09IG5yX3Rha2VuKSB7XG4yMDQyOlx0XHRcdHdha2V1cF9mbHVzaGVyX3RocmVhZHMoV0JfUkVBU09OX1ZNU0NBTik7XG4yMDQzOlx0XHRcdC8qXG4yMDQ0Olx0XHRcdCAqIEZvciBjZ3JvdXB2MSBkaXJ0eSB0aHJvdHRsaW5nIGlzIGFjaGlldmVkIGJ5IHdha2luZyB1cFxuMjA0NTpcdFx0XHQgKiB0aGUga2VybmVsIGZsdXNoZXIgaGVyZSBhbmQgbGF0ZXIgd2FpdGluZyBvbiBmb2xpb3NcbjIwNDY6XHRcdFx0ICogd2hpY2ggYXJlIGluIHdyaXRlYmFjayB0byBmaW5pc2ggKHNlZSBzaHJpbmtfZm9saW9fbGlzdCgpKS5cbjIwNDc6XHRcdFx0ICpcbjIwNDg6XHRcdFx0ICogRmx1c2hlciBtYXkgbm90IGJlIGFibGUgdG8gaXNzdWUgd3JpdGViYWNrIHF1aWNrbHlcbjIwNDk6XHRcdFx0ICogZW5vdWdoIGZvciBjZ3JvdXB2MSB3cml0ZWJhY2sgdGhyb3R0bGluZyB0byB3b3JrXG4yMDUwOlx0XHRcdCAqIG9uIGEgbGFyZ2Ugc3lzdGVtLlxuMjA1MTpcdFx0XHQgKi9cbjIwNTI6XHRcdFx0aWYgKCF3cml0ZWJhY2tfdGhyb3R0bGluZ19zYW5lKHNjKSlcbjIwNTM6XHRcdFx0XHRyZWNsYWltX3Rocm90dGxlKHBnZGF0LCBWTVNDQU5fVEhST1RUTEVfV1JJVEVCQUNLKTtcbjIwNTQ6XHRcdH1cbjIwNTU6XHRcbjIwNTY6XHRcdHNjLVx1MDAzZW5yLmRpcnR5ICYjNDM7PSBzdGF0LVx1MDAzZW5yX2RpcnR5O1xuMjA1NzpcdFx0c2MtXHUwMDNlbnIuY29uZ2VzdGVkICYjNDM7PSBzdGF0LVx1MDAzZW5yX2Nvbmdlc3RlZDtcbjIwNTg6XHRcdHNjLVx1MDAzZW5yLndyaXRlYmFjayAmIzQzOz0gc3RhdC1cdTAwM2Vucl93cml0ZWJhY2s7XG4yMDU5Olx0XHRzYy1cdTAwM2Vuci5pbW1lZGlhdGUgJiM0Mzs9IHN0YXQtXHUwMDNlbnJfaW1tZWRpYXRlO1xuMjA2MDpcdFx0c2MtXHUwMDNlbnIudGFrZW4gJiM0Mzs9IG5yX3Rha2VuO1xuMjA2MTpcdH1cbjIwNjI6XHRcbjIwNjM6XHQvKlxuMjA2NDpcdCAqIHNocmlua19pbmFjdGl2ZV9saXN0KCkgaXMgYSBoZWxwZXIgZm9yIHNocmlua19ub2RlKCkuICBJdCByZXR1cm5zIHRoZSBudW1iZXJcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTE5OTEKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA3NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDoKCioqRGl2aW5nIGludG8gTFJVIFBhZ2UgUmVjbGFpbSBMb2dpYyoqCgpBbHJpZ2h0LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYHNocmlua19pbmFjdGl2ZV9saXN0KClgIGhlcmUuIFRoYXQmIzM5O3MgdGhlIGJyZWFkLWFuZC1idXR0ZXIgTFJVIHBhZ2UgcmVjbGFpbSBmdW5jdGlvbiwgYWx3YXlzIGNvbXBpbGVkIGluLCBwYXJ0IG9mIHRoZSBzdGFuZGFyZCBtZW1vcnkgbWFuYWdlbWVudCBjb3JlLCBzaXR0aW5nIHJpZ2h0IHRoZXJlIGluIGB2bWxpbnV4YC4gTm90aGluZyBvdXQgb2YgdGhlIG9yZGluYXJ5LCB0aGF0JiMzOTtzIHdoYXQgSSYjMzk7ZCBleHBlY3QuIEJ1dCB0aGVuIG15IGV5ZSBjYXRjaGVzIGBldmljdF9mb2xpb3NgLiBIbW0sIHdhaXQgYSBtaW51dGUuLi4gdGhhdCYjMzk7cyBjb25kaXRpb25hbGx5IGNvbXBpbGVkISBJdCYjMzk7cyBndWFyZGVkIGJ5IGEgYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAuIE5vdyB0aGF0JiMzOTtzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQgY29udGV4dCB0aGlzIGZ1bmN0aW9uIGlzIG9wZXJhdGluZyBpbi4gV2hlcmUgZG9lcyB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGNvbWUgaW50byBwbGF5PyBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgdGhhdCBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBpcyBsb2NhdGVkIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBHb3R0YSB0cmFjZSB0aGlzIGJhY2sgdG8gdGhlIGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgY29kZSBwYXRoIHRoYXQgaW5jbHVkZXMgdGhlIGZvbGlvIGV2aWN0aW9uIGxvZ2ljLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtDT05GSUdfTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTkwMz1lbnVtIGZvbGlvX3JlZmVyZW5jZXMge1xuLS1cbm1tL3Ztc2Nhbi5jLTkwOC1cbm1tL3Ztc2Nhbi5jOjkwOTojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTkxMC0vKlxuLS1cbm1tL3Ztc2Nhbi5jPTk0MT1zdGF0aWMgYm9vbCBscnVfZ2VuX3NldF9yZWZzKHN0cnVjdCBmb2xpbyAqZm9saW8sIGNvbnN0IHZtYV9mbGFnc190ICp2bWFfZmxhZ3MpXG4tLVxubW0vdm1zY2FuLmMtOTQ0LX1cbm1tL3Ztc2Nhbi5jOjk0NTojZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cbm1tL3Ztc2Nhbi5jLTk0Ni1cbi0tXG5tbS92bXNjYW4uYz0yNzgzPXN0YXRpYyBib29sIGNhbl9hZ2VfYW5vbl9wYWdlcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtMjc5NC1cbm1tL3Ztc2Nhbi5jOjI3OTU6I2lmZGVmIENPTkZJR19MUlVfR0VOXG5tbS92bXNjYW4uYy0yNzk2LVxubW0vdm1zY2FuLmM9Mjc5Nz1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcbm1tL3Ztc2Nhbi5jOjI3OTg6I2lmZGVmIENPTkZJR19MUlVfR0VOX0VOQUJMRURcbm1tL3Ztc2Nhbi5jLTI3OTktREVGSU5FX1NUQVRJQ19LRVlfQVJSQVlfVFJVRShscnVfZ2VuX2NhcHMsIE5SX0xSVV9HRU5fQ0FQUyk7XG4tLVxubW0vdm1zY2FuLmM9Mjk4Mz1zdGF0aWMgdm9pZCByZXNldF9ibG9vbV9maWx0ZXIoc3RydWN0IGxydV9nZW5fbW1fc3RhdGUgKm1tX3N0YXRlLCB1bnNpZ25lZCBsb25nIHNlcSlcbi0tXG5tbS92bXNjYW4uYy0zMDAyLVxubW0vdm1zY2FuLmM6MzAwMzojaWZkZWYgQ09ORklHX0xSVV9HRU5fV0FMS1NfTU1VXG5tbS92bXNjYW4uYy0zMDA0LVxuLS1cbm1tL3Ztc2Nhbi5jPTMxMTI9dm9pZCBscnVfZ2VuX21pZ3JhdGVfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0pXG4tLVxubW0vdm1zY2FuLmMtMzE0MC1cbm1tL3Ztc2Nhbi5jOjMxNDE6I2Vsc2UgLyogIUNPTkZJR19MUlVfR0VOX1dBTEtTX01NVSAqL1xubW0vdm1zY2FuLmMtMzE0Mi1cbi0tXG5tbS92bXNjYW4uYz02MTA3PWxhdGVfaW5pdGNhbGwoaW5pdF9scnVfZ2VuKTtcbm1tL3Ztc2Nhbi5jLTYxMDgtXG5tbS92bXNjYW4uYzo2MTA5OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xubW0vdm1zY2FuLmMtNjExMC1cbi0tXG5tbS92bXNjYW4uYz02MTIxPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtNjEyNS1cbm1tL3Ztc2Nhbi5jOjYxMjY6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG5tbS92bXNjYW4uYy02MTI3LVxuLS1cbm1tL3Ztc2Nhbi5jLTYxMzItICogQGxydXZlYzogdGhlIGxydXZlY1xubW0vdm1zY2FuLmM6NjEzMzogKiBAdHlwZTogTFJVIHR5cGUgKG9ubHkgdXNlZCBmb3IgQ09ORklHX0xSVV9HRU4pXG5tbS92bXNjYW4uYy02MTM0LSAqIEBza2lwX3JldHJ5OiB3aGV0aGVyIHNraXAgcmV0cnkuXG4tLVxubW0vdm1zY2FuLmM9NjEzNj1zdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5tbS92bXNjYW4uYy02MTQzLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoZm9saW8sIG5leHQsIGxpc3QsIGxydSkge1xubW0vdm1zY2FuLmM6NjE0NDojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTYxNDUtXHRcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG4tLVxubW0vdm1zY2FuLmMtNjE1Ni1cdFx0fVxubW0vdm1zY2FuLmM6NjE1NzojaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jLTYxNTgtXHRcdC8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI1NwoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDM0OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIExSVSBHZW5lcmF0aW9uIENvZGUqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgLCBhbmQgaW1tZWRpYXRlbHkgSSBzZWUgYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAgc2NhdHRlcmVkIHRocm91Z2hvdXQuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gY2hlY2sgaWYgYGV2aWN0X2ZvbGlvc2AsIHdoaWNoIGlzICphbHNvKiB1bmRlciB0aGUgYCNpZmRlZiBDT05GSUdfTFJVX0dFTmAgYmxvY2ssIGlzIHNvbWVob3cgaW50ZXJ0d2luZWQgd2l0aCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLiBCdXQgbm8sIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgaXMgdGhlIHN0YW5kYXJkIGFjdGl2ZS9pbmFjdGl2ZSBMUlUgcmVjbGFpbSwgc28gaXQgaXMgc2VwYXJhdGUuCgpIb3dldmVyLCBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYCAqaXRzZWxmKiBpcyBkZWZpbmVkIG91dHNpZGUgdGhlIGNvbmRpdGlvbmFsIGJsb2NrIOKAkyBpdCYjMzk7cyBhZnRlciB0aGUgYCNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL2Agb24gbGluZSA2MTI2LiBJbnRyaWd1aW5nLiBCdXQgd2l0aGluIHRoaXMgZnVuY3Rpb24sIHRoZXJlIGFyZSBzZWN0aW9ucyB0aGF0ICphcmUqIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYENPTkZJR19MUlVfR0VOYC4gSSBzZWUgY29kZSBibG9ja3MgbGlrZSB0aGlzOgoKYGBgYwojaWZkZWYgQ09ORklHX0xSVV9HRU4KCQlERUZJTkVfTUlOX1NFUShscnV2ZWMpOwojZW5kaWYKLi4uCiNpZmRlZiBDT05GSUdfTFJVX0dFTgoJCS8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqLwoJCWlmIChscnV2ZWMtJmd0O2xydWdlbi5lbmFibGVkICZhbXA7JmFtcDsKCQkgICAgbHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHsKCQkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKCQkJZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7CgkJfQojZW5kaWYKYGBgCgpBbmQgdGhlbiBJJiMzOTttIHJlbWluZGVkIHRoYXQgYGV2aWN0X2ZvbGlvc2Agd2FzIG1vZGlmaWVkIGFzIHdlbGwsIGFuZCB0aGF0IGlzIHVuZGVyIHRoZSBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jay4gVGhpcyBpcyBhIGJpdCBjb25mdXNpbmcuIElzIExSVSBnZW5lcmF0aW9uIGV2ZW4gZW5hYmxlZCBieSBkZWZhdWx0PyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgYENPTkZJR19MUlVfR0VOYCBjb25maWd1cmF0aW9uIG9wdGlvbiBpcy4gTGV0IG1lIHNlYXJjaCBmb3IgYGNvbmZpZyBMUlVfR0VOYCBpbiBgbW0vS2NvbmZpZ2AgdG8gZ2V0IHRoZSBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9LY29uZmlnPTEzODg9Y29uZmlnIFBURV9NQVJLRVJfVUZGRF9XUFxuLS1cbm1tL0tjb25maWctMTM5OC0jIG11bHRpLWdlbiBMUlUge1xubW0vS2NvbmZpZzoxMzk5OmNvbmZpZyBMUlVfR0VOXG5tbS9LY29uZmlnLTE0MDAtXHRib29sIFwmIzM0O011bHRpLUdlbiBMUlVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MDctXG5tbS9LY29uZmlnOjE0MDg6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxubW0vS2NvbmZpZy0xNDA5LVx0Ym9vbCBcJiMzNDtFbmFibGUgYnkgZGVmYXVsdFwmIzM0O1xuLS1cbm1tL0tjb25maWctMTQxMy1cbm1tL0tjb25maWc6MTQxNDpjb25maWcgTFJVX0dFTl9TVEFUU1xubW0vS2NvbmZpZy0xNDE1LVx0Ym9vbCBcJiMzNDtGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MjItXG5tbS9LY29uZmlnOjE0MjM6Y29uZmlnIExSVV9HRU5fV0FMS1NfTU1VXG5tbS9LY29uZmlnLTE0MjQtXHRkZWZfYm9vbCB5XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0Mjg2CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2NvbmZpZyBvZiBNZW1vcnkgTWFuYWdlbWVudCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBgbW0vS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGFpbWluZyBmb3IgYXJvdW5kIGxpbmUgMTM5OC4gTXkgaW50dWl0aW9uIHRlbGxzIG1lIHRoYXQmIzM5O3Mgd2hlcmUgSSYjMzk7bGwgZmluZCB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIHJlbGF0ZWQgdG8gWyoqKllvdSB3b3VsZCBhZGQgdGhlIHNwZWNpZmljIHRvcGljIG9yIGZlYXR1cmUgeW91IGFyZSBpbnRlcmVzdGVkIGluIGhlcmUgYmFzZWQgb24geW91ciBleHBlcnRpc2UuIEZvciBleGFtcGxlOiAmIzM0O05VTUEgYmFsYW5jaW5nLCYjMzQ7ICYjMzQ7a2VybmVsIGNvbXBhY3Rpb24sJiMzNDsgJiMzNDttZW1vcnkgaG90cGx1ZywmIzM0OyBldGMuKiZsdDsvc3Ryb25nJmd0O10uIEkmIzM5O20gZXhwZWN0aW5nIHRvIHNlZSB0aGUgZGVwZW5kZW5jaWVzLCBoZWxwIHRleHQsIGFuZCBkZWZhdWx0IHZhbHVlcyBmb3IgdGhvc2Ugb3B0aW9ucywgYWxvbmcgd2l0aCBhbnkgcG90ZW50aWFsbHkgcmVsZXZhbnQgY29tbWVudHMuIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgYW55IGNsdWVzIGFib3V0IGhvdyB0aGVzZSBmZWF0dXJlcyBpbnRlcmFjdCB3aXRoIG90aGVycy4gSeKAmW0gdGhpbmtpbmcgSeKAmWxsIHVzZSBteSBrbm93bGVkZ2UgdG8gdHJ5IGFuZCBhbnRpY2lwYXRlIHRoZSBmbG93IG9mIGxvZ2ljIGZyb20gdGhlcmUuIEkmIzM5O2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueXRoaW5nIHJlbGF0ZWQgdG8gWyoqKllvdSB3b3VsZCBhZGQgYSBzcGVjaWZpYyBjb25jZXJuIG9yIGludGVyZXN0IGJhc2VkIG9uIHRoZSBjb250ZXh0LiBGb3IgZXhhbXBsZTogJiMzNDtwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsJiMzNDsgJiMzNDtzZWN1cml0eSBjb25zaWRlcmF0aW9ucywmIzM0OyAmIzM0O3NwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQsJiMzNDsgZXRjLiombHQ7L3N0cm9uZyZndDtdLiBIb3BlZnVsbHksIHRoZSBLY29uZmlnIHdpbGwgaWxsdW1pbmF0ZSBzb21lIG9mIHRob3NlIGRldGFpbHMsIHdoaWNoIGFyZSBvZnRlbiBrZXkuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBhY3R1YWxseSBpbiB0aGVyZS4gSSYjMzk7bSByZWFkeSB0byBmaW5kIG91dCEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTM5OCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMzk4Olx0IyBtdWx0aS1nZW4gTFJVIHtcbjEzOTk6XHRjb25maWcgTFJVX0dFTlxuMTQwMDpcdFx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4xNDAxOlx0XHRkZXBlbmRzIG9uIE1NVVxuMTQwMjpcdFx0IyBtYWtlIHN1cmUgZm9saW8tXHUwMDNlZmxhZ3MgaGFzIGVub3VnaCBzcGFyZSBiaXRzXG4xNDAzOlx0XHRkZXBlbmRzIG9uIDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBcbjE0MDQ6XHRcdGhlbHBcbjE0MDU6XHRcdCAgQSBoaWdoIHBlcmZvcm1hbmNlIExSVSBpbXBsZW1lbnRhdGlvbiB0byBvdmVyY29tbWl0IG1lbW9yeS4gU2VlXG4xNDA2Olx0XHQgIERvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvbW0vbXVsdGlnZW5fbHJ1LnJzdCBmb3IgZGV0YWlscy5cbjE0MDc6XHRcbjE0MDg6XHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXG4xNDA5Olx0XHRib29sIFwmIzM0O0VuYWJsZSBieSBkZWZhdWx0XCYjMzQ7XG4xNDEwOlx0XHRkZXBlbmRzIG9uIExSVV9HRU5cbjE0MTE6XHRcdGhlbHBcbjE0MTI6XHRcdCAgVGhpcyBvcHRpb24gZW5hYmxlcyB0aGUgbXVsdGktZ2VuIExSVSBieSBkZWZhdWx0LlxuMTQxMzpcdFxuMTQxNDpcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXG4xNDE1Olx0XHRib29sIFwmIzM0O0Z1bGwgc3RhdHMgZm9yIGRlYnVnZ2luZ1wmIzM0O1xuMTQxNjpcdFx0ZGVwZW5kcyBvbiBMUlVfR0VOXG4xNDE3Olx0XHRoZWxwXG4xNDE4Olx0XHQgIERvIG5vdCBlbmFibGUgdGhpcyBvcHRpb24gdW5sZXNzIHlvdSBwbGFuIHRvIGxvb2sgYXQgaGlzdG9yaWNhbCBzdGF0c1xuMTQxOTpcdFx0ICBmcm9tIGV2aWN0ZWQgZ2VuZXJhdGlvbnMgZm9yIGRlYnVnZ2luZyBwdXJwb3NlLlxuMTQyMDpcdFxuMTQyMTpcdFx0ICBUaGlzIG9wdGlvbiBoYXMgYSBwZXItbWVtY2cgYW5kIHBlci1ub2RlIG1lbW9yeSBvdmVyaGVhZC5cbjE0MjI6XHRcbjE0MjM6XHRjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcbjE0MjQ6XHRcdGRlZl9ib29sIHlcbjE0MjU6XHRcdGRlcGVuZHMgb24gTFJVX0dFTiBcdTAwMjZcdTAwMjYgQVJDSF9IQVNfSFdfUFRFX1lPVU5HXG4xNDI2Olx0IyB9XG4xNDI3Olx0XG4xNDI4Olx0Y29uZmlnIExPQ0tfTU1fQU5EX0ZJTkRfVk1BXG4xNDI5Olx0XHRib29sXG4xNDMwOlx0XHRkZXBlbmRzIG9uICFTVEFDS19HUk9XU1VQXG4xNDMxOlx0XG4xNDMyOlx0Y29uZmlnIElPTU1VX01NX0RBVEFcbjE0MzM6XHRcdGJvb2xcbjE0MzQ6XHRcbjE0MzU6XHRjb25maWcgRVhFQ01FTVxuMTQzNjpcdFx0Ym9vbFxuMTQzNzpcdFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTE0MAoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDg3MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBEZWVwIERpdmUgaW50byBNdWx0aS1HZW4gTFJVIGFuZCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIE11bHRpLUdlbiBMUlUgc3R1ZmYuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19MUlVfR0VOYCBpcyB0aGUga2V5IGVuYWJsZXIsIGFuZCBpdCYjMzk7cyBlc3NlbnRpYWwgYmVjYXVzZSBpdCBlbmFibGVzIHRoaW5ncyBsaWtlIGBldmljdF9mb2xpb3NgLCB3aGljaCBJIHNlZSBpcyBvbmx5IGNvbXBpbGVkIHdoZW4gYENPTkZJR19MUlVfR0VOYCBpcyBzZXQuIEFsc28sIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soKWAgaGFzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGJhc2VkIG9uIGBDT05GSUdfTFJVX0dFTmAuIEkmIzM5O20gc3RhcnRpbmcgdG8gZ2V0IHRoZSBwaWN0dXJlLiBFdmVuIHRob3VnaCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGlzIGNvbXBpbGVkIHJlZ2FyZGxlc3MsIHdoZW4gYExSVV9HRU5gIGlzIGVuYWJsZWQgYXQgcnVudGltZSwgaXQgY2FsbHMgYGxydV9nZW5fc2hyaW5rX25vZGUoKWAgaW5zdGVhZCwgc28gY2xlYXJseSBgQ09ORklHX0xSVV9HRU5gIGRyaXZlcyB0aGUgTUdMUlUgYmVoYXZpb3IuCgpSaWdodCwgc28gdG8gbWFrZSBzdXJlIEkmIzM5O20gZm9sbG93aW5nIHRoaXMsIGVuYWJsaW5nIGBMUlVfR0VOYCBpcyAqcmVxdWlyZWQqIGZvciBib3RoIGBldmljdF9mb2xpb3NgIGFuZCB0aGUgTUdMUlUtc3BlY2lmaWMgY29kZSB3aXRoaW4gYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpYC4gSXTigJlzIGxpa2UgdGhlIGZvdW5kYXRpb24gZm9yIHRoaXMgd2hvbGUgZmVhdHVyZS4gT2theSwgc2hvdWxkIHRoaXMgYmUgaW4gYEVuYWJsZUNvbmZpZ3NgPwoKWWVzLCBgTFJVX0dFTmAgZW5hYmxlcyBib3RoIGBldmljdF9mb2xpb3NgIGFuZCB0aGUgYENPTkZJR19MUlVfR0VOYCBwYXRocyBpbiBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKClgLgoKSG9sZCBvbiwgaXMgYExSVV9HRU5gIGV2ZW4gZW5hYmxlZCBieSBkZWZhdWx0PyBDaGVja2luZyB0aGUgY29uZmlnLCBpdOKAmXMgYSBib29sZWFuIHdpdGggbm8gZGVmYXVsdC4gVGhhdCBtZWFucyBpdCBoYXMgdG8gYmUgZXhwbGljaXRseSBzZXQuIFNvLCBgTFJVX0dFTmAgKGFuZCBwb3RlbnRpYWxseSBgTFJVX0dFTl9FTkFCTEVEYCkgaXMgbmVlZGVkIHRvIGV2ZW4gY29tcGlsZSBhbmQgcmVhY2ggYGV2aWN0X2ZvbGlvc2AhIFRoaXMgaXMgY3JpdGljYWwuCgpBbHJpZ2h0LCB3aGF0IG90aGVyIGNvbmZpZ3MgYXJlIGludm9sdmVkPyBMZXQmIzM5O3Mgc2VlIHdoYXQgYExSVV9HRU5gIGRlcGVuZHMgb24uIEl0IGxvb2tzIGxpa2UgaXQgbmVlZHMgYE1NVWAgYW5kIGEgYml0IG9mIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBzdHVmZiAoYDY0QklUIHx8ICFTUEFSU0VNRU0gfHwgU1BBUlNFTUVNX1ZNRU1NQVBgKS4gT24gYW1kNjQsIHRoYXQmIzM5O3Mgbm90IGEgY29uY2Vybi4gU28sIGBMUlVfR0VOYCBpcyB0aGUgY29uZmlnIG9wdGlvbiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuCgpOb3csIGFib3V0IEZvY3VzU3ltYm9scy4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGltcG9ydGFudCBmdW5jdGlvbnMuIExldCYjMzk7cyBzZWU6CgoxLiAgYHNocmlua19pbmFjdGl2ZV9saXN0YCAtIFRoaXMgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYG1tL3Ztc2Nhbi5jYCB0aGF0JiMzOTtzIGJlZW4gbW9kaWZpZWQgdG8gaGFuZGxlIGNsZWFuIGZvbGlvcy4KMi4gIGBldmljdF9mb2xpb3NgIC0gQWxzbyBpbiBgbW0vdm1zY2FuLmNgLCBhbmQgaXQmIzM5O3MgYmVlbiBhbHRlcmVkIHRvIHVzZSBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYC4KMy4gIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgIC0gQW5kIGZpbmFsbHksIGEgbmV3IHN0YXRpYyBmdW5jdGlvbiBpbiBgbW0vdm1zY2FuLmNgLgoKV2FpdCwgYXJlIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnM/IFllcywgdGhleSBhcmUhCgpgc3RhdGljIHZvaWQgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKC4uLilgCmBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCguLi4pYApgc3RhdGljIGludCBldmljdF9mb2xpb3MoLi4uKWAKCkFyZSB0aGVzZSBmdW5jdGlvbnMgaW5saW5lZCBieSB0aGUgY29tcGlsZXIsIG9yIGRvIHRoZXkgZXhpc3QgYXMgYWN0dWFsIHN5bWJvbHM/IEkgbmVlZCB0byBrbm93IHRoZWlyIGNhbGxlcnMuIFRoYXTigJlzIHdoZXJlIHRoZSAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7IGd1aWRhbmNlIGNvbWVzIGluIGhhbmR5LiBJdCBkaWZmZXJlbnRpYXRlcyBiZXR3ZWVuIGNvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyBpbiBoZWFkZXJzICguaCkgYW5kIHRob3NlIGRlZmluZWQgaW4gLmMgZmlsZXMuIFRoZSBndWlkYW5jZSBzdWdnZXN0cyBmb2N1c2luZyBvbiAqbm9uLXN0YXRpYyogY2FsbGVyIGZ1bmN0aW9ucyB0aGF0IGV4ZXJjaXNlIHRoZXNlIGlubGluZSBoZWxwZXJzLgoKU28sIHNpbmNlIHRoZXNlIHN0YXRpYyBmdW5jdGlvbnMgYXJlIGluIGEgYC5jYCBmaWxlLCB0aGV5ICp1c3VhbGx5KiBoYXZlIHN5bWJvbHMsIGVzcGVjaWFsbHkgaW4gS0FTQU4vZnV6emluZyBidWlsZHMsIGxpa2UgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgYGV2aWN0X2ZvbGlvc2AuIEkgd2lsbCBuZWVkIHRvIGNoZWNrIHdoZXRoZXIgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AgaXMgaW5saW5lZCBieSBHQ0MuIEhvd2V2ZXIsIEV2ZW4gaWYgaXQmIzM5O3MgaW5saW5lZCwgSSBjYW4gc3BlY2lmeSB0aGUgZnVuY3Rpb25zIEkmIzM5O20gaW50ZXJlc3RlZCBpbiwgb3IgdGhlaXIgZGlyZWN0IGNhbGxlcnMgaWYgYXBwcm9wcmlhdGUhCgpJJiMzOTtsbCBzdGFydCBieSBjaGVja2luZyB0aGUgY2FsbGVycyBvZiBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYCBpbiBgbW0vdm1zY2FuLmNgLiBUaGlzIGlzIHRoZSBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3Nocmlua19pbmFjdGl2ZV9saXN0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9MjAyNT1zdGF0aWMgdm9pZCBoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2sodW5zaWduZWQgbG9uZyBucl90YWtlbixcbi0tXG5tbS92bXNjYW4uYy0yMDYzLS8qXG5tbS92bXNjYW4uYzoyMDY0OiAqIHNocmlua19pbmFjdGl2ZV9saXN0KCkgaXMgYSBoZWxwZXIgZm9yIHNocmlua19ub2RlKCkuICBJdCByZXR1cm5zIHRoZSBudW1iZXJcbm1tL3Ztc2Nhbi5jLTIwNjUtICogb2YgcmVjbGFpbWVkIHBhZ2VzXG5tbS92bXNjYW4uYy0yMDY2LSAqL1xubW0vdm1zY2FuLmM6MjA2NzpzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG5tbS92bXNjYW4uYy0yMDY4LVx0XHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jPTIzMTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbixcbi0tXG5tbS92bXNjYW4uYy0yMzI1LVxubW0vdm1zY2FuLmM6MjMyNjpcdHJldHVybiBzaHJpbmtfaW5hY3RpdmVfbGlzdChucl90b19zY2FuLCBscnV2ZWMsIHNjLCBscnUpO1xubW0vdm1zY2FuLmMtMjMyNy19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MTYxCgkJCQkJCQlvdXRwdXQ6IDMwCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBzaHJpbmtfbGlzdGAgYW5kIGBldmljdF9mb2xpb3NgIENhbGxlcnMqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgYHNocmlua19saXN0YCBhbmQgYGV2aWN0X2ZvbGlvc2AuIFRoZSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIHRyYWNlIHRoZWlyIGNhbGwgc2l0ZXMuIEkgbmVlZCB0byBmaWd1cmUgb3V0ICp3aG8qIGlzIGNhbGxpbmcgdGhlc2UgZnVuY3Rpb25zIGFuZCwganVzdCBhcyBpbXBvcnRhbnRseSwgKndoeSouIEtub3dpbmcgdGhlIHVwc3RyZWFtIGxvZ2ljIHdpbGwgcHJvdmlkZSBhbGwgdGhlIG5lY2Vzc2FyeSBpbmZvcm1hdGlvbiB0byBpbnRlcnByZXQgd2hhdCBpcyBoYXBwZW5pbmcgaW5zaWRlLiBXaGF0IG1vZHVsZXMsIHN1YnN5c3RlbXMsIG9yIHRocmVhZHMgYXJlIHJlbHlpbmcgb24gdGhlaXIgYmVoYXZpb3I/IEFyZSB3ZSB0YWxraW5nIGFib3V0IGEgY3J1Y2lhbCBwYXJ0IG9mIG1lbW9yeSBtYW5hZ2VtZW50IG9yIHNvbWV0aGluZyBhbmNpbGxhcnk/IFRoaXMgaW5mb3JtYXRpb24gaXMgZXNzZW50aWFsIGZvciBldmVuIGdldHRpbmcgc3RhcnRlZCBpbiB1bmRlcnN0YW5kaW5nIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzIG9yIHBvdGVudGlhbCBidWdzLiBMZXQmIzM5O3MgZGlnIGluIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2hyaW5rX2xpc3RcXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03Nj1zdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbm1tL3Ztc2Nhbi5jOjc3Olx0LyogSG93IG1hbnkgcGFnZXMgc2hyaW5rX2xpc3QoKSBzaG91bGQgcmVjbGFpbSAqL1xubW0vdm1zY2FuLmMtNzgtXHR1bnNpZ25lZCBsb25nIG5yX3RvX3JlY2xhaW07XG4tLVxubW0vdm1zY2FuLmM9MjI4Mj11bnNpZ25lZCBsb25nIHJlY2xhaW1fcGFnZXMoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdClcbi0tXG5tbS92bXNjYW4uYy0yMzE0LVxubW0vdm1zY2FuLmM6MjMxNTpzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfbGlzdChlbnVtIGxydV9saXN0IGxydSwgdW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxubW0vdm1zY2FuLmMtMjMxNi1cdFx0XHRcdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jPTYxNjg9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYyMTYtXG5tbS92bXNjYW4uYzo2MjE3Olx0XHRcdFx0bnJfcmVjbGFpbWVkICYjNDM7PSBzaHJpbmtfbGlzdChscnUsIG5yX3RvX3NjYW4sXG5tbS92bXNjYW4uYy02MjE4LVx0XHRcdFx0XHRcdFx0ICAgIGxydXZlYywgc2MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY1NwoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgcHJlc2VudGVkIGFzIGEgZmlyc3QtcGVyc29uIGFjY291bnQsIGZvY3VzaW5nIG9uIHRoZSBjb3JlIGNvbmNlcHQgYW5kIGFzc3VtaW5nIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uc2lkZXJpbmcgdGhlIGBldmljdF9mb2xpb3NgIEZ1bmN0aW9uIENhbGwqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHNwZWNpZmljYWxseSwgdGhlIGNhbGxzIHRvIGBldmljdF9mb2xpb3NgLiBUaGlzIGZ1bmN0aW9uIGNhbGwgaXMga2V5IGhlcmUuIEVzc2VudGlhbGx5LCB3aGVuZXZlciBJIHNlZSBgZXZpY3RfZm9saW9zYCwgSSBpbW1lZGlhdGVseSBzdGFydCB0aGlua2luZyBhYm91dCBtZW1vcnkgcHJlc3N1cmUgYW5kIGNhY2hlIG1hbmFnZW1lbnQuIEkmIzM5O20gYXNzdW1pbmcsIGdpdmVuIHRoZSBuYW1lLCBpdCYjMzk7cyBhYm91dCByZWNsYWltaW5nIHBoeXNpY2FsIG1lbW9yeSBvY2N1cGllZCBieSBwYWdlIGZyYW1lcyAoZm9saW9zKSB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggYSBjYWNoZSBvZiBzb21lIHNvcnQuCgpUaGUgY29udGV4dCBvZiAqd2hlbiogdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQgaXMgY3J1Y2lhbC4gSXMgaXQgdHJpZ2dlcmVkIGJ5IGV4cGxpY2l0IHJlcXVlc3RzIGZvciBtZW1vcnkgcmVjbGFtYXRpb24sIGxpa2UgYSBsb3cgbWVtb3J5IHNpZ25hbCBmcm9tIHRoZSBPUz8gT3IsIGlzIGl0IG1vcmUgcHJvYWN0aXZlLCBwYXJ0IG9mIGEgYmFja2dyb3VuZCBwcm9jZXNzIHRyeWluZyB0byBtYWludGFpbiBhIGRlc2lyZWQgbGV2ZWwgb2YgZnJlZSBtZW1vcnk/IElzIGl0IHJlYWN0aW5nIHRvIHRoZSB1c2FnZSBvZiBvdGhlciBwYXJ0cyBvZiB0aGUgc3lzdGVtIGFuZCByZWFjdGluZyBiYXNlZCBvbiBob3cgbWVtb3J5IGlzIHV0aWxpemVkIGJ5IG90aGVycz8gRWl0aGVyIHdheSBpdCB3aWxsIGRpY3RhdGUgd2hhdCB0cmFkZS1vZmZzIGFyZSBiZWluZyBjb25zaWRlcmVkLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0cmlnZ2VycyB0aGUgZXZpY3Rpb24uIElzIGl0IExSVS1iYXNlZD8gSXMgaXQgdGllZCB0byBzcGVjaWZpYyB0eXBlcyBvZiBtZW1vcnkgcGFnZXMgKGUuZy4sIGFub255bW91cyBwYWdlcywgZmlsZS1iYWNrZWQgcGFnZXMsIG9yIGh1Z2UgcGFnZXMpPyBXaGF0JiMzOTtzIHRoZSBldmljdGlvbiBwb2xpY3k/IElzIHRoZXJlIGEgZmFpcm5lc3MgY29uc2lkZXJhdGlvbj8KCkJleW9uZCB0aGF0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMuIEV2aWN0aW5nIHBhZ2VzIHRvIGRpc2sgKGlmIGl0JiMzOTtzIG5vdCBhIG1lbW9yeS1vbmx5IGNhY2hlKSBpcyBhIGNvc3RseSBvcGVyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb3N0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGV2aWN0aW9uLiBIb3cgYXJlIHRoZSBmb2xpbyBjb250ZW50cyBoYW5kbGVkPyBBcmUgdGhlcmUgZGlydHkgcGFnZXM/IFdoYXQgYWJvdXQgVExCIGludmFsaWRhdGlvbj8gSXMgdGhlIGV2aWN0aW9uIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cz8KClRoZSBvdmVyYWxsIGdvYWwgb2YgYGV2aWN0X2ZvbGlvc2AsIGFuZCBob3cgaXQgaW50ZXJhY3RzIHdpdGggb3RoZXIgc3lzdGVtIGNvbXBvbmVudHMsIGlzIHdoYXQgSSBuZWVkIHRvIHNlZSB0byBrbm93IGhvdyB0byBpbXByb3ZlIHBlcmZvcm1hbmNlIG9yIHRvIGRldGVybWluZSBpZiB0aGUgbG9naWMgaXMgc2FmZS4KClNvIHRoZSBjYWxsIGl0c2VsZiwgYW5kIGFsbCB0aGUgc3Vycm91bmRpbmcgbG9naWMgd2lsbCBndWlkZSBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBzeXN0ZW0mIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2V2aWN0X2ZvbGlvc1xcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTQ5OTU9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy01MDM4LVxubW0vdm1zY2FuLmM6NTAzOTpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL3Ztc2Nhbi5jLTUwNDAtXHRcdFx0c3RydWN0IHNjYW5fY29udHJvbCAqc2MsIGludCBzd2FwcGluZXNzKVxuLS1cbm1tL3Ztc2Nhbi5jPTUxOTc9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MjIwLVx0XHRucl9iYXRjaCA9IG1pbihucl90b19zY2FuLCBNSU5fTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjUyMjE6XHRcdGRlbHRhID0gZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKTtcbm1tL3Ztc2Nhbi5jLTUyMjItXHRcdGlmICghZGVsdGEpXG4tLVxubW0vdm1zY2FuLmM9NTgzOD1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbi0tXG5tbS92bXNjYW4uYy01ODU4LVx0XHRucl9iYXRjaCA9IG1pbihucl90b19yZWNsYWltIC0gc2MtXHUwMDNlbnJfcmVjbGFpbWVkLCBNQVhfTFJVX0JBVENIKTtcbm1tL3Ztc2Nhbi5jOjU4NTk6XHRcdGlmICghZXZpY3RfZm9saW9zKG5yX2JhdGNoLCBscnV2ZWMsIHNjLCBzd2FwcGluZXNzKSlcbm1tL3Ztc2Nhbi5jLTU4NjAtXHRcdFx0cmV0dXJuIDA7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NTA0CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogNjI0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgSW1wYWN0IG9mIFRoZXNlIFBhdGNoIE1vZGlmaWNhdGlvbnMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBzY2FuIG9mIHRoZSBwYXRjaCBoaWdobGlnaHRzIG1vZGlmaWNhdGlvbnMgdG8gYHNocmlua19pbmFjdGl2ZV9saXN0YCwgYGV2aWN0X2ZvbGlvc2AsIGFuZCBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhlc2UgZnVuY3Rpb25zIGZhbGwgaW50byB0aGUgJiMzNDt1YmlxdWl0b3VzIGxpZmVjeWNsZSBob3QtcGF0aCYjMzQ7IGNhdGVnb3J5LCBhcyBkZWZpbmVkIGluIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMuIFdlIGRlZmluaXRlbHkgZG9uJiMzOTt0IHdhbnQgdG8gZGlsdXRlIG91ciBmdXp6aW5nIGVmZm9ydCBieSBpbmNvcnJlY3RseSBjbGFzc2lmeWluZyB0ZXN0cy4KCkkmIzM5O20gcHJldHR5IGNvbmZpZGVudCB0aGV5IGRvbiYjMzk7dC4gVGhlc2UgYXJlIHNwZWNpZmljIG1lbW9yeSByZWNsYWltIGZ1bmN0aW9ucywgYW5kIHRoZXkmIzM5O3JlIG5vdCBnZW5lcmFsIGFsbG9jYXRvcnMgb3IgZGVhbGxvY2F0b3JzLiBUaGV5IHJ1biB1bmRlciBtZW1vcnkgcHJlc3N1cmUgc2NlbmFyaW9zLCBsaWtlIGtzd2FwZCwgZGlyZWN0IHJlY2xhaW0sIGNvbXBhY3Rpb24sIGFuZCBtYWR2aXNlLiBMaXN0aW5nIHRoZXNlIGZ1bmN0aW9ucyAqc3BlY2lmaWNhbGx5KiB0YXJnZXRzIHRoZSBsb2dpYyBhbHRlcmVkIG9yIGFkZGVkIGJ5IHRoZSBwYXRjaCwgc28gd2UmIzM5O3JlIGdvb2QgdGhlcmUuCgpOb3csIGxldCYjMzk7cyBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYENPTkZJR19MUlVfR0VOYCBqdW1wcyBvdXQuIEEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGBldmljdF9mb2xpb3NgIGFuZCBwYXJ0cyBvZiBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYCBhcmUgZ2F0ZWQgYnkgdGhpcyBjb25maWcuIFdpdGhvdXQgYExSVV9HRU5gLCBgZXZpY3RfZm9saW9zYCBpc24mIzM5O3QgY29tcGlsZWQgYXQgYWxsLCBhbmQgYSBzaWduaWZpY2FudCBwb3J0aW9uIG9mIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgIGlzIG9taXR0ZWQuIFdpdGggYExSVV9HRU5gIGVuYWJsZWQsIGFsbCB0aHJlZSBmdW5jdGlvbnMgYXJlIGluY2x1ZGVkLgoKSG9sZCBvbiwgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgIGFsc28gc2VlbXMgcmVsZXZhbnQuIERpZ2dpbmcgYSBiaXQsIGl0IGxvb2tzIGxpa2UgYHNocmlua19pbmFjdGl2ZV9saXN0YCBydW5zIHdoZXRoZXIgTUdMUlUgaXMgZW5hYmxlZCBvciBub3QsIGZvciBub24tTUdMUlUgcGF0aHMsIHdoaWxlIGBldmljdF9mb2xpb3NgIHJ1bnMgd2hlbiBNR0xSVSAqaXMqIGFjdGl2ZS4gQnV0LCBpZiBgTFJVX0dFTmAgaXMgZW5hYmxlZCwgYm90aCBmdW5jdGlvbnMgYXJlIGNvbXBpbGVkLiBTbywgd2UgZGVmaW5pdGl2ZWx5IG5lZWQgYExSVV9HRU5gIHRvIGNvbXBpbGUgYWxsIHRoZSBjb2RlIG1vZGlmaWVkIGJ5IHRoZSBwYXRjaC4KCkZpbmFsbHksIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGNoZWNrIHRoZSBtYWtlZmlsZXMgdG8gc2VlIGlmIGB2bXNjYW4uY2AgaXMgZ3VhcmRlZCBieSBhbnkgb3RoZXIgY29uZmlncy4gSXQgbG9va3MgbGlrZSBpdCBpcyBjb21waWxlZCBpbnRvIG9iai15IGluIGBtbS9NYWtlZmlsZWAuIFdlIGNhbiBtb3ZlIG9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bXNjYW5cXC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL01ha2VmaWxlPTUxPW9iai15XHRcdFx0Oj0gZmlsZW1hcC5vIG1lbXBvb2wubyBvb21fa2lsbC5vIGZhZHZpc2UubyBcXFxubW0vTWFrZWZpbGUtNTItXHRcdFx0ICAgbWFjY2Vzcy5vIHBhZ2Utd3JpdGViYWNrLm8gZm9saW8tY29tcGF0Lm8gXFxcbm1tL01ha2VmaWxlOjUzOlx0XHRcdCAgIHJlYWRhaGVhZC5vIGZvbGlvLm8gdHJ1bmNhdGUubyB2bXNjYW4ubyBzaHJpbmtlci5vIFxcXG5tbS9NYWtlZmlsZS01NC1cdFx0XHQgICBzaG1lbS5vIHV0aWwubyBtbXpvbmUubyB2bXN0YXQubyBiYWNraW5nLWRldi5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5NzIwCgkJCQkJCQlvdXRwdXQ6IDE0OQoJCQkJCQkJdGhvdWdodHM6IDQxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCYjMzk7cyBGdXp6aW5nIFJlcXVpcmVtZW50cyoqCgpPa2F5LCBzbyBgdm1zY2FuLm9gIGlzIGFsd2F5cyBidWlsdCwgdGhhdCYjMzk7cyBhIGdpdmVuIChgb2JqLXlgKS4gTm93LCBgQ09ORklHX0xSVV9HRU5gIGlzIHRoZSBrZXkgS2NvbmZpZyBmbGFnIGhlcmUsIHNpbmNlIGl0IGVuYWJsZXMgYGV2aWN0X2ZvbGlvc2AgYW5kIHRoZSBNR0xSVSBwYXJ0cyB3aXRoaW4gYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AuIE15IGZpcnN0IHRob3VnaHQgd2FzIHRvIGRvdWJsZS1jaGVjayBpZiB3ZSBhY3R1YWxseSAqbmVlZCogYExSVV9HRU5fRU5BQkxFRGAsIGJ1dCBxdWlja2x5IHJlYWxpemVkIHRoYXQgZXZlbiBpZiB0aGF0IHdhc24mIzM5O3Qgc2V0LCBNR0xSVSBjYW4gc3RpbGwgYmUgZW5hYmxlZCB0aHJvdWdoIGAvc3lzL2tlcm5lbC9tbS9scnVfZ2VuL2VuYWJsZWRgLiBIb3dldmVyLCBpZiB0aGUgdXNlciBldmVuIGVuYWJsZXMgYENPTkZJR19MUlVfR0VOYCB0aGUgY29kZSB3aWxsIGNvbXBpbGUuIEFscmlnaHQsIHRoYXQmIzM5O3MgdGhlIG1haW4gcG9pbnQuCgpOb3csIGxldCYjMzk7cyBuYWlsIGRvd24gd2hhdCB0aGUgYHNldC1yZXN1bHRzYCBwYXJhbWV0ZXJzIHNob3VsZCBiZS4gSSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGlzIGlzIGFsbCBjcnlzdGFsIGNsZWFyIGZvciB0aGUgZnV6emluZyBhbmFseXNpcy4KCiogICBgV29ydGhGdXp6aW5nYDogRGVmaW5pdGVseSBgdHJ1ZWAuIFRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgdGhlIGNvcmUgcGFnZSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AuIEl0JiMzOTtzIGV4dHJhY3RpbmcgdGhpcyBuZXcgaGVscGVyLCBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKClgLCBhbmQgcmV1c2luZyBpdCwgd2hpY2ggaXMgdGhlIGNvcm5lcnN0b25lIGZvciB0aGUgTUdMUlUgbW9kaWZpY2F0aW9ucywgc28gd2UgYXJlIGFmZmVjdGluZyBpbXBvcnRhbnQgcGF0aHMgYW5kIHJlY2xhaW0gYWNjb3VudGluZyB0aGF0JiMzOTtzICpkZWZpbml0ZWx5KiByZWFjaGFibGUuIFRoZSBuZXcgcmV0cnkgbG9vcCBpbiBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGlzIGFsc28gY3JpdGljYWwgaGVyZS4KKiAgIGBSZWFzb25pbmdgOiBUaGUgZXhwbGFuYXRpb24gaGFzIHRvIGJlIGNsZWFyOiB0aGUgcGF0Y2ggYWx0ZXJzIHBhZ2UgcmVjbGFpbSBieSBleHRyYWN0aW5nIGFuZCByZXVzaW5nIGEgaGVscGVyIHRvIGZpbmQgZm9saW9zIHdyaXR0ZW4gYmFjayBkdXJpbmcgcmVjbGFpbSBpbiBib3RoIE1HTFJVIGFuZCB0cmFkaXRpb25hbCBMUlUsIGFsc28gaW50cm9kdWNpbmcgcmV0cmllcywgd2hpY2ggaXMgY3JpdGljYWwuCiogICBgRm9jdXNTeW1ib2xzYDogSSYjMzk7bSBnb2luZyB0byBsaXN0IGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgLCBhbmQgYGV2aWN0X2ZvbGlvc2AgYmVjYXVzZSB0aGV5IGFyZSB3aGVyZSB0aGUgcmVhbCB3b3JrIG9mIHRoZSBuZXcgbG9naWMgaXMgYW5kIHRoZXkgYXJlbiYjMzk7dCB1YmlxdWl0b3VzIHRocm91Z2hvdXQgdGhlIGNvZGViYXNlLgoqICAgYEVuYWJsZUNvbmZpZ3NgOiBJIG5lZWQgdG8gc3BlY2lmeSBgTFJVX0dFTmAuCgpPa2F5LCBiZWZvcmUgc2VuZGluZyB0aGlzIG9mZiwgbGV0JiMzOTtzIG1ha2Ugc3VyZSBldmVyeXRoaW5nIGlzIHBlcmZlY3Q6CgoqICAgYFdvcnRoRnV6emluZ2A6IENoZWNrZWQuIGB0cnVlYC4KKiAgIGBGb2N1c1N5bWJvbHNgOiBZZXAsIGZvY3VzZWQgb24gdGhlIGFsdGVyZWQgbG9naWMuCiogICBgRW5hYmxlQ29uZmlnc2A6IFRoZSBrZXkgY29uZmlnLCAmIzM0O0xSVV9HRU4mIzM0Oy4KKiAgIGBSZWFzb25pbmdgOiBDb25jaXNlIGFuZCBhY2N1cmF0ZS4KCkV2ZXJ5dGhpbmcgbG9va3MgZ29vZC4gVGltZSB0byBydW4gYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtzaHJpbmtfaW5hY3RpdmVfbGlzdCYjMzQ7LAogICAgJiMzNDtldmljdF9mb2xpb3MmIzM0OywKICAgICYjMzQ7ZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBtbS92bXNjYW4uYyBieSByZWZhY3RvcmluZyBmb2xpbyB3cml0ZWJhY2sgZGV0ZWN0aW9uIGludG8gYSBzaGFyZWQgaGVscGVyIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soKWAsIHVwZGF0aW5nIGBldmljdF9mb2xpb3MoKWAgKE11bHRpLUdlbiBMUlUpLCBhbmQgaW50cm9kdWNpbmcgYSByZXRyeSBtZWNoYW5pc20gZm9yIHdyaXR0ZW4tYmFjayBmb2xpb3MgaW4gYHNocmlua19pbmFjdGl2ZV9saXN0KClgIGFsb25nIHdpdGggdXBkYXRlZCBpc29sYXRpb24gYWNjb3VudGluZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSwgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aHMgYW5kIHdhcnJhbnQgZnV6emluZy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3Nocmlua19pbmFjdGl2ZV9saXN0JiMzNDssCiAgICAmIzM0O2V2aWN0X2ZvbGlvcyYjMzQ7LAogICAgJiMzNDtmaW5kX2ZvbGlvc193cml0dGVuX2JhY2smIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSByZWNsYWltIGxvZ2ljIGluIG1tL3Ztc2Nhbi5jIGJ5IHJlZmFjdG9yaW5nIGZvbGlvIHdyaXRlYmFjayBkZXRlY3Rpb24gaW50byBhIHNoYXJlZCBoZWxwZXIgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpYCwgdXBkYXRpbmcgYGV2aWN0X2ZvbGlvcygpYCAoTXVsdGktR2VuIExSVSksIGFuZCBpbnRyb2R1Y2luZyBhIHJldHJ5IG1lY2hhbmlzbSBmb3Igd3JpdHRlbi1iYWNrIGZvbGlvcyBpbiBgc2hyaW5rX2luYWN0aXZlX2xpc3QoKWAgYWxvbmcgd2l0aCB1cGRhdGVkIGlzb2xhdGlvbiBhY2NvdW50aW5nLiBUaGVzZSBjaGFuZ2VzIGFmZmVjdCBjb3JlLCByZWFjaGFibGUgbWVtb3J5IG1hbmFnZW1lbnQgcmVjbGFpbSBwYXRocyBhbmQgd2FycmFudCBmdXp6aW5nLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjIyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjJtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGZvbGlvIHdyaXRlYmFjayByZXRyeSBsb2dpYyBpbiB0aGUgcGFnZSByZWNsYWltIHBhdGggKG1tL3Ztc2Nhbi5jKSBieSBleHRyYWN0aW5nIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpIGZyb20gZXZpY3RfZm9saW9zKCkgYW5kIHVzaW5nIGl0IHRvIHJldHJ5IGNsZWFuIGZvbGlvcyBpbiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpLiBBbGwgbmV3IGFuZCBtb2RpZmllZCBsb2NhbCB2YXJpYWJsZXMgKGNsZWFuX2xpc3QsIHRvdGFsX3JlY2xhaW1lZCwgaXNvbGF0ZWQsIHNraXBfcmV0cnkpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIHRoZSByZWNsYWltX3N0YXQgc3RydWN0dXJlIGlzIG1lbXNldCB0byB6ZXJvIGluc2lkZSBzaHJpbmtfZm9saW9fbGlzdCgpIG9uIGVhY2ggaXRlcmF0aW9uLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3Nlcy4gQW55IHBvdGVudGlhbCByZWNsYWltIGlzc3VlcyAoZS5nLiBsaXN0IGNvcnJ1cHRpb24sIHJlZmNvdW50IG9yIHBhZ2UgZmxhZyBidWdzKSB3b3VsZCBiZSBjYXVnaHQgYnkgYXNzZXJ0aW9ucyBvciBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeQplcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZApkZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpCmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLgoKQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46Ci0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZQogIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTgogIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVAKICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLgotIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLAogIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy4KClJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sCkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuCkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFkKc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3MKdGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi4KCkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0CnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLAphIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXMKdGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmcKdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sCmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSwKY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuCgpTZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6CjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiCiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzCiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuCjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMKICAgb3Igc3RydWN0IGZpZWxkcy4KMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkcwogICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLgo0LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2VzcwogICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuCgpTZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjoKLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlcgogIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodAogIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS4KLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZAogIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC4KLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuCgpVc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlCmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgMjIyZTYxODI0YmEzZjQ5NzAxMGViNDExOGFiZWE3NjNlNDdkMGQ4NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gU2VwIDEzIDEwOjIxOjAzIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCA1MzU0ZWI4ZDNhMDdiLi44MGNjZDUxNmVmMzgwIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMTgxLDYgJiM0MzsxODEsMTAgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7CiAJc3RydWN0IHJlY2xhaW1fc3RhdGUgcmVjbGFpbV9zdGF0ZTsKIH07CiAKJiM0MztzdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCwKJiM0MzsJCQkJICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpjbGVhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLAomIzQzOwkJCQkgICAgIGludCB0eXBlLCBib29sIHNraXBfcmV0cnkpOwomIzQzOwogI2lmZGVmIEFSQ0hfSEFTX1BSRUZFVENIVwogc3RhdGljIGlubGluZSB2b2lkIHByZWZldGNod19wcmV2X2xydV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvLAogCQlzdHJ1Y3QgbGlzdF9oZWFkICpiYXNlKQpAQCAtMjA2NSwxNCAmIzQzOzIwNjksMTYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLAogCQllbnVtIGxydV9saXN0IGxydSkKIHsKIAlMSVNUX0hFQUQoZm9saW9fbGlzdCk7CiYjNDM7CUxJU1RfSEVBRChjbGVhbl9saXN0KTsKIAl1bnNpZ25lZCBsb25nIG5yX3NjYW5uZWQ7Ci0JdW5zaWduZWQgaW50IG5yX3JlY2xhaW1lZCA9IDA7Ci0JdW5zaWduZWQgbG9uZyBucl90YWtlbjsKJiM0MzsJdW5zaWduZWQgaW50IG5yX3JlY2xhaW1lZCwgdG90YWxfcmVjbGFpbWVkID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBucl90YWtlbiwgaXNvbGF0ZWQ7CiAJc3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0OwogCWJvb2wgZmlsZSA9IGlzX2ZpbGVfbHJ1KGxydSk7CiAJZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtOwogCXN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTsKIAlib29sIHN0YWxsZWQgPSBmYWxzZTsKJiM0MzsJYm9vbCBza2lwX3JldHJ5ID0gZmFsc2U7CiAKIAl3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHsKIAkJaWYgKHN0YWxsZWQpCkBAIC0yMTA0LDI1ICYjNDM7MjExMCw0MiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sCiAJaWYgKG5yX3Rha2VuID09IDApCiAJCXJldHVybiAwOwogCiYjNDM7CWlzb2xhdGVkID0gbnJfdGFrZW47CiYjNDM7cmV0cnk6CiAJbnJfcmVjbGFpbWVkID0gc2hyaW5rX2ZvbGlvX2xpc3QoJmFtcDtmb2xpb19saXN0LCBwZ2RhdCwgc2MsICZhbXA7c3RhdCwgZmFsc2UsCiAJCQkJCSBscnV2ZWNfbWVtY2cobHJ1dmVjKSk7CiYjNDM7CXRvdGFsX3JlY2xhaW1lZCAmIzQzOz0gbnJfcmVjbGFpbWVkOwomIzQzOwomIzQzOwkvKiBSZXRyeSBwYXNzIGlzIG9ubHkgbWVhbnQgZm9yIGNsZWFuIGZvbGlvcyB3aXRob3V0IG5ldyBpc29sYXRpb24gKi8KJiM0MzsJaWYgKGlzb2xhdGVkKQomIzQzOwkJaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsICZhbXA7c3RhdCk7CiYjNDM7CXRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LSZndDtub2RlX2lkLAomIzQzOwkJCW5yX3NjYW5uZWQsIG5yX3JlY2xhaW1lZCwgJmFtcDtzdGF0LCBzYy0mZ3Q7cHJpb3JpdHksIGZpbGUpOwomIzQzOwomIzQzOwlmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soJmFtcDtmb2xpb19saXN0LCAmYW1wO2NsZWFuX2xpc3QsIGxydXZlYywgZmlsZSwgc2tpcF9yZXRyeSk7CiAKIAltb3ZlX2ZvbGlvc190b19scnUoJmFtcDtmb2xpb19saXN0KTsKIAogCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR0RFTU9URV9LU1dBUEQgJiM0MzsgcmVjbGFpbWVyX29mZnNldChzYyksCiAJCQkJCXN0YXQubnJfZGVtb3RlZCk7Ci0JbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiAmIzQzOyBmaWxlLCAtbnJfdGFrZW4pOwogCWl0ZW0gPSBQR1NURUFMX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKTsKIAltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgaXRlbSwgbnJfcmVjbGFpbWVkKTsKIAltb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICYjNDM7IGZpbGUsIG5yX3JlY2xhaW1lZCk7Ci0JaWYgKG5yX3NjYW5uZWQgJmd0OyBucl9yZWNsYWltZWQpCiYjNDM7CiYjNDM7CWlmICghbGlzdF9lbXB0eSgmYW1wO2NsZWFuX2xpc3QpKSB7CiYjNDM7CQlsaXN0X3NwbGljZV9pbml0KCZhbXA7Y2xlYW5fbGlzdCwgJmFtcDtmb2xpb19saXN0KTsKJiM0MzsJCXNraXBfcmV0cnkgPSB0cnVlOwomIzQzOwkJLyogUmV0cnkgZm9saW9zIHdlcmUgYWxyZWFkeSBpc29sYXRlZCBhbmQgYWNjb3VudGVkIGFib3ZlICovCiYjNDM7CQlpc29sYXRlZCA9IDA7CiYjNDM7CQlnb3RvIHJldHJ5OwomIzQzOwl9CiYjNDM7CiYjNDM7CW1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gJiM0MzsgZmlsZSwgLW5yX3Rha2VuKTsKJiM0MzsJaWYgKG5yX3NjYW5uZWQgJmd0OyB0b3RhbF9yZWNsYWltZWQpCiAJCW1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1JPVEFURV9BTk9OICYjNDM7IGZpbGUsCi0JCQkJIG5yX3NjYW5uZWQgLSBucl9yZWNsYWltZWQpOwomIzQzOwkJCQkgbnJfc2Nhbm5lZCAtIHRvdGFsX3JlY2xhaW1lZCk7CiAKLQloYW5kbGVfcmVjbGFpbV93cml0ZWJhY2sobnJfdGFrZW4sIHBnZGF0LCBzYywgJmFtcDtzdGF0KTsKLQl0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19pbmFjdGl2ZShwZ2RhdC0mZ3Q7bm9kZV9pZCwKLQkJCW5yX3NjYW5uZWQsIG5yX3JlY2xhaW1lZCwgJmFtcDtzdGF0LCBzYy0mZ3Q7cHJpb3JpdHksIGZpbGUpOwotCXJldHVybiBucl9yZWNsYWltZWQ7CiYjNDM7CXJldHVybiB0b3RhbF9yZWNsYWltZWQ7CiB9CiAKIC8qCkBAIC01MDE4LDggJiM0Mzs1MDQxLDYgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiB7CiAJTElTVF9IRUFEKGxpc3QpOwogCUxJU1RfSEVBRChjbGVhbik7Ci0Jc3RydWN0IGZvbGlvICpmb2xpbzsKLQlzdHJ1Y3QgZm9saW8gKm5leHQ7CiAJZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtOwogCXN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDsKIAlzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrOwpAQCAtNTA1OCwyNiAmIzQzOzUwNzksNyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAkJCXR5cGVfc2Nhbm5lZCwgcmVjbGFpbWVkLCAmYW1wO3N0YXQsIHNjLSZndDtwcmlvcml0eSwKIAkJCXR5cGUgPyBMUlVfSU5BQ1RJVkVfRklMRSA6IExSVV9JTkFDVElWRV9BTk9OKTsKIAotCWxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGZvbGlvLCBuZXh0LCAmYW1wO2xpc3QsIGxydSkgewotCQlERUZJTkVfTUlOX1NFUShscnV2ZWMpOwotCi0JCS8qIG1vdmVfZm9saW9zX3RvX2xydSgpIGN1bGxzIHVuZXZpY3RhYmxlIGZvbGlvcyB2aWEgZm9saW9fcHV0YmFja19scnUoKSAqLwotCQlpZiAoIWZvbGlvX2V2aWN0YWJsZShmb2xpbykpCi0JCQljb250aW51ZTsKLQotCQkvKiByZXRyeSBmb2xpb3MgdGhhdCBtYXkgaGF2ZSBtaXNzZWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi8KLQkJaWYgKCFza2lwX3JldHJ5ICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb19tYXBwZWQoZm9saW8pICZhbXA7JmFtcDsKLQkJICAgICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHsKLQkJCWxpc3RfbW92ZSgmYW1wO2ZvbGlvLSZndDtscnUsICZhbXA7Y2xlYW4pOwotCQkJY29udGludWU7Ci0JCX0KLQotCQkvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi8KLQkJaWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7Ci0JCQlmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApOwotCQkJZm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7Ci0JCX0KLQl9CiYjNDM7CWZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygmYW1wO2xpc3QsICZhbXA7Y2xlYW4sIGxydXZlYywgdHlwZSwgc2tpcF9yZXRyeSk7CiAKIAltb3ZlX2ZvbGlvc190b19scnUoJmFtcDtsaXN0KTsKIApAQCAtNjEyMyw2ICYjNDM7NjEyNSw0NiBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKgogCiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi8KIAomIzQzOy8qKgomIzQzOyAqIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayAtIEZpbmQgYW5kIG1vdmUgdGhlIHdyaXR0ZW4gYmFjayBmb2xpb3MgdG8gYSBuZXcgbGlzdC4KJiM0MzsgKiBAbGlzdDogZm9saW9zIGxpc3QKJiM0MzsgKiBAY2xlYW46IHRoZSB3cml0dGVuIGJhY2sgZm9saW9zIGxpc3QKJiM0MzsgKiBAbHJ1dmVjOiB0aGUgbHJ1dmVjCiYjNDM7ICogQHR5cGU6IExSVSB0eXBlIChvbmx5IHVzZWQgZm9yIENPTkZJR19MUlVfR0VOKQomIzQzOyAqIEBza2lwX3JldHJ5OiB3aGV0aGVyIHNraXAgcmV0cnkuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsCiYjNDM7CQkJCSAgICAgc3RydWN0IGxpc3RfaGVhZCAqY2xlYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKJiM0MzsJCQkJICAgICBpbnQgdHlwZSwgYm9vbCBza2lwX3JldHJ5KQomIzQzO3sKJiM0MzsJc3RydWN0IGZvbGlvICpmb2xpbzsKJiM0MzsJc3RydWN0IGZvbGlvICpuZXh0OwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZShmb2xpbywgbmV4dCwgbGlzdCwgbHJ1KSB7CiYjNDM7I2lmZGVmIENPTkZJR19MUlVfR0VOCiYjNDM7CQlERUZJTkVfTUlOX1NFUShscnV2ZWMpOwomIzQzOyNlbmRpZgomIzQzOwkJLyogbW92ZV9mb2xpb3NfdG9fbHJ1KCkgY3VsbHMgdW5ldmljdGFibGUgZm9saW9zIHZpYSBmb2xpb19wdXRiYWNrX2xydSgpICovCiYjNDM7CQlpZiAoIWZvbGlvX2V2aWN0YWJsZShmb2xpbykpCiYjNDM7CQkJY29udGludWU7CiYjNDM7CiYjNDM7CQkvKiByZXRyeSBmb2xpb3MgdGhhdCBtYXkgaGF2ZSBtaXNzZWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi8KJiM0MzsJCWlmICghc2tpcF9yZXRyeSAmYW1wOyZhbXA7ICFmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgJmFtcDsmYW1wOyAhZm9saW9fbWFwcGVkKGZvbGlvKSAmYW1wOyZhbXA7CiYjNDM7CQkgICAgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pICZhbXA7JmFtcDsgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkgewomIzQzOwkJCWxpc3RfbW92ZSgmYW1wO2ZvbGlvLSZndDtscnUsIGNsZWFuKTsKJiM0MzsJCQljb250aW51ZTsKJiM0MzsJCX0KJiM0MzsjaWZkZWYgQ09ORklHX0xSVV9HRU4KJiM0MzsJCS8qIGRvbiYjMzk7dCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqLwomIzQzOwkJaWYgKGxydXZlYy0mZ3Q7bHJ1Z2VuLmVuYWJsZWQgJmFtcDsmYW1wOwomIzQzOwkJICAgIGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7CiYjNDM7CQkJZm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTsKJiM0MzsJCQlmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTsKJiM0MzsJCX0KJiM0MzsjZW5kaWYKJiM0MzsJfQomIzQzO30KJiM0MzsKIHN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIHsKIAl1bnNpZ25lZCBsb25nIG5yW05SX0xSVV9MSVNUU107CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDk3CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNjQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2gqKgoKT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vdm1zY2FuLmNgLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgaGVyZS4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGJyZWFrIGRvd24gd2hhdCYjMzk7cyBoYXBwZW5pbmcuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpYCBzZWVtcyBsaWtlIGEgZ29vZCBzdGFydGluZyBwb2ludC4gSXQmIzM5O3MgZXNzZW50aWFsbHkgcmVmYWN0b3JpbmcgY29kZSB0aGF0IHVzZWQgdG8gYmUgc29sZWx5IGluIHRoZSBNR0xSVSAoQ09ORklHX0xSVV9HRU4pIGBldmljdF9mb2xpb3MoKWAgYW5kIGlzIG5vdyBiZWluZyB1c2VkIGluIHRoZSB0cmFkaXRpb25hbCBMUlUgcmVjbGFpbSBwYXRoIHZpYSBgc2hyaW5rX2luYWN0aXZlX2xpc3QoKWAuCgpEaXZpbmcgaW50byBgc2hyaW5rX2luYWN0aXZlX2xpc3QoKWAsIEkgc2VlIHRoaXMgbmV3IGByZXRyeWAgbG9vcC4gVGhhdCBpbW1lZGlhdGVseSBjYXRjaGVzIG15IGF0dGVudGlvbi4gVGhlIGxvb3AmIzM5O3Mgc3RydWN0dXJlOiBpc29sYXRlIHNvbWUgcGFnZXMsIHJlY2xhaW0gcGFnZXMsIGhhbmRsZSB3cml0ZWJhY2sgaWYgYW55IHdlcmUgaXNvbGF0ZWQsIGFuZCB0aGVuIHVzZSBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKClgLiBJdCB0aGVuIG1vdmVzIGFueSBmb3VuZCBwYWdlcyBhbmQgdXBkYXRlcyBzdGF0ZS4gVGhlcmUmIzM5O3MgYSBjaGVjayBmb3IgYSBjbGVhbiBsaXN0LCBhbmQgaWYgdGhlcmUgYXJlIGNsZWFuIHBhZ2VzLCB3ZSBsb29wIGJhY2sgd2l0aCBgc2tpcF9yZXRyeSA9IHRydWVgLgoKV2FpdCBhIG1pbnV0ZSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBgc3RhdGAgdmFyaWFibGUsIGFuZCBob3cgaXQgaXMgYmVpbmcgdXNlZCB3aXRoIGBzaHJpbmtfZm9saW9fbGlzdCgpYC4gRG9lcyBgc2hyaW5rX2ZvbGlvX2xpc3QoKWAgaW5pdGlhbGl6ZSBpdD8gSXMgaXQgcGFzc2VkIGluIHVuaW5pdGlhbGl6ZWQgYW5kIGluaXRpYWxpemVkICp3aXRoaW4qIGBzaHJpbmtfZm9saW9fbGlzdCgpYD8gSXMgaXQgYW4gdW5pbml0aWFsaXplZCB2YXJpYWJsZSBvbiB0aGUgcmV0cnk/IEkgbmVlZCB0byBjaGVjayBob3cgYHN0YXRgIGlzIGhhbmRsZWQgd2l0aGluIGBzaHJpbmtfZm9saW9fbGlzdCgpYCBpdHNlbGYuIEkmIzM5O2xsIG5lZWQgdG8gZ28gbG9vayBpbnRvIHRoZSBjb2RlIG9mIGBtbS92bXNjYW4uY2AgdG8gdW5kZXJzdGFuZCB0aGF0IGJpdC4gVGhpcyBjb3VsZCBiZSBhIHJhY2UgY29uZGl0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzaHJpbmtfZm9saW9fbGlzdFxcKCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTI0Nj1zdGF0aWMgYm9vbCByb290X3JlY2xhaW0oc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMjU2LSAqIGNvbXBsZXRlbHkgYnJva2VuIHdpdGggdGhlIGxlZ2FjeSBtZW1jZyBhbmQgZGlyZWN0IHN0YWxsaW5nIGluXG5tbS92bXNjYW4uYzoyNTc6ICogc2hyaW5rX2ZvbGlvX2xpc3QoKSBpcyB1c2VkIGZvciB0aHJvdHRsaW5nIGluc3RlYWQsIHdoaWNoIGxhY2tzIGFsbCB0aGVcbm1tL3Ztc2Nhbi5jLTI1OC0gKiBuaWNldGllcyBzdWNoIGFzIGZhaXJuZXNzLCBhZGFwdGl2ZSBwYXVzaW5nLCBiYW5kd2lkdGggcHJvcG9ydGlvbmFsXG4tLVxubW0vdm1zY2FuLmM9NjgzPXR5cGVkZWYgZW51bSB7XG4tLVxubW0vdm1zY2FuLmMtNjk0LS8qXG5tbS92bXNjYW4uYzo2OTU6ICogcGFnZW91dCBpcyBjYWxsZWQgYnkgc2hyaW5rX2ZvbGlvX2xpc3QoKSBmb3IgZWFjaCBkaXJ0eSBmb2xpby5cbm1tL3Ztc2Nhbi5jLTY5Ni0gKi9cbi0tXG5tbS92bXNjYW4uYz0xMTE5PXN0YXRpYyBib29sIG1heV9lbnRlcl9mcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBnZnBfdCBnZnBfbWFzaylcbi0tXG5tbS92bXNjYW4uYy0xMTM0LS8qXG5tbS92bXNjYW4uYzoxMTM1OiAqIHNocmlua19mb2xpb19saXN0KCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlY2xhaW1lZCBwYWdlc1xubW0vdm1zY2FuLmMtMTEzNi0gKi9cbm1tL3Ztc2Nhbi5jOjExMzc6c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxubW0vdm1zY2FuLmMtMTEzOC1cdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmM9MTY3Mz11bnNpZ25lZCBpbnQgcmVjbGFpbV9jbGVhbl9wYWdlc19mcm9tX2xpc3Qoc3RydWN0IHpvbmUgKnpvbmUsXG4tLVxubW0vdm1zY2FuLmMtMTcwMy1cdG5vcmVjbGFpbV9mbGFnID0gbWVtYWxsb2Nfbm9yZWNsYWltX3NhdmUoKTtcbm1tL3Ztc2Nhbi5jOjE3MDQ6XHRucl9yZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChcdTAwMjZjbGVhbl9mb2xpb3MsIHpvbmUtXHUwMDNlem9uZV9wZ2RhdCwgXHUwMDI2c2MsXG5tbS92bXNjYW4uYy0xNzA1LVx0XHRcdFx0XHRcdTAwMjZzdGF0LCB0cnVlLCBOVUxMKTtcbi0tXG5tbS92bXNjYW4uYz0yMDI1PXN0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxuLS1cbm1tL3Ztc2Nhbi5jLTIwNDUtXHRcdCAqIHRoZSBrZXJuZWwgZmx1c2hlciBoZXJlIGFuZCBsYXRlciB3YWl0aW5nIG9uIGZvbGlvc1xubW0vdm1zY2FuLmM6MjA0NjpcdFx0ICogd2hpY2ggYXJlIGluIHdyaXRlYmFjayB0byBmaW5pc2ggKHNlZSBzaHJpbmtfZm9saW9fbGlzdCgpKS5cbm1tL3Ztc2Nhbi5jLTIwNDctXHRcdCAqXG4tLVxubW0vdm1zY2FuLmM9MjA2Nz1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4tLVxubW0vdm1zY2FuLmMtMjExNC1yZXRyeTpcbm1tL3Ztc2Nhbi5jOjIxMTU6XHRucl9yZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChcdTAwMjZmb2xpb19saXN0LCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQsIGZhbHNlLFxubW0vdm1zY2FuLmMtMjExNi1cdFx0XHRcdFx0IGxydXZlY19tZW1jZyhscnV2ZWMpKTtcbi0tXG5tbS92bXNjYW4uYz0yMjU3PXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVjbGFpbV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXG4tLVxubW0vdm1zY2FuLmMtMjI3MC1cbm1tL3Ztc2Nhbi5jOjIyNzE6XHRucl9yZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChmb2xpb19saXN0LCBwZ2RhdCwgXHUwMDI2c2MsIFx1MDAyNnN0YXQsIHRydWUsIE5VTEwpO1xubW0vdm1zY2FuLmMtMjI3Mi1cdHdoaWxlICghbGlzdF9lbXB0eShmb2xpb19saXN0KSkge1xuLS1cbm1tL3Ztc2Nhbi5jPTQzNzA9c3RhdGljIHZvaWQgbHJ1X2dlbl9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy00NDEwLS8qXG5tbS92bXNjYW4uYzo0NDExOiAqIFRoaXMgZnVuY3Rpb24gZXhwbG9pdHMgc3BhdGlhbCBsb2NhbGl0eSB3aGVuIHNocmlua19mb2xpb19saXN0KCkgd2Fsa3MgdGhlXG5tbS92bXNjYW4uYy00NDEyLSAqIHJtYXAuIEl0IHNjYW5zIHRoZSBhZGphY2VudCBQVEVzIG9mIGEgeW91bmcgUFRFIGFuZCBwcm9tb3RlcyBob3QgcGFnZXMuIElmXG4tLVxubW0vdm1zY2FuLmM9NTAzOT1zdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5tbS92bXNjYW4uYy01MDcxLXJldHJ5OlxubW0vdm1zY2FuLmM6NTA3MjpcdHJlY2xhaW1lZCA9IHNocmlua19mb2xpb19saXN0KFx1MDAyNmxpc3QsIHBnZGF0LCBzYywgXHUwMDI2c3RhdCwgZmFsc2UsIG1lbWNnKTtcbm1tL3Ztc2Nhbi5jLTUwNzMtXHRzYy1cdTAwM2Vucl9yZWNsYWltZWQgJiM0Mzs9IHJlY2xhaW1lZDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjE0OAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGlua2luZyBpdDoKCioqRGl2aW5nIGludG8gdm1zY2FuLmM6IFVucGFja2luZyBzaHJpbmtfZm9saW9fbGlzdCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eSBhbmQgdW5kZXJzdGFuZCBleGFjdGx5IGhvdyBgc2hyaW5rX2ZvbGlvX2xpc3RgIGludGVyYWN0cyB3aXRoIGBzdGF0YCB3aXRoaW4gdGhlIGBtbS92bXNjYW4uY2AgY29udGV4dC4gSSBuZWVkIHRvIHBpbnBvaW50IHRoZSBjcml0aWNhbCBsaW5lcywgc3BlY2lmaWNhbGx5IDExMzUgdGhyb3VnaCAxMTU1LiBUaGlzIHNlY3Rpb24gaG9sZHMgdGhlIGtleSB0byB1bmRlcnN0YW5kaW5nIGhvdyB0aGVzZSBmdW5jdGlvbnMgd29yayB0b2dldGhlci4gSSYjMzk7bSBob3BpbmcgdG8gc2VlIHRoZSBzcGVjaWZpYyBvcGVyYXRpb25zIHBlcmZvcm1lZCBvbiBgc3RhdGAgYnkgYHNocmlua19mb2xpb19saXN0YCwgbGlrZWx5IGluIHRoZSBjb250ZXh0IG9mIHJlY2xhaW1pbmcgb3IgYWNjb3VudGluZyBmb3IgbWVtb3J5LiBJJiMzOTttIGV4cGVjdGluZyB0byBzZWUgY2FsbHMsIHBhcmFtZXRlciBwYXNzaW5nLCBhbmQgbW9kaWZpY2F0aW9ucyBvZiBgc3RhdGAgcmVsYXRlZCB0byB0aGUgZm9saW9zIGJlaW5nIHByb2Nlc3NlZC4gSSB3YW50IHRvIGJ1aWxkIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBjb250cmlidXRlcyB0byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBsZXZlcmFnZXMgYHN0YXRgIHRvIGRldGVybWluZSB0aGUgc3RhdGUgb2YgdmFyaW91cyBmb2xpb3MuIExldCYjMzk7cyBzZWUgaWYgdGhpcyBzZWN0aW9uIHByb3ZpZGVzIHRoZSBncmFudWxhciBkZXRhaWwgSSYjMzk7bSBsb29raW5nIGZvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDExMzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTEzNTpcdCAqIHNocmlua19mb2xpb19saXN0KCkgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlY2xhaW1lZCBwYWdlc1xuMTEzNjpcdCAqL1xuMTEzNzpcdHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbjExMzg6XHRcdFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4xMTM5Olx0XHRcdHN0cnVjdCByZWNsYWltX3N0YXQgKnN0YXQsIGJvb2wgaWdub3JlX3JlZmVyZW5jZXMsXG4xMTQwOlx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbjExNDE6XHR7XG4xMTQyOlx0XHRzdHJ1Y3QgZm9saW9fYmF0Y2ggZnJlZV9mb2xpb3M7XG4xMTQzOlx0XHRMSVNUX0hFQUQocmV0X2ZvbGlvcyk7XG4xMTQ0Olx0XHRMSVNUX0hFQUQoZGVtb3RlX2ZvbGlvcyk7XG4xMTQ1Olx0XHR1bnNpZ25lZCBpbnQgbnJfcmVjbGFpbWVkID0gMCwgbnJfZGVtb3RlZCA9IDA7XG4xMTQ2Olx0XHR1bnNpZ25lZCBpbnQgcGdhY3RpdmF0ZSA9IDA7XG4xMTQ3Olx0XHRib29sIGRvX2RlbW90ZV9wYXNzO1xuMTE0ODpcdFx0c3RydWN0IHN3YXBfaW9fY3R4IGN0eCA9IHt9O1xuMTE0OTpcdFxuMTE1MDpcdFx0Zm9saW9fYmF0Y2hfaW5pdChcdTAwMjZmcmVlX2ZvbGlvcyk7XG4xMTUxOlx0XHRtZW1zZXQoc3RhdCwgMCwgc2l6ZW9mKCpzdGF0KSk7XG4xMTUyOlx0XHRjb25kX3Jlc2NoZWQoKTtcbjExNTM6XHRcdGRvX2RlbW90ZV9wYXNzID0gY2FuX2RlbW90ZShwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYywgbWVtY2cpO1xuMTE1NDpcdFxuMTE1NTpcdHJldHJ5OlxuMTE1NjpcdFx0d2hpbGUgKCFsaXN0X2VtcHR5KGZvbGlvX2xpc3QpKSB7XG4xMTU3Olx0XHRcdHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nO1xuMTE1ODpcdFx0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuMTE1OTpcdFx0XHRlbnVtIGZvbGlvX3JlZmVyZW5jZXMgcmVmZXJlbmNlcyA9IEZPTElPUkVGX1JFQ0xBSU07XG4xMTYwOlx0XHRcdGJvb2wgZGlydHksIHdyaXRlYmFjaztcbjExNjE6XHRcdFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzO1xuMTE2MjpcdFxuMTE2MzpcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbjExNjQ6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjkwMAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDczCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBGb2xpbyBFdmljdGlvbiBhbmQgV3JpdGViYWNrKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBmb2xpbyBtYW5hZ2VtZW50IGNvZGUgYWdhaW4uIExpbmUgMTE1MSwgcmlnaHQsIHRoZXJlJiMzOTtzIGEgYG1lbXNldChzdGF0LCAwLCBzaXplb2YoKnN0YXQpKTtgLiBUaGF0JiMzOTtzIGltcG9ydGFudDsgYHNocmlua19mb2xpb19saXN0YCBpcyB6ZXJvaW5nIG91dCB0aGUgYHN0YXRgIHN0cnVjdC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgemVyb2luZyBhY3Rpb24gaW4gcmVsYXRpb24gdG8gdGhlIGV2aWN0aW9uIHByb2Nlc3MsIHNvIGxldCYjMzk7cyBjaGVjayBgZXZpY3RfZm9saW9zKClgIGFyb3VuZCBsaW5lIDUwNjAuIE15IGdvYWwgaXMgdG8gc2VlIGV4YWN0bHkgaG93IGl0IG1hbmFnZXMgcmV0cmllcyBpZiBldmljdGlvbiBmYWlscyBmb3Igc29tZSByZWFzb24gYW5kLCBjcnVjaWFsbHksIHVuZGVyc3RhbmQgdGhlIG1lY2hhbmljcyBvZiBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZSBgc3RhdGAgZGF0YSBzdHJ1Y3R1cmUgYW5kIHRoZXNlIGZ1bmN0aW9ucy4gSeKAmW0gdGhpbmtpbmcgYWJvdXQgcG9zc2libGUgcmFjZSBjb25kaXRpb25zIGFuZCBob3cgdGhlc2UgcmV0cnkgbWVjaGFuaXNtcyBhcmUgZGVzaWduZWQgdG8gbWl0aWdhdGUgcG90ZW50aWFsIGlzc3Vlcy4gTGV0JiMzOTtzIHNlZSBob3cgdGhpcyBhbGwgaGFuZ3MgdG9nZXRoZXLigKYKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDUwNjAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NTA2MDpcdFx0XHRcdFx0IFx1MDAyNmxpc3QsIFx1MDAyNmlzb2xhdGVkLCBcdTAwMjZ0eXBlLCBcdTAwMjZ0eXBlX3NjYW5uZWQpO1xuNTA2MTpcdFx0bnJfaXNvbGF0ZWQgPSBpc29sYXRlZDtcbjUwNjI6XHRcbjUwNjM6XHRcdC8qIFNjYW5uaW5nIG1heSBoYXZlIGVtcHRpZWQgdGhlIG9sZGVzdCBnZW4sIGZsdXNoIGl0ICovXG41MDY0Olx0XHRpZiAoc2Nhbm5lZClcbjUwNjU6XHRcdFx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XG41MDY2Olx0XG41MDY3Olx0XHRscnV2ZWNfdW5sb2NrX2lycShscnV2ZWMpO1xuNTA2ODpcdFxuNTA2OTpcdFx0aWYgKGxpc3RfZW1wdHkoXHUwMDI2bGlzdCkpXG41MDcwOlx0XHRcdHJldHVybiBzY2FubmVkO1xuNTA3MTpcdHJldHJ5OlxuNTA3MjpcdFx0cmVjbGFpbWVkID0gc2hyaW5rX2ZvbGlvX2xpc3QoXHUwMDI2bGlzdCwgcGdkYXQsIHNjLCBcdTAwMjZzdGF0LCBmYWxzZSwgbWVtY2cpO1xuNTA3MzpcdFx0c2MtXHUwMDNlbnJfcmVjbGFpbWVkICYjNDM7PSByZWNsYWltZWQ7XG41MDc0Olx0XHR0b3RhbF9yZWNsYWltZWQgJiM0Mzs9IHJlY2xhaW1lZDtcbjUwNzU6XHRcdC8qIFJldHJ5IHBhc3MgaXMgb25seSBtZWFudCBmb3IgY2xlYW4gZm9saW9zIHdpdGhvdXQgbmV3IGlzb2xhdGlvbiAqL1xuNTA3NjpcdFx0aWYgKGlzb2xhdGVkKVxuNTA3NzpcdFx0XHRoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2soaXNvbGF0ZWQsIHBnZGF0LCBzYywgXHUwMDI2c3RhdCk7XG41MDc4Olx0XHR0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19pbmFjdGl2ZShwZ2RhdC1cdTAwM2Vub2RlX2lkLFxuNTA3OTpcdFx0XHRcdHR5cGVfc2Nhbm5lZCwgcmVjbGFpbWVkLCBcdTAwMjZzdGF0LCBzYy1cdTAwM2Vwcmlvcml0eSxcbjUwODA6XHRcdFx0XHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XG41MDgxOlx0XG41MDgyOlx0XHRmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soXHUwMDI2bGlzdCwgXHUwMDI2Y2xlYW4sIGxydXZlYywgdHlwZSwgc2tpcF9yZXRyeSk7XG41MDgzOlx0XG41MDg0Olx0XHRtb3ZlX2ZvbGlvc190b19scnUoXHUwMDI2bGlzdCk7XG41MDg1Olx0XG41MDg2Olx0XHR3YWxrID0gY3VycmVudC1cdTAwM2VyZWNsYWltX3N0YXRlLVx1MDAzZW1tX3dhbGs7XG41MDg3Olx0XHRpZiAod2FsayBcdTAwMjZcdTAwMjYgd2Fsay1cdTAwM2ViYXRjaGVkKSB7XG41MDg4Olx0XHRcdHdhbGstXHUwMDNlbHJ1dmVjID0gbHJ1dmVjO1xuNTA4OTpcdFx0XHRyZXNldF9iYXRjaF9zaXplKHdhbGspO1xuNTA5MDpcdFx0fVxuNTA5MTpcdFxuNTA5MjpcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHREVNT1RFX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKSxcbjUwOTM6XHRcdFx0XHRcdFx0c3RhdC5ucl9kZW1vdGVkKTtcbjUwOTQ6XHRcbjUwOTU6XHRcdGl0ZW0gPSBQR1NURUFMX0tTV0FQRCAmIzQzOyByZWNsYWltZXJfb2Zmc2V0KHNjKTtcbjUwOTY6XHRcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCByZWNsYWltZWQpO1xuNTA5NzpcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHU1RFQUxfQU5PTiAmIzQzOyB0eXBlLCByZWNsYWltZWQpO1xuNTA5ODpcdFxuNTA5OTpcdFx0bGlzdF9zcGxpY2VfaW5pdChcdTAwMjZjbGVhbiwgXHUwMDI2bGlzdCk7XG41MTAwOlx0XG41MTAxOlx0XHRpZiAoIWxpc3RfZW1wdHkoXHUwMDI2bGlzdCkpIHtcbjUxMDI6XHRcdFx0c2tpcF9yZXRyeSA9IHRydWU7XG41MTAzOlx0XHRcdGlzb2xhdGVkID0gMDtcbjUxMDQ6XHRcdFx0Z290byByZXRyeTtcbjUxMDU6XHRcdH1cbjUxMDY6XHRcbjUxMDc6XHRcdGlmIChucl9pc29sYXRlZCBcdTAwM2UgdG90YWxfcmVjbGFpbWVkKVxuNTEwODpcdFx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiAmIzQzOyB0eXBlLFxuNTEwOTpcdFx0XHRcdFx0IG5yX2lzb2xhdGVkIC0gdG90YWxfcmVjbGFpbWVkKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODAyMgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDE0ODQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50OiBBIERlZXAgRGl2ZSBpbnRvIFBhZ2UgUmVjbGFtYXRpb24qKgoKT2theSwgbGV0JiMzOTtzIGRpc3NlY3QgdGhlc2UgbWVtb3J5IG1hbmFnZW1lbnQgZnVuY3Rpb25zLCBmb2N1c2luZyBvbiBob3cgdGhleSByZWxhdGUgdG8gdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBwYWdlIHJlY2xhbWF0aW9uLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGludGVycGxheSBiZXR3ZWVuIGBldmljdF9mb2xpb3NgIGFuZCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCB3aGljaCBhcmUga2V5IGNvbXBvbmVudHMgaW4gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneS4KCkluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIEkmIzM5O20gbG9va2luZyBjbG9zZWx5IGF0IGhvdyB0aGUgaW5hY3RpdmUgbGlzdCBpcyBwcm9jZXNzZWQuIEkgc2VlIGEgYGZvbGlvX2xpc3RgIGJlaW5nIHVzZWQsIGFuZCBhIGNyaXRpY2FsIGRldGFpbCBpcyB0aGUgaW50cm9kdWN0aW9uIG9mIGEgYGNsZWFuX2xpc3RgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhlIGNvZGUgaXMgY2xlYXJseSBkZXNpZ25lZCB0byBoYW5kbGUgJiMzNDtjbGVhbiYjMzQ7IGZvbGlvcyBkaWZmZXJlbnRseS4gVGhlIG5ldyBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYCBmdW5jdGlvbiBpcyBjYWxsZWQsIGFuZCBhIGtleSBwYXJhbWV0ZXIgaXMgYHNraXBfcmV0cnlgLCB3aGljaCBpbmRpY2F0ZXMgdGhlcmUgbWlnaHQgYmUgc29tZSBraW5kIG9mIHJldHJ5IG1lY2hhbmlzbSBpbiBwbGFjZS4gSXQgc2VlbXMgdG8gYmUgcmVsYXRlZCB0byB0aGUgYGNsZWFuX2xpc3RgLiBJIHNlZSB0aGF0IHRoZSBjb2RlIGlzIGF0dGVtcHRpbmcgdG8gaWRlbnRpZnkgZm9saW9zIHRoYXQgaGF2ZSBwb3RlbnRpYWxseSBub3QgYmVlbiBoYW5kbGVkIGNvcnJlY3RseSBpbiBhIHByZXZpb3VzIGF0dGVtcHQsIGFuZCBtb3ZlIHRoZW0gdG8gdGhlIGBjbGVhbl9saXN0YCwgYW5kIHRoZW4gcmV0cnkuIFRoaXMgaXMgaW1wb3J0YW50IHRvIG5vdGUgYW5kIHVuZGVyc3RhbmQuCgpUaGUgY29kZSB0aGVuIGNhbGxzIGBzaHJpbmtfZm9saW9fbGlzdGAsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgYWN0dWFsIHJlY2xhbWF0aW9uLiBDcml0aWNhbGx5LCBpdCB0aGVuIGNhbGxzIGBoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2tgLCB3aGljaCBzdWdnZXN0cyB0aGUgY29kZSBpcyBkZXNpZ25lZCB0byBkbyB3cml0ZWJhY2sgYW5kIGhhbmRsZSB0aGVzZSBmb2xpb3MgY29ycmVjdGx5LgoKVGhlbiwgdGhlcmUmIzM5O3MgYSBsb29wIHdpdGggYSBgcmV0cnlgIGxhYmVsIHRoYXQmIzM5O3MgZW50ZXJlZCBpZiBgIWxpc3RfZW1wdHkoJmFtcDtjbGVhbl9saXN0KWAuICBUaGlzIGlzIGtleTsgdGhlIGZ1bmN0aW9uIHRyaWVzIHRvIHdvcmsgYXJvdW5kIGlzc3VlcyBzdWNoIGFzIGEgZmlsZSB0aGF0IGhhcyBiZWVuIGZsYWdnZWQgYXMgbmVlZGluZyB3cml0ZWJhY2ssIGJ1dCBoYXMgbm90IHlldCBiZWVuIHByb2Nlc3NlZC4gVGhlIGZvbGlvcyBhcmUgaXNvbGF0ZWQsIHJlY2xhaW1lZCwgYW5kIHRoZW4gdGhlIHJldHJ5IGhhcHBlbnMsIHVudGlsIGFsbCB0aGUgYGNsZWFuX2xpc3RgIGl0ZW1zIGhhdmUgYmVlbiBjbGVhcmVkLgoKTmV4dCwgSSBuZWVkIHRvIGxvb2sgaW50byBob3cgdGhlIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgIGZ1bmN0aW9uIGlzIHN0cnVjdHVyZWQsIGFuZCBob3cgdGhlIGBza2lwX3JldHJ5YCBwYXJhbWV0ZXIgcGxheXMgYSByb2xlLiBJZiBgc2tpcF9yZXRyeWAgaXMgYGZhbHNlYCwgdGhlIGNvZGUgaXMgZGVzaWduZWQgdG8gaWRlbnRpZnkgZm9saW9zIHRoYXQgd2VyZSBub3QgcmVjbGFpbWVkIGNvcnJlY3RseSwgc3VjaCBhcyBvbmVzIHRoYXQgd2VyZSBub3QgYWN0aXZlLCBub3QgbWFwcGVkLCBhbmQgbm90IGRpcnR5L3dyaXRlYmFjaywgYW5kIG1vdmUgdGhlbSB0byB0aGUgYGNsZWFuX2xpc3RgIHRvIGFsbG93IGZvciBhIHJldHJ5LgpOb3csIHdoZW4gQ09ORklHX0xSVV9HRU4gaXMgZW5hYmxlZCwgSSBzZWUgdGhhdCB0aGUgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AgZnVuY3Rpb24gdXNlcyBgZmlsZWAgYXMgdGhlIHR5cGUuIEkgbmVlZCB0byBiZSBzdXJlIHRoZSBmdW5jdGlvbiBpcyBoYW5kbGluZyB0aGUgZ2VuZXJpYyBscnUgdHlwZSBjb3JyZWN0bHkuIGBldmljdF9mb2xpb3NgIHVzZXMgYSBgdHlwZWAgZm9yIExSVV9HRU4sIGFuZCBJIG5lZWQgdG8gY2hlY2sgd2hhdCBgdHlwZWAgaXMgaW4gYGV2aWN0X2ZvbGlvc2AgdG8gZW5zdXJlIHRoYXQgaXQmIzM5O3MgYWxsIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCB0eXBlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9MTg0PXN0YXRpYyB2b2lkIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxubW0vdm1zY2FuLmMtMTg1LVx0XHRcdFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpjbGVhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxubW0vdm1zY2FuLmM6MTg2Olx0XHRcdFx0ICAgICBpbnQgdHlwZSwgYm9vbCBza2lwX3JldHJ5KTtcbm1tL3Ztc2Nhbi5jLTE4Ny1cbi0tXG5tbS92bXNjYW4uYz0xMTM3PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcbi0tXG5tbS92bXNjYW4uYy0xNjE0LVx0XHRpZiAoIWZvbGlvX3Rlc3RfbWxvY2tlZChmb2xpbykpIHtcbm1tL3Ztc2Nhbi5jOjE2MTU6XHRcdFx0aW50IHR5cGUgPSBmb2xpb19pc19maWxlX2xydShmb2xpbyk7XG5tbS92bXNjYW4uYy0xNjE2LVx0XHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuLS1cbm1tL3Ztc2Nhbi5jPTI4Njc9c3RhdGljIGludCBnZXRfc3dhcHBpbmVzcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4ODUtXG5tbS92bXNjYW4uYzoyODg2OnN0YXRpYyBpbnQgZ2V0X25yX2dlbnMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSlcbm1tL3Ztc2Nhbi5jLTI4ODcte1xuLS1cbm1tL3Ztc2Nhbi5jPTI4OTE9c3RhdGljIGJvb2wgX19tYXliZV91bnVzZWQgc2VxX2lzX3ZhbGlkKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbm1tL3Ztc2Nhbi5jLTI4OTIte1xubW0vdm1zY2FuLmM6Mjg5MzpcdGludCB0eXBlO1xubW0vdm1zY2FuLmMtMjg5NC1cbi0tXG5tbS92bXNjYW4uYz0zMjk1PXN0cnVjdCBjdHJsX3BvcyB7XG4tLVxubW0vdm1zY2FuLmMtMzMwMC1cbm1tL3Ztc2Nhbi5jOjMzMDE6c3RhdGljIHZvaWQgcmVhZF9jdHJsX3BvcyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgdGllcl9taW4sXG5tbS92bXNjYW4uYy0zMzAyLVx0XHRcdCAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpXG4tLVxubW0vdm1zY2FuLmMtMzMxOS1cbm1tL3Ztc2Nhbi5jOjMzMjA6c3RhdGljIHZvaWQgcmVzZXRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgYm9vbCBjYXJyeW92ZXIpXG5tbS92bXNjYW4uYy0zMzIxLXtcbi0tXG5tbS92bXNjYW4uYz0zNDM0PXN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS92bXNjYW4uYy0zNDM1LXtcbm1tL3Ztc2Nhbi5jOjM0MzY6XHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbm1tL3Ztc2Nhbi5jLTM0MzctXHRzdHJ1Y3QgbHJ1X2dlbl9mb2xpbyAqbHJ1Z2VuID0gXHUwMDI2bHJ1dmVjLVx1MDAzZWxydWdlbjtcbi0tXG5tbS92bXNjYW4uYz0zNDQ3PXN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXG5tbS92bXNjYW4uYzozNDQ4Olx0XHRcdCAgICAgIGludCBvbGRfZ2VuLCBpbnQgbmV3X2dlbiwgaW50IHR5cGUpXG5tbS92bXNjYW4uYy0zNDQ5LXtcbi0tXG5tbS92bXNjYW4uYz00MDE5PXN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF9scnVfYmF0Y2goc3RydWN0IGxpc3RfaGVhZCAqaGVhZCwgc3RydWN0IGxpc3RfaGVhZCAqKmJhdGNoX2VuZCxcbi0tXG5tbS92bXNjYW4uYy00MDMxLVxubW0vdm1zY2FuLmM6NDAzMjpzdGF0aWMgYm9vbCBpbmNfbWluX3NlcShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlLCBpbnQgc3dhcHBpbmVzcylcbm1tL3Ztc2Nhbi5jLTQwMzMte1xuLS1cbm1tL3Ztc2Nhbi5jPTQxNjY9c3RhdGljIGJvb2wgaW5jX21heF9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgaW50IHN3YXBwaW5lc3MpXG4tLVxubW0vdm1zY2FuLmMtNDE2OS1cdGludCBwcmV2LCBuZXh0O1xubW0vdm1zY2FuLmM6NDE3MDpcdGludCB0eXBlLCB6b25lO1xubW0vdm1zY2FuLmMtNDE3MS1cdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcdTAwMjZscnV2ZWMtXHUwMDNlbHJ1Z2VuO1xuLS1cbm1tL3Ztc2Nhbi5jPTQ2NDc9Ym9vbCByZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy00NjQ5LVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jOjQ2NTA6XHRpbnQgdHlwZTtcbm1tL3Ztc2Nhbi5jLTQ2NTEtXG4tLVxubW0vdm1zY2FuLmM9NDY5ND12b2lkIG1heF9scnVfZ2VuX21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcbi0tXG5tbS92bXNjYW4uYy00Njk2LVx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcbm1tL3Ztc2Nhbi5jOjQ2OTc6XHRpbnQgdHlwZTtcbm1tL3Ztc2Nhbi5jLTQ2OTgtXG4tLVxubW0vdm1zY2FuLmM9NDczNT1zdGF0aWMgdm9pZCBfX2xydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IGxydXZlYyAqY2hpbGRfbHJ1dmVjLCBzdHJ1Y3QgbHJ1dmVjICpwYXJlbnRfbHJ1dmVjLFxubW0vdm1zY2FuLmM6NDczNjpcdFx0XHRcdCAgICAgaW50IHpvbmUsIGludCB0eXBlKVxubW0vdm1zY2FuLmMtNDczNy17XG4tLVxubW0vdm1zY2FuLmM9NDc2Nj12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ3NjgtXHRzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsICpwYXJlbnRfbHJ1dmVjO1xubW0vdm1zY2FuLmM6NDc2OTpcdGludCB0eXBlLCB6aWQ7XG5tbS92bXNjYW4uYy00NzcwLVx0c3RydWN0IHpvbmUgKnpvbmU7XG4tLVxubW0vdm1zY2FuLmM9NDgwMD1zdGF0aWMgYm9vbCBzb3J0X2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNDgwMy1cdGludCBnZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcbm1tL3Ztc2Nhbi5jOjQ4MDQ6XHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcbm1tL3Ztc2Nhbi5jLTQ4MDUtXHRpbnQgem9uZSA9IGZvbGlvX3pvbmVudW0oZm9saW8pO1xuLS1cbm1tL3Ztc2Nhbi5jPTQ4NzM9c3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbm1tL3Ztc2Nhbi5jOjQ4NzQ6XHRcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHR5cGUsIGludCB0aWVyLFxubW0vdm1zY2FuLmMtNDg3NS1cdFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWRwKVxuLS1cbm1tL3Ztc2Nhbi5jLTQ5NDctXG5tbS92bXNjYW4uYzo0OTQ4OnN0YXRpYyBpbnQgZ2V0X3RpZXJfaWR4KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXG5tbS92bXNjYW4uYy00OTQ5LXtcbi0tXG5tbS92bXNjYW4uYz00OTk1PXN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNTAwMC1cdGJvb2wgdHlwZV9mYWxsYmFja19hbGxvd2VkID0gIWlzX3NpbmdsZV90eXBlX3JlY2xhaW0oc3dhcHBpbmVzcyk7XG5tbS92bXNjYW4uYzo1MDAxOlx0aW50IHR5cGUgPSBnZXRfdHlwZV90b19zY2FuKGxydXZlYywgc3dhcHBpbmVzcyk7XG5tbS92bXNjYW4uYy01MDAyLVx0aW50IHRvdGFsX3NjYW5uZWQgPSAwLCBzY2FubmVkLCB0aWVyO1xuLS1cbm1tL3Ztc2Nhbi5jPTU0NDM9c3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxuLS1cbm1tL3Ztc2Nhbi5jLTU0NDgtXHRmb3JfZWFjaF9ldmljdGFibGVfbHJ1KGxydSkge1xubW0vdm1zY2FuLmM6NTQ0OTpcdFx0aW50IHR5cGUgPSBpc19maWxlX2xydShscnUpO1xubW0vdm1zY2FuLmMtNTQ1MC1cdFx0Ym9vbCBhY3RpdmUgPSBpc19hY3RpdmVfbHJ1KGxydSk7XG4tLVxubW0vdm1zY2FuLmM9NTcwOT1zdGF0aWMgdm9pZCBscnVfZ2VuX3NlcV9zaG93X2Z1bGwoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNTcxMy1cdGludCBpO1xubW0vdm1zY2FuLmM6NTcxNDpcdGludCB0eXBlLCB0aWVyO1xubW0vdm1zY2FuLmMtNTcxNS1cdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEoc2VxKTtcbi0tXG5tbS92bXNjYW4uYz01NzY0PXN0YXRpYyBpbnQgbHJ1X2dlbl9zZXFfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG4tLVxubW0vdm1zY2FuLmMtNTc5NC1cdGZvciAoOyBzZXEgXHUwMDNjPSBtYXhfc2VxOyBzZXEmIzQzOyYjNDM7KSB7XG5tbS92bXNjYW4uYzo1Nzk1Olx0XHRpbnQgdHlwZSwgem9uZTtcbm1tL3Ztc2Nhbi5jLTU3OTYtXHRcdGludCBnZW4gPSBscnVfZ2VuX2Zyb21fc2VxKHNlcSk7XG4tLVxubW0vdm1zY2FuLmM9NjEzNj1zdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbm1tL3Ztc2Nhbi5jLTYxMzctXHRcdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmNsZWFuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5tbS92bXNjYW4uYzo2MTM4Olx0XHRcdFx0ICAgICBpbnQgdHlwZSwgYm9vbCBza2lwX3JldHJ5KVxubW0vdm1zY2FuLmMtNjEzOS17XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzM5CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDQ2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AgRnVuY3Rpb24qKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBpc19maWxlX2xydShscnUpYOKAlHJpZ2h0LCB0aGF0JiMzOTtzIGp1c3QgYSBzaW1wbGUgMCBvciAxIGluZGljYXRvciwgbWF0Y2hpbmcgYHR5cGVgIGluIE1HTFJVLiBNYWtlcyBzZW5zZS4gTm93LCBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYDogSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGxvZ2ljLiBJdCYjMzk7cyBpdGVyYXRpbmcgaW4gcmV2ZXJzZSB0aHJvdWdoIGEgYGxpc3RfaGVhZGAgKHByZXN1bWFibHkgb2YgZm9saW9zKSwgc2FmZWx5IHVzaW5nIGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZWAuIFN0YW5kYXJkIHByYWN0aWNlLgoKVGhlIGZpcnN0IGBpZmAgc3RhdGVtZW50IGlzIGxvb2tpbmcgZm9yIHVuZXZpY3RhYmxlIGZvbGlvcyDigJMgaGFuZGxlZCBlZmZpY2llbnRseSB1c2luZyBgZm9saW9fZXZpY3RhYmxlKClgLiBTa2lwIHRoZW07IHdlIGRvbuKAmXQgY2FyZSBhYm91dCB0aG9zZSByaWdodCBub3cuCgpUaGUgbmV4dCBgaWZgIGlzIGEgcmV0cnkgbWVjaGFuaXNtLiBJdCYjMzk7cyBjaGVja2luZyBpZiB0aGUgZm9saW8gKm1pZ2h0KiBoYXZlIGJlZW4gbWlzc2VkIGJ5IGBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKWAuIFRoZSBjb25kaXRpb25zIGAhZm9saW9fdGVzdF9hY3RpdmVgLCBgIWZvbGlvX21hcHBlZGAsIGAhZm9saW9fdGVzdF9kaXJ0eWAsIGFuZCBgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrYCBzZWVtIHRvIGluZGljYXRlIHRoYXQgdGhlIGZvbGlvIGlzICppbmFjdGl2ZSosICp1bm1hcHBlZCosIGFuZCAqbm90KiBjdXJyZW50bHkgZGlydHkgb3IgdW5kZXJnb2luZyB3cml0ZWJhY2suIElmIGFsbCB0aG9zZSBjb25kaXRpb25zIGFyZSB0cnVlLCBpdCBtb3ZlcyB0aGUgZm9saW8gdG8gdGhlIGBjbGVhbmAgbGlzdC4gU2VlbXMgbGlrZSBhIGdvb2Qgc3RyYXRlZ3kgdG8gaGFuZGxlIHBvdGVudGlhbCBtaXNzZWQgcmVjbGFpbSBhdHRlbXB0cy4KCk5vdywgdGhhdCBgQ09ORklHX0xSVV9HRU5gIHNlY3Rpb24uICpIbW0qLCBsZXQmIzM5O3Mgc2VlLiBJdCByZWZlcmVuY2VzIGBscnV2ZWMtJmd0O2xydWdlbi5lbmFibGVkYC4uLiBhbmQgdGhlIGNvbXBhcmlzb24gYWdhaW5zdCBgbWluX3NlcVt0eXBlXWAuIFRoaXMgaW1wbGllcyBzb21lIGdlbmVyYXRpb24tYmFzZWQgTFJVIHNjaGVtZS4gSXQmIzM5O3Mgc2V0dGluZyB0aGUgZm9saW/igJlzIExSVSByZWZzIHRvIDAsIHdoaWNoIGNsZWFycyB0aGUgcmVmZXJlbmNlIGNvdW50LCBhbmQgdGhlbiBzZXRzIHRoZSBhY3RpdmUgYml0LiBUaGlzIG11c3QgcmVsYXRlIHRvIGhhbmRsaW5nIHJlamVjdGVkIGZvbGlvcyB3aXRoaW4gdGhlIGdlbmVyYXRpb24gbG9naWMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGZvbGxvdyB0aHJvdWdoLgoKSG9sZCBvbiwgbGV0IG1lIHF1aWNrbHkgY29uZmlybSB0aGF0IGBscnV2ZWMtJmd0O2xydWdlbi5lbmFibGVkYCDigJMgdGhhdCYjMzk7cyBjcnVjaWFsLiBJJiMzOTtsbCBzZWFyY2ggZm9yIHdoZXJlIHRoYXQmIzM5O3Mgc2V0IGFuZCB1c2VkLiBJJiMzOTtsbCBzZWFyY2ggdGhlIGNvZGUgZm9yIGBscnVnZW4uZW5hYmxlZGAgb3IgYGxydV9nZW5fZW5hYmxlZCgpYC4gVGhpcyBnZW5lcmF0aW9uLWJhc2VkIExSVSBsb2dpYyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZm9saW9zIGFyZSBiZWluZyBtYW5hZ2VkLiBJJiMzOTtsbCBkaWcgZGVlcGVyIHRvIHNlZSBpZiBJIGNhbiBmaW5kIGhvdyB0aGUgc2VxdWVuY2VzIHdvcmsuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2xydWdlblxcLmVuYWJsZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9NTUxNz1zdGF0aWMgdm9pZCBscnVfZ2VuX2NoYW5nZV9zdGF0ZShib29sIGVuYWJsZWQpXG4tLVxubW0vdm1zY2FuLmMtNTU0OS1cbm1tL3Ztc2Nhbi5jOjU1NTA6XHRcdFx0bHJ1dmVjLVx1MDAzZWxydWdlbi5lbmFibGVkID0gZW5hYmxlZDtcbm1tL3Ztc2Nhbi5jLTU1NTEtXG4tLVxubW0vdm1zY2FuLmM9NjEzNj1zdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbi0tXG5tbS92bXNjYW4uYy02MTU4LVx0XHQvKiBkb24mIzM5O3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbm1tL3Ztc2Nhbi5jOjYxNTk6XHRcdGlmIChscnV2ZWMtXHUwMDNlbHJ1Z2VuLmVuYWJsZWQgXHUwMDI2XHUwMDI2XG5tbS92bXNjYW4uYy02MTYwLVx0XHQgICAgbHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTM1MjcKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwbHkgZmFtaWxpYXIgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBhbmQgY2FjaGluZyBhbGdvcml0aG1zOgoKKipJbnZlc3RpZ2F0aW5nIGBscnVfZ2VuX2VuYWJsZWQoKWAqKgoKUmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBUaGUgY29kZSBpcyBsb29raW5nIGF0IGBscnVfZ2VuX2VuYWJsZWQoKWAuIE15IGZpcnN0IHRob3VnaHQgaXM6ICYjMzQ7V2h5IGFyZSB3ZSBjaGVja2luZyB0aGlzIHBhcnRpY3VsYXIgZnVuY3Rpb24/JiMzNDsgSXQgaW1wbGllcyB0aGF0IHRoZSBzeXN0ZW0gaXMgY29uc2lkZXJpbmcgdGhlIHN0YXRlIG9mIExlYXN0IFJlY2VudGx5IFVzZWQgKExSVSkgZ2VuZXJhdGlvbiBvciBzb21lIGZlYXR1cmUgcmVsYXRlZCB0byBMUlUgY2FjaGluZy4gVGhpcyBjb3VsZCBiZSBhbnl3aGVyZSBpbiB0aGUgc3lzdGVtOyBpdCBjb3VsZCBiZSBhIHNpbXBsZSBjaGVjayB0byBlbmFibGUgYSBwYXJ0aWN1bGFyIGNhY2hlIGluIHRoaXMgc2VjdGlvbiBvZiBjb2RlIG9yIHNvbWV0aGluZyBtb3JlIGludm9sdmVkLCBidXQgaXQgaXMgY2xlYXIgdGhhdCBMUlUgYmVoYXZpb3IgaXMgcmVsZXZhbnQgaW4gdGhlIGFyZWEgb2YgY29kZS4gCgpJIGltbWVkaWF0ZWx5IHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIElzIHRoaXMgYSBmZWF0dXJlIGZsYWc/IElzIGl0IGNvbnRyb2xsaW5nIHRoZSBhY3RpdmF0aW9uIG9mIGFuIExSVSBjYWNoZSBhbGdvcml0aG0gZm9yIHNvbWUgZGF0YSBzdHJ1Y3R1cmVzPyBJZiBzbywgd2hpY2ggb25lcz8gT3IgaXMgaXQgbW9yZSBmdW5kYW1lbnRhbDsgcGVyaGFwcyBgbHJ1X2dlbl9lbmFibGVkKClgIGlzIGJlaW5nIGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gdG8gZGVjaWRlIGlmIHdlIGV2ZW4gKnN1cHBvcnQqIExSVSBjYWNoaW5nIGF0IGFsbCBpbiB0aGlzIGN1cnJlbnQgZXhlY3V0aW9uIG9mIHRoZSBjb2RlLgoKSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGxhcmdlciBjb250ZXh0LiBXaGF0IGlzIHRoZSBnb2FsIG9mIHRoaXMgc2VjdGlvbiBvZiBjb2RlPyBXaGF0IGlzIGl0IHRyeWluZyB0byBhY2hpZXZlPyBJcyB0aGlzIGEgcGVyZm9ybWFuY2Ugb3B0aW1pemF0aW9uPyBJcyBpdCByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50LCBkaXNrIGNhY2hpbmcsIG9yIHNvbWUgb3RoZXIgYXJlYT8gSSBtdXN0IGludmVzdGlnYXRlIHdoYXQgKmVsc2UqIGlzIGluIHNjb3BlIHRvIGRldGVybWluZSB3aGF0IHNwZWNpZmljIGtpbmQgb2YgTFJVIGJlaGF2aW9yIGlzIGltcG9ydGFudCBoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtscnVfZ2VuX2VuYWJsZWQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZm9saW8uYz00MjY9dm9pZCBmb2xpb19tYXJrX2FjY2Vzc2VkKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy00MjktXHRcdHJldHVybjtcbm1tL2ZvbGlvLmM6NDMwOlx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XG5tbS9mb2xpby5jLTQzMS1cdFx0bHJ1X2dlbl9pbmNfcmVmcyhmb2xpbyk7XG4tLVxubW0vZm9saW8uYz00NzE9dm9pZCBmb2xpb19hZGRfbHJ1KHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy00ODMtXHQgKi9cbm1tL2ZvbGlvLmM6NDg0Olx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykgXHUwMDI2XHUwMDI2XG5tbS9mb2xpby5jLTQ4NS1cdCAgICBscnVfZ2VuX2luX2ZhdWx0KCkgXHUwMDI2XHUwMDI2ICEoY3VycmVudC1cdTAwM2VmbGFncyBcdTAwMjYgUEZfTUVNQUxMT0MpKSB7XG4tLVxubW0vZm9saW8uYz01MzU9c3RhdGljIHZvaWQgbHJ1X2RlYWN0aXZhdGVfZmlsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXG5tbS9mb2xpby5jLTUzNi17XG5tbS9mb2xpby5jOjUzNzpcdGJvb2wgYWN0aXZlID0gZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIHx8IGxydV9nZW5fZW5hYmxlZCgpO1xubW0vZm9saW8uYy01MzgtXHRsb25nIG5yX3BhZ2VzID0gZm9saW9fbnJfcGFnZXMoZm9saW8pO1xuLS1cbm1tL2ZvbGlvLmM9NTc2PXN0YXRpYyB2b2lkIGxydV9kZWFjdGl2YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTU3OS1cbm1tL2ZvbGlvLmM6NTgwOlx0aWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pIHx8ICEoZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIHx8IGxydV9nZW5fZW5hYmxlZCgpKSlcbm1tL2ZvbGlvLmMtNTgxLVx0XHRyZXR1cm47XG4tLVxubW0vZm9saW8uYz01OTI9c3RhdGljIHZvaWQgbHJ1X2xhenlmcmVlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcbi0tXG5tbS9mb2xpby5jLTYwMS1cdGZvbGlvX2NsZWFyX2FjdGl2ZShmb2xpbyk7XG5tbS9mb2xpby5jOjYwMjpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcbm1tL2ZvbGlvLmMtNjAzLVx0XHRscnVfZ2VuX2NsZWFyX3JlZnMoZm9saW8pO1xuLS1cbm1tL2ZvbGlvLmM9NjcwPXZvaWQgZGVhY3RpdmF0ZV9maWxlX2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy02NzUtXG5tbS9mb2xpby5jOjY3NjpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgbHJ1X2dlbl9jbGVhcl9yZWZzKGZvbGlvKSlcbm1tL2ZvbGlvLmMtNjc3LVx0XHRyZXR1cm47XG4tLVxubW0vZm9saW8uYz02OTA9dm9pZCBmb2xpb19kZWFjdGl2YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXG4tLVxubW0vZm9saW8uYy02OTQtXG5tbS9mb2xpby5jOjY5NTpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSA/IGxydV9nZW5fY2xlYXJfcmVmcyhmb2xpbykgOiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pKVxubW0vZm9saW8uYy02OTYtXHRcdHJldHVybjtcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjc4PXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTI4NS1yZXRyeTpcbm1tL21lbWNvbnRyb2wuYzoyODY6XHRcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcbm1tL21lbWNvbnRyb2wuYy0yODctXHRcdFx0bWF4X2xydV9nZW5fbWVtY2cocGFyZW50LCBuaWQpO1xuLS1cbm1tL21lbWNvbnRyb2wuYy0yOTAtXG5tbS9tZW1jb250cm9sLmM6MjkxOlx0XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpIHtcbm1tL21lbWNvbnRyb2wuYy0yOTItXHRcdFx0aWYgKCFyZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHBhcmVudCwgbmlkKSkge1xuLS1cbm1tL3JtYXAuYz05MjA9c3RhdGljIGJvb2wgZm9saW9fcmVmZXJlbmNlZF9vbmUoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS9ybWFwLmMtOTgzLVx0XHQgKi9cbm1tL3JtYXAuYzo5ODQ6XHRcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcdTAwMjZcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkgXHUwMDI2XHUwMDI2IHB2bXcucHRlKSB7XG5tbS9ybWFwLmMtOTg1LVx0XHRcdGlmIChscnVfZ2VuX2xvb2tfYXJvdW5kKFx1MDAyNnB2bXcsIG5yKSlcbi0tXG5tbS92bXNjYW4uYz0zNzA9c3RhdGljIGlubGluZSBib29sIHJlY2xhaW1hYmxlX2Fub25faXNfbG93KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS92bXNjYW4uYy0zODktXHQgKi9cbm1tL3Ztc2Nhbi5jOjM5MDpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcbm1tL3Ztc2Nhbi5jLTM5MS1cdFx0cmV0dXJuIGZhbHNlO1xuLS1cbm1tL3Ztc2Nhbi5jPTk0Nz1zdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcbi0tXG5tbS92bXNjYW4uYy05NzEtXG5tbS92bXNjYW4uYzo5NzI6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKSB7XG5tbS92bXNjYW4uYy05NzMtXHRcdGlmICghcmVmZXJlbmNlZF9wdGVzKVxuLS1cbm1tL3Ztc2Nhbi5jPTIzODM9c3RhdGljIHZvaWQgcHJlcGFyZV9zY2FuX2NvbnRyb2wocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4tLVxubW0vdm1zY2FuLmMtMjM4OS1cbm1tL3Ztc2Nhbi5jOjIzOTA6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxubW0vdm1zY2FuLmMtMjM5MS1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jPTU1MTc9c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxuLS1cbm1tL3Ztc2Nhbi5jLTU1MjctXG5tbS92bXNjYW4uYzo1NTI4Olx0aWYgKGVuYWJsZWQgPT0gbHJ1X2dlbl9lbmFibGVkKCkpXG5tbS92bXNjYW4uYy01NTI5LVx0XHRnb3RvIHVubG9jaztcbi0tXG5tbS92bXNjYW4uYz01NjE1PXN0YXRpYyBzc2l6ZV90IGVuYWJsZWRfc3RvcmUoc3RydWN0IGtvYmplY3QgKmtvYmosIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSAqYXR0cixcbi0tXG5tbS92bXNjYW4uYy01NjQxLVxubW0vdm1zY2FuLmM6NTY0MjpzdGF0aWMgc3RydWN0IGtvYmpfYXR0cmlidXRlIGxydV9nZW5fZW5hYmxlZF9hdHRyID0gX19BVFRSX1JXKGVuYWJsZWQpO1xubW0vdm1zY2FuLmMtNTY0My1cbm1tL3Ztc2Nhbi5jPTU2NDQ9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxydV9nZW5fYXR0cnNbXSA9IHtcbm1tL3Ztc2Nhbi5jLTU2NDUtXHRcdTAwMjZscnVfZ2VuX21pbl90dGxfYXR0ci5hdHRyLFxubW0vdm1zY2FuLmM6NTY0NjpcdFx1MDAyNmxydV9nZW5fZW5hYmxlZF9hdHRyLmF0dHIsXG5tbS92bXNjYW4uYy01NjQ3LVx0TlVMTFxuLS1cbm1tL3Ztc2Nhbi5jPTYwMzA9dm9pZCBscnVfZ2VuX2luaXRfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYylcbi0tXG5tbS92bXNjYW4uYy02MDM3LVx0bHJ1Z2VuLVx1MDAzZW1heF9zZXEgPSBNSU5fTlJfR0VOUyAmIzQzOyAxO1xubW0vdm1zY2FuLmM6NjAzODpcdGxydWdlbi1cdTAwM2VlbmFibGVkID0gbHJ1X2dlbl9lbmFibGVkKCk7XG5tbS92bXNjYW4uYy02MDM5LVxuLS1cbm1tL3Ztc2Nhbi5jPTYxNjg9c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTYxNzgtXG5tbS92bXNjYW4uYzo2MTc5Olx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgIXJvb3RfcmVjbGFpbShzYykpIHtcbm1tL3Ztc2Nhbi5jLTYxODAtXHRcdGxydV9nZW5fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbi0tXG5tbS92bXNjYW4uYz02NDM4PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTY0NDMtXG5tbS92bXNjYW4uYzo2NDQ0Olx0aWYgKChscnVfZ2VuX2VuYWJsZWQoKSB8fCBscnVfZ2VuX3N3aXRjaGluZygpKSBcdTAwMjZcdTAwMjYgcm9vdF9yZWNsYWltKHNjKSkge1xubW0vdm1zY2FuLmMtNjQ0NS1cdFx0bWVtc2V0KFx1MDAyNnNjLVx1MDAzZW5yLCAwLCBzaXplb2Yoc2MtXHUwMDNlbnIpKTtcbi0tXG5tbS92bXNjYW4uYz02Njk1PXN0YXRpYyB2b2lkIHNuYXBzaG90X3JlZmF1bHRzKHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNjY5OS1cbm1tL3Ztc2Nhbi5jOjY3MDA6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXHUwMDI2XHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKVxubW0vdm1zY2FuLmMtNjcwMS1cdFx0cmV0dXJuO1xuLS1cbm1tL3Ztc2Nhbi5jPTcwNDQ9c3RhdGljIHZvaWQga3N3YXBkX2FnZV9ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3Ztc2Nhbi5jLTcwNDgtXG5tbS92bXNjYW4uYzo3MDQ5Olx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIHtcbm1tL3Ztc2Nhbi5jLTcwNTAtXHRcdGxydV9nZW5fYWdlX25vZGUocGdkYXQsIHNjKTtcbi0tXG5tbS93b3JraW5nc2V0LmM9MzkyPXZvaWQgKndvcmtpbmdzZXRfZXZpY3Rpb24oc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZylcbi0tXG5tbS93b3JraW5nc2V0LmMtNDA0LVxubW0vd29ya2luZ3NldC5jOjQwNTpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcbm1tL3dvcmtpbmdzZXQuYy00MDYtXHRcdHJldHVybiBscnVfZ2VuX2V2aWN0aW9uKGZvbGlvKTtcbi0tXG5tbS93b3JraW5nc2V0LmM9NDMwPWJvb2wgd29ya2luZ3NldF90ZXN0X3JlY2VudCh2b2lkICpzaGFkb3csIGJvb2wgZmlsZSwgYm9vbCAqd29ya2luZ3NldCxcbi0tXG5tbS93b3JraW5nc2V0LmMtNDQxLVxubW0vd29ya2luZ3NldC5jOjQ0MjpcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSkge1xubW0vd29ya2luZ3NldC5jLTQ0My1cdFx0Ym9vbCByZWNlbnQ7XG4tLVxubW0vd29ya2luZ3NldC5jPTU0OD12b2lkIHdvcmtpbmdzZXRfcmVmYXVsdChzdHJ1Y3QgZm9saW8gKmZvbGlvLCB2b2lkICpzaGFkb3cpXG4tLVxubW0vd29ya2luZ3NldC5jLTU1Ny1cbm1tL3dvcmtpbmdzZXQuYzo1NTg6XHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpIHtcbm1tL3dvcmtpbmdzZXQuYy01NTktXHRcdGxydV9nZW5fcmVmYXVsdChmb2xpbywgc2hhZG93KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTYyNzYKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNDE0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBQb3RlbnRpYWwgSXNzdWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEkmIzM5O20gbG9va2luZyBhdCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIHdpdGhpbiB0aGUgY29udGV4dCBvZiBgQ09ORklHX0xSVV9HRU5gLiBUaGUgY29kZSBpbml0aWFsbHkgY2hlY2tzIGlmIGBscnV2ZWMtJmd0O2xydWdlbi5lbmFibGVkYCBpcyBmYWxzZSwgYW5kIHNraXBzIGEgYmxvY2sgaWYgaXQmIzM5O3MgdHJ1ZS4gTm93IEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIG1haW4gbG9vcCBvZiB0aGUgZnVuY3Rpb24uCgpUaGUgdmFyaWFibGVzIEkmIzM5O20gcHJpbWFyaWx5IGNvbmNlcm5lZCB3aXRoIGhlcmUgYXJlIGBucl9zY2FubmVkYCwgYG5yX3JlY2xhaW1lZGAsIGB0b3RhbF9yZWNsYWltZWRgLCBgbnJfdGFrZW5gLCBgY2xlYW5fbGlzdGAsIGBza2lwX3JldHJ5YCwgYGlzb2xhdGVkYCBhbmQgYHN0YXRgLiBgbnJfc2Nhbm5lZGAgYW5kIGBucl90YWtlbmAgYXJlIGdldHRpbmcgdmFsdWVzIHJldHVybmVkIGZyb20gYGlzb2xhdGVfbHJ1X2ZvbGlvc2AuIGBucl9yZWNsYWltZWRgIGlzIHRoZSByZXR1cm4gdmFsdWUgb2YgYHNocmlua19mb2xpb19saXN0YC4gSSBjYW4gc2VlIHRoYXQgYHRvdGFsX3JlY2xhaW1lZGAgaXMgYmVpbmcgaW5pdGlhbGl6ZWQgdG8gemVybyBhbmQgYWNjdW11bGF0aW5nIGBucl9yZWNsYWltZWRgLiBUaGUgYHN0YXRgIHN0cnVjdHVyZSBpcyBnZXR0aW5nIHByb3Blcmx5IHplcm9lZCBpbnNpZGUgYHNocmlua19mb2xpb19saXN0YCwgd2hpY2ggaXMgZ29vZC4gVGhlIG90aGVyIHZhcmlhYmxlcyBhcmUgYWxzbyBpbml0aWFsaXplZC4gSXQgbG9va3MgbGlrZSBgaXNvbGF0ZWRgIGlzIGluaXRpYWxpemVkIHdpdGggYG5yX3Rha2VuYC4gYHNraXBfcmV0cnlgIGlzIGZhbHNlIGF0IHRoZSBzdGFydCBvZiB0aGUgZnVuY3Rpb24gYW5kIGlzIHNldCB0byB0cnVlIHdoZW4gdGhlIGBjbGVhbl9saXN0YCBpcyBub3QgZW1wdHkuCgpUaGUgYHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlYCBjYWxsIGxvb2tzIG9rYXksIGl0IHBhc3NlcyBhbGwgdGhlIGV4cGVjdGVkIHBhcmFtZXRlcnMgbGlrZSBgcGdkYXQtJmd0O25vZGVfaWRgLCBgbnJfc2Nhbm5lZGAsIGBucl9yZWNsYWltZWRgLCBhbmQgdGhlIGBzdGF0YCBzdHJ1Y3QuCgpOb3csIGxldCYjMzk7cyBnZXQgdG8gdGhlIG1lYXQgb2YgdGhlIGZ1bmN0aW9uLiBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYCBmdW5jdGlvbiB0aGF0JiMzOTtzIGNhbGxlZCBoZXJlLCBlc3BlY2lhbGx5IHRoZSBoYW5kbGluZyBvZiB0aGUgYGNsZWFuX2xpc3RgLiBUaGF0IGBsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmVfcmV2ZXJzZWAgbG9vcCBzZWVtcyBsaWtlIHRoZSBjb3JlIGxvZ2ljLCB3aGljaCBjdWxscyB0aGUgdW5ldmljdGFibGUgZm9saW9zLiBXaGF0JiMzOTtzIGNhdGNoaW5nIG15IGV5ZSBpcyB0aGF0IGBza2lwX3JldHJ5YCBmbGFnIGFuZCB0aGUgY29uZGl0aW9uYWwgY2hlY2sgaW5zaWRlIHRoZSBsb29wLgoKTXkgY29uY2VybiBpcyB0aGF0IGBza2lwX3JldHJ5YCBzdGFydHMgb3V0IGFzIGZhbHNlLiBUaGUgZm9saW9zIGluIHRoZSBsaXN0IGFyZSBiZWluZyBjaGVja2VkIGZvciBzcGVjaWZpYyBjb25kaXRpb25zIChgIWZvbGlvX3Rlc3RfYWN0aXZlYCwgYCFmb2xpb19tYXBwZWRgLCBgIWZvbGlvX3Rlc3RfZGlydHlgLCBhbmQgYCFmb2xpb190ZXN0X3dyaXRlYmFja2ApLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGVmZmVjdCBvZiBgc2tpcF9yZXRyeWAsIGlmIGl0IGdldHMgc2V0IHRvIHRydWUsIGJlY2F1c2UgaXQgbWVhbnMgdGhhdCBpdCBoYXMgYWxyZWFkeSBpc29sYXRlZCBhbmQgYWNjb3VudGVkIGFib3ZlLiBJZiBhbGwgb2YgdGhlc2UgdGVzdHMgcGFzcywgdGhlIGZvbGlvIGlzIG1vdmVkIHRvIGBjbGVhbl9saXN0YCwgd2hpY2ggaXMgdGhlbiBzcGxpY2VkIGJhY2sgdG8gYGZvbGlvX2xpc3RgIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AsIGFuZCB0aGUgZnVuY3Rpb24gZ29lcyB0byB0aGUgYHJldHJ5YCBsYWJlbC4KCkFuZCBub3cgSSYjMzk7dmUgaGl0IHRoZSByZWFsIGlzc3VlOiBgREVGSU5FX01JTl9TRVEobHJ1dmVjKTtgIGluc2lkZSBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYC4gVGhpcyBpcyB0aGUgdGhpbmcgSSBuZWVkIHRvIGludmVzdGlnYXRlIGluIG1vcmUgZGV0YWlsLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBERUZJTkVfTUlOX1NFUWAgaXMgYW5kIHdoYXQgaXQgbWVhbnMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIExSVSBnZW5lcmF0aW9uIGNvZGUuIFRoaXMgaXMgYSBwb3RlbnRpYWwgcG9pbnQgZm9yIGludGVyYWN0aW9uLCBzbyB0aGlzIGlzIHdoZXJlIEkgbmVlZCB0byBkaWcgZGVlcGVyLiBUaGlzIGxvb2tzIHJlbGF0ZWQgdG8gdGhlIGdlbmVyYXRpb24gb2YgdGhlIExSVSwgYnV0IGl0cyBleGFjdCBtZWNoYW5pY3MgbmVlZCBjbGFyaWZpY2F0aW9uLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBtYWNybyB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QgYW5kIGl0cyBpbXBsaWNhdGlvbnMgb24gdGhlIGZvbGlvIHN0YXRlcyBhbmQgaG93IHRoZXkmIzM5O3JlIGhhbmRsZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0RFRklORV9NSU5fU0VRJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTI4MTE9c3RhdGljIGJvb2wgc2hvdWxkX2NsZWFyX3BtZF95b3VuZyh2b2lkKVxuLS1cbm1tL3Ztc2Nhbi5jLTI4MjItXG5tbS92bXNjYW4uYzoyODIzOiNkZWZpbmUgREVGSU5FX01JTl9TRVEobHJ1dmVjKVx0XHRcdFx0XHRcdFxcXG5tbS92bXNjYW4uYy0yODI0LVx0dW5zaWduZWQgbG9uZyBtaW5fc2VxW0FOT05fQU5EX0ZJTEVdID0ge1x0XHRcdFxcXG4tLVxubW0vdm1zY2FuLmM9NDExND1zdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy00MTE4LVx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFx1MDAyNmxydXZlYy1cdTAwM2VscnVnZW47XG5tbS92bXNjYW4uYzo0MTE5Olx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTQxMjAtXG4tLVxubW0vdm1zY2FuLmM9NDMxNT1zdGF0aWMgdW5zaWduZWQgbG9uZyBscnV2ZWNfZXZpY3RhYmxlX3NpemUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcbi0tXG5tbS92bXNjYW4uYy00MzIwLVx0REVGSU5FX01BWF9TRVEobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jOjQzMjE6XHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xubW0vdm1zY2FuLmMtNDMyMi1cbi0tXG5tbS92bXNjYW4uYz00MzQ2PXN0YXRpYyBib29sIGxydXZlY19pc19yZWNsYWltYWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuLS1cbm1tL3Ztc2Nhbi5jLTQzNTItXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jOjQzNTM6XHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xubW0vdm1zY2FuLmMtNDM1NC1cbi0tXG5tbS92bXNjYW4uYz01MTE0PXN0YXRpYyBib29sIHNob3VsZF9ydW5fYWdpbmcoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIG1heF9zZXEsXG4tLVxubW0vdm1zY2FuLmMtNTExNi17XG5tbS92bXNjYW4uYzo1MTE3Olx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcbm1tL3Ztc2Nhbi5jLTUxMTgtXG4tLVxubW0vdm1zY2FuLmM9NTc2ND1zdGF0aWMgaW50IGxydV9nZW5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbm1tL3Ztc2Nhbi5jLTU3NzItXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xubW0vdm1zY2FuLmM6NTc3MzpcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG5tbS92bXNjYW4uYy01Nzc0LVxuLS1cbm1tL3Ztc2Nhbi5jPTU4Mzg9c3RhdGljIGludCBydW5fZXZpY3Rpb24oc3RydWN0IGxydXZlYyAqbHJ1dmVjLCB1bnNpZ25lZCBsb25nIHNlcSwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtNTg0OS1cdHdoaWxlICghc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpIHtcbm1tL3Ztc2Nhbi5jOjU4NTA6XHRcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG5tbS92bXNjYW4uYy01ODUxLVxuLS1cbm1tL3Ztc2Nhbi5jPTYxMzY9c3RhdGljIHZvaWQgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4tLVxubW0vdm1zY2FuLmMtNjE0NC0jaWZkZWYgQ09ORklHX0xSVV9HRU5cbm1tL3Ztc2Nhbi5jOjYxNDU6XHRcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XG5tbS92bXNjYW4uYy02MTQ2LSNlbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMyAxMDoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTI1MgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYERFRklORV9NSU5fU0VRKGxydXZlYylgIGluIGB2bXNjYW4uY2AqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG1tL3Ztc2Nhbi5jYCBhbmQgbmVlZCBhIHJlZnJlc2hlciBvbiB0aGUgZGVmaW5pdGlvbiBvZiBgREVGSU5FX01JTl9TRVEobHJ1dmVjKWAuIExpbmUgMjgyMywgaHVoPyBUaW1lIHRvIGp1bXAgb3ZlciB0aGVyZSBhbmQgc2VlIHdoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gS25vd2luZyB0aGUgY29udGV4dCBvZiBgdm1zY2FuLmNgLCBJJiMzOTttIGV4cGVjdGluZyB0aGlzIG1hY3JvIGlzIGxpa2VseSByZWxhdGVkIHRvIG1hbmFnaW5nIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIChMUlUpIGxpc3RzIGFuZCBtZW1vcnkgcmVjbGFpbSwgcGVyaGFwcyBkZWZpbmluZyBhIHN0cnVjdHVyZSBvciBzb21lIHNvcnQgb2YgZGF0YSBzdHJ1Y3R1cmUgcmVsYXRlZCB0byBtaW5pbXVtIHNlcXVlbmNlIG51bWJlcnMgZm9yIExSVSB2ZWN0b3JzLiBJIHdvbmRlciBpZiBpdCYjMzk7cyBhIGNvbXBpbGUtdGltZSBvcHRpbWl6YXRpb24gb3IgYSBydW50aW1lIHZhcmlhYmxlLiBJJiMzOTtsbCB0YWtlIGEgbG9vayBhdCB0aGUgY29kZSBhbmQgZGV0ZXJtaW5lIGl0cyBzcGVjaWZpYyB1c2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyODIwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI4MjA6XHQjZGVmaW5lIERFRklORV9NQVhfU0VRKGxydXZlYylcdFx0XHRcdFx0XHRcXFxuMjgyMTpcdFx0dW5zaWduZWQgbG9uZyBtYXhfc2VxID0gUkVBRF9PTkNFKChscnV2ZWMpLVx1MDAzZWxydWdlbi5tYXhfc2VxKVxuMjgyMjpcdFxuMjgyMzpcdCNkZWZpbmUgREVGSU5FX01JTl9TRVEobHJ1dmVjKVx0XHRcdFx0XHRcdFxcXG4yODI0Olx0XHR1bnNpZ25lZCBsb25nIG1pbl9zZXFbQU5PTl9BTkRfRklMRV0gPSB7XHRcdFx0XFxcbjI4MjU6XHRcdFx0UkVBRF9PTkNFKChscnV2ZWMpLVx1MDAzZWxydWdlbi5taW5fc2VxW0xSVV9HRU5fQU5PTl0pLFx0XFxcbjI4MjY6XHRcdFx0UkVBRF9PTkNFKChscnV2ZWMpLVx1MDAzZWxydWdlbi5taW5fc2VxW0xSVV9HRU5fRklMRV0pLFx0XFxcbjI4Mjc6XHRcdH1cbjI4Mjg6XHRcbjI4Mjk6XHQvKiBHZXQgdGhlIG1pbi9tYXggZXZpY3RhYmxlIHR5cGUgYmFzZWQgb24gc3dhcHBpbmVzcyAqL1xuMjgzMDpcdCNkZWZpbmUgbWluX3R5cGUoc3dhcHBpbmVzcykgKCEoc3dhcHBpbmVzcykpXG4yODMxOlx0I2RlZmluZSBtYXhfdHlwZShzd2FwcGluZXNzKSAoKHN3YXBwaW5lc3MpIFx1MDAzYyBTV0FQUElORVNTX0FOT05fT05MWSlcbjI4MzI6XHRcbjI4MzM6XHQjZGVmaW5lIGV2aWN0YWJsZV9taW5fc2VxKG1pbl9zZXEsIHN3YXBwaW5lc3MpXHRcdFx0XHRcXFxuMjgzNDpcdFx0bWluKChtaW5fc2VxKVttaW5fdHlwZShzd2FwcGluZXNzKV0sIChtaW5fc2VxKVttYXhfdHlwZShzd2FwcGluZXNzKV0pXG4yODM1Olx0XG4yODM2Olx0I2RlZmluZSBmb3JfZWFjaF9nZW5fdHlwZV96b25lKGdlbiwgdHlwZSwgem9uZSlcdFx0XHRcdFxcXG4yODM3Olx0XHRmb3IgKChnZW4pID0gMDsgKGdlbikgXHUwMDNjIE1BWF9OUl9HRU5TOyAoZ2VuKSYjNDM7JiM0MzspXHRcdFx0XFxcbjI4Mzg6XHRcdFx0Zm9yICgodHlwZSkgPSAwOyAodHlwZSkgXHUwMDNjIEFOT05fQU5EX0ZJTEU7ICh0eXBlKSYjNDM7JiM0MzspXHRcXFxuMjgzOTpcdFx0XHRcdGZvciAoKHpvbmUpID0gMDsgKHpvbmUpIFx1MDAzYyBNQVhfTlJfWk9ORVM7ICh6b25lKSYjNDM7JiM0MzspXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDcvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEzIDEwOjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE5OTc1CgkJCQkJCQlvdXRwdXQ6IDE5MwoJCQkJCQkJdGhvdWdodHM6IDE3OTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gQXNzZXNzbWVudCBvZiBNR0xSVSBFdmljdGlvbiBMb2dpYyBSZWZhY3RvcioqCgpPa2F5LCBzbyBJJiMzOTt2ZSBiZWVuIGRpc3NlY3RpbmcgdGhpcyBwYXRjaCBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgS01TQU4uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGZvY3VzZWQgb24gdGhlIGNvZGUgY2hhbmdlcyBhbmQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBGaXJzdCwgdGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZm9saW8gZXZpY3Rpb24gbG9vcCwgbW92aW5nIGl0IGZyb20gYGV2aWN0X2ZvbGlvc2AgKE1HTFJVLXNwZWNpZmljKSB0byB0aGUgc2hhcmVkIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgIGZ1bmN0aW9uIHVzZWQgYnkgYm90aCBNR0xSVSBhbmQgdGhlIHRyYWRpdGlvbmFsIExSVS4gVGhlIG1ham9yIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhhdCBsb29wIGlzIHRoZSBjb25kaXRpb25hbCBhZGRpdGlvbiBvZiBgbHJ1dmVjLSZndDtscnVnZW4uZW5hYmxlZCAmYW1wOyZhbXA7YCB0byBhIGNoZWNrIHJlbGF0ZWQgdG8gZ2VuZXJhdGlvbi1iYXNlZCBMUlUgbG9naWMuIENydWNpYWxseSwgdGhlIGNvZGUgbm93IGFsc28gcmV0cmllcyBjbGVhbmluZyBmb2xpb3MuCgpNeSBuZXh0IHN0ZXAgaW52b2x2ZWQgcmlnb3JvdXNseSBleGFtaW5pbmcgZWFjaCBvZiB0aGUgS01TQU4gY3JpdGVyaWEgdG8gZGV0ZXJtaW5lIGlmIGBOZWVkc0tNU0FOPXRydWVgIGlzIHdhcnJhbnRlZC4gTGV0JiMzOTtzIHNlZS4uLgoKMS4gICoqS2VybmVsIHN0cnVjdHVyZXMgdG8gdXNlcnNwYWNlPyoqIE5vcGUuIFRoaXMgaXMgYWxsIGludGVybmFsIG1lbW9yeSBtYW5hZ2VtZW50LCBkZWVwIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBObyBkYXRhIGlzIGJlaW5nIGV4cGxpY2l0bHkgY29waWVkIHRvIHVzZXIgc3BhY2UuIFRoaXMgaXMgZW50aXJlbHkgaW50ZXJuYWwgZm9saW8vcGFnZSByZWNsYWltIGxvZ2ljLgoyLiAgKipDb25kaXRpb25hbCBsb2dpYyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIGRhdGE/KiogT2theSwgZGlnZ2luZyBpbnRvIHRoZSB2YXJpYWJsZXMgd2l0aGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgYW5kIHRoZSBuZXcgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2A6IEkgdmVyaWZpZWQgZXZlcnl0aGluZy4gVGhlIGxpc3RzIChgZm9saW9fbGlzdGAsIGBjbGVhbl9saXN0YCkgYXJlIGFsbCBpbml0aWFsaXplZCB1c2luZyBtYWNyb3MuIFZhcmlhYmxlcyBsaWtlIGBucl9yZWNsYWltZWRgLCBgdG90YWxfcmVjbGFpbWVkYCwgYG5yX3Rha2VuYCwgYGlzb2xhdGVkYCwgYW5kIGBzdGF0YCBhcmUgcHJvcGVybHkgYXNzaWduZWQgYmVmb3JlIHVzZS4gUGFydGljdWxhcmx5IGltcG9ydGFudCwgYHN0YXRgIGlzIGJlaW5nIGV4cGxpY2l0bHkgYG1lbXNldGAmIzM5O2QgYnkgYHNocmlua19mb2xpb19saXN0KClgLiBgc2tpcF9yZXRyeWAgaXMgc2V0IHRvIGBmYWxzZWAuIEluc2lkZSBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYCwgSSBjaGVja2VkIHRoZSBgREVGSU5FX01JTl9TRVFgIGFuZCBhbGwgdGhlIGBmb2xpb18qYCBmbGFnIHRlc3RzOyBub3RoaW5nIGlzIHVzZWQgdW5pbml0aWFsaXplZC4gVGhlIGNvbmRpdGlvbmFsIG9uIGBjbGVhbl9saXN0YCBsb29rcyBjb3JyZWN0LgozLiAgKipDb21wbGV4IGRhdGEgc3RydWN0dXJlIGluaXRpYWxpemF0aW9uIHdpdGggcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyoqIE5vLiBFdmVyeXRoaW5nIHNlZW1zIHRvIGJlIGluaXRpYWxpemVkIGFzIGl0JiMzOTtzIGFsbG9jYXRlZC4KNC4gICoqQm91bmRzIGNoZWNrcyBleHBvc2luZyB1bmluaXRpYWxpemVkIGRhdGE/KiogTm90aGluZyBsaWtlIHRoYXQgaGVyZS4KCk15IGNvbmNsdXNpb24gaXMgY2xlYXIuIFRoaXMgcGF0Y2ggaW50cm9kdWNlcyBubyBuZXcgcmlza3Mgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIFRoZXJlIGFyZSBubyBkaXJlY3QgdXNlci1zcGFjZSBjb3BpZXMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlcy4gVGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgc2xhYi9oZWFwIG9iamVjdHMuIFRoaXMgaXMgcHVyZWx5IG1lbW9yeSBtYW5hZ2VtZW50IGludGVybmFsIHJlY2xhaW0gbG9naWMuIFBvdGVudGlhbCBidWdzIHdvdWxkIG1hbmlmZXN0IGFzIExSVSBsaXN0IGNvcnJ1cHRpb24sIGFjY291bnRpbmcgaW1iYWxhbmNlcywgaW5maW5pdGUgbG9vcHMsIG9yIHBhZ2UgcmVmZXJlbmNlL3N0YXRlIGhhbmRsaW5nIGJ1Z3Mg4oCTIGlzc3VlcyBkZXRlY3RhYmxlIGJ5IGtlcm5lbCBhc3NlcnRpb25zLCBsb2NrZGVwLCBvciBLQVNBTiwgYnV0IG5vdCBLTVNBTi4KClRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCByZW1haW4gYGZhbHNlYC4gTGV0JiMzOTtzIHBlcmZvcm0gYSBmaW5hbCByZXZpZXcgYW5kIHByZXBhcmUgdGhlIHRvb2wgY2FsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTMgMTA6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGZvbGlvIHdyaXRlYmFjayByZXRyeSBsb2dpYyBpbiB0aGUgcGFnZSByZWNsYWltIHBhdGggKG1tL3Ztc2Nhbi5jKSBieSBleHRyYWN0aW5nIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpIGZyb20gZXZpY3RfZm9saW9zKCkgYW5kIHVzaW5nIGl0IHRvIHJldHJ5IGNsZWFuIGZvbGlvcyBpbiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpLiBBbGwgbmV3IGFuZCBtb2RpZmllZCBsb2NhbCB2YXJpYWJsZXMgKGNsZWFuX2xpc3QsIHRvdGFsX3JlY2xhaW1lZCwgaXNvbGF0ZWQsIHNraXBfcmV0cnkpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIHRoZSByZWNsYWltX3N0YXQgc3RydWN0dXJlIGlzIG1lbXNldCB0byB6ZXJvIGluc2lkZSBzaHJpbmtfZm9saW9fbGlzdCgpIG9uIGVhY2ggaXRlcmF0aW9uLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3Nlcy4gQW55IHBvdGVudGlhbCByZWNsYWltIGlzc3VlcyAoZS5nLiBsaXN0IGNvcnJ1cHRpb24sIHJlZmNvdW50IG9yIHBhZ2UgZmxhZyBidWdzKSB3b3VsZCBiZSBjYXVnaHQgYnkgYXNzZXJ0aW9ucyBvciBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggcmVmYWN0b3JzIGZvbGlvIHdyaXRlYmFjayByZXRyeSBsb2dpYyBpbiB0aGUgcGFnZSByZWNsYWltIHBhdGggKG1tL3Ztc2Nhbi5jKSBieSBleHRyYWN0aW5nIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpIGZyb20gZXZpY3RfZm9saW9zKCkgYW5kIHVzaW5nIGl0IHRvIHJldHJ5IGNsZWFuIGZvbGlvcyBpbiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpLiBBbGwgbmV3IGFuZCBtb2RpZmllZCBsb2NhbCB2YXJpYWJsZXMgKGNsZWFuX2xpc3QsIHRvdGFsX3JlY2xhaW1lZCwgaXNvbGF0ZWQsIHNraXBfcmV0cnkpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIHRoZSByZWNsYWltX3N0YXQgc3RydWN0dXJlIGlzIG1lbXNldCB0byB6ZXJvIGluc2lkZSBzaHJpbmtfZm9saW9fbGlzdCgpIG9uIGVhY2ggaXRlcmF0aW9uLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3Nlcy4gQW55IHBvdGVudGlhbCByZWNsYWltIGlzc3VlcyAoZS5nLiBsaXN0IGNvcnJ1cHRpb24sIHJlZmNvdW50IG9yIHBhZ2UgZmxhZyBidWdzKSB3b3VsZCBiZSBjYXVnaHQgYnkgYXNzZXJ0aW9ucyBvciBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMTowNC44NTMyMTUxODFaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTU3MzYxMDI1NzMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNocmlua19pbmFjdGl2ZV9saXN0XCIsXG4gICAgXCJldmljdF9mb2xpb3NcIixcbiAgICBcImZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGZvbGlvIHdyaXRlYmFjayByZXRyeSBsb2dpYyBpbiB0aGUgcGFnZSByZWNsYWltIHBhdGggKG1tL3Ztc2Nhbi5jKSBieSBleHRyYWN0aW5nIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpIGZyb20gZXZpY3RfZm9saW9zKCkgYW5kIHVzaW5nIGl0IHRvIHJldHJ5IGNsZWFuIGZvbGlvcyBpbiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpLiBBbGwgbmV3IGFuZCBtb2RpZmllZCBsb2NhbCB2YXJpYWJsZXMgKGNsZWFuX2xpc3QsIHRvdGFsX3JlY2xhaW1lZCwgaXNvbGF0ZWQsIHNraXBfcmV0cnkpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIHRoZSByZWNsYWltX3N0YXQgc3RydWN0dXJlIGlzIG1lbXNldCB0byB6ZXJvIGluc2lkZSBzaHJpbmtfZm9saW9fbGlzdCgpIG9uIGVhY2ggaXRlcmF0aW9uLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3Nlcy4gQW55IHBvdGVudGlhbCByZWNsYWltIGlzc3VlcyAoZS5nLiBsaXN0IGNvcnJ1cHRpb24sIHJlZmNvdW50IG9yIHBhZ2UgZmxhZyBidWdzKSB3b3VsZCBiZSBjYXVnaHQgYnkgYXNzZXJ0aW9ucyBvciBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBtbS92bXNjYW4uYyBieSByZWZhY3RvcmluZyBmb2xpbyB3cml0ZWJhY2sgZGV0ZWN0aW9uIGludG8gYSBzaGFyZWQgaGVscGVyIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soKWAsIHVwZGF0aW5nIGBldmljdF9mb2xpb3MoKWAgKE11bHRpLUdlbiBMUlUpLCBhbmQgaW50cm9kdWNpbmcgYSByZXRyeSBtZWNoYW5pc20gZm9yIHdyaXR0ZW4tYmFjayBmb2xpb3MgaW4gYHNocmlua19pbmFjdGl2ZV9saXN0KClgIGFsb25nIHdpdGggdXBkYXRlZCBpc29sYXRpb24gYWNjb3VudGluZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSwgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aHMgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjE6MDQuODUzMjIwNDkxWiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDU4OTU4NzA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgMjIyZTYxODI0YmEzZjQ5NzAxMGViNDExOGFiZWE3NjNlNDdkMGQ4NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIFNlcCAxMyAxMDoyMTowMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXFxuaW5kZXggNTM1NGViOGQzYTA3Yi4uODBjY2Q1MTZlZjM4MCAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTE4MSw2ICsxODEsMTAgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7XFxuIFxcdHN0cnVjdCByZWNsYWltX3N0YXRlIHJlY2xhaW1fc3RhdGU7XFxuIH07XFxuIFxcbitzdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpjbGVhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbitcXHRcXHRcXHRcXHQgICAgIGludCB0eXBlLCBib29sIHNraXBfcmV0cnkpO1xcbitcXG4gI2lmZGVmIEFSQ0hfSEFTX1BSRUZFVENIV1xcbiBzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXFxuIFxcdFxcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXFxuQEAgLTIwNjUsMTQgKzIwNjksMTYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbiBcXHRcXHRlbnVtIGxydV9saXN0IGxydSlcXG4ge1xcbiBcXHRMSVNUX0hFQUQoZm9saW9fbGlzdCk7XFxuK1xcdExJU1RfSEVBRChjbGVhbl9saXN0KTtcXG4gXFx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkO1xcbi1cXHR1bnNpZ25lZCBpbnQgbnJfcmVjbGFpbWVkID0gMDtcXG4tXFx0dW5zaWduZWQgbG9uZyBucl90YWtlbjtcXG4rXFx0dW5zaWduZWQgaW50IG5yX3JlY2xhaW1lZCwgdG90YWxfcmVjbGFpbWVkID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBucl90YWtlbiwgaXNvbGF0ZWQ7XFxuIFxcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcXG4gXFx0Ym9vbCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTtcXG4gXFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtO1xcbiBcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XFxuIFxcdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xcbitcXHRib29sIHNraXBfcmV0cnkgPSBmYWxzZTtcXG4gXFxuIFxcdHdoaWxlICh1bmxpa2VseSh0b29fbWFueV9pc29sYXRlZChwZ2RhdCwgZmlsZSwgc2MpKSkge1xcbiBcXHRcXHRpZiAoc3RhbGxlZClcXG5AQCAtMjEwNCwyNSArMjExMCw0MiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuIFxcdGlmIChucl90YWtlbiA9PSAwKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuK1xcdGlzb2xhdGVkID0gbnJfdGFrZW47XFxuK3JldHJ5OlxcbiBcXHRucl9yZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChcXHUwMDI2Zm9saW9fbGlzdCwgcGdkYXQsIHNjLCBcXHUwMDI2c3RhdCwgZmFsc2UsXFxuIFxcdFxcdFxcdFxcdFxcdCBscnV2ZWNfbWVtY2cobHJ1dmVjKSk7XFxuK1xcdHRvdGFsX3JlY2xhaW1lZCArPSBucl9yZWNsYWltZWQ7XFxuK1xcbitcXHQvKiBSZXRyeSBwYXNzIGlzIG9ubHkgbWVhbnQgZm9yIGNsZWFuIGZvbGlvcyB3aXRob3V0IG5ldyBpc29sYXRpb24gKi9cXG4rXFx0aWYgKGlzb2xhdGVkKVxcbitcXHRcXHRoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2soaXNvbGF0ZWQsIHBnZGF0LCBzYywgXFx1MDAyNnN0YXQpO1xcbitcXHR0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19pbmFjdGl2ZShwZ2RhdC1cXHUwMDNlbm9kZV9pZCxcXG4rXFx0XFx0XFx0bnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCBcXHUwMDI2c3RhdCwgc2MtXFx1MDAzZXByaW9yaXR5LCBmaWxlKTtcXG4rXFxuK1xcdGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhcXHUwMDI2Zm9saW9fbGlzdCwgXFx1MDAyNmNsZWFuX2xpc3QsIGxydXZlYywgZmlsZSwgc2tpcF9yZXRyeSk7XFxuIFxcbiBcXHRtb3ZlX2ZvbGlvc190b19scnUoXFx1MDAyNmZvbGlvX2xpc3QpO1xcbiBcXG4gXFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHREVNT1RFX0tTV0FQRCArIHJlY2xhaW1lcl9vZmZzZXQoc2MpLFxcbiBcXHRcXHRcXHRcXHRcXHRzdGF0Lm5yX2RlbW90ZWQpO1xcbi1cXHRtb2Rfbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9JU09MQVRFRF9BTk9OICsgZmlsZSwgLW5yX3Rha2VuKTtcXG4gXFx0aXRlbSA9IFBHU1RFQUxfS1NXQVBEICsgcmVjbGFpbWVyX29mZnNldChzYyk7XFxuIFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCBucl9yZWNsYWltZWQpO1xcbiBcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICsgZmlsZSwgbnJfcmVjbGFpbWVkKTtcXG4tXFx0aWYgKG5yX3NjYW5uZWQgXFx1MDAzZSBucl9yZWNsYWltZWQpXFxuK1xcbitcXHRpZiAoIWxpc3RfZW1wdHkoXFx1MDAyNmNsZWFuX2xpc3QpKSB7XFxuK1xcdFxcdGxpc3Rfc3BsaWNlX2luaXQoXFx1MDAyNmNsZWFuX2xpc3QsIFxcdTAwMjZmb2xpb19saXN0KTtcXG4rXFx0XFx0c2tpcF9yZXRyeSA9IHRydWU7XFxuK1xcdFxcdC8qIFJldHJ5IGZvbGlvcyB3ZXJlIGFscmVhZHkgaXNvbGF0ZWQgYW5kIGFjY291bnRlZCBhYm92ZSAqL1xcbitcXHRcXHRpc29sYXRlZCA9IDA7XFxuK1xcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdH1cXG4rXFxuK1xcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyBmaWxlLCAtbnJfdGFrZW4pO1xcbitcXHRpZiAobnJfc2Nhbm5lZCBcXHUwMDNlIHRvdGFsX3JlY2xhaW1lZClcXG4gXFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gKyBmaWxlLFxcbi1cXHRcXHRcXHRcXHQgbnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7XFxuK1xcdFxcdFxcdFxcdCBucl9zY2FubmVkIC0gdG90YWxfcmVjbGFpbWVkKTtcXG4gXFxuLVxcdGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayhucl90YWtlbiwgcGdkYXQsIHNjLCBcXHUwMDI2c3RhdCk7XFxuLVxcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLFxcbi1cXHRcXHRcXHRucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFxcdTAwMjZzdGF0LCBzYy1cXHUwMDNlcHJpb3JpdHksIGZpbGUpO1xcbi1cXHRyZXR1cm4gbnJfcmVjbGFpbWVkO1xcbitcXHRyZXR1cm4gdG90YWxfcmVjbGFpbWVkO1xcbiB9XFxuIFxcbiAvKlxcbkBAIC01MDE4LDggKzUwNDEsNiBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4ge1xcbiBcXHRMSVNUX0hFQUQobGlzdCk7XFxuIFxcdExJU1RfSEVBRChjbGVhbik7XFxuLVxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuLVxcdHN0cnVjdCBmb2xpbyAqbmV4dDtcXG4gXFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtO1xcbiBcXHRzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7XFxuIFxcdHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGs7XFxuQEAgLTUwNTgsMjYgKzUwNzksNyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0XFx0XFx0dHlwZV9zY2FubmVkLCByZWNsYWltZWQsIFxcdTAwMjZzdGF0LCBzYy1cXHUwMDNlcHJpb3JpdHksXFxuIFxcdFxcdFxcdHR5cGUgPyBMUlVfSU5BQ1RJVkVfRklMRSA6IExSVV9JTkFDVElWRV9BTk9OKTtcXG4gXFxuLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGZvbGlvLCBuZXh0LCBcXHUwMDI2bGlzdCwgbHJ1KSB7XFxuLVxcdFxcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XFxuLVxcbi1cXHRcXHQvKiBtb3ZlX2ZvbGlvc190b19scnUoKSBjdWxscyB1bmV2aWN0YWJsZSBmb2xpb3MgdmlhIGZvbGlvX3B1dGJhY2tfbHJ1KCkgKi9cXG4tXFx0XFx0aWYgKCFmb2xpb19ldmljdGFibGUoZm9saW8pKVxcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFxuLVxcdFxcdC8qIHJldHJ5IGZvbGlvcyB0aGF0IG1heSBoYXZlIG1pc3NlZCBmb2xpb19yb3RhdGVfcmVjbGFpbWFibGUoKSAqL1xcbi1cXHRcXHRpZiAoIXNraXBfcmV0cnkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSBcXHUwMDI2XFx1MDAyNlxcbi1cXHRcXHQgICAgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcXG4tXFx0XFx0XFx0bGlzdF9tb3ZlKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2Y2xlYW4pO1xcbi1cXHRcXHRcXHRjb250aW51ZTtcXG4tXFx0XFx0fVxcbi1cXG4tXFx0XFx0LyogZG9uJ3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cXG4tXFx0XFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XFxuLVxcdFxcdFxcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XFxuLVxcdFxcdFxcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xcbi1cXHRcXHR9XFxuLVxcdH1cXG4rXFx0ZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKFxcdTAwMjZsaXN0LCBcXHUwMDI2Y2xlYW4sIGxydXZlYywgdHlwZSwgc2tpcF9yZXRyeSk7XFxuIFxcbiBcXHRtb3ZlX2ZvbGlvc190b19scnUoXFx1MDAyNmxpc3QpO1xcbiBcXG5AQCAtNjEyMyw2ICs2MTI1LDQ2IEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqXFxuIFxcbiAjZW5kaWYgLyogQ09ORklHX0xSVV9HRU4gKi9cXG4gXFxuKy8qKlxcbisgKiBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2sgLSBGaW5kIGFuZCBtb3ZlIHRoZSB3cml0dGVuIGJhY2sgZm9saW9zIHRvIGEgbmV3IGxpc3QuXFxuKyAqIEBsaXN0OiBmb2xpb3MgbGlzdFxcbisgKiBAY2xlYW46IHRoZSB3cml0dGVuIGJhY2sgZm9saW9zIGxpc3RcXG4rICogQGxydXZlYzogdGhlIGxydXZlY1xcbisgKiBAdHlwZTogTFJVIHR5cGUgKG9ubHkgdXNlZCBmb3IgQ09ORklHX0xSVV9HRU4pXFxuKyAqIEBza2lwX3JldHJ5OiB3aGV0aGVyIHNraXAgcmV0cnkuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4rXFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpjbGVhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbitcXHRcXHRcXHRcXHQgICAgIGludCB0eXBlLCBib29sIHNraXBfcmV0cnkpXFxuK3tcXG4rXFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG4rXFx0c3RydWN0IGZvbGlvICpuZXh0O1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoZm9saW8sIG5leHQsIGxpc3QsIGxydSkge1xcbisjaWZkZWYgQ09ORklHX0xSVV9HRU5cXG4rXFx0XFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG4rI2VuZGlmXFxuK1xcdFxcdC8qIG1vdmVfZm9saW9zX3RvX2xydSgpIGN1bGxzIHVuZXZpY3RhYmxlIGZvbGlvcyB2aWEgZm9saW9fcHV0YmFja19scnUoKSAqL1xcbitcXHRcXHRpZiAoIWZvbGlvX2V2aWN0YWJsZShmb2xpbykpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0LyogcmV0cnkgZm9saW9zIHRoYXQgbWF5IGhhdmUgbWlzc2VkIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXFxuK1xcdFxcdGlmICghc2tpcF9yZXRyeSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xcbitcXHRcXHRcXHRsaXN0X21vdmUoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIGNsZWFuKTtcXG4rXFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdH1cXG4rI2lmZGVmIENPTkZJR19MUlVfR0VOXFxuK1xcdFxcdC8qIGRvbid0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXFxuK1xcdFxcdGlmIChscnV2ZWMtXFx1MDAzZWxydWdlbi5lbmFibGVkIFxcdTAwMjZcXHUwMDI2XFxuK1xcdFxcdCAgICBscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkge1xcbitcXHRcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbitcXHRcXHRcXHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcXG4rXFx0XFx0fVxcbisjZW5kaWZcXG4rXFx0fVxcbit9XFxuK1xcbiBzdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuIHtcXG4gXFx0dW5zaWduZWQgbG9uZyBucltOUl9MUlVfTElTVFNdO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMTowNi4zMTI5OTcyNTZaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjg1Mjk5Njk3MTQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaHJpbmtfaW5hY3RpdmVfbGlzdFwiLFxuICAgIFwiZXZpY3RfZm9saW9zXCIsXG4gICAgXCJmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHJlY2xhaW0gbG9naWMgaW4gbW0vdm1zY2FuLmMgYnkgcmVmYWN0b3JpbmcgZm9saW8gd3JpdGViYWNrIGRldGVjdGlvbiBpbnRvIGEgc2hhcmVkIGhlbHBlciBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKClgLCB1cGRhdGluZyBgZXZpY3RfZm9saW9zKClgIChNdWx0aS1HZW4gTFJVKSwgYW5kIGludHJvZHVjaW5nIGEgcmV0cnkgbWVjaGFuaXNtIGZvciB3cml0dGVuLWJhY2sgZm9saW9zIGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpYCBhbG9uZyB3aXRoIHVwZGF0ZWQgaXNvbGF0aW9uIGFjY291bnRpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUsIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGhzIGFuZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMjIyZTYxODI0YmEzZjQ5NzAxMGViNDExOGFiZWE3NjNlNDdkMGQ4NlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBTdW4gU2VwIDEzIDEwOjIxOjAzIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggNTM1NGViOGQzYTA3Yi4uODBjY2Q1MTZlZjM4MCAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTE4MSw2ICsxODEsMTAgQEAgc3RydWN0IHNjYW5fY29udHJvbCB7XG4gXHRzdHJ1Y3QgcmVjbGFpbV9zdGF0ZSByZWNsYWltX3N0YXRlO1xuIH07XG4gXG4rc3RhdGljIHZvaWQgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmNsZWFuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4rXHRcdFx0XHQgICAgIGludCB0eXBlLCBib29sIHNraXBfcmV0cnkpO1xuK1xuICNpZmRlZiBBUkNIX0hBU19QUkVGRVRDSFdcbiBzdGF0aWMgaW5saW5lIHZvaWQgcHJlZmV0Y2h3X3ByZXZfbHJ1X2ZvbGlvKHN0cnVjdCBmb2xpbyAqZm9saW8sXG4gXHRcdHN0cnVjdCBsaXN0X2hlYWQgKmJhc2UpXG5AQCAtMjA2NSwxNCArMjA2OSwxNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRcdGVudW0gbHJ1X2xpc3QgbHJ1KVxuIHtcbiBcdExJU1RfSEVBRChmb2xpb19saXN0KTtcbitcdExJU1RfSEVBRChjbGVhbl9saXN0KTtcbiBcdHVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDtcbi1cdHVuc2lnbmVkIGludCBucl9yZWNsYWltZWQgPSAwO1xuLVx0dW5zaWduZWQgbG9uZyBucl90YWtlbjtcbitcdHVuc2lnbmVkIGludCBucl9yZWNsYWltZWQsIHRvdGFsX3JlY2xhaW1lZCA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIG5yX3Rha2VuLCBpc29sYXRlZDtcbiBcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcbiBcdGJvb2wgZmlsZSA9IGlzX2ZpbGVfbHJ1KGxydSk7XG4gXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07XG4gXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XG4gXHRib29sIHN0YWxsZWQgPSBmYWxzZTtcbitcdGJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlO1xuIFxuIFx0d2hpbGUgKHVubGlrZWx5KHRvb19tYW55X2lzb2xhdGVkKHBnZGF0LCBmaWxlLCBzYykpKSB7XG4gXHRcdGlmIChzdGFsbGVkKVxuQEAgLTIxMDQsMjUgKzIxMTAsNDIgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxuIFx0aWYgKG5yX3Rha2VuID09IDApXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0aXNvbGF0ZWQgPSBucl90YWtlbjtcbityZXRyeTpcbiBcdG5yX3JlY2xhaW1lZCA9IHNocmlua19mb2xpb19saXN0KFx1MDAyNmZvbGlvX2xpc3QsIHBnZGF0LCBzYywgXHUwMDI2c3RhdCwgZmFsc2UsXG4gXHRcdFx0XHRcdCBscnV2ZWNfbWVtY2cobHJ1dmVjKSk7XG4rXHR0b3RhbF9yZWNsYWltZWQgKz0gbnJfcmVjbGFpbWVkO1xuK1xuK1x0LyogUmV0cnkgcGFzcyBpcyBvbmx5IG1lYW50IGZvciBjbGVhbiBmb2xpb3Mgd2l0aG91dCBuZXcgaXNvbGF0aW9uICovXG4rXHRpZiAoaXNvbGF0ZWQpXG4rXHRcdGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayhpc29sYXRlZCwgcGdkYXQsIHNjLCBcdTAwMjZzdGF0KTtcbitcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LVx1MDAzZW5vZGVfaWQsXG4rXHRcdFx0bnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCBcdTAwMjZzdGF0LCBzYy1cdTAwM2Vwcmlvcml0eSwgZmlsZSk7XG4rXG4rXHRmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soXHUwMDI2Zm9saW9fbGlzdCwgXHUwMDI2Y2xlYW5fbGlzdCwgbHJ1dmVjLCBmaWxlLCBza2lwX3JldHJ5KTtcbiBcbiBcdG1vdmVfZm9saW9zX3RvX2xydShcdTAwMjZmb2xpb19saXN0KTtcbiBcbiBcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR0RFTU9URV9LU1dBUEQgKyByZWNsYWltZXJfb2Zmc2V0KHNjKSxcbiBcdFx0XHRcdFx0c3RhdC5ucl9kZW1vdGVkKTtcbi1cdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyBmaWxlLCAtbnJfdGFrZW4pO1xuIFx0aXRlbSA9IFBHU1RFQUxfS1NXQVBEICsgcmVjbGFpbWVyX29mZnNldChzYyk7XG4gXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgaXRlbSwgbnJfcmVjbGFpbWVkKTtcbiBcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR1NURUFMX0FOT04gKyBmaWxlLCBucl9yZWNsYWltZWQpO1xuLVx0aWYgKG5yX3NjYW5uZWQgXHUwMDNlIG5yX3JlY2xhaW1lZClcbitcbitcdGlmICghbGlzdF9lbXB0eShcdTAwMjZjbGVhbl9saXN0KSkge1xuK1x0XHRsaXN0X3NwbGljZV9pbml0KFx1MDAyNmNsZWFuX2xpc3QsIFx1MDAyNmZvbGlvX2xpc3QpO1xuK1x0XHRza2lwX3JldHJ5ID0gdHJ1ZTtcbitcdFx0LyogUmV0cnkgZm9saW9zIHdlcmUgYWxyZWFkeSBpc29sYXRlZCBhbmQgYWNjb3VudGVkIGFib3ZlICovXG4rXHRcdGlzb2xhdGVkID0gMDtcbitcdFx0Z290byByZXRyeTtcbitcdH1cbitcbitcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyBmaWxlLCAtbnJfdGFrZW4pO1xuK1x0aWYgKG5yX3NjYW5uZWQgXHUwMDNlIHRvdGFsX3JlY2xhaW1lZClcbiBcdFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHUk9UQVRFX0FOT04gKyBmaWxlLFxuLVx0XHRcdFx0IG5yX3NjYW5uZWQgLSBucl9yZWNsYWltZWQpO1xuK1x0XHRcdFx0IG5yX3NjYW5uZWQgLSB0b3RhbF9yZWNsYWltZWQpO1xuIFxuLVx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKG5yX3Rha2VuLCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQpO1xuLVx0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtXHUwMDNlbm9kZV9pZCxcbi1cdFx0XHRucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFx1MDAyNnN0YXQsIHNjLVx1MDAzZXByaW9yaXR5LCBmaWxlKTtcbi1cdHJldHVybiBucl9yZWNsYWltZWQ7XG4rXHRyZXR1cm4gdG90YWxfcmVjbGFpbWVkO1xuIH1cbiBcbiAvKlxuQEAgLTUwMTgsOCArNTA0MSw2IEBAIHN0YXRpYyBpbnQgZXZpY3RfZm9saW9zKHVuc2lnbmVkIGxvbmcgbnJfdG9fc2Nhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuIHtcbiBcdExJU1RfSEVBRChsaXN0KTtcbiBcdExJU1RfSEVBRChjbGVhbik7XG4tXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuLVx0c3RydWN0IGZvbGlvICpuZXh0O1xuIFx0ZW51bSBub2RlX3N0YXRfaXRlbSBpdGVtO1xuIFx0c3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0O1xuIFx0c3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaztcbkBAIC01MDU4LDI2ICs1MDc5LDcgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRcdFx0dHlwZV9zY2FubmVkLCByZWNsYWltZWQsIFx1MDAyNnN0YXQsIHNjLVx1MDAzZXByaW9yaXR5LFxuIFx0XHRcdHR5cGUgPyBMUlVfSU5BQ1RJVkVfRklMRSA6IExSVV9JTkFDVElWRV9BTk9OKTtcbiBcbi1cdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGZvbGlvLCBuZXh0LCBcdTAwMjZsaXN0LCBscnUpIHtcbi1cdFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcbi1cbi1cdFx0LyogbW92ZV9mb2xpb3NfdG9fbHJ1KCkgY3VsbHMgdW5ldmljdGFibGUgZm9saW9zIHZpYSBmb2xpb19wdXRiYWNrX2xydSgpICovXG4tXHRcdGlmICghZm9saW9fZXZpY3RhYmxlKGZvbGlvKSlcbi1cdFx0XHRjb250aW51ZTtcbi1cbi1cdFx0LyogcmV0cnkgZm9saW9zIHRoYXQgbWF5IGhhdmUgbWlzc2VkIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXG4tXHRcdGlmICghc2tpcF9yZXRyeSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykgXHUwMDI2XHUwMDI2XG4tXHRcdCAgICAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcbi1cdFx0XHRsaXN0X21vdmUoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZjbGVhbik7XG4tXHRcdFx0Y29udGludWU7XG4tXHRcdH1cbi1cbi1cdFx0LyogZG9uJ3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbi1cdFx0aWYgKGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XG4tXHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbi1cdFx0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbi1cdFx0fVxuLVx0fVxuK1x0ZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKFx1MDAyNmxpc3QsIFx1MDAyNmNsZWFuLCBscnV2ZWMsIHR5cGUsIHNraXBfcmV0cnkpO1xuIFxuIFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFx1MDAyNmxpc3QpO1xuIFxuQEAgLTYxMjMsNiArNjEyNSw0NiBAQCBzdGF0aWMgdm9pZCBscnVfZ2VuX3Nocmlua19ub2RlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKlxuIFxuICNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL1xuIFxuKy8qKlxuKyAqIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayAtIEZpbmQgYW5kIG1vdmUgdGhlIHdyaXR0ZW4gYmFjayBmb2xpb3MgdG8gYSBuZXcgbGlzdC5cbisgKiBAbGlzdDogZm9saW9zIGxpc3RcbisgKiBAY2xlYW46IHRoZSB3cml0dGVuIGJhY2sgZm9saW9zIGxpc3RcbisgKiBAbHJ1dmVjOiB0aGUgbHJ1dmVjXG4rICogQHR5cGU6IExSVSB0eXBlIChvbmx5IHVzZWQgZm9yIENPTkZJR19MUlVfR0VOKVxuKyAqIEBza2lwX3JldHJ5OiB3aGV0aGVyIHNraXAgcmV0cnkuXG4rICovXG4rc3RhdGljIHZvaWQgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXG4rXHRcdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmNsZWFuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4rXHRcdFx0XHQgICAgIGludCB0eXBlLCBib29sIHNraXBfcmV0cnkpXG4re1xuK1x0c3RydWN0IGZvbGlvICpmb2xpbztcbitcdHN0cnVjdCBmb2xpbyAqbmV4dDtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGZvbGlvLCBuZXh0LCBsaXN0LCBscnUpIHtcbisjaWZkZWYgQ09ORklHX0xSVV9HRU5cbitcdFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcbisjZW5kaWZcbitcdFx0LyogbW92ZV9mb2xpb3NfdG9fbHJ1KCkgY3VsbHMgdW5ldmljdGFibGUgZm9saW9zIHZpYSBmb2xpb19wdXRiYWNrX2xydSgpICovXG4rXHRcdGlmICghZm9saW9fZXZpY3RhYmxlKGZvbGlvKSlcbitcdFx0XHRjb250aW51ZTtcbitcbitcdFx0LyogcmV0cnkgZm9saW9zIHRoYXQgbWF5IGhhdmUgbWlzc2VkIGZvbGlvX3JvdGF0ZV9yZWNsYWltYWJsZSgpICovXG4rXHRcdGlmICghc2tpcF9yZXRyeSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX21hcHBlZChmb2xpbykgXHUwMDI2XHUwMDI2XG4rXHRcdCAgICAhZm9saW9fdGVzdF9kaXJ0eShmb2xpbykgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcbitcdFx0XHRsaXN0X21vdmUoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBjbGVhbik7XG4rXHRcdFx0Y29udGludWU7XG4rXHRcdH1cbisjaWZkZWYgQ09ORklHX0xSVV9HRU5cbitcdFx0LyogZG9uJ3QgYWRkIHJlamVjdGVkIGZvbGlvcyB0byB0aGUgb2xkZXN0IGdlbmVyYXRpb24gKi9cbitcdFx0aWYgKGxydXZlYy1cdTAwM2VscnVnZW4uZW5hYmxlZCBcdTAwMjZcdTAwMjZcbitcdFx0ICAgIGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XG4rXHRcdFx0Zm9saW9fc2V0X2xydV9yZWZzKGZvbGlvLCAwKTtcbitcdFx0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcbitcdFx0fVxuKyNlbmRpZlxuK1x0fVxuK31cbitcbiBzdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4ge1xuIFx0dW5zaWduZWQgbG9uZyBucltOUl9MUlVfTElTVFNdO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjE6MDYuMzEzMDAwNTM2WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjcyNDUyNTkxNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRXZhbHVhdGluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgYSBLZXJuZWwgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGVjaWRlIGlmIHRoaXMgcGF0Y2ggc2VyaWVzIGlzIGEgZ29vZCBjYW5kaWRhdGUgZm9yIHN5emthbGxlciBmdXp6aW5nLiBMZXQncyBkaWcgaW4uIEl0J3MgdG91Y2hpbmcgYG1tL3Ztc2Nhbi5jYC4gQWxyaWdodCwgdGhhdCBpbW1lZGlhdGVseSBnZXRzIG15IGF0dGVudGlvbiDigJMgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSBpcyBhIHByZXR0eSBqdWljeSB0YXJnZXQhIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQncyBiZWluZyBjaGFuZ2VkIGhlcmUuIFRpbWUgdG8gbG9vayBhdCB0aGUgZGlmZi4gSSdsbCBwcm9iYWJseSBmaXJlIHVwIGdyZXBwZXIgb3IganVzdCB1c2UgYHJlYWQtZmlsZWAgdG8gZ2V0IGEgZ29vZCBsb29rIGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQuXG5cbkknbGwgc3BlY2lmaWNhbGx5IGZvY3VzIG9uIHRoZSBmdW5jdGlvbnMgYXJvdW5kIHRoZSBtb2RpZmljYXRpb25zLiBMZXQncyBzZWUuLi4gdGhlIGRpZmYgaW52b2x2ZXMgYHNocmlua19pbmFjdGl2ZV9saXN0YCAobGluZXMgMjA2NS0yMTUwKSwgYGV2aWN0X2ZvbGlvc2AgKGFyb3VuZCA1MDE4LTUwODApLCBhbmQgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AgKGFyb3VuZCA2MTI1KS4gSSBzaG91bGQgZ2V0IHRob3NlIHBhZ2VzIGZyb20gYG1tL3Ztc2Nhbi5jYCB3aXRoIGByZWFkLWZpbGVgIGFuZCBjYXJlZnVsbHkgYW5hbHl6ZSB0aGVzZSBzZWN0aW9ucy4gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGNvZGUgaXMgY2hhbmdlZCBhbmQgdGhlIGFyZWFzIGFmZmVjdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0ODg1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjE6MzMuNTU4MjYxODA4WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDMwMTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDIwNjUsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjIwNjU6XFx0ICogb2YgcmVjbGFpbWVkIHBhZ2VzXFxuMjA2NjpcXHQgKi9cXG4yMDY3OlxcdHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG4yMDY4OlxcdFxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuMjA2OTpcXHRcXHRcXHRlbnVtIGxydV9saXN0IGxydSlcXG4yMDcwOlxcdHtcXG4yMDcxOlxcdFxcdExJU1RfSEVBRChmb2xpb19saXN0KTtcXG4yMDcyOlxcdFxcdExJU1RfSEVBRChjbGVhbl9saXN0KTtcXG4yMDczOlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfc2Nhbm5lZDtcXG4yMDc0OlxcdFxcdHVuc2lnbmVkIGludCBucl9yZWNsYWltZWQsIHRvdGFsX3JlY2xhaW1lZCA9IDA7XFxuMjA3NTpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3Rha2VuLCBpc29sYXRlZDtcXG4yMDc2OlxcdFxcdHN0cnVjdCByZWNsYWltX3N0YXQgc3RhdDtcXG4yMDc3OlxcdFxcdGJvb2wgZmlsZSA9IGlzX2ZpbGVfbHJ1KGxydSk7XFxuMjA3ODpcXHRcXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07XFxuMjA3OTpcXHRcXHRzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0ID0gbHJ1dmVjX3BnZGF0KGxydXZlYyk7XFxuMjA4MDpcXHRcXHRib29sIHN0YWxsZWQgPSBmYWxzZTtcXG4yMDgxOlxcdFxcdGJvb2wgc2tpcF9yZXRyeSA9IGZhbHNlO1xcbjIwODI6XFx0XFxuMjA4MzpcXHRcXHR3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHtcXG4yMDg0OlxcdFxcdFxcdGlmIChzdGFsbGVkKVxcbjIwODU6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuMjA4NjpcXHRcXG4yMDg3OlxcdFxcdFxcdC8qIHdhaXQgYSBiaXQgZm9yIHRoZSByZWNsYWltZXIuICovXFxuMjA4ODpcXHRcXHRcXHRzdGFsbGVkID0gdHJ1ZTtcXG4yMDg5OlxcdFxcdFxcdHJlY2xhaW1fdGhyb3R0bGUocGdkYXQsIFZNU0NBTl9USFJPVFRMRV9JU09MQVRFRCk7XFxuMjA5MDpcXHRcXG4yMDkxOlxcdFxcdFxcdC8qIFdlIGFyZSBhYm91dCB0byBkaWUgYW5kIGZyZWUgb3VyIG1lbW9yeS4gUmV0dXJuIG5vdy4gKi9cXG4yMDkyOlxcdFxcdFxcdGlmIChmYXRhbF9zaWduYWxfcGVuZGluZyhjdXJyZW50KSlcXG4yMDkzOlxcdFxcdFxcdFxcdHJldHVybiBTV0FQX0NMVVNURVJfTUFYO1xcbjIwOTQ6XFx0XFx0fVxcbjIwOTU6XFx0XFxuMjA5NjpcXHRcXHRscnVfYWRkX2RyYWluKCk7XFxuMjA5NzpcXHRcXG4yMDk4OlxcdFxcdGxydXZlY19sb2NrX2lycShscnV2ZWMpO1xcbjIwOTk6XFx0XFxuMjEwMDpcXHRcXHRucl90YWtlbiA9IGlzb2xhdGVfbHJ1X2ZvbGlvcyhucl90b19zY2FuLCBscnV2ZWMsIFxcdTAwMjZmb2xpb19saXN0LFxcbjIxMDE6XFx0XFx0XFx0XFx0XFx0ICAgICBcXHUwMDI2bnJfc2Nhbm5lZCwgc2MsIGxydSk7XFxuMjEwMjpcXHRcXG4yMTAzOlxcdFxcdF9fbW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIGZpbGUsIG5yX3Rha2VuKTtcXG4yMTA0OlxcdFxcdGl0ZW0gPSBQR1NDQU5fS1NXQVBEICsgcmVjbGFpbWVyX29mZnNldChzYyk7XFxuMjEwNTpcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgaXRlbSwgbnJfc2Nhbm5lZCk7XFxuMjEwNjpcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTQ0FOX0FOT04gKyBmaWxlLCBucl9zY2FubmVkKTtcXG4yMTA3OlxcdFxcbjIxMDg6XFx0XFx0bHJ1dmVjX3VubG9ja19pcnEobHJ1dmVjKTtcXG4yMTA5OlxcdFxcbjIxMTA6XFx0XFx0aWYgKG5yX3Rha2VuID09IDApXFxuMjExMTpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yMTEyOlxcdFxcbjIxMTM6XFx0XFx0aXNvbGF0ZWQgPSBucl90YWtlbjtcXG4yMTE0OlxcdHJldHJ5OlxcbjIxMTU6XFx0XFx0bnJfcmVjbGFpbWVkID0gc2hyaW5rX2ZvbGlvX2xpc3QoXFx1MDAyNmZvbGlvX2xpc3QsIHBnZGF0LCBzYywgXFx1MDAyNnN0YXQsIGZhbHNlLFxcbjIxMTY6XFx0XFx0XFx0XFx0XFx0XFx0IGxydXZlY19tZW1jZyhscnV2ZWMpKTtcXG4yMTE3OlxcdFxcdHRvdGFsX3JlY2xhaW1lZCArPSBucl9yZWNsYWltZWQ7XFxuMjExODpcXHRcXG4yMTE5OlxcdFxcdC8qIFJldHJ5IHBhc3MgaXMgb25seSBtZWFudCBmb3IgY2xlYW4gZm9saW9zIHdpdGhvdXQgbmV3IGlzb2xhdGlvbiAqL1xcbjIxMjA6XFx0XFx0aWYgKGlzb2xhdGVkKVxcbjIxMjE6XFx0XFx0XFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFxcdTAwMjZzdGF0KTtcXG4yMTIyOlxcdFxcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLFxcbjIxMjM6XFx0XFx0XFx0XFx0bnJfc2Nhbm5lZCwgbnJfcmVjbGFpbWVkLCBcXHUwMDI2c3RhdCwgc2MtXFx1MDAzZXByaW9yaXR5LCBmaWxlKTtcXG4yMTI0OlxcdFxcbjIxMjU6XFx0XFx0ZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKFxcdTAwMjZmb2xpb19saXN0LCBcXHUwMDI2Y2xlYW5fbGlzdCwgbHJ1dmVjLCBmaWxlLCBza2lwX3JldHJ5KTtcXG4yMTI2OlxcdFxcbjIxMjc6XFx0XFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFxcdTAwMjZmb2xpb19saXN0KTtcXG4yMTI4OlxcdFxcbjIxMjk6XFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHREVNT1RFX0tTV0FQRCArIHJlY2xhaW1lcl9vZmZzZXQoc2MpLFxcbjIxMzA6XFx0XFx0XFx0XFx0XFx0XFx0c3RhdC5ucl9kZW1vdGVkKTtcXG4yMTMxOlxcdFxcdGl0ZW0gPSBQR1NURUFMX0tTV0FQRCArIHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xcbjIxMzI6XFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIG5yX3JlY2xhaW1lZCk7XFxuMjEzMzpcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICsgZmlsZSwgbnJfcmVjbGFpbWVkKTtcXG4yMTM0OlxcdFxcbjIxMzU6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZjbGVhbl9saXN0KSkge1xcbjIxMzY6XFx0XFx0XFx0bGlzdF9zcGxpY2VfaW5pdChcXHUwMDI2Y2xlYW5fbGlzdCwgXFx1MDAyNmZvbGlvX2xpc3QpO1xcbjIxMzc6XFx0XFx0XFx0c2tpcF9yZXRyeSA9IHRydWU7XFxuMjEzODpcXHRcXHRcXHQvKiBSZXRyeSBmb2xpb3Mgd2VyZSBhbHJlYWR5IGlzb2xhdGVkIGFuZCBhY2NvdW50ZWQgYWJvdmUgKi9cXG4yMTM5OlxcdFxcdFxcdGlzb2xhdGVkID0gMDtcXG4yMTQwOlxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuMjE0MTpcXHRcXHR9XFxuMjE0MjpcXHRcXG4yMTQzOlxcdFxcdG1vZF9ub2RlX3BhZ2Vfc3RhdGUocGdkYXQsIE5SX0lTT0xBVEVEX0FOT04gKyBmaWxlLCAtbnJfdGFrZW4pO1xcbjIxNDQ6XFx0XFx0aWYgKG5yX3NjYW5uZWQgXFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjIxOjMzLjU1ODY5NDI2OFoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjUyOTEwNDY2ODAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50IFByb2NlZHVyZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZGl2ZSBpbnRvIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gTXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gemVybyBpbiBvbiBgZXZpY3RfZm9saW9zYCBhbmQgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AuIFRoZXNlIGZ1bmN0aW9ucyBhcmUgY3JpdGljYWwgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHdlIGhhbmRsZSBtZW1vcnkgcHJlc3N1cmUgYW5kIHRoZSBtZWNoYW5pY3Mgb2YgcGFnZSByZWNsYW1hdGlvbi4gSSB3YW50IHRvIHF1aWNrbHkgZXZhbHVhdGUgaG93IHRoZXNlIHJvdXRpbmVzIGludGVyYWN0IGFuZCBob3cgZWZmaWNpZW50bHkgdGhleSdyZSBpZGVudGlmeWluZyBhbmQgcHJvY2Vzc2luZyBkaXJ0eSBwYWdlcy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGhldXJpc3RpY3MgdGhleSBlbXBsb3kgYW5kIHdoZXRoZXIgdGhleSdyZSB3ZWxsLXR1bmVkIHRvIG91ciB3b3JrbG9hZCdzIGNoYXJhY3RlcmlzdGljcy4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgaW5lZmZpY2llbmNpZXMgaW4gdGhlaXIgaW1wbGVtZW50YXRpb24sIGNvbnNpZGVyaW5nIHRoaW5ncyBsaWtlIGxvY2sgY29udGVudGlvbiwgY2FjaGUgbGluZSBlZmZlY3RzLCBhbmQgdGhlIG92ZXJhbGwgb3ZlcmhlYWQgYXNzb2NpYXRlZCB3aXRoIHBhZ2UgdGFibGUgbWFuYWdlbWVudC4gSSdtIGFsc28gY3VyaW91cyBhYm91dCB0aGUgY3JpdGVyaWEgdXNlZCB0byBkZXRlcm1pbmUgd2hlbiBhIGZvbGlvIGlzIFwid3JpdHRlbiBiYWNrXCIgYW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhvc2UgZGVjaXNpb25zIG9uIG92ZXJhbGwgc3lzdGVtIHBlcmZvcm1hbmNlLiBMZXQncyBzZWUgd2hhdCB3ZSBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NjY2LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMTozOC44NDk3NDMyMDhaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozOTU3NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTA2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTA2MDpcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmxpc3QsIFxcdTAwMjZpc29sYXRlZCwgXFx1MDAyNnR5cGUsIFxcdTAwMjZ0eXBlX3NjYW5uZWQpO1xcbjUwNjE6XFx0XFx0bnJfaXNvbGF0ZWQgPSBpc29sYXRlZDtcXG41MDYyOlxcdFxcbjUwNjM6XFx0XFx0LyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi9cXG41MDY0OlxcdFxcdGlmIChzY2FubmVkKVxcbjUwNjU6XFx0XFx0XFx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XFxuNTA2NjpcXHRcXG41MDY3OlxcdFxcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XFxuNTA2ODpcXHRcXG41MDY5OlxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZsaXN0KSlcXG41MDcwOlxcdFxcdFxcdHJldHVybiBzY2FubmVkO1xcbjUwNzE6XFx0cmV0cnk6XFxuNTA3MjpcXHRcXHRyZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChcXHUwMDI2bGlzdCwgcGdkYXQsIHNjLCBcXHUwMDI2c3RhdCwgZmFsc2UsIG1lbWNnKTtcXG41MDczOlxcdFxcdHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgKz0gcmVjbGFpbWVkO1xcbjUwNzQ6XFx0XFx0dG90YWxfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG41MDc1OlxcdFxcdC8qIFJldHJ5IHBhc3MgaXMgb25seSBtZWFudCBmb3IgY2xlYW4gZm9saW9zIHdpdGhvdXQgbmV3IGlzb2xhdGlvbiAqL1xcbjUwNzY6XFx0XFx0aWYgKGlzb2xhdGVkKVxcbjUwNzc6XFx0XFx0XFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFxcdTAwMjZzdGF0KTtcXG41MDc4OlxcdFxcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLFxcbjUwNzk6XFx0XFx0XFx0XFx0dHlwZV9zY2FubmVkLCByZWNsYWltZWQsIFxcdTAwMjZzdGF0LCBzYy1cXHUwMDNlcHJpb3JpdHksXFxuNTA4MDpcXHRcXHRcXHRcXHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XFxuNTA4MTpcXHRcXG41MDgyOlxcdFxcdGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhcXHUwMDI2bGlzdCwgXFx1MDAyNmNsZWFuLCBscnV2ZWMsIHR5cGUsIHNraXBfcmV0cnkpO1xcbjUwODM6XFx0XFxuNTA4NDpcXHRcXHRtb3ZlX2ZvbGlvc190b19scnUoXFx1MDAyNmxpc3QpO1xcbjUwODU6XFx0XFxuNTA4NjpcXHRcXHR3YWxrID0gY3VycmVudC1cXHUwMDNlcmVjbGFpbV9zdGF0ZS1cXHUwMDNlbW1fd2FsaztcXG41MDg3OlxcdFxcdGlmICh3YWxrIFxcdTAwMjZcXHUwMDI2IHdhbGstXFx1MDAzZWJhdGNoZWQpIHtcXG41MDg4OlxcdFxcdFxcdHdhbGstXFx1MDAzZWxydXZlYyA9IGxydXZlYztcXG41MDg5OlxcdFxcdFxcdHJlc2V0X2JhdGNoX3NpemUod2Fsayk7XFxuNTA5MDpcXHRcXHR9XFxuNTA5MTpcXHRcXG41MDkyOlxcdFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR0RFTU9URV9LU1dBUEQgKyByZWNsYWltZXJfb2Zmc2V0KHNjKSxcXG41MDkzOlxcdFxcdFxcdFxcdFxcdFxcdHN0YXQubnJfZGVtb3RlZCk7XFxuNTA5NDpcXHRcXG41MDk1OlxcdFxcdGl0ZW0gPSBQR1NURUFMX0tTV0FQRCArIHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xcbjUwOTY6XFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIHJlY2xhaW1lZCk7XFxuNTA5NzpcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICsgdHlwZSwgcmVjbGFpbWVkKTtcXG41MDk4OlxcdFxcbjUwOTk6XFx0XFx0bGlzdF9zcGxpY2VfaW5pdChcXHUwMDI2Y2xlYW4sIFxcdTAwMjZsaXN0KTtcXG41MTAwOlxcdFxcbjUxMDE6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZsaXN0KSkge1xcbjUxMDI6XFx0XFx0XFx0c2tpcF9yZXRyeSA9IHRydWU7XFxuNTEwMzpcXHRcXHRcXHRpc29sYXRlZCA9IDA7XFxuNTEwNDpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjUxMDU6XFx0XFx0fVxcbjUxMDY6XFx0XFxuNTEwNzpcXHRcXHRpZiAobnJfaXNvbGF0ZWQgXFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXFxuNTEwODpcXHRcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIHR5cGUsXFxuNTEwOTpcXHRcXHRcXHRcXHRcXHQgbnJfaXNvbGF0ZWQgLSB0b3RhbF9yZWNsYWltZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMTozOC44NTAxNDEwNjhaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyNjg5NDk3NTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIG15IG93bjpcblxuKipBbmFseXppbmcgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AgaW4gbW0vdm1zY2FuLmMqKlxuXG5BbHJpZ2h0LCBJJ20gZGl2aW5nIGludG8gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgSSBuZWVkIHRvIHpvb20gaW4gb24gYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AuIFRoZSBmaWxlIGFuZCBsaW5lIG51bWJlciBhcmUgc29saWQgc3RhcnRpbmcgcG9pbnRzIOKAkyBgbW0vdm1zY2FuLmNgIGFyb3VuZCBsaW5lIDYxMjUuIFRoaXMgZnVuY3Rpb24gaXMgY2xlYXJseSBjcml0aWNhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGRpcnR5IHBhZ2VzIHRoYXQgYXJlIHdhaXRpbmcgdG8gYmUgd3JpdHRlbiBiYWNrIHRvIGRpc2suIEkgYmV0IGl0J3MgaW52b2x2ZWQgaW4gaWRlbnRpZnlpbmcgd2hpY2ggZm9saW9zIGFyZSBjYW5kaWRhdGVzIGZvciB3cml0ZWJhY2ssIGxpa2VseSBkdXJpbmcgYSByZWNsYWltIG9yIHNjYW5uaW5nIG9wZXJhdGlvbi4gSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBjcml0ZXJpYSBpdCB1c2VzIHRvIHNlbGVjdCB0aGVzZSBmb2xpb3MsIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgYmFja2luZyBzdG9yYWdlLCBhbmQgaG93IGl0IGhhbmRsZXMgcG90ZW50aWFsIGVycm9ycy4gVW5kZXJzdGFuZGluZyB0aGlzIHdpbGwgYmUgY3J1Y2lhbCBmb3Igb3B0aW1pemluZyBtZW1vcnkgbWFuYWdlbWVudCBiZWhhdmlvciBhbmQgcG90ZW50aWFsbHkgZGlhZ25vc2luZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyByZWxhdGVkIHRvIEkvTyBhbmQgcGFnZSByZWNsYWltLiBJIHNob3VsZCBwcm9iYWJseSBwYXkgYXR0ZW50aW9uIHRvIGFueSBpbnRlcmFjdGlvbiB3aXRoIHRoZSB3cml0ZWJhY2sgdGhyZWFkcyBvciB3b3JrcXVldWVzIGFzIHdlbGwuIEtub3dpbmcgd2hhdCBkYXRhIHN0cnVjdHVyZXMgYXJlIGFjY2Vzc2VkIGhlcmUgbWlnaHQgYWxzbyBiZSBlbmxpZ2h0ZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NDIsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjIxOjQxLjUzOTY0MDUxNloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MTEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MTI1LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI2MTI1OlxcdFxcbjYxMjY6XFx0I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxuNjEyNzpcXHRcXG42MTI4OlxcdC8qKlxcbjYxMjk6XFx0ICogZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrIC0gRmluZCBhbmQgbW92ZSB0aGUgd3JpdHRlbiBiYWNrIGZvbGlvcyB0byBhIG5ldyBsaXN0LlxcbjYxMzA6XFx0ICogQGxpc3Q6IGZvbGlvcyBsaXN0XFxuNjEzMTpcXHQgKiBAY2xlYW46IHRoZSB3cml0dGVuIGJhY2sgZm9saW9zIGxpc3RcXG42MTMyOlxcdCAqIEBscnV2ZWM6IHRoZSBscnV2ZWNcXG42MTMzOlxcdCAqIEB0eXBlOiBMUlUgdHlwZSAob25seSB1c2VkIGZvciBDT05GSUdfTFJVX0dFTilcXG42MTM0OlxcdCAqIEBza2lwX3JldHJ5OiB3aGV0aGVyIHNraXAgcmV0cnkuXFxuNjEzNTpcXHQgKi9cXG42MTM2OlxcdHN0YXRpYyB2b2lkIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbjYxMzc6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpjbGVhbiwgc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbjYxMzg6XFx0XFx0XFx0XFx0XFx0ICAgICBpbnQgdHlwZSwgYm9vbCBza2lwX3JldHJ5KVxcbjYxMzk6XFx0e1xcbjYxNDA6XFx0XFx0c3RydWN0IGZvbGlvICpmb2xpbztcXG42MTQxOlxcdFxcdHN0cnVjdCBmb2xpbyAqbmV4dDtcXG42MTQyOlxcdFxcbjYxNDM6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoZm9saW8sIG5leHQsIGxpc3QsIGxydSkge1xcbjYxNDQ6XFx0I2lmZGVmIENPTkZJR19MUlVfR0VOXFxuNjE0NTpcXHRcXHRcXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xcbjYxNDY6XFx0I2VuZGlmXFxuNjE0NzpcXHRcXHRcXHQvKiBtb3ZlX2ZvbGlvc190b19scnUoKSBjdWxscyB1bmV2aWN0YWJsZSBmb2xpb3MgdmlhIGZvbGlvX3B1dGJhY2tfbHJ1KCkgKi9cXG42MTQ4OlxcdFxcdFxcdGlmICghZm9saW9fZXZpY3RhYmxlKGZvbGlvKSlcXG42MTQ5OlxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjYxNTA6XFx0XFxuNjE1MTpcXHRcXHRcXHQvKiByZXRyeSBmb2xpb3MgdGhhdCBtYXkgaGF2ZSBtaXNzZWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cXG42MTUyOlxcdFxcdFxcdGlmICghc2tpcF9yZXRyeSBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFmb2xpb19tYXBwZWQoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxuNjE1MzpcXHRcXHRcXHQgICAgIWZvbGlvX3Rlc3RfZGlydHkoZm9saW8pIFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X3dyaXRlYmFjayhmb2xpbykpIHtcXG42MTU0OlxcdFxcdFxcdFxcdGxpc3RfbW92ZShcXHUwMDI2Zm9saW8tXFx1MDAzZWxydSwgY2xlYW4pO1xcbjYxNTU6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuNjE1NjpcXHRcXHRcXHR9XFxuNjE1NzpcXHQjaWZkZWYgQ09ORklHX0xSVV9HRU5cXG42MTU4OlxcdFxcdFxcdC8qIGRvbid0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXFxuNjE1OTpcXHRcXHRcXHRpZiAobHJ1dmVjLVxcdTAwM2VscnVnZW4uZW5hYmxlZCBcXHUwMDI2XFx1MDAyNlxcbjYxNjA6XFx0XFx0XFx0ICAgIGxydV9nZW5fZm9saW9fc2VxKGxydXZlYywgZm9saW8sIGZhbHNlKSA9PSBtaW5fc2VxW3R5cGVdKSB7XFxuNjE2MTpcXHRcXHRcXHRcXHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xcbjYxNjI6XFx0XFx0XFx0XFx0Zm9saW9fc2V0X2FjdGl2ZShmb2xpbyk7XFxuNjE2MzpcXHRcXHRcXHR9XFxuNjE2NDpcXHQjZW5kaWZcXG42MTY1OlxcdFxcdH1cXG42MTY2OlxcdH1cXG42MTY3OlxcdFxcbjYxNjg6XFx0c3RhdGljIHZvaWQgc2hyaW5rX2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbjYxNjk6XFx0e1xcbjYxNzA6XFx0XFx0dW5zaWduZWQgbG9uZyBucltOUl9MUlVfTElTVFNdO1xcbjYxNzE6XFx0XFx0dW5zaWduZWQgbG9uZyB0YXJnZXRzW05SX0xSVV9MSVNUU107XFxuNjE3MjpcXHRcXHR1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW47XFxuNjE3MzpcXHRcXHRlbnVtIGxydV9saXN0IGxydTtcXG42MTc0OlxcdFxcdHVuc2lnbmVkIGxvbmcgbnJfcmVjbGFpbWVkID0gMDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjE6NDEuNTM5OTEzMTY1WiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NzYwNjgzOTE1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBJIGNhbid0IGRpcmVjdGx5IGNoZWNrIHRoZSBnaXQgbG9nLCBidXQgdGhlIHByb3ZpZGVkIGRpZmYgZ2l2ZXMgbWUgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBJIHNlZSB0aGF0IGEgbmV3IGhlbHBlciBmdW5jdGlvbiwgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpYCwgaXMgYmVpbmcgaW50cm9kdWNlZC4gSW50cmlndWluZy5cblxuTXkgZXhwZXJ0IGludHVpdGlvbiBpbW1lZGlhdGVseSBraWNrcyBpbiBhbmQgcmVtaW5kcyBtZSB0aGF0IHRoaXMgZnVuY3Rpb24ncyBwbGFjZW1lbnQgaXMgaW50ZXJlc3RpbmcuIEkgcmVjYWxsIHRoYXQgc2ltaWxhciBsb2dpYyB3YXMgcHJldmlvdXNseSBpbmxpbmVkIHdpdGhpbiB0aGUgTUdMUlUgY29kZSwgc3BlY2lmaWNhbGx5IGluIGBldmljdF9mb2xpb3NgLiBTbywgdGhlIHBhdGNoIHNlZW1zIHRvIGJlIGdlbmVyYWxpemluZyB0aGlzIHJldHJ5IGJlaGF2aW9yIGZvciB3cml0dGVuLWJhY2sgZm9saW9zLiBQcmV2aW91c2x5IHRoaXMgZnVuY3Rpb25hbGl0eSB3YXMgYWxyZWFkeSBoYW5kbGVkIGluIGBldmljdF9mb2xpb3NgLlxuXG5Mb29raW5nIGRlZXBlciwgSSBzZWUgdGhlIHJldHJ5IG1lY2hhbmlzbSBpcyBub3cgYmVpbmcgYWRkZWQgdG8gYHNocmlua19pbmFjdGl2ZV9saXN0YCwgd2hpY2ggaXMgcGFydCBvZiB0aGUgdHJhZGl0aW9uYWwgYWN0aXZlL2luYWN0aXZlIExSVSByZWNsYWltIHByb2Nlc3MuIFByZXZpb3VzbHksIGEgcmV0cnkgbG9vcCBmb3Igd3JpdHRlbi1iYWNrIGZvbGlvcyB3YXNuJ3QgcHJlc2VudCB0aGVyZSwgbWVhbmluZyB0aGlzIGlzIGEgbm9uLXRyaXZpYWwgY2hhbmdlLiBUaGUgcGF0Y2ggYWJzdHJhY3RzIHRoZSBjb21tb24gbG9naWMgaW50byBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYCwgc28gYm90aCBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYCBjYW4gdXNlIHRoZSBjb2RlLiBUaGlzIGlzIGRlZmluaXRlbHkgYSBzaWduaWZpY2FudCBjaGFuZ2UgdG8gbWVtb3J5IHJlY2xhbWF0aW9uIGJlaGF2aW9yIGluIGBtbS92bXNjYW4uY2AuXG5cbk1lbW9yeSByZWNsYW1hdGlvbiBpcyBhYnNvbHV0ZWx5IHJlYWNoYWJsZSBleGVjdXRhYmxlIGNvZGUsIGFuZCB0aGlzIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2dpYyBkaXJlY3RseS4gQWNjb3JkaW5nIHRvIHRoZSBmdXp6aW5nIGd1aWRlbGluZXMsIHRoYXQgaW1tZWRpYXRlbHkgdHJpZ2dlcnMgbXkgXCJXb3J0aEZ1enppbmcgPSB0cnVlXCIgZmxhZy4gVGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGNvZGUgYW5kIGl0J3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhhdCdzIGEgY2xlYXIgcG9zaXRpdmUgY3JpdGVyaW9uLlxuXG5Ob3csIEkgbmVlZCB0byBjb25zaWRlciBgRW5hYmxlQ29uZmlnc2AuIElzIHRoaXMgZnVuY3Rpb25hbGl0eSBndWFyZGVkIGJ5IHNwZWNpZmljIGBDT05GSUdfYCBvcHRpb25zPyBJIG5lZWQgdG8gY2hlY2sgaG93IGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgIGFuZCBgZXZpY3RfZm9saW9zYCBhcmUgY29tcGlsZWQuIEkgY2FuIHF1aWNrbHkgZmluZCB0aGUgZGVmaW5pdGlvbiBvZiBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGluIGBtbS92bXNjYW4uY2AuIEkgbmVlZCB0byBncmVwIGZvciBgQ09ORklHYCBkaXJlY3RpdmVzIGluIHRoYXQgYXJlYSBvZiB0aGUgY29kZSB0byB1bmRlcnN0YW5kIGlmIGl0J3MgYWx3YXlzIGluY2x1ZGVkIG9yIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIFNhbWUgZm9yIGBldmljdF9mb2xpb3NgIGFuZCBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYC4gVGhpcyB3aWxsIGhlbHAgZGV0ZXJtaW5lIGlmIHRoaXMgY29kZSBwYXRoIGlzIGFsd2F5cyBhdmFpbGFibGUgb3IgcmVxdWlyZXMgc3BlY2lmaWMga2VybmVsIGNvbmZpZ3VyYXRpb24gdG8gYmUgZW5hYmxlZCwgd2hpY2ggd2lsbCBiZSBpbXBvcnRhbnQgdG8gY29tbXVuaWNhdGUgaW4gdGhlIGZ1enplciBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODYzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTMxNCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjIxOjQ5LjE0Njc1NTEzM1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg3MjQxNDIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX2luYWN0aXZlX2xpc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9MjAyNT1zdGF0aWMgdm9pZCBoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2sodW5zaWduZWQgbG9uZyBucl90YWtlbixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIwNjMtLypcXG5tbS92bXNjYW4uYzoyMDY0OiAqIHNocmlua19pbmFjdGl2ZV9saXN0KCkgaXMgYSBoZWxwZXIgZm9yIHNocmlua19ub2RlKCkuICBJdCByZXR1cm5zIHRoZSBudW1iZXJcXG5tbS92bXNjYW4uYy0yMDY1LSAqIG9mIHJlY2xhaW1lZCBwYWdlc1xcbm1tL3Ztc2Nhbi5jLTIwNjYtICovXFxubW0vdm1zY2FuLmM6MjA2NzpzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxubW0vdm1zY2FuLmMtMjA2OC1cXHRcXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmM9MjMxNT1zdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfbGlzdChlbnVtIGxydV9saXN0IGxydSwgdW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbi0tXFxubW0vdm1zY2FuLmMtMjMyNS1cXG5tbS92bXNjYW4uYzoyMzI2OlxcdHJldHVybiBzaHJpbmtfaW5hY3RpdmVfbGlzdChucl90b19zY2FuLCBscnV2ZWMsIHNjLCBscnUpO1xcbm1tL3Ztc2Nhbi5jLTIzMjctfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMTo0OS4xOTU0ODE5MTVaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjM1NTM0NDI2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBpZiB0aGV5J3JlIG15IG93bjpcblxuKipEaWdnaW5nIGludG8gSW5hY3RpdmUgTGlzdCBNYW5hZ2VtZW50KipcblxuQWxyaWdodCwgSSdtIGRpdmluZyBpbnRvIHRoaXMgYHNocmlua19pbmFjdGl2ZV9saXN0YCBmdW5jdGlvbi4gSSdtIGdldHRpbmcgYSBmZWVsaW5nIHRoYXQgaXRzIGJlaGF2aW9yIG1pZ2h0IGJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQsIHBvdGVudGlhbGx5IHVzaW5nIHNvbWUgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZXMuIE15IGd1dCB0ZWxscyBtZSB0aGlzIGNvdWxkIGJlIHJlbGF0ZWQgdG8gc29tZSBzcGVjaWZpYyBrZXJuZWwgY29uZmlndXJhdGlvbiBvciBmZWF0dXJlLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBzY2FuIHRocm91Z2ggYG1tL3Ztc2Nhbi5jYCwgZm9jdXNpbmcgb24gdGhlIGFyZWEgYXJvdW5kIHRoZSAyMDAwIHRvIDIwNjcgbGluZSByYW5nZS4gVGhhdCBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBzdGFydCBsb29raW5nIGZvciBgI2lmZGVmYCBibG9ja3Mgb3Igb3RoZXIgY29uZGl0aW9uYWwgbG9naWMgdGhhdCBtaWdodCBiZSBjb250cm9sbGluZyB0aGUgaW5jbHVzaW9uIG9yIGV4Y2x1c2lvbiBvZiB0aGlzIGZ1bmN0aW9uYWxpdHkuIEl0J3MgYSBmYWlybHkgc3BlY2lmaWMgYXJlYSB0byBjaGVjaywgc28gaG9wZWZ1bGx5IEkgd29uJ3QgaGF2ZSB0byBzcGVuZCB0b28gbXVjaCB0aW1lIG9uIGl0LiBJJ20gbG9va2luZyBmb3IgYSBjbGVhciBleHBsYW5hdGlvbiBvZiBob3cgdGhpcyBpcyBjb250cm9sbGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDk4NCwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjIxOjUxLjU1MDgyODg5N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMjk3MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjAyMCxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjAyMDpcXHRzdGF0aWMgaW50IGN1cnJlbnRfbWF5X3Rocm90dGxlKHZvaWQpXFxuMjAyMTpcXHR7XFxuMjAyMjpcXHRcXHRyZXR1cm4gIShjdXJyZW50LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBGX0xPQ0FMX1RIUk9UVExFKTtcXG4yMDIzOlxcdH1cXG4yMDI0OlxcdFxcbjIwMjU6XFx0c3RhdGljIHZvaWQgaGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4sXFxuMjAyNjpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuMjAyNzpcXHRcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbjIwMjg6XFx0XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgcmVjbGFpbV9zdGF0ICpzdGF0KVxcbjIwMjk6XFx0e1xcbjIwMzA6XFx0XFx0LypcXG4yMDMxOlxcdFxcdCAqIElmIGRpcnR5IGZvbGlvcyBhcmUgc2Nhbm5lZCB0aGF0IGFyZSBub3QgcXVldWVkIGZvciBJTywgaXRcXG4yMDMyOlxcdFxcdCAqIGltcGxpZXMgdGhhdCBmbHVzaGVycyBhcmUgbm90IGRvaW5nIHRoZWlyIGpvYi4gVGhpcyBjYW5cXG4yMDMzOlxcdFxcdCAqIGhhcHBlbiB3aGVuIG1lbW9yeSBwcmVzc3VyZSBwdXNoZXMgZGlydHkgZm9saW9zIHRvIHRoZSBlbmQgb2ZcXG4yMDM0OlxcdFxcdCAqIHRoZSBMUlUgYmVmb3JlIHRoZSBkaXJ0eSBsaW1pdHMgYXJlIGJyZWFjaGVkIGFuZCB0aGUgZGlydHlcXG4yMDM1OlxcdFxcdCAqIGRhdGEgaGFzIGV4cGlyZWQuIEl0IGNhbiBhbHNvIGhhcHBlbiB3aGVuIHRoZSBwcm9wb3J0aW9uIG9mXFxuMjAzNjpcXHRcXHQgKiBkaXJ0eSBmb2xpb3MgZ3Jvd3Mgbm90IHRocm91Z2ggd3JpdGVzIGJ1dCB0aHJvdWdoIG1lbW9yeVxcbjIwMzc6XFx0XFx0ICogcHJlc3N1cmUgcmVjbGFpbWluZyBhbGwgdGhlIGNsZWFuIGNhY2hlLiBBbmQgaW4gc29tZSBjYXNlcyxcXG4yMDM4OlxcdFxcdCAqIHRoZSBmbHVzaGVycyBzaW1wbHkgY2Fubm90IGtlZXAgdXAgd2l0aCB0aGUgYWxsb2NhdGlvblxcbjIwMzk6XFx0XFx0ICogcmF0ZS4gTnVkZ2UgdGhlIGZsdXNoZXIgdGhyZWFkcyBpbiBjYXNlIHRoZXkgYXJlIGFzbGVlcC5cXG4yMDQwOlxcdFxcdCAqL1xcbjIwNDE6XFx0XFx0aWYgKHN0YXQtXFx1MDAzZW5yX3VucXVldWVkX2RpcnR5ID09IG5yX3Rha2VuKSB7XFxuMjA0MjpcXHRcXHRcXHR3YWtldXBfZmx1c2hlcl90aHJlYWRzKFdCX1JFQVNPTl9WTVNDQU4pO1xcbjIwNDM6XFx0XFx0XFx0LypcXG4yMDQ0OlxcdFxcdFxcdCAqIEZvciBjZ3JvdXB2MSBkaXJ0eSB0aHJvdHRsaW5nIGlzIGFjaGlldmVkIGJ5IHdha2luZyB1cFxcbjIwNDU6XFx0XFx0XFx0ICogdGhlIGtlcm5lbCBmbHVzaGVyIGhlcmUgYW5kIGxhdGVyIHdhaXRpbmcgb24gZm9saW9zXFxuMjA0NjpcXHRcXHRcXHQgKiB3aGljaCBhcmUgaW4gd3JpdGViYWNrIHRvIGZpbmlzaCAoc2VlIHNocmlua19mb2xpb19saXN0KCkpLlxcbjIwNDc6XFx0XFx0XFx0ICpcXG4yMDQ4OlxcdFxcdFxcdCAqIEZsdXNoZXIgbWF5IG5vdCBiZSBhYmxlIHRvIGlzc3VlIHdyaXRlYmFjayBxdWlja2x5XFxuMjA0OTpcXHRcXHRcXHQgKiBlbm91Z2ggZm9yIGNncm91cHYxIHdyaXRlYmFjayB0aHJvdHRsaW5nIHRvIHdvcmtcXG4yMDUwOlxcdFxcdFxcdCAqIG9uIGEgbGFyZ2Ugc3lzdGVtLlxcbjIwNTE6XFx0XFx0XFx0ICovXFxuMjA1MjpcXHRcXHRcXHRpZiAoIXdyaXRlYmFja190aHJvdHRsaW5nX3NhbmUoc2MpKVxcbjIwNTM6XFx0XFx0XFx0XFx0cmVjbGFpbV90aHJvdHRsZShwZ2RhdCwgVk1TQ0FOX1RIUk9UVExFX1dSSVRFQkFDSyk7XFxuMjA1NDpcXHRcXHR9XFxuMjA1NTpcXHRcXG4yMDU2OlxcdFxcdHNjLVxcdTAwM2Vuci5kaXJ0eSArPSBzdGF0LVxcdTAwM2Vucl9kaXJ0eTtcXG4yMDU3OlxcdFxcdHNjLVxcdTAwM2Vuci5jb25nZXN0ZWQgKz0gc3RhdC1cXHUwMDNlbnJfY29uZ2VzdGVkO1xcbjIwNTg6XFx0XFx0c2MtXFx1MDAzZW5yLndyaXRlYmFjayArPSBzdGF0LVxcdTAwM2Vucl93cml0ZWJhY2s7XFxuMjA1OTpcXHRcXHRzYy1cXHUwMDNlbnIuaW1tZWRpYXRlICs9IHN0YXQtXFx1MDAzZW5yX2ltbWVkaWF0ZTtcXG4yMDYwOlxcdFxcdHNjLVxcdTAwM2Vuci50YWtlbiArPSBucl90YWtlbjtcXG4yMDYxOlxcdH1cXG4yMDYyOlxcdFxcbjIwNjM6XFx0LypcXG4yMDY0OlxcdCAqIHNocmlua19pbmFjdGl2ZV9saXN0KCkgaXMgYSBoZWxwZXIgZm9yIHNocmlua19ub2RlKCkuICBJdCByZXR1cm5zIHRoZSBudW1iZXJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjE6NTEuNTUxMTYwNTg3WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIzNTc3Mjg4MTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0IGluIHRoZSBmaWVsZDpcblxuKipEaXZpbmcgaW50byBMUlUgUGFnZSBSZWNsYWltIExvZ2ljKipcblxuQWxyaWdodCwgc28gSSdtIGxvb2tpbmcgYXQgYHNocmlua19pbmFjdGl2ZV9saXN0KClgIGhlcmUuIFRoYXQncyB0aGUgYnJlYWQtYW5kLWJ1dHRlciBMUlUgcGFnZSByZWNsYWltIGZ1bmN0aW9uLCBhbHdheXMgY29tcGlsZWQgaW4sIHBhcnQgb2YgdGhlIHN0YW5kYXJkIG1lbW9yeSBtYW5hZ2VtZW50IGNvcmUsIHNpdHRpbmcgcmlnaHQgdGhlcmUgaW4gYHZtbGludXhgLiBOb3RoaW5nIG91dCBvZiB0aGUgb3JkaW5hcnksIHRoYXQncyB3aGF0IEknZCBleHBlY3QuIEJ1dCB0aGVuIG15IGV5ZSBjYXRjaGVzIGBldmljdF9mb2xpb3NgLiBIbW0sIHdhaXQgYSBtaW51dGUuLi4gdGhhdCdzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQhIEl0J3MgZ3VhcmRlZCBieSBhIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gLiBOb3cgdGhhdCdzIGludGVyZXN0aW5nLiBJIG5lZWQgdG8gZmlndXJlIG91dCBleGFjdGx5IHdoYXQgY29udGV4dCB0aGlzIGZ1bmN0aW9uIGlzIG9wZXJhdGluZyBpbi4gV2hlcmUgZG9lcyB0aGlzIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGNvbWUgaW50byBwbGF5PyBJIG5lZWQgdG8gY2hlY2sgd2hlcmUgdGhhdCBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBpcyBsb2NhdGVkIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBHb3R0YSB0cmFjZSB0aGlzIGJhY2sgdG8gdGhlIGNvbmZpZ3VyYXRpb24gdG8gdW5kZXJzdGFuZCB0aGUgY29kZSBwYXRoIHRoYXQgaW5jbHVkZXMgdGhlIGZvbGlvIGV2aWN0aW9uIGxvZ2ljLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTk5MSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjE6NTMuOTA4ODkyNDQ4WiIsIlNlcSI6MTQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDQ2OTI5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJDT05GSUdfTFJVX0dFTlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz05MDM9ZW51bSBmb2xpb19yZWZlcmVuY2VzIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTkwOC1cXG5tbS92bXNjYW4uYzo5MDk6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtOTEwLS8qXFxuLS1cXG5tbS92bXNjYW4uYz05NDE9c3RhdGljIGJvb2wgbHJ1X2dlbl9zZXRfcmVmcyhzdHJ1Y3QgZm9saW8gKmZvbGlvLCBjb25zdCB2bWFfZmxhZ3NfdCAqdm1hX2ZsYWdzKVxcbi0tXFxubW0vdm1zY2FuLmMtOTQ0LX1cXG5tbS92bXNjYW4uYzo5NDU6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtOTQ2LVxcbi0tXFxubW0vdm1zY2FuLmM9Mjc4Mz1zdGF0aWMgYm9vbCBjYW5fYWdlX2Fub25fcGFnZXMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vdm1zY2FuLmMtMjc5NC1cXG5tbS92bXNjYW4uYzoyNzk1OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTI3OTYtXFxubW0vdm1zY2FuLmM9Mjc5Nz1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShscnVfc3dpdGNoKTtcXG5tbS92bXNjYW4uYzoyNzk4OiNpZmRlZiBDT05GSUdfTFJVX0dFTl9FTkFCTEVEXFxubW0vdm1zY2FuLmMtMjc5OS1ERUZJTkVfU1RBVElDX0tFWV9BUlJBWV9UUlVFKGxydV9nZW5fY2FwcywgTlJfTFJVX0dFTl9DQVBTKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTI5ODM9c3RhdGljIHZvaWQgcmVzZXRfYmxvb21fZmlsdGVyKHN0cnVjdCBscnVfZ2VuX21tX3N0YXRlICptbV9zdGF0ZSwgdW5zaWduZWQgbG9uZyBzZXEpXFxuLS1cXG5tbS92bXNjYW4uYy0zMDAyLVxcbm1tL3Ztc2Nhbi5jOjMwMDM6I2lmZGVmIENPTkZJR19MUlVfR0VOX1dBTEtTX01NVVxcbm1tL3Ztc2Nhbi5jLTMwMDQtXFxuLS1cXG5tbS92bXNjYW4uYz0zMTEyPXZvaWQgbHJ1X2dlbl9taWdyYXRlX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbi0tXFxubW0vdm1zY2FuLmMtMzE0MC1cXG5tbS92bXNjYW4uYzozMTQxOiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTl9XQUxLU19NTVUgKi9cXG5tbS92bXNjYW4uYy0zMTQyLVxcbi0tXFxubW0vdm1zY2FuLmM9NjEwNz1sYXRlX2luaXRjYWxsKGluaXRfbHJ1X2dlbik7XFxubW0vdm1zY2FuLmMtNjEwOC1cXG5tbS92bXNjYW4uYzo2MTA5OiNlbHNlIC8qICFDT05GSUdfTFJVX0dFTiAqL1xcbm1tL3Ztc2Nhbi5jLTYxMTAtXFxuLS1cXG5tbS92bXNjYW4uYz02MTIxPXN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MTI1LVxcbm1tL3Ztc2Nhbi5jOjYxMjY6I2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXFxubW0vdm1zY2FuLmMtNjEyNy1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxMzItICogQGxydXZlYzogdGhlIGxydXZlY1xcbm1tL3Ztc2Nhbi5jOjYxMzM6ICogQHR5cGU6IExSVSB0eXBlIChvbmx5IHVzZWQgZm9yIENPTkZJR19MUlVfR0VOKVxcbm1tL3Ztc2Nhbi5jLTYxMzQtICogQHNraXBfcmV0cnk6IHdoZXRoZXIgc2tpcCByZXRyeS5cXG4tLVxcbm1tL3Ztc2Nhbi5jPTYxMzY9c3RhdGljIHZvaWQgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy02MTQzLVxcdGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlKGZvbGlvLCBuZXh0LCBsaXN0LCBscnUpIHtcXG5tbS92bXNjYW4uYzo2MTQ0OiNpZmRlZiBDT05GSUdfTFJVX0dFTlxcbm1tL3Ztc2Nhbi5jLTYxNDUtXFx0XFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxNTYtXFx0XFx0fVxcbm1tL3Ztc2Nhbi5jOjYxNTc6I2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmMtNjE1OC1cXHRcXHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMTo1My45NTkzNjc0MloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo0MDU2ODg1MjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTFJVIEdlbmVyYXRpb24gQ29kZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AsIGFuZCBpbW1lZGlhdGVseSBJIHNlZSBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBzY2F0dGVyZWQgdGhyb3VnaG91dC4gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBjaGVjayBpZiBgZXZpY3RfZm9saW9zYCwgd2hpY2ggaXMgKmFsc28qIHVuZGVyIHRoZSBgI2lmZGVmIENPTkZJR19MUlVfR0VOYCBibG9jaywgaXMgc29tZWhvdyBpbnRlcnR3aW5lZCB3aXRoIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAuIEJ1dCBubywgYHNocmlua19pbmFjdGl2ZV9saXN0YCBpcyB0aGUgc3RhbmRhcmQgYWN0aXZlL2luYWN0aXZlIExSVSByZWNsYWltLCBzbyBpdCBpcyBzZXBhcmF0ZS5cblxuSG93ZXZlciwgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AgKml0c2VsZiogaXMgZGVmaW5lZCBvdXRzaWRlIHRoZSBjb25kaXRpb25hbCBibG9jayDigJMgaXQncyBhZnRlciB0aGUgYCNlbmRpZiAvKiBDT05GSUdfTFJVX0dFTiAqL2Agb24gbGluZSA2MTI2LiBJbnRyaWd1aW5nLiBCdXQgd2l0aGluIHRoaXMgZnVuY3Rpb24sIHRoZXJlIGFyZSBzZWN0aW9ucyB0aGF0ICphcmUqIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgYmFzZWQgb24gYENPTkZJR19MUlVfR0VOYC4gSSBzZWUgY29kZSBibG9ja3MgbGlrZSB0aGlzOlxuXG5gYGBjXG4jaWZkZWYgQ09ORklHX0xSVV9HRU5cblx0XHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuI2VuZGlmXG4uLi5cbiNpZmRlZiBDT05GSUdfTFJVX0dFTlxuXHRcdC8qIGRvbid0IGFkZCByZWplY3RlZCBmb2xpb3MgdG8gdGhlIG9sZGVzdCBnZW5lcmF0aW9uICovXG5cdFx0aWYgKGxydXZlYy1cdTAwM2VscnVnZW4uZW5hYmxlZCBcdTAwMjZcdTAwMjZcblx0XHQgICAgbHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcblx0XHRcdGZvbGlvX3NldF9scnVfcmVmcyhmb2xpbywgMCk7XG5cdFx0XHRmb2xpb19zZXRfYWN0aXZlKGZvbGlvKTtcblx0XHR9XG4jZW5kaWZcbmBgYFxuXG5BbmQgdGhlbiBJJ20gcmVtaW5kZWQgdGhhdCBgZXZpY3RfZm9saW9zYCB3YXMgbW9kaWZpZWQgYXMgd2VsbCwgYW5kIHRoYXQgaXMgdW5kZXIgdGhlIGAjaWZkZWYgQ09ORklHX0xSVV9HRU5gIGJsb2NrLiBUaGlzIGlzIGEgYml0IGNvbmZ1c2luZy4gSXMgTFJVIGdlbmVyYXRpb24gZXZlbiBlbmFibGVkIGJ5IGRlZmF1bHQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBgQ09ORklHX0xSVV9HRU5gIGNvbmZpZ3VyYXRpb24gb3B0aW9uIGlzLiBMZXQgbWUgc2VhcmNoIGZvciBgY29uZmlnIExSVV9HRU5gIGluIGBtbS9LY29uZmlnYCB0byBnZXQgdGhlIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzMjU3LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzQ4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjIxOjU4LjAxNjI1NTEyOFoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTI5MjI5NzEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIExSVV9HRU5cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL0tjb25maWc9MTM4OD1jb25maWcgUFRFX01BUktFUl9VRkZEX1dQXFxuLS1cXG5tbS9LY29uZmlnLTEzOTgtIyBtdWx0aS1nZW4gTFJVIHtcXG5tbS9LY29uZmlnOjEzOTk6Y29uZmlnIExSVV9HRU5cXG5tbS9LY29uZmlnLTE0MDAtXFx0Ym9vbCBcXFwiTXVsdGktR2VuIExSVVxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQwNy1cXG5tbS9LY29uZmlnOjE0MDg6Y29uZmlnIExSVV9HRU5fRU5BQkxFRFxcbm1tL0tjb25maWctMTQwOS1cXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4tLVxcbm1tL0tjb25maWctMTQxMy1cXG5tbS9LY29uZmlnOjE0MTQ6Y29uZmlnIExSVV9HRU5fU1RBVFNcXG5tbS9LY29uZmlnLTE0MTUtXFx0Ym9vbCBcXFwiRnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDIyLVxcbm1tL0tjb25maWc6MTQyMzpjb25maWcgTFJVX0dFTl9XQUxLU19NTVVcXG5tbS9LY29uZmlnLTE0MjQtXFx0ZGVmX2Jvb2wgeVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMTo1OC4wNjkxODM4ODlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6Mjg1MDEyMjY1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byB0aGUgS2NvbmZpZyBvZiBNZW1vcnkgTWFuYWdlbWVudCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZGlnIGludG8gdGhlIGBtbS9LY29uZmlnYCBmaWxlLiBTcGVjaWZpY2FsbHksIEknbSBhaW1pbmcgZm9yIGFyb3VuZCBsaW5lIDEzOTguIE15IGludHVpdGlvbiB0ZWxscyBtZSB0aGF0J3Mgd2hlcmUgSSdsbCBmaW5kIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgcmVsYXRlZCB0byBbKioqWW91IHdvdWxkIGFkZCB0aGUgc3BlY2lmaWMgdG9waWMgb3IgZmVhdHVyZSB5b3UgYXJlIGludGVyZXN0ZWQgaW4gaGVyZSBiYXNlZCBvbiB5b3VyIGV4cGVydGlzZS4gRm9yIGV4YW1wbGU6IFwiTlVNQSBiYWxhbmNpbmcsXCIgXCJrZXJuZWwgY29tcGFjdGlvbixcIiBcIm1lbW9yeSBob3RwbHVnLFwiIGV0Yy4qXHUwMDNjL3N0cm9uZ1x1MDAzZV0uIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoZSBkZXBlbmRlbmNpZXMsIGhlbHAgdGV4dCwgYW5kIGRlZmF1bHQgdmFsdWVzIGZvciB0aG9zZSBvcHRpb25zLCBhbG9uZyB3aXRoIGFueSBwb3RlbnRpYWxseSByZWxldmFudCBjb21tZW50cy4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIGFueSBjbHVlcyBhYm91dCBob3cgdGhlc2UgZmVhdHVyZXMgaW50ZXJhY3Qgd2l0aCBvdGhlcnMuIEnigJltIHRoaW5raW5nIEnigJlsbCB1c2UgbXkga25vd2xlZGdlIHRvIHRyeSBhbmQgYW50aWNpcGF0ZSB0aGUgZmxvdyBvZiBsb2dpYyBmcm9tIHRoZXJlLiBJJ2xsIGJlIHBhcnRpY3VsYXJseSBpbnRlcmVzdGVkIGluIGFueXRoaW5nIHJlbGF0ZWQgdG8gWyoqKllvdSB3b3VsZCBhZGQgYSBzcGVjaWZpYyBjb25jZXJuIG9yIGludGVyZXN0IGJhc2VkIG9uIHRoZSBjb250ZXh0LiBGb3IgZXhhbXBsZTogXCJwZXJmb3JtYW5jZSBpbXBsaWNhdGlvbnMsXCIgXCJzZWN1cml0eSBjb25zaWRlcmF0aW9ucyxcIiBcInNwZWNpZmljIGhhcmR3YXJlIHN1cHBvcnQsXCIgZXRjLipcdTAwM2Mvc3Ryb25nXHUwMDNlXS4gSG9wZWZ1bGx5LCB0aGUgS2NvbmZpZyB3aWxsIGlsbHVtaW5hdGUgc29tZSBvZiB0aG9zZSBkZXRhaWxzLCB3aGljaCBhcmUgb2Z0ZW4ga2V5LiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IGluIHRoZXJlLiBJJ20gcmVhZHkgdG8gZmluZCBvdXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0Mjg2LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjI6MDAuOTE5MzA4NjExWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDE0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEzOTgsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjEzOTg6XFx0IyBtdWx0aS1nZW4gTFJVIHtcXG4xMzk5OlxcdGNvbmZpZyBMUlVfR0VOXFxuMTQwMDpcXHRcXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbjE0MDE6XFx0XFx0ZGVwZW5kcyBvbiBNTVVcXG4xNDAyOlxcdFxcdCMgbWFrZSBzdXJlIGZvbGlvLVxcdTAwM2VmbGFncyBoYXMgZW5vdWdoIHNwYXJlIGJpdHNcXG4xNDAzOlxcdFxcdGRlcGVuZHMgb24gNjRCSVQgfHwgIVNQQVJTRU1FTSB8fCBTUEFSU0VNRU1fVk1FTU1BUFxcbjE0MDQ6XFx0XFx0aGVscFxcbjE0MDU6XFx0XFx0ICBBIGhpZ2ggcGVyZm9ybWFuY2UgTFJVIGltcGxlbWVudGF0aW9uIHRvIG92ZXJjb21taXQgbWVtb3J5LiBTZWVcXG4xNDA2OlxcdFxcdCAgRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9tbS9tdWx0aWdlbl9scnUucnN0IGZvciBkZXRhaWxzLlxcbjE0MDc6XFx0XFxuMTQwODpcXHRjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxuMTQwOTpcXHRcXHRib29sIFxcXCJFbmFibGUgYnkgZGVmYXVsdFxcXCJcXG4xNDEwOlxcdFxcdGRlcGVuZHMgb24gTFJVX0dFTlxcbjE0MTE6XFx0XFx0aGVscFxcbjE0MTI6XFx0XFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtdWx0aS1nZW4gTFJVIGJ5IGRlZmF1bHQuXFxuMTQxMzpcXHRcXG4xNDE0OlxcdGNvbmZpZyBMUlVfR0VOX1NUQVRTXFxuMTQxNTpcXHRcXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuMTQxNjpcXHRcXHRkZXBlbmRzIG9uIExSVV9HRU5cXG4xNDE3OlxcdFxcdGhlbHBcXG4xNDE4OlxcdFxcdCAgRG8gbm90IGVuYWJsZSB0aGlzIG9wdGlvbiB1bmxlc3MgeW91IHBsYW4gdG8gbG9vayBhdCBoaXN0b3JpY2FsIHN0YXRzXFxuMTQxOTpcXHRcXHQgIGZyb20gZXZpY3RlZCBnZW5lcmF0aW9ucyBmb3IgZGVidWdnaW5nIHB1cnBvc2UuXFxuMTQyMDpcXHRcXG4xNDIxOlxcdFxcdCAgVGhpcyBvcHRpb24gaGFzIGEgcGVyLW1lbWNnIGFuZCBwZXItbm9kZSBtZW1vcnkgb3ZlcmhlYWQuXFxuMTQyMjpcXHRcXG4xNDIzOlxcdGNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbjE0MjQ6XFx0XFx0ZGVmX2Jvb2wgeVxcbjE0MjU6XFx0XFx0ZGVwZW5kcyBvbiBMUlVfR0VOIFxcdTAwMjZcXHUwMDI2IEFSQ0hfSEFTX0hXX1BURV9ZT1VOR1xcbjE0MjY6XFx0IyB9XFxuMTQyNzpcXHRcXG4xNDI4OlxcdGNvbmZpZyBMT0NLX01NX0FORF9GSU5EX1ZNQVxcbjE0Mjk6XFx0XFx0Ym9vbFxcbjE0MzA6XFx0XFx0ZGVwZW5kcyBvbiAhU1RBQ0tfR1JPV1NVUFxcbjE0MzE6XFx0XFxuMTQzMjpcXHRjb25maWcgSU9NTVVfTU1fREFUQVxcbjE0MzM6XFx0XFx0Ym9vbFxcbjE0MzQ6XFx0XFxuMTQzNTpcXHRjb25maWcgRVhFQ01FTVxcbjE0MzY6XFx0XFx0Ym9vbFxcbjE0Mzc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjIyOjAwLjkxOTQxMTYwMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2OTc1MjU4NzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IERlZXAgRGl2ZSBpbnRvIE11bHRpLUdlbiBMUlUgYW5kIENvbmZpZ3VyYXRpb24gRGVwZW5kZW5jaWVzKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byB0aGlzIE11bHRpLUdlbiBMUlUgc3R1ZmYuIEl0IGxvb2tzIGxpa2UgYENPTkZJR19MUlVfR0VOYCBpcyB0aGUga2V5IGVuYWJsZXIsIGFuZCBpdCdzIGVzc2VudGlhbCBiZWNhdXNlIGl0IGVuYWJsZXMgdGhpbmdzIGxpa2UgYGV2aWN0X2ZvbGlvc2AsIHdoaWNoIEkgc2VlIGlzIG9ubHkgY29tcGlsZWQgd2hlbiBgQ09ORklHX0xSVV9HRU5gIGlzIHNldC4gQWxzbywgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpYCBoYXMgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYmFzZWQgb24gYENPTkZJR19MUlVfR0VOYC4gSSdtIHN0YXJ0aW5nIHRvIGdldCB0aGUgcGljdHVyZS4gRXZlbiB0aG91Z2ggYHNocmlua19pbmFjdGl2ZV9saXN0YCBpcyBjb21waWxlZCByZWdhcmRsZXNzLCB3aGVuIGBMUlVfR0VOYCBpcyBlbmFibGVkIGF0IHJ1bnRpbWUsIGl0IGNhbGxzIGBscnVfZ2VuX3Nocmlua19ub2RlKClgIGluc3RlYWQsIHNvIGNsZWFybHkgYENPTkZJR19MUlVfR0VOYCBkcml2ZXMgdGhlIE1HTFJVIGJlaGF2aW9yLlxuXG5SaWdodCwgc28gdG8gbWFrZSBzdXJlIEknbSBmb2xsb3dpbmcgdGhpcywgZW5hYmxpbmcgYExSVV9HRU5gIGlzICpyZXF1aXJlZCogZm9yIGJvdGggYGV2aWN0X2ZvbGlvc2AgYW5kIHRoZSBNR0xSVS1zcGVjaWZpYyBjb2RlIHdpdGhpbiBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKClgLiBJdOKAmXMgbGlrZSB0aGUgZm91bmRhdGlvbiBmb3IgdGhpcyB3aG9sZSBmZWF0dXJlLiBPa2F5LCBzaG91bGQgdGhpcyBiZSBpbiBgRW5hYmxlQ29uZmlnc2A/XG5cblllcywgYExSVV9HRU5gIGVuYWJsZXMgYm90aCBgZXZpY3RfZm9saW9zYCBhbmQgdGhlIGBDT05GSUdfTFJVX0dFTmAgcGF0aHMgaW4gYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpYC5cblxuSG9sZCBvbiwgaXMgYExSVV9HRU5gIGV2ZW4gZW5hYmxlZCBieSBkZWZhdWx0PyBDaGVja2luZyB0aGUgY29uZmlnLCBpdOKAmXMgYSBib29sZWFuIHdpdGggbm8gZGVmYXVsdC4gVGhhdCBtZWFucyBpdCBoYXMgdG8gYmUgZXhwbGljaXRseSBzZXQuIFNvLCBgTFJVX0dFTmAgKGFuZCBwb3RlbnRpYWxseSBgTFJVX0dFTl9FTkFCTEVEYCkgaXMgbmVlZGVkIHRvIGV2ZW4gY29tcGlsZSBhbmQgcmVhY2ggYGV2aWN0X2ZvbGlvc2AhIFRoaXMgaXMgY3JpdGljYWwuXG5cbkFscmlnaHQsIHdoYXQgb3RoZXIgY29uZmlncyBhcmUgaW52b2x2ZWQ/IExldCdzIHNlZSB3aGF0IGBMUlVfR0VOYCBkZXBlbmRzIG9uLiBJdCBsb29rcyBsaWtlIGl0IG5lZWRzIGBNTVVgIGFuZCBhIGJpdCBvZiBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgc3R1ZmYgKGA2NEJJVCB8fCAhU1BBUlNFTUVNIHx8IFNQQVJTRU1FTV9WTUVNTUFQYCkuIE9uIGFtZDY0LCB0aGF0J3Mgbm90IGEgY29uY2Vybi4gU28sIGBMUlVfR0VOYCBpcyB0aGUgY29uZmlnIG9wdGlvbiBJIG5lZWQgdG8gYmUgYXdhcmUgb2YuXG5cbk5vdywgYWJvdXQgRm9jdXNTeW1ib2xzLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW1wb3J0YW50IGZ1bmN0aW9ucy4gTGV0J3Mgc2VlOlxuXG4xLiAgYHNocmlua19pbmFjdGl2ZV9saXN0YCAtIFRoaXMgaXMgYSBzdGF0aWMgZnVuY3Rpb24gaW4gYG1tL3Ztc2Nhbi5jYCB0aGF0J3MgYmVlbiBtb2RpZmllZCB0byBoYW5kbGUgY2xlYW4gZm9saW9zLlxuMi4gIGBldmljdF9mb2xpb3NgIC0gQWxzbyBpbiBgbW0vdm1zY2FuLmNgLCBhbmQgaXQncyBiZWVuIGFsdGVyZWQgdG8gdXNlIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgLlxuMy4gIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgIC0gQW5kIGZpbmFsbHksIGEgbmV3IHN0YXRpYyBmdW5jdGlvbiBpbiBgbW0vdm1zY2FuLmNgLlxuXG5XYWl0LCBhcmUgdGhlc2Ugc3RhdGljIGZ1bmN0aW9ucz8gWWVzLCB0aGV5IGFyZSFcblxuYHN0YXRpYyB2b2lkIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayguLi4pYFxuYHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KC4uLilgXG5gc3RhdGljIGludCBldmljdF9mb2xpb3MoLi4uKWBcblxuQXJlIHRoZXNlIGZ1bmN0aW9ucyBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciwgb3IgZG8gdGhleSBleGlzdCBhcyBhY3R1YWwgc3ltYm9scz8gSSBuZWVkIHRvIGtub3cgdGhlaXIgY2FsbGVycy4gVGhhdOKAmXMgd2hlcmUgdGhlIFwiRm9jdXNTeW1ib2xzXCIgZ3VpZGFuY2UgY29tZXMgaW4gaGFuZHkuIEl0IGRpZmZlcmVudGlhdGVzIGJldHdlZW4gY29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIGluIGhlYWRlcnMgKC5oKSBhbmQgdGhvc2UgZGVmaW5lZCBpbiAuYyBmaWxlcy4gVGhlIGd1aWRhbmNlIHN1Z2dlc3RzIGZvY3VzaW5nIG9uICpub24tc3RhdGljKiBjYWxsZXIgZnVuY3Rpb25zIHRoYXQgZXhlcmNpc2UgdGhlc2UgaW5saW5lIGhlbHBlcnMuXG5cblNvLCBzaW5jZSB0aGVzZSBzdGF0aWMgZnVuY3Rpb25zIGFyZSBpbiBhIGAuY2AgZmlsZSwgdGhleSAqdXN1YWxseSogaGF2ZSBzeW1ib2xzLCBlc3BlY2lhbGx5IGluIEtBU0FOL2Z1enppbmcgYnVpbGRzLCBsaWtlIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgYW5kIGBldmljdF9mb2xpb3NgLiBJIHdpbGwgbmVlZCB0byBjaGVjayB3aGV0aGVyIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgIGlzIGlubGluZWQgYnkgR0NDLiBIb3dldmVyLCBFdmVuIGlmIGl0J3MgaW5saW5lZCwgSSBjYW4gc3BlY2lmeSB0aGUgZnVuY3Rpb25zIEknbSBpbnRlcmVzdGVkIGluLCBvciB0aGVpciBkaXJlY3QgY2FsbGVycyBpZiBhcHByb3ByaWF0ZSFcblxuSSdsbCBzdGFydCBieSBjaGVja2luZyB0aGUgY2FsbGVycyBvZiBgc2hyaW5rX2luYWN0aXZlX2xpc3RgIGFuZCBgZXZpY3RfZm9saW9zYCBpbiBgbW0vdm1zY2FuLmNgLiBUaGlzIGlzIHRoZSBrZXkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MTQwLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcwLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjI6MDcuODk0NjcyOTAxWiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NzUyNDcwMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzaHJpbmtfaW5hY3RpdmVfbGlzdFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0yMDI1PXN0YXRpYyB2b2lkIGhhbmRsZV9yZWNsYWltX3dyaXRlYmFjayh1bnNpZ25lZCBsb25nIG5yX3Rha2VuLFxcbi0tXFxubW0vdm1zY2FuLmMtMjA2My0vKlxcbm1tL3Ztc2Nhbi5jOjIwNjQ6ICogc2hyaW5rX2luYWN0aXZlX2xpc3QoKSBpcyBhIGhlbHBlciBmb3Igc2hyaW5rX25vZGUoKS4gIEl0IHJldHVybnMgdGhlIG51bWJlclxcbm1tL3Ztc2Nhbi5jLTIwNjUtICogb2YgcmVjbGFpbWVkIHBhZ2VzXFxubW0vdm1zY2FuLmMtMjA2Ni0gKi9cXG5tbS92bXNjYW4uYzoyMDY3OnN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy0yMDY4LVxcdFxcdHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYz0yMzE1PXN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19saXN0KGVudW0gbHJ1X2xpc3QgbHJ1LCB1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXFxuLS1cXG5tbS92bXNjYW4uYy0yMzI1LVxcbm1tL3Ztc2Nhbi5jOjIzMjY6XFx0cmV0dXJuIHNocmlua19pbmFjdGl2ZV9saXN0KG5yX3RvX3NjYW4sIGxydXZlYywgc2MsIGxydSk7XFxubW0vdm1zY2FuLmMtMjMyNy19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjIyOjA3Ljk0MjIwMjEyM1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTk5NTY3NjQ3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgYHNocmlua19saXN0YCBhbmQgYGV2aWN0X2ZvbGlvc2AgQ2FsbGVycyoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIGBzaHJpbmtfbGlzdGAgYW5kIGBldmljdF9mb2xpb3NgLiBUaGUgZmlyc3Qgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byB0cmFjZSB0aGVpciBjYWxsIHNpdGVzLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hvKiBpcyBjYWxsaW5nIHRoZXNlIGZ1bmN0aW9ucyBhbmQsIGp1c3QgYXMgaW1wb3J0YW50bHksICp3aHkqLiBLbm93aW5nIHRoZSB1cHN0cmVhbSBsb2dpYyB3aWxsIHByb3ZpZGUgYWxsIHRoZSBuZWNlc3NhcnkgaW5mb3JtYXRpb24gdG8gaW50ZXJwcmV0IHdoYXQgaXMgaGFwcGVuaW5nIGluc2lkZS4gV2hhdCBtb2R1bGVzLCBzdWJzeXN0ZW1zLCBvciB0aHJlYWRzIGFyZSByZWx5aW5nIG9uIHRoZWlyIGJlaGF2aW9yPyBBcmUgd2UgdGFsa2luZyBhYm91dCBhIGNydWNpYWwgcGFydCBvZiBtZW1vcnkgbWFuYWdlbWVudCBvciBzb21ldGhpbmcgYW5jaWxsYXJ5PyBUaGlzIGluZm9ybWF0aW9uIGlzIGVzc2VudGlhbCBmb3IgZXZlbiBnZXR0aW5nIHN0YXJ0ZWQgaW4gdW5kZXJzdGFuZGluZyBwZXJmb3JtYW5jZSBib3R0bGVuZWNrcyBvciBwb3RlbnRpYWwgYnVncy4gTGV0J3MgZGlnIGluIGFuZCBzZWUgd2hhdCB3ZSBjYW4gZmluZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTcxNjEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMjoxMC4xNDE3NzI1NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4OTI2OTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNocmlua19saXN0XFxcXChcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9NzY9c3RydWN0IHNjYW5fY29udHJvbCB7XFxubW0vdm1zY2FuLmM6Nzc6XFx0LyogSG93IG1hbnkgcGFnZXMgc2hyaW5rX2xpc3QoKSBzaG91bGQgcmVjbGFpbSAqL1xcbm1tL3Ztc2Nhbi5jLTc4LVxcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTIyODI9dW5zaWduZWQgbG9uZyByZWNsYWltX3BhZ2VzKHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QpXFxuLS1cXG5tbS92bXNjYW4uYy0yMzE0LVxcbm1tL3Ztc2Nhbi5jOjIzMTU6c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2xpc3QoZW51bSBscnVfbGlzdCBscnUsIHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy0yMzE2LVxcdFxcdFxcdFxcdCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmM9NjE2OD1zdGF0aWMgdm9pZCBzaHJpbmtfbHJ1dmVjKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MjE2LVxcbm1tL3Ztc2Nhbi5jOjYyMTc6XFx0XFx0XFx0XFx0bnJfcmVjbGFpbWVkICs9IHNocmlua19saXN0KGxydSwgbnJfdG9fc2NhbixcXG5tbS92bXNjYW4uYy02MjE4LVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBscnV2ZWMsIHNjKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjI6MTAuMzAwNzA2NzU0WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYyNjk3MzIzMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBmaXJzdC1wZXJzb24gYWNjb3VudCwgZm9jdXNpbmcgb24gdGhlIGNvcmUgY29uY2VwdCBhbmQgYXNzdW1pbmcgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbnNpZGVyaW5nIHRoZSBgZXZpY3RfZm9saW9zYCBGdW5jdGlvbiBDYWxsKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgc3BlY2lmaWNhbGx5LCB0aGUgY2FsbHMgdG8gYGV2aWN0X2ZvbGlvc2AuIFRoaXMgZnVuY3Rpb24gY2FsbCBpcyBrZXkgaGVyZS4gRXNzZW50aWFsbHksIHdoZW5ldmVyIEkgc2VlIGBldmljdF9mb2xpb3NgLCBJIGltbWVkaWF0ZWx5IHN0YXJ0IHRoaW5raW5nIGFib3V0IG1lbW9yeSBwcmVzc3VyZSBhbmQgY2FjaGUgbWFuYWdlbWVudC4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgbmFtZSwgaXQncyBhYm91dCByZWNsYWltaW5nIHBoeXNpY2FsIG1lbW9yeSBvY2N1cGllZCBieSBwYWdlIGZyYW1lcyAoZm9saW9zKSB0aGF0IGFyZSBhc3NvY2lhdGVkIHdpdGggYSBjYWNoZSBvZiBzb21lIHNvcnQuXG5cblRoZSBjb250ZXh0IG9mICp3aGVuKiB0aGlzIGZ1bmN0aW9uIGlzIGJlaW5nIGNhbGxlZCBpcyBjcnVjaWFsLiBJcyBpdCB0cmlnZ2VyZWQgYnkgZXhwbGljaXQgcmVxdWVzdHMgZm9yIG1lbW9yeSByZWNsYW1hdGlvbiwgbGlrZSBhIGxvdyBtZW1vcnkgc2lnbmFsIGZyb20gdGhlIE9TPyBPciwgaXMgaXQgbW9yZSBwcm9hY3RpdmUsIHBhcnQgb2YgYSBiYWNrZ3JvdW5kIHByb2Nlc3MgdHJ5aW5nIHRvIG1haW50YWluIGEgZGVzaXJlZCBsZXZlbCBvZiBmcmVlIG1lbW9yeT8gSXMgaXQgcmVhY3RpbmcgdG8gdGhlIHVzYWdlIG9mIG90aGVyIHBhcnRzIG9mIHRoZSBzeXN0ZW0gYW5kIHJlYWN0aW5nIGJhc2VkIG9uIGhvdyBtZW1vcnkgaXMgdXRpbGl6ZWQgYnkgb3RoZXJzPyBFaXRoZXIgd2F5IGl0IHdpbGwgZGljdGF0ZSB3aGF0IHRyYWRlLW9mZnMgYXJlIGJlaW5nIGNvbnNpZGVyZWQuXG5cbkkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdHJpZ2dlcnMgdGhlIGV2aWN0aW9uLiBJcyBpdCBMUlUtYmFzZWQ/IElzIGl0IHRpZWQgdG8gc3BlY2lmaWMgdHlwZXMgb2YgbWVtb3J5IHBhZ2VzIChlLmcuLCBhbm9ueW1vdXMgcGFnZXMsIGZpbGUtYmFja2VkIHBhZ2VzLCBvciBodWdlIHBhZ2VzKT8gV2hhdCdzIHRoZSBldmljdGlvbiBwb2xpY3k/IElzIHRoZXJlIGEgZmFpcm5lc3MgY29uc2lkZXJhdGlvbj9cblxuQmV5b25kIHRoYXQsIEknbSB0aGlua2luZyBhYm91dCB0aGUgcGVyZm9ybWFuY2UgaW1wbGljYXRpb25zLiBFdmljdGluZyBwYWdlcyB0byBkaXNrIChpZiBpdCdzIG5vdCBhIG1lbW9yeS1vbmx5IGNhY2hlKSBpcyBhIGNvc3RseSBvcGVyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb3N0cyBhc3NvY2lhdGVkIHdpdGggdGhlIGV2aWN0aW9uLiBIb3cgYXJlIHRoZSBmb2xpbyBjb250ZW50cyBoYW5kbGVkPyBBcmUgdGhlcmUgZGlydHkgcGFnZXM/IFdoYXQgYWJvdXQgVExCIGludmFsaWRhdGlvbj8gSXMgdGhlIGV2aWN0aW9uIHN5bmNocm9ub3VzIG9yIGFzeW5jaHJvbm91cz9cblxuVGhlIG92ZXJhbGwgZ29hbCBvZiBgZXZpY3RfZm9saW9zYCwgYW5kIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCBvdGhlciBzeXN0ZW0gY29tcG9uZW50cywgaXMgd2hhdCBJIG5lZWQgdG8gc2VlIHRvIGtub3cgaG93IHRvIGltcHJvdmUgcGVyZm9ybWFuY2Ugb3IgdG8gZGV0ZXJtaW5lIGlmIHRoZSBsb2dpYyBpcyBzYWZlLlxuXG5TbyB0aGUgY2FsbCBpdHNlbGYsIGFuZCBhbGwgdGhlIHN1cnJvdW5kaW5nIGxvZ2ljIHdpbGwgZ3VpZGUgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgc3lzdGVtJ3MgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjU3LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMjoxNi41NzA0NDEyMTZaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5Njg3NTAzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImV2aWN0X2ZvbGlvc1xcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTQ5OTU9c3RhdGljIGludCBpc29sYXRlX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUwMzgtXFxubW0vdm1zY2FuLmM6NTAzOTpzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYy01MDQwLVxcdFxcdFxcdHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxOTc9c3RhdGljIGJvb2wgdHJ5X3RvX3Nocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUyMjAtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fc2NhbiwgTUlOX0xSVV9CQVRDSCk7XFxubW0vdm1zY2FuLmM6NTIyMTpcXHRcXHRkZWx0YSA9IGV2aWN0X2ZvbGlvcyhucl9iYXRjaCwgbHJ1dmVjLCBzYywgc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmMtNTIyMi1cXHRcXHRpZiAoIWRlbHRhKVxcbi0tXFxubW0vdm1zY2FuLmM9NTgzOD1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4NTgtXFx0XFx0bnJfYmF0Y2ggPSBtaW4obnJfdG9fcmVjbGFpbSAtIHNjLVxcdTAwM2Vucl9yZWNsYWltZWQsIE1BWF9MUlVfQkFUQ0gpO1xcbm1tL3Ztc2Nhbi5jOjU4NTk6XFx0XFx0aWYgKCFldmljdF9mb2xpb3MobnJfYmF0Y2gsIGxydXZlYywgc2MsIHN3YXBwaW5lc3MpKVxcbm1tL3Ztc2Nhbi5jLTU4NjAtXFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjIyOjE2LjYyMDEzNzA5OVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxMDEwOTQ0Mjg5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEltcGFjdCBvZiBUaGVzZSBQYXRjaCBNb2RpZmljYXRpb25zKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIHNjYW4gb2YgdGhlIHBhdGNoIGhpZ2hsaWdodHMgbW9kaWZpY2F0aW9ucyB0byBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLCBgZXZpY3RfZm9saW9zYCwgYW5kIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgLiBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGVzZSBmdW5jdGlvbnMgZmFsbCBpbnRvIHRoZSBcInViaXF1aXRvdXMgbGlmZWN5Y2xlIGhvdC1wYXRoXCIgY2F0ZWdvcnksIGFzIGRlZmluZWQgaW4gdGhlIGZ1enppbmcgZ3VpZGVsaW5lcy4gV2UgZGVmaW5pdGVseSBkb24ndCB3YW50IHRvIGRpbHV0ZSBvdXIgZnV6emluZyBlZmZvcnQgYnkgaW5jb3JyZWN0bHkgY2xhc3NpZnlpbmcgdGVzdHMuXG5cbkknbSBwcmV0dHkgY29uZmlkZW50IHRoZXkgZG9uJ3QuIFRoZXNlIGFyZSBzcGVjaWZpYyBtZW1vcnkgcmVjbGFpbSBmdW5jdGlvbnMsIGFuZCB0aGV5J3JlIG5vdCBnZW5lcmFsIGFsbG9jYXRvcnMgb3IgZGVhbGxvY2F0b3JzLiBUaGV5IHJ1biB1bmRlciBtZW1vcnkgcHJlc3N1cmUgc2NlbmFyaW9zLCBsaWtlIGtzd2FwZCwgZGlyZWN0IHJlY2xhaW0sIGNvbXBhY3Rpb24sIGFuZCBtYWR2aXNlLiBMaXN0aW5nIHRoZXNlIGZ1bmN0aW9ucyAqc3BlY2lmaWNhbGx5KiB0YXJnZXRzIHRoZSBsb2dpYyBhbHRlcmVkIG9yIGFkZGVkIGJ5IHRoZSBwYXRjaCwgc28gd2UncmUgZ29vZCB0aGVyZS5cblxuTm93LCBsZXQncyBjb25maXJtIHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gYENPTkZJR19MUlVfR0VOYCBqdW1wcyBvdXQuIEEgcXVpY2sgY2hlY2sgcmV2ZWFscyB0aGF0IGBldmljdF9mb2xpb3NgIGFuZCBwYXJ0cyBvZiBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYCBhcmUgZ2F0ZWQgYnkgdGhpcyBjb25maWcuIFdpdGhvdXQgYExSVV9HRU5gLCBgZXZpY3RfZm9saW9zYCBpc24ndCBjb21waWxlZCBhdCBhbGwsIGFuZCBhIHNpZ25pZmljYW50IHBvcnRpb24gb2YgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AgaXMgb21pdHRlZC4gV2l0aCBgTFJVX0dFTmAgZW5hYmxlZCwgYWxsIHRocmVlIGZ1bmN0aW9ucyBhcmUgaW5jbHVkZWQuXG5cbkhvbGQgb24sIGBDT05GSUdfTFJVX0dFTl9FTkFCTEVEYCBhbHNvIHNlZW1zIHJlbGV2YW50LiBEaWdnaW5nIGEgYml0LCBpdCBsb29rcyBsaWtlIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgcnVucyB3aGV0aGVyIE1HTFJVIGlzIGVuYWJsZWQgb3Igbm90LCBmb3Igbm9uLU1HTFJVIHBhdGhzLCB3aGlsZSBgZXZpY3RfZm9saW9zYCBydW5zIHdoZW4gTUdMUlUgKmlzKiBhY3RpdmUuIEJ1dCwgaWYgYExSVV9HRU5gIGlzIGVuYWJsZWQsIGJvdGggZnVuY3Rpb25zIGFyZSBjb21waWxlZC4gU28sIHdlIGRlZmluaXRpdmVseSBuZWVkIGBMUlVfR0VOYCB0byBjb21waWxlIGFsbCB0aGUgY29kZSBtb2RpZmllZCBieSB0aGUgcGF0Y2guXG5cbkZpbmFsbHksIGp1c3QgdG8gYmUgdGhvcm91Z2gsIEkgc2hvdWxkIGNoZWNrIHRoZSBtYWtlZmlsZXMgdG8gc2VlIGlmIGB2bXNjYW4uY2AgaXMgZ3VhcmRlZCBieSBhbnkgb3RoZXIgY29uZmlncy4gSXQgbG9va3MgbGlrZSBpdCBpcyBjb21waWxlZCBpbnRvIG9iai15IGluIGBtbS9NYWtlZmlsZWAuIFdlIGNhbiBtb3ZlIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODUwNCwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjYyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMjoyNi43Mjk1ODMxMjRaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUxNjUzOTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtc2NhblxcXFwub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9NTE9b2JqLXlcXHRcXHRcXHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXFxcXG5tbS9NYWtlZmlsZS01Mi1cXHRcXHRcXHQgICBtYWNjZXNzLm8gcGFnZS13cml0ZWJhY2subyBmb2xpby1jb21wYXQubyBcXFxcXFxubW0vTWFrZWZpbGU6NTM6XFx0XFx0XFx0ICAgcmVhZGFoZWFkLm8gZm9saW8ubyB0cnVuY2F0ZS5vIHZtc2Nhbi5vIHNocmlua2VyLm8gXFxcXFxcbm1tL01ha2VmaWxlLTU0LVxcdFxcdFxcdCAgIHNobWVtLm8gdXRpbC5vIG1tem9uZS5vIHZtc3RhdC5vIGJhY2tpbmctZGV2Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMjoyNi43ODEyNDMwMTZaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDc1MDg5ODcwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBQYXRjaCdzIEZ1enppbmcgUmVxdWlyZW1lbnRzKipcblxuT2theSwgc28gYHZtc2Nhbi5vYCBpcyBhbHdheXMgYnVpbHQsIHRoYXQncyBhIGdpdmVuIChgb2JqLXlgKS4gTm93LCBgQ09ORklHX0xSVV9HRU5gIGlzIHRoZSBrZXkgS2NvbmZpZyBmbGFnIGhlcmUsIHNpbmNlIGl0IGVuYWJsZXMgYGV2aWN0X2ZvbGlvc2AgYW5kIHRoZSBNR0xSVSBwYXJ0cyB3aXRoaW4gYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AuIE15IGZpcnN0IHRob3VnaHQgd2FzIHRvIGRvdWJsZS1jaGVjayBpZiB3ZSBhY3R1YWxseSAqbmVlZCogYExSVV9HRU5fRU5BQkxFRGAsIGJ1dCBxdWlja2x5IHJlYWxpemVkIHRoYXQgZXZlbiBpZiB0aGF0IHdhc24ndCBzZXQsIE1HTFJVIGNhbiBzdGlsbCBiZSBlbmFibGVkIHRocm91Z2ggYC9zeXMva2VybmVsL21tL2xydV9nZW4vZW5hYmxlZGAuIEhvd2V2ZXIsIGlmIHRoZSB1c2VyIGV2ZW4gZW5hYmxlcyBgQ09ORklHX0xSVV9HRU5gIHRoZSBjb2RlIHdpbGwgY29tcGlsZS4gQWxyaWdodCwgdGhhdCdzIHRoZSBtYWluIHBvaW50LlxuXG5Ob3csIGxldCdzIG5haWwgZG93biB3aGF0IHRoZSBgc2V0LXJlc3VsdHNgIHBhcmFtZXRlcnMgc2hvdWxkIGJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoaXMgaXMgYWxsIGNyeXN0YWwgY2xlYXIgZm9yIHRoZSBmdXp6aW5nIGFuYWx5c2lzLlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IERlZmluaXRlbHkgYHRydWVgLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIHRoZSBjb3JlIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgLiBJdCdzIGV4dHJhY3RpbmcgdGhpcyBuZXcgaGVscGVyLCBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKClgLCBhbmQgcmV1c2luZyBpdCwgd2hpY2ggaXMgdGhlIGNvcm5lcnN0b25lIGZvciB0aGUgTUdMUlUgbW9kaWZpY2F0aW9ucywgc28gd2UgYXJlIGFmZmVjdGluZyBpbXBvcnRhbnQgcGF0aHMgYW5kIHJlY2xhaW0gYWNjb3VudGluZyB0aGF0J3MgKmRlZmluaXRlbHkqIHJlYWNoYWJsZS4gVGhlIG5ldyByZXRyeSBsb29wIGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAgaXMgYWxzbyBjcml0aWNhbCBoZXJlLlxuKiAgIGBSZWFzb25pbmdgOiBUaGUgZXhwbGFuYXRpb24gaGFzIHRvIGJlIGNsZWFyOiB0aGUgcGF0Y2ggYWx0ZXJzIHBhZ2UgcmVjbGFpbSBieSBleHRyYWN0aW5nIGFuZCByZXVzaW5nIGEgaGVscGVyIHRvIGZpbmQgZm9saW9zIHdyaXR0ZW4gYmFjayBkdXJpbmcgcmVjbGFpbSBpbiBib3RoIE1HTFJVIGFuZCB0cmFkaXRpb25hbCBMUlUsIGFsc28gaW50cm9kdWNpbmcgcmV0cmllcywgd2hpY2ggaXMgY3JpdGljYWwuXG4qICAgYEZvY3VzU3ltYm9sc2A6IEknbSBnb2luZyB0byBsaXN0IGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAsIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgLCBhbmQgYGV2aWN0X2ZvbGlvc2AgYmVjYXVzZSB0aGV5IGFyZSB3aGVyZSB0aGUgcmVhbCB3b3JrIG9mIHRoZSBuZXcgbG9naWMgaXMgYW5kIHRoZXkgYXJlbid0IHViaXF1aXRvdXMgdGhyb3VnaG91dCB0aGUgY29kZWJhc2UuXG4qICAgYEVuYWJsZUNvbmZpZ3NgOiBJIG5lZWQgdG8gc3BlY2lmeSBgTFJVX0dFTmAuXG5cbk9rYXksIGJlZm9yZSBzZW5kaW5nIHRoaXMgb2ZmLCBsZXQncyBtYWtlIHN1cmUgZXZlcnl0aGluZyBpcyBwZXJmZWN0OlxuXG4qICAgYFdvcnRoRnV6emluZ2A6IENoZWNrZWQuIGB0cnVlYC5cbiogICBgRm9jdXNTeW1ib2xzYDogWWVwLCBmb2N1c2VkIG9uIHRoZSBhbHRlcmVkIGxvZ2ljLlxuKiAgIGBFbmFibGVDb25maWdzYDogVGhlIGtleSBjb25maWcsIFwiTFJVX0dFTlwiLlxuKiAgIGBSZWFzb25pbmdgOiBDb25jaXNlIGFuZCBhY2N1cmF0ZS5cblxuRXZlcnl0aGluZyBsb29rcyBnb29kLiBUaW1lIHRvIHJ1biBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTcyMCwiT3V0cHV0VG9rZW5zIjoxNDksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjI6MzEuNTMyMTQ0MjgyWiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA1NDU5NzcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJzaHJpbmtfaW5hY3RpdmVfbGlzdFwiLFxuICAgIFwiZXZpY3RfZm9saW9zXCIsXG4gICAgXCJmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHJlY2xhaW0gbG9naWMgaW4gbW0vdm1zY2FuLmMgYnkgcmVmYWN0b3JpbmcgZm9saW8gd3JpdGViYWNrIGRldGVjdGlvbiBpbnRvIGEgc2hhcmVkIGhlbHBlciBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKClgLCB1cGRhdGluZyBgZXZpY3RfZm9saW9zKClgIChNdWx0aS1HZW4gTFJVKSwgYW5kIGludHJvZHVjaW5nIGEgcmV0cnkgbWVjaGFuaXNtIGZvciB3cml0dGVuLWJhY2sgZm9saW9zIGluIGBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpYCBhbG9uZyB3aXRoIHVwZGF0ZWQgaXNvbGF0aW9uIGFjY291bnRpbmcuIFRoZXNlIGNoYW5nZXMgYWZmZWN0IGNvcmUsIHJlYWNoYWJsZSBtZW1vcnkgbWFuYWdlbWVudCByZWNsYWltIHBhdGhzIGFuZCB3YXJyYW50IGZ1enppbmcuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInNocmlua19pbmFjdGl2ZV9saXN0XCIsXG4gICAgXCJldmljdF9mb2xpb3NcIixcbiAgICBcImZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgcmVjbGFpbSBsb2dpYyBpbiBtbS92bXNjYW4uYyBieSByZWZhY3RvcmluZyBmb2xpbyB3cml0ZWJhY2sgZGV0ZWN0aW9uIGludG8gYSBzaGFyZWQgaGVscGVyIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soKWAsIHVwZGF0aW5nIGBldmljdF9mb2xpb3MoKWAgKE11bHRpLUdlbiBMUlUpLCBhbmQgaW50cm9kdWNpbmcgYSByZXRyeSBtZWNoYW5pc20gZm9yIHdyaXR0ZW4tYmFjayBmb2xpb3MgaW4gYHNocmlua19pbmFjdGl2ZV9saXN0KClgIGFsb25nIHdpdGggdXBkYXRlZCBpc29sYXRpb24gYWNjb3VudGluZy4gVGhlc2UgY2hhbmdlcyBhZmZlY3QgY29yZSwgcmVhY2hhYmxlIG1lbW9yeSBtYW5hZ2VtZW50IHJlY2xhaW0gcGF0aHMgYW5kIHdhcnJhbnQgZnV6emluZy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjI6MzEuNjEyNjk4Mjk5WiIsIlNlcSI6MjksIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoiSWYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjg5NzY2MTEzODUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMjozMS42MTMyNDQzNDlaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxMjg5NzYwNjIzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIHJlZmFjdG9ycyBmb2xpbyB3cml0ZWJhY2sgcmV0cnkgbG9naWMgaW4gdGhlIHBhZ2UgcmVjbGFpbSBwYXRoIChtbS92bXNjYW4uYykgYnkgZXh0cmFjdGluZyBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soKSBmcm9tIGV2aWN0X2ZvbGlvcygpIGFuZCB1c2luZyBpdCB0byByZXRyeSBjbGVhbiBmb2xpb3MgaW4gc2hyaW5rX2luYWN0aXZlX2xpc3QoKS4gQWxsIG5ldyBhbmQgbW9kaWZpZWQgbG9jYWwgdmFyaWFibGVzIChjbGVhbl9saXN0LCB0b3RhbF9yZWNsYWltZWQsIGlzb2xhdGVkLCBza2lwX3JldHJ5KSBhcmUgcHJvcGVybHkgaW5pdGlhbGl6ZWQsIGFuZCB0aGUgcmVjbGFpbV9zdGF0IHN0cnVjdHVyZSBpcyBtZW1zZXQgdG8gemVybyBpbnNpZGUgc2hyaW5rX2ZvbGlvX2xpc3QoKSBvbiBlYWNoIGl0ZXJhdGlvbi4gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgZGF0YSBjb3BpZXMgdG8gdXNlciBzcGFjZSwgdW5pbml0aWFsaXplZCB2YXJpYWJsZSB1c2FnZSwgb3IgdW5pbml0aWFsaXplZCBidWZmZXIgYWNjZXNzZXMuIEFueSBwb3RlbnRpYWwgcmVjbGFpbSBpc3N1ZXMgKGUuZy4gbGlzdCBjb3JydXB0aW9uLCByZWZjb3VudCBvciBwYWdlIGZsYWcgYnVncykgd291bGQgYmUgY2F1Z2h0IGJ5IGFzc2VydGlvbnMgb3IgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgaXMgbm90IGp1c3RpZmllZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCAyMjJlNjE4MjRiYTNmNDk3MDEwZWI0MTE4YWJlYTc2M2U0N2QwZDg2XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFN1biBTZXAgMTMgMTA6MjE6MDMgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCA1MzU0ZWI4ZDNhMDdiLi44MGNjZDUxNmVmMzgwIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbisrKyBiL21tL3Ztc2Nhbi5jXG5AQCAtMTgxLDYgKzE4MSwxMCBAQCBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcbiBcdHN0cnVjdCByZWNsYWltX3N0YXRlIHJlY2xhaW1fc3RhdGU7XG4gfTtcbiBcbitzdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbitcdFx0XHRcdCAgICAgc3RydWN0IGxpc3RfaGVhZCAqY2xlYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbitcdFx0XHRcdCAgICAgaW50IHR5cGUsIGJvb2wgc2tpcF9yZXRyeSk7XG4rXG4gI2lmZGVmIEFSQ0hfSEFTX1BSRUZFVENIV1xuIHN0YXRpYyBpbmxpbmUgdm9pZCBwcmVmZXRjaHdfcHJldl9scnVfZm9saW8oc3RydWN0IGZvbGlvICpmb2xpbyxcbiBcdFx0c3RydWN0IGxpc3RfaGVhZCAqYmFzZSlcbkBAIC0yMDY1LDE0ICsyMDY5LDE2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIHNocmlua19pbmFjdGl2ZV9saXN0KHVuc2lnbmVkIGxvbmcgbnJfdG9fc2NhbixcbiBcdFx0ZW51bSBscnVfbGlzdCBscnUpXG4ge1xuIFx0TElTVF9IRUFEKGZvbGlvX2xpc3QpO1xuK1x0TElTVF9IRUFEKGNsZWFuX2xpc3QpO1xuIFx0dW5zaWduZWQgbG9uZyBucl9zY2FubmVkO1xuLVx0dW5zaWduZWQgaW50IG5yX3JlY2xhaW1lZCA9IDA7XG4tXHR1bnNpZ25lZCBsb25nIG5yX3Rha2VuO1xuK1x0dW5zaWduZWQgaW50IG5yX3JlY2xhaW1lZCwgdG90YWxfcmVjbGFpbWVkID0gMDtcbitcdHVuc2lnbmVkIGxvbmcgbnJfdGFrZW4sIGlzb2xhdGVkO1xuIFx0c3RydWN0IHJlY2xhaW1fc3RhdCBzdGF0O1xuIFx0Ym9vbCBmaWxlID0gaXNfZmlsZV9scnUobHJ1KTtcbiBcdGVudW0gbm9kZV9zdGF0X2l0ZW0gaXRlbTtcbiBcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQgPSBscnV2ZWNfcGdkYXQobHJ1dmVjKTtcbiBcdGJvb2wgc3RhbGxlZCA9IGZhbHNlO1xuK1x0Ym9vbCBza2lwX3JldHJ5ID0gZmFsc2U7XG4gXG4gXHR3aGlsZSAodW5saWtlbHkodG9vX21hbnlfaXNvbGF0ZWQocGdkYXQsIGZpbGUsIHNjKSkpIHtcbiBcdFx0aWYgKHN0YWxsZWQpXG5AQCAtMjEwNCwyNSArMjExMCw0MiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBzaHJpbmtfaW5hY3RpdmVfbGlzdCh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sXG4gXHRpZiAobnJfdGFrZW4gPT0gMClcbiBcdFx0cmV0dXJuIDA7XG4gXG4rXHRpc29sYXRlZCA9IG5yX3Rha2VuO1xuK3JldHJ5OlxuIFx0bnJfcmVjbGFpbWVkID0gc2hyaW5rX2ZvbGlvX2xpc3QoXHUwMDI2Zm9saW9fbGlzdCwgcGdkYXQsIHNjLCBcdTAwMjZzdGF0LCBmYWxzZSxcbiBcdFx0XHRcdFx0IGxydXZlY19tZW1jZyhscnV2ZWMpKTtcbitcdHRvdGFsX3JlY2xhaW1lZCArPSBucl9yZWNsYWltZWQ7XG4rXG4rXHQvKiBSZXRyeSBwYXNzIGlzIG9ubHkgbWVhbnQgZm9yIGNsZWFuIGZvbGlvcyB3aXRob3V0IG5ldyBpc29sYXRpb24gKi9cbitcdGlmIChpc29sYXRlZClcbitcdFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFx1MDAyNnN0YXQpO1xuK1x0dHJhY2VfbW1fdm1zY2FuX2xydV9zaHJpbmtfaW5hY3RpdmUocGdkYXQtXHUwMDNlbm9kZV9pZCxcbitcdFx0XHRucl9zY2FubmVkLCBucl9yZWNsYWltZWQsIFx1MDAyNnN0YXQsIHNjLVx1MDAzZXByaW9yaXR5LCBmaWxlKTtcbitcbitcdGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhcdTAwMjZmb2xpb19saXN0LCBcdTAwMjZjbGVhbl9saXN0LCBscnV2ZWMsIGZpbGUsIHNraXBfcmV0cnkpO1xuIFxuIFx0bW92ZV9mb2xpb3NfdG9fbHJ1KFx1MDAyNmZvbGlvX2xpc3QpO1xuIFxuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHREVNT1RFX0tTV0FQRCArIHJlY2xhaW1lcl9vZmZzZXQoc2MpLFxuIFx0XHRcdFx0XHRzdGF0Lm5yX2RlbW90ZWQpO1xuLVx0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIGZpbGUsIC1ucl90YWtlbik7XG4gXHRpdGVtID0gUEdTVEVBTF9LU1dBUEQgKyByZWNsYWltZXJfb2Zmc2V0KHNjKTtcbiBcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBpdGVtLCBucl9yZWNsYWltZWQpO1xuIFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIFBHU1RFQUxfQU5PTiArIGZpbGUsIG5yX3JlY2xhaW1lZCk7XG4tXHRpZiAobnJfc2Nhbm5lZCBcdTAwM2UgbnJfcmVjbGFpbWVkKVxuK1xuK1x0aWYgKCFsaXN0X2VtcHR5KFx1MDAyNmNsZWFuX2xpc3QpKSB7XG4rXHRcdGxpc3Rfc3BsaWNlX2luaXQoXHUwMDI2Y2xlYW5fbGlzdCwgXHUwMDI2Zm9saW9fbGlzdCk7XG4rXHRcdHNraXBfcmV0cnkgPSB0cnVlO1xuK1x0XHQvKiBSZXRyeSBmb2xpb3Mgd2VyZSBhbHJlYWR5IGlzb2xhdGVkIGFuZCBhY2NvdW50ZWQgYWJvdmUgKi9cbitcdFx0aXNvbGF0ZWQgPSAwO1xuK1x0XHRnb3RvIHJldHJ5O1xuK1x0fVxuK1xuK1x0bW9kX25vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfSVNPTEFURURfQU5PTiArIGZpbGUsIC1ucl90YWtlbik7XG4rXHRpZiAobnJfc2Nhbm5lZCBcdTAwM2UgdG90YWxfcmVjbGFpbWVkKVxuIFx0XHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIGZpbGUsXG4tXHRcdFx0XHQgbnJfc2Nhbm5lZCAtIG5yX3JlY2xhaW1lZCk7XG4rXHRcdFx0XHQgbnJfc2Nhbm5lZCAtIHRvdGFsX3JlY2xhaW1lZCk7XG4gXG4tXHRoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2sobnJfdGFrZW4sIHBnZGF0LCBzYywgXHUwMDI2c3RhdCk7XG4tXHR0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19pbmFjdGl2ZShwZ2RhdC1cdTAwM2Vub2RlX2lkLFxuLVx0XHRcdG5yX3NjYW5uZWQsIG5yX3JlY2xhaW1lZCwgXHUwMDI2c3RhdCwgc2MtXHUwMDNlcHJpb3JpdHksIGZpbGUpO1xuLVx0cmV0dXJuIG5yX3JlY2xhaW1lZDtcbitcdHJldHVybiB0b3RhbF9yZWNsYWltZWQ7XG4gfVxuIFxuIC8qXG5AQCAtNTAxOCw4ICs1MDQxLDYgQEAgc3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4ge1xuIFx0TElTVF9IRUFEKGxpc3QpO1xuIFx0TElTVF9IRUFEKGNsZWFuKTtcbi1cdHN0cnVjdCBmb2xpbyAqZm9saW87XG4tXHRzdHJ1Y3QgZm9saW8gKm5leHQ7XG4gXHRlbnVtIG5vZGVfc3RhdF9pdGVtIGl0ZW07XG4gXHRzdHJ1Y3QgcmVjbGFpbV9zdGF0IHN0YXQ7XG4gXHRzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrO1xuQEAgLTUwNTgsMjYgKzUwNzksNyBAQCBzdGF0aWMgaW50IGV2aWN0X2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFx0XHR0eXBlX3NjYW5uZWQsIHJlY2xhaW1lZCwgXHUwMDI2c3RhdCwgc2MtXHUwMDNlcHJpb3JpdHksXG4gXHRcdFx0dHlwZSA/IExSVV9JTkFDVElWRV9GSUxFIDogTFJVX0lOQUNUSVZFX0FOT04pO1xuIFxuLVx0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoZm9saW8sIG5leHQsIFx1MDAyNmxpc3QsIGxydSkge1xuLVx0XHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuLVxuLVx0XHQvKiBtb3ZlX2ZvbGlvc190b19scnUoKSBjdWxscyB1bmV2aWN0YWJsZSBmb2xpb3MgdmlhIGZvbGlvX3B1dGJhY2tfbHJ1KCkgKi9cbi1cdFx0aWYgKCFmb2xpb19ldmljdGFibGUoZm9saW8pKVxuLVx0XHRcdGNvbnRpbnVlO1xuLVxuLVx0XHQvKiByZXRyeSBmb2xpb3MgdGhhdCBtYXkgaGF2ZSBtaXNzZWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cbi1cdFx0aWYgKCFza2lwX3JldHJ5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbi1cdFx0ICAgICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xuLVx0XHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIFx1MDAyNmNsZWFuKTtcbi1cdFx0XHRjb250aW51ZTtcbi1cdFx0fVxuLVxuLVx0XHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xuLVx0XHRpZiAobHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcbi1cdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuLVx0XHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuLVx0XHR9XG4tXHR9XG4rXHRmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soXHUwMDI2bGlzdCwgXHUwMDI2Y2xlYW4sIGxydXZlYywgdHlwZSwgc2tpcF9yZXRyeSk7XG4gXG4gXHRtb3ZlX2ZvbGlvc190b19scnUoXHUwMDI2bGlzdCk7XG4gXG5AQCAtNjEyMyw2ICs2MTI1LDQ2IEBAIHN0YXRpYyB2b2lkIGxydV9nZW5fc2hyaW5rX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqXG4gXG4gI2VuZGlmIC8qIENPTkZJR19MUlVfR0VOICovXG4gXG4rLyoqXG4rICogZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrIC0gRmluZCBhbmQgbW92ZSB0aGUgd3JpdHRlbiBiYWNrIGZvbGlvcyB0byBhIG5ldyBsaXN0LlxuKyAqIEBsaXN0OiBmb2xpb3MgbGlzdFxuKyAqIEBjbGVhbjogdGhlIHdyaXR0ZW4gYmFjayBmb2xpb3MgbGlzdFxuKyAqIEBscnV2ZWM6IHRoZSBscnV2ZWNcbisgKiBAdHlwZTogTFJVIHR5cGUgKG9ubHkgdXNlZCBmb3IgQ09ORklHX0xSVV9HRU4pXG4rICogQHNraXBfcmV0cnk6IHdoZXRoZXIgc2tpcCByZXRyeS5cbisgKi9cbitzdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcbitcdFx0XHRcdCAgICAgc3RydWN0IGxpc3RfaGVhZCAqY2xlYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbitcdFx0XHRcdCAgICAgaW50IHR5cGUsIGJvb2wgc2tpcF9yZXRyeSlcbit7XG4rXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1x0c3RydWN0IGZvbGlvICpuZXh0O1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2UoZm9saW8sIG5leHQsIGxpc3QsIGxydSkge1xuKyNpZmRlZiBDT05GSUdfTFJVX0dFTlxuK1x0XHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xuKyNlbmRpZlxuK1x0XHQvKiBtb3ZlX2ZvbGlvc190b19scnUoKSBjdWxscyB1bmV2aWN0YWJsZSBmb2xpb3MgdmlhIGZvbGlvX3B1dGJhY2tfbHJ1KCkgKi9cbitcdFx0aWYgKCFmb2xpb19ldmljdGFibGUoZm9saW8pKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKiByZXRyeSBmb2xpb3MgdGhhdCBtYXkgaGF2ZSBtaXNzZWQgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKCkgKi9cbitcdFx0aWYgKCFza2lwX3JldHJ5IFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pIFx1MDAyNlx1MDAyNiAhZm9saW9fbWFwcGVkKGZvbGlvKSBcdTAwMjZcdTAwMjZcbitcdFx0ICAgICFmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSBcdTAwMjZcdTAwMjYgIWZvbGlvX3Rlc3Rfd3JpdGViYWNrKGZvbGlvKSkge1xuK1x0XHRcdGxpc3RfbW92ZShcdTAwMjZmb2xpby1cdTAwM2VscnUsIGNsZWFuKTtcbitcdFx0XHRjb250aW51ZTtcbitcdFx0fVxuKyNpZmRlZiBDT05GSUdfTFJVX0dFTlxuK1x0XHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xuK1x0XHRpZiAobHJ1dmVjLVx1MDAzZWxydWdlbi5lbmFibGVkIFx1MDAyNlx1MDAyNlxuK1x0XHQgICAgbHJ1X2dlbl9mb2xpb19zZXEobHJ1dmVjLCBmb2xpbywgZmFsc2UpID09IG1pbl9zZXFbdHlwZV0pIHtcbitcdFx0XHRmb2xpb19zZXRfbHJ1X3JlZnMoZm9saW8sIDApO1xuK1x0XHRcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xuK1x0XHR9XG4rI2VuZGlmXG4rXHR9XG4rfVxuK1xuIHN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiB7XG4gXHR1bnNpZ25lZCBsb25nIG5yW05SX0xSVV9MSVNUU107XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMjozMS42MTMyNDU0MjlaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDMyMDM2MjMwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vdm1zY2FuLmNgLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggY29yZSBtZW1vcnkgbWFuYWdlbWVudCBoZXJlLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gYnJlYWsgZG93biB3aGF0J3MgaGFwcGVuaW5nLiBUaGUgaW50cm9kdWN0aW9uIG9mIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soKWAgc2VlbXMgbGlrZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQuIEl0J3MgZXNzZW50aWFsbHkgcmVmYWN0b3JpbmcgY29kZSB0aGF0IHVzZWQgdG8gYmUgc29sZWx5IGluIHRoZSBNR0xSVSAoQ09ORklHX0xSVV9HRU4pIGBldmljdF9mb2xpb3MoKWAgYW5kIGlzIG5vdyBiZWluZyB1c2VkIGluIHRoZSB0cmFkaXRpb25hbCBMUlUgcmVjbGFpbSBwYXRoIHZpYSBgc2hyaW5rX2luYWN0aXZlX2xpc3QoKWAuXG5cbkRpdmluZyBpbnRvIGBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpYCwgSSBzZWUgdGhpcyBuZXcgYHJldHJ5YCBsb29wLiBUaGF0IGltbWVkaWF0ZWx5IGNhdGNoZXMgbXkgYXR0ZW50aW9uLiBUaGUgbG9vcCdzIHN0cnVjdHVyZTogaXNvbGF0ZSBzb21lIHBhZ2VzLCByZWNsYWltIHBhZ2VzLCBoYW5kbGUgd3JpdGViYWNrIGlmIGFueSB3ZXJlIGlzb2xhdGVkLCBhbmQgdGhlbiB1c2UgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpYC4gSXQgdGhlbiBtb3ZlcyBhbnkgZm91bmQgcGFnZXMgYW5kIHVwZGF0ZXMgc3RhdGUuIFRoZXJlJ3MgYSBjaGVjayBmb3IgYSBjbGVhbiBsaXN0LCBhbmQgaWYgdGhlcmUgYXJlIGNsZWFuIHBhZ2VzLCB3ZSBsb29wIGJhY2sgd2l0aCBgc2tpcF9yZXRyeSA9IHRydWVgLlxuXG5XYWl0IGEgbWludXRlLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGBzdGF0YCB2YXJpYWJsZSwgYW5kIGhvdyBpdCBpcyBiZWluZyB1c2VkIHdpdGggYHNocmlua19mb2xpb19saXN0KClgLiBEb2VzIGBzaHJpbmtfZm9saW9fbGlzdCgpYCBpbml0aWFsaXplIGl0PyBJcyBpdCBwYXNzZWQgaW4gdW5pbml0aWFsaXplZCBhbmQgaW5pdGlhbGl6ZWQgKndpdGhpbiogYHNocmlua19mb2xpb19saXN0KClgPyBJcyBpdCBhbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlIG9uIHRoZSByZXRyeT8gSSBuZWVkIHRvIGNoZWNrIGhvdyBgc3RhdGAgaXMgaGFuZGxlZCB3aXRoaW4gYHNocmlua19mb2xpb19saXN0KClgIGl0c2VsZi4gSSdsbCBuZWVkIHRvIGdvIGxvb2sgaW50byB0aGUgY29kZSBvZiBgbW0vdm1zY2FuLmNgIHRvIHVuZGVyc3RhbmQgdGhhdCBiaXQuIFRoaXMgY291bGQgYmUgYSByYWNlIGNvbmRpdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDA5NywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY0NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjIyOjM1LjkzMzYxMDQ1NVoiLCJTZXEiOjMyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcxMzc0MzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2hyaW5rX2ZvbGlvX2xpc3RcXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0yNDY9c3RhdGljIGJvb2wgcm9vdF9yZWNsYWltKHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtMjU2LSAqIGNvbXBsZXRlbHkgYnJva2VuIHdpdGggdGhlIGxlZ2FjeSBtZW1jZyBhbmQgZGlyZWN0IHN0YWxsaW5nIGluXFxubW0vdm1zY2FuLmM6MjU3OiAqIHNocmlua19mb2xpb19saXN0KCkgaXMgdXNlZCBmb3IgdGhyb3R0bGluZyBpbnN0ZWFkLCB3aGljaCBsYWNrcyBhbGwgdGhlXFxubW0vdm1zY2FuLmMtMjU4LSAqIG5pY2V0aWVzIHN1Y2ggYXMgZmFpcm5lc3MsIGFkYXB0aXZlIHBhdXNpbmcsIGJhbmR3aWR0aCBwcm9wb3J0aW9uYWxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY4Mz10eXBlZGVmIGVudW0ge1xcbi0tXFxubW0vdm1zY2FuLmMtNjk0LS8qXFxubW0vdm1zY2FuLmM6Njk1OiAqIHBhZ2VvdXQgaXMgY2FsbGVkIGJ5IHNocmlua19mb2xpb19saXN0KCkgZm9yIGVhY2ggZGlydHkgZm9saW8uXFxubW0vdm1zY2FuLmMtNjk2LSAqL1xcbi0tXFxubW0vdm1zY2FuLmM9MTExOT1zdGF0aWMgYm9vbCBtYXlfZW50ZXJfZnMoc3RydWN0IGZvbGlvICpmb2xpbywgZ2ZwX3QgZ2ZwX21hc2spXFxuLS1cXG5tbS92bXNjYW4uYy0xMTM0LS8qXFxubW0vdm1zY2FuLmM6MTEzNTogKiBzaHJpbmtfZm9saW9fbGlzdCgpIHJldHVybnMgdGhlIG51bWJlciBvZiByZWNsYWltZWQgcGFnZXNcXG5tbS92bXNjYW4uYy0xMTM2LSAqL1xcbm1tL3Ztc2Nhbi5jOjExMzc6c3RhdGljIHVuc2lnbmVkIGludCBzaHJpbmtfZm9saW9fbGlzdChzdHJ1Y3QgbGlzdF9oZWFkICpmb2xpb19saXN0LFxcbm1tL3Ztc2Nhbi5jLTExMzgtXFx0XFx0c3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYz0xNjczPXVuc2lnbmVkIGludCByZWNsYWltX2NsZWFuX3BhZ2VzX2Zyb21fbGlzdChzdHJ1Y3Qgem9uZSAqem9uZSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE3MDMtXFx0bm9yZWNsYWltX2ZsYWcgPSBtZW1hbGxvY19ub3JlY2xhaW1fc2F2ZSgpO1xcbm1tL3Ztc2Nhbi5jOjE3MDQ6XFx0bnJfcmVjbGFpbWVkID0gc2hyaW5rX2ZvbGlvX2xpc3QoXFx1MDAyNmNsZWFuX2ZvbGlvcywgem9uZS1cXHUwMDNlem9uZV9wZ2RhdCwgXFx1MDAyNnNjLFxcbm1tL3Ztc2Nhbi5jLTE3MDUtXFx0XFx0XFx0XFx0XFx0XFx1MDAyNnN0YXQsIHRydWUsIE5VTEwpO1xcbi0tXFxubW0vdm1zY2FuLmM9MjAyNT1zdGF0aWMgdm9pZCBoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2sodW5zaWduZWQgbG9uZyBucl90YWtlbixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIwNDUtXFx0XFx0ICogdGhlIGtlcm5lbCBmbHVzaGVyIGhlcmUgYW5kIGxhdGVyIHdhaXRpbmcgb24gZm9saW9zXFxubW0vdm1zY2FuLmM6MjA0NjpcXHRcXHQgKiB3aGljaCBhcmUgaW4gd3JpdGViYWNrIHRvIGZpbmlzaCAoc2VlIHNocmlua19mb2xpb19saXN0KCkpLlxcbm1tL3Ztc2Nhbi5jLTIwNDctXFx0XFx0ICpcXG4tLVxcbm1tL3Ztc2Nhbi5jPTIwNjc9c3RhdGljIHVuc2lnbmVkIGxvbmcgc2hyaW5rX2luYWN0aXZlX2xpc3QodW5zaWduZWQgbG9uZyBucl90b19zY2FuLFxcbi0tXFxubW0vdm1zY2FuLmMtMjExNC1yZXRyeTpcXG5tbS92bXNjYW4uYzoyMTE1OlxcdG5yX3JlY2xhaW1lZCA9IHNocmlua19mb2xpb19saXN0KFxcdTAwMjZmb2xpb19saXN0LCBwZ2RhdCwgc2MsIFxcdTAwMjZzdGF0LCBmYWxzZSxcXG5tbS92bXNjYW4uYy0yMTE2LVxcdFxcdFxcdFxcdFxcdCBscnV2ZWNfbWVtY2cobHJ1dmVjKSk7XFxuLS1cXG5tbS92bXNjYW4uYz0yMjU3PXN0YXRpYyB1bnNpZ25lZCBpbnQgcmVjbGFpbV9mb2xpb19saXN0KHN0cnVjdCBsaXN0X2hlYWQgKmZvbGlvX2xpc3QsXFxuLS1cXG5tbS92bXNjYW4uYy0yMjcwLVxcbm1tL3Ztc2Nhbi5jOjIyNzE6XFx0bnJfcmVjbGFpbWVkID0gc2hyaW5rX2ZvbGlvX2xpc3QoZm9saW9fbGlzdCwgcGdkYXQsIFxcdTAwMjZzYywgXFx1MDAyNnN0YXQsIHRydWUsIE5VTEwpO1xcbm1tL3Ztc2Nhbi5jLTIyNzItXFx0d2hpbGUgKCFsaXN0X2VtcHR5KGZvbGlvX2xpc3QpKSB7XFxuLS1cXG5tbS92bXNjYW4uYz00MzcwPXN0YXRpYyB2b2lkIGxydV9nZW5fYWdlX25vZGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy00NDEwLS8qXFxubW0vdm1zY2FuLmM6NDQxMTogKiBUaGlzIGZ1bmN0aW9uIGV4cGxvaXRzIHNwYXRpYWwgbG9jYWxpdHkgd2hlbiBzaHJpbmtfZm9saW9fbGlzdCgpIHdhbGtzIHRoZVxcbm1tL3Ztc2Nhbi5jLTQ0MTItICogcm1hcC4gSXQgc2NhbnMgdGhlIGFkamFjZW50IFBURXMgb2YgYSB5b3VuZyBQVEUgYW5kIHByb21vdGVzIGhvdCBwYWdlcy4gSWZcXG4tLVxcbm1tL3Ztc2Nhbi5jPTUwMzk9c3RhdGljIGludCBldmljdF9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy01MDcxLXJldHJ5Olxcbm1tL3Ztc2Nhbi5jOjUwNzI6XFx0cmVjbGFpbWVkID0gc2hyaW5rX2ZvbGlvX2xpc3QoXFx1MDAyNmxpc3QsIHBnZGF0LCBzYywgXFx1MDAyNnN0YXQsIGZhbHNlLCBtZW1jZyk7XFxubW0vdm1zY2FuLmMtNTA3My1cXHRzYy1cXHUwMDNlbnJfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjI6MzUuOTgwNzYxMTc3WiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU2MDYyMTczNzAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyBpZiBJIHdlcmUgdGhpbmtpbmcgaXQ6XG5cbioqRGl2aW5nIGludG8gdm1zY2FuLmM6IFVucGFja2luZyBzaHJpbmtfZm9saW9fbGlzdCoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5IGFuZCB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IGBzaHJpbmtfZm9saW9fbGlzdGAgaW50ZXJhY3RzIHdpdGggYHN0YXRgIHdpdGhpbiB0aGUgYG1tL3Ztc2Nhbi5jYCBjb250ZXh0LiBJIG5lZWQgdG8gcGlucG9pbnQgdGhlIGNyaXRpY2FsIGxpbmVzLCBzcGVjaWZpY2FsbHkgMTEzNSB0aHJvdWdoIDExNTUuIFRoaXMgc2VjdGlvbiBob2xkcyB0aGUga2V5IHRvIHVuZGVyc3RhbmRpbmcgaG93IHRoZXNlIGZ1bmN0aW9ucyB3b3JrIHRvZ2V0aGVyLiBJJ20gaG9waW5nIHRvIHNlZSB0aGUgc3BlY2lmaWMgb3BlcmF0aW9ucyBwZXJmb3JtZWQgb24gYHN0YXRgIGJ5IGBzaHJpbmtfZm9saW9fbGlzdGAsIGxpa2VseSBpbiB0aGUgY29udGV4dCBvZiByZWNsYWltaW5nIG9yIGFjY291bnRpbmcgZm9yIG1lbW9yeS4gSSdtIGV4cGVjdGluZyB0byBzZWUgY2FsbHMsIHBhcmFtZXRlciBwYXNzaW5nLCBhbmQgbW9kaWZpY2F0aW9ucyBvZiBgc3RhdGAgcmVsYXRlZCB0byB0aGUgZm9saW9zIGJlaW5nIHByb2Nlc3NlZC4gSSB3YW50IHRvIGJ1aWxkIGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhpcyBmdW5jdGlvbiBjb250cmlidXRlcyB0byB0aGUgb3ZlcmFsbCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneSwgc3BlY2lmaWNhbGx5IGhvdyBpdCBsZXZlcmFnZXMgYHN0YXRgIHRvIGRldGVybWluZSB0aGUgc3RhdGUgb2YgdmFyaW91cyBmb2xpb3MuIExldCdzIHNlZSBpZiB0aGlzIHNlY3Rpb24gcHJvdmlkZXMgdGhlIGdyYW51bGFyIGRldGFpbCBJJ20gbG9va2luZyBmb3IuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYxNDgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozOCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMjo0MS41ODY5ODE2MTZaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTIwNTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3Ztc2Nhbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDExMzUsXG4gIFwiTGluZUNvdW50XCI6IDMwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjExMzU6XFx0ICogc2hyaW5rX2ZvbGlvX2xpc3QoKSByZXR1cm5zIHRoZSBudW1iZXIgb2YgcmVjbGFpbWVkIHBhZ2VzXFxuMTEzNjpcXHQgKi9cXG4xMTM3OlxcdHN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4xMTM4OlxcdFxcdFxcdHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbjExMzk6XFx0XFx0XFx0c3RydWN0IHJlY2xhaW1fc3RhdCAqc3RhdCwgYm9vbCBpZ25vcmVfcmVmZXJlbmNlcyxcXG4xMTQwOlxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4xMTQxOlxcdHtcXG4xMTQyOlxcdFxcdHN0cnVjdCBmb2xpb19iYXRjaCBmcmVlX2ZvbGlvcztcXG4xMTQzOlxcdFxcdExJU1RfSEVBRChyZXRfZm9saW9zKTtcXG4xMTQ0OlxcdFxcdExJU1RfSEVBRChkZW1vdGVfZm9saW9zKTtcXG4xMTQ1OlxcdFxcdHVuc2lnbmVkIGludCBucl9yZWNsYWltZWQgPSAwLCBucl9kZW1vdGVkID0gMDtcXG4xMTQ2OlxcdFxcdHVuc2lnbmVkIGludCBwZ2FjdGl2YXRlID0gMDtcXG4xMTQ3OlxcdFxcdGJvb2wgZG9fZGVtb3RlX3Bhc3M7XFxuMTE0ODpcXHRcXHRzdHJ1Y3Qgc3dhcF9pb19jdHggY3R4ID0ge307XFxuMTE0OTpcXHRcXG4xMTUwOlxcdFxcdGZvbGlvX2JhdGNoX2luaXQoXFx1MDAyNmZyZWVfZm9saW9zKTtcXG4xMTUxOlxcdFxcdG1lbXNldChzdGF0LCAwLCBzaXplb2YoKnN0YXQpKTtcXG4xMTUyOlxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbjExNTM6XFx0XFx0ZG9fZGVtb3RlX3Bhc3MgPSBjYW5fZGVtb3RlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBzYywgbWVtY2cpO1xcbjExNTQ6XFx0XFxuMTE1NTpcXHRyZXRyeTpcXG4xMTU2OlxcdFxcdHdoaWxlICghbGlzdF9lbXB0eShmb2xpb19saXN0KSkge1xcbjExNTc6XFx0XFx0XFx0c3RydWN0IGFkZHJlc3Nfc3BhY2UgKm1hcHBpbmc7XFxuMTE1ODpcXHRcXHRcXHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xcbjExNTk6XFx0XFx0XFx0ZW51bSBmb2xpb19yZWZlcmVuY2VzIHJlZmVyZW5jZXMgPSBGT0xJT1JFRl9SRUNMQUlNO1xcbjExNjA6XFx0XFx0XFx0Ym9vbCBkaXJ0eSwgd3JpdGViYWNrO1xcbjExNjE6XFx0XFx0XFx0dW5zaWduZWQgaW50IG5yX3BhZ2VzO1xcbjExNjI6XFx0XFxuMTE2MzpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4xMTY0OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMjo0MS41ODc1MDYwMjZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MTkwMDg2NTQyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgRm9saW8gRXZpY3Rpb24gYW5kIFdyaXRlYmFjayoqXG5cbk9rYXksIHNvIEknbSBkaXZpbmcgaW50byB0aGlzIGZvbGlvIG1hbmFnZW1lbnQgY29kZSBhZ2Fpbi4gTGluZSAxMTUxLCByaWdodCwgdGhlcmUncyBhIGBtZW1zZXQoc3RhdCwgMCwgc2l6ZW9mKCpzdGF0KSk7YC4gVGhhdCdzIGltcG9ydGFudDsgYHNocmlua19mb2xpb19saXN0YCBpcyB6ZXJvaW5nIG91dCB0aGUgYHN0YXRgIHN0cnVjdC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW1wbGljYXRpb25zIG9mIHRoaXMgemVyb2luZyBhY3Rpb24gaW4gcmVsYXRpb24gdG8gdGhlIGV2aWN0aW9uIHByb2Nlc3MsIHNvIGxldCdzIGNoZWNrIGBldmljdF9mb2xpb3MoKWAgYXJvdW5kIGxpbmUgNTA2MC4gTXkgZ29hbCBpcyB0byBzZWUgZXhhY3RseSBob3cgaXQgbWFuYWdlcyByZXRyaWVzIGlmIGV2aWN0aW9uIGZhaWxzIGZvciBzb21lIHJlYXNvbiBhbmQsIGNydWNpYWxseSwgdW5kZXJzdGFuZCB0aGUgbWVjaGFuaWNzIG9mIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgaW50ZXJwbGF5IGJldHdlZW4gdGhlIGBzdGF0YCBkYXRhIHN0cnVjdHVyZSBhbmQgdGhlc2UgZnVuY3Rpb25zLiBJ4oCZbSB0aGlua2luZyBhYm91dCBwb3NzaWJsZSByYWNlIGNvbmRpdGlvbnMgYW5kIGhvdyB0aGVzZSByZXRyeSBtZWNoYW5pc21zIGFyZSBkZXNpZ25lZCB0byBtaXRpZ2F0ZSBwb3RlbnRpYWwgaXNzdWVzLiBMZXQncyBzZWUgaG93IHRoaXMgYWxsIGhhbmdzIHRvZ2V0aGVy4oCmXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY5MDAsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjIyOjQzLjQ4ODM3NDExMVoiLCJTZXEiOjM2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NTAzNTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNTA2MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNTA2MDpcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmxpc3QsIFxcdTAwMjZpc29sYXRlZCwgXFx1MDAyNnR5cGUsIFxcdTAwMjZ0eXBlX3NjYW5uZWQpO1xcbjUwNjE6XFx0XFx0bnJfaXNvbGF0ZWQgPSBpc29sYXRlZDtcXG41MDYyOlxcdFxcbjUwNjM6XFx0XFx0LyogU2Nhbm5pbmcgbWF5IGhhdmUgZW1wdGllZCB0aGUgb2xkZXN0IGdlbiwgZmx1c2ggaXQgKi9cXG41MDY0OlxcdFxcdGlmIChzY2FubmVkKVxcbjUwNjU6XFx0XFx0XFx0dHJ5X3RvX2luY19taW5fc2VxKGxydXZlYywgc3dhcHBpbmVzcyk7XFxuNTA2NjpcXHRcXG41MDY3OlxcdFxcdGxydXZlY191bmxvY2tfaXJxKGxydXZlYyk7XFxuNTA2ODpcXHRcXG41MDY5OlxcdFxcdGlmIChsaXN0X2VtcHR5KFxcdTAwMjZsaXN0KSlcXG41MDcwOlxcdFxcdFxcdHJldHVybiBzY2FubmVkO1xcbjUwNzE6XFx0cmV0cnk6XFxuNTA3MjpcXHRcXHRyZWNsYWltZWQgPSBzaHJpbmtfZm9saW9fbGlzdChcXHUwMDI2bGlzdCwgcGdkYXQsIHNjLCBcXHUwMDI2c3RhdCwgZmFsc2UsIG1lbWNnKTtcXG41MDczOlxcdFxcdHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgKz0gcmVjbGFpbWVkO1xcbjUwNzQ6XFx0XFx0dG90YWxfcmVjbGFpbWVkICs9IHJlY2xhaW1lZDtcXG41MDc1OlxcdFxcdC8qIFJldHJ5IHBhc3MgaXMgb25seSBtZWFudCBmb3IgY2xlYW4gZm9saW9zIHdpdGhvdXQgbmV3IGlzb2xhdGlvbiAqL1xcbjUwNzY6XFx0XFx0aWYgKGlzb2xhdGVkKVxcbjUwNzc6XFx0XFx0XFx0aGFuZGxlX3JlY2xhaW1fd3JpdGViYWNrKGlzb2xhdGVkLCBwZ2RhdCwgc2MsIFxcdTAwMjZzdGF0KTtcXG41MDc4OlxcdFxcdHRyYWNlX21tX3Ztc2Nhbl9scnVfc2hyaW5rX2luYWN0aXZlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLFxcbjUwNzk6XFx0XFx0XFx0XFx0dHlwZV9zY2FubmVkLCByZWNsYWltZWQsIFxcdTAwMjZzdGF0LCBzYy1cXHUwMDNlcHJpb3JpdHksXFxuNTA4MDpcXHRcXHRcXHRcXHR0eXBlID8gTFJVX0lOQUNUSVZFX0ZJTEUgOiBMUlVfSU5BQ1RJVkVfQU5PTik7XFxuNTA4MTpcXHRcXG41MDgyOlxcdFxcdGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhcXHUwMDI2bGlzdCwgXFx1MDAyNmNsZWFuLCBscnV2ZWMsIHR5cGUsIHNraXBfcmV0cnkpO1xcbjUwODM6XFx0XFxuNTA4NDpcXHRcXHRtb3ZlX2ZvbGlvc190b19scnUoXFx1MDAyNmxpc3QpO1xcbjUwODU6XFx0XFxuNTA4NjpcXHRcXHR3YWxrID0gY3VycmVudC1cXHUwMDNlcmVjbGFpbV9zdGF0ZS1cXHUwMDNlbW1fd2FsaztcXG41MDg3OlxcdFxcdGlmICh3YWxrIFxcdTAwMjZcXHUwMDI2IHdhbGstXFx1MDAzZWJhdGNoZWQpIHtcXG41MDg4OlxcdFxcdFxcdHdhbGstXFx1MDAzZWxydXZlYyA9IGxydXZlYztcXG41MDg5OlxcdFxcdFxcdHJlc2V0X2JhdGNoX3NpemUod2Fsayk7XFxuNTA5MDpcXHRcXHR9XFxuNTA5MTpcXHRcXG41MDkyOlxcdFxcdG1vZF9scnV2ZWNfc3RhdGUobHJ1dmVjLCBQR0RFTU9URV9LU1dBUEQgKyByZWNsYWltZXJfb2Zmc2V0KHNjKSxcXG41MDkzOlxcdFxcdFxcdFxcdFxcdFxcdHN0YXQubnJfZGVtb3RlZCk7XFxuNTA5NDpcXHRcXG41MDk1OlxcdFxcdGl0ZW0gPSBQR1NURUFMX0tTV0FQRCArIHJlY2xhaW1lcl9vZmZzZXQoc2MpO1xcbjUwOTY6XFx0XFx0bW9kX2xydXZlY19zdGF0ZShscnV2ZWMsIGl0ZW0sIHJlY2xhaW1lZCk7XFxuNTA5NzpcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdTVEVBTF9BTk9OICsgdHlwZSwgcmVjbGFpbWVkKTtcXG41MDk4OlxcdFxcbjUwOTk6XFx0XFx0bGlzdF9zcGxpY2VfaW5pdChcXHUwMDI2Y2xlYW4sIFxcdTAwMjZsaXN0KTtcXG41MTAwOlxcdFxcbjUxMDE6XFx0XFx0aWYgKCFsaXN0X2VtcHR5KFxcdTAwMjZsaXN0KSkge1xcbjUxMDI6XFx0XFx0XFx0c2tpcF9yZXRyeSA9IHRydWU7XFxuNTEwMzpcXHRcXHRcXHRpc29sYXRlZCA9IDA7XFxuNTEwNDpcXHRcXHRcXHRnb3RvIHJldHJ5O1xcbjUxMDU6XFx0XFx0fVxcbjUxMDY6XFx0XFxuNTEwNzpcXHRcXHRpZiAobnJfaXNvbGF0ZWQgXFx1MDAzZSB0b3RhbF9yZWNsYWltZWQpXFxuNTEwODpcXHRcXHRcXHRtb2RfbHJ1dmVjX3N0YXRlKGxydXZlYywgUEdST1RBVEVfQU5PTiArIHR5cGUsXFxuNTEwOTpcXHRcXHRcXHRcXHRcXHQgbnJfaXNvbGF0ZWQgLSB0b3RhbF9yZWNsYWltZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyMjo0My40ODg4MjY3MjFaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6OTAwMjg1MjQ3MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIE1lbW9yeSBNYW5hZ2VtZW50OiBBIERlZXAgRGl2ZSBpbnRvIFBhZ2UgUmVjbGFtYXRpb24qKlxuXG5Pa2F5LCBsZXQncyBkaXNzZWN0IHRoZXNlIG1lbW9yeSBtYW5hZ2VtZW50IGZ1bmN0aW9ucywgZm9jdXNpbmcgb24gaG93IHRoZXkgcmVsYXRlIHRvIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgcGFnZSByZWNsYW1hdGlvbi4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIG9uIHRoZSBpbnRlcnBsYXkgYmV0d2VlbiBgZXZpY3RfZm9saW9zYCBhbmQgYHNocmlua19pbmFjdGl2ZV9saXN0YCwgd2hpY2ggYXJlIGtleSBjb21wb25lbnRzIGluIHRoZSBrZXJuZWwncyBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVneS5cblxuSW4gYHNocmlua19pbmFjdGl2ZV9saXN0YCwgSSdtIGxvb2tpbmcgY2xvc2VseSBhdCBob3cgdGhlIGluYWN0aXZlIGxpc3QgaXMgcHJvY2Vzc2VkLiBJIHNlZSBhIGBmb2xpb19saXN0YCBiZWluZyB1c2VkLCBhbmQgYSBjcml0aWNhbCBkZXRhaWwgaXMgdGhlIGludHJvZHVjdGlvbiBvZiBhIGBjbGVhbl9saXN0YC4gVGhpcyBpcyBpbnRlcmVzdGluZyBiZWNhdXNlIHRoZSBjb2RlIGlzIGNsZWFybHkgZGVzaWduZWQgdG8gaGFuZGxlIFwiY2xlYW5cIiBmb2xpb3MgZGlmZmVyZW50bHkuIFRoZSBuZXcgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AgZnVuY3Rpb24gaXMgY2FsbGVkLCBhbmQgYSBrZXkgcGFyYW1ldGVyIGlzIGBza2lwX3JldHJ5YCwgd2hpY2ggaW5kaWNhdGVzIHRoZXJlIG1pZ2h0IGJlIHNvbWUga2luZCBvZiByZXRyeSBtZWNoYW5pc20gaW4gcGxhY2UuIEl0IHNlZW1zIHRvIGJlIHJlbGF0ZWQgdG8gdGhlIGBjbGVhbl9saXN0YC4gSSBzZWUgdGhhdCB0aGUgY29kZSBpcyBhdHRlbXB0aW5nIHRvIGlkZW50aWZ5IGZvbGlvcyB0aGF0IGhhdmUgcG90ZW50aWFsbHkgbm90IGJlZW4gaGFuZGxlZCBjb3JyZWN0bHkgaW4gYSBwcmV2aW91cyBhdHRlbXB0LCBhbmQgbW92ZSB0aGVtIHRvIHRoZSBgY2xlYW5fbGlzdGAsIGFuZCB0aGVuIHJldHJ5LiBUaGlzIGlzIGltcG9ydGFudCB0byBub3RlIGFuZCB1bmRlcnN0YW5kLlxuXG5UaGUgY29kZSB0aGVuIGNhbGxzIGBzaHJpbmtfZm9saW9fbGlzdGAsIHdoaWNoIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgYWN0dWFsIHJlY2xhbWF0aW9uLiBDcml0aWNhbGx5LCBpdCB0aGVuIGNhbGxzIGBoYW5kbGVfcmVjbGFpbV93cml0ZWJhY2tgLCB3aGljaCBzdWdnZXN0cyB0aGUgY29kZSBpcyBkZXNpZ25lZCB0byBkbyB3cml0ZWJhY2sgYW5kIGhhbmRsZSB0aGVzZSBmb2xpb3MgY29ycmVjdGx5LlxuXG5UaGVuLCB0aGVyZSdzIGEgbG9vcCB3aXRoIGEgYHJldHJ5YCBsYWJlbCB0aGF0J3MgZW50ZXJlZCBpZiBgIWxpc3RfZW1wdHkoXHUwMDI2Y2xlYW5fbGlzdClgLiAgVGhpcyBpcyBrZXk7IHRoZSBmdW5jdGlvbiB0cmllcyB0byB3b3JrIGFyb3VuZCBpc3N1ZXMgc3VjaCBhcyBhIGZpbGUgdGhhdCBoYXMgYmVlbiBmbGFnZ2VkIGFzIG5lZWRpbmcgd3JpdGViYWNrLCBidXQgaGFzIG5vdCB5ZXQgYmVlbiBwcm9jZXNzZWQuIFRoZSBmb2xpb3MgYXJlIGlzb2xhdGVkLCByZWNsYWltZWQsIGFuZCB0aGVuIHRoZSByZXRyeSBoYXBwZW5zLCB1bnRpbCBhbGwgdGhlIGBjbGVhbl9saXN0YCBpdGVtcyBoYXZlIGJlZW4gY2xlYXJlZC5cblxuTmV4dCwgSSBuZWVkIHRvIGxvb2sgaW50byBob3cgdGhlIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgIGZ1bmN0aW9uIGlzIHN0cnVjdHVyZWQsIGFuZCBob3cgdGhlIGBza2lwX3JldHJ5YCBwYXJhbWV0ZXIgcGxheXMgYSByb2xlLiBJZiBgc2tpcF9yZXRyeWAgaXMgYGZhbHNlYCwgdGhlIGNvZGUgaXMgZGVzaWduZWQgdG8gaWRlbnRpZnkgZm9saW9zIHRoYXQgd2VyZSBub3QgcmVjbGFpbWVkIGNvcnJlY3RseSwgc3VjaCBhcyBvbmVzIHRoYXQgd2VyZSBub3QgYWN0aXZlLCBub3QgbWFwcGVkLCBhbmQgbm90IGRpcnR5L3dyaXRlYmFjaywgYW5kIG1vdmUgdGhlbSB0byB0aGUgYGNsZWFuX2xpc3RgIHRvIGFsbG93IGZvciBhIHJldHJ5LlxuTm93LCB3aGVuIENPTkZJR19MUlVfR0VOIGlzIGVuYWJsZWQsIEkgc2VlIHRoYXQgdGhlIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgIGZ1bmN0aW9uIHVzZXMgYGZpbGVgIGFzIHRoZSB0eXBlLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgZnVuY3Rpb24gaXMgaGFuZGxpbmcgdGhlIGdlbmVyaWMgbHJ1IHR5cGUgY29ycmVjdGx5LiBgZXZpY3RfZm9saW9zYCB1c2VzIGEgYHR5cGVgIGZvciBMUlVfR0VOLCBhbmQgSSBuZWVkIHRvIGNoZWNrIHdoYXQgYHR5cGVgIGlzIGluIGBldmljdF9mb2xpb3NgIHRvIGVuc3VyZSB0aGF0IGl0J3MgYWxsIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgwMjIsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDg0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjQ6MTMuNTE3MzUzOTA0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Njg5MDg4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJpbnQgdHlwZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0xODQ9c3RhdGljIHZvaWQgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsXFxubW0vdm1zY2FuLmMtMTg1LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGxpc3RfaGVhZCAqY2xlYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYzoxODY6XFx0XFx0XFx0XFx0ICAgICBpbnQgdHlwZSwgYm9vbCBza2lwX3JldHJ5KTtcXG5tbS92bXNjYW4uYy0xODctXFxuLS1cXG5tbS92bXNjYW4uYz0xMTM3PXN0YXRpYyB1bnNpZ25lZCBpbnQgc2hyaW5rX2ZvbGlvX2xpc3Qoc3RydWN0IGxpc3RfaGVhZCAqZm9saW9fbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTE2MTQtXFx0XFx0aWYgKCFmb2xpb190ZXN0X21sb2NrZWQoZm9saW8pKSB7XFxubW0vdm1zY2FuLmM6MTYxNTpcXHRcXHRcXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG5tbS92bXNjYW4uYy0xNjE2LVxcdFxcdFxcdGZvbGlvX3NldF9hY3RpdmUoZm9saW8pO1xcbi0tXFxubW0vdm1zY2FuLmM9Mjg2Nz1zdGF0aWMgaW50IGdldF9zd2FwcGluZXNzKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy0yODg1LVxcbm1tL3Ztc2Nhbi5jOjI4ODY6c3RhdGljIGludCBnZXRfbnJfZ2VucyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIGludCB0eXBlKVxcbm1tL3Ztc2Nhbi5jLTI4ODcte1xcbi0tXFxubW0vdm1zY2FuLmM9Mjg5MT1zdGF0aWMgYm9vbCBfX21heWJlX3VudXNlZCBzZXFfaXNfdmFsaWQoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbm1tL3Ztc2Nhbi5jLTI4OTIte1xcbm1tL3Ztc2Nhbi5jOjI4OTM6XFx0aW50IHR5cGU7XFxubW0vdm1zY2FuLmMtMjg5NC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTMyOTU9c3RydWN0IGN0cmxfcG9zIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTMzMDAtXFxubW0vdm1zY2FuLmM6MzMwMTpzdGF0aWMgdm9pZCByZWFkX2N0cmxfcG9zKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUsIGludCB0aWVyX21pbixcXG5tbS92bXNjYW4uYy0zMzAyLVxcdFxcdFxcdCAgaW50IHRpZXJfbWF4LCBpbnQgZ2Fpbiwgc3RydWN0IGN0cmxfcG9zICpwb3MpXFxuLS1cXG5tbS92bXNjYW4uYy0zMzE5LVxcbm1tL3Ztc2Nhbi5jOjMzMjA6c3RhdGljIHZvaWQgcmVzZXRfY3RybF9wb3Moc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgYm9vbCBjYXJyeW92ZXIpXFxubW0vdm1zY2FuLmMtMzMyMS17XFxuLS1cXG5tbS92bXNjYW4uYz0zNDM0PXN0YXRpYyBpbnQgZm9saW9faW5jX2dlbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBmb2xpbyAqZm9saW8pXFxubW0vdm1zY2FuLmMtMzQzNS17XFxubW0vdm1zY2FuLmM6MzQzNjpcXHRpbnQgdHlwZSA9IGZvbGlvX2lzX2ZpbGVfbHJ1KGZvbGlvKTtcXG5tbS92bXNjYW4uYy0zNDM3LVxcdHN0cnVjdCBscnVfZ2VuX2ZvbGlvICpscnVnZW4gPSBcXHUwMDI2bHJ1dmVjLVxcdTAwM2VscnVnZW47XFxuLS1cXG5tbS92bXNjYW4uYz0zNDQ3PXN0YXRpYyB2b2lkIHVwZGF0ZV9iYXRjaF9zaXplKHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGssIHN0cnVjdCBmb2xpbyAqZm9saW8sXFxubW0vdm1zY2FuLmM6MzQ0ODpcXHRcXHRcXHQgICAgICBpbnQgb2xkX2dlbiwgaW50IG5ld19nZW4sIGludCB0eXBlKVxcbm1tL3Ztc2Nhbi5jLTM0NDkte1xcbi0tXFxubW0vdm1zY2FuLmM9NDAxOT1zdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfbHJ1X2JhdGNoKHN0cnVjdCBsaXN0X2hlYWQgKmhlYWQsIHN0cnVjdCBsaXN0X2hlYWQgKipiYXRjaF9lbmQsXFxuLS1cXG5tbS92bXNjYW4uYy00MDMxLVxcbm1tL3Ztc2Nhbi5jOjQwMzI6c3RhdGljIGJvb2wgaW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgdHlwZSwgaW50IHN3YXBwaW5lc3MpXFxubW0vdm1zY2FuLmMtNDAzMy17XFxuLS1cXG5tbS92bXNjYW4uYz00MTY2PXN0YXRpYyBib29sIGluY19tYXhfc2VxKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgdW5zaWduZWQgbG9uZyBzZXEsIGludCBzd2FwcGluZXNzKVxcbi0tXFxubW0vdm1zY2FuLmMtNDE2OS1cXHRpbnQgcHJldiwgbmV4dDtcXG5tbS92bXNjYW4uYzo0MTcwOlxcdGludCB0eXBlLCB6b25lO1xcbm1tL3Ztc2Nhbi5jLTQxNzEtXFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ2NDc9Ym9vbCByZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ2NDktXFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjID0gZ2V0X2xydXZlYyhtZW1jZywgbmlkKTtcXG5tbS92bXNjYW4uYzo0NjUwOlxcdGludCB0eXBlO1xcbm1tL3Ztc2Nhbi5jLTQ2NTEtXFxuLS1cXG5tbS92bXNjYW4uYz00Njk0PXZvaWQgbWF4X2xydV9nZW5fbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtNDY5Ni1cXHRzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMgPSBnZXRfbHJ1dmVjKG1lbWNnLCBuaWQpO1xcbm1tL3Ztc2Nhbi5jOjQ2OTc6XFx0aW50IHR5cGU7XFxubW0vdm1zY2FuLmMtNDY5OC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ3MzU9c3RhdGljIHZvaWQgX19scnVfZ2VuX3JlcGFyZW50X21lbWNnKHN0cnVjdCBscnV2ZWMgKmNoaWxkX2xydXZlYywgc3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyxcXG5tbS92bXNjYW4uYzo0NzM2OlxcdFxcdFxcdFxcdCAgICAgaW50IHpvbmUsIGludCB0eXBlKVxcbm1tL3Ztc2Nhbi5jLTQ3Mzcte1xcbi0tXFxubW0vdm1zY2FuLmM9NDc2Nj12b2lkIGxydV9nZW5fcmVwYXJlbnRfbWVtY2coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbi0tXFxubW0vdm1zY2FuLmMtNDc2OC1cXHRzdHJ1Y3QgbHJ1dmVjICpjaGlsZF9scnV2ZWMsICpwYXJlbnRfbHJ1dmVjO1xcbm1tL3Ztc2Nhbi5jOjQ3Njk6XFx0aW50IHR5cGUsIHppZDtcXG5tbS92bXNjYW4uYy00NzcwLVxcdHN0cnVjdCB6b25lICp6b25lO1xcbi0tXFxubW0vdm1zY2FuLmM9NDgwMD1zdGF0aWMgYm9vbCBzb3J0X2ZvbGlvKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXFxuLS1cXG5tbS92bXNjYW4uYy00ODAzLVxcdGludCBnZW4gPSBmb2xpb19scnVfZ2VuKGZvbGlvKTtcXG5tbS92bXNjYW4uYzo0ODA0OlxcdGludCB0eXBlID0gZm9saW9faXNfZmlsZV9scnUoZm9saW8pO1xcbm1tL3Ztc2Nhbi5jLTQ4MDUtXFx0aW50IHpvbmUgPSBmb2xpb196b25lbnVtKGZvbGlvKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ4NzM9c3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYzo0ODc0OlxcdFxcdCAgICAgICBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYywgaW50IHR5cGUsIGludCB0aWVyLFxcbm1tL3Ztc2Nhbi5jLTQ4NzUtXFx0XFx0ICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIGludCAqaXNvbGF0ZWRwKVxcbi0tXFxubW0vdm1zY2FuLmMtNDk0Ny1cXG5tbS92bXNjYW4uYzo0OTQ4OnN0YXRpYyBpbnQgZ2V0X3RpZXJfaWR4KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHR5cGUpXFxubW0vdm1zY2FuLmMtNDk0OS17XFxuLS1cXG5tbS92bXNjYW4uYz00OTk1PXN0YXRpYyBpbnQgaXNvbGF0ZV9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuLS1cXG5tbS92bXNjYW4uYy01MDAwLVxcdGJvb2wgdHlwZV9mYWxsYmFja19hbGxvd2VkID0gIWlzX3NpbmdsZV90eXBlX3JlY2xhaW0oc3dhcHBpbmVzcyk7XFxubW0vdm1zY2FuLmM6NTAwMTpcXHRpbnQgdHlwZSA9IGdldF90eXBlX3RvX3NjYW4obHJ1dmVjLCBzd2FwcGluZXNzKTtcXG5tbS92bXNjYW4uYy01MDAyLVxcdGludCB0b3RhbF9zY2FubmVkID0gMCwgc2Nhbm5lZCwgdGllcjtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU0NDM9c3RhdGljIGJvb2wgZmlsbF9ldmljdGFibGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjKVxcbi0tXFxubW0vdm1zY2FuLmMtNTQ0OC1cXHRmb3JfZWFjaF9ldmljdGFibGVfbHJ1KGxydSkge1xcbm1tL3Ztc2Nhbi5jOjU0NDk6XFx0XFx0aW50IHR5cGUgPSBpc19maWxlX2xydShscnUpO1xcbm1tL3Ztc2Nhbi5jLTU0NTAtXFx0XFx0Ym9vbCBhY3RpdmUgPSBpc19hY3RpdmVfbHJ1KGxydSk7XFxuLS1cXG5tbS92bXNjYW4uYz01NzA5PXN0YXRpYyB2b2lkIGxydV9nZW5fc2VxX3Nob3dfZnVsbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3MTMtXFx0aW50IGk7XFxubW0vdm1zY2FuLmM6NTcxNDpcXHRpbnQgdHlwZSwgdGllcjtcXG5tbS92bXNjYW4uYy01NzE1LVxcdGludCBoaXN0ID0gbHJ1X2hpc3RfZnJvbV9zZXEoc2VxKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTU3NjQ9c3RhdGljIGludCBscnVfZ2VuX3NlcV9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU3OTQtXFx0Zm9yICg7IHNlcSBcXHUwMDNjPSBtYXhfc2VxOyBzZXErKykge1xcbm1tL3Ztc2Nhbi5jOjU3OTU6XFx0XFx0aW50IHR5cGUsIHpvbmU7XFxubW0vdm1zY2FuLmMtNTc5Ni1cXHRcXHRpbnQgZ2VuID0gbHJ1X2dlbl9mcm9tX3NlcShzZXEpO1xcbi0tXFxubW0vdm1zY2FuLmM9NjEzNj1zdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG5tbS92bXNjYW4uYy02MTM3LVxcdFxcdFxcdFxcdCAgICAgc3RydWN0IGxpc3RfaGVhZCAqY2xlYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5tbS92bXNjYW4uYzo2MTM4OlxcdFxcdFxcdFxcdCAgICAgaW50IHR5cGUsIGJvb2wgc2tpcF9yZXRyeSlcXG5tbS92bXNjYW4uYy02MTM5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjQ6MTMuNTg0MjY3ODAzWiIsIlNlcSI6MzksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjYxNjg5MDY4NzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYCBGdW5jdGlvbioqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIGBpc19maWxlX2xydShscnUpYOKAlHJpZ2h0LCB0aGF0J3MganVzdCBhIHNpbXBsZSAwIG9yIDEgaW5kaWNhdG9yLCBtYXRjaGluZyBgdHlwZWAgaW4gTUdMUlUuIE1ha2VzIHNlbnNlLiBOb3csIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgOiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgbG9naWMuIEl0J3MgaXRlcmF0aW5nIGluIHJldmVyc2UgdGhyb3VnaCBhIGBsaXN0X2hlYWRgIChwcmVzdW1hYmx5IG9mIGZvbGlvcyksIHNhZmVseSB1c2luZyBgbGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlX3JldmVyc2VgLiBTdGFuZGFyZCBwcmFjdGljZS5cblxuVGhlIGZpcnN0IGBpZmAgc3RhdGVtZW50IGlzIGxvb2tpbmcgZm9yIHVuZXZpY3RhYmxlIGZvbGlvcyDigJMgaGFuZGxlZCBlZmZpY2llbnRseSB1c2luZyBgZm9saW9fZXZpY3RhYmxlKClgLiBTa2lwIHRoZW07IHdlIGRvbuKAmXQgY2FyZSBhYm91dCB0aG9zZSByaWdodCBub3cuXG5cblRoZSBuZXh0IGBpZmAgaXMgYSByZXRyeSBtZWNoYW5pc20uIEl0J3MgY2hlY2tpbmcgaWYgdGhlIGZvbGlvICptaWdodCogaGF2ZSBiZWVuIG1pc3NlZCBieSBgZm9saW9fcm90YXRlX3JlY2xhaW1hYmxlKClgLiBUaGUgY29uZGl0aW9ucyBgIWZvbGlvX3Rlc3RfYWN0aXZlYCwgYCFmb2xpb19tYXBwZWRgLCBgIWZvbGlvX3Rlc3RfZGlydHlgLCBhbmQgYCFmb2xpb190ZXN0X3dyaXRlYmFja2Agc2VlbSB0byBpbmRpY2F0ZSB0aGF0IHRoZSBmb2xpbyBpcyAqaW5hY3RpdmUqLCAqdW5tYXBwZWQqLCBhbmQgKm5vdCogY3VycmVudGx5IGRpcnR5IG9yIHVuZGVyZ29pbmcgd3JpdGViYWNrLiBJZiBhbGwgdGhvc2UgY29uZGl0aW9ucyBhcmUgdHJ1ZSwgaXQgbW92ZXMgdGhlIGZvbGlvIHRvIHRoZSBgY2xlYW5gIGxpc3QuIFNlZW1zIGxpa2UgYSBnb29kIHN0cmF0ZWd5IHRvIGhhbmRsZSBwb3RlbnRpYWwgbWlzc2VkIHJlY2xhaW0gYXR0ZW1wdHMuXG5cbk5vdywgdGhhdCBgQ09ORklHX0xSVV9HRU5gIHNlY3Rpb24uICpIbW0qLCBsZXQncyBzZWUuIEl0IHJlZmVyZW5jZXMgYGxydXZlYy1cdTAwM2VscnVnZW4uZW5hYmxlZGAuLi4gYW5kIHRoZSBjb21wYXJpc29uIGFnYWluc3QgYG1pbl9zZXFbdHlwZV1gLiBUaGlzIGltcGxpZXMgc29tZSBnZW5lcmF0aW9uLWJhc2VkIExSVSBzY2hlbWUuIEl0J3Mgc2V0dGluZyB0aGUgZm9saW/igJlzIExSVSByZWZzIHRvIDAsIHdoaWNoIGNsZWFycyB0aGUgcmVmZXJlbmNlIGNvdW50LCBhbmQgdGhlbiBzZXRzIHRoZSBhY3RpdmUgYml0LiBUaGlzIG11c3QgcmVsYXRlIHRvIGhhbmRsaW5nIHJlamVjdGVkIGZvbGlvcyB3aXRoaW4gdGhlIGdlbmVyYXRpb24gbG9naWMuIEkgbmVlZCB0byBrZWVwIHRoYXQgaW4gbWluZCBhcyBJIGZvbGxvdyB0aHJvdWdoLlxuXG5Ib2xkIG9uLCBsZXQgbWUgcXVpY2tseSBjb25maXJtIHRoYXQgYGxydXZlYy1cdTAwM2VscnVnZW4uZW5hYmxlZGAg4oCTIHRoYXQncyBjcnVjaWFsLiBJJ2xsIHNlYXJjaCBmb3Igd2hlcmUgdGhhdCdzIHNldCBhbmQgdXNlZC4gSSdsbCBzZWFyY2ggdGhlIGNvZGUgZm9yIGBscnVnZW4uZW5hYmxlZGAgb3IgYGxydV9nZW5fZW5hYmxlZCgpYC4gVGhpcyBnZW5lcmF0aW9uLWJhc2VkIExSVSBsb2dpYyBpcyBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgdGhlc2UgZm9saW9zIGFyZSBiZWluZyBtYW5hZ2VkLiBJJ2xsIGRpZyBkZWVwZXIgdG8gc2VlIGlmIEkgY2FuIGZpbmQgaG93IHRoZSBzZXF1ZW5jZXMgd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMzksIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjQ6MTkuNzUzMTc3MzQyWiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1Mzg4MTAyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVnZW5cXFxcLmVuYWJsZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTU1MTc9c3RhdGljIHZvaWQgbHJ1X2dlbl9jaGFuZ2Vfc3RhdGUoYm9vbCBlbmFibGVkKVxcbi0tXFxubW0vdm1zY2FuLmMtNTU0OS1cXG5tbS92bXNjYW4uYzo1NTUwOlxcdFxcdFxcdGxydXZlYy1cXHUwMDNlbHJ1Z2VuLmVuYWJsZWQgPSBlbmFibGVkO1xcbm1tL3Ztc2Nhbi5jLTU1NTEtXFxuLS1cXG5tbS92bXNjYW4uYz02MTM2PXN0YXRpYyB2b2lkIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjayhzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LFxcbi0tXFxubW0vdm1zY2FuLmMtNjE1OC1cXHRcXHQvKiBkb24ndCBhZGQgcmVqZWN0ZWQgZm9saW9zIHRvIHRoZSBvbGRlc3QgZ2VuZXJhdGlvbiAqL1xcbm1tL3Ztc2Nhbi5jOjYxNTk6XFx0XFx0aWYgKGxydXZlYy1cXHUwMDNlbHJ1Z2VuLmVuYWJsZWQgXFx1MDAyNlxcdTAwMjZcXG5tbS92bXNjYW4uYy02MTYwLVxcdFxcdCAgICBscnVfZ2VuX2ZvbGlvX3NlcShscnV2ZWMsIGZvbGlvLCBmYWxzZSkgPT0gbWluX3NlcVt0eXBlXSkge1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyNDoxOS44MDcwNjMzODNaIiwiU2VxIjo0MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjY4Mjg1NzQwOSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcGx5IGZhbWlsaWFyIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYW5kIGNhY2hpbmcgYWxnb3JpdGhtczpcblxuKipJbnZlc3RpZ2F0aW5nIGBscnVfZ2VuX2VuYWJsZWQoKWAqKlxuXG5SaWdodCwgbGV0J3MgZGl2ZSBpbi4gVGhlIGNvZGUgaXMgbG9va2luZyBhdCBgbHJ1X2dlbl9lbmFibGVkKClgLiBNeSBmaXJzdCB0aG91Z2h0IGlzOiBcIldoeSBhcmUgd2UgY2hlY2tpbmcgdGhpcyBwYXJ0aWN1bGFyIGZ1bmN0aW9uP1wiIEl0IGltcGxpZXMgdGhhdCB0aGUgc3lzdGVtIGlzIGNvbnNpZGVyaW5nIHRoZSBzdGF0ZSBvZiBMZWFzdCBSZWNlbnRseSBVc2VkIChMUlUpIGdlbmVyYXRpb24gb3Igc29tZSBmZWF0dXJlIHJlbGF0ZWQgdG8gTFJVIGNhY2hpbmcuIFRoaXMgY291bGQgYmUgYW55d2hlcmUgaW4gdGhlIHN5c3RlbTsgaXQgY291bGQgYmUgYSBzaW1wbGUgY2hlY2sgdG8gZW5hYmxlIGEgcGFydGljdWxhciBjYWNoZSBpbiB0aGlzIHNlY3Rpb24gb2YgY29kZSBvciBzb21ldGhpbmcgbW9yZSBpbnZvbHZlZCwgYnV0IGl0IGlzIGNsZWFyIHRoYXQgTFJVIGJlaGF2aW9yIGlzIHJlbGV2YW50IGluIHRoZSBhcmVhIG9mIGNvZGUuIFxuXG5JIGltbWVkaWF0ZWx5IHN0YXJ0IHRvIHRoaW5rIGFib3V0IHRoZSBpbXBsaWNhdGlvbnMuIElzIHRoaXMgYSBmZWF0dXJlIGZsYWc/IElzIGl0IGNvbnRyb2xsaW5nIHRoZSBhY3RpdmF0aW9uIG9mIGFuIExSVSBjYWNoZSBhbGdvcml0aG0gZm9yIHNvbWUgZGF0YSBzdHJ1Y3R1cmVzPyBJZiBzbywgd2hpY2ggb25lcz8gT3IgaXMgaXQgbW9yZSBmdW5kYW1lbnRhbDsgcGVyaGFwcyBgbHJ1X2dlbl9lbmFibGVkKClgIGlzIGJlaW5nIGNhbGxlZCBkdXJpbmcgaW5pdGlhbGl6YXRpb24gdG8gZGVjaWRlIGlmIHdlIGV2ZW4gKnN1cHBvcnQqIExSVSBjYWNoaW5nIGF0IGFsbCBpbiB0aGlzIGN1cnJlbnQgZXhlY3V0aW9uIG9mIHRoZSBjb2RlLlxuXG5JIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgbGFyZ2VyIGNvbnRleHQuIFdoYXQgaXMgdGhlIGdvYWwgb2YgdGhpcyBzZWN0aW9uIG9mIGNvZGU/IFdoYXQgaXMgaXQgdHJ5aW5nIHRvIGFjaGlldmU/IElzIHRoaXMgYSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24/IElzIGl0IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGRpc2sgY2FjaGluZywgb3Igc29tZSBvdGhlciBhcmVhPyBJIG11c3QgaW52ZXN0aWdhdGUgd2hhdCAqZWxzZSogaXMgaW4gc2NvcGUgdG8gZGV0ZXJtaW5lIHdoYXQgc3BlY2lmaWMga2luZCBvZiBMUlUgYmVoYXZpb3IgaXMgaW1wb3J0YW50IGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTI3LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjQ6MjIuNDg5OTI0NjMyWiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTQ3NjQ5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJscnVfZ2VuX2VuYWJsZWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ZvbGlvLmM9NDI2PXZvaWQgZm9saW9fbWFya19hY2Nlc3NlZChzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy00MjktXFx0XFx0cmV0dXJuO1xcbm1tL2ZvbGlvLmM6NDMwOlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSkge1xcbm1tL2ZvbGlvLmMtNDMxLVxcdFxcdGxydV9nZW5faW5jX3JlZnMoZm9saW8pO1xcbi0tXFxubW0vZm9saW8uYz00NzE9dm9pZCBmb2xpb19hZGRfbHJ1KHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTQ4My1cXHQgKi9cXG5tbS9mb2xpby5jOjQ4NDpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pIFxcdTAwMjZcXHUwMDI2XFxubW0vZm9saW8uYy00ODUtXFx0ICAgIGxydV9nZW5faW5fZmF1bHQoKSBcXHUwMDI2XFx1MDAyNiAhKGN1cnJlbnQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgUEZfTUVNQUxMT0MpKSB7XFxuLS1cXG5tbS9mb2xpby5jPTUzNT1zdGF0aWMgdm9pZCBscnVfZGVhY3RpdmF0ZV9maWxlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG5tbS9mb2xpby5jLTUzNi17XFxubW0vZm9saW8uYzo1Mzc6XFx0Ym9vbCBhY3RpdmUgPSBmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykgfHwgbHJ1X2dlbl9lbmFibGVkKCk7XFxubW0vZm9saW8uYy01MzgtXFx0bG9uZyBucl9wYWdlcyA9IGZvbGlvX25yX3BhZ2VzKGZvbGlvKTtcXG4tLVxcbm1tL2ZvbGlvLmM9NTc2PXN0YXRpYyB2b2lkIGxydV9kZWFjdGl2YXRlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNTc5LVxcbm1tL2ZvbGlvLmM6NTgwOlxcdGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSB8fCAhKGZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSB8fCBscnVfZ2VuX2VuYWJsZWQoKSkpXFxubW0vZm9saW8uYy01ODEtXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZm9saW8uYz01OTI9c3RhdGljIHZvaWQgbHJ1X2xhenlmcmVlKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IGZvbGlvICpmb2xpbylcXG4tLVxcbm1tL2ZvbGlvLmMtNjAxLVxcdGZvbGlvX2NsZWFyX2FjdGl2ZShmb2xpbyk7XFxubW0vZm9saW8uYzo2MDI6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxcbm1tL2ZvbGlvLmMtNjAzLVxcdFxcdGxydV9nZW5fY2xlYXJfcmVmcyhmb2xpbyk7XFxuLS1cXG5tbS9mb2xpby5jPTY3MD12b2lkIGRlYWN0aXZhdGVfZmlsZV9mb2xpbyhzdHJ1Y3QgZm9saW8gKmZvbGlvKVxcbi0tXFxubW0vZm9saW8uYy02NzUtXFxubW0vZm9saW8uYzo2NzY6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2IGxydV9nZW5fY2xlYXJfcmVmcyhmb2xpbykpXFxubW0vZm9saW8uYy02NzctXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vZm9saW8uYz02OTA9dm9pZCBmb2xpb19kZWFjdGl2YXRlKHN0cnVjdCBmb2xpbyAqZm9saW8pXFxuLS1cXG5tbS9mb2xpby5jLTY5NC1cXG5tbS9mb2xpby5jOjY5NTpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgPyBscnVfZ2VuX2NsZWFyX3JlZnMoZm9saW8pIDogIWZvbGlvX3Rlc3RfYWN0aXZlKGZvbGlvKSlcXG5tbS9mb2xpby5jLTY5Ni1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9Mjc4PXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjg1LXJldHJ5Olxcbm1tL21lbWNvbnRyb2wuYzoyODY6XFx0XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxcbm1tL21lbWNvbnRyb2wuYy0yODctXFx0XFx0XFx0bWF4X2xydV9nZW5fbWVtY2cocGFyZW50LCBuaWQpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTI5MC1cXG5tbS9tZW1jb250cm9sLmM6MjkxOlxcdFxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSkge1xcbm1tL21lbWNvbnRyb2wuYy0yOTItXFx0XFx0XFx0aWYgKCFyZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHBhcmVudCwgbmlkKSkge1xcbi0tXFxubW0vcm1hcC5jPTkyMD1zdGF0aWMgYm9vbCBmb2xpb19yZWZlcmVuY2VkX29uZShzdHJ1Y3QgZm9saW8gKmZvbGlvLFxcbi0tXFxubW0vcm1hcC5jLTk4My1cXHRcXHQgKi9cXG5tbS9ybWFwLmM6OTg0OlxcdFxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSBcXHUwMDI2XFx1MDAyNiAhbHJ1X2dlbl9zd2l0Y2hpbmcoKSBcXHUwMDI2XFx1MDAyNiBwdm13LnB0ZSkge1xcbm1tL3JtYXAuYy05ODUtXFx0XFx0XFx0aWYgKGxydV9nZW5fbG9va19hcm91bmQoXFx1MDAyNnB2bXcsIG5yKSlcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM3MD1zdGF0aWMgaW5saW5lIGJvb2wgcmVjbGFpbWFibGVfYW5vbl9pc19sb3coc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vdm1zY2FuLmMtMzg5LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjM5MDpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkpXFxubW0vdm1zY2FuLmMtMzkxLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTk0Nz1zdGF0aWMgZW51bSBmb2xpb19yZWZlcmVuY2VzIGZvbGlvX2NoZWNrX3JlZmVyZW5jZXMoc3RydWN0IGZvbGlvICpmb2xpbyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTk3MS1cXG5tbS92bXNjYW4uYzo5NzI6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2ICFscnVfZ2VuX3N3aXRjaGluZygpKSB7XFxubW0vdm1zY2FuLmMtOTczLVxcdFxcdGlmICghcmVmZXJlbmNlZF9wdGVzKVxcbi0tXFxubW0vdm1zY2FuLmM9MjM4Mz1zdGF0aWMgdm9pZCBwcmVwYXJlX3NjYW5fY29udHJvbChwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTIzODktXFxubW0vdm1zY2FuLmM6MjM5MDpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXFxubW0vdm1zY2FuLmMtMjM5MS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS92bXNjYW4uYz01NTE3PXN0YXRpYyB2b2lkIGxydV9nZW5fY2hhbmdlX3N0YXRlKGJvb2wgZW5hYmxlZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU1MjctXFxubW0vdm1zY2FuLmM6NTUyODpcXHRpZiAoZW5hYmxlZCA9PSBscnVfZ2VuX2VuYWJsZWQoKSlcXG5tbS92bXNjYW4uYy01NTI5LVxcdFxcdGdvdG8gdW5sb2NrO1xcbi0tXFxubW0vdm1zY2FuLmM9NTYxNT1zdGF0aWMgc3NpemVfdCBlbmFibGVkX3N0b3JlKHN0cnVjdCBrb2JqZWN0ICprb2JqLCBzdHJ1Y3Qga29ial9hdHRyaWJ1dGUgKmF0dHIsXFxuLS1cXG5tbS92bXNjYW4uYy01NjQxLVxcbm1tL3Ztc2Nhbi5jOjU2NDI6c3RhdGljIHN0cnVjdCBrb2JqX2F0dHJpYnV0ZSBscnVfZ2VuX2VuYWJsZWRfYXR0ciA9IF9fQVRUUl9SVyhlbmFibGVkKTtcXG5tbS92bXNjYW4uYy01NjQzLVxcbm1tL3Ztc2Nhbi5jPTU2NDQ9c3RhdGljIHN0cnVjdCBhdHRyaWJ1dGUgKmxydV9nZW5fYXR0cnNbXSA9IHtcXG5tbS92bXNjYW4uYy01NjQ1LVxcdFxcdTAwMjZscnVfZ2VuX21pbl90dGxfYXR0ci5hdHRyLFxcbm1tL3Ztc2Nhbi5jOjU2NDY6XFx0XFx1MDAyNmxydV9nZW5fZW5hYmxlZF9hdHRyLmF0dHIsXFxubW0vdm1zY2FuLmMtNTY0Ny1cXHROVUxMXFxuLS1cXG5tbS92bXNjYW4uYz02MDMwPXZvaWQgbHJ1X2dlbl9pbml0X2xydXZlYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMpXFxuLS1cXG5tbS92bXNjYW4uYy02MDM3LVxcdGxydWdlbi1cXHUwMDNlbWF4X3NlcSA9IE1JTl9OUl9HRU5TICsgMTtcXG5tbS92bXNjYW4uYzo2MDM4OlxcdGxydWdlbi1cXHUwMDNlZW5hYmxlZCA9IGxydV9nZW5fZW5hYmxlZCgpO1xcbm1tL3Ztc2Nhbi5jLTYwMzktXFxuLS1cXG5tbS92bXNjYW4uYz02MTY4PXN0YXRpYyB2b2lkIHNocmlua19scnV2ZWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxNzgtXFxubW0vdm1zY2FuLmM6NjE3OTpcXHRpZiAoKGxydV9nZW5fZW5hYmxlZCgpIHx8IGxydV9nZW5fc3dpdGNoaW5nKCkpIFxcdTAwMjZcXHUwMDI2ICFyb290X3JlY2xhaW0oc2MpKSB7XFxubW0vdm1zY2FuLmMtNjE4MC1cXHRcXHRscnVfZ2VuX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxuLS1cXG5tbS92bXNjYW4uYz02NDM4PXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbi0tXFxubW0vdm1zY2FuLmMtNjQ0My1cXG5tbS92bXNjYW4uYzo2NDQ0OlxcdGlmICgobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkgXFx1MDAyNlxcdTAwMjYgcm9vdF9yZWNsYWltKHNjKSkge1xcbm1tL3Ztc2Nhbi5jLTY0NDUtXFx0XFx0bWVtc2V0KFxcdTAwMjZzYy1cXHUwMDNlbnIsIDAsIHNpemVvZihzYy1cXHUwMDNlbnIpKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTY2OTU9c3RhdGljIHZvaWQgc25hcHNob3RfcmVmYXVsdHMoc3RydWN0IG1lbV9jZ3JvdXAgKnRhcmdldF9tZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTY2OTktXFxubW0vdm1zY2FuLmM6NjcwMDpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgXFx1MDAyNlxcdTAwMjYgIWxydV9nZW5fc3dpdGNoaW5nKCkpXFxubW0vdm1zY2FuLmMtNjcwMS1cXHRcXHRyZXR1cm47XFxuLS1cXG5tbS92bXNjYW4uYz03MDQ0PXN0YXRpYyB2b2lkIGtzd2FwZF9hZ2Vfbm9kZShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTcwNDgtXFxubW0vdm1zY2FuLmM6NzA0OTpcXHRpZiAobHJ1X2dlbl9lbmFibGVkKCkgfHwgbHJ1X2dlbl9zd2l0Y2hpbmcoKSkge1xcbm1tL3Ztc2Nhbi5jLTcwNTAtXFx0XFx0bHJ1X2dlbl9hZ2Vfbm9kZShwZ2RhdCwgc2MpO1xcbi0tXFxubW0vd29ya2luZ3NldC5jPTM5Mj12b2lkICp3b3JraW5nc2V0X2V2aWN0aW9uKHN0cnVjdCBmb2xpbyAqZm9saW8sIHN0cnVjdCBtZW1fY2dyb3VwICp0YXJnZXRfbWVtY2cpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNDA0LVxcbm1tL3dvcmtpbmdzZXQuYzo0MDU6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxcbm1tL3dvcmtpbmdzZXQuYy00MDYtXFx0XFx0cmV0dXJuIGxydV9nZW5fZXZpY3Rpb24oZm9saW8pO1xcbi0tXFxubW0vd29ya2luZ3NldC5jPTQzMD1ib29sIHdvcmtpbmdzZXRfdGVzdF9yZWNlbnQodm9pZCAqc2hhZG93LCBib29sIGZpbGUsIGJvb2wgKndvcmtpbmdzZXQsXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtNDQxLVxcbm1tL3dvcmtpbmdzZXQuYzo0NDI6XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XFxubW0vd29ya2luZ3NldC5jLTQ0My1cXHRcXHRib29sIHJlY2VudDtcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz01NDg9dm9pZCB3b3JraW5nc2V0X3JlZmF1bHQoc3RydWN0IGZvbGlvICpmb2xpbywgdm9pZCAqc2hhZG93KVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTU1Ny1cXG5tbS93b3JraW5nc2V0LmM6NTU4OlxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSkge1xcbm1tL3dvcmtpbmdzZXQuYy01NTktXFx0XFx0bHJ1X2dlbl9yZWZhdWx0KGZvbGlvLCBzaGFkb3cpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyNDoyMi41Mzk0MDc0MDRaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NjkyMTIwOTU5OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgUG90ZW50aWFsIElzc3VlcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYHNocmlua19pbmFjdGl2ZV9saXN0YCB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYENPTkZJR19MUlVfR0VOYC4gVGhlIGNvZGUgaW5pdGlhbGx5IGNoZWNrcyBpZiBgbHJ1dmVjLVx1MDAzZWxydWdlbi5lbmFibGVkYCBpcyBmYWxzZSwgYW5kIHNraXBzIGEgYmxvY2sgaWYgaXQncyB0cnVlLiBOb3cgSSdtIGZvY3VzaW5nIG9uIHRoZSBtYWluIGxvb3Agb2YgdGhlIGZ1bmN0aW9uLlxuXG5UaGUgdmFyaWFibGVzIEknbSBwcmltYXJpbHkgY29uY2VybmVkIHdpdGggaGVyZSBhcmUgYG5yX3NjYW5uZWRgLCBgbnJfcmVjbGFpbWVkYCwgYHRvdGFsX3JlY2xhaW1lZGAsIGBucl90YWtlbmAsIGBjbGVhbl9saXN0YCwgYHNraXBfcmV0cnlgLCBgaXNvbGF0ZWRgIGFuZCBgc3RhdGAuIGBucl9zY2FubmVkYCBhbmQgYG5yX3Rha2VuYCBhcmUgZ2V0dGluZyB2YWx1ZXMgcmV0dXJuZWQgZnJvbSBgaXNvbGF0ZV9scnVfZm9saW9zYC4gYG5yX3JlY2xhaW1lZGAgaXMgdGhlIHJldHVybiB2YWx1ZSBvZiBgc2hyaW5rX2ZvbGlvX2xpc3RgLiBJIGNhbiBzZWUgdGhhdCBgdG90YWxfcmVjbGFpbWVkYCBpcyBiZWluZyBpbml0aWFsaXplZCB0byB6ZXJvIGFuZCBhY2N1bXVsYXRpbmcgYG5yX3JlY2xhaW1lZGAuIFRoZSBgc3RhdGAgc3RydWN0dXJlIGlzIGdldHRpbmcgcHJvcGVybHkgemVyb2VkIGluc2lkZSBgc2hyaW5rX2ZvbGlvX2xpc3RgLCB3aGljaCBpcyBnb29kLiBUaGUgb3RoZXIgdmFyaWFibGVzIGFyZSBhbHNvIGluaXRpYWxpemVkLiBJdCBsb29rcyBsaWtlIGBpc29sYXRlZGAgaXMgaW5pdGlhbGl6ZWQgd2l0aCBgbnJfdGFrZW5gLiBgc2tpcF9yZXRyeWAgaXMgZmFsc2UgYXQgdGhlIHN0YXJ0IG9mIHRoZSBmdW5jdGlvbiBhbmQgaXMgc2V0IHRvIHRydWUgd2hlbiB0aGUgYGNsZWFuX2xpc3RgIGlzIG5vdCBlbXB0eS5cblxuVGhlIGB0cmFjZV9tbV92bXNjYW5fbHJ1X3Nocmlua19pbmFjdGl2ZWAgY2FsbCBsb29rcyBva2F5LCBpdCBwYXNzZXMgYWxsIHRoZSBleHBlY3RlZCBwYXJhbWV0ZXJzIGxpa2UgYHBnZGF0LVx1MDAzZW5vZGVfaWRgLCBgbnJfc2Nhbm5lZGAsIGBucl9yZWNsYWltZWRgLCBhbmQgdGhlIGBzdGF0YCBzdHJ1Y3QuXG5cbk5vdywgbGV0J3MgZ2V0IHRvIHRoZSBtZWF0IG9mIHRoZSBmdW5jdGlvbi4gSSdtIGZvY3VzaW5nIG9uIHRoZSBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYCBmdW5jdGlvbiB0aGF0J3MgY2FsbGVkIGhlcmUsIGVzcGVjaWFsbHkgdGhlIGhhbmRsaW5nIG9mIHRoZSBgY2xlYW5fbGlzdGAuIFRoYXQgYGxpc3RfZm9yX2VhY2hfZW50cnlfc2FmZV9yZXZlcnNlYCBsb29wIHNlZW1zIGxpa2UgdGhlIGNvcmUgbG9naWMsIHdoaWNoIGN1bGxzIHRoZSB1bmV2aWN0YWJsZSBmb2xpb3MuIFdoYXQncyBjYXRjaGluZyBteSBleWUgaXMgdGhhdCBgc2tpcF9yZXRyeWAgZmxhZyBhbmQgdGhlIGNvbmRpdGlvbmFsIGNoZWNrIGluc2lkZSB0aGUgbG9vcC5cblxuTXkgY29uY2VybiBpcyB0aGF0IGBza2lwX3JldHJ5YCBzdGFydHMgb3V0IGFzIGZhbHNlLiBUaGUgZm9saW9zIGluIHRoZSBsaXN0IGFyZSBiZWluZyBjaGVja2VkIGZvciBzcGVjaWZpYyBjb25kaXRpb25zIChgIWZvbGlvX3Rlc3RfYWN0aXZlYCwgYCFmb2xpb19tYXBwZWRgLCBgIWZvbGlvX3Rlc3RfZGlydHlgLCBhbmQgYCFmb2xpb190ZXN0X3dyaXRlYmFja2ApLiBJIG5lZWQgdG8gY2hlY2sgdGhlIGVmZmVjdCBvZiBgc2tpcF9yZXRyeWAsIGlmIGl0IGdldHMgc2V0IHRvIHRydWUsIGJlY2F1c2UgaXQgbWVhbnMgdGhhdCBpdCBoYXMgYWxyZWFkeSBpc29sYXRlZCBhbmQgYWNjb3VudGVkIGFib3ZlLiBJZiBhbGwgb2YgdGhlc2UgdGVzdHMgcGFzcywgdGhlIGZvbGlvIGlzIG1vdmVkIHRvIGBjbGVhbl9saXN0YCwgd2hpY2ggaXMgdGhlbiBzcGxpY2VkIGJhY2sgdG8gYGZvbGlvX2xpc3RgIGF0IHRoZSBlbmQgb2YgdGhlIGxvb3AsIGFuZCB0aGUgZnVuY3Rpb24gZ29lcyB0byB0aGUgYHJldHJ5YCBsYWJlbC5cblxuQW5kIG5vdyBJJ3ZlIGhpdCB0aGUgcmVhbCBpc3N1ZTogYERFRklORV9NSU5fU0VRKGxydXZlYyk7YCBpbnNpZGUgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AuIFRoaXMgaXMgdGhlIHRoaW5nIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBpbiBtb3JlIGRldGFpbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgREVGSU5FX01JTl9TRVFgIGlzIGFuZCB3aGF0IGl0IG1lYW5zIGluIHRoZSBjb250ZXh0IG9mIHRoZSBMUlUgZ2VuZXJhdGlvbiBjb2RlLiBUaGlzIGlzIGEgcG90ZW50aWFsIHBvaW50IGZvciBpbnRlcmFjdGlvbiwgc28gdGhpcyBpcyB3aGVyZSBJIG5lZWQgdG8gZGlnIGRlZXBlci4gVGhpcyBsb29rcyByZWxhdGVkIHRvIHRoZSBnZW5lcmF0aW9uIG9mIHRoZSBMUlUsIGJ1dCBpdHMgZXhhY3QgbWVjaGFuaWNzIG5lZWQgY2xhcmlmaWNhdGlvbi4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgbWFjcm8gdG8gdW5kZXJzdGFuZCBpdHMgaW1wYWN0IGFuZCBpdHMgaW1wbGljYXRpb25zIG9uIHRoZSBmb2xpbyBzdGF0ZXMgYW5kIGhvdyB0aGV5J3JlIGhhbmRsZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2Mjc2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyNDoyOS40NjA2MTk1MzJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyODA0NTQyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkRFRklORV9NSU5fU0VRXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0yODExPXN0YXRpYyBib29sIHNob3VsZF9jbGVhcl9wbWRfeW91bmcodm9pZClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI4MjItXFxubW0vdm1zY2FuLmM6MjgyMzojZGVmaW5lIERFRklORV9NSU5fU0VRKGxydXZlYylcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxubW0vdm1zY2FuLmMtMjgyNC1cXHR1bnNpZ25lZCBsb25nIG1pbl9zZXFbQU5PTl9BTkRfRklMRV0gPSB7XFx0XFx0XFx0XFxcXFxcbi0tXFxubW0vdm1zY2FuLmM9NDExND1zdGF0aWMgdm9pZCB0cnlfdG9faW5jX21pbl9zZXEoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBpbnQgc3dhcHBpbmVzcylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQxMTgtXFx0c3RydWN0IGxydV9nZW5fZm9saW8gKmxydWdlbiA9IFxcdTAwMjZscnV2ZWMtXFx1MDAzZWxydWdlbjtcXG5tbS92bXNjYW4uYzo0MTE5OlxcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XFxubW0vdm1zY2FuLmMtNDEyMC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTQzMTU9c3RhdGljIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX2V2aWN0YWJsZV9zaXplKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgaW50IHN3YXBwaW5lc3MpXFxuLS1cXG5tbS92bXNjYW4uYy00MzIwLVxcdERFRklORV9NQVhfU0VRKGxydXZlYyk7XFxubW0vdm1zY2FuLmM6NDMyMTpcXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTQzMjItXFxuLS1cXG5tbS92bXNjYW4uYz00MzQ2PXN0YXRpYyBib29sIGxydXZlY19pc19yZWNsYWltYWJsZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbi0tXFxubW0vdm1zY2FuLmMtNDM1Mi1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBscnV2ZWNfbWVtY2cobHJ1dmVjKTtcXG5tbS92bXNjYW4uYzo0MzUzOlxcdERFRklORV9NSU5fU0VRKGxydXZlYyk7XFxubW0vdm1zY2FuLmMtNDM1NC1cXG4tLVxcbm1tL3Ztc2Nhbi5jPTUxMTQ9c3RhdGljIGJvb2wgc2hvdWxkX3J1bl9hZ2luZyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgbWF4X3NlcSxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxMTYte1xcbm1tL3Ztc2Nhbi5jOjUxMTc6XFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG5tbS92bXNjYW4uYy01MTE4LVxcbi0tXFxubW0vdm1zY2FuLmM9NTc2ND1zdGF0aWMgaW50IGxydV9nZW5fc2VxX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbi0tXFxubW0vdm1zY2FuLmMtNTc3Mi1cXHRERUZJTkVfTUFYX1NFUShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jOjU3NzM6XFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG5tbS92bXNjYW4uYy01Nzc0LVxcbi0tXFxubW0vdm1zY2FuLmM9NTgzOD1zdGF0aWMgaW50IHJ1bl9ldmljdGlvbihzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHVuc2lnbmVkIGxvbmcgc2VxLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTU4NDktXFx0d2hpbGUgKCFzaWduYWxfcGVuZGluZyhjdXJyZW50KSkge1xcbm1tL3Ztc2Nhbi5jOjU4NTA6XFx0XFx0REVGSU5FX01JTl9TRVEobHJ1dmVjKTtcXG5tbS92bXNjYW4uYy01ODUxLVxcbi0tXFxubW0vdm1zY2FuLmM9NjEzNj1zdGF0aWMgdm9pZCBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2soc3RydWN0IGxpc3RfaGVhZCAqbGlzdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTYxNDQtI2lmZGVmIENPTkZJR19MUlVfR0VOXFxubW0vdm1zY2FuLmM6NjE0NTpcXHRcXHRERUZJTkVfTUlOX1NFUShscnV2ZWMpO1xcbm1tL3Ztc2Nhbi5jLTYxNDYtI2VuZGlmXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjI0OjI5LjUxMzQyOTIyNFoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMjcxNzEyOTQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRpdmluZyBpbnRvIGBERUZJTkVfTUlOX1NFUShscnV2ZWMpYCBpbiBgdm1zY2FuLmNgKipcblxuT2theSwgc28gSSdtIGRpZ2dpbmcgaW50byBgbW0vdm1zY2FuLmNgIGFuZCBuZWVkIGEgcmVmcmVzaGVyIG9uIHRoZSBkZWZpbml0aW9uIG9mIGBERUZJTkVfTUlOX1NFUShscnV2ZWMpYC4gTGluZSAyODIzLCBodWg/IFRpbWUgdG8ganVtcCBvdmVyIHRoZXJlIGFuZCBzZWUgd2hhdCB3ZSdyZSBkZWFsaW5nIHdpdGguIEtub3dpbmcgdGhlIGNvbnRleHQgb2YgYHZtc2Nhbi5jYCwgSSdtIGV4cGVjdGluZyB0aGlzIG1hY3JvIGlzIGxpa2VseSByZWxhdGVkIHRvIG1hbmFnaW5nIHRoZSBsZWFzdCByZWNlbnRseSB1c2VkIChMUlUpIGxpc3RzIGFuZCBtZW1vcnkgcmVjbGFpbSwgcGVyaGFwcyBkZWZpbmluZyBhIHN0cnVjdHVyZSBvciBzb21lIHNvcnQgb2YgZGF0YSBzdHJ1Y3R1cmUgcmVsYXRlZCB0byBtaW5pbXVtIHNlcXVlbmNlIG51bWJlcnMgZm9yIExSVSB2ZWN0b3JzLiBJIHdvbmRlciBpZiBpdCdzIGEgY29tcGlsZS10aW1lIG9wdGltaXphdGlvbiBvciBhIHJ1bnRpbWUgdmFyaWFibGUuIEknbGwgdGFrZSBhIGxvb2sgYXQgdGhlIGNvZGUgYW5kIGRldGVybWluZSBpdHMgc3BlY2lmaWMgdXNlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTI1MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEzVDEwOjI0OjMxLjc4NTE0NjA4OVoiLCJTZXEiOjQ2LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyODczMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjgyMCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjgyMDpcXHQjZGVmaW5lIERFRklORV9NQVhfU0VRKGxydXZlYylcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuMjgyMTpcXHRcXHR1bnNpZ25lZCBsb25nIG1heF9zZXEgPSBSRUFEX09OQ0UoKGxydXZlYyktXFx1MDAzZWxydWdlbi5tYXhfc2VxKVxcbjI4MjI6XFx0XFxuMjgyMzpcXHQjZGVmaW5lIERFRklORV9NSU5fU0VRKGxydXZlYylcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuMjgyNDpcXHRcXHR1bnNpZ25lZCBsb25nIG1pbl9zZXFbQU5PTl9BTkRfRklMRV0gPSB7XFx0XFx0XFx0XFxcXFxcbjI4MjU6XFx0XFx0XFx0UkVBRF9PTkNFKChscnV2ZWMpLVxcdTAwM2VscnVnZW4ubWluX3NlcVtMUlVfR0VOX0FOT05dKSxcXHRcXFxcXFxuMjgyNjpcXHRcXHRcXHRSRUFEX09OQ0UoKGxydXZlYyktXFx1MDAzZWxydWdlbi5taW5fc2VxW0xSVV9HRU5fRklMRV0pLFxcdFxcXFxcXG4yODI3OlxcdFxcdH1cXG4yODI4OlxcdFxcbjI4Mjk6XFx0LyogR2V0IHRoZSBtaW4vbWF4IGV2aWN0YWJsZSB0eXBlIGJhc2VkIG9uIHN3YXBwaW5lc3MgKi9cXG4yODMwOlxcdCNkZWZpbmUgbWluX3R5cGUoc3dhcHBpbmVzcykgKCEoc3dhcHBpbmVzcykpXFxuMjgzMTpcXHQjZGVmaW5lIG1heF90eXBlKHN3YXBwaW5lc3MpICgoc3dhcHBpbmVzcykgXFx1MDAzYyBTV0FQUElORVNTX0FOT05fT05MWSlcXG4yODMyOlxcdFxcbjI4MzM6XFx0I2RlZmluZSBldmljdGFibGVfbWluX3NlcShtaW5fc2VxLCBzd2FwcGluZXNzKVxcdFxcdFxcdFxcdFxcXFxcXG4yODM0OlxcdFxcdG1pbigobWluX3NlcSlbbWluX3R5cGUoc3dhcHBpbmVzcyldLCAobWluX3NlcSlbbWF4X3R5cGUoc3dhcHBpbmVzcyldKVxcbjI4MzU6XFx0XFxuMjgzNjpcXHQjZGVmaW5lIGZvcl9lYWNoX2dlbl90eXBlX3pvbmUoZ2VuLCB0eXBlLCB6b25lKVxcdFxcdFxcdFxcdFxcXFxcXG4yODM3OlxcdFxcdGZvciAoKGdlbikgPSAwOyAoZ2VuKSBcXHUwMDNjIE1BWF9OUl9HRU5TOyAoZ2VuKSsrKVxcdFxcdFxcdFxcXFxcXG4yODM4OlxcdFxcdFxcdGZvciAoKHR5cGUpID0gMDsgKHR5cGUpIFxcdTAwM2MgQU5PTl9BTkRfRklMRTsgKHR5cGUpKyspXFx0XFxcXFxcbjI4Mzk6XFx0XFx0XFx0XFx0Zm9yICgoem9uZSkgPSAwOyAoem9uZSkgXFx1MDAzYyBNQVhfTlJfWk9ORVM7ICh6b25lKSsrKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xM1QxMDoyNDozMS43ODU0MzU4MTlaIiwiU2VxIjo0NywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6ODgwMzg0OTUyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50IG9mIE1HTFJVIEV2aWN0aW9uIExvZ2ljIFJlZmFjdG9yKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGRpc3NlY3RpbmcgdGhpcyBwYXRjaCBhbmQgaXRzIGltcGxpY2F0aW9ucyBmb3IgS01TQU4uIE15IGluaXRpYWwgdGhvdWdodCBwcm9jZXNzIGZvY3VzZWQgb24gdGhlIGNvZGUgY2hhbmdlcyBhbmQgcG90ZW50aWFsIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBGaXJzdCwgdGhlIHBhdGNoIHJlZmFjdG9ycyB0aGUgZm9saW8gZXZpY3Rpb24gbG9vcCwgbW92aW5nIGl0IGZyb20gYGV2aWN0X2ZvbGlvc2AgKE1HTFJVLXNwZWNpZmljKSB0byB0aGUgc2hhcmVkIGBmaW5kX2ZvbGlvc193cml0dGVuX2JhY2tgIGZ1bmN0aW9uIHVzZWQgYnkgYm90aCBNR0xSVSBhbmQgdGhlIHRyYWRpdGlvbmFsIExSVS4gVGhlIG1ham9yIG1vZGlmaWNhdGlvbiB3aXRoaW4gdGhhdCBsb29wIGlzIHRoZSBjb25kaXRpb25hbCBhZGRpdGlvbiBvZiBgbHJ1dmVjLVx1MDAzZWxydWdlbi5lbmFibGVkIFx1MDAyNlx1MDAyNmAgdG8gYSBjaGVjayByZWxhdGVkIHRvIGdlbmVyYXRpb24tYmFzZWQgTFJVIGxvZ2ljLiBDcnVjaWFsbHksIHRoZSBjb2RlIG5vdyBhbHNvIHJldHJpZXMgY2xlYW5pbmcgZm9saW9zLlxuXG5NeSBuZXh0IHN0ZXAgaW52b2x2ZWQgcmlnb3JvdXNseSBleGFtaW5pbmcgZWFjaCBvZiB0aGUgS01TQU4gY3JpdGVyaWEgdG8gZGV0ZXJtaW5lIGlmIGBOZWVkc0tNU0FOPXRydWVgIGlzIHdhcnJhbnRlZC4gTGV0J3Mgc2VlLi4uXG5cbjEuICAqKktlcm5lbCBzdHJ1Y3R1cmVzIHRvIHVzZXJzcGFjZT8qKiBOb3BlLiBUaGlzIGlzIGFsbCBpbnRlcm5hbCBtZW1vcnkgbWFuYWdlbWVudCwgZGVlcCB3aXRoaW4gYG1tL3Ztc2Nhbi5jYC4gTm8gZGF0YSBpcyBiZWluZyBleHBsaWNpdGx5IGNvcGllZCB0byB1c2VyIHNwYWNlLiBUaGlzIGlzIGVudGlyZWx5IGludGVybmFsIGZvbGlvL3BhZ2UgcmVjbGFpbSBsb2dpYy5cbjIuICAqKkNvbmRpdGlvbmFsIGxvZ2ljIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiBPa2F5LCBkaWdnaW5nIGludG8gdGhlIHZhcmlhYmxlcyB3aXRoaW4gYHNocmlua19pbmFjdGl2ZV9saXN0YCBhbmQgdGhlIG5ldyBgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrYDogSSB2ZXJpZmllZCBldmVyeXRoaW5nLiBUaGUgbGlzdHMgKGBmb2xpb19saXN0YCwgYGNsZWFuX2xpc3RgKSBhcmUgYWxsIGluaXRpYWxpemVkIHVzaW5nIG1hY3Jvcy4gVmFyaWFibGVzIGxpa2UgYG5yX3JlY2xhaW1lZGAsIGB0b3RhbF9yZWNsYWltZWRgLCBgbnJfdGFrZW5gLCBgaXNvbGF0ZWRgLCBhbmQgYHN0YXRgIGFyZSBwcm9wZXJseSBhc3NpZ25lZCBiZWZvcmUgdXNlLiBQYXJ0aWN1bGFybHkgaW1wb3J0YW50LCBgc3RhdGAgaXMgYmVpbmcgZXhwbGljaXRseSBgbWVtc2V0YCdkIGJ5IGBzaHJpbmtfZm9saW9fbGlzdCgpYC4gYHNraXBfcmV0cnlgIGlzIHNldCB0byBgZmFsc2VgLiBJbnNpZGUgYGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFja2AsIEkgY2hlY2tlZCB0aGUgYERFRklORV9NSU5fU0VRYCBhbmQgYWxsIHRoZSBgZm9saW9fKmAgZmxhZyB0ZXN0czsgbm90aGluZyBpcyB1c2VkIHVuaW5pdGlhbGl6ZWQuIFRoZSBjb25kaXRpb25hbCBvbiBgY2xlYW5fbGlzdGAgbG9va3MgY29ycmVjdC5cbjMuICAqKkNvbXBsZXggZGF0YSBzdHJ1Y3R1cmUgaW5pdGlhbGl6YXRpb24gd2l0aCBwb3RlbnRpYWwgdW5pbml0aWFsaXplZCBmaWVsZHM/KiogTm8uIEV2ZXJ5dGhpbmcgc2VlbXMgdG8gYmUgaW5pdGlhbGl6ZWQgYXMgaXQncyBhbGxvY2F0ZWQuXG40LiAgKipCb3VuZHMgY2hlY2tzIGV4cG9zaW5nIHVuaW5pdGlhbGl6ZWQgZGF0YT8qKiBOb3RoaW5nIGxpa2UgdGhhdCBoZXJlLlxuXG5NeSBjb25jbHVzaW9uIGlzIGNsZWFyLiBUaGlzIHBhdGNoIGludHJvZHVjZXMgbm8gbmV3IHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBUaGVyZSBhcmUgbm8gZGlyZWN0IHVzZXItc3BhY2UgY29waWVzLiBUaGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZXMuIFRoZXJlIGFyZSBubyB1bmluaXRpYWxpemVkIHNsYWIvaGVhcCBvYmplY3RzLiBUaGlzIGlzIHB1cmVseSBtZW1vcnkgbWFuYWdlbWVudCBpbnRlcm5hbCByZWNsYWltIGxvZ2ljLiBQb3RlbnRpYWwgYnVncyB3b3VsZCBtYW5pZmVzdCBhcyBMUlUgbGlzdCBjb3JydXB0aW9uLCBhY2NvdW50aW5nIGltYmFsYW5jZXMsIGluZmluaXRlIGxvb3BzLCBvciBwYWdlIHJlZmVyZW5jZS9zdGF0ZSBoYW5kbGluZyBidWdzIOKAkyBpc3N1ZXMgZGV0ZWN0YWJsZSBieSBrZXJuZWwgYXNzZXJ0aW9ucywgbG9ja2RlcCwgb3IgS0FTQU4sIGJ1dCBub3QgS01TQU4uXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIHNob3VsZCByZW1haW4gYGZhbHNlYC4gTGV0J3MgcGVyZm9ybSBhIGZpbmFsIHJldmlldyBhbmQgcHJlcGFyZSB0aGUgdG9vbCBjYWxsLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTk3NSwiT3V0cHV0VG9rZW5zIjoxOTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTNUMTA6MjQ6NDAuNTg5Mjg4NTI0WiIsIlNlcSI6NDgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTY1NDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCByZWZhY3RvcnMgZm9saW8gd3JpdGViYWNrIHJldHJ5IGxvZ2ljIGluIHRoZSBwYWdlIHJlY2xhaW0gcGF0aCAobW0vdm1zY2FuLmMpIGJ5IGV4dHJhY3RpbmcgZmluZF9mb2xpb3Nfd3JpdHRlbl9iYWNrKCkgZnJvbSBldmljdF9mb2xpb3MoKSBhbmQgdXNpbmcgaXQgdG8gcmV0cnkgY2xlYW4gZm9saW9zIGluIHNocmlua19pbmFjdGl2ZV9saXN0KCkuIEFsbCBuZXcgYW5kIG1vZGlmaWVkIGxvY2FsIHZhcmlhYmxlcyAoY2xlYW5fbGlzdCwgdG90YWxfcmVjbGFpbWVkLCBpc29sYXRlZCwgc2tpcF9yZXRyeSkgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLCBhbmQgdGhlIHJlY2xhaW1fc3RhdCBzdHJ1Y3R1cmUgaXMgbWVtc2V0IHRvIHplcm8gaW5zaWRlIHNocmlua19mb2xpb19saXN0KCkgb24gZWFjaCBpdGVyYXRpb24uIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IGRhdGEgY29waWVzIHRvIHVzZXIgc3BhY2UsIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGUgdXNhZ2UsIG9yIHVuaW5pdGlhbGl6ZWQgYnVmZmVyIGFjY2Vzc2VzLiBBbnkgcG90ZW50aWFsIHJlY2xhaW0gaXNzdWVzIChlLmcuIGxpc3QgY29ycnVwdGlvbiwgcmVmY291bnQgb3IgcGFnZSBmbGFnIGJ1Z3MpIHdvdWxkIGJlIGNhdWdodCBieSBhc3NlcnRpb25zIG9yIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIGlzIG5vdCBqdXN0aWZpZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggcmVmYWN0b3JzIGZvbGlvIHdyaXRlYmFjayByZXRyeSBsb2dpYyBpbiB0aGUgcGFnZSByZWNsYWltIHBhdGggKG1tL3Ztc2Nhbi5jKSBieSBleHRyYWN0aW5nIGZpbmRfZm9saW9zX3dyaXR0ZW5fYmFjaygpIGZyb20gZXZpY3RfZm9saW9zKCkgYW5kIHVzaW5nIGl0IHRvIHJldHJ5IGNsZWFuIGZvbGlvcyBpbiBzaHJpbmtfaW5hY3RpdmVfbGlzdCgpLiBBbGwgbmV3IGFuZCBtb2RpZmllZCBsb2NhbCB2YXJpYWJsZXMgKGNsZWFuX2xpc3QsIHRvdGFsX3JlY2xhaW1lZCwgaXNvbGF0ZWQsIHNraXBfcmV0cnkpIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgYW5kIHRoZSByZWNsYWltX3N0YXQgc3RydWN0dXJlIGlzIG1lbXNldCB0byB6ZXJvIGluc2lkZSBzaHJpbmtfZm9saW9fbGlzdCgpIG9uIGVhY2ggaXRlcmF0aW9uLiBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSBkYXRhIGNvcGllcyB0byB1c2VyIHNwYWNlLCB1bmluaXRpYWxpemVkIHZhcmlhYmxlIHVzYWdlLCBvciB1bmluaXRpYWxpemVkIGJ1ZmZlciBhY2Nlc3Nlcy4gQW55IHBvdGVudGlhbCByZWNsYWltIGlzc3VlcyAoZS5nLiBsaXN0IGNvcnJ1cHRpb24sIHJlZmNvdW50IG9yIHBhZ2UgZmxhZyBidWdzKSB3b3VsZCBiZSBjYXVnaHQgYnkgYXNzZXJ0aW9ucyBvciBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBpcyBub3QganVzdGlmaWVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowx52pj[1] Phase: Succeeded StartedAt: 2026-09-13 10:24:52 +0000 UTC FinishedAt: 2026-09-13 10:24:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-13 10:24:52 +0000 UTC FinishedAt: 2026-09-13 10:24:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[2] Phase: Succeeded StartedAt: 2026-09-13 10:24:52 +0000 UTC FinishedAt: 2026-09-13 14:13:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-13 10:24:52 +0000 UTC FinishedAt: 2026-09-13 14:13:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"fuzz":{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-13 10:24:52 +0000 UTC FinishedAt: 2026-09-13 10:25:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-13 10:24:52 +0000 UTC FinishedAt: 2026-09-13 10:24:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowx52pj/series-workflowx52pj-convert-artifact-1206824500/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-13 10:25:02 +0000 UTC FinishedAt: 2026-09-13 10:42:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-13 10:25:02 +0000 UTC FinishedAt: 2026-09-13 10:42: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:*2d815e58-e680-448d-a0bd-85b5c5af8530,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-workflowx52pj/series-workflowx52pj-convert-artifact-1206824500/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": "1272dae9-b52b-4b82-bfcb-a99e3e2fc960", "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-workflowx52pj/series-workflowx52pj-build-action-2756863026/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-13 10:25:02 +0000 UTC FinishedAt: 2026-09-13 10:42:09 +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:*2d815e58-e680-448d-a0bd-85b5c5af8530,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-workflowx52pj/series-workflowx52pj-convert-artifact-1206824500/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": "1272dae9-b52b-4b82-bfcb-a99e3e2fc960", "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-workflowx52pj/series-workflowx52pj-build-action-2756863026/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-13 10:42:19 +0000 UTC FinishedAt: 2026-09-13 10:42:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-13 10:42:19 +0000 UTC FinishedAt: 2026-09-13 10:42:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-13 10:42:19 +0000 UTC FinishedAt: 2026-09-13 10:42:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-13 10:42:19 +0000 UTC FinishedAt: 2026-09-13 10:42:26 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},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-workflowx52pj/series-workflowx52pj-convert-artifact-3043438579/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-13 10:42:29 +0000 UTC FinishedAt: 2026-09-13 10:44:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-13 10:42:29 +0000 UTC FinishedAt: 2026-09-13 10:44:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1272dae9-b52b-4b82-bfcb-a99e3e2fc960,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-workflowx52pj/series-workflowx52pj-build-action-2756863026/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-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-13 10:44:44 +0000 UTC FinishedAt: 2026-09-13 10:44:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-13 10:44:44 +0000 UTC FinishedAt: 2026-09-13 10:44:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-13 10:44:44 +0000 UTC FinishedAt: 2026-09-13 11:06:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-13 10:44:44 +0000 UTC FinishedAt: 2026-09-13 11:06:09 +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:*2d815e58-e680-448d-a0bd-85b5c5af8530,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-workflowx52pj/series-workflowx52pj-convert-artifact-3043438579/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": "29b49713-db04-452b-bdb4-eb1c989a4ae4", "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-workflowx52pj/series-workflowx52pj-build-action-445507495/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-13 10:44:44 +0000 UTC FinishedAt: 2026-09-13 11:05:59 +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:*2d815e58-e680-448d-a0bd-85b5c5af8530,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-workflowx52pj/series-workflowx52pj-convert-artifact-3043438579/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": "29b49713-db04-452b-bdb4-eb1c989a4ae4", "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-workflowx52pj/series-workflowx52pj-build-action-445507495/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-13 11:06:09 +0000 UTC FinishedAt: 2026-09-13 11:06:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-13 11:06:09 +0000 UTC FinishedAt: 2026-09-13 11:06:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-13 11:06:09 +0000 UTC FinishedAt: 2026-09-13 11:08:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-13 11:06:09 +0000 UTC FinishedAt: 2026-09-13 11:07:57 +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:*29b49713-db04-452b-bdb4-eb1c989a4ae4,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-workflowx52pj/series-workflowx52pj-build-action-445507495/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-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-13 11:08:07 +0000 UTC FinishedAt: 2026-09-13 14:13:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-13 11:08:07 +0000 UTC FinishedAt: 2026-09-13 14:13:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"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:*1272dae9-b52b-4b82-bfcb-a99e3e2fc960,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*29b49713-db04-452b-bdb4-eb1c989a4ae4,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-workflowx52pj/series-workflowx52pj-build-action-2756863026/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-workflowx52pj/series-workflowx52pj-build-action-445507495/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-13 11:08:07 +0000 UTC FinishedAt: 2026-09-13 11:08:29 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-13 11:08:07 +0000 UTC FinishedAt: 2026-09-13 11:08:25 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"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-workflowx52pj/series-workflowx52pj-convert-artifact-2602269420/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-13 11:08:07 +0000 UTC FinishedAt: 2026-09-13 11:08:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-13 11:08:07 +0000 UTC FinishedAt: 2026-09-13 11:08:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-13 11:08:07 +0000 UTC FinishedAt: 2026-09-13 11:08:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-13 11:08:29 +0000 UTC FinishedAt: 2026-09-13 14:13:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowx52pj[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},fuzz:{"base_commit":"68142f986ff04b2b70b31db00f719bf690f64a9a","base_tree":"linux-next","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["shrink_inactive_list","evict_folios","find_folios_written_back"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"68142f986ff04b2b70b31db00f719bf690f64a9a","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN"],"series_id":"ac152c29-cbf2-4c36-acc8-7b3687dd7bd9","tree_name":"linux-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/next/linux-next"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-13 11:08:29 +0000 UTC FinishedAt: 2026-09-13 14:12:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1272dae9-b52b-4b82-bfcb-a99e3e2fc960,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*29b49713-db04-452b-bdb4-eb1c989a4ae4,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-workflowx52pj/series-workflowx52pj-build-action-2756863026/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-workflowx52pj/series-workflowx52pj-build-action-445507495/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-workflowx52pj/series-workflowx52pj-convert-artifact-2602269420/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,}