Name: series-workflowp7tl2 Phase: Succeeded StartedAt: 2026-06-29 12:06:33 +0000 UTC FinishedAt: 2026-06-29 16:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[0] Phase: Succeeded StartedAt: 2026-06-29 12:06:33 +0000 UTC FinishedAt: 2026-06-29 12:20:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[0].run-triage Phase: Succeeded StartedAt: 2026-06-29 12:06:33 +0000 UTC FinishedAt: 2026-06-29 12:20:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "series_id": "6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "iomap_dio_simple", "iomap_dio_simple_complete", "iomap_dio_simple_complete_work", "iomap_dio_simple_end_io" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEyOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfZGlvX3NpbXBsZSYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29yayYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlX2VuZF9pbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZhc3QgcGF0aCBmb3IgZGlyZWN0IEkvTyByZWFkcyAoYGlvbWFwX2Rpb19zaW1wbGVgKSBpbiB0aGUgaW9tYXAgc3Vic3lzdGVtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgSS9PIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBkaXJlY3QgSS9PIHN5c3RlbSBjYWxscyBvbiBzdXBwb3J0ZWQgZmlsZXN5c3RlbXMuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZmFzdCBwYXRoIGhhbmRsZXMgdmFyaW91cyBJL08gY29uZGl0aW9ucyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTI6MjA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhODBiNjhhZDYwNjhmMDhjYzdlNmYwMTZjYmEzNzUyYTE5NjY0N2EyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTI6MjA6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvZGlyZWN0LWlvLmMgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuaW5kZXggYjQ4NWUzYjE5MWRhZmEuLjRkY2M5ZmM3NjZhOTJlIDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG5AQCAtMTAsNiAmIzQzOzEwLDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGFza19pb19hY2NvdW50aW5nX29wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnNlcnJvci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tvYmplY3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNmcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt0cmFjZS5oXCYjMzQ7XG4gXG5AQCAtODgsOSAmIzQzOzkxLDkgQEAgc3RhdGljIGlubGluZSBlbnVtIGZzZXJyb3JfdHlwZSBpb21hcF9kaW9fZXJyX3R5cGUoY29uc3Qgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuIFx0cmV0dXJuIEZTRVJSX0RJUkVDVElPX1JFQUQ7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGNvbnN0IHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IoaW50IGVycm9yKVxuIHtcbi1cdHN3aXRjaCAoZGlvLVx1MDAzZWVycm9yKSB7XG4mIzQzO1x0c3dpdGNoIChlcnJvcikge1xuIFx0Y2FzZSAwOlxuIFx0Y2FzZSAtRUFHQUlOOlxuIFx0Y2FzZSAtRU5PVEJMSzpcbkBAIC0xMTAsNyAmIzQzOzExMyw3IEBAIHNzaXplX3QgaW9tYXBfZGlvX2NvbXBsZXRlKHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiBcbiBcdGlmIChkb3BzIFx1MDAyNlx1MDAyNiBkb3BzLVx1MDAzZWVuZF9pbylcbiBcdFx0cmV0ID0gZG9wcy1cdTAwM2VlbmRfaW8oaW9jYiwgZGlvLVx1MDAzZXNpemUsIHJldCwgZGlvLVx1MDAzZWZsYWdzKTtcbi1cdGlmIChzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGRpbykpXG4mIzQzO1x0aWYgKHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IoZGlvLVx1MDAzZWVycm9yKSlcbiBcdFx0ZnNlcnJvcl9yZXBvcnRfaW8oZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApLFxuIFx0XHRcdFx0ICBpb21hcF9kaW9fZXJyX3R5cGUoZGlvKSwgb2Zmc2V0LCBkaW8tXHUwMDNlc2l6ZSxcbiBcdFx0XHRcdCAgZGlvLVx1MDAzZWVycm9yLCBHRlBfTk9GUyk7XG5AQCAtMjM3LDIzICYjNDM7MjQwLDI5IEBAIHN0YXRpYyB2b2lkIGlvbWFwX2Rpb19kb25lKHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiBcdGlvbWFwX2Rpb19jb21wbGV0ZV93b3JrKFx1MDAyNmRpby1cdTAwM2VhaW8ud29yayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9faW9tYXBfZGlvX2Jpb19lbmRfaW8oc3RydWN0IGJpbyAqYmlvLCBib29sIGlubGluZV9jb21wbGV0aW9uKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9tYXBfZGlvX2Jpb19yZWxlYXNlX3BhZ2VzKHN0cnVjdCBiaW8gKmJpbyxcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBkaW9fZmxhZ3MsIGJvb2wgZXJyb3IpXG4ge1xuLVx0c3RydWN0IGlvbWFwX2RpbyAqZGlvID0gYmlvLVx1MDAzZWJpX3ByaXZhdGU7XG4tXG4gXHRpZiAoYmlvX2ludGVncml0eShiaW8pKVxuIFx0XHRmc19iaW9faW50ZWdyaXR5X2ZyZWUoYmlvKTtcbiBcbi1cdGlmIChkaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19CT1VOQ0UpIHtcbi1cdFx0YmlvX2lvdl9pdGVyX3VuYm91bmNlKGJpbywgISFkaW8tXHUwMDNlZXJyb3IsXG4tXHRcdFx0XHRkaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19VU0VSX0JBQ0tFRCk7XG4mIzQzO1x0aWYgKGRpb19mbGFncyBcdTAwMjYgSU9NQVBfRElPX0JPVU5DRSkge1xuJiM0MztcdFx0YmlvX2lvdl9pdGVyX3VuYm91bmNlKGJpbywgZXJyb3IsXG4mIzQzO1x0XHRcdFx0ZGlvX2ZsYWdzIFx1MDAyNiBJT01BUF9ESU9fVVNFUl9CQUNLRUQpO1xuIFx0XHRiaW9fcHV0KGJpbyk7XG4tXHR9IGVsc2UgaWYgKGRpby1cdTAwM2VmbGFncyBcdTAwMjYgSU9NQVBfRElPX1VTRVJfQkFDS0VEKSB7XG4mIzQzO1x0fSBlbHNlIGlmIChkaW9fZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19VU0VSX0JBQ0tFRCkge1xuIFx0XHRiaW9fY2hlY2tfcGFnZXNfZGlydHkoYmlvKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGJpb19yZWxlYXNlX3BhZ2VzKGJpbywgZmFsc2UpO1xuIFx0XHRiaW9fcHV0KGJpbyk7XG4gXHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIF9faW9tYXBfZGlvX2Jpb19lbmRfaW8oc3RydWN0IGJpbyAqYmlvLCBib29sIGlubGluZV9jb21wbGV0aW9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlvbWFwX2RpbyAqZGlvID0gYmlvLVx1MDAzZWJpX3ByaXZhdGU7XG4mIzQzO1xuJiM0MztcdGlvbWFwX2Rpb19iaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGRpby1cdTAwM2VmbGFncywgISFkaW8tXHUwMDNlZXJyb3IpO1xuIFxuIFx0LyogRG8gbm90IHRvdWNoIGJpbyBiZWxvdywgd2UganVzdCBnYXZlIHVwIG91ciByZWZlcmVuY2UuICovXG4gXG5AQCAtMzk4LDYgJiM0Mzs0MDcsMTQgQEAgc3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX2Jpb19pdGVyX29uZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb21hcF9kaW9fYWxpZ25tZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBpbnQgZGlvX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGRpb19mbGFncyBcdTAwMjYgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRClcbiYjNDM7XHRcdHJldHVybiBpX2Jsb2Nrc2l6ZShpbm9kZSk7XG4mIzQzO1x0cmV0dXJuIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGlvbWFwICppb21hcCA9IFx1MDAyNml0ZXItXHUwMDNlaW9tYXA7XG5AQCAtNDE2LDEwICYjNDM7NDMzLDcgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiBcdCAqIEZpbGUgc3lzdGVtcyB0aGF0IHdyaXRlIG91dCBvZiBwbGFjZSBhbmQgYWx3YXlzIGFsbG9jYXRlIG5ldyBibG9ja3NcbiBcdCAqIG5lZWQgZWFjaCBiaW8gdG8gYmUgYmxvY2sgYWxpZ25lZCBhcyB0aGF0JiMzOTtzIHRoZSB1bml0IG9mIGFsbG9jYXRpb24uXG4gXHQgKi9cbi1cdGlmIChkaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19GU0JMT0NLX0FMSUdORUQpXG4tXHRcdGFsaWdubWVudCA9IGZzX2Jsb2NrX3NpemU7XG4tXHRlbHNlXG4tXHRcdGFsaWdubWVudCA9IGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGlvbWFwLVx1MDAzZWJkZXYpO1xuJiM0MztcdGFsaWdubWVudCA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaW5vZGUsIGlvbWFwLVx1MDAzZWJkZXYsIGRpby1cdTAwM2VmbGFncyk7XG4gXG4gXHRpZiAoKHBvcyB8IGxlbmd0aCkgXHUwMDI2IChhbGlnbm1lbnQgLSAxKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtODg4LDEyICYjNDM7OTAyLDI1MyBAQCBfX2lvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcncpO1xuIFxuJiM0MztzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSB7XG4mIzQzO1x0c3RydWN0IGtpb2NiXHRcdCppb2NiO1xuJiM0MztcdHNpemVfdFx0XHRcdHNpemU7XG4mIzQzO1x0dW5zaWduZWQgaW50XHRcdGRpb19mbGFncztcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHdvcms7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBbGlnbiBAYmlvIHRvIGEgY2FjaGVsaW5lIGJvdW5kYXJ5IHNvIHRoYXQsIGNvbWJpbmVkIHdpdGggdGhlXG4mIzQzO1x0ICogZnJvbnRfcGFkIHBhc3NlZCB0byBiaW9zZXRfaW5pdCgpLCB0aGUgYmlvIHNpdHMgYXQgdGhlIHN0YXJ0IG9mXG4mIzQzO1x0ICogYSBjYWNoZWxpbmUgaW4gbWVtb3J5IHJldHVybmVkIGJ5IHRoZSAoSFdDQUNIRS1hbGlnbmVkKSBiaW9cbiYjNDM7XHQgKiBzbGFiLiAgVGhpcyBrZWVwcyB0aGUgaG90IGZpZWxkcyBibG9jayBsYXllciB0b3VjaGVzIG9uIHN1Ym1pdFxuJiM0MztcdCAqIGFuZCBjb21wbGV0aW9uIChiaV9pdGVyLCBiaV9zdGF0dXMsIC4uLikgd2l0aGluIGEgc2luZ2xlIGxpbmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RydWN0IGJpb1x0YmlvIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGJpb19zZXQgaW9tYXBfZGlvX3NpbXBsZV9wb29sO1xuJiM0MztcbiYjNDM7c3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYmlvICpiaW8gPSBcdTAwMjZzci1cdTAwM2ViaW87XG4mIzQzO1x0c3RydWN0IGtpb2NiICppb2NiID0gc3ItXHUwMDNlaW9jYjtcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuJiM0MztcdGludCBlcnJvciA9IGJsa19zdGF0dXNfdG9fZXJybm8oYmlvLVx1MDAzZWJpX3N0YXR1cyk7XG4mIzQzO1x0c3NpemVfdCByZXQgPSBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpa2VseSghcmV0KSkge1xuJiM0MztcdFx0cmV0ID0gc3ItXHUwMDNlc2l6ZTtcbiYjNDM7XHRcdGlvY2ItXHUwMDNla2lfcG9zICYjNDM7PSByZXQ7XG4mIzQzO1x0fSBlbHNlIGlmIChzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKHJldCkpIHtcbiYjNDM7XHRcdGZzZXJyb3JfcmVwb3J0X2lvKGlub2RlLCBGU0VSUl9ESVJFQ1RJT19SRUFELCBpb2NiLVx1MDAzZWtpX3BvcyxcbiYjNDM7XHRcdFx0XHQgIHNyLVx1MDAzZXNpemUsIHJldCwgR0ZQX05PRlMpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW9tYXBfZGlvX2Jpb19yZWxlYXNlX3BhZ2VzKGJpbywgc3ItXHUwMDNlZGlvX2ZsYWdzLCByZXQgXHUwMDNjIDApO1xuJiM0MztcdGlub2RlX2Rpb19lbmQoaW5vZGUpO1xuJiM0MztcdHRyYWNlX2lvbWFwX2Rpb19jb21wbGV0ZShpb2NiLCBlcnJvciwgcmV0KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyID1cbiYjNDM7XHRcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCB3b3JrKTtcbiYjNDM7XG4mIzQzO1x0V1JJVEVfT05DRShzci1cdTAwM2Vpb2NiLVx1MDAzZXByaXZhdGUsIE5VTEwpO1xuJiM0MztcdHNyLVx1MDAzZWlvY2ItXHUwMDNla2lfY29tcGxldGUoc3ItXHUwMDNlaW9jYiwgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpb21hcF9kaW9fc2ltcGxlX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseShzci1cdTAwM2ViaW8uYmlfc3RhdHVzKSkge1xuJiM0MztcdFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoc3ItXHUwMDNlaW9jYi1cdTAwM2VraV9maWxwKTtcbiYjNDM7XG4mIzQzO1x0XHRJTklUX1dPUksoXHUwMDI2c3ItXHUwMDNld29yaywgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrKTtcbiYjNDM7XHRcdHF1ZXVlX3dvcmsoaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Rpb19kb25lX3dxLCBcdTAwMjZzci1cdTAwM2V3b3JrKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNyLVx1MDAzZWlvY2ItXHUwMDNla2lfY29tcGxldGUoc3ItXHUwMDNlaW9jYiwgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoc3RydWN0IGtpb2NiICppb2NiLFxuJiM0MztcdFx0c3RydWN0IGlvdl9pdGVyICppdGVyLCB1bnNpZ25lZCBpbnQgZGlvX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbiYjNDM7XHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpICE9IFJFQUQpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKCFjb3VudClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNpbXBsZSBkaW8gaXMgYW4gb3B0aW1pemF0aW9uIGZvciBzbWFsbCBJTy4gRmlsdGVyIG91dCBsYXJnZSBJT1xuJiM0MztcdCAqIGVhcmx5IGFzIGl0JiMzOTtzIHRoZSBtb3N0IGNvbW1vbiBjYXNlIHRvIGZhaWwgZm9yIHR5cGljYWwgZGlyZWN0IElPXG4mIzQzO1x0ICogd29ya2xvYWRzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChjb3VudCBcdTAwM2UgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoZGlvX2ZsYWdzIFx1MDAyNiAoSU9NQVBfRElPX0ZPUkNFX1dBSVQgfCBJT01BUF9ESU9fUEFSVElBTCB8XG4mIzQzO1x0XHRcdCBJT01BUF9ESU9fQk9VTkNFKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoaW9jYi1cdTAwM2VraV9wb3MgJiM0MzsgY291bnQgXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoSVNfRU5DUllQVEVEKGlub2RlKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLFxuJiM0MztcdFx0c3RydWN0IGlvdl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsXG4mIzQzO1x0XHR2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgZGlvX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbiYjNDM7XHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3I7XG4mIzQzO1x0dW5zaWduZWQgaW50IGFsaWdubWVudDtcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBfaXRlciBpb21pID0ge1xuJiM0MztcdFx0Lmlub2RlXHRcdD0gaW5vZGUsXG4mIzQzO1x0XHQucG9zXHRcdD0gaW9jYi1cdTAwM2VraV9wb3MsXG4mIzQzO1x0XHQubGVuXHRcdD0gY291bnQsXG4mIzQzO1x0XHQuZmxhZ3NcdFx0PSBJT01BUF9ESVJFQ1QsXG4mIzQzO1x0XHQucHJpdmF0ZVx0PSBwcml2YXRlLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGJpbyAqYmlvO1xuJiM0MztcdGJvb2wgd2FpdF9mb3JfY29tcGxldGlvbiA9IGlzX3N5bmNfa2lvY2IoaW9jYik7XG4mIzQzO1x0c3NpemVfdCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PV0FJVClcbiYjNDM7XHRcdGlvbWkuZmxhZ3MgfD0gSU9NQVBfTk9XQUlUO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBraW9jYl93cml0ZV9hbmRfd2FpdChpb2NiLCBjb3VudCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlub2RlX2Rpb19iZWdpbihpbm9kZSk7XG4mIzQzO1xuJiM0MztcdHJldCA9IG9wcy1cdTAwM2Vpb21hcF9iZWdpbihpbm9kZSwgaW9taS5wb3MsIGNvdW50LCBpb21pLmZsYWdzLFxuJiM0MztcdFx0XHQgICAgICAgXHUwMDI2aW9taS5pb21hcCwgXHUwMDI2aW9taS5zcmNtYXApO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGlub2RlX2Rpb19lbmQoaW5vZGUpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChpb21pLmlvbWFwLnR5cGUgIT0gSU9NQVBfTUFQUEVEIHx8XG4mIzQzO1x0ICAgIGlvbWkuaW9tYXAub2Zmc2V0ICYjNDM7IGlvbWkuaW9tYXAubGVuZ3RoIFx1MDAzYyBpb21pLnBvcyAmIzQzOyBjb3VudCB8fFxuJiM0MztcdCAgICAoaW9taS5pb21hcC5mbGFncyBcdTAwMjYgSU9NQVBfRl9JTlRFR1JJVFkpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PVEJMSztcbiYjNDM7XHRcdGdvdG8gb3V0X2lvbWFwX2VuZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGFsaWdubWVudCA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaW5vZGUsIGlvbWkuaW9tYXAuYmRldiwgZGlvX2ZsYWdzKTtcbiYjNDM7XHRpZiAoKGlvbWkucG9zIHwgY291bnQpIFx1MDAyNiAoYWxpZ25tZW50IC0gMSkpIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIG91dF9pb21hcF9lbmQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb24gXHUwMDI2XHUwMDI2IHVubGlrZWx5KCFpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZGlvX2RvbmVfd3EpKSB7XG4mIzQzO1x0XHRyZXQgPSBzYl9pbml0X2Rpb19kb25lX3dxKGlub2RlLVx1MDAzZWlfc2IpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBvdXRfaW9tYXBfZW5kO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dHJhY2VfaW9tYXBfZGlvX3J3X2JlZ2luKGlvY2IsIGl0ZXIsIGRpb19mbGFncywgMCk7XG4mIzQzO1xuJiM0MztcdGlmICh1c2VyX2JhY2tlZF9pdGVyKGl0ZXIpKVxuJiM0MztcdFx0ZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19VU0VSX0JBQ0tFRDtcbiYjNDM7XG4mIzQzO1x0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChpb21pLmlvbWFwLmJkZXYsXG4mIzQzO1x0XHRcdGJpb19pb3ZfdmVjc190b19hbGxvYyhpdGVyLCBCSU9fTUFYX1ZFQ1MpLFxuJiM0MztcdFx0XHRSRVFfT1BfUkVBRCxcbiYjNDM7XHRcdFx0R0ZQX0tFUk5FTCwgXHUwMDI2aW9tYXBfZGlvX3NpbXBsZV9wb29sKTtcbiYjNDM7XHRzciA9IGNvbnRhaW5lcl9vZihiaW8sIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pO1xuJiM0MztcdHNyLVx1MDAzZWlvY2IgPSBpb2NiO1xuJiM0MztcdHNyLVx1MDAzZWRpb19mbGFncyA9IGRpb19mbGFncztcbiYjNDM7XG4mIzQzO1x0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gaW9tYXBfc2VjdG9yKFx1MDAyNmlvbWkuaW9tYXAsIGlvbWkucG9zKTtcbiYjNDM7XHRiaW8tXHUwMDNlYmlfaW9wcmlvID0gaW9jYi1cdTAwM2VraV9pb3ByaW87XG4mIzQzO1xuJiM0MztcdHJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBhbGlnbm1lbnQgLSAxKTtcbiYjNDM7XHRpZiAodW5saWtlbHkocmV0KSlcbiYjNDM7XHRcdGdvdG8gb3V0X2Jpb19wdXQ7XG4mIzQzO1xuJiM0MztcdGlmIChiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplICE9IGNvdW50KSB7XG4mIzQzO1x0XHRpb3ZfaXRlcl9yZXZlcnQoaXRlciwgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XG4mIzQzO1x0XHRyZXQgPSAtRU5PVEJMSztcbiYjNDM7XHRcdGdvdG8gb3V0X2Jpb19yZWxlYXNlX3BhZ2VzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3ItXHUwMDNlc2l6ZSA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemU7XG4mIzQzO1xuJiM0MztcdGlmIChkaW9fZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19VU0VSX0JBQ0tFRClcbiYjNDM7XHRcdGJpb19zZXRfcGFnZXNfZGlydHkoYmlvKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9XQUlUKVxuJiM0MztcdFx0YmlvLVx1MDAzZWJpX29wZiB8PSBSRVFfTk9XQUlUO1xuJiM0MztcdGlmICgoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ISVBSSSkgXHUwMDI2XHUwMDI2ICF3YWl0X2Zvcl9jb21wbGV0aW9uKSB7XG4mIzQzO1x0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9QT0xMRUQ7XG4mIzQzO1x0XHRXUklURV9PTkNFKGlvY2ItXHUwMDNlcHJpdmF0ZSwgYmlvKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChvcHMtXHUwMDNlaW9tYXBfZW5kKVxuJiM0MztcdFx0b3BzLVx1MDAzZWlvbWFwX2VuZChpbm9kZSwgaW9taS5wb3MsIGNvdW50LCBjb3VudCwgaW9taS5mbGFncyxcbiYjNDM7XHRcdFx0ICAgICAgIFx1MDAyNmlvbWkuaW9tYXApO1xuJiM0MztcbiYjNDM7XHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb24pIHtcbiYjNDM7XHRcdGJpby1cdTAwM2ViaV9lbmRfaW8gPSBpb21hcF9kaW9fc2ltcGxlX2VuZF9pbztcbiYjNDM7XHRcdHN1Ym1pdF9iaW8oYmlvKTtcbiYjNDM7XHRcdHRyYWNlX2lvbWFwX2Rpb19yd19xdWV1ZWQoaW5vZGUsIGlvbWkucG9zLCBjb3VudCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3VibWl0X2Jpb193YWl0KGJpbyk7XG4mIzQzO1x0cmV0dXJuIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpO1xuJiM0MztcbiYjNDM7b3V0X2Jpb19yZWxlYXNlX3BhZ2VzOlxuJiM0MztcdGJpb19yZWxlYXNlX3BhZ2VzKGJpbywgZmFsc2UpO1xuJiM0MztvdXRfYmlvX3B1dDpcbiYjNDM7XHRiaW9fcHV0KGJpbyk7XG4mIzQzO291dF9pb21hcF9lbmQ6XG4mIzQzO1x0aWYgKG9wcy1cdTAwM2Vpb21hcF9lbmQpXG4mIzQzO1x0XHRvcHMtXHUwMDNlaW9tYXBfZW5kKGlub2RlLCBpb21pLnBvcywgY291bnQsIDAsIGlvbWkuZmxhZ3MsXG4mIzQzO1x0XHRcdCAgICAgICBcdTAwMjZpb21pLmlvbWFwKTtcbiYjNDM7XHRpbm9kZV9kaW9fZW5kKGlub2RlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHNzaXplX3RcbiBpb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXG4gXHRcdHVuc2lnbmVkIGludCBkaW9fZmxhZ3MsIHZvaWQgKnByaXZhdGUsIHNpemVfdCBkb25lX2JlZm9yZSlcbiB7XG4gXHRzdHJ1Y3QgaW9tYXBfZGlvICpkaW87XG4mIzQzO1x0c3NpemVfdCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRmFzdCBwYXRoIGZvciBzbWFsbCwgYmxvY2stYWxpZ25lZCBkaXJlY3QgSS9PcyB0aGF0IG1hcCB0byBhXG4mIzQzO1x0ICogc2luZ2xlIGNvbnRpZ3VvdXMgb24tZGlzayBleHRlbnQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBAZG9wcyBtdXN0IGJlIE5VTEw6IGEgbm9uLU5VTEwgQGRvcHMgbWVhbnMgdGhlIGNhbGxlciB3YW50cyBpdHNcbiYjNDM7XHQgKiAtXHUwMDNlZW5kX2lvIC8gLVx1MDAzZXN1Ym1pdF9pbyBob29rcyBpbnZva2VkLCBhbmQgaW4gcGFydGljdWxhciB3YW50cyBpdHNcbiYjNDM7XHQgKiBiaW9zIHRvIGJlIGFsbG9jYXRlZCBmcm9tIHRoZSBmaWxlc3lzdGVtLXByaXZhdGUgQGRvcHMtXHUwMDNlYmlvX3NldFxuJiM0MztcdCAqICh3aG9zZSBmcm9udF9wYWQgc2l6ZXMgYSBmaWxlc3lzdGVtLXByaXZhdGUgd3JhcHBlciBhcm91bmQgdGhlXG4mIzQzO1x0ICogYmlvKS4gIFRoZSBmYXN0IHBhdGggaW5zdGVhZCBhbGxvY2F0ZXMgZnJvbSB0aGUgc2hhcmVkXG4mIzQzO1x0ICogaW9tYXBfZGlvX3NpbXBsZV9wb29sLCB3aG9zZSBmcm9udF9wYWQgbWF0Y2hlc1xuJiM0MztcdCAqIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlOyB0aGUgdHdvIHdyYXBwZXJzIGFyZSBub3RcbiYjNDM7XHQgKiBpbnRlcmNoYW5nZWFibGUsIHNvIHdlIG11c3QgZmFsbCBiYWNrIHRvIF9faW9tYXBfZGlvX3J3KCkgaW5cbiYjNDM7XHQgKiB0aGF0IGNhc2UuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBAZG9uZV9iZWZvcmUgbXVzdCBiZSB6ZXJvOiBhIG5vbi16ZXJvIGNhbGxlci1hY2N1bXVsYXRlZCByZXNpZHVhbFxuJiM0MztcdCAqIGNhbm5vdCBiZSBjYXJyaWVkIHRocm91Z2ggYSBzaW5nbGUtYmlvIGlubGluZSBjb21wbGV0aW9uLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogLUVOT1RCTEsgaXMgdGhlIHByaXZhdGUgc2VudGluZWwgcmV0dXJuZWQgYnkgaW9tYXBfZGlvX3NpbXBsZSgpXG4mIzQzO1x0ICogd2hlbiBpdCBkZWNpZGVzIHRoZSByZXF1ZXN0IGRvZXMgbm90IGZpdCB0aGUgZmFzdCBwYXRoLlxuJiM0MztcdCAqIEluIHRoYXQgY2FzZSB3ZSBwcm9jZWVkIHRvIHRoZSBnZW5lcmljIF9faW9tYXBfZGlvX3J3KCkgc2xvd1xuJiM0MztcdCAqIHBhdGguICBBbnkgb3RoZXIgZXJybm8gaXMgYSByZWFsIHJlc3VsdCBhbmQgaXMgcHJvcGFnYXRlZCBhcy1pcyxcbiYjNDM7XHQgKiBpbiBwYXJ0aWN1bGFyIC1FQUdBSU4gZm9yIElPQ0JfTk9XQUlUIG11c3QgcmVhY2ggdGhlIGNhbGxlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWRvcHMgXHUwMDI2XHUwMDI2ICFkb25lX2JlZm9yZSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoaW9jYiwgaXRlciwgZGlvX2ZsYWdzKSkge1xuJiM0MztcdFx0cmV0ID0gaW9tYXBfZGlvX3NpbXBsZShpb2NiLCBpdGVyLCBvcHMsIHByaXZhdGUsIGRpb19mbGFncyk7XG4mIzQzO1x0XHRpZiAocmV0ICE9IC1FTk9UQkxLKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiBcbiBcdGRpbyA9IF9faW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIG9wcywgZG9wcywgZGlvX2ZsYWdzLCBwcml2YXRlLFxuIFx0XHRcdCAgICAgZG9uZV9iZWZvcmUpO1xuQEAgLTkwMiwzICYjNDM7MTE1NywxMSBAQCBpb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRyZXR1cm4gaW9tYXBfZGlvX2NvbXBsZXRlKGRpbyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2Rpb19ydyk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCBpb21hcF9kaW9faW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJpb3NldF9pbml0KFx1MDAyNmlvbWFwX2Rpb19zaW1wbGVfcG9vbCwgNCxcbiYjNDM7XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyksXG4mIzQzO1x0XHRcdCAgIEJJT1NFVF9ORUVEX0JWRUNTIHwgQklPU0VUX1BFUkNQVV9DQUNIRSk7XG4mIzQzO31cbiYjNDM7ZnNfaW5pdGNhbGwoaW9tYXBfZGlvX2luaXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEyOjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfZGlvX3NpbXBsZSYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29yayYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlX2VuZF9pbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZhc3QgcGF0aCBmb3IgZGlyZWN0IEkvTyByZWFkcyAoYGlvbWFwX2Rpb19zaW1wbGVgKSBpbiB0aGUgaW9tYXAgc3Vic3lzdGVtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgSS9PIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBkaXJlY3QgSS9PIHN5c3RlbSBjYWxscyBvbiBzdXBwb3J0ZWQgZmlsZXN5c3RlbXMuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZmFzdCBwYXRoIGhhbmRsZXMgdmFyaW91cyBJL08gY29uZGl0aW9ucyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE4MGI2OGFkNjA2OGYwOGNjN2U2ZjAxNmNiYTM3NTJhMTk2NjQ3YTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyOSAxMjoyMDowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmMKaW5kZXggYjQ4NWUzYjE5MWRhZmEuLjRkY2M5ZmM3NjZhOTJlIDEwMDY0NAotLS0gYS9mcy9pb21hcC9kaXJlY3QtaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9kaXJlY3QtaW8uYwpAQCAtMTAsNiAmIzQzOzEwLDkgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pb21hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Rhc2tfaW9fYWNjb3VudGluZ19vcHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9mc2Vycm9yLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tvYmplY3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3lzZnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dHJhY2UuaCYjMzQ7CiAKQEAgLTg4LDkgJiM0Mzs5MSw5IEBAIHN0YXRpYyBpbmxpbmUgZW51bSBmc2Vycm9yX3R5cGUgaW9tYXBfZGlvX2Vycl90eXBlKGNvbnN0IHN0cnVjdCBpb21hcF9kaW8gKmRpbykKIAlyZXR1cm4gRlNFUlJfRElSRUNUSU9fUkVBRDsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IoY29uc3Qgc3RydWN0IGlvbWFwX2RpbyAqZGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGludCBlcnJvcikKIHsKLQlzd2l0Y2ggKGRpby0mZ3Q7ZXJyb3IpIHsKJiM0MzsJc3dpdGNoIChlcnJvcikgewogCWNhc2UgMDoKIAljYXNlIC1FQUdBSU46CiAJY2FzZSAtRU5PVEJMSzoKQEAgLTExMCw3ICYjNDM7MTEzLDcgQEAgc3NpemVfdCBpb21hcF9kaW9fY29tcGxldGUoc3RydWN0IGlvbWFwX2RpbyAqZGlvKQogCiAJaWYgKGRvcHMgJmFtcDsmYW1wOyBkb3BzLSZndDtlbmRfaW8pCiAJCXJldCA9IGRvcHMtJmd0O2VuZF9pbyhpb2NiLCBkaW8tJmd0O3NpemUsIHJldCwgZGlvLSZndDtmbGFncyk7Ci0JaWYgKHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IoZGlvKSkKJiM0MzsJaWYgKHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IoZGlvLSZndDtlcnJvcikpCiAJCWZzZXJyb3JfcmVwb3J0X2lvKGZpbGVfaW5vZGUoaW9jYi0mZ3Q7a2lfZmlscCksCiAJCQkJICBpb21hcF9kaW9fZXJyX3R5cGUoZGlvKSwgb2Zmc2V0LCBkaW8tJmd0O3NpemUsCiAJCQkJICBkaW8tJmd0O2Vycm9yLCBHRlBfTk9GUyk7CkBAIC0yMzcsMjMgJiM0MzsyNDAsMjkgQEAgc3RhdGljIHZvaWQgaW9tYXBfZGlvX2RvbmUoc3RydWN0IGlvbWFwX2RpbyAqZGlvKQogCWlvbWFwX2Rpb19jb21wbGV0ZV93b3JrKCZhbXA7ZGlvLSZndDthaW8ud29yayk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW9tYXBfZGlvX2Jpb19lbmRfaW8oc3RydWN0IGJpbyAqYmlvLCBib29sIGlubGluZV9jb21wbGV0aW9uKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpb21hcF9kaW9fYmlvX3JlbGVhc2VfcGFnZXMoc3RydWN0IGJpbyAqYmlvLAomIzQzOwkJdW5zaWduZWQgaW50IGRpb19mbGFncywgYm9vbCBlcnJvcikKIHsKLQlzdHJ1Y3QgaW9tYXBfZGlvICpkaW8gPSBiaW8tJmd0O2JpX3ByaXZhdGU7Ci0KIAlpZiAoYmlvX2ludGVncml0eShiaW8pKQogCQlmc19iaW9faW50ZWdyaXR5X2ZyZWUoYmlvKTsKIAotCWlmIChkaW8tJmd0O2ZsYWdzICZhbXA7IElPTUFQX0RJT19CT1VOQ0UpIHsKLQkJYmlvX2lvdl9pdGVyX3VuYm91bmNlKGJpbywgISFkaW8tJmd0O2Vycm9yLAotCQkJCWRpby0mZ3Q7ZmxhZ3MgJmFtcDsgSU9NQVBfRElPX1VTRVJfQkFDS0VEKTsKJiM0MzsJaWYgKGRpb19mbGFncyAmYW1wOyBJT01BUF9ESU9fQk9VTkNFKSB7CiYjNDM7CQliaW9faW92X2l0ZXJfdW5ib3VuY2UoYmlvLCBlcnJvciwKJiM0MzsJCQkJZGlvX2ZsYWdzICZhbXA7IElPTUFQX0RJT19VU0VSX0JBQ0tFRCk7CiAJCWJpb19wdXQoYmlvKTsKLQl9IGVsc2UgaWYgKGRpby0mZ3Q7ZmxhZ3MgJmFtcDsgSU9NQVBfRElPX1VTRVJfQkFDS0VEKSB7CiYjNDM7CX0gZWxzZSBpZiAoZGlvX2ZsYWdzICZhbXA7IElPTUFQX0RJT19VU0VSX0JBQ0tFRCkgewogCQliaW9fY2hlY2tfcGFnZXNfZGlydHkoYmlvKTsKIAl9IGVsc2UgewogCQliaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTsKIAkJYmlvX3B1dChiaW8pOwogCX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX19pb21hcF9kaW9fYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8sIGJvb2wgaW5saW5lX2NvbXBsZXRpb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9tYXBfZGlvICpkaW8gPSBiaW8tJmd0O2JpX3ByaXZhdGU7CiYjNDM7CiYjNDM7CWlvbWFwX2Rpb19iaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGRpby0mZ3Q7ZmxhZ3MsICEhZGlvLSZndDtlcnJvcik7CiAKIAkvKiBEbyBub3QgdG91Y2ggYmlvIGJlbG93LCB3ZSBqdXN0IGdhdmUgdXAgb3VyIHJlZmVyZW5jZS4gKi8KIApAQCAtMzk4LDYgJiM0Mzs0MDcsMTQgQEAgc3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX2Jpb19pdGVyX29uZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9tYXBfZGlvX2FsaWdubWVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IGRpb19mbGFncykKJiM0Mzt7CiYjNDM7CWlmIChkaW9fZmxhZ3MgJmFtcDsgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRCkKJiM0MzsJCXJldHVybiBpX2Jsb2Nrc2l6ZShpbm9kZSk7CiYjNDM7CXJldHVybiBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShiZGV2KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKQogewogCWNvbnN0IHN0cnVjdCBpb21hcCAqaW9tYXAgPSAmYW1wO2l0ZXItJmd0O2lvbWFwOwpAQCAtNDE2LDEwICYjNDM7NDMzLDcgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbykKIAkgKiBGaWxlIHN5c3RlbXMgdGhhdCB3cml0ZSBvdXQgb2YgcGxhY2UgYW5kIGFsd2F5cyBhbGxvY2F0ZSBuZXcgYmxvY2tzCiAJICogbmVlZCBlYWNoIGJpbyB0byBiZSBibG9jayBhbGlnbmVkIGFzIHRoYXQmIzM5O3MgdGhlIHVuaXQgb2YgYWxsb2NhdGlvbi4KIAkgKi8KLQlpZiAoZGlvLSZndDtmbGFncyAmYW1wOyBJT01BUF9ESU9fRlNCTE9DS19BTElHTkVEKQotCQlhbGlnbm1lbnQgPSBmc19ibG9ja19zaXplOwotCWVsc2UKLQkJYWxpZ25tZW50ID0gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoaW9tYXAtJmd0O2JkZXYpOwomIzQzOwlhbGlnbm1lbnQgPSBpb21hcF9kaW9fYWxpZ25tZW50KGlub2RlLCBpb21hcC0mZ3Q7YmRldiwgZGlvLSZndDtmbGFncyk7CiAKIAlpZiAoKHBvcyB8IGxlbmd0aCkgJmFtcDsgKGFsaWdubWVudCAtIDEpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTg4OCwxMiAmIzQzOzkwMiwyNTMgQEAgX19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19ydyk7CiAKJiM0MztzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSB7CiYjNDM7CXN0cnVjdCBraW9jYgkJKmlvY2I7CiYjNDM7CXNpemVfdAkJCXNpemU7CiYjNDM7CXVuc2lnbmVkIGludAkJZGlvX2ZsYWdzOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKJiM0MzsJLyoKJiM0MzsJICogQWxpZ24gQGJpbyB0byBhIGNhY2hlbGluZSBib3VuZGFyeSBzbyB0aGF0LCBjb21iaW5lZCB3aXRoIHRoZQomIzQzOwkgKiBmcm9udF9wYWQgcGFzc2VkIHRvIGJpb3NldF9pbml0KCksIHRoZSBiaW8gc2l0cyBhdCB0aGUgc3RhcnQgb2YKJiM0MzsJICogYSBjYWNoZWxpbmUgaW4gbWVtb3J5IHJldHVybmVkIGJ5IHRoZSAoSFdDQUNIRS1hbGlnbmVkKSBiaW8KJiM0MzsJICogc2xhYi4gIFRoaXMga2VlcHMgdGhlIGhvdCBmaWVsZHMgYmxvY2sgbGF5ZXIgdG91Y2hlcyBvbiBzdWJtaXQKJiM0MzsJICogYW5kIGNvbXBsZXRpb24gKGJpX2l0ZXIsIGJpX3N0YXR1cywgLi4uKSB3aXRoaW4gYSBzaW5nbGUgbGluZS4KJiM0MzsJICovCiYjNDM7CXN0cnVjdCBiaW8JYmlvIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGJpb19zZXQgaW9tYXBfZGlvX3NpbXBsZV9wb29sOwomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyKQomIzQzO3sKJiM0MzsJc3RydWN0IGJpbyAqYmlvID0gJmFtcDtzci0mZ3Q7YmlvOwomIzQzOwlzdHJ1Y3Qga2lvY2IgKmlvY2IgPSBzci0mZ3Q7aW9jYjsKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi0mZ3Q7a2lfZmlscCk7CiYjNDM7CWludCBlcnJvciA9IGJsa19zdGF0dXNfdG9fZXJybm8oYmlvLSZndDtiaV9zdGF0dXMpOwomIzQzOwlzc2l6ZV90IHJldCA9IGVycm9yOwomIzQzOwomIzQzOwlpZiAobGlrZWx5KCFyZXQpKSB7CiYjNDM7CQlyZXQgPSBzci0mZ3Q7c2l6ZTsKJiM0MzsJCWlvY2ItJmd0O2tpX3BvcyAmIzQzOz0gcmV0OwomIzQzOwl9IGVsc2UgaWYgKHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IocmV0KSkgewomIzQzOwkJZnNlcnJvcl9yZXBvcnRfaW8oaW5vZGUsIEZTRVJSX0RJUkVDVElPX1JFQUQsIGlvY2ItJmd0O2tpX3BvcywKJiM0MzsJCQkJICBzci0mZ3Q7c2l6ZSwgcmV0LCBHRlBfTk9GUyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaW9tYXBfZGlvX2Jpb19yZWxlYXNlX3BhZ2VzKGJpbywgc3ItJmd0O2Rpb19mbGFncywgcmV0ICZsdDsgMCk7CiYjNDM7CWlub2RlX2Rpb19lbmQoaW5vZGUpOwomIzQzOwl0cmFjZV9pb21hcF9kaW9fY29tcGxldGUoaW9jYiwgZXJyb3IsIHJldCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IgPQomIzQzOwkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgd29yayk7CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0Uoc3ItJmd0O2lvY2ItJmd0O3ByaXZhdGUsIE5VTEwpOwomIzQzOwlzci0mZ3Q7aW9jYi0mZ3Q7a2lfY29tcGxldGUoc3ItJmd0O2lvY2IsIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW8oc3RydWN0IGJpbyAqYmlvKQomIzQzO3sKJiM0MzsJc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyID0KJiM0MzsJCWNvbnRhaW5lcl9vZihiaW8sIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoc3ItJmd0O2Jpby5iaV9zdGF0dXMpKSB7CiYjNDM7CQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShzci0mZ3Q7aW9jYi0mZ3Q7a2lfZmlscCk7CiYjNDM7CiYjNDM7CQlJTklUX1dPUksoJmFtcDtzci0mZ3Q7d29yaywgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrKTsKJiM0MzsJCXF1ZXVlX3dvcmsoaW5vZGUtJmd0O2lfc2ItJmd0O3NfZGlvX2RvbmVfd3EsICZhbXA7c3ItJmd0O3dvcmspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNyLSZndDtpb2NiLSZndDtraV9jb21wbGV0ZShzci0mZ3Q7aW9jYiwgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcikpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoc3RydWN0IGtpb2NiICppb2NiLAomIzQzOwkJc3RydWN0IGlvdl9pdGVyICppdGVyLCB1bnNpZ25lZCBpbnQgZGlvX2ZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi0mZ3Q7a2lfZmlscCk7CiYjNDM7CXNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpOwomIzQzOwomIzQzOwlpZiAoaW92X2l0ZXJfcncoaXRlcikgIT0gUkVBRCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKCFjb3VudCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJLyoKJiM0MzsJICogU2ltcGxlIGRpbyBpcyBhbiBvcHRpbWl6YXRpb24gZm9yIHNtYWxsIElPLiBGaWx0ZXIgb3V0IGxhcmdlIElPCiYjNDM7CSAqIGVhcmx5IGFzIGl0JiMzOTtzIHRoZSBtb3N0IGNvbW1vbiBjYXNlIHRvIGZhaWwgZm9yIHR5cGljYWwgZGlyZWN0IElPCiYjNDM7CSAqIHdvcmtsb2Fkcy4KJiM0MzsJICovCiYjNDM7CWlmIChjb3VudCAmZ3Q7IGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGRpb19mbGFncyAmYW1wOyAoSU9NQVBfRElPX0ZPUkNFX1dBSVQgfCBJT01BUF9ESU9fUEFSVElBTCB8CiYjNDM7CQkJIElPTUFQX0RJT19CT1VOQ0UpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAoaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IGNvdW50ICZndDsgaV9zaXplX3JlYWQoaW5vZGUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAoSVNfRU5DUllQVEVEKGlub2RlKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLAomIzQzOwkJc3RydWN0IGlvdl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsCiYjNDM7CQl2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgZGlvX2ZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi0mZ3Q7a2lfZmlscCk7CiYjNDM7CXNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpOwomIzQzOwlzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3I7CiYjNDM7CXVuc2lnbmVkIGludCBhbGlnbm1lbnQ7CiYjNDM7CXN0cnVjdCBpb21hcF9pdGVyIGlvbWkgPSB7CiYjNDM7CQkuaW5vZGUJCT0gaW5vZGUsCiYjNDM7CQkucG9zCQk9IGlvY2ItJmd0O2tpX3BvcywKJiM0MzsJCS5sZW4JCT0gY291bnQsCiYjNDM7CQkuZmxhZ3MJCT0gSU9NQVBfRElSRUNULAomIzQzOwkJLnByaXZhdGUJPSBwcml2YXRlLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgYmlvICpiaW87CiYjNDM7CWJvb2wgd2FpdF9mb3JfY29tcGxldGlvbiA9IGlzX3N5bmNfa2lvY2IoaW9jYik7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9OT1dBSVQpCiYjNDM7CQlpb21pLmZsYWdzIHw9IElPTUFQX05PV0FJVDsKJiM0MzsKJiM0MzsJcmV0ID0ga2lvY2Jfd3JpdGVfYW5kX3dhaXQoaW9jYiwgY291bnQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaW5vZGVfZGlvX2JlZ2luKGlub2RlKTsKJiM0MzsKJiM0MzsJcmV0ID0gb3BzLSZndDtpb21hcF9iZWdpbihpbm9kZSwgaW9taS5wb3MsIGNvdW50LCBpb21pLmZsYWdzLAomIzQzOwkJCSAgICAgICAmYW1wO2lvbWkuaW9tYXAsICZhbXA7aW9taS5zcmNtYXApOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlpbm9kZV9kaW9fZW5kKGlub2RlKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGlvbWkuaW9tYXAudHlwZSAhPSBJT01BUF9NQVBQRUQgfHwKJiM0MzsJICAgIGlvbWkuaW9tYXAub2Zmc2V0ICYjNDM7IGlvbWkuaW9tYXAubGVuZ3RoICZsdDsgaW9taS5wb3MgJiM0MzsgY291bnQgfHwKJiM0MzsJICAgIChpb21pLmlvbWFwLmZsYWdzICZhbXA7IElPTUFQX0ZfSU5URUdSSVRZKSkgewomIzQzOwkJcmV0ID0gLUVOT1RCTEs7CiYjNDM7CQlnb3RvIG91dF9pb21hcF9lbmQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYWxpZ25tZW50ID0gaW9tYXBfZGlvX2FsaWdubWVudChpbm9kZSwgaW9taS5pb21hcC5iZGV2LCBkaW9fZmxhZ3MpOwomIzQzOwlpZiAoKGlvbWkucG9zIHwgY291bnQpICZhbXA7IChhbGlnbm1lbnQgLSAxKSkgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gb3V0X2lvbWFwX2VuZDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb24gJmFtcDsmYW1wOyB1bmxpa2VseSghaW5vZGUtJmd0O2lfc2ItJmd0O3NfZGlvX2RvbmVfd3EpKSB7CiYjNDM7CQlyZXQgPSBzYl9pbml0X2Rpb19kb25lX3dxKGlub2RlLSZndDtpX3NiKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gb3V0X2lvbWFwX2VuZDsKJiM0MzsJfQomIzQzOwomIzQzOwl0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgZGlvX2ZsYWdzLCAwKTsKJiM0MzsKJiM0MzsJaWYgKHVzZXJfYmFja2VkX2l0ZXIoaXRlcikpCiYjNDM7CQlkaW9fZmxhZ3MgfD0gSU9NQVBfRElPX1VTRVJfQkFDS0VEOwomIzQzOwomIzQzOwliaW8gPSBiaW9fYWxsb2NfYmlvc2V0KGlvbWkuaW9tYXAuYmRldiwKJiM0MzsJCQliaW9faW92X3ZlY3NfdG9fYWxsb2MoaXRlciwgQklPX01BWF9WRUNTKSwKJiM0MzsJCQlSRVFfT1BfUkVBRCwKJiM0MzsJCQlHRlBfS0VSTkVMLCAmYW1wO2lvbWFwX2Rpb19zaW1wbGVfcG9vbCk7CiYjNDM7CXNyID0gY29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7CiYjNDM7CXNyLSZndDtpb2NiID0gaW9jYjsKJiM0MzsJc3ItJmd0O2Rpb19mbGFncyA9IGRpb19mbGFnczsKJiM0MzsKJiM0MzsJYmlvLSZndDtiaV9pdGVyLmJpX3NlY3RvciA9IGlvbWFwX3NlY3RvcigmYW1wO2lvbWkuaW9tYXAsIGlvbWkucG9zKTsKJiM0MzsJYmlvLSZndDtiaV9pb3ByaW8gPSBpb2NiLSZndDtraV9pb3ByaW87CiYjNDM7CiYjNDM7CXJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBhbGlnbm1lbnQgLSAxKTsKJiM0MzsJaWYgKHVubGlrZWx5KHJldCkpCiYjNDM7CQlnb3RvIG91dF9iaW9fcHV0OwomIzQzOwomIzQzOwlpZiAoYmlvLSZndDtiaV9pdGVyLmJpX3NpemUgIT0gY291bnQpIHsKJiM0MzsJCWlvdl9pdGVyX3JldmVydChpdGVyLCBiaW8tJmd0O2JpX2l0ZXIuYmlfc2l6ZSk7CiYjNDM7CQlyZXQgPSAtRU5PVEJMSzsKJiM0MzsJCWdvdG8gb3V0X2Jpb19yZWxlYXNlX3BhZ2VzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNyLSZndDtzaXplID0gYmlvLSZndDtiaV9pdGVyLmJpX3NpemU7CiYjNDM7CiYjNDM7CWlmIChkaW9fZmxhZ3MgJmFtcDsgSU9NQVBfRElPX1VTRVJfQkFDS0VEKQomIzQzOwkJYmlvX3NldF9wYWdlc19kaXJ0eShiaW8pOwomIzQzOwomIzQzOwlpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9OT1dBSVQpCiYjNDM7CQliaW8tJmd0O2JpX29wZiB8PSBSRVFfTk9XQUlUOwomIzQzOwlpZiAoKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfSElQUkkpICZhbXA7JmFtcDsgIXdhaXRfZm9yX2NvbXBsZXRpb24pIHsKJiM0MzsJCWJpby0mZ3Q7Ymlfb3BmIHw9IFJFUV9QT0xMRUQ7CiYjNDM7CQlXUklURV9PTkNFKGlvY2ItJmd0O3ByaXZhdGUsIGJpbyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG9wcy0mZ3Q7aW9tYXBfZW5kKQomIzQzOwkJb3BzLSZndDtpb21hcF9lbmQoaW5vZGUsIGlvbWkucG9zLCBjb3VudCwgY291bnQsIGlvbWkuZmxhZ3MsCiYjNDM7CQkJICAgICAgICZhbXA7aW9taS5pb21hcCk7CiYjNDM7CiYjNDM7CWlmICghd2FpdF9mb3JfY29tcGxldGlvbikgewomIzQzOwkJYmlvLSZndDtiaV9lbmRfaW8gPSBpb21hcF9kaW9fc2ltcGxlX2VuZF9pbzsKJiM0MzsJCXN1Ym1pdF9iaW8oYmlvKTsKJiM0MzsJCXRyYWNlX2lvbWFwX2Rpb19yd19xdWV1ZWQoaW5vZGUsIGlvbWkucG9zLCBjb3VudCk7CiYjNDM7CQlyZXR1cm4gLUVJT0NCUVVFVUVEOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN1Ym1pdF9iaW9fd2FpdChiaW8pOwomIzQzOwlyZXR1cm4gaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcik7CiYjNDM7CiYjNDM7b3V0X2Jpb19yZWxlYXNlX3BhZ2VzOgomIzQzOwliaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTsKJiM0MztvdXRfYmlvX3B1dDoKJiM0MzsJYmlvX3B1dChiaW8pOwomIzQzO291dF9pb21hcF9lbmQ6CiYjNDM7CWlmIChvcHMtJmd0O2lvbWFwX2VuZCkKJiM0MzsJCW9wcy0mZ3Q7aW9tYXBfZW5kKGlub2RlLCBpb21pLnBvcywgY291bnQsIDAsIGlvbWkuZmxhZ3MsCiYjNDM7CQkJICAgICAgICZhbXA7aW9taS5pb21hcCk7CiYjNDM7CWlub2RlX2Rpb19lbmQoaW5vZGUpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIHNzaXplX3QKIGlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAkJY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLCBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyAqZG9wcywKIAkJdW5zaWduZWQgaW50IGRpb19mbGFncywgdm9pZCAqcHJpdmF0ZSwgc2l6ZV90IGRvbmVfYmVmb3JlKQogewogCXN0cnVjdCBpb21hcF9kaW8gKmRpbzsKJiM0MzsJc3NpemVfdCByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZhc3QgcGF0aCBmb3Igc21hbGwsIGJsb2NrLWFsaWduZWQgZGlyZWN0IEkvT3MgdGhhdCBtYXAgdG8gYQomIzQzOwkgKiBzaW5nbGUgY29udGlndW91cyBvbi1kaXNrIGV4dGVudC4KJiM0MzsJICoKJiM0MzsJICogQGRvcHMgbXVzdCBiZSBOVUxMOiBhIG5vbi1OVUxMIEBkb3BzIG1lYW5zIHRoZSBjYWxsZXIgd2FudHMgaXRzCiYjNDM7CSAqIC0mZ3Q7ZW5kX2lvIC8gLSZndDtzdWJtaXRfaW8gaG9va3MgaW52b2tlZCwgYW5kIGluIHBhcnRpY3VsYXIgd2FudHMgaXRzCiYjNDM7CSAqIGJpb3MgdG8gYmUgYWxsb2NhdGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0tcHJpdmF0ZSBAZG9wcy0mZ3Q7YmlvX3NldAomIzQzOwkgKiAod2hvc2UgZnJvbnRfcGFkIHNpemVzIGEgZmlsZXN5c3RlbS1wcml2YXRlIHdyYXBwZXIgYXJvdW5kIHRoZQomIzQzOwkgKiBiaW8pLiAgVGhlIGZhc3QgcGF0aCBpbnN0ZWFkIGFsbG9jYXRlcyBmcm9tIHRoZSBzaGFyZWQKJiM0MzsJICogaW9tYXBfZGlvX3NpbXBsZV9wb29sLCB3aG9zZSBmcm9udF9wYWQgbWF0Y2hlcwomIzQzOwkgKiBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZTsgdGhlIHR3byB3cmFwcGVycyBhcmUgbm90CiYjNDM7CSAqIGludGVyY2hhbmdlYWJsZSwgc28gd2UgbXVzdCBmYWxsIGJhY2sgdG8gX19pb21hcF9kaW9fcncoKSBpbgomIzQzOwkgKiB0aGF0IGNhc2UuCiYjNDM7CSAqCiYjNDM7CSAqIEBkb25lX2JlZm9yZSBtdXN0IGJlIHplcm86IGEgbm9uLXplcm8gY2FsbGVyLWFjY3VtdWxhdGVkIHJlc2lkdWFsCiYjNDM7CSAqIGNhbm5vdCBiZSBjYXJyaWVkIHRocm91Z2ggYSBzaW5nbGUtYmlvIGlubGluZSBjb21wbGV0aW9uLgomIzQzOwkgKgomIzQzOwkgKiAtRU5PVEJMSyBpcyB0aGUgcHJpdmF0ZSBzZW50aW5lbCByZXR1cm5lZCBieSBpb21hcF9kaW9fc2ltcGxlKCkKJiM0MzsJICogd2hlbiBpdCBkZWNpZGVzIHRoZSByZXF1ZXN0IGRvZXMgbm90IGZpdCB0aGUgZmFzdCBwYXRoLgomIzQzOwkgKiBJbiB0aGF0IGNhc2Ugd2UgcHJvY2VlZCB0byB0aGUgZ2VuZXJpYyBfX2lvbWFwX2Rpb19ydygpIHNsb3cKJiM0MzsJICogcGF0aC4gIEFueSBvdGhlciBlcnJubyBpcyBhIHJlYWwgcmVzdWx0IGFuZCBpcyBwcm9wYWdhdGVkIGFzLWlzLAomIzQzOwkgKiBpbiBwYXJ0aWN1bGFyIC1FQUdBSU4gZm9yIElPQ0JfTk9XQUlUIG11c3QgcmVhY2ggdGhlIGNhbGxlci4KJiM0MzsJICovCiYjNDM7CWlmICghZG9wcyAmYW1wOyZhbXA7ICFkb25lX2JlZm9yZSAmYW1wOyZhbXA7CiYjNDM7CSAgICBpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZChpb2NiLCBpdGVyLCBkaW9fZmxhZ3MpKSB7CiYjNDM7CQlyZXQgPSBpb21hcF9kaW9fc2ltcGxlKGlvY2IsIGl0ZXIsIG9wcywgcHJpdmF0ZSwgZGlvX2ZsYWdzKTsKJiM0MzsJCWlmIChyZXQgIT0gLUVOT1RCTEspCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQogCiAJZGlvID0gX19pb21hcF9kaW9fcncoaW9jYiwgaXRlciwgb3BzLCBkb3BzLCBkaW9fZmxhZ3MsIHByaXZhdGUsCiAJCQkgICAgIGRvbmVfYmVmb3JlKTsKQEAgLTkwMiwzICYjNDM7MTE1NywxMSBAQCBpb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJcmV0dXJuIGlvbWFwX2Rpb19jb21wbGV0ZShkaW8pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX3J3KTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCBpb21hcF9kaW9faW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJpb3NldF9pbml0KCZhbXA7aW9tYXBfZGlvX3NpbXBsZV9wb29sLCA0LAomIzQzOwkJCSAgIG9mZnNldG9mKHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pLAomIzQzOwkJCSAgIEJJT1NFVF9ORUVEX0JWRUNTIHwgQklPU0VUX1BFUkNQVV9DQUNIRSk7CiYjNDM7fQomIzQzO2ZzX2luaXRjYWxsKGlvbWFwX2Rpb19pbml0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTI6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMzMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXcgRGlyZWN0IEkvTyBGYXN0IFBhdGggUGF0Y2gqKgoKT2theSwgc28gdGhlcmUmIzM5O3MgYSBuZXcgcGF0Y2ggYWltZWQgYXQgYWNjZWxlcmF0aW5nIGRpcmVjdCBJL08gcmVhZHMgd2l0aGluIGBmcy9pb21hcC9kaXJlY3QtaW8uY2AuIFRoZSBjb3JlIGlkZWEgaXMgYSAmIzM0O3NpbXBsZSYjMzQ7IGZhc3QgcGF0aCwgaGFuZGxlZCBieSBhIG5ldyBmdW5jdGlvbiwgYGlvbWFwX2Rpb19zaW1wbGVgLiBJdCBsb29rcyBsaWtlIGBpb21hcF9kaW9fc2ltcGxlYCBpcyBjb25kaXRpb25hbGx5IGNhbGxlZCBmcm9tIGBpb21hcF9kaW9fcndgIGJhc2VkIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgYGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSwgaW1wYWN0aW5nIHRoZSBoZWFydCBvZiBpb21hcCBkaXJlY3QgSS9PLCBzbyBmdXp6aW5nIHRoaXMgaXMgYWJzb2x1dGVseSBjcml0aWNhbC4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIGRldGFpbHMuIEkgc2VlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc3VpdGUgb2YgbmV3IGZ1bmN0aW9uczogYGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkYCwgYGlvbWFwX2Rpb19zaW1wbGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZWAsIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtgLCBhbmQgYGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvYC4gQW5kLCBhcyBleHBlY3RlZCwgaXQgbW9kaWZpZXMgYGlvbWFwX2Rpb19yd2AgdG8gYWN0dWFsbHkgbGV2ZXJhZ2UgdGhhdCBuZXcgYGlvbWFwX2Rpb19zaW1wbGVgIGZhc3QgcGF0aC4KCkJlZm9yZSB3ZSBldmVuIHRoaW5rIGFib3V0IGZ1enppbmcsIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgZnMvaW9tYXAvZGlyZWN0LWlvLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19GU19JT01BUGAgaXMgZW5hYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBmcy9pb21hcC9NYWtlZmlsZWAgb3IgYGZzL2lvbWFwL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIHVuZGVyc3RhbmQgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLCBidXQgdGhpcyBzaG91bGQgYmUgc3RyYWlnaHRmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19GU19JT01BUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2lvbWFwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9NYWtlZmlsZT03PWNjZmxhZ3MteSAmIzQzOz0gLUkgJChzcmMpXHRcdCMgbmVlZGVkIGZvciB0cmFjZSBldmVudHNcbmZzL2lvbWFwL01ha2VmaWxlLTgtXG5mcy9pb21hcC9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19GU19JT01BUClcdFx0JiM0Mzs9IGlvbWFwLm9cbmZzL2lvbWFwL01ha2VmaWxlLTEwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNTQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIENPTkZJR19GU19JT01BUCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYENPTkZJR19GU19JT01BUGAuIFdoYXQmIzM5O3MgbWFraW5nIHRoaXMgZnVuY3Rpb25hbGl0eSB0aWNrPyBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHNvdXJjZSBjb2RlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgdW5kZXJseWluZyBhc3N1bXB0aW9ucywgYW5kIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHRoYXQgbWlnaHQgYXJpc2UgZnJvbSBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcy4gSSBrbm93IHRoZSBnZW5lcmFsIHB1cnBvc2UsIElPTUFQIGlzIGFuIGltcG9ydGFudCBjb21wb25lbnQgZm9yIG1hbmFnaW5nIGRpcmVjdCBJL08uIE5vdywgbGV0JiMzOTtzIGV4cGxvcmUgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGl0ZW0gaW4gZGV0YWlsLiBVbmRlcnN0YW5kaW5nIHRoZSBwcmVjaXNlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBDT05GSUdfRlNfSU9NQVBgIGFuZCBvdGhlciByZWxhdGVkIGZlYXR1cmVzIOKAkyB0aGUgZmlsZXN5c3RlbSBsYXllcnMsIHRoZSBibG9jayBJL08gc3RhY2ssIGFuZCBhbnkgc3BlY2lmaWMgZHJpdmVyIGRlcGVuZGVuY2llcyDigJMgaXMgY3JpdGljYWwgaGVyZS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aHJvdWdoIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzIGFuZCBjb2RlIHRvIHNlZSBob3cgaXQgYWxsIGZpdHMgdG9nZXRoZXIsIHRoZSB1c3VhbCBwcm9jZXNzIHdoZW4gZGVjaXBoZXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgRlNfSU9NQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz01OD1jb25maWcgRlNfREFYXG4tLVxuZnMvS2NvbmZpZy02MS1cdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmZzL0tjb25maWc6NjI6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL0tjb25maWctNjMtXHRzZWxlY3QgREFYXG4tLVxuZnMvYnRyZnMvS2NvbmZpZz0zPWNvbmZpZyBCVFJGU19GU1xuLS1cbmZzL2J0cmZzL0tjb25maWctMTQtXHRzZWxlY3QgWlNURF9ERUNPTVBSRVNTXG5mcy9idHJmcy9LY29uZmlnOjE1Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9idHJmcy9LY29uZmlnLTE2LVx0c2VsZWN0IFJBSUQ2X1BRXG4tLVxuZnMvZXJvZnMvS2NvbmZpZz0zPWNvbmZpZyBFUk9GU19GU1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctOC1cdHNlbGVjdCBDUllQVE9fREVGTEFURSBpZiBFUk9GU19GU19aSVBfQUNDRUxcbmZzL2Vyb2ZzL0tjb25maWc6OTpcdHNlbGVjdCBGU19JT01BUFxuZnMvZXJvZnMvS2NvbmZpZy0xMC1cdHNlbGVjdCBMWjRfREVDT01QUkVTUyBpZiBFUk9GU19GU19aSVBcbi0tXG5mcy9leGZhdC9LY29uZmlnPTM9Y29uZmlnIEVYRkFUX0ZTXG4tLVxuZnMvZXhmYXQvS2NvbmZpZy02LVx0c2VsZWN0IE5MU1xuZnMvZXhmYXQvS2NvbmZpZzo3Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9leGZhdC9LY29uZmlnLTgtXHRoZWxwXG4tLVxuZnMvZXh0Mi9LY29uZmlnPTI9Y29uZmlnIEVYVDJfRlNcbi0tXG5mcy9leHQyL0tjb25maWctNC1cdHNlbGVjdCBCVUZGRVJfSEVBRFxuZnMvZXh0Mi9LY29uZmlnOjU6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2V4dDIvS2NvbmZpZy02LVx0aGVscFxuLS1cbmZzL2V4dDQvS2NvbmZpZz0yPWNvbmZpZyBFWFQ0X0ZTXG4tLVxuZnMvZXh0NC9LY29uZmlnLTctXHRzZWxlY3QgQ1JDMzJcbmZzL2V4dDQvS2NvbmZpZzo4Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9leHQ0L0tjb25maWctOS1cdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxuLS1cbmZzL2YyZnMvS2NvbmZpZz0yPWNvbmZpZyBGMkZTX0ZTXG4tLVxuZnMvZjJmcy9LY29uZmlnLTktXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbmZzL2YyZnMvS2NvbmZpZzoxMDpcdHNlbGVjdCBGU19JT01BUFxuZnMvZjJmcy9LY29uZmlnLTExLVx0c2VsZWN0IExaNF9DT01QUkVTUyBpZiBGMkZTX0ZTX0xaNFxuLS1cbmZzL2Z1c2UvS2NvbmZpZz0yPWNvbmZpZyBGVVNFX0ZTXG4tLVxuZnMvZnVzZS9LY29uZmlnLTQtXHRzZWxlY3QgRlNfUE9TSVhfQUNMXG5mcy9mdXNlL0tjb25maWc6NTpcdHNlbGVjdCBGU19JT01BUFxuZnMvZnVzZS9LY29uZmlnLTYtXHRoZWxwXG4tLVxuZnMvZ2ZzMi9LY29uZmlnPTI9Y29uZmlnIEdGUzJfRlNcbi0tXG5mcy9nZnMyL0tjb25maWctNy1cdHNlbGVjdCBRVU9UQUNUTFxuZnMvZ2ZzMi9LY29uZmlnOjg6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2dmczIvS2NvbmZpZy05LVx0aGVscFxuLS1cbmZzL2hwZnMvS2NvbmZpZz0yPWNvbmZpZyBIUEZTX0ZTXG4tLVxuZnMvaHBmcy9LY29uZmlnLTUtXHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL2hwZnMvS2NvbmZpZzo2Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9ocGZzL0tjb25maWctNy1cdGhlbHBcbi0tXG5mcy9udGZzL0tjb25maWc9Mj1jb25maWcgTlRGU19GU1xuLS1cbmZzL250ZnMvS2NvbmZpZy00LVx0c2VsZWN0IE5MU1xuZnMvbnRmcy9LY29uZmlnOjU6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL250ZnMvS2NvbmZpZy02LVx0aGVscFxuLS1cbmZzL3hmcy9LY29uZmlnPTI9Y29uZmlnIFhGU19GU1xuLS1cbmZzL3hmcy9LY29uZmlnLTYtXHRzZWxlY3QgQ1JDMzJcbmZzL3hmcy9LY29uZmlnOjc6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL3hmcy9LY29uZmlnLTgtXHRoZWxwXG4tLVxuZnMvem9uZWZzL0tjb25maWc9MT1jb25maWcgWk9ORUZTX0ZTXG4tLVxuZnMvem9uZWZzL0tjb25maWctNC1cdGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRFxuZnMvem9uZWZzL0tjb25maWc6NTpcdHNlbGVjdCBGU19JT01BUFxuZnMvem9uZWZzL0tjb25maWctNi1cdHNlbGVjdCBDUkMzMlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNzgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1NTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERpcmVjdCBJL08gYW5kIGlvbWFwIGZvciBUYXJnZXRlZCBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IHRhcmdldCBgaW9tYXBfZGlvX3NpbXBsZWAgYW5kIGl0cyByZWxhdGVkIGZ1bmN0aW9ucyBmb3IgZnV6emluZy4gU2luY2UgYEZTX0lPTUFQYCBpcyB3aWRlbHkgdXNlZCwgdGhlcmUmIzM5O3Mgbm8gbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSBpdCwgYnV0IGRlZmluaW5nIHNwZWNpZmljIGZpbGVzeXN0ZW1zIGxpa2UgYFhGU19GU2AsIGBFWFQ0X0ZTYCwgb3IgYEJUUkZTX0ZTYCB3aWxsIG1ha2Ugc3VyZSB0aGF0IGlvbWFwIGlzIGJlaW5nIHVzZWQsIGFsdGhvdWdoIHN5emthbGxlciBwcm9iYWJseSBhbHJlYWR5IGhhcyB0aG9zZSBjb3ZlcmVkLiBJIGNoZWNrZWQgZm9yIGFueSBzcGVjaWZpYyBjb25maWdzIHJlbGF0ZWQgdG8gYGlvbWFwX2Rpb19zaW1wbGVgLCBidXQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBqdXN0IHBhcnQgb2YgYGRpcmVjdC1pby5jYC4KCk15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucy4gSGVyZSBhcmUgdGhlIG9uZXMgSSB3YW50IHRvIHplcm8gaW4gb246IGBpb21hcF9kaW9fc2ltcGxlYCwgYGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrYCwgYW5kIGBpb21hcF9kaW9fc2ltcGxlX2VuZF9pb2AuIEkgaW5pdGlhbGx5IHdvbmRlcmVkIGFib3V0IGBpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZGAsIHNpbmNlIGl0JiMzOTtzIGFuIGlubGluZSBmdW5jdGlvbiwgYnV0IEkgd2FudGVkIHRvIG1ha2Ugc3VyZSBpdCB3YXMgYWN0dWFsbHkgaW5saW5lZC4KCkEgcXVpY2sgY2hlY2sgY29uZmlybWVkIHRoYXQgaXQgaXMgaW5kZWVkIGlubGluZTogYHN0YXRpYyBpbmxpbmUgYm9vbCBpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZCguLi4pYC4gVGhlcmVmb3JlLCBJJiMzOTtsbCBleGNsdWRlIGl0IGZyb20gdGhlIHRhcmdldCBsaXN0LgoKSSBoYWQgY29uc2lkZXJlZCBgaW9tYXBfZGlvX3J3YCwgYnV0IHNpbmNlIGl0JiMzOTtzIGEgaGVhdmlseSB1c2VkIGZ1bmN0aW9uLCBJIHdhbnQgdG8gYXZvaWQgaXQgaW4gZmF2b3Igb2YgbmV3bHkgYWRkZWQgZnVuY3Rpb25zLgoKU28sIHRoZSBrZXkgZnVuY3Rpb25zIGZvciBmdXp6aW5nIGFyZTogYGlvbWFwX2Rpb19zaW1wbGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZWAsIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtgLCBhbmQgYGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvYC4KCkZvciBlbmFibGluZyBjb25maWdzLCB3aGlsZSBgRlNfSU9NQVBgIHNob3VsZCB3b3JrLCBJIHNob3VsZCBzcGVjaWZ5IGVpdGhlciBgRlNfSU9NQVBgIG9yIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIG9yIGBCVFJGU19GU2AgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYSBmaWxlc3lzdGVtIHRoYXQgdXNlcyBpb21hcC4gSG93ZXZlciwgYEZTX0lPTUFQYCBzZWVtcyB0byBiZSBhIGhpZGRlbiBjb25maWcsIHNvIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBmcy9LY29uZmlnYCB0byBjb25maXJtIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZTX0lPTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MTI9Y29uZmlnIFZBTElEQVRFX0ZTX1BBUlNFUlxuLS1cbmZzL0tjb25maWctMTctXG5mcy9LY29uZmlnOjE4OmNvbmZpZyBGU19JT01BUFxuZnMvS2NvbmZpZy0xOS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDA5CgkJCQkJCQlvdXRwdXQ6IDE1OQoJCQkJCQkJdGhvdWdodHM6IDM2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKgoKT2theSwgc28gdGhpcyBpcyBhIGhpZGRlbiBjb25maWcsIGdvdCBpdC4gV2UgY291bGQgbGlzdCB0aGUgZmlsZXN5c3RlbSBjb25maWdzIGxpa2UgYFhGU19GU2AsIGBFWFQ0X0ZTYCwgYW5kIGBCVFJGU19GU2AgaW4gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LCBidXQgdGhvc2UgYXJlIGV4dHJlbWVseSBnZW5lcmljLiBCdXQgdGhlIHByb21wdCBzYWlkIG5vdCB0byBpbmNsdWRlIGdlbmVyaWMgY29uZmlncywgb25seSBvbmVzIHRoYXQgZGlyZWN0bHkgcmVsYXRlIHRvIHRoZSBtb2RpZmllZCBjb2RlLiBIbW0sIEkgY291bGQganVzdCBsZWF2ZSBgRW5hYmxlQ29uZmlnc2AgZW1wdHkgb3IgcHV0IGluIHRob3NlIHNwZWNpZmljIGZpbGVzeXN0ZW1zLgoKV2FpdCwgdGhlIHByb21wdCBzYWlkIHRvIGF2b2lkIHRoZSBnZW5lcmljIG9uZXMgc2luY2UgdGhleSBhcmUgYWxyZWFkeSBlbmFibGVkLiBTaW5jZSBgRlNfSU9NQVBgIGdldHMgc2VsZWN0ZWQgZm9yIHRob3NlIGdlbmVyaWMgZmlsZXN5c3RlbXMsIEkgdGhpbmsgSSYjMzk7bGwganVzdCBsZWF2ZSBgRW5hYmxlQ29uZmlnc2AgZW1wdHkgZm9yIG5vdy4KCkxldCBtZSBtYWtlIHN1cmUgbXkgcmVhc29uaW5nIGlzIHNvdW5kOiBUaGlzIHBhdGNoIGFkZHMgYSBmYXN0IHBhdGggZm9yIGRpcmVjdCBJL08gcmVhZHMgd2l0aGluIHRoZSBpb21hcCBzdWJzeXN0ZW0uIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIEkvTyBsb2dpYywgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIGRpcmVjdCBJL08gc3lzdGVtIGNhbGxzIG9uIGZpbGVzeXN0ZW1zIGxpa2UgWEZTLCBleHQ0LCBhbmQgYnRyZnMuIEl0ICpkZWZpbml0ZWx5KiBuZWVkcyBmdXp6aW5nIHRvIHZlcmlmeSB0aGF0IHRoZSBuZXcgZmFzdCBwYXRoIGhhbmRsZXMgdmFyaW91cyBJL08gc2NlbmFyaW9zIHByb3Blcmx5LgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayBxdWlja2x5IGZvciBhbnkgb3RoZXIgZnVuY3Rpb25zLiBBaGEsIGBpb21hcF9kaW9fYmlvX3JlbGVhc2VfcGFnZXNgIGFuZCBgaW9tYXBfZGlvX2FsaWdubWVudGAgYXJlIGJvdGggaW5saW5lLCBhbmQgYGlvbWFwX2Rpb19pbml0YCBpcyBhbiBpbml0Y2FsbCwgc28gaXQgb25seSBydW5zIG9uY2UgYXQgYm9vdC4KClNvLCB0aGUgY3JpdGljYWwgc3ltYm9scyB0byBmb2N1cyBvbiBhcmU6CiogICBgaW9tYXBfZGlvX3NpbXBsZWAKKiAgIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlYAoqICAgYGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29ya2AKKiAgIGBpb21hcF9kaW9fc2ltcGxlX2VuZF9pb2AKCk9rYXksIG5vIG90aGVyIGNvbmZpZ3Mgc2VlbSByZWxldmFudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfZW5kX2lvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmFzdCBwYXRoIGZvciBkaXJlY3QgSS9PIHJlYWRzIChgaW9tYXBfZGlvX3NpbXBsZWApIGluIHRoZSBpb21hcCBzdWJzeXN0ZW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBJL08gbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGRpcmVjdCBJL08gc3lzdGVtIGNhbGxzIG9uIHN1cHBvcnRlZCBmaWxlc3lzdGVtcy4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBmYXN0IHBhdGggaGFuZGxlcyB2YXJpb3VzIEkvTyBjb25kaXRpb25zIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfZW5kX2lvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmFzdCBwYXRoIGZvciBkaXJlY3QgSS9PIHJlYWRzIChgaW9tYXBfZGlvX3NpbXBsZWApIGluIHRoZSBpb21hcCBzdWJzeXN0ZW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBJL08gbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGRpcmVjdCBJL08gc3lzdGVtIGNhbGxzIG9uIHN1cHBvcnRlZCBmaWxlc3lzdGVtcy4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBmYXN0IHBhdGggaGFuZGxlcyB2YXJpb3VzIEkvTyBjb25kaXRpb25zIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEyOjIwOjA1LjAzMDk0NTQxMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODY1NjczOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVcIixcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVcIixcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29ya1wiLFxuICAgIFwiaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZhc3QgcGF0aCBmb3IgZGlyZWN0IEkvTyByZWFkcyAoYGlvbWFwX2Rpb19zaW1wbGVgKSBpbiB0aGUgaW9tYXAgc3Vic3lzdGVtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgSS9PIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBkaXJlY3QgSS9PIHN5c3RlbSBjYWxscyBvbiBzdXBwb3J0ZWQgZmlsZXN5c3RlbXMuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZmFzdCBwYXRoIGhhbmRsZXMgdmFyaW91cyBJL08gY29uZGl0aW9ucyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEyOjIwOjA1LjAzMDk1OTc1MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0MzczMzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTgwYjY4YWQ2MDY4ZjA4Y2M3ZTZmMDE2Y2JhMzc1MmExOTY2NDdhMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyOSAxMjoyMDowMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9pb21hcC9kaXJlY3QtaW8uYyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXFxuaW5kZXggYjQ4NWUzYjE5MWRhZmEuLjRkY2M5ZmM3NjZhOTJlIDEwMDY0NFxcbi0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jXFxuKysrIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcXG5AQCAtMTAsNiArMTAsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9tYXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Rhc2tfaW9fYWNjb3VudGluZ19vcHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzZXJyb3IuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tvYmplY3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N5c2ZzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidHJhY2UuaFxcXCJcXG4gXFxuQEAgLTg4LDkgKzkxLDkgQEAgc3RhdGljIGlubGluZSBlbnVtIGZzZXJyb3JfdHlwZSBpb21hcF9kaW9fZXJyX3R5cGUoY29uc3Qgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbiBcXHRyZXR1cm4gRlNFUlJfRElSRUNUSU9fUkVBRDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IoY29uc3Qgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JlcG9ydF9kaW9fZnNlcnJvcihpbnQgZXJyb3IpXFxuIHtcXG4tXFx0c3dpdGNoIChkaW8tXFx1MDAzZWVycm9yKSB7XFxuK1xcdHN3aXRjaCAoZXJyb3IpIHtcXG4gXFx0Y2FzZSAwOlxcbiBcXHRjYXNlIC1FQUdBSU46XFxuIFxcdGNhc2UgLUVOT1RCTEs6XFxuQEAgLTExMCw3ICsxMTMsNyBAQCBzc2l6ZV90IGlvbWFwX2Rpb19jb21wbGV0ZShzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuIFxcbiBcXHRpZiAoZG9wcyBcXHUwMDI2XFx1MDAyNiBkb3BzLVxcdTAwM2VlbmRfaW8pXFxuIFxcdFxcdHJldCA9IGRvcHMtXFx1MDAzZWVuZF9pbyhpb2NiLCBkaW8tXFx1MDAzZXNpemUsIHJldCwgZGlvLVxcdTAwM2VmbGFncyk7XFxuLVxcdGlmIChzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGRpbykpXFxuK1xcdGlmIChzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGRpby1cXHUwMDNlZXJyb3IpKVxcbiBcXHRcXHRmc2Vycm9yX3JlcG9ydF9pbyhmaWxlX2lub2RlKGlvY2ItXFx1MDAzZWtpX2ZpbHApLFxcbiBcXHRcXHRcXHRcXHQgIGlvbWFwX2Rpb19lcnJfdHlwZShkaW8pLCBvZmZzZXQsIGRpby1cXHUwMDNlc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICBkaW8tXFx1MDAzZWVycm9yLCBHRlBfTk9GUyk7XFxuQEAgLTIzNywyMyArMjQwLDI5IEBAIHN0YXRpYyB2b2lkIGlvbWFwX2Rpb19kb25lKHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4gXFx0aW9tYXBfZGlvX2NvbXBsZXRlX3dvcmsoXFx1MDAyNmRpby1cXHUwMDNlYWlvLndvcmspO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBfX2lvbWFwX2Rpb19iaW9fZW5kX2lvKHN0cnVjdCBiaW8gKmJpbywgYm9vbCBpbmxpbmVfY29tcGxldGlvbilcXG4rc3RhdGljIGlubGluZSB2b2lkIGlvbWFwX2Rpb19iaW9fcmVsZWFzZV9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sXFxuK1xcdFxcdHVuc2lnbmVkIGludCBkaW9fZmxhZ3MsIGJvb2wgZXJyb3IpXFxuIHtcXG4tXFx0c3RydWN0IGlvbWFwX2RpbyAqZGlvID0gYmlvLVxcdTAwM2ViaV9wcml2YXRlO1xcbi1cXG4gXFx0aWYgKGJpb19pbnRlZ3JpdHkoYmlvKSlcXG4gXFx0XFx0ZnNfYmlvX2ludGVncml0eV9mcmVlKGJpbyk7XFxuIFxcbi1cXHRpZiAoZGlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPTUFQX0RJT19CT1VOQ0UpIHtcXG4tXFx0XFx0YmlvX2lvdl9pdGVyX3VuYm91bmNlKGJpbywgISFkaW8tXFx1MDAzZWVycm9yLFxcbi1cXHRcXHRcXHRcXHRkaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9NQVBfRElPX1VTRVJfQkFDS0VEKTtcXG4rXFx0aWYgKGRpb19mbGFncyBcXHUwMDI2IElPTUFQX0RJT19CT1VOQ0UpIHtcXG4rXFx0XFx0YmlvX2lvdl9pdGVyX3VuYm91bmNlKGJpbywgZXJyb3IsXFxuK1xcdFxcdFxcdFxcdGRpb19mbGFncyBcXHUwMDI2IElPTUFQX0RJT19VU0VSX0JBQ0tFRCk7XFxuIFxcdFxcdGJpb19wdXQoYmlvKTtcXG4tXFx0fSBlbHNlIGlmIChkaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9NQVBfRElPX1VTRVJfQkFDS0VEKSB7XFxuK1xcdH0gZWxzZSBpZiAoZGlvX2ZsYWdzIFxcdTAwMjYgSU9NQVBfRElPX1VTRVJfQkFDS0VEKSB7XFxuIFxcdFxcdGJpb19jaGVja19wYWdlc19kaXJ0eShiaW8pO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRiaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTtcXG4gXFx0XFx0YmlvX3B1dChiaW8pO1xcbiBcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIF9faW9tYXBfZGlvX2Jpb19lbmRfaW8oc3RydWN0IGJpbyAqYmlvLCBib29sIGlubGluZV9jb21wbGV0aW9uKVxcbit7XFxuK1xcdHN0cnVjdCBpb21hcF9kaW8gKmRpbyA9IGJpby1cXHUwMDNlYmlfcHJpdmF0ZTtcXG4rXFxuK1xcdGlvbWFwX2Rpb19iaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGRpby1cXHUwMDNlZmxhZ3MsICEhZGlvLVxcdTAwM2VlcnJvcik7XFxuIFxcbiBcXHQvKiBEbyBub3QgdG91Y2ggYmlvIGJlbG93LCB3ZSBqdXN0IGdhdmUgdXAgb3VyIHJlZmVyZW5jZS4gKi9cXG4gXFxuQEAgLTM5OCw2ICs0MDcsMTQgQEAgc3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX2Jpb19pdGVyX29uZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9tYXBfZGlvX2FsaWdubWVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBpbnQgZGlvX2ZsYWdzKVxcbit7XFxuK1xcdGlmIChkaW9fZmxhZ3MgXFx1MDAyNiBJT01BUF9ESU9fRlNCTE9DS19BTElHTkVEKVxcbitcXHRcXHRyZXR1cm4gaV9ibG9ja3NpemUoaW5vZGUpO1xcbitcXHRyZXR1cm4gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoYmRldik7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGlvbWFwICppb21hcCA9IFxcdTAwMjZpdGVyLVxcdTAwM2Vpb21hcDtcXG5AQCAtNDE2LDEwICs0MzMsNyBAQCBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbiBcXHQgKiBGaWxlIHN5c3RlbXMgdGhhdCB3cml0ZSBvdXQgb2YgcGxhY2UgYW5kIGFsd2F5cyBhbGxvY2F0ZSBuZXcgYmxvY2tzXFxuIFxcdCAqIG5lZWQgZWFjaCBiaW8gdG8gYmUgYmxvY2sgYWxpZ25lZCBhcyB0aGF0J3MgdGhlIHVuaXQgb2YgYWxsb2NhdGlvbi5cXG4gXFx0ICovXFxuLVxcdGlmIChkaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRClcXG4tXFx0XFx0YWxpZ25tZW50ID0gZnNfYmxvY2tfc2l6ZTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRhbGlnbm1lbnQgPSBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShpb21hcC1cXHUwMDNlYmRldik7XFxuK1xcdGFsaWdubWVudCA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaW5vZGUsIGlvbWFwLVxcdTAwM2ViZGV2LCBkaW8tXFx1MDAzZWZsYWdzKTtcXG4gXFxuIFxcdGlmICgocG9zIHwgbGVuZ3RoKSBcXHUwMDI2IChhbGlnbm1lbnQgLSAxKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTg4OCwxMiArOTAyLDI1MyBAQCBfX2lvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19ydyk7XFxuIFxcbitzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSB7XFxuK1xcdHN0cnVjdCBraW9jYlxcdFxcdCppb2NiO1xcbitcXHRzaXplX3RcXHRcXHRcXHRzaXplO1xcbitcXHR1bnNpZ25lZCBpbnRcXHRcXHRkaW9fZmxhZ3M7XFxuK1xcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdHdvcms7XFxuK1xcdC8qXFxuK1xcdCAqIEFsaWduIEBiaW8gdG8gYSBjYWNoZWxpbmUgYm91bmRhcnkgc28gdGhhdCwgY29tYmluZWQgd2l0aCB0aGVcXG4rXFx0ICogZnJvbnRfcGFkIHBhc3NlZCB0byBiaW9zZXRfaW5pdCgpLCB0aGUgYmlvIHNpdHMgYXQgdGhlIHN0YXJ0IG9mXFxuK1xcdCAqIGEgY2FjaGVsaW5lIGluIG1lbW9yeSByZXR1cm5lZCBieSB0aGUgKEhXQ0FDSEUtYWxpZ25lZCkgYmlvXFxuK1xcdCAqIHNsYWIuICBUaGlzIGtlZXBzIHRoZSBob3QgZmllbGRzIGJsb2NrIGxheWVyIHRvdWNoZXMgb24gc3VibWl0XFxuK1xcdCAqIGFuZCBjb21wbGV0aW9uIChiaV9pdGVyLCBiaV9zdGF0dXMsIC4uLikgd2l0aGluIGEgc2luZ2xlIGxpbmUuXFxuK1xcdCAqL1xcbitcXHRzdHJ1Y3QgYmlvXFx0YmlvIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxuK307XFxuK1xcbitzdGF0aWMgc3RydWN0IGJpb19zZXQgaW9tYXBfZGlvX3NpbXBsZV9wb29sO1xcbitcXG4rc3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IpXFxuK3tcXG4rXFx0c3RydWN0IGJpbyAqYmlvID0gXFx1MDAyNnNyLVxcdTAwM2ViaW87XFxuK1xcdHN0cnVjdCBraW9jYiAqaW9jYiA9IHNyLVxcdTAwM2Vpb2NiO1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVxcdTAwM2VraV9maWxwKTtcXG4rXFx0aW50IGVycm9yID0gYmxrX3N0YXR1c190b19lcnJubyhiaW8tXFx1MDAzZWJpX3N0YXR1cyk7XFxuK1xcdHNzaXplX3QgcmV0ID0gZXJyb3I7XFxuK1xcbitcXHRpZiAobGlrZWx5KCFyZXQpKSB7XFxuK1xcdFxcdHJldCA9IHNyLVxcdTAwM2VzaXplO1xcbitcXHRcXHRpb2NiLVxcdTAwM2VraV9wb3MgKz0gcmV0O1xcbitcXHR9IGVsc2UgaWYgKHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IocmV0KSkge1xcbitcXHRcXHRmc2Vycm9yX3JlcG9ydF9pbyhpbm9kZSwgRlNFUlJfRElSRUNUSU9fUkVBRCwgaW9jYi1cXHUwMDNla2lfcG9zLFxcbitcXHRcXHRcXHRcXHQgIHNyLVxcdTAwM2VzaXplLCByZXQsIEdGUF9OT0ZTKTtcXG4rXFx0fVxcbitcXG4rXFx0aW9tYXBfZGlvX2Jpb19yZWxlYXNlX3BhZ2VzKGJpbywgc3ItXFx1MDAzZWRpb19mbGFncywgcmV0IFxcdTAwM2MgMCk7XFxuK1xcdGlub2RlX2Rpb19lbmQoaW5vZGUpO1xcbitcXHR0cmFjZV9pb21hcF9kaW9fY29tcGxldGUoaW9jYiwgZXJyb3IsIHJldCk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyID1cXG4rXFx0XFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCB3b3JrKTtcXG4rXFxuK1xcdFdSSVRFX09OQ0Uoc3ItXFx1MDAzZWlvY2ItXFx1MDAzZXByaXZhdGUsIE5VTEwpO1xcbitcXHRzci1cXHUwMDNlaW9jYi1cXHUwMDNla2lfY29tcGxldGUoc3ItXFx1MDAzZWlvY2IsIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW8oc3RydWN0IGJpbyAqYmlvKVxcbit7XFxuK1xcdHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzciA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihiaW8sIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KHNyLVxcdTAwM2ViaW8uYmlfc3RhdHVzKSkge1xcbitcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShzci1cXHUwMDNlaW9jYi1cXHUwMDNla2lfZmlscCk7XFxuK1xcbitcXHRcXHRJTklUX1dPUksoXFx1MDAyNnNyLVxcdTAwM2V3b3JrLCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmspO1xcbitcXHRcXHRxdWV1ZV93b3JrKGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Rpb19kb25lX3dxLCBcXHUwMDI2c3ItXFx1MDAzZXdvcmspO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHNyLVxcdTAwM2Vpb2NiLVxcdTAwM2VraV9jb21wbGV0ZShzci1cXHUwMDNlaW9jYiwgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcikpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoc3RydWN0IGtpb2NiICppb2NiLFxcbitcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHVuc2lnbmVkIGludCBkaW9fZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cXHUwMDNla2lfZmlscCk7XFxuK1xcdHNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpO1xcbitcXG4rXFx0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpICE9IFJFQUQpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKCFjb3VudClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHQvKlxcbitcXHQgKiBTaW1wbGUgZGlvIGlzIGFuIG9wdGltaXphdGlvbiBmb3Igc21hbGwgSU8uIEZpbHRlciBvdXQgbGFyZ2UgSU9cXG4rXFx0ICogZWFybHkgYXMgaXQncyB0aGUgbW9zdCBjb21tb24gY2FzZSB0byBmYWlsIGZvciB0eXBpY2FsIGRpcmVjdCBJT1xcbitcXHQgKiB3b3JrbG9hZHMuXFxuK1xcdCAqL1xcbitcXHRpZiAoY291bnQgXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKGRpb19mbGFncyBcXHUwMDI2IChJT01BUF9ESU9fRk9SQ0VfV0FJVCB8IElPTUFQX0RJT19QQVJUSUFMIHxcXG4rXFx0XFx0XFx0IElPTUFQX0RJT19CT1VOQ0UpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmIChpb2NiLVxcdTAwM2VraV9wb3MgKyBjb3VudCBcXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoSVNfRU5DUllQVEVEKGlub2RlKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK3N0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLFxcbitcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyxcXG4rXFx0XFx0dm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGRpb19mbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVxcdTAwM2VraV9maWxwKTtcXG4rXFx0c2l6ZV90IGNvdW50ID0gaW92X2l0ZXJfY291bnQoaXRlcik7XFxuK1xcdHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzcjtcXG4rXFx0dW5zaWduZWQgaW50IGFsaWdubWVudDtcXG4rXFx0c3RydWN0IGlvbWFwX2l0ZXIgaW9taSA9IHtcXG4rXFx0XFx0Lmlub2RlXFx0XFx0PSBpbm9kZSxcXG4rXFx0XFx0LnBvc1xcdFxcdD0gaW9jYi1cXHUwMDNla2lfcG9zLFxcbitcXHRcXHQubGVuXFx0XFx0PSBjb3VudCxcXG4rXFx0XFx0LmZsYWdzXFx0XFx0PSBJT01BUF9ESVJFQ1QsXFxuK1xcdFxcdC5wcml2YXRlXFx0PSBwcml2YXRlLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgYmlvICpiaW87XFxuK1xcdGJvb2wgd2FpdF9mb3JfY29tcGxldGlvbiA9IGlzX3N5bmNfa2lvY2IoaW9jYik7XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXG4rXFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9OT1dBSVQpXFxuK1xcdFxcdGlvbWkuZmxhZ3MgfD0gSU9NQVBfTk9XQUlUO1xcbitcXG4rXFx0cmV0ID0ga2lvY2Jfd3JpdGVfYW5kX3dhaXQoaW9jYiwgY291bnQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aW5vZGVfZGlvX2JlZ2luKGlub2RlKTtcXG4rXFxuK1xcdHJldCA9IG9wcy1cXHUwMDNlaW9tYXBfYmVnaW4oaW5vZGUsIGlvbWkucG9zLCBjb3VudCwgaW9taS5mbGFncyxcXG4rXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZpb21pLmlvbWFwLCBcXHUwMDI2aW9taS5zcmNtYXApO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGlub2RlX2Rpb19lbmQoaW5vZGUpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaW9taS5pb21hcC50eXBlICE9IElPTUFQX01BUFBFRCB8fFxcbitcXHQgICAgaW9taS5pb21hcC5vZmZzZXQgKyBpb21pLmlvbWFwLmxlbmd0aCBcXHUwMDNjIGlvbWkucG9zICsgY291bnQgfHxcXG4rXFx0ICAgIChpb21pLmlvbWFwLmZsYWdzIFxcdTAwMjYgSU9NQVBfRl9JTlRFR1JJVFkpKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9UQkxLO1xcbitcXHRcXHRnb3RvIG91dF9pb21hcF9lbmQ7XFxuK1xcdH1cXG4rXFxuK1xcdGFsaWdubWVudCA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaW5vZGUsIGlvbWkuaW9tYXAuYmRldiwgZGlvX2ZsYWdzKTtcXG4rXFx0aWYgKChpb21pLnBvcyB8IGNvdW50KSBcXHUwMDI2IChhbGlnbm1lbnQgLSAxKSkge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dF9pb21hcF9lbmQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbiBcXHUwMDI2XFx1MDAyNiB1bmxpa2VseSghaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfZGlvX2RvbmVfd3EpKSB7XFxuK1xcdFxcdHJldCA9IHNiX2luaXRfZGlvX2RvbmVfd3EoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBvdXRfaW9tYXBfZW5kO1xcbitcXHR9XFxuK1xcbitcXHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgZGlvX2ZsYWdzLCAwKTtcXG4rXFxuK1xcdGlmICh1c2VyX2JhY2tlZF9pdGVyKGl0ZXIpKVxcbitcXHRcXHRkaW9fZmxhZ3MgfD0gSU9NQVBfRElPX1VTRVJfQkFDS0VEO1xcbitcXG4rXFx0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChpb21pLmlvbWFwLmJkZXYsXFxuK1xcdFxcdFxcdGJpb19pb3ZfdmVjc190b19hbGxvYyhpdGVyLCBCSU9fTUFYX1ZFQ1MpLFxcbitcXHRcXHRcXHRSRVFfT1BfUkVBRCxcXG4rXFx0XFx0XFx0R0ZQX0tFUk5FTCwgXFx1MDAyNmlvbWFwX2Rpb19zaW1wbGVfcG9vbCk7XFxuK1xcdHNyID0gY29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7XFxuK1xcdHNyLVxcdTAwM2Vpb2NiID0gaW9jYjtcXG4rXFx0c3ItXFx1MDAzZWRpb19mbGFncyA9IGRpb19mbGFncztcXG4rXFxuK1xcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBpb21hcF9zZWN0b3IoXFx1MDAyNmlvbWkuaW9tYXAsIGlvbWkucG9zKTtcXG4rXFx0YmlvLVxcdTAwM2ViaV9pb3ByaW8gPSBpb2NiLVxcdTAwM2VraV9pb3ByaW87XFxuK1xcbitcXHRyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYWxpZ25tZW50IC0gMSk7XFxuK1xcdGlmICh1bmxpa2VseShyZXQpKVxcbitcXHRcXHRnb3RvIG91dF9iaW9fcHV0O1xcbitcXG4rXFx0aWYgKGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplICE9IGNvdW50KSB7XFxuK1xcdFxcdGlvdl9pdGVyX3JldmVydChpdGVyLCBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XFxuK1xcdFxcdHJldCA9IC1FTk9UQkxLO1xcbitcXHRcXHRnb3RvIG91dF9iaW9fcmVsZWFzZV9wYWdlcztcXG4rXFx0fVxcbitcXG4rXFx0c3ItXFx1MDAzZXNpemUgPSBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZTtcXG4rXFxuK1xcdGlmIChkaW9fZmxhZ3MgXFx1MDAyNiBJT01BUF9ESU9fVVNFUl9CQUNLRUQpXFxuK1xcdFxcdGJpb19zZXRfcGFnZXNfZGlydHkoYmlvKTtcXG4rXFxuK1xcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfTk9XQUlUKVxcbitcXHRcXHRiaW8tXFx1MDAzZWJpX29wZiB8PSBSRVFfTk9XQUlUO1xcbitcXHRpZiAoKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9ISVBSSSkgXFx1MDAyNlxcdTAwMjYgIXdhaXRfZm9yX2NvbXBsZXRpb24pIHtcXG4rXFx0XFx0YmlvLVxcdTAwM2ViaV9vcGYgfD0gUkVRX1BPTExFRDtcXG4rXFx0XFx0V1JJVEVfT05DRShpb2NiLVxcdTAwM2Vwcml2YXRlLCBiaW8pO1xcbitcXHR9XFxuK1xcbitcXHRpZiAob3BzLVxcdTAwM2Vpb21hcF9lbmQpXFxuK1xcdFxcdG9wcy1cXHUwMDNlaW9tYXBfZW5kKGlub2RlLCBpb21pLnBvcywgY291bnQsIGNvdW50LCBpb21pLmZsYWdzLFxcbitcXHRcXHRcXHQgICAgICAgXFx1MDAyNmlvbWkuaW9tYXApO1xcbitcXG4rXFx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uKSB7XFxuK1xcdFxcdGJpby1cXHUwMDNlYmlfZW5kX2lvID0gaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW87XFxuK1xcdFxcdHN1Ym1pdF9iaW8oYmlvKTtcXG4rXFx0XFx0dHJhY2VfaW9tYXBfZGlvX3J3X3F1ZXVlZChpbm9kZSwgaW9taS5wb3MsIGNvdW50KTtcXG4rXFx0XFx0cmV0dXJuIC1FSU9DQlFVRVVFRDtcXG4rXFx0fVxcbitcXG4rXFx0c3VibWl0X2Jpb193YWl0KGJpbyk7XFxuK1xcdHJldHVybiBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHNyKTtcXG4rXFxuK291dF9iaW9fcmVsZWFzZV9wYWdlczpcXG4rXFx0YmlvX3JlbGVhc2VfcGFnZXMoYmlvLCBmYWxzZSk7XFxuK291dF9iaW9fcHV0OlxcbitcXHRiaW9fcHV0KGJpbyk7XFxuK291dF9pb21hcF9lbmQ6XFxuK1xcdGlmIChvcHMtXFx1MDAzZWlvbWFwX2VuZClcXG4rXFx0XFx0b3BzLVxcdTAwM2Vpb21hcF9lbmQoaW5vZGUsIGlvbWkucG9zLCBjb3VudCwgMCwgaW9taS5mbGFncyxcXG4rXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZpb21pLmlvbWFwKTtcXG4rXFx0aW5vZGVfZGlvX2VuZChpbm9kZSk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIHNzaXplX3RcXG4gaW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxcbiBcXHRcXHR1bnNpZ25lZCBpbnQgZGlvX2ZsYWdzLCB2b2lkICpwcml2YXRlLCBzaXplX3QgZG9uZV9iZWZvcmUpXFxuIHtcXG4gXFx0c3RydWN0IGlvbWFwX2RpbyAqZGlvO1xcbitcXHRzc2l6ZV90IHJldDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEZhc3QgcGF0aCBmb3Igc21hbGwsIGJsb2NrLWFsaWduZWQgZGlyZWN0IEkvT3MgdGhhdCBtYXAgdG8gYVxcbitcXHQgKiBzaW5nbGUgY29udGlndW91cyBvbi1kaXNrIGV4dGVudC5cXG4rXFx0ICpcXG4rXFx0ICogQGRvcHMgbXVzdCBiZSBOVUxMOiBhIG5vbi1OVUxMIEBkb3BzIG1lYW5zIHRoZSBjYWxsZXIgd2FudHMgaXRzXFxuK1xcdCAqIC1cXHUwMDNlZW5kX2lvIC8gLVxcdTAwM2VzdWJtaXRfaW8gaG9va3MgaW52b2tlZCwgYW5kIGluIHBhcnRpY3VsYXIgd2FudHMgaXRzXFxuK1xcdCAqIGJpb3MgdG8gYmUgYWxsb2NhdGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0tcHJpdmF0ZSBAZG9wcy1cXHUwMDNlYmlvX3NldFxcbitcXHQgKiAod2hvc2UgZnJvbnRfcGFkIHNpemVzIGEgZmlsZXN5c3RlbS1wcml2YXRlIHdyYXBwZXIgYXJvdW5kIHRoZVxcbitcXHQgKiBiaW8pLiAgVGhlIGZhc3QgcGF0aCBpbnN0ZWFkIGFsbG9jYXRlcyBmcm9tIHRoZSBzaGFyZWRcXG4rXFx0ICogaW9tYXBfZGlvX3NpbXBsZV9wb29sLCB3aG9zZSBmcm9udF9wYWQgbWF0Y2hlc1xcbitcXHQgKiBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZTsgdGhlIHR3byB3cmFwcGVycyBhcmUgbm90XFxuK1xcdCAqIGludGVyY2hhbmdlYWJsZSwgc28gd2UgbXVzdCBmYWxsIGJhY2sgdG8gX19pb21hcF9kaW9fcncoKSBpblxcbitcXHQgKiB0aGF0IGNhc2UuXFxuK1xcdCAqXFxuK1xcdCAqIEBkb25lX2JlZm9yZSBtdXN0IGJlIHplcm86IGEgbm9uLXplcm8gY2FsbGVyLWFjY3VtdWxhdGVkIHJlc2lkdWFsXFxuK1xcdCAqIGNhbm5vdCBiZSBjYXJyaWVkIHRocm91Z2ggYSBzaW5nbGUtYmlvIGlubGluZSBjb21wbGV0aW9uLlxcbitcXHQgKlxcbitcXHQgKiAtRU5PVEJMSyBpcyB0aGUgcHJpdmF0ZSBzZW50aW5lbCByZXR1cm5lZCBieSBpb21hcF9kaW9fc2ltcGxlKClcXG4rXFx0ICogd2hlbiBpdCBkZWNpZGVzIHRoZSByZXF1ZXN0IGRvZXMgbm90IGZpdCB0aGUgZmFzdCBwYXRoLlxcbitcXHQgKiBJbiB0aGF0IGNhc2Ugd2UgcHJvY2VlZCB0byB0aGUgZ2VuZXJpYyBfX2lvbWFwX2Rpb19ydygpIHNsb3dcXG4rXFx0ICogcGF0aC4gIEFueSBvdGhlciBlcnJubyBpcyBhIHJlYWwgcmVzdWx0IGFuZCBpcyBwcm9wYWdhdGVkIGFzLWlzLFxcbitcXHQgKiBpbiBwYXJ0aWN1bGFyIC1FQUdBSU4gZm9yIElPQ0JfTk9XQUlUIG11c3QgcmVhY2ggdGhlIGNhbGxlci5cXG4rXFx0ICovXFxuK1xcdGlmICghZG9wcyBcXHUwMDI2XFx1MDAyNiAhZG9uZV9iZWZvcmUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKGlvY2IsIGl0ZXIsIGRpb19mbGFncykpIHtcXG4rXFx0XFx0cmV0ID0gaW9tYXBfZGlvX3NpbXBsZShpb2NiLCBpdGVyLCBvcHMsIHByaXZhdGUsIGRpb19mbGFncyk7XFxuK1xcdFxcdGlmIChyZXQgIT0gLUVOT1RCTEspXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4gXFxuIFxcdGRpbyA9IF9faW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIG9wcywgZG9wcywgZGlvX2ZsYWdzLCBwcml2YXRlLFxcbiBcXHRcXHRcXHQgICAgIGRvbmVfYmVmb3JlKTtcXG5AQCAtOTAyLDMgKzExNTcsMTEgQEAgaW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRyZXR1cm4gaW9tYXBfZGlvX2NvbXBsZXRlKGRpbyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX3J3KTtcXG4rXFxuK3N0YXRpYyBpbnQgX19pbml0IGlvbWFwX2Rpb19pbml0KHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGJpb3NldF9pbml0KFxcdTAwMjZpb21hcF9kaW9fc2ltcGxlX3Bvb2wsIDQsXFxuK1xcdFxcdFxcdCAgIG9mZnNldG9mKHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pLFxcbitcXHRcXHRcXHQgICBCSU9TRVRfTkVFRF9CVkVDUyB8IEJJT1NFVF9QRVJDUFVfQ0FDSEUpO1xcbit9XFxuK2ZzX2luaXRjYWxsKGlvbWFwX2Rpb19pbml0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTI6MjA6MDUuNTY2MTA1ODY5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDMzMDUwMDQzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlXCIsXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlXCIsXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtcIixcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmYXN0IHBhdGggZm9yIGRpcmVjdCBJL08gcmVhZHMgKGBpb21hcF9kaW9fc2ltcGxlYCkgaW4gdGhlIGlvbWFwIHN1YnN5c3RlbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIEkvTyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZGlyZWN0IEkvTyBzeXN0ZW0gY2FsbHMgb24gc3VwcG9ydGVkIGZpbGVzeXN0ZW1zLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGZhc3QgcGF0aCBoYW5kbGVzIHZhcmlvdXMgSS9PIGNvbmRpdGlvbnMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE4MGI2OGFkNjA2OGYwOGNjN2U2ZjAxNmNiYTM3NTJhMTk2NjQ3YTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAxMjoyMDowMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbmluZGV4IGI0ODVlM2IxOTFkYWZhLi40ZGNjOWZjNzY2YTkyZSAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG4rKysgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuQEAgLTEwLDYgKzEwLDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGFza19pb19hY2NvdW50aW5nX29wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnNlcnJvci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva29iamVjdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzZnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJ0cmFjZS5oXCJcbiBcbkBAIC04OCw5ICs5MSw5IEBAIHN0YXRpYyBpbmxpbmUgZW51bSBmc2Vycm9yX3R5cGUgaW9tYXBfZGlvX2Vycl90eXBlKGNvbnN0IHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiBcdHJldHVybiBGU0VSUl9ESVJFQ1RJT19SRUFEO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JlcG9ydF9kaW9fZnNlcnJvcihjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4rc3RhdGljIGlubGluZSBib29sIHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IoaW50IGVycm9yKVxuIHtcbi1cdHN3aXRjaCAoZGlvLVx1MDAzZWVycm9yKSB7XG4rXHRzd2l0Y2ggKGVycm9yKSB7XG4gXHRjYXNlIDA6XG4gXHRjYXNlIC1FQUdBSU46XG4gXHRjYXNlIC1FTk9UQkxLOlxuQEAgLTExMCw3ICsxMTMsNyBAQCBzc2l6ZV90IGlvbWFwX2Rpb19jb21wbGV0ZShzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4gXG4gXHRpZiAoZG9wcyBcdTAwMjZcdTAwMjYgZG9wcy1cdTAwM2VlbmRfaW8pXG4gXHRcdHJldCA9IGRvcHMtXHUwMDNlZW5kX2lvKGlvY2IsIGRpby1cdTAwM2VzaXplLCByZXQsIGRpby1cdTAwM2VmbGFncyk7XG4tXHRpZiAoc2hvdWxkX3JlcG9ydF9kaW9fZnNlcnJvcihkaW8pKVxuK1x0aWYgKHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IoZGlvLVx1MDAzZWVycm9yKSlcbiBcdFx0ZnNlcnJvcl9yZXBvcnRfaW8oZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApLFxuIFx0XHRcdFx0ICBpb21hcF9kaW9fZXJyX3R5cGUoZGlvKSwgb2Zmc2V0LCBkaW8tXHUwMDNlc2l6ZSxcbiBcdFx0XHRcdCAgZGlvLVx1MDAzZWVycm9yLCBHRlBfTk9GUyk7XG5AQCAtMjM3LDIzICsyNDAsMjkgQEAgc3RhdGljIHZvaWQgaW9tYXBfZGlvX2RvbmUoc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuIFx0aW9tYXBfZGlvX2NvbXBsZXRlX3dvcmsoXHUwMDI2ZGlvLVx1MDAzZWFpby53b3JrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX19pb21hcF9kaW9fYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8sIGJvb2wgaW5saW5lX2NvbXBsZXRpb24pXG4rc3RhdGljIGlubGluZSB2b2lkIGlvbWFwX2Rpb19iaW9fcmVsZWFzZV9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sXG4rXHRcdHVuc2lnbmVkIGludCBkaW9fZmxhZ3MsIGJvb2wgZXJyb3IpXG4ge1xuLVx0c3RydWN0IGlvbWFwX2RpbyAqZGlvID0gYmlvLVx1MDAzZWJpX3ByaXZhdGU7XG4tXG4gXHRpZiAoYmlvX2ludGVncml0eShiaW8pKVxuIFx0XHRmc19iaW9faW50ZWdyaXR5X2ZyZWUoYmlvKTtcbiBcbi1cdGlmIChkaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19CT1VOQ0UpIHtcbi1cdFx0YmlvX2lvdl9pdGVyX3VuYm91bmNlKGJpbywgISFkaW8tXHUwMDNlZXJyb3IsXG4tXHRcdFx0XHRkaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19VU0VSX0JBQ0tFRCk7XG4rXHRpZiAoZGlvX2ZsYWdzIFx1MDAyNiBJT01BUF9ESU9fQk9VTkNFKSB7XG4rXHRcdGJpb19pb3ZfaXRlcl91bmJvdW5jZShiaW8sIGVycm9yLFxuK1x0XHRcdFx0ZGlvX2ZsYWdzIFx1MDAyNiBJT01BUF9ESU9fVVNFUl9CQUNLRUQpO1xuIFx0XHRiaW9fcHV0KGJpbyk7XG4tXHR9IGVsc2UgaWYgKGRpby1cdTAwM2VmbGFncyBcdTAwMjYgSU9NQVBfRElPX1VTRVJfQkFDS0VEKSB7XG4rXHR9IGVsc2UgaWYgKGRpb19mbGFncyBcdTAwMjYgSU9NQVBfRElPX1VTRVJfQkFDS0VEKSB7XG4gXHRcdGJpb19jaGVja19wYWdlc19kaXJ0eShiaW8pO1xuIFx0fSBlbHNlIHtcbiBcdFx0YmlvX3JlbGVhc2VfcGFnZXMoYmlvLCBmYWxzZSk7XG4gXHRcdGJpb19wdXQoYmlvKTtcbiBcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgX19pb21hcF9kaW9fYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8sIGJvb2wgaW5saW5lX2NvbXBsZXRpb24pXG4re1xuK1x0c3RydWN0IGlvbWFwX2RpbyAqZGlvID0gYmlvLVx1MDAzZWJpX3ByaXZhdGU7XG4rXG4rXHRpb21hcF9kaW9fYmlvX3JlbGVhc2VfcGFnZXMoYmlvLCBkaW8tXHUwMDNlZmxhZ3MsICEhZGlvLVx1MDAzZWVycm9yKTtcbiBcbiBcdC8qIERvIG5vdCB0b3VjaCBiaW8gYmVsb3csIHdlIGp1c3QgZ2F2ZSB1cCBvdXIgcmVmZXJlbmNlLiAqL1xuIFxuQEAgLTM5OCw2ICs0MDcsMTQgQEAgc3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX2Jpb19pdGVyX29uZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvbWFwX2Rpb19hbGlnbm1lbnQoc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IGRpb19mbGFncylcbit7XG4rXHRpZiAoZGlvX2ZsYWdzIFx1MDAyNiBJT01BUF9ESU9fRlNCTE9DS19BTElHTkVEKVxuK1x0XHRyZXR1cm4gaV9ibG9ja3NpemUoaW5vZGUpO1xuK1x0cmV0dXJuIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpO1xuK31cbitcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBpb21hcCAqaW9tYXAgPSBcdTAwMjZpdGVyLVx1MDAzZWlvbWFwO1xuQEAgLTQxNiwxMCArNDMzLDcgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiBcdCAqIEZpbGUgc3lzdGVtcyB0aGF0IHdyaXRlIG91dCBvZiBwbGFjZSBhbmQgYWx3YXlzIGFsbG9jYXRlIG5ldyBibG9ja3NcbiBcdCAqIG5lZWQgZWFjaCBiaW8gdG8gYmUgYmxvY2sgYWxpZ25lZCBhcyB0aGF0J3MgdGhlIHVuaXQgb2YgYWxsb2NhdGlvbi5cbiBcdCAqL1xuLVx0aWYgKGRpby1cdTAwM2VmbGFncyBcdTAwMjYgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRClcbi1cdFx0YWxpZ25tZW50ID0gZnNfYmxvY2tfc2l6ZTtcbi1cdGVsc2Vcbi1cdFx0YWxpZ25tZW50ID0gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoaW9tYXAtXHUwMDNlYmRldik7XG4rXHRhbGlnbm1lbnQgPSBpb21hcF9kaW9fYWxpZ25tZW50KGlub2RlLCBpb21hcC1cdTAwM2ViZGV2LCBkaW8tXHUwMDNlZmxhZ3MpO1xuIFxuIFx0aWYgKChwb3MgfCBsZW5ndGgpIFx1MDAyNiAoYWxpZ25tZW50IC0gMSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTg4OCwxMiArOTAyLDI1MyBAQCBfX2lvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcncpO1xuIFxuK3N0cnVjdCBpb21hcF9kaW9fc2ltcGxlIHtcbitcdHN0cnVjdCBraW9jYlx0XHQqaW9jYjtcbitcdHNpemVfdFx0XHRcdHNpemU7XG4rXHR1bnNpZ25lZCBpbnRcdFx0ZGlvX2ZsYWdzO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0XHR3b3JrO1xuK1x0LypcbitcdCAqIEFsaWduIEBiaW8gdG8gYSBjYWNoZWxpbmUgYm91bmRhcnkgc28gdGhhdCwgY29tYmluZWQgd2l0aCB0aGVcbitcdCAqIGZyb250X3BhZCBwYXNzZWQgdG8gYmlvc2V0X2luaXQoKSwgdGhlIGJpbyBzaXRzIGF0IHRoZSBzdGFydCBvZlxuK1x0ICogYSBjYWNoZWxpbmUgaW4gbWVtb3J5IHJldHVybmVkIGJ5IHRoZSAoSFdDQUNIRS1hbGlnbmVkKSBiaW9cbitcdCAqIHNsYWIuICBUaGlzIGtlZXBzIHRoZSBob3QgZmllbGRzIGJsb2NrIGxheWVyIHRvdWNoZXMgb24gc3VibWl0XG4rXHQgKiBhbmQgY29tcGxldGlvbiAoYmlfaXRlciwgYmlfc3RhdHVzLCAuLi4pIHdpdGhpbiBhIHNpbmdsZSBsaW5lLlxuK1x0ICovXG4rXHRzdHJ1Y3QgYmlvXHRiaW8gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgYmlvX3NldCBpb21hcF9kaW9fc2ltcGxlX3Bvb2w7XG4rXG4rc3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IpXG4re1xuK1x0c3RydWN0IGJpbyAqYmlvID0gXHUwMDI2c3ItXHUwMDNlYmlvO1xuK1x0c3RydWN0IGtpb2NiICppb2NiID0gc3ItXHUwMDNlaW9jYjtcbitcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItXHUwMDNla2lfZmlscCk7XG4rXHRpbnQgZXJyb3IgPSBibGtfc3RhdHVzX3RvX2Vycm5vKGJpby1cdTAwM2ViaV9zdGF0dXMpO1xuK1x0c3NpemVfdCByZXQgPSBlcnJvcjtcbitcbitcdGlmIChsaWtlbHkoIXJldCkpIHtcbitcdFx0cmV0ID0gc3ItXHUwMDNlc2l6ZTtcbitcdFx0aW9jYi1cdTAwM2VraV9wb3MgKz0gcmV0O1xuK1x0fSBlbHNlIGlmIChzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKHJldCkpIHtcbitcdFx0ZnNlcnJvcl9yZXBvcnRfaW8oaW5vZGUsIEZTRVJSX0RJUkVDVElPX1JFQUQsIGlvY2ItXHUwMDNla2lfcG9zLFxuK1x0XHRcdFx0ICBzci1cdTAwM2VzaXplLCByZXQsIEdGUF9OT0ZTKTtcbitcdH1cbitcbitcdGlvbWFwX2Rpb19iaW9fcmVsZWFzZV9wYWdlcyhiaW8sIHNyLVx1MDAzZWRpb19mbGFncywgcmV0IFx1MDAzYyAwKTtcbitcdGlub2RlX2Rpb19lbmQoaW5vZGUpO1xuK1x0dHJhY2VfaW9tYXBfZGlvX2NvbXBsZXRlKGlvY2IsIGVycm9yLCByZXQpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IgPVxuK1x0XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgd29yayk7XG4rXG4rXHRXUklURV9PTkNFKHNyLVx1MDAzZWlvY2ItXHUwMDNlcHJpdmF0ZSwgTlVMTCk7XG4rXHRzci1cdTAwM2Vpb2NiLVx1MDAzZWtpX2NvbXBsZXRlKHNyLVx1MDAzZWlvY2IsIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW8oc3RydWN0IGJpbyAqYmlvKVxuK3tcbitcdHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzciA9XG4rXHRcdGNvbnRhaW5lcl9vZihiaW8sIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pO1xuK1xuK1x0aWYgKHVubGlrZWx5KHNyLVx1MDAzZWJpby5iaV9zdGF0dXMpKSB7XG4rXHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKHNyLVx1MDAzZWlvY2ItXHUwMDNla2lfZmlscCk7XG4rXG4rXHRcdElOSVRfV09SSyhcdTAwMjZzci1cdTAwM2V3b3JrLCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmspO1xuK1x0XHRxdWV1ZV93b3JrKGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19kaW9fZG9uZV93cSwgXHUwMDI2c3ItXHUwMDNld29yayk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHNyLVx1MDAzZWlvY2ItXHUwMDNla2lfY29tcGxldGUoc3ItXHUwMDNlaW9jYiwgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcikpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoc3RydWN0IGtpb2NiICppb2NiLFxuK1x0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHVuc2lnbmVkIGludCBkaW9fZmxhZ3MpXG4re1xuK1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbitcdHNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpO1xuK1xuK1x0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpICE9IFJFQUQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmICghY291bnQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdC8qXG4rXHQgKiBTaW1wbGUgZGlvIGlzIGFuIG9wdGltaXphdGlvbiBmb3Igc21hbGwgSU8uIEZpbHRlciBvdXQgbGFyZ2UgSU9cbitcdCAqIGVhcmx5IGFzIGl0J3MgdGhlIG1vc3QgY29tbW9uIGNhc2UgdG8gZmFpbCBmb3IgdHlwaWNhbCBkaXJlY3QgSU9cbitcdCAqIHdvcmtsb2Fkcy5cbitcdCAqL1xuK1x0aWYgKGNvdW50IFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoZGlvX2ZsYWdzIFx1MDAyNiAoSU9NQVBfRElPX0ZPUkNFX1dBSVQgfCBJT01BUF9ESU9fUEFSVElBTCB8XG4rXHRcdFx0IElPTUFQX0RJT19CT1VOQ0UpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoaW9jYi1cdTAwM2VraV9wb3MgKyBjb3VudCBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoSVNfRU5DUllQVEVEKGlub2RlKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLFxuK1x0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyxcbitcdFx0dm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGRpb19mbGFncylcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1x0c2l6ZV90IGNvdW50ID0gaW92X2l0ZXJfY291bnQoaXRlcik7XG4rXHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3I7XG4rXHR1bnNpZ25lZCBpbnQgYWxpZ25tZW50O1xuK1x0c3RydWN0IGlvbWFwX2l0ZXIgaW9taSA9IHtcbitcdFx0Lmlub2RlXHRcdD0gaW5vZGUsXG4rXHRcdC5wb3NcdFx0PSBpb2NiLVx1MDAzZWtpX3BvcyxcbitcdFx0Lmxlblx0XHQ9IGNvdW50LFxuK1x0XHQuZmxhZ3NcdFx0PSBJT01BUF9ESVJFQ1QsXG4rXHRcdC5wcml2YXRlXHQ9IHByaXZhdGUsXG4rXHR9O1xuK1x0c3RydWN0IGJpbyAqYmlvO1xuK1x0Ym9vbCB3YWl0X2Zvcl9jb21wbGV0aW9uID0gaXNfc3luY19raW9jYihpb2NiKTtcbitcdHNzaXplX3QgcmV0O1xuK1xuK1x0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9XQUlUKVxuK1x0XHRpb21pLmZsYWdzIHw9IElPTUFQX05PV0FJVDtcbitcbitcdHJldCA9IGtpb2NiX3dyaXRlX2FuZF93YWl0KGlvY2IsIGNvdW50KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpbm9kZV9kaW9fYmVnaW4oaW5vZGUpO1xuK1xuK1x0cmV0ID0gb3BzLVx1MDAzZWlvbWFwX2JlZ2luKGlub2RlLCBpb21pLnBvcywgY291bnQsIGlvbWkuZmxhZ3MsXG4rXHRcdFx0ICAgICAgIFx1MDAyNmlvbWkuaW9tYXAsIFx1MDAyNmlvbWkuc3JjbWFwKTtcbitcdGlmIChyZXQpIHtcbitcdFx0aW5vZGVfZGlvX2VuZChpbm9kZSk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRpZiAoaW9taS5pb21hcC50eXBlICE9IElPTUFQX01BUFBFRCB8fFxuK1x0ICAgIGlvbWkuaW9tYXAub2Zmc2V0ICsgaW9taS5pb21hcC5sZW5ndGggXHUwMDNjIGlvbWkucG9zICsgY291bnQgfHxcbitcdCAgICAoaW9taS5pb21hcC5mbGFncyBcdTAwMjYgSU9NQVBfRl9JTlRFR1JJVFkpKSB7XG4rXHRcdHJldCA9IC1FTk9UQkxLO1xuK1x0XHRnb3RvIG91dF9pb21hcF9lbmQ7XG4rXHR9XG4rXG4rXHRhbGlnbm1lbnQgPSBpb21hcF9kaW9fYWxpZ25tZW50KGlub2RlLCBpb21pLmlvbWFwLmJkZXYsIGRpb19mbGFncyk7XG4rXHRpZiAoKGlvbWkucG9zIHwgY291bnQpIFx1MDAyNiAoYWxpZ25tZW50IC0gMSkpIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXRfaW9tYXBfZW5kO1xuK1x0fVxuK1xuK1x0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uIFx1MDAyNlx1MDAyNiB1bmxpa2VseSghaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Rpb19kb25lX3dxKSkge1xuK1x0XHRyZXQgPSBzYl9pbml0X2Rpb19kb25lX3dxKGlub2RlLVx1MDAzZWlfc2IpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gb3V0X2lvbWFwX2VuZDtcbitcdH1cbitcbitcdHRyYWNlX2lvbWFwX2Rpb19yd19iZWdpbihpb2NiLCBpdGVyLCBkaW9fZmxhZ3MsIDApO1xuK1xuK1x0aWYgKHVzZXJfYmFja2VkX2l0ZXIoaXRlcikpXG4rXHRcdGRpb19mbGFncyB8PSBJT01BUF9ESU9fVVNFUl9CQUNLRUQ7XG4rXG4rXHRiaW8gPSBiaW9fYWxsb2NfYmlvc2V0KGlvbWkuaW9tYXAuYmRldixcbitcdFx0XHRiaW9faW92X3ZlY3NfdG9fYWxsb2MoaXRlciwgQklPX01BWF9WRUNTKSxcbitcdFx0XHRSRVFfT1BfUkVBRCxcbitcdFx0XHRHRlBfS0VSTkVMLCBcdTAwMjZpb21hcF9kaW9fc2ltcGxlX3Bvb2wpO1xuK1x0c3IgPSBjb250YWluZXJfb2YoYmlvLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgYmlvKTtcbitcdHNyLVx1MDAzZWlvY2IgPSBpb2NiO1xuK1x0c3ItXHUwMDNlZGlvX2ZsYWdzID0gZGlvX2ZsYWdzO1xuK1xuK1x0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gaW9tYXBfc2VjdG9yKFx1MDAyNmlvbWkuaW9tYXAsIGlvbWkucG9zKTtcbitcdGJpby1cdTAwM2ViaV9pb3ByaW8gPSBpb2NiLVx1MDAzZWtpX2lvcHJpbztcbitcbitcdHJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBhbGlnbm1lbnQgLSAxKTtcbitcdGlmICh1bmxpa2VseShyZXQpKVxuK1x0XHRnb3RvIG91dF9iaW9fcHV0O1xuK1xuK1x0aWYgKGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgIT0gY291bnQpIHtcbitcdFx0aW92X2l0ZXJfcmV2ZXJ0KGl0ZXIsIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUpO1xuK1x0XHRyZXQgPSAtRU5PVEJMSztcbitcdFx0Z290byBvdXRfYmlvX3JlbGVhc2VfcGFnZXM7XG4rXHR9XG4rXG4rXHRzci1cdTAwM2VzaXplID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZTtcbitcbitcdGlmIChkaW9fZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19VU0VSX0JBQ0tFRClcbitcdFx0YmlvX3NldF9wYWdlc19kaXJ0eShiaW8pO1xuK1xuK1x0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9XQUlUKVxuK1x0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9OT1dBSVQ7XG4rXHRpZiAoKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfSElQUkkpIFx1MDAyNlx1MDAyNiAhd2FpdF9mb3JfY29tcGxldGlvbikge1xuK1x0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9QT0xMRUQ7XG4rXHRcdFdSSVRFX09OQ0UoaW9jYi1cdTAwM2Vwcml2YXRlLCBiaW8pO1xuK1x0fVxuK1xuK1x0aWYgKG9wcy1cdTAwM2Vpb21hcF9lbmQpXG4rXHRcdG9wcy1cdTAwM2Vpb21hcF9lbmQoaW5vZGUsIGlvbWkucG9zLCBjb3VudCwgY291bnQsIGlvbWkuZmxhZ3MsXG4rXHRcdFx0ICAgICAgIFx1MDAyNmlvbWkuaW9tYXApO1xuK1xuK1x0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uKSB7XG4rXHRcdGJpby1cdTAwM2ViaV9lbmRfaW8gPSBpb21hcF9kaW9fc2ltcGxlX2VuZF9pbztcbitcdFx0c3VibWl0X2JpbyhiaW8pO1xuK1x0XHR0cmFjZV9pb21hcF9kaW9fcndfcXVldWVkKGlub2RlLCBpb21pLnBvcywgY291bnQpO1xuK1x0XHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xuK1x0fVxuK1xuK1x0c3VibWl0X2Jpb193YWl0KGJpbyk7XG4rXHRyZXR1cm4gaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcik7XG4rXG4rb3V0X2Jpb19yZWxlYXNlX3BhZ2VzOlxuK1x0YmlvX3JlbGVhc2VfcGFnZXMoYmlvLCBmYWxzZSk7XG4rb3V0X2Jpb19wdXQ6XG4rXHRiaW9fcHV0KGJpbyk7XG4rb3V0X2lvbWFwX2VuZDpcbitcdGlmIChvcHMtXHUwMDNlaW9tYXBfZW5kKVxuK1x0XHRvcHMtXHUwMDNlaW9tYXBfZW5kKGlub2RlLCBpb21pLnBvcywgY291bnQsIDAsIGlvbWkuZmxhZ3MsXG4rXHRcdFx0ICAgICAgIFx1MDAyNmlvbWkuaW9tYXApO1xuK1x0aW5vZGVfZGlvX2VuZChpbm9kZSk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiBzc2l6ZV90XG4gaW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxuIFx0XHR1bnNpZ25lZCBpbnQgZGlvX2ZsYWdzLCB2b2lkICpwcml2YXRlLCBzaXplX3QgZG9uZV9iZWZvcmUpXG4ge1xuIFx0c3RydWN0IGlvbWFwX2RpbyAqZGlvO1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHQvKlxuK1x0ICogRmFzdCBwYXRoIGZvciBzbWFsbCwgYmxvY2stYWxpZ25lZCBkaXJlY3QgSS9PcyB0aGF0IG1hcCB0byBhXG4rXHQgKiBzaW5nbGUgY29udGlndW91cyBvbi1kaXNrIGV4dGVudC5cbitcdCAqXG4rXHQgKiBAZG9wcyBtdXN0IGJlIE5VTEw6IGEgbm9uLU5VTEwgQGRvcHMgbWVhbnMgdGhlIGNhbGxlciB3YW50cyBpdHNcbitcdCAqIC1cdTAwM2VlbmRfaW8gLyAtXHUwMDNlc3VibWl0X2lvIGhvb2tzIGludm9rZWQsIGFuZCBpbiBwYXJ0aWN1bGFyIHdhbnRzIGl0c1xuK1x0ICogYmlvcyB0byBiZSBhbGxvY2F0ZWQgZnJvbSB0aGUgZmlsZXN5c3RlbS1wcml2YXRlIEBkb3BzLVx1MDAzZWJpb19zZXRcbitcdCAqICh3aG9zZSBmcm9udF9wYWQgc2l6ZXMgYSBmaWxlc3lzdGVtLXByaXZhdGUgd3JhcHBlciBhcm91bmQgdGhlXG4rXHQgKiBiaW8pLiAgVGhlIGZhc3QgcGF0aCBpbnN0ZWFkIGFsbG9jYXRlcyBmcm9tIHRoZSBzaGFyZWRcbitcdCAqIGlvbWFwX2Rpb19zaW1wbGVfcG9vbCwgd2hvc2UgZnJvbnRfcGFkIG1hdGNoZXNcbitcdCAqIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlOyB0aGUgdHdvIHdyYXBwZXJzIGFyZSBub3RcbitcdCAqIGludGVyY2hhbmdlYWJsZSwgc28gd2UgbXVzdCBmYWxsIGJhY2sgdG8gX19pb21hcF9kaW9fcncoKSBpblxuK1x0ICogdGhhdCBjYXNlLlxuK1x0ICpcbitcdCAqIEBkb25lX2JlZm9yZSBtdXN0IGJlIHplcm86IGEgbm9uLXplcm8gY2FsbGVyLWFjY3VtdWxhdGVkIHJlc2lkdWFsXG4rXHQgKiBjYW5ub3QgYmUgY2FycmllZCB0aHJvdWdoIGEgc2luZ2xlLWJpbyBpbmxpbmUgY29tcGxldGlvbi5cbitcdCAqXG4rXHQgKiAtRU5PVEJMSyBpcyB0aGUgcHJpdmF0ZSBzZW50aW5lbCByZXR1cm5lZCBieSBpb21hcF9kaW9fc2ltcGxlKClcbitcdCAqIHdoZW4gaXQgZGVjaWRlcyB0aGUgcmVxdWVzdCBkb2VzIG5vdCBmaXQgdGhlIGZhc3QgcGF0aC5cbitcdCAqIEluIHRoYXQgY2FzZSB3ZSBwcm9jZWVkIHRvIHRoZSBnZW5lcmljIF9faW9tYXBfZGlvX3J3KCkgc2xvd1xuK1x0ICogcGF0aC4gIEFueSBvdGhlciBlcnJubyBpcyBhIHJlYWwgcmVzdWx0IGFuZCBpcyBwcm9wYWdhdGVkIGFzLWlzLFxuK1x0ICogaW4gcGFydGljdWxhciAtRUFHQUlOIGZvciBJT0NCX05PV0FJVCBtdXN0IHJlYWNoIHRoZSBjYWxsZXIuXG4rXHQgKi9cbitcdGlmICghZG9wcyBcdTAwMjZcdTAwMjYgIWRvbmVfYmVmb3JlIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKGlvY2IsIGl0ZXIsIGRpb19mbGFncykpIHtcbitcdFx0cmV0ID0gaW9tYXBfZGlvX3NpbXBsZShpb2NiLCBpdGVyLCBvcHMsIHByaXZhdGUsIGRpb19mbGFncyk7XG4rXHRcdGlmIChyZXQgIT0gLUVOT1RCTEspXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbiBcdGRpbyA9IF9faW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIG9wcywgZG9wcywgZGlvX2ZsYWdzLCBwcml2YXRlLFxuIFx0XHRcdCAgICAgZG9uZV9iZWZvcmUpO1xuQEAgLTkwMiwzICsxMTU3LDExIEBAIGlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdHJldHVybiBpb21hcF9kaW9fY29tcGxldGUoZGlvKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX3J3KTtcbitcbitzdGF0aWMgaW50IF9faW5pdCBpb21hcF9kaW9faW5pdCh2b2lkKVxuK3tcbitcdHJldHVybiBiaW9zZXRfaW5pdChcdTAwMjZpb21hcF9kaW9fc2ltcGxlX3Bvb2wsIDQsXG4rXHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyksXG4rXHRcdFx0ICAgQklPU0VUX05FRURfQlZFQ1MgfCBCSU9TRVRfUEVSQ1BVX0NBQ0hFKTtcbit9XG4rZnNfaW5pdGNhbGwoaW9tYXBfZGlvX2luaXQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTI6MjA6MDUuNTY2MTA3NDY5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMzNTAwMTM1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXcgRGlyZWN0IEkvTyBGYXN0IFBhdGggUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIGEgbmV3IHBhdGNoIGFpbWVkIGF0IGFjY2VsZXJhdGluZyBkaXJlY3QgSS9PIHJlYWRzIHdpdGhpbiBgZnMvaW9tYXAvZGlyZWN0LWlvLmNgLiBUaGUgY29yZSBpZGVhIGlzIGEgXCJzaW1wbGVcIiBmYXN0IHBhdGgsIGhhbmRsZWQgYnkgYSBuZXcgZnVuY3Rpb24sIGBpb21hcF9kaW9fc2ltcGxlYC4gSXQgbG9va3MgbGlrZSBgaW9tYXBfZGlvX3NpbXBsZWAgaXMgY29uZGl0aW9uYWxseSBjYWxsZWQgZnJvbSBgaW9tYXBfZGlvX3J3YCBiYXNlZCBvbiB0aGUgcmV0dXJuIHZhbHVlIG9mIGBpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZGAuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIGltcGFjdGluZyB0aGUgaGVhcnQgb2YgaW9tYXAgZGlyZWN0IEkvTywgc28gZnV6emluZyB0aGlzIGlzIGFic29sdXRlbHkgY3JpdGljYWwuXG5cbkxldCdzIGRpdmUgaW50byB0aGUgZGV0YWlscy4gSSBzZWUgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBzdWl0ZSBvZiBuZXcgZnVuY3Rpb25zOiBgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWRgLCBgaW9tYXBfZGlvX3NpbXBsZWAsIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlYCwgYGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29ya2AsIGFuZCBgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9gLiBBbmQsIGFzIGV4cGVjdGVkLCBpdCBtb2RpZmllcyBgaW9tYXBfZGlvX3J3YCB0byBhY3R1YWxseSBsZXZlcmFnZSB0aGF0IG5ldyBgaW9tYXBfZGlvX3NpbXBsZWAgZmFzdCBwYXRoLlxuXG5CZWZvcmUgd2UgZXZlbiB0aGluayBhYm91dCBmdXp6aW5nLCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgZnMvaW9tYXAvZGlyZWN0LWlvLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19GU19JT01BUGAgaXMgZW5hYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGZzL2lvbWFwL01ha2VmaWxlYCBvciBgZnMvaW9tYXAvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgdW5kZXJzdGFuZCBhbGwgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGJ1dCB0aGlzIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMjoyMDoxMC45MDExMTEwMDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MTA5MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19GU19JT01BUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvTWFrZWZpbGU9Nz1jY2ZsYWdzLXkgKz0gLUkgJChzcmMpXFx0XFx0IyBuZWVkZWQgZm9yIHRyYWNlIGV2ZW50c1xcbmZzL2lvbWFwL01ha2VmaWxlLTgtXFxuZnMvaW9tYXAvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfRlNfSU9NQVApXFx0XFx0Kz0gaW9tYXAub1xcbmZzL2lvbWFwL01ha2VmaWxlLTEwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMjoyMDoxMS4wMzAyMjU2NjdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc1MDA5NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIENPTkZJR19GU19JT01BUCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBDT05GSUdfRlNfSU9NQVBgLiBXaGF0J3MgbWFraW5nIHRoaXMgZnVuY3Rpb25hbGl0eSB0aWNrPyBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgc291cmNlIGNvZGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMsIHRoZSB1bmRlcmx5aW5nIGFzc3VtcHRpb25zLCBhbmQgYW55IHBvdGVudGlhbCBjb25mbGljdHMgdGhhdCBtaWdodCBhcmlzZSBmcm9tIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzLiBJIGtub3cgdGhlIGdlbmVyYWwgcHVycG9zZSwgSU9NQVAgaXMgYW4gaW1wb3J0YW50IGNvbXBvbmVudCBmb3IgbWFuYWdpbmcgZGlyZWN0IEkvTy4gTm93LCBsZXQncyBleHBsb3JlIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpdGVtIGluIGRldGFpbC4gVW5kZXJzdGFuZGluZyB0aGUgcHJlY2lzZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgQ09ORklHX0ZTX0lPTUFQYCBhbmQgb3RoZXIgcmVsYXRlZCBmZWF0dXJlcyDigJMgdGhlIGZpbGVzeXN0ZW0gbGF5ZXJzLCB0aGUgYmxvY2sgSS9PIHN0YWNrLCBhbmQgYW55IHNwZWNpZmljIGRyaXZlciBkZXBlbmRlbmNpZXMg4oCTIGlzIGNyaXRpY2FsIGhlcmUuIEknbGwgbmVlZCB0byB0cmFjZSB0aHJvdWdoIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzIGFuZCBjb2RlIHRvIHNlZSBob3cgaXQgYWxsIGZpdHMgdG9nZXRoZXIsIHRoZSB1c3VhbCBwcm9jZXNzIHdoZW4gZGVjaXBoZXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBMZXQncyBzdGFydCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDU0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTI6MjA6MTQuMjA1MjM3NTQ2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDYxODk5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgRlNfSU9NQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9NTg9Y29uZmlnIEZTX0RBWFxcbi0tXFxuZnMvS2NvbmZpZy02MS1cXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuZnMvS2NvbmZpZzo2MjpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9LY29uZmlnLTYzLVxcdHNlbGVjdCBEQVhcXG4tLVxcbmZzL2J0cmZzL0tjb25maWc9Mz1jb25maWcgQlRSRlNfRlNcXG4tLVxcbmZzL2J0cmZzL0tjb25maWctMTQtXFx0c2VsZWN0IFpTVERfREVDT01QUkVTU1xcbmZzL2J0cmZzL0tjb25maWc6MTU6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvYnRyZnMvS2NvbmZpZy0xNi1cXHRzZWxlY3QgUkFJRDZfUFFcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWc9Mz1jb25maWcgRVJPRlNfRlNcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctOC1cXHRzZWxlY3QgQ1JZUFRPX0RFRkxBVEUgaWYgRVJPRlNfRlNfWklQX0FDQ0VMXFxuZnMvZXJvZnMvS2NvbmZpZzo5OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2Vyb2ZzL0tjb25maWctMTAtXFx0c2VsZWN0IExaNF9ERUNPTVBSRVNTIGlmIEVST0ZTX0ZTX1pJUFxcbi0tXFxuZnMvZXhmYXQvS2NvbmZpZz0zPWNvbmZpZyBFWEZBVF9GU1xcbi0tXFxuZnMvZXhmYXQvS2NvbmZpZy02LVxcdHNlbGVjdCBOTFNcXG5mcy9leGZhdC9LY29uZmlnOjc6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZXhmYXQvS2NvbmZpZy04LVxcdGhlbHBcXG4tLVxcbmZzL2V4dDIvS2NvbmZpZz0yPWNvbmZpZyBFWFQyX0ZTXFxuLS1cXG5mcy9leHQyL0tjb25maWctNC1cXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9leHQyL0tjb25maWc6NTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9leHQyL0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5mcy9leHQ0L0tjb25maWc9Mj1jb25maWcgRVhUNF9GU1xcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTctXFx0c2VsZWN0IENSQzMyXFxuZnMvZXh0NC9LY29uZmlnOjg6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZXh0NC9LY29uZmlnLTktXFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXFxuLS1cXG5mcy9mMmZzL0tjb25maWc9Mj1jb25maWcgRjJGU19GU1xcbi0tXFxuZnMvZjJmcy9LY29uZmlnLTktXFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXFxuZnMvZjJmcy9LY29uZmlnOjEwOlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2YyZnMvS2NvbmZpZy0xMS1cXHRzZWxlY3QgTFo0X0NPTVBSRVNTIGlmIEYyRlNfRlNfTFo0XFxuLS1cXG5mcy9mdXNlL0tjb25maWc9Mj1jb25maWcgRlVTRV9GU1xcbi0tXFxuZnMvZnVzZS9LY29uZmlnLTQtXFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxcbmZzL2Z1c2UvS2NvbmZpZzo1OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2Z1c2UvS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbmZzL2dmczIvS2NvbmZpZz0yPWNvbmZpZyBHRlMyX0ZTXFxuLS1cXG5mcy9nZnMyL0tjb25maWctNy1cXHRzZWxlY3QgUVVPVEFDVExcXG5mcy9nZnMyL0tjb25maWc6ODpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9nZnMyL0tjb25maWctOS1cXHRoZWxwXFxuLS1cXG5mcy9ocGZzL0tjb25maWc9Mj1jb25maWcgSFBGU19GU1xcbi0tXFxuZnMvaHBmcy9LY29uZmlnLTUtXFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuZnMvaHBmcy9LY29uZmlnOjY6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvaHBmcy9LY29uZmlnLTctXFx0aGVscFxcbi0tXFxuZnMvbnRmcy9LY29uZmlnPTI9Y29uZmlnIE5URlNfRlNcXG4tLVxcbmZzL250ZnMvS2NvbmZpZy00LVxcdHNlbGVjdCBOTFNcXG5mcy9udGZzL0tjb25maWc6NTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9udGZzL0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5mcy94ZnMvS2NvbmZpZz0yPWNvbmZpZyBYRlNfRlNcXG4tLVxcbmZzL3hmcy9LY29uZmlnLTYtXFx0c2VsZWN0IENSQzMyXFxuZnMveGZzL0tjb25maWc6NzpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy94ZnMvS2NvbmZpZy04LVxcdGhlbHBcXG4tLVxcbmZzL3pvbmVmcy9LY29uZmlnPTE9Y29uZmlnIFpPTkVGU19GU1xcbi0tXFxuZnMvem9uZWZzL0tjb25maWctNC1cXHRkZXBlbmRzIG9uIEJMS19ERVZfWk9ORURcXG5mcy96b25lZnMvS2NvbmZpZzo1OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL3pvbmVmcy9LY29uZmlnLTYtXFx0c2VsZWN0IENSQzMyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEyOjIwOjE0LjM4OTg2MjYyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMTQxMTI4MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERpcmVjdCBJL08gYW5kIGlvbWFwIGZvciBUYXJnZXRlZCBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSB0YXJnZXQgYGlvbWFwX2Rpb19zaW1wbGVgIGFuZCBpdHMgcmVsYXRlZCBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIFNpbmNlIGBGU19JT01BUGAgaXMgd2lkZWx5IHVzZWQsIHRoZXJlJ3Mgbm8gbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSBpdCwgYnV0IGRlZmluaW5nIHNwZWNpZmljIGZpbGVzeXN0ZW1zIGxpa2UgYFhGU19GU2AsIGBFWFQ0X0ZTYCwgb3IgYEJUUkZTX0ZTYCB3aWxsIG1ha2Ugc3VyZSB0aGF0IGlvbWFwIGlzIGJlaW5nIHVzZWQsIGFsdGhvdWdoIHN5emthbGxlciBwcm9iYWJseSBhbHJlYWR5IGhhcyB0aG9zZSBjb3ZlcmVkLiBJIGNoZWNrZWQgZm9yIGFueSBzcGVjaWZpYyBjb25maWdzIHJlbGF0ZWQgdG8gYGlvbWFwX2Rpb19zaW1wbGVgLCBidXQgaXQgbG9va3MgbGlrZSBpdCdzIGp1c3QgcGFydCBvZiBgZGlyZWN0LWlvLmNgLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgY29yZSBmdW5jdGlvbnMuIEhlcmUgYXJlIHRoZSBvbmVzIEkgd2FudCB0byB6ZXJvIGluIG9uOiBgaW9tYXBfZGlvX3NpbXBsZWAsIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlYCwgYGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29ya2AsIGFuZCBgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9gLiBJIGluaXRpYWxseSB3b25kZXJlZCBhYm91dCBgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWRgLCBzaW5jZSBpdCdzIGFuIGlubGluZSBmdW5jdGlvbiwgYnV0IEkgd2FudGVkIHRvIG1ha2Ugc3VyZSBpdCB3YXMgYWN0dWFsbHkgaW5saW5lZC5cblxuQSBxdWljayBjaGVjayBjb25maXJtZWQgdGhhdCBpdCBpcyBpbmRlZWQgaW5saW5lOiBgc3RhdGljIGlubGluZSBib29sIGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKC4uLilgLiBUaGVyZWZvcmUsIEknbGwgZXhjbHVkZSBpdCBmcm9tIHRoZSB0YXJnZXQgbGlzdC5cblxuSSBoYWQgY29uc2lkZXJlZCBgaW9tYXBfZGlvX3J3YCwgYnV0IHNpbmNlIGl0J3MgYSBoZWF2aWx5IHVzZWQgZnVuY3Rpb24sIEkgd2FudCB0byBhdm9pZCBpdCBpbiBmYXZvciBvZiBuZXdseSBhZGRlZCBmdW5jdGlvbnMuXG5cblNvLCB0aGUga2V5IGZ1bmN0aW9ucyBmb3IgZnV6emluZyBhcmU6IGBpb21hcF9kaW9fc2ltcGxlYCwgYGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrYCwgYW5kIGBpb21hcF9kaW9fc2ltcGxlX2VuZF9pb2AuXG5cbkZvciBlbmFibGluZyBjb25maWdzLCB3aGlsZSBgRlNfSU9NQVBgIHNob3VsZCB3b3JrLCBJIHNob3VsZCBzcGVjaWZ5IGVpdGhlciBgRlNfSU9NQVBgIG9yIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIG9yIGBCVFJGU19GU2AgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYSBmaWxlc3lzdGVtIHRoYXQgdXNlcyBpb21hcC4gSG93ZXZlciwgYEZTX0lPTUFQYCBzZWVtcyB0byBiZSBhIGhpZGRlbiBjb25maWcsIHNvIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGZzL0tjb25maWdgIHRvIGNvbmZpcm0gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI3OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMjoyMDoyMi40MDM5NzgzNTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMzE4ODEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGU19JT01BUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0xMj1jb25maWcgVkFMSURBVEVfRlNfUEFSU0VSXFxuLS1cXG5mcy9LY29uZmlnLTE3LVxcbmZzL0tjb25maWc6MTg6Y29uZmlnIEZTX0lPTUFQXFxuZnMvS2NvbmZpZy0xOS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEyOjIwOjIyLjU2NzMwMTA4MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMjkyMzg5ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KipcblxuT2theSwgc28gdGhpcyBpcyBhIGhpZGRlbiBjb25maWcsIGdvdCBpdC4gV2UgY291bGQgbGlzdCB0aGUgZmlsZXN5c3RlbSBjb25maWdzIGxpa2UgYFhGU19GU2AsIGBFWFQ0X0ZTYCwgYW5kIGBCVFJGU19GU2AgaW4gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LCBidXQgdGhvc2UgYXJlIGV4dHJlbWVseSBnZW5lcmljLiBCdXQgdGhlIHByb21wdCBzYWlkIG5vdCB0byBpbmNsdWRlIGdlbmVyaWMgY29uZmlncywgb25seSBvbmVzIHRoYXQgZGlyZWN0bHkgcmVsYXRlIHRvIHRoZSBtb2RpZmllZCBjb2RlLiBIbW0sIEkgY291bGQganVzdCBsZWF2ZSBgRW5hYmxlQ29uZmlnc2AgZW1wdHkgb3IgcHV0IGluIHRob3NlIHNwZWNpZmljIGZpbGVzeXN0ZW1zLlxuXG5XYWl0LCB0aGUgcHJvbXB0IHNhaWQgdG8gYXZvaWQgdGhlIGdlbmVyaWMgb25lcyBzaW5jZSB0aGV5IGFyZSBhbHJlYWR5IGVuYWJsZWQuIFNpbmNlIGBGU19JT01BUGAgZ2V0cyBzZWxlY3RlZCBmb3IgdGhvc2UgZ2VuZXJpYyBmaWxlc3lzdGVtcywgSSB0aGluayBJJ2xsIGp1c3QgbGVhdmUgYEVuYWJsZUNvbmZpZ3NgIGVtcHR5IGZvciBub3cuXG5cbkxldCBtZSBtYWtlIHN1cmUgbXkgcmVhc29uaW5nIGlzIHNvdW5kOiBUaGlzIHBhdGNoIGFkZHMgYSBmYXN0IHBhdGggZm9yIGRpcmVjdCBJL08gcmVhZHMgd2l0aGluIHRoZSBpb21hcCBzdWJzeXN0ZW0uIEl0J3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgSS9PIGxvZ2ljLCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggZGlyZWN0IEkvTyBzeXN0ZW0gY2FsbHMgb24gZmlsZXN5c3RlbXMgbGlrZSBYRlMsIGV4dDQsIGFuZCBidHJmcy4gSXQgKmRlZmluaXRlbHkqIG5lZWRzIGZ1enppbmcgdG8gdmVyaWZ5IHRoYXQgdGhlIG5ldyBmYXN0IHBhdGggaGFuZGxlcyB2YXJpb3VzIEkvTyBzY2VuYXJpb3MgcHJvcGVybHkuXG5cbkxldCdzIGRvdWJsZS1jaGVjayBxdWlja2x5IGZvciBhbnkgb3RoZXIgZnVuY3Rpb25zLiBBaGEsIGBpb21hcF9kaW9fYmlvX3JlbGVhc2VfcGFnZXNgIGFuZCBgaW9tYXBfZGlvX2FsaWdubWVudGAgYXJlIGJvdGggaW5saW5lLCBhbmQgYGlvbWFwX2Rpb19pbml0YCBpcyBhbiBpbml0Y2FsbCwgc28gaXQgb25seSBydW5zIG9uY2UgYXQgYm9vdC5cblxuU28sIHRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZTpcbiogICBgaW9tYXBfZGlvX3NpbXBsZWBcbiogICBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZWBcbiogICBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrYFxuKiAgIGBpb21hcF9kaW9fc2ltcGxlX2VuZF9pb2BcblxuT2theSwgbm8gb3RoZXIgY29uZmlncyBzZWVtIHJlbGV2YW50LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQwOSwiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTI6MjA6MjkuODk2NTQyNjg2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE2MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlXCIsXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlXCIsXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtcIixcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmYXN0IHBhdGggZm9yIGRpcmVjdCBJL08gcmVhZHMgKGBpb21hcF9kaW9fc2ltcGxlYCkgaW4gdGhlIGlvbWFwIHN1YnN5c3RlbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIEkvTyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZGlyZWN0IEkvTyBzeXN0ZW0gY2FsbHMgb24gc3VwcG9ydGVkIGZpbGVzeXN0ZW1zLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGZhc3QgcGF0aCBoYW5kbGVzIHZhcmlvdXMgSS9PIGNvbmRpdGlvbnMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVcIixcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVcIixcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29ya1wiLFxuICAgIFwiaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZhc3QgcGF0aCBmb3IgZGlyZWN0IEkvTyByZWFkcyAoYGlvbWFwX2Rpb19zaW1wbGVgKSBpbiB0aGUgaW9tYXAgc3Vic3lzdGVtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgSS9PIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBkaXJlY3QgSS9PIHN5c3RlbSBjYWxscyBvbiBzdXBwb3J0ZWQgZmlsZXN5c3RlbXMuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZmFzdCBwYXRoIGhhbmRsZXMgdmFyaW91cyBJL08gY29uZGl0aW9ucyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowp7tl2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-29 12:06:33 +0000 UTC FinishedAt: 2026-06-29 12:20:31 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "torvalds", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "series_id": "6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89" }, "track": "KASAN", "fuzz": { "focus": [ "fs" ], "focus_symbols": [ "iomap_dio_simple", "iomap_dio_simple_complete", "iomap_dio_simple_complete_work", "iomap_dio_simple_end_io" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEyOjIwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfZGlvX3NpbXBsZSYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29yayYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlX2VuZF9pbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZhc3QgcGF0aCBmb3IgZGlyZWN0IEkvTyByZWFkcyAoYGlvbWFwX2Rpb19zaW1wbGVgKSBpbiB0aGUgaW9tYXAgc3Vic3lzdGVtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgSS9PIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBkaXJlY3QgSS9PIHN5c3RlbSBjYWxscyBvbiBzdXBwb3J0ZWQgZmlsZXN5c3RlbXMuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZmFzdCBwYXRoIGhhbmRsZXMgdmFyaW91cyBJL08gY29uZGl0aW9ucyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTI6MjA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhODBiNjhhZDYwNjhmMDhjYzdlNmYwMTZjYmEzNzUyYTE5NjY0N2EyXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTI6MjA6MDMgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZnMvaW9tYXAvZGlyZWN0LWlvLmMgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuaW5kZXggYjQ4NWUzYjE5MWRhZmEuLjRkY2M5ZmM3NjZhOTJlIDEwMDY0NFxuLS0tIGEvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG5AQCAtMTAsNiAmIzQzOzEwLDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGFza19pb19hY2NvdW50aW5nX29wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnNlcnJvci5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2tvYmplY3QuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zeXNmcy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDt0cmFjZS5oXCYjMzQ7XG4gXG5AQCAtODgsOSAmIzQzOzkxLDkgQEAgc3RhdGljIGlubGluZSBlbnVtIGZzZXJyb3JfdHlwZSBpb21hcF9kaW9fZXJyX3R5cGUoY29uc3Qgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuIFx0cmV0dXJuIEZTRVJSX0RJUkVDVElPX1JFQUQ7XG4gfVxuIFxuLXN0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGNvbnN0IHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiYjNDM7c3RhdGljIGlubGluZSBib29sIHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IoaW50IGVycm9yKVxuIHtcbi1cdHN3aXRjaCAoZGlvLVx1MDAzZWVycm9yKSB7XG4mIzQzO1x0c3dpdGNoIChlcnJvcikge1xuIFx0Y2FzZSAwOlxuIFx0Y2FzZSAtRUFHQUlOOlxuIFx0Y2FzZSAtRU5PVEJMSzpcbkBAIC0xMTAsNyAmIzQzOzExMyw3IEBAIHNzaXplX3QgaW9tYXBfZGlvX2NvbXBsZXRlKHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiBcbiBcdGlmIChkb3BzIFx1MDAyNlx1MDAyNiBkb3BzLVx1MDAzZWVuZF9pbylcbiBcdFx0cmV0ID0gZG9wcy1cdTAwM2VlbmRfaW8oaW9jYiwgZGlvLVx1MDAzZXNpemUsIHJldCwgZGlvLVx1MDAzZWZsYWdzKTtcbi1cdGlmIChzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGRpbykpXG4mIzQzO1x0aWYgKHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IoZGlvLVx1MDAzZWVycm9yKSlcbiBcdFx0ZnNlcnJvcl9yZXBvcnRfaW8oZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApLFxuIFx0XHRcdFx0ICBpb21hcF9kaW9fZXJyX3R5cGUoZGlvKSwgb2Zmc2V0LCBkaW8tXHUwMDNlc2l6ZSxcbiBcdFx0XHRcdCAgZGlvLVx1MDAzZWVycm9yLCBHRlBfTk9GUyk7XG5AQCAtMjM3LDIzICYjNDM7MjQwLDI5IEBAIHN0YXRpYyB2b2lkIGlvbWFwX2Rpb19kb25lKHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiBcdGlvbWFwX2Rpb19jb21wbGV0ZV93b3JrKFx1MDAyNmRpby1cdTAwM2VhaW8ud29yayk7XG4gfVxuIFxuLXN0YXRpYyB2b2lkIF9faW9tYXBfZGlvX2Jpb19lbmRfaW8oc3RydWN0IGJpbyAqYmlvLCBib29sIGlubGluZV9jb21wbGV0aW9uKVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgaW9tYXBfZGlvX2Jpb19yZWxlYXNlX3BhZ2VzKHN0cnVjdCBiaW8gKmJpbyxcbiYjNDM7XHRcdHVuc2lnbmVkIGludCBkaW9fZmxhZ3MsIGJvb2wgZXJyb3IpXG4ge1xuLVx0c3RydWN0IGlvbWFwX2RpbyAqZGlvID0gYmlvLVx1MDAzZWJpX3ByaXZhdGU7XG4tXG4gXHRpZiAoYmlvX2ludGVncml0eShiaW8pKVxuIFx0XHRmc19iaW9faW50ZWdyaXR5X2ZyZWUoYmlvKTtcbiBcbi1cdGlmIChkaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19CT1VOQ0UpIHtcbi1cdFx0YmlvX2lvdl9pdGVyX3VuYm91bmNlKGJpbywgISFkaW8tXHUwMDNlZXJyb3IsXG4tXHRcdFx0XHRkaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19VU0VSX0JBQ0tFRCk7XG4mIzQzO1x0aWYgKGRpb19mbGFncyBcdTAwMjYgSU9NQVBfRElPX0JPVU5DRSkge1xuJiM0MztcdFx0YmlvX2lvdl9pdGVyX3VuYm91bmNlKGJpbywgZXJyb3IsXG4mIzQzO1x0XHRcdFx0ZGlvX2ZsYWdzIFx1MDAyNiBJT01BUF9ESU9fVVNFUl9CQUNLRUQpO1xuIFx0XHRiaW9fcHV0KGJpbyk7XG4tXHR9IGVsc2UgaWYgKGRpby1cdTAwM2VmbGFncyBcdTAwMjYgSU9NQVBfRElPX1VTRVJfQkFDS0VEKSB7XG4mIzQzO1x0fSBlbHNlIGlmIChkaW9fZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19VU0VSX0JBQ0tFRCkge1xuIFx0XHRiaW9fY2hlY2tfcGFnZXNfZGlydHkoYmlvKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGJpb19yZWxlYXNlX3BhZ2VzKGJpbywgZmFsc2UpO1xuIFx0XHRiaW9fcHV0KGJpbyk7XG4gXHR9XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIF9faW9tYXBfZGlvX2Jpb19lbmRfaW8oc3RydWN0IGJpbyAqYmlvLCBib29sIGlubGluZV9jb21wbGV0aW9uKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlvbWFwX2RpbyAqZGlvID0gYmlvLVx1MDAzZWJpX3ByaXZhdGU7XG4mIzQzO1xuJiM0MztcdGlvbWFwX2Rpb19iaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGRpby1cdTAwM2VmbGFncywgISFkaW8tXHUwMDNlZXJyb3IpO1xuIFxuIFx0LyogRG8gbm90IHRvdWNoIGJpbyBiZWxvdywgd2UganVzdCBnYXZlIHVwIG91ciByZWZlcmVuY2UuICovXG4gXG5AQCAtMzk4LDYgJiM0Mzs0MDcsMTQgQEAgc3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX2Jpb19pdGVyX29uZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpb21hcF9kaW9fYWxpZ25tZW50KHN0cnVjdCBpbm9kZSAqaW5vZGUsXG4mIzQzO1x0XHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBpbnQgZGlvX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGRpb19mbGFncyBcdTAwMjYgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRClcbiYjNDM7XHRcdHJldHVybiBpX2Jsb2Nrc2l6ZShpbm9kZSk7XG4mIzQzO1x0cmV0dXJuIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpO1xuJiM0Mzt9XG4mIzQzO1xuIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4ge1xuIFx0Y29uc3Qgc3RydWN0IGlvbWFwICppb21hcCA9IFx1MDAyNml0ZXItXHUwMDNlaW9tYXA7XG5AQCAtNDE2LDEwICYjNDM7NDMzLDcgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiBcdCAqIEZpbGUgc3lzdGVtcyB0aGF0IHdyaXRlIG91dCBvZiBwbGFjZSBhbmQgYWx3YXlzIGFsbG9jYXRlIG5ldyBibG9ja3NcbiBcdCAqIG5lZWQgZWFjaCBiaW8gdG8gYmUgYmxvY2sgYWxpZ25lZCBhcyB0aGF0JiMzOTtzIHRoZSB1bml0IG9mIGFsbG9jYXRpb24uXG4gXHQgKi9cbi1cdGlmIChkaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19GU0JMT0NLX0FMSUdORUQpXG4tXHRcdGFsaWdubWVudCA9IGZzX2Jsb2NrX3NpemU7XG4tXHRlbHNlXG4tXHRcdGFsaWdubWVudCA9IGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGlvbWFwLVx1MDAzZWJkZXYpO1xuJiM0MztcdGFsaWdubWVudCA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaW5vZGUsIGlvbWFwLVx1MDAzZWJkZXYsIGRpby1cdTAwM2VmbGFncyk7XG4gXG4gXHRpZiAoKHBvcyB8IGxlbmd0aCkgXHUwMDI2IChhbGlnbm1lbnQgLSAxKSlcbiBcdFx0cmV0dXJuIC1FSU5WQUw7XG5AQCAtODg4LDEyICYjNDM7OTAyLDI1MyBAQCBfX2lvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcncpO1xuIFxuJiM0MztzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSB7XG4mIzQzO1x0c3RydWN0IGtpb2NiXHRcdCppb2NiO1xuJiM0MztcdHNpemVfdFx0XHRcdHNpemU7XG4mIzQzO1x0dW5zaWduZWQgaW50XHRcdGRpb19mbGFncztcbiYjNDM7XHRzdHJ1Y3Qgd29ya19zdHJ1Y3RcdHdvcms7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBBbGlnbiBAYmlvIHRvIGEgY2FjaGVsaW5lIGJvdW5kYXJ5IHNvIHRoYXQsIGNvbWJpbmVkIHdpdGggdGhlXG4mIzQzO1x0ICogZnJvbnRfcGFkIHBhc3NlZCB0byBiaW9zZXRfaW5pdCgpLCB0aGUgYmlvIHNpdHMgYXQgdGhlIHN0YXJ0IG9mXG4mIzQzO1x0ICogYSBjYWNoZWxpbmUgaW4gbWVtb3J5IHJldHVybmVkIGJ5IHRoZSAoSFdDQUNIRS1hbGlnbmVkKSBiaW9cbiYjNDM7XHQgKiBzbGFiLiAgVGhpcyBrZWVwcyB0aGUgaG90IGZpZWxkcyBibG9jayBsYXllciB0b3VjaGVzIG9uIHN1Ym1pdFxuJiM0MztcdCAqIGFuZCBjb21wbGV0aW9uIChiaV9pdGVyLCBiaV9zdGF0dXMsIC4uLikgd2l0aGluIGEgc2luZ2xlIGxpbmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3RydWN0IGJpb1x0YmlvIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IGJpb19zZXQgaW9tYXBfZGlvX3NpbXBsZV9wb29sO1xuJiM0MztcbiYjNDM7c3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYmlvICpiaW8gPSBcdTAwMjZzci1cdTAwM2ViaW87XG4mIzQzO1x0c3RydWN0IGtpb2NiICppb2NiID0gc3ItXHUwMDNlaW9jYjtcbiYjNDM7XHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuJiM0MztcdGludCBlcnJvciA9IGJsa19zdGF0dXNfdG9fZXJybm8oYmlvLVx1MDAzZWJpX3N0YXR1cyk7XG4mIzQzO1x0c3NpemVfdCByZXQgPSBlcnJvcjtcbiYjNDM7XG4mIzQzO1x0aWYgKGxpa2VseSghcmV0KSkge1xuJiM0MztcdFx0cmV0ID0gc3ItXHUwMDNlc2l6ZTtcbiYjNDM7XHRcdGlvY2ItXHUwMDNla2lfcG9zICYjNDM7PSByZXQ7XG4mIzQzO1x0fSBlbHNlIGlmIChzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKHJldCkpIHtcbiYjNDM7XHRcdGZzZXJyb3JfcmVwb3J0X2lvKGlub2RlLCBGU0VSUl9ESVJFQ1RJT19SRUFELCBpb2NiLVx1MDAzZWtpX3BvcyxcbiYjNDM7XHRcdFx0XHQgIHNyLVx1MDAzZXNpemUsIHJldCwgR0ZQX05PRlMpO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aW9tYXBfZGlvX2Jpb19yZWxlYXNlX3BhZ2VzKGJpbywgc3ItXHUwMDNlZGlvX2ZsYWdzLCByZXQgXHUwMDNjIDApO1xuJiM0MztcdGlub2RlX2Rpb19lbmQoaW5vZGUpO1xuJiM0MztcdHRyYWNlX2lvbWFwX2Rpb19jb21wbGV0ZShpb2NiLCBlcnJvciwgcmV0KTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmsoc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyID1cbiYjNDM7XHRcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCB3b3JrKTtcbiYjNDM7XG4mIzQzO1x0V1JJVEVfT05DRShzci1cdTAwM2Vpb2NiLVx1MDAzZXByaXZhdGUsIE5VTEwpO1xuJiM0MztcdHNyLVx1MDAzZWlvY2ItXHUwMDNla2lfY29tcGxldGUoc3ItXHUwMDNlaW9jYiwgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgdm9pZCBpb21hcF9kaW9fc2ltcGxlX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8pXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7XG4mIzQzO1xuJiM0MztcdGlmICh1bmxpa2VseShzci1cdTAwM2ViaW8uYmlfc3RhdHVzKSkge1xuJiM0MztcdFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoc3ItXHUwMDNlaW9jYi1cdTAwM2VraV9maWxwKTtcbiYjNDM7XG4mIzQzO1x0XHRJTklUX1dPUksoXHUwMDI2c3ItXHUwMDNld29yaywgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrKTtcbiYjNDM7XHRcdHF1ZXVlX3dvcmsoaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Rpb19kb25lX3dxLCBcdTAwMjZzci1cdTAwM2V3b3JrKTtcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHNyLVx1MDAzZWlvY2ItXHUwMDNla2lfY29tcGxldGUoc3ItXHUwMDNlaW9jYiwgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcikpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoc3RydWN0IGtpb2NiICppb2NiLFxuJiM0MztcdFx0c3RydWN0IGlvdl9pdGVyICppdGVyLCB1bnNpZ25lZCBpbnQgZGlvX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbiYjNDM7XHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpICE9IFJFQUQpXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKCFjb3VudClcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFNpbXBsZSBkaW8gaXMgYW4gb3B0aW1pemF0aW9uIGZvciBzbWFsbCBJTy4gRmlsdGVyIG91dCBsYXJnZSBJT1xuJiM0MztcdCAqIGVhcmx5IGFzIGl0JiMzOTtzIHRoZSBtb3N0IGNvbW1vbiBjYXNlIHRvIGZhaWwgZm9yIHR5cGljYWwgZGlyZWN0IElPXG4mIzQzO1x0ICogd29ya2xvYWRzLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChjb3VudCBcdTAwM2UgaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Jsb2Nrc2l6ZSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoZGlvX2ZsYWdzIFx1MDAyNiAoSU9NQVBfRElPX0ZPUkNFX1dBSVQgfCBJT01BUF9ESU9fUEFSVElBTCB8XG4mIzQzO1x0XHRcdCBJT01BUF9ESU9fQk9VTkNFKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoaW9jYi1cdTAwM2VraV9wb3MgJiM0MzsgY291bnQgXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XHRpZiAoSVNfRU5DUllQVEVEKGlub2RlKSlcbiYjNDM7XHRcdHJldHVybiBmYWxzZTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHRydWU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLFxuJiM0MztcdFx0c3RydWN0IGlvdl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsXG4mIzQzO1x0XHR2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgZGlvX2ZsYWdzKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbiYjNDM7XHRzaXplX3QgY291bnQgPSBpb3ZfaXRlcl9jb3VudChpdGVyKTtcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3I7XG4mIzQzO1x0dW5zaWduZWQgaW50IGFsaWdubWVudDtcbiYjNDM7XHRzdHJ1Y3QgaW9tYXBfaXRlciBpb21pID0ge1xuJiM0MztcdFx0Lmlub2RlXHRcdD0gaW5vZGUsXG4mIzQzO1x0XHQucG9zXHRcdD0gaW9jYi1cdTAwM2VraV9wb3MsXG4mIzQzO1x0XHQubGVuXHRcdD0gY291bnQsXG4mIzQzO1x0XHQuZmxhZ3NcdFx0PSBJT01BUF9ESVJFQ1QsXG4mIzQzO1x0XHQucHJpdmF0ZVx0PSBwcml2YXRlLFxuJiM0MztcdH07XG4mIzQzO1x0c3RydWN0IGJpbyAqYmlvO1xuJiM0MztcdGJvb2wgd2FpdF9mb3JfY29tcGxldGlvbiA9IGlzX3N5bmNfa2lvY2IoaW9jYik7XG4mIzQzO1x0c3NpemVfdCByZXQ7XG4mIzQzO1xuJiM0MztcdGlmIChpb2NiLVx1MDAzZWtpX2ZsYWdzIFx1MDAyNiBJT0NCX05PV0FJVClcbiYjNDM7XHRcdGlvbWkuZmxhZ3MgfD0gSU9NQVBfTk9XQUlUO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBraW9jYl93cml0ZV9hbmRfd2FpdChpb2NiLCBjb3VudCk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdGlub2RlX2Rpb19iZWdpbihpbm9kZSk7XG4mIzQzO1xuJiM0MztcdHJldCA9IG9wcy1cdTAwM2Vpb21hcF9iZWdpbihpbm9kZSwgaW9taS5wb3MsIGNvdW50LCBpb21pLmZsYWdzLFxuJiM0MztcdFx0XHQgICAgICAgXHUwMDI2aW9taS5pb21hcCwgXHUwMDI2aW9taS5zcmNtYXApO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGlub2RlX2Rpb19lbmQoaW5vZGUpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChpb21pLmlvbWFwLnR5cGUgIT0gSU9NQVBfTUFQUEVEIHx8XG4mIzQzO1x0ICAgIGlvbWkuaW9tYXAub2Zmc2V0ICYjNDM7IGlvbWkuaW9tYXAubGVuZ3RoIFx1MDAzYyBpb21pLnBvcyAmIzQzOyBjb3VudCB8fFxuJiM0MztcdCAgICAoaW9taS5pb21hcC5mbGFncyBcdTAwMjYgSU9NQVBfRl9JTlRFR1JJVFkpKSB7XG4mIzQzO1x0XHRyZXQgPSAtRU5PVEJMSztcbiYjNDM7XHRcdGdvdG8gb3V0X2lvbWFwX2VuZDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGFsaWdubWVudCA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaW5vZGUsIGlvbWkuaW9tYXAuYmRldiwgZGlvX2ZsYWdzKTtcbiYjNDM7XHRpZiAoKGlvbWkucG9zIHwgY291bnQpIFx1MDAyNiAoYWxpZ25tZW50IC0gMSkpIHtcbiYjNDM7XHRcdHJldCA9IC1FSU5WQUw7XG4mIzQzO1x0XHRnb3RvIG91dF9pb21hcF9lbmQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb24gXHUwMDI2XHUwMDI2IHVubGlrZWx5KCFpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfZGlvX2RvbmVfd3EpKSB7XG4mIzQzO1x0XHRyZXQgPSBzYl9pbml0X2Rpb19kb25lX3dxKGlub2RlLVx1MDAzZWlfc2IpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byBvdXRfaW9tYXBfZW5kO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0dHJhY2VfaW9tYXBfZGlvX3J3X2JlZ2luKGlvY2IsIGl0ZXIsIGRpb19mbGFncywgMCk7XG4mIzQzO1xuJiM0MztcdGlmICh1c2VyX2JhY2tlZF9pdGVyKGl0ZXIpKVxuJiM0MztcdFx0ZGlvX2ZsYWdzIHw9IElPTUFQX0RJT19VU0VSX0JBQ0tFRDtcbiYjNDM7XG4mIzQzO1x0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChpb21pLmlvbWFwLmJkZXYsXG4mIzQzO1x0XHRcdGJpb19pb3ZfdmVjc190b19hbGxvYyhpdGVyLCBCSU9fTUFYX1ZFQ1MpLFxuJiM0MztcdFx0XHRSRVFfT1BfUkVBRCxcbiYjNDM7XHRcdFx0R0ZQX0tFUk5FTCwgXHUwMDI2aW9tYXBfZGlvX3NpbXBsZV9wb29sKTtcbiYjNDM7XHRzciA9IGNvbnRhaW5lcl9vZihiaW8sIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pO1xuJiM0MztcdHNyLVx1MDAzZWlvY2IgPSBpb2NiO1xuJiM0MztcdHNyLVx1MDAzZWRpb19mbGFncyA9IGRpb19mbGFncztcbiYjNDM7XG4mIzQzO1x0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gaW9tYXBfc2VjdG9yKFx1MDAyNmlvbWkuaW9tYXAsIGlvbWkucG9zKTtcbiYjNDM7XHRiaW8tXHUwMDNlYmlfaW9wcmlvID0gaW9jYi1cdTAwM2VraV9pb3ByaW87XG4mIzQzO1xuJiM0MztcdHJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBhbGlnbm1lbnQgLSAxKTtcbiYjNDM7XHRpZiAodW5saWtlbHkocmV0KSlcbiYjNDM7XHRcdGdvdG8gb3V0X2Jpb19wdXQ7XG4mIzQzO1xuJiM0MztcdGlmIChiaW8tXHUwMDNlYmlfaXRlci5iaV9zaXplICE9IGNvdW50KSB7XG4mIzQzO1x0XHRpb3ZfaXRlcl9yZXZlcnQoaXRlciwgYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XG4mIzQzO1x0XHRyZXQgPSAtRU5PVEJMSztcbiYjNDM7XHRcdGdvdG8gb3V0X2Jpb19yZWxlYXNlX3BhZ2VzO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3ItXHUwMDNlc2l6ZSA9IGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemU7XG4mIzQzO1xuJiM0MztcdGlmIChkaW9fZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19VU0VSX0JBQ0tFRClcbiYjNDM7XHRcdGJpb19zZXRfcGFnZXNfZGlydHkoYmlvKTtcbiYjNDM7XG4mIzQzO1x0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9XQUlUKVxuJiM0MztcdFx0YmlvLVx1MDAzZWJpX29wZiB8PSBSRVFfTk9XQUlUO1xuJiM0MztcdGlmICgoaW9jYi1cdTAwM2VraV9mbGFncyBcdTAwMjYgSU9DQl9ISVBSSSkgXHUwMDI2XHUwMDI2ICF3YWl0X2Zvcl9jb21wbGV0aW9uKSB7XG4mIzQzO1x0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9QT0xMRUQ7XG4mIzQzO1x0XHRXUklURV9PTkNFKGlvY2ItXHUwMDNlcHJpdmF0ZSwgYmlvKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChvcHMtXHUwMDNlaW9tYXBfZW5kKVxuJiM0MztcdFx0b3BzLVx1MDAzZWlvbWFwX2VuZChpbm9kZSwgaW9taS5wb3MsIGNvdW50LCBjb3VudCwgaW9taS5mbGFncyxcbiYjNDM7XHRcdFx0ICAgICAgIFx1MDAyNmlvbWkuaW9tYXApO1xuJiM0MztcbiYjNDM7XHRpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb24pIHtcbiYjNDM7XHRcdGJpby1cdTAwM2ViaV9lbmRfaW8gPSBpb21hcF9kaW9fc2ltcGxlX2VuZF9pbztcbiYjNDM7XHRcdHN1Ym1pdF9iaW8oYmlvKTtcbiYjNDM7XHRcdHRyYWNlX2lvbWFwX2Rpb19yd19xdWV1ZWQoaW5vZGUsIGlvbWkucG9zLCBjb3VudCk7XG4mIzQzO1x0XHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0c3VibWl0X2Jpb193YWl0KGJpbyk7XG4mIzQzO1x0cmV0dXJuIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpO1xuJiM0MztcbiYjNDM7b3V0X2Jpb19yZWxlYXNlX3BhZ2VzOlxuJiM0MztcdGJpb19yZWxlYXNlX3BhZ2VzKGJpbywgZmFsc2UpO1xuJiM0MztvdXRfYmlvX3B1dDpcbiYjNDM7XHRiaW9fcHV0KGJpbyk7XG4mIzQzO291dF9pb21hcF9lbmQ6XG4mIzQzO1x0aWYgKG9wcy1cdTAwM2Vpb21hcF9lbmQpXG4mIzQzO1x0XHRvcHMtXHUwMDNlaW9tYXBfZW5kKGlub2RlLCBpb21pLnBvcywgY291bnQsIDAsIGlvbWkuZmxhZ3MsXG4mIzQzO1x0XHRcdCAgICAgICBcdTAwMjZpb21pLmlvbWFwKTtcbiYjNDM7XHRpbm9kZV9kaW9fZW5kKGlub2RlKTtcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG4mIzQzO1xuIHNzaXplX3RcbiBpb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRcdGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcywgY29uc3Qgc3RydWN0IGlvbWFwX2Rpb19vcHMgKmRvcHMsXG4gXHRcdHVuc2lnbmVkIGludCBkaW9fZmxhZ3MsIHZvaWQgKnByaXZhdGUsIHNpemVfdCBkb25lX2JlZm9yZSlcbiB7XG4gXHRzdHJ1Y3QgaW9tYXBfZGlvICpkaW87XG4mIzQzO1x0c3NpemVfdCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogRmFzdCBwYXRoIGZvciBzbWFsbCwgYmxvY2stYWxpZ25lZCBkaXJlY3QgSS9PcyB0aGF0IG1hcCB0byBhXG4mIzQzO1x0ICogc2luZ2xlIGNvbnRpZ3VvdXMgb24tZGlzayBleHRlbnQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBAZG9wcyBtdXN0IGJlIE5VTEw6IGEgbm9uLU5VTEwgQGRvcHMgbWVhbnMgdGhlIGNhbGxlciB3YW50cyBpdHNcbiYjNDM7XHQgKiAtXHUwMDNlZW5kX2lvIC8gLVx1MDAzZXN1Ym1pdF9pbyBob29rcyBpbnZva2VkLCBhbmQgaW4gcGFydGljdWxhciB3YW50cyBpdHNcbiYjNDM7XHQgKiBiaW9zIHRvIGJlIGFsbG9jYXRlZCBmcm9tIHRoZSBmaWxlc3lzdGVtLXByaXZhdGUgQGRvcHMtXHUwMDNlYmlvX3NldFxuJiM0MztcdCAqICh3aG9zZSBmcm9udF9wYWQgc2l6ZXMgYSBmaWxlc3lzdGVtLXByaXZhdGUgd3JhcHBlciBhcm91bmQgdGhlXG4mIzQzO1x0ICogYmlvKS4gIFRoZSBmYXN0IHBhdGggaW5zdGVhZCBhbGxvY2F0ZXMgZnJvbSB0aGUgc2hhcmVkXG4mIzQzO1x0ICogaW9tYXBfZGlvX3NpbXBsZV9wb29sLCB3aG9zZSBmcm9udF9wYWQgbWF0Y2hlc1xuJiM0MztcdCAqIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlOyB0aGUgdHdvIHdyYXBwZXJzIGFyZSBub3RcbiYjNDM7XHQgKiBpbnRlcmNoYW5nZWFibGUsIHNvIHdlIG11c3QgZmFsbCBiYWNrIHRvIF9faW9tYXBfZGlvX3J3KCkgaW5cbiYjNDM7XHQgKiB0aGF0IGNhc2UuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBAZG9uZV9iZWZvcmUgbXVzdCBiZSB6ZXJvOiBhIG5vbi16ZXJvIGNhbGxlci1hY2N1bXVsYXRlZCByZXNpZHVhbFxuJiM0MztcdCAqIGNhbm5vdCBiZSBjYXJyaWVkIHRocm91Z2ggYSBzaW5nbGUtYmlvIGlubGluZSBjb21wbGV0aW9uLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogLUVOT1RCTEsgaXMgdGhlIHByaXZhdGUgc2VudGluZWwgcmV0dXJuZWQgYnkgaW9tYXBfZGlvX3NpbXBsZSgpXG4mIzQzO1x0ICogd2hlbiBpdCBkZWNpZGVzIHRoZSByZXF1ZXN0IGRvZXMgbm90IGZpdCB0aGUgZmFzdCBwYXRoLlxuJiM0MztcdCAqIEluIHRoYXQgY2FzZSB3ZSBwcm9jZWVkIHRvIHRoZSBnZW5lcmljIF9faW9tYXBfZGlvX3J3KCkgc2xvd1xuJiM0MztcdCAqIHBhdGguICBBbnkgb3RoZXIgZXJybm8gaXMgYSByZWFsIHJlc3VsdCBhbmQgaXMgcHJvcGFnYXRlZCBhcy1pcyxcbiYjNDM7XHQgKiBpbiBwYXJ0aWN1bGFyIC1FQUdBSU4gZm9yIElPQ0JfTk9XQUlUIG11c3QgcmVhY2ggdGhlIGNhbGxlci5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIWRvcHMgXHUwMDI2XHUwMDI2ICFkb25lX2JlZm9yZSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoaW9jYiwgaXRlciwgZGlvX2ZsYWdzKSkge1xuJiM0MztcdFx0cmV0ID0gaW9tYXBfZGlvX3NpbXBsZShpb2NiLCBpdGVyLCBvcHMsIHByaXZhdGUsIGRpb19mbGFncyk7XG4mIzQzO1x0XHRpZiAocmV0ICE9IC1FTk9UQkxLKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdH1cbiBcbiBcdGRpbyA9IF9faW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIG9wcywgZG9wcywgZGlvX2ZsYWdzLCBwcml2YXRlLFxuIFx0XHRcdCAgICAgZG9uZV9iZWZvcmUpO1xuQEAgLTkwMiwzICYjNDM7MTE1NywxMSBAQCBpb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsXG4gXHRyZXR1cm4gaW9tYXBfZGlvX2NvbXBsZXRlKGRpbyk7XG4gfVxuIEVYUE9SVF9TWU1CT0xfR1BMKGlvbWFwX2Rpb19ydyk7XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IF9faW5pdCBpb21hcF9kaW9faW5pdCh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIGJpb3NldF9pbml0KFx1MDAyNmlvbWFwX2Rpb19zaW1wbGVfcG9vbCwgNCxcbiYjNDM7XHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyksXG4mIzQzO1x0XHRcdCAgIEJJT1NFVF9ORUVEX0JWRUNTIHwgQklPU0VUX1BFUkNQVV9DQUNIRSk7XG4mIzQzO31cbiYjNDM7ZnNfaW5pdGNhbGwoaW9tYXBfZGlvX2luaXQpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEyOjIwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7aW9tYXBfZGlvX3NpbXBsZSYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29yayYjMzQ7LAogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlX2VuZF9pbyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZhc3QgcGF0aCBmb3IgZGlyZWN0IEkvTyByZWFkcyAoYGlvbWFwX2Rpb19zaW1wbGVgKSBpbiB0aGUgaW9tYXAgc3Vic3lzdGVtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgSS9PIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBkaXJlY3QgSS9PIHN5c3RlbSBjYWxscyBvbiBzdXBwb3J0ZWQgZmlsZXN5c3RlbXMuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZmFzdCBwYXRoIGhhbmRsZXMgdmFyaW91cyBJL08gY29uZGl0aW9ucyBjb3JyZWN0bHkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGE4MGI2OGFkNjA2OGYwOGNjN2U2ZjAxNmNiYTM3NTJhMTk2NjQ3YTIKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyOSAxMjoyMDowMyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmMKaW5kZXggYjQ4NWUzYjE5MWRhZmEuLjRkY2M5ZmM3NjZhOTJlIDEwMDY0NAotLS0gYS9mcy9pb21hcC9kaXJlY3QtaW8uYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9pb21hcC9kaXJlY3QtaW8uYwpAQCAtMTAsNiAmIzQzOzEwLDkgQEAKICNpbmNsdWRlICZsdDtsaW51eC9pb21hcC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3Rhc2tfaW9fYWNjb3VudGluZ19vcHMuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9mc2Vycm9yLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2tvYmplY3QuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvc3lzZnMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvaW5pdC5oJmd0OwogI2luY2x1ZGUgJiMzNDtpbnRlcm5hbC5oJiMzNDsKICNpbmNsdWRlICYjMzQ7dHJhY2UuaCYjMzQ7CiAKQEAgLTg4LDkgJiM0Mzs5MSw5IEBAIHN0YXRpYyBpbmxpbmUgZW51bSBmc2Vycm9yX3R5cGUgaW9tYXBfZGlvX2Vycl90eXBlKGNvbnN0IHN0cnVjdCBpb21hcF9kaW8gKmRpbykKIAlyZXR1cm4gRlNFUlJfRElSRUNUSU9fUkVBRDsKIH0KIAotc3RhdGljIGlubGluZSBib29sIHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IoY29uc3Qgc3RydWN0IGlvbWFwX2RpbyAqZGlvKQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGludCBlcnJvcikKIHsKLQlzd2l0Y2ggKGRpby0mZ3Q7ZXJyb3IpIHsKJiM0MzsJc3dpdGNoIChlcnJvcikgewogCWNhc2UgMDoKIAljYXNlIC1FQUdBSU46CiAJY2FzZSAtRU5PVEJMSzoKQEAgLTExMCw3ICYjNDM7MTEzLDcgQEAgc3NpemVfdCBpb21hcF9kaW9fY29tcGxldGUoc3RydWN0IGlvbWFwX2RpbyAqZGlvKQogCiAJaWYgKGRvcHMgJmFtcDsmYW1wOyBkb3BzLSZndDtlbmRfaW8pCiAJCXJldCA9IGRvcHMtJmd0O2VuZF9pbyhpb2NiLCBkaW8tJmd0O3NpemUsIHJldCwgZGlvLSZndDtmbGFncyk7Ci0JaWYgKHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IoZGlvKSkKJiM0MzsJaWYgKHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IoZGlvLSZndDtlcnJvcikpCiAJCWZzZXJyb3JfcmVwb3J0X2lvKGZpbGVfaW5vZGUoaW9jYi0mZ3Q7a2lfZmlscCksCiAJCQkJICBpb21hcF9kaW9fZXJyX3R5cGUoZGlvKSwgb2Zmc2V0LCBkaW8tJmd0O3NpemUsCiAJCQkJICBkaW8tJmd0O2Vycm9yLCBHRlBfTk9GUyk7CkBAIC0yMzcsMjMgJiM0MzsyNDAsMjkgQEAgc3RhdGljIHZvaWQgaW9tYXBfZGlvX2RvbmUoc3RydWN0IGlvbWFwX2RpbyAqZGlvKQogCWlvbWFwX2Rpb19jb21wbGV0ZV93b3JrKCZhbXA7ZGlvLSZndDthaW8ud29yayk7CiB9CiAKLXN0YXRpYyB2b2lkIF9faW9tYXBfZGlvX2Jpb19lbmRfaW8oc3RydWN0IGJpbyAqYmlvLCBib29sIGlubGluZV9jb21wbGV0aW9uKQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBpb21hcF9kaW9fYmlvX3JlbGVhc2VfcGFnZXMoc3RydWN0IGJpbyAqYmlvLAomIzQzOwkJdW5zaWduZWQgaW50IGRpb19mbGFncywgYm9vbCBlcnJvcikKIHsKLQlzdHJ1Y3QgaW9tYXBfZGlvICpkaW8gPSBiaW8tJmd0O2JpX3ByaXZhdGU7Ci0KIAlpZiAoYmlvX2ludGVncml0eShiaW8pKQogCQlmc19iaW9faW50ZWdyaXR5X2ZyZWUoYmlvKTsKIAotCWlmIChkaW8tJmd0O2ZsYWdzICZhbXA7IElPTUFQX0RJT19CT1VOQ0UpIHsKLQkJYmlvX2lvdl9pdGVyX3VuYm91bmNlKGJpbywgISFkaW8tJmd0O2Vycm9yLAotCQkJCWRpby0mZ3Q7ZmxhZ3MgJmFtcDsgSU9NQVBfRElPX1VTRVJfQkFDS0VEKTsKJiM0MzsJaWYgKGRpb19mbGFncyAmYW1wOyBJT01BUF9ESU9fQk9VTkNFKSB7CiYjNDM7CQliaW9faW92X2l0ZXJfdW5ib3VuY2UoYmlvLCBlcnJvciwKJiM0MzsJCQkJZGlvX2ZsYWdzICZhbXA7IElPTUFQX0RJT19VU0VSX0JBQ0tFRCk7CiAJCWJpb19wdXQoYmlvKTsKLQl9IGVsc2UgaWYgKGRpby0mZ3Q7ZmxhZ3MgJmFtcDsgSU9NQVBfRElPX1VTRVJfQkFDS0VEKSB7CiYjNDM7CX0gZWxzZSBpZiAoZGlvX2ZsYWdzICZhbXA7IElPTUFQX0RJT19VU0VSX0JBQ0tFRCkgewogCQliaW9fY2hlY2tfcGFnZXNfZGlydHkoYmlvKTsKIAl9IGVsc2UgewogCQliaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTsKIAkJYmlvX3B1dChiaW8pOwogCX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgX19pb21hcF9kaW9fYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8sIGJvb2wgaW5saW5lX2NvbXBsZXRpb24pCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9tYXBfZGlvICpkaW8gPSBiaW8tJmd0O2JpX3ByaXZhdGU7CiYjNDM7CiYjNDM7CWlvbWFwX2Rpb19iaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGRpby0mZ3Q7ZmxhZ3MsICEhZGlvLSZndDtlcnJvcik7CiAKIAkvKiBEbyBub3QgdG91Y2ggYmlvIGJlbG93LCB3ZSBqdXN0IGdhdmUgdXAgb3VyIHJlZmVyZW5jZS4gKi8KIApAQCAtMzk4LDYgJiM0Mzs0MDcsMTQgQEAgc3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX2Jpb19pdGVyX29uZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9tYXBfZGlvX2FsaWdubWVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLAomIzQzOwkJc3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IGRpb19mbGFncykKJiM0Mzt7CiYjNDM7CWlmIChkaW9fZmxhZ3MgJmFtcDsgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRCkKJiM0MzsJCXJldHVybiBpX2Jsb2Nrc2l6ZShpbm9kZSk7CiYjNDM7CXJldHVybiBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShiZGV2KTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKQogewogCWNvbnN0IHN0cnVjdCBpb21hcCAqaW9tYXAgPSAmYW1wO2l0ZXItJmd0O2lvbWFwOwpAQCAtNDE2LDEwICYjNDM7NDMzLDcgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbykKIAkgKiBGaWxlIHN5c3RlbXMgdGhhdCB3cml0ZSBvdXQgb2YgcGxhY2UgYW5kIGFsd2F5cyBhbGxvY2F0ZSBuZXcgYmxvY2tzCiAJICogbmVlZCBlYWNoIGJpbyB0byBiZSBibG9jayBhbGlnbmVkIGFzIHRoYXQmIzM5O3MgdGhlIHVuaXQgb2YgYWxsb2NhdGlvbi4KIAkgKi8KLQlpZiAoZGlvLSZndDtmbGFncyAmYW1wOyBJT01BUF9ESU9fRlNCTE9DS19BTElHTkVEKQotCQlhbGlnbm1lbnQgPSBmc19ibG9ja19zaXplOwotCWVsc2UKLQkJYWxpZ25tZW50ID0gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoaW9tYXAtJmd0O2JkZXYpOwomIzQzOwlhbGlnbm1lbnQgPSBpb21hcF9kaW9fYWxpZ25tZW50KGlub2RlLCBpb21hcC0mZ3Q7YmRldiwgZGlvLSZndDtmbGFncyk7CiAKIAlpZiAoKHBvcyB8IGxlbmd0aCkgJmFtcDsgKGFsaWdubWVudCAtIDEpKQogCQlyZXR1cm4gLUVJTlZBTDsKQEAgLTg4OCwxMiAmIzQzOzkwMiwyNTMgQEAgX19pb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiB9CiBFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19ydyk7CiAKJiM0MztzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSB7CiYjNDM7CXN0cnVjdCBraW9jYgkJKmlvY2I7CiYjNDM7CXNpemVfdAkJCXNpemU7CiYjNDM7CXVuc2lnbmVkIGludAkJZGlvX2ZsYWdzOwomIzQzOwlzdHJ1Y3Qgd29ya19zdHJ1Y3QJd29yazsKJiM0MzsJLyoKJiM0MzsJICogQWxpZ24gQGJpbyB0byBhIGNhY2hlbGluZSBib3VuZGFyeSBzbyB0aGF0LCBjb21iaW5lZCB3aXRoIHRoZQomIzQzOwkgKiBmcm9udF9wYWQgcGFzc2VkIHRvIGJpb3NldF9pbml0KCksIHRoZSBiaW8gc2l0cyBhdCB0aGUgc3RhcnQgb2YKJiM0MzsJICogYSBjYWNoZWxpbmUgaW4gbWVtb3J5IHJldHVybmVkIGJ5IHRoZSAoSFdDQUNIRS1hbGlnbmVkKSBiaW8KJiM0MzsJICogc2xhYi4gIFRoaXMga2VlcHMgdGhlIGhvdCBmaWVsZHMgYmxvY2sgbGF5ZXIgdG91Y2hlcyBvbiBzdWJtaXQKJiM0MzsJICogYW5kIGNvbXBsZXRpb24gKGJpX2l0ZXIsIGJpX3N0YXR1cywgLi4uKSB3aXRoaW4gYSBzaW5nbGUgbGluZS4KJiM0MzsJICovCiYjNDM7CXN0cnVjdCBiaW8JYmlvIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGJpb19zZXQgaW9tYXBfZGlvX3NpbXBsZV9wb29sOwomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyKQomIzQzO3sKJiM0MzsJc3RydWN0IGJpbyAqYmlvID0gJmFtcDtzci0mZ3Q7YmlvOwomIzQzOwlzdHJ1Y3Qga2lvY2IgKmlvY2IgPSBzci0mZ3Q7aW9jYjsKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi0mZ3Q7a2lfZmlscCk7CiYjNDM7CWludCBlcnJvciA9IGJsa19zdGF0dXNfdG9fZXJybm8oYmlvLSZndDtiaV9zdGF0dXMpOwomIzQzOwlzc2l6ZV90IHJldCA9IGVycm9yOwomIzQzOwomIzQzOwlpZiAobGlrZWx5KCFyZXQpKSB7CiYjNDM7CQlyZXQgPSBzci0mZ3Q7c2l6ZTsKJiM0MzsJCWlvY2ItJmd0O2tpX3BvcyAmIzQzOz0gcmV0OwomIzQzOwl9IGVsc2UgaWYgKHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IocmV0KSkgewomIzQzOwkJZnNlcnJvcl9yZXBvcnRfaW8oaW5vZGUsIEZTRVJSX0RJUkVDVElPX1JFQUQsIGlvY2ItJmd0O2tpX3BvcywKJiM0MzsJCQkJICBzci0mZ3Q7c2l6ZSwgcmV0LCBHRlBfTk9GUyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaW9tYXBfZGlvX2Jpb19yZWxlYXNlX3BhZ2VzKGJpbywgc3ItJmd0O2Rpb19mbGFncywgcmV0ICZsdDsgMCk7CiYjNDM7CWlub2RlX2Rpb19lbmQoaW5vZGUpOwomIzQzOwl0cmFjZV9pb21hcF9kaW9fY29tcGxldGUoaW9jYiwgZXJyb3IsIHJldCk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB2b2lkIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IgPQomIzQzOwkJCWNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgd29yayk7CiYjNDM7CiYjNDM7CVdSSVRFX09OQ0Uoc3ItJmd0O2lvY2ItJmd0O3ByaXZhdGUsIE5VTEwpOwomIzQzOwlzci0mZ3Q7aW9jYi0mZ3Q7a2lfY29tcGxldGUoc3ItJmd0O2lvY2IsIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW8oc3RydWN0IGJpbyAqYmlvKQomIzQzO3sKJiM0MzsJc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyID0KJiM0MzsJCWNvbnRhaW5lcl9vZihiaW8sIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pOwomIzQzOwomIzQzOwlpZiAodW5saWtlbHkoc3ItJmd0O2Jpby5iaV9zdGF0dXMpKSB7CiYjNDM7CQlzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShzci0mZ3Q7aW9jYi0mZ3Q7a2lfZmlscCk7CiYjNDM7CiYjNDM7CQlJTklUX1dPUksoJmFtcDtzci0mZ3Q7d29yaywgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrKTsKJiM0MzsJCXF1ZXVlX3dvcmsoaW5vZGUtJmd0O2lfc2ItJmd0O3NfZGlvX2RvbmVfd3EsICZhbXA7c3ItJmd0O3dvcmspOwomIzQzOwkJcmV0dXJuOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNyLSZndDtpb2NiLSZndDtraV9jb21wbGV0ZShzci0mZ3Q7aW9jYiwgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcikpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoc3RydWN0IGtpb2NiICppb2NiLAomIzQzOwkJc3RydWN0IGlvdl9pdGVyICppdGVyLCB1bnNpZ25lZCBpbnQgZGlvX2ZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi0mZ3Q7a2lfZmlscCk7CiYjNDM7CXNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpOwomIzQzOwomIzQzOwlpZiAoaW92X2l0ZXJfcncoaXRlcikgIT0gUkVBRCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKCFjb3VudCkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJLyoKJiM0MzsJICogU2ltcGxlIGRpbyBpcyBhbiBvcHRpbWl6YXRpb24gZm9yIHNtYWxsIElPLiBGaWx0ZXIgb3V0IGxhcmdlIElPCiYjNDM7CSAqIGVhcmx5IGFzIGl0JiMzOTtzIHRoZSBtb3N0IGNvbW1vbiBjYXNlIHRvIGZhaWwgZm9yIHR5cGljYWwgZGlyZWN0IElPCiYjNDM7CSAqIHdvcmtsb2Fkcy4KJiM0MzsJICovCiYjNDM7CWlmIChjb3VudCAmZ3Q7IGlub2RlLSZndDtpX3NiLSZndDtzX2Jsb2Nrc2l6ZSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsJaWYgKGRpb19mbGFncyAmYW1wOyAoSU9NQVBfRElPX0ZPUkNFX1dBSVQgfCBJT01BUF9ESU9fUEFSVElBTCB8CiYjNDM7CQkJIElPTUFQX0RJT19CT1VOQ0UpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAoaW9jYi0mZ3Q7a2lfcG9zICYjNDM7IGNvdW50ICZndDsgaV9zaXplX3JlYWQoaW5vZGUpKQomIzQzOwkJcmV0dXJuIGZhbHNlOwomIzQzOwlpZiAoSVNfRU5DUllQVEVEKGlub2RlKSkKJiM0MzsJCXJldHVybiBmYWxzZTsKJiM0MzsKJiM0MzsJcmV0dXJuIHRydWU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLAomIzQzOwkJc3RydWN0IGlvdl9pdGVyICppdGVyLCBjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsCiYjNDM7CQl2b2lkICpwcml2YXRlLCB1bnNpZ25lZCBpbnQgZGlvX2ZsYWdzKQomIzQzO3sKJiM0MzsJc3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi0mZ3Q7a2lfZmlscCk7CiYjNDM7CXNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpOwomIzQzOwlzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3I7CiYjNDM7CXVuc2lnbmVkIGludCBhbGlnbm1lbnQ7CiYjNDM7CXN0cnVjdCBpb21hcF9pdGVyIGlvbWkgPSB7CiYjNDM7CQkuaW5vZGUJCT0gaW5vZGUsCiYjNDM7CQkucG9zCQk9IGlvY2ItJmd0O2tpX3BvcywKJiM0MzsJCS5sZW4JCT0gY291bnQsCiYjNDM7CQkuZmxhZ3MJCT0gSU9NQVBfRElSRUNULAomIzQzOwkJLnByaXZhdGUJPSBwcml2YXRlLAomIzQzOwl9OwomIzQzOwlzdHJ1Y3QgYmlvICpiaW87CiYjNDM7CWJvb2wgd2FpdF9mb3JfY29tcGxldGlvbiA9IGlzX3N5bmNfa2lvY2IoaW9jYik7CiYjNDM7CXNzaXplX3QgcmV0OwomIzQzOwomIzQzOwlpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9OT1dBSVQpCiYjNDM7CQlpb21pLmZsYWdzIHw9IElPTUFQX05PV0FJVDsKJiM0MzsKJiM0MzsJcmV0ID0ga2lvY2Jfd3JpdGVfYW5kX3dhaXQoaW9jYiwgY291bnQpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJaW5vZGVfZGlvX2JlZ2luKGlub2RlKTsKJiM0MzsKJiM0MzsJcmV0ID0gb3BzLSZndDtpb21hcF9iZWdpbihpbm9kZSwgaW9taS5wb3MsIGNvdW50LCBpb21pLmZsYWdzLAomIzQzOwkJCSAgICAgICAmYW1wO2lvbWkuaW9tYXAsICZhbXA7aW9taS5zcmNtYXApOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlpbm9kZV9kaW9fZW5kKGlub2RlKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKGlvbWkuaW9tYXAudHlwZSAhPSBJT01BUF9NQVBQRUQgfHwKJiM0MzsJICAgIGlvbWkuaW9tYXAub2Zmc2V0ICYjNDM7IGlvbWkuaW9tYXAubGVuZ3RoICZsdDsgaW9taS5wb3MgJiM0MzsgY291bnQgfHwKJiM0MzsJICAgIChpb21pLmlvbWFwLmZsYWdzICZhbXA7IElPTUFQX0ZfSU5URUdSSVRZKSkgewomIzQzOwkJcmV0ID0gLUVOT1RCTEs7CiYjNDM7CQlnb3RvIG91dF9pb21hcF9lbmQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJYWxpZ25tZW50ID0gaW9tYXBfZGlvX2FsaWdubWVudChpbm9kZSwgaW9taS5pb21hcC5iZGV2LCBkaW9fZmxhZ3MpOwomIzQzOwlpZiAoKGlvbWkucG9zIHwgY291bnQpICZhbXA7IChhbGlnbm1lbnQgLSAxKSkgewomIzQzOwkJcmV0ID0gLUVJTlZBTDsKJiM0MzsJCWdvdG8gb3V0X2lvbWFwX2VuZDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXdhaXRfZm9yX2NvbXBsZXRpb24gJmFtcDsmYW1wOyB1bmxpa2VseSghaW5vZGUtJmd0O2lfc2ItJmd0O3NfZGlvX2RvbmVfd3EpKSB7CiYjNDM7CQlyZXQgPSBzYl9pbml0X2Rpb19kb25lX3dxKGlub2RlLSZndDtpX3NiKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gb3V0X2lvbWFwX2VuZDsKJiM0MzsJfQomIzQzOwomIzQzOwl0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgZGlvX2ZsYWdzLCAwKTsKJiM0MzsKJiM0MzsJaWYgKHVzZXJfYmFja2VkX2l0ZXIoaXRlcikpCiYjNDM7CQlkaW9fZmxhZ3MgfD0gSU9NQVBfRElPX1VTRVJfQkFDS0VEOwomIzQzOwomIzQzOwliaW8gPSBiaW9fYWxsb2NfYmlvc2V0KGlvbWkuaW9tYXAuYmRldiwKJiM0MzsJCQliaW9faW92X3ZlY3NfdG9fYWxsb2MoaXRlciwgQklPX01BWF9WRUNTKSwKJiM0MzsJCQlSRVFfT1BfUkVBRCwKJiM0MzsJCQlHRlBfS0VSTkVMLCAmYW1wO2lvbWFwX2Rpb19zaW1wbGVfcG9vbCk7CiYjNDM7CXNyID0gY29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7CiYjNDM7CXNyLSZndDtpb2NiID0gaW9jYjsKJiM0MzsJc3ItJmd0O2Rpb19mbGFncyA9IGRpb19mbGFnczsKJiM0MzsKJiM0MzsJYmlvLSZndDtiaV9pdGVyLmJpX3NlY3RvciA9IGlvbWFwX3NlY3RvcigmYW1wO2lvbWkuaW9tYXAsIGlvbWkucG9zKTsKJiM0MzsJYmlvLSZndDtiaV9pb3ByaW8gPSBpb2NiLSZndDtraV9pb3ByaW87CiYjNDM7CiYjNDM7CXJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBhbGlnbm1lbnQgLSAxKTsKJiM0MzsJaWYgKHVubGlrZWx5KHJldCkpCiYjNDM7CQlnb3RvIG91dF9iaW9fcHV0OwomIzQzOwomIzQzOwlpZiAoYmlvLSZndDtiaV9pdGVyLmJpX3NpemUgIT0gY291bnQpIHsKJiM0MzsJCWlvdl9pdGVyX3JldmVydChpdGVyLCBiaW8tJmd0O2JpX2l0ZXIuYmlfc2l6ZSk7CiYjNDM7CQlyZXQgPSAtRU5PVEJMSzsKJiM0MzsJCWdvdG8gb3V0X2Jpb19yZWxlYXNlX3BhZ2VzOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNyLSZndDtzaXplID0gYmlvLSZndDtiaV9pdGVyLmJpX3NpemU7CiYjNDM7CiYjNDM7CWlmIChkaW9fZmxhZ3MgJmFtcDsgSU9NQVBfRElPX1VTRVJfQkFDS0VEKQomIzQzOwkJYmlvX3NldF9wYWdlc19kaXJ0eShiaW8pOwomIzQzOwomIzQzOwlpZiAoaW9jYi0mZ3Q7a2lfZmxhZ3MgJmFtcDsgSU9DQl9OT1dBSVQpCiYjNDM7CQliaW8tJmd0O2JpX29wZiB8PSBSRVFfTk9XQUlUOwomIzQzOwlpZiAoKGlvY2ItJmd0O2tpX2ZsYWdzICZhbXA7IElPQ0JfSElQUkkpICZhbXA7JmFtcDsgIXdhaXRfZm9yX2NvbXBsZXRpb24pIHsKJiM0MzsJCWJpby0mZ3Q7Ymlfb3BmIHw9IFJFUV9QT0xMRUQ7CiYjNDM7CQlXUklURV9PTkNFKGlvY2ItJmd0O3ByaXZhdGUsIGJpbyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKG9wcy0mZ3Q7aW9tYXBfZW5kKQomIzQzOwkJb3BzLSZndDtpb21hcF9lbmQoaW5vZGUsIGlvbWkucG9zLCBjb3VudCwgY291bnQsIGlvbWkuZmxhZ3MsCiYjNDM7CQkJICAgICAgICZhbXA7aW9taS5pb21hcCk7CiYjNDM7CiYjNDM7CWlmICghd2FpdF9mb3JfY29tcGxldGlvbikgewomIzQzOwkJYmlvLSZndDtiaV9lbmRfaW8gPSBpb21hcF9kaW9fc2ltcGxlX2VuZF9pbzsKJiM0MzsJCXN1Ym1pdF9iaW8oYmlvKTsKJiM0MzsJCXRyYWNlX2lvbWFwX2Rpb19yd19xdWV1ZWQoaW5vZGUsIGlvbWkucG9zLCBjb3VudCk7CiYjNDM7CQlyZXR1cm4gLUVJT0NCUVVFVUVEOwomIzQzOwl9CiYjNDM7CiYjNDM7CXN1Ym1pdF9iaW9fd2FpdChiaW8pOwomIzQzOwlyZXR1cm4gaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcik7CiYjNDM7CiYjNDM7b3V0X2Jpb19yZWxlYXNlX3BhZ2VzOgomIzQzOwliaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTsKJiM0MztvdXRfYmlvX3B1dDoKJiM0MzsJYmlvX3B1dChiaW8pOwomIzQzO291dF9pb21hcF9lbmQ6CiYjNDM7CWlmIChvcHMtJmd0O2lvbWFwX2VuZCkKJiM0MzsJCW9wcy0mZ3Q7aW9tYXBfZW5kKGlub2RlLCBpb21pLnBvcywgY291bnQsIDAsIGlvbWkuZmxhZ3MsCiYjNDM7CQkJICAgICAgICZhbXA7aW9taS5pb21hcCk7CiYjNDM7CWlub2RlX2Rpb19lbmQoaW5vZGUpOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIHNzaXplX3QKIGlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlciwKIAkJY29uc3Qgc3RydWN0IGlvbWFwX29wcyAqb3BzLCBjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvX29wcyAqZG9wcywKIAkJdW5zaWduZWQgaW50IGRpb19mbGFncywgdm9pZCAqcHJpdmF0ZSwgc2l6ZV90IGRvbmVfYmVmb3JlKQogewogCXN0cnVjdCBpb21hcF9kaW8gKmRpbzsKJiM0MzsJc3NpemVfdCByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIEZhc3QgcGF0aCBmb3Igc21hbGwsIGJsb2NrLWFsaWduZWQgZGlyZWN0IEkvT3MgdGhhdCBtYXAgdG8gYQomIzQzOwkgKiBzaW5nbGUgY29udGlndW91cyBvbi1kaXNrIGV4dGVudC4KJiM0MzsJICoKJiM0MzsJICogQGRvcHMgbXVzdCBiZSBOVUxMOiBhIG5vbi1OVUxMIEBkb3BzIG1lYW5zIHRoZSBjYWxsZXIgd2FudHMgaXRzCiYjNDM7CSAqIC0mZ3Q7ZW5kX2lvIC8gLSZndDtzdWJtaXRfaW8gaG9va3MgaW52b2tlZCwgYW5kIGluIHBhcnRpY3VsYXIgd2FudHMgaXRzCiYjNDM7CSAqIGJpb3MgdG8gYmUgYWxsb2NhdGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0tcHJpdmF0ZSBAZG9wcy0mZ3Q7YmlvX3NldAomIzQzOwkgKiAod2hvc2UgZnJvbnRfcGFkIHNpemVzIGEgZmlsZXN5c3RlbS1wcml2YXRlIHdyYXBwZXIgYXJvdW5kIHRoZQomIzQzOwkgKiBiaW8pLiAgVGhlIGZhc3QgcGF0aCBpbnN0ZWFkIGFsbG9jYXRlcyBmcm9tIHRoZSBzaGFyZWQKJiM0MzsJICogaW9tYXBfZGlvX3NpbXBsZV9wb29sLCB3aG9zZSBmcm9udF9wYWQgbWF0Y2hlcwomIzQzOwkgKiBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZTsgdGhlIHR3byB3cmFwcGVycyBhcmUgbm90CiYjNDM7CSAqIGludGVyY2hhbmdlYWJsZSwgc28gd2UgbXVzdCBmYWxsIGJhY2sgdG8gX19pb21hcF9kaW9fcncoKSBpbgomIzQzOwkgKiB0aGF0IGNhc2UuCiYjNDM7CSAqCiYjNDM7CSAqIEBkb25lX2JlZm9yZSBtdXN0IGJlIHplcm86IGEgbm9uLXplcm8gY2FsbGVyLWFjY3VtdWxhdGVkIHJlc2lkdWFsCiYjNDM7CSAqIGNhbm5vdCBiZSBjYXJyaWVkIHRocm91Z2ggYSBzaW5nbGUtYmlvIGlubGluZSBjb21wbGV0aW9uLgomIzQzOwkgKgomIzQzOwkgKiAtRU5PVEJMSyBpcyB0aGUgcHJpdmF0ZSBzZW50aW5lbCByZXR1cm5lZCBieSBpb21hcF9kaW9fc2ltcGxlKCkKJiM0MzsJICogd2hlbiBpdCBkZWNpZGVzIHRoZSByZXF1ZXN0IGRvZXMgbm90IGZpdCB0aGUgZmFzdCBwYXRoLgomIzQzOwkgKiBJbiB0aGF0IGNhc2Ugd2UgcHJvY2VlZCB0byB0aGUgZ2VuZXJpYyBfX2lvbWFwX2Rpb19ydygpIHNsb3cKJiM0MzsJICogcGF0aC4gIEFueSBvdGhlciBlcnJubyBpcyBhIHJlYWwgcmVzdWx0IGFuZCBpcyBwcm9wYWdhdGVkIGFzLWlzLAomIzQzOwkgKiBpbiBwYXJ0aWN1bGFyIC1FQUdBSU4gZm9yIElPQ0JfTk9XQUlUIG11c3QgcmVhY2ggdGhlIGNhbGxlci4KJiM0MzsJICovCiYjNDM7CWlmICghZG9wcyAmYW1wOyZhbXA7ICFkb25lX2JlZm9yZSAmYW1wOyZhbXA7CiYjNDM7CSAgICBpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZChpb2NiLCBpdGVyLCBkaW9fZmxhZ3MpKSB7CiYjNDM7CQlyZXQgPSBpb21hcF9kaW9fc2ltcGxlKGlvY2IsIGl0ZXIsIG9wcywgcHJpdmF0ZSwgZGlvX2ZsYWdzKTsKJiM0MzsJCWlmIChyZXQgIT0gLUVOT1RCTEspCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJfQogCiAJZGlvID0gX19pb21hcF9kaW9fcncoaW9jYiwgaXRlciwgb3BzLCBkb3BzLCBkaW9fZmxhZ3MsIHByaXZhdGUsCiAJCQkgICAgIGRvbmVfYmVmb3JlKTsKQEAgLTkwMiwzICYjNDM7MTE1NywxMSBAQCBpb21hcF9kaW9fcncoc3RydWN0IGtpb2NiICppb2NiLCBzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsCiAJcmV0dXJuIGlvbWFwX2Rpb19jb21wbGV0ZShkaW8pOwogfQogRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX3J3KTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IF9faW5pdCBpb21hcF9kaW9faW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIGJpb3NldF9pbml0KCZhbXA7aW9tYXBfZGlvX3NpbXBsZV9wb29sLCA0LAomIzQzOwkJCSAgIG9mZnNldG9mKHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pLAomIzQzOwkJCSAgIEJJT1NFVF9ORUVEX0JWRUNTIHwgQklPU0VUX1BFUkNQVV9DQUNIRSk7CiYjNDM7fQomIzQzO2ZzX2luaXRjYWxsKGlvbWFwX2Rpb19pbml0KTsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTI6MjA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMzMAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDI1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBOZXcgRGlyZWN0IEkvTyBGYXN0IFBhdGggUGF0Y2gqKgoKT2theSwgc28gdGhlcmUmIzM5O3MgYSBuZXcgcGF0Y2ggYWltZWQgYXQgYWNjZWxlcmF0aW5nIGRpcmVjdCBJL08gcmVhZHMgd2l0aGluIGBmcy9pb21hcC9kaXJlY3QtaW8uY2AuIFRoZSBjb3JlIGlkZWEgaXMgYSAmIzM0O3NpbXBsZSYjMzQ7IGZhc3QgcGF0aCwgaGFuZGxlZCBieSBhIG5ldyBmdW5jdGlvbiwgYGlvbWFwX2Rpb19zaW1wbGVgLiBJdCBsb29rcyBsaWtlIGBpb21hcF9kaW9fc2ltcGxlYCBpcyBjb25kaXRpb25hbGx5IGNhbGxlZCBmcm9tIGBpb21hcF9kaW9fcndgIGJhc2VkIG9uIHRoZSByZXR1cm4gdmFsdWUgb2YgYGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkYC4gVGhpcyBpcyBhIHByZXR0eSBzaWduaWZpY2FudCBmdW5jdGlvbmFsIGNoYW5nZSwgaW1wYWN0aW5nIHRoZSBoZWFydCBvZiBpb21hcCBkaXJlY3QgSS9PLCBzbyBmdXp6aW5nIHRoaXMgaXMgYWJzb2x1dGVseSBjcml0aWNhbC4KCkxldCYjMzk7cyBkaXZlIGludG8gdGhlIGRldGFpbHMuIEkgc2VlIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgc3VpdGUgb2YgbmV3IGZ1bmN0aW9uczogYGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkYCwgYGlvbWFwX2Rpb19zaW1wbGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZWAsIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtgLCBhbmQgYGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvYC4gQW5kLCBhcyBleHBlY3RlZCwgaXQgbW9kaWZpZXMgYGlvbWFwX2Rpb19yd2AgdG8gYWN0dWFsbHkgbGV2ZXJhZ2UgdGhhdCBuZXcgYGlvbWFwX2Rpb19zaW1wbGVgIGZhc3QgcGF0aC4KCkJlZm9yZSB3ZSBldmVuIHRoaW5rIGFib3V0IGZ1enppbmcsIGxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgZnMvaW9tYXAvZGlyZWN0LWlvLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19GU19JT01BUGAgaXMgZW5hYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBmcy9pb21hcC9NYWtlZmlsZWAgb3IgYGZzL2lvbWFwL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIHVuZGVyc3RhbmQgYWxsIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbiBvcHRpb25zLCBidXQgdGhpcyBzaG91bGQgYmUgc3RyYWlnaHRmb3J3YXJkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0NPTkZJR19GU19JT01BUCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2ZzL2lvbWFwLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtmcy9pb21hcC9NYWtlZmlsZT03PWNjZmxhZ3MteSAmIzQzOz0gLUkgJChzcmMpXHRcdCMgbmVlZGVkIGZvciB0cmFjZSBldmVudHNcbmZzL2lvbWFwL01ha2VmaWxlLTgtXG5mcy9pb21hcC9NYWtlZmlsZTo5Om9iai0kKENPTkZJR19GU19JT01BUClcdFx0JiM0Mzs9IGlvbWFwLm9cbmZzL2lvbWFwL01ha2VmaWxlLTEwLVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDcwNTQKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIENPTkZJR19GU19JT01BUCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYENPTkZJR19GU19JT01BUGAuIFdoYXQmIzM5O3MgbWFraW5nIHRoaXMgZnVuY3Rpb25hbGl0eSB0aWNrPyBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCYjMzk7cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYW5kIHNvdXJjZSBjb2RlLiBJIG5lZWQgdG8gZmlndXJlIG91dCB0aGUgZGVwZW5kZW5jaWVzLCB0aGUgdW5kZXJseWluZyBhc3N1bXB0aW9ucywgYW5kIGFueSBwb3RlbnRpYWwgY29uZmxpY3RzIHRoYXQgbWlnaHQgYXJpc2UgZnJvbSBlbmFibGluZyBvciBkaXNhYmxpbmcgdGhpcy4gSSBrbm93IHRoZSBnZW5lcmFsIHB1cnBvc2UsIElPTUFQIGlzIGFuIGltcG9ydGFudCBjb21wb25lbnQgZm9yIG1hbmFnaW5nIGRpcmVjdCBJL08uIE5vdywgbGV0JiMzOTtzIGV4cGxvcmUgdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGl0ZW0gaW4gZGV0YWlsLiBVbmRlcnN0YW5kaW5nIHRoZSBwcmVjaXNlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGBDT05GSUdfRlNfSU9NQVBgIGFuZCBvdGhlciByZWxhdGVkIGZlYXR1cmVzIOKAkyB0aGUgZmlsZXN5c3RlbSBsYXllcnMsIHRoZSBibG9jayBJL08gc3RhY2ssIGFuZCBhbnkgc3BlY2lmaWMgZHJpdmVyIGRlcGVuZGVuY2llcyDigJMgaXMgY3JpdGljYWwgaGVyZS4gSSYjMzk7bGwgbmVlZCB0byB0cmFjZSB0aHJvdWdoIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzIGFuZCBjb2RlIHRvIHNlZSBob3cgaXQgYWxsIGZpdHMgdG9nZXRoZXIsIHRoZSB1c3VhbCBwcm9jZXNzIHdoZW4gZGVjaXBoZXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBMZXQmIzM5O3Mgc3RhcnQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMjoyMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZWxlY3QgRlNfSU9NQVAmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtmcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvS2NvbmZpZz01OD1jb25maWcgRlNfREFYXG4tLVxuZnMvS2NvbmZpZy02MS1cdGRlcGVuZHMgb24gWk9ORV9ERVZJQ0VcbmZzL0tjb25maWc6NjI6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL0tjb25maWctNjMtXHRzZWxlY3QgREFYXG4tLVxuZnMvYnRyZnMvS2NvbmZpZz0zPWNvbmZpZyBCVFJGU19GU1xuLS1cbmZzL2J0cmZzL0tjb25maWctMTQtXHRzZWxlY3QgWlNURF9ERUNPTVBSRVNTXG5mcy9idHJmcy9LY29uZmlnOjE1Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9idHJmcy9LY29uZmlnLTE2LVx0c2VsZWN0IFJBSUQ2X1BRXG4tLVxuZnMvZXJvZnMvS2NvbmZpZz0zPWNvbmZpZyBFUk9GU19GU1xuLS1cbmZzL2Vyb2ZzL0tjb25maWctOC1cdHNlbGVjdCBDUllQVE9fREVGTEFURSBpZiBFUk9GU19GU19aSVBfQUNDRUxcbmZzL2Vyb2ZzL0tjb25maWc6OTpcdHNlbGVjdCBGU19JT01BUFxuZnMvZXJvZnMvS2NvbmZpZy0xMC1cdHNlbGVjdCBMWjRfREVDT01QUkVTUyBpZiBFUk9GU19GU19aSVBcbi0tXG5mcy9leGZhdC9LY29uZmlnPTM9Y29uZmlnIEVYRkFUX0ZTXG4tLVxuZnMvZXhmYXQvS2NvbmZpZy02LVx0c2VsZWN0IE5MU1xuZnMvZXhmYXQvS2NvbmZpZzo3Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9leGZhdC9LY29uZmlnLTgtXHRoZWxwXG4tLVxuZnMvZXh0Mi9LY29uZmlnPTI9Y29uZmlnIEVYVDJfRlNcbi0tXG5mcy9leHQyL0tjb25maWctNC1cdHNlbGVjdCBCVUZGRVJfSEVBRFxuZnMvZXh0Mi9LY29uZmlnOjU6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2V4dDIvS2NvbmZpZy02LVx0aGVscFxuLS1cbmZzL2V4dDQvS2NvbmZpZz0yPWNvbmZpZyBFWFQ0X0ZTXG4tLVxuZnMvZXh0NC9LY29uZmlnLTctXHRzZWxlY3QgQ1JDMzJcbmZzL2V4dDQvS2NvbmZpZzo4Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9leHQ0L0tjb25maWctOS1cdHNlbGVjdCBGU19FTkNSWVBUSU9OX0FMR1MgaWYgRlNfRU5DUllQVElPTlxuLS1cbmZzL2YyZnMvS2NvbmZpZz0yPWNvbmZpZyBGMkZTX0ZTXG4tLVxuZnMvZjJmcy9LY29uZmlnLTktXHRzZWxlY3QgRlNfRU5DUllQVElPTl9BTEdTIGlmIEZTX0VOQ1JZUFRJT05cbmZzL2YyZnMvS2NvbmZpZzoxMDpcdHNlbGVjdCBGU19JT01BUFxuZnMvZjJmcy9LY29uZmlnLTExLVx0c2VsZWN0IExaNF9DT01QUkVTUyBpZiBGMkZTX0ZTX0xaNFxuLS1cbmZzL2Z1c2UvS2NvbmZpZz0yPWNvbmZpZyBGVVNFX0ZTXG4tLVxuZnMvZnVzZS9LY29uZmlnLTQtXHRzZWxlY3QgRlNfUE9TSVhfQUNMXG5mcy9mdXNlL0tjb25maWc6NTpcdHNlbGVjdCBGU19JT01BUFxuZnMvZnVzZS9LY29uZmlnLTYtXHRoZWxwXG4tLVxuZnMvZ2ZzMi9LY29uZmlnPTI9Y29uZmlnIEdGUzJfRlNcbi0tXG5mcy9nZnMyL0tjb25maWctNy1cdHNlbGVjdCBRVU9UQUNUTFxuZnMvZ2ZzMi9LY29uZmlnOjg6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL2dmczIvS2NvbmZpZy05LVx0aGVscFxuLS1cbmZzL2hwZnMvS2NvbmZpZz0yPWNvbmZpZyBIUEZTX0ZTXG4tLVxuZnMvaHBmcy9LY29uZmlnLTUtXHRzZWxlY3QgQlVGRkVSX0hFQURcbmZzL2hwZnMvS2NvbmZpZzo2Olx0c2VsZWN0IEZTX0lPTUFQXG5mcy9ocGZzL0tjb25maWctNy1cdGhlbHBcbi0tXG5mcy9udGZzL0tjb25maWc9Mj1jb25maWcgTlRGU19GU1xuLS1cbmZzL250ZnMvS2NvbmZpZy00LVx0c2VsZWN0IE5MU1xuZnMvbnRmcy9LY29uZmlnOjU6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL250ZnMvS2NvbmZpZy02LVx0aGVscFxuLS1cbmZzL3hmcy9LY29uZmlnPTI9Y29uZmlnIFhGU19GU1xuLS1cbmZzL3hmcy9LY29uZmlnLTYtXHRzZWxlY3QgQ1JDMzJcbmZzL3hmcy9LY29uZmlnOjc6XHRzZWxlY3QgRlNfSU9NQVBcbmZzL3hmcy9LY29uZmlnLTgtXHRoZWxwXG4tLVxuZnMvem9uZWZzL0tjb25maWc9MT1jb25maWcgWk9ORUZTX0ZTXG4tLVxuZnMvem9uZWZzL0tjb25maWctNC1cdGRlcGVuZHMgb24gQkxLX0RFVl9aT05FRFxuZnMvem9uZWZzL0tjb25maWc6NTpcdHNlbGVjdCBGU19JT01BUFxuZnMvem9uZWZzL0tjb25maWctNi1cdHNlbGVjdCBDUkMzMlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEyOjIwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgyNzgKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA1NTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIERpcmVjdCBJL08gYW5kIGlvbWFwIGZvciBUYXJnZXRlZCBGdXp6aW5nKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgaG93IHRvIGVmZmVjdGl2ZWx5IHRhcmdldCBgaW9tYXBfZGlvX3NpbXBsZWAgYW5kIGl0cyByZWxhdGVkIGZ1bmN0aW9ucyBmb3IgZnV6emluZy4gU2luY2UgYEZTX0lPTUFQYCBpcyB3aWRlbHkgdXNlZCwgdGhlcmUmIzM5O3Mgbm8gbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSBpdCwgYnV0IGRlZmluaW5nIHNwZWNpZmljIGZpbGVzeXN0ZW1zIGxpa2UgYFhGU19GU2AsIGBFWFQ0X0ZTYCwgb3IgYEJUUkZTX0ZTYCB3aWxsIG1ha2Ugc3VyZSB0aGF0IGlvbWFwIGlzIGJlaW5nIHVzZWQsIGFsdGhvdWdoIHN5emthbGxlciBwcm9iYWJseSBhbHJlYWR5IGhhcyB0aG9zZSBjb3ZlcmVkLiBJIGNoZWNrZWQgZm9yIGFueSBzcGVjaWZpYyBjb25maWdzIHJlbGF0ZWQgdG8gYGlvbWFwX2Rpb19zaW1wbGVgLCBidXQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyBqdXN0IHBhcnQgb2YgYGRpcmVjdC1pby5jYC4KCk15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uIHRoZSBjb3JlIGZ1bmN0aW9ucy4gSGVyZSBhcmUgdGhlIG9uZXMgSSB3YW50IHRvIHplcm8gaW4gb246IGBpb21hcF9kaW9fc2ltcGxlYCwgYGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrYCwgYW5kIGBpb21hcF9kaW9fc2ltcGxlX2VuZF9pb2AuIEkgaW5pdGlhbGx5IHdvbmRlcmVkIGFib3V0IGBpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZGAsIHNpbmNlIGl0JiMzOTtzIGFuIGlubGluZSBmdW5jdGlvbiwgYnV0IEkgd2FudGVkIHRvIG1ha2Ugc3VyZSBpdCB3YXMgYWN0dWFsbHkgaW5saW5lZC4KCkEgcXVpY2sgY2hlY2sgY29uZmlybWVkIHRoYXQgaXQgaXMgaW5kZWVkIGlubGluZTogYHN0YXRpYyBpbmxpbmUgYm9vbCBpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZCguLi4pYC4gVGhlcmVmb3JlLCBJJiMzOTtsbCBleGNsdWRlIGl0IGZyb20gdGhlIHRhcmdldCBsaXN0LgoKSSBoYWQgY29uc2lkZXJlZCBgaW9tYXBfZGlvX3J3YCwgYnV0IHNpbmNlIGl0JiMzOTtzIGEgaGVhdmlseSB1c2VkIGZ1bmN0aW9uLCBJIHdhbnQgdG8gYXZvaWQgaXQgaW4gZmF2b3Igb2YgbmV3bHkgYWRkZWQgZnVuY3Rpb25zLgoKU28sIHRoZSBrZXkgZnVuY3Rpb25zIGZvciBmdXp6aW5nIGFyZTogYGlvbWFwX2Rpb19zaW1wbGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZWAsIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtgLCBhbmQgYGlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvYC4KCkZvciBlbmFibGluZyBjb25maWdzLCB3aGlsZSBgRlNfSU9NQVBgIHNob3VsZCB3b3JrLCBJIHNob3VsZCBzcGVjaWZ5IGVpdGhlciBgRlNfSU9NQVBgIG9yIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIG9yIGBCVFJGU19GU2AgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYSBmaWxlc3lzdGVtIHRoYXQgdXNlcyBpb21hcC4gSG93ZXZlciwgYEZTX0lPTUFQYCBzZWVtcyB0byBiZSBhIGhpZGRlbiBjb25maWcsIHNvIEkmIzM5O2xsIG5lZWQgdG8gZG91YmxlLWNoZWNrIGBmcy9LY29uZmlnYCB0byBjb25maXJtIHRoYXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTI6MjA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEZTX0lPTUFQJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZnMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2ZzL0tjb25maWc9MTI9Y29uZmlnIFZBTElEQVRFX0ZTX1BBUlNFUlxuLS1cbmZzL0tjb25maWctMTctXG5mcy9LY29uZmlnOjE4OmNvbmZpZyBGU19JT01BUFxuZnMvS2NvbmZpZy0xOS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMjoyMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NDA5CgkJCQkJCQlvdXRwdXQ6IDE1OQoJCQkJCQkJdGhvdWdodHM6IDM2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDb25maWd1cmF0aW9uIEFzc2Vzc21lbnQqKgoKT2theSwgc28gdGhpcyBpcyBhIGhpZGRlbiBjb25maWcsIGdvdCBpdC4gV2UgY291bGQgbGlzdCB0aGUgZmlsZXN5c3RlbSBjb25maWdzIGxpa2UgYFhGU19GU2AsIGBFWFQ0X0ZTYCwgYW5kIGBCVFJGU19GU2AgaW4gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LCBidXQgdGhvc2UgYXJlIGV4dHJlbWVseSBnZW5lcmljLiBCdXQgdGhlIHByb21wdCBzYWlkIG5vdCB0byBpbmNsdWRlIGdlbmVyaWMgY29uZmlncywgb25seSBvbmVzIHRoYXQgZGlyZWN0bHkgcmVsYXRlIHRvIHRoZSBtb2RpZmllZCBjb2RlLiBIbW0sIEkgY291bGQganVzdCBsZWF2ZSBgRW5hYmxlQ29uZmlnc2AgZW1wdHkgb3IgcHV0IGluIHRob3NlIHNwZWNpZmljIGZpbGVzeXN0ZW1zLgoKV2FpdCwgdGhlIHByb21wdCBzYWlkIHRvIGF2b2lkIHRoZSBnZW5lcmljIG9uZXMgc2luY2UgdGhleSBhcmUgYWxyZWFkeSBlbmFibGVkLiBTaW5jZSBgRlNfSU9NQVBgIGdldHMgc2VsZWN0ZWQgZm9yIHRob3NlIGdlbmVyaWMgZmlsZXN5c3RlbXMsIEkgdGhpbmsgSSYjMzk7bGwganVzdCBsZWF2ZSBgRW5hYmxlQ29uZmlnc2AgZW1wdHkgZm9yIG5vdy4KCkxldCBtZSBtYWtlIHN1cmUgbXkgcmVhc29uaW5nIGlzIHNvdW5kOiBUaGlzIHBhdGNoIGFkZHMgYSBmYXN0IHBhdGggZm9yIGRpcmVjdCBJL08gcmVhZHMgd2l0aGluIHRoZSBpb21hcCBzdWJzeXN0ZW0uIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIEkvTyBsb2dpYywgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB0aHJvdWdoIGRpcmVjdCBJL08gc3lzdGVtIGNhbGxzIG9uIGZpbGVzeXN0ZW1zIGxpa2UgWEZTLCBleHQ0LCBhbmQgYnRyZnMuIEl0ICpkZWZpbml0ZWx5KiBuZWVkcyBmdXp6aW5nIHRvIHZlcmlmeSB0aGF0IHRoZSBuZXcgZmFzdCBwYXRoIGhhbmRsZXMgdmFyaW91cyBJL08gc2NlbmFyaW9zIHByb3Blcmx5LgoKTGV0JiMzOTtzIGRvdWJsZS1jaGVjayBxdWlja2x5IGZvciBhbnkgb3RoZXIgZnVuY3Rpb25zLiBBaGEsIGBpb21hcF9kaW9fYmlvX3JlbGVhc2VfcGFnZXNgIGFuZCBgaW9tYXBfZGlvX2FsaWdubWVudGAgYXJlIGJvdGggaW5saW5lLCBhbmQgYGlvbWFwX2Rpb19pbml0YCBpcyBhbiBpbml0Y2FsbCwgc28gaXQgb25seSBydW5zIG9uY2UgYXQgYm9vdC4KClNvLCB0aGUgY3JpdGljYWwgc3ltYm9scyB0byBmb2N1cyBvbiBhcmU6CiogICBgaW9tYXBfZGlvX3NpbXBsZWAKKiAgIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlYAoqICAgYGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29ya2AKKiAgIGBpb21hcF9kaW9fc2ltcGxlX2VuZF9pb2AKCk9rYXksIG5vIG90aGVyIGNvbmZpZ3Mgc2VlbSByZWxldmFudC4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEyOjIwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfZW5kX2lvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmFzdCBwYXRoIGZvciBkaXJlY3QgSS9PIHJlYWRzIChgaW9tYXBfZGlvX3NpbXBsZWApIGluIHRoZSBpb21hcCBzdWJzeXN0ZW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBJL08gbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGRpcmVjdCBJL08gc3lzdGVtIGNhbGxzIG9uIHN1cHBvcnRlZCBmaWxlc3lzdGVtcy4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBmYXN0IHBhdGggaGFuZGxlcyB2YXJpb3VzIEkvTyBjb25kaXRpb25zIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtpb21hcF9kaW9fc2ltcGxlJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUmIzM0OywKICAgICYjMzQ7aW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrJiMzNDssCiAgICAmIzM0O2lvbWFwX2Rpb19zaW1wbGVfZW5kX2lvJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmFzdCBwYXRoIGZvciBkaXJlY3QgSS9PIHJlYWRzIChgaW9tYXBfZGlvX3NpbXBsZWApIGluIHRoZSBpb21hcCBzdWJzeXN0ZW0uIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0byBjb3JlIGtlcm5lbCBJL08gbG9naWMgdGhhdCBpcyByZWFjaGFibGUgZnJvbSB1c2Vyc3BhY2UgdmlhIGRpcmVjdCBJL08gc3lzdGVtIGNhbGxzIG9uIHN1cHBvcnRlZCBmaWxlc3lzdGVtcy4gSXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgdGhlIG5ldyBmYXN0IHBhdGggaGFuZGxlcyB2YXJpb3VzIEkvTyBjb25kaXRpb25zIGNvcnJlY3RseS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEyOjIwOjA1LjAzMDk0NTQxMloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI0ODY1NjczOTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVcIixcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVcIixcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29ya1wiLFxuICAgIFwiaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZhc3QgcGF0aCBmb3IgZGlyZWN0IEkvTyByZWFkcyAoYGlvbWFwX2Rpb19zaW1wbGVgKSBpbiB0aGUgaW9tYXAgc3Vic3lzdGVtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgSS9PIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBkaXJlY3QgSS9PIHN5c3RlbSBjYWxscyBvbiBzdXBwb3J0ZWQgZmlsZXN5c3RlbXMuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZmFzdCBwYXRoIGhhbmRsZXMgdmFyaW91cyBJL08gY29uZGl0aW9ucyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEyOjIwOjA1LjAzMDk1OTc1MloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTM0MzczMzM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYTgwYjY4YWQ2MDY4ZjA4Y2M3ZTZmMDE2Y2JhMzc1MmExOTY2NDdhMlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyOSAxMjoyMDowMyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9mcy9pb21hcC9kaXJlY3QtaW8uYyBiL2ZzL2lvbWFwL2RpcmVjdC1pby5jXFxuaW5kZXggYjQ4NWUzYjE5MWRhZmEuLjRkY2M5ZmM3NjZhOTJlIDEwMDY0NFxcbi0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jXFxuKysrIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcXG5AQCAtMTAsNiArMTAsOSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvaW9tYXAuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3Rhc2tfaW9fYWNjb3VudGluZ19vcHMuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2ZzZXJyb3IuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2tvYmplY3QuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N5c2ZzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcXCJpbnRlcm5hbC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwidHJhY2UuaFxcXCJcXG4gXFxuQEAgLTg4LDkgKzkxLDkgQEAgc3RhdGljIGlubGluZSBlbnVtIGZzZXJyb3JfdHlwZSBpb21hcF9kaW9fZXJyX3R5cGUoY29uc3Qgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbiBcXHRyZXR1cm4gRlNFUlJfRElSRUNUSU9fUkVBRDtcXG4gfVxcbiBcXG4tc3RhdGljIGlubGluZSBib29sIHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IoY29uc3Qgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbitzdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JlcG9ydF9kaW9fZnNlcnJvcihpbnQgZXJyb3IpXFxuIHtcXG4tXFx0c3dpdGNoIChkaW8tXFx1MDAzZWVycm9yKSB7XFxuK1xcdHN3aXRjaCAoZXJyb3IpIHtcXG4gXFx0Y2FzZSAwOlxcbiBcXHRjYXNlIC1FQUdBSU46XFxuIFxcdGNhc2UgLUVOT1RCTEs6XFxuQEAgLTExMCw3ICsxMTMsNyBAQCBzc2l6ZV90IGlvbWFwX2Rpb19jb21wbGV0ZShzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuIFxcbiBcXHRpZiAoZG9wcyBcXHUwMDI2XFx1MDAyNiBkb3BzLVxcdTAwM2VlbmRfaW8pXFxuIFxcdFxcdHJldCA9IGRvcHMtXFx1MDAzZWVuZF9pbyhpb2NiLCBkaW8tXFx1MDAzZXNpemUsIHJldCwgZGlvLVxcdTAwM2VmbGFncyk7XFxuLVxcdGlmIChzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGRpbykpXFxuK1xcdGlmIChzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKGRpby1cXHUwMDNlZXJyb3IpKVxcbiBcXHRcXHRmc2Vycm9yX3JlcG9ydF9pbyhmaWxlX2lub2RlKGlvY2ItXFx1MDAzZWtpX2ZpbHApLFxcbiBcXHRcXHRcXHRcXHQgIGlvbWFwX2Rpb19lcnJfdHlwZShkaW8pLCBvZmZzZXQsIGRpby1cXHUwMDNlc2l6ZSxcXG4gXFx0XFx0XFx0XFx0ICBkaW8tXFx1MDAzZWVycm9yLCBHRlBfTk9GUyk7XFxuQEAgLTIzNywyMyArMjQwLDI5IEBAIHN0YXRpYyB2b2lkIGlvbWFwX2Rpb19kb25lKHN0cnVjdCBpb21hcF9kaW8gKmRpbylcXG4gXFx0aW9tYXBfZGlvX2NvbXBsZXRlX3dvcmsoXFx1MDAyNmRpby1cXHUwMDNlYWlvLndvcmspO1xcbiB9XFxuIFxcbi1zdGF0aWMgdm9pZCBfX2lvbWFwX2Rpb19iaW9fZW5kX2lvKHN0cnVjdCBiaW8gKmJpbywgYm9vbCBpbmxpbmVfY29tcGxldGlvbilcXG4rc3RhdGljIGlubGluZSB2b2lkIGlvbWFwX2Rpb19iaW9fcmVsZWFzZV9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sXFxuK1xcdFxcdHVuc2lnbmVkIGludCBkaW9fZmxhZ3MsIGJvb2wgZXJyb3IpXFxuIHtcXG4tXFx0c3RydWN0IGlvbWFwX2RpbyAqZGlvID0gYmlvLVxcdTAwM2ViaV9wcml2YXRlO1xcbi1cXG4gXFx0aWYgKGJpb19pbnRlZ3JpdHkoYmlvKSlcXG4gXFx0XFx0ZnNfYmlvX2ludGVncml0eV9mcmVlKGJpbyk7XFxuIFxcbi1cXHRpZiAoZGlvLVxcdTAwM2VmbGFncyBcXHUwMDI2IElPTUFQX0RJT19CT1VOQ0UpIHtcXG4tXFx0XFx0YmlvX2lvdl9pdGVyX3VuYm91bmNlKGJpbywgISFkaW8tXFx1MDAzZWVycm9yLFxcbi1cXHRcXHRcXHRcXHRkaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9NQVBfRElPX1VTRVJfQkFDS0VEKTtcXG4rXFx0aWYgKGRpb19mbGFncyBcXHUwMDI2IElPTUFQX0RJT19CT1VOQ0UpIHtcXG4rXFx0XFx0YmlvX2lvdl9pdGVyX3VuYm91bmNlKGJpbywgZXJyb3IsXFxuK1xcdFxcdFxcdFxcdGRpb19mbGFncyBcXHUwMDI2IElPTUFQX0RJT19VU0VSX0JBQ0tFRCk7XFxuIFxcdFxcdGJpb19wdXQoYmlvKTtcXG4tXFx0fSBlbHNlIGlmIChkaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9NQVBfRElPX1VTRVJfQkFDS0VEKSB7XFxuK1xcdH0gZWxzZSBpZiAoZGlvX2ZsYWdzIFxcdTAwMjYgSU9NQVBfRElPX1VTRVJfQkFDS0VEKSB7XFxuIFxcdFxcdGJpb19jaGVja19wYWdlc19kaXJ0eShiaW8pO1xcbiBcXHR9IGVsc2Uge1xcbiBcXHRcXHRiaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGZhbHNlKTtcXG4gXFx0XFx0YmlvX3B1dChiaW8pO1xcbiBcXHR9XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIF9faW9tYXBfZGlvX2Jpb19lbmRfaW8oc3RydWN0IGJpbyAqYmlvLCBib29sIGlubGluZV9jb21wbGV0aW9uKVxcbit7XFxuK1xcdHN0cnVjdCBpb21hcF9kaW8gKmRpbyA9IGJpby1cXHUwMDNlYmlfcHJpdmF0ZTtcXG4rXFxuK1xcdGlvbWFwX2Rpb19iaW9fcmVsZWFzZV9wYWdlcyhiaW8sIGRpby1cXHUwMDNlZmxhZ3MsICEhZGlvLVxcdTAwM2VlcnJvcik7XFxuIFxcbiBcXHQvKiBEbyBub3QgdG91Y2ggYmlvIGJlbG93LCB3ZSBqdXN0IGdhdmUgdXAgb3VyIHJlZmVyZW5jZS4gKi9cXG4gXFxuQEAgLTM5OCw2ICs0MDcsMTQgQEAgc3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX2Jpb19pdGVyX29uZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgaW9tYXBfZGlvX2FsaWdubWVudChzdHJ1Y3QgaW5vZGUgKmlub2RlLFxcbitcXHRcXHRzdHJ1Y3QgYmxvY2tfZGV2aWNlICpiZGV2LCB1bnNpZ25lZCBpbnQgZGlvX2ZsYWdzKVxcbit7XFxuK1xcdGlmIChkaW9fZmxhZ3MgXFx1MDAyNiBJT01BUF9ESU9fRlNCTE9DS19BTElHTkVEKVxcbitcXHRcXHRyZXR1cm4gaV9ibG9ja3NpemUoaW5vZGUpO1xcbitcXHRyZXR1cm4gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoYmRldik7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgaW9tYXBfZGlvX2Jpb19pdGVyKHN0cnVjdCBpb21hcF9pdGVyICppdGVyLCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXFxuIHtcXG4gXFx0Y29uc3Qgc3RydWN0IGlvbWFwICppb21hcCA9IFxcdTAwMjZpdGVyLVxcdTAwM2Vpb21hcDtcXG5AQCAtNDE2LDEwICs0MzMsNyBAQCBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxcbiBcXHQgKiBGaWxlIHN5c3RlbXMgdGhhdCB3cml0ZSBvdXQgb2YgcGxhY2UgYW5kIGFsd2F5cyBhbGxvY2F0ZSBuZXcgYmxvY2tzXFxuIFxcdCAqIG5lZWQgZWFjaCBiaW8gdG8gYmUgYmxvY2sgYWxpZ25lZCBhcyB0aGF0J3MgdGhlIHVuaXQgb2YgYWxsb2NhdGlvbi5cXG4gXFx0ICovXFxuLVxcdGlmIChkaW8tXFx1MDAzZWZsYWdzIFxcdTAwMjYgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRClcXG4tXFx0XFx0YWxpZ25tZW50ID0gZnNfYmxvY2tfc2l6ZTtcXG4tXFx0ZWxzZVxcbi1cXHRcXHRhbGlnbm1lbnQgPSBiZGV2X2xvZ2ljYWxfYmxvY2tfc2l6ZShpb21hcC1cXHUwMDNlYmRldik7XFxuK1xcdGFsaWdubWVudCA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaW5vZGUsIGlvbWFwLVxcdTAwM2ViZGV2LCBkaW8tXFx1MDAzZWZsYWdzKTtcXG4gXFxuIFxcdGlmICgocG9zIHwgbGVuZ3RoKSBcXHUwMDI2IChhbGlnbm1lbnQgLSAxKSlcXG4gXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuQEAgLTg4OCwxMiArOTAyLDI1MyBAQCBfX2lvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcXG4gfVxcbiBFWFBPUlRfU1lNQk9MX0dQTChfX2lvbWFwX2Rpb19ydyk7XFxuIFxcbitzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSB7XFxuK1xcdHN0cnVjdCBraW9jYlxcdFxcdCppb2NiO1xcbitcXHRzaXplX3RcXHRcXHRcXHRzaXplO1xcbitcXHR1bnNpZ25lZCBpbnRcXHRcXHRkaW9fZmxhZ3M7XFxuK1xcdHN0cnVjdCB3b3JrX3N0cnVjdFxcdHdvcms7XFxuK1xcdC8qXFxuK1xcdCAqIEFsaWduIEBiaW8gdG8gYSBjYWNoZWxpbmUgYm91bmRhcnkgc28gdGhhdCwgY29tYmluZWQgd2l0aCB0aGVcXG4rXFx0ICogZnJvbnRfcGFkIHBhc3NlZCB0byBiaW9zZXRfaW5pdCgpLCB0aGUgYmlvIHNpdHMgYXQgdGhlIHN0YXJ0IG9mXFxuK1xcdCAqIGEgY2FjaGVsaW5lIGluIG1lbW9yeSByZXR1cm5lZCBieSB0aGUgKEhXQ0FDSEUtYWxpZ25lZCkgYmlvXFxuK1xcdCAqIHNsYWIuICBUaGlzIGtlZXBzIHRoZSBob3QgZmllbGRzIGJsb2NrIGxheWVyIHRvdWNoZXMgb24gc3VibWl0XFxuK1xcdCAqIGFuZCBjb21wbGV0aW9uIChiaV9pdGVyLCBiaV9zdGF0dXMsIC4uLikgd2l0aGluIGEgc2luZ2xlIGxpbmUuXFxuK1xcdCAqL1xcbitcXHRzdHJ1Y3QgYmlvXFx0YmlvIF9fX19jYWNoZWxpbmVfYWxpZ25lZF9pbl9zbXA7XFxuK307XFxuK1xcbitzdGF0aWMgc3RydWN0IGJpb19zZXQgaW9tYXBfZGlvX3NpbXBsZV9wb29sO1xcbitcXG4rc3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IpXFxuK3tcXG4rXFx0c3RydWN0IGJpbyAqYmlvID0gXFx1MDAyNnNyLVxcdTAwM2ViaW87XFxuK1xcdHN0cnVjdCBraW9jYiAqaW9jYiA9IHNyLVxcdTAwM2Vpb2NiO1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVxcdTAwM2VraV9maWxwKTtcXG4rXFx0aW50IGVycm9yID0gYmxrX3N0YXR1c190b19lcnJubyhiaW8tXFx1MDAzZWJpX3N0YXR1cyk7XFxuK1xcdHNzaXplX3QgcmV0ID0gZXJyb3I7XFxuK1xcbitcXHRpZiAobGlrZWx5KCFyZXQpKSB7XFxuK1xcdFxcdHJldCA9IHNyLVxcdTAwM2VzaXplO1xcbitcXHRcXHRpb2NiLVxcdTAwM2VraV9wb3MgKz0gcmV0O1xcbitcXHR9IGVsc2UgaWYgKHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IocmV0KSkge1xcbitcXHRcXHRmc2Vycm9yX3JlcG9ydF9pbyhpbm9kZSwgRlNFUlJfRElSRUNUSU9fUkVBRCwgaW9jYi1cXHUwMDNla2lfcG9zLFxcbitcXHRcXHRcXHRcXHQgIHNyLVxcdTAwM2VzaXplLCByZXQsIEdGUF9OT0ZTKTtcXG4rXFx0fVxcbitcXG4rXFx0aW9tYXBfZGlvX2Jpb19yZWxlYXNlX3BhZ2VzKGJpbywgc3ItXFx1MDAzZWRpb19mbGFncywgcmV0IFxcdTAwM2MgMCk7XFxuK1xcdGlub2RlX2Rpb19lbmQoaW5vZGUpO1xcbitcXHR0cmFjZV9pb21hcF9kaW9fY29tcGxldGUoaW9jYiwgZXJyb3IsIHJldCk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29yayhzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuK3tcXG4rXFx0c3RydWN0IGlvbWFwX2Rpb19zaW1wbGUgKnNyID1cXG4rXFx0XFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCB3b3JrKTtcXG4rXFxuK1xcdFdSSVRFX09OQ0Uoc3ItXFx1MDAzZWlvY2ItXFx1MDAzZXByaXZhdGUsIE5VTEwpO1xcbitcXHRzci1cXHUwMDNlaW9jYi1cXHUwMDNla2lfY29tcGxldGUoc3ItXFx1MDAzZWlvY2IsIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW8oc3RydWN0IGJpbyAqYmlvKVxcbit7XFxuK1xcdHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzciA9XFxuK1xcdFxcdGNvbnRhaW5lcl9vZihiaW8sIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pO1xcbitcXG4rXFx0aWYgKHVubGlrZWx5KHNyLVxcdTAwM2ViaW8uYmlfc3RhdHVzKSkge1xcbitcXHRcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShzci1cXHUwMDNlaW9jYi1cXHUwMDNla2lfZmlscCk7XFxuK1xcbitcXHRcXHRJTklUX1dPUksoXFx1MDAyNnNyLVxcdTAwM2V3b3JrLCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmspO1xcbitcXHRcXHRxdWV1ZV93b3JrKGlub2RlLVxcdTAwM2VpX3NiLVxcdTAwM2VzX2Rpb19kb25lX3dxLCBcXHUwMDI2c3ItXFx1MDAzZXdvcmspO1xcbitcXHRcXHRyZXR1cm47XFxuK1xcdH1cXG4rXFxuK1xcdHNyLVxcdTAwM2Vpb2NiLVxcdTAwM2VraV9jb21wbGV0ZShzci1cXHUwMDNlaW9jYiwgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcikpO1xcbit9XFxuK1xcbitzdGF0aWMgaW5saW5lIGJvb2wgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoc3RydWN0IGtpb2NiICppb2NiLFxcbitcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHVuc2lnbmVkIGludCBkaW9fZmxhZ3MpXFxuK3tcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cXHUwMDNla2lfZmlscCk7XFxuK1xcdHNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpO1xcbitcXG4rXFx0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpICE9IFJFQUQpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKCFjb3VudClcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHQvKlxcbitcXHQgKiBTaW1wbGUgZGlvIGlzIGFuIG9wdGltaXphdGlvbiBmb3Igc21hbGwgSU8uIEZpbHRlciBvdXQgbGFyZ2UgSU9cXG4rXFx0ICogZWFybHkgYXMgaXQncyB0aGUgbW9zdCBjb21tb24gY2FzZSB0byBmYWlsIGZvciB0eXBpY2FsIGRpcmVjdCBJT1xcbitcXHQgKiB3b3JrbG9hZHMuXFxuK1xcdCAqL1xcbitcXHRpZiAoY291bnQgXFx1MDAzZSBpbm9kZS1cXHUwMDNlaV9zYi1cXHUwMDNlc19ibG9ja3NpemUpXFxuK1xcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKGRpb19mbGFncyBcXHUwMDI2IChJT01BUF9ESU9fRk9SQ0VfV0FJVCB8IElPTUFQX0RJT19QQVJUSUFMIHxcXG4rXFx0XFx0XFx0IElPTUFQX0RJT19CT1VOQ0UpKVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuK1xcdGlmIChpb2NiLVxcdTAwM2VraV9wb3MgKyBjb3VudCBcXHUwMDNlIGlfc2l6ZV9yZWFkKGlub2RlKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXHRpZiAoSVNfRU5DUllQVEVEKGlub2RlKSlcXG4rXFx0XFx0cmV0dXJuIGZhbHNlO1xcbitcXG4rXFx0cmV0dXJuIHRydWU7XFxuK31cXG4rXFxuK3N0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLFxcbitcXHRcXHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyxcXG4rXFx0XFx0dm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGRpb19mbGFncylcXG4re1xcbitcXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVxcdTAwM2VraV9maWxwKTtcXG4rXFx0c2l6ZV90IGNvdW50ID0gaW92X2l0ZXJfY291bnQoaXRlcik7XFxuK1xcdHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzcjtcXG4rXFx0dW5zaWduZWQgaW50IGFsaWdubWVudDtcXG4rXFx0c3RydWN0IGlvbWFwX2l0ZXIgaW9taSA9IHtcXG4rXFx0XFx0Lmlub2RlXFx0XFx0PSBpbm9kZSxcXG4rXFx0XFx0LnBvc1xcdFxcdD0gaW9jYi1cXHUwMDNla2lfcG9zLFxcbitcXHRcXHQubGVuXFx0XFx0PSBjb3VudCxcXG4rXFx0XFx0LmZsYWdzXFx0XFx0PSBJT01BUF9ESVJFQ1QsXFxuK1xcdFxcdC5wcml2YXRlXFx0PSBwcml2YXRlLFxcbitcXHR9O1xcbitcXHRzdHJ1Y3QgYmlvICpiaW87XFxuK1xcdGJvb2wgd2FpdF9mb3JfY29tcGxldGlvbiA9IGlzX3N5bmNfa2lvY2IoaW9jYik7XFxuK1xcdHNzaXplX3QgcmV0O1xcbitcXG4rXFx0aWYgKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9OT1dBSVQpXFxuK1xcdFxcdGlvbWkuZmxhZ3MgfD0gSU9NQVBfTk9XQUlUO1xcbitcXG4rXFx0cmV0ID0ga2lvY2Jfd3JpdGVfYW5kX3dhaXQoaW9jYiwgY291bnQpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0aW5vZGVfZGlvX2JlZ2luKGlub2RlKTtcXG4rXFxuK1xcdHJldCA9IG9wcy1cXHUwMDNlaW9tYXBfYmVnaW4oaW5vZGUsIGlvbWkucG9zLCBjb3VudCwgaW9taS5mbGFncyxcXG4rXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZpb21pLmlvbWFwLCBcXHUwMDI2aW9taS5zcmNtYXApO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGlub2RlX2Rpb19lbmQoaW5vZGUpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAoaW9taS5pb21hcC50eXBlICE9IElPTUFQX01BUFBFRCB8fFxcbitcXHQgICAgaW9taS5pb21hcC5vZmZzZXQgKyBpb21pLmlvbWFwLmxlbmd0aCBcXHUwMDNjIGlvbWkucG9zICsgY291bnQgfHxcXG4rXFx0ICAgIChpb21pLmlvbWFwLmZsYWdzIFxcdTAwMjYgSU9NQVBfRl9JTlRFR1JJVFkpKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9UQkxLO1xcbitcXHRcXHRnb3RvIG91dF9pb21hcF9lbmQ7XFxuK1xcdH1cXG4rXFxuK1xcdGFsaWdubWVudCA9IGlvbWFwX2Rpb19hbGlnbm1lbnQoaW5vZGUsIGlvbWkuaW9tYXAuYmRldiwgZGlvX2ZsYWdzKTtcXG4rXFx0aWYgKChpb21pLnBvcyB8IGNvdW50KSBcXHUwMDI2IChhbGlnbm1lbnQgLSAxKSkge1xcbitcXHRcXHRyZXQgPSAtRUlOVkFMO1xcbitcXHRcXHRnb3RvIG91dF9pb21hcF9lbmQ7XFxuK1xcdH1cXG4rXFxuK1xcdGlmICghd2FpdF9mb3JfY29tcGxldGlvbiBcXHUwMDI2XFx1MDAyNiB1bmxpa2VseSghaW5vZGUtXFx1MDAzZWlfc2ItXFx1MDAzZXNfZGlvX2RvbmVfd3EpKSB7XFxuK1xcdFxcdHJldCA9IHNiX2luaXRfZGlvX2RvbmVfd3EoaW5vZGUtXFx1MDAzZWlfc2IpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byBvdXRfaW9tYXBfZW5kO1xcbitcXHR9XFxuK1xcbitcXHR0cmFjZV9pb21hcF9kaW9fcndfYmVnaW4oaW9jYiwgaXRlciwgZGlvX2ZsYWdzLCAwKTtcXG4rXFxuK1xcdGlmICh1c2VyX2JhY2tlZF9pdGVyKGl0ZXIpKVxcbitcXHRcXHRkaW9fZmxhZ3MgfD0gSU9NQVBfRElPX1VTRVJfQkFDS0VEO1xcbitcXG4rXFx0YmlvID0gYmlvX2FsbG9jX2Jpb3NldChpb21pLmlvbWFwLmJkZXYsXFxuK1xcdFxcdFxcdGJpb19pb3ZfdmVjc190b19hbGxvYyhpdGVyLCBCSU9fTUFYX1ZFQ1MpLFxcbitcXHRcXHRcXHRSRVFfT1BfUkVBRCxcXG4rXFx0XFx0XFx0R0ZQX0tFUk5FTCwgXFx1MDAyNmlvbWFwX2Rpb19zaW1wbGVfcG9vbCk7XFxuK1xcdHNyID0gY29udGFpbmVyX29mKGJpbywgc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyk7XFxuK1xcdHNyLVxcdTAwM2Vpb2NiID0gaW9jYjtcXG4rXFx0c3ItXFx1MDAzZWRpb19mbGFncyA9IGRpb19mbGFncztcXG4rXFxuK1xcdGJpby1cXHUwMDNlYmlfaXRlci5iaV9zZWN0b3IgPSBpb21hcF9zZWN0b3IoXFx1MDAyNmlvbWkuaW9tYXAsIGlvbWkucG9zKTtcXG4rXFx0YmlvLVxcdTAwM2ViaV9pb3ByaW8gPSBpb2NiLVxcdTAwM2VraV9pb3ByaW87XFxuK1xcbitcXHRyZXQgPSBiaW9faW92X2l0ZXJfZ2V0X3BhZ2VzKGJpbywgaXRlciwgYWxpZ25tZW50IC0gMSk7XFxuK1xcdGlmICh1bmxpa2VseShyZXQpKVxcbitcXHRcXHRnb3RvIG91dF9iaW9fcHV0O1xcbitcXG4rXFx0aWYgKGJpby1cXHUwMDNlYmlfaXRlci5iaV9zaXplICE9IGNvdW50KSB7XFxuK1xcdFxcdGlvdl9pdGVyX3JldmVydChpdGVyLCBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZSk7XFxuK1xcdFxcdHJldCA9IC1FTk9UQkxLO1xcbitcXHRcXHRnb3RvIG91dF9iaW9fcmVsZWFzZV9wYWdlcztcXG4rXFx0fVxcbitcXG4rXFx0c3ItXFx1MDAzZXNpemUgPSBiaW8tXFx1MDAzZWJpX2l0ZXIuYmlfc2l6ZTtcXG4rXFxuK1xcdGlmIChkaW9fZmxhZ3MgXFx1MDAyNiBJT01BUF9ESU9fVVNFUl9CQUNLRUQpXFxuK1xcdFxcdGJpb19zZXRfcGFnZXNfZGlydHkoYmlvKTtcXG4rXFxuK1xcdGlmIChpb2NiLVxcdTAwM2VraV9mbGFncyBcXHUwMDI2IElPQ0JfTk9XQUlUKVxcbitcXHRcXHRiaW8tXFx1MDAzZWJpX29wZiB8PSBSRVFfTk9XQUlUO1xcbitcXHRpZiAoKGlvY2ItXFx1MDAzZWtpX2ZsYWdzIFxcdTAwMjYgSU9DQl9ISVBSSSkgXFx1MDAyNlxcdTAwMjYgIXdhaXRfZm9yX2NvbXBsZXRpb24pIHtcXG4rXFx0XFx0YmlvLVxcdTAwM2ViaV9vcGYgfD0gUkVRX1BPTExFRDtcXG4rXFx0XFx0V1JJVEVfT05DRShpb2NiLVxcdTAwM2Vwcml2YXRlLCBiaW8pO1xcbitcXHR9XFxuK1xcbitcXHRpZiAob3BzLVxcdTAwM2Vpb21hcF9lbmQpXFxuK1xcdFxcdG9wcy1cXHUwMDNlaW9tYXBfZW5kKGlub2RlLCBpb21pLnBvcywgY291bnQsIGNvdW50LCBpb21pLmZsYWdzLFxcbitcXHRcXHRcXHQgICAgICAgXFx1MDAyNmlvbWkuaW9tYXApO1xcbitcXG4rXFx0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uKSB7XFxuK1xcdFxcdGJpby1cXHUwMDNlYmlfZW5kX2lvID0gaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW87XFxuK1xcdFxcdHN1Ym1pdF9iaW8oYmlvKTtcXG4rXFx0XFx0dHJhY2VfaW9tYXBfZGlvX3J3X3F1ZXVlZChpbm9kZSwgaW9taS5wb3MsIGNvdW50KTtcXG4rXFx0XFx0cmV0dXJuIC1FSU9DQlFVRVVFRDtcXG4rXFx0fVxcbitcXG4rXFx0c3VibWl0X2Jpb193YWl0KGJpbyk7XFxuK1xcdHJldHVybiBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlKHNyKTtcXG4rXFxuK291dF9iaW9fcmVsZWFzZV9wYWdlczpcXG4rXFx0YmlvX3JlbGVhc2VfcGFnZXMoYmlvLCBmYWxzZSk7XFxuK291dF9iaW9fcHV0OlxcbitcXHRiaW9fcHV0KGJpbyk7XFxuK291dF9pb21hcF9lbmQ6XFxuK1xcdGlmIChvcHMtXFx1MDAzZWlvbWFwX2VuZClcXG4rXFx0XFx0b3BzLVxcdTAwM2Vpb21hcF9lbmQoaW5vZGUsIGlvbWkucG9zLCBjb3VudCwgMCwgaW9taS5mbGFncyxcXG4rXFx0XFx0XFx0ICAgICAgIFxcdTAwMjZpb21pLmlvbWFwKTtcXG4rXFx0aW5vZGVfZGlvX2VuZChpbm9kZSk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIHNzaXplX3RcXG4gaW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRcXHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxcbiBcXHRcXHR1bnNpZ25lZCBpbnQgZGlvX2ZsYWdzLCB2b2lkICpwcml2YXRlLCBzaXplX3QgZG9uZV9iZWZvcmUpXFxuIHtcXG4gXFx0c3RydWN0IGlvbWFwX2RpbyAqZGlvO1xcbitcXHRzc2l6ZV90IHJldDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIEZhc3QgcGF0aCBmb3Igc21hbGwsIGJsb2NrLWFsaWduZWQgZGlyZWN0IEkvT3MgdGhhdCBtYXAgdG8gYVxcbitcXHQgKiBzaW5nbGUgY29udGlndW91cyBvbi1kaXNrIGV4dGVudC5cXG4rXFx0ICpcXG4rXFx0ICogQGRvcHMgbXVzdCBiZSBOVUxMOiBhIG5vbi1OVUxMIEBkb3BzIG1lYW5zIHRoZSBjYWxsZXIgd2FudHMgaXRzXFxuK1xcdCAqIC1cXHUwMDNlZW5kX2lvIC8gLVxcdTAwM2VzdWJtaXRfaW8gaG9va3MgaW52b2tlZCwgYW5kIGluIHBhcnRpY3VsYXIgd2FudHMgaXRzXFxuK1xcdCAqIGJpb3MgdG8gYmUgYWxsb2NhdGVkIGZyb20gdGhlIGZpbGVzeXN0ZW0tcHJpdmF0ZSBAZG9wcy1cXHUwMDNlYmlvX3NldFxcbitcXHQgKiAod2hvc2UgZnJvbnRfcGFkIHNpemVzIGEgZmlsZXN5c3RlbS1wcml2YXRlIHdyYXBwZXIgYXJvdW5kIHRoZVxcbitcXHQgKiBiaW8pLiAgVGhlIGZhc3QgcGF0aCBpbnN0ZWFkIGFsbG9jYXRlcyBmcm9tIHRoZSBzaGFyZWRcXG4rXFx0ICogaW9tYXBfZGlvX3NpbXBsZV9wb29sLCB3aG9zZSBmcm9udF9wYWQgbWF0Y2hlc1xcbitcXHQgKiBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZTsgdGhlIHR3byB3cmFwcGVycyBhcmUgbm90XFxuK1xcdCAqIGludGVyY2hhbmdlYWJsZSwgc28gd2UgbXVzdCBmYWxsIGJhY2sgdG8gX19pb21hcF9kaW9fcncoKSBpblxcbitcXHQgKiB0aGF0IGNhc2UuXFxuK1xcdCAqXFxuK1xcdCAqIEBkb25lX2JlZm9yZSBtdXN0IGJlIHplcm86IGEgbm9uLXplcm8gY2FsbGVyLWFjY3VtdWxhdGVkIHJlc2lkdWFsXFxuK1xcdCAqIGNhbm5vdCBiZSBjYXJyaWVkIHRocm91Z2ggYSBzaW5nbGUtYmlvIGlubGluZSBjb21wbGV0aW9uLlxcbitcXHQgKlxcbitcXHQgKiAtRU5PVEJMSyBpcyB0aGUgcHJpdmF0ZSBzZW50aW5lbCByZXR1cm5lZCBieSBpb21hcF9kaW9fc2ltcGxlKClcXG4rXFx0ICogd2hlbiBpdCBkZWNpZGVzIHRoZSByZXF1ZXN0IGRvZXMgbm90IGZpdCB0aGUgZmFzdCBwYXRoLlxcbitcXHQgKiBJbiB0aGF0IGNhc2Ugd2UgcHJvY2VlZCB0byB0aGUgZ2VuZXJpYyBfX2lvbWFwX2Rpb19ydygpIHNsb3dcXG4rXFx0ICogcGF0aC4gIEFueSBvdGhlciBlcnJubyBpcyBhIHJlYWwgcmVzdWx0IGFuZCBpcyBwcm9wYWdhdGVkIGFzLWlzLFxcbitcXHQgKiBpbiBwYXJ0aWN1bGFyIC1FQUdBSU4gZm9yIElPQ0JfTk9XQUlUIG11c3QgcmVhY2ggdGhlIGNhbGxlci5cXG4rXFx0ICovXFxuK1xcdGlmICghZG9wcyBcXHUwMDI2XFx1MDAyNiAhZG9uZV9iZWZvcmUgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKGlvY2IsIGl0ZXIsIGRpb19mbGFncykpIHtcXG4rXFx0XFx0cmV0ID0gaW9tYXBfZGlvX3NpbXBsZShpb2NiLCBpdGVyLCBvcHMsIHByaXZhdGUsIGRpb19mbGFncyk7XFxuK1xcdFxcdGlmIChyZXQgIT0gLUVOT1RCTEspXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4gXFxuIFxcdGRpbyA9IF9faW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIG9wcywgZG9wcywgZGlvX2ZsYWdzLCBwcml2YXRlLFxcbiBcXHRcXHRcXHQgICAgIGRvbmVfYmVmb3JlKTtcXG5AQCAtOTAyLDMgKzExNTcsMTEgQEAgaW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxcbiBcXHRyZXR1cm4gaW9tYXBfZGlvX2NvbXBsZXRlKGRpbyk7XFxuIH1cXG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX3J3KTtcXG4rXFxuK3N0YXRpYyBpbnQgX19pbml0IGlvbWFwX2Rpb19pbml0KHZvaWQpXFxuK3tcXG4rXFx0cmV0dXJuIGJpb3NldF9pbml0KFxcdTAwMjZpb21hcF9kaW9fc2ltcGxlX3Bvb2wsIDQsXFxuK1xcdFxcdFxcdCAgIG9mZnNldG9mKHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pLFxcbitcXHRcXHRcXHQgICBCSU9TRVRfTkVFRF9CVkVDUyB8IEJJT1NFVF9QRVJDUFVfQ0FDSEUpO1xcbit9XFxuK2ZzX2luaXRjYWxsKGlvbWFwX2Rpb19pbml0KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTI6MjA6MDUuNTY2MTA1ODY5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNDMzMDUwMDQzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlXCIsXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlXCIsXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtcIixcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmYXN0IHBhdGggZm9yIGRpcmVjdCBJL08gcmVhZHMgKGBpb21hcF9kaW9fc2ltcGxlYCkgaW4gdGhlIGlvbWFwIHN1YnN5c3RlbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIEkvTyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZGlyZWN0IEkvTyBzeXN0ZW0gY2FsbHMgb24gc3VwcG9ydGVkIGZpbGVzeXN0ZW1zLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGZhc3QgcGF0aCBoYW5kbGVzIHZhcmlvdXMgSS9PIGNvbmRpdGlvbnMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG5ldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0XG4gICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksXG4gICBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGE4MGI2OGFkNjA2OGYwOGNjN2U2ZjAxNmNiYTM3NTJhMTk2NjQ3YTJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgTW9uIEp1biAyOSAxMjoyMDowMyAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jIGIvZnMvaW9tYXAvZGlyZWN0LWlvLmNcbmluZGV4IGI0ODVlM2IxOTFkYWZhLi40ZGNjOWZjNzY2YTkyZSAxMDA2NDRcbi0tLSBhL2ZzL2lvbWFwL2RpcmVjdC1pby5jXG4rKysgYi9mcy9pb21hcC9kaXJlY3QtaW8uY1xuQEAgLTEwLDYgKzEwLDkgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9pb21hcC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvdGFza19pb19hY2NvdW50aW5nX29wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZnNlcnJvci5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgva29iamVjdC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvc3lzZnMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuICNpbmNsdWRlIFwiaW50ZXJuYWwuaFwiXG4gI2luY2x1ZGUgXCJ0cmFjZS5oXCJcbiBcbkBAIC04OCw5ICs5MSw5IEBAIHN0YXRpYyBpbmxpbmUgZW51bSBmc2Vycm9yX3R5cGUgaW9tYXBfZGlvX2Vycl90eXBlKGNvbnN0IHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiBcdHJldHVybiBGU0VSUl9ESVJFQ1RJT19SRUFEO1xuIH1cbiBcbi1zdGF0aWMgaW5saW5lIGJvb2wgc2hvdWxkX3JlcG9ydF9kaW9fZnNlcnJvcihjb25zdCBzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4rc3RhdGljIGlubGluZSBib29sIHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IoaW50IGVycm9yKVxuIHtcbi1cdHN3aXRjaCAoZGlvLVx1MDAzZWVycm9yKSB7XG4rXHRzd2l0Y2ggKGVycm9yKSB7XG4gXHRjYXNlIDA6XG4gXHRjYXNlIC1FQUdBSU46XG4gXHRjYXNlIC1FTk9UQkxLOlxuQEAgLTExMCw3ICsxMTMsNyBAQCBzc2l6ZV90IGlvbWFwX2Rpb19jb21wbGV0ZShzdHJ1Y3QgaW9tYXBfZGlvICpkaW8pXG4gXG4gXHRpZiAoZG9wcyBcdTAwMjZcdTAwMjYgZG9wcy1cdTAwM2VlbmRfaW8pXG4gXHRcdHJldCA9IGRvcHMtXHUwMDNlZW5kX2lvKGlvY2IsIGRpby1cdTAwM2VzaXplLCByZXQsIGRpby1cdTAwM2VmbGFncyk7XG4tXHRpZiAoc2hvdWxkX3JlcG9ydF9kaW9fZnNlcnJvcihkaW8pKVxuK1x0aWYgKHNob3VsZF9yZXBvcnRfZGlvX2ZzZXJyb3IoZGlvLVx1MDAzZWVycm9yKSlcbiBcdFx0ZnNlcnJvcl9yZXBvcnRfaW8oZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApLFxuIFx0XHRcdFx0ICBpb21hcF9kaW9fZXJyX3R5cGUoZGlvKSwgb2Zmc2V0LCBkaW8tXHUwMDNlc2l6ZSxcbiBcdFx0XHRcdCAgZGlvLVx1MDAzZWVycm9yLCBHRlBfTk9GUyk7XG5AQCAtMjM3LDIzICsyNDAsMjkgQEAgc3RhdGljIHZvaWQgaW9tYXBfZGlvX2RvbmUoc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuIFx0aW9tYXBfZGlvX2NvbXBsZXRlX3dvcmsoXHUwMDI2ZGlvLVx1MDAzZWFpby53b3JrKTtcbiB9XG4gXG4tc3RhdGljIHZvaWQgX19pb21hcF9kaW9fYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8sIGJvb2wgaW5saW5lX2NvbXBsZXRpb24pXG4rc3RhdGljIGlubGluZSB2b2lkIGlvbWFwX2Rpb19iaW9fcmVsZWFzZV9wYWdlcyhzdHJ1Y3QgYmlvICpiaW8sXG4rXHRcdHVuc2lnbmVkIGludCBkaW9fZmxhZ3MsIGJvb2wgZXJyb3IpXG4ge1xuLVx0c3RydWN0IGlvbWFwX2RpbyAqZGlvID0gYmlvLVx1MDAzZWJpX3ByaXZhdGU7XG4tXG4gXHRpZiAoYmlvX2ludGVncml0eShiaW8pKVxuIFx0XHRmc19iaW9faW50ZWdyaXR5X2ZyZWUoYmlvKTtcbiBcbi1cdGlmIChkaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19CT1VOQ0UpIHtcbi1cdFx0YmlvX2lvdl9pdGVyX3VuYm91bmNlKGJpbywgISFkaW8tXHUwMDNlZXJyb3IsXG4tXHRcdFx0XHRkaW8tXHUwMDNlZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19VU0VSX0JBQ0tFRCk7XG4rXHRpZiAoZGlvX2ZsYWdzIFx1MDAyNiBJT01BUF9ESU9fQk9VTkNFKSB7XG4rXHRcdGJpb19pb3ZfaXRlcl91bmJvdW5jZShiaW8sIGVycm9yLFxuK1x0XHRcdFx0ZGlvX2ZsYWdzIFx1MDAyNiBJT01BUF9ESU9fVVNFUl9CQUNLRUQpO1xuIFx0XHRiaW9fcHV0KGJpbyk7XG4tXHR9IGVsc2UgaWYgKGRpby1cdTAwM2VmbGFncyBcdTAwMjYgSU9NQVBfRElPX1VTRVJfQkFDS0VEKSB7XG4rXHR9IGVsc2UgaWYgKGRpb19mbGFncyBcdTAwMjYgSU9NQVBfRElPX1VTRVJfQkFDS0VEKSB7XG4gXHRcdGJpb19jaGVja19wYWdlc19kaXJ0eShiaW8pO1xuIFx0fSBlbHNlIHtcbiBcdFx0YmlvX3JlbGVhc2VfcGFnZXMoYmlvLCBmYWxzZSk7XG4gXHRcdGJpb19wdXQoYmlvKTtcbiBcdH1cbit9XG4rXG4rc3RhdGljIHZvaWQgX19pb21hcF9kaW9fYmlvX2VuZF9pbyhzdHJ1Y3QgYmlvICpiaW8sIGJvb2wgaW5saW5lX2NvbXBsZXRpb24pXG4re1xuK1x0c3RydWN0IGlvbWFwX2RpbyAqZGlvID0gYmlvLVx1MDAzZWJpX3ByaXZhdGU7XG4rXG4rXHRpb21hcF9kaW9fYmlvX3JlbGVhc2VfcGFnZXMoYmlvLCBkaW8tXHUwMDNlZmxhZ3MsICEhZGlvLVx1MDAzZWVycm9yKTtcbiBcbiBcdC8qIERvIG5vdCB0b3VjaCBiaW8gYmVsb3csIHdlIGp1c3QgZ2F2ZSB1cCBvdXIgcmVmZXJlbmNlLiAqL1xuIFxuQEAgLTM5OCw2ICs0MDcsMTQgQEAgc3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX2Jpb19pdGVyX29uZShzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlcixcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlvbWFwX2Rpb19hbGlnbm1lbnQoc3RydWN0IGlub2RlICppbm9kZSxcbitcdFx0c3RydWN0IGJsb2NrX2RldmljZSAqYmRldiwgdW5zaWduZWQgaW50IGRpb19mbGFncylcbit7XG4rXHRpZiAoZGlvX2ZsYWdzIFx1MDAyNiBJT01BUF9ESU9fRlNCTE9DS19BTElHTkVEKVxuK1x0XHRyZXR1cm4gaV9ibG9ja3NpemUoaW5vZGUpO1xuK1x0cmV0dXJuIGJkZXZfbG9naWNhbF9ibG9ja19zaXplKGJkZXYpO1xuK31cbitcbiBzdGF0aWMgaW50IGlvbWFwX2Rpb19iaW9faXRlcihzdHJ1Y3QgaW9tYXBfaXRlciAqaXRlciwgc3RydWN0IGlvbWFwX2RpbyAqZGlvKVxuIHtcbiBcdGNvbnN0IHN0cnVjdCBpb21hcCAqaW9tYXAgPSBcdTAwMjZpdGVyLVx1MDAzZWlvbWFwO1xuQEAgLTQxNiwxMCArNDMzLDcgQEAgc3RhdGljIGludCBpb21hcF9kaW9fYmlvX2l0ZXIoc3RydWN0IGlvbWFwX2l0ZXIgKml0ZXIsIHN0cnVjdCBpb21hcF9kaW8gKmRpbylcbiBcdCAqIEZpbGUgc3lzdGVtcyB0aGF0IHdyaXRlIG91dCBvZiBwbGFjZSBhbmQgYWx3YXlzIGFsbG9jYXRlIG5ldyBibG9ja3NcbiBcdCAqIG5lZWQgZWFjaCBiaW8gdG8gYmUgYmxvY2sgYWxpZ25lZCBhcyB0aGF0J3MgdGhlIHVuaXQgb2YgYWxsb2NhdGlvbi5cbiBcdCAqL1xuLVx0aWYgKGRpby1cdTAwM2VmbGFncyBcdTAwMjYgSU9NQVBfRElPX0ZTQkxPQ0tfQUxJR05FRClcbi1cdFx0YWxpZ25tZW50ID0gZnNfYmxvY2tfc2l6ZTtcbi1cdGVsc2Vcbi1cdFx0YWxpZ25tZW50ID0gYmRldl9sb2dpY2FsX2Jsb2NrX3NpemUoaW9tYXAtXHUwMDNlYmRldik7XG4rXHRhbGlnbm1lbnQgPSBpb21hcF9kaW9fYWxpZ25tZW50KGlub2RlLCBpb21hcC1cdTAwM2ViZGV2LCBkaW8tXHUwMDNlZmxhZ3MpO1xuIFxuIFx0aWYgKChwb3MgfCBsZW5ndGgpIFx1MDAyNiAoYWxpZ25tZW50IC0gMSkpXG4gXHRcdHJldHVybiAtRUlOVkFMO1xuQEAgLTg4OCwxMiArOTAyLDI1MyBAQCBfX2lvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoX19pb21hcF9kaW9fcncpO1xuIFxuK3N0cnVjdCBpb21hcF9kaW9fc2ltcGxlIHtcbitcdHN0cnVjdCBraW9jYlx0XHQqaW9jYjtcbitcdHNpemVfdFx0XHRcdHNpemU7XG4rXHR1bnNpZ25lZCBpbnRcdFx0ZGlvX2ZsYWdzO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0XHR3b3JrO1xuK1x0LypcbitcdCAqIEFsaWduIEBiaW8gdG8gYSBjYWNoZWxpbmUgYm91bmRhcnkgc28gdGhhdCwgY29tYmluZWQgd2l0aCB0aGVcbitcdCAqIGZyb250X3BhZCBwYXNzZWQgdG8gYmlvc2V0X2luaXQoKSwgdGhlIGJpbyBzaXRzIGF0IHRoZSBzdGFydCBvZlxuK1x0ICogYSBjYWNoZWxpbmUgaW4gbWVtb3J5IHJldHVybmVkIGJ5IHRoZSAoSFdDQUNIRS1hbGlnbmVkKSBiaW9cbitcdCAqIHNsYWIuICBUaGlzIGtlZXBzIHRoZSBob3QgZmllbGRzIGJsb2NrIGxheWVyIHRvdWNoZXMgb24gc3VibWl0XG4rXHQgKiBhbmQgY29tcGxldGlvbiAoYmlfaXRlciwgYmlfc3RhdHVzLCAuLi4pIHdpdGhpbiBhIHNpbmdsZSBsaW5lLlxuK1x0ICovXG4rXHRzdHJ1Y3QgYmlvXHRiaW8gX19fX2NhY2hlbGluZV9hbGlnbmVkX2luX3NtcDtcbit9O1xuK1xuK3N0YXRpYyBzdHJ1Y3QgYmlvX3NldCBpb21hcF9kaW9fc2ltcGxlX3Bvb2w7XG4rXG4rc3RhdGljIHNzaXplX3QgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IpXG4re1xuK1x0c3RydWN0IGJpbyAqYmlvID0gXHUwMDI2c3ItXHUwMDNlYmlvO1xuK1x0c3RydWN0IGtpb2NiICppb2NiID0gc3ItXHUwMDNlaW9jYjtcbitcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKGlvY2ItXHUwMDNla2lfZmlscCk7XG4rXHRpbnQgZXJyb3IgPSBibGtfc3RhdHVzX3RvX2Vycm5vKGJpby1cdTAwM2ViaV9zdGF0dXMpO1xuK1x0c3NpemVfdCByZXQgPSBlcnJvcjtcbitcbitcdGlmIChsaWtlbHkoIXJldCkpIHtcbitcdFx0cmV0ID0gc3ItXHUwMDNlc2l6ZTtcbitcdFx0aW9jYi1cdTAwM2VraV9wb3MgKz0gcmV0O1xuK1x0fSBlbHNlIGlmIChzaG91bGRfcmVwb3J0X2Rpb19mc2Vycm9yKHJldCkpIHtcbitcdFx0ZnNlcnJvcl9yZXBvcnRfaW8oaW5vZGUsIEZTRVJSX0RJUkVDVElPX1JFQUQsIGlvY2ItXHUwMDNla2lfcG9zLFxuK1x0XHRcdFx0ICBzci1cdTAwM2VzaXplLCByZXQsIEdGUF9OT0ZTKTtcbitcdH1cbitcbitcdGlvbWFwX2Rpb19iaW9fcmVsZWFzZV9wYWdlcyhiaW8sIHNyLVx1MDAzZWRpb19mbGFncywgcmV0IFx1MDAzYyAwKTtcbitcdGlub2RlX2Rpb19lbmQoaW5vZGUpO1xuK1x0dHJhY2VfaW9tYXBfZGlvX2NvbXBsZXRlKGlvY2IsIGVycm9yLCByZXQpO1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4rc3RhdGljIHZvaWQgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbit7XG4rXHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3IgPVxuK1x0XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgd29yayk7XG4rXG4rXHRXUklURV9PTkNFKHNyLVx1MDAzZWlvY2ItXHUwMDNlcHJpdmF0ZSwgTlVMTCk7XG4rXHRzci1cdTAwM2Vpb2NiLVx1MDAzZWtpX2NvbXBsZXRlKHNyLVx1MDAzZWlvY2IsIGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGUoc3IpKTtcbit9XG4rXG4rc3RhdGljIHZvaWQgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW8oc3RydWN0IGJpbyAqYmlvKVxuK3tcbitcdHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlICpzciA9XG4rXHRcdGNvbnRhaW5lcl9vZihiaW8sIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlLCBiaW8pO1xuK1xuK1x0aWYgKHVubGlrZWx5KHNyLVx1MDAzZWJpby5iaV9zdGF0dXMpKSB7XG4rXHRcdHN0cnVjdCBpbm9kZSAqaW5vZGUgPSBmaWxlX2lub2RlKHNyLVx1MDAzZWlvY2ItXHUwMDNla2lfZmlscCk7XG4rXG4rXHRcdElOSVRfV09SSyhcdTAwMjZzci1cdTAwM2V3b3JrLCBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmspO1xuK1x0XHRxdWV1ZV93b3JrKGlub2RlLVx1MDAzZWlfc2ItXHUwMDNlc19kaW9fZG9uZV93cSwgXHUwMDI2c3ItXHUwMDNld29yayk7XG4rXHRcdHJldHVybjtcbitcdH1cbitcbitcdHNyLVx1MDAzZWlvY2ItXHUwMDNla2lfY29tcGxldGUoc3ItXHUwMDNlaW9jYiwgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcikpO1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWQoc3RydWN0IGtpb2NiICppb2NiLFxuK1x0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIHVuc2lnbmVkIGludCBkaW9fZmxhZ3MpXG4re1xuK1x0c3RydWN0IGlub2RlICppbm9kZSA9IGZpbGVfaW5vZGUoaW9jYi1cdTAwM2VraV9maWxwKTtcbitcdHNpemVfdCBjb3VudCA9IGlvdl9pdGVyX2NvdW50KGl0ZXIpO1xuK1xuK1x0aWYgKGlvdl9pdGVyX3J3KGl0ZXIpICE9IFJFQUQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdGlmICghY291bnQpXG4rXHRcdHJldHVybiBmYWxzZTtcbitcdC8qXG4rXHQgKiBTaW1wbGUgZGlvIGlzIGFuIG9wdGltaXphdGlvbiBmb3Igc21hbGwgSU8uIEZpbHRlciBvdXQgbGFyZ2UgSU9cbitcdCAqIGVhcmx5IGFzIGl0J3MgdGhlIG1vc3QgY29tbW9uIGNhc2UgdG8gZmFpbCBmb3IgdHlwaWNhbCBkaXJlY3QgSU9cbitcdCAqIHdvcmtsb2Fkcy5cbitcdCAqL1xuK1x0aWYgKGNvdW50IFx1MDAzZSBpbm9kZS1cdTAwM2VpX3NiLVx1MDAzZXNfYmxvY2tzaXplKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoZGlvX2ZsYWdzIFx1MDAyNiAoSU9NQVBfRElPX0ZPUkNFX1dBSVQgfCBJT01BUF9ESU9fUEFSVElBTCB8XG4rXHRcdFx0IElPTUFQX0RJT19CT1VOQ0UpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoaW9jYi1cdTAwM2VraV9wb3MgKyBjb3VudCBcdTAwM2UgaV9zaXplX3JlYWQoaW5vZGUpKVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoSVNfRU5DUllQVEVEKGlub2RlKSlcbitcdFx0cmV0dXJuIGZhbHNlO1xuK1xuK1x0cmV0dXJuIHRydWU7XG4rfVxuK1xuK3N0YXRpYyBzc2l6ZV90IGlvbWFwX2Rpb19zaW1wbGUoc3RydWN0IGtpb2NiICppb2NiLFxuK1x0XHRzdHJ1Y3QgaW92X2l0ZXIgKml0ZXIsIGNvbnN0IHN0cnVjdCBpb21hcF9vcHMgKm9wcyxcbitcdFx0dm9pZCAqcHJpdmF0ZSwgdW5zaWduZWQgaW50IGRpb19mbGFncylcbit7XG4rXHRzdHJ1Y3QgaW5vZGUgKmlub2RlID0gZmlsZV9pbm9kZShpb2NiLVx1MDAzZWtpX2ZpbHApO1xuK1x0c2l6ZV90IGNvdW50ID0gaW92X2l0ZXJfY291bnQoaXRlcik7XG4rXHRzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSAqc3I7XG4rXHR1bnNpZ25lZCBpbnQgYWxpZ25tZW50O1xuK1x0c3RydWN0IGlvbWFwX2l0ZXIgaW9taSA9IHtcbitcdFx0Lmlub2RlXHRcdD0gaW5vZGUsXG4rXHRcdC5wb3NcdFx0PSBpb2NiLVx1MDAzZWtpX3BvcyxcbitcdFx0Lmxlblx0XHQ9IGNvdW50LFxuK1x0XHQuZmxhZ3NcdFx0PSBJT01BUF9ESVJFQ1QsXG4rXHRcdC5wcml2YXRlXHQ9IHByaXZhdGUsXG4rXHR9O1xuK1x0c3RydWN0IGJpbyAqYmlvO1xuK1x0Ym9vbCB3YWl0X2Zvcl9jb21wbGV0aW9uID0gaXNfc3luY19raW9jYihpb2NiKTtcbitcdHNzaXplX3QgcmV0O1xuK1xuK1x0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9XQUlUKVxuK1x0XHRpb21pLmZsYWdzIHw9IElPTUFQX05PV0FJVDtcbitcbitcdHJldCA9IGtpb2NiX3dyaXRlX2FuZF93YWl0KGlvY2IsIGNvdW50KTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRpbm9kZV9kaW9fYmVnaW4oaW5vZGUpO1xuK1xuK1x0cmV0ID0gb3BzLVx1MDAzZWlvbWFwX2JlZ2luKGlub2RlLCBpb21pLnBvcywgY291bnQsIGlvbWkuZmxhZ3MsXG4rXHRcdFx0ICAgICAgIFx1MDAyNmlvbWkuaW9tYXAsIFx1MDAyNmlvbWkuc3JjbWFwKTtcbitcdGlmIChyZXQpIHtcbitcdFx0aW5vZGVfZGlvX2VuZChpbm9kZSk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHRpZiAoaW9taS5pb21hcC50eXBlICE9IElPTUFQX01BUFBFRCB8fFxuK1x0ICAgIGlvbWkuaW9tYXAub2Zmc2V0ICsgaW9taS5pb21hcC5sZW5ndGggXHUwMDNjIGlvbWkucG9zICsgY291bnQgfHxcbitcdCAgICAoaW9taS5pb21hcC5mbGFncyBcdTAwMjYgSU9NQVBfRl9JTlRFR1JJVFkpKSB7XG4rXHRcdHJldCA9IC1FTk9UQkxLO1xuK1x0XHRnb3RvIG91dF9pb21hcF9lbmQ7XG4rXHR9XG4rXG4rXHRhbGlnbm1lbnQgPSBpb21hcF9kaW9fYWxpZ25tZW50KGlub2RlLCBpb21pLmlvbWFwLmJkZXYsIGRpb19mbGFncyk7XG4rXHRpZiAoKGlvbWkucG9zIHwgY291bnQpIFx1MDAyNiAoYWxpZ25tZW50IC0gMSkpIHtcbitcdFx0cmV0ID0gLUVJTlZBTDtcbitcdFx0Z290byBvdXRfaW9tYXBfZW5kO1xuK1x0fVxuK1xuK1x0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uIFx1MDAyNlx1MDAyNiB1bmxpa2VseSghaW5vZGUtXHUwMDNlaV9zYi1cdTAwM2VzX2Rpb19kb25lX3dxKSkge1xuK1x0XHRyZXQgPSBzYl9pbml0X2Rpb19kb25lX3dxKGlub2RlLVx1MDAzZWlfc2IpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdGdvdG8gb3V0X2lvbWFwX2VuZDtcbitcdH1cbitcbitcdHRyYWNlX2lvbWFwX2Rpb19yd19iZWdpbihpb2NiLCBpdGVyLCBkaW9fZmxhZ3MsIDApO1xuK1xuK1x0aWYgKHVzZXJfYmFja2VkX2l0ZXIoaXRlcikpXG4rXHRcdGRpb19mbGFncyB8PSBJT01BUF9ESU9fVVNFUl9CQUNLRUQ7XG4rXG4rXHRiaW8gPSBiaW9fYWxsb2NfYmlvc2V0KGlvbWkuaW9tYXAuYmRldixcbitcdFx0XHRiaW9faW92X3ZlY3NfdG9fYWxsb2MoaXRlciwgQklPX01BWF9WRUNTKSxcbitcdFx0XHRSRVFfT1BfUkVBRCxcbitcdFx0XHRHRlBfS0VSTkVMLCBcdTAwMjZpb21hcF9kaW9fc2ltcGxlX3Bvb2wpO1xuK1x0c3IgPSBjb250YWluZXJfb2YoYmlvLCBzdHJ1Y3QgaW9tYXBfZGlvX3NpbXBsZSwgYmlvKTtcbitcdHNyLVx1MDAzZWlvY2IgPSBpb2NiO1xuK1x0c3ItXHUwMDNlZGlvX2ZsYWdzID0gZGlvX2ZsYWdzO1xuK1xuK1x0YmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2VjdG9yID0gaW9tYXBfc2VjdG9yKFx1MDAyNmlvbWkuaW9tYXAsIGlvbWkucG9zKTtcbitcdGJpby1cdTAwM2ViaV9pb3ByaW8gPSBpb2NiLVx1MDAzZWtpX2lvcHJpbztcbitcbitcdHJldCA9IGJpb19pb3ZfaXRlcl9nZXRfcGFnZXMoYmlvLCBpdGVyLCBhbGlnbm1lbnQgLSAxKTtcbitcdGlmICh1bmxpa2VseShyZXQpKVxuK1x0XHRnb3RvIG91dF9iaW9fcHV0O1xuK1xuK1x0aWYgKGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUgIT0gY291bnQpIHtcbitcdFx0aW92X2l0ZXJfcmV2ZXJ0KGl0ZXIsIGJpby1cdTAwM2ViaV9pdGVyLmJpX3NpemUpO1xuK1x0XHRyZXQgPSAtRU5PVEJMSztcbitcdFx0Z290byBvdXRfYmlvX3JlbGVhc2VfcGFnZXM7XG4rXHR9XG4rXG4rXHRzci1cdTAwM2VzaXplID0gYmlvLVx1MDAzZWJpX2l0ZXIuYmlfc2l6ZTtcbitcbitcdGlmIChkaW9fZmxhZ3MgXHUwMDI2IElPTUFQX0RJT19VU0VSX0JBQ0tFRClcbitcdFx0YmlvX3NldF9wYWdlc19kaXJ0eShiaW8pO1xuK1xuK1x0aWYgKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfTk9XQUlUKVxuK1x0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9OT1dBSVQ7XG4rXHRpZiAoKGlvY2ItXHUwMDNla2lfZmxhZ3MgXHUwMDI2IElPQ0JfSElQUkkpIFx1MDAyNlx1MDAyNiAhd2FpdF9mb3JfY29tcGxldGlvbikge1xuK1x0XHRiaW8tXHUwMDNlYmlfb3BmIHw9IFJFUV9QT0xMRUQ7XG4rXHRcdFdSSVRFX09OQ0UoaW9jYi1cdTAwM2Vwcml2YXRlLCBiaW8pO1xuK1x0fVxuK1xuK1x0aWYgKG9wcy1cdTAwM2Vpb21hcF9lbmQpXG4rXHRcdG9wcy1cdTAwM2Vpb21hcF9lbmQoaW5vZGUsIGlvbWkucG9zLCBjb3VudCwgY291bnQsIGlvbWkuZmxhZ3MsXG4rXHRcdFx0ICAgICAgIFx1MDAyNmlvbWkuaW9tYXApO1xuK1xuK1x0aWYgKCF3YWl0X2Zvcl9jb21wbGV0aW9uKSB7XG4rXHRcdGJpby1cdTAwM2ViaV9lbmRfaW8gPSBpb21hcF9kaW9fc2ltcGxlX2VuZF9pbztcbitcdFx0c3VibWl0X2JpbyhiaW8pO1xuK1x0XHR0cmFjZV9pb21hcF9kaW9fcndfcXVldWVkKGlub2RlLCBpb21pLnBvcywgY291bnQpO1xuK1x0XHRyZXR1cm4gLUVJT0NCUVVFVUVEO1xuK1x0fVxuK1xuK1x0c3VibWl0X2Jpb193YWl0KGJpbyk7XG4rXHRyZXR1cm4gaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZShzcik7XG4rXG4rb3V0X2Jpb19yZWxlYXNlX3BhZ2VzOlxuK1x0YmlvX3JlbGVhc2VfcGFnZXMoYmlvLCBmYWxzZSk7XG4rb3V0X2Jpb19wdXQ6XG4rXHRiaW9fcHV0KGJpbyk7XG4rb3V0X2lvbWFwX2VuZDpcbitcdGlmIChvcHMtXHUwMDNlaW9tYXBfZW5kKVxuK1x0XHRvcHMtXHUwMDNlaW9tYXBfZW5kKGlub2RlLCBpb21pLnBvcywgY291bnQsIDAsIGlvbWkuZmxhZ3MsXG4rXHRcdFx0ICAgICAgIFx1MDAyNmlvbWkuaW9tYXApO1xuK1x0aW5vZGVfZGlvX2VuZChpbm9kZSk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiBzc2l6ZV90XG4gaW9tYXBfZGlvX3J3KHN0cnVjdCBraW9jYiAqaW9jYiwgc3RydWN0IGlvdl9pdGVyICppdGVyLFxuIFx0XHRjb25zdCBzdHJ1Y3QgaW9tYXBfb3BzICpvcHMsIGNvbnN0IHN0cnVjdCBpb21hcF9kaW9fb3BzICpkb3BzLFxuIFx0XHR1bnNpZ25lZCBpbnQgZGlvX2ZsYWdzLCB2b2lkICpwcml2YXRlLCBzaXplX3QgZG9uZV9iZWZvcmUpXG4ge1xuIFx0c3RydWN0IGlvbWFwX2RpbyAqZGlvO1xuK1x0c3NpemVfdCByZXQ7XG4rXG4rXHQvKlxuK1x0ICogRmFzdCBwYXRoIGZvciBzbWFsbCwgYmxvY2stYWxpZ25lZCBkaXJlY3QgSS9PcyB0aGF0IG1hcCB0byBhXG4rXHQgKiBzaW5nbGUgY29udGlndW91cyBvbi1kaXNrIGV4dGVudC5cbitcdCAqXG4rXHQgKiBAZG9wcyBtdXN0IGJlIE5VTEw6IGEgbm9uLU5VTEwgQGRvcHMgbWVhbnMgdGhlIGNhbGxlciB3YW50cyBpdHNcbitcdCAqIC1cdTAwM2VlbmRfaW8gLyAtXHUwMDNlc3VibWl0X2lvIGhvb2tzIGludm9rZWQsIGFuZCBpbiBwYXJ0aWN1bGFyIHdhbnRzIGl0c1xuK1x0ICogYmlvcyB0byBiZSBhbGxvY2F0ZWQgZnJvbSB0aGUgZmlsZXN5c3RlbS1wcml2YXRlIEBkb3BzLVx1MDAzZWJpb19zZXRcbitcdCAqICh3aG9zZSBmcm9udF9wYWQgc2l6ZXMgYSBmaWxlc3lzdGVtLXByaXZhdGUgd3JhcHBlciBhcm91bmQgdGhlXG4rXHQgKiBiaW8pLiAgVGhlIGZhc3QgcGF0aCBpbnN0ZWFkIGFsbG9jYXRlcyBmcm9tIHRoZSBzaGFyZWRcbitcdCAqIGlvbWFwX2Rpb19zaW1wbGVfcG9vbCwgd2hvc2UgZnJvbnRfcGFkIG1hdGNoZXNcbitcdCAqIHN0cnVjdCBpb21hcF9kaW9fc2ltcGxlOyB0aGUgdHdvIHdyYXBwZXJzIGFyZSBub3RcbitcdCAqIGludGVyY2hhbmdlYWJsZSwgc28gd2UgbXVzdCBmYWxsIGJhY2sgdG8gX19pb21hcF9kaW9fcncoKSBpblxuK1x0ICogdGhhdCBjYXNlLlxuK1x0ICpcbitcdCAqIEBkb25lX2JlZm9yZSBtdXN0IGJlIHplcm86IGEgbm9uLXplcm8gY2FsbGVyLWFjY3VtdWxhdGVkIHJlc2lkdWFsXG4rXHQgKiBjYW5ub3QgYmUgY2FycmllZCB0aHJvdWdoIGEgc2luZ2xlLWJpbyBpbmxpbmUgY29tcGxldGlvbi5cbitcdCAqXG4rXHQgKiAtRU5PVEJMSyBpcyB0aGUgcHJpdmF0ZSBzZW50aW5lbCByZXR1cm5lZCBieSBpb21hcF9kaW9fc2ltcGxlKClcbitcdCAqIHdoZW4gaXQgZGVjaWRlcyB0aGUgcmVxdWVzdCBkb2VzIG5vdCBmaXQgdGhlIGZhc3QgcGF0aC5cbitcdCAqIEluIHRoYXQgY2FzZSB3ZSBwcm9jZWVkIHRvIHRoZSBnZW5lcmljIF9faW9tYXBfZGlvX3J3KCkgc2xvd1xuK1x0ICogcGF0aC4gIEFueSBvdGhlciBlcnJubyBpcyBhIHJlYWwgcmVzdWx0IGFuZCBpcyBwcm9wYWdhdGVkIGFzLWlzLFxuK1x0ICogaW4gcGFydGljdWxhciAtRUFHQUlOIGZvciBJT0NCX05PV0FJVCBtdXN0IHJlYWNoIHRoZSBjYWxsZXIuXG4rXHQgKi9cbitcdGlmICghZG9wcyBcdTAwMjZcdTAwMjYgIWRvbmVfYmVmb3JlIFx1MDAyNlx1MDAyNlxuK1x0ICAgIGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKGlvY2IsIGl0ZXIsIGRpb19mbGFncykpIHtcbitcdFx0cmV0ID0gaW9tYXBfZGlvX3NpbXBsZShpb2NiLCBpdGVyLCBvcHMsIHByaXZhdGUsIGRpb19mbGFncyk7XG4rXHRcdGlmIChyZXQgIT0gLUVOT1RCTEspXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdH1cbiBcbiBcdGRpbyA9IF9faW9tYXBfZGlvX3J3KGlvY2IsIGl0ZXIsIG9wcywgZG9wcywgZGlvX2ZsYWdzLCBwcml2YXRlLFxuIFx0XHRcdCAgICAgZG9uZV9iZWZvcmUpO1xuQEAgLTkwMiwzICsxMTU3LDExIEBAIGlvbWFwX2Rpb19ydyhzdHJ1Y3Qga2lvY2IgKmlvY2IsIHN0cnVjdCBpb3ZfaXRlciAqaXRlcixcbiBcdHJldHVybiBpb21hcF9kaW9fY29tcGxldGUoZGlvKTtcbiB9XG4gRVhQT1JUX1NZTUJPTF9HUEwoaW9tYXBfZGlvX3J3KTtcbitcbitzdGF0aWMgaW50IF9faW5pdCBpb21hcF9kaW9faW5pdCh2b2lkKVxuK3tcbitcdHJldHVybiBiaW9zZXRfaW5pdChcdTAwMjZpb21hcF9kaW9fc2ltcGxlX3Bvb2wsIDQsXG4rXHRcdFx0ICAgb2Zmc2V0b2Yoc3RydWN0IGlvbWFwX2Rpb19zaW1wbGUsIGJpbyksXG4rXHRcdFx0ICAgQklPU0VUX05FRURfQlZFQ1MgfCBCSU9TRVRfUEVSQ1BVX0NBQ0hFKTtcbit9XG4rZnNfaW5pdGNhbGwoaW9tYXBfZGlvX2luaXQpO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTI6MjA6MDUuNTY2MTA3NDY5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTMzNTAwMTM1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBOZXcgRGlyZWN0IEkvTyBGYXN0IFBhdGggUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGVyZSdzIGEgbmV3IHBhdGNoIGFpbWVkIGF0IGFjY2VsZXJhdGluZyBkaXJlY3QgSS9PIHJlYWRzIHdpdGhpbiBgZnMvaW9tYXAvZGlyZWN0LWlvLmNgLiBUaGUgY29yZSBpZGVhIGlzIGEgXCJzaW1wbGVcIiBmYXN0IHBhdGgsIGhhbmRsZWQgYnkgYSBuZXcgZnVuY3Rpb24sIGBpb21hcF9kaW9fc2ltcGxlYC4gSXQgbG9va3MgbGlrZSBgaW9tYXBfZGlvX3NpbXBsZWAgaXMgY29uZGl0aW9uYWxseSBjYWxsZWQgZnJvbSBgaW9tYXBfZGlvX3J3YCBiYXNlZCBvbiB0aGUgcmV0dXJuIHZhbHVlIG9mIGBpb21hcF9kaW9fc2ltcGxlX3N1cHBvcnRlZGAuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgZnVuY3Rpb25hbCBjaGFuZ2UsIGltcGFjdGluZyB0aGUgaGVhcnQgb2YgaW9tYXAgZGlyZWN0IEkvTywgc28gZnV6emluZyB0aGlzIGlzIGFic29sdXRlbHkgY3JpdGljYWwuXG5cbkxldCdzIGRpdmUgaW50byB0aGUgZGV0YWlscy4gSSBzZWUgdGhlIHBhdGNoIGludHJvZHVjZXMgYSBzdWl0ZSBvZiBuZXcgZnVuY3Rpb25zOiBgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWRgLCBgaW9tYXBfZGlvX3NpbXBsZWAsIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlYCwgYGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29ya2AsIGFuZCBgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9gLiBBbmQsIGFzIGV4cGVjdGVkLCBpdCBtb2RpZmllcyBgaW9tYXBfZGlvX3J3YCB0byBhY3R1YWxseSBsZXZlcmFnZSB0aGF0IG5ldyBgaW9tYXBfZGlvX3NpbXBsZWAgZmFzdCBwYXRoLlxuXG5CZWZvcmUgd2UgZXZlbiB0aGluayBhYm91dCBmdXp6aW5nLCBsZXQncyBuYWlsIGRvd24gdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBgZnMvaW9tYXAvZGlyZWN0LWlvLmNgIGlzIGNvbXBpbGVkIHdoZW4gYENPTkZJR19GU19JT01BUGAgaXMgZW5hYmxlZCwgd2hpY2ggbWFrZXMgc2Vuc2UuIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGZzL2lvbWFwL01ha2VmaWxlYCBvciBgZnMvaW9tYXAvS2NvbmZpZ2AgdG8gYmUgYWJzb2x1dGVseSBjZXJ0YWluIEkgdW5kZXJzdGFuZCBhbGwgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9uIG9wdGlvbnMsIGJ1dCB0aGlzIHNob3VsZCBiZSBzdHJhaWdodGZvcndhcmQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMzAsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMjoyMDoxMC45MDExMTEwMDlaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTI5MTA5MDU3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIkNPTkZJR19GU19JT01BUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9pb21hcC9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvaW9tYXAvTWFrZWZpbGU9Nz1jY2ZsYWdzLXkgKz0gLUkgJChzcmMpXFx0XFx0IyBuZWVkZWQgZm9yIHRyYWNlIGV2ZW50c1xcbmZzL2lvbWFwL01ha2VmaWxlLTgtXFxuZnMvaW9tYXAvTWFrZWZpbGU6OTpvYmotJChDT05GSUdfRlNfSU9NQVApXFx0XFx0Kz0gaW9tYXAub1xcbmZzL2lvbWFwL01ha2VmaWxlLTEwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMjoyMDoxMS4wMzAyMjU2NjdaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTc1MDA5NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIENvbmZpZ3VyYXRpb24gZm9yIENPTkZJR19GU19JT01BUCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBDT05GSUdfRlNfSU9NQVBgLiBXaGF0J3MgbWFraW5nIHRoaXMgZnVuY3Rpb25hbGl0eSB0aWNrPyBUaW1lIHRvIGRlbHZlIGludG8gdGhlIGtlcm5lbCdzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhbmQgc291cmNlIGNvZGUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSBkZXBlbmRlbmNpZXMsIHRoZSB1bmRlcmx5aW5nIGFzc3VtcHRpb25zLCBhbmQgYW55IHBvdGVudGlhbCBjb25mbGljdHMgdGhhdCBtaWdodCBhcmlzZSBmcm9tIGVuYWJsaW5nIG9yIGRpc2FibGluZyB0aGlzLiBJIGtub3cgdGhlIGdlbmVyYWwgcHVycG9zZSwgSU9NQVAgaXMgYW4gaW1wb3J0YW50IGNvbXBvbmVudCBmb3IgbWFuYWdpbmcgZGlyZWN0IEkvTy4gTm93LCBsZXQncyBleHBsb3JlIHRoaXMgc3BlY2lmaWMgY29uZmlndXJhdGlvbiBpdGVtIGluIGRldGFpbC4gVW5kZXJzdGFuZGluZyB0aGUgcHJlY2lzZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBgQ09ORklHX0ZTX0lPTUFQYCBhbmQgb3RoZXIgcmVsYXRlZCBmZWF0dXJlcyDigJMgdGhlIGZpbGVzeXN0ZW0gbGF5ZXJzLCB0aGUgYmxvY2sgSS9PIHN0YWNrLCBhbmQgYW55IHNwZWNpZmljIGRyaXZlciBkZXBlbmRlbmNpZXMg4oCTIGlzIGNyaXRpY2FsIGhlcmUuIEknbGwgbmVlZCB0byB0cmFjZSB0aHJvdWdoIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzIGFuZCBjb2RlIHRvIHNlZSBob3cgaXQgYWxsIGZpdHMgdG9nZXRoZXIsIHRoZSB1c3VhbCBwcm9jZXNzIHdoZW4gZGVjaXBoZXJpbmcga2VybmVsIGNvbmZpZ3VyYXRpb25zLiBMZXQncyBzdGFydCBkaWdnaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDU0LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTI6MjA6MTQuMjA1MjM3NTQ2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NDYxODk5MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgRlNfSU9NQVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZnMvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL0tjb25maWc9NTg9Y29uZmlnIEZTX0RBWFxcbi0tXFxuZnMvS2NvbmZpZy02MS1cXHRkZXBlbmRzIG9uIFpPTkVfREVWSUNFXFxuZnMvS2NvbmZpZzo2MjpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9LY29uZmlnLTYzLVxcdHNlbGVjdCBEQVhcXG4tLVxcbmZzL2J0cmZzL0tjb25maWc9Mz1jb25maWcgQlRSRlNfRlNcXG4tLVxcbmZzL2J0cmZzL0tjb25maWctMTQtXFx0c2VsZWN0IFpTVERfREVDT01QUkVTU1xcbmZzL2J0cmZzL0tjb25maWc6MTU6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvYnRyZnMvS2NvbmZpZy0xNi1cXHRzZWxlY3QgUkFJRDZfUFFcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWc9Mz1jb25maWcgRVJPRlNfRlNcXG4tLVxcbmZzL2Vyb2ZzL0tjb25maWctOC1cXHRzZWxlY3QgQ1JZUFRPX0RFRkxBVEUgaWYgRVJPRlNfRlNfWklQX0FDQ0VMXFxuZnMvZXJvZnMvS2NvbmZpZzo5OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2Vyb2ZzL0tjb25maWctMTAtXFx0c2VsZWN0IExaNF9ERUNPTVBSRVNTIGlmIEVST0ZTX0ZTX1pJUFxcbi0tXFxuZnMvZXhmYXQvS2NvbmZpZz0zPWNvbmZpZyBFWEZBVF9GU1xcbi0tXFxuZnMvZXhmYXQvS2NvbmZpZy02LVxcdHNlbGVjdCBOTFNcXG5mcy9leGZhdC9LY29uZmlnOjc6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZXhmYXQvS2NvbmZpZy04LVxcdGhlbHBcXG4tLVxcbmZzL2V4dDIvS2NvbmZpZz0yPWNvbmZpZyBFWFQyX0ZTXFxuLS1cXG5mcy9leHQyL0tjb25maWctNC1cXHRzZWxlY3QgQlVGRkVSX0hFQURcXG5mcy9leHQyL0tjb25maWc6NTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9leHQyL0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5mcy9leHQ0L0tjb25maWc9Mj1jb25maWcgRVhUNF9GU1xcbi0tXFxuZnMvZXh0NC9LY29uZmlnLTctXFx0c2VsZWN0IENSQzMyXFxuZnMvZXh0NC9LY29uZmlnOjg6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvZXh0NC9LY29uZmlnLTktXFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXFxuLS1cXG5mcy9mMmZzL0tjb25maWc9Mj1jb25maWcgRjJGU19GU1xcbi0tXFxuZnMvZjJmcy9LY29uZmlnLTktXFx0c2VsZWN0IEZTX0VOQ1JZUFRJT05fQUxHUyBpZiBGU19FTkNSWVBUSU9OXFxuZnMvZjJmcy9LY29uZmlnOjEwOlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2YyZnMvS2NvbmZpZy0xMS1cXHRzZWxlY3QgTFo0X0NPTVBSRVNTIGlmIEYyRlNfRlNfTFo0XFxuLS1cXG5mcy9mdXNlL0tjb25maWc9Mj1jb25maWcgRlVTRV9GU1xcbi0tXFxuZnMvZnVzZS9LY29uZmlnLTQtXFx0c2VsZWN0IEZTX1BPU0lYX0FDTFxcbmZzL2Z1c2UvS2NvbmZpZzo1OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL2Z1c2UvS2NvbmZpZy02LVxcdGhlbHBcXG4tLVxcbmZzL2dmczIvS2NvbmZpZz0yPWNvbmZpZyBHRlMyX0ZTXFxuLS1cXG5mcy9nZnMyL0tjb25maWctNy1cXHRzZWxlY3QgUVVPVEFDVExcXG5mcy9nZnMyL0tjb25maWc6ODpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9nZnMyL0tjb25maWctOS1cXHRoZWxwXFxuLS1cXG5mcy9ocGZzL0tjb25maWc9Mj1jb25maWcgSFBGU19GU1xcbi0tXFxuZnMvaHBmcy9LY29uZmlnLTUtXFx0c2VsZWN0IEJVRkZFUl9IRUFEXFxuZnMvaHBmcy9LY29uZmlnOjY6XFx0c2VsZWN0IEZTX0lPTUFQXFxuZnMvaHBmcy9LY29uZmlnLTctXFx0aGVscFxcbi0tXFxuZnMvbnRmcy9LY29uZmlnPTI9Y29uZmlnIE5URlNfRlNcXG4tLVxcbmZzL250ZnMvS2NvbmZpZy00LVxcdHNlbGVjdCBOTFNcXG5mcy9udGZzL0tjb25maWc6NTpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy9udGZzL0tjb25maWctNi1cXHRoZWxwXFxuLS1cXG5mcy94ZnMvS2NvbmZpZz0yPWNvbmZpZyBYRlNfRlNcXG4tLVxcbmZzL3hmcy9LY29uZmlnLTYtXFx0c2VsZWN0IENSQzMyXFxuZnMveGZzL0tjb25maWc6NzpcXHRzZWxlY3QgRlNfSU9NQVBcXG5mcy94ZnMvS2NvbmZpZy04LVxcdGhlbHBcXG4tLVxcbmZzL3pvbmVmcy9LY29uZmlnPTE9Y29uZmlnIFpPTkVGU19GU1xcbi0tXFxuZnMvem9uZWZzL0tjb25maWctNC1cXHRkZXBlbmRzIG9uIEJMS19ERVZfWk9ORURcXG5mcy96b25lZnMvS2NvbmZpZzo1OlxcdHNlbGVjdCBGU19JT01BUFxcbmZzL3pvbmVmcy9LY29uZmlnLTYtXFx0c2VsZWN0IENSQzMyXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEyOjIwOjE0LjM4OTg2MjYyOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgwMTQxMTI4MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERpcmVjdCBJL08gYW5kIGlvbWFwIGZvciBUYXJnZXRlZCBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IGhvdyB0byBlZmZlY3RpdmVseSB0YXJnZXQgYGlvbWFwX2Rpb19zaW1wbGVgIGFuZCBpdHMgcmVsYXRlZCBmdW5jdGlvbnMgZm9yIGZ1enppbmcuIFNpbmNlIGBGU19JT01BUGAgaXMgd2lkZWx5IHVzZWQsIHRoZXJlJ3Mgbm8gbmVlZCB0byBleHBsaWNpdGx5IGVuYWJsZSBpdCwgYnV0IGRlZmluaW5nIHNwZWNpZmljIGZpbGVzeXN0ZW1zIGxpa2UgYFhGU19GU2AsIGBFWFQ0X0ZTYCwgb3IgYEJUUkZTX0ZTYCB3aWxsIG1ha2Ugc3VyZSB0aGF0IGlvbWFwIGlzIGJlaW5nIHVzZWQsIGFsdGhvdWdoIHN5emthbGxlciBwcm9iYWJseSBhbHJlYWR5IGhhcyB0aG9zZSBjb3ZlcmVkLiBJIGNoZWNrZWQgZm9yIGFueSBzcGVjaWZpYyBjb25maWdzIHJlbGF0ZWQgdG8gYGlvbWFwX2Rpb19zaW1wbGVgLCBidXQgaXQgbG9va3MgbGlrZSBpdCdzIGp1c3QgcGFydCBvZiBgZGlyZWN0LWlvLmNgLlxuXG5NeSBwcmltYXJ5IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgY29yZSBmdW5jdGlvbnMuIEhlcmUgYXJlIHRoZSBvbmVzIEkgd2FudCB0byB6ZXJvIGluIG9uOiBgaW9tYXBfZGlvX3NpbXBsZWAsIGBpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlYCwgYGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29ya2AsIGFuZCBgaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9gLiBJIGluaXRpYWxseSB3b25kZXJlZCBhYm91dCBgaW9tYXBfZGlvX3NpbXBsZV9zdXBwb3J0ZWRgLCBzaW5jZSBpdCdzIGFuIGlubGluZSBmdW5jdGlvbiwgYnV0IEkgd2FudGVkIHRvIG1ha2Ugc3VyZSBpdCB3YXMgYWN0dWFsbHkgaW5saW5lZC5cblxuQSBxdWljayBjaGVjayBjb25maXJtZWQgdGhhdCBpdCBpcyBpbmRlZWQgaW5saW5lOiBgc3RhdGljIGlubGluZSBib29sIGlvbWFwX2Rpb19zaW1wbGVfc3VwcG9ydGVkKC4uLilgLiBUaGVyZWZvcmUsIEknbGwgZXhjbHVkZSBpdCBmcm9tIHRoZSB0YXJnZXQgbGlzdC5cblxuSSBoYWQgY29uc2lkZXJlZCBgaW9tYXBfZGlvX3J3YCwgYnV0IHNpbmNlIGl0J3MgYSBoZWF2aWx5IHVzZWQgZnVuY3Rpb24sIEkgd2FudCB0byBhdm9pZCBpdCBpbiBmYXZvciBvZiBuZXdseSBhZGRlZCBmdW5jdGlvbnMuXG5cblNvLCB0aGUga2V5IGZ1bmN0aW9ucyBmb3IgZnV6emluZyBhcmU6IGBpb21hcF9kaW9fc2ltcGxlYCwgYGlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVgLCBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrYCwgYW5kIGBpb21hcF9kaW9fc2ltcGxlX2VuZF9pb2AuXG5cbkZvciBlbmFibGluZyBjb25maWdzLCB3aGlsZSBgRlNfSU9NQVBgIHNob3VsZCB3b3JrLCBJIHNob3VsZCBzcGVjaWZ5IGVpdGhlciBgRlNfSU9NQVBgIG9yIGBFWFQ0X0ZTYCwgYFhGU19GU2AsIG9yIGBCVFJGU19GU2AgdG8gbWFrZSBzdXJlIHdlIGhhdmUgYSBmaWxlc3lzdGVtIHRoYXQgdXNlcyBpb21hcC4gSG93ZXZlciwgYEZTX0lPTUFQYCBzZWVtcyB0byBiZSBhIGhpZGRlbiBjb25maWcsIHNvIEknbGwgbmVlZCB0byBkb3VibGUtY2hlY2sgYGZzL0tjb25maWdgIHRvIGNvbmZpcm0gdGhhdC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODI3OCwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMjoyMDoyMi40MDM5NzgzNTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYzMzE4ODEzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBGU19JT01BUFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJmcy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZnMvS2NvbmZpZz0xMj1jb25maWcgVkFMSURBVEVfRlNfUEFSU0VSXFxuLS1cXG5mcy9LY29uZmlnLTE3LVxcbmZzL0tjb25maWc6MTg6Y29uZmlnIEZTX0lPTUFQXFxuZnMvS2NvbmZpZy0xOS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEyOjIwOjIyLjU2NzMwMTA4MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjczMjkyMzg5ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ29uZmlndXJhdGlvbiBBc3Nlc3NtZW50KipcblxuT2theSwgc28gdGhpcyBpcyBhIGhpZGRlbiBjb25maWcsIGdvdCBpdC4gV2UgY291bGQgbGlzdCB0aGUgZmlsZXN5c3RlbSBjb25maWdzIGxpa2UgYFhGU19GU2AsIGBFWFQ0X0ZTYCwgYW5kIGBCVFJGU19GU2AgaW4gdGhlIGBFbmFibGVDb25maWdzYCBsaXN0LCBidXQgdGhvc2UgYXJlIGV4dHJlbWVseSBnZW5lcmljLiBCdXQgdGhlIHByb21wdCBzYWlkIG5vdCB0byBpbmNsdWRlIGdlbmVyaWMgY29uZmlncywgb25seSBvbmVzIHRoYXQgZGlyZWN0bHkgcmVsYXRlIHRvIHRoZSBtb2RpZmllZCBjb2RlLiBIbW0sIEkgY291bGQganVzdCBsZWF2ZSBgRW5hYmxlQ29uZmlnc2AgZW1wdHkgb3IgcHV0IGluIHRob3NlIHNwZWNpZmljIGZpbGVzeXN0ZW1zLlxuXG5XYWl0LCB0aGUgcHJvbXB0IHNhaWQgdG8gYXZvaWQgdGhlIGdlbmVyaWMgb25lcyBzaW5jZSB0aGV5IGFyZSBhbHJlYWR5IGVuYWJsZWQuIFNpbmNlIGBGU19JT01BUGAgZ2V0cyBzZWxlY3RlZCBmb3IgdGhvc2UgZ2VuZXJpYyBmaWxlc3lzdGVtcywgSSB0aGluayBJJ2xsIGp1c3QgbGVhdmUgYEVuYWJsZUNvbmZpZ3NgIGVtcHR5IGZvciBub3cuXG5cbkxldCBtZSBtYWtlIHN1cmUgbXkgcmVhc29uaW5nIGlzIHNvdW5kOiBUaGlzIHBhdGNoIGFkZHMgYSBmYXN0IHBhdGggZm9yIGRpcmVjdCBJL08gcmVhZHMgd2l0aGluIHRoZSBpb21hcCBzdWJzeXN0ZW0uIEl0J3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgSS9PIGxvZ2ljLCBhY2Nlc3NpYmxlIGZyb20gdXNlcnNwYWNlIHRocm91Z2ggZGlyZWN0IEkvTyBzeXN0ZW0gY2FsbHMgb24gZmlsZXN5c3RlbXMgbGlrZSBYRlMsIGV4dDQsIGFuZCBidHJmcy4gSXQgKmRlZmluaXRlbHkqIG5lZWRzIGZ1enppbmcgdG8gdmVyaWZ5IHRoYXQgdGhlIG5ldyBmYXN0IHBhdGggaGFuZGxlcyB2YXJpb3VzIEkvTyBzY2VuYXJpb3MgcHJvcGVybHkuXG5cbkxldCdzIGRvdWJsZS1jaGVjayBxdWlja2x5IGZvciBhbnkgb3RoZXIgZnVuY3Rpb25zLiBBaGEsIGBpb21hcF9kaW9fYmlvX3JlbGVhc2VfcGFnZXNgIGFuZCBgaW9tYXBfZGlvX2FsaWdubWVudGAgYXJlIGJvdGggaW5saW5lLCBhbmQgYGlvbWFwX2Rpb19pbml0YCBpcyBhbiBpbml0Y2FsbCwgc28gaXQgb25seSBydW5zIG9uY2UgYXQgYm9vdC5cblxuU28sIHRoZSBjcml0aWNhbCBzeW1ib2xzIHRvIGZvY3VzIG9uIGFyZTpcbiogICBgaW9tYXBfZGlvX3NpbXBsZWBcbiogICBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZWBcbiogICBgaW9tYXBfZGlvX3NpbXBsZV9jb21wbGV0ZV93b3JrYFxuKiAgIGBpb21hcF9kaW9fc2ltcGxlX2VuZF9pb2BcblxuT2theSwgbm8gb3RoZXIgY29uZmlncyBzZWVtIHJlbGV2YW50LiBUaW1lIHRvIGNhbGwgYHNldC1yZXN1bHRzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6OTQwOSwiT3V0cHV0VG9rZW5zIjoxNTksIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTI6MjA6MjkuODk2NTQyNjg2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE2MTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlXCIsXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlXCIsXG4gICAgXCJpb21hcF9kaW9fc2ltcGxlX2NvbXBsZXRlX3dvcmtcIixcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVfZW5kX2lvXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmYXN0IHBhdGggZm9yIGRpcmVjdCBJL08gcmVhZHMgKGBpb21hcF9kaW9fc2ltcGxlYCkgaW4gdGhlIGlvbWFwIHN1YnN5c3RlbS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIGNvcmUga2VybmVsIEkvTyBsb2dpYyB0aGF0IGlzIHJlYWNoYWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgZGlyZWN0IEkvTyBzeXN0ZW0gY2FsbHMgb24gc3VwcG9ydGVkIGZpbGVzeXN0ZW1zLiBJdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSB0aGUgbmV3IGZhc3QgcGF0aCBoYW5kbGVzIHZhcmlvdXMgSS9PIGNvbmRpdGlvbnMgY29ycmVjdGx5LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVcIixcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVcIixcbiAgICBcImlvbWFwX2Rpb19zaW1wbGVfY29tcGxldGVfd29ya1wiLFxuICAgIFwiaW9tYXBfZGlvX3NpbXBsZV9lbmRfaW9cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZhc3QgcGF0aCBmb3IgZGlyZWN0IEkvTyByZWFkcyAoYGlvbWFwX2Rpb19zaW1wbGVgKSBpbiB0aGUgaW9tYXAgc3Vic3lzdGVtLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gY29yZSBrZXJuZWwgSS9PIGxvZ2ljIHRoYXQgaXMgcmVhY2hhYmxlIGZyb20gdXNlcnNwYWNlIHZpYSBkaXJlY3QgSS9PIHN5c3RlbSBjYWxscyBvbiBzdXBwb3J0ZWQgZmlsZXN5c3RlbXMuIEl0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIHRoZSBuZXcgZmFzdCBwYXRoIGhhbmRsZXMgdmFyaW91cyBJL08gY29uZGl0aW9ucyBjb3JyZWN0bHkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/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-workflowp7tl2[1] Phase: Succeeded StartedAt: 2026-06-29 12:20:42 +0000 UTC FinishedAt: 2026-06-29 12:20:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-29 12:20:42 +0000 UTC FinishedAt: 2026-06-29 12:20:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[2] Phase: Succeeded StartedAt: 2026-06-29 12:20:42 +0000 UTC FinishedAt: 2026-06-29 16:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-06-29 12:20:42 +0000 UTC FinishedAt: 2026-06-29 16:24:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-06-29 12:20:42 +0000 UTC FinishedAt: 2026-06-29 12:21:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-06-29 12:20:42 +0000 UTC FinishedAt: 2026-06-29 12:20:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp7tl2/series-workflowp7tl2-convert-artifact-1978777237/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-06-29 12:21:07 +0000 UTC FinishedAt: 2026-06-29 12:46:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-06-29 12:21:07 +0000 UTC FinishedAt: 2026-06-29 12:46:30 +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:*d18a052f-9c1a-4f04-81a7-cf514b2588af,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-workflowp7tl2/series-workflowp7tl2-convert-artifact-1978777237/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": "62769e80-603c-4034-b2cd-45ea4e90fa40", "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-workflowp7tl2/series-workflowp7tl2-build-action-2930906875/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-06-29 12:21:07 +0000 UTC FinishedAt: 2026-06-29 12:46:20 +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:*d18a052f-9c1a-4f04-81a7-cf514b2588af,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-workflowp7tl2/series-workflowp7tl2-convert-artifact-1978777237/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": "62769e80-603c-4034-b2cd-45ea4e90fa40", "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-workflowp7tl2/series-workflowp7tl2-build-action-2930906875/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-06-29 12:46:30 +0000 UTC FinishedAt: 2026-06-29 12:46:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-06-29 12:46:30 +0000 UTC FinishedAt: 2026-06-29 12:46:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-06-29 12:46:30 +0000 UTC FinishedAt: 2026-06-29 12:47:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-06-29 12:46:30 +0000 UTC FinishedAt: 2026-06-29 12:46:57 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp7tl2/series-workflowp7tl2-convert-artifact-26714224/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-06-29 12:47:06 +0000 UTC FinishedAt: 2026-06-29 12:49:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-06-29 12:47:06 +0000 UTC FinishedAt: 2026-06-29 12:49:12 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*62769e80-603c-4034-b2cd-45ea4e90fa40,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-workflowp7tl2/series-workflowp7tl2-build-action-2930906875/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-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-06-29 12:49:24 +0000 UTC FinishedAt: 2026-06-29 12:49:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-06-29 12:49:24 +0000 UTC FinishedAt: 2026-06-29 12:49:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-06-29 12:49:24 +0000 UTC FinishedAt: 2026-06-29 13:18:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-06-29 12:49:24 +0000 UTC FinishedAt: 2026-06-29 13:18:04 +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:*d18a052f-9c1a-4f04-81a7-cf514b2588af,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-workflowp7tl2/series-workflowp7tl2-convert-artifact-26714224/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": "03b5413d-2839-47cb-8031-6a01c0019673", "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-workflowp7tl2/series-workflowp7tl2-build-action-2451702124/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-06-29 12:49:24 +0000 UTC FinishedAt: 2026-06-29 13:17:54 +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:*d18a052f-9c1a-4f04-81a7-cf514b2588af,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-workflowp7tl2/series-workflowp7tl2-convert-artifact-26714224/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": "03b5413d-2839-47cb-8031-6a01c0019673", "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-workflowp7tl2/series-workflowp7tl2-build-action-2451702124/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-06-29 13:18:04 +0000 UTC FinishedAt: 2026-06-29 13:18:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-06-29 13:18:04 +0000 UTC FinishedAt: 2026-06-29 13:18:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-06-29 13:18:04 +0000 UTC FinishedAt: 2026-06-29 13:20:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-06-29 13:18:04 +0000 UTC FinishedAt: 2026-06-29 13:20:09 +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:*03b5413d-2839-47cb-8031-6a01c0019673,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-workflowp7tl2/series-workflowp7tl2-build-action-2451702124/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-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-06-29 13:20:19 +0000 UTC FinishedAt: 2026-06-29 16:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-06-29 13:20:19 +0000 UTC FinishedAt: 2026-06-29 16:24:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*62769e80-603c-4034-b2cd-45ea4e90fa40,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*03b5413d-2839-47cb-8031-6a01c0019673,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-workflowp7tl2/series-workflowp7tl2-build-action-2930906875/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-workflowp7tl2/series-workflowp7tl2-build-action-2451702124/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-06-29 13:20:19 +0000 UTC FinishedAt: 2026-06-29 13:20:39 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-06-29 13:20:19 +0000 UTC FinishedAt: 2026-06-29 13:20:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowp7tl2/series-workflowp7tl2-convert-artifact-2464418793/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-06-29 13:20:19 +0000 UTC FinishedAt: 2026-06-29 13:20:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-06-29 13:20:19 +0000 UTC FinishedAt: 2026-06-29 13:20:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-06-29 13:20:19 +0000 UTC FinishedAt: 2026-06-29 13:20:19 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-06-29 13:20:39 +0000 UTC FinishedAt: 2026-06-29 16:24:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7tl2[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["fs"],"focus_symbols":["iomap_dio_simple","iomap_dio_simple_complete","iomap_dio_simple_complete_work","iomap_dio_simple_end_io"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","series_id":"6ac42e56-6e1e-4f19-b7aa-ac785fbdaa89","tree_name":"torvalds","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/torvalds/linux"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-06-29 13:20:39 +0000 UTC FinishedAt: 2026-06-29 16:24:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*62769e80-603c-4034-b2cd-45ea4e90fa40,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*03b5413d-2839-47cb-8031-6a01c0019673,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-workflowp7tl2/series-workflowp7tl2-build-action-2930906875/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-workflowp7tl2/series-workflowp7tl2-build-action-2451702124/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-workflowp7tl2/series-workflowp7tl2-convert-artifact-2464418793/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,}